2378
bool store_schema_shemata(Session* session, Table *table, LEX_STRING *db_name,
2379
const CHARSET_INFO * const cs)
2381
table->restoreRecordAsDefault();
2382
table->field[1]->store(db_name->str, db_name->length, system_charset_info);
2383
table->field[2]->store(cs->csname, strlen(cs->csname), system_charset_info);
2384
table->field[3]->store(cs->name, strlen(cs->name), system_charset_info);
2385
return schema_table_store_record(session, table);
2389
int SchemataISMethods::fillTable(Session *session, TableList *tables, COND *cond)
2392
TODO: fill_schema_shemata() is called when new client is connected.
2393
Returning error status in this case leads to client hangup.
2396
LOOKUP_FIELD_VALUES lookup_field_vals;
2398
Table *table= tables->table;
2400
if (get_lookup_field_values(session, cond, tables, &lookup_field_vals))
2403
vector<LEX_STRING*> db_names;
2404
if (make_db_list(session, db_names, &lookup_field_vals, &with_i_schema))
2408
If we have lookup db value we should check that the database exists
2410
if(lookup_field_vals.db_value.str && !lookup_field_vals.wild_db_value &&
2413
char path[FN_REFLEN+16];
2415
struct stat stat_info;
2416
if (!lookup_field_vals.db_value.str[0])
2418
path_len= build_table_filename(path, sizeof(path),
2419
lookup_field_vals.db_value.str, "", false);
2420
path[path_len-1]= 0;
2421
if (stat(path,&stat_info))
2425
for (vector<LEX_STRING*>::iterator db_name= db_names.begin(); db_name != db_names.end(); ++db_name)
2427
if (with_i_schema) // information schema name is always first in list
2429
if (store_schema_shemata(session, table, *db_name,
2430
system_charset_info))
2436
HA_CREATE_INFO create;
2437
load_db_opt_by_name((*db_name)->str, &create);
2439
if (store_schema_shemata(session, table, *db_name,
2440
create.default_table_charset))
2448
int TablesISMethods::processTable(Session *session, TableList *tables,
2449
Table *table, bool res,
2450
LEX_STRING *db_name,
2451
LEX_STRING *table_name) const
2453
const char *tmp_buff;
2455
const CHARSET_INFO * const cs= system_charset_info;
2457
table->restoreRecordAsDefault();
2458
table->field[1]->store(db_name->str, db_name->length, cs);
2459
table->field[2]->store(table_name->str, table_name->length, cs);
2463
there was errors during opening tables
2465
const char *error= session->is_error() ? session->main_da.message() : "";
2466
if (tables->schema_table)
2467
table->field[3]->store(STRING_WITH_LEN("SYSTEM VIEW"), cs);
2469
table->field[3]->store(STRING_WITH_LEN("BASE Table"), cs);
2470
table->field[20]->store(error, strlen(error), cs);
2471
session->clear_error();
2475
char option_buff[400],*ptr;
2476
Table *show_table= tables->table;
2477
TableShare *share= show_table->s;
2478
handler *file= show_table->file;
2479
StorageEngine *tmp_db_type= share->db_type();
2480
if (share->tmp_table == SYSTEM_TMP_TABLE)
2481
table->field[3]->store(STRING_WITH_LEN("SYSTEM VIEW"), cs);
2482
else if (share->tmp_table)
2483
table->field[3]->store(STRING_WITH_LEN("LOCAL TEMPORARY"), cs);
2485
table->field[3]->store(STRING_WITH_LEN("BASE Table"), cs);
2487
for (int i= 4; i < 20; i++)
2489
if (i == 7 || (i > 12 && i < 17) || i == 18)
2491
table->field[i]->set_notnull();
2493
string engine_name= ha_resolve_storage_engine_name(tmp_db_type);
2494
table->field[4]->store(engine_name.c_str(), engine_name.size(), cs);
2495
table->field[5]->store((int64_t) 0, true);
2498
if (share->min_rows)
2500
ptr= strcpy(ptr," min_rows=")+10;
2501
ptr= int64_t10_to_str(share->min_rows,ptr,10);
2503
if (share->max_rows)
2505
ptr= strcpy(ptr," max_rows=")+10;
2506
ptr= int64_t10_to_str(share->max_rows,ptr,10);
2508
if (share->avg_row_length)
2510
ptr= strcpy(ptr," avg_row_length=")+16;
2511
ptr= int64_t10_to_str(share->avg_row_length,ptr,10);
2513
if (share->db_create_options & HA_OPTION_PACK_KEYS)
2514
ptr= strcpy(ptr," pack_keys=1")+12;
2515
if (share->db_create_options & HA_OPTION_NO_PACK_KEYS)
2516
ptr= strcpy(ptr," pack_keys=0")+12;
2517
/* We use CHECKSUM, instead of TABLE_CHECKSUM, for backward compability */
2518
if (share->db_create_options & HA_OPTION_CHECKSUM)
2519
ptr= strcpy(ptr," checksum=1")+11;
2520
if (share->page_checksum != HA_CHOICE_UNDEF)
2521
ptr+= sprintf(ptr, " page_checksum=%s",
2522
ha_choice_values[(uint32_t) share->page_checksum]);
2523
if (share->db_create_options & HA_OPTION_DELAY_KEY_WRITE)
2524
ptr= strcpy(ptr," delay_key_write=1")+18;
2525
if (share->row_type != ROW_TYPE_DEFAULT)
2526
ptr+= sprintf(ptr, " row_format=%s", ha_row_type[(uint32_t)share->row_type]);
2527
if (share->block_size)
2529
ptr= strcpy(ptr, " block_size=")+12;
2530
ptr= int64_t10_to_str(share->block_size, ptr, 10);
2533
table->field[19]->store(option_buff+1,
2534
(ptr == option_buff ? 0 :
2535
(uint32_t) (ptr-option_buff)-1), cs);
2537
tmp_buff= (share->table_charset ?
2538
share->table_charset->name : "default");
2539
table->field[17]->store(tmp_buff, strlen(tmp_buff), cs);
2541
if (share->comment.str)
2542
table->field[20]->store(share->comment.str, share->comment.length, cs);
2546
file->info(HA_STATUS_VARIABLE | HA_STATUS_TIME | HA_STATUS_AUTO |
2548
enum row_type row_type = file->get_row_type();
2550
case ROW_TYPE_NOT_USED:
2551
case ROW_TYPE_DEFAULT:
2552
tmp_buff= ((share->db_options_in_use &
2553
HA_OPTION_COMPRESS_RECORD) ? "Compressed" :
2554
(share->db_options_in_use & HA_OPTION_PACK_RECORD) ?
2555
"Dynamic" : "Fixed");
2557
case ROW_TYPE_FIXED:
2560
case ROW_TYPE_DYNAMIC:
2561
tmp_buff= "Dynamic";
2563
case ROW_TYPE_COMPRESSED:
2564
tmp_buff= "Compressed";
2566
case ROW_TYPE_REDUNDANT:
2567
tmp_buff= "Redundant";
2569
case ROW_TYPE_COMPACT:
2570
tmp_buff= "Compact";
2576
table->field[6]->store(tmp_buff, strlen(tmp_buff), cs);
2577
if (!tables->schema_table)
2579
table->field[7]->store((int64_t) file->stats.records, true);
2580
table->field[7]->set_notnull();
2582
table->field[8]->store((int64_t) file->stats.mean_rec_length, true);
2583
table->field[9]->store((int64_t) file->stats.data_file_length, true);
2584
if (file->stats.max_data_file_length)
2586
table->field[10]->store((int64_t) file->stats.max_data_file_length,
2589
table->field[11]->store((int64_t) file->stats.index_file_length, true);
2590
table->field[12]->store((int64_t) file->stats.delete_length, true);
2591
if (show_table->found_next_number_field)
2593
table->field[13]->store((int64_t) file->stats.auto_increment_value,
2595
table->field[13]->set_notnull();
2597
if (file->stats.create_time)
2599
session->variables.time_zone->gmt_sec_to_TIME(&time,
2600
(time_t) file->stats.create_time);
2601
table->field[14]->store_time(&time, DRIZZLE_TIMESTAMP_DATETIME);
2602
table->field[14]->set_notnull();
2604
if (file->stats.update_time)
2606
session->variables.time_zone->gmt_sec_to_TIME(&time,
2607
(time_t) file->stats.update_time);
2608
table->field[15]->store_time(&time, DRIZZLE_TIMESTAMP_DATETIME);
2609
table->field[15]->set_notnull();
2611
if (file->stats.check_time)
2613
session->variables.time_zone->gmt_sec_to_TIME(&time,
2614
(time_t) file->stats.check_time);
2615
table->field[16]->store_time(&time, DRIZZLE_TIMESTAMP_DATETIME);
2616
table->field[16]->set_notnull();
2618
if (file->ha_table_flags() & (ulong) HA_HAS_CHECKSUM)
2620
table->field[18]->store((int64_t) file->checksum(), true);
2621
table->field[18]->set_notnull();
2625
return(schema_table_store_record(session, table));
2630
2372
@brief Store field characteristics into appropriate I_S table columns
2858
int StatsISMethods::processTable(Session *session, TableList *tables,
2859
Table *table, bool res,
2860
LEX_STRING *db_name,
2861
LEX_STRING *table_name) const
2863
const CHARSET_INFO * const cs= system_charset_info;
2866
if (session->lex->sql_command != SQLCOM_SHOW_KEYS)
2869
I.e. we are in SELECT FROM INFORMATION_SCHEMA.STATISTICS
2870
rather than in SHOW KEYS
2872
if (session->is_error())
2873
push_warning(session, DRIZZLE_ERROR::WARN_LEVEL_WARN,
2874
session->main_da.sql_errno(), session->main_da.message());
2875
session->clear_error();
2882
Table *show_table= tables->table;
2883
KEY *key_info=show_table->s->key_info;
2884
if (show_table->file)
2885
show_table->file->info(HA_STATUS_VARIABLE |
2888
for (uint32_t i=0 ; i < show_table->s->keys ; i++,key_info++)
2890
KEY_PART_INFO *key_part= key_info->key_part;
2892
for (uint32_t j=0 ; j < key_info->key_parts ; j++,key_part++)
2894
table->restoreRecordAsDefault();
2895
table->field[1]->store(db_name->str, db_name->length, cs);
2896
table->field[2]->store(table_name->str, table_name->length, cs);
2897
table->field[3]->store((int64_t) ((key_info->flags &
2898
HA_NOSAME) ? 0 : 1), true);
2899
table->field[4]->store(db_name->str, db_name->length, cs);
2900
table->field[5]->store(key_info->name, strlen(key_info->name), cs);
2901
table->field[6]->store((int64_t) (j+1), true);
2902
str=(key_part->field ? key_part->field->field_name :
2904
table->field[7]->store(str, strlen(str), cs);
2905
if (show_table->file)
2907
if (show_table->file->index_flags(i, j, 0) & HA_READ_ORDER)
2909
table->field[8]->store(((key_part->key_part_flag &
2912
table->field[8]->set_notnull();
2914
KEY *key=show_table->key_info+i;
2915
if (key->rec_per_key[j])
2917
ha_rows records=(show_table->file->stats.records /
2918
key->rec_per_key[j]);
2919
table->field[9]->store((int64_t) records, true);
2920
table->field[9]->set_notnull();
2922
str= show_table->file->index_type(i);
2923
table->field[13]->store(str, strlen(str), cs);
2925
if ((key_part->field &&
2927
show_table->s->field[key_part->fieldnr-1]->key_length()))
2929
table->field[10]->store((int64_t) key_part->length /
2930
key_part->field->charset()->mbmaxlen, true);
2931
table->field[10]->set_notnull();
2933
uint32_t flags= key_part->field ? key_part->field->flags : 0;
2934
const char *pos=(char*) ((flags & NOT_NULL_FLAG) ? "" : "YES");
2935
table->field[12]->store(pos, strlen(pos), cs);
2936
if (!show_table->s->keys_in_use.test(i))
2937
table->field[14]->store(STRING_WITH_LEN("disabled"), cs);
2939
table->field[14]->store("", 0, cs);
2940
table->field[14]->set_notnull();
2941
assert(test(key_info->flags & HA_USES_COMMENT) ==
2942
(key_info->comment.length > 0));
2943
if (key_info->flags & HA_USES_COMMENT)
2944
table->field[15]->store(key_info->comment.str,
2945
key_info->comment.length, cs);
2946
if (schema_table_store_record(session, table))
2955
int OpenTablesISMethods::fillTable(Session *session, TableList *tables, COND *)
2957
const char *wild= session->lex->wild ? session->lex->wild->ptr() : NULL;
2958
Table *table= tables->table;
2959
const CHARSET_INFO * const cs= system_charset_info;
2960
OPEN_TableList *open_list;
2961
if (!(open_list=list_open_tables(session->lex->select_lex.db, wild))
2962
&& session->is_fatal_error)
2965
for (; open_list ; open_list=open_list->next)
2967
table->restoreRecordAsDefault();
2968
table->field[0]->store(open_list->db, strlen(open_list->db), cs);
2969
table->field[1]->store(open_list->table, strlen(open_list->table), cs);
2970
table->field[2]->store((int64_t) open_list->in_use, true);
2971
table->field[3]->store((int64_t) open_list->locked, true);
2972
if (schema_table_store_record(session, table))
2979
2600
int VariablesISMethods::fillTable(Session *session, TableList *tables, COND *)
3499
3019
return(result);
3502
ColumnInfo schema_fields_info[]=
3504
ColumnInfo("CATALOG_NAME",
3506
DRIZZLE_TYPE_VARCHAR,
3507
0, 1, "", SKIP_OPEN_TABLE),
3508
ColumnInfo("SCHEMA_NAME",
3510
DRIZZLE_TYPE_VARCHAR,
3511
0, 0, "Database", SKIP_OPEN_TABLE),
3512
ColumnInfo("DEFAULT_CHARACTER_SET_NAME",
3513
64, DRIZZLE_TYPE_VARCHAR, 0, 0, "",
3515
ColumnInfo("DEFAULT_COLLATION_NAME",
3516
64, DRIZZLE_TYPE_VARCHAR, 0, 0, "",
3518
ColumnInfo("SQL_PATH",
3520
DRIZZLE_TYPE_VARCHAR,
3521
0, 1, "", SKIP_OPEN_TABLE),
3526
ColumnInfo tables_fields_info[]=
3528
ColumnInfo("TABLE_CATALOG", FN_REFLEN, DRIZZLE_TYPE_VARCHAR,
3529
0, 1, "", SKIP_OPEN_TABLE),
3530
ColumnInfo("TABLE_SCHEMA", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR,
3531
0, 0, "", SKIP_OPEN_TABLE),
3532
ColumnInfo("TABLE_NAME", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR,
3533
0, 0, "Name", SKIP_OPEN_TABLE),
3534
ColumnInfo("TABLE_TYPE", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR,
3535
0, 0, "", OPEN_FRM_ONLY),
3536
ColumnInfo("ENGINE", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR,
3537
0, 1, "Engine", OPEN_FRM_ONLY),
3538
ColumnInfo("VERSION", MY_INT64_NUM_DECIMAL_DIGITS, DRIZZLE_TYPE_LONGLONG, 0,
3539
(MY_I_S_MAYBE_NULL | MY_I_S_UNSIGNED), "Version", OPEN_FRM_ONLY),
3540
ColumnInfo("ROW_FORMAT", 10, DRIZZLE_TYPE_VARCHAR, 0, 1, "Row_format", OPEN_FULL_TABLE),
3541
ColumnInfo("TABLE_ROWS", MY_INT64_NUM_DECIMAL_DIGITS, DRIZZLE_TYPE_LONGLONG, 0,
3542
(MY_I_S_MAYBE_NULL | MY_I_S_UNSIGNED), "Rows", OPEN_FULL_TABLE),
3543
ColumnInfo("AVG_ROW_LENGTH", MY_INT64_NUM_DECIMAL_DIGITS, DRIZZLE_TYPE_LONGLONG, 0,
3544
(MY_I_S_MAYBE_NULL | MY_I_S_UNSIGNED), "Avg_row_length", OPEN_FULL_TABLE),
3545
ColumnInfo("DATA_LENGTH", MY_INT64_NUM_DECIMAL_DIGITS, DRIZZLE_TYPE_LONGLONG, 0,
3546
(MY_I_S_MAYBE_NULL | MY_I_S_UNSIGNED), "Data_length", OPEN_FULL_TABLE),
3547
ColumnInfo("MAX_DATA_LENGTH", MY_INT64_NUM_DECIMAL_DIGITS, DRIZZLE_TYPE_LONGLONG, 0,
3548
(MY_I_S_MAYBE_NULL | MY_I_S_UNSIGNED), "Max_data_length", OPEN_FULL_TABLE),
3549
ColumnInfo("INDEX_LENGTH", MY_INT64_NUM_DECIMAL_DIGITS, DRIZZLE_TYPE_LONGLONG, 0,
3550
(MY_I_S_MAYBE_NULL | MY_I_S_UNSIGNED), "Index_length", OPEN_FULL_TABLE),
3551
ColumnInfo("DATA_FREE", MY_INT64_NUM_DECIMAL_DIGITS, DRIZZLE_TYPE_LONGLONG, 0,
3552
(MY_I_S_MAYBE_NULL | MY_I_S_UNSIGNED), "Data_free", OPEN_FULL_TABLE),
3553
ColumnInfo("AUTO_INCREMENT", MY_INT64_NUM_DECIMAL_DIGITS , DRIZZLE_TYPE_LONGLONG, 0,
3554
(MY_I_S_MAYBE_NULL | MY_I_S_UNSIGNED), "Auto_increment", OPEN_FULL_TABLE),
3555
ColumnInfo("CREATE_TIME", 0, DRIZZLE_TYPE_DATETIME, 0, 1, "Create_time", OPEN_FULL_TABLE),
3556
ColumnInfo("UPDATE_TIME", 0, DRIZZLE_TYPE_DATETIME, 0, 1, "Update_time", OPEN_FULL_TABLE),
3557
ColumnInfo("CHECK_TIME", 0, DRIZZLE_TYPE_DATETIME, 0, 1, "Check_time", OPEN_FULL_TABLE),
3558
ColumnInfo("TABLE_COLLATION", 64, DRIZZLE_TYPE_VARCHAR, 0, 1, "Collation", OPEN_FRM_ONLY),
3559
ColumnInfo("CHECKSUM", MY_INT64_NUM_DECIMAL_DIGITS, DRIZZLE_TYPE_LONGLONG, 0,
3560
(MY_I_S_MAYBE_NULL | MY_I_S_UNSIGNED), "Checksum", OPEN_FULL_TABLE),
3561
ColumnInfo("CREATE_OPTIONS", 255, DRIZZLE_TYPE_VARCHAR, 0, 1, "Create_options",
3563
ColumnInfo("TABLE_COMMENT", TABLE_COMMENT_MAXLEN, DRIZZLE_TYPE_VARCHAR,
3564
0, 0, "Comment", OPEN_FRM_ONLY),
3569
ColumnInfo columns_fields_info[]=
3571
ColumnInfo("TABLE_CATALOG", FN_REFLEN, DRIZZLE_TYPE_VARCHAR, 0, 1, "", OPEN_FRM_ONLY),
3572
ColumnInfo("TABLE_SCHEMA", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, "", OPEN_FRM_ONLY),
3573
ColumnInfo("TABLE_NAME", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, "", OPEN_FRM_ONLY),
3574
ColumnInfo("COLUMN_NAME", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, "Field",
3576
ColumnInfo("ORDINAL_POSITION", MY_INT64_NUM_DECIMAL_DIGITS, DRIZZLE_TYPE_LONGLONG, 0,
3577
MY_I_S_UNSIGNED, "", OPEN_FRM_ONLY),
3578
ColumnInfo("COLUMN_DEFAULT", MAX_FIELD_VARCHARLENGTH, DRIZZLE_TYPE_VARCHAR, 0,
3579
1, "Default", OPEN_FRM_ONLY),
3580
ColumnInfo("IS_NULLABLE", 3, DRIZZLE_TYPE_VARCHAR, 0, 0, "Null", OPEN_FRM_ONLY),
3581
ColumnInfo("DATA_TYPE", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, "", OPEN_FRM_ONLY),
3582
ColumnInfo("CHARACTER_MAXIMUM_LENGTH", MY_INT64_NUM_DECIMAL_DIGITS, DRIZZLE_TYPE_LONGLONG,
3583
0, (MY_I_S_MAYBE_NULL | MY_I_S_UNSIGNED), "", OPEN_FRM_ONLY),
3584
ColumnInfo("CHARACTER_OCTET_LENGTH", MY_INT64_NUM_DECIMAL_DIGITS , DRIZZLE_TYPE_LONGLONG,
3585
0, (MY_I_S_MAYBE_NULL | MY_I_S_UNSIGNED), "", OPEN_FRM_ONLY),
3586
ColumnInfo("NUMERIC_PRECISION", MY_INT64_NUM_DECIMAL_DIGITS, DRIZZLE_TYPE_LONGLONG,
3587
0, (MY_I_S_MAYBE_NULL | MY_I_S_UNSIGNED), "", OPEN_FRM_ONLY),
3588
ColumnInfo("NUMERIC_SCALE", MY_INT64_NUM_DECIMAL_DIGITS , DRIZZLE_TYPE_LONGLONG,
3589
0, (MY_I_S_MAYBE_NULL | MY_I_S_UNSIGNED), "", OPEN_FRM_ONLY),
3590
ColumnInfo("CHARACTER_SET_NAME", 64, DRIZZLE_TYPE_VARCHAR, 0, 1, "", OPEN_FRM_ONLY),
3591
ColumnInfo("COLLATION_NAME", 64, DRIZZLE_TYPE_VARCHAR, 0, 1, "Collation", OPEN_FRM_ONLY),
3592
ColumnInfo("COLUMN_TYPE", 65535, DRIZZLE_TYPE_VARCHAR, 0, 0, "Type", OPEN_FRM_ONLY),
3593
ColumnInfo("COLUMN_KEY", 3, DRIZZLE_TYPE_VARCHAR, 0, 0, "Key", OPEN_FRM_ONLY),
3594
ColumnInfo("EXTRA", 27, DRIZZLE_TYPE_VARCHAR, 0, 0, "Extra", OPEN_FRM_ONLY),
3595
ColumnInfo("PRIVILEGES", 80, DRIZZLE_TYPE_VARCHAR, 0, 0, "Privileges", OPEN_FRM_ONLY),
3596
ColumnInfo("COLUMN_COMMENT", COLUMN_COMMENT_MAXLEN, DRIZZLE_TYPE_VARCHAR, 0, 0, "Comment", OPEN_FRM_ONLY),
3597
ColumnInfo("STORAGE", 8, DRIZZLE_TYPE_VARCHAR, 0, 0, "Storage", OPEN_FRM_ONLY),
3598
ColumnInfo("FORMAT", 8, DRIZZLE_TYPE_VARCHAR, 0, 0, "Format", OPEN_FRM_ONLY),
3603
ColumnInfo collation_fields_info[]=
3605
ColumnInfo("COLLATION_NAME", 64, DRIZZLE_TYPE_VARCHAR, 0, 0, "Collation", SKIP_OPEN_TABLE),
3606
ColumnInfo("CHARACTER_SET_NAME", 64, DRIZZLE_TYPE_VARCHAR, 0, 0, "Charset",
3608
ColumnInfo("ID", MY_INT32_NUM_DECIMAL_DIGITS, DRIZZLE_TYPE_LONGLONG, 0, 0, "Id",
3610
ColumnInfo("IS_DEFAULT", 3, DRIZZLE_TYPE_VARCHAR, 0, 0, "Default", SKIP_OPEN_TABLE),
3611
ColumnInfo("IS_COMPILED", 3, DRIZZLE_TYPE_VARCHAR, 0, 0, "Compiled", SKIP_OPEN_TABLE),
3612
ColumnInfo("SORTLEN", 3, DRIZZLE_TYPE_LONGLONG, 0, 0, "Sortlen", SKIP_OPEN_TABLE),
3618
ColumnInfo coll_charset_app_fields_info[]=
3620
ColumnInfo("COLLATION_NAME", 64, DRIZZLE_TYPE_VARCHAR, 0, 0, "", SKIP_OPEN_TABLE),
3621
ColumnInfo("CHARACTER_SET_NAME", 64, DRIZZLE_TYPE_VARCHAR, 0, 0, "", SKIP_OPEN_TABLE),
3626
ColumnInfo stat_fields_info[]=
3628
ColumnInfo("TABLE_CATALOG", FN_REFLEN, DRIZZLE_TYPE_VARCHAR, 0, 1, "", OPEN_FRM_ONLY),
3629
ColumnInfo("TABLE_SCHEMA", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, "", OPEN_FRM_ONLY),
3630
ColumnInfo("TABLE_NAME", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, "Table", OPEN_FRM_ONLY),
3631
ColumnInfo("NON_UNIQUE", 1, DRIZZLE_TYPE_LONGLONG, 0, 0, "Non_unique", OPEN_FRM_ONLY),
3632
ColumnInfo("INDEX_SCHEMA", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, "", OPEN_FRM_ONLY),
3633
ColumnInfo("INDEX_NAME", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, "Key_name",
3635
ColumnInfo("SEQ_IN_INDEX", 2, DRIZZLE_TYPE_LONGLONG, 0, 0, "Seq_in_index", OPEN_FRM_ONLY),
3636
ColumnInfo("COLUMN_NAME", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, "Column_name",
3638
ColumnInfo("COLLATION", 1, DRIZZLE_TYPE_VARCHAR, 0, 1, "Collation", OPEN_FRM_ONLY),
3639
ColumnInfo("CARDINALITY", MY_INT64_NUM_DECIMAL_DIGITS, DRIZZLE_TYPE_LONGLONG, 0, 1,
3640
"Cardinality", OPEN_FULL_TABLE),
3641
ColumnInfo("SUB_PART", 3, DRIZZLE_TYPE_LONGLONG, 0, 1, "Sub_part", OPEN_FRM_ONLY),
3642
ColumnInfo("PACKED", 10, DRIZZLE_TYPE_VARCHAR, 0, 1, "Packed", OPEN_FRM_ONLY),
3643
ColumnInfo("NULLABLE", 3, DRIZZLE_TYPE_VARCHAR, 0, 0, "Null", OPEN_FRM_ONLY),
3644
ColumnInfo("INDEX_TYPE", 16, DRIZZLE_TYPE_VARCHAR, 0, 0, "Index_type", OPEN_FULL_TABLE),
3645
ColumnInfo("COMMENT", 16, DRIZZLE_TYPE_VARCHAR, 0, 1, "Comment", OPEN_FRM_ONLY),
3646
ColumnInfo("INDEX_COMMENT", INDEX_COMMENT_MAXLEN, DRIZZLE_TYPE_VARCHAR, 0, 0, "Index_Comment", OPEN_FRM_ONLY),
3651
ColumnInfo table_names_fields_info[]=
3653
ColumnInfo("TABLE_CATALOG", FN_REFLEN, DRIZZLE_TYPE_VARCHAR, 0, 1, "", SKIP_OPEN_TABLE),
3654
ColumnInfo("TABLE_SCHEMA",NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, "", SKIP_OPEN_TABLE),
3655
ColumnInfo("TABLE_NAME", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, "Tables_in_",
3657
ColumnInfo("TABLE_TYPE", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, "Table_type",
3663
ColumnInfo open_tables_fields_info[]=
3665
ColumnInfo("Database", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, "Database",
3667
ColumnInfo("Table",NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, "Table", SKIP_OPEN_TABLE),
3668
ColumnInfo("In_use", 1, DRIZZLE_TYPE_LONGLONG, 0, 0, "In_use", SKIP_OPEN_TABLE),
3669
ColumnInfo("Name_locked", 4, DRIZZLE_TYPE_LONGLONG, 0, 0, "Name_locked", SKIP_OPEN_TABLE),
3674
3022
ColumnInfo variables_fields_info[]=
3676
3024
ColumnInfo("VARIABLE_NAME", 64, DRIZZLE_TYPE_VARCHAR, 0, 0, "Variable_name",