#ifndef PRIMARY_KEY_RESOLVER_HPP #define PRIMARY_KEY_RESOLVER_HPP #include "matador/utils/access.hpp" #include "matador/utils/field_attributes.hpp" #include "matador/utils/foreign_attributes.hpp" #include "matador/utils/identifier.hpp" #include "matador/utils/primary_key_attribute.hpp" #include #include #include namespace matador::object { struct primary_key_info { std::string pk_column_name; utils::basic_type type; utils::identifier pk; }; class primary_key_resolver final { public: template primary_key_info resolve() { Type obj; return resolve(obj); } template primary_key_info resolve(const Type& obj) { access::process(*this, obj); return primary_key_info_; } template static primary_key_info resolve_object(const Type& obj) { primary_key_resolver resolver; return resolver.resolve(obj); } template < class Type > void on_primary_key(const char *id, Type &pk, const utils::primary_key_attribute& attr = utils::default_pk_attributes) { primary_key_info_.pk_column_name = id; primary_key_info_.type = utils::data_type_traits::type(attr.size()); primary_key_info_.pk = pk; } static void on_revision(const char * /*id*/, uint64_t &/*rev*/) {} template static void on_attribute(const char * /*id*/, Type &/*val*/, const utils::field_attributes &/*attr*/ = utils::null_attributes) {} template static void on_belongs_to(const char * /*id*/, Pointer &/*val*/, const utils::foreign_attributes &/*attr*/) {} template static void on_has_one(const char * /*id*/, Pointer &/*val*/, const utils::foreign_attributes &/*attr*/) {} template static void on_has_many(const char * /*id*/, ContainerType &/*col*/, const char *, const utils::foreign_attributes &/*attr*/) {} template static void on_has_many_to_many(const char * /*id*/, ContainerType &/*col*/, const char * /*join_column*/, const char * /*inverse_join_column*/, const utils::foreign_attributes &/*attr*/) {} template static void on_has_many_to_many(const char * /*id*/, ContainerType &/*col*/, const utils::foreign_attributes &/*attr*/) {} private: primary_key_info primary_key_info_{}; }; } #endif //PRIMARY_KEY_RESOLVER_HPP