You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by dm...@apache.org on 2015/09/01 14:11:01 UTC

[1/2] hive git commit: Patch HIVE-11536

Repository: hive
Updated Branches:
  refs/heads/master 8f930e588 -> 9763c9dd3


Patch HIVE-11536


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

Branch: refs/heads/master
Commit: da95f6336acf9ab6a660f17c2a7555587f903038
Parents: ab03dc9
Author: Dmitry Tolpeko <dm...@gmail.com>
Authored: Thu Aug 20 09:30:19 2015 -0700
Committer: Dmitry Tolpeko <dm...@gmail.com>
Committed: Thu Aug 20 09:30:19 2015 -0700

----------------------------------------------------------------------
 .../antlr4/org/apache/hive/hplsql/Hplsql.g4     |  85 +++++++++--
 .../java/org/apache/hive/hplsql/Column.java     |  65 +++++++++
 .../main/java/org/apache/hive/hplsql/Exec.java  | 142 +++++++++++++++----
 .../java/org/apache/hive/hplsql/Expression.java |   6 +
 .../main/java/org/apache/hive/hplsql/Meta.java  | 118 +++++++++++++++
 .../main/java/org/apache/hive/hplsql/Row.java   |  97 +++++++++++++
 .../java/org/apache/hive/hplsql/Select.java     |  16 ++-
 .../main/java/org/apache/hive/hplsql/Stmt.java  |  73 ++++++----
 .../main/java/org/apache/hive/hplsql/Var.java   |  37 ++++-
 .../apache/hive/hplsql/functions/Function.java  |  13 ++
 .../org/apache/hive/hplsql/TestHplsqlLocal.java |   7 +-
 .../apache/hive/hplsql/TestHplsqlOffline.java   |   2 +-
 .../src/test/queries/db/rowtype_attribute.sql   |  22 +++
 hplsql/src/test/queries/db/type_attribute.sql   |   8 ++
 .../local/create_procedure_no_params.sql        |  19 +++
 .../test/queries/offline/create_table_ora.sql   |  55 ++++++-
 .../test/results/db/rowtype_attribute.out.txt   |  42 ++++++
 .../src/test/results/db/type_attribute.out.txt  |  15 ++
 .../local/create_procedure_no_params.out.txt    |  26 ++++
 .../results/offline/create_table_ora.out.txt    |  38 +++++
 20 files changed, 802 insertions(+), 84 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hive/blob/da95f633/hplsql/src/main/antlr4/org/apache/hive/hplsql/Hplsql.g4
----------------------------------------------------------------------
diff --git a/hplsql/src/main/antlr4/org/apache/hive/hplsql/Hplsql.g4 b/hplsql/src/main/antlr4/org/apache/hive/hplsql/Hplsql.g4
index 6027206..ff772fe 100644
--- a/hplsql/src/main/antlr4/org/apache/hive/hplsql/Hplsql.g4
+++ b/hplsql/src/main/antlr4/org/apache/hive/hplsql/Hplsql.g4
@@ -138,7 +138,7 @@ break_stmt :
      ;
      
 call_stmt :
-       T_CALL ident (T_OPEN_P expr_func_params T_CLOSE_P | expr_func_params)?
+       T_CALL ident (T_OPEN_P expr_func_params? T_CLOSE_P | expr_func_params)?
      ;
      
 declare_stmt :          // Declaration statement
@@ -211,11 +211,18 @@ create_table_column_inline_cons :
        dtype_default
      | T_NOT? T_NULL
      | T_PRIMARY T_KEY
+     | T_UNIQUE
+     | T_REFERENCES table_name T_OPEN_P ident T_CLOSE_P create_table_fk_action*
      | T_IDENTITY T_OPEN_P L_INT (T_COMMA L_INT)* T_CLOSE_P
      ;
      
 create_table_column_cons :
-       T_PRIMARY T_KEY T_CLUSTERED? T_OPEN_P ident (T_ASC | T_DESC)? (T_COMMA ident (T_ASC | T_DESC)?)*  T_CLOSE_P index_storage_clause?
+       T_PRIMARY T_KEY T_CLUSTERED? T_OPEN_P ident (T_ASC | T_DESC)? (T_COMMA ident (T_ASC | T_DESC)?)* T_CLOSE_P index_storage_clause?
+     | T_FOREIGN T_KEY T_OPEN_P ident (T_COMMA ident)* T_CLOSE_P T_REFERENCES table_name T_OPEN_P ident (T_COMMA ident)* T_CLOSE_P create_table_fk_action* 
+    ;
+    
+create_table_fk_action :
+       T_ON (T_UPDATE | T_DELETE) (T_NO T_ACTION | T_RESTRICT | T_SET T_NULL | T_SET T_DEFAULT | T_CASCADE)
      ;
 
 create_table_options :
@@ -224,11 +231,21 @@ create_table_options :
      
 create_table_options_item :
        T_ON T_COMMIT (T_DELETE | T_PRESERVE) T_ROWS 
+     | create_table_options_ora_item
      | create_table_options_db2_item  
      | create_table_options_hive_item  
      | create_table_options_mssql_item  
      ;
 
+create_table_options_ora_item :
+       T_SEGMENT T_CREATION (T_IMMEDIATE | T_DEFERRED)
+     | (T_PCTFREE | T_PCTUSED | T_INITRANS | T_MAXTRANS) L_INT 
+     | T_NOCOMPRESS 
+     | (T_LOGGING | T_NOLOGGING)
+     | T_STORAGE T_OPEN_P (ident | L_INT)+ T_CLOSE_P
+     | T_TABLESPACE ident
+     ;
+
 create_table_options_db2_item :
        T_IN ident
      | T_WITH T_REPLACE
@@ -282,11 +299,11 @@ dtype :                  // Data types
      | T_TINYINT
      | T_VARCHAR
      | T_VARCHAR2
-     | L_ID             // User-defined data type
+     | L_ID ('%' (T_TYPE | T_ROWTYPE))?             // User-defined or derived data type
      ;
      
 dtype_len :             // Data type length or size specification
-       T_OPEN_P (L_INT | T_MAX) (T_COMMA L_INT)? T_CLOSE_P
+       T_OPEN_P (L_INT | T_MAX) (T_CHAR | T_BYTE)? (T_COMMA L_INT)? T_CLOSE_P
      ;
      
 dtype_attr :
@@ -300,7 +317,7 @@ dtype_default :         // Default clause in variable declaration
      ;
      
 create_function_stmt : 
-      (T_ALTER | T_CREATE (T_OR T_REPLACE)? | T_REPLACE) T_FUNCTION ident create_routine_params? create_function_return (T_AS | T_IS)? single_block_stmt 
+      (T_ALTER | T_CREATE (T_OR T_REPLACE)? | T_REPLACE)? T_FUNCTION ident create_routine_params? create_function_return (T_AS | T_IS)? single_block_stmt 
     ;
      
 create_function_return :
@@ -308,7 +325,7 @@ create_function_return :
      ;
 
 create_procedure_stmt : 
-      (T_ALTER | T_CREATE (T_OR T_REPLACE)? | T_REPLACE) (T_PROCEDURE | T_PROC) ident create_routine_params? create_routine_options? (T_AS | T_IS)? label? proc_block (ident T_SEMICOLON)? 
+      (T_ALTER | T_CREATE (T_OR T_REPLACE)? | T_REPLACE)? (T_PROCEDURE | T_PROC) ident create_routine_params? create_routine_options? (T_AS | T_IS)? label? proc_block (ident T_SEMICOLON)? 
     ;
 
 create_routine_params :
@@ -598,7 +615,7 @@ select_list_item :
      ;
      
 select_list_alias :
-       T_AS? L_ID
+       {!_input.LT(1).getText().equalsIgnoreCase("FROM")}? T_AS? ident
      | T_OPEN_P T_TITLE L_S_STRING T_CLOSE_P
      ;
      
@@ -899,7 +916,7 @@ expr_func_params :
      ;
 
 func_param : 
-       (ident T_EQUAL T_GREATER?)? expr  
+       {!_input.LT(1).getText().equalsIgnoreCase("INTO")}? (ident T_EQUAL T_GREATER?)? expr  
      ;     
      
 hive :
@@ -963,7 +980,8 @@ null_const :                              // NULL constant
      ;
      
 non_reserved_words :                      // Tokens that are not reserved words and can be used as identifiers
-       T_ACTIVITY_COUNT
+       T_ACTION 
+     | T_ACTIVITY_COUNT
      | T_ALL 
      | T_ALLOCATE
      | T_ALTER
@@ -982,8 +1000,10 @@ non_reserved_words :                      // Tokens that are not reserved words
      | T_BIT
      | T_BREAK   
      | T_BY    
+     | T_BYTE
      | T_CALL     
-     | T_CALLER      
+     | T_CALLER 
+     | T_CASCADE     
      | T_CASE   
      | T_CASESPECIFIC
      | T_CAST
@@ -1002,6 +1022,7 @@ non_reserved_words :                      // Tokens that are not reserved words
      | T_COUNT   
      | T_COUNT_BIG   
      | T_CREATE
+     | T_CREATION
      | T_CREATOR
      | T_CS
      | T_CUME_DIST
@@ -1019,6 +1040,7 @@ non_reserved_words :                      // Tokens that are not reserved words
      | T_DECIMAL  
      | T_DECLARE 
      | T_DEFAULT  
+     | T_DEFERRED
      | T_DEFINED
      | T_DEFINER
      | T_DELETE
@@ -1049,6 +1071,7 @@ non_reserved_words :                      // Tokens that are not reserved words
      | T_FIRST_VALUE     
      | T_FLOAT        
      | T_FOR  
+     | T_FOREIGN
      | T_FORMAT     
      | T_FOUND        
      | T_FROM   
