Re: Use opresulttype instead of calling SearchSysCache1() in match_orclause_to_indexcol()

Tender Wang <tndrwang@gmail.com>

From: Tender Wang <tndrwang@gmail.com>
To: Tom Lane <tgl@sss.pgh.pa.us>
Cc: PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>
Date: 2025-10-18T03:12:12Z
Lists: pgsql-hackers

Attachments

Tom Lane <tgl@sss.pgh.pa.us> 于2025年9月20日周六 00:16写道:

> Tender Wang <tndrwang@gmail.com> writes:
> > While working on another issue, I stepped into
> match_orclause_to_indexcol().
> > I found below codes:
>
> > /* Only the operator returning a boolean suit the transformation. */
> > if (get_op_rettype(opno) != BOOLOID)
> >       break;
>
> I don't understand what purpose this check serves at all.
> We are looking at an arm of an OR clause, so it had better
> yield boolean.
>

Yeah, this check doesn't need any more. I removed this check in the
attached patch.

In match_index_to_operand(), the indexExpr has been ignored, so I removed
below check, too.
- if (IsA(indexExpr, RelabelType))
- indexExpr = (Node *) ((RelabelType *) indexExpr)->arg;


> If anything, this is actively wrong, because for example it'd
> reject a polymorphic operator that yields boolean in-context.
>
> In general, this code looks like a mess.  There are a lot of
> Asserts that might be okay in development but probably should
> not have got committed, and the comments need work.
>

These assertions were removed by me, too.
I didn’t modify these code comments since English isn’t my native language,
and I’d appreciate your help with them.


-- 
Thanks,
Tender Wang