1 # 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 LIMIT operations for 13 # UPDATE/DELETE statements. 14 # 15 # $Id: mallocJ.test,v 1.6 2009/01/09 02:49:32 drh Exp $ 16 17 set testdir [file dirname $argv0] 18 source $testdir/tester.tcl 19 source $testdir/malloc_common.tcl 20 21 ifcapable {update_delete_limit} { 22 23 do_malloc_test mallocJ-1 -sqlprep { 24 DROP TABLE IF EXISTS t1; 25 CREATE TABLE t1(x int, y int); 26 INSERT INTO t1 VALUES(1,1); 27 INSERT INTO t1 VALUES(1,2); 28 INSERT INTO t1 VALUES(1,2); 29 INSERT INTO t1 VALUES(2,1); 30 INSERT INTO t1 VALUES(2,2); 31 INSERT INTO t1 VALUES(2,3); 32 } -sqlbody { 33 UPDATE t1 SET x=1 ORDER BY y LIMIT 2 OFFSET 2; 34 UPDATE t1 SET x=2 WHERE y=1 ORDER BY y LIMIT 2 OFFSET 2; 35 DELETE FROM t1 WHERE x=1 ORDER BY y LIMIT 2 OFFSET 2; 36 DELETE FROM t1 ORDER BY y LIMIT 2 OFFSET 2; 37 } 38 39 } 40 41 # ticket #3467 42 do_malloc_test mallocJ-2 -sqlprep { 43 CREATE TABLE t1(a,b); 44 INSERT INTO t1 VALUES(1,2); 45 PRAGMA vdbe_trace=ON; 46 } -sqlbody { 47 SELECT a, b, 'abc' FROM t1 48 UNION 49 SELECT b, a, 'xyz' FROM t1 50 ORDER BY 2, 3; 51 } 52 53 # ticket #3478 54 do_malloc_test mallocJ-3 -sqlbody { 55 EXPLAIN COMMIT 56 } 57 58 # ticket #3485 59 do_malloc_test mallocJ-4 -sqlprep { 60 CREATE TABLE t1(a,b,c); 61 CREATE TABLE t2(x,y,z); 62 } -sqlbody { 63 SELECT * FROM (SELECT a,b FROM t1 UNION ALL SELECT x, y FROM t2) ORDER BY 1 64 } 65 66 # coverage testing 67 do_malloc_test mallocJ-5 -sqlprep { 68 CREATE TABLE t1(["a"]); 69 } -sqlbody { 70 SELECT * FROM t1 71 } 72 73 finish_test 74