22 #include <plugin/schema_dictionary/dictionary.h>
28 ColumnsTool::ColumnsTool() :
31 add_field(
"TABLE_SCHEMA", plugin::TableFunction::STRING, MAXIMUM_IDENTIFIER_LENGTH,
false);
32 add_field(
"TABLE_NAME", plugin::TableFunction::STRING, MAXIMUM_IDENTIFIER_LENGTH,
false);
34 add_field(
"COLUMN_NAME", plugin::TableFunction::STRING, MAXIMUM_IDENTIFIER_LENGTH,
false);
35 add_field(
"COLUMN_TYPE");
36 add_field(
"ORDINAL_POSITION", plugin::TableFunction::NUMBER, 0,
false);
37 add_field(
"COLUMN_DEFAULT", plugin::TableFunction::VARBINARY, 65535,
true);
38 add_field(
"COLUMN_DEFAULT_IS_NULL", plugin::TableFunction::BOOLEAN, 0,
false);
39 add_field(
"COLUMN_DEFAULT_UPDATE");
40 add_field(
"IS_SIGNED", plugin::TableFunction::BOOLEAN, 0,
true);
41 add_field(
"IS_AUTO_INCREMENT", plugin::TableFunction::BOOLEAN, 0,
false);
42 add_field(
"IS_NULLABLE", plugin::TableFunction::BOOLEAN, 0,
false);
43 add_field(
"IS_INDEXED", plugin::TableFunction::BOOLEAN, 0,
false);
44 add_field(
"IS_USED_IN_PRIMARY", plugin::TableFunction::BOOLEAN, 0,
false);
45 add_field(
"IS_UNIQUE", plugin::TableFunction::BOOLEAN, 0,
false);
46 add_field(
"IS_MULTI", plugin::TableFunction::BOOLEAN, 0,
false);
47 add_field(
"IS_FIRST_IN_MULTI", plugin::TableFunction::BOOLEAN, 0,
false);
48 add_field(
"INDEXES_FOUND_IN", plugin::TableFunction::NUMBER, 0,
false);
49 add_field(
"DATA_TYPE");
50 add_field(
"DATA_ARCHETYPE");
51 add_field(
"CHARACTER_MAXIMUM_LENGTH", plugin::TableFunction::NUMBER);
52 add_field(
"CHARACTER_OCTET_LENGTH", plugin::TableFunction::NUMBER);
53 add_field(
"NUMERIC_PRECISION", plugin::TableFunction::NUMBER);
54 add_field(
"NUMERIC_SCALE", plugin::TableFunction::NUMBER);
56 add_field(
"ENUM_VALUES", plugin::TableFunction::STRING, 1024,
true);
58 add_field(
"COLLATION_NAME");
60 add_field(
"COLUMN_COMMENT", plugin::TableFunction::STRING, 1024,
true);
64 ColumnsTool::Generator::Generator(
Field **arg) :
66 field_generator(getSession())
70 bool ColumnsTool::Generator::populate()
72 drizzled::generator::FieldPair field_pair;
74 while (!!(field_pair= field_generator))
77 int32_t field_iterator= field_pair.second;
81 push(table_message->schema());
84 push(table_message->name());
90 push(drizzled::message::type(column.type()));
93 push(static_cast<int64_t>(field_iterator));
96 if (column.options().has_default_value())
98 push(column.options().default_value());
100 else if (column.options().has_default_bin_value())
102 push(column.options().default_bin_value().c_str(), column.options().default_bin_value().length());
104 else if (column.options().has_default_expression())
106 push(column.options().default_expression());
114 push(column.options().default_null());
117 push(column.options().update_expression());
120 if (drizzled::message::is_numeric(column))
130 push(column.numeric_options().is_autoincrement());
133 push(not column.constraints().is_notnull());
136 bool is_indexed=
false;
137 bool is_primary=
false;
138 bool is_unique=
false;
139 bool is_multi=
false;
140 bool is_multi_first=
false;
141 int64_t indexes_found_in= 0;
142 for (int32_t x= 0; x < table_message->indexes_size() ; x++)
146 for (int32_t y= 0; y < index.index_part_size() ; y++)
150 if (static_cast<int32_t>(index_part.fieldnr()) == field_iterator)
155 if (index.is_primary())
158 if (index.is_unique())
161 if (index.index_part_size() > 1)
166 is_multi_first=
true;
176 push(is_multi_first);
177 push(indexes_found_in);
180 push(drizzled::message::type(column));
183 push(drizzled::message::type(column.type()));
186 push(static_cast<int64_t>(column.string_options().length()));
189 push(static_cast<int64_t>(column.string_options().length()) * 4);
192 push(static_cast<int64_t>(column.numeric_options().precision()));
195 push(static_cast<int64_t>(column.numeric_options().scale()));
198 if (column.type() == drizzled::message::Table::Field::ENUM)
201 size_t num_field_values= column.enumeration_values().field_value_size();
202 for (
size_t x= 0; x < num_field_values; ++x)
204 const string &type= column.enumeration_values().field_value(x);
207 destination.push_back(
',');
209 destination.push_back(
'\'');
210 destination.append(type);
211 destination.push_back(
'\'');
221 push(column.string_options().collation());
224 if (column.has_comment())
226 push(column.comment());
TODO: Rename this file - func.h is stupid.