return ret;
}
+int media_db_check_integrity(MediaDBHandle *handle)
+{
+ sqlite3 * db_handle = (sqlite3 *)handle;
+
+ MSAPI_RETVM_IF(db_handle == NULL, MS_MEDIA_ERR_INVALID_PARAMETER, "Handle is NULL");
+
+ int ret = 0;
+ sqlite3_stmt *stmt = NULL;
+ const char integrity_check_query[] = "PRAGMA integrity_check";
+
+ ret = sqlite3_prepare_v2(db_handle, integrity_check_query, strlen(integrity_check_query), &stmt, NULL);
+ if (ret != SQLITE_OK) {
+ MSAPI_DBG_ERR("prepare error, ret = %d, error = %s", ret, sqlite3_errmsg(db_handle));
+ return MS_MEDIA_ERR_DB_CORRUPT;
+ }
+
+ ret = sqlite3_step(stmt);
+ if (ret != SQLITE_ROW) {
+ MSAPI_DBG_ERR("integrity_check failed in step");
+ sqlite3_finalize(stmt);
+ return MS_MEDIA_ERR_DB_CORRUPT;
+ }
+
+ char* check_result = (char*) sqlite3_column_text(stmt, 0);
+ if (check_result == NULL || strncmp(check_result, "ok", strlen(check_result))) {
+ MSAPI_DBG_ERR("integrity_check failed - result(%s)\n", check_result);
+ sqlite3_finalize(stmt);
+ return MS_MEDIA_ERR_DB_CORRUPT;
+ }
+ sqlite3_finalize(stmt);
+
+ return MS_MEDIA_ERR_NONE;
+}
+
int media_db_connect(MediaDBHandle **handle, uid_t uid, bool need_write)
{
int ret = MS_MEDIA_ERR_NONE;
return MS_MEDIA_ERR_DB_CONNECT_FAIL;
}
+ if (media_db_check_integrity(db_handle) != MS_MEDIA_ERR_NONE) {
+ MS_DBG_ERR("check interity failed");
+ media_db_disconnect(db_handle);
+ return MS_MEDIA_ERR_DB_CORRUPT;
+ }
+
/* Disconnect DB*/
media_db_disconnect(db_handle);