From b7ea56349189489e0276ad78a27214b8f76193ef Mon Sep 17 00:00:00 2001 From: Alexander Barkov Date: Tue, 3 Apr 2018 20:06:57 +0400 Subject: Cleanup in the system variable parsing code - Adding "return true" into LEX::set_system_variable() and LEX::set_default_system_variable() after my_error(). This makes the parser exit on error immediately. Previously, the error was caught only in mysql_parser(), a few lines after the parse_sql() call. - Fixing "--error 1272" to "--error ER_VARIABLE_IS_NOT_STRUCT" in tests --- mysql-test/main/key_cache.test | 2 +- sql/sql_lex.cc | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/mysql-test/main/key_cache.test b/mysql-test/main/key_cache.test index d28e7c23a4c..fb6ae497e74 100644 --- a/mysql-test/main/key_cache.test +++ b/mysql-test/main/key_cache.test @@ -44,7 +44,7 @@ SET @@global.key_buffer_size=@save_key_buffer_size; --error 1064 SELECT @@default.key_buffer_size; ---error 1272 +--error ER_VARIABLE_IS_NOT_STRUCT SELECT @@skr.storage_engine="test"; select @@keycache1.key_cache_block_size; diff --git a/sql/sql_lex.cc b/sql/sql_lex.cc index ee434e4ffae..c2f256c73b5 100644 --- a/sql/sql_lex.cc +++ b/sql/sql_lex.cc @@ -7011,7 +7011,10 @@ bool LEX::set_default_system_variable(enum_var_type var_type, if (!var) return true; if (!var->is_struct()) + { my_error(ER_VARIABLE_IS_NOT_STRUCT, MYF(0), name->str); + return true; + } return set_system_variable(var_type, var, &default_base_name, val); } @@ -7040,7 +7043,10 @@ bool LEX::set_system_variable(THD *thd, enum_var_type var_type, return true; } if (!tmp->is_struct()) + { my_error(ER_VARIABLE_IS_NOT_STRUCT, MYF(0), name2->str); + return true; + } return set_system_variable(var_type, tmp, name1, val); } -- cgit v1.2.1