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
4 changes: 4 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 @@ -559,6 +559,10 @@ public enum Feature {
* @see CreateSequence
*/
createSequence,
/**
* Structured type, domain and extension statements.
*/
createType, alterType, createDomain, alterDomain, createExtension, alterExtension,
/**
* SQL "CREATE SYNONYM" statement is allowed
*
Expand Down
115 changes: 115 additions & 0 deletions src/main/java/net/sf/jsqlparser/statement/RoutineReference.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
/*-
* #%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;

import java.util.List;
import java.util.stream.Collectors;
import net.sf.jsqlparser.statement.create.table.ColDataType;
import java.io.Serializable;

public class RoutineReference implements Serializable {
private String name;
private List<Argument> arguments;
private boolean allArguments;
private List<Argument> orderByArguments;

public String getName() {
return name;
}

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

public List<Argument> getArguments() {
return arguments;
}

public void setArguments(List<Argument> arguments) {
this.arguments = arguments;
}

public boolean isAllArguments() {
return allArguments;
}

public void setAllArguments(boolean allArguments) {
this.allArguments = allArguments;
}

public List<Argument> getOrderByArguments() {
return orderByArguments;
}

public void setOrderByArguments(List<Argument> orderByArguments) {
this.orderByArguments = orderByArguments;
}

/** A signature argument is a data type, not an invocation expression. */
public static class Argument implements Serializable {
public enum Mode {
IN, OUT, INOUT, VARIADIC
}

private Mode mode;
private String name;
private ColDataType dataType;

public Mode getMode() {
return mode;
}

public void setMode(Mode mode) {
this.mode = mode;
}

public String getName() {
return name;
}

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

public ColDataType getDataType() {
return dataType;
}

public void setDataType(ColDataType dataType) {
this.dataType = dataType;
}

@Override
public String toString() {
return (mode == null ? "" : mode + " ") + (name == null ? "" : name + " ") + dataType;
}
}

@Override
public String toString() {
if (arguments == null && !allArguments && orderByArguments == null) {
return name;
}
StringBuilder sql = new StringBuilder(name).append('(');
if (allArguments) {
sql.append('*');
} else if (arguments != null) {
sql.append(arguments.stream().map(Object::toString).collect(Collectors.joining(", ")));
}
if (orderByArguments != null) {
if (arguments != null && !arguments.isEmpty()) {
sql.append(' ');
}
sql.append("ORDER BY ").append(orderByArguments.stream().map(Object::toString)
.collect(Collectors.joining(", ")));
}
return sql.append(')').toString();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,13 @@
*/
package net.sf.jsqlparser.statement;

import net.sf.jsqlparser.statement.create.type.CreateType;
import net.sf.jsqlparser.statement.alter.AlterType;
import net.sf.jsqlparser.statement.create.domain.CreateDomain;
import net.sf.jsqlparser.statement.alter.AlterDomain;
import net.sf.jsqlparser.statement.create.extension.CreateExtension;
import net.sf.jsqlparser.statement.alter.AlterExtension;

import net.sf.jsqlparser.JSQLParserException;
import net.sf.jsqlparser.expression.Expression;
import net.sf.jsqlparser.expression.ExpressionVisitor;
Expand Down Expand Up @@ -846,4 +853,46 @@ public <S> Void visit(TableFunction tableFunction, S context) {
return super.visit(tableFunction, context);
}
}

@Override
public <S> Void visit(CreateType statement, S context) {
analysis.claimTopLevel();
analysis.certain(StmtFeature.MODIFIES_SCHEMA);
return null;
}

@Override
public <S> Void visit(AlterType statement, S context) {
analysis.claimTopLevel();
analysis.certain(StmtFeature.MODIFIES_SCHEMA);
return null;
}

@Override
public <S> Void visit(CreateDomain statement, S context) {
analysis.claimTopLevel();
analysis.certain(StmtFeature.MODIFIES_SCHEMA);
return null;
}

@Override
public <S> Void visit(AlterDomain statement, S context) {
analysis.claimTopLevel();
analysis.certain(StmtFeature.MODIFIES_SCHEMA);
return null;
}

@Override
public <S> Void visit(CreateExtension statement, S context) {
analysis.claimTopLevel();
analysis.certain(StmtFeature.MODIFIES_SCHEMA);
return null;
}

@Override
public <S> Void visit(AlterExtension statement, S context) {
analysis.claimTopLevel();
analysis.certain(StmtFeature.MODIFIES_SCHEMA);
return null;
}
}
54 changes: 54 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,13 @@
*/
package net.sf.jsqlparser.statement;

