Commit 1ef60dab authored by Heikki Linnakangas's avatar Heikki Linnakangas

Don't let transform_null_equals=on affect CASE foo WHEN NULL ... constructs.

transform_null_equals is only supposed to affect "foo = NULL" expressions
given directly by the user, not the internal "foo = NULL" expression
generated from CASE-WHEN.

This fixes bug #6242, reported by Sergey. Backpatch to all supported
branches.
parent 041dceb2
...@@ -836,12 +836,15 @@ transformAExprOp(ParseState *pstate, A_Expr *a) ...@@ -836,12 +836,15 @@ transformAExprOp(ParseState *pstate, A_Expr *a)
/* /*
* Special-case "foo = NULL" and "NULL = foo" for compatibility with * Special-case "foo = NULL" and "NULL = foo" for compatibility with
* standards-broken products (like Microsoft's). Turn these into IS NULL * standards-broken products (like Microsoft's). Turn these into IS NULL
* exprs. * exprs. (If either side is a CaseTestExpr, then the expression was
* generated internally from a CASE-WHEN expression, and
* transform_null_equals does not apply.)
*/ */
if (Transform_null_equals && if (Transform_null_equals &&
list_length(a->name) == 1 && list_length(a->name) == 1 &&
strcmp(strVal(linitial(a->name)), "=") == 0 && strcmp(strVal(linitial(a->name)), "=") == 0 &&
(exprIsNullConstant(lexpr) || exprIsNullConstant(rexpr))) (exprIsNullConstant(lexpr) || exprIsNullConstant(rexpr)) &&
(!IsA(lexpr, CaseTestExpr) && !IsA(rexpr, CaseTestExpr)))
{ {
NullTest *n = makeNode(NullTest); NullTest *n = makeNode(NullTest);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment