wal7.test 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. # 2011 May 16
  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 file is testing the PRAGMA journal_size_limit when
  13. # in WAL mode.
  14. #
  15. set testdir [file dirname $argv0]
  16. source $testdir/tester.tcl
  17. ifcapable !wal {finish_test ; return }
  18. # Case 1: No size limit. Journal can get large.
  19. #
  20. do_test wal7-1.0 {
  21. db close
  22. forcedelete test.db
  23. sqlite3 db test.db
  24. db eval {
  25. PRAGMA page_size=1024;
  26. PRAGMA journal_mode=WAL;
  27. PRAGMA wal_autocheckpoint=50; -- 50 pages
  28. CREATE TABLE t1(x, y UNIQUE);
  29. INSERT INTO t1 VALUES(1,2);
  30. INSERT INTO t1 VALUES(zeroblob(200000),4);
  31. CREATE TABLE t2(z);
  32. DELETE FROM t1;
  33. INSERT INTO t2 SELECT x FROM t1;
  34. }
  35. expr {[file size test.db-wal]>50*1100}
  36. } 1
  37. do_test wal7-1.1 {
  38. db eval {PRAGMA wal_checkpoint}
  39. expr {[file size test.db-wal]>50*1100}
  40. } 1
  41. do_test wal7-1.2 {
  42. db eval {INSERT INTO t2 VALUES('hi');}
  43. expr {[file size test.db-wal]>50*1100}
  44. } 1
  45. # Case 2: Size limit at half the autocheckpoint size.
  46. #
  47. do_test wal7-2.0 {
  48. db close
  49. forcedelete test.db
  50. sqlite3 db test.db
  51. db eval {
  52. PRAGMA page_size=1024;
  53. PRAGMA journal_mode=WAL;
  54. PRAGMA wal_autocheckpoint=50; -- 50 pages
  55. PRAGMA journal_size_limit=25000;
  56. CREATE TABLE t1(x, y UNIQUE);
  57. INSERT INTO t1 VALUES(1,2);
  58. INSERT INTO t1 VALUES(zeroblob(200000),4);
  59. CREATE TABLE t2(z);
  60. DELETE FROM t1;
  61. INSERT INTO t2 VALUES(1);
  62. }
  63. file size test.db-wal
  64. } 25000
  65. # Case 3: Size limit of zero.
  66. #
  67. do_test wal7-3.0 {
  68. db close
  69. forcedelete test.db
  70. sqlite3 db test.db
  71. db eval {
  72. PRAGMA page_size=1024;
  73. PRAGMA journal_mode=WAL;
  74. PRAGMA wal_autocheckpoint=50; -- 50 pages
  75. PRAGMA journal_size_limit=0;
  76. CREATE TABLE t1(x, y UNIQUE);
  77. INSERT INTO t1 VALUES(1,2);
  78. INSERT INTO t1 VALUES(zeroblob(200000),4);
  79. CREATE TABLE t2(z);
  80. DELETE FROM t1;
  81. INSERT INTO t2 VALUES(1);
  82. }
  83. set sz [file size test.db-wal]
  84. expr {$sz>0 && $sz<13700}
  85. } 1
  86. # Case 4: Size limit set before going WAL
  87. #
  88. do_test wal7-4.0 {
  89. db close
  90. forcedelete test.db
  91. sqlite3 db test.db
  92. db eval {
  93. PRAGMA page_size=1024;
  94. PRAGMA journal_size_limit=25000;
  95. PRAGMA journal_mode=WAL;
  96. PRAGMA wal_autocheckpoint=50; -- 50 pages
  97. CREATE TABLE t1(x, y UNIQUE);
  98. INSERT INTO t1 VALUES(1,2);
  99. INSERT INTO t1 VALUES(zeroblob(200000),4);
  100. CREATE TABLE t2(z);
  101. DELETE FROM t1;
  102. INSERT INTO t2 VALUES(1);
  103. }
  104. set sz [file size test.db-wal]
  105. } 25000
  106. finish_test