diff --git a/main.c b/main.c index 7401a75905643ab6143bf1196269eef6e51eb350..fed9f0bf37d2893e76e7a38b68719109570db144 100644 --- a/main.c +++ b/main.c @@ -215,28 +215,42 @@ static void config_db (AppData* appdata) { gint ri = 0; - gboolean r = FALSE; + gboolean rb = FALSE; static const char* SQLITE3_MEMORY_DB = ":memory:"; sqlite3* db = NULL; gchar* sql = NULL; ri = sqlite3_open (SQLITE3_MEMORY_DB, &db); - g_assert_cmpint (ri, ==, SQLITE_OK); + if (ri != SQLITE_OK) { + g_warning ("sqlite3_open :memory: db failed, query will not work."); + goto db_fail; + } g_assert_nonnull (db); /* TODO make db path configurable */ /* TODO remove user name in db path */ sql = sqlite3_mprintf ("ATTACH %Q AS maindb", "/home/sylecn/.cache/ibus/pinyin/main.db"); - r = sqlite3_exec_simple (db, sql); - g_assert (r); + rb = sqlite3_exec_simple (db, sql); + if (! rb) { + g_warning ("attach maindb failed, query will not work."); + goto attach_fail; + } sqlite3_free (sql); /* TODO make db path configurable */ sql = sqlite3_mprintf ("ATTACH %Q AS userdb", "/home/sylecn/.cache/ibus/pinyin/user-1.0.db"); - r = sqlite3_exec_simple (db, sql); - g_assert (r); - sqlite3_free (sql); - + rb = sqlite3_exec_simple (db, sql); + if (! rb) { + g_warning ("attach userdb failed, query will not work."); + goto attach_fail; + } appdata->db = db; + return; + +attach_fail: + sqlite3_free (sql); + sqlite3_close (db); +db_fail: + appdata->db = NULL; } static void diff --git a/meson.build b/meson.build index 2e0e49cd6746c9ef6584349a8a7f346b439048f9..d9bf42f7baa43b67d63f38555c579b7a5b1b67e4 100644 --- a/meson.build +++ b/meson.build @@ -1,6 +1,6 @@ # -*- mode: conf -*- project('zero-pinyin-service', ['c', 'cpp'], - version: '0.3.1', + version: '0.3.2', license: 'GPL', default_options: [ 'warning_level=2', diff --git a/zero-pinyin-service.c b/zero-pinyin-service.c index 2cfdab5c46186ead3caac5d72aa4d70fd10bfa11..908cea2d3c0c117546ca062172f087eb84a7659a 100644 --- a/zero-pinyin-service.c +++ b/zero-pinyin-service.c @@ -129,6 +129,7 @@ get_candidates_for_n_pinyin (sqlite3* db, const guint DEFAULT_LIMIT = 50; GList* result = NULL; /* GList of Candidate */ + g_assert_nonnull (db); g_assert_cmpint (group_size, >=, 1); g_assert_cmpint (group_size, <=, g_list_length (pylist)); @@ -201,6 +202,10 @@ get_candidates (sqlite3* db, GVariantBuilder *candidates_builder, GVariantBuilder *matched_lengths_builder) { + if (! db) { + g_warning ("No db connection, can't get candidates."); + return; + } GList* pylist = NULL; guint pylist_len = 0;