From 1ce92f7d43bc7a30be73a1cc29312f432fccc600 Mon Sep 17 00:00:00 2001 From: Louis Xu Date: Fri, 8 Apr 2016 10:40:11 +0800 Subject: [PATCH] Add support for TD subquery table source implementation --- .../teradata/visitor/TeradataASTVisitor.java | 5 ++++ .../visitor/TeradataSchemaStatVisitor.java | 30 +++++++++++++++++++ 2 files changed, 35 insertions(+) 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) { + + } + }