14cfb22f7Sdrh# 2008 August 01 24cfb22f7Sdrh# 34cfb22f7Sdrh# The author disclaims copyright to this source code. In place of 44cfb22f7Sdrh# a legal notice, here is a blessing: 54cfb22f7Sdrh# 64cfb22f7Sdrh# May you do good and not evil. 74cfb22f7Sdrh# May you find forgiveness for yourself and forgive others. 84cfb22f7Sdrh# May you share freely, never taking more than you give. 94cfb22f7Sdrh# 104cfb22f7Sdrh#*********************************************************************** 114cfb22f7Sdrh# 124cfb22f7Sdrh# This test script checks malloc failures in various obscure operations. 134cfb22f7Sdrh# 14*c890fec3Sdrh# $Id: mallocH.test,v 1.2 2008/08/01 20:10:09 drh Exp $ 154cfb22f7Sdrh 164cfb22f7Sdrhset testdir [file dirname $argv0] 174cfb22f7Sdrhsource $testdir/tester.tcl 184cfb22f7Sdrhsource $testdir/malloc_common.tcl 194cfb22f7Sdrh 204cfb22f7Sdrh# Malloc failures in journaling of in-memory databases. 214cfb22f7Sdrh# 224cfb22f7Sdrhdo_malloc_test mallocH-1 -tclprep { 234cfb22f7Sdrh db close 244cfb22f7Sdrh sqlite3 db :memory: 254cfb22f7Sdrh db eval { 264cfb22f7Sdrh CREATE TABLE t1(x UNIQUE, y); 274cfb22f7Sdrh INSERT INTO t1 VALUES(1,2); 284cfb22f7Sdrh } 294cfb22f7Sdrh} -sqlbody { 304cfb22f7Sdrh INSERT INTO t1 SELECT x+1, y+100 FROM t1; 314cfb22f7Sdrh} 324cfb22f7Sdrh 334cfb22f7Sdrh# Malloc failures while parsing a CASE expression. 344cfb22f7Sdrh# 354cfb22f7Sdrhdo_malloc_test mallocH-2 -sqlbody { 364cfb22f7Sdrh SELECT CASE WHEN 1 THEN 1 END; 374cfb22f7Sdrh} 384cfb22f7Sdrh 394cfb22f7Sdrh# Malloc failures while parsing a EXISTS(SELECT ...) 404cfb22f7Sdrh# 414cfb22f7Sdrhdo_malloc_test mallocH-3 -sqlbody { 424cfb22f7Sdrh SELECT 3+EXISTS(SELECT * FROM sqlite_master); 434cfb22f7Sdrh} 444cfb22f7Sdrh 454cfb22f7Sdrh# Malloc failures within the replace() function. 464cfb22f7Sdrh# 474cfb22f7Sdrhdo_malloc_test mallocH-3 -sqlbody { 484cfb22f7Sdrh SELECT replace('ababa','a','xyzzy'); 494cfb22f7Sdrh} 504cfb22f7Sdrh 51*c890fec3Sdrh# Malloc failures during EXPLAIN. 52*c890fec3Sdrh# 53*c890fec3Sdrhifcapable explain { 54*c890fec3Sdrh do_malloc_test mallocH-4 -sqlprep { 55*c890fec3Sdrh CREATE TABLE abc(a PRIMARY KEY, b, c); 56*c890fec3Sdrh } -sqlbody { 57*c890fec3Sdrh EXPLAIN SELECT * FROM abc AS t2 WHERE rowid=1; 58*c890fec3Sdrh EXPLAIN QUERY PLAN SELECT * FROM abc AS t2 WHERE rowid=1; 59*c890fec3Sdrh } 60*c890fec3Sdrh} 61*c890fec3Sdrh 62*c890fec3Sdrh# Malloc failure during integrity_check pragma. 63*c890fec3Sdrh# 64*c890fec3Sdrhdo_malloc_test mallocH-5 -sqlprep { 65*c890fec3Sdrh CREATE TABLE t1(a PRIMARY KEY, b UNIQUE); 66*c890fec3Sdrh CREATE TABLE t2(x,y); 67*c890fec3Sdrh INSERT INTO t1 VALUES(1,2); 68*c890fec3Sdrh INSERT INTO t2 SELECT * FROM t1; 69*c890fec3Sdrh} -sqlbody { 70*c890fec3Sdrh PRAGMA integrity_check; 71*c890fec3Sdrh} 72*c890fec3Sdrh 734cfb22f7Sdrhfinish_test 74