resolve has one progress
This commit is contained in:
@@ -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);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@@ -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(); }
|
||||
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user