summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCharlie Brej <cbrej@cs.man.ac.uk>2010-08-08 23:11:05 +0100
committerCharlie Brej <cbrej@cs.man.ac.uk>2010-08-08 23:11:05 +0100
commit24cc214334eade647ffd7f8c55d9f5f708550f2d (patch)
treef40508d9b935e3fc0690e4f146190b9a738876ad
parent65e7d666bc6b9b2cf9a6bb61e757cee02474fb66 (diff)
Remove overwritten records in memory database backend
-rw-r--r--src/libtidbit/tidbit-database-mem.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/libtidbit/tidbit-database-mem.c b/src/libtidbit/tidbit-database-mem.c
index 50600dc..dc6565e 100644
--- a/src/libtidbit/tidbit-database-mem.c
+++ b/src/libtidbit/tidbit-database-mem.c
@@ -66,6 +66,18 @@ static unsigned int tidbit_database_mem_insert (PtrTidbitDatabase database, PtrT
GList* list_element = g_list_find_custom (backend->records, record->guid, tidbit_database_mem_record_has_guid_cmp);
if (list_element)
return 1;
+ PtrTidbitQuery query = tidbit_query_record_replaces (record);
+ GList* records = backend->records;
+ while (records){
+ GList* next_records = g_list_next(records);
+ PtrTidbitRecord record = records->data;
+ if (tidbit_query_test_record (query, record)){
+ tidbit_record_unref (record);
+ backend->records = g_list_delete_link (backend->records, records);
+ }
+ records = next_records;
+ }
+ tidbit_query_unref (query);
tidbit_record_ref (record);
backend->records = g_list_append(backend->records, record);
return 0; //FIXME use propper numbers