update tizen source
[framework/messaging/msg-service.git] / framework / storage-handler / MsgStorageManager.cpp
1 /*
2 *
3 * Copyright (c) 2000-2012 Samsung Electronics Co., Ltd. All Rights Reserved.
4 *
5 * This file is part of msg-service.
6 *
7 * Contact: Jaeyun Jeong <jyjeong@samsung.com>
8 *          Sangkoo Kim <sangkoo.kim@samsung.com>
9 *          Seunghwan Lee <sh.cat.lee@samsung.com>
10 *          SoonMin Jung <sm0415.jung@samsung.com>
11 *          Jae-Young Lee <jy4710.lee@samsung.com>
12 *          KeeBum Kim <keebum.kim@samsung.com>
13 *
14 * PROPRIETARY/CONFIDENTIAL
15 *
16 * This software is the confidential and proprietary information of
17 * SAMSUNG ELECTRONICS ("Confidential Information"). You shall not
18 * disclose such Confidential Information and shall use it only in
19 * accordance with the terms of the license agreement you entered
20 * into with SAMSUNG ELECTRONICS.
21 *
22 * SAMSUNG make no representations or warranties about the suitability
23 * of the software, either express or implied, including but not limited
24 * to the implied warranties of merchantability, fitness for a particular
25 * purpose, or non-infringement. SAMSUNG shall not be liable for any
26 * damages suffered by licensee as a result of using, modifying or
27 * distributing this software or its derivatives.
28 *
29 */
30
31 #include <stdio.h>
32 #include <stdlib.h>
33 #include <string.h>
34 #include <sys/stat.h>
35 #include <errno.h>
36
37 #include "MsgDebug.h"
38 #include "MsgUtilFile.h"
39 #include "MsgUtilStorage.h"
40 #include "MsgGconfWrapper.h"
41 #include "MsgSqliteWrapper.h"
42 #include "MsgPluginManager.h"
43 #include "MsgStorageHandler.h"
44
45
46 /*==================================================================================================
47                                      VARIABLES
48 ==================================================================================================*/
49 MsgDbHandler dbHandle;
50
51
52 /*==================================================================================================
53                                      FUNCTION IMPLEMENTATION
54 ==================================================================================================*/
55 MSG_ERROR_T MsgStoConnectDB()
56 {
57         return MSG_SUCCESS;
58 }
59
60
61 MSG_ERROR_T MsgStoDisconnectDB()
62 {
63         if (dbHandle.disconnect() != MSG_SUCCESS)
64         {
65                 MSG_DEBUG("DB Disconnect Fail");
66                 return MSG_ERR_DB_DISCONNECT;
67         }
68
69         MSG_DEBUG("DB Disconnect Success");
70
71         return MSG_SUCCESS;
72 }
73
74
75 MSG_ERROR_T MsgStoInitDB(bool bSimChanged)
76 {
77         MSG_BEGIN();
78
79         MSG_ERROR_T err = MSG_SUCCESS;
80
81 #ifdef MSG_DB_CREATE
82         if (MsgCreateAddressTable() != MSG_SUCCESS)
83                 return MSG_ERR_DB_STORAGE_INIT;
84         if (MsgCreateFolderTable() != MSG_SUCCESS)
85                 return MSG_ERR_DB_STORAGE_INIT;
86         if (MsgCreateMsgTable() != MSG_SUCCESS)
87                 return MSG_ERR_DB_STORAGE_INIT;
88         if (MsgCreateSimMessageTable() != MSG_SUCCESS)
89                 return MSG_ERR_DB_STORAGE_INIT;
90         if (MsgCreateWAPMessageTable() != MSG_SUCCESS)
91                 return MSG_ERR_DB_STORAGE_INIT;
92         if (MsgCreateCBMessageTable() != MSG_SUCCESS)
93                 return MSG_ERR_DB_STORAGE_INIT;
94         if (MsgCreateSyncMLMessageTable() != MSG_SUCCESS)
95                 return MSG_ERR_DB_STORAGE_INIT;
96         if (MsgCreateScheduledMessageTable() != MSG_SUCCESS)
97                 return MSG_ERR_DB_STORAGE_INIT;
98         if (MsgCreateSmsSendOptTable() != MSG_SUCCESS)
99                 return MSG_ERR_DB_STORAGE_INIT;
100         if (MsgCreateFilterTable() != MSG_SUCCESS)
101                 return MSG_ERR_DB_STORAGE_INIT;
102         if (MsgCreateMmsMsgTable() != MSG_SUCCESS)
103                 return MSG_ERR_DB_STORAGE_INIT;
104         if (MsgCreateMmsAttributeTable() != MSG_SUCCESS)
105                 return MSG_ERR_DB_STORAGE_INIT;
106
107         // Add Default Folders
108         if (MsgAddDefaultFolders() != MSG_SUCCESS)
109         {
110                 MSG_DEBUG("Add Default Folders Fail");
111                 return MSG_ERR_DB_STORAGE_INIT;
112         }
113
114         // Add Default Address
115         if (MsgAddDefaultAddress() != MSG_SUCCESS)
116         {
117                 MSG_DEBUG("Add Default Address Fail");
118                 return MSG_ERR_DB_STORAGE_INIT;
119         }
120 #endif
121
122         // Delete Msgs in Hidden Folder
123         MsgStoDeleteAllMessageInFolder(0, true, NULL);
124
125         // Reset network status
126         MsgStoResetNetworkStatus();
127
128         //clear abnormal mms message
129         MsgStoCleanAbnormalMmsData();
130
131         // Clear all old Sim data
132         MsgStoClearSimMessageInDB();
133
134         int smsCnt = 0, mmsCnt = 0;
135
136         smsCnt = MsgStoGetUnreadCnt(&dbHandle, MSG_SMS_TYPE);
137         mmsCnt = MsgStoGetUnreadCnt(&dbHandle, MSG_MMS_TYPE);
138
139         // Set Indicator
140         MsgSettingSetIndicator(smsCnt, mmsCnt);
141
142         MSG_END();
143
144         return err;
145 }
146
147
148 MSG_ERROR_T MsgCreateAddressTable()
149 {
150         MSG_ERROR_T err = MSG_SUCCESS;
151
152         char sqlQuery[MAX_QUERY_LEN+1];
153
154         if (!dbHandle.checkTableExist(MSGFW_ADDRESS_TABLE_NAME))
155         {
156                 memset(sqlQuery, 0x00, sizeof(sqlQuery));
157
158                 snprintf(sqlQuery, sizeof(sqlQuery),
159                                                 "CREATE TABLE %s ( \
160                                                   ADDRESS_ID INTEGER PRIMARY KEY, \
161                                                   ADDRESS_TYPE INTEGER, \
162                                                   RECIPIENT_TYPE INTEGER, \
163                                                   ADDRESS_VAL TEXT, \
164                                                   CONTACT_ID INTEGER, \
165                                                   DISPLAY_NAME TEXT, \
166                                                   FIRST_NAME TEXT, \
167                                                   LAST_NAME TEXT, \
168                                                   IMAGE_PATH TEXT, \
169                                                   SYNC_TIME DATETIME, \
170                                                   UNREAD_CNT INTEGER DEFAULT 0, \
171                                                   SMS_CNT INTEGER DEFAULT 0, \
172                                                   MMS_CNT INTEGER DEFAULT 0, \
173                                                   MAIN_TYPE INTEGER NOT NULL, \
174                                                   SUB_TYPE INTEGER NOT NULL, \
175                                                   MSG_DIRECTION INTEGER NOT NULL, \
176                                                   MSG_TIME DATETIME, \
177                                                   MSG_TEXT TEXT);",
178                                                 MSGFW_ADDRESS_TABLE_NAME);
179
180                 err = dbHandle.execQuery(sqlQuery);
181
182                 if (err == MSG_SUCCESS)
183                         MSG_DEBUG("SUCCESS : create %s.", MSGFW_ADDRESS_TABLE_NAME);
184                 else
185                         MSG_DEBUG("FAIL : create %s [%d].", MSGFW_ADDRESS_TABLE_NAME, err);
186         }
187
188         return err;
189 }
190
191
192 MSG_ERROR_T MsgCreateFolderTable()
193 {
194         MSG_ERROR_T err = MSG_SUCCESS;
195
196         char sqlQuery[MAX_QUERY_LEN+1];
197
198         if (!dbHandle.checkTableExist(MSGFW_FOLDER_TABLE_NAME))
199         {
200                 memset(sqlQuery, 0x00, sizeof(sqlQuery));
201
202                 snprintf(sqlQuery, sizeof(sqlQuery),
203                                                 "CREATE TABLE %s ( \
204                                                   FOLDER_ID INTEGER PRIMARY KEY, \
205                                                   FOLDER_NAME TEXT NOT NULL, \
206                                                   FOLDER_TYPE INTEGER DEFAULT 0);",
207                                                   MSGFW_FOLDER_TABLE_NAME);
208
209                 err = dbHandle.execQuery(sqlQuery);
210
211                 if (err == MSG_SUCCESS)
212                         MSG_DEBUG("SUCCESS : create %s.", MSGFW_FOLDER_TABLE_NAME);
213                 else
214                         MSG_DEBUG("FAIL : create %s [%d].", MSGFW_FOLDER_TABLE_NAME, err);
215         }
216
217         return err;
218 }
219
220
221 MSG_ERROR_T MsgCreateMsgTable()
222 {
223         MSG_ERROR_T err = MSG_SUCCESS;
224
225         char sqlQuery[MAX_QUERY_LEN+1];
226
227         if (!dbHandle.checkTableExist(MSGFW_MESSAGE_TABLE_NAME))
228         {
229                 memset(sqlQuery, 0x00, sizeof(sqlQuery));
230
231                 snprintf(sqlQuery, sizeof(sqlQuery),
232                                                 "CREATE TABLE %s ( \
233                                                   MSG_ID INTEGER PRIMARY KEY, \
234                                                   ADDRESS_ID INTEGER, \
235                                                   FOLDER_ID INTEGER, \
236                                                   REFERENCE_ID INTEGER, \
237                                                   STORAGE_ID INTEGER NOT NULL, \
238                                                   MAIN_TYPE INTEGER NOT NULL, \
239                                                   SUB_TYPE INTEGER NOT NULL, \
240                                                   DISPLAY_TIME DATETIME, \
241                                                   DATA_SIZE INTEGER DEFAULT 0, \
242                                                   NETWORK_STATUS INTEGER DEFAULT 0, \
243                                                   READ_STATUS INTEGER DEFAULT 0, \
244                                                   PROTECTED INTEGER DEFAULT 0, \
245                                                   PRIORITY INTEGER DEFAULT 0, \
246                                                   MSG_DIRECTION INTEGER NOT NULL, \
247                                                   SCHEDULED_TIME DATETIME, \
248                                                   BACKUP INTEGER DEFAULT 0, \
249                                                   SUBJECT TEXT, \
250                                                   MSG_DATA TEXT, \
251                                                   THUMB_PATH TEXT, \
252                                                   MSG_TEXT TEXT, \
253                                                   DELIVERY_REPORT_STATUS INTEGER DEFAULT 0, \
254                                                   DELIVERY_REPORT_TIME DATETIME, \
255                                                   READ_REPORT_STATUS INTEGER DEFAULT 0, \
256                                                   READ_REPORT_TIME DATETIME, \
257                                                   ATTACHMENT_COUNT INTEGER DEFAULT 0, \
258                                                   FOREIGN KEY(ADDRESS_ID) REFERENCES %s(ADDRESS_ID), \
259                                                   FOREIGN KEY(FOLDER_ID) REFERENCES %s(FOLDER_ID) \
260                                                   );",
261                                                   MSGFW_MESSAGE_TABLE_NAME, MSGFW_ADDRESS_TABLE_NAME, MSGFW_FOLDER_TABLE_NAME);
262
263                 err = dbHandle.execQuery(sqlQuery);
264
265                 if (err == MSG_SUCCESS)
266                         MSG_DEBUG("SUCCESS : create %s.", MSGFW_MESSAGE_TABLE_NAME);
267                 else
268                         MSG_DEBUG("FAIL : create %s [%d].", MSGFW_MESSAGE_TABLE_NAME, err);
269         }
270
271         return err;
272 }
273
274
275 MSG_ERROR_T MsgCreateSimMessageTable()
276 {
277         MSG_ERROR_T err = MSG_SUCCESS;
278
279         char sqlQuery[MAX_QUERY_LEN+1];
280
281         if (!dbHandle.checkTableExist(MSGFW_SIM_MSG_TABLE_NAME))
282         {
283                 memset(sqlQuery, 0x00, sizeof(sqlQuery));
284
285                 snprintf(sqlQuery, sizeof(sqlQuery),
286                                                 "CREATE TABLE %s ( \
287                                                   MSG_ID INTEGER, \
288                                                   SIM_ID INTEGER NOT NULL, \
289                                                   FOREIGN KEY(MSG_ID) REFERENCES %s(MSG_ID));",
290                                                   MSGFW_SIM_MSG_TABLE_NAME, MSGFW_MESSAGE_TABLE_NAME);
291
292                 err = dbHandle.execQuery(sqlQuery);
293
294                 if (err == MSG_SUCCESS)
295                         MSG_DEBUG("SUCCESS : create %s.", MSGFW_SIM_MSG_TABLE_NAME);
296                 else
297                         MSG_DEBUG("FAIL : create %s [%d].", MSGFW_SIM_MSG_TABLE_NAME, err);
298         }
299
300         return err;
301 }
302
303
304 MSG_ERROR_T MsgCreateWAPMessageTable()
305 {
306         MSG_ERROR_T err = MSG_SUCCESS;
307
308         char sqlQuery[MAX_QUERY_LEN+1];
309
310         if (!dbHandle.checkTableExist(MSGFW_PUSH_MSG_TABLE_NAME))
311         {
312                 memset(sqlQuery, 0x00, sizeof(sqlQuery));
313
314                 snprintf(sqlQuery, sizeof(sqlQuery),
315                                                 "CREATE TABLE %s ( \
316                                                   MSG_ID INTEGER, \
317                                                   ACTION INTEGER, \
318                                                   CREATED INTEGER, \
319                                                   EXPIRES INTEGER, \
320                                                   ID TEXT, \
321                                                   HREF TEXT, \
322                                                   CONTENT TEXT, \
323                                                   FOREIGN KEY(MSG_ID) REFERENCES %s(MSG_ID));",
324                                                   MSGFW_PUSH_MSG_TABLE_NAME, MSGFW_MESSAGE_TABLE_NAME);
325
326                 err = dbHandle.execQuery(sqlQuery);
327
328                 if (err == MSG_SUCCESS)
329                         MSG_DEBUG("SUCCESS : create %s.", MSGFW_PUSH_MSG_TABLE_NAME);
330                 else
331                         MSG_DEBUG("FAIL : create %s [%d].", MSGFW_PUSH_MSG_TABLE_NAME, err);
332         }
333
334         return err;
335 }
336
337
338 MSG_ERROR_T MsgCreateCBMessageTable()
339 {
340         MSG_ERROR_T err = MSG_SUCCESS;
341
342         char sqlQuery[MAX_QUERY_LEN+1];
343
344         if (!dbHandle.checkTableExist(MSGFW_CB_MSG_TABLE_NAME))
345         {
346                 memset(sqlQuery, 0x00, sizeof(sqlQuery));
347
348                 snprintf(sqlQuery, sizeof(sqlQuery),
349                                                 "CREATE TABLE %s ( \
350                                                   MSG_ID INTEGER, \
351                                                   CB_MSG_ID INTEGER NOT NULL, \
352                                                   FOREIGN KEY(MSG_ID) REFERENCES %s(MSG_ID));",
353                                                   MSGFW_CB_MSG_TABLE_NAME, MSGFW_MESSAGE_TABLE_NAME);
354
355                 err = dbHandle.execQuery(sqlQuery);
356
357                 if (err == MSG_SUCCESS)
358                         MSG_DEBUG("SUCCESS : create %s.", MSGFW_CB_MSG_TABLE_NAME);
359                 else
360                         MSG_DEBUG("FAIL : create %s [%d].", MSGFW_CB_MSG_TABLE_NAME, err);
361         }
362
363         return err;
364 }
365
366
367 MSG_ERROR_T MsgCreateSyncMLMessageTable()
368 {
369         MSG_ERROR_T err = MSG_SUCCESS;
370
371         char sqlQuery[MAX_QUERY_LEN+1];
372
373         if (!dbHandle.checkTableExist(MSGFW_SYNCML_MSG_TABLE_NAME))
374         {
375                 memset(sqlQuery, 0x00, sizeof(sqlQuery));
376
377                 snprintf(sqlQuery, sizeof(sqlQuery),
378                                                 "CREATE TABLE %s ( \
379                                                   MSG_ID INTEGER, \
380                                                   EXT_ID INTEGER NOT NULL, \
381                                                   PINCODE INTEGER NOT NULL, \
382                                                   FOREIGN KEY(MSG_ID) REFERENCES %s(MSG_ID));",
383                                                   MSGFW_SYNCML_MSG_TABLE_NAME, MSGFW_MESSAGE_TABLE_NAME);
384
385                 err = dbHandle.execQuery(sqlQuery);
386
387                 if (err == MSG_SUCCESS)
388                         MSG_DEBUG("SUCCESS : create %s.", MSGFW_SYNCML_MSG_TABLE_NAME);
389                 else
390                         MSG_DEBUG("FAIL : create %s [%d].", MSGFW_SYNCML_MSG_TABLE_NAME, err);
391         }
392
393         return err;
394 }
395
396
397 MSG_ERROR_T MsgCreateScheduledMessageTable()
398 {
399         MSG_ERROR_T err = MSG_SUCCESS;
400
401         char sqlQuery[MAX_QUERY_LEN+1];
402
403         if (!dbHandle.checkTableExist(MSGFW_SCHEDULED_MSG_TABLE_NAME))
404         {
405                 memset(sqlQuery, 0x00, sizeof(sqlQuery));
406
407                 snprintf(sqlQuery, sizeof(sqlQuery),
408                                                 "CREATE TABLE %s ( \
409                                                   MSG_ID INTEGER, \
410                                                   ALARM_ID INTEGER NOT NULL, \
411                                                   LISTENER_FD INTEGER NOT NULL, \
412                                                   FOREIGN KEY(MSG_ID) REFERENCES %s(MSG_ID));",
413                                                   MSGFW_SCHEDULED_MSG_TABLE_NAME, MSGFW_MESSAGE_TABLE_NAME);
414
415                 err = dbHandle.execQuery(sqlQuery);
416
417                 if (err == MSG_SUCCESS)
418                         MSG_DEBUG("SUCCESS : create %s.", MSGFW_SCHEDULED_MSG_TABLE_NAME);
419                 else
420                         MSG_DEBUG("FAIL : create %s [%d].", MSGFW_SCHEDULED_MSG_TABLE_NAME, err);
421         }
422
423         return err;
424 }
425
426
427 MSG_ERROR_T MsgCreateSmsSendOptTable()
428 {
429         MSG_ERROR_T err = MSG_SUCCESS;
430
431         char sqlQuery[MAX_QUERY_LEN+1];
432
433         if (!dbHandle.checkTableExist(MSGFW_SMS_SENDOPT_TABLE_NAME))
434         {
435                 memset(sqlQuery, 0x00, sizeof(sqlQuery));
436
437                 snprintf(sqlQuery, sizeof(sqlQuery),
438                                                 "CREATE TABLE %s ( \
439                                                   MSG_ID INTEGER, \
440                                                   DELREP_REQ INTEGER NOT NULL, \
441                                                   KEEP_COPY INTEGER NOT NULL, \
442                                                   REPLY_PATH INTEGER NOT NULL, \
443                                                   FOREIGN KEY(MSG_ID) REFERENCES %s(MSG_ID));",
444                                                   MSGFW_SMS_SENDOPT_TABLE_NAME, MSGFW_MESSAGE_TABLE_NAME);
445
446                 err = dbHandle.execQuery(sqlQuery);
447
448                 if (err == MSG_SUCCESS)
449                                 MSG_DEBUG("SUCCESS : create %s.", MSGFW_SMS_SENDOPT_TABLE_NAME);
450                 else
451                                 MSG_DEBUG("FAIL : create %s [%d].", MSGFW_SMS_SENDOPT_TABLE_NAME, err);
452         }
453
454         return err;
455 }
456
457
458 MSG_ERROR_T MsgCreateFilterTable()
459 {
460         MSG_ERROR_T err = MSG_SUCCESS;
461
462         char sqlQuery[MAX_QUERY_LEN+1];
463
464         if (!dbHandle.checkTableExist(MSGFW_FILTER_TABLE_NAME))
465         {
466                 memset(sqlQuery, 0x00, sizeof(sqlQuery));
467
468                 snprintf(sqlQuery, sizeof(sqlQuery),
469                                                 "CREATE TABLE %s ( \
470                                                   FILTER_ID INTEGER PRIMARY KEY, \
471                                                   FILTER_TYPE INTEGER NOT NULL, \
472                                                   FILTER_VALUE TEXT NOT NULL);",
473                                                   MSGFW_FILTER_TABLE_NAME);
474
475                 err = dbHandle.execQuery(sqlQuery);
476
477                 if (err == MSG_SUCCESS)
478                                 MSG_DEBUG("SUCCESS : create %s.", MSGFW_FILTER_TABLE_NAME);
479                 else
480                                 MSG_DEBUG("FAIL : create %s [%d].", MSGFW_FILTER_TABLE_NAME, err);
481         }
482
483         return err;
484 }
485
486
487 MSG_ERROR_T MsgCreateMmsMsgTable()
488 {
489         MSG_ERROR_T err = MSG_SUCCESS;
490
491         char sqlQuery[MAX_QUERY_LEN+1];
492
493         if (!dbHandle.checkTableExist(MMS_PLUGIN_MESSAGE_TABLE_NAME))
494         {
495                 memset(sqlQuery, 0x00, sizeof(sqlQuery));
496
497                 snprintf(sqlQuery, sizeof(sqlQuery),
498                                                 "CREATE TABLE %s ( \
499                                                   MSG_ID INTEGER, \
500                                                   TRANSACTION_ID TEXT, \
501                                                   MESSAGE_ID TEXT, \
502                                                   FWD_MESSAGE_ID TEXT, \
503                                                   CONTENTS_LOCATION TEXT, \
504                                                   FILE_PATH TEXT, \
505                                                   FOREIGN KEY(MSG_ID) REFERENCES %s(MSG_ID));",
506                                                   MMS_PLUGIN_MESSAGE_TABLE_NAME, MSGFW_MESSAGE_TABLE_NAME);
507
508                 err = dbHandle.execQuery(sqlQuery);
509
510                 if (err == MSG_SUCCESS)
511                         MSG_DEBUG("SUCCESS : create %s.", MMS_PLUGIN_MESSAGE_TABLE_NAME);
512                 else
513                         MSG_DEBUG("FAIL : create %s [%d].", MMS_PLUGIN_MESSAGE_TABLE_NAME, err);
514         }
515
516         return err;
517 }
518
519
520 MSG_ERROR_T MsgCreateMmsAttributeTable()
521 {
522         MSG_ERROR_T err = MSG_SUCCESS;
523
524         char sqlQuery[MAX_QUERY_LEN+1];
525
526         if (!dbHandle.checkTableExist(MMS_PLUGIN_ATTRIBUTE_TABLE_NAME))
527         {
528                 memset(sqlQuery, 0x00, sizeof(sqlQuery));
529
530                 snprintf(sqlQuery, sizeof(sqlQuery),
531                                                 "CREATE TABLE %s ( \
532                                                  MSG_ID INTEGER, \
533                                                  VERSION INTEGER NOT NULL, \
534                                                  DATA_TYPE INTEGER DEFAULT -1, \
535                                                  DATE DATETIME, \
536                                                  HIDE_ADDRESS INTEGER DEFAULT 0, \
537                                                  ASK_DELIVERY_REPORT INTEGER DEFAULT 0, \
538                                                  REPORT_ALLOWED INTEGER DEFAULT 0, \
539                                                  READ_REPORT_ALLOWED_TYPE INTEGER DEFAULT 0, \
540                                                  ASK_READ_REPLY INTEGER DEFAULT 0, \
541                                                  READ INTEGER DEFAULT 0, \
542                                                  READ_REPORT_SEND_STATUS        INTEGER DEFAULT 0, \
543                                                  READ_REPORT_SENT INTEGER DEFAULT 0, \
544                                                  PRIORITY INTEGER DEFAULT 0, \
545                                                  KEEP_COPY INTEGER DEFAULT 0, \
546                                                  MSG_SIZE INTEGER NOT NULL, \
547                                                  MSG_CLASS INTEGER DEFAULT -1, \
548                                                  EXPIRY_TIME DATETIME, \
549                                                  CUSTOM_DELIVERY_TIME INTEGER DEFAULT 0, \
550                                                  DELIVERY_TIME DATETIME, \
551                                                  MSG_STATUS INTEGER DEFAULT -1, \
552                                                  FOREIGN KEY(MSG_ID) REFERENCES %s(MSG_ID));",
553                                                  MMS_PLUGIN_ATTRIBUTE_TABLE_NAME, MSGFW_MESSAGE_TABLE_NAME);
554
555                 err = dbHandle.execQuery(sqlQuery);
556
557                 if (err == MSG_SUCCESS)
558                         MSG_DEBUG("SUCCESS : create %s.", MMS_PLUGIN_ATTRIBUTE_TABLE_NAME);
559                 else
560                         MSG_DEBUG("FAIL : create %s [%d].", MMS_PLUGIN_ATTRIBUTE_TABLE_NAME, err);
561         }
562
563         return err;
564 }
565
566
567 MSG_ERROR_T MsgAddDefaultFolders()
568 {
569         int nRowCnt = 0;
570         int nResult = 0;
571
572         char sqlQuery[MAX_QUERY_LEN+1];
573
574         // INBOX
575         memset(sqlQuery, 0x00, sizeof(sqlQuery));
576         snprintf(sqlQuery, sizeof(sqlQuery), "SELECT COUNT(*) FROM %s WHERE FOLDER_ID = %d;",
577                                         MSGFW_FOLDER_TABLE_NAME, MSG_INBOX_ID);
578
579         if (dbHandle.getTable(sqlQuery, &nRowCnt) != MSG_SUCCESS)
580         {
581                 dbHandle.freeTable();
582                 return MSG_ERR_DB_GETTABLE;
583         }
584
585         nResult = dbHandle.getColumnToInt(1);
586
587         dbHandle.freeTable();
588
589         if (nResult == 0)
590         {
591                 memset(sqlQuery, 0x00, sizeof(sqlQuery));
592                 snprintf(sqlQuery, sizeof(sqlQuery), "INSERT INTO %s VALUES (%d, 'INBOX', %d);",
593                                         MSGFW_FOLDER_TABLE_NAME, MSG_INBOX_ID, MSG_FOLDER_TYPE_INBOX);
594
595                 if (dbHandle.execQuery(sqlQuery) != MSG_SUCCESS)
596                         return MSG_ERR_DB_EXEC;
597         }
598
599         // OUTBOX
600         memset(sqlQuery, 0x00, sizeof(sqlQuery));
601         snprintf(sqlQuery, sizeof(sqlQuery), "SELECT COUNT(*) FROM %s WHERE FOLDER_ID = %d;",
602                                         MSGFW_FOLDER_TABLE_NAME, MSG_OUTBOX_ID);
603
604         if (dbHandle.getTable(sqlQuery, &nRowCnt) != MSG_SUCCESS)
605         {
606                 dbHandle.freeTable();
607                 return MSG_ERR_DB_GETTABLE;
608         }
609
610         nResult = dbHandle.getColumnToInt(1);
611
612         dbHandle.freeTable();
613
614         if (nResult == 0)
615         {
616                 memset(sqlQuery, 0x00, sizeof(sqlQuery));
617                 snprintf(sqlQuery, sizeof(sqlQuery), "INSERT INTO %s VALUES (%d, 'OUTBOX', %d);",
618                                         MSGFW_FOLDER_TABLE_NAME, MSG_OUTBOX_ID, MSG_FOLDER_TYPE_OUTBOX);
619
620                 if (dbHandle.execQuery(sqlQuery) != MSG_SUCCESS)
621                         return MSG_ERR_DB_EXEC;
622         }
623
624         // SENTBOX
625         memset(sqlQuery, 0x00, sizeof(sqlQuery));
626         snprintf(sqlQuery, sizeof(sqlQuery), "SELECT COUNT(*) FROM %s WHERE FOLDER_ID = %d;",
627                                         MSGFW_FOLDER_TABLE_NAME, MSG_SENTBOX_ID);
628
629         if (dbHandle.getTable(sqlQuery, &nRowCnt) != MSG_SUCCESS)
630         {
631                 dbHandle.freeTable();
632                 return MSG_ERR_DB_GETTABLE;
633         }
634
635         nResult = dbHandle.getColumnToInt(1);
636
637         dbHandle.freeTable();
638
639         if (nResult == 0)
640         {
641                 memset(sqlQuery, 0x00, sizeof(sqlQuery));
642                 snprintf(sqlQuery, sizeof(sqlQuery), "INSERT INTO %s VALUES (%d, 'SENTBOX', %d);",
643                                         MSGFW_FOLDER_TABLE_NAME, MSG_SENTBOX_ID, MSG_FOLDER_TYPE_OUTBOX);
644
645                 if (dbHandle.execQuery(sqlQuery) != MSG_SUCCESS)
646                         return MSG_ERR_DB_EXEC;
647         }
648
649         // DRAFT
650         memset(sqlQuery, 0x00, sizeof(sqlQuery));
651         snprintf(sqlQuery, sizeof(sqlQuery), "SELECT COUNT(*) FROM %s WHERE FOLDER_ID = %d;",
652                                         MSGFW_FOLDER_TABLE_NAME, MSG_DRAFT_ID);
653
654         if (dbHandle.getTable(sqlQuery, &nRowCnt) != MSG_SUCCESS)
655         {
656                 dbHandle.freeTable();
657                 return MSG_ERR_DB_GETTABLE;
658         }
659
660         nResult = dbHandle.getColumnToInt(1);
661
662         dbHandle.freeTable();
663
664         if (nResult == 0)
665         {
666                 memset(sqlQuery, 0x00, sizeof(sqlQuery));
667                 snprintf(sqlQuery, sizeof(sqlQuery), "INSERT INTO %s VALUES (%d, 'DRAFT', %d);",
668                                         MSGFW_FOLDER_TABLE_NAME, MSG_DRAFT_ID, MSG_FOLDER_TYPE_DRAFT);
669
670                 if (dbHandle.execQuery(sqlQuery) != MSG_SUCCESS)
671                         return MSG_ERR_DB_EXEC;
672         }
673
674         // CBMSGBOX
675         memset(sqlQuery, 0x00, sizeof(sqlQuery));
676         snprintf(sqlQuery, sizeof(sqlQuery), "SELECT COUNT(*) FROM %s WHERE FOLDER_ID = %d;",
677                                         MSGFW_FOLDER_TABLE_NAME, MSG_CBMSGBOX_ID);
678
679         if (dbHandle.getTable(sqlQuery, &nRowCnt) != MSG_SUCCESS)
680         {
681                 dbHandle.freeTable();
682                 return MSG_ERR_DB_GETTABLE;
683         }
684
685         nResult = dbHandle.getColumnToInt(1);
686
687         dbHandle.freeTable();
688
689         if (nResult == 0)
690         {
691                 memset(sqlQuery, 0x00, sizeof(sqlQuery));
692                 snprintf(sqlQuery, sizeof(sqlQuery), "INSERT INTO %s VALUES (%d, 'CBMSGBOX', %d);",
693                                         MSGFW_FOLDER_TABLE_NAME, MSG_CBMSGBOX_ID, MSG_FOLDER_TYPE_INBOX);
694
695                 if (dbHandle.execQuery(sqlQuery) != MSG_SUCCESS)
696                         return MSG_ERR_DB_EXEC;
697         }
698
699         return MSG_SUCCESS;
700 }
701
702
703 MSG_ERROR_T MsgAddDefaultAddress()
704 {
705         MSG_BEGIN();
706
707         int nRowCnt = 0, nResult = 0;
708
709         char sqlQuery[MAX_QUERY_LEN+1];
710
711         memset(sqlQuery, 0x00, sizeof(sqlQuery));
712         snprintf(sqlQuery, sizeof(sqlQuery), "SELECT COUNT(*) FROM %s WHERE ADDRESS_ID = 0;",
713                                         MSGFW_ADDRESS_TABLE_NAME);
714
715         if (dbHandle.getTable(sqlQuery, &nRowCnt) != MSG_SUCCESS)
716         {
717                 dbHandle.freeTable();
718                 return MSG_ERR_DB_GETTABLE;
719         }
720
721         nResult = dbHandle.getColumnToInt(1);
722
723         dbHandle.freeTable();
724
725         if (nResult == 0)
726         {
727                 memset(sqlQuery, 0x00, sizeof(sqlQuery));
728                 snprintf(sqlQuery, sizeof(sqlQuery), "INSERT INTO %s VALUES (0, 0, 0, '', 0, '', '', '', '', 0, 0, 0, 0, 0, 0, 0, 0, '');",
729                                         MSGFW_ADDRESS_TABLE_NAME);
730
731                 MSG_DEBUG("%s", sqlQuery);
732
733                 if (dbHandle.execQuery(sqlQuery) != MSG_SUCCESS)
734                         return MSG_ERR_DB_EXEC;
735         }
736
737         MSG_END();
738
739         return MSG_SUCCESS;
740 }
741
742
743 MSG_ERROR_T MsgStoResetDatabase()
744 {
745         MSG_ERROR_T err = MSG_SUCCESS;
746
747         char sqlQuery[MAX_QUERY_LEN+1];
748
749         const char* tableList[] = {MSGFW_FOLDER_TABLE_NAME, MSGFW_FILTER_TABLE_NAME,
750                                                 MSGFW_PUSH_MSG_TABLE_NAME, MSGFW_CB_MSG_TABLE_NAME,
751                                                 MMS_PLUGIN_MESSAGE_TABLE_NAME, MMS_PLUGIN_ATTRIBUTE_TABLE_NAME,
752                                                 MSGFW_SYNCML_MSG_TABLE_NAME, MSGFW_SCHEDULED_MSG_TABLE_NAME, MSGFW_SMS_SENDOPT_TABLE_NAME};
753
754         int listCnt = sizeof(tableList)/sizeof(char*);
755
756         dbHandle.beginTrans();
757
758         // Delete Database
759         for (int i = 0; i < listCnt; i++)
760         {
761                 memset(sqlQuery, 0x00, sizeof(sqlQuery));
762                 snprintf(sqlQuery, sizeof(sqlQuery), "DELETE FROM %s;", tableList[i]);
763
764                 if (dbHandle.execQuery(sqlQuery) != MSG_SUCCESS)
765                 {
766                         dbHandle.endTrans(false);
767                         return MSG_ERR_DB_EXEC;
768                 }
769         }
770
771         // Delete Message Table
772         memset(sqlQuery, 0x00, sizeof(sqlQuery));
773         snprintf(sqlQuery, sizeof(sqlQuery), "DELETE FROM %s WHERE STORAGE_ID <> %d;",
774                         MSGFW_MESSAGE_TABLE_NAME, MSG_STORAGE_SIM);
775
776         if (dbHandle.execQuery(sqlQuery) != MSG_SUCCESS)
777         {
778                 dbHandle.endTrans(false);
779                 return MSG_ERR_DB_EXEC;
780         }
781
782         // Delete Address Table
783         err = MsgStoClearAddressTable(&dbHandle);
784
785         if (err != MSG_SUCCESS)
786         {
787                 dbHandle.endTrans(false);
788                 return err;
789         }
790
791         // Add Default Folders
792         if (MsgAddDefaultFolders() != MSG_SUCCESS)
793         {
794                 MSG_DEBUG("Add Default Folders Fail");
795                 dbHandle.endTrans(false);
796                 return MSG_ERR_DB_STORAGE_INIT;
797         }
798
799         // Add Default Address
800         if (MsgAddDefaultAddress() != MSG_SUCCESS)
801         {
802                 MSG_DEBUG("Add Default Address Fail");
803                 dbHandle.endTrans(false);
804                 return MSG_ERR_DB_STORAGE_INIT;
805         }
806
807         dbHandle.endTrans(true);
808
809         // Delete MMS Files
810         MsgRmRf((char*)MSG_DATA_PATH);
811         MsgRmRf((char*)MSG_SMIL_FILE_PATH);
812
813         // Reset SMS Count
814         if (MsgSettingSetIndicator(0, 0) != MSG_SUCCESS)
815         {
816                 MSG_DEBUG("MsgSettingSetIndicator() FAILED");
817                 return MSG_ERR_SET_SETTING;
818         }
819
820         // Reset MMS Count
821         if (MsgSettingSetIndicator(0, 0) != MSG_SUCCESS)
822         {
823                 MSG_DEBUG("MsgSettingSetIndicator() FAILED");
824                 return MSG_ERR_SET_SETTING;
825         }
826
827         return MSG_SUCCESS;
828 }