Compare commits

...

3 Commits

Author SHA1 Message Date
Sascha Kühl 881e93e0f6 added markers for handling insert 2026-02-10 16:30:39 +01:00
Sascha Kühl 40b163ac39 pass query_context to execute 2026-02-10 13:17:05 +01:00
Sascha Kühl 99677b0e21 introduced execute_result 2026-02-10 11:57:09 +01:00
28 changed files with 171 additions and 175 deletions

View File

@ -31,7 +31,7 @@ public:
[[nodiscard]] utils::result<utils::version, utils::error> client_version() const override;
[[nodiscard]] utils::result<utils::version, utils::error> server_version() const override;
utils::result<size_t, utils::error> execute(const std::string &stmt) override;
utils::result<sql::execute_result, utils::error> execute(const sql::query_context &context) override;
utils::result<std::unique_ptr<sql::statement_impl>, utils::error> prepare(const sql::query_context &context) override;
utils::result<std::unique_ptr<sql::query_result_impl>, utils::error> fetch(const sql::query_context &context) override;

View File

@ -14,7 +14,7 @@ public:
postgres_statement(PGconn *db, PGresult *res, std::string name, const sql::query_context &query);
~postgres_statement() override;
utils::result<size_t, utils::error> execute(const sql::parameter_binder& bindings) override;
utils::result<sql::execute_result, utils::error> execute(const sql::parameter_binder& bindings) override;
utils::result<std::unique_ptr<sql::query_result_impl>, utils::error> fetch(const sql::parameter_binder& bindings) override;
protected:

View File

