[tracker/wip/garnacho/sparql1.1: 3/23] libtracker-data: Add support for LCASE/UCASE builtin functions



commit 3a0f7a8317f0b8c97bd3c7305bf5386484a027b9
Author: Carlos Garnacho <carlosg gnome org>
Date:   Tue Jul 28 20:28:59 2015 +0200

    libtracker-data: Add support for LCASE/UCASE builtin functions
    
    These functions are defined in Sparql 1.1 query recommendation,
    http://www.w3.org/TR/sparql11-query/#func-lcase
    http://www.w3.org/TR/sparql11-query/#func-ucase

 src/libtracker-data/tracker-sparql-expression.vala |   12 +++++++++
 src/libtracker-data/tracker-sparql-scanner.vala    |   26 ++++++++++++++++++-
 2 files changed, 36 insertions(+), 2 deletions(-)
---
diff --git a/src/libtracker-data/tracker-sparql-expression.vala 
b/src/libtracker-data/tracker-sparql-expression.vala
index a4318a3..b655d0f 100644
--- a/src/libtracker-data/tracker-sparql-expression.vala
+++ b/src/libtracker-data/tracker-sparql-expression.vala
@@ -1212,6 +1212,18 @@ class Tracker.Sparql.Expression : Object {
                case SparqlTokenType.ISLITERAL:
                        next ();
                        return PropertyType.BOOLEAN;
+               case SparqlTokenType.LCASE:
+                       next ();
+                       expect (SparqlTokenType.OPEN_PARENS);
+                       var result = translate_function (sql, FN_NS + "lower-case");
+                       expect (SparqlTokenType.CLOSE_PARENS);
+                       return result;
+               case SparqlTokenType.UCASE:
+                       next ();
+                       expect (SparqlTokenType.OPEN_PARENS);
+                       var result = translate_function (sql, FN_NS + "upper-case");
+                       expect (SparqlTokenType.CLOSE_PARENS);
+                       return result;
                case SparqlTokenType.REGEX:
                        translate_regex (sql);
                        query.no_cache = true;
diff --git a/src/libtracker-data/tracker-sparql-scanner.vala b/src/libtracker-data/tracker-sparql-scanner.vala
index cd2f29a..ac2940c 100644
--- a/src/libtracker-data/tracker-sparql-scanner.vala
+++ b/src/libtracker-data/tracker-sparql-scanner.vala
@@ -208,7 +208,16 @@ public class Tracker.SparqlScanner : Object {
                                break;
                        case 'L':
                        case 'l':
-                               if (matches (begin, "LIMIT")) return SparqlTokenType.LIMIT;
+                               switch (begin[1]) {
+                               case 'C':
+                               case 'c':
+                                       if (matches (begin, "LCASE")) return SparqlTokenType.LCASE;
+                                       break;
+                               case 'I':
+                               case 'i':
+                                       if (matches (begin, "LIMIT")) return SparqlTokenType.LIMIT;
+                                       break;
+                               }
                                break;
                        case 'N':
                        case 'n':
@@ -224,7 +233,16 @@ public class Tracker.SparqlScanner : Object {
                                break;
                        case 'U':
                        case 'u':
-                               if (matches (begin, "UNION")) return SparqlTokenType.UNION;
+                               switch (begin[1]) {
+                               case 'N':
+                               case 'n':
+                                       if (matches (begin, "UNION")) return SparqlTokenType.UNION;
+                                       break;
+                               case 'C':
+                               case 'c':
+                                       if (matches (begin, "UCASE")) return SparqlTokenType.UCASE;
+                                       break;
+                               }
                                break;
                        case 'W':
                        case 'w':
@@ -922,6 +940,7 @@ public enum Tracker.SparqlTokenType {
        ISURI,
        LANG,
        LANGMATCHES,
+       LCASE,
        LIMIT,
        MAX,
        MIN,
@@ -964,6 +983,7 @@ public enum Tracker.SparqlTokenType {
        STRING_LITERAL_LONG2,
        SUM,
        TRUE,
+       UCASE,
        UNION,
        VAR,
        WHERE,
@@ -1021,6 +1041,7 @@ public enum Tracker.SparqlTokenType {
                case ISURI: return "`ISURI'";
                case LANG: return "`LANG'";
                case LANGMATCHES: return "`LANGMATCHES'";
+               case LCASE: return "`LCASE'";
                case LIMIT: return "`LIMIT'";
                case MAX: return "`MAX'";
                case MIN: return "`MIN'";
@@ -1062,6 +1083,7 @@ public enum Tracker.SparqlTokenType {
                case STRING_LITERAL_LONG2: return "string literal";
                case SUM: return "`SUM'";
                case TRUE: return "`true'";
+               case UCASE: return "`UCASE'";
                case UNION: return "`UNION'";
                case VAR: return "variable";
                case WHERE: return "`WHERE'";


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]