continue sqlite3 mini-orm

This commit is contained in:
Scott E. Graves 2024-10-01 09:31:20 -05:00
parent 95ff5dd5eb
commit ae98d199e7
3 changed files with 15 additions and 25 deletions

View File

@ -49,6 +49,7 @@ using db3_stmt_t = std::unique_ptr<sqlite3_stmt, sqlite3_statement_deleter>;
[[nodiscard]] auto execute_sql(sqlite3 &db3, const std::string &sql,
std::string &err) -> bool;
void set_journal_mode(sqlite3 &db3);
struct comp_data_t final {

View File

@ -114,11 +114,16 @@ auto db_update::go() const -> db_result<context> {
res = std::visit(
overloaded{
[this, &idx](std::int64_t data) -> std::int32_t {
return sqlite3_bind_int64(context_->stmt.get(), idx + 1, data);
return sqlite3_bind_int64(
context_->stmt.get(),
idx + static_cast<std::int32_t>(context_->values.size()) + 1,
data);
},
[this, &idx](const std::string &data) -> std::int32_t {
return sqlite3_bind_text(context_->stmt.get(), idx + 1,
data.c_str(), -1, nullptr);
return sqlite3_bind_text(
context_->stmt.get(),
idx + static_cast<std::int32_t>(context_->values.size()) + 1,
data.c_str(), -1, nullptr);
},
},
context_->ands.at(static_cast<std::size_t>(idx)).value);

View File

@ -25,6 +25,7 @@
#include "database/db_delete.hpp"
#include "database/db_insert.hpp"
#include "database/db_select.hpp"
#include "database/db_update.hpp"
#include "utils/path.hpp"
namespace repertory {
@ -111,7 +112,7 @@ TEST(database, db_insert_or_replace_query) {
.or_replace()
.column_value("column1", "test1")
.column_value("column2", "test2");
query_str = query.dump();
auto query_str = query.dump();
std::cout << query_str << std::endl;
EXPECT_STREQ(
R"(INSERT OR REPLACE INTO "table" ("column1", "column2") VALUES (?1, ?2);)",
@ -190,33 +191,16 @@ TEST(database, db_update_query) {
}
auto query = db::db_update{*db3.get(), "table"}
.column()
.column_value("column1", "moose")
.where("column1")
.equals("test1")
.and_where("column2")
.equals("test2");
auto query_str = query.dump();
std::cout << query_str << std::endl;
EXPECT_STREQ(R"(UPDATE "table" SET ;)", query_str.c_str());
// auto res = query.go();
//
// EXPECT_TRUE(res.ok());
// EXPECT_TRUE(res.has_row());
// std::size_t row_count{};
// while (res.has_row()) {
// std::optional<db::db_select::row> row;
// EXPECT_TRUE(res.get_row(row));
// EXPECT_TRUE(row.has_value());
// if (row.has_value()) {
// for (const auto &column : row.value().get_columns()) {
// std::cout << column.get_index() << ':';
// std::cout << column.get_name() << ':';
// std::cout << column.get_value<std::string>() << std::endl;
// }
// }
// ++row_count;
// }
// EXPECT_EQ(std::size_t(1U), row_count);
EXPECT_STREQ(
R"(UPDATE "table" SET "column1"=?1 WHERE ("column1"=?2 AND "column2"=?3);)",
query_str.c_str());
}
event_system::instance().stop();