diff --git a/src/test/regress/expected/merge.out b/src/test/regress/expected/merge.out index 9cb1d870..4441e399 100644 --- a/src/test/regress/expected/merge.out +++ b/src/test/regress/expected/merge.out @@ -1609,6 +1609,31 @@ LATERAL (SELECT r_action, r_tid, r_balance FROM merge_into_sq_target(sid, balanc INSERT | 4 | 110 (3 rows) +ROLLBACK; +-- Test that old/new column IS NULL is constant-folded +-- for NOT NULL columns in MERGE RETURNING +BEGIN; +MERGE INTO sq_target t +USING sq_source s ON tid = sid +WHEN MATCHED AND tid >= 2 THEN + UPDATE SET balance = t.balance + delta +WHEN NOT MATCHED THEN + INSERT (balance, tid) VALUES (balance + delta, sid) +WHEN MATCHED AND tid < 2 THEN + DELETE +RETURNING merge_action(), + old.tid IS NULL AS old_tid_is_null, + new.tid IS NULL AS new_tid_is_null, + old IS NULL AS old_row_is_null, + new IS NULL AS new_row_is_null; + merge_action | old_tid_is_null | new_tid_is_null | old_row_is_null | new_row_is_null +--------------+-----------------+-----------------+-----------------+----------------- + DELETE | f | t | f | t + UPDATE | f | f | f | f + INSERT | t | f | t | f +(3 rows) + ROLLBACK; -- EXPLAIN CREATE TABLE ex_mtarget (a int, b int) diff --git a/src/test/regress/sql/merge.sql b/src/test/regress/sql/merge.sql index 2660b19f..6789fcd5 100644 --- a/src/test/regress/sql/merge.sql +++ b/src/test/regress/sql/merge.sql @@ -1060,6 +1060,25 @@ FROM (VALUES (1, 0, 0), (3, 0, 20), (4, 100, 10)) AS v(sid, balance, delta), LATERAL (SELECT r_action, r_tid, r_balance FROM merge_into_sq_target(sid, balance, delta)) m; ROLLBACK; +-- Test that old/new column IS NULL is constant-folded +-- for NOT NULL columns in MERGE RETURNING +BEGIN; +MERGE INTO sq_target t +USING sq_source s ON tid = sid +WHEN MATCHED AND tid >= 2 THEN + UPDATE SET balance = t.balance + delta +WHEN NOT MATCHED THEN + INSERT (balance, tid) VALUES (balance + delta, sid) +WHEN MATCHED AND tid < 2 THEN + DELETE +RETURNING merge_action(), + old.tid IS NULL AS old_tid_is_null, + new.tid IS NULL AS new_tid_is_null, + old IS NULL AS old_row_is_null, + new IS NULL AS new_row_is_null; +ROLLBACK; + -- EXPLAIN CREATE TABLE ex_mtarget (a int, b int) WITH (autovacuum_enabled=off);