Re: BUG #17066: Cache lookup failed when null (unknown) is passed as anycompatiblemultirange

Alexander Korotkov <aekorotkov@gmail.com>

From: Alexander Korotkov <aekorotkov@gmail.com>
To: Alexander Lakhin <exclusion@gmail.com>
Cc: Tom Lane <tgl@sss.pgh.pa.us>, Alvaro Herrera <alvherre@2ndquadrant.com>, Neil Chen <carpenter.nail.cz@gmail.com>, PostgreSQL mailing lists <pgsql-bugs@lists.postgresql.org>, Paul A Jungwirth <pj@illuminatedcomputing.com>
Date: 2021-06-26T23:29:06Z
Lists: pgsql-bugs

Attachments

 On Sat, Jun 26, 2021 at 12:02 AM Alexander Korotkov
<aekorotkov@gmail.com> wrote:
> On Fri, Jun 25, 2021 at 7:00 AM Alexander Lakhin <exclusion@gmail.com> wrote:
> > Hello,
> > 24.06.2021 02:35, Tom Lane wrote:
> > > Alexander Korotkov <aekorotkov@gmail.com> writes:
> > >> I really appreciate a hint here.
> > > I think I'm to blame for most of that code originally, so I'll take
> > > a look soon.  Been up to my neck in other stuff recently.
> > I'm not sure whether it related to the initial issue, but there is
> > another anomaly with the multirange types. (May be I should report it as
> > a distinct bug?) The query:
> > create table test_multirange(mr int4multirange);
> > select count(*) from test_multirange where mr << int4range(100,100);
> > produces:
> > ERROR:  unexpected operator 4396
> >
> > while
> > select count(*) from test_multirange where mr << int4range(100,500);
> > returns a result (as the multirangetypes test shows).
>
> Yep, that's a distinct bug.  It seems that I've added some missing
> operators, but forgot to add some selectivity estimates for them.
>
> I'll come with a fix soon.

The patch is attached.  It fixes some switches in calc_multirangesel()
and calc_multirangesel().  Additionally, it improves regression test
coverage for matching empty range/multirange.

I'm going to push it if no objection.

------
Regards,
Alexander Korotkov

Commits

  1. Fix bugs in polymorphic-argument resolution for multiranges.

  2. Fixes for multirange selectivity estimation