[tracker/cursor: 3/15] libtracker-data: Use Cursor instead of ResultSet in sparql-query
- From: Jürg Billeter <juergbi src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [tracker/cursor: 3/15] libtracker-data: Use Cursor instead of ResultSet in sparql-query
- Date: Tue, 18 Jan 2011 16:34:47 +0000 (UTC)
commit 6dd8a9d792b06156d2b58993b4d00d7060d7c8b1
Author: Jürg Billeter <j bitron ch>
Date: Tue Jan 18 15:46:11 2011 +0100
libtracker-data: Use Cursor instead of ResultSet in sparql-query
src/libtracker-data/tracker-sparql-query.vala | 65 +++++++++----------------
1 files changed, 23 insertions(+), 42 deletions(-)
---
diff --git a/src/libtracker-data/tracker-sparql-query.vala b/src/libtracker-data/tracker-sparql-query.vala
index 4ccb793..0d9cbc1 100644
--- a/src/libtracker-data/tracker-sparql-query.vala
+++ b/src/libtracker-data/tracker-sparql-query.vala
@@ -437,7 +437,7 @@ public class Tracker.Sparql.Query : Object {
}
}
- public GenericArray<GenericArray<HashTable<string,string>>>? execute_update (bool blank) throws DBInterfaceError, Sparql.Error, DateError {
+ public GenericArray<GenericArray<HashTable<string,string>>>? execute_update (bool blank) throws GLib.Error {
assert (update_extensions);
scanner = new SparqlScanner ((char*) query_string, (long) query_string.length);
@@ -526,7 +526,7 @@ public class Tracker.Sparql.Query : Object {
return stmt.execute ();
}
- DBCursor? exec_sql_cursor (string sql, PropertyType[] types, string[] variable_names, bool threadsafe) throws DBInterfaceError, Sparql.Error, DateError {
+ DBCursor? exec_sql_cursor (string sql, PropertyType[]? types, string[]? variable_names, bool threadsafe) throws DBInterfaceError, Sparql.Error, DateError {
var stmt = prepare_for_exec (sql);
return stmt.start_sparql_cursor (types, variable_names, threadsafe);
@@ -604,7 +604,7 @@ public class Tracker.Sparql.Query : Object {
}
}
- GenericArray<HashTable<string,string>>? execute_insert_or_delete (bool blank) throws DBInterfaceError, Sparql.Error, DateError {
+ GenericArray<HashTable<string,string>>? execute_insert_or_delete (bool blank) throws GLib.Error {
// INSERT or DELETE
if (accept (SparqlTokenType.WITH)) {
@@ -693,7 +693,7 @@ public class Tracker.Sparql.Query : Object {
sql.append (pattern_sql.str);
sql.append (")");
- var result_set = exec_sql (sql.str);
+ var cursor = exec_sql_cursor (sql.str, null, null, false);
this.delete_statements = delete_statements;
@@ -704,33 +704,29 @@ public class Tracker.Sparql.Query : Object {
}
// iterate over all solutions
- if (result_set != null) {
- do {
- // blank nodes in construct templates are per solution
-
- uuid_generate (base_uuid);
- blank_nodes = new HashTable<string,string>.full (str_hash, str_equal, g_free, g_free);
-
- // get values of all variables to be bound
- var var_value_map = new HashTable<string,string>.full (str_hash, str_equal, g_free, g_free);
- int var_idx = 0;
- foreach (var variable in context.var_set.get_keys ()) {
- Value value;
- result_set._get_value (var_idx++, out value);
- var_value_map.insert (variable.name, get_string_for_value (value));
- }
+ while (cursor.next ()) {
+ // blank nodes in construct templates are per solution
- set_location (template_location);
+ uuid_generate (base_uuid);
+ blank_nodes = new HashTable<string,string>.full (str_hash, str_equal, g_free, g_free);
- // iterate over each triple in the template
- parse_construct_triples_block (var_value_map);
+ // get values of all variables to be bound
+ var var_value_map = new HashTable<string,string>.full (str_hash, str_equal, g_free, g_free);
+ int var_idx = 0;
+ foreach (var variable in context.var_set.get_keys ()) {
+ var_value_map.insert (variable.name, cursor.get_string (var_idx++));
+ }
- if (blank) {
- update_blank_nodes.add ((owned) blank_nodes);
- }
+ set_location (template_location);
+
+ // iterate over each triple in the template
+ parse_construct_triples_block (var_value_map);
+
+ if (blank) {
+ update_blank_nodes.add ((owned) blank_nodes);
+ }
- Data.update_buffer_might_flush ();
- } while (result_set.iter_next ());
+ Data.update_buffer_might_flush ();
}
if (!data) {
@@ -962,21 +958,6 @@ public class Tracker.Sparql.Query : Object {
}
}
- static string? get_string_for_value (Value value)
- {
- if (value.type () == typeof (int)) {
- return value.get_int ().to_string ();
- } else if (value.type () == typeof (int64)) {
- return value.get_int64 ().to_string ();
- } else if (value.type () == typeof (double)) {
- return value.get_double ().to_string ();
- } else if (value.type () == typeof (string)) {
- return value.get_string ();
- } else {
- return null;
- }
- }
-
[CCode (cname = "uuid_generate")]
public extern static void uuid_generate ([CCode (array_length = false)] uchar[] uuid);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]