Re: Replace IN VALUES with ANY in WHERE clauses during optimization
Alena Rybakina <a.rybakina@postgrespro.ru>
From: Alena Rybakina <a.rybakina@postgrespro.ru>
To: Alexander Korotkov <aekorotkov@gmail.com>
Cc: Andrei Lepikhov <lepihov@gmail.com>, Ivan Kush
<ivan.kush@tantorlabs.com>, pgsql-hackers <pgsql-hackers@postgresql.org>,
Tom Lane <tgl@sss.pgh.pa.us>, Laurenz Albe <laurenz.albe@cybertec.at>
Date: 2025-02-20T21:09:27Z
Lists: pgsql-hackers
Commits
Same data as JSON:
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Stabilize regression test from c0962a113.
- 3ba2cdaa4541 18.0 landed
-
Convert 'x IN (VALUES ...)' to 'x = ANY ...' then appropriate
- c0962a113d1f 18.0 landed
-
Extract make_SAOP_expr() function from match_orclause_to_indexcol()
- d48d2e2dc8be 18.0 landed
Attachments
- v3-0002-Add-an-implementation-of-the-x-IN-VALUES-to-x-ANY-.-.patch (text/x-patch) patch v3-0002
- v3-0001-Move-the-function-for-generating-ArrayExpr-to-anothe.patch (text/x-patch) patch v3-0001
Hi! On 09.02.2025 18:38, Alexander Korotkov wrote: >> Also, aren't we too restrictive while requiring is_simple_values_sequence()? >> For instance, I believe cases like this (containing Var) could be transformed too. >> >> select * from t t1, lateral (select * from t t2 where t2.i in (values (t1.i), (1))); I'm still working on it. > Also, I think there is quite a code duplication about construction of > SAOP between match_orclause_to_indexcol() and convert_VALUES_to_ANY() > functions. I would like to see a refactoring as a separate first > patch, which extracts the common part into a function. Done. I have attached a patch. In addition to the transfer, I added the process of searching for a suitable operator and type for the left expression for input expressions: const and left expression, since they may differ from the declared types. Additionally, we convert the left expr to a type suitable for the found operator. -- Regards, Alena Rybakina Postgres Professional