| Index: third_party/sqlite/src/test/mallocA.test | 
| diff --git a/third_party/sqlite/src/test/mallocA.test b/third_party/sqlite/src/test/mallocA.test | 
| index 08f6930215f53e6f9041181129d7e833359c60f3..a78073d833c29b28b85f1aa35831de34efffbd4b 100644 | 
| --- a/third_party/sqlite/src/test/mallocA.test | 
| +++ b/third_party/sqlite/src/test/mallocA.test | 
| @@ -15,6 +15,7 @@ | 
| set testdir [file dirname $argv0] | 
| source $testdir/tester.tcl | 
| source $testdir/malloc_common.tcl | 
| +set testprefix mallocA | 
|  | 
| # Only run these tests if memory debugging is turned on. | 
| # | 
| @@ -24,10 +25,9 @@ if {!$MEMDEBUG} { | 
| return | 
| } | 
|  | 
| - | 
| # Construct a test database | 
| # | 
| -file delete -force test.db.bu | 
| +forcedelete test.db.bu | 
| db eval { | 
| CREATE TABLE t1(a COLLATE NOCASE,b,c); | 
| INSERT INTO t1 VALUES(1,2,3); | 
| @@ -38,8 +38,7 @@ db eval { | 
| CREATE TABLE t2(x,y,z); | 
| } | 
| db close | 
| -file copy test.db test.db.bu | 
| - | 
| +copy_file test.db test.db.bu | 
|  | 
| do_malloc_test mallocA-1 -testdb test.db.bu -sqlbody { | 
| ANALYZE | 
| @@ -53,6 +52,7 @@ do_malloc_test mallocA-1.2 -testdb test.db.bu -sqlbody { | 
| do_malloc_test mallocA-1.3 -testdb test.db.bu -sqlbody { | 
| ANALYZE main.t1 | 
| } | 
| + | 
| ifcapable reindex { | 
| do_malloc_test mallocA-2 -testdb test.db.bu -sqlbody { | 
| REINDEX; | 
| @@ -68,11 +68,78 @@ ifcapable reindex { | 
| } | 
| } | 
|  | 
| +reset_db | 
| +sqlite3_db_config_lookaside db 0 0 0 | 
| +do_execsql_test 6-prep { | 
| +  CREATE TABLE t1(a, b); | 
| +  CREATE INDEX i1 ON t1(a, b); | 
| +  INSERT INTO t1 VALUES('abc', 'w'); -- rowid=1 | 
| +  INSERT INTO t1 VALUES('abc', 'x'); -- rowid=2 | 
| +  INSERT INTO t1 VALUES('abc', 'y'); -- rowid=3 | 
| +  INSERT INTO t1 VALUES('abc', 'z'); -- rowid=4 | 
| + | 
| +  INSERT INTO t1 VALUES('def', 'w'); -- rowid=5 | 
| +  INSERT INTO t1 VALUES('def', 'x'); -- rowid=6 | 
| +  INSERT INTO t1 VALUES('def', 'y'); -- rowid=7 | 
| +  INSERT INTO t1 VALUES('def', 'z'); -- rowid=8 | 
| + | 
| +  ANALYZE; | 
| +} | 
| + | 
| +do_faultsim_test 6.1 -faults oom* -body { | 
| +  execsql { SELECT rowid FROM t1 WHERE a='abc' AND b='x' } | 
| +} -test { | 
| +  faultsim_test_result [list 0 2] | 
| +} | 
| +do_faultsim_test 6.2 -faults oom* -body { | 
| +  execsql { SELECT rowid FROM t1 WHERE a='abc' AND b<'y' } | 
| +} -test { | 
| +  faultsim_test_result [list 0 {1 2}] | 
| +} | 
| +ifcapable stat3 { | 
| +  do_test 6.3-prep { | 
| +    execsql { | 
| +      PRAGMA writable_schema = 1; | 
| +      CREATE TABLE sqlite_stat4 AS | 
| +      SELECT tbl, idx, neq, nlt, ndlt, sqlite_record(sample) AS sample | 
| +      FROM sqlite_stat3; | 
| +    } | 
| +  } {} | 
| +  do_faultsim_test 6.3 -faults oom* -body { | 
| +    execsql { | 
| +      ANALYZE sqlite_master; | 
| +      SELECT rowid FROM t1 WHERE a='abc' AND b<'y'; | 
| +    } | 
| +  } -test { | 
| +    faultsim_test_result [list 0 {1 2}] | 
| +  } | 
| +} | 
| + | 
| +do_execsql_test 7.0 { | 
| +  PRAGMA cache_size = 5; | 
| +} | 
| +do_faultsim_test 7 -faults oom-trans* -prep { | 
| +} -body { | 
| +  execsql { | 
| +    WITH r(x,y) AS ( | 
| +      SELECT 1, randomblob(100) | 
| +      UNION ALL | 
| +      SELECT x+1, randomblob(100) FROM r | 
| +      LIMIT 1000 | 
| +    ) | 
| +    SELECT count(x), length(y) FROM r GROUP BY (x%5) | 
| +  } | 
| +} -test { | 
| +  set res [list 200 100 200 100 200 100 200 100 200 100] | 
| +  faultsim_test_result [list 0 $res] | 
| +} | 
| + | 
| + | 
| # Ensure that no file descriptors were leaked. | 
| do_test malloc-99.X { | 
| catch {db close} | 
| set sqlite_open_file_count | 
| } {0} | 
|  | 
| -file delete -force test.db.bu | 
| +forcedelete test.db.bu | 
| finish_test | 
|  |