@@ -1071,6 +1094,7 @@ non_reserved_words :                      // Tokens that are not reserved words
      | T_IN   
      | T_INCLUDE
      | T_INDEX     
+     | T_INITRANS
      | T_INNER
      | T_INOUT
      | T_INSERT
@@ -1097,11 +1121,13 @@ non_reserved_words :                      // Tokens that are not reserved words
      | T_LOCAL     
      | T_LOCATOR
      | T_LOCATORS
-     | T_LOGGED     
+     | T_LOGGED    
+     | T_LOGGING     
      | T_LOOP    
      | T_MAP  
      | T_MATCHED     
-     | T_MAX     
+     | T_MAX   
+     | T_MAXTRANS     
      | T_MERGE
      | T_MESSAGE_TEXT
      | T_MICROSECOND
@@ -1110,7 +1136,10 @@ non_reserved_words :                      // Tokens that are not reserved words
      | T_MULTISET
      | T_NCHAR
      | T_NVARCHAR
+     | T_NO
+     | T_NOCOMPRESS
      | T_NOCOUNT
+     | T_NOLOGGING
      | T_NOT         
      | T_NOTFOUND     
      // T_NULL reserved word       
@@ -1129,18 +1158,22 @@ non_reserved_words :                      // Tokens that are not reserved words
      | T_OVERWRITE
      | T_OWNER
      | T_PART_LOC 
-     | T_PARTITION     
+     | T_PARTITION  
+     | T_PCTFREE
+     | T_PCTUSED     
      | T_PRESERVE
      | T_PRIMARY
      | T_PRINT 
      | T_PROC
      | T_PROCEDURE   
      | T_QUOTED_IDENTIFIER
-     | T_RANK    
+     | T_RANK  
+     | T_REFERENCES     
      | T_REGEXP
      | T_RR     
      | T_REPLACE
      | T_RESIGNAL
+     | T_RESTRICT
      | T_RESULT
      | T_RESULT_SET_LOCATOR
      | T_RETURN       
@@ -1156,6 +1189,7 @@ non_reserved_words :                      // Tokens that are not reserved words
      | T_ROW_NUMBER
      | T_SCHEMA
      | T_SECURITY
+     | T_SEGMENT
      | T_SEL          
      | T_SELECT       
      | T_SET 
@@ -1170,12 +1204,14 @@ non_reserved_words :                      // Tokens that are not reserved words
      | T_SQLWARNING   
      | T_STEP    
      | T_STDEV     
+     | T_STORAGE
      | T_STRING    
      | T_SUBSTRING
      | T_SUM
      | T_SYSDATE 
      | T_SYS_REFCURSOR     
      | T_TABLE
+     | T_TABLESPACE
      | T_TEMPORARY
      | T_TERMINATED
      | T_TEXTIMAGE_ON
@@ -1210,6 +1246,7 @@ non_reserved_words :                      // Tokens that are not reserved words
      ;
 
 // Lexer rules
+T_ACTION          : A C T I O N ; 
 T_ALL             : A L L ;
 T_ALLOCATE        : A L L O C A T E ;
 T_ALTER           : A L T E R ;
@@ -1228,8 +1265,10 @@ T_BIGINT          : B I G I N T ;
 T_BIT             : B I T ;
 T_BREAK           : B R E A K ;
 T_BY              : B Y ;
+T_BYTE            : B Y T E ; 
 T_CALL            : C A L L ;
 T_CALLER          : C A L L E R ;
+T_CASCADE         : C A S C A D E ; 
 T_CASE            : C A S E ;
 T_CASESPECIFIC    : C A S E S P E C I F I C ; 
 T_CAST            : C A S T ;
@@ -1248,6 +1287,7 @@ T_CONTINUE        : C O N T I N U E ;
 T_COUNT           : C O U N T ;
 T_COUNT_BIG       : C O U N T '_' B I G;
 T_CREATE          : C R E A T E ;
+T_CREATION        : C R E A T I O N ; 
 T_CREATOR         : C R E A T O R ;
 T_CS              : C S;
 T_CURRENT         : C U R R E N T ;
@@ -1261,6 +1301,7 @@ T_DEC             : D E C ;
 T_DECIMAL         : D E C I M A L ;
 T_DECLARE         : D E C L A R E ;
 T_DEFAULT         : D E F A U L T ;
+T_DEFERRED        : D E F E R R E D ; 
 T_DEFINED         : D E F I N E D ; 
 T_DEFINER         : D E F I N E R ;
 T_DELETE          : D E L E T E ;
@@ -1289,6 +1330,7 @@ T_FIELDS          : F I E L D S ;
 T_FILE            : F I L E ;
 T_FLOAT           : F L O A T ;
 T_FOR             : F O R ;
+T_FOREIGN         : F O R E I G N ; 
 T_FORMAT          : F O R M A T ;
 T_FOUND           : F O U N D ;
 T_FROM            : F R O M ; 
@@ -1311,6 +1353,7 @@ T_IMMEDIATE       : I M M E D I A T E ;
 T_IN              : I N ;
 T_INCLUDE         : I N C L U D E ;
 T_INDEX           : I N D E X ;
+T_INITRANS        : I N I T R A N S ;
 T_INNER           : I N N E R ; 
 T_INOUT           : I N O U T;
 T_INSERT          : I N S E R T ;
@@ -1335,10 +1378,12 @@ T_LOCAL           : L O C A L ;
 T_LOCATOR         : L O C A T O R ; 
 T_LOCATORS        : L O C A T O R S ; 
 T_LOGGED          : L O G G E D ; 
+T_LOGGING         : L O G G I N G ; 
 T_LOOP            : L O O P ;
 T_MAP             : M A P ; 
 T_MATCHED         : M A T C H E D ; 
 T_MAX             : M A X ;
+T_MAXTRANS        : M A X T R A N S ; 
 T_MERGE           : M E R G E ; 
 T_MESSAGE_TEXT    : M E S S A G E '_' T E X T ;
 T_MICROSECOND     : M I C R O S E C O N D ;
@@ -1347,7 +1392,10 @@ T_MIN             : M I N ;
 T_MULTISET        : M U L T I S E T ; 
 T_NCHAR           : N C H A R ; 
 T_NVARCHAR        : N V A R C H A R ; 
+T_NO              : N O ;
 T_NOCOUNT         : N O C O U N T ;
+T_NOCOMPRESS      : N O C O M P R E S S ; 
+T_NOLOGGING       : N O L O G G I N G ;
 T_NOT             : N O T ;
 T_NOTFOUND        : N O T F O U N D ; 
 T_NULL            : N U L L ;
@@ -1366,15 +1414,19 @@ T_OVER            : O V E R ;
 T_OVERWRITE       : O V E R W R I T E ; 
 T_OWNER           : O W N E R ; 
 T_PARTITION       : P A R T I T I O N ; 
+T_PCTFREE         : P C T F R E E ; 
+T_PCTUSED         : P C T U S E D ;
 T_PRESERVE        : P R E S E R V E ; 
 T_PRIMARY         : P R I M A R Y ;
 T_PRINT           : P R I N T ; 
 T_PROC            : P R O C ;
 T_PROCEDURE       : P R O C E D U R E;
 T_QUOTED_IDENTIFIER : Q U O T E D '_' I D E N T I F I E R ;
+T_REFERENCES      : R E F E R E N C E S ; 
 T_REGEXP          : R E G E X P ;
 T_REPLACE         : R E P L A C E ; 
 T_RESIGNAL        : R E S I G N A L ;
+T_RESTRICT        : R E S T R I C T ; 
 T_RESULT          : R E S U L T ; 
 T_RESULT_SET_LOCATOR : R E S U L T '_' S E T '_' L O C A T O R ;
 T_RETURN          : R E T U R N ;
@@ -1385,12 +1437,14 @@ T_RLIKE           : R L I K E ;
 T_ROLLBACK        : R O L L B A C K ;
 T_ROW             : R O W ; 
 T_ROWS            : R O W S ; 
+T_ROWTYPE         : R O W T Y P E ; 
 T_ROW_COUNT       : R O W '_' C O U N T ;
 T_RR              : R R;
 T_RS              : R S ;
 T_TRIM            : T R I M ;
 T_SCHEMA          : S C H E M A ;
 T_SECURITY        : S E C U R I T Y ; 
+T_SEGMENT         : S E G M E N T ; 
 T_SEL             : S E L ;
 T_SELECT          : S E L E C T ; 
 T_SET             : S E T ;
@@ -1404,11 +1458,13 @@ T_SQLINSERT       : S Q L I N S E R T ;
 T_SQLSTATE        : S Q L S T A T E ;
 T_SQLWARNING      : S Q L W A R N I N G ;
 T_STEP            : S T E P ; 
+T_STORAGE         : S T O R A G E ; 
 T_STRING          : S T R I N G ;
 T_SUBSTRING       : S U B S T R I N G ; 
 T_SUM             : S U M ;
 T_SYS_REFCURSOR   : S Y S '_' R E F C U R S O R ; 
 T_TABLE           : T A B L E ;
+T_TABLESPACE      : T A B L E S P A C E ; 
 T_TEMPORARY       : T E M P O R A R Y ;
 T_TERMINATED      : T E R M I N A T E D ; 
 T_TEXTIMAGE_ON    : T E X T I M A G E '_' O N ;
@@ -1418,6 +1474,7 @@ T_TINYINT         : T I N Y I N T ;
 T_TITLE           : T I T L E ;
 T_TO              : T O ; 
 T_TOP             : T O P ;
+T_TYPE            : T Y P E ; 
 T_UNION           : U N I O N ;
 T_UNIQUE          : U N I Q U E ;
 T_UPDATE          : U P D A T E ; 

