Re: Failed assertion clauses != NIL - Mailing list pgsql-bugs

From Dmitry Dolgov
Subject Re: Failed assertion clauses != NIL
Date
Msg-id 20191119143842.s2rrzdg43pvw3ael@localhost
Whole thread Raw
In response to Re: Failed assertion clauses != NIL  (Daniel Gustafsson <daniel@yesql.se>)
List pgsql-bugs
> On Tue, Nov 19, 2019 at 02:45:54PM +0100, Daniel Gustafsson wrote:
> > On 19 Nov 2019, at 14:38, Dmitry Dolgov <9erthalion6@gmail.com> wrote:
> >
> >> On Tue, Nov 19, 2019 at 01:50:51PM +0100, Manuel Rigger wrote:
> >>
> >> when building PostgreSQL with -enable-cassert, executing the following
> >> statements result in an assertion error:
> >>
> >> CREATE TABLE t0(c0 boolean, c1 boolean, c2 boolean);
> >> INSERT INTO t0 VALUES(FALSE, FALSE, FALSE);
> >> CREATE STATISTICS s0 ON c0, c2 FROM t0;
> >> ANALYZE;
> >> SELECT * FROM t0 WHERE t0.c2 OR t0.c1 OR t0.c0;
> >
> > Yes, I can reproduce it too. mcv_get_match_bitmap expects that
> > stat_clauses will not be empty, but looks like in this situation
> > stat_clauses is indeed NIL. clauselist_selectivity_simple right before
> > actually doesn't insist on stat_clauses being non empty, probably it's
> > just too strict assert.
>
> I might be missing something, but if the clause list is NIL, wouldn't it better
> to exit earlier from statext_mcv_clauselist_selectivity rather than relax the
> Assertion since we will get a 1.0 estimate either way?
>
> cheers ./daniel
>
> --- a/src/backend/statistics/extended_stats.c
> +++ b/src/backend/statistics/extended_stats.c
> @@ -1267,6 +1267,9 @@ statext_mcv_clauselist_selectivity(PlannerInfo *root, List *clauses, int varReli
>                 listidx++;
>         }
>
> +       if (stat_clauses == NIL)
> +               return 1.0;
> +
>         /*
>          * First compute "simple" selectivity, i.e. without the extended
>          * statistics, and essentially assuming independence of the
>

Yep, seems like a reasonable thing to do, especially since it's already
like that in a few other places in this function.



pgsql-bugs by date:

Previous
From: Manuel Rigger
Date:
Subject: No = operator for opfamily 426
Next
From: Tomas Vondra
Date:
Subject: Re: Failed assertion clauses != NIL