Repository: lens
Updated Branches:
  refs/heads/master 1f885cd3d -> 05921c497


LENS-838 : Literals with escaped quotes are not honoured in columnarSQLRewriter


Project: http://git-wip-us.apache.org/repos/asf/lens/repo
Commit: http://git-wip-us.apache.org/repos/asf/lens/commit/05921c49
Tree: http://git-wip-us.apache.org/repos/asf/lens/tree/05921c49
Diff: http://git-wip-us.apache.org/repos/asf/lens/diff/05921c49

Branch: refs/heads/master
Commit: 05921c497d57d83b435ddd916d270f86544b8ef3
Parents: 1f885cd
Author: Sushil Mohanty <[email protected]>
Authored: Sun Oct 25 11:28:46 2015 +0530
Committer: Amareshwari Sriramadasu <[email protected]>
Committed: Sun Oct 25 11:28:46 2015 +0530

----------------------------------------------------------------------
 .../lens/driver/jdbc/ColumnarSQLRewriter.java   |  5 +-
 .../driver/jdbc/TestColumnarSQLRewriter.java    | 53 ++++++++++++++++++++
 2 files changed, 56 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lens/blob/05921c49/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 3fdb40e..688e576 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
@@ -1171,8 +1171,9 @@ public class ColumnarSQLRewriter implements QueryRewriter 
{
     }
     rewrittenQuery.append("select ").append(selecttree).append(" from ");
     if (factInLineQuery.length() != 0) {
-      
rewrittenQuery.append(finalJoinClause.replaceFirst(factNameAndAlias.substring(0,
 factNameAndAlias.indexOf(' ')),
-        factInLineQuery.toString()));
+      finalJoinClause = finalJoinClause.substring(finalJoinClause.indexOf(" 
"));
+      rewrittenQuery.append(factInLineQuery);
+      rewrittenQuery.append(finalJoinClause);
     } else {
       rewrittenQuery.append(finalJoinClause);
     }

http://git-wip-us.apache.org/repos/asf/lens/blob/05921c49/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 41c3c85..95ff030 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
@@ -1021,6 +1021,59 @@ public class TestColumnarSQLRewriter {
   }
 
 
+  @Test
+  public void testEscapeQuote() throws LensException {
+
+    String query = "select fact.time_key,time_dim.day_of_week,time_dim.day, 
((sum( fact . item_count ) + 0 ) + "
+            + "(sum(fact . product_count ) + 0 )) as expr1, "
+            + "(sum(case when fact.status_id is null then 0 when 
fact.status_id = 1 then fact.item_sold else 0 end)"
+            + " * 1000) / sum(case when fact.status_id is null then 0 when 
fact.status_id = 2 "
+            + "then fact.dollars_sold else 0 end) as expr2 from db.sales_fact 
as fact "
+            + "inner join time_dim as time_dim on fact.time_key = 
time_dim.time_key inner "
+            + "join db.location_dim ld on fact.location_key = ld.location_key "
+            + " where time_dim.time_key between '2013-01-01' and '2013-01-31' "
+            + " and ld.location_name in ('test\\'123') "
+            + "group by fact.time_key,time_dim.day_of_week,time_dim.day "
+            + "order by dollars_sold desc";
+
+    SessionState.start(hconf);
+
+    String actual = qtest.rewrite(query, conf, hconf);
+    String expected = "select ( sales_fact__db_sales_fact_fact . time_key ), ( 
time_dim___time_dim . day_of_week ),"
+            + " ( time_dim___time_dim . day ), ((sum(alias1) +  0 ) + 
(sum(alias2) +  0 )) expr1 , "
+            + "((sum(alias3) *  1000 ) / sum(alias4)) expr2  from  "
+            + "(select sales_fact__db_sales_fact_fact.time_key, 
sales_fact__db_sales_fact_fact."
+            + "location_key,sum(( sales_fact__db_sales_fact_fact . item_count 
)) as alias1, "
+            + "sum(( sales_fact__db_sales_fact_fact . product_count )) as 
alias2, "
+            + "sum( case  when ( sales_fact__db_sales_fact_fact . status_id ) 
is null  "
+            + "then  0  when (( sales_fact__db_sales_fact_fact . status_id ) = 
 1 ) then "
+            + "( sales_fact__db_sales_fact_fact . item_sold ) else  0  end ) 
as alias3, "
+            + "sum( case  when ( sales_fact__db_sales_fact_fact . status_id ) 
is null  then  0  "
+            + "when (( sales_fact__db_sales_fact_fact . status_id ) =  2 ) 
then "
+            + "( sales_fact__db_sales_fact_fact . dollars_sold ) else  0  end 
) as"
+            + " alias4 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'  ) and "
+            + "sales_fact__db_sales_fact_fact.location_key in  (  select 
location_dim ."
+            + "location_key from location_dim where ( location_dim. 
location_name ) in "
+            + "( 'test\'123' ) )  group by 
sales_fact__db_sales_fact_fact.time_key, "
+            + "sales_fact__db_sales_fact_fact.location_key) 
sales_fact__db_sales_fact_fact  "
+            + "inner join (select time_key,day_of_week,day from time_dim) 
time_dim___time_dim "
+            + "on (( sales_fact__db_sales_fact_fact . time_key ) = ( 
time_dim___time_dim . time_key )) "
+            + " inner join (select location_key,location_name from 
db.location_dim)"
+            + " location_dim__db_location_dim_ld on (( 
sales_fact__db_sales_fact_fact . "
+            + "location_key ) = ( location_dim__db_location_dim_ld . 
location_key )) "
+            + " where (( time_dim___time_dim . time_key ) between  
'2013-01-01'  and  "
+            + "'2013-01-31'  and ( location_dim__db_location_dim_ld . 
location_name ) "
+            + "in ( 'test\'123' )) group by ( sales_fact__db_sales_fact_fact . 
time_key ), "
+            + "( time_dim___time_dim . day_of_week ), ( time_dim___time_dim . 
day )"
+            + " order by dollars_sold  desc";
+
+    compareQueries(expected, actual);
+  }
+
+
   /**
    * Test replace db name.
    *

Reply via email to