Repository: lens
Updated Branches:
  refs/heads/master 34223e880 -> 4e822031f


LENS-1033 : Fix HQLParser to honor double spaces in literals


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

Branch: refs/heads/master
Commit: 4e822031f4a3d75b45281ec5aadaf8f64cbb7542
Parents: 34223e8
Author: Amareshwari Sriramadasu <amareshw...@apache.org>
Authored: Mon May 9 10:08:31 2016 +0530
Committer: Amareshwari Sriramadasu <amareshw...@apache.org>
Committed: Mon May 9 10:08:31 2016 +0530

----------------------------------------------------------------------
 .../org/apache/lens/cube/parse/HQLParser.java   | 36 ++++----
 .../lens/cube/parse/TestBaseCubeQueries.java    | 36 ++++----
 .../lens/cube/parse/TestBridgeTableQueries.java |  8 +-
 .../lens/cube/parse/TestCubeRewriter.java       | 24 +++---
 .../lens/cube/parse/TestExpressionContext.java  | 64 +++++++-------
 .../apache/lens/cube/parse/TestHQLParser.java   | 87 ++++++++++++--------
 .../cube/parse/join/TestBridgeTableJoinCtx.java | 42 +++++-----
 .../driver/jdbc/TestColumnarSQLRewriter.java    | 30 +++----
 8 files changed, 170 insertions(+), 157 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lens/blob/4e822031/lens-cube/src/main/java/org/apache/lens/cube/parse/HQLParser.java
