summaryrefslogtreecommitdiff
path: root/sql
diff options
context:
space:
mode:
authorunknown <bell@sanja.is.com.ua>2004-10-15 17:02:17 +0300
committerunknown <bell@sanja.is.com.ua>2004-10-15 17:02:17 +0300
commit4b379778c822e780722cf08333ad461564113131 (patch)
tree99992d55390095263b9a6cd458b57764e2a7d8d5 /sql
parentf125849dd1fa2b7eaca3aea5f84d7d79fb201ec2 (diff)
parent8141b058ff58ce58079efb02a5b2d730a1b46c81 (diff)
downloadmariadb-git-4b379778c822e780722cf08333ad461564113131.tar.gz
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
Diffstat (limited to 'sql')
-rw-r--r--sql/sql_parse.cc36
1 files changed, 27 insertions, 9 deletions
diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc
index e7a013e19ea..44b0049529e 100644
--- a/sql/sql_parse.cc
+++ b/sql/sql_parse.cc
@@ -2005,6 +2005,7 @@ mysql_execute_command(THD *thd)
CHARSET_INFO *to_cs= thd->variables.collation_connection;
bool need_conversion;
user_var_entry *entry;
+ String *pstr= &str;
uint32 unused;
/*
Convert @var contents to string in connection character set. Although
@@ -2020,26 +2021,43 @@ mysql_execute_command(THD *thd)
String *pstr;
my_bool is_var_null;
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);
if (!pstr)
- send_error(thd, ER_OUT_OF_RESOURCES);
- DBUG_ASSERT(pstr == &str);
+ {
+ res= -1;
+ break; // EOM (error should be reported by allocator)
+ }
}
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);
+ }
+
need_conversion=
- String::needs_conversion(str.length(), str.charset(), to_cs, &unused);
+ String::needs_conversion(pstr->length(), pstr->charset(),
+ to_cs, &unused);
- query_len= need_conversion? (str.length() * to_cs->mbmaxlen) :
- str.length();
+ query_len= need_conversion? (pstr->length() * to_cs->mbmaxlen) :
+ pstr->length();
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)
- query_len= copy_and_convert(query_str, query_len, to_cs, str.ptr(),
- str.length(), str.charset());
+ query_len= copy_and_convert(query_str, query_len, to_cs, pstr->ptr(),
+ pstr->length(), pstr->charset());
else
- memcpy(query_str, str.ptr(), str.length());
+ memcpy(query_str, pstr->ptr(), pstr->length());
query_str[query_len]= 0;
}
else