2017-12-20 22:01:42 +01:00
|
|
|
|
#include "PgConstraint.h"
|
2019-02-09 09:49:27 +01:00
|
|
|
|
#include "SqlFormattingUtils.h"
|
2017-12-20 22:01:42 +01:00
|
|
|
|
|
|
|
|
|
|
void operator<<(ConstraintType &s, const Pgsql::Value &v)
|
|
|
|
|
|
{
|
|
|
|
|
|
const char *c = v.c_str();
|
|
|
|
|
|
switch (*c) {
|
|
|
|
|
|
case 'c':
|
|
|
|
|
|
s = ConstraintType::Check;
|
|
|
|
|
|
break;
|
|
|
|
|
|
case 'f':
|
|
|
|
|
|
s = ConstraintType::ForeignKey;
|
|
|
|
|
|
break;
|
|
|
|
|
|
case 'p':
|
|
|
|
|
|
s = ConstraintType::PrimaryKey;
|
|
|
|
|
|
break;
|
|
|
|
|
|
case 'u':
|
|
|
|
|
|
s = ConstraintType::Unique;
|
|
|
|
|
|
break;
|
|
|
|
|
|
case 't':
|
|
|
|
|
|
s = ConstraintType::ConstraintTrigger;
|
|
|
|
|
|
break;
|
|
|
|
|
|
case 'x':
|
|
|
|
|
|
s = ConstraintType::ExclusionConstraint;
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2017-12-30 12:57:55 +01:00
|
|
|
|
QString ShortNameForConstraintType(ConstraintType ct)
|
|
|
|
|
|
{
|
|
|
|
|
|
QString s;
|
|
|
|
|
|
switch (ct) {
|
|
|
|
|
|
case ConstraintType::Check:
|
|
|
|
|
|
s = "C";
|
|
|
|
|
|
break;
|
|
|
|
|
|
case ConstraintType::ForeignKey:
|
|
|
|
|
|
s = "FK";
|
|
|
|
|
|
break;
|
|
|
|
|
|
case ConstraintType::PrimaryKey:
|
|
|
|
|
|
s = "PK";
|
|
|
|
|
|
break;
|
|
|
|
|
|
case ConstraintType::Unique:
|
|
|
|
|
|
s = "U";
|
|
|
|
|
|
break;
|
|
|
|
|
|
case ConstraintType::ConstraintTrigger:
|
|
|
|
|
|
s = "CT";
|
|
|
|
|
|
break;
|
|
|
|
|
|
case ConstraintType::ExclusionConstraint:
|
|
|
|
|
|
s = "XC";
|
|
|
|
|
|
break;
|
|
|
|
|
|
default:
|
|
|
|
|
|
s = "?";
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
return s;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
QString LongNameForConstraintType(ConstraintType ct)
|
|
|
|
|
|
{
|
|
|
|
|
|
QString s;
|
|
|
|
|
|
switch (ct) {
|
|
|
|
|
|
case ConstraintType::Check:
|
|
|
|
|
|
s = "check";
|
|
|
|
|
|
break;
|
|
|
|
|
|
case ConstraintType::ForeignKey:
|
|
|
|
|
|
s = "foreign key";
|
|
|
|
|
|
break;
|
|
|
|
|
|
case ConstraintType::PrimaryKey:
|
|
|
|
|
|
s = "primary key";
|
|
|
|
|
|
break;
|
|
|
|
|
|
case ConstraintType::Unique:
|
|
|
|
|
|
s = "unique";
|
|
|
|
|
|
break;
|
|
|
|
|
|
case ConstraintType::ConstraintTrigger:
|
|
|
|
|
|
s = "constraint trigger";
|
|
|
|
|
|
break;
|
|
|
|
|
|
case ConstraintType::ExclusionConstraint:
|
|
|
|
|
|
s = "exclusion constraint";
|
|
|
|
|
|
break;
|
|
|
|
|
|
default:
|
|
|
|
|
|
s = "?";
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
return s;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2017-12-20 22:01:42 +01:00
|
|
|
|
void operator<<(ForeignKeyAction &s, const Pgsql::Value &v)
|
|
|
|
|
|
{
|
|
|
|
|
|
const char *c = v.c_str();
|
|
|
|
|
|
switch (*c) {
|
|
|
|
|
|
case 'a':
|
|
|
|
|
|
s = ForeignKeyAction::NoAction;
|
|
|
|
|
|
break;
|
|
|
|
|
|
case 'r':
|
|
|
|
|
|
s = ForeignKeyAction::Restrict;
|
|
|
|
|
|
break;
|
|
|
|
|
|
case 'c':
|
|
|
|
|
|
s = ForeignKeyAction::Cascade;
|
|
|
|
|
|
break;
|
|
|
|
|
|
case 'n':
|
|
|
|
|
|
s = ForeignKeyAction::SetNull;
|
|
|
|
|
|
break;
|
|
|
|
|
|
case 'd':
|
|
|
|
|
|
s = ForeignKeyAction::SetDefault;
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2018-01-06 21:22:22 +01:00
|
|
|
|
QString ForeignKeyActionToString(ForeignKeyAction fka)
|
|
|
|
|
|
{
|
|
|
|
|
|
QString result;
|
|
|
|
|
|
switch (fka) {
|
|
|
|
|
|
case ForeignKeyAction::NoAction:
|
|
|
|
|
|
result = "NO ACTION";
|
|
|
|
|
|
break;
|
|
|
|
|
|
case ForeignKeyAction::Restrict:
|
|
|
|
|
|
result = "RESTRICT";
|
|
|
|
|
|
break;
|
|
|
|
|
|
case ForeignKeyAction::Cascade:
|
|
|
|
|
|
result = "CASCADE";
|
|
|
|
|
|
break;
|
|
|
|
|
|
case ForeignKeyAction::SetNull:
|
|
|
|
|
|
result = "SET NULL";
|
|
|
|
|
|
break;
|
|
|
|
|
|
case ForeignKeyAction::SetDefault:
|
|
|
|
|
|
result = "SET DEFAULT";
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return result;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2017-12-20 22:01:42 +01:00
|
|
|
|
void operator<<(ForeignKeyMatch &s, const Pgsql::Value &v)
|
|
|
|
|
|
{
|
|
|
|
|
|
const char *c = v.c_str();
|
|
|
|
|
|
switch (*c) {
|
|
|
|
|
|
case 'f':
|
|
|
|
|
|
s = ForeignKeyMatch::Full;
|
|
|
|
|
|
break;
|
|
|
|
|
|
case 'p':
|
|
|
|
|
|
s = ForeignKeyMatch::Partial;
|
|
|
|
|
|
break;
|
|
|
|
|
|
case 's':
|
|
|
|
|
|
s = ForeignKeyMatch::Simple;
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2018-01-06 21:22:22 +01:00
|
|
|
|
QString ForeignKeyMatchToString(ForeignKeyMatch fkm)
|
|
|
|
|
|
{
|
|
|
|
|
|
QString result;
|
|
|
|
|
|
switch (fkm) {
|
|
|
|
|
|
case ForeignKeyMatch::Full :
|
|
|
|
|
|
result = "FULL";
|
|
|
|
|
|
break;
|
|
|
|
|
|
case ForeignKeyMatch::Partial:
|
|
|
|
|
|
result = "PARTIAL";
|
|
|
|
|
|
break;
|
|
|
|
|
|
case ForeignKeyMatch::Simple:
|
|
|
|
|
|
result = "SIMPLE";
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
return result;
|
|
|
|
|
|
}
|
2017-12-20 22:01:42 +01:00
|
|
|
|
|
2017-12-30 12:57:55 +01:00
|
|
|
|
|
2018-11-30 18:41:38 +01:00
|
|
|
|
//PgConstraint::PgConstraint()
|
|
|
|
|
|
//{
|
2017-12-20 22:01:42 +01:00
|
|
|
|
|
2018-11-30 18:41:38 +01:00
|
|
|
|
//}
|
2018-12-24 11:31:56 +01:00
|
|
|
|
|
|
|
|
|
|
QString PgConstraint::typeName() const
|
|
|
|
|
|
{
|
|
|
|
|
|
return "CONSTRAINT";
|
|
|
|
|
|
}
|
2019-02-09 09:49:27 +01:00
|
|
|
|
|
|
|
|
|
|
QString PgConstraint::dropSql() const
|
|
|
|
|
|
{
|
|
|
|
|
|
return getDropConstraintDefinition(catalog(), *this);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
QString PgConstraint::createSql() const
|
|
|
|
|
|
{
|
|
|
|
|
|
return getAlterTableConstraintDefinition(catalog(), *this);
|
|
|
|
|
|
}
|