[tracker/rss-enclosures] libtracker-data: Support for SPARQL 1.1's IN operator
- From: Roberto Guido <rguido src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [tracker/rss-enclosures] libtracker-data: Support for SPARQL 1.1's IN operator
- Date: Wed, 24 Nov 2010 01:03:11 +0000 (UTC)
commit 3ebb61d8a58c08f81dd341827e3ae93cc5789c5e
Author: Philip Van Hoof <philip codeminded be>
Date: Fri Jul 30 11:14:50 2010 +0200
libtracker-data: Support for SPARQL 1.1's IN operator
src/libtracker-data/tracker-sparql-expression.vala | 15 +++++++++++++++
src/libtracker-data/tracker-sparql-scanner.vala | 6 ++++++
2 files changed, 21 insertions(+), 0 deletions(-)
---
diff --git a/src/libtracker-data/tracker-sparql-expression.vala b/src/libtracker-data/tracker-sparql-expression.vala
index 4325fcd..b155aa3 100644
--- a/src/libtracker-data/tracker-sparql-expression.vala
+++ b/src/libtracker-data/tracker-sparql-expression.vala
@@ -1088,6 +1088,19 @@ class Tracker.Sparql.Expression : Object {
return PropertyType.BOOLEAN;
}
+ PropertyType translate_in (StringBuilder sql) throws SparqlError {
+ expect (SparqlTokenType.OPEN_PARENS);
+ sql.append (" IN (");
+ translate_expression_as_string (sql);
+ while (accept (SparqlTokenType.COMMA)) {
+ sql.append (", ");
+ translate_expression_as_string (sql);
+ }
+ expect (SparqlTokenType.CLOSE_PARENS);
+ sql.append (")");
+ return PropertyType.BOOLEAN;
+ }
+
PropertyType translate_relational_expression (StringBuilder sql) throws SparqlError {
long begin = sql.len;
// TODO: improve performance (linked list)
@@ -1105,6 +1118,8 @@ class Tracker.Sparql.Expression : Object {
return process_relational_expression (sql, begin, n_bindings, optype, " <= ");
} else if (accept (SparqlTokenType.OP_GT)) {
return process_relational_expression (sql, begin, n_bindings, optype, " > ");
+ } else if (accept (SparqlTokenType.OP_IN)) {
+ return translate_in (sql);
}
return optype;
}
diff --git a/src/libtracker-data/tracker-sparql-scanner.vala b/src/libtracker-data/tracker-sparql-scanner.vala
index d803045..bef8d5c 100644
--- a/src/libtracker-data/tracker-sparql-scanner.vala
+++ b/src/libtracker-data/tracker-sparql-scanner.vala
@@ -59,6 +59,10 @@ public class Tracker.SparqlScanner : Object {
case 'b':
if (matches (begin, "BY")) return SparqlTokenType.BY;
break;
+ case 'i':
+ case 'I':
+ if (matches (begin, "IN")) return SparqlTokenType.OP_IN;
+ break;
}
break;
case 3:
@@ -863,6 +867,7 @@ public enum Tracker.SparqlTokenType {
OP_NE,
OP_NEG,
OP_OR,
+ OP_IN,
OPEN_BRACE,
OPEN_BRACKET,
OPEN_PARENS,
@@ -953,6 +958,7 @@ public enum Tracker.SparqlTokenType {
case OP_NE: return "`!='";
case OP_NEG: return "`!'";
case OP_OR: return "`||'";
+ case OP_IN: return "`IN'";
case OPEN_BRACE: return "`{'";
case OPEN_BRACKET: return "`['";
case OPEN_PARENS: return "`('";
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]