Skip to content

Commit 95da211

Browse files
authored
Model PostgreSQL CREATE ACCESS METHOD as a typed statement (#2725)
Signed-off-by: minleejae <mmj9808@gmail.com>
1 parent db0f2ad commit 95da211

12 files changed

Lines changed: 226 additions & 5 deletions

File tree

‎src/main/java/net/sf/jsqlparser/parser/feature/Feature.java‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -578,7 +578,7 @@ public enum Feature {
578578
*
579579
* @see CreateSequence
580580
*/
581-
createSequence,
581+
createSequence, createAccessMethod, createAccessMethodTable,
582582
/** Publication and subscription definitions. */
583583
createForeignDataWrapper, alterForeignDataWrapper, createServer, alterServer, createUserMapping, alterUserMapping,
584584

‎src/main/java/net/sf/jsqlparser/statement/StatementFeatureVisitor.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;
1111

12+
import net.sf.jsqlparser.statement.create.accessmethod.CreateAccessMethod;
13+
1214
import net.sf.jsqlparser.statement.oracle.OracleBlock;
1315
import net.sf.jsqlparser.statement.oracle.OracleAssignment;
1416
import net.sf.jsqlparser.statement.oracle.OracleNullStatement;
@@ -1152,4 +1154,9 @@ public <S> Void visit(OracleNullStatement statement, S context) {
11521154
return null;
11531155
}
11541156

1157+
1158+
@Override
1159+
public <S> Void visit(CreateAccessMethod statement, S context) {
1160+
return schemaOnly();
1161+
}
11551162
}

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

Lines changed: 10 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.create.accessmethod.CreateAccessMethod;
13+
1214
import net.sf.jsqlparser.statement.create.fdw.CreateForeignDataWrapper;
1315
import net.sf.jsqlparser.statement.alter.AlterForeignDataWrapper;
1416
import net.sf.jsqlparser.statement.create.server.CreateServer;
@@ -810,6 +812,14 @@ default void visit(AlterUserMapping statement) {
810812
visit(statement, null);
811813
}
812814

815+
default <S> T visit(CreateAccessMethod statement, S context) {
816+
return null;
817+
}
818+
819+
default void visit(CreateAccessMethod statement) {
820+
visit(statement, null);
821+
}
822+
813823
default <S> T visit(CreateTextSearchConfiguration statement, S context) {
814824
return null;
815825
}

‎src/main/java/net/sf/jsqlparser/statement/StatementVisitorAdapter.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;
1111

12+
import net.sf.jsqlparser.statement.create.accessmethod.CreateAccessMethod;
13+
1214
import net.sf.jsqlparser.statement.oracle.OracleBlock;
1315
import net.sf.jsqlparser.statement.oracle.OracleAssignment;
1416

@@ -897,4 +899,9 @@ public <S> T visit(OracleAssignment assignment, S context) {
897899
return null;
898900
}
899901

902+
903+
@Override
904+
public <S> T visit(CreateAccessMethod statement, S context) {
905+
return null;
906+
}
900907
}
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
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.create.accessmethod;
11+
12+
import net.sf.jsqlparser.statement.Statement;
13+
import net.sf.jsqlparser.statement.StatementVisitor;
14+
15+
/** A PostgreSQL table or index access method, whose handler names a function, not a table. */
16+
public class CreateAccessMethod implements Statement {
17+
public enum Type {
18+
TABLE, INDEX
19+
}
20+
21+
private String name;
22+
private Type type;
23+
private String handler;
24+
25+
public String getName() {
26+
return name;
27+
}
28+
29+
public void setName(String name) {
30+
this.name = name;
31+
}
32+
33+
public Type getType() {
34+
return type;
35+
}
36+
37+
public void setType(Type type) {
38+
this.type = type;
39+
}
40+
41+
public String getHandler() {
42+
return handler;
43+
}
44+
45+
public void setHandler(String handler) {
46+
this.handler = handler;
47+
}
48+
49+
@Override
50+
public <T, S> T accept(StatementVisitor<T> visitor, S context) {
51+
return visitor.visit(this, context);
52+
}
53+
54+
public StringBuilder appendTo(StringBuilder builder) {
55+
return builder.append("CREATE ACCESS METHOD ").append(name)
56+
.append(" TYPE ").append(type).append(" HANDLER ").append(handler);
57+
}
58+
59+
@Override
60+
public String toString() {
61+
return appendTo(new StringBuilder()).toString();
62+
}
63+
}

‎src/main/java/net/sf/jsqlparser/util/TablesNamesFinder.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.util;
1111

