blob: 122945550516863d9fde3e7522944fca44f06ed3 [file] [log] [blame]
drh701bb3b2008-08-02 03:50:39 +00001# 2008 August 01
2#
3# The author disclaims copyright to this source code. In place of
4# 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#
12# This test script checks malloc failures in various obscure operations.
13#
danielk1977f77a3672009-08-10 04:26:39 +000014# $Id: mallocI.test,v 1.3 2009/08/10 04:26:39 danielk1977 Exp $
drh701bb3b2008-08-02 03:50:39 +000015
16set testdir [file dirname $argv0]
17source $testdir/tester.tcl
18source $testdir/malloc_common.tcl
19
20# Malloc failures in a view.
21#
22do_malloc_test mallocI-1 -sqlprep {
23 CREATE TABLE t1(a,b,c,d);
24 CREATE VIEW v1 AS SELECT a*b, c*d FROM t1 ORDER BY b-d;
25} -sqlbody {
26 SELECT * FROM v1
27}
28
29# Malloc failure while trying to service a pragma on a TEMP database.
30#
31do_malloc_test mallocI-2 -sqlbody {
32 PRAGMA temp.page_size
33}
34
35# Malloc failure while creating a table from a SELECT statement.
36#
37do_malloc_test mallocI-3 -sqlprep {
38 CREATE TABLE t1(a,b,c);
39} -sqlbody {
40 CREATE TABLE t2 AS SELECT b,c FROM t1;
41}
42
danielk19771a4eaf02009-07-29 06:04:56 +000043# This tests that a malloc failure that occurs while passing the schema
44# does not result in a SHARED lock being left on the database file.
45#
46do_malloc_test mallocI-4 -tclprep {
47 sqlite3 db2 test.db
48 db2 eval {
49 CREATE TABLE t1(a, b, c);
50 CREATE TABLE t2(a, b, c);
51 }
52} -sqlbody {
53 SELECT * FROM t1
54} -cleanup {
55 do_test mallocI-4.$::n.2 {
56 # If this INSERT is possible then [db] does not hold a shared lock
57 # on the database file.
58 catchsql { INSERT INTO t1 VALUES(1, 2, 3) } db2
59 } {0 {}}
shanehaa9eceb2010-07-07 20:00:04 +000060 catch {db2 close}
danielk19771a4eaf02009-07-29 06:04:56 +000061}
danielk1977f77a3672009-08-10 04:26:39 +000062catch { db2 close }
danielk19771a4eaf02009-07-29 06:04:56 +000063
drh701bb3b2008-08-02 03:50:39 +000064finish_test