tracker r1879 - in branches/indexer-split: . data src/libtracker-common src/trackerd
- From: ifrade svn gnome org
- To: svn-commits-list gnome org
- Subject: tracker r1879 - in branches/indexer-split: . data src/libtracker-common src/trackerd
- Date: Wed, 16 Jul 2008 16:42:13 +0000 (UTC)
Author: ifrade
Date: Wed Jul 16 16:42:13 2008
New Revision: 1879
URL: http://svn.gnome.org/viewvc/tracker?rev=1879&view=rev
Log:
Fixed metadata API
Modified:
branches/indexer-split/ChangeLog
branches/indexer-split/data/sqlite-stored-procs.sql
branches/indexer-split/src/libtracker-common/tracker-field.c
branches/indexer-split/src/libtracker-common/tracker-field.h
branches/indexer-split/src/trackerd/tracker-db.c
branches/indexer-split/src/trackerd/tracker-metadata.c
Modified: branches/indexer-split/data/sqlite-stored-procs.sql
==============================================================================
--- branches/indexer-split/data/sqlite-stored-procs.sql (original)
+++ branches/indexer-split/data/sqlite-stored-procs.sql Wed Jul 16 16:42:13 2008
@@ -120,7 +120,7 @@
GetMetadataAliases SELECT distinct M.MetaName, M.ID from MetaDataTypes M, MetaDataChildren C where M.ID = C.ChildID and C.MetaDataID = ?;
GetMetadataAliasesForName SELECT distinct M.MetaName, M.ID from MetaDataTypes M, MetaDataChildren C where M.ID = C.ChildID and C.MetaDataID = (select ID from MetaDataTypes where MetaName = ?) union select M.MetaName, M.ID from MetaDataTypes M where M.MetaName = ?;
-SelectMetadataClasses SELECT DISTINCT MetaName FROM MetaDataTypes;
+SelectRegisteredClasses SELECT DISTINCT TypeName FROM ServiceTypes;
InsertMetadataType INSERT INTO MetaDataTypes (MetaName) Values (?);
Modified: branches/indexer-split/src/libtracker-common/tracker-field.c
==============================================================================
--- branches/indexer-split/src/libtracker-common/tracker-field.c (original)
+++ branches/indexer-split/src/libtracker-common/tracker-field.c Wed Jul 16 16:42:13 2008
@@ -119,6 +119,24 @@
G_DEFINE_TYPE (TrackerField, tracker_field, G_TYPE_OBJECT);
+const gchar *
+tracker_field_type_to_string (TrackerFieldType fieldtype)
+{
+ GType type;
+ GEnumClass *enum_class;
+ GEnumValue *enum_value;
+
+ type = tracker_field_type_get_type ();
+ enum_class = G_ENUM_CLASS (g_type_class_peek (type));
+ enum_value = g_enum_get_value (enum_class, fieldtype);
+
+ if (!enum_value) {
+ return NULL;
+ }
+
+ return enum_value->value_nick;
+}
+
static void
tracker_field_class_init (TrackerFieldClass *klass)
{
Modified: branches/indexer-split/src/libtracker-common/tracker-field.h
==============================================================================
--- branches/indexer-split/src/libtracker-common/tracker-field.h (original)
+++ branches/indexer-split/src/libtracker-common/tracker-field.h Wed Jul 16 16:42:13 2008
@@ -41,7 +41,10 @@
TRACKER_FIELD_TYPE_LINK,
} TrackerFieldType;
-GType tracker_field_type_get_type (void) G_GNUC_CONST;
+GType tracker_field_type_get_type (void) G_GNUC_CONST;
+const gchar *tracker_field_type_to_string (TrackerFieldType fieldtype);
+
+
#define TRACKER_TYPE_FIELD (tracker_field_get_type ())
#define TRACKER_TYPE_FIELD_TYPE (tracker_field_type_get_type ())
Modified: branches/indexer-split/src/trackerd/tracker-db.c
==============================================================================
--- branches/indexer-split/src/trackerd/tracker-db.c (original)
+++ branches/indexer-split/src/trackerd/tracker-db.c Wed Jul 16 16:42:13 2008
@@ -1701,29 +1701,30 @@
void
tracker_db_metadata_set_single (TrackerDBInterface *iface,
- const gchar *service,
- const gchar *id,
+ const gchar *service_type,
+ const gchar *service_id,
const gchar *key,
const gchar *value,
gboolean do_backup)
{
- gchar *array[1];
+ gchar *array[2];
g_return_if_fail (TRACKER_IS_DB_INTERFACE (iface));
- g_return_if_fail (service != NULL);
- g_return_if_fail (id != NULL);
+ g_return_if_fail (service_type != NULL);
+ g_return_if_fail (service_id != NULL);
g_return_if_fail (key != NULL);
g_return_if_fail (value != NULL);
array[0] = (gchar*) value;
+ array[1] = NULL;
- tracker_db_metadata_set (iface, service, id, key, array, do_backup);
+ tracker_db_metadata_set (iface, service_type, service_id, key, array, do_backup);
}
gchar *
tracker_db_metadata_set (TrackerDBInterface *iface,
- const gchar *service,
- const gchar *id,
+ const gchar *service_type,
+ const gchar *service_id,
const gchar *key,
gchar **values,
gboolean do_backup)
@@ -1739,12 +1740,12 @@
GString *str = NULL;
g_return_val_if_fail (TRACKER_IS_DB_INTERFACE (iface), NULL);
- g_return_val_if_fail (service != NULL, NULL);
- g_return_val_if_fail (id != NULL, NULL);
+ g_return_val_if_fail (service_type != NULL, NULL);
+ g_return_val_if_fail (service_id != NULL, NULL);
g_return_val_if_fail (key != NULL, NULL);
g_return_val_if_fail (values != NULL, NULL);
- if (strcmp (id, "0") == 0) {
+ if (strcmp (service_id, "0") == 0) {
return NULL;
}
@@ -1755,10 +1756,10 @@
return NULL;
}
- res_service = tracker_db_service_get_by_entity (iface, id);
+ res_service = tracker_db_service_get_by_entity (iface, service_id);
if (!res_service) {
- g_warning ("Service not found for id:'%s'", id);
+ g_warning ("Service not found for service_id:'%s'", service_id);
return NULL;
}
@@ -1776,12 +1777,12 @@
tracker_field_get_data_type (def) == TRACKER_FIELD_TYPE_FULLTEXT;
if (update_index) {
- old_value = tracker_db_metadata_get_delimited (iface, id, key);
+ old_value = tracker_db_metadata_get_delimited (iface, service_id, key);
}
/* delete old value if metadata does not support multiple values */
if (!tracker_field_get_multiple_values (def)) {
- tracker_db_metadata_delete (iface, service, id, key, FALSE);
+ tracker_db_metadata_delete (iface, service_type, service_id, key, FALSE);
}
switch (tracker_field_get_data_type (def)) {
@@ -1793,7 +1794,7 @@
tracker_db_exec_proc (iface,
"SetMetadataKeyword",
- id,
+ service_id,
tracker_field_get_id (def),
values[i],
NULL);
@@ -1801,9 +1802,9 @@
/* Backup non-embedded data for embedded services */
if (do_backup &&
!tracker_field_get_embedded (def) &&
- tracker_ontology_service_type_has_embedded (service)) {
+ tracker_ontology_service_type_has_embedded (service_type)) {
backup_non_embedded_metadata (iface,
- id,
+ service_id,
tracker_field_get_id (def),
values[i]);
}
@@ -1835,8 +1836,8 @@
/* Backup non-embedded data for embedded services */
if (do_backup &&
!tracker_field_get_embedded (def) &&
- tracker_ontology_service_type_has_embedded (service)) {
- backup_non_embedded_metadata (iface, id, tracker_field_get_id (def), values[i]);
+ tracker_ontology_service_type_has_embedded (service_type)) {
+ backup_non_embedded_metadata (iface, service_id, tracker_field_get_id (def), values[i]);
}
mvalue = tracker_parser_text_to_string (values[i],
@@ -1848,7 +1849,7 @@
tracker_field_get_delimited (def));
tracker_db_exec_proc (iface,
"SetMetadata",
- id,
+ service_id,
tracker_field_get_id (def),
mvalue,
values[i],
@@ -1864,7 +1865,7 @@
* blob or something else?
*/
db_save_full_text (iface,
- id,
+ service_id,
values[0],
strlen (values[0]));
new_value = values[0];
@@ -1882,9 +1883,9 @@
/* Backup non-embedded data for embedded services */
if (do_backup &&
!tracker_field_get_embedded (def) &&
- tracker_ontology_service_type_has_embedded (service)) {
+ tracker_ontology_service_type_has_embedded (service_type)) {
backup_non_embedded_metadata (iface,
- id,
+ service_id,
tracker_field_get_id (def),
values[i]);
}
@@ -1898,7 +1899,7 @@
tracker_field_get_delimited (def));
tracker_db_exec_proc (iface,
"SetMetadata",
- id,
+ service_id,
tracker_field_get_id (def),
mvalue,
values[i],
@@ -1916,16 +1917,16 @@
/* Backup non-embedded data for embedded services */
if (do_backup &&
!tracker_field_get_embedded (def) &&
- tracker_ontology_service_type_has_embedded (service)) {
+ tracker_ontology_service_type_has_embedded (service_type)) {
backup_non_embedded_metadata (iface,
- id,
+ service_id,
tracker_field_get_id (def),
values[i]);
}
tracker_db_exec_proc (iface,
"SetMetadata",
- id,
+ service_id,
tracker_field_get_id (def),
" ",
values[i],
@@ -1942,16 +1943,16 @@
/* Backup non-embedded data for embedded services */
if (do_backup &&
!tracker_field_get_embedded (def) &&
- tracker_ontology_service_type_has_embedded (service)) {
+ tracker_ontology_service_type_has_embedded (service_type)) {
backup_non_embedded_metadata (iface,
- id,
+ service_id,
tracker_field_get_id (def),
values[i]);
}
tracker_db_exec_proc (iface,
"SetMetadataNumeric",
- id,
+ service_id,
tracker_field_get_id (def),
values[i],
NULL);
@@ -1975,7 +1976,7 @@
tracker_db_exec_proc (iface,
"SetMetadataNumeric",
- id,
+ service_id,
tracker_field_get_id (def),
mvalue,
NULL);
@@ -1983,9 +1984,9 @@
/* backup non-embedded data for embedded services */
if (do_backup &&
!tracker_field_get_embedded (def) &&
- tracker_ontology_service_type_has_embedded (service)) {
+ tracker_ontology_service_type_has_embedded (service_type)) {
backup_non_embedded_metadata (iface,
- id,
+ service_id,
tracker_field_get_id (def),
mvalue);
}
@@ -2025,7 +2026,7 @@
"update Services set KeyMetadata%d = '%s' where id = %s",
key_field,
esc_value,
- id);
+ service_id);
g_free (esc_value);
}
@@ -2037,10 +2038,10 @@
*/
if (update_index) {
if (str) {
- update_metadata_index (id, res_service, def, old_value, str->str);
+ update_metadata_index (service_id, res_service, def, old_value, str->str);
g_string_free (str, TRUE);
} else {
- update_metadata_index (id, res_service, def, old_value, new_value);
+ update_metadata_index (service_id, res_service, def, old_value, new_value);
}
}
@@ -2878,24 +2879,30 @@
return id;
}
+/*
+ * Obtain the concrete service type name for the file id.
+ */
gchar *
tracker_db_service_get_by_entity (TrackerDBInterface *iface,
const gchar *id)
{
TrackerDBResultSet *result_set;
+ gint service_type_id;
gchar *result = NULL;
-
+
g_return_val_if_fail (TRACKER_IS_DB_INTERFACE (iface), NULL);
g_return_val_if_fail (id != NULL, NULL);
result_set = tracker_db_exec_proc (iface,
- "GetFileByID2",
+ "GetFileByID",
id,
NULL);
if (result_set) {
- tracker_db_result_set_get (result_set, 1, &result, -1);
+ tracker_db_result_set_get (result_set, 3, &service_type_id, -1);
g_object_unref (result_set);
+
+ result = tracker_ontology_get_service_type_by_id (service_type_id);
}
return result;
Modified: branches/indexer-split/src/trackerd/tracker-metadata.c
==============================================================================
--- branches/indexer-split/src/trackerd/tracker-metadata.c (original)
+++ branches/indexer-split/src/trackerd/tracker-metadata.c Wed Jul 16 16:42:13 2008
@@ -36,14 +36,6 @@
#include "tracker-db.h"
#include "tracker-marshal.h"
-static const gchar *types[] = {
- "index",
- "string",
- "numeric",
- "date",
- NULL
-};
-
G_DEFINE_TYPE(TrackerMetadata, tracker_metadata, G_TYPE_OBJECT)
static void
@@ -67,8 +59,8 @@
*/
gboolean
tracker_metadata_get (TrackerMetadata *object,
- const gchar *service,
- const gchar *id,
+ const gchar *service_type,
+ const gchar *uri,
gchar **keys,
gchar ***values,
GError **error)
@@ -85,32 +77,32 @@
request_id = tracker_dbus_get_next_request_id ();
- tracker_dbus_return_val_if_fail (service != NULL, FALSE, error);
+ tracker_dbus_return_val_if_fail (service_type != NULL, FALSE, error);
tracker_dbus_return_val_if_fail (keys != NULL, FALSE, error);
tracker_dbus_return_val_if_fail (g_strv_length (keys) > 0, FALSE, error);
tracker_dbus_return_val_if_fail (values != NULL, FALSE, error);
- if (!tracker_ontology_is_valid_service_type (service)) {
+ if (!tracker_ontology_is_valid_service_type (service_type)) {
tracker_dbus_request_failed (request_id,
error,
"Service '%s' is invalid or has not been implemented yet",
- service);
+ service_type);
return FALSE;
}
tracker_dbus_request_new (request_id,
"DBus request to get metadata values, "
- "service:'%s'",
- service);
+ "service type:'%s'",
+ service_type);
- iface = tracker_db_manager_get_db_interface_by_service (service);
+ iface = tracker_db_manager_get_db_interface_by_service (service_type);
- service_id = tracker_db_file_get_id_as_string (iface, service, id);
+ service_id = tracker_db_file_get_id_as_string (iface, service_type, uri);
if (!service_id) {
tracker_dbus_request_failed (request_id,
error,
"Service URI '%s' not found",
- id);
+ uri);
return FALSE;
}
@@ -120,7 +112,7 @@
tracker_dbus_request_failed (request_id,
error,
"Service information can not be found for entity '%s'",
- id);
+ uri);
return FALSE;
}
@@ -177,7 +169,7 @@
g_free (service_result);
/* Build SQL where clause */
- g_string_append_printf (sql, " WHERE S.ID = %s", id);
+ g_string_append_printf (sql, " WHERE S.ID = %s", service_id);
g_free (service_id);
query = g_string_free (sql, FALSE);
@@ -224,7 +216,7 @@
tracker_dbus_return_val_if_fail (values != NULL, FALSE, error);
tracker_dbus_return_val_if_fail (g_strv_length (keys) > 0, FALSE, error);
tracker_dbus_return_val_if_fail (g_strv_length (values) > 0, FALSE, error);
- tracker_dbus_return_val_if_fail (g_strv_length (keys) != g_strv_length (values), FALSE, error);
+ tracker_dbus_return_val_if_fail (g_strv_length (keys) == g_strv_length (values), FALSE, error);
tracker_dbus_request_new (request_id,
"DBus request to set metadata keys, "
@@ -293,10 +285,9 @@
gboolean *is_writable,
GError **error)
{
- TrackerDBInterface *iface;
- TrackerDBResultSet *result_set;
guint request_id;
- gint i;
+ TrackerField *def = NULL;
+ TrackerFieldType field_type;
request_id = tracker_dbus_get_next_request_id ();
@@ -305,26 +296,13 @@
tracker_dbus_return_val_if_fail (is_embedded != NULL, FALSE, error);
tracker_dbus_return_val_if_fail (is_writable != NULL, FALSE, error);
- /* Here it doesn't matter which one we ask, as long as it has common.db
- * attached. The service ones are cached connections, so we can use
- * those instead of asking for an individual-file connection (like what
- * the original code had) */
-
- /* iface = tracker_db_manager_get_db_interfaceX (TRACKER_DB_COMMON); */
-
- iface = tracker_db_manager_get_db_interface_by_service (TRACKER_DB_FOR_FILE_SERVICE);
-
tracker_dbus_request_new (request_id,
"DBus request to get metadata details, "
- "name:'%s'",
+ "metadata type:'%s'",
metadata);
- result_set = tracker_db_exec_proc (iface,
- "GetMetadataTypeInfo",
- metadata,
- NULL);
-
- if (!result_set) {
+ def = tracker_ontology_get_field_def (metadata);
+ if (!def) {
tracker_dbus_request_failed (request_id,
error,
"Metadata name '%s' is invalid or unrecognized",
@@ -332,14 +310,11 @@
return FALSE;
}
- tracker_db_result_set_get (result_set,
- 1, &i,
- 2, is_embedded,
- 3, is_writable,
- -1);
+ field_type = tracker_field_get_data_type (def);
- *type = g_strdup (types[i]);
- g_object_unref (result_set);
+ *type = g_strdup (tracker_field_type_to_string (field_type));
+ *is_embedded = tracker_field_get_embedded (def);
+ *is_writable = !tracker_field_get_embedded (def);
tracker_dbus_request_success (request_id);
@@ -412,7 +387,7 @@
iface = tracker_db_manager_get_db_interface_by_service (TRACKER_DB_FOR_FILE_SERVICE);
result_set = tracker_db_exec_proc (iface,
- "SelectMetadataClasses",
+ "SelectRegisteredClasses",
NULL);
if (result_set) {
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]