#ifndef JOIN_COLUMNS_COLLECTOR_HPP #define JOIN_COLUMNS_COLLECTOR_HPP #include "matador/utils/access.hpp" #include "matador/utils/field_attributes.hpp" #include "matador/utils/primary_key_attribute.hpp" #include namespace matador::object { struct join_columns { std::string join_column; std::string inverse_join_column; }; class join_columns_collector final { public: template join_columns collect() { join_columns_ = {}; Type obj; access::process(*this, obj); return join_columns_; } template < class V > static void on_primary_key(const char * /*id*/, V &, const utils::primary_key_attribute& /*attr*/ = utils::default_pk_attributes) {} static void on_revision(const char * /*id*/, uint64_t &/*rev*/) {} template static void on_attribute(const char * /*id*/, Type &, const utils::field_attributes &/*attr*/ = utils::null_attributes) {} template static void on_belongs_to(const char * /*id*/, Pointer &/*obj*/, const utils::foreign_attributes &/*attr*/) {} template static void on_has_one(const char * /*id*/, Pointer &/*obj*/, const utils::foreign_attributes &/*attr*/) {} template static void on_has_many(ContainerType &, const char */*join_column*/, const utils::foreign_attributes &/*attr*/) {} template void on_has_many_to_many(const char * /*id*/, ContainerType &/*c*/, const char *join_column, const char *inverse_join_column, const utils::foreign_attributes &/*attr*/) { join_columns_.join_column = join_column; join_columns_.inverse_join_column = inverse_join_column; } template static void on_has_many_to_many(const char * /*id*/, ContainerType &/*c*/, const utils::foreign_attributes &/*attr*/) {} private: join_columns join_columns_; }; } #endif //JOIN_COLUMNS_COLLECTOR_HPP