collection_resolver progress

This commit is contained in:
Sascha Kühl
2026-01-27 16:31:37 +01:00
parent b6cabbe3ed
commit 6205ae81c9
20 changed files with 294 additions and 134 deletions
+9 -7
View File
@@ -54,14 +54,15 @@ add_library(matador-orm STATIC
../../include/matador/query/meta_table_macro.hpp
../../include/matador/query/meta_table_macro.hpp
../../include/matador/query/query.hpp
../../include/matador/query/select_query_builder.hpp
../../include/matador/query/query_builder.hpp
../../include/matador/query/query_collection_resolver.hpp
../../include/matador/query/query_data.hpp
../../include/matador/query/query_intermediates.hpp
../../include/matador/query/query_object_resolver.hpp
../../include/matador/query/query_part.hpp
../../include/matador/query/query_utils.hpp
../../include/matador/query/schema.hpp
../../include/matador/query/select_query_builder.hpp
../../include/matador/query/table.hpp
../../include/matador/query/table_column.hpp
../../include/matador/query/table_constraint.hpp
@@ -81,12 +82,13 @@ add_library(matador-orm STATIC
../../include/matador/sql/interface/query_result_reader.hpp
../../include/matador/sql/interface/statement_impl.hpp
../../include/matador/sql/interface/statement_proxy.hpp
../../include/matador/sql/internal/collection_resolver_producer.hpp
../../include/matador/sql/internal/identifier_reader.hpp
../../include/matador/sql/internal/identifier_statement_binder.hpp
../../include/matador/sql/internal/object_resolver_producer.hpp
../../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/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
@@ -146,13 +148,14 @@ add_library(matador-orm STATIC
query/internal/string_builder_utils.cpp
query/key_value_generator.cpp
query/query.cpp
query/select_query_builder.cpp
query/query_builder_exception.cpp
query/query_builder.cpp
query/query_builder_exception.cpp
query/query_collection_resolver.cpp
query/query_object_resolver.cpp
query/query_part.cpp
query/query_utils.cpp
query/schema.cpp
query/select_query_builder.cpp
query/table.cpp
query/table_column.cpp
query/table_constraint.cpp
@@ -169,19 +172,18 @@ add_library(matador-orm STATIC
sql/interface/query_result_reader.cpp
sql/interface/statement_impl.cpp
sql/interface/statement_proxy.cpp
sql/internal/collection_resolver_producer.cpp
sql/internal/identifier_reader.cpp
sql/internal/identifier_statement_binder.cpp
sql/internal/object_resolver_producer.cpp
sql/internal/object_result_binder.cpp
sql/internal/query_result_pk_resolver.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
+6
View File
@@ -87,6 +87,12 @@ void basic_schema::initialize_executor(sql::executor &exec) const {
auto resolver = producer->produce(exec);
exec.resolver_factory()->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));
}
}
}
@@ -0,0 +1 @@
#include "matador/query/query_collection_resolver.hpp"
@@ -1,14 +0,0 @@
#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,17 @@
#include "matador/sql/internal/collection_resolver_producer.hpp"
namespace matador::sql {
const std::type_index& collection_resolver_producer::root_type() const {
return root_type_;
}
const std::type_index& collection_resolver_producer::type() const {
return type_;
}
const std::string& collection_resolver_producer::collection_name() const {
return collection_name_;
}
collection_resolver_producer::collection_resolver_producer(const std::type_index& root_type,
const std::type_index& type,
std::string collection_name)
: root_type_(root_type), type_(type), collection_name_(std::move(collection_name)) {}
} // namespace matador::sql
@@ -11,4 +11,18 @@ std::shared_ptr<object::abstract_type_resolver> producer_resolver_factory::acqui
void producer_resolver_factory::register_object_resolver(std::shared_ptr<object::abstract_type_resolver> &&resolver) {
resolvers_[resolver->type()] = std::move(resolver);
}
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 composite_key key{root_type, element_type, collection_name};
if (const auto it = resolvers_.find(key); it != resolvers_.end()) {
return it->second;
}
return nullptr;
}
void producer_collection_resolver_factory::register_collection_resolver(std::shared_ptr<object::abstract_collection_resolver>&& resolver) {
const composite_key key{resolver->root_type(), resolver->type(), resolver->collection_name()};
resolvers_[key] = std::move(resolver);
}
} // namespace matador::sql