diff --git a/src/core/database.cpp b/src/core/database.cpp index 59e8615..348a8c2 100644 --- a/src/core/database.cpp +++ b/src/core/database.cpp @@ -608,7 +608,6 @@ unsigned int Database::loadSales(std::vector>& sales, sales.clear(); - std::map saleMap; while (retCode != SQLITE_DONE) { ++count; auto sale = std::make_unique(); @@ -616,7 +615,6 @@ unsigned int Database::loadSales(std::vector>& sales, sale->setSourceNo(sqlite3_column_int(stmt, 1)); sale->setTimestamp(reinterpret_cast(sqlite3_column_text(stmt, 2))); sale->setState(Sale::State::OK); - saleMap.insert(std::make_pair(sale->getUuidAsString(), sale.get())); sales.push_back(std::move(sale)); retCode = sqlite3_step(stmt); @@ -624,31 +622,35 @@ unsigned int Database::loadSales(std::vector>& sales, sqlite3_finalize(stmt); - std::map artMap; - for (const auto& seller : sellers) { - for (const auto article : seller->getArticles(false)) { - artMap.insert(std::make_pair(article->getUuidAsString(), article)); - } - } + for (auto& sale : sales) { + retCode = sqlite3_prepare_v2(db_, + "SELECT sale_id, article_id" + " FROM sales_items" + " WHERE sale_id = :sale_uuid", + -1, &stmt, nullptr); + if (retCode != SQLITE_OK) + throw std::runtime_error(sqlite3_errmsg(db_)); - retCode = sqlite3_prepare_v2(db_, - "SELECT sale_id, article_id" - " FROM sales_items", - -1, &stmt, nullptr); - if (retCode != SQLITE_OK) - throw std::runtime_error(sqlite3_errmsg(db_)); - - retCode = sqlite3_step(stmt); - - while (retCode != SQLITE_DONE) { - saleMap[reinterpret_cast(sqlite3_column_text(stmt, 0))]->addArticle( - artMap[reinterpret_cast(sqlite3_column_text(stmt, 1))]); + sqlite3_bind_text(stmt, sqlite3_bind_parameter_index(stmt, ":sale_uuid"), + sale->getUuidAsString().c_str(), -1, SQLITE_TRANSIENT); retCode = sqlite3_step(stmt); - } - sqlite3_finalize(stmt); - //} + while (retCode != SQLITE_DONE) { + for (auto& seller : sellers) { + auto article = seller->getArticleByUuid( + reinterpret_cast(sqlite3_column_text(stmt, 1))); + if (article != nullptr) { + sale->addArticle(article); + break; + } + } + + retCode = sqlite3_step(stmt); + } + + sqlite3_finalize(stmt); + } return count; } diff --git a/src/core/marketplace.h b/src/core/marketplace.h index 5fc8ae2..41be492 100644 --- a/src/core/marketplace.h +++ b/src/core/marketplace.h @@ -56,9 +56,9 @@ class Marketplace friend class ExcelReader; private: - SellersVec sellers_; - SalesVec sales_; - BasketVec basket_; + SellersVec sellers_{500}; + SalesVec sales_{50000}; + BasketVec basket_{50}; }; double marketFee(int sumInCent, int percent, int maxFeeInCent);