add sim_slot_no in phonelogs stat view 70/58770/14
authorJongkyu Koo <jk.koo@samsung.com>
Wed, 3 Feb 2016 08:55:55 +0000 (17:55 +0900)
committerJongkyu Koo <jk.koo@samsung.com>
Mon, 7 Mar 2016 01:49:44 +0000 (10:49 +0900)
Change-Id: I86dab6030118ec2b57becd02f64160dcdc31402a
Signed-off-by: Jongkyu Koo <jk.koo@samsung.com>
19 files changed:
client/ctsvc_client_phonelog.c
client/ctsvc_client_phonelog_helper.c
client/ctsvc_client_phonelog_helper.h
common/ctsvc_filter.c
common/ctsvc_record_result.c
common/ctsvc_view.c
common/ctsvc_view.h
common/ipc/ctsvc_ipc_define.h
include/contacts_phone_log.h
include/contacts_views.h
packaging/contacts-service.spec
schema.sql
server/ctsvc_ipc_server2.c
server/ctsvc_ipc_server2.h
server/ctsvc_server.c
server/ctsvc_server_phonelog.c
server/ctsvc_server_phonelog.h
server/ctsvc_server_update.c
server/db/ctsvc_db_query.c

index 3991fbf..3eadeac 100644 (file)
@@ -38,6 +38,20 @@ API int contacts_phone_log_reset_statistics(void)
        return ret;
 }
 
+API int contacts_phone_log_reset_statistics_by_sim(int sim_slot_no)
+{
+       int ret;
+       contacts_h contact = NULL;
+
+       ret = ctsvc_client_handle_get_p(&contact);
+       RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "ctsvc_client_handle_get_p() Fail(%d)", ret);
+
+       ret = ctsvc_client_phone_log_reset_statistics_by_sim(contact, sim_slot_no);
+
+       return ret;
+}
+
+
 API int contacts_phone_log_delete(contacts_phone_log_delete_e op, ...)
 {
        int ret;
index 8c27a72..8c718cd 100644 (file)
@@ -92,6 +92,77 @@ int ctsvc_client_phone_log_reset_statistics(contacts_h contact)
 
 }
 
