~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to drizzled/show.cc

Merge Padraig

Show diffs side-by-side

added added

removed removed

Lines of Context:
41
41
#include <drizzled/item/return_date_time.h>
42
42
#include <drizzled/item/empty_string.h>
43
43
#include "drizzled/plugin_registry.h"
 
44
#include <drizzled/info_schema.h>
44
45
 
45
46
#include <string>
46
47
#include <iostream>
66
67
 
67
68
static vector<InfoSchemaTable *> all_schema_tables;
68
69
 
69
 
Table *create_schema_table(Session *session, TableList *table_list);
70
 
int make_old_format(Session *session, InfoSchemaTable *schema_table);
71
 
 
72
70
void add_infoschema_table(InfoSchemaTable *schema_table)
73
71
{
74
 
  if (schema_table->create_table == NULL)
75
 
    schema_table->create_table= create_schema_table;
76
 
  if (schema_table->old_format == NULL)
77
 
    schema_table->old_format= make_old_format;
78
 
  if (schema_table->idx_field1 == 0)
79
 
    schema_table->idx_field1= -1;
80
 
  if (schema_table->idx_field2)
81
 
   schema_table->idx_field2= -1;
 
72
  if (schema_table->getFirstColumnIndex() == 0)
 
73
    schema_table->setFirstColumnIndex(-1);
 
74
  if (schema_table->getSecondColumnIndex())
 
75
   schema_table->setSecondColumnIndex(-1);
82
76
 
83
77
  all_schema_tables.push_back(schema_table);
84
78
}
215
209
};
216
210
 
217
211
 
218
 
int fill_plugins(Session *session, TableList *tables, COND *)
 
212
int PluginsISMethods::fillTable(Session *session, TableList *tables, COND *)
219
213
{
220
214
  Table *table= tables->table;
221
215
 
382
376
  protocol->prepareForResend();
383
377
  {
384
378
    if (table_list->schema_table)
385
 
      protocol->store(table_list->schema_table->table_name);
 
379
      protocol->store(table_list->schema_table->getTableName());
386
380
    else
387
381
      protocol->store(table_list->table->alias);
388
382
  }
612
606
      (create_info_arg->options & HA_LEX_CREATE_IF_NOT_EXISTS))
613
607
    packet->append(STRING_WITH_LEN("IF NOT EXISTS "));
614
608
  if (table_list->schema_table)
615
 
    alias= table_list->schema_table->table_name;
 
609
    alias= table_list->schema_table->getTableName();
616
610
  else
617
611
    alias= share->table_name.str;
618
612
 
1087
1081
  return;
1088
1082
}
1089
1083
 
1090
 
int fill_schema_processlist(Session* session, TableList* tables, COND*)
 
1084
int ProcessListISMethods::fillTable(Session* session, TableList* tables, COND*)
1091
1085
{
1092
1086
  Table *table= tables->table;
1093
1087
  const CHARSET_INFO * const cs= system_charset_info;
1612
1606
                      LOOKUP_FIELD_VALUES *lookup_field_vals)
