summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarc-André Lureau <marcandre.lureau@gmail.com>2012-12-17 12:11:39 +0100
committerPaolo Bonzini <pbonzini@redhat.com>2013-01-09 13:56:07 +0100
commit166331435f6007ea3363efeeaacec6fe5e972214 (patch)
treedd9cd0647071b53dc4e434d85972724e459cc59f
parent51796fda08d36dfc38848c429d8cabd48e3484a9 (diff)
downloadmsitools-166331435f6007ea3363efeeaacec6fe5e972214.tar.gz
msitools-166331435f6007ea3363efeeaacec6fe5e972214.tar.xz
msitools-166331435f6007ea3363efeeaacec6fe5e972214.zip
database: Make get_primary_keys() GObject-like
-rw-r--r--include/libmsi-database.h6
-rw-r--r--libmsi/libmsi-database.c16
-rw-r--r--tests/testrecord.c10
-rw-r--r--tools/msiinfo.c4
4 files changed, 22 insertions, 14 deletions
diff --git a/include/libmsi-database.h b/include/libmsi-database.h
index a34be98..37b91ae 100644
--- a/include/libmsi-database.h
+++ b/include/libmsi-database.h
@@ -46,8 +46,10 @@ LibmsiDatabase * libmsi_database_new (const gchar *path,
const char *persist,
GError **error);
-LibmsiDBState libmsi_database_get_state (LibmsiDatabase *);
-LibmsiResult libmsi_database_get_primary_keys (LibmsiDatabase *,const char *,LibmsiRecord **);
+LibmsiDBState libmsi_database_get_state (LibmsiDatabase *db);
+LibmsiRecord * libmsi_database_get_primary_keys (LibmsiDatabase *db,
+ const char *table,
+ GError **error);
LibmsiResult libmsi_database_apply_transform (LibmsiDatabase *,const char *);
LibmsiResult libmsi_database_export (LibmsiDatabase *, const char *, int fd);
LibmsiResult libmsi_database_import (LibmsiDatabase *, const char *, const char *);
diff --git a/libmsi/libmsi-database.c b/libmsi/libmsi-database.c
index adecbaf..271e1f8 100644
--- a/libmsi/libmsi-database.c
+++ b/libmsi/libmsi-database.c
@@ -2396,21 +2396,27 @@ unsigned _libmsi_database_get_primary_keys( LibmsiDatabase *db,
return r;
}
-LibmsiResult libmsi_database_get_primary_keys(LibmsiDatabase *db,
- const char *table, LibmsiRecord **prec)
+LibmsiRecord *
+libmsi_database_get_primary_keys (LibmsiDatabase *db,
+ const char *table,
+ GError **error)
{
+ LibmsiRecord *rec;
unsigned r;
TRACE("%d %s %p\n", db, debugstr_a(table), prec);
if( !db )
- return LIBMSI_RESULT_INVALID_HANDLE;
+ return NULL;
g_object_ref(db);
- r = _libmsi_database_get_primary_keys( db, table, prec );
+ r = _libmsi_database_get_primary_keys(db, table, &rec);
g_object_unref(db);
- return r;
+ if (r != LIBMSI_RESULT_SUCCESS)
+ g_set_error_literal (error, LIBMSI_RESULT_ERROR, r, G_STRFUNC);
+
+ return rec;
}
LibmsiCondition libmsi_database_is_table_persistent(
diff --git a/tests/testrecord.c b/tests/testrecord.c
index 02b6228..ef9d26d 100644
--- a/tests/testrecord.c
+++ b/tests/testrecord.c
@@ -315,6 +315,7 @@ static void test_MsiRecordGetInteger (void)
static void test_fieldzero (void)
{
+ GError *error = NULL;
LibmsiDatabase *hdb;
LibmsiQuery *hview;
LibmsiRecord *rec;
@@ -390,9 +391,8 @@ static void test_fieldzero (void)
ok (r, "libmsi_query_close failed\n");
g_object_unref (hview);
- rec = NULL;
- r = libmsi_database_get_primary_keys (hdb, "drone", &rec);
- ok (r == LIBMSI_RESULT_SUCCESS, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r);
+ rec = libmsi_database_get_primary_keys (hdb, "drone", &error);
+ ok (rec, "Expected LIBMSI_RESULT_SUCCESS, got %d\n", r);
r = libmsi_record_get_int (rec, 0);
ok (r == LIBMSI_NULL_INT, "Expected LIBMSI_NULL_INT, got %d\n", r);
@@ -404,8 +404,8 @@ static void test_fieldzero (void)
g_object_unref (rec);
- r = libmsi_database_get_primary_keys (hdb, "nosuchtable", &rec);
- ok (r == LIBMSI_RESULT_INVALID_TABLE, "Expected LIBMSI_RESULT_INVALID_TABLE, got %d\n", r);
+ rec = libmsi_database_get_primary_keys (hdb, "nosuchtable", &error);
+ g_error_matches(error, LIBMSI_RESULT_ERROR, LIBMSI_RESULT_INVALID_TABLE);
query = "SELECT * FROM `drone` WHERE `id` = 1";
hview = libmsi_query_new (hdb, query, NULL);
diff --git a/tools/msiinfo.c b/tools/msiinfo.c
index 645c456..ea41713 100644
--- a/tools/msiinfo.c
+++ b/tools/msiinfo.c
@@ -621,8 +621,8 @@ static unsigned export_sql( LibmsiDatabase *db, const char *table, GError **erro
}
/* write out row 3, the table name + keys */
- r = libmsi_database_get_primary_keys( db, table, &keys );
- if (r) {
+ keys = libmsi_database_get_primary_keys(db, table, error);
+ if (!keys) {
goto done;
}