#include "matador/object/basic_object_info.hpp" #include "matador/object/schema_node.hpp" #include namespace matador::object { basic_object_info::basic_object_info(std::shared_ptr node, utils::identifier &&pk, const std::shared_ptr &pk_column, object_definition &&definition) : node_(std::move(node)) , definition_(std::move(definition)) , identifier_(std::move(pk)) , pk_column_(pk_column) { } basic_object_info::basic_object_info(std::shared_ptr node, utils::identifier &&pk, const std::shared_ptr &pk_column) : node_(std::move(node)) , identifier_(std::move(pk)) , pk_column_(pk_column) { } basic_object_info::basic_object_info(std::shared_ptr node, object_definition &&definition) : node_(std::move(node)) , definition_(std::move(definition)) {} std::type_index basic_object_info::type_index() const { return node_->type_index(); } std::string basic_object_info::name() const { return node_->name(); } const object_definition &basic_object_info::definition() const { return definition_; } std::shared_ptr basic_object_info::reference_column() const { return pk_column_; } bool basic_object_info::has_primary_key() const { return identifier_.has_value(); } const utils::identifier& basic_object_info::primary_key() const { return identifier_.value(); } basic_object_info::endpoint_iterator basic_object_info::register_relation_endpoint(const std::type_index &type, const std::shared_ptr &endpoint) { return relation_endpoints_.insert(std::make_pair(type, endpoint)).first; } void basic_object_info::unregister_relation_endpoint(const std::type_index &type) { relation_endpoints_.erase(type); } basic_object_info::const_endpoint_iterator basic_object_info::find_relation_endpoint(const std::type_index &type) const { return relation_endpoints_.find(type); } basic_object_info::endpoint_iterator basic_object_info::find_relation_endpoint(const std::type_index &type) { return relation_endpoints_.find(type); } basic_object_info::const_endpoint_iterator basic_object_info::find_relation_endpoint(const std::string &field) const { return std::find_if(relation_endpoints_.begin(), relation_endpoints_.end(), [&field](const t_endpoint_map::value_type &value) { return value.second->field_name() == field; }); } basic_object_info::endpoint_iterator basic_object_info::find_relation_endpoint(const std::string &field) { return std::find_if(relation_endpoints_.begin(), relation_endpoints_.end(), [&field](const t_endpoint_map::value_type &value) { return value.second->field_name() == field; }); } basic_object_info::endpoint_iterator basic_object_info::endpoint_begin() { return relation_endpoints_.begin(); } basic_object_info::const_endpoint_iterator basic_object_info::endpoint_begin() const { return relation_endpoints_.begin(); } basic_object_info::endpoint_iterator basic_object_info::endpoint_end() { return relation_endpoints_.end(); } basic_object_info::const_endpoint_iterator basic_object_info::endpoint_end() const { return relation_endpoints_.end(); } std::size_t basic_object_info::endpoints_size() const { return relation_endpoints_.size(); } bool basic_object_info::endpoints_empty() const { return relation_endpoints_.empty(); } } // namespace matador::object