diff options
author | Siegfried-Angel Gevatter Pujals <siegfried@gevatter.com> | 2012-09-15 17:01:35 +0200 |
---|---|---|
committer | Siegfried-Angel Gevatter Pujals <siegfried@gevatter.com> | 2012-09-15 17:01:35 +0200 |
commit | d2e179479d4af080022f0fe45454b2af9feae894 (patch) | |
tree | 850e216b85f6170e0226f5e37ec15032787acd36 /src | |
parent | fb930841790b008e9d9d932d50822eda6125d71b (diff) | |
download | zeitgeist-d2e179479d4af080022f0fe45454b2af9feae894.tar.gz |
Fix insertion of events with NULL values
Diffstat (limited to 'src')
-rw-r--r-- | src/engine.vala | 42 |
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); |