/ Hex Artifact Content
Login

Artifact 13bc046b26210471ca6f2889aceb1ea52dc717de:


0000: 23 20 32 30 30 37 20 4d 61 72 63 68 20 32 34 0a  # 2007 March 24.
0010: 23 0a 23 20 54 68 65 20 61 75 74 68 6f 72 20 64  #.# The author d
0020: 69 73 63 6c 61 69 6d 73 20 63 6f 70 79 72 69 67  isclaims copyrig
0030: 68 74 20 74 6f 20 74 68 69 73 20 73 6f 75 72 63  ht to this sourc
0040: 65 20 63 6f 64 65 2e 20 20 49 6e 20 70 6c 61 63  e code.  In plac
0050: 65 20 6f 66 0a 23 20 61 20 6c 65 67 61 6c 20 6e  e of.# a legal n
0060: 6f 74 69 63 65 2c 20 68 65 72 65 20 69 73 20 61  otice, here is a
0070: 20 62 6c 65 73 73 69 6e 67 3a 0a 23 0a 23 20 20   blessing:.#.#  
0080: 20 20 4d 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f    May you do goo
0090: 64 20 61 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a  d and not evil..
00a0: 23 20 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e  #    May you fin
00b0: 64 20 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f  d forgiveness fo
00c0: 72 20 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66  r yourself and f
00d0: 6f 72 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 23  orgive others..#
00e0: 20 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72      May you shar
00f0: 65 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20  e freely, never 
0100: 74 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e  taking more than
0110: 20 79 6f 75 20 67 69 76 65 2e 0a 23 0a 23 2a 2a   you give..#.#**
0120: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 0a 23 0a 23 20 24 49 64 3a 20 63  *****.#.# $Id: c
0170: 61 63 68 65 2e 74 65 73 74 2c 76 20 31 2e 34 20  ache.test,v 1.4 
0180: 32 30 30 37 2f 30 38 2f 32 32 20 30 32 3a 35 36  2007/08/22 02:56
0190: 3a 34 34 20 64 72 68 20 45 78 70 20 24 0a 0a 73  :44 drh Exp $..s
01a0: 65 74 20 74 65 73 74 64 69 72 20 5b 66 69 6c 65  et testdir [file
01b0: 20 64 69 72 6e 61 6d 65 20 24 61 72 67 76 30 5d   dirname $argv0]
01c0: 0a 73 6f 75 72 63 65 20 24 74 65 73 74 64 69 72  .source $testdir
01d0: 2f 74 65 73 74 65 72 2e 74 63 6c 0a 0a 69 66 63  /tester.tcl..ifc
01e0: 61 70 61 62 6c 65 20 21 70 61 67 65 72 5f 70 72  apable !pager_pr
01f0: 61 67 6d 61 73 7c 7c 21 63 6f 6d 70 6f 75 6e 64  agmas||!compound
0200: 20 7b 0a 20 20 66 69 6e 69 73 68 5f 74 65 73 74   {.  finish_test
0210: 0a 20 20 72 65 74 75 72 6e 0a 7d 0a 73 71 6c 69  .  return.}.sqli
0220: 74 65 33 5f 73 6f 66 74 5f 68 65 61 70 5f 6c 69  te3_soft_heap_li
0230: 6d 69 74 20 30 0a 0a 70 72 6f 63 20 70 61 67 65  mit 0..proc page
0240: 72 5f 63 61 63 68 65 5f 73 69 7a 65 20 7b 64 62  r_cache_size {db
0250: 7d 20 7b 0a 20 20 73 65 74 20 62 74 20 5b 62 74  } {.  set bt [bt
0260: 72 65 65 5f 66 72 6f 6d 5f 64 62 20 24 64 62 5d  ree_from_db $db]
0270: 0a 20 20 64 62 5f 65 6e 74 65 72 20 24 64 62 0a  .  db_enter $db.
0280: 20 20 61 72 72 61 79 20 73 65 74 20 73 74 61 74    array set stat
0290: 73 20 5b 62 74 72 65 65 5f 70 61 67 65 72 5f 73  s [btree_pager_s
02a0: 74 61 74 73 20 24 62 74 5d 0a 20 20 64 62 5f 6c  tats $bt].  db_l
02b0: 65 61 76 65 20 24 64 62 0a 20 20 72 65 74 75 72  eave $db.  retur
02c0: 6e 20 24 73 74 61 74 73 28 70 61 67 65 29 0a 7d  n $stats(page).}
02d0: 0a 0a 69 66 20 7b 5b 70 65 72 6d 75 74 61 74 69  ..if {[permutati
02e0: 6f 6e 5d 20 3d 3d 20 22 22 7d 20 7b 20 0a 20 20  on] == ""} { .  
02f0: 64 6f 5f 74 65 73 74 20 63 61 63 68 65 2d 31 2e  do_test cache-1.
0300: 31 20 7b 20 70 61 67 65 72 5f 63 61 63 68 65 5f  1 { pager_cache_
0310: 73 69 7a 65 20 64 62 20 7d 20 7b 30 7d 0a 7d 0a  size db } {0}.}.
0320: 0a 64 6f 5f 74 65 73 74 20 63 61 63 68 65 2d 31  .do_test cache-1
0330: 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .2 {.  execsql {
0340: 0a 20 20 20 20 50 52 41 47 4d 41 20 61 75 74 6f  .    PRAGMA auto
0350: 5f 76 61 63 75 75 6d 3d 4f 46 46 3b 0a 20 20 20  _vacuum=OFF;.   
0360: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 61 62   CREATE TABLE ab
0370: 63 28 61 2c 20 62 2c 20 63 29 3b 0a 20 20 20 20  c(a, b, c);.    
0380: 49 4e 53 45 52 54 20 49 4e 54 4f 20 61 62 63 20  INSERT INTO abc 
0390: 56 41 4c 55 45 53 28 31 2c 20 32 2c 20 33 29 3b  VALUES(1, 2, 3);
03a0: 0a 20 20 7d 0a 20 20 70 61 67 65 72 5f 63 61 63  .  }.  pager_cac
03b0: 68 65 5f 73 69 7a 65 20 64 62 0a 7d 20 7b 32 7d  he_size db.} {2}
03c0: 0a 0a 23 20 41 74 20 6f 6e 65 20 70 6f 69 6e 74  ..# At one point
03d0: 2c 20 72 65 70 65 61 74 65 64 6c 79 20 6c 6f 63  , repeatedly loc
03e0: 6b 69 6e 67 20 61 6e 64 20 75 6e 6c 6f 63 6b 69  king and unlocki
03f0: 6e 67 20 74 68 65 20 63 61 63 68 65 20 77 61 73  ng the cache was
0400: 20 63 61 75 73 69 6e 67 0a 23 20 61 20 72 65 73   causing.# a res
0410: 6f 75 72 63 65 20 6c 65 61 6b 20 6f 66 20 6f 6e  ource leak of on
0420: 65 20 70 61 67 65 20 70 65 72 20 72 65 70 65 74  e page per repet
0430: 69 74 69 6f 6e 2e 20 54 68 65 20 70 61 67 65 20  ition. The page 
0440: 77 61 73 6e 27 74 20 61 63 74 75 61 6c 6c 79 0a  wasn't actually.
0450: 23 20 6c 65 61 6b 65 64 2c 20 62 75 74 20 77 6f  # leaked, but wo
0460: 75 6c 64 20 6e 6f 74 20 62 65 20 72 65 75 73 65  uld not be reuse
0470: 64 20 75 6e 74 69 6c 20 74 68 65 20 70 61 67 65  d until the page
0480: 72 2d 63 61 63 68 65 20 77 61 73 20 66 75 6c 6c  r-cache was full
0490: 20 28 69 2e 65 2e 20 0a 23 20 32 30 30 30 20 70   (i.e. .# 2000 p
04a0: 61 67 65 73 20 62 79 20 64 65 66 61 75 6c 74 29  ages by default)
04b0: 2e 0a 23 0a 23 20 54 68 69 73 20 74 65 73 74 73  ..#.# This tests
04c0: 20 74 68 61 74 20 6f 6e 63 65 20 74 68 65 20 70   that once the p
04d0: 61 67 65 72 2d 63 61 63 68 65 20 69 73 20 69 6e  ager-cache is in
04e0: 69 74 69 61 6c 69 7a 65 64 2c 20 69 74 20 63 61  itialized, it ca
04f0: 6e 20 62 65 20 6c 6f 63 6b 65 64 0a 23 20 61 6e  n be locked.# an
0500: 64 20 75 6e 6c 6f 63 6b 65 64 20 72 65 70 65 61  d unlocked repea
0510: 74 65 64 6c 79 20 77 69 74 68 6f 75 74 20 69 6e  tedly without in
0520: 74 65 72 6e 61 6c 6c 79 20 61 6c 6c 6f 63 61 74  ternally allocat
0530: 69 6e 67 20 61 6e 79 20 6e 65 77 20 70 61 67 65  ing any new page
0540: 73 2e 0a 23 0a 73 65 74 20 63 61 63 68 65 5f 73  s..#.set cache_s
0550: 69 7a 65 20 5b 70 61 67 65 72 5f 63 61 63 68 65  ize [pager_cache
0560: 5f 73 69 7a 65 20 64 62 5d 0a 66 6f 72 20 7b 73  _size db].for {s
0570: 65 74 20 69 69 20 30 7d 20 7b 24 69 69 20 3c 20  et ii 0} {$ii < 
0580: 31 30 7d 20 7b 69 6e 63 72 20 69 69 7d 20 7b 0a  10} {incr ii} {.
0590: 20 20 64 6f 5f 74 65 73 74 20 63 61 63 68 65 2d    do_test cache-
05a0: 31 2e 33 2e 24 69 69 20 7b 0a 20 20 20 20 65 78  1.3.$ii {.    ex
05b0: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20  ecsql {SELECT * 
05c0: 46 52 4f 4d 20 61 62 63 7d 0a 20 20 20 20 70 61  FROM abc}.    pa
05d0: 67 65 72 5f 63 61 63 68 65 5f 73 69 7a 65 20 64  ger_cache_size d
05e0: 62 0a 20 20 7d 20 24 3a 3a 63 61 63 68 65 5f 73  b.  } $::cache_s
05f0: 69 7a 65 0a 7d 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d  ize.}..#--------
0600: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0610: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0620: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0630: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0640: 2d 0a 23 20 54 68 69 73 20 62 6c 6f 63 6b 20 6f  -.# This block o
0650: 66 20 74 65 73 74 73 20 63 68 65 63 6b 73 20 74  f tests checks t
0660: 68 61 74 20 69 74 20 69 73 20 70 6f 73 73 69 62  hat it is possib
0670: 6c 65 20 74 6f 20 73 65 74 20 74 68 65 20 63 61  le to set the ca
0680: 63 68 65 5f 73 69 7a 65 20 6f 66 20 61 0a 23 20  che_size of a.# 
0690: 64 61 74 61 62 61 73 65 20 74 6f 20 61 20 73 6d  database to a sm
06a0: 61 6c 6c 20 28 3c 20 31 30 29 20 76 61 6c 75 65  all (< 10) value
06b0: 2e 20 4d 6f 72 65 20 73 70 65 63 69 66 69 63 61  . More specifica
06c0: 6c 6c 79 3a 0a 23 0a 23 20 20 20 63 61 63 68 65  lly:.#.#   cache
06d0: 2d 32 2e 31 2e 2a 3a 20 54 65 73 74 20 74 68 61  -2.1.*: Test tha
06e0: 74 20 22 50 52 41 47 4d 41 20 63 61 63 68 65 5f  t "PRAGMA cache_
06f0: 73 69 7a 65 22 20 61 70 70 65 61 72 73 20 74 6f  size" appears to
0700: 20 77 6f 72 6b 20 77 69 74 68 20 73 6d 61 6c 6c   work with small
0710: 20 0a 23 20 20 20 20 20 20 20 20 20 20 20 20 20   .#             
0720: 20 20 20 76 61 6c 75 65 73 2e 0a 23 20 20 20 63     values..#   c
0730: 61 63 68 65 2d 32 2e 32 2e 2a 3a 20 54 65 73 74  ache-2.2.*: Test
0740: 20 74 68 61 74 20 22 50 52 41 47 4d 41 20 6d 61   that "PRAGMA ma
0750: 69 6e 2e 63 61 63 68 65 5f 73 69 7a 65 22 20 61  in.cache_size" a
0760: 70 70 65 61 72 73 20 74 6f 20 77 6f 72 6b 20 77  ppears to work w
0770: 69 74 68 20 0a 23 20 20 20 20 20 20 20 20 20 20  ith .#          
0780: 20 20 20 20 20 20 73 6d 61 6c 6c 20 76 61 6c 75        small valu
0790: 65 73 2e 0a 23 20 20 20 63 61 63 68 65 2d 32 2e  es..#   cache-2.
07a0: 33 2e 2a 3a 20 54 65 73 74 20 63 61 63 68 65 5f  3.*: Test cache_
07b0: 73 69 7a 65 3d 31 20 63 6f 72 72 65 63 74 6c 79  size=1 correctly
07c0: 20 73 70 69 6c 6c 73 2f 66 6c 75 73 68 65 73 20   spills/flushes 
07d0: 74 68 65 20 63 61 63 68 65 2e 20 0a 23 20 20 20  the cache. .#   
07e0: 63 61 63 68 65 2d 32 2e 34 2e 2a 3a 20 54 65 73  cache-2.4.*: Tes
07f0: 74 20 63 61 63 68 65 5f 73 69 7a 65 3d 30 20 63  t cache_size=0 c
0800: 6f 72 72 65 63 74 6c 79 20 73 70 69 6c 6c 73 2f  orrectly spills/
0810: 66 6c 75 73 68 65 73 20 74 68 65 20 63 61 63 68  flushes the cach
0820: 65 2e 20 0a 23 0a 23 0a 64 62 5f 64 65 6c 65 74  e. .#.#.db_delet
0830: 65 5f 61 6e 64 5f 72 65 6f 70 65 6e 0a 64 6f 5f  e_and_reopen.do_
0840: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 63 61 63  execsql_test cac
0850: 68 65 2d 32 2e 30 20 7b 0a 20 20 50 52 41 47 4d  he-2.0 {.  PRAGM
0860: 41 20 61 75 74 6f 5f 76 61 63 75 75 6d 3d 4f 46  A auto_vacuum=OF
0870: 46 3b 0a 20 20 50 52 41 47 4d 41 20 6a 6f 75 72  F;.  PRAGMA jour
0880: 6e 61 6c 5f 6d 6f 64 65 3d 44 45 4c 45 54 45 3b  nal_mode=DELETE;
0890: 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  .  CREATE TABLE 
08a0: 74 31 28 61 2c 20 62 29 3b 0a 20 20 43 52 45 41  t1(a, b);.  CREA
08b0: 54 45 20 54 41 42 4c 45 20 74 32 28 63 2c 20 64  TE TABLE t2(c, d
08c0: 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  );.  INSERT INTO
08d0: 20 74 31 20 56 41 4c 55 45 53 28 27 78 27 2c 20   t1 VALUES('x', 
08e0: 27 79 27 29 3b 0a 20 20 49 4e 53 45 52 54 20 49  'y');.  INSERT I
08f0: 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28 27 69  NTO t2 VALUES('i
0900: 27 2c 20 27 6a 27 29 3b 0a 7d 20 7b 64 65 6c 65  ', 'j');.} {dele
0910: 74 65 7d 0a 0a 66 6f 72 20 7b 73 65 74 20 69 20  te}..for {set i 
0920: 30 7d 20 7b 24 69 20 3c 20 32 30 7d 20 7b 69 6e  0} {$i < 20} {in
0930: 63 72 20 69 7d 20 7b 0a 20 20 64 6f 5f 65 78 65  cr i} {.  do_exe
0940: 63 73 71 6c 5f 74 65 73 74 20 63 61 63 68 65 2d  csql_test cache-
0950: 32 2e 31 2e 24 69 2e 31 20 22 50 52 41 47 4d 41  2.1.$i.1 "PRAGMA
0960: 20 63 61 63 68 65 5f 73 69 7a 65 20 3d 20 24 69   cache_size = $i
0970: 22 0a 20 20 64 6f 5f 65 78 65 63 73 71 6c 5f 74  ".  do_execsql_t
0980: 65 73 74 20 63 61 63 68 65 2d 32 2e 31 2e 24 69  est cache-2.1.$i
0990: 2e 32 20 22 50 52 41 47 4d 41 20 63 61 63 68 65  .2 "PRAGMA cache
09a0: 5f 73 69 7a 65 22 20 24 69 0a 20 20 64 6f 5f 65  _size" $i.  do_e
09b0: 78 65 63 73 71 6c 5f 74 65 73 74 20 63 61 63 68  xecsql_test cach
09c0: 65 2d 32 2e 31 2e 24 69 2e 33 20 22 53 45 4c 45  e-2.1.$i.3 "SELE
09d0: 43 54 20 2a 20 46 52 4f 4d 20 74 31 22 20 7b 78  CT * FROM t1" {x
09e0: 20 79 7d 0a 20 20 64 6f 5f 65 78 65 63 73 71 6c   y}.  do_execsql
09f0: 5f 74 65 73 74 20 63 61 63 68 65 2d 32 2e 31 2e  _test cache-2.1.
0a00: 24 69 2e 34 20 22 50 52 41 47 4d 41 20 63 61 63  $i.4 "PRAGMA cac
0a10: 68 65 5f 73 69 7a 65 22 20 24 69 0a 7d 0a 66 6f  he_size" $i.}.fo
0a20: 72 20 7b 73 65 74 20 69 20 30 7d 20 7b 24 69 20  r {set i 0} {$i 
0a30: 3c 20 32 30 7d 20 7b 69 6e 63 72 20 69 7d 20 7b  < 20} {incr i} {
0a40: 0a 20 20 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  .  do_execsql_te
0a50: 73 74 20 63 61 63 68 65 2d 32 2e 32 2e 24 69 2e  st cache-2.2.$i.
0a60: 31 20 22 50 52 41 47 4d 41 20 6d 61 69 6e 2e 63  1 "PRAGMA main.c
0a70: 61 63 68 65 5f 73 69 7a 65 20 3d 20 24 69 22 0a  ache_size = $i".
0a80: 20 20 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73    do_execsql_tes
0a90: 74 20 63 61 63 68 65 2d 32 2e 32 2e 24 69 2e 32  t cache-2.2.$i.2
0aa0: 20 22 50 52 41 47 4d 41 20 6d 61 69 6e 2e 63 61   "PRAGMA main.ca
0ab0: 63 68 65 5f 73 69 7a 65 22 20 24 69 0a 20 20 64  che_size" $i.  d
0ac0: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 63  o_execsql_test c
0ad0: 61 63 68 65 2d 32 2e 32 2e 24 69 2e 33 20 22 53  ache-2.2.$i.3 "S
0ae0: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 22  ELECT * FROM t1"
0af0: 20 7b 78 20 79 7d 0a 20 20 64 6f 5f 65 78 65 63   {x y}.  do_exec
0b00: 73 71 6c 5f 74 65 73 74 20 63 61 63 68 65 2d 32  sql_test cache-2
0b10: 2e 32 2e 24 69 2e 34 20 22 50 52 41 47 4d 41 20  .2.$i.4 "PRAGMA 
0b20: 6d 61 69 6e 2e 63 61 63 68 65 5f 73 69 7a 65 22  main.cache_size"
0b30: 20 24 69 0a 7d 0a 0a 23 20 54 65 73 74 73 20 66   $i.}..# Tests f
0b40: 6f 72 20 63 61 63 68 65 5f 73 69 7a 65 20 3d 20  or cache_size = 
0b50: 31 2e 0a 23 0a 64 6f 5f 65 78 65 63 73 71 6c 5f  1..#.do_execsql_
0b60: 74 65 73 74 20 63 61 63 68 65 2d 32 2e 33 2e 31  test cache-2.3.1
0b70: 20 7b 0a 20 20 50 52 41 47 4d 41 20 63 61 63 68   {.  PRAGMA cach
0b80: 65 5f 73 69 7a 65 20 3d 20 31 3b 0a 20 20 42 45  e_size = 1;.  BE
0b90: 47 49 4e 3b 0a 20 20 20 20 49 4e 53 45 52 54 20  GIN;.    INSERT 
0ba0: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 31  INTO t1 VALUES(1
0bb0: 2c 20 32 29 3b 0a 20 20 20 20 50 52 41 47 4d 41  , 2);.    PRAGMA
0bc0: 20 6c 6f 63 6b 5f 73 74 61 74 75 73 3b 0a 7d 20   lock_status;.} 
0bd0: 7b 6d 61 69 6e 20 72 65 73 65 72 76 65 64 20 74  {main reserved t
0be0: 65 6d 70 20 63 6c 6f 73 65 64 7d 0a 64 6f 5f 74  emp closed}.do_t
0bf0: 65 73 74 20 63 61 63 68 65 2d 32 2e 33 2e 32 20  est cache-2.3.2 
0c00: 7b 20 70 61 67 65 72 5f 63 61 63 68 65 5f 73 69  { pager_cache_si
0c10: 7a 65 20 64 62 20 7d 20 32 0a 64 6f 5f 65 78 65  ze db } 2.do_exe
0c20: 63 73 71 6c 5f 74 65 73 74 20 63 61 63 68 65 2d  csql_test cache-
0c30: 32 2e 33 2e 33 20 7b 0a 20 20 20 20 49 4e 53 45  2.3.3 {.    INSE
0c40: 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45  RT INTO t2 VALUE
0c50: 53 28 31 2c 20 32 29 3b 0a 20 20 20 20 50 52 41  S(1, 2);.    PRA
0c60: 47 4d 41 20 6c 6f 63 6b 5f 73 74 61 74 75 73 3b  GMA lock_status;
0c70: 0a 7d 20 7b 6d 61 69 6e 20 65 78 63 6c 75 73 69  .} {main exclusi
0c80: 76 65 20 74 65 6d 70 20 63 6c 6f 73 65 64 7d 0a  ve temp closed}.
0c90: 64 6f 5f 74 65 73 74 20 63 61 63 68 65 2d 32 2e  do_test cache-2.
0ca0: 33 2e 34 20 7b 20 70 61 67 65 72 5f 63 61 63 68  3.4 { pager_cach
0cb0: 65 5f 73 69 7a 65 20 64 62 20 7d 20 32 0a 64 6f  e_size db } 2.do
0cc0: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 63 61  _execsql_test ca
0cd0: 63 68 65 2d 32 2e 33 2e 35 20 43 4f 4d 4d 49 54  che-2.3.5 COMMIT
0ce0: 0a 64 6f 5f 74 65 73 74 20 63 61 63 68 65 2d 32  .do_test cache-2
0cf0: 2e 33 2e 36 20 7b 20 70 61 67 65 72 5f 63 61 63  .3.6 { pager_cac
0d00: 68 65 5f 73 69 7a 65 20 64 62 20 7d 20 31 0a 0a  he_size db } 1..
0d10: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
0d20: 63 61 63 68 65 2d 32 2e 33 2e 37 20 7b 0a 20 20  cache-2.3.7 {.  
0d30: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31  SELECT * FROM t1
0d40: 20 55 4e 49 4f 4e 20 53 45 4c 45 43 54 20 2a 20   UNION SELECT * 
0d50: 46 52 4f 4d 20 74 32 3b 0a 7d 20 7b 31 20 32 20  FROM t2;.} {1 2 
0d60: 69 20 6a 20 78 20 79 7d 0a 64 6f 5f 74 65 73 74  i j x y}.do_test
0d70: 20 63 61 63 68 65 2d 32 2e 33 2e 38 20 7b 20 70   cache-2.3.8 { p
0d80: 61 67 65 72 5f 63 61 63 68 65 5f 73 69 7a 65 20  ager_cache_size 
0d90: 64 62 20 7d 20 31 0a 0a 23 20 54 65 73 74 73 20  db } 1..# Tests 
0da0: 66 6f 72 20 63 61 63 68 65 5f 73 69 7a 65 20 3d  for cache_size =
0db0: 20 30 2e 0a 23 0a 64 6f 5f 65 78 65 63 73 71 6c   0..#.do_execsql
0dc0: 5f 74 65 73 74 20 63 61 63 68 65 2d 32 2e 34 2e  _test cache-2.4.
0dd0: 31 20 7b 0a 20 20 50 52 41 47 4d 41 20 63 61 63  1 {.  PRAGMA cac
0de0: 68 65 5f 73 69 7a 65 20 3d 20 30 3b 0a 20 20 42  he_size = 0;.  B
0df0: 45 47 49 4e 3b 0a 20 20 20 20 49 4e 53 45 52 54  EGIN;.    INSERT
0e00: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
0e10: 31 2c 20 32 29 3b 0a 20 20 20 20 50 52 41 47 4d  1, 2);.    PRAGM
0e20: 41 20 6c 6f 63 6b 5f 73 74 61 74 75 73 3b 0a 7d  A lock_status;.}
0e30: 20 7b 6d 61 69 6e 20 72 65 73 65 72 76 65 64 20   {main reserved 
0e40: 74 65 6d 70 20 63 6c 6f 73 65 64 7d 0a 64 6f 5f  temp closed}.do_
0e50: 74 65 73 74 20 63 61 63 68 65 2d 32 2e 34 2e 32  test cache-2.4.2
0e60: 20 7b 20 70 61 67 65 72 5f 63 61 63 68 65 5f 73   { pager_cache_s
0e70: 69 7a 65 20 64 62 20 7d 20 32 0a 64 6f 5f 65 78  ize db } 2.do_ex
0e80: 65 63 73 71 6c 5f 74 65 73 74 20 63 61 63 68 65  ecsql_test cache
0e90: 2d 32 2e 34 2e 33 20 7b 0a 20 20 20 20 49 4e 53  -2.4.3 {.    INS
0ea0: 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55  ERT INTO t2 VALU
0eb0: 45 53 28 31 2c 20 32 29 3b 0a 20 20 20 20 50 52  ES(1, 2);.    PR
0ec0: 41 47 4d 41 20 6c 6f 63 6b 5f 73 74 61 74 75 73  AGMA lock_status
0ed0: 3b 0a 7d 20 7b 6d 61 69 6e 20 65 78 63 6c 75 73  ;.} {main exclus
0ee0: 69 76 65 20 74 65 6d 70 20 63 6c 6f 73 65 64 7d  ive temp closed}
0ef0: 0a 64 6f 5f 74 65 73 74 20 63 61 63 68 65 2d 32  .do_test cache-2
0f00: 2e 34 2e 34 20 7b 20 70 61 67 65 72 5f 63 61 63  .4.4 { pager_cac
0f10: 68 65 5f 73 69 7a 65 20 64 62 20 7d 20 32 0a 64  he_size db } 2.d
0f20: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 63  o_execsql_test c
0f30: 61 63 68 65 2d 32 2e 34 2e 35 20 43 4f 4d 4d 49  ache-2.4.5 COMMI
0f40: 54 0a 0a 64 6f 5f 74 65 73 74 20 63 61 63 68 65  T..do_test cache
0f50: 2d 32 2e 34 2e 36 20 7b 20 70 61 67 65 72 5f 63  -2.4.6 { pager_c
0f60: 61 63 68 65 5f 73 69 7a 65 20 64 62 20 7d 20 30  ache_size db } 0
0f70: 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74  .do_execsql_test
0f80: 20 63 61 63 68 65 2d 32 2e 34 2e 37 20 7b 0a 20   cache-2.4.7 {. 
0f90: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
0fa0: 31 20 55 4e 49 4f 4e 20 53 45 4c 45 43 54 20 2a  1 UNION SELECT *
0fb0: 20 46 52 4f 4d 20 74 32 3b 0a 7d 20 7b 31 20 32   FROM t2;.} {1 2
0fc0: 20 69 20 6a 20 78 20 79 7d 0a 64 6f 5f 74 65 73   i j x y}.do_tes
0fd0: 74 20 63 61 63 68 65 2d 32 2e 34 2e 38 20 7b 20  t cache-2.4.8 { 
0fe0: 70 61 67 65 72 5f 63 61 63 68 65 5f 73 69 7a 65  pager_cache_size
0ff0: 20 64 62 20 7d 20 30 0a 0a 73 71 6c 69 74 65 33   db } 0..sqlite3
1000: 5f 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74  _soft_heap_limit
1010: 20 24 63 6d 64 6c 69 6e 65 61 72 67 28 73 6f 66   $cmdlinearg(sof
1020: 74 2d 68 65 61 70 2d 6c 69 6d 69 74 29 0a 66 69  t-heap-limit).fi
1030: 6e 69 73 68 5f 74 65 73 74 0a                    nish_test.