[tracker/db-cursor-bytes] libtracker-db: Add a "length" parameter to tracker_db_cursor_string
- From: Adrien Bustany <abustany src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [tracker/db-cursor-bytes] libtracker-db: Add a "length" parameter to tracker_db_cursor_string
- Date: Mon, 14 Jun 2010 20:50:32 +0000 (UTC)
commit b9878b6e0ba7e5c9ef16339488d6c00e81b15455
Author: Adrien Bustany <abustany gnome org>
Date: Mon Jun 14 12:16:43 2010 -0400
libtracker-db: Add a "length" parameter to tracker_db_cursor_string
This commit adds a "length" parameter to tracker_db_cursor_string, so
that the client can know the length of the string, without needing to
call strlen. The function internally used to obtain the length can be
faster than strlen.
This commit also port existing components to the new prototype.
src/libtracker-data/tracker-data-manager.c | 24 +++++++++++-----------
src/libtracker-data/tracker-data-query.c | 2 +-
src/libtracker-db/tracker-db-interface-sqlite.c | 11 ++++++++-
src/libtracker-db/tracker-db-interface.h | 3 +-
src/libtracker-db/tracker-db-manager.c | 2 +-
src/tracker-store/tracker-resources.c | 2 +-
6 files changed, 26 insertions(+), 18 deletions(-)
---
diff --git a/src/libtracker-data/tracker-data-manager.c b/src/libtracker-data/tracker-data-manager.c
index a88fedd..40c3730 100644
--- a/src/libtracker-data/tracker-data-manager.c
+++ b/src/libtracker-data/tracker-data-manager.c
@@ -1215,7 +1215,7 @@ class_add_super_classes_from_db (TrackerDBInterface *iface,
TrackerClass *super_class;
const gchar *super_class_uri;
- super_class_uri = tracker_db_cursor_get_string (cursor, 0);
+ super_class_uri = tracker_db_cursor_get_string (cursor, 0, NULL);
super_class = tracker_ontologies_get_class_by_uri (super_class_uri);
tracker_class_add_super_class (class, super_class);
}
@@ -1252,7 +1252,7 @@ property_add_super_properties_from_db (TrackerDBInterface *iface,
TrackerProperty *super_property;
const gchar *super_property_uri;
- super_property_uri = tracker_db_cursor_get_string (cursor, 0);
+ super_property_uri = tracker_db_cursor_get_string (cursor, 0, NULL);
super_property = tracker_ontologies_get_property_by_uri (super_property_uri);
tracker_property_add_super_property (property, super_property);
}
@@ -1287,7 +1287,7 @@ db_get_static_data (TrackerDBInterface *iface)
ontology = tracker_ontology_new ();
- uri = tracker_db_cursor_get_string (cursor, 0);
+ uri = tracker_db_cursor_get_string (cursor, 0, NULL);
last_mod = (time_t) tracker_db_cursor_get_int (cursor, 1);
tracker_ontology_set_is_new (ontology, FALSE);
@@ -1324,8 +1324,8 @@ db_get_static_data (TrackerDBInterface *iface)
namespace = tracker_namespace_new ();
- uri = tracker_db_cursor_get_string (cursor, 0);
- prefix = tracker_db_cursor_get_string (cursor, 1);
+ uri = tracker_db_cursor_get_string (cursor, 0, NULL);
+ prefix = tracker_db_cursor_get_string (cursor, 1, NULL);
tracker_namespace_set_is_new (namespace, FALSE);
tracker_namespace_set_uri (namespace, uri);
@@ -1368,7 +1368,7 @@ db_get_static_data (TrackerDBInterface *iface)
class = tracker_class_new ();
id = tracker_db_cursor_get_int (cursor, 0);
- uri = tracker_db_cursor_get_string (cursor, 1);
+ uri = tracker_db_cursor_get_string (cursor, 1, NULL);
tracker_db_cursor_get_value (cursor, 2, &value);
@@ -1455,9 +1455,9 @@ db_get_static_data (TrackerDBInterface *iface)
property = tracker_property_new ();
id = tracker_db_cursor_get_int (cursor, 0);
- uri = tracker_db_cursor_get_string (cursor, 1);
- domain_uri = tracker_db_cursor_get_string (cursor, 2);
- range_uri = tracker_db_cursor_get_string (cursor, 3);
+ uri = tracker_db_cursor_get_string (cursor, 1, NULL);
+ domain_uri = tracker_db_cursor_get_string (cursor, 2, NULL);
+ range_uri = tracker_db_cursor_get_string (cursor, 3, NULL);
tracker_db_cursor_get_value (cursor, 4, &value);
@@ -1480,7 +1480,7 @@ db_get_static_data (TrackerDBInterface *iface)
indexed = FALSE;
}
- secondary_index_uri = tracker_db_cursor_get_string (cursor, 6);
+ secondary_index_uri = tracker_db_cursor_get_string (cursor, 6, NULL);
tracker_db_cursor_get_value (cursor, 7, &value);
@@ -1545,7 +1545,7 @@ db_get_static_data (TrackerDBInterface *iface)
is_inverse_functional_property = FALSE;
}
- default_value = tracker_db_cursor_get_string (cursor, 13);
+ default_value = tracker_db_cursor_get_string (cursor, 13, NULL);
tracker_property_set_is_new (property, FALSE);
tracker_property_set_transient (property, transient);
@@ -2480,7 +2480,7 @@ tracker_data_manager_init (TrackerDBManagerFlags flags,
if (cursor) {
while (tracker_db_cursor_iter_next (cursor, &error)) {
- const gchar *onto_uri = tracker_db_cursor_get_string (cursor, 0);
+ const gchar *onto_uri = tracker_db_cursor_get_string (cursor, 0, NULL);
/* It's stored as an int in the db anyway. This is caused by
* string_to_gvalue in tracker-data-update.c */
gint value = tracker_db_cursor_get_int (cursor, 1);
diff --git a/src/libtracker-data/tracker-data-query.c b/src/libtracker-data/tracker-data-query.c
index fccb7a7..36c57fa 100644
--- a/src/libtracker-data/tracker-data-query.c
+++ b/src/libtracker-data/tracker-data-query.c
@@ -70,7 +70,7 @@ tracker_data_query_rdf_type (gint id)
const gchar *class_uri;
TrackerClass *cl;
- class_uri = tracker_db_cursor_get_string (cursor, 0);
+ class_uri = tracker_db_cursor_get_string (cursor, 0, NULL);
cl = tracker_ontologies_get_class_by_uri (class_uri);
if (!cl) {
g_critical ("Unknown class %s", class_uri);
diff --git a/src/libtracker-db/tracker-db-interface-sqlite.c b/src/libtracker-db/tracker-db-interface-sqlite.c
index 9051548..009bec1 100644
--- a/src/libtracker-db/tracker-db-interface-sqlite.c
+++ b/src/libtracker-db/tracker-db-interface-sqlite.c
@@ -1209,9 +1209,16 @@ tracker_db_cursor_get_double (TrackerDBCursor *cursor, guint column)
const gchar*
-tracker_db_cursor_get_string (TrackerDBCursor *cursor, guint column)
+tracker_db_cursor_get_string (TrackerDBCursor *cursor, guint column, gint *length)
{
- return (const gchar *) sqlite3_column_text (cursor->stmt, column);
+ if (length) {
+ sqlite3_value *val = sqlite3_column_value (cursor->stmt, column);
+
+ *length = sqlite3_value_bytes (val);
+ return (const gchar *) sqlite3_value_text (val);
+ } else {
+ return (const gchar *) sqlite3_column_text (cursor->stmt, column);
+ }
}
diff --git a/src/libtracker-db/tracker-db-interface.h b/src/libtracker-db/tracker-db-interface.h
index 5bb0117..0d2f255 100644
--- a/src/libtracker-db/tracker-db-interface.h
+++ b/src/libtracker-db/tracker-db-interface.h
@@ -145,7 +145,8 @@ void tracker_db_cursor_get_value (TrackerDBCursor
guint column,
GValue *value);
const gchar* tracker_db_cursor_get_string (TrackerDBCursor *cursor,
- guint column);
+ guint column,
+ gint *length);
gint tracker_db_cursor_get_int (TrackerDBCursor *cursor,
guint column);
gdouble tracker_db_cursor_get_double (TrackerDBCursor *cursor,
diff --git a/src/libtracker-db/tracker-db-manager.c b/src/libtracker-db/tracker-db-manager.c
index e777ed7..2d42da1 100644
--- a/src/libtracker-db/tracker-db-manager.c
+++ b/src/libtracker-db/tracker-db-manager.c
@@ -886,7 +886,7 @@ tracker_db_manager_init (TrackerDBManagerFlags flags,
if (cursor) {
if (tracker_db_cursor_iter_next (cursor, NULL)) {
- if (g_strcmp0 (tracker_db_cursor_get_string (cursor, 0), "ok") != 0) {
+ if (g_strcmp0 (tracker_db_cursor_get_string (cursor, 0, NULL), "ok") != 0) {
must_recreate = TRUE;
}
}
diff --git a/src/tracker-store/tracker-resources.c b/src/tracker-store/tracker-resources.c
index b233da9..43f173f 100644
--- a/src/tracker-store/tracker-resources.c
+++ b/src/tracker-store/tracker-resources.c
@@ -283,7 +283,7 @@ query_inthread (TrackerDBCursor *cursor, GError *error, gpointer user_data)
for (i = 0; i < cols && cont; i++, length++) {
const gchar *result_str;
- result_str = tracker_db_cursor_get_string (cursor, i);
+ result_str = tracker_db_cursor_get_string (cursor, i, NULL);
if (result_str == NULL)
result_str = "";
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]