xref: /sqlite-3.40.0/test/mallocH.test (revision c890fec3)
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