Query Functions to Get Data(Plugin) from DB 20/222220/4
authorDewal Agarwal <d1.agarwal@samsung.com>
Fri, 10 Jan 2020 12:40:57 +0000 (18:10 +0530)
committerDewal Agarwal <d1.agarwal@samsung.com>
Wed, 15 Jan 2020 06:09:33 +0000 (06:09 +0000)
Change-Id: I1c574a7c091c59e12de5dd55a551cb1e45f0e7d7
Signed-off-by: Dewal Agarwal <d1.agarwal@samsung.com>
include/bm_private.h
include/bm_server_db.h
include/bm_util.h
src/bm_power_engine.c
src/bm_server_db.c
src/bm_util.c

index b117e1c..e6639d9 100644 (file)
@@ -60,7 +60,7 @@ typedef struct _resourceid_usage_s {
 
 typedef enum {
        BM_APPIDMAP_FIELD_NONE = -1,
-       BM_APPIDMAP_FIELD_APPNAME,
+       BM_APPIDMAP_FIELD_ID,
        BM_APPIDMAP_FIELD_APPID,
        BM_APPIDMAP_FIELD_END,
 } BM_APPIDMAP_DB_IDX;
index a87aa39..e175238 100644 (file)
@@ -192,11 +192,15 @@ int bm_server_resource_usage_insert_to_db(resourceid_usage_s *bm_resource_type);
 
 int bm_server_battery_dump_insert_to_db(void* str_data, int type);
 
+int bm_server_battery_dump_query_from_db(void *str_data, int type, long int duration);
+
 int bm_server_delete_table_by_appid(const char* app_id);
 
 int bm_server_delete_table_by_time_interval(void);
 
 int bm_server_appid_insert_to_db(const char* app_id);
+
+GSList* bm_server_query_appid_map(int *error_code);
 #ifdef __cplusplus
 }
 #endif
index 7a5c04d..e930c3a 100644 (file)
@@ -83,6 +83,7 @@ void bm_set_free_hrm_sensor_data_handle(bm_hrm_sensor_st *handle);
 
 void bm_set_free_data_handles(bm_feature_data_h data_h);
 
+void bm_set_free_gslist_appid_map(GSList *list);
 #ifdef __cplusplus
 }
 #endif
index e06508a..fa52139 100644 (file)
@@ -546,10 +546,19 @@ int bm_ble_calc_power_and_commit(bm_bluetooth_st *handle, bool mode)
        ret_val = bm_server_battery_dump_insert_to_db(gble_st, 0);
        if (ret_val != BATTERY_MONITOR_ERROR_NONE)
                _ERR("Insert of GBLE failed ");
-       else
-               _DBG("Insert successful");
        BM_FREE(gble_st);
-       //Add bst times
+       bd_gl_bst_stat_s *gbst_st = (bd_gl_bst_stat_s *)calloc(1, sizeof(bd_gl_bst_stat_s));
+       if (gbst_st == NULL) {
+               _ERR("memory allocation failed");
+               return BATTERY_MONITOR_ERROR_OUT_OF_MEMORY;
+       }
+       gbst_st->time_s = ret_time; gbst_st->off_time = BATTERY_MONITOR_GET_DATA_JOB_PERIOD;
+       gbst_st->off_time -= sesTime; gbst_st->low_time = 0/*(sesTime - (scTime + conTime))*/;
+       gbst_st->med_time = 0/*scTime*/; gbst_st->high_time = 0/*conTime*/;
+       ret_val = bm_server_battery_dump_insert_to_db(gbst_st, 6);
+       if (ret_val != BATTERY_MONITOR_ERROR_NONE)
+               _ERR("Insert of GBLE failed ");
+       BM_FREE(gbst_st);
        /* Free the hash map */
        g_hash_table_destroy(hash);
 
index 669e532..682c5ac 100644 (file)
@@ -33,6 +33,7 @@
 #include "bm_server_db.h"
 #include "bm_common.h"
 #include "bm_dbg.h"
