[#5082] Add support for ALTER TABLE .. RENAME COLUMN .. TO ..
This commit is contained in:
parent
c5818111ce
commit
48189bbe92
@ -91,6 +91,27 @@ public interface AlterTableStep {
|
||||
@Support
|
||||
AlterTableFinalStep renameTo(String newName);
|
||||
|
||||
/**
|
||||
* Add a <code>RENAME COLUMN</code> clause to the <code>ALTER TABLE</code>
|
||||
* statement.
|
||||
*/
|
||||
@Support
|
||||
AlterTableRenameColumnToStep renameColumn(Field<?> oldName);
|
||||
|
||||
/**
|
||||
* Add a <code>RENAME COLUMN</code> clause to the <code>ALTER TABLE</code>
|
||||
* statement.
|
||||
*/
|
||||
@Support
|
||||
AlterTableRenameColumnToStep renameColumn(Name oldName);
|
||||
|
||||
/**
|
||||
* Add a <code>RENAME COLUMN</code> clause to the <code>ALTER TABLE</code>
|
||||
* statement.
|
||||
*/
|
||||
@Support
|
||||
AlterTableRenameColumnToStep renameColumn(String oldName);
|
||||
|
||||
/**
|
||||
* Add an <code>ALTER COLUMN</code> clause to the <code>ALTER TABLE</code>
|
||||
* statement.
|
||||
|
||||
@ -969,7 +969,21 @@ public enum Clause {
|
||||
* <li>the new table name</li>
|
||||
* </ul>
|
||||
*/
|
||||
ALTER_TABLE_RENAME_TO,
|
||||
ALTER_TABLE_RENAME,
|
||||
|
||||
/**
|
||||
* A <code>RENAME COLUMN</code> clause within an {@link #ALTER_TABLE}
|
||||
* statement.
|
||||
* <p>
|
||||
* This clause surrounds
|
||||
* <ul>
|
||||
* <li>the <code>RENAME COLUMN</code> keywords</li>
|
||||
* <li>the old column name</li>
|
||||
* <li>the <code>TO</code> keyword</li>
|
||||
* <li>the new column name</li>
|
||||
* </ul>
|
||||
*/
|
||||
ALTER_TABLE_RENAME_COLUMN,
|
||||
|
||||
/**
|
||||
* A <code>ADD</code> clause within an {@link #ALTER_TABLE} statement.
|
||||
|
||||
@ -46,7 +46,8 @@ import static org.jooq.Clause.ALTER_TABLE_ADD;
|
||||
import static org.jooq.Clause.ALTER_TABLE_ALTER;
|
||||
import static org.jooq.Clause.ALTER_TABLE_ALTER_DEFAULT;
|
||||
import static org.jooq.Clause.ALTER_TABLE_DROP;
|
||||
import static org.jooq.Clause.ALTER_TABLE_RENAME_TO;
|
||||
import static org.jooq.Clause.ALTER_TABLE_RENAME;
|
||||
import static org.jooq.Clause.ALTER_TABLE_RENAME_COLUMN;
|
||||
import static org.jooq.Clause.ALTER_TABLE_TABLE;
|
||||
import static org.jooq.SQLDialect.DERBY;
|
||||
import static org.jooq.SQLDialect.FIREBIRD;
|
||||
@ -62,6 +63,7 @@ import static org.jooq.impl.Utils.DataKey.DATA_DROP_CONSTRAINT;
|
||||
import org.jooq.AlterTableAlterStep;
|
||||
import org.jooq.AlterTableDropStep;
|
||||
import org.jooq.AlterTableFinalStep;
|
||||
import org.jooq.AlterTableRenameColumnToStep;
|
||||
import org.jooq.AlterTableStep;
|
||||
import org.jooq.Clause;
|
||||
import org.jooq.Configuration;
|
||||
@ -83,7 +85,8 @@ final class AlterTableImpl extends AbstractQuery implements
|
||||
// Cascading interface implementations for ALTER TABLE behaviour
|
||||
AlterTableStep,
|
||||
AlterTableDropStep,
|
||||
AlterTableAlterStep {
|
||||
AlterTableAlterStep,
|
||||
AlterTableRenameColumnToStep {
|
||||
|
||||
/**
|
||||
* Generated UID
|
||||
@ -93,6 +96,8 @@ final class AlterTableImpl extends AbstractQuery implements
|
||||
|
||||
private final Table<?> table;
|
||||
private Table<?> renameTo;
|
||||
private Field<?> renameColumn;
|
||||
private Field<?> renameColumnTo;
|
||||
private Field<?> addColumn;
|
||||
private DataType<?> addColumnType;
|
||||
private Constraint addConstraint;
|
||||
@ -129,6 +134,42 @@ final class AlterTableImpl extends AbstractQuery implements
|
||||
return renameTo(name(newName));
|
||||
}
|
||||
|
||||
@Override
|
||||
public final AlterTableImpl renameColumn(Field<?> oldName) {
|
||||
renameColumn = oldName;
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public final AlterTableImpl renameColumn(Name oldName) {
|
||||
return renameColumn(field(oldName));
|
||||
}
|
||||
|
||||
@Override
|
||||
public final AlterTableImpl renameColumn(String oldName) {
|
||||
return renameColumn(name(oldName));
|
||||
}
|
||||
|
||||
@Override
|
||||
public final AlterTableImpl to(Field<?> newName) {
|
||||
if (renameColumn != null)
|
||||
renameColumnTo = newName;
|
||||
else
|
||||
throw new IllegalStateException();
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public final AlterTableImpl to(Name newName) {
|
||||
return to(field(newName));
|
||||
}
|
||||
|
||||
@Override
|
||||
public final AlterTableImpl to(String newName) {
|
||||
return to(name(newName));
|
||||
}
|
||||
|
||||
@Override
|
||||
public final <T> AlterTableImpl add(Field<T> field, DataType<T> type) {
|
||||
return addColumn(field, type);
|
||||
@ -304,10 +345,41 @@ final class AlterTableImpl extends AbstractQuery implements
|
||||
.formatSeparator();
|
||||
|
||||
if (renameTo != null) {
|
||||
ctx.start(ALTER_TABLE_RENAME_TO)
|
||||
boolean qualify = ctx.qualify();
|
||||
|
||||
ctx.start(ALTER_TABLE_RENAME)
|
||||
.qualify(false)
|
||||
.keyword("rename to").sql(' ')
|
||||
.visit(renameTo)
|
||||
.end(ALTER_TABLE_RENAME_TO);
|
||||
.qualify(qualify)
|
||||
.end(ALTER_TABLE_RENAME);
|
||||
}
|
||||
else if (renameColumn != null) {
|
||||
boolean qualify = ctx.qualify();
|
||||
|
||||
ctx.start(ALTER_TABLE_RENAME_COLUMN)
|
||||
.qualify(false);
|
||||
|
||||
switch (ctx.family()) {
|
||||
case H2:
|
||||
ctx.keyword("alter column").sql(' ')
|
||||
.visit(renameColumn)
|
||||
.formatSeparator()
|
||||
.keyword("rename to").sql(' ')
|
||||
.visit(renameColumnTo);
|
||||
break;
|
||||
|
||||
default:
|
||||
ctx.keyword("rename column").sql(' ')
|
||||
.visit(renameColumn)
|
||||
.formatSeparator()
|
||||
.keyword("to").sql(' ')
|
||||
.visit(renameColumnTo);
|
||||
break;
|
||||
}
|
||||
|
||||
ctx.qualify(qualify)
|
||||
.end(ALTER_TABLE_RENAME_COLUMN);
|
||||
}
|
||||
else if (addColumn != null) {
|
||||
ctx.start(ALTER_TABLE_ADD)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user