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. *