----------------------------------------------------------------------
diff --git a/lens-cube/src/main/java/org/apache/lens/cube/parse/HQLParser.java 
b/lens-cube/src/main/java/org/apache/lens/cube/parse/HQLParser.java
index 0d00188..1f6b66c 100644
--- a/lens-cube/src/main/java/org/apache/lens/cube/parse/HQLParser.java
+++ b/lens-cube/src/main/java/org/apache/lens/cube/parse/HQLParser.java
@@ -372,7 +372,7 @@ public final class HQLParser {
       || KW_FALSE == rootType || KW_FORMATTED == rootType || KW_EXTENDED == 
rootType || KW_DEPENDENCY == rootType) {
       // StringLiterals should not be lower cased.
       if (StringLiteral == rootType) {
-        buf.append(' ').append(rootText).append(' ');
+        buf.append(rootText);
       } else if (KW_TRUE == rootType) {
         buf.append(" true ");
       } else if (KW_FALSE == rootType) {
@@ -380,12 +380,9 @@ public final class HQLParser {
       } else if (Identifier == rootType && TOK_SELEXPR == 
root.getParent().getType()) {
         // back quote column alias in all cases. This is required since some 
alias values can match DB keywords
         // (example : year as alias) and in such case queries can fail on 
certain DBs if the alias in not back quoted
-        buf.append(" as `").append(rootText).append("` ");
-      } else if (Identifier == rootType && TOK_FUNCTIONSTAR == 
root.getParent().getType()) {
-        // count(*) or count(someTab.*): Don't append space after the 
identifier
-        buf.append(" ").append(rootText == null ? "" : rootText.toLowerCase());
+        buf.append(" as `").append(rootText).append("`");
       } else {
-        buf.append(" ").append(rootText == null ? "" : 
rootText.toLowerCase()).append(" ");
+        buf.append(rootText == null ? "" : rootText.toLowerCase());
       }
 
     } else if (TOK_ALLCOLREF == rootType) {
@@ -395,14 +392,14 @@ public final class HQLParser {
         }
         buf.append(".");
       }
-      buf.append(" * ");
+      buf.append("*");
     } else if (TOK_FUNCTIONSTAR == rootType) {
       if (root.getChildCount() > 0) {
         for (int i = 0; i < root.getChildCount(); i++) {
           toInfixString((ASTNode) root.getChild(i), buf);
         }
       }
-      buf.append("(*) ");
+      buf.append("(*)");
     } else if (UNARY_OPERATORS.contains(rootType)) {
       if (KW_NOT == rootType) {
         // Check if this is actually NOT IN
@@ -410,7 +407,7 @@ public final class HQLParser {
           buf.append(" not ");
         }
       } else if (TILDE == rootType) {
-        buf.append(" ~ ");
+        buf.append(" ~");
       }
 
       for (int i = 0; i < root.getChildCount(); i++) {
@@ -429,7 +426,7 @@ public final class HQLParser {
       if (MINUS == rootType && root.getChildCount() == 1) {
         // If minus has only one child, then it's a unary operator.
         // Add Operator name first
-        buf.append(' ').append(rootText.toLowerCase()).append(' ');
+        buf.append(rootText.toLowerCase());
         // Operand
         toInfixString((ASTNode) root.getChild(0), buf);
       } else {
@@ -508,7 +505,7 @@ public final class HQLParser {
       // Distinct is a different case.
       String fname = root.getChild(0).getText();
 
-      buf.append(fname.toLowerCase()).append("( distinct ");
+      buf.append(fname.toLowerCase()).append("(distinct ");
 
       // Arguments to distinct separated by comma
       for (int i = 1; i < root.getChildCount(); i++) {
@@ -528,9 +525,8 @@ public final class HQLParser {
           colStr = colStr.substring(1, colStr.length() - 1);
         }
         buf.append(colStr);
-        buf.append(" ");
       }
-      buf.append(" ").append(rootType == TOK_TABSORTCOLNAMEDESC ? "desc" : 
"asc").append(" ");
+      buf.append(rootType == TOK_TABSORTCOLNAMEDESC ? " desc" : " asc");
     } else if (TOK_SELECT == rootType || TOK_ORDERBY == rootType || 
TOK_GROUPBY == rootType) {
       for (int i = 0; i < root.getChildCount(); i++) {
         toInfixString((ASTNode) root.getChild(i), buf);
@@ -582,7 +578,7 @@ public final class HQLParser {
   private static void functionString(ASTNode root, StringBuilder buf) {
     // special handling for CASE udf
     if (findNodeByPath(root, KW_CASE) != null) {
-      buf.append(" case ");
+      buf.append("case ");
       toInfixString((ASTNode) root.getChild(1), buf);
       // each of the conditions
       ArrayList<Node> caseChildren = root.getChildren();
@@ -603,12 +599,12 @@ public final class HQLParser {
         toInfixString((ASTNode) caseChildren.get(nchildren - 1), buf);
       }
 
-      buf.append(" end ");
+      buf.append(" end");
 
     } else if (findNodeByPath(root, KW_WHEN) != null) {
       // 2nd form of case statement
 
-      buf.append(" case ");
+      buf.append("case ");
       // each of the conditions
       ArrayList<Node> caseChildren = root.getChildren();
       int from = 1;
@@ -628,17 +624,17 @@ public final class HQLParser {
         toInfixString((ASTNode) caseChildren.get(nchildren - 1), buf);
       }
 
-      buf.append(" end ");
+      buf.append(" end");
 
     } else if (findNodeByPath(root, TOK_ISNULL) != null) {
       // IS NULL operator
       toInfixString((ASTNode) root.getChild(1), buf);
-      buf.append(" is null ");
+      buf.append(" is null");
 
     } else if (findNodeByPath(root, TOK_ISNOTNULL) != null) {
       // IS NOT NULL operator
       toInfixString((ASTNode) root.getChild(1), buf);
-      buf.append(" is not null ");
+      buf.append(" is not null");
 
     } else if (root.getChild(0).getType() == Identifier
       && ((ASTNode) 
root.getChild(0)).getToken().getText().equalsIgnoreCase("between")) {
@@ -723,7 +719,7 @@ public final class HQLParser {
   public static String getString(ASTNode tree) {
     StringBuilder buf = new StringBuilder();
     toInfixString(tree, buf);
-    return buf.toString().trim().replaceAll("\\s+", " ");
+    return buf.toString().trim();
   }
 
   public static String getColName(ASTNode node) {

http://git-wip-us.apache.org/repos/asf/lens/blob/4e822031/lens-cube/src/test/java/org/apache/lens/cube/parse/TestBaseCubeQueries.java
----------------------------------------------------------------------
diff --git 
a/lens-cube/src/test/java/org/apache/lens/cube/parse/TestBaseCubeQueries.java 
b/lens-cube/src/test/java/org/apache/lens/cube/parse/TestBaseCubeQueries.java
index fcf975e..bc4f2a1 100644
--- 
a/lens-cube/src/test/java/org/apache/lens/cube/parse/TestBaseCubeQueries.java
+++ 
b/lens-cube/src/test/java/org/apache/lens/cube/parse/TestBaseCubeQueries.java
@@ -482,10 +482,10 @@ public class TestBaseCubeQueries extends TestQueryRewrite 
{
         getWhereForDailyAndHourly2days(cubeName, "C1_testFact1_BASE"));
     compareContains(expected1, hqlQuery);
     compareContains(expected2, hqlQuery);
-    assertTrue(hqlQuery.toLowerCase().startsWith("select coalesce(mq1.expr1, 
mq2.expr1) `func1( dim1 )`,"
-      + " coalesce(mq1.expr2, mq2.expr2) `func2( dim1 )`, mq2.msr12 msr12, 
mq1.roundedmsr2 roundedmsr2 from ")
-      || hqlQuery.toLowerCase().startsWith("select coalesce(mq1.expr1, 
mq2.expr1) `func1( dim1 )`,"
-        + " coalesce(mq1.expr2, mq2.expr2) `func2( dim1 )`, mq1.msr12 msr12, 
mq2.roundedmsr2 roundedmsr2 from "),
+    assertTrue(hqlQuery.toLowerCase().startsWith("select coalesce(mq1.expr1, 
mq2.expr1) `func1(dim1)`,"
+      + " coalesce(mq1.expr2, mq2.expr2) `func2(dim1)`, mq2.msr12 msr12, 
mq1.roundedmsr2 roundedmsr2 from ")
+      || hqlQuery.toLowerCase().startsWith("select coalesce(mq1.expr1, 
mq2.expr1) `func1(dim1)`,"
+        + " coalesce(mq1.expr2, mq2.expr2) `func2(dim1)`, mq1.msr12 msr12, 
mq2.roundedmsr2 roundedmsr2 from "),
       hqlQuery);
     assertTrue(hqlQuery.contains("mq1 full outer join ")
       && hqlQuery.endsWith("mq2 on mq1.expr1 <=> mq2.expr1 AND mq1.expr2 <=> 
mq2.expr2"), hqlQuery);
@@ -507,10 +507,10 @@ public class TestBaseCubeQueries extends TestQueryRewrite 
{
     compareContains(expected1, hqlQuery);
     compareContains(expected2, hqlQuery);
     assertTrue(hqlQuery.toLowerCase().startsWith(
-      "select coalesce(mq1.expr1, mq2.expr1) `func1( dim1 )`, mq2.expr2 
`directmsr`, mq1.roundedmsr2 roundedmsr2 "
+      "select coalesce(mq1.expr1, mq2.expr1) `func1(dim1)`, mq2.expr2 
`directmsr`, mq1.roundedmsr2 roundedmsr2 "
         + "from ")
       || hqlQuery.toLowerCase().startsWith(
-        "select coalesce(mq1.expr1, mq2.expr1) `func1( dim1 )`, mq1.expr2 
`directmsr`, mq2.roundedmsr2 roundedmsr2 "
+        "select coalesce(mq1.expr1, mq2.expr1) `func1(dim1)`, mq1.expr2 
`directmsr`, mq2.roundedmsr2 roundedmsr2 "
           + "from "),
       hqlQuery.toLowerCase());
     assertTrue(hqlQuery.contains("mq1 full outer join ") && 
hqlQuery.endsWith("mq2 on mq1.expr1 <=> mq2.expr1"),
@@ -530,9 +530,9 @@ public class TestBaseCubeQueries extends TestQueryRewrite {
     compareContains(expected1, hqlQuery);
     compareContains(expected2, hqlQuery);
     assertTrue(hqlQuery.toLowerCase().startsWith(
-      "select coalesce(mq1.dim1, mq2.dim1) dim1, mq2.expr2 `avg( msr12 )`, 
mq1.expr3 `avg( msr2 )` from ")
+      "select coalesce(mq1.dim1, mq2.dim1) dim1, mq2.expr2 `avg(msr12)`, 
mq1.expr3 `avg(msr2)` from ")
       || hqlQuery.toLowerCase().startsWith(
-        "select coalesce(mq1.dim1, mq2.dim1) dim1, mq1.expr2 `avg( msr12 )`, 
mq2.expr3 `avg( msr2 )` from "), hqlQuery);
+        "select coalesce(mq1.dim1, mq2.dim1) dim1, mq1.expr2 `avg(msr12)`, 
mq2.expr3 `avg(msr2)` from "), hqlQuery);
 
     assertTrue(hqlQuery.contains("mq1 full outer join ") && 
hqlQuery.endsWith("mq2 on mq1.dim1 <=> mq2.dim1"),
       hqlQuery);
@@ -624,9 +624,9 @@ public class TestBaseCubeQueries extends TestQueryRewrite {
     compareContains(expected1, hqlQuery);
     compareContains(expected2, hqlQuery);
     assertTrue(hqlQuery.toLowerCase().startsWith("select 
coalesce(mq1.booleancut, mq2.booleancut) booleancut, "
-      + "mq2.expr2 `round((sum( msr2 ) / 1000 ))`, mq1.expr3 `avg(( msr13 + 
msr14 ))` from ")
+      + "mq2.expr2 `round((sum(msr2) / 1000))`, mq1.expr3 `avg((msr13 + 
msr14))` from ")
       || hqlQuery.toLowerCase().startsWith("select coalesce(mq1.booleancut, 
mq2.booleancut) booleancut, "
-        + "mq1.expr2 `round((sum( msr2 ) / 1000 ))`, mq2.expr3 `avg(( msr13 + 
msr14 ))` from "), hqlQuery);
+        + "mq1.expr2 `round((sum(msr2) / 1000))`, mq2.expr3 `avg((msr13 + 
msr14))` from "), hqlQuery);
     assertTrue(hqlQuery.contains("mq1 full outer join ")
       && hqlQuery.endsWith("mq2 on mq1.booleancut <=> mq2.booleancut"),
       hqlQuery);
@@ -656,9 +656,9 @@ public class TestBaseCubeQueries extends TestQueryRewrite {
     compareContains(expected1, hqlQuery);
     compareContains(expected2, hqlQuery);
     assertTrue(hqlQuery.toLowerCase().startsWith("select 
coalesce(mq1.booleancut, mq2.booleancut) booleancut, "
-      + "mq2.expr2 `round((sum( msr2 ) / 1000 ))`, mq1.expr3 `avg(( msr13 + 
msr14 ))` from ")
+      + "mq2.expr2 `round((sum(msr2) / 1000))`, mq1.expr3 `avg((msr13 + 
msr14))` from ")
       || hqlQuery.toLowerCase().startsWith("select coalesce(mq1.booleancut, 
mq2.booleancut) booleancut, "
-        + "mq1.expr2 `round((sum( msr2 ) / 1000 ))`, mq2.expr3 `avg(( msr13 + 
msr14 ))` from "), hqlQuery);
+        + "mq1.expr2 `round((sum(msr2) / 1000))`, mq2.expr3 `avg((msr13 + 
msr14))` from "), hqlQuery);
     assertTrue(hqlQuery.contains("mq1 full outer join ")
         && hqlQuery.endsWith("mq2 on mq1.booleancut <=> mq2.booleancut"),
       hqlQuery);
@@ -807,7 +807,7 @@ public class TestBaseCubeQueries extends TestQueryRewrite {
       || hqlQuery.toLowerCase().startsWith("select coalesce(mq1.dim1, 
mq2.dim1) dim1, "
         + "coalesce(mq1.dim11, mq2.dim11) dim11, mq1.msr12 msr12, 
mq2.roundedmsr2 roundedmsr2 from "), hqlQuery);
     assertTrue(hqlQuery.contains(joinSubString)
-      && hqlQuery.endsWith(endSubString + " WHERE (( alias0 + roundedmsr2 ) <= 
1000 )"), hqlQuery);
+      && hqlQuery.endsWith(endSubString + " WHERE ((alias0 + roundedmsr2) <= 
1000)"), hqlQuery);
 
     // No push-down-able having clauses.
     hqlQuery = rewrite("select dim1, dim11, msr12, roundedmsr2 from basecube 
where " + TWO_DAYS_RANGE
@@ -830,7 +830,7 @@ public class TestBaseCubeQueries extends TestQueryRewrite {
       || hqlQuery.toLowerCase().startsWith("select coalesce(mq1.dim1, 
mq2.dim1) dim1, coalesce(mq1.dim11, mq2.dim11) "
         + "dim11, mq1.msr12 msr12, mq2.roundedmsr2 roundedmsr2 from "), 
hqlQuery);
     assertTrue(hqlQuery.contains(joinSubString)
-      && hqlQuery.endsWith(endSubString + " WHERE (( alias0 + roundedmsr2 ) <= 
1000 )"), hqlQuery);
+      && hqlQuery.endsWith(endSubString + " WHERE ((alias0 + roundedmsr2) <= 
1000)"), hqlQuery);
 
     // function over expression of two functions over measures
     hqlQuery = rewrite("select dim1, dim11, msr12, roundedmsr2 from basecube 
where " + TWO_DAYS_RANGE
@@ -853,7 +853,7 @@ public class TestBaseCubeQueries extends TestQueryRewrite {
       || hqlQuery.toLowerCase().startsWith("select coalesce(mq1.dim1, 
mq2.dim1) dim1, coalesce(mq1.dim11, mq2.dim11) "
         + "dim11, mq1.msr12 msr12, mq2.roundedmsr2 roundedmsr2 from "), 
hqlQuery);
     assertTrue(hqlQuery.contains(joinSubString)
-      && hqlQuery.endsWith(endSubString + " WHERE (round(( alias0 + 
roundedmsr2 )) <= 1000 )"), hqlQuery);
+      && hqlQuery.endsWith(endSubString + " WHERE (round((alias0 + 
roundedmsr2)) <= 1000)"), hqlQuery);
 
 
     // Following test cases only select dimensions, and all the measures are 
in having.
@@ -905,7 +905,7 @@ public class TestBaseCubeQueries extends TestQueryRewrite {
     compareContains(expected2, hqlQuery);
     assertTrue(hqlQuery.toLowerCase().startsWith(begin), hqlQuery);
     assertTrue(hqlQuery.contains(joinSubString)
-      && hqlQuery.endsWith(endSubString + " WHERE (( alias0 + alias1 ) <= 1000 
)"), hqlQuery);
+      && hqlQuery.endsWith(endSubString + " WHERE ((alias0 + alias1) <= 
1000)"), hqlQuery);
 
     hqlQuery = rewrite("select dim1, dim11 from basecube where " + 
TWO_DAYS_RANGE
       + "having msr12 > 2 and roundedmsr2 > 0 and flooredmsr12+roundedmsr2 <= 
1000", conf);
@@ -923,7 +923,7 @@ public class TestBaseCubeQueries extends TestQueryRewrite {
     compareContains(expected2, hqlQuery);
     assertTrue(hqlQuery.toLowerCase().startsWith(begin), hqlQuery);
     assertTrue(hqlQuery.contains(joinSubString)
-      && hqlQuery.endsWith(endSubString + " WHERE (( alias0 + alias1 ) <= 1000 
)"), hqlQuery);
+      && hqlQuery.endsWith(endSubString + " WHERE ((alias0 + alias1) <= 
1000)"), hqlQuery);
 
     hqlQuery = rewrite("select dim1, dim11 from basecube where " + 
TWO_DAYS_RANGE
       + "having msr12 > 2 or roundedmsr2 > 0 or flooredmsr12+roundedmsr2 <= 
1000", conf);
@@ -936,7 +936,7 @@ public class TestBaseCubeQueries extends TestQueryRewrite {
       "select basecube.dim1 as dim1, basecube.dim11 as dim11, 
round(sum(basecube.msr2)/1000) as alias1 FROM ",
       null, " group by basecube.dim1, basecube.dim11",
       getWhereForDailyAndHourly2days(cubeName, "C1_testFact1_BASE"));
-    String havingToWhere = " WHERE (( alias0 > 2 ) or ( alias1 > 0 ) or (( 
alias2 + alias1 ) <= 1000 ))";
+    String havingToWhere = " WHERE ((alias0 > 2) or (alias1 > 0) or ((alias2 + 
alias1) <= 1000))";
 
     assertFalse(hqlQuery.toLowerCase().contains("having"));
     compareContains(expected1, hqlQuery);

http://git-wip-us.apache.org/repos/asf/lens/blob/4e822031/lens-cube/src/test/java/org/apache/lens/cube/parse/TestBridgeTableQueries.java
----------------------------------------------------------------------
diff --git 
a/lens-cube/src/test/java/org/apache/lens/cube/parse/TestBridgeTableQueries.java
 
b/lens-cube/src/test/java/org/apache/lens/cube/parse/TestBridgeTableQueries.java
index b89ed2c..2f00244 100644
--- 
a/lens-cube/src/test/java/org/apache/lens/cube/parse/TestBridgeTableQueries.java
+++ 
b/lens-cube/src/test/java/org/apache/lens/cube/parse/TestBridgeTableQueries.java
@@ -686,9 +686,9 @@ public class TestBridgeTableQueries extends 
TestQueryRewrite {
     TestCubeRewriter.compareContains(expected1, hqlQuery);
     TestCubeRewriter.compareContains(expected2, hqlQuery);
     String lower = hqlQuery.toLowerCase();
-    assertTrue(lower.startsWith("select coalesce(mq1.expr1, mq2.expr1) 
`substr(( usersports . name ), 3 )`,"
+    assertTrue(lower.startsWith("select coalesce(mq1.expr1, mq2.expr1) 
`substr((usersports.name), 3)`,"
       + " mq2.msr2 msr2, mq1.msr12 msr12 from ")
-      || lower.startsWith("select coalesce(mq1.expr1, mq2.expr1) `substr(( 
usersports . name ), 3 )`, mq1.msr2 msr2, "
+      || lower.startsWith("select coalesce(mq1.expr1, mq2.expr1) 
`substr((usersports.name), 3)`, mq1.msr2 msr2, "
         + "mq2.msr12 msr12 from "),
       hqlQuery);
 
@@ -762,9 +762,9 @@ public class TestBridgeTableQueries extends 
TestQueryRewrite {
     TestCubeRewriter.compareContains(expected1, hqlQuery);
     TestCubeRewriter.compareContains(expected2, hqlQuery);
     String lower = hqlQuery.toLowerCase();
-    assertTrue(lower.startsWith("select coalesce(mq1.expr1, mq2.expr1) 
`substr(( usersports . name ), 3 )`,"
+    assertTrue(lower.startsWith("select coalesce(mq1.expr1, mq2.expr1) 
`substr((usersports.name), 3)`,"
       + " mq2.msr2 msr2, mq1.msr12 msr12 from ")
-      || lower.startsWith("select coalesce(mq1.expr1, mq2.expr1) `substr(( 
usersports . name ), 3 )`, mq1.msr2 msr2,"
+      || lower.startsWith("select coalesce(mq1.expr1, mq2.expr1) 
`substr((usersports.name), 3)`, mq1.msr2 msr2,"
         + " mq2.msr12 msr12 from "),
       hqlQuery);
 

http://git-wip-us.apache.org/repos/asf/lens/blob/4e822031/lens-cube/src/test/java/org/apache/lens/cube/parse/TestCubeRewriter.java
----------------------------------------------------------------------
diff --git 
a/lens-cube/src/test/java/org/apache/lens/cube/parse/TestCubeRewriter.java 
b/lens-cube/src/test/java/org/apache/lens/cube/parse/TestCubeRewriter.java
index a223449..f4ef5ca 100644
--- a/lens-cube/src/test/java/org/apache/lens/cube/parse/TestCubeRewriter.java
+++ b/lens-cube/src/test/java/org/apache/lens/cube/parse/TestCubeRewriter.java
@@ -553,10 +553,10 @@ public class TestCubeRewriter extends TestQueryRewrite {
     String whereCond = "zipcode = 'a' and cityid = 'b' and (" + 
TWO_DAYS_RANGE_SPLIT_OVER_UPDATE_PERIODS + ")";
     String hqlQuery = rewrite("select zipcode, count(msr4), sum(msr15) from 
testCube where " + whereCond, conf);
     System.out.println(hqlQuery);
-    String possibleStart1 = "SELECT COALESCE(mq1.zipcode, mq2.zipcode) 
zipcode, mq1.expr2 `count( msr4 )`,"
-      + " mq2.expr3 `sum( msr15 )` FROM ";
-    String possibleStart2 = "SELECT COALESCE(mq1.zipcode, mq2.zipcode) 
zipcode, mq2.expr2 `count( msr4 )`,"
-      + " mq1.expr3 `sum( msr15 )` FROM ";
+    String possibleStart1 = "SELECT COALESCE(mq1.zipcode, mq2.zipcode) 
zipcode, mq1.expr2 `count(msr4)`,"
+      + " mq2.expr3 `sum(msr15)` FROM ";
+    String possibleStart2 = "SELECT COALESCE(mq1.zipcode, mq2.zipcode) 
zipcode, mq2.expr2 `count(msr4)`,"
+      + " mq1.expr3 `sum(msr15)` FROM ";
 
     assertTrue(hqlQuery.startsWith(possibleStart1) || 
hqlQuery.startsWith(possibleStart2));
     compareContains(rewrite("select zipcode as `zipcode`, sum(msr15) as 
`expr3` from testcube where " + whereCond,
@@ -1015,13 +1015,13 @@ public class TestCubeRewriter extends TestQueryRewrite {
   public void 
testSelectExprPromotionToGroupByWithSpacesInDimensionAliasAndWithAsKeywordBwColAndAlias()
     throws ParseException, LensException, HiveException {
 
-    String inputQuery = "select name as `Alias With Spaces`, SUM(msr2) as 
`TestMeasure` from testCube join citydim"
+    String inputQuery = "select name as `Alias With  Spaces`, SUM(msr2) as 
`TestMeasure` from testCube join citydim"
       + " on testCube.cityid = citydim.id where " + LAST_HOUR_TIME_RANGE;
 
-    String expectedRewrittenQuery = "SELECT ( citydim . name ) as `Alias With 
Spaces` , sum(( testcube . msr2 )) "
+    String expectedRewrittenQuery = "SELECT (citydim.name) as `Alias With  
Spaces`, sum((testcube.msr2)) "
       + "as `TestMeasure` FROM TestQueryRewrite.c2_testfact testcube inner 
JOIN TestQueryRewrite.c2_citytable citydim "
-      + "ON (( testcube . cityid ) = ( citydim . id )) WHERE (((( testcube . 
dt ) = '"
-      + getDateUptoHours(getDateWithOffset(HOURLY, -1)) + "' ))) GROUP BY ( 
citydim . name )";
+      + "ON ((testcube.cityid) = (citydim.id)) WHERE ((((testcube.dt) = '"
+      + getDateUptoHours(getDateWithOffset(HOURLY, -1)) + "'))) GROUP BY 
(citydim.name)";
 
     String actualRewrittenQuery = rewrite(inputQuery, 
getConfWithStorages("C2"));
 
@@ -1032,13 +1032,13 @@ public class TestCubeRewriter extends TestQueryRewrite {
   public void 
testSelectExprPromotionToGroupByWithSpacesInDimensionAliasAndWithoutAsKeywordBwColAndAlias()
     throws ParseException, LensException, HiveException {
 
-    String inputQuery = "select name `Alias With Spaces`, SUM(msr2) as 
`TestMeasure` from testCube join citydim"
+    String inputQuery = "select name `Alias With  Spaces`, SUM(msr2) as 
`TestMeasure` from testCube join citydim"
       + " on testCube.cityid = citydim.id where " + LAST_HOUR_TIME_RANGE;
 
-    String expectedRewrittenQuery = "SELECT ( citydim . name ) as `Alias With 
Spaces` , sum(( testcube . msr2 )) "
+    String expectedRewrittenQuery = "SELECT (citydim.name) as `Alias With  
Spaces`, sum((testcube.msr2)) "
       + "as `TestMeasure` FROM TestQueryRewrite.c2_testfact testcube inner 
JOIN TestQueryRewrite.c2_citytable citydim "
-      + "ON (( testcube . cityid ) = ( citydim . id )) WHERE (((( testcube . 
dt ) = '"
-      + getDateUptoHours(getDateWithOffset(HOURLY, -1)) + "' ))) GROUP BY ( 
citydim . name )";
+      + "ON ((testcube.cityid) = (citydim.id)) WHERE ((((testcube.dt) = '"
+      + getDateUptoHours(getDateWithOffset(HOURLY, -1)) + "'))) GROUP BY 
(citydim.name)";
 
     String actualRewrittenQuery = rewrite(inputQuery, 
getConfWithStorages("C2"));
 

http://git-wip-us.apache.org/repos/asf/lens/blob/4e822031/lens-cube/src/test/java/org/apache/lens/cube/parse/TestExpressionContext.java
----------------------------------------------------------------------
diff --git 
a/lens-cube/src/test/java/org/apache/lens/cube/parse/TestExpressionContext.java 
b/lens-cube/src/test/java/org/apache/lens/cube/parse/TestExpressionContext.java
index 64ada27..a632be0 100644
--- 
a/lens-cube/src/test/java/org/apache/lens/cube/parse/TestExpressionContext.java
+++ 
b/lens-cube/src/test/java/org/apache/lens/cube/parse/TestExpressionContext.java
@@ -53,35 +53,34 @@ public class TestExpressionContext extends TestQueryRewrite 
{
     CubeQueryContext nestedExprQL = rewriteCtx("select nestedexpr from 
testCube where " + TWO_DAYS_RANGE, conf);
     Assert.assertNotNull(nestedExprQL.getExprCtx());
     Set<String> expectedExpressions = Sets.newHashSet(
-      "avg(( testcube . roundedmsr2 ))",
-      "avg(( testcube . equalsums ))",
-      "case when (( testcube . substrexpr ) = 'xyz' ) then avg(( testcube . 
msr5 ))"
-        + " when (( testcube . substrexpr ) = 'abc' ) then (avg(( testcube . 
msr4 )) / 100 ) end",
-      "avg(round((( testcube . msr2 ) / 1000 )))",
-      "avg((( testcube . msr3 ) + ( testcube . msr4 )))",
-      "avg(((( testcube . msr3 ) + ( testcube . msr2 )) / 100 ))",
-      "case when (substr(( testcube . dim1 ), 3 ) = 'xyz' ) then avg(( 
testcube . msr5 ))"
-        + " when (substr(( testcube . dim1 ), 3 ) = 'abc' ) then (avg(( 
testcube . msr4 )) / 100 ) end",
-      "case when (substr(ascii(( dim2chain . name )), 3 ) = 'xyz' ) then"
-        + " avg(( testcube . msr5 )) when (substr(ascii(( dim2chain . name )), 
3 ) = 'abc' ) then"
-        + " (avg(( testcube . msr4 )) / 100 ) end",
-      "case when (substr(( testcube . dim1 ), 3 ) = 'xyz' ) then avg((( 
testcube . msr2 )"
-        + " + ( testcube . msr3 ))) when (substr(( testcube . dim1 ), 3 ) = 
'abc' ) then"
-        + " (avg(( testcube . msr4 )) / 100 ) end",
-      "case when (substr(ascii(( dim2chain . name )), 3 ) = 'xyz' ) then"
-        + " avg((( testcube . msr2 ) + ( testcube . msr3 ))) when 
(substr(ascii(( dim2chain . name )), 3 ) = 'abc' )"
-        + " then (avg(( testcube . msr4 )) / 100 ) end",
-      "case when (( testcube . substrexpr ) = 'xyz' ) then avg((( testcube . 
msr2 )"
-        + " + ( testcube . msr3 ))) when (( testcube . substrexpr ) = 'abc' ) 
then (avg(( testcube . msr4 )) / 100 )"
+      "avg((testcube.roundedmsr2))",
+      "avg((testcube.equalsums))",
+      "case  when ((testcube.substrexpr) = 'xyz') then avg((testcube.msr5))"
+        + " when ((testcube.substrexpr) = 'abc') then (avg((testcube.msr4)) / 
100) end",
+      "avg(round(((testcube.msr2) / 1000)))",
+      "avg(((testcube.msr3) + (testcube.msr4)))",
+      "avg((((testcube.msr3) + (testcube.msr2)) / 100))",
+      "case  when (substr((testcube.dim1), 3) = 'xyz') then 
avg((testcube.msr5))"
+        + " when (substr((testcube.dim1), 3) = 'abc') then 
(avg((testcube.msr4)) / 100) end",
+      "case  when (substr(ascii((dim2chain.name)), 3) = 'xyz') then"
+        + " avg((testcube.msr5)) when (substr(ascii((dim2chain.name)), 3) = 
'abc') then"
+        + " (avg((testcube.msr4)) / 100) end",
+      "case  when (substr((testcube.dim1), 3) = 'xyz') then 
avg(((testcube.msr2)"
+        + " + (testcube.msr3))) when (substr((testcube.dim1), 3) = 'abc') then"
+        + " (avg((testcube.msr4)) / 100) end",
+      "case  when (substr(ascii((dim2chain.name)), 3) = 'xyz') then"
+        + " avg(((testcube.msr2) + (testcube.msr3))) when 
(substr(ascii((dim2chain.name)), 3) = 'abc')"
+        + " then (avg((testcube.msr4)) / 100) end",
+      "case  when ((testcube.substrexpr) = 'xyz') then avg(((testcube.msr2)"
+        + " + (testcube.msr3))) when ((testcube.substrexpr) = 'abc') then 
(avg((testcube.msr4)) / 100)"
         + " end",
-      "case when (substr(( testcube . dim1 ), 3 ) = 'xyz' ) then avg((( 
testcube . msr2 )"
-        + " + ( testcube . msr3 ))) when (substr(( testcube . dim1 ), 3 ) = 
'abc' ) then"
-        + " (avg(( testcube . msr4 )) / 100 ) end",
-      "case when (substr(ascii(( dim2chain . name )), 3 ) = 'xyz' ) then"
-        + " avg((( testcube . msr2 ) + ( testcube . msr3 ))) when 
(substr(ascii(( dim2chain . name )), 3 ) = 'abc' )"
-        + " then (avg(( testcube . msr4 )) / 100 ) end"
+      "case  when (substr((testcube.dim1), 3) = 'xyz') then 
avg(((testcube.msr2)"
+        + " + (testcube.msr3))) when (substr((testcube.dim1), 3) = 'abc') then"
+        + " (avg((testcube.msr4)) / 100) end",
+      "case  when (substr(ascii((dim2chain.name)), 3) = 'xyz') then"
+        + " avg(((testcube.msr2) + (testcube.msr3))) when 
(substr(ascii((dim2chain.name)), 3) = 'abc')"
+        + " then (avg((testcube.msr4)) / 100) end"
     );
-
     Set<String> actualExpressions = new HashSet<>();
     for (ExprSpecContext esc : 
nestedExprQL.getExprCtx().getExpressionContext("nestedexpr", 
"testcube").getAllExprs()) {
       actualExpressions.add(HQLParser.getString(esc.getFinalAST()));
@@ -95,13 +94,12 @@ public class TestExpressionContext extends TestQueryRewrite 
{
       conf);
     Assert.assertNotNull(nestedExprQL.getExprCtx());
     Set<String> expectedExpressions = Sets.newHashSet(
-      "avg(( testcube . roundedmsr2 ))",
-      "avg(( testcube . equalsums ))",
-      "avg(round((( testcube . msr2 ) / 1000 )))",
-      "avg((( testcube . msr3 ) + ( testcube . msr4 )))",
-      "avg(((( testcube . msr3 ) + ( testcube . msr2 )) / 100 ))"
+      "avg((testcube.roundedmsr2))",
+      "avg((testcube.equalsums))",
+      "avg(round(((testcube.msr2) / 1000)))",
+      "avg(((testcube.msr3) + (testcube.msr4)))",
+      "avg((((testcube.msr3) + (testcube.msr2)) / 100))"
     );
-
     Set<String> actualExpressions = new HashSet<>();
     for (ExprSpecContext esc : nestedExprQL.getExprCtx()
       .getExpressionContext("nestedexprwithtimes", "testcube").getAllExprs()) {

http://git-wip-us.apache.org/repos/asf/lens/blob/4e822031/lens-cube/src/test/java/org/apache/lens/cube/parse/TestHQLParser.java
----------------------------------------------------------------------
diff --git 
a/lens-cube/src/test/java/org/apache/lens/cube/parse/TestHQLParser.java 
b/lens-cube/src/test/java/org/apache/lens/cube/parse/TestHQLParser.java
index 590d81b..e23290f 100644
--- a/lens-cube/src/test/java/org/apache/lens/cube/parse/TestHQLParser.java
+++ b/lens-cube/src/test/java/org/apache/lens/cube/parse/TestHQLParser.java
@@ -48,11 +48,13 @@ public class TestHQLParser {
     ASTNode node = HQLParser.parseHQL(query, conf);
 
     ASTNode groupby = HQLParser.findNodeByPath(node, TOK_INSERT, TOK_GROUPBY);
-    String expected = "a , f( b ), ( d + e )";
-    Assert.assertEquals(expected, HQLParser.getString(groupby).trim());
+
+    String expected = "a, f(b), (d + e)";
+    Assert.assertEquals(HQLParser.getString(groupby).trim(), expected);
 
     ASTNode orderby = HQLParser.findNodeByPath(node, TOK_INSERT, 
HiveParser.TOK_ORDERBY);
-    String expectedOrderBy = "a asc , g( b ) asc , e / 100 asc";
+
+    String expectedOrderBy = "a asc, g(b) asc, e / 100 asc";
     System.out.println("###Actual order by:" + 
HQLParser.getString(orderby).trim());
     Assert.assertEquals(expectedOrderBy, HQLParser.getString(orderby).trim());
   }
@@ -65,29 +67,29 @@ public class TestHQLParser {
 
     ASTNode select = HQLParser.findNodeByPath(tree, TOK_INSERT, TOK_SELECT);
     String selectStr = HQLParser.getString(select).trim();
-    String expectedSelect = "'abc' as `col1` , 'DEF' as `col2`";
-    Assert.assertEquals(expectedSelect, selectStr);
+    String expectedSelect = "'abc' as `col1`, 'DEF' as `col2`";
+    Assert.assertEquals(selectStr, expectedSelect);
 
     ASTNode where = HQLParser.findNodeByPath(tree, TOK_INSERT, TOK_WHERE);
     String whereStr = HQLParser.getString(where).trim();
-    String expectedWhere = "(( col3 = 'GHI' ) and ( col4 = 'JKLmno' ))";
-    Assert.assertEquals(expectedWhere, whereStr);
+    String expectedWhere = "((col3 = 'GHI') and (col4 = 'JKLmno'))";
+    Assert.assertEquals(whereStr, expectedWhere);
   }
 
   @Test
   public void testCaseStatementGetString() throws Exception {
-    String query = "SELECT  " + "CASE (col1 * 100)/200 + 5 " + "WHEN 'ABC' 
THEN 'def' " + "WHEN 'EFG' THEN 'hij' "
-      + "ELSE 'XyZ' " + "END AS ComplexCaseStatement FROM FOO";
+    String query = "SELECT  " + "CASE (col1 * 100)/200 + 5 WHEN 'ABC' THEN 
'def'WHEN 'EFG' THEN 'hij' "
+      + "ELSE 'XyZ' END AS ComplexCaseStatement FROM FOO";
 
     ASTNode tree = HQLParser.parseHQL(query, conf);
     ASTNode select = HQLParser.findNodeByPath(tree, TOK_INSERT, TOK_SELECT);
     String selectStr = HQLParser.getString(select);
     System.out.println("reconstructed clause ");
     System.out.println(selectStr);
-    Assert.assertEquals(selectStr.trim(), "case ((( col1 * 100 ) / 200 ) + 5 ) 
when 'ABC' then 'def' when 'EFG' "
+    Assert.assertEquals(selectStr.trim(), "case (((col1 * 100) / 200) + 5) 
when 'ABC' then 'def' when 'EFG' "
       + "then 'hij' else 'XyZ' end as `ComplexCaseStatement`");
 
-    String q2 = "SELECT " + "CASE WHEN col1 = 'abc' then 'def' " + "when col1 
= 'ghi' then 'jkl' "
+    String q2 = "SELECT " + "CASE WHEN col1 = 'abc' then 'def' when col1 = 
'ghi' then 'jkl' "
       + "else 'none' END AS Complex_Case_Statement_2" + " from FOO";
 
     tree = HQLParser.parseHQL(q2, conf);
@@ -95,7 +97,8 @@ public class TestHQLParser {
     selectStr = HQLParser.getString(select);
     System.out.println("reconstructed clause 2");
     System.out.println(selectStr);
-    Assert.assertEquals(selectStr.trim(), "case when ( col1 = 'abc' ) then 
'def' when ( col1 = 'ghi' ) then 'jkl' "
+
+    Assert.assertEquals(selectStr.trim(), "case  when (col1 = 'abc') then 
'def' when (col1 = 'ghi') then 'jkl' "
       + "else 'none' end as `Complex_Case_Statement_2`");
 
     String q3 = "SELECT  " + "CASE (col1 * 100)/200 + 5 " + "WHEN 'ABC' THEN 
'def' " + "WHEN 'EFG' THEN 'hij' "
@@ -106,10 +109,10 @@ public class TestHQLParser {
     selectStr = HQLParser.getString(select);
     System.out.println("reconstructed clause ");
     System.out.println(selectStr);
-    Assert.assertEquals(selectStr.trim(), "case ((( col1 * 100 ) / 200 ) + 5 ) 
when 'ABC' then 'def' when 'EFG' "
+    Assert.assertEquals(selectStr.trim(), "case (((col1 * 100) / 200) + 5) 
when 'ABC' then 'def' when 'EFG' "
       + "then 'hij' end as `ComplexCaseStatement`");
 
-    String q4 = "SELECT " + "CASE WHEN col1 = 'abc' then 'def' " + "when col1 
= 'ghi' then 'jkl' "
+    String q4 = "SELECT " + "CASE WHEN col1 = 'abc' then 'def' when col1 = 
'ghi' then 'jkl' "
       + "END AS Complex_Case_Statement_2" + " from FOO";
 
     tree = HQLParser.parseHQL(q4, conf);
@@ -117,7 +120,7 @@ public class TestHQLParser {
     selectStr = HQLParser.getString(select);
     System.out.println("reconstructed clause 2");
     System.out.println(selectStr);
-    Assert.assertEquals(selectStr.trim(), "case when ( col1 = 'abc' ) then 
'def' when ( col1 = 'ghi' ) then 'jkl' end "
+    Assert.assertEquals(selectStr.trim(), "case  when (col1 = 'abc') then 
'def' when (col1 = 'ghi') then 'jkl' end "
       + "as `Complex_Case_Statement_2`");
 
   }
@@ -127,8 +130,12 @@ public class TestHQLParser {
     String q1 = "SELECT * FROM FOO WHERE col1 IS NULL";
     ASTNode where = HQLParser.findNodeByPath(HQLParser.parseHQL(q1, conf), 
TOK_INSERT, TOK_WHERE);
     String whereStr = HQLParser.getString(where);
-    System.out.println(whereStr);
-    Assert.assertEquals("col1 is null", whereStr.trim());
+    Assert.assertEquals(whereStr.trim(), "col1 is null");
+
+    String q2 = "SELECT * FROM FOO WHERE col1 IS NULL and col2 is not null";
+    where = HQLParser.findNodeByPath(HQLParser.parseHQL(q2, conf), TOK_INSERT, 
TOK_WHERE);
+    whereStr = HQLParser.getString(where);
+    Assert.assertEquals(whereStr.trim(), "(col1 is null and col2 is not 
null)");
   }
 
   @Test
@@ -137,7 +144,7 @@ public class TestHQLParser {
     ASTNode where = HQLParser.findNodeByPath(HQLParser.parseHQL(q1, conf), 
TOK_INSERT, TOK_WHERE);
     String whereStr = HQLParser.getString(where);
     System.out.println(whereStr);
-    Assert.assertEquals("col1 is not null", whereStr.trim());
+    Assert.assertEquals(whereStr.trim(), "col1 is not null");
   }
 
   @Test
@@ -146,7 +153,7 @@ public class TestHQLParser {
     ASTNode where = HQLParser.findNodeByPath(HQLParser.parseHQL(q1, conf), 
TOK_INSERT, TOK_WHERE);
     String whereStr = HQLParser.getString(where);
     System.out.println(whereStr);
-    Assert.assertEquals("col1 between 10 and 100", whereStr.trim());
+    Assert.assertEquals(whereStr.trim(), "col1 between 10 and 100");
   }
 
   @Test
@@ -155,7 +162,7 @@ public class TestHQLParser {
     ASTNode where = HQLParser.findNodeByPath(HQLParser.parseHQL(q1, conf), 
TOK_INSERT, TOK_WHERE);
     String whereStr = HQLParser.getString(where);
     System.out.println(whereStr);
-    Assert.assertEquals("col1 not between 10 and 100", whereStr.trim());
+    Assert.assertEquals(whereStr.trim(), "col1 not between 10 and 100");
   }
 
   @Test
@@ -165,8 +172,9 @@ public class TestHQLParser {
 
     ASTNode where = HQLParser.findNodeByPath(HQLParser.parseHQL(q1, conf), 
TOK_INSERT, TOK_WHERE);
     String whereStr = HQLParser.getString(where);
-    String expected = "(( a <=> 10 ) and (( b & c ) = 10 ) and (( d | e ) = 10 
) and (( f ^ g ) = 10 ) and "
-      + "(( h % 2 ) = 1 ) and ( ~ i = 10 ) and not j and not k and true and 
false )";
+
+    String expected = "((a <=> 10) and ((b & c) = 10) and ((d | e) = 10) and 
((f ^ g) = 10) and "
+      + "((h % 2) = 1) and ( ~i = 10) and  not j and  not k and  true  and  
false )";
     Assert.assertEquals(whereStr.trim(), expected);
   }
 
@@ -177,7 +185,7 @@ public class TestHQLParser {
     ASTNode select = HQLParser.findNodeByPath(HQLParser.parseHQL(q1, conf), 
TOK_INSERT, TOK_SELECT);
     String selectStr = HQLParser.getString(select);
     System.out.println(selectStr);
-    Assert.assertEquals(selectStr.trim(), "a [ 2 ], b [ 'key' ], ( c . d )");
+    Assert.assertEquals(selectStr.trim(), "a[2], b['key'], (c.d)");
   }
 
   @Test
@@ -186,13 +194,24 @@ public class TestHQLParser {
     ASTNode where = HQLParser.findNodeByPath(HQLParser.parseHQL(q1, conf), 
TOK_INSERT, TOK_WHERE);
     String whereStr = HQLParser.getString(where);
     System.out.println(whereStr);
-    Assert.assertEquals(whereStr.trim(), "a in ( 'B' , 'C' , 'D' , 'E' , 'F' 
)");
+    Assert.assertEquals(whereStr.trim(), "a in ('B' , 'C' , 'D' , 'E' , 'F')");
 
     q1 = "SELECT * FROM FOO WHERE A NOT IN ('B', 'C', 'D', 'E', 'F')";
     where = HQLParser.findNodeByPath(HQLParser.parseHQL(q1, conf), TOK_INSERT, 
TOK_WHERE);
     whereStr = HQLParser.getString(where);
     System.out.println(whereStr);
-    Assert.assertEquals(whereStr.trim(), "a not in ( 'B' , 'C' , 'D' , 'E' , 
'F' )");
+    Assert.assertEquals(whereStr.trim(), "a not  in ('B' , 'C' , 'D' , 'E' , 
'F')");
+  }
+
+  @Test
+  public void testLiteralWithSpaces() throws Exception {
+    String q1 = "SELECT * FROM FOO WHERE A IN ('B  X', 'C  Y', 'D Z', 'E', 
'F')";
+    ASTNode where = HQLParser.findNodeByPath(HQLParser.parseHQL(q1, conf), 
TOK_INSERT, TOK_WHERE);
+    String whereStr = HQLParser.getString(where);
+    System.out.println(whereStr);
+    System.out.println("HQLParser.parseHQL(q1, conf)" + HQLParser.parseHQL(q1, 
conf).dump());
+    System.out.println("where dump:" + where.dump());
+    Assert.assertEquals(whereStr.trim(), "a in ('B  X' , 'C  Y' , 'D Z' , 'E' 
, 'F')");
   }
 
   @Test
@@ -234,7 +253,7 @@ public class TestHQLParser {
       = "select tab1.a, tab2.b from table1 tab1 inner join table tab2 on 
tab1.id = tab2.id where tab1.a > 123";
     ASTNode node = HQLParser.parseHQL(query, conf);
     ASTNode temp = HQLParser.findNodeByPath(node, TOK_FROM, TOK_JOIN);
-    String expected = "table1 tab1 table tab2 (( tab1 . id ) = ( tab2 . id ))";
+    String expected = "table1tab1tabletab2((tab1.id) = (tab2.id))";
     Assert.assertEquals(HQLParser.getString(temp), expected);
   }
 
@@ -279,7 +298,7 @@ public class TestHQLParser {
     select = HQLParser.findNodeByPath(ast, TOK_INSERT, TOK_SELECT);
     selectStr = HQLParser.getString(select);
     System.out.println(selectStr);
-    Assert.assertEquals(selectStr, "tab . * , ( tab2 . a ), ( tab2 . b )");
+    Assert.assertEquals(selectStr, "tab.*, (tab2.a), (tab2.b)");
 
     query = "select count(*) from tab";
     ast = HQLParser.parseHQL(query, conf);
@@ -293,7 +312,7 @@ public class TestHQLParser {
     select = HQLParser.findNodeByPath(ast, TOK_INSERT, TOK_SELECT);
     selectStr = HQLParser.getString(select);
     System.out.println(selectStr);
-    Assert.assertEquals("count( tab . * )", selectStr);
+    Assert.assertEquals("count(tab.*)", selectStr);
   }
 
   @Test
@@ -313,7 +332,7 @@ public class TestHQLParser {
     System.out.println("genQuery2: " + genQuery2);
 
     Assert.assertFalse(genQuery2.contains("1 -"));
-    Assert.assertTrue(genQuery2.contains("- 1"));
+    Assert.assertTrue(genQuery2.contains("-1"));
 
     // Validate returned string is parseable
     HQLParser.printAST(HQLParser.findNodeByPath(HQLParser.parseHQL("SELECT " + 
genQuery2 + " FROM table1", conf),
@@ -373,10 +392,10 @@ public class TestHQLParser {
       {"a or b", "a or b"},
       {"a or b or c or d", "a or b or c or d"},
       {"a and b and c and d", "a and b and c and d"},
-      {"a and (b or c)", "a and ( b or c )"},
-      {"a and (b or c or d) and (e or f) and (g and h)", "a and ( b or c or d 
) and ( e or f ) and g and h"},
-      // ambiguous, but uniquely understood, or > and.
-      {"a and b or c or d and e or f and g and h", "( a and b ) or c or ( d 
and e ) or ( f and g and h )"},
+      {"a and (b or c)", "a and (b or c)"},
+      {"a and (b or c or d) and (e or f) and (g and h)", "a and (b or c or d) 
and (e or f) and g and h"},
+      // ambiguous, but uniquely understood, and > or.
+      {"a and b or c or d and e or f and g and h", "(a and b) or c or (d and 
e) or (f and g and h)"},
     };
   }
 
@@ -412,7 +431,7 @@ public class TestHQLParser {
 
   @Test
   public void testGetDotAST() {
-    Assert.assertEquals(HQLParser.getString(HQLParser.getDotAST("tbl1", 
"col1")), "( tbl1 . col1 )");
+    Assert.assertEquals(HQLParser.getString(HQLParser.getDotAST("tbl1", 
"col1")), "(tbl1.col1)");
   }
 
   @DataProvider

http://git-wip-us.apache.org/repos/asf/lens/blob/4e822031/lens-cube/src/test/java/org/apache/lens/cube/parse/join/TestBridgeTableJoinCtx.java
----------------------------------------------------------------------
diff --git 
a/lens-cube/src/test/java/org/apache/lens/cube/parse/join/TestBridgeTableJoinCtx.java
 
b/lens-cube/src/test/java/org/apache/lens/cube/parse/join/TestBridgeTableJoinCtx.java
index 06b9509..ca8a45c 100644
--- 
a/lens-cube/src/test/java/org/apache/lens/cube/parse/join/TestBridgeTableJoinCtx.java
+++ 
b/lens-cube/src/test/java/org/apache/lens/cube/parse/join/TestBridgeTableJoinCtx.java
@@ -45,11 +45,11 @@ public class TestBridgeTableJoinCtx {
   public Object[][] filterReplace() {
     return new Object[][] {
       {"t1.c1 in ('XyZ', 'abc', 'PQR', 'lKg')",
-       "myfilter(( t1 . c1 ), 'XyZ' ) or myfilter(( t1 . c1 ), 'abc' )"
-         + " or myfilter(( t1 . c1 ), 'PQR' ) or myfilter(( t1 . c1 ), 'lKg' 
)", },
-      {"t1.c1 = ('XyZ')", "myfilter(( t1 . c1 ), 'XyZ' )"},
-      {"t1.c1 != ('XyZ')", "not myfilter(( t1 . c1 ), 'XyZ' )"},
-      {"t1.c1 != x", "not myfilter(( t1 . c1 ), x )"},
+       "myfilter((t1.c1), 'XyZ') or myfilter((t1.c1), 'abc')"
+         + " or myfilter((t1.c1), 'PQR') or myfilter((t1.c1), 'lKg')", },
+      {"t1.c1 = ('XyZ')", "myfilter((t1.c1), 'XyZ')"},
+      {"t1.c1 != ('XyZ')", "not myfilter((t1.c1), 'XyZ')"},
+      {"t1.c1 != x", "not myfilter((t1.c1), x)"},
     };
   }
 
@@ -86,37 +86,37 @@ public class TestBridgeTableJoinCtx {
     ASTNode orderBy = HQLParser.findNodeByPath(queryAST, TOK_INSERT, 
HiveParser.TOK_ORDERBY);
 
     List<String> expectedBridgeExprs = new ArrayList<>();
-    expectedBridgeExprs.add(aggregator + "(( bt . c3 )) as balias0");
-    expectedBridgeExprs.add(aggregator + "(f2(( bt . c4 ))) as balias1");
-    expectedBridgeExprs.add(aggregator + "(f2(( bt . c3 ))) as balias2");
-    expectedBridgeExprs.add(aggregator + "((( bt . c1 ) + ( bt . c2 ))) as 
balias3");
+    expectedBridgeExprs.add(aggregator + "((bt.c3)) as balias0");
+    expectedBridgeExprs.add(aggregator + "(f2((bt.c4))) as balias1");
+    expectedBridgeExprs.add(aggregator + "(f2((bt.c3))) as balias2");
+    expectedBridgeExprs.add(aggregator + "(((bt.c1) + (bt.c2))) as balias3");
 
     selectCtx.processSelectAST(select);
     String modifiedSelect = HQLParser.getString(select);
-    assertEquals(modifiedSelect, "( t1 . c1 ), ( t2 . c2 ), ( bt . balias0 ), 
f1(( t1 . c2 )), ( bt . balias1 ),"
-      + " ( bt . balias2 ), ( bt . balias3 )");
+    assertEquals(modifiedSelect, "(t1.c1), (t2.c2), (bt.balias0), f1((t1.c2)), 
(bt.balias1),"
+      + " (bt.balias2), (bt.balias3)");
     assertEquals(selectCtx.getSelectedBridgeExprs(), expectedBridgeExprs);
 
     selectCtx.processWhereAST(where, null, 0);
     String modifiedWhere = HQLParser.getString(where);
-    assertEquals(modifiedWhere, "((( t1 . c1 ) = x ) and test_filter(( bt . 
balias0 ), y ) and test_filter(( bt . "
-      + "balias4 ), 5 ) and (( t2 . c2 ) = 4 ) and test_filter(( bt . balias5 
), 6 ))");
-    expectedBridgeExprs.add(aggregator + "(( bt . c6 )) as balias4");
-    expectedBridgeExprs.add(aggregator + "(rand(( bt . c7 ))) as balias5");
+    assertEquals(modifiedWhere, "(((t1.c1) = x) and test_filter((bt.balias0), 
y) and test_filter((bt.balias4), 5)"
+      + " and ((t2.c2) = 4) and test_filter((bt.balias5), 6))");
+    expectedBridgeExprs.add(aggregator + "((bt.c6)) as balias4");
+    expectedBridgeExprs.add(aggregator + "(rand((bt.c7))) as balias5");
     assertEquals(selectCtx.getSelectedBridgeExprs(), expectedBridgeExprs);
 
     selectCtx.processGroupbyAST(groupBy);
     String modifiedGroupby = HQLParser.getString(groupBy);
-    assertEquals(modifiedGroupby, "( t1 . c1 ), ( bt . balias0 ), ( bt . 
balias6 ), ( bt . balias1 )");
-    expectedBridgeExprs.add(aggregator + "(( bt . c8 )) as balias6");
+    assertEquals(modifiedGroupby, "(t1.c1), (bt.balias0), (bt.balias6), 
(bt.balias1)");
+    expectedBridgeExprs.add(aggregator + "((bt.c8)) as balias6");
     assertEquals(selectCtx.getSelectedBridgeExprs(), expectedBridgeExprs);
 
     selectCtx.processOrderbyAST(orderBy);
     String modifiedOrderby = HQLParser.getString(orderBy);
-    assertEquals(modifiedOrderby, "t2 . c2 asc , bt . balias0 asc , bt . 
balias2 asc , bt . balias7 asc ,"
-      + " bt . balias8 desc");
-    expectedBridgeExprs.add(aggregator + "(( bt . c9 )) as balias7");
-    expectedBridgeExprs.add(aggregator + "(( bt . c4 )) as balias8");
+    assertEquals(modifiedOrderby, "t2.c2 asc, bt.balias0 asc, bt.balias2 asc, 
bt.balias7 asc,"
+      + " bt.balias8 desc");
+    expectedBridgeExprs.add(aggregator + "((bt.c9)) as balias7");
+    expectedBridgeExprs.add(aggregator + "((bt.c4)) as balias8");
     assertEquals(selectCtx.getSelectedBridgeExprs(), expectedBridgeExprs);
   }
 }

http://git-wip-us.apache.org/repos/asf/lens/blob/4e822031/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 1aa7491..e71b507 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
@@ -247,9 +247,9 @@ public class TestColumnarSQLRewriter {
     SessionState.start(hconf);
     qtest.rewrite(query, conf, hconf);
     String expected = "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 "
+      + "where (time_dim.time_key) between '2013-01-01' and '2013-01-31' ) and 
"
       + "sales_fact___fact.location_key in  (  select location_dim 
.location_key from "
-      + "location_dim where (( location_dim. location_key ) = 'some-loc' ) ) 
and ";
+      + "location_dim where ((location_dim.location_key) = 'some-loc') ) and ";
     Assert.assertEquals(qtest.allSubQueries.toString().trim(), 
expected.trim());
   }
 
@@ -338,11 +338,11 @@ public class TestColumnarSQLRewriter {
 
     String rwq = qtest.rewrite(query, conf, hconf);
     String actual = qtest.aggColumn.toString();
-    String expected = "[sum(( sales_fact___fact . dollars_sold )) as alias1, "
-        + "sum(( sales_fact___fact . dollars_sold )) as alias2, "
-        + "sum(( sales_fact___fact . units_sold )) as alias3, "
-        + "avg(( sales_fact___fact . dollars_sold )) as alias4, min(( 
sales_fact___fact . dollars_sold )) "
-        + "as alias5, max(( sales_fact___fact . dollars_sold )) as alias6]";
+    String expected = "[sum((sales_fact___fact.dollars_sold)) as alias1, "
+        + "sum((sales_fact___fact.dollars_sold)) as alias2, "
+        + "sum((sales_fact___fact.units_sold)) as alias3, "
+        + "avg((sales_fact___fact.dollars_sold)) as alias4, 
min((sales_fact___fact.dollars_sold)) "
+        + "as alias5, max((sales_fact___fact.dollars_sold)) as alias6]";
     Assert.assertEquals(expected, actual);
   }
 
@@ -1274,19 +1274,19 @@ public class TestColumnarSQLRewriter {
       String fromStringAfterRewrite = HQLParser.getString(rewriter.fromAST);
       log.info("fromStringAfterRewrite:{}", fromStringAfterRewrite);
 
-      assertEquals(HQLParser.getString(rewriter.getSelectAST()).trim(), "( t1 
. id1 ), ( t2 . id2 ), ( t3 . id3 ),"
-        + " ( t1 . name1 ), ( t2 . name2 ), ( t3 . name3 ), count( 1 )",
+      assertEquals(HQLParser.getString(rewriter.getSelectAST()).trim(), 
"(t1.id1), (t2.id2), (t3.id3),"
+        + " (t1.name1), (t2.name2), (t3.name3), count(1)",
         "Found :" + HQLParser.getString(rewriter.getSelectAST()));
-      assertEquals(HQLParser.getString(rewriter.getWhereAST()).trim(), "(( t1 
. id1 ) = 100 )",
+      assertEquals(HQLParser.getString(rewriter.getWhereAST()).trim(), 
"((t1.id1) = 100)",
         "Found: " + HQLParser.getString(rewriter.getWhereAST()));
-      assertEquals(HQLParser.getString(rewriter.getGroupByAST()).trim(), "( t2 
. id2 )",
+      assertEquals(HQLParser.getString(rewriter.getGroupByAST()).trim(), 
"(t2.id2)",
         "Found: " + HQLParser.getString(rewriter.getGroupByAST()));
-      assertEquals(HQLParser.getString(rewriter.getOrderByAST()).trim(), "t3 . 
id3 asc",
+      assertEquals(HQLParser.getString(rewriter.getOrderByAST()).trim(), 
"t3.id3 asc",
         "Found: " + HQLParser.getString(rewriter.getOrderByAST()));
-      assertEquals(HQLParser.getString(rewriter.getHavingAST()).trim(), 
"(count(( t1 . id1 )) > 2 )",
+      assertEquals(HQLParser.getString(rewriter.getHavingAST()).trim(), 
"(count((t1.id1)) > 2)",
         "Found: " + HQLParser.getString(rewriter.getHavingAST()));
-      assertTrue(fromStringAfterRewrite.contains("( t1 . t2id ) = ( t2 . id2 
)")
-        && fromStringAfterRewrite.contains("( t2 . t3id ) = ( t3 . id3 )"), 
fromStringAfterRewrite);
+      assertTrue(fromStringAfterRewrite.contains("(t1.t2id) = (t2.id2)")
+        && fromStringAfterRewrite.contains("(t2.t3id) = (t3.id3)"), 
fromStringAfterRewrite);
       assertFalse(fromStringAfterRewrite.contains(testDB), 
fromStringAfterRewrite);
       assertTrue(fromStringAfterRewrite.contains("testdb"), 
fromStringAfterRewrite);
       assertTrue(fromStringAfterRewrite.contains("testtable_1") && 
fromStringAfterRewrite.contains("testtable_2")

Reply via email to