tizen 2.3 release
[apps/home/ug-nfc-efl.git] / ug-nfc-setting-efl / src / ug-nfc-setting-db.c
1 /*
2   * Copyright (c) 2012, 2013 Samsung Electronics Co., Ltd.
3   *
4   * Licensed under the Flora License, Version 1.0 (the "License");
5   * you may not use this file except in compliance with the License.
6   * You may obtain a copy of the License at
7
8   *     http://floralicense.org/license/
9   *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16
17
18 #include "ug-nfc-setting-main.h"
19 #include "ug-nfc-setting-db.h"
20
21
22 #define DB_FILE_PATH                    "/opt/dbspace/.net-nfcpush.db"
23 #define DB_TABLE_NAME                   "NfcPushMsgTable"
24
25 /* sqlite> .schema              */
26 /* CREATE TABLE NfcPushMsgTable ( AppId TEXT PRIMARY KEY, PkgName TEXT, IconPath TEXT, MsgDesc TEXT ); */
27
28 #define DB_QUERY_LEN                    512
29
30 static sqlite3 *g_predefined_item_db;
31 static sqlite3_stmt *g_predefined_item_pstmt;
32
33
34 static void _db_finalize_statement(void)
35 {
36         int db_ret = SQLITE_OK;
37
38         if (g_predefined_item_pstmt != NULL)
39         {
40                 db_ret = sqlite3_finalize(g_predefined_item_pstmt);
41                 g_predefined_item_pstmt = NULL;
42
43                 if(db_ret != SQLITE_OK)
44                 {
45                         LOGE("Failed to sqlite3_finalize error[%d]", db_ret);
46                 }
47         }
48 }
49
50
51 int _ug_nfc_setting_db_open(void)
52 {
53         int db_ret = SQLITE_OK;
54
55         db_ret = sqlite3_open(DB_FILE_PATH, &g_predefined_item_db);
56         if(db_ret != SQLITE_OK)
57         {
58                 LOGE("Failed to open database. error[%d]", db_ret);
59         }
60
61         return db_ret;
62 }
63
64 int _ug_nfc_setting_db_close(void)
65 {
66         int db_ret = SQLITE_OK;
67
68         if (g_predefined_item_db != NULL)
69         {
70                 db_ret = sqlite3_close(g_predefined_item_db);
71                 if(db_ret != SQLITE_OK)
72                 {
73                         LOGE("Failed to close database. error[%d]", db_ret);
74                         return db_ret;
75                 }
76                 g_predefined_item_db = NULL;
77         }
78
79         return db_ret;
80 }
81
82 int _ug_nfc_setting_db_open_table(int *table_handle)
83 {
84         int db_ret = SQLITE_OK;
85         int count = 0;
86
87         /* get num_of_index */
88         _ug_nfc_setting_db_get_count(&count);
89
90         if (count > 0)
91         {
92                 char query[DB_QUERY_LEN] = { 0, };
93                 sqlite3_stmt *stmt = NULL;
94
95                 snprintf(query, DB_QUERY_LEN, "select * from %s", DB_TABLE_NAME);
96                 //LOGD("query [%s]", query);
97
98                 db_ret = sqlite3_prepare_v2(g_predefined_item_db, query, strlen(query), &stmt, NULL);
99                 if (db_ret != SQLITE_OK)
100                 {
101                         LOGE("Failed to sqlite3_prepare_v2 error[%d]", db_ret);
102                         if (g_predefined_item_pstmt != NULL)
103                         {
104                                 db_ret = sqlite3_finalize(stmt);
105                                 stmt = NULL;
106                                 if(db_ret != SQLITE_OK)
107                                 {
108                                         LOGE("Failed to sqlite3_finalize error[%d]", db_ret);
109                                 }
110                         }
111                         return db_ret;
112                 }
113
114                 *table_handle = (int)stmt;
115         }
116         else
117         {
118                 LOGE("no item");
119                 db_ret = SQLITE_ERROR;
120         }
121
122         return db_ret;
123 }
124
125 int _ug_nfc_setting_db_get_count(int *count)
126 {
127         int db_ret = SQLITE_OK;
128         char query[DB_QUERY_LEN] = { 0, };
129
130         snprintf(query, DB_QUERY_LEN,
131                         "select count(AppId) from %s ",
132                         DB_TABLE_NAME);
133         //LOGD("query [%s]", query);
134
135         db_ret = sqlite3_prepare_v2(g_predefined_item_db, query, strlen(query), &g_predefined_item_pstmt, NULL);
136         if (db_ret != SQLITE_OK)
137         {
138                 LOGE("Failed to sqlite3_prepare_v2 error[%d]", db_ret);
139                 _db_finalize_statement();
140                 return db_ret;
141         }
142
143         db_ret = sqlite3_step(g_predefined_item_pstmt);
144         if (db_ret != SQLITE_ROW)
145         {
146                 LOGE("Failed to sqlite3_step error[%d]", db_ret);
147                 _db_finalize_statement();
148                 return db_ret;
149         }
150
151         *count = sqlite3_column_int(g_predefined_item_pstmt, 0);
152
153         _db_finalize_statement();
154
155         return db_ret;
156 }
157
158 int _ug_nfc_setting_db_get_next_record(int table_handle,
159                                         char **app_id, char **pkgName,
160                                         char **iconPath, char **msgDes)
161 {
162         int db_ret = SQLITE_OK;
163         sqlite3_stmt *stmt = NULL;
164
165         stmt = (sqlite3_stmt *)table_handle;
166         if (stmt == NULL)
167         {
168                 return -1;
169         }
170
171         db_ret = sqlite3_step(stmt);
172         if (db_ret != SQLITE_DONE)
173         {
174                 if ((char *)sqlite3_column_text(stmt, 0) != NULL)
175                         *app_id = strdup((char *)sqlite3_column_text(stmt, 0));
176                 if ((char *)sqlite3_column_text(stmt, 1) != NULL)
177                         *pkgName = strdup((char *)sqlite3_column_text(stmt, 1));
178                 if ((char *)sqlite3_column_text(stmt, 2) != NULL)
179                         *iconPath = strdup((char *)sqlite3_column_text(stmt, 2));
180                 if ((char *)sqlite3_column_text(stmt, 3) != NULL)
181                         *msgDes = strdup((char *)sqlite3_column_text(stmt, 3));
182         }
183
184         return SQLITE_OK;
185 }
186
187 int _ug_nfc_setting_db_get_pkgName(char *app_id, char **pkgName)
188 {
189         int db_ret = SQLITE_OK;
190         char query[DB_QUERY_LEN] = { 0, };
191
192         snprintf(query, DB_QUERY_LEN,
193                         "select PkgName from %s where AppId =\"%s\"", DB_TABLE_NAME, app_id);
194         //LOGD("query [%s]", query);
195
196         db_ret = sqlite3_prepare_v2(g_predefined_item_db, query, strlen(query), &g_predefined_item_pstmt, NULL);
197         if (db_ret != SQLITE_OK)
198         {
199                 LOGE("Failed to sqlite3_prepare_v2 error[%d]", db_ret);
200                 _db_finalize_statement();
201                 return db_ret;
202         }
203
204         db_ret = sqlite3_step(g_predefined_item_pstmt);
205         if (db_ret != SQLITE_ROW)
206         {
207                 LOGE("Failed to sqlite3_step error[%d]", db_ret);
208                 _db_finalize_statement();
209                 return db_ret;
210         }
211
212         *pkgName = strdup((char *)sqlite3_column_text(g_predefined_item_pstmt, 0));
213
214         _db_finalize_statement();
215
216         return db_ret;
217 }
218
219 int _ug_nfc_setting_db_close_table(int table_handle)
220 {
221         int db_ret = SQLITE_OK;
222         sqlite3_stmt *stmt = NULL;
223
224         stmt = (sqlite3_stmt *)table_handle;
225         if (stmt == NULL)
226                 return -1;
227
228         db_ret = sqlite3_finalize(stmt);
229         if(db_ret != SQLITE_OK)
230         {
231                 LOGE("Failed to sqlite3_finalize error[%d]", db_ret);
232         }
233
234         return db_ret;
235 }
236