Remove r,g,b fields
[platform/core/multimedia/libmedia-service.git] / src / common / media-svc-db-utils.c
1 /*
2  * libmedia-service
3  *
4  * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
5  *
6  * Contact: Hyunjun Ko <zzoon.ko@samsung.com>, Haejeong Kim <backto.kim@samsung.com>
7  *
8  * Licensed under the Apache License, Version 2.0 (the "License");
9  * you may not use this file except in compliance with the License.
10  * You may obtain a copy of the License at
11  *
12  * http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing, software
15  * distributed under the License is distributed on an "AS IS" BASIS,
16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17  * See the License for the specific language governing permissions and
18  * limitations under the License.
19  *
20  */
21
22 #include <unistd.h>
23 #include <sys/stat.h>
24 #include <db-util.h>
25 #include <media-util.h>
26 #include <errno.h>
27 #include "media-svc-env.h"
28 #include "media-svc-debug.h"
29 #include "media-svc-util.h"
30 #include "media-svc-db-utils.h"
31 #include "media-util-err.h"
32 #include "media-util-db.h"
33 #include "media-svc-media.h"
34
35 static int __media_svc_db_upgrade(sqlite3 *db_handle, int cur_version, uid_t uid);
36 static int __media_svc_rebuild_view_query(sqlite3 *db_handle, uid_t uid);
37
38
39 static GHashTable *table;
40 static GSList *column_list[MEDIA_SVC_DB_LIST_MAX];
41
42 int __media_svc_add_table_info(const char *name, const char *trigger_name, const char *event_table, const char *action_table, const char *view_name)
43 {
44         table_info_s *tbl = NULL;
45
46         media_svc_retvm_if(!STRING_VALID(name), MS_MEDIA_ERR_INVALID_PARAMETER, "name is NULL");
47
48         if (STRING_VALID(trigger_name)) {
49                 media_svc_retvm_if(!STRING_VALID(event_table), MS_MEDIA_ERR_INVALID_PARAMETER, "event_table is NULL");
50                 media_svc_retvm_if(!STRING_VALID(action_table), MS_MEDIA_ERR_INVALID_PARAMETER, "action_table is NULL");
51         }
52
53         tbl = malloc(sizeof(table_info_s));
54         if (tbl == NULL) {
55                 media_svc_error("MS_MEDIA_ERR_OUT_OF_MEMORY");
56                 return MS_MEDIA_ERR_OUT_OF_MEMORY;
57         }
58
59         memset(tbl, 0x00, sizeof(table_info_s));
60
61         if (STRING_VALID(trigger_name)) {
62                 tbl->trigger_name = malloc(MEDIA_SVC_PATHNAME_SIZE);
63                 if (tbl->trigger_name == NULL) {
64                         media_svc_error("MS_MEDIA_ERR_OUT_OF_MEMORY");
65                         SAFE_FREE(tbl);
66                         return MS_MEDIA_ERR_OUT_OF_MEMORY;
67                 }
68
69                 memset(tbl->trigger_name, 0x00, MEDIA_SVC_PATHNAME_SIZE);
70                 snprintf(tbl->trigger_name, MEDIA_SVC_PATHNAME_SIZE, "%s_%s", trigger_name, event_table);
71
72                 tbl->event_table = strndup(event_table, strlen(event_table));
73                 tbl->action_table = strndup(action_table, strlen(action_table));
74         }
75
76         if (STRING_VALID(view_name))
77                 tbl->view_name = strndup(view_name, strlen(view_name));
78
79         g_hash_table_insert(table, (gpointer)name, (gpointer)tbl);
80
81         return MS_MEDIA_ERR_NONE;
82 }
83
84 int __media_svc_add_column_info(GSList **slist, const char *name, const char *type, const char *option, int version, const char *index_name, bool is_unique, bool is_trigger, bool is_view)
85 {
86         column_info_s *col = NULL;
87         col = malloc(sizeof(column_info_s));
88         if (col == NULL) {
89                 media_svc_error("MS_MEDIA_ERR_OUT_OF_MEMORY");
90                 return MS_MEDIA_ERR_OUT_OF_MEMORY;
91         }
92         memset(col, 0, sizeof(column_info_s));
93
94         col->name = strndup(name, strlen(name));
95         col->type = strndup(type, strlen(type));
96         if (option != NULL) {
97                 col->has_option = true;
98                 col->option = strndup(option, strlen(option));
99         } else {
100                 col->has_option = false;
101         }
102         col->version = version;
103         if (index_name != NULL) {
104                 col->is_index = true;
105                 col->index_name = strndup(index_name, strlen(index_name));
106         } else {
107                 col->is_index = false;
108         }
109         col->is_unique = is_unique;
110         col->is_trigger = is_trigger;
111         col->is_view = is_view;
112         *slist = g_slist_append(*slist, col);
113
114         return MS_MEDIA_ERR_NONE;
115 }
116
117 static int __media_svc_rebuild_view_query(sqlite3 *db_handle, uid_t uid)
118 {
119         int ret = MS_MEDIA_ERR_NONE;
120         column_info_s *col_ptr = NULL;
121         char *sql = NULL;
122         char table_query[MEDIA_SVC_QUERY_LEN_NORMAL] = {0, };
123         char temp[1024] = {0, };
124         bool sflag = false;
125         int i, len;
126         /*media */
127         _media_svc_update_media_view(db_handle, uid);
128
129         /*drop playlist_view, tag_view */
130         sql = sqlite3_mprintf(MEDIA_SVC_DB_QUERY_DROP_VIEW, MEDIA_SVC_DB_VIEW_PLAYLIST);
131         ret = _media_svc_sql_query(sql, uid);
132         SQLITE3_SAFE_FREE(sql);
133         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
134
135         sql = sqlite3_mprintf(MEDIA_SVC_DB_QUERY_DROP_VIEW, MEDIA_SVC_DB_VIEW_TAG);
136         ret = _media_svc_sql_query(sql, uid);
137         SQLITE3_SAFE_FREE(sql);
138         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
139
140         /*create playlist_view */
141         len = g_slist_length(column_list[MEDIA_SVC_DB_LIST_PLAYLIST]);
142         for (i = 1; i < len; i++) {
143                 col_ptr = g_slist_nth_data(column_list[MEDIA_SVC_DB_LIST_PLAYLIST], i);
144                 if (col_ptr->is_view) {
145                         if (sflag == true) {
146                                 if (strncmp(col_ptr->name, MEDIA_SVC_DB_COLUMN_THUMBNAIL, strlen(MEDIA_SVC_DB_COLUMN_THUMBNAIL)) == 0)
147                                         snprintf(temp, sizeof(temp), ", playlist.%s AS p_thumbnail_path", col_ptr->name);
148                                 else
149                                         snprintf(temp, sizeof(temp), ", playlist.%s", col_ptr->name);
150                         } else {
151                                 snprintf(temp, sizeof(temp), "playlist.%s", col_ptr->name);
152                                 sflag = true;
153                         }
154                         SAFE_STRLCAT(table_query, temp, sizeof(table_query));
155                 }
156                 memset(temp, 0, sizeof(temp));
157         }
158         len = g_slist_length(column_list[MEDIA_SVC_DB_LIST_PLAYLIST_MAP]);
159         for (i = 1; i < len; i++) {
160                 col_ptr = g_slist_nth_data(column_list[MEDIA_SVC_DB_LIST_PLAYLIST_MAP], i);
161                 if (col_ptr->is_view) {
162                         if (strncmp(col_ptr->name, MEDIA_SVC_DB_COLUMN_MAP_ID, strlen(MEDIA_SVC_DB_COLUMN_MAP_ID)) == 0)
163                                 snprintf(temp, sizeof(temp), ", media_count IS NOT NULL AS media_count, playlist_map.%s AS pm_id", col_ptr->name);
164                         else
165                                 snprintf(temp, sizeof(temp), ", playlist_map.%s", col_ptr->name);
166                         SAFE_STRLCAT(table_query, temp, sizeof(table_query));
167                 }
168                 memset(temp, 0, sizeof(temp));
169         }
170
171         len = g_slist_length(column_list[MEDIA_SVC_DB_LIST_MEDIA]);
172         for (i = 1; i < len; i++) {
173                 col_ptr = g_slist_nth_data(column_list[MEDIA_SVC_DB_LIST_MEDIA], i);
174                 if (col_ptr->is_view) {
175                         snprintf(temp, sizeof(temp), ", media.%s", col_ptr->name);
176                         SAFE_STRLCAT(table_query, temp, sizeof(table_query));
177                 }
178                 memset(temp, 0, sizeof(temp));
179         }
180         sql = sqlite3_mprintf(MEDIA_SVC_DB_QUERY_VIEW_PLAYLIST, MEDIA_SVC_DB_VIEW_PLAYLIST, table_query);
181         ret = _media_svc_sql_query(sql, uid);
182         SQLITE3_SAFE_FREE(sql);
183         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
184
185         /*create tag_view */
186         sflag = false;
187         memset(table_query, 0, sizeof(table_query));
188
189         len = g_slist_length(column_list[MEDIA_SVC_DB_LIST_TAG]);
190         for (i = 1; i < len; i++) {
191                 col_ptr = g_slist_nth_data(column_list[MEDIA_SVC_DB_LIST_TAG], i);
192                 if (col_ptr->is_view) {
193                         if (sflag == true) {
194                                 snprintf(temp, sizeof(temp), ", tag.%s", col_ptr->name);
195                         } else {
196                                 snprintf(temp, sizeof(temp), "tag.%s", col_ptr->name);
197                                 sflag = true;
198                         }
199                         SAFE_STRLCAT(table_query, temp, sizeof(table_query));
200                 }
201                 memset(temp, 0, sizeof(temp));
202         }
203         len = g_slist_length(column_list[MEDIA_SVC_DB_LIST_TAG_MAP]);
204         for (i = 1; i < len; i++) {
205                 col_ptr = g_slist_nth_data(column_list[MEDIA_SVC_DB_LIST_TAG_MAP], i);
206                 if (col_ptr->is_view) {
207                         if (strncmp(col_ptr->name, MEDIA_SVC_DB_COLUMN_MAP_ID, strlen(MEDIA_SVC_DB_COLUMN_MAP_ID)) == 0)
208                                 snprintf(temp, sizeof(temp), ", media_count IS NOT NULL AS media_count, tag_map.%s AS tm_id", col_ptr->name);
209                         else
210                                 snprintf(temp, sizeof(temp), ", tag_map.%s", col_ptr->name);
211                         SAFE_STRLCAT(table_query, temp, sizeof(table_query));
212                 }
213                 memset(temp, 0, sizeof(temp));
214         }
215
216         len = g_slist_length(column_list[MEDIA_SVC_DB_LIST_MEDIA]);
217         for (i = 1; i < len; i++) {
218                 col_ptr = g_slist_nth_data(column_list[MEDIA_SVC_DB_LIST_MEDIA], i);
219                 if (col_ptr->is_view) {
220                         snprintf(temp, sizeof(temp), ", media.%s", col_ptr->name);
221                         SAFE_STRLCAT(table_query, temp, sizeof(table_query));
222                 }
223                 memset(temp, 0, sizeof(temp));
224         }
225         sql = sqlite3_mprintf(MEDIA_SVC_DB_QUERY_VIEW_TAG, MEDIA_SVC_DB_VIEW_TAG, table_query);
226         ret = _media_svc_sql_query(sql, uid);
227         SQLITE3_SAFE_FREE(sql);
228         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
229
230         return MS_MEDIA_ERR_NONE;
231 }
232
233 int _media_svc_make_table_query(const char *table_name, media_svc_table_slist_e list, uid_t uid)
234 {
235         int ret = MS_MEDIA_ERR_NONE;
236         table_info_s *tb = NULL;
237         column_info_s *col_ptr = NULL;
238         char *sql = NULL;
239         char table_query[MEDIA_SVC_QUERY_LEN_NORMAL] = {0, };
240         char index_query[MEDIA_SVC_QUERY_LEN_NORMAL] = {0, };
241         char trigger_query[MEDIA_SVC_QUERY_LEN_NORMAL] = {0, };
242         char table_query_sub[1024] = {0, };
243         char temp[1024] = {0 ,};
244         bool flag = false;
245         bool sub_flag = false;
246         int len = 0;
247         int i = 0;
248
249         tb = g_hash_table_lookup(table, table_name);
250         if (tb == NULL) {
251                 media_svc_debug("lookup fail.. table name [%s] ", table_name);
252                 tb = g_hash_table_lookup(table, MEDIA_SVC_DB_TABLE_MEDIA);
253         }
254
255         len = g_slist_length(column_list[list]);
256
257         if (len == 0) {
258                 media_svc_error("Invalid column");
259                 return MS_MEDIA_ERR_INTERNAL;
260         }
261
262         for (i = 1; i < len; i++) {
263                 col_ptr = g_slist_nth_data(column_list[list], i);
264                 /*create table */
265                 if (col_ptr->has_option) {
266                         if (flag == true) {
267                                 snprintf(temp, sizeof(temp), ", %s %s %s", col_ptr->name, col_ptr->type, col_ptr->option);
268                         } else {
269                                 snprintf(temp, sizeof(temp), "%s %s %s", col_ptr->name, col_ptr->type, col_ptr->option);
270                                 flag = true;
271                         }
272                         SAFE_STRLCAT(table_query, temp, sizeof(table_query));
273                 } else {
274                         if (flag == true) {
275                                 snprintf(temp, sizeof(temp), ", %s %s", col_ptr->name, col_ptr->type);
276                         } else {
277                                 snprintf(temp, sizeof(temp), "%s %s", col_ptr->name, col_ptr->type);
278                                 flag = true;
279                         }
280                         SAFE_STRLCAT(table_query, temp, sizeof(table_query));
281                 }
282                 memset(temp, 0, sizeof(temp));
283
284                 /*unique */
285                 if (col_ptr->is_unique) {
286                         if (sub_flag == true) {
287                                 snprintf(temp, sizeof(temp), ", %s", col_ptr->name);
288                         } else {
289                                 snprintf(temp, sizeof(temp), "%s", col_ptr->name);
290                                 sub_flag = true;
291                         }
292                         SAFE_STRLCAT(table_query_sub, temp, sizeof(table_query_sub));
293                 }
294                 memset(temp, 0, sizeof(temp));
295
296                 /*create index */
297                 if (col_ptr->is_index) {
298                         snprintf(temp, sizeof(temp), MEDIA_SVC_DB_QUERY_INDEX, col_ptr->index_name, table_name, col_ptr->name);
299                         SAFE_STRLCAT(index_query, temp, sizeof(index_query));
300                 }
301                 memset(temp, 0, sizeof(temp));
302
303                 /*create trigger */
304                 if (col_ptr->is_trigger) {
305                         if (STRING_VALID(tb->trigger_name)) {
306                                 if (strncmp(table_name, MEDIA_SVC_DB_TABLE_ALBUM, strlen(MEDIA_SVC_DB_TABLE_ALBUM)) == 0) {
307                                         snprintf(temp, sizeof(temp), MEDIA_SVC_DB_QUERY_TRIGGER_WITH_COUNT, tb->trigger_name, tb->event_table, tb->action_table, tb->event_table, col_ptr->name, col_ptr->name, col_ptr->name, col_ptr->name);                                  
308                                 } else {
309                                         snprintf(temp, sizeof(temp), MEDIA_SVC_DB_QUERY_TRIGGER, tb->trigger_name, tb->event_table, tb->action_table, col_ptr->name, col_ptr->name);
310                                 }
311                                 SAFE_STRLCAT(trigger_query, temp, sizeof(trigger_query));
312                         } else {
313                                 media_svc_error("invalid trigger name");
314                         }
315                 }
316                 memset(temp, 0, sizeof(temp));
317         }
318
319         /*send queries */
320         if (sub_flag == true) {
321                 sql = sqlite3_mprintf(MEDIA_SVC_DB_QUERY_TABLE_WITH_UNIQUE, table_name, table_query, table_query_sub);
322                 ret = _media_svc_sql_query(sql, uid);
323                 SQLITE3_SAFE_FREE(sql);
324                 memset(table_query, 0, sizeof(table_query));
325                 memset(table_query_sub, 0, sizeof(table_query_sub));
326                 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
327         } else {
328                 sql = sqlite3_mprintf(MEDIA_SVC_DB_QUERY_TABLE, table_name, table_query);
329                 ret = _media_svc_sql_query(sql, uid);
330                 SQLITE3_SAFE_FREE(sql);
331                 memset(table_query, 0, sizeof(table_query));
332                 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
333         }
334
335         if (STRING_VALID(index_query)) {
336                 ret = _media_svc_sql_query(index_query, uid);
337                 memset(index_query, 0, sizeof(index_query));
338                 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
339         }
340
341         if (STRING_VALID(trigger_query)) {
342                 ret = _media_svc_sql_query(trigger_query, uid);
343                 memset(trigger_query, 0, sizeof(trigger_query));
344                 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
345         }
346
347         /*create view */
348         flag = false;
349         if (tb != NULL && tb->view_name != NULL) {
350                 if (strncmp(table_name, MEDIA_SVC_DB_TABLE_MEDIA, strlen(MEDIA_SVC_DB_TABLE_MEDIA)) == 0) {
351                         sql = sqlite3_mprintf(MEDIA_SVC_DB_QUERY_VIEW_MEDIA, tb->view_name, table_name);
352                         ret = _media_svc_sql_query(sql, uid);
353                         SQLITE3_SAFE_FREE(sql);
354                         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
355
356                 } else if (strncmp(table_name, MEDIA_SVC_DB_TABLE_PLAYLIST, strlen(MEDIA_SVC_DB_TABLE_PLAYLIST)) == 0) {
357                         len = g_slist_length(column_list[MEDIA_SVC_DB_LIST_PLAYLIST]);
358                         for (i = 1; i < len; i++) {
359                                 col_ptr = g_slist_nth_data(column_list[MEDIA_SVC_DB_LIST_PLAYLIST], i);
360                                 if (col_ptr->is_view) {
361                                         if (flag == true) {
362                                                 if (strncmp(col_ptr->name, MEDIA_SVC_DB_COLUMN_THUMBNAIL, strlen(MEDIA_SVC_DB_COLUMN_THUMBNAIL)) == 0)
363                                                         snprintf(temp, sizeof(temp), ", playlist.%s AS p_thumbnail_path", col_ptr->name);
364                                                 else
365                                                         snprintf(temp, sizeof(temp), ", playlist.%s", col_ptr->name);
366                                         } else {
367                                                 snprintf(temp, sizeof(temp), "playlist.%s", col_ptr->name);
368                                                 flag = true;
369                                         }
370                                         SAFE_STRLCAT(table_query, temp, sizeof(table_query));
371                                 }
372                                 memset(temp, 0, sizeof(temp));
373                         }
374                         len = g_slist_length(column_list[MEDIA_SVC_DB_LIST_PLAYLIST_MAP]);
375                         for (i = 1; i < len; i++) {
376                                 col_ptr = g_slist_nth_data(column_list[MEDIA_SVC_DB_LIST_PLAYLIST_MAP], i);
377                                 if (col_ptr->is_view) {
378                                         if (strncmp(col_ptr->name, MEDIA_SVC_DB_COLUMN_MAP_ID, strlen(MEDIA_SVC_DB_COLUMN_MAP_ID)) == 0)
379                                                 snprintf(temp, sizeof(temp), ", media_count IS NOT NULL AS media_count, playlist_map.%s AS pm_id", col_ptr->name);
380                                         else
381                                                 snprintf(temp, sizeof(temp), ", playlist_map.%s", col_ptr->name);
382                                         SAFE_STRLCAT(table_query, temp, sizeof(table_query));
383                                 }
384                                 memset(temp, 0, sizeof(temp));
385                         }
386
387                         len = g_slist_length(column_list[MEDIA_SVC_DB_LIST_MEDIA]);
388                         for (i = 1; i < len; i++) {
389                                 col_ptr = g_slist_nth_data(column_list[MEDIA_SVC_DB_LIST_MEDIA], i);
390                                 if (col_ptr->is_view) {
391                                         snprintf(temp, sizeof(temp), ", media.%s", col_ptr->name);
392                                         SAFE_STRLCAT(table_query, temp, sizeof(table_query));
393                                 }
394                                 memset(temp, 0, sizeof(temp));
395                         }
396                         sql = sqlite3_mprintf(MEDIA_SVC_DB_QUERY_VIEW_PLAYLIST, tb->view_name, table_query);
397                         ret = _media_svc_sql_query(sql, uid);
398                         SQLITE3_SAFE_FREE(sql);
399                         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
400
401                 } else {
402                         len = g_slist_length(column_list[MEDIA_SVC_DB_LIST_TAG]);
403                         for (i = 1; i < len; i++) {
404                                 col_ptr = g_slist_nth_data(column_list[MEDIA_SVC_DB_LIST_TAG], i);
405                                 if (col_ptr->is_view) {
406                                         if (flag == true) {
407                                                 snprintf(temp, sizeof(temp), ", tag.%s", col_ptr->name);
408                                         } else {
409                                                 snprintf(temp, sizeof(temp), "tag.%s", col_ptr->name);
410                                                 flag = true;
411                                         }
412                                         SAFE_STRLCAT(table_query, temp, sizeof(table_query));
413                                 }
414                                 memset(temp, 0, sizeof(temp));
415                         }
416                         len = g_slist_length(column_list[MEDIA_SVC_DB_LIST_TAG_MAP]);
417                         for (i = 1; i < len; i++) {
418                                 col_ptr = g_slist_nth_data(column_list[MEDIA_SVC_DB_LIST_TAG_MAP], i);
419                                 if (col_ptr->is_view) {
420                                         if (strncmp(col_ptr->name, MEDIA_SVC_DB_COLUMN_MAP_ID, strlen(MEDIA_SVC_DB_COLUMN_MAP_ID)) == 0)
421                                                 snprintf(temp, sizeof(temp), ", media_count IS NOT NULL AS media_count, tag_map.%s AS tm_id", col_ptr->name);
422                                         else
423                                                 snprintf(temp, sizeof(temp), ", tag_map.%s", col_ptr->name);
424                                         SAFE_STRLCAT(table_query, temp, sizeof(table_query));
425                                 }
426                                 memset(temp, 0, sizeof(temp));
427                         }
428
429                         len = g_slist_length(column_list[MEDIA_SVC_DB_LIST_MEDIA]);
430                         for (i = 1; i < len; i++) {
431                                 col_ptr = g_slist_nth_data(column_list[MEDIA_SVC_DB_LIST_MEDIA], i);
432                                 if (col_ptr->is_view) {
433                                         snprintf(temp, sizeof(temp), ", media.%s", col_ptr->name);
434                                         SAFE_STRLCAT(table_query, temp, sizeof(table_query));
435                                 }
436                                 memset(temp, 0, sizeof(temp));
437                         }
438                         sql = sqlite3_mprintf(MEDIA_SVC_DB_QUERY_VIEW_TAG, tb->view_name, table_query);
439                         ret = _media_svc_sql_query(sql, uid);
440                         SQLITE3_SAFE_FREE(sql);
441                         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
442                 }
443         }
444
445         return MS_MEDIA_ERR_NONE;
446 }
447
448 int _media_svc_upgrade_table_query(sqlite3 *db_handle, const char *table_name, media_svc_table_slist_e list, uid_t uid)
449 {
450         int ret = MS_MEDIA_ERR_NONE;
451         column_info_s *col_ptr = NULL;
452         char *sql = NULL;
453         char temp[1024] = {0, };
454         int len, i;
455         int cur_version = 0;
456         sqlite3_stmt *sql_stmt = NULL;
457
458         len = g_slist_length(column_list[list]);
459
460         sql = sqlite3_mprintf("PRAGMA user_version");
461         ret = _media_svc_sql_prepare_to_step(db_handle, sql, &sql_stmt);
462
463         if (ret != MS_MEDIA_ERR_NONE) {
464                 media_svc_error("error when get user_version. err = [%d]", ret);
465                 return ret;
466         }
467         cur_version = sqlite3_column_int(sql_stmt, 0);
468         SQLITE3_FINALIZE(sql_stmt);
469
470         len = g_slist_length(column_list[list]);
471         for (i = 1; i < len; i++) {
472                 col_ptr = g_slist_nth_data(column_list[list], i);
473                 if (col_ptr->version > cur_version) {
474                         /*alter table */
475                         if (col_ptr->has_option)
476                                 snprintf(temp, sizeof(temp), "%s %s %s", col_ptr->name, col_ptr->type, col_ptr->option);
477                         else
478                                 snprintf(temp, sizeof(temp), "%s %s", col_ptr->name, col_ptr->type);
479                         sql = sqlite3_mprintf(MEDIA_SVC_DB_QUERY_ALTER_TABLE, table_name, temp);
480                         ret = _media_svc_sql_query(sql, uid);
481                         SQLITE3_SAFE_FREE(sql);
482                         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
483                         /*create index */
484                         if (col_ptr->is_index) {
485                                 memset(temp, 0, sizeof(temp));
486                                 snprintf(temp, sizeof(temp), MEDIA_SVC_DB_QUERY_INDEX, col_ptr->index_name, table_name, col_ptr->name);
487                                 ret = _media_svc_sql_query(temp, uid);
488                                 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
489                         }
490                 }
491                 memset(temp, 0, sizeof(temp));
492         }
493
494         return MS_MEDIA_ERR_NONE;
495 }
496
497 int _media_svc_init_table_query(const char *event_table_name)
498 {
499         int ret = MS_MEDIA_ERR_NONE;
500         int i = 0;
501
502         /*variable initialize.. */
503         table = g_hash_table_new(g_str_hash, g_str_equal);
504         for (i = 0; i < MEDIA_SVC_DB_LIST_MAX; i++)
505                 column_list[i] = g_slist_alloc();
506
507         /*table specification.. (table_name, index, unique set, trigger, view, trigger name, event table, action table, view name) */
508         ret = __media_svc_add_table_info(MEDIA_SVC_DB_TABLE_MEDIA, NULL, NULL, NULL, MEDIA_SVC_DB_VIEW_MEDIA);
509         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
510         ret = __media_svc_add_table_info(MEDIA_SVC_DB_TABLE_FOLDER, MEDIA_SVC_DB_TRIGGER_FOLDER, event_table_name, MEDIA_SVC_DB_TABLE_FOLDER, NULL);
511         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
512         ret = __media_svc_add_table_info(MEDIA_SVC_DB_TABLE_PLAYLIST_MAP, MEDIA_SVC_DB_TRIGGER_PLAYLIST_MAP, event_table_name, MEDIA_SVC_DB_TABLE_PLAYLIST_MAP, NULL);
513         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
514         ret = __media_svc_add_table_info(MEDIA_SVC_DB_TABLE_PLAYLIST, MEDIA_SVC_DB_TRIGGER_PLAYLIST_MAP1, MEDIA_SVC_DB_TABLE_PLAYLIST, MEDIA_SVC_DB_TABLE_PLAYLIST_MAP, MEDIA_SVC_DB_VIEW_PLAYLIST);
515         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
516         ret = __media_svc_add_table_info(MEDIA_SVC_DB_TABLE_ALBUM, MEDIA_SVC_DB_TRIGGER_ALBUM, event_table_name, MEDIA_SVC_DB_TABLE_ALBUM, NULL);
517         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
518         ret = __media_svc_add_table_info(MEDIA_SVC_DB_TABLE_TAG_MAP, MEDIA_SVC_DB_TRIGGER_TAG_MAP, event_table_name, MEDIA_SVC_DB_TABLE_TAG_MAP, NULL);
519         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
520         ret = __media_svc_add_table_info(MEDIA_SVC_DB_TABLE_TAG, MEDIA_SVC_DB_TRIGGER_TAG_MAP1, MEDIA_SVC_DB_TABLE_TAG, MEDIA_SVC_DB_TABLE_TAG_MAP, MEDIA_SVC_DB_VIEW_TAG);
521         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
522         ret = __media_svc_add_table_info(MEDIA_SVC_DB_TABLE_BOOKMARK, MEDIA_SVC_DB_TRIGGER_BOOKMARK, event_table_name, MEDIA_SVC_DB_TABLE_BOOKMARK, NULL);
523         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
524         ret = __media_svc_add_table_info(MEDIA_SVC_DB_TABLE_STORAGE, NULL, NULL, NULL, NULL);
525         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
526         ret = __media_svc_add_table_info(MEDIA_SVC_DB_TABLE_FACE_SCAN_LIST, MEDIA_SVC_DB_TRIGGER_FACE_SCAN_LIST, MEDIA_SVC_DB_TABLE_MEDIA, MEDIA_SVC_DB_TABLE_FACE_SCAN_LIST, NULL);
527         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
528         ret = __media_svc_add_table_info(MEDIA_SVC_DB_TABLE_FACE, MEDIA_SVC_DB_TRIGGER_FACE, MEDIA_SVC_DB_TABLE_FACE_SCAN_LIST, MEDIA_SVC_DB_TABLE_FACE, NULL);
529         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
530         ret = __media_svc_add_table_info(MEDIA_SVC_DB_TABLE_UHD, MEDIA_SVC_DB_TRIGGER_UHD, event_table_name, MEDIA_SVC_DB_TABLE_UHD, NULL);
531         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
532         ret = __media_svc_add_table_info(MEDIA_SVC_DB_TABLE_PVR, MEDIA_SVC_DB_TRIGGER_PVR, event_table_name, MEDIA_SVC_DB_TABLE_PVR, NULL);
533         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
534
535         /*insert column info.. */
536         /*media*/
537         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "media_uuid", MEDIA_SVC_DB_TYPE_TEXT, "PRIMARY KEY", USER_V2, NULL, false, false, true);
538         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
539         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "path", MEDIA_SVC_DB_TYPE_TEXT, "NOT NULL UNIQUE", USER_V2, NULL, true, false, true);
540         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
541         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "file_name", MEDIA_SVC_DB_TYPE_TEXT, "NOT NULL", USER_V2, "media_file_name_idx", true, false, true);
542         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
543         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "media_type", MEDIA_SVC_DB_TYPE_INT, NULL, USER_V2, NULL, false, false, true);
544         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
545         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "mime_type", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, NULL, false, false, true);
546         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
547         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "size", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 0", USER_V2, NULL, false, false, true);
548         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
549         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "added_time", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 0", USER_V2, NULL, false, false, true);
550         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
551         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "modified_time", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 0", USER_V2, "media_modified_time_idx", false, false, true);
552         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
553         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "folder_uuid", MEDIA_SVC_DB_TYPE_TEXT, "NOT NULL", USER_V2, "folder_uuid_idx", false, false, false);
554         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
555         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "thumbnail_path", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, NULL, false, false, true);
556         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
557         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "title", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, NULL, false, false, true);
558         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
559         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "album_id", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 0", USER_V2, NULL, false, false, false);
560         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
561         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "album", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, NULL, false, false, true);
562         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
563         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "artist", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, NULL, false, false, true);
564         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
565         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "album_artist", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, NULL, false, false, true);
566         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
567         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "genre", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, NULL, false, false, true);
568         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
569         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "composer", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, NULL, false, false, true);
570         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
571         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "year", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, NULL, false, false, true);
572         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
573         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "recorded_date", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, NULL, false, false, true);
574         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
575         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "copyright", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, NULL, false, false, true);
576         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
577         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "track_num", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, NULL, false, false, true);
578         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
579         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "description", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, NULL, false, false, true);
580         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
581         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "bitrate", MEDIA_SVC_DB_TYPE_INT, "DEFAULT -1", USER_V2, NULL, false, false, true);
582         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
583         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "bitpersample", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 0", USER_V3, NULL, false, false, true);
584         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
585         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "samplerate", MEDIA_SVC_DB_TYPE_INT, "DEFAULT -1", USER_V2, NULL, false, false, true);
586         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
587         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "channel", MEDIA_SVC_DB_TYPE_INT, "DEFAULT -1", USER_V2, NULL, false, false, true);
588         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
589         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "duration", MEDIA_SVC_DB_TYPE_INT, "DEFAULT -1", USER_V2, NULL, false, false, true);
590         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
591         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "longitude", MEDIA_SVC_DB_TYPE_DOUBLE, "DEFAULT 0", USER_V2, NULL, false, false, true);
592         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
593         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "latitude", MEDIA_SVC_DB_TYPE_DOUBLE, "DEFAULT 0", USER_V2, NULL, false, false, true);
594         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
595         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "altitude", MEDIA_SVC_DB_TYPE_DOUBLE, "DEFAULT 0", USER_V2, NULL, false, false, true);
596         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
597         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "exposure_time", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V4, NULL, false, false, true);
598         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
599         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "fnumber", MEDIA_SVC_DB_TYPE_DOUBLE, "DEFAULT 0", USER_V4, NULL, false, false, true);
600         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
601         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "iso", MEDIA_SVC_DB_TYPE_INT, "DEFAULT -1", USER_V4, NULL, false, false, true);
602         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
603         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "model", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V4, NULL, false, false, true);
604         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
605         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "width", MEDIA_SVC_DB_TYPE_INT, "DEFAULT -1", USER_V2, NULL, false, false, true);
606         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
607         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "height", MEDIA_SVC_DB_TYPE_INT, "DEFAULT -1", USER_V2, NULL, false, false, true);
608         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
609         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "datetaken", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, NULL, false, false, true);
610         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
611         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "orientation", MEDIA_SVC_DB_TYPE_INT, "DEFAULT -1", USER_V2, NULL, false, false, true);
612         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
613         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "burst_id", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, NULL, false, false, true);
614         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
615         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "played_count", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 0", USER_V2, NULL, false, false, true);
616         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
617         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "last_played_time", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 0", USER_V2, NULL, false, false, true);
618         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
619         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "last_played_position", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 0", USER_V2, NULL, false, false, true);
620         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
621         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "rating", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 0", USER_V2, NULL, false, false, true);
622         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
623         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "favourite", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 0", USER_V2, NULL, false, false, true);
624         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
625         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "author", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, NULL, false, false, true);
626         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
627         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "provider", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, NULL, false, false, true);
628         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
629         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "content_name", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, NULL, false, false, true);
630         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
631         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "category", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, NULL, false, false, true);
632         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
633         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "location_tag", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, NULL, false, false, true);
634         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
635         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "age_rating", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, NULL, false, false, true);
636         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
637         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "keyword", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, NULL, false, false, true);
638         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
639         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "is_drm", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 0", USER_V2, NULL, false, false, true);
640         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
641         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "storage_type", MEDIA_SVC_DB_TYPE_INT, NULL, USER_V2, NULL, false, false, true);
642         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
643         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "timeline", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 0", USER_V2, "media_timeline_idx", false, false, true);
644         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
645         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "weather", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, NULL, false, false, true);
646         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
647         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "sync_status", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 0", USER_V2, NULL, false, false, true);
648         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
649         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "file_name_pinyin", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, NULL, false, false, false);
650         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
651         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "title_pinyin", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, NULL, false, false, false);
652         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
653         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "album_pinyin", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, NULL, false, false, false);
654         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
655         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "artist_pinyin", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, NULL, false, false, false);
656         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
657         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "album_artist_pinyin", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, NULL, false, false, false);
658         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
659         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "genre_pinyin", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, NULL, false, false, false);
660         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
661         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "composer_pinyin", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, NULL, false, false, false);
662         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
663         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "copyright_pinyin", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, NULL, false, false, false);
664         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
665         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "description_pinyin", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, NULL, false, false, false);
666         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
667         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "author_pinyin", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, NULL, false, false, false);
668         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
669         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "provider_pinyin", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, NULL, false, false, false);
670         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
671         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "content_name_pinyin", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, NULL, false, false, false);
672         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
673         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "category_pinyin", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, NULL, false, false, false);
674         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
675         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "location_tag_pinyin", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, NULL, false, false, false);
676         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
677         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "age_rating_pinyin", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, NULL, false, false, false);
678         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
679         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "keyword_pinyin", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, NULL, false, false, false);
680         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
681         /* storage_uuid column is added in DB v4. When doing DB upgrade to v4, if storage_uuid is NOT NULL, alter table failed. */
682         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "storage_uuid", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V4, NULL, false, false, true);
683         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
684         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "validity", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 1", USER_V2, NULL, false, false, false);
685         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
686         /* color column is added with dcm. (DB v5) */
687         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "is_360", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 0", USER_V5, NULL, false, false, true);
688         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
689
690         /*folder*/
691         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_FOLDER], "folder_uuid", MEDIA_SVC_DB_TYPE_TEXT, "PRIMARY KEY", USER_V2, NULL, false, false, false);
692         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
693         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_FOLDER], "path", MEDIA_SVC_DB_TYPE_TEXT, "NOT NULL", USER_V2, NULL, true, false, false);
694         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
695         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_FOLDER], "name", MEDIA_SVC_DB_TYPE_TEXT, "NOT NULL", USER_V2, NULL, false, false, false);
696         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
697         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_FOLDER], "modified_time", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 0", USER_V2, NULL, false, false, false);
698         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
699         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_FOLDER], "name_pinyin", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, NULL, false, false, false);
700         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
701         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_FOLDER], "storage_type", MEDIA_SVC_DB_TYPE_INT, NULL, USER_V2, NULL, false, false, false);
702         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
703         /* storage_uuid column is added in DB v4. When doing DB upgrade to v4, if storage_uuid is NOT NULL, alter table failed. */
704         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_FOLDER], "storage_uuid", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V4, NULL, true, false, false);
705         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
706         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_FOLDER], "folder_order", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 0", USER_V4, NULL, false, false, false);
707         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
708         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_FOLDER], "parent_folder_uuid", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V4, NULL, false, false, false);
709         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
710         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_FOLDER], "validity", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 1", USER_V4, NULL, false, false, false);
711         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
712         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_FOLDER], "scan_status", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 0", USER_V4, NULL, false, false, false);
713         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
714
715         /*playlist_map*/
716         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_PLAYLIST_MAP], "_id", MEDIA_SVC_DB_TYPE_INT, "PRIMARY KEY AUTOINCREMENT", USER_V2, NULL, false, false, true);
717         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
718         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_PLAYLIST_MAP], "playlist_id", MEDIA_SVC_DB_TYPE_INT, "NOT NULL", USER_V2, NULL, false, false, false);
719         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
720         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_PLAYLIST_MAP], "media_uuid", MEDIA_SVC_DB_TYPE_TEXT, "NOT NULL", USER_V2, NULL, false, true, false);
721         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
722         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_PLAYLIST_MAP], "play_order", MEDIA_SVC_DB_TYPE_INT, "NOT NULL", USER_V2, NULL, false, false, true);
723         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
724
725         /*playlist*/
726         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_PLAYLIST], "playlist_id", MEDIA_SVC_DB_TYPE_INT, "PRIMARY KEY AUTOINCREMENT", USER_V2, NULL, false, true, true);
727         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
728         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_PLAYLIST], "name", MEDIA_SVC_DB_TYPE_TEXT, "NOT NULL UNIQUE", USER_V2, NULL, false, false, true);
729         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
730         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_PLAYLIST], "name_pinyin", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, NULL, false, false, false);
731         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
732         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_PLAYLIST], "thumbnail_path", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, NULL, false, false, true);
733         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
734
735         /*album*/
736         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_ALBUM], "album_id", MEDIA_SVC_DB_TYPE_INT, "PRIMARY KEY AUTOINCREMENT", USER_V2, NULL, false, true, false);
737         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
738         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_ALBUM], "name", MEDIA_SVC_DB_TYPE_TEXT, "NOT NULL", USER_V2, NULL, false, false, false);
739         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
740         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_ALBUM], "artist", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, NULL, false, false, false);
741         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
742         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_ALBUM], "album_art", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, NULL, false, false, false);
743         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
744
745         /*tag_map*/
746         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_TAG_MAP], "_id", MEDIA_SVC_DB_TYPE_INT, "PRIMARY KEY AUTOINCREMENT", USER_V2, NULL, false, false, true);
747         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
748         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_TAG_MAP], "tag_id", MEDIA_SVC_DB_TYPE_INT, "NOT NULL", USER_V2, NULL, true, false, false);
749         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
750         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_TAG_MAP], "media_uuid", MEDIA_SVC_DB_TYPE_TEXT, "NOT NULL", USER_V2, NULL, true, true, false);
751         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
752
753         /*tag*/
754         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_TAG], "tag_id ", MEDIA_SVC_DB_TYPE_INT, "PRIMARY KEY AUTOINCREMENT", USER_V2, NULL, false, true, true);
755         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
756         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_TAG], "name", MEDIA_SVC_DB_TYPE_TEXT, "NOT NULL UNIQUE", USER_V2, NULL, false, false, true);
757         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
758         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_TAG], "name_pinyin", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, NULL, false, false, false);
759         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
760
761         /*bookmark*/
762         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_BOOKMARK], "bookmark_id", MEDIA_SVC_DB_TYPE_INT, "PRIMARY KEY AUTOINCREMENT", USER_V2, NULL, false, false, false);
763         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
764         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_BOOKMARK], "media_uuid", MEDIA_SVC_DB_TYPE_TEXT, "NOT NULL", USER_V2, NULL, true, true, false);
765         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
766         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_BOOKMARK], "marked_time", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 0", USER_V2, NULL, true, false, false);
767         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
768         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_BOOKMARK], "thumbnail_path", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, NULL, false, false, false);
769         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
770         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_BOOKMARK], "name", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V6, NULL, false, false, false);
771         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
772
773         /*storage*/
774         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_STORAGE], "storage_uuid", MEDIA_SVC_DB_TYPE_TEXT, "NOT NULL", USER_V3, NULL, true, false, false);
775         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
776         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_STORAGE], "storage_name", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V3, NULL, true, false, false);
777         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
778         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_STORAGE], "storage_path", MEDIA_SVC_DB_TYPE_TEXT, "NOT NULL", USER_V3, NULL, false, false, false);
779         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
780         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_STORAGE], "storage_type", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 0", USER_V3, NULL, false, false, false);
781         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
782         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_STORAGE], "scan_status", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 0", USER_V3, NULL, false, false, false);
783         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
784         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_STORAGE], "validity", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 1", USER_V3, NULL, false, false, false);
785         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
786
787         /*face scan list*/
788         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_FACE_SCAN_LIST], "media_uuid", MEDIA_SVC_DB_TYPE_TEXT, "NOT NULL", USER_V3, NULL, true, true, false);
789         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
790         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_FACE_SCAN_LIST], "storage_uuid", MEDIA_SVC_DB_TYPE_TEXT, "NOT NULL", USER_V3, NULL, false, false, false);
791         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
792
793         /*face*/
794         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_FACE], "face_uuid", MEDIA_SVC_DB_TYPE_TEXT, "PRIMARY KEY", USER_V3, NULL, true, false, false);
795         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
796         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_FACE], "media_uuid", MEDIA_SVC_DB_TYPE_TEXT, "NOT NULL", USER_V3, NULL, false, true, false);
797         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
798         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_FACE], "face_rect_x", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 0", USER_V3, NULL, false, false, false);
799         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
800         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_FACE], "face_rect_y", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 0", USER_V3, NULL, false, false, false);
801         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
802         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_FACE], "face_rect_w", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 0", USER_V3, NULL, false, false, false);
803         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
804         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_FACE], "face_rect_h", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 0", USER_V3, NULL, false, false, false);
805         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
806         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_FACE], "orientation", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 0", USER_V3, NULL, false, false, false);
807         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
808         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_FACE], "face_tag", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V3, NULL, false, false, false);
809         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
810
811         /*uhd*/
812         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_UHD], "media_uuid", MEDIA_SVC_DB_TYPE_TEXT, "PRIMARY KEY", USER_V4, NULL, true, true, false);
813         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
814         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_UHD], "storage_uuid", MEDIA_SVC_DB_TYPE_TEXT, "NOT NULL", USER_V4, "uhd_storage_id_idx", true, false, false);
815         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
816         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_UHD], "path", MEDIA_SVC_DB_TYPE_TEXT, "NOT NULL", USER_V4, NULL, false, false, false);
817         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
818         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_UHD], "size", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 0", USER_V4, NULL, false, false, false);
819         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
820         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_UHD], "content_id", MEDIA_SVC_DB_TYPE_TEXT, "NOT NULL", USER_V4, NULL, false, false, false);
821         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
822         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_UHD], "content_title", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V4, NULL, false, false, false);
823         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
824         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_UHD], "file_name", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V4, NULL, false, false, false);
825         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
826         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_UHD], "folder_uuid", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V4, NULL, false, false, false);
827         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
828         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_UHD], "release_date", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V4, NULL, false, false, false);
829         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
830         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_UHD], "modified_time", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 0", USER_V4, NULL, false, false, false);
831         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
832         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_UHD], "played_position", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 0", USER_V4, NULL, false, false, false);
833         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
834         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_UHD], "sub_type", MEDIA_SVC_DB_TYPE_INT, "DEFAULT -1", USER_V4, NULL, false, false, false);
835         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
836         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_UHD], "played_count", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 0", USER_V4, NULL, false, false, false);
837         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
838
839         /*pvr*/
840         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_PVR], "media_uuid", MEDIA_SVC_DB_TYPE_TEXT, "PRIMARY KEY", USER_V4, NULL, false, true, false);
841         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
842         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_PVR], "storage_uuid", MEDIA_SVC_DB_TYPE_TEXT, "NOT NULL", USER_V4, "pvr_storage_id_idx", true, false, false);
843         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
844         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_PVR], "path", MEDIA_SVC_DB_TYPE_TEXT, "NOT NULL", USER_V4, NULL, true, false, false);
845         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
846         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_PVR], "size", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 0", USER_V4, NULL, false, false, false);
847         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
848         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_PVR], "duration", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 0", USER_V4, NULL, false, false, false);
849         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
850         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_PVR], "timezone", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 0", USER_V4, NULL, false, false, false);
851         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
852         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_PVR], "ptc", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 0", USER_V4, NULL, false, false, false);
853         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
854         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_PVR], "major", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 0", USER_V4, NULL, false, false, false);
855         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
856         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_PVR], "minor", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 0", USER_V4, NULL, false, false, false);
857         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
858         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_PVR], "channel_type", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 0", USER_V4, NULL, false, false, false);
859         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
860         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_PVR], "channel_name", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V4, NULL, false, false, false);
861         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
862         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_PVR], "channel_num", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V4, NULL, false, false, false);
863         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
864         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_PVR], "program_title", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V4, NULL, false, false, false);
865         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
866         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_PVR], "program_num", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 0", USER_V4, NULL, false, false, false);
867         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
868         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_PVR], "program_crid", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V4, NULL, false, false, false);
869         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
870         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_PVR], "guidance", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V4, NULL, false, false, false);
871         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
872         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_PVR], "synopsis", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V4, NULL, false, false, false);
873         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
874         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_PVR], "genre", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V4, NULL, false, false, false);
875         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
876         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_PVR], "language", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V4, NULL, false, false, false);
877         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
878         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_PVR], "embargo_time", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 0", USER_V4, NULL, false, false, false);
879         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
880         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_PVR], "expiry_time", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 0", USER_V4, NULL, false, false, false);
881         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
882         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_PVR], "start_time", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 0", USER_V4, NULL, false, false, false);
883         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
884         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_PVR], "program_start_time", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 0", USER_V4, NULL, false, false, false);
885         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
886         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_PVR], "program_end_time", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 0", USER_V4, NULL, false, false, false);
887         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
888         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_PVR], "program_date", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 0", USER_V4, NULL, false, false, false);
889         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
890         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_PVR], "parental_rating", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 0", USER_V4, NULL, false, false, false);
891         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
892         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_PVR], "timer_record", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 0", USER_V4, NULL, false, false, false);
893         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
894         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_PVR], "series_record", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 0", USER_V4, NULL, false, false, false);
895         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
896         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_PVR], "hd", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 0", USER_V4, NULL, false, false, false);
897         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
898         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_PVR], "subtitle", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 0", USER_V4, NULL, false, false, false);
899         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
900         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_PVR], "ttx", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 0", USER_V4, NULL, false, false, false);
901         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
902         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_PVR], "ad", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 0", USER_V4, NULL, false, false, false);
903         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
904         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_PVR], "hard_of_hearing_radio", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 0", USER_V4, NULL, false, false, false);
905         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
906         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_PVR], "data_service", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 0", USER_V4, NULL, false, false, false);
907         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
908         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_PVR], "content_lock", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 0", USER_V4, NULL, false, false, false);
909         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
910         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_PVR], "content_watch", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 0", USER_V4, NULL, false, false, false);
911         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
912         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_PVR], "has_audio_only", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 0", USER_V4, NULL, false, false, false);
913         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
914         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_PVR], "is_local_record", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 0", USER_V4, NULL, false, false, false);
915         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
916         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_PVR], "resolution", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 0", USER_V4, NULL, false, false, false);
917         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
918         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_PVR], "aspectratio", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 0", USER_V4, NULL, false, false, false);
919         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
920         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_PVR], "modified_date", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V4, NULL, false, false, false);
921         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
922         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_PVR], "sports_type", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 0", USER_V4, NULL, false, false, false);
923         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
924         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_PVR], "guidance_length", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 0", USER_V4, NULL, false, false, false);
925         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
926         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_PVR], "tvmode", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 0", USER_V4, NULL, false, false, false);
927         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
928         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_PVR], "play_count", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 0", USER_V4, NULL, false, false, false);
929         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
930         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_PVR], "private_data", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V4, NULL, false, false, false);
931         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
932         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_PVR], "highlight", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 0", USER_V4, NULL, false, false, false);
933         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
934         ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_PVR], "folder_uuid", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V4, NULL, false, false, false);
935         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
936
937         return ret;
938 }
939 void __media_svc_table_free(table_info_s *tb)
940 {
941         SAFE_FREE(tb->trigger_name);
942         SAFE_FREE(tb->view_name);
943         SAFE_FREE(tb->event_table);
944         SAFE_FREE(tb->action_table);
945         SAFE_FREE(tb);
946 }
947
948 void __media_svc_column_free(column_info_s *col)
949 {
950         SAFE_FREE(col->name);
951         SAFE_FREE(col->type);
952         SAFE_FREE(col->option);
953         SAFE_FREE(col->index_name);
954         SAFE_FREE(col);
955 }
956
957 void _media_svc_destroy_table_query()
958 {
959         int i = 0;
960         table_info_s *tb = NULL;
961         column_info_s *col_ptr = NULL;
962         int len = 0;
963
964         /* Table Free */
965         tb = g_hash_table_lookup(table, MEDIA_SVC_DB_TABLE_MEDIA);
966         __media_svc_table_free(tb);
967         g_hash_table_remove(table, MEDIA_SVC_DB_TABLE_MEDIA);
968
969         tb = g_hash_table_lookup(table, MEDIA_SVC_DB_TABLE_FOLDER);
970         __media_svc_table_free(tb);
971         g_hash_table_remove(table, MEDIA_SVC_DB_TABLE_FOLDER);
972
973         tb = g_hash_table_lookup(table, MEDIA_SVC_DB_TABLE_PLAYLIST);
974         __media_svc_table_free(tb);
975         g_hash_table_remove(table, MEDIA_SVC_DB_TABLE_PLAYLIST);
976
977         tb = g_hash_table_lookup(table, MEDIA_SVC_DB_TABLE_PLAYLIST_MAP);
978         __media_svc_table_free(tb);
979         g_hash_table_remove(table, MEDIA_SVC_DB_TABLE_PLAYLIST_MAP);
980
981         tb = g_hash_table_lookup(table, MEDIA_SVC_DB_TABLE_ALBUM);
982         __media_svc_table_free(tb);
983         g_hash_table_remove(table, MEDIA_SVC_DB_TABLE_ALBUM);
984
985         tb = g_hash_table_lookup(table, MEDIA_SVC_DB_TABLE_TAG);
986         __media_svc_table_free(tb);
987         g_hash_table_remove(table, MEDIA_SVC_DB_TABLE_TAG);
988
989         tb = g_hash_table_lookup(table, MEDIA_SVC_DB_TABLE_TAG_MAP);
990         __media_svc_table_free(tb);
991         g_hash_table_remove(table, MEDIA_SVC_DB_TABLE_TAG_MAP);
992
993         tb = g_hash_table_lookup(table, MEDIA_SVC_DB_TABLE_BOOKMARK);
994         __media_svc_table_free(tb);
995         g_hash_table_remove(table, MEDIA_SVC_DB_TABLE_BOOKMARK);
996
997         tb = g_hash_table_lookup(table, MEDIA_SVC_DB_TABLE_STORAGE);
998         __media_svc_table_free(tb);
999         g_hash_table_remove(table, MEDIA_SVC_DB_TABLE_STORAGE);
1000
1001         tb = g_hash_table_lookup(table, MEDIA_SVC_DB_TABLE_UHD);
1002         __media_svc_table_free(tb);
1003         g_hash_table_remove(table, MEDIA_SVC_DB_TABLE_UHD);
1004
1005         tb = g_hash_table_lookup(table, MEDIA_SVC_DB_TABLE_PVR);
1006         __media_svc_table_free(tb);
1007         g_hash_table_remove(table, MEDIA_SVC_DB_TABLE_PVR);
1008
1009         g_hash_table_destroy(table);
1010
1011         /* Column Free */
1012         len = g_slist_length(column_list[MEDIA_SVC_DB_LIST_MEDIA]);
1013
1014         for (i = 1; i < len; i++) {
1015                 col_ptr = g_slist_nth_data(column_list[MEDIA_SVC_DB_LIST_MEDIA], i);
1016                 __media_svc_column_free(col_ptr);
1017         }
1018
1019         len = g_slist_length(column_list[MEDIA_SVC_DB_LIST_FOLDER]);
1020
1021         for (i = 1; i < len; i++) {
1022                 col_ptr = g_slist_nth_data(column_list[MEDIA_SVC_DB_LIST_FOLDER], i);
1023                 __media_svc_column_free(col_ptr);
1024         }
1025
1026         len = g_slist_length(column_list[MEDIA_SVC_DB_LIST_PLAYLIST_MAP]);
1027
1028         for (i = 1; i < len; i++) {
1029                 col_ptr = g_slist_nth_data(column_list[MEDIA_SVC_DB_LIST_PLAYLIST_MAP], i);
1030                 __media_svc_column_free(col_ptr);
1031         }
1032
1033         len = g_slist_length(column_list[MEDIA_SVC_DB_LIST_PLAYLIST]);
1034
1035         for (i = 1; i < len; i++) {
1036                 col_ptr = g_slist_nth_data(column_list[MEDIA_SVC_DB_LIST_PLAYLIST], i);
1037                 __media_svc_column_free(col_ptr);
1038         }
1039
1040         len = g_slist_length(column_list[MEDIA_SVC_DB_LIST_ALBUM]);
1041
1042         for (i = 1; i < len; i++) {
1043                 col_ptr = g_slist_nth_data(column_list[MEDIA_SVC_DB_LIST_ALBUM], i);
1044                 __media_svc_column_free(col_ptr);
1045         }
1046
1047         len = g_slist_length(column_list[MEDIA_SVC_DB_LIST_TAG_MAP]);
1048
1049         for (i = 1; i < len; i++) {
1050                 col_ptr = g_slist_nth_data(column_list[MEDIA_SVC_DB_LIST_TAG_MAP], i);
1051                 __media_svc_column_free(col_ptr);
1052         }
1053
1054         len = g_slist_length(column_list[MEDIA_SVC_DB_LIST_TAG]);
1055
1056         for (i = 1; i < len; i++) {
1057                 col_ptr = g_slist_nth_data(column_list[MEDIA_SVC_DB_LIST_TAG], i);
1058                 __media_svc_column_free(col_ptr);
1059         }
1060
1061         len = g_slist_length(column_list[MEDIA_SVC_DB_LIST_BOOKMARK]);
1062
1063         for (i = 1; i < len; i++) {
1064                 col_ptr = g_slist_nth_data(column_list[MEDIA_SVC_DB_LIST_BOOKMARK], i);
1065                 __media_svc_column_free(col_ptr);
1066         }
1067
1068         len = g_slist_length(column_list[MEDIA_SVC_DB_LIST_STORAGE]);
1069
1070         for (i = 1; i < len; i++) {
1071                 col_ptr = g_slist_nth_data(column_list[MEDIA_SVC_DB_LIST_STORAGE], i);
1072                 __media_svc_column_free(col_ptr);
1073         }
1074
1075         for (i = 0; i < MEDIA_SVC_DB_LIST_MAX; i++)
1076                 g_slist_free(column_list[i]);
1077
1078 }
1079
1080 static int __media_svc_db_upgrade(sqlite3 *db_handle, int cur_version, uid_t uid)
1081 {
1082         int ret = MS_MEDIA_ERR_NONE;
1083         char *sql = NULL;
1084
1085         ret = _media_svc_init_table_query(MEDIA_SVC_DB_TABLE_MEDIA);
1086         if (ret != MS_MEDIA_ERR_NONE) {
1087                  media_svc_error("Query initialization failed");
1088                 goto ERROR;
1089         }
1090
1091         ret = _media_svc_upgrade_table_query(db_handle, MEDIA_SVC_DB_TABLE_MEDIA, MEDIA_SVC_DB_LIST_MEDIA, uid);
1092         if (ret != MS_MEDIA_ERR_NONE) {
1093                  media_svc_error("_media_svc_upgrade_table_query failed");
1094                 goto ERROR;
1095         }
1096
1097         /* Upgrade issue in folder table */
1098         if (cur_version < USER_V4) {
1099                 /* Create tmp table */
1100                 sql = sqlite3_mprintf("CREATE TABLE '%q' AS SELECT * FROM '%q';", MEDIA_SVC_DB_TABLE_TMP_TABLE, MEDIA_SVC_DB_TABLE_FOLDER);
1101                 if (sql == NULL) {
1102                          media_svc_error("_media_svc_upgrade_table_query failed");
1103                          ret = MS_MEDIA_ERR_OUT_OF_MEMORY;
1104                         goto ERROR;
1105                 }
1106
1107                 ret = _media_svc_sql_query(sql, uid);
1108                 if (ret != MS_MEDIA_ERR_NONE)
1109                         media_svc_error("Error when create backup folder table");
1110                 SQLITE3_SAFE_FREE(sql);
1111
1112                 /* Drop original table */
1113                 sql = sqlite3_mprintf("DROP TABLE '%q';", MEDIA_SVC_DB_TABLE_FOLDER);
1114                 if (sql == NULL) {
1115                          media_svc_error("_media_svc_upgrade_table_query failed");
1116                          ret = MS_MEDIA_ERR_OUT_OF_MEMORY;
1117                         goto ERROR;
1118                 }
1119
1120                 ret = _media_svc_sql_query(sql, uid);
1121                 if (ret != MS_MEDIA_ERR_NONE)
1122                         media_svc_error("Error when drop table");
1123                 SQLITE3_SAFE_FREE(sql);
1124
1125                 /* Create new table */
1126                 ret = _media_svc_make_table_query(MEDIA_SVC_DB_TABLE_FOLDER, MEDIA_SVC_DB_LIST_FOLDER, uid);
1127                 if (ret != MS_MEDIA_ERR_NONE) {
1128                          media_svc_error("_media_svc_make_table_query failed");
1129                         goto ERROR;
1130                 }
1131
1132                 /* Insert into new table */
1133                 sql = sqlite3_mprintf("INSERT INTO '%q'(folder_uuid, path, name, modified_time, name_pinyin, storage_type) SELECT folder_uuid, path, name, modified_time, name_pinyin, storage_type FROM '%q';", MEDIA_SVC_DB_TABLE_FOLDER, MEDIA_SVC_DB_TABLE_TMP_TABLE);
1134                 if (sql == NULL) {
1135                          media_svc_error("Query creation failed");
1136                          ret = MS_MEDIA_ERR_OUT_OF_MEMORY;
1137                         goto ERROR;
1138                 }
1139
1140                 ret = _media_svc_sql_query(sql, uid);
1141                 if (ret != MS_MEDIA_ERR_NONE)
1142                         media_svc_error("Error when backup folder table");
1143                 SQLITE3_SAFE_FREE(sql);
1144
1145                 /* Drop tmp table*/
1146                 sql = sqlite3_mprintf("DROP TABLE '%q';", MEDIA_SVC_DB_TABLE_TMP_TABLE);
1147                 if (sql == NULL) {
1148                          media_svc_error("Query creation failed");
1149                          ret = MS_MEDIA_ERR_OUT_OF_MEMORY;
1150                         goto ERROR;
1151                 }
1152
1153                 ret = _media_svc_sql_query(sql, uid);
1154                 if (ret != MS_MEDIA_ERR_NONE)
1155                         media_svc_error("Error when drop backup folder table");
1156                 SQLITE3_SAFE_FREE(sql);
1157
1158         } else {
1159                 ret = _media_svc_upgrade_table_query(db_handle, MEDIA_SVC_DB_TABLE_FOLDER, MEDIA_SVC_DB_LIST_FOLDER, uid);
1160                 if (ret != MS_MEDIA_ERR_NONE) {
1161                          media_svc_error("_media_svc_upgrade_table_query failed");
1162                         goto ERROR;
1163                 }
1164         }
1165
1166         ret = _media_svc_upgrade_table_query(db_handle, MEDIA_SVC_DB_TABLE_PLAYLIST_MAP, MEDIA_SVC_DB_LIST_PLAYLIST_MAP, uid);
1167         if (ret != MS_MEDIA_ERR_NONE) {
1168                  media_svc_error("_media_svc_upgrade_table_query failed");
1169                 goto ERROR;
1170         }
1171
1172         ret = _media_svc_upgrade_table_query(db_handle, MEDIA_SVC_DB_TABLE_PLAYLIST, MEDIA_SVC_DB_LIST_PLAYLIST, uid);
1173         if (ret != MS_MEDIA_ERR_NONE) {
1174                  media_svc_error("_media_svc_upgrade_table_query failed");
1175                 goto ERROR;
1176         }
1177
1178         ret = _media_svc_upgrade_table_query(db_handle, MEDIA_SVC_DB_TABLE_ALBUM, MEDIA_SVC_DB_LIST_ALBUM, uid);
1179         if (ret != MS_MEDIA_ERR_NONE) {
1180                  media_svc_error("_media_svc_upgrade_table_query failed");
1181                 goto ERROR;
1182         }
1183
1184         ret = _media_svc_upgrade_table_query(db_handle, MEDIA_SVC_DB_TABLE_TAG_MAP, MEDIA_SVC_DB_LIST_TAG_MAP, uid);
1185         if (ret != MS_MEDIA_ERR_NONE) {
1186                  media_svc_error("_media_svc_upgrade_table_query failed");
1187                 goto ERROR;
1188         }
1189
1190         ret = _media_svc_upgrade_table_query(db_handle, MEDIA_SVC_DB_TABLE_TAG, MEDIA_SVC_DB_LIST_TAG, uid);
1191         if (ret != MS_MEDIA_ERR_NONE) {
1192                  media_svc_error("_media_svc_upgrade_table_query failed");
1193                 goto ERROR;
1194         }
1195
1196         ret = _media_svc_upgrade_table_query(db_handle, MEDIA_SVC_DB_TABLE_BOOKMARK, MEDIA_SVC_DB_LIST_BOOKMARK, uid);
1197         if (ret != MS_MEDIA_ERR_NONE) {
1198                  media_svc_error("_media_svc_upgrade_table_query failed");
1199                 goto ERROR;
1200         }
1201
1202         ret = _media_svc_upgrade_table_query(db_handle, MEDIA_SVC_DB_TABLE_STORAGE, MEDIA_SVC_DB_LIST_STORAGE, uid);
1203         if (ret != MS_MEDIA_ERR_NONE) {
1204                  media_svc_error("_media_svc_upgrade_table_query failed");
1205                 goto ERROR;
1206         }
1207
1208         if (cur_version < USER_V4) {
1209                 /* Need to default value in storage_uuid */
1210                 sql = sqlite3_mprintf("UPDATE %q SET storage_uuid = '%q';", MEDIA_SVC_DB_TABLE_MEDIA, "media");
1211                 if (sql == NULL) {
1212                          media_svc_error("Query creation failed");
1213                          ret = MS_MEDIA_ERR_OUT_OF_MEMORY;
1214                         goto ERROR;
1215                 }
1216
1217                 ret = _media_svc_sql_query(sql, uid);
1218                 SQLITE3_SAFE_FREE(sql);
1219
1220                 sql = sqlite3_mprintf("UPDATE %q SET storage_uuid = '%q';", MEDIA_SVC_DB_TABLE_FOLDER, "media");
1221                 if (sql == NULL) {
1222                          media_svc_error("Query creation failed");
1223                          ret = MS_MEDIA_ERR_OUT_OF_MEMORY;
1224                         goto ERROR;
1225                 }
1226
1227                 ret = _media_svc_sql_query(sql, uid);
1228                 SQLITE3_SAFE_FREE(sql);
1229         }
1230
1231         ret = __media_svc_rebuild_view_query(db_handle, uid);
1232
1233         sql = sqlite3_mprintf("PRAGMA user_version=%d;", LATEST_VERSION_NUMBER);
1234         if (sql == NULL) {
1235                  media_svc_error("Query creation failed");
1236                  ret = MS_MEDIA_ERR_OUT_OF_MEMORY;
1237                 goto ERROR;
1238         }
1239
1240         ret = _media_svc_sql_query(sql, uid);
1241         SQLITE3_SAFE_FREE(sql);
1242
1243         _media_svc_destroy_table_query();
1244
1245         return ret;
1246
1247 ERROR:
1248         _media_svc_destroy_table_query();
1249
1250         return ret;
1251 }
1252
1253 int _media_svc_sql_query(const char *sql_str, uid_t uid)
1254 {
1255         int ret = MS_MEDIA_ERR_NONE;
1256
1257         media_svc_sec_debug("[SQL query] : %s", sql_str);
1258
1259         ret = media_db_request_update_db(sql_str, uid);
1260
1261         return ret;
1262 }
1263
1264 int _media_svc_get_user_version(sqlite3 *db_handle, int *user_version)
1265 {
1266         int ret = MS_MEDIA_ERR_NONE;
1267         sqlite3_stmt *sql_stmt = NULL;
1268         char *sql = sqlite3_mprintf("PRAGMA user_version;");
1269
1270         ret = _media_svc_sql_prepare_to_step(db_handle, sql, &sql_stmt);
1271         if (ret != MS_MEDIA_ERR_NONE) {
1272                 media_svc_error("error when get user_version.");
1273                 return ret;
1274         }
1275
1276         *user_version = sqlite3_column_int(sql_stmt, 0);
1277         SQLITE3_FINALIZE(sql_stmt);
1278
1279         return MS_MEDIA_ERR_NONE;
1280 }
1281
1282 int _media_svc_sql_prepare_to_step(sqlite3 *handle, const char *sql_str, sqlite3_stmt **stmt)
1283 {
1284         int err = -1;
1285
1286         media_svc_sec_debug("[SQL query] : %s", sql_str);
1287
1288         if (!STRING_VALID(sql_str)) {
1289                 media_svc_error("invalid query");
1290                 return MS_MEDIA_ERR_INVALID_PARAMETER;
1291         }
1292
1293         err = sqlite3_prepare_v2(handle, sql_str, -1, stmt, NULL);
1294         sqlite3_free((char *)sql_str);
1295
1296         if (err != SQLITE_OK) {
1297                 media_svc_error("prepare error %d[%s]", err, sqlite3_errmsg(handle));
1298                 if (err == SQLITE_CORRUPT)
1299                         return MS_MEDIA_ERR_DB_CORRUPT;
1300                 else if (err == SQLITE_PERM)
1301                         return MS_MEDIA_ERR_DB_PERMISSION;
1302
1303                 return MS_MEDIA_ERR_DB_INTERNAL;
1304         }
1305
1306         err = sqlite3_step(*stmt);
1307         if (err != SQLITE_ROW) {
1308                 media_svc_error("[No-Error] Item not found. end of row [%s]", sqlite3_errmsg(handle));
1309                 SQLITE3_FINALIZE(*stmt);
1310                 return MS_MEDIA_ERR_DB_NO_RECORD;
1311         }
1312
1313         return MS_MEDIA_ERR_NONE;
1314 }
1315
1316 int _media_svc_sql_prepare_to_step_simple(sqlite3 *handle, const char *sql_str, sqlite3_stmt **stmt)
1317 {
1318         int err = -1;
1319
1320         media_svc_sec_debug("[SQL query] : %s", sql_str);
1321
1322         if (!STRING_VALID(sql_str)) {
1323                 media_svc_error("invalid query");
1324                 return MS_MEDIA_ERR_INVALID_PARAMETER;
1325         }
1326
1327         err = sqlite3_prepare_v2(handle, sql_str, -1, stmt, NULL);
1328         sqlite3_free((char *)sql_str);
1329
1330         if (err != SQLITE_OK) {
1331                 media_svc_error("prepare error %d[%s]", err, sqlite3_errmsg(handle));
1332                 if (err == SQLITE_CORRUPT)
1333                         return MS_MEDIA_ERR_DB_CORRUPT;
1334                 else if (err == SQLITE_PERM)
1335                         return MS_MEDIA_ERR_DB_PERMISSION;
1336
1337                 return MS_MEDIA_ERR_DB_INTERNAL;
1338         }
1339
1340         return MS_MEDIA_ERR_NONE;
1341 }
1342
1343 int _media_svc_sql_begin_trans(uid_t uid)
1344 {
1345         int ret = MS_MEDIA_ERR_NONE;
1346
1347         media_svc_error("========_media_svc_sql_begin_trans");
1348
1349         ret = media_db_request_update_db_batch_start("BEGIN IMMEDIATE;", uid);
1350
1351         return ret;
1352 }
1353
1354 int _media_svc_sql_end_trans(uid_t uid)
1355 {
1356         int ret = MS_MEDIA_ERR_NONE;
1357
1358         media_svc_error("========_media_svc_sql_end_trans");
1359
1360         ret = media_db_request_update_db_batch_end("COMMIT;", uid);
1361
1362         return ret;
1363 }
1364
1365 int _media_svc_sql_rollback_trans(uid_t uid)
1366 {
1367         media_svc_error("========_media_svc_sql_rollback_trans");
1368
1369         return _media_svc_sql_query("ROLLBACK;", uid);
1370 }
1371
1372 int _media_svc_sql_query_list(GList **query_list, uid_t uid)
1373 {
1374         int ret = MS_MEDIA_ERR_NONE;
1375         int idx = 0;
1376         int length = g_list_length(*query_list);
1377         char *sql = NULL;
1378         char query_bundle[MEDIA_SVC_QUERY_LEN_MAX] = {0, };
1379         int query_len = 0;
1380         int total_len = 0;
1381
1382         media_svc_debug("query list length : [%d]", length);
1383
1384         memset(query_bundle, 0, sizeof(query_bundle));
1385
1386         for (idx = 0; idx < length; idx++) {
1387                 sql = (char *)g_list_nth_data(*query_list, idx);
1388                 if (STRING_VALID(sql)) {
1389                         query_len = strlen(sql);
1390
1391                         if (query_len >= (sizeof(query_bundle) - 1)) {
1392                                 media_svc_error("NEED TO CHECK FILE : A single query size exceeds 8k [%d]", query_len);
1393                                 SQLITE3_SAFE_FREE(sql);
1394                                 continue;
1395                         }
1396
1397                         if ((total_len + query_len) >= (sizeof(query_bundle) - 1)) {
1398                                 ret = media_db_request_update_db_batch(query_bundle, uid);
1399                                 if (ret != MS_MEDIA_ERR_NONE)
1400                                         media_svc_error("media_db_request_update_db_batch failed : %d", ret);
1401
1402                                 memset(query_bundle, 0, sizeof(query_bundle));
1403                                 total_len = 0;
1404                                 /* NEED TO CHECK : If a single query size is over 8K, drop it. */
1405                                 /*                              Consider inserting the basic information without metadata */
1406                                 /* Refer : SQLITE3 spec In Tizen 3.0 */
1407                                 /* Single query limit size = 1 billion bytes(1GiB) */
1408                                 /* DB limit size = 1 billion bytes(1GiB) */
1409                                 /* column limit = 2000 */
1410                         }
1411
1412                         SAFE_STRLCAT(query_bundle, sql, sizeof(query_bundle));
1413                         total_len += query_len;
1414
1415                         SQLITE3_SAFE_FREE(sql);
1416                 }
1417         }
1418
1419         if (total_len > 0) {
1420                 ret = media_db_request_update_db_batch(query_bundle, uid);
1421                 if (ret != MS_MEDIA_ERR_NONE)
1422                         media_svc_error("media_db_request_update_db_batch failed : %d", ret);
1423
1424                 memset(query_bundle, 0, sizeof(query_bundle));
1425                 total_len = 0;
1426         }
1427
1428         _media_svc_sql_query_release(query_list);
1429
1430         return MS_MEDIA_ERR_NONE;
1431
1432 }
1433
1434 void _media_svc_sql_query_add(GList **query_list, char **query)
1435 {
1436         *query_list = g_list_append(*query_list, *query);
1437 }
1438
1439 void _media_svc_sql_query_release(GList **query_list)
1440 {
1441         if (*query_list) {
1442                 media_svc_debug("_svc_sql_query_release");
1443                 g_list_free(*query_list);
1444                 *query_list = NULL;
1445         }
1446 }
1447
1448 int _media_svc_check_db_upgrade(sqlite3 *db_handle, int user_version, uid_t uid)
1449 {
1450         if (user_version < LATEST_VERSION_NUMBER) {
1451                 media_svc_error("Current DB is out of date(%d).. So start to upgrade DB(%d)", user_version, LATEST_VERSION_NUMBER);
1452                 return __media_svc_db_upgrade(db_handle, user_version, uid);
1453         } else {
1454                 return MS_MEDIA_ERR_NONE;
1455         }
1456 }
1457
1458 int _media_db_check_corrupt(sqlite3 *db_handle)
1459 {
1460         int ret = MS_MEDIA_ERR_NONE;
1461         char *sql = sqlite3_mprintf("PRAGMA quick_check(1)");
1462         sqlite3_stmt *sql_stmt = NULL;
1463         char *result = NULL;
1464
1465         ret = _media_svc_sql_prepare_to_step(db_handle, sql, &sql_stmt);
1466         if (ret != MS_MEDIA_ERR_NONE) {
1467                 media_svc_error("error when check db. err = [%d]", ret);
1468                 return ret;
1469         }
1470
1471         result = (char *)sqlite3_column_text(sql_stmt, 0);
1472         SQLITE3_FINALIZE(sql_stmt);
1473
1474         if (result != NULL) {
1475                 media_svc_debug("result %s", result);
1476                 if (strcasecmp(result, "OK"))
1477                         ret = MS_MEDIA_ERR_DB_CORRUPT;
1478         } else {
1479                 media_svc_error("result is NULL");
1480                 ret = MS_MEDIA_ERR_DB_INTERNAL;
1481         }
1482
1483         return ret;
1484 }
1485
1486
1487 int _media_svc_create_media_table_with_id(const char *table_id, uid_t uid)
1488 {
1489         int ret = MS_MEDIA_ERR_NONE;
1490
1491         ret = _media_svc_init_table_query(table_id);
1492         if (ret != MS_MEDIA_ERR_NONE) {
1493                 media_svc_error("_media_svc_init_table_query failed");
1494                 goto ERROR;
1495         }
1496
1497         ret = _media_svc_make_table_query(table_id, MEDIA_SVC_DB_LIST_MEDIA, uid);
1498         if (ret != MS_MEDIA_ERR_NONE) {
1499                 media_svc_error("_media_svc_make_table_query failed");
1500                 goto ERROR;
1501         }
1502
1503         /* Add for trigger */
1504         ret = _media_svc_make_table_query(MEDIA_SVC_DB_TABLE_FOLDER, MEDIA_SVC_DB_LIST_FOLDER, uid);
1505         if (ret != MS_MEDIA_ERR_NONE) {
1506                 media_svc_error("_media_svc_make_table_query failed");
1507                 goto ERROR;
1508         }
1509
1510         ret = _media_svc_make_table_query(MEDIA_SVC_DB_TABLE_PLAYLIST_MAP, MEDIA_SVC_DB_LIST_PLAYLIST_MAP, uid);
1511         if (ret != MS_MEDIA_ERR_NONE) {
1512                 media_svc_error("_media_svc_make_table_query failed");
1513                 goto ERROR;
1514         }
1515
1516         ret = _media_svc_make_table_query(MEDIA_SVC_DB_TABLE_ALBUM, MEDIA_SVC_DB_LIST_ALBUM, uid);
1517         if (ret != MS_MEDIA_ERR_NONE) {
1518                 media_svc_error("_media_svc_make_table_query failed");
1519                 goto ERROR;
1520         }
1521
1522         ret = _media_svc_make_table_query(MEDIA_SVC_DB_TABLE_TAG_MAP, MEDIA_SVC_DB_LIST_TAG_MAP, uid);
1523         if (ret != MS_MEDIA_ERR_NONE) {
1524                 media_svc_error("_media_svc_make_table_query failed");
1525                 goto ERROR;
1526         }
1527
1528         ret = _media_svc_make_table_query(MEDIA_SVC_DB_TABLE_BOOKMARK, MEDIA_SVC_DB_LIST_BOOKMARK, uid);
1529         if (ret != MS_MEDIA_ERR_NONE) {
1530                 media_svc_error("_media_svc_make_table_query failed");
1531                 goto ERROR;
1532         }
1533
1534         ret = _media_svc_make_table_query(MEDIA_SVC_DB_TABLE_UHD, MEDIA_SVC_DB_LIST_UHD, uid);
1535         if (ret != MS_MEDIA_ERR_NONE) {
1536                 media_svc_error("_media_svc_make_table_query failed");
1537                 goto ERROR;
1538         }
1539
1540         ret = _media_svc_make_table_query(MEDIA_SVC_DB_TABLE_PVR, MEDIA_SVC_DB_LIST_PVR, uid);
1541         if (ret != MS_MEDIA_ERR_NONE) {
1542                 media_svc_error("_media_svc_make_table_query failed");
1543                 goto ERROR;
1544         }
1545
1546         _media_svc_destroy_table_query();
1547
1548         return ret;
1549 ERROR:
1550
1551         _media_svc_destroy_table_query();
1552
1553         return ret;
1554 }
1555
1556 int _media_svc_drop_media_table(const char *storage_id, uid_t uid)
1557 {
1558         int ret = MS_MEDIA_ERR_NONE;
1559
1560         char *sql = sqlite3_mprintf("DROP TABLE IF EXISTS '%q'", storage_id);
1561
1562         ret = _media_svc_sql_query(sql, uid);
1563         SQLITE3_SAFE_FREE(sql);
1564
1565         return ret;
1566 }
1567
1568 int _media_svc_update_media_view(sqlite3 *db_handle, uid_t uid)
1569 {
1570         int ret = MS_MEDIA_ERR_NONE;
1571         char *sql = NULL;
1572         sqlite3_stmt *sql_stmt = NULL;
1573         int item_cnt = 0;
1574         int idx = 0;
1575         GList *storage_list = NULL;
1576         char view_query[MEDIA_SVC_QUERY_LEN_NORMAL] = {0, };
1577         memset(view_query, 0x00, sizeof(view_query));
1578
1579         snprintf(view_query, sizeof(view_query), "DROP VIEW IF EXISTS %s; CREATE VIEW IF NOT EXISTS %s AS SELECT * from %s ", MEDIA_SVC_DB_VIEW_MEDIA, MEDIA_SVC_DB_VIEW_MEDIA, MEDIA_SVC_DB_TABLE_MEDIA);
1580
1581         /*Select list of storage*/
1582         sql = sqlite3_mprintf("SELECT storage_uuid FROM '%s' WHERE validity=1 AND storage_uuid != '%s'", MEDIA_SVC_DB_TABLE_STORAGE, MEDIA_SVC_DB_TABLE_MEDIA);
1583         ret = _media_svc_sql_prepare_to_step_simple(db_handle, sql, &sql_stmt);
1584         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
1585
1586         while (sqlite3_step(sql_stmt) == SQLITE_ROW) {
1587                 if (STRING_VALID((const char *)sqlite3_column_text(sql_stmt, 0)))
1588                         storage_list = g_list_append(storage_list, strdup((char *)sqlite3_column_text(sql_stmt, 0)));
1589         }
1590         SQLITE3_FINALIZE(sql_stmt);
1591
1592         if ((storage_list != NULL) && (g_list_length(storage_list) > 0)) {
1593                 item_cnt = g_list_length(storage_list);
1594
1595                 for (idx = 0; idx < item_cnt; idx++) {
1596                         int table_cnt = 0;
1597                         char *storage_id = NULL;
1598                         storage_id = g_list_nth_data(storage_list, idx);
1599
1600                         if (STRING_VALID(storage_id)) {
1601                                 /*Select list of storage*/
1602                                 sql = sqlite3_mprintf("SELECT COUNT(*) FROM SQLITE_MASTER WHERE type='table' and name='%q'", storage_id);
1603                                 ret = _media_svc_sql_prepare_to_step(db_handle, sql, &sql_stmt);
1604                                 if (ret != MS_MEDIA_ERR_NONE) {
1605                                         SAFE_FREE(storage_id);
1606                                         continue;
1607                                 }
1608
1609                                 table_cnt = sqlite3_column_int(sql_stmt, 0);
1610                                 SQLITE3_FINALIZE(sql_stmt);
1611
1612                                 if (table_cnt > 0) {
1613                                         char append_query[128] = {0, };
1614                                         memset(append_query, 0x00, sizeof(append_query));
1615                                         snprintf(append_query, sizeof(append_query), " UNION SELECT * from '%s'", storage_id);
1616                                         SAFE_STRLCAT(view_query, append_query, sizeof(view_query));
1617                                 } else {
1618                                         media_svc_error("media table not exist for storage [%s]", storage_id);
1619                                 }
1620
1621                                 SAFE_FREE(storage_id);
1622                         }
1623                 }
1624                 g_list_free(storage_list);
1625         }
1626
1627         ret = _media_svc_sql_query(view_query, uid);
1628         media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
1629
1630         return ret;
1631 }