From 321840a5735488e744e1d4243dcbe70d61891572 Mon Sep 17 00:00:00 2001 From: Trever Fischer Date: Tue, 13 Mar 2012 14:32:56 -0400 Subject: Consolidate gobs of SQL generation into a common method --- src/db-reader.vala | 97 ++++++++++++++++++++++++++++++++---------------------- 1 file changed, 57 insertions(+), 40 deletions(-) diff --git a/src/db-reader.vala b/src/db-reader.vala index 5c3062e4..1a123b79 100644 --- a/src/db-reader.vala +++ b/src/db-reader.vala @@ -160,47 +160,10 @@ public class DbReader : Object return results; } - public uint32[] find_event_ids (TimeRange time_range, - GenericArray event_templates, - uint storage_state, uint max_events, uint result_type, + public uint32[] find_event_ids_for_clause (WhereClause where, + uint max_events, uint result_type, BusName? sender=null) throws EngineError { - - WhereClause where = new WhereClause (WhereClause.Type.AND); - - /** - * We are using the unary operator here to tell SQLite to not use - * the index on the timestamp column at the first place. This is a - * "fix" for (LP: #672965) based on some benchmarks, which suggest - * a performance win, but we might not oversee all implications. - * (See http://www.sqlite.org/optoverview.html, section 6.0). - * -- Markus Korn, 29/11/2010 - */ - if (time_range.start != 0) - where.add (("+timestamp >= %" + int64.FORMAT).printf( - time_range.start)); - if (time_range.end != 0) - where.add (("+timestamp <= %" + int64.FORMAT).printf( - time_range.end)); - - if (storage_state == StorageState.AVAILABLE || - storage_state == StorageState.NOT_AVAILABLE) - { - where.add ("(subj_storage_state=? OR subj_storage_state IS NULL)", - storage_state.to_string ()); - } - else if (storage_state != StorageState.ANY) - { - throw new EngineError.INVALID_ARGUMENT( - "Unknown storage state '%u'".printf(storage_state)); - } - - WhereClause tpl_conditions = get_where_clause_from_event_templates ( - event_templates); - where.extend (tpl_conditions); - //if (!where.may_have_results ()) - // return new uint32[0]; - string sql = "SELECT id FROM event_view "; string where_sql = ""; if (!where.is_empty ()) @@ -352,6 +315,20 @@ public class DbReader : Object return event_ids; } + public uint32[] find_event_ids (TimeRange time_range, + GenericArray event_templates, + uint storage_state, uint max_events, uint result_type, + BusName? sender=null) throws EngineError + { + WhereClause where = get_where_clause_for_query (time_range, + event_templates, storage_state); + + //if (!where.may_have_results ()) + // return new uint32[0]; + + return find_event_ids_for_clause (where, max_events, result_type); + } + public GenericArray find_events (TimeRange time_range, GenericArray event_templates, uint storage_state, uint max_events, uint result_type, @@ -361,6 +338,46 @@ public class DbReader : Object storage_state, max_events, result_type)); } + public WhereClause get_where_clause_for_query (TimeRange time_range, + GenericArray event_templates, uint storage_state, + BusName? sender=null) throws EngineError + { + WhereClause where = new WhereClause (WhereClause.Type.AND); + + /** + * We are using the unary operator here to tell SQLite to not use + * the index on the timestamp column at the first place. This is a + * "fix" for (LP: #672965) based on some benchmarks, which suggest + * a performance win, but we might not oversee all implications. + * (See http://www.sqlite.org/optoverview.html, section 6.0). + * -- Markus Korn, 29/11/2010 + */ + if (time_range.start != 0) + where.add (("+timestamp >= %" + int64.FORMAT).printf( + time_range.start)); + if (time_range.end != 0) + where.add (("+timestamp <= %" + int64.FORMAT).printf( + time_range.end)); + + if (storage_state == StorageState.AVAILABLE || + storage_state == StorageState.NOT_AVAILABLE) + { + where.add ("(subj_storage_state=? OR subj_storage_state IS NULL)", + storage_state.to_string ()); + } + else if (storage_state != StorageState.ANY) + { + throw new EngineError.INVALID_ARGUMENT( + "Unknown storage state '%u'".printf(storage_state)); + } + + WhereClause tpl_conditions = get_where_clause_from_event_templates ( + event_templates); + where.extend (tpl_conditions); + + return where; + } + private struct RelatedUri { public uint32 id; public int64 timestamp; @@ -596,7 +613,7 @@ public class DbReader : Object } // Used by find_event_ids - protected WhereClause get_where_clause_from_event_templates ( + public WhereClause get_where_clause_from_event_templates ( GenericArray templates) throws EngineError { WhereClause where = new WhereClause (WhereClause.Type.OR); -- cgit v1.2.3