You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lens.apache.org by pr...@apache.org on 2015/04/28 10:43:02 UTC

[1/2] incubator-lens git commit: LENS-244: make hsql db read only for jdbc driver in lens examples

Repository: incubator-lens
Updated Branches:
  refs/heads/master 7b670872c -> 32fb75898


LENS-244: make hsql db read only for jdbc driver in lens examples


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

Branch: refs/heads/master
Commit: aca5ced58966e2517451b06d5bdf3d577835a8fe
Parents: 7b67087
Author: Rajat Khandelwal <ra...@gmail.com>
Authored: Tue Apr 28 14:10:53 2015 +0530
Committer: Rajat Khandelwal <ra...@gmail.com>
Committed: Tue Apr 28 14:10:53 2015 +0530

----------------------------------------------------------------------
 tools/conf-pseudo-distr/server/jdbcdriver-site.xml | 2 +-
 tools/conf/server/jdbcdriver-site.xml              | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-lens/blob/aca5ced5/tools/conf-pseudo-distr/server/jdbcdriver-site.xml
----------------------------------------------------------------------
diff --git a/tools/conf-pseudo-distr/server/jdbcdriver-site.xml b/tools/conf-pseudo-distr/server/jdbcdriver-site.xml
index 116fddf..37540dd 100644
--- a/tools/conf-pseudo-distr/server/jdbcdriver-site.xml
+++ b/tools/conf-pseudo-distr/server/jdbcdriver-site.xml
@@ -28,7 +28,7 @@
   </property>
   <property>
     <name>lens.driver.jdbc.db.uri</name>
-    <value>jdbc:hsqldb:/tmp/db-storage.db;MODE=MYSQL</value>
+    <value>jdbc:hsqldb:/tmp/db-storage.db;MODE=MYSQL;readonly=true</value>
   </property>
   <property>
     <name>lens.driver.jdbc.db.user</name>

http://git-wip-us.apache.org/repos/asf/incubator-lens/blob/aca5ced5/tools/conf/server/jdbcdriver-site.xml
----------------------------------------------------------------------
diff --git a/tools/conf/server/jdbcdriver-site.xml b/tools/conf/server/jdbcdriver-site.xml
index 116fddf..37540dd 100644
--- a/tools/conf/server/jdbcdriver-site.xml
+++ b/tools/conf/server/jdbcdriver-site.xml
@@ -28,7 +28,7 @@
   </property>
   <property>
     <name>lens.driver.jdbc.db.uri</name>
-    <value>jdbc:hsqldb:/tmp/db-storage.db;MODE=MYSQL</value>
+    <value>jdbc:hsqldb:/tmp/db-storage.db;MODE=MYSQL;readonly=true</value>
   </property>
   <property>
     <name>lens.driver.jdbc.db.user</name>


[2/2] incubator-lens git commit: LENS-433: Fix HQLParser issues regarding cast statement and types like DOLLAR, DIGIT

Posted by pr...@apache.org.
LENS-433: Fix HQLParser issues regarding cast statement and types like DOLLAR, DIGIT


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

Branch: refs/heads/master
Commit: 32fb758984f3f249e8322cf9b2758fbc1f1088c5
Parents: aca5ced
Author: Rajat Khandelwal <ra...@gmail.com>
Authored: Tue Apr 28 14:12:51 2015 +0530
Committer: Rajat Khandelwal <ra...@gmail.com>
Committed: Tue Apr 28 14:12:51 2015 +0530

----------------------------------------------------------------------
 .../org/apache/lens/cube/parse/HQLParser.java   | 114 ++++++++++++++++---
 .../apache/lens/cube/parse/TestHQLParser.java   |  28 +++++
 2 files changed, 127 insertions(+), 15 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-lens/blob/32fb7589/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 25e6353..11eb345 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
@@ -19,7 +19,6 @@
 package org.apache.lens.cube.parse;
 
 import static org.apache.hadoop.hive.ql.parse.HiveParser.*;
-import static org.apache.hadoop.hive.ql.parse.HiveParser.Number;
 
 import java.io.IOException;
 import java.lang.reflect.Field;
