Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions src/main/java/net/sf/jsqlparser/parser/feature/Feature.java
Original file line number Diff line number Diff line change
Expand Up @@ -580,6 +580,8 @@ public enum Feature {
*/
createSequence,
/** Publication and subscription definitions. */
createTextSearchConfiguration, alterTextSearchConfiguration,

createPublication, alterPublication, createSubscription, alterSubscription,
/**
* Structured type, domain and extension statements.
Expand Down
18 changes: 18 additions & 0 deletions src/main/java/net/sf/jsqlparser/statement/StatementVisitor.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@
*/
package net.sf.jsqlparser.statement;

import net.sf.jsqlparser.statement.create.textsearch.CreateTextSearchConfiguration;
import net.sf.jsqlparser.statement.alter.AlterTextSearchConfiguration;
import net.sf.jsqlparser.statement.alter.AlterPolicy;
import net.sf.jsqlparser.statement.drop.DropPolicy;
import net.sf.jsqlparser.statement.create.statistics.CreateStatistics;
Expand Down Expand Up @@ -733,4 +735,20 @@ default <S> T visit(AlterStatistics statement, S context) {
default void visit(AlterStatistics statement) {
visit(statement, null);
}

default <S> T visit(CreateTextSearchConfiguration statement, S context) {
return null;
}

default void visit(CreateTextSearchConfiguration statement) {
visit(statement, null);
}

default <S> T visit(AlterTextSearchConfiguration statement, S context) {
return null;
}

default void visit(AlterTextSearchConfiguration statement) {
visit(statement, null);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,162 @@
/*-
* #%L
* JSQLParser library
* %%
* Copyright (C) 2004 - 2026 JSQLParser
* %%
* Dual licensed under GNU LGPL 2.1 or Apache License 2.0
* #L%
*/
package net.sf.jsqlparser.statement.alter;

import net.sf.jsqlparser.statement.Statement;
import net.sf.jsqlparser.statement.StatementVisitor;
import java.util.ArrayList;
import java.util.List;

public class AlterTextSearchConfiguration implements Statement {
public enum Action {
ADD_MAPPING, ALTER_MAPPING, REPLACE_MAPPING, DROP_MAPPING, RENAME, OWNER, SET_SCHEMA
}

private String name;
private Action action;
private List<String> tokenTypes = new ArrayList<>();
private List<String> dictionaries = new ArrayList<>();
private String oldDictionary;
private String newDictionary;
private boolean ifExists;
private String newName;
private String owner;
private String schemaName;

public String getName() {
return name;
}

public void setName(String value) {
name = value;
}

public Action getAction() {
return action;
}

public void setAction(Action value) {
action = value;
}

public List<String> getTokenTypes() {
return tokenTypes;
}

public void setTokenTypes(List<String> value) {
tokenTypes = value;
}

public List<String> getDictionaries() {
return dictionaries;
}

public void setDictionaries(List<String> value) {
dictionaries = value;
}

public String getOldDictionary() {
return oldDictionary;
}

public void setOldDictionary(String value) {
oldDictionary = value;
}

public String getNewDictionary() {
return newDictionary;
}

public void setNewDictionary(String value) {
newDictionary = value;
}

public boolean isIfExists() {
return ifExists;
}

public void setIfExists(boolean value) {
ifExists = value;
}

public String getNewName() {
return newName;
}

public void setNewName(String value) {
newName = value;
}

public String getOwner() {
return owner;
}

public void setOwner(String value) {
owner = value;
}

public String getSchemaName() {
return schemaName;
}

public void setSchemaName(String value) {
schemaName = value;
}

public StringBuilder appendTo(StringBuilder sql) {
sql.append("ALTER TEXT SEARCH CONFIGURATION ").append(name);
switch (action) {
case ADD_MAPPING:
case ALTER_MAPPING:
sql.append(
action == Action.ADD_MAPPING ? " ADD MAPPING FOR " : " ALTER MAPPING FOR ")
.append(String.join(", ", tokenTypes)).append(" WITH ")
.append(String.join(", ", dictionaries));
break;
case REPLACE_MAPPING:
sql.append(" ALTER MAPPING");
if (!tokenTypes.isEmpty()) {
sql.append(" FOR ").append(String.join(", ", tokenTypes));
}
sql.append(" REPLACE ").append(oldDictionary).append(" WITH ")
.append(newDictionary);
break;
case DROP_MAPPING:
sql.append(" DROP MAPPING");
if (ifExists) {
sql.append(" IF EXISTS");
}
sql.append(" FOR ").append(String.join(", ", tokenTypes));
break;
case RENAME:
sql.append(" RENAME TO ").append(newName);
break;
case OWNER:
sql.append(" OWNER TO ").append(owner);
break;
case SET_SCHEMA:
sql.append(" SET SCHEMA ").append(schemaName);
break;
default:
throw new IllegalStateException("Unknown text-search action: " + action);
}
return sql;
}

@Override
public String toString() {
return appendTo(new StringBuilder()).toString();
}

@Override
public <T, S> T accept(StatementVisitor<T> visitor, S context) {
return visitor.visit(this, context);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
/*-
* #%L
* JSQLParser library
* %%
* Copyright (C) 2004 - 2026 JSQLParser
* %%
* Dual licensed under GNU LGPL 2.1 or Apache License 2.0
* #L%
*/
package net.sf.jsqlparser.statement.create.textsearch;

import net.sf.jsqlparser.statement.Statement;
import net.sf.jsqlparser.statement.StatementVisitor;

public class CreateTextSearchConfiguration implements Statement {
public enum SourceKind {
PARSER, COPY
}

private String name;
private SourceKind sourceKind;
private String sourceName;

public String getName() {
return name;
}

public void setName(String value) {
name = value;
}

public SourceKind getSourceKind() {
return sourceKind;
}

public void setSourceKind(SourceKind value) {
sourceKind = value;
}

public String getSourceName() {
return sourceName;
}

public void setSourceName(String value) {
sourceName = value;
}

public StringBuilder appendTo(StringBuilder sql) {
return sql.append("CREATE TEXT SEARCH CONFIGURATION ").append(name)
.append(" (").append(sourceKind).append(" = ").append(sourceName).append(')');
}

@Override
public String toString() {
return appendTo(new StringBuilder()).toString();
}

@Override
public <T, S> T accept(StatementVisitor<T> visitor, S context) {
return visitor.visit(this, context);
}
}
12 changes: 12 additions & 0 deletions src/main/java/net/sf/jsqlparser/util/TablesNamesFinder.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@
*/
package net.sf.jsqlparser.util;

import net.sf.jsqlparser.statement.create.textsearch.CreateTextSearchConfiguration;
import net.sf.jsqlparser.statement.alter.AlterTextSearchConfiguration;
import net.sf.jsqlparser.statement.alter.AlterPolicy;
import net.sf.jsqlparser.statement.drop.DropPolicy;
import net.sf.jsqlparser.statement.create.statistics.CreateStatistics;
Expand Down Expand Up @@ -2968,4 +2970,14 @@ public <S> Void visit(CreateStatistics statement, S context) {
public <S> Void visit(AlterStatistics statement, S context) {
return null;
}

@Override
public <S> Void visit(CreateTextSearchConfiguration statement, S context) {
return null;
}

@Override
public <S> Void visit(AlterTextSearchConfiguration statement, S context) {
return null;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@
*/
package net.sf.jsqlparser.util.deparser;

import net.sf.jsqlparser.statement.create.textsearch.CreateTextSearchConfiguration;
import net.sf.jsqlparser.statement.alter.AlterTextSearchConfiguration;
import net.sf.jsqlparser.statement.alter.AlterPolicy;
import net.sf.jsqlparser.statement.drop.DropPolicy;
import net.sf.jsqlparser.statement.create.statistics.CreateStatistics;
Expand Down Expand Up @@ -853,4 +855,14 @@ public <S> StringBuilder visit(CreateStatistics statement, S context) {
public <S> StringBuilder visit(AlterStatistics statement, S context) {
return statement.appendTo(builder);
}

@Override
public <S> StringBuilder visit(CreateTextSearchConfiguration statement, S context) {
return statement.appendTo(builder);
}

@Override
public <S> StringBuilder visit(AlterTextSearchConfiguration statement, S context) {
return statement.appendTo(builder);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,7 @@ public class FeaturesAllowed implements FeatureSetValidation, ModifyableFeatureS
* all "CREATE" {@link Feature}'s
*/
public static final FeaturesAllowed CREATE = new FeaturesAllowed("CREATE", Feature.createIndex,
Feature.createTextSearchConfiguration,
Feature.createSchema, Feature.createSequence, Feature.createTable,
Feature.createTableUnlogged,
Feature.createTableCreateOptionStrings, Feature.createTableTableOptionStrings,
Expand All @@ -113,6 +114,7 @@ public class FeaturesAllowed implements FeatureSetValidation, ModifyableFeatureS
*/
public static final FeaturesAllowed ALTER =
new FeaturesAllowed("ALTER", Feature.alterTable, Feature.alterSequence,
Feature.alterTextSearchConfiguration,
Feature.alterView, Feature.alterIndex, Feature.alterSchema)
.unmodifyable();
/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,7 @@ public enum PostgresqlVersion implements Version {

// https://www.postgresql.org/docs/current/sql-createsequence.html
Feature.createSequence,
Feature.createTextSearchConfiguration, Feature.alterTextSearchConfiguration,
Feature.createPublication, Feature.alterPublication,
Feature.createSubscription, Feature.alterSubscription,
Feature.createType, Feature.alterType,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@
*/
package net.sf.jsqlparser.util.validation.validator;

import net.sf.jsqlparser.statement.create.textsearch.CreateTextSearchConfiguration;
import net.sf.jsqlparser.statement.alter.AlterTextSearchConfiguration;
import net.sf.jsqlparser.statement.alter.schema.AlterSchema;
import net.sf.jsqlparser.statement.oracle.OracleBlock;
import net.sf.jsqlparser.statement.oracle.OracleAssignment;
Expand Down Expand Up @@ -1024,4 +1026,16 @@ public <S> Void visit(OracleNullStatement statement, S context) {
return null;
}


@Override
public <S> Void visit(CreateTextSearchConfiguration statement, S context) {
validateFeature(Feature.createTextSearchConfiguration);
return null;
}

@Override
public <S> Void visit(AlterTextSearchConfiguration statement, S context) {
validateFeature(Feature.alterTextSearchConfiguration);
return null;
}
}
Loading
Loading