diff options
author | unknown <monty@mashka.mysql.fi> | 2002-12-20 14:58:27 +0200 |
---|---|---|
committer | unknown <monty@mashka.mysql.fi> | 2002-12-20 14:58:27 +0200 |
commit | 791e9fb37ea10f3e91e56e15c869906d90313c06 (patch) | |
tree | 1cf172e757bfa6aca7ae5af20ed7b0c727016120 /sql/set_var.cc | |
parent | 172d5acb6d2fc29517a70e069ae89ea67951555c (diff) | |
download | mariadb-git-791e9fb37ea10f3e91e56e15c869906d90313c06.tar.gz |
Changed thd variables max_join_size and select_limit to type ha_rows.
This fixed some optimization problems when using -DBIG_TABLES
Portabilty fixes for OpenUnix and HPUX
Added C and C++ version numbers to mysqlbug
Docs/mysqld_error.txt:
Added new error message
acinclude.m4:
Fix for configure problem on OpenUnix
configure.in:
Fix for OpenUnix
Added C and C++ versions to mysqlbug
mysql-test/r/variables.result:
Update of max_join_size handling
mysql-test/t/variables.test:
Update of max_join_size handling
mysys/Makefile.am:
Removed duplicate row
mysys/my_alloc.c:
Safety fixes (not fatal)
scripts/Makefile.am:
Added C and C++ compiler versions to mysqlbug
scripts/mysqlbug.sh:
Added C and C++ compiler versions to mysqlbug
sql/item_func.cc:
Fixed that user variables that changes are not threated as constants.
sql/item_func.h:
Fixed that user variables that changes are not threated as constants.
sql/mysqld.cc:
Changed thd variables max_join_size and select_limit to type ha_rows
sql/repl_failsafe.cc:
Removed not needed cast
sql/set_var.cc:
Changed thd variables max_join_size and select_limit to type ha_rows
sql/set_var.h:
Changed thd variables max_join_size and select_limit to type ha_rows
sql/slave.cc:
Removed not needed cast
sql/sql_class.h:
Changed thd variables max_join_size and select_limit to type ha_rows
sql/sql_parse.cc:
Removed not needed cast
Fixed security problem with mysql_drop_db()
sql/sql_show.cc:
Changed thd variables max_join_size and select_limit to type ha_rows
sql/structs.h:
Changed thd variables max_join_size and select_limit to type ha_rows
Diffstat (limited to 'sql/set_var.cc')
-rw-r--r-- | sql/set_var.cc | 69 |
1 files changed, 60 insertions, 9 deletions
diff --git a/sql/set_var.cc b/sql/set_var.cc index 28222740c14..8e0baa234da 100644 --- a/sql/set_var.cc +++ b/sql/set_var.cc @@ -149,11 +149,11 @@ sys_var_long_ptr sys_max_delayed_threads("max_delayed_threads", &max_insert_delayed_threads); sys_var_thd_ulong sys_max_heap_table_size("max_heap_table_size", &SV::max_heap_table_size); -sys_var_thd_ulong sys_max_join_size("max_join_size", +sys_var_thd_ha_rows sys_max_join_size("max_join_size", &SV::max_join_size, fix_max_join_size); #ifndef TO_BE_DELETED /* Alias for max_join_size */ -sys_var_thd_ulong sys_sql_max_join_size("sql_max_join_size", +sys_var_thd_ha_rows sys_sql_max_join_size("sql_max_join_size", &SV::max_join_size, fix_max_join_size); #endif @@ -275,7 +275,7 @@ static sys_var_thd_bit sys_unique_checks("unique_checks", /* Local state variables */ -static sys_var_thd_ulong sys_select_limit("sql_select_limit", +static sys_var_thd_ha_rows sys_select_limit("sql_select_limit", &SV::select_limit); static sys_var_timestamp sys_timestamp("timestamp"); static sys_var_last_insert_id sys_last_insert_id("last_insert_id"); @@ -576,7 +576,7 @@ static void fix_max_join_size(THD *thd, enum_var_type type) { if (type != OPT_GLOBAL) { - if (thd->variables.max_join_size == (ulong) HA_POS_ERROR) + if (thd->variables.max_join_size == HA_POS_ERROR) thd->options|= OPTION_BIG_SELECTS; else thd->options&= ~OPTION_BIG_SELECTS; @@ -723,12 +723,7 @@ bool sys_var_thd_ulong::update(THD *thd, set_var *var) if (option_limits) tmp= (ulong) getopt_ull_limit_value(tmp, option_limits); if (var->type == OPT_GLOBAL) - { - /* Lock is needed to make things safe on 32 bit systems */ - pthread_mutex_lock(&LOCK_global_system_variables); global_system_variables.*offset= (ulong) tmp; - pthread_mutex_unlock(&LOCK_global_system_variables); - } else thd->variables.*offset= (ulong) tmp; return 0; @@ -755,10 +750,60 @@ byte *sys_var_thd_ulong::value_ptr(THD *thd, enum_var_type type) } +bool sys_var_thd_ha_rows::update(THD *thd, set_var *var) +{ + ulonglong tmp= var->value->val_int(); + + /* Don't use bigger value than given with --maximum-variable-name=.. */ + if ((ha_rows) tmp > max_system_variables.*offset) + tmp= max_system_variables.*offset; + + if (option_limits) + tmp= (ha_rows) getopt_ull_limit_value(tmp, option_limits); + if (var->type == OPT_GLOBAL) + { + /* Lock is needed to make things safe on 32 bit systems */ + pthread_mutex_lock(&LOCK_global_system_variables); + global_system_variables.*offset= (ha_rows) tmp; + pthread_mutex_unlock(&LOCK_global_system_variables); + } + else + thd->variables.*offset= (ha_rows) tmp; + return 0; +} + + +void sys_var_thd_ha_rows::set_default(THD *thd, enum_var_type type) +{ + if (type == OPT_GLOBAL) + { + /* We will not come here if option_limits is not set */ + pthread_mutex_lock(&LOCK_global_system_variables); + global_system_variables.*offset= (ha_rows) option_limits->def_value; + pthread_mutex_unlock(&LOCK_global_system_variables); + } + else + thd->variables.*offset= global_system_variables.*offset; +} + + +byte *sys_var_thd_ha_rows::value_ptr(THD *thd, enum_var_type type) +{ + if (type == OPT_GLOBAL) + return (byte*) &(global_system_variables.*offset); + return (byte*) &(thd->variables.*offset); +} + + bool sys_var_thd_ulonglong::update(THD *thd, set_var *var) { if (var->type == OPT_GLOBAL) + { + /* Lock is needed to make things safe on 32 bit systems */ + pthread_mutex_lock(&LOCK_global_system_variables); global_system_variables.*offset= var->value->val_int(); + pthread_mutex_unlock(&LOCK_global_system_variables); + } else thd->variables.*offset= var->value->val_int(); return 0; @@ -768,7 +813,11 @@ bool sys_var_thd_ulonglong::update(THD *thd, set_var *var) void sys_var_thd_ulonglong::set_default(THD *thd, enum_var_type type) { if (type == OPT_GLOBAL) + { + pthread_mutex_lock(&LOCK_global_system_variables); global_system_variables.*offset= (ulong) option_limits->def_value; + pthread_mutex_unlock(&LOCK_global_system_variables); + } else thd->variables.*offset= global_system_variables.*offset; } @@ -871,6 +920,8 @@ Item *sys_var::item(THD *thd, enum_var_type var_type) return new Item_uint((int32) *(ulong*) value_ptr(thd, var_type)); case SHOW_LONGLONG: return new Item_int(*(longlong*) value_ptr(thd, var_type)); + case SHOW_HA_ROWS: + return new Item_int((longlong) *(ha_rows*) value_ptr(thd, var_type)); case SHOW_MY_BOOL: return new Item_int((int32) *(my_bool*) value_ptr(thd, var_type),1); case SHOW_CHAR: |