collection_resolver progress
This commit is contained in:
@@ -13,9 +13,15 @@ add_library(matador-core STATIC
|
||||
../../include/matador/net/reactor.hpp
|
||||
../../include/matador/net/select_fd_sets.hpp
|
||||
../../include/matador/net/socket_interrupter.hpp
|
||||
../../include/matador/object/abstract_collection_resolver.hpp
|
||||
../../include/matador/object/abstract_type_resolver.hpp
|
||||
../../include/matador/object/abstract_type_resolver_factory.hpp
|
||||
../../include/matador/object/attribute.hpp
|
||||
../../include/matador/object/basic_object_info.hpp
|
||||
../../include/matador/object/basic_repository.hpp
|
||||
../../include/matador/object/collection_proxy.hpp
|
||||
../../include/matador/object/collection_resolver.hpp
|
||||
../../include/matador/object/collection_resolver_factory.hpp
|
||||
../../include/matador/object/error_code.hpp
|
||||
../../include/matador/object/foreign_node_completer.hpp
|
||||
../../include/matador/object/internal/observer_list_copy_creator.hpp
|
||||
@@ -81,6 +87,7 @@ add_library(matador-core STATIC
|
||||
logger/log_manager.cpp
|
||||
logger/logger.cpp
|
||||
logger/rotating_file_sink.cpp
|
||||
object/abstract_collection_resolver.cpp
|
||||
object/attribute.cpp
|
||||
object/basic_object_info.cpp
|
||||
object/basic_repository.cpp
|
||||
@@ -113,12 +120,6 @@ add_library(matador-core STATIC
|
||||
utils/uuid.cpp
|
||||
utils/value.cpp
|
||||
utils/version.cpp
|
||||
../../include/matador/object/collection_proxy.hpp
|
||||
../../include/matador/object/collection_resolver_factory.hpp
|
||||
../../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})
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
#include "matador/object/abstract_collection_resolver.hpp"
|
||||
|
||||
namespace matador::object {
|
||||
|
||||
const std::type_index& abstract_collection_resolver::root_type() const {
|
||||
return root_type_;
|
||||
}
|
||||
|
||||
const std::type_index& abstract_collection_resolver::type() const {
|
||||
return type_;
|
||||
}
|
||||
|
||||
const std::string& abstract_collection_resolver::collection_name() const {
|
||||
return collection_name_;
|
||||
}
|
||||
|
||||
abstract_collection_resolver::abstract_collection_resolver(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::object
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user