You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by px...@apache.org on 2016/04/13 22:21:15 UTC

hive git commit: HIVE-13486: Cast the column type for column masking (Pengcheng Xiong, reviewed by Ashutosh Chauhan)

Repository: hive
Updated Branches:
  refs/heads/master 7049f49d9 -> 529580f88


HIVE-13486: Cast the column type for column masking (Pengcheng Xiong, reviewed by Ashutosh Chauhan)


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

Branch: refs/heads/master
Commit: 529580f88e6e9c694a705028e08fd3ee59fd260a
Parents: 7049f49
Author: Pengcheng Xiong <px...@apache.org>
Authored: Wed Apr 13 13:12:50 2016 -0700
Committer: Pengcheng Xiong <px...@apache.org>
Committed: Wed Apr 13 13:12:50 2016 -0700

----------------------------------------------------------------------
 .../apache/hadoop/hive/ql/parse/MaskAndFilterInfo.java    |  7 ++++++-
 .../org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java | 10 ++++++----
 .../java/org/apache/hadoop/hive/ql/parse/TableMask.java   |  9 ++++++++-
 3 files changed, 20 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hive/blob/529580f8/ql/src/java/org/apache/hadoop/hive/ql/parse/MaskAndFilterInfo.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/MaskAndFilterInfo.java b/ql/src/java/org/apache/hadoop/hive/ql/parse/MaskAndFilterInfo.java
index 1678d2c..f5a12a3 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/parse/MaskAndFilterInfo.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/MaskAndFilterInfo.java
@@ -18,13 +18,18 @@
 
 package org.apache.hadoop.hive.ql.parse;
 
+import java.util.List;
+
 public class MaskAndFilterInfo {
+  List<String> colTypes;
   String additionalTabInfo;
   String alias;
   ASTNode astNode;
 
-  public MaskAndFilterInfo(String additionalTabInfo, String alias, ASTNode astNode) {
+  public MaskAndFilterInfo(List<String> colTypes, String additionalTabInfo, String alias,
+      ASTNode astNode) {
     super();
+    this.colTypes = colTypes;
     this.additionalTabInfo = additionalTabInfo;
     this.alias = alias;
     this.astNode = astNode;

http://git-wip-us.apache.org/repos/asf/hive/blob/529580f8/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java b/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java
index 9b565c5..d3e7040 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java
@@ -10408,13 +10408,15 @@ public class SemanticAnalyzer extends BaseSemanticAnalyzer {
           throw new SemanticException("Table " + tabIdName + " is not found.");
         }
 
-        List<String> columns = new ArrayList<>();
+        List<String> colNames = new ArrayList<>();
+        List<String> colTypes = new ArrayList<>();
         for (FieldSchema col : table.getAllCols()) {
-          columns.add(col.getName());
+          colNames.add(col.getName());
+          colTypes.add(col.getType());
         }
         
-        basicInfos.put(new HivePrivilegeObject(table.getDbName(), table.getTableName(), columns),
-            new MaskAndFilterInfo(additionalTabInfo.toString(), alias, astNode));
+        basicInfos.put(new HivePrivilegeObject(table.getDbName(), table.getTableName(), colNames),
+            new MaskAndFilterInfo(colTypes, additionalTabInfo.toString(), alias, astNode));
       }
       if (astNode.getChildCount() > 0 && !ignoredTokens.contains(astNode.getToken().getType())) {
         for (Node child : astNode.getChildren()) {

http://git-wip-us.apache.org/repos/asf/hive/blob/529580f8/ql/src/java/org/apache/hadoop/hive/ql/parse/TableMask.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/TableMask.java b/ql/src/java/org/apache/hadoop/hive/ql/parse/TableMask.java
index f030da2..f3c7262 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/parse/TableMask.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/TableMask.java
@@ -89,6 +89,7 @@ public class TableMask {
         throw new SemanticException("Expect " + privObject.getColumns().size() + " columns in "
             + privObject.getObjectName() + ", but only find " + exprs.size());
       }
+      List<String> colTypes = maskAndFilterInfo.colTypes;
       for (int index = 0; index < exprs.size(); index++) {
         String expr = exprs.get(index);
         if (expr == null) {
@@ -100,7 +101,13 @@ public class TableMask {
         } else {
           firstOne = false;
         }
-        sb.append(expr + " AS " + privObject.getColumns().get(index));
+        String colName = privObject.getColumns().get(index);
+        if (!expr.equals(colName)) {
+          // CAST(expr AS COLTYPE) AS COLNAME
+          sb.append("CAST(" + expr + " AS " + colTypes.get(index) + ") AS " + colName);
+        } else {
+          sb.append(expr);
+        }
       }
     } else {
       for (int index = 0; index < privObject.getColumns().size(); index++) {