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.

Reply via email to