1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
|
/*
* Copyright (c) 2014 Samsung Electronics Co., Ltd. All rights reserved
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include <queue>
#include "MsgDebug.h"
#include "MsgUtilFile.h"
#include "MsgContact.h"
#include "MsgUtilStorage.h"
#include "MsgGconfWrapper.h"
#include "MsgSqliteWrapper.h"
#include "MsgPluginManager.h"
#include "MsgStorageHandler.h"
using namespace std;
/*==================================================================================================
VARIABLES
==================================================================================================*/
/*==================================================================================================
FUNCTION IMPLEMENTATION
==================================================================================================*/
msg_error_t MsgStoClearSimMessageInDB()
{
MsgDbHandler *dbHandle = getDbHandle();
msg_error_t err = MSG_SUCCESS;
char sqlQuery[MAX_QUERY_LEN+1];
queue<msg_thread_id_t> threadList;
// Get Address ID of SIM Message
memset(sqlQuery, 0x00, sizeof(sqlQuery));
snprintf(sqlQuery, sizeof(sqlQuery), "SELECT DISTINCT(CONV_ID) FROM %s WHERE STORAGE_ID = %d",
MSGFW_MESSAGE_TABLE_NAME, MSG_STORAGE_SIM);
int rowCnt = 0;
err = dbHandle->getTable(sqlQuery, &rowCnt, NULL);
if (err != MSG_SUCCESS && err != MSG_ERR_DB_NORECORD) {
MSG_DEBUG("Fail to getTable().");
dbHandle->freeTable();
return err;
}
if (rowCnt <= 0) {
dbHandle->freeTable();
return MSG_SUCCESS;
}
for (int i = 1; i <= rowCnt; i++)
{
MSG_DEBUG("thread ID : %d", dbHandle->getColumnToInt(i));
threadList.push((msg_thread_id_t)dbHandle->getColumnToInt(i));
}
dbHandle->freeTable();
const char* tableList[] = {MSGFW_SMS_SENDOPT_TABLE_NAME, MSGFW_SIM_MSG_TABLE_NAME, MSGFW_MESSAGE_TABLE_NAME};
int listCnt = sizeof(tableList)/sizeof(char*);
dbHandle->beginTrans();
for (int i = 0; i < listCnt; i++)
{
memset(sqlQuery, 0x00, sizeof(sqlQuery));
snprintf(sqlQuery, sizeof(sqlQuery), "DELETE FROM %s WHERE MSG_ID IN \
(SELECT MSG_ID FROM %s WHERE STORAGE_ID = %d);",
tableList[i], MSGFW_MESSAGE_TABLE_NAME, MSG_STORAGE_SIM);
// Delete SIM Message in tables
if (dbHandle->execQuery(sqlQuery) != MSG_SUCCESS) {
dbHandle->endTrans(false);
return MSG_ERR_DB_EXEC;
}
}
// Clear Conversation table
if (MsgStoClearConversationTable(dbHandle) != MSG_SUCCESS) {
dbHandle->endTrans(false);
return MSG_ERR_DB_EXEC;
}
// Update Address
while (!threadList.empty())
{
err = MsgStoUpdateConversation(dbHandle, threadList.front());
threadList.pop();
if (err != MSG_SUCCESS) {
dbHandle->endTrans(false);
return err;
}
}
dbHandle->endTrans(true);
return MSG_SUCCESS;
}
|