#ifndef PGCONSTRAINT_H #define PGCONSTRAINT_H #include "Pgsql_Value.h" #include "PgCatalogTypes.h" #include #include #include #include enum class ConstraintType { PrimaryKey, // p ForeignKey, // f Unique, // u Check, // c ConstraintTrigger, // t ExclusionConstraint, // x }; void operator<<(ConstraintType &s, const Pgsql::Value &v); QString ShortNameForConstraintType(ConstraintType ct); QString LongNameForConstraintType(ConstraintType ct); enum class ForeignKeyAction { NoAction, // a Restrict, // r Cascade, // c SetNull, // n SetDefault // d }; void operator<<(ForeignKeyAction &s, const Pgsql::Value &v); QString ForeignKeyActionToString(ForeignKeyAction fka); enum class ForeignKeyMatch { Full, // f Partial, // p Simple // s }; void operator<<(ForeignKeyMatch &s, const Pgsql::Value &v); QString ForeignKeyMatchToString(ForeignKeyMatch fkm); class PgConstraint { public: Oid oid = InvalidOid; QString name; Oid connamespace = InvalidOid; ConstraintType type; bool deferrable; bool deferred; bool validated; Oid relid = InvalidOid; ///< the table this constraint is on Oid typid = InvalidOid; Oid indid = InvalidOid; ///< index supporting the constraint Oid frelid = InvalidOid; ///< only for FK, referenced table pg_class ForeignKeyAction fupdtype; // on update ForeignKeyAction fdeltype; // on delete ForeignKeyMatch fmatchtype; // match type bool islocal; int32_t inhcount; bool noinherit; SmallAttNumVec<5> key; // list of constraint columns attnum SmallAttNumVec<5> fkey; // fkey list of referenced columns OidVec pfeqop; OidVec ppeqop; OidVec ffeqop; OidVec exclop; QString bin; QString src; QString definition; PgConstraint(); bool operator==(Oid _oid) const { return oid == _oid; } bool operator==(const QString &n) const { return name == n; } bool operator<(Oid _oid) const { return oid < _oid; } bool operator<(const PgConstraint &rhs) const { return oid < rhs.oid; } }; #endif // PGCONSTRAINT_H