Skip to content

Commit a3acbb9

Browse files
committed
Merge master and integrate foreign table and relation ALTER paths
Signed-off-by: minleejae <mmj9808@gmail.com>
2 parents 2c24f15 + 42d4670 commit a3acbb9

16 files changed

Lines changed: 1422 additions & 16 deletions

‎src/main/java/net/sf/jsqlparser/statement/StatementVisitor.java‎

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

12+
import net.sf.jsqlparser.statement.alter.AlterRelation;
13+
import net.sf.jsqlparser.statement.alter.AlterTablespaceMove;
1214
import net.sf.jsqlparser.statement.alter.database.AlterDatabase;
1315
import net.sf.jsqlparser.statement.alter.schema.AlterSchema;
1416
import net.sf.jsqlparser.statement.oracle.OracleBlock;
@@ -672,6 +674,14 @@ default void visit(OracleNullStatement statement) {
672674
visit(statement, null);
673675
}
674676

677+
default <S> T visit(AlterRelation statement, S context) {
678+
return null;
679+
}
680+
681+
default void visit(AlterRelation statement) {
682+
visit(statement, null);
683+
}
684+
675685
default <S> T visit(AlterDatabase statement, S context) {
676686
return null;
677687
}
@@ -680,4 +690,11 @@ default void visit(AlterDatabase statement) {
680690
visit(statement, null);
681691
}
682692

693+
default <S> T visit(AlterTablespaceMove statement, S context) {
694+
return null;
695+
}
696+
697+
default void visit(AlterTablespaceMove statement) {
698+
visit(statement, null);
699+
}
683700
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
import java.util.Locale;
1313

