Skip to content

Commit

Permalink
refactor
Browse files Browse the repository at this point in the history
  • Loading branch information
wenshao committed Dec 19, 2024
1 parent 324628c commit fd799af
Show file tree
Hide file tree
Showing 7 changed files with 89 additions and 53 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import com.alibaba.druid.sql.ast.SQLExpr;
import com.alibaba.druid.sql.ast.SQLStatementImpl;
import com.alibaba.druid.sql.ast.expr.SQLCharExpr;
import com.alibaba.druid.sql.visitor.SQLASTVisitor;

import java.util.ArrayList;
Expand All @@ -23,6 +24,10 @@ public void setDynamicSql(SQLExpr x) {
this.dynamicSql = x;
}

public void setDynamicSql(String dynamicSql) {
this.setDynamicSql(new SQLCharExpr(dynamicSql));
}

public List<SQLExpr> getInto() {
return into;
}
Expand All @@ -31,4 +36,23 @@ protected void acceptChild(SQLASTVisitor v) {
acceptChild(v, dynamicSql);
acceptChild(v, into);
}

protected void cloneTo(SQLExecuteImmediateStatement x) {
super.cloneTo(x);
if (dynamicSql != null) {
x.setDynamicSql(dynamicSql.clone());
}
for (SQLExpr e : into) {
SQLExpr e2 = e.clone();
e2.setParent(x);
x.into.add(e2);
}
}

