introduced execute_result
This commit is contained in:
parent
d9f9712487
commit
99677b0e21
|
|
@ -31,7 +31,7 @@ public:
|
||||||
[[nodiscard]] utils::result<utils::version, utils::error> client_version() const override;
|
[[nodiscard]] utils::result<utils::version, utils::error> client_version() const override;
|
||||||
[[nodiscard]] utils::result<utils::version, utils::error> server_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 std::string &stmt) override;
|
||||||
utils::result<std::unique_ptr<sql::statement_impl>, utils::error> prepare(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;
|
utils::result<std::unique_ptr<sql::query_result_impl>, utils::error> fetch(const sql::query_context &context) override;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,7 @@ public:
|
||||||
postgres_statement(PGconn *db, PGresult *res, std::string name, const sql::query_context &query);
|
postgres_statement(PGconn *db, PGresult *res, std::string name, const sql::query_context &query);
|
||||||
~postgres_statement() override;
|
~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;
|
utils::result<std::unique_ptr<sql::query_result_impl>, utils::error> fetch(const sql::parameter_binder& bindings) override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
|
||||||
|
|
@ -142,18 +142,18 @@ utils::result<std::unique_ptr<sql::statement_impl>, utils::error> postgres_conne
|
||||||
return utils::ok(std::move(s));
|
return utils::ok(std::move(s));
|
||||||
}
|
}
|
||||||
|
|
||||||
utils::result<size_t, utils::error> postgres_connection::execute(const std::string &stmt) {
|
utils::result<sql::execute_result, utils::error> postgres_connection::execute(const std::string &stmt) {
|
||||||
PGresult *res = PQexec(conn_, stmt.c_str());
|
PGresult *res = PQexec(conn_, stmt.c_str());
|
||||||
|
|
||||||
if (const auto status = PQresultStatus(res); status != PGRES_COMMAND_OK && status != PGRES_TUPLES_OK) {
|
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", stmt));
|
||||||
}
|
}
|
||||||
|
|
||||||
const auto affected_rows = utils::to<size_t>(PQcmdTuples(res));
|
const size_t affected_rows = utils::to<size_t>(PQcmdTuples(res));
|
||||||
|
|
||||||
PQclear(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) {
|
utils::basic_type oid2type(const Oid oid) {
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,6 @@
|
||||||
#include "postgres_statement.hpp"
|
#include "postgres_statement.hpp"
|
||||||
|
|
||||||
|
#include "matador/sql/execute_result.hpp"
|
||||||
#include "postgres_error.hpp"
|
#include "postgres_error.hpp"
|
||||||
#include "postgres_parameter_binder.h"
|
#include "postgres_parameter_binder.h"
|
||||||
#include "postgres_result_reader.hpp"
|
#include "postgres_result_reader.hpp"
|
||||||
|
|
@ -16,7 +18,7 @@ postgres_statement::~postgres_statement() {
|
||||||
PQclear(res_);
|
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);
|
const auto* postgres_bindings = dynamic_cast<const postgres_parameter_binder*>(&bindings);
|
||||||
if (!postgres_bindings) {
|
if (!postgres_bindings) {
|
||||||
return utils::failure(utils::error(sql::error_code::EXECUTE_FAILED, "Failed to cast bindings to postgres bindings"));
|
return utils::failure(utils::error(sql::error_code::EXECUTE_FAILED, "Failed to cast bindings to postgres bindings"));
|
||||||
|
|
@ -40,7 +42,7 @@ utils::result<size_t, utils::error> postgres_statement::execute(const sql::param
|
||||||
|
|
||||||
PQclear(res);
|
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) {
|
utils::result<std::unique_ptr<sql::query_result_impl>, utils::error> postgres_statement::fetch(const sql::parameter_binder& bindings) {
|
||||||
|
|
|
||||||
|
|
@ -130,14 +130,14 @@ public:
|
||||||
|
|
||||||
[[nodiscard]] utils::result<sql::query_result<sql::record>, utils::error>
|
[[nodiscard]] utils::result<sql::query_result<sql::record>, utils::error>
|
||||||
fetch_all(const sql::query_context &q) const;
|
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]] std::vector<object::attribute> describe_table(const std::string &table_name) const;
|
||||||
[[nodiscard]] bool table_exists(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(
|
[[nodiscard]] utils::result<std::unique_ptr<sql::query_result_impl>, utils::error> fetch(
|
||||||
const sql::query_context &ctx) const override;
|
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]] 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]] std::string str(const sql::query_context &ctx) const override;
|
||||||
[[nodiscard]] const sql::dialect &dialect() const override;
|
[[nodiscard]] const sql::dialect &dialect() const override;
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,7 @@
|
||||||
namespace matador::sql {
|
namespace matador::sql {
|
||||||
class executor;
|
class executor;
|
||||||
class statement;
|
class statement;
|
||||||
|
struct execute_result;
|
||||||
struct query_context;
|
struct query_context;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -18,7 +19,7 @@ class executable_query : public query_intermediate {
|
||||||
public:
|
public:
|
||||||
using query_intermediate::query_intermediate;
|
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]] utils::result<sql::statement, utils::error> prepare(sql::executor &exec) const;
|
||||||
[[nodiscard]] sql::query_context compile(const sql::executor &exec) const;
|
[[nodiscard]] sql::query_context compile(const sql::executor &exec) const;
|
||||||
[[nodiscard]] std::string str(const sql::executor &exec) const;
|
[[nodiscard]] std::string str(const sql::executor &exec) const;
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@
|
||||||
|
|
||||||
#include "matador/sql/abstract_sql_logger.hpp"
|
#include "matador/sql/abstract_sql_logger.hpp"
|
||||||
#include "matador/sql/connection_info.hpp"
|
#include "matador/sql/connection_info.hpp"
|
||||||
|
#include "matador/sql/execute_result.hpp"
|
||||||
#include "matador/sql/executor.hpp"
|
#include "matador/sql/executor.hpp"
|
||||||
#include "matador/sql/resolver_service.hpp"
|
#include "matador/sql/resolver_service.hpp"
|
||||||
#include "matador/sql/statement.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 &schema_name, const std::string &table_name) const;
|
||||||
[[nodiscard]] utils::result<bool, utils::error> exists(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<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]] utils::result<statement, utils::error> prepare(const query_context &ctx) override;
|
||||||
[[nodiscard]] std::string str( const query_context& ctx ) const override;
|
[[nodiscard]] std::string str( const query_context& ctx ) const override;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
@ -11,6 +11,7 @@
|
||||||
namespace matador::sql {
|
namespace matador::sql {
|
||||||
|
|
||||||
struct query_context;
|
struct query_context;
|
||||||
|
struct execute_result;
|
||||||
class query_result_impl;
|
class query_result_impl;
|
||||||
class statement;
|
class statement;
|
||||||
|
|
||||||
|
|
@ -18,7 +19,7 @@ class executor {
|
||||||
public:
|
public:
|
||||||
virtual ~executor() = default;
|
virtual ~executor() = default;
|
||||||
[[nodiscard]] virtual const class dialect& dialect() const = 0;
|
[[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<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 utils::result<statement, utils::error> prepare(const query_context &ctx) = 0;
|
||||||
[[nodiscard]] virtual std::string str(const query_context &ctx) const = 0;
|
[[nodiscard]] virtual std::string str(const query_context &ctx) const = 0;
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
#include "matador/object/attribute.hpp"
|
#include "matador/object/attribute.hpp"
|
||||||
|
|
||||||
#include "matador/sql/connection_info.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/error.hpp"
|
||||||
#include "matador/utils/result.hpp"
|
#include "matador/utils/result.hpp"
|
||||||
|
|
@ -18,6 +18,7 @@ using blob_type_t = std::vector<unsigned char>;
|
||||||
|
|
||||||
namespace matador::sql {
|
namespace matador::sql {
|
||||||
|
|
||||||
|
struct query_context;
|
||||||
class query_result_impl;
|
class query_result_impl;
|
||||||
class statement_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> client_version() const = 0;
|
||||||
[[nodiscard]] virtual utils::result<utils::version, utils::error> server_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 std::string &stmt) = 0;
|
||||||
virtual utils::result<std::unique_ptr<query_result_impl>, utils::error> fetch(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;
|
virtual utils::result<std::unique_ptr<statement_impl>, utils::error> prepare(const query_context &context) = 0;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -13,6 +13,7 @@
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
|
||||||
namespace matador::sql {
|
namespace matador::sql {
|
||||||
|
struct execute_result;
|
||||||
class query_result_impl;
|
class query_result_impl;
|
||||||
class sql_error;
|
class sql_error;
|
||||||
|
|
||||||
|
|
@ -23,7 +24,7 @@ protected:
|
||||||
public:
|
public:
|
||||||
virtual ~statement_impl() = default;
|
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;
|
virtual utils::result<std::unique_ptr<query_result_impl>, utils::error> fetch(const parameter_binder& bindings) = 0;
|
||||||
|
|
||||||
template < class Type >
|
template < class Type >
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@ protected:
|
||||||
public:
|
public:
|
||||||
virtual ~statement_proxy() = default;
|
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;
|
virtual utils::result<std::unique_ptr<query_result_impl>, utils::error> fetch(parameter_binder& bindings) = 0;
|
||||||
|
|
||||||
template<class Type>
|
template<class Type>
|
||||||
|
|
|
||||||
|
|
@ -71,7 +71,7 @@ public:
|
||||||
*
|
*
|
||||||
* @return The number of affected rows
|
* @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
|
* Fetches the result of the prepared
|
||||||
|
|
|
||||||
|
|
@ -14,8 +14,8 @@ public:
|
||||||
*/
|
*/
|
||||||
primary_key_attribute() = default;
|
primary_key_attribute() = default;
|
||||||
/**
|
/**
|
||||||
* Creates primary_key_attribute instance
|
* Creates a primary_key_attribute instance with a
|
||||||
* with given size.
|
* given size.
|
||||||
*
|
*
|
||||||
* @param size Size of the attribute
|
* @param size Size of the attribute
|
||||||
*/
|
*/
|
||||||
|
|
@ -44,7 +44,7 @@ public:
|
||||||
[[nodiscard]] generator_type generator() const;
|
[[nodiscard]] generator_type generator() const;
|
||||||
private:
|
private:
|
||||||
size_t size_ = 0;
|
size_t size_ = 0;
|
||||||
generator_type generator_ = generator_type::MANUALLY;
|
generator_type generator_ = generator_type::Manually;
|
||||||
};
|
};
|
||||||
|
|
||||||
const primary_key_attribute default_pk_attributes {};
|
const primary_key_attribute default_pk_attributes {};
|
||||||
|
|
|
||||||
|
|
@ -3,11 +3,11 @@
|
||||||
|
|
||||||
namespace matador::utils {
|
namespace matador::utils {
|
||||||
enum class generator_type {
|
enum class generator_type {
|
||||||
MANUALLY,
|
Manually, /**< User sets the primary key value manually. */
|
||||||
AUTO,
|
Auto, /**< Matador chooses the best generator type depending on the underlying dbms. */
|
||||||
IDENTITY,
|
Identity, /**< DBMS automatically generates the primary key value. */
|
||||||
SEQUENCE,
|
Sequence, /**< DBMS automatically generates the primary key value by using a sequence table. */
|
||||||
TABLE
|
Table /**< DBMS automatically generates the primary key value by using a table. */
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
#endif //PRIMARY_KEY_GENERATOR_TYPE_HPP
|
#endif //PRIMARY_KEY_GENERATOR_TYPE_HPP
|
||||||
|
|
|
||||||
|
|
@ -76,6 +76,7 @@ add_library(matador-orm STATIC
|
||||||
../../include/matador/sql/dialect_builder.hpp
|
../../include/matador/sql/dialect_builder.hpp
|
||||||
../../include/matador/sql/dialect_token.hpp
|
../../include/matador/sql/dialect_token.hpp
|
||||||
../../include/matador/sql/error_code.hpp
|
../../include/matador/sql/error_code.hpp
|
||||||
|
../../include/matador/sql/execute_result.hpp
|
||||||
../../include/matador/sql/executor.hpp
|
../../include/matador/sql/executor.hpp
|
||||||
../../include/matador/sql/field.hpp
|
../../include/matador/sql/field.hpp
|
||||||
../../include/matador/sql/interface/connection_impl.hpp
|
../../include/matador/sql/interface/connection_impl.hpp
|
||||||
|
|
|
||||||
|
|
@ -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});
|
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});
|
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) {
|
if (const auto result = cache_.acquire(ctx); !result) {
|
||||||
return utils::failure(result.err());
|
return utils::failure(result.err());
|
||||||
} else if (auto exec_result = result->execute(); !exec_result) {
|
} else if (auto exec_result = result->execute(); !exec_result) {
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,13 @@
|
||||||
#include "matador/query/intermediates/executable_query.hpp"
|
#include "matador/query/intermediates/executable_query.hpp"
|
||||||
#include "matador/query/query_builder.hpp"
|
#include "matador/query/query_builder.hpp"
|
||||||
|
|
||||||
|
#include "matador/sql/execute_result.hpp"
|
||||||
#include "matador/sql/executor.hpp"
|
#include "matador/sql/executor.hpp"
|
||||||
#include "matador/sql/statement.hpp"
|
#include "matador/sql/statement.hpp"
|
||||||
|
|
||||||
namespace matador::query {
|
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;
|
query_builder compiler;
|
||||||
return exec.execute(compiler.compile(*context_, exec.dialect(), std::nullopt));
|
return exec.execute(compiler.compile(*context_, exec.dialect(), std::nullopt));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -56,7 +56,7 @@ utils::result<void, utils::error> schema::create(const sql::connection &conn) co
|
||||||
.compile(conn);
|
.compile(conn);
|
||||||
|
|
||||||
std::cout << ctx.sql << std::endl;
|
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());
|
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);
|
auto ctx = build_add_constraint_context(node, cons, conn);
|
||||||
|
|
||||||
std::cout << ctx.sql << std::endl;
|
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());
|
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);
|
auto ctx = build_add_constraint_context(node, cons, conn);
|
||||||
|
|
||||||
std::cout << ctx.sql << std::endl;
|
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());
|
return utils::failure(result.err());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -105,7 +105,7 @@ utils::result<void, utils::error> schema::drop(const sql::connection &conn) cons
|
||||||
.compile(conn);
|
.compile(conn);
|
||||||
|
|
||||||
std::cout << ctx.sql << std::endl;
|
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());
|
return utils::failure(result.err());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -123,7 +123,7 @@ utils::result<void, utils::error> schema::drop(const sql::connection &conn) cons
|
||||||
.compile(conn);
|
.compile(conn);
|
||||||
|
|
||||||
std::cout << ctx.sql << std::endl;
|
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());
|
return utils::failure(result.err());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -136,7 +136,7 @@ utils::result<void, utils::error> schema::drop(const sql::connection &conn) cons
|
||||||
.compile(conn);
|
.compile(conn);
|
||||||
|
|
||||||
std::cout << ctx.sql << std::endl;
|
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());
|
return utils::failure(result.err());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,7 @@ public:
|
||||||
explicit connection_statement_proxy(std::unique_ptr<statement_impl>&& stmt)
|
explicit connection_statement_proxy(std::unique_ptr<statement_impl>&& stmt)
|
||||||
: statement_proxy(std::move(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);
|
return statement_->execute(bindings);
|
||||||
}
|
}
|
||||||
utils::result<std::unique_ptr<query_result_impl>, utils::error> fetch(parameter_binder& bindings) override {
|
utils::result<std::unique_ptr<query_result_impl>, utils::error> fetch(parameter_binder& bindings) override {
|
||||||
|
|
@ -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);
|
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) {
|
bool has_unknown_columns(const std::vector<object::attribute> &columns) {
|
||||||
return std::any_of(std::begin(columns), std::end(columns), [](const auto &col) {
|
return std::any_of(std::begin(columns), std::end(columns), [](const auto &col) {
|
||||||
return col.type() == utils::basic_type::Null;
|
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 {
|
utils::result<std::unique_ptr<query_result_impl>, utils::error> connection::fetch(const query_context &ctx) const {
|
||||||
logger_->on_fetch(ctx.sql);
|
logger_->on_fetch(ctx.sql);
|
||||||
std::cout << ctx.sql << std::endl;
|
std::cout << ctx.sql << std::endl;
|
||||||
return connection_->fetch(ctx);
|
return connection_->fetch(ctx);
|
||||||
}
|
}
|
||||||
|
|
||||||
utils::result<size_t, utils::error> connection::execute(const query_context& ctx) const {
|
utils::result<execute_result, utils::error> connection::execute(const query_context& ctx) const {
|
||||||
return execute(ctx.sql);
|
logger_->on_execute(ctx.sql);
|
||||||
|
std::cout << ctx.sql << std::endl;
|
||||||
|
return connection_->execute(ctx.sql);
|
||||||
}
|
}
|
||||||
|
|
||||||
utils::result<statement, utils::error> connection::prepare(const query_context &ctx) {
|
utils::result<statement, utils::error> connection::prepare(const query_context &ctx) {
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
#include "matador/sql/statement.hpp"
|
#include "matador/sql/statement.hpp"
|
||||||
|
#include "matador/sql/execute_result.hpp"
|
||||||
#include "matador/sql/record.hpp"
|
#include "matador/sql/record.hpp"
|
||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
|
@ -49,7 +50,7 @@ statement &statement::bind(const size_t pos, std::string &val, const size_t size
|
||||||
return *this;
|
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());
|
logger_->on_execute(statement_proxy_->sql());
|
||||||
std::cout << statement_proxy_->sql() << std::endl;
|
std::cout << statement_proxy_->sql() << std::endl;
|
||||||
return statement_proxy_->execute(*bindings_);
|
return statement_proxy_->execute(*bindings_);
|
||||||
|
|
|
||||||
|
|
@ -31,10 +31,10 @@ public:
|
||||||
, connection_id_(connection_id)
|
, connection_id_(connection_id)
|
||||||
, bus_(bus) {}
|
, 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()};
|
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();
|
const auto query = sql();
|
||||||
if (!try_lock()) {
|
if (!try_lock()) {
|
||||||
++metrics.lock_attempts;
|
++metrics.lock_attempts;
|
||||||
|
|
|
||||||
|
|
@ -73,7 +73,7 @@ TEST_CASE_METHOD(QueryFixture, "Insert and select basic datatypes", "[query][dat
|
||||||
.values(t)
|
.values(t)
|
||||||
.execute(db);
|
.execute(db);
|
||||||
REQUIRE(res.is_ok());
|
REQUIRE(res.is_ok());
|
||||||
REQUIRE(*res == 1);
|
REQUIRE(res->affected_rows == 1);
|
||||||
|
|
||||||
auto result = query::select<types>(repo)
|
auto result = query::select<types>(repo)
|
||||||
.from("types")
|
.from("types")
|
||||||
|
|
@ -110,7 +110,7 @@ TEST_CASE_METHOD( QueryFixture, "Test quoted identifier", "[query][quotes][ident
|
||||||
})
|
})
|
||||||
.execute(db);
|
.execute(db);
|
||||||
REQUIRE(res.is_ok());
|
REQUIRE(res.is_ok());
|
||||||
REQUIRE(*res == 0);
|
REQUIRE(res->affected_rows == 0);
|
||||||
tables_to_drop.emplace("quotes");
|
tables_to_drop.emplace("quotes");
|
||||||
|
|
||||||
// check table description
|
// check table description
|
||||||
|
|
@ -131,7 +131,7 @@ TEST_CASE_METHOD( QueryFixture, "Test quoted identifier", "[query][quotes][ident
|
||||||
.values({"Berlin", "London"})
|
.values({"Berlin", "London"})
|
||||||
.execute(db);
|
.execute(db);
|
||||||
REQUIRE(res.is_ok());
|
REQUIRE(res.is_ok());
|
||||||
REQUIRE(*res == 1);
|
REQUIRE(res->affected_rows == 1);
|
||||||
|
|
||||||
auto row = query::select({"from", "to"})
|
auto row = query::select({"from", "to"})
|
||||||
.from("quotes")
|
.from("quotes")
|
||||||
|
|
@ -147,7 +147,7 @@ TEST_CASE_METHOD( QueryFixture, "Test quoted identifier", "[query][quotes][ident
|
||||||
.where("from"_col == "Berlin")
|
.where("from"_col == "Berlin")
|
||||||
.execute(db);
|
.execute(db);
|
||||||
REQUIRE(res.is_ok());
|
REQUIRE(res.is_ok());
|
||||||
REQUIRE(*res == 1);
|
REQUIRE(res->affected_rows == 1);
|
||||||
|
|
||||||
row = query::select({"from", "to"})
|
row = query::select({"from", "to"})
|
||||||
.from("quotes")
|
.from("quotes")
|
||||||
|
|
@ -182,7 +182,7 @@ TEST_CASE_METHOD( QueryFixture, "Test quoted column names", "[query][quotes][col
|
||||||
})
|
})
|
||||||
.execute(db);
|
.execute(db);
|
||||||
REQUIRE(res.is_ok());
|
REQUIRE(res.is_ok());
|
||||||
REQUIRE(*res == 0);
|
REQUIRE(res->affected_rows == 0);
|
||||||
|
|
||||||
const auto columns = db.describe("quotes");
|
const auto columns = db.describe("quotes");
|
||||||
REQUIRE(columns.is_ok());
|
REQUIRE(columns.is_ok());
|
||||||
|
|
@ -196,7 +196,7 @@ TEST_CASE_METHOD( QueryFixture, "Test quoted column names", "[query][quotes][col
|
||||||
.table("quotes")
|
.table("quotes")
|
||||||
.execute(db);
|
.execute(db);
|
||||||
REQUIRE(res.is_ok());
|
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);
|
.execute(db);
|
||||||
REQUIRE(res.is_ok());
|
REQUIRE(res.is_ok());
|
||||||
REQUIRE(*res == 0);
|
REQUIRE(res->affected_rows == 0);
|
||||||
tables_to_drop.emplace("escapes");
|
tables_to_drop.emplace("escapes");
|
||||||
|
|
||||||
res = query::insert()
|
res = query::insert()
|
||||||
|
|
@ -216,7 +216,7 @@ TEST_CASE_METHOD(QueryFixture, "Test quoted literals", "[query][quotes][literals
|
||||||
.values({"text"})
|
.values({"text"})
|
||||||
.execute(db);
|
.execute(db);
|
||||||
REQUIRE(res.is_ok());
|
REQUIRE(res.is_ok());
|
||||||
REQUIRE(*res == 1);
|
REQUIRE(res->affected_rows == 1);
|
||||||
|
|
||||||
auto row = query::select({"name"})
|
auto row = query::select({"name"})
|
||||||
.from("escapes")
|
.from("escapes")
|
||||||
|
|
@ -230,7 +230,7 @@ TEST_CASE_METHOD(QueryFixture, "Test quoted literals", "[query][quotes][literals
|
||||||
.set({{"name", "text'd"}})
|
.set({{"name", "text'd"}})
|
||||||
.execute(db);
|
.execute(db);
|
||||||
REQUIRE(res.is_ok());
|
REQUIRE(res.is_ok());
|
||||||
REQUIRE(*res == 1);
|
REQUIRE(res->affected_rows == 1);
|
||||||
|
|
||||||
row = query::select({"name"})
|
row = query::select({"name"})
|
||||||
.from("escapes")
|
.from("escapes")
|
||||||
|
|
@ -244,7 +244,7 @@ TEST_CASE_METHOD(QueryFixture, "Test quoted literals", "[query][quotes][literals
|
||||||
.set({{"name", "text\nhello\tworld"}})
|
.set({{"name", "text\nhello\tworld"}})
|
||||||
.execute(db);
|
.execute(db);
|
||||||
REQUIRE(res.is_ok());
|
REQUIRE(res.is_ok());
|
||||||
REQUIRE(*res == 1);
|
REQUIRE(res->affected_rows == 1);
|
||||||
|
|
||||||
row = query::select({"name"})
|
row = query::select({"name"})
|
||||||
.from("escapes")
|
.from("escapes")
|
||||||
|
|
@ -258,7 +258,7 @@ TEST_CASE_METHOD(QueryFixture, "Test quoted literals", "[query][quotes][literals
|
||||||
.set({{"name", "text \"text\""}})
|
.set({{"name", "text \"text\""}})
|
||||||
.execute(db);
|
.execute(db);
|
||||||
REQUIRE(res.is_ok());
|
REQUIRE(res.is_ok());
|
||||||
REQUIRE(*res == 1);
|
REQUIRE(res->affected_rows == 1);
|
||||||
|
|
||||||
row = query::select({"name"})
|
row = query::select({"name"})
|
||||||
.from("escapes")
|
.from("escapes")
|
||||||
|
|
@ -350,7 +350,7 @@ TEST_CASE_METHOD(QueryFixture, "Test primary key", "[query][primary key]") {
|
||||||
.values(pk1)
|
.values(pk1)
|
||||||
.execute(db);
|
.execute(db);
|
||||||
REQUIRE(res.is_ok());
|
REQUIRE(res.is_ok());
|
||||||
REQUIRE(*res == 1);
|
REQUIRE(res->affected_rows == 1);
|
||||||
|
|
||||||
auto row = query::select<pk>(repo)
|
auto row = query::select<pk>(repo)
|
||||||
.from("pk")
|
.from("pk")
|
||||||
|
|
@ -377,7 +377,7 @@ TEST_CASE_METHOD(QueryFixture, "Test primary key prepared", "[query][primary key
|
||||||
auto res = stmt->bind(pk1)
|
auto res = stmt->bind(pk1)
|
||||||
.execute();
|
.execute();
|
||||||
REQUIRE(res.is_ok());
|
REQUIRE(res.is_ok());
|
||||||
REQUIRE(*res == 1);
|
REQUIRE(res->affected_rows == 1);
|
||||||
|
|
||||||
stmt = query::select<pk>(repo)
|
stmt = query::select<pk>(repo)
|
||||||
.from("pk")
|
.from("pk")
|
||||||
|
|
@ -418,7 +418,7 @@ TEST_CASE_METHOD(QueryFixture, "Test primary key prepared", "[query][primary key
|
||||||
// .table<appointment>("appointment", schema)
|
// .table<appointment>("appointment", schema)
|
||||||
// .execute(db);
|
// .execute(db);
|
||||||
// REQUIRE(res.is_ok());
|
// REQUIRE(res.is_ok());
|
||||||
// REQUIRE(*res == 0);
|
// REQUIRE(res->affected_rows == 0);
|
||||||
// tables_to_drop.emplace("appointment");
|
// tables_to_drop.emplace("appointment");
|
||||||
//
|
//
|
||||||
// auto dinner = appointment{ 1, "dinner" };
|
// auto dinner = appointment{ 1, "dinner" };
|
||||||
|
|
@ -430,7 +430,7 @@ TEST_CASE_METHOD(QueryFixture, "Test primary key prepared", "[query][primary key
|
||||||
// .values(dinner)
|
// .values(dinner)
|
||||||
// .execute(db);
|
// .execute(db);
|
||||||
// REQUIRE(res.is_ok());
|
// REQUIRE(res.is_ok());
|
||||||
// REQUIRE(*res == 1);
|
// REQUIRE(res->affected_rows == 1);
|
||||||
//
|
//
|
||||||
// auto row = query::select<appointment>(schema)
|
// auto row = query::select<appointment>(schema)
|
||||||
// .from("appointment")
|
// .from("appointment")
|
||||||
|
|
@ -453,7 +453,7 @@ TEST_CASE_METHOD(QueryFixture, "Test primary key prepared", "[query][primary key
|
||||||
// })
|
// })
|
||||||
// .execute(db);
|
// .execute(db);
|
||||||
// REQUIRE(res.is_ok());
|
// REQUIRE(res.is_ok());
|
||||||
// REQUIRE(*res == 0);
|
// REQUIRE(res->affected_rows == 0);
|
||||||
// tables_to_drop.emplace("person");
|
// tables_to_drop.emplace("person");
|
||||||
//
|
//
|
||||||
// res = query::insert()
|
// res = query::insert()
|
||||||
|
|
@ -461,14 +461,14 @@ TEST_CASE_METHOD(QueryFixture, "Test primary key prepared", "[query][primary key
|
||||||
// .values({1, "george"})
|
// .values({1, "george"})
|
||||||
// .execute(db);
|
// .execute(db);
|
||||||
// REQUIRE(res.is_ok());
|
// REQUIRE(res.is_ok());
|
||||||
// REQUIRE(*res == 1);
|
// REQUIRE(res->affected_rows == 1);
|
||||||
//
|
//
|
||||||
// res = query::insert()
|
// res = query::insert()
|
||||||
// .into("person", {"id", "last_name"})
|
// .into("person", {"id", "last_name"})
|
||||||
// .values({2, "clooney"})
|
// .values({2, "clooney"})
|
||||||
// .execute(db);
|
// .execute(db);
|
||||||
// REQUIRE(res.is_ok());
|
// REQUIRE(res.is_ok());
|
||||||
// REQUIRE(*res == 1);
|
// REQUIRE(res->affected_rows == 1);
|
||||||
//
|
//
|
||||||
// auto result = query::select({"id", "first_name", "last_name"})
|
// auto result = query::select({"id", "first_name", "last_name"})
|
||||||
// .from("person")
|
// .from("person")
|
||||||
|
|
@ -498,7 +498,7 @@ TEST_CASE_METHOD(QueryFixture, "Test primary key prepared", "[query][primary key
|
||||||
// })
|
// })
|
||||||
// .execute(db);
|
// .execute(db);
|
||||||
// REQUIRE(res.is_ok());
|
// REQUIRE(res.is_ok());
|
||||||
// REQUIRE(*res == 0);
|
// REQUIRE(res->affected_rows == 0);
|
||||||
// tables_to_drop.emplace("person");
|
// tables_to_drop.emplace("person");
|
||||||
//
|
//
|
||||||
// res = query::insert()
|
// res = query::insert()
|
||||||
|
|
@ -506,14 +506,14 @@ TEST_CASE_METHOD(QueryFixture, "Test primary key prepared", "[query][primary key
|
||||||
// .values({1, "george"})
|
// .values({1, "george"})
|
||||||
// .execute(db);
|
// .execute(db);
|
||||||
// REQUIRE(res.is_ok());
|
// REQUIRE(res.is_ok());
|
||||||
// REQUIRE(*res == 1);
|
// REQUIRE(res->affected_rows == 1);
|
||||||
//
|
//
|
||||||
// res = query::insert()
|
// res = query::insert()
|
||||||
// .into("person", {"id", "last_name"})
|
// .into("person", {"id", "last_name"})
|
||||||
// .values({2, "clooney"})
|
// .values({2, "clooney"})
|
||||||
// .execute(db);
|
// .execute(db);
|
||||||
// REQUIRE(res.is_ok());
|
// REQUIRE(res.is_ok());
|
||||||
// REQUIRE(*res == 1);
|
// REQUIRE(res->affected_rows == 1);
|
||||||
//
|
//
|
||||||
// auto result = query::select({"id", "first_name", "last_name"})
|
// auto result = query::select({"id", "first_name", "last_name"})
|
||||||
// .from("person")
|
// .from("person")
|
||||||
|
|
|
||||||
|
|
@ -52,7 +52,7 @@ TEST_CASE_METHOD(QueryFixture, "Test all data types for record", "[query][record
|
||||||
})
|
})
|
||||||
.execute(db);
|
.execute(db);
|
||||||
REQUIRE(res.is_ok());
|
REQUIRE(res.is_ok());
|
||||||
REQUIRE(res.value() == 0);
|
REQUIRE(res->affected_rows == 0);
|
||||||
|
|
||||||
check_table_exists("types");
|
check_table_exists("types");
|
||||||
tables_to_drop.emplace("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})
|
.values({id, c, s, i, ll, uc, us, ui, ull, b, f, d, str, varchar, md, mt, bin})
|
||||||
.execute(db);
|
.execute(db);
|
||||||
REQUIRE(res.is_ok());
|
REQUIRE(res.is_ok());
|
||||||
REQUIRE(res.value() == 1);
|
REQUIRE(res->affected_rows == 1);
|
||||||
|
|
||||||
auto result = query::select(cols)
|
auto result = query::select(cols)
|
||||||
.from("types")
|
.from("types")
|
||||||
|
|
@ -139,7 +139,7 @@ TEST_CASE_METHOD(QueryFixture, "Create and drop table statement", "[query][recor
|
||||||
})
|
})
|
||||||
.execute(db);
|
.execute(db);
|
||||||
REQUIRE(res.is_ok());
|
REQUIRE(res.is_ok());
|
||||||
REQUIRE(res.value() == 0);
|
REQUIRE(res->affected_rows == 0);
|
||||||
|
|
||||||
check_table_exists("person");
|
check_table_exists("person");
|
||||||
tables_to_drop.emplace("person");
|
tables_to_drop.emplace("person");
|
||||||
|
|
@ -148,7 +148,7 @@ TEST_CASE_METHOD(QueryFixture, "Create and drop table statement", "[query][recor
|
||||||
.table("person")
|
.table("person")
|
||||||
.execute(db);
|
.execute(db);
|
||||||
REQUIRE(res.is_ok());
|
REQUIRE(res.is_ok());
|
||||||
REQUIRE(res.value() == 0);
|
REQUIRE(res->affected_rows == 0);
|
||||||
|
|
||||||
check_table_not_exists("person");
|
check_table_not_exists("person");
|
||||||
}
|
}
|
||||||
|
|
@ -167,7 +167,7 @@ TEST_CASE_METHOD(QueryFixture, "Create and drop table statement with foreign key
|
||||||
})
|
})
|
||||||
.execute(db);
|
.execute(db);
|
||||||
REQUIRE(res.is_ok());
|
REQUIRE(res.is_ok());
|
||||||
REQUIRE(res.value() == 0);
|
REQUIRE(res->affected_rows == 0);
|
||||||
|
|
||||||
check_table_exists("airplane");
|
check_table_exists("airplane");
|
||||||
tables_to_drop.emplace("airplane");
|
tables_to_drop.emplace("airplane");
|
||||||
|
|
@ -185,7 +185,7 @@ TEST_CASE_METHOD(QueryFixture, "Create and drop table statement with foreign key
|
||||||
})
|
})
|
||||||
.execute(db);
|
.execute(db);
|
||||||
REQUIRE(res.is_ok());
|
REQUIRE(res.is_ok());
|
||||||
REQUIRE(res.value() == 0);
|
REQUIRE(res->affected_rows == 0);
|
||||||
|
|
||||||
check_table_exists("flight");
|
check_table_exists("flight");
|
||||||
tables_to_drop.emplace("flight");
|
tables_to_drop.emplace("flight");
|
||||||
|
|
@ -194,7 +194,7 @@ TEST_CASE_METHOD(QueryFixture, "Create and drop table statement with foreign key
|
||||||
.table("flight")
|
.table("flight")
|
||||||
.execute(db);
|
.execute(db);
|
||||||
REQUIRE(res.is_ok());
|
REQUIRE(res.is_ok());
|
||||||
REQUIRE(res.value() == 0);
|
REQUIRE(res->affected_rows == 0);
|
||||||
|
|
||||||
check_table_not_exists("flight");
|
check_table_not_exists("flight");
|
||||||
|
|
||||||
|
|
@ -202,7 +202,7 @@ TEST_CASE_METHOD(QueryFixture, "Create and drop table statement with foreign key
|
||||||
.table("airplane")
|
.table("airplane")
|
||||||
.execute(db);
|
.execute(db);
|
||||||
REQUIRE(res.is_ok());
|
REQUIRE(res.is_ok());
|
||||||
REQUIRE(res.value() == 0);
|
REQUIRE(res->affected_rows == 0);
|
||||||
|
|
||||||
check_table_not_exists("airplane");
|
check_table_not_exists("airplane");
|
||||||
}
|
}
|
||||||
|
|
@ -220,7 +220,7 @@ TEST_CASE_METHOD(QueryFixture, "Execute insert record statement", "[query][recor
|
||||||
})
|
})
|
||||||
.execute(db);
|
.execute(db);
|
||||||
REQUIRE(res.is_ok());
|
REQUIRE(res.is_ok());
|
||||||
REQUIRE(res.value() == 0);
|
REQUIRE(res->affected_rows == 0);
|
||||||
tables_to_drop.emplace("person");
|
tables_to_drop.emplace("person");
|
||||||
|
|
||||||
res = query::insert()
|
res = query::insert()
|
||||||
|
|
@ -228,7 +228,7 @@ TEST_CASE_METHOD(QueryFixture, "Execute insert record statement", "[query][recor
|
||||||
.values({7, "george", 45})
|
.values({7, "george", 45})
|
||||||
.execute(db);
|
.execute(db);
|
||||||
REQUIRE(res.is_ok());
|
REQUIRE(res.is_ok());
|
||||||
REQUIRE(res.value() == 1);
|
REQUIRE(res->affected_rows == 1);
|
||||||
|
|
||||||
auto result = query::select({"id", "name", "age"})
|
auto result = query::select({"id", "name", "age"})
|
||||||
.from("person")
|
.from("person")
|
||||||
|
|
@ -263,7 +263,7 @@ TEST_CASE_METHOD(QueryFixture, "Execute insert record statement with foreign key
|
||||||
})
|
})
|
||||||
.execute(db);
|
.execute(db);
|
||||||
REQUIRE(res.is_ok());
|
REQUIRE(res.is_ok());
|
||||||
REQUIRE(res.value() == 0);
|
REQUIRE(res->affected_rows == 0);
|
||||||
tables_to_drop.emplace("airplane");
|
tables_to_drop.emplace("airplane");
|
||||||
|
|
||||||
res = query::create()
|
res = query::create()
|
||||||
|
|
@ -279,7 +279,7 @@ TEST_CASE_METHOD(QueryFixture, "Execute insert record statement with foreign key
|
||||||
})
|
})
|
||||||
.execute(db);
|
.execute(db);
|
||||||
REQUIRE(res.is_ok());
|
REQUIRE(res.is_ok());
|
||||||
REQUIRE(res.value() == 0);
|
REQUIRE(res->affected_rows == 0);
|
||||||
tables_to_drop.emplace("flight");
|
tables_to_drop.emplace("flight");
|
||||||
|
|
||||||
std::vector<std::vector<database_type>> values_list{
|
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))
|
.values(std::move(values))
|
||||||
.execute(db);
|
.execute(db);
|
||||||
REQUIRE(res.is_ok());
|
REQUIRE(res.is_ok());
|
||||||
REQUIRE(res.value() == 1);
|
REQUIRE(res->affected_rows == 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
auto count = query::select({count_all()})
|
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"})
|
.values({4, 1, "George"})
|
||||||
.execute(db);
|
.execute(db);
|
||||||
REQUIRE(res.is_ok());
|
REQUIRE(res.is_ok());
|
||||||
REQUIRE(res.value() == 1);
|
REQUIRE(res->affected_rows == 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_CASE_METHOD(QueryFixture, "Execute update record statement", "[query][record]")
|
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);
|
.execute(db);
|
||||||
REQUIRE(res.is_ok());
|
REQUIRE(res.is_ok());
|
||||||
REQUIRE(res.value() == 0);
|
REQUIRE(res->affected_rows == 0);
|
||||||
tables_to_drop.emplace("person");
|
tables_to_drop.emplace("person");
|
||||||
|
|
||||||
res = query::insert()
|
res = query::insert()
|
||||||
|
|
@ -335,7 +335,7 @@ TEST_CASE_METHOD(QueryFixture, "Execute update record statement", "[query][recor
|
||||||
.execute(db);
|
.execute(db);
|
||||||
|
|
||||||
REQUIRE(res.is_ok());
|
REQUIRE(res.is_ok());
|
||||||
REQUIRE(res.value() == 1);
|
REQUIRE(res->affected_rows == 1);
|
||||||
|
|
||||||
res = query::update("person")
|
res = query::update("person")
|
||||||
.set({{"id", 7},
|
.set({{"id", 7},
|
||||||
|
|
@ -344,7 +344,7 @@ TEST_CASE_METHOD(QueryFixture, "Execute update record statement", "[query][recor
|
||||||
.where("id"_col == 7)
|
.where("id"_col == 7)
|
||||||
.execute(db);
|
.execute(db);
|
||||||
REQUIRE(res.is_ok());
|
REQUIRE(res.is_ok());
|
||||||
REQUIRE(res.value() == 1);
|
REQUIRE(res->affected_rows == 1);
|
||||||
|
|
||||||
auto result = query::select({"id", "name", "age"})
|
auto result = query::select({"id", "name", "age"})
|
||||||
.from("person")
|
.from("person")
|
||||||
|
|
@ -379,7 +379,7 @@ TEST_CASE_METHOD(QueryFixture, "Execute select statement", "[query][record]")
|
||||||
})
|
})
|
||||||
.execute(db);
|
.execute(db);
|
||||||
REQUIRE(res.is_ok());
|
REQUIRE(res.is_ok());
|
||||||
REQUIRE(res.value() == 0);
|
REQUIRE(res->affected_rows == 0);
|
||||||
tables_to_drop.emplace("person");
|
tables_to_drop.emplace("person");
|
||||||
|
|
||||||
std::vector<std::vector<database_type>> values_list{
|
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))
|
.values(std::move(values))
|
||||||
.execute(db);
|
.execute(db);
|
||||||
REQUIRE(res.is_ok());
|
REQUIRE(res.is_ok());
|
||||||
REQUIRE(res.value() == 1);
|
REQUIRE(res->affected_rows == 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
auto result = query::select({"id", "name", "age"})
|
auto result = query::select({"id", "name", "age"})
|
||||||
|
|
@ -439,7 +439,7 @@ TEST_CASE_METHOD(QueryFixture, "Execute select statement with order by", "[query
|
||||||
})
|
})
|
||||||
.execute(db);
|
.execute(db);
|
||||||
REQUIRE(res.is_ok());
|
REQUIRE(res.is_ok());
|
||||||
REQUIRE(res.value() == 0);
|
REQUIRE(res->affected_rows == 0);
|
||||||
tables_to_drop.emplace("person");
|
tables_to_drop.emplace("person");
|
||||||
|
|
||||||
std::vector<std::vector<database_type>> values_list{
|
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))
|
.values(std::move(values))
|
||||||
.execute(db);
|
.execute(db);
|
||||||
REQUIRE(res.is_ok());
|
REQUIRE(res.is_ok());
|
||||||
REQUIRE(res.value() == 1);
|
REQUIRE(res->affected_rows == 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
auto result = query::select({"id", "name", "age"})
|
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);
|
.execute(db);
|
||||||
REQUIRE(res.is_ok());
|
REQUIRE(res.is_ok());
|
||||||
REQUIRE(*res == 0);
|
REQUIRE(res->affected_rows == 0);
|
||||||
tables_to_drop.emplace("person");
|
tables_to_drop.emplace("person");
|
||||||
|
|
||||||
std::vector<std::vector<database_type>> values_list{
|
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))
|
.values(std::move(values))
|
||||||
.execute(db);
|
.execute(db);
|
||||||
REQUIRE(res.is_ok());
|
REQUIRE(res.is_ok());
|
||||||
REQUIRE(res.value() == 1);
|
REQUIRE(res->affected_rows == 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
auto result = query::select({count("age").as("age_count"), "age"})
|
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);
|
.execute(db);
|
||||||
REQUIRE(res.is_ok());
|
REQUIRE(res.is_ok());
|
||||||
REQUIRE(*res == 0);
|
REQUIRE(res->affected_rows == 0);
|
||||||
tables_to_drop.emplace("person");
|
tables_to_drop.emplace("person");
|
||||||
|
|
||||||
res = query::insert()
|
res = query::insert()
|
||||||
|
|
@ -546,13 +546,13 @@ TEST_CASE_METHOD(QueryFixture, "Execute delete statement", "[query][record]") {
|
||||||
.values({1, "george", 45})
|
.values({1, "george", 45})
|
||||||
.execute(db);
|
.execute(db);
|
||||||
REQUIRE(res.is_ok());
|
REQUIRE(res.is_ok());
|
||||||
REQUIRE(*res == 1);
|
REQUIRE(res->affected_rows == 1);
|
||||||
res = query::insert()
|
res = query::insert()
|
||||||
.into("person", {"id", "name", "age"})
|
.into("person", {"id", "name", "age"})
|
||||||
.values({2, "jane", 45})
|
.values({2, "jane", 45})
|
||||||
.execute(db);
|
.execute(db);
|
||||||
REQUIRE(res.is_ok());
|
REQUIRE(res.is_ok());
|
||||||
REQUIRE(*res == 1);
|
REQUIRE(res->affected_rows == 1);
|
||||||
|
|
||||||
auto count = query::select({count_all()})
|
auto count = query::select({count_all()})
|
||||||
.from("person")
|
.from("person")
|
||||||
|
|
@ -566,7 +566,7 @@ TEST_CASE_METHOD(QueryFixture, "Execute delete statement", "[query][record]") {
|
||||||
.where("id"_col == 1)
|
.where("id"_col == 1)
|
||||||
.execute(db);
|
.execute(db);
|
||||||
REQUIRE(res.is_ok());
|
REQUIRE(res.is_ok());
|
||||||
REQUIRE(*res == 1);
|
REQUIRE(res->affected_rows == 1);
|
||||||
|
|
||||||
count = query::select({count_all()})
|
count = query::select({count_all()})
|
||||||
.from("person")
|
.from("person")
|
||||||
|
|
@ -584,7 +584,7 @@ TEST_CASE_METHOD(QueryFixture, "Test quoted identifier record", "[query][record]
|
||||||
})
|
})
|
||||||
.execute(db);
|
.execute(db);
|
||||||
REQUIRE(res.is_ok());
|
REQUIRE(res.is_ok());
|
||||||
REQUIRE(*res == 0);
|
REQUIRE(res->affected_rows == 0);
|
||||||
tables_to_drop.emplace("quotes");
|
tables_to_drop.emplace("quotes");
|
||||||
|
|
||||||
// check table description
|
// check table description
|
||||||
|
|
@ -608,7 +608,7 @@ TEST_CASE_METHOD(QueryFixture, "Test quoted identifier record", "[query][record]
|
||||||
.values({"Berlin", "London"})
|
.values({"Berlin", "London"})
|
||||||
.execute(db);
|
.execute(db);
|
||||||
REQUIRE(res.is_ok());
|
REQUIRE(res.is_ok());
|
||||||
REQUIRE(*res == 1);
|
REQUIRE(res->affected_rows == 1);
|
||||||
|
|
||||||
auto result = query::select({"from", "to"})
|
auto result = query::select({"from", "to"})
|
||||||
.from("quotes")
|
.from("quotes")
|
||||||
|
|
@ -624,7 +624,7 @@ TEST_CASE_METHOD(QueryFixture, "Test quoted identifier record", "[query][record]
|
||||||
.where("from"_col == "Berlin")
|
.where("from"_col == "Berlin")
|
||||||
.execute(db);
|
.execute(db);
|
||||||
REQUIRE(res.is_ok());
|
REQUIRE(res.is_ok());
|
||||||
REQUIRE(*res == 1);
|
REQUIRE(res->affected_rows == 1);
|
||||||
|
|
||||||
result = query::select({"from", "to"})
|
result = query::select({"from", "to"})
|
||||||
.from("quotes")
|
.from("quotes")
|
||||||
|
|
@ -649,7 +649,7 @@ TEST_CASE_METHOD(QueryFixture, "Test create record", "[query][record][create]")
|
||||||
})
|
})
|
||||||
.execute(db);
|
.execute(db);
|
||||||
REQUIRE(res.is_ok());
|
REQUIRE(res.is_ok());
|
||||||
REQUIRE(*res == 0);
|
REQUIRE(res->affected_rows == 0);
|
||||||
tables_to_drop.emplace("person");
|
tables_to_drop.emplace("person");
|
||||||
|
|
||||||
check_table_exists("person");
|
check_table_exists("person");
|
||||||
|
|
@ -676,7 +676,7 @@ TEST_CASE_METHOD(QueryFixture, "Test insert record", "[query][record][insert]")
|
||||||
})
|
})
|
||||||
.execute(db);
|
.execute(db);
|
||||||
REQUIRE(res.is_ok());
|
REQUIRE(res.is_ok());
|
||||||
REQUIRE(*res == 0);
|
REQUIRE(res->affected_rows == 0);
|
||||||
tables_to_drop.emplace("person");
|
tables_to_drop.emplace("person");
|
||||||
|
|
||||||
check_table_exists("person");
|
check_table_exists("person");
|
||||||
|
|
@ -686,7 +686,7 @@ TEST_CASE_METHOD(QueryFixture, "Test insert record", "[query][record][insert]")
|
||||||
.values({1, "hans", 45})
|
.values({1, "hans", 45})
|
||||||
.execute(db);
|
.execute(db);
|
||||||
REQUIRE(res.is_ok());
|
REQUIRE(res.is_ok());
|
||||||
REQUIRE(*res == 1);
|
REQUIRE(res->affected_rows == 1);
|
||||||
|
|
||||||
auto row = query::select({"id", "name", "age"})
|
auto row = query::select({"id", "name", "age"})
|
||||||
.from("person")
|
.from("person")
|
||||||
|
|
@ -713,7 +713,7 @@ TEST_CASE_METHOD(QueryFixture, "Test update record", "[query][record][update]")
|
||||||
})
|
})
|
||||||
.execute(db);
|
.execute(db);
|
||||||
REQUIRE(res.is_ok());
|
REQUIRE(res.is_ok());
|
||||||
REQUIRE(*res == 0);
|
REQUIRE(res->affected_rows == 0);
|
||||||
tables_to_drop.emplace("person");
|
tables_to_drop.emplace("person");
|
||||||
|
|
||||||
check_table_exists("person");
|
check_table_exists("person");
|
||||||
|
|
@ -723,7 +723,7 @@ TEST_CASE_METHOD(QueryFixture, "Test update record", "[query][record][update]")
|
||||||
.values({1, "hans", 45})
|
.values({1, "hans", 45})
|
||||||
.execute(db);
|
.execute(db);
|
||||||
REQUIRE(res.is_ok());
|
REQUIRE(res.is_ok());
|
||||||
REQUIRE(*res == 1);
|
REQUIRE(res->affected_rows == 1);
|
||||||
|
|
||||||
auto row = query::select({"id", "name", "age"})
|
auto row = query::select({"id", "name", "age"})
|
||||||
.from("person")
|
.from("person")
|
||||||
|
|
@ -740,7 +740,7 @@ TEST_CASE_METHOD(QueryFixture, "Test update record", "[query][record][update]")
|
||||||
.where("name"_col == "hans")
|
.where("name"_col == "hans")
|
||||||
.execute(db);
|
.execute(db);
|
||||||
REQUIRE(res.is_ok());
|
REQUIRE(res.is_ok());
|
||||||
REQUIRE(*res == 1);
|
REQUIRE(res->affected_rows == 1);
|
||||||
|
|
||||||
row = query::select({"id", "name", "age"})
|
row = query::select({"id", "name", "age"})
|
||||||
.from("person")
|
.from("person")
|
||||||
|
|
@ -771,7 +771,7 @@ TEST_CASE_METHOD(QueryFixture, "Test prepared record statement", "[query][record
|
||||||
|
|
||||||
auto res = stmt->execute();
|
auto res = stmt->execute();
|
||||||
REQUIRE(res.is_ok());
|
REQUIRE(res.is_ok());
|
||||||
REQUIRE(*res == 0);
|
REQUIRE(res->affected_rows == 0);
|
||||||
check_table_exists("person");
|
check_table_exists("person");
|
||||||
|
|
||||||
const std::vector<std::string> cols = {"id", "name", "age"};
|
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);
|
.execute(db);
|
||||||
REQUIRE(res.is_ok());
|
REQUIRE(res.is_ok());
|
||||||
REQUIRE(*res == 0);
|
REQUIRE(res->affected_rows == 0);
|
||||||
|
|
||||||
check_table_exists("person");
|
check_table_exists("person");
|
||||||
tables_to_drop.emplace("person");
|
tables_to_drop.emplace("person");
|
||||||
|
|
@ -808,7 +808,7 @@ TEST_CASE_METHOD(QueryFixture, "Test scalar result", "[query][record][scalar][re
|
||||||
.values({id})
|
.values({id})
|
||||||
.execute(db);
|
.execute(db);
|
||||||
REQUIRE(res.is_ok());
|
REQUIRE(res.is_ok());
|
||||||
REQUIRE(*res == 1);
|
REQUIRE(res->affected_rows == 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
auto stmt = query::select({"id"})
|
auto stmt = query::select({"id"})
|
||||||
|
|
|
||||||
|
|
@ -32,7 +32,7 @@ TEST_CASE_METHOD(QueryFixture, "Test create statement", "[query][statement][crea
|
||||||
|
|
||||||
auto res = stmt->execute();
|
auto res = stmt->execute();
|
||||||
REQUIRE(res.is_ok());
|
REQUIRE(res.is_ok());
|
||||||
REQUIRE(*res == 0);
|
REQUIRE(res->affected_rows == 0);
|
||||||
tables_to_drop.emplace("persons");
|
tables_to_drop.emplace("persons");
|
||||||
|
|
||||||
check_table_exists("persons");
|
check_table_exists("persons");
|
||||||
|
|
@ -63,7 +63,7 @@ TEST_CASE_METHOD(QueryFixture, "Test insert statement", "[query][statement][inse
|
||||||
auto res = stmt->bind(george)
|
auto res = stmt->bind(george)
|
||||||
.execute();
|
.execute();
|
||||||
REQUIRE(res.is_ok());
|
REQUIRE(res.is_ok());
|
||||||
REQUIRE(*res == 1);
|
REQUIRE(res->affected_rows == 1);
|
||||||
|
|
||||||
auto row = query::select({PERSON.id, PERSON.name, PERSON.age, PERSON.image})
|
auto row = query::select({PERSON.id, PERSON.name, PERSON.age, PERSON.image})
|
||||||
.from(PERSON)
|
.from(PERSON)
|
||||||
|
|
@ -94,7 +94,7 @@ TEST_CASE_METHOD(QueryFixture, "Test update statement", "[query][statement][upda
|
||||||
auto res = stmt->bind(george)
|
auto res = stmt->bind(george)
|
||||||
.execute();
|
.execute();
|
||||||
REQUIRE(res.is_ok());
|
REQUIRE(res.is_ok());
|
||||||
REQUIRE(*res == 1);
|
REQUIRE(res->affected_rows == 1);
|
||||||
|
|
||||||
auto row = query::select({PERSON.id, PERSON.name, PERSON.age, PERSON.image})
|
auto row = query::select({PERSON.id, PERSON.name, PERSON.age, PERSON.image})
|
||||||
.from(PERSON)
|
.from(PERSON)
|
||||||
|
|
@ -119,7 +119,7 @@ TEST_CASE_METHOD(QueryFixture, "Test update statement", "[query][statement][upda
|
||||||
.bind(4, george.id)
|
.bind(4, george.id)
|
||||||
.execute();
|
.execute();
|
||||||
REQUIRE(res.is_ok());
|
REQUIRE(res.is_ok());
|
||||||
REQUIRE(*res == 1);
|
REQUIRE(res->affected_rows == 1);
|
||||||
|
|
||||||
row = query::select({PERSON.id, PERSON.name, PERSON.age, PERSON.image})
|
row = query::select({PERSON.id, PERSON.name, PERSON.age, PERSON.image})
|
||||||
.from(PERSON)
|
.from(PERSON)
|
||||||
|
|
@ -156,7 +156,7 @@ TEST_CASE_METHOD(QueryFixture, "Test delete statement", "[query][statement][dele
|
||||||
auto res = stmt->bind(p)
|
auto res = stmt->bind(p)
|
||||||
.execute();
|
.execute();
|
||||||
REQUIRE(res.is_ok());
|
REQUIRE(res.is_ok());
|
||||||
REQUIRE(*res == 1);
|
REQUIRE(res->affected_rows == 1);
|
||||||
stmt->reset();
|
stmt->reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -187,7 +187,7 @@ TEST_CASE_METHOD(QueryFixture, "Test delete statement", "[query][statement][dele
|
||||||
auto res = stmt->bind(0, "jane")
|
auto res = stmt->bind(0, "jane")
|
||||||
.execute();
|
.execute();
|
||||||
REQUIRE(res.is_ok());
|
REQUIRE(res.is_ok());
|
||||||
REQUIRE(*res == 1);
|
REQUIRE(res->affected_rows == 1);
|
||||||
|
|
||||||
select_stmt->reset();
|
select_stmt->reset();
|
||||||
auto row = select_stmt->bind(0, "jane")
|
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")
|
res = stmt->bind(0, "merlin")
|
||||||
.execute();
|
.execute();
|
||||||
REQUIRE(res.is_ok());
|
REQUIRE(res.is_ok());
|
||||||
REQUIRE(*res == 1);
|
REQUIRE(res->affected_rows == 1);
|
||||||
|
|
||||||
select_stmt->reset();
|
select_stmt->reset();
|
||||||
row = select_stmt->bind(0, "merlin")
|
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)
|
auto res = stmt->bind(p)
|
||||||
.execute();
|
.execute();
|
||||||
REQUIRE(res.is_ok());
|
REQUIRE(res.is_ok());
|
||||||
REQUIRE(*res == 1);
|
REQUIRE(res->affected_rows == 1);
|
||||||
stmt->reset();
|
stmt->reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -51,7 +51,7 @@ TEST_CASE_METHOD(QueryFixture, "Execute select statement with where clause", "[q
|
||||||
.values(george)
|
.values(george)
|
||||||
.execute(db);
|
.execute(db);
|
||||||
REQUIRE(res.is_ok());
|
REQUIRE(res.is_ok());
|
||||||
REQUIRE(*res == 1);
|
REQUIRE(res->affected_rows == 1);
|
||||||
|
|
||||||
// fetch person as record
|
// fetch person as record
|
||||||
auto result_record = query::select({PERSON.id, PERSON.name, PERSON.age, PERSON.image})
|
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);
|
.execute(db);
|
||||||
REQUIRE(res.is_ok());
|
REQUIRE(res.is_ok());
|
||||||
REQUIRE(*res == 0);
|
REQUIRE(res->affected_rows == 0);
|
||||||
|
|
||||||
REQUIRE(db.exists("person"));
|
REQUIRE(db.exists("person"));
|
||||||
tables_to_drop.emplace("person");
|
tables_to_drop.emplace("person");
|
||||||
|
|
@ -110,7 +110,7 @@ TEST_CASE_METHOD(QueryFixture, "Execute insert statement", "[query][insert]") {
|
||||||
.values({7, "george", "green"})
|
.values({7, "george", "green"})
|
||||||
.execute(db);
|
.execute(db);
|
||||||
REQUIRE(res.is_ok());
|
REQUIRE(res.is_ok());
|
||||||
REQUIRE(*res == 1);
|
REQUIRE(res->affected_rows == 1);
|
||||||
|
|
||||||
// fetch person as record
|
// fetch person as record
|
||||||
auto result_record = query::select({"id", "name", "color"})
|
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)
|
.values(*plane)
|
||||||
.execute(db);
|
.execute(db);
|
||||||
REQUIRE(res.is_ok());
|
REQUIRE(res.is_ok());
|
||||||
REQUIRE(*res == 1);
|
REQUIRE(res->affected_rows == 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
auto count = query::select({count_all()})
|
auto count = query::select({count_all()})
|
||||||
|
|
@ -171,7 +171,7 @@ TEST_CASE_METHOD(QueryFixture, "Select statement with foreign key", "[query][for
|
||||||
.values(f4711)
|
.values(f4711)
|
||||||
.execute(db);
|
.execute(db);
|
||||||
REQUIRE(res.is_ok());
|
REQUIRE(res.is_ok());
|
||||||
REQUIRE(*res == 1);
|
REQUIRE(res->affected_rows == 1);
|
||||||
|
|
||||||
auto f = query::select({FLIGHT.id, FLIGHT.airplane_id, FLIGHT.pilot_name})
|
auto f = query::select({FLIGHT.id, FLIGHT.airplane_id, FLIGHT.pilot_name})
|
||||||
.from(FLIGHT)
|
.from(FLIGHT)
|
||||||
|
|
@ -204,7 +204,7 @@ TEST_CASE_METHOD(QueryFixture, "Select statement with foreign key and join_left"
|
||||||
.values(*plane)
|
.values(*plane)
|
||||||
.execute(db);
|
.execute(db);
|
||||||
REQUIRE(res.is_ok());
|
REQUIRE(res.is_ok());
|
||||||
REQUIRE(*res == 1);
|
REQUIRE(res->affected_rows == 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
auto count = query::select({count_all()})
|
auto count = query::select({count_all()})
|
||||||
|
|
@ -225,7 +225,7 @@ TEST_CASE_METHOD(QueryFixture, "Select statement with foreign key and join_left"
|
||||||
.values(*f)
|
.values(*f)
|
||||||
.execute(db);
|
.execute(db);
|
||||||
REQUIRE(res.is_ok());
|
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})
|
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)
|
.values(*plane)
|
||||||
.execute(db);
|
.execute(db);
|
||||||
REQUIRE(res.is_ok());
|
REQUIRE(res.is_ok());
|
||||||
REQUIRE(*res == 1);
|
REQUIRE(res->affected_rows == 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
auto count = query::select({count_all()})
|
auto count = query::select({count_all()})
|
||||||
|
|
@ -308,7 +308,7 @@ TEST_CASE_METHOD(QueryFixture, "Select statement with foreign key and for single
|
||||||
.values(*f)
|
.values(*f)
|
||||||
.execute(db);
|
.execute(db);
|
||||||
REQUIRE(res.is_ok());
|
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})
|
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)
|
.values(i)
|
||||||
.execute(db);
|
.execute(db);
|
||||||
REQUIRE(res.is_ok());
|
REQUIRE(res.is_ok());
|
||||||
REQUIRE(*res == 1);
|
REQUIRE(res->affected_rows == 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<recipe> recipes{
|
std::vector<recipe> recipes{
|
||||||
|
|
@ -383,7 +383,7 @@ TEST_CASE_METHOD(QueryFixture, "Select statement with many to many relationship"
|
||||||
.values(r)
|
.values(r)
|
||||||
.execute(db);
|
.execute(db);
|
||||||
REQUIRE(res.is_ok());
|
REQUIRE(res.is_ok());
|
||||||
REQUIRE(*res == 1);
|
REQUIRE(res->affected_rows == 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<std::pair<int, int>> recipe_ingredients {
|
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})
|
.values({recipe_id, ingredient_id})
|
||||||
.execute(db);
|
.execute(db);
|
||||||
REQUIRE(res.is_ok());
|
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)
|
.values(*sh)
|
||||||
.execute(db);
|
.execute(db);
|
||||||
REQUIRE(res.is_ok());
|
REQUIRE(res.is_ok());
|
||||||
REQUIRE(*res == 1);
|
REQUIRE(res->affected_rows == 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
auto count = query::select({count_all()})
|
auto count = query::select({count_all()})
|
||||||
|
|
@ -533,7 +533,7 @@ TEST_CASE_METHOD(QueryFixture, "Test load entity with eager has many relation",
|
||||||
.values(*pkg)
|
.values(*pkg)
|
||||||
.execute(db);
|
.execute(db);
|
||||||
REQUIRE(res.is_ok());
|
REQUIRE(res.is_ok());
|
||||||
REQUIRE(*res == 1);
|
REQUIRE(res->affected_rows == 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
count = query::select({count_all()})
|
count = query::select({count_all()})
|
||||||
|
|
@ -621,7 +621,7 @@ TEST_CASE_METHOD(QueryFixture, "Test load entity with lazy has many relation", "
|
||||||
.values(*a)
|
.values(*a)
|
||||||
.execute(db);
|
.execute(db);
|
||||||
REQUIRE(res.is_ok());
|
REQUIRE(res.is_ok());
|
||||||
REQUIRE(*res == 1);
|
REQUIRE(res->affected_rows == 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
auto count = query::select({count_all()})
|
auto count = query::select({count_all()})
|
||||||
|
|
@ -636,7 +636,7 @@ TEST_CASE_METHOD(QueryFixture, "Test load entity with lazy has many relation", "
|
||||||
.values(*b)
|
.values(*b)
|
||||||
.execute(db);
|
.execute(db);
|
||||||
REQUIRE(res.is_ok());
|
REQUIRE(res.is_ok());
|
||||||
REQUIRE(*res == 1);
|
REQUIRE(res->affected_rows == 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
count = query::select({count_all()})
|
count = query::select({count_all()})
|
||||||
|
|
@ -698,7 +698,7 @@ TEST_CASE_METHOD(QueryFixture, "Test load entity with lazy belongs to relation",
|
||||||
.values(*dep)
|
.values(*dep)
|
||||||
.execute(db);
|
.execute(db);
|
||||||
REQUIRE(res.is_ok());
|
REQUIRE(res.is_ok());
|
||||||
REQUIRE(*res == 1);
|
REQUIRE(res->affected_rows == 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
auto count = query::select({count_all()})
|
auto count = query::select({count_all()})
|
||||||
|
|
@ -713,7 +713,7 @@ TEST_CASE_METHOD(QueryFixture, "Test load entity with lazy belongs to relation",
|
||||||
.values(*emp)
|
.values(*emp)
|
||||||
.execute(db);
|
.execute(db);
|
||||||
REQUIRE(res.is_ok());
|
REQUIRE(res.is_ok());
|
||||||
REQUIRE(*res == 1);
|
REQUIRE(res->affected_rows == 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
count = query::select({count_all()})
|
count = query::select({count_all()})
|
||||||
|
|
@ -769,7 +769,7 @@ TEST_CASE_METHOD(QueryFixture, "Test load entity with eager belongs to relation"
|
||||||
.values(*a)
|
.values(*a)
|
||||||
.execute(db);
|
.execute(db);
|
||||||
REQUIRE(res.is_ok());
|
REQUIRE(res.is_ok());
|
||||||
REQUIRE(*res == 1);
|
REQUIRE(res->affected_rows == 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
auto count = query::select({count_all()})
|
auto count = query::select({count_all()})
|
||||||
|
|
@ -784,7 +784,7 @@ TEST_CASE_METHOD(QueryFixture, "Test load entity with eager belongs to relation"
|
||||||
.values(*b)
|
.values(*b)
|
||||||
.execute(db);
|
.execute(db);
|
||||||
REQUIRE(res.is_ok());
|
REQUIRE(res.is_ok());
|
||||||
REQUIRE(*res == 1);
|
REQUIRE(res->affected_rows == 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
count = query::select({count_all()})
|
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)
|
.values(i)
|
||||||
.execute(db);
|
.execute(db);
|
||||||
REQUIRE(res.is_ok());
|
REQUIRE(res.is_ok());
|
||||||
REQUIRE(*res == 1);
|
REQUIRE(res->affected_rows == 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<recipe> recipes{
|
std::vector<recipe> recipes{
|
||||||
|
|
@ -860,7 +860,7 @@ TEST_CASE_METHOD(QueryFixture, "Test load entity with eager has many to many rel
|
||||||
.values(r)
|
.values(r)
|
||||||
.execute(db);
|
.execute(db);
|
||||||
REQUIRE(res.is_ok());
|
REQUIRE(res.is_ok());
|
||||||
REQUIRE(*res == 1);
|
REQUIRE(res->affected_rows == 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<std::pair<int, int>> recipe_ingredients {
|
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})
|
.values({recipe_id, ingredient_id})
|
||||||
.execute(db);
|
.execute(db);
|
||||||
REQUIRE(res.is_ok());
|
REQUIRE(res.is_ok());
|
||||||
REQUIRE(*res == 1);
|
REQUIRE(res->affected_rows == 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
const auto r = RECIPE.as("r");
|
const auto r = RECIPE.as("r");
|
||||||
|
|
|
||||||
|
|
@ -49,7 +49,7 @@ TEST_CASE_METHOD(StatementTestFixture, "Create prepared statement", "[statement]
|
||||||
for (const auto &plane: planes) {
|
for (const auto &plane: planes) {
|
||||||
auto res = stmt->bind(plane).execute();
|
auto res = stmt->bind(plane).execute();
|
||||||
REQUIRE(res.is_ok());
|
REQUIRE(res.is_ok());
|
||||||
REQUIRE(*res == 1);
|
REQUIRE(res->affected_rows == 1);
|
||||||
stmt->reset();
|
stmt->reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -73,7 +73,7 @@ TEST_CASE_METHOD(StatementTestFixture, "Create prepared statement", "[statement]
|
||||||
.values(plane)
|
.values(plane)
|
||||||
.execute(db);
|
.execute(db);
|
||||||
REQUIRE(res.is_ok());
|
REQUIRE(res.is_ok());
|
||||||
REQUIRE(*res == 1);
|
REQUIRE(res->affected_rows == 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
auto stmt = query::select({AIRPLANE.id, AIRPLANE.brand, AIRPLANE.model})
|
auto stmt = query::select({AIRPLANE.id, AIRPLANE.brand, AIRPLANE.model})
|
||||||
|
|
|
||||||
|
|
@ -36,7 +36,7 @@ TEST_CASE_METHOD(TypeTraitsTestFixture, "Special handling of attributes with typ
|
||||||
.values(loc)
|
.values(loc)
|
||||||
.execute(db);
|
.execute(db);
|
||||||
REQUIRE(res.is_ok());
|
REQUIRE(res.is_ok());
|
||||||
REQUIRE(*res == 1);
|
REQUIRE(res->affected_rows == 1);
|
||||||
|
|
||||||
auto result = query::select(generator::columns<location>(repo))
|
auto result = query::select(generator::columns<location>(repo))
|
||||||
.from("location")
|
.from("location")
|
||||||
|
|
@ -61,7 +61,7 @@ TEST_CASE_METHOD(TypeTraitsTestFixture, "Special handling of attributes with typ
|
||||||
auto res = stmt->bind(loc)
|
auto res = stmt->bind(loc)
|
||||||
.execute();
|
.execute();
|
||||||
REQUIRE(res.is_ok());
|
REQUIRE(res.is_ok());
|
||||||
REQUIRE(*res == 1);
|
REQUIRE(res->affected_rows == 1);
|
||||||
|
|
||||||
auto result = query::select(generator::columns<location>(repo))
|
auto result = query::select(generator::columns<location>(repo))
|
||||||
.from("location")
|
.from("location")
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue