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



commit 27be3a97e8fd8478c66ca766685f3a9377ce009d
Author: Carlos Garnacho <carlosg gnome org>
Date:   Wed Jul 29 00:03:14 2015 +0200

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

 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 4c5673e..ea5c22c 100644
--- a/src/libtracker-data/tracker-sparql-expression.vala
+++ b/src/libtracker-data/tracker-sparql-expression.vala
@@ -1340,6 +1340,12 @@ class Tracker.Sparql.Expression : Object {
                        type = translate_aggregate_expression (sql);
                        sql.append (")");
                        return type;
+               case SparqlTokenType.RAND:
+                       next ();
+                       expect (SparqlTokenType.OPEN_PARENS);
+                       expect (SparqlTokenType.CLOSE_PARENS);
+                       sql.append ("SparqlRand()");
+                       return PropertyType.DOUBLE;
                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 3f5e63a..fdd0898 100644
--- a/src/libtracker-data/tracker-sparql-scanner.vala
+++ b/src/libtracker-data/tracker-sparql-scanner.vala
@@ -181,6 +181,10 @@ public class Tracker.SparqlScanner : Object {
                        case 'n':
                                if (matches (begin, "NULL")) return SparqlTokenType.NULL;
                                break;
+                       case 'R':
+                       case 'r':
+                               if (matches (begin, "RAND")) return SparqlTokenType.RAND;
+                               break;
                        case 'T':
                        case 't':
                                if (matches (begin, "TRUE")) return SparqlTokenType.TRUE;
@@ -1035,6 +1039,7 @@ public enum Tracker.SparqlTokenType {
        PLUS,
        PN_PREFIX,
        PREFIX,
+       RAND,
        REDUCED,
        REGEX,
        REPLACE,
@@ -1146,6 +1151,7 @@ public enum Tracker.SparqlTokenType {
                case PLUS: return "`+'";
                case PN_PREFIX: return "prefixed name";
                case PREFIX: return "`PREFIX'";
+               case RAND: return "`RAND'";
                case REDUCED: return "`REDUCED'";
                case REGEX: return "`REGEX'";
                case REPLACE: return "`REPLACE'";


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