153
bool buildScemas(Session *session)
155
session->getLex()->sql_command= SQLCOM_SELECT;
156
session->getLex()->statement= new statement::Show(session);
158
std::string column_name= "Database";
159
if (session->getLex()->wild)
161
column_name.append(" (");
162
column_name.append(session->getLex()->wild->ptr());
163
column_name.append(")");
166
if (session->getLex()->current_select->where)
168
if (prepare_new_schema_table(session, session->getLex(), "SCHEMAS"))
173
if (prepare_new_schema_table(session, session->getLex(), "SHOW_SCHEMAS"))
177
Item_field *my_field= new Item_field(&session->lex->current_select->context, NULL, NULL, "SCHEMA_NAME");
178
my_field->is_autogenerated_name= false;
179
my_field->set_name(column_name.c_str(), column_name.length(), system_charset_info);
181
if (session->add_item_to_list(my_field))
184
if (session->add_order_to_list(my_field, true))
190
bool buildTables(Session *session, const char *ident)
192
session->getLex()->sql_command= SQLCOM_SELECT;
194
drizzled::statement::Show *select= new statement::Show(session);
195
session->getLex()->statement= select;
197
std::string column_name= "Tables_in_";
199
util::string::const_shared_ptr schema(session->schema());
202
identifier::Schema identifier(ident);
203
column_name.append(ident);
204
session->getLex()->select_lex.db= const_cast<char *>(ident);
205
if (not plugin::StorageEngine::doesSchemaExist(identifier))
207
my_error(ER_BAD_DB_ERROR, MYF(0), ident);
209
select->setShowPredicate(ident, "");
211
else if (schema and not schema->empty())
213
column_name.append(*schema);
214
select->setShowPredicate(*schema, "");
218
my_error(ER_NO_DB_ERROR, MYF(0));
223
if (session->getLex()->wild)
225
column_name.append(" (");
226
column_name.append(session->getLex()->wild->ptr());
227
column_name.append(")");
230
if (prepare_new_schema_table(session, session->getLex(), "SHOW_TABLES"))
233
Item_field *my_field= new Item_field(&session->lex->current_select->context, NULL, NULL, "TABLE_NAME");
234
my_field->is_autogenerated_name= false;
235
my_field->set_name(column_name.c_str(), column_name.length(), system_charset_info);
237
if (session->add_item_to_list(my_field))
240
if (session->add_order_to_list(my_field, true))
246
bool buildTemporaryTables(Session *session)
248
session->getLex()->sql_command= SQLCOM_SELECT;
250
session->getLex()->statement= new statement::Show(session);
253
if (prepare_new_schema_table(session, session->getLex(), "SHOW_TEMPORARY_TABLES"))
256
if (session->add_item_to_list( new Item_field(&session->lex->current_select->context, NULL, NULL, "*")))
259
(session->lex->current_select->with_wild)++;
264
bool buildTableStatus(Session *session, const char *ident)
266
session->getLex()->sql_command= SQLCOM_SELECT;
267
drizzled::statement::Show *select= new statement::Show(session);
268
session->getLex()->statement= select;
270
std::string column_name= "Tables_in_";
272
util::string::const_shared_ptr schema(session->schema());
275
session->getLex()->select_lex.db= const_cast<char *>(ident);
277
identifier::Schema identifier(ident);
278
if (not plugin::StorageEngine::doesSchemaExist(identifier))
280
my_error(ER_BAD_DB_ERROR, MYF(0), ident);
283
select->setShowPredicate(ident, "");
287
select->setShowPredicate(*schema, "");
291
my_error(ER_NO_DB_ERROR, MYF(0));
295
if (prepare_new_schema_table(session, session->getLex(), "SHOW_TABLE_STATUS"))
298
if (session->add_item_to_list( new Item_field(&session->lex->current_select->
303
(session->lex->current_select->with_wild)++;
308
bool buildEngineStatus(Session *session, LEX_STRING)
310
session->getLex()->sql_command= SQLCOM_SELECT;
311
drizzled::statement::Show *select= new statement::Show(session);
312
session->getLex()->statement= select;
314
my_error(ER_USE_DATA_DICTIONARY);
318
bool buildColumns(Session *session, const char *schema_ident, Table_ident *table_ident)
320
session->getLex()->sql_command= SQLCOM_SELECT;
322
drizzled::statement::Show *select= new statement::Show(session);
323
session->getLex()->statement= select;
325
util::string::const_shared_ptr schema(session->schema());
328
select->setShowPredicate(schema_ident, table_ident->table.str);
330
else if (table_ident->db.str)
332
select->setShowPredicate(table_ident->db.str, table_ident->table.str);
336
select->setShowPredicate(*schema, table_ident->table.str);
340
my_error(ER_NO_DB_ERROR, MYF(0));
345
drizzled::identifier::Table identifier(select->getShowSchema().c_str(), table_ident->table.str);
346
if (not plugin::StorageEngine::doesTableExist(*session, identifier))
348
my_error(ER_TABLE_UNKNOWN, identifier);
352
if (prepare_new_schema_table(session, session->getLex(), "SHOW_COLUMNS"))
355
if (session->add_item_to_list( new Item_field(&session->lex->current_select->context, NULL, NULL, "*")))
358
(session->lex->current_select->with_wild)++;
363
void buildSelectWarning(Session *session)
365
(void) create_select_for_variable(session, "warning_count");
366
session->getLex()->statement= new statement::Show(session);
369
void buildSelectError(Session *session)
371
(void) create_select_for_variable(session, "error_count");
372
session->getLex()->statement= new statement::Show(session);
375
void buildWarnings(Session *session)
377
session->getLex()->statement= new statement::ShowWarnings(session);
380
void buildErrors(Session *session)
382
session->getLex()->statement= new statement::ShowErrors(session);
385
bool buildIndex(Session *session, const char *schema_ident, Table_ident *table_ident)
387
session->getLex()->sql_command= SQLCOM_SELECT;
388
drizzled::statement::Show *select= new statement::Show(session);
389
session->getLex()->statement= select;
391
util::string::const_shared_ptr schema(session->schema());
394
select->setShowPredicate(schema_ident, table_ident->table.str);
396
else if (table_ident->db.str)
398
select->setShowPredicate(table_ident->db.str, table_ident->table.str);
402
select->setShowPredicate(*schema, table_ident->table.str);
406
my_error(ER_NO_DB_ERROR, MYF(0));
411
drizzled::identifier::Table identifier(select->getShowSchema().c_str(), table_ident->table.str);
412
if (not plugin::StorageEngine::doesTableExist(*session, identifier))
414
my_error(ER_TABLE_UNKNOWN, identifier);
418
if (prepare_new_schema_table(session, session->getLex(), "SHOW_INDEXES"))
421
if (session->add_item_to_list( new Item_field(&session->lex->current_select->context, NULL, NULL, "*")))
424
(session->lex->current_select->with_wild)++;
429
bool buildStatus(Session *session, const drizzled::sql_var_t is_global)
431
session->getLex()->sql_command= SQLCOM_SELECT;
432
session->getLex()->statement= new statement::Show(session);
434
if (is_global == OPT_GLOBAL)
436
if (prepare_new_schema_table(session, session->getLex(), "GLOBAL_STATUS"))
441
if (prepare_new_schema_table(session, session->getLex(), "SESSION_STATUS"))
445
std::string key("Variable_name");
446
std::string value("Value");
448
Item_field *my_field= new Item_field(&session->lex->current_select->context, NULL, NULL, "VARIABLE_NAME");
449
my_field->is_autogenerated_name= false;
450
my_field->set_name(key.c_str(), key.length(), system_charset_info);
452
if (session->add_item_to_list(my_field))
455
my_field= new Item_field(&session->lex->current_select->context, NULL, NULL, "VARIABLE_VALUE");
456
my_field->is_autogenerated_name= false;
457
my_field->set_name(value.c_str(), value.length(), system_charset_info);
459
if (session->add_item_to_list(my_field))
465
bool buildCreateTable(Session *session, Table_ident *ident)
467
session->getLex()->sql_command= SQLCOM_SELECT;
468
statement::Show *select= new statement::Show(session);
469
session->getLex()->statement= select;
471
if (session->getLex()->statement == NULL)
474
if (prepare_new_schema_table(session, session->getLex(), "TABLE_SQL_DEFINITION"))
477
util::string::const_shared_ptr schema(session->schema());
480
select->setShowPredicate(ident->db.str, ident->table.str);
484
select->setShowPredicate(*schema, ident->table.str);
488
my_error(ER_NO_DB_ERROR, MYF(0));
492
std::string key("Table");
493
std::string value("Create Table");
495
Item_field *my_field= new Item_field(&session->lex->current_select->context, NULL, NULL, "TABLE_NAME");
496
my_field->is_autogenerated_name= false;
497
my_field->set_name(key.c_str(), key.length(), system_charset_info);
499
if (session->add_item_to_list(my_field))
502
my_field= new Item_field(&session->lex->current_select->context, NULL, NULL, "TABLE_SQL_DEFINITION");
503
my_field->is_autogenerated_name= false;
504
my_field->set_name(value.c_str(), value.length(), system_charset_info);
506
if (session->add_item_to_list(my_field))
512
bool buildProcesslist(Session *session)
514
session->getLex()->sql_command= SQLCOM_SELECT;
515
session->getLex()->statement= new statement::Show(session);
517
if (prepare_new_schema_table(session, session->getLex(), "PROCESSLIST"))
520
if (session->add_item_to_list( new Item_field(&session->lex->current_select->context, NULL, NULL, "*")))
523
(session->lex->current_select->with_wild)++;
528
bool buildVariables(Session *session, const drizzled::sql_var_t is_global)
530
session->getLex()->sql_command= SQLCOM_SELECT;
531
session->getLex()->statement= new statement::Show(session);
533
if (is_global == OPT_GLOBAL)
535
if (prepare_new_schema_table(session, session->getLex(), "GLOBAL_VARIABLES"))
540
if (prepare_new_schema_table(session, session->getLex(), "SESSION_VARIABLES"))
544
std::string key("Variable_name");
545
std::string value("Value");
547
Item_field *my_field= new Item_field(&session->lex->current_select->context, NULL, NULL, "VARIABLE_NAME");
548
my_field->is_autogenerated_name= false;
549
my_field->set_name(key.c_str(), key.length(), system_charset_info);
551
if (session->add_item_to_list(my_field))
554
my_field= new Item_field(&session->lex->current_select->context, NULL, NULL, "VARIABLE_VALUE");
555
my_field->is_autogenerated_name= false;
556
my_field->set_name(value.c_str(), value.length(), system_charset_info);
558
if (session->add_item_to_list(my_field))
564
bool buildCreateSchema(Session *session, LEX_STRING &ident)
566
session->getLex()->sql_command= SQLCOM_SELECT;
567
drizzled::statement::Show *select= new statement::Show(session);
568
session->getLex()->statement= select;
570
if (prepare_new_schema_table(session, session->getLex(), "SCHEMA_SQL_DEFINITION"))
573
util::string::const_shared_ptr schema(session->schema());
576
select->setShowPredicate(ident.str);
580
select->setShowPredicate(*schema);
584
my_error(ER_NO_DB_ERROR, MYF(0));
588
std::string key("Database");
589
std::string value("Create Database");
591
Item_field *my_field= new Item_field(&session->lex->current_select->context, NULL, NULL, "SCHEMA_NAME");
592
my_field->is_autogenerated_name= false;
593
my_field->set_name(key.c_str(), key.length(), system_charset_info);
595
if (session->add_item_to_list(my_field))
598
my_field= new Item_field(&session->lex->current_select->context, NULL, NULL, "SCHEMA_SQL_DEFINITION");
599
my_field->is_autogenerated_name= false;
600
my_field->set_name(value.c_str(), value.length(), system_charset_info);
602
if (session->add_item_to_list(my_field))
608
bool buildDescribe(Session *session, Table_ident *ident)
610
session->getLex()->lock_option= TL_READ;
611
init_select(session->getLex());
612
session->getLex()->current_select->parsing_place= SELECT_LIST;
613
session->getLex()->sql_command= SQLCOM_SELECT;
614
drizzled::statement::Show *select= new statement::Show(session);
615
session->getLex()->statement= select;
616
session->getLex()->select_lex.db= 0;
618
util::string::const_shared_ptr schema(session->schema());
621
select->setShowPredicate(ident->db.str, ident->table.str);
625
select->setShowPredicate(*schema, ident->table.str);
629
my_error(ER_NO_DB_ERROR, MYF(0));
634
drizzled::identifier::Table identifier(select->getShowSchema().c_str(), ident->table.str);
635
if (not plugin::StorageEngine::doesTableExist(*session, identifier))
637
my_error(ER_TABLE_UNKNOWN, identifier);
641
if (prepare_new_schema_table(session, session->getLex(), "SHOW_COLUMNS"))
646
if (session->add_item_to_list( new Item_field(&session->lex->current_select->
653
(session->lex->current_select->with_wild)++;
658
} /* namespace drizzled */
146
660
} /* namespace drizzled */