[tracker/wip/carlosg/sparql1.1: 100/201] libtracker-data: Implement URI()/IRI()
- From: Carlos Garnacho <carlosg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [tracker/wip/carlosg/sparql1.1: 100/201] libtracker-data: Implement URI()/IRI()
- Date: Mon, 9 Sep 2019 22:27:13 +0000 (UTC)
commit 4b5e255b1281d551f8017d4e0a8051d38298b682
Author: Carlos Garnacho <carlosg gnome org>
Date: Sun Jan 13 18:48:20 2019 +0100
libtracker-data: Implement URI()/IRI()
src/libtracker-data/tracker-db-interface-sqlite.c | 22 ++++++++++++++++++++++
src/libtracker-data/tracker-sparql.c | 13 +++++++++----
2 files changed, 31 insertions(+), 4 deletions(-)
---
diff --git a/src/libtracker-data/tracker-db-interface-sqlite.c
b/src/libtracker-data/tracker-db-interface-sqlite.c
index dbf3126c6..6d5901c8f 100644
--- a/src/libtracker-data/tracker-db-interface-sqlite.c
+++ b/src/libtracker-data/tracker-db-interface-sqlite.c
@@ -1409,6 +1409,26 @@ function_sparql_encode_for_uri (sqlite3_context *context,
sqlite3_result_text (context, encoded, -1, g_free);
}
+static void
+function_sparql_uri (sqlite3_context *context,
+ int argc,
+ sqlite3_value *argv[])
+{
+ const gchar *str;
+ gchar *encoded;
+
+ if (argc != 1) {
+ sqlite3_result_error (context, "Invalid argument count", -1);
+ return;
+ }
+
+ str = (gchar *)sqlite3_value_text (argv[0]);
+ encoded = g_uri_escape_string (str,
+ G_URI_RESERVED_CHARS_ALLOWED_IN_PATH,
+ FALSE);
+ sqlite3_result_text (context, encoded, -1, g_free);
+}
+
static void
function_sparql_string_before (sqlite3_context *context,
int argc,
@@ -1688,6 +1708,8 @@ initialize_functions (TrackerDBInterface *db_interface)
function_sparql_uri_is_descendant },
{ "SparqlEncodeForUri", 1, SQLITE_ANY | SQLITE_DETERMINISTIC,
function_sparql_encode_for_uri },
+ { "SparqlUri", 1, SQLITE_ANY | SQLITE_DETERMINISTIC,
+ function_sparql_uri },
/* Strings */
{ "SparqlRegex", -1, SQLITE_ANY | SQLITE_DETERMINISTIC,
function_sparql_regex },
diff --git a/src/libtracker-data/tracker-sparql.c b/src/libtracker-data/tracker-sparql.c
index e2bbd3e2d..d526463b0 100644
--- a/src/libtracker-data/tracker-sparql.c
+++ b/src/libtracker-data/tracker-sparql.c
@@ -5886,10 +5886,15 @@ translate_BuiltInCall (TrackerSparql *sparql,
tracker_sparql_swap_builder (sparql, old);
} else if (_accept (sparql, RULE_TYPE_LITERAL, LITERAL_DATATYPE)) {
_unimplemented ("DATATYPE");
- } else if (_accept (sparql, RULE_TYPE_LITERAL, LITERAL_IRI)) {
- _unimplemented ("IRI");
- } else if (_accept (sparql, RULE_TYPE_LITERAL, LITERAL_URI)) {
- _unimplemented ("URI");
+ } else if (_accept (sparql, RULE_TYPE_LITERAL, LITERAL_URI) ||
+ _accept (sparql, RULE_TYPE_LITERAL, LITERAL_IRI)) {
+ sparql->current_state.convert_to_string = TRUE;
+ _expect (sparql, RULE_TYPE_LITERAL, LITERAL_OPEN_PARENS);
+ _append_string (sparql, "SparqlUri (");
+ _call_rule (sparql, NAMED_RULE_Expression, error);
+ _expect (sparql, RULE_TYPE_LITERAL, LITERAL_CLOSE_PARENS);
+ _append_string (sparql, ") ");
+ sparql->current_state.expression_type = TRACKER_PROPERTY_TYPE_STRING;
} else if (_accept (sparql, RULE_TYPE_LITERAL, LITERAL_ABS)) {
_expect (sparql, RULE_TYPE_LITERAL, LITERAL_OPEN_PARENS);
_append_string (sparql, "ABS (");
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]