collection_resolver progress

This commit is contained in:
Sascha Kühl
2026-01-28 16:09:54 +01:00
parent 6205ae81c9
commit 602b77e67b
31 changed files with 122 additions and 79 deletions
+2
View File
@@ -95,6 +95,7 @@ add_library(matador-orm STATIC
../../include/matador/sql/query_record_result.hpp
../../include/matador/sql/query_result.hpp
../../include/matador/sql/record.hpp
../../include/matador/sql/resolver_service.hpp
../../include/matador/sql/sql_functions.hpp
../../include/matador/sql/statement.hpp
../../include/matador/sql/statement_cache.hpp
@@ -182,6 +183,7 @@ add_library(matador-orm STATIC
sql/producer_resolver_factory.cpp
sql/query_result.cpp
sql/record.cpp
sql/resolver_service.cpp
sql/statement.cpp
sql/statement_cache.cpp
)
+4 -4
View File
@@ -14,11 +14,11 @@ utils::error make_error(const error_code ec, const std::string &msg) {
}
session::session(session_context&& ctx, const query::schema &scm)
: pool_(ctx.dns, ctx.connection_count, [ctx](const sql::connection_info& info) { return sql::connection(info, ctx.resolver_factory); })
: pool_(ctx.dns, ctx.connection_count, [ctx](const sql::connection_info& info) { return sql::connection(info, ctx.resolver_service); })
, cache_(ctx.bus, pool_, ctx.cache_size)
, dialect_(sql::backend_provider::instance().connection_dialect(pool_.info().type))
, schema_(scm)
, resolver_factory_(ctx.resolver_factory) {
, resolver_service_(ctx.resolver_service) {
}
utils::result<void, utils::error> session::drop_table(const std::string &table_name) const {
@@ -85,8 +85,8 @@ const class sql::dialect &session::dialect() const {
return dialect_;
}
std::shared_ptr<sql::producer_resolver_factory> session::resolver_factory() const {
return resolver_factory_;
std::shared_ptr<sql::resolver_service> session::resolver() const {
return resolver_service_;
}
const query::basic_schema & session::schema() const {
+2 -2
View File
@@ -85,13 +85,13 @@ void basic_schema::initialize_executor(sql::executor &exec) const {
auto factory = std::make_shared<sql::producer_resolver_factory>();
for (const auto &[key, producer] : resolver_producers_) {
auto resolver = producer->produce(exec);
exec.resolver_factory()->register_object_resolver(std::move(resolver));
exec.resolver()->register_object_resolver(std::move(resolver));
}
auto collection_factory = std::make_shared<sql::producer_collection_resolver_factory>();
for (const auto &[key, producer] : collection_resolver_producers_) {
auto resolver = producer->produce(exec);
// exec.resolver_factory()->register_collection_resolver(std::move(resolver));
exec.resolver()->register_collection_resolver(std::move(resolver));
}
}
@@ -39,7 +39,7 @@ utils::result<sql::query_result<sql::record>, utils::error> fetchable_query::fet
utils::result<std::optional<sql::record>, utils::error> fetchable_query::fetch_one(const sql::executor &exec) const {
query_builder compiler;
auto ctx = compiler.compile(*context_, exec.dialect(), std::nullopt);
ctx.resolver_factory = exec.resolver_factory();
ctx.resolver = exec.resolver();
auto result = exec.fetch(ctx);
if (!result.is_ok()) {
return utils::failure(result.err());
@@ -69,13 +69,13 @@ sql::query_context fetchable_query::compile(const sql::dialect &d) const {
utils::result<std::unique_ptr<sql::query_result_impl>, utils::error> fetchable_query::fetch(const sql::executor &exec) const {
auto ctx = compile(exec.dialect());
ctx.resolver_factory = exec.resolver_factory();
ctx.resolver = exec.resolver();
return exec.fetch(ctx);
}
utils::result<sql::statement, utils::error> fetchable_query::prepare(sql::executor &exec) const {
auto ctx = compile(exec.dialect());
ctx.resolver_factory = exec.resolver_factory();
ctx.resolver = exec.resolver();
return exec.prepare(ctx);
}
@@ -9,12 +9,12 @@ detail::pk_reader::pk_reader(query_result_reader &reader)
query_result_impl::query_result_impl(std::unique_ptr<query_result_reader> &&reader,
std::vector<object::attribute> prototype,
const std::shared_ptr<object::object_resolver_factory>& resolver_factory,
const std::shared_ptr<sql::resolver_service>& resolver,
const size_t column_index)
: column_index_(column_index)
, prototype_(std::move(prototype))
, reader_(std::move(reader))
, resolver_factory_(resolver_factory)
, resolver_(resolver)
, id_reader_(*reader_)
, pk_reader_(*reader_) {
}
+8 -8
View File
@@ -33,10 +33,10 @@ connection::connection(const connection_info& info, logger_ptr sql_logger)
}
connection::connection(const connection_info &info,
std::shared_ptr<producer_resolver_factory> resolver_factory,
const std::shared_ptr<resolver_service>& resolver,
logger_ptr sql_logger)
: logger_(std::move(sql_logger))
, resolver_factory_(std::move(resolver_factory)) {
, resolver_service_(resolver) {
connection_.reset(backend_provider::instance().create_connection(info.type, info));
}
@@ -45,9 +45,9 @@ connection::connection(const std::string& dns, const logger_ptr &sql_logger)
{}
connection::connection(const std::string &dns,
std::shared_ptr<producer_resolver_factory> resolver_factory,
const std::shared_ptr<resolver_service> &resolver,
const logger_ptr &sql_logger)
: connection(connection_info::parse(dns), std::move(resolver_factory), sql_logger)
: connection(connection_info::parse(dns), std::move(resolver), sql_logger)
{}
connection::connection(const connection &x) {
@@ -70,13 +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_))
, resolver_service_(std::move(x.resolver_service_))
{}
connection & connection::operator=(connection &&x) noexcept {
connection_ = std::move(x.connection_);
logger_ = std::move(x.logger_);
resolver_factory_ = std::move(x.resolver_factory_);
resolver_service_ = std::move(x.resolver_service_);
return *this;
}
@@ -233,8 +233,8 @@ const class dialect &connection::dialect() const
return connection_->dialect();
}
std::shared_ptr<class producer_resolver_factory> connection::resolver_factory() const {
return resolver_factory_;
std::shared_ptr<resolver_service> connection::resolver() const {
return resolver_service_;
}
utils::result<std::unique_ptr<statement_impl>, utils::error> connection::perform_prepare(const query_context& ctx) const {
+2 -2
View File
@@ -1,7 +1,7 @@
#include "matador/sql/producer_resolver_factory.hpp"
namespace matador::sql {
std::shared_ptr<object::abstract_type_resolver> producer_resolver_factory::acquire_object_resolver(const std::type_index &type) {
std::shared_ptr<object::abstract_type_resolver> producer_resolver_factory::acquire_object_resolver(const std::type_index &type) const {
if (const auto it = resolvers_.find(type); it != resolvers_.end()) {
return it->second;
}
@@ -14,7 +14,7 @@ void producer_resolver_factory::register_object_resolver(std::shared_ptr<object:
std::shared_ptr<object::abstract_collection_resolver>
producer_collection_resolver_factory::acquire_collection_resolver(const std::type_index& root_type,
const std::type_index& element_type,
const std::string& collection_name) {
const std::string& collection_name) const {
const composite_key key{root_type, element_type, collection_name};
if (const auto it = resolvers_.find(key); it != resolvers_.end()) {
return it->second;
+10
View File
@@ -0,0 +1,10 @@
#include "matador/sql/resolver_service.hpp"
namespace matador::sql {
void resolver_service::register_object_resolver(std::shared_ptr<object::abstract_type_resolver>&& resolver) {
object_resolver_factory_.register_object_resolver(std::move(resolver));
}
void resolver_service::register_collection_resolver(std::shared_ptr<object::abstract_collection_resolver>&& resolver) {
collection_resolver_factory_.register_collection_resolver(std::move(resolver));
}
} // namespace matador::query