collection resolver progress

This commit is contained in:
2026-01-27 08:14:05 +01:00
parent 1cf39d0ef1
commit b6cabbe3ed
19 changed files with 143 additions and 57 deletions
+1
View File
@@ -118,6 +118,7 @@ add_library(matador-core STATIC
../../include/matador/object/collection_resolver.hpp
../../include/matador/object/abstract_type_resolver.hpp
../../include/matador/object/abstract_type_resolver_factory.hpp
../../include/matador/object/container_resolver.hpp
)
target_link_libraries(matador-core ${CMAKE_DL_LIBS})
+4 -2
View File
@@ -86,7 +86,7 @@ add_library(matador-orm STATIC
../../include/matador/sql/internal/object_result_binder.hpp
../../include/matador/sql/internal/query_result_impl.hpp
../../include/matador/sql/internal/query_result_pk_resolver.hpp
../../include/matador/sql/internal/resolver_producer.hpp
../../include/matador/sql/internal/object_resolver_producer.hpp
../../include/matador/sql/internal/statement_object_resolver.hpp
../../include/matador/sql/producer_resolver_factory.hpp
../../include/matador/sql/query_context.hpp
@@ -173,13 +173,15 @@ add_library(matador-orm STATIC
sql/internal/identifier_statement_binder.cpp
sql/internal/object_result_binder.cpp
sql/internal/query_result_pk_resolver.cpp
sql/internal/resolver_producer.cpp
sql/internal/object_resolver_producer.cpp
sql/object_parameter_binder.cpp
sql/producer_resolver_factory.cpp
sql/query_result.cpp
sql/record.cpp
sql/statement.cpp
sql/statement_cache.cpp
../../include/matador/query/query_container_resolver.hpp
query/query_container_resolver.cpp
)
target_include_directories(matador-orm
+1 -1
View File
@@ -85,7 +85,7 @@ 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_resolver(std::move(resolver));
exec.resolver_factory()->register_object_resolver(std::move(resolver));
}
}
@@ -0,0 +1,14 @@
#include "matador/query/query_container_resolver.hpp"
namespace matador::query {
utils::result<sql::statement, utils::error> prepare_collection_statement(sql::executor& exec, entity_query_data &&data) {
return query::query::select(data.columns)
.from(*data.root_table)
.join_left(data.joins)
.where(std::move(data.where_clause))
.order_by({data.root_table, data.pk_column_name})
.asc()
.prepare(exec);
}
}
@@ -0,0 +1,10 @@
#include "matador/sql/internal/object_resolver_producer.hpp"
namespace matador::sql {
const std::type_index & object_resolver_producer::type() const {
return type_;
}
object_resolver_producer::object_resolver_producer(const std::type_index &type)
: type_(type) {}
}
@@ -1,10 +0,0 @@
#include "matador/sql/internal/resolver_producer.hpp"
namespace matador::sql {
const std::type_index & resolver_producer::type() const {
return type_;
}
resolver_producer::resolver_producer(const std::type_index &type)
: type_(type) {}
}
+2 -2
View File
@@ -1,14 +1,14 @@
#include "matador/sql/producer_resolver_factory.hpp"
namespace matador::sql {
std::shared_ptr<object::abstract_type_resolver> producer_resolver_factory::acquire_resolver(const std::type_index &type) {
std::shared_ptr<object::abstract_type_resolver> producer_resolver_factory::acquire_object_resolver(const std::type_index &type) {
if (const auto it = resolvers_.find(type); it != resolvers_.end()) {
return it->second;
}
return nullptr;
}
void producer_resolver_factory::register_resolver(std::shared_ptr<object::abstract_type_resolver> &&resolver) {
void producer_resolver_factory::register_object_resolver(std::shared_ptr<object::abstract_type_resolver> &&resolver) {
resolvers_[resolver->type()] = std::move(resolver);
}
}