11
4
#include <drizzled/serialize/table.pb.h>
12
#include <google/protobuf/io/zero_copy_stream.h>
13
#include <google/protobuf/io/zero_copy_stream_impl.h>
15
6
using namespace std;
16
using namespace drizzle;
17
using namespace google::protobuf::io;
20
9
Written from Google proto example
23
void print_field(const ::drizzle::Table::Field &field)
12
void print_field(const drizzle::Table::Field *field)
25
cout << "\t`" << field.name() << "`";
27
Table::Field::FieldType field_type= field.type();
29
if(field_type==Table::Field::VIRTUAL)
31
cout << " VIRTUAL"; // FIXME
32
field_type= field.virtual_options().type();
14
using namespace drizzle;
15
cout << "\t`" << field->name() << "`";
16
switch (field->type())
37
18
case Table::Field::DOUBLE:
38
19
cout << " DOUBLE ";
40
21
case Table::Field::VARCHAR:
41
cout << " VARCHAR(" << field.string_options().length() << ")";
22
cout << " VARCHAR(" << field->string_options().length() << ")";
24
case Table::Field::TEXT:
43
27
case Table::Field::BLOB:
44
cout << " BLOB "; /* FIXME: or text, depends on collation */
45
if(field.string_options().has_collation_id())
46
cout << "COLLATION=" << field.string_options().collation_id() << " ";
48
30
case Table::Field::ENUM:
53
for (x= 0; x < field.set_options().field_value_size() ; x++)
35
for (x= 0; x < field->set_options().value_size() ; x++)
55
const string type= field.set_options().field_value(x);
37
const string type= field->set_options().value(x);
85
67
case Table::Field::DATETIME:
86
68
cout << " DATETIME ";
88
case Table::Field::VIRTUAL:
89
abort(); // handled above.
92
if(field.type()==Table::Field::VIRTUAL)
94
cout << " AS (" << field.virtual_options().expression() << ") ";
95
if(field.virtual_options().physically_stored())
99
if (field.type() == Table::Field::INTEGER
100
|| field.type() == Table::Field::BIGINT
101
|| field.type() == Table::Field::TINYINT)
103
if (field.has_constraints()
104
&& field.constraints().has_is_unsigned())
105
if (field.constraints().is_unsigned())
72
if (field->type() == Table::Field::INTEGER
73
|| field->type() == Table::Field::BIGINT
74
|| field->type() == Table::Field::TINYINT)
76
if (field->has_constraints()
77
&& field->constraints().has_is_unsigned())
78
if (field->constraints().is_unsigned())
106
79
cout << " UNSIGNED";
108
if (field.has_numeric_options() &&
109
field.numeric_options().is_autoincrement())
81
if (field->has_numeric_options() &&
82
field->numeric_options().is_autoincrement())
110
83
cout << " AUTOINCREMENT ";
113
if (!( field.has_constraints()
114
&& field.constraints().is_nullable()))
86
if (! field->has_constraints()
87
&& field->constraints().is_nullable())
115
88
cout << " NOT NULL ";
117
if (field.type() == Table::Field::BLOB
118
|| field.type() == Table::Field::VARCHAR)
120
if (field.string_options().has_collation())
121
cout << " COLLATE " << field.string_options().collation();
124
if (field.options().has_default_value())
125
cout << " DEFAULT `" << field.options().default_value() << "` " ;
127
if (field.options().has_default_bin_value())
129
string v= field.options().default_bin_value();
130
cout << " DEFAULT 0x";
131
for(unsigned int i=0; i< v.length(); i++)
133
printf("%.2x", *(v.c_str()+i));
137
if (field.type() == Table::Field::TIMESTAMP)
138
if (field.timestamp_options().has_auto_updates()
139
&& field.timestamp_options().auto_updates())
90
if (field->type() == Table::Field::TEXT
91
|| field->type() == Table::Field::VARCHAR)
93
if (field->string_options().has_collation())
94
cout << " COLLATE " << field->string_options().collation();
97
if (field->options().has_default_value())
98
cout << " DEFAULT `" << field->options().default_value() << "` " ;
100
if (field->type() == Table::Field::TIMESTAMP)
101
if (field->timestamp_options().has_auto_updates()
102
&& field->timestamp_options().auto_updates())
140
103
cout << " ON UPDATE CURRENT_TIMESTAMP";
142
if (field.has_comment())
143
cout << " COMMENT `" << field.comment() << "` ";
105
if (field->has_comment())
106
cout << " COMMENT `" << field->comment() << "` ";
146
void print_engine(const ::drizzle::Table::StorageEngine &engine)
109
void print_engine(const drizzle::Table::StorageEngine *engine)
150
cout << " ENGINE = " << engine.name() << endl;
152
for (x= 0; x < engine.option_size(); ++x) {
153
const Table::StorageEngine::EngineOption option= engine.option(x);
154
cout << "\t" << option.option_name() << " = "
155
<< option.option_value() << endl;
111
using namespace drizzle;
114
cout << " ENGINE = " << engine->name() << endl;
116
for (x= 0; x < engine->option_size(); ++x) {
117
const Table::StorageEngine::EngineOption option= engine->option(x);
118
cout << "\t" << option.name() << " = " << option.value() << endl;
159
void print_index(const ::drizzle::Table::Index &index)
122
void print_index(const drizzle::Table::Index *index)
124
using namespace drizzle;
162
if (index.is_primary())
127
if (index->is_primary())
163
128
cout << " PRIMARY";
164
else if (index.is_unique())
129
else if (index->is_unique())
165
130
cout << " UNIQUE";
166
cout << " KEY `" << index.name() << "` (";
131
cout << " KEY `" << index->name() << "` (";
170
for (x= 0; x < index.index_part_size() ; x++)
135
for (x= 0; x < index->index_part_size() ; x++)
172
const Table::Index::IndexPart part= index.index_part(x);
137
const Table::Index::IndexPart part= index->index_part(x);
176
cout << "`" << part.fieldnr() << "`"; /* FIXME */
141
cout << "`" << part.field().name() << "`";
177
142
if (part.has_compare_length())
178
143
cout << "(" << part.compare_length() << ")";
185
void print_table_stats(const ::drizzle::Table::TableStats&)
190
void print_table_options(const ::drizzle::Table::TableOptions &options)
192
if (options.has_comment())
193
cout << " COMMENT = '" << options.comment() << "' " << endl;
195
if (options.has_collation())
196
cout << " COLLATE = '" << options.collation() << "' " << endl;
198
if (options.has_auto_increment())
199
cout << " AUTOINCREMENT_OFFSET = " << options.auto_increment() << endl;
201
if (options.has_collation_id())
202
cout << "-- collation_id = " << options.collation_id() << endl;
204
if (options.has_connect_string())
205
cout << " CONNECT_STRING = '" << options.connect_string() << "'"<<endl;
207
if (options.has_row_type())
208
cout << " ROW_TYPE = " << options.row_type() << endl;
210
if (options.has_data_file_name())
211
cout << " DATA_FILE_NAME = '" << options.data_file_name() << "'" << endl;
213
if (options.has_index_file_name())
214
cout << " INDEX_FILE_NAME = '" << options.index_file_name() << "'" << endl;
216
if (options.has_max_rows())
217
cout << " MAX_ROWS = " << options.max_rows() << endl;
219
if (options.has_min_rows())
220
cout << " MIN_ROWS = " << options.min_rows() << endl;
222
if (options.has_auto_increment_value())
223
cout << " AUTO_INCREMENT = " << options.auto_increment_value() << endl;
225
if (options.has_avg_row_length())
226
cout << " AVG_ROW_LENGTH = " << options.avg_row_length() << endl;
228
if (options.has_key_block_size())
229
cout << " KEY_BLOCK_SIZE = " << options.key_block_size() << endl;
231
if (options.has_block_size())
232
cout << " BLOCK_SIZE = " << options.block_size() << endl;
234
if (options.has_comment())
235
cout << " COMMENT = '" << options.comment() << "'" << endl;
237
if (options.has_pack_keys())
238
cout << " PACK_KEYS = " << options.pack_keys() << endl;
239
if (options.has_pack_record())
240
cout << " PACK_RECORD = " << options.pack_record() << endl;
241
if (options.has_checksum())
242
cout << " CHECKSUM = " << options.checksum() << endl;
243
if (options.has_page_checksum())
244
cout << " PAGE_CHECKSUM = " << options.page_checksum() << endl;
245
if (options.has_delay_key_write())
246
cout << " DELAY_KEY_WRITE = " << options.delay_key_write() << endl;
250
void print_table(const ::drizzle::Table &table)
150
void print_table_stats(const drizzle::Table::TableStats *stats)
155
void print_table_options(const drizzle::Table::TableOptions *options)
157
if (options->has_comment())
158
cout << " COMMENT = '" << options->comment() << "' " << endl;
160
if (options->has_collation())
161
cout << " COLLATE = '" << options->collation() << "' " << endl;
165
void print_table(const drizzle::Table *table)
167
using namespace drizzle;
254
170
cout << "CREATE ";
256
if (table.type() == Table::TEMPORARY)
172
if (table->type() == Table::TEMPORARY)
257
173
cout << "TEMPORARY ";
259
cout << "TABLE `" << table.name() << "` (" << endl;
175
cout << "TABLE `" << table->name() << "` (" << endl;
261
for (x= 0; x < table.field_size() ; x++)
177
for (x= 0; x < table->field_size() ; x++)
263
const Table::Field field = table.field(x);
179
const Table::Field field = table->field(x);
266
182
cout << "," << endl;
271
for (x= 0; x < table.indexes_size() ; x++)
187
for (x= 0; x < table->index_size() ; x++)
273
const Table::Index index= table.indexes(x);
189
const Table::Index index= table->index(x);
276
192
cout << "," << endl;;
283
199
cout << ") " << endl;
285
print_engine(table.engine());
201
print_engine(&table->engine());
287
if (table.has_options())
288
print_table_options(table.options());
203
if (table->has_options())
204
print_table_options(&table->options());
290
206
if (table->has_stats())
291
207
print_table_stats(&table->stats());