summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarlos Garnacho <carlosg@gnome.org>2020-05-23 13:15:52 +0200
committerJean Felder <jean.felder@gmail.com>2020-08-21 15:05:10 +0000
commit7d36826be38ae055642901f90718a3da6f9882d4 (patch)
tree5e814a1f0f29734021850c0af23806665679d9bb
parent2b035e09b059a365859f06e3a06d4b00e83e56b8 (diff)
downloadgrilo-plugins-7d36826be38ae055642901f90718a3da6f9882d4.tar.gz
tracker3: Port grl_source_query() to the statement cache
We drop the support for full queries, the query is extended so that subselects work.
-rw-r--r--src/tracker3/grl-tracker-source-api.c51
1 files changed, 8 insertions, 43 deletions
diff --git a/src/tracker3/grl-tracker-source-api.c b/src/tracker3/grl-tracker-source-api.c
index 2000f9b..87f251e 100644
--- a/src/tracker3/grl-tracker-source-api.c
+++ b/src/tracker3/grl-tracker-source-api.c
@@ -57,20 +57,6 @@ GRL_LOG_DOMAIN_STATIC(tracker_source_result_log_domain);
/* ------- Definitions ------- */
-#define TRACKER_QUERY_LIMIT \
- "OFFSET %u " \
- "LIMIT %u"
-
-#define TRACKER_QUERY_PARTIAL_REQUEST \
- "SELECT rdf:type(?urn) %s " \
- "WHERE { %s } " \
- "ORDER BY DESC(nfo:fileLastModified(?urn)) " \
- TRACKER_QUERY_LIMIT
-
-#define TRACKER_QUERY_FULL_REQUEST \
- "%s " \
- TRACKER_QUERY_LIMIT
-
#define TRACKER_DELETE_REQUEST \
"DELETE { <%s> %s } WHERE { <%s> a nfo:Media . %s }"
@@ -696,12 +682,7 @@ grl_tracker_source_query (GrlSource *source,
GrlSourceQuerySpec *qs)
{
GError *error = NULL;
- GrlTrackerSourcePriv *priv = GRL_TRACKER_SOURCE_GET_PRIVATE (source);
- gchar *sparql_final;
- gchar *sparql_select;
GrlTrackerOp *os;
- gint count = grl_operation_options_get_count (qs->options);
- guint skip = grl_operation_options_get_skip (qs->options);
TrackerSparqlStatement *statement;
GRL_IDEBUG ("%s: id=%u", __FUNCTION__, qs->operation_id);
@@ -713,31 +694,15 @@ grl_tracker_source_query (GrlSource *source,
goto send_error;
}
- /* Check if it is a full sparql query */
- if (g_ascii_strncasecmp (qs->query, "select ", 7) != 0) {
- sparql_select = grl_tracker_source_get_select_string (qs->keys);
- sparql_final = g_strdup_printf (TRACKER_QUERY_PARTIAL_REQUEST,
- sparql_select,
- qs->query,
- skip,
- count);
- g_free (qs->query);
- g_free (sparql_select);
- qs->query = sparql_final;
- } else {
- /* Append offset and limit */
- sparql_final = g_strdup_printf (TRACKER_QUERY_FULL_REQUEST,
- qs->query,
- skip,
- count);
- g_free (qs->query);
- qs->query = sparql_final;
- }
-
statement =
- tracker_sparql_connection_query_statement (priv->tracker_connection,
- qs->query,
- NULL, NULL);
+ grl_tracker_source_create_statement (GRL_TRACKER_SOURCE (source),
+ GRL_TRACKER_QUERY_ALL,
+ qs->options,
+ qs->keys,
+ qs->query,
+ &error);
+ if (!statement)
+ goto send_error;
os = grl_tracker_op_new (grl_operation_options_get_type_filter (qs->options),
qs->keys, qs);