mirror of
https://github.com/alibaba/druid.git
synced 2023-03-04 19:17:16 +00:00
Add AggregateExpr and MethodInvokeExpr into aliasMap for TD
This commit is contained in:
+34
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user