/ Hex Artifact Content
Login

Artifact aea7b3d82c76034a2df2b38a13745172ddc0bc13:


0000: 23 20 32 30 30 32 20 4d 61 72 63 68 20 36 0a 23  # 2002 March 6.#
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 20 54 68 69 73 20 66 69 6c 65  ****.# This file
0170: 20 69 6d 70 6c 65 6d 65 6e 74 73 20 72 65 67 72   implements regr
0180: 65 73 73 69 6f 6e 20 74 65 73 74 73 20 66 6f 72  ession tests for
0190: 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79 2e   SQLite library.
01a0: 0a 23 0a 23 20 54 68 69 73 20 66 69 6c 65 20 69  .#.# This file i
01b0: 6d 70 6c 65 6d 65 6e 74 73 20 74 65 73 74 73 20  mplements tests 
01c0: 66 6f 72 20 74 68 65 20 50 52 41 47 4d 41 20 63  for the PRAGMA c
01d0: 6f 6d 6d 61 6e 64 2e 0a 23 0a 23 20 24 49 64 3a  ommand..#.# $Id:
01e0: 20 70 72 61 67 6d 61 32 2e 74 65 73 74 2c 76 20   pragma2.test,v 
01f0: 31 2e 34 20 32 30 30 37 2f 31 30 2f 30 39 20 30  1.4 2007/10/09 0
0200: 38 3a 32 39 3a 33 33 20 64 61 6e 69 65 6c 6b 31  8:29:33 danielk1
0210: 39 37 37 20 45 78 70 20 24 0a 0a 73 65 74 20 74  977 Exp $..set t
0220: 65 73 74 64 69 72 20 5b 66 69 6c 65 20 64 69 72  estdir [file dir
0230: 6e 61 6d 65 20 24 61 72 67 76 30 5d 0a 73 6f 75  name $argv0].sou
0240: 72 63 65 20 24 74 65 73 74 64 69 72 2f 74 65 73  rce $testdir/tes
0250: 74 65 72 2e 74 63 6c 0a 0a 23 20 54 65 73 74 20  ter.tcl..# Test 
0260: 6f 72 67 61 6e 69 7a 61 74 69 6f 6e 3a 0a 23 0a  organization:.#.
0270: 23 20 70 72 61 67 6d 61 32 2d 31 2e 2a 3a 20 54  # pragma2-1.*: T
0280: 65 73 74 20 66 72 65 65 6c 69 73 74 5f 63 6f 75  est freelist_cou
0290: 6e 74 20 70 72 61 67 6d 61 20 6f 6e 20 74 68 65  nt pragma on the
02a0: 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2e 0a   main database..
02b0: 23 20 70 72 61 67 6d 61 32 2d 32 2e 2a 3a 20 54  # pragma2-2.*: T
02c0: 65 73 74 20 66 72 65 65 6c 69 73 74 5f 63 6f 75  est freelist_cou
02d0: 6e 74 20 70 72 61 67 6d 61 20 6f 6e 20 61 6e 20  nt pragma on an 
02e0: 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
02f0: 65 2e 0a 23 20 70 72 61 67 6d 61 32 2d 33 2e 2a  e..# pragma2-3.*
0300: 3a 20 54 65 73 74 20 74 72 79 69 6e 67 20 74 6f  : Test trying to
0310: 20 77 72 69 74 65 20 74 6f 20 74 68 65 20 66 72   write to the fr
0320: 65 65 6c 69 73 74 5f 63 6f 75 6e 74 20 69 73 20  eelist_count is 
0330: 61 20 6e 6f 2d 6f 70 2e 0a 23 20 70 72 61 67 6d  a no-op..# pragm
0340: 61 32 2d 34 2e 2a 3a 20 54 65 73 74 73 20 66 6f  a2-4.*: Tests fo
0350: 72 20 50 52 41 47 4d 41 20 63 61 63 68 65 5f 73  r PRAGMA cache_s
0360: 70 69 6c 6c 0a 23 0a 0a 69 66 63 61 70 61 62 6c  pill.#..ifcapabl
0370: 65 20 21 70 72 61 67 6d 61 7c 7c 21 73 63 68 65  e !pragma||!sche
0380: 6d 61 5f 70 72 61 67 6d 61 73 20 7b 0a 20 20 66  ma_pragmas {.  f
0390: 69 6e 69 73 68 5f 74 65 73 74 0a 20 20 72 65 74  inish_test.  ret
03a0: 75 72 6e 0a 7d 0a 0a 23 20 44 65 6c 65 74 65 20  urn.}..# Delete 
03b0: 74 68 65 20 70 72 65 65 78 69 73 74 69 6e 67 20  the preexisting 
03c0: 64 61 74 61 62 61 73 65 20 74 6f 20 61 76 6f 69  database to avoi
03d0: 64 20 74 68 65 20 73 70 65 63 69 61 6c 20 73 65  d the special se
03e0: 74 75 70 0a 23 20 74 68 61 74 20 74 68 65 20 22  tup.# that the "
03f0: 61 6c 6c 2e 74 65 73 74 22 20 73 63 72 69 70 74  all.test" script
0400: 20 64 6f 65 73 2e 0a 23 0a 64 62 20 63 6c 6f 73   does..#.db clos
0410: 65 0a 64 65 6c 65 74 65 5f 66 69 6c 65 20 74 65  e.delete_file te
0420: 73 74 2e 64 62 20 74 65 73 74 2e 64 62 2d 6a 6f  st.db test.db-jo
0430: 75 72 6e 61 6c 0a 64 65 6c 65 74 65 5f 66 69 6c  urnal.delete_fil
0440: 65 20 74 65 73 74 33 2e 64 62 20 74 65 73 74 33  e test3.db test3
0450: 2e 64 62 2d 6a 6f 75 72 6e 61 6c 0a 73 71 6c 69  .db-journal.sqli
0460: 74 65 33 20 64 62 20 74 65 73 74 2e 64 62 3b 20  te3 db test.db; 
0470: 73 65 74 20 44 42 20 5b 73 71 6c 69 74 65 33 5f  set DB [sqlite3_
0480: 63 6f 6e 6e 65 63 74 69 6f 6e 5f 70 6f 69 6e 74  connection_point
0490: 65 72 20 64 62 5d 0a 64 62 20 65 76 61 6c 20 7b  er db].db eval {
04a0: 50 52 41 47 4d 41 20 61 75 74 6f 5f 76 61 63 75  PRAGMA auto_vacu
04b0: 75 6d 3d 30 7d 0a 0a 64 6f 5f 74 65 73 74 20 70  um=0}..do_test p
04c0: 72 61 67 6d 61 32 2d 31 2e 31 20 7b 0a 20 20 65  ragma2-1.1 {.  e
04d0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41  xecsql {.    PRA
04e0: 47 4d 41 20 66 72 65 65 6c 69 73 74 5f 63 6f 75  GMA freelist_cou
04f0: 6e 74 3b 0a 20 20 7d 0a 7d 20 7b 30 7d 0a 64 6f  nt;.  }.} {0}.do
0500: 5f 74 65 73 74 20 70 72 61 67 6d 61 32 2d 31 2e  _test pragma2-1.
0510: 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  2 {.  execsql {.
0520: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
0530: 20 61 62 63 28 61 2c 20 62 2c 20 63 29 3b 0a 20   abc(a, b, c);. 
0540: 20 20 20 50 52 41 47 4d 41 20 66 72 65 65 6c 69     PRAGMA freeli
0550: 73 74 5f 63 6f 75 6e 74 3b 0a 20 20 7d 0a 7d 20  st_count;.  }.} 
0560: 7b 30 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67  {0}.do_test prag
0570: 6d 61 32 2d 31 2e 33 20 7b 0a 20 20 65 78 65 63  ma2-1.3 {.  exec
0580: 73 71 6c 20 7b 0a 20 20 20 20 44 52 4f 50 20 54  sql {.    DROP T
0590: 41 42 4c 45 20 61 62 63 3b 0a 20 20 20 20 50 52  ABLE abc;.    PR
05a0: 41 47 4d 41 20 66 72 65 65 6c 69 73 74 5f 63 6f  AGMA freelist_co
05b0: 75 6e 74 3b 0a 20 20 7d 0a 7d 20 7b 31 7d 0a 64  unt;.  }.} {1}.d
05c0: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 32 2d 31  o_test pragma2-1
05d0: 2e 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .4 {.  execsql {
05e0: 0a 20 20 20 20 50 52 41 47 4d 41 20 6d 61 69 6e  .    PRAGMA main
05f0: 2e 66 72 65 65 6c 69 73 74 5f 63 6f 75 6e 74 3b  .freelist_count;
0600: 0a 20 20 7d 0a 7d 20 7b 31 7d 0a 0a 66 6f 72 63  .  }.} {1}..forc
0610: 65 64 65 6c 65 74 65 20 74 65 73 74 32 2e 64 62  edelete test2.db
0620: 0a 66 6f 72 63 65 64 65 6c 65 74 65 20 74 65 73  .forcedelete tes
0630: 74 32 2e 64 62 2d 6a 6f 75 72 6e 61 6c 0a 0a 69  t2.db-journal..i
0640: 66 63 61 70 61 62 6c 65 20 61 74 74 61 63 68 20  fcapable attach 
0650: 7b 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67  {.  do_test prag
0660: 6d 61 32 2d 32 2e 31 20 7b 0a 20 20 20 20 65 78  ma2-2.1 {.    ex
0670: 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 41 54  ecsql {.      AT
0680: 54 41 43 48 20 27 74 65 73 74 32 2e 64 62 27 20  TACH 'test2.db' 
0690: 41 53 20 61 75 78 3b 0a 20 20 20 20 20 20 50 52  AS aux;.      PR
06a0: 41 47 4d 41 20 61 75 78 2e 61 75 74 6f 5f 76 61  AGMA aux.auto_va
06b0: 63 75 75 6d 3d 4f 46 46 3b 0a 20 20 20 20 20 20  cuum=OFF;.      
06c0: 50 52 41 47 4d 41 20 61 75 78 2e 66 72 65 65 6c  PRAGMA aux.freel
06d0: 69 73 74 5f 63 6f 75 6e 74 3b 0a 20 20 20 20 7d  ist_count;.    }
06e0: 0a 20 20 7d 20 7b 30 7d 0a 20 20 64 6f 5f 74 65  .  } {0}.  do_te
06f0: 73 74 20 70 72 61 67 6d 61 32 2d 32 2e 32 20 7b  st pragma2-2.2 {
0700: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
0710: 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c       CREATE TABL
0720: 45 20 61 75 78 2e 61 62 63 28 61 2c 20 62 2c 20  E aux.abc(a, b, 
0730: 63 29 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41  c);.      PRAGMA
0740: 20 61 75 78 2e 66 72 65 65 6c 69 73 74 5f 63 6f   aux.freelist_co
0750: 75 6e 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b  unt;.    }.  } {
0760: 30 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61  0}.  do_test pra
0770: 67 6d 61 32 2d 32 2e 33 20 7b 0a 20 20 20 20 73  gma2-2.3 {.    s
0780: 65 74 20 3a 3a 76 61 6c 20 5b 73 74 72 69 6e 67  et ::val [string
0790: 20 72 65 70 65 61 74 20 30 31 32 33 34 35 36 37   repeat 01234567
07a0: 38 39 20 31 30 30 30 5d 0a 20 20 20 20 65 78 65  89 1000].    exe
07b0: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 49 4e 53  csql {.      INS
07c0: 45 52 54 20 49 4e 54 4f 20 61 75 78 2e 61 62 63  ERT INTO aux.abc
07d0: 20 56 41 4c 55 45 53 28 31 2c 20 32 2c 20 24 3a   VALUES(1, 2, $:
07e0: 3a 76 61 6c 29 3b 0a 20 20 20 20 20 20 50 52 41  :val);.      PRA
07f0: 47 4d 41 20 61 75 78 2e 66 72 65 65 6c 69 73 74  GMA aux.freelist
0800: 5f 63 6f 75 6e 74 3b 0a 20 20 20 20 7d 0a 20 20  _count;.    }.  
0810: 7d 20 7b 30 7d 0a 20 20 64 6f 5f 74 65 73 74 20  } {0}.  do_test 
0820: 70 72 61 67 6d 61 32 2d 32 2e 34 20 7b 0a 20 20  pragma2-2.4 {.  
0830: 20 20 65 78 70 72 20 7b 5b 66 69 6c 65 20 73 69    expr {[file si
0840: 7a 65 20 74 65 73 74 32 2e 64 62 5d 20 2f 20 31  ze test2.db] / 1
0850: 30 32 34 7d 0a 20 20 7d 20 7b 31 31 7d 0a 20 20  024}.  } {11}.  
0860: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 32 2d  do_test pragma2-
0870: 32 2e 35 20 7b 0a 20 20 20 20 65 78 65 63 73 71  2.5 {.    execsq
0880: 6c 20 7b 0a 20 20 20 20 20 20 44 45 4c 45 54 45  l {.      DELETE
0890: 20 46 52 4f 4d 20 61 75 78 2e 61 62 63 3b 0a 20   FROM aux.abc;. 
08a0: 20 20 20 20 20 50 52 41 47 4d 41 20 61 75 78 2e       PRAGMA aux.
08b0: 66 72 65 65 6c 69 73 74 5f 63 6f 75 6e 74 3b 0a  freelist_count;.
08c0: 20 20 20 20 7d 0a 20 20 7d 20 7b 39 7d 0a 20 20      }.  } {9}.  
08d0: 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .  do_test pragm
08e0: 61 32 2d 33 2e 31 20 7b 0a 20 20 20 20 65 78 65  a2-3.1 {.    exe
08f0: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41  csql {.      PRA
0900: 47 4d 41 20 61 75 78 2e 66 72 65 65 6c 69 73 74  GMA aux.freelist
0910: 5f 63 6f 75 6e 74 3b 0a 20 20 20 20 20 20 50 52  _count;.      PR
0920: 41 47 4d 41 20 6d 61 69 6e 2e 66 72 65 65 6c 69  AGMA main.freeli
0930: 73 74 5f 63 6f 75 6e 74 3b 0a 20 20 20 20 20 20  st_count;.      
0940: 50 52 41 47 4d 41 20 66 72 65 65 6c 69 73 74 5f  PRAGMA freelist_
0950: 63 6f 75 6e 74 3b 0a 20 20 20 20 7d 0a 20 20 7d  count;.    }.  }
0960: 20 7b 39 20 31 20 31 7d 0a 20 20 64 6f 5f 74 65   {9 1 1}.  do_te
0970: 73 74 20 70 72 61 67 6d 61 32 2d 33 2e 32 20 7b  st pragma2-3.2 {
0980: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
0990: 20 20 20 20 20 50 52 41 47 4d 41 20 66 72 65 65       PRAGMA free
09a0: 6c 69 73 74 5f 63 6f 75 6e 74 20 3d 20 35 30 30  list_count = 500
09b0: 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 66  ;.      PRAGMA f
09c0: 72 65 65 6c 69 73 74 5f 63 6f 75 6e 74 3b 0a 20  reelist_count;. 
09d0: 20 20 20 7d 0a 20 20 7d 20 7b 31 20 31 7d 0a 20     }.  } {1 1}. 
09e0: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 32   do_test pragma2
09f0: 2d 33 2e 33 20 7b 0a 20 20 20 20 65 78 65 63 73  -3.3 {.    execs
0a00: 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d  ql {.      PRAGM
0a10: 41 20 61 75 78 2e 66 72 65 65 6c 69 73 74 5f 63  A aux.freelist_c
0a20: 6f 75 6e 74 20 3d 20 35 30 30 3b 0a 20 20 20 20  ount = 500;.    
0a30: 20 20 50 52 41 47 4d 41 20 61 75 78 2e 66 72 65    PRAGMA aux.fre
0a40: 65 6c 69 73 74 5f 63 6f 75 6e 74 3b 0a 20 20 20  elist_count;.   
0a50: 20 7d 0a 20 20 7d 20 7b 39 20 39 7d 0a 7d 0a 0a   }.  } {9 9}.}..
0a60: 23 20 44 65 66 61 75 6c 74 20 73 65 74 74 69 6e  # Default settin
0a70: 67 20 6f 66 20 50 52 41 47 4d 41 20 63 61 63 68  g of PRAGMA cach
0a80: 65 5f 73 70 69 6c 6c 20 69 73 20 61 6c 77 61 79  e_spill is alway
0a90: 73 20 4f 4e 0a 23 0a 23 20 45 56 49 44 45 4e 43  s ON.#.# EVIDENC
0aa0: 45 2d 4f 46 3a 20 52 2d 35 31 30 33 36 2d 36 32  E-OF: R-51036-62
0ab0: 38 32 38 20 50 52 41 47 4d 41 20 63 61 63 68 65  828 PRAGMA cache
0ac0: 5f 73 70 69 6c 6c 3b 20 50 52 41 47 4d 41 0a 23  _spill; PRAGMA.#
0ad0: 20 63 61 63 68 65 5f 73 70 69 6c 6c 3d 62 6f 6f   cache_spill=boo
0ae0: 6c 65 61 6e 3b 0a 23 0a 23 20 45 56 49 44 45 4e  lean;.#.# EVIDEN
0af0: 43 45 2d 4f 46 3a 20 52 2d 32 33 39 35 35 2d 30  CE-OF: R-23955-0
0b00: 32 37 36 35 20 43 61 63 68 65 5f 73 70 69 6c 6c  2765 Cache_spill
0b10: 20 69 73 20 65 6e 61 62 6c 65 64 20 62 79 20 64   is enabled by d
0b20: 65 66 61 75 6c 74 0a 23 0a 64 62 20 63 6c 6f 73  efault.#.db clos
0b30: 65 0a 64 65 6c 65 74 65 5f 66 69 6c 65 20 74 65  e.delete_file te
0b40: 73 74 2e 64 62 20 74 65 73 74 2e 64 62 2d 6a 6f  st.db test.db-jo
0b50: 75 72 6e 61 6c 0a 64 65 6c 65 74 65 5f 66 69 6c  urnal.delete_fil
0b60: 65 20 74 65 73 74 32 2e 64 62 20 74 65 73 74 32  e test2.db test2
0b70: 2e 64 62 2d 6a 6f 75 72 6e 61 6c 0a 73 71 6c 69  .db-journal.sqli
0b80: 74 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a 64  te3 db test.db.d
0b90: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 70  o_execsql_test p
0ba0: 72 61 67 6d 61 32 2d 34 2e 31 20 7b 0a 20 20 50  ragma2-4.1 {.  P
0bb0: 52 41 47 4d 41 20 63 61 63 68 65 5f 73 70 69 6c  RAGMA cache_spil
0bc0: 6c 3b 0a 20 20 50 52 41 47 4d 41 20 6d 61 69 6e  l;.  PRAGMA main
0bd0: 2e 63 61 63 68 65 5f 73 70 69 6c 6c 3b 0a 20 20  .cache_spill;.  
0be0: 50 52 41 47 4d 41 20 74 65 6d 70 2e 63 61 63 68  PRAGMA temp.cach
0bf0: 65 5f 73 70 69 6c 6c 3b 0a 7d 20 7b 31 20 31 20  e_spill;.} {1 1 
0c00: 31 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  1}.do_execsql_te
0c10: 73 74 20 70 72 61 67 6d 61 32 2d 34 2e 32 20 7b  st pragma2-4.2 {
0c20: 0a 20 20 50 52 41 47 4d 41 20 63 61 63 68 65 5f  .  PRAGMA cache_
0c30: 73 70 69 6c 6c 3d 4f 46 46 3b 0a 20 20 50 52 41  spill=OFF;.  PRA
0c40: 47 4d 41 20 63 61 63 68 65 5f 73 70 69 6c 6c 3b  GMA cache_spill;
0c50: 0a 20 20 50 52 41 47 4d 41 20 6d 61 69 6e 2e 63  .  PRAGMA main.c
0c60: 61 63 68 65 5f 73 70 69 6c 6c 3b 0a 20 20 50 52  ache_spill;.  PR
0c70: 41 47 4d 41 20 74 65 6d 70 2e 63 61 63 68 65 5f  AGMA temp.cache_
0c80: 73 70 69 6c 6c 3b 0a 7d 20 7b 30 20 30 20 30 7d  spill;.} {0 0 0}
0c90: 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74  .do_execsql_test
0ca0: 20 70 72 61 67 6d 61 32 2d 34 2e 33 20 7b 0a 20   pragma2-4.3 {. 
0cb0: 20 50 52 41 47 4d 41 20 70 61 67 65 5f 73 69 7a   PRAGMA page_siz
0cc0: 65 3d 31 30 32 34 3b 0a 20 20 50 52 41 47 4d 41  e=1024;.  PRAGMA
0cd0: 20 63 61 63 68 65 5f 73 69 7a 65 3d 35 30 3b 0a   cache_size=50;.
0ce0: 20 20 42 45 47 49 4e 3b 0a 20 20 43 52 45 41 54    BEGIN;.  CREAT
0cf0: 45 20 54 41 42 4c 45 20 74 31 28 61 20 49 4e 54  E TABLE t1(a INT
0d00: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
0d10: 2c 20 62 2c 20 63 2c 20 64 29 3b 0a 20 20 49 4e  , b, c, d);.  IN
0d20: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c  SERT INTO t1 VAL
0d30: 55 45 53 28 31 2c 20 72 61 6e 64 6f 6d 62 6c 6f  UES(1, randomblo
0d40: 62 28 34 30 30 29 2c 20 31 2c 20 72 61 6e 64 6f  b(400), 1, rando
0d50: 6d 62 6c 6f 62 28 34 30 30 29 29 3b 0a 20 20 49  mblob(400));.  I
0d60: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 53 45  NSERT INTO t1 SE
0d70: 4c 45 43 54 20 61 2b 31 2c 20 72 61 6e 64 6f 6d  LECT a+1, random
0d80: 62 6c 6f 62 28 34 30 30 29 2c 20 61 2b 31 2c 20  blob(400), a+1, 
0d90: 72 61 6e 64 6f 6d 62 6c 6f 62 28 34 30 30 29 20  randomblob(400) 
0da0: 46 52 4f 4d 20 74 31 3b 0a 20 20 49 4e 53 45 52  FROM t1;.  INSER
0db0: 54 20 49 4e 54 4f 20 74 31 20 53 45 4c 45 43 54  T INTO t1 SELECT
0dc0: 20 61 2b 32 2c 20 72 61 6e 64 6f 6d 62 6c 6f 62   a+2, randomblob
0dd0: 28 34 30 30 29 2c 20 61 2b 32 2c 20 72 61 6e 64  (400), a+2, rand
0de0: 6f 6d 62 6c 6f 62 28 34 30 30 29 20 46 52 4f 4d  omblob(400) FROM
0df0: 20 74 31 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e   t1;.  INSERT IN
0e00: 54 4f 20 74 31 20 53 45 4c 45 43 54 20 61 2b 34  TO t1 SELECT a+4
0e10: 2c 20 72 61 6e 64 6f 6d 62 6c 6f 62 28 34 30 30  , randomblob(400
0e20: 29 2c 20 61 2b 34 2c 20 72 61 6e 64 6f 6d 62 6c  ), a+4, randombl
0e30: 6f 62 28 34 30 30 29 20 46 52 4f 4d 20 74 31 3b  ob(400) FROM t1;
0e40: 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  .  INSERT INTO t
0e50: 31 20 53 45 4c 45 43 54 20 61 2b 38 2c 20 72 61  1 SELECT a+8, ra
0e60: 6e 64 6f 6d 62 6c 6f 62 28 34 30 30 29 2c 20 61  ndomblob(400), a
0e70: 2b 38 2c 20 72 61 6e 64 6f 6d 62 6c 6f 62 28 34  +8, randomblob(4
0e80: 30 30 29 20 46 52 4f 4d 20 74 31 3b 0a 20 20 49  00) FROM t1;.  I
0e90: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 53 45  NSERT INTO t1 SE
0ea0: 4c 45 43 54 20 61 2b 31 36 2c 20 72 61 6e 64 6f  LECT a+16, rando
0eb0: 6d 62 6c 6f 62 28 34 30 30 29 2c 20 61 2b 31 36  mblob(400), a+16
0ec0: 2c 20 72 61 6e 64 6f 6d 62 6c 6f 62 28 34 30 30  , randomblob(400
0ed0: 29 20 46 52 4f 4d 20 74 31 3b 0a 20 20 49 4e 53  ) FROM t1;.  INS
0ee0: 45 52 54 20 49 4e 54 4f 20 74 31 20 53 45 4c 45  ERT INTO t1 SELE
0ef0: 43 54 20 61 2b 33 32 2c 20 72 61 6e 64 6f 6d 62  CT a+32, randomb
0f00: 6c 6f 62 28 34 30 30 29 2c 20 61 2b 33 32 2c 20  lob(400), a+32, 
0f10: 72 61 6e 64 6f 6d 62 6c 6f 62 28 34 30 30 29 20  randomblob(400) 
0f20: 46 52 4f 4d 20 74 31 3b 0a 20 20 49 4e 53 45 52  FROM t1;.  INSER
0f30: 54 20 49 4e 54 4f 20 74 31 20 53 45 4c 45 43 54  T INTO t1 SELECT
0f40: 20 61 2b 36 34 2c 20 72 61 6e 64 6f 6d 62 6c 6f   a+64, randomblo
0f50: 62 28 34 30 30 29 2c 20 61 2b 36 34 2c 20 72 61  b(400), a+64, ra
0f60: 6e 64 6f 6d 62 6c 6f 62 28 34 30 30 29 20 46 52  ndomblob(400) FR
0f70: 4f 4d 20 74 31 3b 0a 20 20 43 4f 4d 4d 49 54 3b  OM t1;.  COMMIT;
0f80: 0a 20 20 41 54 54 41 43 48 20 27 74 65 73 74 32  .  ATTACH 'test2
0f90: 2e 64 62 27 20 41 53 20 61 75 78 31 3b 0a 20 20  .db' AS aux1;.  
0fa0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 61 75 78  CREATE TABLE aux
0fb0: 31 2e 74 32 28 61 20 49 4e 54 45 47 45 52 20 50  1.t2(a INTEGER P
0fc0: 52 49 4d 41 52 59 20 4b 45 59 2c 20 62 2c 20 63  RIMARY KEY, b, c
0fd0: 2c 20 64 29 3b 0a 20 20 49 4e 53 45 52 54 20 49  , d);.  INSERT I
0fe0: 4e 54 4f 20 74 32 20 53 45 4c 45 43 54 20 2a 20  NTO t2 SELECT * 
0ff0: 46 52 4f 4d 20 74 31 3b 0a 20 20 44 45 54 41 43  FROM t1;.  DETAC
1000: 48 20 61 75 78 31 3b 0a 20 20 50 52 41 47 4d 41  H aux1;.  PRAGMA
1010: 20 63 61 63 68 65 5f 73 70 69 6c 6c 3d 4f 4e 3b   cache_spill=ON;
1020: 0a 7d 20 7b 7d 0a 73 71 6c 69 74 65 33 5f 72 65  .} {}.sqlite3_re
1030: 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 0a 23 0a 23  lease_memory.#.#
1040: 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d   EVIDENCE-OF: R-
1050: 30 37 36 33 34 2d 34 30 35 33 32 20 54 68 65 20  07634-40532 The 
1060: 63 61 63 68 65 5f 73 70 69 6c 6c 20 70 72 61 67  cache_spill prag
1070: 6d 61 20 65 6e 61 62 6c 65 73 20 6f 72 20 64 69  ma enables or di
1080: 73 61 62 6c 65 73 0a 23 20 74 68 65 20 61 62 69  sables.# the abi
1090: 6c 69 74 79 20 6f 66 20 74 68 65 20 70 61 67 65  lity of the page
10a0: 72 20 74 6f 20 73 70 69 6c 6c 20 64 69 72 74 79  r to spill dirty
10b0: 20 63 61 63 68 65 20 70 61 67 65 73 20 74 6f 20   cache pages to 
10c0: 74 68 65 20 64 61 74 61 62 61 73 65 0a 23 20 66  the database.# f
10d0: 69 6c 65 20 69 6e 20 74 68 65 20 6d 69 64 64 6c  ile in the middl
10e0: 65 20 6f 66 20 61 20 74 72 61 6e 73 61 63 74 69  e of a transacti
10f0: 6f 6e 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 70 72  on..#.do_test pr
1100: 61 67 6d 61 32 2d 34 2e 34 20 7b 0a 20 20 64 62  agma2-4.4 {.  db
1110: 20 65 76 61 6c 20 7b 0a 20 20 20 20 42 45 47 49   eval {.    BEGI
1120: 4e 3b 0a 20 20 20 20 55 50 44 41 54 45 20 74 31  N;.    UPDATE t1
1130: 20 53 45 54 20 63 3d 63 2b 31 3b 0a 20 20 20 20   SET c=c+1;.    
1140: 50 52 41 47 4d 41 20 6c 6f 63 6b 5f 73 74 61 74  PRAGMA lock_stat
1150: 75 73 3b 0a 20 20 7d 0a 7d 20 7b 6d 61 69 6e 20  us;.  }.} {main 
1160: 65 78 63 6c 75 73 69 76 65 20 74 65 6d 70 20 75  exclusive temp u
1170: 6e 6b 6e 6f 77 6e 7d 20 20 3b 23 20 45 58 43 4c  nknown}  ;# EXCL
1180: 55 53 49 56 45 20 6c 6f 63 6b 20 64 75 65 20 74  USIVE lock due t
1190: 6f 20 63 61 63 68 65 20 73 70 69 6c 6c 0a 64 6f  o cache spill.do
11a0: 5f 74 65 73 74 20 70 72 61 67 6d 61 32 2d 34 2e  _test pragma2-4.
11b0: 35 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a  5 {.  db eval {.
11c0: 20 20 20 20 43 4f 4d 4d 49 54 3b 0a 20 20 20 20      COMMIT;.    
11d0: 50 52 41 47 4d 41 20 63 61 63 68 65 5f 73 70 69  PRAGMA cache_spi
11e0: 6c 6c 3d 4f 46 46 3b 0a 20 20 20 20 42 45 47 49  ll=OFF;.    BEGI
11f0: 4e 3b 0a 20 20 20 20 55 50 44 41 54 45 20 74 31  N;.    UPDATE t1
1200: 20 53 45 54 20 63 3d 63 2d 31 3b 0a 20 20 20 20   SET c=c-1;.    
1210: 50 52 41 47 4d 41 20 6c 6f 63 6b 5f 73 74 61 74  PRAGMA lock_stat
1220: 75 73 3b 0a 20 20 7d 0a 7d 20 7b 6d 61 69 6e 20  us;.  }.} {main 
1230: 72 65 73 65 72 76 65 64 20 74 65 6d 70 20 75 6e  reserved temp un
1240: 6b 6e 6f 77 6e 7d 20 20 20 3b 23 20 4e 6f 20 63  known}   ;# No c
1250: 61 63 68 65 20 73 70 69 6c 6c 2c 20 73 6f 20 6e  ache spill, so n
1260: 6f 20 65 78 63 6c 75 73 69 76 65 20 6c 6f 63 6b  o exclusive lock
1270: 0a 0a 23 20 56 65 72 69 66 79 20 74 68 61 74 20  ..# Verify that 
1280: 6e 65 77 6c 79 20 61 74 74 61 63 68 65 64 20 64  newly attached d
1290: 61 74 61 62 61 73 65 73 20 69 6e 68 65 72 69 74  atabases inherit
12a0: 20 74 68 65 20 63 61 63 68 65 5f 73 70 69 6c 6c   the cache_spill
12b0: 3d 4f 46 46 0a 23 20 73 65 74 74 69 6e 67 2e 0a  =OFF.# setting..
12c0: 23 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  #.do_execsql_tes
12d0: 74 20 70 72 61 67 6d 61 32 2d 34 2e 36 20 7b 0a  t pragma2-4.6 {.
12e0: 20 20 43 4f 4d 4d 49 54 3b 0a 20 20 41 54 54 41    COMMIT;.  ATTA
12f0: 43 48 20 27 74 65 73 74 32 2e 64 62 27 20 41 53  CH 'test2.db' AS
1300: 20 61 75 78 31 3b 0a 20 20 50 52 41 47 4d 41 20   aux1;.  PRAGMA 
1310: 61 75 78 31 2e 63 61 63 68 65 5f 73 69 7a 65 3d  aux1.cache_size=
1320: 35 30 3b 0a 20 20 42 45 47 49 4e 3b 0a 20 20 55  50;.  BEGIN;.  U
1330: 50 44 41 54 45 20 74 32 20 53 45 54 20 63 3d 63  PDATE t2 SET c=c
1340: 2b 31 3b 0a 20 20 50 52 41 47 4d 41 20 6c 6f 63  +1;.  PRAGMA loc
1350: 6b 5f 73 74 61 74 75 73 3b 0a 7d 20 7b 6d 61 69  k_status;.} {mai
1360: 6e 20 75 6e 6c 6f 63 6b 65 64 20 74 65 6d 70 20  n unlocked temp 
1370: 75 6e 6b 6e 6f 77 6e 20 61 75 78 31 20 72 65 73  unknown aux1 res
1380: 65 72 76 65 64 7d 0a 64 6f 5f 65 78 65 63 73 71  erved}.do_execsq
1390: 6c 5f 74 65 73 74 20 70 72 61 67 6d 61 32 2d 34  l_test pragma2-4
13a0: 2e 37 20 7b 0a 20 20 43 4f 4d 4d 49 54 3b 0a 7d  .7 {.  COMMIT;.}
13b0: 0a 73 71 6c 69 74 65 33 5f 72 65 6c 65 61 73 65  .sqlite3_release
13c0: 5f 6d 65 6d 6f 72 79 0a 64 6f 5f 65 78 65 63 73  _memory.do_execs
13d0: 71 6c 5f 74 65 73 74 20 70 72 61 67 6d 61 32 2d  ql_test pragma2-
13e0: 34 2e 38 20 7b 0a 20 20 50 52 41 47 4d 41 20 63  4.8 {.  PRAGMA c
13f0: 61 63 68 65 5f 73 70 69 6c 6c 3d 4f 4e 3b 20 2d  ache_spill=ON; -
1400: 2d 20 41 70 70 6c 69 65 73 20 74 6f 20 61 6c 6c  - Applies to all
1410: 20 64 61 74 61 62 61 73 65 73 0a 20 20 42 45 47   databases.  BEG
1420: 49 4e 3b 0a 20 20 55 50 44 41 54 45 20 74 32 20  IN;.  UPDATE t2 
1430: 53 45 54 20 63 3d 63 2d 31 3b 0a 20 20 50 52 41  SET c=c-1;.  PRA
1440: 47 4d 41 20 6c 6f 63 6b 5f 73 74 61 74 75 73 3b  GMA lock_status;
1450: 0a 7d 20 7b 6d 61 69 6e 20 75 6e 6c 6f 63 6b 65  .} {main unlocke
1460: 64 20 74 65 6d 70 20 75 6e 6b 6e 6f 77 6e 20 61  d temp unknown a
1470: 75 78 31 20 65 78 63 6c 75 73 69 76 65 7d 0a 20  ux1 exclusive}. 
1480: 20 20 0a 0a 66 69 6e 69 73 68 5f 74 65 73 74 0a    ..finish_test.