92 lines
1.9 KiB
C++
92 lines
1.9 KiB
C++
#include "matador/sql/connection.hpp"
|
|
|
|
#include "matador/sql/backend_provider.hpp"
|
|
#include "matador/sql/connection_impl.hpp"
|
|
|
|
#include <stdexcept>
|
|
#include <utility>
|
|
|
|
namespace matador::sql {
|
|
|
|
connection::connection(connection_info info)
|
|
: connection_info_(std::move(info))
|
|
, logger_(stdout, "SQL")
|
|
{
|
|
connection_.reset(backend_provider::instance().create_connection(connection_info_.type, connection_info_));
|
|
}
|
|
|
|
connection::connection(const std::string& dns)
|
|
: connection(connection_info::parse(dns))
|
|
{}
|
|
|
|
connection::connection(const connection &x)
|
|
: connection_info_(x.connection_info_)
|
|
, logger_(x.logger_)
|
|
{
|
|
if (x.connection_) {
|
|
throw std::runtime_error("couldn't copy connection with valid connection impl");
|
|
}
|
|
}
|
|
|
|
connection &connection::operator=(const connection &x) {
|
|
connection_info_ = x.connection_info_;
|
|
logger_ = x.logger_;
|
|
if (x.connection_) {
|
|
throw std::runtime_error("couldn't copy connection with valid connection impl");
|
|
}
|
|
return *this;
|
|
}
|
|
|
|
connection::~connection()
|
|
{
|
|
if (connection_->is_open()) {
|
|
connection_->close();
|
|
}
|
|
backend_provider::instance().destroy_connection(connection_info_.type, connection_.release());
|
|
connection_ = nullptr;
|
|
}
|
|
|
|
void connection::open()
|
|
{
|
|
connection_->open();
|
|
}
|
|
|
|
void connection::close()
|
|
{
|
|
connection_->close();
|
|
}
|
|
|
|
bool connection::is_open() const
|
|
{
|
|
return connection_->is_open();
|
|
}
|
|
|
|
const connection_info &connection::info() const
|
|
{
|
|
return connection_info_;
|
|
}
|
|
|
|
record connection::describe(const std::string &table_name) const
|
|
{
|
|
return std::move(connection_->describe(table_name));
|
|
}
|
|
|
|
bool connection::exists(const std::string &table_name) const
|
|
{
|
|
return connection_->exists(table_name);
|
|
}
|
|
|
|
std::pair<size_t, std::string> connection::execute(const std::string &sql) const
|
|
{
|
|
logger_.debug(sql);
|
|
return {connection_->execute(sql), sql};
|
|
}
|
|
|
|
std::unique_ptr<query_result_impl> connection::fetch(const std::string &sql) const
|
|
{
|
|
logger_.debug(sql);
|
|
return connection_->fetch(sql);
|
|
}
|
|
|
|
}
|