[tracker] SPARQL: Fix blank node parsing
- From: Jürg Billeter <juergbi src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [tracker] SPARQL: Fix blank node parsing
- Date: Tue, 18 Aug 2009 09:12:01 +0000 (UTC)
commit 59ec112e28a1e16d954285315f752b88e314e003
Author: Jürg Billeter <j bitron ch>
Date: Tue Aug 18 11:10:03 2009 +0200
SPARQL: Fix blank node parsing
src/libtracker-data/tracker-sparql-query.vala | 7 +++++++
src/libtracker-data/tracker-sparql-scanner.vala | 7 ++++++-
2 files changed, 13 insertions(+), 1 deletions(-)
---
diff --git a/src/libtracker-data/tracker-sparql-query.vala b/src/libtracker-data/tracker-sparql-query.vala
index 9da226a..5699d20 100644
--- a/src/libtracker-data/tracker-sparql-query.vala
+++ b/src/libtracker-data/tracker-sparql-query.vala
@@ -298,6 +298,9 @@ public class Tracker.SparqlQuery : Object {
prefix_map = new HashTable<string,string>.full (str_hash, str_equal, g_free, g_free);
subgraph_var_set = new HashTable<string,bool>.full (str_hash, str_equal, g_free, null);
+ base_uuid = new uchar[16];
+ uuid_generate (base_uuid);
+
this.query_string = query;
}
@@ -874,6 +877,10 @@ public class Tracker.SparqlQuery : Object {
// prefixed name without namespace :bar
next ();
result = prefix_map.lookup ("") + get_last_string ().substring (1);
+ } else if (accept (SparqlTokenType.BLANK_NODE)) {
+ // _:foo
+ expect (SparqlTokenType.COLON);
+ result = generate_bnodeid (get_last_string ().substring (1));
} else if (current () == SparqlTokenType.STRING_LITERAL1) {
result = parse_string_literal ();
} else if (current () == SparqlTokenType.STRING_LITERAL2) {
diff --git a/src/libtracker-data/tracker-sparql-scanner.vala b/src/libtracker-data/tracker-sparql-scanner.vala
index d729d11..34eab5d 100644
--- a/src/libtracker-data/tracker-sparql-scanner.vala
+++ b/src/libtracker-data/tracker-sparql-scanner.vala
@@ -413,7 +413,7 @@ public class Tracker.SparqlScanner : Object {
if (current >= end) {
type = SparqlTokenType.EOF;
- } else if (current[0].isalpha () /* || current[0] == ':' */ ) {
+ } else if (current[0].isalpha ()) {
// keyword or prefixed name
int len = 0;
while (current < end && is_pn_char (current[0])) {
@@ -674,6 +674,10 @@ public class Tracker.SparqlScanner : Object {
current += 2;
}
break;
+ case '_':
+ type = SparqlTokenType.BLANK_NODE;
+ current++;
+ break;
default:
unichar u = ((string) current).get_char_validated ((long) (end - current));
if (u != (unichar) (-1)) {
@@ -764,6 +768,7 @@ public enum Tracker.SparqlTokenType {
ASK,
AVG,
BASE,
+ BLANK_NODE,
BOUND,
BY,
CLOSE_BRACE,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]