AryaWu/sqlite
0
1# 2007 April 302#3# The author disclaims copyright to this source code. In place of4# a legal notice, here is a blessing:5#6# May you do good and not evil.7# May you find forgiveness for yourself and forgive others.8# May you share freely, never taking more than you give.9#10#***********************************************************************11# This file contains additional out-of-memory checks (see malloc.tcl).12#13# $Id: mallocA.test,v 1.8 2008/02/18 22:24:58 drh Exp $14 15set testdir [file dirname $argv0]16source $testdir/tester.tcl17source $testdir/malloc_common.tcl18set testprefix mallocA19 20# Only run these tests if memory debugging is turned on.21#22if {!$MEMDEBUG} {23 puts "Skipping mallocA tests: not compiled with -DSQLITE_MEMDEBUG..."24 finish_test25 return26}27 28# Construct a test database29#30forcedelete test.db.bu31db eval {32 CREATE TABLE t1(a COLLATE NOCASE,b,c);33 INSERT INTO t1 VALUES(1,2,3);34 INSERT INTO t1 VALUES(1,2,4);35 INSERT INTO t1 VALUES(2,3,4);36 CREATE INDEX t1i1 ON t1(a);37 CREATE INDEX t1i2 ON t1(b,c);38 CREATE TABLE t2(x,y,z);39}40db close41copy_file test.db test.db.bu42 43do_malloc_test mallocA-1 -testdb test.db.bu -sqlbody {44 ANALYZE45}46do_malloc_test mallocA-1.1 -testdb test.db.bu -sqlbody {47 ANALYZE t148}49do_malloc_test mallocA-1.2 -testdb test.db.bu -sqlbody {50 ANALYZE main51}52do_malloc_test mallocA-1.3 -testdb test.db.bu -sqlbody {53 ANALYZE main.t154}55 56ifcapable reindex {57 do_malloc_test mallocA-2 -testdb test.db.bu -sqlbody {58 REINDEX;59 }60 do_malloc_test mallocA-3 -testdb test.db.bu -sqlbody {61 REINDEX t1;62 }63 do_malloc_test mallocA-4 -testdb test.db.bu -sqlbody {64 REINDEX main.t1;65 }66 do_malloc_test mallocA-5 -testdb test.db.bu -sqlbody {67 REINDEX nocase;68 }69}70 71reset_db72sqlite3_db_config_lookaside db 0 0 073do_execsql_test 6-prep {74 CREATE TABLE t1(a, b);75 CREATE INDEX i1 ON t1(a, b);76 INSERT INTO t1 VALUES('abc', 'w'); -- rowid=177 INSERT INTO t1 VALUES('abc', 'x'); -- rowid=278 INSERT INTO t1 VALUES('abc', 'y'); -- rowid=379 INSERT INTO t1 VALUES('abc', 'z'); -- rowid=480 81 INSERT INTO t1 VALUES('def', 'w'); -- rowid=582 INSERT INTO t1 VALUES('def', 'x'); -- rowid=683 INSERT INTO t1 VALUES('def', 'y'); -- rowid=784 INSERT INTO t1 VALUES('def', 'z'); -- rowid=885 86 ANALYZE;87}88 89do_faultsim_test 6.1 -faults oom* -body {90 execsql { SELECT rowid FROM t1 WHERE a='abc' AND b='x' }91} -test {92 faultsim_test_result [list 0 2]93}94do_faultsim_test 6.2 -faults oom* -body {95 execsql { SELECT rowid FROM t1 WHERE a='abc' AND b<'y' }96} -test {97 faultsim_test_result [list 0 {1 2}]98}99 100do_execsql_test 7.0 {101 PRAGMA cache_size = 5;102}103do_faultsim_test 7 -faults oom-trans* -prep {104} -body {105 execsql {106 WITH r(x,y) AS (107 SELECT 1, randomblob(100)108 UNION ALL109 SELECT x+1, randomblob(100) FROM r110 LIMIT 1000111 )112 SELECT count(x), length(y) FROM r GROUP BY (x%5)113 }114} -test {115 set res [list 200 100 200 100 200 100 200 100 200 100]116 faultsim_test_result [list 0 $res]117}118 119 120# Ensure that no file descriptors were leaked.121do_test malloc-99.X {122 catch {db close}123 set sqlite_open_file_count124} {0}125 126forcedelete test.db.bu127finish_test128 