SQLite Forum

Assertion failure "pExpr->pAggInfo==pAggInfo"
Login

Assertion failure "pExpr->pAggInfo==pAggInfo"

(1) By Wang Ke (krking) on 2021-08-21 11:31:20 [link]

Hello,

We found an assertion failure in the latest SQLite, and the test case is as follows:

```
CREATE TABLE t1(a);
SELECT MIN((SELECT NULL FROM t1 UNION SELECT 'X' FROM (SELECT NULL FROM (SELECT 1 WHERE t1.a=1) UNION ALL SELECT 'X' FROM (SELECT 2)))) FROM t1;
```

which triggers:

> sqlite3.c:139665: sqlite3Select: Assertion `pExpr->pAggInfo==pAggInfo' failed.

Bisecting shows the issue may be introduced in [check-in 7682d8a768](https://sqlite.org/src/info/7682d8a768).

(2) By Richard Hipp (drh) on 2021-08-21 16:51:05 in reply to 1

Thanks for the report.

A fix is in [check-in 600f1991e5c0a5d8](src:/info/600f1991e5c0a5d8).  This
problem is associated with some sanity checking.  The assertion fault does
not occur and the coding error is harmless for release builds.

## Details

The assertion fault occurs in a block of code at the end of the SELECT
code generation for aggregate queries.  This block of code (which only runs
during debugging builds and is omitted completely from release builds) does
sanity checking on internal data structures.  The error occurs when one of
those data structures (an Expr object) is deleted by an optimization in the
middle of code generation.  The fix in [600f1991e5c0a5d8](/info/600f1991e5c0a5d8)
is to simply defer the object deletion until after all code generation completes,
so the objects are still available for sanity checking down at the end of
SELECT code generation.

(3) By Wang Ke (krking) on 2021-08-21 17:33:37 in reply to 2 [link]

Thanks for your explanation.

It's good to know that is a harmless coding error which not affects the normal execution process.

By the way, recently we're collecting more testcases, especially those triggering errors(crashes or logical errors) in old versions in order to find out more potential problems with our approach. We have noticed that TH3 is a useful tool for you developers to conduct testing works. So we are trying to find those TH3 testing modules like "orindex01.test". But I didn't find the file in the directory of SQLite. I wonder, how can we access these test data? Or are those data not public?

Looking forward to your reply.