summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSiegfried-Angel Gevatter Pujals <siegfried@gevatter.com>2012-09-15 17:01:35 +0200
committerSiegfried-Angel Gevatter Pujals <siegfried@gevatter.com>2012-09-15 17:01:35 +0200
commitd2e179479d4af080022f0fe45454b2af9feae894 (patch)
tree850e216b85f6170e0226f5e37ec15032787acd36 /src
parentfb930841790b008e9d9d932d50822eda6125d71b (diff)
downloadzeitgeist-d2e179479d4af080022f0fe45454b2af9feae894.tar.gz
Fix insertion of events with NULL values
Diffstat (limited to 'src')
-rw-r--r--src/engine.vala42
1 files changed, 26 insertions, 16 deletions
diff --git a/src/engine.vala b/src/engine.vala
index 61d92679..e9cd4b75 100644
--- a/src/engine.vala
+++ b/src/engine.vala
@@ -232,6 +232,15 @@ public class Engine : DbReader
storages.flush ();
}
+ private void bind_cached_reference (Sqlite.Statement stmt,
+ int position, TableLookup table, string? value_)
+ {
+ if (value_ != null)
+ stmt.bind_int64 (position, table.id_for_string (value_));
+ else
+ stmt.bind_null (position);
+ }
+
private uint32 insert_event (Event event) throws EngineError
requires (event.id == 0)
requires (event.num_subjects () > 0)
@@ -252,11 +261,11 @@ public class Engine : DbReader
insert_stmt.bind_int64 (1, event.id);
insert_stmt.bind_int64 (2, event.timestamp);
- insert_stmt.bind_int64 (3,
- interpretations_table.id_for_string (event.interpretation));
- insert_stmt.bind_int64 (4,
- manifestations_table.id_for_string (event.manifestation));
- insert_stmt.bind_int64 (5, actors_table.id_for_string (event.actor));
+ bind_cached_reference (insert_stmt, 3, interpretations_table,
+ event.interpretation);
+ bind_cached_reference (insert_stmt, 4, manifestations_table,
+ event.manifestation);
+ bind_cached_reference (insert_stmt, 5, actors_table, event.actor);
insert_stmt.bind_text (6, event.origin);
insert_stmt.bind_int64 (7, payload_id);
@@ -268,13 +277,13 @@ public class Engine : DbReader
insert_stmt.bind_text (8, subject.uri);
insert_stmt.bind_text (9, subject.current_uri);
- insert_stmt.bind_int64 (10,
- interpretations_table.id_for_string (subject.interpretation));
- insert_stmt.bind_int64 (11,
- manifestations_table.id_for_string (subject.manifestation));
+ bind_cached_reference (insert_stmt, 10, interpretations_table,
+ subject.interpretation);
+ bind_cached_reference (insert_stmt, 11, manifestations_table,
+ subject.manifestation);
insert_stmt.bind_text (12, subject.origin);
- insert_stmt.bind_int64 (13,
- mimetypes_table.id_for_string (subject.mimetype));
+ bind_cached_reference (insert_stmt, 13, mimetypes_table,
+ subject.mimetype);
insert_stmt.bind_text (14, subject.text);
// FIXME: Consider a storages_table table. Too dangerous?
insert_stmt.bind_text (15, subject.storage);
@@ -296,11 +305,12 @@ public class Engine : DbReader
retrieval_stmt.reset ();
retrieval_stmt.bind_int64 (1, event.timestamp);
- retrieval_stmt.bind_int64 (2,
- interpretations_table.id_for_string (event.interpretation));
- retrieval_stmt.bind_int64 (3,
- manifestations_table.id_for_string (event.manifestation));
- retrieval_stmt.bind_int64 (4, actors_table.id_for_string (event.actor));
+ bind_cached_reference (retrieval_stmt, 2,
+ interpretations_table, event.interpretation);
+ bind_cached_reference (retrieval_stmt, 3,
+ manifestations_table, event.manifestation);
+ bind_cached_reference (retrieval_stmt, 4,
+ actors_table, event.actor);
if ((rc = retrieval_stmt.step ()) != Sqlite.ROW) {
database.assert_not_corrupt (rc);