diff options
author | unknown <hf@deer.mysql.r18.ru> | 2002-12-16 18:58:55 +0400 |
---|---|---|
committer | unknown <hf@deer.mysql.r18.ru> | 2002-12-16 18:58:55 +0400 |
commit | 8db300257b8e457f63a61d27c16ffeb4e23127b1 (patch) | |
tree | 84a5d074a9241cebc5ac2f73a883ad6765c39100 /sql/item.cc | |
parent | fce29f66fb95c1742f3a80c67ad92d21f1cc1544 (diff) | |
parent | 632717fd8d70ff187621df8a0839678ceae19ab5 (diff) | |
download | mariadb-git-8db300257b8e457f63a61d27c16ffeb4e23127b1.tar.gz |
Merging
BitKeeper/etc/logging_ok:
auto-union
sql/field.cc:
Auto merged
sql/field.h:
Auto merged
sql/item_func.cc:
Auto merged
sql/mysql_priv.h:
Auto merged
sql/repl_failsafe.cc:
Auto merged
sql/set_var.cc:
Auto merged
sql/slave.cc:
Auto merged
sql/sql_class.cc:
Auto merged
sql/sql_class.h:
Auto merged
sql/sql_parse.cc:
Auto merged
sql/sql_prepare.cc:
Auto merged
sql/sql_repl.cc:
Auto merged
sql/sql_select.cc:
Auto merged
Diffstat (limited to 'sql/item.cc')
-rw-r--r-- | sql/item.cc | 63 |
1 files changed, 62 insertions, 1 deletions
diff --git a/sql/item.cc b/sql/item.cc index d05578c800a..10d26060278 100644 --- a/sql/item.cc +++ b/sql/item.cc @@ -569,7 +569,9 @@ bool Item_field::fix_fields(THD *thd, TABLE_LIST *tables, Item **ref) cause error ER_NON_UNIQ_ERROR in find_field_in_tables. */ SELECT_LEX *last= 0; - +#ifdef EMBEDDED_LIBRARY + thd->net.last_errno= 0; +#endif Item **refer= (Item **)not_found_item; // Prevent using outer fields in subselects, that is not supported now SELECT_LEX *cursel=(SELECT_LEX *) thd->lex.current_select; @@ -1006,6 +1008,65 @@ bool Item_field::send(Protocol *protocol, String *buffer) return protocol->store(result_field); } +#ifdef EMBEDDED_LIBRARY +bool Item::embedded_send(const CONVERT *convert, CHARSET_INFO *charset, MEM_ROOT *alloc, + char **result, ulong *length) +{ + char buff[MAX_FIELD_WIDTH]; + String s(buff, sizeof(buff), charset), *value; + if (!(value=val_str(&s)) || + !(*result=alloc_root(alloc, value->length() + 1))) + { + *result= NULL; + *length= 0; + return false; + } + if (!(*result=alloc_root(alloc, value->length() + 1))) + return true; + *length= value->length(); + if (convert) + convert->convert_back(*result, value->ptr(), *length); + else + memcpy(*result, value->ptr(), *length); + (*result)[*length]= 0; + return false; +} + +bool Item_null::embedded_send(const CONVERT *convert, CHARSET_INFO *charset, MEM_ROOT *alloc, + char **result, ulong *length) +{ + *result= NULL; + *length= 0; + return false; +} + +bool Item_field::embedded_send(const CONVERT *convert, CHARSET_INFO *charset, MEM_ROOT *alloc, + char **result, ulong *length) +{ + if (result_field->is_null()) + { + *result= NULL; + *length= 0; + return false; + } + + char buff[MAX_FIELD_WIDTH]; + String tmp(buff,sizeof(buff),default_charset_info); + result_field->val_str(&tmp,&tmp); + + if (!(*result=alloc_root(alloc, tmp.length() + 1))) + return true; + *length= tmp.length(); + if (convert) + convert->convert_back(*result, tmp.ptr(), *length); + else + memcpy(*result, tmp.ptr(), *length); + (*result)[*length]= 0; + return false; +} + +#endif + /* This is used for HAVING clause Find field in select list having the same name |