#include #include "db.h" #include "util.h" const char * get_db_path() { return check_get_env("NEWSRAFT_DB_PATH"); } bool db_init() { int result = sqlite3_open(get_db_path(), &db); if (result != SQLITE_OK) { fprintf(stderr, "Can't open database: %s", sqlite3_errmsg(db)); sqlite3_close(db); return false; } return true; } void db_clean() { sqlite3_close(db); } struct feed * get_db_feeds() { char *query; size_t total_feeds = get_feed_count(); if (total_feeds == 0) { return NULL; } struct feed *feeds = calloc(sizeof(struct feed), total_feeds); query = "select feed_url,title from feeds;"; int result = sqlite3_prepare_v2(db, query, -1, &statement, NULL); if (result == SQLITE_OK) { for (size_t i = 0; sqlite3_step(statement) != SQLITE_DONE; i++) { char *url = (char*)sqlite3_column_text(statement, 0); char *title = (char*)sqlite3_column_text(statement, 1); feeds[i] = create_feed(url, title); } } #ifdef DEBUG for (size_t i = 0; i < total_feeds; i++) { printf("%s, %s\n", feeds[i].title, feeds[i].url); } #endif sqlite3_finalize(statement); return feeds; } size_t get_feed_count() { char* query = "select count(*) from feeds;"; int result = sqlite3_prepare_v2(db, query, -1, &statement, NULL); int total_feeds = 0; if (result == SQLITE_OK) { while(sqlite3_step(statement) != SQLITE_DONE) { total_feeds = sqlite3_column_int(statement, 0); printf("%d\n", total_feeds); } } sqlite3_finalize(statement); return total_feeds; } //size_t get_item_count() { //}