aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDean Rasheed <dean.a.rasheed@gmail.com>2023-01-10 14:16:27 +0000
committerDean Rasheed <dean.a.rasheed@gmail.com>2023-01-10 14:16:27 +0000
commit38255f2d0059a101c3fb791d6523a9e66e55aa66 (patch)
tree448b2d1782e7b384d2e48e28724f728641e049fd /src
parent18b81258ab60cdd172329fe80dd2314d587bd551 (diff)
downloadpostgresql-38255f2d0059a101c3fb791d6523a9e66e55aa66.tar.gz
postgresql-38255f2d0059a101c3fb791d6523a9e66e55aa66.zip
Fix MERGE's test for unreachable WHEN clauses.
The former code would only detect an unreachable WHEN clause if it had an AND condition. Fix, so that unreachable unconditional WHEN clauses are also detected. Back-patch to v15, where MERGE was added. Discussion: https://postgr.es/m/CAEZATCVQ=7E2z4cSBB49jjeGGsB6WeoYQY32NDeSvcHiLUZ=ow@mail.gmail.com
Diffstat (limited to 'src')
-rw-r--r--src/backend/parser/parse_merge.c6
-rw-r--r--src/test/regress/expected/merge.out2
-rw-r--r--src/test/regress/sql/merge.sql2
3 files changed, 5 insertions, 5 deletions
diff --git a/src/backend/parser/parse_merge.c b/src/backend/parser/parse_merge.c
index 62c2ff69f0c..e8865bfaf54 100644
--- a/src/backend/parser/parse_merge.c
+++ b/src/backend/parser/parse_merge.c
@@ -155,12 +155,12 @@ transformMergeStmt(ParseState *pstate, MergeStmt *stmt)
/*
* Check for unreachable WHEN clauses
*/
- if (mergeWhenClause->condition == NULL)
- is_terminal[when_type] = true;
- else if (is_terminal[when_type])
+ if (is_terminal[when_type])
ereport(ERROR,
(errcode(ERRCODE_SYNTAX_ERROR),
errmsg("unreachable WHEN clause specified after unconditional WHEN clause")));
+ if (mergeWhenClause->condition == NULL)
+ is_terminal[when_type] = true;
}
/*
diff --git a/src/test/regress/expected/merge.out b/src/test/regress/expected/merge.out
index 958fb85305c..21a82eefbcd 100644
--- a/src/test/regress/expected/merge.out
+++ b/src/test/regress/expected/merge.out
@@ -659,7 +659,7 @@ USING source AS s
ON t.tid = s.sid
WHEN MATCHED THEN /* Terminal WHEN clause for MATCHED */
DELETE
-WHEN MATCHED AND s.delta > 0 THEN
+WHEN MATCHED THEN
UPDATE SET balance = t.balance - s.delta;
ERROR: unreachable WHEN clause specified after unconditional WHEN clause
ROLLBACK;
diff --git a/src/test/regress/sql/merge.sql b/src/test/regress/sql/merge.sql
index 98fe1040bd4..fdbcd708823 100644
--- a/src/test/regress/sql/merge.sql
+++ b/src/test/regress/sql/merge.sql
@@ -438,7 +438,7 @@ USING source AS s
ON t.tid = s.sid
WHEN MATCHED THEN /* Terminal WHEN clause for MATCHED */
DELETE
-WHEN MATCHED AND s.delta > 0 THEN
+WHEN MATCHED THEN
UPDATE SET balance = t.balance - s.delta;
ROLLBACK;