3 * Copyright (c) 2012 Samsung Electronics Co., Ltd.
5 * Licensed under the Apache License, Version 2.0 (the License);
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
9 * http://www.apache.org/licenses/LICENSE-2.0
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
22 #include <sync_agent.h>
25 #include "common/dm-status/oma_dm_status_db.h"
26 #include "common/dm_common.h"
28 #ifndef OMADM_AGENT_LOG
30 #define LOG_TAG "OMA_DM_DB"
33 /* static function define */
34 static int _busy_handler(void *pData, int count);
35 static DM_ERROR _query_exec(DB_HANDLER * db_handler, char *query, char *errMsg);
36 static db_stmt __query_prepare(DB_HANDLER * db_handler, char *query, int size);
37 static DM_ERROR __stmt_bind_text(DB_HANDLER * db_handler, db_stmt stmt, int index, const char *value);
38 static DM_ERROR _stmt_bind_int(DB_HANDLER * db_handler, db_stmt stmt, int index, const int value);
39 static DM_ERROR ___stmt_bind_null(DB_HANDLER * db_handler, db_stmt stmt, int index);
40 static DM_ERROR __stmt_step(DB_HANDLER * db_handler, db_stmt stmt);
41 /*static DM_ERROR __stmt_reset(DB_HANDLER *db_handler, db_stmt stmt);*/
42 static DM_ERROR __stmt_finalize(DB_HANDLER * db_handler, db_stmt stmt);
43 static char *_stmt_column_text(db_stmt stmt, int index);
44 static int __stmt_column_int(db_stmt stmt, int index);
45 static DM_ERROR _get_table(DB_HANDLER * db_handler, char *query, char ***result, int *row_count, int *col_count);
46 static void __free_table(char **result);
48 static int _exist_table(DB_HANDLER * db_handler, const char *table_name);
49 static int _get_data_count(DB_HANDLER * db_handler, char *query, int size);
50 static char *_replace_engine_status_value(ENGINE_STATUS_VALUE engine_status_value);
52 static char *__create_table[] = {
53 /* 1. create engine_status_tbl */
54 "create table engine_status_tbl "
57 "engine_status integer default null, "
58 "server_id varchar(100) default null, "
59 "server_url varchar(100) default null, "
60 "correlator varchar(100) default null, "
61 "mo_path varchar(200) default null, "
62 "result_status integer not null, "
63 "ui_mode varchar(100) default null, " "task_id integer not null, " "ui_noti_type integer, " "download_click integer, " "update_time integer not null, " "constraint engine_status_tbl_pk primary key(engine_id)" ");",
66 static char *__delete_table[] = {
67 /* 1. delete engine_status_tbl */
68 "delete from engine_status_tbl",
72 DM_ERROR dm_open_agent(DB_HANDLER ** db_handler)
79 if (*db_handler == NULL) {
80 ret = sqlite3_open("/opt/dbspace/.dm_service.db", db_handler);
84 /* register busy handler */
85 ret = sqlite3_busy_handler(*db_handler, _busy_handler, 0);
86 if (ret != SQLITE_OK) {
87 _DEBUG_INFO("fail to register busy handler", errMsg);
91 /* enable persist journal mode */
92 ret = sqlite3_exec(*db_handler, "PRAGMA journal_mode = PERSIST", 0, 0, &errMsg);
93 if (ret != SQLITE_OK) {
94 _DEBUG_INFO("fail to change journal mode: %s", errMsg);
97 _DEBUG_INFO("db_open success");
99 _DEBUG_INFO("db_already opened");
107 _DEBUG_INFO("db_open failed(%d) : %s", ret, sqlite3_errmsg(*db_handler));
110 sqlite3_free(errMsg);
112 sqlite3_close(*db_handler);
116 return DM_ERR_UNKNOWN;
119 DM_ERROR dm_close_agent(DB_HANDLER * db_handler)
124 ret = sqlite3_close(db_handler);
127 if (ret != SQLITE_OK) {
128 _DEBUG_INFO("db_close failed(%d) : %s", ret, sqlite3_errmsg(db_handler));
130 return DM_ERR_UNKNOWN;
133 _DEBUG_INFO("db_close success");
140 DM_ERROR dm_create_table(DB_HANDLER * db_handler)
144 DM_ERROR ret = DM_OK;
146 retvm_if(db_handler == NULL, DM_ERR_UNKNOWN, "db handler is NULL !!");
148 if ((dm_begin_transaction(db_handler) != DM_OK)) {
149 _DEBUG_INFO("mo_db_default_tbl_create failed");
151 return DM_ERR_UNKNOWN;
154 /* 1. create engine_status_tbl */
155 if (_exist_table(db_handler, "engine_status_tbl") == 0) {
156 ret = _query_exec(db_handler, __create_table[0], "engine_status_tbl_create failed");
161 /* add normal engine */
162 if (dm_isExist_engine_id(db_handler, 0) == 0) {
163 engine_status status;
164 memset(&status, 0x00, sizeof(engine_status));
165 status.engine_id = 0;
166 status.engine_status = 1;
167 status.result_status = 0;
169 status.ui_noti_type = 0;
170 status.download_click = 0;
171 ret = dm_add_engine_status(db_handler, &status);
172 _DEBUG_INFO("create dm service tbl : %d", ret);
178 dm_end_transaction(db_handler, TRANSACTION_ROLLBACK_);
179 ret = DM_ERR_UNKNOWN;
181 ret = dm_end_transaction(db_handler, TRANSACTION_COMMIT_);
188 DM_ERROR dm_delete_table(DB_HANDLER * db_handler)
192 DM_ERROR ret = DM_OK;
194 retvm_if(db_handler == NULL, DM_ERR_UNKNOWN, "db handler is NULL !!");
196 if ((dm_begin_transaction(db_handler) != DM_OK)) {
197 _DEBUG_INFO("default_tbl_delete failed");
199 return DM_ERR_UNKNOWN;
202 /* delete all default table */
203 for (i = 0; i < DB_TABLE_NAME_MAX; i++) {
204 ret = _query_exec(db_handler, __delete_table[i], "default_tbl_delete failed");
212 dm_end_transaction(db_handler, TRANSACTION_ROLLBACK_);
213 ret = DM_ERR_UNKNOWN;
215 ret = dm_end_transaction(db_handler, TRANSACTION_COMMIT_);
216 _DEBUG_INFO("end transaction : %d", ret);
223 DM_ERROR dm_reset_table(DB_HANDLER * db_handler)
227 DM_ERROR ret = DM_OK;
229 retvm_if(db_handler == NULL, DM_ERR_UNKNOWN, "db handler is NULL !!");
231 if ((dm_begin_transaction(db_handler) != DM_OK)) {
232 _DEBUG_INFO("default_tbl_delete failed");
234 return DM_ERR_UNKNOWN;
237 /*ret = dm_delete_table(db_handler);
241 /* delete all default table */
243 for (i = 0; i < DB_TABLE_NAME_MAX; i++) {
244 ret = _query_exec(db_handler, __delete_table[i], "default_tbl_delete failed");
249 ret = dm_init_engine_status(db_handler);
256 dm_end_transaction(db_handler, TRANSACTION_ROLLBACK_);
257 ret = DM_ERR_UNKNOWN;
259 ret = dm_end_transaction(db_handler, TRANSACTION_COMMIT_);
260 _DEBUG_INFO("end transaction : %d", ret);
267 DM_ERROR dm_begin_transaction(DB_HANDLER * db_handler)
271 DM_ERROR ret = _query_exec(db_handler, "begin immediate", "begin_transaction failed");
272 _DEBUG_INFO("begin transaction : %d", ret);
273 /* if (ret == SYNC_AGENT_DA_ERR_QUERY_FAILED)
274 ret = SYNC_AGENT_DA_ERR_TRANSACTION_FAILED;*/
280 DM_ERROR dm_end_transaction(DB_HANDLER * db_handler, DB_TRANSACTION transaction)
284 DM_ERROR ret = DM_OK;
288 if (transaction == TRANSACTION_COMMIT_) {
289 query = "commit transaction";
290 errMsg = "commit_transaction failed";
291 } else if (transaction == TRANSACTION_ROLLBACK_) {
292 query = "rollback transaction";
293 errMsg = "rollback_transaction failed";
296 ret = _query_exec(db_handler, query, errMsg);
297 if (ret == DM_ERR_UNKNOWN) {
298 if (transaction == TRANSACTION_COMMIT_) {
299 query = "rollback transaction";
300 errMsg = "rollback_transaction failed";
301 ret = _query_exec(db_handler, query, errMsg);
303 _DEBUG_INFO("rollback_transaction success");
305 ret = DM_ERR_UNKNOWN;
306 _DEBUG_INFO("end transaction error : %d", ret);
313 DM_ERROR dm_init_engine_status(DB_HANDLER * db_handler)
317 DM_ERROR ret = DM_ERR_UNKNOWN;
319 retvm_if(db_handler == NULL, DM_ERR_UNKNOWN, "db handler is NULL !!");
321 /* add normal engine */
322 if (dm_isExist_engine_id(db_handler, 0) == 0) {
323 engine_status status;
324 memset(&status, 0x00, sizeof(engine_status));
325 status.engine_id = 0;
326 status.engine_status = 1;
327 status.result_status = 0;
329 status.ui_noti_type = 0;
330 status.download_click = 0;
331 ret = dm_add_engine_status(db_handler, &status);
332 _DEBUG_INFO("dm add engine status : %d", ret);
339 DM_ERROR dm_add_engine_status(DB_HANDLER * db_handler, engine_status * status)
343 DM_ERROR ret = DM_OK;
346 retvm_if(db_handler == NULL, DM_ERR_UNKNOWN, "db handler is NULL !!");
347 retvm_if(status == NULL, DM_ERR_UNKNOWN, "db status is NULL !!");
349 char *query = "insert into engine_status_tbl (engine_id, engine_status, server_id, server_url, correlator, mo_path, result_status, ui_mode, task_id, ui_noti_type, download_click, update_time) " "values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
351 stmt = __query_prepare(db_handler, query, strlen(query));
353 ret = DM_ERR_UNKNOWN;
354 _DEBUG_INFO("ERROR DB");
358 _stmt_bind_int(db_handler, stmt, 1, status->engine_id);
359 _stmt_bind_int(db_handler, stmt, 2, status->engine_status);
360 __stmt_bind_text(db_handler, stmt, 3, status->server_id);
361 __stmt_bind_text(db_handler, stmt, 4, status->server_url);
362 __stmt_bind_text(db_handler, stmt, 5, status->correlator);
363 __stmt_bind_text(db_handler, stmt, 6, status->mo_path);
364 _stmt_bind_int(db_handler, stmt, 7, status->result_status);
365 __stmt_bind_text(db_handler, stmt, 8, status->ui_mode);
366 _stmt_bind_int(db_handler, stmt, 9, status->task_id);
367 _stmt_bind_int(db_handler, stmt, 10, status->ui_noti_type);
368 _stmt_bind_int(db_handler, stmt, 11, status->download_click);
369 _stmt_bind_int(db_handler, stmt, 12, (int)(time(&status->update_time)));
371 ret = __stmt_step(db_handler, stmt);
373 ret = DM_ERR_UNKNOWN;
378 __stmt_finalize(db_handler, stmt);
384 DM_ERROR dm_delete_engine_status(DB_HANDLER * db_handler, int engine_id)
388 DM_ERROR ret = DM_OK;
391 retvm_if(db_handler == NULL, DM_ERR_UNKNOWN, "db handler is NULL !!");
393 char *query = "delete from engine_status_tbl where engine_id = ?";
395 stmt = __query_prepare(db_handler, query, strlen(query));
397 ret = DM_ERR_UNKNOWN;
401 _stmt_bind_int(db_handler, stmt, 1, engine_id);
402 ret = __stmt_step(db_handler, stmt);
407 __stmt_finalize(db_handler, stmt);
413 DM_ERROR dm_update_engine_status(DB_HANDLER * db_handler, engine_status * status)
417 DM_ERROR ret = DM_OK;
420 retvm_if(db_handler == NULL, DM_ERR_UNKNOWN, "db handler is NULL !!");
421 retvm_if(status == NULL, DM_ERR_UNKNOWN, "db status is NULL !!");
423 char *query = "update engine_status_tbl "
424 "set engine_status = ?, server_id = ?, server_url = ?, correlator = ?, mo_path = ?, result_status = ?, ui_mode = ?, task_id = ?, ui_noti_type = ?, download_click = ?, update_time = ? " "where engine_id = ?";
426 stmt = __query_prepare(db_handler, query, strlen(query));
428 ret = DM_ERR_UNKNOWN;
432 _stmt_bind_int(db_handler, stmt, 1, status->engine_status);
433 __stmt_bind_text(db_handler, stmt, 2, status->server_id);
434 __stmt_bind_text(db_handler, stmt, 3, status->server_url);
435 __stmt_bind_text(db_handler, stmt, 4, status->correlator);
436 __stmt_bind_text(db_handler, stmt, 5, status->mo_path);
437 _stmt_bind_int(db_handler, stmt, 6, status->result_status);
438 __stmt_bind_text(db_handler, stmt, 7, status->ui_mode);
439 _stmt_bind_int(db_handler, stmt, 8, status->task_id);
440 _stmt_bind_int(db_handler, stmt, 9, status->ui_noti_type);
441 _stmt_bind_int(db_handler, stmt, 10, status->download_click);
442 _stmt_bind_int(db_handler, stmt, 11, (int)(time(&status->update_time)));
443 _stmt_bind_int(db_handler, stmt, 12, status->engine_id);
445 ret = __stmt_step(db_handler, stmt);
447 ret = DM_ERR_UNKNOWN;
452 __stmt_finalize(db_handler, stmt);
458 DM_ERROR dm_update_engine_status_column(DB_HANDLER * db_handler, int engine_id, ENGINE_STATUS_VALUE engine_status_value, void *value)
462 DM_ERROR ret = DM_OK;
464 char query[MAX_QUERY_LENGTH] = { 0, };
465 char *column_name = _replace_engine_status_value(engine_status_value);
468 retvm_if(db_handler == NULL, DM_ERR_UNKNOWN, "db handler is NULL !!");
470 snprintf(query, sizeof(query), "update engine_status_tbl set %s = ?, update_time= %d where engine_id = %d", column_name, (int)(time(&update_time)), engine_id);
472 stmt = __query_prepare(db_handler, query, strlen(query));
474 ret = DM_ERR_UNKNOWN;
478 if (engine_status_value == VALUE_ENGINE_STATUS || engine_status_value == VALUE_RESULT_STATUS || engine_status_value == VALUE_TASK_ID || engine_status_value == VALUE_UI_NOTI_TYPE || engine_status_value == VALUE_DOWNLOAD_CLICK) {
479 int *engine_status = (int *)value;
480 _stmt_bind_int(db_handler, stmt, 1, *engine_status);
482 char *str = (char *)value;
483 __stmt_bind_text(db_handler, stmt, 1, str);
486 ret = __stmt_step(db_handler, stmt);
488 ret = DM_ERR_UNKNOWN;
493 __stmt_finalize(db_handler, stmt);
499 DM_ERROR dm_get_engine_status(DB_HANDLER * db_handler, int engine_id, engine_status ** status)
503 DM_ERROR ret = DM_OK;
505 char *query = "select * from engine_status_tbl where engine_id = ?";
506 engine_status *temp_status = 0;
508 retvm_if(db_handler == NULL, DM_ERR_UNKNOWN, "db handler is NULL !!");
510 stmt = __query_prepare(db_handler, query, strlen(query));
512 _stmt_bind_int(db_handler, stmt, 1, engine_id);
514 if (__stmt_step(db_handler, stmt) == DM_ERR_MORE_DATA) {
515 temp_status = (engine_status *) calloc(1, sizeof(engine_status));
516 if (temp_status == NULL) {
517 _DEBUG_INFO("alloc fail");
519 return COMMON_ERR_ALLOC;
521 temp_status->engine_id = __stmt_column_int(stmt, 0);
522 temp_status->engine_status = __stmt_column_int(stmt, 1);
523 temp_status->server_id = _stmt_column_text(stmt, 2);
524 temp_status->server_url = _stmt_column_text(stmt, 3);
525 temp_status->correlator = _stmt_column_text(stmt, 4);
526 temp_status->mo_path = _stmt_column_text(stmt, 5);
527 temp_status->result_status = __stmt_column_int(stmt, 6);
528 temp_status->ui_mode = _stmt_column_text(stmt, 7);
529 temp_status->task_id = __stmt_column_int(stmt, 8);
530 temp_status->ui_noti_type = __stmt_column_int(stmt, 9);
531 temp_status->download_click = __stmt_column_int(stmt, 10);
532 temp_status->update_time = __stmt_column_int(stmt, 11);
534 ret = __stmt_finalize(db_handler, stmt);
537 return DM_ERR_UNKNOWN;
540 (*status) = temp_status;
546 DM_ERROR dm_get_aII_engine_status(DB_HANDLER * db_handler, engine_status ** status_list, int *count)
550 DM_ERROR ret = DM_OK;
551 engine_status *temp_status = 0;
557 char query[MAX_QUERY_LENGTH] = { 0, };
559 retvm_if(db_handler == NULL, DM_ERR_UNKNOWN, "db handler is NULL !!");
561 snprintf(query, sizeof(query), "select * from engine_status_tbl");
563 ret = _get_table(db_handler, query, &result, &row_count, &col_count);
564 if ((ret == DM_OK) && (row_count != 0) && (result != NULL)) {
566 temp_status = (engine_status *) calloc(row_count, sizeof(engine_status));
567 if (temp_status == NULL) {
568 _DEBUG_INFO("memory_allocation failed");
569 ret = COMMON_ERR_ALLOC;
573 for (i = 0; i < row_count; i++) {
574 temp_status[i].engine_id = ATOI(result[index]);
576 temp_status[i].engine_status = ATOI(result[index]);
578 temp_status[i].server_id = STRDUP(result[index]);
580 temp_status[i].server_url = STRDUP(result[index]);
582 temp_status[i].correlator = STRDUP(result[index]);
584 temp_status[i].mo_path = STRDUP(result[index]);
586 temp_status[i].result_status = ATOI(result[index]);
588 temp_status[i].ui_mode = STRDUP(result[index]);
590 temp_status[i].task_id = ATOI(result[index]);
592 temp_status[i].ui_noti_type = ATOI(result[index]);
594 temp_status[i].download_click = ATOI(result[index]);
596 temp_status[i].update_time = ATOI(result[index]);
604 __free_table(result);
606 *status_list = temp_status;
612 int dm_isExist_engine_id(DB_HANDLER * db_handler, int engine_id)
618 char query[MAX_QUERY_LENGTH] = { 0, };
620 retvm_if(db_handler == NULL, DM_ERR_UNKNOWN, "db handler is NULL !!");
622 snprintf(query, sizeof(query), "select count(*) from engine_status_tbl where engine_id = %d", engine_id);
624 dataCount = _get_data_count(db_handler, query, strlen(query));
633 int _busy_handler(void *pData, int count)
637 _DEBUG_TRACE("__busy_handler %d called", count);
639 /* sleep time when SQLITE_LOCK */
643 /* retry will be stopped if busy handler return 0 */
644 return RETRY_COUNT - count;
647 DM_ERROR _query_exec(DB_HANDLER * db_handler, char *query, char *errMsg)
654 retvm_if(db_handler == NULL, DM_ERR_UNKNOWN, "db handler is NULL !!");
656 ret = sqlite3_exec(db_handler, query, 0, 0, &queryMsg);
657 if (ret != SQLITE_OK) {
658 _DEBUG_TRACE("%s(%d) : %s", errMsg, ret, queryMsg);
660 if (queryMsg != NULL)
661 sqlite3_free(queryMsg);
664 if (ret == SQLITE_BUSY)
665 return DM_ERR_UNKNOWN;
668 return DM_ERR_UNKNOWN;
674 db_stmt __query_prepare(DB_HANDLER * db_handler, char *query, int size)
681 ret = sqlite3_prepare_v2(db_handler, query, size, &stmt, 0);
682 if (ret != SQLITE_OK)
683 _DEBUG_VERBOSE("sqlite3_query_prepare failed(%d) : %s ", ret, sqlite3_errmsg(db_handler));
690 DM_ERROR __stmt_bind_text(DB_HANDLER * db_handler, db_stmt stmt, int index, const char *value)
697 ret = sqlite3_bind_text(stmt, index, value, strlen(value), SQLITE_STATIC);
699 ret = ___stmt_bind_null(db_handler, stmt, index);
705 if (ret != SQLITE_OK) {
706 _DEBUG_VERBOSE("sqlite3_stmt_bind_text failed(%d) : %s ", ret, sqlite3_errmsg(db_handler));
708 return DM_ERR_UNKNOWN;
714 DM_ERROR _stmt_bind_int(DB_HANDLER * db_handler, db_stmt stmt, int index, const int value)
720 ret = sqlite3_bind_int(stmt, index, value);
721 if (ret != SQLITE_OK) {
722 _DEBUG_TRACE("sqlite3_stmt_bind_int failed(%d) : %s \n", ret, sqlite3_errmsg(db_handler));
724 return DM_ERR_UNKNOWN;
732 DM_ERROR ___stmt_bind_null(DB_HANDLER * db_handler, db_stmt stmt, int index)
738 ret = sqlite3_bind_null(stmt, index);
739 if (ret != SQLITE_OK) {
740 _DEBUG_VERBOSE("sqlite3_stmt_bind_null failed(%d) : %s", ret, sqlite3_errmsg(db_handler));
742 return DM_ERR_UNKNOWN;
749 DM_ERROR __stmt_step(DB_HANDLER * db_handler, db_stmt stmt)
754 ret = sqlite3_step(stmt);
756 if (ret == SQLITE_ROW) {
758 return DM_ERR_MORE_DATA;
761 if (ret != SQLITE_DONE) {
762 _DEBUG_VERBOSE("sqlite3_stmt_step failed(%d) : %s", ret, sqlite3_errmsg(db_handler));
764 /* if (ret == SQLITE_BUSY)
765 return DM_ERR_UNKNOWN;*/
767 return DM_ERR_UNKNOWN;
774 /*DM_ERROR __stmt_reset(DB_HANDLER *db_handler, db_stmt stmt)
778 if (sqlite3_reset(stmt) != SQLITE_OK) {
779 _DEBUG_INFO("sqlite3_stmt_reset failed(%d) : %s", ret, sqlite3_errmsg(db_handler));
780 return DM_ERR_UNKNOWN;
786 DM_ERROR __stmt_finalize(DB_HANDLER * db_handler, db_stmt stmt)
791 if (sqlite3_finalize(stmt) != SQLITE_OK) {
792 _DEBUG_VERBOSE("sqlite3_stmt_finalize failed(%d) : %s", ret, sqlite3_errmsg(db_handler));
794 return DM_ERR_UNKNOWN;
801 char *_stmt_column_text(db_stmt stmt, int index)
806 temp = (char *)sqlite3_column_text(stmt, index);
813 int __stmt_column_int(db_stmt stmt, int index)
818 return (int)sqlite3_column_int(stmt, index);
821 DM_ERROR _get_table(DB_HANDLER * db_handler, char *query, char ***result, int *row_count, int *col_count)
828 if (db_handler == NULL) {
830 return DM_ERR_UNKNOWN;
833 ret = sqlite3_get_table(db_handler, query, result, row_count, col_count, &errMsg);
835 if (ret != SQLITE_OK) {
836 _DEBUG_TRACE("sqlite3_get_table failed(%d) : %s", ret, errMsg);
838 __free_table(*result);
841 sqlite3_free(errMsg);
845 return DM_ERR_UNKNOWN;
853 void __free_table(char **result)
858 sqlite3_free_table(result);
864 int _exist_table(DB_HANDLER * db_handler, const char *table_name)
870 char *query = "select count(*) from sqlite_master where tbl_name= ?";
872 stmt = __query_prepare(db_handler, query, strlen(query));
873 if ((stmt != NULL) && (__stmt_bind_text(db_handler, stmt, 1, table_name) == DM_ERR_MORE_DATA)) {
875 if (__stmt_step(db_handler, stmt) == DM_ERR_MORE_DATA)
876 table_count = __stmt_column_int(stmt, 0);
878 __stmt_finalize(db_handler, stmt);
880 if (table_count > 0) {
891 int _get_data_count(DB_HANDLER * db_handler, char *query, int size)
898 stmt = __query_prepare(db_handler, query, size);
900 if (__stmt_step(db_handler, stmt) == DM_ERR_MORE_DATA)
901 data_count = __stmt_column_int(stmt, 0);
903 __stmt_finalize(db_handler, stmt);
911 static char *_replace_engine_status_value(ENGINE_STATUS_VALUE engine_status_value)
917 switch (engine_status_value) {
918 case VALUE_ENGINE_ID:
921 case VALUE_ENGINE_STATUS:
922 temp = "engine_status";
924 case VALUE_SERVER_ID:
927 case VALUE_SERVER_URL:
930 case VALUE_CORRELATOR:
936 case VALUE_RESULT_STATUS:
937 temp = "result_status";
945 case VALUE_UI_NOTI_TYPE:
946 temp = "ui_noti_type";
948 case VALUE_DOWNLOAD_CLICK:
949 temp = "download_click";
951 case VALUE_UPDATE_TIME:
952 temp = "update_time";