pagesize.test 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219
  1. # 2004 September 2
  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.
  12. # This file implements tests for the page_size PRAGMA.
  13. #
  14. # $Id: pagesize.test,v 1.13 2008/08/26 21:07:27 drh Exp $
  15. set testdir [file dirname $argv0]
  16. source $testdir/tester.tcl
  17. # This test script depends entirely on "PRAGMA page_size". So if this
  18. # pragma is not available, omit the whole file.
  19. ifcapable !pager_pragmas {
  20. finish_test
  21. return
  22. }
  23. do_test pagesize-1.1 {
  24. execsql {PRAGMA page_size}
  25. } 1024
  26. ifcapable {explain} {
  27. do_test pagesize-1.2 {
  28. catch {execsql {EXPLAIN PRAGMA page_size}}
  29. } 0
  30. }
  31. do_test pagesize-1.3 {
  32. execsql {
  33. CREATE TABLE t1(a);
  34. PRAGMA page_size=2048;
  35. PRAGMA page_size;
  36. }
  37. } 1024
  38. do_test pagesize-1.4 {
  39. db close
  40. forcedelete test.db
  41. sqlite3 db test.db
  42. execsql {
  43. PRAGMA page_size=511;
  44. PRAGMA page_size;
  45. }
  46. } 1024
  47. do_test pagesize-1.5 {
  48. execsql {
  49. PRAGMA page_size=512;
  50. PRAGMA page_size;
  51. }
  52. } 512
  53. if {![info exists SQLITE_MAX_PAGE_SIZE] || $SQLITE_MAX_PAGE_SIZE>=8192} {
  54. do_test pagesize-1.6 {
  55. execsql {
  56. PRAGMA page_size=8192;
  57. PRAGMA page_size;
  58. }
  59. } 8192
  60. do_test pagesize-1.7 {
  61. execsql {
  62. PRAGMA page_size=65537;
  63. PRAGMA page_size;
  64. }
  65. } 8192
  66. do_test pagesize-1.8 {
  67. execsql {
  68. PRAGMA page_size=1234;
  69. PRAGMA page_size
  70. }
  71. } 8192
  72. }
  73. foreach PGSZ {512 2048 4096 8192} {
  74. if {[info exists SQLITE_MAX_PAGE_SIZE]
  75. && $SQLITE_MAX_PAGE_SIZE<$PGSZ} continue
  76. ifcapable memorydb {
  77. do_test pagesize-2.$PGSZ.0.1 {
  78. db close
  79. sqlite3 db :memory:
  80. execsql "PRAGMA page_size=$PGSZ;"
  81. execsql {PRAGMA page_size}
  82. } $PGSZ
  83. do_test pagesize-2.$PGSZ.0.2 {
  84. execsql {CREATE TABLE t1(x UNIQUE, y UNIQUE, z UNIQUE)}
  85. execsql {PRAGMA page_size}
  86. } $PGSZ
  87. do_test pagesize-2.$PGSZ.0.3 {
  88. execsql {
  89. INSERT INTO t1 VALUES(1,2,3);
  90. INSERT INTO t1 VALUES(2,3,4);
  91. SELECT * FROM t1;
  92. }
  93. } {1 2 3 2 3 4}
  94. }
  95. do_test pagesize-2.$PGSZ.1 {
  96. db close
  97. forcedelete test.db
  98. sqlite3 db test.db
  99. execsql "PRAGMA page_size=$PGSZ"
  100. execsql {
  101. CREATE TABLE t1(x);
  102. PRAGMA page_size;
  103. }
  104. } $PGSZ
  105. do_test pagesize-2.$PGSZ.2 {
  106. db close
  107. sqlite3 db test.db
  108. execsql {
  109. PRAGMA page_size
  110. }
  111. } $PGSZ
  112. do_test pagesize-2.$PGSZ.3 {
  113. file size test.db
  114. } [expr {$PGSZ*($AUTOVACUUM?3:2)}]
  115. ifcapable {vacuum} {
  116. do_test pagesize-2.$PGSZ.4 {
  117. execsql {VACUUM}
  118. } {}
  119. }
  120. integrity_check pagesize-2.$PGSZ.5
  121. do_test pagesize-2.$PGSZ.6 {
  122. db close
  123. sqlite3 db test.db
  124. execsql {PRAGMA page_size}
  125. } $PGSZ
  126. do_test pagesize-2.$PGSZ.7 {
  127. execsql {
  128. INSERT INTO t1 VALUES(randstr(10,9000));
  129. INSERT INTO t1 VALUES(randstr(10,9000));
  130. INSERT INTO t1 VALUES(randstr(10,9000));
  131. BEGIN;
  132. INSERT INTO t1 SELECT x||x FROM t1;
  133. INSERT INTO t1 SELECT x||x FROM t1;
  134. INSERT INTO t1 SELECT x||x FROM t1;
  135. INSERT INTO t1 SELECT x||x FROM t1;
  136. SELECT count(*) FROM t1;
  137. }
  138. } 48
  139. do_test pagesize-2.$PGSZ.8 {
  140. execsql {
  141. ROLLBACK;
  142. SELECT count(*) FROM t1;
  143. }
  144. } 3
  145. integrity_check pagesize-2.$PGSZ.9
  146. do_test pagesize-2.$PGSZ.10 {
  147. db close
  148. sqlite3 db test.db
  149. execsql {PRAGMA page_size}
  150. } $PGSZ
  151. do_test pagesize-2.$PGSZ.11 {
  152. execsql {
  153. INSERT INTO t1 SELECT x||x FROM t1;
  154. INSERT INTO t1 SELECT x||x FROM t1;
  155. INSERT INTO t1 SELECT x||x FROM t1;
  156. INSERT INTO t1 SELECT x||x FROM t1;
  157. INSERT INTO t1 SELECT x||x FROM t1;
  158. INSERT INTO t1 SELECT x||x FROM t1;
  159. SELECT count(*) FROM t1;
  160. }
  161. } 192
  162. do_test pagesize-2.$PGSZ.12 {
  163. execsql {
  164. BEGIN;
  165. DELETE FROM t1 WHERE rowid%5!=0;
  166. SELECT count(*) FROM t1;
  167. }
  168. } 38
  169. do_test pagesize-2.$PGSZ.13 {
  170. execsql {
  171. ROLLBACK;
  172. SELECT count(*) FROM t1;
  173. }
  174. } 192
  175. integrity_check pagesize-2.$PGSZ.14
  176. do_test pagesize-2.$PGSZ.15 {
  177. execsql {DELETE FROM t1 WHERE rowid%5!=0}
  178. ifcapable {vacuum} {execsql VACUUM}
  179. execsql {SELECT count(*) FROM t1}
  180. } 38
  181. do_test pagesize-2.$PGSZ.16 {
  182. execsql {DROP TABLE t1}
  183. ifcapable {vacuum} {execsql VACUUM}
  184. } {}
  185. integrity_check pagesize-2.$PGSZ.17
  186. db close
  187. forcedelete test.db
  188. sqlite3 db test.db
  189. do_test pagesize-2.$PGSZ.30 {
  190. execsql "
  191. CREATE TABLE t1(x);
  192. PRAGMA temp.page_size=$PGSZ;
  193. CREATE TEMP TABLE t2(y);
  194. PRAGMA main.page_size;
  195. PRAGMA temp.page_size;
  196. "
  197. } [list 1024 $PGSZ]
  198. db close
  199. forcedelete test.db
  200. sqlite3 db test.db
  201. do_test pagesize-2.$PGSZ.40 {
  202. execsql "
  203. PRAGMA page_size=$PGSZ;
  204. CREATE TABLE t1(x);
  205. CREATE TEMP TABLE t2(y);
  206. PRAGMA main.page_size;
  207. PRAGMA temp.page_size;
  208. "
  209. } [list $PGSZ $PGSZ]
  210. }
  211. finish_test