package org.jooq.impl;
import static org.jooq.impl.DSL.*;
import static org.jooq.impl.Keywords.*;
import static org.jooq.impl.Names.*;
import static org.jooq.impl.SQLDataType.*;
import static org.jooq.impl.Tools.BooleanDataKey.*;
import static org.jooq.SQLDialect.*;
import org.jooq.*;
import org.jooq.impl.*;
import java.util.*;
@SuppressWarnings({ "hiding", "rawtypes", "unchecked", "unused" })
final class AlterDomainImpl<T>
extends
AbstractRowCountQuery
implements
AlterDomainStep<T>,
AlterDomainDropConstraintCascadeStep,
AlterDomainRenameConstraintStep,
AlterDomainFinalStep
{
private static final long serialVersionUID = 1L;
private final Domain<T> domain;
private final boolean alterDomainIfExists;
private Constraint addConstraint;
private Constraint dropConstraint;
private boolean dropConstraintIfExists;
private Domain<?> renameTo;
private Constraint renameConstraint;
private boolean renameConstraintIfExists;
private Field<T> setDefault;
private boolean dropDefault;
private boolean setNotNull;
private boolean dropNotNull;
private Boolean cascade;
private Constraint renameConstraintTo;
AlterDomainImpl(
Configuration configuration,
Domain domain,
boolean alterDomainIfExists
) {
this(
configuration,
domain,
alterDomainIfExists,
null,
null,
false,
null,
null,
false,
null,
false,
false,
false,
null,
null
);
}
AlterDomainImpl(
Configuration configuration,
Domain domain,
boolean alterDomainIfExists,
Constraint addConstraint,
Constraint dropConstraint,
boolean dropConstraintIfExists,
Domain renameTo,
Constraint renameConstraint,
boolean renameConstraintIfExists,
Field setDefault,
boolean dropDefault,
boolean setNotNull,
boolean dropNotNull,
Boolean cascade,
Constraint renameConstraintTo
) {
super(configuration);
this.domain = domain;
this.alterDomainIfExists = alterDomainIfExists;
this.addConstraint = addConstraint;
this.dropConstraint = dropConstraint;
this.dropConstraintIfExists = dropConstraintIfExists;
this.renameTo = renameTo;
this.renameConstraint = renameConstraint;
this.renameConstraintIfExists = renameConstraintIfExists;
this.setDefault = setDefault;
this.dropDefault = dropDefault;
this.setNotNull = setNotNull;
this.dropNotNull = dropNotNull;
this.cascade = cascade;
this.renameConstraintTo = renameConstraintTo;
}
final Domain<T> $domain() { return domain; }
final boolean $alterDomainIfExists() { return alterDomainIfExists; }
final Constraint $addConstraint() { return addConstraint; }
final Constraint $dropConstraint() { return dropConstraint; }
final boolean $dropConstraintIfExists() { return dropConstraintIfExists; }
final Domain<?> $renameTo() { return renameTo; }
final Constraint $renameConstraint() { return renameConstraint; }
final boolean $renameConstraintIfExists() { return renameConstraintIfExists; }
final Field<T> $setDefault() { return setDefault; }
final boolean $dropDefault() { return dropDefault; }
final boolean $setNotNull() { return setNotNull; }
final boolean $dropNotNull() { return dropNotNull; }
final Boolean $cascade() { return cascade; }
final Constraint $renameConstraintTo() { return renameConstraintTo; }
@Override
public final AlterDomainImpl<T> add(Constraint addConstraint) {
this.addConstraint = addConstraint;
return this;
}
@Override
public final AlterDomainImpl<T> dropConstraint(String dropConstraint) {
return dropConstraint(DSL.constraint(DSL.name(dropConstraint)));
}
@Override
public final AlterDomainImpl<T> dropConstraint(Name dropConstraint) {
return dropConstraint(DSL.constraint(dropConstraint));
}
@Override
public final AlterDomainImpl<T> dropConstraint(Constraint dropConstraint) {
this.dropConstraint = dropConstraint;
this.dropConstraintIfExists = false;
return this;
}
@Override
public final AlterDomainImpl<T> dropConstraintIfExists(String dropConstraint) {
return dropConstraintIfExists(DSL.constraint(DSL.name(dropConstraint)));
}
@Override
public final AlterDomainImpl<T> dropConstraintIfExists(Name dropConstraint) {
return dropConstraintIfExists(DSL.constraint(dropConstraint));
}
@Override
public final AlterDomainImpl<T> dropConstraintIfExists(Constraint dropConstraint) {
this.dropConstraint = dropConstraint;
this.dropConstraintIfExists = true;
return this;
}
@Override
public final AlterDomainImpl<T> renameTo(String renameTo) {
return renameTo(DSL.domain(DSL.name(renameTo)));
}
@Override
public final AlterDomainImpl<T> renameTo(Name renameTo) {
return renameTo(DSL.domain(renameTo));
}
@Override
public final AlterDomainImpl<T> renameTo(Domain<?> renameTo) {
this.renameTo = renameTo;
return this;
}
@Override
public final AlterDomainImpl<T> renameConstraint(String renameConstraint) {
return renameConstraint(DSL.constraint(DSL.name(renameConstraint)));
}
@Override
public final AlterDomainImpl<T> renameConstraint(Name renameConstraint) {
return renameConstraint(DSL.constraint(renameConstraint));
}
@Override
public final AlterDomainImpl<T> renameConstraint(Constraint renameConstraint) {
this.renameConstraint = renameConstraint;
this.renameConstraintIfExists = false;
return this;
}
@Override
public final AlterDomainImpl<T> renameConstraintIfExists(String renameConstraint) {
return renameConstraintIfExists(DSL.constraint(DSL.name(renameConstraint)));
}
@Override
public final AlterDomainImpl<T> renameConstraintIfExists(Name renameConstraint) {
return renameConstraintIfExists(DSL.constraint(renameConstraint));
}
@Override
public final AlterDomainImpl<T> renameConstraintIfExists(Constraint renameConstraint) {
this.renameConstraint = renameConstraint;
this.renameConstraintIfExists = true;
return this;
}
@Override
public final AlterDomainImpl<T> setDefault(T setDefault) {
return setDefault(Tools.field(setDefault));
}
@Override
public final AlterDomainImpl<T> setDefault(Field<T> setDefault) {
this.setDefault = setDefault;
return this;
}
@Override
public final AlterDomainImpl<T> dropDefault() {
this.dropDefault = true;
return this;
}
@Override
public final AlterDomainImpl<T> setNotNull() {
this.setNotNull = true;
return this;
}
@Override
public final AlterDomainImpl<T> dropNotNull() {
this.dropNotNull = true;
return this;
}
@Override
public final AlterDomainImpl<T> cascade() {
this.cascade = true;
return this;
}
@Override
public final AlterDomainImpl<T> restrict() {
this.cascade = false;
return this;
}
@Override
public final AlterDomainImpl<T> to(String renameConstraintTo) {
return to(DSL.constraint(DSL.name(renameConstraintTo)));
}
@Override
public final AlterDomainImpl<T> to(Name renameConstraintTo) {
return to(DSL.constraint(renameConstraintTo));
}
@Override
public final AlterDomainImpl<T> to(Constraint renameConstraintTo) {
this.renameConstraintTo = renameConstraintTo;
return this;
}
private static final Set<SQLDialect> NO_SUPPORT_RENAME_CONSTRAINT_IF_EXISTS = SQLDialect.supportedBy(FIREBIRD, POSTGRES);
private static final Set<SQLDialect> NO_SUPPORT_DROP_CONSTRAINT_IF_EXISTS = SQLDialect.supportedBy(FIREBIRD);
private final boolean supportsRenameConstraintIfExists(Context<?> ctx) {
return !NO_SUPPORT_RENAME_CONSTRAINT_IF_EXISTS.contains(ctx.dialect());
}
private final boolean supportsDropConstraintIfExists(Context<?> ctx) {
return !NO_SUPPORT_DROP_CONSTRAINT_IF_EXISTS.contains(ctx.dialect());
}
@Override
public final void accept(Context<?> ctx) {
if (renameConstraintIfExists && !supportsRenameConstraintIfExists(ctx) ||
dropConstraintIfExists && !supportsDropConstraintIfExists(ctx)) {
Tools.beginTryCatch(ctx, DDLStatementType.ALTER_DOMAIN);
accept0(ctx);
Tools.endTryCatch(ctx, DDLStatementType.ALTER_DOMAIN);
}
else
accept0(ctx);
}
private final void accept0(Context<?> ctx) {
Object previous = ctx.data(DATA_CONSTRAINT_REFERENCE);
ctx.visit(K_ALTER).sql(' ').visit(K_DOMAIN).sql(' ');
if (alterDomainIfExists)
ctx.visit(K_IF_EXISTS).sql(' ');
ctx.visit(domain).sql(' ');
if (addConstraint != null) {
if (ctx.family() == FIREBIRD)
ctx.visit(K_ADD).sql(' ').visit(DSL.check(((ConstraintImpl) addConstraint).$check()));
else
ctx.visit(K_ADD).sql(' ').visit(addConstraint);
}
else if (dropConstraint != null) {
ctx.visit(K_DROP_CONSTRAINT);
if (dropConstraintIfExists && supportsDropConstraintIfExists(ctx))
ctx.sql(' ').visit(K_IF_EXISTS);
if (ctx.family() != FIREBIRD) {
ctx.data(DATA_CONSTRAINT_REFERENCE, true);
ctx.sql(' ').visit(dropConstraint);
ctx.data(DATA_CONSTRAINT_REFERENCE, previous);
if (cascade != null)
if (cascade)
ctx.sql(' ').visit(K_CASCADE);
else
ctx.sql(' ').visit(K_RESTRICT);
}
}
else if (renameTo != null) {
ctx.data(DATA_CONSTRAINT_REFERENCE, true);
ctx.visit(ctx.family() == FIREBIRD ? K_TO : K_RENAME_TO).sql(' ').visit(renameTo);
ctx.data(DATA_CONSTRAINT_REFERENCE, previous);
}
else if (renameConstraint != null) {
ctx.data(DATA_CONSTRAINT_REFERENCE, true);
ctx.visit(K_RENAME_CONSTRAINT).sql(' ');
if (renameConstraintIfExists && supportsRenameConstraintIfExists(ctx))
ctx.visit(K_IF_EXISTS).sql(' ');
ctx.visit(renameConstraint).sql(' ').visit(K_TO).sql(' ').visit(renameConstraintTo);
ctx.data(DATA_CONSTRAINT_REFERENCE, previous);
}
else if (setDefault != null) {
ctx.visit(K_SET_DEFAULT).sql(' ').visit(setDefault);
}
else if (dropDefault) {
ctx.visit(K_DROP_DEFAULT);
}
else if (setNotNull) {
ctx.visit(K_SET_NOT_NULL);
}
else if (dropNotNull) {
ctx.visit(K_DROP_NOT_NULL);
}
}
}