From 8b6f351c202bdceda5af8831958b3eb4e213aaf9 Mon Sep 17 00:00:00 2001 From: wenshao Date: Mon, 5 Sep 2016 16:01:01 +0800 Subject: [PATCH] bug fixed for SchemaStatVisitor 'propertyExpr tableName' --- .../mysql/visitor/MySqlSchemaStatVisitor.java | 16 ++++++++++++++-- .../druid/bvt/sql/mysql/MySqlInsertTest_14.java | 5 +++++ 2 files changed, 19 insertions(+), 2 deletions(-) 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 62df154e4b..9892354f35 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 @@ -21,6 +21,7 @@ import com.alibaba.druid.sql.ast.SQLDeclareItem; import com.alibaba.druid.sql.ast.SQLName; import com.alibaba.druid.sql.ast.SQLObject; import com.alibaba.druid.sql.ast.expr.SQLIdentifierExpr; +import com.alibaba.druid.sql.ast.expr.SQLPropertyExpr; import com.alibaba.druid.sql.ast.statement.SQLAlterTableStatement; import com.alibaba.druid.sql.ast.statement.SQLCreateTableStatement; import com.alibaba.druid.sql.ast.statement.SQLExprTableSource; @@ -206,8 +207,19 @@ public class MySqlSchemaStatVisitor extends SchemaStatVisitor implements MySqlAS setAliasMap(); - if (x.getTableName() instanceof SQLIdentifierExpr) { - String ident = ((SQLIdentifierExpr) x.getTableName()).getName(); + SQLName tableName = x.getTableName(); + + String ident = null; + if (tableName instanceof SQLIdentifierExpr) { + ident = ((SQLIdentifierExpr) tableName).getName(); + } else if (tableName instanceof SQLPropertyExpr) { + SQLPropertyExpr propertyExpr = (SQLPropertyExpr) tableName; + if (propertyExpr.getOwner() instanceof SQLIdentifierExpr) { + ident = propertyExpr.toString(); + } + } + + if (ident != null) { setCurrentTable(x, ident); TableStat stat = getTableStat(ident); diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlInsertTest_14.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlInsertTest_14.java index 66a449ca1e..85b1ac781a 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlInsertTest_14.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlInsertTest_14.java @@ -48,6 +48,11 @@ public class MySqlInsertTest_14 extends MysqlTest { MySqlSchemaStatVisitor visitor = new MySqlSchemaStatVisitor(); stmt.accept(visitor); + System.out.println("Tables : " + visitor.getTables()); + System.out.println("fields : " + visitor.getColumns()); + System.out.println("coditions : " + visitor.getConditions()); + System.out.println("relationships : " + visitor.getRelationships()); + String formatSql = "INSERT INTO test.heartbeat (id, ts)\n" + "VALUES (1, UNIX_TIMESTAMP())\n" + "ON DUPLICATE KEY UPDATE ts = UNIX_TIMESTAMP()";