implemented lazy loading for object_ptr and belongs_to
This commit is contained in:
@@ -3,7 +3,6 @@
|
||||
#include "matador/sql/backend_provider.hpp"
|
||||
#include "matador/sql/dialect.hpp"
|
||||
#include "matador/sql/dialect_token.hpp"
|
||||
#include "matador/sql/error_code.hpp"
|
||||
#include "matador/sql/interface/connection_impl.hpp"
|
||||
|
||||
|
||||
@@ -28,16 +27,29 @@ public:
|
||||
};
|
||||
|
||||
}
|
||||
connection::connection(const connection_info& info, const std::shared_ptr<abstract_sql_logger> &sql_logger)
|
||||
: logger_(sql_logger)
|
||||
{
|
||||
connection::connection(const connection_info& info, logger_ptr sql_logger)
|
||||
: logger_(std::move(sql_logger)) {
|
||||
connection_.reset(backend_provider::instance().create_connection(info.type, info));
|
||||
}
|
||||
|
||||
connection::connection(const std::string& dns, const std::shared_ptr<abstract_sql_logger> &sql_logger)
|
||||
connection::connection(const connection_info &info,
|
||||
std::shared_ptr<producer_resolver_factory> resolver_factory,
|
||||
logger_ptr sql_logger)
|
||||
: logger_(std::move(sql_logger))
|
||||
, resolver_factory_(std::move(resolver_factory)) {
|
||||
connection_.reset(backend_provider::instance().create_connection(info.type, info));
|
||||
}
|
||||
|
||||
connection::connection(const std::string& dns, const logger_ptr &sql_logger)
|
||||
: connection(connection_info::parse(dns), sql_logger)
|
||||
{}
|
||||
|
||||
connection::connection(const std::string &dns,
|
||||
std::shared_ptr<producer_resolver_factory> resolver_factory,
|
||||
const logger_ptr &sql_logger)
|
||||
: connection(connection_info::parse(dns), std::move(resolver_factory), sql_logger)
|
||||
{}
|
||||
|
||||
connection::connection(const connection &x) {
|
||||
if (x.connection_) {
|
||||
throw std::runtime_error("couldn't copy connection with valid connection impl");
|
||||
@@ -58,11 +70,13 @@ connection &connection::operator=(const connection &x) {
|
||||
connection::connection( connection&& x ) noexcept
|
||||
: connection_(std::move(x.connection_))
|
||||
, logger_(std::move(x.logger_))
|
||||
, resolver_factory_(std::move(x.resolver_factory_))
|
||||
{}
|
||||
|
||||
connection & connection::operator=(connection &&x) noexcept {
|
||||
connection_ = std::move(x.connection_);
|
||||
logger_ = std::move(x.logger_);
|
||||
resolver_factory_ = std::move(x.resolver_factory_);
|
||||
|
||||
return *this;
|
||||
}
|
||||
@@ -71,7 +85,7 @@ connection::~connection() {
|
||||
if (!connection_) {
|
||||
return;
|
||||
}
|
||||
if (connection_->is_open()) {
|
||||
if (const auto result = connection_->is_open(); *result) {
|
||||
connection_->close();
|
||||
}
|
||||
connection_impl* impl = connection_.release();
|
||||
@@ -219,6 +233,10 @@ const class dialect &connection::dialect() const
|
||||
return connection_->dialect();
|
||||
}
|
||||
|
||||
std::shared_ptr<class producer_resolver_factory> connection::resolver_factory() const {
|
||||
return resolver_factory_;
|
||||
}
|
||||
|
||||
utils::result<std::unique_ptr<statement_impl>, utils::error> connection::perform_prepare(const query_context& ctx) const {
|
||||
if (ctx.command != sql_command::SQL_CREATE_TABLE && (ctx.prototype.empty() || has_unknown_columns(ctx.prototype))) {
|
||||
if (const auto result = describe(ctx.table_name); result.is_ok()) {
|
||||
|
||||
Reference in New Issue
Block a user