From 581996393a99177cfd4f47806dc0c90be6f4e1ee Mon Sep 17 00:00:00 2001 From: "serg@serg.mylan" <> Date: Sat, 20 Mar 2004 14:36:00 +0100 Subject: [PATCH 1/4] select @@smth=@@sys_str_var crash fixed --- mysql-test/r/variables.result | 2 ++ mysql-test/t/ctype_utf8.test | 4 ++-- mysql-test/t/variables.test | 3 +++ sql/mysqld.cc | 4 ++++ sql/set_var.cc | 16 +++++++++------- sql/set_var.h | 5 +++-- 6 files changed, 23 insertions(+), 11 deletions(-) diff --git a/mysql-test/r/variables.result b/mysql-test/r/variables.result index 0e1babf258b..39d83f8b815 100644 --- a/mysql-test/r/variables.result +++ b/mysql-test/r/variables.result @@ -382,6 +382,8 @@ select 1; 1 select @@session.key_buffer_size; ERROR HY000: Variable 'key_buffer_size' is a GLOBAL variable +set ft_boolean_syntax = @@init_connect; +ERROR HY000: Variable 'ft_boolean_syntax' is a GLOBAL variable and should be set with SET GLOBAL select @@global.max_user_connections,@@local.max_join_size; @@global.max_user_connections @@session.max_join_size 100 200 diff --git a/mysql-test/t/ctype_utf8.test b/mysql-test/t/ctype_utf8.test index 08a84df3ff7..964ac84fbbe 100644 --- a/mysql-test/t/ctype_utf8.test +++ b/mysql-test/t/ctype_utf8.test @@ -54,7 +54,7 @@ select * from t1; drop table t1; # -# Bug #2366 Wrong utf8 behaviour when data is trancated +# Bug #2366 Wrong utf8 behaviour when data is truncated # set names koi8r; create table t1 (s1 char(1) character set utf8); @@ -101,7 +101,7 @@ drop table t1; # # Bug 2699 -# UTF8 breaks primary keys for cols > 85 characters +# UTF8 breaks primary keys for cols > 333 characters # --error 1071 create table t1 (a text character set utf8, primary key(a(360))); diff --git a/mysql-test/t/variables.test b/mysql-test/t/variables.test index 1ad171f94f6..c3f7c613005 100644 --- a/mysql-test/t/variables.test +++ b/mysql-test/t/variables.test @@ -270,6 +270,9 @@ select 1; --error 1238 select @@session.key_buffer_size; +--error 1229 +set ft_boolean_syntax = @@init_connect; + # # swap # diff --git a/sql/mysqld.cc b/sql/mysqld.cc index fc50b8c5c6e..525f3db3aff 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -2189,10 +2189,14 @@ static int init_common_variables(const char *conf_file_name, int argc, sys_init_connect.value_length= 0; if ((sys_init_connect.value= opt_init_connect)) sys_init_connect.value_length= strlen(opt_init_connect); + else + sys_init_connect.value=my_strdup("",MYF(0)); sys_init_slave.value_length= 0; if ((sys_init_slave.value= opt_init_slave)) sys_init_slave.value_length= strlen(opt_init_slave); + else + sys_init_slave.value=my_strdup("",MYF(0)); if (use_temp_pool && bitmap_init(&temp_pool,0,1024,1)) return 1; diff --git a/sql/set_var.cc b/sql/set_var.cc index 576e33002da..9ce00f78465 100644 --- a/sql/set_var.cc +++ b/sql/set_var.cc @@ -121,7 +121,8 @@ sys_var_character_set_server sys_character_set_server("character_set_server"); sys_var_str sys_charset_system("character_set_system", sys_check_charset, sys_update_charset, - sys_set_default_charset); + sys_set_default_charset, + (char *)my_charset_utf8_general_ci.name); sys_var_character_set_database sys_character_set_database("character_set_database"); sys_var_character_set_client sys_character_set_client("character_set_client"); sys_var_character_set_connection sys_character_set_connection("character_set_connection"); @@ -150,13 +151,14 @@ sys_var_long_ptr sys_flush_time("flush_time", &flush_time); sys_var_str sys_ft_boolean_syntax("ft_boolean_syntax", sys_check_ftb_syntax, sys_update_ftb_syntax, - sys_default_ftb_syntax); + sys_default_ftb_syntax, + ft_boolean_syntax); sys_var_str sys_init_connect("init_connect", 0, sys_update_init_connect, - sys_default_init_connect); + sys_default_init_connect,0); sys_var_str sys_init_slave("init_slave", 0, sys_update_init_slave, - sys_default_init_slave); + sys_default_init_slave,0); sys_var_thd_ulong sys_interactive_timeout("interactive_timeout", &SV::net_interactive_timeout); sys_var_thd_ulong sys_join_buffer_size("join_buffer_size", @@ -667,11 +669,11 @@ struct show_var_st init_vars[]= { {sys_join_buffer_size.name, (char*) &sys_join_buffer_size, SHOW_SYS}, {sys_key_buffer_size.name, (char*) &sys_key_buffer_size, SHOW_SYS}, {sys_key_cache_age_threshold.name, (char*) &sys_key_cache_age_threshold, - SHOW_SYS}, + SHOW_SYS}, {sys_key_cache_block_size.name, (char*) &sys_key_cache_block_size, - SHOW_SYS}, + SHOW_SYS}, {sys_key_cache_division_limit.name, (char*) &sys_key_cache_division_limit, - SHOW_SYS}, + SHOW_SYS}, {"language", language, SHOW_CHAR}, {"large_files_support", (char*) &opt_large_files, SHOW_BOOL}, {sys_license.name, (char*) &sys_license, SHOW_SYS}, diff --git a/sql/set_var.h b/sql/set_var.h index ac20742da8c..8f21c5a729f 100644 --- a/sql/set_var.h +++ b/sql/set_var.h @@ -139,8 +139,9 @@ public: sys_var_str(const char *name_arg, sys_check_func check_func_arg, sys_update_func update_func_arg, - sys_set_default_func set_default_func_arg) - :sys_var(name_arg), check_func(check_func_arg), + sys_set_default_func set_default_func_arg, + char *value_arg) + :sys_var(name_arg), check_func(check_func_arg), value(value_arg), update_func(update_func_arg),set_default_func(set_default_func_arg) {} bool check(THD *thd, set_var *var); From d1f1bbefab7186bfa2e83a696f3651ab2c08d718 Mon Sep 17 00:00:00 2001 From: "serg@serg.mylan" <> Date: Sat, 20 Mar 2004 15:56:20 +0100 Subject: [PATCH 2/4] sys_var_str.value is never NULL --- sql/slave.cc | 2 +- sql/sql_parse.cc | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/sql/slave.cc b/sql/slave.cc index 37afe456ce3..5493d422d37 100644 --- a/sql/slave.cc +++ b/sql/slave.cc @@ -3188,7 +3188,7 @@ log '%s' at position %s, relay log '%s' position: %s", RPL_LOG_NAME, llstr(rli->group_relay_log_pos,llbuff1)); /* execute init_slave variable */ - if (sys_init_slave.value) + if (sys_init_slave.value_length) { execute_init_command(thd, &sys_init_slave, &LOCK_sys_init_slave); if (thd->query_error) diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index 7e6d0ca2434..761c55bb44d 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -1000,7 +1000,7 @@ pthread_handler_decl(handle_one_connection,arg) net->compress=1; // Use compression thd->version= refresh_version; - if (sys_init_connect.value && !(thd->master_access & SUPER_ACL)) + if (sys_init_connect.value_length && !(thd->master_access & SUPER_ACL)) { execute_init_command(thd, &sys_init_connect, &LOCK_sys_init_connect); if (thd->query_error) From 61a365e696090f10b46515ff32bf7e293491a99d Mon Sep 17 00:00:00 2001 From: "serg@serg.mylan" <> Date: Sat, 20 Mar 2004 17:08:01 +0100 Subject: [PATCH 3/4] more sys_var_str fixes --- mysql-test/r/variables.result | 9 +++++++++ mysql-test/t/variables.test | 9 +++++++++ sql/set_var.cc | 14 +++++--------- 3 files changed, 23 insertions(+), 9 deletions(-) diff --git a/mysql-test/r/variables.result b/mysql-test/r/variables.result index 39d83f8b815..8934cd705b6 100644 --- a/mysql-test/r/variables.result +++ b/mysql-test/r/variables.result @@ -384,6 +384,15 @@ select @@session.key_buffer_size; ERROR HY000: Variable 'key_buffer_size' is a GLOBAL variable set ft_boolean_syntax = @@init_connect; ERROR HY000: Variable 'ft_boolean_syntax' is a GLOBAL variable and should be set with SET GLOBAL +set global ft_boolean_syntax = @@init_connect; +ERROR 42000: Variable 'ft_boolean_syntax' can't be set to the value of '' +set init_connect = NULL; +ERROR HY000: Variable 'init_connect' is a GLOBAL variable and should be set with SET GLOBAL +set global init_connect = NULL; +set ft_boolean_syntax = @@init_connect; +ERROR HY000: Variable 'ft_boolean_syntax' is a GLOBAL variable and should be set with SET GLOBAL +set global ft_boolean_syntax = @@init_connect; +ERROR 42000: Variable 'ft_boolean_syntax' can't be set to the value of '' select @@global.max_user_connections,@@local.max_join_size; @@global.max_user_connections @@session.max_join_size 100 200 diff --git a/mysql-test/t/variables.test b/mysql-test/t/variables.test index c3f7c613005..26eacb86164 100644 --- a/mysql-test/t/variables.test +++ b/mysql-test/t/variables.test @@ -272,6 +272,15 @@ select @@session.key_buffer_size; --error 1229 set ft_boolean_syntax = @@init_connect; +--error 1231 +set global ft_boolean_syntax = @@init_connect; +--error 1229 +set init_connect = NULL; +set global init_connect = NULL; +--error 1229 +set ft_boolean_syntax = @@init_connect; +--error 1231 +set global ft_boolean_syntax = @@init_connect; # # swap diff --git a/sql/set_var.cc b/sql/set_var.cc index 332a3bdd3d0..8fe15b700f9 100644 --- a/sql/set_var.cc +++ b/sql/set_var.cc @@ -835,15 +835,11 @@ bool sys_var_str::check(THD *thd, set_var *var) bool update_sys_var_str(sys_var_str *var_str, rw_lock_t *var_mutex, set_var *var) { - char *res= 0, *old_value; - uint new_length= 0; - /* If the string is "", delete old init command */ - if (var && (new_length= var->value->str_value.length())) - { - if (!(res= my_strdup_with_length((byte*) var->value->str_value.ptr(), - new_length, MYF(0)))) - return 1; - } + char *res= 0, *old_value=(char *)(var ? var->value->str_value.ptr() : 0); + uint new_length= (var ? var->value->str_value.length() : 0); + if (!old_value) old_value=""; + if (!(res= my_strdup_with_length(old_value, new_length, MYF(0)))) + return 1; /* Replace the old value in such a way that the any thread using the value will work. From f122e751083001ca374aa7a39426401071475550 Mon Sep 17 00:00:00 2001 From: "paul@ice.snake.net" <> Date: Sat, 20 Mar 2004 18:37:15 -0600 Subject: [PATCH 4/4] Be picky. --- support-files/my-innodb-heavy-4G.cnf.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/support-files/my-innodb-heavy-4G.cnf.sh b/support-files/my-innodb-heavy-4G.cnf.sh index 9c772269749..54df6a8bfe6 100644 --- a/support-files/my-innodb-heavy-4G.cnf.sh +++ b/support-files/my-innodb-heavy-4G.cnf.sh @@ -71,7 +71,7 @@ max_connections = 100 # the host will be blocked from connecting to the MySQL server until # "FLUSH HOSTS" has been run or the server was restarted. Invalid # passwords and other errors during the connect phase result in -# increasing this value. See the "Aborted_Connects" status variable for +# increasing this value. See the "Aborted_connects" status variable for # global counter. max_connect_errors = 10 @@ -111,14 +111,14 @@ max_heap_table_size = 64M # Sort buffer is used to perform sorts for some ORDER BY and GROUP BY # queries. If sorted data does not fit into the sort buffer, a disk -# based merge sort is used instead - See "sort_merge_passes". Allocated -# per thread if sort is needed. +# based merge sort is used instead - See the "Sort_merge_passes" +# status variable. Allocated per thread if sort is needed. sort_buffer_size = 8M # This buffer is used for the optimization of full JOINs (JOINs without # indexes). Such JOINs are very bad for performance in most cases # anyway, but setting this variable to a large value reduces the -# performance impact. See the "select_full_join" status variable for a +# performance impact. See the "Select_full_join" status variable for a # count of full JOINs. Allocated per thread if full join is found join_buffer_size = 8M