[tracker/wip/garnacho/sparql1.1: 7/23] libtracker-data: Add support for the ABS() builtin function



commit 6e193ec049f789bbb7e0f717d86b92425bfe0109
Author: Carlos Garnacho <carlosg gnome org>
Date:   Tue Jul 28 20:30:19 2015 +0200

    libtracker-data: Add support for the ABS() builtin function
    
    This function is defined in Sparql 1.1 query language recommendation,
    http://www.w3.org/TR/sparql11-query/#func-abs

 src/libtracker-data/tracker-sparql-expression.vala |    6 ++++++
 src/libtracker-data/tracker-sparql-scanner.vala    |    6 ++++++
 2 files changed, 12 insertions(+), 0 deletions(-)
---
diff --git a/src/libtracker-data/tracker-sparql-expression.vala 
b/src/libtracker-data/tracker-sparql-expression.vala
index b71f5e0..7367486 100644
--- a/src/libtracker-data/tracker-sparql-expression.vala
+++ b/src/libtracker-data/tracker-sparql-expression.vala
@@ -1286,6 +1286,12 @@ class Tracker.Sparql.Expression : Object {
                        type = translate_aggregate_expression (sql);
                        sql.append (")");
                        return type;
+               case SparqlTokenType.ABS:
+                       next ();
+                       sql.append ("ABS(");
+                       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 3ffeace..42d8c54 100644
--- a/src/libtracker-data/tracker-sparql-scanner.vala
+++ b/src/libtracker-data/tracker-sparql-scanner.vala
@@ -96,6 +96,10 @@ public class Tracker.SparqlScanner : Object {
                                                break;
                                        }
                                        break;
+                               case 'B':
+                               case 'b':
+                                       if (matches (begin, "ABS")) return SparqlTokenType.ABS;
+                                       break;
                                case 'V':
                                case 'v':
                                        if (matches (begin, "AVG")) return SparqlTokenType.AVG;
@@ -904,6 +908,7 @@ public struct Tracker.SourceLocation {
 public enum Tracker.SparqlTokenType {
        NONE,
        A,
+       ABS,
        AS,
        ASC,
        ASK,
@@ -1012,6 +1017,7 @@ public enum Tracker.SparqlTokenType {
        public unowned string to_string () {
                switch (this) {
                case A: return "`a'";
+               case ABS: return "`ABS'";
                case AS: return "`AS'";
                case ASC: return "`ASC'";
                case ASK: return "`ASK'";


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