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 Columns::Columns() :
00028 InformationSchema("COLUMNS")
00029 {
00030 add_field("TABLE_CATALOG", plugin::TableFunction::STRING, MAXIMUM_IDENTIFIER_LENGTH, false);
00031 add_field("TABLE_SCHEMA", plugin::TableFunction::STRING, MAXIMUM_IDENTIFIER_LENGTH, false);
00032 add_field("TABLE_NAME", plugin::TableFunction::STRING, MAXIMUM_IDENTIFIER_LENGTH, false);
00033 add_field("COLUMN_NAME", plugin::TableFunction::STRING, MAXIMUM_IDENTIFIER_LENGTH, false);
00034 add_field("ORDINAL_POSITION", plugin::TableFunction::NUMBER, 0, false);
00035 add_field("COLUMN_DEFAULT", plugin::TableFunction::STRING, MAXIMUM_IDENTIFIER_LENGTH, true);
00036 add_field("IS_NULLABLE", plugin::TableFunction::BOOLEAN, 0, false);
00037 add_field("DATA_TYPE", plugin::TableFunction::STRING, MAXIMUM_IDENTIFIER_LENGTH, false);
00038 add_field("CHARACTER_MAXIMUM_LENGTH", plugin::TableFunction::NUMBER, 0, true);
00039 add_field("CHARACTER_OCTET_LENGTH", plugin::TableFunction::NUMBER, 0, true);
00040 add_field("NUMERIC_PRECISION", plugin::TableFunction::NUMBER, 0, true);
00041 add_field("NUMERIC_PRECISION_RADIX", plugin::TableFunction::NUMBER, 0, true);
00042 add_field("NUMERIC_SCALE", plugin::TableFunction::NUMBER, 0, true);
00043 add_field("DATETIME_PRECISION", plugin::TableFunction::STRING, MAXIMUM_IDENTIFIER_LENGTH, true);
00044 add_field("CHARACTER_SET_CATALOG", plugin::TableFunction::STRING, MAXIMUM_IDENTIFIER_LENGTH, true);
00045 add_field("CHARACTER_SET_SCHEMA", plugin::TableFunction::STRING, MAXIMUM_IDENTIFIER_LENGTH, true);
00046 add_field("CHARACTER_SET_NAME", plugin::TableFunction::STRING, MAXIMUM_IDENTIFIER_LENGTH, true);
00047 add_field("COLLATION_CATALOG", plugin::TableFunction::STRING, MAXIMUM_IDENTIFIER_LENGTH, true);
00048 add_field("COLLATION_SCHEMA", plugin::TableFunction::STRING, MAXIMUM_IDENTIFIER_LENGTH, true);
00049 add_field("COLLATION_NAME", plugin::TableFunction::STRING, MAXIMUM_IDENTIFIER_LENGTH, true);
00050 add_field("DOMAIN_CATALOG", plugin::TableFunction::STRING, MAXIMUM_IDENTIFIER_LENGTH, true);
00051 add_field("DOMAIN_SCHEMA", plugin::TableFunction::STRING, MAXIMUM_IDENTIFIER_LENGTH, true);
00052 add_field("DOMAIN_NAME", plugin::TableFunction::STRING, MAXIMUM_IDENTIFIER_LENGTH, true);
00053 }
00054
00055 Columns::Generator::Generator(drizzled::Field **arg) :
00056 InformationSchema::Generator(arg),
00057 field_generator(getSession())
00058 {
00059 }
00060
00061 bool Columns::Generator::populate()
00062 {
00063 drizzled::generator::FieldPair field_pair;
00064 while (!!(field_pair= field_generator))
00065 {
00066 const drizzled::message::Table *table_message= field_pair.first;
00067 int32_t field_iterator= field_pair.second;
00068 const message::Table::Field &field(table_message->field(field_pair.second));
00069
00070
00071 push(table_message->catalog());
00072
00073
00074 push(table_message->schema());
00075
00076
00077 push(table_message->name());
00078
00079
00080 push(field.name());
00081
00082
00083 push(static_cast<int64_t>(field_iterator));
00084
00085
00086 if (field.options().has_default_value())
00087 {
00088 push(field.options().default_value());
00089 }
00090 else
00091 {
00092 push();
00093 }
00094
00095
00096 push(not field.constraints().is_notnull());
00097
00098
00099 push(drizzled::message::type(field));
00100
00101
00102 if (field.string_options().has_length())
00103 {
00104 push(static_cast<int64_t>(field.string_options().length()));
00105 }
00106 else
00107 {
00108 push();
00109 }
00110
00111
00112 if (field.string_options().has_length())
00113 {
00114 push(static_cast<int64_t>(field.string_options().length() * 4));
00115 }
00116 else
00117 {
00118 push();
00119 }
00120
00121
00122 if (field.numeric_options().has_precision())
00123 {
00124 push(static_cast<int64_t>(field.numeric_options().precision()));
00125 }
00126 else
00127 {
00128 push();
00129 }
00130
00131
00132 push();
00133
00134
00135 if (field.numeric_options().has_scale())
00136 {
00137 push(static_cast<int64_t>(field.numeric_options().scale()));
00138 }
00139 else
00140 {
00141 push();
00142 }
00143
00144
00145 push();
00146
00147
00148 push();
00149
00150
00151 push();
00152
00153
00154 push();
00155
00156
00157 push();
00158
00159
00160 push();
00161
00162
00163 if (field.string_options().has_collation())
00164 {
00165 push(field.string_options().collation());
00166 }
00167 else
00168 {
00169 push();
00170 }
00171
00172
00173 push();
00174
00175
00176 push();
00177
00178
00179 push();
00180
00181 return true;
00182 }
00183
00184 return false;
00185 }