mirror of
https://github.com/MariaDB/server.git
synced 2025-07-27 18:02:13 +03:00
Fix for bug #11037.
When all rows are fetched subsequent calls to mysql_stmt_fetch return now MYSQL_NO_DATA instead of errorcode 1.
This commit is contained in:
@ -1774,6 +1774,7 @@ static int stmt_read_row_unbuffered(MYSQL_STMT *stmt, unsigned char **row);
|
||||
static int stmt_read_row_buffered(MYSQL_STMT *stmt, unsigned char **row);
|
||||
static int stmt_read_row_from_cursor(MYSQL_STMT *stmt, unsigned char **row);
|
||||
static int stmt_read_row_no_data(MYSQL_STMT *stmt, unsigned char **row);
|
||||
static int stmt_read_row_no_result_set(MYSQL_STMT *stmt, unsigned char **row);
|
||||
|
||||
/*
|
||||
This function is used in mysql_stmt_store_result if
|
||||
@ -2036,7 +2037,7 @@ mysql_stmt_init(MYSQL *mysql)
|
||||
stmt->list.data= stmt;
|
||||
stmt->state= MYSQL_STMT_INIT_DONE;
|
||||
stmt->mysql= mysql;
|
||||
stmt->read_row_func= stmt_read_row_no_data;
|
||||
stmt->read_row_func= stmt_read_row_no_result_set;
|
||||
stmt->prefetch_rows= DEFAULT_PREFETCH_ROWS;
|
||||
/* The rest of statement members was bzeroed inside malloc */
|
||||
|
||||
@ -2778,6 +2779,13 @@ stmt_read_row_from_cursor(MYSQL_STMT *stmt, unsigned char **row)
|
||||
static int
|
||||
stmt_read_row_no_data(MYSQL_STMT *stmt __attribute__((unused)),
|
||||
unsigned char **row __attribute__((unused)))
|
||||
{
|
||||
return MYSQL_NO_DATA;
|
||||
}
|
||||
|
||||
static int
|
||||
stmt_read_row_no_result_set(MYSQL_STMT *stmt __attribute__((unused)),
|
||||
unsigned char **row __attribute__((unused)))
|
||||
{
|
||||
set_stmt_error(stmt, CR_NO_RESULT_SET, unknown_sqlstate);
|
||||
return 1;
|
||||
@ -4600,7 +4608,8 @@ int STDCALL mysql_stmt_fetch(MYSQL_STMT *stmt)
|
||||
((rc= stmt_fetch_row(stmt, row)) && rc != MYSQL_DATA_TRUNCATED))
|
||||
{
|
||||
stmt->state= MYSQL_STMT_PREPARE_DONE; /* XXX: this is buggy */
|
||||
stmt->read_row_func= stmt_read_row_no_data;
|
||||
stmt->read_row_func= (rc == MYSQL_NO_DATA) ?
|
||||
stmt_read_row_no_data : stmt_read_row_no_result_set;
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -4937,7 +4946,7 @@ static my_bool reset_stmt_handle(MYSQL_STMT *stmt, uint flags)
|
||||
for (; param < param_end; param++)
|
||||
param->long_data_used= 0;
|
||||
}
|
||||
stmt->read_row_func= stmt_read_row_no_data;
|
||||
stmt->read_row_func= stmt_read_row_no_result_set;
|
||||
if (mysql)
|
||||
{
|
||||
if ((int) stmt->state > (int) MYSQL_STMT_PREPARE_DONE)
|
||||
|
Reference in New Issue
Block a user