diff --git a/itests/src/test/resources/testconfiguration.properties b/itests/src/test/resources/testconfiguration.properties index 9e95d1b..d8f3d70 100644 --- a/itests/src/test/resources/testconfiguration.properties +++ b/itests/src/test/resources/testconfiguration.properties @@ -351,7 +351,8 @@ encrypted.query.files=encryption_join_unencrypted_tbl.q,\ encryption_unencrypted_nonhdfs_external_tables.q \ encryption_move_tbl.q \ encryption_drop_table.q \ - encryption_insert_values.q + encryption_insert_values.q \ + encryption_drop_view.q beeline.positive.exclude=add_part_exist.q,\ alter1.q,\ diff --git a/metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java b/metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java index 5d8718c..d81c856 100644 --- a/metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java +++ b/metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java @@ -1535,7 +1535,8 @@ private boolean drop_table_core(final RawStore ms, final String dbname, final St } } - if(!ifPurge) { + // tblPath will be null when tbl is a view. We skip the following if block in that case. + if(tblPath != null && !ifPurge) { String trashInterval = hiveConf.get("fs.trash.interval"); boolean trashEnabled = trashInterval != null && trashInterval.length() > 0 && Float.parseFloat(trashInterval) > 0; diff --git a/ql/src/test/queries/clientpositive/encryption_drop_view.q b/ql/src/test/queries/clientpositive/encryption_drop_view.q new file mode 100644 index 0000000..911583a --- /dev/null +++ b/ql/src/test/queries/clientpositive/encryption_drop_view.q @@ -0,0 +1,6 @@ +DROP TABLE IF EXISTS dve_encrypted_table PURGE; +CREATE TABLE dve_encrypted_table (key INT, value STRING) LOCATION '${hiveconf:hive.metastore.warehouse.dir}/default/dve_encrypted_table'; +CRYPTO CREATE_KEY --keyName key_128 --bitLength 128; +CRYPTO CREATE_ZONE --keyName key_128 --path ${hiveconf:hive.metastore.warehouse.dir}/default/dve_encrypted_table; +CREATE VIEW dve_view AS SELECT * FROM dve_encrypted_table; +DROP VIEW dve_view; diff --git a/ql/src/test/results/clientpositive/encrypted/encryption_drop_view.q.out b/ql/src/test/results/clientpositive/encrypted/encryption_drop_view.q.out new file mode 100644 index 0000000..7958b39 --- /dev/null +++ b/ql/src/test/results/clientpositive/encrypted/encryption_drop_view.q.out @@ -0,0 +1,34 @@ +PREHOOK: query: DROP TABLE IF EXISTS dve_encrypted_table PURGE +PREHOOK: type: DROPTABLE +POSTHOOK: query: DROP TABLE IF EXISTS dve_encrypted_table PURGE +POSTHOOK: type: DROPTABLE +#### A masked pattern was here #### +PREHOOK: type: CREATETABLE +#### A masked pattern was here #### +PREHOOK: Output: database:default +PREHOOK: Output: default@dve_encrypted_table +#### A masked pattern was here #### +POSTHOOK: type: CREATETABLE +#### A masked pattern was here #### +POSTHOOK: Output: database:default +POSTHOOK: Output: default@dve_encrypted_table +Encryption key created: 'key_128' +Encryption zone created: '/build/ql/test/data/warehouse/default/dve_encrypted_table' using key: 'key_128' +PREHOOK: query: CREATE VIEW dve_view AS SELECT * FROM dve_encrypted_table +PREHOOK: type: CREATEVIEW +PREHOOK: Input: default@dve_encrypted_table +PREHOOK: Output: database:default +PREHOOK: Output: default@dve_view +POSTHOOK: query: CREATE VIEW dve_view AS SELECT * FROM dve_encrypted_table +POSTHOOK: type: CREATEVIEW +POSTHOOK: Input: default@dve_encrypted_table +POSTHOOK: Output: database:default +POSTHOOK: Output: default@dve_view +PREHOOK: query: DROP VIEW dve_view +PREHOOK: type: DROPVIEW +PREHOOK: Input: default@dve_view +PREHOOK: Output: default@dve_view +POSTHOOK: query: DROP VIEW dve_view +POSTHOOK: type: DROPVIEW +POSTHOOK: Input: default@dve_view +POSTHOOK: Output: default@dve_view