diff --git a/service/src/java/org/apache/hive/service/cli/operation/ClassicTableTypeMapping.java b/service/src/java/org/apache/hive/service/cli/operation/ClassicTableTypeMapping.java index 87ac39b..1d358b8 100644 --- a/service/src/java/org/apache/hive/service/cli/operation/ClassicTableTypeMapping.java +++ b/service/src/java/org/apache/hive/service/cli/operation/ClassicTableTypeMapping.java @@ -18,6 +18,14 @@ package org.apache.hive.service.cli.operation; +import com.google.common.collect.ArrayListMultimap; +import com.google.common.collect.Iterables; +import com.google.common.collect.Multimap; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.Arrays; +import java.util.Collection; import java.util.HashMap; import java.util.HashSet; import java.util.Map; @@ -34,51 +42,51 @@ */ public class ClassicTableTypeMapping implements TableTypeMapping { + private static final Logger LOG = LoggerFactory.getLogger(ClassicTableTypeMapping.class); + public enum ClassicTableTypes { TABLE, VIEW, } private final Map hiveToClientMap = new HashMap(); - private final Map clientToHiveMap = new HashMap(); + private final Multimap clientToHiveMap = ArrayListMultimap.create(); public ClassicTableTypeMapping () { - hiveToClientMap.put(TableType.MANAGED_TABLE.toString(), - ClassicTableTypes.TABLE.toString()); - hiveToClientMap.put(TableType.EXTERNAL_TABLE.toString(), - ClassicTableTypes.TABLE.toString()); - hiveToClientMap.put(TableType.VIRTUAL_VIEW.toString(), - ClassicTableTypes.VIEW.toString()); + hiveToClientMap.put(TableType.MANAGED_TABLE.name(), ClassicTableTypes.TABLE.name()); + hiveToClientMap.put(TableType.EXTERNAL_TABLE.name(), ClassicTableTypes.TABLE.name()); + hiveToClientMap.put(TableType.VIRTUAL_VIEW.name(), ClassicTableTypes.VIEW.name()); - clientToHiveMap.put(ClassicTableTypes.TABLE.toString(), - TableType.MANAGED_TABLE.toString()); - clientToHiveMap.put(ClassicTableTypes.VIEW.toString(), - TableType.VIRTUAL_VIEW.toString()); + clientToHiveMap.putAll(ClassicTableTypes.TABLE.name(), Arrays.asList( + TableType.MANAGED_TABLE.name(), TableType.EXTERNAL_TABLE.name())); + clientToHiveMap.put(ClassicTableTypes.VIEW.name(), TableType.VIRTUAL_VIEW.name()); } @Override - public String mapToHiveType(String clientTypeName) { - if (clientToHiveMap.containsKey(clientTypeName)) { - return clientToHiveMap.get(clientTypeName); - } else { - return clientTypeName; + public String[] mapToHiveType(String clientTypeName) { + Collection hiveTableType = clientToHiveMap.get(clientTypeName.toUpperCase()); + if (hiveTableType == null) { + LOG.info("Not supported client table type " + clientTypeName); + return new String[] {clientTypeName}; } + return Iterables.toArray(hiveTableType, String.class); } @Override public String mapToClientType(String hiveTypeName) { - if (hiveToClientMap.containsKey(hiveTypeName)) { - return hiveToClientMap.get(hiveTypeName); - } else { + String clientTypeName = hiveToClientMap.get(hiveTypeName); + if (clientTypeName == null) { + LOG.info("Invalid hive table type " + hiveTypeName); return hiveTypeName; } + return clientTypeName; } @Override public Set getTableTypeNames() { Set typeNameSet = new HashSet(); for (ClassicTableTypes typeNames : ClassicTableTypes.values()) { - typeNameSet.add(typeNames.toString()); + typeNameSet.add(typeNames.name()); } return typeNameSet; } diff --git a/service/src/java/org/apache/hive/service/cli/operation/GetTablesOperation.java b/service/src/java/org/apache/hive/service/cli/operation/GetTablesOperation.java index 65bbc1c..740b851 100644 --- a/service/src/java/org/apache/hive/service/cli/operation/GetTablesOperation.java +++ b/service/src/java/org/apache/hive/service/cli/operation/GetTablesOperation.java @@ -19,6 +19,7 @@ package org.apache.hive.service.cli.operation; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import org.apache.hadoop.hive.conf.HiveConf; @@ -78,7 +79,7 @@ protected GetTablesOperation(HiveSession parentSession, if (tableTypes != null) { tableTypeList = new ArrayList(); for (String tableType : tableTypes) { - tableTypeList.add(tableTypeMapping.mapToHiveType(tableType.trim())); + tableTypeList.addAll(Arrays.asList(tableTypeMapping.mapToHiveType(tableType.trim()))); } } else { tableTypeList = null; diff --git a/service/src/java/org/apache/hive/service/cli/operation/HiveTableTypeMapping.java b/service/src/java/org/apache/hive/service/cli/operation/HiveTableTypeMapping.java index b530f21..ca78037 100644 --- a/service/src/java/org/apache/hive/service/cli/operation/HiveTableTypeMapping.java +++ b/service/src/java/org/apache/hive/service/cli/operation/HiveTableTypeMapping.java @@ -18,6 +18,9 @@ package org.apache.hive.service.cli.operation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import java.util.HashSet; import java.util.Set; @@ -30,21 +33,29 @@ */ public class HiveTableTypeMapping implements TableTypeMapping { + private static final Logger LOG = LoggerFactory.getLogger(HiveTableTypeMapping.class); + @Override - public String mapToHiveType(String clientTypeName) { - return clientTypeName; + public String[] mapToHiveType(String clientTypeName) { + return new String[] {mapToClientType(clientTypeName)}; } @Override public String mapToClientType(String hiveTypeName) { - return hiveTypeName; + try { + TableType hiveType = TableType.valueOf(hiveTypeName.toUpperCase()); + return hiveType.name(); + } catch (IllegalArgumentException e) { + LOG.info("Invalid hive table type " + hiveTypeName); + return hiveTypeName; + } } @Override public Set getTableTypeNames() { Set typeNameSet = new HashSet(); for (TableType typeNames : TableType.values()) { - typeNameSet.add(typeNames.toString()); + typeNameSet.add(typeNames.name()); } return typeNameSet; } diff --git a/service/src/java/org/apache/hive/service/cli/operation/TableTypeMapping.java b/service/src/java/org/apache/hive/service/cli/operation/TableTypeMapping.java index 3a8a07f..8f531f7 100644 --- a/service/src/java/org/apache/hive/service/cli/operation/TableTypeMapping.java +++ b/service/src/java/org/apache/hive/service/cli/operation/TableTypeMapping.java @@ -20,14 +20,18 @@ import java.util.Set; +import org.apache.hadoop.hive.common.classification.InterfaceAudience; +import org.apache.hadoop.hive.common.classification.InterfaceStability; +@InterfaceAudience.Public +@InterfaceStability.Evolving public interface TableTypeMapping { /** * Map client's table type name to hive's table type * @param clientTypeName * @return */ - public String mapToHiveType (String clientTypeName); + public String[] mapToHiveType (String clientTypeName); /** * Map hive's table type name to client's table type