Fix GH-282: Mysql's fetch_row() is broken
Fix both MySQL and PostgreSQL drivers to return an error when fetch_row() is called after retrieving all rows in the result set.
This commit is contained in:
@ -969,8 +969,10 @@ int mysql_drv_fetch_row(db_result_t *rs, db_row_t *row)
|
||||
DEBUG("mysql_fetch_row(%p) = %p", rs->ptr, my_row);
|
||||
|
||||
unsigned long *lengths = mysql_fetch_lengths(rs->ptr);
|
||||
DEBUG("mysql_fetch_lengths(%p) = %p", rs->ptr, lengths);
|
||||
|
||||
if (lengths == NULL)
|
||||
return DB_ERROR_NONE;
|
||||
return DB_ERROR_IGNORABLE;
|
||||
|
||||
for (size_t i = 0; i < rs->nfields; i++)
|
||||
{
|
||||
|
||||
@ -721,7 +721,7 @@ int pgsql_drv_fetch_row(db_result_t *rs, db_row_t *row)
|
||||
*/
|
||||
rownum = (intptr_t) row->ptr;
|
||||
if (rownum >= (int) rs->nrows)
|
||||
return DB_ERROR_NONE;
|
||||
return DB_ERROR_IGNORABLE;
|
||||
|
||||
for (i = 0; i < (int) rs->nfields; i++)
|
||||
{
|
||||
|
||||
@ -181,9 +181,11 @@ EOF
|
||||
sysbench $SB_ARGS run
|
||||
|
||||
|
||||
cat <<EOF
|
||||
########################################################################
|
||||
# Multiple connections test
|
||||
########################################################################
|
||||
EOF
|
||||
cat >$CRAMTMP/api_sql.lua <<EOF
|
||||
function thread_init()
|
||||
drv = sysbench.sql.driver()
|
||||
@ -209,9 +211,11 @@ EOF
|
||||
|
||||
sysbench $SB_ARGS run
|
||||
|
||||
cat <<EOF
|
||||
########################################################################
|
||||
# Incorrect bulk API usage
|
||||
########################################################################
|
||||
EOF
|
||||
cat >$CRAMTMP/api_sql.lua <<EOF
|
||||
c = sysbench.sql.driver():connect()
|
||||
c:query("CREATE TABLE t1(a INT)")
|
||||
@ -226,9 +230,11 @@ EOF
|
||||
|
||||
sysbench $SB_ARGS
|
||||
|
||||
cat <<EOF
|
||||
########################################################################
|
||||
# query_row() with an empty result set
|
||||
########################################################################
|
||||
EOF
|
||||
cat >$CRAMTMP/api_sql.lua <<EOF
|
||||
c = sysbench.sql.driver():connect()
|
||||
c:query("CREATE TABLE t1(a INT)")
|
||||
@ -237,3 +243,21 @@ c:query("DROP TABLE t1")
|
||||
EOF
|
||||
|
||||
sysbench $SB_ARGS
|
||||
|
||||
cat <<EOF
|
||||
########################################################################
|
||||
# GH-282: Mysql's fetch_row() is broken
|
||||
########################################################################
|
||||
EOF
|
||||
cat >$CRAMTMP/api_sql.lua <<EOF
|
||||
connection = sysbench.sql.driver():connect()
|
||||
rows = connection:query("select 1 union select 2")
|
||||
|
||||
r = rows:fetch_row();
|
||||
while ( r ) do
|
||||
print( r[ 1 ] )
|
||||
r = rows:fetch_row()
|
||||
end
|
||||
EOF
|
||||
|
||||
sysbench $SB_ARGS
|
||||
|
||||
@ -102,6 +102,9 @@ SQL Lua API + MySQL tests
|
||||
}
|
||||
*/api_sql.lua:*: SQL error, errno = 1051, state = '42S02': Unknown table '*t' (glob)
|
||||
--
|
||||
########################################################################
|
||||
# Multiple connections test
|
||||
########################################################################
|
||||
1
|
||||
2
|
||||
3
|
||||
@ -112,6 +115,17 @@ SQL Lua API + MySQL tests
|
||||
8
|
||||
9
|
||||
10
|
||||
########################################################################
|
||||
# Incorrect bulk API usage
|
||||
########################################################################
|
||||
ALERT: attempt to call bulk_insert_next() before bulk_insert_init()
|
||||
*/api_sql.lua:*: db_bulk_insert_next() failed (glob)
|
||||
########################################################################
|
||||
# query_row() with an empty result set
|
||||
########################################################################
|
||||
nil
|
||||
########################################################################
|
||||
# GH-282: Mysql's fetch_row() is broken
|
||||
########################################################################
|
||||
1
|
||||
2
|
||||
|
||||
@ -108,6 +108,9 @@ SQL Lua API + PostgreSQL tests
|
||||
}
|
||||
*/api_sql.lua:*: SQL error, errno = 0, state = '42P01': table "t" does not exist (glob)
|
||||
--
|
||||
########################################################################
|
||||
# Multiple connections test
|
||||
########################################################################
|
||||
1
|
||||
2
|
||||
3
|
||||
@ -118,6 +121,17 @@ SQL Lua API + PostgreSQL tests
|
||||
8
|
||||
9
|
||||
10
|
||||
########################################################################
|
||||
# Incorrect bulk API usage
|
||||
########################################################################
|
||||
ALERT: attempt to call bulk_insert_next() before bulk_insert_init()
|
||||
*/api_sql.lua:*: db_bulk_insert_next() failed (glob)
|
||||
########################################################################
|
||||
# query_row() with an empty result set
|
||||
########################################################################
|
||||
nil
|
||||
########################################################################
|
||||
# GH-282: Mysql's fetch_row() is broken
|
||||
########################################################################
|
||||
1
|
||||
2
|
||||
|
||||
Reference in New Issue
Block a user