Skip to content

Commit 85edc1a

Browse files
committed
feat: support PostgreSQL text search configuration DDL
Signed-off-by: minleejae <mmj9808@gmail.com>
1 parent 78d3de8 commit 85edc1a

11 files changed

Lines changed: 457 additions & 0 deletions

File tree

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -580,6 +580,8 @@ public enum Feature {
580580
*/
581581
createSequence,
582582
/** Publication and subscription definitions. */
583+
createTextSearchConfiguration, alterTextSearchConfiguration,
584+
583585
createPublication, alterPublication, createSubscription, alterSubscription,
584586
/**
585587
* Structured type, domain and extension statements.

‎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.create.textsearch.CreateTextSearchConfiguration;
13+
import net.sf.jsqlparser.statement.alter.AlterTextSearchConfiguration;
1214
import net.sf.jsqlparser.statement.alter.AlterPolicy;
1315
import net.sf.jsqlparser.statement.drop.DropPolicy;
1416
import net.sf.jsqlparser.statement.create.statistics.CreateStatistics;
@@ -733,4 +735,20 @@ default <S> T visit(AlterStatistics statement, S context) {
733735
default void visit(AlterStatistics statement) {
734736
visit(statement, null);
735737
}
738+
739+
default <S> T visit(CreateTextSearchConfiguration statement, S context) {
740+
return null;
741+
}
742+
743+
default void visit(CreateTextSearchConfiguration statement) {
744+
visit(statement, null);
745+
}
746+
747+
default <S> T visit(AlterTextSearchConfiguration statement, S context) {
748+
return null;
749+
}
750+
751+
default void visit(AlterTextSearchConfiguration statement) {
752+
visit(statement, null);
753+
}
736754
}
Lines changed: 162 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,162 @@
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 net.sf.jsqlparser.statement.Statement;
13+
import net.sf.jsqlparser.statement.StatementVisitor;
14+
import java.util.ArrayList;
15+
import java.util.List;
16+
17+
public class AlterTextSearchConfiguration implements Statement {
18+
public enum Action {
19+
ADD_MAPPING, ALTER_MAPPING, REPLACE_MAPPING, DROP_MAPPING, RENAME, OWNER, SET_SCHEMA
20+
}
21+
22+
private String name;
23+
private Action action;
24+
private List<String> tokenTypes = new ArrayList<>();
25+
private List<String> dictionaries = new ArrayList<>();
26+
private String oldDictionary;
27+
private String newDictionary;
28+
private boolean ifExists;
29+
private String newName;
30+
private String owner;
31+
private String schemaName;
32+
33+
public String getName() {
34+
return name;
35+
}
36+
37+
public void setName(String value) {
38+
name = value;
39+
}
40+
41+
public Action getAction() {
42+
return action;
43+
}
44+
45+
public void setAction(Action value) {
46+
action = value;
47+
}
48+
49+
public List<String> getTokenTypes() {
50+
return tokenTypes;
51+
}
52+
53+
public void setTokenTypes(List<String> value) {
54+
tokenTypes = value;
55+
}
56+
57+
public List<String> getDictionaries() {
58+
return dictionaries;
59+
}
60+
61+
public void setDictionaries(List<String> value) {
62+
dictionaries = value;
63+
}
64+
65+
public String getOldDictionary() {
66+
return oldDictionary;
67+
}
68+
69+
public void setOldDictionary(String value) {
70+
oldDictionary = value;
71+
}
72+
73+
public String getNewDictionary() {
74+
return newDictionary;
75+
}
76+
77+
public void setNewDictionary(String value) {
78+
newDictionary = value;
79+
}
80+
81+
public boolean isIfExists() {
82+
return ifExists;
83+
}
84+
85+
public void setIfExists(boolean value) {
86+
ifExists = value;
87+
}
88+
89+
public String getNewName() {
90+
return newName;
91+
}
92+
93+
public void setNewName(String value) {
94+
newName = value;
95+
}
96+
97+
public String getOwner() {
98+
return owner;
99+
}
100+
101+
public void setOwner(String value) {
102+
owner = value;
103+
}
104+
105+
public String getSchemaName() {
106+
return schemaName;
107+
}
108+
109+
public void setSchemaName(String value) {
110+
schemaName = value;
111+
}
112+
113+
public StringBuilder appendTo(StringBuilder sql) {
114+
sql.append("ALTER TEXT SEARCH CONFIGURATION ").append(name);
115+
switch (action) {
116+
case ADD_MAPPING:
117+
case ALTER_MAPPING:
118+
sql.append(
119+
action == Action.ADD_MAPPING ? " ADD MAPPING FOR " : " ALTER MAPPING FOR ")
120+
.append(String.join(", ", tokenTypes)).append(" WITH ")
121+
.append(String.join(", ", dictionaries));
122+
break;
123+
case REPLACE_MAPPING:
124+
sql.append(" ALTER MAPPING");
125+
if (!tokenTypes.isEmpty()) {
126+
sql.append(" FOR ").append(String.join(", ", tokenTypes));
127+
}
128+
sql.append(" REPLACE ").append(oldDictionary).append(" WITH ")
129+
.append(newDictionary);
130+
break;
131+
case DROP_MAPPING:
132+
sql.append(" DROP MAPPING");
133+
if (ifExists) {
134+
sql.append(" IF EXISTS");
135+
}
136+
sql.append(" FOR ").append(String.join(", ", tokenTypes));
137+
break;
138+
case RENAME:
139+
sql.append(" RENAME TO ").append(newName);
140+
break;
141+
case OWNER:
142+
sql.append(" OWNER TO ").append(owner);
143+
break;
144+
case SET_SCHEMA:
145+
sql.append(" SET SCHEMA ").append(schemaName);
146+
break;
147+
default:
148+
throw new IllegalStateException("Unknown text-search action: " + action);
149+
}
150+
return sql;
151+
}
152+
153+
@Override
154+
public String toString() {
155+
return appendTo(new StringBuilder()).toString();
156+
}
157+
158+
@Override
159+
public <T, S> T accept(StatementVisitor<T> visitor, S context) {
160+
return visitor.visit(this, context);
161+
}
162+
}
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
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.textsearch;
11+
12+
import net.sf.jsqlparser.statement.Statement;
13+
import net.sf.jsqlparser.statement.StatementVisitor;
14+
15+
public class CreateTextSearchConfiguration implements Statement {
16+
public enum SourceKind {
17+
PARSER, COPY
18+
}
19+
20+
private String name;
21+
private SourceKind sourceKind;
22+
private String sourceName;
23+
24+
public String getName() {
25+
return name;
26+
}
27+
28+
public void setName(String value) {
29+
name = value;
30+
}
31+
32+
public SourceKind getSourceKind() {
33+
return sourceKind;
34+
}
35+
36+
public void setSourceKind(SourceKind value) {
37+
sourceKind = value;
38+
}
39+
40+
public String getSourceName() {
41+
return sourceName;
42+
}
43+
44+
public void setSourceName(String value) {
45+
sourceName = value;
46+
}
47+
48+
public StringBuilder appendTo(StringBuilder sql) {
49+
return sql.append("CREATE TEXT SEARCH CONFIGURATION ").append(name)
50+
.append(" (").append(sourceKind).append(" = ").append(sourceName).append(')');
51+
}
52+
53+
@Override
54+
public String toString() {
55+
return appendTo(new StringBuilder()).toString();
56+
}
57+
58+
@Override
59+
public <T, S> T accept(StatementVisitor<T> visitor, S context) {
60+
return visitor.visit(this, context);
61+
}
62+
}

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

12+
import net.sf.jsqlparser.statement.create.textsearch.CreateTextSearchConfiguration;
13+
import net.sf.jsqlparser.statement.alter.AlterTextSearchConfiguration;
1214
import net.sf.jsqlparser.statement.alter.AlterPolicy;
1315
import net.sf.jsqlparser.statement.drop.DropPolicy;
1416
import net.sf.jsqlparser.statement.create.statistics.CreateStatistics;
@@ -2968,4 +2970,14 @@ public <S> Void visit(CreateStatistics statement, S context) {
29682970
public <S> Void visit(AlterStatistics statement, S context) {
29692971
return null;
29702972
}
2973+
2974+
@Override
2975+
public <S> Void visit(CreateTextSearchConfiguration statement, S context) {
2976+
return null;
2977+
}
2978+
2979+
@Override
2980+
public <S> Void visit(AlterTextSearchConfiguration statement, S context) {
2981+
return null;
2982+
}
29712983
}

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

12+
import net.sf.jsqlparser.statement.create.textsearch.CreateTextSearchConfiguration;
13+
import net.sf.jsqlparser.statement.alter.AlterTextSearchConfiguration;
1214
import net.sf.jsqlparser.statement.alter.AlterPolicy;
1315
import net.sf.jsqlparser.statement.drop.DropPolicy;
1416
import net.sf.jsqlparser.statement.create.statistics.CreateStatistics;
@@ -853,4 +855,14 @@ public <S> StringBuilder visit(CreateStatistics statement, S context) {
853855
public <S> StringBuilder visit(AlterStatistics statement, S context) {
854856
return statement.appendTo(builder);
855857
}
858+
859+
@Override
860+
public <S> StringBuilder visit(CreateTextSearchConfiguration statement, S context) {
861+
return statement.appendTo(builder);
862+
}
863+
864+
@Override
865+
public <S> StringBuilder visit(AlterTextSearchConfiguration statement, S context) {
866+
return statement.appendTo(builder);
867+
}
856868
}

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@ public class FeaturesAllowed implements FeatureSetValidation, ModifyableFeatureS
101101
* all "CREATE" {@link Feature}'s
102102
*/
103103
public static final FeaturesAllowed CREATE = new FeaturesAllowed("CREATE", Feature.createIndex,
104+
Feature.createTextSearchConfiguration,
104105
Feature.createSchema, Feature.createSequence, Feature.createTable,
105106
Feature.createTableUnlogged,
106107
Feature.createTableCreateOptionStrings, Feature.createTableTableOptionStrings,
@@ -113,6 +114,7 @@ public class FeaturesAllowed implements FeatureSetValidation, ModifyableFeatureS
113114
*/
114115
public static final FeaturesAllowed ALTER =
115116
new FeaturesAllowed("ALTER", Feature.alterTable, Feature.alterSequence,
117+
Feature.alterTextSearchConfiguration,
116118
Feature.alterView, Feature.alterIndex, Feature.alterSchema)
117119
.unmodifyable();
118120
/**

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,7 @@ public enum PostgresqlVersion implements Version {
9797

9898
// https://www.postgresql.org/docs/current/sql-createsequence.html
9999
Feature.createSequence,
100+
Feature.createTextSearchConfiguration, Feature.alterTextSearchConfiguration,
100101
Feature.createPublication, Feature.alterPublication,
101102
Feature.createSubscription, Feature.alterSubscription,
102103
Feature.createType, Feature.alterType,

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

Lines changed: 14 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.textsearch.CreateTextSearchConfiguration;
13+
import net.sf.jsqlparser.statement.alter.AlterTextSearchConfiguration;
1214
import net.sf.jsqlparser.statement.alter.schema.AlterSchema;
1315
import net.sf.jsqlparser.statement.oracle.OracleBlock;
1416
import net.sf.jsqlparser.statement.oracle.OracleAssignment;
@@ -1024,4 +1026,16 @@ public <S> Void visit(OracleNullStatement statement, S context) {
10241026
return null;
10251027
}
10261028

1029+
1030+
@Override
1031+
public <S> Void visit(CreateTextSearchConfiguration statement, S context) {
1032+
validateFeature(Feature.createTextSearchConfiguration);
1033+
return null;
1034+
}
1035+
1036+
@Override
1037+
public <S> Void visit(AlterTextSearchConfiguration statement, S context) {
1038+
validateFeature(Feature.alterTextSearchConfiguration);
1039+
return null;
1040+
}
10271041
}

0 commit comments

Comments
 (0)