From 17343b4c373ffe45d4f3e8b8ffaa031fff5e63ba Mon Sep 17 00:00:00 2001 From: Alexey Botchkov Date: Mon, 16 Jun 2008 08:04:45 +0500 Subject: [PATCH 01/12] Bug #35999 When using the embedded server a wrong message comes. HAVE_REPLICATION was on for the embedded server as the #define was in wrong place. include/my_global.h: Bug #35999 When using the embedded server a wrong message comes. #define HAVE_REPLICATION moved after the 'include config.h' so it won't be enabled with the embedded server. --- include/my_global.h | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/include/my_global.h b/include/my_global.h index 6cfc4d67305..4feed96e7d6 100644 --- a/include/my_global.h +++ b/include/my_global.h @@ -18,11 +18,6 @@ #ifndef _global_h #define _global_h -#ifndef EMBEDDED_LIBRARY -#define HAVE_REPLICATION -#define HAVE_EXTERNAL_CLIENT -#endif - /* InnoDB depends on some MySQL internals which other plugins should not need. This is because of InnoDB's foreign key support, "safe" binlog @@ -101,6 +96,11 @@ #endif #endif /* !EMBEDDED_LIBRARY */ +#ifndef EMBEDDED_LIBRARY +#define HAVE_REPLICATION +#define HAVE_EXTERNAL_CLIENT +#endif + /* Some defines to avoid ifdefs in the code */ #ifndef NETWARE_YIELD #define NETWARE_YIELD From 4d3f05b09b4fa5e4cf7c77c2222fd6513e772f36 Mon Sep 17 00:00:00 2001 From: Alexey Botchkov Date: Wed, 19 Nov 2008 13:57:23 +0400 Subject: [PATCH 02/12] Bug#38293 Libmysqld crash in mysql_library_init if language file missing That's a Win-specific error. When we create libmysqld.dll we have many libraries like mysys, dbug, strings, etc linked into that dll, so the application built upon this library shouldn't link these libraries to itself, rather use those inside the dll. Fixed by redirecting calls into the libmysqld.dll per-file comments: dbug/dbug.c Bug#38293 Libmysqld crash in mysql_library_init if language file missing fake _db_something definitions added include/my_dbug.h Bug#38293 Libmysqld crash in mysql_library_init if language file missing fake _db_something declarations added libmysqld/examples/CMakeLists.txt Bug#38293 Libmysqld crash in mysql_library_init if language file missing superfluous libraries removed from linking libmysqld/libmysqld.def Bug#38293 Libmysqld crash in mysql_library_init if language file missing set of mysys functions added to the export section --- dbug/dbug.c | 9 +++++ include/my_dbug.h | 16 +++++++++ libmysqld/examples/CMakeLists.txt | 6 ++-- libmysqld/libmysqld.def | 60 +++++++++++++++++++++++++++++++ mysys/mf_tempdir.c | 2 ++ mysys/my_getopt.c | 19 ++++++---- sql/mysqld.cc | 31 ++++++++++------ 7 files changed, 122 insertions(+), 21 deletions(-) diff --git a/dbug/dbug.c b/dbug/dbug.c index 1cebbbcf72a..bbd1abb9598 100644 --- a/dbug/dbug.c +++ b/dbug/dbug.c @@ -2407,4 +2407,13 @@ int i_am_a_dummy_function() { return 0; } +#ifdef __WIN__ +char _db_doprnt_; +char _db_enter_; +char _db_pargs_; +char _db_process_; +char _db_push_; +char _db_return_; +#endif /*__WIN__*/ + #endif diff --git a/include/my_dbug.h b/include/my_dbug.h index a77e439b5db..fa7941faf1c 100644 --- a/include/my_dbug.h +++ b/include/my_dbug.h @@ -108,6 +108,22 @@ extern FILE *_db_fp_(void); #define DBUG_EXPLAIN(buf,len) #define DBUG_EXPLAIN_INITIAL(buf,len) #define IF_DBUG(A) + +#ifdef __WIN__ +/* + On windows all the dll export has to be declared in the *.def file + so as we export these symbols in DEBUG mode we have to export + these in the RELEASE mode also. So below are the dummy symbols + for the RELEASE export +*/ +extern char _db_doprnt_; +extern char _db_enter_; +extern char _db_pargs_; +extern char _db_process_; +extern char _db_push_; +extern char _db_return_; +#endif /*__WIN__*/ + #endif #ifdef __cplusplus } diff --git a/libmysqld/examples/CMakeLists.txt b/libmysqld/examples/CMakeLists.txt index a07d089c757..ca383d59b24 100644 --- a/libmysqld/examples/CMakeLists.txt +++ b/libmysqld/examples/CMakeLists.txt @@ -29,13 +29,13 @@ ADD_DEFINITIONS(-DEMBEDDED_LIBRARY) ADD_EXECUTABLE(mysql_embedded ../../client/completion_hash.cc ../../client/mysql.cc ../../client/readline.cc ../../client/sql_string.cc) -TARGET_LINK_LIBRARIES(mysql_embedded mysys yassl taocrypt zlib debug dbug regex strings wsock32) +TARGET_LINK_LIBRARIES(mysql_embedded debug wsock32) ADD_DEPENDENCIES(mysql_embedded libmysqld) ADD_EXECUTABLE(mysqltest_embedded ../../client/mysqltest.c) -TARGET_LINK_LIBRARIES(mysqltest_embedded mysys yassl taocrypt zlib debug dbug regex strings wsock32) +TARGET_LINK_LIBRARIES(mysqltest_embedded debug wsock32) ADD_DEPENDENCIES(mysqltest_embedded libmysqld) ADD_EXECUTABLE(mysql_client_test_embedded ../../tests/mysql_client_test.c) -TARGET_LINK_LIBRARIES(mysql_client_test_embedded debug dbug mysys yassl taocrypt zlib strings wsock32) +TARGET_LINK_LIBRARIES(mysql_client_test_embedded debug wsock32) ADD_DEPENDENCIES(mysql_client_test_embedded libmysqld) diff --git a/libmysqld/libmysqld.def b/libmysqld/libmysqld.def index 2aa75c0b23c..431c0efdaa0 100644 --- a/libmysqld/libmysqld.def +++ b/libmysqld/libmysqld.def @@ -2,6 +2,66 @@ LIBRARY LIBMYSQLD DESCRIPTION 'MySQL 5.1 Embedded Server Library' VERSION 5.1 EXPORTS + _db_process_ + _db_enter_ + _db_return_ + _db_push_ + _db_doprnt_ + _db_pargs_ + strnmov + get_charset + my_memmem + my_snprintf + pthread_exit + pthread_cond_signal + dynstr_append_mem + init_dynamic_string + dynstr_free + hash_free + my_vsnprintf + dynstr_append + my_close + my_open + dynstr_set + dynstr_append_os_quoted + my_delete + my_seek + my_write + create_temp_file + fn_format + dirname_part + my_hash_insert + hash_search + test_if_hard_path + my_copy + my_mkdir + my_sleep + my_strtod + pthread_cond_wait + my_strnncoll_simple + get_dynamic + my_regerror + init_dynamic_array2 + pthread_create + pthread_cond_init + my_regcomp + my_regexec + my_regex_end + my_regfree + longlong2str + my_set_exception_pointers + my_print_stacktrace + my_thread_stack_size + my_safe_print_str + my_stat + _hash_init + pthread_attr_setstacksize + pthread_attr_init + my_dirend + wild_compare + my_dir + my_micro_time + find_type_or_exit _dig_vec_upper _dig_vec_lower bmove_upp diff --git a/mysys/mf_tempdir.c b/mysys/mf_tempdir.c index b2c18c74347..d6492c90965 100644 --- a/mysys/mf_tempdir.c +++ b/mysys/mf_tempdir.c @@ -85,6 +85,8 @@ char *my_tmpdir(MY_TMPDIR *tmpdir) void free_tmpdir(MY_TMPDIR *tmpdir) { uint i; + if (!tmpdir->full_list.elements) + return; for (i=0; i<=tmpdir->max; i++) my_free(tmpdir->list[i], MYF(0)); delete_dynamic(&tmpdir->full_list); diff --git a/mysys/my_getopt.c b/mysys/my_getopt.c index 6a7ee748930..0f8055860d4 100644 --- a/mysys/my_getopt.c +++ b/mysys/my_getopt.c @@ -397,9 +397,10 @@ invalid value '%s'", my_progname, optp->name, optend); continue; } - get_one_option(optp->id, optp, - *((my_bool*) value) ? - (char*) "1" : disabled_my_option); + if (get_one_option(optp->id, optp, + *((my_bool*) value) ? + (char*) "1" : disabled_my_option)) + return EXIT_ARGUMENT_INVALID; continue; } argument= optend; @@ -457,7 +458,8 @@ invalid value '%s'", optp->arg_type == NO_ARG) { *((my_bool*) optp->value)= (my_bool) 1; - get_one_option(optp->id, optp, argument); + if (get_one_option(optp->id, optp, argument)) + return EXIT_UNSPECIFIED_ERROR; continue; } else if (optp->arg_type == REQUIRED_ARG || @@ -476,7 +478,8 @@ invalid value '%s'", { if (optp->var_type == GET_BOOL) *((my_bool*) optp->value)= (my_bool) 1; - get_one_option(optp->id, optp, argument); + if (get_one_option(optp->id, optp, argument)) + return EXIT_UNSPECIFIED_ERROR; continue; } /* Check if there are more arguments after this one */ @@ -501,7 +504,8 @@ invalid value '%s'", my_progname, argument, optp->name); return error; } - get_one_option(optp->id, optp, argument); + if (get_one_option(optp->id, optp, argument)) + return EXIT_UNSPECIFIED_ERROR; break; } } @@ -524,7 +528,8 @@ invalid value '%s'", my_progname, argument, optp->name); return error; } - get_one_option(optp->id, optp, argument); + if (get_one_option(optp->id, optp, argument)) + return EXIT_UNSPECIFIED_ERROR; (*argc)--; /* option handled (short or long), decrease argument count */ } diff --git a/sql/mysqld.cc b/sql/mysqld.cc index a3b0123ee4a..99583ca8ea9 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -733,7 +733,7 @@ uint connection_count= 0; /* Function declarations */ pthread_handler_t signal_hand(void *arg); -static void mysql_init_variables(void); +static int mysql_init_variables(void); static void get_options(int *argc,char **argv); extern "C" my_bool mysqld_get_one_option(int, const struct my_option *, char *); static void set_server_version(void); @@ -3131,12 +3131,12 @@ static int init_common_variables(const char *conf_file_name, int argc, if (!rpl_filter || !binlog_filter) { sql_perror("Could not allocate replication and binlog filters"); - exit(1); + return 1; } - if (init_thread_environment()) + if (init_thread_environment() || + mysql_init_variables()) return 1; - mysql_init_variables(); #ifdef HAVE_TZNAME { @@ -3735,7 +3735,10 @@ version 5.0 and above. It is replaced by the binary log."); { /* as opt_bin_log==0, no need to free opt_bin_logname */ if (!(opt_bin_logname= my_strdup(opt_update_logname, MYF(MY_WME)))) - exit(EXIT_OUT_OF_MEMORY); + { + sql_print_error("Out of memory"); + return EXIT_OUT_OF_MEMORY; + } sql_print_error("The update log is no longer supported by MySQL in \ version 5.0 and above. It is replaced by the binary log. Now starting MySQL \ with --log-bin='%s' instead.",opt_bin_logname); @@ -7404,7 +7407,7 @@ To see what values a running MySQL server is using, type\n\ as these are initialized by my_getopt. */ -static void mysql_init_variables(void) +static int mysql_init_variables(void) { /* Things reset to zero */ opt_skip_slave_start= opt_reckless_slave = 0; @@ -7485,7 +7488,10 @@ static void mysql_init_variables(void) key_caches.empty(); if (!(dflt_key_cache= get_or_create_key_cache(default_key_cache_base.str, default_key_cache_base.length))) - exit(1); + { + sql_print_error("Cannot allocate the keycache"); + return 1; + } /* set key_cache_hash.default_value = dflt_key_cache */ multi_keycache_init(); @@ -7628,6 +7634,7 @@ static void mysql_init_variables(void) tmpenv = DEFAULT_MYSQL_HOME; (void) strmake(mysql_home, tmpenv, sizeof(mysql_home)-1); #endif + return 0; } @@ -7687,9 +7694,11 @@ mysqld_get_one_option(int optid, #endif break; #include +#ifndef EMBEDDED_LIBRARY case 'V': print_version(); exit(0); +#endif /*EMBEDDED_LIBRARY*/ case 'W': if (!argument) global_system_variables.log_warnings++; @@ -7914,14 +7923,14 @@ mysqld_get_one_option(int optid, if (gethostname(myhostname,sizeof(myhostname)) < 0) { sql_perror("Can't start server: cannot get my own hostname!"); - exit(1); + return 1; } ent=gethostbyname(myhostname); } if (!ent) { sql_perror("Can't start server: cannot resolve hostname!"); - exit(1); + return 1; } my_bind_addr = (ulong) ((in_addr*)ent->h_addr_list[0])->s_addr; } @@ -8118,8 +8127,8 @@ mysqld_get_one_option(int optid, case OPT_FT_BOOLEAN_SYNTAX: if (ft_boolean_check_syntax_string((uchar*) argument)) { - fprintf(stderr, "Invalid ft-boolean-syntax string: %s\n", argument); - exit(1); + sql_print_error("Invalid ft-boolean-syntax string: %s\n", argument); + return 1; } strmake(ft_boolean_syntax, argument, sizeof(ft_boolean_syntax)-1); break; From 36c4b37b16f5f44c97aae330856b742fa708b85f Mon Sep 17 00:00:00 2001 From: Alexey Botchkov Date: Wed, 19 Nov 2008 15:51:31 +0400 Subject: [PATCH 03/12] Bug#38293 Libmysqld crash in mysql_library_init if language file missing additional fix - the 'debug' keyword removed --- libmysqld/examples/CMakeLists.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/libmysqld/examples/CMakeLists.txt b/libmysqld/examples/CMakeLists.txt index ca383d59b24..137dd11d28e 100644 --- a/libmysqld/examples/CMakeLists.txt +++ b/libmysqld/examples/CMakeLists.txt @@ -29,13 +29,13 @@ ADD_DEFINITIONS(-DEMBEDDED_LIBRARY) ADD_EXECUTABLE(mysql_embedded ../../client/completion_hash.cc ../../client/mysql.cc ../../client/readline.cc ../../client/sql_string.cc) -TARGET_LINK_LIBRARIES(mysql_embedded debug wsock32) +TARGET_LINK_LIBRARIES(mysql_embedded wsock32) ADD_DEPENDENCIES(mysql_embedded libmysqld) ADD_EXECUTABLE(mysqltest_embedded ../../client/mysqltest.c) -TARGET_LINK_LIBRARIES(mysqltest_embedded debug wsock32) +TARGET_LINK_LIBRARIES(mysqltest_embedded wsock32) ADD_DEPENDENCIES(mysqltest_embedded libmysqld) ADD_EXECUTABLE(mysql_client_test_embedded ../../tests/mysql_client_test.c) -TARGET_LINK_LIBRARIES(mysql_client_test_embedded debug wsock32) +TARGET_LINK_LIBRARIES(mysql_client_test_embedded wsock32) ADD_DEPENDENCIES(mysql_client_test_embedded libmysqld) From 09ac30f679146ac874acfeaac7f790fe21946f6d Mon Sep 17 00:00:00 2001 From: Vladislav Vaintroub Date: Wed, 19 Nov 2008 16:02:38 +0100 Subject: [PATCH 04/12] Bug#39494 : key_buffer_size > 4GB does not work on 64 bit Windows Cache size is truncated via 32bit ulong in ha_init_key_cache() and ha_resize_key_cache() This change fixes the cast to size_t instead of ulong. This cast is safe, because key_buffer_size parameter is limited to SIZE_T_MAX --- sql/handler.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sql/handler.cc b/sql/handler.cc index 6d5c0c93f75..47c2ff40119 100644 --- a/sql/handler.cc +++ b/sql/handler.cc @@ -3627,7 +3627,7 @@ int ha_init_key_cache(const char *name, KEY_CACHE *key_cache) if (!key_cache->key_cache_inited) { pthread_mutex_lock(&LOCK_global_system_variables); - ulong tmp_buff_size= (ulong) key_cache->param_buff_size; + size_t tmp_buff_size= (size_t) key_cache->param_buff_size; uint tmp_block_size= (uint) key_cache->param_block_size; uint division_limit= key_cache->param_division_limit; uint age_threshold= key_cache->param_age_threshold; @@ -3651,7 +3651,7 @@ int ha_resize_key_cache(KEY_CACHE *key_cache) if (key_cache->key_cache_inited) { pthread_mutex_lock(&LOCK_global_system_variables); - long tmp_buff_size= (long) key_cache->param_buff_size; + size_t tmp_buff_size= (size_t) key_cache->param_buff_size; long tmp_block_size= (long) key_cache->param_block_size; uint division_limit= key_cache->param_division_limit; uint age_threshold= key_cache->param_age_threshold; From e5ae4e2392077508248637981d3276bae8a26e72 Mon Sep 17 00:00:00 2001 From: Staale Smedseng Date: Thu, 20 Nov 2008 08:51:48 +0100 Subject: [PATCH 05/12] A fix for Bug#22891 "session level max_allowed_packet can be set but is ignored". This patch makes @@session.max_allowed_packed and @@session.net_buffer_length read-only as suggested in the bug report. The user will have to use SET GLOBAL (and reconnect) to alter the session values of these variables. The error string ER_VARIABLE_IS_READONLY is introduced. Tests are modified accordingly. sql/set_var.cc: The class sys_var_thd_ulong_session_readonly is introduced as a specialization of sys_var_thd_ulong implementing a read-only session variable. The class overrides check() and check_default() to achieve the read-only property for the session part of the variable. sql/set_var.h: The class sys_var_thd_ulong_session_readonly is introduced as a specialization of sys_var_thd_ulong implementing a read-only session variable. The class overrides check() and check_default() to achieve the read-only property for the session part of the variable. sql/share/errmsg.txt: New error ER_VARIABLE_IS_READONLY. --- mysql-test/r/func_compress.result | 2 +- mysql-test/r/max_allowed_packet_basic.result | 53 +++++++------- mysql-test/r/max_allowed_packet_func.result | 19 ++---- mysql-test/r/net_buffer_length_basic.result | 72 ++------------------ mysql-test/r/packet.result | 12 +--- mysql-test/r/union.result | 8 +-- mysql-test/r/variables.result | 47 +++++-------- mysql-test/t/func_compress.test | 5 +- mysql-test/t/innodb_bug34300.test | 4 +- mysql-test/t/max_allowed_packet_basic.test | 27 ++++++-- mysql-test/t/max_allowed_packet_func.test | 19 ++---- mysql-test/t/net_buffer_length_basic.test | 49 ++++--------- mysql-test/t/packet.test | 24 +++---- mysql-test/t/union.test | 10 ++- mysql-test/t/variables.test | 22 +++--- sql/set_var.cc | 16 ++++- sql/set_var.h | 23 +++++++ sql/share/errmsg.txt | 3 + 18 files changed, 176 insertions(+), 239 deletions(-) diff --git a/mysql-test/r/func_compress.result b/mysql-test/r/func_compress.result index 715f319198c..def03deb351 100644 --- a/mysql-test/r/func_compress.result +++ b/mysql-test/r/func_compress.result @@ -68,7 +68,7 @@ Warnings: Error 1259 ZLIB: Input data corrupted Error 1256 Uncompressed data size too large; the maximum size is 1048576 (probably, length of uncompressed data was corrupted) drop table t1; -set @@max_allowed_packet=1048576*100; +set @@global.max_allowed_packet=1048576*100; select compress(repeat('aaaaaaaaaa', IF(XXX, 10, 10000000))) is null; compress(repeat('aaaaaaaaaa', IF(XXX, 10, 10000000))) is null 0 diff --git a/mysql-test/r/max_allowed_packet_basic.result b/mysql-test/r/max_allowed_packet_basic.result index 3940cc1b2f2..0745d5a36e1 100644 --- a/mysql-test/r/max_allowed_packet_basic.result +++ b/mysql-test/r/max_allowed_packet_basic.result @@ -2,10 +2,7 @@ SET @start_global_value = @@global.max_allowed_packet; SELECT @start_global_value; @start_global_value 1048576 -SET @start_session_value = @@session.max_allowed_packet; -SELECT @start_session_value; -@start_session_value -1048576 +SET @@global.max_allowed_packet = DEFAULT; '#--------------------FN_DYNVARS_070_01-------------------------#' SET @@global.max_allowed_packet = 1000; Warnings: @@ -15,7 +12,9 @@ SELECT @@global.max_allowed_packet; @@global.max_allowed_packet 1048576 SET @@session.max_allowed_packet = 20000; +ERROR HY000: SESSION variable 'max_allowed_packet' is read-only. Use SET GLOBAL to assign the value SET @@session.max_allowed_packet = DEFAULT; +ERROR 42000: Variable 'max_allowed_packet' doesn't have a default value SELECT @@session.max_allowed_packet; @@session.max_allowed_packet 1048576 @@ -24,10 +23,6 @@ SET @@global.max_allowed_packet = DEFAULT; SELECT @@global.max_allowed_packet = 1048576; @@global.max_allowed_packet = 1048576 1 -SET @@session.max_allowed_packet = DEFAULT; -SELECT @@session.max_allowed_packet = 1048576; -@@session.max_allowed_packet = 1048576 -1 '#--------------------FN_DYNVARS_070_03-------------------------#' SET @@global.max_allowed_packet = 1024; SELECT @@global.max_allowed_packet; @@ -48,25 +43,30 @@ SELECT @@global.max_allowed_packet; 1073740800 '#--------------------FN_DYNVARS_070_04-------------------------#' SET @@session.max_allowed_packet = 1024; +ERROR HY000: SESSION variable 'max_allowed_packet' is read-only. Use SET GLOBAL to assign the value SELECT @@session.max_allowed_packet; @@session.max_allowed_packet -1024 +1048576 SET @@session.max_allowed_packet = 1025; +ERROR HY000: SESSION variable 'max_allowed_packet' is read-only. Use SET GLOBAL to assign the value SELECT @@session.max_allowed_packet; @@session.max_allowed_packet -1024 +1048576 SET @@session.max_allowed_packet = 65535; +ERROR HY000: SESSION variable 'max_allowed_packet' is read-only. Use SET GLOBAL to assign the value SELECT @@session.max_allowed_packet; @@session.max_allowed_packet -64512 +1048576 SET @@session.max_allowed_packet = 1073741824; +ERROR HY000: SESSION variable 'max_allowed_packet' is read-only. Use SET GLOBAL to assign the value SELECT @@session.max_allowed_packet; @@session.max_allowed_packet -1073741824 +1048576 SET @@session.max_allowed_packet = 1073741823; +ERROR HY000: SESSION variable 'max_allowed_packet' is read-only. Use SET GLOBAL to assign the value SELECT @@session.max_allowed_packet; @@session.max_allowed_packet -1073740800 +1048576 '#------------------FN_DYNVARS_070_05-----------------------#' SET @@global.max_allowed_packet = 0; Warnings: @@ -103,37 +103,33 @@ SELECT @@global.max_allowed_packet; @@global.max_allowed_packet 1073741824 SET @@session.max_allowed_packet = 0; -Warnings: -Warning 1292 Truncated incorrect max_allowed_packet value: '0' +ERROR HY000: SESSION variable 'max_allowed_packet' is read-only. Use SET GLOBAL to assign the value SELECT @@session.max_allowed_packet; @@session.max_allowed_packet -1024 +1048576 SET @@session.max_allowed_packet = 1023; -Warnings: -Warning 1292 Truncated incorrect max_allowed_packet value: '1023' +ERROR HY000: SESSION variable 'max_allowed_packet' is read-only. Use SET GLOBAL to assign the value SELECT @@session.max_allowed_packet; @@session.max_allowed_packet -1024 +1048576 SET @@session.max_allowed_packet = -2; -Warnings: -Warning 1292 Truncated incorrect max_allowed_packet value: '0' +ERROR HY000: SESSION variable 'max_allowed_packet' is read-only. Use SET GLOBAL to assign the value SELECT @@session.max_allowed_packet; @@session.max_allowed_packet -1024 +1048576 SET @@session.max_allowed_packet = 65530.34.; ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '.' at line 1 SET @@session.max_allowed_packet = 10737418241; -Warnings: -Warning 1292 Truncated incorrect max_allowed_packet value: '10737418241' +ERROR HY000: SESSION variable 'max_allowed_packet' is read-only. Use SET GLOBAL to assign the value SELECT @@session.max_allowed_packet; @@session.max_allowed_packet -1073741824 +1048576 'Bug # 34837: Errors are not coming on assigning invalid values to variable'; SET @@session.max_allowed_packet = test; ERROR 42000: Incorrect argument type to variable 'max_allowed_packet' SELECT @@session.max_allowed_packet; @@session.max_allowed_packet -1073741824 +1048576 '#------------------FN_DYNVARS_070_06-----------------------#' SELECT @@global.max_allowed_packet = VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES @@ -166,6 +162,7 @@ SELECT @@max_allowed_packet = @@global.max_allowed_packet; 0 '#---------------------FN_DYNVARS_070_10----------------------#' SET @@max_allowed_packet = 100000; +ERROR HY000: SESSION variable 'max_allowed_packet' is read-only. Use SET GLOBAL to assign the value SELECT @@max_allowed_packet = @@local.max_allowed_packet; @@max_allowed_packet = @@local.max_allowed_packet 1 @@ -174,9 +171,10 @@ SELECT @@local.max_allowed_packet = @@session.max_allowed_packet; 1 '#---------------------FN_DYNVARS_070_11----------------------#' SET max_allowed_packet = 1024; +ERROR HY000: SESSION variable 'max_allowed_packet' is read-only. Use SET GLOBAL to assign the value SELECT @@max_allowed_packet; @@max_allowed_packet -1024 +1048576 SELECT local.max_allowed_packet; ERROR 42S02: Unknown table 'local' in field list SELECT session.max_allowed_packet; @@ -187,7 +185,6 @@ SET @@global.max_allowed_packet = @start_global_value; SELECT @@global.max_allowed_packet; @@global.max_allowed_packet 1048576 -SET @@session.max_allowed_packet = @start_session_value; SELECT @@session.max_allowed_packet; @@session.max_allowed_packet 1048576 diff --git a/mysql-test/r/max_allowed_packet_func.result b/mysql-test/r/max_allowed_packet_func.result index 9e44bcfb7b1..43da24fa280 100644 --- a/mysql-test/r/max_allowed_packet_func.result +++ b/mysql-test/r/max_allowed_packet_func.result @@ -10,24 +10,15 @@ name BLOB '#--------------------FN_DYNVARS_070_01-------------------------#' ## Setting value of max_allowed packet and net_buffer_length to 1024 ## SET @@session.max_allowed_packet = 1024; -SET @@session.net_buffer_length = 1024; +ERROR HY000: SESSION variable 'max_allowed_packet' is read-only. Use SET GLOBAL to assign the value SELECT @@session.max_allowed_packet; @@session.max_allowed_packet -1024 +1048576 +SET @@session.net_buffer_length = 1024; +ERROR HY000: SESSION variable 'net_buffer_length' is read-only. Use SET GLOBAL to assign the value SELECT @@session.net_buffer_length; @@session.net_buffer_length -1024 -## Inserting and fetching data of length greater than 1024 ## -INSERT into t1(name) values("aaassssssssddddddddffffffgggggggg, askdlfjalsdkjfalksdjflaksdjfalkjdflaksjdflakjdflajsflajflajdfalsjfdlajfladjslfajdflajdsflajsflakjsdfla;kjflsdjkf;aljfa;lkdsfjla;sjlkajffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllakjsdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa;;;;;;;;;;;;;;;;;;;;;;;;;;;dsklfjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjkljffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdkskkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk"); -SELECT length("aaaaaasssssssssssdddddddfffffgggg, askdlfjalsdkjfalksdjflaksdjfalkjdflaksjdflakjdflajsflajflajdfalsjfdlajfladjslfajdflajdsflajsflakjsdfla;kjflsdjkf;aljfa;lkdsfjla;sjlkajffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllakjsdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa;;;;;;;;;;;;;;;;;;;;;;;;;;;dsklfjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjkljffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdkskkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk") as len; -len -1470 -## Verifying record in table t1 ## -SELECT * from t1; -id name -1 aaassssssssddddddddffffffgggggggg, askdlfjalsdkjfalksdjflaksdjfalkjdflaksjdflakjdflajsflajflajdfalsjfdlajfladjslfajdflajdsflajsflakjsdfla;kjflsdjkf;aljfa;lkdsfjla;sjlkajffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllakjsdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa;;;;;;;;;;;;;;;;;;;;;;;;;;;dsklfjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjkljffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdkskkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk -'Bug#35381: Error is not coming on inserting and fetching data of length' -'greater than max_allowed_packet size at session level'; +16384 '#--------------------FN_DYNVARS_070_02-------------------------#' ## Setting value of max_allowed packet and net_buffer_length to 1024 ## SET @@global.max_allowed_packet = 1024; diff --git a/mysql-test/r/net_buffer_length_basic.result b/mysql-test/r/net_buffer_length_basic.result index ddaad3dfa91..be7e9082332 100644 --- a/mysql-test/r/net_buffer_length_basic.result +++ b/mysql-test/r/net_buffer_length_basic.result @@ -1,5 +1,5 @@ SET @start_global_value = @@global.net_buffer_length; -SET @start_session_value = @@session.net_buffer_length; +SET @@global.net_buffer_length = DEFAULT; '#--------------------FN_DYNVARS_109_01-------------------------#' SET @@global.net_buffer_length = 10000; SET @@global.net_buffer_length = DEFAULT; @@ -7,7 +7,9 @@ SELECT @@global.net_buffer_length; @@global.net_buffer_length 16384 SET @@session.net_buffer_length = 20000; +ERROR HY000: SESSION variable 'net_buffer_length' is read-only. Use SET GLOBAL to assign the value SET @@session.net_buffer_length = DEFAULT; +ERROR 42000: Variable 'net_buffer_length' doesn't have a default value SELECT @@session.net_buffer_length; @@session.net_buffer_length 16384 @@ -16,10 +18,6 @@ SET @@global.net_buffer_length = DEFAULT; SELECT @@global.net_buffer_length = 16384; @@global.net_buffer_length = 16384 1 -SET @@session.net_buffer_length = DEFAULT; -SELECT @@session.net_buffer_length = 16384; -@@session.net_buffer_length = 16384 -1 '#--------------------FN_DYNVARS_109_03-------------------------#' SET @@global.net_buffer_length = 1024; SELECT @@global.net_buffer_length; @@ -43,27 +41,6 @@ SELECT @@global.net_buffer_length; 64512 'Bug# 34877: Invalid Values are coming in variable on assigning valid values'; '#--------------------FN_DYNVARS_109_04-------------------------#' -SET @@session.net_buffer_length = 1024; -SELECT @@session.net_buffer_length; -@@session.net_buffer_length -1024 -SET @@session.net_buffer_length = 1025; -SELECT @@session.net_buffer_length; -@@session.net_buffer_length -1024 -SET @@session.net_buffer_length = 1048576; -SELECT @@session.net_buffer_length; -@@session.net_buffer_length -1048576 -SET @@session.net_buffer_length = 1048575; -SELECT @@session.net_buffer_length; -@@session.net_buffer_length -1047552 -SET @@session.net_buffer_length = 65535; -SELECT @@session.net_buffer_length; -@@session.net_buffer_length -64512 -'Bug# 34877: Invalid Values are coming in variable on assigning valid values'; '#------------------FN_DYNVARS_109_05-----------------------#' SET @@global.net_buffer_length = 0; Warnings: @@ -105,42 +82,12 @@ ERROR 42000: Incorrect argument type to variable 'net_buffer_length' SELECT @@global.net_buffer_length; @@global.net_buffer_length 1048576 -SET @@session.net_buffer_length = 0; -Warnings: -Warning 1292 Truncated incorrect net_buffer_length value: '0' -SELECT @@session.net_buffer_length; -@@session.net_buffer_length -1024 -SET @@session.net_buffer_length = -2; -Warnings: -Warning 1292 Truncated incorrect net_buffer_length value: '0' -SELECT @@session.net_buffer_length; -@@session.net_buffer_length -1024 -SET @@session.net_buffer_length = 1048577; -Warnings: -Warning 1292 Truncated incorrect net_buffer_length value: '1048577' -SELECT @@session.net_buffer_length; -@@session.net_buffer_length -1048576 -SET @@session.net_buffer_length = 1048576002; -Warnings: -Warning 1292 Truncated incorrect net_buffer_length value: '1048576002' -SELECT @@session.net_buffer_length; -@@session.net_buffer_length -1048576 -SET @@session.net_buffer_length = 65530.34.; -ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '.' at line 1 -SET @@session.net_buffer_length = 65550; -SELECT @@session.net_buffer_length; -@@session.net_buffer_length -65536 'Bug # 34837: Errors are not coming on assigning invalid values to variable'; SET @@session.net_buffer_length = test; ERROR 42000: Incorrect argument type to variable 'net_buffer_length' SELECT @@session.net_buffer_length; @@session.net_buffer_length -65536 +16384 '#------------------FN_DYNVARS_109_06-----------------------#' SELECT @@global.net_buffer_length = VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES @@ -172,18 +119,10 @@ SELECT @@net_buffer_length = @@global.net_buffer_length; @@net_buffer_length = @@global.net_buffer_length 0 '#---------------------FN_DYNVARS_109_10----------------------#' -SET @@net_buffer_length = 100000; -SELECT @@net_buffer_length = @@local.net_buffer_length; -@@net_buffer_length = @@local.net_buffer_length -1 -SELECT @@local.net_buffer_length = @@session.net_buffer_length; -@@local.net_buffer_length = @@session.net_buffer_length -1 '#---------------------FN_DYNVARS_109_11----------------------#' -SET net_buffer_length = 1024; SELECT @@net_buffer_length; @@net_buffer_length -1024 +16384 SELECT local.net_buffer_length; ERROR 42S02: Unknown table 'local' in field list SELECT session.net_buffer_length; @@ -191,4 +130,3 @@ ERROR 42S02: Unknown table 'session' in field list SELECT net_buffer_length = @@session.net_buffer_length; ERROR 42S22: Unknown column 'net_buffer_length' in 'field list' SET @@global.net_buffer_length = @start_global_value; -SET @@session.net_buffer_length = @start_session_value; diff --git a/mysql-test/r/packet.result b/mysql-test/r/packet.result index df0d9ff9adc..fa2fb33d278 100644 --- a/mysql-test/r/packet.result +++ b/mysql-test/r/packet.result @@ -1,32 +1,22 @@ set global max_allowed_packet=100; Warnings: Warning 1292 Truncated incorrect max_allowed_packet value: '100' -set max_allowed_packet=100; -Warnings: -Warning 1292 Truncated incorrect max_allowed_packet value: '100' set global net_buffer_length=100; Warnings: Warning 1292 Truncated incorrect net_buffer_length value: '100' -set net_buffer_length=100; -Warnings: -Warning 1292 Truncated incorrect net_buffer_length value: '100' SELECT length("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa") as len; len 1024 select repeat('a',2000); repeat('a',2000) -NULL -Warnings: -Warning 1301 Result of repeat() was larger than max_allowed_packet (1024) - truncated +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa select @@net_buffer_length, @@max_allowed_packet; @@net_buffer_length @@max_allowed_packet 1024 1024 SELECT length("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa") as len; ERROR 08S01: Got a packet bigger than 'max_allowed_packet' bytes set global max_allowed_packet=default; -set max_allowed_packet=default; set global net_buffer_length=default; -set net_buffer_length=default; SELECT length("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa") as len; len 100 diff --git a/mysql-test/r/union.result b/mysql-test/r/union.result index 3f99a053df4..2a10f34d081 100644 --- a/mysql-test/r/union.result +++ b/mysql-test/r/union.result @@ -1343,10 +1343,10 @@ t3 CREATE TABLE `t3` ( `left(a,100000000)` longtext ) ENGINE=MyISAM DEFAULT CHARSET=latin1 drop tables t1,t2,t3; -SELECT @tmp_max:= @@max_allowed_packet; -@tmp_max:= @@max_allowed_packet +SELECT @tmp_max:= @@global.max_allowed_packet; +@tmp_max:= @@global.max_allowed_packet 1048576 -SET max_allowed_packet=25000000; +SET @@global.max_allowed_packet=25000000; CREATE TABLE t1 (a mediumtext); CREATE TABLE t2 (b varchar(20)); INSERT INTO t1 VALUES ('a'); @@ -1384,7 +1384,7 @@ t3 CREATE TABLE `t3` ( `a` varbinary(510) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 DROP TABLES t1,t2,t3; -SET max_allowed_packet:= @tmp_max; +SET @@global.max_allowed_packet:= @tmp_max; create table t1 ( id int not null auto_increment, primary key (id), col1 int); insert into t1 (col1) values (2),(3),(4),(5),(6); select 99 union all select id from t1 order by 1; diff --git a/mysql-test/r/variables.result b/mysql-test/r/variables.result index aee84c98e4f..c52f7f3578e 100644 --- a/mysql-test/r/variables.result +++ b/mysql-test/r/variables.result @@ -228,7 +228,6 @@ VARIABLE_NAME VARIABLE_VALUE MYISAM_MAX_SORT_FILE_SIZE FILE_SIZE set global net_retry_count=10, session net_retry_count=10; set global net_buffer_length=1024, net_write_timeout=200, net_read_timeout=300; -set session net_buffer_length=2048, net_write_timeout=500, net_read_timeout=600; show global variables like 'net_%'; Variable_name Value net_buffer_length 1024 @@ -243,57 +242,45 @@ NET_RETRY_COUNT 10 NET_WRITE_TIMEOUT 200 show session variables like 'net_%'; Variable_name Value -net_buffer_length 2048 -net_read_timeout 600 +net_buffer_length 16384 +net_read_timeout 30 net_retry_count 10 -net_write_timeout 500 +net_write_timeout 60 select * from information_schema.session_variables where variable_name like 'net_%' order by 1; VARIABLE_NAME VARIABLE_VALUE -NET_BUFFER_LENGTH 2048 -NET_READ_TIMEOUT 600 +NET_BUFFER_LENGTH 16384 +NET_READ_TIMEOUT 30 NET_RETRY_COUNT 10 -NET_WRITE_TIMEOUT 500 -set session net_buffer_length=8000, global net_read_timeout=900, net_write_timeout=1000; +NET_WRITE_TIMEOUT 60 +set global net_buffer_length=8000, global net_read_timeout=900, net_write_timeout=1000; show global variables like 'net_%'; Variable_name Value -net_buffer_length 1024 +net_buffer_length 7168 net_read_timeout 900 net_retry_count 10 net_write_timeout 1000 select * from information_schema.global_variables where variable_name like 'net_%' order by 1; VARIABLE_NAME VARIABLE_VALUE -NET_BUFFER_LENGTH 1024 +NET_BUFFER_LENGTH 7168 NET_READ_TIMEOUT 900 NET_RETRY_COUNT 10 NET_WRITE_TIMEOUT 1000 -show session variables like 'net_%'; -Variable_name Value -net_buffer_length 7168 -net_read_timeout 600 -net_retry_count 10 -net_write_timeout 500 -select * from information_schema.session_variables where variable_name like 'net_%' order by 1; -VARIABLE_NAME VARIABLE_VALUE -NET_BUFFER_LENGTH 7168 -NET_READ_TIMEOUT 600 -NET_RETRY_COUNT 10 -NET_WRITE_TIMEOUT 500 -set net_buffer_length=1; +set global net_buffer_length=1; Warnings: Warning 1292 Truncated incorrect net_buffer_length value: '1' -show variables like 'net_buffer_length'; +show global variables like 'net_buffer_length'; Variable_name Value net_buffer_length 1024 -select * from information_schema.session_variables where variable_name like 'net_buffer_length'; +select * from information_schema.global_variables where variable_name like 'net_buffer_length'; VARIABLE_NAME VARIABLE_VALUE NET_BUFFER_LENGTH 1024 -set net_buffer_length=2000000000; +set global net_buffer_length=2000000000; Warnings: Warning 1292 Truncated incorrect net_buffer_length value: '2000000000' -show variables like 'net_buffer_length'; +show global variables like 'net_buffer_length'; Variable_name Value net_buffer_length 1048576 -select * from information_schema.session_variables where variable_name like 'net_buffer_length'; +select * from information_schema.global_variables where variable_name like 'net_buffer_length'; VARIABLE_NAME VARIABLE_VALUE NET_BUFFER_LENGTH 1048576 set character set cp1251_koi8; @@ -461,7 +448,7 @@ select @@long_query_time; @@long_query_time 100.000001 set low_priority_updates=1; -set max_allowed_packet=100; +set global max_allowed_packet=100; Warnings: Warning 1292 Truncated incorrect max_allowed_packet value: '100' set global max_binlog_cache_size=100; @@ -485,7 +472,7 @@ select @@max_user_connections; 100 set global max_write_lock_count=100; set myisam_sort_buffer_size=100; -set net_buffer_length=100; +set global net_buffer_length=100; Warnings: Warning 1292 Truncated incorrect net_buffer_length value: '100' set net_read_timeout=100; diff --git a/mysql-test/t/func_compress.test b/mysql-test/t/func_compress.test index 68f07f258bf..7f17fd2180f 100644 --- a/mysql-test/t/func_compress.test +++ b/mysql-test/t/func_compress.test @@ -43,8 +43,11 @@ drop table t1; # note that when LOW_MEMORY is set the "test" below is meaningless # -set @@max_allowed_packet=1048576*100; +set @@global.max_allowed_packet=1048576*100; --replace_result "''" XXX "'1'" XXX + +# reconnect to make the new max packet size take effect +--connect (newconn, localhost, root,,) eval select compress(repeat('aaaaaaaaaa', IF('$LOW_MEMORY', 10, 10000000))) is null; # diff --git a/mysql-test/t/innodb_bug34300.test b/mysql-test/t/innodb_bug34300.test index 4b4a3fdc8a3..114bcf98c25 100644 --- a/mysql-test/t/innodb_bug34300.test +++ b/mysql-test/t/innodb_bug34300.test @@ -8,7 +8,9 @@ -- disable_query_log -- disable_result_log -SET @@max_allowed_packet=16777216; +# set packet size and reconnect +SET @@global.max_allowed_packet=16777216; +--connect (newconn, localhost, root,,) DROP TABLE IF EXISTS bug34300; CREATE TABLE bug34300 ( diff --git a/mysql-test/t/max_allowed_packet_basic.test b/mysql-test/t/max_allowed_packet_basic.test index beb9b62d6de..8be0e5f670e 100644 --- a/mysql-test/t/max_allowed_packet_basic.test +++ b/mysql-test/t/max_allowed_packet_basic.test @@ -36,8 +36,13 @@ SET @start_global_value = @@global.max_allowed_packet; SELECT @start_global_value; -SET @start_session_value = @@session.max_allowed_packet; -SELECT @start_session_value; + +# give a known value to @@session.max_allowed_packet by assigning to +# @@global and setting up a new connection (for deterministic result +# file diffing) +SET @@global.max_allowed_packet = DEFAULT; +connect (conn1, localhost, root,,); + --echo '#--------------------FN_DYNVARS_070_01-------------------------#' @@ -49,7 +54,9 @@ SET @@global.max_allowed_packet = 1000; SET @@global.max_allowed_packet = DEFAULT; SELECT @@global.max_allowed_packet; +--Error ER_VARIABLE_IS_READONLY SET @@session.max_allowed_packet = 20000; +--Error ER_NO_DEFAULT SET @@session.max_allowed_packet = DEFAULT; SELECT @@session.max_allowed_packet; @@ -62,9 +69,6 @@ SELECT @@session.max_allowed_packet; SET @@global.max_allowed_packet = DEFAULT; SELECT @@global.max_allowed_packet = 1048576; -SET @@session.max_allowed_packet = DEFAULT; -SELECT @@session.max_allowed_packet = 1048576; - --echo '#--------------------FN_DYNVARS_070_03-------------------------#' ############################################################################ @@ -86,14 +90,19 @@ SELECT @@global.max_allowed_packet; # Change the value of max_allowed_packet to a valid value for SESSION Scope # ############################################################################# +--Error ER_VARIABLE_IS_READONLY SET @@session.max_allowed_packet = 1024; SELECT @@session.max_allowed_packet; +--Error ER_VARIABLE_IS_READONLY SET @@session.max_allowed_packet = 1025; SELECT @@session.max_allowed_packet; +--Error ER_VARIABLE_IS_READONLY SET @@session.max_allowed_packet = 65535; SELECT @@session.max_allowed_packet; +--Error ER_VARIABLE_IS_READONLY SET @@session.max_allowed_packet = 1073741824; SELECT @@session.max_allowed_packet; +--Error ER_VARIABLE_IS_READONLY SET @@session.max_allowed_packet = 1073741823; SELECT @@session.max_allowed_packet; @@ -118,14 +127,18 @@ SELECT @@global.max_allowed_packet; SET @@global.max_allowed_packet = test; SELECT @@global.max_allowed_packet; +--Error ER_VARIABLE_IS_READONLY SET @@session.max_allowed_packet = 0; SELECT @@session.max_allowed_packet; +--Error ER_VARIABLE_IS_READONLY SET @@session.max_allowed_packet = 1023; SELECT @@session.max_allowed_packet; +--Error ER_VARIABLE_IS_READONLY SET @@session.max_allowed_packet = -2; SELECT @@session.max_allowed_packet; --Error ER_PARSE_ERROR SET @@session.max_allowed_packet = 65530.34.; +--Error ER_VARIABLE_IS_READONLY SET @@session.max_allowed_packet = 10737418241; SELECT @@session.max_allowed_packet; --echo 'Bug # 34837: Errors are not coming on assigning invalid values to variable'; @@ -180,6 +193,7 @@ SELECT @@max_allowed_packet = @@global.max_allowed_packet; # Check if accessing variable with SESSION,LOCAL and without SCOPE points to same session variable # ######################################################################################################## +--Error ER_VARIABLE_IS_READONLY SET @@max_allowed_packet = 100000; SELECT @@max_allowed_packet = @@local.max_allowed_packet; SELECT @@local.max_allowed_packet = @@session.max_allowed_packet; @@ -190,6 +204,7 @@ SELECT @@local.max_allowed_packet = @@session.max_allowed_packet; # Check if max_allowed_packet can be accessed with and without @@ sign # ############################################################################# +--Error ER_VARIABLE_IS_READONLY SET max_allowed_packet = 1024; SELECT @@max_allowed_packet; --Error ER_UNKNOWN_TABLE @@ -204,9 +219,9 @@ SELECT max_allowed_packet = @@session.max_allowed_packet; # Restore initial value # #################################### +connection default; SET @@global.max_allowed_packet = @start_global_value; SELECT @@global.max_allowed_packet; -SET @@session.max_allowed_packet = @start_session_value; SELECT @@session.max_allowed_packet; diff --git a/mysql-test/t/max_allowed_packet_func.test b/mysql-test/t/max_allowed_packet_func.test index 37ca15f85f0..8437d480a37 100644 --- a/mysql-test/t/max_allowed_packet_func.test +++ b/mysql-test/t/max_allowed_packet_func.test @@ -43,26 +43,19 @@ name BLOB --echo '#--------------------FN_DYNVARS_070_01-------------------------#' ############################################################################### -# Setting initial value of max_allowed_packet to 1024 at session level and -# verifying its behavior after inserting data greater than 1024 bytes +# Setting initial value of max_allowed_packet to 1024 at session level +# should result in an error (session variable is readonly) ############################################################################### --echo ## Setting value of max_allowed packet and net_buffer_length to 1024 ## +--error ER_VARIABLE_IS_READONLY SET @@session.max_allowed_packet = 1024; -SET @@session.net_buffer_length = 1024; SELECT @@session.max_allowed_packet; + +--error ER_VARIABLE_IS_READONLY +SET @@session.net_buffer_length = 1024; SELECT @@session.net_buffer_length; ---echo ## Inserting and fetching data of length greater than 1024 ## -INSERT into t1(name) values("aaassssssssddddddddffffffgggggggg, askdlfjalsdkjfalksdjflaksdjfalkjdflaksjdflakjdflajsflajflajdfalsjfdlajfladjslfajdflajdsflajsflakjsdfla;kjflsdjkf;aljfa;lkdsfjla;sjlkajffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllakjsdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa;;;;;;;;;;;;;;;;;;;;;;;;;;;dsklfjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjkljffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdkskkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk"); - -SELECT length("aaaaaasssssssssssdddddddfffffgggg, askdlfjalsdkjfalksdjflaksdjfalkjdflaksjdflakjdflajsflajflajdfalsjfdlajfladjslfajdflajdsflajsflakjsdfla;kjflsdjkf;aljfa;lkdsfjla;sjlkajffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllakjsdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa;;;;;;;;;;;;;;;;;;;;;;;;;;;dsklfjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjkljffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdkskkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk") as len; - ---echo ## Verifying record in table t1 ## -SELECT * from t1; - ---echo 'Bug#35381: Error is not coming on inserting and fetching data of length' ---echo 'greater than max_allowed_packet size at session level'; --echo '#--------------------FN_DYNVARS_070_02-------------------------#' ############################################################################### diff --git a/mysql-test/t/net_buffer_length_basic.test b/mysql-test/t/net_buffer_length_basic.test index 80403bfec2b..6e1e0559c61 100644 --- a/mysql-test/t/net_buffer_length_basic.test +++ b/mysql-test/t/net_buffer_length_basic.test @@ -38,9 +38,13 @@ SET @start_global_value = @@global.net_buffer_length; # Due to differences in results of linux and windows #SELECT @start_global_value; -SET @start_session_value = @@session.net_buffer_length; -#SELECT @start_session_value; +# give a known value to @@session.net_buffer_length by assigning to +# @@global and setting up a new connection (for deterministic result +# file diffing) +SET @@global.net_buffer_length = DEFAULT; +connect(con1,localhost,root,,); +connection con1; --echo '#--------------------FN_DYNVARS_109_01-------------------------#' ################################################################# @@ -51,7 +55,9 @@ SET @@global.net_buffer_length = 10000; SET @@global.net_buffer_length = DEFAULT; SELECT @@global.net_buffer_length; +--Error ER_VARIABLE_IS_READONLY SET @@session.net_buffer_length = 20000; +--Error ER_NO_DEFAULT SET @@session.net_buffer_length = DEFAULT; SELECT @@session.net_buffer_length; @@ -64,9 +70,6 @@ SELECT @@session.net_buffer_length; SET @@global.net_buffer_length = DEFAULT; SELECT @@global.net_buffer_length = 16384; -SET @@session.net_buffer_length = DEFAULT; -SELECT @@session.net_buffer_length = 16384; - --echo '#--------------------FN_DYNVARS_109_03-------------------------#' ########################################################################### @@ -91,17 +94,7 @@ SELECT @@global.net_buffer_length; # Change the value of net_buffer_length to a valid value for SESSION Scope # ############################################################################ -SET @@session.net_buffer_length = 1024; -SELECT @@session.net_buffer_length; -SET @@session.net_buffer_length = 1025; -SELECT @@session.net_buffer_length; -SET @@session.net_buffer_length = 1048576; -SELECT @@session.net_buffer_length; -SET @@session.net_buffer_length = 1048575; -SELECT @@session.net_buffer_length; -SET @@session.net_buffer_length = 65535; -SELECT @@session.net_buffer_length; ---echo 'Bug# 34877: Invalid Values are coming in variable on assigning valid values'; +# Bug#22891: SESSION net_buffer_length is now read-only; assignments skipped --echo '#------------------FN_DYNVARS_109_05-----------------------#' @@ -126,18 +119,8 @@ SELECT @@global.net_buffer_length; SET @@global.net_buffer_length = test; SELECT @@global.net_buffer_length; -SET @@session.net_buffer_length = 0; -SELECT @@session.net_buffer_length; -SET @@session.net_buffer_length = -2; -SELECT @@session.net_buffer_length; -SET @@session.net_buffer_length = 1048577; -SELECT @@session.net_buffer_length; -SET @@session.net_buffer_length = 1048576002; -SELECT @@session.net_buffer_length; ---Error ER_PARSE_ERROR -SET @@session.net_buffer_length = 65530.34.; -SET @@session.net_buffer_length = 65550; -SELECT @@session.net_buffer_length; +# Bug#22891: SESSION net_buffer_length is now read-only; assignments skipped + --echo 'Bug # 34837: Errors are not coming on assigning invalid values to variable'; --Error ER_WRONG_TYPE_FOR_VAR @@ -190,9 +173,7 @@ SELECT @@net_buffer_length = @@global.net_buffer_length; # Check if accessing variable with SESSION,LOCAL and without SCOPE points to same session variable # ######################################################################################################## -SET @@net_buffer_length = 100000; -SELECT @@net_buffer_length = @@local.net_buffer_length; -SELECT @@local.net_buffer_length = @@session.net_buffer_length; +# Bug#22891: SESSION net_buffer_length is now read-only; assignments skipped --echo '#---------------------FN_DYNVARS_109_11----------------------#' @@ -200,7 +181,7 @@ SELECT @@local.net_buffer_length = @@session.net_buffer_length; # Check if net_buffer_length can be accessed with and without @@ sign # ############################################################################ -SET net_buffer_length = 1024; +# Bug#22891: SESSION net_buffer_length is now read-only; assignments skipped SELECT @@net_buffer_length; --Error ER_UNKNOWN_TABLE SELECT local.net_buffer_length; @@ -214,11 +195,11 @@ SELECT net_buffer_length = @@session.net_buffer_length; # Restore initial value # #################################### +connection default; + SET @@global.net_buffer_length = @start_global_value; # Due to differences in results of linux and windows #SELECT @@global.net_buffer_length; -SET @@session.net_buffer_length = @start_session_value; -#SELECT @@session.net_buffer_length; ###################################################### diff --git a/mysql-test/t/packet.test b/mysql-test/t/packet.test index 4de284b7824..93b46766d99 100644 --- a/mysql-test/t/packet.test +++ b/mysql-test/t/packet.test @@ -8,30 +8,30 @@ # Check protocol handling # -connect (con1,localhost,root,,); - -connection con1; +# setting values below minimum threshold of 1024 will cause truncating set global max_allowed_packet=100; -set max_allowed_packet=100; set global net_buffer_length=100; -set net_buffer_length=100; -# Have to be > 1024 as min value of net_buffer_length is 1024 + +# is not yet in effect SELECT length("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa") as len; -# Should return NULL as 2000 is bigger than max_allowed_packet select repeat('a',2000); # -# Connection 2 should get error for too big packets +# Connection 1 should get error for too big packets # -connect (con2,localhost,root,,); -connection con2; +connect (con1,localhost,root,,); +connection con1; select @@net_buffer_length, @@max_allowed_packet; --error 1153 SELECT length("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa") as len; + +# +# Reset to default values and reconnect +# set global max_allowed_packet=default; -set max_allowed_packet=default; set global net_buffer_length=default; -set net_buffer_length=default; +connect (con2,localhost,root,,); +connection con2; SELECT length("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa") as len; select length(repeat('a',2000)); diff --git a/mysql-test/t/union.test b/mysql-test/t/union.test index f58cd54250b..ad4d57b7128 100644 --- a/mysql-test/t/union.test +++ b/mysql-test/t/union.test @@ -861,8 +861,10 @@ drop tables t1,t2,t3; # exceeds mediumtext maximum length # -SELECT @tmp_max:= @@max_allowed_packet; -SET max_allowed_packet=25000000; +SELECT @tmp_max:= @@global.max_allowed_packet; +SET @@global.max_allowed_packet=25000000; +# switching connection to allow the new max_allowed_packet take effect +--connect (newconn, localhost, root,,) CREATE TABLE t1 (a mediumtext); CREATE TABLE t2 (b varchar(20)); INSERT INTO t1 VALUES ('a'); @@ -884,7 +886,9 @@ INSERT INTO t1 VALUES ('a'); CREATE TABLE t3 SELECT REPEAT(a,2) AS a FROM t1 UNION SELECT b FROM t2; SHOW CREATE TABLE t3; DROP TABLES t1,t2,t3; -SET max_allowed_packet:= @tmp_max; +--connection default +SET @@global.max_allowed_packet:= @tmp_max; +--disconnect newconn # # Bug #10032 Bug in parsing UNION with ORDER BY when one node does not use FROM diff --git a/mysql-test/t/variables.test b/mysql-test/t/variables.test index 221f46605cd..e98436fa62c 100644 --- a/mysql-test/t/variables.test +++ b/mysql-test/t/variables.test @@ -146,25 +146,23 @@ show global variables like 'myisam_max_sort_file_size'; --replace_result 9223372036853727232 FILE_SIZE 2146435072 FILE_SIZE select * from information_schema.global_variables where variable_name like 'myisam_max_sort_file_size'; +# bug#22891: modified to take read-only SESSION net_buffer_length into account set global net_retry_count=10, session net_retry_count=10; set global net_buffer_length=1024, net_write_timeout=200, net_read_timeout=300; -set session net_buffer_length=2048, net_write_timeout=500, net_read_timeout=600; show global variables like 'net_%'; select * from information_schema.global_variables where variable_name like 'net_%' order by 1; show session variables like 'net_%'; select * from information_schema.session_variables where variable_name like 'net_%' order by 1; -set session net_buffer_length=8000, global net_read_timeout=900, net_write_timeout=1000; +set global net_buffer_length=8000, global net_read_timeout=900, net_write_timeout=1000; show global variables like 'net_%'; select * from information_schema.global_variables where variable_name like 'net_%' order by 1; -show session variables like 'net_%'; -select * from information_schema.session_variables where variable_name like 'net_%' order by 1; -set net_buffer_length=1; -show variables like 'net_buffer_length'; -select * from information_schema.session_variables where variable_name like 'net_buffer_length'; +set global net_buffer_length=1; +show global variables like 'net_buffer_length'; +select * from information_schema.global_variables where variable_name like 'net_buffer_length'; #warning 1292 -set net_buffer_length=2000000000; -show variables like 'net_buffer_length'; -select * from information_schema.session_variables where variable_name like 'net_buffer_length'; +set global net_buffer_length=2000000000; +show global variables like 'net_buffer_length'; +select * from information_schema.global_variables where variable_name like 'net_buffer_length'; set character set cp1251_koi8; show variables like "character_set_client"; @@ -274,7 +272,7 @@ select @@long_query_time; set long_query_time=100.000001; select @@long_query_time; set low_priority_updates=1; -set max_allowed_packet=100; +set global max_allowed_packet=100; set global max_binlog_cache_size=100; set global max_binlog_size=100; set global max_connect_errors=100; @@ -288,7 +286,7 @@ set global max_user_connections=100; select @@max_user_connections; set global max_write_lock_count=100; set myisam_sort_buffer_size=100; -set net_buffer_length=100; +set global net_buffer_length=100; set net_read_timeout=100; set net_write_timeout=100; set global query_cache_limit=100; diff --git a/sql/set_var.cc b/sql/set_var.cc index 3e15cce2cea..7d1acc8e4fb 100644 --- a/sql/set_var.cc +++ b/sql/set_var.cc @@ -296,7 +296,7 @@ static sys_var_thd_bool sys_sql_low_priority_updates(&vars, "sql_low_priority_up &SV::low_priority_updates, fix_low_priority_updates); #endif -static sys_var_thd_ulong sys_max_allowed_packet(&vars, "max_allowed_packet", +static sys_var_thd_ulong_session_readonly sys_max_allowed_packet(&vars, "max_allowed_packet", &SV::max_allowed_packet); static sys_var_long_ptr sys_max_binlog_cache_size(&vars, "max_binlog_cache_size", &max_binlog_cache_size); @@ -369,7 +369,7 @@ static sys_var_thd_enum sys_myisam_stats_method(&vars, "myisam_stats_met &myisam_stats_method_typelib, NULL); -static sys_var_thd_ulong sys_net_buffer_length(&vars, "net_buffer_length", +static sys_var_thd_ulong_session_readonly sys_net_buffer_length(&vars, "net_buffer_length", &SV::net_buffer_length); static sys_var_thd_ulong sys_net_read_timeout(&vars, "net_read_timeout", &SV::net_read_timeout, @@ -2734,6 +2734,18 @@ uchar *sys_var_max_user_conn::value_ptr(THD *thd, enum_var_type type, } +bool sys_var_thd_ulong_session_readonly::check(THD *thd, set_var *var) +{ + if (var->type != OPT_GLOBAL) + { + my_error(ER_VARIABLE_IS_READONLY, MYF(0), "SESSION", name, "GLOBAL"); + return TRUE; + } + + return sys_var_thd_ulong::check(thd, var); +} + + bool sys_var_thd_lc_time_names::check(THD *thd, set_var *var) { MY_LOCALE *locale_match; diff --git a/sql/set_var.h b/sql/set_var.h index 9681c955a98..ab819694e09 100644 --- a/sql/set_var.h +++ b/sql/set_var.h @@ -1024,6 +1024,29 @@ public: }; +/** + * @brief This is a specialization of sys_var_thd_ulong that implements a + read-only session variable. The class overrides check() and check_default() + to achieve the read-only property for the session part of the variable. + */ +class sys_var_thd_ulong_session_readonly : public sys_var_thd_ulong +{ +public: + sys_var_thd_ulong_session_readonly(sys_var_chain *chain_arg, + const char *name_arg, ulong SV::*offset_arg, + sys_check_func c_func= NULL, + sys_after_update_func au_func= NULL, + Binlog_status_enum bl_status_arg= NOT_IN_BINLOG): + sys_var_thd_ulong(chain_arg, name_arg, offset_arg, c_func, au_func, bl_status_arg) + { } + bool check(THD *thd, set_var *var); + bool check_default(enum_var_type type) + { + return type != OPT_GLOBAL || !option_limits; + } +}; + + class sys_var_microseconds :public sys_var_thd { ulonglong SV::*offset; diff --git a/sql/share/errmsg.txt b/sql/share/errmsg.txt index b86007408fb..fd75fee9737 100644 --- a/sql/share/errmsg.txt +++ b/sql/share/errmsg.txt @@ -6151,3 +6151,6 @@ WARN_PLUGIN_DELETE_BUILTIN WARN_PLUGIN_BUSY eng "Plugin is busy and will be uninstalled on shutdown" + +ER_VARIABLE_IS_READONLY + eng "%s variable '%s' is read-only. Use SET %s to assign the value" From 1cd8b9f700a3d20e0af43896b366cef6ef0e7d4c Mon Sep 17 00:00:00 2001 From: Ramil Kalimullin Date: Thu, 20 Nov 2008 14:08:36 +0400 Subject: [PATCH 06/12] Fix for bug#40875: Memory leak in FEDERATED handler Problem: memory leak occurs when we open a federated table that has its share in the hash. Fix: free not used memory. Note: the fix should NOT be merged to 5.1 (the code changed). sql/ha_federated.cc: Fix for bug#40875: Memory leak in FEDERATED handler - free memory (tmp_share.scheme) allocated in the parse_url() if it isn't used anymore. --- sql/ha_federated.cc | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/sql/ha_federated.cc b/sql/ha_federated.cc index b4788dd9c87..d4144a41a2a 100644 --- a/sql/ha_federated.cc +++ b/sql/ha_federated.cc @@ -1320,6 +1320,14 @@ static FEDERATED_SHARE *get_share(const char *table_name, TABLE *table) thr_lock_init(&share->lock); pthread_mutex_init(&share->mutex, MY_MUTEX_INIT_FAST); } + else + { + /* + Free tmp_share.scheme allocated in the parse_url() + as we found share in the hash and tmp_share isn't needed anymore. + */ + my_free((gptr) tmp_share.scheme, MYF(MY_ALLOW_ZERO_PTR)); + } share->use_count++; pthread_mutex_unlock(&federated_mutex); From c3dc1d6dfb010c923e4c1721005fbc050bd7dd23 Mon Sep 17 00:00:00 2001 From: Ramil Kalimullin Date: Thu, 20 Nov 2008 15:25:26 +0400 Subject: [PATCH 07/12] Fix for bug#40770: Server Crash when running with triggers including variable settings (rpl_sys) Problem: under certain conditions (e.g. user variables usage in triggers) accessing a user defined variable we may use a variables hash table that belongs to already deleted thread. It happens if thd= new THD; has the same address as just deleted thd as we use if (stored_thd == thd) to check. That may lead to unpredictable results, server crash etc. Fix: use thread_id instead of thd address to distinguish threads. Note: no simple and repeatable test case. sql/item_func.cc: Fix for bug#40770: Server Crash when running with triggers including variable settings (rpl_sys) - store and use thd->thread_id to distinguish threads instead of thread address as it may be the same as just deleted thread had, i.e. we may get (old_thd == new_thd) after delete old_thd; new_thd= new THD; - set entry_thread_id only when we get a real entry, clear it if the hash search fails. sql/item_func.h: Fix for bug#40770: Server Crash when running with triggers including variable settings (rpl_sys) - Item_func_set_user_var::entry_thread_id introduced. --- sql/item_func.cc | 7 +++++-- sql/item_func.h | 8 ++++---- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/sql/item_func.cc b/sql/item_func.cc index f9338e6016b..e117adc3cd0 100644 --- a/sql/item_func.cc +++ b/sql/item_func.cc @@ -3810,11 +3810,14 @@ static user_var_entry *get_variable(HASH *hash, LEX_STRING &name, bool Item_func_set_user_var::set_entry(THD *thd, bool create_if_not_exists) { - if (thd == entry_thd && entry) + if (entry && thd->thread_id == entry_thread_id) goto end; // update entry->update_query_id for PS - entry_thd= thd; if (!(entry= get_variable(&thd->user_vars, name, create_if_not_exists))) + { + entry_thread_id= 0; return TRUE; + } + entry_thread_id= thd->thread_id; /* Remember the last query which updated it, this way a query can later know if this variable is a constant item in the query (it is if update_query_id diff --git a/sql/item_func.h b/sql/item_func.h index 08906ae826e..3acda817d26 100644 --- a/sql/item_func.h +++ b/sql/item_func.h @@ -1295,16 +1295,16 @@ class Item_func_set_user_var :public Item_func enum Item_result cached_result_type; user_var_entry *entry; /* - The entry_thd variable is used: + The entry_thread_id variable is used: 1) to skip unnecessary updates of the entry field (see above); 2) to reset the entry field that was initialized in the other thread (for example, an item tree of a trigger that updates user variables - may be shared between several connections, and the entry_thd field + may be shared between several connections, and the entry_thread_id field prevents updates of one connection user variables from a concurrent connection calling the same trigger that initially updated some user variable it the first connection context). */ - THD *entry_thd; + my_thread_id entry_thread_id; char buffer[MAX_FIELD_WIDTH]; String value; my_decimal decimal_buff; @@ -1321,7 +1321,7 @@ public: LEX_STRING name; // keep it public Item_func_set_user_var(LEX_STRING a,Item *b) :Item_func(b), cached_result_type(INT_RESULT), - entry(NULL), entry_thd(NULL), name(a) + entry(NULL), entry_thread_id(0), name(a) {} enum Functype functype() const { return SUSERVAR_FUNC; } double val_real(); From 490bc421014689f37f7954bcf82dec5a522d2225 Mon Sep 17 00:00:00 2001 From: Chad MILLER Date: Thu, 20 Nov 2008 09:51:01 -0500 Subject: [PATCH 08/12] Update to change for bug 39178. Revert error-handling change, perhaps temporarily if yassl maintainer has plans for other error handling. --- extra/yassl/src/cert_wrapper.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extra/yassl/src/cert_wrapper.cpp b/extra/yassl/src/cert_wrapper.cpp index 1af5705d11d..ebec0882265 100644 --- a/extra/yassl/src/cert_wrapper.cpp +++ b/extra/yassl/src/cert_wrapper.cpp @@ -265,7 +265,7 @@ int CertManager::Validate() TaoCrypt::CertDecoder cert(source, true, &signers_, verifyNone_); int err = cert.GetError().What(); - if ( err && err != TaoCrypt::SIG_OTHER_E) + if ( err ) return err; uint sz = cert.GetPublicKey().size(); From 39efef853ba172b07c3df3869e98d4b894192acc Mon Sep 17 00:00:00 2001 From: Ramil Kalimullin Date: Fri, 21 Nov 2008 13:48:22 +0400 Subject: [PATCH 09/12] Fix for bug#36772: When using UTF8, CONVERT with GROUP BY returns truncated results Problem: performig conversion from {INT, DECIMAL, REAL} to CHAR we incorrectly set its max length in some cases that may lead to truncated results returned. Fix: properly set CONVERT({INT, DECIMAL, REAL}, CHAR) result's max length. mysql-test/r/ctype_utf8.result: Fix for bug#36772: When using UTF8, CONVERT with GROUP BY returns truncated results - test result. mysql-test/t/ctype_utf8.test: Fix for bug#36772: When using UTF8, CONVERT with GROUP BY returns truncated results - test case. sql/item_timefunc.cc: Fix for bug#36772: When using UTF8, CONVERT with GROUP BY returns truncated results - calculating Item_char_typecast::max_length use initial argument's charset mbmaxlen instead of from_cs->mbmaxlen, as from_cs may differ in some case (see comment above). --- mysql-test/r/ctype_utf8.result | 32 ++++++++++++++++++++++++++++++++ mysql-test/t/ctype_utf8.test | 17 +++++++++++++++++ sql/item_timefunc.cc | 13 ++++++++----- 3 files changed, 57 insertions(+), 5 deletions(-) diff --git a/mysql-test/r/ctype_utf8.result b/mysql-test/r/ctype_utf8.result index 5ca1d578d2a..a4d7ca2558f 100644 --- a/mysql-test/r/ctype_utf8.result +++ b/mysql-test/r/ctype_utf8.result @@ -1813,3 +1813,35 @@ select hex(_utf8 B'001111111111'); ERROR HY000: Invalid utf8 character string: 'FF' select (_utf8 X'616263FF'); ERROR HY000: Invalid utf8 character string: 'FF' +CREATE TABLE t1 (a INT NOT NULL, b INT NOT NULL); +INSERT INTO t1 VALUES (70000, 1092), (70001, 1085), (70002, 1065); +SELECT CONVERT(a, CHAR), CONVERT(b, CHAR) FROM t1 GROUP BY b; +CONVERT(a, CHAR) CONVERT(b, CHAR) +70002 1065 +70001 1085 +70000 1092 +SELECT CONVERT(a, CHAR), CONVERT(b, CHAR) FROM t1; +CONVERT(a, CHAR) CONVERT(b, CHAR) +70000 1092 +70001 1085 +70002 1065 +ALTER TABLE t1 ADD UNIQUE (b); +SELECT CONVERT(a, CHAR), CONVERT(b, CHAR) FROM t1 GROUP BY b; +CONVERT(a, CHAR) CONVERT(b, CHAR) +70002 1065 +70001 1085 +70000 1092 +DROP INDEX b ON t1; +SELECT CONVERT(a, CHAR), CONVERT(b, CHAR) FROM t1 GROUP BY b; +CONVERT(a, CHAR) CONVERT(b, CHAR) +70002 1065 +70001 1085 +70000 1092 +ALTER TABLE t1 ADD INDEX (b); +SELECT CONVERT(a, CHAR), CONVERT(b, CHAR) from t1 GROUP BY b; +CONVERT(a, CHAR) CONVERT(b, CHAR) +70002 1065 +70001 1085 +70000 1092 +DROP TABLE t1; +End of 5.0 tests diff --git a/mysql-test/t/ctype_utf8.test b/mysql-test/t/ctype_utf8.test index d184200ad5a..5111660bcbe 100644 --- a/mysql-test/t/ctype_utf8.test +++ b/mysql-test/t/ctype_utf8.test @@ -1437,3 +1437,20 @@ select hex(_utf8 X'616263FF'); select hex(_utf8 B'001111111111'); --error ER_INVALID_CHARACTER_STRING select (_utf8 X'616263FF'); + +# +# Bug #36772: When using UTF8, CONVERT with GROUP BY returns truncated results +# +CREATE TABLE t1 (a INT NOT NULL, b INT NOT NULL); +INSERT INTO t1 VALUES (70000, 1092), (70001, 1085), (70002, 1065); +SELECT CONVERT(a, CHAR), CONVERT(b, CHAR) FROM t1 GROUP BY b; +SELECT CONVERT(a, CHAR), CONVERT(b, CHAR) FROM t1; +ALTER TABLE t1 ADD UNIQUE (b); +SELECT CONVERT(a, CHAR), CONVERT(b, CHAR) FROM t1 GROUP BY b; +DROP INDEX b ON t1; +SELECT CONVERT(a, CHAR), CONVERT(b, CHAR) FROM t1 GROUP BY b; +ALTER TABLE t1 ADD INDEX (b); +SELECT CONVERT(a, CHAR), CONVERT(b, CHAR) from t1 GROUP BY b; +DROP TABLE t1; + +--echo End of 5.0 tests diff --git a/sql/item_timefunc.cc b/sql/item_timefunc.cc index 0cb3c963dad..e9e92952908 100644 --- a/sql/item_timefunc.cc +++ b/sql/item_timefunc.cc @@ -2550,6 +2550,8 @@ void Item_char_typecast::fix_length_and_dec() and thus avoid unnecessary character set conversion. - If the argument is not a number, then from_cs is set to the argument's charset. + + Note (TODO): we could use repertoire technique here. */ from_cs= (args[0]->result_type() == INT_RESULT || args[0]->result_type() == DECIMAL_RESULT || @@ -2557,12 +2559,13 @@ void Item_char_typecast::fix_length_and_dec() (cast_cs->mbminlen == 1 ? cast_cs : &my_charset_latin1) : args[0]->collation.collation; charset_conversion= (cast_cs->mbmaxlen > 1) || - !my_charset_same(from_cs, cast_cs) && - from_cs != &my_charset_bin && - cast_cs != &my_charset_bin; + (!my_charset_same(from_cs, cast_cs) && + from_cs != &my_charset_bin && + cast_cs != &my_charset_bin); collation.set(cast_cs, DERIVATION_IMPLICIT); - char_length= (cast_length >= 0) ? cast_length : - args[0]->max_length/from_cs->mbmaxlen; + char_length= (cast_length >= 0) ? + cast_length : + args[0]->max_length / args[0]->collation.collation->mbmaxlen; max_length= char_length * cast_cs->mbmaxlen; } From ff5685d701f29d2d8eb0d00dcaa4b63b9bbdeb67 Mon Sep 17 00:00:00 2001 From: Vladislav Vaintroub Date: Fri, 21 Nov 2008 11:15:26 +0100 Subject: [PATCH 10/12] Fix broken link in embedded server (Windows) --- libmysqld/libmysqld.def | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/libmysqld/libmysqld.def b/libmysqld/libmysqld.def index 431c0efdaa0..865475cb56c 100644 --- a/libmysqld/libmysqld.def +++ b/libmysqld/libmysqld.def @@ -17,7 +17,7 @@ EXPORTS dynstr_append_mem init_dynamic_string dynstr_free - hash_free + my_hash_free my_vsnprintf dynstr_append my_close @@ -31,7 +31,7 @@ EXPORTS fn_format dirname_part my_hash_insert - hash_search + my_hash_search test_if_hard_path my_copy my_mkdir @@ -54,7 +54,7 @@ EXPORTS my_thread_stack_size my_safe_print_str my_stat - _hash_init + _my_hash_init pthread_attr_setstacksize pthread_attr_init my_dirend From bd6376f1d17240956c1b1f243aaadde2611fcb56 Mon Sep 17 00:00:00 2001 From: Sergey Glukhov Date: Fri, 21 Nov 2008 16:39:59 +0400 Subject: [PATCH 11/12] Bug#34760 Character set autodetection appears to fail the problem is the same as reported in bug#20835, so the fix is backport of bug#20835 patch. mysql-test/r/subselect.result: test result mysql-test/t/subselect.test: test case --- mysql-test/r/subselect.result | 15 +++++++++++++++ mysql-test/t/subselect.test | 19 ++++++++++++++++++- sql/item_cmpfunc.cc | 3 ++- 3 files changed, 35 insertions(+), 2 deletions(-) diff --git a/mysql-test/r/subselect.result b/mysql-test/r/subselect.result index c5bae840214..6eeb652e3c1 100644 --- a/mysql-test/r/subselect.result +++ b/mysql-test/r/subselect.result @@ -4407,4 +4407,19 @@ pk a 3 30 2 20 DROP TABLE t1,t2; +CREATE TABLE t1 (s1 char(1)); +INSERT INTO t1 VALUES ('a'); +SELECT * FROM t1 WHERE _utf8'a' = ANY (SELECT s1 FROM t1); +s1 +a +DROP TABLE t1; +CREATE TABLE t1(id BIGINT); +CREATE TABLE t2(id1 BIGINT, id2 BIGINT); +INSERT INTO t1 VALUES (1),(2),(3); +INSERT INTO t2 VALUES (2,1),(3,1); +SELECT * FROM t1 i WHERE 1 IN (SELECT l.id2 FROM t2 l WHERE i.id=l.id1); +id +2 +3 +DROP TABLE t1, t2; End of 5.0 tests. diff --git a/mysql-test/t/subselect.test b/mysql-test/t/subselect.test index 2dfad2c58dd..d28e31fb545 100644 --- a/mysql-test/t/subselect.test +++ b/mysql-test/t/subselect.test @@ -3307,5 +3307,22 @@ SELECT * FROM t1 WHERE EXISTS (SELECT DISTINCT a FROM t2 WHERE t1.a < t2.a ORDER BY b); DROP TABLE t1,t2; ---echo End of 5.0 tests. +# +# Bug#20835 (literal string with =any values) +# +CREATE TABLE t1 (s1 char(1)); +INSERT INTO t1 VALUES ('a'); +SELECT * FROM t1 WHERE _utf8'a' = ANY (SELECT s1 FROM t1); +DROP TABLE t1; +# +# Bug#40519 Subselect query using bigint fails +# +CREATE TABLE t1(id BIGINT); +CREATE TABLE t2(id1 BIGINT, id2 BIGINT); +INSERT INTO t1 VALUES (1),(2),(3); +INSERT INTO t2 VALUES (2,1),(3,1); +SELECT * FROM t1 i WHERE 1 IN (SELECT l.id2 FROM t2 l WHERE i.id=l.id1); +DROP TABLE t1, t2; + +--echo End of 5.0 tests. diff --git a/sql/item_cmpfunc.cc b/sql/item_cmpfunc.cc index 0410c781590..4bfae376acc 100644 --- a/sql/item_cmpfunc.cc +++ b/sql/item_cmpfunc.cc @@ -1434,7 +1434,8 @@ bool Item_in_optimizer::fix_left(THD *thd, Item **ref) } not_null_tables_cache= args[0]->not_null_tables(); with_sum_func= args[0]->with_sum_func; - const_item_cache= args[0]->const_item(); + if ((const_item_cache= args[0]->const_item())) + cache->store(args[0]); return 0; } From 3f2044cd6ea79467335720744db7e2d9b575896e Mon Sep 17 00:00:00 2001 From: Alexey Botchkov Date: Fri, 21 Nov 2008 18:15:11 +0400 Subject: [PATCH 12/12] warning of notused function fixed --- sql/mysqld.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sql/mysqld.cc b/sql/mysqld.cc index 6db372c15e2..1ceabadc860 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -7351,6 +7351,7 @@ SHOW_VAR status_vars[]= { {NullS, NullS, SHOW_LONG} }; +#ifndef EMBEDDED_LIBRARY static void print_version(void) { set_server_version(); @@ -7362,7 +7363,6 @@ static void print_version(void) server_version,SYSTEM_TYPE,MACHINE_TYPE, MYSQL_COMPILATION_COMMENT); } -#ifndef EMBEDDED_LIBRARY static void usage(void) { if (!(default_charset_info= get_charset_by_csname(default_character_set_name,