[tracker/rss-enclosures] SPARQL: Use proper collation for fn:starts-with
- From: Roberto Guido <rguido src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [tracker/rss-enclosures] SPARQL: Use proper collation for fn:starts-with
- Date: Wed, 24 Nov 2010 02:34:07 +0000 (UTC)
commit 730eb7c916cc090135a4cf4bc918f9279512ff14
Author: Jürg Billeter <j bitron ch>
Date: Wed Nov 17 14:31:55 2010 +0100
SPARQL: Use proper collation for fn:starts-with
src/libtracker-data/tracker-sparql-expression.vala | 18 +++++++++++++-----
1 files changed, 13 insertions(+), 5 deletions(-)
---
diff --git a/src/libtracker-data/tracker-sparql-expression.vala b/src/libtracker-data/tracker-sparql-expression.vala
index 90372a4..45458d6 100644
--- a/src/libtracker-data/tracker-sparql-expression.vala
+++ b/src/libtracker-data/tracker-sparql-expression.vala
@@ -405,18 +405,26 @@ class Tracker.Sparql.Expression : Object {
return PropertyType.BOOLEAN;
} else if (uri == FN_NS + "starts-with") {
- // fn:starts-with('A','B') => 'A' GLOB 'B*'
- sql.append ("(");
+ // fn:starts-with('A','B') => 'A' BETWEEN 'B' AND 'B\u0010fffd'
+ // 0010fffd always sorts last
+
translate_expression_as_string (sql);
- sql.append (" GLOB ");
+ sql.append (" BETWEEN ");
+
expect (SparqlTokenType.COMMA);
+ string prefix = parse_string_literal ();
sql.append ("?");
var binding = new LiteralBinding ();
- binding.literal = "%s*".printf (parse_string_literal ());
+ binding.literal = prefix;
query.bindings.append (binding);
- sql.append (")");
+ sql.append (" AND ");
+
+ sql.append ("?");
+ binding = new LiteralBinding ();
+ binding.literal = prefix + ((unichar) 0x10fffd).to_string ();
+ query.bindings.append (binding);
return PropertyType.BOOLEAN;
} else if (uri == FN_NS + "ends-with") {
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]