[tracker/tracker-store] libtracker-common: Add TrackerSparqlBuilder
- From: Jürg Billeter <juergbi src gnome org>
- To: svn-commits-list gnome org
- Subject: [tracker/tracker-store] libtracker-common: Add TrackerSparqlBuilder
- Date: Fri, 29 May 2009 09:54:10 -0400 (EDT)
commit 993c2739caf28c7b9fa9dbee09709957a0750699
Author: Jürg Billeter <j bitron ch>
Date: Thu May 28 17:14:19 2009 +0200
libtracker-common: Add TrackerSparqlBuilder
---
src/libtracker-common/.gitignore | 2 +
src/libtracker-common/Makefile.am | 17 ++-
src/libtracker-common/tracker-common.h | 1 +
src/libtracker-common/tracker-sparql-builder.vala | 180 +++++++++++++++++++++
4 files changed, 198 insertions(+), 2 deletions(-)
diff --git a/src/libtracker-common/.gitignore b/src/libtracker-common/.gitignore
new file mode 100644
index 0000000..eb2fec8
--- /dev/null
+++ b/src/libtracker-common/.gitignore
@@ -0,0 +1,2 @@
+tracker-sparql-builder.c
+tracker-sparql-builder.h
diff --git a/src/libtracker-common/Makefile.am b/src/libtracker-common/Makefile.am
index df109a5..7f28133 100644
--- a/src/libtracker-common/Makefile.am
+++ b/src/libtracker-common/Makefile.am
@@ -34,6 +34,9 @@ hal_headers = \
tracker-storage.h
endif
+libtracker_common_la_VALASOURCES = \
+ tracker-sparql-builder.vala
+
libtracker_common_la_SOURCES = \
$(os_sources) \
$(hal_sources) \
@@ -56,7 +59,9 @@ libtracker_common_la_SOURCES = \
tracker-type-utils.c \
tracker-utils.c \
tracker-thumbnailer.c \
- tracker-albumart.c
+ tracker-albumart.c \
+ libtracker-common.vala.stamp \
+ $(libtracker_common_la_VALASOURCES:.vala=.c)
noinst_HEADERS = \
$(hal_headers) \
@@ -79,11 +84,16 @@ libtracker_commoninclude_HEADERS = \
tracker-ontology.h \
tracker-parser.h \
tracker-property.h \
+ tracker-sparql-builder.h \
tracker-statement-list.h \
tracker-status.h \
tracker-type-utils.h \
tracker-utils.h
+libtracker-common.vala.stamp: $(libtracker_common_la_VALASOURCES)
+ $(VALAC) -C $(VALAFLAGS) -H tracker-sparql-builder.h $^
+ touch $@
+
libtracker_common_la_LDFLAGS = \
-version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE)
@@ -112,11 +122,14 @@ marshal_sources = \
tracker-marshal.c
BUILT_SOURCES = \
- $(marshal_sources)
+ $(marshal_sources) \
+ libtracker-common.vala.stamp
CLEANFILES = $(BUILT_SOURCES)
EXTRA_DIST = \
tracker-marshal.list \
+ $(libtracker_common_la_VALASOURCES) \
+ libtracker-common.vala.stamp \
libtracker-common.vapi
diff --git a/src/libtracker-common/tracker-common.h b/src/libtracker-common/tracker-common.h
index 59ac595..46d090e 100644
--- a/src/libtracker-common/tracker-common.h
+++ b/src/libtracker-common/tracker-common.h
@@ -42,6 +42,7 @@ G_BEGIN_DECLS
#include "tracker-parser.h"
#include "tracker-power.h"
#include "tracker-property.h"
+#include "tracker-sparql-builder.h"
#include "tracker-storage.h"
#include "tracker-type-utils.h"
#include "tracker-utils.h"
diff --git a/src/libtracker-common/tracker-sparql-builder.vala b/src/libtracker-common/tracker-sparql-builder.vala
new file mode 100644
index 0000000..896df21
--- /dev/null
+++ b/src/libtracker-common/tracker-sparql-builder.vala
@@ -0,0 +1,180 @@
+/*
+ * Copyright (C) 2009, Nokia
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+public class Tracker.SparqlBuilder : Object {
+ enum State {
+ UPDATE,
+ INSERT,
+ DELETE,
+ SUBJECT,
+ PREDICATE,
+ OBJECT,
+ BLANK
+ }
+
+ public string result {
+ get { return str.str; }
+ }
+
+ State state {
+ get { return states[states.length - 1]; }
+ }
+
+ State[] states;
+ StringBuilder str = new StringBuilder ();
+
+ public SparqlBuilder.update () {
+ states += State.UPDATE;
+ }
+
+ public void insert_open ()
+ requires (state == State.UPDATE)
+ {
+ states += State.INSERT;
+ str.append ("INSERT {\n");
+ }
+
+ public void insert_close ()
+ requires (state == State.INSERT || state == State.OBJECT)
+ {
+ if (state == State.OBJECT) {
+ str.append (".\n");
+ states.length -= 3;
+ }
+ states.length--;
+ str.append ("}\n");
+ }
+
+ public void subject_iri (string iri) {
+ subject ("<%s>".printf (iri));
+ }
+
+ public void subject (string s)
+ requires (state == State.INSERT || state == State.OBJECT)
+ {
+ if (state == State.OBJECT) {
+ str.append (".\n");
+ states.length -= 3;
+ }
+ str.append (s);
+ states += State.SUBJECT;
+ }
+
+ public void predicate_iri (string iri) {
+ predicate ("<%s>".printf (iri));
+ }
+
+ public void predicate (string s)
+ requires (state == State.SUBJECT || state == State.OBJECT || state == State.BLANK)
+ {
+ if (state == State.OBJECT) {
+ str.append (";");
+ states.length -= 2;
+ }
+ str.append (" ");
+ str.append (s);
+ states += State.PREDICATE;
+ }
+
+ public void object_iri (string iri) {
+ object ("<%s>".printf (iri));
+ }
+
+ public void object (string s)
+ requires (state == State.PREDICATE || state == State.OBJECT)
+ {
+ if (state == State.OBJECT) {
+ str.append (",");
+ states.length--;
+ }
+ str.append (" ");
+ str.append (s);
+ states += State.OBJECT;
+ }
+
+ public void object_string (string literal)
+ requires (state == State.PREDICATE || state == State.OBJECT)
+ {
+ if (state == State.OBJECT) {
+ str.append (",");
+ states.length--;
+ }
+
+ str.append (" \"");
+
+ char* p = literal;
+ while (*p != '\0') {
+ switch (*p) {
+ case '\t':
+ str.append ("\\t");
+ break;
+ case '\n':
+ str.append ("\\n");
+ break;
+ case '\r':
+ str.append ("\\r");
+ break;
+ case '\b':
+ str.append ("\\b");
+ break;
+ case '\f':
+ str.append ("\\f");
+ break;
+ case '"':
+ str.append ("\\\"");
+ break;
+ case '\\':
+ str.append ("\\\\");
+ break;
+ default:
+ str.append_c (*p);
+ break;
+ }
+ p++;
+ }
+
+ str.append ("\"");
+
+ states += State.OBJECT;
+ }
+
+ public void object_boolean (bool literal) {
+ object (literal ? "true" : "false");
+ }
+
+ public void object_blank_open ()
+ requires (state == State.PREDICATE || state == State.OBJECT)
+ {
+ if (state == State.OBJECT) {
+ str.append (",");
+ states.length--;
+ }
+ str.append (" [");
+ states += State.BLANK;
+ }
+
+ public void object_blank_close ()
+ requires (state == State.OBJECT && states[states.length - 3] == state.BLANK)
+ {
+ str.append ("]");
+ states.length -= 3;
+ states += State.OBJECT;
+ }
+}
+
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]