00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include <config.h>
00022 #include <plugin/information_schema_dictionary/dictionary.h>
00023
00024 using namespace std;
00025 using namespace drizzled;
00026
00027 ReferentialConstraints::ReferentialConstraints() :
00028 InformationSchema("REFERENTIAL_CONSTRAINTS")
00029 {
00030 add_field("CONSTRAINT_CATALOG");
00031 add_field("CONSTRAINT_SCHEMA");
00032 add_field("CONSTRAINT_NAME");
00033 add_field("UNIQUE_CONSTRAINT_CATALOG");
00034 add_field("UNIQUE_CONSTRAINT_SCHEMA");
00035 add_field("UNIQUE_CONSTRAINT_NAME");
00036 add_field("MATCH_OPTION");
00037 add_field("UPDATE_RULE");
00038 add_field("DELETE_RULE");
00039 }
00040
00041 ReferentialConstraints::Generator::Generator(drizzled::Field **arg) :
00042 InformationSchema::Generator(arg),
00043 foreign_key_generator(getSession())
00044 {
00045 }
00046
00047 bool ReferentialConstraints::Generator::populate()
00048 {
00049 drizzled::generator::FieldPair field_pair;
00050 while (!!(field_pair= foreign_key_generator))
00051 {
00052 const drizzled::message::Table *table_message= field_pair.first;
00053 const message::Table::ForeignKeyConstraint &foreign_key(table_message->fk_constraint(field_pair.second));
00054
00055
00056 push(table_message->catalog());
00057
00058
00059 push(table_message->schema());
00060
00061
00062 push(foreign_key.name());
00063
00064
00065 push(table_message->catalog());
00066
00067
00068 push(table_message->schema());
00069
00070
00071 push(" ");
00072
00073
00074 push(drizzled::message::type(foreign_key.match()));
00075
00076
00077 push(drizzled::message::type(foreign_key.update_option()));
00078
00079
00080 push(drizzled::message::type(foreign_key.delete_option()));
00081
00082 return true;
00083 }
00084
00085 return false;
00086 }