[tracker/wip/garnacho/sparql1.1: 14/23] libtracker-data: Add support for CEIL/FLOOR builtin functions
- From: Carlos Garnacho <carlosg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [tracker/wip/garnacho/sparql1.1: 14/23] libtracker-data: Add support for CEIL/FLOOR builtin functions
- Date: Thu, 20 Aug 2015 08:53:51 +0000 (UTC)
commit 1e4b8992d473879307d9d7a52fb8d9647779686e
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 0e0cb8e..4c5673e 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]