Skip to content

Commit 43bb7e6

Browse files
committed
Merge master and preserve statistics and policy visitors
Signed-off-by: minleejae <mmj9808@gmail.com>
2 parents 042caa3 + e85e54f commit 43bb7e6

16 files changed

Lines changed: 662 additions & 77 deletions

File tree

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

Lines changed: 18 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.AlterPolicy;
13+
import net.sf.jsqlparser.statement.drop.DropPolicy;
1214
import net.sf.jsqlparser.statement.create.statistics.CreateStatistics;
1315
import net.sf.jsqlparser.statement.alter.AlterStatistics;
1416
import net.sf.jsqlparser.statement.alter.AlterRelation;
@@ -700,6 +702,22 @@ default void visit(AlterTablespaceMove statement) {
700702
visit(statement, null);
701703
}
702704

705+
default <S> T visit(AlterPolicy statement, S context) {
706+
return null;
707+
}
708+
709+
default void visit(AlterPolicy statement) {
710+
visit(statement, null);
711+
}
712+
713+
default <S> T visit(DropPolicy statement, S context) {
714+
return null;
715+
}
716+
717+
default void visit(DropPolicy statement) {
718+
visit(statement, null);
719+
}
720+
703721
default <S> T visit(CreateStatistics statement, S context) {
704722
return null;
705723
}
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
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.statement.select.OrderByElement;
17+
18+
/** MySQL ALTER TABLE ORDER BY, using the same mutable order elements as query ordering. */
19+
public class AlterExpressionOrderBy extends AlterExpression {
20+
private final List<OrderByElement> orderByElements = new ArrayList<>();
21+
22+
public AlterExpressionOrderBy() {
23+
setOperation(AlterOperation.ORDER_BY);
24+
}
25+
26+
public List<OrderByElement> getOrderByElements() {
27+
return orderByElements;
28+
}
29+
30+
@Override
31+
protected void appendBody(StringBuilder builder) {
32+
appendOrderBy(builder, builder::append);
33+
}
34+
35+
public StringBuilder appendTo(StringBuilder builder, Consumer<Expression> expressionPrinter) {
36+
appendOrderBy(builder, expressionPrinter);
37+
appendCommonTail(builder);
38+
return builder;
39+
}
40+
41+
private void appendOrderBy(StringBuilder builder, Consumer<Expression> expressionPrinter) {
42+
builder.append("ORDER BY ");
43+
for (int i = 0; i < orderByElements.size(); i++) {
44+
if (i > 0) {
45+
builder.append(", ");
46+
}
47+
OrderByElement element = orderByElements.get(i);
48+
expressionPrinter.accept(element.getExpression());
49+
if (!element.isAsc()) {
50+
builder.append(" DESC");
51+
} else if (element.isAscDescPresent()) {
52+
builder.append(" ASC");
53+
}
54+
}
55+
}
56+
}

‎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, ALTER_RELATION;
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, ORDER_BY;
1616

