[tracker] SPARQL: Support fn:contains and fn:ends-with function in queries
- From: Jürg Billeter <juergbi src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [tracker] SPARQL: Support fn:contains and fn:ends-with function in queries
- Date: Wed, 30 Sep 2009 16:28:15 +0000 (UTC)
commit b3c34e35b8adae6834ee477a37eb8dd382375b97
Author: Jürg Billeter <j bitron ch>
Date: Wed Sep 30 18:27:44 2009 +0200
SPARQL: Support fn:contains and fn:ends-with function in queries
src/libtracker-data/tracker-sparql-query.vala | 32 ++++++++++++++++++++++++-
1 files changed, 31 insertions(+), 1 deletions(-)
---
diff --git a/src/libtracker-data/tracker-sparql-query.vala b/src/libtracker-data/tracker-sparql-query.vala
index 5ffc2ad..febeeb0 100644
--- a/src/libtracker-data/tracker-sparql-query.vala
+++ b/src/libtracker-data/tracker-sparql-query.vala
@@ -1167,7 +1167,22 @@ public class Tracker.SparqlQuery : Object {
}
DataType translate_function (StringBuilder sql, string uri) throws SparqlError {
- if (uri == FN_NS + "starts-with") {
+ if (uri == FN_NS + "contains") {
+ // fn:contains('A','B') => 'A' GLOB '*B*'
+ sql.append ("(");
+ translate_expression_as_string (sql);
+ sql.append (" GLOB ");
+ expect (SparqlTokenType.COMMA);
+
+ sql.append ("?");
+ var binding = new LiteralBinding ();
+ binding.literal = "*%s*".printf (parse_string_literal ());
+ bindings.append (binding);
+
+ sql.append (")");
+
+ return DataType.BOOLEAN;
+ } else if (uri == FN_NS + "starts-with") {
// fn:starts-with('A','B') => 'A' GLOB 'B*'
sql.append ("(");
translate_expression_as_string (sql);
@@ -1182,6 +1197,21 @@ public class Tracker.SparqlQuery : Object {
sql.append (")");
return DataType.BOOLEAN;
+ } else if (uri == FN_NS + "ends-with") {
+ // fn:ends-with('A','B') => 'A' GLOB '*B'
+ sql.append ("(");
+ translate_expression_as_string (sql);
+ sql.append (" GLOB ");
+ expect (SparqlTokenType.COMMA);
+
+ sql.append ("?");
+ var binding = new LiteralBinding ();
+ binding.literal = "*%s".printf (parse_string_literal ());
+ bindings.append (binding);
+
+ sql.append (")");
+
+ return DataType.BOOLEAN;
} else {
throw get_error ("Unknown function");
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]