Re: constraint exclusion and nulls in IN (..) clause

From: Emre Hasegeli <emre(at)hasegeli(dot)com>
To: Amit Langote <Langote_Amit_f8(at)lab(dot)ntt(dot)co(dot)jp>
Cc: Ashutosh Bapat <ashutosh(dot)bapat(at)enterprisedb(dot)com>, Pg Hackers <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: constraint exclusion and nulls in IN (..) clause
Date: 2018-03-04 13:12:49
Message-ID: CAE2gYzxYx=R=1o=8NKfZx6hzO9C4-ZJK864iHYXYWMi-PiP04A@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
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?

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message David Rowley 2018-03-04 14:02:22 Re: [HACKERS] Removing useless DISTINCT clauses
Previous Message Pavel Stehule 2018-03-04 12:37:39 Re: [HACKERS] plpgsql - additional extra checks