+#include "bm_util.h"
 
 #define BM_DB_OPEN_READONLY 0
 #define BM_DB_OPEN_READWRITE 1
@@ -75,7 +76,6 @@ static bm_stmt bm_prepare_query(sqlite3 *bm_db_handle, char *query)
        BM_RETURN_VAL((query != NULL), {}, NULL, ("query is NULL"));
 
        rc = sqlite3_prepare_v2(bm_db_handle, query, strlen(query), &pStmt, NULL);
-
        BM_RETURN_VAL((SQLITE_OK == rc), {}, NULL, ("sqlite3_prepare_v2() failed(%s).",
                                bm_db_err_msg(bm_db_handle)));
 
@@ -395,7 +395,7 @@ static int bm_gl_ble_stat_convert_to_sql(bd_gl_ble_stat_s *gble_st, bm_stmt hstm
        return count;
 }
 
-static int bm_gl_wifi_stat_convert_to_sql(bd_gl_wifi_stat_s *gwfl_st, bm_stmt hstmt, char *sql_value)
+static int bm_gl_wfl_stat_convert_to_sql(bd_gl_wifi_stat_s *gwfl_st, bm_stmt hstmt, char *sql_value)
 {
        ENTER;
 
@@ -535,6 +535,120 @@ static void bm_convert_column_to_appid_usage(bm_stmt hstmt, appid_usage_s* bm_ap
 
 }
 
+static void bm_convert_column_to_appid_map(bm_stmt hstmt, appid_map_s* gappid_map)
+{
+       ENTER;
+
+       const char *textbuf = NULL;
+       gappid_map->id = bm_query_table_column_int(hstmt, BM_APPIDMAP_FIELD_ID);
+       textbuf = bm_query_table_column_text(hstmt, BM_APPIDMAP_FIELD_APPID);
+       bm_db_data_to_text(textbuf, &(gappid_map->AppId));
+
+       EXIT;
+       return;
+}
+
+static void bm_convert_column_to_gl_ble_stat(bm_stmt hstmt, bd_gl_ble_stat_s *gble_st)
+{
+       ENTER;
+       gble_st->time_s = -1;
+       gble_st->ble_idle_time = bm_query_table_column_int(hstmt, BD_GBLESTAT_IDLE);
+       gble_st->ble_rx_time = bm_query_table_column_int(hstmt, BD_GBLESTAT_RX);
+       gble_st->ble_tx_time = bm_query_table_column_int(hstmt, BD_GBLESTAT_TX);
+       gble_st->ble_pwi_val = bm_query_table_column_int(hstmt, BD_GBLESTAT_PWI_VAL);
+
+       EXIT;
+       return;
+}
+
+static void bm_convert_column_to_gl_wfl_stat(bm_stmt hstmt, bd_gl_wifi_stat_s *gwfl_st)
+{
+       ENTER;
+       gwfl_st->time_s = -1;
+       gwfl_st->wifi_on_time = bm_query_table_column_int(hstmt, BD_GWFLSTAT_ON);
+       gwfl_st->wifi_conn_time = bm_query_table_column_int(hstmt, BD_GWFLSTAT_CON);
+       gwfl_st->wifi_idle_time = bm_query_table_column_int(hstmt, BD_GWFLSTAT_IDLE);
+       gwfl_st->wifi_rx_time = bm_query_table_column_int(hstmt, BD_GWFLSTAT_RX);
+       gwfl_st->wifi_tx_time = bm_query_table_column_int(hstmt, BD_GWFLSTAT_TX);
+       gwfl_st->wifi_pwi_val = bm_query_table_column_int(hstmt, BD_GWFLSTAT_PWI_VAL);
+
+       EXIT;
+       return;
+}
+
+static void bm_convert_column_to_gl_sbr_stat(bm_stmt hstmt, bd_gl_sbr_stat_s *gbr_st)
+{
+       ENTER;
+       gbr_st->time_s = -1;
+       gbr_st->dark = bm_query_table_column_int(hstmt, BD_GSBRSTAT_DARK);
+       gbr_st->dim = bm_query_table_column_int(hstmt, BD_GSBRSTAT_DIM);
+       gbr_st->medium = bm_query_table_column_int(hstmt, BD_GSBRSTAT_MEDIUM);
+       gbr_st->light = bm_query_table_column_int(hstmt, BD_GSBRSTAT_LIGHT);
+       gbr_st->bright = bm_query_table_column_int(hstmt, BD_GSBRSTAT_BRIGHT);
+       EXIT;
+       return;
+}
+
+static void bm_convert_column_to_gl_ntw_stat(bm_stmt hstmt, bd_gl_ntw_stat_s *gn_st)
+{
+       ENTER;
+       gn_st->time_s = -1;
+       gn_st->dn_rx_byt = bm_query_table_column_int(hstmt, BD_GNTWSTAT_DN_RXB);
+       gn_st->dn_tx_byt = bm_query_table_column_int(hstmt, BD_GNTWSTAT_DN_TXB);
+       gn_st->wifi_rx_byt = bm_query_table_column_int(hstmt, BD_GNTWSTAT_WIFI_RXB);
+       gn_st->wifi_tx_byt = bm_query_table_column_int(hstmt, BD_GNTWSTAT_WIFI_TXB);
+       gn_st->dn_rx_pkt = bm_query_table_column_int(hstmt, BD_GNTWSTAT_DN_RXP);
+       gn_st->dn_tx_pkt = bm_query_table_column_int(hstmt, BD_GNTWSTAT_DN_TXP);
+       gn_st->wifi_rx_pkt = bm_query_table_column_int(hstmt, BD_GNTWSTAT_WIFI_RXP);
+       gn_st->wifi_tx_pkt = bm_query_table_column_int(hstmt, BD_GNTWSTAT_WIFI_TXP);
+
+       EXIT;
+       return;
+}
+
+static void bm_convert_column_to_gl_sgt_stat(bm_stmt hstmt, bd_gl_sgt_stat_s *gst_st)
+{
+       ENTER;
+       gst_st->time_s = -1;
+       gst_st->scan_time = bm_query_table_column_int(hstmt, BD_GSGTSTAT_SCAN);
+       gst_st->none_time = bm_query_table_column_int(hstmt, BD_GSGTSTAT_NO);
+       gst_st->poor_time = bm_query_table_column_int(hstmt, BD_GSGTSTAT_POOR);
+       gst_st->med_time = bm_query_table_column_int(hstmt, BD_GSGTSTAT_MED);
+       gst_st->good_time = bm_query_table_column_int(hstmt, BD_GSGTSTAT_GOOD);
+       gst_st->grt_time = bm_query_table_column_int(hstmt, BD_GSGTSTAT_GRT);
+
+       EXIT;
+       return;
+}
+
+static void bm_convert_column_to_gl_wst_stat(bm_stmt hstmt, bd_gl_wst_stat_s *gwst_st)
+{
+       ENTER;
+       gwst_st->time_s = -1;
+       gwst_st->wscan_time = bm_query_table_column_int(hstmt, BD_GSGTSTAT_SCAN);
+       gwst_st->wnone_time = bm_query_table_column_int(hstmt, BD_GSGTSTAT_NO);
+       gwst_st->wpoor_time = bm_query_table_column_int(hstmt, BD_GSGTSTAT_POOR);
+       gwst_st->wmed_time = bm_query_table_column_int(hstmt, BD_GSGTSTAT_MED);
+       gwst_st->wgood_time = bm_query_table_column_int(hstmt, BD_GSGTSTAT_GOOD);
+       gwst_st->wgrt_time = bm_query_table_column_int(hstmt, BD_GSGTSTAT_GRT);
+
+       EXIT;
+       return;
+}
+
+static void bm_convert_column_to_gl_bst_stat(bm_stmt hstmt, bd_gl_bst_stat_s *gbst_st)
+{
+       ENTER;
+       gbst_st->time_s = -1;
+       gbst_st->off_time = bm_query_table_column_int(hstmt, BD_GBSTSTAT_OFF);
+       gbst_st->low_time = bm_query_table_column_int(hstmt, BD_GBSTSTAT_LOW);
+       gbst_st->med_time = bm_query_table_column_int(hstmt, BD_GBSTSTAT_MED);
+       gbst_st->high_time = bm_query_table_column_int(hstmt, BD_GBSTSTAT_HIGH);
+
+       EXIT;
+       return;
+}
+
 static int bm_get_record_count(sqlite3 *bm_db_handle, const char *query)
 {
        ENTER;
@@ -1028,7 +1142,7 @@ static int bm_battery_stat_insert_to_db(sqlite3 *bm_db_handle, void *str_data, i
                        return BATTERY_MONITOR_ERROR_DATABASE_BUSY;
                }
                BM_RETURN_VAL((hstmt != NULL), {}, BATTERY_MONITOR_ERROR_DB_FAILED, ("bm_prepare_query() failed(%s).\n", bm_db_err_msg(bm_db_handle)));
-               bm_gl_wifi_stat_convert_to_sql(gwfl_st, hstmt, query);
+               bm_gl_wfl_stat_convert_to_sql(gwfl_st, hstmt, query);
                break;
        case 2:
                _DBG("GNTW_DATA");
@@ -1240,6 +1354,67 @@ int bm_appid_map_insert_to_db(sqlite3 *bm_db_handle, const char *app_id)
        return error_code;
 }
 
+GSList* bm_query_appid_map(sqlite3 *bm_db_handle, int *error_code)
+{
+       bm_stmt hstmt = NULL;
+       char query[BATTERY_MONITOR_SQL_LEN_MAX] = {0, };
+       int rc = 0;
+       *error_code = BATTERY_MONITOR_ERROR_NONE;
+       GSList* appid_map_list = NULL;
+
+       BM_RETURN_VAL((bm_db_handle != NULL), { *error_code = BATTERY_MONITOR_ERROR_DB_NOT_OPENED; },
+                                               NULL, ("The database isn't connected."));
+       BM_MEMSET(query, 0x00, BATTERY_MONITOR_SQL_LEN_MAX);
+       BM_SNPRINTF(query, sizeof(query), "SELECT * FROM %s", BATTERY_MONITOR_APP_ID_MAP_TABLE);
+
+       hstmt = bm_prepare_query(bm_db_handle, query);
+       if (bm_db_err_code(bm_db_handle) == SQLITE_PERM) {
+               _ERR("Access failed(%s)", bm_db_err_msg(bm_db_handle));
+               *error_code = BATTERY_MONITOR_ERROR_PERMISSION_DENIED;
+               return NULL;
+       }
+
+       appid_map_s *gappid_map = NULL;
+       rc = bm_query_step(hstmt);
+       BM_CATCH_ERROR_P(rc == SQLITE_ROW, {}, BATTERY_MONITOR_ERROR_RECORD_NOT_FOUND,
+                               ("The record isn't found.\n"));
+       while (rc == SQLITE_ROW) {
+               gappid_map = (appid_map_s *)calloc(1, sizeof(appid_map_s));
+               if (gappid_map == NULL) {
+                       _ERR("Memory Allocation Failed");
+                       *error_code = BATTERY_MONITOR_ERROR_OUT_OF_MEMORY;
+                       break;
+               }
+               bm_convert_column_to_appid_map(hstmt, gappid_map);
+               appid_map_list = g_slist_append(appid_map_list, gappid_map);
+               rc = bm_query_step(hstmt);
+       }
+
+       rc = bm_query_finalize(hstmt);
+       BM_CATCH_ERROR_P((rc == BATTERY_MONITOR_ERROR_NONE), {}, rc, ("finalize error"));
+       hstmt = NULL;
+
+       *error_code = BATTERY_MONITOR_ERROR_NONE;
+CATCH:
+       if (hstmt != NULL) {
+               rc = bm_query_finalize(hstmt);
+               if (rc != BATTERY_MONITOR_ERROR_NONE) {
+                       *error_code = rc;
+                       _ERR("finalize error");
+               }
+               hstmt = NULL;
+       }
+       if ((*error_code != BATTERY_MONITOR_ERROR_NONE) && appid_map_list != NULL) {
+               bm_set_free_gslist_appid_map(appid_map_list);
+       }
+       if ((*error_code == BATTERY_MONITOR_ERROR_NONE) && appid_map_list != NULL) {
+               _INFO("Returning appid map list");
+               return appid_map_list;
+       }
+       EXIT;
+       return NULL;
+}
+
 static appid_usage_s* bm_query_usage_by_appid(sqlite3 *bm_db_handle, const char *app_id, int *error_code, int period_type)
 {
        ENTER;
@@ -1327,13 +1502,155 @@ CATCH:
        return NULL;
 }
 
+static int bm_battery_stat_query_from_db(sqlite3 *bm_db_handle, void* str_data, int type, long int duration)
+{
+       ENTER;
+
+       _DBG("Value for duration is [%ld]", duration);
+       bm_stmt hstmt = NULL;
+       char query[BATTERY_MONITOR_SQL_LEN_MAX] = {0, };
+       int rc = 0;
+       int error_code = BATTERY_MONITOR_ERROR_NONE;
+
+       BM_RETURN_VAL((bm_db_handle != NULL), { error_code = BATTERY_MONITOR_ERROR_DB_NOT_OPENED; },
+                               error_code, ("The database isn't connected."));
+       BM_MEMSET(query, 0x00, BATTERY_MONITOR_SQL_LEN_MAX);
+
+       switch (type) {
+       case 0:
+               _DBG("GBLE_DATA");
+               BM_SNPRINTF(query, sizeof(query), "SELECT sum(ble_idle_time), sum(ble_rx_time), sum(ble_tx_time), \
+                       sum(ble_pwi_val) FROM %s WHERE time_s >= %ld", BATTERY_MONITOR_GBL_BLE_STAT_TABLE, duration);
+               hstmt = bm_prepare_query(bm_db_handle, query);
+               if (bm_db_err_code(bm_db_handle) == SQLITE_PERM) {
+                       _ERR("Access failed(%s)", bm_db_err_msg(bm_db_handle));
+                       error_code = BATTERY_MONITOR_ERROR_PERMISSION_DENIED;
+                       return error_code;
+               }
+               rc = bm_query_step(hstmt);
+               BM_CATCH_ERROR(rc == SQLITE_ROW, {}, BATTERY_MONITOR_ERROR_RECORD_NOT_FOUND, ("The record isn't found.\n"));
+               bm_convert_column_to_gl_ble_stat(hstmt, str_data);
+               break;
+       case 1:
+               _DBG("GWFL_DATA");
+               BM_SNPRINTF(query, sizeof(query), "SELECT sum(wifi_on_time), sum(wifi_conn_time), sum(wifi_idle_time), \
+                               sum(wifi_rx_time), sum(wifi_tx_time), sum(wifi_pwi_val) FROM %s WHERE time_s >= %ld", BATTERY_MONITOR_GBL_WFL_STAT_TABLE, duration);
+               hstmt = bm_prepare_query(bm_db_handle, query);
+               if (bm_db_err_code(bm_db_handle) == SQLITE_PERM) {
+                       _ERR("Access failed(%s)", bm_db_err_msg(bm_db_handle));
+                       error_code = BATTERY_MONITOR_ERROR_PERMISSION_DENIED;
+                       return error_code;
+               }
+               rc = bm_query_step(hstmt);
+               BM_CATCH_ERROR(rc == SQLITE_ROW, {}, BATTERY_MONITOR_ERROR_RECORD_NOT_FOUND, ("The record isn't found.\n"));
+               bm_convert_column_to_gl_wfl_stat(hstmt, str_data);
+               break;
+       case 2:
+               _DBG("GNTW_DATA");
+               BM_SNPRINTF(query, sizeof(query), "SELECT sum(dn_rx_byt), sum(dn_tx_byt), sum(wifi_rx_byt), \
+                               sum(wifi_tx_byt), sum(dn_rx_pkt), sum(dn_tx_pkt), sum(wifi_rx_pkt), sum(wifi_tx_pkt) FROM %s WHERE time_s >= %ld", BATTERY_MONITOR_GBL_NT_STAT_TABLE, duration);
+               hstmt = bm_prepare_query(bm_db_handle, query);
+               if (bm_db_err_code(bm_db_handle) == SQLITE_PERM) {
+                       _ERR("Access failed(%s)", bm_db_err_msg(bm_db_handle));
+                       error_code = BATTERY_MONITOR_ERROR_PERMISSION_DENIED;
+                       return error_code;
+               }
+               rc = bm_query_step(hstmt);
+               BM_CATCH_ERROR(rc == SQLITE_ROW, {}, BATTERY_MONITOR_ERROR_RECORD_NOT_FOUND, ("The record isn't found.\n"));
+               bm_convert_column_to_gl_ntw_stat(hstmt, str_data);
+               break;
+       case 3:
+               _DBG("GSBR_DATA");
+               BM_SNPRINTF(query, sizeof(query), "SELECT sum(dark), sum(dim), sum(medium), \
+                               sum(light), sum(bright) FROM %s WHERE time_s >= %ld", BATTERY_MONITOR_GBL_BR_STAT_TABLE, duration);
+               hstmt = bm_prepare_query(bm_db_handle, query);
+               if (bm_db_err_code(bm_db_handle) == SQLITE_PERM) {
+                       _ERR("Access failed(%s)", bm_db_err_msg(bm_db_handle));
+                       error_code = BATTERY_MONITOR_ERROR_PERMISSION_DENIED;
+                       return error_code;
+               }
+               rc = bm_query_step(hstmt);
+               BM_CATCH_ERROR(rc == SQLITE_ROW, {}, BATTERY_MONITOR_ERROR_RECORD_NOT_FOUND, ("The record isn't found.\n"));
+               bm_convert_column_to_gl_sbr_stat(hstmt, str_data);
+               break;
+       case 4:
+               _DBG("GSGT_DATA");
+               BM_SNPRINTF(query, sizeof(query), "SELECT sum(scan_time), sum(none_time), sum(poor_time), \
+                               sum(med_time), sum(good_time), sum(grt_time) FROM %s WHERE time_s >= %ld", BATTERY_MONITOR_GBL_SGT_STAT_TABLE, duration);
+               hstmt = bm_prepare_query(bm_db_handle, query);
+               if (bm_db_err_code(bm_db_handle) == SQLITE_PERM) {
+                       _ERR("Access failed(%s)", bm_db_err_msg(bm_db_handle));
+                       error_code = BATTERY_MONITOR_ERROR_PERMISSION_DENIED;
+                       return error_code;
+               }
+               rc = bm_query_step(hstmt);
+               BM_CATCH_ERROR(rc == SQLITE_ROW, {}, BATTERY_MONITOR_ERROR_RECORD_NOT_FOUND, ("The record isn't found.\n"));
+               bm_convert_column_to_gl_sgt_stat(hstmt, str_data);
+               break;
+       case 5:
+               _DBG("GWST_DATA");
+               BM_SNPRINTF(query, sizeof(query), "SELECT sum(wscan_time), sum(wnone_time), sum(wpoor_time), \
+                               sum(wmed_time), sum(wgood_time), sum(wgrt_time) FROM %s WHERE time_s >= %ld", BATTERY_MONITOR_GBL_WST_STAT_TABLE, duration);
+               hstmt = bm_prepare_query(bm_db_handle, query);
+               if (bm_db_err_code(bm_db_handle) == SQLITE_PERM) {
+                       _ERR("Access failed(%s)", bm_db_err_msg(bm_db_handle));
+                       error_code = BATTERY_MONITOR_ERROR_PERMISSION_DENIED;
+                       return error_code;
+               }
+               rc = bm_query_step(hstmt);
+               BM_CATCH_ERROR(rc == SQLITE_ROW, {}, BATTERY_MONITOR_ERROR_RECORD_NOT_FOUND, ("The record isn't found.\n"));
+               bm_convert_column_to_gl_wst_stat(hstmt, str_data);
+               break;
+       case 6:
+               _DBG("GBST_DATA");
+               BM_SNPRINTF(query, sizeof(query), "SELECT sum(off_time), sum(low_time), sum(med_time), \
+               sum(high_time) FROM %s WHERE time_s >= %ld", BATTERY_MONITOR_GBL_BST_STAT_TABLE, duration);
+               hstmt = bm_prepare_query(bm_db_handle, query);
+               if (bm_db_err_code(bm_db_handle) == SQLITE_PERM) {
+                       _ERR("Access failed(%s)", bm_db_err_msg(bm_db_handle));
+                       error_code = BATTERY_MONITOR_ERROR_PERMISSION_DENIED;
+                       return error_code;
+               }
+               rc = bm_query_step(hstmt);
+               BM_CATCH_ERROR(rc == SQLITE_ROW, {}, BATTERY_MONITOR_ERROR_RECORD_NOT_FOUND, ("The record isn't found.\n"));
+               bm_convert_column_to_gl_bst_stat(hstmt, str_data);
+               break;
+       default:
+               break;
+       }
+
+       rc = bm_query_finalize(hstmt);
+       BM_CATCH_ERROR((rc == BATTERY_MONITOR_ERROR_NONE), {}, rc, ("finalize error"));
+       hstmt = NULL;
+       error_code = BATTERY_MONITOR_ERROR_NONE;
+CATCH:
+       if (hstmt != NULL) {
+       rc = bm_query_finalize(hstmt);
+               if (rc != BATTERY_MONITOR_ERROR_NONE) {
+                       error_code = rc;
+                       _ERR("finalize error");
+               }
+       hstmt = NULL;
+       }
+       if ((error_code != BATTERY_MONITOR_ERROR_NONE) && str_data) {
+               BM_FREE(str_data);
+               str_data = NULL;
+       }
+       if ((error_code == BATTERY_MONITOR_ERROR_NONE) && str_data != NULL) {
+               _INFO("Returning Battery Stat");
+               return error_code;
+       }
+
+       EXIT;
+       return error_code;
+}
+
 static resourceid_usage_s* bm_query_usage_by_resourceid(sqlite3 *bm_db_handle, const char *resource_id, int *error_code, int period_type)
 {
        ENTER;
 
        long int duration  = 0;
        duration = bm_get_time_bias(period_type);
-
        if (duration == 0) {
                _ERR("Invalid period_type [%d]", period_type);
                return NULL;
@@ -1348,17 +1665,13 @@ static resourceid_usage_s* bm_query_usage_by_resourceid(sqlite3 *bm_db_handle, c
 
        BM_RETURN_VAL((resource_id != NULL), { *error_code = BATTERY_MONITOR_ERROR_INVALID_PARAMETER; },
                                        NULL, ("RESOURCE ID IS NULL"));
-
        BM_RETURN_VAL((bm_db_handle != NULL), { *error_code = BATTERY_MONITOR_ERROR_DB_NOT_OPENED; },
                                        NULL, ("The database isn't connected."));
-
        BM_MEMSET(query, 0x00, BATTERY_MONITOR_SQL_LEN_MAX);
-
        BM_SNPRINTF(query, sizeof(query), "SELECT ResourceId, sum(usage) FROM %s WHERE ResourceId = '%s' \
                        AND log_time >= %ld", BATTERY_MONITOR_RESOURCE_ID_USAGE_TABLE, resource_id, duration);
 
        hstmt = bm_prepare_query(bm_db_handle, query);
-
        if (bm_db_err_code(bm_db_handle) == SQLITE_PERM) {
                _ERR("Access failed(%s)", bm_db_err_msg(bm_db_handle));
                *error_code = BATTERY_MONITOR_ERROR_PERMISSION_DENIED;
@@ -1399,12 +1712,10 @@ CATCH:
                }
                hstmt = NULL;
        }
-
        if ((*error_code != BATTERY_MONITOR_ERROR_NONE) && bm_resource_type) {
                BM_FREE(bm_resource_type);
                bm_resource_type = NULL;
        }
-
        if ((*error_code == BATTERY_MONITOR_ERROR_NONE) && bm_resource_type != NULL) {
                _INFO("Returning appid usage");
                return bm_resource_type;
@@ -1488,7 +1799,6 @@ static int bm_delete_table_by_app_id(sqlite3 *bm_db_handle, const char *AppId)
                _ERR("Access failed(%s)", bm_db_err_msg(bm_db_handle));
                return BATTERY_MONITOR_ERROR_PERMISSION_DENIED;
        }
-
        if (count <= 0) {
                BM_SLOGE("App ID(%s) is not exist. count(%d)\n", AppId, count);
                return BATTERY_MONITOR_ERROR_RECORD_NOT_FOUND;
@@ -1762,6 +2072,20 @@ resourceid_usage_s *bm_server_query_resource_usage_resourceid(const char *resour
        return bm_resource_type;
 }
 
+GSList* bm_server_query_appid_map(int *error_code)
+{
+       ENTER;
+
+       GSList *list = NULL;
+       *error_code = BATTERY_MONITOR_ERROR_NONE;
+
+       BM_RETURN_VAL((g_hBatteryMonitorDB != NULL), { *error_code = BATTERY_MONITOR_ERROR_DB_NOT_OPENED; }, NULL, ("The database isn't connected."));
+       list = bm_query_appid_map(g_hBatteryMonitorDB, error_code);
+
+       EXIT;
+       return list;
+}
+
 int bm_server_delete_table_by_appid(const char* app_id)
 {
        ENTER;
@@ -1879,7 +2203,7 @@ int bm_server_delete_table_by_time_interval(void)
        return BATTERY_MONITOR_ERROR_NONE;
 }
 
-// Battery Dump DB Operations
+/* Battery Dump DB Operations */
 int bm_server_battery_dump_insert_to_db(void *str_data, int type)
 {
        ENTER;
@@ -1923,12 +2247,17 @@ int bm_server_battery_dump_insert_to_db(void *str_data, int type)
        return BATTERY_MONITOR_ERROR_NONE;
 }
 
-int bm_server_battery_dump_query_from_db(void *str_data, int type)
+int bm_server_battery_dump_query_from_db(void *str_data, int type, long int duration)
 {
        ENTER;
+       int ret = BATTERY_MONITOR_ERROR_NONE;
+
+       BM_RETURN_VAL((g_hBatteryMonitorDB != NULL), { ret = BATTERY_MONITOR_ERROR_DB_NOT_OPENED; }, ret, ("The database isn't connected."));
+       BM_RETURN_VAL((str_data != NULL), { ret  = BATTERY_MONITOR_ERROR_INVALID_PARAMETER; }, ret, ("The Battery Dump Handle is NULL"));
+       ret = bm_battery_stat_query_from_db(g_hBatteryMonitorDB, str_data, type, duration);
 
        EXIT;
-       return BATTERY_MONITOR_ERROR_NONE;
+       return ret;
 }
 
 int initialize_database(void)
index f4976e4..39b668b 100644 (file)
@@ -800,3 +800,21 @@ void bm_set_free_data_handles(bm_feature_data_h data_h)
        return;
 }
 
+void bm_set_free_gslist_appid_map(GSList *list)
+{
+       ENTER;
+       if (!list)
+               return;
+
+       GSList *iter;
+       for (iter = list; iter != NULL; iter = g_slist_next(iter)) {
+               appid_map_s *amap_data = (appid_map_s *)iter->data;
+               BM_FREE(amap_data->AppId);
+               BM_FREE(amap_data);
+       }
+       g_slist_free(list);
+       list = NULL;
+
+       EXIT;
+       return;
+}