started refactoring collection proxy
This commit is contained in:
@@ -8,6 +8,48 @@
|
||||
|
||||
namespace matador::object {
|
||||
|
||||
template < class LocalType, class ForeignType >
|
||||
class relation {
|
||||
public:
|
||||
relation() = default;
|
||||
relation(std::string local_name, std::string remote_name)
|
||||
: local_name_(std::move(local_name))
|
||||
, remote_name_(std::move(remote_name)) {}
|
||||
relation(std::string local_name, std::string remote_name, const object_ptr<LocalType>& local, const ForeignType& remote)
|
||||
: local_name_(std::move(local_name))
|
||||
, remote_name_(std::move(remote_name))
|
||||
, local_(local)
|
||||
, remote_(remote)
|
||||
{}
|
||||
|
||||
template<class Operator>
|
||||
void process(Operator &op) {
|
||||
namespace field = matador::access;
|
||||
field::belongs_to(op, local_name_.c_str(), local_, utils::CascadeNoneFetchLazy);
|
||||
foreign_field(op);
|
||||
}
|
||||
|
||||
object_ptr<LocalType> local() const { return local_; }
|
||||
const ForeignType& remote() const { return remote_; }
|
||||
|
||||
private:
|
||||
template<typename Operator, class RemoteType = ForeignType>
|
||||
void foreign_field(Operator &op, std::enable_if_t<!is_object_ptr<RemoteType>::value>* /*unused*/) {
|
||||
namespace field = matador::access;
|
||||
field::attribute(op, remote_name_.c_str(), remote_);
|
||||
}
|
||||
template<typename Operator, class RemoteType = ForeignType>
|
||||
void foreign_field(Operator &op, std::enable_if_t<is_object_ptr<RemoteType>::value>* /*unused*/) {
|
||||
namespace field = matador::access;
|
||||
field::belongs_to(op, remote_name_.c_str(), remote_, utils::CascadeNoneFetchLazy);
|
||||
}
|
||||
private:
|
||||
std::string local_name_;
|
||||
std::string remote_name_;
|
||||
object_ptr<LocalType> local_;
|
||||
ForeignType remote_;
|
||||
};
|
||||
|
||||
template < class LocalType, class ForeignType >
|
||||
class many_to_many_relation {
|
||||
public:
|
||||
|
||||
Reference in New Issue
Block a user