mirror of
https://github.com/MariaDB/server.git
synced 2025-08-01 03:47:19 +03:00
Merge of 5.1-main into 5.1-maria. There were no changes to storage/myisam, mysys/mf_keycache.c, mysql-test/t/*myisam*
since previous merge. MARIA_PAGECACHE_READS in maria-preload.test are down a little bit (5%), which must be a good side-effect of some sql/ change.
This commit is contained in:
272
sql/sql_show.cc
272
sql/sql_show.cc
@ -170,15 +170,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;
|
||||
}
|
||||
@ -488,7 +488,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 .. */
|
||||
@ -514,7 +514,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);
|
||||
@ -553,7 +553,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))
|
||||
{
|
||||
@ -592,7 +592,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);
|
||||
@ -783,7 +783,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)
|
||||
@ -994,13 +994,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 &&
|
||||
@ -1055,11 +1055,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
|
||||
*/
|
||||
@ -1160,7 +1160,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)
|
||||
@ -1168,8 +1168,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))
|
||||
@ -1196,11 +1196,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"));
|
||||
|
||||
@ -1213,8 +1213,10 @@ 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 */
|
||||
/* Allow update_create_info to update row type, page checksums and options */
|
||||
create_info.row_type= share->row_type;
|
||||
create_info.page_checksum= share->page_checksum;
|
||||
create_info.options= share->db_create_options;
|
||||
file->update_create_info(&create_info);
|
||||
primary_key= share->primary_key;
|
||||
|
||||
@ -1349,7 +1351,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))
|
||||
@ -1395,19 +1397,19 @@ int store_create_info(THD *thd, TABLE_LIST *table_list, String *packet,
|
||||
packet->append(buff, (uint) (end - buff));
|
||||
}
|
||||
|
||||
if (share->db_create_options & HA_OPTION_PACK_KEYS)
|
||||
if (create_info.options & HA_OPTION_PACK_KEYS)
|
||||
packet->append(STRING_WITH_LEN(" PACK_KEYS=1"));
|
||||
if (share->db_create_options & HA_OPTION_NO_PACK_KEYS)
|
||||
if (create_info.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)
|
||||
if (create_info.options & HA_OPTION_CHECKSUM)
|
||||
packet->append(STRING_WITH_LEN(" CHECKSUM=1"));
|
||||
if (share->page_checksum != HA_CHOICE_UNDEF)
|
||||
if (create_info.page_checksum != HA_CHOICE_UNDEF)
|
||||
{
|
||||
packet->append(STRING_WITH_LEN(" PAGE_CHECKSUM="));
|
||||
packet->append(ha_choice_values[(uint) share->page_checksum], 1);
|
||||
packet->append(ha_choice_values[create_info.page_checksum], 1);
|
||||
}
|
||||
if (share->db_create_options & HA_OPTION_DELAY_KEY_WRITE)
|
||||
if (create_info.options & HA_OPTION_DELAY_KEY_WRITE)
|
||||
packet->append(STRING_WITH_LEN(" DELAY_KEY_WRITE=1"));
|
||||
if (create_info.row_type != ROW_TYPE_DEFAULT)
|
||||
{
|
||||
@ -1520,7 +1522,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
|
||||
@ -1549,7 +1551,7 @@ static void append_algorithm(TABLE_LIST *table, String *buff)
|
||||
|
||||
/*
|
||||
Append DEFINER clause to the given buffer.
|
||||
|
||||
|
||||
SYNOPSIS
|
||||
append_definer()
|
||||
thd [in] thread handle
|
||||
@ -1709,8 +1711,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);
|
||||
@ -1739,7 +1741,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
|
||||
@ -1986,7 +1988,7 @@ void reset_status_vars()
|
||||
/* Note that SHOW_LONG_NOFLUSH variables are not reset */
|
||||
if (ptr->type == SHOW_LONG)
|
||||
*(ulong*) ptr->value= 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
@ -2133,7 +2135,6 @@ static bool show_status_array(THD *thd, const char *wild,
|
||||
const char *pos, *end; // We assign a lot of const's
|
||||
|
||||
pthread_mutex_lock(&LOCK_global_system_variables);
|
||||
|
||||
if (show_type == SHOW_SYS)
|
||||
{
|
||||
sys_var *var= ((sys_var *) value);
|
||||
@ -2149,20 +2150,20 @@ static bool show_status_array(THD *thd, const char *wild,
|
||||
*/
|
||||
switch (show_type) {
|
||||
case SHOW_DOUBLE_STATUS:
|
||||
value= ((char *) status_var + (ulong) value);
|
||||
value= ((char *) status_var + (intptr) value);
|
||||
/* fall through */
|
||||
case SHOW_DOUBLE:
|
||||
end= buff + my_sprintf(buff, (buff, "%f", *(double*) value));
|
||||
break;
|
||||
case SHOW_LONG_STATUS:
|
||||
value= ((char *) status_var + (ulong) value);
|
||||
value= ((char *) status_var + (intptr) value);
|
||||
/* fall through */
|
||||
case SHOW_LONG:
|
||||
case SHOW_LONG_NOFLUSH: // the difference lies in refresh_status()
|
||||
end= int10_to_str(*(long*) value, buff, 10);
|
||||
break;
|
||||
case SHOW_LONGLONG_STATUS:
|
||||
value= ((char *) status_var + (ulonglong) value);
|
||||
value= ((char *) status_var + (intptr) value);
|
||||
/* fall through */
|
||||
case SHOW_LONGLONG:
|
||||
end= longlong10_to_str(*(longlong*) value, buff, 10);
|
||||
@ -2215,12 +2216,11 @@ static bool show_status_array(THD *thd, const char *wild,
|
||||
DBUG_ASSERT(0);
|
||||
break;
|
||||
}
|
||||
pthread_mutex_unlock(&LOCK_global_system_variables);
|
||||
table->field[1]->store(pos, (uint32) (end - pos), charset);
|
||||
thd->count_cuted_fields= CHECK_FIELD_IGNORE;
|
||||
table->field[1]->set_notnull();
|
||||
|
||||
pthread_mutex_unlock(&LOCK_global_system_variables);
|
||||
|
||||
if (schema_table_store_record(thd, table))
|
||||
{
|
||||
res= TRUE;
|
||||
@ -2246,14 +2246,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;
|
||||
}
|
||||
@ -2288,7 +2288,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;
|
||||
@ -2310,17 +2310,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
|
||||
@ -2328,7 +2328,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;
|
||||
@ -2394,16 +2394,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
|
||||
@ -2552,7 +2552,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
|
||||
@ -2614,7 +2614,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
|
||||
@ -2638,7 +2638,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))
|
||||
{
|
||||
@ -2682,7 +2682,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;
|
||||
@ -2746,7 +2746,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))
|
||||
@ -2802,7 +2802,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;
|
||||
/*
|
||||
@ -2863,7 +2863,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)
|
||||
@ -2890,7 +2890,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,
|
||||
@ -2900,11 +2900,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,
|
||||
@ -2914,7 +2914,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,
|
||||
@ -2952,7 +2952,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:
|
||||
@ -3050,7 +3050,7 @@ 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)
|
||||
@ -3077,7 +3077,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)
|
||||
@ -3089,7 +3089,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;
|
||||
@ -3158,7 +3158,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;
|
||||
@ -3179,7 +3179,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
|
||||
@ -3203,7 +3203,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
|
||||
*/
|
||||
@ -3221,7 +3221,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)
|
||||
@ -3245,7 +3245,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) ||
|
||||
@ -3275,7 +3275,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).
|
||||
*/
|
||||
@ -3297,7 +3297,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,
|
||||
@ -3351,10 +3351,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,
|
||||
@ -3568,15 +3568,9 @@ static int get_schema_tables_record(THD *thd, TABLE_LIST *tables,
|
||||
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)
|
||||
{
|
||||
ptr= strxmov(ptr, " TRANSACTIONAL=",
|
||||
(share->transactional == HA_CHOICE_YES ? "1" : "0"),
|
||||
NullS);
|
||||
}
|
||||
#ifdef WITH_PARTITION_STORAGE_ENGINE
|
||||
if (is_partitioned)
|
||||
ptr= strmov(ptr, " partitioned");
|
||||
@ -3585,7 +3579,7 @@ static int get_schema_tables_record(THD *thd, TABLE_LIST *tables,
|
||||
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 ?
|
||||
@ -3623,7 +3617,7 @@ static int get_schema_tables_record(THD *thd, TABLE_LIST *tables,
|
||||
tmp_buff= "Compact";
|
||||
break;
|
||||
case ROW_TYPE_PAGE:
|
||||
tmp_buff= "Paged";
|
||||
tmp_buff= "Page";
|
||||
break;
|
||||
}
|
||||
table->field[6]->store(tmp_buff, strlen(tmp_buff), cs);
|
||||
@ -3668,7 +3662,7 @@ static int get_schema_tables_record(THD *thd, TABLE_LIST *tables,
|
||||
table->field[16]->store_time(&time, MYSQL_TIMESTAMP_DATETIME);
|
||||
table->field[16]->set_notnull();
|
||||
}
|
||||
if (file->ha_table_flags() & (ulong) HA_HAS_CHECKSUM)
|
||||
if (file->ha_table_flags() & (HA_HAS_OLD_CHECKSUM | HA_HAS_NEW_CHECKSUM))
|
||||
{
|
||||
table->field[18]->store((longlong) file->checksum(), TRUE);
|
||||
table->field[18]->set_notnull();
|
||||
@ -3699,7 +3693,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
|
||||
*/
|
||||
*/
|
||||
if (thd->is_error())
|
||||
push_warning(thd, MYSQL_ERROR::WARN_LEVEL_WARN,
|
||||
thd->main_da.sql_errno(), thd->main_da.message());
|
||||
@ -3738,7 +3732,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)
|
||||
@ -3761,7 +3755,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() :
|
||||
@ -3783,7 +3777,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);
|
||||
@ -3816,7 +3810,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)
|
||||
@ -3882,7 +3876,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] &&
|
||||
@ -3969,7 +3963,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] &&
|
||||
@ -4003,13 +3997,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);
|
||||
@ -4075,7 +4069,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);
|
||||
@ -4389,10 +4383,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);
|
||||
}
|
||||
@ -4433,7 +4427,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++)
|
||||
@ -4462,7 +4456,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))
|
||||
@ -4617,7 +4611,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++)
|
||||
@ -4634,8 +4628,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))
|
||||
@ -4671,7 +4665,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,
|
||||
@ -4745,7 +4739,7 @@ static void store_schema_partitions_record(THD *thd, TABLE *schema_table,
|
||||
table->field[20]->store_time(&time, MYSQL_TIMESTAMP_DATETIME);
|
||||
table->field[20]->set_notnull();
|
||||
}
|
||||
if (file->ha_table_flags() & (ulong) HA_HAS_CHECKSUM)
|
||||
if (file->ha_table_flags() & (HA_HAS_OLD_CHECKSUM | HA_HAS_NEW_CHECKSUM))
|
||||
{
|
||||
table->field[21]->store((longlong) stat_info.check_sum, TRUE);
|
||||
table->field[21]->set_notnull();
|
||||
@ -4839,7 +4833,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;
|
||||
@ -4875,7 +4869,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();
|
||||
@ -4954,7 +4948,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++;
|
||||
@ -5172,7 +5166,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);
|
||||
@ -5293,7 +5287,7 @@ int fill_status(THD *thd, TABLE_LIST *tables, COND *cond)
|
||||
tmp1= &tmp;
|
||||
}
|
||||
else
|
||||
{
|
||||
{
|
||||
option_type= OPT_SESSION;
|
||||
tmp1= &thd->status_var;
|
||||
}
|
||||
@ -5348,7 +5342,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);
|
||||
|
||||
@ -5362,9 +5356,9 @@ 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);
|
||||
if (f_key_info->referenced_key_name)
|
||||
{
|
||||
@ -5375,9 +5369,9 @@ get_referential_constraints_record(THD *thd, TABLE_LIST *tables,
|
||||
else
|
||||
table->field[5]->set_null();
|
||||
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);
|
||||
@ -5386,7 +5380,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;
|
||||
@ -5453,7 +5447,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);
|
||||
|
||||
@ -5528,7 +5522,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;
|
||||
@ -5582,7 +5576,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)))
|
||||
@ -5927,7 +5921,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;
|
||||
|
||||
@ -6052,17 +6046,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},
|
||||
@ -6533,9 +6527,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},
|
||||
@ -6547,20 +6541,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},
|
||||
@ -6609,13 +6603,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,
|
||||
@ -6652,7 +6646,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},
|
||||
@ -6679,7 +6673,7 @@ 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, 0, -1, 1, 0},
|
||||
@ -6709,8 +6703,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;
|
||||
@ -6723,7 +6717,7 @@ int initialize_schema_table(st_plugin_int *plugin)
|
||||
my_free(schema_table, MYF(0));
|
||||
DBUG_RETURN(1);
|
||||
}
|
||||
|
||||
|
||||
/* 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