Loading include/mysql.h +1 −0 Original line number Diff line number Diff line Loading @@ -627,6 +627,7 @@ typedef struct st_mysql_methods MYSQL_RES * (*use_result)(MYSQL *mysql); void (*fetch_lengths)(unsigned long *to, MYSQL_ROW column, unsigned int field_count); void (*flush_use_result)(MYSQL *mysql); #if !defined(MYSQL_SERVER) || defined(EMBEDDED_LIBRARY) MYSQL_FIELD * (*list_fields)(MYSQL *mysql); my_bool (*read_prepare_result)(MYSQL *mysql, MYSQL_STMT *stmt); Loading include/sql_common.h +0 −1 Original line number Diff line number Diff line Loading @@ -25,7 +25,6 @@ extern "C" { MYSQL_FIELD *unpack_fields(MYSQL_DATA *data,MEM_ROOT *alloc,uint fields, my_bool default_value, uint server_capabilities); void free_rows(MYSQL_DATA *cur); void flush_use_result(MYSQL *mysql); my_bool mysql_autenticate(MYSQL *mysql, const char *passwd); void free_old_query(MYSQL *mysql); void end_server(MYSQL *mysql); Loading libmysql/libmysql.c +2 −2 Original line number Diff line number Diff line Loading @@ -4392,7 +4392,7 @@ my_bool STDCALL mysql_stmt_free_result(MYSQL_STMT *stmt) if (mysql->status != MYSQL_STATUS_READY) { /* There is a result set and it belongs to this statement */ flush_use_result(mysql); (*mysql->methods->flush_use_result)(mysql); mysql->status= MYSQL_STATUS_READY; } } Loading Loading @@ -4442,7 +4442,7 @@ my_bool STDCALL mysql_stmt_close(MYSQL_STMT *stmt) Flush result set of the connection. If it does not belong to this statement, set a warning. */ flush_use_result(mysql); (*mysql->methods->flush_use_result)(mysql); if (mysql->unbuffered_fetch_owner) *mysql->unbuffered_fetch_owner= TRUE; mysql->status= MYSQL_STATUS_READY; Loading libmysqld/lib_sql.cc +34 −11 Original line number Diff line number Diff line Loading @@ -84,6 +84,7 @@ emb_advanced_command(MYSQL *mysql, enum enum_server_command command, thd->clear_error(); mysql->affected_rows= ~(my_ulonglong) 0; mysql->field_count= 0; net->last_errno= 0; thd->store_globals(); // Fix if more than one connect /* Loading @@ -107,17 +108,38 @@ emb_advanced_command(MYSQL *mysql, enum enum_server_command command, if (!skip_check) result= thd->net.last_errno ? -1 : 0; /* If mysql->field_count is set it means the parsing of the query was OK and metadata was returned (see Protocol::send_fields). In this case we postpone the error to be returned in mysql_stmt_store_result (see emb_read_rows) to behave just as standalone server. */ if (!mysql->field_count) embedded_get_error(mysql); mysql->server_status= thd->server_status; mysql->warning_count= ((THD*)mysql->thd)->total_warn_count; return result; } static void emb_flush_use_result(MYSQL *mysql) { MYSQL_DATA *data= ((THD*)(mysql->thd))->data; if (data) { free_rows(data); ((THD*)(mysql->thd))->data= NULL; } } static MYSQL_DATA * emb_read_rows(MYSQL *mysql, MYSQL_FIELD *mysql_fields __attribute__((unused)), unsigned int fields __attribute__((unused))) { MYSQL_DATA *result= ((THD*)mysql->thd)->data; embedded_get_error(mysql); if (mysql->net.last_errno) return NULL; if (!result) { if (!(result=(MYSQL_DATA*) my_malloc(sizeof(MYSQL_DATA), Loading Loading @@ -227,6 +249,9 @@ int emb_read_binary_rows(MYSQL_STMT *stmt) int emb_unbuffered_fetch(MYSQL *mysql, char **row) { MYSQL_DATA *data= ((THD*)mysql->thd)->data; embedded_get_error(mysql); if (mysql->net.last_errno) return mysql->net.last_errno; if (!data || !data->data) { *row= NULL; Loading Loading @@ -293,6 +318,7 @@ MYSQL_METHODS embedded_methods= emb_read_rows, emb_mysql_store_result, emb_fetch_lengths, emb_flush_use_result, emb_list_fields, emb_read_prepare_result, emb_stmt_execute, Loading Loading @@ -442,14 +468,6 @@ int init_embedded_server(int argc, char **argv, char **groups) } } /* Update mysqld variables from client variables if set The client variables are set also by get_one_option() in mysqld.cc */ if (max_allowed_packet) global_system_variables.max_allowed_packet= max_allowed_packet; if (net_buffer_length) global_system_variables.net_buffer_length= net_buffer_length; return 0; } Loading Loading @@ -478,18 +496,20 @@ void *create_embedded_thd(int client_flag, char *db) if (thd->store_globals()) { fprintf(stderr,"store_globals failed.\n"); return NULL; goto err; } thd->mysys_var= my_thread_var; thd->dbug_thread_id= my_thread_id(); thd->thread_stack= (char*) &thd; /* TODO - add init_connect command execution */ thd->proc_info=0; // Remove 'login' thd->command=COM_SLEEP; thd->version=refresh_version; thd->set_time(); init_sql_alloc(&thd->mem_root,8192,8192); thd->init_for_queries(); thd->client_capabilities= client_flag; thd->db= db; Loading @@ -504,6 +524,9 @@ void *create_embedded_thd(int client_flag, char *db) thread_count++; return thd; err: delete(thd); return NULL; } #ifdef NO_EMBEDDED_ACCESS_CHECKS Loading sql-common/client.c +4 −3 Original line number Diff line number Diff line Loading @@ -723,7 +723,7 @@ void set_mysql_error(MYSQL *mysql, int errcode, const char *sqlstate) Flush result set sent from server */ void flush_use_result(MYSQL *mysql) static void cli_flush_use_result(MYSQL *mysql) { /* Clear the current execution status */ DBUG_PRINT("warning",("Not all packets read, clearing them")); Loading Loading @@ -842,7 +842,7 @@ mysql_free_result(MYSQL_RES *result) mysql->unbuffered_fetch_owner= 0; if (mysql->status == MYSQL_STATUS_USE_RESULT) { flush_use_result(mysql); (*mysql->methods->flush_use_result)(mysql); mysql->status=MYSQL_STATUS_READY; } } Loading Loading @@ -1493,7 +1493,8 @@ static MYSQL_METHODS client_methods= cli_advanced_command, cli_read_rows, cli_use_result, cli_fetch_lengths cli_fetch_lengths, cli_flush_use_result #ifndef MYSQL_SERVER ,cli_list_fields, cli_read_prepare_result, Loading Loading
include/mysql.h +1 −0 Original line number Diff line number Diff line Loading @@ -627,6 +627,7 @@ typedef struct st_mysql_methods MYSQL_RES * (*use_result)(MYSQL *mysql); void (*fetch_lengths)(unsigned long *to, MYSQL_ROW column, unsigned int field_count); void (*flush_use_result)(MYSQL *mysql); #if !defined(MYSQL_SERVER) || defined(EMBEDDED_LIBRARY) MYSQL_FIELD * (*list_fields)(MYSQL *mysql); my_bool (*read_prepare_result)(MYSQL *mysql, MYSQL_STMT *stmt); Loading
include/sql_common.h +0 −1 Original line number Diff line number Diff line Loading @@ -25,7 +25,6 @@ extern "C" { MYSQL_FIELD *unpack_fields(MYSQL_DATA *data,MEM_ROOT *alloc,uint fields, my_bool default_value, uint server_capabilities); void free_rows(MYSQL_DATA *cur); void flush_use_result(MYSQL *mysql); my_bool mysql_autenticate(MYSQL *mysql, const char *passwd); void free_old_query(MYSQL *mysql); void end_server(MYSQL *mysql); Loading
libmysql/libmysql.c +2 −2 Original line number Diff line number Diff line Loading @@ -4392,7 +4392,7 @@ my_bool STDCALL mysql_stmt_free_result(MYSQL_STMT *stmt) if (mysql->status != MYSQL_STATUS_READY) { /* There is a result set and it belongs to this statement */ flush_use_result(mysql); (*mysql->methods->flush_use_result)(mysql); mysql->status= MYSQL_STATUS_READY; } } Loading Loading @@ -4442,7 +4442,7 @@ my_bool STDCALL mysql_stmt_close(MYSQL_STMT *stmt) Flush result set of the connection. If it does not belong to this statement, set a warning. */ flush_use_result(mysql); (*mysql->methods->flush_use_result)(mysql); if (mysql->unbuffered_fetch_owner) *mysql->unbuffered_fetch_owner= TRUE; mysql->status= MYSQL_STATUS_READY; Loading
libmysqld/lib_sql.cc +34 −11 Original line number Diff line number Diff line Loading @@ -84,6 +84,7 @@ emb_advanced_command(MYSQL *mysql, enum enum_server_command command, thd->clear_error(); mysql->affected_rows= ~(my_ulonglong) 0; mysql->field_count= 0; net->last_errno= 0; thd->store_globals(); // Fix if more than one connect /* Loading @@ -107,17 +108,38 @@ emb_advanced_command(MYSQL *mysql, enum enum_server_command command, if (!skip_check) result= thd->net.last_errno ? -1 : 0; /* If mysql->field_count is set it means the parsing of the query was OK and metadata was returned (see Protocol::send_fields). In this case we postpone the error to be returned in mysql_stmt_store_result (see emb_read_rows) to behave just as standalone server. */ if (!mysql->field_count) embedded_get_error(mysql); mysql->server_status= thd->server_status; mysql->warning_count= ((THD*)mysql->thd)->total_warn_count; return result; } static void emb_flush_use_result(MYSQL *mysql) { MYSQL_DATA *data= ((THD*)(mysql->thd))->data; if (data) { free_rows(data); ((THD*)(mysql->thd))->data= NULL; } } static MYSQL_DATA * emb_read_rows(MYSQL *mysql, MYSQL_FIELD *mysql_fields __attribute__((unused)), unsigned int fields __attribute__((unused))) { MYSQL_DATA *result= ((THD*)mysql->thd)->data; embedded_get_error(mysql); if (mysql->net.last_errno) return NULL; if (!result) { if (!(result=(MYSQL_DATA*) my_malloc(sizeof(MYSQL_DATA), Loading Loading @@ -227,6 +249,9 @@ int emb_read_binary_rows(MYSQL_STMT *stmt) int emb_unbuffered_fetch(MYSQL *mysql, char **row) { MYSQL_DATA *data= ((THD*)mysql->thd)->data; embedded_get_error(mysql); if (mysql->net.last_errno) return mysql->net.last_errno; if (!data || !data->data) { *row= NULL; Loading Loading @@ -293,6 +318,7 @@ MYSQL_METHODS embedded_methods= emb_read_rows, emb_mysql_store_result, emb_fetch_lengths, emb_flush_use_result, emb_list_fields, emb_read_prepare_result, emb_stmt_execute, Loading Loading @@ -442,14 +468,6 @@ int init_embedded_server(int argc, char **argv, char **groups) } } /* Update mysqld variables from client variables if set The client variables are set also by get_one_option() in mysqld.cc */ if (max_allowed_packet) global_system_variables.max_allowed_packet= max_allowed_packet; if (net_buffer_length) global_system_variables.net_buffer_length= net_buffer_length; return 0; } Loading Loading @@ -478,18 +496,20 @@ void *create_embedded_thd(int client_flag, char *db) if (thd->store_globals()) { fprintf(stderr,"store_globals failed.\n"); return NULL; goto err; } thd->mysys_var= my_thread_var; thd->dbug_thread_id= my_thread_id(); thd->thread_stack= (char*) &thd; /* TODO - add init_connect command execution */ thd->proc_info=0; // Remove 'login' thd->command=COM_SLEEP; thd->version=refresh_version; thd->set_time(); init_sql_alloc(&thd->mem_root,8192,8192); thd->init_for_queries(); thd->client_capabilities= client_flag; thd->db= db; Loading @@ -504,6 +524,9 @@ void *create_embedded_thd(int client_flag, char *db) thread_count++; return thd; err: delete(thd); return NULL; } #ifdef NO_EMBEDDED_ACCESS_CHECKS Loading
sql-common/client.c +4 −3 Original line number Diff line number Diff line Loading @@ -723,7 +723,7 @@ void set_mysql_error(MYSQL *mysql, int errcode, const char *sqlstate) Flush result set sent from server */ void flush_use_result(MYSQL *mysql) static void cli_flush_use_result(MYSQL *mysql) { /* Clear the current execution status */ DBUG_PRINT("warning",("Not all packets read, clearing them")); Loading Loading @@ -842,7 +842,7 @@ mysql_free_result(MYSQL_RES *result) mysql->unbuffered_fetch_owner= 0; if (mysql->status == MYSQL_STATUS_USE_RESULT) { flush_use_result(mysql); (*mysql->methods->flush_use_result)(mysql); mysql->status=MYSQL_STATUS_READY; } } Loading Loading @@ -1493,7 +1493,8 @@ static MYSQL_METHODS client_methods= cli_advanced_command, cli_read_rows, cli_use_result, cli_fetch_lengths cli_fetch_lengths, cli_flush_use_result #ifndef MYSQL_SERVER ,cli_list_fields, cli_read_prepare_result, Loading