Bug #23427 (incompatible ABI change)

the incompatibility was caused by current_stmt member added to the MYSQL
structure.
It's possible to move it to THD structure instead which saves ABI
parent 0612a212
...@@ -270,12 +270,6 @@ typedef struct st_mysql ...@@ -270,12 +270,6 @@ typedef struct st_mysql
from mysql_stmt_close if close had to cancel result set of this object. from mysql_stmt_close if close had to cancel result set of this object.
*/ */
my_bool *unbuffered_fetch_owner; my_bool *unbuffered_fetch_owner;
/*
In embedded server it points to the statement that is processed
in the current query. We store some results directly in statement
fields then.
*/
struct st_mysql_stmt *current_stmt;
} MYSQL; } MYSQL;
typedef struct st_mysql_res { typedef struct st_mysql_res {
......
...@@ -94,7 +94,7 @@ emb_advanced_command(MYSQL *mysql, enum enum_server_command command, ...@@ -94,7 +94,7 @@ emb_advanced_command(MYSQL *mysql, enum enum_server_command command,
mysql->affected_rows= ~(my_ulonglong) 0; mysql->affected_rows= ~(my_ulonglong) 0;
mysql->field_count= 0; mysql->field_count= 0;
net->last_errno= 0; net->last_errno= 0;
mysql->current_stmt= stmt; thd->current_stmt= stmt;
thd->store_globals(); // Fix if more than one connect thd->store_globals(); // Fix if more than one connect
/* /*
...@@ -644,8 +644,8 @@ bool Protocol::send_fields(List<Item> *list, uint flag) ...@@ -644,8 +644,8 @@ bool Protocol::send_fields(List<Item> *list, uint flag)
DBUG_RETURN(0); DBUG_RETURN(0);
field_count= list->elements; field_count= list->elements;
field_alloc= mysql->current_stmt ? &mysql->current_stmt->mem_root : field_alloc= thd->current_stmt ? &thd->current_stmt->mem_root :
&mysql->field_alloc; &mysql->field_alloc;
if (!(client_field= mysql->fields= if (!(client_field= mysql->fields=
(MYSQL_FIELD *)alloc_root(field_alloc, (MYSQL_FIELD *)alloc_root(field_alloc,
sizeof(MYSQL_FIELD) * field_count))) sizeof(MYSQL_FIELD) * field_count)))
...@@ -751,8 +751,8 @@ bool Protocol_prep::write() ...@@ -751,8 +751,8 @@ bool Protocol_prep::write()
{ {
MYSQL *mysql= thd->mysql; MYSQL *mysql= thd->mysql;
if (mysql->current_stmt) if (thd->current_stmt)
data= &mysql->current_stmt->result; data= &thd->current_stmt->result;
else else
{ {
if (!(data= (MYSQL_DATA*) my_malloc(sizeof(MYSQL_DATA), if (!(data= (MYSQL_DATA*) my_malloc(sizeof(MYSQL_DATA),
......
...@@ -686,6 +686,12 @@ class THD :public ilink, ...@@ -686,6 +686,12 @@ class THD :public ilink,
char *extra_data; char *extra_data;
ulong extra_length; ulong extra_length;
String query_rest; String query_rest;
/*
In embedded server it points to the statement that is processed
in the current query. We store some results directly in statement
fields then.
*/
struct st_mysql_stmt *current_stmt;
#endif #endif
NET net; // client connection descriptor NET net; // client connection descriptor
MEM_ROOT warn_root; // For warnings and errors MEM_ROOT warn_root; // For warnings and errors
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment