Module: wine Branch: master Commit: f4147ca004022228257d3ee89ff1540eb90a0b60 URL: http://source.winehq.org/git/wine.git/?a=commit;h=f4147ca004022228257d3ee89f...
Author: James Hawkins truiken@gmail.com Date: Mon Jul 23 19:20:51 2007 -0700
msi: Add handling for the MSIMODIFY_UPDATE command.
---
dlls/msi/table.c | 28 +++++++++++++++++++++++++++- dlls/msi/tests/db.c | 25 +++++-------------------- 2 files changed, 32 insertions(+), 21 deletions(-)
diff --git a/dlls/msi/table.c b/dlls/msi/table.c index 745712a..5333817 100644 --- a/dlls/msi/table.c +++ b/dlls/msi/table.c @@ -1532,6 +1532,29 @@ static UINT TABLE_delete_row( struct tagMSIVIEW *view, UINT row ) return ERROR_SUCCESS; }
+static UINT msi_table_update(struct tagMSIVIEW *view, MSIRECORD *rec) +{ + MSITABLEVIEW *tv = (MSITABLEVIEW *)view; + UINT r, row; + + /* FIXME: MsiViewFetch should set rec index 0 to some ID that + * sets the fetched record apart from other records + */ + + if (!tv->table) + return ERROR_INVALID_PARAMETER; + + r = msi_table_find_row(tv, rec, &row); + if (r != ERROR_SUCCESS) + return ERROR_SUCCESS; + + /* the row cannot be changed */ + if (row != 0) + return ERROR_FUNCTION_FAILED; + + return TABLE_set_row(view, row, rec, (1 << tv->num_cols) - 1); +} + static UINT TABLE_modify( struct tagMSIVIEW *view, MSIMODIFY eModifyMode, MSIRECORD *rec) { @@ -1553,9 +1576,12 @@ static UINT TABLE_modify( struct tagMSIVIEW *view, MSIMODIFY eModifyMode, r = TABLE_insert_row( view, rec, TRUE ); break;
+ case MSIMODIFY_UPDATE: + r = msi_table_update( view, rec ); + break; + case MSIMODIFY_REFRESH: case MSIMODIFY_INSERT: - case MSIMODIFY_UPDATE: case MSIMODIFY_ASSIGN: case MSIMODIFY_REPLACE: case MSIMODIFY_MERGE: diff --git a/dlls/msi/tests/db.c b/dlls/msi/tests/db.c index 1cb8ce6..5b01189 100644 --- a/dlls/msi/tests/db.c +++ b/dlls/msi/tests/db.c @@ -832,17 +832,11 @@ static void test_viewmodify(void) ok(r == ERROR_SUCCESS, "MsiRecordSetString failed\n");
r = MsiViewModify(hview, MSIMODIFY_UPDATE, hrec); - todo_wine - { - ok(r == ERROR_SUCCESS, "MsiViewModify failed\n"); - } + ok(r == ERROR_SUCCESS, "MsiViewModify failed\n");
/* do it again */ r = MsiViewModify(hview, MSIMODIFY_UPDATE, hrec); - todo_wine - { - ok(r == ERROR_SUCCESS, "MsiViewModify failed: %d\n", r); - } + ok(r == ERROR_SUCCESS, "MsiViewModify failed: %d\n", r);
/* update the view, primary key */ r = MsiRecordSetInteger(hrec, 1, 5); @@ -883,10 +877,7 @@ static void test_viewmodify(void) sz = sizeof(buffer); r = MsiRecordGetString(hrec, 3, buffer, &sz); ok(r == ERROR_SUCCESS, "MsiRecordGetString failed\n"); - todo_wine - { - ok(!lstrcmp(buffer, "3141592"), "Expected 3141592, got %s\n", buffer); - } + ok(!lstrcmp(buffer, "3141592"), "Expected 3141592, got %s\n", buffer);
r = MsiCloseHandle(hrec); ok(r == ERROR_SUCCESS, "failed to close record\n"); @@ -965,10 +956,7 @@ static void test_viewmodify(void) ok(r == ERROR_SUCCESS, "failed to set string\n");
r = MsiViewModify(hview, MSIMODIFY_UPDATE, hrec); - todo_wine - { - ok(r == ERROR_FUNCTION_FAILED, "MsiViewModify failed\n"); - } + ok(r == ERROR_FUNCTION_FAILED, "MsiViewModify failed\n");
r = MsiCloseHandle(hrec); ok(r == ERROR_SUCCESS, "failed to close record\n"); @@ -993,10 +981,7 @@ static void test_viewmodify(void) ok(r == ERROR_SUCCESS, "failed to set string\n");
r = MsiViewModify(hview, MSIMODIFY_UPDATE, hrec); - todo_wine - { - ok(r == ERROR_FUNCTION_FAILED, "MsiViewModify failed\n"); - } + ok(r == ERROR_FUNCTION_FAILED, "MsiViewModify failed\n");
r = MsiCloseHandle(hrec); ok(r == ERROR_SUCCESS, "failed to close record\n");