diff --git a/src/main/java/com/alibaba/druid/sql/dialect/teradata/visitor/TeradataASTVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/teradata/visitor/TeradataASTVisitor.java index 34d49ffbed..3fb1d36b69 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/teradata/visitor/TeradataASTVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/teradata/visitor/TeradataASTVisitor.java @@ -17,6 +17,7 @@ package com.alibaba.druid.sql.dialect.teradata.visitor; import com.alibaba.druid.sql.ast.statement.SQLSelect; import com.alibaba.druid.sql.ast.statement.SQLSelectQueryBlock; +import com.alibaba.druid.sql.ast.statement.SQLSubqueryTableSource; import com.alibaba.druid.sql.dialect.teradata.ast.expr.TeradataAnalytic; import com.alibaba.druid.sql.dialect.teradata.ast.expr.TeradataAnalyticWindowing; import com.alibaba.druid.sql.dialect.teradata.ast.expr.TeradataIntervalExpr; @@ -37,4 +38,8 @@ public interface TeradataASTVisitor extends SQLASTVisitor { boolean visit(TeradataIntervalExpr x); void endVisit(TeradataIntervalExpr x); + + boolean visit(SQLSubqueryTableSource x); + + void endVisit(SQLSubqueryTableSource x); } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/teradata/visitor/TeradataSchemaStatVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/teradata/visitor/TeradataSchemaStatVisitor.java index fffec46566..7b90268d99 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/teradata/visitor/TeradataSchemaStatVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/teradata/visitor/TeradataSchemaStatVisitor.java @@ -15,6 +15,10 @@ */ package com.alibaba.druid.sql.dialect.teradata.visitor; +import java.util.Map; + +import com.alibaba.druid.sql.ast.statement.SQLSelectQuery; +import com.alibaba.druid.sql.ast.statement.SQLSubqueryTableSource; import com.alibaba.druid.sql.dialect.teradata.ast.expr.TeradataAnalytic; import com.alibaba.druid.sql.dialect.teradata.ast.expr.TeradataAnalyticWindowing; import com.alibaba.druid.sql.dialect.teradata.ast.expr.TeradataIntervalExpr; @@ -54,5 +58,31 @@ public class TeradataSchemaStatVisitor extends SchemaStatVisitor implements Tera public void endVisit(TeradataIntervalExpr x) { } + + @Override + public boolean visit(SQLSubqueryTableSource x) { + accept(x.getSelect()); + + String table = (String) x.getSelect().getAttribute(ATTR_TABLE); + if (aliasMap != null && x.getAlias() != null) { + if (table != null) { + this.aliasMap.put(x.getAlias(), table); + } + addSubQuery(x.getAlias(), x.getSelect()); + this.setCurrentTable(x.getAlias()); + } + + if (table != null) { + x.putAttribute(ATTR_TABLE, table); + } + + return false; + } + + @Override + public void endVisit(SQLSubqueryTableSource x) { + + } + }