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, [[nodiscard]] auto execute_sql(sqlite3 &db3, const std::string &sql,
std::string &err) -> bool; std::string &err) -> bool;
void set_journal_mode(sqlite3 &db3); void set_journal_mode(sqlite3 &db3);
struct comp_data_t final { struct comp_data_t final {

View File

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

View File

@ -25,6 +25,7 @@
#include "database/db_delete.hpp" #include "database/db_delete.hpp"
#include "database/db_insert.hpp" #include "database/db_insert.hpp"
#include "database/db_select.hpp" #include "database/db_select.hpp"
#include "database/db_update.hpp"
#include "utils/path.hpp" #include "utils/path.hpp"
namespace repertory { namespace repertory {
@ -111,7 +112,7 @@ TEST(database, db_insert_or_replace_query) {
.or_replace() .or_replace()
.column_value("column1", "test1") .column_value("column1", "test1")
.column_value("column2", "test2"); .column_value("column2", "test2");
query_str = query.dump(); auto query_str = query.dump();
std::cout << query_str << std::endl; std::cout << query_str << std::endl;
EXPECT_STREQ( EXPECT_STREQ(
R"(INSERT OR REPLACE INTO "table" ("column1", "column2") VALUES (?1, ?2);)", 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"} auto query = db::db_update{*db3.get(), "table"}
.column() .column_value("column1", "moose")
.where("column1") .where("column1")
.equals("test1") .equals("test1")
.and_where("column2") .and_where("column2")
.equals("test2"); .equals("test2");
auto query_str = query.dump(); auto query_str = query.dump();
std::cout << query_str << std::endl; std::cout << query_str << std::endl;
EXPECT_STREQ(R"(UPDATE "table" SET ;)", query_str.c_str()); EXPECT_STREQ(
// auto res = query.go(); R"(UPDATE "table" SET "column1"=?1 WHERE ("column1"=?2 AND "column2"=?3);)",
// query_str.c_str());
// 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);
} }
event_system::instance().stop(); event_system::instance().stop();