Repository: hive Updated Branches: refs/heads/branch-1 f7c8fb527 -> 24b366f0b
http://git-wip-us.apache.org/repos/asf/hive/blob/24b366f0/metastore/src/java/org/apache/hadoop/hive/metastore/TransactionalValidationListener.java ---------------------------------------------------------------------- diff --git a/metastore/src/java/org/apache/hadoop/hive/metastore/TransactionalValidationListener.java b/metastore/src/java/org/apache/hadoop/hive/metastore/TransactionalValidationListener.java index 96158f8..3e74675 100644 --- a/metastore/src/java/org/apache/hadoop/hive/metastore/TransactionalValidationListener.java +++ b/metastore/src/java/org/apache/hadoop/hive/metastore/TransactionalValidationListener.java @@ -86,6 +86,12 @@ final class TransactionalValidationListener extends MetaStorePreEventListener { throw new MetaException("The table must be bucketed and stored using an ACID compliant" + " format (such as ORC)"); } + + if (newTable.getTableType().equals(TableType.EXTERNAL_TABLE.toString())) { + throw new MetaException(newTable.getDbName() + "." + newTable.getTableName() + + " cannot be declared transactional because it's an external table"); + } + return; } Table oldTable = context.getOldTable(); @@ -144,6 +150,11 @@ final class TransactionalValidationListener extends MetaStorePreEventListener { " format (such as ORC)"); } + if (newTable.getTableType().equals(TableType.EXTERNAL_TABLE.toString())) { + throw new MetaException(newTable.getDbName() + "." + newTable.getTableName() + + " cannot be declared transactional because it's an external table"); + } + // normalize prop name parameters.put(hive_metastoreConstants.TABLE_IS_TRANSACTIONAL, Boolean.TRUE.toString()); return; http://git-wip-us.apache.org/repos/asf/hive/blob/24b366f0/ql/src/test/queries/clientnegative/alter_external_acid.q ---------------------------------------------------------------------- diff --git a/ql/src/test/queries/clientnegative/alter_external_acid.q b/ql/src/test/queries/clientnegative/alter_external_acid.q new file mode 100644 index 0000000..7807278 --- /dev/null +++ b/ql/src/test/queries/clientnegative/alter_external_acid.q @@ -0,0 +1,9 @@ +set hive.support.concurrency=true; +set hive.txn.manager=org.apache.hadoop.hive.ql.lockmgr.DbTxnManager; + + +create external table acid_external (a int, b varchar(128)) clustered by (b) into 2 buckets stored as orc; + +alter table acid_external set TBLPROPERTIES ('transactional'='true'); + +drop table acid_external; \ No newline at end of file http://git-wip-us.apache.org/repos/asf/hive/blob/24b366f0/ql/src/test/queries/clientnegative/create_external_acid.q ---------------------------------------------------------------------- diff --git a/ql/src/test/queries/clientnegative/create_external_acid.q b/ql/src/test/queries/clientnegative/create_external_acid.q new file mode 100644 index 0000000..d6b2d84 --- /dev/null +++ b/ql/src/test/queries/clientnegative/create_external_acid.q @@ -0,0 +1,6 @@ +set hive.support.concurrency=true; +set hive.txn.manager=org.apache.hadoop.hive.ql.lockmgr.DbTxnManager; + + +create external table acid_external (a int, b varchar(128)) clustered by (b) into 2 buckets stored as orc TBLPROPERTIES ('transactional'='true'); + http://git-wip-us.apache.org/repos/asf/hive/blob/24b366f0/ql/src/test/results/clientnegative/alter_external_acid.q.out ---------------------------------------------------------------------- diff --git a/ql/src/test/results/clientnegative/alter_external_acid.q.out b/ql/src/test/results/clientnegative/alter_external_acid.q.out new file mode 100644 index 0000000..69bba3b --- /dev/null +++ b/ql/src/test/results/clientnegative/alter_external_acid.q.out @@ -0,0 +1,13 @@ +PREHOOK: query: create external table acid_external (a int, b varchar(128)) clustered by (b) into 2 buckets stored as orc +PREHOOK: type: CREATETABLE +PREHOOK: Output: database:default +PREHOOK: Output: default@acid_external +POSTHOOK: query: create external table acid_external (a int, b varchar(128)) clustered by (b) into 2 buckets stored as orc +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: database:default +POSTHOOK: Output: default@acid_external +PREHOOK: query: alter table acid_external set TBLPROPERTIES ('transactional'='true') +PREHOOK: type: ALTERTABLE_PROPERTIES +PREHOOK: Input: default@acid_external +PREHOOK: Output: default@acid_external +FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. Unable to alter table. default.acid_external cannot be declared transactional because it's an external table http://git-wip-us.apache.org/repos/asf/hive/blob/24b366f0/ql/src/test/results/clientnegative/create_external_acid.q.out ---------------------------------------------------------------------- diff --git a/ql/src/test/results/clientnegative/create_external_acid.q.out b/ql/src/test/results/clientnegative/create_external_acid.q.out new file mode 100644 index 0000000..123fe5a --- /dev/null +++ b/ql/src/test/results/clientnegative/create_external_acid.q.out @@ -0,0 +1,5 @@ +PREHOOK: query: create external table acid_external (a int, b varchar(128)) clustered by (b) into 2 buckets stored as orc TBLPROPERTIES ('transactional'='true') +PREHOOK: type: CREATETABLE +PREHOOK: Output: database:default +PREHOOK: Output: default@acid_external +FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. MetaException(message:default.acid_external cannot be declared transactional because it's an external table)