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++) {