[tracker/wip/garnacho/sparql1.1: 3/23] libtracker-data: Add support for LCASE/UCASE builtin functions
- From: Carlos Garnacho <carlosg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [tracker/wip/garnacho/sparql1.1: 3/23] libtracker-data: Add support for LCASE/UCASE builtin functions
- Date: Thu, 20 Aug 2015 08:52:56 +0000 (UTC)
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]