[tracker/perf: 3/4] libtracker-data: Avoid querying for ID twice when inserting resources
- From: Jürg Billeter <juergbi src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [tracker/perf: 3/4] libtracker-data: Avoid querying for ID twice when inserting resources
- Date: Wed, 13 Jan 2010 16:44:54 +0000 (UTC)
commit de3b5d130a0c41a86e8558568a7b8c7e7ad76ea5
Author: Jürg Billeter <j bitron ch>
Date: Wed Dec 16 16:46:01 2009 +0100
libtracker-data: Avoid querying for ID twice when inserting resources
src/libtracker-data/tracker-data-update.c | 17 ++++++++++-------
1 files changed, 10 insertions(+), 7 deletions(-)
---
diff --git a/src/libtracker-data/tracker-data-update.c b/src/libtracker-data/tracker-data-update.c
index 44831d8..d620d02 100644
--- a/src/libtracker-data/tracker-data-update.c
+++ b/src/libtracker-data/tracker-data-update.c
@@ -374,7 +374,8 @@ query_resource_id (const gchar *uri)
}
static guint32
-ensure_resource_id (const gchar *uri)
+ensure_resource_id (const gchar *uri,
+ gboolean *create)
{
TrackerDBInterface *iface, *common;
TrackerDBStatement *stmt;
@@ -383,6 +384,10 @@ ensure_resource_id (const gchar *uri)
id = query_resource_id (uri);
+ if (create) {
+ *create = (id == 0);
+ }
+
if (id == 0) {
/* object resource not yet in the database */
common = tracker_db_manager_get_db_interface ();
@@ -502,7 +507,7 @@ tracker_data_resource_buffer_flush (GError **error)
/* remove entry from rdf:type table */
stmt = tracker_db_interface_create_statement (iface, "DELETE FROM \"rdfs:Resource_rdf:type\" WHERE ID = ? AND \"rdf:type\" = ?");
tracker_db_statement_bind_int (stmt, 0, resource_buffer->id);
- tracker_db_statement_bind_int (stmt, 1, ensure_resource_id (tracker_class_get_uri (table->class)));
+ tracker_db_statement_bind_int (stmt, 1, ensure_resource_id (tracker_class_get_uri (table->class), NULL));
tracker_db_statement_execute (stmt, &actual_error);
g_object_unref (stmt);
@@ -748,7 +753,7 @@ cache_create_service_decomposed (TrackerClass *cl,
cache_insert_row (cl);
- g_value_set_int (&gvalue, ensure_resource_id (tracker_class_get_uri (cl)));
+ g_value_set_int (&gvalue, ensure_resource_id (tracker_class_get_uri (cl), NULL));
cache_insert_value ("rdfs:Resource_rdf:type", "rdf:type", &gvalue, TRUE, FALSE);
tracker_class_set_count (cl, tracker_class_get_count (cl) + 1);
@@ -1004,7 +1009,7 @@ string_to_gvalue (const gchar *value,
g_value_set_int (gvalue, tracker_string_to_date (value));
break;
case TRACKER_PROPERTY_TYPE_RESOURCE:
- object_id = ensure_resource_id (value);
+ object_id = ensure_resource_id (value, NULL);
g_value_init (gvalue, G_TYPE_UINT);
g_value_set_uint (gvalue, object_id);
break;
@@ -1390,11 +1395,9 @@ tracker_data_insert_statement_common (const gchar *graph,
/* subject not yet in cache, retrieve or create ID */
resource_buffer = g_slice_new0 (TrackerDataUpdateBufferResource);
resource_buffer->subject = g_strdup (subject);
- resource_buffer->id = query_resource_id (resource_buffer->subject);
- resource_buffer->create = (resource_buffer->id == 0);
+ resource_buffer->id = ensure_resource_id (resource_buffer->subject, &resource_buffer->create);
resource_buffer->fts_updated = FALSE;
if (resource_buffer->create) {
- resource_buffer->id = ensure_resource_id (resource_buffer->subject);
resource_buffer->types = g_ptr_array_new ();
} else {
resource_buffer->types = tracker_data_query_rdf_type (resource_buffer->id);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]