collection_resolver progress
This commit is contained in:
@@ -78,6 +78,7 @@ public:
|
||||
query_result_impl(std::unique_ptr<query_result_reader> &&reader,
|
||||
std::vector<object::attribute> prototype,
|
||||
const std::shared_ptr<resolver_service>& resolver,
|
||||
const std::type_index& result_type,
|
||||
size_t column_index = 0);
|
||||
|
||||
template<typename ValueType>
|
||||
@@ -127,13 +128,12 @@ public:
|
||||
template<class CollectionType>
|
||||
void on_has_many(const char * /*id*/, CollectionType &cont, const char *join_column, const utils::foreign_attributes &attr, std::enable_if_t<object::is_object_ptr<typename CollectionType::value_type>::value> * = nullptr) {
|
||||
using value_type = typename CollectionType::value_type::value_type;
|
||||
auto resolver = resolver_->collection_resolver<value_type>(type_stack_.top(), join_column);
|
||||
auto resolver = resolver_->collection_resolver<typename CollectionType::value_type>(result_type_, join_column);
|
||||
auto object_resolver = resolver_->object_resolver<value_type>();
|
||||
|
||||
std::vector<typename CollectionType::value_type> objects;
|
||||
if (attr.fetch() == utils::fetch_type::Lazy) {
|
||||
|
||||
// pk_reader_.read(*id, column_index_++);
|
||||
cont.reset(std::make_shared<object::collection_proxy<typename CollectionType::value_type>>(resolver, current_pk_));
|
||||
} else {
|
||||
const auto ti = std::type_index(typeid(value_type));
|
||||
auto obj = std::make_shared<typename CollectionType::value_type::value_type>();
|
||||
@@ -227,7 +227,8 @@ protected:
|
||||
size_t column_index_ = 0;
|
||||
std::vector<object::attribute> prototype_;
|
||||
std::unique_ptr<query_result_reader> reader_;
|
||||
std::shared_ptr<sql::resolver_service> resolver_;
|
||||
std::shared_ptr<resolver_service> resolver_;
|
||||
const std::type_index result_type_;
|
||||
internal::identifier_reader id_reader_;
|
||||
detail::pk_reader pk_reader_;
|
||||
std::stack<std::type_index> type_stack_;
|
||||
|
||||
@@ -41,7 +41,9 @@ struct query_context {
|
||||
std::vector<object::attribute> prototype{};
|
||||
std::vector<std::string> bind_vars{};
|
||||
std::vector<utils::database_type> bind_types{};
|
||||
// Data for resolving query result
|
||||
std::shared_ptr<resolver_service> resolver{};
|
||||
std::type_index result_type = typeid(void);
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user