00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #include <config.h>
00020
00021 #include <haildb.h>
00022
00023 #include "haildb_engine.h"
00024
00025 #include <drizzled/charset_info.h>
00026 #include <drizzled/message/table.pb.h>
00027
00028 using namespace drizzled;
00029
00030 int get_haildb_system_table_message(const char* table_name, drizzled::message::Table *table_message)
00031 {
00032 if (strcmp(table_name, "SYS_TABLES") == 0)
00033 {
00034 message::Engine *engine= table_message->mutable_engine();
00035 engine->set_name("InnoDB");
00036 table_message->set_name("haildb_sys_tables");
00037 table_message->set_schema("data_dictionary");
00038 table_message->set_type(message::Table::STANDARD);
00039 table_message->set_creation_timestamp(0);
00040 table_message->set_update_timestamp(0);
00041
00042 message::Table::TableOptions *options= table_message->mutable_options();
00043 options->set_collation_id(my_charset_bin.number);
00044 options->set_collation(my_charset_bin.name);
00045
00046 message::Table::Field *field= table_message->add_field();
00047 field->set_name("NAME");
00048 field->set_type(message::Table::Field::VARCHAR);
00049 message::Table::Field::StringFieldOptions *stropt= field->mutable_string_options();
00050 stropt->set_length(IB_MAX_TABLE_NAME_LEN);
00051 stropt->set_collation_id(my_charset_bin.number);
00052 stropt->set_collation(my_charset_bin.name);
00053
00054 field= table_message->add_field();
00055 field->set_name("ID");
00056 field->set_type(message::Table::Field::BIGINT);
00057
00058 field= table_message->add_field();
00059 field->set_name("N_COLS");
00060 field->set_type(message::Table::Field::INTEGER);
00061
00062 field= table_message->add_field();
00063 field->set_name("TYPE");
00064 field->set_type(message::Table::Field::INTEGER);
00065
00066 field= table_message->add_field();
00067 field->set_name("MIX_ID");
00068 field->set_type(message::Table::Field::VARCHAR);
00069 stropt= field->mutable_string_options();
00070 stropt->set_collation_id(my_charset_bin.number);
00071 stropt->set_collation(my_charset_bin.name);
00072 stropt->set_length(IB_MAX_TABLE_NAME_LEN);
00073
00074 field= table_message->add_field();
00075 field->set_name("MIX_LEN");
00076 field->set_type(message::Table::Field::INTEGER);
00077
00078 field= table_message->add_field();
00079 field->set_name("CLUSTER_NAME");
00080 field->set_type(message::Table::Field::VARCHAR);
00081 stropt= field->mutable_string_options();
00082 stropt->set_collation_id(my_charset_bin.number);
00083 stropt->set_collation(my_charset_bin.name);
00084 stropt->set_length(IB_MAX_TABLE_NAME_LEN);
00085
00086 field= table_message->add_field();
00087 field->set_name("SPACE");
00088 field->set_type(message::Table::Field::INTEGER);
00089
00090 message::Table::Index *index= table_message->add_indexes();
00091 index->set_name("PRIMARY");
00092 index->set_is_primary(true);
00093 index->set_is_unique(true);
00094 index->set_type(message::Table::Index::BTREE);
00095 index->set_key_length(IB_MAX_TABLE_NAME_LEN);
00096 message::Table::Index::IndexPart *part= index->add_index_part();
00097 part->set_fieldnr(0);
00098 part->set_compare_length(IB_MAX_TABLE_NAME_LEN);
00099
00100 return 0;
00101 }
00102 else if (strcmp(table_name, "SYS_COLUMNS") == 0)
00103 {
00104 message::Table::Field::StringFieldOptions *stropt;
00105 message::Engine *engine= table_message->mutable_engine();
00106 engine->set_name("InnoDB");
00107 table_message->set_name("haildb_sys_columns");
00108 table_message->set_schema("data_dictionary");
00109 table_message->set_type(message::Table::STANDARD);
00110 table_message->set_creation_timestamp(0);
00111 table_message->set_update_timestamp(0);
00112
00113 message::Table::TableOptions *options= table_message->mutable_options();
00114 options->set_collation_id(my_charset_bin.number);
00115 options->set_collation(my_charset_bin.name);
00116
00117 message::Table::Field *field= table_message->add_field();
00118 field->set_name("TABLE_ID");
00119 field->set_type(message::Table::Field::BIGINT);
00120
00121 field= table_message->add_field();
00122 field->set_name("POS");
00123 field->set_type(message::Table::Field::INTEGER);
00124
00125 field= table_message->add_field();
00126 field->set_name("NAME");
00127 field->set_type(message::Table::Field::VARCHAR);
00128 stropt= field->mutable_string_options();
00129 stropt->set_collation_id(my_charset_bin.number);
00130 stropt->set_collation(my_charset_bin.name);
00131 stropt->set_length(IB_MAX_TABLE_NAME_LEN);
00132
00133 field= table_message->add_field();
00134 field->set_name("MTYPE");
00135 field->set_type(message::Table::Field::INTEGER);
00136
00137 field= table_message->add_field();
00138 field->set_name("PRTYPE");
00139 field->set_type(message::Table::Field::INTEGER);
00140
00141 field= table_message->add_field();
00142 field->set_name("LEN");
00143 field->set_type(message::Table::Field::INTEGER);
00144
00145 field= table_message->add_field();
00146 field->set_name("PREC");
00147 field->set_type(message::Table::Field::INTEGER);
00148
00149 message::Table::Index *index= table_message->add_indexes();
00150 index->set_name("PRIMARY");
00151 index->set_is_primary(true);
00152 index->set_is_unique(true);
00153 index->set_type(message::Table::Index::BTREE);
00154 index->set_key_length(sizeof(uint64_t) + sizeof(uint32_t));
00155 message::Table::Index::IndexPart *part= index->add_index_part();
00156 part->set_fieldnr(0);
00157 part->set_compare_length(sizeof(uint64_t));
00158 part= index->add_index_part();
00159 part->set_fieldnr(1);
00160 part->set_compare_length(sizeof(uint32_t));
00161
00162 return 0;
00163 }
00164 else if (strcmp(table_name, "SYS_INDEXES") == 0)
00165 {
00166 message::Table::Field::StringFieldOptions *stropt;
00167 message::Engine *engine= table_message->mutable_engine();
00168 engine->set_name("InnoDB");
00169 table_message->set_name("haildb_sys_indexes");
00170 table_message->set_schema("data_dictionary");
00171 table_message->set_type(message::Table::STANDARD);
00172 table_message->set_creation_timestamp(0);
00173 table_message->set_update_timestamp(0);
00174
00175 message::Table::TableOptions *options= table_message->mutable_options();
00176 options->set_collation_id(my_charset_bin.number);
00177 options->set_collation(my_charset_bin.name);
00178
00179 message::Table::Field *field= table_message->add_field();
00180 field->set_name("TABLE_ID");
00181 field->set_type(message::Table::Field::BIGINT);
00182
00183 field= table_message->add_field();
00184 field->set_name("ID");
00185 field->set_type(message::Table::Field::BIGINT);
00186
00187 field= table_message->add_field();
00188 field->set_name("NAME");
00189 field->set_type(message::Table::Field::VARCHAR);
00190 stropt= field->mutable_string_options();
00191 stropt->set_collation_id(my_charset_bin.number);
00192 stropt->set_collation(my_charset_bin.name);
00193 stropt->set_length(IB_MAX_TABLE_NAME_LEN);
00194
00195 field= table_message->add_field();
00196 field->set_name("N_FIELDS");
00197 field->set_type(message::Table::Field::INTEGER);
00198
00199 field= table_message->add_field();
00200 field->set_name("TYPE");
00201 field->set_type(message::Table::Field::INTEGER);
00202
00203 field= table_message->add_field();
00204 field->set_name("SPACE");
00205 field->set_type(message::Table::Field::INTEGER);
00206
00207 field= table_message->add_field();
00208 field->set_name("PAGE_NO");
00209 field->set_type(message::Table::Field::INTEGER);
00210
00211 message::Table::Index *index= table_message->add_indexes();
00212 index->set_name("PRIMARY");
00213 index->set_is_primary(true);
00214 index->set_is_unique(true);
00215 index->set_type(message::Table::Index::BTREE);
00216 index->set_key_length(sizeof(uint64_t) + sizeof(uint32_t));
00217 message::Table::Index::IndexPart *part= index->add_index_part();
00218 part->set_fieldnr(0);
00219 part->set_compare_length(sizeof(uint64_t));
00220 part= index->add_index_part();
00221 part->set_fieldnr(1);
00222 part->set_compare_length(sizeof(uint32_t));
00223
00224 return 0;
00225 }
00226 else if (strcmp(table_name, "SYS_FIELDS") == 0)
00227 {
00228 message::Table::Field::StringFieldOptions *stropt;
00229 message::Engine *engine= table_message->mutable_engine();
00230 engine->set_name("InnoDB");
00231 table_message->set_name("haildb_sys_fields");
00232 table_message->set_schema("data_dictionary");
00233 table_message->set_type(message::Table::STANDARD);
00234 table_message->set_creation_timestamp(0);
00235 table_message->set_update_timestamp(0);
00236
00237 message::Table::TableOptions *options= table_message->mutable_options();
00238 options->set_collation_id(my_charset_bin.number);
00239 options->set_collation(my_charset_bin.name);
00240
00241 message::Table::Field *field= table_message->add_field();
00242 field->set_name("INDEX_ID");
00243 field->set_type(message::Table::Field::BIGINT);
00244
00245 field= table_message->add_field();
00246 field->set_name("POS");
00247 field->set_type(message::Table::Field::INTEGER);
00248
00249 field= table_message->add_field();
00250 field->set_name("COL_NAME");
00251 field->set_type(message::Table::Field::VARCHAR);
00252 stropt= field->mutable_string_options();
00253 stropt->set_collation_id(my_charset_bin.number);
00254 stropt->set_collation(my_charset_bin.name);
00255 stropt->set_length(IB_MAX_TABLE_NAME_LEN);
00256
00257 message::Table::Index *index= table_message->add_indexes();
00258 index->set_name("PRIMARY");
00259 index->set_is_primary(true);
00260 index->set_is_unique(true);
00261 index->set_type(message::Table::Index::BTREE);
00262 index->set_key_length(sizeof(uint64_t) + sizeof(uint32_t));
00263 message::Table::Index::IndexPart *part= index->add_index_part();
00264 part->set_fieldnr(0);
00265 part->set_compare_length(sizeof(uint64_t));
00266 part= index->add_index_part();
00267 part->set_fieldnr(1);
00268 part->set_compare_length(sizeof(uint32_t));
00269
00270 return 0;
00271 }
00272 else if (strcmp(table_name, "SYS_FOREIGN") == 0)
00273 {
00274 message::Table::Field::StringFieldOptions *stropt;
00275 message::Engine *engine= table_message->mutable_engine();
00276 engine->set_name("InnoDB");
00277 table_message->set_name("haildb_sys_foreign");
00278 table_message->set_schema("data_dictionary");
00279 table_message->set_type(message::Table::STANDARD);
00280 table_message->set_creation_timestamp(0);
00281 table_message->set_update_timestamp(0);
00282
00283 message::Table::TableOptions *options= table_message->mutable_options();
00284 options->set_collation_id(my_charset_bin.number);
00285 options->set_collation(my_charset_bin.name);
00286
00287 message::Table::Field *field= table_message->add_field();
00288 field->set_name("ID");
00289 field->set_type(message::Table::Field::BIGINT);
00290
00291 field= table_message->add_field();
00292 field->set_name("FOR_NAME");
00293 field->set_type(message::Table::Field::VARCHAR);
00294 stropt= field->mutable_string_options();
00295 stropt->set_collation_id(my_charset_bin.number);
00296 stropt->set_collation(my_charset_bin.name);
00297 stropt->set_length(IB_MAX_TABLE_NAME_LEN);
00298
00299 field= table_message->add_field();
00300 field->set_name("REF_NAME");
00301 field->set_type(message::Table::Field::VARCHAR);
00302 stropt= field->mutable_string_options();
00303 stropt->set_collation_id(my_charset_bin.number);
00304 stropt->set_collation(my_charset_bin.name);
00305 stropt->set_length(IB_MAX_TABLE_NAME_LEN);
00306
00307 field= table_message->add_field();
00308 field->set_name("N_COLS");
00309 field->set_type(message::Table::Field::INTEGER);
00310
00311 message::Table::Index *index= table_message->add_indexes();
00312 index->set_name("PRIMARY");
00313 index->set_is_primary(true);
00314 index->set_is_unique(true);
00315 index->set_type(message::Table::Index::BTREE);
00316 index->set_key_length(sizeof(uint64_t));
00317 message::Table::Index::IndexPart *part= index->add_index_part();
00318 part->set_fieldnr(0);
00319 part->set_compare_length(sizeof(uint64_t));
00320
00321 index= table_message->add_indexes();
00322 index->set_name("FOR_IND");
00323 index->set_is_primary(false);
00324 index->set_is_unique(false);
00325 index->set_type(message::Table::Index::BTREE);
00326 index->set_key_length(IB_MAX_TABLE_NAME_LEN);
00327 part= index->add_index_part();
00328 part->set_fieldnr(1);
00329 part->set_compare_length(IB_MAX_TABLE_NAME_LEN);
00330
00331 index= table_message->add_indexes();
00332 index->set_name("REF_IND");
00333 index->set_is_primary(false);
00334 index->set_is_unique(false);
00335 index->set_type(message::Table::Index::BTREE);
00336 index->set_key_length(IB_MAX_TABLE_NAME_LEN);
00337 part= index->add_index_part();
00338 part->set_fieldnr(2);
00339 part->set_compare_length(IB_MAX_TABLE_NAME_LEN);
00340 return 0;
00341 }
00342 else if (strcmp(table_name, "SYS_FOREIGN_COLS") == 0)
00343 {
00344 message::Table::Field::StringFieldOptions *stropt;
00345 message::Engine *engine= table_message->mutable_engine();
00346 engine->set_name("InnoDB");
00347 table_message->set_name("haildb_sys_foreign_cols");
00348 table_message->set_schema("data_dictionary");
00349 table_message->set_type(message::Table::STANDARD);
00350 table_message->set_creation_timestamp(0);
00351 table_message->set_update_timestamp(0);
00352
00353 message::Table::TableOptions *options= table_message->mutable_options();
00354 options->set_collation_id(my_charset_bin.number);
00355 options->set_collation(my_charset_bin.name);
00356
00357 message::Table::Field *field= table_message->add_field();
00358 field->set_name("ID");
00359 field->set_type(message::Table::Field::BIGINT);
00360
00361 field= table_message->add_field();
00362 field->set_name("POS");
00363 field->set_type(message::Table::Field::INTEGER);
00364
00365 field= table_message->add_field();
00366 field->set_name("FOR_COL_NAME");
00367 field->set_type(message::Table::Field::VARCHAR);
00368 stropt= field->mutable_string_options();
00369 stropt->set_collation_id(my_charset_bin.number);
00370 stropt->set_collation(my_charset_bin.name);
00371 stropt->set_length(IB_MAX_TABLE_NAME_LEN);
00372
00373 field= table_message->add_field();
00374 field->set_name("REF_COL_NAME");
00375 field->set_type(message::Table::Field::VARCHAR);
00376 stropt= field->mutable_string_options();
00377 stropt->set_collation_id(my_charset_bin.number);
00378 stropt->set_collation(my_charset_bin.name);
00379 stropt->set_length(IB_MAX_TABLE_NAME_LEN);
00380
00381 message::Table::Index *index= table_message->add_indexes();
00382 index->set_name("PRIMARY");
00383 index->set_is_primary(true);
00384 index->set_is_unique(true);
00385 index->set_type(message::Table::Index::BTREE);
00386 index->set_key_length(sizeof(uint64_t) + sizeof(uint32_t));
00387 message::Table::Index::IndexPart *part= index->add_index_part();
00388 part->set_fieldnr(0);
00389 part->set_compare_length(sizeof(uint64_t));
00390 part= index->add_index_part();
00391 part->set_fieldnr(1);
00392 part->set_compare_length(sizeof(uint32_t));
00393
00394 return 0;
00395 }
00396
00397 return -1;
00398 }