[tracker/async-queries-wip: 1/23] libtracker-data: Add execute_async method to SparqlQuery class



commit e21c43cd1b319c07fcf47560effe91afd62a8059
Author: Jürg Billeter <j bitron ch>
Date:   Fri Apr 9 15:34:36 2010 +0200

    libtracker-data: Add execute_async method to SparqlQuery class

 src/libtracker-data/Makefile.am               |    2 +-
 src/libtracker-data/tracker-sparql-query.vala |   31 ++++++++++++++++++------
 src/libtracker-db/libtracker-db.vapi          |    1 +
 3 files changed, 25 insertions(+), 9 deletions(-)
---
diff --git a/src/libtracker-data/Makefile.am b/src/libtracker-data/Makefile.am
index f2ed878..038d1e8 100644
--- a/src/libtracker-data/Makefile.am
+++ b/src/libtracker-data/Makefile.am
@@ -58,7 +58,7 @@ vapi_sources =								\
 	libtracker-data.vapi 
 
 libtracker-data.vala.stamp: $(libtracker_data_la_VALASOURCES) $(vapi_sources) 
-	$(AM_V_GEN)$(VALAC) $(GCOV_VALAFLAGS) -C $(VALAFLAGS) -H tracker-sparql-query.h $^
+	$(AM_V_GEN)$(VALAC) $(GCOV_VALAFLAGS) -C $(VALAFLAGS) --pkg gio-2.0 -H tracker-sparql-query.h $^
 	touch $@
 
 libtracker_data_la_LDFLAGS =						\
diff --git a/src/libtracker-data/tracker-sparql-query.vala b/src/libtracker-data/tracker-sparql-query.vala
index ef688aa..7db2bb6 100644
--- a/src/libtracker-data/tracker-sparql-query.vala
+++ b/src/libtracker-data/tracker-sparql-query.vala
@@ -361,7 +361,7 @@ public class Tracker.Sparql.Query : Object {
 		}
 	}
 
-	public DBResultSet? execute () throws DBInterfaceError, SparqlError, DateError {
+	public DBStatement prepare () throws DBInterfaceError, SparqlError, DateError {
 		assert (!update_extensions);
 
 		scanner = new SparqlScanner ((char*) query_string, (long) query_string.size ());
@@ -378,13 +378,13 @@ public class Tracker.Sparql.Query : Object {
 
 		switch (current ()) {
 		case SparqlTokenType.SELECT:
-			return execute_select ();
+			return prepare_select ();
 		case SparqlTokenType.CONSTRUCT:
 			throw get_internal_error ("CONSTRUCT is not supported");
 		case SparqlTokenType.DESCRIBE:
 			throw get_internal_error ("DESCRIBE is not supported");
 		case SparqlTokenType.ASK:
-			return execute_ask ();
+			return prepare_ask ();
 		case SparqlTokenType.INSERT:
 		case SparqlTokenType.DELETE:
 		case SparqlTokenType.DROP:
@@ -394,6 +394,16 @@ public class Tracker.Sparql.Query : Object {
 		}
 	}
 
+	public DBResultSet? execute () throws DBInterfaceError, SparqlError, DateError {
+		var stmt = prepare ();
+		return stmt.execute ();
+	}
+
+	public async DBResultSet? execute_async () throws DBInterfaceError, SparqlError, DateError {
+		var stmt = prepare ();
+		return yield stmt.execute_async ();
+	}
+
 	public PtrArray? execute_update (bool blank) throws DataError, DBInterfaceError, SparqlError, DateError {
 		assert (update_extensions);
 
@@ -442,7 +452,7 @@ public class Tracker.Sparql.Query : Object {
 		return blank_nodes;
 	}
 
-	DBResultSet? exec_sql (string sql) throws DBInterfaceError, SparqlError, DateError {
+	DBStatement create_db_statement (string sql) throws DBInterfaceError, SparqlError, DateError {
 		var iface = DBManager.get_db_interface ();
 		var stmt = iface.create_statement ("%s", sql);
 
@@ -467,10 +477,15 @@ public class Tracker.Sparql.Query : Object {
 			i++;
 		}
 
+		return stmt;
+	}
+
+	DBResultSet? exec_sql (string sql) throws DBInterfaceError, SparqlError, DateError {
+		var stmt = create_db_statement (sql);
 		return stmt.execute ();
 	}
 
-	DBResultSet? execute_select () throws DBInterfaceError, SparqlError, DateError {
+	DBStatement prepare_select () throws DBInterfaceError, SparqlError, DateError {
 		// SELECT query
 
 		context = new Context ();
@@ -483,10 +498,10 @@ public class Tracker.Sparql.Query : Object {
 
 		context = context.parent_context;
 
-		return exec_sql (sql.str);
+		return create_db_statement (sql.str);
 	}
 
-	DBResultSet? execute_ask () throws DBInterfaceError, SparqlError, DateError {
+	DBStatement prepare_ask () throws DBInterfaceError, SparqlError, DateError {
 		// ASK query
 
 		var pattern_sql = new StringBuilder ();
@@ -511,7 +526,7 @@ public class Tracker.Sparql.Query : Object {
 
 		context = context.parent_context;
 
-		return exec_sql (sql.str);
+		return create_db_statement (sql.str);
 	}
 
 	private void parse_from_or_into_param () throws SparqlError {
diff --git a/src/libtracker-db/libtracker-db.vapi b/src/libtracker-db/libtracker-db.vapi
index d9a69e7..2a80317 100644
--- a/src/libtracker-db/libtracker-db.vapi
+++ b/src/libtracker-db/libtracker-db.vapi
@@ -56,6 +56,7 @@ namespace Tracker {
 		public abstract void bind_int (int index, int value);
 		public abstract void bind_text (int index, string value);
 		public abstract DBResultSet execute () throws DBInterfaceError;
+		public abstract async DBResultSet execute_async () throws DBInterfaceError;
 	}
 }
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]