Repository: lens Updated Branches: refs/heads/master de8f2ec6f -> 7f3731ef4
LENS-1411: Queries not rewritten correctly when aggregate expression used inside "case when..." Project: http://git-wip-us.apache.org/repos/asf/lens/repo Commit: http://git-wip-us.apache.org/repos/asf/lens/commit/7f3731ef Tree: http://git-wip-us.apache.org/repos/asf/lens/tree/7f3731ef Diff: http://git-wip-us.apache.org/repos/asf/lens/diff/7f3731ef Branch: refs/heads/master Commit: 7f3731ef49e7cc309620dd75bd679d7e8e29776e Parents: de8f2ec Author: Sushil Mohanty <sushil.k.moha...@gmail.com> Authored: Mon Apr 24 14:56:29 2017 +0530 Committer: Rajat Khandelwal <rajatgupt...@gmail.com> Committed: Mon Apr 24 14:56:29 2017 +0530 ---------------------------------------------------------------------- .../apache/lens/cube/parse/UnionQueryWriter.java | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/lens/blob/7f3731ef/lens-cube/src/main/java/org/apache/lens/cube/parse/UnionQueryWriter.java ---------------------------------------------------------------------- diff --git a/lens-cube/src/main/java/org/apache/lens/cube/parse/UnionQueryWriter.java b/lens-cube/src/main/java/org/apache/lens/cube/parse/UnionQueryWriter.java index 3ee817f..267d85b 100644 --- a/lens-cube/src/main/java/org/apache/lens/cube/parse/UnionQueryWriter.java +++ b/lens-cube/src/main/java/org/apache/lens/cube/parse/UnionQueryWriter.java @@ -53,6 +53,7 @@ public class UnionQueryWriter { private CubeQueryContext cubeql; Collection<StorageCandidate> storageCandidates; public static final String DEFAULT_MEASURE = "0.0"; + public static final String DUPLICATE_EXPRESSION_PREFIX = "D"; public UnionQueryWriter(Collection<StorageCandidate> storageCandidates, CubeQueryContext cubeql) { if (storageCandidates == null || storageCandidates.size()<=1) { @@ -353,15 +354,25 @@ public class UnionQueryWriter { if (phraseCountMap.get(col).size() > 1) { List<Integer> childenToDelete = phraseCountMap.get(col). subList(1, phraseCountMap.get(col).size()); - int counter = 0; for (int i : childenToDelete) { for (StorageCandidate sc : storageCandidates) { - sc.getQueryAst().getSelectAST().deleteChild(i - counter); + sc.getQueryAst().getSelectAST().setChild(i, + new ASTNode(new CommonToken(HiveParser.Identifier, DUPLICATE_EXPRESSION_PREFIX))); } - counter++; } } } + + for (StorageCandidate sc : storageCandidates) { + for (Node node : sc.getQueryAst().getSelectAST().getChildren()) { + ASTNode selectNode = (ASTNode) node; + if (selectNode.getToken().getType() == HiveParser.Identifier + && selectNode.getText().equals(DUPLICATE_EXPRESSION_PREFIX)) { + sc.getQueryAst().getSelectAST().deleteChild(selectNode.getChildIndex()); + } + } + } + updateOuterASTDuplicateAliases(queryAst.getSelectAST(), aliasMap); if (queryAst.getHavingAST() != null) { updateOuterASTDuplicateAliases(queryAst.getHavingAST(), aliasMap); @@ -719,7 +730,7 @@ public class UnionQueryWriter { ASTNode column = (ASTNode) selectExpr.getChild(0); if (HQLParser.isAggregateAST(column) && column.getChildCount() == 2) { - if (HQLParser.getString((ASTNode) column.getChild(1)).equals("0.0")) { + if (HQLParser.getString((ASTNode) column.getChild(1)).equals(DEFAULT_MEASURE)) { selectExpr.getParent().setChild(i, getSelectExpr(null, (ASTNode) selectExpr.getChild(1), true)); } }