30
30
static const string INTERNAL("INTERNAL");
31
31
static const string FUNCTION("FUNCTION");
33
static const string DEFAULT("DEFAULT");
34
static const string FIXED("FIXED");
35
static const string DYNAMIC("DYNAMIC");
36
static const string COMPRESSED("COMPRESSED");
37
static const string REDUNDANT("REDUNDANT");
38
static const string COMPACT("COMPACT");
39
static const string PAGE("PAGE");
34
41
static const string VARCHAR("VARCHAR");
35
42
static const string DOUBLE("DOUBLE");
43
50
static const string DATETIME("DATETIME");
45
52
TablesTool::TablesTool() :
46
plugin::TableFunction("DATA_DICTIONARY", "TABLES")
48
55
add_field("TABLE_SCHEMA");
49
56
add_field("TABLE_NAME");
50
57
add_field("TABLE_TYPE");
51
add_field("TABLE_ARCHETYPE");
52
58
add_field("ENGINE");
53
59
add_field("ROW_FORMAT", 10);
54
60
add_field("TABLE_COLLATION");
55
61
add_field("TABLE_CREATION_TIME");
56
62
add_field("TABLE_UPDATE_TIME");
57
add_field("TABLE_COMMENT", plugin::TableFunction::STRING, 2048, true);
58
add_field("AUTO_INCREMENT", plugin::TableFunction::NUMBER, 0, false);
59
add_field("TABLE_UUID", plugin::TableFunction::STRING, 36, true);
60
add_field("TABLE_VERSION", plugin::TableFunction::NUMBER, 0, true);
63
add_field("TABLE_COMMENT", 2048);
63
66
TablesTool::Generator::Generator(Field **arg) :
64
plugin::TableFunction::Generator(arg),
65
all_tables_generator(getSession())
67
SchemasTool::Generator(arg),
68
is_tables_primed(false)
72
bool TablesTool::Generator::nextTableCore()
80
if (not isSchemaPrimed())
84
Session *session= current_session;
85
SchemaIdentifier identifier(schema_name());
86
plugin::StorageEngine::getTableNames(*session, identifier, table_names);
87
table_iterator= table_names.begin();
88
is_tables_primed= true;
91
if (table_iterator == table_names.end())
96
Session *session= current_session;
97
TableIdentifier identifier(schema_name().c_str(), table_name().c_str());
98
plugin::StorageEngine::getTableDefinition(*session,
69
106
bool TablesTool::Generator::nextTable()
71
drizzled::message::table::shared_ptr table_ptr;
72
while ((table_ptr= all_tables_generator))
108
while (not nextTableCore())
74
table_message.CopyFrom(*table_ptr);
111
if (is_tables_primed && table_iterator != table_names.end())
114
if (not nextSchema())
117
is_tables_primed= false;
81
123
bool TablesTool::Generator::populate()
133
void TablesTool::Generator::pushRow(message::Table::TableOptions::RowType type)
138
case message::Table::TableOptions::ROW_TYPE_DEFAULT:
141
case message::Table::TableOptions::ROW_TYPE_FIXED:
144
case message::Table::TableOptions::ROW_TYPE_DYNAMIC:
147
case message::Table::TableOptions::ROW_TYPE_COMPRESSED:
150
case message::Table::TableOptions::ROW_TYPE_REDUNDANT:
153
case message::Table::TableOptions::ROW_TYPE_COMPACT:
156
case message::Table::TableOptions::ROW_TYPE_PAGE:
162
void TablesTool::Generator::pushType(message::Table::Field::FieldType type)
167
case message::Table::Field::VARCHAR:
170
case message::Table::Field::DOUBLE:
173
case message::Table::Field::BLOB:
176
case message::Table::Field::ENUM:
179
case message::Table::Field::INTEGER:
182
case message::Table::Field::BIGINT:
185
case message::Table::Field::DECIMAL:
188
case message::Table::Field::DATE:
191
case message::Table::Field::TIMESTAMP:
194
case message::Table::Field::DATETIME:
92
200
void TablesTool::Generator::fill()
153
251
/* TABLE_UPDATE_TIME */
154
time_arg= getTableMessage().update_timestamp();
252
time_arg= table_proto.update_timestamp();
155
253
localtime_r(&time_arg, &tm_buffer);
156
254
strftime(buffer, sizeof(buffer), "%a %b %d %H:%M:%S %Y", &tm_buffer);
159
257
/* TABLE_COMMENT */
160
if (getTableMessage().options().has_comment())
162
push(getTableMessage().options().comment());
170
push(getTableMessage().options().auto_increment_value());
173
push(getTableMessage().uuid());
176
push(getTableMessage().version());
258
push(table_proto.options().comment());