[tracker] libtracker-data: Add support for CEIL/FLOOR builtin functions



commit d46981f85102c619a9be5e0f87ee978ae51706e4
Author: Carlos Garnacho <carlosg gnome org>
Date:   Tue Jul 28 23:53:46 2015 +0200

    libtracker-data: Add support for CEIL/FLOOR builtin functions
    
    These functions are defined in Sparql 1.1 query language recommendation,
    http://www.w3.org/TR/sparql11-query/#func-ceil
    http://www.w3.org/TR/sparql11-query/#func-floor

 src/libtracker-data/tracker-sparql-expression.vala |   12 ++++++++++++
 src/libtracker-data/tracker-sparql-scanner.vala    |   19 ++++++++++++++++++-
 2 files changed, 30 insertions(+), 1 deletions(-)
---
diff --git a/src/libtracker-data/tracker-sparql-expression.vala 
b/src/libtracker-data/tracker-sparql-expression.vala
index afc0d9e..ed15240 100644
--- a/src/libtracker-data/tracker-sparql-expression.vala
+++ b/src/libtracker-data/tracker-sparql-expression.vala
@@ -1328,6 +1328,18 @@ class Tracker.Sparql.Expression : Object {
                        type = translate_aggregate_expression (sql);
                        sql.append (")");
                        return type;
+               case SparqlTokenType.CEIL:
+                       next ();
+                       sql.append ("SparqlCeil(");
+                       type = translate_aggregate_expression (sql);
+                       sql.append (")");
+                       return type;
+               case SparqlTokenType.FLOOR:
+                       next ();
+                       sql.append ("SparqlFloor(");
+                       type = translate_aggregate_expression (sql);
+                       sql.append (")");
+                       return type;
                case SparqlTokenType.GROUP_CONCAT:
                        next ();
                        sql.append ("GROUP_CONCAT(");
diff --git a/src/libtracker-data/tracker-sparql-scanner.vala b/src/libtracker-data/tracker-sparql-scanner.vala
index 51315a4..3f5e63a 100644
--- a/src/libtracker-data/tracker-sparql-scanner.vala
+++ b/src/libtracker-data/tracker-sparql-scanner.vala
@@ -144,6 +144,10 @@ public class Tracker.SparqlScanner : Object {
                        case 'b':
                                if (matches (begin, "BASE")) return SparqlTokenType.BASE;
                                break;
+                       case 'C':
+                       case 'c':
+                               if (matches (begin, "CEIL")) return SparqlTokenType.CEIL;
+                               break;
                        case 'D':
                        case 'd':
                                switch (begin[1]) {
@@ -263,7 +267,16 @@ public class Tracker.SparqlScanner : Object {
                                break;
                        case 'F':
                        case 'f':
-                               if (matches (begin, "FALSE")) return SparqlTokenType.FALSE;
+                               switch (begin[1]) {
+                               case 'A':
+                               case 'a':
+                                       if (matches (begin, "FALSE")) return SparqlTokenType.FALSE;
+                                       break;
+                               case 'L':
+                               case 'l':
+                                       if (matches (begin, "FLOOR")) return SparqlTokenType.FLOOR;
+                                       break;
+                               }
                                break;
                        case 'I':
                        case 'i':
@@ -949,6 +962,7 @@ public enum Tracker.SparqlTokenType {
        BLANK_NODE,
        BOUND,
        BY,
+       CEIL,
        CLOSE_BRACE,
        CLOSE_BRACKET,
        CLOSE_PARENS,
@@ -976,6 +990,7 @@ public enum Tracker.SparqlTokenType {
        EXISTS,
        FALSE,
        FILTER,
+       FLOOR,
        FROM,
        GRAPH,
        GROUP,
@@ -1062,6 +1077,7 @@ public enum Tracker.SparqlTokenType {
                case BLANK_NODE: return "blank node";
                case BOUND: return "`BOUND'";
                case BY: return "`BY'";
+               case CEIL: return "`CEIL'";
                case CLOSE_BRACE: return "`}'";
                case CLOSE_BRACKET: return "`]'";
                case CLOSE_PARENS: return "`)'";
@@ -1086,6 +1102,7 @@ public enum Tracker.SparqlTokenType {
                case EXISTS: return "`EXISTS'";
                case FALSE: return "`false'";
                case FILTER: return "`FILTER'";
+               case FLOOR: return "`FLOOR'";
                case FROM: return "`FROM'";
                case GRAPH: return "`GRAPH'";
                case GROUP: return "`GROUP'";


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