35 #include <drizzled/enum.h>
37 #include <drizzled/message/table.pb.h>
39 #include <drizzled/util/backtrace.h>
50 #include <boost/functional/hash.hpp>
53 #include <drizzled/common_fwd.h>
54 #include <drizzled/identifier/schema.h>
57 namespace identifier {
62 typedef message::Table::TableType Type;
66 std::vector<char> key_buffer;
80 const char *vector()
const
82 return &key_buffer[0];
85 const char *schema_name()
const
87 return &key_buffer[0] +schema_offset;
90 const char *table_name()
const
92 return &key_buffer[0] +table_offset;
100 std::vector<char> &vectorPtr()
105 void set(
size_t resize_arg,
const std::string &catalog_arg,
const std::string &schema_arg,
const std::string &table_arg);
107 friend bool operator==(
const Key &left,
const Key &right)
109 if (left.hash_value == right.hash_value and left.key_buffer.size() == right.key_buffer.size())
111 if (memcmp(&left.key_buffer[0], &right.key_buffer[0], left.key_buffer.size()) == 0)
118 friend bool operator<(
const Key &left,
const Key &right)
120 return left.key_buffer < right.key_buffer;
125 return key_buffer.size();
128 size_t getHashValue()
const
138 std::string key_path;
139 std::string table_name;
145 size_t getKeySize()
const
147 return getCatalogName().size() + getSchemaName().size() + getTableName().size() + 3;
155 const std::string &table_name_arg,
156 Type tmp_arg= message::Table::STANDARD);
159 const std::string &db_arg,
160 const std::string &table_name_arg,
161 Type tmp_arg= message::Table::STANDARD);
164 const std::string &schema_name_arg,
165 const std::string &table_name_arg,
166 const std::string &path_arg );
168 using Schema::compare;
172 if (type == message::Table::TEMPORARY || type == message::Table::INTERNAL)
178 static bool isView(message::Table::TableType arg)
183 case message::Table::STANDARD:
184 case message::Table::TEMPORARY:
185 case message::Table::INTERNAL:
187 case message::Table::FUNCTION:
204 virtual std::string getSQLPath()
const;
206 virtual const std::string &getPath()
const;
207 const std::string &getKeyPath()
const;
209 void setPath(
const std::string &new_path)
214 const std::string &getTableName()
const
219 void copyToTableMessage(message::Table &message)
const;
221 friend bool operator<(
const Table& left,
const Table& right)
223 if (left.getKey() < right.getKey())
231 friend bool operator==(
const Table& left,
const Table& right)
233 if (left.getHashValue() == right.getHashValue())
235 if (left.getKey() == right.getKey())
242 static uint32_t filename_to_tablename(
const char *from,
char *to, uint32_t to_length);
244 static std::string build_tmptable_filename();
247 bool isValid()
const;
249 size_t getHashValue()
const
254 const Key &getKey()
const
260 std::ostream& operator<<(std::ostream& output,
const Table&);
261 std::ostream& operator<<(std::ostream& output,
const Table::Key&);
262 std::size_t hash_value(Table
const& b);
263 std::size_t hash_value(Table::Key
const& b);
TODO: Rename this file - func.h is stupid.
Visibility Control Macros.