diff --git a/repertory/librepertory/include/database/db_common.hpp b/repertory/librepertory/include/database/db_common.hpp index 64e4c3c8..db2a4c23 100644 --- a/repertory/librepertory/include/database/db_common.hpp +++ b/repertory/librepertory/include/database/db_common.hpp @@ -49,6 +49,7 @@ using db3_stmt_t = std::unique_ptr; [[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 { diff --git a/repertory/librepertory/src/database/db_update.cpp b/repertory/librepertory/src/database/db_update.cpp index b27678ad..4abc07da 100644 --- a/repertory/librepertory/src/database/db_update.cpp +++ b/repertory/librepertory/src/database/db_update.cpp @@ -114,11 +114,16 @@ auto db_update::go() const -> db_result { 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(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(context_->values.size()) + 1, + data.c_str(), -1, nullptr); }, }, context_->ands.at(static_cast(idx)).value); diff --git a/repertory/repertory_test/src/database_test.cpp b/repertory/repertory_test/src/database_test.cpp index fadea575..968c2bd6 100644 --- a/repertory/repertory_test/src/database_test.cpp +++ b/repertory/repertory_test/src/database_test.cpp @@ -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 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::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();