[tracker/parser] SPARQL: Add support for GROUP_CONCAT
- From: Jürg Billeter <juergbi src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [tracker/parser] SPARQL: Add support for GROUP_CONCAT
- Date: Fri, 14 Aug 2009 13:54:33 +0000 (UTC)
commit 94839da6238e2797ec4818e093e826440e4631d8
Author: Jürg Billeter <j bitron ch>
Date: Fri Aug 14 15:54:00 2009 +0200
SPARQL: Add support for GROUP_CONCAT
src/libtracker-data/tracker-sparql-query.vala | 15 +++++++++++++++
src/libtracker-data/tracker-sparql-scanner.vala | 4 ++++
2 files changed, 19 insertions(+), 0 deletions(-)
---
diff --git a/src/libtracker-data/tracker-sparql-query.vala b/src/libtracker-data/tracker-sparql-query.vala
index 80accf9..3f288ff 100644
--- a/src/libtracker-data/tracker-sparql-query.vala
+++ b/src/libtracker-data/tracker-sparql-query.vala
@@ -384,6 +384,10 @@ public class Tracker.SparqlQuery : Object {
return ((string) (tokens[last_index].begin.pos + strip)).ndup ((tokens[last_index].end.pos - tokens[last_index].begin.pos - 2 * strip));
}
+ string escape_sql_string_literal (string literal) {
+ return "'%s'".printf (string.joinv ("''", literal.split ("'")));
+ }
+
void parse_prologue () throws SparqlError {
if (accept (SparqlTokenType.BASE)) {
expect (SparqlTokenType.IRI_REF);
@@ -549,6 +553,17 @@ public class Tracker.SparqlQuery : Object {
sql.append (")");
expect (SparqlTokenType.AS);
expect (SparqlTokenType.PN_PREFIX);
+ } else if (accept (SparqlTokenType.GROUP_CONCAT)) {
+ sql.append ("GROUP_CONCAT(");
+ expect (SparqlTokenType.OPEN_PARENS);
+ translate_expression_as_string (sql);
+ sql.append (", ");
+ expect (SparqlTokenType.COMMA);
+ sql.append (escape_sql_string_literal (parse_string_literal ()));
+ sql.append (")");
+ expect (SparqlTokenType.CLOSE_PARENS);
+ expect (SparqlTokenType.AS);
+ expect (SparqlTokenType.PN_PREFIX);
} else {
translate_expression_as_string (sql);
}
diff --git a/src/libtracker-data/tracker-sparql-scanner.vala b/src/libtracker-data/tracker-sparql-scanner.vala
index e7241cc..4882eba 100644
--- a/src/libtracker-data/tracker-sparql-scanner.vala
+++ b/src/libtracker-data/tracker-sparql-scanner.vala
@@ -305,6 +305,9 @@ public class Tracker.SparqlScanner : Object {
case 11:
if (matches (begin, "LANGMATCHES")) return SparqlTokenType.LANGMATCHES;
break;
+ case 12:
+ if (matches (begin, "GROUP_CONCAT")) return SparqlTokenType.GROUP_CONCAT;
+ break;
}
return SparqlTokenType.PN_PREFIX;
}
@@ -775,6 +778,7 @@ public enum Tracker.SparqlTokenType {
FROM,
GRAPH,
GROUP,
+ GROUP_CONCAT,
INSERT,
INTEGER,
INTO,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]