resolve has one progress

This commit is contained in:
2026-05-17 21:46:43 +02:00
parent 57703dfb67
commit 9f54716df2
16 changed files with 86 additions and 46 deletions
@@ -3,6 +3,8 @@
#include "matador/object/collection_resolver.hpp"
#include <memory>
namespace matador::object {
class abstract_collection_resolver_factory {
public:
@@ -29,20 +31,20 @@ class abstract_joined_object_resolver_factory {
public:
virtual ~abstract_joined_object_resolver_factory() = default;
[[nodiscard]] virtual std::shared_ptr<abstract_joined_resolver> acquire_joined_object_resolver(const std::type_index &root_type, const std::type_index &element_type, const std::string &collection_name) const = 0;
virtual void register_joined_object_resolver(std::shared_ptr<abstract_joined_resolver> &&resolver) = 0;
[[nodiscard]] virtual std::shared_ptr<abstract_type_resolver> acquire_joined_object_resolver(const std::type_index &root_type, const std::type_index &element_type, const std::string &collection_name) const = 0;
virtual void register_joined_object_resolver(std::shared_ptr<abstract_type_resolver> &&resolver, const std::type_index& root_type, const std::string& join_column) = 0;
};
class joined_object_resolver_factory : public abstract_joined_object_resolver_factory {
public:
template<class Type>
[[nodiscard]] std::shared_ptr<joined_object_resolver<Type>> resolver(const std::type_index &root_type, const std::string &collection_name) const {
[[nodiscard]] std::shared_ptr<object_resolver<Type>> resolver(const std::type_index &root_type, const std::string &collection_name) const {
const auto res = acquire_joined_object_resolver(root_type, typeid(Type), collection_name);
if (!res) {
return std::dynamic_pointer_cast<joined_object_resolver<Type>>(res);
return std::dynamic_pointer_cast<object_resolver<Type>>(res);
}
return std::dynamic_pointer_cast<joined_object_resolver<Type>>(res);
return std::dynamic_pointer_cast<object_resolver<Type>>(res);
}
};
}
+1
View File
@@ -55,6 +55,7 @@ public:
}
void reset() { proxy_.reset(); }
void reset(const std::shared_ptr<object_proxy<Type>>& proxy) { proxy_ = proxy; }
operator bool() const { return valid(); }
[[nodiscard]] bool valid() const { return proxy_ != nullptr && !proxy_->empty(); }
+4 -3
View File
@@ -19,11 +19,12 @@ public:
virtual std::shared_ptr<Type> resolve(const utils::identifier& id) = 0;
};
template<typename Type>
class joined_object_resolver : public abstract_joined_resolver {
class joined_object_resolver : public abstract_joined_resolver, public object_resolver<Type> {
public:
joined_object_resolver(const std::type_index& root_type, const std::string& join_column) : abstract_joined_resolver(root_type, typeid(Type), join_column) {}
joined_object_resolver(const std::type_index& root_type, const std::string& join_column)
: abstract_joined_resolver(root_type, typeid(Type), join_column) {}
virtual std::shared_ptr<Type> resolve(const utils::identifier& id) = 0;
std::shared_ptr<Type> resolve(const utils::identifier& id) override = 0;
};
}
#endif //MATADOR_OBJECT_LOADER_HPP