Mike McCormack : msi: Allow UPDATE queries without a condition.
Alexandre Julliard
julliard at wine.codeweavers.com
Thu Oct 26 06:31:57 CDT 2006
Module: wine
Branch: master
Commit: 6c95dc644cf9fbcc2e842513d99e325f90b05e82
URL: http://source.winehq.org/git/wine.git/?a=commit;h=6c95dc644cf9fbcc2e842513d99e325f90b05e82
Author: Mike McCormack <mike at 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 )
More information about the wine-cvs
mailing list