Bug#29263 disabled storage engines omitted in SHOW ENGINES
Static disabled plugins|engines and dynamic plugins which installed but disabled are not visible in I_S PLUGINS|ENGINES tables because they are not stored into global plugin array. The fix: add such plugins|engines to plugin array with PLUGIN_IS_DISABLED status. I_S.ENGINES 'Transactions', 'XA', 'Savepoints' fields have NULL value in this case.
This commit is contained in:
parent
aae00014e2
commit
fcba66f10c
@ -1,7 +1,15 @@
|
||||
create table t1 (id int) engine=NDB;
|
||||
Warnings:
|
||||
Warning 1286 Unknown table engine 'NDB'
|
||||
Warning 1266 Using storage engine MyISAM for table 't1'
|
||||
alter table t1 engine=NDB;
|
||||
Warnings:
|
||||
Warning 1266 Using storage engine MyISAM for table 't1'
|
||||
Warning 1286 Unknown table engine 'NDB'
|
||||
drop table t1;
|
||||
SELECT ENGINE, SUPPORT FROM INFORMATION_SCHEMA.ENGINES WHERE ENGINE='ndbcluster';
|
||||
ENGINE SUPPORT
|
||||
ndbcluster NO
|
||||
SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE
|
||||
PLUGIN_NAME='ndbcluster';
|
||||
PLUGIN_NAME PLUGIN_STATUS
|
||||
ndbcluster DISABLED
|
||||
|
@ -43,10 +43,10 @@ NULL information_schema COLUMN_PRIVILEGES TABLE_NAME 4 NO varchar 64 192 NULL N
|
||||
NULL information_schema COLUMN_PRIVILEGES TABLE_SCHEMA 3 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
|
||||
NULL information_schema ENGINES COMMENT 3 NO varchar 80 240 NULL NULL utf8 utf8_general_ci varchar(80) select
|
||||
NULL information_schema ENGINES ENGINE 1 NO varchar 64 192 NULL NULL utf8 utf8_general_ci varchar(64) select
|
||||
NULL information_schema ENGINES SAVEPOINTS 6 NO varchar 3 9 NULL NULL utf8 utf8_general_ci varchar(3) select
|
||||
NULL information_schema ENGINES SAVEPOINTS 6 NULL YES varchar 3 9 NULL NULL utf8 utf8_general_ci varchar(3) select
|
||||
NULL information_schema ENGINES SUPPORT 2 NO varchar 8 24 NULL NULL utf8 utf8_general_ci varchar(8) select
|
||||
NULL information_schema ENGINES TRANSACTIONS 4 NO varchar 3 9 NULL NULL utf8 utf8_general_ci varchar(3) select
|
||||
NULL information_schema ENGINES XA 5 NO varchar 3 9 NULL NULL utf8 utf8_general_ci varchar(3) select
|
||||
NULL information_schema ENGINES TRANSACTIONS 4 NULL YES varchar 3 9 NULL NULL utf8 utf8_general_ci varchar(3) select
|
||||
NULL information_schema ENGINES XA 5 NULL YES varchar 3 9 NULL NULL utf8 utf8_general_ci varchar(3) select
|
||||
NULL information_schema EVENTS CHARACTER_SET_CLIENT 22 NO varchar 32 96 NULL NULL utf8 utf8_general_ci varchar(32) select
|
||||
NULL information_schema EVENTS COLLATION_CONNECTION 23 NO varchar 32 96 NULL NULL utf8 utf8_general_ci varchar(32) select
|
||||
NULL information_schema EVENTS CREATED 17 0000-00-00 00:00:00 NO datetime NULL NULL NULL NULL NULL NULL datetime select
|
||||
|
@ -31,27 +31,27 @@ Field Type Null Key Default Extra
|
||||
ENGINE varchar(64) NO
|
||||
SUPPORT varchar(8) NO
|
||||
COMMENT varchar(80) NO
|
||||
TRANSACTIONS varchar(3) NO
|
||||
XA varchar(3) NO
|
||||
SAVEPOINTS varchar(3) NO
|
||||
TRANSACTIONS varchar(3) YES NULL
|
||||
XA varchar(3) YES NULL
|
||||
SAVEPOINTS varchar(3) YES NULL
|
||||
SHOW CREATE TABLE information_schema.ENGINES;
|
||||
Table Create Table
|
||||
ENGINES CREATE TEMPORARY TABLE `ENGINES` (
|
||||
`ENGINE` varchar(64) NOT NULL DEFAULT '',
|
||||
`SUPPORT` varchar(8) NOT NULL DEFAULT '',
|
||||
`COMMENT` varchar(80) NOT NULL DEFAULT '',
|
||||
`TRANSACTIONS` varchar(3) NOT NULL DEFAULT '',
|
||||
`XA` varchar(3) NOT NULL DEFAULT '',
|
||||
`SAVEPOINTS` varchar(3) NOT NULL DEFAULT ''
|
||||
`TRANSACTIONS` varchar(3) DEFAULT NULL,
|
||||
`XA` varchar(3) DEFAULT NULL,
|
||||
`SAVEPOINTS` varchar(3) DEFAULT NULL
|
||||
) ENGINE=MEMORY DEFAULT CHARSET=utf8
|
||||
SHOW COLUMNS FROM information_schema.ENGINES;
|
||||
Field Type Null Key Default Extra
|
||||
ENGINE varchar(64) NO
|
||||
SUPPORT varchar(8) NO
|
||||
COMMENT varchar(80) NO
|
||||
TRANSACTIONS varchar(3) NO
|
||||
XA varchar(3) NO
|
||||
SAVEPOINTS varchar(3) NO
|
||||
TRANSACTIONS varchar(3) YES NULL
|
||||
XA varchar(3) YES NULL
|
||||
SAVEPOINTS varchar(3) YES NULL
|
||||
########################################################################
|
||||
# Testcases 3.2.1.3-3.2.1.5 + 3.2.1.8-3.2.1.12: INSERT/UPDATE/DELETE and
|
||||
# DDL on INFORMATION_SCHEMA tables are not supported
|
||||
|
@ -4,7 +4,7 @@
|
||||
#
|
||||
disable_query_log;
|
||||
--require r/true.require
|
||||
select support = 'Disabled' as `TRUE` from information_schema.engines where engine = 'ndbcluster';
|
||||
select support = 'NO' as `TRUE` from information_schema.engines where engine = 'ndbcluster';
|
||||
enable_query_log;
|
||||
|
||||
|
||||
@ -16,4 +16,9 @@ create table t1 (id int) engine=NDB;
|
||||
alter table t1 engine=NDB;
|
||||
drop table t1;
|
||||
|
||||
|
||||
#
|
||||
# Bug#29263 disabled storage engines omitted in SHOW ENGINES
|
||||
#
|
||||
SELECT ENGINE, SUPPORT FROM INFORMATION_SCHEMA.ENGINES WHERE ENGINE='ndbcluster';
|
||||
SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE
|
||||
PLUGIN_NAME='ndbcluster';
|
||||
|
@ -751,21 +751,22 @@ static bool plugin_add(MEM_ROOT *tmp_root,
|
||||
tmp.name.length= name_len;
|
||||
tmp.ref_count= 0;
|
||||
tmp.state= PLUGIN_IS_UNINITIALIZED;
|
||||
if (!test_plugin_options(tmp_root, &tmp, argc, argv, true))
|
||||
if (test_plugin_options(tmp_root, &tmp, argc, argv, true))
|
||||
tmp.state= PLUGIN_IS_DISABLED;
|
||||
|
||||
if ((tmp_plugin_ptr= plugin_insert_or_reuse(&tmp)))
|
||||
{
|
||||
if ((tmp_plugin_ptr= plugin_insert_or_reuse(&tmp)))
|
||||
plugin_array_version++;
|
||||
if (!my_hash_insert(&plugin_hash[plugin->type], (uchar*)tmp_plugin_ptr))
|
||||
{
|
||||
plugin_array_version++;
|
||||
if (!my_hash_insert(&plugin_hash[plugin->type], (uchar*)tmp_plugin_ptr))
|
||||
{
|
||||
init_alloc_root(&tmp_plugin_ptr->mem_root, 4096, 4096);
|
||||
DBUG_RETURN(FALSE);
|
||||
}
|
||||
tmp_plugin_ptr->state= PLUGIN_IS_FREED;
|
||||
init_alloc_root(&tmp_plugin_ptr->mem_root, 4096, 4096);
|
||||
DBUG_RETURN(FALSE);
|
||||
}
|
||||
mysql_del_sys_var_chain(tmp.system_vars);
|
||||
goto err;
|
||||
tmp_plugin_ptr->state= PLUGIN_IS_FREED;
|
||||
}
|
||||
mysql_del_sys_var_chain(tmp.system_vars);
|
||||
goto err;
|
||||
|
||||
/* plugin was disabled */
|
||||
plugin_dl_del(dl);
|
||||
DBUG_RETURN(FALSE);
|
||||
@ -1145,11 +1146,12 @@ int plugin_init(int *argc, char **argv, int flags)
|
||||
tmp.plugin= plugin;
|
||||
tmp.name.str= (char *)plugin->name;
|
||||
tmp.name.length= strlen(plugin->name);
|
||||
|
||||
tmp.state= 0;
|
||||
free_root(&tmp_root, MYF(MY_MARK_BLOCKS_FREE));
|
||||
if (test_plugin_options(&tmp_root, &tmp, argc, argv, def_enabled))
|
||||
continue;
|
||||
|
||||
tmp.state= PLUGIN_IS_DISABLED;
|
||||
else
|
||||
tmp.state= PLUGIN_IS_UNINITIALIZED;
|
||||
if (register_builtin(plugin, &tmp, &plugin_ptr))
|
||||
goto err_unlock;
|
||||
|
||||
@ -1159,7 +1161,8 @@ int plugin_init(int *argc, char **argv, int flags)
|
||||
my_strcasecmp(&my_charset_latin1, plugin->name, "CSV"))
|
||||
continue;
|
||||
|
||||
if (plugin_initialize(plugin_ptr))
|
||||
if (plugin_ptr->state == PLUGIN_IS_UNINITIALIZED &&
|
||||
plugin_initialize(plugin_ptr))
|
||||
goto err_unlock;
|
||||
|
||||
/*
|
||||
@ -1246,8 +1249,6 @@ static bool register_builtin(struct st_mysql_plugin *plugin,
|
||||
struct st_plugin_int **ptr)
|
||||
{
|
||||
DBUG_ENTER("register_builtin");
|
||||
|
||||
tmp->state= PLUGIN_IS_UNINITIALIZED;
|
||||
tmp->ref_count= 0;
|
||||
tmp->plugin_dl= 0;
|
||||
|
||||
@ -1296,7 +1297,7 @@ bool plugin_register_builtin(THD *thd, struct st_mysql_plugin *plugin)
|
||||
|
||||
if (test_plugin_options(thd->mem_root, &tmp, &dummy_argc, NULL, true))
|
||||
goto end;
|
||||
|
||||
tmp.state= PLUGIN_IS_UNINITIALIZED;
|
||||
if ((result= register_builtin(plugin, &tmp, &ptr)))
|
||||
mysql_del_sys_var_chain(tmp.system_vars);
|
||||
|
||||
@ -1555,7 +1556,8 @@ void plugin_shutdown(void)
|
||||
We loop through all plugins and call deinit() if they have one.
|
||||
*/
|
||||
for (i= 0; i < count; i++)
|
||||
if (!(plugins[i]->state & (PLUGIN_IS_UNINITIALIZED | PLUGIN_IS_FREED)))
|
||||
if (!(plugins[i]->state & (PLUGIN_IS_UNINITIALIZED | PLUGIN_IS_FREED |
|
||||
PLUGIN_IS_DISABLED)))
|
||||
{
|
||||
sql_print_information("Plugin '%s' will be forced to shutdown",
|
||||
plugins[i]->name.str);
|
||||
|
@ -54,6 +54,7 @@ typedef struct st_mysql_show_var SHOW_VAR;
|
||||
#define PLUGIN_IS_UNINITIALIZED 4
|
||||
#define PLUGIN_IS_READY 8
|
||||
#define PLUGIN_IS_DYING 16
|
||||
#define PLUGIN_IS_DISABLED 32
|
||||
|
||||
/* A handle for the dynamic library containing a plugin or plugins. */
|
||||
|
||||
|
@ -124,6 +124,9 @@ static my_bool show_plugins(THD *thd, plugin_ref plugin,
|
||||
case PLUGIN_IS_READY:
|
||||
table->field[2]->store(STRING_WITH_LEN("ACTIVE"), cs);
|
||||
break;
|
||||
case PLUGIN_IS_DISABLED:
|
||||
table->field[2]->store(STRING_WITH_LEN("DISABLED"), cs);
|
||||
break;
|
||||
default:
|
||||
DBUG_ASSERT(0);
|
||||
}
|
||||
@ -3930,6 +3933,25 @@ static my_bool iter_schema_engines(THD *thd, plugin_ref plugin,
|
||||
handlerton *default_type= ha_default_handlerton(thd);
|
||||
DBUG_ENTER("iter_schema_engines");
|
||||
|
||||
|
||||
/* Disabled plugins */
|
||||
if (plugin_state(plugin) != PLUGIN_IS_READY)
|
||||
{
|
||||
|
||||
struct st_mysql_plugin *plug= plugin_decl(plugin);
|
||||
if (!(wild && wild[0] &&
|
||||
wild_case_compare(scs, plug->name,wild)))
|
||||
{
|
||||
restore_record(table, s->default_values);
|
||||
table->field[0]->store(plug->name, strlen(plug->name), scs);
|
||||
table->field[1]->store(C_STRING_WITH_LEN("NO"), scs);
|
||||
table->field[2]->store(plug->descr, strlen(plug->descr), scs);
|
||||
if (schema_table_store_record(thd, table))
|
||||
DBUG_RETURN(1);
|
||||
}
|
||||
DBUG_RETURN(0);
|
||||
}
|
||||
|
||||
if (!(hton->flags & HTON_HIDDEN))
|
||||
{
|
||||
LEX_STRING *name= plugin_name(plugin);
|
||||
@ -3950,10 +3972,13 @@ static my_bool iter_schema_engines(THD *thd, plugin_ref plugin,
|
||||
strlen(plugin_decl(plugin)->descr), scs);
|
||||
tmp= &yesno[test(hton->commit)];
|
||||
table->field[3]->store(tmp->str, tmp->length, scs);
|
||||
table->field[3]->set_notnull();
|
||||
tmp= &yesno[test(hton->prepare)];
|
||||
table->field[4]->store(tmp->str, tmp->length, scs);
|
||||
table->field[4]->set_notnull();
|
||||
tmp= &yesno[test(hton->savepoint_set)];
|
||||
table->field[5]->store(tmp->str, tmp->length, scs);
|
||||
table->field[5]->set_notnull();
|
||||
|
||||
if (schema_table_store_record(thd, table))
|
||||
DBUG_RETURN(1);
|
||||
@ -3964,8 +3989,12 @@ static my_bool iter_schema_engines(THD *thd, plugin_ref plugin,
|
||||
|
||||
int fill_schema_engines(THD *thd, TABLE_LIST *tables, COND *cond)
|
||||
{
|
||||
return plugin_foreach(thd, iter_schema_engines,
|
||||
MYSQL_STORAGE_ENGINE_PLUGIN, tables->table);
|
||||
DBUG_ENTER("fill_schema_engines");
|
||||
if (plugin_foreach_with_mask(thd, iter_schema_engines,
|
||||
MYSQL_STORAGE_ENGINE_PLUGIN,
|
||||
~PLUGIN_IS_FREED, tables->table))
|
||||
DBUG_RETURN(1);
|
||||
DBUG_RETURN(0);
|
||||
}
|
||||
|
||||
|
||||
@ -6162,9 +6191,9 @@ ST_FIELD_INFO engines_fields_info[]=
|
||||
{"ENGINE", 64, MYSQL_TYPE_STRING, 0, 0, "Engine", SKIP_OPEN_TABLE},
|
||||
{"SUPPORT", 8, MYSQL_TYPE_STRING, 0, 0, "Support", SKIP_OPEN_TABLE},
|
||||
{"COMMENT", 80, MYSQL_TYPE_STRING, 0, 0, "Comment", SKIP_OPEN_TABLE},
|
||||
{"TRANSACTIONS", 3, MYSQL_TYPE_STRING, 0, 0, "Transactions", SKIP_OPEN_TABLE},
|
||||
{"XA", 3, MYSQL_TYPE_STRING, 0, 0, "XA", SKIP_OPEN_TABLE},
|
||||
{"SAVEPOINTS", 3 ,MYSQL_TYPE_STRING, 0, 0, "Savepoints", SKIP_OPEN_TABLE},
|
||||
{"TRANSACTIONS", 3, MYSQL_TYPE_STRING, 0, 1, "Transactions", SKIP_OPEN_TABLE},
|
||||
{"XA", 3, MYSQL_TYPE_STRING, 0, 1, "XA", SKIP_OPEN_TABLE},
|
||||
{"SAVEPOINTS", 3 ,MYSQL_TYPE_STRING, 0, 1, "Savepoints", SKIP_OPEN_TABLE},
|
||||
{0, 0, MYSQL_TYPE_STRING, 0, 0, 0, SKIP_OPEN_TABLE}
|
||||
};
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user