http://git-wip-us.apache.org/repos/asf/hive/blob/da95f633/hplsql/src/main/java/org/apache/hive/hplsql/Column.java
----------------------------------------------------------------------
diff --git a/hplsql/src/main/java/org/apache/hive/hplsql/Column.java b/hplsql/src/main/java/org/apache/hive/hplsql/Column.java
new file mode 100644
index 0000000..252a870
--- /dev/null
+++ b/hplsql/src/main/java/org/apache/hive/hplsql/Column.java
@@ -0,0 +1,65 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.hive.hplsql;
+
+/**
+ * Table column
+ */
+public class Column {
+  
+  String name;
+  String type;
+  Var value;
+  
+  Column(String name, String type) {
+    this.name = name;
+    this.type = type;
+  }
+  
+  /**
+   * Set the column value
+   */
+  void setValue(Var value) {
+    this.value = value;
+  }
+
+  /**
+   * Get the column name
+   */
+  String getName() {
+    return name;
+  }
+  
+  /**
+   * Get the column type
+   */
+  String getType() {
+    return type;
+  }
+    
+  /**
+   * Get the column value
+   */
+  Var getValue() {
+    return value;
+  }
+}
+
+
+

http://git-wip-us.apache.org/repos/asf/hive/blob/da95f633/hplsql/src/main/java/org/apache/hive/hplsql/Exec.java
----------------------------------------------------------------------
diff --git a/hplsql/src/main/java/org/apache/hive/hplsql/Exec.java b/hplsql/src/main/java/org/apache/hive/hplsql/Exec.java
index 268c218..f5592e1 100644
--- a/hplsql/src/main/java/org/apache/hive/hplsql/Exec.java
+++ b/hplsql/src/main/java/org/apache/hive/hplsql/Exec.java
@@ -30,6 +30,8 @@ import java.util.Map.Entry;
 import java.util.Stack;
 import java.util.Iterator;
 import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.ResultSetMetaData;
 import java.sql.SQLException;
 
 import org.antlr.v4.runtime.ANTLRInputStream;
