diff options
-rw-r--r-- | include/libmsi-query.h | 4 | ||||
-rw-r--r-- | libmsi/libmsi-query.c | 26 | ||||
-rw-r--r-- | tests/testdatabase.c | 123 | ||||
-rw-r--r-- | tools/msiinfo.c | 12 |
4 files changed, 71 insertions, 94 deletions
diff --git a/include/libmsi-query.h b/include/libmsi-query.h index 50468f2..35d96fc 100644 --- a/include/libmsi-query.h +++ b/include/libmsi-query.h @@ -55,9 +55,9 @@ gboolean libmsi_query_close (LibmsiQuery *query, void libmsi_query_get_error (LibmsiQuery *query, gchar **column, GError **error); -LibmsiResult libmsi_query_get_column_info (LibmsiQuery *query, +LibmsiRecord * libmsi_query_get_column_info (LibmsiQuery *query, LibmsiColInfo info, - LibmsiRecord **rec); + GError **error); G_END_DECLS diff --git a/libmsi/libmsi-query.c b/libmsi/libmsi-query.c index 17b80d2..848fbfa 100644 --- a/libmsi/libmsi-query.c +++ b/libmsi/libmsi-query.c @@ -532,7 +532,7 @@ static void msi_set_record_type_string( LibmsiRecord *rec, unsigned field, libmsi_record_set_string( rec, field, szType ); } -unsigned _libmsi_query_get_column_info( LibmsiQuery *query, LibmsiColInfo info, LibmsiRecord **prec ) +LibmsiResult _libmsi_query_get_column_info( LibmsiQuery *query, LibmsiColInfo info, LibmsiRecord **prec ) { unsigned r = LIBMSI_RESULT_FUNCTION_FAILED, i, count = 0, type; LibmsiRecord *rec; @@ -571,26 +571,28 @@ unsigned _libmsi_query_get_column_info( LibmsiQuery *query, LibmsiColInfo info, return LIBMSI_RESULT_SUCCESS; } -LibmsiResult libmsi_query_get_column_info(LibmsiQuery *query, LibmsiColInfo info, LibmsiRecord **prec) +LibmsiRecord * +libmsi_query_get_column_info (LibmsiQuery *query, LibmsiColInfo info, GError **error) { + LibmsiRecord *rec; unsigned r; - TRACE("%d %d %p\n", query, info, prec); - - if( !prec ) - return LIBMSI_RESULT_INVALID_PARAMETER; + TRACE("%p %d\n", query, info); - if( info != LIBMSI_COL_INFO_NAMES && info != LIBMSI_COL_INFO_TYPES ) - return LIBMSI_RESULT_INVALID_PARAMETER; + if (info != LIBMSI_COL_INFO_NAMES && info != LIBMSI_COL_INFO_TYPES) + return NULL; - if( !query ) - return LIBMSI_RESULT_INVALID_HANDLE; + if (!query) + return NULL; g_object_ref(query); - r = _libmsi_query_get_column_info( query, info, prec ); + r = _libmsi_query_get_column_info( query, info, &rec); g_object_unref(query); - return r; + if (r != LIBMSI_RESULT_SUCCESS) + g_set_error_literal (error, LIBMSI_RESULT_ERROR, r, G_STRFUNC); + + return rec; } void diff --git a/tests/testdatabase.c b/tests/testdatabase.c index 37484d0..440b5c7 100644 --- a/tests/testdatabase.c +++ b/tests/testdatabase.c @@ -738,32 +738,25 @@ static void test_getcolinfo(void) ok( r, "failed to execute query\n"); /* check that NAMES works */ - rec = 0; - r = libmsi_query_get_column_info( hquery, LIBMSI_COL_INFO_NAMES, &rec ); - ok( r == LIBMSI_RESULT_SUCCESS, "failed to get names\n"); + rec = libmsi_query_get_column_info( hquery, LIBMSI_COL_INFO_NAMES, NULL ); + ok(rec, "failed to get names\n"); check_record_string (rec, 1, "Name"); g_object_unref( rec ); /* check that TYPES works */ - rec = 0; - r = libmsi_query_get_column_info( hquery, LIBMSI_COL_INFO_TYPES, &rec ); - ok( r == LIBMSI_RESULT_SUCCESS, "failed to get names\n"); + rec = libmsi_query_get_column_info( hquery, LIBMSI_COL_INFO_TYPES, NULL ); + ok(rec, "failed to get names\n"); check_record_string (rec, 1, "s64"); g_object_unref( rec ); /* check that invalid values fail */ - rec = 0; - r = libmsi_query_get_column_info( hquery, 100, &rec ); - ok( r == LIBMSI_RESULT_INVALID_PARAMETER, "wrong error code\n"); - ok( rec == 0, "returned a record\n"); + rec = libmsi_query_get_column_info( hquery, 100, NULL); + ok(!rec, "returned a record\n"); - r = libmsi_query_get_column_info( hquery, LIBMSI_COL_INFO_TYPES, NULL ); - ok( r == LIBMSI_RESULT_INVALID_PARAMETER, "wrong error code\n"); - - r = libmsi_query_get_column_info( 0, LIBMSI_COL_INFO_TYPES, &rec ); - ok( r == LIBMSI_RESULT_INVALID_HANDLE, "wrong error code\n"); + rec = libmsi_query_get_column_info( 0, LIBMSI_COL_INFO_TYPES, NULL); + ok(!rec, "wrong return value\n"); r = libmsi_query_close(hquery, NULL); ok(r, "failed to close query\n"); @@ -784,7 +777,7 @@ static LibmsiRecord *get_column_info(LibmsiDatabase *hdb, const char *sql, Libms r = libmsi_query_execute(hquery, 0, NULL); if( r ) { - libmsi_query_get_column_info( hquery, type, &rec ); + rec = libmsi_query_get_column_info( hquery, type, NULL ); } libmsi_query_close(hquery, NULL); g_object_unref(hquery); @@ -1838,8 +1831,8 @@ static void test_msiimport(void) ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); rec = NULL; - r = libmsi_query_get_column_info(query, LIBMSI_COL_INFO_NAMES, &rec); - ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); + rec = libmsi_query_get_column_info(query, LIBMSI_COL_INFO_NAMES, NULL); + ok(rec, "Expected result\n"); count = libmsi_record_get_field_count(rec); ok(count == 9, "Expected 9, got %d\n", count); ok(check_record(rec, 1, "FirstPrimaryColumn"), "Expected FirstPrimaryColumn\n"); @@ -1854,8 +1847,8 @@ static void test_msiimport(void) g_object_unref(rec); rec = NULL; - r = libmsi_query_get_column_info(query, LIBMSI_COL_INFO_TYPES, &rec); - ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); + rec = libmsi_query_get_column_info(query, LIBMSI_COL_INFO_TYPES, NULL); + ok(rec, "Expected result\n"); count = libmsi_record_get_field_count(rec); ok(count == 9, "Expected 9, got %d\n", count); ok(check_record(rec, 1, "s255"), "Expected s255\n"); @@ -1901,9 +1894,8 @@ static void test_msiimport(void) r = libmsi_database_open_query(hdb, sql, &query); ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); - rec = NULL; - r = libmsi_query_get_column_info(query, LIBMSI_COL_INFO_NAMES, &rec); - ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); + rec = libmsi_query_get_column_info(query, LIBMSI_COL_INFO_NAMES, NULL); + ok(rec, "Expected result\n"); count = libmsi_record_get_field_count(rec); ok(count == 2, "Expected 2, got %d\n", count); ok(check_record(rec, 1, "PrimaryOne"), "Expected PrimaryOne\n"); @@ -1911,9 +1903,8 @@ static void test_msiimport(void) g_object_unref(rec); - rec = NULL; - r = libmsi_query_get_column_info(query, LIBMSI_COL_INFO_TYPES, &rec); - ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); + rec = libmsi_query_get_column_info(query, LIBMSI_COL_INFO_TYPES, NULL); + ok(rec, "Expected result\n"); count = libmsi_record_get_field_count(rec); ok(count == 2, "Expected 2, got %d\n", count); ok(check_record(rec, 1, "s255"), "Expected s255\n"); @@ -1951,9 +1942,8 @@ static void test_msiimport(void) r = libmsi_database_open_query(hdb, sql, &query); ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); - rec = NULL; - r = libmsi_query_get_column_info(query, LIBMSI_COL_INFO_NAMES, &rec); - ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); + rec = libmsi_query_get_column_info(query, LIBMSI_COL_INFO_NAMES, NULL); + ok(rec, "Expected result\n"); count = libmsi_record_get_field_count(rec); ok(count == 6, "Expected 6, got %d\n", count); ok(check_record(rec, 1, "A"), "Expected A\n"); @@ -1964,9 +1954,8 @@ static void test_msiimport(void) ok(check_record(rec, 6, "F"), "Expected F\n"); g_object_unref(rec); - rec = NULL; - r = libmsi_query_get_column_info(query, LIBMSI_COL_INFO_TYPES, &rec); - ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); + rec = libmsi_query_get_column_info(query, LIBMSI_COL_INFO_TYPES, NULL); + ok(rec, "Expected result\n"); count = libmsi_record_get_field_count(rec); ok(count == 6, "Expected 6, got %d\n", count); ok(check_record(rec, 1, "s72"), "Expected s72\n"); @@ -3434,9 +3423,8 @@ static void test_temporary_table(void) r = libmsi_database_open_query(hdb, sql, &query); ok(r == LIBMSI_RESULT_SUCCESS, "failed to query table\n"); - rec = NULL; - r = libmsi_query_get_column_info(query, LIBMSI_COL_INFO_TYPES, &rec); - ok(r == LIBMSI_RESULT_SUCCESS, "failed to get column info\n"); + rec = libmsi_query_get_column_info(query, LIBMSI_COL_INFO_TYPES, NULL); + ok(rec, "failed to get column info\n"); check_record_string(rec, 1, "G255"); check_record_string(rec, 2, "j2"); @@ -3674,9 +3662,8 @@ static void test_integers(void) r = libmsi_database_open_query(hdb, sql, &query); ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); - rec = NULL; - r = libmsi_query_get_column_info(query, LIBMSI_COL_INFO_NAMES, &rec); - ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); + rec = libmsi_query_get_column_info(query, LIBMSI_COL_INFO_NAMES, NULL); + ok(rec, "Expected result\n"); count = libmsi_record_get_field_count(rec); ok(count == 8, "Expected 8, got %d\n", count); ok(check_record(rec, 1, "one"), "Expected one\n"); @@ -3689,9 +3676,8 @@ static void test_integers(void) ok(check_record(rec, 8, "eight"), "Expected eight\n"); g_object_unref(rec); - rec = NULL; - r = libmsi_query_get_column_info(query, LIBMSI_COL_INFO_TYPES, &rec); - ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); + rec = libmsi_query_get_column_info(query, LIBMSI_COL_INFO_TYPES, NULL); + ok(rec, "Expected result\n"); count = libmsi_record_get_field_count(rec); ok(count == 8, "Expected 8, got %d\n", count); ok(check_record(rec, 1, "I2"), "Expected I2\n"); @@ -6399,17 +6385,15 @@ static void test_dbmerge(void) r = libmsi_database_open_query(hdb, "SELECT * FROM `MergeErrors`", &hquery); ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); - hrec = NULL; - r = libmsi_query_get_column_info(hquery, LIBMSI_COL_INFO_NAMES, &hrec); - ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); + hrec = libmsi_query_get_column_info(hquery, LIBMSI_COL_INFO_NAMES, NULL); + ok(hrec, "Expected result\n"); check_record_string(hrec, 1, "Table"); check_record_string(hrec, 2, "NumRowMergeConflicts"); g_object_unref(hrec); - hrec = NULL; - r = libmsi_query_get_column_info(hquery, LIBMSI_COL_INFO_TYPES, &hrec); - ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); + hrec = libmsi_query_get_column_info(hquery, LIBMSI_COL_INFO_TYPES, NULL); + ok(hrec, "Expected result\n"); check_record_string(hrec, 1, "s255"); check_record_string(hrec, 2, "i2"); @@ -6930,9 +6914,8 @@ static void test_columnorder(void) r = libmsi_database_open_query(hdb, sql, &query); ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); - rec = NULL; - r = libmsi_query_get_column_info(query, LIBMSI_COL_INFO_TYPES, &rec); - ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); + rec = libmsi_query_get_column_info(query, LIBMSI_COL_INFO_TYPES, NULL); + ok(rec, "Expected result\n"); sz = sizeof(buf); strcpy(buf, "kiwi"); @@ -6943,9 +6926,8 @@ static void test_columnorder(void) check_record_string(rec, 5, "i2"); g_object_unref(rec); - rec = NULL; - r = libmsi_query_get_column_info(query, LIBMSI_COL_INFO_NAMES, &rec); - ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); + rec = libmsi_query_get_column_info(query, LIBMSI_COL_INFO_NAMES, NULL); + ok(rec, "Expected result\n"); check_record_string(rec, 1, "D"); check_record_string(rec, 2, "E"); @@ -7059,9 +7041,8 @@ static void test_columnorder(void) r = libmsi_database_open_query(hdb, sql, &query); ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); - rec = NULL; - r = libmsi_query_get_column_info(query, LIBMSI_COL_INFO_TYPES, &rec); - ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); + rec = libmsi_query_get_column_info(query, LIBMSI_COL_INFO_TYPES, NULL); + ok(rec, "Expected result\n"); check_record_string(rec, 1, "i2"); check_record_string(rec, 2, "S255"); @@ -7070,9 +7051,8 @@ static void test_columnorder(void) check_record_string(rec, 5, "i2"); g_object_unref(rec); - rec = NULL; - r = libmsi_query_get_column_info(query, LIBMSI_COL_INFO_NAMES, &rec); - ok(r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r); + rec = libmsi_query_get_column_info(query, LIBMSI_COL_INFO_NAMES, NULL); + ok(rec, "Expected result\n"); check_record_string(rec, 1, "C"); check_record_string(rec, 2, "A"); @@ -7200,9 +7180,8 @@ static void test_createtable(void) res = libmsi_query_execute( htab, hrec , NULL); ok(res, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", res); - hrec = NULL; - res = libmsi_query_get_column_info( htab, LIBMSI_COL_INFO_NAMES, &hrec ); - todo_wine ok(res == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", res); + hrec = libmsi_query_get_column_info( htab, LIBMSI_COL_INFO_NAMES, NULL ); + todo_wine ok(hrec, "Expected result\n"); str = libmsi_record_get_string(hrec, 1); todo_wine ok(str, "Expected string\n"); @@ -7232,9 +7211,8 @@ static void test_createtable(void) res = libmsi_database_open_query( hdb, sql, &htab ); ok(res == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", res); - hrec = NULL; - res = libmsi_query_get_column_info( htab, LIBMSI_COL_INFO_NAMES, &hrec ); - ok(res == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", res); + hrec = libmsi_query_get_column_info( htab, LIBMSI_COL_INFO_NAMES, NULL ); + ok(hrec, "Expected result\n"); check_record_string(hrec, 1, "b"); g_object_unref( hrec ); @@ -7256,9 +7234,8 @@ static void test_createtable(void) res = libmsi_database_open_query( hdb, sql, &htab ); ok(res == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", res); - hrec = NULL; - res = libmsi_query_get_column_info( htab, LIBMSI_COL_INFO_NAMES, &hrec ); - ok(res == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", res); + hrec = libmsi_query_get_column_info( htab, LIBMSI_COL_INFO_NAMES, NULL ); + ok(hrec, "Expected result\n"); check_record_string(hrec, 1, "b"); g_object_unref( hrec ); @@ -7373,18 +7350,16 @@ static void test_select_column_names(void) r = libmsi_record_get_field_count( rec ); ok( r == 1, "got %u\n", r ); - rec2 = NULL; - r = libmsi_query_get_column_info( query, LIBMSI_COL_INFO_NAMES, &rec2 ); - ok( r == LIBMSI_RESULT_SUCCESS, "unexpected result: %u\n", r ); + rec2 = libmsi_query_get_column_info( query, LIBMSI_COL_INFO_NAMES, NULL ); + ok(rec2, "unexpected result\n"); r = libmsi_record_get_field_count( rec2 ); ok( r == 1, "got %u\n", r ); check_record_string(rec2, 1, ""); g_object_unref( rec2 ); - rec2 = NULL; - r = libmsi_query_get_column_info( query, LIBMSI_COL_INFO_TYPES, &rec2 ); - ok( r == LIBMSI_RESULT_SUCCESS, "unexpected result: %u\n", r ); + rec2 = libmsi_query_get_column_info( query, LIBMSI_COL_INFO_TYPES, NULL ); + ok(rec2, "unexpected result\n"); r = libmsi_record_get_field_count( rec2 ); ok( r == 1, "got %u\n", r ); diff --git a/tools/msiinfo.c b/tools/msiinfo.c index 216c500..7431fff 100644 --- a/tools/msiinfo.c +++ b/tools/msiinfo.c @@ -426,7 +426,7 @@ end: return 0; } -static unsigned export_create_table(const char *table, +static unsigned export_create_table(const char *table, LibmsiRecord *names, LibmsiRecord *types, LibmsiRecord *keys) @@ -521,7 +521,7 @@ static void print_quoted_string(const char *s) putchar('\''); } -static unsigned export_insert(const char *table, +static unsigned export_insert(const char *table, LibmsiRecord *names, LibmsiRecord *types, LibmsiRecord *vals) @@ -609,14 +609,14 @@ static unsigned export_sql( LibmsiDatabase *db, const char *table, GError **erro } /* write out row 1, the column names */ - r = libmsi_query_get_column_info(query, LIBMSI_COL_INFO_NAMES, &name); - if (r) { + name = libmsi_query_get_column_info(query, LIBMSI_COL_INFO_NAMES, error); + if (error) { goto done; } /* write out row 2, the column types */ - r = libmsi_query_get_column_info(query, LIBMSI_COL_INFO_TYPES, &type); - if (r) { + type = libmsi_query_get_column_info(query, LIBMSI_COL_INFO_TYPES, error); + if (error) { goto done; } |