msi: Test adding columns with data in a transform.
This commit is contained in:
parent
5af06dec83
commit
9285351ad3
|
@ -1821,6 +1821,18 @@ static void generate_transform(void)
|
|||
|
||||
MsiCloseHandle(hrec);
|
||||
|
||||
query = "ALTER TABLE `MOO` ADD `COW` INTEGER";
|
||||
r = run_query(hdb1, 0, query);
|
||||
ok(r == ERROR_SUCCESS, "failed to add column\n");
|
||||
|
||||
query = "ALTER TABLE `MOO` ADD `PIG` INTEGER";
|
||||
r = run_query(hdb1, 0, query);
|
||||
ok(r == ERROR_SUCCESS, "failed to add column\n");
|
||||
|
||||
query = "UPDATE `MOO` SET `PIG` = 5 WHERE `NOO` = 1";
|
||||
r = run_query(hdb1, 0, query);
|
||||
ok(r == ERROR_SUCCESS, "failed to modify row\n");
|
||||
|
||||
/* database needs to be committed */
|
||||
MsiDatabaseCommit(hdb1);
|
||||
|
||||
|
@ -1847,31 +1859,36 @@ static const WCHAR name8[] = { 0x3c8b, 0x3a97, 0x409b, 0x387e, 0 }; /* BINARY.1
|
|||
|
||||
/* data in each table */
|
||||
static const WCHAR data1[] = { /* AAR */
|
||||
0x0201, 0x0005, 0x8001, /* 0x0201 = add row (1), two shorts */
|
||||
0x0201, 0x0006, 0x8002,
|
||||
0x0201, 0x0008, 0x8001, /* 0x0201 = add row (1), two shorts */
|
||||
0x0201, 0x0009, 0x8002,
|
||||
};
|
||||
static const WCHAR data2[] = { /* _Columns */
|
||||
0x0401, 0x0002, 0x0000, 0x0003, 0xbdff, /* 0x0401 = add row (1), 4 shorts */
|
||||
0x0401, 0x0002, 0x0000, 0x0004, 0x8502,
|
||||
0x0401, 0x0001, 0x8003, 0x0002, 0x9502,
|
||||
0x0401, 0x0001, 0x8004, 0x0003, 0x9502,
|
||||
0x0401, 0x0005, 0x0000, 0x0006, 0xbdff, /* 0x0401 = add row (1), 4 shorts */
|
||||
0x0401, 0x0005, 0x0000, 0x0007, 0x8502,
|
||||
};
|
||||
static const WCHAR data3[] = { /* _Tables */
|
||||
0x0101, 0x0002, /* 0x0101 = add row (1), 1 short */
|
||||
0x0101, 0x0005, /* 0x0101 = add row (1), 1 short */
|
||||
};
|
||||
static const char data4[] = /* _StringData */
|
||||
"cAARCARBARvwbmw"; /* all the strings squashed together */
|
||||
"MOOCOWPIGcAARCARBARvwbmw"; /* all the strings squashed together */
|
||||
static const WCHAR data5[] = { /* _StringPool */
|
||||
/* len, refs */
|
||||
0, 0, /* string 0 '' */
|
||||
1, 1, /* string 1 'c' */
|
||||
3, 3, /* string 2 'AAR' */
|
||||
3, 1, /* string 3 'CAR' */
|
||||
3, 1, /* string 4 'BAR' */
|
||||
2, 1, /* string 5 'vw' */
|
||||
3, 1, /* string 6 'bmw' */
|
||||
3, 2, /* string 1 'MOO' */
|
||||
3, 1, /* string 2 'COW' */
|
||||
3, 1, /* string 3 'PIG' */
|
||||
1, 1, /* string 4 'c' */
|
||||
3, 3, /* string 5 'AAR' */
|
||||
3, 1, /* string 6 'CAR' */
|
||||
3, 1, /* string 7 'BAR' */
|
||||
2, 1, /* string 8 'vw' */
|
||||
3, 1, /* string 9 'bmw' */
|
||||
};
|
||||
/* update row, 0x0002 is a bitmask of present column data, keys are excluded */
|
||||
static const WCHAR data6[] = { /* MOO */
|
||||
0x0002, 0x8001, 0x0001, /* update row */
|
||||
0x000a, 0x8001, 0x0004, 0x8005, /* update row */
|
||||
0x0000, 0x8003, /* delete row */
|
||||
};
|
||||
|
||||
|
@ -2032,21 +2049,30 @@ static void test_try_transform(void)
|
|||
hrec = 0;
|
||||
query = "select `NOO`,`OOO` from `MOO` where `NOO` = 1 AND `OOO` = 'c'";
|
||||
r = do_query(hdb, query, &hrec);
|
||||
ok(r == ERROR_SUCCESS, "select query failed\n");
|
||||
todo_wine
|
||||
{
|
||||
ok(r == ERROR_SUCCESS, "select query failed\n");
|
||||
}
|
||||
MsiCloseHandle(hrec);
|
||||
|
||||
/* check unchanged value */
|
||||
hrec = 0;
|
||||
query = "select `NOO`,`OOO` from `MOO` where `NOO` = 2 AND `OOO` = 'b'";
|
||||
r = do_query(hdb, query, &hrec);
|
||||
ok(r == ERROR_SUCCESS, "select query failed\n");
|
||||
todo_wine
|
||||
{
|
||||
ok(r == ERROR_SUCCESS, "select query failed\n");
|
||||
}
|
||||
MsiCloseHandle(hrec);
|
||||
|
||||
/* check deleted value */
|
||||
hrec = 0;
|
||||
query = "select * from `MOO` where `NOO` = 3";
|
||||
r = do_query(hdb, query, &hrec);
|
||||
ok(r == ERROR_NO_MORE_ITEMS, "select query failed\n");
|
||||
todo_wine
|
||||
{
|
||||
ok(r == ERROR_NO_MORE_ITEMS, "select query failed\n");
|
||||
}
|
||||
if (hrec) MsiCloseHandle(hrec);
|
||||
|
||||
/* check added stream */
|
||||
|
@ -2067,39 +2093,81 @@ static void test_try_transform(void)
|
|||
hrec = 0;
|
||||
query = "select * from `MOO`";
|
||||
r = MsiDatabaseOpenView(hdb, query, &hview);
|
||||
ok(r == ERROR_SUCCESS, "open view failed\n");
|
||||
todo_wine
|
||||
{
|
||||
ok(r == ERROR_SUCCESS, "open view failed\n");
|
||||
}
|
||||
|
||||
r = MsiViewExecute(hview, 0);
|
||||
ok(r == ERROR_SUCCESS, "view execute failed\n");
|
||||
todo_wine
|
||||
{
|
||||
ok(r == ERROR_SUCCESS, "view execute failed\n");
|
||||
}
|
||||
|
||||
r = MsiViewFetch(hview, &hrec);
|
||||
ok(r == ERROR_SUCCESS, "view fetch failed\n");
|
||||
todo_wine
|
||||
{
|
||||
ok(r == ERROR_SUCCESS, "view fetch failed\n");
|
||||
}
|
||||
|
||||
r = MsiRecordGetInteger(hrec, 1);
|
||||
ok(r == 1, "Expected 1, got %d\n", r);
|
||||
todo_wine
|
||||
{
|
||||
ok(r == 1, "Expected 1, got %d\n", r);
|
||||
}
|
||||
|
||||
sz = sizeof buffer;
|
||||
r = MsiRecordGetString(hrec, 2, buffer, &sz);
|
||||
ok(r == ERROR_SUCCESS, "record get string failed\n");
|
||||
ok(!lstrcmpA(buffer, "c"), "Expected c, got %s\n", buffer);
|
||||
todo_wine
|
||||
{
|
||||
ok(r == ERROR_SUCCESS, "record get string failed\n");
|
||||
ok(!lstrcmpA(buffer, "c"), "Expected c, got %s\n", buffer);
|
||||
}
|
||||
|
||||
r = MsiRecordGetInteger(hrec, 3);
|
||||
ok(r == 0x80000000, "Expected 0x80000000, got %d\n", r);
|
||||
|
||||
r = MsiRecordGetInteger(hrec, 4);
|
||||
todo_wine
|
||||
{
|
||||
ok(r == 5, "Expected 5, got %d\n", r);
|
||||
}
|
||||
|
||||
MsiCloseHandle(hrec);
|
||||
|
||||
r = MsiViewFetch(hview, &hrec);
|
||||
ok(r == ERROR_SUCCESS, "view fetch failed\n");
|
||||
todo_wine
|
||||
{
|
||||
ok(r == ERROR_SUCCESS, "view fetch failed\n");
|
||||
}
|
||||
|
||||
r = MsiRecordGetInteger(hrec, 1);
|
||||
ok(r == 2, "Expected 2, got %d\n", r);
|
||||
todo_wine
|
||||
{
|
||||
ok(r == 2, "Expected 2, got %d\n", r);
|
||||
}
|
||||
|
||||
sz = sizeof buffer;
|
||||
r = MsiRecordGetString(hrec, 2, buffer, &sz);
|
||||
ok(r == ERROR_SUCCESS, "record get string failed\n");
|
||||
ok(!lstrcmpA(buffer, "b"), "Expected b, got %s\n", buffer);
|
||||
todo_wine
|
||||
{
|
||||
ok(r == ERROR_SUCCESS, "record get string failed\n");
|
||||
ok(!lstrcmpA(buffer, "b"), "Expected b, got %s\n", buffer);
|
||||
}
|
||||
|
||||
r = MsiRecordGetInteger(hrec, 3);
|
||||
ok(r == 0x80000000, "Expected 0x80000000, got %d\n", r);
|
||||
|
||||
r = MsiRecordGetInteger(hrec, 4);
|
||||
ok(r == 0x80000000, "Expected 0x80000000, got %d\n", r);
|
||||
|
||||
MsiCloseHandle(hrec);
|
||||
|
||||
r = MsiViewFetch(hview, &hrec);
|
||||
ok(r == ERROR_NO_MORE_ITEMS, "view fetch succeeded\n");
|
||||
todo_wine
|
||||
{
|
||||
ok(r == ERROR_NO_MORE_ITEMS, "view fetch succeeded\n");
|
||||
}
|
||||
|
||||
MsiCloseHandle(hrec);
|
||||
MsiCloseHandle(hview);
|
||||
|
|
Loading…
Reference in New Issue