[jOOQ/jOOQ#8528] More improvements

This commit is contained in:
lukaseder 2019-10-11 20:36:27 +02:00
parent 39bb771e1b
commit 5c8fe53c1f
3 changed files with 63 additions and 15 deletions

View File

@ -270,21 +270,25 @@ final class AlterTableImpl extends AbstractRowCountQuery implements
this.ifExists = ifExists;
}
final Table<?> $table() { return table; }
final boolean $ifExists() { return ifExists; }
final boolean $ifExistsColumn() { return ifExistsColumn; }
final boolean $ifNotExistsColumn() { return ifNotExistsColumn; }
final Field<?> $addColumn() { return addColumn; }
final DataType<?> $addColumnType() { return addColumnType; }
final boolean $addFirst() { return addFirst; }
final Field<?> $addBefore() { return addBefore; }
final Field<?> $addAfter() { return addAfter; }
final Table<?> $renameTo() { return renameTo; }
final Field<?> $renameColumn() { return renameColumn; }
final Field<?> $renameColumnTo() { return renameColumnTo; }
final List<Field<?>> $dropColumns() { return dropColumns; };
final Constraint $dropConstraint() { return dropConstraint; }
final ConstraintType $dropConstraintType() { return dropConstraintType; }
final Table<?> $table() { return table; }
final boolean $ifExists() { return ifExists; }
final boolean $ifExistsColumn() { return ifExistsColumn; }
final boolean $ifNotExistsColumn() { return ifNotExistsColumn; }
final Field<?> $addColumn() { return addColumn; }
final DataType<?> $addColumnType() { return addColumnType; }
final boolean $addFirst() { return addFirst; }
final Field<?> $addBefore() { return addBefore; }
final Field<?> $addAfter() { return addAfter; }
final Field<?> $alterColumn() { return alterColumn; }
final Nullability $alterColumnNullability() { return alterColumnNullability; }
final DataType<?> $alterColumnType() { return alterColumnType; }
final Field<?> $alterColumnDefault() { return alterColumnDefault; }
final Table<?> $renameTo() { return renameTo; }
final Field<?> $renameColumn() { return renameColumn; }
final Field<?> $renameColumnTo() { return renameColumnTo; }
final List<Field<?>> $dropColumns() { return dropColumns; };
final Constraint $dropConstraint() { return dropConstraint; }
final ConstraintType $dropConstraintType() { return dropConstraintType; }
// ------------------------------------------------------------------------
// XXX: DSL API

View File

@ -58,6 +58,7 @@ import org.jooq.Meta;
import org.jooq.Name;
import org.jooq.Name.Quoted;
import org.jooq.Named;
import org.jooq.Nullability;
import org.jooq.Query;
import org.jooq.Record;
import org.jooq.Schema;
@ -245,6 +246,12 @@ final class DDLInterpreter {
throw objectNotTable(table);
Field<?> addColumn = query.$addColumn();
Field<?> alterColumn = query.$alterColumn();
Field<?> alterColumnDefault = query.$alterColumnDefault();
Nullability alterColumnNullability = query.$alterColumnNullability();
DataType<?> alterColumnType = query.$alterColumnType();
boolean ifExistsColumn = query.$ifExistsColumn();
boolean ifNotExistsColumn = query.$ifNotExistsColumn();
Table<?> renameTo = query.$renameTo();
Field<?> renameColumn = query.$renameColumn();
Field<?> renameColumnTo = query.$renameColumnTo();
@ -260,6 +267,21 @@ final class DDLInterpreter {
else
existing.fields.add(new MutableField((UnqualifiedName) addColumn.getUnqualifiedName(), existing, query.$addColumnType()));
}
else if (alterColumn != null) {
MutableField existingField = existing.field(alterColumn);
if (existingField == null) {
if (!ifExistsColumn)
throw columnNotExists(alterColumn);
return;
}
if (alterColumnNullability != null)
existingField.type = existingField.type.nullability(alterColumnNullability);
else
throw unsupportedQuery(query);
}
else if (renameTo != null && checkNotExists(schema, renameTo)) {
existing.name = (UnqualifiedName) renameTo.getUnqualifiedName();
}
@ -430,7 +452,18 @@ final class DDLInterpreter {
}
private final void accept0(DropSequenceImpl query) {
Sequence<?> sequence = query.$sequence();
MutableSchema schema = getSchema(sequence.getSchema());
MutableSequence existing = schema.sequence(sequence);
if (existing == null) {
if (!query.$ifExists())
throw sequenceNotExists(sequence);
return;
}
schema.sequences.remove(existing);
}
private final void accept0(CommentOnImpl query) {
@ -489,6 +522,14 @@ final class DDLInterpreter {
return new DataDefinitionException("View already exists: " + view.getQualifiedName());
}
private static final DataDefinitionException columnNotExists(Field<?> field) {
return new DataDefinitionException("Column does not exist: " + field.getQualifiedName());
}
private static final DataDefinitionException columnAlreadyExists(Field<?> field) {
return new DataDefinitionException("Column already exists: " + field.getQualifiedName());
}
private static final DataDefinitionException sequenceNotExists(Sequence<?> sequence) {
return new DataDefinitionException("Sequence does not exist: " + sequence.getQualifiedName());
}

View File

@ -92,6 +92,9 @@ final class DropSequenceImpl extends AbstractRowCountQuery implements
this.ifExists = ifExists;
}
final Sequence<?> $sequence() { return sequence; }
final boolean $ifExists() { return ifExists; }
// ------------------------------------------------------------------------
// XXX: QueryPart API
// ------------------------------------------------------------------------