Re: constraint exclusion and nulls in IN (..) clause
Emre Hasegeli <emre@hasegeli.com>
From: Emre Hasegeli <emre@hasegeli.com>
To: Amit Langote <Langote_Amit_f8@lab.ntt.co.jp>
Cc: Ashutosh Bapat <ashutosh.bapat@enterprisedb.com>, Pg Hackers <pgsql-hackers@postgresql.org>
Date: 2018-03-04T13:12:49Z
Lists: pgsql-hackers
> Yeah, the patch in its current form is wrong, because it will give wrong
> answers if the operator being used in a SAOP is non-strict. I modified
> the patch to consider operator strictness before doing anything with nulls.
I tried to review this patch without any familiarity to the code.
arrayconst_next_fn():
> + /* skip nulls if ok to do so */
> + if (state->opisstrict)
> + {
> + while (state->elem_nulls[state->next_elem])
> + state->next_elem++;
> + }
Shouldn't we check if we consumed all elements (state->next_elem >=
state->num_elems) inside the while loop?
arrayexpr_next_fn():
> + /* skip nulls if ok to do so */
> + if (state->opisstrict)
> + {
> + Node *node = (Node *) lfirst(state->next);
> +
> + while (IsA(node, Const) && ((Const *) node)->constisnull)
> + state->next = lnext(state->next);
> + }
I cannot find a way to test this change. Can you imagine a query to
exercise it on the regression tests?
Commits
-
Improve predtest.c's handling of cases with NULL-constant inputs.
- 0f0deb719483 11.0 landed