4 * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
6 * Contact: Hyunjun Ko <zzoon.ko@samsung.com>, Haejeong Kim <backto.kim@samsung.com>
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
12 * http://www.apache.org/licenses/LICENSE-2.0
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.
25 #include <media-util.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"
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);
39 static GHashTable *table;
40 static GSList *column_list[MEDIA_SVC_DB_LIST_MAX];
42 char *_media_svc_get_path(uid_t uid)
45 char *result_path = NULL;
47 ret = tzplatform_set_user(uid);
49 media_svc_error("Invalid UID[%d]", uid);
52 const char *result = tzplatform_getenv(TZ_USER_CONTENT);
53 result_path = strndup(result, strlen(result));
54 tzplatform_reset_user();
60 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)
62 table_info_s *tbl = NULL;
64 media_svc_retvm_if(!STRING_VALID(name), MS_MEDIA_ERR_INVALID_PARAMETER, "name is NULL");
66 if (STRING_VALID(trigger_name)) {
67 media_svc_retvm_if(!STRING_VALID(event_table), MS_MEDIA_ERR_INVALID_PARAMETER, "event_table is NULL");
68 media_svc_retvm_if(!STRING_VALID(action_table), MS_MEDIA_ERR_INVALID_PARAMETER, "action_table is NULL");
71 tbl = malloc(sizeof(table_info_s));
73 media_svc_error("MS_MEDIA_ERR_OUT_OF_MEMORY");
74 return MS_MEDIA_ERR_OUT_OF_MEMORY;
77 memset(tbl, 0x00, sizeof(table_info_s));
79 if (STRING_VALID(trigger_name)) {
80 tbl->trigger_name = malloc(MEDIA_SVC_PATHNAME_SIZE);
81 if (tbl->trigger_name == NULL) {
82 media_svc_error("MS_MEDIA_ERR_OUT_OF_MEMORY");
84 return MS_MEDIA_ERR_OUT_OF_MEMORY;
87 memset(tbl->trigger_name, 0x00, MEDIA_SVC_PATHNAME_SIZE);
88 snprintf(tbl->trigger_name, MEDIA_SVC_PATHNAME_SIZE, "%s_%s", trigger_name, event_table);
90 tbl->event_table = strndup(event_table, strlen(event_table));
91 tbl->action_table = strndup(action_table, strlen(action_table));
94 if (STRING_VALID(view_name))
95 tbl->view_name = strndup(view_name, strlen(view_name));
97 g_hash_table_insert(table, (gpointer)name, (gpointer)tbl);
99 return MS_MEDIA_ERR_NONE;
102 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)
104 column_info_s *col = NULL;
105 col = malloc(sizeof(column_info_s));
107 media_svc_error("MS_MEDIA_ERR_OUT_OF_MEMORY");
108 return MS_MEDIA_ERR_OUT_OF_MEMORY;
110 memset(col, 0, sizeof(column_info_s));
112 col->name = strndup(name, strlen(name));
113 col->type = strndup(type, strlen(type));
114 if (option != NULL) {
115 col->has_option = true;
116 col->option = strndup(option, strlen(option));
118 col->has_option = false;
120 col->version = version;
121 if (index_name != NULL) {
122 col->is_index = true;
123 col->index_name = strndup(index_name, strlen(index_name));
125 col->is_index = false;
127 col->is_unique = is_unique;
128 col->is_trigger = is_trigger;
129 col->is_view = is_view;
130 *slist = g_slist_append(*slist, col);
132 return MS_MEDIA_ERR_NONE;
135 static int __media_svc_rebuild_view_query(sqlite3 *db_handle, uid_t uid)
137 int ret = MS_MEDIA_ERR_NONE;
138 column_info_s *col_ptr = NULL;
140 char table_query[4096] = {0, };
141 char temp[1024] = {0, };
145 _media_svc_update_media_view(db_handle, uid);
147 /*drop playlist_view, tag_view */
148 sql = sqlite3_mprintf(MEDIA_SVC_DB_QUERY_DROP_VIEW, MEDIA_SVC_DB_VIEW_PLAYLIST);
149 ret = _media_svc_sql_query(sql, uid);
151 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
153 sql = sqlite3_mprintf(MEDIA_SVC_DB_QUERY_DROP_VIEW, MEDIA_SVC_DB_VIEW_TAG);
154 ret = _media_svc_sql_query(sql, uid);
156 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
158 /*create playlist_view */
159 len = g_slist_length(column_list[MEDIA_SVC_DB_LIST_PLAYLIST]);
160 for (i = 1; i < len; i++) {
161 col_ptr = g_slist_nth_data(column_list[MEDIA_SVC_DB_LIST_PLAYLIST], i);
162 if (col_ptr->is_view) {
164 if (strncmp(col_ptr->name, MEDIA_SVC_DB_COLUMN_THUMBNAIL, strlen(MEDIA_SVC_DB_COLUMN_THUMBNAIL)) == 0)
165 snprintf(temp, sizeof(temp), ", playlist.%s AS p_thumbnail_path", col_ptr->name);
167 snprintf(temp, sizeof(temp), ", playlist.%s", col_ptr->name);
168 strncat(table_query, temp, strlen(temp));
170 snprintf(temp, sizeof(temp), "playlist.%s", col_ptr->name);
171 strncpy(table_query, temp, strlen(temp));
175 memset(temp, 0, sizeof(temp));
177 len = g_slist_length(column_list[MEDIA_SVC_DB_LIST_PLAYLIST_MAP]);
178 for (i = 1; i < len; i++) {
179 col_ptr = g_slist_nth_data(column_list[MEDIA_SVC_DB_LIST_PLAYLIST_MAP], i);
180 if (col_ptr->is_view) {
181 if (strncmp(col_ptr->name, MEDIA_SVC_DB_COLUMN_MAP_ID, strlen(MEDIA_SVC_DB_COLUMN_MAP_ID)) == 0)
182 snprintf(temp, sizeof(temp), ", media_count IS NOT NULL AS media_count, playlist_map.%s AS pm_id", col_ptr->name);
184 snprintf(temp, sizeof(temp), ", playlist_map.%s", col_ptr->name);
185 strncat(table_query, temp, strlen(temp));
187 memset(temp, 0, sizeof(temp));
190 len = g_slist_length(column_list[MEDIA_SVC_DB_LIST_MEDIA]);
191 for (i = 1; i < len; i++) {
192 col_ptr = g_slist_nth_data(column_list[MEDIA_SVC_DB_LIST_MEDIA], i);
193 if (col_ptr->is_view) {
194 snprintf(temp, sizeof(temp), ", media.%s", col_ptr->name);
195 strncat(table_query, temp, strlen(temp));
197 memset(temp, 0, sizeof(temp));
199 sql = sqlite3_mprintf(MEDIA_SVC_DB_QUERY_VIEW_PLAYLIST, MEDIA_SVC_DB_VIEW_PLAYLIST, table_query);
200 ret = _media_svc_sql_query(sql, uid);
202 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
206 memset(table_query, 0, sizeof(table_query));
208 len = g_slist_length(column_list[MEDIA_SVC_DB_LIST_TAG]);
209 for (i = 1; i < len; i++) {
210 col_ptr = g_slist_nth_data(column_list[MEDIA_SVC_DB_LIST_TAG], i);
211 if (col_ptr->is_view) {
213 snprintf(temp, sizeof(temp), ", tag.%s", col_ptr->name);
214 strncat(table_query, temp, strlen(temp));
216 snprintf(temp, sizeof(temp), "tag.%s", col_ptr->name);
217 strncpy(table_query, temp, strlen(temp));
221 memset(temp, 0, sizeof(temp));
223 len = g_slist_length(column_list[MEDIA_SVC_DB_LIST_TAG_MAP]);
224 for (i = 1; i < len; i++) {
225 col_ptr = g_slist_nth_data(column_list[MEDIA_SVC_DB_LIST_TAG_MAP], i);
226 if (col_ptr->is_view) {
227 if (strncmp(col_ptr->name, MEDIA_SVC_DB_COLUMN_MAP_ID, strlen(MEDIA_SVC_DB_COLUMN_MAP_ID)) == 0)
228 snprintf(temp, sizeof(temp), ", media_count IS NOT NULL AS media_count, tag_map.%s AS tm_id", col_ptr->name);
230 snprintf(temp, sizeof(temp), ", tag_map.%s", col_ptr->name);
231 strncat(table_query, temp, strlen(temp));
233 memset(temp, 0, sizeof(temp));
236 len = g_slist_length(column_list[MEDIA_SVC_DB_LIST_MEDIA]);
237 for (i = 1; i < len; i++) {
238 col_ptr = g_slist_nth_data(column_list[MEDIA_SVC_DB_LIST_MEDIA], i);
239 if (col_ptr->is_view) {
240 snprintf(temp, sizeof(temp), ", media.%s", col_ptr->name);
241 strncat(table_query, temp, strlen(temp));
243 memset(temp, 0, sizeof(temp));
245 sql = sqlite3_mprintf(MEDIA_SVC_DB_QUERY_VIEW_TAG, MEDIA_SVC_DB_VIEW_TAG, table_query);
246 ret = _media_svc_sql_query(sql, uid);
248 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
250 return MS_MEDIA_ERR_NONE;
253 int _media_svc_make_table_query(const char *table_name, media_svc_table_slist_e list, uid_t uid)
255 int ret = MS_MEDIA_ERR_NONE;
256 table_info_s *tb = NULL;
257 column_info_s *col_ptr = NULL;
259 char table_query[4096] = {0, };
260 char index_query[4096] = {0, };
261 char trigger_query[4096] = {0, };
262 char table_query_sub[1024] = {0, };
263 char temp[1024] = {0 ,};
267 int table_sub_len = 0;
271 tb = g_hash_table_lookup(table, table_name);
273 media_svc_debug("lookup fail.. table name [%s] ", table_name);
274 tb = g_hash_table_lookup(table, MEDIA_SVC_DB_TABLE_MEDIA);
277 len = g_slist_length(column_list[list]);
280 media_svc_error("Invalid column");
281 return MS_MEDIA_ERR_INTERNAL;
284 for (i = 1; i < len; i++) {
285 col_ptr = g_slist_nth_data(column_list[list], i);
287 if (col_ptr->has_option) {
289 snprintf(temp, sizeof(temp), ", %s %s %s", col_ptr->name, col_ptr->type, col_ptr->option);
290 strncat(table_query, temp, strlen(temp));
292 snprintf(temp, sizeof(temp), "%s %s %s", col_ptr->name, col_ptr->type, col_ptr->option);
293 strncpy(table_query, temp, strlen(temp));
298 snprintf(temp, sizeof(temp), ", %s %s", col_ptr->name, col_ptr->type);
299 strncat(table_query, temp, strlen(temp));
301 snprintf(temp, sizeof(temp), "%s %s", col_ptr->name, col_ptr->type);
302 strncpy(table_query, temp, strlen(temp));
306 memset(temp, 0, sizeof(temp));
309 if (col_ptr->is_unique) {
310 if (table_sub_len > 0) {
311 snprintf(temp, sizeof(temp), ", %s", col_ptr->name);
312 strncat(table_query_sub, temp, strlen(temp));
313 table_sub_len = strlen(table_query_sub);
315 snprintf(temp, sizeof(temp), "%s", col_ptr->name);
316 strncpy(table_query_sub, temp, strlen(temp));
317 table_sub_len = strlen(table_query_sub);
320 memset(temp, 0, sizeof(temp));
323 if (col_ptr->is_index) {
325 snprintf(temp, sizeof(temp), MEDIA_SVC_DB_QUERY_INDEX, col_ptr->index_name, table_name, col_ptr->name);
326 strncat(index_query, temp, strlen(temp));
327 index_len = strlen(index_query);
329 snprintf(temp, sizeof(temp), MEDIA_SVC_DB_QUERY_INDEX, col_ptr->index_name, table_name, col_ptr->name);
330 strncpy(index_query, temp, strlen(temp));
331 index_len = strlen(index_query);
334 memset(temp, 0, sizeof(temp));
337 if (col_ptr->is_trigger) {
338 if (STRING_VALID(tb->trigger_name)) {
339 if (strncmp(table_name, MEDIA_SVC_DB_TABLE_ALBUM, strlen(MEDIA_SVC_DB_TABLE_ALBUM)) == 0) {
340 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);
341 strncpy(trigger_query, temp, strlen(temp));
342 trigger_len = strlen(trigger_query);
344 snprintf(temp, sizeof(temp), MEDIA_SVC_DB_QUERY_TRIGGER, tb->trigger_name, tb->event_table, tb->action_table, col_ptr->name, col_ptr->name);
345 strncpy(trigger_query, temp, strlen(temp));
346 trigger_len = strlen(trigger_query);
349 media_svc_error("invalid trigger name");
352 memset(temp, 0, sizeof(temp));
356 if (table_sub_len > 0) {
357 sql = sqlite3_mprintf(MEDIA_SVC_DB_QUERY_TABLE_WITH_UNIQUE, table_name, table_query, table_query_sub);
358 ret = _media_svc_sql_query(sql, uid);
360 memset(table_query, 0, sizeof(table_query));
361 memset(table_query_sub, 0, sizeof(table_query_sub));
362 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
364 sql = sqlite3_mprintf(MEDIA_SVC_DB_QUERY_TABLE, table_name, table_query);
365 ret = _media_svc_sql_query(sql, uid);
367 memset(table_query, 0, sizeof(table_query));
368 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
372 ret = _media_svc_sql_query(index_query, uid);
373 memset(index_query, 0, sizeof(index_query));
374 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
377 if (trigger_len > 0) {
378 ret = _media_svc_sql_query(trigger_query, uid);
379 memset(trigger_query, 0, sizeof(trigger_query));
380 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
385 if (tb != NULL && tb->view_name != NULL) {
386 if (strncmp(table_name, MEDIA_SVC_DB_TABLE_MEDIA, strlen(MEDIA_SVC_DB_TABLE_MEDIA)) == 0) {
387 sql = sqlite3_mprintf(MEDIA_SVC_DB_QUERY_VIEW_MEDIA, tb->view_name, table_name);
388 ret = _media_svc_sql_query(sql, uid);
390 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
392 } else if (strncmp(table_name, MEDIA_SVC_DB_TABLE_PLAYLIST, strlen(MEDIA_SVC_DB_TABLE_PLAYLIST)) == 0) {
393 len = g_slist_length(column_list[MEDIA_SVC_DB_LIST_PLAYLIST]);
394 for (i = 1; i < len; i++) {
395 col_ptr = g_slist_nth_data(column_list[MEDIA_SVC_DB_LIST_PLAYLIST], i);
396 if (col_ptr->is_view) {
398 if (strncmp(col_ptr->name, MEDIA_SVC_DB_COLUMN_THUMBNAIL, strlen(MEDIA_SVC_DB_COLUMN_THUMBNAIL)) == 0)
399 snprintf(temp, sizeof(temp), ", playlist.%s AS p_thumbnail_path", col_ptr->name);
401 snprintf(temp, sizeof(temp), ", playlist.%s", col_ptr->name);
402 strncat(table_query, temp, strlen(temp));
404 snprintf(temp, sizeof(temp), "playlist.%s", col_ptr->name);
405 strncpy(table_query, temp, strlen(temp));
409 memset(temp, 0, sizeof(temp));
411 len = g_slist_length(column_list[MEDIA_SVC_DB_LIST_PLAYLIST_MAP]);
412 for (i = 1; i < len; i++) {
413 col_ptr = g_slist_nth_data(column_list[MEDIA_SVC_DB_LIST_PLAYLIST_MAP], i);
414 if (col_ptr->is_view) {
415 if (strncmp(col_ptr->name, MEDIA_SVC_DB_COLUMN_MAP_ID, strlen(MEDIA_SVC_DB_COLUMN_MAP_ID)) == 0)
416 snprintf(temp, sizeof(temp), ", media_count IS NOT NULL AS media_count, playlist_map.%s AS pm_id", col_ptr->name);
418 snprintf(temp, sizeof(temp), ", playlist_map.%s", col_ptr->name);
419 strncat(table_query, temp, strlen(temp));
421 memset(temp, 0, sizeof(temp));
424 len = g_slist_length(column_list[MEDIA_SVC_DB_LIST_MEDIA]);
425 for (i = 1; i < len; i++) {
426 col_ptr = g_slist_nth_data(column_list[MEDIA_SVC_DB_LIST_MEDIA], i);
427 if (col_ptr->is_view) {
428 snprintf(temp, sizeof(temp), ", media.%s", col_ptr->name);
429 strncat(table_query, temp, strlen(temp));
431 memset(temp, 0, sizeof(temp));
433 sql = sqlite3_mprintf(MEDIA_SVC_DB_QUERY_VIEW_PLAYLIST, tb->view_name, table_query);
434 ret = _media_svc_sql_query(sql, uid);
436 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
439 len = g_slist_length(column_list[MEDIA_SVC_DB_LIST_TAG]);
440 for (i = 1; i < len; i++) {
441 col_ptr = g_slist_nth_data(column_list[MEDIA_SVC_DB_LIST_TAG], i);
442 if (col_ptr->is_view) {
444 snprintf(temp, sizeof(temp), ", tag.%s", col_ptr->name);
445 strncat(table_query, temp, strlen(temp));
447 snprintf(temp, sizeof(temp), "tag.%s", col_ptr->name);
448 strncpy(table_query, temp, strlen(temp));
452 memset(temp, 0, sizeof(temp));
454 len = g_slist_length(column_list[MEDIA_SVC_DB_LIST_TAG_MAP]);
455 for (i = 1; i < len; i++) {
456 col_ptr = g_slist_nth_data(column_list[MEDIA_SVC_DB_LIST_TAG_MAP], i);
457 if (col_ptr->is_view) {
458 if (strncmp(col_ptr->name, MEDIA_SVC_DB_COLUMN_MAP_ID, strlen(MEDIA_SVC_DB_COLUMN_MAP_ID)) == 0)
459 snprintf(temp, sizeof(temp), ", media_count IS NOT NULL AS media_count, tag_map.%s AS tm_id", col_ptr->name);
461 snprintf(temp, sizeof(temp), ", tag_map.%s", col_ptr->name);
462 strncat(table_query, temp, strlen(temp));
464 memset(temp, 0, sizeof(temp));
467 len = g_slist_length(column_list[MEDIA_SVC_DB_LIST_MEDIA]);
468 for (i = 1; i < len; i++) {
469 col_ptr = g_slist_nth_data(column_list[MEDIA_SVC_DB_LIST_MEDIA], i);
470 if (col_ptr->is_view) {
471 snprintf(temp, sizeof(temp), ", media.%s", col_ptr->name);
472 strncat(table_query, temp, strlen(temp));
474 memset(temp, 0, sizeof(temp));
476 sql = sqlite3_mprintf(MEDIA_SVC_DB_QUERY_VIEW_TAG, tb->view_name, table_query);
477 ret = _media_svc_sql_query(sql, uid);
479 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
484 return MS_MEDIA_ERR_NONE;
487 int _media_svc_upgrade_table_query(sqlite3 *db_handle, const char *table_name, media_svc_table_slist_e list, uid_t uid)
489 int ret = MS_MEDIA_ERR_NONE;
490 column_info_s *col_ptr = NULL;
492 char temp[1024] = {0, };
495 sqlite3_stmt *sql_stmt = NULL;
497 len = g_slist_length(column_list[list]);
499 sql = sqlite3_mprintf("PRAGMA user_version");
500 ret = _media_svc_sql_prepare_to_step(db_handle, sql, &sql_stmt);
502 if (ret != MS_MEDIA_ERR_NONE) {
503 media_svc_error("error when get user_version. err = [%d]", ret);
506 cur_version = sqlite3_column_int(sql_stmt, 0);
507 SQLITE3_FINALIZE(sql_stmt);
509 len = g_slist_length(column_list[list]);
510 for (i = 1; i < len; i++) {
511 col_ptr = g_slist_nth_data(column_list[list], i);
512 if (col_ptr->version > cur_version) {
514 if (col_ptr->has_option)
515 snprintf(temp, sizeof(temp), "%s %s %s", col_ptr->name, col_ptr->type, col_ptr->option);
517 snprintf(temp, sizeof(temp), "%s %s", col_ptr->name, col_ptr->type);
518 sql = sqlite3_mprintf(MEDIA_SVC_DB_QUERY_ALTER_TABLE, table_name, temp);
519 ret = _media_svc_sql_query(sql, uid);
521 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
523 if (col_ptr->is_index) {
524 memset(temp, 0, sizeof(temp));
525 snprintf(temp, sizeof(temp), MEDIA_SVC_DB_QUERY_INDEX, col_ptr->index_name, table_name, col_ptr->name);
526 ret = _media_svc_sql_query(temp, uid);
527 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
530 memset(temp, 0, sizeof(temp));
533 return MS_MEDIA_ERR_NONE;
536 int _media_svc_init_table_query(const char *event_table_name)
538 int ret = MS_MEDIA_ERR_NONE;
541 /*variable initialize.. */
542 table = g_hash_table_new(g_str_hash, g_str_equal);
543 for (i = 0; i < MEDIA_SVC_DB_LIST_MAX; i++)
544 column_list[i] = g_slist_alloc();
546 /*table specification.. (table_name, index, unique set, trigger, view, trigger name, event table, action table, view name) */
547 ret = __media_svc_add_table_info(MEDIA_SVC_DB_TABLE_MEDIA, NULL, NULL, NULL, MEDIA_SVC_DB_VIEW_MEDIA);
548 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
549 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);
550 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
551 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);
552 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
553 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);
554 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
555 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);
556 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
557 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);
558 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
559 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);
560 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
561 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);
562 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
563 ret = __media_svc_add_table_info(MEDIA_SVC_DB_TABLE_STORAGE, NULL, NULL, NULL, NULL);
564 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
565 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);
566 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
567 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);
568 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
569 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);
570 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
571 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);
572 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
574 /*insert column info.. */
576 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);
577 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
578 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);
579 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
580 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);
581 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
582 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);
583 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
584 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);
585 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
586 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);
587 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
588 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);
589 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
590 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);
591 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
592 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);
593 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
594 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);
595 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
596 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "title", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, "media_title_idx", false, false, true);
597 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
598 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);
599 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
600 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "album", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, "media_album_idx", false, false, true);
601 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
602 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "artist", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, "media_artist_idx", false, false, true);
603 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
604 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);
605 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
606 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "genre", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, "media_genre_idx", false, false, true);
607 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
608 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "composer", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, "media_composer_idx", false, false, true);
609 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
610 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);
611 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
612 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);
613 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
614 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);
615 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
616 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);
617 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
618 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);
619 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
620 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);
621 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
622 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);
623 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
624 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);
625 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
626 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);
627 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
628 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);
629 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
630 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);
631 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
632 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);
633 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
634 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);
635 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
636 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);
637 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
638 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);
639 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
640 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);
641 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
642 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);
643 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
644 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);
645 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
646 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);
647 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
648 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);
649 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
650 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);
651 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
652 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);
653 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
654 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);
655 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
656 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);
657 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
658 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);
659 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
660 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);
661 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
662 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);
663 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
664 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "author", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, "media_author_idx", false, false, true);
665 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
666 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "provider", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, "media_provider_idx", false, false, true);
667 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
668 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "content_name", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, "media_content_name_idx", false, false, true);
669 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
670 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);
671 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
672 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "location_tag", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, "media_location_tag_idx", false, false, true);
673 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
674 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);
675 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
676 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);
677 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
678 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);
679 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
680 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);
681 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
682 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);
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], "weather", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V2, NULL, false, false, true);
685 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
686 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);
687 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
688 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);
689 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
690 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);
691 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
692 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);
693 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
694 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);
695 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
696 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);
697 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
698 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);
699 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
700 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);
701 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
702 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);
703 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
704 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);
705 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
706 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);
707 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
708 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);
709 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
710 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);
711 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
712 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);
713 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
714 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);
715 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
716 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);
717 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
718 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);
719 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
720 /* storage_uuid column is added in DB v4. When doing DB upgrade to v4, if storage_uuid is NOT NULL, alter table failed. */
721 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);
722 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
723 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);
724 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
725 /* color column is added with dcm. (DB v5) */
726 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "color_r", MEDIA_SVC_DB_TYPE_INT, NULL, USER_V5, NULL, false, false, false);
727 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
728 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "color_g", MEDIA_SVC_DB_TYPE_INT, NULL, USER_V5, NULL, false, false, false);
729 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
730 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_MEDIA], "color_b", MEDIA_SVC_DB_TYPE_INT, NULL, USER_V5, 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_MEDIA], "is_360", MEDIA_SVC_DB_TYPE_INT, "DEFAULT 0", USER_V5, NULL, false, false, true);
733 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
736 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);
737 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
738 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);
739 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
740 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);
741 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
742 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);
743 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
744 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);
745 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
746 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);
747 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
748 /* storage_uuid column is added in DB v4. When doing DB upgrade to v4, if storage_uuid is NOT NULL, alter table failed. */
749 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);
750 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
751 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);
752 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
753 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);
754 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
755 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);
756 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
757 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);
758 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
761 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);
762 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
763 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);
764 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
765 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);
766 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
767 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);
768 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
771 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);
772 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
773 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);
774 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
775 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);
776 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
777 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);
778 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
781 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);
782 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
783 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);
784 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
785 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);
786 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
787 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);
788 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
791 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);
792 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
793 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);
794 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
795 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);
796 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
799 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);
800 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
801 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);
802 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
803 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);
804 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
807 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);
808 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
809 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);
810 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
811 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);
812 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
813 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);
814 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
815 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);
816 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
819 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);
820 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
821 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);
822 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
823 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);
824 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
825 ret = __media_svc_add_column_info(&column_list[MEDIA_SVC_DB_LIST_STORAGE], "storage_account", MEDIA_SVC_DB_TYPE_TEXT, NULL, USER_V3, NULL, false, false, false);
826 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
827 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);
828 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
829 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);
830 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
831 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);
832 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
835 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);
836 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
837 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);
838 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
841 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);
842 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
843 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);
844 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
845 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);
846 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
847 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);
848 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
849 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);
850 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
851 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);
852 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
853 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);
854 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
855 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);
856 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
859 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);
860 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
861 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);
862 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
863 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);
864 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
865 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);
866 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
867 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);
868 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
869 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);
870 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
871 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);
872 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
873 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);
874 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
875 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);
876 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
877 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);
878 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
879 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);
880 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
881 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);
882 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
883 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);
884 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
887 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);
888 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
889 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);
890 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
891 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);
892 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
893 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);
894 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
895 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);
896 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
897 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);
898 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
899 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);
900 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
901 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);
902 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
903 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);
904 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
905 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);
906 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
907 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);
908 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
909 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);
910 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
911 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);
912 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
913 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);
914 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
915 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);
916 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
917 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);
918 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
919 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);
920 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
921 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);
922 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
923 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);
924 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
925 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);
926 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
927 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);
928 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
929 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);
930 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
931 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);
932 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
933 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);
934 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
935 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);
936 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
937 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);
938 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
939 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);
940 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
941 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);
942 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
943 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);
944 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
945 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);
946 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
947 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);
948 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
949 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);
950 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
951 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);
952 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
953 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);
954 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
955 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);
956 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
957 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);
958 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
959 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);
960 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
961 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);
962 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
963 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);
964 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
965 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);
966 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
967 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);
968 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
969 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);
970 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
971 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);
972 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
973 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);
974 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
975 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);
976 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
977 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);
978 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
979 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);
980 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
981 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);
982 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
986 void __media_svc_table_free(table_info_s *tb)
988 SAFE_FREE(tb->trigger_name);
989 SAFE_FREE(tb->view_name);
990 SAFE_FREE(tb->event_table);
991 SAFE_FREE(tb->action_table);
995 void __media_svc_column_free(column_info_s *col)
997 SAFE_FREE(col->name);
998 SAFE_FREE(col->type);
999 SAFE_FREE(col->option);
1000 SAFE_FREE(col->index_name);
1004 void _media_svc_destroy_table_query()
1007 table_info_s *tb = NULL;
1008 column_info_s *col_ptr = NULL;
1012 tb = g_hash_table_lookup(table, MEDIA_SVC_DB_TABLE_MEDIA);
1013 __media_svc_table_free(tb);
1014 g_hash_table_remove(table, MEDIA_SVC_DB_TABLE_MEDIA);
1016 tb = g_hash_table_lookup(table, MEDIA_SVC_DB_TABLE_FOLDER);
1017 __media_svc_table_free(tb);
1018 g_hash_table_remove(table, MEDIA_SVC_DB_TABLE_FOLDER);
1020 tb = g_hash_table_lookup(table, MEDIA_SVC_DB_TABLE_PLAYLIST);
1021 __media_svc_table_free(tb);
1022 g_hash_table_remove(table, MEDIA_SVC_DB_TABLE_PLAYLIST);
1024 tb = g_hash_table_lookup(table, MEDIA_SVC_DB_TABLE_PLAYLIST_MAP);
1025 __media_svc_table_free(tb);
1026 g_hash_table_remove(table, MEDIA_SVC_DB_TABLE_PLAYLIST_MAP);
1028 tb = g_hash_table_lookup(table, MEDIA_SVC_DB_TABLE_ALBUM);
1029 __media_svc_table_free(tb);
1030 g_hash_table_remove(table, MEDIA_SVC_DB_TABLE_ALBUM);
1032 tb = g_hash_table_lookup(table, MEDIA_SVC_DB_TABLE_TAG);
1033 __media_svc_table_free(tb);
1034 g_hash_table_remove(table, MEDIA_SVC_DB_TABLE_TAG);
1036 tb = g_hash_table_lookup(table, MEDIA_SVC_DB_TABLE_TAG_MAP);
1037 __media_svc_table_free(tb);
1038 g_hash_table_remove(table, MEDIA_SVC_DB_TABLE_TAG_MAP);
1040 tb = g_hash_table_lookup(table, MEDIA_SVC_DB_TABLE_BOOKMARK);
1041 __media_svc_table_free(tb);
1042 g_hash_table_remove(table, MEDIA_SVC_DB_TABLE_BOOKMARK);
1044 tb = g_hash_table_lookup(table, MEDIA_SVC_DB_TABLE_STORAGE);
1045 __media_svc_table_free(tb);
1046 g_hash_table_remove(table, MEDIA_SVC_DB_TABLE_STORAGE);
1048 tb = g_hash_table_lookup(table, MEDIA_SVC_DB_TABLE_UHD);
1049 __media_svc_table_free(tb);
1050 g_hash_table_remove(table, MEDIA_SVC_DB_TABLE_UHD);
1052 tb = g_hash_table_lookup(table, MEDIA_SVC_DB_TABLE_PVR);
1053 __media_svc_table_free(tb);
1054 g_hash_table_remove(table, MEDIA_SVC_DB_TABLE_PVR);
1056 g_hash_table_destroy(table);
1059 len = g_slist_length(column_list[MEDIA_SVC_DB_LIST_MEDIA]);
1061 for (i = 1; i < len; i++) {
1062 col_ptr = g_slist_nth_data(column_list[MEDIA_SVC_DB_LIST_MEDIA], i);
1063 __media_svc_column_free(col_ptr);
1066 len = g_slist_length(column_list[MEDIA_SVC_DB_LIST_FOLDER]);
1068 for (i = 1; i < len; i++) {
1069 col_ptr = g_slist_nth_data(column_list[MEDIA_SVC_DB_LIST_FOLDER], i);
1070 __media_svc_column_free(col_ptr);
1073 len = g_slist_length(column_list[MEDIA_SVC_DB_LIST_PLAYLIST_MAP]);
1075 for (i = 1; i < len; i++) {
1076 col_ptr = g_slist_nth_data(column_list[MEDIA_SVC_DB_LIST_PLAYLIST_MAP], i);
1077 __media_svc_column_free(col_ptr);
1080 len = g_slist_length(column_list[MEDIA_SVC_DB_LIST_PLAYLIST]);
1082 for (i = 1; i < len; i++) {
1083 col_ptr = g_slist_nth_data(column_list[MEDIA_SVC_DB_LIST_PLAYLIST], i);
1084 __media_svc_column_free(col_ptr);
1087 len = g_slist_length(column_list[MEDIA_SVC_DB_LIST_ALBUM]);
1089 for (i = 1; i < len; i++) {
1090 col_ptr = g_slist_nth_data(column_list[MEDIA_SVC_DB_LIST_ALBUM], i);
1091 __media_svc_column_free(col_ptr);
1094 len = g_slist_length(column_list[MEDIA_SVC_DB_LIST_TAG_MAP]);
1096 for (i = 1; i < len; i++) {
1097 col_ptr = g_slist_nth_data(column_list[MEDIA_SVC_DB_LIST_TAG_MAP], i);
1098 __media_svc_column_free(col_ptr);
1101 len = g_slist_length(column_list[MEDIA_SVC_DB_LIST_TAG]);
1103 for (i = 1; i < len; i++) {
1104 col_ptr = g_slist_nth_data(column_list[MEDIA_SVC_DB_LIST_TAG], i);
1105 __media_svc_column_free(col_ptr);
1108 len = g_slist_length(column_list[MEDIA_SVC_DB_LIST_BOOKMARK]);
1110 for (i = 1; i < len; i++) {
1111 col_ptr = g_slist_nth_data(column_list[MEDIA_SVC_DB_LIST_BOOKMARK], i);
1112 __media_svc_column_free(col_ptr);
1115 len = g_slist_length(column_list[MEDIA_SVC_DB_LIST_STORAGE]);
1117 for (i = 1; i < len; i++) {
1118 col_ptr = g_slist_nth_data(column_list[MEDIA_SVC_DB_LIST_STORAGE], i);
1119 __media_svc_column_free(col_ptr);
1122 for (i = 0; i < MEDIA_SVC_DB_LIST_MAX; i++)
1123 g_slist_free(column_list[i]);
1127 static int __media_svc_db_upgrade(sqlite3 *db_handle, int cur_version, uid_t uid)
1129 int ret = MS_MEDIA_ERR_NONE;
1132 ret = _media_svc_init_table_query(MEDIA_SVC_DB_TABLE_MEDIA);
1133 if (ret != MS_MEDIA_ERR_NONE) {
1134 media_svc_error("Query initialization failed");
1138 ret = _media_svc_upgrade_table_query(db_handle, MEDIA_SVC_DB_TABLE_MEDIA, MEDIA_SVC_DB_LIST_MEDIA, uid);
1139 if (ret != MS_MEDIA_ERR_NONE) {
1140 media_svc_error("_media_svc_upgrade_table_query failed");
1144 /* Upgrade issue in folder table */
1145 if (cur_version < USER_V4) {
1146 /* Create tmp table */
1147 sql = sqlite3_mprintf("CREATE TABLE '%q' AS SELECT * FROM '%q';", MEDIA_SVC_DB_TABLE_TMP_TABLE, MEDIA_SVC_DB_TABLE_FOLDER);
1149 media_svc_error("_media_svc_upgrade_table_query failed");
1150 ret = MS_MEDIA_ERR_OUT_OF_MEMORY;
1154 ret = _media_svc_sql_query(sql, uid);
1155 if (ret != MS_MEDIA_ERR_NONE)
1156 media_svc_error("Error when create backup folder table");
1157 SQLITE3_SAFE_FREE(sql);
1159 /* Drop original table */
1160 sql = sqlite3_mprintf("DROP TABLE '%q';", MEDIA_SVC_DB_TABLE_FOLDER);
1162 media_svc_error("_media_svc_upgrade_table_query failed");
1163 ret = MS_MEDIA_ERR_OUT_OF_MEMORY;
1167 ret = _media_svc_sql_query(sql, uid);
1168 if (ret != MS_MEDIA_ERR_NONE)
1169 media_svc_error("Error when drop table");
1170 SQLITE3_SAFE_FREE(sql);
1172 /* Create new table */
1173 ret = _media_svc_make_table_query(MEDIA_SVC_DB_TABLE_FOLDER, MEDIA_SVC_DB_LIST_FOLDER, uid);
1174 if (ret != MS_MEDIA_ERR_NONE) {
1175 media_svc_error("_media_svc_make_table_query failed");
1179 /* Insert into new table */
1180 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);
1182 media_svc_error("Query creation failed");
1183 ret = MS_MEDIA_ERR_OUT_OF_MEMORY;
1187 ret = _media_svc_sql_query(sql, uid);
1188 if (ret != MS_MEDIA_ERR_NONE)
1189 media_svc_error("Error when backup folder table");
1190 SQLITE3_SAFE_FREE(sql);
1193 sql = sqlite3_mprintf("DROP TABLE '%q';", MEDIA_SVC_DB_TABLE_TMP_TABLE);
1195 media_svc_error("Query creation failed");
1196 ret = MS_MEDIA_ERR_OUT_OF_MEMORY;
1200 ret = _media_svc_sql_query(sql, uid);
1201 if (ret != MS_MEDIA_ERR_NONE)
1202 media_svc_error("Error when drop backup folder table");
1203 SQLITE3_SAFE_FREE(sql);
1206 ret = _media_svc_upgrade_table_query(db_handle, MEDIA_SVC_DB_TABLE_FOLDER, MEDIA_SVC_DB_LIST_FOLDER, uid);
1207 if (ret != MS_MEDIA_ERR_NONE) {
1208 media_svc_error("_media_svc_upgrade_table_query failed");
1213 ret = _media_svc_upgrade_table_query(db_handle, MEDIA_SVC_DB_TABLE_PLAYLIST_MAP, MEDIA_SVC_DB_LIST_PLAYLIST_MAP, uid);
1214 if (ret != MS_MEDIA_ERR_NONE) {
1215 media_svc_error("_media_svc_upgrade_table_query failed");
1219 ret = _media_svc_upgrade_table_query(db_handle, MEDIA_SVC_DB_TABLE_PLAYLIST, MEDIA_SVC_DB_LIST_PLAYLIST, uid);
1220 if (ret != MS_MEDIA_ERR_NONE) {
1221 media_svc_error("_media_svc_upgrade_table_query failed");
1225 ret = _media_svc_upgrade_table_query(db_handle, MEDIA_SVC_DB_TABLE_ALBUM, MEDIA_SVC_DB_LIST_ALBUM, uid);
1226 if (ret != MS_MEDIA_ERR_NONE) {
1227 media_svc_error("_media_svc_upgrade_table_query failed");
1231 ret = _media_svc_upgrade_table_query(db_handle, MEDIA_SVC_DB_TABLE_TAG_MAP, MEDIA_SVC_DB_LIST_TAG_MAP, uid);
1232 if (ret != MS_MEDIA_ERR_NONE) {
1233 media_svc_error("_media_svc_upgrade_table_query failed");
1237 ret = _media_svc_upgrade_table_query(db_handle, MEDIA_SVC_DB_TABLE_TAG, MEDIA_SVC_DB_LIST_TAG, uid);
1238 if (ret != MS_MEDIA_ERR_NONE) {
1239 media_svc_error("_media_svc_upgrade_table_query failed");
1243 ret = _media_svc_upgrade_table_query(db_handle, MEDIA_SVC_DB_TABLE_BOOKMARK, MEDIA_SVC_DB_LIST_BOOKMARK, uid);
1244 if (ret != MS_MEDIA_ERR_NONE) {
1245 media_svc_error("_media_svc_upgrade_table_query failed");
1249 ret = _media_svc_upgrade_table_query(db_handle, MEDIA_SVC_DB_TABLE_STORAGE, MEDIA_SVC_DB_LIST_STORAGE, uid);
1250 if (ret != MS_MEDIA_ERR_NONE) {
1251 media_svc_error("_media_svc_upgrade_table_query failed");
1255 if (cur_version < USER_V4) {
1256 /* Need to default value in storage_uuid */
1257 sql = sqlite3_mprintf("UPDATE %q SET storage_uuid = '%q';", MEDIA_SVC_DB_TABLE_MEDIA, "media");
1259 media_svc_error("Query creation failed");
1260 ret = MS_MEDIA_ERR_OUT_OF_MEMORY;
1264 ret = _media_svc_sql_query(sql, uid);
1265 SQLITE3_SAFE_FREE(sql);
1267 sql = sqlite3_mprintf("UPDATE %q SET storage_uuid = '%q';", MEDIA_SVC_DB_TABLE_FOLDER, "media");
1269 media_svc_error("Query creation failed");
1270 ret = MS_MEDIA_ERR_OUT_OF_MEMORY;
1274 ret = _media_svc_sql_query(sql, uid);
1275 SQLITE3_SAFE_FREE(sql);
1278 ret = __media_svc_rebuild_view_query(db_handle, uid);
1280 sql = sqlite3_mprintf("PRAGMA user_version=%d;", LATEST_VERSION_NUMBER);
1282 media_svc_error("Query creation failed");
1283 ret = MS_MEDIA_ERR_OUT_OF_MEMORY;
1287 ret = _media_svc_sql_query(sql, uid);
1288 SQLITE3_SAFE_FREE(sql);
1290 _media_svc_destroy_table_query();
1295 _media_svc_destroy_table_query();
1300 int _media_svc_sql_query(const char *sql_str, uid_t uid)
1302 int ret = MS_MEDIA_ERR_NONE;
1304 media_svc_sec_debug("[SQL query] : %s", sql_str);
1306 ret = media_db_request_update_db(sql_str, uid);
1311 int _media_svc_get_user_version(sqlite3 *db_handle, int *user_version)
1313 int ret = MS_MEDIA_ERR_NONE;
1314 sqlite3_stmt *sql_stmt = NULL;
1315 char *sql = sqlite3_mprintf("PRAGMA user_version;");
1317 ret = _media_svc_sql_prepare_to_step(db_handle, sql, &sql_stmt);
1318 if (ret != MS_MEDIA_ERR_NONE) {
1319 media_svc_error("error when get user_version.");
1323 *user_version = sqlite3_column_int(sql_stmt, 0);
1324 SQLITE3_FINALIZE(sql_stmt);
1326 return MS_MEDIA_ERR_NONE;
1329 int _media_svc_sql_prepare_to_step(sqlite3 *handle, const char *sql_str, sqlite3_stmt **stmt)
1333 media_svc_sec_debug("[SQL query] : %s", sql_str);
1335 if (!STRING_VALID(sql_str)) {
1336 media_svc_error("invalid query");
1337 return MS_MEDIA_ERR_INVALID_PARAMETER;
1340 err = sqlite3_prepare_v2(handle, sql_str, -1, stmt, NULL);
1341 sqlite3_free((char *)sql_str);
1343 if (err != SQLITE_OK) {
1344 media_svc_error("prepare error %d[%s]", err, sqlite3_errmsg(handle));
1345 if (err == SQLITE_CORRUPT)
1346 return MS_MEDIA_ERR_DB_CORRUPT;
1347 else if (err == SQLITE_PERM)
1348 return MS_MEDIA_ERR_DB_PERMISSION;
1350 return MS_MEDIA_ERR_DB_INTERNAL;
1353 err = sqlite3_step(*stmt);
1354 if (err != SQLITE_ROW) {
1355 media_svc_error("[No-Error] Item not found. end of row [%s]", sqlite3_errmsg(handle));
1356 SQLITE3_FINALIZE(*stmt);
1357 return MS_MEDIA_ERR_DB_NO_RECORD;
1360 return MS_MEDIA_ERR_NONE;
1363 int _media_svc_sql_prepare_to_step_simple(sqlite3 *handle, const char *sql_str, sqlite3_stmt **stmt)
1367 media_svc_sec_debug("[SQL query] : %s", sql_str);
1369 if (!STRING_VALID(sql_str)) {
1370 media_svc_error("invalid query");
1371 return MS_MEDIA_ERR_INVALID_PARAMETER;
1374 err = sqlite3_prepare_v2(handle, sql_str, -1, stmt, NULL);
1375 sqlite3_free((char *)sql_str);
1377 if (err != SQLITE_OK) {
1378 media_svc_error("prepare error %d[%s]", err, sqlite3_errmsg(handle));
1379 if (err == SQLITE_CORRUPT)
1380 return MS_MEDIA_ERR_DB_CORRUPT;
1381 else if (err == SQLITE_PERM)
1382 return MS_MEDIA_ERR_DB_PERMISSION;
1384 return MS_MEDIA_ERR_DB_INTERNAL;
1387 return MS_MEDIA_ERR_NONE;
1390 int _media_svc_sql_begin_trans(uid_t uid)
1392 int ret = MS_MEDIA_ERR_NONE;
1394 media_svc_error("========_media_svc_sql_begin_trans");
1396 ret = media_db_request_update_db_batch_start("BEGIN IMMEDIATE;", uid);
1401 int _media_svc_sql_end_trans(uid_t uid)
1403 int ret = MS_MEDIA_ERR_NONE;
1405 media_svc_error("========_media_svc_sql_end_trans");
1407 ret = media_db_request_update_db_batch_end("COMMIT;", uid);
1412 int _media_svc_sql_rollback_trans(uid_t uid)
1414 media_svc_error("========_media_svc_sql_rollback_trans");
1416 return _media_svc_sql_query("ROLLBACK;", uid);
1419 int _media_svc_sql_query_list(GList **query_list, uid_t uid)
1421 int ret = MS_MEDIA_ERR_NONE;
1423 int length = g_list_length(*query_list);
1425 char query_bundle[SQLITE3_QUERY_MAX_LEN] = {0, };
1429 media_svc_debug("query list length : [%d]", length);
1431 for (idx = 0; idx < length; idx++) {
1432 sql = (char *)g_list_nth_data(*query_list, idx);
1434 query_len = strlen(sql);
1435 if ((total_len + query_len) >= (sizeof(query_bundle) - 1)) {
1436 ret = media_db_request_update_db_batch(query_bundle, uid);
1437 if (ret != MS_MEDIA_ERR_NONE)
1438 media_svc_error("media_db_request_update_db_batch failed : %d", ret);
1439 memset(query_bundle, 0, sizeof(query_bundle));
1441 /* NEED TO CHECK : If a single query size is over 8K, drop it. */
1442 /* Consider inserting the basic information without metadata */
1443 /* Refer : SQLITE3 spec In Tizen 3.0 */
1444 /* Single query limit size = 1 billion bytes(1GiB) */
1445 /* DB limit size = 1 billion bytes(1GiB) */
1446 /* column limit = 2000 */
1447 if (query_len >= SQLITE3_QUERY_MAX_LEN) {
1448 media_svc_error("NEED TO CHECK FILE : A single query size exceeds 8k [%d]", query_len);
1450 strncpy(query_bundle, sql, query_len);
1451 total_len = query_len;
1454 strncat(query_bundle, sql, query_len);
1455 total_len += query_len;
1463 if (total_len > 0) {
1464 ret = media_db_request_update_db_batch(query_bundle, uid);
1465 if (ret != MS_MEDIA_ERR_NONE)
1466 media_svc_error("media_db_request_update_db_batch failed : %d", ret);
1468 memset(query_bundle, 0, sizeof(query_bundle));
1472 _media_svc_sql_query_release(query_list);
1474 return MS_MEDIA_ERR_NONE;
1478 void _media_svc_sql_query_add(GList **query_list, char **query)
1480 *query_list = g_list_append(*query_list, *query);
1483 void _media_svc_sql_query_release(GList **query_list)
1486 media_svc_debug("_svc_sql_query_release");
1487 g_list_free(*query_list);
1492 int _media_svc_check_db_upgrade(sqlite3 *db_handle, int user_version, uid_t uid)
1494 if (user_version < LATEST_VERSION_NUMBER) {
1495 media_svc_error("Current DB is out of date(%d).. So start to upgrade DB(%d)", user_version, LATEST_VERSION_NUMBER);
1496 return __media_svc_db_upgrade(db_handle, user_version, uid);
1498 return MS_MEDIA_ERR_NONE;
1502 int _media_db_check_corrupt(sqlite3 *db_handle)
1504 int ret = MS_MEDIA_ERR_NONE;
1505 char *sql = sqlite3_mprintf("PRAGMA quick_check(1)");
1506 sqlite3_stmt *sql_stmt = NULL;
1507 char *result = NULL;
1509 ret = _media_svc_sql_prepare_to_step(db_handle, sql, &sql_stmt);
1510 if (ret != MS_MEDIA_ERR_NONE) {
1511 media_svc_error("error when check db. err = [%d]", ret);
1515 result = (char *)sqlite3_column_text(sql_stmt, 0);
1516 SQLITE3_FINALIZE(sql_stmt);
1518 if (result != NULL) {
1519 media_svc_debug("result %s", result);
1520 if (strcasecmp(result, "OK"))
1521 ret = MS_MEDIA_ERR_DB_CORRUPT;
1523 media_svc_error("result is NULL");
1524 ret = MS_MEDIA_ERR_DB_INTERNAL;
1531 int _media_svc_create_media_table_with_id(const char *table_id, uid_t uid)
1533 int ret = MS_MEDIA_ERR_NONE;
1535 ret = _media_svc_init_table_query(table_id);
1536 if (ret != MS_MEDIA_ERR_NONE) {
1537 media_svc_error("_media_svc_init_table_query failed");
1541 ret = _media_svc_make_table_query(table_id, MEDIA_SVC_DB_LIST_MEDIA, uid);
1542 if (ret != MS_MEDIA_ERR_NONE) {
1543 media_svc_error("_media_svc_make_table_query failed");
1547 /* Add for trigger */
1548 ret = _media_svc_make_table_query(MEDIA_SVC_DB_TABLE_FOLDER, MEDIA_SVC_DB_LIST_FOLDER, uid);
1549 if (ret != MS_MEDIA_ERR_NONE) {
1550 media_svc_error("_media_svc_make_table_query failed");
1554 ret = _media_svc_make_table_query(MEDIA_SVC_DB_TABLE_PLAYLIST_MAP, MEDIA_SVC_DB_LIST_PLAYLIST_MAP, uid);
1555 if (ret != MS_MEDIA_ERR_NONE) {
1556 media_svc_error("_media_svc_make_table_query failed");
1560 ret = _media_svc_make_table_query(MEDIA_SVC_DB_TABLE_ALBUM, MEDIA_SVC_DB_LIST_ALBUM, uid);
1561 if (ret != MS_MEDIA_ERR_NONE) {
1562 media_svc_error("_media_svc_make_table_query failed");
1566 ret = _media_svc_make_table_query(MEDIA_SVC_DB_TABLE_TAG_MAP, MEDIA_SVC_DB_LIST_TAG_MAP, uid);
1567 if (ret != MS_MEDIA_ERR_NONE) {
1568 media_svc_error("_media_svc_make_table_query failed");
1572 ret = _media_svc_make_table_query(MEDIA_SVC_DB_TABLE_BOOKMARK, MEDIA_SVC_DB_LIST_BOOKMARK, uid);
1573 if (ret != MS_MEDIA_ERR_NONE) {
1574 media_svc_error("_media_svc_make_table_query failed");
1578 ret = _media_svc_make_table_query(MEDIA_SVC_DB_TABLE_UHD, MEDIA_SVC_DB_LIST_UHD, uid);
1579 if (ret != MS_MEDIA_ERR_NONE) {
1580 media_svc_error("_media_svc_make_table_query failed");
1584 ret = _media_svc_make_table_query(MEDIA_SVC_DB_TABLE_PVR, MEDIA_SVC_DB_LIST_PVR, uid);
1585 if (ret != MS_MEDIA_ERR_NONE) {
1586 media_svc_error("_media_svc_make_table_query failed");
1590 _media_svc_destroy_table_query();
1595 _media_svc_destroy_table_query();
1600 int _media_svc_drop_media_table(const char *storage_id, uid_t uid)
1602 int ret = MS_MEDIA_ERR_NONE;
1604 char *sql = sqlite3_mprintf("DROP TABLE IF EXISTS '%q'", storage_id);
1606 ret = _media_svc_sql_query(sql, uid);
1612 int _media_svc_update_media_view(sqlite3 *db_handle, uid_t uid)
1614 int ret = MS_MEDIA_ERR_NONE;
1616 sqlite3_stmt *sql_stmt = NULL;
1619 GList *storage_list = NULL;
1620 char view_query[4096] = {0, };
1621 memset(view_query, 0x00, sizeof(view_query));
1623 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);
1625 /*Select list of storage*/
1626 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);
1627 ret = _media_svc_sql_prepare_to_step_simple(db_handle, sql, &sql_stmt);
1628 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);
1630 while (sqlite3_step(sql_stmt) == SQLITE_ROW) {
1631 if (STRING_VALID((const char *)sqlite3_column_text(sql_stmt, 0)))
1632 storage_list = g_list_append(storage_list, strdup((char *)sqlite3_column_text(sql_stmt, 0)));
1634 SQLITE3_FINALIZE(sql_stmt);
1636 if ((storage_list != NULL) && (g_list_length(storage_list) > 0)) {
1637 item_cnt = g_list_length(storage_list);
1639 for (idx = 0; idx < item_cnt; idx++) {
1641 char *storage_id = NULL;
1642 storage_id = g_list_nth_data(storage_list, idx);
1644 if (STRING_VALID(storage_id)) {
1645 /*Select list of storage*/
1646 sql = sqlite3_mprintf("SELECT COUNT(*) FROM SQLITE_MASTER WHERE type='table' and name='%q'", storage_id);
1647 ret = _media_svc_sql_prepare_to_step(db_handle, sql, &sql_stmt);
1648 if (ret != MS_MEDIA_ERR_NONE) {
1649 SAFE_FREE(storage_id);
1653 table_cnt = sqlite3_column_int(sql_stmt, 0);
1654 SQLITE3_FINALIZE(sql_stmt);
1656 if (table_cnt > 0) {
1657 char append_query[128] = {0, };
1658 memset(append_query, 0x00, sizeof(append_query));
1659 snprintf(append_query, sizeof(append_query), " UNION SELECT * from '%s'", storage_id);
1660 strncat(view_query, append_query, strlen(append_query));
1662 media_svc_error("media table not exist for storage [%s]", storage_id);
1665 SAFE_FREE(storage_id);
1668 g_list_free(storage_list);
1671 ret = _media_svc_sql_query(view_query, uid);
1672 media_svc_retv_if(ret != MS_MEDIA_ERR_NONE, ret);