/ Hex Artifact Content
Login

Artifact 4cbec6f202c91504bfc4717bfc2ffd6160316c4c:


0000: 23 20 32 30 30 38 20 4a 75 6e 65 20 31 38 0a 23  # 2008 June 18.#
0010: 0a 23 20 54 68 65 20 61 75 74 68 6f 72 20 64 69  .# The author di
0020: 73 63 6c 61 69 6d 73 20 63 6f 70 79 72 69 67 68  sclaims copyrigh
0030: 74 20 74 6f 20 74 68 69 73 20 73 6f 75 72 63 65  t to this source
0040: 20 63 6f 64 65 2e 20 20 49 6e 20 70 6c 61 63 65   code.  In place
0050: 20 6f 66 0a 23 20 61 20 6c 65 67 61 6c 20 6e 6f   of.# a legal no
0060: 74 69 63 65 2c 20 68 65 72 65 20 69 73 20 61 20  tice, here is a 
0070: 62 6c 65 73 73 69 6e 67 3a 0a 23 0a 23 20 20 20  blessing:.#.#   
0080: 20 4d 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64   May you do good
0090: 20 61 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 23   and not evil..#
00a0: 20 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64      May you find
00b0: 20 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72   forgiveness for
00c0: 20 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f   yourself and fo
00d0: 72 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 23 20  rgive others..# 
00e0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
00f0: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0100: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0110: 79 6f 75 20 67 69 76 65 2e 0a 23 0a 23 2a 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 0a 23 0a 23 20 54 68 69 73 20 66 69  ****.#.# This fi
0170: 6c 65 20 63 6f 6e 74 61 69 6e 73 20 74 65 73 74  le contains test
0180: 73 20 6f 66 20 74 68 65 20 6d 65 6d 6f 72 79 20  s of the memory 
0190: 61 6c 6c 6f 63 61 74 69 6f 6e 20 73 75 62 73 79  allocation subsy
01a0: 73 74 65 6d 0a 23 0a 0a 73 65 74 20 74 65 73 74  stem.#..set test
01b0: 64 69 72 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d  dir [file dirnam
01c0: 65 20 24 61 72 67 76 30 5d 0a 73 6f 75 72 63 65  e $argv0].source
01d0: 20 24 74 65 73 74 64 69 72 2f 74 65 73 74 65 72   $testdir/tester
01e0: 2e 74 63 6c 0a 73 71 6c 69 74 65 33 5f 72 65 73  .tcl.sqlite3_res
01f0: 65 74 5f 61 75 74 6f 5f 65 78 74 65 6e 73 69 6f  et_auto_extensio
0200: 6e 0a 0a 23 20 54 68 69 73 20 74 65 73 74 20 61  n..# This test a
0210: 73 73 75 6d 65 73 20 74 68 61 74 20 6e 6f 20 70  ssumes that no p
0220: 61 67 65 2d 63 61 63 68 65 20 6f 72 20 73 63 72  age-cache or scr
0230: 61 74 63 68 20 62 75 66 66 65 72 73 20 61 72 65  atch buffers are
0240: 20 69 6e 73 74 61 6c 6c 65 64 0a 23 20 62 79 20   installed.# by 
0250: 64 65 66 61 75 6c 74 20 77 68 65 6e 20 61 20 6e  default when a n
0260: 65 77 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  ew database conn
0270: 65 63 74 69 6f 6e 20 69 73 20 6f 70 65 6e 65 64  ection is opened
0280: 2e 20 41 73 20 61 20 72 65 73 75 6c 74 2c 20 69  . As a result, i
0290: 74 0a 23 20 77 69 6c 6c 20 6e 6f 74 20 77 6f 72  t.# will not wor
02a0: 6b 20 77 69 74 68 20 74 68 65 20 22 6d 65 6d 73  k with the "mems
02b0: 75 62 73 79 73 31 22 20 70 65 72 6d 75 74 61 74  ubsys1" permutat
02c0: 69 6f 6e 2e 0a 23 0a 69 66 20 7b 5b 70 65 72 6d  ion..#.if {[perm
02d0: 75 74 61 74 69 6f 6e 5d 20 3d 3d 20 22 6d 65 6d  utation] == "mem
02e0: 73 75 62 73 79 73 31 22 7d 20 7b 0a 20 20 66 69  subsys1"} {.  fi
02f0: 6e 69 73 68 5f 74 65 73 74 0a 20 20 72 65 74 75  nish_test.  retu
0300: 72 6e 0a 7d 0a 0a 23 20 54 68 69 73 20 70 72 6f  rn.}..# This pro
0310: 63 65 64 75 72 65 20 63 6f 6e 73 74 72 75 63 74  cedure construct
0320: 73 20 61 20 6e 65 77 20 64 61 74 61 62 61 73 65  s a new database
0330: 20 69 6e 20 74 65 73 74 2e 64 62 2e 20 20 49 74   in test.db.  It
0340: 20 66 69 6c 6c 73 0a 23 20 74 68 69 73 20 64 61   fills.# this da
0350: 74 61 62 61 73 65 20 77 69 74 68 20 6d 61 6e 79  tabase with many
0360: 20 73 6d 61 6c 6c 20 72 65 63 6f 72 64 73 20 28   small records (
0370: 65 6e 6f 75 67 68 20 74 6f 20 66 6f 72 63 65 20  enough to force 
0380: 6d 75 6c 74 69 70 6c 65 0a 23 20 72 65 62 61 6c  multiple.# rebal
0390: 61 6e 63 65 20 6f 70 65 72 61 74 69 6f 6e 73 20  ance operations 
03a0: 69 6e 20 74 68 65 20 62 74 72 65 65 2d 6c 61 79  in the btree-lay
03b0: 65 72 20 61 6e 64 20 74 6f 20 72 65 71 75 69 72  er and to requir
03c0: 65 20 61 20 6c 61 72 67 65 0a 23 20 70 61 67 65  e a large.# page
03d0: 20 63 61 63 68 65 29 2c 20 76 65 72 69 66 69 65   cache), verifie
03e0: 73 20 63 6f 72 72 65 63 74 20 72 65 73 75 6c 74  s correct result
03f0: 73 2c 20 74 68 65 6e 20 72 65 74 75 72 6e 73 2e  s, then returns.
0400: 0a 23 0a 70 72 6f 63 20 62 75 69 6c 64 5f 74 65  .#.proc build_te
0410: 73 74 5f 64 62 20 7b 74 65 73 74 6e 61 6d 65 20  st_db {testname 
0420: 70 72 61 67 6d 61 73 7d 20 7b 0a 20 20 63 61 74  pragmas} {.  cat
0430: 63 68 20 7b 64 62 20 63 6c 6f 73 65 7d 0a 20 20  ch {db close}.  
0440: 66 69 6c 65 20 64 65 6c 65 74 65 20 2d 66 6f 72  file delete -for
0450: 63 65 20 74 65 73 74 2e 64 62 20 74 65 73 74 2e  ce test.db test.
0460: 64 62 2d 6a 6f 75 72 6e 61 6c 0a 20 20 73 71 6c  db-journal.  sql
0470: 69 74 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a  ite3 db test.db.
0480: 20 20 73 71 6c 69 74 65 33 5f 64 62 5f 63 6f 6e    sqlite3_db_con
0490: 66 69 67 5f 6c 6f 6f 6b 61 73 69 64 65 20 64 62  fig_lookaside db
04a0: 20 30 20 30 20 30 0a 20 20 64 62 20 65 76 61 6c   0 0 0.  db eval
04b0: 20 24 70 72 61 67 6d 61 73 0a 20 20 64 62 20 65   $pragmas.  db e
04c0: 76 61 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45  val {.    CREATE
04d0: 20 54 41 42 4c 45 20 74 31 28 78 2c 20 79 29 3b   TABLE t1(x, y);
04e0: 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  .    CREATE TABL
04f0: 45 20 74 32 28 61 2c 20 62 29 3b 0a 20 20 20 20  E t2(a, b);.    
0500: 43 52 45 41 54 45 20 49 4e 44 45 58 20 69 31 20  CREATE INDEX i1 
0510: 4f 4e 20 74 31 28 78 2c 79 29 3b 0a 20 20 20 20  ON t1(x,y);.    
0520: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56  INSERT INTO t1 V
0530: 41 4c 55 45 53 28 31 2c 20 31 30 30 29 3b 0a 20  ALUES(1, 100);. 
0540: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
0550: 31 20 56 41 4c 55 45 53 28 32 2c 20 32 30 30 29  1 VALUES(2, 200)
0560: 3b 0a 20 20 7d 0a 20 20 66 6f 72 20 7b 73 65 74  ;.  }.  for {set
0570: 20 69 20 32 7d 20 7b 24 69 3c 35 30 30 30 7d 20   i 2} {$i<5000} 
0580: 7b 69 6e 63 72 20 69 20 24 69 7d 20 7b 0a 20 20  {incr i $i} {.  
0590: 20 20 64 62 20 65 76 61 6c 20 7b 49 4e 53 45 52    db eval {INSER
05a0: 54 20 49 4e 54 4f 20 74 32 20 53 45 4c 45 43 54  T INTO t2 SELECT
05b0: 20 2a 20 46 52 4f 4d 20 74 31 7d 0a 20 20 20 20   * FROM t1}.    
05c0: 64 62 20 65 76 61 6c 20 7b 49 4e 53 45 52 54 20  db eval {INSERT 
05d0: 49 4e 54 4f 20 74 31 20 53 45 4c 45 43 54 20 61  INTO t1 SELECT a
05e0: 2b 24 69 2c 20 61 2b 62 2a 31 30 30 20 46 52 4f  +$i, a+b*100 FRO
05f0: 4d 20 74 32 7d 0a 20 20 20 20 64 62 20 65 76 61  M t2}.    db eva
0600: 6c 20 7b 44 45 4c 45 54 45 20 46 52 4f 4d 20 74  l {DELETE FROM t
0610: 32 7d 0a 20 20 7d 0a 20 20 64 6f 5f 74 65 73 74  2}.  }.  do_test
0620: 20 24 74 65 73 74 6e 61 6d 65 2e 31 20 7b 0a 20   $testname.1 {. 
0630: 20 20 20 64 62 20 65 76 61 6c 20 7b 53 45 4c 45     db eval {SELE
0640: 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d  CT count(*) FROM
0650: 20 74 31 7d 0a 20 20 7d 20 38 31 39 32 0a 20 20   t1}.  } 8192.  
0660: 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 20  integrity_check 
0670: 24 74 65 73 74 6e 61 6d 65 2e 32 0a 7d 0a 0a 23  $testname.2.}..#
0680: 20 52 65 73 65 74 20 61 6c 6c 20 6f 66 20 74 68   Reset all of th
0690: 65 20 68 69 67 68 77 61 74 65 72 20 6d 61 72 6b  e highwater mark
06a0: 73 2e 0a 23 0a 70 72 6f 63 20 72 65 73 65 74 5f  s..#.proc reset_
06b0: 68 69 67 68 77 61 74 65 72 5f 6d 61 72 6b 73 20  highwater_marks 
06c0: 7b 7d 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 73  {} {.  sqlite3_s
06d0: 74 61 74 75 73 20 53 51 4c 49 54 45 5f 53 54 41  tatus SQLITE_STA
06e0: 54 55 53 5f 4d 45 4d 4f 52 59 5f 55 53 45 44 20  TUS_MEMORY_USED 
06f0: 31 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 61 74  1.  sqlite3_stat
0700: 75 73 20 53 51 4c 49 54 45 5f 53 54 41 54 55 53  us SQLITE_STATUS
0710: 5f 4d 41 4c 4c 4f 43 5f 53 49 5a 45 20 31 0a 20  _MALLOC_SIZE 1. 
0720: 20 73 71 6c 69 74 65 33 5f 73 74 61 74 75 73 20   sqlite3_status 
0730: 53 51 4c 49 54 45 5f 53 54 41 54 55 53 5f 50 41  SQLITE_STATUS_PA
0740: 47 45 43 41 43 48 45 5f 55 53 45 44 20 31 0a 20  GECACHE_USED 1. 
0750: 20 73 71 6c 69 74 65 33 5f 73 74 61 74 75 73 20   sqlite3_status 
0760: 53 51 4c 49 54 45 5f 53 54 41 54 55 53 5f 50 41  SQLITE_STATUS_PA
0770: 47 45 43 41 43 48 45 5f 4f 56 45 52 46 4c 4f 57  GECACHE_OVERFLOW
0780: 20 31 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 61   1.  sqlite3_sta
0790: 74 75 73 20 53 51 4c 49 54 45 5f 53 54 41 54 55  tus SQLITE_STATU
07a0: 53 5f 50 41 47 45 43 41 43 48 45 5f 53 49 5a 45  S_PAGECACHE_SIZE
07b0: 20 31 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 61   1.  sqlite3_sta
07c0: 74 75 73 20 53 51 4c 49 54 45 5f 53 54 41 54 55  tus SQLITE_STATU
07d0: 53 5f 53 43 52 41 54 43 48 5f 55 53 45 44 20 31  S_SCRATCH_USED 1
07e0: 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 61 74 75  .  sqlite3_statu
07f0: 73 20 53 51 4c 49 54 45 5f 53 54 41 54 55 53 5f  s SQLITE_STATUS_
0800: 53 43 52 41 54 43 48 5f 4f 56 45 52 46 4c 4f 57  SCRATCH_OVERFLOW
0810: 20 31 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 61   1.  sqlite3_sta
0820: 74 75 73 20 53 51 4c 49 54 45 5f 53 54 41 54 55  tus SQLITE_STATU
0830: 53 5f 53 43 52 41 54 43 48 5f 53 49 5a 45 20 31  S_SCRATCH_SIZE 1
0840: 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 61 74 75  .  sqlite3_statu
0850: 73 20 53 51 4c 49 54 45 5f 53 54 41 54 55 53 5f  s SQLITE_STATUS_
0860: 50 41 52 53 45 52 5f 53 54 41 43 4b 20 31 0a 7d  PARSER_STACK 1.}
0870: 0a 0a 73 65 74 20 78 74 72 61 5f 73 69 7a 65 20  ..set xtra_size 
0880: 32 35 36 0a 0a 23 20 54 65 73 74 20 31 3a 20 20  256..# Test 1:  
0890: 42 6f 74 68 20 50 41 47 45 43 41 43 48 45 20 61  Both PAGECACHE a
08a0: 6e 64 20 53 43 52 41 54 43 48 20 61 72 65 20 73  nd SCRATCH are s
08b0: 68 75 74 20 64 6f 77 6e 2e 0a 23 0a 64 62 20 63  hut down..#.db c
08c0: 6c 6f 73 65 0a 73 71 6c 69 74 65 33 5f 73 68 75  lose.sqlite3_shu
08d0: 74 64 6f 77 6e 0a 73 71 6c 69 74 65 33 5f 63 6f  tdown.sqlite3_co
08e0: 6e 66 69 67 5f 6c 6f 6f 6b 61 73 69 64 65 20 30  nfig_lookaside 0
08f0: 20 30 0a 73 71 6c 69 74 65 33 5f 69 6e 69 74 69   0.sqlite3_initi
0900: 61 6c 69 7a 65 0a 72 65 73 65 74 5f 68 69 67 68  alize.reset_high
0910: 77 61 74 65 72 5f 6d 61 72 6b 73 0a 62 75 69 6c  water_marks.buil
0920: 64 5f 74 65 73 74 5f 64 62 20 6d 65 6d 73 75 62  d_test_db memsub
0930: 73 79 73 31 2d 31 20 7b 50 52 41 47 4d 41 20 70  sys1-1 {PRAGMA p
0940: 61 67 65 5f 73 69 7a 65 3d 31 30 32 34 7d 0a 64  age_size=1024}.d
0950: 6f 5f 74 65 73 74 20 6d 65 6d 73 75 62 73 79 73  o_test memsubsys
0960: 31 2d 31 2e 33 20 7b 0a 20 20 73 65 74 20 70 67  1-1.3 {.  set pg
0970: 5f 75 73 65 64 20 5b 6c 69 6e 64 65 78 20 5b 73  _used [lindex [s
0980: 71 6c 69 74 65 33 5f 73 74 61 74 75 73 20 53 51  qlite3_status SQ
0990: 4c 49 54 45 5f 53 54 41 54 55 53 5f 50 41 47 45  LITE_STATUS_PAGE
09a0: 43 41 43 48 45 5f 55 53 45 44 20 30 5d 20 32 5d  CACHE_USED 0] 2]
09b0: 0a 7d 20 30 0a 64 6f 5f 74 65 73 74 20 6d 65 6d  .} 0.do_test mem
09c0: 73 75 62 73 79 73 31 2d 31 2e 34 20 7b 0a 20 20  subsys1-1.4 {.  
09d0: 73 65 74 20 73 5f 75 73 65 64 20 5b 6c 69 6e 64  set s_used [lind
09e0: 65 78 20 5b 73 71 6c 69 74 65 33 5f 73 74 61 74  ex [sqlite3_stat
09f0: 75 73 20 53 51 4c 49 54 45 5f 53 54 41 54 55 53  us SQLITE_STATUS
0a00: 5f 53 43 52 41 54 43 48 5f 55 53 45 44 20 30 5d  _SCRATCH_USED 0]
0a10: 20 32 5d 0a 7d 20 30 0a 73 65 74 20 6d 61 78 5f   2].} 0.set max_
0a20: 70 61 67 65 63 61 63 68 65 20 5b 6c 69 6e 64 65  pagecache [linde
0a30: 78 20 5b 73 71 6c 69 74 65 33 5f 73 74 61 74 75  x [sqlite3_statu
0a40: 73 20 53 51 4c 49 54 45 5f 53 54 41 54 55 53 5f  s SQLITE_STATUS_
0a50: 50 41 47 45 43 41 43 48 45 5f 4f 56 45 52 46 4c  PAGECACHE_OVERFL
0a60: 4f 57 20 30 5d 20 32 5d 0a 23 73 68 6f 77 5f 6d  OW 0] 2].#show_m
0a70: 65 6d 73 74 61 74 73 0a 0a 23 20 54 65 73 74 20  emstats..# Test 
0a80: 32 3a 20 20 41 63 74 69 76 61 74 65 20 50 41 47  2:  Activate PAG
0a90: 45 43 41 43 48 45 20 77 69 74 68 20 32 30 20 70  ECACHE with 20 p
0aa0: 61 67 65 73 0a 23 0a 64 62 20 63 6c 6f 73 65 0a  ages.#.db close.
0ab0: 73 71 6c 69 74 65 33 5f 73 68 75 74 64 6f 77 6e  sqlite3_shutdown
0ac0: 0a 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 5f  .sqlite3_config_
0ad0: 70 61 67 65 63 61 63 68 65 20 5b 65 78 70 72 20  pagecache [expr 
0ae0: 31 30 32 34 2b 24 78 74 72 61 5f 73 69 7a 65 5d  1024+$xtra_size]
0af0: 20 32 30 0a 73 71 6c 69 74 65 33 5f 69 6e 69 74   20.sqlite3_init
0b00: 69 61 6c 69 7a 65 0a 72 65 73 65 74 5f 68 69 67  ialize.reset_hig
0b10: 68 77 61 74 65 72 5f 6d 61 72 6b 73 0a 62 75 69  hwater_marks.bui
0b20: 6c 64 5f 74 65 73 74 5f 64 62 20 6d 65 6d 73 75  ld_test_db memsu
0b30: 62 73 79 73 31 2d 32 20 7b 50 52 41 47 4d 41 20  bsys1-2 {PRAGMA 
0b40: 70 61 67 65 5f 73 69 7a 65 3d 31 30 32 34 7d 0a  page_size=1024}.
0b50: 23 73 68 6f 77 5f 6d 65 6d 73 74 61 74 73 0a 64  #show_memstats.d
0b60: 6f 5f 74 65 73 74 20 6d 65 6d 73 75 62 73 79 73  o_test memsubsys
0b70: 31 2d 32 2e 33 20 7b 0a 20 20 73 65 74 20 70 67  1-2.3 {.  set pg
0b80: 5f 6f 76 66 6c 20 5b 6c 69 6e 64 65 78 20 5b 73  _ovfl [lindex [s
0b90: 71 6c 69 74 65 33 5f 73 74 61 74 75 73 20 53 51  qlite3_status SQ
0ba0: 4c 49 54 45 5f 53 54 41 54 55 53 5f 50 41 47 45  LITE_STATUS_PAGE
0bb0: 43 41 43 48 45 5f 4f 56 45 52 46 4c 4f 57 20 30  CACHE_OVERFLOW 0
0bc0: 5d 20 32 5d 0a 7d 20 5b 65 78 70 72 20 28 24 41  ] 2].} [expr ($A
0bd0: 55 54 4f 56 41 43 55 55 4d 2b 24 54 45 4d 50 5f  UTOVACUUM+$TEMP_
0be0: 53 54 4f 52 45 3e 3d 32 29 2a 31 30 32 34 5d 0a  STORE>=2)*1024].
0bf0: 64 6f 5f 74 65 73 74 20 6d 65 6d 73 75 62 73 79  do_test memsubsy
0c00: 73 31 2d 32 2e 34 20 7b 0a 20 20 73 65 74 20 70  s1-2.4 {.  set p
0c10: 67 5f 75 73 65 64 20 5b 6c 69 6e 64 65 78 20 5b  g_used [lindex [
0c20: 73 71 6c 69 74 65 33 5f 73 74 61 74 75 73 20 53  sqlite3_status S
0c30: 51 4c 49 54 45 5f 53 54 41 54 55 53 5f 50 41 47  QLITE_STATUS_PAG
0c40: 45 43 41 43 48 45 5f 55 53 45 44 20 30 5d 20 32  ECACHE_USED 0] 2
0c50: 5d 0a 7d 20 32 30 0a 64 6f 5f 74 65 73 74 20 6d  ].} 20.do_test m
0c60: 65 6d 73 75 62 73 79 73 31 2d 32 2e 35 20 7b 0a  emsubsys1-2.5 {.
0c70: 20 20 73 65 74 20 73 5f 75 73 65 64 20 5b 6c 69    set s_used [li
0c80: 6e 64 65 78 20 5b 73 71 6c 69 74 65 33 5f 73 74  ndex [sqlite3_st
0c90: 61 74 75 73 20 53 51 4c 49 54 45 5f 53 54 41 54  atus SQLITE_STAT
0ca0: 55 53 5f 53 43 52 41 54 43 48 5f 55 53 45 44 20  US_SCRATCH_USED 
0cb0: 30 5d 20 32 5d 0a 7d 20 30 0a 0a 23 20 54 65 73  0] 2].} 0..# Tes
0cc0: 74 20 33 3a 20 20 41 63 74 69 76 61 74 65 20 50  t 3:  Activate P
0cd0: 41 47 45 43 41 43 48 45 20 77 69 74 68 20 32 30  AGECACHE with 20
0ce0: 20 70 61 67 65 73 20 62 75 74 20 75 73 65 20 74   pages but use t
0cf0: 68 65 20 77 72 6f 6e 67 20 70 61 67 65 20 73 69  he wrong page si
0d00: 7a 65 0a 23 20 73 6f 20 74 68 61 74 20 50 41 47  ze.# so that PAG
0d10: 45 43 41 43 48 45 20 69 73 20 6e 6f 74 20 75 73  ECACHE is not us
0d20: 65 64 2e 0a 23 0a 64 62 20 63 6c 6f 73 65 0a 73  ed..#.db close.s
0d30: 71 6c 69 74 65 33 5f 73 68 75 74 64 6f 77 6e 0a  qlite3_shutdown.
0d40: 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 5f 70  sqlite3_config_p
0d50: 61 67 65 63 61 63 68 65 20 5b 65 78 70 72 20 35  agecache [expr 5
0d60: 31 32 2b 24 78 74 72 61 5f 73 69 7a 65 5d 20 32  12+$xtra_size] 2
0d70: 30 0a 73 71 6c 69 74 65 33 5f 69 6e 69 74 69 61  0.sqlite3_initia
0d80: 6c 69 7a 65 0a 72 65 73 65 74 5f 68 69 67 68 77  lize.reset_highw
0d90: 61 74 65 72 5f 6d 61 72 6b 73 0a 62 75 69 6c 64  ater_marks.build
0da0: 5f 74 65 73 74 5f 64 62 20 6d 65 6d 73 75 62 73  _test_db memsubs
0db0: 79 73 31 2d 33 2e 31 20 7b 50 52 41 47 4d 41 20  ys1-3.1 {PRAGMA 
0dc0: 70 61 67 65 5f 73 69 7a 65 3d 31 30 32 34 7d 0a  page_size=1024}.
0dd0: 23 73 68 6f 77 5f 6d 65 6d 73 74 61 74 73 0a 64  #show_memstats.d
0de0: 6f 5f 74 65 73 74 20 6d 65 6d 73 75 62 73 79 73  o_test memsubsys
0df0: 31 2d 33 2e 31 2e 33 20 7b 0a 20 20 73 65 74 20  1-3.1.3 {.  set 
0e00: 70 67 5f 75 73 65 64 20 5b 6c 69 6e 64 65 78 20  pg_used [lindex 
0e10: 5b 73 71 6c 69 74 65 33 5f 73 74 61 74 75 73 20  [sqlite3_status 
0e20: 53 51 4c 49 54 45 5f 53 54 41 54 55 53 5f 50 41  SQLITE_STATUS_PA
0e30: 47 45 43 41 43 48 45 5f 55 53 45 44 20 30 5d 20  GECACHE_USED 0] 
0e40: 32 5d 0a 7d 20 30 0a 64 6f 5f 74 65 73 74 20 6d  2].} 0.do_test m
0e50: 65 6d 73 75 62 73 79 73 31 2d 33 2e 31 2e 34 20  emsubsys1-3.1.4 
0e60: 7b 0a 20 20 73 65 74 20 6f 76 65 72 66 6c 6f 77  {.  set overflow
0e70: 20 5b 6c 69 6e 64 65 78 20 5b 73 71 6c 69 74 65   [lindex [sqlite
0e80: 33 5f 73 74 61 74 75 73 20 53 51 4c 49 54 45 5f  3_status SQLITE_
0e90: 53 54 41 54 55 53 5f 50 41 47 45 43 41 43 48 45  STATUS_PAGECACHE
0ea0: 5f 4f 56 45 52 46 4c 4f 57 20 30 5d 20 32 5d 0a  _OVERFLOW 0] 2].
0eb0: 7d 20 24 6d 61 78 5f 70 61 67 65 63 61 63 68 65  } $max_pagecache
0ec0: 0a 64 6f 5f 74 65 73 74 20 6d 65 6d 73 75 62 73  .do_test memsubs
0ed0: 79 73 31 2d 33 2e 31 2e 35 20 7b 0a 20 20 73 65  ys1-3.1.5 {.  se
0ee0: 74 20 73 5f 75 73 65 64 20 5b 6c 69 6e 64 65 78  t s_used [lindex
0ef0: 20 5b 73 71 6c 69 74 65 33 5f 73 74 61 74 75 73   [sqlite3_status
0f00: 20 53 51 4c 49 54 45 5f 53 54 41 54 55 53 5f 53   SQLITE_STATUS_S
0f10: 43 52 41 54 43 48 5f 55 53 45 44 20 30 5d 20 32  CRATCH_USED 0] 2
0f20: 5d 0a 7d 20 30 0a 64 62 20 63 6c 6f 73 65 0a 73  ].} 0.db close.s
0f30: 71 6c 69 74 65 33 5f 73 68 75 74 64 6f 77 6e 0a  qlite3_shutdown.
0f40: 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 5f 70  sqlite3_config_p
0f50: 61 67 65 63 61 63 68 65 20 5b 65 78 70 72 20 32  agecache [expr 2
0f60: 30 34 38 2b 24 78 74 72 61 5f 73 69 7a 65 5d 20  048+$xtra_size] 
0f70: 32 30 0a 73 71 6c 69 74 65 33 5f 69 6e 69 74 69  20.sqlite3_initi
0f80: 61 6c 69 7a 65 0a 72 65 73 65 74 5f 68 69 67 68  alize.reset_high
0f90: 77 61 74 65 72 5f 6d 61 72 6b 73 0a 62 75 69 6c  water_marks.buil
0fa0: 64 5f 74 65 73 74 5f 64 62 20 6d 65 6d 73 75 62  d_test_db memsub
0fb0: 73 79 73 31 2d 33 2e 32 20 7b 50 52 41 47 4d 41  sys1-3.2 {PRAGMA
0fc0: 20 70 61 67 65 5f 73 69 7a 65 3d 32 30 34 38 7d   page_size=2048}
0fd0: 0a 23 73 68 6f 77 5f 6d 65 6d 73 74 61 74 73 0a  .#show_memstats.
0fe0: 64 6f 5f 74 65 73 74 20 6d 65 6d 73 75 62 73 79  do_test memsubsy
0ff0: 73 31 2d 33 2e 32 2e 33 20 7b 0a 20 20 64 62 20  s1-3.2.3 {.  db 
1000: 65 76 61 6c 20 7b 50 52 41 47 4d 41 20 70 61 67  eval {PRAGMA pag
1010: 65 5f 73 69 7a 65 7d 0a 7d 20 32 30 34 38 0a 64  e_size}.} 2048.d
1020: 6f 5f 74 65 73 74 20 6d 65 6d 73 75 62 73 79 73  o_test memsubsys
1030: 31 2d 33 2e 32 2e 34 20 7b 0a 20 20 73 65 74 20  1-3.2.4 {.  set 
1040: 70 67 5f 75 73 65 64 20 5b 6c 69 6e 64 65 78 20  pg_used [lindex 
1050: 5b 73 71 6c 69 74 65 33 5f 73 74 61 74 75 73 20  [sqlite3_status 
1060: 53 51 4c 49 54 45 5f 53 54 41 54 55 53 5f 50 41  SQLITE_STATUS_PA
1070: 47 45 43 41 43 48 45 5f 55 53 45 44 20 30 5d 20  GECACHE_USED 0] 
1080: 32 5d 0a 7d 20 32 30 0a 64 6f 5f 74 65 73 74 20  2].} 20.do_test 
1090: 6d 65 6d 73 75 62 73 79 73 31 2d 33 2e 32 2e 35  memsubsys1-3.2.5
10a0: 20 7b 0a 20 20 73 65 74 20 73 5f 75 73 65 64 20   {.  set s_used 
10b0: 5b 6c 69 6e 64 65 78 20 5b 73 71 6c 69 74 65 33  [lindex [sqlite3
10c0: 5f 73 74 61 74 75 73 20 53 51 4c 49 54 45 5f 53  _status SQLITE_S
10d0: 54 41 54 55 53 5f 53 43 52 41 54 43 48 5f 55 53  TATUS_SCRATCH_US
10e0: 45 44 20 30 5d 20 32 5d 0a 7d 20 30 0a 0a 23 20  ED 0] 2].} 0..# 
10f0: 54 65 73 74 20 34 3a 20 20 41 63 74 69 76 61 74  Test 4:  Activat
1100: 65 20 62 6f 74 68 20 50 41 47 45 43 41 43 48 45  e both PAGECACHE
1110: 20 61 6e 64 20 53 43 52 41 54 43 48 2e 0a 23 0a   and SCRATCH..#.
1120: 64 62 20 63 6c 6f 73 65 0a 73 71 6c 69 74 65 33  db close.sqlite3
1130: 5f 73 68 75 74 64 6f 77 6e 0a 73 71 6c 69 74 65  _shutdown.sqlite
1140: 33 5f 63 6f 6e 66 69 67 5f 70 61 67 65 63 61 63  3_config_pagecac
1150: 68 65 20 5b 65 78 70 72 20 31 30 32 34 2b 24 78  he [expr 1024+$x
1160: 74 72 61 5f 73 69 7a 65 5d 20 35 30 0a 73 71 6c  tra_size] 50.sql
1170: 69 74 65 33 5f 63 6f 6e 66 69 67 5f 73 63 72 61  ite3_config_scra
1180: 74 63 68 20 36 30 30 30 20 32 0a 73 71 6c 69 74  tch 6000 2.sqlit
1190: 65 33 5f 69 6e 69 74 69 61 6c 69 7a 65 0a 72 65  e3_initialize.re
11a0: 73 65 74 5f 68 69 67 68 77 61 74 65 72 5f 6d 61  set_highwater_ma
11b0: 72 6b 73 0a 62 75 69 6c 64 5f 74 65 73 74 5f 64  rks.build_test_d
11c0: 62 20 6d 65 6d 73 75 62 73 79 73 31 2d 34 20 7b  b memsubsys1-4 {
11d0: 50 52 41 47 4d 41 20 70 61 67 65 5f 73 69 7a 65  PRAGMA page_size
11e0: 3d 31 30 32 34 7d 0a 23 73 68 6f 77 5f 6d 65 6d  =1024}.#show_mem
11f0: 73 74 61 74 73 0a 64 6f 5f 74 65 73 74 20 6d 65  stats.do_test me
1200: 6d 73 75 62 73 79 73 31 2d 34 2e 33 20 7b 0a 20  msubsys1-4.3 {. 
1210: 20 73 65 74 20 70 67 5f 75 73 65 64 20 5b 6c 69   set pg_used [li
1220: 6e 64 65 78 20 5b 73 71 6c 69 74 65 33 5f 73 74  ndex [sqlite3_st
1230: 61 74 75 73 20 53 51 4c 49 54 45 5f 53 54 41 54  atus SQLITE_STAT
1240: 55 53 5f 50 41 47 45 43 41 43 48 45 5f 55 53 45  US_PAGECACHE_USE
1250: 44 20 30 5d 20 32 5d 0a 20 20 65 78 70 72 20 7b  D 0] 2].  expr {
1260: 24 70 67 5f 75 73 65 64 3e 3d 34 35 20 26 26 20  $pg_used>=45 && 
1270: 24 70 67 5f 75 73 65 64 3c 3d 35 30 7d 0a 7d 20  $pg_used<=50}.} 
1280: 31 0a 64 6f 5f 74 65 73 74 20 6d 65 6d 73 75 62  1.do_test memsub
1290: 73 79 73 31 2d 34 2e 34 20 7b 0a 20 20 73 65 74  sys1-4.4 {.  set
12a0: 20 70 67 5f 6f 76 66 6c 20 5b 6c 69 6e 64 65 78   pg_ovfl [lindex
12b0: 20 5b 73 71 6c 69 74 65 33 5f 73 74 61 74 75 73   [sqlite3_status
12c0: 20 53 51 4c 49 54 45 5f 53 54 41 54 55 53 5f 50   SQLITE_STATUS_P
12d0: 41 47 45 43 41 43 48 45 5f 4f 56 45 52 46 4c 4f  AGECACHE_OVERFLO
12e0: 57 20 30 5d 20 32 5d 0a 7d 20 30 0a 64 6f 5f 74  W 0] 2].} 0.do_t
12f0: 65 73 74 20 6d 65 6d 73 75 62 73 79 73 31 2d 34  est memsubsys1-4
1300: 2e 35 20 7b 0a 20 20 73 65 74 20 6d 61 78 72 65  .5 {.  set maxre
1310: 71 20 5b 6c 69 6e 64 65 78 20 5b 73 71 6c 69 74  q [lindex [sqlit
1320: 65 33 5f 73 74 61 74 75 73 20 53 51 4c 49 54 45  e3_status SQLITE
1330: 5f 53 54 41 54 55 53 5f 4d 41 4c 4c 4f 43 5f 53  _STATUS_MALLOC_S
1340: 49 5a 45 20 30 5d 20 32 5d 0a 20 20 65 78 70 72  IZE 0] 2].  expr
1350: 20 7b 24 6d 61 78 72 65 71 3c 37 30 30 30 7d 0a   {$maxreq<7000}.
1360: 7d 20 31 0a 64 6f 5f 74 65 73 74 20 6d 65 6d 73  } 1.do_test mems
1370: 75 62 73 79 73 31 2d 34 2e 36 20 7b 0a 20 20 73  ubsys1-4.6 {.  s
1380: 65 74 20 73 5f 75 73 65 64 20 5b 6c 69 6e 64 65  et s_used [linde
1390: 78 20 5b 73 71 6c 69 74 65 33 5f 73 74 61 74 75  x [sqlite3_statu
13a0: 73 20 53 51 4c 49 54 45 5f 53 54 41 54 55 53 5f  s SQLITE_STATUS_
13b0: 53 43 52 41 54 43 48 5f 55 53 45 44 20 30 5d 20  SCRATCH_USED 0] 
13c0: 32 5d 0a 7d 20 31 0a 0a 23 20 54 65 73 74 20 35  2].} 1..# Test 5
13d0: 3a 20 20 41 63 74 69 76 61 74 65 20 62 6f 74 68  :  Activate both
13e0: 20 50 41 47 45 43 41 43 48 45 20 61 6e 64 20 53   PAGECACHE and S
13f0: 43 52 41 54 43 48 2e 20 20 42 75 74 20 6d 61 6b  CRATCH.  But mak
1400: 65 20 74 68 65 20 70 61 67 65 20 73 69 7a 65 0a  e the page size.
1410: 23 20 73 75 63 68 20 74 68 61 74 20 74 68 65 20  # such that the 
1420: 53 43 52 41 54 43 48 20 61 6c 6c 6f 63 61 74 69  SCRATCH allocati
1430: 6f 6e 73 20 61 72 65 20 74 6f 6f 20 73 6d 61 6c  ons are too smal
1440: 6c 2e 0a 23 0a 64 62 20 63 6c 6f 73 65 0a 73 71  l..#.db close.sq
1450: 6c 69 74 65 33 5f 73 68 75 74 64 6f 77 6e 0a 73  lite3_shutdown.s
1460: 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 5f 70 61  qlite3_config_pa
1470: 67 65 63 61 63 68 65 20 5b 65 78 70 72 20 34 30  gecache [expr 40
1480: 39 36 2b 24 78 74 72 61 5f 73 69 7a 65 5d 20 32  96+$xtra_size] 2
1490: 34 0a 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67  4.sqlite3_config
14a0: 5f 73 63 72 61 74 63 68 20 36 30 30 30 20 32 0a  _scratch 6000 2.
14b0: 73 71 6c 69 74 65 33 5f 69 6e 69 74 69 61 6c 69  sqlite3_initiali
14c0: 7a 65 0a 72 65 73 65 74 5f 68 69 67 68 77 61 74  ze.reset_highwat
14d0: 65 72 5f 6d 61 72 6b 73 0a 62 75 69 6c 64 5f 74  er_marks.build_t
14e0: 65 73 74 5f 64 62 20 6d 65 6d 73 75 62 73 79 73  est_db memsubsys
14f0: 31 2d 35 20 7b 50 52 41 47 4d 41 20 70 61 67 65  1-5 {PRAGMA page
1500: 5f 73 69 7a 65 3d 34 30 39 36 7d 0a 23 73 68 6f  _size=4096}.#sho
1510: 77 5f 6d 65 6d 73 74 61 74 73 0a 64 6f 5f 74 65  w_memstats.do_te
1520: 73 74 20 6d 65 6d 73 75 62 73 79 73 31 2d 35 2e  st memsubsys1-5.
1530: 33 20 7b 0a 20 20 73 65 74 20 70 67 5f 75 73 65  3 {.  set pg_use
1540: 64 20 5b 6c 69 6e 64 65 78 20 5b 73 71 6c 69 74  d [lindex [sqlit
1550: 65 33 5f 73 74 61 74 75 73 20 53 51 4c 49 54 45  e3_status SQLITE
1560: 5f 53 54 41 54 55 53 5f 50 41 47 45 43 41 43 48  _STATUS_PAGECACH
1570: 45 5f 55 53 45 44 20 30 5d 20 32 5d 0a 7d 20 32  E_USED 0] 2].} 2
1580: 34 0a 64 6f 5f 74 65 73 74 20 6d 65 6d 73 75 62  4.do_test memsub
1590: 73 79 73 31 2d 35 2e 34 20 7b 0a 20 20 73 65 74  sys1-5.4 {.  set
15a0: 20 6d 61 78 72 65 71 20 5b 6c 69 6e 64 65 78 20   maxreq [lindex 
15b0: 5b 73 71 6c 69 74 65 33 5f 73 74 61 74 75 73 20  [sqlite3_status 
15c0: 53 51 4c 49 54 45 5f 53 54 41 54 55 53 5f 4d 41  SQLITE_STATUS_MA
15d0: 4c 4c 4f 43 5f 53 49 5a 45 20 30 5d 20 32 5d 0a  LLOC_SIZE 0] 2].
15e0: 20 20 65 78 70 72 20 7b 24 6d 61 78 72 65 71 3e    expr {$maxreq>
15f0: 34 30 39 36 7d 0a 7d 20 31 0a 64 6f 5f 74 65 73  4096}.} 1.do_tes
1600: 74 20 6d 65 6d 73 75 62 73 79 73 31 2d 35 2e 35  t memsubsys1-5.5
1610: 20 7b 0a 20 20 73 65 74 20 73 5f 75 73 65 64 20   {.  set s_used 
1620: 5b 6c 69 6e 64 65 78 20 5b 73 71 6c 69 74 65 33  [lindex [sqlite3
1630: 5f 73 74 61 74 75 73 20 53 51 4c 49 54 45 5f 53  _status SQLITE_S
1640: 54 41 54 55 53 5f 53 43 52 41 54 43 48 5f 55 53  TATUS_SCRATCH_US
1650: 45 44 20 30 5d 20 32 5d 0a 7d 20 30 0a 64 6f 5f  ED 0] 2].} 0.do_
1660: 74 65 73 74 20 6d 65 6d 73 75 62 73 79 73 31 2d  test memsubsys1-
1670: 35 2e 36 20 7b 0a 20 20 73 65 74 20 73 5f 6f 76  5.6 {.  set s_ov
1680: 66 6c 20 5b 6c 69 6e 64 65 78 20 5b 73 71 6c 69  fl [lindex [sqli
1690: 74 65 33 5f 73 74 61 74 75 73 20 53 51 4c 49 54  te3_status SQLIT
16a0: 45 5f 53 54 41 54 55 53 5f 53 43 52 41 54 43 48  E_STATUS_SCRATCH
16b0: 5f 4f 56 45 52 46 4c 4f 57 20 30 5d 20 32 5d 0a  _OVERFLOW 0] 2].
16c0: 20 20 65 78 70 72 20 7b 24 73 5f 6f 76 66 6c 3e    expr {$s_ovfl>
16d0: 36 30 30 30 7d 0a 7d 20 31 0a 0a 23 20 54 65 73  6000}.} 1..# Tes
16e0: 74 20 36 3a 20 20 41 63 74 69 76 61 74 65 20 62  t 6:  Activate b
16f0: 6f 74 68 20 50 41 47 45 43 41 43 48 45 20 61 6e  oth PAGECACHE an
1700: 64 20 53 43 52 41 54 43 48 20 77 69 74 68 20 61  d SCRATCH with a
1710: 20 34 6b 20 70 61 67 65 20 73 69 7a 65 2e 0a 23   4k page size..#
1720: 20 4d 61 6b 65 20 69 74 20 73 6f 20 74 68 61 74   Make it so that
1730: 20 53 43 52 41 54 43 48 20 69 73 20 6c 61 72 67   SCRATCH is larg
1740: 65 20 65 6e 6f 75 67 68 0a 23 0a 64 62 20 63 6c  e enough.#.db cl
1750: 6f 73 65 0a 73 71 6c 69 74 65 33 5f 73 68 75 74  ose.sqlite3_shut
1760: 64 6f 77 6e 0a 73 71 6c 69 74 65 33 5f 63 6f 6e  down.sqlite3_con
1770: 66 69 67 5f 70 61 67 65 63 61 63 68 65 20 5b 65  fig_pagecache [e
1780: 78 70 72 20 34 30 39 36 2b 24 78 74 72 61 5f 73  xpr 4096+$xtra_s
1790: 69 7a 65 5d 20 32 34 0a 73 71 6c 69 74 65 33 5f  ize] 24.sqlite3_
17a0: 63 6f 6e 66 69 67 5f 73 63 72 61 74 63 68 20 32  config_scratch 2
17b0: 35 33 30 30 20 31 0a 73 71 6c 69 74 65 33 5f 69  5300 1.sqlite3_i
17c0: 6e 69 74 69 61 6c 69 7a 65 0a 72 65 73 65 74 5f  nitialize.reset_
17d0: 68 69 67 68 77 61 74 65 72 5f 6d 61 72 6b 73 0a  highwater_marks.
17e0: 62 75 69 6c 64 5f 74 65 73 74 5f 64 62 20 6d 65  build_test_db me
17f0: 6d 73 75 62 73 79 73 31 2d 36 20 7b 50 52 41 47  msubsys1-6 {PRAG
1800: 4d 41 20 70 61 67 65 5f 73 69 7a 65 3d 34 30 39  MA page_size=409
1810: 36 7d 0a 23 73 68 6f 77 5f 6d 65 6d 73 74 61 74  6}.#show_memstat
1820: 73 0a 64 6f 5f 74 65 73 74 20 6d 65 6d 73 75 62  s.do_test memsub
1830: 73 79 73 31 2d 36 2e 33 20 7b 0a 20 20 73 65 74  sys1-6.3 {.  set
1840: 20 70 67 5f 75 73 65 64 20 5b 6c 69 6e 64 65 78   pg_used [lindex
1850: 20 5b 73 71 6c 69 74 65 33 5f 73 74 61 74 75 73   [sqlite3_status
1860: 20 53 51 4c 49 54 45 5f 53 54 41 54 55 53 5f 50   SQLITE_STATUS_P
1870: 41 47 45 43 41 43 48 45 5f 55 53 45 44 20 30 5d  AGECACHE_USED 0]
1880: 20 32 5d 0a 7d 20 32 34 0a 23 64 6f 5f 74 65 73   2].} 24.#do_tes
1890: 74 20 6d 65 6d 73 75 62 73 79 73 31 2d 36 2e 34  t memsubsys1-6.4
18a0: 20 7b 0a 23 20 20 73 65 74 20 6d 61 78 72 65 71   {.#  set maxreq
18b0: 20 5b 6c 69 6e 64 65 78 20 5b 73 71 6c 69 74 65   [lindex [sqlite
18c0: 33 5f 73 74 61 74 75 73 20 53 51 4c 49 54 45 5f  3_status SQLITE_
18d0: 53 54 41 54 55 53 5f 4d 41 4c 4c 4f 43 5f 53 49  STATUS_MALLOC_SI
18e0: 5a 45 20 30 5d 20 32 5d 0a 23 20 20 65 78 70 72  ZE 0] 2].#  expr
18f0: 20 7b 24 6d 61 78 72 65 71 3e 34 30 39 36 20 26   {$maxreq>4096 &
1900: 26 20 24 6d 61 78 72 65 71 3c 3d 28 34 30 39 36  & $maxreq<=(4096
1910: 2b 24 78 74 72 61 5f 73 69 7a 65 29 7d 0a 23 7d  +$xtra_size)}.#}
1920: 20 31 0a 64 6f 5f 74 65 73 74 20 6d 65 6d 73 75   1.do_test memsu
1930: 62 73 79 73 31 2d 36 2e 35 20 7b 0a 20 20 73 65  bsys1-6.5 {.  se
1940: 74 20 73 5f 75 73 65 64 20 5b 6c 69 6e 64 65 78  t s_used [lindex
1950: 20 5b 73 71 6c 69 74 65 33 5f 73 74 61 74 75 73   [sqlite3_status
1960: 20 53 51 4c 49 54 45 5f 53 54 41 54 55 53 5f 53   SQLITE_STATUS_S
1970: 43 52 41 54 43 48 5f 55 53 45 44 20 30 5d 20 32  CRATCH_USED 0] 2
1980: 5d 0a 7d 20 31 0a 64 6f 5f 74 65 73 74 20 6d 65  ].} 1.do_test me
1990: 6d 73 75 62 73 79 73 31 2d 36 2e 36 20 7b 0a 20  msubsys1-6.6 {. 
19a0: 20 73 65 74 20 73 5f 6f 76 66 6c 20 5b 6c 69 6e   set s_ovfl [lin
19b0: 64 65 78 20 5b 73 71 6c 69 74 65 33 5f 73 74 61  dex [sqlite3_sta
19c0: 74 75 73 20 53 51 4c 49 54 45 5f 53 54 41 54 55  tus SQLITE_STATU
19d0: 53 5f 53 43 52 41 54 43 48 5f 4f 56 45 52 46 4c  S_SCRATCH_OVERFL
19e0: 4f 57 20 30 5d 20 32 5d 0a 7d 20 30 0a 0a 23 20  OW 0] 2].} 0..# 
19f0: 54 65 73 74 20 37 3a 20 20 41 63 74 69 76 61 74  Test 7:  Activat
1a00: 65 20 62 6f 74 68 20 50 41 47 45 43 41 43 48 45  e both PAGECACHE
1a10: 20 61 6e 64 20 53 43 52 41 54 43 48 20 77 69 74   and SCRATCH wit
1a20: 68 20 61 20 34 6b 20 70 61 67 65 20 73 69 7a 65  h a 4k page size
1a30: 2e 0a 23 20 53 65 74 20 63 61 63 68 65 5f 73 69  ..# Set cache_si
1a40: 7a 65 20 73 6d 61 6c 6c 20 73 6f 20 74 68 61 74  ze small so that
1a50: 20 6e 6f 20 50 41 47 45 43 41 43 48 45 20 6f 76   no PAGECACHE ov
1a60: 65 72 66 6c 6f 77 20 6f 63 63 75 72 73 2e 20 20  erflow occurs.  
1a70: 56 65 72 69 66 79 0a 23 20 74 68 61 74 20 6d 61  Verify.# that ma
1a80: 78 69 6d 75 6d 20 61 6c 6c 6f 63 61 74 69 6f 6e  ximum allocation
1a90: 20 73 69 7a 65 20 69 73 20 73 6d 61 6c 6c 2e 0a   size is small..
1aa0: 23 0a 64 62 20 63 6c 6f 73 65 0a 73 71 6c 69 74  #.db close.sqlit
1ab0: 65 33 5f 73 68 75 74 64 6f 77 6e 0a 73 71 6c 69  e3_shutdown.sqli
1ac0: 74 65 33 5f 63 6f 6e 66 69 67 5f 70 61 67 65 63  te3_config_pagec
1ad0: 61 63 68 65 20 5b 65 78 70 72 20 34 30 39 36 2b  ache [expr 4096+
1ae0: 24 78 74 72 61 5f 73 69 7a 65 5d 20 32 34 0a 73  $xtra_size] 24.s
1af0: 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 5f 73 63  qlite3_config_sc
1b00: 72 61 74 63 68 20 32 35 33 30 30 20 31 0a 73 71  ratch 25300 1.sq
1b10: 6c 69 74 65 33 5f 69 6e 69 74 69 61 6c 69 7a 65  lite3_initialize
1b20: 0a 72 65 73 65 74 5f 68 69 67 68 77 61 74 65 72  .reset_highwater
1b30: 5f 6d 61 72 6b 73 0a 62 75 69 6c 64 5f 74 65 73  _marks.build_tes
1b40: 74 5f 64 62 20 6d 65 6d 73 75 62 73 79 73 31 2d  t_db memsubsys1-
1b50: 37 20 7b 0a 20 20 50 52 41 47 4d 41 20 70 61 67  7 {.  PRAGMA pag
1b60: 65 5f 73 69 7a 65 3d 34 30 39 36 3b 0a 20 20 50  e_size=4096;.  P
1b70: 52 41 47 4d 41 20 63 61 63 68 65 5f 73 69 7a 65  RAGMA cache_size
1b80: 3d 31 30 3b 0a 20 20 50 52 41 47 4d 41 20 74 65  =10;.  PRAGMA te
1b90: 6d 70 5f 73 74 6f 72 65 3d 6d 65 6d 6f 72 79 3b  mp_store=memory;
1ba0: 0a 7d 0a 23 73 68 6f 77 5f 6d 65 6d 73 74 61 74  .}.#show_memstat
1bb0: 73 0a 64 6f 5f 74 65 73 74 20 6d 65 6d 73 75 62  s.do_test memsub
1bc0: 73 79 73 31 2d 37 2e 33 20 7b 0a 20 20 73 65 74  sys1-7.3 {.  set
1bd0: 20 70 67 5f 75 73 65 64 20 5b 6c 69 6e 64 65 78   pg_used [lindex
1be0: 20 5b 73 71 6c 69 74 65 33 5f 73 74 61 74 75 73   [sqlite3_status
1bf0: 20 53 51 4c 49 54 45 5f 53 54 41 54 55 53 5f 50   SQLITE_STATUS_P
1c00: 41 47 45 43 41 43 48 45 5f 55 53 45 44 20 30 5d  AGECACHE_USED 0]
1c10: 20 32 5d 0a 20 20 65 78 70 72 20 7b 24 70 67 5f   2].  expr {$pg_
1c20: 75 73 65 64 3c 32 34 7d 0a 7d 20 31 0a 64 6f 5f  used<24}.} 1.do_
1c30: 74 65 73 74 20 6d 65 6d 73 75 62 73 79 73 31 2d  test memsubsys1-
1c40: 37 2e 34 20 7b 0a 20 20 73 65 74 20 70 67 5f 6f  7.4 {.  set pg_o
1c50: 76 66 6c 20 5b 6c 69 6e 64 65 78 20 5b 73 71 6c  vfl [lindex [sql
1c60: 69 74 65 33 5f 73 74 61 74 75 73 20 53 51 4c 49  ite3_status SQLI
1c70: 54 45 5f 53 54 41 54 55 53 5f 50 41 47 45 43 41  TE_STATUS_PAGECA
1c80: 43 48 45 5f 4f 56 45 52 46 4c 4f 57 20 30 5d 20  CHE_OVERFLOW 0] 
1c90: 32 5d 0a 7d 20 30 0a 64 6f 5f 74 65 73 74 20 6d  2].} 0.do_test m
1ca0: 65 6d 73 75 62 73 79 73 31 2d 37 2e 35 20 7b 0a  emsubsys1-7.5 {.
1cb0: 20 20 73 65 74 20 6d 61 78 72 65 71 20 5b 6c 69    set maxreq [li
1cc0: 6e 64 65 78 20 5b 73 71 6c 69 74 65 33 5f 73 74  ndex [sqlite3_st
1cd0: 61 74 75 73 20 53 51 4c 49 54 45 5f 53 54 41 54  atus SQLITE_STAT
1ce0: 55 53 5f 4d 41 4c 4c 4f 43 5f 53 49 5a 45 20 30  US_MALLOC_SIZE 0
1cf0: 5d 20 32 5d 0a 20 20 65 78 70 72 20 7b 24 6d 61  ] 2].  expr {$ma
1d00: 78 72 65 71 3c 34 31 30 30 7d 0a 7d 20 31 0a 64  xreq<4100}.} 1.d
1d10: 6f 5f 74 65 73 74 20 6d 65 6d 73 75 62 73 79 73  o_test memsubsys
1d20: 31 2d 37 2e 36 20 7b 0a 20 20 73 65 74 20 73 5f  1-7.6 {.  set s_
1d30: 75 73 65 64 20 5b 6c 69 6e 64 65 78 20 5b 73 71  used [lindex [sq
1d40: 6c 69 74 65 33 5f 73 74 61 74 75 73 20 53 51 4c  lite3_status SQL
1d50: 49 54 45 5f 53 54 41 54 55 53 5f 53 43 52 41 54  ITE_STATUS_SCRAT
1d60: 43 48 5f 55 53 45 44 20 30 5d 20 32 5d 0a 7d 20  CH_USED 0] 2].} 
1d70: 31 0a 64 6f 5f 74 65 73 74 20 6d 65 6d 73 75 62  1.do_test memsub
1d80: 73 79 73 31 2d 37 2e 37 20 7b 0a 20 20 73 65 74  sys1-7.7 {.  set
1d90: 20 73 5f 6f 76 66 6c 20 5b 6c 69 6e 64 65 78 20   s_ovfl [lindex 
1da0: 5b 73 71 6c 69 74 65 33 5f 73 74 61 74 75 73 20  [sqlite3_status 
1db0: 53 51 4c 49 54 45 5f 53 54 41 54 55 53 5f 53 43  SQLITE_STATUS_SC
1dc0: 52 41 54 43 48 5f 4f 56 45 52 46 4c 4f 57 20 30  RATCH_OVERFLOW 0
1dd0: 5d 20 32 5d 0a 7d 20 30 0a 0a 23 20 54 65 73 74  ] 2].} 0..# Test
1de0: 20 38 3a 20 20 44 69 73 61 62 6c 65 20 50 41 47   8:  Disable PAG
1df0: 45 43 41 43 48 45 2e 20 20 4d 61 6b 65 20 61 76  ECACHE.  Make av
1e00: 61 69 6c 61 62 6c 65 20 53 43 52 41 54 43 48 20  ailable SCRATCH 
1e10: 7a 65 72 6f 2e 20 20 56 65 72 69 66 79 20 74 68  zero.  Verify th
1e20: 61 74 0a 23 20 74 68 65 20 53 43 52 41 54 43 48  at.# the SCRATCH
1e30: 20 6f 76 65 72 66 6c 6f 77 20 6c 6f 67 69 63 20   overflow logic 
1e40: 77 6f 72 6b 73 2e 0a 23 0a 64 62 20 63 6c 6f 73  works..#.db clos
1e50: 65 0a 73 71 6c 69 74 65 33 5f 73 68 75 74 64 6f  e.sqlite3_shutdo
1e60: 77 6e 0a 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69  wn.sqlite3_confi
1e70: 67 5f 70 61 67 65 63 61 63 68 65 20 30 20 30 0a  g_pagecache 0 0.
1e80: 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 5f 73  sqlite3_config_s
1e90: 63 72 61 74 63 68 20 32 35 30 30 30 20 30 0a 73  cratch 25000 0.s
1ea0: 71 6c 69 74 65 33 5f 69 6e 69 74 69 61 6c 69 7a  qlite3_initializ
1eb0: 65 0a 72 65 73 65 74 5f 68 69 67 68 77 61 74 65  e.reset_highwate
1ec0: 72 5f 6d 61 72 6b 73 0a 64 6f 5f 74 65 73 74 20  r_marks.do_test 
1ed0: 6d 65 6d 73 75 62 73 79 73 31 2d 38 2e 31 20 7b  memsubsys1-8.1 {
1ee0: 0a 20 20 73 65 74 20 70 67 5f 75 73 65 64 20 5b  .  set pg_used [
1ef0: 6c 69 6e 64 65 78 20 5b 73 71 6c 69 74 65 33 5f  lindex [sqlite3_
1f00: 73 74 61 74 75 73 20 53 51 4c 49 54 45 5f 53 54  status SQLITE_ST
1f10: 41 54 55 53 5f 53 43 52 41 54 43 48 5f 55 53 45  ATUS_SCRATCH_USE
1f20: 44 20 30 5d 20 32 5d 0a 7d 20 30 0a 64 6f 5f 74  D 0] 2].} 0.do_t
1f30: 65 73 74 20 6d 65 6d 73 75 62 73 79 73 31 2d 38  est memsubsys1-8
1f40: 2e 32 20 7b 0a 20 20 73 65 74 20 73 5f 6f 76 66  .2 {.  set s_ovf
1f50: 6c 20 5b 6c 69 6e 64 65 78 20 5b 73 71 6c 69 74  l [lindex [sqlit
1f60: 65 33 5f 73 74 61 74 75 73 20 53 51 4c 49 54 45  e3_status SQLITE
1f70: 5f 53 54 41 54 55 53 5f 53 43 52 41 54 43 48 5f  _STATUS_SCRATCH_
1f80: 4f 56 45 52 46 4c 4f 57 20 30 5d 20 32 5d 0a 7d  OVERFLOW 0] 2].}
1f90: 20 30 0a 64 6f 5f 74 65 73 74 20 6d 65 6d 73 75   0.do_test memsu
1fa0: 62 73 79 73 31 2d 38 2e 33 20 7b 0a 20 20 73 71  bsys1-8.3 {.  sq
1fb0: 6c 69 74 65 33 20 64 62 20 3a 6d 65 6d 6f 72 79  lite3 db :memory
1fc0: 3a 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a 20 20  :.  db eval {.  
1fd0: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
1fe0: 31 28 78 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  1(x);.    INSERT
1ff0: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
2000: 7a 65 72 6f 62 6c 6f 62 28 34 30 30 29 29 3b 0a  zeroblob(400));.
2010: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
2020: 74 31 20 56 41 4c 55 45 53 28 7a 65 72 6f 62 6c  t1 VALUES(zerobl
2030: 6f 62 28 34 30 30 29 29 3b 0a 20 20 20 20 49 4e  ob(400));.    IN
2040: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 53 45 4c  SERT INTO t1 SEL
2050: 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 3b 0a 20  ECT * FROM t1;. 
2060: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
2070: 31 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20  1 SELECT * FROM 
2080: 74 31 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  t1;.    INSERT I
2090: 4e 54 4f 20 74 31 20 53 45 4c 45 43 54 20 2a 20  NTO t1 SELECT * 
20a0: 46 52 4f 4d 20 74 31 3b 0a 20 20 7d 0a 20 20 65  FROM t1;.  }.  e
20b0: 78 70 72 20 7b 5b 6c 69 6e 64 65 78 20 5b 73 71  xpr {[lindex [sq
20c0: 6c 69 74 65 33 5f 73 74 61 74 75 73 20 53 51 4c  lite3_status SQL
20d0: 49 54 45 5f 53 54 41 54 55 53 5f 53 43 52 41 54  ITE_STATUS_SCRAT
20e0: 43 48 5f 4f 56 45 52 46 4c 4f 57 20 30 5d 20 32  CH_OVERFLOW 0] 2
20f0: 5d 3e 30 7d 0a 7d 20 31 0a 64 62 20 63 6c 6f 73  ]>0}.} 1.db clos
2100: 65 0a 73 71 6c 69 74 65 33 5f 73 68 75 74 64 6f  e.sqlite3_shutdo
2110: 77 6e 0a 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69  wn.sqlite3_confi
2120: 67 5f 6d 65 6d 73 74 61 74 75 73 20 30 0a 73 71  g_memstatus 0.sq
2130: 6c 69 74 65 33 5f 69 6e 69 74 69 61 6c 69 7a 65  lite3_initialize
2140: 0a 64 6f 5f 74 65 73 74 20 6d 65 6d 73 75 62 73  .do_test memsubs
2150: 79 73 31 2d 38 2e 34 20 7b 0a 20 20 73 71 6c 69  ys1-8.4 {.  sqli
2160: 74 65 33 20 64 62 20 3a 6d 65 6d 6f 72 79 3a 0a  te3 db :memory:.
2170: 20 20 64 62 20 65 76 61 6c 20 7b 0a 20 20 20 20    db eval {.    
2180: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28  CREATE TABLE t1(
2190: 78 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  x);.    INSERT I
21a0: 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 7a 65  NTO t1 VALUES(ze
21b0: 72 6f 62 6c 6f 62 28 34 30 30 29 29 3b 0a 20 20  roblob(400));.  
21c0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
21d0: 20 56 41 4c 55 45 53 28 7a 65 72 6f 62 6c 6f 62   VALUES(zeroblob
21e0: 28 34 30 30 29 29 3b 0a 20 20 20 20 49 4e 53 45  (400));.    INSE
21f0: 52 54 20 49 4e 54 4f 20 74 31 20 53 45 4c 45 43  RT INTO t1 SELEC
2200: 54 20 2a 20 46 52 4f 4d 20 74 31 3b 0a 20 20 20  T * FROM t1;.   
2210: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20   INSERT INTO t1 
2220: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31  SELECT * FROM t1
2230: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
2240: 4f 20 74 31 20 53 45 4c 45 43 54 20 2a 20 46 52  O t1 SELECT * FR
2250: 4f 4d 20 74 31 3b 0a 20 20 20 20 53 45 4c 45 43  OM t1;.    SELEC
2260: 54 20 72 6f 77 69 64 20 46 52 4f 4d 20 74 31 3b  T rowid FROM t1;
2270: 0a 20 20 7d 0a 7d 20 7b 31 20 32 20 33 20 34 20  .  }.} {1 2 3 4 
2280: 35 20 36 20 37 20 38 20 39 20 31 30 20 31 31 20  5 6 7 8 9 10 11 
2290: 31 32 20 31 33 20 31 34 20 31 35 20 31 36 7d 0a  12 13 14 15 16}.
22a0: 0a 0a 64 62 20 63 6c 6f 73 65 0a 73 71 6c 69 74  ..db close.sqlit
22b0: 65 33 5f 73 68 75 74 64 6f 77 6e 0a 73 71 6c 69  e3_shutdown.sqli
22c0: 74 65 33 5f 63 6f 6e 66 69 67 5f 6d 65 6d 73 74  te3_config_memst
22d0: 61 74 75 73 20 31 0a 73 71 6c 69 74 65 33 5f 63  atus 1.sqlite3_c
22e0: 6f 6e 66 69 67 5f 70 61 67 65 63 61 63 68 65 20  onfig_pagecache 
22f0: 30 20 30 0a 73 71 6c 69 74 65 33 5f 63 6f 6e 66  0 0.sqlite3_conf
2300: 69 67 5f 73 63 72 61 74 63 68 20 30 20 30 0a 73  ig_scratch 0 0.s
2310: 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 5f 6c 6f  qlite3_config_lo
2320: 6f 6b 61 73 69 64 65 20 31 30 30 20 35 30 30 0a  okaside 100 500.
2330: 73 71 6c 69 74 65 33 5f 69 6e 69 74 69 61 6c 69  sqlite3_initiali
2340: 7a 65 0a 61 75 74 6f 69 6e 73 74 61 6c 6c 5f 74  ze.autoinstall_t
2350: 65 73 74 5f 66 75 6e 63 74 69 6f 6e 73 0a 66 69  est_functions.fi
2360: 6e 69 73 68 5f 74 65 73 74 0a                    nish_test.