diff options
author | unknown <dkatz@damien-katzs-computer.local> | 2007-12-11 17:30:42 -0500 |
---|---|---|
committer | unknown <dkatz@damien-katzs-computer.local> | 2007-12-11 17:30:42 -0500 |
commit | 2db4748bf2675a1d0b33039c425175f4e2b39940 (patch) | |
tree | 7aa64364ea7cd07ed83c6b43e43add03381408bc | |
parent | ede6f50a6a92aef2bf1105d4da98796ca309c3bd (diff) | |
download | mariadb-git-2db4748bf2675a1d0b33039c425175f4e2b39940.tar.gz |
Bug #30651 Problems with thread_handling system variable
Changed thread_handling variable to a global only, read only variable, as it is currently used.
-rw-r--r-- | mysql-test/r/no-threads.result | 4 | ||||
-rw-r--r-- | mysql-test/t/no-threads.test | 10 | ||||
-rw-r--r-- | sql/set_var.cc | 9 | ||||
-rw-r--r-- | sql/set_var.h | 18 |
4 files changed, 40 insertions, 1 deletions
diff --git a/mysql-test/r/no-threads.result b/mysql-test/r/no-threads.result index aefecd0f7bc..9bc2dad6e2a 100644 --- a/mysql-test/r/no-threads.result +++ b/mysql-test/r/no-threads.result @@ -7,3 +7,7 @@ select 1+2; SHOW GLOBAL VARIABLES LIKE 'thread_handling'; Variable_name Value thread_handling no-threads +select @@session.thread_handling; +ERROR HY000: Variable 'thread_handling' is a GLOBAL variable +set GLOBAL thread_handling='one-thread'; +ERROR HY000: Variable 'thread_handling' is a read only variable diff --git a/mysql-test/t/no-threads.test b/mysql-test/t/no-threads.test index 31ea6406ee9..fd8365e5678 100644 --- a/mysql-test/t/no-threads.test +++ b/mysql-test/t/no-threads.test @@ -4,3 +4,13 @@ select 1+1; select 1+2; SHOW GLOBAL VARIABLES LIKE 'thread_handling'; + +# +# Bug #30651 Problems with thread_handling system variable +# + +--error ER_INCORRECT_GLOBAL_LOCAL_VAR +select @@session.thread_handling; + +--error ER_INCORRECT_GLOBAL_LOCAL_VAR +set GLOBAL thread_handling='one-thread'; diff --git a/sql/set_var.cc b/sql/set_var.cc index d408b2de64e..31b5ad6331f 100644 --- a/sql/set_var.cc +++ b/sql/set_var.cc @@ -384,7 +384,7 @@ static sys_var_thd_ulong sys_trans_alloc_block_size(&vars, "transaction_alloc_bl static sys_var_thd_ulong sys_trans_prealloc_size(&vars, "transaction_prealloc_size", &SV::trans_prealloc_size, 0, fix_trans_mem_root); -sys_var_thd_enum sys_thread_handling(&vars, "thread_handling", +sys_var_enum_const sys_thread_handling(&vars, "thread_handling", &SV::thread_handling, &thread_handling_typelib, NULL); @@ -1183,6 +1183,13 @@ uchar *sys_var_enum::value_ptr(THD *thd, enum_var_type type, LEX_STRING *base) return (uchar*) enum_names->type_names[*value]; } + +uchar *sys_var_enum_const::value_ptr(THD *thd, enum_var_type type, + LEX_STRING *base) +{ + return (uchar*) enum_names->type_names[global_system_variables.*offset]; +} + bool sys_var_thd_ulong::check(THD *thd, set_var *var) { return (sys_var_thd::check(thd, var) || diff --git a/sql/set_var.h b/sql/set_var.h index eb2c893c89e..f25da5dd8be 100644 --- a/sql/set_var.h +++ b/sql/set_var.h @@ -305,6 +305,24 @@ public: }; +class sys_var_enum_const :public sys_var +{ + ulong SV::*offset; + TYPELIB *enum_names; +public: + sys_var_enum_const(sys_var_chain *chain, const char *name_arg, ulong SV::*offset_arg, + TYPELIB *typelib, sys_after_update_func func) + :sys_var(name_arg,func), offset(offset_arg), enum_names(typelib) + { chain_sys_var(chain); } + bool check(THD *thd, set_var *var) { return 1; } + bool update(THD *thd, set_var *var) { return 1; } + SHOW_TYPE show_type() { return SHOW_CHAR; } + bool check_update_type(Item_result type) { return 1; } + bool is_readonly() const { return 1; } + uchar *value_ptr(THD *thd, enum_var_type type, LEX_STRING *base); +}; + + class sys_var_thd :public sys_var { public: |