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
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -165,6 +165,7 @@ and missing syntax gets added on demand — [open an issue](https://github.com/J
| **MySQL utility statements** | `EXPLAIN`/`DESCRIBE [ANALYZE] FORMAT = …` · `EXPLAIN FOR CONNECTION` · `DESCRIBE t col` · `PREPARE … FROM` · `EXECUTE … USING` · `DROP PREPARE` · `DO` |
| **PostgreSQL administration** | `CREATE`/`ALTER EVENT TRIGGER` · `REINDEX` · `SECURITY LABEL` |
| **PostgreSQL types and rules** | `CREATE TYPE` (shell, composite, enum, range and base types) · `ALTER TYPE` · `CREATE RULE` · `ALTER RULE` |
| **PostgreSQL casts, transforms and conversions** | `CREATE CAST` · `DROP CAST` · `CREATE [OR REPLACE] TRANSFORM` · `DROP TRANSFORM` · `CREATE [DEFAULT] CONVERSION` · `ALTER CONVERSION` |
| **PostgreSQL operators and aggregates** | `CREATE`/`ALTER OPERATOR` · `CREATE`/`ALTER OPERATOR CLASS` · `CREATE`/`ALTER OPERATOR FAMILY` · `CREATE`/`ALTER AGGREGATE` |
| **Informix constraints** | `ALTER TABLE … ADD CONSTRAINT` with trailing constraint names for primary, unique, foreign and check constraints; enable with `parser.withDialect(Dialect.INFORMIX)` |
| **Salesforce SOQL** | `INCLUDES` · `EXCLUDES` |
Expand Down
24 changes: 24 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 @@ -1036,6 +1036,30 @@ public enum Feature {
* @see net.sf.jsqlparser.statement.alter.AlterRule
*/
alterRule,
/**
* PostgreSQL "CREATE CAST" statement is allowed
*
* @see net.sf.jsqlparser.statement.create.cast.CreateCast
*/
createCast,
/**
* PostgreSQL "CREATE TRANSFORM" statement is allowed
*
* @see net.sf.jsqlparser.statement.create.transform.CreateTransform
*/
createTransform,
/**
* PostgreSQL "CREATE CONVERSION" statement is allowed
*
* @see net.sf.jsqlparser.statement.create.conversion.CreateConversion
*/
createConversion,
/**
* PostgreSQL "ALTER CONVERSION" statement is allowed
*
* @see net.sf.jsqlparser.statement.alter.AlterConversion
*/
alterConversion,
/**
* PostgreSQL "CREATE OPERATOR" statement is allowed
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,10 @@
import net.sf.jsqlparser.statement.alter.AlterOperatorFamily;
import net.sf.jsqlparser.statement.alter.AlterAggregate;
import net.sf.jsqlparser.statement.alter.AlterRule;
import net.sf.jsqlparser.statement.create.cast.CreateCast;
import net.sf.jsqlparser.statement.create.transform.CreateTransform;
import net.sf.jsqlparser.statement.create.conversion.CreateConversion;
import net.sf.jsqlparser.statement.alter.AlterConversion;
import net.sf.jsqlparser.statement.alter.AlterServer;
import net.sf.jsqlparser.statement.alter.AlterSession;
import net.sf.jsqlparser.statement.alter.AlterStatistics;
Expand Down Expand Up @@ -1623,21 +1627,41 @@ public <S> Void visit(AlterRule statement, S context) {
return schemaOnly();
}

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

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

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

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

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

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

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

@Override
public <S> Void visit(CreateAggregate statement, S context) {
return schemaOnly();
Expand Down
36 changes: 36 additions & 0 deletions src/main/java/net/sf/jsqlparser/statement/StatementVisitor.java
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,10 @@
import net.sf.jsqlparser.statement.alter.AlterOperatorFamily;
import net.sf.jsqlparser.statement.alter.AlterAggregate;
import net.sf.jsqlparser.statement.alter.AlterRule;
import net.sf.jsqlparser.statement.create.cast.CreateCast;
import net.sf.jsqlparser.statement.create.transform.CreateTransform;
import net.sf.jsqlparser.statement.create.conversion.CreateConversion;
import net.sf.jsqlparser.statement.alter.AlterConversion;
import net.sf.jsqlparser.statement.alter.AlterRoutine;
import net.sf.jsqlparser.statement.alter.AlterTrigger;
import net.sf.jsqlparser.statement.alter.AlterPolicy;
Expand Down Expand Up @@ -1253,6 +1257,38 @@ default void visit(AlterRule statement) {
visit(statement, null);
}

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

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

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

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

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

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

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

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

default <S> T visit(CreateOperator statement, S context) {
return null;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,10 @@

import net.sf.jsqlparser.statement.alter.AlterRelation;
import net.sf.jsqlparser.statement.alter.AlterRule;
import net.sf.jsqlparser.statement.create.cast.CreateCast;
import net.sf.jsqlparser.statement.create.transform.CreateTransform;
import net.sf.jsqlparser.statement.create.conversion.CreateConversion;
import net.sf.jsqlparser.statement.alter.AlterConversion;
import net.sf.jsqlparser.statement.alter.AlterTablespace;
import net.sf.jsqlparser.statement.alter.AlterPolicy;
import net.sf.jsqlparser.statement.alter.AlterRoutine;
Expand Down Expand Up @@ -1285,4 +1289,24 @@ public <S> T visit(AlterRule statement, S context) {
fromItemVisitor.visitFromItem(statement.getTable(), context);
return null;
}

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

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

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

@Override
public <S> T visit(AlterConversion statement, S context) {
return null;
}
}
130 changes: 130 additions & 0 deletions src/main/java/net/sf/jsqlparser/statement/alter/AlterConversion.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,130 @@
/*-
* #%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.parser.ASTNodeAccessImpl;
import net.sf.jsqlparser.statement.Statement;
import net.sf.jsqlparser.statement.StatementVisitor;

/**
* PostgreSQL
* {@code ALTER CONVERSION name {RENAME TO new_name | OWNER TO role | SET SCHEMA schema}}. Names
* retain SQL identifier quoting.
*/
public class AlterConversion extends ASTNodeAccessImpl implements Statement {
public enum Action {
RENAME, OWNER, SET_SCHEMA
}

private String name;
private Action action;
private String newName;
private String owner;
private String schemaName;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public AlterConversion withName(String name) {
setName(name);
return this;
}

public Action getAction() {
return action;
}

public void setAction(Action action) {
this.action = action;
}

public AlterConversion withAction(Action action) {
setAction(action);
return this;
}

public String getNewName() {
return newName;
}

public void setNewName(String newName) {
this.newName = newName;
}

public AlterConversion withNewName(String newName) {
setNewName(newName);
return this;
}

/**
* The new owner: a role name, {@code CURRENT_ROLE}, {@code CURRENT_USER} or
* {@code SESSION_USER}.
*
* @return the owner of {@code OWNER TO}
*/
public String getOwner() {
return owner;
}

public void setOwner(String owner) {
this.owner = owner;
}

public AlterConversion withOwner(String owner) {
setOwner(owner);
return this;
}

public String getSchemaName() {
return schemaName;
}

public void setSchemaName(String schemaName) {
this.schemaName = schemaName;
}

public AlterConversion withSchemaName(String schemaName) {
setSchemaName(schemaName);
return this;
}

public StringBuilder appendTo(StringBuilder builder) {
builder.append("ALTER CONVERSION ").append(name);
switch (action) {
case RENAME:
builder.append(" RENAME TO ").append(newName);
break;
case OWNER:
builder.append(" OWNER TO ").append(owner);
break;
case SET_SCHEMA:
builder.append(" SET SCHEMA ").append(schemaName);
break;
default:
throw new IllegalStateException("Unknown conversion action: " + action);
}
return builder;
}

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

@Override
public <T, S> T accept(StatementVisitor<T> statementVisitor, S context) {
return statementVisitor.visit(this, context);
}
}
Loading
Loading