diff --git a/src/libtracker-data/tracker-data-update.c b/src/libtracker-data/tracker-data-update.c index 41c4b86..fc5d2ea 100644 --- a/src/libtracker-data/tracker-data-update.c +++ b/src/libtracker-data/tracker-data-update.c @@ -141,21 +141,21 @@ tracker_data_update_create_service (TrackerDataUpdateMetadataContext *context, is_symlink = g_file_test (path, G_FILE_TEST_IS_SYMLINK); /* Add data to the context */ - tracker_data_update_metadata_context_add (context, "ID", id_str); - tracker_data_update_metadata_context_add (context, "Path", dirname); - tracker_data_update_metadata_context_add (context, "Name", basename); - tracker_data_update_metadata_context_add (context, "ServiceTypeID", service_type_id_str); + tracker_data_update_metadata_context_add (context, "ID", id_str, NULL); + tracker_data_update_metadata_context_add (context, "Path", dirname, NULL); + tracker_data_update_metadata_context_add (context, "Name", basename, NULL); + tracker_data_update_metadata_context_add (context, "ServiceTypeID", service_type_id_str, NULL); tracker_data_update_metadata_context_add (context, "Mime", - is_dir ? "Folder" : g_hash_table_lookup (metadata, "File:Mime")); + is_dir ? "Folder" : g_hash_table_lookup (metadata, "File:Mime"), NULL); tracker_data_update_metadata_context_add (context, "Size", - g_hash_table_lookup (metadata, "File:Size")); + g_hash_table_lookup (metadata, "File:Size"), NULL); tracker_data_update_metadata_context_add (context, "IsDirectory", - is_dir ? "1" : "0"); + is_dir ? "1" : "0", NULL); tracker_data_update_metadata_context_add (context, "IsLink", - is_symlink ? "1" : "0"); + is_symlink ? "1" : "0", NULL); tracker_data_update_metadata_context_add (context, "IndexTime", - g_hash_table_lookup (metadata, "File:Modified")); - tracker_data_update_metadata_context_add (context, "AuxilaryID", volume_id_str); + g_hash_table_lookup (metadata, "File:Modified"), NULL); + tracker_data_update_metadata_context_add (context, "AuxilaryID", volume_id_str, NULL); g_free (id_str); g_free (service_type_id_str); @@ -404,7 +404,7 @@ tracker_data_update_set_metadata (TrackerDataUpdateMetadataContext *context, gchar *column; column = g_strdup_printf ("KeyMetadata%d", metadata_key); - tracker_data_update_metadata_context_add (context, column, value); + tracker_data_update_metadata_context_add (context, column, value, NULL); g_free (column); } else if (tracker_field_get_data_type (field) == TRACKER_FIELD_TYPE_DATE && (strcmp (tracker_field_get_name (field), "File:Modified") == 0)) { @@ -417,14 +417,8 @@ tracker_data_update_set_metadata (TrackerDataUpdateMetadataContext *context, if (collate_key > 0) { gchar *val, *collate_val, *column; - val = tracker_escape_string (value); - collate_val = g_strdup_printf ("CollateKey('%s')", val); column = g_strdup_printf ("KeyMetadataCollation%d", collate_key); - - tracker_data_update_metadata_context_add (context, column, collate_val); - - g_free (val); - g_free (collate_val); + tracker_data_update_metadata_context_add (context, column, value, "CollateKey"); g_free (column); } @@ -914,11 +908,22 @@ tracker_data_update_metadata_context_new (TrackerDataUpdateMetadataContextType void tracker_data_update_metadata_context_add (TrackerDataUpdateMetadataContext *context, const gchar *column, - const gchar *value) + const gchar *value, + const gchar *function) { + gchar *escaped = tracker_escape_string (value); + + if (!function) { + wrapped = g_strdup_printf ("\"%s\"", escaped); + } else { + wrapped = g_strdup_printf ("%s(\"%s\")", function, escaped); + } + g_hash_table_replace (context->data, g_strdup (column), - tracker_escape_string (value)); + wrapped); + + g_free (escaped); } static void @@ -953,7 +958,7 @@ tracker_data_update_metadata_context_close (TrackerDataUpdateMetadataContext *co /* Ensure we have an ID */ id_str = tracker_guint32_to_string (context->id); - tracker_data_update_metadata_context_add (context, "ID", id_str); + tracker_data_update_metadata_context_add (context, "ID", id_str, NULL); g_free (id_str); /* Compose insert SQL query */ @@ -1000,7 +1005,7 @@ tracker_data_update_metadata_context_close (TrackerDataUpdateMetadataContext *co } g_string_append_printf (update_query, - "%s = '%s'", + "%s = %s", column, val); first = FALSE; @@ -1022,6 +1027,8 @@ tracker_data_update_metadata_context_close (TrackerDataUpdateMetadataContext *co g_warning ("%s", error->message); g_error_free (error); } + + g_free (sql); } void