Hib Eris : msi: Implement ASSIGN mode in MsiViewModify.

Alexandre Julliard julliard at winehq.org
Mon Jul 6 09:34:00 CDT 2009


Module: wine
Branch: master
Commit: ec4edbfd6c35a76327bf06e7677170afa5aad265
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=ec4edbfd6c35a76327bf06e7677170afa5aad265

Author: Hib Eris <hib at hiberis.nl>
Date:   Mon Jul  6 12:26:20 2009 +0200

msi: Implement ASSIGN mode in MsiViewModify.

---

 dlls/msi/table.c    |   18 ++++++++++++++++++
 dlls/msi/tests/db.c |   16 ++++++++--------
 2 files changed, 26 insertions(+), 8 deletions(-)

diff --git a/dlls/msi/table.c b/dlls/msi/table.c
index dc21b3b..126769a 100644
--- a/dlls/msi/table.c
+++ b/dlls/msi/table.c
@@ -1711,6 +1711,21 @@ static UINT msi_table_update(struct tagMSIVIEW *view, MSIRECORD *rec, UINT row)
     return TABLE_set_row(view, new_row, rec, (1 << tv->num_cols) - 1);
 }
 
+static UINT msi_table_assign(struct tagMSIVIEW *view, MSIRECORD *rec)
+{
+    MSITABLEVIEW *tv = (MSITABLEVIEW *)view;
+    UINT r, row;
+
+    if (!tv->table)
+        return ERROR_INVALID_PARAMETER;
+
+    r = msi_table_find_row(tv, rec, &row);
+    if (r == ERROR_SUCCESS)
+        return TABLE_set_row(view, row, rec, (1 << tv->num_cols) - 1);
+    else
+        return TABLE_insert_row( view, rec, -1, FALSE );
+}
+
 static UINT modify_delete_row( struct tagMSIVIEW *view, MSIRECORD *rec )
 {
     MSITABLEVIEW *tv = (MSITABLEVIEW *)view;
@@ -1780,6 +1795,9 @@ static UINT TABLE_modify( struct tagMSIVIEW *view, MSIMODIFY eModifyMode,
         break;
 
     case MSIMODIFY_ASSIGN:
+        r = msi_table_assign( view, rec );
+        break;
+
     case MSIMODIFY_REPLACE:
     case MSIMODIFY_MERGE:
     case MSIMODIFY_VALIDATE:
diff --git a/dlls/msi/tests/db.c b/dlls/msi/tests/db.c
index e694ea3..019ff5e 100644
--- a/dlls/msi/tests/db.c
+++ b/dlls/msi/tests/db.c
@@ -4795,7 +4795,7 @@ static void test_viewmodify_assign(void)
     ok(r == ERROR_SUCCESS, "failed to set integer\n");
 
     r = MsiViewModify(hview, MSIMODIFY_ASSIGN, hrec);
-    todo_wine ok(r == ERROR_SUCCESS, "MsiViewModify failed: %d\n", r);
+    ok(r == ERROR_SUCCESS, "MsiViewModify failed: %d\n", r);
 
     r = MsiCloseHandle(hrec);
     ok(r == ERROR_SUCCESS, "failed to close record\n");
@@ -4811,12 +4811,12 @@ static void test_viewmodify_assign(void)
     r = MsiViewExecute(hview, 0);
     ok(r == ERROR_SUCCESS, "MsiViewExecute failed\n");
     r = MsiViewFetch(hview, &hrec);
-    todo_wine ok(r == ERROR_SUCCESS, "MsiViewFetch failed\n");
+    ok(r == ERROR_SUCCESS, "MsiViewFetch failed\n");
 
     r = MsiRecordGetInteger(hrec, 1);
-    todo_wine ok(r == 1, "Expected 1, got %d\n", r);
+    ok(r == 1, "Expected 1, got %d\n", r);
     r = MsiRecordGetInteger(hrec, 2);
-    todo_wine ok(r == 2, "Expected 2, got %d\n", r);
+    ok(r == 2, "Expected 2, got %d\n", r);
 
     r = MsiCloseHandle(hrec);
     ok(r == ERROR_SUCCESS, "failed to close record\n");
@@ -4845,7 +4845,7 @@ static void test_viewmodify_assign(void)
     ok(r == ERROR_SUCCESS, "failed to set integer\n");
 
     r = MsiViewModify(hview, MSIMODIFY_ASSIGN, hrec);
-    todo_wine ok(r == ERROR_SUCCESS, "MsiViewModify failed: %d\n", r);
+    ok(r == ERROR_SUCCESS, "MsiViewModify failed: %d\n", r);
 
     r = MsiCloseHandle(hrec);
     ok(r == ERROR_SUCCESS, "failed to close record\n");
@@ -4861,12 +4861,12 @@ static void test_viewmodify_assign(void)
     r = MsiViewExecute(hview, 0);
     ok(r == ERROR_SUCCESS, "MsiViewExecute failed\n");
     r = MsiViewFetch(hview, &hrec);
-    todo_wine ok(r == ERROR_SUCCESS, "MsiViewFetch failed\n");
+    ok(r == ERROR_SUCCESS, "MsiViewFetch failed\n");
 
     r = MsiRecordGetInteger(hrec, 1);
-    todo_wine ok(r == 1, "Expected 1, got %d\n", r);
+    ok(r == 1, "Expected 1, got %d\n", r);
     r = MsiRecordGetInteger(hrec, 2);
-    todo_wine ok(r == 4, "Expected 4, got %d\n", r);
+    ok(r == 4, "Expected 4, got %d\n", r);
 
     r = MsiCloseHandle(hrec);
     ok(r == ERROR_SUCCESS, "failed to close record\n");




More information about the wine-cvs mailing list