1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-07-30 19:03:16 +03:00

Fixes for compilation/testing when the various OMIT macros are defined. (CVS 4423)

FossilOrigin-Name: c8405b15c074c94dab5e33272cf1471f458d11df
This commit is contained in:
danielk1977
2007-09-12 17:01:45 +00:00
parent a430ae8e54
commit 4152e677b8
47 changed files with 932 additions and 789 deletions

View File

@ -16,7 +16,7 @@
# to see what happens in the library if a malloc were to really fail
# due to an out-of-memory situation.
#
# $Id: malloc.test,v 1.47 2007/09/04 01:25:49 drh Exp $
# $Id: malloc.test,v 1.48 2007/09/12 17:01:45 danielk1977 Exp $
set testdir [file dirname $argv0]
source $testdir/tester.tcl
@ -31,26 +31,28 @@ ifcapable !memdebug {
source $testdir/malloc_common.tcl
do_malloc_test 1 -tclprep {
db close
} -tclbody {
if {[catch {sqlite3 db test.db}]} {
error "out of memory"
}
} -sqlbody {
DROP TABLE IF EXISTS t1;
CREATE TABLE t1(
a int, b float, c double, d text, e varchar(20),
primary key(a,b,c)
);
CREATE INDEX i1 ON t1(a,b);
INSERT INTO t1 VALUES(1,2.3,4.5,'hi',x'746865726500');
INSERT INTO t1 VALUES(6,7.0,0.8,'hello','out yonder');
SELECT * FROM t1;
SELECT avg(b) FROM t1 GROUP BY a HAVING b>20.0;
DELETE FROM t1 WHERE a IN (SELECT min(a) FROM t1);
SELECT count(*) FROM t1;
}
ifcapable bloblit&&subquery {
do_malloc_test 1 -tclprep {
db close
} -tclbody {
if {[catch {sqlite3 db test.db}]} {
error "out of memory"
}
} -sqlbody {
DROP TABLE IF EXISTS t1;
CREATE TABLE t1(
a int, b float, c double, d text, e varchar(20),
primary key(a,b,c)
);
CREATE INDEX i1 ON t1(a,b);
INSERT INTO t1 VALUES(1,2.3,4.5,'hi',x'746865726500');
INSERT INTO t1 VALUES(6,7.0,0.8,'hello','out yonder');
SELECT * FROM t1;
SELECT avg(b) FROM t1 GROUP BY a HAVING b>20.0;
DELETE FROM t1 WHERE a IN (SELECT min(a) FROM t1);
SELECT count(*) FROM t1;
}
}
# Ensure that no file descriptors were leaked.
do_test malloc-1.X {
@ -58,25 +60,27 @@ do_test malloc-1.X {
set sqlite_open_file_count
} {0}
do_malloc_test 2 -sqlbody {
CREATE TABLE t1(a int, b int default 'abc', c int default 1);
CREATE INDEX i1 ON t1(a,b);
INSERT INTO t1 VALUES(1,1,'99 abcdefghijklmnopqrstuvwxyz');
INSERT INTO t1 VALUES(2,4,'98 abcdefghijklmnopqrstuvwxyz');
INSERT INTO t1 VALUES(3,9,'97 abcdefghijklmnopqrstuvwxyz');
INSERT INTO t1 VALUES(4,16,'96 abcdefghijklmnopqrstuvwxyz');
INSERT INTO t1 VALUES(5,25,'95 abcdefghijklmnopqrstuvwxyz');
INSERT INTO t1 VALUES(6,36,'94 abcdefghijklmnopqrstuvwxyz');
SELECT 'stuff', count(*) as 'other stuff', max(a+10) FROM t1;
UPDATE t1 SET b=b||b||b||b;
UPDATE t1 SET b=a WHERE a in (10,12,22);
INSERT INTO t1(c,b,a) VALUES(20,10,5);
INSERT INTO t1 SELECT * FROM t1
WHERE a IN (SELECT a FROM t1 WHERE a<10);
DELETE FROM t1 WHERE a>=10;
DROP INDEX i1;
DELETE FROM t1;
}
ifcapable subquery {
do_malloc_test 2 -sqlbody {
CREATE TABLE t1(a int, b int default 'abc', c int default 1);
CREATE INDEX i1 ON t1(a,b);
INSERT INTO t1 VALUES(1,1,'99 abcdefghijklmnopqrstuvwxyz');
INSERT INTO t1 VALUES(2,4,'98 abcdefghijklmnopqrstuvwxyz');
INSERT INTO t1 VALUES(3,9,'97 abcdefghijklmnopqrstuvwxyz');
INSERT INTO t1 VALUES(4,16,'96 abcdefghijklmnopqrstuvwxyz');
INSERT INTO t1 VALUES(5,25,'95 abcdefghijklmnopqrstuvwxyz');
INSERT INTO t1 VALUES(6,36,'94 abcdefghijklmnopqrstuvwxyz');
SELECT 'stuff', count(*) as 'other stuff', max(a+10) FROM t1;
UPDATE t1 SET b=b||b||b||b;
UPDATE t1 SET b=a WHERE a in (10,12,22);
INSERT INTO t1(c,b,a) VALUES(20,10,5);
INSERT INTO t1 SELECT * FROM t1
WHERE a IN (SELECT a FROM t1 WHERE a<10);
DELETE FROM t1 WHERE a>=10;
DROP INDEX i1;
DELETE FROM t1;
}
}
# Ensure that no file descriptors were leaked.
do_test malloc-2.X {
@ -108,23 +112,25 @@ do_test malloc-3.X {
set sqlite_open_file_count
} {0}
do_malloc_test 4 -sqlbody {
BEGIN TRANSACTION;
CREATE TABLE t1(a int, b int, c int);
CREATE INDEX i1 ON t1(a,b);
INSERT INTO t1 VALUES(1,1,99);
INSERT INTO t1 VALUES(2,4,98);
INSERT INTO t1 VALUES(3,9,97);
INSERT INTO t1 VALUES(4,16,96);
INSERT INTO t1 VALUES(5,25,95);
INSERT INTO t1 VALUES(6,36,94);
UPDATE t1 SET b=a WHERE a in (10,12,22);
INSERT INTO t1 SELECT * FROM t1
WHERE a IN (SELECT a FROM t1 WHERE a<10);
DROP INDEX i1;
DELETE FROM t1;
COMMIT;
}
ifcapable subquery {
do_malloc_test 4 -sqlbody {
BEGIN TRANSACTION;
CREATE TABLE t1(a int, b int, c int);
CREATE INDEX i1 ON t1(a,b);
INSERT INTO t1 VALUES(1,1,99);
INSERT INTO t1 VALUES(2,4,98);
INSERT INTO t1 VALUES(3,9,97);
INSERT INTO t1 VALUES(4,16,96);
INSERT INTO t1 VALUES(5,25,95);
INSERT INTO t1 VALUES(6,36,94);
UPDATE t1 SET b=a WHERE a in (10,12,22);
INSERT INTO t1 SELECT * FROM t1
WHERE a IN (SELECT a FROM t1 WHERE a<10);
DROP INDEX i1;
DELETE FROM t1;
COMMIT;
}
}
# Ensure that no file descriptors were leaked.
do_test malloc-4.X {
@ -132,21 +138,23 @@ do_test malloc-4.X {
set sqlite_open_file_count
} {0}
do_malloc_test 5 -sqlbody {
BEGIN TRANSACTION;
CREATE TABLE t1(a,b);
CREATE TABLE t2(x,y);
CREATE TRIGGER r1 AFTER INSERT ON t1 BEGIN
INSERT INTO t2(x,y) VALUES(new.rowid,1);
INSERT INTO t2(x,y) SELECT * FROM t2;
INSERT INTO t2 SELECT * FROM t2;
UPDATE t2 SET y=y+1 WHERE x=new.rowid;
SELECT 123;
DELETE FROM t2 WHERE x=new.rowid;
END;
INSERT INTO t1(a,b) VALUES(2,3);
COMMIT;
}
ifcapable trigger {
do_malloc_test 5 -sqlbody {
BEGIN TRANSACTION;
CREATE TABLE t1(a,b);
CREATE TABLE t2(x,y);
CREATE TRIGGER r1 AFTER INSERT ON t1 BEGIN
INSERT INTO t2(x,y) VALUES(new.rowid,1);
INSERT INTO t2(x,y) SELECT * FROM t2;
INSERT INTO t2 SELECT * FROM t2;
UPDATE t2 SET y=y+1 WHERE x=new.rowid;
SELECT 123;
DELETE FROM t2 WHERE x=new.rowid;
END;
INSERT INTO t1(a,b) VALUES(2,3);
COMMIT;
}
}
# Ensure that no file descriptors were leaked.
do_test malloc-5.X {
@ -154,25 +162,27 @@ do_test malloc-5.X {
set sqlite_open_file_count
} {0}
do_malloc_test 6 -sqlprep {
BEGIN TRANSACTION;
CREATE TABLE t1(a);
INSERT INTO t1 VALUES(1);
INSERT INTO t1 SELECT a*2 FROM t1;
INSERT INTO t1 SELECT a*2 FROM t1;
INSERT INTO t1 SELECT a*2 FROM t1;
INSERT INTO t1 SELECT a*2 FROM t1;
INSERT INTO t1 SELECT a*2 FROM t1;
INSERT INTO t1 SELECT a*2 FROM t1;
INSERT INTO t1 SELECT a*2 FROM t1;
INSERT INTO t1 SELECT a*2 FROM t1;
INSERT INTO t1 SELECT a*2 FROM t1;
INSERT INTO t1 SELECT a*2 FROM t1;
DELETE FROM t1 where rowid%5 = 0;
COMMIT;
} -sqlbody {
VACUUM;
}
ifcapable vacuum {
do_malloc_test 6 -sqlprep {
BEGIN TRANSACTION;
CREATE TABLE t1(a);
INSERT INTO t1 VALUES(1);
INSERT INTO t1 SELECT a*2 FROM t1;
INSERT INTO t1 SELECT a*2 FROM t1;
INSERT INTO t1 SELECT a*2 FROM t1;
INSERT INTO t1 SELECT a*2 FROM t1;
INSERT INTO t1 SELECT a*2 FROM t1;
INSERT INTO t1 SELECT a*2 FROM t1;
INSERT INTO t1 SELECT a*2 FROM t1;
INSERT INTO t1 SELECT a*2 FROM t1;
INSERT INTO t1 SELECT a*2 FROM t1;
INSERT INTO t1 SELECT a*2 FROM t1;
DELETE FROM t1 where rowid%5 = 0;
COMMIT;
} -sqlbody {
VACUUM;
}
}
do_malloc_test 7 -sqlprep {
CREATE TABLE t1(a, b);
@ -198,7 +208,7 @@ do_malloc_test 7 -sqlprep {
#
# These tests only run if UTF-16 support is compiled in.
#
if {$::sqlite_options(utf16)} {
ifcapable utf16 {
set ::STMT {}
do_malloc_test 8 -tclprep {
set sql "SELECT '[string repeat abc 20]', '[string repeat def 20]', ?"
@ -334,20 +344,22 @@ proc string_compare {a b} {
# Test for malloc() failures in sqlite3_create_collation() and
# sqlite3_create_collation16().
#
do_malloc_test 15 -start 4 -tclbody {
db collate string_compare string_compare
if {[catch {add_test_collate db 1 1 1} msg]} {
if {$msg=="SQLITE_NOMEM"} {set msg "out of memory"}
error $msg
}
db complete {SELECT "hello """||'world"' [microsoft], * FROM anicetable;}
db complete {-- Useful comment}
execsql {
CREATE TABLE t1(a, b COLLATE string_compare);
INSERT INTO t1 VALUES(10, 'string');
INSERT INTO t1 VALUES(10, 'string2');
ifcapable utf16 {
do_malloc_test 15 -start 4 -tclbody {
db collate string_compare string_compare
if {[catch {add_test_collate db 1 1 1} msg]} {
if {$msg=="SQLITE_NOMEM"} {set msg "out of memory"}
error $msg
}
db complete {SELECT "hello """||'world"' [microsoft], * FROM anicetable;}
db complete {-- Useful comment}
execsql {
CREATE TABLE t1(a, b COLLATE string_compare);
INSERT INTO t1 VALUES(10, 'string');
INSERT INTO t1 VALUES(10, 'string2');
}
}
}
@ -364,58 +376,62 @@ do_malloc_test 16 -tclbody {
# Test handling of malloc() failures in sqlite3_open16().
#
do_malloc_test 17 -tclbody {
set DB2 0
set STMT 0
# open database using sqlite3_open16()
set filename [encoding convertto unicode test.db]
append filename "\x00\x00"
set DB2 [sqlite3_open16 $filename -unused]
if {0==$DB2} {
error "out of memory"
}
# Prepare statement
set rc [catch {sqlite3_prepare $DB2 {SELECT * FROM sqlite_master} -1 X} msg]
if {$rc} {
error [string range $msg 4 end]
}
set STMT $msg
# Finalize statement
set rc [sqlite3_finalize $STMT]
if {$rc!="SQLITE_OK"} {
error [sqlite3_errmsg $DB2]
}
set STMT 0
# Close database
set rc [sqlite3_close $DB2]
if {$rc!="SQLITE_OK"} {
error [sqlite3_errmsg $DB2]
}
set DB2 0
} -cleanup {
if {$STMT!="0"} {
sqlite3_finalize $STMT
}
if {$DB2!="0"} {
ifcapable utf16 {
do_malloc_test 17 -tclbody {
set DB2 0
set STMT 0
# open database using sqlite3_open16()
set filename [encoding convertto unicode test.db]
append filename "\x00\x00"
set DB2 [sqlite3_open16 $filename -unused]
if {0==$DB2} {
error "out of memory"
}
# Prepare statement
set rc [catch {sqlite3_prepare $DB2 {SELECT * FROM sqlite_master} -1 X} msg]
if {$rc} {
error [string range $msg 4 end]
}
set STMT $msg
# Finalize statement
set rc [sqlite3_finalize $STMT]
if {$rc!="SQLITE_OK"} {
error [sqlite3_errmsg $DB2]
}
set STMT 0
# Close database
set rc [sqlite3_close $DB2]
if {$rc!="SQLITE_OK"} {
error [sqlite3_errmsg $DB2]
}
set DB2 0
} -cleanup {
if {$STMT!="0"} {
sqlite3_finalize $STMT
}
if {$DB2!="0"} {
set rc [sqlite3_close $DB2]
}
}
}
# Test handling of malloc() failures in sqlite3_errmsg16().
#
do_malloc_test 18 -tclbody {
catch {
db eval "SELECT [string repeat longcolumnname 10] FROM sqlite_master"
} msg
if {$msg=="out of memory"} {error $msg}
set utf16 [sqlite3_errmsg16 [sqlite3_connection_pointer db]]
binary scan $utf16 c* bytes
if {[llength $bytes]==0} {
error "out of memory"
ifcapable utf16 {
do_malloc_test 18 -tclbody {
catch {
db eval "SELECT [string repeat longcolumnname 10] FROM sqlite_master"
} msg
if {$msg=="out of memory"} {error $msg}
set utf16 [sqlite3_errmsg16 [sqlite3_connection_pointer db]]
binary scan $utf16 c* bytes
if {[llength $bytes]==0} {
error "out of memory"
}
}
}
@ -470,9 +486,11 @@ do_malloc_test 20 -tclprep {
# Test malloc failure whilst installing a foreign key.
#
do_malloc_test 21 -sqlbody {
CREATE TABLE abc(a, b, c, FOREIGN KEY(a) REFERENCES abc(b))
}
ifcapable foreignkey {
do_malloc_test 21 -sqlbody {
CREATE TABLE abc(a, b, c, FOREIGN KEY(a) REFERENCES abc(b))
}
}
# Test malloc failure in an sqlite3_prepare_v2() call.
#