[tracker/return-types: 8/26] tracker-store, libtracker-bus, -client, -common, -data: Implement get_variable_names
- From: Martyn James Russell <mr src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [tracker/return-types: 8/26] tracker-store, libtracker-bus, -client, -common, -data: Implement get_variable_names
- Date: Wed, 15 Sep 2010 13:56:04 +0000 (UTC)
commit 3ccddd492f7db514fa1544cfb5f157b712b28e31
Author: Philip Van Hoof <philip codeminded be>
Date: Thu Sep 9 16:17:02 2010 +0200
tracker-store, libtracker-bus, -client, -common, -data: Implement get_variable_names
This is untested, and tracker_db_cursor_get_variable_names doesn't always work atm
src/libtracker-bus/tracker-bus-fd-cursor.c | 10 ++-----
src/libtracker-client/tracker.c | 1 +
src/libtracker-common/tracker-dbus.c | 27 +++++++++++++++++++++
src/libtracker-common/tracker-dbus.h | 1 +
src/libtracker-data/tracker-db-interface-sqlite.c | 25 ++++++++++++++-----
src/libtracker-data/tracker-db-interface.h | 1 +
src/tracker-store/tracker-steroids.c | 19 ++++++++++++++-
7 files changed, 69 insertions(+), 15 deletions(-)
---
diff --git a/src/libtracker-bus/tracker-bus-fd-cursor.c b/src/libtracker-bus/tracker-bus-fd-cursor.c
index 44b4363..7cd7874 100644
--- a/src/libtracker-bus/tracker-bus-fd-cursor.c
+++ b/src/libtracker-bus/tracker-bus-fd-cursor.c
@@ -53,6 +53,7 @@ struct TrackerBusFDCursor {
int *offsets;
int *types;
char *data;
+ GStrv variable_names;
};
struct TrackerBusFDCursorClass {
@@ -177,13 +178,7 @@ tracker_bus_fd_cursor_get_value_type (TrackerBusFDCursor *cursor, guint column)
static const gchar*
tracker_bus_fd_cursor_get_variable_name (TrackerBusFDCursor *cursor, guint column)
{
- /* TODO: Implement */
-
- g_critical ("Unimplemented");
-
- g_return_val_if_reached (NULL);
-
- return NULL;
+ return cursor->variable_names[column - 1];
}
static const gchar *
@@ -295,6 +290,7 @@ tracker_bus_fd_query (DBusGConnection *gconnection,
cancellable,
(void **) &cursor->buffer,
(gssize *) &cursor->buffer_size,
+ &cursor->variable_names,
&inner_error);
/* message is destroyed by tracker_dbus_send_and_splice */
diff --git a/src/libtracker-client/tracker.c b/src/libtracker-client/tracker.c
index 081b43e..e31016f 100644
--- a/src/libtracker-client/tracker.c
+++ b/src/libtracker-client/tracker.c
@@ -1813,6 +1813,7 @@ tracker_resources_sparql_query_iterate (TrackerClient *client,
NULL,
(void **) &iterator->buffer,
&iterator->buffer_size,
+ NULL /* Not interested in variable_names */,
&inner_error);
/* message is destroyed by tracker_dbus_send_and_splice */
diff --git a/src/libtracker-common/tracker-dbus.c b/src/libtracker-common/tracker-dbus.c
index c670539..e07a90c 100644
--- a/src/libtracker-common/tracker-dbus.c
+++ b/src/libtracker-common/tracker-dbus.c
@@ -718,6 +718,7 @@ tracker_dbus_send_and_splice (DBusConnection *connection,
GCancellable *cancellable,
void **dest_buffer,
gssize *dest_buffer_size,
+ GStrv *variable_names,
GError **error)
{
DBusPendingCall *call;
@@ -784,6 +785,32 @@ tracker_dbus_send_and_splice (DBusConnection *connection,
*dest_buffer_size = g_memory_output_stream_get_data_size (G_MEMORY_OUTPUT_STREAM (output_stream));
}
+ if (variable_names) {
+ GStrv v_names;
+ guint i;
+ GPtrArray *found = g_ptr_array_new ();
+ DBusMessageIter iter, arr;
+
+ dbus_message_iter_init (reply, &iter);
+ dbus_message_iter_recurse (&iter, &arr);
+
+ while (dbus_message_iter_has_next(&arr)) {
+ gchar *str;
+
+ dbus_message_iter_get_basic (&arr, &str);
+ g_ptr_array_add (found, str);
+ dbus_message_iter_next (&arr);
+ }
+
+ v_names = g_new0 (gchar *, found->len + 1);
+ for (i = 0; i < found->len; i++) {
+ v_names[i] = g_ptr_array_index (found, i);
+ }
+
+ *variable_names = v_names;
+ g_ptr_array_free (found, FALSE);
+ }
+
ret_value = TRUE;
}
} else {
diff --git a/src/libtracker-common/tracker-dbus.h b/src/libtracker-common/tracker-dbus.h
index b97cde9..f2dd4f5 100644
--- a/src/libtracker-common/tracker-dbus.h
+++ b/src/libtracker-common/tracker-dbus.h
@@ -185,6 +185,7 @@ gboolean tracker_dbus_send_and_splice (DBusConnection
GCancellable *cancellable,
void **dest_buffer,
gssize *dest_buffer_size,
+ GStrv *variable_names,
GError **error);
gboolean tracker_dbus_send_and_splice_async (DBusConnection *connection,
diff --git a/src/libtracker-data/tracker-db-interface-sqlite.c b/src/libtracker-data/tracker-db-interface-sqlite.c
index 597b2aa..4776c57 100644
--- a/src/libtracker-data/tracker-db-interface-sqlite.c
+++ b/src/libtracker-data/tracker-db-interface-sqlite.c
@@ -1385,7 +1385,7 @@ tracker_db_cursor_get_value_type (TrackerDBCursor *cursor, guint column)
{
gint n_columns = sqlite3_column_count (cursor->stmt);
- g_return_val_if_fail (column >= 0 && column < n_columns, TRACKER_SPARQL_VALUE_TYPE_UNBOUND);
+ g_return_val_if_fail (column < n_columns, TRACKER_SPARQL_VALUE_TYPE_UNBOUND);
if (sqlite3_column_type (cursor->stmt, column) == SQLITE_NULL) {
return TRACKER_SPARQL_VALUE_TYPE_UNBOUND;
@@ -1407,20 +1407,18 @@ tracker_db_cursor_get_value_type (TrackerDBCursor *cursor, guint column)
}
}
-const gchar*
-tracker_db_cursor_get_variable_name (TrackerDBCursor *cursor, guint column)
+const gchar**
+tracker_db_cursor_get_variable_names (TrackerDBCursor *cursor)
{
gint n_columns = sqlite3_column_count (cursor->stmt);
- g_return_val_if_fail (column >= 0 && column < n_columns, NULL);
-
if (cursor->variable_names == NULL) {
gint i;
cursor->variable_names = g_new0 (gchar *, n_columns);
for (i = 0 ; i < n_columns; i++) {
- const char *sqlite_name = sqlite3_column_name (cursor->stmt, column);
+ const char *sqlite_name = sqlite3_column_name (cursor->stmt, i);
if (g_str_has_suffix (sqlite_name, "_u")) {
/* SPARQL variable */
cursor->variable_names[i] = g_strndup (sqlite_name, strlen (sqlite_name - strlen ("_u")));
@@ -1428,7 +1426,20 @@ tracker_db_cursor_get_variable_name (TrackerDBCursor *cursor, guint column)
}
}
- return cursor->variable_names[column];
+ return (const gchar **) cursor->variable_names;
+}
+
+const gchar*
+tracker_db_cursor_get_variable_name (TrackerDBCursor *cursor, guint column)
+{
+ const gchar **variable_names;
+ gint n_columns = sqlite3_column_count (cursor->stmt);
+
+ g_return_val_if_fail (column < n_columns, NULL);
+
+ variable_names = tracker_db_cursor_get_variable_names (cursor);
+
+ return variable_names[column];
}
const gchar*
diff --git a/src/libtracker-data/tracker-db-interface.h b/src/libtracker-data/tracker-db-interface.h
index d63e1b1..78d5734 100644
--- a/src/libtracker-data/tracker-db-interface.h
+++ b/src/libtracker-data/tracker-db-interface.h
@@ -148,6 +148,7 @@ gboolean tracker_db_cursor_iter_next (TrackerDBCursor
guint tracker_db_cursor_get_n_columns (TrackerDBCursor *cursor);
const gchar* tracker_db_cursor_get_variable_name (TrackerDBCursor *cursor,
guint column);
+const gchar** tracker_db_cursor_get_variable_names (TrackerDBCursor *cursor);
TrackerSparqlValueType tracker_db_cursor_get_value_type (TrackerDBCursor *cursor,
guint column);
void tracker_db_cursor_get_value (TrackerDBCursor *cursor,
diff --git a/src/tracker-store/tracker-steroids.c b/src/tracker-store/tracker-steroids.c
index c32bcf0..285b5f8 100644
--- a/src/tracker-store/tracker-steroids.c
+++ b/src/tracker-store/tracker-steroids.c
@@ -32,7 +32,7 @@
#include "tracker-store.h"
#define UNKNOWN_METHOD_MESSAGE "Method \"%s\" with signature \"%s\" on " \
- "interface \"%s\" doesn't exist, expected \"%s\""
+ "interface \"%s\" doesn't exist, expected \"%s\""
/**
* /!\ IMPORTANT WARNING /!\
@@ -56,6 +56,7 @@ typedef struct {
typedef struct {
GError *error;
gpointer user_data;
+ GStrv variable_names;
} InThreadPtr;
static void
@@ -118,9 +119,23 @@ query_callback (gpointer inthread_data,
dbus_connection_send (info->connection, reply, NULL);
dbus_message_unref (reply);
} else {
+ GStrv variable_names = ptr->variable_names;
+ DBusMessageIter iter, subiter;
+ guint i;
+
tracker_dbus_request_success (info->request_id,
NULL);
reply = dbus_message_new_method_return (info->call_message);
+
+ dbus_message_iter_init_append (reply, &iter);
+
+ dbus_message_iter_open_container (&iter, DBUS_TYPE_ARRAY, "s", &subiter);
+ for (i = 0; variable_names[i] != NULL; i++) {
+ gchar *variable_name = variable_names[i];
+ dbus_message_iter_append_basic (&subiter, DBUS_TYPE_STRING, &variable_name);
+ }
+ dbus_message_iter_close_container (&iter, &subiter);
+
dbus_connection_send (info->connection, reply, NULL);
dbus_message_unref (reply);
}
@@ -355,6 +370,8 @@ end_query_inthread:
if (loop_error) {
ptr->error = loop_error;
+ } else {
+ ptr->variable_names = g_strdupv ((gchar **) tracker_db_cursor_get_variable_names (cursor));
}
return ptr;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]