25 #include <drizzled/message/table.pb.h>
27 #include <boost/program_options.hpp>
30 using namespace drizzled;
32 namespace po=boost::program_options;
40 engine->set_name(
"InnoDB");
43 string option_names[2]= {
48 string option_values[2]= {
49 "/var/drizzle/indexdir"
50 ,
"/var/drizzle/datadir"
54 for (int16_t x= 0; x < 2; x++)
56 option= engine->add_options();
57 option->set_name(option_names[x]);
58 option->set_state(option_values[x]);
64 uint16_t num_index_parts,
65 uint32_t field_indexes[],
66 uint32_t compare_lengths[],
75 index= table->add_indexes();
77 index->set_name(name);
78 index->set_type(message::Table::Index::BTREE);
79 index->set_is_primary(is_primary);
80 index->set_is_unique(is_unique);
84 for(
int i=0; i< num_index_parts; i++)
85 key_length+= compare_lengths[i];
87 index->set_key_length(key_length);
89 while (x < num_index_parts)
91 index_part= index->add_index_part();
93 index_part->set_fieldnr(field_indexes[x]);
95 if (compare_lengths[x] > 0)
96 index_part->set_compare_length(compare_lengths[x]);
112 table->set_name(name);
113 table->set_type(message::Table::STANDARD);
116 for (x= 0; x < 3; x++)
119 field= table->add_field();
120 field_constraints= field->mutable_constraints();
121 string_field_options= field->mutable_string_options();
123 snprintf(buffer,
sizeof(buffer),
"sample%u", x);
125 field->set_name(buffer);
126 field->set_type(message::Table::Field::VARCHAR);
128 field_constraints->set_is_notnull((x % 2));
130 string_field_options->set_length(rand() % 100);
134 string_field_options->set_collation(
"utf8_swedish_ci");
140 field= table->add_field();
141 field->set_name(
"number");
142 field->set_type(message::Table::Field::INTEGER);
146 field= table->add_field();
147 field->set_type(message::Table::Field::ENUM);
148 field->set_name(
"colors");
150 enumeration_options= field->mutable_enumeration_values();
151 enumeration_options->add_field_value(
"red");
152 enumeration_options->add_field_value(
"blue");
153 enumeration_options->add_field_value(
"green");
157 field= table->add_field();
158 field->set_name(
"some_btye_string");
159 field->set_type(message::Table::Field::BLOB);
164 field= table->add_field();
165 field->set_name(
"important_number");
166 field->set_type(message::Table::Field::DECIMAL);
168 field_constraints= field->mutable_constraints();
169 field_constraints->set_is_notnull(
false);
171 numeric_field_options= field->mutable_numeric_options();
172 numeric_field_options->set_precision(8);
173 numeric_field_options->set_scale(3);
177 uint32_t fields_in_index[1]= {6};
178 uint32_t compare_lengths_in_index[1]= {0};
179 bool is_unique=
true;
180 bool is_primary=
false;
182 new_index_to_table(table,
"idx_important_decimal", 1, fields_in_index, compare_lengths_in_index, is_primary, is_unique);
187 uint32_t fields_in_index[2]= {0,1};
188 uint32_t compare_lengths_in_index[2]= {20,35};
189 bool is_unique=
true;
190 bool is_primary=
true;
191 new_index_to_table(table,
"idx_varchar1_2", 2, fields_in_index, compare_lengths_in_index, is_primary, is_unique);
205 table->set_name(
"t1");
206 table->set_catalog(
"LOCAL");
207 table->set_type(message::Table::INTERNAL);
209 tableopts= table->mutable_options();
210 tableopts->set_comment(
"Table without a StorageEngine message");
213 field= table->add_field();
214 field->set_name(
"number");
215 field->set_type(message::Table::Field::INTEGER);
221 int main(
int argc,
char* argv[])
225 GOOGLE_PROTOBUF_VERIFY_VERSION;
227 po::options_description desc(
"Allowed options");
229 (
"help",
"produce help message")
230 (
"table-number,t", po::value<int>(&table_number)->default_value(0),
"Table Number");
232 po::variables_map vm;
233 po::positional_options_description p;
234 p.add(
"table-name", 1);
237 int style = po::command_line_style::default_style & ~po::command_line_style::allow_guessing;
239 po::store(po::command_line_parser(argc, argv).options(desc).style(style).
240 positional(p).run(), vm);
242 if (not vm.count(
"table-name"))
244 fprintf(stderr,
"Expected Table name argument\n\n");
245 cerr << desc << endl;
251 switch (table_number)
254 fill_table(&table,
"example_table");
260 fprintf(stderr,
"Invalid table number.\n\n");
261 cerr << desc << endl;
265 fstream output(vm[
"table-name"].as<string>().c_str(),
266 ios::out | ios::trunc | ios::binary);
267 if (not table.SerializeToOstream(&output))
269 cerr <<
"Failed to write schema." << endl;