From 5c0e1fa1e83190ea44d5a2a5cc028ccd8b7d78e0 Mon Sep 17 00:00:00 2001 From: Alex Behm Date: Mon, 22 Feb 2016 19:54:28 -0800 Subject: [PATCH] IMPALA-2974: Use Type.toSql() instead of toString() in ALTER TABLE CHANGE COLUMN. Change-Id: I140bdea755e44d3f2ceb4a8f5e288faaddaa963f Reviewed-on: http://gerrit.cloudera.org:8080/2285 Reviewed-by: Alex Behm Tested-by: Internal Jenkins --- .../impala/service/CatalogOpExecutor.java | 10 ++------- .../queries/QueryTest/alter-table.test | 22 +++++++++++++++++++ 2 files changed, 24 insertions(+), 8 deletions(-) diff --git a/fe/src/main/java/com/cloudera/impala/service/CatalogOpExecutor.java b/fe/src/main/java/com/cloudera/impala/service/CatalogOpExecutor.java index d618c7e4e..1460fdbea 100644 --- a/fe/src/main/java/com/cloudera/impala/service/CatalogOpExecutor.java +++ b/fe/src/main/java/com/cloudera/impala/service/CatalogOpExecutor.java @@ -22,10 +22,6 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Set; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.concurrent.atomic.AtomicBoolean; -import java.util.concurrent.atomic.AtomicInteger; import org.apache.hadoop.fs.Path; import org.apache.hadoop.hive.common.StatsSetupConst; @@ -71,8 +67,8 @@ import com.cloudera.impala.catalog.HdfsTable; import com.cloudera.impala.catalog.HiveStorageDescriptorFactory; import com.cloudera.impala.catalog.IncompleteTable; import com.cloudera.impala.catalog.MetaStoreClientPool.MetaStoreClient; -import com.cloudera.impala.catalog.PartitionStatsUtil; import com.cloudera.impala.catalog.PartitionNotFoundException; +import com.cloudera.impala.catalog.PartitionStatsUtil; import com.cloudera.impala.catalog.Role; import com.cloudera.impala.catalog.RolePrivilege; import com.cloudera.impala.catalog.RowFormat; @@ -94,7 +90,6 @@ import com.cloudera.impala.thrift.TAlterTableAddReplaceColsParams; import com.cloudera.impala.thrift.TAlterTableChangeColParams; import com.cloudera.impala.thrift.TAlterTableDropColParams; import com.cloudera.impala.thrift.TAlterTableDropPartitionParams; -import com.cloudera.impala.thrift.TAlterTableOrViewRenameParams; import com.cloudera.impala.thrift.TAlterTableParams; import com.cloudera.impala.thrift.TAlterTableSetCachedParams; import com.cloudera.impala.thrift.TAlterTableSetFileFormatParams; @@ -126,7 +121,6 @@ import com.cloudera.impala.thrift.TDropStatsParams; import com.cloudera.impala.thrift.TDropTableOrViewParams; import com.cloudera.impala.thrift.TErrorCode; import com.cloudera.impala.thrift.TFunctionBinaryType; -import com.cloudera.impala.thrift.TFunctionCategory; import com.cloudera.impala.thrift.TGrantRevokePrivParams; import com.cloudera.impala.thrift.TGrantRevokeRoleParams; import com.cloudera.impala.thrift.THdfsCachingOp; @@ -1518,7 +1512,7 @@ public class CatalogOpExecutor { if (fs.getName().toLowerCase().equals(colName.toLowerCase())) { fs.setName(newCol.getColumnName()); Type type = Type.fromThrift(newCol.getColumnType()); - fs.setType(type.toString().toLowerCase()); + fs.setType(type.toSql().toLowerCase()); // Don't overwrite the existing comment unless a new comment is given if (newCol.getComment() != null) { fs.setComment(newCol.getComment()); diff --git a/testdata/workloads/functional-query/queries/QueryTest/alter-table.test b/testdata/workloads/functional-query/queries/QueryTest/alter-table.test index aaa8991d9..d674c3966 100644 --- a/testdata/workloads/functional-query/queries/QueryTest/alter-table.test +++ b/testdata/workloads/functional-query/queries/QueryTest/alter-table.test @@ -183,6 +183,28 @@ describe t2 string,string,string ==== ---- QUERY +# IMPALA-2974: Change a single column to a complex type. +alter table t2 change column c c array>; +describe t2; +---- RESULTS +'a','int','Int Col' +'b','struct<\n f1:array,\n f2:map>\n>','' +'c','array>','' +---- TYPES +string,string,string +==== +---- QUERY +# Change a single complex-typed column to a scalar type. +alter table t2 change column c c varchar(20); +describe t2; +---- RESULTS +'a','int','Int Col' +'b','struct<\n f1:array,\n f2:map>\n>','' +'c','varchar(20)','' +---- TYPES +string,string,string +==== +---- QUERY create external table jointbl_test like functional.jointbl ---- RESULTS ====