mirror of
https://github.com/MariaDB/server.git
synced 2025-07-07 06:01:31 +03:00
Merge sanja.is.com.ua:/home/bell/mysql/bk/mysql-4.1
into sanja.is.com.ua:/home/bell/mysql/bk/work-sub-4.1
This commit is contained in:
@ -222,7 +222,7 @@ THD::THD()
|
|||||||
|
|
||||||
init();
|
init();
|
||||||
/* Initialize sub structures */
|
/* Initialize sub structures */
|
||||||
init_alloc_root(&warn_root, WARN_ALLOC_BLOCK_SIZE, WARN_ALLOC_PREALLOC_SIZE);
|
init_sql_alloc(&warn_root, WARN_ALLOC_BLOCK_SIZE, WARN_ALLOC_PREALLOC_SIZE);
|
||||||
user_connect=(USER_CONN *)0;
|
user_connect=(USER_CONN *)0;
|
||||||
hash_init(&user_vars, &my_charset_bin, USER_VARS_HASH_SIZE, 0, 0,
|
hash_init(&user_vars, &my_charset_bin, USER_VARS_HASH_SIZE, 0, 0,
|
||||||
(hash_get_key) get_var_key,
|
(hash_get_key) get_var_key,
|
||||||
@ -258,7 +258,7 @@ THD::THD()
|
|||||||
transaction.trans_log.end_of_file= max_binlog_cache_size;
|
transaction.trans_log.end_of_file= max_binlog_cache_size;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
init_alloc_root(&transaction.mem_root, ALLOC_ROOT_MIN_BLOCK_SIZE, 0);
|
init_sql_alloc(&transaction.mem_root, ALLOC_ROOT_MIN_BLOCK_SIZE, 0);
|
||||||
{
|
{
|
||||||
ulong tmp=sql_rnd_with_mutex();
|
ulong tmp=sql_rnd_with_mutex();
|
||||||
randominit(&rand, tmp + (ulong) &rand, tmp + (ulong) ::query_id);
|
randominit(&rand, tmp + (ulong) &rand, tmp + (ulong) ::query_id);
|
||||||
@ -1421,7 +1421,7 @@ Item_arena::Item_arena(bool init_mem_root)
|
|||||||
state(CONVENTIONAL_EXECUTION)
|
state(CONVENTIONAL_EXECUTION)
|
||||||
{
|
{
|
||||||
if (init_mem_root)
|
if (init_mem_root)
|
||||||
init_alloc_root(&mem_root, ALLOC_ROOT_MIN_BLOCK_SIZE, 0);
|
init_sql_alloc(&mem_root, ALLOC_ROOT_MIN_BLOCK_SIZE, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -2018,6 +2018,7 @@ mysql_execute_command(THD *thd)
|
|||||||
CHARSET_INFO *to_cs= thd->variables.collation_connection;
|
CHARSET_INFO *to_cs= thd->variables.collation_connection;
|
||||||
bool need_conversion;
|
bool need_conversion;
|
||||||
user_var_entry *entry;
|
user_var_entry *entry;
|
||||||
|
String *pstr= &str;
|
||||||
uint32 unused;
|
uint32 unused;
|
||||||
/*
|
/*
|
||||||
Convert @var contents to string in connection character set. Although
|
Convert @var contents to string in connection character set. Although
|
||||||
@ -2033,26 +2034,43 @@ mysql_execute_command(THD *thd)
|
|||||||
String *pstr;
|
String *pstr;
|
||||||
my_bool is_var_null;
|
my_bool is_var_null;
|
||||||
pstr= entry->val_str(&is_var_null, &str, NOT_FIXED_DEC);
|
pstr= entry->val_str(&is_var_null, &str, NOT_FIXED_DEC);
|
||||||
|
/*
|
||||||
|
NULL value of variable checked early as entry->value so here
|
||||||
|
we can't get NULL in normal conditions
|
||||||
|
*/
|
||||||
DBUG_ASSERT(!is_var_null);
|
DBUG_ASSERT(!is_var_null);
|
||||||
if (!pstr)
|
if (!pstr)
|
||||||
send_error(thd, ER_OUT_OF_RESOURCES);
|
{
|
||||||
DBUG_ASSERT(pstr == &str);
|
res= -1;
|
||||||
|
break; // EOM (error should be reported by allocator)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
variable absent or equal to NULL, so we need to set variable to
|
||||||
|
something reasonable to get readable error message during parsing
|
||||||
|
*/
|
||||||
str.set("NULL", 4, &my_charset_latin1);
|
str.set("NULL", 4, &my_charset_latin1);
|
||||||
need_conversion=
|
}
|
||||||
String::needs_conversion(str.length(), str.charset(), to_cs, &unused);
|
|
||||||
|
|
||||||
query_len= need_conversion? (str.length() * to_cs->mbmaxlen) :
|
need_conversion=
|
||||||
str.length();
|
String::needs_conversion(pstr->length(), pstr->charset(),
|
||||||
|
to_cs, &unused);
|
||||||
|
|
||||||
|
query_len= need_conversion? (pstr->length() * to_cs->mbmaxlen) :
|
||||||
|
pstr->length();
|
||||||
if (!(query_str= alloc_root(&thd->mem_root, query_len+1)))
|
if (!(query_str= alloc_root(&thd->mem_root, query_len+1)))
|
||||||
send_error(thd, ER_OUT_OF_RESOURCES);
|
{
|
||||||
|
res= -1;
|
||||||
|
break; // EOM (error should be reported by allocator)
|
||||||
|
}
|
||||||
|
|
||||||
if (need_conversion)
|
if (need_conversion)
|
||||||
query_len= copy_and_convert(query_str, query_len, to_cs, str.ptr(),
|
query_len= copy_and_convert(query_str, query_len, to_cs, pstr->ptr(),
|
||||||
str.length(), str.charset());
|
pstr->length(), pstr->charset());
|
||||||
else
|
else
|
||||||
memcpy(query_str, str.ptr(), str.length());
|
memcpy(query_str, pstr->ptr(), pstr->length());
|
||||||
query_str[query_len]= 0;
|
query_str[query_len]= 0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
Reference in New Issue
Block a user