mirror of
https://github.com/MariaDB/server.git
synced 2025-08-01 03:47:19 +03:00
Merge janus.mylan:/usr/home/serg/Abk/mysql-5.1
into janus.mylan:/usr/home/serg/Abk/mysql-maria Makefile.am: Auto merged configure.in: Auto merged BitKeeper/triggers/post-commit: Auto merged client/mysqldump.c: Auto merged client/mysqltest.c: Auto merged include/my_dbug.h: Auto merged include/mysql_com.h: Auto merged libmysql/CMakeLists.txt: Auto merged libmysqld/Makefile.am: Auto merged mysql-test/lib/mtr_report.pl: Auto merged mysql-test/mysql-test-run.pl: Auto merged mysql-test/t/disabled.def: Auto merged mysql-test/t/variables.test: Auto merged server-tools/instance-manager/CMakeLists.txt: Auto merged server-tools/instance-manager/mysql_connection.cc: Auto merged sql/Makefile.am: Auto merged sql/filesort.cc: Auto merged sql/gen_lex_hash.cc: Auto merged sql/ha_ndbcluster.cc: Auto merged sql/ha_partition.cc: Auto merged sql/item_func.cc: Auto merged sql/item_strfunc.cc: Auto merged sql/lex.h: Auto merged sql/lock.cc: Auto merged sql/log.cc: Auto merged sql/net_serv.cc: Auto merged sql/opt_range.cc: Auto merged sql/set_var.h: Auto merged sql/slave.cc: Auto merged sql/sql_class.cc: Auto merged sql/sql_class.h: Auto merged sql/sql_delete.cc: Auto merged sql/sql_insert.cc: Auto merged sql/sql_parse.cc: Auto merged sql/sql_select.h: Auto merged sql/sql_table.cc: Auto merged sql/sql_update.cc: Auto merged sql/sql_yacc.yy: Auto merged sql/table.cc: Auto merged sql/table.h: Auto merged storage/myisam/ha_myisam.cc: Auto merged storage/myisam/mi_open.c: Auto merged storage/myisammrg/ha_myisammrg.cc: Auto merged sql/handler.cc: merged sql/handler.h: merged sql/mysql_priv.h: merged sql/mysqld.cc: merged sql/set_var.cc: merged sql/sql_select.cc: merged sql/sql_show.cc: merged unittest/mysys/my_atomic-t.c: merged
This commit is contained in:
272
sql/sql_show.cc
272
sql/sql_show.cc
@ -72,6 +72,9 @@ static TYPELIB grant_types = { sizeof(grant_names)/sizeof(char **),
|
||||
grant_names, NULL};
|
||||
#endif
|
||||
|
||||
/* Match the values of enum ha_choice */
|
||||
static const char *ha_choice_values[] = {"", "0", "1"};
|
||||
|
||||
static void store_key_options(THD *thd, String *packet, TABLE *table,
|
||||
KEY *key_info);
|
||||
|
||||
@ -164,15 +167,15 @@ static my_bool show_plugins(THD *thd, plugin_ref plugin,
|
||||
|
||||
switch (plug->license) {
|
||||
case PLUGIN_LICENSE_GPL:
|
||||
table->field[9]->store(PLUGIN_LICENSE_GPL_STRING,
|
||||
table->field[9]->store(PLUGIN_LICENSE_GPL_STRING,
|
||||
strlen(PLUGIN_LICENSE_GPL_STRING), cs);
|
||||
break;
|
||||
case PLUGIN_LICENSE_BSD:
|
||||
table->field[9]->store(PLUGIN_LICENSE_BSD_STRING,
|
||||
table->field[9]->store(PLUGIN_LICENSE_BSD_STRING,
|
||||
strlen(PLUGIN_LICENSE_BSD_STRING), cs);
|
||||
break;
|
||||
default:
|
||||
table->field[9]->store(PLUGIN_LICENSE_PROPRIETARY_STRING,
|
||||
table->field[9]->store(PLUGIN_LICENSE_PROPRIETARY_STRING,
|
||||
strlen(PLUGIN_LICENSE_PROPRIETARY_STRING), cs);
|
||||
break;
|
||||
}
|
||||
@ -480,7 +483,7 @@ find_files(THD *thd, List<LEX_STRING> *files, const char *db,
|
||||
file=dirp->dir_entry+i;
|
||||
if (dir)
|
||||
{ /* Return databases */
|
||||
if ((file->name[0] == '.' &&
|
||||
if ((file->name[0] == '.' &&
|
||||
((file->name[1] == '.' && file->name[2] == '\0') ||
|
||||
file->name[1] == '\0')))
|
||||
continue; /* . or .. */
|
||||
@ -506,7 +509,7 @@ find_files(THD *thd, List<LEX_STRING> *files, const char *db,
|
||||
file_name_len= filename_to_tablename(file->name, uname, sizeof(uname));
|
||||
if (wild && wild_compare(uname, wild, 0))
|
||||
continue;
|
||||
if (!(file_name=
|
||||
if (!(file_name=
|
||||
thd->make_lex_string(file_name, uname, file_name_len, TRUE)))
|
||||
{
|
||||
my_dirend(dirp);
|
||||
@ -545,7 +548,7 @@ find_files(THD *thd, List<LEX_STRING> *files, const char *db,
|
||||
continue;
|
||||
}
|
||||
#endif
|
||||
if (!(file_name=
|
||||
if (!(file_name=
|
||||
thd->make_lex_string(file_name, uname, file_name_len, TRUE)) ||
|
||||
files->push_back(file_name))
|
||||
{
|
||||
@ -584,7 +587,7 @@ mysqld_show_create(THD *thd, TABLE_LIST *table_list)
|
||||
|
||||
/*
|
||||
Clear all messages with 'error' level status and
|
||||
issue a warning with 'warning' level status in
|
||||
issue a warning with 'warning' level status in
|
||||
case of invalid view and last error is ER_VIEW_INVALID
|
||||
*/
|
||||
mysql_reset_errors(thd, true);
|
||||
@ -774,7 +777,7 @@ mysqld_list_fields(THD *thd, TABLE_LIST *table_list, const char *wild)
|
||||
Field **ptr,*field;
|
||||
for (ptr=table->field ; (field= *ptr); ptr++)
|
||||
{
|
||||
if (!wild || !wild[0] ||
|
||||
if (!wild || !wild[0] ||
|
||||
!wild_case_compare(system_charset_info, field->field_name,wild))
|
||||
{
|
||||
if (table_list->view)
|
||||
@ -984,13 +987,13 @@ static bool get_field_default_value(THD *thd, TABLE *table,
|
||||
bool has_default;
|
||||
bool has_now_default;
|
||||
|
||||
/*
|
||||
/*
|
||||
We are using CURRENT_TIMESTAMP instead of NOW because it is
|
||||
more standard
|
||||
*/
|
||||
has_now_default= table->timestamp_field == field &&
|
||||
has_now_default= table->timestamp_field == field &&
|
||||
field->unireg_check != Field::TIMESTAMP_UN_FIELD;
|
||||
|
||||
|
||||
has_default= (field->type() != FIELD_TYPE_BLOB &&
|
||||
!(field->flags & NO_DEFAULT_VALUE_FLAG) &&
|
||||
field->unireg_check != Field::NEXT_NUMBER &&
|
||||
@ -1045,11 +1048,11 @@ static bool get_field_default_value(THD *thd, TABLE *table,
|
||||
to tailor the format of the statement. Can be
|
||||
NULL, in which case only SQL_MODE is considered
|
||||
when building the statement.
|
||||
|
||||
|
||||
NOTE
|
||||
Currently always return 0, but might return error code in the
|
||||
future.
|
||||
|
||||
|
||||
RETURN
|
||||
0 OK
|
||||
*/
|
||||
@ -1131,7 +1134,7 @@ int store_create_info(THD *thd, TABLE_LIST *table_list, String *packet,
|
||||
field->sql_type(type);
|
||||
packet->append(type.ptr(), type.length(), system_charset_info);
|
||||
|
||||
if (field->has_charset() &&
|
||||
if (field->has_charset() &&
|
||||
!(thd->variables.sql_mode & (MODE_MYSQL323 | MODE_MYSQL40)))
|
||||
{
|
||||
if (field->charset() != share->table_charset)
|
||||
@ -1139,8 +1142,8 @@ int store_create_info(THD *thd, TABLE_LIST *table_list, String *packet,
|
||||
packet->append(STRING_WITH_LEN(" CHARACTER SET "));
|
||||
packet->append(field->charset()->csname);
|
||||
}
|
||||
/*
|
||||
For string types dump collation name only if
|
||||
/*
|
||||
For string types dump collation name only if
|
||||
collation is not primary for the given charset
|
||||
*/
|
||||
if (!(field->charset()->state & MY_CS_PRIMARY))
|
||||
@ -1167,11 +1170,11 @@ int store_create_info(THD *thd, TABLE_LIST *table_list, String *packet,
|
||||
packet->append(def_value.ptr(), def_value.length(), system_charset_info);
|
||||
}
|
||||
|
||||
if (!limited_mysql_mode && table->timestamp_field == field &&
|
||||
if (!limited_mysql_mode && table->timestamp_field == field &&
|
||||
field->unireg_check != Field::TIMESTAMP_DN_FIELD)
|
||||
packet->append(STRING_WITH_LEN(" ON UPDATE CURRENT_TIMESTAMP"));
|
||||
|
||||
if (field->unireg_check == Field::NEXT_NUMBER &&
|
||||
if (field->unireg_check == Field::NEXT_NUMBER &&
|
||||
!(thd->variables.sql_mode & MODE_NO_FIELD_OPTIONS))
|
||||
packet->append(STRING_WITH_LEN(" AUTO_INCREMENT"));
|
||||
|
||||
@ -1184,6 +1187,8 @@ int store_create_info(THD *thd, TABLE_LIST *table_list, String *packet,
|
||||
|
||||
key_info= table->key_info;
|
||||
bzero((char*) &create_info, sizeof(create_info));
|
||||
/* Allow update_create_info to update row type */
|
||||
create_info.row_type= share->row_type;
|
||||
file->update_create_info(&create_info);
|
||||
primary_key= share->primary_key;
|
||||
|
||||
@ -1318,7 +1323,7 @@ int store_create_info(THD *thd, TABLE_LIST *table_list, String *packet,
|
||||
packet->append(buff, (uint) (end - buff));
|
||||
}
|
||||
|
||||
|
||||
|
||||
if (share->table_charset &&
|
||||
!(thd->variables.sql_mode & MODE_MYSQL323) &&
|
||||
!(thd->variables.sql_mode & MODE_MYSQL40))
|
||||
@ -1368,19 +1373,25 @@ int store_create_info(THD *thd, TABLE_LIST *table_list, String *packet,
|
||||
packet->append(STRING_WITH_LEN(" PACK_KEYS=1"));
|
||||
if (share->db_create_options & HA_OPTION_NO_PACK_KEYS)
|
||||
packet->append(STRING_WITH_LEN(" PACK_KEYS=0"));
|
||||
/* We use CHECKSUM, instead of TABLE_CHECKSUM, for backward compability */
|
||||
if (share->db_create_options & HA_OPTION_CHECKSUM)
|
||||
packet->append(STRING_WITH_LEN(" CHECKSUM=1"));
|
||||
if (share->page_checksum != HA_CHOICE_UNDEF)
|
||||
{
|
||||
packet->append(STRING_WITH_LEN(" PAGE_CHECKSUM="));
|
||||
packet->append(ha_choice_values[(uint) share->page_checksum], 1);
|
||||
}
|
||||
if (share->db_create_options & HA_OPTION_DELAY_KEY_WRITE)
|
||||
packet->append(STRING_WITH_LEN(" DELAY_KEY_WRITE=1"));
|
||||
if (share->row_type != ROW_TYPE_DEFAULT)
|
||||
if (create_info.row_type != ROW_TYPE_DEFAULT)
|
||||
{
|
||||
packet->append(STRING_WITH_LEN(" ROW_FORMAT="));
|
||||
packet->append(ha_row_type[(uint) share->row_type]);
|
||||
packet->append(ha_row_type[(uint) create_info.row_type]);
|
||||
}
|
||||
if (share->transactional != HA_CHOICE_UNDEF)
|
||||
{
|
||||
packet->append(STRING_WITH_LEN(" TRANSACTIONAL="));
|
||||
packet->append(share->transactional == HA_CHOICE_YES ? "1" : "0", 1);
|
||||
packet->append(ha_choice_values[(uint) share->transactional], 1);
|
||||
}
|
||||
if (table->s->key_block_size)
|
||||
{
|
||||
@ -1483,7 +1494,7 @@ view_store_options(THD *thd, TABLE_LIST *table, String *buff)
|
||||
|
||||
/*
|
||||
Append DEFINER clause to the given buffer.
|
||||
|
||||
|
||||
SYNOPSIS
|
||||
append_definer()
|
||||
thd [in] thread handle
|
||||
@ -1512,7 +1523,7 @@ static void append_algorithm(TABLE_LIST *table, String *buff)
|
||||
|
||||
/*
|
||||
Append DEFINER clause to the given buffer.
|
||||
|
||||
|
||||
SYNOPSIS
|
||||
append_definer()
|
||||
thd [in] thread handle
|
||||
@ -1672,8 +1683,8 @@ void mysqld_list_processes(THD *thd,const char *user, bool verbose)
|
||||
"%s:%u", tmp_sctx->host_or_ip, tmp->peer_port);
|
||||
}
|
||||
else
|
||||
thd_info->host= thd->strdup(tmp_sctx->host_or_ip[0] ?
|
||||
tmp_sctx->host_or_ip :
|
||||
thd_info->host= thd->strdup(tmp_sctx->host_or_ip[0] ?
|
||||
tmp_sctx->host_or_ip :
|
||||
tmp_sctx->host ? tmp_sctx->host : "");
|
||||
if ((thd_info->db=tmp->db)) // Safe test
|
||||
thd_info->db=thd->strdup(thd_info->db);
|
||||
@ -1702,7 +1713,7 @@ void mysqld_list_processes(THD *thd,const char *user, bool verbose)
|
||||
thd_info->query=0;
|
||||
if (tmp->query)
|
||||
{
|
||||
/*
|
||||
/*
|
||||
query_length is always set to 0 when we set query = NULL; see
|
||||
the comment in sql_class.h why this prevents crashes in possible
|
||||
races with query_length
|
||||
@ -1949,7 +1960,7 @@ void reset_status_vars()
|
||||
/* Note that SHOW_LONG_NOFLUSH variables are not reset */
|
||||
if (ptr->type == SHOW_LONG)
|
||||
*(ulong*) ptr->value= 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
@ -2195,14 +2206,14 @@ void calc_sum_of_all_status(STATUS_VAR *to)
|
||||
|
||||
I_List_iterator<THD> it(threads);
|
||||
THD *tmp;
|
||||
|
||||
|
||||
/* Get global values as base */
|
||||
*to= global_status_var;
|
||||
|
||||
|
||||
/* Add to this status from existing threads */
|
||||
while ((tmp= it++))
|
||||
add_to_status(to, &tmp->status_var);
|
||||
|
||||
|
||||
VOID(pthread_mutex_unlock(&LOCK_thread_count));
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
@ -2237,7 +2248,7 @@ bool schema_table_store_record(THD *thd, TABLE *table)
|
||||
int error;
|
||||
if ((error= table->file->ha_write_row(table->record[0])))
|
||||
{
|
||||
if (create_myisam_from_heap(thd, table,
|
||||
if (create_internal_tmp_table_from_heap(thd, table,
|
||||
table->pos_in_table_list->schema_table_param,
|
||||
error, 0))
|
||||
return 1;
|
||||
@ -2259,17 +2270,17 @@ int make_table_list(THD *thd, SELECT_LEX *sel,
|
||||
|
||||
|
||||
/**
|
||||
@brief Get lookup value from the part of 'WHERE' condition
|
||||
@brief Get lookup value from the part of 'WHERE' condition
|
||||
|
||||
@details This function gets lookup value from
|
||||
the part of 'WHERE' condition if it's possible and
|
||||
@details This function gets lookup value from
|
||||
the part of 'WHERE' condition if it's possible and
|
||||
fill appropriate lookup_field_vals struct field
|
||||
with this value.
|
||||
|
||||
@param[in] thd thread handler
|
||||
@param[in] item_func part of WHERE condition
|
||||
@param[in] table I_S table
|
||||
@param[in, out] lookup_field_vals Struct which holds lookup values
|
||||
@param[in, out] lookup_field_vals Struct which holds lookup values
|
||||
|
||||
@return
|
||||
0 success
|
||||
@ -2277,7 +2288,7 @@ int make_table_list(THD *thd, SELECT_LEX *sel,
|
||||
*/
|
||||
|
||||
bool get_lookup_value(THD *thd, Item_func *item_func,
|
||||
TABLE_LIST *table,
|
||||
TABLE_LIST *table,
|
||||
LOOKUP_FIELD_VALUES *lookup_field_vals)
|
||||
{
|
||||
ST_SCHEMA_TABLE *schema_table= table->schema_table;
|
||||
@ -2343,16 +2354,16 @@ bool get_lookup_value(THD *thd, Item_func *item_func,
|
||||
|
||||
|
||||
/**
|
||||
@brief Calculates lookup values from 'WHERE' condition
|
||||
@brief Calculates lookup values from 'WHERE' condition
|
||||
|
||||
@details This function calculates lookup value(database name, table name)
|
||||
from 'WHERE' condition if it's possible and
|
||||
from 'WHERE' condition if it's possible and
|
||||
fill lookup_field_vals struct fields with these values.
|
||||
|
||||
@param[in] thd thread handler
|
||||
@param[in] cond WHERE condition
|
||||
@param[in] table I_S table
|
||||
@param[in, out] lookup_field_vals Struct which holds lookup values
|
||||
@param[in, out] lookup_field_vals Struct which holds lookup values
|
||||
|
||||
@return
|
||||
0 success
|
||||
@ -2501,7 +2512,7 @@ static COND * make_cond_for_info_schema(COND *cond, TABLE_LIST *table)
|
||||
@param[in] thd thread handler
|
||||
@param[in] cond WHERE condition
|
||||
@param[in] tables I_S table
|
||||
@param[in, out] lookup_field_values Struct which holds lookup values
|
||||
@param[in, out] lookup_field_values Struct which holds lookup values
|
||||
|
||||
@return
|
||||
0 success
|
||||
@ -2563,7 +2574,7 @@ enum enum_schema_tables get_schema_table_idx(ST_SCHEMA_TABLE *schema_table)
|
||||
idx_field_vals idx_field_vals->db_name contains db name or
|
||||
wild string
|
||||
with_i_schema returns 1 if we added 'IS' name to list
|
||||
otherwise returns 0
|
||||
otherwise returns 0
|
||||
|
||||
RETURN
|
||||
zero success
|
||||
@ -2587,7 +2598,7 @@ int make_db_list(THD *thd, List<LEX_STRING> *files,
|
||||
LIKE clause (see also get_index_field_values() function)
|
||||
*/
|
||||
if (!lookup_field_vals->db_value.str ||
|
||||
!wild_case_compare(system_charset_info,
|
||||
!wild_case_compare(system_charset_info,
|
||||
INFORMATION_SCHEMA_NAME.str,
|
||||
lookup_field_vals->db_value.str))
|
||||
{
|
||||
@ -2631,7 +2642,7 @@ int make_db_list(THD *thd, List<LEX_STRING> *files,
|
||||
}
|
||||
|
||||
|
||||
struct st_add_schema_table
|
||||
struct st_add_schema_table
|
||||
{
|
||||
List<LEX_STRING> *files;
|
||||
const char *wild;
|
||||
@ -2695,7 +2706,7 @@ int schema_tables_add(THD *thd, List<LEX_STRING> *files, const char *wild)
|
||||
else if (wild_compare(tmp_schema_table->table_name, wild, 0))
|
||||
continue;
|
||||
}
|
||||
if ((file_name=
|
||||
if ((file_name=
|
||||
thd->make_lex_string(file_name, tmp_schema_table->table_name,
|
||||
strlen(tmp_schema_table->table_name), TRUE)) &&
|
||||
!files->push_back(file_name))
|
||||
@ -2751,7 +2762,7 @@ make_table_name_list(THD *thd, List<LEX_STRING> *table_names, LEX *lex,
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
{
|
||||
if (table_names->push_back(&lookup_field_vals->table_value))
|
||||
return 1;
|
||||
/*
|
||||
@ -2812,7 +2823,7 @@ make_table_name_list(THD *thd, List<LEX_STRING> *table_names, LEX *lex,
|
||||
@retval 1 error
|
||||
*/
|
||||
|
||||
static int
|
||||
static int
|
||||
fill_schema_show_cols_or_idxs(THD *thd, TABLE_LIST *tables,
|
||||
ST_SCHEMA_TABLE *schema_table,
|
||||
Open_tables_state *open_tables_state_backup)
|
||||
@ -2839,7 +2850,7 @@ fill_schema_show_cols_or_idxs(THD *thd, TABLE_LIST *tables,
|
||||
Let us set fake sql_command so views won't try to merge
|
||||
themselves into main statement. If we don't do this,
|
||||
SELECT * from information_schema.xxxx will cause problems.
|
||||
SQLCOM_SHOW_FIELDS is used because it satisfies 'only_view_structure()'
|
||||
SQLCOM_SHOW_FIELDS is used because it satisfies 'only_view_structure()'
|
||||
*/
|
||||
lex->sql_command= SQLCOM_SHOW_FIELDS;
|
||||
res= open_normal_and_derived_tables(thd, show_table_list,
|
||||
@ -2849,11 +2860,11 @@ fill_schema_show_cols_or_idxs(THD *thd, TABLE_LIST *tables,
|
||||
get_all_tables() returns 1 on failure and 0 on success thus
|
||||
return only these and not the result code of ::process_table()
|
||||
|
||||
We should use show_table_list->alias instead of
|
||||
We should use show_table_list->alias instead of
|
||||
show_table_list->table_name because table_name
|
||||
could be changed during opening of I_S tables. It's safe
|
||||
to use alias because alias contains original table name
|
||||
in this case(this part of code is used only for
|
||||
to use alias because alias contains original table name
|
||||
in this case(this part of code is used only for
|
||||
'show columns' & 'show statistics' commands).
|
||||
*/
|
||||
table_name= thd->make_lex_string(&tmp_lex_string1, show_table_list->alias,
|
||||
@ -2863,7 +2874,7 @@ fill_schema_show_cols_or_idxs(THD *thd, TABLE_LIST *tables,
|
||||
show_table_list->db_length, FALSE);
|
||||
else
|
||||
db_name= &show_table_list->view_db;
|
||||
|
||||
|
||||
|
||||
error= test(schema_table->process_table(thd, show_table_list,
|
||||
table, res, db_name,
|
||||
@ -2901,7 +2912,7 @@ static int fill_schema_table_names(THD *thd, TABLE *table,
|
||||
{
|
||||
enum legacy_db_type not_used;
|
||||
char path[FN_REFLEN];
|
||||
(void) build_table_filename(path, sizeof(path), db_name->str,
|
||||
(void) build_table_filename(path, sizeof(path), db_name->str,
|
||||
table_name->str, reg_ext, 0);
|
||||
switch (mysql_frm_type(thd, path, ¬_used)) {
|
||||
case FRMTYPE_ERROR:
|
||||
@ -2989,7 +3000,7 @@ static uint get_table_open_method(TABLE_LIST *tables,
|
||||
*/
|
||||
|
||||
static int fill_schema_table_from_frm(THD *thd,TABLE *table,
|
||||
ST_SCHEMA_TABLE *schema_table,
|
||||
ST_SCHEMA_TABLE *schema_table,
|
||||
LEX_STRING *db_name,
|
||||
LEX_STRING *table_name,
|
||||
enum enum_schema_tables schema_table_idx)
|
||||
@ -3016,7 +3027,7 @@ static int fill_schema_table_from_frm(THD *thd,TABLE *table,
|
||||
res= 0;
|
||||
goto err;
|
||||
}
|
||||
|
||||
|
||||
if (share->is_view)
|
||||
{
|
||||
if (schema_table->i_s_requested_object & OPEN_TABLE_ONLY)
|
||||
@ -3028,7 +3039,7 @@ static int fill_schema_table_from_frm(THD *thd,TABLE *table,
|
||||
else if (schema_table->i_s_requested_object & OPEN_VIEW_FULL)
|
||||
{
|
||||
/*
|
||||
tell get_all_tables() to fall back to
|
||||
tell get_all_tables() to fall back to
|
||||
open_normal_and_derived_tables()
|
||||
*/
|
||||
res= 1;
|
||||
@ -3097,7 +3108,7 @@ int get_all_tables(THD *thd, TABLE_LIST *tables, COND *cond)
|
||||
List<LEX_STRING> db_names;
|
||||
List_iterator_fast<LEX_STRING> it(db_names);
|
||||
COND *partial_cond= 0;
|
||||
uint derived_tables= lex->derived_tables;
|
||||
uint derived_tables= lex->derived_tables;
|
||||
int error= 1;
|
||||
Open_tables_state open_tables_state_backup;
|
||||
bool save_view_prepare_mode= lex->view_prepare_mode;
|
||||
@ -3118,7 +3129,7 @@ int get_all_tables(THD *thd, TABLE_LIST *tables, COND *cond)
|
||||
*/
|
||||
thd->reset_n_backup_open_tables_state(&open_tables_state_backup);
|
||||
|
||||
/*
|
||||
/*
|
||||
this branch processes SHOW FIELDS, SHOW INDEXES commands.
|
||||
see sql_parse.cc, prepare_schema_table() function where
|
||||
this values are initialized
|
||||
@ -3142,7 +3153,7 @@ int get_all_tables(THD *thd, TABLE_LIST *tables, COND *cond)
|
||||
|
||||
if (!lookup_field_vals.wild_db_value && !lookup_field_vals.wild_table_value)
|
||||
{
|
||||
/*
|
||||
/*
|
||||
if lookup value is empty string then
|
||||
it's impossible table name or db name
|
||||
*/
|
||||
@ -3160,7 +3171,7 @@ int get_all_tables(THD *thd, TABLE_LIST *tables, COND *cond)
|
||||
!lookup_field_vals.wild_db_value)
|
||||
tables->has_db_lookup_value= TRUE;
|
||||
if (lookup_field_vals.table_value.length &&
|
||||
!lookup_field_vals.wild_table_value)
|
||||
!lookup_field_vals.wild_table_value)
|
||||
tables->has_table_lookup_value= TRUE;
|
||||
|
||||
if (tables->has_db_lookup_value && tables->has_table_lookup_value)
|
||||
@ -3184,7 +3195,7 @@ int get_all_tables(THD *thd, TABLE_LIST *tables, COND *cond)
|
||||
while ((db_name= it++))
|
||||
{
|
||||
#ifndef NO_EMBEDDED_ACCESS_CHECKS
|
||||
if (!check_access(thd,SELECT_ACL, db_name->str,
|
||||
if (!check_access(thd,SELECT_ACL, db_name->str,
|
||||
&thd->col_access, 0, 1, with_i_schema) ||
|
||||
sctx->master_access & (DB_ACLS | SHOW_DB_ACL) ||
|
||||
acl_get(sctx->host, sctx->ip, sctx->priv_user, db_name->str, 0) ||
|
||||
@ -3214,7 +3225,7 @@ int get_all_tables(THD *thd, TABLE_LIST *tables, COND *cond)
|
||||
{
|
||||
/*
|
||||
If table is I_S.tables and open_table_method is 0 (eg SKIP_OPEN)
|
||||
we can skip table opening and we don't have lookup value for
|
||||
we can skip table opening and we don't have lookup value for
|
||||
table name or lookup value is wild string(table name list is
|
||||
already created by make_table_name_list() function).
|
||||
*/
|
||||
@ -3236,7 +3247,7 @@ int get_all_tables(THD *thd, TABLE_LIST *tables, COND *cond)
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!(table_open_method & ~OPEN_FRM_ONLY) &&
|
||||
if (!(table_open_method & ~OPEN_FRM_ONLY) &&
|
||||
!with_i_schema)
|
||||
{
|
||||
if (!fill_schema_table_from_frm(thd, table, schema_table, db_name,
|
||||
@ -3290,10 +3301,10 @@ int get_all_tables(THD *thd, TABLE_LIST *tables, COND *cond)
|
||||
else
|
||||
{
|
||||
/*
|
||||
We should use show_table_list->alias instead of
|
||||
We should use show_table_list->alias instead of
|
||||
show_table_list->table_name because table_name
|
||||
could be changed during opening of I_S tables. It's safe
|
||||
to use alias because alias contains original table name
|
||||
to use alias because alias contains original table name
|
||||
in this case.
|
||||
*/
|
||||
thd->make_lex_string(&tmp_lex_string, show_table_list->alias,
|
||||
@ -3494,12 +3505,16 @@ static int get_schema_tables_record(THD *thd, TABLE_LIST *tables,
|
||||
ptr=strmov(ptr," pack_keys=1");
|
||||
if (share->db_create_options & HA_OPTION_NO_PACK_KEYS)
|
||||
ptr=strmov(ptr," pack_keys=0");
|
||||
/* We use CHECKSUM, instead of TABLE_CHECKSUM, for backward compability */
|
||||
if (share->db_create_options & HA_OPTION_CHECKSUM)
|
||||
ptr=strmov(ptr," checksum=1");
|
||||
if (share->page_checksum != HA_CHOICE_UNDEF)
|
||||
ptr= strxmov(ptr, " page_checksum=",
|
||||
ha_choice_values[(uint) share->page_checksum], NullS);
|
||||
if (share->db_create_options & HA_OPTION_DELAY_KEY_WRITE)
|
||||
ptr=strmov(ptr," delay_key_write=1");
|
||||
if (share->row_type != ROW_TYPE_DEFAULT)
|
||||
ptr=strxmov(ptr, " row_format=",
|
||||
ptr=strxmov(ptr, " row_format=",
|
||||
ha_row_type[(uint) share->row_type],
|
||||
NullS);
|
||||
if (share->transactional != HA_CHOICE_UNDEF)
|
||||
@ -3509,13 +3524,16 @@ static int get_schema_tables_record(THD *thd, TABLE_LIST *tables,
|
||||
NullS);
|
||||
}
|
||||
#ifdef WITH_PARTITION_STORAGE_ENGINE
|
||||
if (show_table->s->db_type() == partition_hton &&
|
||||
show_table->part_info != NULL &&
|
||||
if (show_table->s->db_type() == partition_hton &&
|
||||
show_table->part_info != NULL &&
|
||||
show_table->part_info->no_parts > 0)
|
||||
ptr= strmov(ptr, " partitioned");
|
||||
#endif
|
||||
if (share->transactional != HA_CHOICE_UNDEF)
|
||||
ptr= strxmov(ptr, " transactional=",
|
||||
ha_choice_values[(uint) share->transactional], NullS);
|
||||
table->field[19]->store(option_buff+1,
|
||||
(ptr == option_buff ? 0 :
|
||||
(ptr == option_buff ? 0 :
|
||||
(uint) (ptr-option_buff)-1), cs);
|
||||
|
||||
tmp_buff= (share->table_charset ?
|
||||
@ -3630,7 +3648,7 @@ static int get_schema_column_record(THD *thd, TABLE_LIST *tables,
|
||||
/*
|
||||
I.e. we are in SELECT FROM INFORMATION_SCHEMA.COLUMS
|
||||
rather than in SHOW COLUMNS
|
||||
*/
|
||||
*/
|
||||
push_warning(thd, MYSQL_ERROR::WARN_LEVEL_WARN,
|
||||
thd->main_da.sql_errno(), thd->main_da.message());
|
||||
thd->clear_error();
|
||||
@ -3668,7 +3686,7 @@ static int get_schema_column_record(THD *thd, TABLE_LIST *tables,
|
||||
uint col_access;
|
||||
check_access(thd,SELECT_ACL | EXTRA_ACL, db_name->str,
|
||||
&tables->grant.privilege, 0, 0, test(tables->schema_table));
|
||||
col_access= get_column_grant(thd, &tables->grant,
|
||||
col_access= get_column_grant(thd, &tables->grant,
|
||||
db_name->str, table_name->str,
|
||||
field->field_name) & COL_ACLS;
|
||||
if (!tables->schema_table && !col_access)
|
||||
@ -3691,7 +3709,7 @@ static int get_schema_column_record(THD *thd, TABLE_LIST *tables,
|
||||
cs);
|
||||
table->field[4]->store((longlong) count, TRUE);
|
||||
field->sql_type(type);
|
||||
table->field[14]->store(type.ptr(), type.length(), cs);
|
||||
table->field[14]->store(type.ptr(), type.length(), cs);
|
||||
tmp_buff= strchr(type.ptr(), '(');
|
||||
table->field[7]->store(type.ptr(),
|
||||
(tmp_buff ? tmp_buff - type.ptr() :
|
||||
@ -3713,7 +3731,7 @@ static int get_schema_column_record(THD *thd, TABLE_LIST *tables,
|
||||
uint32 octet_max_length= field->max_display_length();
|
||||
if (is_blob && octet_max_length != (uint32) 4294967295U)
|
||||
octet_max_length /= field->charset()->mbmaxlen;
|
||||
longlong char_max_len= is_blob ?
|
||||
longlong char_max_len= is_blob ?
|
||||
(longlong) octet_max_length / field->charset()->mbminlen :
|
||||
(longlong) octet_max_length / field->charset()->mbmaxlen;
|
||||
table->field[8]->store(char_max_len, TRUE);
|
||||
@ -3746,7 +3764,7 @@ static int get_schema_column_record(THD *thd, TABLE_LIST *tables,
|
||||
field_length= field->max_display_length();
|
||||
decimals= -1; // return NULL
|
||||
break;
|
||||
case MYSQL_TYPE_FLOAT:
|
||||
case MYSQL_TYPE_FLOAT:
|
||||
case MYSQL_TYPE_DOUBLE:
|
||||
field_length= field->field_length;
|
||||
if (decimals == NOT_FIXED_DEC)
|
||||
@ -3812,7 +3830,7 @@ int fill_schema_charsets(THD *thd, TABLE_LIST *tables, COND *cond)
|
||||
for (cs= all_charsets ; cs < all_charsets+255 ; cs++)
|
||||
{
|
||||
CHARSET_INFO *tmp_cs= cs[0];
|
||||
if (tmp_cs && (tmp_cs->state & MY_CS_PRIMARY) &&
|
||||
if (tmp_cs && (tmp_cs->state & MY_CS_PRIMARY) &&
|
||||
(tmp_cs->state & MY_CS_AVAILABLE) &&
|
||||
!(tmp_cs->state & MY_CS_HIDDEN) &&
|
||||
!(wild && wild[0] &&
|
||||
@ -3900,7 +3918,7 @@ int fill_schema_collation(THD *thd, TABLE_LIST *tables, COND *cond)
|
||||
for (cl= all_charsets; cl < all_charsets+255 ;cl ++)
|
||||
{
|
||||
CHARSET_INFO *tmp_cl= cl[0];
|
||||
if (!tmp_cl || !(tmp_cl->state & MY_CS_AVAILABLE) ||
|
||||
if (!tmp_cl || !(tmp_cl->state & MY_CS_AVAILABLE) ||
|
||||
!my_charset_same(tmp_cs, tmp_cl))
|
||||
continue;
|
||||
if (!(wild && wild[0] &&
|
||||
@ -3934,13 +3952,13 @@ int fill_schema_coll_charset_app(THD *thd, TABLE_LIST *tables, COND *cond)
|
||||
{
|
||||
CHARSET_INFO **cl;
|
||||
CHARSET_INFO *tmp_cs= cs[0];
|
||||
if (!tmp_cs || !(tmp_cs->state & MY_CS_AVAILABLE) ||
|
||||
if (!tmp_cs || !(tmp_cs->state & MY_CS_AVAILABLE) ||
|
||||
!(tmp_cs->state & MY_CS_PRIMARY))
|
||||
continue;
|
||||
for (cl= all_charsets; cl < all_charsets+255 ;cl ++)
|
||||
{
|
||||
CHARSET_INFO *tmp_cl= cl[0];
|
||||
if (!tmp_cl || !(tmp_cl->state & MY_CS_AVAILABLE) ||
|
||||
if (!tmp_cl || !(tmp_cl->state & MY_CS_AVAILABLE) ||
|
||||
!my_charset_same(tmp_cs,tmp_cl))
|
||||
continue;
|
||||
restore_record(table, s->default_values);
|
||||
@ -4006,7 +4024,7 @@ bool store_schema_proc(THD *thd, TABLE *table, TABLE *proc_table,
|
||||
table->field[10]->store(STRING_WITH_LEN("SQL"), cs);
|
||||
get_field(thd->mem_root, proc_table->field[6], &tmp_string);
|
||||
table->field[11]->store(tmp_string.ptr(), tmp_string.length(), cs);
|
||||
table->field[12]->store(sp_data_access_name[enum_idx].str,
|
||||
table->field[12]->store(sp_data_access_name[enum_idx].str,
|
||||
sp_data_access_name[enum_idx].length , cs);
|
||||
get_field(thd->mem_root, proc_table->field[7], &tmp_string);
|
||||
table->field[14]->store(tmp_string.ptr(), tmp_string.length(), cs);
|
||||
@ -4299,10 +4317,10 @@ static int get_schema_views_record(THD *thd, TABLE_LIST *tables,
|
||||
if (schema_table_store_record(thd, table))
|
||||
DBUG_RETURN(1);
|
||||
if (res && thd->is_error())
|
||||
push_warning(thd, MYSQL_ERROR::WARN_LEVEL_WARN,
|
||||
push_warning(thd, MYSQL_ERROR::WARN_LEVEL_WARN,
|
||||
thd->main_da.sql_errno(), thd->main_da.message());
|
||||
}
|
||||
if (res)
|
||||
if (res)
|
||||
thd->clear_error();
|
||||
DBUG_RETURN(0);
|
||||
}
|
||||
@ -4343,7 +4361,7 @@ static int get_schema_constraints_record(THD *thd, TABLE_LIST *tables,
|
||||
TABLE *show_table= tables->table;
|
||||
KEY *key_info=show_table->key_info;
|
||||
uint primary_key= show_table->s->primary_key;
|
||||
show_table->file->info(HA_STATUS_VARIABLE |
|
||||
show_table->file->info(HA_STATUS_VARIABLE |
|
||||
HA_STATUS_NO_LOCK |
|
||||
HA_STATUS_TIME);
|
||||
for (uint i=0 ; i < show_table->s->keys ; i++, key_info++)
|
||||
@ -4372,7 +4390,7 @@ static int get_schema_constraints_record(THD *thd, TABLE_LIST *tables,
|
||||
List_iterator_fast<FOREIGN_KEY_INFO> it(f_key_list);
|
||||
while ((f_key_info=it++))
|
||||
{
|
||||
if (store_constraints(thd, table, db_name, table_name,
|
||||
if (store_constraints(thd, table, db_name, table_name,
|
||||
f_key_info->forein_id->str,
|
||||
strlen(f_key_info->forein_id->str),
|
||||
"FOREIGN KEY", 11))
|
||||
@ -4531,7 +4549,7 @@ static int get_schema_key_column_usage_record(THD *thd,
|
||||
TABLE *show_table= tables->table;
|
||||
KEY *key_info=show_table->key_info;
|
||||
uint primary_key= show_table->s->primary_key;
|
||||
show_table->file->info(HA_STATUS_VARIABLE |
|
||||
show_table->file->info(HA_STATUS_VARIABLE |
|
||||
HA_STATUS_NO_LOCK |
|
||||
HA_STATUS_TIME);
|
||||
for (uint i=0 ; i < show_table->s->keys ; i++, key_info++)
|
||||
@ -4548,8 +4566,8 @@ static int get_schema_key_column_usage_record(THD *thd,
|
||||
restore_record(table, s->default_values);
|
||||
store_key_column_usage(table, db_name, table_name,
|
||||
key_info->name,
|
||||
strlen(key_info->name),
|
||||
key_part->field->field_name,
|
||||
strlen(key_info->name),
|
||||
key_part->field->field_name,
|
||||
strlen(key_part->field->field_name),
|
||||
(longlong) f_idx);
|
||||
if (schema_table_store_record(thd, table))
|
||||
@ -4585,7 +4603,7 @@ static int get_schema_key_column_usage_record(THD *thd,
|
||||
system_charset_info);
|
||||
table->field[9]->set_notnull();
|
||||
table->field[10]->store(f_key_info->referenced_table->str,
|
||||
f_key_info->referenced_table->length,
|
||||
f_key_info->referenced_table->length,
|
||||
system_charset_info);
|
||||
table->field[10]->set_notnull();
|
||||
table->field[11]->store(r_info->str, r_info->length,
|
||||
@ -4753,7 +4771,7 @@ static int get_schema_partitions_record(THD *thd, TABLE_LIST *tables,
|
||||
tmp_res.append(partition_keywords[PKW_KEY].str,
|
||||
partition_keywords[PKW_KEY].length);
|
||||
else
|
||||
tmp_res.append(partition_keywords[PKW_HASH].str,
|
||||
tmp_res.append(partition_keywords[PKW_HASH].str,
|
||||
partition_keywords[PKW_HASH].length);
|
||||
table->field[7]->store(tmp_res.ptr(), tmp_res.length(), cs);
|
||||
break;
|
||||
@ -4789,7 +4807,7 @@ static int get_schema_partitions_record(THD *thd, TABLE_LIST *tables,
|
||||
tmp_res.append(partition_keywords[PKW_KEY].str,
|
||||
partition_keywords[PKW_KEY].length);
|
||||
else
|
||||
tmp_res.append(partition_keywords[PKW_HASH].str,
|
||||
tmp_res.append(partition_keywords[PKW_HASH].str,
|
||||
partition_keywords[PKW_HASH].length);
|
||||
table->field[8]->store(tmp_res.ptr(), tmp_res.length(), cs);
|
||||
table->field[8]->set_notnull();
|
||||
@ -4868,7 +4886,7 @@ static int get_schema_partitions_record(THD *thd, TABLE_LIST *tables,
|
||||
/* SUBPARTITION_ORDINAL_POSITION */
|
||||
table->field[6]->store((longlong) ++subpart_pos, TRUE);
|
||||
table->field[6]->set_notnull();
|
||||
|
||||
|
||||
store_schema_partitions_record(thd, table, show_table, subpart_elem,
|
||||
file, part_id);
|
||||
part_id++;
|
||||
@ -5086,7 +5104,7 @@ copy_event_to_schema_table(THD *thd, TABLE *sch_table, TABLE *event_table)
|
||||
else
|
||||
sch_table->field[ISE_ON_COMPLETION]->
|
||||
store(STRING_WITH_LEN("PRESERVE"), scs);
|
||||
|
||||
|
||||
number_to_datetime(et.created, &time, 0, ¬_used);
|
||||
DBUG_ASSERT(not_used==0);
|
||||
sch_table->field[ISE_CREATED]->store_time(&time, MYSQL_TIMESTAMP_DATETIME);
|
||||
@ -5207,7 +5225,7 @@ int fill_status(THD *thd, TABLE_LIST *tables, COND *cond)
|
||||
tmp1= &tmp;
|
||||
}
|
||||
else
|
||||
{
|
||||
{
|
||||
option_type= OPT_SESSION;
|
||||
tmp1= &thd->status_var;
|
||||
}
|
||||
@ -5262,7 +5280,7 @@ get_referential_constraints_record(THD *thd, TABLE_LIST *tables,
|
||||
{
|
||||
List<FOREIGN_KEY_INFO> f_key_list;
|
||||
TABLE *show_table= tables->table;
|
||||
show_table->file->info(HA_STATUS_VARIABLE |
|
||||
show_table->file->info(HA_STATUS_VARIABLE |
|
||||
HA_STATUS_NO_LOCK |
|
||||
HA_STATUS_TIME);
|
||||
|
||||
@ -5276,16 +5294,16 @@ get_referential_constraints_record(THD *thd, TABLE_LIST *tables,
|
||||
table->field[9]->store(table_name->str, table_name->length, cs);
|
||||
table->field[2]->store(f_key_info->forein_id->str,
|
||||
f_key_info->forein_id->length, cs);
|
||||
table->field[4]->store(f_key_info->referenced_db->str,
|
||||
table->field[4]->store(f_key_info->referenced_db->str,
|
||||
f_key_info->referenced_db->length, cs);
|
||||
table->field[10]->store(f_key_info->referenced_table->str,
|
||||
table->field[10]->store(f_key_info->referenced_table->str,
|
||||
f_key_info->referenced_table->length, cs);
|
||||
table->field[5]->store(f_key_info->referenced_key_name->str,
|
||||
table->field[5]->store(f_key_info->referenced_key_name->str,
|
||||
f_key_info->referenced_key_name->length, cs);
|
||||
table->field[6]->store(STRING_WITH_LEN("NONE"), cs);
|
||||
table->field[7]->store(f_key_info->update_method->str,
|
||||
table->field[7]->store(f_key_info->update_method->str,
|
||||
f_key_info->update_method->length, cs);
|
||||
table->field[8]->store(f_key_info->delete_method->str,
|
||||
table->field[8]->store(f_key_info->delete_method->str,
|
||||
f_key_info->delete_method->length, cs);
|
||||
if (schema_table_store_record(thd, table))
|
||||
DBUG_RETURN(1);
|
||||
@ -5294,7 +5312,7 @@ get_referential_constraints_record(THD *thd, TABLE_LIST *tables,
|
||||
DBUG_RETURN(0);
|
||||
}
|
||||
|
||||
struct schema_table_ref
|
||||
struct schema_table_ref
|
||||
{
|
||||
const char *table_name;
|
||||
ST_SCHEMA_TABLE *schema_table;
|
||||
@ -5361,7 +5379,7 @@ ST_SCHEMA_TABLE *find_schema_table(THD *thd, const char* table_name)
|
||||
}
|
||||
|
||||
schema_table_a.table_name= table_name;
|
||||
if (plugin_foreach(thd, find_schema_table_in_plugin,
|
||||
if (plugin_foreach(thd, find_schema_table_in_plugin,
|
||||
MYSQL_INFORMATION_SCHEMA_PLUGIN, &schema_table_a))
|
||||
DBUG_RETURN(schema_table_a.schema_table);
|
||||
|
||||
@ -5435,7 +5453,7 @@ TABLE *create_schema_table(THD *thd, TABLE_LIST *table_list)
|
||||
break;
|
||||
case MYSQL_TYPE_FLOAT:
|
||||
case MYSQL_TYPE_DOUBLE:
|
||||
if ((item= new Item_float(fields_info->field_name, 0.0, NOT_FIXED_DEC,
|
||||
if ((item= new Item_float(fields_info->field_name, 0.0, NOT_FIXED_DEC,
|
||||
fields_info->field_length)) == NULL)
|
||||
DBUG_RETURN(NULL);
|
||||
break;
|
||||
@ -5488,7 +5506,7 @@ TABLE *create_schema_table(THD *thd, TABLE_LIST *table_list)
|
||||
tmp_table_param->schema_table= 1;
|
||||
SELECT_LEX *select_lex= thd->lex->current_select;
|
||||
if (!(table= create_tmp_table(thd, tmp_table_param,
|
||||
field_list, (ORDER*) 0, 0, 0,
|
||||
field_list, (ORDER*) 0, 0, 0,
|
||||
(select_lex->options | thd->options |
|
||||
TMP_TABLE_ALL_COLUMNS),
|
||||
HA_POS_ERROR, table_list->alias)))
|
||||
@ -5833,7 +5851,7 @@ bool get_schema_tables_result(JOIN *join,
|
||||
|
||||
thd->no_warnings_for_error= 1;
|
||||
for (JOIN_TAB *tab= join->join_tab; tab < tmp_join_tab; tab++)
|
||||
{
|
||||
{
|
||||
if (!tab->table || !tab->table->pos_in_table_list)
|
||||
break;
|
||||
|
||||
@ -5952,17 +5970,17 @@ ST_FIELD_INFO tables_fields_info[]=
|
||||
{"ROW_FORMAT", 10, MYSQL_TYPE_STRING, 0, 1, "Row_format", OPEN_FULL_TABLE},
|
||||
{"TABLE_ROWS", MY_INT64_NUM_DECIMAL_DIGITS, MYSQL_TYPE_LONGLONG, 0,
|
||||
(MY_I_S_MAYBE_NULL | MY_I_S_UNSIGNED), "Rows", OPEN_FULL_TABLE},
|
||||
{"AVG_ROW_LENGTH", MY_INT64_NUM_DECIMAL_DIGITS, MYSQL_TYPE_LONGLONG, 0,
|
||||
{"AVG_ROW_LENGTH", MY_INT64_NUM_DECIMAL_DIGITS, MYSQL_TYPE_LONGLONG, 0,
|
||||
(MY_I_S_MAYBE_NULL | MY_I_S_UNSIGNED), "Avg_row_length", OPEN_FULL_TABLE},
|
||||
{"DATA_LENGTH", MY_INT64_NUM_DECIMAL_DIGITS, MYSQL_TYPE_LONGLONG, 0,
|
||||
{"DATA_LENGTH", MY_INT64_NUM_DECIMAL_DIGITS, MYSQL_TYPE_LONGLONG, 0,
|
||||
(MY_I_S_MAYBE_NULL | MY_I_S_UNSIGNED), "Data_length", OPEN_FULL_TABLE},
|
||||
{"MAX_DATA_LENGTH", MY_INT64_NUM_DECIMAL_DIGITS, MYSQL_TYPE_LONGLONG, 0,
|
||||
(MY_I_S_MAYBE_NULL | MY_I_S_UNSIGNED), "Max_data_length", OPEN_FULL_TABLE},
|
||||
{"INDEX_LENGTH", MY_INT64_NUM_DECIMAL_DIGITS, MYSQL_TYPE_LONGLONG, 0,
|
||||
{"INDEX_LENGTH", MY_INT64_NUM_DECIMAL_DIGITS, MYSQL_TYPE_LONGLONG, 0,
|
||||
(MY_I_S_MAYBE_NULL | MY_I_S_UNSIGNED), "Index_length", OPEN_FULL_TABLE},
|
||||
{"DATA_FREE", MY_INT64_NUM_DECIMAL_DIGITS, MYSQL_TYPE_LONGLONG, 0,
|
||||
(MY_I_S_MAYBE_NULL | MY_I_S_UNSIGNED), "Data_free", OPEN_FULL_TABLE},
|
||||
{"AUTO_INCREMENT", MY_INT64_NUM_DECIMAL_DIGITS , MYSQL_TYPE_LONGLONG, 0,
|
||||
{"AUTO_INCREMENT", MY_INT64_NUM_DECIMAL_DIGITS , MYSQL_TYPE_LONGLONG, 0,
|
||||
(MY_I_S_MAYBE_NULL | MY_I_S_UNSIGNED), "Auto_increment", OPEN_FULL_TABLE},
|
||||
{"CREATE_TIME", 0, MYSQL_TYPE_DATETIME, 0, 1, "Create_time", OPEN_FULL_TABLE},
|
||||
{"UPDATE_TIME", 0, MYSQL_TYPE_DATETIME, 0, 1, "Update_time", OPEN_FULL_TABLE},
|
||||
@ -6427,9 +6445,9 @@ ST_FIELD_INFO files_fields_info[]=
|
||||
{"EXTENT_SIZE", 4, MYSQL_TYPE_LONGLONG, 0, 0, 0, SKIP_OPEN_TABLE},
|
||||
{"INITIAL_SIZE", 21, MYSQL_TYPE_LONGLONG, 0,
|
||||
(MY_I_S_MAYBE_NULL | MY_I_S_UNSIGNED), 0, SKIP_OPEN_TABLE},
|
||||
{"MAXIMUM_SIZE", 21, MYSQL_TYPE_LONGLONG, 0,
|
||||
{"MAXIMUM_SIZE", 21, MYSQL_TYPE_LONGLONG, 0,
|
||||
(MY_I_S_MAYBE_NULL | MY_I_S_UNSIGNED), 0, SKIP_OPEN_TABLE},
|
||||
{"AUTOEXTEND_SIZE", 21, MYSQL_TYPE_LONGLONG, 0,
|
||||
{"AUTOEXTEND_SIZE", 21, MYSQL_TYPE_LONGLONG, 0,
|
||||
(MY_I_S_MAYBE_NULL | MY_I_S_UNSIGNED), 0, SKIP_OPEN_TABLE},
|
||||
{"CREATION_TIME", 0, MYSQL_TYPE_DATETIME, 0, 1, 0, SKIP_OPEN_TABLE},
|
||||
{"LAST_UPDATE_TIME", 0, MYSQL_TYPE_DATETIME, 0, 1, 0, SKIP_OPEN_TABLE},
|
||||
@ -6441,20 +6459,20 @@ ST_FIELD_INFO files_fields_info[]=
|
||||
{"ROW_FORMAT", 10, MYSQL_TYPE_STRING, 0, 1, "Row_format", SKIP_OPEN_TABLE},
|
||||
{"TABLE_ROWS", 21 , MYSQL_TYPE_LONGLONG, 0,
|
||||
(MY_I_S_MAYBE_NULL | MY_I_S_UNSIGNED), "Rows", SKIP_OPEN_TABLE},
|
||||
{"AVG_ROW_LENGTH", 21 , MYSQL_TYPE_LONGLONG, 0,
|
||||
{"AVG_ROW_LENGTH", 21 , MYSQL_TYPE_LONGLONG, 0,
|
||||
(MY_I_S_MAYBE_NULL | MY_I_S_UNSIGNED), "Avg_row_length", SKIP_OPEN_TABLE},
|
||||
{"DATA_LENGTH", 21 , MYSQL_TYPE_LONGLONG, 0,
|
||||
{"DATA_LENGTH", 21 , MYSQL_TYPE_LONGLONG, 0,
|
||||
(MY_I_S_MAYBE_NULL | MY_I_S_UNSIGNED), "Data_length", SKIP_OPEN_TABLE},
|
||||
{"MAX_DATA_LENGTH", 21 , MYSQL_TYPE_LONGLONG, 0,
|
||||
{"MAX_DATA_LENGTH", 21 , MYSQL_TYPE_LONGLONG, 0,
|
||||
(MY_I_S_MAYBE_NULL | MY_I_S_UNSIGNED), "Max_data_length", SKIP_OPEN_TABLE},
|
||||
{"INDEX_LENGTH", 21 , MYSQL_TYPE_LONGLONG, 0,
|
||||
{"INDEX_LENGTH", 21 , MYSQL_TYPE_LONGLONG, 0,
|
||||
(MY_I_S_MAYBE_NULL | MY_I_S_UNSIGNED), "Index_length", SKIP_OPEN_TABLE},
|
||||
{"DATA_FREE", 21 , MYSQL_TYPE_LONGLONG, 0,
|
||||
{"DATA_FREE", 21 , MYSQL_TYPE_LONGLONG, 0,
|
||||
(MY_I_S_MAYBE_NULL | MY_I_S_UNSIGNED), "Data_free", SKIP_OPEN_TABLE},
|
||||
{"CREATE_TIME", 0, MYSQL_TYPE_DATETIME, 0, 1, "Create_time", SKIP_OPEN_TABLE},
|
||||
{"UPDATE_TIME", 0, MYSQL_TYPE_DATETIME, 0, 1, "Update_time", SKIP_OPEN_TABLE},
|
||||
{"CHECK_TIME", 0, MYSQL_TYPE_DATETIME, 0, 1, "Check_time", SKIP_OPEN_TABLE},
|
||||
{"CHECKSUM", 21 , MYSQL_TYPE_LONGLONG, 0,
|
||||
{"CHECKSUM", 21 , MYSQL_TYPE_LONGLONG, 0,
|
||||
(MY_I_S_MAYBE_NULL | MY_I_S_UNSIGNED), "Checksum", SKIP_OPEN_TABLE},
|
||||
{"STATUS", 20, MYSQL_TYPE_STRING, 0, 0, 0, SKIP_OPEN_TABLE},
|
||||
{"EXTRA", 255, MYSQL_TYPE_STRING, 0, 1, 0, SKIP_OPEN_TABLE},
|
||||
@ -6503,13 +6521,13 @@ ST_FIELD_INFO referential_constraints_fields_info[]=
|
||||
|
||||
ST_SCHEMA_TABLE schema_tables[]=
|
||||
{
|
||||
{"CHARACTER_SETS", charsets_fields_info, create_schema_table,
|
||||
{"CHARACTER_SETS", charsets_fields_info, create_schema_table,
|
||||
fill_schema_charsets, make_character_sets_old_format, 0, -1, -1, 0, 0},
|
||||
{"COLLATIONS", collation_fields_info, create_schema_table,
|
||||
{"COLLATIONS", collation_fields_info, create_schema_table,
|
||||
fill_schema_collation, make_old_format, 0, -1, -1, 0, 0},
|
||||
{"COLLATION_CHARACTER_SET_APPLICABILITY", coll_charset_app_fields_info,
|
||||
create_schema_table, fill_schema_coll_charset_app, 0, 0, -1, -1, 0, 0},
|
||||
{"COLUMNS", columns_fields_info, create_schema_table,
|
||||
{"COLUMNS", columns_fields_info, create_schema_table,
|
||||
get_all_tables, make_columns_old_format, get_schema_column_record, 1, 2, 0,
|
||||
OPTIMIZE_I_S_TABLE|OPEN_VIEW_FULL},
|
||||
{"COLUMN_PRIVILEGES", column_privileges_fields_info, create_schema_table,
|
||||
@ -6541,7 +6559,7 @@ ST_SCHEMA_TABLE schema_tables[]=
|
||||
{"REFERENTIAL_CONSTRAINTS", referential_constraints_fields_info,
|
||||
create_schema_table, get_all_tables, 0, get_referential_constraints_record,
|
||||
1, 9, 0, OPEN_TABLE_ONLY},
|
||||
{"ROUTINES", proc_fields_info, create_schema_table,
|
||||
{"ROUTINES", proc_fields_info, create_schema_table,
|
||||
fill_schema_proc, make_proc_old_format, 0, -1, -1, 0, 0},
|
||||
{"SCHEMATA", schema_fields_info, create_schema_table,
|
||||
fill_schema_schemata, make_schemata_old_format, 0, 1, -1, 0, 0},
|
||||
@ -6551,12 +6569,12 @@ ST_SCHEMA_TABLE schema_tables[]=
|
||||
fill_status, make_old_format, 0, -1, -1, 0, 0},
|
||||
{"SESSION_VARIABLES", variables_fields_info, create_schema_table,
|
||||
fill_variables, make_old_format, 0, -1, -1, 0, 0},
|
||||
{"STATISTICS", stat_fields_info, create_schema_table,
|
||||
{"STATISTICS", stat_fields_info, create_schema_table,
|
||||
get_all_tables, make_old_format, get_schema_stat_record, 1, 2, 0,
|
||||
OPEN_TABLE_ONLY|OPTIMIZE_I_S_TABLE},
|
||||
{"STATUS", variables_fields_info, create_schema_table, fill_status,
|
||||
{"STATUS", variables_fields_info, create_schema_table, fill_status,
|
||||
make_old_format, 0, -1, -1, 1, 0},
|
||||
{"TABLES", tables_fields_info, create_schema_table,
|
||||
{"TABLES", tables_fields_info, create_schema_table,
|
||||
get_all_tables, make_old_format, get_schema_tables_record, 1, 2, 0,
|
||||
OPTIMIZE_I_S_TABLE},
|
||||
{"TABLE_CONSTRAINTS", table_constraints_fields_info, create_schema_table,
|
||||
@ -6568,11 +6586,11 @@ ST_SCHEMA_TABLE schema_tables[]=
|
||||
{"TRIGGERS", triggers_fields_info, create_schema_table,
|
||||
get_all_tables, make_old_format, get_schema_triggers_record, 5, 6, 0,
|
||||
OPEN_TABLE_ONLY},
|
||||
{"USER_PRIVILEGES", user_privileges_fields_info, create_schema_table,
|
||||
{"USER_PRIVILEGES", user_privileges_fields_info, create_schema_table,
|
||||
fill_schema_user_privileges, 0, 0, -1, -1, 0, 0},
|
||||
{"VARIABLES", variables_fields_info, create_schema_table, fill_variables,
|
||||
make_old_format, 0, -1, -1, 1, 0},
|
||||
{"VIEWS", view_fields_info, create_schema_table,
|
||||
{"VIEWS", view_fields_info, create_schema_table,
|
||||
get_all_tables, 0, get_schema_views_record, 1, 2, 0,
|
||||
OPEN_VIEW_ONLY|OPTIMIZE_I_S_TABLE},
|
||||
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
|
||||
@ -6598,8 +6616,8 @@ int initialize_schema_table(st_plugin_int *plugin)
|
||||
{
|
||||
schema_table->create_table= create_schema_table;
|
||||
schema_table->old_format= make_old_format;
|
||||
schema_table->idx_field1= -1,
|
||||
schema_table->idx_field2= -1;
|
||||
schema_table->idx_field1= -1,
|
||||
schema_table->idx_field2= -1;
|
||||
|
||||
/* Make the name available to the init() function. */
|
||||
schema_table->table_name= plugin->name.str;
|
||||
@ -6610,7 +6628,7 @@ int initialize_schema_table(st_plugin_int *plugin)
|
||||
plugin->name.str);
|
||||
goto err;
|
||||
}
|
||||
|
||||
|
||||
/* Make sure the plugin name is not set inside the init() function. */
|
||||
schema_table->table_name= plugin->name.str;
|
||||
}
|
||||
|
Reference in New Issue
Block a user