1613
1607
{
1614
1608
  InfoSchemaTable *schema_table= table->schema_table;
1615
 
  ST_FIELD_INFO *field_info= schema_table->fields_info;
1616
 
  const char *field_name1= schema_table->idx_field1 >= 0 ?
1617
 
    field_info[schema_table->idx_field1].field_name : "";
1618
 
  const char *field_name2= schema_table->idx_field2 >= 0 ?
1619
 
    field_info[schema_table->idx_field2].field_name : "";
 
1609
  const char *field_name1= schema_table->getFirstColumnIndex() >= 0 ?
 
1610
    schema_table->getColumnName(schema_table->getFirstColumnIndex()) : "";
 
1611
  const char *field_name2= schema_table->getSecondColumnIndex() >= 0 ?
 
1612
    schema_table->getColumnName(schema_table->getSecondColumnIndex()) : "";
1620
1613
 
1621
1614
  if (item_func->functype() == Item_func::EQ_FUNC ||
1622
1615
      item_func->functype() == Item_func::EQUAL_FUNC)
1741
1734
    Item_field *item_field= (Item_field*)item;
1742
1735
    const CHARSET_INFO * const cs= system_charset_info;
1743
1736
    InfoSchemaTable *schema_table= table->schema_table;
1744
 
    ST_FIELD_INFO *field_info= schema_table->fields_info;
1745
 
    const char *field_name1= schema_table->idx_field1 >= 0 ?
1746
 
      field_info[schema_table->idx_field1].field_name : "";
1747
 
    const char *field_name2= schema_table->idx_field2 >= 0 ?
1748
 
      field_info[schema_table->idx_field2].field_name : "";
 
1737
    const char *field_name1= schema_table->getFirstColumnIndex() >= 0 ?
 
1738
      schema_table->getColumnName(schema_table->getFirstColumnIndex()) : "";
 
1739
    const char *field_name2= schema_table->getSecondColumnIndex() >= 0 ?
 
1740
      schema_table->getColumnName(schema_table->getSecondColumnIndex()) : "";
1749
1741
    if (table->table != item_field->field->table ||
1750
1742
        (cs->coll->strnncollsp(cs, (unsigned char *) field_name1, strlen(field_name1),
1751
1743
                               (unsigned char *) item_field->field_name,
1980
1972
    List<LEX_STRING> *file_list= data->files;
1981
1973
    const char *wild= data->wild;
1982
1974
  
1983
 
    if (schema_table->hidden)
 
1975
    if (schema_table->isHidden())
1984
1976
        return(0);
1985
1977
    if (wild)
1986
1978
    {
1987
1979
      if (wild_case_compare(files_charset_info,
1988
 
                            schema_table->table_name,
 
1980
                            schema_table->getTableName(),
1989
1981
                            wild))
1990
1982
        return(0);
1991
1983
    }
1992
1984
  
1993
 
    if ((file_name= session->make_lex_string(file_name, schema_table->table_name,
1994
 
                                         strlen(schema_table->table_name),
1995
 
                                         true)) &&
 
1985
    if ((file_name= session->make_lex_string(file_name, 
 
1986
                                             schema_table->getTableName(),
 
1987
                                             strlen(schema_table->getTableName()),
 
1988
                                             true)) &&
1996
1989
        !file_list->push_back(file_name))
1997
1990
      return(0);
1998
1991
    return(1);
2006
1999
  InfoSchemaTable *tmp_schema_table= schema_tables;
2007
2000
  st_add_schema_table add_data;
2008
2001
 
2009
 
  for (; tmp_schema_table->table_name; tmp_schema_table++)
 
2002
  for (; tmp_schema_table->getTableName(); tmp_schema_table++)
2010
2003
  {
2011
 
    if (tmp_schema_table->hidden)
 
2004
    if (tmp_schema_table->isHidden())
2012
2005
      continue;
2013
2006
    if (wild)
2014
2007
    {
2015
2008
      if (wild_case_compare(files_charset_info,
2016
 
                            tmp_schema_table->table_name,
 
2009
                            tmp_schema_table->getTableName(),
2017
2010
                            wild))
2018
2011
        continue;
2019
2012
    }
2020
2013
    if ((file_name=
2021
 
         session->make_lex_string(file_name, tmp_schema_table->table_name,
2022
 
                              strlen(tmp_schema_table->table_name), true)) &&
 
2014
         session->make_lex_string(file_name, 
 
2015
                                  tmp_schema_table->getTableName(),
 
2016
                                  strlen(tmp_schema_table->getTableName()), 
 
2017
                                  true)) &&
2023
2018
        !files->push_back(file_name))
2024
2019
      continue;
2025
2020
    return(1);
2176
2171
                                 show_table_list->db_length, false);
2177
2172
 
2178
2173
 
2179
 
   error= test(schema_table->process_table(session, show_table_list,
2180
 
                                           table, res, db_name,
2181
 
                                           table_name));
 
2174
   error= test(schema_table->processTable(session, show_table_list,
 
2175
                                          table, res, db_name,
 
2176
                                          table_name));
2182
2177
   session->temporary_tables= 0;
2183
2178
   session->close_tables_for_reopen(&show_table_list);
2184
2179
 
2253
2248
  /*
2254
2249
    determine which method will be used for table opening
2255
2250
  */
2256
 
  if (schema_table->i_s_requested_object & OPTIMIZE_I_S_TABLE)
 
2251
  if (schema_table->getRequestedObject() & OPTIMIZE_I_S_TABLE)
2257
2252
  {
2258
2253
    Field **ptr, *field;
2259
2254
    int table_open_method= 0, field_indx= 0;
2260
 
    for (ptr=tables->table->field; (field= *ptr) ; ptr++)
 
2255
    for (ptr= tables->table->field; (field= *ptr) ; ptr++)
2261
2256
    {
2262
2257
      if (field->isReadSet())
2263
 
        table_open_method|= schema_table->fields_info[field_indx].open_method;
 
2258
        table_open_method|= schema_table->getColumnOpenMethod(field_indx);
2264
2259
      field_indx++;
2265
2260
    }
2266
2261
    return table_open_method;
2320
2315
  {
2321
2316
    tbl.s= share;
2322
2317
    table_list.table= &tbl;
2323
 
    res= schema_table->process_table(session, &table_list, table,
2324
 
                                     res, db_name, table_name);
 
2318
    res= schema_table->processTable(session, &table_list, table,
 
2319
                                    res, db_name, table_name);
2325
2320
  }
2326
2321
 
2327
2322
  release_table_share(share);
2342
2337
                  temporary tables that are filled at query execution time.
2343
2338
                  Those I_S tables whose data are retrieved
2344
2339
                  from frm files and storage engine are filled by the function
2345
 
                  get_all_tables().
 
2340
                  InfoSchemaMethods::fillTable().
2346
2341
 
2347
2342
  @param[in]      session                      thread handler
2348
2343
  @param[in]      tables                   I_S table
2352
2347
    @retval       0                        success
2353
2348
    @retval       1                        error
2354
2349
*/
2355
 
 
2356
 
int get_all_tables(Session *session, TableList *tables, COND *cond)
 
2350
int InfoSchemaMethods::fillTable(Session *session, TableList *tables, COND *cond)
2357
2351
{
2358
2352
  LEX *lex= session->lex;
2359
2353
  Table *table= tables->table;
2457
2451
      while ((table_name= it_files++))
2458
2452
      {
2459
2453
        table->restoreRecordAsDefault();
2460
 
        table->field[schema_table->idx_field1]->
 
2454
        table->field[schema_table->getFirstColumnIndex()]->
2461
2455
          store(db_name->str, db_name->length, system_charset_info);
2462
 
        table->field[schema_table->idx_field2]->
 
2456
        table->field[schema_table->getSecondColumnIndex()]->
2463
2457
          store(table_name->str, table_name->length, system_charset_info);
2464
2458
 
2465
2459
        if (!partial_cond || partial_cond->val_int())
2514
2508
            lex->derived_tables= 0;
2515
2509
            lex->sql_command= SQLCOM_SHOW_FIELDS;
2516
2510
            show_table_list->i_s_requested_object=
2517
 
              schema_table->i_s_requested_object;
 
2511
              schema_table->getRequestedObject();
2518
2512
            res= session->open_normal_and_derived_tables(show_table_list, DRIZZLE_LOCK_IGNORE_FLUSH);
2519
2513
            lex->sql_command= save_sql_command;
2520
2514
            /*
2548
2542
              */
2549
2543
              session->make_lex_string(&tmp_lex_string, show_table_list->alias,
2550
2544
                                       strlen(show_table_list->alias), false);
2551
 
              res= schema_table->process_table(session, show_table_list, table,
2552
 
                                               res, &orig_db_name,
2553
 
                                               &tmp_lex_string);
 
2545
              res= schema_table->processTable(session, show_table_list, table,
 
2546
                                              res, &orig_db_name,
 
2547
                                              &tmp_lex_string);
2554
2548
              session->close_tables_for_reopen(&show_table_list);
2555
2549
            }
2556
2550
            assert(!lex->query_tables_own_last);
2589
2583
}
2590
2584
 
2591
2585
 
2592
 
int fill_schema_schemata(Session *session, TableList *tables, COND *cond)
 
2586
int SchemataISMethods::fillTable(Session *session, TableList *tables, COND *cond)
2593
2587
{
2594
2588
  /*
2595
2589
    TODO: fill_schema_shemata() is called when new client is connected.
2650
2644
}
2651
2645
 
2652
2646
 
2653
 
static int get_schema_tables_record(Session *session, TableList *tables,
 
2647
int TablesISMethods::processTable(Session *session, TableList *tables,
2654
2648
                                    Table *table, bool res,
2655
2649
                                    LEX_STRING *db_name,
2656
 
                                    LEX_STRING *table_name)
 
2650
                                    LEX_STRING *table_name) const
2657
2651
{
2658
2652
  const char *tmp_buff;
2659
2653
  DRIZZLE_TIME time;
2929
2923
}
2930
2924
 
2931
2925
 
2932
 
static int get_schema_column_record(Session *session, TableList *tables,
 
2926
int InfoSchemaMethods::processTable(Session *session, TableList *tables,
2933
2927
                                    Table *table, bool res,
2934
2928
                                    LEX_STRING *db_name,
2935
 
                                    LEX_STRING *table_name)
 
2929
                                    LEX_STRING *table_name) const
2936
2930
{
2937
2931
  LEX *lex= session->lex;
2938
2932
  const char *wild= lex->wild ? lex->wild->ptr() : NULL;
3061
3055
 
3062
3056
 
3063
3057
 
3064
 
int fill_schema_charsets(Session *session, TableList *tables, COND *)
 
3058
int CharSetISMethods::fillTable(Session *session, TableList *tables, COND *)
3065
3059
{
3066
3060
  CHARSET_INFO **cs;
3067
3061
  const char *wild= session->lex->wild ? session->lex->wild->ptr() : NULL;
3092
3086
}
3093
3087
 
3094
3088
 
3095
 
int fill_schema_collation(Session *session, TableList *tables, COND *)
 
3089
int CollationISMethods::fillTable(Session *session, TableList *tables, COND *)
3096
3090
{
3097
3091
  CHARSET_INFO **cs;
3098
3092
  const char *wild= session->lex->wild ? session->lex->wild->ptr() : NULL;
3134
3128
}
3135
3129
 
3136
3130
 
3137
 
int fill_schema_coll_charset_app(Session *session, TableList *tables, COND *)
 
3131
int CollCharISMethods::fillTable(Session *session, TableList *tables, COND *)
3138
3132
{
3139
3133
  CHARSET_INFO **cs;
3140
3134
  Table *table= tables->table;
3163
3157
}
3164
3158
 
3165
3159
 
3166
 
static int get_schema_stat_record(Session *session, TableList *tables,
 
3160
int StatsISMethods::processTable(Session *session, TableList *tables,
3167
3161
                                  Table *table, bool res,
3168
3162
                                  LEX_STRING *db_name,
3169
 
                                  LEX_STRING *table_name)
 
3163
                                  LEX_STRING *table_name) const
3170
3164
{
3171
3165
  const CHARSET_INFO * const cs= system_charset_info;
3172
3166
  if (res)
3275
3269
}
3276
3270
 
3277
3271
 
3278
 
static int get_schema_constraints_record(Session *session, TableList *tables,
 
3272
int TabConstraintsISMethods::processTable(Session *session, TableList *tables,
3279
3273
                                         Table *table, bool res,
3280
3274
                                         LEX_STRING *db_name,
3281
 
                                         LEX_STRING *table_name)
 
3275
                                         LEX_STRING *table_name) const
3282
3276
{
3283
3277
  if (res)
3284
3278
  {
3349
3343
}
3350
3344
 
3351
3345
 
3352
 
static int get_schema_key_column_usage_record(Session *session,
 
3346
int KeyColUsageISMethods::processTable(Session *session,
3353
3347
                                              TableList *tables,
3354
3348
                                              Table *table, bool res,
3355
3349
                                              LEX_STRING *db_name,
3356
 
                                              LEX_STRING *table_name)
 
3350
                                              LEX_STRING *table_name) const
3357
3351
{
3358
3352
  if (res)
3359
3353
  {
3438
3432
}
3439
3433
 
3440
3434
 
3441
 
int fill_open_tables(Session *session, TableList *tables, COND *)
 
3435
int OpenTablesISMethods::fillTable(Session *session, TableList *tables, COND *)
3442
3436
{
3443
3437
  const char *wild= session->lex->wild ? session->lex->wild->ptr() : NULL;
3444
3438
  Table *table= tables->table;
3462
3456
}
3463
3457
 
3464
3458
 
3465
 
int fill_variables(Session *session, TableList *tables, COND *)
 
3459
int VariablesISMethods::fillTable(Session *session, TableList *tables, COND *)
3466
3460
{
3467
3461
  int res= 0;
3468
3462
  LEX *lex= session->lex;
3485
3479
}
3486
3480
 
3487
3481
 
3488
 
int fill_status(Session *session, TableList *tables, COND *)
 
3482
int StatusISMethods::fillTable(Session *session, TableList *tables, COND *)
3489
3483
{
3490
3484
  LEX *lex= session->lex;
3491
3485
  const char *wild= lex->wild ? lex->wild->ptr() : NULL;
3531
3525
  Fill and store records into I_S.referential_constraints table
3532
3526
 
3533
3527
  SYNOPSIS
3534
 
    get_referential_constraints_record()
 
3528
    RefConstraintsISMethods::processTable()
3535
3529
    session                 thread handle
3536
3530
    tables              table list struct(processed table)
3537
3531
    table               I_S table
3545
3539
    #   error
3546
3540
*/
3547
3541
 
3548
 
static int
3549
 
get_referential_constraints_record(Session *session, TableList *tables,
3550
 
                                   Table *table, bool res,
3551
 
                                   LEX_STRING *db_name, LEX_STRING *table_name)
 
3542
int
 
3543
RefConstraintsISMethods::processTable(Session *session, TableList *tables,
 
3544
                                      Table *table, bool res,
 
3545
                                      LEX_STRING *db_name, LEX_STRING *table_name)
 
3546
  const
3552
3547
{
3553
3548
  const CHARSET_INFO * const cs= system_charset_info;
3554
3549
 
3612
3607
  result_type operator() (argument_type schema_table)
3613
3608
  {
3614
3609
    return !my_strcasecmp(system_charset_info,
3615
 
                          schema_table->table_name,
 
3610
                          schema_table->getTableName(),
3616
3611
                          table_name);
3617
3612
  }
3618
3613
};
3634
3629
{
3635
3630
  InfoSchemaTable *schema_table= schema_tables;
3636
3631
 
3637
 
  for (; schema_table->table_name; schema_table++)
 
3632
  for (; schema_table->getTableName(); schema_table++)
3638
3633
  {
3639
3634
    if (!my_strcasecmp(system_charset_info,
3640
 
                       schema_table->table_name,
 
3635
                       schema_table->getTableName(),
3641
3636
                       table_name))
3642
3637
      return(schema_table);
3643
3638
  }
3657
3652
}
3658
3653
 
3659
3654
 
3660
 
/**
3661
 
  Create information_schema table using schema_table data.
3662
 
 
3663
 
  @note
3664
 
 
3665
 
  @param
3666
 
    session                       thread handler
3667
 
 
3668
 
  @param table_list Used to pass I_S table information(fields info, tables
3669
 
  parameters etc) and table name.
3670
 
 
3671
 
  @retval  \#             Pointer to created table
3672
 
  @retval  NULL           Can't create table
3673
 
*/
3674
 
 
3675
 
Table *create_schema_table(Session *session, TableList *table_list)
 
3655
Table *InfoSchemaMethods::createSchemaTable(Session *session, TableList *table_list)
 
3656
  const
3676
3657
{
3677
3658
  int field_count= 0;
3678
3659
  Item *item;
3679
3660
  Table *table;
3680
3661
  List<Item> field_list;
3681
3662
  InfoSchemaTable *schema_table= table_list->schema_table;
3682
 
  ST_FIELD_INFO *fields_info= schema_table->fields_info;
 
3663
  ColumnInfo *fields_info= schema_table->getColumnsInfo();
3683
3664
  const CHARSET_INFO * const cs= system_charset_info;
3684
3665
 
3685
 
  for (; fields_info->field_name; fields_info++)
 
3666
  for (; fields_info->getName(); fields_info++)
3686
3667
  {
3687
 
    switch (fields_info->field_type) {
 
3668
    switch (fields_info->getType()) {
3688
3669
    case DRIZZLE_TYPE_LONG:
3689
3670
    case DRIZZLE_TYPE_LONGLONG:
3690
 
      if (!(item= new Item_return_int(fields_info->field_name,
3691
 
                                      fields_info->field_length,
3692
 
                                      fields_info->field_type,
3693
 
                                      fields_info->value)))
 
3671
      if (!(item= new Item_return_int(fields_info->getName(),
 
3672
                                      fields_info->getLength(),
 
3673
                                      fields_info->getType(),
 
3674
                                      fields_info->getValue())))
3694
3675
      {
3695
3676
        return(0);
3696
3677
      }
3697
 
      item->unsigned_flag= (fields_info->field_flags & MY_I_S_UNSIGNED);
 
3678
      item->unsigned_flag= (fields_info->getFlags() & MY_I_S_UNSIGNED);
3698
3679
      break;
3699
3680
    case DRIZZLE_TYPE_DATE:
3700
3681
    case DRIZZLE_TYPE_TIMESTAMP:
3701
3682
    case DRIZZLE_TYPE_DATETIME:
3702
 
      if (!(item=new Item_return_date_time(fields_info->field_name,
3703
 
                                           fields_info->field_type)))
 
3683
      if (!(item=new Item_return_date_time(fields_info->getName(),
 
3684
                                           fields_info->getType())))
3704
3685
      {
3705
3686
        return(0);
3706
3687
      }
3707
3688
      break;
3708
3689
    case DRIZZLE_TYPE_DOUBLE:
3709
 
      if ((item= new Item_float(fields_info->field_name, 0.0, NOT_FIXED_DEC,
3710
 
                           fields_info->field_length)) == NULL)
 
3690
      if ((item= new Item_float(fields_info->getName(), 0.0, NOT_FIXED_DEC,
 
3691
                           fields_info->getLength())) == NULL)
3711
3692
        return NULL;
3712
3693
      break;
3713
3694
    case DRIZZLE_TYPE_NEWDECIMAL:
3714
 
      if (!(item= new Item_decimal((int64_t) fields_info->value, false)))
 
3695
      if (!(item= new Item_decimal((int64_t) fields_info->getValue(), false)))
3715
3696
      {
3716
3697
        return(0);
3717
3698
      }
3718
 
      item->unsigned_flag= (fields_info->field_flags & MY_I_S_UNSIGNED);
3719
 
      item->decimals= fields_info->field_length%10;
3720
 
      item->max_length= (fields_info->field_length/100)%100;
 
3699
      item->unsigned_flag= (fields_info->getFlags() & MY_I_S_UNSIGNED);
 
3700
      item->decimals= fields_info->getLength() % 10;
 
3701
      item->max_length= (fields_info->getLength()/100)%100;
3721
3702
      if (item->unsigned_flag == 0)
3722
3703
        item->max_length+= 1;
3723
3704
      if (item->decimals > 0)
3724
3705
        item->max_length+= 1;
3725
 
      item->set_name(fields_info->field_name,
3726
 
                     strlen(fields_info->field_name), cs);
 
3706
      item->set_name(fields_info->getName(),
 
3707
                     strlen(fields_info->getName()), cs);
3727
3708
      break;
3728
3709
    case DRIZZLE_TYPE_BLOB:
3729
 
      if (!(item= new Item_blob(fields_info->field_name,
3730
 
                                fields_info->field_length)))
 
3710
      if (!(item= new Item_blob(fields_info->getName(),
 
3711
                                fields_info->getLength())))
3731
3712
      {
3732
3713
        return(0);
3733
3714
      }
3734
3715
      break;
3735
3716
    default:
3736
 
      if (!(item= new Item_empty_string("", fields_info->field_length, cs)))
 
3717
      if (!(item= new Item_empty_string("", fields_info->getLength(), cs)))
3737
3718
      {
3738
3719
        return(0);
3739
3720
      }
3740
 
      item->set_name(fields_info->field_name,
3741
 
                     strlen(fields_info->field_name), cs);
 
3721
      item->set_name(fields_info->getName(),
 
3722
                     strlen(fields_info->getName()), cs);
3742
3723
      break;
3743
3724
    }
3744
3725
    field_list.push_back(item);
3745
 
    item->maybe_null= (fields_info->field_flags & MY_I_S_MAYBE_NULL);
 
3726
    item->maybe_null= (fields_info->getFlags() & MY_I_S_MAYBE_NULL);
3746
3727
    field_count++;
3747
3728
  }
3748
3729
  Tmp_Table_Param *tmp_table_param =
3774
3755
  Make list of fields for SHOW
3775
3756
 
3776
3757
  SYNOPSIS
3777
 
    make_old_format()
 
3758
    InfoSchemaMethods::oldFormat()
3778
3759
    session                     thread handler
3779
3760
    schema_table        pointer to 'schema_tables' element
3780
3761
 
3783
3764
   0    success
3784
3765
*/
3785
3766
 
3786
 
int make_old_format(Session *session, InfoSchemaTable *schema_table)
 
3767
int InfoSchemaMethods::oldFormat(Session *session, InfoSchemaTable *schema_table)
 
3768
  const
3787
3769
{
3788
 
  ST_FIELD_INFO *field_info= schema_table->fields_info;
 
3770
  ColumnInfo *field_info= schema_table->getColumnsInfo();
3789
3771
  Name_resolution_context *context= &session->lex->select_lex.context;
3790
 
  for (; field_info->field_name; field_info++)
 
3772
  for (; field_info->getName(); field_info++)
3791
3773
  {
3792
 
    if (field_info->old_name)
 
3774
    if (field_info->getOldName())
3793
3775
    {
3794
3776
      Item_field *field= new Item_field(context,
3795
 
                                        NULL, NULL, field_info->field_name);
 
3777
                                        NULL, NULL, field_info->getName());
3796
3778
      if (field)
3797
3779
      {
3798
 
        field->set_name(field_info->old_name,
3799
 
                        strlen(field_info->old_name),
 
3780
        field->set_name(field_info->getOldName(),
 
3781
                        strlen(field_info->getOldName()),
3800
3782
                        system_charset_info);
3801
3783
        if (session->add_item_to_list(field))
3802
3784
          return 1;
3807
3789
}
3808
3790
 
3809
3791
 
3810
 
int make_schemata_old_format(Session *session, InfoSchemaTable *schema_table)
 
3792
int SchemataISMethods::oldFormat(Session *session, InfoSchemaTable *schema_table)
 
3793
  const
3811
3794
{
3812
3795
  char tmp[128];
3813
3796
  LEX *lex= session->lex;
3816
3799
 
3817
3800
  if (!sel->item_list.elements)
3818
3801
  {
3819
 
    ST_FIELD_INFO *field_info= &schema_table->fields_info[1];
 
3802
    ColumnInfo *field_info= schema_table->getSpecificColumn(1);
3820
3803
    String buffer(tmp,sizeof(tmp), system_charset_info);
3821
3804
    Item_field *field= new Item_field(context,
3822
 
                                      NULL, NULL, field_info->field_name);
 
3805
                                      NULL, NULL, field_info->getName());
3823
3806
    if (!field || session->add_item_to_list(field))
3824
3807
      return 1;
3825
3808
    buffer.length(0);
3826
 
    buffer.append(field_info->old_name);
 
3809
    buffer.append(field_info->getOldName());
3827
3810
    if (lex->wild && lex->wild->ptr())
3828
3811
    {
3829
3812
      buffer.append(STRING_WITH_LEN(" ("));
3836
3819
}
3837
3820
 
3838
3821
 
3839
 
int make_table_names_old_format(Session *session, InfoSchemaTable *schema_table)
 
3822
int TabNamesISMethods::oldFormat(Session *session, InfoSchemaTable *schema_table)
 
3823
  const
3840
3824
{
3841
3825
  char tmp[128];
3842
3826
  String buffer(tmp,sizeof(tmp), session->charset());
3843
3827
  LEX *lex= session->lex;
3844
3828
  Name_resolution_context *context= &lex->select_lex.context;
3845
3829
 
3846
 
  ST_FIELD_INFO *field_info= &schema_table->fields_info[2];
 
3830
  ColumnInfo *field_info= schema_table->getSpecificColumn(2);
3847
3831
  buffer.length(0);
3848
 
  buffer.append(field_info->old_name);
 
3832
  buffer.append(field_info->getOldName());
3849
3833
  buffer.append(lex->select_lex.db);
3850
3834
  if (lex->wild && lex->wild->ptr())
3851
3835
  {
3854
3838
    buffer.append(')');
3855
3839
  }
3856
3840
  Item_field *field= new Item_field(context,
3857
 
                                    NULL, NULL, field_info->field_name);
 
3841
                                    NULL, NULL, field_info->getName());
3858
3842
  if (session->add_item_to_list(field))
3859
3843
    return 1;
3860
3844
  field->set_name(buffer.ptr(), buffer.length(), system_charset_info);
3861
3845
  if (session->lex->verbose)
3862
3846
  {
3863
3847
    field->set_name(buffer.ptr(), buffer.length(), system_charset_info);
3864
 
    field_info= &schema_table->fields_info[3];
3865
 
    field= new Item_field(context, NULL, NULL, field_info->field_name);
 
3848
    field_info= schema_table->getSpecificColumn(3);
 
3849
    field= new Item_field(context, NULL, NULL, field_info->getName());
3866
3850
    if (session->add_item_to_list(field))
3867
3851
      return 1;
3868
 
    field->set_name(field_info->old_name, strlen(field_info->old_name),
 
3852
    field->set_name(field_info->getOldName(), strlen(field_info->getOldName()),
3869
3853
                    system_charset_info);
3870
3854
  }
3871
3855
  return 0;
3872
3856
}
3873
3857
 
3874
3858
 
3875
 
int make_columns_old_format(Session *session, InfoSchemaTable *schema_table)
 
3859
int ColumnsISMethods::oldFormat(Session *session, InfoSchemaTable *schema_table)
 
3860
  const
3876
3861
{
3877
3862
  int fields_arr[]= {3, 14, 13, 6, 15, 5, 16, 17, 18, -1};
3878
3863
  int *field_num= fields_arr;
3879
 
  ST_FIELD_INFO *field_info;
 
3864
  ColumnInfo *field_info;
3880
3865
  Name_resolution_context *context= &session->lex->select_lex.context;
3881
3866
 
3882
3867
  for (; *field_num >= 0; field_num++)
3883
3868
  {
3884
 
    field_info= &schema_table->fields_info[*field_num];
 
3869
    field_info= schema_table->getSpecificColumn(*field_num);
3885
3870
    if (!session->lex->verbose && (*field_num == 13 ||
3886
3871
                               *field_num == 17 ||
3887
3872
                               *field_num == 18))
3888
3873
      continue;
3889
3874
    Item_field *field= new Item_field(context,
3890
 
                                      NULL, NULL, field_info->field_name);
 
3875
                                      NULL, NULL, field_info->getName());
3891
3876
    if (field)
3892
3877
    {
3893
 
      field->set_name(field_info->old_name,
3894
 
                      strlen(field_info->old_name),
 
3878
      field->set_name(field_info->getOldName(),
 
3879
                      strlen(field_info->getOldName()),
3895
3880
                      system_charset_info);
3896
3881
      if (session->add_item_to_list(field))
3897
3882
        return 1;
3901
3886
}
3902
3887
 
3903
3888
 
3904
 
int make_character_sets_old_format(Session *session, InfoSchemaTable *schema_table)
 
3889
int CharSetISMethods::oldFormat(Session *session, InfoSchemaTable *schema_table)
 
3890
  const
3905
3891
{
3906
3892
  int fields_arr[]= {0, 2, 1, 3, -1};
3907
3893
  int *field_num= fields_arr;
3908
 
  ST_FIELD_INFO *field_info;
 
3894
  ColumnInfo *field_info;
3909
3895
  Name_resolution_context *context= &session->lex->select_lex.context;
3910
3896
 
3911
3897
  for (; *field_num >= 0; field_num++)
3912
3898
  {
3913
 
    field_info= &schema_table->fields_info[*field_num];
 
3899
    field_info= schema_table->getSpecificColumn(*field_num);
3914
3900
    Item_field *field= new Item_field(context,
3915
 
                                      NULL, NULL, field_info->field_name);
 
3901
                                      NULL, NULL, field_info->getName());
3916
3902
    if (field)
3917
3903
    {
3918
 
      field->set_name(field_info->old_name,
3919
 
                      strlen(field_info->old_name),
 
3904
      field->set_name(field_info->getOldName(),
 
3905
                      strlen(field_info->getOldName()),
3920
3906
                      system_charset_info);
3921
3907
      if (session->add_item_to_list(field))
3922
3908
        return 1;
3942
3928
bool mysql_schema_table(Session *session, LEX *, TableList *table_list)
3943
3929
{
3944
3930
  Table *table;
3945
 
  if (!(table= table_list->schema_table->create_table(session, table_list)))
 
3931
  if (!(table= table_list->schema_table->createSchemaTable(session, table_list)))
3946
3932
    return true;
3947
3933
  table->s->tmp_table= SYSTEM_TMP_TABLE;
3948
3934
  /*
3991
3977
  */
3992
3978
  session->make_lex_string(&db, INFORMATION_SCHEMA_NAME.c_str(),
3993
3979
                       INFORMATION_SCHEMA_NAME.length(), 0);
3994
 
  session->make_lex_string(&table, schema_table->table_name,
3995
 
                       strlen(schema_table->table_name), 0);
3996
 
  if (schema_table->old_format(session, schema_table) ||   /* Handle old syntax */
 
3980
  session->make_lex_string(&table, schema_table->getTableName(),
 
3981
                           strlen(schema_table->getTableName()), 0);
 
3982
  if (schema_table->oldFormat(session, schema_table) ||   /* Handle old syntax */
3997
3983
      !sel->add_table_to_list(session, new Table_ident(session, db, table, 0),
3998
3984
                              0, 0, TL_READ))
3999
3985
  {
4039
4025
 
4040
4026
      /* skip I_S optimizations specific to get_all_tables */
4041
4027
      if (session->lex->describe &&
4042
 
          (table_list->schema_table->fill_table != get_all_tables))
 
4028
          (table_list->schema_table->isOptimizationPossible() != true))
 
4029
      {
4043
4030
        continue;
 
4031
      }
4044
4032
 
4045
4033
      /*
4046
4034
        If schema table is already processed and
4072
4060
      else
4073
4061
        table_list->table->file->stats.records= 0;
4074
4062
 
4075
 
      if (table_list->schema_table->fill_table(session, table_list,
 
4063
      if (table_list->schema_table->fillTable(session, table_list,
4076
4064
                                               tab->select_cond))
4077
4065
      {
4078
4066
        result= 1;
4089
4077
  return(result);
4090
4078
}
4091
4079
 
4092
 
ST_FIELD_INFO schema_fields_info[]=
4093
 
{
4094
 
  {"CATALOG_NAME", FN_REFLEN, DRIZZLE_TYPE_VARCHAR, 0, 1, 0, SKIP_OPEN_TABLE},
4095
 
  {"SCHEMA_NAME", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, "Database",
4096
 
   SKIP_OPEN_TABLE},
4097
 
  {"DEFAULT_CHARACTER_SET_NAME", 64, DRIZZLE_TYPE_VARCHAR, 0, 0, 0,
4098
 
   SKIP_OPEN_TABLE},
4099
 
  {"DEFAULT_COLLATION_NAME", 64, DRIZZLE_TYPE_VARCHAR, 0, 0, 0, SKIP_OPEN_TABLE},
4100
 
  {"SQL_PATH", FN_REFLEN, DRIZZLE_TYPE_VARCHAR, 0, 1, 0, SKIP_OPEN_TABLE},
4101
 
  {0, 0, DRIZZLE_TYPE_VARCHAR, 0, 0, 0, SKIP_OPEN_TABLE}
4102
 
};
4103
 
 
4104
 
 
4105
 
ST_FIELD_INFO tables_fields_info[]=
4106
 
{
4107
 
  {"TABLE_CATALOG", FN_REFLEN, DRIZZLE_TYPE_VARCHAR, 0, 1, 0, SKIP_OPEN_TABLE},
4108
 
  {"TABLE_SCHEMA", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, 0, SKIP_OPEN_TABLE},
4109
 
  {"TABLE_NAME", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, "Name",
4110
 
   SKIP_OPEN_TABLE},
4111
 
  {"TABLE_TYPE", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, 0, OPEN_FRM_ONLY},
4112
 
  {"ENGINE", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 1, "Engine", OPEN_FRM_ONLY},
4113
 
  {"VERSION", MY_INT64_NUM_DECIMAL_DIGITS, DRIZZLE_TYPE_LONGLONG, 0,
4114
 
   (MY_I_S_MAYBE_NULL | MY_I_S_UNSIGNED), "Version", OPEN_FRM_ONLY},
4115
 
  {"ROW_FORMAT", 10, DRIZZLE_TYPE_VARCHAR, 0, 1, "Row_format", OPEN_FULL_TABLE},
4116
 
  {"TABLE_ROWS", MY_INT64_NUM_DECIMAL_DIGITS, DRIZZLE_TYPE_LONGLONG, 0,
4117
 
   (MY_I_S_MAYBE_NULL | MY_I_S_UNSIGNED), "Rows", OPEN_FULL_TABLE},
4118
 
  {"AVG_ROW_LENGTH", MY_INT64_NUM_DECIMAL_DIGITS, DRIZZLE_TYPE_LONGLONG, 0,
4119
 
   (MY_I_S_MAYBE_NULL | MY_I_S_UNSIGNED), "Avg_row_length", OPEN_FULL_TABLE},
4120
 
  {"DATA_LENGTH", MY_INT64_NUM_DECIMAL_DIGITS, DRIZZLE_TYPE_LONGLONG, 0,
4121
 
   (MY_I_S_MAYBE_NULL | MY_I_S_UNSIGNED), "Data_length", OPEN_FULL_TABLE},
4122
 
  {"MAX_DATA_LENGTH", MY_INT64_NUM_DECIMAL_DIGITS, DRIZZLE_TYPE_LONGLONG, 0,
4123
 
   (MY_I_S_MAYBE_NULL | MY_I_S_UNSIGNED), "Max_data_length", OPEN_FULL_TABLE},
4124
 
  {"INDEX_LENGTH", MY_INT64_NUM_DECIMAL_DIGITS, DRIZZLE_TYPE_LONGLONG, 0,
4125
 
   (MY_I_S_MAYBE_NULL | MY_I_S_UNSIGNED), "Index_length", OPEN_FULL_TABLE},
4126
 
  {"DATA_FREE", MY_INT64_NUM_DECIMAL_DIGITS, DRIZZLE_TYPE_LONGLONG, 0,
4127
 
   (MY_I_S_MAYBE_NULL | MY_I_S_UNSIGNED), "Data_free", OPEN_FULL_TABLE},
4128
 
  {"AUTO_INCREMENT", MY_INT64_NUM_DECIMAL_DIGITS , DRIZZLE_TYPE_LONGLONG, 0,
4129
 
   (MY_I_S_MAYBE_NULL | MY_I_S_UNSIGNED), "Auto_increment", OPEN_FULL_TABLE},
4130
 
  {"CREATE_TIME", 0, DRIZZLE_TYPE_DATETIME, 0, 1, "Create_time", OPEN_FULL_TABLE},
4131
 
  {"UPDATE_TIME", 0, DRIZZLE_TYPE_DATETIME, 0, 1, "Update_time", OPEN_FULL_TABLE},
4132
 
  {"CHECK_TIME", 0, DRIZZLE_TYPE_DATETIME, 0, 1, "Check_time", OPEN_FULL_TABLE},
4133
 
  {"TABLE_COLLATION", 64, DRIZZLE_TYPE_VARCHAR, 0, 1, "Collation", OPEN_FRM_ONLY},
4134
 
  {"CHECKSUM", MY_INT64_NUM_DECIMAL_DIGITS, DRIZZLE_TYPE_LONGLONG, 0,
4135
 
   (MY_I_S_MAYBE_NULL | MY_I_S_UNSIGNED), "Checksum", OPEN_FULL_TABLE},
4136
 
  {"CREATE_OPTIONS", 255, DRIZZLE_TYPE_VARCHAR, 0, 1, "Create_options",
4137
 
   OPEN_FRM_ONLY},
4138
 
  {"TABLE_COMMENT", TABLE_COMMENT_MAXLEN, DRIZZLE_TYPE_VARCHAR, 0, 0, "Comment", OPEN_FRM_ONLY},
4139
 
  {0, 0, DRIZZLE_TYPE_VARCHAR, 0, 0, 0, SKIP_OPEN_TABLE}
4140
 
};
4141
 
 
4142
 
 
4143
 
ST_FIELD_INFO columns_fields_info[]=
4144
 
{
4145
 
  {"TABLE_CATALOG", FN_REFLEN, DRIZZLE_TYPE_VARCHAR, 0, 1, 0, OPEN_FRM_ONLY},
4146
 
  {"TABLE_SCHEMA", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, 0, OPEN_FRM_ONLY},
4147
 
  {"TABLE_NAME", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, 0, OPEN_FRM_ONLY},
4148
 
  {"COLUMN_NAME", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, "Field",
4149
 
   OPEN_FRM_ONLY},
4150
 
  {"ORDINAL_POSITION", MY_INT64_NUM_DECIMAL_DIGITS, DRIZZLE_TYPE_LONGLONG, 0,
4151
 
   MY_I_S_UNSIGNED, 0, OPEN_FRM_ONLY},
4152
 
  {"COLUMN_DEFAULT", MAX_FIELD_VARCHARLENGTH, DRIZZLE_TYPE_VARCHAR, 0,
4153
 
   1, "Default", OPEN_FRM_ONLY},
4154
 
  {"IS_NULLABLE", 3, DRIZZLE_TYPE_VARCHAR, 0, 0, "Null", OPEN_FRM_ONLY},
4155
 
  {"DATA_TYPE", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, 0, OPEN_FRM_ONLY},
4156
 
  {"CHARACTER_MAXIMUM_LENGTH", MY_INT64_NUM_DECIMAL_DIGITS, DRIZZLE_TYPE_LONGLONG,
4157
 
   0, (MY_I_S_MAYBE_NULL | MY_I_S_UNSIGNED), 0, OPEN_FRM_ONLY},
4158
 
  {"CHARACTER_OCTET_LENGTH", MY_INT64_NUM_DECIMAL_DIGITS , DRIZZLE_TYPE_LONGLONG,
4159
 
   0, (MY_I_S_MAYBE_NULL | MY_I_S_UNSIGNED), 0, OPEN_FRM_ONLY},
4160
 
  {"NUMERIC_PRECISION", MY_INT64_NUM_DECIMAL_DIGITS, DRIZZLE_TYPE_LONGLONG,
4161
 
   0, (MY_I_S_MAYBE_NULL | MY_I_S_UNSIGNED), 0, OPEN_FRM_ONLY},
4162
 
  {"NUMERIC_SCALE", MY_INT64_NUM_DECIMAL_DIGITS , DRIZZLE_TYPE_LONGLONG,
4163
 
   0, (MY_I_S_MAYBE_NULL | MY_I_S_UNSIGNED), 0, OPEN_FRM_ONLY},
4164
 
  {"CHARACTER_SET_NAME", 64, DRIZZLE_TYPE_VARCHAR, 0, 1, 0, OPEN_FRM_ONLY},
4165
 
  {"COLLATION_NAME", 64, DRIZZLE_TYPE_VARCHAR, 0, 1, "Collation", OPEN_FRM_ONLY},
4166
 
  {"COLUMN_TYPE", 65535, DRIZZLE_TYPE_VARCHAR, 0, 0, "Type", OPEN_FRM_ONLY},
4167
 
  {"COLUMN_KEY", 3, DRIZZLE_TYPE_VARCHAR, 0, 0, "Key", OPEN_FRM_ONLY},
4168
 
  {"EXTRA", 27, DRIZZLE_TYPE_VARCHAR, 0, 0, "Extra", OPEN_FRM_ONLY},
4169
 
  {"PRIVILEGES", 80, DRIZZLE_TYPE_VARCHAR, 0, 0, "Privileges", OPEN_FRM_ONLY},
4170
 
  {"COLUMN_COMMENT", COLUMN_COMMENT_MAXLEN, DRIZZLE_TYPE_VARCHAR, 0, 0, "Comment", OPEN_FRM_ONLY},
4171
 
  {"STORAGE", 8, DRIZZLE_TYPE_VARCHAR, 0, 0, "Storage", OPEN_FRM_ONLY},
4172
 
  {"FORMAT", 8, DRIZZLE_TYPE_VARCHAR, 0, 0, "Format", OPEN_FRM_ONLY},
4173
 
  {0, 0, DRIZZLE_TYPE_VARCHAR, 0, 0, 0, SKIP_OPEN_TABLE}
4174
 
};
4175
 
 
4176
 
 
4177
 
ST_FIELD_INFO charsets_fields_info[]=
4178
 
{
4179
 
  {"CHARACTER_SET_NAME", 64, DRIZZLE_TYPE_VARCHAR, 0, 0, "Charset",
4180
 
   SKIP_OPEN_TABLE},
4181
 
  {"DEFAULT_COLLATE_NAME", 64, DRIZZLE_TYPE_VARCHAR, 0, 0, "Default collation",
4182
 
   SKIP_OPEN_TABLE},
4183
 
  {"DESCRIPTION", 60, DRIZZLE_TYPE_VARCHAR, 0, 0, "Description",
4184
 
   SKIP_OPEN_TABLE},
4185
 
  {"MAXLEN", 3, DRIZZLE_TYPE_LONGLONG, 0, 0, "Maxlen", SKIP_OPEN_TABLE},
4186
 
  {0, 0, DRIZZLE_TYPE_VARCHAR, 0, 0, 0, SKIP_OPEN_TABLE}
4187
 
};
4188
 
 
4189
 
 
4190
 
ST_FIELD_INFO collation_fields_info[]=
4191
 
{
4192
 
  {"COLLATION_NAME", 64, DRIZZLE_TYPE_VARCHAR, 0, 0, "Collation", SKIP_OPEN_TABLE},
4193
 
  {"CHARACTER_SET_NAME", 64, DRIZZLE_TYPE_VARCHAR, 0, 0, "Charset",
4194
 
   SKIP_OPEN_TABLE},
4195
 
  {"ID", MY_INT32_NUM_DECIMAL_DIGITS, DRIZZLE_TYPE_LONGLONG, 0, 0, "Id",
4196
 
   SKIP_OPEN_TABLE},
4197
 
  {"IS_DEFAULT", 3, DRIZZLE_TYPE_VARCHAR, 0, 0, "Default", SKIP_OPEN_TABLE},
4198
 
  {"IS_COMPILED", 3, DRIZZLE_TYPE_VARCHAR, 0, 0, "Compiled", SKIP_OPEN_TABLE},
4199
 
  {"SORTLEN", 3, DRIZZLE_TYPE_LONGLONG, 0, 0, "Sortlen", SKIP_OPEN_TABLE},
4200
 
  {0, 0, DRIZZLE_TYPE_VARCHAR, 0, 0, 0, SKIP_OPEN_TABLE}
4201
 
};
4202
 
 
4203
 
 
4204
 
 
4205
 
ST_FIELD_INFO coll_charset_app_fields_info[]=
4206
 
{
4207
 
  {"COLLATION_NAME", 64, DRIZZLE_TYPE_VARCHAR, 0, 0, 0, SKIP_OPEN_TABLE},
4208
 
  {"CHARACTER_SET_NAME", 64, DRIZZLE_TYPE_VARCHAR, 0, 0, 0, SKIP_OPEN_TABLE},
4209
 
  {0, 0, DRIZZLE_TYPE_VARCHAR, 0, 0, 0, SKIP_OPEN_TABLE}
4210
 
};
4211
 
 
4212
 
 
4213
 
ST_FIELD_INFO stat_fields_info[]=
4214
 
{
4215
 
  {"TABLE_CATALOG", FN_REFLEN, DRIZZLE_TYPE_VARCHAR, 0, 1, 0, OPEN_FRM_ONLY},
4216
 
  {"TABLE_SCHEMA", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, 0, OPEN_FRM_ONLY},
4217
 
  {"TABLE_NAME", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, "Table", OPEN_FRM_ONLY},
4218
 
  {"NON_UNIQUE", 1, DRIZZLE_TYPE_LONGLONG, 0, 0, "Non_unique", OPEN_FRM_ONLY},
4219
 
  {"INDEX_SCHEMA", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, 0, OPEN_FRM_ONLY},
4220
 
  {"INDEX_NAME", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, "Key_name",
4221
 
   OPEN_FRM_ONLY},
4222
 
  {"SEQ_IN_INDEX", 2, DRIZZLE_TYPE_LONGLONG, 0, 0, "Seq_in_index", OPEN_FRM_ONLY},
4223
 
  {"COLUMN_NAME", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, "Column_name",
4224
 
   OPEN_FRM_ONLY},
4225
 
  {"COLLATION", 1, DRIZZLE_TYPE_VARCHAR, 0, 1, "Collation", OPEN_FRM_ONLY},
4226
 
  {"CARDINALITY", MY_INT64_NUM_DECIMAL_DIGITS, DRIZZLE_TYPE_LONGLONG, 0, 1,
4227
 
   "Cardinality", OPEN_FULL_TABLE},
4228
 
  {"SUB_PART", 3, DRIZZLE_TYPE_LONGLONG, 0, 1, "Sub_part", OPEN_FRM_ONLY},
4229
 
  {"PACKED", 10, DRIZZLE_TYPE_VARCHAR, 0, 1, "Packed", OPEN_FRM_ONLY},
4230
 
  {"NULLABLE", 3, DRIZZLE_TYPE_VARCHAR, 0, 0, "Null", OPEN_FRM_ONLY},
4231
 
  {"INDEX_TYPE", 16, DRIZZLE_TYPE_VARCHAR, 0, 0, "Index_type", OPEN_FULL_TABLE},
4232
 
  {"COMMENT", 16, DRIZZLE_TYPE_VARCHAR, 0, 1, "Comment", OPEN_FRM_ONLY},
4233
 
  {"INDEX_COMMENT", INDEX_COMMENT_MAXLEN, DRIZZLE_TYPE_VARCHAR, 0, 0, "Index_Comment", OPEN_FRM_ONLY},
4234
 
  {0, 0, DRIZZLE_TYPE_VARCHAR, 0, 0, 0, SKIP_OPEN_TABLE}
4235
 
};
4236
 
 
4237
 
 
4238
 
ST_FIELD_INFO table_constraints_fields_info[]=
4239
 
{
4240
 
  {"CONSTRAINT_CATALOG", FN_REFLEN, DRIZZLE_TYPE_VARCHAR, 0, 1, 0, OPEN_FULL_TABLE},
4241
 
  {"CONSTRAINT_SCHEMA", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, 0,
4242
 
   OPEN_FULL_TABLE},
4243
 
  {"CONSTRAINT_NAME", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, 0,
4244
 
   OPEN_FULL_TABLE},
4245
 
  {"TABLE_SCHEMA", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, 0, OPEN_FULL_TABLE},
4246
 
  {"TABLE_NAME", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, 0, OPEN_FULL_TABLE},
4247
 
  {"CONSTRAINT_TYPE", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, 0,
4248
 
   OPEN_FULL_TABLE},
4249
 
  {0, 0, DRIZZLE_TYPE_VARCHAR, 0, 0, 0, SKIP_OPEN_TABLE}
4250
 
};
4251
 
 
4252
 
 
4253
 
ST_FIELD_INFO key_column_usage_fields_info[]=
4254
 
{
4255
 
  {"CONSTRAINT_CATALOG", FN_REFLEN, DRIZZLE_TYPE_VARCHAR, 0, 1, 0, OPEN_FULL_TABLE},
4256
 
  {"CONSTRAINT_SCHEMA", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, 0,
4257
 
   OPEN_FULL_TABLE},
4258
 
  {"CONSTRAINT_NAME", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, 0,
4259
 
   OPEN_FULL_TABLE},
4260
 
  {"TABLE_CATALOG", FN_REFLEN, DRIZZLE_TYPE_VARCHAR, 0, 1, 0, OPEN_FULL_TABLE},
4261
 
  {"TABLE_SCHEMA", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, 0, OPEN_FULL_TABLE},
4262
 
  {"TABLE_NAME", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, 0, OPEN_FULL_TABLE},
4263
 
  {"COLUMN_NAME", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, 0, OPEN_FULL_TABLE},
4264
 
  {"ORDINAL_POSITION", 10 ,DRIZZLE_TYPE_LONGLONG, 0, 0, 0, OPEN_FULL_TABLE},
4265
 
  {"POSITION_IN_UNIQUE_CONSTRAINT", 10 ,DRIZZLE_TYPE_LONGLONG, 0, 1, 0,
4266
 
   OPEN_FULL_TABLE},
4267
 
  {"REFERENCED_TABLE_SCHEMA", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 1, 0,
4268
 
   OPEN_FULL_TABLE},
4269
 
  {"REFERENCED_TABLE_NAME", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 1, 0,
4270
 
   OPEN_FULL_TABLE},
4271
 
  {"REFERENCED_COLUMN_NAME", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 1, 0,
4272
 
   OPEN_FULL_TABLE},
4273
 
  {0, 0, DRIZZLE_TYPE_VARCHAR, 0, 0, 0, SKIP_OPEN_TABLE}
4274
 
};
4275
 
 
4276
 
 
4277
 
ST_FIELD_INFO table_names_fields_info[]=
4278
 
{
4279
 
  {"TABLE_CATALOG", FN_REFLEN, DRIZZLE_TYPE_VARCHAR, 0, 1, 0, SKIP_OPEN_TABLE},
4280
 
  {"TABLE_SCHEMA",NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, 0, SKIP_OPEN_TABLE},
4281
 
  {"TABLE_NAME", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, "Tables_in_",
4282
 
   SKIP_OPEN_TABLE},
4283
 
  {"TABLE_TYPE", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, "Table_type",
4284
 
   OPEN_FRM_ONLY},
4285
 
  {0, 0, DRIZZLE_TYPE_VARCHAR, 0, 0, 0, SKIP_OPEN_TABLE}
4286
 
};
4287
 
 
4288
 
 
4289
 
ST_FIELD_INFO open_tables_fields_info[]=
4290
 
{
4291
 
  {"Database", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, "Database",
4292
 
   SKIP_OPEN_TABLE},
4293
 
  {"Table",NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, "Table", SKIP_OPEN_TABLE},
4294
 
  {"In_use", 1, DRIZZLE_TYPE_LONGLONG, 0, 0, "In_use", SKIP_OPEN_TABLE},
4295
 
  {"Name_locked", 4, DRIZZLE_TYPE_LONGLONG, 0, 0, "Name_locked", SKIP_OPEN_TABLE},
4296
 
  {0, 0, DRIZZLE_TYPE_VARCHAR, 0, 0, 0, SKIP_OPEN_TABLE}
4297
 
};
4298
 
 
4299
 
 
4300
 
ST_FIELD_INFO variables_fields_info[]=
4301
 
{
4302
 
  {"VARIABLE_NAME", 64, DRIZZLE_TYPE_VARCHAR, 0, 0, "Variable_name",
4303
 
   SKIP_OPEN_TABLE},
4304
 
  {"VARIABLE_VALUE", 16300, DRIZZLE_TYPE_VARCHAR, 0, 1, "Value", SKIP_OPEN_TABLE},
4305
 
  {0, 0, DRIZZLE_TYPE_VARCHAR, 0, 0, 0, SKIP_OPEN_TABLE}
4306
 
};
4307
 
 
4308
 
 
4309
 
ST_FIELD_INFO processlist_fields_info[]=
4310
 
{
4311
 
  {"ID", 4, DRIZZLE_TYPE_LONGLONG, 0, 0, "Id", SKIP_OPEN_TABLE},
4312
 
  {"USER", 16, DRIZZLE_TYPE_VARCHAR, 0, 0, "User", SKIP_OPEN_TABLE},
4313
 
  {"HOST", LIST_PROCESS_HOST_LEN,  DRIZZLE_TYPE_VARCHAR, 0, 0, "Host",
4314
 
   SKIP_OPEN_TABLE},
4315
 
  {"DB", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 1, "Db", SKIP_OPEN_TABLE},
4316
 
  {"COMMAND", 16, DRIZZLE_TYPE_VARCHAR, 0, 0, "Command", SKIP_OPEN_TABLE},
4317
 
  {"TIME", 7, DRIZZLE_TYPE_LONGLONG, 0, 0, "Time", SKIP_OPEN_TABLE},
4318
 
  {"STATE", 64, DRIZZLE_TYPE_VARCHAR, 0, 1, "State", SKIP_OPEN_TABLE},
4319
 
  {"INFO", PROCESS_LIST_INFO_WIDTH, DRIZZLE_TYPE_VARCHAR, 0, 1, "Info",
4320
 
   SKIP_OPEN_TABLE},
4321
 
  {0, 0, DRIZZLE_TYPE_VARCHAR, 0, 0, 0, SKIP_OPEN_TABLE}
4322
 
};
4323
 
 
4324
 
 
4325
 
ST_FIELD_INFO plugin_fields_info[]=
4326
 
{
4327
 
  {"PLUGIN_NAME", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, "Name",
4328
 
   SKIP_OPEN_TABLE},
4329
 
  {"PLUGIN_VERSION", 20, DRIZZLE_TYPE_VARCHAR, 0, 0, 0, SKIP_OPEN_TABLE},
4330
 
  {"PLUGIN_STATUS", 10, DRIZZLE_TYPE_VARCHAR, 0, 0, "Status", SKIP_OPEN_TABLE},
4331
 
  {"PLUGIN_AUTHOR", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 1, 0, SKIP_OPEN_TABLE},
4332
 
  {"PLUGIN_DESCRIPTION", 65535, DRIZZLE_TYPE_VARCHAR, 0, 1, 0, SKIP_OPEN_TABLE},
4333
 
  {"PLUGIN_LICENSE", 80, DRIZZLE_TYPE_VARCHAR, 0, 1, "License", SKIP_OPEN_TABLE},
4334
 
  {0, 0, DRIZZLE_TYPE_VARCHAR, 0, 0, 0, SKIP_OPEN_TABLE}
4335
 
};
4336
 
 
4337
 
ST_FIELD_INFO referential_constraints_fields_info[]=
4338
 
{
4339
 
  {"CONSTRAINT_CATALOG", FN_REFLEN, DRIZZLE_TYPE_VARCHAR, 0, 1, 0, OPEN_FULL_TABLE},
4340
 
  {"CONSTRAINT_SCHEMA", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, 0,
4341
 
   OPEN_FULL_TABLE},
4342
 
  {"CONSTRAINT_NAME", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, 0,
4343
 
   OPEN_FULL_TABLE},
4344
 
  {"UNIQUE_CONSTRAINT_CATALOG", FN_REFLEN, DRIZZLE_TYPE_VARCHAR, 0, 1, 0,
4345
 
   OPEN_FULL_TABLE},
4346
 
  {"UNIQUE_CONSTRAINT_SCHEMA", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, 0,
4347
 
   OPEN_FULL_TABLE},
4348
 
  {"UNIQUE_CONSTRAINT_NAME", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0,
4349
 
   MY_I_S_MAYBE_NULL, 0, OPEN_FULL_TABLE},
4350
 
  {"MATCH_OPTION", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, 0, OPEN_FULL_TABLE},
4351
 
  {"UPDATE_RULE", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, 0, OPEN_FULL_TABLE},
4352
 
  {"DELETE_RULE", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, 0, OPEN_FULL_TABLE},
4353
 
  {"TABLE_NAME", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, 0, OPEN_FULL_TABLE},
4354
 
  {"REFERENCED_TABLE_NAME", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, 0,
4355
 
   OPEN_FULL_TABLE},
4356
 
  {0, 0, DRIZZLE_TYPE_VARCHAR, 0, 0, 0, SKIP_OPEN_TABLE}
4357
 
};
4358
 
 
4359
 
 
4360
 
/*
4361
 
  Description of ST_FIELD_INFO in table.h
4362
 
 
4363
 
  Make sure that the order of schema_tables and enum_schema_tables are the same.
4364
 
 
4365
 
*/
 
4080
ColumnInfo schema_fields_info[]=
 
4081
{
 
4082
  ColumnInfo("CATALOG_NAME",
 
4083
            FN_REFLEN,
 
4084
            DRIZZLE_TYPE_VARCHAR,
 
4085
            0, 1, 0, SKIP_OPEN_TABLE),
 
4086
  ColumnInfo("SCHEMA_NAME",
 
4087
            NAME_CHAR_LEN,
 
4088
            DRIZZLE_TYPE_VARCHAR,
 
4089
            0, 0, "Database", SKIP_OPEN_TABLE),
 
4090
  ColumnInfo("DEFAULT_CHARACTER_SET_NAME", 
 
4091
            64, DRIZZLE_TYPE_VARCHAR, 0, 0, 0,
 
4092
            SKIP_OPEN_TABLE),
 
4093
  ColumnInfo("DEFAULT_COLLATION_NAME",
 
4094
            64, DRIZZLE_TYPE_VARCHAR, 0, 0, 0,
 
4095
            SKIP_OPEN_TABLE),
 
4096
  ColumnInfo("SQL_PATH",
 
4097
            FN_REFLEN,
 
4098
            DRIZZLE_TYPE_VARCHAR,
 
4099
            0, 1, 0, SKIP_OPEN_TABLE),
 
4100
  ColumnInfo()
 
4101
};
 
4102
 
 
4103
 
 
4104
ColumnInfo tables_fields_info[]=
 
4105
{
 
4106
  ColumnInfo("TABLE_CATALOG",  FN_REFLEN, DRIZZLE_TYPE_VARCHAR,
 
4107
            0, 1, 0, SKIP_OPEN_TABLE),
 
4108
  ColumnInfo("TABLE_SCHEMA", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR,
 
4109
            0, 0, 0, SKIP_OPEN_TABLE), 
 
4110
  ColumnInfo("TABLE_NAME", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR,
 
4111
            0, 0, "Name", SKIP_OPEN_TABLE),
 
4112
  ColumnInfo("TABLE_TYPE", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR,
 
4113
            0, 0, 0, OPEN_FRM_ONLY),
 
4114
  ColumnInfo("ENGINE", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR,
 
4115
            0, 1, "Engine", OPEN_FRM_ONLY),
 
4116
  ColumnInfo("VERSION", MY_INT64_NUM_DECIMAL_DIGITS, DRIZZLE_TYPE_LONGLONG, 0,
 
4117
   (MY_I_S_MAYBE_NULL | MY_I_S_UNSIGNED), "Version", OPEN_FRM_ONLY),
 
4118
  ColumnInfo("ROW_FORMAT", 10, DRIZZLE_TYPE_VARCHAR, 0, 1, "Row_format", OPEN_FULL_TABLE),
 
4119
  ColumnInfo("TABLE_ROWS", MY_INT64_NUM_DECIMAL_DIGITS, DRIZZLE_TYPE_LONGLONG, 0,
 
4120
   (MY_I_S_MAYBE_NULL | MY_I_S_UNSIGNED), "Rows", OPEN_FULL_TABLE),
 
4121
  ColumnInfo("AVG_ROW_LENGTH", MY_INT64_NUM_DECIMAL_DIGITS, DRIZZLE_TYPE_LONGLONG, 0,
 
4122
   (MY_I_S_MAYBE_NULL | MY_I_S_UNSIGNED), "Avg_row_length", OPEN_FULL_TABLE),
 
4123
  ColumnInfo("DATA_LENGTH", MY_INT64_NUM_DECIMAL_DIGITS, DRIZZLE_TYPE_LONGLONG, 0,
 
4124
   (MY_I_S_MAYBE_NULL | MY_I_S_UNSIGNED), "Data_length", OPEN_FULL_TABLE),
 
4125
  ColumnInfo("MAX_DATA_LENGTH", MY_INT64_NUM_DECIMAL_DIGITS, DRIZZLE_TYPE_LONGLONG, 0,
 
4126
   (MY_I_S_MAYBE_NULL | MY_I_S_UNSIGNED), "Max_data_length", OPEN_FULL_TABLE),
 
4127
  ColumnInfo("INDEX_LENGTH", MY_INT64_NUM_DECIMAL_DIGITS, DRIZZLE_TYPE_LONGLONG, 0,
 
4128
   (MY_I_S_MAYBE_NULL | MY_I_S_UNSIGNED), "Index_length", OPEN_FULL_TABLE),
 
4129
  ColumnInfo("DATA_FREE", MY_INT64_NUM_DECIMAL_DIGITS, DRIZZLE_TYPE_LONGLONG, 0,
 
4130
   (MY_I_S_MAYBE_NULL | MY_I_S_UNSIGNED), "Data_free", OPEN_FULL_TABLE),
 
4131
  ColumnInfo("AUTO_INCREMENT", MY_INT64_NUM_DECIMAL_DIGITS , DRIZZLE_TYPE_LONGLONG, 0,
 
4132
   (MY_I_S_MAYBE_NULL | MY_I_S_UNSIGNED), "Auto_increment", OPEN_FULL_TABLE),
 
4133
  ColumnInfo("CREATE_TIME", 0, DRIZZLE_TYPE_DATETIME, 0, 1, "Create_time", OPEN_FULL_TABLE),
 
4134
  ColumnInfo("UPDATE_TIME", 0, DRIZZLE_TYPE_DATETIME, 0, 1, "Update_time", OPEN_FULL_TABLE),
 
4135
  ColumnInfo("CHECK_TIME", 0, DRIZZLE_TYPE_DATETIME, 0, 1, "Check_time", OPEN_FULL_TABLE),
 
4136
  ColumnInfo("TABLE_COLLATION", 64, DRIZZLE_TYPE_VARCHAR, 0, 1, "Collation", OPEN_FRM_ONLY),
 
4137
  ColumnInfo("CHECKSUM", MY_INT64_NUM_DECIMAL_DIGITS, DRIZZLE_TYPE_LONGLONG, 0,
 
4138
   (MY_I_S_MAYBE_NULL | MY_I_S_UNSIGNED), "Checksum", OPEN_FULL_TABLE),
 
4139
  ColumnInfo("CREATE_OPTIONS", 255, DRIZZLE_TYPE_VARCHAR, 0, 1, "Create_options",
 
4140
   OPEN_FRM_ONLY),
 
4141
  ColumnInfo("TABLE_COMMENT", TABLE_COMMENT_MAXLEN, DRIZZLE_TYPE_VARCHAR,
 
4142
            0, 0, "Comment", OPEN_FRM_ONLY),
 
4143
  ColumnInfo()
 
4144
};
 
4145
 
 
4146
 
 
4147
ColumnInfo columns_fields_info[]=
 
4148
{
 
4149
  ColumnInfo("TABLE_CATALOG", FN_REFLEN, DRIZZLE_TYPE_VARCHAR, 0, 1, 0, OPEN_FRM_ONLY),
 
4150
  ColumnInfo("TABLE_SCHEMA", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, 0, OPEN_FRM_ONLY),
 
4151
  ColumnInfo("TABLE_NAME", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, 0, OPEN_FRM_ONLY),
 
4152
  ColumnInfo("COLUMN_NAME", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, "Field",
 
4153
   OPEN_FRM_ONLY),
 
4154
  ColumnInfo("ORDINAL_POSITION", MY_INT64_NUM_DECIMAL_DIGITS, DRIZZLE_TYPE_LONGLONG, 0,
 
4155
   MY_I_S_UNSIGNED, 0, OPEN_FRM_ONLY),
 
4156
  ColumnInfo("COLUMN_DEFAULT", MAX_FIELD_VARCHARLENGTH, DRIZZLE_TYPE_VARCHAR, 0,
 
4157
   1, "Default", OPEN_FRM_ONLY),
 
4158
  ColumnInfo("IS_NULLABLE", 3, DRIZZLE_TYPE_VARCHAR, 0, 0, "Null", OPEN_FRM_ONLY),
 
4159
  ColumnInfo("DATA_TYPE", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, 0, OPEN_FRM_ONLY),
 
4160
  ColumnInfo("CHARACTER_MAXIMUM_LENGTH", MY_INT64_NUM_DECIMAL_DIGITS, DRIZZLE_TYPE_LONGLONG,
 
4161
   0, (MY_I_S_MAYBE_NULL | MY_I_S_UNSIGNED), 0, OPEN_FRM_ONLY),
 
4162
  ColumnInfo("CHARACTER_OCTET_LENGTH", MY_INT64_NUM_DECIMAL_DIGITS , DRIZZLE_TYPE_LONGLONG,
 
4163
   0, (MY_I_S_MAYBE_NULL | MY_I_S_UNSIGNED), 0, OPEN_FRM_ONLY),
 
4164
  ColumnInfo("NUMERIC_PRECISION", MY_INT64_NUM_DECIMAL_DIGITS, DRIZZLE_TYPE_LONGLONG,
 
4165
   0, (MY_I_S_MAYBE_NULL | MY_I_S_UNSIGNED), 0, OPEN_FRM_ONLY),
 
4166
  ColumnInfo("NUMERIC_SCALE", MY_INT64_NUM_DECIMAL_DIGITS , DRIZZLE_TYPE_LONGLONG,
 
4167
   0, (MY_I_S_MAYBE_NULL | MY_I_S_UNSIGNED), 0, OPEN_FRM_ONLY),
 
4168
  ColumnInfo("CHARACTER_SET_NAME", 64, DRIZZLE_TYPE_VARCHAR, 0, 1, 0, OPEN_FRM_ONLY),
 
4169
  ColumnInfo("COLLATION_NAME", 64, DRIZZLE_TYPE_VARCHAR, 0, 1, "Collation", OPEN_FRM_ONLY),
 
4170
  ColumnInfo("COLUMN_TYPE", 65535, DRIZZLE_TYPE_VARCHAR, 0, 0, "Type", OPEN_FRM_ONLY),
 
4171
  ColumnInfo("COLUMN_KEY", 3, DRIZZLE_TYPE_VARCHAR, 0, 0, "Key", OPEN_FRM_ONLY),
 
4172
  ColumnInfo("EXTRA", 27, DRIZZLE_TYPE_VARCHAR, 0, 0, "Extra", OPEN_FRM_ONLY),
 
4173
  ColumnInfo("PRIVILEGES", 80, DRIZZLE_TYPE_VARCHAR, 0, 0, "Privileges", OPEN_FRM_ONLY),
 
4174
  ColumnInfo("COLUMN_COMMENT", COLUMN_COMMENT_MAXLEN, DRIZZLE_TYPE_VARCHAR, 0, 0, "Comment", OPEN_FRM_ONLY),
 
4175
  ColumnInfo("STORAGE", 8, DRIZZLE_TYPE_VARCHAR, 0, 0, "Storage", OPEN_FRM_ONLY),
 
4176
  ColumnInfo("FORMAT", 8, DRIZZLE_TYPE_VARCHAR, 0, 0, "Format", OPEN_FRM_ONLY),
 
4177
  ColumnInfo()
 
4178
};
 
4179
 
 
4180
 
 
4181
ColumnInfo charsets_fields_info[]=
 
4182
{
 
4183
  ColumnInfo("CHARACTER_SET_NAME", 64, DRIZZLE_TYPE_VARCHAR, 0, 0, "Charset",
 
4184
   SKIP_OPEN_TABLE),
 
4185
  ColumnInfo("DEFAULT_COLLATE_NAME", 64, DRIZZLE_TYPE_VARCHAR, 0, 0, "Default collation",
 
4186
   SKIP_OPEN_TABLE),
 
4187
  ColumnInfo("DESCRIPTION", 60, DRIZZLE_TYPE_VARCHAR, 0, 0, "Description",
 
4188
   SKIP_OPEN_TABLE),
 
4189
  ColumnInfo("MAXLEN", 3, DRIZZLE_TYPE_LONGLONG, 0, 0, "Maxlen", SKIP_OPEN_TABLE),
 
4190
  ColumnInfo()
 
4191
};
 
4192
 
 
4193
 
 
4194
ColumnInfo collation_fields_info[]=
 
4195
{
 
4196
  ColumnInfo("COLLATION_NAME", 64, DRIZZLE_TYPE_VARCHAR, 0, 0, "Collation", SKIP_OPEN_TABLE),
 
4197
  ColumnInfo("CHARACTER_SET_NAME", 64, DRIZZLE_TYPE_VARCHAR, 0, 0, "Charset",
 
4198
   SKIP_OPEN_TABLE),
 
4199
  ColumnInfo("ID", MY_INT32_NUM_DECIMAL_DIGITS, DRIZZLE_TYPE_LONGLONG, 0, 0, "Id",
 
4200
   SKIP_OPEN_TABLE),
 
4201
  ColumnInfo("IS_DEFAULT", 3, DRIZZLE_TYPE_VARCHAR, 0, 0, "Default", SKIP_OPEN_TABLE),
 
4202
  ColumnInfo("IS_COMPILED", 3, DRIZZLE_TYPE_VARCHAR, 0, 0, "Compiled", SKIP_OPEN_TABLE),
 
4203
  ColumnInfo("SORTLEN", 3, DRIZZLE_TYPE_LONGLONG, 0, 0, "Sortlen", SKIP_OPEN_TABLE),
 
4204
  ColumnInfo()
 
4205
};
 
4206
 
 
4207
 
 
4208
 
 
4209
ColumnInfo coll_charset_app_fields_info[]=
 
4210
{
 
4211
  ColumnInfo("COLLATION_NAME", 64, DRIZZLE_TYPE_VARCHAR, 0, 0, 0, SKIP_OPEN_TABLE),
 
4212
  ColumnInfo("CHARACTER_SET_NAME", 64, DRIZZLE_TYPE_VARCHAR, 0, 0, 0, SKIP_OPEN_TABLE),
 
4213
  ColumnInfo()
 
4214
};
 
4215
 
 
4216
 
 
4217
ColumnInfo stat_fields_info[]=
 
4218
{
 
4219
  ColumnInfo("TABLE_CATALOG", FN_REFLEN, DRIZZLE_TYPE_VARCHAR, 0, 1, 0, OPEN_FRM_ONLY),
 
4220
  ColumnInfo("TABLE_SCHEMA", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, 0, OPEN_FRM_ONLY),
 
4221
  ColumnInfo("TABLE_NAME", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, "Table", OPEN_FRM_ONLY),
 
4222
  ColumnInfo("NON_UNIQUE", 1, DRIZZLE_TYPE_LONGLONG, 0, 0, "Non_unique", OPEN_FRM_ONLY),
 
4223
  ColumnInfo("INDEX_SCHEMA", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, 0, OPEN_FRM_ONLY),
 
4224
  ColumnInfo("INDEX_NAME", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, "Key_name",
 
4225
   OPEN_FRM_ONLY),
 
4226
  ColumnInfo("SEQ_IN_INDEX", 2, DRIZZLE_TYPE_LONGLONG, 0, 0, "Seq_in_index", OPEN_FRM_ONLY),
 
4227
  ColumnInfo("COLUMN_NAME", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, "Column_name",
 
4228
   OPEN_FRM_ONLY),
 
4229
  ColumnInfo("COLLATION", 1, DRIZZLE_TYPE_VARCHAR, 0, 1, "Collation", OPEN_FRM_ONLY),
 
4230
  ColumnInfo("CARDINALITY", MY_INT64_NUM_DECIMAL_DIGITS, DRIZZLE_TYPE_LONGLONG, 0, 1,
 
4231
   "Cardinality", OPEN_FULL_TABLE),
 
4232
  ColumnInfo("SUB_PART", 3, DRIZZLE_TYPE_LONGLONG, 0, 1, "Sub_part", OPEN_FRM_ONLY),
 
4233
  ColumnInfo("PACKED", 10, DRIZZLE_TYPE_VARCHAR, 0, 1, "Packed", OPEN_FRM_ONLY),
 
4234
  ColumnInfo("NULLABLE", 3, DRIZZLE_TYPE_VARCHAR, 0, 0, "Null", OPEN_FRM_ONLY),
 
4235
  ColumnInfo("INDEX_TYPE", 16, DRIZZLE_TYPE_VARCHAR, 0, 0, "Index_type", OPEN_FULL_TABLE),
 
4236
  ColumnInfo("COMMENT", 16, DRIZZLE_TYPE_VARCHAR, 0, 1, "Comment", OPEN_FRM_ONLY),
 
4237
  ColumnInfo("INDEX_COMMENT", INDEX_COMMENT_MAXLEN, DRIZZLE_TYPE_VARCHAR, 0, 0, "Index_Comment", OPEN_FRM_ONLY),
 
4238
  ColumnInfo()
 
4239
};
 
4240
 
 
4241
 
 
4242
ColumnInfo table_constraints_fields_info[]=
 
4243
{
 
4244
  ColumnInfo("CONSTRAINT_CATALOG", FN_REFLEN, DRIZZLE_TYPE_VARCHAR, 0, 1, 0, OPEN_FULL_TABLE),
 
4245
  ColumnInfo("CONSTRAINT_SCHEMA", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, 0,
 
4246
   OPEN_FULL_TABLE),
 
4247
  ColumnInfo("CONSTRAINT_NAME", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, 0,
 
4248
   OPEN_FULL_TABLE),
 
4249
  ColumnInfo("TABLE_SCHEMA", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, 0, OPEN_FULL_TABLE),
 
4250
  ColumnInfo("TABLE_NAME", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, 0, OPEN_FULL_TABLE),
 
4251
  ColumnInfo("CONSTRAINT_TYPE", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, 0,
 
4252
   OPEN_FULL_TABLE),
 
4253
  ColumnInfo()
 
4254
};
 
4255
 
 
4256
 
 
4257
ColumnInfo key_column_usage_fields_info[]=
 
4258
{
 
4259
  ColumnInfo("CONSTRAINT_CATALOG", FN_REFLEN, DRIZZLE_TYPE_VARCHAR, 0, 1, 0, OPEN_FULL_TABLE),
 
4260
  ColumnInfo("CONSTRAINT_SCHEMA", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, 0,
 
4261
   OPEN_FULL_TABLE),
 
4262
  ColumnInfo("CONSTRAINT_NAME", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, 0,
 
4263
   OPEN_FULL_TABLE),
 
4264
  ColumnInfo("TABLE_CATALOG", FN_REFLEN, DRIZZLE_TYPE_VARCHAR, 0, 1, 0, OPEN_FULL_TABLE),
 
4265
  ColumnInfo("TABLE_SCHEMA", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, 0, OPEN_FULL_TABLE),
 
4266
  ColumnInfo("TABLE_NAME", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, 0,
 
4267
  OPEN_FULL_TABLE),
 
4268
  ColumnInfo("COLUMN_NAME", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, 0, OPEN_FULL_TABLE),
 
4269
  ColumnInfo("ORDINAL_POSITION", 10 ,DRIZZLE_TYPE_LONGLONG, 0, 0, 0, OPEN_FULL_TABLE),
 
4270
  ColumnInfo("POSITION_IN_UNIQUE_CONSTRAINT", 10 ,DRIZZLE_TYPE_LONGLONG, 0, 1, 0,
 
4271
   OPEN_FULL_TABLE),
 
4272
  ColumnInfo("REFERENCED_TABLE_SCHEMA", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 1, 0,
 
4273
   OPEN_FULL_TABLE),
 
4274
  ColumnInfo("REFERENCED_TABLE_NAME", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 1, 0,
 
4275
   OPEN_FULL_TABLE),
 
4276
  ColumnInfo("REFERENCED_COLUMN_NAME", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 1, 0,
 
4277
   OPEN_FULL_TABLE),
 
4278
  ColumnInfo()
 
4279
};
 
4280
 
 
4281
 
 
4282
ColumnInfo table_names_fields_info[]=
 
4283
{
 
4284
  ColumnInfo("TABLE_CATALOG", FN_REFLEN, DRIZZLE_TYPE_VARCHAR, 0, 1, 0, SKIP_OPEN_TABLE),
 
4285
  ColumnInfo("TABLE_SCHEMA",NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, 0, SKIP_OPEN_TABLE),
 
4286
  ColumnInfo("TABLE_NAME", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, "Tables_in_",
 
4287
   SKIP_OPEN_TABLE),
 
4288
  ColumnInfo("TABLE_TYPE", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, "Table_type",
 
4289
   OPEN_FRM_ONLY),
 
4290
  ColumnInfo()
 
4291
};
 
4292
 
 
4293
 
 
4294
ColumnInfo open_tables_fields_info[]=
 
4295
{
 
4296
  ColumnInfo("Database", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, "Database",
 
4297
   SKIP_OPEN_TABLE),
 
4298
  ColumnInfo("Table",NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, "Table", SKIP_OPEN_TABLE),
 
4299
  ColumnInfo("In_use", 1, DRIZZLE_TYPE_LONGLONG, 0, 0, "In_use", SKIP_OPEN_TABLE),
 
4300
  ColumnInfo("Name_locked", 4, DRIZZLE_TYPE_LONGLONG, 0, 0, "Name_locked", SKIP_OPEN_TABLE),
 
4301
  ColumnInfo()
 
4302
};
 
4303
 
 
4304
 
 
4305
ColumnInfo variables_fields_info[]=
 
4306
{
 
4307
  ColumnInfo("VARIABLE_NAME", 64, DRIZZLE_TYPE_VARCHAR, 0, 0, "Variable_name",
 
4308
   SKIP_OPEN_TABLE),
 
4309
  ColumnInfo("VARIABLE_VALUE", 16300, DRIZZLE_TYPE_VARCHAR, 0, 1, "Value", SKIP_OPEN_TABLE),
 
4310
  ColumnInfo()
 
4311
};
 
4312
 
 
4313
 
 
4314
ColumnInfo processlist_fields_info[]=
 
4315
{
 
4316
  ColumnInfo("ID", 4, DRIZZLE_TYPE_LONGLONG, 0, 0, "Id", SKIP_OPEN_TABLE),
 
4317
  ColumnInfo("USER", 16, DRIZZLE_TYPE_VARCHAR, 0, 0, "User", SKIP_OPEN_TABLE),
 
4318
  ColumnInfo("HOST", LIST_PROCESS_HOST_LEN,  DRIZZLE_TYPE_VARCHAR, 0, 0, "Host",
 
4319
   SKIP_OPEN_TABLE),
 
4320
  ColumnInfo("DB", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 1, "Db", SKIP_OPEN_TABLE),
 
4321
  ColumnInfo("COMMAND", 16, DRIZZLE_TYPE_VARCHAR, 0, 0, "Command", SKIP_OPEN_TABLE),
 
4322
  ColumnInfo("TIME", 7, DRIZZLE_TYPE_LONGLONG, 0, 0, "Time", SKIP_OPEN_TABLE),
 
4323
  ColumnInfo("STATE", 64, DRIZZLE_TYPE_VARCHAR, 0, 1, "State", SKIP_OPEN_TABLE),
 
4324
  ColumnInfo("INFO", PROCESS_LIST_INFO_WIDTH, DRIZZLE_TYPE_VARCHAR, 0, 1, "Info",
 
4325
   SKIP_OPEN_TABLE),
 
4326
  ColumnInfo()
 
4327
};
 
4328
 
 
4329
 
 
4330
ColumnInfo plugin_fields_info[]=
 
4331
{
 
4332
  ColumnInfo("PLUGIN_NAME", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, "Name",
 
4333
   SKIP_OPEN_TABLE),
 
4334
  ColumnInfo("PLUGIN_VERSION", 20, DRIZZLE_TYPE_VARCHAR, 0, 0, 0, SKIP_OPEN_TABLE),
 
4335
  ColumnInfo("PLUGIN_STATUS", 10, DRIZZLE_TYPE_VARCHAR, 0, 0, "Status", SKIP_OPEN_TABLE),
 
4336
  ColumnInfo("PLUGIN_AUTHOR", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 1, 0, SKIP_OPEN_TABLE),
 
4337
  ColumnInfo("PLUGIN_DESCRIPTION", 65535, DRIZZLE_TYPE_VARCHAR, 0, 1, 0, SKIP_OPEN_TABLE),
 
4338
  ColumnInfo("PLUGIN_LICENSE", 80, DRIZZLE_TYPE_VARCHAR, 0, 1, "License", SKIP_OPEN_TABLE),
 
4339
  ColumnInfo()
 
4340
};
 
4341
 
 
4342
ColumnInfo referential_constraints_fields_info[]=
 
4343
{
 
4344
  ColumnInfo("CONSTRAINT_CATALOG", FN_REFLEN, DRIZZLE_TYPE_VARCHAR, 0, 1, 0, OPEN_FULL_TABLE),
 
4345
  ColumnInfo("CONSTRAINT_SCHEMA", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, 0,
 
4346
   OPEN_FULL_TABLE),
 
4347
  ColumnInfo("CONSTRAINT_NAME", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, 0,
 
4348
   OPEN_FULL_TABLE),
 
4349
  ColumnInfo("UNIQUE_CONSTRAINT_CATALOG", FN_REFLEN, DRIZZLE_TYPE_VARCHAR, 0, 1, 0,
 
4350
   OPEN_FULL_TABLE),
 
4351
  ColumnInfo("UNIQUE_CONSTRAINT_SCHEMA", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, 0,
 
4352
   OPEN_FULL_TABLE),
 
4353
  ColumnInfo("UNIQUE_CONSTRAINT_NAME", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0,
 
4354
   MY_I_S_MAYBE_NULL, 0, OPEN_FULL_TABLE),
 
4355
  ColumnInfo("MATCH_OPTION", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, 0, OPEN_FULL_TABLE),
 
4356
  ColumnInfo("UPDATE_RULE", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, 0, OPEN_FULL_TABLE),
 
4357
  ColumnInfo("DELETE_RULE", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, 0, OPEN_FULL_TABLE),
 
4358
  ColumnInfo("TABLE_NAME", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, 0, OPEN_FULL_TABLE),
 
4359
  ColumnInfo("REFERENCED_TABLE_NAME", NAME_CHAR_LEN, DRIZZLE_TYPE_VARCHAR, 0, 0, 0,
 
4360
   OPEN_FULL_TABLE),
 
4361
  ColumnInfo()
 
4362
};
 
4363
 
 
4364
static CharSetISMethods char_set_methods;
 
4365
static CollationISMethods collations_methods;
 
4366
static CollCharISMethods coll_char_methods;
 
4367
static ColumnsISMethods columns_methods;
 
4368
static StatusISMethods status_methods;
 
4369
static VariablesISMethods variables_methods;
 
4370
static KeyColUsageISMethods key_col_usage_methods;
 
4371
static OpenTablesISMethods open_tables_methods;
 
4372
static PluginsISMethods plugins_methods;
 
4373
static ProcessListISMethods processlist_methods;
 
4374
static RefConstraintsISMethods ref_constraints_methods;
 
4375
static SchemataISMethods schemata_methods;
 
4376
static StatsISMethods stats_methods;
 
4377
static TablesISMethods tables_methods;
 
4378
static TabConstraintsISMethods tab_constraints_methods;
 
4379
static TabNamesISMethods tab_names_methods;
 
4380
 
 
4381
static InfoSchemaTable char_set_table("CHARACTER_SETS",
 
4382
                                      charsets_fields_info,
 
4383
                                      -1, -1, false, false, 0,
 
4384
                                      &char_set_methods);
 
4385
static InfoSchemaTable collations_table("COLLATIONS",
 
4386
                                        collation_fields_info,
 
4387
                                        -1, -1, false, false, 0,
 
4388
                                        &collations_methods);
 
4389
static InfoSchemaTable
 
4390
  coll_char_set_table("COLLATION_CHARACTER_SET_APPLICABILITY",
 
4391
                      coll_charset_app_fields_info,
 
4392
                      -1, -1, false, false, 0,
 
4393
                      &coll_char_methods);
 
4394
static InfoSchemaTable columns_table("COLUMNS",
 
4395
                                     columns_fields_info,
 
4396
                                     1, 2, false, true, OPTIMIZE_I_S_TABLE,
 
4397
                                     &columns_methods);
 
4398
static InfoSchemaTable global_stat_table("GLOBAL_STATUS",
 
4399
                                         variables_fields_info,
 
4400
                                         -1, -1, false, false, 0,
 
4401
                                         &status_methods);
 
4402
static InfoSchemaTable global_var_table("GLOBAL_VARIABLES",
 
4403
                                        variables_fields_info,
 
4404
                                        -1, -1, false, false, 0,
 
4405
                                        &variables_methods);
 
4406
static InfoSchemaTable key_col_usage_table("KEY_COLUMN_USAGE",
 
4407
                                           key_column_usage_fields_info,
 
4408
                                           4, 5, false, true, OPEN_TABLE_ONLY,
 
4409
                                           &key_col_usage_methods);
 
4410
static InfoSchemaTable open_tab_table("OPEN_TABLES",
 
4411
                                      open_tables_fields_info,
 
4412
                                      -1, -1, true, false, 0,
 
4413
                                      &open_tables_methods);
 
4414
static InfoSchemaTable plugins_table("PLUGINS",
 
4415
                                     plugin_fields_info,
 
4416
                                     -1, -1, false, false, 0,
 
4417
                                     &plugins_methods);
 
4418
static InfoSchemaTable process_list_table("PROCESSLIST",
 
4419
                                          processlist_fields_info,
 
4420
                                          -1, -1, false, false, 0,
 
4421
                                          &processlist_methods);
 
4422
static InfoSchemaTable ref_constrain_table("REFERENTIAL_CONSTRAINTS",
 
4423
                                           referential_constraints_fields_info,
 
4424
                                           1, 9, false, true, OPEN_TABLE_ONLY,
 
4425
                                           &ref_constraints_methods);
 
4426
static InfoSchemaTable schemata_table("SCHEMATA",
 
4427
                                      schema_fields_info,
 
4428
                                      1, -1, false, false, 0,
 
4429
                                      &schemata_methods);
 
4430
static InfoSchemaTable sess_stat_table("SESSION_STATUS",
 
4431
                                       variables_fields_info,
 
4432
                                       -1, -1, false, false, 0,
 
4433
                                       &status_methods);
 
4434
static InfoSchemaTable sess_var_table("SESSION_VARIABLES",
 
4435
                                      variables_fields_info,
 
4436
                                      -1, -1, false, false, 0,
 
4437
                                      &variables_methods);
 
4438
static InfoSchemaTable stats_table("STATISTICS",
 
4439
                                   stat_fields_info,
 
4440
                                   1, 2, false, true,
 
4441
                                   OPEN_TABLE_ONLY|OPTIMIZE_I_S_TABLE,
 
4442
                                   &stats_methods);
 
4443
static InfoSchemaTable status_table("STATUS",
 
4444
                                    variables_fields_info,
 
4445
                                    -1, -1, true, false, 0,
 
4446
                                    &status_methods);
 
4447
static InfoSchemaTable tables_table("TABLES",
 
4448
                                    tables_fields_info,
 
4449
                                    1, 2, false, true, OPTIMIZE_I_S_TABLE,
 
4450
                                    &tables_methods);
 
4451
static InfoSchemaTable tab_constrain_table("TABLE_CONSTRAINTS",
 
4452
                                           table_constraints_fields_info,
 
4453
                                           3, 4, false, true, OPEN_TABLE_ONLY,
 
4454
                                           &tab_constraints_methods);
 
4455
static InfoSchemaTable tab_names_table("TABLE_NAMES",
 
4456
                                       table_names_fields_info,
 
4457
                                       1, 2, true, true, 0,
 
4458
                                       &tab_names_methods);
 
4459
static InfoSchemaTable var_table("VARIABLES",
 
4460
                                 variables_fields_info,
 
4461
                                 -1, -1, true, false, 0,
 
4462
                                 &variables_methods);
 
4463
 
 
4464
/**
 
4465
 * @note
 
4466
 *   Make sure that the order of schema_tables and enum_schema_tables are the same.
 
4467
 */
4366
4468
 
4367
4469
InfoSchemaTable schema_tables[]=
4368
4470
{
4369
 
  {"CHARACTER_SETS", charsets_fields_info, create_schema_table,
4370
 
   fill_schema_charsets, make_character_sets_old_format, 0, -1, -1, 0, 0},
4371
 
  {"COLLATIONS", collation_fields_info, create_schema_table,
4372
 
   fill_schema_collation, make_old_format, 0, -1, -1, 0, 0},
4373
 
  {"COLLATION_CHARACTER_SET_APPLICABILITY", coll_charset_app_fields_info,
4374
 
   create_schema_table, fill_schema_coll_charset_app, 0, 0, -1, -1, 0, 0},
4375
 
  {"COLUMNS", columns_fields_info, create_schema_table,
4376
 
   get_all_tables, make_columns_old_format, get_schema_column_record, 1, 2, 0,
4377
 
   OPTIMIZE_I_S_TABLE},
4378
 
  {"GLOBAL_STATUS", variables_fields_info, create_schema_table,
4379
 
   fill_status, make_old_format, 0, -1, -1, 0, 0},
4380
 
  {"GLOBAL_VARIABLES", variables_fields_info, create_schema_table,
4381
 
   fill_variables, make_old_format, 0, -1, -1, 0, 0},
4382
 
  {"KEY_COLUMN_USAGE", key_column_usage_fields_info, create_schema_table,
4383
 
   get_all_tables, 0, get_schema_key_column_usage_record, 4, 5, 0,
4384
 
   OPEN_TABLE_ONLY},
4385
 
  {"OPEN_TABLES", open_tables_fields_info, create_schema_table,
4386
 
   fill_open_tables, make_old_format, 0, -1, -1, 1, 0},
4387
 
  {"PLUGINS", plugin_fields_info, create_schema_table,
4388
 
   fill_plugins, make_old_format, 0, -1, -1, 0, 0},
4389
 
  {"PROCESSLIST", processlist_fields_info, create_schema_table,
4390
 
   fill_schema_processlist, make_old_format, 0, -1, -1, 0, 0},
4391
 
  {"REFERENTIAL_CONSTRAINTS", referential_constraints_fields_info,
4392
 
   create_schema_table, get_all_tables, 0, get_referential_constraints_record,
4393
 
   1, 9, 0, OPEN_TABLE_ONLY},
4394
 
  {"SCHEMATA", schema_fields_info, create_schema_table,
4395
 
   fill_schema_schemata, make_schemata_old_format, 0, 1, -1, 0, 0},
4396
 
  {"SESSION_STATUS", variables_fields_info, create_schema_table,
4397
 
   fill_status, make_old_format, 0, -1, -1, 0, 0},
4398
 
  {"SESSION_VARIABLES", variables_fields_info, create_schema_table,
4399
 
   fill_variables, make_old_format, 0, -1, -1, 0, 0},
4400
 
  {"STATISTICS", stat_fields_info, create_schema_table,
4401
 
   get_all_tables, make_old_format, get_schema_stat_record, 1, 2, 0,
4402
 
   OPEN_TABLE_ONLY|OPTIMIZE_I_S_TABLE},
4403
 
  {"STATUS", variables_fields_info, create_schema_table, fill_status,
4404
 
   make_old_format, 0, -1, -1, 1, 0},
4405
 
  {"TABLES", tables_fields_info, create_schema_table,
4406
 
   get_all_tables, make_old_format, get_schema_tables_record, 1, 2, 0,
4407
 
   OPTIMIZE_I_S_TABLE},
4408
 
  {"TABLE_CONSTRAINTS", table_constraints_fields_info, create_schema_table,
4409
 
   get_all_tables, 0, get_schema_constraints_record, 3, 4, 0, OPEN_TABLE_ONLY},
4410
 
  {"TABLE_NAMES", table_names_fields_info, create_schema_table,
4411
 
   get_all_tables, make_table_names_old_format, 0, 1, 2, 1, 0},
4412
 
  {"VARIABLES", variables_fields_info, create_schema_table, fill_variables,
4413
 
   make_old_format, 0, -1, -1, 1, 0},
4414
 
  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
 
4471
  char_set_table,
 
4472
  collations_table,
 
4473
  coll_char_set_table,
 
4474
  columns_table,
 
4475
  global_stat_table,
 
4476
  global_var_table,
 
4477
  key_col_usage_table,
 
4478
  open_tab_table,
 
4479
  plugins_table,
 
4480
  process_list_table,
 
4481
  ref_constrain_table,
 
4482
  schemata_table,
 
4483
  sess_stat_table,
 
4484
  sess_var_table,
 
4485
  stats_table,
 
4486
  status_table,
 
4487
  tables_table,
 
4488
  tab_constrain_table,
 
4489
  tab_names_table,
 
4490
  var_table,
 
4491
  InfoSchemaTable()
4415
4492
};
4416