Skip to content

Commit

Permalink
Do not allow renaming hidden columns
Browse files Browse the repository at this point in the history
  • Loading branch information
electrum committed Sep 12, 2017
1 parent 9e88cc3 commit 91e83e0
Show file tree
Hide file tree
Showing 2 changed files with 7 additions and 0 deletions.
Expand Up @@ -1888,6 +1888,7 @@ public void testRenameColumn()
assertUpdate(createTable, "SELECT count(*) FROM orders");
assertUpdate("ALTER TABLE test_rename_column RENAME COLUMN orderkey TO new_orderkey");
assertQuery("SELECT new_orderkey, orderstatus FROM test_rename_column", "SELECT orderkey, orderstatus FROM orders");
assertQueryFails("ALTER TABLE test_rename_column RENAME COLUMN \"$path\" TO test", ".* Cannot rename hidden column");
assertQueryFails("ALTER TABLE test_rename_column RENAME COLUMN orderstatus TO new_orderstatus", "Renaming partition columns is not supported");
assertQuery("SELECT new_orderkey, orderstatus FROM test_rename_column", "SELECT orderkey, orderstatus FROM orders");
assertUpdate("DROP TABLE test_rename_column");
Expand Down
Expand Up @@ -33,6 +33,7 @@
import static com.facebook.presto.sql.analyzer.SemanticErrorCode.COLUMN_ALREADY_EXISTS;
import static com.facebook.presto.sql.analyzer.SemanticErrorCode.MISSING_COLUMN;
import static com.facebook.presto.sql.analyzer.SemanticErrorCode.MISSING_TABLE;
import static com.facebook.presto.sql.analyzer.SemanticErrorCode.NOT_SUPPORTED;
import static com.google.common.util.concurrent.Futures.immediateFuture;
import static java.util.Locale.ENGLISH;

Expand Down Expand Up @@ -68,6 +69,11 @@ public ListenableFuture<?> execute(RenameColumn statement, TransactionManager tr
if (columnHandles.containsKey(target)) {
throw new SemanticException(COLUMN_ALREADY_EXISTS, statement, "Column '%s' already exists", target);
}

if (metadata.getColumnMetadata(session, tableHandle.get(), columnHandles.get(source)).isHidden()) {
throw new SemanticException(NOT_SUPPORTED, statement, "Cannot rename hidden column");
}

metadata.renameColumn(session, tableHandle.get(), columnHandles.get(source), target);

return immediateFuture(null);
Expand Down

0 comments on commit 91e83e0

Please sign in to comment.