From 78e7dc772b44584827d6a5d63f9340c371ba16a8 Mon Sep 17 00:00:00 2001 From: Martin Brodbeck Date: Fri, 13 Jul 2018 13:58:32 +0200 Subject: [PATCH] insert/update/delete completed --- src/core/database.cpp | 59 ++++++++++++++++++++++++++++++++++++++----- 1 file changed, 52 insertions(+), 7 deletions(-) diff --git a/src/core/database.cpp b/src/core/database.cpp index fcc4aaa..624e136 100644 --- a/src/core/database.cpp +++ b/src/core/database.cpp @@ -186,11 +186,9 @@ unsigned int Database::storeSellers(std::vector>& seller sqlite3_finalize(stmt); throw std::runtime_error(errMsg); } - seller->setState(Seller::State::OK); ++count; sqlite3_finalize(stmt); } else if (seller->getState() == Seller::State::UPDATE) { - // TODO retCode = sqlite3_prepare_v2( db_, "UPDATE sellers SET" @@ -222,12 +220,31 @@ unsigned int Database::storeSellers(std::vector>& seller sqlite3_finalize(stmt); throw std::runtime_error(errMsg); } - seller->setState(Seller::State::OK); ++count; sqlite3_finalize(stmt); } else if (seller->getState() == Seller::State::DELETE) { count += static_cast(seller->getArticles(false).size()); - // TODO + + retCode = + sqlite3_prepare_v2(db_, "DELETE FROM sellers WHERE id = :uuid", -1, &stmt, nullptr); + + if (retCode != SQLITE_OK) + throw std::runtime_error(sqlite3_errmsg(db_)); + + sqlite3_bind_text(stmt, sqlite3_bind_parameter_index(stmt, ":uuid"), + boost::uuids::to_string(seller->getUuid()).c_str(), -1, + SQLITE_TRANSIENT); + + retCode = sqlite3_step(stmt); + + if (retCode != SQLITE_DONE) { + + std::string errMsg(sqlite3_errmsg(db_)); + sqlite3_finalize(stmt); + throw std::runtime_error(errMsg); + } + ++count; + sqlite3_finalize(stmt); } if (seller->getState() != Seller::State::DELETE) { @@ -236,6 +253,17 @@ unsigned int Database::storeSellers(std::vector>& seller } endTransaction(); + + // Everything went fine, so we can now update our objects + sellers.erase( + std::remove_if(begin(sellers), end(sellers), [](const std::shared_ptr& seller) { + return seller->getState() == Seller::State::DELETE; + })); + for (const auto& seller : sellers) { + seller->cleanupArticles(); + seller->setState(Seller::State::OK); + } + return count; } @@ -279,7 +307,6 @@ unsigned int Database::storeArticles(sqlite3_stmt* stmt, std::vector a sqlite3_finalize(stmt); throw std::runtime_error(errMsg); } - article->setState(Seller::State::OK); ++count; sqlite3_finalize(stmt); } else if (article->getState() == Article::State::UPDATE) { @@ -317,11 +344,29 @@ unsigned int Database::storeArticles(sqlite3_stmt* stmt, std::vector a sqlite3_finalize(stmt); throw std::runtime_error(errMsg); } - article->setState(Seller::State::OK); ++count; sqlite3_finalize(stmt); } else if (article->getState() == Article::State::DELETE) { - // TODO + retCode = sqlite3_prepare_v2(db_, "DELETE FROM articles WHERE id = :uuid", -1, &stmt, + nullptr); + + if (retCode != SQLITE_OK) + throw std::runtime_error(sqlite3_errmsg(db_)); + + sqlite3_bind_text(stmt, sqlite3_bind_parameter_index(stmt, ":uuid"), + boost::uuids::to_string(article->getUuid()).c_str(), -1, + SQLITE_TRANSIENT); + + retCode = sqlite3_step(stmt); + + if (retCode != SQLITE_DONE) { + + std::string errMsg(sqlite3_errmsg(db_)); + sqlite3_finalize(stmt); + throw std::runtime_error(errMsg); + } + ++count; + sqlite3_finalize(stmt); } }