Add support for TD subquery table source implementation

This commit is contained in:
Louis Xu
2016-04-08 10:40:11 +08:00
parent 6cf4b3ab8b
commit 1ce92f7d43
2 changed files with 35 additions and 0 deletions
@@ -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);
}
@@ -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) {
}
}