#ifndef STATEMENT_PROXY_HPP #define STATEMENT_PROXY_HPP #include "matador/sql/interface/statement_impl.hpp" #include "matador/sql/interface/parameter_binder.hpp" namespace matador::sql { class statement_proxy { protected: explicit statement_proxy(std::unique_ptr&& stmt); public: virtual ~statement_proxy() = default; virtual utils::result execute(parameter_binder& bindings) = 0; virtual utils::result, utils::error> fetch(parameter_binder& bindings) = 0; template void bind(const Type &obj, parameter_binder& bindings) { statement_->bind_object(obj, bindings); } template void bind(size_t pos, Type &value, parameter_binder& bindings) { statement_->bind(pos, value, bindings); } void bind(size_t pos, const char *value, size_t size, parameter_binder& bindings) const; void bind(size_t pos, std::string &val, size_t size, parameter_binder& bindings) const; void reset() const; [[nodiscard]] std::string sql() const; [[nodiscard]] std::unique_ptr create_binder() const; protected: std::unique_ptr statement_; }; } #endif //STATEMENT_PROXY_HPP