msi: Add handling for the MSIMODIFY_UPDATE command.
This commit is contained in:
parent
479aca4731
commit
f4147ca004
|
@ -1532,6 +1532,29 @@ static UINT TABLE_delete_row( struct tagMSIVIEW *view, UINT row )
|
||||||
return ERROR_SUCCESS;
|
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,
|
static UINT TABLE_modify( struct tagMSIVIEW *view, MSIMODIFY eModifyMode,
|
||||||
MSIRECORD *rec)
|
MSIRECORD *rec)
|
||||||
{
|
{
|
||||||
|
@ -1553,9 +1576,12 @@ static UINT TABLE_modify( struct tagMSIVIEW *view, MSIMODIFY eModifyMode,
|
||||||
r = TABLE_insert_row( view, rec, TRUE );
|
r = TABLE_insert_row( view, rec, TRUE );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case MSIMODIFY_UPDATE:
|
||||||
|
r = msi_table_update( view, rec );
|
||||||
|
break;
|
||||||
|
|
||||||
case MSIMODIFY_REFRESH:
|
case MSIMODIFY_REFRESH:
|
||||||
case MSIMODIFY_INSERT:
|
case MSIMODIFY_INSERT:
|
||||||
case MSIMODIFY_UPDATE:
|
|
||||||
case MSIMODIFY_ASSIGN:
|
case MSIMODIFY_ASSIGN:
|
||||||
case MSIMODIFY_REPLACE:
|
case MSIMODIFY_REPLACE:
|
||||||
case MSIMODIFY_MERGE:
|
case MSIMODIFY_MERGE:
|
||||||
|
|
|
@ -832,17 +832,11 @@ static void test_viewmodify(void)
|
||||||
ok(r == ERROR_SUCCESS, "MsiRecordSetString failed\n");
|
ok(r == ERROR_SUCCESS, "MsiRecordSetString failed\n");
|
||||||
|
|
||||||
r = MsiViewModify(hview, MSIMODIFY_UPDATE, hrec);
|
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 */
|
/* do it again */
|
||||||
r = MsiViewModify(hview, MSIMODIFY_UPDATE, hrec);
|
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 */
|
/* update the view, primary key */
|
||||||
r = MsiRecordSetInteger(hrec, 1, 5);
|
r = MsiRecordSetInteger(hrec, 1, 5);
|
||||||
|
@ -883,10 +877,7 @@ static void test_viewmodify(void)
|
||||||
sz = sizeof(buffer);
|
sz = sizeof(buffer);
|
||||||
r = MsiRecordGetString(hrec, 3, buffer, &sz);
|
r = MsiRecordGetString(hrec, 3, buffer, &sz);
|
||||||
ok(r == ERROR_SUCCESS, "MsiRecordGetString failed\n");
|
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);
|
r = MsiCloseHandle(hrec);
|
||||||
ok(r == ERROR_SUCCESS, "failed to close record\n");
|
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");
|
ok(r == ERROR_SUCCESS, "failed to set string\n");
|
||||||
|
|
||||||
r = MsiViewModify(hview, MSIMODIFY_UPDATE, hrec);
|
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);
|
r = MsiCloseHandle(hrec);
|
||||||
ok(r == ERROR_SUCCESS, "failed to close record\n");
|
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");
|
ok(r == ERROR_SUCCESS, "failed to set string\n");
|
||||||
|
|
||||||
r = MsiViewModify(hview, MSIMODIFY_UPDATE, hrec);
|
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);
|
r = MsiCloseHandle(hrec);
|
||||||
ok(r == ERROR_SUCCESS, "failed to close record\n");
|
ok(r == ERROR_SUCCESS, "failed to close record\n");
|
||||||
|
|
Loading…
Reference in New Issue