From 3f4bb2b61f3e5c42b67dfed8500ea203f6b9daef Mon Sep 17 00:00:00 2001 From: wenshao Date: Sun, 25 Sep 2016 01:10:19 +0800 Subject: [PATCH] refactor sql parser. --- .../sql/ast/statement/SQLUpdateStatement.java | 9 +++++++++ .../ast/statement/MySqlUpdateStatement.java | 11 +++++------ .../mysql/parser/MySqlSelectParser.java | 2 +- .../mysql/visitor/MySqlSchemaStatVisitor.java | 3 ++- .../oracle/ast/stmt/OracleUpdateStatement.java | 18 ------------------ .../postgresql/ast/stmt/PGUpdateStatement.java | 12 ------------ .../druid/sql/visitor/SchemaStatVisitor.java | 2 ++ 7 files changed, 19 insertions(+), 38 deletions(-) diff --git a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLUpdateStatement.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLUpdateStatement.java index c07b59b416..756d457503 100644 --- a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLUpdateStatement.java +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLUpdateStatement.java @@ -30,6 +30,7 @@ public class SQLUpdateStatement extends SQLStatementImpl { protected SQLTableSource from; protected SQLTableSource tableSource; + protected List returning; public SQLUpdateStatement(){ @@ -82,6 +83,14 @@ public class SQLUpdateStatement extends SQLStatementImpl { item.setParent(this); } + public List getReturning() { + if (returning == null) { + returning = new ArrayList(2); + } + + return returning; + } + public SQLTableSource getFrom() { return from; } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlUpdateStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlUpdateStatement.java index 6109cfb435..1844896a40 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlUpdateStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlUpdateStatement.java @@ -39,8 +39,6 @@ public class MySqlUpdateStatement extends SQLUpdateStatement implements MySqlSta private boolean queryOnPk = false; private SQLExpr targetAffectRow; - private List returning = new ArrayList(); - public MySqlUpdateStatement(){ super(JdbcConstants.MYSQL); } @@ -56,14 +54,15 @@ public class MySqlUpdateStatement extends SQLUpdateStatement implements MySqlSta this.limit = limit; } - public List getReturning() { - return returning; - } +// public List getReturning() { +// return returning; +// } public void addReturning(List returning) { + List thisReturning = this.getReturning(); for (SQLSelectItem item : returning) { item.setParent(this); - this.returning.add(item); + thisReturning.add(item.getExpr()); } } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlSelectParser.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlSelectParser.java index aea311e3be..993b060a72 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlSelectParser.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlSelectParser.java @@ -63,7 +63,7 @@ public class MySqlSelectParser extends SQLSelectParser { } lexer.nextToken(); - + if (lexer.token() == Token.UPDATE) { // taobao returning to urgly syntax updateStmt = this.parseUpdateStatment(); updateStmt.addReturning(queryBlock.getSelectList()); diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlSchemaStatVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlSchemaStatVisitor.java index 9892354f35..96318315b2 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlSchemaStatVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlSchemaStatVisitor.java @@ -18,6 +18,7 @@ package com.alibaba.druid.sql.dialect.mysql.visitor; import java.util.Map; import com.alibaba.druid.sql.ast.SQLDeclareItem; +import com.alibaba.druid.sql.ast.SQLExpr; import com.alibaba.druid.sql.ast.SQLName; import com.alibaba.druid.sql.ast.SQLObject; import com.alibaba.druid.sql.ast.expr.SQLIdentifierExpr; @@ -564,7 +565,7 @@ public class MySqlSchemaStatVisitor extends SchemaStatVisitor implements MySqlAS public boolean visit(MySqlUpdateStatement x) { visit((SQLUpdateStatement) x); - for (SQLSelectItem item : x.getReturning()) { + for (SQLExpr item : x.getReturning()) { item.accept(this); } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleUpdateStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleUpdateStatement.java index 030d2b6cfb..d23cea1769 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleUpdateStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleUpdateStatement.java @@ -30,23 +30,13 @@ public class OracleUpdateStatement extends SQLUpdateStatement implements OracleS private final List hints = new ArrayList(1); private boolean only = false; private String alias; - private SQLExpr where; - private List returning = new ArrayList(); private List returningInto = new ArrayList(); public OracleUpdateStatement(){ super (JdbcConstants.ORACLE); } - public List getReturning() { - return returning; - } - - public void setReturning(List returning) { - this.returning = returning; - } - public List getReturningInto() { return returningInto; } @@ -86,14 +76,6 @@ public class OracleUpdateStatement extends SQLUpdateStatement implements OracleS this.alias = alias; } - public SQLExpr getWhere() { - return this.where; - } - - public void setWhere(SQLExpr where) { - this.where = where; - } - public boolean isOnly() { return this.only; } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/postgresql/ast/stmt/PGUpdateStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/postgresql/ast/stmt/PGUpdateStatement.java index d46b86abc8..19283d278c 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/postgresql/ast/stmt/PGUpdateStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/postgresql/ast/stmt/PGUpdateStatement.java @@ -32,10 +32,6 @@ public class PGUpdateStatement extends SQLUpdateStatement implements PGSQLStatem private PGWithClause with; - private List returning = new ArrayList(2); - - - public PGUpdateStatement(){ super (JdbcConstants.POSTGRESQL); } @@ -48,14 +44,6 @@ public class PGUpdateStatement extends SQLUpdateStatement implements PGSQLStatem this.only = only; } - public List getReturning() { - return returning; - } - - public void setReturning(List returning) { - this.returning = returning; - } - public PGWithClause getWith() { return with; } diff --git a/src/main/java/com/alibaba/druid/sql/visitor/SchemaStatVisitor.java b/src/main/java/com/alibaba/druid/sql/visitor/SchemaStatVisitor.java index 37b0b0cbc3..49ab263d9d 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/SchemaStatVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/SchemaStatVisitor.java @@ -1147,6 +1147,8 @@ public class SchemaStatVisitor extends SQLASTVisitorAdapter { x.getTableSource().accept(this); } + accept(x.getFrom()); + accept(x.getItems()); accept(x.getWhere());