1717
public static AlterOperation from(String operation) {
1818
return Enum.valueOf(AlterOperation.class, operation.toUpperCase(Locale.ROOT));
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
/*-
2+
* #%L
3+
* JSQLParser library
4+
* %%
5+
* Copyright (C) 2004 - 2025 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 net.sf.jsqlparser.statement.Statement;
13+
import net.sf.jsqlparser.statement.StatementVisitor;
14+
import net.sf.jsqlparser.statement.create.policy.PolicyOptions;
15+
16+
public class AlterPolicy implements Statement {
17+
private String policyName;
18+
private net.sf.jsqlparser.schema.Table table;
19+
private String newName;
20+
private PolicyOptions options = new PolicyOptions();
21+
22+
23+
public String getPolicyName() {
24+
return policyName;
25+
}
26+
27+
public AlterPolicy setPolicyName(String policyName) {
28+
this.policyName = policyName;
29+
return this;
30+
}
31+
32+
public net.sf.jsqlparser.schema.Table getTable() {
33+
return table;
34+
}
35+
36+
public AlterPolicy setTable(net.sf.jsqlparser.schema.Table table) {
37+
this.table = table;
38+
return this;
39+
}
40+
41+
42+
public String getNewName() {
43+
return newName;
44+
}
45+
46+
public void setNewName(String newName) {
47+
this.newName = newName;
48+
if (newName != null) {
49+
options = new PolicyOptions();
50+
}
51+
}
52+
53+
public PolicyOptions getOptions() {
54+
return options;
55+
}
56+
57+
public void setOptions(PolicyOptions options) {
58+
this.options = java.util.Objects.requireNonNull(options);
59+
newName = null;
60+
}
61+
62+
public StringBuilder appendTo(StringBuilder sql,
63+
java.util.function.Consumer<net.sf.jsqlparser.expression.Expression> printer) {
64+
sql.append("ALTER POLICY ").append(policyName).append(" ON ").append(table);
65+
if (newName != null) {
66+
sql.append(" RENAME TO ").append(newName);
67+
} else {
68+
options.appendTo(sql, printer);
69+
}
70+
return sql;
71+
}
72+
73+
@Override
74+
public String toString() {
75+
StringBuilder b = new StringBuilder();
76+
return appendTo(b, b::append).toString();
77+
}
78+
79+
@Override
80+
public <T, S> T accept(StatementVisitor<T> visitor, S context) {
81+
return visitor.visit(this, context);
82+
}
83+
}

‎src/main/java/net/sf/jsqlparser/statement/create/policy/CreatePolicy.java‎

Lines changed: 27 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
import net.sf.jsqlparser.statement.Statement;
1515
import net.sf.jsqlparser.statement.StatementVisitor;
1616

17-
import java.util.ArrayList;
17+
import java.util.function.Consumer;
1818
import java.util.List;
1919

2020
/**
@@ -30,9 +30,16 @@ public class CreatePolicy implements Statement {
3030
private Table table;
3131
private PolicyMode policyMode;
3232
private PolicyCommand policyCommand;
33-
private List<String> roles = new ArrayList<>();
34-
private Expression usingExpression;
35-
private Expression withCheckExpression;
33+
private PolicyOptions options = new PolicyOptions();
34+
35+
public PolicyOptions getOptions() {
36+
return options;
37+
}
38+
39+
public CreatePolicy setOptions(PolicyOptions options) {
40+
this.options = java.util.Objects.requireNonNull(options);
41+
return this;
42+
}
3643

3744
public String getPolicyName() {
3845
return policyName;
@@ -118,34 +125,34 @@ public PolicyCommand getEffectivePolicyCommand() {
118125
}
119126

120127
public List<String> getRoles() {
121-
return roles;
128+
return options.getRoles();
122129
}
123130

124131
public CreatePolicy setRoles(List<String> roles) {
125-
this.roles = roles;
132+
options.setRoles(roles);
126133
return this;
127134
}
128135

129136
public CreatePolicy addRole(String role) {
130-
this.roles.add(role);
137+
options.getRoles().add(role);
131138
return this;
132139
}
133140

134141
public Expression getUsingExpression() {
135-
return usingExpression;
142+
return options.getUsingExpression();
136143
}
137144

138145
public CreatePolicy setUsingExpression(Expression usingExpression) {
139-
this.usingExpression = usingExpression;
146+
options.setUsingExpression(usingExpression);
140147
return this;
141148
}
142149

143150
public Expression getWithCheckExpression() {
144-
return withCheckExpression;
151+
return options.getWithCheckExpression();
145152
}
146153

147154
public CreatePolicy setWithCheckExpression(Expression withCheckExpression) {
148-
this.withCheckExpression = withCheckExpression;
155+
options.setWithCheckExpression(withCheckExpression);
149156
return this;
150157
}
151158

@@ -154,39 +161,22 @@ public <T, S> T accept(StatementVisitor<T> statementVisitor, S context) {
154161
return statementVisitor.visit(this, context);
155162
}
156163

157-
@Override
158-
public String toString() {
159-
StringBuilder builder = new StringBuilder("CREATE POLICY ");
160-
builder.append(policyName);
161-
builder.append(" ON ");
162-
builder.append(table.toString());
163164

165+
public StringBuilder appendTo(StringBuilder builder, Consumer<Expression> printer) {
166+
builder.append("CREATE POLICY ").append(policyName).append(" ON ").append(table);
164167
if (policyMode != null) {
165168
builder.append(" AS ").append(policyMode);
166169
}
167-
168170
if (policyCommand != null) {
169171
builder.append(" FOR ").append(policyCommand);
170172
}
173+
options.appendTo(builder, printer);
174+
return builder;
175+
}
171176

172-
if (roles != null && !roles.isEmpty()) {
173-
builder.append(" TO ");
174-
for (int i = 0; i < roles.size(); i++) {
175-
if (i > 0) {
176-
builder.append(", ");
177-
}
178-
builder.append(roles.get(i));
179-
}
180-
}
181-
182-
if (usingExpression != null) {
183-
builder.append(" USING (").append(usingExpression.toString()).append(")");
184-
}
185-
186-
if (withCheckExpression != null) {
187-
builder.append(" WITH CHECK (").append(withCheckExpression.toString()).append(")");
188-
}
189-
190-
return builder.toString();
177+
@Override
178+
public String toString() {
179+
StringBuilder builder = new StringBuilder();
180+
return appendTo(builder, builder::append).toString();
191181
}
192182
}
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
/*-
2+
* #%L
3+
* JSQLParser library
4+
* %%
5+
* Copyright (C) 2004 - 2025 JSQLParser
6+
* %%
7+
* Dual licensed under GNU LGPL 2.1 or Apache License 2.0
8+
* #L%
9+
*/
10+
package net.sf.jsqlparser.statement.create.policy;
11+
12+
import java.io.Serializable;
13+
import java.util.ArrayList;
14+
import java.util.List;
15+
import java.util.function.Consumer;
16+
import net.sf.jsqlparser.expression.Expression;
17+
18+
/** Roles and predicates shared by PostgreSQL CREATE and ALTER POLICY. */
19+
public class PolicyOptions implements Serializable {
20+
private List<String> roles = new ArrayList<>();
21+
private Expression usingExpression;
22+
private Expression withCheckExpression;
23+
24+
public List<String> getRoles() {
25+
return roles;
26+
}
27+
28+
public PolicyOptions setRoles(List<String> roles) {
29+
this.roles = roles;
30+
return this;
31+
}
32+
33+
public Expression getUsingExpression() {
34+
return usingExpression;
35+
}
36+
37+
public PolicyOptions setUsingExpression(Expression usingExpression) {
38+
this.usingExpression = usingExpression;
39+
return this;
40+
}
41+
42+
public Expression getWithCheckExpression() {
43+
return withCheckExpression;
44+
}
45+
46+
public PolicyOptions setWithCheckExpression(Expression withCheckExpression) {
47+
this.withCheckExpression = withCheckExpression;
48+
return this;
49+
}
50+
51+
public void visitExpressions(Consumer<Expression> visitor) {
52+
if (usingExpression != null) {
53+
visitor.accept(usingExpression);
54+
}
55+
if (withCheckExpression != null) {
56+
visitor.accept(withCheckExpression);
57+
}
58+
}
59+
60+
public void appendTo(StringBuilder sql, Consumer<Expression> printer) {
61+
if (roles != null && !roles.isEmpty()) {
62+
sql.append(" TO ").append(String.join(", ", roles));
63+
}
64+
if (usingExpression != null) {
65+
sql.append(" USING (");
66+
printer.accept(usingExpression);
67+
sql.append(')');
68+
}
69+
if (withCheckExpression != null) {
70+
sql.append(" WITH CHECK (");
71+
printer.accept(withCheckExpression);
72+
sql.append(')');
73+
}
74+
}
75+
}

‎src/main/java/net/sf/jsqlparser/statement/create/table/TableOption.java‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
public class TableOption implements Serializable {
2222

2323
public enum Kind {
24-
ENGINE, CHARACTER_SET, COLLATE, COMMENT, AUTO_INCREMENT, STATS_AUTO_RECALC, STATS_PERSISTENT, STATS_SAMPLE_PAGES, UNION, ENCRYPTION, PASSWORD, DATA_DIRECTORY, INDEX_DIRECTORY, STORAGE_PARAMETERS, WITHOUT_OIDS, ENGINE_ATTRIBUTE, SECONDARY_ENGINE_ATTRIBUTE, OTHER
24+
ENGINE, CHARACTER_SET, COLLATE, COMMENT, AUTO_INCREMENT, STATS_AUTO_RECALC, STATS_PERSISTENT, STATS_SAMPLE_PAGES, UNION, ENCRYPTION, PASSWORD, DATA_DIRECTORY, INDEX_DIRECTORY, STORAGE_PARAMETERS, WITHOUT_OIDS, ENGINE_ATTRIBUTE, SECONDARY_ENGINE_ATTRIBUTE, ROW_FORMAT, OTHER
2525
}
2626

2727
private Kind kind = Kind.OTHER;

0 commit comments

Comments
 (0)