From 48cf09635b0994ed63ba902228156e48de22e460 Mon Sep 17 00:00:00 2001 From: Louis Xu Date: Thu, 21 Apr 2016 17:24:22 +0800 Subject: [PATCH] create aliasQueryMap to store alias->expression, in case null returned in alias map --- .../visitor/TeradataSchemaStatVisitor.java | 38 +++++++++++++------ 1 file changed, 26 insertions(+), 12 deletions(-) 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 79f54d6438..706eb38799 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,10 +15,13 @@ */ package com.alibaba.druid.sql.dialect.teradata.visitor; +import java.util.LinkedHashMap; import java.util.Map; import com.alibaba.druid.sql.ast.SQLName; +import com.alibaba.druid.sql.ast.SQLObject; import com.alibaba.druid.sql.ast.expr.SQLAggregateExpr; +import com.alibaba.druid.sql.ast.expr.SQLCaseExpr; import com.alibaba.druid.sql.ast.expr.SQLMethodInvokeExpr; import com.alibaba.druid.sql.ast.statement.SQLSelectItem; import com.alibaba.druid.sql.ast.statement.SQLSelectQuery; @@ -32,6 +35,8 @@ import com.alibaba.druid.util.JdbcUtils; public class TeradataSchemaStatVisitor extends SchemaStatVisitor implements TeradataASTVisitor { + protected final Map aliasQueryMap = new LinkedHashMap(); + @Override public String getDbType() { return JdbcUtils.TERADATA; @@ -98,25 +103,34 @@ public class TeradataSchemaStatVisitor extends SchemaStatVisitor implements Tera 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) { + } else { 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); + putAliasMap(aliasMap, alias, null); + // Add expression alias into aliasQuery map + // in order to retrieve column info from aliasQueryMap + // if aliasMap value is null + String uniqueAliasName = this.getCurrentTable() == null ? + alias : this.getCurrentTable() + "." + alias; + addAliasQuery(uniqueAliasName, x.getExpr()); } } return false; } + protected void addAliasQuery(String alias, SQLObject query) { + String alias_lcase = alias.toLowerCase(); + aliasQueryMap.put(alias_lcase, query); + } + + public SQLObject getAliasQuery(String alias) { + String alias_lcase = alias.toLowerCase(); + return aliasQueryMap.get(alias_lcase); + } + + public Map getAliasQueryMap() { + return aliasQueryMap; + } }