diff options
author | Siegfried-Angel Gevatter Pujals <siegfried@gevatter.com> | 2012-10-07 19:20:27 +0200 |
---|---|---|
committer | Siegfried-Angel Gevatter Pujals <siegfried@gevatter.com> | 2012-10-07 19:22:20 +0200 |
commit | eb31d78db0ba5cce186a766e467922a2bab78da2 (patch) | |
tree | 047a7939df0f6facf65172ba95fbbef21122b23b /src | |
parent | aaab839a1edabbbb59338490b6ed627ed3b29a16 (diff) | |
parent | a89a0e80aa9e2634e3ac12451a6ede2a788e93df (diff) | |
download | zeitgeist-eb31d78db0ba5cce186a766e467922a2bab78da2.tar.gz |
Merge branch 'master' into current_origin
Conflicts:
libzeitgeist/API_CHANGES
libzeitgeist/datamodel.vala
src/engine.vala
Diffstat (limited to 'src')
-rw-r--r-- | src/db-reader.vala | 4 | ||||
-rw-r--r-- | src/engine.vala | 61 | ||||
-rw-r--r-- | src/table-lookup.vala | 2 |
3 files changed, 46 insertions, 21 deletions
diff --git a/src/db-reader.vala b/src/db-reader.vala index ee560cf9..e99fea24 100644 --- a/src/db-reader.vala +++ b/src/db-reader.vala @@ -835,10 +835,10 @@ public class DbReader : Object /** * If the value ends with the wildcard character, throw an error. */ - protected void assert_no_wildcard (string field, string? val) + protected void assert_no_wildcard (string field, string val) throws EngineError { - if (val == null || !val.has_suffix ("*")) + if (!val.has_suffix ("*")) return; string error_message = "Field '%s' doesn't support prefix search".printf (field); diff --git a/src/engine.vala b/src/engine.vala index 8b6cf8f8..38a83eb2 100644 --- a/src/engine.vala +++ b/src/engine.vala @@ -97,12 +97,27 @@ public class Engine : DbReader private void preprocess_event (Event event) throws EngineError { + if (is_empty_string (event.interpretation) + || is_empty_string (event.manifestation) + || is_empty_string (event.actor)) + { + throw new EngineError.INVALID_ARGUMENT ( + "Incomplete event: interpretation, manifestation and actor " + + "are required"); + } + // Iterate through subjects and check for validity - for (int i = 0; i < event.num_subjects(); ++i) + for (int i = 0; i < event.num_subjects (); ++i) { unowned Subject subject = event.subjects[i]; - // If current_{uri,origin} is unset, give it the same value as URI + if (is_empty_string (subject.uri)) + { + throw new EngineError.INVALID_ARGUMENT ( + "Incomplete event: subject without URI"); + } + + // If current_{uri,origin} are unset, set them to the same as URI if (is_empty_string (subject.current_uri)) subject.current_uri = subject.uri; if (is_empty_string (subject.current_origin)) @@ -234,6 +249,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) @@ -254,11 +278,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); @@ -270,14 +294,14 @@ 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_text (13, subject.current_origin); - insert_stmt.bind_int64 (14, - mimetypes_table.id_for_string (subject.mimetype)); + bind_cached_reference (insert_stmt, 14, mimetypes_table, + subject.mimetype); insert_stmt.bind_text (15, subject.text); // FIXME: Consider a storages_table table. Too dangerous? insert_stmt.bind_text (16, subject.storage); @@ -299,11 +323,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); diff --git a/src/table-lookup.vala b/src/table-lookup.vala index dfdcbbe4..e56012a0 100644 --- a/src/table-lookup.vala +++ b/src/table-lookup.vala @@ -85,7 +85,7 @@ namespace Zeitgeist.SQLite * @see id_try_string * */ - public int id_for_string (string? name) throws EngineError + public int id_for_string (string name) throws EngineError { int id = value_to_id.lookup (name); if (id == 0) |