+int ctsvc_client_phone_log_reset_statistics_by_sim(contacts_h contact,
+               int sim_slot_no)
+{
+#ifndef ENABLE_LOG_FEATURE
+       return CONTACTS_ERROR_NOT_SUPPORTED;
+#endif /* ENABLE_LOG_FEATURE */
+
+       int ret = CONTACTS_ERROR_NONE;
+
+       pims_ipc_data_h indata = NULL;
+       pims_ipc_data_h outdata = NULL;
+
+       RETV_IF(NULL == contact, CONTACTS_ERROR_INVALID_PARAMETER);
+       RETV_IF(sim_slot_no < 0, CONTACTS_ERROR_INVALID_PARAMETER);
+
+       /* make indata */
+       indata = pims_ipc_data_create(0);
+       if (indata == NULL) {
+               ERR("pims_ipc_data_create() Fail");
+               ret = CONTACTS_ERROR_OUT_OF_MEMORY;
+               return ret;
+       }
+
+       ret = ctsvc_ipc_marshal_handle(contact, indata);
+       if (CONTACTS_ERROR_NONE != ret) {
+               ERR("ctsvc_ipc_marshal_handle() Fail(%d)", ret);
+               pims_ipc_data_destroy(indata);
+               return ret;
+       }
+
+       ret = ctsvc_ipc_marshal_int(sim_slot_no, indata);
+       if (CONTACTS_ERROR_NONE != ret) {
+               ERR("ctsvc_ipc_marshal_int() Fail(%d)", ret);
+               pims_ipc_data_destroy(indata);
+               return ret;
+       }
+
+       /* ipc call */
+       if (ctsvc_ipc_call(CTSVC_IPC_PHONELOG_MODULE,
+                       CTSVC_IPC_SERVER_PHONELOG_RESET_STATISTICS_BY_SIM,
+                       indata, &outdata) != 0) {
+               ERR("ctsvc_ipc_call() Fail");
+               pims_ipc_data_destroy(indata);
+               return CONTACTS_ERROR_IPC;
+       }
+
+       pims_ipc_data_destroy(indata);
+
+       if (outdata) {
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_int(outdata, &ret)) {
+                       ERR("ctsvc_ipc_unmarshal_int() Fail");
+                       pims_ipc_data_destroy(outdata);
+                       return CONTACTS_ERROR_IPC;
+               }
+
+               if (CONTACTS_ERROR_NONE == ret) {
+                       int transaction_ver = 0;
+                       if (CONTACTS_ERROR_NONE != ctsvc_ipc_unmarshal_int(outdata, &transaction_ver)) {
+                               ERR("ctsvc_ipc_unmarshal_int() Fail");
+                               pims_ipc_data_destroy(outdata);
+                               return CONTACTS_ERROR_IPC;
+                       }
+                       ctsvc_client_ipc_set_change_version(contact, transaction_ver);
+               }
+
+               pims_ipc_data_destroy(outdata);
+       }
+
+       return ret;
+}
+
 int ctsvc_client_phone_log_delete(contacts_h contact, contacts_phone_log_delete_e op,
                va_list args)
 {
index fae103a..1f7fca0 100644 (file)
@@ -23,7 +23,8 @@
 #include "contacts_phone_log_internal.h"
 
 int ctsvc_client_phone_log_reset_statistics(contacts_h contact);
+int ctsvc_client_phone_log_reset_statistics_by_sim(contacts_h contact, int sim_slot_no);
 int ctsvc_client_phone_log_delete(contacts_h contact, contacts_phone_log_delete_e op, va_list args);
 
 
-#endif /* __CTSVC_CLIENT_PHONELOG_HELPER_H__ */
\ No newline at end of file
+#endif /* __CTSVC_CLIENT_PHONELOG_HELPER_H__ */
index 326f2a2..ab6e587 100644 (file)
@@ -186,8 +186,10 @@ API int contacts_filter_add_int(contacts_filter_h filter, unsigned int property_
        int ret;
 
        RETV_IF(NULL == filter, CONTACTS_ERROR_INVALID_PARAMETER);
-       RETVM_IF(property_id == CTSVC_PROPERTY_PHONELOG_SIM_SLOT_NO
-                       && (CONTACTS_MATCH_GREATER_THAN <= match && match <= CONTACTS_MATCH_LESS_THAN_OR_EQUAL),
+       RETVM_IF((CTSVC_PROPERTY_PHONELOG_SIM_SLOT_NO == property_id
+                                       || CTSVC_PROPERTY_PHONELOG_STAT_SIM_SLOT_NO == property_id)
+                       && (CONTACTS_MATCH_GREATER_THAN <= match
+                                       && match <= CONTACTS_MATCH_LESS_THAN_OR_EQUAL),
                        CONTACTS_ERROR_INVALID_PARAMETER, "Not support this condition");
 
        com_filter = (ctsvc_composite_filter_s*)filter;
index a3d87bb..8e85527 100644 (file)
@@ -216,7 +216,8 @@ static int __ctsvc_result_set_int(contacts_record_h record, unsigned int propert
                data = cursor->data;
                if (data->property_id == property_id) {
 #ifdef _CONTACTS_IPC_SERVER
-                       if (property_id == CTSVC_PROPERTY_PHONELOG_SIM_SLOT_NO) {
+                       if (CTSVC_PROPERTY_PHONELOG_SIM_SLOT_NO == property_id
+                                       || CTSVC_PROPERTY_PHONELOG_STAT_SIM_SLOT_NO == property_id) {
                                CHECK_DIRTY_VAL(data->value.i, value, is_dirty);
                                data->value.i = ctsvc_server_sim_get_sim_slot_no_by_info_id(value);
                        } else
@@ -237,7 +238,8 @@ static int __ctsvc_result_set_int(contacts_record_h record, unsigned int propert
        data->property_id = property_id;
        data->type = CTSVC_VIEW_DATA_TYPE_INT;
 #ifdef _CONTACTS_IPC_SERVER
-       if (property_id == CTSVC_PROPERTY_PHONELOG_SIM_SLOT_NO) {
+       if (CTSVC_PROPERTY_PHONELOG_SIM_SLOT_NO == property_id
+                       || CTSVC_PROPERTY_PHONELOG_STAT_SIM_SLOT_NO == property_id) {
                CHECK_DIRTY_VAL(data->value.i, value, is_dirty);
                data->value.i = ctsvc_server_sim_get_sim_slot_no_by_info_id(value);
        } else
index cd17186..4c2cb5e 100644 (file)
@@ -660,6 +660,7 @@ API const _contacts_phone_log_stat_property_ids _contacts_phone_log_stat = {
        ._uri           = CTSVC_VIEW_URI_READ_ONLY_PHONELOG_STAT,
        .log_count      = CTSVC_PROPERTY_PHONELOG_STAT_LOG_COUNT,
        .log_type       = CTSVC_PROPERTY_PHONELOG_STAT_LOG_TYPE,
+       .sim_slot_no = CTSVC_PROPERTY_PHONELOG_STAT_SIM_SLOT_NO,
 };
 #endif /* ENABLE_LOG_FEATURE */
 
@@ -1239,6 +1240,7 @@ const property_info_s __property_contact_activity[] = {   /* _contacts_contact_a
 const property_info_s __property_phonelog_stat[] = {   /* _contacts_phone_log_stat */
        {CTSVC_PROPERTY_PHONELOG_STAT_LOG_COUNT,                CTSVC_SEARCH_PROPERTY_PROJECTION,       "log_count"},
        {CTSVC_PROPERTY_PHONELOG_STAT_LOG_TYPE,                 CTSVC_SEARCH_PROPERTY_ALL,      "log_type"},
+       {CTSVC_PROPERTY_PHONELOG_STAT_SIM_SLOT_NO,              CTSVC_SEARCH_PROPERTY_ALL,      "sim_id"},
 };
 #endif
 
index f3a1546..eb41982 100644 (file)
@@ -459,6 +459,7 @@ typedef enum {
        /* phonelog_stat */
        CTSVC_PROPERTY_PHONELOG_STAT_LOG_COUNT = (CTSVC_PROPERTY_PHONELOG_STAT | CTSVC_VIEW_DATA_TYPE_INT | CTSVC_READ_ONLY_PROPERTY),
        CTSVC_PROPERTY_PHONELOG_STAT_LOG_TYPE = (CTSVC_PROPERTY_PHONELOG_STAT | CTSVC_VIEW_DATA_TYPE_INT | CTSVC_READ_ONLY_PROPERTY) +1,
+       CTSVC_PROPERTY_PHONELOG_STAT_SIM_SLOT_NO = (CTSVC_PROPERTY_PHONELOG_STAT | CTSVC_VIEW_DATA_TYPE_INT | CTSVC_READ_ONLY_PROPERTY) +2,
 
        /* contact sip */
        CTSVC_PROPERTY_SIP_ID = (CTSVC_PROPERTY_SIP | CTSVC_VIEW_DATA_TYPE_INT | CTSVC_READ_ONLY_PROPERTY),
index 6d5ac77..ab3f0df 100644 (file)
@@ -77,6 +77,7 @@
 #define CTSVC_IPC_SERVER_PERSON_GET_AGGREGATION_SUGGESTIONS    "person_get_aggregation_suggestions"
 
 #define CTSVC_IPC_SERVER_PHONELOG_RESET_STATISTICS    "phonelog_reset_statistics"
+#define CTSVC_IPC_SERVER_PHONELOG_RESET_STATISTICS_BY_SIM "phonelog_reset_statistics_by_sim"
 #define CTSVC_IPC_SERVER_PHONELOG_DELETE    "phonelog_delete"
 
 #define CTSVC_IPC_SERVER_SETTING_GET_NAME_DISPLAY_ORDER "setting_get_name_display_order"
index 2b3f6b0..ad55109 100644 (file)
@@ -80,6 +80,31 @@ extern "C"
  */
 int contacts_phone_log_reset_statistics(void);
 
+/**
+ * @brief   Resets the phone log's count by sim slot no.
+ *
+ * @since_tizen 3.0
+ * @privlevel public
+ * @privilege %http://tizen.org/privilege/callhistory.write
+ *
+ * @param[in]   sim_slot_no       It is related to the SIM slot number. sim_slot_no 0 means first SIM, sim_slot_no 1 means second SIM
+ *
+ * @return  @c 0 on success,
+ *          otherwise a negative error value
+ *
+ * @retval  #CONTACTS_ERROR_NONE                Successful
+ * @retval  #CONTACTS_ERROR_OUT_OF_MEMORY       Out of memory
+ * @retval  #CONTACTS_ERROR_FILE_NO_SPACE       FS Full
+ * @retval  #CONTACTS_ERROR_DB                  Database operation failure
+ * @retval  #CONTACTS_ERROR_IPC                 IPC error
+ * @retval  #CONTACTS_ERROR_PERMISSION_DENIED   Permission denied. This application does not have the privilege to call this method.
+ * @retval  #CONTACTS_ERROR_NOT_SUPPORTED       Not supported
+ *
+ * @pre     contacts_connect() should be called to open a connection to the contacts service.
+ *
+ * @see  contacts_connect()
+ */
+int contacts_phone_log_reset_statistics_by_sim(int sim_slot_no);
 
 /**
  * @}
index 916382c..1af7ab7 100644 (file)
@@ -291,7 +291,7 @@ _CONTACTS_END_READ_ONLY_VIEW(_contacts_simple_contact)
  * <tr><td>record</td><td>relationship</td><td>read, write</td><td> _contacts_relationship child record (multiple)</td></tr>
  * <tr><td>record</td><td>image</td><td>read, write</td><td> _contacts_image child record (multiple)</td></tr>
  * <tr><td>record</td><td>group_relation</td><td>read, write</td><td> _contacts_group_relation child record (multiple)</td></tr>
- * <tr><td>record</td><td>sip</td><td>read, write</td><td> _contacts_sip child record (multiple) </td></tr>
+ * <tr><td>record</td><td>sip</td><td>read, write</td><td> _contacts_sip child record (multiple) (Since 3.0)</td></tr>
  * </table>
  */
 _CONTACTS_BEGIN_VIEW()
@@ -358,7 +358,7 @@ _CONTACTS_END_VIEW(_contacts_contact)
  * <tr><td>record</td><td>profile</td><td>read, write</td><td> _contacts_profile child record (multiple) </td></tr>
  * <tr><td>record</td><td>relationship</td><td>read, write</td><td> _contacts_relationship child record (multiple) </td></tr>
  * <tr><td>record</td><td>image</td><td>read, write</td><td> _contacts_image child record (multiple) </td></tr>
- * <tr><td>record</td><td>sip</td><td>read, write</td><td> _contacts_sip child record (multiple) </td></tr>
+ * <tr><td>record</td><td>sip</td><td>read, write</td><td> _contacts_sip child record (multiple) (Since 3.0) </td></tr>
  * </table>
  */
 _CONTACTS_BEGIN_VIEW()
@@ -1686,16 +1686,18 @@ _CONTACTS_END_READ_ONLY_VIEW(_contacts_contact_activity)
  * <tr><td>string</td><td>_uri</td><td> Identifier of this log stat view </td></tr>
  * <tr><td>integer</td><td> log_count </td><td>Log count (projection) </td></tr>
  * <tr><td>integer</td><td> log_type </td><td> Log type, see the @ref contacts_phone_log_type_e </td></tr>
+ * <tr><td>integer</td><td> sim_slot_no </td><td>It is related to the SIM slot number. sim_slot_no 0 means first SIM card, sim_slot_no 1 means second SIM. It is same with handle index of telephony handle list. Refer to the telephony_init() (Since 3.0)</td></tr>
  * </table>
  */
 _CONTACTS_BEGIN_READ_ONLY_VIEW()
     _CONTACTS_PROPERTY_PROJECTION_INT(log_count)
     _CONTACTS_PROPERTY_INT(log_type)
+    _CONTACTS_PROPERTY_INT(sim_slot_no)   /*(Since 3.0)*/
 _CONTACTS_END_READ_ONLY_VIEW(_contacts_phone_log_stat)
 
 /**
  * @addtogroup CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE View/Property
- * @section CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_sip _contacts_sip view
+ * @section CAPI_SOCIAL_CONTACTS_SVC_VIEW_MODULE_contacts_sip _contacts_sip view (Since 3.0)
  * <table>
  * <tr>
  *    <th>Type</th>
index 5882520..fe25ff4 100644 (file)
@@ -1,6 +1,6 @@
 Name:       contacts-service
 Summary:    Contacts Service
-Version:    0.13.47
+Version:    0.13.48
 Release:    0
 Group:      Social & Content/Service
 License:    Apache-2.0
index 4ad5528..a9b69c7 100644 (file)
@@ -20,7 +20,7 @@
 
 --PRAGMA journal_mode = PERSIST;
 --PRAGMA journal_mode = TRUNCATE;
-PRAGMA user_version = 102;
+PRAGMA user_version = 103;
 
 CREATE TABLE persons
 (
@@ -329,13 +329,15 @@ CREATE TRIGGER trg_phonelogs_del AFTER DELETE ON phonelogs
 
 CREATE TABLE phonelog_stat
 (
-       log_type                        INTEGER PRIMARY KEY,
-       log_count                       INTEGER
+       log_type                        INTEGER,
+       log_count                       INTEGER,
+       sim_id                  INTEGER
 );
 
 CREATE TRIGGER trg_phonelogs_insert AFTER INSERT ON phonelogs
        BEGIN
-               INSERT OR REPLACE INTO phonelog_stat values(new.log_type, coalesce((SELECT log_count+1 FROM phonelog_stat WHERE log_type=new.log_type), 1));
+               UPDATE phonelog_stat SET log_count = log_count+1 WHERE log_type=new.log_type AND sim_id=new.sim_id;
+               INSERT INTO phonelog_stat SELECT new.log_type, 1, new.sim_id WHERE NOT EXISTS (SELECT * FROM phonelog_stat WHERE log_type=new.log_type AND sim_id=new.sim_id);
        END;
 
 CREATE TABLE contact_stat
index de047f8..2e678b2 100644 (file)
@@ -866,7 +866,8 @@ DATA_FREE:
 }
 
 #ifdef ENABLE_LOG_FEATURE
-void ctsvc_ipc_phone_log_reset_statistics(pims_ipc_h ipc, pims_ipc_data_h indata, pims_ipc_data_h *outdata, void *userdata)
+void ctsvc_ipc_phone_log_reset_statistics(pims_ipc_h ipc,
+               pims_ipc_data_h indata, pims_ipc_data_h *outdata, void *userdata)
 {
        int ret;
        contacts_h contact = NULL;
@@ -917,6 +918,66 @@ DATA_FREE:
        return;
 }
 
+void ctsvc_ipc_phone_log_reset_statistics_by_sim(pims_ipc_h ipc,
+               pims_ipc_data_h indata, pims_ipc_data_h *outdata, void *userdata)
+{
+       int ret;
+       int sim_slot_no;
+       contacts_h contact = NULL;
+
+       if (indata) {
+               ret = ctsvc_ipc_unmarshal_handle(indata, &contact);
+               if (CONTACTS_ERROR_NONE != ret) {
+                       ERR("ctsvc_ipc_unmarshal_handle Fail(%d)", ret);
+                       goto ERROR_RETURN;
+               }
+
+               ret = ctsvc_ipc_unmarshal_int(indata, &sim_slot_no);
+               if (CONTACTS_ERROR_NONE != ret) {
+                       ERR("ctsvc_ipc_unmarshal_int() Fail(%d)", ret);
+                       goto ERROR_RETURN;
+               }
+       }
+
+       if (!ctsvc_have_permission(ipc, CTSVC_PERMISSION_PHONELOG_WRITE)) {
+               ret = CONTACTS_ERROR_PERMISSION_DENIED;
+               goto ERROR_RETURN;
+       }
+
+       ret = ctsvc_phone_log_reset_statistics_by_sim(sim_slot_no);
+
+ERROR_RETURN:
+       if (outdata) {
+               *outdata = pims_ipc_data_create(0);
+               if (NULL == *outdata) {
+                       ERR("pims_ipc_data_create() Fail");
+                       goto DATA_FREE;
+               }
+               if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_int(ret, *outdata)) {
+                       pims_ipc_data_destroy(*outdata);
+                       *outdata = NULL;
+                       ERR("ctsvc_ipc_marshal_int() Fail");
+                       goto DATA_FREE;
+               }
+               if (CONTACTS_ERROR_NONE == ret) {
+                       int transaction_ver = ctsvc_get_transaction_ver();
+                       if (CONTACTS_ERROR_NONE != ctsvc_ipc_marshal_int(transaction_ver, *outdata)) {
+                               pims_ipc_data_destroy(*outdata);
+                               *outdata = NULL;
+                               ERR("ctsvc_ipc_marshal_int() Fail");
+                               goto DATA_FREE;
+                       }
+               }
+       } else {
+               ERR("outdata is NULL");
+       }
+DATA_FREE:
+       ctsvc_handle_destroy(contact);
+       ctsvc_server_start_timeout();
+       return;
+}
+
+
 void ctsvc_ipc_phone_log_delete(pims_ipc_h ipc, pims_ipc_data_h indata,
                pims_ipc_data_h *outdata, void *userdata)
 {
index c2a6aba..d073646 100644 (file)
@@ -39,6 +39,7 @@ void ctsvc_ipc_person_get_aggregation_suggestions(pims_ipc_h ipc, pims_ipc_data_
 
 #ifdef ENABLE_LOG_FEATURE
 void ctsvc_ipc_phone_log_reset_statistics(pims_ipc_h ipc, pims_ipc_data_h indata, pims_ipc_data_h *outdata, void *userdata);
+void ctsvc_ipc_phone_log_reset_statistics_by_sim(pims_ipc_h ipc, pims_ipc_data_h indata, pims_ipc_data_h *outdata, void *userdata);
 void ctsvc_ipc_phone_log_delete(pims_ipc_h ipc, pims_ipc_data_h indata, pims_ipc_data_h *outdata, void *userdata);
 #endif /* ENABLE_LOG_FEATURE */
 
index 7004132..4b3859d 100644 (file)
@@ -104,6 +104,7 @@ static int __server_main(void)
 
 #ifdef ENABLE_LOG_FEATURE
                if (pims_ipc_svc_register(CTSVC_IPC_PHONELOG_MODULE, CTSVC_IPC_SERVER_PHONELOG_RESET_STATISTICS, ctsvc_ipc_phone_log_reset_statistics, NULL) != 0) break;
+               if (pims_ipc_svc_register(CTSVC_IPC_PHONELOG_MODULE, CTSVC_IPC_SERVER_PHONELOG_RESET_STATISTICS_BY_SIM, ctsvc_ipc_phone_log_reset_statistics_by_sim, NULL) != 0) break;
                if (pims_ipc_svc_register(CTSVC_IPC_PHONELOG_MODULE, CTSVC_IPC_SERVER_PHONELOG_DELETE, ctsvc_ipc_phone_log_delete, NULL) != 0) break;
 #endif /* ENABLE_LOG_FEATURE */
 
index 52b2f63..5b70c34 100644 (file)
@@ -42,6 +42,22 @@ int ctsvc_phone_log_reset_statistics()
        return ctsvc_query_exec(query);
 }
 
+int ctsvc_phone_log_reset_statistics_by_sim(int sim_slot_no)
+{
+       char query[CTS_SQL_MIN_LEN] = {0};
+       int sim_info_id;
+
+       sim_info_id = ctsvc_server_sim_get_info_id_by_sim_slot_no(sim_slot_no);
+       if (sim_info_id <= 0) {
+               ERR("ctsvc_server_sim_get_info_id_by_sim_slot_no() Fail(%d)", sim_info_id);
+               return CONTACTS_ERROR_NO_DATA;
+       }
+
+       snprintf(query, sizeof(query), "DELETE FROM "CTS_TABLE_PHONELOG_STAT
+                       " WHERE sim_id = %d", sim_info_id);
+       return ctsvc_query_exec(query);
+}
+
 int ctsvc_phone_log_delete(contacts_phone_log_delete_e op, ...)
 {
        int ret;
index 0daad92..f1a3375 100644 (file)
@@ -24,6 +24,7 @@
 #include "contacts_phone_log_internal.h"
 
 int ctsvc_phone_log_reset_statistics();
+int ctsvc_phone_log_reset_statistics_by_sim(int sim_slot_no);
 int ctsvc_phone_log_delete(contacts_phone_log_delete_e op, ...);
 void ctsvc_db_phone_log_delete_callback(sqlite3_context  *context,
                int argc, sqlite3_value **argv);
index c197ce3..c5c4971 100644 (file)
@@ -34,7 +34,7 @@
  * You have to update user version schema.sql
  *                     PRAGMA user_version = 100;
  */
-#define CTSVC_SCHEMA_VERSION 102
+#define CTSVC_SCHEMA_VERSION 103
 
 #ifdef ENABLE_LOG_FEATURE
 static int __ctsvc_server_find_person_id_of_phonelog(sqlite3 *__db, char *normal_num,
@@ -417,6 +417,44 @@ int ctsvc_server_db_update(void)
                old_version = 102;
        }
 
+       if (old_version <= 102) {
+               ret = sqlite3_exec(__db, "DROP TABLE phonelog_stat", NULL, 0, &errmsg);
+               if (SQLITE_OK != ret) {
+                       ERR("drop phonelog_stat Fail(%d) : %s", ret, errmsg);
+                       sqlite3_free(errmsg);
+               }
+
+               ret = sqlite3_exec(__db, "CREATE TABLE "CTS_TABLE_PHONELOG_STAT" "
+                               "(log_type INTEGER, "
+                               "log_count INTEGER, "
+                               "sim_id INTEGER)"
+                               , NULL, 0, &errmsg);
+               if (SQLITE_OK != ret) {
+                       ERR("create phonelog_stat Fail(%d) : %s", ret, errmsg);
+                       sqlite3_free(errmsg);
+               }
+
+               ret = sqlite3_exec(__db, "DROP trigger trg_phonelogs_insert", NULL, 0, &errmsg);
+               if (SQLITE_OK != ret) {
+                       ERR("drop trigger trg_phonelogs_insert Fail(%d) : %s", ret, errmsg);
+                       sqlite3_free(errmsg);
+               }
+
+               ret = sqlite3_exec(__db,
+                               "CREATE TRIGGER trg_phonelogs_insert AFTER INSERT ON phonelogs "
+                               " BEGIN "
+                               "       UPDATE phonelog_stat SET log_count = log_count+1 WHERE log_type=new.log_type AND sim_id=new.sim_id; "
+                               "      INSERT INTO phonelog_stat SELECT new.log_type, 1, new.sim_id WHERE NOT EXISTS (SELECT * FROM phonelog_stat WHERE log_type=new.log_type AND sim_id=new.sim_id); "
+                               " END;",
+                               NULL, 0, &errmsg);
+               if (SQLITE_OK != ret) {
+                       ERR("create trigger trg_phonelogs_insert Fail(%d) : %s", ret, errmsg);
+                       sqlite3_free(errmsg);
+               }
+
+               old_version = 103;
+       }
+
        snprintf(query, sizeof(query),
                        "PRAGMA user_version = %d", CTSVC_SCHEMA_VERSION);
        ret = sqlite3_exec(__db, query, NULL, 0, &errmsg);
index 9491cf3..f5a3c79 100644 (file)
@@ -150,7 +150,8 @@ static inline int __ctsvc_db_create_int_condition(ctsvc_composite_filter_s *com_
                        "property id(%d)", filter->property_id);
 
 #ifdef _CONTACTS_IPC_SERVER
-       if (filter->property_id == CTSVC_PROPERTY_PHONELOG_SIM_SLOT_NO) {
+       if (CTSVC_PROPERTY_PHONELOG_SIM_SLOT_NO == filter->property_id ||
+                       CTSVC_PROPERTY_PHONELOG_STAT_SIM_SLOT_NO == filter->property_id) {
                /* get real sim info id by SIM slot number 0/1 */
                int sim_info_id = ctsvc_server_sim_get_info_id_by_sim_slot_no(filter->value.i);
                if (0 < sim_info_id) {