#ifndef MATADOR_OBJECT_HPP #define MATADOR_OBJECT_HPP #include "matador/object/attribute.hpp" #include "matador/object/restriction.hpp" #include "matador/utils/identifier.hpp" #include #include namespace matador::object { class object { public: explicit object(std::string name); static const attribute& create_attribute(std::string name, const std::shared_ptr& obj); [[nodiscard]] const attribute* primary_key_attribute() const; [[nodiscard]] const utils::identifier& primary_key() const; [[nodiscard]] bool has_primary_key() const; [[nodiscard]] bool is_relation_object() const; [[nodiscard]] const attribute* join_attribute() const; [[nodiscard]] const attribute* inverse_join_attribute() const; [[nodiscard]] const std::string& name() const; void update_name(const std::string& name); [[nodiscard]] bool has_attributes() const; [[nodiscard]] size_t attribute_count() const; [[nodiscard]] const std::vector& attributes() const; [[nodiscard]] bool has_constraints() const; [[nodiscard]] size_t constraint_count() const; [[nodiscard]] const std::list& constraints() const; friend std::ostream& operator<<(std::ostream& os, const object& obj); private: friend class attribute_generator; friend class object_generator; std::string name_; int pk_column_index_{-1}; int join_column_index_{-1}; int inverse_join_column_index_{-1}; utils::identifier pk_identifier_; std::vector attributes_; std::list constraints_; }; } #endif //MATADOR_OBJECT_HPP