From e5d35d6b643dbb8ecbd3ece2a0d84ec93cadbfc1 Mon Sep 17 00:00:00 2001 From: Bent Bisballe Nyeng Date: Sat, 23 Apr 2022 22:02:06 +0200 Subject: First contact --- src/database.cc | 127 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 127 insertions(+) create mode 100644 src/database.cc (limited to 'src/database.cc') diff --git a/src/database.cc b/src/database.cc new file mode 100644 index 0000000..5ae045a --- /dev/null +++ b/src/database.cc @@ -0,0 +1,127 @@ +/* -*- c++ -*- */ +/*************************************************************************** + * database.cc + * + * Sat Apr 23 19:09:12 CEST 2022 + * Copyright 2022 Bent Bisballe Nyeng + * deva@aasimon.org + ****************************************************************************/ + +/* + * This file is part of Qookie. + * + * Qookie is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * Qookie is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Qookie; if not, write to the Free Software + * 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); +} + +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 << "Open database failed\n"; + return {}; + } + + int result = 0; + while(true) + { + RecipeItem item; + result = sqlite3_step(statement); + + if(result == SQLITE_ROW) + { + item.id = sqlite3_column_int(statement, 0); + + int title_size = sqlite3_column_bytes(statement, 1); + item.title.append((const char*)sqlite3_column_blob(statement, 1), title_size); + + int image_size = sqlite3_column_bytes(statement, 2); + item.image.append((const char*)sqlite3_column_blob(statement, 2), image_size); + } + else + { + break; + } + items.push_back(item); + } + + return items; +} + +Recipe Database::getRecipe(int id) +{ + // TODO + + std::string sql = "select id, title, image from recipe where id=" + id; + sqlite3_stmt *statement; + if(sqlite3_prepare_v2(db, sql.data(), sql.length(), &statement, 0) != SQLITE_OK) + { + std::cerr << "Open database failed\n"; + return {}; + } + + int result = 0; + while(true) + { + Recipe item; + result = sqlite3_step(statement); + + if(result == SQLITE_ROW) + { + item.id = sqlite3_column_int(statement, 0); + + int title_size = sqlite3_column_bytes(statement, 1); + item.title.append((const char*)sqlite3_column_blob(statement, 1), title_size); + + int image_size = sqlite3_column_bytes(statement, 2); + item.image.append((const char*)sqlite3_column_blob(statement, 2), image_size); + } + else + { + break; + } + return item; + } + + return {}; // Not found +} -- cgit v1.2.3