[tracker/collate-keyword] libtracker-data: New COLLATE keyword allowed in sparql
- From: Aleksander Morgado <aleksm src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [tracker/collate-keyword] libtracker-data: New COLLATE keyword allowed in sparql
- Date: Thu, 19 Aug 2010 11:58:13 +0000 (UTC)
commit 431c1e001f2dcb911ebcbf95d0d46e453520d011
Author: Aleksander Morgado <aleksander lanedo com>
Date: Thu Aug 19 13:52:37 2010 +0200
libtracker-data: New COLLATE keyword allowed in sparql
src/libtracker-data/tracker-sparql-expression.vala | 7 ++++---
src/libtracker-data/tracker-sparql-pattern.vala | 10 ++++++++--
src/libtracker-data/tracker-sparql-scanner.vala | 6 ++++++
3 files changed, 18 insertions(+), 5 deletions(-)
---
diff --git a/src/libtracker-data/tracker-sparql-expression.vala b/src/libtracker-data/tracker-sparql-expression.vala
index 064217b..b664515 100644
--- a/src/libtracker-data/tracker-sparql-expression.vala
+++ b/src/libtracker-data/tracker-sparql-expression.vala
@@ -180,15 +180,16 @@ class Tracker.Sparql.Expression : Object {
}
}
- internal void translate_order_condition (StringBuilder sql) throws Sparql.Error {
+ internal string translate_order_condition (StringBuilder sql) throws Sparql.Error {
if (accept (SparqlTokenType.ASC)) {
translate_expression_as_order_condition (sql);
- sql.append (" ASC");
+ return (" ASC");
} else if (accept (SparqlTokenType.DESC)) {
translate_expression_as_order_condition (sql);
- sql.append (" DESC");
+ return (" DESC");
} else {
translate_expression_as_order_condition (sql);
+ return ("");
}
}
diff --git a/src/libtracker-data/tracker-sparql-pattern.vala b/src/libtracker-data/tracker-sparql-pattern.vala
index bbc5aeb..477eae2 100644
--- a/src/libtracker-data/tracker-sparql-pattern.vala
+++ b/src/libtracker-data/tracker-sparql-pattern.vala
@@ -360,8 +360,14 @@ class Tracker.Sparql.Pattern : Object {
} else {
sql.append (", ");
}
- expression.translate_order_condition (sql);
- } while (current () != SparqlTokenType.LIMIT && current () != SparqlTokenType.OFFSET && current () != SparqlTokenType.CLOSE_BRACE && current () != SparqlTokenType.CLOSE_PARENS && current () != SparqlTokenType.EOF);
+ string order = expression.translate_order_condition (sql);
+
+ if (accept (SparqlTokenType.COLLATE)) {
+ sql.append (" COLLATE TRACKER ");
+ }
+
+ sql.append (order);
+ } while (current () != SparqlTokenType.LIMIT && current () != SparqlTokenType.OFFSET && current () != SparqlTokenType.COLLATE && current () != SparqlTokenType.CLOSE_BRACE && current () != SparqlTokenType.CLOSE_PARENS && current () != SparqlTokenType.EOF);
}
int limit = -1;
diff --git a/src/libtracker-data/tracker-sparql-scanner.vala b/src/libtracker-data/tracker-sparql-scanner.vala
index d216ac0..6bf020b 100644
--- a/src/libtracker-data/tracker-sparql-scanner.vala
+++ b/src/libtracker-data/tracker-sparql-scanner.vala
@@ -281,6 +281,10 @@ public class Tracker.SparqlScanner : Object {
break;
case 7:
switch (begin[0]) {
+ case 'c':
+ case 'C':
+ if (matches (begin, "COLLATE")) return SparqlTokenType.COLLATE;
+ break;
case 'R':
case 'r':
if (matches (begin, "REDUCED")) return SparqlTokenType.REDUCED;
@@ -826,6 +830,7 @@ public enum Tracker.SparqlTokenType {
CLOSE_BRACE,
CLOSE_BRACKET,
CLOSE_PARENS,
+ COLLATE,
COLON,
COMMA,
CONSTRUCT,
@@ -919,6 +924,7 @@ public enum Tracker.SparqlTokenType {
case CLOSE_BRACE: return "`}'";
case CLOSE_BRACKET: return "`]'";
case CLOSE_PARENS: return "`)'";
+ case COLLATE: return "`COLLATE'";
case COLON: return "`:'";
case COMMA: return "`,'";
case CONSTRUCT: return "`CONSTRUCT'";
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]