Commit 6c4aa883 authored by unknown's avatar unknown
Browse files

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


include/mysql.h:
  member moved to the THD structure
libmysqld/lib_sql.cc:
  now we use THD member here
sql/sql_class.h:
  current_stmt member added for the embedded server
parent 0153d67e
Loading
Loading
Loading
Loading
+0 −6
Original line number Diff line number Diff line
@@ -270,12 +270,6 @@ typedef struct st_mysql
    from mysql_stmt_close if close had to cancel result set of this object.
  */
  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;

typedef struct st_mysql_res {
+5 −5
Original line number Diff line number Diff line
@@ -94,7 +94,7 @@ emb_advanced_command(MYSQL *mysql, enum enum_server_command command,
  mysql->affected_rows= ~(my_ulonglong) 0;
  mysql->field_count= 0;
  net->last_errno= 0;
  mysql->current_stmt= stmt;
  thd->current_stmt= stmt;

  thd->store_globals();				// Fix if more than one connect
  /* 
@@ -644,7 +644,7 @@ bool Protocol::send_fields(List<Item> *list, uint flag)
    DBUG_RETURN(0);

  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;
  if (!(client_field= mysql->fields= 
	(MYSQL_FIELD *)alloc_root(field_alloc, 
@@ -751,8 +751,8 @@ bool Protocol_prep::write()
  {
    MYSQL *mysql= thd->mysql;

    if (mysql->current_stmt)
      data= &mysql->current_stmt->result;
    if (thd->current_stmt)
      data= &thd->current_stmt->result;
    else
    {
      if (!(data= (MYSQL_DATA*) my_malloc(sizeof(MYSQL_DATA),
+6 −0
Original line number Diff line number Diff line
@@ -686,6 +686,12 @@ class THD :public ilink,
  char *extra_data;
  ulong extra_length;
  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
  NET	  net;				// client connection descriptor
  MEM_ROOT warn_root;			// For warnings and errors