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
5 changes: 5 additions & 0 deletions .codacy.yml
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
---
engines:
tsqllint:
exclude_paths:
# These fixtures use PostgreSQL grammar, not Transact-SQL.
- "src/test/resources/postgresql/**"
exclude_paths:
- "site/**"
Original file line number Diff line number Diff line change
Expand Up @@ -637,7 +637,7 @@ public enum Feature {
/**
* @see Grant
*/
grant,
grant, revoke, createRole, alterRole, alterDefaultPrivileges,
/**
* @see Function
*/
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,12 @@
*/
package net.sf.jsqlparser.statement;

import net.sf.jsqlparser.statement.role.CreateRole;
import net.sf.jsqlparser.statement.role.AlterRole;
import net.sf.jsqlparser.statement.grant.Revoke;
import net.sf.jsqlparser.statement.grant.AlterDefaultPrivileges;
import net.sf.jsqlparser.statement.create.trigger.CreateTrigger;

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

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

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

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

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

@Override
public <S> Void visit(CreateTrigger statement, S context) {
return schemaOnly();
}
}
37 changes: 37 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,11 @@
*/
package net.sf.jsqlparser.statement;

import net.sf.jsqlparser.statement.role.CreateRole;
import net.sf.jsqlparser.statement.role.AlterRole;
import net.sf.jsqlparser.statement.grant.Revoke;
import net.sf.jsqlparser.statement.grant.AlterDefaultPrivileges;

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 +398,36 @@ default void visit(CreatePolicy createPolicy) {
this.visit(createPolicy, null);
}


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

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

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

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

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

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

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

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

import net.sf.jsqlparser.statement.role.CreateRole;
import net.sf.jsqlparser.statement.role.AlterRole;
import net.sf.jsqlparser.statement.role.RoleOption;
import net.sf.jsqlparser.statement.grant.Revoke;
import net.sf.jsqlparser.statement.grant.AlterDefaultPrivileges;

import net.sf.jsqlparser.expression.ExpressionVisitor;
import net.sf.jsqlparser.expression.ExpressionVisitorAdapter;
import net.sf.jsqlparser.schema.Column;
Expand Down Expand Up @@ -351,6 +357,11 @@ public <S> T visit(CreateTable createTable, S context) {

@Override
public <S> T visit(CreateTrigger createTrigger, S context) {
createTrigger.visit(t -> t.accept(fromItemVisitor, context),
e -> e.accept(expressionVisitor, context));
if (createTrigger.getBody() != null) {
createTrigger.getBody().accept(this, context);
}
return null;
}

Expand Down Expand Up @@ -495,6 +506,8 @@ public <S> T visit(DeclareStatement declareStatement, S context) {

@Override
public <S> T visit(Grant grant, S context) {
grant.getClause().visit(t -> t.accept(fromItemVisitor, context),
e -> e.accept(expressionVisitor, context));
return null;
}

Expand Down Expand Up @@ -596,4 +609,45 @@ public <S> T visit(Import imprt, S context) {
public <S> T visit(Export export, S context) {
return null;
}

@Override
public <S> T visit(CreateRole statement, S context) {
for (RoleOption option : statement.getOptions()) {
if (option.getValue() != null) {
option.getValue().accept(expressionVisitor, context);
}
}
return null;
}

@Override
public <S> T visit(AlterRole statement, S context) {
for (RoleOption option : statement.getOptions()) {
if (option.getValue() != null) {
option.getValue().accept(expressionVisitor, context);
}
}
if (statement.getValues() != null) {
statement.getValues().forEach(e -> e.accept(expressionVisitor, context));
}
return null;
}

@Override
public <S> T visit(Revoke statement, S context) {
statement.getClause().visit(t -> t.accept(fromItemVisitor, context),
e -> e.accept(expressionVisitor, context));
return null;
}

@Override
public <S> T visit(AlterDefaultPrivileges statement, S context) {
if (statement.getGrant() != null) {
statement.getGrant().accept(this, context);
}
if (statement.getRevoke() != null) {
statement.getRevoke().accept(this, context);
}
return null;
}
}
Loading
Loading