22
22
/* Function with list databases, tables or fields */
25
#include <drizzled/data_home.h>
26
#include <drizzled/error.h>
27
#include <drizzled/internal/my_sys.h>
28
#include <drizzled/plugin/storage_engine.h>
29
#include <drizzled/session.h>
30
#include <drizzled/show.h>
31
#include <drizzled/sql_select.h>
32
#include <drizzled/statement/show.h>
33
#include <drizzled/statement/show_errors.h>
34
#include <drizzled/statement/show_warnings.h>
35
#include <drizzled/sql_lex.h>
36
#include <drizzled/table_ident.h>
25
#include "drizzled/data_home.h"
26
#include "drizzled/error.h"
27
#include "drizzled/internal/my_sys.h"
28
#include "drizzled/plugin/storage_engine.h"
29
#include "drizzled/session.h"
30
#include "drizzled/show.h"
31
#include "drizzled/sql_select.h"
33
#include "drizzled/statement/show.h"
34
#include "drizzled/statement/show_errors.h"
35
#include "drizzled/statement/show_warnings.h"
38
38
#include <sys/stat.h>
142
132
bool buildScemas(Session *session)
144
session->lex().sql_command= SQLCOM_SELECT;
145
session->lex().statement= new statement::Show(session);
134
session->getLex()->sql_command= SQLCOM_SELECT;
135
session->getLex()->statement= new statement::Show(session);
147
137
std::string column_name= "Database";
148
if (session->lex().wild)
138
if (session->getLex()->wild)
150
140
column_name.append(" (");
151
column_name.append(session->lex().wild->ptr());
141
column_name.append(session->getLex()->wild->ptr());
152
142
column_name.append(")");
155
if (session->lex().current_select->where)
145
if (session->getLex()->current_select->where)
157
if (prepare_new_schema_table(session, session->lex(), "SCHEMAS"))
147
if (prepare_new_schema_table(session, session->getLex(), "SCHEMAS"))
162
if (prepare_new_schema_table(session, session->lex(), "SHOW_SCHEMAS"))
152
if (prepare_new_schema_table(session, session->getLex(), "SHOW_SCHEMAS"))
166
Item_field *my_field= new Item_field(&session->lex().current_select->context, NULL, NULL, "SCHEMA_NAME");
156
Item_field *my_field= new Item_field(&session->lex->current_select->context, NULL, NULL, "SCHEMA_NAME");
167
157
my_field->is_autogenerated_name= false;
168
158
my_field->set_name(column_name.c_str(), column_name.length(), system_charset_info);
179
169
bool buildTables(Session *session, const char *ident)
181
session->lex().sql_command= SQLCOM_SELECT;
171
session->getLex()->sql_command= SQLCOM_SELECT;
183
173
drizzled::statement::Show *select= new statement::Show(session);
184
session->lex().statement= select;
174
session->getLex()->statement= select;
186
176
std::string column_name= "Tables_in_";
188
util::string::ptr schema(session->schema());
178
util::string::const_shared_ptr schema(session->schema());
191
181
identifier::Schema identifier(ident);
192
182
column_name.append(ident);
193
session->lex().select_lex.db= const_cast<char *>(ident);
183
session->getLex()->select_lex.db= const_cast<char *>(ident);
194
184
if (not plugin::StorageEngine::doesSchemaExist(identifier))
196
my_error(ER_BAD_DB_ERROR, identifier);
186
my_error(ER_BAD_DB_ERROR, MYF(0), ident);
198
188
select->setShowPredicate(ident, "");
212
if (session->lex().wild)
202
if (session->getLex()->wild)
214
204
column_name.append(" (");
215
column_name.append(session->lex().wild->ptr());
205
column_name.append(session->getLex()->wild->ptr());
216
206
column_name.append(")");
219
if (prepare_new_schema_table(session, session->lex(), "SHOW_TABLES"))
209
if (prepare_new_schema_table(session, session->getLex(), "SHOW_TABLES"))
222
Item_field *my_field= new Item_field(&session->lex().current_select->context, NULL, NULL, "TABLE_NAME");
212
Item_field *my_field= new Item_field(&session->lex->current_select->context, NULL, NULL, "TABLE_NAME");
223
213
my_field->is_autogenerated_name= false;
224
214
my_field->set_name(column_name.c_str(), column_name.length(), system_charset_info);
235
225
bool buildTemporaryTables(Session *session)
237
session->lex().sql_command= SQLCOM_SELECT;
239
session->lex().statement= new statement::Show(session);
242
if (prepare_new_schema_table(session, session->lex(), "SHOW_TEMPORARY_TABLES"))
245
if (session->add_item_to_list( new Item_field(&session->lex().current_select->context, NULL, NULL, "*")))
248
(session->lex().current_select->with_wild)++;
227
session->getLex()->sql_command= SQLCOM_SELECT;
229
session->getLex()->statement= new statement::Show(session);
232
if (prepare_new_schema_table(session, session->getLex(), "SHOW_TEMPORARY_TABLES"))
235
if (session->add_item_to_list( new Item_field(&session->lex->current_select->context, NULL, NULL, "*")))
238
(session->lex->current_select->with_wild)++;
253
243
bool buildTableStatus(Session *session, const char *ident)
255
session->lex().sql_command= SQLCOM_SELECT;
245
session->getLex()->sql_command= SQLCOM_SELECT;
256
246
drizzled::statement::Show *select= new statement::Show(session);
257
session->lex().statement= select;
247
session->getLex()->statement= select;
259
249
std::string column_name= "Tables_in_";
261
util::string::ptr schema(session->schema());
251
util::string::const_shared_ptr schema(session->schema());
264
session->lex().select_lex.db= const_cast<char *>(ident);
254
session->getLex()->select_lex.db= const_cast<char *>(ident);
266
256
identifier::Schema identifier(ident);
267
257
if (not plugin::StorageEngine::doesSchemaExist(identifier))
269
my_error(ER_BAD_DB_ERROR, identifier);
259
my_error(ER_BAD_DB_ERROR, MYF(0), ident);
272
262
select->setShowPredicate(ident, "");
284
if (prepare_new_schema_table(session, session->lex(), "SHOW_TABLE_STATUS"))
287
if (session->add_item_to_list( new Item_field(&session->lex().current_select->context, NULL, NULL, "*")))
290
(session->lex().current_select->with_wild)++;
274
if (prepare_new_schema_table(session, session->getLex(), "SHOW_TABLE_STATUS"))
277
if (session->add_item_to_list( new Item_field(&session->lex->current_select->
282
(session->lex->current_select->with_wild)++;
295
287
bool buildEngineStatus(Session *session, LEX_STRING)
297
session->lex().sql_command= SQLCOM_SELECT;
289
session->getLex()->sql_command= SQLCOM_SELECT;
298
290
drizzled::statement::Show *select= new statement::Show(session);
299
session->lex().statement= select;
291
session->getLex()->statement= select;
301
293
my_error(ER_USE_DATA_DICTIONARY);
305
297
bool buildColumns(Session *session, const char *schema_ident, Table_ident *table_ident)
307
session->lex().sql_command= SQLCOM_SELECT;
299
session->getLex()->sql_command= SQLCOM_SELECT;
309
301
drizzled::statement::Show *select= new statement::Show(session);
310
session->lex().statement= select;
302
session->getLex()->statement= select;
312
util::string::ptr schema(session->schema());
304
util::string::const_shared_ptr schema(session->schema());
313
305
if (schema_ident)
315
307
select->setShowPredicate(schema_ident, table_ident->table.str);
339
if (prepare_new_schema_table(session, session->lex(), "SHOW_COLUMNS"))
342
if (session->add_item_to_list( new Item_field(&session->lex().current_select->context, NULL, NULL, "*")))
345
(session->lex().current_select->with_wild)++;
331
if (prepare_new_schema_table(session, session->getLex(), "SHOW_COLUMNS"))
334
if (session->add_item_to_list( new Item_field(&session->lex->current_select->context, NULL, NULL, "*")))
337
(session->lex->current_select->with_wild)++;
350
342
void buildSelectWarning(Session *session)
352
344
(void) create_select_for_variable(session, "warning_count");
353
session->lex().statement= new statement::Show(session);
345
session->getLex()->statement= new statement::Show(session);
356
348
void buildSelectError(Session *session)
358
350
(void) create_select_for_variable(session, "error_count");
359
session->lex().statement= new statement::Show(session);
351
session->getLex()->statement= new statement::Show(session);
362
354
void buildWarnings(Session *session)
364
session->lex().statement= new statement::ShowWarnings(session);
356
session->getLex()->statement= new statement::ShowWarnings(session);
367
359
void buildErrors(Session *session)
369
session->lex().statement= new statement::ShowErrors(session);
361
session->getLex()->statement= new statement::ShowErrors(session);
372
364
bool buildIndex(Session *session, const char *schema_ident, Table_ident *table_ident)
374
session->lex().sql_command= SQLCOM_SELECT;
366
session->getLex()->sql_command= SQLCOM_SELECT;
375
367
drizzled::statement::Show *select= new statement::Show(session);
376
session->lex().statement= select;
368
session->getLex()->statement= select;
378
util::string::ptr schema(session->schema());
370
util::string::const_shared_ptr schema(session->schema());
379
371
if (schema_ident)
381
373
select->setShowPredicate(schema_ident, table_ident->table.str);
405
if (prepare_new_schema_table(session, session->lex(), "SHOW_INDEXES"))
408
if (session->add_item_to_list( new Item_field(&session->lex().current_select->context, NULL, NULL, "*")))
411
(session->lex().current_select->with_wild)++;
397
if (prepare_new_schema_table(session, session->getLex(), "SHOW_INDEXES"))
400
if (session->add_item_to_list( new Item_field(&session->lex->current_select->context, NULL, NULL, "*")))
403
(session->lex->current_select->with_wild)++;
416
408
bool buildStatus(Session *session, const drizzled::sql_var_t is_global)
418
session->lex().sql_command= SQLCOM_SELECT;
419
session->lex().statement= new statement::Show(session);
410
session->getLex()->sql_command= SQLCOM_SELECT;
411
session->getLex()->statement= new statement::Show(session);
421
413
if (is_global == OPT_GLOBAL)
423
if (prepare_new_schema_table(session, session->lex(), "GLOBAL_STATUS"))
415
if (prepare_new_schema_table(session, session->getLex(), "GLOBAL_STATUS"))
428
if (prepare_new_schema_table(session, session->lex(), "SESSION_STATUS"))
420
if (prepare_new_schema_table(session, session->getLex(), "SESSION_STATUS"))
432
424
std::string key("Variable_name");
433
425
std::string value("Value");
435
Item_field *my_field= new Item_field(&session->lex().current_select->context, NULL, NULL, "VARIABLE_NAME");
427
Item_field *my_field= new Item_field(&session->lex->current_select->context, NULL, NULL, "VARIABLE_NAME");
436
428
my_field->is_autogenerated_name= false;
437
429
my_field->set_name(key.c_str(), key.length(), system_charset_info);
439
431
if (session->add_item_to_list(my_field))
442
my_field= new Item_field(&session->lex().current_select->context, NULL, NULL, "VARIABLE_VALUE");
434
my_field= new Item_field(&session->lex->current_select->context, NULL, NULL, "VARIABLE_VALUE");
443
435
my_field->is_autogenerated_name= false;
444
436
my_field->set_name(value.c_str(), value.length(), system_charset_info);
452
444
bool buildCreateTable(Session *session, Table_ident *ident)
454
session->lex().sql_command= SQLCOM_SELECT;
446
session->getLex()->sql_command= SQLCOM_SELECT;
455
447
statement::Show *select= new statement::Show(session);
456
session->lex().statement= select;
458
if (session->lex().statement == NULL)
461
if (prepare_new_schema_table(session, session->lex(), "TABLE_SQL_DEFINITION"))
464
util::string::ptr schema(session->schema());
448
session->getLex()->statement= select;
450
if (session->getLex()->statement == NULL)
453
if (prepare_new_schema_table(session, session->getLex(), "TABLE_SQL_DEFINITION"))
456
util::string::const_shared_ptr schema(session->schema());
465
457
if (ident->db.str)
467
459
select->setShowPredicate(ident->db.str, ident->table.str);
479
471
std::string key("Table");
480
472
std::string value("Create Table");
482
Item_field *my_field= new Item_field(&session->lex().current_select->context, NULL, NULL, "TABLE_NAME");
474
Item_field *my_field= new Item_field(&session->lex->current_select->context, NULL, NULL, "TABLE_NAME");
483
475
my_field->is_autogenerated_name= false;
484
476
my_field->set_name(key.c_str(), key.length(), system_charset_info);
486
478
if (session->add_item_to_list(my_field))
489
my_field= new Item_field(&session->lex().current_select->context, NULL, NULL, "TABLE_SQL_DEFINITION");
481
my_field= new Item_field(&session->lex->current_select->context, NULL, NULL, "TABLE_SQL_DEFINITION");
490
482
my_field->is_autogenerated_name= false;
491
483
my_field->set_name(value.c_str(), value.length(), system_charset_info);
499
491
bool buildProcesslist(Session *session)
501
session->lex().sql_command= SQLCOM_SELECT;
502
session->lex().statement= new statement::Show(session);
504
if (prepare_new_schema_table(session, session->lex(), "PROCESSLIST"))
507
if (session->add_item_to_list( new Item_field(&session->lex().current_select->context, NULL, NULL, "*")))
510
(session->lex().current_select->with_wild)++;
493
session->getLex()->sql_command= SQLCOM_SELECT;
494
session->getLex()->statement= new statement::Show(session);
496
if (prepare_new_schema_table(session, session->getLex(), "PROCESSLIST"))
499
if (session->add_item_to_list( new Item_field(&session->lex->current_select->context, NULL, NULL, "*")))
502
(session->lex->current_select->with_wild)++;
515
507
bool buildVariables(Session *session, const drizzled::sql_var_t is_global)
517
session->lex().sql_command= SQLCOM_SELECT;
518
session->lex().statement= new statement::Show(session);
509
session->getLex()->sql_command= SQLCOM_SELECT;
510
session->getLex()->statement= new statement::Show(session);
520
512
if (is_global == OPT_GLOBAL)
522
if (prepare_new_schema_table(session, session->lex(), "GLOBAL_VARIABLES"))
514
if (prepare_new_schema_table(session, session->getLex(), "GLOBAL_VARIABLES"))
527
if (prepare_new_schema_table(session, session->lex(), "SESSION_VARIABLES"))
519
if (prepare_new_schema_table(session, session->getLex(), "SESSION_VARIABLES"))
531
523
std::string key("Variable_name");
532
524
std::string value("Value");
534
Item_field *my_field= new Item_field(&session->lex().current_select->context, NULL, NULL, "VARIABLE_NAME");
526
Item_field *my_field= new Item_field(&session->lex->current_select->context, NULL, NULL, "VARIABLE_NAME");
535
527
my_field->is_autogenerated_name= false;
536
528
my_field->set_name(key.c_str(), key.length(), system_charset_info);
538
530
if (session->add_item_to_list(my_field))
541
my_field= new Item_field(&session->lex().current_select->context, NULL, NULL, "VARIABLE_VALUE");
533
my_field= new Item_field(&session->lex->current_select->context, NULL, NULL, "VARIABLE_VALUE");
542
534
my_field->is_autogenerated_name= false;
543
535
my_field->set_name(value.c_str(), value.length(), system_charset_info);
551
543
bool buildCreateSchema(Session *session, LEX_STRING &ident)
553
session->lex().sql_command= SQLCOM_SELECT;
545
session->getLex()->sql_command= SQLCOM_SELECT;
554
546
drizzled::statement::Show *select= new statement::Show(session);
555
session->lex().statement= select;
547
session->getLex()->statement= select;
557
if (prepare_new_schema_table(session, session->lex(), "SCHEMA_SQL_DEFINITION"))
549
if (prepare_new_schema_table(session, session->getLex(), "SCHEMA_SQL_DEFINITION"))
560
util::string::ptr schema(session->schema());
552
util::string::const_shared_ptr schema(session->schema());
563
555
select->setShowPredicate(ident.str);
575
567
std::string key("Database");
576
568
std::string value("Create Database");
578
Item_field *my_field= new Item_field(&session->lex().current_select->context, NULL, NULL, "SCHEMA_NAME");
570
Item_field *my_field= new Item_field(&session->lex->current_select->context, NULL, NULL, "SCHEMA_NAME");
579
571
my_field->is_autogenerated_name= false;
580
572
my_field->set_name(key.c_str(), key.length(), system_charset_info);
582
574
if (session->add_item_to_list(my_field))
585
my_field= new Item_field(&session->lex().current_select->context, NULL, NULL, "SCHEMA_SQL_DEFINITION");
577
my_field= new Item_field(&session->lex->current_select->context, NULL, NULL, "SCHEMA_SQL_DEFINITION");
586
578
my_field->is_autogenerated_name= false;
587
579
my_field->set_name(value.c_str(), value.length(), system_charset_info);
595
587
bool buildDescribe(Session *session, Table_ident *ident)
597
session->lex().lock_option= TL_READ;
598
init_select(&session->lex());
599
session->lex().current_select->parsing_place= SELECT_LIST;
600
session->lex().sql_command= SQLCOM_SELECT;
589
session->getLex()->lock_option= TL_READ;
590
init_select(session->getLex());
591
session->getLex()->current_select->parsing_place= SELECT_LIST;
592
session->getLex()->sql_command= SQLCOM_SELECT;
601
593
drizzled::statement::Show *select= new statement::Show(session);
602
session->lex().statement= select;
603
session->lex().select_lex.db= 0;
594
session->getLex()->statement= select;
595
session->getLex()->select_lex.db= 0;
605
util::string::ptr schema(session->schema());
597
util::string::const_shared_ptr schema(session->schema());
606
598
if (ident->db.str)
608
600
select->setShowPredicate(ident->db.str, ident->table.str);
628
if (prepare_new_schema_table(session, session->lex(), "SHOW_COLUMNS"))
633
if (session->add_item_to_list( new Item_field(&session->lex().current_select->context, NULL, NULL, "*")))
638
(session->lex().current_select->with_wild)++;
620
if (prepare_new_schema_table(session, session->getLex(), "SHOW_COLUMNS"))
625
if (session->add_item_to_list( new Item_field(&session->lex->current_select->
632
(session->lex->current_select->with_wild)++;