diff options
author | Sergei Golubchik <serg@mysql.com> | 2009-12-22 10:35:56 +0100 |
---|---|---|
committer | Sergei Golubchik <serg@mysql.com> | 2009-12-22 10:35:56 +0100 |
commit | 1ad5bb1a69656808312efc40ca12c4897f8ea128 (patch) | |
tree | ffef2f9db240392c7f322d05058dfd7ea8c01a9d /sql/item_func.cc | |
parent | 22c65346986d63c906e1d5a57941cadc367c2a9f (diff) | |
download | mariadb-git-1ad5bb1a69656808312efc40ca12c4897f8ea128.tar.gz |
WL#4738 streamline/simplify @@variable creation process
Bug#16565 mysqld --help --verbose does not order variablesBug#20413 sql_slave_skip_counter is not shown in show variables
Bug#20415 Output of mysqld --help --verbose is incomplete
Bug#25430 variable not found in SELECT @@global.ft_max_word_len;
Bug#32902 plugin variables don't know their names
Bug#34599 MySQLD Option and Variable Reference need to be consistent in formatting!
Bug#34829 No default value for variable and setting default does not raise error
Bug#34834 ? Is accepted as a valid sql mode
Bug#34878 Few variables have default value according to documentation but error occurs
Bug#34883 ft_boolean_syntax cant be assigned from user variable to global var.
Bug#37187 `INFORMATION_SCHEMA`.`GLOBAL_VARIABLES`: inconsistent status
Bug#40988 log_output_basic.test succeeded though syntactically false.
Bug#41010 enum-style command-line options are not honoured (maria.maria-recover fails)
Bug#42103 Setting key_buffer_size to a negative value may lead to very large allocations
Bug#44691 Some plugins configured as MYSQL_PLUGIN_MANDATORY in can be disabled
Bug#44797 plugins w/o command-line options have no disabling option in --help
Bug#46314 string system variables don't support expressions
Bug#46470 sys_vars.max_binlog_cache_size_basic_32 is broken
Bug#46586 When using the plugin interface the type "set" for options caused a crash.
Bug#47212 Crash in DBUG_PRINT in mysqltest.cc when trying to print octal number
Bug#48758 mysqltest crashes on sys_vars.collation_server_basic in gcov builds
Bug#49417 some complaints about mysqld --help --verbose output
Bug#49540 DEFAULT value of binlog_format isn't the default value
Bug#49640 ambiguous option '--skip-skip-myisam' (double skip prefix)
Bug#49644 init_connect and \0
Bug#49645 init_slave and multi-byte characters
Bug#49646 mysql --show-warnings crashes when server dies
CMakeLists.txt:
Bug#44691 Some plugins configured as MYSQL_PLUGIN_MANDATORY in can be disabled
client/mysql.cc:
don't crash with --show-warnings when mysqld dies
config/ac-macros/plugins.m4:
Bug#44691 Some plugins configured as MYSQL_PLUGIN_MANDATORY in can be disabled
include/my_getopt.h:
comments
include/my_pthread.h:
fix double #define
mysql-test/mysql-test-run.pl:
run sys_vars suite by default
properly recognize envirinment variables (e.g. MTR_MAX_SAVE_CORE) set to 0
escape gdb command line arguments
mysql-test/suite/sys_vars/r/rpl_init_slave_func.result:
init_slave+utf8 bug
mysql-test/suite/sys_vars/t/rpl_init_slave_func.test:
init_slave+utf8 bug
mysys/my_getopt.c:
Bug#34599 MySQLD Option and Variable Reference need to be consistent in formatting!
Bug#46586 When using the plugin interface the type "set" for options caused a crash.
Bug#49640 ambiguous option '--skip-skip-myisam' (double skip prefix)
mysys/typelib.c:
support for flagset
sql/ha_ndbcluster.cc:
backport from telco tree
sql/item_func.cc:
Bug#49644 init_connect and \0
Bug#49645 init_slave and multi-byte characters
sql/sql_builtin.cc.in:
Bug#44691 Some plugins configured as MYSQL_PLUGIN_MANDATORY in can be disabled
sql/sql_plugin.cc:
Bug#44691 Some plugins configured as MYSQL_PLUGIN_MANDATORY in can be disabled
Bug#32902 plugin variables don't know their names
Bug#44797 plugins w/o command-line options have no disabling option in --help
sql/sys_vars.cc:
all server variables are defined here
storage/myisam/ft_parser.c:
remove unnecessary updates of param->quot
storage/myisam/ha_myisam.cc:
myisam_* variables belong here
strings/my_vsnprintf.c:
%o and %llx
unittest/mysys/my_vsnprintf-t.c:
%o and %llx tests
vio/viosocket.c:
bugfix: fix @@wait_timeout to work with socket timeouts (vs. alarm thread)
Diffstat (limited to 'sql/item_func.cc')
-rw-r--r-- | sql/item_func.cc | 63 |
1 files changed, 43 insertions, 20 deletions
diff --git a/sql/item_func.cc b/sql/item_func.cc index 6f14e69e101..ec0f76717fd 100644 --- a/sql/item_func.cc +++ b/sql/item_func.cc @@ -37,6 +37,7 @@ #include "sp_head.h" #include "sp_rcontext.h" #include "sp.h" +#include "set_var.h" #ifdef NO_EMBEDDED_ACCESS_CHECKS #define sp_restore_security_context(A,B) while (0) {} @@ -4984,7 +4985,7 @@ void Item_func_get_system_var::fix_length_and_dec() if (var_type != OPT_DEFAULT) { my_error(ER_INCORRECT_GLOBAL_LOCAL_VAR, MYF(0), - var->name, var_type == OPT_GLOBAL ? "SESSION" : "GLOBAL"); + var->name.str, var_type == OPT_GLOBAL ? "SESSION" : "GLOBAL"); return; } /* As there was no local variable, return the global value */ @@ -5001,22 +5002,38 @@ void Item_func_get_system_var::fix_length_and_dec() decimals=0; break; case SHOW_LONGLONG: - unsigned_flag= FALSE; + unsigned_flag= TRUE; max_length= MY_INT64_NUM_DECIMAL_DIGITS; decimals=0; break; case SHOW_CHAR: case SHOW_CHAR_PTR: pthread_mutex_lock(&LOCK_global_system_variables); - cptr= var->show_type() == SHOW_CHAR_PTR ? - *(char**) var->value_ptr(current_thd, var_type, &component) : - (char*) var->value_ptr(current_thd, var_type, &component); + cptr= var->show_type() == SHOW_CHAR ? + (char*) var->value_ptr(current_thd, var_type, &component) : + *(char**) var->value_ptr(current_thd, var_type, &component); if (cptr) - max_length= strlen(cptr) * system_charset_info->mbmaxlen; + max_length= system_charset_info->cset->numchars(system_charset_info, + cptr, + cptr + strlen(cptr)); pthread_mutex_unlock(&LOCK_global_system_variables); collation.set(system_charset_info, DERIVATION_SYSCONST); + max_length*= system_charset_info->mbmaxlen; decimals=NOT_FIXED_DEC; break; + case SHOW_LEX_STRING: + { + pthread_mutex_lock(&LOCK_global_system_variables); + LEX_STRING *ls= ((LEX_STRING*)var->value_ptr(current_thd, var_type, &component)); + max_length= system_charset_info->cset->numchars(system_charset_info, + ls->str, + ls->str + ls->length); + pthread_mutex_unlock(&LOCK_global_system_variables); + collation.set(system_charset_info, DERIVATION_SYSCONST); + max_length*= system_charset_info->mbmaxlen; + decimals=NOT_FIXED_DEC; + } + break; case SHOW_BOOL: case SHOW_MY_BOOL: unsigned_flag= FALSE; @@ -5029,7 +5046,7 @@ void Item_func_get_system_var::fix_length_and_dec() max_length= DBL_DIG + 6; break; default: - my_error(ER_VAR_CANT_BE_READ, MYF(0), var->name); + my_error(ER_VAR_CANT_BE_READ, MYF(0), var->name.str); break; } } @@ -5054,11 +5071,12 @@ enum Item_result Item_func_get_system_var::result_type() const return INT_RESULT; case SHOW_CHAR: case SHOW_CHAR_PTR: + case SHOW_LEX_STRING: return STRING_RESULT; case SHOW_DOUBLE: return REAL_RESULT; default: - my_error(ER_VAR_CANT_BE_READ, MYF(0), var->name); + my_error(ER_VAR_CANT_BE_READ, MYF(0), var->name.str); return STRING_RESULT; // keep the compiler happy } } @@ -5077,11 +5095,12 @@ enum_field_types Item_func_get_system_var::field_type() const return MYSQL_TYPE_LONGLONG; case SHOW_CHAR: case SHOW_CHAR_PTR: + case SHOW_LEX_STRING: return MYSQL_TYPE_VARCHAR; case SHOW_DOUBLE: return MYSQL_TYPE_DOUBLE; default: - my_error(ER_VAR_CANT_BE_READ, MYF(0), var->name); + my_error(ER_VAR_CANT_BE_READ, MYF(0), var->name.str); return MYSQL_TYPE_VARCHAR; // keep the compiler happy } } @@ -5142,7 +5161,7 @@ longlong Item_func_get_system_var::val_int() { case SHOW_INT: get_sys_var_safe (uint); case SHOW_LONG: get_sys_var_safe (ulong); - case SHOW_LONGLONG: get_sys_var_safe (longlong); + case SHOW_LONGLONG: get_sys_var_safe (ulonglong); case SHOW_HA_ROWS: get_sys_var_safe (ha_rows); case SHOW_BOOL: get_sys_var_safe (bool); case SHOW_MY_BOOL: get_sys_var_safe (my_bool); @@ -5157,6 +5176,7 @@ longlong Item_func_get_system_var::val_int() } case SHOW_CHAR: case SHOW_CHAR_PTR: + case SHOW_LEX_STRING: { String *str_val= val_str(NULL); @@ -5176,7 +5196,7 @@ longlong Item_func_get_system_var::val_int() } default: - my_error(ER_VAR_CANT_BE_READ, MYF(0), var->name); + my_error(ER_VAR_CANT_BE_READ, MYF(0), var->name.str); return 0; // keep the compiler happy } } @@ -5216,14 +5236,18 @@ String* Item_func_get_system_var::val_str(String* str) { case SHOW_CHAR: case SHOW_CHAR_PTR: + case SHOW_LEX_STRING: { pthread_mutex_lock(&LOCK_global_system_variables); - char *cptr= var->show_type() == SHOW_CHAR_PTR ? - *(char**) var->value_ptr(thd, var_type, &component) : - (char*) var->value_ptr(thd, var_type, &component); + char *cptr= var->show_type() == SHOW_CHAR ? + (char*) var->value_ptr(thd, var_type, &component) : + *(char**) var->value_ptr(thd, var_type, &component); if (cptr) { - if (str->copy(cptr, strlen(cptr), collation.collation)) + size_t len= var->show_type() == SHOW_LEX_STRING ? + ((LEX_STRING*)(var->value_ptr(thd, var_type, &component)))->length : + strlen(cptr); + if (str->copy(cptr, len, collation.collation)) { null_value= TRUE; str= NULL; @@ -5251,7 +5275,7 @@ String* Item_func_get_system_var::val_str(String* str) break; default: - my_error(ER_VAR_CANT_BE_READ, MYF(0), var->name); + my_error(ER_VAR_CANT_BE_READ, MYF(0), var->name.str); str= NULL; break; } @@ -5309,12 +5333,11 @@ double Item_func_get_system_var::val_real() cache_present|= GET_SYS_VAR_CACHE_DOUBLE; return cached_dval; case SHOW_CHAR: + case SHOW_LEX_STRING: case SHOW_CHAR_PTR: { - char *cptr; - pthread_mutex_lock(&LOCK_global_system_variables); - cptr= var->show_type() == SHOW_CHAR ? + char *cptr= var->show_type() == SHOW_CHAR ? (char*) var->value_ptr(thd, var_type, &component) : *(char**) var->value_ptr(thd, var_type, &component); if (cptr) @@ -5343,7 +5366,7 @@ double Item_func_get_system_var::val_real() cached_null_value= null_value; return cached_dval; default: - my_error(ER_VAR_CANT_BE_READ, MYF(0), var->name); + my_error(ER_VAR_CANT_BE_READ, MYF(0), var->name.str); return 0; } } |