mirror of
https://github.com/MariaDB/server.git
synced 2025-08-29 00:08:14 +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:
@@ -2005,6 +2005,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
|
||||||
@@ -2020,26 +2021,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