Skip to content
Merged
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
17 changes: 17 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.alter.AlterRelation;
import net.sf.jsqlparser.statement.alter.AlterTablespaceMove;
import net.sf.jsqlparser.statement.alter.database.AlterDatabase;
import net.sf.jsqlparser.statement.alter.schema.AlterSchema;
import net.sf.jsqlparser.statement.oracle.OracleBlock;
Expand Down Expand Up @@ -672,6 +674,14 @@ default void visit(OracleNullStatement statement) {
visit(statement, null);
}

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

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

default <S> T visit(AlterDatabase statement, S context) {
return null;
}
Expand All @@ -680,4 +690,11 @@ default void visit(AlterDatabase statement) {
visit(statement, null);
}

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

default void visit(AlterTablespaceMove statement) {
visit(statement, null);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
import java.util.Locale;

public enum AlterOperation {
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;
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;

public static AlterOperation from(String operation) {
return Enum.valueOf(AlterOperation.class, operation.toUpperCase(Locale.ROOT));
Expand Down
84 changes: 84 additions & 0 deletions src/main/java/net/sf/jsqlparser/statement/alter/AlterRelation.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
/*-
* #%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 java.util.ArrayList;
import java.util.List;
import java.util.function.Consumer;
import net.sf.jsqlparser.expression.Expression;
import net.sf.jsqlparser.schema.Table;
import net.sf.jsqlparser.statement.Statement;
import net.sf.jsqlparser.statement.StatementVisitor;

/** PostgreSQL ALTER INDEX, ALTER VIEW properties and ALTER MATERIALIZED VIEW. */
public class AlterRelation implements Statement {
public enum ObjectType {
INDEX, VIEW, MATERIALIZED_VIEW
}

private ObjectType objectType;
private Table relation;
private boolean ifExists;
private final List<RelationAlterAction> actions = new ArrayList<>();

public ObjectType getObjectType() {
return objectType;
}

public void setObjectType(ObjectType objectType) {
this.objectType = objectType;
}

public Table getRelation() {
return relation;
}

public void setRelation(Table relation) {
this.relation = relation;
}

public boolean isIfExists() {
return ifExists;
}

public void setIfExists(boolean ifExists) {
this.ifExists = ifExists;
}

public List<RelationAlterAction> getActions() {
return actions;
}

public StringBuilder appendTo(StringBuilder builder, Consumer<Expression> expressionPrinter) {
builder.append("ALTER ").append(objectType.name().replace('_', ' ')).append(' ');
if (ifExists) {
builder.append("IF EXISTS ");
}
builder.append(relation).append(' ');
for (int i = 0; i < actions.size(); i++) {
if (i > 0) {
builder.append(", ");
}
actions.get(i).appendTo(builder, expressionPrinter);
}
return builder;
}

@Override
public String toString() {
StringBuilder builder = new StringBuilder();
return appendTo(builder, builder::append).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,92 @@
/*-
* #%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 java.util.ArrayList;
import java.util.List;
import net.sf.jsqlparser.statement.Statement;
import net.sf.jsqlparser.statement.StatementVisitor;
import net.sf.jsqlparser.statement.select.PlainSelect;

/** Moves all matching relations from one PostgreSQL tablespace to another. */
public class AlterTablespaceMove implements Statement {
public enum ObjectType {
TABLE, INDEX, MATERIALIZED_VIEW
}

private ObjectType objectType;
private String sourceTablespace;
private String targetTablespace;
private List<String> owners = new ArrayList<>();
private boolean noWait;

public ObjectType getObjectType() {
return objectType;
}

public void setObjectType(ObjectType objectType) {
this.objectType = objectType;
}

public String getSourceTablespace() {
return sourceTablespace;
}

public void setSourceTablespace(String sourceTablespace) {
this.sourceTablespace = sourceTablespace;
}

public String getTargetTablespace() {
return targetTablespace;
}

public void setTargetTablespace(String targetTablespace) {
this.targetTablespace = targetTablespace;
}

public List<String> getOwners() {
return owners;
}

public void setOwners(List<String> owners) {
this.owners = owners;
}

public boolean isNoWait() {
return noWait;
}

public void setNoWait(boolean noWait) {
this.noWait = noWait;
}

public StringBuilder appendTo(StringBuilder builder) {
builder.append("ALTER ").append(objectType.name().replace('_', ' '))
.append(" ALL IN TABLESPACE ").append(sourceTablespace);
if (owners != null && !owners.isEmpty()) {
builder.append(" OWNED BY ").append(PlainSelect.getStringList(owners));
}
builder.append(" SET TABLESPACE ").append(targetTablespace);
if (noWait) {
builder.append(" NOWAIT");
}
return builder;
}

@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);
}
}
Loading
Loading