2 * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
18 #include <media_content.h>
19 #include <media_info_private.h>
20 #include <media_util_private.h>
22 static char * __media_db_get_group_name(media_group_e group);
23 static int __media_db_make_query(filter_h filter, attribute_h attr, char *select_query, int select_query_size, char **condition_query, char **option_query);
25 static char * __media_db_get_group_name(media_group_e group)
28 case MEDIA_CONTENT_GROUP_DISPLAY_NAME:
29 return (char *)DB_FIELD_MEDIA_DISPLAY_NAME;
30 case MEDIA_CONTENT_GROUP_TYPE:
31 return (char *)DB_FIELD_MEDIA_TYPE;
32 case MEDIA_CONTENT_GROUP_MIME_TYPE:
33 return (char *) DB_FIELD_MEDIA_MIME_TYPE;
34 case MEDIA_CONTENT_GROUP_SIZE:
35 return (char *) DB_FIELD_MEDIA_SIZE;
36 case MEDIA_CONTENT_GROUP_ADDED_TIME:
37 return (char *) DB_FIELD_MEDIA_ADDED_TIME;
38 case MEDIA_CONTENT_GROUP_MODIFIED_TIME:
39 return (char *) DB_FIELD_MEDIA_MODIFIED_TIME;
40 case MEDIA_CONTENT_GROUP_TITLE:
41 return (char *) DB_FIELD_MEDIA_TITLE;
42 case MEDIA_CONTENT_GROUP_ARTIST:
43 return (char *) DB_FIELD_MEDIA_ARTIST;
44 case MEDIA_CONTENT_GROUP_ALBUM_ARTIST:
45 return (char *) DB_FIELD_MEDIA_ALBUM_ARTIST;
46 case MEDIA_CONTENT_GROUP_GENRE:
47 return (char *) DB_FIELD_MEDIA_GENRE;
48 case MEDIA_CONTENT_GROUP_COMPOSER:
49 return (char *) DB_FIELD_MEDIA_COMPOSER;
50 case MEDIA_CONTENT_GROUP_YEAR:
51 return (char *) DB_FIELD_MEDIA_YEAR;
52 case MEDIA_CONTENT_GROUP_RECORDED_DATE:
53 return (char *) DB_FIELD_MEDIA_RECORDED_DATE;
54 case MEDIA_CONTENT_GROUP_COPYRIGHT:
55 return (char *) DB_FIELD_MEDIA_COPYRIGHT;
56 case MEDIA_CONTENT_GROUP_TRACK_NUM:
57 return (char *) DB_FIELD_MEDIA_TRACK_NUM;
58 case MEDIA_CONTENT_GROUP_DESCRIPTION:
59 return (char *) DB_FIELD_MEDIA_DESCRIPTION;
60 case MEDIA_CONTENT_GROUP_LONGITUDE:
61 return (char *) DB_FIELD_MEDIA_LONGITUDE;
62 case MEDIA_CONTENT_GROUP_LATITUDE:
63 return (char *) DB_FIELD_MEDIA_LATITUDE;
64 case MEDIA_CONTENT_GROUP_ALTITUDE:
65 return (char *) DB_FIELD_MEDIA_ALTITUDE;
66 case MEDIA_CONTENT_GROUP_BURST_IMAGE:
67 return (char *) DB_FIELD_MEDIA_BURST_ID;
68 case MEDIA_CONTENT_GROUP_RATING:
69 return (char *) DB_FIELD_MEDIA_RATING;
70 case MEDIA_CONTENT_GROUP_AUTHOR:
71 return (char *) DB_FIELD_MEDIA_AUTHOR;
72 case MEDIA_CONTENT_GROUP_PROVIDER:
73 return (char *) DB_FIELD_MEDIA_PROVIDER;
74 case MEDIA_CONTENT_GROUP_CONTENT_NAME:
75 return (char *) DB_FIELD_MEDIA_CONTENT_NAME;
76 case MEDIA_CONTENT_GROUP_CATEGORY:
77 return (char *) DB_FIELD_MEDIA_CATEGORY;
78 case MEDIA_CONTENT_GROUP_LOCATION_TAG:
79 return (char *) DB_FIELD_MEDIA_LOCATION_TAG;
80 case MEDIA_CONTENT_GROUP_AGE_RATING:
81 return (char *) DB_FIELD_MEDIA_AGE_RATING;
82 case MEDIA_CONTENT_GROUP_KEYWORD:
83 return (char *) DB_FIELD_MEDIA_KEYWORD;
84 case MEDIA_CONTENT_GROUP_WEATHER:
85 return (char *) DB_FIELD_MEDIA_WEATHER;
86 #ifdef _USE_TV_PROFILE
87 case MEDIA_CONTENT_GROUP_MODIFIED_MONTH:
88 return (char *) DB_FIELD_MEDIA_MODIFIED_DATE;
89 case MEDIA_CONTENT_GROUP_MODIFIED_DATE:
90 return (char *) DB_FIELD_MEDIA_MODIFIED_DATE;
92 #ifdef _USE_SENIOR_MODE
93 case MEDIA_CONTENT_GROUP_CONTACT:
94 return (char *) DB_FIELD_MEDIA_CONTACT;
96 #ifdef _USE_TV_PROFILE
97 case MEDIA_CONTENT_GROUP_ALBUM:
98 return (char *) DB_FIELD_MEDIA_ALBUM;
99 case MEDIA_PVR_GROUP_DURATION:
100 return (char *) DB_FIELD_PVR_DURATION;
101 case MEDIA_PVR_GROUP_TIME_ZONE:
102 return (char *) DB_FIELD_PVR_TIME_ZONE;
103 case MEDIA_PVR_GROUP_PTC:
104 return (char *) DB_FIELD_PVR_PTC;
105 case MEDIA_PVR_GROUP_MAJOR:
106 return (char *) DB_FIELD_PVR_MAJOR;
107 case MEDIA_PVR_GROUP_MINOR:
108 return (char *) DB_FIELD_PVR_MINOR;
109 case MEDIA_PVR_GROUP_CHANNEL_TYPE:
110 return (char *) DB_FIELD_PVR_CHANNEL_TYPE;
111 case MEDIA_PVR_GROUP_CHANNEL_NAME:
112 return (char *) DB_FIELD_PVR_CHANNEL_NAME;
113 case MEDIA_PVR_GROUP_CHANNEL_NUM:
114 return (char *) DB_FIELD_PVR_CHANNEL_NUM;
115 case MEDIA_PVR_GROUP_PROGRAM_TITLE:
116 return (char *) DB_FIELD_PVR_PROGRAM_TITLE;
117 case MEDIA_PVR_GROUP_PROGRAM_NUM:
118 return (char *) DB_FIELD_PVR_PROGRAM_NUM;
119 case MEDIA_PVR_GROUP_PROGRAM_CRID:
120 return (char *) DB_FIELD_PVR_PROGRAM_CRID;
121 case MEDIA_PVR_GROUP_GUIDANCE:
122 return (char *) DB_FIELD_PVR_GUIDANCE;
123 case MEDIA_PVR_GROUP_SYNOPSIS:
124 return (char *) DB_FIELD_PVR_SYNOPSIS;
125 case MEDIA_PVR_GROUP_GENRE:
126 return (char *) DB_FIELD_PVR_GENRE;
127 case MEDIA_PVR_GROUP_LANGUAGE:
128 return (char *) DB_FIELD_PVR_LANGUAGE;
129 case MEDIA_PVR_GROUP_EMBARGO_TIME:
130 return (char *) DB_FIELD_PVR_EMBARGO_TIME;
131 case MEDIA_PVR_GROUP_EXPIRY_TIME:
132 return (char *) DB_FIELD_PVR_EXPIRY_TIME;
133 case MEDIA_PVR_GROUP_START_TIME:
134 return (char *) DB_FIELD_PVR_START_TIME;
135 case MEDIA_PVR_GROUP_PROGRAM_START_TIME:
136 return (char *) DB_FIELD_PVR_PROGRAM_START_TIME;
137 case MEDIA_PVR_GROUP_PROGRAM_END_TIME:
138 return (char *) DB_FIELD_PVR_PROGRAM_END_TIME;
139 case MEDIA_PVR_GROUP_PROGRAM_DATE:
140 return (char *) DB_FIELD_PVR_PROGRAM_DATE;
141 case MEDIA_PVR_GROUP_PARENTAL_RATING:
142 return (char *) DB_FIELD_PVR_PARENTAL_RATING;
143 case MEDIA_PVR_GROUP_TIMER_RECORD:
144 return (char *) DB_FIELD_PVR_TIMER_RECORD;
145 case MEDIA_PVR_GROUP_SERIES_RECORD:
146 return (char *) DB_FIELD_PVR_SERIES_RECORD;
147 case MEDIA_PVR_GROUP_HD:
148 return (char *) DB_FIELD_PVR_HD;
149 case MEDIA_PVR_GROUP_SUBTITLE:
150 return (char *) DB_FIELD_PVR_SUBTITLE;
151 case MEDIA_PVR_GROUP_TTX:
152 return (char *) DB_FIELD_PVR_TTX;
153 case MEDIA_PVR_GROUP_AD:
154 return (char *) DB_FIELD_PVR_AD;
155 case MEDIA_PVR_GROUP_HARDOF_HEARINGRADIO:
156 return (char *) DB_FIELD_PVR_HARDOF_HEARINGRADIO;
157 case MEDIA_PVR_GROUP_DATA_SERVICE:
158 return (char *) DB_FIELD_PVR_DATA_SERVICE;
159 case MEDIA_PVR_GROUP_CONTENT_LOCK:
160 return (char *) DB_FIELD_PVR_CONTENT_LOCK;
161 case MEDIA_PVR_GROUP_CONTENT_WATCH:
162 return (char *) DB_FIELD_PVR_CONTENT_WATCH;
163 case MEDIA_PVR_GROUP_HAS_AUDIO_ONLY:
164 return (char *) DB_FIELD_PVR_HAS_AUDIO_ONLY;
165 case MEDIA_PVR_GROUP_IS_LOCAL_RECORDED:
166 return (char *) DB_FIELD_PVR_IS_LOCAL_RECORD;
167 case MEDIA_PVR_GROUP_RESOLUTION:
168 return (char *) DB_FIELD_PVR_RESOLUTION;
169 case MEDIA_PVR_GROUP_ASPECTRATIO:
170 return (char *) DB_FIELD_PVR_ASPECTRATIO;
171 case MEDIA_PVR_GROUP_MODIFIED_MONTH:
172 return (char *) DB_FIELD_PVR_MODIFIED_DATE;
173 case MEDIA_PVR_GROUP_MODIFIED_DATE:
174 return (char *) DB_FIELD_PVR_MODIFIED_DATE;
175 case MEDIA_PVR_GROUP_SPORTS_TYPE:
176 return (char *) DB_FIELD_PVR_SPORTS_TYPE;
177 case MEDIA_PVR_GROUP_GUIDANCE_LENGTH:
178 return (char *) DB_FIELD_PVR_GUIDANCE_LENGTH;
179 case MEDIA_PVR_GROUP_TVMODE:
180 return (char *) DB_FIELD_PVR_TVMODE;
181 case MEDIA_PVR_GROUP_PLAY_COUNT:
182 return (char *) DB_FIELD_PVR_PLAY_COUNT;
183 case MEDIA_PVR_GROUP_PRIVATE_DATA:
184 return (char *) DB_FIELD_PVR_PRIVATE_DATA;
185 case MEDIA_UHD_GROUP_CONTENT_TITLE:
186 return (char *) DB_FIELD_UHD_CONTENT_TITLE;
187 case MEDIA_UHD_GROUP_RELEASE_DATE:
188 return (char *) DB_FIELD_UHD_RELEASE_DATE;
189 case MEDIA_UHD_GROUP_SUB_TYPE:
190 return (char *) DB_FIELD_UHD_SUB_TYPE;
191 case MEDIA_UHD_GROUP_FILE_NAME:
192 return (char *) DB_FIELD_UHD_FILE_NAME;
193 case MEDIA_UHD_GROUP_PLAYED_COUNT:
194 return (char *) DB_FIELD_UHD_PLAYED_COUNT;
203 static int __media_db_make_query(filter_h filter, attribute_h attr, char *select_query, int select_query_size, char **condition_query, char **option_query)
205 int ret = MEDIA_CONTENT_ERROR_NONE;
206 filter_s *_filter = NULL;
208 if (filter != NULL) {
209 _filter = (filter_s*)filter;
211 if (STRING_VALID(_filter->condition)) {
212 /*bracket should be added to condition. If application use "OR" condition, F/W restriction condition like "validity=1" is disregared
213 ex) select path from media where validity=1 and media_type=3 or media_type=1;*/
214 char bracket_added_condition[MAX_QUERY_SIZE] = {0, };
215 memset(bracket_added_condition, 0x00, sizeof(bracket_added_condition));
217 SAFE_STRLCAT(bracket_added_condition, QUERY_KEYWORD_OPEN_BRACKET, MAX_QUERY_SIZE);
218 SAFE_STRLCAT(bracket_added_condition, _filter->condition, MAX_QUERY_SIZE);
219 SAFE_STRLCAT(bracket_added_condition, QUERY_KEYWORD_BRACKET, MAX_QUERY_SIZE);
221 ret = _media_filter_attribute_generate(attr, bracket_added_condition, _filter->condition_collate_type, condition_query);
222 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
225 ret = _media_filter_attribute_option_generate(attr, filter, option_query);
226 if (ret != MEDIA_CONTENT_ERROR_NONE) {
227 SAFE_FREE(*condition_query);
231 if (STRING_VALID(*condition_query)) {
232 SAFE_STRLCAT(select_query, QUERY_KEYWORD_SPACE, select_query_size);
233 SAFE_STRLCAT(select_query, QUERY_KEYWORD_AND, select_query_size);
240 int _media_db_get_group_count(filter_h filter, group_list_e group_type, int *group_count)
242 int ret = MEDIA_CONTENT_ERROR_NONE;
243 sqlite3_stmt *stmt = NULL;
244 char select_query[MAX_QUERY_SIZE] = {0, };
245 char *condition_query = NULL;
246 char *option_query = NULL;
247 attribute_h attr = NULL;
248 filter_s *_filter = (filter_s*)filter;
250 attr = _content_get_attirbute_handle();
251 memset(select_query, 0x00, sizeof(select_query));
253 switch (group_type) {
254 case MEDIA_GROUP_NONE:
255 case MEDIA_GROUP_TAG_BY_MEDIA_ID:
256 case MEDIA_GROUP_BOOKMARK_BY_MEDIA_ID:
258 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
259 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
262 case MEDIA_GROUP_ALBUM:
263 attr = _content_get_alias_attirbute_handle();
265 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
266 snprintf(select_query, sizeof(select_query), SELECT_ALBUM_COUNT, _filter->storage_id);
268 snprintf(select_query, sizeof(select_query), SELECT_ALBUM_COUNT, DB_TABLE_MEDIA_VIEW);
271 case MEDIA_GROUP_FOLDER:
272 attr = _content_get_alias_attirbute_handle();
273 if (!SAFE_STRLCPY(select_query, SELECT_FOLDER_COUNT, sizeof(select_query))) {
274 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
275 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
278 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
279 snprintf(select_query, sizeof(select_query), SELECT_FOLDER_COUNT_BY_STORAGE_ID, _filter->storage_id, _filter->storage_id);
281 snprintf(select_query, sizeof(select_query), SELECT_FOLDER_COUNT, DB_TABLE_MEDIA_VIEW);
284 case MEDIA_GROUP_PLAYLIST:
285 if (!SAFE_STRLCPY(select_query, SELECT_PLAYLIST_COUNT, sizeof(select_query))) {
286 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
287 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
290 case MEDIA_GROUP_TAG:
291 if (!SAFE_STRLCPY(select_query, SELECT_TAG_COUNT, sizeof(select_query))) {
292 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
293 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
296 case MEDIA_GROUP_BOOKMARK:
297 attr = _content_get_alias_attirbute_handle();
299 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
300 snprintf(select_query, sizeof(select_query), SELECT_BOOKMARK_COUNT, _filter->storage_id);
302 snprintf(select_query, sizeof(select_query), SELECT_BOOKMARK_COUNT, DB_TABLE_MEDIA_VIEW);
305 case MEDIA_GROUP_STORAGE:
306 if (!SAFE_STRLCPY(select_query, SELECT_STORAGE_COUNT, sizeof(select_query))) {
307 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
308 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
311 #ifdef _USE_TV_PROFILE
312 case MEDIA_GROUP_PVR:
313 case MEDIA_GROUP_UHD:
317 media_content_error("Invalid group type [%d]", group_type);
318 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
323 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
324 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
326 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
327 SAFE_FREE(condition_query);
328 SAFE_FREE(option_query);
329 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
331 while (sqlite3_step(stmt) == SQLITE_ROW)
332 *group_count = (int)sqlite3_column_int(stmt, 0);
334 SQLITE3_FINALIZE(stmt);
339 int _media_db_get_media_group_count(media_group_e group, filter_h filter, int *group_count)
341 int ret = MEDIA_CONTENT_ERROR_NONE;
342 sqlite3_stmt *stmt = NULL;
343 char select_query[MAX_QUERY_SIZE] = {0, };
344 char *condition_query = NULL;
345 char *option_query = NULL;
346 attribute_h attr = NULL;
347 filter_s *_filter = (filter_s*)filter;
349 attr = _content_get_attirbute_handle();
350 memset(select_query, 0x00, sizeof(select_query));
351 #ifdef _USE_TV_PROFILE
352 if (group < MEDIA_PVR_GROUP_DURATION) { /*media content*/
353 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
354 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_GROUP_COUNT, __media_db_get_group_name(group), _filter->storage_id);
356 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_GROUP_COUNT, __media_db_get_group_name(group), DB_TABLE_MEDIA_VIEW);
357 } else if (group < MEDIA_UHD_GROUP_CONTENT_TITLE) { /*pvr content*/
358 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
359 snprintf(select_query, sizeof(select_query), SELECT_PVR_GROUP_COUNT_BY_STORAGE_ID, __media_db_get_group_name(group), _filter->storage_id);
361 snprintf(select_query, sizeof(select_query), SELECT_PVR_GROUP_COUNT, __media_db_get_group_name(group));
362 } else { /*uhd content*/
363 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
364 snprintf(select_query, sizeof(select_query), SELECT_UHD_GROUP_COUNT_BY_STORAGE_ID, __media_db_get_group_name(group), _filter->storage_id);
366 snprintf(select_query, sizeof(select_query), SELECT_UHD_GROUP_COUNT, __media_db_get_group_name(group));
369 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
370 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_GROUP_COUNT, __media_db_get_group_name(group), _filter->storage_id);
372 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_GROUP_COUNT, __media_db_get_group_name(group), DB_TABLE_MEDIA_VIEW);
374 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
375 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
377 SAFE_STRLCAT(select_query, QUERY_KEYWORD_SPACE, sizeof(select_query));
378 if (STRING_VALID(condition_query))
379 SAFE_STRLCAT(select_query, condition_query, sizeof(select_query));
380 if (STRING_VALID(option_query))
381 SAFE_STRLCAT(select_query, option_query, sizeof(select_query));
382 SAFE_STRLCAT(select_query, QUERY_KEYWORD_BRACKET, sizeof(select_query));
384 SAFE_FREE(condition_query);
385 SAFE_FREE(option_query);
387 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
388 SAFE_FREE(condition_query);
389 SAFE_FREE(option_query);
390 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
392 while (sqlite3_step(stmt) == SQLITE_ROW)
393 *group_count = (int)sqlite3_column_int(stmt, 0);
395 SQLITE3_FINALIZE(stmt);
400 int _media_db_get_media_group(media_group_e group, filter_h filter, media_group_cb callback, void *user_data)
402 int ret = MEDIA_CONTENT_ERROR_NONE;
403 char select_query[MAX_QUERY_SIZE] = {0, };
404 char *condition_query = NULL;
405 char *option_query = NULL;
407 sqlite3_stmt *stmt = NULL;
408 attribute_h attr = NULL;
409 filter_s *_filter = (filter_s*)filter;
411 attr = _content_get_attirbute_handle();
412 memset(select_query, 0x00, sizeof(select_query));
413 #ifdef _USE_TV_PROFILE
414 if (group < MEDIA_PVR_GROUP_DURATION) { /*media content */
415 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
416 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_GROUP_LIST, __media_db_get_group_name(group), _filter->storage_id);
418 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_GROUP_LIST, __media_db_get_group_name(group), DB_TABLE_MEDIA_VIEW);
419 } else if (group < MEDIA_UHD_GROUP_CONTENT_TITLE) { /*pvr content */
420 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
421 snprintf(select_query, sizeof(select_query), SELECT_PVR_GROUP_LIST_BY_STORAGE_ID, __media_db_get_group_name(group), _filter->storage_id);
423 snprintf(select_query, sizeof(select_query), SELECT_PVR_GROUP_LIST, __media_db_get_group_name(group));
424 } else { /* uhd content */
425 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
426 snprintf(select_query, sizeof(select_query), SELECT_UHD_GROUP_LIST_BY_STORAGE_ID, __media_db_get_group_name(group), _filter->storage_id);
428 snprintf(select_query, sizeof(select_query), SELECT_UHD_GROUP_LIST, __media_db_get_group_name(group));
431 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
432 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_GROUP_LIST, __media_db_get_group_name(group), _filter->storage_id);
434 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_GROUP_LIST, __media_db_get_group_name(group), DB_TABLE_MEDIA_VIEW);
436 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
437 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
439 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
440 SAFE_FREE(condition_query);
441 SAFE_FREE(option_query);
442 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
444 while (sqlite3_step(stmt) == SQLITE_ROW) {
445 name = g_strdup((const char *)sqlite3_column_text(stmt, 0));
447 if (callback(name, user_data) == false) {
455 SQLITE3_FINALIZE(stmt);
459 #ifdef _USE_TV_PROFILE
460 int _media_db_get_media_group_and_count(media_group_e group, filter_h filter, media_group_and_count_cb callback, void *user_data)
462 int ret = MEDIA_CONTENT_ERROR_NONE;
463 char select_query[DEFAULT_QUERY_SIZE];
464 char group_query[DEFAULT_QUERY_SIZE];
465 char *condition_query = NULL;
466 char *option_query = NULL;
468 sqlite3_stmt *stmt = NULL;
469 attribute_h attr = NULL;
470 filter_s *_filter = (filter_s*)filter;
472 attr = _content_get_attirbute_handle();
473 memset(select_query, 0x00, sizeof(select_query));
474 memset(group_query, 0x00, sizeof(group_query));
476 char* group_name = __media_db_get_group_name(group);
477 if (!STRING_VALID(group_name)) {
478 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
479 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
482 if (group < MEDIA_PVR_GROUP_DURATION) { /*media content*/
483 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
484 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_GROUP_AND_COUNT, group_name, _filter->storage_id);
486 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_GROUP_AND_COUNT, group_name, DB_TABLE_MEDIA_VIEW);
487 } else if (group < MEDIA_UHD_GROUP_CONTENT_TITLE) {/*pvr content*/
488 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
489 snprintf(select_query, sizeof(select_query), SELECT_PVR_GROUP_AND_COUNT_BY_STORAGE_ID, group_name, _filter->storage_id);
491 snprintf(select_query, sizeof(select_query), SELECT_PVR_GROUP_AND_COUNT, group_name);
492 } else {/*uhd content*/
493 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
494 snprintf(select_query, sizeof(select_query), SELECT_UHD_GROUP_AND_COUNT_BY_STORAGE_ID, group_name, _filter->storage_id);
496 snprintf(select_query, sizeof(select_query), SELECT_UHD_GROUP_AND_COUNT, group_name);
499 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
500 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
502 if (STRING_VALID(option_query))
503 snprintf(group_query, sizeof(group_query), "GROUP BY %s %s", group_name, option_query);
505 snprintf(group_query, sizeof(group_query), "GROUP BY %s", group_name);
507 ret = _content_query_prepare(&stmt, select_query, condition_query, group_query);
508 SAFE_FREE(condition_query);
509 SAFE_FREE(option_query);
510 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
512 while (sqlite3_step(stmt) == SQLITE_ROW) {
513 if (STRING_VALID((const char *)sqlite3_column_text(stmt, 0)))
514 name = strdup((const char *)sqlite3_column_text(stmt, 0));
516 if (callback(name, sqlite3_column_int(stmt, 1), user_data) == false) {
524 SQLITE3_FINALIZE(stmt);
529 int _media_db_get_album(filter_h filter, media_album_cb callback, void *user_data)
531 int ret = MEDIA_CONTENT_ERROR_NONE;
532 char select_query[MAX_QUERY_SIZE] = {0, };
533 char *condition_query = NULL;
534 char *option_query = NULL;
535 sqlite3_stmt *stmt = NULL;
536 attribute_h attr = NULL;
537 filter_s *_filter = (filter_s*)filter;
539 attr = _content_get_alias_attirbute_handle();
540 memset(select_query, 0x00, sizeof(select_query));
542 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
543 snprintf(select_query, sizeof(select_query), SELECT_ALBUM_LIST, _filter->storage_id);
545 snprintf(select_query, sizeof(select_query), SELECT_ALBUM_LIST, DB_TABLE_MEDIA_VIEW);
547 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
548 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
550 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
551 SAFE_FREE(condition_query);
552 SAFE_FREE(option_query);
553 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
555 while (sqlite3_step(stmt) == SQLITE_ROW) {
556 media_album_s *album = (media_album_s*)calloc(1, sizeof(media_album_s));
559 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
560 SQLITE3_FINALIZE(stmt);
561 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
564 album->album_id = (int)sqlite3_column_int(stmt, 0);
565 album->name = g_strdup((const char *)sqlite3_column_text(stmt, 1));
566 album->artist = g_strdup((const char *)sqlite3_column_text(stmt, 2));
567 album->album_art_path = g_strdup((const char *)sqlite3_column_text(stmt, 3));
569 if (callback((media_album_h)album, user_data) == false) {
570 media_album_destroy((media_album_h)album);
574 media_album_destroy((media_album_h)album);
577 SQLITE3_FINALIZE(stmt);
582 int _media_db_get_folder(filter_h filter, media_folder_cb callback, void *user_data)
584 int ret = MEDIA_CONTENT_ERROR_NONE;
585 char select_query[MAX_QUERY_SIZE] = {0, };
586 char *condition_query = NULL;
587 char *option_query = NULL;
588 sqlite3_stmt *stmt = NULL;
589 attribute_h attr = NULL;
590 filter_s *_filter = (filter_s*)filter;
591 #ifndef _USE_TV_PROFILE
592 char *tmp_path = NULL;
593 char repl_path[MAX_QUERY_SIZE] = {0, };
596 attr = _content_get_alias_attirbute_handle();
597 memset(select_query, 0x00, sizeof(select_query));
599 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
600 snprintf(select_query, sizeof(select_query), SELECT_FOLDER_LIST_BY_STORAGE_ID, _filter->storage_id, _filter->storage_id);
602 snprintf(select_query, sizeof(select_query), SELECT_FOLDER_LIST, DB_TABLE_MEDIA_VIEW);
604 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
605 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
607 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
609 SAFE_FREE(condition_query);
610 SAFE_FREE(option_query);
611 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
613 while (sqlite3_step(stmt) == SQLITE_ROW) {
614 media_folder_s *_folder = (media_folder_s*)calloc(1, sizeof(media_folder_s));
616 if (_folder == NULL) {
617 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
618 SQLITE3_FINALIZE(stmt);
619 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
622 _folder->folder_id = g_strdup((const char *)sqlite3_column_text(stmt, 0));
623 #ifdef _USE_TV_PROFILE
624 _folder->path = g_strdup((const char *)sqlite3_column_text(stmt, 1));
626 tmp_path = g_strdup((const char *)sqlite3_column_text(stmt, 1));
627 _media_content_rollback_path(tmp_path, repl_path);
628 _folder->path = g_strdup(repl_path);
631 _folder->name = g_strdup((const char *)sqlite3_column_text(stmt, 2));
632 _folder->storage_type = (int)sqlite3_column_int(stmt, 3);
633 _folder->modified_time = (int)sqlite3_column_int(stmt, 4);
634 _folder->storage_uuid = g_strdup((const char *)sqlite3_column_text(stmt, 5));
635 _folder->folder_order = (int)sqlite3_column_int(stmt, 6);
636 _folder->parent_folder_id = g_strdup((const char *)sqlite3_column_text(stmt, 7));
638 if (callback((media_folder_h)_folder, user_data) == false) {
639 media_folder_destroy((media_folder_h) _folder);
643 media_folder_destroy((media_folder_h) _folder);
646 SQLITE3_FINALIZE(stmt);
651 int _media_db_get_playlist(filter_h filter, media_playlist_cb callback, void *user_data)
653 int ret = MEDIA_CONTENT_ERROR_NONE;
654 char select_query[MAX_QUERY_SIZE] = {0, };
655 char *condition_query = NULL;
656 char *option_query = NULL;
657 sqlite3_stmt *stmt = NULL;
658 attribute_h attr = NULL;
659 #ifndef _USE_TV_PROFILE
660 char *tmp_path = NULL;
661 char repl_path[MAX_QUERY_SIZE] = {0, };
664 attr = _content_get_attirbute_handle();
665 memset(select_query, 0x00, sizeof(select_query));
667 if (!SAFE_STRLCPY(select_query, SELECT_PLAYLIST_LIST, sizeof(select_query))) {
668 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
669 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
672 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
673 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
675 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
676 SAFE_FREE(condition_query);
677 SAFE_FREE(option_query);
678 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
680 while (sqlite3_step(stmt) == SQLITE_ROW) {
681 media_playlist_s *_playlist = (media_playlist_s*)calloc(1, sizeof(media_playlist_s));
683 if (_playlist == NULL) {
684 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
685 SQLITE3_FINALIZE(stmt);
686 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
689 _playlist->playlist_id = (int)sqlite3_column_int(stmt, 0);
690 _playlist->name = g_strdup((const char *)sqlite3_column_text(stmt, 1));
691 #ifdef _USE_TV_PROFILE
692 _playlist->thumbnail_path = g_strdup((const char *)sqlite3_column_text(stmt, 2));
694 memset(repl_path, 0x00, sizeof(repl_path));
695 tmp_path = g_strdup((const char *)sqlite3_column_text(stmt, 2));
696 if (STRING_VALID(tmp_path)) {
697 _media_content_rollback_path(tmp_path, repl_path);
698 _playlist->thumbnail_path = g_strdup(repl_path);
701 _playlist->thumbnail_path = NULL;
705 if (callback((media_playlist_h)_playlist, user_data) == false) {
706 media_playlist_destroy((media_playlist_h)_playlist);
709 media_playlist_destroy((media_playlist_h)_playlist);
712 SQLITE3_FINALIZE(stmt);
717 int _media_db_get_playlist_item(int playlist_id, filter_h filter, playlist_member_cb callback, void *user_data)
719 int ret = MEDIA_CONTENT_ERROR_NONE;
720 char select_query[MAX_QUERY_SIZE] = {0, };
721 char *condition_query = NULL;
722 char *option_query = NULL;
723 sqlite3_stmt *stmt = NULL;
724 attribute_h attr = NULL;
726 attr = _content_get_attirbute_handle();
727 memset(select_query, 0x00, sizeof(select_query));
729 /*snprintf(select_query, sizeof(select_query), SELECT_PLAYLIST_ITEM_ID_FROM_PLAYLIST_VIEW, playlist_id);*/
730 snprintf(select_query, sizeof(select_query), SELECT_PLAYLIST_ITEM_ALL_FROM_PLAYLIST_VIEW, playlist_id);
732 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
733 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
735 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
736 SAFE_FREE(condition_query);
737 SAFE_FREE(option_query);
738 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
740 while (sqlite3_step(stmt) == SQLITE_ROW) {
741 int playlist_member_id = 0;
742 playlist_member_id = (int)sqlite3_column_int(stmt, MEDIA_INFO_ITEM_MAX); /*MEDIA_INFO_ITEM_MAX is pm_id*/
744 media_info_s *_media = (media_info_s*)calloc(1, sizeof(media_info_s));
746 if (_media == NULL) {
747 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
748 SQLITE3_FINALIZE(stmt);
749 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
752 _media_info_item_get_detail(stmt, (media_info_h)_media);
754 if (callback(playlist_member_id, (media_info_h)_media, user_data) == false) {
755 media_info_destroy((media_info_h)_media);
758 media_info_destroy((media_info_h)_media);
762 SQLITE3_FINALIZE(stmt);
767 int _media_db_get_tag(const char *media_id, filter_h filter, media_tag_cb callback, void *user_data)
769 int ret = MEDIA_CONTENT_ERROR_NONE;
770 char select_query[MAX_QUERY_SIZE] = {0, };
771 char *condition_query = NULL;
772 char *option_query = NULL;
773 sqlite3_stmt *stmt = NULL;
774 attribute_h attr = NULL;
776 attr = _content_get_attirbute_handle();
777 memset(select_query, 0x00, sizeof(select_query));
779 if (!STRING_VALID(media_id)) {
780 if (!SAFE_STRLCPY(select_query, SELECT_TAG_LIST, sizeof(select_query))) {
781 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
782 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
785 snprintf(select_query, sizeof(select_query), SELECT_TAG_LIST_BY_MEDIA_ID, media_id);
787 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
788 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
790 SAFE_STRLCAT(select_query, QUERY_KEYWORD_SPACE, sizeof(select_query));
792 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
793 SAFE_FREE(condition_query);
794 SAFE_FREE(option_query);
795 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
797 while (sqlite3_step(stmt) == SQLITE_ROW) {
798 media_tag_s *_tag = (media_tag_s*)calloc(1, sizeof(media_tag_s));
801 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
802 SQLITE3_FINALIZE(stmt);
803 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
806 _tag->tag_id = (int)sqlite3_column_int(stmt, 0);
807 _tag->name = g_strdup((const char *)sqlite3_column_text(stmt, 1));
809 if (callback((media_tag_h)_tag, user_data) == false) {
810 media_tag_destroy((media_tag_h)_tag);
813 media_tag_destroy((media_tag_h)_tag);
816 SQLITE3_FINALIZE(stmt);
821 int _media_db_get_bookmark(const char *media_id, filter_h filter, media_bookmark_cb callback, void *user_data)
823 int ret = MEDIA_CONTENT_ERROR_NONE;
824 char select_query[MAX_QUERY_SIZE] = {0, };
825 char *condition_query = NULL;
826 char *option_query = NULL;
827 sqlite3_stmt *stmt = NULL;
828 attribute_h attr = NULL;
829 filter_s *_filter = (filter_s*)filter;
831 attr = _content_get_attirbute_handle();
833 memset(select_query, 0x00, sizeof(select_query));
835 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
836 snprintf(select_query, sizeof(select_query), SELECT_BOOKMARK_LIST_BY_MEDIA_ID, _filter->storage_id, media_id);
838 snprintf(select_query, sizeof(select_query), SELECT_BOOKMARK_LIST_BY_MEDIA_ID, DB_TABLE_MEDIA_VIEW, media_id);
840 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
841 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
843 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
844 SAFE_FREE(condition_query);
845 SAFE_FREE(option_query);
846 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
848 while (sqlite3_step(stmt) == SQLITE_ROW) {
849 media_bookmark_s *bookmark = (media_bookmark_s*)calloc(1, sizeof(media_bookmark_s));
851 if (bookmark == NULL) {
852 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
853 SQLITE3_FINALIZE(stmt);
854 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
857 bookmark->bookmark_id = (int)sqlite3_column_int(stmt, 0);
858 bookmark->media_id = g_strdup((const char *)sqlite3_column_text(stmt, 1));
859 bookmark->marked_time = (int)sqlite3_column_int(stmt, 2);
860 bookmark->thumbnail_path = g_strdup((const char *)sqlite3_column_text(stmt, 3));
862 if (callback((media_bookmark_h)bookmark, user_data) == false) {
863 media_bookmark_destroy((media_bookmark_h)bookmark);
867 media_bookmark_destroy((media_bookmark_h)bookmark);
870 SQLITE3_FINALIZE(stmt);
876 int _media_db_get_face(const char *media_id, filter_h filter, media_face_cb callback, void *user_data)
878 int ret = MEDIA_CONTENT_ERROR_NONE;
879 char select_query[MAX_QUERY_SIZE] = {0, };
880 char *condition_query = NULL;
881 char *option_query = NULL;
882 sqlite3_stmt *stmt = NULL;
883 attribute_h attr = NULL;
884 filter_s *_filter = (filter_s*)filter;
886 attr = _content_get_attirbute_handle();
888 memset(select_query, 0x00, sizeof(select_query));
890 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
891 snprintf(select_query, sizeof(select_query), SELECT_FACE_LIST_BY_MEDIA_ID, _filter->storage_id, media_id);
893 snprintf(select_query, sizeof(select_query), SELECT_FACE_LIST_BY_MEDIA_ID, DB_TABLE_MEDIA_VIEW, media_id);
895 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
896 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
898 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
899 SAFE_FREE(condition_query);
900 SAFE_FREE(option_query);
901 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
903 while (sqlite3_step(stmt) == SQLITE_ROW) {
904 media_face_s *face = (media_face_s*)calloc(1, sizeof(media_face_s));
907 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
908 SQLITE3_FINALIZE(stmt);
909 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
912 face->face_id = g_strdup((const char *)sqlite3_column_text(stmt, 0));
913 face->media_id = g_strdup((const char *)sqlite3_column_text(stmt, 1));
914 face->face_rect_x = (int)sqlite3_column_int(stmt, 2);
915 face->face_rect_y = (int)sqlite3_column_int(stmt, 3);
916 face->face_rect_w = (int)sqlite3_column_int(stmt, 4);
917 face->face_rect_h = (int)sqlite3_column_int(stmt, 5);
918 face->orientation = (int)sqlite3_column_int(stmt, 6);
919 face->face_tag = g_strdup((const char *)sqlite3_column_text(stmt, 7));
921 if (callback((media_face_h)face, user_data) == false) {
922 media_face_destroy((media_face_h)face);
926 media_face_destroy((media_face_h)face);
929 SQLITE3_FINALIZE(stmt);
935 int _media_db_get_group_item_count_by_id(int group_id, filter_h filter, group_list_e group_type, int *item_count)
937 int ret = MEDIA_CONTENT_ERROR_NONE;
938 sqlite3_stmt *stmt = NULL;
939 char select_query[MAX_QUERY_SIZE] = {0, };
940 char *condition_query = NULL;
941 char *option_query = NULL;
942 attribute_h attr = NULL;
943 filter_s *_filter = (filter_s*)filter;
945 attr = _content_get_attirbute_handle();
946 memset(select_query, 0x00, sizeof(select_query));
948 if (group_type == MEDIA_GROUP_ALBUM) {
949 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
950 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_ALBUM, _filter->storage_id, group_id);
952 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_ALBUM, DB_TABLE_MEDIA_VIEW, group_id);
953 } else if (group_type == MEDIA_GROUP_PLAYLIST) {
954 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_PLAYLIST, group_id);
955 } else if (group_type == MEDIA_GROUP_TAG) {
956 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_TAG, group_id);
958 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
959 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
962 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
963 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
965 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
966 SAFE_FREE(condition_query);
967 SAFE_FREE(option_query);
968 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
970 while (sqlite3_step(stmt) == SQLITE_ROW)
971 *item_count = (int)sqlite3_column_int(stmt, 0);
973 SQLITE3_FINALIZE(stmt);
978 int _media_db_get_group_item_count(const char *group_name, filter_h filter, group_list_e group_type, int *item_count)
980 int ret = MEDIA_CONTENT_ERROR_NONE;
981 sqlite3_stmt *stmt = NULL;
982 char select_query[MAX_QUERY_SIZE] = {0, };
983 char *tmp_query = NULL;
984 char *condition_query = NULL;
985 char *option_query = NULL;
986 bool is_simple = FALSE;
987 attribute_h attr = NULL;
988 filter_s *_filter = (filter_s*)filter;
990 attr = _content_get_attirbute_handle();
991 memset(select_query, 0x00, sizeof(select_query));
993 if (group_type == MEDIA_GROUP_NONE) {
994 /* There are 2 ways to get count for media table for performance
995 If user wants to set offset and count, use SQL SELECT_MEDIA_COUNT_FROM_MEDIA.
996 If user wants to get count without setting count, SELECT_MEDIA_COUNT_FROM_MEDIA_SIMPLE */
997 if (_filter && ((_filter->offset < 0) && (_filter->count < 0))) {
998 if (STRING_VALID(_filter->storage_id))
999 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_MEDIA_SIMPLE, _filter->storage_id);
1001 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_MEDIA_SIMPLE, DB_TABLE_MEDIA_VIEW);
1004 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_MEDIA, DB_TABLE_MEDIA_VIEW);
1006 } else if (group_type == MEDIA_GROUP_FOLDER) {
1007 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1008 tmp_query = sqlite3_mprintf(SELECT_MEDIA_COUNT_FROM_FOLDER, _filter->storage_id, group_name);
1010 tmp_query = sqlite3_mprintf(SELECT_MEDIA_COUNT_FROM_FOLDER, DB_TABLE_MEDIA_VIEW, group_name);
1012 SAFE_STRLCAT(select_query, tmp_query, sizeof(select_query));
1013 } else if (group_type == MEDIA_GROUP_TAG_BY_MEDIA_ID) {
1014 snprintf(select_query, sizeof(select_query), SELECT_TAG_COUNT_BY_MEDIA_ID, group_name);
1015 } else if (group_type == MEDIA_GROUP_BOOKMARK_BY_MEDIA_ID) {
1016 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1017 tmp_query = sqlite3_mprintf(SELECT_BOOKMARK_COUNT_BY_MEDIA_ID, _filter->storage_id, group_name);
1019 tmp_query = sqlite3_mprintf(SELECT_BOOKMARK_COUNT_BY_MEDIA_ID, DB_TABLE_MEDIA_VIEW, group_name);
1021 SAFE_STRLCAT(select_query, tmp_query, sizeof(select_query));
1022 } else if (group_type == MEDIA_GROUP_STORAGE) {
1023 tmp_query = sqlite3_mprintf(SELECT_MEDIA_COUNT_FROM_STORAGE, group_name, group_name);
1025 SAFE_STRLCAT(select_query, tmp_query, sizeof(select_query));
1026 } else if (group_type == MEDIA_GROUP_FACE_BY_MEDIA_ID) {
1027 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1028 tmp_query = sqlite3_mprintf(SELECT_FACE_COUNT_BY_MEDIA_ID, _filter->storage_id, group_name);
1030 tmp_query = sqlite3_mprintf(SELECT_FACE_COUNT_BY_MEDIA_ID, DB_TABLE_MEDIA_VIEW, group_name);
1032 SAFE_STRLCAT(select_query, tmp_query, sizeof(select_query));
1033 #ifdef _USE_TV_PROFILE
1034 } else if (group_type == MEDIA_GROUP_PVR) {
1035 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1036 snprintf(select_query, sizeof(select_query), SELECT_PVR_COUNT_BY_STORAGE_ID, _filter->storage_id);
1038 SAFE_STRLCAT(select_query, SELECT_PVR_COUNT, sizeof(select_query));
1039 } else if (group_type == MEDIA_GROUP_UHD) {
1040 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1041 snprintf(select_query, sizeof(select_query), SELECT_UHD_COUNT_BY_STORAGE_ID, _filter->storage_id);
1043 SAFE_STRLCAT(select_query, SELECT_UHD_COUNT, sizeof(select_query));
1046 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1047 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1050 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
1051 if (ret != MEDIA_CONTENT_ERROR_NONE) {
1052 if (tmp_query != NULL)
1053 SQLITE3_SAFE_FREE(tmp_query);
1057 if (group_type == MEDIA_GROUP_NONE) {
1058 SAFE_STRLCAT(select_query, QUERY_KEYWORD_SPACE, sizeof(select_query));
1059 if (STRING_VALID(condition_query))
1060 SAFE_STRLCAT(select_query, condition_query, sizeof(select_query));
1061 if (STRING_VALID(option_query))
1062 SAFE_STRLCAT(select_query, option_query, sizeof(select_query));
1065 SAFE_STRLCAT(select_query, QUERY_KEYWORD_BRACKET, sizeof(select_query));
1067 SAFE_FREE(condition_query);
1068 SAFE_FREE(option_query);
1071 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
1072 if (tmp_query != NULL)
1073 SQLITE3_SAFE_FREE(tmp_query);
1074 SAFE_FREE(condition_query);
1075 SAFE_FREE(option_query);
1076 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1078 while (sqlite3_step(stmt) == SQLITE_ROW)
1079 *item_count = (int)sqlite3_column_int(stmt, 0);
1081 SQLITE3_FINALIZE(stmt);
1086 int _media_db_get_group_item_by_id(int group_id, filter_h filter, media_info_cb callback, void *user_data, group_list_e group_type)
1088 int ret = MEDIA_CONTENT_ERROR_NONE;
1089 char select_query[MAX_QUERY_SIZE] = {0, };
1090 char *condition_query = NULL;
1091 char *option_query = NULL;
1092 sqlite3_stmt *stmt = NULL;
1093 attribute_h attr = NULL;
1094 filter_s *_filter = (filter_s*)filter;
1096 attr = _content_get_attirbute_handle();
1097 memset(select_query, 0x00, sizeof(select_query));
1099 if (group_type == MEDIA_GROUP_ALBUM) {
1100 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1101 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_ALBUM, _filter->storage_id, group_id);
1103 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_ALBUM, DB_TABLE_MEDIA_VIEW, group_id);
1104 } else if (group_type == MEDIA_GROUP_PLAYLIST) {
1105 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1106 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_PLAYLIST, _filter->storage_id, group_id);
1108 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_PLAYLIST, DB_TABLE_MEDIA_VIEW, group_id);
1109 } else if (group_type == MEDIA_GROUP_TAG) {
1110 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1111 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_TAG, _filter->storage_id, group_id);
1113 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_TAG, DB_TABLE_MEDIA_VIEW, group_id);
1115 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1116 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1119 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
1120 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1122 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
1123 SAFE_FREE(condition_query);
1124 SAFE_FREE(option_query);
1125 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1127 while (sqlite3_step(stmt) == SQLITE_ROW) {
1128 media_info_s *item = (media_info_s*)calloc(1, sizeof(media_info_s));
1130 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1131 SQLITE3_FINALIZE(stmt);
1132 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1135 _media_info_item_get_detail(stmt, (media_info_h)item);
1137 if (callback((media_info_h)item, user_data) == false) {
1138 media_info_destroy((media_info_h)item);
1142 media_info_destroy((media_info_h)item);
1145 SQLITE3_FINALIZE(stmt);
1150 int _media_db_get_group_item(const char *group_name, filter_h filter, media_info_cb callback, void *user_data, group_list_e group_type)
1152 int ret = MEDIA_CONTENT_ERROR_NONE;
1153 char select_query[MAX_QUERY_SIZE] = {0, };
1154 char *condition_query = NULL;
1155 char *option_query = NULL;
1156 sqlite3_stmt *stmt = NULL;
1157 attribute_h attr = NULL;
1158 filter_s *_filter = (filter_s*)filter;
1160 attr = _content_get_attirbute_handle();
1161 memset(select_query, 0x00, sizeof(select_query));
1163 if (group_type == MEDIA_GROUP_NONE) {
1164 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1165 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_ITEM, _filter->storage_id);
1167 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_ITEM, DB_TABLE_MEDIA_VIEW);
1168 } else if (group_type == MEDIA_GROUP_FOLDER) {
1169 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1170 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_FOLDER, _filter->storage_id, group_name);
1172 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_FOLDER, DB_TABLE_MEDIA_VIEW, group_name);
1173 } else if (group_type == MEDIA_GROUP_STORAGE) {
1174 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_STORAGE, group_name, group_name);
1176 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1177 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1180 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
1181 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1183 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
1184 SAFE_FREE(condition_query);
1185 SAFE_FREE(option_query);
1186 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1188 while (sqlite3_step(stmt) == SQLITE_ROW) {
1189 media_info_s *item = (media_info_s*)calloc(1, sizeof(media_info_s));
1191 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1192 SQLITE3_FINALIZE(stmt);
1193 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1196 _media_info_item_get_detail(stmt, (media_info_h)item);
1198 if (callback((media_info_h)item, user_data) == false) {
1199 media_info_destroy((media_info_h)item);
1203 media_info_destroy((media_info_h)item);
1206 SQLITE3_FINALIZE(stmt);
1211 #ifdef _USE_SENIOR_MODE
1212 int _media_db_get_group_item_by_union_select(const char *group_name, filter_h filter1, filter_h filter2, media_info_cb callback, void *user_data)
1214 int ret = MEDIA_CONTENT_ERROR_NONE;
1215 char select_query1[MAX_QUERY_SIZE] = {0, };
1216 char *condition_query1 = NULL;
1217 char *option_query1 = NULL;
1218 char select_query2[MAX_QUERY_SIZE] = {0, };
1219 char *condition_query2 = NULL;
1220 char *option_query2 = NULL;
1221 sqlite3_stmt *stmt = NULL;
1222 attribute_h attr = NULL;
1223 filter_s *_filter1 = (filter_s*)filter1;
1224 filter_s *_filter2 = (filter_s*)filter2;
1226 attr = _content_get_attirbute_handle();
1228 memset(select_query1, 0x00, sizeof(select_query1));
1230 if ((_filter1 != NULL) && STRING_VALID(_filter1->storage_id))
1231 snprintf(select_query1, sizeof(select_query1), SELECT_MEDIA_FROM_FOLDER, _filter1->storage_id, group_name);
1233 snprintf(select_query1, sizeof(select_query1), SELECT_MEDIA_FROM_FOLDER, DB_TABLE_MEDIA_VIEW, group_name);
1235 ret = __media_db_make_query(filter1, attr, select_query1, sizeof(select_query1), &condition_query1, &option_query1);
1236 if (ret != MEDIA_CONTENT_ERROR_NONE) {
1237 SAFE_FREE(condition_query1);
1238 SAFE_FREE(option_query1);
1239 media_content_error("create select_query1 failed");
1243 memset(select_query2, 0x00, sizeof(select_query2));
1245 if ((_filter2 != NULL) && STRING_VALID(_filter2->storage_id))
1246 snprintf(select_query2, sizeof(select_query2), SELECT_MEDIA_FROM_FOLDER, _filter2->storage_id, group_name);
1248 snprintf(select_query2, sizeof(select_query2), SELECT_MEDIA_FROM_FOLDER, DB_TABLE_MEDIA_VIEW, group_name);
1250 ret = __media_db_make_query(filter2, attr, select_query2, sizeof(select_query2), &condition_query2, &option_query2);
1251 if (ret != MEDIA_CONTENT_ERROR_NONE) {
1252 SAFE_FREE(condition_query1);
1253 SAFE_FREE(option_query1);
1254 SAFE_FREE(condition_query2);
1255 SAFE_FREE(option_query2);
1256 media_content_error("create select_query2 failed");
1260 ret = _content_query_prepare_by_union_select(&stmt, select_query1, condition_query1, option_query1, select_query2, condition_query2, option_query2);
1261 SAFE_FREE(condition_query1);
1262 SAFE_FREE(option_query1);
1263 SAFE_FREE(condition_query2);
1264 SAFE_FREE(option_query2);
1265 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1267 while (sqlite3_step(stmt) == SQLITE_ROW) {
1268 media_info_s *item = (media_info_s*)calloc(1, sizeof(media_info_s));
1270 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1271 SQLITE3_FINALIZE(stmt);
1272 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1275 _media_info_item_get_detail(stmt, (media_info_h)item);
1277 if (callback((media_info_h)item, user_data) == false) {
1278 media_info_destroy((media_info_h)item);
1282 media_info_destroy((media_info_h)item);
1285 SQLITE3_FINALIZE(stmt);
1291 int _media_db_get_media_group_item_count(const char *group_name, filter_h filter, media_group_e group, int *item_count)
1293 int ret = MEDIA_CONTENT_ERROR_NONE;
1294 sqlite3_stmt *stmt = NULL;
1295 char select_query[MAX_QUERY_SIZE] = {0, };
1296 char *tmp_query = NULL;
1297 char *condition_query = NULL;
1298 char *option_query = NULL;
1299 attribute_h attr = NULL;
1300 filter_s *_filter = (filter_s*)filter;
1302 attr = _content_get_attirbute_handle();
1303 memset(select_query, 0x00, sizeof(select_query));
1304 #ifdef _USE_TV_PROFILE
1305 if (group < MEDIA_PVR_GROUP_DURATION) { /*media content */
1306 if (group_name != NULL) {
1307 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1308 tmp_query = sqlite3_mprintf(SELECT_MEDIA_COUNT_FROM_GROUP, _filter->storage_id, __media_db_get_group_name(group), group_name);
1310 tmp_query = sqlite3_mprintf(SELECT_MEDIA_COUNT_FROM_GROUP, DB_TABLE_MEDIA_VIEW, __media_db_get_group_name(group), group_name);
1312 SAFE_STRLCAT(select_query, tmp_query, sizeof(select_query));
1314 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1315 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_GROUP_NULL, _filter->storage_id, __media_db_get_group_name(group));
1317 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_GROUP_NULL, DB_TABLE_MEDIA_VIEW, __media_db_get_group_name(group));
1319 } else if (group < MEDIA_UHD_GROUP_CONTENT_TITLE) {/*pvr content*/
1320 if (group_name != NULL) {
1321 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1322 tmp_query = sqlite3_mprintf(SELECT_PVR_COUNT_FROM_GROUP_BY_STORAGE_ID, _filter->storage_id, __media_db_get_group_name(group), group_name);
1324 tmp_query = sqlite3_mprintf(SELECT_PVR_COUNT_FROM_GROUP, __media_db_get_group_name(group), group_name);
1326 SAFE_STRLCAT(select_query, tmp_query, sizeof(select_query));
1328 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1329 snprintf(select_query, sizeof(select_query), SELECT_PVR_COUNT_FROM_GROUP_NULL_BY_STORAGE_ID, _filter->storage_id, __media_db_get_group_name(group));
1331 snprintf(select_query, sizeof(select_query), SELECT_PVR_COUNT_FROM_GROUP_NULL, __media_db_get_group_name(group));
1333 } else {/*uhd content*/
1334 if (group_name != NULL) {
1335 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1336 tmp_query = sqlite3_mprintf(SELECT_UHD_COUNT_FROM_GROUP_BY_STORAGE_ID, _filter->storage_id, __media_db_get_group_name(group), group_name);
1338 tmp_query = sqlite3_mprintf(SELECT_UHD_COUNT_FROM_GROUP, __media_db_get_group_name(group), group_name);
1340 SAFE_STRLCAT(select_query, tmp_query, sizeof(select_query));
1342 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1343 snprintf(select_query, sizeof(select_query), SELECT_UHD_COUNT_FROM_GROUP_NULL_BY_STORAGE_ID, _filter->storage_id, __media_db_get_group_name(group));
1345 snprintf(select_query, sizeof(select_query), SELECT_UHD_COUNT_FROM_GROUP_NULL, __media_db_get_group_name(group));
1349 if (group_name != NULL) {
1350 if ((_filter != NULL) && STRING_VALID(_filter->storage_id)) {
1351 tmp_query = sqlite3_mprintf(SELECT_MEDIA_COUNT_FROM_GROUP, _filter->storage_id, __media_db_get_group_name(group), group_name);
1352 SAFE_STRLCAT(select_query, tmp_query, sizeof(select_query));
1354 tmp_query = sqlite3_mprintf(SELECT_MEDIA_COUNT_FROM_GROUP, DB_TABLE_MEDIA_VIEW, __media_db_get_group_name(group), group_name);
1355 SAFE_STRLCAT(select_query, tmp_query, sizeof(select_query));
1358 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1359 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_GROUP_NULL, _filter->storage_id, __media_db_get_group_name(group));
1361 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_COUNT_FROM_GROUP_NULL, DB_TABLE_MEDIA_VIEW, __media_db_get_group_name(group));
1364 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
1365 if (ret != MEDIA_CONTENT_ERROR_NONE) {
1366 if (tmp_query != NULL)
1367 SQLITE3_SAFE_FREE(tmp_query);
1371 SAFE_STRLCAT(select_query, QUERY_KEYWORD_SPACE, sizeof(select_query));
1372 if (STRING_VALID(condition_query))
1373 SAFE_STRLCAT(select_query, condition_query, sizeof(select_query));
1374 if (STRING_VALID(option_query))
1375 SAFE_STRLCAT(select_query, option_query, sizeof(select_query));
1376 SAFE_STRLCAT(select_query, QUERY_KEYWORD_BRACKET, sizeof(select_query));
1378 SAFE_FREE(condition_query);
1379 SAFE_FREE(option_query);
1381 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
1382 if (tmp_query != NULL)
1383 SQLITE3_SAFE_FREE(tmp_query);
1384 SAFE_FREE(condition_query);
1385 SAFE_FREE(option_query);
1386 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1388 while (sqlite3_step(stmt) == SQLITE_ROW)
1389 *item_count = (int)sqlite3_column_int(stmt, 0);
1391 SQLITE3_FINALIZE(stmt);
1396 int _media_db_get_media_group_item(const char *group_name, filter_h filter, media_group_e group, media_info_cb callback, void *user_data)
1398 int ret = MEDIA_CONTENT_ERROR_NONE;
1399 char select_query[MAX_QUERY_SIZE] = {0, };
1400 char *tmp_query = NULL;
1401 char *condition_query = NULL;
1402 char *option_query = NULL;
1403 sqlite3_stmt *stmt = NULL;
1404 attribute_h attr = NULL;
1405 filter_s *_filter = (filter_s*)filter;
1407 attr = _content_get_attirbute_handle();
1408 memset(select_query, 0x00, sizeof(select_query));
1410 if (group_name != NULL) {
1411 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1412 tmp_query = sqlite3_mprintf(SELECT_MEDIA_FROM_GROUP, _filter->storage_id, __media_db_get_group_name(group), group_name);
1414 tmp_query = sqlite3_mprintf(SELECT_MEDIA_FROM_GROUP, DB_TABLE_MEDIA_VIEW, __media_db_get_group_name(group), group_name);
1416 SAFE_STRLCAT(select_query, tmp_query, sizeof(select_query));
1418 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1419 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_GROUP_NULL, _filter->storage_id, __media_db_get_group_name(group));
1421 snprintf(select_query, sizeof(select_query), SELECT_MEDIA_FROM_GROUP_NULL, DB_TABLE_MEDIA_VIEW, __media_db_get_group_name(group));
1424 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
1425 if (ret != MEDIA_CONTENT_ERROR_NONE) {
1426 if (tmp_query != NULL)
1427 SQLITE3_SAFE_FREE(tmp_query);
1431 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
1432 if (tmp_query != NULL)
1433 SQLITE3_SAFE_FREE(tmp_query);
1434 SAFE_FREE(condition_query);
1435 SAFE_FREE(option_query);
1436 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1438 while (sqlite3_step(stmt) == SQLITE_ROW) {
1439 media_info_s *item = (media_info_s*)calloc(1, sizeof(media_info_s));
1441 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1442 SQLITE3_FINALIZE(stmt);
1443 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1446 _media_info_item_get_detail(stmt, (media_info_h)item);
1448 if (callback((media_info_h)item, user_data) == false) {
1449 media_info_destroy((media_info_h)item);
1453 media_info_destroy((media_info_h)item);
1456 SQLITE3_FINALIZE(stmt);
1461 int _media_db_get_storage(filter_h filter, media_storage_cb callback, void *user_data)
1463 int ret = MEDIA_CONTENT_ERROR_NONE;
1464 char select_query[DEFAULT_QUERY_SIZE];
1465 char *condition_query = NULL;
1466 char *option_query = NULL;
1467 sqlite3_stmt *stmt = NULL;
1468 attribute_h attr = NULL;
1470 attr = _content_get_attirbute_handle();
1471 memset(select_query, 0x00, sizeof(select_query));
1473 if (!SAFE_STRLCPY(select_query, SELECT_STORAGE_LIST, sizeof(select_query))) {
1474 media_content_error("INVALID_PARAMETER(0x%08x)", MEDIA_CONTENT_ERROR_INVALID_PARAMETER);
1475 return MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1478 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
1479 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1481 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
1482 SAFE_FREE(condition_query);
1483 SAFE_FREE(option_query);
1484 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1486 while (sqlite3_step(stmt) == SQLITE_ROW) {
1487 media_storage_s *_storage = (media_storage_s*)calloc(1, sizeof(media_storage_s));
1489 if (_storage == NULL) {
1490 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1491 SQLITE3_FINALIZE(stmt);
1492 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1495 _storage->storage_id = g_strdup((const char *)sqlite3_column_text(stmt, 0));
1496 _storage->storage_name = g_strdup((const char *)sqlite3_column_text(stmt, 1));
1497 _storage->storage_path = g_strdup((const char *)sqlite3_column_text(stmt, 2));
1498 _storage->storage_account = g_strdup((const char *)sqlite3_column_text(stmt, 3));
1499 _storage->storage_type = (int)sqlite3_column_int(stmt, 4);
1501 if (callback((media_storage_h)_storage, user_data) == false) {
1502 media_storage_destroy((media_storage_h) _storage);
1506 media_storage_destroy((media_storage_h) _storage);
1509 SQLITE3_FINALIZE(stmt);
1513 #ifdef _USE_TV_PROFILE
1514 int _media_db_get_pvr_group_item(const char *group_name, filter_h filter, media_group_e group, media_pvr_cb callback, void *user_data)
1516 int ret = MEDIA_CONTENT_ERROR_NONE;
1517 char select_query[DEFAULT_QUERY_SIZE];
1518 char *tmp_query = NULL;
1519 char *condition_query = NULL;
1520 char *option_query = NULL;
1521 sqlite3_stmt *stmt = NULL;
1522 attribute_h attr = NULL;
1523 filter_s *_filter = (filter_s*)filter;
1525 attr = _content_get_attirbute_handle();
1526 memset(select_query, 0x00, sizeof(select_query));
1528 if (group_name != NULL) {
1529 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1530 tmp_query = sqlite3_mprintf(SELECT_PVR_FROM_GROUP_BY_STORAGE_ID, _filter->storage_id, __media_db_get_group_name(group), group_name);
1532 tmp_query = sqlite3_mprintf(SELECT_PVR_FROM_GROUP, __media_db_get_group_name(group), group_name);
1534 SAFE_STRLCAT(select_query, tmp_query, sizeof(select_query));
1536 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1537 snprintf(select_query, sizeof(select_query), SELECT_PVR_FROM_GROUP_NULL_BY_STORAGE_ID, _filter->storage_id, __media_db_get_group_name(group));
1539 snprintf(select_query, sizeof(select_query), SELECT_PVR_FROM_GROUP_NULL, __media_db_get_group_name(group));
1542 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
1543 if (ret != MEDIA_CONTENT_ERROR_NONE) {
1544 if (tmp_query != NULL)
1545 sqlite3_free(tmp_query);
1549 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
1550 if (tmp_query != NULL)
1551 sqlite3_free(tmp_query);
1552 SAFE_FREE(condition_query);
1553 SAFE_FREE(option_query);
1554 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1556 while (sqlite3_step(stmt) == SQLITE_ROW) {
1557 media_pvr_s *item = (media_pvr_s*)calloc(1, sizeof(media_pvr_s));
1559 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1560 SQLITE3_FINALIZE(stmt);
1561 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1564 _media_pvr_item_get_detail(stmt, (media_pvr_h)item);
1566 if (callback((media_pvr_h)item, user_data) == false) {
1567 media_info_destroy((media_pvr_h)item);
1571 media_pvr_destroy((media_pvr_h)item);
1574 SQLITE3_FINALIZE(stmt);
1580 MEDIA_PVR_MEDIA_ID = 0,
1581 MEDIA_PVR_STORAGE_ID,
1585 MEDIA_PVR_TIME_ZONE,
1589 MEDIA_PVR_CHANNEL_TYPE,
1590 MEDIA_PVR_CHANNEL_NAME,
1591 MEDIA_PVR_CHANNEL_NUM,
1592 MEDIA_PVR_PROGRAM_TITLE,
1593 MEDIA_PVR_PROGRAM_NUM,
1594 MEDIA_PVR_PROGRAM_CRID,
1599 MEDIA_PVR_EMBARGO_TIME,
1600 MEDIA_PVR_EXPIRY_TIME,
1601 MEDIA_PVR_START_TIME,
1602 MEDIA_PVR_PROGRAM_START_TIME,
1603 MEDIA_PVR_PROGRAM_END_TIME,
1604 MEDIA_PVR_PROGRAM_DATE,
1605 MEDIA_PVR_PARENTAL_RATING,
1606 MEDIA_PVR_TIMER_RECORD,
1607 MEDIA_PVR_SERIES_RECORD,
1612 MEDIA_PVR_HARDOF_HEARINGRADIO,
1613 MEDIA_PVR_DATA_SERVICE,
1614 MEDIA_PVR_CONTENT_LOCK,
1615 MEDIA_PVR_CONTENT_WATCH,
1616 MEDIA_PVR_HAS_AUDIO_ONLY,
1617 MEDIA_PVR_IS_LOCAL_RECORDED,
1618 MEDIA_PVR_RESOLUTION,
1619 MEDIA_PVR_ASPECTRATIO,
1620 MEDIA_PVR_MODIFIED_MONTH,
1621 MEDIA_PVR_SPORTS_TYPE,
1622 MEDIA_PVR_GUIDANCE_LENGTH,
1624 MEDIA_PVR_PLAY_COUNT,
1625 MEDIA_PVR_PRIVATE_DATA,
1626 MEDIA_PVR_HIGHLIGHT,
1627 } media_pvr_field_e;
1629 void _media_pvr_item_get_detail(sqlite3_stmt* stmt, media_pvr_h pvr)
1631 media_pvr_s *_pvr = (media_pvr_s*)pvr;
1633 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_PVR_MEDIA_ID)))
1634 _pvr->media_id = strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_MEDIA_ID));
1636 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_PVR_STORAGE_ID)))
1637 _pvr->storage_id = strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_STORAGE_ID));
1639 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_PVR_PATH)))
1640 _pvr->path = strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_PATH));
1642 _pvr->size = (unsigned long long)sqlite3_column_int64(stmt, MEDIA_PVR_SIZE);
1644 _pvr->duration = (int)sqlite3_column_int(stmt, MEDIA_PVR_DURATION);
1646 _pvr->timezone = (int)sqlite3_column_int(stmt, MEDIA_PVR_TIME_ZONE);
1648 _pvr->ptc = (int)sqlite3_column_int(stmt, MEDIA_PVR_PTC);
1650 _pvr->major = (int)sqlite3_column_int(stmt, MEDIA_PVR_MAJOR);
1652 _pvr->minor = (int)sqlite3_column_int(stmt, MEDIA_PVR_MINOR);
1654 _pvr->channel_type = (int)sqlite3_column_int(stmt, MEDIA_PVR_CHANNEL_TYPE);
1656 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_PVR_CHANNEL_NAME)))
1657 _pvr->channel_name = strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_CHANNEL_NAME));
1659 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_PVR_CHANNEL_NUM)))
1660 _pvr->channel_num = strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_CHANNEL_NUM));
1662 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_PVR_PROGRAM_TITLE)))
1663 _pvr->program_title = strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_PROGRAM_TITLE));
1665 _pvr->program_num = (int)sqlite3_column_int(stmt, MEDIA_PVR_PROGRAM_NUM);
1667 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_PVR_PROGRAM_CRID)))
1668 _pvr->program_crid = strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_PROGRAM_CRID));
1670 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_PVR_GUIDANCE)))
1671 _pvr->guidance = strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_GUIDANCE));
1673 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_PVR_SYNOPSIS)))
1674 _pvr->synopsis = strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_SYNOPSIS));
1676 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_PVR_GENRE)))
1677 _pvr->genre = strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_GENRE));
1679 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_PVR_LANGUAGE)))
1680 _pvr->language = strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_LANGUAGE));
1682 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_PVR_MODIFIED_MONTH)))
1683 _pvr->modified_month = strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_MODIFIED_MONTH));
1685 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_PVR_PRIVATE_DATA)))
1686 _pvr->private_data = strdup((const char *)sqlite3_column_text(stmt, MEDIA_PVR_PRIVATE_DATA));
1688 _pvr->embargo_time = (int)sqlite3_column_int(stmt, MEDIA_PVR_EMBARGO_TIME);
1690 _pvr->expiry_time = (int)sqlite3_column_int(stmt, MEDIA_PVR_EXPIRY_TIME);
1692 _pvr->start_time = (int)sqlite3_column_int(stmt, MEDIA_PVR_START_TIME);
1694 _pvr->program_start_time = (int)sqlite3_column_int(stmt, MEDIA_PVR_PROGRAM_START_TIME);
1696 _pvr->program_end_time = (int)sqlite3_column_int(stmt, MEDIA_PVR_PROGRAM_END_TIME);
1698 _pvr->program_date = (int)sqlite3_column_int(stmt, MEDIA_PVR_PROGRAM_DATE);
1700 _pvr->parental_rating = (int)sqlite3_column_int(stmt, MEDIA_PVR_PARENTAL_RATING);
1702 _pvr->timer_record = (int)sqlite3_column_int(stmt, MEDIA_PVR_TIMER_RECORD);
1704 _pvr->series_record = (int)sqlite3_column_int(stmt, MEDIA_PVR_SERIES_RECORD);
1706 _pvr->hd = (int)sqlite3_column_int(stmt, MEDIA_PVR_HD);
1708 _pvr->subtitle = (int)sqlite3_column_int(stmt, MEDIA_PVR_SUBTITLE);
1710 _pvr->ttx = (int)sqlite3_column_int(stmt, MEDIA_PVR_TTX);
1712 _pvr->ad = (int)sqlite3_column_int(stmt, MEDIA_PVR_AD);
1714 _pvr->hard_of_hearing_radio = (int)sqlite3_column_int(stmt, MEDIA_PVR_HARDOF_HEARINGRADIO);
1716 _pvr->data_service = (int)sqlite3_column_int(stmt, MEDIA_PVR_DATA_SERVICE);
1718 _pvr->content_lock = (int)sqlite3_column_int(stmt, MEDIA_PVR_CONTENT_LOCK);
1720 _pvr->content_watch = (int)sqlite3_column_int(stmt, MEDIA_PVR_CONTENT_WATCH);
1722 _pvr->has_audio_only = (int)sqlite3_column_int(stmt, MEDIA_PVR_HAS_AUDIO_ONLY);
1724 _pvr->is_local_record = (int)sqlite3_column_int(stmt, MEDIA_PVR_IS_LOCAL_RECORDED);
1726 _pvr->resolution = (int)sqlite3_column_int(stmt, MEDIA_PVR_RESOLUTION);
1728 _pvr->aspectratio = (int)sqlite3_column_int(stmt, MEDIA_PVR_ASPECTRATIO);
1730 _pvr->sports_type = (int)sqlite3_column_int(stmt, MEDIA_PVR_SPORTS_TYPE);
1732 _pvr->guidance_length = (int)sqlite3_column_int(stmt, MEDIA_PVR_GUIDANCE_LENGTH);
1734 _pvr->tvmode = (int)sqlite3_column_int(stmt, MEDIA_PVR_TVMODE);
1736 _pvr->play_count = (int)sqlite3_column_int(stmt, MEDIA_PVR_PLAY_COUNT);
1738 _pvr->highlight = (int)sqlite3_column_int(stmt, MEDIA_PVR_HIGHLIGHT);
1743 int _media_db_get_pvr(filter_h filter, media_pvr_cb callback, void *user_data)
1745 int ret = MEDIA_CONTENT_ERROR_NONE;
1746 char select_query[DEFAULT_QUERY_SIZE];
1747 char *condition_query = NULL;
1748 char *option_query = NULL;
1749 sqlite3_stmt *stmt = NULL;
1750 attribute_h attr = NULL;
1751 filter_s *_filter = (filter_s*)filter;
1753 attr = _content_get_attirbute_handle();
1754 memset(select_query, 0x00, sizeof(select_query));
1756 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1757 snprintf(select_query, sizeof(select_query), SELECT_PVR_LIST_BY_STORAGE_ID, _filter->storage_id);
1759 SAFE_STRLCAT(select_query, SELECT_PVR_LIST, sizeof(select_query));
1761 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
1762 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1764 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
1765 SAFE_FREE(condition_query);
1766 SAFE_FREE(option_query);
1767 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1769 while (sqlite3_step(stmt) == SQLITE_ROW) {
1770 media_pvr_s *_pvr = (media_pvr_s*)calloc(1, sizeof(media_pvr_s));
1773 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1774 SQLITE3_FINALIZE(stmt);
1775 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1778 _media_pvr_item_get_detail(stmt, (media_pvr_h)_pvr);
1780 if (callback((media_pvr_h)_pvr, user_data) == false) {
1781 media_pvr_destroy((media_pvr_h) _pvr);
1785 media_pvr_destroy((media_pvr_h) _pvr);
1788 SQLITE3_FINALIZE(stmt);
1794 int _media_db_get_storage_id_by_media_id(const char *media_id, char *storage_id)
1796 int ret = MEDIA_CONTENT_ERROR_NONE;
1797 sqlite3_stmt *stmt = NULL;
1798 char *select_query = NULL;
1800 select_query = sqlite3_mprintf(SELECT_MEDIA_STORAGE_ID_BY_ID, media_id);
1802 ret = _content_query_prepare(&stmt, select_query, NULL, NULL);
1803 SQLITE3_SAFE_FREE(select_query);
1804 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1806 if (sqlite3_step(stmt) == SQLITE_ROW) {
1807 if (STRING_VALID((const char *)sqlite3_column_text(stmt, 0)))
1808 strncpy(storage_id, (const char *)sqlite3_column_text(stmt, 0), MEDIA_CONTENT_UUID_SIZE);
1810 media_content_error("There's no media!!");
1811 ret = MEDIA_CONTENT_ERROR_INVALID_PARAMETER;
1814 SQLITE3_FINALIZE(stmt);
1818 #ifdef _USE_TV_PROFILE
1820 MEDIA_UHD_MEDIA_ID = 0,
1821 MEDIA_UHD_STORAGE_ID,
1824 MEDIA_UHD_CONTENT_ID,
1825 MEDIA_UHD_CONTENT_TITLE,
1826 MEDIA_UHD_FILE_NAME,
1827 MEDIA_UHD_FOLDER_ID,
1828 MEDIA_UHD_RELEASE_DATE,
1829 MEDIA_UHD_MODIFIED_TIME,
1830 MEDIA_UHD_PLAYED_POSITION,
1832 MEDIA_UHD_PLAYED_COUNT,
1833 } media_uhd_field_e;
1835 void _media_uhd_item_get_detail(sqlite3_stmt* stmt, media_uhd_h uhd)
1837 media_uhd_s *_uhd = (media_uhd_s*)uhd;
1839 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_UHD_MEDIA_ID)))
1840 _uhd->media_id = strdup((const char *)sqlite3_column_text(stmt, MEDIA_UHD_MEDIA_ID));
1842 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_UHD_STORAGE_ID)))
1843 _uhd->storage_id = strdup((const char *)sqlite3_column_text(stmt, MEDIA_UHD_STORAGE_ID));
1845 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_UHD_PATH)))
1846 _uhd->path = strdup((const char *)sqlite3_column_text(stmt, MEDIA_UHD_PATH));
1848 _uhd->size = (unsigned long long)sqlite3_column_int64(stmt, MEDIA_UHD_SIZE);
1850 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_UHD_CONTENT_ID)))
1851 _uhd->content_id = strdup((const char *)sqlite3_column_text(stmt, MEDIA_UHD_CONTENT_ID));
1853 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_UHD_CONTENT_TITLE)))
1854 _uhd->content_title = strdup((const char *)sqlite3_column_text(stmt, MEDIA_UHD_CONTENT_TITLE));
1856 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_UHD_FILE_NAME)))
1857 _uhd->file_name = strdup((const char *)sqlite3_column_text(stmt, MEDIA_UHD_FILE_NAME));
1859 if (STRING_VALID((const char *)sqlite3_column_text(stmt, MEDIA_UHD_RELEASE_DATE)))
1860 _uhd->release_date = strdup((const char *)sqlite3_column_text(stmt, MEDIA_UHD_RELEASE_DATE));
1862 _uhd->modified_time = (int)sqlite3_column_int(stmt, MEDIA_UHD_MODIFIED_TIME);
1863 _uhd->played_position = (int)sqlite3_column_int(stmt, MEDIA_UHD_PLAYED_POSITION);
1864 _uhd->sub_type = (int)sqlite3_column_int(stmt, MEDIA_UHD_SUB_TYPE);
1865 _uhd->played_count = (int)sqlite3_column_int(stmt, MEDIA_UHD_PLAYED_COUNT);
1870 int _media_db_get_uhd(filter_h filter, media_uhd_cb callback, void *user_data)
1872 int ret = MEDIA_CONTENT_ERROR_NONE;
1873 char select_query[DEFAULT_QUERY_SIZE];
1874 char *condition_query = NULL;
1875 char *option_query = NULL;
1876 sqlite3_stmt *stmt = NULL;
1877 attribute_h attr = NULL;
1878 filter_s *_filter = (filter_s*)filter;
1880 attr = _content_get_attirbute_handle();
1881 memset(select_query, 0x00, sizeof(select_query));
1883 if ((_filter != NULL) && STRING_VALID(_filter->storage_id))
1884 snprintf(select_query, sizeof(select_query), SELECT_UHD_LIST_BY_STORAGE_ID, _filter->storage_id);
1886 SAFE_STRLCAT(select_query, SELECT_UHD_LIST, sizeof(select_query));
1888 ret = __media_db_make_query(filter, attr, select_query, sizeof(select_query), &condition_query, &option_query);
1889 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1891 ret = _content_query_prepare(&stmt, select_query, condition_query, option_query);
1892 SAFE_FREE(condition_query);
1893 SAFE_FREE(option_query);
1894 media_content_retv_if(ret != MEDIA_CONTENT_ERROR_NONE, ret);
1896 while (sqlite3_step(stmt) == SQLITE_ROW) {
1897 media_uhd_s *_uhd = (media_uhd_s*)calloc(1, sizeof(media_uhd_s));
1900 media_content_error("OUT_OF_MEMORY(0x%08x)", MEDIA_CONTENT_ERROR_OUT_OF_MEMORY);
1901 SQLITE3_FINALIZE(stmt);
1902 return MEDIA_CONTENT_ERROR_OUT_OF_MEMORY;
1905 _media_uhd_item_get_detail(stmt, (media_uhd_h)_uhd);
1907 if (callback((media_uhd_h)_uhd, user_data) == false) {
1908 media_uhd_destroy((media_uhd_h) _uhd);
1911 media_uhd_destroy((media_uhd_h) _uhd);
1914 SQLITE3_FINALIZE(stmt);