DB : modify the prototyping
authorJin Yoon <jinny.yoon@samsung.com>
Wed, 3 Jun 2015 09:20:29 +0000 (18:20 +0900)
committerJin Yoon <jinny.yoon@samsung.com>
Wed, 3 Jun 2015 09:20:29 +0000 (18:20 +0900)
inc/db.h
src/db.c

index 279a6e3..bdc2793 100644 (file)
--- a/inc/db.h
+++ b/inc/db.h
 #include <sqlite3.h>
 #include "util.h"
 
-extern appl_error_e db_open(void);
-extern void db_close(void);
+HAPI sqlite3 *db_open(void);
+HAPI void db_close(sqlite3 *db);
 
-extern sqlite3_stmt *db_prepare(const char *query);
-extern appl_error_e db_next(sqlite3_stmt *stmt);
-extern appl_error_e db_reset(sqlite3_stmt *stmt);
+HAPI sqlite3_stmt *db_prepare(sqlite3 *db, const char *query);
+HAPI appl_error_e db_next(sqlite3 *db, sqlite3_stmt *stmt);
+HAPI appl_error_e db_reset(sqlite3 *db, sqlite3_stmt *stmt);
 
-extern appl_error_e db_bind_bool(sqlite3_stmt *stmt, int idx, bool value);
-extern appl_error_e db_bind_int(sqlite3_stmt *stmt, int idx, int value);
-extern appl_error_e db_bind_double(sqlite3_stmt *stmt, int idx, double value);
-extern appl_error_e db_bind_str(sqlite3_stmt *stmt, int idx, const char *str);
+HAPI appl_error_e db_bind_bool(sqlite3 *db, sqlite3_stmt *stmt, int idx, bool value);
+HAPI appl_error_e db_bind_int(sqlite3 *db, sqlite3_stmt *stmt, int idx, int value);
+HAPI appl_error_e db_bind_double(sqlite3 *db, sqlite3_stmt *stmt, int idx, double value);
+HAPI appl_error_e db_bind_str(sqlite3 *db, sqlite3_stmt *stmt, int idx, const char *str);
 
-extern bool db_get_bool(sqlite3_stmt *stmt, int index);
-extern int db_get_int(sqlite3_stmt *stmt, int index);
-extern int db_get_double(sqlite3_stmt *stmt, int index);
-extern const char *db_get_str(sqlite3_stmt *stmt, int index);
+HAPI bool db_get_bool(sqlite3_stmt *stmt, int index);
+HAPI int db_get_int(sqlite3_stmt *stmt, int index);
+HAPI int db_get_double(sqlite3_stmt *stmt, int index);
+HAPI const char *db_get_str(sqlite3_stmt *stmt, int index);
 
-extern appl_error_e db_finalize(sqlite3_stmt *stmt);
-extern appl_error_e db_exec(const char *query);
+HAPI appl_error_e db_finalize(sqlite3 *db, sqlite3_stmt *stmt);
+HAPI appl_error_e db_exec(sqlite3 *db, const char *query);
 
-extern appl_error_e db_begin_transaction(void);
-extern appl_error_e db_end_transaction(void);
+HAPI appl_error_e db_begin_transaction(sqlite3 *db);
+HAPI appl_error_e db_end_transaction(sqlite3 *db);
 
-extern appl_error_e db_create_table(void);
-extern appl_error_e db_drop_table(void);
+HAPI appl_error_e db_drop_table(sqlite3 *db);
+HAPI appl_error_e db_create_table(sqlite3 *db);
 
-extern appl_error_e db_insert_version(int version);
-extern appl_error_e db_remove_version(int version);
-extern appl_error_e db_update_version(int version);
-extern appl_error_e db_count_version(void);
+HAPI appl_error_e db_insert_version(sqlite3 *db, int version);
+HAPI appl_error_e db_remove_version(sqlite3 *db, int version);
+HAPI appl_error_e db_update_version(sqlite3 *db, int version);
+HAPI appl_error_e db_count_version(sqlite3 *db);
 
 #endif // __ADVENTURE_DB_H__
