Module: wine Branch: master Commit: ec4edbfd6c35a76327bf06e7677170afa5aad265 URL: http://source.winehq.org/git/wine.git/?a=commit;h=ec4edbfd6c35a76327bf06e767...
Author: Hib Eris hib@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");