protected void accept0(SQLASTVisitor v) {
if (v.visit(this)) {
acceptChild(v);
}
v.endVisit(this);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,10 @@ public void addItem(SQLExpr item) {
this.items.add(item);
}

public void setItem(int i, SQLExpr item) {
this.items.set(i, item);
}

public SQLExpr getOffset() {
return offset;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,4 +46,20 @@ protected void acceptChild(SQLASTVisitor v) {
super.acceptChild(v);
acceptChild(v, using);
}

protected BigQueryExecuteImmediateStatement cloneTo(BigQueryExecuteImmediateStatement x) {
super.cloneTo(x);
for (SQLAliasedExpr item : using) {
SQLAliasedExpr item2 = item.clone();
item2.setParent(x);
x.using.add(item2);
}
return x;
}

public BigQueryExecuteImmediateStatement clone() {
BigQueryExecuteImmediateStatement x = new BigQueryExecuteImmediateStatement();
cloneTo(x);
return x;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,5 +19,5 @@
import com.alibaba.druid.sql.dialect.oracle.visitor.OracleASTVisitor;

public interface OracleSQLObject extends SQLObject {
void accept0(OracleASTVisitor visitor);
void accept0(OracleASTVisitor v);
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,19 +17,16 @@

import com.alibaba.druid.sql.ast.SQLArgument;
import com.alibaba.druid.sql.ast.SQLExpr;
import com.alibaba.druid.sql.ast.expr.SQLCharExpr;
import com.alibaba.druid.sql.ast.statement.SQLExecuteImmediateStatement;
import com.alibaba.druid.sql.dialect.oracle.visitor.OracleASTVisitor;
import com.alibaba.druid.sql.visitor.SQLASTVisitor;

import java.util.ArrayList;
import java.util.List;

public class OracleExecuteImmediateStatement extends OracleStatementImpl {
private SQLExpr dynamicSql;

public class OracleExecuteImmediateStatement extends SQLExecuteImmediateStatement implements OracleStatement {
private final List<SQLArgument> arguments = new ArrayList<SQLArgument>();

private final List<SQLExpr> into = new ArrayList<SQLExpr>();

private final List<SQLExpr> returnInto = new ArrayList<SQLExpr>();

public OracleExecuteImmediateStatement() {
Expand All @@ -40,64 +37,49 @@ public OracleExecuteImmediateStatement(String dynamicSql) {
}

@Override
public void accept0(OracleASTVisitor visitor) {
if (visitor.visit(this)) {
// acceptChild(visitor, label);
public void accept0(SQLASTVisitor v) {
if (v instanceof OracleASTVisitor) {
accept0((OracleASTVisitor) v);
return;
}
visitor.endVisit(this);
super.accept0(v);
}

public OracleExecuteImmediateStatement clone() {
OracleExecuteImmediateStatement x = new OracleExecuteImmediateStatement();

if (dynamicSql != null) {
x.setDynamicSql(dynamicSql.clone());
@Override
public void accept0(OracleASTVisitor v) {
if (v.visit(this)) {
acceptChild(v);
}
v.endVisit(this);
}

protected OracleExecuteImmediateStatement cloneTo(OracleExecuteImmediateStatement x) {
super.cloneTo(x);

for (SQLArgument arg : arguments) {
SQLArgument a2 = arg.clone();
a2.setParent(x);
x.arguments.add(a2);
}

for (SQLExpr e : into) {
SQLExpr e2 = e.clone();
e2.setParent(x);
x.into.add(e2);
}

for (SQLExpr e : returnInto) {
SQLExpr e2 = e.clone();
e2.setParent(x);
x.returnInto.add(e2);
}

return x;
}

public SQLExpr getDynamicSql() {
return dynamicSql;
}

public void setDynamicSql(SQLExpr dynamicSql) {
if (dynamicSql != null) {
dynamicSql.setParent(this);
}
this.dynamicSql = dynamicSql;
}

public void setDynamicSql(String dynamicSql) {
this.setDynamicSql(new SQLCharExpr(dynamicSql));
public OracleExecuteImmediateStatement clone() {
OracleExecuteImmediateStatement x = new OracleExecuteImmediateStatement();
cloneTo(x);
return x;
}

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

public List<SQLExpr> getInto() {
return into;
}

public List<SQLExpr> getReturnInto() {
return returnInto;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -854,6 +854,7 @@ public SQLStatement parsePipeRow() {
return stmt;
}

@Override
public SQLStatement parseExecute() {
acceptIdentifier("EXECUTE");

Expand Down
35 changes: 22 additions & 13 deletions core/src/main/java/com/alibaba/druid/sql/visitor/SQLASTVisitor.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,11 +20,16 @@
import com.alibaba.druid.sql.ast.*;
import com.alibaba.druid.sql.ast.expr.*;
import com.alibaba.druid.sql.ast.statement.*;
import com.alibaba.druid.sql.dialect.bigquery.visitor.BigQueryVisitor;
import com.alibaba.druid.sql.dialect.hive.ast.HiveInputOutputFormat;
import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlKillStatement;
import com.alibaba.druid.sql.dialect.mysql.ast.statement.SQLAlterResourceGroupStatement;
import com.alibaba.druid.sql.dialect.mysql.ast.statement.SQLCreateResourceGroupStatement;
import com.alibaba.druid.sql.dialect.mysql.ast.statement.SQLListResourceGroupStatement;
import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor;
import com.alibaba.druid.sql.dialect.odps.visitor.OdpsASTVisitor;
import com.alibaba.druid.sql.dialect.oracle.visitor.OracleASTVisitor;
import com.alibaba.druid.sql.dialect.postgresql.visitor.PGASTVisitor;
import com.alibaba.druid.sql.dialect.starrocks.ast.StarRocksIndexDefinition;
import com.alibaba.druid.sql.dialect.starrocks.ast.statement.StarRocksCreateResourceStatement;
import com.alibaba.druid.sql.template.SQLSelectQueryTemplate;
Expand Down Expand Up @@ -2707,22 +2712,25 @@ default boolean visit(SQLLeaveStatement x) {

default void endVisit(SQLLeaveStatement x) {}

static SQLASTVisitor ofMethodInvoke(Consumer<SQLMethodInvokeExpr> p) {
return new SQLASTVisitor() {
public boolean visit(SQLMethodInvokeExpr x) {
p.accept(x);
return true;
}
default boolean visit(SQLExecuteImmediateStatement x) {
return true;
}

public boolean visit(SQLAggregateExpr x) {
p.accept(x);
return true;
}
};
default void endVisit(SQLExecuteImmediateStatement x) {}

static SQLASTVisitor ofMethodInvoke(Consumer<SQLMethodInvokeExpr> p) {
return ofMethodInvoke(null, p);
}

static SQLASTVisitor ofMethodInvoke(Predicate<String> filter, Consumer<SQLMethodInvokeExpr> p) {
return new SQLASTVisitor() {
class MethodInvokeVisitor implements SQLASTVisitor, BigQueryVisitor, OdpsASTVisitor, OracleASTVisitor, MySqlASTVisitor, PGASTVisitor {
final Predicate<String> filter;
final Consumer<SQLMethodInvokeExpr> p;
public MethodInvokeVisitor(Predicate<String> filter, Consumer<SQLMethodInvokeExpr> p) {
this.filter = filter;
this.p = p;
}

public boolean visit(SQLMethodInvokeExpr x) {
if (filter == null || filter.test(x.getMethodName())) {
p.accept(x);
Expand All @@ -2736,7 +2744,8 @@ public boolean visit(SQLAggregateExpr x) {
}
return true;
}
};
}
return new MethodInvokeVisitor(filter, p);
}

static SQLASTVisitor ofAggregate(Consumer<SQLAggregateExpr> p) {
Expand Down

0 comments on commit fd799af

Please sign in to comment.