1414
public enum AlterOperation {
15-
ADD, ALTER, DROP, DROP_PRIMARY_KEY, DROP_UNIQUE, DROP_FOREIGN_KEY, DROP_CHECK, MODIFY, CHANGE, CONVERT, COLLATE, ALGORITHM, RENAME, RENAME_TABLE, RENAME_INDEX, RENAME_KEY, RENAME_CONSTRAINT, COMMENT, COMMENT_WITH_EQUAL_SIGN, UNSPECIFIC, ADD_PARTITION, DROP_PARTITION, ATTACH_PARTITION, DETACH_PARTITION, DISCARD_PARTITION, IMPORT_PARTITION, TRUNCATE_PARTITION, COALESCE_PARTITION, REORGANIZE_PARTITION, EXCHANGE_PARTITION, ANALYZE_PARTITION, CHECK_PARTITION, OPTIMIZE_PARTITION, REBUILD_PARTITION, REPAIR_PARTITION, REMOVE_PARTITIONING, PARTITION_BY, SET_TABLE_OPTION, ENGINE, FORCE, KEY_BLOCK_SIZE, LOCK, DISCARD_TABLESPACE, IMPORT_TABLESPACE, DISABLE_KEYS, ENABLE_KEYS, ENABLE_ROW_LEVEL_SECURITY, DISABLE_ROW_LEVEL_SECURITY, FORCE_ROW_LEVEL_SECURITY, NO_FORCE_ROW_LEVEL_SECURITY, ALTER_PRIMARY_KEY, FOREIGN_OPTIONS;
15+
ADD, ALTER, DROP, DROP_PRIMARY_KEY, DROP_UNIQUE, DROP_FOREIGN_KEY, DROP_CHECK, MODIFY, CHANGE, CONVERT, COLLATE, ALGORITHM, RENAME, RENAME_TABLE, RENAME_INDEX, RENAME_KEY, RENAME_CONSTRAINT, COMMENT, COMMENT_WITH_EQUAL_SIGN, UNSPECIFIC, ADD_PARTITION, DROP_PARTITION, ATTACH_PARTITION, DETACH_PARTITION, DISCARD_PARTITION, IMPORT_PARTITION, TRUNCATE_PARTITION, COALESCE_PARTITION, REORGANIZE_PARTITION, EXCHANGE_PARTITION, ANALYZE_PARTITION, CHECK_PARTITION, OPTIMIZE_PARTITION, REBUILD_PARTITION, REPAIR_PARTITION, REMOVE_PARTITIONING, PARTITION_BY, SET_TABLE_OPTION, ENGINE, FORCE, KEY_BLOCK_SIZE, LOCK, DISCARD_TABLESPACE, IMPORT_TABLESPACE, DISABLE_KEYS, ENABLE_KEYS, ENABLE_ROW_LEVEL_SECURITY, DISABLE_ROW_LEVEL_SECURITY, FORCE_ROW_LEVEL_SECURITY, NO_FORCE_ROW_LEVEL_SECURITY, ALTER_PRIMARY_KEY, ALTER_RELATION, FOREIGN_OPTIONS;
1616

1717
public static AlterOperation from(String operation) {
1818
return Enum.valueOf(AlterOperation.class, operation.toUpperCase(Locale.ROOT));
Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
/*-
2+
* #%L
3+
* JSQLParser library
4+
* %%
5+
* Copyright (C) 2004 - 2026 JSQLParser
6+
* %%
7+
* Dual licensed under GNU LGPL 2.1 or Apache License 2.0
8+
* #L%
9+
*/
10+
package net.sf.jsqlparser.statement.alter;
11+
12+
import java.util.ArrayList;
13+
import java.util.List;
14+
import java.util.function.Consumer;
15+
import net.sf.jsqlparser.expression.Expression;
16+
import net.sf.jsqlparser.schema.Table;
17+
import net.sf.jsqlparser.statement.Statement;
18+
import net.sf.jsqlparser.statement.StatementVisitor;
19+
20+
/** PostgreSQL ALTER INDEX, ALTER VIEW properties and ALTER MATERIALIZED VIEW. */
21+
public class AlterRelation implements Statement {
22+
public enum ObjectType {
23+
INDEX, VIEW, MATERIALIZED_VIEW
24+
}
25+
26+
private ObjectType objectType;
27+
private Table relation;
28+
private boolean ifExists;
29+
private final List<RelationAlterAction> actions = new ArrayList<>();
30+
31+
public ObjectType getObjectType() {
32+
return objectType;
33+
}
34+
35+
public void setObjectType(ObjectType objectType) {
36+
this.objectType = objectType;
37+
}
38+
39+
public Table getRelation() {
40+
return relation;
41+
}
42+
43+
public void setRelation(Table relation) {
44+
this.relation = relation;
45+
}
46+
47+
public boolean isIfExists() {
48+
return ifExists;
49+
}
50+
51+
public void setIfExists(boolean ifExists) {
52+
this.ifExists = ifExists;
53+
}
54+
55+
public List<RelationAlterAction> getActions() {
56+
return actions;
57+
}
58+
59+
public StringBuilder appendTo(StringBuilder builder, Consumer<Expression> expressionPrinter) {
60+
builder.append("ALTER ").append(objectType.name().replace('_', ' ')).append(' ');
61+
if (ifExists) {
62+
builder.append("IF EXISTS ");
63+
}
64+
builder.append(relation).append(' ');
65+
for (int i = 0; i < actions.size(); i++) {
66+
if (i > 0) {
67+
builder.append(", ");
68+
}
69+
actions.get(i).appendTo(builder, expressionPrinter);
70+
}
71+
return builder;
72+
}
73+
74+
@Override
75+
public String toString() {
76+
StringBuilder builder = new StringBuilder();
77+
return appendTo(builder, builder::append).toString();
78+
}
79+
80+
@Override
81+
public <T, S> T accept(StatementVisitor<T> visitor, S context) {
82+
return visitor.visit(this, context);
83+
}
84+
}
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
/*-
2+
* #%L
3+
* JSQLParser library
4+
* %%
5+
* Copyright (C) 2004 - 2026 JSQLParser
6+
* %%
7+
* Dual licensed under GNU LGPL 2.1 or Apache License 2.0
8+
* #L%
9+
*/
10+
package net.sf.jsqlparser.statement.alter;
11+
12+
import java.util.ArrayList;
13+
import java.util.List;
14+
import net.sf.jsqlparser.statement.Statement;
15+
import net.sf.jsqlparser.statement.StatementVisitor;
16+
import net.sf.jsqlparser.statement.select.PlainSelect;
17+
18+
/** Moves all matching relations from one PostgreSQL tablespace to another. */
19+
public class AlterTablespaceMove implements Statement {
20+
public enum ObjectType {
21+
TABLE, INDEX, MATERIALIZED_VIEW
22+
}
23+
24+
private ObjectType objectType;
25+
private String sourceTablespace;
26+
private String targetTablespace;
27+
private List<String> owners = new ArrayList<>();
28+
private boolean noWait;
29+
30+
public ObjectType getObjectType() {
31+
return objectType;
32+
}
33+
34+
public void setObjectType(ObjectType objectType) {
35+
this.objectType = objectType;
36+
}
37+
38+
public String getSourceTablespace() {
39+
return sourceTablespace;
40+
}
41+
42+
public void setSourceTablespace(String sourceTablespace) {
43+
this.sourceTablespace = sourceTablespace;
44+
}
45+
46+
public String getTargetTablespace() {
47+
return targetTablespace;
48+
}
49+
50+
public void setTargetTablespace(String targetTablespace) {
51+
this.targetTablespace = targetTablespace;
52+
}
53+
54+
public List<String> getOwners() {
55+
return owners;
56+
}
57+
58+
public void setOwners(List<String> owners) {
59+
this.owners = owners;
60+
}
61+
62+
public boolean isNoWait() {
63+
return noWait;
64+
}
65+
66+
public void setNoWait(boolean noWait) {
67+
this.noWait = noWait;
68+
}
69+
70+
public StringBuilder appendTo(StringBuilder builder) {
71+
builder.append("ALTER ").append(objectType.name().replace('_', ' '))
72+
.append(" ALL IN TABLESPACE ").append(sourceTablespace);
73+
if (owners != null && !owners.isEmpty()) {
74+
builder.append(" OWNED BY ").append(PlainSelect.getStringList(owners));
75+
}
76+
builder.append(" SET TABLESPACE ").append(targetTablespace);
77+
if (noWait) {
78+
builder.append(" NOWAIT");
79+
}
80+
return builder;
81+
}
82+
83+
@Override
84+
public String toString() {
85+
return appendTo(new StringBuilder()).toString();
86+
}
87+
88+
@Override
89+
public <T, S> T accept(StatementVisitor<T> visitor, S context) {
90+
return visitor.visit(this, context);
91+
}
92+
}

0 commit comments

Comments
 (0)