summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libmysqld/lib_sql.cc5
-rw-r--r--sql/sql_class.h2
-rw-r--r--sql/sql_prepare.cc11
3 files changed, 16 insertions, 2 deletions
diff --git a/libmysqld/lib_sql.cc b/libmysqld/lib_sql.cc
index 94246135d37..2829074ce53 100644
--- a/libmysqld/lib_sql.cc
+++ b/libmysqld/lib_sql.cc
@@ -75,7 +75,10 @@ emb_advanced_command(MYSQL *mysql, enum enum_server_command command,
client). So we have to call free_old_query here
*/
free_old_query(mysql);
- if (!arg)
+
+ thd->extra_length= arg_length;
+ thd->extra_data= (char *)arg;
+ if (header)
{
arg= header;
arg_length= header_length;
diff --git a/sql/sql_class.h b/sql/sql_class.h
index da6aab8d266..3aa3932e98b 100644
--- a/sql/sql_class.h
+++ b/sql/sql_class.h
@@ -430,6 +430,8 @@ public:
unsigned long client_stmt_id;
unsigned long client_param_count;
struct st_mysql_bind *client_params;
+ char *extra_data;
+ ulong extra_length;
#endif
NET net; // client connection descriptor
LEX lex; // parse tree descriptor
diff --git a/sql/sql_prepare.cc b/sql/sql_prepare.cc
index 3089bd670b2..dd8d5613880 100644
--- a/sql/sql_prepare.cc
+++ b/sql/sql_prepare.cc
@@ -1088,16 +1088,17 @@ void mysql_stmt_get_longdata(THD *thd, char *pos, ulong packet_length)
PREP_STMT *stmt;
DBUG_ENTER("mysql_stmt_get_longdata");
+#ifndef EMBEDDED_LIBRARY
/* The following should never happen */
if (packet_length < MYSQL_LONG_DATA_HEADER+1)
{
my_error(ER_WRONG_ARGUMENTS, MYF(0), "get_longdata");
DBUG_VOID_RETURN;
}
+#endif
ulong stmt_id= uint4korr(pos);
uint param_number= uint2korr(pos+4);
- pos+= MYSQL_LONG_DATA_HEADER; // Point to data
if (!(stmt=find_prepared_statement(thd, stmt_id, "get_longdata")))
{
@@ -1109,6 +1110,7 @@ void mysql_stmt_get_longdata(THD *thd, char *pos, ulong packet_length)
DBUG_VOID_RETURN;
}
+#ifndef EMBEDDED_LIBRARY
if (param_number >= stmt->param_count)
{
/* Error will be sent in execute call */
@@ -1117,8 +1119,15 @@ void mysql_stmt_get_longdata(THD *thd, char *pos, ulong packet_length)
sprintf(stmt->last_error, ER(ER_WRONG_ARGUMENTS), "get_longdata");
DBUG_VOID_RETURN;
}
+ pos+= MYSQL_LONG_DATA_HEADER; // Point to data
+#endif
+
Item_param *param= *(stmt->param+param_number);
+#ifndef EMBEDDED_LIBRARY
param->set_longdata(pos, packet_length-MYSQL_LONG_DATA_HEADER-1);
+#else
+ param->set_longdata(thd->extra_data, thd->extra_length);
+#endif
stmt->long_data_used= 1;
DBUG_VOID_RETURN;
}