diff options
author | Jürg Billeter <j@bitron.ch> | 2010-11-17 14:31:55 +0100 |
---|---|---|
committer | Jürg Billeter <j@bitron.ch> | 2010-11-17 16:04:43 +0100 |
commit | de4a44f8c51cbc6026837f0ab017def565baf6d7 (patch) | |
tree | 32125f8da75da51c123fc340317961355ce640c7 | |
parent | 2a3e4589761c5289b9b9ab6cef6e194325c279b8 (diff) | |
download | tracker-de4a44f8c51cbc6026837f0ab017def565baf6d7.tar.gz |
SPARQL: Use proper collation for fn:starts-with
-rw-r--r-- | 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 90372a40a..45458d6aa 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") { |