1
/* -*- mode: c++; c-basic-offset: 2; indent-tabs-mode: nil; -*-
2
* vim:expandtab:shiftwidth=2:tabstop=2:smarttab:
4
* Copyright (C) 2010 Brian Aker
5
* Copyright (C) 2009 Sun Microsystems, Inc.
7
* This program is free software; you can redistribute it and/or modify
8
* it under the terms of the GNU General Public License as published by
9
* the Free Software Foundation; either version 2 of the License, or
10
* (at your option) any later version.
12
* This program is distributed in the hope that it will be useful,
13
* but WITHOUT ANY WARRANTY; without even the implied warranty of
14
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
* GNU General Public License for more details.
17
* You should have received a copy of the GNU General Public License
18
* along with this program; if not, write to the Free Software
19
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
23
This is a "work in progress". The concept needs to be replicated throughout
24
the code, but we will start with baby steps for the moment. To not incur
25
cost until we are complete, for the moment it will do no allocation.
27
This is mainly here so that it can be used in the SE interface for
30
This will replace Table_ident.
33
#ifndef DRIZZLED_IDENTIFIER_TABLE_H
34
#define DRIZZLED_IDENTIFIER_TABLE_H
36
#include <drizzled/enum.h>
37
#include "drizzled/definitions.h"
38
#include "drizzled/message/table.pb.h"
49
#include <boost/functional/hash.hpp>
51
#include "drizzled/visibility.h"
56
namespace identifier {
58
class DRIZZLED_API Table : public Schema
61
typedef message::Table::TableType Type;
62
typedef std::vector <Table> vector;
63
typedef const Table& const_reference;
64
typedef Table& reference;
68
std::vector<char> key_buffer;
78
const char *vector() const
80
return &key_buffer[0];
83
std::vector<char> &vectorPtr()
88
void set(size_t resize_arg, const std::string &a, const std::string &b);
90
friend bool operator==(const Key &left, const Key &right)
92
if (left.hash_value == right.hash_value and left.key_buffer.size() == right.key_buffer.size())
94
if (memcmp(&left.key_buffer[0], &right.key_buffer[0], left.key_buffer.size()) == 0)
101
friend bool operator<(const Key &left, const Key &right)
103
return left.key_buffer < right.key_buffer;
108
return key_buffer.size();
111
size_t getHashValue() const
121
std::string key_path;
122
std::string table_name;
128
size_t getKeySize() const
130
return getSchemaName().size() + getTableName().size() + 2;
135
Table(const drizzled::Table &table);
137
Table(const identifier::Schema &schema,
138
const std::string &table_name_arg,
139
Type tmp_arg= message::Table::STANDARD) :
142
table_name(table_name_arg)
147
Table( const std::string &db_arg,
148
const std::string &table_name_arg,
149
Type tmp_arg= message::Table::STANDARD) :
152
table_name(table_name_arg)
157
Table( const std::string &schema_name_arg,
158
const std::string &table_name_arg,
159
const std::string &path_arg ) :
160
Schema(schema_name_arg),
161
type(message::Table::TEMPORARY),
163
table_name(table_name_arg)
168
using Schema::compare;
172
if (type == message::Table::TEMPORARY || type == message::Table::INTERNAL)
178
static bool isView(message::Table::TableType arg) // Not a SQL view, but a view for I_S
183
case message::Table::STANDARD:
184
case message::Table::TEMPORARY:
185
case message::Table::INTERNAL:
187
case message::Table::FUNCTION:
194
bool isView() const // Not a SQL view, but a view for I_S
204
virtual void getSQLPath(std::string &sql_path) 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<(Table::const_reference left, Table::const_reference right)
223
if (left.getKey() < right.getKey())
231
friend bool operator==(Table::const_reference left, Table::const_reference 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);
243
static size_t build_table_filename(std::string &path, const std::string &db, const std::string &table_name, bool is_tmp);
244
static size_t build_tmptable_filename(std::string &buffer);
245
static size_t build_tmptable_filename(std::vector<char> &buffer);
248
bool isValid() const;
250
size_t getHashValue() const
255
const Key &getKey() const
261
std::ostream& operator<<(std::ostream& output, Table::const_reference identifier);
262
std::size_t hash_value(Table const& b);
263
std::size_t hash_value(Table::Key const& b);
265
} /* namespace identifier */
266
} /* namespace drizzled */
268
#endif /* DRIZZLED_IDENTIFIER_TABLE_H */