Home | History | Annotate | Download | only in test
      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 ATTACH statement and
     13 # specifically out-of-memory conditions within that command.
     14 #
     15 # $Id: attachmalloc.test,v 1.10 2008/10/22 10:45:38 danielk1977 Exp $
     16 #
     17 
     18 set testdir [file dirname $argv0]
     19 source $testdir/tester.tcl
     20 
     21 ifcapable !memdebug||!attach {
     22   finish_test
     23   return
     24 }
     25 
     26 source $testdir/malloc_common.tcl
     27 
     28 do_malloc_test attachmalloc-1 -tclprep {
     29   catch { db close }
     30   for {set i 2} {$i<=4} {incr i} {
     31     catch { db$i close }
     32     file delete -force test$i.db
     33     file delete -force test$i.db-journal
     34   }
     35 } -tclbody {
     36   if {[catch {sqlite3 db test.db}]} {
     37     error "out of memory"
     38   }
     39   sqlite3_db_config_lookaside db 0 0 0
     40   sqlite3_extended_result_codes db 1
     41 } -sqlbody {
     42   ATTACH 'test2.db' AS two;
     43   CREATE TABLE two.t1(x);
     44   ATTACH 'test3.db' AS three;
     45   CREATE TABLE three.t1(x);
     46   ATTACH 'test4.db' AS four;
     47   CREATE TABLE four.t1(x);
     48 }
     49 
     50 do_malloc_test attachmalloc-2 -tclprep {
     51   file delete -force test2.db
     52   file delete -force test2.db-journal
     53   sqlite3 db2 test2.db
     54   db2 eval {
     55     CREATE TABLE t1(a, b, c);
     56     CREATE INDEX i1 ON t1(a, b);
     57   }
     58   db2 close
     59 } -sqlbody {
     60   CREATE TABLE t1(d, e, f);
     61   ATTACH 'test2.db' AS db1;
     62 }
     63 
     64 set enable_shared_cache [sqlite3_enable_shared_cache 1]
     65 sqlite3 dbaux test3.db
     66 dbaux eval {SELECT * FROM sqlite_master}
     67 do_malloc_test attachmalloc-3 -sqlbody {
     68   SELECT * FROM sqlite_master;
     69   ATTACH 'test3.db' AS three;
     70 } -cleanup {
     71   db eval { DETACH three }
     72 }
     73 dbaux close
     74 sqlite3_enable_shared_cache $enable_shared_cache
     75 
     76 
     77 finish_test
     78