2 This file is part of Telegram application for tizen
4 This library is free software; you can redistribute it and/or
5 modify it under the terms of the GNU Lesser General Public
6 License as published by the Free Software Foundation; either
7 version 2.1 of the License, or (at your option) any later version.
9 This library is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 Lesser General Public License for more details.
14 You should have received a copy of the GNU Lesser General Public
15 License along with this library; if not, write to the Free Software
16 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19 #include "tg_db_manager.h"
23 #include "tg_common.h"
26 sqlite3* create_database(void)
33 dbfile_len = strlen(app_get_data_path()) + strlen(DB_FILENAME) + 1;
35 dbfile = malloc(dbfile_len + 1);
36 snprintf(dbfile, dbfile_len, "%s" DB_FILENAME, app_get_data_path());
38 ret = sqlite3_open(dbfile, &db);
42 sqlite3_busy_timeout(db, 3000);
43 //ret = sqlite3_open_v2(database_name, &db, SQLITE_OPEN_CREATE | SQLITE_OPEN_READWRITE, NULL);
50 Eina_Bool close_database(sqlite3* db)
59 Eina_Bool create_table(const char* table_name, Eina_List *column_names, Eina_List *column_types)
61 if(!table_name || ! column_names || !column_types) {
64 sqlite3* db = create_database();
67 int col_count = eina_list_count(column_names);
69 Eina_Strbuf *var_query = eina_strbuf_new();
75 eina_strbuf_append(var_query, "CREATE TABLE IF NOT EXISTS ");
76 eina_strbuf_append(var_query, table_name);
77 eina_strbuf_append(var_query, "(");
79 for(int col = 0; col < col_count ; col++) {
80 eina_strbuf_append_printf(var_query, "%s %s", eina_list_nth(column_names, col), eina_list_nth(column_types, col));
82 if (col < col_count - 1)
83 eina_strbuf_append(var_query, ", ");
85 eina_strbuf_append(var_query, ");");
88 ret = sqlite3_exec(db,eina_strbuf_string_get(var_query), NULL, NULL, &err_msg);
90 eina_strbuf_free(var_query);
91 if( ret != SQLITE_OK ){
92 LOGE("table cretion failed, %s", err_msg);
93 sqlite3_free(err_msg);
99 Eina_Bool insert_table(const char* table_name, Eina_List *column_names, Eina_List *column_types, Eina_List *column_values)
101 if( !table_name || ! column_names || !column_types || !column_values)
104 sqlite3* db = create_database();
107 int col_count = eina_list_count(column_names);
108 Eina_Strbuf *var_query = eina_strbuf_new();
114 eina_strbuf_append(var_query, "INSERT INTO ");
115 eina_strbuf_append(var_query, table_name);
116 eina_strbuf_append(var_query, "(");
118 for(int col = 0; col < col_count ; col++) {
120 char *col_name = eina_list_nth(column_names, col);
121 eina_strbuf_append(var_query, col_name);
123 if (col < col_count - 1)
124 eina_strbuf_append(var_query, ",");
126 eina_strbuf_append(var_query, ") VALUES (");
129 int col_val_count = eina_list_count(column_values);
131 for(int col = 0; col < col_val_count ; col++) {
133 char *col_type = eina_list_nth(column_types, col);
134 if (!strcmp(col_type, "INTEGER") || !strcmp(col_type, "INTEGER PRIMARY KEY NOT NULL")) {
136 eina_strbuf_append_printf(var_query, "%d", *((int*)eina_list_nth(column_values, col)));
137 } else if (!strcmp(col_type, "TEXT") || !strcmp(col_type, "TEXT PRIMARY KEY NOT NULL")) {
139 char* escaped_text = replace(eina_list_nth(column_values, col), '\'', "''");
141 eina_strbuf_append_printf(var_query, "'%s'", escaped_text);
146 if (col < col_count - 1)
147 eina_strbuf_append(var_query, ", ");
149 eina_strbuf_append(var_query, ");");
152 ret = sqlite3_exec(db,eina_strbuf_string_get(var_query), NULL, NULL, &err_msg);
154 eina_strbuf_free(var_query);
155 if ( ret != SQLITE_OK ) {
156 sqlite3_free(err_msg);
163 Eina_Bool update_table(const char* table_name, Eina_List *column_names, Eina_List *column_types, Eina_List *column_values, const char* where_clause)
165 if(!table_name || ! column_names || !column_types || !column_values) {
168 sqlite3* db = create_database();
171 int col_count = eina_list_count(column_names);
173 Eina_Strbuf *var_query = eina_strbuf_new();
179 eina_strbuf_append(var_query, "UPDATE ");
180 eina_strbuf_append(var_query, table_name);
181 eina_strbuf_append(var_query, " SET ");
183 int col_val_count = eina_list_count(column_values);
185 for(int col = 0; col < col_val_count ; col++) {
186 char* col_name = eina_list_nth(column_names, col);
187 char* col_type = eina_list_nth(column_types, col);
189 if(!strcmp(col_type, "INTEGER") || !strcmp(col_type, "INTEGER PRIMARY KEY NOT NULL")) {
191 eina_strbuf_append_printf(var_query, "%s = %d", col_name, *((int*)eina_list_nth(column_values, col)));
193 } else if(!strcmp(col_type, "TEXT") || !strcmp(col_type, "TEXT PRIMARY KEY NOT NULL")) {
195 char* escaped_text = replace(eina_list_nth(column_values, col), '\'', "''");
197 eina_strbuf_append_printf(var_query, "%s = '%s'", col_name, escaped_text);
202 if (col < col_count - 1)
203 eina_strbuf_append(var_query, ", ");
205 eina_strbuf_append(var_query, " ");
208 eina_strbuf_append(var_query, "WHERE ");
209 eina_strbuf_append(var_query, where_clause);
210 eina_strbuf_append(var_query, ";");
212 ret = sqlite3_exec(db, eina_strbuf_string_get(var_query), NULL, NULL, &err_msg);
215 eina_strbuf_free(var_query);
216 if( ret != SQLITE_OK ){
217 sqlite3_free(err_msg);
224 Eina_Bool create_index(const char* table_name, const char *column_name)
226 if (table_name == NULL || column_name == NULL) {
227 ERR("Invalid Parameter");
232 char *query_format = "CREATE INDEX tg_index_%s_%s ON %s (%s);";
233 char *query_string = NULL;
234 int query_length = strlen(query_format) + strlen(table_name) + (strlen(column_name) * 2) + 20;
236 Eina_Bool result = EINA_FALSE;
238 query_string = malloc(query_length);
240 if (query_string == NULL) {
241 ERR("malloc failed");
245 snprintf(query_string, query_length, query_format, table_name, column_name, table_name, column_name);
247 sqlite3* db = create_database();
254 ret = sqlite3_exec(db, query_string, NULL, NULL, &err_msg);
256 if (ret != SQLITE_OK) {
257 DBG("sqlite3_exec failed [%d][%s]", ret, err_msg);
274 Eina_Bool get_values_from_table(const char* table_name, Eina_List *column_names, int (*callback)(void*,int,char**,char**), const char* where_clause, void* data_to_callback)
280 if (get_number_of_rows(table_name, NULL) == 0) {
281 DBG("There are no rows on [%s]", table_name);
285 sqlite3* db = create_database();
289 Eina_Strbuf *var_query = eina_strbuf_new();
295 eina_strbuf_append(var_query, "SELECT ");
298 var_query = realloc(var_query, strlen(var_query) + 3);
299 eina_strbuf_append(var_query, "* ");
302 int col_count = eina_list_count(column_names);
303 char* col_name = NULL;
304 for(int col = 0; col < col_count ; col++) {
305 eina_strbuf_append(var_query, eina_list_nth(column_names, col));
306 if (col < col_count - 1)
307 eina_strbuf_append(var_query, ", ");
309 eina_strbuf_append(var_query, " ");
313 eina_strbuf_append(var_query, "FROM ");
314 eina_strbuf_append(var_query, table_name);
317 eina_strbuf_append(var_query, " WHERE ");
318 eina_strbuf_append(var_query, where_clause);
320 eina_strbuf_append(var_query, ";");
322 ret = sqlite3_exec(db, eina_strbuf_string_get(var_query), callback,(void*)data_to_callback, &err_msg);
324 eina_strbuf_free(var_query);
325 if( ret != SQLITE_OK ){
326 sqlite3_free(err_msg);
332 int get_number_of_rows(const char* table_name, char* where_clause)
338 sqlite3* db = create_database();
339 char* row_cnt_qry = (char *)malloc(strlen("SELECT COUNT(*) FROM ") + strlen(table_name) + 1);
340 strcpy(row_cnt_qry, "SELECT COUNT(*) FROM ");
341 strcat(row_cnt_qry, table_name);
344 row_cnt_qry = realloc(row_cnt_qry, strlen(row_cnt_qry)+strlen(" WHERE ") + 1);
345 strcat(row_cnt_qry, " WHERE ");
346 row_cnt_qry = realloc(row_cnt_qry, strlen(row_cnt_qry)+strlen(where_clause) + 1);
347 strcat(row_cnt_qry, where_clause);
349 row_cnt_qry = realloc(row_cnt_qry, strlen(row_cnt_qry) + 2);
350 strcat(row_cnt_qry, ";");
353 if (sqlite3_prepare_v2(db, row_cnt_qry, -1, &stmt, NULL) == SQLITE_OK) {
354 if (sqlite3_step(stmt) == SQLITE_ERROR) {
357 no_of_rows = sqlite3_column_int(stmt, 0);
359 sqlite3_finalize(stmt);
366 Eina_List *get_values_from_table_sync_order_by(const char* table_name, Eina_List *column_names, Eina_List *column_types, const char* order_column, Eina_Bool is_asc, const char* where_clause, unsigned int limit, unsigned int offset)
368 Eina_List *query_vals = NULL;
373 /*****No rows identification*****/
374 if (get_number_of_rows(table_name, NULL) == 0) {
375 DBG("There are no rows on [%s]", table_name);
379 /********************************/
381 sqlite3* db = create_database();
384 //int col_count = eina_list_count(column_names);
386 int str_len = strlen("SELECT ") + 1;
387 char* var_query = (char *)malloc(str_len);
388 strcpy(var_query,"SELECT ");
390 var_query = realloc(var_query, strlen(var_query) + 3);
391 strcat(var_query, "* ");
394 int col_count = eina_list_count(column_names);
395 char* col_name = NULL;
396 for(int col = 0; col < col_count ; col++) {
397 col_name = eina_list_nth(column_names, col);
398 var_query = realloc(var_query, strlen(var_query)+strlen(col_name) + 1);
399 strcat(var_query, col_name);
401 var_query = realloc(var_query, strlen(var_query)+strlen(" ") + 1);
403 if(col < col_count - 1){
404 var_query = realloc(var_query, strlen(var_query) + 3);
405 strcat(var_query, ", ");
407 var_query = realloc(var_query, strlen(var_query) + 2);
408 strcat(var_query, " ");
414 var_query = realloc(var_query, strlen(var_query) + strlen("FROM ") + 2);
415 strcat(var_query, "FROM ");
416 var_query = realloc(var_query, strlen(var_query) + strlen(table_name) + 1);
417 strcat(var_query, table_name);
420 var_query = realloc(var_query, strlen(var_query)+strlen(" WHERE ") + 1);
421 strcat(var_query, " WHERE ");
422 var_query = realloc(var_query, strlen(var_query)+strlen(where_clause) + 1);
423 strcat(var_query, where_clause);
427 var_query = realloc(var_query, strlen(var_query)+strlen(" ORDER BY ") + 1);
428 strcat(var_query, " ORDER BY ");
429 var_query = realloc(var_query, strlen(var_query)+strlen(order_column) + 1);
430 strcat(var_query, order_column);
432 if (strcmp(order_column, "date") != 0) {
433 /* If the order column is INTEGER type, removing COLLATE NOCASE and creating index make better performance
434 Case 1: SELECT * from tg_9595_msg ORDER BY date COLLATE NOCASE ASC LIMIT 1000 OFFSET 0;
436 Case 2: SELECT * from tg_9595_msg ORDER BY date ASC LIMIT 1000 OFFSET 0; + CREATE INDEX msg_idx_date ON tg_9595_msg (date);
437 Run Time: real 1.067 */
438 var_query = realloc(var_query, strlen(var_query)+strlen(" COLLATE NOCASE ") + 1);
439 strcat(var_query, " COLLATE NOCASE ");
443 var_query = realloc(var_query, strlen(var_query)+strlen(" ASC ") + 1);
444 strcat(var_query, " ASC ");
446 var_query = realloc(var_query, strlen(var_query)+strlen(" DESC ") + 1);
447 strcat(var_query, " DESC ");
451 if (limit != TG_DBMGR_NOLIMITED) {
452 if (limit > 4000000000 && offset > 4000000000) {
453 /* too big size to handle. ignore */
456 char limit_clause[50] = { 0, };
457 snprintf(limit_clause, 50, " LIMIT %d OFFSET %d ", limit, offset);
458 var_query = realloc(var_query, strlen(var_query) + strlen(limit_clause) + 1);
459 strcat(var_query, limit_clause);
463 var_query = realloc(var_query, strlen(var_query) + 2);
464 strcat(var_query, ";");
467 ret = sqlite3_prepare_v2(db, var_query, -1, &stmt, 0);
470 if( ret != SQLITE_OK ){
471 sqlite3_free(err_msg);
475 while(sqlite3_step(stmt) == SQLITE_ROW) {
476 int col_val_count = eina_list_count(column_names);
477 Eina_List *row_vals = NULL;
478 for(int col = 0; col < col_val_count ; col++) {
479 char* col_type = eina_list_nth(column_types, col);
480 if(!strcmp(col_type, "INTEGER") || !strcmp(col_type, "INTEGER PRIMARY KEY NOT NULL")) {
481 long long temp = sqlite3_column_int64(stmt, col);
482 int* val_int = (int *)malloc(sizeof(int));
484 row_vals = eina_list_append(row_vals, val_int);
485 } else if(!strcmp(col_type, "TEXT") || !strcmp(col_type, "TEXT PRIMARY KEY NOT NULL")) {
486 char *temp_val = (char *)sqlite3_column_text(stmt, col);
487 char *val_text = NULL;
489 val_text = strdup(temp_val);
491 val_text = strdup("");
493 row_vals = eina_list_append(row_vals, val_text);
496 query_vals = eina_list_append(query_vals, row_vals);
503 Eina_List *get_values_from_table_sync(const char* table_name, Eina_List *column_names, Eina_List *column_types, const char* wc, unsigned int limit, unsigned int offset)
505 return get_values_from_table_sync_order_by(table_name, column_names, column_types, NULL, EINA_FALSE, wc, limit, offset);
515 LOGD("Already initialized");
519 ret = sqlite3_open(s_info.database_name, &s_info.db);
520 if(ret != SQLITE_OK) {
535 sqlite3_close(s_info.db);
542 Eina_List *tg_db_get_user_info(tgl_peer_id_t *user_id)
548 const char *val_text;
549 sqlite3* db = create_database();
550 ret = sqlite3_prepare_v2(db, "SELECT " \
551 "print_name, structure_version, " \
552 "photo_path, photo_id, " \
553 "first_name, last_name, " \
554 "phone, access_hash, " \
555 "real_first_name, real_last_name, " \
556 "username, online, last_seen " \
557 "FROM user_info_table WHERE user_id = ?", -1, &stmt, NULL);
558 if (ret != SQLITE_OK) {
562 ret = sqlite3_bind_int(stmt, 1, user_id->id);
563 if (ret != SQLITE_OK) {
564 sqlite3_finalize(stmt);
569 while (sqlite3_step(stmt) == SQLITE_ROW) {
570 info = calloc(1, sizeof(*info));
576 LOGE("calloc: %d", errno);
580 val_text = (const char *)sqlite3_column_text(stmt, 0);
581 if (val_text && val_text[0] != '\0') {
582 info->print_name = strdup(val_text);
583 if (!info->print_name) {
584 LOGE("strdup: %d", errno);
588 info->structure_version = sqlite3_column_int(stmt, 1);
589 val_text = (const char *)sqlite3_column_text(stmt, 2);
590 if (val_text && val_text[0] != '\0') {
591 info->photo_path = strdup(val_text);
592 if (!info->photo_path) {
593 LOGE("strdup: %d", errno);
597 info->photo_id = sqlite3_column_int(stmt, 3);
599 val_text = (const char *)sqlite3_column_text(stmt, 4);
600 if (val_text && val_text[0] != '\0') {
601 info->first_name = strdup(val_text);
602 if (!info->first_name) {
603 LOGE("strdup: %d", errno);
607 val_text = (const char *)sqlite3_column_text(stmt, 5);
608 if (val_text && val_text[0] != '\0') {
609 info->last_name = strdup(val_text);
610 if (!info->last_name) {
611 LOGE("strdup: %d", errno);
615 val_text = (const char *)sqlite3_column_text(stmt, 6);
616 if (val_text && val_text[0] != '\0') {
617 info->phone = strdup(val_text);
619 LOGE("strdup: %d", errno);
623 info->access_hash = sqlite3_column_int(stmt, 7);
625 val_text = (const char *)sqlite3_column_text(stmt, 8);
626 if (val_text && val_text[0] != '\0') {
627 info->real_first_name = strdup(val_text);
628 if (!info->real_first_name) {
629 LOGE("strdup: %d", errno);
633 val_text = (const char *)sqlite3_column_text(stmt, 9);
634 if (val_text && val_text[0] != '\0') {
635 info->real_last_name = strdup(val_text);
636 if (!info->real_last_name) {
637 LOGE("strdup: %d", errno);
641 val_text = (const char *)sqlite3_column_text(stmt, 10);
642 if (val_text && val_text[0] != '\0') {
643 info->username = strdup(val_text);
644 if (!info->username) {
645 LOGE("strdup: %d", errno);
649 info->online = sqlite3_column_int(stmt, 11);
650 info->last_seen = sqlite3_column_int(stmt, 12);
652 memcpy(&info->user_id, user_id, sizeof(*user_id));
654 result = eina_list_append(result, info);
657 sqlite3_finalize(stmt);
661 Eina_List *tg_db_get_chat_info(const char *table_name)
663 Eina_List *result = NULL;
664 tg_chat_info_s *info;
668 sqlite3* db = create_database();
669 ret = sqlite3_prepare_v2(db, "SELECT chat_id, " \
670 "flags, print_title, struct_version, " \
671 "photo_id, photo_path, " \
673 "users_num, user_list_size, user_list_version, " \
674 "inviter_id, chat_users, date, version, admin_id FROM ?", -1, &stmt, NULL);
676 if (ret != SQLITE_OK) {
677 LOGE("Failed to create a stmt");
681 ret = sqlite3_bind_text(stmt, 1, table_name, -1, SQLITE_TRANSIENT);
682 if (ret != SQLITE_OK) {
683 LOGE("Failed to bind a text");
687 while (sqlite3_step(stmt) == SQLITE_ROW) {
688 info = calloc(1, sizeof(*info));
690 LOGE("calloc: %d", errno);
693 info->chat_id = sqlite3_column_int(stmt, 0);
694 info->flags = sqlite3_column_int(stmt, 1);
695 tmp = (const char *)sqlite3_column_text(stmt, 2);
696 if (tmp && tmp[0] != '\0') {
697 info->print_title = strdup(tmp);
698 if (!info->print_title) {
699 LOGE("strdup: %d", errno);
702 info->struct_version = sqlite3_column_int(stmt, 3);
703 info->photo_id = sqlite3_column_int64(stmt, 4);
704 tmp = (const char *)sqlite3_column_text(stmt, 5);
705 if (tmp && tmp[0] != '\0') {
706 info->photo_path = strdup(tmp);
707 if (!info->photo_path) {
708 LOGE("strdup: %d", errno);
711 tmp = (const char *)sqlite3_column_text(stmt, 6);
712 if (tmp && tmp[0] != '\0') {
713 info->title = strdup(tmp);
715 LOGE("strdup: %d", errno);
718 info->users_num = sqlite3_column_int(stmt, 7);
719 info->user_list_size = sqlite3_column_int(stmt, 8);
720 info->user_list_version = sqlite3_column_int(stmt, 9);
721 info->inviter_id = sqlite3_column_int(stmt, 10);
723 tmp = (const char *)sqlite3_column_text(stmt, 11);
724 if (tmp && tmp[0] != '\0') {
732 for (i = 0; i < info->users_num && *ptr && i < (sizeof(info->chat_users) / sizeof(int)); i++) {
735 while (*tmp_ptr != ',' && *tmp_ptr != '\0') {
740 info->chat_users[i] = atoi(ptr);
744 if (i != info->users_num) {
746 * There is some problem.
747 * The count of loaded user is not correct.
750 LOGD("Update user_num: %d -> %d", info->users_num, i);
758 info->date = sqlite3_column_int(stmt, 12);
759 info->version = sqlite3_column_int(stmt, 13);
760 info->admin_id = sqlite3_column_int(stmt, 14);
761 result = eina_list_append(result, info);
764 sqlite3_finalize(stmt);
769 tg_peer_info_s *tg_db_get_peer_info(const char *table, int peer_id)
771 tg_peer_info_s *info;
775 sqlite3* db = create_database();
776 ret = sqlite3_prepare_v2(db, "SELECT peer_type, flags, last_msg_id, last_msg_date, print_name, struct_version, no_of_unread_msgs, last_seen_time, photo_path, photo_id FROM ? WHERE peer_id = ?", -1, &stmt, NULL);
777 if (ret != SQLITE_OK) {
781 ret = sqlite3_bind_text(stmt, 1, table, -1, SQLITE_TRANSIENT);
782 if (ret != SQLITE_OK) {
783 sqlite3_finalize(stmt);
787 ret = sqlite3_bind_int(stmt, 2, peer_id);
788 if (ret != SQLITE_OK) {
789 sqlite3_finalize(stmt);
793 if (sqlite3_step(stmt) != SQLITE_ROW) {
794 sqlite3_finalize(stmt);
798 info = calloc(1, sizeof(*info));
800 sqlite3_finalize(stmt);
804 info->peer_id = peer_id;
805 info->peer_type = sqlite3_column_int(stmt, 0);
806 info->flags = sqlite3_column_int(stmt, 1);
807 info->last_msg_id = sqlite3_column_int64(stmt, 2);
808 info->last_msg_date = sqlite3_column_int(stmt, 3);
809 tmp = (const char *)sqlite3_column_text(stmt, 4);
810 if (tmp && tmp[0] != '\0') {
811 info->print_name = strdup(tmp);
812 if (!info->print_name) {
813 LOGE("strdup: %d", errno);
816 info->struct_version = sqlite3_column_int(stmt, 5);
817 info->no_of_unread_msgs = sqlite3_column_int(stmt, 6);
818 info->last_seen_time = sqlite3_column_int(stmt, 7);
820 tmp = (const char *)sqlite3_column_text(stmt, 8);
821 if (tmp && tmp[0] != '\0') {
822 info->photo_path = strdup(tmp);
823 if (!info->photo_path) {
824 LOGE("strdup: %d\n", errno);
828 info->photo_id = sqlite3_column_int64(stmt, 9);
830 sqlite3_finalize(stmt);
835 Eina_List *tg_db_get_messages(const char *table_name)
842 sqlite3* db = create_database();
843 ret = sqlite3_prepare_v2(db, "SELECT msg_id, flags, fwd_from_id, fwd_date, from_id, to_id, out, unread, date, service, message, msg_state, message_len, media_type, media_id, unique_id FROM ?", -1, &stmt, NULL);
844 if (ret != SQLITE_OK) {
848 ret = sqlite3_bind_text(stmt, 1, table_name, -1, SQLITE_TRANSIENT);
849 if (ret != SQLITE_OK) {
850 sqlite3_finalize(stmt);
855 while (sqlite3_step(stmt) == SQLITE_OK) {
856 info = calloc(1, sizeof(*info));
858 LOGE("calloc: %d", errno);
862 info->msg_id = sqlite3_column_int(stmt, 0);
863 info->flags = sqlite3_column_int(stmt, 1);
864 info->fwd_from_id = sqlite3_column_int(stmt, 2);
865 info->fwd_date = sqlite3_column_int(stmt, 3);
866 info->from_id = sqlite3_column_int(stmt, 4);
867 info->to_id = sqlite3_column_int(stmt, 5);
868 info->out = sqlite3_column_int(stmt, 6);
869 info->unread = sqlite3_column_int(stmt, 7);
870 info->date = sqlite3_column_int(stmt, 8);
871 info->service = sqlite3_column_int(stmt, 9);
872 tmp = (const char *)sqlite3_column_text(stmt, 10);
873 if (tmp && tmp[0] != '\0') {
874 info->message = strdup(tmp);
875 if (!info->message) {
876 LOGE("strdup: %d", errno);
879 info->msg_state = sqlite3_column_int(stmt, 11);
880 info->message_len = sqlite3_column_int(stmt, 12);
881 info->media_type = sqlite3_column_int(stmt, 13);
882 tmp = (const char *)sqlite3_column_text(stmt, 14);
883 if (tmp && tmp[0] != '\0') {
884 info->media_id = strdup(tmp);
885 if (!info->media_id) {
886 LOGE("strdup: %d", errno);
889 info->unique_id = sqlite3_column_int(stmt, 15);
890 result = eina_list_append(result, info);
893 sqlite3_finalize(stmt);
898 Eina_Bool delete_all_records(char *tablename)
903 char *var_query = (char *)malloc(strlen("DELETE FROM ") + strlen(tablename) + strlen(";") + 1);
904 strcpy(var_query, "DELETE FROM ");
905 strcat(var_query, tablename);
906 strcat(var_query, ";");
909 sqlite3* db = create_database();
910 ret = sqlite3_exec(db,var_query, NULL, NULL, &err_msg);
913 if( ret != SQLITE_OK ){
914 sqlite3_free(err_msg);