8
Written from Google proto example
11
void printType(const drizzle::Table::Field *field)
13
switch (field->type())
15
case drizzle::Table::DOUBLE:
18
case drizzle::Table::VARCHAR:
19
cout << " VARCHAR(" << field->length() << ")";
21
case drizzle::Table::TEXT:
24
case drizzle::Table::BLOB:
27
case drizzle::Table::ENUM:
32
for (x= 0; x < field->values_size() ; x++)
34
const string type= field->values(x);
38
cout << "'" << type << "'";
43
case drizzle::Table::SET:
46
case drizzle::Table::TINYINT:
49
case drizzle::Table::SMALLINT:
52
case drizzle::Table::INTEGER:
55
case drizzle::Table::BIGINT:
58
case drizzle::Table::DECIMAL:
59
cout << " DECIMAL(" << field->length() << "," << field->scale() << ") ";
61
case drizzle::Table::VARBINARY:
62
cout << " VARBINARY(" << field->length() << ") ";
64
case drizzle::Table::DATE:
67
case drizzle::Table::TIME:
70
case drizzle::Table::TIMESTAMP:
71
cout << " TIMESTAMP ";
73
case drizzle::Table::DATETIME:
78
if (field->has_characterset())
79
cout << " CHARACTER SET " << field->characterset();
81
if (field->has_collation())
82
cout << " COLLATE " << field->collation();
84
if (field->is_notnull())
87
if (field->has_default_value())
88
cout << " DEFAULT `" << field->default_value() << "` " ;
90
if (field->on_update())
91
cout << " ON UPDATE CURRENT_TIMESTAMP";
93
if (field->autoincrement())
94
cout << " AUTOINCREMENT ";
96
if (field->has_comment())
97
cout << " COMMENT `" << field->comment() << "` ";
100
void printTable(const drizzle::Table *table)
104
cout << "CREATE TABLE";
107
cout << " TEMPORARY";
109
cout << " `" << table->name() << "` (" << endl;
111
for (x= 0; x < table->field_size() ; x++)
113
const drizzle::Table::Field field = table->field(x);
116
cout << "," << endl;;
118
cout << "\t`" << field.name() << "`";
122
for (x= 0; x < table->index_size() ; x++)
124
const drizzle::Table::Index index = table->index(x);
126
cout << "," << endl;;
131
cout << " PRIMARY KEY (`" << index.name() << "`)";
136
cout << " UNIQUE KEY `" << index.name() << "` (";
137
for (x= 0; x < index.values_size() ; x++)
139
const drizzle::Table::KeyPart key= index.values(x);
143
cout << "`" << key.name() << "`";
150
cout << ") " << endl;
151
if (table->has_collation())
152
cout << " COLLATE = `" << table->collation() << "` " << endl;;
153
if (table->has_characterset())
154
cout << " CHARACTER SET = `" << table->characterset() << "` " << endl;;
155
if (table->has_comment())
156
cout << " COMMENT = `" << table->comment() << "` " << endl;;
157
if (table->has_engine())
158
if (table->has_data_directory())
159
cout << " DATA DIRECTORY = `" << table->data_directory() << "` " << endl;;
160
if (table->has_index_directory())
161
cout << " INDEX DIRECTORY = `" << table->index_directory() << "`" << endl;
162
cout << " ENGINE = " << table->engine() << ";" << endl;
165
int main(int argc, char* argv[])
167
GOOGLE_PROTOBUF_VERIFY_VERSION;
170
cerr << "Usage: " << argv[0] << " SCHEMA" << endl;
174
drizzle::Table table;
177
// Read the existing address book.
178
fstream input(argv[1], ios::in | ios::binary);
179
if (!table.ParseFromIstream(&input))
181
cerr << "Failed to parse table." << endl;