From: Piotr Caban <piotr@codeweavers.com> --- dlls/odbc32/proxyodbc.c | 4 +++- dlls/odbc32/tests/odbc32.c | 12 +----------- 2 files changed, 4 insertions(+), 12 deletions(-) diff --git a/dlls/odbc32/proxyodbc.c b/dlls/odbc32/proxyodbc.c index 7ad1ec7fcae..7e97af63581 100644 --- a/dlls/odbc32/proxyodbc.c +++ b/dlls/odbc32/proxyodbc.c @@ -2338,7 +2338,9 @@ static SQLRETURN free_statement( struct statement *stmt, SQLUSMALLINT option ) } else if (stmt->hdr.win32_handle) { - if (stmt->hdr.win32_funcs->SQLFreeStmt) + if (option == SQL_DROP) + ret = free_handle( SQL_HANDLE_STMT, &stmt->hdr ); + else if (stmt->hdr.win32_funcs->SQLFreeStmt) ret = stmt->hdr.win32_funcs->SQLFreeStmt( stmt->hdr.win32_handle, option ); } diff --git a/dlls/odbc32/tests/odbc32.c b/dlls/odbc32/tests/odbc32.c index 378c79a2cd2..41e5494f269 100644 --- a/dlls/odbc32/tests/odbc32.c +++ b/dlls/odbc32/tests/odbc32.c @@ -524,9 +524,7 @@ static SQLRETURN WINAPI driver_SQLFreeStmt( SQLHSTMT stmt, SQLUSMALLINT option ) { CHECK_EXPECT( driver_SQLFreeStmt ); ok( (ULONG_PTR)stmt == SQL_HANDLE_STMT, "stmt = %p\n", stmt ); - todo_wine_if( option == SQL_DROP ) ok( option == SQL_UNBIND, "option = %d\n", option ); - if (option == SQL_DROP) - return driver_SQLFreeHandle( SQL_HANDLE_STMT, stmt ); + ok( option == SQL_UNBIND, "option = %d\n", option ); return SQL_SUCCESS; } @@ -1129,11 +1127,9 @@ static void test_SQLExecDirect( void ) ok( !id[0], "id not set\n" ); ok( len_id[0] == sizeof(id[0]), "got %d\n", (int)len_id[0] ); - SET_EXPECT( driver_SQLFreeStmt ); SET_EXPECT( driver_SQLFreeHandle_stmt ); ret = SQLFreeStmt( stmt, SQL_DROP ); CHECK_CALLED( driver_SQLFreeHandle_stmt ); - todo_wine CHECK_NOT_CALLED( driver_SQLFreeStmt ); ok( ret == SQL_SUCCESS, "got %d\n", ret ); SET_EXPECT( driver_SQLAllocHandle_stmt ); @@ -1189,11 +1185,9 @@ static void test_SQLExecDirect( void ) ok( len_name[0] == sizeof("John") - 1, "got %d\n", (int)len_name[0] ); ok( len_name[1] == sizeof("Mary") - 1, "got %d\n", (int)len_name[1] ); - SET_EXPECT( driver_SQLFreeStmt ); SET_EXPECT( driver_SQLFreeHandle_stmt ); ret = SQLFreeStmt( stmt, SQL_DROP ); CHECK_CALLED( driver_SQLFreeHandle_stmt ); - todo_wine CHECK_NOT_CALLED( driver_SQLFreeStmt ); ok( ret == SQL_SUCCESS, "got %d\n", ret ); SET_EXPECT( driver_SQLAllocHandle_stmt ); @@ -1240,11 +1234,9 @@ static void test_SQLExecDirect( void ) ret = SQLFreeStmt( stmt, SQL_UNBIND ); CHECK_CALLED( driver_SQLFreeStmt ); ok( ret == SQL_SUCCESS, "got %d\n", ret ); - SET_EXPECT( driver_SQLFreeStmt ); SET_EXPECT( driver_SQLFreeHandle_stmt ); ret = SQLFreeStmt( stmt, SQL_DROP ); CHECK_CALLED( driver_SQLFreeHandle_stmt ); - todo_wine CHECK_NOT_CALLED( driver_SQLFreeStmt ); ok( ret == SQL_SUCCESS, "got %d\n", ret ); SET_EXPECT( driver_SQLAllocHandle_stmt ); @@ -1288,11 +1280,9 @@ static void test_SQLExecDirect( void ) todo_wine CHECK_NOT_CALLED( driver_SQLSetStmtAttr ); ok( ret == SQL_ERROR, "got %d\n", ret ); - SET_EXPECT( driver_SQLFreeStmt ); SET_EXPECT( driver_SQLFreeHandle_stmt ); ret = SQLFreeStmt( stmt, SQL_DROP ); CHECK_CALLED( driver_SQLFreeHandle_stmt ); - todo_wine CHECK_NOT_CALLED( driver_SQLFreeStmt ); ok( ret == SQL_SUCCESS, "got %d\n", ret ); SET_EXPECT( driver_SQLDisconnect ); -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/10669