github.com/jdgcs/sqlite3@v1.12.1-0.20210908114423-bc5f96e4dd51/testdata/tcl/attach4.test (about) 1 # 200 July 1 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 attaching many database files to a single 13 # connection. 14 # 15 16 set testdir [file dirname $argv0] 17 source $testdir/tester.tcl 18 19 set testprefix attach4 20 21 ifcapable !attach { 22 finish_test 23 return 24 } 25 26 puts "Testing with SQLITE_MAX_ATTACHED=$SQLITE_MAX_ATTACHED" 27 28 set files {main test.db} 29 for {set ii 0} {$ii < $SQLITE_MAX_ATTACHED} {incr ii} { 30 lappend files aux$ii "test.db$ii" 31 } 32 33 do_test 1.1 { 34 sqlite3_limit db SQLITE_LIMIT_ATTACHED -1 35 } $SQLITE_MAX_ATTACHED 36 37 do_test 1.2.1 { 38 db close 39 foreach {name f} $files { forcedelete $f } 40 sqlite3 db test.db 41 42 foreach {name f} $files { 43 if {$name == "main"} continue 44 execsql "ATTACH '$f' AS $name" 45 } 46 47 db eval {PRAGMA database_list} { 48 lappend L $name [file tail $file] 49 } 50 set L 51 } $files 52 53 do_catchsql_test 1.2.2 { 54 ATTACH 'x.db' AS next; 55 } [list 1 "too many attached databases - max $SQLITE_MAX_ATTACHED"] 56 57 do_test 1.3 { 58 execsql BEGIN; 59 foreach {name f} $files { 60 execsql "CREATE TABLE $name.tbl(x)" 61 execsql "INSERT INTO $name.tbl VALUES('$f')" 62 } 63 execsql COMMIT; 64 } {} 65 66 do_test 1.4 { 67 set L [list] 68 foreach {name f} $files { 69 lappend L $name [execsql "SELECT x FROM $name.tbl"] 70 } 71 set L 72 } $files 73 74 set L [list] 75 set S "" 76 foreach {name f} $files { 77 if {[permutation] == "journaltest"} { 78 set mode delete 79 } else { 80 set mode wal 81 } 82 ifcapable !wal { set mode delete } 83 lappend L $mode 84 append S " 85 PRAGMA $name.journal_mode = WAL; 86 UPDATE $name.tbl SET x = '$name'; 87 " 88 } 89 do_execsql_test 1.5 $S $L 90 91 do_test 1.6 { 92 set L [list] 93 foreach {name f} $files { 94 lappend L [execsql "SELECT x FROM $name.tbl"] $f 95 } 96 set L 97 } $files 98 99 do_test 1.7 { 100 execsql BEGIN; 101 foreach {name f} $files { 102 execsql "UPDATE $name.tbl SET x = '$f'" 103 } 104 execsql COMMIT; 105 } {} 106 107 do_test 1.8 { 108 set L [list] 109 foreach {name f} $files { 110 lappend L $name [execsql "SELECT x FROM $name.tbl"] 111 } 112 set L 113 } $files 114 115 db close 116 foreach {name f} $files { forcedelete $f } 117 118 #------------------------------------------------------------------------- 119 reset_db 120 do_execsql_test 2.0 { 121 ATTACH DATABASE '' AS aux; 122 CREATE TABLE IF NOT EXISTS aux.t1(a, b); 123 CREATE TEMPORARY TRIGGER tr1 DELETE ON t1 BEGIN 124 DELETE FROM t1; 125 END; 126 CREATE TABLE temp.t1(a, b); 127 } 128 129 do_execsql_test 2.1 { 130 DETACH DATABASE aux; 131 } 132 133 do_execsql_test 2.2 { 134 DROP TRIGGER tr1; 135 } 136 137 finish_test