1
0
mirror of https://github.com/MariaDB/server.git synced 2025-08-08 11:22:35 +03:00
This commit is contained in:
Tatiana A. Nurnberg
2010-11-24 08:50:04 +00:00
5 changed files with 122 additions and 20 deletions

View File

@@ -1579,11 +1579,16 @@ void sys_var_long_ptr_global::set_default(THD *thd, enum_var_type type)
}
bool sys_var_ulonglong_ptr::check(THD *thd, set_var *var)
{
return get_unsigned(thd, var, 0, GET_ULL);
}
bool sys_var_ulonglong_ptr::update(THD *thd, set_var *var)
{
ulonglong tmp= var->save_result.ulonglong_value;
pthread_mutex_lock(&LOCK_global_system_variables);
bound_unsigned(thd, &tmp, option_limits);
*value= (ulonglong) tmp;
pthread_mutex_unlock(&LOCK_global_system_variables);
return 0;
@@ -1675,25 +1680,30 @@ uchar *sys_var_thd_ulong::value_ptr(THD *thd, enum_var_type type,
}
bool sys_var_thd_ha_rows::check(THD *thd, set_var *var)
{
return get_unsigned(thd, var, max_system_variables.*offset,
#ifdef BIG_TABLES
GET_ULL
#else
GET_ULONG
#endif
);
}
bool sys_var_thd_ha_rows::update(THD *thd, set_var *var)
{
ulonglong tmp= var->save_result.ulonglong_value;
/* Don't use bigger value than given with --maximum-variable-name=.. */
if ((ha_rows) tmp > max_system_variables.*offset)
tmp= max_system_variables.*offset;
bound_unsigned(thd, &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_lock(&LOCK_global_system_variables);
global_system_variables.*offset= (ha_rows)
var->save_result.ulonglong_value;
pthread_mutex_unlock(&LOCK_global_system_variables);
}
else
thd->variables.*offset= (ha_rows) tmp;
thd->variables.*offset= (ha_rows) var->save_result.ulonglong_value;
return 0;
}
@@ -2305,6 +2315,12 @@ uchar *sys_var_key_cache_param::value_ptr(THD *thd, enum_var_type type,
}
bool sys_var_key_buffer_size::check(THD *thd, set_var *var)
{
return get_unsigned(thd, var, 0, GET_ULL);
}
bool sys_var_key_buffer_size::update(THD *thd, set_var *var)
{
ulonglong tmp= var->save_result.ulonglong_value;
@@ -2318,10 +2334,10 @@ bool sys_var_key_buffer_size::update(THD *thd, set_var *var)
pthread_mutex_lock(&LOCK_global_system_variables);
key_cache= get_key_cache(base_name);
if (!key_cache)
{
/* Key cache didn't exists */
/* Key cache didn't exist */
if (!tmp) // Tried to delete cache
goto end; // Ok, nothing to do
if (!(key_cache= create_key_cache(base_name->str, base_name->length)))
@@ -2371,7 +2387,6 @@ bool sys_var_key_buffer_size::update(THD *thd, set_var *var)
goto end;
}
bound_unsigned(thd, &tmp, option_limits);
key_cache->param_buff_size= (ulonglong) tmp;
/* If key cache didn't exist initialize it, else resize it */
@@ -2388,10 +2403,19 @@ bool sys_var_key_buffer_size::update(THD *thd, set_var *var)
end:
pthread_mutex_unlock(&LOCK_global_system_variables);
var->save_result.ulonglong_value = SIZE_T_MAX;
return error;
}
bool sys_var_key_cache_long::check(THD *thd, set_var *var)
{
return get_unsigned(thd, var, 0, GET_ULONG);
}
/**
@todo
Abort if some other thread is changing the key cache.
@@ -2400,7 +2424,6 @@ end:
*/
bool sys_var_key_cache_long::update(THD *thd, set_var *var)
{
ulonglong tmp= var->value->val_int();
LEX_STRING *base_name= &var->base;
bool error= 0;
@@ -2425,8 +2448,8 @@ bool sys_var_key_cache_long::update(THD *thd, set_var *var)
if (key_cache->in_init)
goto end;
bound_unsigned(thd, &tmp, option_limits);
*((ulong*) (((char*) key_cache) + offset))= (ulong) tmp;
*((ulong*) (((char*) key_cache) + offset))= (ulong)
var->save_result.ulonglong_value;
/*
Don't create a new key cache if it didn't exist