From 91242006f5601b9bb260371f3c69c1246625b008 Mon Sep 17 00:00:00 2001 From: wenshao Date: Tue, 23 Jan 2018 10:46:48 +0800 Subject: [PATCH] bug fixed for column resolve. for issue #2264 --- .../druid/sql/visitor/SchemaStatVisitor.java | 8 ++++ .../OracleJoinResolveTest_2_join.java | 44 +++++++++++++++++++ 2 files changed, 52 insertions(+) create mode 100644 src/test/java/com/alibaba/druid/bvt/sql/repository/OracleJoinResolveTest_2_join.java 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 870ce40550..e086ff599c 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/SchemaStatVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/SchemaStatVisitor.java @@ -73,6 +73,14 @@ public class SchemaStatVisitor extends SQLASTVisitorAdapter { this.dbType = dbType; } + public SchemaRepository getRepository() { + return repository; + } + + public void setRepository(SchemaRepository repository) { + this.repository = repository; + } + public SchemaStatVisitor(List parameters){ this((String) null, parameters); } diff --git a/src/test/java/com/alibaba/druid/bvt/sql/repository/OracleJoinResolveTest_2_join.java b/src/test/java/com/alibaba/druid/bvt/sql/repository/OracleJoinResolveTest_2_join.java new file mode 100644 index 0000000000..fa4e1057e8 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/repository/OracleJoinResolveTest_2_join.java @@ -0,0 +1,44 @@ +package com.alibaba.druid.bvt.sql.repository; + +import com.alibaba.druid.sql.SQLUtils; +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.repository.SchemaRepository; +import com.alibaba.druid.sql.visitor.SchemaStatVisitor; +import com.alibaba.druid.util.JdbcConstants; +import junit.framework.TestCase; + +import java.util.List; + +/** + * Created by wenshao on 03/08/2017. + */ +public class OracleJoinResolveTest_2_join extends TestCase { + protected SchemaRepository repository = new SchemaRepository(JdbcConstants.ORACLE); + + protected void setUp() throws Exception { + repository.console("create table t_user (uid number(20, 0), gid number(20, 0), name varchar2(20))"); + repository.console("create table t_group (id number(20, 0), name varchar2(20))"); + } + + public void test_for_issue() throws Exception { + + String sql = "select a.* from t_user a inner join t_group b where a.uid = id"; + assertEquals("SELECT a.uid, a.gid, a.name, b.id, b.name\n" + + "FROM t_user a\n" + + "\tINNER JOIN t_group b\n" + + "WHERE a.uid = b.id" + , repository.resolve("select * from t_user a inner join t_group b where a.uid = id")); + + List statementList = SQLUtils.parseStatements(sql, JdbcConstants.ORACLE); + SchemaStatVisitor schemaStatVisitor = SQLUtils.createSchemaStatVisitor(JdbcConstants.ORACLE); + schemaStatVisitor.setRepository(repository); + + for (SQLStatement stmt : statementList) { + stmt.accept(schemaStatVisitor); + } + + assertTrue(schemaStatVisitor.containsColumn("t_user", "*")); + assertTrue(schemaStatVisitor.containsColumn("t_user", "uid")); + assertTrue(schemaStatVisitor.containsColumn("t_group", "id")); + } +}