Module: wine Branch: master Commit: 6c95dc644cf9fbcc2e842513d99e325f90b05e82 URL: http://source.winehq.org/git/wine.git/?a=commit;h=6c95dc644cf9fbcc2e842513d9...
Author: Mike McCormack mike@codeweavers.com Date: Thu Oct 26 17:40:47 2006 +0900
msi: Allow UPDATE queries without a condition.
---
dlls/msi/sql.y | 12 +++++++++++- dlls/msi/tests/db.c | 24 +++++++++--------------- dlls/msi/update.c | 17 +++++++++++------ 3 files changed, 31 insertions(+), 22 deletions(-)
diff --git a/dlls/msi/sql.y b/dlls/msi/sql.y index abffb2f..1cf3ad6 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 b9ffaa7..6afb307 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 9c84339..502af14 100644 --- a/dlls/msi/update.c +++ b/dlls/msi/update.c @@ -199,14 +199,19 @@ UINT UPDATE_CreateView( MSIDATABASE *db, 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 )