summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCarlos Garnacho <carlosg@gnome.org>2021-02-27 12:47:16 +0100
committerCarlos Garnacho <carlosg@gnome.org>2021-02-27 12:47:16 +0100
commitd8035fe97c435ee8d2b642fbaed2a91828f67368 (patch)
tree2930771d8d5d53fa67914f1702fa276cbd8b97c6 /src
parentfd38d9a3a6d027ab29e11272e41236ff3475deda (diff)
downloadtracker-d8035fe97c435ee8d2b642fbaed2a91828f67368.tar.gz
libtracker-data: Special case empty remote queries on services vtable
Make these queries succeed, but come up empty. This is effectively the same than asking the remote service for the empty graph pattern "{ }".
Diffstat (limited to 'src')
-rw-r--r--src/libtracker-data/tracker-vtab-service.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/src/libtracker-data/tracker-vtab-service.c b/src/libtracker-data/tracker-vtab-service.c
index f141bd2a1..469f05f4d 100644
--- a/src/libtracker-data/tracker-vtab-service.c
+++ b/src/libtracker-data/tracker-vtab-service.c
@@ -296,6 +296,7 @@ service_filter (sqlite3_vtab_cursor *vtab_cursor,
TrackerSparqlStatement *statement;
GHashTable *names = NULL, *values = NULL;
GError *error = NULL;
+ gboolean empty_query = FALSE;
gint i;
cursor->finished = FALSE;
@@ -354,6 +355,11 @@ service_filter (sqlite3_vtab_cursor *vtab_cursor,
TRACKER_SPARQL_ERROR_PARSE,
"Query not given to services virtual table");
goto fail;
+ } else if (*cursor->query == '\0') {
+ g_clear_pointer (&names, g_hash_table_unref);
+ g_clear_pointer (&values, g_hash_table_unref);
+ cursor->finished = TRUE;
+ return SQLITE_OK;
}
connection = tracker_data_manager_get_remote_connection (module->data_manager,
@@ -389,9 +395,9 @@ fail:
g_clear_pointer (&names, g_hash_table_unref);
g_clear_pointer (&values, g_hash_table_unref);
- if (cursor->silent) {
+ if (cursor->silent || empty_query) {
cursor->finished = TRUE;
- g_error_free (error);
+ g_clear_error (&error);
return SQLITE_OK;
} else {
tracker_service_cursor_set_vtab_error (cursor, error->message);