12+
import net.sf.jsqlparser.statement.create.accessmethod.CreateAccessMethod;
13+
1214
import net.sf.jsqlparser.statement.create.fdw.CreateForeignDataWrapper;
1315
import net.sf.jsqlparser.statement.alter.AlterForeignDataWrapper;
1416
import net.sf.jsqlparser.statement.create.server.CreateServer;
@@ -3029,6 +3031,11 @@ public <S> Void visit(AlterUserMapping statement, S context) {
30293031
return null;
30303032
}
30313033

3034+
@Override
3035+
public <S> Void visit(CreateAccessMethod statement, S context) {
3036+
return null;
3037+
}
3038+
30323039
@Override
30333040
public <S> Void visit(CreateTextSearchConfiguration statement, S context) {
30343041
return null;

‎src/main/java/net/sf/jsqlparser/util/deparser/StatementDeParser.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.util.deparser;
1111

12+
import net.sf.jsqlparser.statement.create.accessmethod.CreateAccessMethod;
13+
1214
import net.sf.jsqlparser.statement.create.fdw.CreateForeignDataWrapper;
1315
import net.sf.jsqlparser.statement.alter.AlterForeignDataWrapper;
1416
import net.sf.jsqlparser.statement.create.server.CreateServer;
@@ -895,6 +897,11 @@ public <S> StringBuilder visit(AlterUserMapping statement, S context) {
895897
expression -> expression.accept(expressionDeParser, context));
896898
}
897899

900+
@Override
901+
public <S> StringBuilder visit(CreateAccessMethod statement, S context) {
902+
return statement.appendTo(builder);
903+
}
904+
898905
@Override
899906
public <S> StringBuilder visit(CreateTextSearchConfiguration statement, S context) {
900907
return statement.appendTo(builder);

‎src/main/java/net/sf/jsqlparser/util/validation/feature/FeaturesAllowed.java‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,7 @@ public class FeaturesAllowed implements FeatureSetValidation, ModifyableFeatureS
106106
Feature.createCollation,
107107
Feature.createSchema, Feature.createSequence, Feature.createTable,
108108
Feature.createForeignDataWrapper, Feature.createServer, Feature.createUserMapping,
109+
Feature.createAccessMethod, Feature.createAccessMethodTable,
109110
Feature.createTableUnlogged,
110111
Feature.createTableCreateOptionStrings, Feature.createTableTableOptionStrings,
111112
Feature.createTableIfNotExists, Feature.createTableRowMovement,

‎src/main/java/net/sf/jsqlparser/util/validation/feature/PostgresqlVersion.java‎

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@ public enum PostgresqlVersion implements Version {
9898

9999
// https://www.postgresql.org/docs/current/sql-createsequence.html
100100
Feature.createSequence,
101+
Feature.createAccessMethod,
101102
Feature.createForeignDataWrapper, Feature.alterForeignDataWrapper,
102103
Feature.createServer, Feature.alterServer, Feature.createUserMapping,
103104
Feature.alterUserMapping,
@@ -160,10 +161,13 @@ public enum PostgresqlVersion implements Version {
160161
Feature.commit, Feature.startTransaction, Feature.releaseSavepoint,
161162
Feature.transactionIsolationLevel, Feature.transactionDeferrable)), V11("11",
162163
V10.copy().getFeatures()), V12("12",
163-
V11.copy().add(Feature.transactionChain).getFeatures()), V13(
164-
"13",
165-
V12.copy().getFeatures()), V14("14",
166-
V13.copy().getFeatures());
164+
V11.copy()
165+
.add(Feature.createAccessMethodTable,
166+
Feature.transactionChain)
167+
.getFeatures()), V13(
168+
"13",
169+
V12.copy().getFeatures()), V14("14",
170+
V13.copy().getFeatures());
167171

168172
private Set<Feature> features;
169173
private String versionString;

‎src/main/java/net/sf/jsqlparser/util/validation/validator/StatementValidator.java‎

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

12+
import net.sf.jsqlparser.statement.create.accessmethod.CreateAccessMethod;
13+
1214
import net.sf.jsqlparser.statement.create.fdw.CreateForeignDataWrapper;
1315
import net.sf.jsqlparser.statement.alter.AlterForeignDataWrapper;
1416
import net.sf.jsqlparser.statement.create.server.CreateServer;
@@ -1117,6 +1119,15 @@ public <S> Void visit(AlterUserMapping statement, S context) {
11171119
return null;
11181120
}
11191121

1122+
@Override
1123+
public <S> Void visit(CreateAccessMethod statement, S context) {
1124+
validateFeature(Feature.createAccessMethod);
1125+
if (statement.getType() == CreateAccessMethod.Type.TABLE) {
1126+
validateFeature(Feature.createAccessMethodTable);
1127+
}
1128+
return null;
1129+
}
1130+
11201131
@Override
11211132
public <S> Void visit(CreateTextSearchConfiguration statement, S context) {
11221133
validateFeature(Feature.createTextSearchConfiguration);

0 commit comments

Comments
 (0)