8
Written from Google proto example
11
void fill_engine(drizzle::Table::StorageEngine *engine) {
12
using namespace drizzle;
16
engine->set_name("InnoDB");
17
Table::StorageEngine::EngineOption *option;
19
string option_names[2]= {
24
string option_values[2]= {
25
"/var/drizzle/indexdir"
26
, "/var/drizzle/datadir"
29
/* Add some engine options */
30
for (x= 0; x < 2; ++x) {
31
option= engine->add_option();
32
option->set_name(option_names[x]);
33
option->set_value(option_values[x]);
34
option->set_type(Table::StorageEngine::EngineOption::STRING);
38
void new_index_to_table(
40
, const std::string name
41
, uint16_t num_index_parts
42
, uint32_t field_indexes[]
43
, uint32_t compare_lengths[]
47
using namespace drizzle;
52
Table::Index::IndexPart *index_part;
54
index= table->add_index();
56
index->set_name(name);
57
index->set_type(Table::Index::BTREE);
58
index->set_is_primary(is_primary);
59
index->set_is_unique(is_unique);
61
while (x < num_index_parts) {
63
index_part= index->add_index_part();
65
field= index_part->mutable_field();
66
*field= table->field(field_indexes[x]);
68
if (compare_lengths[x] > 0)
69
index_part->set_compare_length(compare_lengths[x]);
75
void fill_table(drizzle::Table *table, const char *name)
79
using namespace drizzle;
82
Table::Field::FieldConstraints *field_constraints;
83
Table::Field::FieldOptions *field_options;
84
Table::Field::StringFieldOptions *string_field_options;
85
Table::Field::NumericFieldOptions *numeric_field_options;
86
Table::Field::SetFieldOptions *set_field_options;
88
table->set_name(name);
89
table->set_type(Table::STANDARD);
91
/* Write out some random varchar */
92
for (x= 0; x < 3; x++)
95
field= table->add_field();
96
field_constraints= field->mutable_constraints();
97
string_field_options= field->mutable_string_options();
99
sprintf(buffer, "sample%u", x);
101
field->set_name(buffer);
102
field->set_type(Table::Field::VARCHAR);
104
field_constraints->set_is_nullable((x % 2));
106
string_field_options->set_length(rand() % 100);
110
string_field_options->set_collation("utf8_swedish_ci");
111
string_field_options->set_charset("utf8");
115
/* Write out an INTEGER */
117
field= table->add_field();
118
field->set_name("number");
119
field->set_type(Table::Field::INTEGER);
121
/* Write out a ENUM */
123
field= table->add_field();
124
field->set_type(Table::Field::ENUM);
125
field->set_name("colors");
127
set_field_options= field->mutable_set_options();
128
set_field_options->add_value("red");
129
set_field_options->add_value("blue");
130
set_field_options->add_value("green");
131
set_field_options->set_count_elements(set_field_options->value_size());
133
/* Write out a BLOB */
135
field= table->add_field();
136
field->set_name("some_btye_string");
137
field->set_type(Table::Field::BLOB);
139
/* Write out a DECIMAL */
141
field= table->add_field();
142
field->set_name("important_number");
143
field->set_type(Table::Field::DECIMAL);
145
field_constraints= field->mutable_constraints();
146
field_constraints->set_is_nullable(true);
148
numeric_field_options= field->mutable_numeric_options();
149
numeric_field_options->set_precision(8);
150
numeric_field_options->set_scale(3);
154
uint32_t fields_in_index[1]= {6};
155
uint32_t compare_lengths_in_index[1]= {0};
156
bool is_unique= true;
157
bool is_primary= false;
158
/* Add a single-column index on important_number field */
161
, "idx_important_decimal"
164
, compare_lengths_in_index
171
/* Add a double-column index on first two varchar fields */
172
uint32_t fields_in_index[2]= {0,1};
173
uint32_t compare_lengths_in_index[2]= {20,35};
174
bool is_unique= true;
175
bool is_primary= true;
181
, compare_lengths_in_index
187
/* Do engine-specific stuff */
188
Table::StorageEngine *engine= table->mutable_engine();
193
int main(int argc, char* argv[])
195
GOOGLE_PROTOBUF_VERIFY_VERSION;
198
cerr << "Usage: " << argv[0] << " SCHEMA" << endl;
202
drizzle::Table table;
204
fill_table(&table, "example_table");
206
fstream output(argv[1], ios::out | ios::trunc | ios::binary);
207
if (!table.SerializeToOstream(&output))
209
cerr << "Failed to write schema." << endl;