2 * Copyright 2012-2013 Samsung Electronics Co., Ltd
4 * Licensed under the Flora License, Version 1.1 (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
8 * http://floralicense.org/license/
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.
18 #include "MsgSqliteWrapper.h"
19 #include "MsgStorageHandler.h"
22 /*==================================================================================================
24 ==================================================================================================*/
25 extern MsgDbHandler dbHandle;
28 /*==================================================================================================
29 FUNCTION IMPLEMENTATION
30 ==================================================================================================*/
31 msg_error_t MsgStoCheckDuplicatedFilter(const MSG_FILTER_S *pFilter)
35 msg_error_t err = MSG_SUCCESS;
38 char sqlQuery[MAX_QUERY_LEN+1];
40 memset(sqlQuery, 0x00, sizeof(sqlQuery));
42 snprintf(sqlQuery, sizeof(sqlQuery), "SELECT FILTER_ID FROM %s WHERE FILTER_TYPE = %d AND FILTER_VALUE = '%s';",
43 MSGFW_FILTER_TABLE_NAME, pFilter->filterType, pFilter->filterValue);
45 MSG_DEBUG("sql : %s", sqlQuery);
47 err = dbHandle.getTable(sqlQuery, &rowCnt);
49 if (err == MSG_SUCCESS)
50 err = MSG_ERR_FILTER_DUPLICATED;
51 else if (err == MSG_ERR_DB_NORECORD)
62 msg_error_t MsgStoAddFilter(const MSG_FILTER_S *pFilter)
66 msg_error_t err = MSG_SUCCESS;
69 err = MsgStoCheckDuplicatedFilter(pFilter);
71 if (err != MSG_SUCCESS) {
72 MSG_DEBUG("Filter is duplicated : [%d]", err);
76 unsigned int rowId = 0;
78 char sqlQuery[MAX_QUERY_LEN+1];
80 err = dbHandle.getRowId(MSGFW_FILTER_TABLE_NAME, &rowId);
82 if (err != MSG_SUCCESS)
86 memset(sqlQuery, 0x00, sizeof(sqlQuery));
88 snprintf(sqlQuery, sizeof(sqlQuery), "INSERT INTO %s VALUES (%d, %d, ?, 1);",
89 MSGFW_FILTER_TABLE_NAME, rowId, pFilter->filterType);
91 MSG_DEBUG("sql : %s", sqlQuery);
93 if (dbHandle.prepareQuery(sqlQuery) != MSG_SUCCESS)
94 return MSG_ERR_DB_EXEC;
96 dbHandle.bindText(pFilter->filterValue, 1);
98 if (dbHandle.stepQuery() != MSG_ERR_DB_DONE) {
99 dbHandle.finalizeQuery();
100 return MSG_ERR_DB_EXEC;
103 dbHandle.finalizeQuery();
111 msg_error_t MsgStoUpdateFilter(const MSG_FILTER_S *pFilter)
115 msg_error_t err = MSG_SUCCESS;
118 err = MsgStoCheckDuplicatedFilter(pFilter);
120 if (err != MSG_SUCCESS) {
121 MSG_DEBUG("Filter is duplicated : [%d]", err);
125 char sqlQuery[MAX_QUERY_LEN+1];
128 memset(sqlQuery, 0x00, sizeof(sqlQuery));
130 snprintf(sqlQuery, sizeof(sqlQuery), "UPDATE %s SET FILTER_TYPE = %d, FILTER_VALUE = ? WHERE FILTER_ID = %d;",
131 MSGFW_FILTER_TABLE_NAME, pFilter->filterType, pFilter->filterId);
133 if (dbHandle.prepareQuery(sqlQuery) != MSG_SUCCESS)
134 return MSG_ERR_DB_PREPARE;
136 dbHandle.bindText(pFilter->filterValue, 1);
138 if (dbHandle.stepQuery() != MSG_ERR_DB_DONE) {
139 dbHandle.finalizeQuery();
140 return MSG_ERR_DB_EXEC;
143 dbHandle.finalizeQuery();
151 msg_error_t MsgStoDeleteFilter(msg_filter_id_t filterId)
155 char sqlQuery[MAX_QUERY_LEN+1];
157 dbHandle.beginTrans();
159 memset(sqlQuery, 0x00, sizeof(sqlQuery));
161 snprintf(sqlQuery, sizeof(sqlQuery), "DELETE FROM %s WHERE FILTER_ID = %d;", MSGFW_FILTER_TABLE_NAME, filterId);
164 if (dbHandle.execQuery(sqlQuery) != MSG_SUCCESS) {
165 dbHandle.endTrans(false);
166 return MSG_ERR_DB_EXEC;
169 dbHandle.endTrans(true);
177 msg_error_t MsgStoGetFilterList(msg_struct_list_s *pFilterList)
181 if (pFilterList == NULL) {
182 MSG_DEBUG("pFilterList is NULL");
183 return MSG_ERR_NULL_POINTER;
186 int rowCnt = 0, index = 4;
188 char sqlQuery[MAX_QUERY_LEN+1];
190 // Get filters from DB
191 memset(sqlQuery, 0x00, sizeof(sqlQuery));
193 snprintf(sqlQuery, sizeof(sqlQuery), "SELECT FILTER_ID, FILTER_TYPE, FILTER_VALUE, FILTER_ACTIVE FROM %s;", MSGFW_FILTER_TABLE_NAME);
195 msg_error_t err = MSG_SUCCESS;
197 err = dbHandle.getTable(sqlQuery, &rowCnt);
199 if (err == MSG_ERR_DB_NORECORD) {
200 pFilterList->nCount = 0;
201 pFilterList->msg_struct_info = NULL;
203 dbHandle.freeTable();
206 } else if (err != MSG_SUCCESS) {
207 dbHandle.freeTable();
211 pFilterList->nCount = rowCnt;
213 MSG_DEBUG("pMsgCommInfoList->nCount [%d]", pFilterList->nCount);
215 pFilterList->msg_struct_info = (msg_struct_t *)new char[sizeof(MSG_FILTER_S *)*rowCnt];
217 msg_struct_s* pTmp = NULL;
219 for (int i = 0; i < rowCnt; i++)
221 pFilterList->msg_struct_info[i] = (msg_struct_t)new char[sizeof(msg_struct_s)];
223 pTmp = (msg_struct_s *)pFilterList->msg_struct_info[i];
224 pTmp->type = MSG_STRUCT_FILTER;
225 pTmp->data = new char [sizeof(MSG_FILTER_S)];
226 MSG_FILTER_S *pFilter = (MSG_FILTER_S *)pTmp->data;
227 memset(pFilter, 0x00, sizeof(MSG_FILTER_S));
228 pFilter->filterId = dbHandle.getColumnToInt(index++);
229 pFilter->filterType = dbHandle.getColumnToInt(index++);
230 memset(pFilter->filterValue, 0x00, sizeof(pFilter->filterValue));
231 dbHandle.getColumnToString(index++, MAX_FILTER_VALUE_LEN, pFilter->filterValue);
232 pFilter->bActive = dbHandle.getColumnToInt(index++);
236 dbHandle.freeTable();
244 msg_error_t MsgStoSetFilterActivation(msg_filter_id_t filterId, bool bActive)
248 char sqlQuery[MAX_QUERY_LEN+1];
250 // Set Filter Activation
251 memset(sqlQuery, 0x00, sizeof(sqlQuery));
253 snprintf(sqlQuery, sizeof(sqlQuery), "UPDATE %s SET FILTER_ACTIVE = %d WHERE FILTER_ID = %d;",
254 MSGFW_FILTER_TABLE_NAME, bActive, filterId);
256 MSG_DEBUG("sqlQuery [%s]", sqlQuery);
258 if (dbHandle.execQuery(sqlQuery) != MSG_SUCCESS) {
259 return MSG_ERR_DB_EXEC;