[tracker] Performance improvement for the cursor API
- From: Philip Van Hoof <pvanhoof src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [tracker] Performance improvement for the cursor API
- Date: Fri, 28 Aug 2009 09:11:44 +0000 (UTC)
commit 7845cc2d32a1542e110bd50f438a49332c69a835
Author: Philip Van Hoof <philip codeminded be>
Date: Fri Aug 28 11:10:58 2009 +0200
Performance improvement for the cursor API
src/libtracker-db/tracker-db-backup.c | 18 ++++--------
src/libtracker-db/tracker-db-interface-sqlite.c | 35 ++++++++++++++++++++++-
src/libtracker-db/tracker-db-interface.c | 25 ++++++++++++++++
src/libtracker-db/tracker-db-interface.h | 14 +++++++++
4 files changed, 79 insertions(+), 13 deletions(-)
---
diff --git a/src/libtracker-db/tracker-db-backup.c b/src/libtracker-db/tracker-db-backup.c
index 5905b69..d80f6cb 100644
--- a/src/libtracker-db/tracker-db-backup.c
+++ b/src/libtracker-db/tracker-db-backup.c
@@ -274,8 +274,6 @@ tracker_db_backup_sync_fts (void)
TrackerDBInterface *iface;
TrackerDBStatement *stmt;
TrackerDBCursor *cursor;
- GValue id = { 0 };
- GValue text = { 0 };
TrackerClass *prop_class;
gchar *query;
@@ -314,22 +312,18 @@ tracker_db_backup_sync_fts (void)
if (cursor) {
while (tracker_db_cursor_iter_next (cursor)) {
- guint32 vid;
+ guint32 id;
+ const gchar *text;
- tracker_db_cursor_get_value (cursor, 0, &id);
- tracker_db_cursor_get_value (cursor, 1, &text);
-
- vid = (guint32) g_value_get_int (&id);
+ id = tracker_db_cursor_get_int (cursor, 0);
+ text = tracker_db_cursor_get_string (cursor, 1);
// TODO we need to retrieve all existing (FTS indexed) property values for
// this resource to properly support incremental FTS updates
// (like calling deleteTerms and then calling insertTerms)
- tracker_fts_update_init (vid);
- tracker_fts_update_text (vid, 0, g_value_get_string (&text));
-
- g_value_unset (&id);
- g_value_unset (&text);
+ tracker_fts_update_init (id);
+ tracker_fts_update_text (id, 0, text);
}
g_object_unref (cursor);
diff --git a/src/libtracker-db/tracker-db-interface-sqlite.c b/src/libtracker-db/tracker-db-interface-sqlite.c
index 08d09ff..5884481 100644
--- a/src/libtracker-db/tracker-db-interface-sqlite.c
+++ b/src/libtracker-db/tracker-db-interface-sqlite.c
@@ -42,7 +42,8 @@
#define TRACKER_DB_STATEMENT_SQLITE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), TRACKER_TYPE_DB_STATEMENT_SQLITE, TrackerDBStatementSqlitePrivate))
-#define TRACKER_DB_CURSOR_SQLITE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), TRACKER_TYPE_DB_CURSOR_SQLITE, TrackerDBCursorSqlitePrivate))
+#define TRACKER_DB_CURSOR_SQLITE_GET_PRIVATE_O(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), TRACKER_TYPE_DB_CURSOR_SQLITE, TrackerDBCursorSqlitePrivate))
+#define TRACKER_DB_CURSOR_SQLITE_GET_PRIVATE(o) (((TrackerDBCursorSqlite *)o)->priv)
typedef struct TrackerDBInterfaceSqlitePrivate TrackerDBInterfaceSqlitePrivate;
typedef struct TrackerDBStatementSqlitePrivate TrackerDBStatementSqlitePrivate;
@@ -55,6 +56,7 @@ typedef struct TrackerDBCursorSqliteClass TrackerDBCursorSqliteClass;
struct TrackerDBCursorSqlite {
GObject parent_instance;
+ TrackerDBCursorSqlitePrivate *priv;
};
struct TrackerDBCursorSqliteClass {
@@ -1074,6 +1076,32 @@ tracker_db_cursor_sqlite_get_value (TrackerDBCursor *cursor, guint column, GVal
}
+static gint
+tracker_db_cursor_sqlite_get_int (TrackerDBCursor *cursor, guint column)
+{
+ TrackerDBCursorSqlitePrivate *priv;
+ priv = TRACKER_DB_CURSOR_SQLITE_GET_PRIVATE (cursor);
+ return (gint) sqlite3_column_int (priv->stmt, column);
+}
+
+
+static gdouble
+tracker_db_cursor_sqlite_get_double (TrackerDBCursor *cursor, guint column)
+{
+ TrackerDBCursorSqlitePrivate *priv;
+ priv = TRACKER_DB_CURSOR_SQLITE_GET_PRIVATE (cursor);
+ return (gdouble) sqlite3_column_double (priv->stmt, column);
+}
+
+
+static const gchar*
+tracker_db_cursor_sqlite_get_string (TrackerDBCursor *cursor, guint column)
+{
+ TrackerDBCursorSqlitePrivate *priv;
+ priv = TRACKER_DB_CURSOR_SQLITE_GET_PRIVATE (cursor);
+ return (const gchar *) sqlite3_column_text (priv->stmt, column);
+}
+
static void
tracker_db_interface_sqlite_disconnect (TrackerDBInterface *db_interface)
{
@@ -1141,6 +1169,9 @@ tracker_db_cursor_sqlite_iface_init (TrackerDBCursorIface *iface)
iface->iter_next = tracker_db_cursor_sqlite_iter_next;
iface->get_n_columns = tracker_db_cursor_sqlite_get_n_columns;
iface->get_value = tracker_db_cursor_sqlite_get_value;
+ iface->get_int = tracker_db_cursor_sqlite_get_int;
+ iface->get_double = tracker_db_cursor_sqlite_get_double;
+ iface->get_string = tracker_db_cursor_sqlite_get_string;
}
static void
@@ -1151,6 +1182,8 @@ tracker_db_statement_sqlite_init (TrackerDBStatementSqlite *stmt)
static void
tracker_db_cursor_sqlite_init (TrackerDBCursorSqlite *cursor)
{
+ TrackerDBCursorSqlitePrivate *priv = TRACKER_DB_CURSOR_SQLITE_GET_PRIVATE_O (cursor);
+ cursor->priv = priv;
}
static void
diff --git a/src/libtracker-db/tracker-db-interface.c b/src/libtracker-db/tracker-db-interface.c
index 8ec1ee0..9f63df7 100644
--- a/src/libtracker-db/tracker-db-interface.c
+++ b/src/libtracker-db/tracker-db-interface.c
@@ -504,6 +504,31 @@ tracker_db_cursor_get_value (TrackerDBCursor *cursor, guint column, GValue *val
TRACKER_DB_CURSOR_GET_IFACE (cursor)->get_value (cursor, column, value);
}
+const gchar*
+tracker_db_cursor_get_string (TrackerDBCursor *cursor, guint column)
+{
+ g_return_if_fail (TRACKER_IS_DB_CURSOR (cursor));
+
+ return TRACKER_DB_CURSOR_GET_IFACE (cursor)->get_string (cursor, column);
+}
+
+gint
+tracker_db_cursor_get_int (TrackerDBCursor *cursor, guint column)
+{
+ g_return_if_fail (TRACKER_IS_DB_CURSOR (cursor));
+
+ return TRACKER_DB_CURSOR_GET_IFACE (cursor)->get_int (cursor, column);
+}
+
+gdouble
+tracker_db_cursor_get_double (TrackerDBCursor *cursor, guint column)
+{
+ g_return_if_fail (TRACKER_IS_DB_CURSOR (cursor));
+
+ return TRACKER_DB_CURSOR_GET_IFACE (cursor)->get_double (cursor, column);
+}
+
+
/* TrackerDBResultSet semiprivate API */
TrackerDBResultSet *
diff --git a/src/libtracker-db/tracker-db-interface.h b/src/libtracker-db/tracker-db-interface.h
index 99af0d9..cf59daf 100644
--- a/src/libtracker-db/tracker-db-interface.h
+++ b/src/libtracker-db/tracker-db-interface.h
@@ -181,6 +181,14 @@ struct TrackerDBCursorIface {
void (*get_value) (TrackerDBCursor *cursor,
guint column,
GValue *value);
+
+ const gchar* (*get_string) (TrackerDBCursor *cursor,
+ guint column);
+ gint (*get_int) (TrackerDBCursor *cursor,
+ guint column);
+ gdouble (*get_double) (TrackerDBCursor *cursor,
+ guint column);
+
};
/* Functions to deal with a cursor */
@@ -190,6 +198,12 @@ guint tracker_db_cursor_get_n_columns (TrackerDBCursor *cursor);
void tracker_db_cursor_get_value (TrackerDBCursor *cursor,
guint column,
GValue *value);
+const gchar* tracker_db_cursor_get_string (TrackerDBCursor *cursor,
+ guint column);
+gint tracker_db_cursor_get_int (TrackerDBCursor *cursor,
+ guint column);
+gdouble tracker_db_cursor_get_double (TrackerDBCursor *cursor,
+ guint column);
G_END_DECLS
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]