diff options
Diffstat (limited to 'tests/testdatabase.c')
-rw-r--r-- | tests/testdatabase.c | 1242 |
1 files changed, 5 insertions, 1237 deletions
diff --git a/tests/testdatabase.c b/tests/testdatabase.c index 48685f8..0607b3d 100644 --- a/tests/testdatabase.c +++ b/tests/testdatabase.c @@ -692,358 +692,6 @@ static void test_msibadqueries(void) ok(r == true, "file didn't exist after commit\n"); } -static void test_querymodify(void) -{ - LibmsiDatabase *hdb = 0; - LibmsiQuery *hquery = 0; - LibmsiRecord *hrec = 0; - unsigned r; - LibmsiDBError err; - const char *sql; - char buffer[0x100]; - unsigned sz; - - DeleteFile(msifile); - - /* just libmsi_database_open should not create a file */ - r = libmsi_database_open(msifile, LIBMSI_DB_OPEN_CREATE, &hdb); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_database_open failed\n"); - - sql = "CREATE TABLE `phone` ( " - "`id` INT, `name` CHAR(32), `number` CHAR(32) " - "PRIMARY KEY `id`)"; - r = run_query( hdb, 0, sql ); - ok(r == LIBMSI_RESULT_SUCCESS, "query failed\n"); - - sql = "CREATE TABLE `_Validation` ( " - "`Table` CHAR(32) NOT NULL, `Column` CHAR(32) NOT NULL, " - "`Nullable` CHAR(4) NOT NULL, `MinValue` INT, `MaxValue` INT, " - "`KeyTable` CHAR(255), `KeyColumn` SHORT, `Category` CHAR(32), " - "`Set` CHAR(255), `Description` CHAR(255) PRIMARY KEY `Table`, `Column`)"; - r = run_query( hdb, 0, sql ); - ok(r == LIBMSI_RESULT_SUCCESS, "query failed\n"); - - sql = "INSERT INTO `_Validation` ( `Table`, `Column`, `Nullable` ) " - "VALUES('phone', 'id', 'N')"; - r = run_query( hdb, 0, sql ); - ok(r == LIBMSI_RESULT_SUCCESS, "query failed\n"); - - /* check what the error function reports without doing anything */ - sz = 0; - /* passing NULL as the 3rd param make function to crash on older platforms */ - err = libmsi_query_get_error( 0, NULL, &sz ); - ok(err == LIBMSI_DB_ERROR_INVALIDARG, "libmsi_query_get_error return\n"); - - /* open a query */ - sql = "SELECT * FROM `phone`"; - r = libmsi_database_open_query(hdb, sql, &hquery); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_database_open_query failed\n"); - - /* see what happens with a good hquery and bad args */ - err = libmsi_query_get_error( hquery, NULL, NULL ); - ok(err == LIBMSI_DB_ERROR_INVALIDARG || err == LIBMSI_DB_ERROR_NOERROR, - "libmsi_query_get_error returns %u (expected -3)\n", err); - err = libmsi_query_get_error( hquery, buffer, NULL ); - ok(err == LIBMSI_DB_ERROR_INVALIDARG, "libmsi_query_get_error return\n"); - - /* see what happens with a zero length buffer */ - sz = 0; - buffer[0] = 'x'; - err = libmsi_query_get_error( hquery, buffer, &sz ); - ok(err == LIBMSI_DB_ERROR_MOREDATA, "libmsi_query_get_error return\n"); - ok(buffer[0] == 'x', "buffer cleared\n"); - ok(sz == 0, "size not zero\n"); - - /* ok this one is strange */ - sz = 0; - err = libmsi_query_get_error( hquery, NULL, &sz ); - ok(err == LIBMSI_DB_ERROR_NOERROR, "libmsi_query_get_error return\n"); - ok(sz == 0, "size not zero\n"); - - /* see if it really has an error */ - sz = sizeof buffer; - buffer[0] = 'x'; - err = libmsi_query_get_error( hquery, buffer, &sz ); - ok(err == LIBMSI_DB_ERROR_NOERROR, "libmsi_query_get_error return\n"); - ok(buffer[0] == 0, "buffer not cleared\n"); - ok(sz == 0, "size not zero\n"); - - r = libmsi_query_execute(hquery, 0); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_execute failed\n"); - - /* try some invalid records */ - r = libmsi_query_modify(hquery, LIBMSI_MODIFY_INSERT, 0 ); - ok(r == LIBMSI_RESULT_INVALID_HANDLE, "libmsi_query_modify failed\n"); - r = libmsi_query_modify(hquery, -1, 0 ); - ok(r == LIBMSI_RESULT_INVALID_HANDLE, "libmsi_query_modify failed\n"); - - /* try an small record */ - hrec = libmsi_record_create(1); - r = libmsi_query_modify(hquery, -1, hrec ); - ok(r == LIBMSI_RESULT_INVALID_DATA, "libmsi_query_modify failed\n"); - - sz = sizeof buffer; - buffer[0] = 'x'; - err = libmsi_query_get_error( hquery, buffer, &sz ); - ok(err == LIBMSI_DB_ERROR_NOERROR, "libmsi_query_get_error return\n"); - ok(buffer[0] == 0, "buffer not cleared\n"); - ok(sz == 0, "size not zero\n"); - - r = libmsi_unref(hrec); - ok(r == LIBMSI_RESULT_SUCCESS, "failed to close record\n"); - - /* insert a valid record */ - hrec = libmsi_record_create(3); - - r = libmsi_record_set_int(hrec, 1, 1); - ok(r == LIBMSI_RESULT_SUCCESS, "failed to set integer\n"); - r = libmsi_record_set_string(hrec, 2, "bob"); - ok(r == LIBMSI_RESULT_SUCCESS, "failed to set string\n"); - r = libmsi_record_set_string(hrec, 3, "7654321"); - ok(r == LIBMSI_RESULT_SUCCESS, "failed to set string\n"); - - r = libmsi_query_execute(hquery, 0); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_execute failed\n"); - r = libmsi_query_modify(hquery, LIBMSI_MODIFY_INSERT_TEMPORARY, hrec ); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_modify failed\n"); - - /* validate it */ - r = libmsi_query_execute(hquery, 0); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_execute failed\n"); - - r = libmsi_query_modify(hquery, LIBMSI_MODIFY_VALIDATE_NEW, hrec ); - ok(r == LIBMSI_RESULT_INVALID_DATA, "libmsi_query_modify failed %u\n", r); - - sz = sizeof buffer; - buffer[0] = 'x'; - err = libmsi_query_get_error( hquery, buffer, &sz ); - ok(err == LIBMSI_DB_ERROR_DUPLICATEKEY, "libmsi_query_get_error returned %u\n", err); - ok(!strcmp(buffer, "id"), "expected \"id\" c, got \"%s\"\n", buffer); - ok(sz == 2, "size not 2\n"); - - /* insert the same thing again */ - r = libmsi_query_execute(hquery, 0); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_execute failed\n"); - - /* should fail ... */ - r = libmsi_query_modify(hquery, LIBMSI_MODIFY_INSERT_TEMPORARY, hrec ); - ok(r == LIBMSI_RESULT_FUNCTION_FAILED, "libmsi_query_modify failed\n"); - - /* try to merge the same record */ - r = libmsi_query_execute(hquery, 0); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_execute failed\n"); - r = libmsi_query_modify(hquery, LIBMSI_MODIFY_MERGE, hrec ); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_modify failed\n"); - - r = libmsi_unref(hrec); - ok(r == LIBMSI_RESULT_SUCCESS, "failed to close record\n"); - - /* try merging a new record */ - hrec = libmsi_record_create(3); - - r = libmsi_record_set_int(hrec, 1, 10); - ok(r == LIBMSI_RESULT_SUCCESS, "failed to set integer\n"); - r = libmsi_record_set_string(hrec, 2, "pepe"); - ok(r == LIBMSI_RESULT_SUCCESS, "failed to set string\n"); - r = libmsi_record_set_string(hrec, 3, "7654321"); - ok(r == LIBMSI_RESULT_SUCCESS, "failed to set string\n"); - - r = libmsi_query_modify(hquery, LIBMSI_MODIFY_MERGE, hrec ); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_modify failed\n"); - r = libmsi_query_execute(hquery, 0); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_execute failed\n"); - - r = libmsi_unref(hrec); - ok(r == LIBMSI_RESULT_SUCCESS, "failed to close record\n"); - - r = libmsi_query_close(hquery); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_close failed\n"); - r = libmsi_unref(hquery); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_unref failed\n"); - - sql = "SELECT * FROM `phone`"; - r = libmsi_database_open_query(hdb, sql, &hquery); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_database_open_query failed\n"); - - r = libmsi_query_execute(hquery, 0); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_execute failed\n"); - - r = libmsi_query_fetch(hquery, &hrec); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_fetch failed\n"); - - r = libmsi_record_get_integer(hrec, 1); - ok(r == 1, "Expected 1, got %d\n", r); - - sz = sizeof(buffer); - r = libmsi_record_get_string(hrec, 2, buffer, &sz); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_record_get_string failed\n"); - ok(!strcmp(buffer, "bob"), "Expected bob, got %s\n", buffer); - - sz = sizeof(buffer); - r = libmsi_record_get_string(hrec, 3, buffer, &sz); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_record_get_string failed\n"); - ok(!strcmp(buffer, "7654321"), "Expected 7654321, got %s\n", buffer); - - /* update the query, non-primary key */ - r = libmsi_record_set_string(hrec, 3, "3141592"); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_record_set_string failed\n"); - - r = libmsi_query_modify(hquery, LIBMSI_MODIFY_UPDATE, hrec); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_modify failed\n"); - - /* do it again */ - r = libmsi_query_modify(hquery, LIBMSI_MODIFY_UPDATE, hrec); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_modify failed: %d\n", r); - - /* update the query, primary key */ - r = libmsi_record_set_int(hrec, 1, 5); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_record_set_int failed\n"); - - r = libmsi_query_modify(hquery, LIBMSI_MODIFY_UPDATE, hrec); - ok(r == LIBMSI_RESULT_FUNCTION_FAILED, "libmsi_query_modify failed\n"); - - r = libmsi_unref(hrec); - ok(r == LIBMSI_RESULT_SUCCESS, "failed to close record\n"); - - r = libmsi_query_close(hquery); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_close failed\n"); - r = libmsi_unref(hquery); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_unref failed\n"); - - sql = "SELECT * FROM `phone`"; - r = libmsi_database_open_query(hdb, sql, &hquery); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_database_open_query failed\n"); - - r = libmsi_query_execute(hquery, 0); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_execute failed\n"); - - r = libmsi_query_fetch(hquery, &hrec); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_fetch failed\n"); - - r = libmsi_record_get_integer(hrec, 1); - ok(r == 1, "Expected 1, got %d\n", r); - - sz = sizeof(buffer); - r = libmsi_record_get_string(hrec, 2, buffer, &sz); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_record_get_string failed\n"); - ok(!strcmp(buffer, "bob"), "Expected bob, got %s\n", buffer); - - sz = sizeof(buffer); - r = libmsi_record_get_string(hrec, 3, buffer, &sz); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_record_get_string failed\n"); - ok(!strcmp(buffer, "3141592"), "Expected 3141592, got %s\n", buffer); - - r = libmsi_unref(hrec); - ok(r == LIBMSI_RESULT_SUCCESS, "failed to close record\n"); - - /* use a record that doesn't come from a query fetch */ - hrec = libmsi_record_create(3); - ok(hrec != 0, "libmsi_record_create failed\n"); - - r = libmsi_record_set_int(hrec, 1, 3); - ok(r == LIBMSI_RESULT_SUCCESS, "failed to set integer\n"); - r = libmsi_record_set_string(hrec, 2, "jane"); - ok(r == LIBMSI_RESULT_SUCCESS, "failed to set string\n"); - r = libmsi_record_set_string(hrec, 3, "112358"); - ok(r == LIBMSI_RESULT_SUCCESS, "failed to set string\n"); - - r = libmsi_query_modify(hquery, LIBMSI_MODIFY_UPDATE, hrec); - ok(r == LIBMSI_RESULT_FUNCTION_FAILED, "Expected LIBMSI_RESULT_FUNCTION_FAILED, got %d\n", r); - - r = libmsi_unref(hrec); - ok(r == LIBMSI_RESULT_SUCCESS, "failed to close record\n"); - - /* use a record that doesn't come from a query fetch, primary key matches */ - hrec = libmsi_record_create(3); - ok(hrec != 0, "libmsi_record_create failed\n"); - - r = libmsi_record_set_int(hrec, 1, 1); - ok(r == LIBMSI_RESULT_SUCCESS, "failed to set integer\n"); - r = libmsi_record_set_string(hrec, 2, "jane"); - ok(r == LIBMSI_RESULT_SUCCESS, "failed to set string\n"); - r = libmsi_record_set_string(hrec, 3, "112358"); - ok(r == LIBMSI_RESULT_SUCCESS, "failed to set string\n"); - - r = libmsi_query_modify(hquery, LIBMSI_MODIFY_UPDATE, hrec); - ok(r == LIBMSI_RESULT_FUNCTION_FAILED, "libmsi_query_modify failed\n"); - - r = libmsi_unref(hrec); - ok(r == LIBMSI_RESULT_SUCCESS, "failed to close record\n"); - - hrec = libmsi_record_create(3); - - r = libmsi_record_set_int(hrec, 1, 2); - ok(r == LIBMSI_RESULT_SUCCESS, "failed to set integer\n"); - r = libmsi_record_set_string(hrec, 2, "nick"); - ok(r == LIBMSI_RESULT_SUCCESS, "failed to set string\n"); - r = libmsi_record_set_string(hrec, 3, "141421"); - ok(r == LIBMSI_RESULT_SUCCESS, "failed to set string\n"); - - r = libmsi_query_execute(hquery, 0); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_execute failed\n"); - r = libmsi_query_modify(hquery, LIBMSI_MODIFY_INSERT_TEMPORARY, hrec ); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_modify failed\n"); - - r = libmsi_unref(hrec); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_unref failed\n"); - r = libmsi_query_close(hquery); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_close failed\n"); - r = libmsi_unref(hquery); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_unref failed\n"); - - sql = "SELECT * FROM `phone` WHERE `id` = 1"; - r = libmsi_database_open_query(hdb, sql, &hquery); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_database_open_query failed\n"); - r = libmsi_query_execute(hquery, 0); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_execute failed\n"); - r = libmsi_query_fetch(hquery, &hrec); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_fetch failed\n"); - - /* change the id to match the second row */ - r = libmsi_record_set_int(hrec, 1, 2); - ok(r == LIBMSI_RESULT_SUCCESS, "failed to set integer\n"); - r = libmsi_record_set_string(hrec, 2, "jerry"); - ok(r == LIBMSI_RESULT_SUCCESS, "failed to set string\n"); - - r = libmsi_query_modify(hquery, LIBMSI_MODIFY_UPDATE, hrec); - ok(r == LIBMSI_RESULT_FUNCTION_FAILED, "libmsi_query_modify failed\n"); - - r = libmsi_unref(hrec); - ok(r == LIBMSI_RESULT_SUCCESS, "failed to close record\n"); - r = libmsi_query_close(hquery); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_close failed\n"); - r = libmsi_unref(hquery); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_unref failed\n"); - - /* broader search */ - sql = "SELECT * FROM `phone` ORDER BY `id`"; - r = libmsi_database_open_query(hdb, sql, &hquery); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_database_open_query failed\n"); - r = libmsi_query_execute(hquery, 0); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_execute failed\n"); - r = libmsi_query_fetch(hquery, &hrec); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_fetch failed\n"); - - /* change the id to match the second row */ - r = libmsi_record_set_int(hrec, 1, 2); - ok(r == LIBMSI_RESULT_SUCCESS, "failed to set integer\n"); - r = libmsi_record_set_string(hrec, 2, "jerry"); - ok(r == LIBMSI_RESULT_SUCCESS, "failed to set string\n"); - - r = libmsi_query_modify(hquery, LIBMSI_MODIFY_UPDATE, hrec); - ok(r == LIBMSI_RESULT_FUNCTION_FAILED, "libmsi_query_modify failed\n"); - - r = libmsi_unref(hrec); - ok(r == LIBMSI_RESULT_SUCCESS, "failed to close record\n"); - r = libmsi_query_close(hquery); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_close failed\n"); - r = libmsi_unref(hquery); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_unref failed\n"); - - r = libmsi_unref( hdb ); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_database_open close failed\n"); -} - static LibmsiDatabase *create_db(void) { LibmsiDatabase *hdb = 0; @@ -3777,63 +3425,6 @@ static void test_join(void) ok( r == LIBMSI_RESULT_BAD_QUERY_SYNTAX, "Expected LIBMSI_RESULT_BAD_QUERY_SYNTAX, got %d\n", r ); - /* try updating a row in a join table */ - sql = "SELECT `Component`.`ComponentId`, `FeatureComponents`.`Feature_` " - "FROM `Component`, `FeatureComponents` " - "WHERE `Component`.`Component` = `FeatureComponents`.`Component_` " - "ORDER BY `Feature_`"; - r = libmsi_database_open_query(hdb, sql, &hquery); - ok( r == LIBMSI_RESULT_SUCCESS, "failed to open query: %d\n", r ); - - r = libmsi_query_execute(hquery, 0); - ok( r == LIBMSI_RESULT_SUCCESS, "failed to execute query: %d\n", r ); - - r = libmsi_query_fetch(hquery, &hrec); - ok( r == LIBMSI_RESULT_SUCCESS, "failed to fetch query: %d\n", r ); - - r = libmsi_record_set_string( hrec, 1, "epicranius" ); - ok( r == LIBMSI_RESULT_SUCCESS, "failed to set string: %d\n", r ); - - r = libmsi_query_modify(hquery, LIBMSI_MODIFY_UPDATE, hrec); - ok( r == LIBMSI_RESULT_SUCCESS, "failed to update row: %d\n", r ); - - /* try another valid operation for joins */ - r = libmsi_query_modify(hquery, LIBMSI_MODIFY_REFRESH, hrec); - todo_wine ok( r == LIBMSI_RESULT_SUCCESS, "failed to refresh row: %d\n", r ); - - /* try an invalid operation for joins */ - r = libmsi_query_modify(hquery, LIBMSI_MODIFY_DELETE, hrec); - ok( r == LIBMSI_RESULT_FUNCTION_FAILED, "unexpected result: %d\n", r ); - - r = libmsi_record_set_string( hrec, 2, "epicranius" ); - ok( r == LIBMSI_RESULT_SUCCESS, "failed to set string: %d\n", r ); - - /* primary key cannot be updated */ - r = libmsi_query_modify(hquery, LIBMSI_MODIFY_UPDATE, hrec); - ok( r == LIBMSI_RESULT_FUNCTION_FAILED, "failed to update row: %d\n", r ); - - libmsi_unref(hrec); - libmsi_query_close(hquery); - libmsi_unref(hquery); - - r = libmsi_database_open_query(hdb, sql, &hquery); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_database_open_query failed\n"); - - r = libmsi_query_execute(hquery, 0); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_execute failed\n"); - - r = libmsi_query_fetch(hquery, &hrec); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_fetch failed\n"); - - size = MAX_PATH; - r = libmsi_record_get_string( hrec, 1, buf, &size ); - ok( r == LIBMSI_RESULT_SUCCESS, "failed to get record string: %d\n", r ); - ok( !strcmp( buf, "epicranius" ), "expected 'epicranius', got %s\n", buf ); - - libmsi_unref(hrec); - libmsi_query_close(hquery); - libmsi_unref(hquery); - libmsi_unref(hdb); DeleteFile(msifile); } @@ -5228,389 +4819,6 @@ static void test_select_markers(void) DeleteFile(msifile); } -static void test_querymodify_update(void) -{ - LibmsiDatabase *hdb = 0; - LibmsiQuery *hquery = 0; - LibmsiRecord *hrec = 0; - unsigned i, test_max, offset, count; - const char *sql; - unsigned r; - - DeleteFile(msifile); - - r = libmsi_database_open(msifile, LIBMSI_DB_OPEN_CREATE, &hdb); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_database_open failed\n"); - - sql = "CREATE TABLE `table` (`A` INT, `B` INT PRIMARY KEY `A`)"; - r = run_query( hdb, 0, sql ); - ok(r == LIBMSI_RESULT_SUCCESS, "query failed\n"); - - sql = "INSERT INTO `table` (`A`, `B`) VALUES (1, 2)"; - r = run_query( hdb, 0, sql ); - ok(r == LIBMSI_RESULT_SUCCESS, "query failed\n"); - - sql = "INSERT INTO `table` (`A`, `B`) VALUES (3, 4)"; - r = run_query( hdb, 0, sql ); - ok(r == LIBMSI_RESULT_SUCCESS, "query failed\n"); - - sql = "INSERT INTO `table` (`A`, `B`) VALUES (5, 6)"; - r = run_query( hdb, 0, sql ); - ok(r == LIBMSI_RESULT_SUCCESS, "query failed\n"); - - sql = "SELECT `B` FROM `table`"; - r = libmsi_database_open_query(hdb, sql, &hquery); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_database_open_query failed\n"); - r = libmsi_query_execute(hquery, 0); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_execute failed\n"); - r = libmsi_query_fetch(hquery, &hrec); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_fetch failed\n"); - - r = libmsi_record_set_int(hrec, 1, 0); - ok(r == LIBMSI_RESULT_SUCCESS, "failed to set integer\n"); - - r = libmsi_query_modify(hquery, LIBMSI_MODIFY_UPDATE, hrec); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_modify failed: %d\n", r); - - r = libmsi_unref(hrec); - ok(r == LIBMSI_RESULT_SUCCESS, "failed to close record\n"); - - r = libmsi_query_close(hquery); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_close failed\n"); - r = libmsi_unref(hquery); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_unref failed\n"); - - sql = "SELECT * FROM `table`"; - r = libmsi_database_open_query(hdb, sql, &hquery); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_database_open_query failed\n"); - r = libmsi_query_execute(hquery, 0); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_execute failed\n"); - r = libmsi_query_fetch(hquery, &hrec); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_fetch failed\n"); - - r = libmsi_record_get_integer(hrec, 1); - ok(r == 1, "Expected 1, got %d\n", r); - r = libmsi_record_get_integer(hrec, 2); - ok(r == 0, "Expected 0, got %d\n", r); - - r = libmsi_unref(hrec); - ok(r == LIBMSI_RESULT_SUCCESS, "failed to close record\n"); - - r = libmsi_query_fetch(hquery, &hrec); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_fetch failed\n"); - - r = libmsi_record_get_integer(hrec, 1); - ok(r == 3, "Expected 3, got %d\n", r); - r = libmsi_record_get_integer(hrec, 2); - ok(r == 4, "Expected 4, got %d\n", r); - - r = libmsi_unref(hrec); - ok(r == LIBMSI_RESULT_SUCCESS, "failed to close record\n"); - - r = libmsi_query_fetch(hquery, &hrec); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_fetch failed\n"); - - r = libmsi_record_get_integer(hrec, 1); - ok(r == 5, "Expected 5, got %d\n", r); - r = libmsi_record_get_integer(hrec, 2); - ok(r == 6, "Expected 6, got %d\n", r); - - r = libmsi_unref(hrec); - ok(r == LIBMSI_RESULT_SUCCESS, "failed to close record\n"); - - r = libmsi_query_fetch(hquery, &hrec); - ok(r == LIBMSI_RESULT_NO_MORE_ITEMS, "Expected LIBMSI_RESULT_NO_MORE_ITEMS, got %d\n", r); - - r = libmsi_query_close(hquery); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_close failed\n"); - r = libmsi_unref(hquery); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_unref failed\n"); - - /* loop through all elements */ - sql = "SELECT `B` FROM `table`"; - r = libmsi_database_open_query(hdb, sql, &hquery); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_database_open_query failed\n"); - r = libmsi_query_execute(hquery, 0); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_execute failed\n"); - - while (true) - { - r = libmsi_query_fetch(hquery, &hrec); - if (r != LIBMSI_RESULT_SUCCESS) - break; - - r = libmsi_record_set_int(hrec, 1, 0); - ok(r == LIBMSI_RESULT_SUCCESS, "failed to set integer\n"); - - r = libmsi_query_modify(hquery, LIBMSI_MODIFY_UPDATE, hrec); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_modify failed: %d\n", r); - - r = libmsi_unref(hrec); - ok(r == LIBMSI_RESULT_SUCCESS, "failed to close record\n"); - } - - r = libmsi_query_close(hquery); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_close failed\n"); - r = libmsi_unref(hquery); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_unref failed\n"); - - sql = "SELECT * FROM `table`"; - r = libmsi_database_open_query(hdb, sql, &hquery); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_database_open_query failed\n"); - r = libmsi_query_execute(hquery, 0); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_execute failed\n"); - r = libmsi_query_fetch(hquery, &hrec); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_fetch failed\n"); - - r = libmsi_record_get_integer(hrec, 1); - ok(r == 1, "Expected 1, got %d\n", r); - r = libmsi_record_get_integer(hrec, 2); - ok(r == 0, "Expected 0, got %d\n", r); - - r = libmsi_unref(hrec); - ok(r == LIBMSI_RESULT_SUCCESS, "failed to close record\n"); - - r = libmsi_query_fetch(hquery, &hrec); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_fetch failed\n"); - - r = libmsi_record_get_integer(hrec, 1); - ok(r == 3, "Expected 3, got %d\n", r); - r = libmsi_record_get_integer(hrec, 2); - ok(r == 0, "Expected 0, got %d\n", r); - - r = libmsi_unref(hrec); - ok(r == LIBMSI_RESULT_SUCCESS, "failed to close record\n"); - - r = libmsi_query_fetch(hquery, &hrec); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_fetch failed\n"); - - r = libmsi_record_get_integer(hrec, 1); - ok(r == 5, "Expected 5, got %d\n", r); - r = libmsi_record_get_integer(hrec, 2); - ok(r == 0, "Expected 0, got %d\n", r); - - r = libmsi_unref(hrec); - ok(r == LIBMSI_RESULT_SUCCESS, "failed to close record\n"); - - r = libmsi_query_fetch(hquery, &hrec); - ok(r == LIBMSI_RESULT_NO_MORE_ITEMS, "Expected LIBMSI_RESULT_NO_MORE_ITEMS, got %d\n", r); - - r = libmsi_query_close(hquery); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_close failed\n"); - r = libmsi_unref(hquery); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_unref failed\n"); - - sql = "CREATE TABLE `table2` (`A` INT, `B` INT PRIMARY KEY `A`)"; - r = run_query( hdb, 0, sql ); - ok(r == LIBMSI_RESULT_SUCCESS, "query failed\n"); - - sql = "INSERT INTO `table2` (`A`, `B`) VALUES (?, ?)"; - r = libmsi_database_open_query( hdb, sql, &hquery ); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_database_open_query failed\n"); - - test_max = 100; - offset = 1234; - for(i = 0; i < test_max; i++) - { - - hrec = libmsi_record_create( 2 ); - libmsi_record_set_int( hrec, 1, test_max - i ); - libmsi_record_set_int( hrec, 2, i ); - - r = libmsi_query_execute( hquery, hrec ); - ok(r == LIBMSI_RESULT_SUCCESS, "Got %d\n", r); - - r = libmsi_unref( hrec ); - ok(r == LIBMSI_RESULT_SUCCESS, "Got %d\n", r); - } - - r = libmsi_query_close( hquery ); - ok(r == LIBMSI_RESULT_SUCCESS, "Got %d\n", r); - r = libmsi_unref( hquery ); - ok(r == LIBMSI_RESULT_SUCCESS, "Got %d\n", r); - - /* Update. */ - sql = "SELECT * FROM `table2` ORDER BY `B`"; - r = libmsi_database_open_query( hdb, sql, &hquery); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_database_open_query failed\n"); - r = libmsi_query_execute( hquery, 0 ); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_execute failed\n"); - - count = 0; - while (libmsi_query_fetch( hquery, &hrec ) == LIBMSI_RESULT_SUCCESS) - { - unsigned b = libmsi_record_get_integer( hrec, 2 ); - - r = libmsi_record_set_int( hrec, 2, b + offset); - ok(r == LIBMSI_RESULT_SUCCESS, "Got %d\n", r); - - r = libmsi_query_modify( hquery, LIBMSI_MODIFY_UPDATE, hrec ); - ok(r == LIBMSI_RESULT_SUCCESS, "Got %d\n", r); - - r = libmsi_unref(hrec); - ok(r == LIBMSI_RESULT_SUCCESS, "failed to close record\n"); - count++; - } - ok(count == test_max, "Got count %d\n", count); - - r = libmsi_query_close(hquery); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_close failed\n"); - r = libmsi_unref(hquery); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_unref failed\n"); - - /* Recheck. */ - sql = "SELECT * FROM `table2` ORDER BY `B`"; - r = libmsi_database_open_query( hdb, sql, &hquery); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_database_open_query failed\n"); - r = libmsi_query_execute( hquery, 0 ); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_execute failed\n"); - - count = 0; - while (libmsi_query_fetch( hquery, &hrec ) == LIBMSI_RESULT_SUCCESS) - { - unsigned a = libmsi_record_get_integer( hrec, 1 ); - unsigned b = libmsi_record_get_integer( hrec, 2 ); - ok( ( test_max - a + offset) == b, "Got (%d, %d), expected (%d, %d)\n", - a, b, test_max - a + offset, b); - - r = libmsi_unref(hrec); - ok(r == LIBMSI_RESULT_SUCCESS, "failed to close record\n"); - count++; - } - ok(count == test_max, "Got count %d\n", count); - - r = libmsi_query_close(hquery); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_close failed\n"); - r = libmsi_unref(hquery); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_unref failed\n"); - - r = libmsi_unref( hdb ); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_database_open close failed\n"); -} - -static void test_querymodify_assign(void) -{ - LibmsiDatabase *hdb = 0; - LibmsiQuery *hquery = 0; - LibmsiRecord *hrec = 0; - const char *sql; - unsigned r; - - /* setup database */ - DeleteFile(msifile); - - r = libmsi_database_open(msifile, LIBMSI_DB_OPEN_CREATE, &hdb); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_database_open failed\n"); - - sql = "CREATE TABLE `table` (`A` INT, `B` INT PRIMARY KEY `A`)"; - r = run_query( hdb, 0, sql ); - ok(r == LIBMSI_RESULT_SUCCESS, "query failed\n"); - - /* assign to query, new primary key */ - sql = "SELECT * FROM `table`"; - r = libmsi_database_open_query(hdb, sql, &hquery); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_database_open_query failed\n"); - r = libmsi_query_execute(hquery, 0); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_execute failed\n"); - - hrec = libmsi_record_create(2); - ok(hrec != 0, "libmsi_record_create failed\n"); - - r = libmsi_record_set_int(hrec, 1, 1); - ok(r == LIBMSI_RESULT_SUCCESS, "failed to set integer\n"); - r = libmsi_record_set_int(hrec, 2, 2); - ok(r == LIBMSI_RESULT_SUCCESS, "failed to set integer\n"); - - r = libmsi_query_modify(hquery, LIBMSI_MODIFY_ASSIGN, hrec); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_modify failed: %d\n", r); - - r = libmsi_unref(hrec); - ok(r == LIBMSI_RESULT_SUCCESS, "failed to close record\n"); - - r = libmsi_query_close(hquery); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_close failed\n"); - r = libmsi_unref(hquery); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_unref failed\n"); - - sql = "SELECT * FROM `table`"; - r = libmsi_database_open_query(hdb, sql, &hquery); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_database_open_query failed\n"); - r = libmsi_query_execute(hquery, 0); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_execute failed\n"); - r = libmsi_query_fetch(hquery, &hrec); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_fetch failed\n"); - - r = libmsi_record_get_integer(hrec, 1); - ok(r == 1, "Expected 1, got %d\n", r); - r = libmsi_record_get_integer(hrec, 2); - ok(r == 2, "Expected 2, got %d\n", r); - - r = libmsi_unref(hrec); - ok(r == LIBMSI_RESULT_SUCCESS, "failed to close record\n"); - - r = libmsi_query_fetch(hquery, &hrec); - ok(r == LIBMSI_RESULT_NO_MORE_ITEMS, "Expected LIBMSI_RESULT_NO_MORE_ITEMS, got %d\n", r); - - r = libmsi_query_close(hquery); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_close failed\n"); - r = libmsi_unref(hquery); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_unref failed\n"); - - /* assign to query, primary key matches */ - sql = "SELECT * FROM `table`"; - r = libmsi_database_open_query(hdb, sql, &hquery); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_database_open_query failed\n"); - r = libmsi_query_execute(hquery, 0); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_execute failed\n"); - - hrec = libmsi_record_create(2); - ok(hrec != 0, "libmsi_record_create failed\n"); - - r = libmsi_record_set_int(hrec, 1, 1); - ok(r == LIBMSI_RESULT_SUCCESS, "failed to set integer\n"); - r = libmsi_record_set_int(hrec, 2, 4); - ok(r == LIBMSI_RESULT_SUCCESS, "failed to set integer\n"); - - r = libmsi_query_modify(hquery, LIBMSI_MODIFY_ASSIGN, hrec); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_modify failed: %d\n", r); - - r = libmsi_unref(hrec); - ok(r == LIBMSI_RESULT_SUCCESS, "failed to close record\n"); - - r = libmsi_query_close(hquery); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_close failed\n"); - r = libmsi_unref(hquery); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_unref failed\n"); - - sql = "SELECT * FROM `table`"; - r = libmsi_database_open_query(hdb, sql, &hquery); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_database_open_query failed\n"); - r = libmsi_query_execute(hquery, 0); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_execute failed\n"); - r = libmsi_query_fetch(hquery, &hrec); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_fetch failed\n"); - - r = libmsi_record_get_integer(hrec, 1); - ok(r == 1, "Expected 1, got %d\n", r); - r = libmsi_record_get_integer(hrec, 2); - ok(r == 4, "Expected 4, got %d\n", r); - - r = libmsi_unref(hrec); - ok(r == LIBMSI_RESULT_SUCCESS, "failed to close record\n"); - - r = libmsi_query_fetch(hquery, &hrec); - ok(r == LIBMSI_RESULT_NO_MORE_ITEMS, "Expected LIBMSI_RESULT_NO_MORE_ITEMS, got %d\n", r); - - r = libmsi_query_close(hquery); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_query_close failed\n"); - r = libmsi_unref(hquery); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_unref failed\n"); - - /* close database */ - r = libmsi_unref( hdb ); - ok(r == LIBMSI_RESULT_SUCCESS, "libmsi_database_open close failed\n"); -} - static const WCHAR data10[] = { /* MOO */ 0x8001, 0x000b, }; @@ -5684,36 +4892,16 @@ static void test_stringtable(void) r = run_query(hdb, 0, sql); ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); - /* open a query */ - sql = "SELECT * FROM `MOO`"; - r = libmsi_database_open_query(hdb, sql, &hquery); - ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); - r = libmsi_query_execute(hquery, 0); - ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); - - hrec = libmsi_record_create(2); - - r = libmsi_record_set_int(hrec, 1, 3); - ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); - r = libmsi_record_set_string(hrec, 2, "three"); - ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); - - /* insert a nonpersistent row */ - r = libmsi_query_modify(hquery, LIBMSI_MODIFY_INSERT_TEMPORARY, hrec); - ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); - - r = libmsi_unref(hrec); - ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); - r = libmsi_query_close(hquery); - ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); - r = libmsi_unref(hquery); - ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); - /* insert persistent row */ sql = "INSERT INTO `MOO` (`A`, `B`) VALUES (4, 'four')"; r = run_query(hdb, 0, sql); ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); + /* delete persistent row */ + sql = "DELETE FROM `MOO` WHERE `A` = 4"; + r = run_query(hdb, 0, sql); + ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); + /* insert persistent row */ sql = "INSERT INTO `AAR` (`C`, `D`) VALUES (5, 'five')"; r = run_query(hdb, 0, sql); @@ -5880,106 +5068,6 @@ static void test_stringtable(void) DeleteFileA(msifile); } -static void test_querymodify_delete(void) -{ - LibmsiDatabase *hdb = 0; - LibmsiQuery *hquery = 0; - LibmsiRecord *hrec = 0; - unsigned r; - const char *sql; - char buffer[0x100]; - unsigned sz; - - DeleteFile(msifile); - - /* just libmsi_database_open should not create a file */ - r = libmsi_database_open(msifile, LIBMSI_DB_OPEN_CREATE, &hdb); - ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); - - sql = "CREATE TABLE `phone` ( " - "`id` INT, `name` CHAR(32), `number` CHAR(32) " - "PRIMARY KEY `id`)"; - r = run_query(hdb, 0, sql); - ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); - - sql = "INSERT INTO `phone` ( `id`, `name`, `number` )" - "VALUES('1', 'Alan', '5030581')"; - r = run_query(hdb, 0, sql); - ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); - - sql = "INSERT INTO `phone` ( `id`, `name`, `number` )" - "VALUES('2', 'Barry', '928440')"; - r = run_query(hdb, 0, sql); - ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); - - sql = "INSERT INTO `phone` ( `id`, `name`, `number` )" - "VALUES('3', 'Cindy', '2937550')"; - r = run_query(hdb, 0, sql); - ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); - - sql = "SELECT * FROM `phone` WHERE `id` <= 2"; - r = libmsi_database_open_query(hdb, sql, &hquery); - ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); - r = libmsi_query_execute(hquery, 0); - ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); - r = libmsi_query_fetch(hquery, &hrec); - ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); - - /* delete 1 */ - r = libmsi_query_modify(hquery, LIBMSI_MODIFY_DELETE, hrec); - ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); - - r = libmsi_unref(hrec); - ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); - r = libmsi_query_fetch(hquery, &hrec); - ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); - - /* delete 2 */ - r = libmsi_query_modify(hquery, LIBMSI_MODIFY_DELETE, hrec); - ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); - - r = libmsi_unref(hrec); - ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); - r = libmsi_query_close(hquery); - ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); - r = libmsi_unref(hquery); - ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); - - sql = "SELECT * FROM `phone`"; - r = libmsi_database_open_query(hdb, sql, &hquery); - ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); - r = libmsi_query_execute(hquery, 0); - ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); - r = libmsi_query_fetch(hquery, &hrec); - ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); - - r = libmsi_record_get_integer(hrec, 1); - ok(r == 3, "Expected 3, got %d\n", r); - - sz = sizeof(buffer); - r = libmsi_record_get_string(hrec, 2, buffer, &sz); - ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); - ok(!strcmp(buffer, "Cindy"), "Expected Cindy, got %s\n", buffer); - - sz = sizeof(buffer); - r = libmsi_record_get_string(hrec, 3, buffer, &sz); - ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); - ok(!strcmp(buffer, "2937550"), "Expected 2937550, got %s\n", buffer); - - r = libmsi_unref(hrec); - ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); - - r = libmsi_query_fetch(hquery, &hrec); - ok(r == LIBMSI_RESULT_NO_MORE_ITEMS, "Expected LIBMSI_RESULT_NO_MORE_ITEMS, got %d\n", r); - - r = libmsi_query_close(hquery); - ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); - r = libmsi_unref(hquery); - ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); - r = libmsi_unref(hdb); - ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); -} - static const WCHAR _Tables[] = {0x4840, 0x3f7f, 0x4164, 0x422f, 0x4836, 0}; static const WCHAR _StringData[] = {0x4840, 0x3f3f, 0x4577, 0x446c, 0x3b6a, 0x45e4, 0x4824, 0}; static const WCHAR _StringPool[] = {0x4840, 0x3f3f, 0x4577, 0x446c, 0x3e6a, 0x44b2, 0x482f, 0}; @@ -6345,124 +5433,6 @@ static void test_order(void) libmsi_unref(hdb); } -static void test_querymodify_delete_temporary(void) -{ - LibmsiDatabase *hdb; - LibmsiQuery *hquery; - LibmsiRecord *hrec; - const char *sql; - unsigned r; - - DeleteFile(msifile); - - r = libmsi_database_open(msifile, LIBMSI_DB_OPEN_CREATE, &hdb); - ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); - - sql = "CREATE TABLE `Table` ( `A` SHORT PRIMARY KEY `A` )"; - r = run_query(hdb, 0, sql); - ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); - - sql = "SELECT * FROM `Table`"; - r = libmsi_database_open_query(hdb, sql, &hquery); - ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); - r = libmsi_query_execute(hquery, 0); - ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); - - hrec = libmsi_record_create(1); - libmsi_record_set_int(hrec, 1, 1); - - r = libmsi_query_modify(hquery, LIBMSI_MODIFY_INSERT, hrec); - ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); - - libmsi_unref(hrec); - - hrec = libmsi_record_create(1); - libmsi_record_set_int(hrec, 1, 2); - - r = libmsi_query_modify(hquery, LIBMSI_MODIFY_INSERT_TEMPORARY, hrec); - ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); - - libmsi_unref(hrec); - - hrec = libmsi_record_create(1); - libmsi_record_set_int(hrec, 1, 3); - - r = libmsi_query_modify(hquery, LIBMSI_MODIFY_INSERT, hrec); - ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); - - libmsi_unref(hrec); - - hrec = libmsi_record_create(1); - libmsi_record_set_int(hrec, 1, 4); - - r = libmsi_query_modify(hquery, LIBMSI_MODIFY_INSERT_TEMPORARY, hrec); - ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); - - libmsi_unref(hrec); - libmsi_query_close(hquery); - libmsi_unref(hquery); - - sql = "SELECT * FROM `Table` WHERE `A` = 2"; - r = libmsi_database_open_query(hdb, sql, &hquery); - ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); - r = libmsi_query_execute(hquery, 0); - ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); - r = libmsi_query_fetch(hquery, &hrec); - ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); - - r = libmsi_query_modify(hquery, LIBMSI_MODIFY_DELETE, hrec); - ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); - - libmsi_unref(hrec); - libmsi_query_close(hquery); - libmsi_unref(hquery); - - sql = "SELECT * FROM `Table` WHERE `A` = 3"; - r = libmsi_database_open_query(hdb, sql, &hquery); - ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); - r = libmsi_query_execute(hquery, 0); - ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); - r = libmsi_query_fetch(hquery, &hrec); - ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); - - r = libmsi_query_modify(hquery, LIBMSI_MODIFY_DELETE, hrec); - ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); - - libmsi_unref(hrec); - libmsi_query_close(hquery); - libmsi_unref(hquery); - - sql = "SELECT * FROM `Table` ORDER BY `A`"; - r = libmsi_database_open_query(hdb, sql, &hquery); - ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); - r = libmsi_query_execute(hquery, 0); - ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); - - r = libmsi_query_fetch(hquery, &hrec); - ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); - - r = libmsi_record_get_integer(hrec, 1); - ok(r == 1, "Expected 1, got %d\n", r); - - libmsi_unref(hrec); - - r = libmsi_query_fetch(hquery, &hrec); - ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); - - r = libmsi_record_get_integer(hrec, 1); - ok(r == 4, "Expected 4, got %d\n", r); - - libmsi_unref(hrec); - - r = libmsi_query_fetch(hquery, &hrec); - ok(r == LIBMSI_RESULT_NO_MORE_ITEMS, "Expected LIBMSI_RESULT_NO_MORE_ITEMS, got %d\n", r); - - libmsi_query_close(hquery); - libmsi_unref(hquery); - libmsi_unref(hdb); - DeleteFileA(msifile); -} - static void test_deleterow(void) { LibmsiDatabase *hdb; @@ -7119,201 +6089,6 @@ static void test_forcecodepage(void) DeleteFileA("forcecodepage.idt"); } -static void test_querymodify_refresh(void) -{ - LibmsiDatabase *hdb; - LibmsiQuery *hquery; - LibmsiRecord *hrec; - const char *sql; - char buffer[MAX_PATH]; - unsigned r; - unsigned size; - - DeleteFile(msifile); - - r = libmsi_database_open(msifile, LIBMSI_DB_OPEN_CREATE, &hdb); - ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); - - sql = "CREATE TABLE `Table` ( `A` CHAR(72) NOT NULL, `B` INT PRIMARY KEY `A` )"; - r = run_query(hdb, 0, sql); - ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); - - sql = "INSERT INTO `Table` ( `A`, `B` ) VALUES ( 'hi', 1 )"; - r = run_query(hdb, 0, sql); - ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); - - sql = "SELECT * FROM `Table`"; - r = libmsi_database_open_query(hdb, sql, &hquery); - ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); - r = libmsi_query_execute(hquery, 0); - ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); - - r = libmsi_query_fetch(hquery, &hrec); - ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); - - sql = "UPDATE `Table` SET `B` = 2 WHERE `A` = 'hi'"; - r = run_query(hdb, 0, sql); - ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); - - r = libmsi_query_modify(hquery, LIBMSI_MODIFY_REFRESH, hrec); - ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); - - size = MAX_PATH; - r = libmsi_record_get_string(hrec, 1, buffer, &size); - ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); - ok(!strcmp(buffer, "hi"), "Expected \"hi\", got \"%s\"\n", buffer); - ok(size == 2, "Expected 2, got %d\n", size); - - r = libmsi_record_get_integer(hrec, 2); - ok(r == 2, "Expected 2, got %d\n", r); - - libmsi_unref(hrec); - libmsi_query_close(hquery); - libmsi_unref(hquery); - - sql = "INSERT INTO `Table` ( `A`, `B` ) VALUES ( 'hello', 3 )"; - r = run_query(hdb, 0, sql); - ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); - - sql = "SELECT * FROM `Table` WHERE `B` = 3"; - r = libmsi_database_open_query(hdb, sql, &hquery); - ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); - r = libmsi_query_execute(hquery, 0); - ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); - - r = libmsi_query_fetch(hquery, &hrec); - ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); - - sql = "UPDATE `Table` SET `B` = 2 WHERE `A` = 'hello'"; - r = run_query(hdb, 0, sql); - ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); - - sql = "INSERT INTO `Table` ( `A`, `B` ) VALUES ( 'hithere', 3 )"; - r = run_query(hdb, 0, sql); - ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); - - r = libmsi_query_modify(hquery, LIBMSI_MODIFY_REFRESH, hrec); - ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); - - size = MAX_PATH; - r = libmsi_record_get_string(hrec, 1, buffer, &size); - ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); - ok(!strcmp(buffer, "hello"), "Expected \"hello\", got \"%s\"\n", buffer); - ok(size == 5, "Expected 5, got %d\n", size); - - r = libmsi_record_get_integer(hrec, 2); - ok(r == 2, "Expected 2, got %d\n", r); - - libmsi_unref(hrec); - libmsi_query_close(hquery); - libmsi_unref(hquery); - libmsi_unref(hdb); - DeleteFileA(msifile); -} - -static void test_where_querymodify(void) -{ - LibmsiDatabase *hdb; - LibmsiQuery *hquery; - LibmsiRecord *hrec; - const char *sql; - unsigned r; - - DeleteFile(msifile); - - r = libmsi_database_open(msifile, LIBMSI_DB_OPEN_CREATE, &hdb); - ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); - - sql = "CREATE TABLE `Table` ( `A` INT, `B` INT PRIMARY KEY `A` )"; - r = run_query(hdb, 0, sql); - ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); - - sql = "INSERT INTO `Table` ( `A`, `B` ) VALUES ( 1, 2 )"; - r = run_query(hdb, 0, sql); - ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); - - sql = "INSERT INTO `Table` ( `A`, `B` ) VALUES ( 3, 4 )"; - r = run_query(hdb, 0, sql); - ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); - - sql = "INSERT INTO `Table` ( `A`, `B` ) VALUES ( 5, 6 )"; - r = run_query(hdb, 0, sql); - ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); - - /* `B` = 3 doesn't match, but the query shouldn't be executed */ - sql = "SELECT * FROM `Table` WHERE `B` = 3"; - r = libmsi_database_open_query(hdb, sql, &hquery); - ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); - - hrec = libmsi_record_create(2); - libmsi_record_set_int(hrec, 1, 7); - libmsi_record_set_int(hrec, 2, 8); - - r = libmsi_query_modify(hquery, LIBMSI_MODIFY_INSERT_TEMPORARY, hrec); - ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); - - libmsi_unref(hrec); - libmsi_query_close(hquery); - libmsi_unref(hquery); - - sql = "SELECT * FROM `Table` WHERE `A` = 7"; - r = libmsi_database_open_query(hdb, sql, &hquery); - ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); - r = libmsi_query_execute(hquery, 0); - ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); - - r = libmsi_query_fetch(hquery, &hrec); - ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); - - r = libmsi_record_get_integer(hrec, 1); - ok(r == 7, "Expected 7, got %d\n", r); - - r = libmsi_record_get_integer(hrec, 2); - ok(r == 8, "Expected 8, got %d\n", r); - - libmsi_record_set_int(hrec, 2, 9); - - r = libmsi_query_modify(hquery, LIBMSI_MODIFY_UPDATE, hrec); - ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); - - libmsi_unref(hrec); - libmsi_query_close(hquery); - libmsi_unref(hquery); - - sql = "SELECT * FROM `Table` WHERE `A` = 7"; - r = libmsi_database_open_query(hdb, sql, &hquery); - ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); - r = libmsi_query_execute(hquery, 0); - ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); - - r = libmsi_query_fetch(hquery, &hrec); - ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); - - r = libmsi_record_get_integer(hrec, 1); - ok(r == 7, "Expected 7, got %d\n", r); - - r = libmsi_record_get_integer(hrec, 2); - ok(r == 9, "Expected 9, got %d\n", r); - - sql = "UPDATE `Table` SET `B` = 10 WHERE `A` = 7"; - r = run_query(hdb, 0, sql); - ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); - - r = libmsi_query_modify(hquery, LIBMSI_MODIFY_REFRESH, hrec); - ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); - - r = libmsi_record_get_integer(hrec, 1); - ok(r == 7, "Expected 7, got %d\n", r); - - r = libmsi_record_get_integer(hrec, 2); - ok(r == 10, "Expected 10, got %d\n", r); - - libmsi_unref(hrec); - libmsi_query_close(hquery); - libmsi_unref(hquery); - libmsi_unref(hdb); -} - static bool create_storage(const char *name) { WCHAR nameW[MAX_PATH]; @@ -9459,7 +8234,6 @@ void main() test_msidatabase(); test_msiinsert(); test_msibadqueries(); - test_querymodify(); test_querygetcolumninfo(); test_getcolinfo(); test_msiexport(); @@ -9482,20 +8256,14 @@ void main() test_tables_order(); test_rows_order(); test_select_markers(); - test_querymodify_update(); - test_querymodify_assign(); test_stringtable(); - test_querymodify_delete(); test_defaultdatabase(); test_order(); - test_querymodify_delete_temporary(); test_deleterow(); test_quotes(); test_carriagereturn(); test_noquotes(); test_forcecodepage(); - test_querymodify_refresh(); - test_where_querymodify(); test_storages_table(); test_droptable(); #if 0 |