@@ -48,7 +50,7 @@ import org.apache.hive.hplsql.functions.*;
  */
 public class Exec extends HplsqlBaseVisitor<Integer> {
   
-  public static final String VERSION = "HPL/SQL 0.3.11";
+  public static final String VERSION = "HPL/SQL 0.3.13";
   public static final String SQLCODE = "SQLCODE";
   public static final String SQLSTATE = "SQLSTATE";
   public static final String HOSTCODE = "HOSTCODE";
@@ -96,6 +98,7 @@ public class Exec extends HplsqlBaseVisitor<Integer> {
   StringBuilder localUdf = new StringBuilder();
   boolean initRoutines = false;
   public boolean buildSql = false;
+  public boolean inCallStmt = false;
   boolean udfRegistered = false;
   boolean udfRun = false;
     
@@ -285,16 +288,29 @@ public class Exec extends HplsqlBaseVisitor<Integer> {
    * Find an existing variable by name 
    */
   public Var findVariable(String name) {
-    Scope cur = exec.currentScope;    
+    String name1 = name;
+    Scope cur = exec.currentScope;
+    ArrayList<String> qualified = exec.meta.splitIdentifier(name);
+    if (qualified != null) {
+      name1 = qualified.get(0); 
+    }
     String name2 = null;
     if (name.startsWith(":")) {
       name2 = name.substring(1);
-    }
+    }    
     while (cur != null) {
       for (Var v : cur.vars) {
-        if (name.equalsIgnoreCase(v.getName()) ||
+        if (name1.equalsIgnoreCase(v.getName()) ||
             (name2 != null && name2.equalsIgnoreCase(v.getName()))) {
-          return v;
+          if (qualified != null) {
+            if (v.type == Var.Type.ROW && v.value != null) {
+              Row row = (Row)v.value;
+              return row.getValue(qualified.get(1));
+            }
+          }
+          else {
+            return v;
+          }
         }  
       }      
       cur = cur.parent;
@@ -675,7 +691,7 @@ public class Exec extends HplsqlBaseVisitor<Integer> {
     conf = new Conf();
     conf.init();    
     conn = new Conn(this);
-    meta = new Meta();
+    meta = new Meta(this);
     initOptions();
     
     expr = new Expression(this);
@@ -1024,37 +1040,72 @@ public class Exec extends HplsqlBaseVisitor<Integer> {
    */
   @Override
   public Integer visitDeclare_var_item(HplsqlParser.Declare_var_itemContext ctx) { 
-    String type = getFormattedText(ctx.dtype());
+    String type = null;
+    Row row = null;
     String len = null;
     String scale = null;
     Var default_ = null;
-    if (ctx.dtype_len() != null) {
-      len = ctx.dtype_len().L_INT(0).getText();
-      if (ctx.dtype_len().L_INT(1) != null) {
-        scale = ctx.dtype_len().L_INT(1).getText();
+    if (ctx.dtype().T_ROWTYPE() != null) {
+      row = meta.getRowDataType(ctx, exec.conf.defaultConnection, ctx.dtype().L_ID().getText());
+      if (row == null) {
+        type = Var.DERIVED_ROWTYPE;
+      }
+    }
+    else {
+      type = getDataType(ctx);
+      if (ctx.dtype_len() != null) {
+        len = ctx.dtype_len().L_INT(0).getText();
+        if (ctx.dtype_len().L_INT(1) != null) {
+          scale = ctx.dtype_len().L_INT(1).getText();
+        }
+      }    
+      if (ctx.dtype_default() != null) {
+        default_ = evalPop(ctx.dtype_default());
       }
-    }    
-    if (ctx.dtype_default() != null) {
-      default_ = evalPop(ctx.dtype_default());
     }
 	  int cnt = ctx.ident().size();        // Number of variables declared with the same data type and default
 	  for (int i = 0; i < cnt; i++) {  	    
 	    String name = ctx.ident(i).getText();
-	    Var var = new Var(name, type, len, scale, default_);	     
-	    addVariable(var);		
-	    if (trace) {
-	      if (default_ != null) {
-	        trace(ctx, "DECLARE " + name + " " + type + " = " + var.toSqlString());
-	      }
-	      else {
-	        trace(ctx, "DECLARE " + name + " " + type);
+	    if (row == null) {
+	      Var var = new Var(name, type, len, scale, default_);	     
+	      addVariable(var);		
+	      if (trace) {
+	        if (default_ != null) {
+	          trace(ctx, "DECLARE " + name + " " + type + " = " + var.toSqlString());
+	        }
+	        else {
+	          trace(ctx, "DECLARE " + name + " " + type);
+	        }
 	      }
 	    }
+	    else {
+	      addVariable(new Var(name, row));
+	      if (trace) {
+          trace(ctx, "DECLARE " + name + " " + ctx.dtype().getText());
+        }
+	    }
 	  }	
 	  return 0;
   }
   
   /**
+   * Get the variable data type
+   */
+  String getDataType(HplsqlParser.Declare_var_itemContext ctx) {
+    String type = null;
+    if (ctx.dtype().T_TYPE() != null) {
+      type = meta.getDataType(ctx, exec.conf.defaultConnection, ctx.dtype().L_ID().getText());
+      if (type == null) {
+        type = Var.DERIVED_TYPE; 
+      }
+    }
+    else {
+      type = getFormattedText(ctx.dtype());
+    }
+    return type;
+  }
+  
+  /**
    * ALLOCATE CURSOR statement
    */
   @Override 
@@ -1179,6 +1230,11 @@ public class Exec extends HplsqlBaseVisitor<Integer> {
   }
   
   @Override 
+  public Integer visitCreate_table_options_ora_item(HplsqlParser.Create_table_options_ora_itemContext ctx) { 
+    return 0; 
+  }
+  
+  @Override 
   public Integer visitCreate_table_options_mssql_item(HplsqlParser.Create_table_options_mssql_itemContext ctx) { 
     return 0; 
   }
@@ -1457,16 +1513,24 @@ public class Exec extends HplsqlBaseVisitor<Integer> {
    */
   @Override 
   public Integer visitExec_stmt(HplsqlParser.Exec_stmtContext ctx) { 
-    return exec.stmt.exec(ctx); 
+    exec.inCallStmt = true;
+    Integer rc = exec.stmt.exec(ctx);
+    exec.inCallStmt = false;
+    return rc;
   }
   
   /**
    * CALL statement
    */
   @Override 
-  public Integer visitCall_stmt(HplsqlParser.Call_stmtContext ctx) { 
-    if (exec.function.execProc(ctx.expr_func_params(), ctx.ident().getText())) {
-      return 0;
+  public Integer visitCall_stmt(HplsqlParser.Call_stmtContext ctx) {
+    try {
+      exec.inCallStmt = true;
+      if (exec.function.execProc(ctx.expr_func_params(), ctx.ident().getText())) {
+        return 0;
+      }
+    } finally {
+      exec.inCallStmt = false;
     }
     return -1;
   }
@@ -1795,7 +1859,12 @@ public class Exec extends HplsqlBaseVisitor<Integer> {
       }
     }
     else {
-      exec.stackPush(new Var(Var.Type.IDENT, ident));
+      if (!exec.buildSql && !exec.inCallStmt && exec.function.isProc(ident) && exec.function.execProc(null, ident)) {
+        return 0;
+      }
+      else {
+        exec.stackPush(new Var(Var.Type.IDENT, ident));
+      }
     }
     return 0;
   }  
@@ -2041,6 +2110,25 @@ public class Exec extends HplsqlBaseVisitor<Integer> {
   }
   
   /**
+   * Trace values retrived from the database
+   */
+  public void trace(ParserRuleContext ctx, Var var, ResultSet rs, ResultSetMetaData rm, int idx) throws SQLException {
+    if (var.type != Var.Type.ROW) {
+      trace(ctx, "COLUMN: " + rm.getColumnName(idx) + ", " + rm.getColumnTypeName(idx));
+      trace(ctx, "SET " + var.getName() + " = " + var.toString());  
+    }
+    else {
+      Row row = (Row)var.value;
+      int cnt = row.size();
+      for (int j = 1; j <= cnt; j++) {
+        Var v = row.getValue(j - 1);
+        trace(ctx, "COLUMN: " + rm.getColumnName(j) + ", " + rm.getColumnTypeName(j));
+        trace(ctx, "SET " + v.getName() + " = " + v.toString());
+      }
+    }
+  }
+  
+  /**
    * Informational messages
    */
   public void info(ParserRuleContext ctx, String message) {

http://git-wip-us.apache.org/repos/asf/hive/blob/da95f633/hplsql/src/main/java/org/apache/hive/hplsql/Expression.java
----------------------------------------------------------------------
diff --git a/hplsql/src/main/java/org/apache/hive/hplsql/Expression.java b/hplsql/src/main/java/org/apache/hive/hplsql/Expression.java
index f811626..7269798 100644
--- a/hplsql/src/main/java/org/apache/hive/hplsql/Expression.java
+++ b/hplsql/src/main/java/org/apache/hive/hplsql/Expression.java
@@ -327,6 +327,9 @@ public class Expression {
     else if (v1.type == Type.TIMESTAMP && v2.type == Type.INTERVAL) {
       exec.stackPush(new Var(((Interval)v2.value).timestampChange((Timestamp)v1.value, true /*add*/), v1.scale));
     }
+    else {
+      evalNull();
+    }
   }
 
   /**
@@ -350,6 +353,9 @@ public class Expression {
     else if (v1.type == Type.TIMESTAMP && v2.type == Type.INTERVAL) {
       exec.stackPush(new Var(((Interval)v2.value).timestampChange((Timestamp)v1.value, false /*subtract*/), v1.scale));
     }
+    else {
+      evalNull();
+    }
   }
   
   /**

http://git-wip-us.apache.org/repos/asf/hive/blob/da95f633/hplsql/src/main/java/org/apache/hive/hplsql/Meta.java
----------------------------------------------------------------------
diff --git a/hplsql/src/main/java/org/apache/hive/hplsql/Meta.java b/hplsql/src/main/java/org/apache/hive/hplsql/Meta.java
index 97d0fd2..485bcdf 100644
--- a/hplsql/src/main/java/org/apache/hive/hplsql/Meta.java
+++ b/hplsql/src/main/java/org/apache/hive/hplsql/Meta.java
@@ -18,12 +18,106 @@
 
 package org.apache.hive.hplsql;
 
+import java.sql.ResultSet;
 import java.util.ArrayList;
+import java.util.HashMap;
+
+import org.antlr.v4.runtime.ParserRuleContext;
 
 /**
  * Metadata
  */
 public class Meta {
+    
+  HashMap<String, HashMap<String, Row>> dataTypes = new HashMap<String, HashMap<String, Row>>();
+  
+  Exec exec;
+  boolean trace = false;  
+  boolean info = false;
+  
+  Meta(Exec e) {
+    exec = e;  
+    trace = exec.getTrace();
+    info = exec.getInfo();
+  }
+  
+  /**
+   * Get the data type of column (column name is qualified i.e. schema.table.column)
+   */
+  String getDataType(ParserRuleContext ctx, String conn, String column) {
+    String type = null;
+    HashMap<String, Row> map = dataTypes.get(conn);
+    if (map == null) {
+      map = new HashMap<String, Row>();
+      dataTypes.put(conn, map);
+    }
+    ArrayList<String> twoparts = splitIdentifierToTwoParts(column);
+    if (twoparts != null) {
+      String tab = twoparts.get(0);
+      String col = twoparts.get(1).toUpperCase();
+      Row row = map.get(tab);
+      if (row != null) {
+        type = row.getType(col);
+      }
+      else {
+        row = readColumns(ctx, conn, tab, map);
+        if (row != null) {
+          type = row.getType(col);
+        }
+      }
+    }
+    return type;
+  }
+  
+  /**
+   * Get data types for all columns of the table
+   */
+  Row getRowDataType(ParserRuleContext ctx, String conn, String table) {
+    HashMap<String, Row> map = dataTypes.get(conn);
+    if (map == null) {
+      map = new HashMap<String, Row>();
+      dataTypes.put(conn, map);
+    }
+    Row row = map.get(table);
+    if (row == null) {
+      row = readColumns(ctx, conn, table, map);
+    }
+    return row;
+  }
+  
+  /**
+   * Read the column data from the database and cache it
+   */
+  Row readColumns(ParserRuleContext ctx, String conn, String table, HashMap<String, Row> map) {
+    Row row = null;
+    String sql = null;
+    Conn.Type connType = exec.getConnectionType(conn); 
+    if (connType == Conn.Type.HIVE) {
+      sql = "DESCRIBE " + table;
+    }
+    if (sql != null) {
+      Query query = new Query(sql);
+      exec.executeQuery(ctx, query, conn); 
+      if (!query.error()) {
+        ResultSet rs = query.getResultSet();
+        try {
+          while (rs.next()) {
+            String col = rs.getString(1);
+            String typ = rs.getString(2);
+            if (row == null) {
+              row = new Row();
+            }
+            row.addColumn(col.toUpperCase(), typ);
+          } 
+          map.put(table, row);
+        } 
+        catch (Exception e) {}
+      }
+      exec.closeQuery(query, conn);
+    }
+    return row;
+  }
+  
   /**
    * Normalize identifier name (convert "" [] to `` i.e.)
    */
@@ -55,6 +149,30 @@ public class Meta {
   }
   
   /**
+   * Split qualified object to 2 parts: schema.tab.col -> schema.tab|col; tab.col -> tab|col 
+   */
+  public ArrayList<String> splitIdentifierToTwoParts(String name) {
+    ArrayList<String> parts = splitIdentifier(name);    
+    ArrayList<String> twoparts = null;
+    if (parts != null) {
+      StringBuilder id = new StringBuilder();
+      int i = 0;
+      for (; i < parts.size() - 1; i++) {
+        id.append(parts.get(i));
+        if (i + 1 < parts.size() - 1) {
+          id.append(".");
+        }
+      }
+      twoparts = new ArrayList<String>();
+      twoparts.add(id.toString());
+      id.setLength(0);
+      id.append(parts.get(i));
+      twoparts.add(id.toString());
+    }
+    return twoparts;
+  }
+  
+  /**
    * Split identifier to parts (schema, table, colum name etc.)
    * @return null if identifier contains single part
    */

http://git-wip-us.apache.org/repos/asf/hive/blob/da95f633/hplsql/src/main/java/org/apache/hive/hplsql/Row.java
----------------------------------------------------------------------
diff --git a/hplsql/src/main/java/org/apache/hive/hplsql/Row.java b/hplsql/src/main/java/org/apache/hive/hplsql/Row.java
new file mode 100644
index 0000000..deeacaf
--- /dev/null
+++ b/hplsql/src/main/java/org/apache/hive/hplsql/Row.java
@@ -0,0 +1,97 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.hive.hplsql;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+
+/**
+ * Table row (all columns)
+ */
+public class Row {
+    
+  ArrayList<Column> columns = new ArrayList<Column>();
+  HashMap<String, Column> columnMap = new HashMap<String, Column>();
+  
+  /**
+   * Constructors
+   */
+  Row() {}
+  
+  Row(Row row) {
+    for (Column c : row.columns) {
+      addColumn(c.name, c.type); 
+    }    
+  }
+  
+  /**
+   * Add a column with specified data type
+   */
+  void addColumn(String name, String type) {
+    Column column = new Column(name, type);
+    columns.add(column);
+    columnMap.put(name, column);
+  }
+  
+  /**
+   * Get the data type by column name
+   */
+  String getType(String name) {
+    Column column = columnMap.get(name);
+    if (column != null) {
+      return column.getType();
+    }
+    return null;
+  }
+  
+  /**
+   * Get value by index
+   */
+  Var getValue(int i) {
+    return columns.get(i).getValue();
+  }
+  
+  /**
+   * Get value by column name
+   */
+  Var getValue(String name) {
+    Column column = columnMap.get(name.toUpperCase());
+    if (column != null) {
+      return column.getValue();
+    }
+    return null;
+  }
+  
+  /**
+   * Get columns
+   */
+  ArrayList<Column> getColumns() {
+    return columns;
+  }
+  
+  /**
+   * Get the number of columns
+   */
+  int size() {
+    return columns.size();
+  }
+}
+
+
+

http://git-wip-us.apache.org/repos/asf/hive/blob/da95f633/hplsql/src/main/java/org/apache/hive/hplsql/Select.java
----------------------------------------------------------------------
diff --git a/hplsql/src/main/java/org/apache/hive/hplsql/Select.java b/hplsql/src/main/java/org/apache/hive/hplsql/Select.java
index 32ca74a..71ca848 100644
--- a/hplsql/src/main/java/org/apache/hive/hplsql/Select.java
+++ b/hplsql/src/main/java/org/apache/hive/hplsql/Select.java
@@ -92,11 +92,15 @@ public class Select {
             String into_name = getIntoVariable(ctx, i - 1);
             Var var = exec.findVariable(into_name);
             if (var != null) {
-              var.setValue(rs, rm, i);
+              if (var.type != Var.Type.ROW) {
+                var.setValue(rs, rm, i);
+              }
+              else {
+                var.setValues(rs, rm);
+              }
               if (trace) {
-                trace(ctx, "COLUMN: " + rm.getColumnName(i) + ", " + rm.getColumnTypeName(i));
-                trace(ctx, "SET " + var.getName() + " = " + var.toString());
-              }            
+                trace(ctx, var, rs, rm, i);
+              }
             } 
             else {
               trace(ctx, "Variable not found: " + into_name);
@@ -439,4 +443,8 @@ public class Select {
   void trace(ParserRuleContext ctx, String message) {
     exec.trace(ctx, message);
   }
+  
+  void trace(ParserRuleContext ctx, Var var, ResultSet rs, ResultSetMetaData rm, int idx) throws SQLException {
+    exec.trace(ctx, var, rs, rm, idx);
+  }    
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/hive/blob/da95f633/hplsql/src/main/java/org/apache/hive/hplsql/Stmt.java
----------------------------------------------------------------------
diff --git a/hplsql/src/main/java/org/apache/hive/hplsql/Stmt.java b/hplsql/src/main/java/org/apache/hive/hplsql/Stmt.java
index 77c3c4f..6193f49 100644
--- a/hplsql/src/main/java/org/apache/hive/hplsql/Stmt.java
+++ b/hplsql/src/main/java/org/apache/hive/hplsql/Stmt.java
@@ -381,11 +381,15 @@ public class Stmt {
           for(int i=1; i <= cols; i++) {
             Var var = exec.findVariable(ctx.L_ID(i).getText());
             if(var != null) {
-              var.setValue(rs, rsm, i);
-              if(trace) {
-                trace(ctx, "COLUMN: " + rsm.getColumnName(i) + ", " + rsm.getColumnTypeName(i));
-                trace(ctx, "SET " + var.getName() + " = " + var.toString());
-              }            
+              if (var.type != Var.Type.ROW) {
+                var.setValue(rs, rsm, i);
+              }
+              else {
+                var.setValues(rs, rsm);
+              }
+              if (trace) {
+                trace(ctx, var, rs, rsm, i);
+              }
             } 
             else if(trace) {
               trace(ctx, "Variable not found: " + ctx.L_ID(i).getText());
@@ -738,19 +742,16 @@ public class Stmt {
       if (rs != null) {
         ResultSetMetaData rm = rs.getMetaData();
         int cols = rm.getColumnCount();
-        Var[] vars = new Var[cols];
-        for (int i = 0; i < cols; i++) {
-          vars[i] = new Var();
-          vars[i].setName(cursor + "." + rm.getColumnName(i + 1));
-          vars[i].setType(rm.getColumnType(i + 1));          
-          exec.addVariable(vars[i]);
-          if (trace) {
-            trace(ctx, "Column: " + vars[i].getName() + " " + rm.getColumnTypeName(i + 1));
-          }
-        }                
+        Row row = new Row();
+        for (int i = 1; i <= cols; i++) {
+          row.addColumn(rm.getColumnName(i), rm.getColumnTypeName(i));
+        }
+        Var var = new Var(cursor, row);
+        exec.addVariable(var);
         while (rs.next()) {
-          for (int i = 0; i < cols; i++) {
-            vars[i].setValue(rs, rm, i + 1);
+          var.setValues(rs, rm);
+          if (trace) {
+            trace(ctx, var, rs, rm, 0);
           }
           visit(ctx.block());
           exec.incRowCount();
@@ -817,21 +818,24 @@ public class Stmt {
     ResultSet rs = query.getResultSet();
     if (rs != null) {
       try {
-        ResultSetMetaData rsm = rs.getMetaData();
-        // Assign to variables
-        if(ctx.T_INTO() != null) {
+        ResultSetMetaData rm = rs.getMetaData();
+        if (ctx.T_INTO() != null) {
           int cols = ctx.L_ID().size();
-          if(rs.next()) {
-            for(int i=0; i < cols; i++) {
+          if (rs.next()) {
+            for (int i = 0; i < cols; i++) {
               Var var = exec.findVariable(ctx.L_ID(i).getText());
-              if(var != null) {
-                var.setValue(rs, rsm, i+1);
-                if(trace) {
-                  trace(ctx, "COLUMN: " + rsm.getColumnName(i+1) + ", " + rsm.getColumnTypeName(i+1));
-                  trace(ctx, "SET " + var.getName() + " = " + var.toString());
+              if (var != null) {
+                if (var.type != Var.Type.ROW) {
+                  var.setValue(rs, rm, i + 1);
+                }
+                else {
+                  var.setValues(rs, rm);
+                }
+                if (trace) {
+                  trace(ctx, var, rs, rm, i + 1);
                 }
               } 
-              else if(trace) {
+              else if (trace) {
                 trace(ctx, "Variable not found: " + ctx.L_ID(i).getText());
               }
             }
@@ -840,7 +844,7 @@ public class Stmt {
         }
         // Print the results
         else {
-          int cols = rsm.getColumnCount();
+          int cols = rm.getColumnCount();
           while(rs.next()) {
             for(int i = 1; i <= cols; i++) {
               if(i > 1) {
@@ -864,8 +868,11 @@ public class Stmt {
    * EXEC to execute a stored procedure
    */
   public Boolean execProc(HplsqlParser.Exec_stmtContext ctx) { 
-    if (exec.function.execProc(ctx.expr_func_params(), evalPop(ctx.expr()).toString())) {
-      return true;
+    String name = evalPop(ctx.expr()).toString();
+    if (exec.function.isProc(name)) {
+      if (exec.function.execProc(ctx.expr_func_params(), name)) {
+        return true;
+      }
     }
     return false;
   }
@@ -1118,4 +1125,8 @@ public class Stmt {
   void trace(ParserRuleContext ctx, String message) {
 	  exec.trace(ctx, message);
   }
+  
+  void trace(ParserRuleContext ctx, Var var, ResultSet rs, ResultSetMetaData rm, int idx) throws SQLException {
+    exec.trace(ctx, var, rs, rm, idx);
+  }
 }

http://git-wip-us.apache.org/repos/asf/hive/blob/da95f633/hplsql/src/main/java/org/apache/hive/hplsql/Var.java
----------------------------------------------------------------------
diff --git a/hplsql/src/main/java/org/apache/hive/hplsql/Var.java b/hplsql/src/main/java/org/apache/hive/hplsql/Var.java
index 95eb526..b31a14d 100644
--- a/hplsql/src/main/java/org/apache/hive/hplsql/Var.java
+++ b/hplsql/src/main/java/org/apache/hive/hplsql/Var.java
@@ -32,7 +32,10 @@ import java.sql.Timestamp;
 public class Var {
 
 	// Data types
-	public enum Type {BOOL, CURSOR, DATE, DECIMAL, FILE, IDENT, BIGINT, INTERVAL, RS_LOCATOR, STRING, STRINGLIST, TIMESTAMP, NULL};
+	public enum Type {BOOL, CURSOR, DATE, DECIMAL, DERIVED_TYPE, DERIVED_ROWTYPE, FILE, IDENT, BIGINT, INTERVAL, ROW, 
+	                  RS_LOCATOR, STRING, STRINGLIST, TIMESTAMP, NULL};
+	public static final String DERIVED_TYPE = "DERIVED%TYPE";
+	public static final String DERIVED_ROWTYPE = "DERIVED%ROWTYPE";
 	public static Var Empty = new Var();
 	public static Var Null = new Var(Type.NULL);
 	
@@ -102,6 +105,12 @@ public class Var {
     value = b;
   }
 	
+	public Var(String name, Row row) {
+	  this.name = name;
+	  this.type = Type.ROW;
+	  this.value = new Row(row);
+	}
+	
 	public Var(Type type, String name) {
     this.type = type;
     this.name = name;
@@ -140,9 +149,13 @@ public class Var {
 	 * Cast a new value to the variable 
 	 */
 	public Var cast(Var val) {
-	  if (val == null || val.value == null) {
+ 	  if (val == null || val.value == null) {
 	    value = null;
 	  }
+ 	  else if (type == Type.DERIVED_TYPE) {
+ 	    type = val.type;
+ 	    value = val.value;
+ 	  }
 	  else if (type == val.type && type == Type.STRING) {
 	    cast((String)val.value);
 	  }
@@ -211,7 +224,7 @@ public class Var {
   }
 	
 	/**
-   * Set the new value from a result set
+   * Set the new value from the result set
    */
   public Var setValue(ResultSet rs, ResultSetMetaData rsm, int idx) throws SQLException {
     int type = rsm.getColumnType(idx);
@@ -227,6 +240,21 @@ public class Var {
     }
     return this;
   }
+  
+  /**
+   * Set ROW values from the result set
+   */
+  public Var setValues(ResultSet rs, ResultSetMetaData rsm) throws SQLException {
+    Row row = (Row)this.value;
+    int idx = 1;
+    for (Column column : row.getColumns()) {
+      Var var = new Var(column.getName(), column.getType(), null, null, null);
+      var.setValue(rs, rsm, idx);
+      column.setValue(var);
+      idx++;
+    }
+    return this;
+  }
 	
 	/**
 	 * Set the data type from string representation
@@ -274,6 +302,9 @@ public class Var {
     else if (type.toUpperCase().startsWith("RESULT_SET_LOCATOR")) {
       return Type.RS_LOCATOR;
     }
+    else if (type.equalsIgnoreCase(Var.DERIVED_TYPE)) {
+      return Type.DERIVED_TYPE;
+    }
     return Type.NULL;
   }
   

http://git-wip-us.apache.org/repos/asf/hive/blob/da95f633/hplsql/src/main/java/org/apache/hive/hplsql/functions/Function.java
----------------------------------------------------------------------
diff --git a/hplsql/src/main/java/org/apache/hive/hplsql/functions/Function.java b/hplsql/src/main/java/org/apache/hive/hplsql/functions/Function.java
index ab0814d..ae7acae 100644
--- a/hplsql/src/main/java/org/apache/hive/hplsql/functions/Function.java
+++ b/hplsql/src/main/java/org/apache/hive/hplsql/functions/Function.java
@@ -71,6 +71,9 @@ public class Function {
     if (execUser(ctx, name)) {
       return;
     }
+    else if (isProc(name) && execProc(ctx, name)) {
+      return;
+    }
     if (name.indexOf(".") != -1) {               // Name can be qualified and spaces are allowed between parts
       String[] parts = name.split("\\.");
       StringBuilder str = new StringBuilder();
@@ -201,6 +204,16 @@ public class Function {
   }
   
   /**
+   * Check if the stored procedure with the specified name is defined
+   */
+  public boolean isProc(String name) {
+    if (procMap.get(name.toUpperCase()) != null) {
+      return true;
+    }
+    return false;
+  }
+  
+  /**
    * Execute a stored procedure using CALL or EXEC statement passing parameters
    */
   public boolean execProc(HplsqlParser.Expr_func_paramsContext ctx, String name) {

http://git-wip-us.apache.org/repos/asf/hive/blob/da95f633/hplsql/src/test/java/org/apache/hive/hplsql/TestHplsqlLocal.java
----------------------------------------------------------------------
diff --git a/hplsql/src/test/java/org/apache/hive/hplsql/TestHplsqlLocal.java b/hplsql/src/test/java/org/apache/hive/hplsql/TestHplsqlLocal.java
index 4a08a18..6a67cd0 100644
--- a/hplsql/src/test/java/org/apache/hive/hplsql/TestHplsqlLocal.java
+++ b/hplsql/src/test/java/org/apache/hive/hplsql/TestHplsqlLocal.java
@@ -92,6 +92,11 @@ public class TestHplsqlLocal {
   public void testCreateProcedure() throws Exception {
     run("create_procedure");
   }
+  
+  @Test
+  public void testCreateProcedureNoParams() throws Exception {
+    run("create_procedure_no_params");
+  }
 
   @Test
   public void testDate() throws Exception {
@@ -301,7 +306,7 @@ public class TestHplsqlLocal {
     BufferedReader reader = new BufferedReader(new StringReader(s));
     String line = null;
     while ((line = reader.readLine()) != null) {
-      if (!line.startsWith("log4j:")) {
+      if (!line.startsWith("log4j:") && !line.contains("INFO Log4j")) {
         sb.append(line);
         sb.append("\n");
       }

http://git-wip-us.apache.org/repos/asf/hive/blob/da95f633/hplsql/src/test/java/org/apache/hive/hplsql/TestHplsqlOffline.java
----------------------------------------------------------------------
diff --git a/hplsql/src/test/java/org/apache/hive/hplsql/TestHplsqlOffline.java b/hplsql/src/test/java/org/apache/hive/hplsql/TestHplsqlOffline.java
index 0063cac..eeaa395 100644
--- a/hplsql/src/test/java/org/apache/hive/hplsql/TestHplsqlOffline.java
+++ b/hplsql/src/test/java/org/apache/hive/hplsql/TestHplsqlOffline.java
@@ -66,7 +66,7 @@ public class TestHplsqlOffline {
     BufferedReader reader = new BufferedReader(new StringReader(s));
     String line = null;
     while ((line = reader.readLine()) != null) {
-      if (!line.startsWith("log4j:")) {
+      if (!line.startsWith("log4j:") && !line.contains("INFO Log4j")) {
         sb.append(line);
         sb.append("\n");
       }

http://git-wip-us.apache.org/repos/asf/hive/blob/da95f633/hplsql/src/test/queries/db/rowtype_attribute.sql
----------------------------------------------------------------------
diff --git a/hplsql/src/test/queries/db/rowtype_attribute.sql b/hplsql/src/test/queries/db/rowtype_attribute.sql
new file mode 100644
index 0000000..6a84b57
--- /dev/null
+++ b/hplsql/src/test/queries/db/rowtype_attribute.sql
@@ -0,0 +1,22 @@
+DECLARE
+  v1 default.src%ROWTYPE;
+  v2 src %ROWTYPE;
+  v3 src % ROWTYPE;  
+  CURSOR c1 IS SELECT 'A' AS key, 'B' AS value FROM src LIMIT 1;
+BEGIN
+  SELECT 'A' AS key, 'B' AS value INTO v1 FROM src LIMIT 1;
+  PRINT v1.key || v1.value;
+  
+  OPEN c1;
+  FETCH c1 INTO v2;
+  PRINT v2.key || v2.value;
+  CLOSE c1;
+  
+  FOR rec IN (SELECT 'A' AS key, 'B' AS value FROM src LIMIT 1)
+  LOOP
+    PRINT rec.key || rec.value;
+  END LOOP; 
+  
+  EXECUTE IMMEDIATE 'SELECT ''A'' AS key, ''B'' AS value FROM src LIMIT 1' INTO v3;
+  PRINT v3.key || v3.value; 
+END
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/hive/blob/da95f633/hplsql/src/test/queries/db/type_attribute.sql
----------------------------------------------------------------------
diff --git a/hplsql/src/test/queries/db/type_attribute.sql b/hplsql/src/test/queries/db/type_attribute.sql
new file mode 100644
index 0000000..2d93bfd
--- /dev/null
+++ b/hplsql/src/test/queries/db/type_attribute.sql
@@ -0,0 +1,8 @@
+DECLARE
+  v1 default.src.key%TYPE;
+  v2 src.Key %TYPE;
+  v3 src.key3 % TYPE;
+BEGIN
+  SELECT 'A', 'B', 1 INTO v1, v2, v3 FROM src LIMIT 1;
+  PRINT v1 || v2 || v3;
+END
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/hive/blob/da95f633/hplsql/src/test/queries/local/create_procedure_no_params.sql
----------------------------------------------------------------------
diff --git a/hplsql/src/test/queries/local/create_procedure_no_params.sql b/hplsql/src/test/queries/local/create_procedure_no_params.sql
new file mode 100644
index 0000000..535ba98
--- /dev/null
+++ b/hplsql/src/test/queries/local/create_procedure_no_params.sql
@@ -0,0 +1,19 @@
+create procedure sp1
+begin
+  print 'a';
+end;
+
+create procedure sp2()
+begin
+  print 'b';
+end;
+
+call sp1;
+call sp1();
+sp1;
+sp1();
+
+call sp2;
+call sp2();
+sp2;
+sp2();
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/hive/blob/da95f633/hplsql/src/test/queries/offline/create_table_ora.sql
----------------------------------------------------------------------
diff --git a/hplsql/src/test/queries/offline/create_table_ora.sql b/hplsql/src/test/queries/offline/create_table_ora.sql
index c47c75c..bb1d9c7 100644
--- a/hplsql/src/test/queries/offline/create_table_ora.sql
+++ b/hplsql/src/test/queries/offline/create_table_ora.sql
@@ -1,4 +1,53 @@
-CREATE TABLE ora_t1 (
-  n1   NUMBER(3,0),
-  v1   VARCHAR2(10)
+CREATE TABLE ora_t1 (
+  n1   NUMBER(3,0),
+  v1   VARCHAR2(10)
+);
+
+CREATE TABLE "USER"."EMP" 
+   (    "EMPNO" NUMBER(4,0), 
+        "ENAME" VARCHAR2(10 BYTE), 
+        "JOB" VARCHAR2(9 BYTE), 
+        "MGR" NUMBER(4,0), 
+        "HIREDATE" DATE, 
+        "SAL" NUMBER(7,2), 
+        "COMM" NUMBER(7,2), 
+        "DEPTNO" NUMBER(2,0)
+   ) SEGMENT CREATION IMMEDIATE 
+  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
+  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
+  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
+  TABLESPACE "USERS" ;
+  
+CREATE TABLE language (
+  id              NUMBER(7)     NOT NULL PRIMARY KEY,
+  cd              CHAR(2)       NOT NULL,
+  description     VARCHAR2(50)
+);
+CREATE TABLE author (
+  id              NUMBER(7)     NOT NULL PRIMARY KEY,
+  first_name      VARCHAR2(50),
+  last_name       VARCHAR2(50)  NOT NULL,
+  date_of_birth   DATE,
+  year_of_birth   NUMBER(7),
+  distinguished   NUMBER(1)
+);
+CREATE TABLE book (
+  id              NUMBER(7)     NOT NULL PRIMARY KEY,
+  author_id       NUMBER(7)     NOT NULL,
+  title           VARCHAR2(400) NOT NULL,
+  published_in    NUMBER(7)     NOT NULL,
+  language_id     NUMBER(7)     NOT NULL,
+  CONSTRAINT fk_book_author     FOREIGN KEY (author_id)   REFERENCES author(id),
+  CONSTRAINT fk_book_language   FOREIGN KEY (language_id) REFERENCES language(id)
+);
+CREATE TABLE book_store (
+  name            VARCHAR2(400) NOT NULL UNIQUE
+);
+CREATE TABLE book_to_book_store (
+  name            VARCHAR2(400) NOT NULL,
+  book_id         INTEGER       NOT NULL,
+  stock           INTEGER,
+  PRIMARY KEY(name, book_id),
+  CONSTRAINT fk_b2bs_book_store FOREIGN KEY (name)        REFERENCES book_store (name) ON DELETE CASCADE,
+  CONSTRAINT fk_b2bs_book       FOREIGN KEY (book_id)     REFERENCES book (id)         ON DELETE CASCADE
 );
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/hive/blob/da95f633/hplsql/src/test/results/db/rowtype_attribute.out.txt
----------------------------------------------------------------------
diff --git a/hplsql/src/test/results/db/rowtype_attribute.out.txt b/hplsql/src/test/results/db/rowtype_attribute.out.txt
new file mode 100644
index 0000000..fc22370
--- /dev/null
+++ b/hplsql/src/test/results/db/rowtype_attribute.out.txt
@@ -0,0 +1,42 @@
+Ln:2 DECLARE v1 default.src%ROWTYPE
+Ln:3 DECLARE v2 src%ROWTYPE
+Ln:4 DECLARE v3 src%ROWTYPE
+Ln:5 DECLARE CURSOR c1
+Ln:7 SELECT
+Ln:7 SELECT 'A' AS key, 'B' AS value FROM src LIMIT 1
+Ln:7 SELECT completed successfully
+Ln:7 SELECT INTO statement executed
+Ln:7 COLUMN: key, string
+Ln:7 SET KEY = A
+Ln:7 COLUMN: value, string
+Ln:7 SET VALUE = B
+Ln:8 PRINT
+AB
+Ln:10 OPEN
+Ln:10 c1: SELECT 'A' AS key, 'B' AS value FROM src LIMIT 1
+Ln:11 FETCH
+Ln:11 COLUMN: key, string
+Ln:11 SET KEY = A
+Ln:11 COLUMN: value, string
+Ln:11 SET VALUE = B
+Ln:12 PRINT
+AB
+Ln:13 CLOSE
+Ln:15 FOR CURSOR - ENTERED
+Ln:15 SELECT 'A' AS key, 'B' AS value FROM src LIMIT 1
+Ln:15 SELECT completed successfully
+Ln:15 COLUMN: key, string
+Ln:15 SET key = A
+Ln:15 COLUMN: value, string
+Ln:15 SET value = B
+Ln:17 PRINT
+null
+Ln:15 FOR CURSOR - LEFT
+Ln:20 EXECUTE
+Ln:20 SQL statement: SELECT 'A' AS key, 'B' AS value FROM src LIMIT 1
+Ln:20 COLUMN: key, string
+Ln:20 SET KEY = A
+Ln:20 COLUMN: value, string
+Ln:20 SET VALUE = B
+Ln:21 PRINT
+AB
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/hive/blob/da95f633/hplsql/src/test/results/db/type_attribute.out.txt
----------------------------------------------------------------------
diff --git a/hplsql/src/test/results/db/type_attribute.out.txt b/hplsql/src/test/results/db/type_attribute.out.txt
new file mode 100644
index 0000000..e236f5b
--- /dev/null
+++ b/hplsql/src/test/results/db/type_attribute.out.txt
@@ -0,0 +1,15 @@
+Ln:2 DECLARE v1 string
+Ln:3 DECLARE v2 string
+Ln:4 DECLARE v3 DERIVED%TYPE
+Ln:6 SELECT
+Ln:6 SELECT 'A', 'B', 1 FROM src LIMIT 1
+Ln:6 SELECT completed successfully
+Ln:6 SELECT INTO statement executed
+Ln:6 COLUMN: _c0, string
+Ln:6 SET v1 = A
+Ln:6 COLUMN: _c1, string
+Ln:6 SET v2 = B
+Ln:6 COLUMN: _c2, int
+Ln:6 SET v3 = 1
+Ln:7 PRINT
+AB1
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/hive/blob/da95f633/hplsql/src/test/results/local/create_procedure_no_params.out.txt
----------------------------------------------------------------------
diff --git a/hplsql/src/test/results/local/create_procedure_no_params.out.txt b/hplsql/src/test/results/local/create_procedure_no_params.out.txt
new file mode 100644
index 0000000..9e3bde9
--- /dev/null
+++ b/hplsql/src/test/results/local/create_procedure_no_params.out.txt
@@ -0,0 +1,26 @@
+Ln:1 CREATE PROCEDURE sp1
+Ln:6 CREATE PROCEDURE sp2
+EXEC PROCEDURE sp1
+Ln:3 PRINT
+a
+EXEC PROCEDURE sp1
+Ln:3 PRINT
+a
+EXEC PROCEDURE sp1
+Ln:3 PRINT
+a
+EXEC PROCEDURE sp1
+Ln:3 PRINT
+a
+EXEC PROCEDURE sp2
+Ln:8 PRINT
+b
+EXEC PROCEDURE sp2
+Ln:8 PRINT
+b
+EXEC PROCEDURE sp2
+Ln:8 PRINT
+b
+EXEC PROCEDURE sp2
+Ln:8 PRINT
+b
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/hive/blob/da95f633/hplsql/src/test/results/offline/create_table_ora.out.txt
----------------------------------------------------------------------
diff --git a/hplsql/src/test/results/offline/create_table_ora.out.txt b/hplsql/src/test/results/offline/create_table_ora.out.txt
index 33af104..cf30c0f 100644
--- a/hplsql/src/test/results/offline/create_table_ora.out.txt
+++ b/hplsql/src/test/results/offline/create_table_ora.out.txt
@@ -1,4 +1,42 @@
 Ln:1 CREATE TABLE
 Ln:1 CREATE TABLE ora_t1 (n1 DECIMAL(3,0),
 v1 STRING
+)
+Ln:6 CREATE TABLE
+Ln:6 CREATE TABLE `USER`.`EMP` (`EMPNO` DECIMAL(4,0),
+`ENAME` STRING,
+`JOB` STRING,
+`MGR` DECIMAL(4,0),
+`HIREDATE` DATE,
+`SAL` DECIMAL(7,2),
+`COMM` DECIMAL(7,2),
+`DEPTNO` DECIMAL(2,0)
+)
+Ln:21 CREATE TABLE
+Ln:21 CREATE TABLE language (id DECIMAL(7),
+cd CHAR(2),
+description STRING
+)
+Ln:26 CREATE TABLE
+Ln:26 CREATE TABLE author (id DECIMAL(7),
+first_name STRING,
+last_name STRING,
+date_of_birth DATE,
+year_of_birth DECIMAL(7),
+distinguished DECIMAL(1)
+)
+Ln:34 CREATE TABLE
+Ln:34 CREATE TABLE book (id DECIMAL(7),
+author_id DECIMAL(7),
+title STRING,
+published_in DECIMAL(7),
+language_id DECIMAL(7)
+)
+Ln:43 CREATE TABLE
+Ln:43 CREATE TABLE book_store (name STRING
+)
+Ln:46 CREATE TABLE
+Ln:46 CREATE TABLE book_to_book_store (name STRING,
+book_id INTEGER,
+stock INTEGER
 )
\ No newline at end of file


[2/2] hive git commit: Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/hive

Posted by dm...@apache.org.
Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/hive


Project: http://git-wip-us.apache.org/repos/asf/hive/repo
Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/9763c9dd
Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/9763c9dd
Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/9763c9dd

Branch: refs/heads/master
Commit: 9763c9dd31bd5939db3ca50e75bb97955b411f6d
Parents: da95f63 8f930e5
Author: Dmitry Tolpeko <dm...@gmail.com>
Authored: Tue Sep 1 05:00:33 2015 -0700
Committer: Dmitry Tolpeko <dm...@gmail.com>
Committed: Tue Sep 1 05:00:33 2015 -0700

----------------------------------------------------------------------
 .../java/org/apache/hive/beeline/BeeLine.java   |   13 +-
 .../org/apache/hive/beeline/BeeLineOpts.java    |   12 +-
 .../org/apache/hive/beeline/HiveSchemaTool.java |   14 +-
 .../org/apache/hadoop/hive/conf/HiveConf.java   |   76 +-
 data/conf/tez/hive-site.xml                     |    9 +
 .../hive/hbase/HiveHBaseInputFormatUtil.java    |   50 +-
 .../queries/positive/hbase_null_first_col.q     |   22 +
 .../results/positive/hbase_null_first_col.q.out |  109 ++
 .../vectorization/VectorizationBench.java       |   93 +
 .../org/apache/hive/jdbc/HiveConnection.java    |   30 +-
 jdbc/src/java/org/apache/hive/jdbc/Utils.java   |  117 +-
 .../hive/jdbc/ZooKeeperHiveClientHelper.java    |  104 +-
 .../hadoop/hive/metastore/HiveAlterHandler.java |    2 +-
 .../hadoop/hive/metastore/HiveMetaStore.java    |    6 +-
 .../hive/metastore/MetaStoreDirectSql.java      |   40 +-
 .../hadoop/hive/metastore/MetaStoreUtils.java   |   17 +-
 .../hadoop/hive/ql/exec/FunctionRegistry.java   |   61 +-
 .../hadoop/hive/ql/exec/ScriptOperator.java     |   85 +-
 .../hive/ql/exec/tez/TezSessionState.java       |    2 +
 .../ql/exec/vector/VectorHashKeyWrapper.java    |    2 +-
 .../ql/exec/vector/VectorizationContext.java    |    7 +-
 .../expressions/CastStringGroupToString.java    |   40 +
 .../ql/exec/vector/expressions/ColAndCol.java   |   34 +-
 .../ql/exec/vector/expressions/ColOrCol.java    |   42 +-
 .../exec/vector/expressions/CuckooSetBytes.java |    2 +-
 .../hive/ql/exec/vector/expressions/NotCol.java |   14 +-
 ...VectorMapJoinInnerBigOnlyStringOperator.java |    4 +-
 .../VectorMapJoinInnerStringOperator.java       |    4 +-
 .../VectorMapJoinLeftSemiStringOperator.java    |    4 +-
 .../VectorMapJoinOuterStringOperator.java       |    4 +-
 .../apache/hadoop/hive/ql/io/orc/FileDump.java  |   48 +-
 .../hadoop/hive/ql/io/orc/OrcInputFormat.java   |   18 +-
 .../apache/hadoop/hive/ql/io/orc/Reader.java    |    6 +
 .../hadoop/hive/ql/io/orc/ReaderImpl.java       |  281 ++-
 .../hadoop/hive/ql/io/orc/RecordReaderImpl.java |    2 -
 .../hive/ql/io/orc/TreeReaderFactory.java       |   18 +-
 .../hive/ql/io/parquet/LeafFilterFactory.java   |   43 +-
 .../read/ParquetFilterPredicateConverter.java   |   35 +-
 .../hive/ql/io/sarg/ConvertAstToSearchArg.java  |    3 -
 .../hadoop/hive/ql/lib/DefaultGraphWalker.java  |   80 +-
 .../hadoop/hive/ql/lib/ForwardWalker.java       |   33 +-
 .../ql/metadata/SessionHiveMetaStoreClient.java |    2 +-
 .../hadoop/hive/ql/optimizer/ColumnPruner.java  |    6 +-
 .../hive/ql/optimizer/ConstantPropagate.java    |   10 +-
 .../optimizer/ConstantPropagateProcFactory.java |  100 +-
 .../hadoop/hive/ql/optimizer/IndexUtils.java    |   13 +-
 .../hadoop/hive/ql/optimizer/Optimizer.java     |   17 +-
 .../hive/ql/optimizer/PointLookupOptimizer.java |  102 +-
 .../calcite/translator/HiveOpConverter.java     |   53 +-
 .../ql/parse/ColumnStatsSemanticAnalyzer.java   |    6 +-
 .../hadoop/hive/ql/parse/LeadLagInfo.java       |    4 +-
 .../hive/ql/parse/LoadSemanticAnalyzer.java     |   38 +-
 .../hadoop/hive/ql/plan/ExprNodeDesc.java       |   23 +-
 .../hadoop/hive/ql/ppd/ExprWalkerInfo.java      |  136 +-
 .../hive/ql/ppd/ExprWalkerProcFactory.java      |   92 +-
 .../hadoop/hive/ql/ppd/OpProcFactory.java       |   11 +-
 .../hadoop/hive/ql/udf/generic/GenericUDF.java  |   14 +-
 .../ql/udf/generic/GenericUDFBaseNumeric.java   |    4 +-
 .../hive/ql/udf/generic/GenericUDFBasePad.java  |    8 +-
 .../hive/ql/udf/generic/GenericUDFNvl.java      |    2 +-
 .../hive/ql/udf/generic/GenericUDFOPAnd.java    |    4 +
 .../hive/ql/udf/generic/GenericUDFOPEqual.java  |    4 +
 .../generic/GenericUDFOPEqualOrGreaterThan.java |    4 +
 .../generic/GenericUDFOPEqualOrLessThan.java    |    4 +
 .../ql/udf/generic/GenericUDFOPGreaterThan.java |    4 +
 .../ql/udf/generic/GenericUDFOPLessThan.java    |    4 +
 .../ql/udf/generic/GenericUDFOPNotEqual.java    |    5 +
 .../ql/udf/generic/GenericUDFOPNotNull.java     |    4 +
 .../hive/ql/udf/generic/GenericUDFOPNull.java   |    4 +
 .../hive/ql/udf/generic/GenericUDFOPOr.java     |    4 +
 ql/src/main/resources/tez-container-log4j2.xml  |   49 +
 .../apache/hadoop/hive/ql/TestTxnCommands2.java |   85 +-
 .../hadoop/hive/ql/exec/TestOperators.java      |   16 +
 .../hive/ql/io/orc/TestInputOutputFormat.java   |    4 +-
 .../hadoop/hive/ql/io/orc/TestOrcFile.java      |   10 +-
 .../hive/ql/io/orc/TestRecordReaderImpl.java    |   42 +-
 .../parquet/TestParquetRecordReaderWrapper.java |   50 +-
 .../read/TestParquetFilterPredicate.java        |   27 +-
 .../ql/io/sarg/TestConvertAstToSearchArg.java   |  128 +-
 .../hive/ql/io/sarg/TestSearchArgumentImpl.java |   22 +-
 .../queries/clientnegative/load_orc_negative3.q |    6 +
 .../queries/clientnegative/nvl_mismatch_type.q  |   20 +
 .../clientpositive/cbo_rp_outer_join_ppr.q      |   40 +
 .../clientpositive/columnstats_quoting.q        |    8 +
 .../queries/clientpositive/flatten_and_or.q     |    4 +-
 .../queries/clientpositive/folder_predicate.q   |   32 +
 .../test/queries/clientpositive/load_orc_part.q |    4 +
 .../clientpositive/parquet_ppd_partition.q      |    9 +
 .../clientpositive/parquet_predicate_pushdown.q |  297 +++-
 .../test/queries/clientpositive/pointlookup.q   |   59 +
 .../test/queries/clientpositive/pointlookup2.q  |   51 +
 .../queries/clientpositive/selectDistinctStar.q |    2 +
 ql/src/test/queries/clientpositive/structin.q   |    6 +
 .../clientpositive/unionall_unbalancedppd.q     |    3 +
 .../clientpositive/vector_cast_constant.q       |    4 +-
 .../queries/clientpositive/vectorized_casts.q   |    6 +
 .../clientnegative/char_pad_convert_fail0.q.out |    2 +-
 .../clientnegative/char_pad_convert_fail1.q.out |    2 +-
 .../clientnegative/char_pad_convert_fail3.q.out |    2 +-
 .../clientnegative/load_orc_negative3.q.out     |   25 +
 .../clientnegative/nvl_mismatch_type.q.out      |   43 +
 .../alter_partition_coltype.q.out               |   12 +-
 .../clientpositive/annotate_stats_filter.q.out  |   18 +-
 .../cbo_rp_outer_join_ppr.q.java1.7.out         |  855 +++++++++
 .../clientpositive/columnstats_quoting.q.out    |  114 ++
 .../results/clientpositive/decimal_udf.q.out    |   18 +-
 .../clientpositive/filter_cond_pushdown.q.out   |   32 +-
 .../clientpositive/filter_join_breaktask.q.out  |   12 +-
 .../results/clientpositive/flatten_and_or.q.out |    8 +-
 .../test/results/clientpositive/fold_when.q.out |   16 +-
 .../clientpositive/folder_predicate.q.out       |  368 ++++
 .../clientpositive/input_testxpath2.q.out       |    2 +-
 .../list_bucket_query_oneskew_3.q.out           |    6 +-
 .../results/clientpositive/load_orc_part.q.out  |   18 +
 .../clientpositive/parquet_ppd_partition.q.out  |   47 +
 .../parquet_predicate_pushdown.q.out            | 1309 +++++++++++++-
 ql/src/test/results/clientpositive/pcr.q.out    |   12 +-
 .../results/clientpositive/pointlookup.q.out    |  198 +++
 .../results/clientpositive/pointlookup2.q.out   | 1647 ++++++++++++++++++
 .../results/clientpositive/ppd_transform.q.out  |   12 +-
 .../clientpositive/rand_partitionpruner3.q.out  |   12 +-
 .../clientpositive/selectDistinctStar.q.out     |    8 +-
 .../clientpositive/select_unquote_not.q.out     |    8 +-
 .../spark/filter_join_breaktask.q.out           |   12 +-
 .../test/results/clientpositive/spark/pcr.q.out |   12 +-
 .../clientpositive/spark/ppd_transform.q.out    |   12 +-
 .../spark/vector_cast_constant.q.java1.7.out    |   41 +-
 .../clientpositive/spark/vectorized_case.q.out  |    2 +-
 .../test/results/clientpositive/structin.q.out  |   44 +
 .../clientpositive/tez/explainuser_1.q.out      |    2 +-
 .../tez/filter_join_breaktask.q.out             |   12 +-
 .../clientpositive/tez/selectDistinctStar.q.out |    8 +-
 .../tez/vector_cast_constant.q.java1.7.out      |   21 +-
 .../tez/vector_char_mapjoin1.q.out              |    1 +
 .../clientpositive/tez/vector_decimal_udf.q.out |   24 +-
 .../tez/vector_varchar_mapjoin1.q.out           |    1 +
 .../clientpositive/tez/vectorized_case.q.out    |    2 +-
 .../clientpositive/tez/vectorized_casts.q.out   |   99 +-
 .../clientpositive/udf_isnull_isnotnull.q.out   |    2 +-
 .../test/results/clientpositive/udf_size.q.out  |    2 +-
 .../clientpositive/unionall_unbalancedppd.q.out |   14 +-
 .../vector_cast_constant.q.java1.7.out          |   32 +-
 .../clientpositive/vector_char_mapjoin1.q.out   |    1 +
 .../clientpositive/vector_decimal_udf.q.out     |   24 +-
 .../vector_varchar_mapjoin1.q.out               |    1 +
 .../clientpositive/vectorized_case.q.out        |    9 +-
 .../clientpositive/vectorized_casts.q.out       |   66 +-
 .../serde2/avro/AvroLazyObjectInspector.java    |   19 +-
 .../hadoop/hive/serde2/avro/InstanceCache.java  |   17 +-
 .../objectinspector/ObjectInspectorFactory.java |   61 +-
 .../ReflectionStructObjectInspector.java        |   60 +-
 .../StandardStructObjectInspector.java          |    7 +-
 .../ThriftUnionObjectInspector.java             |   28 +-
 .../avro/TestAvroLazyObjectInspector.java       |   59 +
 .../TestReflectionObjectInspectors.java         |   71 +-
 .../apache/hive/service/server/HiveServer2.java |   74 +-
 shims/0.20S/pom.xml                             |    8 +-
 .../hadoop/hive/shims/Hadoop20SShims.java       |   35 +-
 shims/0.23/pom.xml                              |   21 +-
 .../apache/hadoop/hive/shims/Hadoop23Shims.java |   79 +-
 .../apache/hadoop/hive/shims/HadoopShims.java   |   22 +
 .../hadoop/hive/shims/HadoopShimsSecure.java    |   32 +
 .../hadoop/hive/ql/io/sarg/PredicateLeaf.java   |    3 +-
 163 files changed, 7857 insertions(+), 1241 deletions(-)
----------------------------------------------------------------------