22 #include <plugin/information_schema_dictionary/dictionary.h>
25 using namespace drizzled;
27 KeyColumnUsage::KeyColumnUsage() :
30 add_field(
"CONSTRAINT_CATALOG", plugin::TableFunction::STRING, MAXIMUM_IDENTIFIER_LENGTH,
false);
31 add_field(
"CONSTRAINT_SCHEMA", plugin::TableFunction::STRING, MAXIMUM_IDENTIFIER_LENGTH,
false);
32 add_field(
"CONSTRAINT_NAME", plugin::TableFunction::STRING, MAXIMUM_IDENTIFIER_LENGTH,
false);
33 add_field(
"TABLE_CATALOG", plugin::TableFunction::STRING, MAXIMUM_IDENTIFIER_LENGTH,
false);
34 add_field(
"TABLE_SCHEMA", plugin::TableFunction::STRING, MAXIMUM_IDENTIFIER_LENGTH,
false);
35 add_field(
"TABLE_NAME", plugin::TableFunction::STRING, MAXIMUM_IDENTIFIER_LENGTH,
false);
36 add_field(
"COLUMN_NAME", plugin::TableFunction::STRING, MAXIMUM_IDENTIFIER_LENGTH,
false);
37 add_field(
"ORDINAL_POSITION", plugin::TableFunction::NUMBER, 0,
false);
42 generator(getSession()),
44 index_part_iterator(0),
45 fk_constraint_iterator(0),
46 fk_constraint_column_name_iterator(0)
48 while (not (table_message= generator))
52 bool KeyColumnUsage::Generator::populate()
54 if (not table_message)
59 if (index_iterator != table_message->indexes_size())
63 if (index.is_primary() || index.is_unique())
67 push(table_message->catalog());
70 push(table_message->schema());
76 push(table_message->catalog());
79 push(table_message->schema());
82 push(table_message->name());
85 int32_t fieldnr= index.index_part(index_part_iterator).fieldnr();
86 push(table_message->field(fieldnr).name());
89 push(static_cast<int64_t>((index_part_iterator +1)));
91 if (index_part_iterator == index.index_part_size() -1)
94 index_part_iterator= 0;
98 index_part_iterator++;
105 if (fk_constraint_iterator != table_message->fk_constraint_size())
112 push(table_message->catalog());
115 push(table_message->schema());
118 push(foreign_key.name());
121 push(table_message->catalog());
124 push(table_message->schema());
127 push(table_message->name());
130 push(foreign_key.column_names(fk_constraint_column_name_iterator));
133 push(static_cast<int64_t>((fk_constraint_column_name_iterator + 1)));
135 if (fk_constraint_column_name_iterator == foreign_key.column_names_size() -1)
137 fk_constraint_iterator++;
138 fk_constraint_column_name_iterator= 0;
142 fk_constraint_column_name_iterator++;
150 index_part_iterator= 0;
152 fk_constraint_iterator= 0;
153 fk_constraint_column_name_iterator= 0;
155 }
while ((table_message= generator));