[tracker/parser] SPARQL: limited support for DATATYPE
- From: Philip Van Hoof <pvanhoof src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [tracker/parser] SPARQL: limited support for DATATYPE
- Date: Wed, 12 Aug 2009 10:26:45 +0000 (UTC)
commit 1141c682138872825858f0169bfba48ca467c5ca
Author: Philip Van Hoof <philip codeminded be>
Date: Wed Aug 12 12:25:53 2009 +0200
SPARQL: limited support for DATATYPE
src/libtracker-data/tracker-sparql-query.vala | 31 ++++++++++++++++++++++++-
1 files changed, 30 insertions(+), 1 deletions(-)
---
diff --git a/src/libtracker-data/tracker-sparql-query.vala b/src/libtracker-data/tracker-sparql-query.vala
index ff6596c..c18dca8 100644
--- a/src/libtracker-data/tracker-sparql-query.vala
+++ b/src/libtracker-data/tracker-sparql-query.vala
@@ -988,6 +988,33 @@ public class Tracker.SparqlQuery : Object {
expect (SparqlTokenType.CLOSE_PARENS);
}
+ void translate_datatype (StringBuilder sql) throws SparqlError {
+ expect (SparqlTokenType.DATATYPE);
+ expect (SparqlTokenType.OPEN_PARENS);
+
+ if (accept (SparqlTokenType.VAR)) {
+ string variable_name = get_last_string().substring(1);
+ var binding = var_map.lookup (variable_name);
+
+ check_binding (binding, variable_name);
+
+ if (binding.is_uri || binding.type == null) {
+ throw new SparqlError.PARSE ("Invalid FILTER");
+ }
+
+ sql.append ("(SELECT ID FROM \"rdfs:Resource\" WHERE Uri = ?)");
+
+ var new_binding = new LiteralBinding ();
+ new_binding.literal = binding.type;
+ bindings.append (new_binding);
+
+ } else {
+ throw new SparqlError.PARSE ("Invalid FILTER");
+ }
+
+ expect (SparqlTokenType.CLOSE_PARENS);
+ }
+
string parse_string_literal () throws SparqlError {
next ();
switch (last ()) {
@@ -1129,9 +1156,11 @@ public class Tracker.SparqlQuery : Object {
break;
case SparqlTokenType.LANG:
case SparqlTokenType.LANGMATCHES:
- case SparqlTokenType.DATATYPE:
next ();
break;
+ case SparqlTokenType.DATATYPE:
+ translate_datatype (sql);
+ break;
case SparqlTokenType.BOUND:
translate_bound_call (sql);
break;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]