#include "matador/sql/statement.hpp" #include "matador/sql/record.hpp" #include "matador/sql/field.hpp" #include #include namespace matador::sql { statement::statement(const std::shared_ptr& proxy, logger_ptr logger) : statement_proxy_(proxy) , logger_(std::move(logger)){} statement::statement(statement&& x) noexcept : statement_proxy_(std::move(x.statement_proxy_)) , bindings_(std::move(x.bindings_)) , logger_(std::move(x.logger_)) { } statement& statement::operator=(statement&& x) noexcept { statement_proxy_ = std::move(x.statement_proxy_); bindings_ = std::move(x.bindings_); logger_ = std::move(x.logger_); return *this; } statement::statement(const statement& x) : statement_proxy_(x.statement_proxy_) , bindings_(x.statement_proxy_->create_binder()) , logger_(x.logger_) { } statement& statement::operator=(const statement& x) { if (&x == this) { return *this; } statement_proxy_ = x.statement_proxy_; bindings_ = x.statement_proxy_->create_binder(); logger_ = x.logger_; return *this; } statement &statement::bind(const size_t pos, const char *value) { statement_proxy_->bind(pos, value, strlen(value), *bindings_); return *this; } statement &statement::bind(const size_t pos, std::string &val, const size_t size) { statement_proxy_->bind(pos, val, size, *bindings_); return *this; } utils::result statement::execute() const { // logger_.info(statement_->query_.sql); return statement_proxy_->execute(*bindings_); } utils::result, utils::error> statement::fetch() const { auto result = statement_proxy_->fetch(*bindings_); if (!result.is_ok()) { return utils::failure(result.err()); } // logger_.info(statement_->query_.sql); return utils::ok(query_result{std::move(*result)}); } utils::result, utils::error> statement::fetch_one() const { // logger_.info(statement_->query_.sql); auto result = statement_proxy_->fetch(*bindings_); if (!result.is_ok()) { return utils::failure(result.err()); } query_result records(std::move(*result)); auto first = records.begin(); if (first == records.end()) { return utils::ok(std::optional{std::nullopt}); } return utils::ok(std::optional{*first.release()}); } void statement::reset() const { statement_proxy_->reset(); } std::string statement::sql() const { return statement_proxy_->sql(); } utils::result, utils::error> statement::fetch_internal() const { auto result = statement_proxy_->fetch(*bindings_); if (!result.is_ok()) { return utils::failure(result.err()); } // logger_.info(statement_->query_.sql); return result; } }