2
Copyright (C) 2010 Stewart Smith
4
This program is free software; you can redistribute it and/or
5
modify it under the terms of the GNU General Public License
6
as published by the Free Software Foundation; either version 2
7
of the License, or (at your option) any later version.
9
This program is distributed in the hope that it will be useful,
10
but WITHOUT ANY WARRANTY; without even the implied warranty of
11
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
GNU General Public License for more details.
14
You should have received a copy of the GNU General Public License
15
along with this program; if not, write to the Free Software
16
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
23
#include "haildb_engine.h"
25
#include <drizzled/charset.h>
26
#include <drizzled/message/table.pb.h>
28
using namespace drizzled;
30
int get_haildb_system_table_message(const char* table_name, drizzled::message::Table *table_message)
32
if (strcmp(table_name, "SYS_TABLES") == 0)
34
message::Engine *engine= table_message->mutable_engine();
35
engine->set_name("InnoDB");
36
table_message->set_name("haildb_sys_tables");
37
table_message->set_schema("data_dictionary");
38
table_message->set_type(message::Table::STANDARD);
39
table_message->set_creation_timestamp(0);
40
table_message->set_update_timestamp(0);
42
message::Table::TableOptions *options= table_message->mutable_options();
43
options->set_collation_id(my_charset_bin.number);
44
options->set_collation(my_charset_bin.name);
46
message::Table::Field *field= table_message->add_field();
47
field->set_name("NAME");
48
field->set_type(message::Table::Field::VARCHAR);
49
message::Table::Field::StringFieldOptions *stropt= field->mutable_string_options();
50
stropt->set_length(IB_MAX_TABLE_NAME_LEN);
51
stropt->set_collation_id(my_charset_bin.number);
52
stropt->set_collation(my_charset_bin.name);
54
field= table_message->add_field();
55
field->set_name("ID");
56
field->set_type(message::Table::Field::BIGINT);
58
field= table_message->add_field();
59
field->set_name("N_COLS");
60
field->set_type(message::Table::Field::INTEGER);
62
field= table_message->add_field();
63
field->set_name("TYPE");
64
field->set_type(message::Table::Field::INTEGER);
66
field= table_message->add_field();
67
field->set_name("MIX_ID");
68
field->set_type(message::Table::Field::VARCHAR);
69
stropt= field->mutable_string_options();
70
stropt->set_collation_id(my_charset_bin.number);
71
stropt->set_collation(my_charset_bin.name);
72
stropt->set_length(IB_MAX_TABLE_NAME_LEN);
74
field= table_message->add_field();
75
field->set_name("MIX_LEN");
76
field->set_type(message::Table::Field::INTEGER);
78
field= table_message->add_field();
79
field->set_name("CLUSTER_NAME");
80
field->set_type(message::Table::Field::VARCHAR);
81
stropt= field->mutable_string_options();
82
stropt->set_collation_id(my_charset_bin.number);
83
stropt->set_collation(my_charset_bin.name);
84
stropt->set_length(IB_MAX_TABLE_NAME_LEN);
86
field= table_message->add_field();
87
field->set_name("SPACE");
88
field->set_type(message::Table::Field::INTEGER);
90
message::Table::Index *index= table_message->add_indexes();
91
index->set_name("PRIMARY");
92
index->set_is_primary(true);
93
index->set_is_unique(true);
94
index->set_type(message::Table::Index::BTREE);
95
index->set_key_length(IB_MAX_TABLE_NAME_LEN);
96
message::Table::Index::IndexPart *part= index->add_index_part();
98
part->set_compare_length(IB_MAX_TABLE_NAME_LEN);
102
else if (strcmp(table_name, "SYS_COLUMNS") == 0)
104
message::Table::Field::StringFieldOptions *stropt;
105
message::Engine *engine= table_message->mutable_engine();
106
engine->set_name("InnoDB");
107
table_message->set_name("haildb_sys_columns");
108
table_message->set_schema("data_dictionary");
109
table_message->set_type(message::Table::STANDARD);
110
table_message->set_creation_timestamp(0);
111
table_message->set_update_timestamp(0);
113
message::Table::TableOptions *options= table_message->mutable_options();
114
options->set_collation_id(my_charset_bin.number);
115
options->set_collation(my_charset_bin.name);
117
message::Table::Field *field= table_message->add_field();
118
field->set_name("TABLE_ID");
119
field->set_type(message::Table::Field::BIGINT);
121
field= table_message->add_field();
122
field->set_name("POS");
123
field->set_type(message::Table::Field::INTEGER);
125
field= table_message->add_field();
126
field->set_name("NAME");
127
field->set_type(message::Table::Field::VARCHAR);
128
stropt= field->mutable_string_options();
129
stropt->set_collation_id(my_charset_bin.number);
130
stropt->set_collation(my_charset_bin.name);
131
stropt->set_length(IB_MAX_TABLE_NAME_LEN);
133
field= table_message->add_field();
134
field->set_name("MTYPE");
135
field->set_type(message::Table::Field::INTEGER);
137
field= table_message->add_field();
138
field->set_name("PRTYPE");
139
field->set_type(message::Table::Field::INTEGER);
141
field= table_message->add_field();
142
field->set_name("LEN");
143
field->set_type(message::Table::Field::INTEGER);
145
field= table_message->add_field();
146
field->set_name("PREC");
147
field->set_type(message::Table::Field::INTEGER);
149
message::Table::Index *index= table_message->add_indexes();
150
index->set_name("PRIMARY");
151
index->set_is_primary(true);
152
index->set_is_unique(true);
153
index->set_type(message::Table::Index::BTREE);
154
index->set_key_length(sizeof(uint64_t) + sizeof(uint32_t));
155
message::Table::Index::IndexPart *part= index->add_index_part();
156
part->set_fieldnr(0);
157
part->set_compare_length(sizeof(uint64_t));
158
part= index->add_index_part();
159
part->set_fieldnr(1);
160
part->set_compare_length(sizeof(uint32_t));
164
else if (strcmp(table_name, "SYS_INDEXES") == 0)
166
message::Table::Field::StringFieldOptions *stropt;
167
message::Engine *engine= table_message->mutable_engine();
168
engine->set_name("InnoDB");
169
table_message->set_name("haildb_sys_indexes");
170
table_message->set_schema("data_dictionary");
171
table_message->set_type(message::Table::STANDARD);
172
table_message->set_creation_timestamp(0);
173
table_message->set_update_timestamp(0);
175
message::Table::TableOptions *options= table_message->mutable_options();
176
options->set_collation_id(my_charset_bin.number);
177
options->set_collation(my_charset_bin.name);
179
message::Table::Field *field= table_message->add_field();
180
field->set_name("TABLE_ID");
181
field->set_type(message::Table::Field::BIGINT);
183
field= table_message->add_field();
184
field->set_name("ID");
185
field->set_type(message::Table::Field::BIGINT);
187
field= table_message->add_field();
188
field->set_name("NAME");
189
field->set_type(message::Table::Field::VARCHAR);
190
stropt= field->mutable_string_options();
191
stropt->set_collation_id(my_charset_bin.number);
192
stropt->set_collation(my_charset_bin.name);
193
stropt->set_length(IB_MAX_TABLE_NAME_LEN);
195
field= table_message->add_field();
196
field->set_name("N_FIELDS");
197
field->set_type(message::Table::Field::INTEGER);
199
field= table_message->add_field();
200
field->set_name("TYPE");
201
field->set_type(message::Table::Field::INTEGER);
203
field= table_message->add_field();
204
field->set_name("SPACE");
205
field->set_type(message::Table::Field::INTEGER);
207
field= table_message->add_field();
208
field->set_name("PAGE_NO");
209
field->set_type(message::Table::Field::INTEGER);
211
message::Table::Index *index= table_message->add_indexes();
212
index->set_name("PRIMARY");
213
index->set_is_primary(true);
214
index->set_is_unique(true);
215
index->set_type(message::Table::Index::BTREE);
216
index->set_key_length(sizeof(uint64_t) + sizeof(uint32_t));
217
message::Table::Index::IndexPart *part= index->add_index_part();
218
part->set_fieldnr(0);
219
part->set_compare_length(sizeof(uint64_t));
220
part= index->add_index_part();
221
part->set_fieldnr(1);
222
part->set_compare_length(sizeof(uint32_t));
226
else if (strcmp(table_name, "SYS_FIELDS") == 0)
228
message::Table::Field::StringFieldOptions *stropt;
229
message::Engine *engine= table_message->mutable_engine();
230
engine->set_name("InnoDB");
231
table_message->set_name("haildb_sys_fields");
232
table_message->set_schema("data_dictionary");
233
table_message->set_type(message::Table::STANDARD);
234
table_message->set_creation_timestamp(0);
235
table_message->set_update_timestamp(0);
237
message::Table::TableOptions *options= table_message->mutable_options();
238
options->set_collation_id(my_charset_bin.number);
239
options->set_collation(my_charset_bin.name);
241
message::Table::Field *field= table_message->add_field();
242
field->set_name("INDEX_ID");
243
field->set_type(message::Table::Field::BIGINT);
245
field= table_message->add_field();
246
field->set_name("POS");
247
field->set_type(message::Table::Field::INTEGER);
249
field= table_message->add_field();
250
field->set_name("COL_NAME");
251
field->set_type(message::Table::Field::VARCHAR);
252
stropt= field->mutable_string_options();
253
stropt->set_collation_id(my_charset_bin.number);
254
stropt->set_collation(my_charset_bin.name);
255
stropt->set_length(IB_MAX_TABLE_NAME_LEN);
257
message::Table::Index *index= table_message->add_indexes();
258
index->set_name("PRIMARY");
259
index->set_is_primary(true);
260
index->set_is_unique(true);
261
index->set_type(message::Table::Index::BTREE);
262
index->set_key_length(sizeof(uint64_t) + sizeof(uint32_t));
263
message::Table::Index::IndexPart *part= index->add_index_part();
264
part->set_fieldnr(0);
265
part->set_compare_length(sizeof(uint64_t));
266
part= index->add_index_part();
267
part->set_fieldnr(1);
268
part->set_compare_length(sizeof(uint32_t));
272
else if (strcmp(table_name, "SYS_FOREIGN") == 0)
274
message::Table::Field::StringFieldOptions *stropt;
275
message::Engine *engine= table_message->mutable_engine();
276
engine->set_name("InnoDB");
277
table_message->set_name("haildb_sys_foreign");
278
table_message->set_schema("data_dictionary");
279
table_message->set_type(message::Table::STANDARD);
280
table_message->set_creation_timestamp(0);
281
table_message->set_update_timestamp(0);
283
message::Table::TableOptions *options= table_message->mutable_options();
284
options->set_collation_id(my_charset_bin.number);
285
options->set_collation(my_charset_bin.name);
287
message::Table::Field *field= table_message->add_field();
288
field->set_name("ID");
289
field->set_type(message::Table::Field::BIGINT);
291
field= table_message->add_field();
292
field->set_name("FOR_NAME");
293
field->set_type(message::Table::Field::VARCHAR);
294
stropt= field->mutable_string_options();
295
stropt->set_collation_id(my_charset_bin.number);
296
stropt->set_collation(my_charset_bin.name);
297
stropt->set_length(IB_MAX_TABLE_NAME_LEN);
299
field= table_message->add_field();
300
field->set_name("REF_NAME");
301
field->set_type(message::Table::Field::VARCHAR);
302
stropt= field->mutable_string_options();
303
stropt->set_collation_id(my_charset_bin.number);
304
stropt->set_collation(my_charset_bin.name);
305
stropt->set_length(IB_MAX_TABLE_NAME_LEN);
307
field= table_message->add_field();
308
field->set_name("N_COLS");
309
field->set_type(message::Table::Field::INTEGER);
311
message::Table::Index *index= table_message->add_indexes();
312
index->set_name("PRIMARY");
313
index->set_is_primary(true);
314
index->set_is_unique(true);
315
index->set_type(message::Table::Index::BTREE);
316
index->set_key_length(sizeof(uint64_t));
317
message::Table::Index::IndexPart *part= index->add_index_part();
318
part->set_fieldnr(0);
319
part->set_compare_length(sizeof(uint64_t));
321
index= table_message->add_indexes();
322
index->set_name("FOR_IND");
323
index->set_is_primary(false);
324
index->set_is_unique(false);
325
index->set_type(message::Table::Index::BTREE);
326
index->set_key_length(IB_MAX_TABLE_NAME_LEN);
327
part= index->add_index_part();
328
part->set_fieldnr(1);
329
part->set_compare_length(IB_MAX_TABLE_NAME_LEN);
331
index= table_message->add_indexes();
332
index->set_name("REF_IND");
333
index->set_is_primary(false);
334
index->set_is_unique(false);
335
index->set_type(message::Table::Index::BTREE);
336
index->set_key_length(IB_MAX_TABLE_NAME_LEN);
337
part= index->add_index_part();
338
part->set_fieldnr(2);
339
part->set_compare_length(IB_MAX_TABLE_NAME_LEN);
342
else if (strcmp(table_name, "SYS_FOREIGN_COLS") == 0)
344
message::Table::Field::StringFieldOptions *stropt;
345
message::Engine *engine= table_message->mutable_engine();
346
engine->set_name("InnoDB");
347
table_message->set_name("haildb_sys_foreign_cols");
348
table_message->set_schema("data_dictionary");
349
table_message->set_type(message::Table::STANDARD);
350
table_message->set_creation_timestamp(0);
351
table_message->set_update_timestamp(0);
353
message::Table::TableOptions *options= table_message->mutable_options();
354
options->set_collation_id(my_charset_bin.number);
355
options->set_collation(my_charset_bin.name);
357
message::Table::Field *field= table_message->add_field();
358
field->set_name("ID");
359
field->set_type(message::Table::Field::BIGINT);
361
field= table_message->add_field();
362
field->set_name("POS");
363
field->set_type(message::Table::Field::INTEGER);
365
field= table_message->add_field();
366
field->set_name("FOR_COL_NAME");
367
field->set_type(message::Table::Field::VARCHAR);
368
stropt= field->mutable_string_options();
369
stropt->set_collation_id(my_charset_bin.number);
370
stropt->set_collation(my_charset_bin.name);
371
stropt->set_length(IB_MAX_TABLE_NAME_LEN);
373
field= table_message->add_field();
374
field->set_name("REF_COL_NAME");
375
field->set_type(message::Table::Field::VARCHAR);
376
stropt= field->mutable_string_options();
377
stropt->set_collation_id(my_charset_bin.number);
378
stropt->set_collation(my_charset_bin.name);
379
stropt->set_length(IB_MAX_TABLE_NAME_LEN);
381
message::Table::Index *index= table_message->add_indexes();
382
index->set_name("PRIMARY");
383
index->set_is_primary(true);
384
index->set_is_unique(true);
385
index->set_type(message::Table::Index::BTREE);
386
index->set_key_length(sizeof(uint64_t) + sizeof(uint32_t));
387
message::Table::Index::IndexPart *part= index->add_index_part();
388
part->set_fieldnr(0);
389
part->set_compare_length(sizeof(uint64_t));
390
part= index->add_index_part();
391
part->set_fieldnr(1);
392
part->set_compare_length(sizeof(uint32_t));