index 2ab79e0..bec0518 100644 (file)
--- a/src/db.c
+++ b/src/db.c
 
 
 
-static struct {
-       sqlite3 *db;
-} db_info = {
-       .db = NULL,
-};
 
-
-
-HAPI appl_error_e db_open(void)
+HAPI sqlite3 *db_open(void)
 {
+       sqlite3 *db = NULL;
        char *path = NULL;
        char db_file[FILE_LEN] = {0, };
        int ret = SQLITE_OK;
@@ -50,42 +44,37 @@ HAPI appl_error_e db_open(void)
        
        snprintf(db_file, sizeof(db_file), "%s/%s", path, APP_DB_FILE);
 
-       ret = sqlite3_open(db_file, &db_info.db);
+       ret = sqlite3_open(db_file, &db);
        if (SQLITE_OK != ret) {
-               _E("%s", sqlite3_errmsg(db_info.db));
+               _E("%s", sqlite3_errmsg(db));
                free(path);
-               return APPL_ERROR_FAIL;
+               return NULL;
        }
 
        free(path);
-       return APPL_ERROR_NONE;
+       return db;
 }
 
 
 
-HAPI void db_close(void)
+HAPI void db_close(sqlite3 *db)
 {
-       if (!db_info.db) {
-               _D("DB is already NULL");
-               return;
-       }
-
-       sqlite3_close(db_info.db);
-       db_info.db = NULL;
+       ret_if(!db);
+       sqlite3_close(db);
 }
 
 
 
