From db5727c479abcb45f0b3aac515002ec89ed7b6f9 Mon Sep 17 00:00:00 2001 From: Bent Bisballe Nyeng Date: Sun, 24 Apr 2022 20:25:26 +0200 Subject: First steps towards krecipes support. --- src/database.cc | 159 -------------------------------------------------------- 1 file changed, 159 deletions(-) (limited to 'src/database.cc') diff --git a/src/database.cc b/src/database.cc index 60b8814..207a114 100644 --- a/src/database.cc +++ b/src/database.cc @@ -25,162 +25,3 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ #include "database.h" - -#include -#include - -// https://www.tutorialspoint.com/sqlite/sqlite_c_cpp.htm - -Database::Database(const std::string& file) -{ - auto rc = sqlite3_open(file.data(), &db); // https://sqlite.org/c3ref/open.html - if(rc) - { - std::cerr << "Can't open database: " << sqlite3_errmsg(db) << '\n'; - return; - } - else - { - std::cout << "Opened database successfully\n"; - } -} - -Database::~Database() -{ - sqlite3_close(db); -} - -namespace -{ -std::string getString(sqlite3_stmt *statement, int index) -{ - int size = sqlite3_column_bytes(statement, index); - std::string str; - str.append((const char*)sqlite3_column_blob(statement, index), size); - return str; -} -} // :: - -std::deque Database::getRecipes() -{ - std::deque items; - - std::string sql = "select id, title, image from recipe"; - sqlite3_stmt *statement; - if(sqlite3_prepare_v2(db, sql.data(), sql.length(), &statement, 0) != SQLITE_OK) - { - std::cerr << "sqlite3_prepare_v2 failed: " << sqlite3_errmsg(db) << '\n'; - return {}; - } - - int result = 0; - while(true) - { - RecipeItem item; - result = sqlite3_step(statement); - - if(result == SQLITE_ROW) - { - item.id = sqlite3_column_int(statement, 0); - - item.title = getString(statement, 1); - item.image = getString(statement, 2); - } - else - { - break; - } - items.push_back(item); - } - - return items; -} - -Recipe Database::getRecipe(int id) -{ - bool found{false}; - Recipe recipe; - - { - std::string sql = - "select id, title, description, image, instructions, source, link, cuisine, cooktime, preptime, yields, yield_unit, modifications from recipe where id=" + - std::to_string(id); - sqlite3_stmt *statement; - if(sqlite3_prepare_v2(db, sql.data(), sql.length(), &statement, 0) != SQLITE_OK) - { - std::cerr << "sqlite3_prepare_v2 failed: " << sqlite3_errmsg(db) << '\n'; - return {}; - } - - int result = 0; - while(true) - { - result = sqlite3_step(statement); - - if(result == SQLITE_ROW) - { - recipe.id = sqlite3_column_int(statement, 0); - recipe.title = getString(statement, 1); - recipe.description = getString(statement, 2); - recipe.image = getString(statement, 3); - recipe.instructions = getString(statement, 4); - recipe.source = getString(statement, 5); - if(!recipe.source.empty()) - { - recipe.source += " "; - } - recipe.source += getString(statement, 6); - recipe.cuisine = getString(statement, 7); - recipe.cooktime = sqlite3_column_int(statement, 8); - recipe.preptime = sqlite3_column_int(statement, 9); - recipe.yields = sqlite3_column_double(statement, 10); - recipe.yield_unit = getString(statement, 11); - recipe.tags.push_back(getString(statement, 12)); - } - else - { - break; - } - found = true; - } - } - - if(!found) - { - std::cerr << "id " << id << " not found\n"; - return {}; - } - - { - std::string sql = - "select amount, unit, item from ingredients where recipe_id=" + - std::to_string(id);// + " order by position asc"; - sqlite3_stmt *statement; - if(sqlite3_prepare_v2(db, sql.data(), sql.length(), &statement, 0) != SQLITE_OK) - { - std::cerr << "sqlite3_prepare_v2 failed: " << sqlite3_errmsg(db) << '\n'; - return {}; - } - - int result = 0; - while(true) - { - Ingredient ingredient; - result = sqlite3_step(statement); - - if(result == SQLITE_ROW) - { - ingredient.amount = sqlite3_column_double(statement, 0); - ingredient.unit = getString(statement, 1); - ingredient.item = getString(statement, 2); - recipe.ingredients.push_back(ingredient); - } - else - { - break; - } - } - } - - return recipe; -} -- cgit v1.2.3