From ede5fa45006f5853b4b9fb52e4f8480aa99b5b1a Mon Sep 17 00:00:00 2001 From: Wootak Jung Date: Wed, 2 Sep 2015 12:59:40 +0900 Subject: [PATCH] Sync from SPIN branch Change-Id: Ib091eca91e40cf75487dc6943e915f8eae7d104e --- packaging/tel-plugin-database.spec | 2 +- src/database_main.c | 33 ++++++++++++++++++++++++++------- 2 files changed, 27 insertions(+), 8 deletions(-) diff --git a/packaging/tel-plugin-database.spec b/packaging/tel-plugin-database.spec index 212ed09..94575bb 100644 --- a/packaging/tel-plugin-database.spec +++ b/packaging/tel-plugin-database.spec @@ -1,6 +1,6 @@ %define major 0 %define minor 1 -%define patchlevel 20 +%define patchlevel 21 Name: tel-plugin-database Version: %{major}.%{minor}.%{patchlevel} diff --git a/src/database_main.c b/src/database_main.c index 74b3775..41595a8 100644 --- a/src/database_main.c +++ b/src/database_main.c @@ -112,8 +112,8 @@ static gboolean update_query_database(Storage *strg, void *handle, const char *q return TRUE; } -static gboolean read_query_database(Storage *strg, void *handle, const char *query, GHashTable *in_param, - GHashTable *out_param, int out_param_cnt) +static gboolean _read_query_database_internal(Storage *strg, void *handle, const char *query, GHashTable *in_param, + gpointer out_param, int out_param_cnt, gboolean in_order) { int rv = 0, local_index = 0, outter_index = 0; sqlite3_stmt *stmt = NULL; @@ -155,11 +155,9 @@ static gboolean read_query_database(Storage *strg, void *handle, const char *que } rv = sqlite3_step(stmt); - dbg("read query executed (%d)", rv); + dbg("read query executed (%d), in_order (%d)", rv, in_order); while (rv == SQLITE_ROW) { - - char tmp_key_outter[10]; GHashTable *out_param_data; out_param_data = g_hash_table_new_full(g_str_hash, g_str_equal, NULL, g_free); @@ -172,8 +170,14 @@ static gboolean read_query_database(Storage *strg, void *handle, const char *que g_hash_table_insert(out_param_data, g_strdup(tmp_key), g_strdup((const char *)tmp)); } - snprintf(tmp_key_outter, sizeof(tmp_key_outter), "%d", outter_index); - g_hash_table_insert(out_param, g_strdup(tmp_key_outter), out_param_data); + if (in_order) { + GSList **temp = out_param; + *temp = g_slist_append(*temp, out_param_data); + } else { + char tmp_key_outter[10]; + snprintf(tmp_key_outter, sizeof(tmp_key_outter), "%d", outter_index); + g_hash_table_insert((GHashTable*)out_param, g_strdup(tmp_key_outter), out_param_data); + } outter_index++; rv = sqlite3_step(stmt); } @@ -182,6 +186,20 @@ static gboolean read_query_database(Storage *strg, void *handle, const char *que return TRUE; } +static gboolean read_query_database(Storage *strg, void *handle, const char *query, GHashTable *in_param, + GHashTable *out_param, int out_param_cnt) +{ + _read_query_database_internal(strg, handle, query, in_param, out_param, out_param_cnt, FALSE); + return TRUE; +} + +static gboolean read_query_database_in_order(Storage *strg, void *handle, const char *query, GHashTable *in_param, + GSList **out_param, int out_param_cnt) +{ + _read_query_database_internal(strg, handle, query, in_param, out_param, out_param_cnt, TRUE); + return TRUE; +} + static gboolean insert_query_database(Storage *strg, void *handle, const char *query, GHashTable *in_param) { int rv = 0; @@ -287,6 +305,7 @@ static struct storage_operations ops = { .remove_handle = remove_handle, .update_query_database = update_query_database, .read_query_database = read_query_database, + .read_query_database_in_order = read_query_database_in_order, .insert_query_database = insert_query_database, .remove_query_database = remove_query_database, }; -- 2.7.4