summaryrefslogtreecommitdiff
path: root/src/database.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/database.cc')
-rw-r--r--src/database.cc159
1 files changed, 0 insertions, 159 deletions
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 <sqlite3.h>
-#include <iostream>
-
-// 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<RecipeItem> Database::getRecipes()
-{
- std::deque<RecipeItem> 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;
-}