summaryrefslogtreecommitdiff
path: root/src/common/media-svc-db-utils.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/common/media-svc-db-utils.c')
-rwxr-xr-xsrc/common/media-svc-db-utils.c90
1 files changed, 83 insertions, 7 deletions
diff --git a/src/common/media-svc-db-utils.c b/src/common/media-svc-db-utils.c
index adde488..f90825f 100755
--- a/src/common/media-svc-db-utils.c
+++ b/src/common/media-svc-db-utils.c
@@ -32,6 +32,7 @@
static int __media_svc_db_upgrade(sqlite3 *db_handle, int cur_version, uid_t uid);
static int __media_svc_rebuild_view_query(sqlite3 *db_handle, uid_t uid);
+static int __media_svc_query_direct(sqlite3 *handle, const char *query, uid_t uid);
static GHashTable *table;
@@ -1546,11 +1547,18 @@ ERROR:
int _media_svc_sql_query(const char *sql_str, uid_t uid)
{
- int ret = MS_MEDIA_ERR_NONE;
+ return media_db_request_update_db(sql_str, uid);
+}
- media_svc_sec_debug("[SQL query] : %s", sql_str);
+int _media_svc_sql_query_direct(const char *sql_str, uid_t uid)
+{
+ int ret = MS_MEDIA_ERR_NONE;
+ sqlite3 *handle = NULL;
- ret = media_db_request_update_db(sql_str, uid);
+ ret = media_db_connect(&handle, uid, true);
+ media_svc_retvm_if(ret != MS_MEDIA_ERR_NONE, ret, "DB connection failed");
+ ret = __media_svc_query_direct(handle, sql_str, uid);
+ media_db_disconnect(handle);
return ret;
}
@@ -1585,7 +1593,7 @@ int _media_svc_sql_prepare_to_step(sqlite3 *handle, const char *sql_str, sqlite3
return MS_MEDIA_ERR_INVALID_PARAMETER;
}
- media_svc_sec_debug("[SQL query] : %s", sql_str);
+ media_svc_sec_debug("Query[%s]", sql_str);
err = sqlite3_prepare_v2(handle, sql_str, -1, stmt, NULL);
sqlite3_free((char *)sql_str);
@@ -1602,7 +1610,7 @@ int _media_svc_sql_prepare_to_step(sqlite3 *handle, const char *sql_str, sqlite3
err = sqlite3_step(*stmt);
if (err != SQLITE_ROW) {
- media_svc_error("[No-Error] Item not found. end of row [%s]", sqlite3_errmsg(handle));
+ media_svc_debug("No record");
SQLITE3_FINALIZE(*stmt);
return MS_MEDIA_ERR_DB_NO_RECORD;
}
@@ -1616,7 +1624,7 @@ int _media_svc_sql_prepare_to_step_simple(sqlite3 *handle, const char *sql_str,
media_svc_retvm_if(handle == NULL, MS_MEDIA_ERR_INVALID_PARAMETER, "handle is NULL");
- media_svc_sec_debug("[SQL query] : %s", sql_str);
+ media_svc_sec_debug("Query[%s]", sql_str);
if (!STRING_VALID(sql_str)) {
media_svc_error("invalid query");
@@ -1723,6 +1731,75 @@ int _media_svc_sql_query_list(GList **query_list, uid_t uid)
}
+#define MAX_RETRY 9
+#define SLEEP_TIME 1000 * 1000
+static int __media_svc_query_direct(sqlite3 *handle, const char *query, uid_t uid)
+{
+ int ret = MS_MEDIA_ERR_NONE;
+ char *zErrMsg = NULL;
+ int retry_count = 0;
+
+EXEC_RETRY:
+ ret = sqlite3_exec(handle, query, NULL, NULL, &zErrMsg);
+ if (SQLITE_OK != ret) {
+ media_svc_sec_error("Error[%s],Query[%s]", zErrMsg, query);
+ SQLITE3_SAFE_FREE(zErrMsg);
+ if (ret == SQLITE_BUSY) {
+ ret = MS_MEDIA_ERR_DB_BUSY_FAIL;
+ } else if (ret == SQLITE_CONSTRAINT) {
+ ret = MS_MEDIA_ERR_DB_CONSTRAINT_FAIL;
+ } else if (ret == SQLITE_FULL) {
+ ret = MS_MEDIA_ERR_DB_FULL_FAIL;
+ } else if (ret == SQLITE_LOCKED) {
+ if (retry_count < MAX_RETRY) {
+ media_svc_error("Locked retry[%d]", retry_count);
+ retry_count++;
+ usleep(SLEEP_TIME);
+ goto EXEC_RETRY;
+ }
+ ret = MS_MEDIA_ERR_DB_UPDATE_FAIL;
+ } else {
+ ret = MS_MEDIA_ERR_DB_UPDATE_FAIL;
+ }
+ }
+
+ return ret;
+}
+
+int _media_svc_sql_query_list_direct(GList **query_list, uid_t uid)
+{
+ int ret = MS_MEDIA_ERR_NONE;
+ int idx = 0;
+ int length = g_list_length(*query_list);
+ char *sql = NULL;
+ sqlite3 *handle = NULL;
+
+ media_svc_debug("query list length[%d]", length);
+ if (length == 0)
+ goto ZERO_LEN;
+
+ ret = media_db_connect(&handle, uid, true);
+ media_svc_retvm_if(ret != MS_MEDIA_ERR_NONE, ret, "DB connection failed");
+
+ for (idx = 0; idx < length; idx++) {
+ sql = (char *)g_list_nth_data(*query_list, idx);
+ if (STRING_VALID(sql)) {
+ ret = __media_svc_query_direct(handle, sql, uid);
+ if (ret != MS_MEDIA_ERR_NONE)
+ media_svc_debug("_media_svc_query_direct failed[%s]", sql);
+
+ SQLITE3_SAFE_FREE(sql);
+ }
+ }
+
+ media_db_disconnect(handle);
+
+ZERO_LEN:
+ _media_svc_sql_query_release(query_list);
+
+ return MS_MEDIA_ERR_NONE;
+}
+
void _media_svc_sql_query_add(GList **query_list, char **query)
{
*query_list = g_list_append(*query_list, *query);
@@ -1731,7 +1808,6 @@ void _media_svc_sql_query_add(GList **query_list, char **query)
void _media_svc_sql_query_release(GList **query_list)
{
if (*query_list) {
- media_svc_debug("_svc_sql_query_release");
g_list_free(*query_list);
*query_list = NULL;
}