-HAPI sqlite3_stmt *db_prepare(const char *query)
+HAPI sqlite3_stmt *db_prepare(sqlite3 *db, const char *query)
 {
        sqlite3_stmt *stmt = NULL;
        int ret = SQLITE_OK;
 
        retv_if(!query, NULL);
 
-       ret = sqlite3_prepare_v2(db_info.db, query, strlen(query), &stmt, NULL);
+       ret = sqlite3_prepare_v2(db, query, strlen(query), &stmt, NULL);
        if (SQLITE_OK != ret) {
-               _E("%s, %s", query, sqlite3_errmsg(db_info.db));
+               _E("%s, %s", query, sqlite3_errmsg(db));
                return NULL;
        }
 
@@ -94,7 +83,7 @@ HAPI sqlite3_stmt *db_prepare(const char *query)
 
 
 
-HAPI appl_error_e db_next(sqlite3_stmt *stmt)
+HAPI appl_error_e db_next(sqlite3 *db, sqlite3_stmt *stmt)
 {
        int ret = SQLITE_OK;
 
@@ -107,7 +96,7 @@ HAPI appl_error_e db_next(sqlite3_stmt *stmt)
        case SQLITE_DONE:
                return APPL_ERROR_NO_DATA;
        default:
-               _E("%s", sqlite3_errmsg(db_info.db));
+               _E("%s", sqlite3_errmsg(db));
                return APPL_ERROR_FAIL;
        }
 
@@ -116,7 +105,7 @@ HAPI appl_error_e db_next(sqlite3_stmt *stmt)
 
 
 
-HAPI appl_error_e db_reset(sqlite3_stmt *stmt)
+HAPI appl_error_e db_reset(sqlite3 *db, sqlite3_stmt *stmt)
 {
        int ret = SQLITE_OK;
 
@@ -124,7 +113,7 @@ HAPI appl_error_e db_reset(sqlite3_stmt *stmt)
 
        ret = sqlite3_reset(stmt);
        if (SQLITE_OK != ret) {
-               _E("%s", sqlite3_errmsg(db_info.db));
+               _E("%s", sqlite3_errmsg(db));
                return APPL_ERROR_FAIL;
        }
 
@@ -135,7 +124,7 @@ HAPI appl_error_e db_reset(sqlite3_stmt *stmt)
 
 
 
-HAPI appl_error_e db_bind_bool(sqlite3_stmt *stmt, int idx, bool value)
+HAPI appl_error_e db_bind_bool(sqlite3 *db, sqlite3_stmt *stmt, int idx, bool value)
 {
        int ret = SQLITE_OK;
 
@@ -143,7 +132,7 @@ HAPI appl_error_e db_bind_bool(sqlite3_stmt *stmt, int idx, bool value)
 
        ret = sqlite3_bind_int(stmt, idx, (int) value);
        if (SQLITE_OK != ret) {
-               _E("%s", sqlite3_errmsg(db_info.db));
+               _E("%s", sqlite3_errmsg(db));
                return APPL_ERROR_FAIL;
        }
 
@@ -152,7 +141,7 @@ HAPI appl_error_e db_bind_bool(sqlite3_stmt *stmt, int idx, bool value)
 
 
 
-HAPI appl_error_e db_bind_int(sqlite3_stmt *stmt, int idx, int value)
+HAPI appl_error_e db_bind_int(sqlite3 *db, sqlite3_stmt *stmt, int idx, int value)
 {
        int ret = SQLITE_OK;
 
@@ -160,7 +149,7 @@ HAPI appl_error_e db_bind_int(sqlite3_stmt *stmt, int idx, int value)
 
        ret = sqlite3_bind_int(stmt, idx, value);
        if (SQLITE_OK != ret) {
-               _E("%s", sqlite3_errmsg(db_info.db));
+               _E("%s", sqlite3_errmsg(db));
                return APPL_ERROR_FAIL;
        }
 
@@ -169,7 +158,7 @@ HAPI appl_error_e db_bind_int(sqlite3_stmt *stmt, int idx, int value)
 
 
 
-HAPI appl_error_e db_bind_double(sqlite3_stmt *stmt, int idx, double value)
+HAPI appl_error_e db_bind_double(sqlite3 *db, sqlite3_stmt *stmt, int idx, double value)
 {
        int ret = SQLITE_OK;
 
@@ -177,7 +166,7 @@ HAPI appl_error_e db_bind_double(sqlite3_stmt *stmt, int idx, double value)
 
        ret = sqlite3_bind_double(stmt, idx, value);
        if (SQLITE_OK != ret) {
-               _E("%s", sqlite3_errmsg(db_info.db));
+               _E("%s", sqlite3_errmsg(db));
                return APPL_ERROR_FAIL;
        }
 
@@ -186,7 +175,7 @@ HAPI appl_error_e db_bind_double(sqlite3_stmt *stmt, int idx, double value)
 
 
 
-HAPI appl_error_e db_bind_str(sqlite3_stmt *stmt, int idx, const char *str)
+HAPI appl_error_e db_bind_str(sqlite3 *db, sqlite3_stmt *stmt, int idx, const char *str)
 {
        int ret = SQLITE_OK;
 
@@ -195,7 +184,7 @@ HAPI appl_error_e db_bind_str(sqlite3_stmt *stmt, int idx, const char *str)
 
        ret = sqlite3_bind_text(stmt, idx, str, strlen(str), SQLITE_TRANSIENT);
        if (SQLITE_OK != ret) {
-               _E("%s", sqlite3_errmsg(db_info.db));
+               _E("%s", sqlite3_errmsg(db));
                return APPL_ERROR_FAIL;
        }
 
@@ -236,7 +225,7 @@ HAPI const char *db_get_str(sqlite3_stmt *stmt, int index)
 
 
 
-HAPI appl_error_e db_finalize(sqlite3_stmt *stmt)
+HAPI appl_error_e db_finalize(sqlite3 *db, sqlite3_stmt *stmt)
 {
        int ret = SQLITE_OK;
 
@@ -244,7 +233,7 @@ HAPI appl_error_e db_finalize(sqlite3_stmt *stmt)
 
        ret = sqlite3_finalize(stmt);
        if (SQLITE_OK != ret) {
-               _E("%s", sqlite3_errmsg(db_info.db));
+               _E("%s", sqlite3_errmsg(db));
                return APPL_ERROR_FAIL;
        }
 
@@ -253,33 +242,33 @@ HAPI appl_error_e db_finalize(sqlite3_stmt *stmt)
 
 
 
-HAPI appl_error_e db_exec(const char *query)
+HAPI appl_error_e db_exec(sqlite3 *db, const char *query)
 {
        sqlite3_stmt *stmt = NULL;
 
        retv_if(!query, APPL_ERROR_INVALID_PARAMETER);
 
-       stmt = db_prepare(query);
+       stmt = db_prepare(db, query);
        retv_if(!stmt, APPL_ERROR_FAIL);
 
-       goto_if(APPL_ERROR_FAIL == db_next(stmt), ERROR);
-       goto_if(APPL_ERROR_FAIL == db_finalize(stmt), ERROR);
+       goto_if(APPL_ERROR_FAIL == db_next(db, stmt), ERROR);
+       goto_if(APPL_ERROR_FAIL == db_finalize(db, stmt), ERROR);
 
        return APPL_ERROR_NONE;
 
 ERROR:
-       if (stmt) db_finalize(stmt);
+       if (stmt) db_finalize(db, stmt);
        return APPL_ERROR_FAIL;
 }
 
 
 
-HAPI appl_error_e db_begin_transaction(void)
+HAPI appl_error_e db_begin_transaction(sqlite3 *db)
 {
        int ret = SQLITE_BUSY;
 
        while (1) {
-               ret = sqlite3_exec(db_info.db, "BEGIN IMMEDIATE TRANSACTION", NULL, NULL, NULL);
+               ret = sqlite3_exec(db, "BEGIN IMMEDIATE TRANSACTION", NULL, NULL, NULL);
                if (SQLITE_BUSY != ret) {
                        break;
                }
@@ -297,12 +286,12 @@ HAPI appl_error_e db_begin_transaction(void)
 
 
 
-HAPI appl_error_e db_end_transaction(void)
+HAPI appl_error_e db_end_transaction(sqlite3 *db)
 {
        int ret = SQLITE_OK;
 
        while (1) {
-               ret = sqlite3_exec(db_info.db, "COMMIT TRANSACTION", NULL, NULL, NULL);
+               ret = sqlite3_exec(db, "COMMIT TRANSACTION", NULL, NULL, NULL);
                if (SQLITE_BUSY != ret) {
                        break;
                }
@@ -320,7 +309,7 @@ HAPI appl_error_e db_end_transaction(void)
 
 
 
-HAPI appl_error_e db_create_table(void)
+HAPI appl_error_e db_create_table(sqlite3 *db)
 {
        const char *TABLES[] = {
                "CREATE TABLE IF NOT EXIST db_checksum (version INT);",
@@ -374,13 +363,13 @@ HAPI appl_error_e db_create_table(void)
                        ", name TEXT"
                        ");",
        };
+       int count = 0;
        int i = 0;
 
-       retv_if(APPL_ERROR_NONE != db_open(), APPL_ERROR_FAIL);
-
-       for (; i < sizeof(char *) / sizeof(TABLES); i++) {
+       count = sizeof(TABLES) / sizeof(char *);
+       for (; i < count; i++) {
                _D("Create a table[%s]", TABLES[i]);
-               break_if(db_exec(TABLES[i]) != APPL_ERROR_NONE);
+               break_if(db_exec(db, TABLES[i]) != APPL_ERROR_NONE);
        }
 
        return APPL_ERROR_FAIL;
@@ -388,7 +377,7 @@ HAPI appl_error_e db_create_table(void)
 
 
 
-HAPI appl_error_e db_drop_table(void)
+HAPI appl_error_e db_drop_table(sqlite3 *db)
 {
        const char *TABLES[] = {
                "DROP TABLE IF EXIST db_checksum;",
@@ -399,12 +388,12 @@ HAPI appl_error_e db_drop_table(void)
                "DROP TABLE IF EXIST purchase;",
                "DROP TABLE IF EXIST user;",
        };
+       int count = 0;
        int i = 0;
 
-       retv_if(APPL_ERROR_NONE != db_open(), APPL_ERROR_FAIL);
-
-       for (; i < sizeof(char *) / sizeof(TABLES); i++) {
-               _D("Create a table[%s]", TABLES[i]);
+       count = sizeof(TABLES) / sizeof(char *);
+       for (; i < count; i++) {
+               _D("Drop a table[%s]", TABLES[i]);
                break_if(db_exec(TABLES[i]) != APPL_ERROR_NONE);
        }
 
@@ -413,17 +402,15 @@ HAPI appl_error_e db_drop_table(void)
 
 
 
-HAPI appl_error_e db_insert_version(int version)
+HAPI appl_error_e db_insert_version(sqlite3 *db, int version)
 {
        const char *QUERY_SYNTAX = "INSERT INTO db_checksum (version) values (%d);";
        char *query = NULL;
 
-       retv_if(APPL_ERROR_NONE != db_open(), APPL_ERROR_FAIL);
-
        query = sqlite3_mprintf(QUERY_SYNTAX, version);
        retv_if(!query, APPL_ERROR_FAIL);
 
-       if (db_exec(query) != APPL_ERROR_NONE) {
+       if (db_exec(db, query) != APPL_ERROR_NONE) {
                _E("Cannot execute query.[%s]", query);
                sqlite3_free(query);
                return APPL_ERROR_FAIL;
@@ -438,17 +425,15 @@ HAPI appl_error_e db_insert_version(int version)
 
 
 
-HAPI appl_error_e db_remove_version(int version)
+HAPI appl_error_e db_remove_version(sqlite3 *db, int version)
 {
        const char *QUERY_SYNTAX = "DELETE FROM db_checksum WHERE version=%d;";
        char *query = NULL;
 
-       retv_if(APPL_ERROR_NONE != db_open(), APPL_ERROR_FAIL);
-
        query = sqlite3_mprintf(QUERY_SYNTAX, version);
        retv_if(!query, APPL_ERROR_FAIL);
 
-       if (db_exec(query) != APPL_ERROR_NONE) {
+       if (db_exec(db, query) != APPL_ERROR_NONE) {
                _E("Cannot execute query.[%s]", query);
                sqlite3_free(query);
                return APPL_ERROR_FAIL;
@@ -463,17 +448,15 @@ HAPI appl_error_e db_remove_version(int version)
 
 
 
-HAPI appl_error_e db_update_version(int version)
+HAPI appl_error_e db_update_version(sqlite3 *db, int version)
 {
        const char *QUERY_SYNTAX = "UPDATE db_checksum SET version=%d;";
        char *query = NULL;
 
-       retv_if(APPL_ERROR_NONE != db_open(), APPL_ERROR_FAIL);
-
        query = sqlite3_mprintf(QUERY_SYNTAX, version);
        retv_if(!query, APPL_ERROR_FAIL);
 
-       if (db_exec(query) != APPL_ERROR_NONE) {
+       if (db_exec(db, query) != APPL_ERROR_NONE) {
                _E("Cannot execute query.[%s]", query);
                sqlite3_free(query);
                return APPL_ERROR_FAIL;
@@ -488,26 +471,24 @@ HAPI appl_error_e db_update_version(int version)
 
 
 
-HAPI appl_error_e db_count_version(void)
+HAPI appl_error_e db_count_version(sqlite3 *db)
 {
        const char *QUERY_SYNTAX = "SELECT COUNT(*) FROM db_checksum;";
        sqlite3_stmt *st = NULL;
        int count = 0;
 
-       retv_if(APPL_ERROR_NONE != db_open(), APPL_ERROR_FAIL);
-
-       st = db_prepare(QUERY_SYNTAX);
+       st = db_prepare(db, QUERY_SYNTAX);
        retv_if(!st, APPL_ERROR_FAIL);
 
-       if (db_next(st) == APPL_ERROR_FAIL) {
+       if (db_next(db, st) == APPL_ERROR_FAIL) {
                _E("db_next error");
-               db_finalize(st);
+               db_finalize(db, st);
                return -1;
        }
 
        count = db_get_int(st, 0);
-       db_reset(st);
-       db_finalize(st);
+       db_reset(db, st);
+       db_finalize(db, st);
 
        /* keep the home DB opened */