Index: driver/handle.c =================================================================== --- driver/handle.c (Revision 488) +++ driver/handle.c (Arbeitskopie) @@ -424,7 +424,18 @@ MYODBCDbgReturnReturn( SQL_SUCCESS ); if (!stmt->fake_result) + { mysql_free_result(stmt->result); + /* check if there are more resultsets */ + while(mysql_more_results(&stmt->dbc->mysql)) + { + if (mysql_next_result(&stmt->dbc->mysql) == -1) + { + stmt->result = mysql_store_result(&stmt->dbc->mysql); + mysql_free_result(stmt->result); + } + } + } else x_free((gptr)stmt->result); x_free((gptr) stmt->fields); Index: test/my_result.c =================================================================== --- test/my_result.c (Revision 488) +++ test/my_result.c (Arbeitskopie) @@ -1717,7 +1717,31 @@ return OK; } +DECLARE_TEST(t_bug27544) +{ + SQLRETURN rc; + ok_sql(hstmt, "DROP TABLE IF EXISTS t1"); + ok_sql(hstmt, "CREATE TABLE t1(a int)"); + ok_sql(hstmt, "INSERT INTO t1 VALUES (1)"); + ok_sql(hstmt, "DROP PROCEDURE IF EXISTS p1"); + ok_sql(hstmt, "CREATE PROCEDURE p1() BEGIN" + " SELECT a FROM t1; " + "END;"); + + + + rc = tmysql_exec(hstmt,"CALL p1()"); + mystmt(hstmt,rc); + ok_stmt(hstmt, SQLFreeStmt(hstmt, SQL_CLOSE)); + + + ok_sql(hstmt, "DROP PROCEDURE p1"); + ok_sql(hstmt, "DROP TABLE t1"); + + return OK; +} + BEGIN_TESTS ADD_TEST(my_resultset) ADD_TEST(t_convert_type) @@ -1736,6 +1760,7 @@ ADD_TEST(t_exfetch) ADD_TEST(tmysql_rowstatus) ADD_TEST(t_true_length) + ADD_TEST(t_bug27544) END_TESTS