Assert failure in _bt_preprocess_array_keys

  • Jump to comment-1
    guofenglinux@gmail.com2024-04-22T02:36:33+00:00
    I came across an assert failure in _bt_preprocess_array_keys regarding the sanity check on the datatype of the array elements. It can be reproduced with the query below. create table t (c int4range); create unique index on t (c); select * from t where c in ('(1, 100]'::int4range, '(50, 300]'::int4range); It fails on this Assert: + elemtype = cur->sk_subtype; + if (elemtype == InvalidOid) + elemtype = rel->rd_opcintype[cur->sk_attno - 1]; + Assert(elemtype == ARR_ELEMTYPE(arrayval)); ... which was introduced in 5bf748b86b. I didn't spend much time digging into it, but I wonder if this Assert is sensible. I noticed that before commit 5bf748b86b, the two datatypes were not equal to each other either (anyrange vs. int4range). Thanks Richard
    • Jump to comment-1
      pg@bowt.ie2024-04-22T02:52:49+00:00
      On Sun, Apr 21, 2024 at 10:36 PM Richard Guo <guofenglinux@gmail.com> wrote: > I didn't spend much time digging into it, but I wonder if this Assert is > sensible. I noticed that before commit 5bf748b86b, the two datatypes > were not equal to each other either (anyrange vs. int4range). The assertion is wrong. It is testing behavior that's much older than commit 5bf748b86b, though. We can just get rid of it, since all of the information that we'll actually apply when preprocessing scan keys comes from the operator class. Pushed a fix removing the assertion just now. Thanks for the report. -- Peter Geoghegan
      • Jump to comment-1
        guofenglinux@gmail.com2024-04-22T06:22:42+00:00
        On Mon, Apr 22, 2024 at 10:52 AM Peter Geoghegan <pg@bowt.ie> wrote: > On Sun, Apr 21, 2024 at 10:36 PM Richard Guo <guofenglinux@gmail.com> > wrote: > > I didn't spend much time digging into it, but I wonder if this Assert is > > sensible. I noticed that before commit 5bf748b86b, the two datatypes > > were not equal to each other either (anyrange vs. int4range). > > The assertion is wrong. It is testing behavior that's much older than > commit 5bf748b86b, though. We can just get rid of it, since all of the > information that we'll actually apply when preprocessing scan keys > comes from the operator class. > > Pushed a fix removing the assertion just now. Thanks for the report. That's so quick. Thank you for the prompt fix. Thanks Richard