[tracker/lru-stmt-cache: 3/7] libtracker-data: Different LRU-cache for INSERT/DELETE v. SELECT
- From: Philip Van Hoof <pvanhoof src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [tracker/lru-stmt-cache: 3/7] libtracker-data: Different LRU-cache for INSERT/DELETE v. SELECT
- Date: Thu, 23 Sep 2010 08:50:42 +0000 (UTC)
commit 32a4b6da4484c12cc925c8f94a59ad78c245e315
Author: Philip Van Hoof <philip codeminded be>
Date: Wed Sep 22 13:23:30 2010 +0200
libtracker-data: Different LRU-cache for INSERT/DELETE v. SELECT
src/libtracker-data/libtracker-data.vapi | 9 ++-
src/libtracker-data/tracker-data-manager.c | 24 ++--
src/libtracker-data/tracker-data-query.c | 4 +-
src/libtracker-data/tracker-data-update.c | 40 +++---
src/libtracker-data/tracker-db-interface-sqlite.c | 26 +++--
src/libtracker-data/tracker-db-interface.h | 139 +++++++++++----------
src/libtracker-data/tracker-db-manager.c | 2 +-
src/libtracker-data/tracker-sparql-pattern.vala | 8 +-
src/libtracker-data/tracker-sparql-query.vala | 2 +-
9 files changed, 140 insertions(+), 114 deletions(-)
---
diff --git a/src/libtracker-data/libtracker-data.vapi b/src/libtracker-data/libtracker-data.vapi
index 7af138c..98228b5 100644
--- a/src/libtracker-data/libtracker-data.vapi
+++ b/src/libtracker-data/libtracker-data.vapi
@@ -34,10 +34,17 @@ namespace Tracker {
INTERRUPTED
}
+ [CCode (cprefix = "TRACKER_DB_STATEMENT_CACHE_TYPE_", cheader_filename = "libtracker-data/tracker-db-interface.h")]
+ public enum DBStatementCacheType {
+ SELECT,
+ UPDATE,
+ NONE
+ }
+
[CCode (cheader_filename = "libtracker-data/tracker-db-interface.h")]
public interface DBInterface : GLib.Object {
[PrintfFormat]
- public abstract DBStatement create_statement (bool cache_stmt, ...) throws DBInterfaceError;
+ public abstract DBStatement create_statement (DBStatementCacheType cache_type, ...) throws DBInterfaceError;
}
[CCode (cheader_filename = "libtracker-data/tracker-data-update.h")]
diff --git a/src/libtracker-data/tracker-data-manager.c b/src/libtracker-data/tracker-data-manager.c
index f1a2db9..74d687d 100644
--- a/src/libtracker-data/tracker-data-manager.c
+++ b/src/libtracker-data/tracker-data-manager.c
@@ -1445,7 +1445,7 @@ class_add_super_classes_from_db (TrackerDBInterface *iface,
TrackerDBCursor *cursor;
GError *error = NULL;
- stmt = tracker_db_interface_create_statement (iface, TRUE, &error,
+ stmt = tracker_db_interface_create_statement (iface, TRACKER_DB_STATEMENT_CACHE_TYPE_SELECT, &error,
"SELECT (SELECT Uri FROM Resource WHERE ID = \"rdfs:subClassOf\") "
"FROM \"rdfs:Class_rdfs:subClassOf\" "
"WHERE ID = (SELECT ID FROM Resource WHERE Uri = ?)");
@@ -1483,7 +1483,7 @@ class_add_domain_indexes_from_db (TrackerDBInterface *iface,
TrackerDBCursor *cursor;
GError *error = NULL;
- stmt = tracker_db_interface_create_statement (iface, TRUE, &error,
+ stmt = tracker_db_interface_create_statement (iface, TRACKER_DB_STATEMENT_CACHE_TYPE_SELECT, &error,
"SELECT (SELECT Uri FROM Resource WHERE ID = \"tracker:domainIndex\") "
"FROM \"rdfs:Class_tracker:domainIndex\" "
"WHERE ID = (SELECT ID FROM Resource WHERE Uri = ?)");
@@ -1521,7 +1521,7 @@ property_add_super_properties_from_db (TrackerDBInterface *iface,
TrackerDBCursor *cursor;
GError *error = NULL;
- stmt = tracker_db_interface_create_statement (iface, TRUE, &error,
+ stmt = tracker_db_interface_create_statement (iface, TRACKER_DB_STATEMENT_CACHE_TYPE_SELECT, &error,
"SELECT (SELECT Uri FROM Resource WHERE ID = \"rdfs:subPropertyOf\") "
"FROM \"rdf:Property_rdfs:subPropertyOf\" "
"WHERE ID = (SELECT ID FROM Resource WHERE Uri = ?)");
@@ -1560,7 +1560,7 @@ db_get_static_data (TrackerDBInterface *iface)
guint n_classes, i;
GError *error = NULL;
- stmt = tracker_db_interface_create_statement (iface, TRUE, &error,
+ stmt = tracker_db_interface_create_statement (iface, TRACKER_DB_STATEMENT_CACHE_TYPE_SELECT, &error,
"SELECT (SELECT Uri FROM Resource WHERE ID = \"tracker:Ontology\".ID), "
"\"nao:lastModified\" "
"FROM \"tracker:Ontology\"");
@@ -1598,7 +1598,7 @@ db_get_static_data (TrackerDBInterface *iface)
g_clear_error (&error);
}
- stmt = tracker_db_interface_create_statement (iface, TRUE, &error,
+ stmt = tracker_db_interface_create_statement (iface, TRACKER_DB_STATEMENT_CACHE_TYPE_SELECT, &error,
"SELECT (SELECT Uri FROM Resource WHERE ID = \"tracker:Namespace\".ID), "
"\"tracker:prefix\" "
"FROM \"tracker:Namespace\"");
@@ -1636,7 +1636,7 @@ db_get_static_data (TrackerDBInterface *iface)
g_clear_error (&error);
}
- stmt = tracker_db_interface_create_statement (iface, TRUE, &error,
+ stmt = tracker_db_interface_create_statement (iface, TRACKER_DB_STATEMENT_CACHE_TYPE_SELECT, &error,
"SELECT \"rdfs:Class\".ID, "
"(SELECT Uri FROM Resource WHERE ID = \"rdfs:Class\".ID), "
"\"tracker:notify\" "
@@ -1690,7 +1690,7 @@ db_get_static_data (TrackerDBInterface *iface)
if (!g_str_has_prefix (tracker_class_get_name (class), "xsd:") &&
(tracker_db_manager_get_flags () & TRACKER_DB_MANAGER_READONLY) == 0) {
/* update statistics */
- stmt = tracker_db_interface_create_statement (iface, TRUE, &error,
+ stmt = tracker_db_interface_create_statement (iface, TRACKER_DB_STATEMENT_CACHE_TYPE_SELECT, &error,
"SELECT COUNT(1) FROM \"%s\"",
tracker_class_get_name (class));
@@ -1718,7 +1718,7 @@ db_get_static_data (TrackerDBInterface *iface)
g_clear_error (&error);
}
- stmt = tracker_db_interface_create_statement (iface, TRUE, &error,
+ stmt = tracker_db_interface_create_statement (iface, TRACKER_DB_STATEMENT_CACHE_TYPE_SELECT, &error,
"SELECT \"rdf:Property\".ID, (SELECT Uri FROM Resource WHERE ID = \"rdf:Property\".ID), "
"(SELECT Uri FROM Resource WHERE ID = \"rdfs:domain\"), "
"(SELECT Uri FROM Resource WHERE ID = \"rdfs:range\"), "
@@ -1901,7 +1901,7 @@ insert_uri_in_resource_table (TrackerDBInterface *iface,
TrackerDBStatement *stmt;
GError *error = NULL;
- stmt = tracker_db_interface_create_statement (iface, TRUE, &error,
+ stmt = tracker_db_interface_create_statement (iface, TRACKER_DB_STATEMENT_CACHE_TYPE_UPDATE, &error,
"INSERT "
"INTO Resource "
"(ID, Uri) "
@@ -2692,7 +2692,7 @@ get_new_service_id (TrackerDBInterface *iface)
iface = tracker_db_manager_get_db_interface ();
- stmt = tracker_db_interface_create_statement (iface, TRUE, &error,
+ stmt = tracker_db_interface_create_statement (iface, TRACKER_DB_STATEMENT_CACHE_TYPE_SELECT, &error,
"SELECT MAX(ID) AS A FROM Resource");
if (stmt) {
@@ -2975,7 +2975,7 @@ tracker_data_manager_init (TrackerDBManagerFlags flags,
* for all the ontology files in ontologies_dir whether the last-modified
* has changed since we dealt with the file last time. */
- stmt = tracker_db_interface_create_statement (iface, TRUE, &error,
+ stmt = tracker_db_interface_create_statement (iface, TRACKER_DB_STATEMENT_CACHE_TYPE_SELECT, &error,
"SELECT Resource.Uri, \"rdfs:Resource\".\"nao:lastModified\" FROM \"tracker:Ontology\""
"INNER JOIN Resource ON Resource.ID = \"tracker:Ontology\".ID "
"INNER JOIN \"rdfs:Resource\" ON \"tracker:Ontology\".ID = \"rdfs:Resource\".ID");
@@ -3072,7 +3072,7 @@ tracker_data_manager_init (TrackerDBManagerFlags flags,
if (update_nao) {
/* Update the nao:lastModified in the database */
- stmt = tracker_db_interface_create_statement (iface, TRUE, &error,
+ stmt = tracker_db_interface_create_statement (iface, TRACKER_DB_STATEMENT_CACHE_TYPE_UPDATE, &error,
"UPDATE \"rdfs:Resource\" SET \"nao:lastModified\"= ? "
"WHERE \"rdfs:Resource\".ID = "
"(SELECT Resource.ID FROM Resource INNER JOIN \"rdfs:Resource\" "
diff --git a/src/libtracker-data/tracker-data-query.c b/src/libtracker-data/tracker-data-query.c
index 6165608..9e5347a 100644
--- a/src/libtracker-data/tracker-data-query.c
+++ b/src/libtracker-data/tracker-data-query.c
@@ -47,7 +47,7 @@ tracker_data_query_rdf_type (gint id)
iface = tracker_db_manager_get_db_interface ();
- stmt = tracker_db_interface_create_statement (iface, TRUE, &error,
+ stmt = tracker_db_interface_create_statement (iface, TRACKER_DB_STATEMENT_CACHE_TYPE_SELECT, &error,
"SELECT (SELECT Uri FROM Resource WHERE ID = \"rdf:type\") "
"FROM \"rdfs:Resource_rdf:type\" "
"WHERE ID = ?");
@@ -106,7 +106,7 @@ tracker_data_query_resource_id (const gchar *uri)
iface = tracker_db_manager_get_db_interface ();
- stmt = tracker_db_interface_create_statement (iface, TRUE, &error,
+ stmt = tracker_db_interface_create_statement (iface, TRACKER_DB_STATEMENT_CACHE_TYPE_SELECT, &error,
"SELECT ID FROM Resource WHERE Uri = ?");
if (stmt) {
diff --git a/src/libtracker-data/tracker-data-update.c b/src/libtracker-data/tracker-data-update.c
index a124f6e..1f613e1 100644
--- a/src/libtracker-data/tracker-data-update.c
+++ b/src/libtracker-data/tracker-data-update.c
@@ -344,7 +344,7 @@ tracker_data_update_get_new_service_id (void)
iface = tracker_db_manager_get_db_interface ();
- stmt = tracker_db_interface_create_statement (iface, TRUE, &error,
+ stmt = tracker_db_interface_create_statement (iface, TRACKER_DB_STATEMENT_CACHE_TYPE_SELECT, &error,
"SELECT MAX(ID) AS A FROM Resource");
if (stmt) {
@@ -389,7 +389,7 @@ tracker_data_update_get_next_modseq (void)
temp_iface = tracker_db_manager_get_db_interface ();
- stmt = tracker_db_interface_create_statement (temp_iface, TRUE, &error,
+ stmt = tracker_db_interface_create_statement (temp_iface, TRACKER_DB_STATEMENT_CACHE_TYPE_SELECT, &error,
"SELECT MAX(\"tracker:modified\") AS A FROM \"rdfs:Resource\"");
if (stmt) {
@@ -565,7 +565,7 @@ ensure_resource_id (const gchar *uri,
iface = tracker_db_manager_get_db_interface ();
id = tracker_data_update_get_new_service_id ();
- stmt = tracker_db_interface_create_statement (iface, TRUE, &error,
+ stmt = tracker_db_interface_create_statement (iface, TRACKER_DB_STATEMENT_CACHE_TYPE_UPDATE, &error,
"INSERT INTO Resource (ID, Uri) VALUES (?, ?)");
if (stmt) {
@@ -661,12 +661,12 @@ tracker_data_resource_buffer_flush (GError **error)
if (table->delete_value) {
/* delete rows for multiple value properties */
- stmt = tracker_db_interface_create_statement (iface, TRUE, &actual_error,
+ stmt = tracker_db_interface_create_statement (iface, TRACKER_DB_STATEMENT_CACHE_TYPE_UPDATE, &actual_error,
"DELETE FROM \"%s\" WHERE ID = ? AND \"%s\" = ?",
table_name,
property->name);
} else if (property->date_time) {
- stmt = tracker_db_interface_create_statement (iface, TRUE, &actual_error,
+ stmt = tracker_db_interface_create_statement (iface, TRACKER_DB_STATEMENT_CACHE_TYPE_UPDATE, &actual_error,
"INSERT OR IGNORE INTO \"%s\" (ID, \"%s\", \"%s:localDate\", \"%s:localTime\", \"%s:graph\") VALUES (?, ?, ?, ?, ?)",
table_name,
property->name,
@@ -674,7 +674,7 @@ tracker_data_resource_buffer_flush (GError **error)
property->name,
property->name);
} else {
- stmt = tracker_db_interface_create_statement (iface, TRUE, &actual_error,
+ stmt = tracker_db_interface_create_statement (iface, TRACKER_DB_STATEMENT_CACHE_TYPE_UPDATE, &actual_error,
"INSERT OR IGNORE INTO \"%s\" (ID, \"%s\", \"%s:graph\") VALUES (?, ?, ?)",
table_name,
property->name,
@@ -708,7 +708,7 @@ tracker_data_resource_buffer_flush (GError **error)
} else {
if (table->delete_row) {
/* remove entry from rdf:type table */
- stmt = tracker_db_interface_create_statement (iface, TRUE, &actual_error,
+ stmt = tracker_db_interface_create_statement (iface, TRACKER_DB_STATEMENT_CACHE_TYPE_UPDATE, &actual_error,
"DELETE FROM \"rdfs:Resource_rdf:type\" WHERE ID = ? AND \"rdf:type\" = ?");
if (stmt) {
@@ -728,7 +728,7 @@ tracker_data_resource_buffer_flush (GError **error)
}
/* remove row from class table */
- stmt = tracker_db_interface_create_statement (iface, TRUE, &actual_error,
+ stmt = tracker_db_interface_create_statement (iface, TRACKER_DB_STATEMENT_CACHE_TYPE_UPDATE, &actual_error,
"DELETE FROM \"%s\" WHERE ID = ?", table_name);
if (stmt) {
@@ -748,7 +748,7 @@ tracker_data_resource_buffer_flush (GError **error)
if (table->insert) {
if (strcmp (table_name, "rdfs:Resource") == 0) {
/* ensure we have a row for the subject id */
- stmt = tracker_db_interface_create_statement (iface, TRUE, &actual_error,
+ stmt = tracker_db_interface_create_statement (iface, TRACKER_DB_STATEMENT_CACHE_TYPE_UPDATE, &actual_error,
"INSERT OR IGNORE INTO \"%s\" (ID, \"tracker:added\", \"tracker:modified\", Available) VALUES (?, ?, ?, 1)",
table_name);
@@ -762,7 +762,7 @@ tracker_data_resource_buffer_flush (GError **error)
}
} else {
/* ensure we have a row for the subject id */
- stmt = tracker_db_interface_create_statement (iface, TRUE, &actual_error,
+ stmt = tracker_db_interface_create_statement (iface, TRACKER_DB_STATEMENT_CACHE_TYPE_UPDATE, &actual_error,
"INSERT OR IGNORE INTO \"%s\" (ID) VALUES (?)",
table_name);
@@ -803,7 +803,7 @@ tracker_data_resource_buffer_flush (GError **error)
g_string_append (sql, " WHERE ID = ?");
- stmt = tracker_db_interface_create_statement (iface, TRUE, &actual_error,
+ stmt = tracker_db_interface_create_statement (iface, TRACKER_DB_STATEMENT_CACHE_TYPE_UPDATE, &actual_error,
"%s", sql->str);
g_string_free (sql, TRUE);
@@ -1203,7 +1203,7 @@ get_property_values (TrackerProperty *property)
iface = tracker_db_manager_get_db_interface ();
- stmt = tracker_db_interface_create_statement (iface, TRUE, &error,
+ stmt = tracker_db_interface_create_statement (iface, TRACKER_DB_STATEMENT_CACHE_TYPE_SELECT, &error,
"SELECT \"%s\" FROM \"%s\" WHERE ID = ?",
field_name, table_name);
@@ -1608,7 +1608,7 @@ cache_delete_resource_type (TrackerClass *class,
/* retrieve all subclasses we need to remove from the subject
* before we can remove the class specified as object of the statement */
- stmt = tracker_db_interface_create_statement (iface, TRUE, &error,
+ stmt = tracker_db_interface_create_statement (iface, TRACKER_DB_STATEMENT_CACHE_TYPE_SELECT, &error,
"SELECT (SELECT Uri FROM Resource WHERE ID = \"rdfs:Class_rdfs:subClassOf\".ID) "
"FROM \"rdfs:Resource_rdf:type\" INNER JOIN \"rdfs:Class_rdfs:subClassOf\" ON (\"rdf:type\" = \"rdfs:Class_rdfs:subClassOf\".ID) "
"WHERE \"rdfs:Resource_rdf:type\".ID = ? AND \"rdfs:subClassOf\" = (SELECT ID FROM Resource WHERE Uri = ?)");
@@ -2346,7 +2346,7 @@ tracker_data_delete_resource_description (const gchar *graph,
/* DROP GRAPH <url> - url here is nie:url */
- stmt = tracker_db_interface_create_statement (iface, TRUE, &actual_error,
+ stmt = tracker_db_interface_create_statement (iface, TRACKER_DB_STATEMENT_CACHE_TYPE_SELECT, &actual_error,
"SELECT ID, (SELECT Uri FROM Resource WHERE ID = \"nie:DataObject\".ID) FROM \"nie:DataObject\" WHERE \"nie:DataObject\".\"nie:url\" = ?");
if (stmt) {
@@ -2372,7 +2372,7 @@ tracker_data_delete_resource_description (const gchar *graph,
properties = tracker_ontologies_get_properties (&n_props);
- stmt = tracker_db_interface_create_statement (iface, TRUE, &actual_error,
+ stmt = tracker_db_interface_create_statement (iface, TRACKER_DB_STATEMENT_CACHE_TYPE_SELECT, &actual_error,
"SELECT (SELECT Uri FROM Resource WHERE ID = \"rdf:type\") FROM \"rdfs:Resource_rdf:type\" WHERE ID = ?");
if (stmt) {
@@ -2429,7 +2429,8 @@ tracker_data_delete_resource_description (const gchar *graph,
single_result = NULL;
if (!first) {
g_string_append_printf (sql, " FROM \"%s\" WHERE ID = ?", tracker_class_get_name (class));
- stmt = tracker_db_interface_create_statement (iface, TRUE, &actual_error, "%s", sql->str);
+ stmt = tracker_db_interface_create_statement (iface, TRACKER_DB_STATEMENT_CACHE_TYPE_SELECT,
+ &actual_error, "%s", sql->str);
if (stmt) {
tracker_db_statement_bind_int (stmt, 0, resource_id);
@@ -2494,7 +2495,8 @@ tracker_data_delete_resource_description (const gchar *graph,
" FROM \"%s\" WHERE ID = ?",
tracker_property_get_table_name (property));
- stmt = tracker_db_interface_create_statement (iface, TRUE, &actual_error, "%s", sql->str);
+ stmt = tracker_db_interface_create_statement (iface, TRACKER_DB_STATEMENT_CACHE_TYPE_SELECT,
+ &actual_error, "%s", sql->str);
if (stmt) {
tracker_db_statement_bind_int (stmt, 0, resource_id);
@@ -2726,7 +2728,7 @@ ontology_transaction_end (GList *ontology_queue,
* db. See tracker-data-manager.c for more info. */
last_mod = (gint) tracker_ontology_get_last_modified (ontology);
- stmt = tracker_db_interface_create_statement (iface, TRUE, &error,
+ stmt = tracker_db_interface_create_statement (iface, TRACKER_DB_STATEMENT_CACHE_TYPE_UPDATE, &error,
"UPDATE \"rdfs:Resource\" SET \"nao:lastModified\"= ? "
"WHERE \"rdfs:Resource\".ID = "
"(SELECT Resource.ID FROM Resource INNER JOIN \"rdfs:Resource\" "
@@ -2834,7 +2836,7 @@ tracker_data_replay_journal (GHashTable *classes,
iface = tracker_db_manager_get_db_interface ();
- stmt = tracker_db_interface_create_statement (iface, TRUE, &new_error,
+ stmt = tracker_db_interface_create_statement (iface, TRACKER_DB_STATEMENT_CACHE_TYPE_UPDATE, &new_error,
"INSERT "
"INTO Resource "
"(ID, Uri) "
diff --git a/src/libtracker-data/tracker-db-interface-sqlite.c b/src/libtracker-data/tracker-db-interface-sqlite.c
index e6a5d66..a43e473 100644
--- a/src/libtracker-data/tracker-db-interface-sqlite.c
+++ b/src/libtracker-data/tracker-db-interface-sqlite.c
@@ -69,7 +69,8 @@ struct TrackerDBInterface {
gboolean pending;
GAsyncReadyCallback outstanding_callback;
- TrackerDBStatementLru stmt_lru;
+ TrackerDBStatementLru select_stmt_lru;
+ TrackerDBStatementLru update_stmt_lru;
};
struct TrackerDBInterfaceClass {
@@ -829,13 +830,13 @@ add_row (TrackerDBResultSet *result_set,
TrackerDBStatement *
-tracker_db_interface_create_statement (TrackerDBInterface *db_interface,
- gboolean cache_stmt,
- GError **error,
- const gchar *query,
+tracker_db_interface_create_statement (TrackerDBInterface *db_interface,
+ TrackerDBStatementCacheType cache_type,
+ GError **error,
+ const gchar *query,
...)
{
- TrackerDBStatementLru *stmt_lru = &db_interface->stmt_lru;
+ TrackerDBStatementLru *stmt_lru;
TrackerDBStatement *stmt;
va_list args;
gchar *full_query;
@@ -847,13 +848,20 @@ tracker_db_interface_create_statement (TrackerDBInterface *db_interface,
full_query = g_strdup_vprintf (query, args);
va_end (args);
- if (cache_stmt) {
+ if (cache_type != TRACKER_DB_STATEMENT_CACHE_TYPE_NONE) {
stmt = g_hash_table_lookup (db_interface->dynamic_statements, full_query);
if (stmt && stmt->stmt_is_sunk) {
/* prepared statement is still in use, create new one */
stmt = NULL;
}
+
+ if (cache_type == TRACKER_DB_STATEMENT_CACHE_TYPE_UPDATE) {
+ stmt_lru = &db_interface->update_stmt_lru;
+ } else {
+ stmt_lru = &db_interface->select_stmt_lru;
+ }
+
} else {
stmt = NULL;
}
@@ -888,7 +896,7 @@ tracker_db_interface_create_statement (TrackerDBInterface *db_interface,
stmt = tracker_db_statement_sqlite_new (db_interface, sqlite_stmt);
- if (cache_stmt) {
+ if (cache_type != TRACKER_DB_STATEMENT_CACHE_TYPE_NONE) {
/* use replace instead of insert to make sure we store the string that
belongs to the right sqlite statement to ensure the lifetime of the string
matches the statement */
@@ -942,7 +950,7 @@ tracker_db_interface_create_statement (TrackerDBInterface *db_interface,
g_free (full_query);
- return cache_stmt ? g_object_ref (stmt) : stmt;
+ return (cache_type != TRACKER_DB_STATEMENT_CACHE_TYPE_NONE) ? g_object_ref (stmt) : stmt;
}
static TrackerDBResultSet *
diff --git a/src/libtracker-data/tracker-db-interface.h b/src/libtracker-data/tracker-db-interface.h
index 2c19892..577877f 100644
--- a/src/libtracker-data/tracker-db-interface.h
+++ b/src/libtracker-data/tracker-db-interface.h
@@ -69,6 +69,12 @@ typedef enum {
TRACKER_DB_INTERRUPTED
} TrackerDBInterfaceError;
+typedef enum {
+ TRACKER_DB_STATEMENT_CACHE_TYPE_SELECT,
+ TRACKER_DB_STATEMENT_CACHE_TYPE_UPDATE,
+ TRACKER_DB_STATEMENT_CACHE_TYPE_NONE
+} TrackerDBStatementCacheType;
+
typedef struct TrackerDBInterface TrackerDBInterface;
typedef struct TrackerDBInterfaceClass TrackerDBInterfaceClass;
typedef struct TrackerDBStatement TrackerDBStatement;
@@ -87,82 +93,81 @@ GType tracker_db_cursor_get_type (void);
GType tracker_db_result_set_get_type (void);
/* Functions to create queries/procedures */
-TrackerDBStatement * tracker_db_interface_create_statement (TrackerDBInterface *interface,
- gboolean cache_stmt,
- GError **error,
- const gchar *query,
+TrackerDBStatement * tracker_db_interface_create_statement (TrackerDBInterface *interface,
+ TrackerDBStatementCacheType cache_type,
+ GError **error,
+ const gchar *query,
...) G_GNUC_PRINTF (4, 5);
-TrackerDBResultSet * tracker_db_interface_execute_vquery (TrackerDBInterface *interface,
- GError **error,
- const gchar *query,
- va_list args);
-TrackerDBResultSet * tracker_db_interface_execute_query (TrackerDBInterface *interface,
- GError **error,
- const gchar *query,
+TrackerDBResultSet * tracker_db_interface_execute_vquery (TrackerDBInterface *interface,
+ GError **error,
+ const gchar *query,
+ va_list args);
+TrackerDBResultSet * tracker_db_interface_execute_query (TrackerDBInterface *interface,
+ GError **error,
+ const gchar *query,
...) G_GNUC_PRINTF (3, 4);
-
-gboolean tracker_db_interface_start_transaction (TrackerDBInterface *interface);
-gboolean tracker_db_interface_end_db_transaction (TrackerDBInterface *interface);
-void tracker_db_statement_bind_double (TrackerDBStatement *stmt,
- int index,
- double value);
-void tracker_db_statement_bind_int (TrackerDBStatement *stmt,
- int index,
- gint64 value);
-void tracker_db_statement_bind_null (TrackerDBStatement *stmt,
- int index);
-void tracker_db_statement_bind_text (TrackerDBStatement *stmt,
- int index,
- const gchar *value);
-TrackerDBResultSet * tracker_db_statement_execute (TrackerDBStatement *stmt,
- GError **error);
-TrackerDBCursor * tracker_db_statement_start_cursor (TrackerDBStatement *stmt,
- GError **error);
-TrackerDBCursor * tracker_db_statement_start_sparql_cursor(TrackerDBStatement *stmt,
- TrackerPropertyType *types,
- gint n_types,
- const gchar **variable_names,
- gint n_variable_names,
- GError **error);
+gboolean tracker_db_interface_start_transaction (TrackerDBInterface *interface);
+gboolean tracker_db_interface_end_db_transaction (TrackerDBInterface *interface);
+void tracker_db_statement_bind_double (TrackerDBStatement *stmt,
+ int index,
+ double value);
+void tracker_db_statement_bind_int (TrackerDBStatement *stmt,
+ int index,
+ gint64 value);
+void tracker_db_statement_bind_null (TrackerDBStatement *stmt,
+ int index);
+void tracker_db_statement_bind_text (TrackerDBStatement *stmt,
+ int index,
+ const gchar *value);
+TrackerDBResultSet * tracker_db_statement_execute (TrackerDBStatement *stmt,
+ GError **error);
+TrackerDBCursor * tracker_db_statement_start_cursor (TrackerDBStatement *stmt,
+ GError **error);
+TrackerDBCursor * tracker_db_statement_start_sparql_cursor(TrackerDBStatement *stmt,
+ TrackerPropertyType *types,
+ gint n_types,
+ const gchar **variable_names,
+ gint n_variable_names,
+ GError **error);
/* Semi private TrackerDBResultSet functions */
-TrackerDBResultSet * _tracker_db_result_set_new (guint cols);
-void _tracker_db_result_set_append (TrackerDBResultSet *result_set);
-void _tracker_db_result_set_set_value (TrackerDBResultSet *result_set,
- guint column,
- const GValue *value);
-void _tracker_db_result_set_get_value (TrackerDBResultSet *result_set,
- guint column,
- GValue *value);
+TrackerDBResultSet * _tracker_db_result_set_new (guint cols);
+void _tracker_db_result_set_append (TrackerDBResultSet *result_set);
+void _tracker_db_result_set_set_value (TrackerDBResultSet *result_set,
+ guint column,
+ const GValue *value);
+void _tracker_db_result_set_get_value (TrackerDBResultSet *result_set,
+ guint column,
+ GValue *value);
/* Functions to deal with the resultset */
-void tracker_db_result_set_get (TrackerDBResultSet *result_set,
+void tracker_db_result_set_get (TrackerDBResultSet *result_set,
...);
-void tracker_db_result_set_rewind (TrackerDBResultSet *result_set);
-gboolean tracker_db_result_set_iter_next (TrackerDBResultSet *result_set);
-guint tracker_db_result_set_get_n_columns (TrackerDBResultSet *result_set);
-guint tracker_db_result_set_get_n_rows (TrackerDBResultSet *result_set);
+void tracker_db_result_set_rewind (TrackerDBResultSet *result_set);
+gboolean tracker_db_result_set_iter_next (TrackerDBResultSet *result_set);
+guint tracker_db_result_set_get_n_columns (TrackerDBResultSet *result_set);
+guint tracker_db_result_set_get_n_rows (TrackerDBResultSet *result_set);
/* Functions to deal with a cursor */
-void tracker_db_cursor_rewind (TrackerDBCursor *cursor);
-gboolean tracker_db_cursor_iter_next (TrackerDBCursor *cursor,
- GCancellable *cancellable,
- GError **error);
-guint tracker_db_cursor_get_n_columns (TrackerDBCursor *cursor);
-const gchar* tracker_db_cursor_get_variable_name (TrackerDBCursor *cursor,
- guint column);
-TrackerSparqlValueType tracker_db_cursor_get_value_type (TrackerDBCursor *cursor,
- guint column);
-void tracker_db_cursor_get_value (TrackerDBCursor *cursor,
- guint column,
- GValue *value);
-const gchar* tracker_db_cursor_get_string (TrackerDBCursor *cursor,
- guint column,
- glong *length);
-gint64 tracker_db_cursor_get_int (TrackerDBCursor *cursor,
- guint column);
-gdouble tracker_db_cursor_get_double (TrackerDBCursor *cursor,
- guint column);
+void tracker_db_cursor_rewind (TrackerDBCursor *cursor);
+gboolean tracker_db_cursor_iter_next (TrackerDBCursor *cursor,
+ GCancellable *cancellable,
+ GError **error);
+guint tracker_db_cursor_get_n_columns (TrackerDBCursor *cursor);
+const gchar* tracker_db_cursor_get_variable_name (TrackerDBCursor *cursor,
+ guint column);
+TrackerSparqlValueType tracker_db_cursor_get_value_type (TrackerDBCursor *cursor,
+ guint column);
+void tracker_db_cursor_get_value (TrackerDBCursor *cursor,
+ guint column,
+ GValue *value);
+const gchar* tracker_db_cursor_get_string (TrackerDBCursor *cursor,
+ guint column,
+ glong *length);
+gint64 tracker_db_cursor_get_int (TrackerDBCursor *cursor,
+ guint column);
+gdouble tracker_db_cursor_get_double (TrackerDBCursor *cursor,
+ guint column);
G_END_DECLS
diff --git a/src/libtracker-data/tracker-db-manager.c b/src/libtracker-data/tracker-db-manager.c
index 122019c..9df44e9 100644
--- a/src/libtracker-data/tracker-db-manager.c
+++ b/src/libtracker-data/tracker-db-manager.c
@@ -895,7 +895,7 @@ tracker_db_manager_init (TrackerDBManagerFlags flags,
loaded = TRUE;
- stmt = tracker_db_interface_create_statement (dbs[i].iface, FALSE, NULL,
+ stmt = tracker_db_interface_create_statement (dbs[i].iface, TRACKER_DB_STATEMENT_CACHE_TYPE_NONE, NULL,
"PRAGMA integrity_check(1)");
if (stmt) {
diff --git a/src/libtracker-data/tracker-sparql-pattern.vala b/src/libtracker-data/tracker-sparql-pattern.vala
index 55a46fa..1c0f88a 100644
--- a/src/libtracker-data/tracker-sparql-pattern.vala
+++ b/src/libtracker-data/tracker-sparql-pattern.vala
@@ -37,7 +37,9 @@ namespace Tracker.Sparql {
DBResultSet result_set = null;
if (subject_id > 0) {
var iface = DBManager.get_db_interface ();
- var stmt = iface.create_statement (true, "SELECT (SELECT Uri FROM Resource WHERE ID = \"rdf:type\") FROM \"rdfs:Resource_rdf:type\" WHERE ID = ?");
+ var stmt = iface.create_statement (DBStatementCacheType.SELECT,
+ "SELECT (SELECT Uri FROM Resource WHERE ID = \"rdf:type\") " +
+ "FROM \"rdfs:Resource_rdf:type\" WHERE ID = ?");
stmt.bind_int (0, subject_id);
result_set = stmt.execute ();
}
@@ -84,7 +86,9 @@ namespace Tracker.Sparql {
var object_id = Data.query_resource_id (object);
var iface = DBManager.get_db_interface ();
- var stmt = iface.create_statement (true, "SELECT (SELECT Uri FROM Resource WHERE ID = \"rdf:type\") FROM \"rdfs:Resource_rdf:type\" WHERE ID = ?");
+ var stmt = iface.create_statement (DBStatementCacheType.SELECT,
+ "SELECT (SELECT Uri FROM Resource WHERE ID = \"rdf:type\") " +
+ "FROM \"rdfs:Resource_rdf:type\" WHERE ID = ?");
stmt.bind_int (0, object_id);
var result_set = stmt.execute ();
diff --git a/src/libtracker-data/tracker-sparql-query.vala b/src/libtracker-data/tracker-sparql-query.vala
index 5a561ef..21b03d9 100644
--- a/src/libtracker-data/tracker-sparql-query.vala
+++ b/src/libtracker-data/tracker-sparql-query.vala
@@ -490,7 +490,7 @@ public class Tracker.Sparql.Query : Object {
DBStatement prepare_for_exec (string sql) throws DBInterfaceError, Sparql.Error, DateError {
var iface = DBManager.get_db_interface ();
- var stmt = iface.create_statement (!has_regex, "%s", sql);
+ var stmt = iface.create_statement (has_regex ? DBStatementCacheType.NONE : DBStatementCacheType.SELECT, "%s", sql);
// set literals specified in query
int i = 0;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]