#ifndef MATADOR_CONSTRAINT_HPP #define MATADOR_CONSTRAINT_HPP #include "matador/utils/constraints.hpp" #include namespace matador::object { class attribute; class constraint_builder; class constraint_generator; class object; class constraint { public: constraint() = default; explicit constraint(std::string name); [[nodiscard]] const std::string& name() const; private: friend class constraint_builder; friend class constraints_generator; friend class object_generator; friend class object; std::string name_; attribute* attr_{nullptr}; object *owner_{nullptr}; utils::constraints options_{utils::constraints::None}; std::string ref_table_name_{}; std::string ref_column_name_{}; }; class constraint_builder { public: constraint_builder& constraint(std::string name); constraint_builder& primary_key(std::string name); constraint_builder& foreign_key(std::string name); constraint_builder& references(std::string table, std::string column); operator class constraint() const; private: std::string constraint_name; utils::constraints options_{utils::constraints::None}; std::string column_name; std::string ref_table_name; std::string ref_column_name; }; constraint_builder constraint(std::string name); } #endif //MATADOR_CONSTRAINT_HPP