Re: constraint exclusion and nulls in IN (..) clause - Mailing list pgsql-hackers

From Amit Langote
Subject Re: constraint exclusion and nulls in IN (..) clause
Date
Msg-id 38984559-ed0f-6b67-83ea-7006ac1ce6b9@lab.ntt.co.jp
Whole thread Raw
In response to Re: constraint exclusion and nulls in IN (..) clause  (Emre Hasegeli <emre@hasegeli.com>)
Responses Re: constraint exclusion and nulls in IN (..) clause  (Emre Hasegeli <emre@hasegeli.com>)
List pgsql-hackers
On 2018/03/06 18:46, Emre Hasegeli wrote:
>> Patch teaches it to ignore nulls when it's known that the operator being
>> used is strict.  It is harmless and has the benefit that constraint
>> exclusion gives an answer that is consistent with what actually running
>> such a qual against a table's rows would do.
> 
> Yes, I understood that.  I just meant that I don't know if it is the
> best way to skip NULLs inside "next_fn".  Maybe the caller of the
> "next_fn"s should skip them.  Anyway, the committer can judge this
> better.

I think putting that inside those next_fn functions tends to centralize
the logic and would run only only for the intended cases.

>> Yeah.  Rearranged the code to fix that.
> 
> This version looks correct to me.
> 
>> +           state->next = (state->next != NULL) ? lnext(state->next) : NULL;
>> +           node = (state->next != NULL) ? lfirst(state->next) : NULL;
> 
> I think it is unnecessary to check for (state->next != NULL) two
> times.  We can put those in a single if.

Hmm, state->next refers to two different pointer values on line 1 and line
2.  It may end up being set to NULL on line 1.  Am I missing something?

Thanks,
Amit



pgsql-hackers by date:

Previous
From: Emre Hasegeli
Date:
Subject: Re: constraint exclusion and nulls in IN (..) clause
Next
From: Emre Hasegeli
Date:
Subject: Re: constraint exclusion and nulls in IN (..) clause