2477
bool store_schema_shemata(Session* session, Table *table, LEX_STRING *db_name,
2478
const CHARSET_INFO * const cs)
2480
table->restoreRecordAsDefault();
2481
table->field[1]->store(db_name->str, db_name->length, system_charset_info);
2482
table->field[2]->store(cs->csname, strlen(cs->csname), system_charset_info);
2483
table->field[3]->store(cs->name, strlen(cs->name), system_charset_info);
2484
return schema_table_store_record(session, table);
2488
int SchemataISMethods::fillTable(Session *session, TableList *tables, COND *cond)
2491
TODO: fill_schema_shemata() is called when new client is connected.
2492
Returning error status in this case leads to client hangup.
2495
LOOKUP_FIELD_VALUES lookup_field_vals;
2496
List<LEX_STRING> db_names;
2497
LEX_STRING *db_name;
2499
Table *table= tables->table;
2501
if (get_lookup_field_values(session, cond, tables, &lookup_field_vals))
2503
if (make_db_list(session, &db_names, &lookup_field_vals,
2508
If we have lookup db value we should check that the database exists
2510
if(lookup_field_vals.db_value.str && !lookup_field_vals.wild_db_value &&
2513
char path[FN_REFLEN+16];
2515
struct stat stat_info;
2516
if (!lookup_field_vals.db_value.str[0])
2518
path_len= build_table_filename(path, sizeof(path),
2519
lookup_field_vals.db_value.str, "", false);
2520
path[path_len-1]= 0;
2521
if (stat(path,&stat_info))
2525
List_iterator_fast<LEX_STRING> it(db_names);
2526
while ((db_name=it++))
2528
if (with_i_schema) // information schema name is always first in list
2530
if (store_schema_shemata(session, table, db_name,
2531
system_charset_info))
2537
HA_CREATE_INFO create;
2538
load_db_opt_by_name(db_name->str, &create);
2540
if (store_schema_shemata(session, table, db_name,
2541
create.default_table_charset))
2549
int TablesISMethods::processTable(Session *session, TableList *tables,
2550
Table *table, bool res,
2551
LEX_STRING *db_name,
2552
LEX_STRING *table_name) const
2554
const char *tmp_buff;
2556
const CHARSET_INFO * const cs= system_charset_info;
2558
table->restoreRecordAsDefault();
2559
table->field[1]->store(db_name->str, db_name->length, cs);
2560
table->field[2]->store(table_name->str, table_name->length, cs);
2564
there was errors during opening tables
2566
const char *error= session->is_error() ? session->main_da.message() : "";
2567
if (tables->schema_table)
2568
table->field[3]->store(STRING_WITH_LEN("SYSTEM VIEW"), cs);
2570
table->field[3]->store(STRING_WITH_LEN("BASE Table"), cs);
2571
table->field[20]->store(error, strlen(error), cs);
2572
session->clear_error();
2576
char option_buff[400],*ptr;
2577
Table *show_table= tables->table;
2578
TableShare *share= show_table->s;
2579
handler *file= show_table->file;
2580
StorageEngine *tmp_db_type= share->db_type();
2581
if (share->tmp_table == SYSTEM_TMP_TABLE)
2582
table->field[3]->store(STRING_WITH_LEN("SYSTEM VIEW"), cs);
2583
else if (share->tmp_table)
2584
table->field[3]->store(STRING_WITH_LEN("LOCAL TEMPORARY"), cs);
2586
table->field[3]->store(STRING_WITH_LEN("BASE Table"), cs);
2588
for (int i= 4; i < 20; i++)
2590
if (i == 7 || (i > 12 && i < 17) || i == 18)
2592
table->field[i]->set_notnull();
2594
string engine_name= ha_resolve_storage_engine_name(tmp_db_type);
2595
table->field[4]->store(engine_name.c_str(), engine_name.size(), cs);
2596
table->field[5]->store((int64_t) 0, true);
2599
if (share->min_rows)
2601
ptr= strcpy(ptr," min_rows=")+10;
2602
ptr= int64_t10_to_str(share->min_rows,ptr,10);
2604
if (share->max_rows)
2606
ptr= strcpy(ptr," max_rows=")+10;
2607
ptr= int64_t10_to_str(share->max_rows,ptr,10);
2609
if (share->avg_row_length)
2611
ptr= strcpy(ptr," avg_row_length=")+16;
2612
ptr= int64_t10_to_str(share->avg_row_length,ptr,10);
2614
if (share->db_create_options & HA_OPTION_PACK_KEYS)
2615
ptr= strcpy(ptr," pack_keys=1")+12;
2616
if (share->db_create_options & HA_OPTION_NO_PACK_KEYS)
2617
ptr= strcpy(ptr," pack_keys=0")+12;
2618
/* We use CHECKSUM, instead of TABLE_CHECKSUM, for backward compability */
2619
if (share->db_create_options & HA_OPTION_CHECKSUM)
2620
ptr= strcpy(ptr," checksum=1")+11;
2621
if (share->page_checksum != HA_CHOICE_UNDEF)
2622
ptr+= sprintf(ptr, " page_checksum=%s",
2623
ha_choice_values[(uint32_t) share->page_checksum]);
2624
if (share->db_create_options & HA_OPTION_DELAY_KEY_WRITE)
2625
ptr= strcpy(ptr," delay_key_write=1")+18;
2626
if (share->row_type != ROW_TYPE_DEFAULT)
2627
ptr+= sprintf(ptr, " row_format=%s", ha_row_type[(uint32_t)share->row_type]);
2628
if (share->block_size)
2630
ptr= strcpy(ptr, " block_size=")+12;
2631
ptr= int64_t10_to_str(share->block_size, ptr, 10);
2634
table->field[19]->store(option_buff+1,
2635
(ptr == option_buff ? 0 :
2636
(uint32_t) (ptr-option_buff)-1), cs);
2638
tmp_buff= (share->table_charset ?
2639
share->table_charset->name : "default");
2640
table->field[17]->store(tmp_buff, strlen(tmp_buff), cs);
2642
if (share->comment.str)
2643
table->field[20]->store(share->comment.str, share->comment.length, cs);
2647
file->info(HA_STATUS_VARIABLE | HA_STATUS_TIME | HA_STATUS_AUTO |
2649
enum row_type row_type = file->get_row_type();
2651
case ROW_TYPE_NOT_USED:
2652
case ROW_TYPE_DEFAULT:
2653
tmp_buff= ((share->db_options_in_use &
2654
HA_OPTION_COMPRESS_RECORD) ? "Compressed" :
2655
(share->db_options_in_use & HA_OPTION_PACK_RECORD) ?
2656
"Dynamic" : "Fixed");
2658
case ROW_TYPE_FIXED:
2661
case ROW_TYPE_DYNAMIC:
2662
tmp_buff= "Dynamic";
2664
case ROW_TYPE_COMPRESSED:
2665
tmp_buff= "Compressed";
2667
case ROW_TYPE_REDUNDANT:
2668
tmp_buff= "Redundant";
2670
case ROW_TYPE_COMPACT:
2671
tmp_buff= "Compact";
2677
table->field[6]->store(tmp_buff, strlen(tmp_buff), cs);
2678
if (!tables->schema_table)
2680
table->field[7]->store((int64_t) file->stats.records, true);
2681
table->field[7]->set_notnull();
2683
table->field[8]->store((int64_t) file->stats.mean_rec_length, true);
2684
table->field[9]->store((int64_t) file->stats.data_file_length, true);
2685
if (file->stats.max_data_file_length)
2687
table->field[10]->store((int64_t) file->stats.max_data_file_length,
2690
table->field[11]->store((int64_t) file->stats.index_file_length, true);
2691
table->field[12]->store((int64_t) file->stats.delete_length, true);
2692
if (show_table->found_next_number_field)
2694
table->field[13]->store((int64_t) file->stats.auto_increment_value,
2696
table->field[13]->set_notnull();
2698
if (file->stats.create_time)
2700
session->variables.time_zone->gmt_sec_to_TIME(&time,
2701
(time_t) file->stats.create_time);
2702
table->field[14]->store_time(&time, DRIZZLE_TIMESTAMP_DATETIME);
2703
table->field[14]->set_notnull();
2705
if (file->stats.update_time)
2707
session->variables.time_zone->gmt_sec_to_TIME(&time,
2708
(time_t) file->stats.update_time);
2709
table->field[15]->store_time(&time, DRIZZLE_TIMESTAMP_DATETIME);
2710
table->field[15]->set_notnull();
2712
if (file->stats.check_time)
2714
session->variables.time_zone->gmt_sec_to_TIME(&time,
2715
(time_t) file->stats.check_time);
2716
table->field[16]->store_time(&time, DRIZZLE_TIMESTAMP_DATETIME);
2717
table->field[16]->set_notnull();
2719
if (file->ha_table_flags() & (ulong) HA_HAS_CHECKSUM)
2721
table->field[18]->store((int64_t) file->checksum(), true);
2722
table->field[18]->set_notnull();
2726
return(schema_table_store_record(session, table));
2731
2378
@brief Store field characteristics into appropriate I_S table columns
2959
int StatsISMethods::processTable(Session *session, TableList *tables,
2960
Table *table, bool res,
2961
LEX_STRING *db_name,
2962
LEX_STRING *table_name) const
2964
const CHARSET_INFO * const cs= system_charset_info;
2967
if (session->lex->sql_command != SQLCOM_SHOW_KEYS)
2970
I.e. we are in SELECT FROM INFORMATION_SCHEMA.STATISTICS
2971
rather than in SHOW KEYS
2973
if (session->is_error())
2974
push_warning(session, DRIZZLE_ERROR::WARN_LEVEL_WARN,
2975
session->main_da.sql_errno(), session->main_da.message());
2976
session->clear_error();
2983
Table *show_table= tables->table;
2984
KEY *key_info=show_table->s->key_info;
2985
if (show_table->file)
2986
show_table->file->info(HA_STATUS_VARIABLE |
2989
for (uint32_t i=0 ; i < show_table->s->keys ; i++,key_info++)
2991
KEY_PART_INFO *key_part= key_info->key_part;
2993
for (uint32_t j=0 ; j < key_info->key_parts ; j++,key_part++)
2995
table->restoreRecordAsDefault();
2996
table->field[1]->store(db_name->str, db_name->length, cs);
2997
table->field[2]->store(table_name->str, table_name->length, cs);
2998
table->field[3]->store((int64_t) ((key_info->flags &
2999
HA_NOSAME) ? 0 : 1), true);
3000
table->field[4]->store(db_name->str, db_name->length, cs);
3001
table->field[5]->store(key_info->name, strlen(key_info->name), cs);
3002
table->field[6]->store((int64_t) (j+1), true);
3003
str=(key_part->field ? key_part->field->field_name :
3005
table->field[7]->store(str, strlen(str), cs);
3006
if (show_table->file)
3008
if (show_table->file->index_flags(i, j, 0) & HA_READ_ORDER)
3010
table->field[8]->store(((key_part->key_part_flag &
3013
table->field[8]->set_notnull();
3015
KEY *key=show_table->key_info+i;
3016
if (key->rec_per_key[j])
3018
ha_rows records=(show_table->file->stats.records /
3019
key->rec_per_key[j]);
3020
table->field[9]->store((int64_t) records, true);
3021
table->field[9]->set_notnull();
3023
str= show_table->file->index_type(i);
3024
table->field[13]->store(str, strlen(str), cs);
3026
if ((key_part->field &&
3028
show_table->s->field[key_part->fieldnr-1]->key_length()))
3030
table->field[10]->store((int64_t) key_part->length /
3031
key_part->field->charset()->mbmaxlen, true);
3032
table->field[10]->set_notnull();
3034
uint32_t flags= key_part->field ? key_part->field->flags : 0;
3035
const char *pos=(char*) ((flags & NOT_NULL_FLAG) ? "" : "YES");
3036
table->field[12]->store(pos, strlen(pos), cs);
3037
if (!show_table->s->keys_in_use.test(i))
3038
table->field[14]->store(STRING_WITH_LEN("disabled"), cs);
3040
table->field[14]->store("", 0, cs);
3041
table->field[14]->set_notnull();
3042
assert(test(key_info->flags & HA_USES_COMMENT) ==
3043
(key_info->comment.length > 0));
3044
if (key_info->flags & HA_USES_COMMENT)
3045
table->field[15]->store(key_info->comment.str,
3046
key_info->comment.length, cs);
3047
if (schema_table_store_record(session, table))
3056
bool store_constraints(Session *session, Table *table, LEX_STRING *db_name,
3057
LEX_STRING *table_name, const char *key_name,
3058
uint32_t key_len, const char *con_type, uint32_t con_len)
3060
const CHARSET_INFO * const cs= system_charset_info;
3061
table->restoreRecordAsDefault();
3062
table->field[1]->store(db_name->str, db_name->length, cs);
3063
table->field[2]->store(key_name, key_len, cs);
3064
table->field[3]->store(db_name->str, db_name->length, cs);
3065
table->field[4]->store(table_name->str, table_name->length, cs);
3066
table->field[5]->store(con_type, con_len, cs);
3067
return schema_table_store_record(session, table);
3071
int TabConstraintsISMethods::processTable(Session *session, TableList *tables,
3072
Table *table, bool res,
3073
LEX_STRING *db_name,
3074
LEX_STRING *table_name) const
3078
if (session->is_error())
3079
push_warning(session, DRIZZLE_ERROR::WARN_LEVEL_WARN,
3080
session->main_da.sql_errno(), session->main_da.message());
3081
session->clear_error();
3086
List<FOREIGN_KEY_INFO> f_key_list;
3087
Table *show_table= tables->table;
3088
KEY *key_info=show_table->key_info;
3089
uint32_t primary_key= show_table->s->primary_key;
3090
show_table->file->info(HA_STATUS_VARIABLE |
3093
for (uint32_t i=0 ; i < show_table->s->keys ; i++, key_info++)
3095
if (i != primary_key && !(key_info->flags & HA_NOSAME))
3098
if (i == primary_key && is_primary_key(key_info))
3100
if (store_constraints(session, table, db_name, table_name, key_info->name,
3101
strlen(key_info->name),
3102
STRING_WITH_LEN("PRIMARY KEY")))
3105
else if (key_info->flags & HA_NOSAME)
3107
if (store_constraints(session, table, db_name, table_name, key_info->name,
3108
strlen(key_info->name),
3109
STRING_WITH_LEN("UNIQUE")))
3114
show_table->file->get_foreign_key_list(session, &f_key_list);
3115
FOREIGN_KEY_INFO *f_key_info;
3116
List_iterator_fast<FOREIGN_KEY_INFO> it(f_key_list);
3117
while ((f_key_info=it++))
3119
if (store_constraints(session, table, db_name, table_name,
3120
f_key_info->forein_id->str,
3121
strlen(f_key_info->forein_id->str),
3130
void store_key_column_usage(Table *table, LEX_STRING *db_name,
3131
LEX_STRING *table_name, const char *key_name,
3132
uint32_t key_len, const char *con_type, uint32_t con_len,
3135
const CHARSET_INFO * const cs= system_charset_info;
3136
table->field[1]->store(db_name->str, db_name->length, cs);
3137
table->field[2]->store(key_name, key_len, cs);
3138
table->field[4]->store(db_name->str, db_name->length, cs);
3139
table->field[5]->store(table_name->str, table_name->length, cs);
3140
table->field[6]->store(con_type, con_len, cs);
3141
table->field[7]->store((int64_t) idx, true);
3145
int KeyColUsageISMethods::processTable(Session *session,
3147
Table *table, bool res,
3148
LEX_STRING *db_name,
3149
LEX_STRING *table_name) const
3153
if (session->is_error())
3154
push_warning(session, DRIZZLE_ERROR::WARN_LEVEL_WARN,
3155
session->main_da.sql_errno(), session->main_da.message());
3156
session->clear_error();
3161
List<FOREIGN_KEY_INFO> f_key_list;
3162
Table *show_table= tables->table;
3163
KEY *key_info=show_table->key_info;
3164
uint32_t primary_key= show_table->s->primary_key;
3165
show_table->file->info(HA_STATUS_VARIABLE |
3168
for (uint32_t i=0 ; i < show_table->s->keys ; i++, key_info++)
3170
if (i != primary_key && !(key_info->flags & HA_NOSAME))
3173
KEY_PART_INFO *key_part= key_info->key_part;
3174
for (uint32_t j=0 ; j < key_info->key_parts ; j++,key_part++)
3176
if (key_part->field)
3179
table->restoreRecordAsDefault();
3180
store_key_column_usage(table, db_name, table_name,
3182
strlen(key_info->name),
3183
key_part->field->field_name,
3184
strlen(key_part->field->field_name),
3186
if (schema_table_store_record(session, table))
3192
show_table->file->get_foreign_key_list(session, &f_key_list);
3193
FOREIGN_KEY_INFO *f_key_info;
3194
List_iterator_fast<FOREIGN_KEY_INFO> fkey_it(f_key_list);
3195
while ((f_key_info= fkey_it++))
3199
List_iterator_fast<LEX_STRING> it(f_key_info->foreign_fields),
3200
it1(f_key_info->referenced_fields);
3202
while ((f_info= it++))
3206
table->restoreRecordAsDefault();
3207
store_key_column_usage(table, db_name, table_name,
3208
f_key_info->forein_id->str,
3209
f_key_info->forein_id->length,
3210
f_info->str, f_info->length,
3212
table->field[8]->store((int64_t) f_idx, true);
3213
table->field[8]->set_notnull();
3214
table->field[9]->store(f_key_info->referenced_db->str,
3215
f_key_info->referenced_db->length,
3216
system_charset_info);
3217
table->field[9]->set_notnull();
3218
table->field[10]->store(f_key_info->referenced_table->str,
3219
f_key_info->referenced_table->length,
3220
system_charset_info);
3221
table->field[10]->set_notnull();
3222
table->field[11]->store(r_info->str, r_info->length,
3223
system_charset_info);
3224
table->field[11]->set_notnull();
3225
if (schema_table_store_record(session, table))
3234
int OpenTablesISMethods::fillTable(Session *session, TableList *tables, COND *)
3236
const char *wild= session->lex->wild ? session->lex->wild->ptr() : NULL;
3237
Table *table= tables->table;
3238
const CHARSET_INFO * const cs= system_charset_info;
3239
OPEN_TableList *open_list;
3240
if (!(open_list=list_open_tables(session->lex->select_lex.db, wild))
3241
&& session->is_fatal_error)
3244
for (; open_list ; open_list=open_list->next)
3246
table->restoreRecordAsDefault();
3247
table->field[0]->store(open_list->db, strlen(open_list->db), cs);
3248
table->field[1]->store(open_list->table, strlen(open_list->table), cs);
3249
table->field[2]->store((int64_t) open_list->in_use, true);
3250
table->field[3]->store((int64_t) open_list->locked, true);
3251
if (schema_table_store_record(session, table))
3258
2606
int VariablesISMethods::fillTable(Session *session, TableList *tables, COND *)
3261
2609
LEX *lex= session->lex;
3262
2610
const char *wild= lex->wild ? lex->wild->ptr() : NULL;
3263
enum enum_schema_tables schema_table_idx=
3264
get_schema_table_idx(tables->schema_table);
2611
const string schema_table_name= tables->schema_table->getTableName();
3265
2612
enum enum_var_type option_type= OPT_SESSION;
3266
bool upper_case_names= (schema_table_idx != SCH_VARIABLES);
3267
bool sorted_vars= (schema_table_idx == SCH_VARIABLES);
2613
bool upper_case_names= (schema_table_name.compare("VARIABLES") != 0);
2614
bool sorted_vars= (schema_table_name.compare("VARIABLES") == 0);
3269
2616
if (lex->option_type == OPT_GLOBAL ||
3270
schema_table_idx == SCH_GLOBAL_VARIABLES)
2617
schema_table_name.compare("GLOBAL_VARIABLES") == 0)
3271
2619
option_type= OPT_GLOBAL;
3273
2622
pthread_rwlock_rdlock(&LOCK_system_variables_hash);
3274
2623
res= show_status_array(session, wild, enumerate_sys_vars(session, sorted_vars),
3861
3025
return(result);
3864
ColumnInfo schema_fields_info[]=
3866
ColumnInfo("CATALOG_NAME",
3868
DRIZZLE_TYPE_VARCHAR,
3869
0, 1, "", SKIP_OPEN_TABLE),
3870
ColumnInfo("SCHEMA_NAME",
3872
DRIZZLE_TYPE_VARCHAR,
3873
0, 0, "Database", SKIP_OPEN_TABLE),
3874
ColumnInfo("DEFAULT_CHARACTER_SET_NAME",
3875
64, DRIZZLE_TYPE_VARCHAR, 0, 0, "",
3877
ColumnInfo("DEFAULT_COLLATION_NAME",
3878
64, DRIZZLE_TYPE_VARCHAR, 0, 0, "",
3880
ColumnInfo("SQL_PATH",
3882
DRIZZLE_TYPE_VARCHAR,
3883
0, 1, "", SKIP_OPEN_TABLE),
3888
ColumnInfo tables_fields_info[]=
3890
ColumnInfo("TABLE_CATALOG", FN_REFLEN, DRIZZLE_TYPE_VARCHAR,
3891
0, 1, "", SKIP_OPEN_TABLE),
3892
ColumnInfo("TABLE_SCHEMA", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR,
3893
0, 0, "", SKIP_OPEN_TABLE),
3894
ColumnInfo("TABLE_NAME", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR,
3895
0, 0, "Name", SKIP_OPEN_TABLE),
3896
ColumnInfo("TABLE_TYPE", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR,
3897
0, 0, "", OPEN_FRM_ONLY),
3898
ColumnInfo("ENGINE", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR,
3899
0, 1, "Engine", OPEN_FRM_ONLY),
3900
ColumnInfo("VERSION", MY_INT64_NUM_DECIMAL_DIGITS, DRIZZLE_TYPE_LONGLONG, 0,
3901
(MY_I_S_MAYBE_NULL | MY_I_S_UNSIGNED), "Version", OPEN_FRM_ONLY),
3902
ColumnInfo("ROW_FORMAT", 10, DRIZZLE_TYPE_VARCHAR, 0, 1, "Row_format", OPEN_FULL_TABLE),
3903
ColumnInfo("TABLE_ROWS", MY_INT64_NUM_DECIMAL_DIGITS, DRIZZLE_TYPE_LONGLONG, 0,
3904
(MY_I_S_MAYBE_NULL | MY_I_S_UNSIGNED), "Rows", OPEN_FULL_TABLE),
3905
ColumnInfo("AVG_ROW_LENGTH", MY_INT64_NUM_DECIMAL_DIGITS, DRIZZLE_TYPE_LONGLONG, 0,
3906
(MY_I_S_MAYBE_NULL | MY_I_S_UNSIGNED), "Avg_row_length", OPEN_FULL_TABLE),
3907
ColumnInfo("DATA_LENGTH", MY_INT64_NUM_DECIMAL_DIGITS, DRIZZLE_TYPE_LONGLONG, 0,
3908
(MY_I_S_MAYBE_NULL | MY_I_S_UNSIGNED), "Data_length", OPEN_FULL_TABLE),
3909
ColumnInfo("MAX_DATA_LENGTH", MY_INT64_NUM_DECIMAL_DIGITS, DRIZZLE_TYPE_LONGLONG, 0,
3910
(MY_I_S_MAYBE_NULL | MY_I_S_UNSIGNED), "Max_data_length", OPEN_FULL_TABLE),
3911
ColumnInfo("INDEX_LENGTH", MY_INT64_NUM_DECIMAL_DIGITS, DRIZZLE_TYPE_LONGLONG, 0,
3912
(MY_I_S_MAYBE_NULL | MY_I_S_UNSIGNED), "Index_length", OPEN_FULL_TABLE),
3913
ColumnInfo("DATA_FREE", MY_INT64_NUM_DECIMAL_DIGITS, DRIZZLE_TYPE_LONGLONG, 0,
3914
(MY_I_S_MAYBE_NULL | MY_I_S_UNSIGNED), "Data_free", OPEN_FULL_TABLE),
3915
ColumnInfo("AUTO_INCREMENT", MY_INT64_NUM_DECIMAL_DIGITS , DRIZZLE_TYPE_LONGLONG, 0,
3916
(MY_I_S_MAYBE_NULL | MY_I_S_UNSIGNED), "Auto_increment", OPEN_FULL_TABLE),
3917
ColumnInfo("CREATE_TIME", 0, DRIZZLE_TYPE_DATETIME, 0, 1, "Create_time", OPEN_FULL_TABLE),
3918
ColumnInfo("UPDATE_TIME", 0, DRIZZLE_TYPE_DATETIME, 0, 1, "Update_time", OPEN_FULL_TABLE),
3919
ColumnInfo("CHECK_TIME", 0, DRIZZLE_TYPE_DATETIME, 0, 1, "Check_time", OPEN_FULL_TABLE),
3920
ColumnInfo("TABLE_COLLATION", 64, DRIZZLE_TYPE_VARCHAR, 0, 1, "Collation", OPEN_FRM_ONLY),
3921
ColumnInfo("CHECKSUM", MY_INT64_NUM_DECIMAL_DIGITS, DRIZZLE_TYPE_LONGLONG, 0,
3922
(MY_I_S_MAYBE_NULL | MY_I_S_UNSIGNED), "Checksum", OPEN_FULL_TABLE),
3923
ColumnInfo("CREATE_OPTIONS", 255, DRIZZLE_TYPE_VARCHAR, 0, 1, "Create_options",
3925
ColumnInfo("TABLE_COMMENT", TABLE_COMMENT_MAXLEN, DRIZZLE_TYPE_VARCHAR,
3926
0, 0, "Comment", OPEN_FRM_ONLY),
3931
ColumnInfo columns_fields_info[]=
3933
ColumnInfo("TABLE_CATALOG", FN_REFLEN, DRIZZLE_TYPE_VARCHAR, 0, 1, "", OPEN_FRM_ONLY),
3934
ColumnInfo("TABLE_SCHEMA", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, "", OPEN_FRM_ONLY),
3935
ColumnInfo("TABLE_NAME", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, "", OPEN_FRM_ONLY),
3936
ColumnInfo("COLUMN_NAME", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, "Field",
3938
ColumnInfo("ORDINAL_POSITION", MY_INT64_NUM_DECIMAL_DIGITS, DRIZZLE_TYPE_LONGLONG, 0,
3939
MY_I_S_UNSIGNED, "", OPEN_FRM_ONLY),
3940
ColumnInfo("COLUMN_DEFAULT", MAX_FIELD_VARCHARLENGTH, DRIZZLE_TYPE_VARCHAR, 0,
3941
1, "Default", OPEN_FRM_ONLY),
3942
ColumnInfo("IS_NULLABLE", 3, DRIZZLE_TYPE_VARCHAR, 0, 0, "Null", OPEN_FRM_ONLY),
3943
ColumnInfo("DATA_TYPE", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, "", OPEN_FRM_ONLY),
3944
ColumnInfo("CHARACTER_MAXIMUM_LENGTH", MY_INT64_NUM_DECIMAL_DIGITS, DRIZZLE_TYPE_LONGLONG,
3945
0, (MY_I_S_MAYBE_NULL | MY_I_S_UNSIGNED), "", OPEN_FRM_ONLY),
3946
ColumnInfo("CHARACTER_OCTET_LENGTH", MY_INT64_NUM_DECIMAL_DIGITS , DRIZZLE_TYPE_LONGLONG,
3947
0, (MY_I_S_MAYBE_NULL | MY_I_S_UNSIGNED), "", OPEN_FRM_ONLY),
3948
ColumnInfo("NUMERIC_PRECISION", MY_INT64_NUM_DECIMAL_DIGITS, DRIZZLE_TYPE_LONGLONG,
3949
0, (MY_I_S_MAYBE_NULL | MY_I_S_UNSIGNED), "", OPEN_FRM_ONLY),
3950
ColumnInfo("NUMERIC_SCALE", MY_INT64_NUM_DECIMAL_DIGITS , DRIZZLE_TYPE_LONGLONG,
3951
0, (MY_I_S_MAYBE_NULL | MY_I_S_UNSIGNED), "", OPEN_FRM_ONLY),
3952
ColumnInfo("CHARACTER_SET_NAME", 64, DRIZZLE_TYPE_VARCHAR, 0, 1, "", OPEN_FRM_ONLY),
3953
ColumnInfo("COLLATION_NAME", 64, DRIZZLE_TYPE_VARCHAR, 0, 1, "Collation", OPEN_FRM_ONLY),
3954
ColumnInfo("COLUMN_TYPE", 65535, DRIZZLE_TYPE_VARCHAR, 0, 0, "Type", OPEN_FRM_ONLY),
3955
ColumnInfo("COLUMN_KEY", 3, DRIZZLE_TYPE_VARCHAR, 0, 0, "Key", OPEN_FRM_ONLY),
3956
ColumnInfo("EXTRA", 27, DRIZZLE_TYPE_VARCHAR, 0, 0, "Extra", OPEN_FRM_ONLY),
3957
ColumnInfo("PRIVILEGES", 80, DRIZZLE_TYPE_VARCHAR, 0, 0, "Privileges", OPEN_FRM_ONLY),
3958
ColumnInfo("COLUMN_COMMENT", COLUMN_COMMENT_MAXLEN, DRIZZLE_TYPE_VARCHAR, 0, 0, "Comment", OPEN_FRM_ONLY),
3959
ColumnInfo("STORAGE", 8, DRIZZLE_TYPE_VARCHAR, 0, 0, "Storage", OPEN_FRM_ONLY),
3960
ColumnInfo("FORMAT", 8, DRIZZLE_TYPE_VARCHAR, 0, 0, "Format", OPEN_FRM_ONLY),
3965
ColumnInfo collation_fields_info[]=
3967
ColumnInfo("COLLATION_NAME", 64, DRIZZLE_TYPE_VARCHAR, 0, 0, "Collation", SKIP_OPEN_TABLE),
3968
ColumnInfo("CHARACTER_SET_NAME", 64, DRIZZLE_TYPE_VARCHAR, 0, 0, "Charset",
3970
ColumnInfo("ID", MY_INT32_NUM_DECIMAL_DIGITS, DRIZZLE_TYPE_LONGLONG, 0, 0, "Id",
3972
ColumnInfo("IS_DEFAULT", 3, DRIZZLE_TYPE_VARCHAR, 0, 0, "Default", SKIP_OPEN_TABLE),
3973
ColumnInfo("IS_COMPILED", 3, DRIZZLE_TYPE_VARCHAR, 0, 0, "Compiled", SKIP_OPEN_TABLE),
3974
ColumnInfo("SORTLEN", 3, DRIZZLE_TYPE_LONGLONG, 0, 0, "Sortlen", SKIP_OPEN_TABLE),
3980
ColumnInfo coll_charset_app_fields_info[]=
3982
ColumnInfo("COLLATION_NAME", 64, DRIZZLE_TYPE_VARCHAR, 0, 0, "", SKIP_OPEN_TABLE),
3983
ColumnInfo("CHARACTER_SET_NAME", 64, DRIZZLE_TYPE_VARCHAR, 0, 0, "", SKIP_OPEN_TABLE),
3988
ColumnInfo stat_fields_info[]=
3990
ColumnInfo("TABLE_CATALOG", FN_REFLEN, DRIZZLE_TYPE_VARCHAR, 0, 1, "", OPEN_FRM_ONLY),
3991
ColumnInfo("TABLE_SCHEMA", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, "", OPEN_FRM_ONLY),
3992
ColumnInfo("TABLE_NAME", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, "Table", OPEN_FRM_ONLY),
3993
ColumnInfo("NON_UNIQUE", 1, DRIZZLE_TYPE_LONGLONG, 0, 0, "Non_unique", OPEN_FRM_ONLY),
3994
ColumnInfo("INDEX_SCHEMA", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, "", OPEN_FRM_ONLY),
3995
ColumnInfo("INDEX_NAME", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, "Key_name",
3997
ColumnInfo("SEQ_IN_INDEX", 2, DRIZZLE_TYPE_LONGLONG, 0, 0, "Seq_in_index", OPEN_FRM_ONLY),
3998
ColumnInfo("COLUMN_NAME", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, "Column_name",
4000
ColumnInfo("COLLATION", 1, DRIZZLE_TYPE_VARCHAR, 0, 1, "Collation", OPEN_FRM_ONLY),
4001
ColumnInfo("CARDINALITY", MY_INT64_NUM_DECIMAL_DIGITS, DRIZZLE_TYPE_LONGLONG, 0, 1,
4002
"Cardinality", OPEN_FULL_TABLE),
4003
ColumnInfo("SUB_PART", 3, DRIZZLE_TYPE_LONGLONG, 0, 1, "Sub_part", OPEN_FRM_ONLY),
4004
ColumnInfo("PACKED", 10, DRIZZLE_TYPE_VARCHAR, 0, 1, "Packed", OPEN_FRM_ONLY),
4005
ColumnInfo("NULLABLE", 3, DRIZZLE_TYPE_VARCHAR, 0, 0, "Null", OPEN_FRM_ONLY),
4006
ColumnInfo("INDEX_TYPE", 16, DRIZZLE_TYPE_VARCHAR, 0, 0, "Index_type", OPEN_FULL_TABLE),
4007
ColumnInfo("COMMENT", 16, DRIZZLE_TYPE_VARCHAR, 0, 1, "Comment", OPEN_FRM_ONLY),
4008
ColumnInfo("INDEX_COMMENT", INDEX_COMMENT_MAXLEN, DRIZZLE_TYPE_VARCHAR, 0, 0, "Index_Comment", OPEN_FRM_ONLY),
4013
ColumnInfo table_constraints_fields_info[]=
4015
ColumnInfo("CONSTRAINT_CATALOG", FN_REFLEN, DRIZZLE_TYPE_VARCHAR, 0, 1, "", OPEN_FULL_TABLE),
4016
ColumnInfo("CONSTRAINT_SCHEMA", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0,
4017
"", OPEN_FULL_TABLE),
4018
ColumnInfo("CONSTRAINT_NAME", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0,
4019
"", OPEN_FULL_TABLE),
4020
ColumnInfo("TABLE_SCHEMA", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, "", OPEN_FULL_TABLE),
4021
ColumnInfo("TABLE_NAME", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, "", OPEN_FULL_TABLE),
4022
ColumnInfo("CONSTRAINT_TYPE", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0,
4023
"", OPEN_FULL_TABLE),
4028
ColumnInfo key_column_usage_fields_info[]=
4030
ColumnInfo("CONSTRAINT_CATALOG", FN_REFLEN, DRIZZLE_TYPE_VARCHAR, 0, 1, "", OPEN_FULL_TABLE),
4031
ColumnInfo("CONSTRAINT_SCHEMA", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0,
4032
"", OPEN_FULL_TABLE),
4033
ColumnInfo("CONSTRAINT_NAME", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0,
4034
"", OPEN_FULL_TABLE),
4035
ColumnInfo("TABLE_CATALOG", FN_REFLEN, DRIZZLE_TYPE_VARCHAR, 0, 1, "", OPEN_FULL_TABLE),
4036
ColumnInfo("TABLE_SCHEMA", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, "", OPEN_FULL_TABLE),
4037
ColumnInfo("TABLE_NAME", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0,
4038
"", OPEN_FULL_TABLE),
4039
ColumnInfo("COLUMN_NAME", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, "", OPEN_FULL_TABLE),
4040
ColumnInfo("ORDINAL_POSITION", 10 ,DRIZZLE_TYPE_LONGLONG, 0, 0, "", OPEN_FULL_TABLE),
4041
ColumnInfo("POSITION_IN_UNIQUE_CONSTRAINT", 10 ,DRIZZLE_TYPE_LONGLONG, 0, 1,
4042
"", OPEN_FULL_TABLE),
4043
ColumnInfo("REFERENCED_TABLE_SCHEMA", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 1,
4044
"", OPEN_FULL_TABLE),
4045
ColumnInfo("REFERENCED_TABLE_NAME", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 1,
4046
"", OPEN_FULL_TABLE),
4047
ColumnInfo("REFERENCED_COLUMN_NAME", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 1,
4048
"", OPEN_FULL_TABLE),
4053
ColumnInfo table_names_fields_info[]=
4055
ColumnInfo("TABLE_CATALOG", FN_REFLEN, DRIZZLE_TYPE_VARCHAR, 0, 1, "", SKIP_OPEN_TABLE),
4056
ColumnInfo("TABLE_SCHEMA",NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, "", SKIP_OPEN_TABLE),
4057
ColumnInfo("TABLE_NAME", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, "Tables_in_",
4059
ColumnInfo("TABLE_TYPE", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, "Table_type",
4065
ColumnInfo open_tables_fields_info[]=
4067
ColumnInfo("Database", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, "Database",
4069
ColumnInfo("Table",NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, "Table", SKIP_OPEN_TABLE),
4070
ColumnInfo("In_use", 1, DRIZZLE_TYPE_LONGLONG, 0, 0, "In_use", SKIP_OPEN_TABLE),
4071
ColumnInfo("Name_locked", 4, DRIZZLE_TYPE_LONGLONG, 0, 0, "Name_locked", SKIP_OPEN_TABLE),
4076
3028
ColumnInfo variables_fields_info[]=
4078
3030
ColumnInfo("VARIABLE_NAME", 64, DRIZZLE_TYPE_VARCHAR, 0, 0, "Variable_name",
4085
ColumnInfo plugin_fields_info[]=
4087
ColumnInfo("PLUGIN_NAME", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, "Name",
4089
ColumnInfo("PLUGIN_VERSION", 20, DRIZZLE_TYPE_VARCHAR, 0, 0, "", SKIP_OPEN_TABLE),
4090
ColumnInfo("PLUGIN_STATUS", 10, DRIZZLE_TYPE_VARCHAR, 0, 0, "Status", SKIP_OPEN_TABLE),
4091
ColumnInfo("PLUGIN_AUTHOR", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 1, "", SKIP_OPEN_TABLE),
4092
ColumnInfo("PLUGIN_DESCRIPTION", 65535, DRIZZLE_TYPE_VARCHAR, 0, 1, "", SKIP_OPEN_TABLE),
4093
ColumnInfo("PLUGIN_LICENSE", 80, DRIZZLE_TYPE_VARCHAR, 0, 1, "License", SKIP_OPEN_TABLE),
4097
ColumnInfo referential_constraints_fields_info[]=
4099
ColumnInfo("CONSTRAINT_CATALOG", FN_REFLEN, DRIZZLE_TYPE_VARCHAR, 0, 1, "", OPEN_FULL_TABLE),
4100
ColumnInfo("CONSTRAINT_SCHEMA", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0,
4101
"", OPEN_FULL_TABLE),
4102
ColumnInfo("CONSTRAINT_NAME", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0,
4103
"", OPEN_FULL_TABLE),
4104
ColumnInfo("UNIQUE_CONSTRAINT_CATALOG", FN_REFLEN, DRIZZLE_TYPE_VARCHAR, 0, 1,
4105
"", OPEN_FULL_TABLE),
4106
ColumnInfo("UNIQUE_CONSTRAINT_SCHEMA", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0,
4107
"", OPEN_FULL_TABLE),
4108
ColumnInfo("UNIQUE_CONSTRAINT_NAME", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0,
4109
MY_I_S_MAYBE_NULL, "", OPEN_FULL_TABLE),
4110
ColumnInfo("MATCH_OPTION", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, "", OPEN_FULL_TABLE),
4111
ColumnInfo("UPDATE_RULE", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, "", OPEN_FULL_TABLE),
4112
ColumnInfo("DELETE_RULE", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, "", OPEN_FULL_TABLE),
4113
ColumnInfo("TABLE_NAME", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, "", OPEN_FULL_TABLE),
4114
ColumnInfo("REFERENCED_TABLE_NAME", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0,
4115
"", OPEN_FULL_TABLE),
4119
static ColumnsISMethods columns_methods;
4120
3037
static StatusISMethods status_methods;
4121
3038
static VariablesISMethods variables_methods;
4122
static KeyColUsageISMethods key_col_usage_methods;
4123
static OpenTablesISMethods open_tables_methods;
4124
static PluginsISMethods plugins_methods;
4125
static RefConstraintsISMethods ref_constraints_methods;
4126
static SchemataISMethods schemata_methods;
4127
static StatsISMethods stats_methods;
4128
static TablesISMethods tables_methods;
4129
static TabConstraintsISMethods tab_constraints_methods;
4130
static TabNamesISMethods tab_names_methods;
4132
static InfoSchemaTable columns_table("COLUMNS",
4133
columns_fields_info,
4134
1, 2, false, true, OPTIMIZE_I_S_TABLE,
4136
3040
static InfoSchemaTable global_stat_table("GLOBAL_STATUS",
4137
3041
variables_fields_info,
4138
3042
-1, -1, false, false, 0,