summaryrefslogtreecommitdiff
path: root/sql/item.cc
diff options
context:
space:
mode:
authorunknown <hf@deer.mysql.r18.ru>2002-12-16 18:58:55 +0400
committerunknown <hf@deer.mysql.r18.ru>2002-12-16 18:58:55 +0400
commit8db300257b8e457f63a61d27c16ffeb4e23127b1 (patch)
tree84a5d074a9241cebc5ac2f73a883ad6765c39100 /sql/item.cc
parentfce29f66fb95c1742f3a80c67ad92d21f1cc1544 (diff)
parent632717fd8d70ff187621df8a0839678ceae19ab5 (diff)
downloadmariadb-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.cc63
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