diff --git a/dlls/msi/sql.y b/dlls/msi/sql.y index abffb2f45b2..1cf3ad6428d 100644 --- a/dlls/msi/sql.y +++ b/dlls/msi/sql.y @@ -214,13 +214,23 @@ oneupdate: TK_UPDATE table TK_SET update_assign_list TK_WHERE expr { SQL_input* sql = (SQL_input*) info; - MSIVIEW *update = NULL; + MSIVIEW *update = NULL; UPDATE_CreateView( sql->db, &update, $2, $4, $6 ); if( !update ) YYABORT; $$ = update; } + | TK_UPDATE table TK_SET update_assign_list + { + SQL_input* sql = (SQL_input*) info; + MSIVIEW *update = NULL; + + UPDATE_CreateView( sql->db, &update, $2, $4, NULL ); + if( !update ) + YYABORT; + $$ = update; + } ; onedelete: diff --git a/dlls/msi/tests/db.c b/dlls/msi/tests/db.c index b9ffaa77308..6afb307518a 100644 --- a/dlls/msi/tests/db.c +++ b/dlls/msi/tests/db.c @@ -3093,17 +3093,14 @@ static void test_update(void) /* no where condition */ query = "UPDATE `Control` SET `Text` = 'this is text'"; - todo_wine - { - r = MsiDatabaseOpenView(hdb, query, &view); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCESS, got %d\n", r); - r = MsiViewExecute(view, 0); - ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - r = MsiViewClose(view); - ok(r == ERROR_SUCCESS, "MsiViewClose failed\n"); - r = MsiCloseHandle(view); - ok(r == ERROR_SUCCESS, "MsiCloseHandle failed\n"); - } + r = MsiDatabaseOpenView(hdb, query, &view); + ok(r == ERROR_SUCCESS, "Expected ERROR_SUCESS, got %d\n", r); + r = MsiViewExecute(view, 0); + ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); + r = MsiViewClose(view); + ok(r == ERROR_SUCCESS, "MsiViewClose failed\n"); + r = MsiCloseHandle(view); + ok(r == ERROR_SUCCESS, "MsiCloseHandle failed\n"); /* check the modified text */ query = "SELECT `Text` FROM `Control`"; @@ -3138,10 +3135,7 @@ static void test_update(void) size = MAX_PATH; r = MsiRecordGetString(rec, 1, result, &size); ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %d\n", r); - todo_wine - { - ok(!lstrcmp(result, "this is text"), "Expected `this is text`, got %s\n", result); - } + ok(!lstrcmp(result, "this is text"), "Expected `this is text`, got %s\n", result); MsiCloseHandle(rec); diff --git a/dlls/msi/update.c b/dlls/msi/update.c index 9c843393922..502af143d87 100644 --- a/dlls/msi/update.c +++ b/dlls/msi/update.c @@ -199,14 +199,19 @@ UINT UPDATE_CreateView( MSIDATABASE *db, MSIVIEW **view, LPWSTR table, if( r != ERROR_SUCCESS ) return r; - /* add conditions first */ - r = WHERE_CreateView( db, &wv, tv, expr ); - if( r != ERROR_SUCCESS ) + if (expr) { - tv->ops->delete( tv ); - return r; + /* add conditions first */ + r = WHERE_CreateView( db, &wv, tv, expr ); + if( r != ERROR_SUCCESS ) + { + tv->ops->delete( tv ); + return r; + } } - + else + wv = tv; + /* then select the columns we want */ r = SELECT_CreateView( db, &sv, wv, columns ); if( r != ERROR_SUCCESS )