@ -142,18 +142,21 @@ utils::result<std::unique_ptr<sql::statement_impl>, utils::error> postgres_conne
return utils::ok(std::move(s));
}
utils::result<size_t, utils::error> postgres_connection::execute(const std::string &stmt) {
PGresult *res = PQexec(conn_, stmt.c_str());
utils::result<sql::execute_result, utils::error> postgres_connection::execute(const sql::query_context &context) {
if (context.command == sql::sql_command::Insert) {
// handle insert command with the primary key generator strategy
}
PGresult *res = PQexec(conn_, context.sql.c_str());
if (const auto status = PQresultStatus(res); status != PGRES_COMMAND_OK && status != PGRES_TUPLES_OK) {
return utils::failure(make_error(sql::error_code::FAILURE, res, conn_, "Failed to execute", stmt));
return utils::failure(make_error(sql::error_code::FAILURE, res, conn_, "Failed to execute", context.sql));
}
const auto affected_rows = utils::to<size_t>(PQcmdTuples(res));
const size_t affected_rows = utils::to<size_t>(PQcmdTuples(res));
PQclear(res);
return utils::ok(static_cast<size_t>(affected_rows));
return utils::ok(sql::execute_result{affected_rows});
}
utils::basic_type oid2type(const Oid oid) {

View File

@ -1,4 +1,6 @@
#include "postgres_statement.hpp"
#include "matador/sql/execute_result.hpp"
#include "postgres_error.hpp"
#include "postgres_parameter_binder.h"
#include "postgres_result_reader.hpp"
@ -16,11 +18,16 @@ postgres_statement::~postgres_statement() {
PQclear(res_);
}
utils::result<size_t, utils::error> postgres_statement::execute(const sql::parameter_binder& bindings) {
utils::result<sql::execute_result, utils::error> postgres_statement::execute(const sql::parameter_binder& bindings) {
const auto* postgres_bindings = dynamic_cast<const postgres_parameter_binder*>(&bindings);
if (!postgres_bindings) {
return utils::failure(utils::error(sql::error_code::EXECUTE_FAILED, "Failed to cast bindings to postgres bindings"));
}
if (query_.command == sql::sql_command::Insert) {
// handle insert command with the primary key generator strategy
}
PGresult *res = PQexecPrepared(db_,
name_.c_str(),
static_cast<int>(postgres_bindings->params().values.size()),
@ -40,7 +47,7 @@ utils::result<size_t, utils::error> postgres_statement::execute(const sql::param
PQclear(res);
return utils::ok(value);
return utils::ok(sql::execute_result{value});
}
utils::result<std::unique_ptr<sql::query_result_impl>, utils::error> postgres_statement::fetch(const sql::parameter_binder& bindings) {

View File

@ -130,14 +130,14 @@ public:
[[nodiscard]] utils::result<sql::query_result<sql::record>, utils::error>
fetch_all(const sql::query_context &q) const;
[[nodiscard]] utils::result<size_t, utils::error> execute(const std::string &sql) const;
[[nodiscard]] utils::result<sql::execute_result, utils::error> execute(const std::string &sql) const;
[[nodiscard]] std::vector<object::attribute> describe_table(const std::string &table_name) const;
[[nodiscard]] bool table_exists(const std::string &table_name) const;
[[nodiscard]] utils::result<std::unique_ptr<sql::query_result_impl>, utils::error> fetch(
const sql::query_context &ctx) const override;
[[nodiscard]] utils::result<size_t, utils::error> execute(const sql::query_context &ctx) const override;
[[nodiscard]] utils::result<sql::execute_result, utils::error> execute(const sql::query_context &ctx) const override;
[[nodiscard]] utils::result<sql::statement, utils::error> prepare(const sql::query_context &ctx) override;
[[nodiscard]] std::string str(const sql::query_context &ctx) const override;
[[nodiscard]] const sql::dialect &dialect() const override;

View File

@ -9,6 +9,7 @@
namespace matador::sql {
class executor;
class statement;
struct execute_result;
struct query_context;
}
@ -18,7 +19,7 @@ class executable_query : public query_intermediate {
public:
using query_intermediate::query_intermediate;
[[nodiscard]] utils::result<size_t, utils::error> execute(const sql::executor &exec) const;
[[nodiscard]] utils::result<sql::execute_result, utils::error> execute(const sql::executor &exec) const;
[[nodiscard]] utils::result<sql::statement, utils::error> prepare(sql::executor &exec) const;
[[nodiscard]] sql::query_context compile(const sql::executor &exec) const;
[[nodiscard]] std::string str(const sql::executor &exec) const;

View File

@ -5,6 +5,7 @@
#include "matador/sql/abstract_sql_logger.hpp"
#include "matador/sql/connection_info.hpp"
#include "matador/sql/execute_result.hpp"
#include "matador/sql/executor.hpp"
#include "matador/sql/resolver_service.hpp"
#include "matador/sql/statement.hpp"
@ -134,10 +135,8 @@ public:
[[nodiscard]] utils::result<bool, utils::error> exists(const std::string &schema_name, const std::string &table_name) const;
[[nodiscard]] utils::result<bool, utils::error> exists(const std::string &table_name) const;
[[nodiscard]] utils::result<size_t, utils::error> execute(const std::string &sql) const;
[[nodiscard]] utils::result<std::unique_ptr<query_result_impl>, utils::error> fetch(const query_context &ctx) const override;
[[nodiscard]] utils::result<size_t, utils::error> execute(const query_context &ctx) const override;
[[nodiscard]] utils::result<execute_result, utils::error> execute(const query_context &ctx) const override;
[[nodiscard]] utils::result<statement, utils::error> prepare(const query_context &ctx) override;
[[nodiscard]] std::string str( const query_context& ctx ) const override;

View File

@ -0,0 +1,11 @@
#ifndef MATADOR_EXECUTE_RESULT_HPP
#define MATADOR_EXECUTE_RESULT_HPP
#include <vector>
namespace matador::sql {
struct execute_result {
size_t affected_rows{};
std::vector<long long> insert_ids{};
};
}
#endif // MATADOR_EXECUTE_RESULT_HPP

View File

@ -11,6 +11,7 @@
namespace matador::sql {
struct query_context;
struct execute_result;
class query_result_impl;
class statement;
@ -18,7 +19,7 @@ class executor {
public:
virtual ~executor() = default;
[[nodiscard]] virtual const class dialect& dialect() const = 0;
[[nodiscard]] virtual utils::result<size_t, utils::error> execute(const query_context &ctx) const = 0;
[[nodiscard]] virtual utils::result<execute_result, utils::error> execute(const query_context &ctx) const = 0;
[[nodiscard]] virtual utils::result<std::unique_ptr<query_result_impl>, utils::error> fetch(const query_context &ctx) const = 0;
[[nodiscard]] virtual utils::result<statement, utils::error> prepare(const query_context &ctx) = 0;
[[nodiscard]] virtual std::string str(const query_context &ctx) const = 0;

View File

@ -6,7 +6,7 @@
#include "matador/object/attribute.hpp"
#include "matador/sql/connection_info.hpp"
#include "matador/sql/query_context.hpp"
#include "matador/sql/execute_result.hpp"
#include "matador/utils/error.hpp"
#include "matador/utils/result.hpp"
@ -18,6 +18,7 @@ using blob_type_t = std::vector<unsigned char>;
namespace matador::sql {
struct query_context;
class query_result_impl;
class statement_impl;
@ -34,7 +35,7 @@ public:
[[nodiscard]] virtual utils::result<utils::version, utils::error> client_version() const = 0;
[[nodiscard]] virtual utils::result<utils::version, utils::error> server_version() const = 0;
virtual utils::result<size_t, utils::error> execute(const std::string &stmt) = 0;
virtual utils::result<execute_result, utils::error> execute(const query_context &context) = 0;
virtual utils::result<std::unique_ptr<query_result_impl>, utils::error> fetch(const query_context &context) = 0;
virtual utils::result<std::unique_ptr<statement_impl>, utils::error> prepare(const query_context &context) = 0;

View File

@ -13,6 +13,7 @@
#include <memory>
namespace matador::sql {
struct execute_result;
class query_result_impl;
class sql_error;
@ -23,7 +24,7 @@ protected:
public:
virtual ~statement_impl() = default;
virtual utils::result<size_t, utils::error> execute(const parameter_binder& bindings) = 0;
virtual utils::result<execute_result, utils::error> execute(const parameter_binder& bindings) = 0;
virtual utils::result<std::unique_ptr<query_result_impl>, utils::error> fetch(const parameter_binder& bindings) = 0;
template < class Type >

View File

@ -12,7 +12,7 @@ protected:
public:
virtual ~statement_proxy() = default;
virtual utils::result<size_t, utils::error> execute(parameter_binder& bindings) = 0;
virtual utils::result<execute_result, utils::error> execute(parameter_binder& bindings) = 0;
virtual utils::result<std::unique_ptr<query_result_impl>, utils::error> fetch(parameter_binder& bindings) = 0;
template<class Type>

View File

@ -71,7 +71,7 @@ public:
*
* @return The number of affected rows
*/
[[nodiscard]] utils::result<size_t, utils::error> execute() const;
[[nodiscard]] utils::result<execute_result, utils::error> execute() const;
/**
* Fetches the result of the prepared

View File

@ -14,8 +14,8 @@ public:
*/
primary_key_attribute() = default;
/**
* Creates primary_key_attribute instance
* with given size.
* Creates a primary_key_attribute instance with a
* given size.
*
* @param size Size of the attribute
*/
@ -44,7 +44,7 @@ public:
[[nodiscard]] generator_type generator() const;
private:
size_t size_ = 0;
generator_type generator_ = generator_type::MANUALLY;
generator_type generator_ = generator_type::Manually;
};
const primary_key_attribute default_pk_attributes {};

View File

@ -3,11 +3,11 @@
namespace matador::utils {
enum class generator_type {
MANUALLY,
AUTO,
IDENTITY,
SEQUENCE,
TABLE
Manually, /**< User sets the primary key value manually. */
Auto, /**< Matador chooses the best generator type depending on the underlying dbms. */
Identity, /**< DBMS automatically generates the primary key value. */
Sequence, /**< DBMS automatically generates the primary key value by using a sequence table. */
Table /**< DBMS automatically generates the primary key value by using a table. */
};
}
#endif //PRIMARY_KEY_GENERATOR_TYPE_HPP

View File

@ -76,6 +76,7 @@ add_library(matador-orm STATIC
../../include/matador/sql/dialect_builder.hpp
../../include/matador/sql/dialect_token.hpp
../../include/matador/sql/error_code.hpp
../../include/matador/sql/execute_result.hpp
../../include/matador/sql/executor.hpp
../../include/matador/sql/field.hpp
../../include/matador/sql/interface/connection_impl.hpp

View File

@ -60,7 +60,7 @@ utils::result<sql::query_result<sql::record>, utils::error> session::fetch_all(c
return utils::ok(sql::query_result<sql::record>{std::move(*res), prototype});
}
utils::result<size_t, utils::error> session::execute(const std::string &sql) const {
utils::result<sql::execute_result, utils::error> session::execute(const std::string &sql) const {
return execute(sql::query_context{sql});
}
@ -102,7 +102,7 @@ utils::result<std::unique_ptr<sql::query_result_impl>, utils::error> session::fe
}
}
utils::result<size_t, utils::error> session::execute(const sql::query_context& ctx) const {
utils::result<sql::execute_result, utils::error> session::execute(const sql::query_context& ctx) const {
if (const auto result = cache_.acquire(ctx); !result) {
return utils::failure(result.err());
} else if (auto exec_result = result->execute(); !exec_result) {

View File

@ -1,12 +1,13 @@
#include "matador/query/intermediates/executable_query.hpp"
#include "matador/query/query_builder.hpp"
#include "matador/sql/execute_result.hpp"
#include "matador/sql/executor.hpp"
#include "matador/sql/statement.hpp"
namespace matador::query {
utils::result<size_t, utils::error> executable_query::execute(const sql::executor &exec) const {
utils::result<sql::execute_result, utils::error> executable_query::execute(const sql::executor &exec) const {
query_builder compiler;
return exec.execute(compiler.compile(*context_, exec.dialect(), std::nullopt));
}

View File

@ -56,7 +56,7 @@ utils::result<void, utils::error> schema::create(const sql::connection &conn) co
.compile(conn);
std::cout << ctx.sql << std::endl;
if (auto result = conn.execute(ctx.sql); !result) {
if (auto result = conn.execute(ctx); !result) {
return utils::failure(result.err());
}
}
@ -70,7 +70,7 @@ utils::result<void, utils::error> schema::create(const sql::connection &conn) co
auto ctx = build_add_constraint_context(node, cons, conn);
std::cout << ctx.sql << std::endl;
if (auto result = conn.execute(ctx.sql); !result) {
if (auto result = conn.execute(ctx); !result) {
return utils::failure(result.err());
}
}
@ -84,7 +84,7 @@ utils::result<void, utils::error> schema::create(const sql::connection &conn) co
auto ctx = build_add_constraint_context(node, cons, conn);
std::cout << ctx.sql << std::endl;
if (auto result = conn.execute(ctx.sql); !result) {
if (auto result = conn.execute(ctx); !result) {
return utils::failure(result.err());
}
}
@ -105,7 +105,7 @@ utils::result<void, utils::error> schema::drop(const sql::connection &conn) cons
.compile(conn);
std::cout << ctx.sql << std::endl;
if (auto result = conn.execute(ctx.sql); !result) {
if (auto result = conn.execute(ctx); !result) {
return utils::failure(result.err());
}
}
@ -123,7 +123,7 @@ utils::result<void, utils::error> schema::drop(const sql::connection &conn) cons
.compile(conn);
std::cout << ctx.sql << std::endl;
if (auto result = conn.execute(ctx.sql); !result) {
if (auto result = conn.execute(ctx); !result) {
return utils::failure(result.err());
}
}
@ -136,7 +136,7 @@ utils::result<void, utils::error> schema::drop(const sql::connection &conn) cons
.compile(conn);
std::cout << ctx.sql << std::endl;
if (auto result = conn.execute(ctx.sql); !result) {
if (auto result = conn.execute(ctx); !result) {
return utils::failure(result.err());
}
}

View File

@ -18,7 +18,7 @@ public:
explicit connection_statement_proxy(std::unique_ptr<statement_impl>&& stmt)
: statement_proxy(std::move(stmt)) {}
utils::result<size_t, utils::error> execute(parameter_binder& bindings) override {
utils::result<execute_result, utils::error> execute(parameter_binder& bindings) override {
return statement_->execute(bindings);
}
utils::result<std::unique_ptr<query_result_impl>, utils::error> fetch(parameter_binder& bindings) override {
@ -125,7 +125,7 @@ std::string connection::type() const {
}
utils::result<void, utils::error> connection::begin() const {
const auto res = connection_->execute(dialect().token_at(dialect_token::Begin));
const auto res = connection_->execute({dialect().begin()});
if (res.is_error()) {
return utils::failure(res.err());
}
@ -134,7 +134,7 @@ utils::result<void, utils::error> connection::begin() const {
}
utils::result<void, utils::error> connection::commit() const {
const auto res = connection_->execute(dialect().token_at(dialect_token::Commit));
const auto res = connection_->execute({dialect().commit()});
if (res.is_error()) {
return utils::failure(res.err());
}
@ -143,7 +143,7 @@ utils::result<void, utils::error> connection::commit() const {
}
utils::result<void, utils::error> connection::rollback() const {
const auto res = connection_->execute(dialect().token_at(dialect_token::Rollback));
const auto res = connection_->execute({dialect().rollback()});
if (res.is_error()) {
return utils::failure(res.err());
}
@ -163,53 +163,22 @@ utils::result<bool, utils::error> connection::exists(const std::string &table_na
return connection_->exists(dialect().default_schema_name(), table_name);
}
utils::result<size_t, utils::error> connection::execute(const std::string &sql) const {
logger_->on_execute(sql);
std::cout << sql << std::endl;
return connection_->execute(sql);
}
bool has_unknown_columns(const std::vector<object::attribute> &columns) {
return std::any_of(std::begin(columns), std::end(columns), [](const auto &col) {
return col.type() == utils::basic_type::Null;
});
}
// query_result<record> connection::fetch(const query_context &ctx) const
// {
// if (ctx.prototype.empty() || is_unknown(ctx.prototype)) {
// const auto table_prototype = describe(ctx.table.name);
// for (auto &col : ctx.prototype) {
// const auto rit = std::find_if(std::begin(table_prototype), std::end(table_prototype), [&col](const auto &value) {
// return value.name() == col.name();
// });
// if (col.type() == data_type::type_unknown && rit != table_prototype.end()) {
// const_cast<column_definition&>(col).type(rit->type());
// }
// }
// }
// // auto it = prototypes_.find(q.table_name);
// // if (it == prototypes_.end()) {
// // it = prototypes_.emplace(q.table_name, describe(q.table_name)).first;
// // }
// // // adjust columns from given query
// // for (auto &col : q.prototype) {
// // if (const auto rit = it->second.find(col.name()); col.type() == data_type_t::type_unknown && rit != it->second.end()) {
// // const_cast<column&>(col).type(rit->type());
// // }
// // }
// auto res = fetch(ctx.sql);
// return query_result<record>{std::move(res), ctx.prototype};
// }
utils::result<std::unique_ptr<query_result_impl>, utils::error> connection::fetch(const query_context &ctx) const {
logger_->on_fetch(ctx.sql);
std::cout << ctx.sql << std::endl;
return connection_->fetch(ctx);
}
utils::result<size_t, utils::error> connection::execute(const query_context& ctx) const {
return execute(ctx.sql);
utils::result<execute_result, utils::error> connection::execute(const query_context& ctx) const {
logger_->on_execute(ctx.sql);
std::cout << ctx.sql << std::endl;
return connection_->execute(ctx);
}
utils::result<statement, utils::error> connection::prepare(const query_context &ctx) {

View File

@ -1,4 +1,5 @@
#include "matador/sql/statement.hpp"
#include "matador/sql/execute_result.hpp"
#include "matador/sql/record.hpp"
#include <algorithm>
@ -49,7 +50,7 @@ statement &statement::bind(const size_t pos, std::string &val, const size_t size
return *this;
}
utils::result<size_t, utils::error> statement::execute() const {
utils::result<execute_result, utils::error> statement::execute() const {
logger_->on_execute(statement_proxy_->sql());
std::cout << statement_proxy_->sql() << std::endl;
return statement_proxy_->execute(*bindings_);

View File

@ -31,10 +31,10 @@ public:
, connection_id_(connection_id)
, bus_(bus) {}
utils::result<size_t, utils::error> execute(parameter_binder& bindings) override {
utils::result<execute_result, utils::error> execute(parameter_binder& bindings) override {
execution_metrics metrics{std::chrono::steady_clock::now()};
auto result = try_with_retry([this, &bindings, &metrics]() -> utils::result<size_t, utils::error> {
auto result = try_with_retry([this, &bindings, &metrics]() -> utils::result<execute_result, utils::error> {
const auto query = sql();
if (!try_lock()) {
++metrics.lock_attempts;

View File

@ -73,7 +73,7 @@ TEST_CASE_METHOD(QueryFixture, "Insert and select basic datatypes", "[query][dat
.values(t)
.execute(db);
REQUIRE(res.is_ok());
REQUIRE(*res == 1);
REQUIRE(res->affected_rows == 1);
auto result = query::select<types>(repo)
.from("types")
@ -110,7 +110,7 @@ TEST_CASE_METHOD( QueryFixture, "Test quoted identifier", "[query][quotes][ident
})
.execute(db);
REQUIRE(res.is_ok());
REQUIRE(*res == 0);
REQUIRE(res->affected_rows == 0);
tables_to_drop.emplace("quotes");
// check table description
@ -131,7 +131,7 @@ TEST_CASE_METHOD( QueryFixture, "Test quoted identifier", "[query][quotes][ident
.values({"Berlin", "London"})
.execute(db);
REQUIRE(res.is_ok());
REQUIRE(*res == 1);
REQUIRE(res->affected_rows == 1);
auto row = query::select({"from", "to"})
.from("quotes")
@ -147,7 +147,7 @@ TEST_CASE_METHOD( QueryFixture, "Test quoted identifier", "[query][quotes][ident
.where("from"_col == "Berlin")
.execute(db);
REQUIRE(res.is_ok());
REQUIRE(*res == 1);
REQUIRE(res->affected_rows == 1);
row = query::select({"from", "to"})
.from("quotes")
@ -182,7 +182,7 @@ TEST_CASE_METHOD( QueryFixture, "Test quoted column names", "[query][quotes][col
})
.execute(db);
REQUIRE(res.is_ok());
REQUIRE(*res == 0);
REQUIRE(res->affected_rows == 0);
const auto columns = db.describe("quotes");
REQUIRE(columns.is_ok());
@ -196,7 +196,7 @@ TEST_CASE_METHOD( QueryFixture, "Test quoted column names", "[query][quotes][col
.table("quotes")
.execute(db);
REQUIRE(res.is_ok());
REQUIRE(*res == 0);
REQUIRE(res->affected_rows == 0);
}
}
@ -208,7 +208,7 @@ TEST_CASE_METHOD(QueryFixture, "Test quoted literals", "[query][quotes][literals
})
.execute(db);
REQUIRE(res.is_ok());
REQUIRE(*res == 0);
REQUIRE(res->affected_rows == 0);
tables_to_drop.emplace("escapes");
res = query::insert()
@ -216,7 +216,7 @@ TEST_CASE_METHOD(QueryFixture, "Test quoted literals", "[query][quotes][literals
.values({"text"})
.execute(db);
REQUIRE(res.is_ok());
REQUIRE(*res == 1);
REQUIRE(res->affected_rows == 1);
auto row = query::select({"name"})
.from("escapes")
@ -230,7 +230,7 @@ TEST_CASE_METHOD(QueryFixture, "Test quoted literals", "[query][quotes][literals
.set({{"name", "text'd"}})
.execute(db);
REQUIRE(res.is_ok());
REQUIRE(*res == 1);
REQUIRE(res->affected_rows == 1);
row = query::select({"name"})
.from("escapes")
@ -244,7 +244,7 @@ TEST_CASE_METHOD(QueryFixture, "Test quoted literals", "[query][quotes][literals
.set({{"name", "text\nhello\tworld"}})
.execute(db);
REQUIRE(res.is_ok());
REQUIRE(*res == 1);
REQUIRE(res->affected_rows == 1);
row = query::select({"name"})
.from("escapes")
@ -258,7 +258,7 @@ TEST_CASE_METHOD(QueryFixture, "Test quoted literals", "[query][quotes][literals
.set({{"name", "text \"text\""}})
.execute(db);
REQUIRE(res.is_ok());
REQUIRE(*res == 1);
REQUIRE(res->affected_rows == 1);
row = query::select({"name"})
.from("escapes")
@ -350,7 +350,7 @@ TEST_CASE_METHOD(QueryFixture, "Test primary key", "[query][primary key]") {
.values(pk1)
.execute(db);
REQUIRE(res.is_ok());
REQUIRE(*res == 1);
REQUIRE(res->affected_rows == 1);
auto row = query::select<pk>(repo)
.from("pk")
@ -377,7 +377,7 @@ TEST_CASE_METHOD(QueryFixture, "Test primary key prepared", "[query][primary key
auto res = stmt->bind(pk1)
.execute();
REQUIRE(res.is_ok());
REQUIRE(*res == 1);
REQUIRE(res->affected_rows == 1);
stmt = query::select<pk>(repo)
.from("pk")
@ -418,7 +418,7 @@ TEST_CASE_METHOD(QueryFixture, "Test primary key prepared", "[query][primary key
// .table<appointment>("appointment", schema)
// .execute(db);
// REQUIRE(res.is_ok());
// REQUIRE(*res == 0);
// REQUIRE(res->affected_rows == 0);
// tables_to_drop.emplace("appointment");
//
// auto dinner = appointment{ 1, "dinner" };
@ -430,7 +430,7 @@ TEST_CASE_METHOD(QueryFixture, "Test primary key prepared", "[query][primary key
// .values(dinner)
// .execute(db);
// REQUIRE(res.is_ok());
// REQUIRE(*res == 1);
// REQUIRE(res->affected_rows == 1);
//
// auto row = query::select<appointment>(schema)
// .from("appointment")
@ -453,7 +453,7 @@ TEST_CASE_METHOD(QueryFixture, "Test primary key prepared", "[query][primary key
// })
// .execute(db);
// REQUIRE(res.is_ok());
// REQUIRE(*res == 0);
// REQUIRE(res->affected_rows == 0);
// tables_to_drop.emplace("person");
//
// res = query::insert()
@ -461,14 +461,14 @@ TEST_CASE_METHOD(QueryFixture, "Test primary key prepared", "[query][primary key
// .values({1, "george"})
// .execute(db);
// REQUIRE(res.is_ok());
// REQUIRE(*res == 1);
// REQUIRE(res->affected_rows == 1);
//
// res = query::insert()
// .into("person", {"id", "last_name"})
// .values({2, "clooney"})
// .execute(db);
// REQUIRE(res.is_ok());
// REQUIRE(*res == 1);
// REQUIRE(res->affected_rows == 1);
//
// auto result = query::select({"id", "first_name", "last_name"})
// .from("person")
@ -498,7 +498,7 @@ TEST_CASE_METHOD(QueryFixture, "Test primary key prepared", "[query][primary key
// })
// .execute(db);
// REQUIRE(res.is_ok());
// REQUIRE(*res == 0);
// REQUIRE(res->affected_rows == 0);
// tables_to_drop.emplace("person");
//
// res = query::insert()
@ -506,14 +506,14 @@ TEST_CASE_METHOD(QueryFixture, "Test primary key prepared", "[query][primary key
// .values({1, "george"})
// .execute(db);
// REQUIRE(res.is_ok());
// REQUIRE(*res == 1);
// REQUIRE(res->affected_rows == 1);
//
// res = query::insert()
// .into("person", {"id", "last_name"})
// .values({2, "clooney"})
// .execute(db);
// REQUIRE(res.is_ok());
// REQUIRE(*res == 1);
// REQUIRE(res->affected_rows == 1);
//
// auto result = query::select({"id", "first_name", "last_name"})
// .from("person")

View File

@ -52,7 +52,7 @@ TEST_CASE_METHOD(QueryFixture, "Test all data types for record", "[query][record
})
.execute(db);
REQUIRE(res.is_ok());
REQUIRE(res.value() == 0);
REQUIRE(res->affected_rows == 0);
check_table_exists("types");
tables_to_drop.emplace("types");
@ -95,7 +95,7 @@ TEST_CASE_METHOD(QueryFixture, "Test all data types for record", "[query][record
.values({id, c, s, i, ll, uc, us, ui, ull, b, f, d, str, varchar, md, mt, bin})
.execute(db);
REQUIRE(res.is_ok());
REQUIRE(res.value() == 1);
REQUIRE(res->affected_rows == 1);
auto result = query::select(cols)
.from("types")
@ -139,7 +139,7 @@ TEST_CASE_METHOD(QueryFixture, "Create and drop table statement", "[query][recor
})
.execute(db);
REQUIRE(res.is_ok());
REQUIRE(res.value() == 0);
REQUIRE(res->affected_rows == 0);
check_table_exists("person");
tables_to_drop.emplace("person");
@ -148,7 +148,7 @@ TEST_CASE_METHOD(QueryFixture, "Create and drop table statement", "[query][recor
.table("person")
.execute(db);
REQUIRE(res.is_ok());
REQUIRE(res.value() == 0);
REQUIRE(res->affected_rows == 0);
check_table_not_exists("person");
}
@ -167,7 +167,7 @@ TEST_CASE_METHOD(QueryFixture, "Create and drop table statement with foreign key
})
.execute(db);
REQUIRE(res.is_ok());
REQUIRE(res.value() == 0);
REQUIRE(res->affected_rows == 0);
check_table_exists("airplane");
tables_to_drop.emplace("airplane");
@ -185,7 +185,7 @@ TEST_CASE_METHOD(QueryFixture, "Create and drop table statement with foreign key
})
.execute(db);
REQUIRE(res.is_ok());
REQUIRE(res.value() == 0);
REQUIRE(res->affected_rows == 0);
check_table_exists("flight");
tables_to_drop.emplace("flight");
@ -194,7 +194,7 @@ TEST_CASE_METHOD(QueryFixture, "Create and drop table statement with foreign key
.table("flight")
.execute(db);
REQUIRE(res.is_ok());
REQUIRE(res.value() == 0);
REQUIRE(res->affected_rows == 0);
check_table_not_exists("flight");
@ -202,7 +202,7 @@ TEST_CASE_METHOD(QueryFixture, "Create and drop table statement with foreign key
.table("airplane")
.execute(db);
REQUIRE(res.is_ok());
REQUIRE(res.value() == 0);
REQUIRE(res->affected_rows == 0);
check_table_not_exists("airplane");
}
@ -220,7 +220,7 @@ TEST_CASE_METHOD(QueryFixture, "Execute insert record statement", "[query][recor
})
.execute(db);
REQUIRE(res.is_ok());
REQUIRE(res.value() == 0);
REQUIRE(res->affected_rows == 0);
tables_to_drop.emplace("person");
res = query::insert()
@ -228,7 +228,7 @@ TEST_CASE_METHOD(QueryFixture, "Execute insert record statement", "[query][recor
.values({7, "george", 45})
.execute(db);
REQUIRE(res.is_ok());
REQUIRE(res.value() == 1);
REQUIRE(res->affected_rows == 1);
auto result = query::select({"id", "name", "age"})
.from("person")
@ -263,7 +263,7 @@ TEST_CASE_METHOD(QueryFixture, "Execute insert record statement with foreign key
})
.execute(db);
REQUIRE(res.is_ok());
REQUIRE(res.value() == 0);
REQUIRE(res->affected_rows == 0);
tables_to_drop.emplace("airplane");
res = query::create()
@ -279,7 +279,7 @@ TEST_CASE_METHOD(QueryFixture, "Execute insert record statement with foreign key
})
.execute(db);
REQUIRE(res.is_ok());
REQUIRE(res.value() == 0);
REQUIRE(res->affected_rows == 0);
tables_to_drop.emplace("flight");
std::vector<std::vector<database_type>> values_list{
@ -294,7 +294,7 @@ TEST_CASE_METHOD(QueryFixture, "Execute insert record statement with foreign key
.values(std::move(values))
.execute(db);
REQUIRE(res.is_ok());
REQUIRE(res.value() == 1);
REQUIRE(res->affected_rows == 1);
}
auto count = query::select({count_all()})
@ -309,7 +309,7 @@ TEST_CASE_METHOD(QueryFixture, "Execute insert record statement with foreign key
.values({4, 1, "George"})
.execute(db);
REQUIRE(res.is_ok());
REQUIRE(res.value() == 1);
REQUIRE(res->affected_rows == 1);
}
TEST_CASE_METHOD(QueryFixture, "Execute update record statement", "[query][record]")
@ -326,7 +326,7 @@ TEST_CASE_METHOD(QueryFixture, "Execute update record statement", "[query][recor
})
.execute(db);
REQUIRE(res.is_ok());
REQUIRE(res.value() == 0);
REQUIRE(res->affected_rows == 0);
tables_to_drop.emplace("person");
res = query::insert()
@ -335,7 +335,7 @@ TEST_CASE_METHOD(QueryFixture, "Execute update record statement", "[query][recor
.execute(db);
REQUIRE(res.is_ok());
REQUIRE(res.value() == 1);
REQUIRE(res->affected_rows == 1);
res = query::update("person")
.set({{"id", 7},
@ -344,7 +344,7 @@ TEST_CASE_METHOD(QueryFixture, "Execute update record statement", "[query][recor
.where("id"_col == 7)
.execute(db);
REQUIRE(res.is_ok());
REQUIRE(res.value() == 1);
REQUIRE(res->affected_rows == 1);
auto result = query::select({"id", "name", "age"})
.from("person")
@ -379,7 +379,7 @@ TEST_CASE_METHOD(QueryFixture, "Execute select statement", "[query][record]")
})
.execute(db);
REQUIRE(res.is_ok());
REQUIRE(res.value() == 0);
REQUIRE(res->affected_rows == 0);
tables_to_drop.emplace("person");
std::vector<std::vector<database_type>> values_list{
@ -395,7 +395,7 @@ TEST_CASE_METHOD(QueryFixture, "Execute select statement", "[query][record]")
.values(std::move(values))
.execute(db);
REQUIRE(res.is_ok());
REQUIRE(res.value() == 1);
REQUIRE(res->affected_rows == 1);
}
auto result = query::select({"id", "name", "age"})
@ -439,7 +439,7 @@ TEST_CASE_METHOD(QueryFixture, "Execute select statement with order by", "[query
})
.execute(db);
REQUIRE(res.is_ok());
REQUIRE(res.value() == 0);
REQUIRE(res->affected_rows == 0);
tables_to_drop.emplace("person");
std::vector<std::vector<database_type>> values_list{
@ -455,7 +455,7 @@ TEST_CASE_METHOD(QueryFixture, "Execute select statement with order by", "[query
.values(std::move(values))
.execute(db);
REQUIRE(res.is_ok());
REQUIRE(res.value() == 1);
REQUIRE(res->affected_rows == 1);
}
auto result = query::select({"id", "name", "age"})
@ -485,7 +485,7 @@ TEST_CASE_METHOD(QueryFixture, "Execute select statement with group by and order
})
.execute(db);
REQUIRE(res.is_ok());
REQUIRE(*res == 0);
REQUIRE(res->affected_rows == 0);
tables_to_drop.emplace("person");
std::vector<std::vector<database_type>> values_list{
@ -503,7 +503,7 @@ TEST_CASE_METHOD(QueryFixture, "Execute select statement with group by and order
.values(std::move(values))
.execute(db);
REQUIRE(res.is_ok());
REQUIRE(res.value() == 1);
REQUIRE(res->affected_rows == 1);
}
auto result = query::select({count("age").as("age_count"), "age"})
@ -538,7 +538,7 @@ TEST_CASE_METHOD(QueryFixture, "Execute delete statement", "[query][record]") {
})
.execute(db);
REQUIRE(res.is_ok());
REQUIRE(*res == 0);
REQUIRE(res->affected_rows == 0);
tables_to_drop.emplace("person");
res = query::insert()
@ -546,13 +546,13 @@ TEST_CASE_METHOD(QueryFixture, "Execute delete statement", "[query][record]") {
.values({1, "george", 45})
.execute(db);
REQUIRE(res.is_ok());
REQUIRE(*res == 1);
REQUIRE(res->affected_rows == 1);
res = query::insert()
.into("person", {"id", "name", "age"})
.values({2, "jane", 45})
.execute(db);
REQUIRE(res.is_ok());
REQUIRE(*res == 1);
REQUIRE(res->affected_rows == 1);
auto count = query::select({count_all()})
.from("person")
@ -566,7 +566,7 @@ TEST_CASE_METHOD(QueryFixture, "Execute delete statement", "[query][record]") {
.where("id"_col == 1)
.execute(db);
REQUIRE(res.is_ok());
REQUIRE(*res == 1);
REQUIRE(res->affected_rows == 1);
count = query::select({count_all()})
.from("person")
@ -584,7 +584,7 @@ TEST_CASE_METHOD(QueryFixture, "Test quoted identifier record", "[query][record]
})
.execute(db);
REQUIRE(res.is_ok());
REQUIRE(*res == 0);
REQUIRE(res->affected_rows == 0);
tables_to_drop.emplace("quotes");
// check table description
@ -608,7 +608,7 @@ TEST_CASE_METHOD(QueryFixture, "Test quoted identifier record", "[query][record]
.values({"Berlin", "London"})
.execute(db);
REQUIRE(res.is_ok());
REQUIRE(*res == 1);
REQUIRE(res->affected_rows == 1);
auto result = query::select({"from", "to"})
.from("quotes")
@ -624,7 +624,7 @@ TEST_CASE_METHOD(QueryFixture, "Test quoted identifier record", "[query][record]
.where("from"_col == "Berlin")
.execute(db);
REQUIRE(res.is_ok());
REQUIRE(*res == 1);
REQUIRE(res->affected_rows == 1);
result = query::select({"from", "to"})
.from("quotes")
@ -649,7 +649,7 @@ TEST_CASE_METHOD(QueryFixture, "Test create record", "[query][record][create]")
})
.execute(db);
REQUIRE(res.is_ok());
REQUIRE(*res == 0);
REQUIRE(res->affected_rows == 0);
tables_to_drop.emplace("person");
check_table_exists("person");
@ -676,7 +676,7 @@ TEST_CASE_METHOD(QueryFixture, "Test insert record", "[query][record][insert]")
})
.execute(db);
REQUIRE(res.is_ok());
REQUIRE(*res == 0);
REQUIRE(res->affected_rows == 0);
tables_to_drop.emplace("person");
check_table_exists("person");
@ -686,7 +686,7 @@ TEST_CASE_METHOD(QueryFixture, "Test insert record", "[query][record][insert]")
.values({1, "hans", 45})
.execute(db);
REQUIRE(res.is_ok());
REQUIRE(*res == 1);
REQUIRE(res->affected_rows == 1);
auto row = query::select({"id", "name", "age"})
.from("person")
@ -713,7 +713,7 @@ TEST_CASE_METHOD(QueryFixture, "Test update record", "[query][record][update]")
})
.execute(db);
REQUIRE(res.is_ok());
REQUIRE(*res == 0);
REQUIRE(res->affected_rows == 0);
tables_to_drop.emplace("person");
check_table_exists("person");
@ -723,7 +723,7 @@ TEST_CASE_METHOD(QueryFixture, "Test update record", "[query][record][update]")
.values({1, "hans", 45})
.execute(db);
REQUIRE(res.is_ok());
REQUIRE(*res == 1);
REQUIRE(res->affected_rows == 1);
auto row = query::select({"id", "name", "age"})
.from("person")
@ -740,7 +740,7 @@ TEST_CASE_METHOD(QueryFixture, "Test update record", "[query][record][update]")
.where("name"_col == "hans")
.execute(db);
REQUIRE(res.is_ok());
REQUIRE(*res == 1);
REQUIRE(res->affected_rows == 1);
row = query::select({"id", "name", "age"})
.from("person")
@ -771,7 +771,7 @@ TEST_CASE_METHOD(QueryFixture, "Test prepared record statement", "[query][record
auto res = stmt->execute();
REQUIRE(res.is_ok());
REQUIRE(*res == 0);
REQUIRE(res->affected_rows == 0);
check_table_exists("person");
const std::vector<std::string> cols = {"id", "name", "age"};
@ -795,7 +795,7 @@ TEST_CASE_METHOD(QueryFixture, "Test scalar result", "[query][record][scalar][re
})
.execute(db);
REQUIRE(res.is_ok());
REQUIRE(*res == 0);
REQUIRE(res->affected_rows == 0);
check_table_exists("person");
tables_to_drop.emplace("person");
@ -808,7 +808,7 @@ TEST_CASE_METHOD(QueryFixture, "Test scalar result", "[query][record][scalar][re
.values({id})
.execute(db);
REQUIRE(res.is_ok());
REQUIRE(*res == 1);
REQUIRE(res->affected_rows == 1);
}
auto stmt = query::select({"id"})

View File

@ -32,7 +32,7 @@ TEST_CASE_METHOD(QueryFixture, "Test create statement", "[query][statement][crea
auto res = stmt->execute();
REQUIRE(res.is_ok());
REQUIRE(*res == 0);
REQUIRE(res->affected_rows == 0);
tables_to_drop.emplace("persons");
check_table_exists("persons");
@ -63,7 +63,7 @@ TEST_CASE_METHOD(QueryFixture, "Test insert statement", "[query][statement][inse
auto res = stmt->bind(george)
.execute();
REQUIRE(res.is_ok());
REQUIRE(*res == 1);
REQUIRE(res->affected_rows == 1);
auto row = query::select({PERSON.id, PERSON.name, PERSON.age, PERSON.image})
.from(PERSON)
@ -94,7 +94,7 @@ TEST_CASE_METHOD(QueryFixture, "Test update statement", "[query][statement][upda
auto res = stmt->bind(george)
.execute();
REQUIRE(res.is_ok());
REQUIRE(*res == 1);
REQUIRE(res->affected_rows == 1);
auto row = query::select({PERSON.id, PERSON.name, PERSON.age, PERSON.image})
.from(PERSON)
@ -119,7 +119,7 @@ TEST_CASE_METHOD(QueryFixture, "Test update statement", "[query][statement][upda
.bind(4, george.id)
.execute();
REQUIRE(res.is_ok());
REQUIRE(*res == 1);
REQUIRE(res->affected_rows == 1);
row = query::select({PERSON.id, PERSON.name, PERSON.age, PERSON.image})
.from(PERSON)
@ -156,7 +156,7 @@ TEST_CASE_METHOD(QueryFixture, "Test delete statement", "[query][statement][dele
auto res = stmt->bind(p)
.execute();
REQUIRE(res.is_ok());
REQUIRE(*res == 1);
REQUIRE(res->affected_rows == 1);
stmt->reset();
}
@ -187,7 +187,7 @@ TEST_CASE_METHOD(QueryFixture, "Test delete statement", "[query][statement][dele
auto res = stmt->bind(0, "jane")
.execute();
REQUIRE(res.is_ok());
REQUIRE(*res == 1);
REQUIRE(res->affected_rows == 1);
select_stmt->reset();
auto row = select_stmt->bind(0, "jane")
@ -198,7 +198,7 @@ TEST_CASE_METHOD(QueryFixture, "Test delete statement", "[query][statement][dele
res = stmt->bind(0, "merlin")
.execute();
REQUIRE(res.is_ok());
REQUIRE(*res == 1);
REQUIRE(res->affected_rows == 1);
select_stmt->reset();
row = select_stmt->bind(0, "merlin")
@ -229,7 +229,7 @@ TEST_CASE_METHOD(QueryFixture, "Test reuse prepared statement", "[query][stateme
auto res = stmt->bind(p)
.execute();
REQUIRE(res.is_ok());
REQUIRE(*res == 1);
REQUIRE(res->affected_rows == 1);
stmt->reset();
}

View File

@ -51,7 +51,7 @@ TEST_CASE_METHOD(QueryFixture, "Execute select statement with where clause", "[q
.values(george)
.execute(db);
REQUIRE(res.is_ok());
REQUIRE(*res == 1);
REQUIRE(res->affected_rows == 1);
// fetch person as record
auto result_record = query::select({PERSON.id, PERSON.name, PERSON.age, PERSON.image})
@ -100,7 +100,7 @@ TEST_CASE_METHOD(QueryFixture, "Execute insert statement", "[query][insert]") {
})
.execute(db);
REQUIRE(res.is_ok());
REQUIRE(*res == 0);
REQUIRE(res->affected_rows == 0);
REQUIRE(db.exists("person"));
tables_to_drop.emplace("person");
@ -110,7 +110,7 @@ TEST_CASE_METHOD(QueryFixture, "Execute insert statement", "[query][insert]") {
.values({7, "george", "green"})
.execute(db);
REQUIRE(res.is_ok());
REQUIRE(*res == 1);
REQUIRE(res->affected_rows == 1);
// fetch person as record
auto result_record = query::select({"id", "name", "color"})
@ -154,7 +154,7 @@ TEST_CASE_METHOD(QueryFixture, "Select statement with foreign key", "[query][for
.values(*plane)
.execute(db);
REQUIRE(res.is_ok());
REQUIRE(*res == 1);
REQUIRE(res->affected_rows == 1);
}
auto count = query::select({count_all()})
@ -171,7 +171,7 @@ TEST_CASE_METHOD(QueryFixture, "Select statement with foreign key", "[query][for
.values(f4711)
.execute(db);
REQUIRE(res.is_ok());
REQUIRE(*res == 1);
REQUIRE(res->affected_rows == 1);
auto f = query::select({FLIGHT.id, FLIGHT.airplane_id, FLIGHT.pilot_name})
.from(FLIGHT)
@ -204,7 +204,7 @@ TEST_CASE_METHOD(QueryFixture, "Select statement with foreign key and join_left"
.values(*plane)
.execute(db);
REQUIRE(res.is_ok());
REQUIRE(*res == 1);
REQUIRE(res->affected_rows == 1);
}
auto count = query::select({count_all()})
@ -225,7 +225,7 @@ TEST_CASE_METHOD(QueryFixture, "Select statement with foreign key and join_left"
.values(*f)
.execute(db);
REQUIRE(res.is_ok());
REQUIRE(*res == 1);
REQUIRE(res->affected_rows == 1);
}
auto flight_result = query::select({FLIGHT.id, FLIGHT.airplane_id, FLIGHT.pilot_name})
@ -285,7 +285,7 @@ TEST_CASE_METHOD(QueryFixture, "Select statement with foreign key and for single
.values(*plane)
.execute(db);
REQUIRE(res.is_ok());
REQUIRE(*res == 1);
REQUIRE(res->affected_rows == 1);
}
auto count = query::select({count_all()})
@ -308,7 +308,7 @@ TEST_CASE_METHOD(QueryFixture, "Select statement with foreign key and for single
.values(*f)
.execute(db);
REQUIRE(res.is_ok());
REQUIRE(*res == 1);
REQUIRE(res->affected_rows == 1);
}
auto flight_result = query::select({FLIGHT.id, FLIGHT.airplane_id, FLIGHT.pilot_name})
@ -368,7 +368,7 @@ TEST_CASE_METHOD(QueryFixture, "Select statement with many to many relationship"
.values(i)
.execute(db);
REQUIRE(res.is_ok());
REQUIRE(*res == 1);
REQUIRE(res->affected_rows == 1);
}
std::vector<recipe> recipes{
@ -383,7 +383,7 @@ TEST_CASE_METHOD(QueryFixture, "Select statement with many to many relationship"
.values(r)
.execute(db);
REQUIRE(res.is_ok());
REQUIRE(*res == 1);
REQUIRE(res->affected_rows == 1);
}
std::vector<std::pair<int, int>> recipe_ingredients {
@ -403,7 +403,7 @@ TEST_CASE_METHOD(QueryFixture, "Select statement with many to many relationship"
.values({recipe_id, ingredient_id})
.execute(db);
REQUIRE(res.is_ok());
REQUIRE(*res == 1);
REQUIRE(res->affected_rows == 1);
}
@ -510,7 +510,7 @@ TEST_CASE_METHOD(QueryFixture, "Test load entity with eager has many relation",
.values(*sh)
.execute(db);
REQUIRE(res.is_ok());
REQUIRE(*res == 1);
REQUIRE(res->affected_rows == 1);
}
auto count = query::select({count_all()})
@ -533,7 +533,7 @@ TEST_CASE_METHOD(QueryFixture, "Test load entity with eager has many relation",
.values(*pkg)
.execute(db);
REQUIRE(res.is_ok());
REQUIRE(*res == 1);
REQUIRE(res->affected_rows == 1);
}
count = query::select({count_all()})
@ -621,7 +621,7 @@ TEST_CASE_METHOD(QueryFixture, "Test load entity with lazy has many relation", "
.values(*a)
.execute(db);
REQUIRE(res.is_ok());
REQUIRE(*res == 1);
REQUIRE(res->affected_rows == 1);
}
auto count = query::select({count_all()})
@ -636,7 +636,7 @@ TEST_CASE_METHOD(QueryFixture, "Test load entity with lazy has many relation", "
.values(*b)
.execute(db);
REQUIRE(res.is_ok());
REQUIRE(*res == 1);
REQUIRE(res->affected_rows == 1);
}
count = query::select({count_all()})
@ -698,7 +698,7 @@ TEST_CASE_METHOD(QueryFixture, "Test load entity with lazy belongs to relation",
.values(*dep)
.execute(db);
REQUIRE(res.is_ok());
REQUIRE(*res == 1);
REQUIRE(res->affected_rows == 1);
}
auto count = query::select({count_all()})
@ -713,7 +713,7 @@ TEST_CASE_METHOD(QueryFixture, "Test load entity with lazy belongs to relation",
.values(*emp)
.execute(db);
REQUIRE(res.is_ok());
REQUIRE(*res == 1);
REQUIRE(res->affected_rows == 1);
}
count = query::select({count_all()})
@ -769,7 +769,7 @@ TEST_CASE_METHOD(QueryFixture, "Test load entity with eager belongs to relation"
.values(*a)
.execute(db);
REQUIRE(res.is_ok());
REQUIRE(*res == 1);
REQUIRE(res->affected_rows == 1);
}
auto count = query::select({count_all()})
@ -784,7 +784,7 @@ TEST_CASE_METHOD(QueryFixture, "Test load entity with eager belongs to relation"
.values(*b)
.execute(db);
REQUIRE(res.is_ok());
REQUIRE(*res == 1);
REQUIRE(res->affected_rows == 1);
}
count = query::select({count_all()})
@ -845,7 +845,7 @@ TEST_CASE_METHOD(QueryFixture, "Test load entity with eager has many to many rel
.values(i)
.execute(db);
REQUIRE(res.is_ok());
REQUIRE(*res == 1);
REQUIRE(res->affected_rows == 1);
}
std::vector<recipe> recipes{
@ -860,7 +860,7 @@ TEST_CASE_METHOD(QueryFixture, "Test load entity with eager has many to many rel
.values(r)
.execute(db);
REQUIRE(res.is_ok());
REQUIRE(*res == 1);
REQUIRE(res->affected_rows == 1);
}
std::vector<std::pair<int, int>> recipe_ingredients {
@ -880,7 +880,7 @@ TEST_CASE_METHOD(QueryFixture, "Test load entity with eager has many to many rel
.values({recipe_id, ingredient_id})
.execute(db);
REQUIRE(res.is_ok());
REQUIRE(*res == 1);
REQUIRE(res->affected_rows == 1);
}
const auto r = RECIPE.as("r");

View File

@ -49,7 +49,7 @@ TEST_CASE_METHOD(StatementTestFixture, "Create prepared statement", "[statement]
for (const auto &plane: planes) {
auto res = stmt->bind(plane).execute();
REQUIRE(res.is_ok());
REQUIRE(*res == 1);
REQUIRE(res->affected_rows == 1);
stmt->reset();
}
@ -73,7 +73,7 @@ TEST_CASE_METHOD(StatementTestFixture, "Create prepared statement", "[statement]
.values(plane)
.execute(db);
REQUIRE(res.is_ok());
REQUIRE(*res == 1);
REQUIRE(res->affected_rows == 1);
}
auto stmt = query::select({AIRPLANE.id, AIRPLANE.brand, AIRPLANE.model})

View File

@ -36,7 +36,7 @@ TEST_CASE_METHOD(TypeTraitsTestFixture, "Special handling of attributes with typ
.values(loc)
.execute(db);
REQUIRE(res.is_ok());
REQUIRE(*res == 1);
REQUIRE(res->affected_rows == 1);
auto result = query::select(generator::columns<location>(repo))
.from("location")
@ -61,7 +61,7 @@ TEST_CASE_METHOD(TypeTraitsTestFixture, "Special handling of attributes with typ
auto res = stmt->bind(loc)
.execute();
REQUIRE(res.is_ok());
REQUIRE(*res == 1);
REQUIRE(res->affected_rows == 1);
auto result = query::select(generator::columns<location>(repo))
.from("location")