persistentstorage/sqlite3api/TEST/TclScript/altermalloc.test
changeset 0 08ec8eefde2f
equal deleted inserted replaced
-1:000000000000 0:08ec8eefde2f
       
     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.9 2008/08/04 20:13:27 drh 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 }
       
    43 
       
    44 # Test malloc() failure on an ALTER TABLE on a virtual table.
       
    45 #
       
    46 ifcapable vtab {
       
    47   do_malloc_test altermalloc-vtab -tclprep {
       
    48     sqlite3 db2 test.db 
       
    49     sqlite3_db_config_lookaside db2 0 0 0
       
    50     sqlite3_extended_result_codes db2 1
       
    51     register_echo_module [sqlite3_connection_pointer db2]
       
    52     db2 eval {
       
    53       CREATE TABLE t1(a, b VARCHAR, c INTEGER);
       
    54       CREATE VIRTUAL TABLE t1echo USING echo(t1);
       
    55     }
       
    56     db2 close
       
    57 
       
    58     register_echo_module [sqlite3_connection_pointer db]
       
    59   } -tclbody {
       
    60     set rc [catch {db eval { ALTER TABLE t1echo RENAME TO t1_echo }} msg]
       
    61     if {$msg eq "vtable constructor failed: t1echo"} {
       
    62       set msg "out of memory"
       
    63     }
       
    64     if {$rc} {
       
    65       error $msg
       
    66     }
       
    67   }
       
    68 }
       
    69 
       
    70 finish_test