summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/libmsi-query.h4
-rw-r--r--libmsi/libmsi-query.c26
-rw-r--r--tests/testdatabase.c123
-rw-r--r--tools/msiinfo.c12
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;
}