attach4.test 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  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. set testdir [file dirname $argv0]
  16. source $testdir/tester.tcl
  17. set testprefix attach4
  18. ifcapable !attach {
  19. finish_test
  20. return
  21. }
  22. puts "Testing with SQLITE_MAX_ATTACHED=$SQLITE_MAX_ATTACHED"
  23. set files {main test.db}
  24. for {set ii 0} {$ii < $SQLITE_MAX_ATTACHED} {incr ii} {
  25. lappend files aux$ii "test.db$ii"
  26. }
  27. do_test 1.1 {
  28. sqlite3_limit db SQLITE_LIMIT_ATTACHED -1
  29. } $SQLITE_MAX_ATTACHED
  30. do_test 1.2.1 {
  31. db close
  32. foreach {name f} $files { forcedelete $f }
  33. sqlite3 db test.db
  34. foreach {name f} $files {
  35. if {$name == "main"} continue
  36. execsql "ATTACH '$f' AS $name"
  37. }
  38. db eval {PRAGMA database_list} {
  39. lappend L $name [file tail $file]
  40. }
  41. set L
  42. } $files
  43. do_catchsql_test 1.2.2 {
  44. ATTACH 'x.db' AS next;
  45. } [list 1 "too many attached databases - max $SQLITE_MAX_ATTACHED"]
  46. do_test 1.3 {
  47. execsql BEGIN;
  48. foreach {name f} $files {
  49. execsql "CREATE TABLE $name.tbl(x)"
  50. execsql "INSERT INTO $name.tbl VALUES('$f')"
  51. }
  52. execsql COMMIT;
  53. } {}
  54. do_test 1.4 {
  55. set L [list]
  56. foreach {name f} $files {
  57. lappend L $name [execsql "SELECT x FROM $name.tbl"]
  58. }
  59. set L
  60. } $files
  61. set L [list]
  62. set S ""
  63. foreach {name f} $files {
  64. if {[permutation] == "journaltest"} {
  65. set mode delete
  66. } else {
  67. set mode wal
  68. }
  69. ifcapable !wal { set mode delete }
  70. lappend L $mode
  71. append S "
  72. PRAGMA $name.journal_mode = WAL;
  73. UPDATE $name.tbl SET x = '$name';
  74. "
  75. }
  76. do_execsql_test 1.5 $S $L
  77. do_test 1.6 {
  78. set L [list]
  79. foreach {name f} $files {
  80. lappend L [execsql "SELECT x FROM $name.tbl"] $f
  81. }
  82. set L
  83. } $files
  84. do_test 1.7 {
  85. execsql BEGIN;
  86. foreach {name f} $files {
  87. execsql "UPDATE $name.tbl SET x = '$f'"
  88. }
  89. execsql COMMIT;
  90. } {}
  91. do_test 1.8 {
  92. set L [list]
  93. foreach {name f} $files {
  94. lappend L $name [execsql "SELECT x FROM $name.tbl"]
  95. }
  96. set L
  97. } $files
  98. db close
  99. foreach {name f} $files { forcedelete $f }
  100. finish_test