Repository: lens Updated Branches: refs/heads/master 05921c497 -> daa65a5af
LENS-843 : Columns in having clause not getting push down. Project: http://git-wip-us.apache.org/repos/asf/lens/repo Commit: http://git-wip-us.apache.org/repos/asf/lens/commit/daa65a5a Tree: http://git-wip-us.apache.org/repos/asf/lens/tree/daa65a5a Diff: http://git-wip-us.apache.org/repos/asf/lens/diff/daa65a5a Branch: refs/heads/master Commit: daa65a5afafe3a4eac6519b5b85f0ced2c3c4349 Parents: 05921c4 Author: Sushil Mohanty <[email protected]> Authored: Sun Oct 25 11:30:10 2015 +0530 Committer: Amareshwari Sriramadasu <[email protected]> Committed: Sun Oct 25 11:30:10 2015 +0530 ---------------------------------------------------------------------- .../lens/driver/jdbc/ColumnarSQLRewriter.java | 6 +++- .../driver/jdbc/TestColumnarSQLRewriter.java | 29 ++++++++++++++++++++ 2 files changed, 34 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/lens/blob/daa65a5a/lens-driver-jdbc/src/main/java/org/apache/lens/driver/jdbc/ColumnarSQLRewriter.java ---------------------------------------------------------------------- diff --git a/lens-driver-jdbc/src/main/java/org/apache/lens/driver/jdbc/ColumnarSQLRewriter.java b/lens-driver-jdbc/src/main/java/org/apache/lens/driver/jdbc/ColumnarSQLRewriter.java index 688e576..c6797aa 100644 --- a/lens-driver-jdbc/src/main/java/org/apache/lens/driver/jdbc/ColumnarSQLRewriter.java +++ b/lens-driver-jdbc/src/main/java/org/apache/lens/driver/jdbc/ColumnarSQLRewriter.java @@ -995,7 +995,11 @@ public class ColumnarSQLRewriter implements QueryRewriter { replaceWithUnderlyingStorage(hconf); replaceAliasInAST(); getFilterInJoinCond(fromAST); - getAggregateColumns(selectAST, new MutableInt(0)); + MutableInt alaisCount = new MutableInt(0); + getAggregateColumns(selectAST, alaisCount); + if (havingAST != null) { + getAggregateColumns(havingAST, alaisCount); + } constructJoinChain(); getAllFilters(whereAST); buildSubqueries(fromAST); http://git-wip-us.apache.org/repos/asf/lens/blob/daa65a5a/lens-driver-jdbc/src/test/java/org/apache/lens/driver/jdbc/TestColumnarSQLRewriter.java ---------------------------------------------------------------------- diff --git a/lens-driver-jdbc/src/test/java/org/apache/lens/driver/jdbc/TestColumnarSQLRewriter.java b/lens-driver-jdbc/src/test/java/org/apache/lens/driver/jdbc/TestColumnarSQLRewriter.java index 95ff030..31c7dad 100644 --- a/lens-driver-jdbc/src/test/java/org/apache/lens/driver/jdbc/TestColumnarSQLRewriter.java +++ b/lens-driver-jdbc/src/test/java/org/apache/lens/driver/jdbc/TestColumnarSQLRewriter.java @@ -1073,6 +1073,35 @@ public class TestColumnarSQLRewriter { compareQueries(expected, actual); } + @Test + public void testHavingClause() throws LensException { + + String query = "select fact.time_key time_key, time_dim.day_of_week, " + + "sum(fact.item_sold) as total_item_sold from db.sales_fact as fact " + + "inner join time_dim as time_dim on fact.time_key = time_dim.time_key " + + "where time_dim.time_key between '2013-01-01' and '2013-01-31'" + + "group by fact.time_key " + + "having sum(fact.dollar_sold) > 100 "; + + SessionState.start(hconf); + + String actual = qtest.rewrite(query, conf, hconf); + String expected = "select ( sales_fact__db_sales_fact_fact . time_key ) time_key , " + + "( time_dim___time_dim . day_of_week ), sum(alias1) total_item_sold from " + + " (select sales_fact__db_sales_fact_fact.time_key,sum(( sales_fact__db_sales_fact_fact ." + + " item_sold )) as alias1, sum(( sales_fact__db_sales_fact_fact . dollar_sold )) " + + "as alias2 from db.sales_fact sales_fact__db_sales_fact_fact where " + + "sales_fact__db_sales_fact_fact.time_key in ( select time_dim .time_key " + + "from time_dim where ( time_dim. time_key ) between '2013-01-01' and '2013-01-31' ) " + + "group by sales_fact__db_sales_fact_fact.time_key) sales_fact__db_sales_fact_fact " + + "inner join (select time_key,day_of_week from time_dim) time_dim___time_dim on " + + "(( sales_fact__db_sales_fact_fact . time_key ) = ( time_dim___time_dim . time_key )) " + + "where ( time_dim___time_dim . time_key ) between '2013-01-01' and '2013-01-31' " + + " group by ( sales_fact__db_sales_fact_fact . time_key ) " + + "having (sum(alias2) > 100 )"; + + compareQueries(expected, actual); + } /** * Test replace db name.
