1: # 2005 September 19
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: # This file implements regression tests for SQLite library. The
12: # focus of this script is testing the ALTER TABLE statement and
13: # specifically out-of-memory conditions within that command.
14: #
15: # $Id: altermalloc.test,v 1.1.1.1 2012/02/21 17:04:16 misho Exp $
16: #
17:
18: set testdir [file dirname $argv0]
19: source $testdir/tester.tcl
20:
21: # If SQLITE_OMIT_ALTERTABLE is defined, omit this file.
22: ifcapable !altertable||!memdebug {
23: finish_test
24: return
25: }
26:
27: source $testdir/malloc_common.tcl
28:
29: do_malloc_test altermalloc-1 -tclprep {
30: db close
31: } -tclbody {
32: if {[catch {sqlite3 db test.db}]} {
33: error "out of memory"
34: }
35: sqlite3_db_config_lookaside db 0 0 0
36: sqlite3_extended_result_codes db 1
37: } -sqlbody {
38: CREATE TABLE t1(a int);
39: ALTER TABLE t1 ADD COLUMN b INTEGER DEFAULT NULL;
40: ALTER TABLE t1 ADD COLUMN c TEXT DEFAULT 'default-text';
41: ALTER TABLE t1 RENAME TO t2;
42: ALTER TABLE t2 ADD COLUMN d BLOB DEFAULT X'ABCD';
43: }
44:
45: # Test malloc() failure on an ALTER TABLE on a virtual table.
46: #
47: ifcapable vtab {
48: do_malloc_test altermalloc-vtab -tclprep {
49: sqlite3 db2 test.db
50: sqlite3_db_config_lookaside db2 0 0 0
51: sqlite3_extended_result_codes db2 1
52: register_echo_module [sqlite3_connection_pointer db2]
53: db2 eval {
54: CREATE TABLE t1(a, b VARCHAR, c INTEGER);
55: CREATE VIRTUAL TABLE t1echo USING echo(t1);
56: }
57: db2 close
58:
59: register_echo_module [sqlite3_connection_pointer db]
60: } -tclbody {
61: set rc [catch {db eval { ALTER TABLE t1echo RENAME TO t1_echo }} msg]
62: if {$msg eq "vtable constructor failed: t1echo"} {
63: set msg "out of memory"
64: }
65: if {$rc} {
66: error $msg
67: }
68: }
69: }
70:
71: finish_test
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>