Move logic for reset mediadb 14/147114/1
authorMinje Ahn <minje.ahn@samsung.com>
Fri, 1 Sep 2017 05:04:52 +0000 (14:04 +0900)
committerMinje Ahn <minje.ahn@samsung.com>
Fri, 1 Sep 2017 05:04:52 +0000 (14:04 +0900)
Change-Id: I7b4fe4f3068ac221fdab166cf04704521d1aaa1b
Signed-off-by: Minje Ahn <minje.ahn@samsung.com>
src/common/include/media-common-db-svc.h
src/common/media-common-db-svc.c
src/scanner-v2/media-scanner-db-manage-v2.c

index be2a72e..ff1b3c4 100755 (executable)
@@ -54,6 +54,7 @@ typedef enum {
 
 typedef int (*CONNECT)(void**, uid_t, char **);
 typedef int (*DISCONNECT)(void*, char **);
+typedef int (*CLEANUP_DB)(void*, uid_t, char **);
 typedef int (*INSERT_ITEM_BEGIN)(void*, int, int, int, char **);
 typedef int (*INSERT_ITEM_END)(void*, uid_t, char **);
 typedef int (*SET_ITEM_VALIDITY_BEGIN)(void*, int, char **);
@@ -110,6 +111,7 @@ int ms_load_functions(void);
 void ms_unload_functions(void);
 int ms_connect_db(void ***handle, uid_t uid);
 int ms_disconnect_db(void ***handle);
+int ms_cleanup_db(void **handle, uid_t uid);
 int ms_validate_item(void **handle, const char *storage_id, const char *path, uid_t uid);
 int ms_insert_item_batch(void **handle, const char *storage_id, const char *path, uid_t uid);
 int ms_insert_burst_item(void **handle, const char *storage_id, const char *path, uid_t uid);
index 8e0bc62..201a381 100755 (executable)
@@ -44,6 +44,7 @@ int set_count_for_partial = 0;
 enum func_list {
        eCONNECT,
        eDISCONNECT,
+       eCLEANUP_DB,
        eEXIST,
        eINSERT_BEGIN,
        eINSERT_END,
@@ -152,6 +153,7 @@ int ms_load_functions(void)
        char func_list[eFUNC_MAX][40] = {
                "connect_db",
                "disconnect_db",
+               "cleanup_db",
                "check_item_exist",
                "insert_item_begin",
                "insert_item_end",
@@ -370,6 +372,26 @@ int ms_disconnect_db(void ***handle)
        return MS_MEDIA_ERR_NONE;
 }
 
+int ms_cleanup_db(void **handle, uid_t uid)
+{
+       int lib_index;
+       int ret;
+       char * err_msg = NULL;
+
+       for (lib_index = 0; lib_index < lib_num; lib_index++) {
+               ret = ((CLEANUP_DB)func_array[lib_index][eCLEANUP_DB])(handle[lib_index], uid, &err_msg); /*dlopen*/
+               if (ret != 0) {
+                       MS_DBG_ERR("error : %s [%s]", g_array_index(so_array, char*, lib_index), err_msg);
+                       MS_SAFE_FREE(err_msg);
+                       return MS_MEDIA_ERR_DB_INTERNAL;
+               }
+       }
+
+       MS_DBG_INFO("Cleanup Media DB");
+
+       return MS_MEDIA_ERR_NONE;
+}
+
 int ms_validate_item(void **handle, const char *storage_id, const char *path, uid_t uid)
 {
        int lib_index;
index b2ae5fe..bf2dc93 100755 (executable)
@@ -76,206 +76,25 @@ int msc_check_db_size(uid_t uid, int scan_type)
        return MS_MEDIA_ERR_NONE;\r
 }\r
 \r
-#define MEDIA_DB_TABLE_STORAGE "storage"\r
-\r
-static int __msc_get_invalid_storage(void *handle, GArray **storage_list)\r
-{\r
-       int ret = MS_MEDIA_ERR_NONE;\r
-       sqlite3_stmt *sql_stmt = NULL;\r
-       char *sql = NULL;\r
-       char *storage_uuid = NULL;\r
-       int err = -1;\r
-\r
-       sql = sqlite3_mprintf("SELECT storage_uuid FROM '%s' WHERE validity=0", MEDIA_DB_TABLE_STORAGE);\r
-       if (sql == NULL) {\r
-               MS_DBG_ERR("sqlite3_mprintf failed");\r
-               return MS_MEDIA_ERR_OUT_OF_MEMORY;\r
-       }\r
-\r
-       err = sqlite3_prepare_v2(handle, sql, -1, &sql_stmt, NULL);\r
-       sqlite3_free((char *)sql);\r
-\r
-       if (err != SQLITE_OK) {\r
-               MS_DBG_ERR("prepare error %d[%s]", err, sqlite3_errmsg(handle));\r
-               return MS_MEDIA_ERR_DB_READ_FAIL;\r
-       }\r
-\r
-       if (*storage_list == NULL) {\r
-               *storage_list = g_array_new(FALSE, FALSE, sizeof(char*));\r
-       }\r
-\r
-       while (sqlite3_step(sql_stmt) == SQLITE_ROW) {\r
-               storage_uuid = strdup((const char *)sqlite3_column_text(sql_stmt, 0));\r
-               MS_DBG_WARN("INVALID STORAGE ID : %s", storage_uuid);\r
-               g_array_append_val(*storage_list, storage_uuid);\r
-       }\r
-\r
-       if (sql_stmt) sqlite3_finalize(sql_stmt);\r
-\r
-       return ret;\r
-}\r
-\r
-static int __msc_cleanup_invalid_storage_table(void *handle, GArray *storage_list)\r
-{\r
-       int ret = MS_MEDIA_ERR_NONE;\r
-       int i = 0;\r
-       int count = 0;\r
-       char *storage_uuid = NULL;\r
-       char *sql = NULL;\r
-       char *zErrMsg = NULL;\r
-\r
-       if (storage_list == NULL || storage_list->len == 0) {\r
-               MS_DBG_ERR("There is no invalid storage");\r
-       } else {\r
-               count = storage_list->len;\r
-\r
-               for (i = 0; i < count; i++) {\r
-                       storage_uuid = g_array_index(storage_list, char*, i);\r
-                       sql = sqlite3_mprintf("drop table '%s'", storage_uuid);\r
-                       ret = sqlite3_exec(handle, sql, NULL, NULL, &zErrMsg);\r
-                       if (SQLITE_OK != ret) {\r
-                               MS_DBG_ERR("DB UPDATE FAILED [%s]", zErrMsg);\r
-                       }\r
-                       sqlite3_free(sql);\r
-               }\r
-       }\r
-\r
-       return ret;\r
-}\r
-\r
-static int __msc_cleanup_invalid_folder(void *handle, GArray *storage_list)\r
-{\r
-       int ret = MS_MEDIA_ERR_NONE;\r
-       int i = 0;\r
-       int count = 0;\r
-       char *storage_uuid = NULL;\r
-       char *sql = NULL;\r
-       char *zErrMsg = NULL;\r
-\r
-       if (storage_list == NULL || storage_list->len == 0) {\r
-               MS_DBG_ERR("There is no invalid storage");\r
-       } else {\r
-               count = storage_list->len;\r
-\r
-               for (i = 0; i < count; i++) {\r
-                       storage_uuid = g_array_index(storage_list, char*, i);\r
-                       sql = sqlite3_mprintf("delete from folder where storage_uuid = '%s'", storage_uuid);\r
-                       ret = sqlite3_exec(handle, sql, NULL, NULL, &zErrMsg);\r
-                       if (SQLITE_OK != ret) {\r
-                               MS_DBG_ERR("DB UPDATE FAILED [%s]", zErrMsg);\r
-                       }\r
-                       sqlite3_free(sql);\r
-               }\r
-       }\r
-\r
-       return ret;\r
-}\r
-\r
-static int __msc_cleanup_invalid_storage(void *handle, GArray *storage_list)\r
-{\r
-       int ret = MS_MEDIA_ERR_NONE;\r
-       int i = 0;\r
-       int count = 0;\r
-       char *storage_uuid = NULL;\r
-       char *sql = NULL;\r
-       char *zErrMsg = NULL;\r
-\r
-       if (storage_list == NULL || storage_list->len == 0) {\r
-               MS_DBG_ERR("There is no invalid storage");\r
-       } else {\r
-               count = storage_list->len;\r
-\r
-               for (i = 0; i < count; i++) {\r
-                       storage_uuid = g_array_index(storage_list, char*, i);\r
-                       sql = sqlite3_mprintf("delete from storage where storage_uuid = '%s'", storage_uuid);\r
-                       ret = sqlite3_exec(handle, sql, NULL, NULL, &zErrMsg);\r
-                       if (SQLITE_OK != ret) {\r
-                               MS_DBG_ERR("DB UPDATE FAILED [%s]", zErrMsg);\r
-                       }\r
-                       sqlite3_free(sql);\r
-               }\r
-       }\r
-\r
-       return ret;\r
-}\r
-\r
-static int __msc_cleanup_start(void *handle)\r
-{\r
-       int ret = MS_MEDIA_ERR_NONE;\r
-       char *zErrMsg = NULL;\r
-       char *sql = NULL;\r
-\r
-       sql = sqlite3_mprintf("%s", "BEGIN IMMEDIATE;");\r
-\r
-       ret = sqlite3_exec(handle, sql, NULL, NULL, &zErrMsg);\r
-       if (SQLITE_OK != ret) {\r
-               MS_DBG_ERR("DB UPDATE FAILED [%s]", zErrMsg);\r
-       }\r
-\r
-       sqlite3_free(sql);\r
-\r
-       return ret;\r
-}\r
-\r
-static int __msc_cleanup_end(void *handle)\r
-{\r
-       int ret = MS_MEDIA_ERR_NONE;\r
-       char *zErrMsg = NULL;\r
-       char *sql = NULL;\r
-\r
-       sql = sqlite3_mprintf("%s", "COMMIT;");\r
-\r
-       ret = sqlite3_exec(handle, sql, NULL, NULL, &zErrMsg);\r
-       if (SQLITE_OK != ret) {\r
-               MS_DBG_ERR("DB UPDATE FAILED [%s]", zErrMsg);\r
-       }\r
-\r
-       sqlite3_free(sql);\r
-\r
-       return ret;\r
-}\r
-\r
 int msc_cleanup_invalid_values(uid_t uid)\r
 {\r
-       int i = 0;\r
-       int count = 0;\r
-       void *handle = NULL;\r
-       GArray *storage_list = NULL;\r
-       double db_size = 0.0;\r
-       char *storage_uuid = NULL;\r
+       int ret = MS_MEDIA_ERR_NONE;\r
+       void **handle = NULL;\r
 \r
        MS_DBG_ERR("START CLEANUP MEDIA DB");\r
 \r
-       media_db_connect(&handle, uid, TRUE);\r
-       \r
-       __msc_get_invalid_storage(handle, &storage_list);\r
-\r
-       if (storage_list != NULL && storage_list->len != 0) {\r
-               __msc_cleanup_start(handle);\r
-               __msc_cleanup_invalid_storage_table(handle, storage_list);\r
-               __msc_cleanup_invalid_folder(handle, storage_list);\r
-               __msc_cleanup_invalid_storage(handle, storage_list);\r
-               __msc_cleanup_end(handle);\r
-\r
-               count = storage_list->len;\r
-\r
-       } else {\r
-               MS_DBG_ERR("There is no invalid storage");\r
+       ms_connect_db(&handle, uid);\r
+       ret = ms_cleanup_db(handle, uid);\r
+       if (ret != MS_MEDIA_ERR_NONE) {\r
+               MS_DBG_ERR("'Cleanup failed [%d]", ret);\r
+               return ret;\r
        }\r
 \r
-       media_db_disconnect(handle);\r
-\r
-       ms_check_size_mediadb(uid, &db_size);\r
-       MS_DBG_ERR("END CLEANUP MEDIA DB[%lf]", db_size);\r
-\r
-       for (i = 0; i < count; i++) {\r
-               storage_uuid = g_array_index(storage_list, char*, 0);\r
-               MS_SAFE_FREE(storage_uuid);\r
-               g_array_remove_index(storage_list, 0);\r
-       }\r
+       if (handle)\r
+               ms_disconnect_db(&handle);\r
 \r
-       g_array_free(storage_list, FALSE);\r
+       MS_DBG_ERR("END CLEANUP MEDIA DB");\r
 \r
-       return MS_MEDIA_ERR_NONE;\r
+       return ret;\r
 }\r
 \r