query/include/matador/object/constraint.hpp

53 lines
1.2 KiB
C++

#ifndef MATADOR_CONSTRAINT_HPP
#define MATADOR_CONSTRAINT_HPP
#include "matador/utils/constraints.hpp"
#include <string>
namespace matador::object {
class attribute;
class constraint_builder;
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 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