Re: BUG #18260: Unexpected error: "negative bitmapset member not allowed" triggered by multiple JOIN

Поиск
Список
Период
Сортировка
От Alexander Korotkov
Тема Re: BUG #18260: Unexpected error: "negative bitmapset member not allowed" triggered by multiple JOIN
Дата
Msg-id CAPpHfdtjpbGYwNZ7i664VfNjt-1rfv86SQX1f_7DACRtXYBFTg@mail.gmail.com
обсуждение исходный текст
Ответ на Re: BUG #18260: Unexpected error: "negative bitmapset member not allowed" triggered by multiple JOIN  (Andrei Lepikhov <a.lepikhov@postgrespro.ru>)
Список pgsql-bugs
On Mon, Jan 15, 2024 at 2:20 AM Andrei Lepikhov
<a.lepikhov@postgrespro.ru> wrote:
> On 11/1/2024 16:08, Richard Guo wrote:
> >
> > On Thu, Dec 28, 2023 at 12:30 PM Andrei Lepikhov
> > <a.lepikhov@postgrespro.ru <mailto:a.lepikhov@postgrespro.ru>> wrote:
> >
> >     On 28/12/2023 10:03, Richard Guo wrote:
> >      >          if (bms_is_subset(phinfo->ph_needed, joinrelids) &&
> >      >              bms_is_member(relid, phinfo->ph_eval_at) &&
> >      > -           !bms_is_member(ojrelid, phinfo->ph_eval_at))
> >      > +           (sjinfo == NULL || !bms_is_member(ojrelid,
> >     phinfo->ph_eval_at)))
> >
> >      > Alternatively, we can modify bms_is_member() to return false for
> >      > negative numbers instead of emitting an error, as suggested by the
> >      > comment there.
> >      > -   /* XXX better to just return false for x<0 ? */
> >      > +   /* negative number cannot be a member of the bitmapset */
> >      >      if (x < 0)
> >      > -       elog(ERROR, "negative bitmapset member not allowed");
> >      > +       return false;
> >      >
> >      > I prefer the second option, but I'm open to other thoughts.
> >     I don't like this option. It could mask some blunders somewhere like a
> >     current one.
> >
> >
> > After a second thought, I agree that the first option is better.  It
> > maintains consistency with the Assert a few lines ahead, and also
> > minimizes the potential impact of code changes compared to the second
> > option.
> >
> >      > FWIW, here is a simplified repro for this error.
> >      >
> >      > create table t (a int primary key, b int);
> >      >
> >      > explain (verbose, costs off)
> >      > select 1 from t t1 left join
> >      >      (lateral (select 1 as x, * from t t2) s1 inner join
> >      >          (select * from t t3) s2 on s1.a = s2.a)
> >      >      on true
> >      > where s1.x = 1;
> >      > ERROR:  negative bitmapset member not allowed
> >     It can be simplified even more (without LATERAL):
> >
> >
> > Indeed.  I realized this shortly after v1 patch was sent out, and was
> > thinking that it wasn't worth the effort to update the patch with a new
> > version just for this issue.
> I like it, thanks for your efforts.

+1,
Thank you, Richard, Andrei.  I'm going to push this tomorrow.

------
Regards,
Alexander Korotkov



В списке pgsql-bugs по дате отправления:

Предыдущее
От: Andrei Lepikhov
Дата:
Сообщение: Re: BUG #18260: Unexpected error: "negative bitmapset member not allowed" triggered by multiple JOIN
Следующее
От: jian he
Дата:
Сообщение: Re: BUG #18290: \di+ can not show the same name indexes