Skip to content

Commit db2cb7c

Browse files
committed
Expose editable ALTER column identity actions
Signed-off-by: minleejae <mmj9808@gmail.com>
1 parent cdbaf1a commit db2cb7c

15 files changed

Lines changed: 521 additions & 10 deletions

‎src/main/java/net/sf/jsqlparser/statement/alter/AlterConstraintAttributes.java‎

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@
99
*/
1010
package net.sf.jsqlparser.statement.alter;
1111

12+
import java.util.Collections;
13+
import java.util.List;
14+
1215
import java.util.Objects;
1316
import net.sf.jsqlparser.statement.create.table.ConstraintAttributes;
1417
import net.sf.jsqlparser.statement.create.table.ConstraintKind;
@@ -30,6 +33,11 @@ public void setAttributes(ConstraintAttributes attributes) {
3033
this.attributes = Objects.requireNonNull(attributes, "attributes");
3134
}
3235

36+
@Override
37+
public List<ColumnIdentityAction> getColumnIdentityActions() {
38+
return Collections.emptyList();
39+
}
40+
3341
@Override
3442
public boolean hasActiveTableDefinition() {
3543
return false;

‎src/main/java/net/sf/jsqlparser/statement/alter/AlterExpression.java‎

Lines changed: 41 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -444,6 +444,35 @@ public List<ColumnDefaultAction> getColumnDefaults() {
444444
return Collections.unmodifiableList(columnSetDefaultList);
445445
}
446446

447+
/**
448+
* Returns active ALTER COLUMN identity actions without treating them as data-type changes. The
449+
* list is an unmodifiable membership snapshot; its entries are the original mutable column
450+
* nodes. Request a new list after adding, removing or changing actions. Subclasses that render
451+
* a different body override this method to exclude inactive inherited column definitions.
452+
*/
453+
public List<ColumnIdentityAction> getColumnIdentityActions() {
454+
if (hasExplicitConstraintHeader() || isRenameOperation() || hasAlterColumnValueActions()) {
455+
return Collections.emptyList();
456+
}
457+
return getColumnIdentityActionsFromDefinitions();
458+
}
459+
460+
/** Returns identity actions when this body's general column-definition branch is active. */
461+
protected List<ColumnIdentityAction> getColumnIdentityActionsFromDefinitions() {
462+
if (operation != AlterOperation.ALTER || colDataTypeList == null
463+
|| columnName != null || commentText != null) {
464+
return Collections.emptyList();
465+
}
466+
List<ColumnIdentityAction> actions = new ArrayList<>();
467+
for (ColumnDataType column : colDataTypeList) {
468+
if (column.getIdentityAlterations() != null
469+
&& !column.getIdentityAlterations().isEmpty()) {
470+
actions.add(column);
471+
}
472+
}
473+
return Collections.unmodifiableList(actions);
474+
}
475+
447476
public void addColSetVisibility(ColumnSetVisibility columnSetVisibility) {
448477
if (columnSetVisibilityList == null) {
449478
columnSetVisibilityList = new ArrayList<>();
@@ -994,10 +1023,7 @@ protected void appendBody(StringBuilder b) {
9941023
b.append(optionalSpecifier);
9951024
} else if (hasExplicitConstraintHeader()) {
9961025
toStringConstraintAlter(b);
997-
} else if (operation == AlterOperation.ALTER
998-
&& (columnDropDefaultList != null && !columnDropDefaultList.isEmpty()
999-
|| columnSetDefaultList != null && !columnSetDefaultList.isEmpty()
1000-
|| columnSetVisibilityList != null && !columnSetVisibilityList.isEmpty())) {
1026+
} else if (hasAlterColumnValueActions()) {
10011027
toStringAlterColumn(b);
10021028
} else if (isSimpleKeywordOperation()) {
10031029
toStringSimpleKeyword(b);
@@ -1014,6 +1040,13 @@ protected void appendBody(StringBuilder b) {
10141040
}
10151041
}
10161042

1043+
private boolean hasAlterColumnValueActions() {
1044+
return operation == AlterOperation.ALTER
1045+
&& (columnDropDefaultList != null && !columnDropDefaultList.isEmpty()
1046+
|| columnSetDefaultList != null && !columnSetDefaultList.isEmpty()
1047+
|| columnSetVisibilityList != null && !columnSetVisibilityList.isEmpty());
1048+
}
1049+
10171050
/**
10181051
* Appends the common tail (parameters, index comment) shared by all ALTER expressions.
10191052
*/
@@ -1711,7 +1744,8 @@ public void setHasEqualForCollate(boolean hasEqualForCollate) {
17111744
this.hasEqualForCollate = hasEqualForCollate;
17121745
}
17131746

1714-
public static final class ColumnDataType extends ColumnDefinition {
1747+
public static final class ColumnDataType extends ColumnDefinition
1748+
implements ColumnIdentityAction {
17151749

17161750
private final boolean withType;
17171751
private boolean useSetData;
@@ -1739,10 +1773,12 @@ public void setUsingExpression(Expression usingExpression) {
17391773
this.usingExpression = usingExpression;
17401774
}
17411775

1776+
@Override
17421777
public List<IdentityAlteration> getIdentityAlterations() {
17431778
return identityAlterations;
17441779
}
17451780

1781+
@Override
17461782
public void setIdentityAlterations(List<IdentityAlteration> identityAlterations) {
17471783
this.identityAlterations =
17481784
identityAlterations == null ? null : new ArrayList<>(identityAlterations);

‎src/main/java/net/sf/jsqlparser/statement/alter/AlterExpressionCharset.java‎

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@
99
*/
1010
package net.sf.jsqlparser.statement.alter;
1111

12+
import java.util.Collections;
13+
import java.util.List;
14+
1215
import net.sf.jsqlparser.statement.create.table.ConstraintKind;
1316

1417
/**
@@ -17,6 +20,11 @@
1720
*/
1821
public class AlterExpressionCharset extends AlterExpression {
1922

23+
@Override
24+
public List<ColumnIdentityAction> getColumnIdentityActions() {
25+
return Collections.emptyList();
26+
}
27+
2028
@Override
2129
public boolean hasActiveTableDefinition() {
2230
return false;

‎src/main/java/net/sf/jsqlparser/statement/alter/AlterExpressionDrop.java‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
*/
1010
package net.sf.jsqlparser.statement.alter;
1111

12+
import java.util.List;
1213

1314
import net.sf.jsqlparser.statement.select.PlainSelect;
1415
import net.sf.jsqlparser.statement.create.table.ConstraintKind;
@@ -18,6 +19,11 @@
1819
* DROP INDEX/KEY, DROP PRIMARY KEY, DROP UNIQUE, DROP FOREIGN KEY, and DROP PARTITION.
1920
*/
2021
public class AlterExpressionDrop extends AlterExpression {
22+
@Override
23+
public List<ColumnIdentityAction> getColumnIdentityActions() {
24+
return getColumnIdentityActionsFromDefinitions();
25+
}
26+
2127
@Override
2228
public boolean hasActiveTableDefinition() {
2329
return false;

‎src/main/java/net/sf/jsqlparser/statement/alter/AlterExpressionOrderBy.java‎

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99
*/
1010
package net.sf.jsqlparser.statement.alter;
1111

12+
import java.util.Collections;
13+
1214
import java.util.ArrayList;
1315
import java.util.List;
1416
import java.util.function.Consumer;
@@ -28,6 +30,11 @@ public List<OrderByElement> getOrderByElements() {
2830
return orderByElements;
2931
}
3032

33+
@Override
34+
public List<ColumnIdentityAction> getColumnIdentityActions() {
35+
return Collections.emptyList();
36+
}
37+
3138
@Override
3239
public boolean hasActiveTableDefinition() {
3340
return false;

‎src/main/java/net/sf/jsqlparser/statement/alter/AlterExpressionPartition.java‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
*/
1010
package net.sf.jsqlparser.statement.alter;
1111

12+
1213
import java.util.AbstractList;
1314
import java.util.ArrayList;
1415
import java.util.Collection;
@@ -264,6 +265,11 @@ public void setCoalescePartitionCount(Integer coalescePartitionCount) {
264265
}
265266
}
266267

268+
@Override
269+
public List<ColumnIdentityAction> getColumnIdentityActions() {
270+
return Collections.emptyList();
271+
}
272+
267273
@Override
268274
public boolean hasActiveTableDefinition() {
269275
return false;

‎src/main/java/net/sf/jsqlparser/statement/alter/AlterExpressionPrimaryKey.java‎

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@
99
*/
1010
package net.sf.jsqlparser.statement.alter;
1111

12+
import java.util.Collections;
13+
import java.util.List;
14+
1215
import net.sf.jsqlparser.statement.create.table.IndexOption;
1316
import net.sf.jsqlparser.statement.create.table.KeyElement;
1417
import java.util.Iterator;
@@ -31,6 +34,11 @@ public AlterExpressionPrimaryKey() {
3134
setConstraint(new KeyConstraint().withType("PRIMARY KEY"));
3235
}
3336

37+
@Override
38+
public List<ColumnIdentityAction> getColumnIdentityActions() {
39+
return Collections.emptyList();
40+
}
41+
3442
@Override
3543
public boolean hasActiveTableDefinition() {
3644
return false;

‎src/main/java/net/sf/jsqlparser/statement/alter/AlterExpressionRename.java‎

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@
99
*/
1010
package net.sf.jsqlparser.statement.alter;
1111

12+
import java.util.Collections;
13+
import java.util.List;
14+
1215
import net.sf.jsqlparser.statement.create.table.ConstraintKind;
1316

1417
/**
@@ -42,6 +45,11 @@ public void setTargetName(String name) {
4245
setColumnName(name);
4346
}
4447

48+
@Override
49+
public List<ColumnIdentityAction> getColumnIdentityActions() {
50+
return Collections.emptyList();
51+
}
52+
4553
@Override
4654
public boolean hasActiveTableDefinition() {
4755
return false;

‎src/main/java/net/sf/jsqlparser/statement/alter/AlterExpressionTableOption.java‎

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@
99
*/
1010
package net.sf.jsqlparser.statement.alter;
1111

12+
import java.util.Collections;
13+
import java.util.List;
14+
1215
import net.sf.jsqlparser.statement.create.table.TableOption;
1316
import net.sf.jsqlparser.statement.create.table.ConstraintKind;
1417

@@ -33,6 +36,11 @@ public void setStructuredTableOption(TableOption option) {
3336
super.setUseEqual(false);
3437
}
3538

39+
@Override
40+
public List<ColumnIdentityAction> getColumnIdentityActions() {
41+
return Collections.emptyList();
42+
}
43+
3644
@Override
3745
public boolean hasActiveTableDefinition() {
3846
return false;

‎src/main/java/net/sf/jsqlparser/statement/alter/AlterForeignDataOptions.java‎

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99
*/
1010
package net.sf.jsqlparser.statement.alter;
1111

12+
import java.util.Collections;
13+
1214
import java.util.List;
1315
import java.util.function.Consumer;
1416
import net.sf.jsqlparser.expression.Expression;
@@ -40,6 +42,11 @@ public StringBuilder appendTo(StringBuilder builder, Consumer<Expression> expres
4042
return builder;
4143
}
4244

45+
@Override
46+
public List<ColumnIdentityAction> getColumnIdentityActions() {
47+
return Collections.emptyList();
48+
}
49+
4350
@Override
4451
public boolean hasActiveTableDefinition() {
4552
return false;

0 commit comments

Comments
 (0)