#include <glib.h>
#include "media-svc-env.h"
-#define SQLITE3_FINALIZE(x) if (x != NULL) sqlite3_finalize(x);
-#define SQLITE3_SAFE_FREE(x) {if (x != NULL) {sqlite3_free(x); x = NULL; } }
+static inline void __sqlfree(void *p)
+{
+ void **pp = (void **)p;
+ sqlite3_free(*pp);
+}
+#define sql_autoptr __attribute__((cleanup(__sqlfree))) char *
int _media_svc_make_table_query(const char *table_name, media_svc_table_slist_e list, uid_t uid);
int _media_svc_init_table_query(void);
int _media_svc_get_noti_info(sqlite3 *handle, const char *path, media_svc_noti_item **item);
int _media_svc_append_query_list(const char *query, uid_t uid);
-int _media_svc_get_media(sqlite3 *handle, const char *sql, GList **path_list);
+int _media_svc_get_media(sqlite3 *handle, const char *query, GList **path_list);
#endif /*_MEDIA_SVC_MEDIA_H_*/
Name: libmedia-service
Summary: Media information service library for multimedia applications
-Version: 0.6.4
+Version: 0.6.5
Release: 0
Group: Multimedia/Libraries
License: Apache-2.0
int _media_svc_get_album_id(sqlite3 *handle, const char *album, const char *artist, int *album_id)
{
int ret = MS_MEDIA_ERR_NONE;
- sqlite3_stmt *sql_stmt = NULL;
- char *sql = NULL;
+ sqlite3_stmt *stmt = NULL;
+ sql_autoptr q = NULL;
media_svc_retvm_if(!album, MS_MEDIA_ERR_INVALID_PARAMETER, "album is NULL");
media_svc_retvm_if(!artist, MS_MEDIA_ERR_INVALID_PARAMETER, "artist is NULL");
- sql = sqlite3_mprintf("SELECT album_id FROM %s WHERE name=%Q AND artist=%Q", DB_TABLE_ALBUM, album, artist);
- ret = _media_svc_get_result_with_check_record(handle, sql, &sql_stmt);
- SQLITE3_SAFE_FREE(sql);
+ q = sqlite3_mprintf("SELECT album_id FROM %s WHERE name=%Q AND artist=%Q", DB_TABLE_ALBUM, album, artist);
+ ret = _media_svc_get_result_with_check_record(handle, q, &stmt);
if (ret != MS_MEDIA_ERR_NONE) {
if (ret == MS_MEDIA_ERR_DB_NO_RECORD)
media_svc_debug("there is no album.");
return ret;
}
- *album_id = sqlite3_column_int(sql_stmt, 0);
+ *album_id = sqlite3_column_int(stmt, 0);
- SQLITE3_FINALIZE(sql_stmt);
+ sqlite3_finalize(stmt);
return ret;
}
{
int ret = MS_MEDIA_ERR_NONE;
- char *sql = sqlite3_mprintf("INSERT INTO %s(name, artist, album_art) VALUES (%Q, %Q, %Q);", DB_TABLE_ALBUM, album, artist, album_art);
+ sql_autoptr q = sqlite3_mprintf("INSERT INTO %s(name, artist, album_art) VALUES (%Q, %Q, %Q);",
+ DB_TABLE_ALBUM, album, artist, album_art);
if (is_direct)
- ret = _media_svc_sql_query_direct(sql, uid);
+ ret = _media_svc_sql_query_direct(q, uid);
else
- ret = _media_svc_sql_query(sql, uid);
+ ret = _media_svc_sql_query(q, uid);
- SQLITE3_SAFE_FREE(sql);
media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
int inserted_album_id = 0;
static int __create_playlist_view(uid_t uid)
{
- int ret = MS_MEDIA_ERR_NONE;
GSList *iter = NULL;
column_info_s *col_ptr = NULL;
- char *sql = NULL;
+ sql_autoptr q = NULL;
GString *table_query = g_string_new(NULL);
media_svc_retvm_if(!table_query, MS_MEDIA_ERR_INTERNAL, "g_string_new failed");
g_string_append_printf(table_query, ", media.%s", col_ptr->name);
}
- sql = sqlite3_mprintf(DB_QUERY_VIEW_PLAYLIST, DB_VIEW_PLAYLIST, table_query->str);
+ q = sqlite3_mprintf(DB_QUERY_VIEW_PLAYLIST, DB_VIEW_PLAYLIST, table_query->str);
g_string_free(table_query, TRUE);
- ret = _media_svc_sql_query(sql, uid);
- SQLITE3_SAFE_FREE(sql);
- return ret;
+ return _media_svc_sql_query(q, uid);
}
static int __create_tag_view(uid_t uid)
{
- int ret = MS_MEDIA_ERR_NONE;
GSList *iter = NULL;
column_info_s *col_ptr = NULL;
- char *sql = NULL;
+ sql_autoptr q = NULL;
GString *table_query = g_string_new(NULL);
media_svc_retvm_if(!table_query, MS_MEDIA_ERR_INTERNAL, "g_string_new failed");
g_string_append_printf(table_query, ", media.%s", col_ptr->name);
}
- sql = sqlite3_mprintf(DB_QUERY_VIEW_TAG, DB_VIEW_TAG, table_query->str);
+ q = sqlite3_mprintf(DB_QUERY_VIEW_TAG, DB_VIEW_TAG, table_query->str);
g_string_free(table_query, TRUE);
- ret = _media_svc_sql_query(sql, uid);
- SQLITE3_SAFE_FREE(sql);
- return ret;
+ return _media_svc_sql_query(q, uid);
}
int _media_svc_make_table_query(const char *table_name, media_svc_table_slist_e list, uid_t uid)
GSList *iter = NULL;
table_info_s *tb = NULL;
column_info_s *col_ptr = NULL;
- char *sql = NULL;
+ sql_autoptr q = NULL;
GString *table_query = g_string_new(NULL);
GString *trigger_query = g_string_new(NULL);
GString *unique_query = g_string_new(NULL);
/*send queries */
if (unique_query->len > 0)
- sql = sqlite3_mprintf(DB_QUERY_TABLE_WITH_UNIQUE, table_name, table_query->str, unique_query->str);
+ q = sqlite3_mprintf(DB_QUERY_TABLE_WITH_UNIQUE, table_name, table_query->str, unique_query->str);
else
- sql = sqlite3_mprintf(DB_QUERY_TABLE, table_name, table_query->str);
+ q = sqlite3_mprintf(DB_QUERY_TABLE, table_name, table_query->str);
- ret = _media_svc_sql_query(sql, uid);
- SQLITE3_SAFE_FREE(sql);
+ ret = _media_svc_sql_query(q, uid);
if (ret != MS_MEDIA_ERR_NONE)
goto ERROR;
static int __media_svc_query_direct(sqlite3 *handle, const char *query, uid_t uid)
{
int ret = MS_MEDIA_ERR_NONE;
- char *zErrMsg = NULL;
+ sql_autoptr err = NULL;
int retry_count = 0;
EXEC_RETRY:
- ret = sqlite3_exec(handle, query, NULL, NULL, &zErrMsg);
+ ret = sqlite3_exec(handle, query, NULL, NULL, &err);
if (SQLITE_OK != ret) {
- media_svc_sec_error("Error[%s],Query[%s]", zErrMsg, query);
- SQLITE3_SAFE_FREE(zErrMsg);
+ media_svc_sec_error("Error[%s],Query[%s]", err, query);
if (ret == SQLITE_BUSY) {
ret = MS_MEDIA_ERR_DB_BUSY_FAIL;
} else if (ret == SQLITE_CONSTRAINT) {
int _media_svc_check_table_exist(sqlite3 *db_handle, bool *exist)
{
int ret = MS_MEDIA_ERR_NONE;
- sqlite3_stmt *sql_stmt = NULL;
- const char *sql = "SELECT name FROM sqlite_master WHERE type='table' AND name='media';";
+ sqlite3_stmt *stmt = NULL;
+ const char *q = "SELECT name FROM sqlite_master WHERE type='table' AND name='media';";
- ret = _media_svc_get_result(db_handle, sql, &sql_stmt);
+ ret = _media_svc_get_result(db_handle, q, &stmt);
media_svc_retvm_if(ret != MS_MEDIA_ERR_NONE, ret, "_media_svc_get_result failed");
- if (sqlite3_step(sql_stmt) != SQLITE_ROW) {
+ if (sqlite3_step(stmt) != SQLITE_ROW) {
media_svc_debug("Need to create table");
*exist = false;
} else {
*exist = true;
}
- SQLITE3_FINALIZE(sql_stmt);
+ sqlite3_finalize(stmt);
return MS_MEDIA_ERR_NONE;
}
if (sqlite3_step(*stmt) != SQLITE_ROW) {
media_svc_debug("No record");
- SQLITE3_FINALIZE(*stmt);
+ sqlite3_finalize(*stmt);
return MS_MEDIA_ERR_DB_NO_RECORD;
}
int ret = MS_MEDIA_ERR_NONE;
int idx = 0;
int length = g_list_length(*query_list);
- char *sql = NULL;
+ char *q = NULL;
media_svc_debug("query list length : [%d]", length);
for (idx = 0; idx < length; idx++) {
- sql = (char *)g_list_nth_data(*query_list, idx);
- if (STRING_VALID(sql)) {
- ret = media_db_request_update_db(sql, uid);
+ q = (char *)g_list_nth_data(*query_list, idx);
+ if (STRING_VALID(q)) {
+ ret = media_db_request_update_db(q, uid);
if (ret != MS_MEDIA_ERR_NONE)
media_svc_error("media_db_request_update_db failed : %d", ret);
}
- SQLITE3_SAFE_FREE(sql);
+ sqlite3_free(q);
}
_media_svc_sql_query_release(query_list);
int ret = MS_MEDIA_ERR_NONE;
int idx = 0;
int length = g_list_length(*query_list);
- char *sql = NULL;
- char *zErrMsg = NULL;
+ char *q = NULL;
sqlite3 *handle = NULL;
bool with_transaction = true;
ret = media_db_connect(&handle, uid, true);
media_svc_retvm_if(ret != MS_MEDIA_ERR_NONE, ret, "DB connection failed");
- ret = sqlite3_exec(handle, "BEGIN;", NULL, NULL, &zErrMsg);
+ ret = sqlite3_exec(handle, "BEGIN;", NULL, NULL, NULL);
if (SQLITE_OK != ret) {
- media_svc_sec_error("Transaction failed[%s]. Try an individual insert.", zErrMsg);
- SQLITE3_SAFE_FREE(zErrMsg);
+ media_svc_error("transaction failed. try an individual insert.");
with_transaction = false;
}
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);
+ q = (char *)g_list_nth_data(*query_list, idx);
+ if (STRING_VALID(q)) {
+ ret = __media_svc_query_direct(handle, q, uid);
if (ret != MS_MEDIA_ERR_NONE)
- media_svc_debug("_media_svc_query_direct failed[%s]", sql);
+ media_svc_debug("_media_svc_query_direct failed[%s]", q);
- SQLITE3_SAFE_FREE(sql);
+ sqlite3_free(q);
}
}
if (with_transaction) {
- ret = sqlite3_exec(handle, "COMMIT;", NULL, NULL, &zErrMsg);
+ ret = sqlite3_exec(handle, "COMMIT;", NULL, NULL, NULL);
if (SQLITE_OK != ret) {
- media_svc_sec_error("Commit failed[%s]", zErrMsg);
- SQLITE3_SAFE_FREE(zErrMsg);
+ media_svc_error("Commit failed");
media_db_disconnect(handle);
_media_svc_sql_query_release(query_list);
return MS_MEDIA_ERR_DB_INTERNAL;
static int __media_svc_get_folder_id(sqlite3 *handle, const char *path, long long int *folder_id)
{
int ret = MS_MEDIA_ERR_NONE;
- sqlite3_stmt *sql_stmt = NULL;
- char *sql = sqlite3_mprintf("SELECT folder_id FROM %q WHERE folder_path=%Q", DB_TABLE_FOLDER, path);
+ sqlite3_stmt *stmt = NULL;
+ sql_autoptr q = sqlite3_mprintf("SELECT folder_id FROM %q WHERE folder_path=%Q", DB_TABLE_FOLDER, path);
- ret = _media_svc_get_result_with_check_record(handle, sql, &sql_stmt);
- SQLITE3_SAFE_FREE(sql);
+ ret = _media_svc_get_result_with_check_record(handle, q, &stmt);
media_svc_retvm_if(ret != MS_MEDIA_ERR_NONE, ret, "failed to get folder id[%d]", ret);
- *folder_id = sqlite3_column_int64(sql_stmt, 0);
+ *folder_id = sqlite3_column_int64(stmt, 0);
- SQLITE3_FINALIZE(sql_stmt);
+ sqlite3_finalize(stmt);
return ret;
}
static int __media_svc_append_folder(bool is_direct, const char *storage_id, const char *folder_path, uid_t uid)
{
- int ret = MS_MEDIA_ERR_NONE;
- char *folder_name = NULL;
-
- folder_name = g_path_get_basename(folder_path);
-
- /* Sometime SQLITE3 returns NO_RECORD, so need to consider conflict case.. */
- char *sql = sqlite3_mprintf("INSERT OR IGNORE INTO %q(folder_path, folder_name, storage_uuid) VALUES (%Q, %Q, %Q);",
+ g_autofree gchar *folder_name = g_path_get_basename(folder_path);
+ sql_autoptr q = sqlite3_mprintf("INSERT OR IGNORE INTO %q(folder_path, folder_name, storage_uuid) VALUES (%Q, %Q, %Q);",
DB_TABLE_FOLDER, folder_path, folder_name, storage_id);
if (is_direct)
- ret = _media_svc_sql_query_direct(sql, uid);
- else
- ret = _media_svc_sql_query(sql, uid);
-
- SQLITE3_SAFE_FREE(sql);
+ return _media_svc_sql_query_direct(q, uid);
- g_free(folder_name);
-
- return ret;
+ return _media_svc_sql_query(q, uid);
}
static int __media_svc_append_parent_folder(sqlite3 *handle, bool is_direct, const char *storage_id, const char *path, uid_t uid)
int _media_svc_get_and_append_folder_id_by_path(sqlite3 *handle, bool is_direct, const char *storage_id, const char *path, long long int *folder_id, uid_t uid)
{
- char *dir_path = NULL;
int ret = MS_MEDIA_ERR_NONE;
-
- dir_path = g_path_get_dirname(path);
+ g_autofree gchar *dir_path = g_path_get_dirname(path);
ret = __media_svc_get_folder_id(handle, dir_path, folder_id);
if (ret == MS_MEDIA_ERR_DB_NO_RECORD) {
ret = __media_svc_append_parent_folder(handle, is_direct, storage_id, dir_path, uid);
- if (ret != MS_MEDIA_ERR_NONE) {
- media_svc_error("__media_svc_append_parent_folder failed");
- goto FINALIZE;
- }
+ media_svc_retvm_if(ret != MS_MEDIA_ERR_NONE, ret, "failed to append parent folder");
- ret = __media_svc_get_folder_id(handle, dir_path, folder_id);
+ return __media_svc_get_folder_id(handle, dir_path, folder_id);
}
-FINALIZE:
- g_free(dir_path);
return ret;
}
int _media_svc_append_by_folder_path(sqlite3 *handle, const char *storage_id, const char *path, uid_t uid)
{
- int ret = MS_MEDIA_ERR_NONE;
+ if (_media_svc_check_folder_by_path(handle, path) == MS_MEDIA_ERR_DB_NO_RECORD)
+ return __media_svc_append_parent_folder(handle, true, storage_id, path, uid);
- ret = _media_svc_check_folder_by_path(handle, path);
- if (ret == MS_MEDIA_ERR_DB_NO_RECORD)
- ret = __media_svc_append_parent_folder(handle, true, storage_id, path, uid);
- else
- ret = _media_svc_set_folder_validity(true, path, 1, false, uid);
-
- return ret;
+ return _media_svc_set_folder_validity(true, path, 1, false, uid);
}
int _media_svc_set_folder_validity(bool is_direct, const char *start_path, int validity, bool is_recursive, uid_t uid)
{
- int ret = MS_MEDIA_ERR_NONE;
- char *sql = NULL;
+ sql_autoptr q = NULL;
if (is_recursive) {
- sql = sqlite3_mprintf("UPDATE %q SET validity=%d WHERE folder_path LIKE '%q/%%' OR folder_path=%Q",
+ q = sqlite3_mprintf("UPDATE %q SET validity=%d WHERE folder_path LIKE '%q/%%' OR folder_path=%Q",
DB_TABLE_FOLDER, validity, start_path, start_path);
} else {
- sql = sqlite3_mprintf("UPDATE %q SET validity=%d WHERE folder_path=%Q", DB_TABLE_FOLDER, validity, start_path);
+ q = sqlite3_mprintf("UPDATE %q SET validity=%d WHERE folder_path=%Q", DB_TABLE_FOLDER, validity, start_path);
}
if (is_direct)
- ret = _media_svc_sql_query_direct(sql, uid);
- else
- ret = _media_svc_sql_query(sql, uid);
-
- SQLITE3_SAFE_FREE(sql);
+ return _media_svc_sql_query_direct(q, uid);
- return ret;
+ return _media_svc_sql_query(q, uid);
}
int _media_svc_check_folder_by_path(sqlite3 *handle, const char *path)
{
int ret = MS_MEDIA_ERR_NONE;
- sqlite3_stmt *sql_stmt = NULL;
- char *sql = NULL;
+ sqlite3_stmt *stmt = NULL;
+ sql_autoptr q = NULL;
media_svc_retvm_if(!STRING_VALID(path), MS_MEDIA_ERR_INVALID_PARAMETER, "path is NULL");
- sql = sqlite3_mprintf("SELECT 1 FROM %q WHERE folder_path=%Q", DB_TABLE_FOLDER, path);
- ret = _media_svc_get_result_with_check_record(handle, sql, &sql_stmt);
- SQLITE3_SAFE_FREE(sql);
+ q = sqlite3_mprintf("SELECT 1 FROM %q WHERE folder_path=%Q", DB_TABLE_FOLDER, path);
+ ret = _media_svc_get_result_with_check_record(handle, q, &stmt);
media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
- SQLITE3_FINALIZE(sql_stmt);
+ sqlite3_finalize(stmt);
return MS_MEDIA_ERR_NONE;
}
int _media_svc_check_data_by_path(sqlite3 *handle, const char *path)
{
int ret = MS_MEDIA_ERR_NONE;
- sqlite3_stmt *sql_stmt = NULL;
- char *sql = NULL;
+ sqlite3_stmt *stmt = NULL;
+ sql_autoptr q = NULL;
media_svc_retvm_if(!STRING_VALID(path), MS_MEDIA_ERR_INVALID_PARAMETER, "Path is NULL");
- sql = sqlite3_mprintf("SELECT 1 FROM %q WHERE media_path=%Q", DB_TABLE_MEDIA, path);
- ret = _media_svc_get_result_with_check_record(handle, sql, &sql_stmt);
- SQLITE3_SAFE_FREE(sql);
+ q = sqlite3_mprintf("SELECT 1 FROM %q WHERE media_path=%Q", DB_TABLE_MEDIA, path);
+ ret = _media_svc_get_result_with_check_record(handle, q, &stmt);
media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
- SQLITE3_FINALIZE(sql_stmt);
+ sqlite3_finalize(stmt);
return ret;
}
int _media_svc_get_modified_time(sqlite3 *handle, const char *path, int *modified_time)
{
int ret = MS_MEDIA_ERR_NONE;
- sqlite3_stmt *sql_stmt = NULL;
- char *sql = NULL;
+ sqlite3_stmt *stmt = NULL;
+ sql_autoptr q = NULL;
media_svc_retvm_if(!STRING_VALID(path), MS_MEDIA_ERR_INVALID_PARAMETER, "Path is NULL");
- sql = sqlite3_mprintf("SELECT media_modified_time FROM %q WHERE media_path=%Q", DB_TABLE_MEDIA, path);
- ret = _media_svc_get_result_with_check_record(handle, sql, &sql_stmt);
- SQLITE3_SAFE_FREE(sql);
+ q = sqlite3_mprintf("SELECT media_modified_time FROM %q WHERE media_path=%Q", DB_TABLE_MEDIA, path);
+ ret = _media_svc_get_result_with_check_record(handle, q, &stmt);
media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
- *modified_time = sqlite3_column_int(sql_stmt, 0);
+ *modified_time = sqlite3_column_int(stmt, 0);
- SQLITE3_FINALIZE(sql_stmt);
+ sqlite3_finalize(stmt);
return MS_MEDIA_ERR_NONE;
}
int _media_svc_insert_item_stack(media_svc_content_info_s *content_info)
{
- char *sql = __media_svc_make_insert_query(content_info);
- media_svc_retvm_if(!sql, MS_MEDIA_ERR_INVALID_PARAMETER, "make query failed");
+ char *q = __media_svc_make_insert_query(content_info);
+ media_svc_retvm_if(!q, MS_MEDIA_ERR_INVALID_PARAMETER, "make query failed");
- media_svc_sec_debug("Query[%s]", sql);
+ media_svc_sec_debug("Query[%s]", q);
- _media_svc_sql_query_add(&g_media_svc_scanner_query_list, &sql);
+ _media_svc_sql_query_add(&g_media_svc_scanner_query_list, &q);
return MS_MEDIA_ERR_NONE;
}
int _media_svc_insert_item(media_svc_content_info_s *content_info, uid_t uid)
{
- int ret = MS_MEDIA_ERR_NONE;
- char *sql = __media_svc_make_insert_query(content_info);
- media_svc_retvm_if(!sql, MS_MEDIA_ERR_INVALID_PARAMETER, "make query failed");
-
- ret = _media_svc_sql_query(sql, uid);
- SQLITE3_SAFE_FREE(sql);
- media_svc_retvm_if(ret != MS_MEDIA_ERR_NONE, ret, "failed to insert item");
+ sql_autoptr q = __media_svc_make_insert_query(content_info);
- return MS_MEDIA_ERR_NONE;
+ return _media_svc_sql_query(q, uid);
}
int _media_svc_update_item_with_data(bool is_direct, media_svc_content_info_s *content_info, uid_t uid)
{
int ret = MS_MEDIA_ERR_NONE;
- char *sql = sqlite3_mprintf("UPDATE %q SET media_size=%lld, media_modified_time=%d, media_thumbnail_path=%Q, media_title=%Q, album_id=%d, media_album=%Q, media_artist=%Q, media_album_artist=%Q, media_genre=%Q, media_year=%Q, media_recorded_date=%Q, media_track_num=%Q, media_width=%d, media_height=%d, media_datetaken=%Q, orientation=%d, validity=1 WHERE media_path=%Q;",
+ char *q = sqlite3_mprintf("UPDATE %q SET media_size=%lld, media_modified_time=%d, media_thumbnail_path=%Q, media_title=%Q, album_id=%d, media_album=%Q, media_artist=%Q, media_album_artist=%Q, media_genre=%Q, media_year=%Q, media_recorded_date=%Q, media_track_num=%Q, media_width=%d, media_height=%d, media_datetaken=%Q, orientation=%d, validity=1 WHERE media_path=%Q;",
DB_TABLE_MEDIA,
content_info->size,
content_info->modified_time,
/* Scanner use only batch insert */
if (is_direct) {
- media_svc_sec_debug("Query [%s]", sql);
- _media_svc_sql_query_add(&g_media_svc_scanner_query_list, &sql);
+ media_svc_sec_debug("Query [%s]", q);
+ _media_svc_sql_query_add(&g_media_svc_scanner_query_list, &q);
} else {
- ret = _media_svc_sql_query(sql, uid);
- SQLITE3_SAFE_FREE(sql);
+ ret = _media_svc_sql_query(q, uid);
+ sqlite3_free(q);
}
return ret;
int _media_svc_get_thumbnail_path_by_path(sqlite3 *handle, const char *path, char *thumbnail_path)
{
int ret = MS_MEDIA_ERR_NONE;
- sqlite3_stmt *sql_stmt = NULL;
- char *sql = NULL;
+ sqlite3_stmt *stmt = NULL;
+ sql_autoptr q = NULL;
media_svc_retvm_if(!STRING_VALID(path), MS_MEDIA_ERR_INVALID_PARAMETER, "path is NULL");
- sql = sqlite3_mprintf("SELECT media_thumbnail_path FROM %q WHERE media_path=%Q", DB_TABLE_MEDIA, path);
+ q = sqlite3_mprintf("SELECT media_thumbnail_path FROM %q WHERE media_path=%Q", DB_TABLE_MEDIA, path);
- ret = _media_svc_get_result_with_check_record(handle, sql, &sql_stmt);
- SQLITE3_SAFE_FREE(sql);
+ ret = _media_svc_get_result_with_check_record(handle, q, &stmt);
if (ret != MS_MEDIA_ERR_NONE) {
if (ret == MS_MEDIA_ERR_DB_NO_RECORD)
media_svc_debug("there is no thumbnail.");
return ret;
}
- g_strlcpy(thumbnail_path, (const char *)sqlite3_column_text(sql_stmt, 0), MEDIA_SVC_PATHNAME_SIZE);
+ g_strlcpy(thumbnail_path, (const char *)sqlite3_column_text(stmt, 0), MEDIA_SVC_PATHNAME_SIZE);
- SQLITE3_FINALIZE(sql_stmt);
+ sqlite3_finalize(stmt);
return MS_MEDIA_ERR_NONE;
}
int _media_svc_delete_item_by_path(const char *path, uid_t uid)
{
- int ret = MS_MEDIA_ERR_NONE;
- char *sql = NULL;
+ sql_autoptr q = NULL;
media_svc_retvm_if(!STRING_VALID(path), MS_MEDIA_ERR_INVALID_PARAMETER, "path is NULL");
- sql = sqlite3_mprintf("DELETE FROM %q WHERE media_path=%Q;", DB_TABLE_MEDIA, path);
+ q = sqlite3_mprintf("DELETE FROM %q WHERE media_path=%Q;", DB_TABLE_MEDIA, path);
- ret = _media_svc_sql_query(sql, uid);
- SQLITE3_SAFE_FREE(sql);
- media_svc_retvm_if(ret != MS_MEDIA_ERR_NONE, ret, "failed to delete item");
-
- return ret;
+ return _media_svc_sql_query(q, uid);
}
int _media_svc_update_item_validity(const char *path, int validity, bool stack_query, uid_t uid)
{
int ret = MS_MEDIA_ERR_NONE;
- char *sql = NULL;
+ char *q = NULL;
media_svc_retvm_if(!STRING_VALID(path), MS_MEDIA_ERR_INVALID_PARAMETER, "path is NULL");
media_svc_debug("path=[%s], validity=[%d]", path, validity);
- sql = sqlite3_mprintf("UPDATE %q SET validity=%d WHERE media_path=%Q;", DB_TABLE_MEDIA, validity, path);
+ q = sqlite3_mprintf("UPDATE %q SET validity=%d WHERE media_path=%Q;", DB_TABLE_MEDIA, validity, path);
if (!stack_query) {
- ret = _media_svc_sql_query_direct(sql, uid);
- SQLITE3_SAFE_FREE(sql);
+ ret = _media_svc_sql_query_direct(q, uid);
+ sqlite3_free(q);
} else {
- _media_svc_sql_query_add(&g_media_svc_scanner_query_list, &sql);
+ _media_svc_sql_query_add(&g_media_svc_scanner_query_list, &q);
}
return ret;
int _media_svc_update_thumbnail_path(const char *path, const char *thumb_path, uid_t uid)
{
- int ret = MS_MEDIA_ERR_NONE;
+ sql_autoptr q = sqlite3_mprintf("UPDATE %q SET media_thumbnail_path=%Q WHERE media_path=%Q;",
+ DB_TABLE_MEDIA, thumb_path, path);
- char *sql = sqlite3_mprintf("UPDATE %q SET media_thumbnail_path=%Q WHERE media_path=%Q;", DB_TABLE_MEDIA, thumb_path, path);
-
- ret = _media_svc_sql_query(sql, uid);
- SQLITE3_SAFE_FREE(sql);
-
- return ret;
+ return _media_svc_sql_query(q, uid);
}
int _media_svc_update_item_by_path(const char *src_path, const char *dst_storage_id, const char *dest_path, const char *file_name, int modified_time, long long int folder_id, uid_t uid)
{
- int ret = MS_MEDIA_ERR_NONE;
- char *query = sqlite3_mprintf("UPDATE %q SET media_path=%Q, media_display_name=%Q, media_modified_time=%d, folder_id=%lld, storage_uuid=%Q WHERE media_path=%Q;",
+ sql_autoptr q = sqlite3_mprintf("UPDATE %q SET media_path=%Q, media_display_name=%Q, media_modified_time=%d, folder_id=%lld, storage_uuid=%Q WHERE media_path=%Q;",
DB_TABLE_MEDIA, dest_path, file_name, modified_time, folder_id, dst_storage_id, src_path);
- ret = _media_svc_sql_query(query, uid);
- SQLITE3_SAFE_FREE(query);
-
- return ret;
+ return _media_svc_sql_query(q, uid);
}
int _media_svc_list_query_do(media_svc_query_type_e query_type, uid_t uid)
return ret;
}
-int _media_svc_get_media(sqlite3 *handle, const char *sql, GList **path_list)
+int _media_svc_get_media(sqlite3 *handle, const char *query, GList **path_list)
{
int ret = MS_MEDIA_ERR_NONE;
- sqlite3_stmt *sql_stmt = NULL;
+ sqlite3_stmt *stmt = NULL;
- media_svc_retvm_if(!sql, MS_MEDIA_ERR_INVALID_PARAMETER, "query is NULL");
+ media_svc_retvm_if(!query, MS_MEDIA_ERR_INVALID_PARAMETER, "query is NULL");
media_svc_retvm_if(!path_list, MS_MEDIA_ERR_INVALID_PARAMETER, "array is NULL");
- ret = _media_svc_get_result(handle, sql, &sql_stmt);
+ ret = _media_svc_get_result(handle, query, &stmt);
media_svc_retvm_if(ret != MS_MEDIA_ERR_NONE, ret, "_media_svc_get_result() failed [%d]", ret);
- while (sqlite3_step(sql_stmt) == SQLITE_ROW)
- *path_list = g_list_append(*path_list, g_strdup((const char *)sqlite3_column_text(sql_stmt, 0)));
+ while (sqlite3_step(stmt) == SQLITE_ROW)
+ *path_list = g_list_append(*path_list, g_strdup((const char *)sqlite3_column_text(stmt, 0)));
- SQLITE3_FINALIZE(sql_stmt);
+ sqlite3_finalize(stmt);
return ret;
}
int _media_svc_get_noti_info(sqlite3 *handle, const char *path, media_svc_noti_item **item)
{
int ret = MS_MEDIA_ERR_NONE;
- sqlite3_stmt *sql_stmt = NULL;
- char *sql = NULL;
+ sqlite3_stmt *stmt = NULL;
+ sql_autoptr q = NULL;
media_svc_retvm_if(item == NULL, MS_MEDIA_ERR_INVALID_PARAMETER, "item is NULL");
media_svc_retvm_if(!STRING_VALID(path), MS_MEDIA_ERR_INVALID_PARAMETER, "path is NULL");
- sql = sqlite3_mprintf("SELECT media_id, media_type, media_mime_type FROM %q WHERE media_path=%Q", DB_TABLE_MEDIA, path);
- ret = _media_svc_get_result_with_check_record(handle, sql, &sql_stmt);
- SQLITE3_SAFE_FREE(sql);
+ q = sqlite3_mprintf("SELECT media_id, media_type, media_mime_type FROM %q WHERE media_path=%Q", DB_TABLE_MEDIA, path);
+ ret = _media_svc_get_result_with_check_record(handle, q, &stmt);
media_svc_retvm_if(ret != MS_MEDIA_ERR_NONE, ret, "_media_svc_get_result_with_check_record() failed [%d]", ret);
*item = g_new0(media_svc_noti_item, 1);
- (*item)->media_uuid = g_strdup((const char *)sqlite3_column_text(sql_stmt, 0));
- (*item)->media_type = sqlite3_column_int(sql_stmt, 1);
- (*item)->mime_type = g_strdup((const char *)sqlite3_column_text(sql_stmt, 2));
+ (*item)->media_uuid = g_strdup((const char *)sqlite3_column_text(stmt, 0));
+ (*item)->media_type = sqlite3_column_int(stmt, 1);
+ (*item)->mime_type = g_strdup((const char *)sqlite3_column_text(stmt, 2));
- SQLITE3_FINALIZE(sql_stmt);
+ sqlite3_finalize(stmt);
return MS_MEDIA_ERR_NONE;
}
int _media_svc_check_storage(sqlite3 *handle, const char *storage_id, char **storage_path, int *validity)
{
int ret = MS_MEDIA_ERR_NONE;
- sqlite3_stmt *sql_stmt = NULL;
- char *sql = NULL;
+ sqlite3_stmt *stmt = NULL;
+ sql_autoptr q = NULL;
media_svc_retvm_if(!storage_id, MS_MEDIA_ERR_INVALID_PARAMETER, "storage_id is NULL");
media_svc_retvm_if(!storage_path, MS_MEDIA_ERR_INVALID_PARAMETER, "storage_path is NULL");
media_svc_retvm_if(!validity, MS_MEDIA_ERR_INVALID_PARAMETER, "validity is NULL");
- *storage_path = NULL;
- *validity = 0;
-
- sql = sqlite3_mprintf("SELECT storage_path, validity FROM %q WHERE storage_id=%Q", DB_TABLE_STORAGE, storage_id);
- ret = _media_svc_get_result_with_check_record(handle, sql, &sql_stmt);
- SQLITE3_SAFE_FREE(sql);
+ q = sqlite3_mprintf("SELECT storage_path, validity FROM %q WHERE storage_id=%Q", DB_TABLE_STORAGE, storage_id);
+ ret = _media_svc_get_result_with_check_record(handle, q, &stmt);
media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
- *storage_path = g_strdup((const char *)sqlite3_column_text(sql_stmt, 0));
- *validity = sqlite3_column_int(sql_stmt, 1);
+ *storage_path = g_strdup((const char *)sqlite3_column_text(stmt, 0));
+ *validity = sqlite3_column_int(stmt, 1);
- SQLITE3_FINALIZE(sql_stmt);
+ sqlite3_finalize(stmt);
return MS_MEDIA_ERR_NONE;
}
int _media_svc_append_storage(const char *storage_id, const char *storage_path, uid_t uid)
{
- int ret = MS_MEDIA_ERR_NONE;
- char *sql = sqlite3_mprintf("INSERT INTO %q (storage_id, storage_path) values (%Q, %Q);",
- DB_TABLE_STORAGE, storage_id, storage_path);
-
- ret = _media_svc_sql_query_direct(sql, uid);
- SQLITE3_SAFE_FREE(sql);
+ sql_autoptr q = sqlite3_mprintf("INSERT INTO %q (storage_id, storage_path) values (%Q, %Q);",
+ DB_TABLE_STORAGE, storage_id, storage_path);
- return ret;
+ return _media_svc_sql_query_direct(q, uid);
}
int _media_svc_update_storage_path(sqlite3 *handle, const char *storage_id, const char *path, uid_t uid)
{
int ret = MS_MEDIA_ERR_NONE;
- char *sql = NULL;
+ char *q = NULL;
g_autofree gchar *old_storage_path = NULL;
int validity = 0;
media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
/*Storage table update*/
- sql = sqlite3_mprintf("UPDATE %q SET storage_path=%Q WHERE storage_id=%Q", DB_TABLE_STORAGE, path, storage_id);
- ret = _media_svc_sql_query_direct(sql, uid);
- SQLITE3_SAFE_FREE(sql);
+ q = sqlite3_mprintf("UPDATE %q SET storage_path=%Q WHERE storage_id=%Q", DB_TABLE_STORAGE, path, storage_id);
+ ret = _media_svc_sql_query_direct(q, uid);
+ sqlite3_free(q);
media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
/*Folder table update*/
- sql = sqlite3_mprintf("UPDATE %q SET folder_path=REPLACE(folder_path, %Q, %Q) WHERE storage_uuid=%Q", DB_TABLE_FOLDER, old_storage_path, path, storage_id);
- ret = _media_svc_sql_query_direct(sql, uid);
- SQLITE3_SAFE_FREE(sql);
+ q = sqlite3_mprintf("UPDATE %q SET folder_path=REPLACE(folder_path, %Q, %Q) WHERE storage_uuid=%Q", DB_TABLE_FOLDER, old_storage_path, path, storage_id);
+ ret = _media_svc_sql_query_direct(q, uid);
+ sqlite3_free(q);
media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
/*Media table update*/
- sql = sqlite3_mprintf("UPDATE %q SET media_path=REPLACE(media_path, %Q, %Q) WHERE storage_uuid=%Q", DB_TABLE_MEDIA, old_storage_path, path, storage_id);
- ret = _media_svc_sql_query_direct(sql, uid);
- SQLITE3_SAFE_FREE(sql);
+ q = sqlite3_mprintf("UPDATE %q SET media_path=REPLACE(media_path, %Q, %Q) WHERE storage_uuid=%Q", DB_TABLE_MEDIA, old_storage_path, path, storage_id);
+ ret = _media_svc_sql_query_direct(q, uid);
+ sqlite3_free(q);
media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
return ret;
static int __media_svc_delete_thumbnail(sqlite3 *handle)
{
int ret = MS_MEDIA_ERR_NONE;
- const char *sql = "SELECT media_thumbnail_path FROM media WHERE validity=0 AND media_thumbnail_path IS NOT NULL;";
- sqlite3_stmt *sql_stmt = NULL;
+ const char *q = "SELECT media_thumbnail_path FROM media WHERE validity=0 AND media_thumbnail_path IS NOT NULL;";
+ sqlite3_stmt *stmt = NULL;
- ret = _media_svc_get_result(handle, sql, &sql_stmt);
+ ret = _media_svc_get_result(handle, q, &stmt);
media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
- while (sqlite3_step(sql_stmt) == SQLITE_ROW)
- _media_svc_remove_file((const char *)sqlite3_column_text(sql_stmt, 0));
+ while (sqlite3_step(stmt) == SQLITE_ROW)
+ _media_svc_remove_file((const char *)sqlite3_column_text(stmt, 0));
- SQLITE3_FINALIZE(sql_stmt);
+ sqlite3_finalize(stmt);
return ret;
}
int _media_svc_delete_invalid_storage(sqlite3 *handle, uid_t uid)
{
int ret = MS_MEDIA_ERR_NONE;
- char *sql = NULL;
+ sql_autoptr q = NULL;
ret = __media_svc_delete_thumbnail(handle);
media_svc_retvm_if(ret != MS_MEDIA_ERR_NONE, ret, "Fail to remove thumbnail");
- sql = sqlite3_mprintf("DELETE FROM %q WHERE validity=0;DELETE FROM %q WHERE validity=0;DELETE FROM %q WHERE validity=0;",
+ q = sqlite3_mprintf("DELETE FROM %q WHERE validity=0;DELETE FROM %q WHERE validity=0;DELETE FROM %q WHERE validity=0;",
DB_TABLE_MEDIA, DB_TABLE_STORAGE, DB_TABLE_FOLDER);
- ret = _media_svc_sql_query_direct(sql, uid);
- SQLITE3_SAFE_FREE(sql);
-
- return ret;
+ return _media_svc_sql_query_direct(q, uid);
}
int _media_svc_update_storage_validity(const char *storage_id, int validity, uid_t uid)
{
- int ret = MS_MEDIA_ERR_NONE;
- char *sql = NULL;
+ sql_autoptr q = NULL;
if (!storage_id)
- sql = sqlite3_mprintf("UPDATE %q SET validity=%d;UPDATE %q SET validity=%d WHERE storage_uuid IS NOT 'media';UPDATE %q SET validity=%d WHERE storage_uuid IS NOT 'media';", DB_TABLE_STORAGE, validity, DB_TABLE_FOLDER, validity, DB_TABLE_MEDIA, validity);
+ q = sqlite3_mprintf("UPDATE %q SET validity=%d;UPDATE %q SET validity=%d WHERE storage_uuid IS NOT 'media';UPDATE %q SET validity=%d WHERE storage_uuid IS NOT 'media';", DB_TABLE_STORAGE, validity, DB_TABLE_FOLDER, validity, DB_TABLE_MEDIA, validity);
else
- sql = sqlite3_mprintf("UPDATE %q SET validity=%d WHERE storage_id=%Q;UPDATE %q SET validity=%d WHERE storage_uuid=%Q;UPDATE %q SET validity=%d WHERE storage_uuid=%Q;", DB_TABLE_STORAGE, validity, storage_id, DB_TABLE_FOLDER, validity, storage_id, DB_TABLE_MEDIA, validity, storage_id);
-
- ret = _media_svc_sql_query_direct(sql, uid);
- SQLITE3_SAFE_FREE(sql);
+ q = sqlite3_mprintf("UPDATE %q SET validity=%d WHERE storage_id=%Q;UPDATE %q SET validity=%d WHERE storage_uuid=%Q;UPDATE %q SET validity=%d WHERE storage_uuid=%Q;", DB_TABLE_STORAGE, validity, storage_id, DB_TABLE_FOLDER, validity, storage_id, DB_TABLE_MEDIA, validity, storage_id);
- return ret;
+ return _media_svc_sql_query_direct(q, uid);
}
int _media_svc_get_storage_uuid(sqlite3 *handle, const char *path, char *storage_id, uid_t uid)
{
int ret = MS_MEDIA_ERR_NONE;
- sqlite3_stmt *sql_stmt = NULL;
- char *sql = NULL;
- char *internal_path = NULL;
+ sqlite3_stmt *stmt = NULL;
+ sql_autoptr q = NULL;
+ g_autofree gchar *internal_path = NULL;
media_svc_retvm_if(!path, MS_MEDIA_ERR_INVALID_PARAMETER, "path is NULL");
if (STRING_VALID(internal_path) && strncmp(path, internal_path, strlen(internal_path)) == 0) {
g_strlcpy(storage_id, DB_TABLE_MEDIA, MEDIA_SVC_UUID_SIZE + 1);
- g_free(internal_path);
return MS_MEDIA_ERR_NONE;
}
- g_free(internal_path);
+ q = sqlite3_mprintf("SELECT storage_id FROM %q WHERE validity=1 AND instr(%Q, storage_path)", DB_TABLE_STORAGE, path);
- sql = sqlite3_mprintf("SELECT storage_id FROM %q WHERE validity=1 AND instr(%Q, storage_path)", DB_TABLE_STORAGE, path);
-
- ret = _media_svc_get_result_with_check_record(handle, sql, &sql_stmt);
- SQLITE3_SAFE_FREE(sql);
+ ret = _media_svc_get_result_with_check_record(handle, q, &stmt);
media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
- if (STRING_VALID((const char *)sqlite3_column_text(sql_stmt, 0)))
- g_strlcpy(storage_id, (const char *)sqlite3_column_text(sql_stmt, 0), MEDIA_SVC_UUID_SIZE + 1);
+ if (STRING_VALID((const char *)sqlite3_column_text(stmt, 0)))
+ g_strlcpy(storage_id, (const char *)sqlite3_column_text(stmt, 0), MEDIA_SVC_UUID_SIZE + 1);
- SQLITE3_FINALIZE(sql_stmt);
+ sqlite3_finalize(stmt);
if (!STRING_VALID(storage_id)) {
media_svc_error("Not found valid storage id [%s]", path);
- ret = MS_MEDIA_ERR_INVALID_PARAMETER;
+ return MS_MEDIA_ERR_INVALID_PARAMETER;
}
- return ret;
+ return MS_MEDIA_ERR_NONE;
}
{
int ret = SQLITE_OK;
sqlite3 *db_handle = NULL;
- char *err = NULL;
+ sql_autoptr err = NULL;
ret = sqlite3_open_v2(path, &db_handle, SQLITE_OPEN_CREATE | SQLITE_OPEN_READWRITE, NULL);
media_svc_retvm_if(ret != SQLITE_OK, ret, "sqlite3_open_v2 failed : %d", ret);
ERROR:
media_svc_error("sqlite3_exec failed : %s", err);
- SQLITE3_SAFE_FREE(err);
sqlite3_close_v2(db_handle);
return ret;
static bool __media_svc_is_exist_in_wordbook(sqlite3 *db_handle, const char *path)
{
- int ret = SQLITE_OK;
- char *err = NULL;
- char *query = NULL;
-
- query = sqlite3_mprintf("UPDATE files SET validity=1 WHERE path = %Q", path);
+ sql_autoptr err = NULL;
+ sql_autoptr q = sqlite3_mprintf("UPDATE files SET validity=1 WHERE path = %Q", path);
- ret = sqlite3_exec(db_handle, query, NULL, NULL, &err);
- SQLITE3_SAFE_FREE(query);
- if (ret != SQLITE_OK) {
+ if (sqlite3_exec(db_handle, q, NULL, NULL, &err) != SQLITE_OK) {
media_svc_error("Query failed. [%s]", err);
- SQLITE3_SAFE_FREE(err);
return false;
}
- return sqlite3_changes(db_handle) > 0 ? true : false;
+ return (sqlite3_changes(db_handle) > 0);
}
static void __media_svc_insert_to_wordbook(sqlite3 *db_handle, const char *path)
{
void *handle = NULL;
void (*svc_update) (sqlite3 *, const char *);
- char *query = NULL;
-
- query = sqlite3_mprintf("INSERT INTO files(path) VALUES(%Q);", path);
- sqlite3_exec(db_handle, query, NULL, NULL, NULL);
- sqlite3_free(query);
+ sql_autoptr q = sqlite3_mprintf("INSERT INTO files(path) VALUES(%Q);", path);
+ sqlite3_exec(db_handle, q, NULL, NULL, NULL);
handle = dlopen(PATH_PLUGIN_LIB, RTLD_LAZY);
if (!handle) {
bool _media_svc_get_matched_list(const char *keyword, uid_t uid, GList **list)
{
- int ret = SQLITE_OK;
sqlite3 *handle = NULL;
sqlite3_stmt *stmt = NULL;
- char *query = NULL;
+ sql_autoptr q = NULL;
media_svc_retvm_if(!list, false, "list is NULL");
media_svc_retvm_if(!keyword, false, "keyword is NULL");
media_svc_retvm_if(!__media_svc_get_wordbook_handle(uid, &handle), false, "Failed to get handle");
- query = sqlite3_mprintf("SELECT files.path FROM files JOIN (SELECT file_id, sum(frequency) AS freq_sum FROM words WHERE word LIKE '%q%%' GROUP BY file_id ORDER BY freq_sum DESC) w ON files.id = w.file_id;", keyword);
- ret = sqlite3_prepare_v2(handle, query, -1, &stmt, NULL);
- SQLITE3_SAFE_FREE(query);
-
- if (ret != SQLITE_OK) {
- media_svc_error("Query failed[%d]", ret);
+ q = sqlite3_mprintf("SELECT files.path FROM files JOIN (SELECT file_id, sum(frequency) AS freq_sum FROM words WHERE word LIKE '%q%%' GROUP BY file_id ORDER BY freq_sum DESC) w ON files.id = w.file_id;", keyword);
+ if (sqlite3_prepare_v2(handle, q, -1, &stmt, NULL) != SQLITE_OK) {
+ media_svc_error("query failed");
sqlite3_close_v2(handle);
return false;
}
{
int ret = MS_MEDIA_ERR_NONE;
char thumb_path[MEDIA_SVC_PATHNAME_SIZE + 1] = { 0, };
- char *sql = NULL;
+ sql_autoptr q = NULL;
// 1. Check media type
if (media_type != MEDIA_SVC_MEDIA_TYPE_IMAGE && media_type != MEDIA_SVC_MEDIA_TYPE_VIDEO)
}
// 3. Update creation result to media db
- sql = sqlite3_mprintf("UPDATE %q SET media_thumbnail_path='%q' WHERE media_path='%q';", DB_TABLE_MEDIA, thumb_path, file_path);
+ q = sqlite3_mprintf("UPDATE %q SET media_thumbnail_path=%Q WHERE media_path=%Q", DB_TABLE_MEDIA, thumb_path, file_path);
- ret = _media_svc_sql_query(sql, uid);
- SQLITE3_SAFE_FREE(sql);
+ ret = _media_svc_sql_query(q, uid);
if (ret != MS_MEDIA_ERR_NONE) {
media_svc_error("Failed to update media db [%d]", ret);
*thumbnail_path = g_strdup("");