Fix svace issue
[platform/core/telephony/tel-plugin-database.git] / src / database_main.c
index 707358d..0b21d2e 100644 (file)
@@ -25,7 +25,8 @@
 #include <strings.h>
 
 #include <glib.h>
-#include <db-util.h>
+#include <sqlite3.h>
+#include <unistd.h>
 
 #include <tcore.h>
 #include <server.h>
 #define PLUGIN_VERSION 1
 #endif
 
+#define BUSY_WAITING_USEC 50000 /* 0.05 sec */
+#define BUSY_WAITING_MAX 20 /* wait for max 1 sec */
+
+
 static gboolean __update_query_database(Storage *strg, void *handle, const char *query, GHashTable *in_param)
 {
        int rv = 0;
@@ -83,7 +88,7 @@ static gboolean __update_query_database(Storage *strg, void *handle, const char
        }
 
        rv = sqlite3_step(stmt);
-       dbg("query executed (%d)", rv);
+       dbg("update query executed (%d)", rv);
        sqlite3_finalize(stmt);
 
        if (rv != SQLITE_DONE)
@@ -92,14 +97,37 @@ static gboolean __update_query_database(Storage *strg, void *handle, const char
        return TRUE;
 }
 
+static int _busy_handler(void *pData, int count)
+{
+        if (count < BUSY_WAITING_MAX) {
+               usleep(BUSY_WAITING_USEC);
+               return 1;
+       }
+
+       dbg("Busy Handler will be returned SQLITE_BUSY error\n");
+       return 0;
+}
+
 static void *create_handle(Storage *strg, const char *path)
 {
        int rv = 0;
        sqlite3 *handle = NULL;
 
-       rv = db_util_open(path, &handle, 0);
+       if (path == NULL) {
+               err("Invalid input param error");
+               return NULL;
+       }
+
+       rv = sqlite3_open(path, &handle);
+       if (rv != SQLITE_OK) {
+               err("fail to connect database err(%d), errmsg(%s)", rv, sqlite3_errmsg(handle));
+               return NULL;
+       }
+
+       rv = sqlite3_busy_handler(handle, _busy_handler, NULL);
        if (rv != SQLITE_OK) {
-               err("fail to connect database err(%d)", rv);
+               err("fail to register busy handler err(%d), errmsg(%s)", rv, sqlite3_errmsg(handle));
+               sqlite3_close(handle);
                return NULL;
        }
 
@@ -114,7 +142,7 @@ static gboolean remove_handle(Storage *strg, void *handle)
        if (!handle)
                return FALSE;
 
-       rv = db_util_close(handle);
+       rv = sqlite3_close(handle);
        if (rv != SQLITE_OK) {
                err("fail to close database err(%d)", rv);
                handle = NULL;
@@ -192,7 +220,7 @@ static gboolean _read_query_database_internal(Storage *strg, void *handle, const
                out_param_data = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free);
 
                for (local_index = 0; local_index < out_param_cnt; local_index++) {
-                       char tmp_key[10];
+                       char tmp_key[32];
                        const unsigned char *tmp;
                        tmp = sqlite3_column_text(stmt, local_index);
                        snprintf(tmp_key, sizeof(tmp_key), "%d", local_index);
@@ -203,7 +231,7 @@ static gboolean _read_query_database_internal(Storage *strg, void *handle, const
                        GSList **temp = out_param;
                        *temp = g_slist_append(*temp, out_param_data);
                } else {
-                       char tmp_key_outter[10];
+                       char tmp_key_outter[32];
                        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);
                }