Add AggregateExpr and MethodInvokeExpr into aliasMap for TD

This commit is contained in:
Louis Xu
2016-04-12 22:37:01 +08:00
parent 051910f666
commit 4f07457051
@@ -17,12 +17,17 @@ package com.alibaba.druid.sql.dialect.teradata.visitor;
import java.util.Map;
import com.alibaba.druid.sql.ast.SQLName;
import com.alibaba.druid.sql.ast.expr.SQLAggregateExpr;
import com.alibaba.druid.sql.ast.expr.SQLMethodInvokeExpr;
import com.alibaba.druid.sql.ast.statement.SQLSelectItem;
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;
import com.alibaba.druid.sql.visitor.SchemaStatVisitor;
import com.alibaba.druid.stat.TableStat.Column;
import com.alibaba.druid.util.JdbcUtils;
public class TeradataSchemaStatVisitor extends SchemaStatVisitor implements TeradataASTVisitor {
@@ -84,5 +89,34 @@ public class TeradataSchemaStatVisitor extends SchemaStatVisitor implements Tera
}
public boolean visit(SQLSelectItem x) {
x.getExpr().accept(this);
String alias = x.getAlias();
Map<String, String> aliasMap = this.getAliasMap();
if (alias != null && (!alias.isEmpty()) && aliasMap != null) {
if (x.getExpr() instanceof SQLName) {
putAliasMap(aliasMap, alias, x.getExpr().toString());
} else if (x.getExpr() instanceof SQLAggregateExpr
|| x.getExpr() instanceof SQLMethodInvokeExpr) {
TeradataSchemaStatVisitor visitor = new TeradataSchemaStatVisitor();
x.getExpr().accept(visitor);
for (Column col : visitor.getColumns()) {
if (col.getTable().equalsIgnoreCase("unknown")
|| this.getCurrentTable() != null) {
col.setTable(this.currentTable);
}
putAliasMap(aliasMap, alias, col.toString());
}
}
else {
putAliasMap(aliasMap, alias, null);
}
}
return false;
}
}