23 #include <plugin/schema_dictionary/dictionary.h>
28 ForeignKeysTool::ForeignKeysTool() :
29 plugin::TableFunction(
"DATA_DICTIONARY",
"FOREIGN_KEYS")
31 add_field(
"CONSTRAINT_SCHEMA", plugin::TableFunction::STRING, MAXIMUM_IDENTIFIER_LENGTH,
false);
32 add_field(
"CONSTRAINT_TABLE", plugin::TableFunction::STRING, MAXIMUM_IDENTIFIER_LENGTH,
false);
33 add_field(
"CONSTRAINT_NAME");
34 add_field(
"CONSTRAINT_COLUMNS");
36 add_field(
"REFERENCED_TABLE_NAME");
37 add_field(
"REFERENCED_TABLE_COLUMNS");
39 add_field(
"MATCH_OPTION");
40 add_field(
"UPDATE_RULE");
41 add_field(
"DELETE_RULE");
44 ForeignKeysTool::Generator::Generator(
Field **arg) :
45 plugin::TableFunction::Generator(arg),
46 all_tables_generator(getSession()),
52 bool ForeignKeysTool::Generator::nextTable()
54 drizzled::message::table::shared_ptr table_ptr;
55 while ((table_ptr= all_tables_generator))
57 table_message.CopyFrom(*table_ptr);
64 bool ForeignKeysTool::Generator::fillFkey()
74 if (keyPos < getTableMessage().fk_constraint_size())
76 fkey= getTableMessage().fk_constraint(keyPos);
90 bool ForeignKeysTool::Generator::populate()
98 void ForeignKeysTool::Generator::fill()
101 push(getTableMessage().schema());
104 push(getTableMessage().name());
112 for (ssize_t x= 0; x < fkey.column_names_size(); ++x)
116 source.push_back(
'`');
117 source.append(fkey.column_names(x));
118 source.push_back(
'`');
124 push(fkey.references_table_name());
127 std::string destination;
129 for (ssize_t x= 0; x < fkey.references_columns_size(); ++x)
132 destination.append(
", ");
133 destination.push_back(
'`');
134 destination.append(fkey.references_columns(x));
135 destination.push_back(
'`');
141 push(drizzled::message::type(fkey.match()));
144 push(drizzled::message::type(fkey.update_option()));
147 push(drizzled::message::type(fkey.delete_option()));
TODO: Rename this file - func.h is stupid.