SQLite Forum

Assertion failure in Indexed Expression
Login

Assertion failure in Indexed Expression

(1) By Song Liu (songliu) on 2023-03-24 19:05:32 [link] [source]

I found an assertion failure while SQLite (latest, 98d30400e4721b1d) executes the following queries.

CREATE TABLE v1 ( c1 ); 
CREATE INDEX i1 ON v1 ( c1, c1 == 0 ); 
SELECT 1 FROM v1 AS a1 WHERE ( SELECT count ( c1 AND a1.c1 = 0 ) FROM v1 GROUP BY hex ( 1 ) ) AND c1 = 0; 

Here are the outputs:

sqlite3: sqlite3.c:144976: int aggregateIdxEprRefToColCallback(Walker *, Expr *): Assertion `pExpr->iAgg>=0 && pExpr->iAgg<pAggInfo->nColumn' failed.
[1]    105074 abort      ./sqlite3 < poc2

Here is the result of bisecting:

  9 BAD     2022-12-20 01:48:43 f113eebdbe68246f
 11 GOOD    2022-12-19 20:14:22 569018170b928cad CURRENT

The assertion failure may be caused by the optimizations. SQLite crashes by default with all optimizations enabled. If I disable the SQLITE_IndexedExpr optimization, SQLite works well.

CREATE TABLE v1 ( c1 ); 
CREATE INDEX i1 ON v1 ( c1, c1 == 0 ); 

.testctrl optimizations 0x01000000;
.print '-- disable optimization of SQLITE_IndexedExpr'
SELECT 1 FROM v1 AS a1 WHERE ( SELECT count ( c1 AND a1.c1 = 0 ) FROM v1 GROUP BY hex ( 1 ) ) AND c1 = 0; 

My compilation flags:

    export CFLAGS="-g -O0 -DSQLITE_DEBUG 
                -DSQLITE_ENABLE_TREETRACE 
                -DSQLITE_ENABLE_WHERETRACE
                -DSQLITE_ENABLE_CURSOR_HINTS 
                -DSQLITE_COUNTOFVIEW_OPTIMIZATION 
                -DSQLITE_ENABLE_STAT4" 

(2) By Song Liu (songliu) on 2023-03-24 22:29:31 in reply to 1 [source]

It seems the bug is fixed at commit 76b90f267c5cc676. Thanks for your work!