import net.sf.jsqlparser.statement.create.type.CreateType;
import net.sf.jsqlparser.statement.alter.AlterType;
import net.sf.jsqlparser.statement.create.domain.CreateDomain;
import net.sf.jsqlparser.statement.alter.AlterDomain;
import net.sf.jsqlparser.statement.create.extension.CreateExtension;
import net.sf.jsqlparser.statement.alter.AlterExtension;

import net.sf.jsqlparser.statement.alter.Alter;
import net.sf.jsqlparser.statement.alter.AlterSession;
import net.sf.jsqlparser.statement.alter.AlterSystemStatement;
Expand Down Expand Up @@ -393,4 +400,51 @@ default void visit(CreatePolicy createPolicy) {
this.visit(createPolicy, null);
}

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

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

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

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

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

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

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

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

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

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

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

default void visit(AlterExtension statement) {
visit(statement, null);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,17 @@
*/
package net.sf.jsqlparser.statement;

import net.sf.jsqlparser.statement.create.type.CreateType;
import net.sf.jsqlparser.statement.alter.AlterType;
import net.sf.jsqlparser.statement.create.domain.CreateDomain;
import net.sf.jsqlparser.statement.alter.AlterDomain;
import net.sf.jsqlparser.statement.create.extension.CreateExtension;
import net.sf.jsqlparser.statement.alter.AlterExtension;

import net.sf.jsqlparser.expression.ExpressionVisitor;
import net.sf.jsqlparser.expression.ExpressionVisitorAdapter;
import net.sf.jsqlparser.schema.Column;
import net.sf.jsqlparser.schema.Table;
import net.sf.jsqlparser.schema.Partition;
import net.sf.jsqlparser.statement.alter.Alter;
import net.sf.jsqlparser.statement.alter.AlterExpression;
Expand Down Expand Up @@ -596,4 +604,56 @@ public <S> T visit(Import imprt, S context) {
public <S> T visit(Export export, S context) {
return null;
}

@Override
public <S> T visit(CreateType statement, S context) {

return null;
}

@Override
public <S> T visit(AlterType statement, S context) {

return null;
}

@Override
public <S> T visit(CreateDomain statement, S context) {
if (statement.getDefaultExpression() != null) {
statement.getDefaultExpression().accept(expressionVisitor, context);
}
statement.getConstraints().forEach(constraint -> {
if (constraint.getExpression() != null) {
constraint.getExpression().accept(expressionVisitor, context);
}
});
return null;
}

@Override
public <S> T visit(AlterDomain statement, S context) {
if (statement.getDefaultExpression() != null) {
statement.getDefaultExpression().accept(expressionVisitor, context);
}
if (statement.getConstraint() != null
&& statement.getConstraint().getExpression() != null) {
statement.getConstraint().getExpression().accept(expressionVisitor, context);
}
return null;
}

@Override
public <S> T visit(CreateExtension statement, S context) {

return null;
}

@Override
public <S> T visit(AlterExtension statement, S context) {
if (statement.getMember() != null && statement.getMember().isTable()) {
new Table(statement.getMember().getName())
.accept(fromItemVisitor, context);
}
return null;
}
}
Loading
Loading