This is an automated email from the ASF dual-hosted git repository.

kasakrisz pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hive.git


The following commit(s) were added to refs/heads/master by this push:
     new 8383222af76 HIVE-30054: Iceberg: metadata delete optimization allows 
users without DELETE permission to bypass authorization (#6786)
8383222af76 is described below

commit 8383222af76b9e5e5eca0c5beb324234903069ac
Author: Krisztian Kasa <[email protected]>
AuthorDate: Wed Sep 16 13:57:46 2026 +0200

    HIVE-30054: Iceberg: metadata delete optimization allows users without 
DELETE permission to bypass authorization (#6786)
---
 .../iceberg_authorization_delete_via_metadata.q    | 20 ++++++++++++++
 ...iceberg_authorization_delete_via_metadata.q.out | 31 ++++++++++++++++++++++
 .../src/test/results/positive/col_stats.q.out      |  2 ++
 .../delete_iceberg_copy_on_write_partitioned.q.out |  4 +++
 .../positive/delete_iceberg_partitioned_orc.q.out  |  2 ++
 .../delete_iceberg_partitioned_parquet.q.out       |  2 ++
 .../positive/iceberg_atomic_merge_update.q.out     |  2 ++
 .../llap/hadoop_catalog_create_table.q.out         |  2 ++
 ...berg_major_compaction_partition_evolution.q.out |  2 ++
 ...erg_major_compaction_partition_evolution2.q.out |  4 +++
 .../iceberg_major_compaction_partitioned.q.out     |  4 +++
 ...iceberg_major_compaction_schema_evolution.q.out |  2 ++
 ...iceberg_major_compaction_single_partition.q.out |  2 ++
 .../iceberg_major_compaction_unpartitioned.q.out   |  2 ++
 ...g_major_compaction_unpartitioned_w_filter.q.out |  2 ++
 .../positive/llap/llap_iceberg_read_orc.q.out      |  2 ++
 .../test/results/positive/metadata_delete.q.out    |  4 +++
 .../positive/vectorized_iceberg_merge_mixed.q.out  |  2 ++
 .../hive/ql/parse/DeleteSemanticAnalyzer.java      |  7 +++--
 19 files changed, 96 insertions(+), 2 deletions(-)

diff --git 
a/iceberg/iceberg-handler/src/test/queries/negative/iceberg_authorization_delete_via_metadata.q
 
b/iceberg/iceberg-handler/src/test/queries/negative/iceberg_authorization_delete_via_metadata.q
new file mode 100644
index 00000000000..e406a634a3b
--- /dev/null
+++ 
b/iceberg/iceberg-handler/src/test/queries/negative/iceberg_authorization_delete_via_metadata.q
@@ -0,0 +1,20 @@
+set hive.test.authz.sstd.hs2.mode=true;
+set 
hive.security.authorization.manager=org.apache.hadoop.hive.ql.security.authorization.plugin.sqlstd.SQLStdHiveAuthorizerFactoryForTest;
+set 
hive.security.authenticator.manager=org.apache.hadoop.hive.ql.security.SessionStateConfigUserAuthenticator;
+set hive.security.authorization.enabled=true;
+
+set user.name=owner_user;
+
+drop table if exists ice_tbl;
+
+create table ice_tbl (id int, val string) partitioned by (p int) stored by 
iceberg stored as orc tblproperties ('format-version'='2');
+
+insert into ice_tbl values 
+(1, 'a', 10), (2, 'b', 10), (3, 'c', 20), (4, 'd', 20);
+
+grant select on table ice_tbl to user read_only_user;
+
+set user.name=read_only_user;
+set hive.optimize.delete.metadata.only=true;
+
+delete from ice_tbl where p = 10;
diff --git 
a/iceberg/iceberg-handler/src/test/results/negative/iceberg_authorization_delete_via_metadata.q.out
 
b/iceberg/iceberg-handler/src/test/results/negative/iceberg_authorization_delete_via_metadata.q.out
new file mode 100644
index 00000000000..72974813081
--- /dev/null
+++ 
b/iceberg/iceberg-handler/src/test/results/negative/iceberg_authorization_delete_via_metadata.q.out
@@ -0,0 +1,31 @@
+PREHOOK: query: drop table if exists ice_tbl
+PREHOOK: type: DROPTABLE
+PREHOOK: Output: database:default
+POSTHOOK: query: drop table if exists ice_tbl
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Output: database:default
+PREHOOK: query: create table ice_tbl (id int, val string) partitioned by (p 
int) stored by iceberg stored as orc tblproperties ('format-version'='2')
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@ice_tbl
+POSTHOOK: query: create table ice_tbl (id int, val string) partitioned by (p 
int) stored by iceberg stored as orc tblproperties ('format-version'='2')
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@ice_tbl
+PREHOOK: query: insert into ice_tbl values 
+(1, 'a', 10), (2, 'b', 10), (3, 'c', 20), (4, 'd', 20)
+PREHOOK: type: QUERY
+PREHOOK: Input: _dummy_database@_dummy_table
+PREHOOK: Output: default@ice_tbl
+POSTHOOK: query: insert into ice_tbl values 
+(1, 'a', 10), (2, 'b', 10), (3, 'c', 20), (4, 'd', 20)
+POSTHOOK: type: QUERY
+POSTHOOK: Input: _dummy_database@_dummy_table
+POSTHOOK: Output: default@ice_tbl
+PREHOOK: query: grant select on table ice_tbl to user read_only_user
+PREHOOK: type: GRANT_PRIVILEGE
+PREHOOK: Output: default@ice_tbl
+POSTHOOK: query: grant select on table ice_tbl to user read_only_user
+POSTHOOK: type: GRANT_PRIVILEGE
+POSTHOOK: Output: default@ice_tbl
+FAILED: HiveAccessControlException Permission denied: Principal 
[name=read_only_user, type=USER] does not have following privileges for 
operation QUERY [[DELETE] on Object [type=TABLE_OR_VIEW, 
name=hive.default.ice_tbl]]
diff --git a/iceberg/iceberg-handler/src/test/results/positive/col_stats.q.out 
b/iceberg/iceberg-handler/src/test/results/positive/col_stats.q.out
index c9684a22807..bbe17a56676 100644
--- a/iceberg/iceberg-handler/src/test/results/positive/col_stats.q.out
+++ b/iceberg/iceberg-handler/src/test/results/positive/col_stats.q.out
@@ -277,10 +277,12 @@ POSTHOOK: Output: default@tbl_ice_puffin
 PREHOOK: query: delete from tbl_ice_puffin where a <= 2
 PREHOOK: type: QUERY
 PREHOOK: Input: default@tbl_ice_puffin
+PREHOOK: Output: default@tbl_ice_puffin
 PREHOOK: Output: hdfs://### HDFS PATH ###
 POSTHOOK: query: delete from tbl_ice_puffin where a <= 2
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@tbl_ice_puffin
+POSTHOOK: Output: default@tbl_ice_puffin
 POSTHOOK: Output: hdfs://### HDFS PATH ###
 PREHOOK: query: analyze table tbl_ice_puffin compute statistics for columns A, 
C
 PREHOOK: type: ANALYZE_TABLE
diff --git 
a/iceberg/iceberg-handler/src/test/results/positive/delete_iceberg_copy_on_write_partitioned.q.out
 
b/iceberg/iceberg-handler/src/test/results/positive/delete_iceberg_copy_on_write_partitioned.q.out
index 2f1e38fbe1a..b8799678873 100644
--- 
a/iceberg/iceberg-handler/src/test/results/positive/delete_iceberg_copy_on_write_partitioned.q.out
+++ 
b/iceberg/iceberg-handler/src/test/results/positive/delete_iceberg_copy_on_write_partitioned.q.out
@@ -23,10 +23,12 @@ POSTHOOK: Output: default@tbl_ice
 PREHOOK: query: explain delete from tbl_ice where b in ('one', 'four') or a = 
22
 PREHOOK: type: QUERY
 PREHOOK: Input: default@tbl_ice
+PREHOOK: Output: default@tbl_ice
 PREHOOK: Output: hdfs://### HDFS PATH ###
 POSTHOOK: query: explain delete from tbl_ice where b in ('one', 'four') or a = 
22
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@tbl_ice
+POSTHOOK: Output: default@tbl_ice
 POSTHOOK: Output: hdfs://### HDFS PATH ###
 STAGE DEPENDENCIES:
   Stage-1 is a root stage
@@ -40,10 +42,12 @@ STAGE PLANS:
 PREHOOK: query: delete from tbl_ice where b in ('one', 'four') or a = 22
 PREHOOK: type: QUERY
 PREHOOK: Input: default@tbl_ice
+PREHOOK: Output: default@tbl_ice
 PREHOOK: Output: hdfs://### HDFS PATH ###
 POSTHOOK: query: delete from tbl_ice where b in ('one', 'four') or a = 22
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@tbl_ice
+POSTHOOK: Output: default@tbl_ice
 POSTHOOK: Output: hdfs://### HDFS PATH ###
 PREHOOK: query: select * from tbl_ice order by a
 PREHOOK: type: QUERY
diff --git 
a/iceberg/iceberg-handler/src/test/results/positive/delete_iceberg_partitioned_orc.q.out
 
b/iceberg/iceberg-handler/src/test/results/positive/delete_iceberg_partitioned_orc.q.out
index b17ea857b98..9ade323c2a9 100644
--- 
a/iceberg/iceberg-handler/src/test/results/positive/delete_iceberg_partitioned_orc.q.out
+++ 
b/iceberg/iceberg-handler/src/test/results/positive/delete_iceberg_partitioned_orc.q.out
@@ -23,10 +23,12 @@ POSTHOOK: Output: default@tbl_ice
 PREHOOK: query: delete from tbl_ice where b in ('one', 'four') or a = 22
 PREHOOK: type: QUERY
 PREHOOK: Input: default@tbl_ice
+PREHOOK: Output: default@tbl_ice
 PREHOOK: Output: hdfs://### HDFS PATH ###
 POSTHOOK: query: delete from tbl_ice where b in ('one', 'four') or a = 22
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@tbl_ice
+POSTHOOK: Output: default@tbl_ice
 POSTHOOK: Output: hdfs://### HDFS PATH ###
 PREHOOK: query: select * from tbl_ice order by a
 PREHOOK: type: QUERY
diff --git 
a/iceberg/iceberg-handler/src/test/results/positive/delete_iceberg_partitioned_parquet.q.out
 
b/iceberg/iceberg-handler/src/test/results/positive/delete_iceberg_partitioned_parquet.q.out
index d02e9896b0e..7df47675766 100644
--- 
a/iceberg/iceberg-handler/src/test/results/positive/delete_iceberg_partitioned_parquet.q.out
+++ 
b/iceberg/iceberg-handler/src/test/results/positive/delete_iceberg_partitioned_parquet.q.out
@@ -23,10 +23,12 @@ POSTHOOK: Output: default@tbl_ice
 PREHOOK: query: delete from tbl_ice where b in ('one', 'four') or a = 22
 PREHOOK: type: QUERY
 PREHOOK: Input: default@tbl_ice
+PREHOOK: Output: default@tbl_ice
 PREHOOK: Output: hdfs://### HDFS PATH ###
 POSTHOOK: query: delete from tbl_ice where b in ('one', 'four') or a = 22
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@tbl_ice
+POSTHOOK: Output: default@tbl_ice
 POSTHOOK: Output: hdfs://### HDFS PATH ###
 PREHOOK: query: select * from tbl_ice order by a
 PREHOOK: type: QUERY
diff --git 
a/iceberg/iceberg-handler/src/test/results/positive/iceberg_atomic_merge_update.q.out
 
b/iceberg/iceberg-handler/src/test/results/positive/iceberg_atomic_merge_update.q.out
index 2aa1b4f56cc..0be99a5a2bf 100644
--- 
a/iceberg/iceberg-handler/src/test/results/positive/iceberg_atomic_merge_update.q.out
+++ 
b/iceberg/iceberg-handler/src/test/results/positive/iceberg_atomic_merge_update.q.out
@@ -217,10 +217,12 @@ POSTHOOK: Output: default@calls_v2
 PREHOOK: query: delete from calls_v2 where year=2024
 PREHOOK: type: QUERY
 PREHOOK: Input: default@calls_v2
+PREHOOK: Output: default@calls_v2
 PREHOOK: Output: hdfs://### HDFS PATH ###
 POSTHOOK: query: delete from calls_v2 where year=2024
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@calls_v2
+POSTHOOK: Output: default@calls_v2
 POSTHOOK: Output: hdfs://### HDFS PATH ###
 PREHOOK: query: select s.operation, s.summary['added-records'], 
s.summary['deleted-records'] from default.calls_v2.snapshots s
   order by s.snapshot_id
diff --git 
a/iceberg/iceberg-handler/src/test/results/positive/llap/hadoop_catalog_create_table.q.out
 
b/iceberg/iceberg-handler/src/test/results/positive/llap/hadoop_catalog_create_table.q.out
index 3e3f7761f05..7f1a6c5ba6b 100644
--- 
a/iceberg/iceberg-handler/src/test/results/positive/llap/hadoop_catalog_create_table.q.out
+++ 
b/iceberg/iceberg-handler/src/test/results/positive/llap/hadoop_catalog_create_table.q.out
@@ -391,10 +391,12 @@ Storage Desc Params:
 PREHOOK: query: delete from orders2 where itemid = 3
 PREHOOK: type: QUERY
 PREHOOK: Input: default@orders2
+PREHOOK: Output: default@orders2
 #### A masked pattern was here ####
 POSTHOOK: query: delete from orders2 where itemid = 3
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@orders2
+POSTHOOK: Output: default@orders2
 #### A masked pattern was here ####
 PREHOOK: query: select count(*) from orders2
 PREHOOK: type: QUERY
diff --git 
a/iceberg/iceberg-handler/src/test/results/positive/llap/iceberg_major_compaction_partition_evolution.q.out
 
b/iceberg/iceberg-handler/src/test/results/positive/llap/iceberg_major_compaction_partition_evolution.q.out
index 9167ce44f8a..13889cdb0e7 100644
--- 
a/iceberg/iceberg-handler/src/test/results/positive/llap/iceberg_major_compaction_partition_evolution.q.out
+++ 
b/iceberg/iceberg-handler/src/test/results/positive/llap/iceberg_major_compaction_partition_evolution.q.out
@@ -232,10 +232,12 @@ POSTHOOK: Output: default@ice_orc
 PREHOOK: query: delete from ice_orc where last_name in ('ln1a', 'ln8a')
 PREHOOK: type: QUERY
 PREHOOK: Input: default@ice_orc
+PREHOOK: Output: default@ice_orc
 #### A masked pattern was here ####
 POSTHOOK: query: delete from ice_orc where last_name in ('ln1a', 'ln8a')
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@ice_orc
+POSTHOOK: Output: default@ice_orc
 #### A masked pattern was here ####
 PREHOOK: query: alter table ice_orc create tag v4
 PREHOOK: type: ALTERTABLE_CREATETAG
diff --git 
a/iceberg/iceberg-handler/src/test/results/positive/llap/iceberg_major_compaction_partition_evolution2.q.out
 
b/iceberg/iceberg-handler/src/test/results/positive/llap/iceberg_major_compaction_partition_evolution2.q.out
index 3e8bda76a61..9a0f3545ca2 100644
--- 
a/iceberg/iceberg-handler/src/test/results/positive/llap/iceberg_major_compaction_partition_evolution2.q.out
+++ 
b/iceberg/iceberg-handler/src/test/results/positive/llap/iceberg_major_compaction_partition_evolution2.q.out
@@ -66,10 +66,12 @@ PREHOOK: query: delete from ice_orc where last_name in 
('ln3', 'ln4')
 PREHOOK: type: QUERY
 PREHOOK: Input: ice_comp@ice_orc
 #### A masked pattern was here ####
+PREHOOK: Output: ice_comp@ice_orc
 POSTHOOK: query: delete from ice_orc where last_name in ('ln3', 'ln4')
 POSTHOOK: type: QUERY
 POSTHOOK: Input: ice_comp@ice_orc
 #### A masked pattern was here ####
+POSTHOOK: Output: ice_comp@ice_orc
 PREHOOK: query: alter table ice_orc set partition spec(dept_id)
 PREHOOK: type: ALTERTABLE_SETPARTSPEC
 PREHOOK: Input: ice_comp@ice_orc
@@ -113,10 +115,12 @@ PREHOOK: query: delete from ice_orc where last_name in 
('ln7', 'ln8')
 PREHOOK: type: QUERY
 PREHOOK: Input: ice_comp@ice_orc
 #### A masked pattern was here ####
+PREHOOK: Output: ice_comp@ice_orc
 POSTHOOK: query: delete from ice_orc where last_name in ('ln7', 'ln8')
 POSTHOOK: type: QUERY
 POSTHOOK: Input: ice_comp@ice_orc
 #### A masked pattern was here ####
+POSTHOOK: Output: ice_comp@ice_orc
 PREHOOK: query: select * from ice_orc
 PREHOOK: type: QUERY
 PREHOOK: Input: ice_comp@ice_orc
diff --git 
a/iceberg/iceberg-handler/src/test/results/positive/llap/iceberg_major_compaction_partitioned.q.out
 
b/iceberg/iceberg-handler/src/test/results/positive/llap/iceberg_major_compaction_partitioned.q.out
index d45278ef903..1cc01b5684c 100644
--- 
a/iceberg/iceberg-handler/src/test/results/positive/llap/iceberg_major_compaction_partitioned.q.out
+++ 
b/iceberg/iceberg-handler/src/test/results/positive/llap/iceberg_major_compaction_partitioned.q.out
@@ -147,10 +147,12 @@ POSTHOOK: Output: default@ice_orc
 PREHOOK: query: delete from ice_orc where last_name in ('ln1a', 'ln2a', 'ln7a')
 PREHOOK: type: QUERY
 PREHOOK: Input: default@ice_orc
+PREHOOK: Output: default@ice_orc
 #### A masked pattern was here ####
 POSTHOOK: query: delete from ice_orc where last_name in ('ln1a', 'ln2a', 
'ln7a')
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@ice_orc
+POSTHOOK: Output: default@ice_orc
 #### A masked pattern was here ####
 PREHOOK: query: select * from ice_orc
 PREHOOK: type: QUERY
@@ -480,10 +482,12 @@ POSTHOOK: Output: default@ice_orc
 PREHOOK: query: delete from ice_orc where last_name in ('ln11a', 'ln12a', 
'ln17a', 'ln18a')
 PREHOOK: type: QUERY
 PREHOOK: Input: default@ice_orc
+PREHOOK: Output: default@ice_orc
 #### A masked pattern was here ####
 POSTHOOK: query: delete from ice_orc where last_name in ('ln11a', 'ln12a', 
'ln17a', 'ln18a')
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@ice_orc
+POSTHOOK: Output: default@ice_orc
 #### A masked pattern was here ####
 PREHOOK: query: select * from ice_orc
 PREHOOK: type: QUERY
diff --git 
a/iceberg/iceberg-handler/src/test/results/positive/llap/iceberg_major_compaction_schema_evolution.q.out
 
b/iceberg/iceberg-handler/src/test/results/positive/llap/iceberg_major_compaction_schema_evolution.q.out
index 6c2dc4ae8d7..c6297aa188e 100644
--- 
a/iceberg/iceberg-handler/src/test/results/positive/llap/iceberg_major_compaction_schema_evolution.q.out
+++ 
b/iceberg/iceberg-handler/src/test/results/positive/llap/iceberg_major_compaction_schema_evolution.q.out
@@ -181,10 +181,12 @@ POSTHOOK: Output: default@ice_orc
 PREHOOK: query: delete from ice_orc where fname in ('fn1', 'fn3', 'fn7')
 PREHOOK: type: QUERY
 PREHOOK: Input: default@ice_orc
+PREHOOK: Output: default@ice_orc
 #### A masked pattern was here ####
 POSTHOOK: query: delete from ice_orc where fname in ('fn1', 'fn3', 'fn7')
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@ice_orc
+POSTHOOK: Output: default@ice_orc
 #### A masked pattern was here ####
 PREHOOK: query: select * from ice_orc
 PREHOOK: type: QUERY
diff --git 
a/iceberg/iceberg-handler/src/test/results/positive/llap/iceberg_major_compaction_single_partition.q.out
 
b/iceberg/iceberg-handler/src/test/results/positive/llap/iceberg_major_compaction_single_partition.q.out
index 1a97fee77ba..b5934788ee1 100644
--- 
a/iceberg/iceberg-handler/src/test/results/positive/llap/iceberg_major_compaction_single_partition.q.out
+++ 
b/iceberg/iceberg-handler/src/test/results/positive/llap/iceberg_major_compaction_single_partition.q.out
@@ -151,10 +151,12 @@ POSTHOOK: Output: default@ice_orc_wo_evo
 PREHOOK: query: delete from ice_orc_wo_evo where last_name in ('ln1a', 'ln2a', 
'ln7a')
 PREHOOK: type: QUERY
 PREHOOK: Input: default@ice_orc_wo_evo
+PREHOOK: Output: default@ice_orc_wo_evo
 #### A masked pattern was here ####
 POSTHOOK: query: delete from ice_orc_wo_evo where last_name in ('ln1a', 
'ln2a', 'ln7a')
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@ice_orc_wo_evo
+POSTHOOK: Output: default@ice_orc_wo_evo
 #### A masked pattern was here ####
 PREHOOK: query: select * from ice_orc_wo_evo
 PREHOOK: type: QUERY
diff --git 
a/iceberg/iceberg-handler/src/test/results/positive/llap/iceberg_major_compaction_unpartitioned.q.out
 
b/iceberg/iceberg-handler/src/test/results/positive/llap/iceberg_major_compaction_unpartitioned.q.out
index 111e45c495e..d09415a492c 100644
--- 
a/iceberg/iceberg-handler/src/test/results/positive/llap/iceberg_major_compaction_unpartitioned.q.out
+++ 
b/iceberg/iceberg-handler/src/test/results/positive/llap/iceberg_major_compaction_unpartitioned.q.out
@@ -145,10 +145,12 @@ POSTHOOK: Output: default@ice_orc
 PREHOOK: query: delete from ice_orc where last_name in ('ln5a', 'ln6a', 'ln7a')
 PREHOOK: type: QUERY
 PREHOOK: Input: default@ice_orc
+PREHOOK: Output: default@ice_orc
 #### A masked pattern was here ####
 POSTHOOK: query: delete from ice_orc where last_name in ('ln5a', 'ln6a', 
'ln7a')
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@ice_orc
+POSTHOOK: Output: default@ice_orc
 #### A masked pattern was here ####
 PREHOOK: query: select * from ice_orc
 PREHOOK: type: QUERY
diff --git 
a/iceberg/iceberg-handler/src/test/results/positive/llap/iceberg_major_compaction_unpartitioned_w_filter.q.out
 
b/iceberg/iceberg-handler/src/test/results/positive/llap/iceberg_major_compaction_unpartitioned_w_filter.q.out
index b35895c710d..8b03da98bca 100644
--- 
a/iceberg/iceberg-handler/src/test/results/positive/llap/iceberg_major_compaction_unpartitioned_w_filter.q.out
+++ 
b/iceberg/iceberg-handler/src/test/results/positive/llap/iceberg_major_compaction_unpartitioned_w_filter.q.out
@@ -145,10 +145,12 @@ POSTHOOK: Output: default@ice_orc
 PREHOOK: query: delete from ice_orc where last_name in ('ln5a', 'ln6a', 'ln7a')
 PREHOOK: type: QUERY
 PREHOOK: Input: default@ice_orc
+PREHOOK: Output: default@ice_orc
 #### A masked pattern was here ####
 POSTHOOK: query: delete from ice_orc where last_name in ('ln5a', 'ln6a', 
'ln7a')
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@ice_orc
+POSTHOOK: Output: default@ice_orc
 #### A masked pattern was here ####
 PREHOOK: query: select * from ice_orc
 PREHOOK: type: QUERY
diff --git 
a/iceberg/iceberg-handler/src/test/results/positive/llap/llap_iceberg_read_orc.q.out
 
b/iceberg/iceberg-handler/src/test/results/positive/llap/llap_iceberg_read_orc.q.out
index cefa4effc89..1abb38c8bb8 100644
--- 
a/iceberg/iceberg-handler/src/test/results/positive/llap/llap_iceberg_read_orc.q.out
+++ 
b/iceberg/iceberg-handler/src/test/results/positive/llap/llap_iceberg_read_orc.q.out
@@ -211,10 +211,12 @@ POSTHOOK: Output: default@target_ice
 PREHOOK: query: DELETE FROM target_ice WHERE a = 1
 PREHOOK: type: QUERY
 PREHOOK: Input: default@target_ice
+PREHOOK: Output: default@target_ice
 #### A masked pattern was here ####
 POSTHOOK: query: DELETE FROM target_ice WHERE a = 1
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@target_ice
+POSTHOOK: Output: default@target_ice
 #### A masked pattern was here ####
 PREHOOK: query: SELECT * FROM target_ice
 PREHOOK: type: QUERY
diff --git 
a/iceberg/iceberg-handler/src/test/results/positive/metadata_delete.q.out 
b/iceberg/iceberg-handler/src/test/results/positive/metadata_delete.q.out
index d37561e23c5..f9a7dd49751 100644
--- a/iceberg/iceberg-handler/src/test/results/positive/metadata_delete.q.out
+++ b/iceberg/iceberg-handler/src/test/results/positive/metadata_delete.q.out
@@ -33,10 +33,12 @@ POSTHOOK: Output: default@ice_date
 PREHOOK: query: delete from ice_date where a = 1 and b = '2021-01-01'
 PREHOOK: type: QUERY
 PREHOOK: Input: default@ice_date
+PREHOOK: Output: default@ice_date
 PREHOOK: Output: hdfs://### HDFS PATH ###
 POSTHOOK: query: delete from ice_date where a = 1 and b = '2021-01-01'
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@ice_date
+POSTHOOK: Output: default@ice_date
 POSTHOOK: Output: hdfs://### HDFS PATH ###
 PREHOOK: query: select * from ice_date
 PREHOOK: type: QUERY
@@ -330,10 +332,12 @@ POSTHOOK: Output: default@test_delete_config
 PREHOOK: query: explain delete from test_delete_config where b < 5
 PREHOOK: type: QUERY
 PREHOOK: Input: default@test_delete_config
+PREHOOK: Output: default@test_delete_config
 PREHOOK: Output: hdfs://### HDFS PATH ###
 POSTHOOK: query: explain delete from test_delete_config where b < 5
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@test_delete_config
+POSTHOOK: Output: default@test_delete_config
 POSTHOOK: Output: hdfs://### HDFS PATH ###
 STAGE DEPENDENCIES:
   Stage-1 is a root stage
diff --git 
a/iceberg/iceberg-handler/src/test/results/positive/vectorized_iceberg_merge_mixed.q.out
 
b/iceberg/iceberg-handler/src/test/results/positive/vectorized_iceberg_merge_mixed.q.out
index 2bcb7017013..fd79d6b888e 100644
--- 
a/iceberg/iceberg-handler/src/test/results/positive/vectorized_iceberg_merge_mixed.q.out
+++ 
b/iceberg/iceberg-handler/src/test/results/positive/vectorized_iceberg_merge_mixed.q.out
@@ -83,10 +83,12 @@ POSTHOOK: Output: default@store_sales
 PREHOOK: query: delete from store_sales where ss_customer_sk > 2
 PREHOOK: type: QUERY
 PREHOOK: Input: default@store_sales
+PREHOOK: Output: default@store_sales
 PREHOOK: Output: hdfs://### HDFS PATH ###
 POSTHOOK: query: delete from store_sales where ss_customer_sk > 2
 POSTHOOK: type: QUERY
 POSTHOOK: Input: default@store_sales
+POSTHOOK: Output: default@store_sales
 POSTHOOK: Output: hdfs://### HDFS PATH ###
 PREHOOK: query: select count(*) from store_sales
 PREHOOK: type: QUERY
diff --git 
a/ql/src/java/org/apache/hadoop/hive/ql/parse/DeleteSemanticAnalyzer.java 
b/ql/src/java/org/apache/hadoop/hive/ql/parse/DeleteSemanticAnalyzer.java
index 12386371627..ea49952971f 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/parse/DeleteSemanticAnalyzer.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/DeleteSemanticAnalyzer.java
@@ -28,6 +28,7 @@
 import org.apache.hadoop.hive.ql.ddl.table.execute.AlterTableExecuteDesc;
 import org.apache.hadoop.hive.ql.exec.TableScanOperator;
 import org.apache.hadoop.hive.ql.exec.TaskFactory;
+import org.apache.hadoop.hive.ql.hooks.WriteEntity;
 import org.apache.hadoop.hive.ql.io.sarg.ConvertAstToSearchArg;
 import org.apache.hadoop.hive.ql.io.sarg.SearchArgument;
 import org.apache.hadoop.hive.ql.lib.Node;
@@ -132,10 +133,12 @@ private boolean tryMetadataUpdate(Table table, ASTNode 
tabNameNode, ASTNode wher
       return false;
     }
 
-    DDLWork ddlWork = createDDLWorkOfMetadataUpdate(tableName, sarg);
-    rootTasks = Collections.singletonList(TaskFactory.get(ddlWork));
     inputs = sem.getAllInputs();
     outputs = sem.getOutputs();
+    outputs.add(new WriteEntity(table, WriteEntity.WriteType.DELETE));
+
+    DDLWork ddlWork = createDDLWorkOfMetadataUpdate(tableName, sarg);
+    rootTasks = Collections.singletonList(TaskFactory.get(ddlWork));
     updateOutputs(table);
     return true;
   }

Reply via email to