moved parameter_binder from member to parameter to bind, execute and fetch methods

This commit is contained in:
2025-07-30 21:00:40 +02:00
parent ebd8bccfb3
commit 6e2baad3ef
18 changed files with 169 additions and 168 deletions
@@ -53,7 +53,7 @@ postgres_parameter_binder::bind_data::bind_data(const size_t size)
, formats(size)
{}
postgres_parameter_binder::postgres_parameter_binder(size_t size)
postgres_parameter_binder::postgres_parameter_binder(const size_t size)
: bind_data_(size)
{}
+23 -19
View File
@@ -1,5 +1,6 @@
#include "postgres_statement.hpp"
#include "postgres_error.hpp"
#include "postgres_parameter_binder.h"
#include "postgres_result_reader.hpp"
namespace matador::backends::postgres {
@@ -8,17 +9,19 @@ postgres_statement::postgres_statement(PGconn *db, std::string name, const sql::
: statement_impl(query)
, db_(db)
, name_(std::move(name))
, binder_(query_.bind_vars.size())
{}
utils::result<size_t, utils::error> postgres_statement::execute()
{
utils::result<size_t, utils::error> postgres_statement::execute(const sql::interface::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"));
}
PGresult *res = PQexecPrepared(db_,
name_.c_str(),
static_cast<int>(binder_.params().values.size()),
binder_.params().values.data(),
binder_.params().lengths.data(),
binder_.params().formats.data(),
static_cast<int>(postgres_bindings->params().values.size()),
postgres_bindings->params().values.data(),
postgres_bindings->params().lengths.data(),
postgres_bindings->params().formats.data(),
0);
if (is_result_error(res)) {
@@ -30,17 +33,20 @@ utils::result<size_t, utils::error> postgres_statement::execute()
return utils::ok(static_cast<size_t>(0));
}
return utils::ok(static_cast<size_t>(std::stoul(tuples)));
return utils::ok((std::stoul(tuples)));
}
utils::result<std::unique_ptr<sql::query_result_impl>, utils::error> postgres_statement::fetch()
{
utils::result<std::unique_ptr<sql::query_result_impl>, utils::error> postgres_statement::fetch(const sql::interface::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"));
}
PGresult *res = PQexecPrepared(db_,
name_.c_str(),
static_cast<int>(binder_.params().values.size()),
binder_.params().values.data(),
binder_.params().lengths.data(),
binder_.params().formats.data(),
static_cast<int>(postgres_bindings->params().values.size()),
postgres_bindings->params().values.data(),
postgres_bindings->params().lengths.data(),
postgres_bindings->params().formats.data(),
0);
if (is_result_error(res)) {
@@ -52,9 +58,7 @@ utils::result<std::unique_ptr<sql::query_result_impl>, utils::error> postgres_st
void postgres_statement::reset() {}
utils::attribute_writer& postgres_statement::binder()
{
return binder_;
std::unique_ptr<utils::attribute_writer> postgres_statement::create_binder() const {
return std::make_unique<postgres_parameter_binder>(query_.bind_vars.size());
}
}
}