AryaWu/sqlite
0
1# 200 July 12#3# The author disclaims copyright to this source code. In place of4# 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. The12# focus of this script is attaching many database files to a single13# connection.14#15 16set testdir [file dirname $argv0]17source $testdir/tester.tcl18 19set testprefix attach420 21ifcapable !attach {22 finish_test23 return24}25 26puts "Testing with SQLITE_MAX_ATTACHED=$SQLITE_MAX_ATTACHED"27 28set files {main test.db}29for {set ii 0} {$ii < $SQLITE_MAX_ATTACHED} {incr ii} {30 lappend files aux$ii "test.db$ii"31}32 33do_test 1.1 {34 sqlite3_limit db SQLITE_LIMIT_ATTACHED -135} $SQLITE_MAX_ATTACHED36 37do_test 1.2.1 {38 db close39 foreach {name f} $files { forcedelete $f }40 sqlite3 db test.db41 42 foreach {name f} $files {43 if {$name == "main"} continue44 execsql "ATTACH '$f' AS $name"45 }46 47 db eval {PRAGMA database_list} {48 lappend L $name [file tail $file]49 }50 set L51} $files52 53do_catchsql_test 1.2.2 {54 ATTACH 'x.db' AS next;55} [list 1 "too many attached databases - max $SQLITE_MAX_ATTACHED"]56 57do_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 66do_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 L72} $files73 74set L [list]75set S ""76foreach {name f} $files {77 if {[permutation] == "journaltest"} {78 set mode delete79 } else {80 set mode wal81 }82 ifcapable !wal { set mode delete }83 lappend L $mode84 append S "85 PRAGMA $name.journal_mode = WAL;86 UPDATE $name.tbl SET x = '$name';87 "88}89do_execsql_test 1.5 $S $L90 91do_test 1.6 {92 set L [list]93 foreach {name f} $files {94 lappend L [execsql "SELECT x FROM $name.tbl"] $f95 }96 set L97} $files98 99do_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 107do_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 L113} $files114 115db close116foreach {name f} $files { forcedelete $f }117 118#-------------------------------------------------------------------------119reset_db120do_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 129do_execsql_test 2.1 {130 DETACH DATABASE aux;131}132 133do_execsql_test 2.2 {134 DROP TRIGGER tr1;135}136 137finish_test138 