@@ -67,6 +66,7 @@ public final class HQLParser {
   public static final Set<Integer> BINARY_OPERATORS;
   public static final Set<Integer> ARITHMETIC_OPERATORS;
   public static final Set<Integer> UNARY_OPERATORS;
+  public static final Set<Integer> PRIMITIVE_TYPES;
 
   static {
     HashSet<Integer> ops = new HashSet<Integer>();
@@ -105,6 +105,24 @@ public final class HQLParser {
     unaryOps.add(KW_NOT);
     unaryOps.add(TILDE);
     UNARY_OPERATORS = Collections.unmodifiableSet(unaryOps);
+
+    HashSet<Integer> primitiveTypes = new HashSet<Integer>();
+    primitiveTypes.add(TOK_TINYINT);
+    primitiveTypes.add(TOK_SMALLINT);
+    primitiveTypes.add(TOK_INT);
+    primitiveTypes.add(TOK_BIGINT);
+    primitiveTypes.add(TOK_BOOLEAN);
+    primitiveTypes.add(TOK_FLOAT);
+    primitiveTypes.add(TOK_DOUBLE);
+    primitiveTypes.add(TOK_DATE);
+    primitiveTypes.add(TOK_DATETIME);
+    primitiveTypes.add(TOK_TIMESTAMP);
+    primitiveTypes.add(TOK_STRING);
+    primitiveTypes.add(TOK_BINARY);
+    primitiveTypes.add(TOK_DECIMAL);
+    primitiveTypes.add(TOK_VARCHAR);
+    primitiveTypes.add(TOK_CHAR);
+    PRIMITIVE_TYPES = Collections.unmodifiableSet(primitiveTypes);
   }
 
   public static boolean isArithmeticOp(int tokenType) {
@@ -382,7 +400,53 @@ public final class HQLParser {
       buf.append("[");
       toInfixString((ASTNode) root.getChild(1), buf);
       buf.append("]");
-
+    } else if (PRIMITIVE_TYPES.contains(rootType)) {
+      if (rootType == TOK_TINYINT) {
+        buf.append("tinyint");
+      } else if (rootType == TOK_SMALLINT) {
+        buf.append("smallint");
+      } else if (rootType == TOK_INT) {
+        buf.append("int");
+      } else if (rootType == TOK_BIGINT) {
+        buf.append("bigint");
+      } else if (rootType == TOK_BOOLEAN) {
+        buf.append("boolean");
+      } else if (rootType == TOK_FLOAT) {
+        buf.append("float");
+      } else if (rootType == TOK_DOUBLE) {
+        buf.append("double");
+      } else if (rootType == TOK_DATE) {
+        buf.append("date");
+      } else if (rootType == TOK_DATETIME) {
+        buf.append("datetime");
+      } else if (rootType == TOK_TIMESTAMP) {
+        buf.append("timestamp");
+      } else if (rootType == TOK_STRING) {
+        buf.append("string");
+      } else if (rootType == TOK_BINARY) {
+        buf.append("binary");
+      } else if (rootType == TOK_DECIMAL) {
+        buf.append("decimal");
+        if (root.getChildCount() >= 1) {
+          buf.append("(").append(root.getChild(0).getText());
+          if (root.getChildCount() == 2) {
+            buf.append(",").append(root.getChild(1).getText());
+          }
+          buf.append(")");
+        }
+      } else if (rootType == TOK_VARCHAR) {
+        buf.append("varchar");
+        if (root.getChildCount() >= 1) {
+          buf.append("(").append(root.getChild(0).getText()).append(")");
+        }
+      } else if (rootType == TOK_CHAR) {
+        buf.append("char");
+        if (root.getChildCount() >= 1) {
+          buf.append("(").append(root.getChild(0).getText()).append(")");
+        }
+      } else {
+        buf.append(rootText);
+      }
     } else if (TOK_FUNCTION == root.getToken().getType()) {
       // Handle UDFs, conditional operators.
       functionString(root, buf);
@@ -456,8 +520,13 @@ public final class HQLParser {
       }
 
     } else {
-      for (int i = 0; i < root.getChildCount(); i++) {
-        toInfixString((ASTNode) root.getChild(i), buf);
+      if (root.getChildCount() > 0) {
+        for (int i = 0; i < root.getChildCount(); i++) {
+          toInfixString((ASTNode) root.getChild(i), buf);
+        }
+      } else {
+        // for other types which are not handled above
+        buf.append(rootText);
       }
     }
   }
@@ -566,20 +635,35 @@ public final class HQLParser {
       }
 
       buf.append(")");
-
+    } else if (findNodeByPath(root, KW_CAST) != null) {
+      buf.append("cast");
+      toInfixString((ASTNode) root.getChild(1), buf);
+      buf.append(" as ");
+      toInfixString((ASTNode) root.getChild(0), buf);
     } else {
-      // Normal UDF
-      String fname = ((ASTNode) root.getChild(0)).getText();
-      // Function name
-      buf.append(fname.toLowerCase()).append("(");
-      // Arguments separated by comma
-      for (int i = 1; i < root.getChildCount(); i++) {
-        toInfixString((ASTNode) root.getChild(i), buf);
-        if (i != root.getChildCount() - 1) {
-          buf.append(", ");
+      int rootType = ((ASTNode) root.getChild(0)).getToken().getType();
+      if (PRIMITIVE_TYPES.contains(rootType)) {
+        // cast expression maps to the following ast
+        // KW_CAST LPAREN expression KW_AS primitiveType RPAREN -> ^(TOK_FUNCTION primitiveType expression)
+        buf.append("cast(");
+        toInfixString((ASTNode) root.getChild(1), buf);
+        buf.append(" as ");
+        toInfixString((ASTNode) root.getChild(0), buf);
+        buf.append(")");
+      } else {
+        // Normal UDF
+        String fname = ((ASTNode) root.getChild(0)).getText();
+        // Function name
+        buf.append(fname.toLowerCase()).append("(");
+        // Arguments separated by comma
+        for (int i = 1; i < root.getChildCount(); i++) {
+          toInfixString((ASTNode) root.getChild(i), buf);
+          if (i != root.getChildCount() - 1) {
+            buf.append(", ");
+          }
         }
+        buf.append(")");
       }
-      buf.append(")");
     }
   }
 

http://git-wip-us.apache.org/repos/asf/incubator-lens/blob/32fb7589/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 bb332dc..8761c51 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
@@ -24,6 +24,7 @@ import static org.apache.hadoop.hive.ql.parse.HiveParser.*;
 import org.apache.hadoop.hive.conf.HiveConf;
 import org.apache.hadoop.hive.ql.parse.ASTNode;
 import org.apache.hadoop.hive.ql.parse.HiveParser;
+import org.apache.hadoop.hive.ql.parse.ParseException;
 
 import org.testng.Assert;
 import org.testng.annotations.Test;
@@ -313,4 +314,31 @@ public class TestHQLParser {
     Assert.assertFalse(HQLParser.equalsAST(literalExpr1, literalExpr4));
   }
 
+  @Test
+  public void testCastStatement() throws ParseException {
+    String castSelect = "cast(( a  +  b ) as tinyint), cast(( a  +  b ) as smallint), cast(( a  +  b ) as int),"
+      + " cast(( a  +  b ) as bigint), cast(( a  +  b ) as float), cast(( a  +  b ) as double),"
+      + " cast(( a  +  b ) as boolean), cast( a  as date), cast( b  as datetime), cast( a  as timestamp),"
+      + " cast(( a  +  b ) as string), cast(( a  +  b ) as binary), cast(( a  +  b ) as decimal(3,6)),"
+      + " cast(( a  +  b ) as decimal(5)), cast(( a  +  b ) as varchar(10)), cast(( a  +  b ) as char(20)),"
+      + " cast( '17.29'  as decimal(4,2))";
+    castSelect = "3.1415926BD";
+    String query = "select " + castSelect + " from table limit 1";
+    ASTNode tree = HQLParser.parseHQL(query, conf);
+    System.out.println(tree.dump());
+    ASTNode selectAST = HQLParser.findNodeByPath(tree, TOK_INSERT, TOK_SELECT);
+    String genQuery = HQLParser.getString(selectAST);
+    Assert.assertEquals(genQuery, castSelect);
+  }
+
+  @Test
+  public void testOtherStatements() throws ParseException {
+    String select = "3.1415926BD";
+    String query = "select " + select + " from table limit 1";
+    ASTNode tree = HQLParser.parseHQL(query, conf);
+    ASTNode selectAST = HQLParser.findNodeByPath(tree, TOK_INSERT, TOK_SELECT);
+    String genQuery = HQLParser.getString(selectAST);
+    Assert.assertEquals(genQuery, select);
+  }
+
 }