If you compile with assert() statements enabled (using the
--enable-debug option with ./configure or otherwise adding the
-DSQLITE_DEBUG flag) then you will hit an assertion fault earlier.
The problem is that the same ephemeral table - the in-memory table
that is constructed to hold the RHS of the IN operator "(1,2,3)" - is
being used for two incompatible purposes.  The check-in that caused
the problem (https://www.sqlite.org/src/info/e130319317e76119) tries
to reuse the RHS of IN operators so that they do not have to be
computed multiple times.  Check-in e130319317 is an optimization.  But
apparently the optimization is a little too aggressive.  I did not
foresee that the RHS of the IN operator might be used in incompatible
ways.

The first use of the (1,2,3) table is to drive a loop.  The loop runs
over every entry in the (1,2,3) table, then seeks in the "A" table to
see if a row exists with the same value "A.ID" value.

The second use of the (1,2,3) table is to verify that the "B.ID" value
exists in the table.

The first use wants the (1,2,3) table to be a rowid-table with no
content.  It just stores rowids.  The second use wants the table to be
an index, for fast lookups.

The fault occurs when the bytecode tries to use the (1,2,3) table,
which is a rowid table, as an index.

On 2/19/19, dave <d...@ziggurat29.com> wrote:
>
>> Wow; can confirm. I crashed it in my debugger in the
>> amalgamation of 3.27.1
>> in the function SQLITE_PRIVATE RecordCompare
>> sqlite3VdbeFindCompare(UnpackedRecord *p)
>>
>> At line 80720,   if( p->pKeyInfo->nAllField<=13 )
>>
>> in that case:
>> pKeyInfo is NULL
>
> Lastly, if it helps, converting the query to:
>
> SELECT a.id FROM t AS a INNER JOIN t as b ON a.id = b.id WHERE
> a.id = 1 or a.id = 2 or a.id = 3;
>
> Does /not/ crash.
>
> (and nice work on the bisect! Lol)
>
> -dave
>
>
> _______________________________________________
> sqlite-users mailing list
> sqlite-users@mailinglists.sqlite.org
> http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
>


-- 
D. Richard Hipp
d...@sqlite.org
_______________________________________________
sqlite-users mailing list
sqlite-users@mailinglists.sqlite.org
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to