@@ -1222,6 +1222,60 @@ static bool check_not_null(sys_var *self, THD *thd, set_var *var)
12221222{
12231223 return var->value && var->value->is_null();
12241224}
1225+
1226+
1227+ /**
1228+ Check storage engine is not empty and log warning.
1229+
1230+ Checks if default_storage_engine or default_tmp_storage_engine is set
1231+ empty and return true. This method also logs warning if the
1232+ storage engine set is a disabled storage engine specified in
1233+ disabled_storage_engines.
1234+
1235+ @param self pointer to system variable object.
1236+ @param thd Connection handle.
1237+ @param var pointer to set variable object.
1238+
1239+ @return true if the set variable is empty.
1240+ false if the set variable is not empty.
1241+ */
1242+ static bool check_storage_engine(sys_var *self, THD *thd, set_var *var)
1243+ {
1244+ if (check_not_null(self,thd,var))
1245+ return true;
1246+
1247+ if (!opt_bootstrap && !opt_noacl)
1248+ {
1249+ char buff[STRING_BUFFER_USUAL_SIZE];
1250+ String str(buff,sizeof(buff), system_charset_info), *res;
1251+ LEX_STRING se_name;
1252+
1253+ if (var->value)
1254+ {
1255+ res= var->value->val_str(&str);
1256+ lex_string_set(&se_name, res->ptr());
1257+ }
1258+ else
1259+ {
1260+ // Use the default value defined by sys_var.
1261+ lex_string_set(&se_name,
1262+ reinterpret_cast<const char*>(
1263+ dynamic_cast<Sys_var_plugin*>(self)->global_value_ptr(thd, NULL)));
1264+ }
1265+
1266+ plugin_ref plugin;
1267+ if ((plugin= ha_resolve_by_name(NULL, &se_name, FALSE)))
1268+ {
1269+ handlerton *hton= plugin_data<handlerton*>(plugin);
1270+ if (ha_is_storage_engine_disabled(hton))
1271+ sql_print_warning("%s is set to a disabled storage engine %s.",
1272+ self->name.str, se_name.str);
1273+ plugin_unlock(NULL, plugin);
1274+ }
1275+ }
1276+ return false;
1277+ }
1278+
12251279static bool check_charset(sys_var *self, THD *thd, set_var *var)
12261280{
12271281 if (!var->value)
@@ -3959,7 +4013,7 @@ static Sys_var_plugin Sys_default_storage_engine(
39594013 "default_storage_engine", "The default storage engine for new tables",
39604014 SESSION_VAR(table_plugin), NO_CMD_LINE,
39614015 MYSQL_STORAGE_ENGINE_PLUGIN, DEFAULT(&default_storage_engine),
3962- NO_MUTEX_GUARD, NOT_IN_BINLOG, ON_CHECK(check_not_null ));
4016+ NO_MUTEX_GUARD, NOT_IN_BINLOG, ON_CHECK(check_storage_engine ));
39634017
39644018const char *internal_tmp_disk_storage_engine_names[] = { "MYISAM", "INNODB", 0};
39654019static Sys_var_enum Sys_internal_tmp_disk_storage_engine(
@@ -3972,7 +4026,7 @@ static Sys_var_plugin Sys_default_tmp_storage_engine(
39724026 "default_tmp_storage_engine", "The default storage engine for new explict temporary tables",
39734027 SESSION_VAR(temp_table_plugin), NO_CMD_LINE,
39744028 MYSQL_STORAGE_ENGINE_PLUGIN, DEFAULT(&default_tmp_storage_engine),
3975- NO_MUTEX_GUARD, NOT_IN_BINLOG, ON_CHECK(check_not_null ));
4029+ NO_MUTEX_GUARD, NOT_IN_BINLOG, ON_CHECK(check_storage_engine ));
39764030
39774031#if defined(ENABLED_DEBUG_SYNC)
39784032/*
0 commit comments