45
46
using namespace std;
51
str_or_nil(const char *str)
50
inline const char* str_or_nil(const char *str)
53
52
return str ? str : "<nil>";
56
int wild_case_compare(const charset_info_st * const cs, const char *str, const char *wildstr)
62
while (*wildstr && *wildstr != internal::wild_many && *wildstr != internal::wild_one)
64
if (*wildstr == internal::wild_prefix && wildstr[1])
67
if (my_toupper(cs, *wildstr++) != my_toupper(cs, *str++))
74
if (*wildstr++ == internal::wild_one)
77
return (1); /* One char; skip */
82
return (0); /* '*' as last char: OK */
84
flag=(*wildstr != internal::wild_many && *wildstr != internal::wild_one);
90
if ((cmp= *wildstr) == internal::wild_prefix && wildstr[1])
93
cmp= my_toupper(cs, cmp);
95
while (*str && my_toupper(cs, *str) != cmp)
102
if (wild_case_compare(cs, str, wildstr) == 0)
111
return (*str != '\0');
115
56
Get the quote character for displaying an identifier.
151
92
column_name.append(")");
154
if (session->lex().current_select->where)
156
if (prepare_new_schema_table(session, session->lex(), "SCHEMAS"))
161
if (prepare_new_schema_table(session, session->lex(), "SHOW_SCHEMAS"))
95
if (prepare_new_schema_table(session, session->lex(), session->lex().current_select->where ? "SCHEMAS" : "SHOW_SCHEMAS"))
165
98
Item_field *my_field= new Item_field(&session->lex().current_select->context, NULL, NULL, "SCHEMA_NAME");
166
99
my_field->is_autogenerated_name= false;
167
my_field->set_name(column_name.c_str(), column_name.length(), system_charset_info);
169
if (session->add_item_to_list(my_field))
172
if (session->add_order_to_list(my_field, true))
100
my_field->set_name(column_name);
102
session->add_item_to_list(my_field);
103
session->add_order_to_list(my_field, true);
185
114
std::string column_name= "Tables_in_";
187
util::string::const_shared_ptr schema(session->schema());
116
util::string::ptr schema(session->schema());
190
identifier::Schema identifier(ident);
119
identifier::Schema identifier= str_ref(ident);
191
120
column_name.append(ident);
192
session->lex().select_lex.db= const_cast<char *>(ident);
121
session->lex().select_lex.db= ident;
193
122
if (not plugin::StorageEngine::doesSchemaExist(identifier))
195
124
my_error(ER_BAD_DB_ERROR, identifier);
221
150
Item_field *my_field= new Item_field(&session->lex().current_select->context, NULL, NULL, "TABLE_NAME");
222
151
my_field->is_autogenerated_name= false;
223
my_field->set_name(column_name.c_str(), column_name.length(), system_charset_info);
225
if (session->add_item_to_list(my_field))
228
if (session->add_order_to_list(my_field, true))
152
my_field->set_name(column_name);
154
session->add_item_to_list(my_field);
155
session->add_order_to_list(my_field, true);
234
159
bool buildTemporaryTables(Session *session)
236
161
session->lex().sql_command= SQLCOM_SELECT;
238
162
session->lex().statement= new statement::Show(session);
241
164
if (prepare_new_schema_table(session, session->lex(), "SHOW_TEMPORARY_TABLES"))
244
if (session->add_item_to_list( new Item_field(&session->lex().current_select->context, NULL, NULL, "*")))
247
(session->lex().current_select->with_wild)++;
167
session->add_item_to_list( new Item_field(&session->lex().current_select->context, NULL, NULL, "*"));
168
session->lex().current_select->with_wild++;
258
178
std::string column_name= "Tables_in_";
260
util::string::const_shared_ptr schema(session->schema());
180
util::string::ptr schema(session->schema());
263
session->lex().select_lex.db= const_cast<char *>(ident);
183
session->lex().select_lex.db= ident;
265
identifier::Schema identifier(ident);
185
identifier::Schema identifier= str_ref(ident);
266
186
if (not plugin::StorageEngine::doesSchemaExist(identifier))
268
188
my_error(ER_BAD_DB_ERROR, identifier);
283
203
if (prepare_new_schema_table(session, session->lex(), "SHOW_TABLE_STATUS"))
286
if (session->add_item_to_list( new Item_field(&session->lex().current_select->context, NULL, NULL, "*")))
289
(session->lex().current_select->with_wild)++;
206
session->add_item_to_list( new Item_field(&session->lex().current_select->context, NULL, NULL, "*"));
207
session->lex().current_select->with_wild++;
294
bool buildEngineStatus(Session *session, LEX_STRING)
211
bool buildEngineStatus(Session *session, str_ref)
296
213
session->lex().sql_command= SQLCOM_SELECT;
297
214
drizzled::statement::Show *select= new statement::Show(session);
308
225
drizzled::statement::Show *select= new statement::Show(session);
309
226
session->lex().statement= select;
311
util::string::const_shared_ptr schema(session->schema());
228
util::string::ptr schema(session->schema());
312
229
if (schema_ident)
314
select->setShowPredicate(schema_ident, table_ident->table.str);
231
select->setShowPredicate(schema_ident, table_ident->table.data());
316
else if (table_ident->db.str)
233
else if (table_ident->db.data())
318
select->setShowPredicate(table_ident->db.str, table_ident->table.str);
235
select->setShowPredicate(table_ident->db.data(), table_ident->table.data());
322
select->setShowPredicate(*schema, table_ident->table.str);
239
select->setShowPredicate(*schema, table_ident->table.data());
331
drizzled::identifier::Table identifier(select->getShowSchema().c_str(), table_ident->table.str);
248
drizzled::identifier::Table identifier(select->getShowSchema(), table_ident->table.data());
332
249
if (not plugin::StorageEngine::doesTableExist(*session, identifier))
334
251
my_error(ER_TABLE_UNKNOWN, identifier);
338
255
if (prepare_new_schema_table(session, session->lex(), "SHOW_COLUMNS"))
341
if (session->add_item_to_list( new Item_field(&session->lex().current_select->context, NULL, NULL, "*")))
344
(session->lex().current_select->with_wild)++;
258
session->add_item_to_list( new Item_field(&session->lex().current_select->context, NULL, NULL, "*"));
259
session->lex().current_select->with_wild++;
374
288
drizzled::statement::Show *select= new statement::Show(session);
375
289
session->lex().statement= select;
377
util::string::const_shared_ptr schema(session->schema());
291
util::string::ptr schema(session->schema());
378
292
if (schema_ident)
380
select->setShowPredicate(schema_ident, table_ident->table.str);
294
select->setShowPredicate(schema_ident, table_ident->table.data());
382
else if (table_ident->db.str)
296
else if (table_ident->db.data())
384
select->setShowPredicate(table_ident->db.str, table_ident->table.str);
298
select->setShowPredicate(table_ident->db.data(), table_ident->table.data());
388
select->setShowPredicate(*schema, table_ident->table.str);
302
select->setShowPredicate(*schema, table_ident->table.data());
397
drizzled::identifier::Table identifier(select->getShowSchema().c_str(), table_ident->table.str);
311
drizzled::identifier::Table identifier(select->getShowSchema(), table_ident->table.data());
398
312
if (not plugin::StorageEngine::doesTableExist(*session, identifier))
400
314
my_error(ER_TABLE_UNKNOWN, identifier);
404
318
if (prepare_new_schema_table(session, session->lex(), "SHOW_INDEXES"))
407
if (session->add_item_to_list( new Item_field(&session->lex().current_select->context, NULL, NULL, "*")))
410
(session->lex().current_select->with_wild)++;
321
session->add_item_to_list(new Item_field(&session->lex().current_select->context, NULL, NULL, "*"));
322
session->lex().current_select->with_wild++;
417
328
session->lex().sql_command= SQLCOM_SELECT;
418
329
session->lex().statement= new statement::Show(session);
420
if (is_global == OPT_GLOBAL)
422
if (prepare_new_schema_table(session, session->lex(), "GLOBAL_STATUS"))
427
if (prepare_new_schema_table(session, session->lex(), "SESSION_STATUS"))
431
std::string key("Variable_name");
432
std::string value("Value");
331
if (prepare_new_schema_table(session, session->lex(), is_global == OPT_GLOBAL ? "GLOBAL_STATUS" : "SESSION_STATUS"))
434
334
Item_field *my_field= new Item_field(&session->lex().current_select->context, NULL, NULL, "VARIABLE_NAME");
435
335
my_field->is_autogenerated_name= false;
436
my_field->set_name(key.c_str(), key.length(), system_charset_info);
438
if (session->add_item_to_list(my_field))
336
my_field->set_name("Variable_name");
337
session->add_item_to_list(my_field);
441
338
my_field= new Item_field(&session->lex().current_select->context, NULL, NULL, "VARIABLE_VALUE");
442
339
my_field->is_autogenerated_name= false;
443
my_field->set_name(value.c_str(), value.length(), system_charset_info);
445
if (session->add_item_to_list(my_field))
340
my_field->set_name("Value");
341
session->add_item_to_list(my_field);
460
354
if (prepare_new_schema_table(session, session->lex(), "TABLE_SQL_DEFINITION"))
463
util::string::const_shared_ptr schema(session->schema());
357
util::string::ptr schema(session->schema());
358
if (ident->db.data())
466
select->setShowPredicate(ident->db.str, ident->table.str);
360
select->setShowPredicate(ident->db.data(), ident->table.data());
470
select->setShowPredicate(*schema, ident->table.str);
364
select->setShowPredicate(*schema, ident->table.data());
478
std::string key("Table");
479
std::string value("Create Table");
481
372
Item_field *my_field= new Item_field(&session->lex().current_select->context, NULL, NULL, "TABLE_NAME");
482
373
my_field->is_autogenerated_name= false;
483
my_field->set_name(key.c_str(), key.length(), system_charset_info);
485
if (session->add_item_to_list(my_field))
374
my_field->set_name("Table");
375
session->add_item_to_list(my_field);
488
376
my_field= new Item_field(&session->lex().current_select->context, NULL, NULL, "TABLE_SQL_DEFINITION");
489
377
my_field->is_autogenerated_name= false;
490
my_field->set_name(value.c_str(), value.length(), system_charset_info);
492
if (session->add_item_to_list(my_field))
378
my_field->set_name("Create Table");
379
session->add_item_to_list(my_field);
503
388
if (prepare_new_schema_table(session, session->lex(), "PROCESSLIST"))
506
if (session->add_item_to_list( new Item_field(&session->lex().current_select->context, NULL, NULL, "*")))
509
(session->lex().current_select->with_wild)++;
391
session->add_item_to_list( new Item_field(&session->lex().current_select->context, NULL, NULL, "*"));
392
session->lex().current_select->with_wild++;
530
std::string key("Variable_name");
531
std::string value("Value");
533
412
Item_field *my_field= new Item_field(&session->lex().current_select->context, NULL, NULL, "VARIABLE_NAME");
534
413
my_field->is_autogenerated_name= false;
535
my_field->set_name(key.c_str(), key.length(), system_charset_info);
537
if (session->add_item_to_list(my_field))
414
my_field->set_name("Variable_name");
415
session->add_item_to_list(my_field);
540
416
my_field= new Item_field(&session->lex().current_select->context, NULL, NULL, "VARIABLE_VALUE");
541
417
my_field->is_autogenerated_name= false;
542
my_field->set_name(value.c_str(), value.length(), system_charset_info);
544
if (session->add_item_to_list(my_field))
418
my_field->set_name("Value");
420
session->add_item_to_list(my_field);
550
bool buildCreateSchema(Session *session, LEX_STRING &ident)
424
bool buildCreateSchema(Session *session, str_ref ident)
552
426
session->lex().sql_command= SQLCOM_SELECT;
553
427
drizzled::statement::Show *select= new statement::Show(session);
556
430
if (prepare_new_schema_table(session, session->lex(), "SCHEMA_SQL_DEFINITION"))
559
util::string::const_shared_ptr schema(session->schema());
433
util::string::ptr schema(session->schema());
562
select->setShowPredicate(ident.str);
436
select->setShowPredicate(ident.data());
574
std::string key("Database");
575
std::string value("Create Database");
577
448
Item_field *my_field= new Item_field(&session->lex().current_select->context, NULL, NULL, "SCHEMA_NAME");
578
449
my_field->is_autogenerated_name= false;
579
my_field->set_name(key.c_str(), key.length(), system_charset_info);
581
if (session->add_item_to_list(my_field))
450
my_field->set_name("Database");
451
session->add_item_to_list(my_field);
584
453
my_field= new Item_field(&session->lex().current_select->context, NULL, NULL, "SCHEMA_SQL_DEFINITION");
585
454
my_field->is_autogenerated_name= false;
586
my_field->set_name(value.c_str(), value.length(), system_charset_info);
588
if (session->add_item_to_list(my_field))
455
my_field->set_name("Create Database");
456
session->add_item_to_list(my_field);
601
467
session->lex().statement= select;
602
468
session->lex().select_lex.db= 0;
604
util::string::const_shared_ptr schema(session->schema());
470
util::string::ptr schema(session->schema());
471
if (ident->db.data())
607
select->setShowPredicate(ident->db.str, ident->table.str);
473
select->setShowPredicate(ident->db.data(), ident->table.data());
611
select->setShowPredicate(*schema, ident->table.str);
477
select->setShowPredicate(*schema, ident->table.data());
620
drizzled::identifier::Table identifier(select->getShowSchema().c_str(), ident->table.str);
486
drizzled::identifier::Table identifier(select->getShowSchema(), ident->table.data());
621
487
if (not plugin::StorageEngine::doesTableExist(*session, identifier))
623
489
my_error(ER_TABLE_UNKNOWN, identifier);
632
if (session->add_item_to_list( new Item_field(&session->lex().current_select->context, NULL, NULL, "*")))
637
(session->lex().current_select->with_wild)++;
497
session->add_item_to_list( new Item_field(&session->lex().current_select->context, NULL, NULL, "*"));
498
session->lex().current_select->with_wild++;
642
} /* namespace drizzled */
644
503
} /* namespace drizzled */