Skip to content

Commit 8d12a5d

Browse files
authored
Separate index and constraint ASTs (breaking API change) (#2747)
* feat: expose unified table constraint inspection Signed-off-by: minleejae <mmj9808@gmail.com> * fix: follow active rename precedence in constraint inspection Signed-off-by: minleejae <mmj9808@gmail.com> * refactor: separate index and constraint ASTs Signed-off-by: minleejae <mmj9808@gmail.com> * refactor: simplify constraint inspection and index rendering Signed-off-by: minleejae <mmj9808@gmail.com> --------- Signed-off-by: minleejae <mmj9808@gmail.com>
1 parent 9b7ab32 commit 8d12a5d

87 files changed

Lines changed: 3335 additions & 1589 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

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

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
import java.util.Objects;
1313
import net.sf.jsqlparser.statement.create.table.ConstraintAttributes;
14+
import net.sf.jsqlparser.statement.create.table.ConstraintKind;
1415

1516
/** Changes an existing constraint using the attributes shared with CREATE and ADD. */
1617
public class AlterConstraintAttributes extends AlterExpression {
@@ -29,6 +30,11 @@ public void setAttributes(ConstraintAttributes attributes) {
2930
this.attributes = Objects.requireNonNull(attributes, "attributes");
3031
}
3132

33+
@Override
34+
public boolean hasActiveTableDefinition() {
35+
return false;
36+
}
37+
3238
@Override
3339
public String getConstraintName() {
3440
return getConstraintSymbol();
@@ -49,6 +55,11 @@ public void setEnforced(boolean enforced) {
4955
attributes.setEnforced(enforced);
5056
}
5157

58+
@Override
59+
public ConstraintKind getConstraintKind() {
60+
return ConstraintKind.OTHER;
61+
}
62+
5263
@Override
5364
protected void appendBody(StringBuilder builder) {
5465
builder.append("ALTER CONSTRAINT ").append(getConstraintSymbol());

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

Lines changed: 217 additions & 62 deletions
Large diffs are not rendered by default.

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

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

12+
import net.sf.jsqlparser.statement.create.table.ConstraintKind;
13+
1214
/**
1315
* Internal subclass for character set and collation operations within ALTER TABLE. Handles CONVERT
1416
* TO CHARACTER SET, DEFAULT CHARACTER SET, CHARACTER SET, and COLLATE.
1517
*/
1618
public class AlterExpressionCharset extends AlterExpression {
1719

20+
@Override
21+
public boolean hasActiveTableDefinition() {
22+
return false;
23+
}
24+
25+
@Override
26+
public ConstraintKind getConstraintKind() {
27+
return ConstraintKind.OTHER;
28+
}
29+
1830
@Override
1931
protected void appendBody(StringBuilder b) {
2032
toStringConvert(b);

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

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

12+
1213
import net.sf.jsqlparser.statement.select.PlainSelect;
14+
import net.sf.jsqlparser.statement.create.table.ConstraintKind;
1315

1416
/**
1517
* Internal subclass for DROP operations within ALTER TABLE. Handles DROP column, DROP CONSTRAINT,
1618
* DROP INDEX/KEY, DROP PRIMARY KEY, DROP UNIQUE, DROP FOREIGN KEY, and DROP PARTITION.
1719
*/
1820
public class AlterExpressionDrop extends AlterExpression {
21+
@Override
22+
public boolean hasActiveTableDefinition() {
23+
return false;
24+
}
25+
26+
@Override
27+
public ConstraintKind getConstraintKind() {
28+
if (getOperation() == null) {
29+
return ConstraintKind.OTHER;
30+
}
31+
switch (getOperation()) {
32+
case DROP_PRIMARY_KEY:
33+
return ConstraintKind.PRIMARY_KEY;
34+
case DROP_UNIQUE:
35+
return ConstraintKind.UNIQUE;
36+
case DROP_FOREIGN_KEY:
37+
return ConstraintKind.FOREIGN_KEY;
38+
case DROP_CHECK:
39+
return ConstraintKind.CHECK;
40+
default:
41+
return ConstraintKind.OTHER;
42+
}
43+
}
1944

2045
@Override
2146
protected void appendBody(StringBuilder b) {

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

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import java.util.function.Consumer;
1515
import net.sf.jsqlparser.expression.Expression;
1616
import net.sf.jsqlparser.statement.select.OrderByElement;
17+
import net.sf.jsqlparser.statement.create.table.ConstraintKind;
1718

1819
/** MySQL ALTER TABLE ORDER BY, using the same mutable order elements as query ordering. */
1920
public class AlterExpressionOrderBy extends AlterExpression {
@@ -27,6 +28,16 @@ public List<OrderByElement> getOrderByElements() {
2728
return orderByElements;
2829
}
2930

31+
@Override
32+
public boolean hasActiveTableDefinition() {
33+
return false;
34+
}
35+
36+
@Override
37+
public ConstraintKind getConstraintKind() {
38+
return ConstraintKind.OTHER;
39+
}
40+
3041
@Override
3142
protected void appendBody(StringBuilder builder) {
3243
appendOrderBy(builder, builder::append);

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

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import net.sf.jsqlparser.statement.create.table.PartitionDefinition;
2626
import net.sf.jsqlparser.statement.create.table.TablePartitioning;
2727
import net.sf.jsqlparser.statement.select.PlainSelect;
28+
import net.sf.jsqlparser.statement.create.table.ConstraintKind;
2829

2930
/**
3031
* Structured model for partition operations within {@code ALTER TABLE}.
@@ -263,6 +264,11 @@ public void setCoalescePartitionCount(Integer coalescePartitionCount) {
263264
}
264265
}
265266

267+
@Override
268+
public boolean hasActiveTableDefinition() {
269+
return false;
270+
}
271+
266272
@Override
267273
public void setCoalescePartitionNumber(int coalescePartitionNumber) {
268274
super.setCoalescePartitionNumber(coalescePartitionNumber);
@@ -409,6 +415,11 @@ public AlterExpressionPartition addPartitionDefinitions(
409415
return withPartitionDefinitions(collection);
410416
}
411417

418+
@Override
419+
public ConstraintKind getConstraintKind() {
420+
return ConstraintKind.OTHER;
421+
}
422+
412423
@Override
413424
protected void appendBody(StringBuilder b) {
414425
appendBody(b, b::append);

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

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

12+
import net.sf.jsqlparser.statement.create.table.IndexOption;
13+
import net.sf.jsqlparser.statement.create.table.KeyElement;
1214
import java.util.Iterator;
1315
import java.util.function.Consumer;
1416
import net.sf.jsqlparser.expression.Expression;
15-
import net.sf.jsqlparser.statement.create.table.Index;
17+
import net.sf.jsqlparser.statement.create.table.KeyConstraint;
18+
import net.sf.jsqlparser.statement.create.table.ConstraintKind;
1619

1720
/**
1821
* CockroachDB's ALTER PRIMARY KEY USING COLUMNS operation. Key elements and storage options are
19-
* available through {@link #getIndex()}; hash sharding and the legacy WITH BUCKET_COUNT expression
20-
* are represented separately.
22+
* available through {@link #getConstraint()}; hash sharding and the legacy WITH BUCKET_COUNT
23+
* expression are represented separately.
2124
*/
2225
public class AlterExpressionPrimaryKey extends AlterExpression {
2326
private boolean usingHash;
2427
private Expression bucketCount;
2528

2629
public AlterExpressionPrimaryKey() {
2730
setOperation(AlterOperation.ALTER_PRIMARY_KEY);
28-
setIndex(new Index().withType("PRIMARY KEY"));
31+
setConstraint(new KeyConstraint().withType("PRIMARY KEY"));
32+
}
33+
34+
@Override
35+
public boolean hasActiveTableDefinition() {
36+
return false;
37+
}
38+
39+
@Override
40+
public KeyConstraint getConstraint() {
41+
return (KeyConstraint) super.getConstraint();
2942
}
3043

3144
public boolean isUsingHash() {
@@ -44,6 +57,11 @@ public void setBucketCount(Expression bucketCount) {
4457
this.bucketCount = bucketCount;
4558
}
4659

60+
@Override
61+
public ConstraintKind getConstraintKind() {
62+
return ConstraintKind.PRIMARY_KEY;
63+
}
64+
4765
@Override
4866
protected void appendBody(StringBuilder builder) {
4967
appendDefinition(builder, expression -> builder.append(expression));
@@ -58,8 +76,8 @@ public StringBuilder appendTo(StringBuilder builder, Consumer<Expression> expres
5876

5977
private void appendDefinition(StringBuilder builder, Consumer<Expression> expressionPrinter) {
6078
builder.append("ALTER PRIMARY KEY USING COLUMNS (");
61-
if (getIndex().getColumns() != null) {
62-
for (Iterator<Index.ColumnParams> columns = getIndex().getColumns().iterator(); columns
79+
if (getConstraint().getColumns() != null) {
80+
for (Iterator<KeyElement> columns = getConstraint().getColumns().iterator(); columns
6381
.hasNext();) {
6482
columns.next().appendTo(builder, expressionPrinter);
6583
if (columns.hasNext()) {
@@ -84,10 +102,10 @@ private void appendSharding(StringBuilder builder, Consumer<Expression> expressi
84102

85103
private void appendStorageOptions(StringBuilder builder,
86104
Consumer<Expression> expressionPrinter) {
87-
if (getIndex().getStorageParameters() != null) {
105+
if (getConstraint().getStorageParameters() != null) {
88106
builder.append(" WITH (");
89-
for (Iterator<Index.Option> options =
90-
getIndex().getStorageParameters().iterator(); options.hasNext();) {
107+
for (Iterator<IndexOption> options =
108+
getConstraint().getStorageParameters().iterator(); options.hasNext();) {
91109
options.next().appendTo(builder, expressionPrinter);
92110
if (options.hasNext()) {
93111
builder.append(", ");

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

Lines changed: 12 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 net.sf.jsqlparser.statement.create.table.ConstraintKind;
13+
1214
/**
1315
* Internal subclass for RENAME operations within ALTER TABLE. Handles RENAME COLUMN, RENAME TO
1416
* (table), RENAME INDEX/KEY/CONSTRAINT.
@@ -40,6 +42,16 @@ public void setTargetName(String name) {
4042
setColumnName(name);
4143
}
4244

45+
@Override
46+
public boolean hasActiveTableDefinition() {
47+
return false;
48+
}
49+
50+
@Override
51+
public ConstraintKind getConstraintKind() {
52+
return ConstraintKind.OTHER;
53+
}
54+
4355
@Override
4456
protected void appendBody(StringBuilder b) {
4557
switch (getOperation()) {

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

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

1212
import net.sf.jsqlparser.statement.create.table.TableOption;
13+
import net.sf.jsqlparser.statement.create.table.ConstraintKind;
1314

1415
/**
1516
* Internal subclass for table-level option operations within ALTER TABLE. Handles ENGINE,
@@ -32,6 +33,11 @@ public void setStructuredTableOption(TableOption option) {
3233
super.setUseEqual(false);
3334
}
3435

36+
@Override
37+
public boolean hasActiveTableDefinition() {
38+
return false;
39+
}
40+
3541
@Override
3642
public AlterOperation getOperation() {
3743
if (structuredTableOption != null) {
@@ -128,6 +134,11 @@ public void setUseEqual(boolean useEqual) {
128134
super.setUseEqual(useEqual);
129135
}
130136

137+
@Override
138+
public ConstraintKind getConstraintKind() {
139+
return ConstraintKind.OTHER;
140+
}
141+
131142
@Override
132143
protected void appendBody(StringBuilder b) {
133144
if (structuredTableOption != null) {

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

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import java.util.function.Consumer;
1414
import net.sf.jsqlparser.expression.Expression;
1515
import net.sf.jsqlparser.statement.create.table.ForeignDataOption;
16+
import net.sf.jsqlparser.statement.create.table.ConstraintKind;
1617

1718
/** Foreign table OPTIONS, optionally applied to one column. */
1819
public class AlterForeignDataOptions extends AlterExpression {
@@ -39,6 +40,16 @@ public StringBuilder appendTo(StringBuilder builder, Consumer<Expression> expres
3940
return builder;
4041
}
4142

43+
@Override
44+
public boolean hasActiveTableDefinition() {
45+
return false;
46+
}
47+
48+
@Override
49+
public ConstraintKind getConstraintKind() {
50+
return ConstraintKind.OTHER;
51+
}
52+
4253
@Override
4354
protected void appendBody(StringBuilder builder) {
4455
appendTo(builder, builder::append);

0 commit comments

Comments
 (0)