[tracker/collate-keyword] libtracker-data: New COLLATE keyword allowed in sparql



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]