From: | Amit Langote <Langote_Amit_f8(at)lab(dot)ntt(dot)co(dot)jp> |
---|---|
To: | emre(at)hasegeli(dot)com |
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-05 01:59:37 |
Message-ID: | 837bd350-6aeb-d0ec-d51c-6a0dd740798f@lab.ntt.co.jp |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
Hi.
On 2018/03/04 22:12, Emre Hasegeli wrote:
>> 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.
Thanks for the review.
> 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?
You're right. Fixed.
> 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?
So far, I hadn't either. I figured one out and added it to inherit.sql.
Basically, I needed to write the query such that an IN () expression
doesn't get const-simplified to a Const containing array, but rather
remains an ArrayExpr. So, arrayexpr_*() functions in predtest.c are now
exercised.
Attached updated patch.
Thanks,
Amit
Attachment | Content-Type | Size |
---|---|---|
v3-0001-Disregard-nulls-in-SAOP-rightarg-array-list-durin.patch | text/plain | 6.5 KB |
From | Date | Subject | |
---|---|---|---|
Next Message | Amit Langote | 2018-03-05 02:21:46 | Re: non-bulk inserts and tuple routing |
Previous Message | Michael Paquier | 2018-03-05 01:53:58 | Re: Server won't start with fallback setting by initdb. |