Drizzled Public API Documentation

datadict_table_message.cc
00001 /*
00002   Copyright (C) 2010 Stewart Smith
00003 
00004   This program is free software; you can redistribute it and/or
00005   modify it under the terms of the GNU General Public License
00006   as published by the Free Software Foundation; either version 2
00007   of the License, or (at your option) any later version.
00008 
00009   This program is distributed in the hope that it will be useful,
00010   but WITHOUT ANY WARRANTY; without even the implied warranty of
00011   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00012   GNU General Public License for more details.
00013 
00014   You should have received a copy of the GNU General Public License
00015   along with this program; if not, write to the Free Software
00016   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
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 }