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