/ Hex Artifact Content
Login

Artifact 0f299601c3b15e8941eb48d2f7a43e6678e3f735:


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 2e 74 65 73 74 2c 76 20 31   pragma.test,v 1
01f0: 2e 37 30 20 32 30 30 38 2f 31 31 2f 32 31 20 30  .70 2008/11/21 0
0200: 30 3a 31 30 3a 33 35 20 61 73 77 69 66 74 20 45  0:10:35 aswift E
0210: 78 70 20 24 0a 0a 73 65 74 20 74 65 73 74 64 69  xp $..set testdi
0220: 72 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20  r [file dirname 
0230: 24 61 72 67 76 30 5d 0a 73 6f 75 72 63 65 20 24  $argv0].source $
0240: 74 65 73 74 64 69 72 2f 74 65 73 74 65 72 2e 74  testdir/tester.t
0250: 63 6c 0a 0a 23 20 54 65 73 74 20 6f 72 67 61 6e  cl..# Test organ
0260: 69 7a 61 74 69 6f 6e 3a 0a 23 0a 23 20 70 72 61  ization:.#.# pra
0270: 67 6d 61 2d 31 2e 2a 3a 20 54 65 73 74 20 63 61  gma-1.*: Test ca
0280: 63 68 65 5f 73 69 7a 65 2c 20 64 65 66 61 75 6c  che_size, defaul
0290: 74 5f 63 61 63 68 65 5f 73 69 7a 65 20 61 6e 64  t_cache_size and
02a0: 20 73 79 6e 63 68 72 6f 6e 6f 75 73 20 6f 6e 20   synchronous on 
02b0: 6d 61 69 6e 20 64 62 2e 0a 23 20 70 72 61 67 6d  main db..# pragm
02c0: 61 2d 32 2e 2a 3a 20 54 65 73 74 20 73 79 6e 63  a-2.*: Test sync
02d0: 68 72 6f 6e 6f 75 73 20 6f 6e 20 61 74 74 61 63  hronous on attac
02e0: 68 65 64 20 64 62 2e 0a 23 20 70 72 61 67 6d 61  hed db..# pragma
02f0: 2d 33 2e 2a 3a 20 54 65 73 74 20 64 65 74 65 63  -3.*: Test detec
0300: 74 69 6f 6e 20 6f 66 20 74 61 62 6c 65 2f 69 6e  tion of table/in
0310: 64 65 78 20 69 6e 63 6f 6e 73 69 73 74 65 6e 63  dex inconsistenc
0320: 79 20 62 79 20 69 6e 74 65 67 72 69 74 79 5f 63  y by integrity_c
0330: 68 65 63 6b 2e 0a 23 20 70 72 61 67 6d 61 2d 34  heck..# pragma-4
0340: 2e 2a 3a 20 54 65 73 74 20 63 61 63 68 65 5f 73  .*: Test cache_s
0350: 69 7a 65 20 61 6e 64 20 64 65 66 61 75 6c 74 5f  ize and default_
0360: 63 61 63 68 65 5f 73 69 7a 65 20 6f 6e 20 61 74  cache_size on at
0370: 74 61 63 68 65 64 20 64 62 2e 0a 23 20 70 72 61  tached db..# pra
0380: 67 6d 61 2d 35 2e 2a 3a 20 54 65 73 74 20 74 68  gma-5.*: Test th
0390: 61 74 20 70 72 61 67 6d 61 20 73 79 6e 63 68 72  at pragma synchr
03a0: 6f 6e 6f 75 73 20 6d 61 79 20 6e 6f 74 20 62 65  onous may not be
03b0: 20 75 73 65 64 20 69 6e 73 69 64 65 20 6f 66 20   used inside of 
03c0: 61 0a 23 20 20 20 20 20 20 20 20 20 20 20 20 20  a.#             
03d0: 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 23 20 70  transaction..# p
03e0: 72 61 67 6d 61 2d 36 2e 2a 3a 20 54 65 73 74 20  ragma-6.*: Test 
03f0: 73 63 68 65 6d 61 2d 71 75 65 72 79 20 70 72 61  schema-query pra
0400: 67 6d 61 73 2e 0a 23 20 70 72 61 67 6d 61 2d 37  gmas..# pragma-7
0410: 2e 2a 3a 20 4d 69 73 63 65 6c 6c 61 6e 65 6f 75  .*: Miscellaneou
0420: 73 20 74 65 73 74 73 2e 0a 23 20 70 72 61 67 6d  s tests..# pragm
0430: 61 2d 38 2e 2a 3a 20 54 65 73 74 20 75 73 65 72  a-8.*: Test user
0440: 5f 76 65 72 73 69 6f 6e 20 61 6e 64 20 73 63 68  _version and sch
0450: 65 6d 61 5f 76 65 72 73 69 6f 6e 20 70 72 61 67  ema_version prag
0460: 6d 61 73 2e 0a 23 20 70 72 61 67 6d 61 2d 39 2e  mas..# pragma-9.
0470: 2a 3a 20 54 65 73 74 20 74 65 6d 70 5f 73 74 6f  *: Test temp_sto
0480: 72 65 20 61 6e 64 20 74 65 6d 70 5f 73 74 6f 72  re and temp_stor
0490: 65 5f 64 69 72 65 63 74 6f 72 79 2e 0a 23 20 70  e_directory..# p
04a0: 72 61 67 6d 61 2d 31 30 2e 2a 3a 20 54 65 73 74  ragma-10.*: Test
04b0: 20 74 68 65 20 63 6f 75 6e 74 5f 63 68 61 6e 67   the count_chang
04c0: 65 73 20 70 72 61 67 6d 61 20 69 6e 20 74 68 65  es pragma in the
04d0: 20 70 72 65 73 65 6e 63 65 20 6f 66 20 74 72 69   presence of tri
04e0: 67 67 65 72 73 2e 0a 23 20 70 72 61 67 6d 61 2d  ggers..# pragma-
04f0: 31 31 2e 2a 3a 20 54 65 73 74 20 74 68 65 20 63  11.*: Test the c
0500: 6f 6c 6c 61 74 69 6f 6e 5f 6c 69 73 74 20 70 72  ollation_list pr
0510: 61 67 6d 61 2e 0a 23 20 70 72 61 67 6d 61 2d 31  agma..# pragma-1
0520: 34 2e 2a 3a 20 54 65 73 74 20 74 68 65 20 70 61  4.*: Test the pa
0530: 67 65 5f 63 6f 75 6e 74 20 70 72 61 67 6d 61 2e  ge_count pragma.
0540: 0a 23 20 70 72 61 67 6d 61 2d 31 35 2e 2a 3a 20  .# pragma-15.*: 
0550: 54 65 73 74 20 74 68 61 74 20 74 68 65 20 76 61  Test that the va
0560: 6c 75 65 20 73 65 74 20 75 73 69 6e 67 20 74 68  lue set using th
0570: 65 20 63 61 63 68 65 5f 73 69 7a 65 20 70 72 61  e cache_size pra
0580: 67 6d 61 20 69 73 20 6e 6f 74 0a 23 20 20 20 20  gma is not.#    
0590: 20 20 20 20 20 20 20 20 20 20 72 65 73 65 74 20            reset 
05a0: 77 68 65 6e 20 74 68 65 20 73 63 68 65 6d 61 20  when the schema 
05b0: 69 73 20 72 65 6c 6f 61 64 65 64 2e 0a 23 20 70  is reloaded..# p
05c0: 72 61 67 6d 61 2d 31 36 2e 2a 3a 20 54 65 73 74  ragma-16.*: Test
05d0: 20 70 72 6f 78 79 20 6c 6f 63 6b 69 6e 67 0a 23   proxy locking.#
05e0: 0a 0a 69 66 63 61 70 61 62 6c 65 20 21 70 72 61  ..ifcapable !pra
05f0: 67 6d 61 20 7b 0a 20 20 66 69 6e 69 73 68 5f 74  gma {.  finish_t
0600: 65 73 74 0a 20 20 72 65 74 75 72 6e 0a 7d 0a 0a  est.  return.}..
0610: 23 20 44 65 6c 65 74 65 20 74 68 65 20 70 72 65  # Delete the pre
0620: 65 78 69 73 74 69 6e 67 20 64 61 74 61 62 61 73  existing databas
0630: 65 20 74 6f 20 61 76 6f 69 64 20 74 68 65 20 73  e to avoid the s
0640: 70 65 63 69 61 6c 20 73 65 74 75 70 0a 23 20 74  pecial setup.# t
0650: 68 61 74 20 74 68 65 20 22 61 6c 6c 2e 74 65 73  hat the "all.tes
0660: 74 22 20 73 63 72 69 70 74 20 64 6f 65 73 2e 0a  t" script does..
0670: 23 0a 64 62 20 63 6c 6f 73 65 0a 66 69 6c 65 20  #.db close.file 
0680: 64 65 6c 65 74 65 20 74 65 73 74 2e 64 62 20 74  delete test.db t
0690: 65 73 74 2e 64 62 2d 6a 6f 75 72 6e 61 6c 0a 66  est.db-journal.f
06a0: 69 6c 65 20 64 65 6c 65 74 65 20 74 65 73 74 33  ile delete test3
06b0: 2e 64 62 20 74 65 73 74 33 2e 64 62 2d 6a 6f 75  .db test3.db-jou
06c0: 72 6e 61 6c 0a 73 71 6c 69 74 65 33 20 64 62 20  rnal.sqlite3 db 
06d0: 74 65 73 74 2e 64 62 3b 20 73 65 74 20 44 42 20  test.db; set DB 
06e0: 5b 73 71 6c 69 74 65 33 5f 63 6f 6e 6e 65 63 74  [sqlite3_connect
06f0: 69 6f 6e 5f 70 6f 69 6e 74 65 72 20 64 62 5d 0a  ion_pointer db].
0700: 0a 0a 69 66 63 61 70 61 62 6c 65 20 70 61 67 65  ..ifcapable page
0710: 72 5f 70 72 61 67 6d 61 73 20 7b 0a 73 65 74 20  r_pragmas {.set 
0720: 44 46 4c 54 5f 43 41 43 48 45 5f 53 5a 20 5b 64  DFLT_CACHE_SZ [d
0730: 62 20 6f 6e 65 20 7b 50 52 41 47 4d 41 20 64 65  b one {PRAGMA de
0740: 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65  fault_cache_size
0750: 7d 5d 0a 73 65 74 20 54 45 4d 50 5f 43 41 43 48  }].set TEMP_CACH
0760: 45 5f 53 5a 20 5b 64 62 20 6f 6e 65 20 7b 50 52  E_SZ [db one {PR
0770: 41 47 4d 41 20 74 65 6d 70 2e 64 65 66 61 75 6c  AGMA temp.defaul
0780: 74 5f 63 61 63 68 65 5f 73 69 7a 65 7d 5d 0a 64  t_cache_size}].d
0790: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 2e  o_test pragma-1.
07a0: 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  1 {.  execsql {.
07b0: 20 20 20 20 50 52 41 47 4d 41 20 63 61 63 68 65      PRAGMA cache
07c0: 5f 73 69 7a 65 3b 0a 20 20 20 20 50 52 41 47 4d  _size;.    PRAGM
07d0: 41 20 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f  A default_cache_
07e0: 73 69 7a 65 3b 0a 20 20 20 20 50 52 41 47 4d 41  size;.    PRAGMA
07f0: 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20 20   synchronous;.  
0800: 7d 0a 7d 20 5b 6c 69 73 74 20 24 44 46 4c 54 5f  }.} [list $DFLT_
0810: 43 41 43 48 45 5f 53 5a 20 24 44 46 4c 54 5f 43  CACHE_SZ $DFLT_C
0820: 41 43 48 45 5f 53 5a 20 32 5d 0a 64 6f 5f 74 65  ACHE_SZ 2].do_te
0830: 73 74 20 70 72 61 67 6d 61 2d 31 2e 32 20 7b 0a  st pragma-1.2 {.
0840: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
0850: 50 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f  PRAGMA synchrono
0860: 75 73 3d 4f 46 46 3b 0a 20 20 20 20 50 52 41 47  us=OFF;.    PRAG
0870: 4d 41 20 63 61 63 68 65 5f 73 69 7a 65 3d 31 32  MA cache_size=12
0880: 33 34 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 63  34;.    PRAGMA c
0890: 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 50  ache_size;.    P
08a0: 52 41 47 4d 41 20 64 65 66 61 75 6c 74 5f 63 61  RAGMA default_ca
08b0: 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 50 52  che_size;.    PR
08c0: 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73  AGMA synchronous
08d0: 3b 0a 20 20 7d 0a 7d 20 5b 6c 69 73 74 20 31 32  ;.  }.} [list 12
08e0: 33 34 20 24 44 46 4c 54 5f 43 41 43 48 45 5f 53  34 $DFLT_CACHE_S
08f0: 5a 20 30 5d 0a 64 6f 5f 74 65 73 74 20 70 72 61  Z 0].do_test pra
0900: 67 6d 61 2d 31 2e 33 20 7b 0a 20 20 64 62 20 63  gma-1.3 {.  db c
0910: 6c 6f 73 65 0a 20 20 73 71 6c 69 74 65 33 20 64  lose.  sqlite3 d
0920: 62 20 74 65 73 74 2e 64 62 0a 20 20 65 78 65 63  b test.db.  exec
0930: 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41  sql {.    PRAGMA
0940: 20 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20   cache_size;.   
0950: 20 50 52 41 47 4d 41 20 64 65 66 61 75 6c 74 5f   PRAGMA default_
0960: 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20  cache_size;.    
0970: 50 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f  PRAGMA synchrono
0980: 75 73 3b 0a 20 20 7d 0a 7d 20 5b 6c 69 73 74 20  us;.  }.} [list 
0990: 24 44 46 4c 54 5f 43 41 43 48 45 5f 53 5a 20 24  $DFLT_CACHE_SZ $
09a0: 44 46 4c 54 5f 43 41 43 48 45 5f 53 5a 20 32 5d  DFLT_CACHE_SZ 2]
09b0: 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d  .do_test pragma-
09c0: 31 2e 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  1.4 {.  execsql 
09d0: 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 73 79 6e  {.    PRAGMA syn
09e0: 63 68 72 6f 6e 6f 75 73 3d 4f 46 46 3b 0a 20 20  chronous=OFF;.  
09f0: 20 20 50 52 41 47 4d 41 20 63 61 63 68 65 5f 73    PRAGMA cache_s
0a00: 69 7a 65 3b 0a 20 20 20 20 50 52 41 47 4d 41 20  ize;.    PRAGMA 
0a10: 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69  default_cache_si
0a20: 7a 65 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 73  ze;.    PRAGMA s
0a30: 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20 20 7d 0a  ynchronous;.  }.
0a40: 7d 20 5b 6c 69 73 74 20 24 44 46 4c 54 5f 43 41  } [list $DFLT_CA
0a50: 43 48 45 5f 53 5a 20 24 44 46 4c 54 5f 43 41 43  CHE_SZ $DFLT_CAC
0a60: 48 45 5f 53 5a 20 30 5d 0a 64 6f 5f 74 65 73 74  HE_SZ 0].do_test
0a70: 20 70 72 61 67 6d 61 2d 31 2e 35 20 7b 0a 20 20   pragma-1.5 {.  
0a80: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52  execsql {.    PR
0a90: 41 47 4d 41 20 63 61 63 68 65 5f 73 69 7a 65 3d  AGMA cache_size=
0aa0: 34 33 32 31 3b 0a 20 20 20 20 50 52 41 47 4d 41  4321;.    PRAGMA
0ab0: 20 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20   cache_size;.   
0ac0: 20 50 52 41 47 4d 41 20 64 65 66 61 75 6c 74 5f   PRAGMA default_
0ad0: 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20  cache_size;.    
0ae0: 50 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f  PRAGMA synchrono
0af0: 75 73 3b 0a 20 20 7d 0a 7d 20 5b 6c 69 73 74 20  us;.  }.} [list 
0b00: 34 33 32 31 20 24 44 46 4c 54 5f 43 41 43 48 45  4321 $DFLT_CACHE
0b10: 5f 53 5a 20 30 5d 0a 64 6f 5f 74 65 73 74 20 70  _SZ 0].do_test p
0b20: 72 61 67 6d 61 2d 31 2e 36 20 7b 0a 20 20 65 78  ragma-1.6 {.  ex
0b30: 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47  ecsql {.    PRAG
0b40: 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3d 4f  MA synchronous=O
0b50: 4e 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 63 61  N;.    PRAGMA ca
0b60: 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 50 52  che_size;.    PR
0b70: 41 47 4d 41 20 64 65 66 61 75 6c 74 5f 63 61 63  AGMA default_cac
0b80: 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 50 52 41  he_size;.    PRA
0b90: 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3b  GMA synchronous;
0ba0: 0a 20 20 7d 0a 7d 20 5b 6c 69 73 74 20 34 33 32  .  }.} [list 432
0bb0: 31 20 24 44 46 4c 54 5f 43 41 43 48 45 5f 53 5a  1 $DFLT_CACHE_SZ
0bc0: 20 31 5d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67   1].do_test prag
0bd0: 6d 61 2d 31 2e 37 20 7b 0a 20 20 64 62 20 63 6c  ma-1.7 {.  db cl
0be0: 6f 73 65 0a 20 20 73 71 6c 69 74 65 33 20 64 62  ose.  sqlite3 db
0bf0: 20 74 65 73 74 2e 64 62 0a 20 20 65 78 65 63 73   test.db.  execs
0c00: 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20  ql {.    PRAGMA 
0c10: 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20  cache_size;.    
0c20: 50 52 41 47 4d 41 20 64 65 66 61 75 6c 74 5f 63  PRAGMA default_c
0c30: 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 50  ache_size;.    P
0c40: 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75  RAGMA synchronou
0c50: 73 3b 0a 20 20 7d 0a 7d 20 5b 6c 69 73 74 20 24  s;.  }.} [list $
0c60: 44 46 4c 54 5f 43 41 43 48 45 5f 53 5a 20 24 44  DFLT_CACHE_SZ $D
0c70: 46 4c 54 5f 43 41 43 48 45 5f 53 5a 20 32 5d 0a  FLT_CACHE_SZ 2].
0c80: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31  do_test pragma-1
0c90: 2e 38 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .8 {.  execsql {
0ca0: 0a 20 20 20 20 50 52 41 47 4d 41 20 64 65 66 61  .    PRAGMA defa
0cb0: 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65 3d 31  ult_cache_size=1
0cc0: 32 33 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 63  23;.    PRAGMA c
0cd0: 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 50  ache_size;.    P
0ce0: 52 41 47 4d 41 20 64 65 66 61 75 6c 74 5f 63 61  RAGMA default_ca
0cf0: 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 50 52  che_size;.    PR
0d00: 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73  AGMA synchronous
0d10: 3b 0a 20 20 7d 0a 7d 20 7b 31 32 33 20 31 32 33  ;.  }.} {123 123
0d20: 20 32 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67   2}.do_test prag
0d30: 6d 61 2d 31 2e 39 2e 31 20 7b 0a 20 20 64 62 20  ma-1.9.1 {.  db 
0d40: 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74 65 33 20  close.  sqlite3 
0d50: 64 62 20 74 65 73 74 2e 64 62 3b 20 73 65 74 20  db test.db; set 
0d60: 3a 3a 44 42 20 5b 73 71 6c 69 74 65 33 5f 63 6f  ::DB [sqlite3_co
0d70: 6e 6e 65 63 74 69 6f 6e 5f 70 6f 69 6e 74 65 72  nnection_pointer
0d80: 20 64 62 5d 0a 20 20 65 78 65 63 73 71 6c 20 7b   db].  execsql {
0d90: 0a 20 20 20 20 50 52 41 47 4d 41 20 63 61 63 68  .    PRAGMA cach
0da0: 65 5f 73 69 7a 65 3b 0a 20 20 20 20 50 52 41 47  e_size;.    PRAG
0db0: 4d 41 20 64 65 66 61 75 6c 74 5f 63 61 63 68 65  MA default_cache
0dc0: 5f 73 69 7a 65 3b 0a 20 20 20 20 50 52 41 47 4d  _size;.    PRAGM
0dd0: 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20  A synchronous;. 
0de0: 20 7d 0a 7d 20 7b 31 32 33 20 31 32 33 20 32 7d   }.} {123 123 2}
0df0: 0a 69 66 63 61 70 61 62 6c 65 20 76 61 63 75 75  .ifcapable vacuu
0e00: 6d 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 70 72  m {.  do_test pr
0e10: 61 67 6d 61 2d 31 2e 39 2e 32 20 7b 0a 20 20 20  agma-1.9.2 {.   
0e20: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20   execsql {.     
0e30: 20 56 41 43 55 55 4d 3b 0a 20 20 20 20 20 20 50   VACUUM;.      P
0e40: 52 41 47 4d 41 20 63 61 63 68 65 5f 73 69 7a 65  RAGMA cache_size
0e50: 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 64  ;.      PRAGMA d
0e60: 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a  efault_cache_siz
0e70: 65 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20  e;.      PRAGMA 
0e80: 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20 20 20  synchronous;.   
0e90: 20 7d 0a 20 20 7d 20 7b 31 32 33 20 31 32 33 20   }.  } {123 123 
0ea0: 32 7d 0a 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61  2}.}.do_test pra
0eb0: 67 6d 61 2d 31 2e 31 30 20 7b 0a 20 20 65 78 65  gma-1.10 {.  exe
0ec0: 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d  csql {.    PRAGM
0ed0: 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3d 4e 4f  A synchronous=NO
0ee0: 52 4d 41 4c 3b 0a 20 20 20 20 50 52 41 47 4d 41  RMAL;.    PRAGMA
0ef0: 20 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20   cache_size;.   
0f00: 20 50 52 41 47 4d 41 20 64 65 66 61 75 6c 74 5f   PRAGMA default_
0f10: 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20  cache_size;.    
0f20: 50 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f  PRAGMA synchrono
0f30: 75 73 3b 0a 20 20 7d 0a 7d 20 7b 31 32 33 20 31  us;.  }.} {123 1
0f40: 32 33 20 31 7d 0a 64 6f 5f 74 65 73 74 20 70 72  23 1}.do_test pr
0f50: 61 67 6d 61 2d 31 2e 31 31 20 7b 0a 20 20 65 78  agma-1.11 {.  ex
0f60: 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47  ecsql {.    PRAG
0f70: 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3d 46  MA synchronous=F
0f80: 55 4c 4c 3b 0a 20 20 20 20 50 52 41 47 4d 41 20  ULL;.    PRAGMA 
0f90: 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20  cache_size;.    
0fa0: 50 52 41 47 4d 41 20 64 65 66 61 75 6c 74 5f 63  PRAGMA default_c
0fb0: 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 50  ache_size;.    P
0fc0: 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75  RAGMA synchronou
0fd0: 73 3b 0a 20 20 7d 0a 7d 20 7b 31 32 33 20 31 32  s;.  }.} {123 12
0fe0: 33 20 32 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61  3 2}.do_test pra
0ff0: 67 6d 61 2d 31 2e 31 32 20 7b 0a 20 20 64 62 20  gma-1.12 {.  db 
1000: 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74 65 33 20  close.  sqlite3 
1010: 64 62 20 74 65 73 74 2e 64 62 3b 20 73 65 74 20  db test.db; set 
1020: 3a 3a 44 42 20 5b 73 71 6c 69 74 65 33 5f 63 6f  ::DB [sqlite3_co
1030: 6e 6e 65 63 74 69 6f 6e 5f 70 6f 69 6e 74 65 72  nnection_pointer
1040: 20 64 62 5d 0a 20 20 65 78 65 63 73 71 6c 20 7b   db].  execsql {
1050: 0a 20 20 20 20 50 52 41 47 4d 41 20 63 61 63 68  .    PRAGMA cach
1060: 65 5f 73 69 7a 65 3b 0a 20 20 20 20 50 52 41 47  e_size;.    PRAG
1070: 4d 41 20 64 65 66 61 75 6c 74 5f 63 61 63 68 65  MA default_cache
1080: 5f 73 69 7a 65 3b 0a 20 20 20 20 50 52 41 47 4d  _size;.    PRAGM
1090: 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20  A synchronous;. 
10a0: 20 7d 0a 7d 20 7b 31 32 33 20 31 32 33 20 32 7d   }.} {123 123 2}
10b0: 0a 0a 23 20 4d 61 6b 65 20 73 75 72 65 20 74 68  ..# Make sure th
10c0: 65 20 70 72 61 67 6d 61 20 68 61 6e 64 6c 65 72  e pragma handler
10d0: 20 75 6e 64 65 72 73 74 61 6e 64 73 20 6e 75 6d   understands num
10e0: 65 72 69 63 20 76 61 6c 75 65 73 20 69 6e 20 61  eric values in a
10f0: 64 64 69 74 69 6f 6e 0a 23 20 74 6f 20 6b 65 79  ddition.# to key
1100: 77 6f 72 64 73 20 6c 69 6b 65 20 22 6f 66 66 22  words like "off"
1110: 20 61 6e 64 20 22 66 75 6c 6c 22 2e 0a 23 0a 64   and "full"..#.d
1120: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 2e  o_test pragma-1.
1130: 31 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  13 {.  execsql {
1140: 0a 20 20 20 20 50 52 41 47 4d 41 20 73 79 6e 63  .    PRAGMA sync
1150: 68 72 6f 6e 6f 75 73 3d 30 3b 0a 20 20 20 20 50  hronous=0;.    P
1160: 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75  RAGMA synchronou
1170: 73 3b 0a 20 20 7d 0a 7d 20 7b 30 7d 0a 64 6f 5f  s;.  }.} {0}.do_
1180: 74 65 73 74 20 70 72 61 67 6d 61 2d 31 2e 31 34  test pragma-1.14
1190: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
11a0: 20 20 20 50 52 41 47 4d 41 20 73 79 6e 63 68 72     PRAGMA synchr
11b0: 6f 6e 6f 75 73 3d 32 3b 0a 20 20 20 20 50 52 41  onous=2;.    PRA
11c0: 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3b  GMA synchronous;
11d0: 0a 20 20 7d 0a 7d 20 7b 32 7d 0a 7d 20 3b 23 20  .  }.} {2}.} ;# 
11e0: 69 66 63 61 70 61 62 6c 65 20 70 61 67 65 72 5f  ifcapable pager_
11f0: 70 72 61 67 6d 61 73 0a 0a 23 20 54 65 73 74 20  pragmas..# Test 
1200: 74 75 72 6e 69 6e 67 20 22 66 6c 61 67 22 20 70  turning "flag" p
1210: 72 61 67 6d 61 73 20 6f 6e 20 61 6e 64 20 6f 66  ragmas on and of
1220: 66 2e 0a 23 0a 69 66 63 61 70 61 62 6c 65 20 64  f..#.ifcapable d
1230: 65 62 75 67 20 7b 0a 20 20 23 20 50 72 61 67 6d  ebug {.  # Pragm
1240: 61 20 22 76 64 62 65 5f 6c 69 73 74 69 6e 67 22  a "vdbe_listing"
1250: 20 69 73 20 6f 6e 6c 79 20 61 76 61 69 6c 61 62   is only availab
1260: 6c 65 20 69 66 20 63 6f 6d 70 69 6c 65 64 20 77  le if compiled w
1270: 69 74 68 20 53 51 4c 49 54 45 5f 44 45 42 55 47  ith SQLITE_DEBUG
1280: 0a 20 20 23 0a 20 20 64 6f 5f 74 65 73 74 20 70  .  #.  do_test p
1290: 72 61 67 6d 61 2d 31 2e 31 35 20 7b 0a 20 20 20  ragma-1.15 {.   
12a0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20   execsql {.     
12b0: 20 50 52 41 47 4d 41 20 76 64 62 65 5f 6c 69 73   PRAGMA vdbe_lis
12c0: 74 69 6e 67 3d 59 45 53 3b 0a 20 20 20 20 20 20  ting=YES;.      
12d0: 50 52 41 47 4d 41 20 76 64 62 65 5f 6c 69 73 74  PRAGMA vdbe_list
12e0: 69 6e 67 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b  ing;.    }.  } {
12f0: 31 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61  1}.  do_test pra
1300: 67 6d 61 2d 31 2e 31 36 20 7b 0a 20 20 20 20 65  gma-1.16 {.    e
1310: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50  xecsql {.      P
1320: 52 41 47 4d 41 20 76 64 62 65 5f 6c 69 73 74 69  RAGMA vdbe_listi
1330: 6e 67 3d 4e 4f 3b 0a 20 20 20 20 20 20 50 52 41  ng=NO;.      PRA
1340: 47 4d 41 20 76 64 62 65 5f 6c 69 73 74 69 6e 67  GMA vdbe_listing
1350: 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 30 7d 0a  ;.    }.  } {0}.
1360: 7d 0a 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  }..do_test pragm
1370: 61 2d 31 2e 31 37 20 7b 0a 20 20 65 78 65 63 73  a-1.17 {.  execs
1380: 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20  ql {.    PRAGMA 
1390: 70 61 72 73 65 72 5f 74 72 61 63 65 3d 4f 4e 3b  parser_trace=ON;
13a0: 0a 20 20 20 20 50 52 41 47 4d 41 20 70 61 72 73  .    PRAGMA pars
13b0: 65 72 5f 74 72 61 63 65 3d 4f 46 46 3b 0a 20 20  er_trace=OFF;.  
13c0: 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 70  }.} {}.do_test p
13d0: 72 61 67 6d 61 2d 31 2e 31 38 20 7b 0a 20 20 65  ragma-1.18 {.  e
13e0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41  xecsql {.    PRA
13f0: 47 4d 41 20 62 6f 67 75 73 20 3d 20 2d 31 32 33  GMA bogus = -123
1400: 34 3b 20 20 2d 2d 20 50 61 72 73 69 6e 67 20 6f  4;  -- Parsing o
1410: 66 20 6e 65 67 61 74 69 76 65 20 76 61 6c 75 65  f negative value
1420: 73 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a 23 20 54 65  s.  }.} {}..# Te
1430: 73 74 20 6d 6f 64 69 66 79 69 6e 67 20 74 68 65  st modifying the
1440: 20 73 61 66 65 74 79 5f 6c 65 76 65 6c 20 6f 66   safety_level of
1450: 20 61 6e 20 61 74 74 61 63 68 65 64 20 64 61 74   an attached dat
1460: 61 62 61 73 65 2e 0a 69 66 63 61 70 61 62 6c 65  abase..ifcapable
1470: 20 70 61 67 65 72 5f 70 72 61 67 6d 61 73 26 26   pager_pragmas&&
1480: 61 74 74 61 63 68 20 7b 0a 20 20 64 6f 5f 74 65  attach {.  do_te
1490: 73 74 20 70 72 61 67 6d 61 2d 32 2e 31 20 7b 0a  st pragma-2.1 {.
14a0: 20 20 20 20 66 69 6c 65 20 64 65 6c 65 74 65 20      file delete 
14b0: 2d 66 6f 72 63 65 20 74 65 73 74 32 2e 64 62 0a  -force test2.db.
14c0: 20 20 20 20 66 69 6c 65 20 64 65 6c 65 74 65 20      file delete 
14d0: 2d 66 6f 72 63 65 20 74 65 73 74 32 2e 64 62 2d  -force test2.db-
14e0: 6a 6f 75 72 6e 61 6c 0a 20 20 20 20 65 78 65 63  journal.    exec
14f0: 73 71 6c 20 7b 0a 20 20 20 20 20 20 41 54 54 41  sql {.      ATTA
1500: 43 48 20 27 74 65 73 74 32 2e 64 62 27 20 41 53  CH 'test2.db' AS
1510: 20 61 75 78 3b 0a 20 20 20 20 7d 20 0a 20 20 7d   aux;.    } .  }
1520: 20 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72   {}.  do_test pr
1530: 61 67 6d 61 2d 32 2e 32 20 7b 0a 20 20 20 20 65  agma-2.2 {.    e
1540: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 70  xecsql {.      p
1550: 72 61 67 6d 61 20 61 75 78 2e 73 79 6e 63 68 72  ragma aux.synchr
1560: 6f 6e 6f 75 73 3b 0a 20 20 20 20 7d 20 0a 20 20  onous;.    } .  
1570: 7d 20 7b 32 7d 0a 20 20 64 6f 5f 74 65 73 74 20  } {2}.  do_test 
1580: 70 72 61 67 6d 61 2d 32 2e 33 20 7b 0a 20 20 20  pragma-2.3 {.   
1590: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20   execsql {.     
15a0: 20 70 72 61 67 6d 61 20 61 75 78 2e 73 79 6e 63   pragma aux.sync
15b0: 68 72 6f 6e 6f 75 73 20 3d 20 4f 46 46 3b 0a 20  hronous = OFF;. 
15c0: 20 20 20 20 20 70 72 61 67 6d 61 20 61 75 78 2e       pragma aux.
15d0: 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20 20 20  synchronous;.   
15e0: 20 20 20 70 72 61 67 6d 61 20 73 79 6e 63 68 72     pragma synchr
15f0: 6f 6e 6f 75 73 3b 0a 20 20 20 20 7d 20 0a 20 20  onous;.    } .  
1600: 7d 20 7b 30 20 32 7d 0a 20 20 64 6f 5f 74 65 73  } {0 2}.  do_tes
1610: 74 20 70 72 61 67 6d 61 2d 32 2e 34 20 7b 0a 20  t pragma-2.4 {. 
1620: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
1630: 20 20 20 70 72 61 67 6d 61 20 61 75 78 2e 73 79     pragma aux.sy
1640: 6e 63 68 72 6f 6e 6f 75 73 20 3d 20 4f 4e 3b 0a  nchronous = ON;.
1650: 20 20 20 20 20 20 70 72 61 67 6d 61 20 73 79 6e        pragma syn
1660: 63 68 72 6f 6e 6f 75 73 3b 0a 20 20 20 20 20 20  chronous;.      
1670: 70 72 61 67 6d 61 20 61 75 78 2e 73 79 6e 63 68  pragma aux.synch
1680: 72 6f 6e 6f 75 73 3b 0a 20 20 20 20 7d 20 0a 20  ronous;.    } . 
1690: 20 7d 20 7b 32 20 31 7d 0a 7d 20 3b 23 20 69 66   } {2 1}.} ;# if
16a0: 63 61 70 61 62 6c 65 20 70 61 67 65 72 5f 70 72  capable pager_pr
16b0: 61 67 6d 61 73 0a 0a 23 20 43 6f 6e 73 74 72 75  agmas..# Constru
16c0: 63 74 20 61 20 63 6f 72 72 75 70 74 65 64 20 69  ct a corrupted i
16d0: 6e 64 65 78 20 61 6e 64 20 6d 61 6b 65 20 73 75  ndex and make su
16e0: 72 65 20 74 68 65 20 69 6e 74 65 67 72 69 74 79  re the integrity
16f0: 5f 63 68 65 63 6b 0a 23 20 70 72 61 67 6d 61 20  _check.# pragma 
1700: 66 69 6e 64 73 20 69 74 2e 0a 23 0a 23 20 54 68  finds it..#.# Th
1710: 65 73 65 20 74 65 73 74 73 20 77 6f 6e 27 74 20  ese tests won't 
1720: 77 6f 72 6b 20 69 66 20 74 68 65 20 64 61 74 61  work if the data
1730: 62 61 73 65 20 69 73 20 65 6e 63 72 79 70 74 65  base is encrypte
1740: 64 0a 23 0a 64 6f 5f 74 65 73 74 20 70 72 61 67  d.#.do_test prag
1750: 6d 61 2d 33 2e 31 20 7b 0a 20 20 64 62 20 63 6c  ma-3.1 {.  db cl
1760: 6f 73 65 0a 20 20 66 69 6c 65 20 64 65 6c 65 74  ose.  file delet
1770: 65 20 2d 66 6f 72 63 65 20 74 65 73 74 2e 64 62  e -force test.db
1780: 20 74 65 73 74 2e 64 62 2d 6a 6f 75 72 6e 61 6c   test.db-journal
1790: 0a 20 20 73 71 6c 69 74 65 33 20 64 62 20 74 65  .  sqlite3 db te
17a0: 73 74 2e 64 62 0a 20 20 65 78 65 63 73 71 6c 20  st.db.  execsql 
17b0: 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 61 75 74  {.    PRAGMA aut
17c0: 6f 5f 76 61 63 75 75 6d 3d 4f 46 46 3b 0a 20 20  o_vacuum=OFF;.  
17d0: 20 20 42 45 47 49 4e 3b 0a 20 20 20 20 43 52 45    BEGIN;.    CRE
17e0: 41 54 45 20 54 41 42 4c 45 20 74 32 28 61 2c 62  ATE TABLE t2(a,b
17f0: 2c 63 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20  ,c);.    CREATE 
1800: 49 4e 44 45 58 20 69 32 20 4f 4e 20 74 32 28 61  INDEX i2 ON t2(a
1810: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
1820: 54 4f 20 74 32 20 56 41 4c 55 45 53 28 31 31 2c  TO t2 VALUES(11,
1830: 32 2c 33 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  2,3);.    INSERT
1840: 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28   INTO t2 VALUES(
1850: 32 32 2c 33 2c 34 29 3b 0a 20 20 20 20 43 4f 4d  22,3,4);.    COM
1860: 4d 49 54 3b 0a 20 20 20 20 53 45 4c 45 43 54 20  MIT;.    SELECT 
1870: 72 6f 77 69 64 2c 20 2a 20 66 72 6f 6d 20 74 32  rowid, * from t2
1880: 3b 0a 20 20 7d 0a 7d 20 7b 31 20 31 31 20 32 20  ;.  }.} {1 11 2 
1890: 33 20 32 20 32 32 20 33 20 34 7d 0a 69 66 63 61  3 2 22 3 4}.ifca
18a0: 70 61 62 6c 65 20 61 74 74 61 63 68 20 7b 0a 20  pable attach {. 
18b0: 20 69 66 20 7b 21 5b 73 71 6c 69 74 65 33 20 2d   if {![sqlite3 -
18c0: 68 61 73 2d 63 6f 64 65 63 5d 20 26 26 20 24 73  has-codec] && $s
18d0: 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 28 69 6e  qlite_options(in
18e0: 74 65 67 72 69 74 79 63 6b 29 7d 20 7b 0a 20 20  tegrityck)} {.  
18f0: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
1900: 2d 33 2e 32 20 7b 0a 20 20 20 20 20 20 64 62 20  -3.2 {.      db 
1910: 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 72 6f 6f  eval {SELECT roo
1920: 74 70 61 67 65 20 46 52 4f 4d 20 73 71 6c 69 74  tpage FROM sqlit
1930: 65 5f 6d 61 73 74 65 72 20 57 48 45 52 45 20 6e  e_master WHERE n
1940: 61 6d 65 3d 27 69 32 27 7d 20 62 72 65 61 6b 0a  ame='i2'} break.
1950: 20 20 20 20 20 20 73 65 74 20 70 67 73 7a 20 5b        set pgsz [
1960: 64 62 20 65 76 61 6c 20 7b 50 52 41 47 4d 41 20  db eval {PRAGMA 
1970: 70 61 67 65 5f 73 69 7a 65 7d 5d 0a 20 20 20 20  page_size}].    
1980: 20 20 23 20 6f 76 65 72 77 72 69 74 65 20 74 68    # overwrite th
1990: 65 20 68 65 61 64 65 72 20 6f 6e 20 74 68 65 20  e header on the 
19a0: 72 6f 6f 74 70 61 67 65 20 6f 66 20 74 68 65 20  rootpage of the 
19b0: 69 6e 64 65 78 20 69 6e 20 6f 72 64 65 72 20 74  index in order t
19c0: 6f 0a 20 20 20 20 20 20 23 20 6d 61 6b 65 20 74  o.      # make t
19d0: 68 65 20 69 6e 64 65 78 20 61 70 70 65 61 72 20  he index appear 
19e0: 74 6f 20 62 65 20 65 6d 70 74 79 2e 0a 20 20 20  to be empty..   
19f0: 20 20 20 23 0a 20 20 20 20 20 20 73 65 74 20 6f     #.      set o
1a00: 66 66 73 65 74 20 5b 65 78 70 72 20 7b 24 70 67  ffset [expr {$pg
1a10: 73 7a 2a 28 24 72 6f 6f 74 70 61 67 65 2d 31 29  sz*($rootpage-1)
1a20: 7d 5d 0a 20 20 20 20 20 20 68 65 78 69 6f 5f 77  }].      hexio_w
1a30: 72 69 74 65 20 74 65 73 74 2e 64 62 20 24 6f 66  rite test.db $of
1a40: 66 73 65 74 20 30 61 30 30 30 30 30 30 30 30 30  fset 0a000000000
1a50: 34 30 30 30 30 30 30 30 30 30 30 0a 20 20 20 20  40000000000.    
1a60: 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 20 20 20    db close.     
1a70: 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74   sqlite3 db test
1a80: 2e 64 62 0a 20 20 20 20 20 20 65 78 65 63 73 71  .db.      execsq
1a90: 6c 20 7b 50 52 41 47 4d 41 20 69 6e 74 65 67 72  l {PRAGMA integr
1aa0: 69 74 79 5f 63 68 65 63 6b 7d 0a 20 20 20 20 7d  ity_check}.    }
1ab0: 20 7b 7b 72 6f 77 69 64 20 31 20 6d 69 73 73 69   {{rowid 1 missi
1ac0: 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32  ng from index i2
1ad0: 7d 20 7b 72 6f 77 69 64 20 32 20 6d 69 73 73 69  } {rowid 2 missi
1ae0: 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32  ng from index i2
1af0: 7d 20 7b 77 72 6f 6e 67 20 23 20 6f 66 20 65 6e  } {wrong # of en
1b00: 74 72 69 65 73 20 69 6e 20 69 6e 64 65 78 20 69  tries in index i
1b10: 32 7d 7d 0a 20 20 20 20 64 6f 5f 74 65 73 74 20  2}}.    do_test 
1b20: 70 72 61 67 6d 61 2d 33 2e 33 20 7b 0a 20 20 20  pragma-3.3 {.   
1b30: 20 20 20 65 78 65 63 73 71 6c 20 7b 50 52 41 47     execsql {PRAG
1b40: 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65  MA integrity_che
1b50: 63 6b 3d 31 7d 0a 20 20 20 20 7d 20 7b 7b 72 6f  ck=1}.    } {{ro
1b60: 77 69 64 20 31 20 6d 69 73 73 69 6e 67 20 66 72  wid 1 missing fr
1b70: 6f 6d 20 69 6e 64 65 78 20 69 32 7d 7d 0a 20 20  om index i2}}.  
1b80: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
1b90: 2d 33 2e 34 20 7b 0a 20 20 20 20 20 20 65 78 65  -3.4 {.      exe
1ba0: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 20 20 41  csql {.        A
1bb0: 54 54 41 43 48 20 44 41 54 41 42 41 53 45 20 27  TTACH DATABASE '
1bc0: 74 65 73 74 2e 64 62 27 20 41 53 20 74 32 3b 0a  test.db' AS t2;.
1bd0: 20 20 20 20 20 20 20 20 50 52 41 47 4d 41 20 69          PRAGMA i
1be0: 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 0a 20  ntegrity_check. 
1bf0: 20 20 20 20 20 7d 0a 20 20 20 20 7d 20 7b 7b 72       }.    } {{r
1c00: 6f 77 69 64 20 31 20 6d 69 73 73 69 6e 67 20 66  owid 1 missing f
1c10: 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b 72  rom index i2} {r
1c20: 6f 77 69 64 20 32 20 6d 69 73 73 69 6e 67 20 66  owid 2 missing f
1c30: 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b 77  rom index i2} {w
1c40: 72 6f 6e 67 20 23 20 6f 66 20 65 6e 74 72 69 65  rong # of entrie
1c50: 73 20 69 6e 20 69 6e 64 65 78 20 69 32 7d 20 7b  s in index i2} {
1c60: 72 6f 77 69 64 20 31 20 6d 69 73 73 69 6e 67 20  rowid 1 missing 
1c70: 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b  from index i2} {
1c80: 72 6f 77 69 64 20 32 20 6d 69 73 73 69 6e 67 20  rowid 2 missing 
1c90: 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b  from index i2} {
1ca0: 77 72 6f 6e 67 20 23 20 6f 66 20 65 6e 74 72 69  wrong # of entri
1cb0: 65 73 20 69 6e 20 69 6e 64 65 78 20 69 32 7d 7d  es in index i2}}
1cc0: 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 70 72 61  .    do_test pra
1cd0: 67 6d 61 2d 33 2e 35 20 7b 0a 20 20 20 20 20 20  gma-3.5 {.      
1ce0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
1cf0: 20 20 50 52 41 47 4d 41 20 69 6e 74 65 67 72 69    PRAGMA integri
1d00: 74 79 5f 63 68 65 63 6b 3d 34 0a 20 20 20 20 20  ty_check=4.     
1d10: 20 7d 0a 20 20 20 20 7d 20 7b 7b 72 6f 77 69 64   }.    } {{rowid
1d20: 20 31 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20   1 missing from 
1d30: 69 6e 64 65 78 20 69 32 7d 20 7b 72 6f 77 69 64  index i2} {rowid
1d40: 20 32 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20   2 missing from 
1d50: 69 6e 64 65 78 20 69 32 7d 20 7b 77 72 6f 6e 67  index i2} {wrong
1d60: 20 23 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e   # of entries in
1d70: 20 69 6e 64 65 78 20 69 32 7d 20 7b 72 6f 77 69   index i2} {rowi
1d80: 64 20 31 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d  d 1 missing from
1d90: 20 69 6e 64 65 78 20 69 32 7d 7d 0a 20 20 20 20   index i2}}.    
1da0: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 33  do_test pragma-3
1db0: 2e 36 20 7b 0a 20 20 20 20 20 20 65 78 65 63 73  .6 {.      execs
1dc0: 71 6c 20 7b 0a 20 20 20 20 20 20 20 20 50 52 41  ql {.        PRA
1dd0: 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68  GMA integrity_ch
1de0: 65 63 6b 3d 78 79 7a 0a 20 20 20 20 20 20 7d 0a  eck=xyz.      }.
1df0: 20 20 20 20 7d 20 7b 7b 72 6f 77 69 64 20 31 20      } {{rowid 1 
1e00: 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64  missing from ind
1e10: 65 78 20 69 32 7d 20 7b 72 6f 77 69 64 20 32 20  ex i2} {rowid 2 
1e20: 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64  missing from ind
1e30: 65 78 20 69 32 7d 20 7b 77 72 6f 6e 67 20 23 20  ex i2} {wrong # 
1e40: 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 69 6e  of entries in in
1e50: 64 65 78 20 69 32 7d 20 7b 72 6f 77 69 64 20 31  dex i2} {rowid 1
1e60: 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e   missing from in
1e70: 64 65 78 20 69 32 7d 20 7b 72 6f 77 69 64 20 32  dex i2} {rowid 2
1e80: 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e   missing from in
1e90: 64 65 78 20 69 32 7d 20 7b 77 72 6f 6e 67 20 23  dex i2} {wrong #
1ea0: 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 69   of entries in i
1eb0: 6e 64 65 78 20 69 32 7d 7d 0a 20 20 20 20 64 6f  ndex i2}}.    do
1ec0: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 33 2e 37  _test pragma-3.7
1ed0: 20 7b 0a 20 20 20 20 20 20 65 78 65 63 73 71 6c   {.      execsql
1ee0: 20 7b 0a 20 20 20 20 20 20 20 20 50 52 41 47 4d   {.        PRAGM
1ef0: 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63  A integrity_chec
1f00: 6b 3d 30 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  k=0.      }.    
1f10: 7d 20 7b 7b 72 6f 77 69 64 20 31 20 6d 69 73 73  } {{rowid 1 miss
1f20: 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69  ing from index i
1f30: 32 7d 20 7b 72 6f 77 69 64 20 32 20 6d 69 73 73  2} {rowid 2 miss
1f40: 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69  ing from index i
1f50: 32 7d 20 7b 77 72 6f 6e 67 20 23 20 6f 66 20 65  2} {wrong # of e
1f60: 6e 74 72 69 65 73 20 69 6e 20 69 6e 64 65 78 20  ntries in index 
1f70: 69 32 7d 20 7b 72 6f 77 69 64 20 31 20 6d 69 73  i2} {rowid 1 mis
1f80: 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20  sing from index 
1f90: 69 32 7d 20 7b 72 6f 77 69 64 20 32 20 6d 69 73  i2} {rowid 2 mis
1fa0: 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20  sing from index 
1fb0: 69 32 7d 20 7b 77 72 6f 6e 67 20 23 20 6f 66 20  i2} {wrong # of 
1fc0: 65 6e 74 72 69 65 73 20 69 6e 20 69 6e 64 65 78  entries in index
1fd0: 20 69 32 7d 7d 0a 20 20 0a 20 20 20 20 23 20 41   i2}}.  .    # A
1fe0: 64 64 20 61 64 64 69 74 69 6f 6e 61 6c 20 63 6f  dd additional co
1ff0: 72 72 75 70 74 69 6f 6e 20 62 79 20 61 70 70 65  rruption by appe
2000: 6e 64 69 6e 67 20 75 6e 75 73 65 64 20 70 61 67  nding unused pag
2010: 65 73 20 74 6f 20 74 68 65 20 65 6e 64 20 6f 66  es to the end of
2020: 0a 20 20 20 20 23 20 74 68 65 20 64 61 74 61 62  .    # the datab
2030: 61 73 65 20 66 69 6c 65 20 74 65 73 74 65 72 72  ase file testerr
2040: 2e 64 62 0a 20 20 20 20 23 0a 20 20 20 20 64 6f  .db.    #.    do
2050: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 33 2e 38  _test pragma-3.8
2060: 20 7b 0a 20 20 20 20 20 20 65 78 65 63 73 71 6c   {.      execsql
2070: 20 7b 44 45 54 41 43 48 20 74 32 7d 0a 20 20 20   {DETACH t2}.   
2080: 20 20 20 66 69 6c 65 20 64 65 6c 65 74 65 20 2d     file delete -
2090: 66 6f 72 63 65 20 74 65 73 74 65 72 72 2e 64 62  force testerr.db
20a0: 20 74 65 73 74 65 72 72 2e 64 62 2d 6a 6f 75 72   testerr.db-jour
20b0: 6e 61 6c 0a 20 20 20 20 20 20 73 65 74 20 6f 75  nal.      set ou
20c0: 74 20 5b 6f 70 65 6e 20 74 65 73 74 65 72 72 2e  t [open testerr.
20d0: 64 62 20 77 5d 0a 20 20 20 20 20 20 66 63 6f 6e  db w].      fcon
20e0: 66 69 67 75 72 65 20 24 6f 75 74 20 2d 74 72 61  figure $out -tra
20f0: 6e 73 6c 61 74 69 6f 6e 20 62 69 6e 61 72 79 0a  nslation binary.
2100: 20 20 20 20 20 20 73 65 74 20 69 6e 20 5b 6f 70        set in [op
2110: 65 6e 20 74 65 73 74 2e 64 62 20 72 5d 0a 20 20  en test.db r].  
2120: 20 20 20 20 66 63 6f 6e 66 69 67 75 72 65 20 24      fconfigure $
2130: 69 6e 20 2d 74 72 61 6e 73 6c 61 74 69 6f 6e 20  in -translation 
2140: 62 69 6e 61 72 79 0a 20 20 20 20 20 20 70 75 74  binary.      put
2150: 73 20 2d 6e 6f 6e 65 77 6c 69 6e 65 20 24 6f 75  s -nonewline $ou
2160: 74 20 5b 72 65 61 64 20 24 69 6e 5d 0a 20 20 20  t [read $in].   
2170: 20 20 20 73 65 65 6b 20 24 69 6e 20 30 0a 20 20     seek $in 0.  
2180: 20 20 20 20 70 75 74 73 20 2d 6e 6f 6e 65 77 6c      puts -nonewl
2190: 69 6e 65 20 24 6f 75 74 20 5b 72 65 61 64 20 24  ine $out [read $
21a0: 69 6e 5d 0a 20 20 20 20 20 20 63 6c 6f 73 65 20  in].      close 
21b0: 24 69 6e 0a 20 20 20 20 20 20 63 6c 6f 73 65 20  $in.      close 
21c0: 24 6f 75 74 0a 20 20 20 20 20 20 65 78 65 63 73  $out.      execs
21d0: 71 6c 20 7b 52 45 49 4e 44 45 58 20 74 32 7d 0a  ql {REINDEX t2}.
21e0: 20 20 20 20 20 20 65 78 65 63 73 71 6c 20 7b 50        execsql {P
21f0: 52 41 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f  RAGMA integrity_
2200: 63 68 65 63 6b 7d 0a 20 20 20 20 7d 20 7b 6f 6b  check}.    } {ok
2210: 7d 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 70 72  }.    do_test pr
2220: 61 67 6d 61 2d 33 2e 38 2e 31 20 7b 0a 20 20 20  agma-3.8.1 {.   
2230: 20 20 20 65 78 65 63 73 71 6c 20 7b 50 52 41 47     execsql {PRAG
2240: 4d 41 20 71 75 69 63 6b 5f 63 68 65 63 6b 7d 0a  MA quick_check}.
2250: 20 20 20 20 7d 20 7b 6f 6b 7d 0a 20 20 20 20 64      } {ok}.    d
2260: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 33 2e  o_test pragma-3.
2270: 39 20 7b 0a 20 20 20 20 20 20 65 78 65 63 73 71  9 {.      execsq
2280: 6c 20 7b 0a 20 20 20 20 20 20 20 20 41 54 54 41  l {.        ATTA
2290: 43 48 20 27 74 65 73 74 65 72 72 2e 64 62 27 20  CH 'testerr.db' 
22a0: 41 53 20 74 32 3b 0a 20 20 20 20 20 20 20 20 50  AS t2;.        P
22b0: 52 41 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f  RAGMA integrity_
22c0: 63 68 65 63 6b 0a 20 20 20 20 20 20 7d 0a 20 20  check.      }.  
22d0: 20 20 7d 20 7b 7b 2a 2a 2a 20 69 6e 20 64 61 74    } {{*** in dat
22e0: 61 62 61 73 65 20 74 32 20 2a 2a 2a 0a 50 61 67  abase t2 ***.Pag
22f0: 65 20 34 20 69 73 20 6e 65 76 65 72 20 75 73 65  e 4 is never use
2300: 64 0a 50 61 67 65 20 35 20 69 73 20 6e 65 76 65  d.Page 5 is neve
2310: 72 20 75 73 65 64 0a 50 61 67 65 20 36 20 69 73  r used.Page 6 is
2320: 20 6e 65 76 65 72 20 75 73 65 64 7d 20 7b 72 6f   never used} {ro
2330: 77 69 64 20 31 20 6d 69 73 73 69 6e 67 20 66 72  wid 1 missing fr
2340: 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b 72 6f  om index i2} {ro
2350: 77 69 64 20 32 20 6d 69 73 73 69 6e 67 20 66 72  wid 2 missing fr
2360: 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b 77 72  om index i2} {wr
2370: 6f 6e 67 20 23 20 6f 66 20 65 6e 74 72 69 65 73  ong # of entries
2380: 20 69 6e 20 69 6e 64 65 78 20 69 32 7d 7d 0a 20   in index i2}}. 
2390: 20 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d     do_test pragm
23a0: 61 2d 33 2e 31 30 20 7b 0a 20 20 20 20 20 20 65  a-3.10 {.      e
23b0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 20  xecsql {.       
23c0: 20 50 52 41 47 4d 41 20 69 6e 74 65 67 72 69 74   PRAGMA integrit
23d0: 79 5f 63 68 65 63 6b 3d 31 0a 20 20 20 20 20 20  y_check=1.      
23e0: 7d 0a 20 20 20 20 7d 20 7b 7b 2a 2a 2a 20 69 6e  }.    } {{*** in
23f0: 20 64 61 74 61 62 61 73 65 20 74 32 20 2a 2a 2a   database t2 ***
2400: 0a 50 61 67 65 20 34 20 69 73 20 6e 65 76 65 72  .Page 4 is never
2410: 20 75 73 65 64 7d 7d 0a 20 20 20 20 64 6f 5f 74   used}}.    do_t
2420: 65 73 74 20 70 72 61 67 6d 61 2d 33 2e 31 31 20  est pragma-3.11 
2430: 7b 0a 20 20 20 20 20 20 65 78 65 63 73 71 6c 20  {.      execsql 
2440: 7b 0a 20 20 20 20 20 20 20 20 50 52 41 47 4d 41  {.        PRAGMA
2450: 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b   integrity_check
2460: 3d 35 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  =5.      }.    }
2470: 20 7b 7b 2a 2a 2a 20 69 6e 20 64 61 74 61 62 61   {{*** in databa
2480: 73 65 20 74 32 20 2a 2a 2a 0a 50 61 67 65 20 34  se t2 ***.Page 4
2490: 20 69 73 20 6e 65 76 65 72 20 75 73 65 64 0a 50   is never used.P
24a0: 61 67 65 20 35 20 69 73 20 6e 65 76 65 72 20 75  age 5 is never u
24b0: 73 65 64 0a 50 61 67 65 20 36 20 69 73 20 6e 65  sed.Page 6 is ne
24c0: 76 65 72 20 75 73 65 64 7d 20 7b 72 6f 77 69 64  ver used} {rowid
24d0: 20 31 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20   1 missing from 
24e0: 69 6e 64 65 78 20 69 32 7d 20 7b 72 6f 77 69 64  index i2} {rowid
24f0: 20 32 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20   2 missing from 
2500: 69 6e 64 65 78 20 69 32 7d 7d 0a 20 20 20 20 64  index i2}}.    d
2510: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 33 2e  o_test pragma-3.
2520: 31 32 20 7b 0a 20 20 20 20 20 20 65 78 65 63 73  12 {.      execs
2530: 71 6c 20 7b 0a 20 20 20 20 20 20 20 20 50 52 41  ql {.        PRA
2540: 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68  GMA integrity_ch
2550: 65 63 6b 3d 34 0a 20 20 20 20 20 20 7d 0a 20 20  eck=4.      }.  
2560: 20 20 7d 20 7b 7b 2a 2a 2a 20 69 6e 20 64 61 74    } {{*** in dat
2570: 61 62 61 73 65 20 74 32 20 2a 2a 2a 0a 50 61 67  abase t2 ***.Pag
2580: 65 20 34 20 69 73 20 6e 65 76 65 72 20 75 73 65  e 4 is never use
2590: 64 0a 50 61 67 65 20 35 20 69 73 20 6e 65 76 65  d.Page 5 is neve
25a0: 72 20 75 73 65 64 0a 50 61 67 65 20 36 20 69 73  r used.Page 6 is
25b0: 20 6e 65 76 65 72 20 75 73 65 64 7d 20 7b 72 6f   never used} {ro
25c0: 77 69 64 20 31 20 6d 69 73 73 69 6e 67 20 66 72  wid 1 missing fr
25d0: 6f 6d 20 69 6e 64 65 78 20 69 32 7d 7d 0a 20 20  om index i2}}.  
25e0: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
25f0: 2d 33 2e 31 33 20 7b 0a 20 20 20 20 20 20 65 78  -3.13 {.      ex
2600: 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 20 20  ecsql {.        
2610: 50 52 41 47 4d 41 20 69 6e 74 65 67 72 69 74 79  PRAGMA integrity
2620: 5f 63 68 65 63 6b 3d 33 0a 20 20 20 20 20 20 7d  _check=3.      }
2630: 0a 20 20 20 20 7d 20 7b 7b 2a 2a 2a 20 69 6e 20  .    } {{*** in 
2640: 64 61 74 61 62 61 73 65 20 74 32 20 2a 2a 2a 0a  database t2 ***.
2650: 50 61 67 65 20 34 20 69 73 20 6e 65 76 65 72 20  Page 4 is never 
2660: 75 73 65 64 0a 50 61 67 65 20 35 20 69 73 20 6e  used.Page 5 is n
2670: 65 76 65 72 20 75 73 65 64 0a 50 61 67 65 20 36  ever used.Page 6
2680: 20 69 73 20 6e 65 76 65 72 20 75 73 65 64 7d 7d   is never used}}
2690: 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 70 72 61  .    do_test pra
26a0: 67 6d 61 2d 33 2e 31 34 20 7b 0a 20 20 20 20 20  gma-3.14 {.     
26b0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20   execsql {.     
26c0: 20 20 20 50 52 41 47 4d 41 20 69 6e 74 65 67 72     PRAGMA integr
26d0: 69 74 79 5f 63 68 65 63 6b 28 32 29 0a 20 20 20  ity_check(2).   
26e0: 20 20 20 7d 0a 20 20 20 20 7d 20 7b 7b 2a 2a 2a     }.    } {{***
26f0: 20 69 6e 20 64 61 74 61 62 61 73 65 20 74 32 20   in database t2 
2700: 2a 2a 2a 0a 50 61 67 65 20 34 20 69 73 20 6e 65  ***.Page 4 is ne
2710: 76 65 72 20 75 73 65 64 0a 50 61 67 65 20 35 20  ver used.Page 5 
2720: 69 73 20 6e 65 76 65 72 20 75 73 65 64 7d 7d 0a  is never used}}.
2730: 20 20 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67      do_test prag
2740: 6d 61 2d 33 2e 31 35 20 7b 0a 20 20 20 20 20 20  ma-3.15 {.      
2750: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
2760: 20 20 41 54 54 41 43 48 20 27 74 65 73 74 65 72    ATTACH 'tester
2770: 72 2e 64 62 27 20 41 53 20 74 33 3b 0a 20 20 20  r.db' AS t3;.   
2780: 20 20 20 20 20 50 52 41 47 4d 41 20 69 6e 74 65       PRAGMA inte
2790: 67 72 69 74 79 5f 63 68 65 63 6b 0a 20 20 20 20  grity_check.    
27a0: 20 20 7d 0a 20 20 20 20 7d 20 7b 7b 2a 2a 2a 20    }.    } {{*** 
27b0: 69 6e 20 64 61 74 61 62 61 73 65 20 74 32 20 2a  in database t2 *
27c0: 2a 2a 0a 50 61 67 65 20 34 20 69 73 20 6e 65 76  **.Page 4 is nev
27d0: 65 72 20 75 73 65 64 0a 50 61 67 65 20 35 20 69  er used.Page 5 i
27e0: 73 20 6e 65 76 65 72 20 75 73 65 64 0a 50 61 67  s never used.Pag
27f0: 65 20 36 20 69 73 20 6e 65 76 65 72 20 75 73 65  e 6 is never use
2800: 64 7d 20 7b 72 6f 77 69 64 20 31 20 6d 69 73 73  d} {rowid 1 miss
2810: 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69  ing from index i
2820: 32 7d 20 7b 72 6f 77 69 64 20 32 20 6d 69 73 73  2} {rowid 2 miss
2830: 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69  ing from index i
2840: 32 7d 20 7b 77 72 6f 6e 67 20 23 20 6f 66 20 65  2} {wrong # of e
2850: 6e 74 72 69 65 73 20 69 6e 20 69 6e 64 65 78 20  ntries in index 
2860: 69 32 7d 20 7b 2a 2a 2a 20 69 6e 20 64 61 74 61  i2} {*** in data
2870: 62 61 73 65 20 74 33 20 2a 2a 2a 0a 50 61 67 65  base t3 ***.Page
2880: 20 34 20 69 73 20 6e 65 76 65 72 20 75 73 65 64   4 is never used
2890: 0a 50 61 67 65 20 35 20 69 73 20 6e 65 76 65 72  .Page 5 is never
28a0: 20 75 73 65 64 0a 50 61 67 65 20 36 20 69 73 20   used.Page 6 is 
28b0: 6e 65 76 65 72 20 75 73 65 64 7d 20 7b 72 6f 77  never used} {row
28c0: 69 64 20 31 20 6d 69 73 73 69 6e 67 20 66 72 6f  id 1 missing fro
28d0: 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b 72 6f 77  m index i2} {row
28e0: 69 64 20 32 20 6d 69 73 73 69 6e 67 20 66 72 6f  id 2 missing fro
28f0: 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b 77 72 6f  m index i2} {wro
2900: 6e 67 20 23 20 6f 66 20 65 6e 74 72 69 65 73 20  ng # of entries 
2910: 69 6e 20 69 6e 64 65 78 20 69 32 7d 7d 0a 20 20  in index i2}}.  
2920: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
2930: 2d 33 2e 31 36 20 7b 0a 20 20 20 20 20 20 65 78  -3.16 {.      ex
2940: 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 20 20  ecsql {.        
2950: 50 52 41 47 4d 41 20 69 6e 74 65 67 72 69 74 79  PRAGMA integrity
2960: 5f 63 68 65 63 6b 28 31 30 29 0a 20 20 20 20 20  _check(10).     
2970: 20 7d 0a 20 20 20 20 7d 20 7b 7b 2a 2a 2a 20 69   }.    } {{*** i
2980: 6e 20 64 61 74 61 62 61 73 65 20 74 32 20 2a 2a  n database t2 **
2990: 2a 0a 50 61 67 65 20 34 20 69 73 20 6e 65 76 65  *.Page 4 is neve
29a0: 72 20 75 73 65 64 0a 50 61 67 65 20 35 20 69 73  r used.Page 5 is
29b0: 20 6e 65 76 65 72 20 75 73 65 64 0a 50 61 67 65   never used.Page
29c0: 20 36 20 69 73 20 6e 65 76 65 72 20 75 73 65 64   6 is never used
29d0: 7d 20 7b 72 6f 77 69 64 20 31 20 6d 69 73 73 69  } {rowid 1 missi
29e0: 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32  ng from index i2
29f0: 7d 20 7b 72 6f 77 69 64 20 32 20 6d 69 73 73 69  } {rowid 2 missi
2a00: 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32  ng from index i2
2a10: 7d 20 7b 77 72 6f 6e 67 20 23 20 6f 66 20 65 6e  } {wrong # of en
2a20: 74 72 69 65 73 20 69 6e 20 69 6e 64 65 78 20 69  tries in index i
2a30: 32 7d 20 7b 2a 2a 2a 20 69 6e 20 64 61 74 61 62  2} {*** in datab
2a40: 61 73 65 20 74 33 20 2a 2a 2a 0a 50 61 67 65 20  ase t3 ***.Page 
2a50: 34 20 69 73 20 6e 65 76 65 72 20 75 73 65 64 0a  4 is never used.
2a60: 50 61 67 65 20 35 20 69 73 20 6e 65 76 65 72 20  Page 5 is never 
2a70: 75 73 65 64 0a 50 61 67 65 20 36 20 69 73 20 6e  used.Page 6 is n
2a80: 65 76 65 72 20 75 73 65 64 7d 20 7b 72 6f 77 69  ever used} {rowi
2a90: 64 20 31 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d  d 1 missing from
2aa0: 20 69 6e 64 65 78 20 69 32 7d 7d 0a 20 20 20 20   index i2}}.    
2ab0: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 33  do_test pragma-3
2ac0: 2e 31 37 20 7b 0a 20 20 20 20 20 20 65 78 65 63  .17 {.      exec
2ad0: 73 71 6c 20 7b 0a 20 20 20 20 20 20 20 20 50 52  sql {.        PR
2ae0: 41 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63  AGMA integrity_c
2af0: 68 65 63 6b 3d 38 0a 20 20 20 20 20 20 7d 0a 20  heck=8.      }. 
2b00: 20 20 20 7d 20 7b 7b 2a 2a 2a 20 69 6e 20 64 61     } {{*** in da
2b10: 74 61 62 61 73 65 20 74 32 20 2a 2a 2a 0a 50 61  tabase t2 ***.Pa
2b20: 67 65 20 34 20 69 73 20 6e 65 76 65 72 20 75 73  ge 4 is never us
2b30: 65 64 0a 50 61 67 65 20 35 20 69 73 20 6e 65 76  ed.Page 5 is nev
2b40: 65 72 20 75 73 65 64 0a 50 61 67 65 20 36 20 69  er used.Page 6 i
2b50: 73 20 6e 65 76 65 72 20 75 73 65 64 7d 20 7b 72  s never used} {r
2b60: 6f 77 69 64 20 31 20 6d 69 73 73 69 6e 67 20 66  owid 1 missing f
2b70: 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b 72  rom index i2} {r
2b80: 6f 77 69 64 20 32 20 6d 69 73 73 69 6e 67 20 66  owid 2 missing f
2b90: 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b 77  rom index i2} {w
2ba0: 72 6f 6e 67 20 23 20 6f 66 20 65 6e 74 72 69 65  rong # of entrie
2bb0: 73 20 69 6e 20 69 6e 64 65 78 20 69 32 7d 20 7b  s in index i2} {
2bc0: 2a 2a 2a 20 69 6e 20 64 61 74 61 62 61 73 65 20  *** in database 
2bd0: 74 33 20 2a 2a 2a 0a 50 61 67 65 20 34 20 69 73  t3 ***.Page 4 is
2be0: 20 6e 65 76 65 72 20 75 73 65 64 0a 50 61 67 65   never used.Page
2bf0: 20 35 20 69 73 20 6e 65 76 65 72 20 75 73 65 64   5 is never used
2c00: 7d 7d 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 70  }}.    do_test p
2c10: 72 61 67 6d 61 2d 33 2e 31 38 20 7b 0a 20 20 20  ragma-3.18 {.   
2c20: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
2c30: 20 20 20 20 20 50 52 41 47 4d 41 20 69 6e 74 65       PRAGMA inte
2c40: 67 72 69 74 79 5f 63 68 65 63 6b 3d 34 0a 20 20  grity_check=4.  
2c50: 20 20 20 20 7d 0a 20 20 20 20 7d 20 7b 7b 2a 2a      }.    } {{**
2c60: 2a 20 69 6e 20 64 61 74 61 62 61 73 65 20 74 32  * in database t2
2c70: 20 2a 2a 2a 0a 50 61 67 65 20 34 20 69 73 20 6e   ***.Page 4 is n
2c80: 65 76 65 72 20 75 73 65 64 0a 50 61 67 65 20 35  ever used.Page 5
2c90: 20 69 73 20 6e 65 76 65 72 20 75 73 65 64 0a 50   is never used.P
2ca0: 61 67 65 20 36 20 69 73 20 6e 65 76 65 72 20 75  age 6 is never u
2cb0: 73 65 64 7d 20 7b 72 6f 77 69 64 20 31 20 6d 69  sed} {rowid 1 mi
2cc0: 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78  ssing from index
2cd0: 20 69 32 7d 7d 0a 20 20 7d 0a 20 20 64 6f 5f 74   i2}}.  }.  do_t
2ce0: 65 73 74 20 70 72 61 67 6d 61 2d 33 2e 39 39 20  est pragma-3.99 
2cf0: 7b 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b  {.    catchsql {
2d00: 44 45 54 41 43 48 20 74 33 7d 0a 20 20 20 20 63  DETACH t3}.    c
2d10: 61 74 63 68 73 71 6c 20 7b 44 45 54 41 43 48 20  atchsql {DETACH 
2d20: 74 32 7d 0a 20 20 20 20 66 69 6c 65 20 64 65 6c  t2}.    file del
2d30: 65 74 65 20 2d 66 6f 72 63 65 20 74 65 73 74 65  ete -force teste
2d40: 72 72 2e 64 62 20 74 65 73 74 65 72 72 2e 64 62  rr.db testerr.db
2d50: 2d 6a 6f 75 72 6e 61 6c 0a 20 20 20 20 63 61 74  -journal.    cat
2d60: 63 68 73 71 6c 20 7b 44 52 4f 50 20 49 4e 44 45  chsql {DROP INDE
2d70: 58 20 69 32 7d 0a 20 20 7d 20 7b 30 20 7b 7d 7d  X i2}.  } {0 {}}
2d80: 0a 7d 0a 0a 23 20 54 65 73 74 20 6d 6f 64 69 66  .}..# Test modif
2d90: 79 69 6e 67 20 74 68 65 20 63 61 63 68 65 5f 73  ying the cache_s
2da0: 69 7a 65 20 6f 66 20 61 6e 20 61 74 74 61 63 68  ize of an attach
2db0: 65 64 20 64 61 74 61 62 61 73 65 2e 0a 69 66 63  ed database..ifc
2dc0: 61 70 61 62 6c 65 20 70 61 67 65 72 5f 70 72 61  apable pager_pra
2dd0: 67 6d 61 73 26 26 61 74 74 61 63 68 20 7b 0a 64  gmas&&attach {.d
2de0: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 34 2e  o_test pragma-4.
2df0: 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  1 {.  execsql {.
2e00: 20 20 20 20 41 54 54 41 43 48 20 27 74 65 73 74      ATTACH 'test
2e10: 32 2e 64 62 27 20 41 53 20 61 75 78 3b 0a 20 20  2.db' AS aux;.  
2e20: 20 20 70 72 61 67 6d 61 20 61 75 78 2e 63 61 63    pragma aux.cac
2e30: 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 70 72 61  he_size;.    pra
2e40: 67 6d 61 20 61 75 78 2e 64 65 66 61 75 6c 74 5f  gma aux.default_
2e50: 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 7d 20  cache_size;.  } 
2e60: 0a 7d 20 5b 6c 69 73 74 20 24 44 46 4c 54 5f 43  .} [list $DFLT_C
2e70: 41 43 48 45 5f 53 5a 20 24 44 46 4c 54 5f 43 41  ACHE_SZ $DFLT_CA
2e80: 43 48 45 5f 53 5a 5d 0a 64 6f 5f 74 65 73 74 20  CHE_SZ].do_test 
2e90: 70 72 61 67 6d 61 2d 34 2e 32 20 7b 0a 20 20 65  pragma-4.2 {.  e
2ea0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 70 72 61  xecsql {.    pra
2eb0: 67 6d 61 20 61 75 78 2e 63 61 63 68 65 5f 73 69  gma aux.cache_si
2ec0: 7a 65 20 3d 20 35 30 3b 0a 20 20 20 20 70 72 61  ze = 50;.    pra
2ed0: 67 6d 61 20 61 75 78 2e 63 61 63 68 65 5f 73 69  gma aux.cache_si
2ee0: 7a 65 3b 0a 20 20 20 20 70 72 61 67 6d 61 20 61  ze;.    pragma a
2ef0: 75 78 2e 64 65 66 61 75 6c 74 5f 63 61 63 68 65  ux.default_cache
2f00: 5f 73 69 7a 65 3b 0a 20 20 7d 20 0a 7d 20 5b 6c  _size;.  } .} [l
2f10: 69 73 74 20 35 30 20 24 44 46 4c 54 5f 43 41 43  ist 50 $DFLT_CAC
2f20: 48 45 5f 53 5a 5d 0a 64 6f 5f 74 65 73 74 20 70  HE_SZ].do_test p
2f30: 72 61 67 6d 61 2d 34 2e 33 20 7b 0a 20 20 65 78  ragma-4.3 {.  ex
2f40: 65 63 73 71 6c 20 7b 0a 20 20 20 20 70 72 61 67  ecsql {.    prag
2f50: 6d 61 20 61 75 78 2e 64 65 66 61 75 6c 74 5f 63  ma aux.default_c
2f60: 61 63 68 65 5f 73 69 7a 65 20 3d 20 34 35 36 3b  ache_size = 456;
2f70: 0a 20 20 20 20 70 72 61 67 6d 61 20 61 75 78 2e  .    pragma aux.
2f80: 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20  cache_size;.    
2f90: 70 72 61 67 6d 61 20 61 75 78 2e 64 65 66 61 75  pragma aux.defau
2fa0: 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20  lt_cache_size;. 
2fb0: 20 7d 20 0a 7d 20 7b 34 35 36 20 34 35 36 7d 0a   } .} {456 456}.
2fc0: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 34  do_test pragma-4
2fd0: 2e 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .4 {.  execsql {
2fe0: 0a 20 20 20 20 70 72 61 67 6d 61 20 63 61 63 68  .    pragma cach
2ff0: 65 5f 73 69 7a 65 3b 0a 20 20 20 20 70 72 61 67  e_size;.    prag
3000: 6d 61 20 64 65 66 61 75 6c 74 5f 63 61 63 68 65  ma default_cache
3010: 5f 73 69 7a 65 3b 0a 20 20 7d 20 0a 7d 20 5b 6c  _size;.  } .} [l
3020: 69 73 74 20 24 44 46 4c 54 5f 43 41 43 48 45 5f  ist $DFLT_CACHE_
3030: 53 5a 20 24 44 46 4c 54 5f 43 41 43 48 45 5f 53  SZ $DFLT_CACHE_S
3040: 5a 5d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  Z].do_test pragm
3050: 61 2d 34 2e 35 20 7b 0a 20 20 65 78 65 63 73 71  a-4.5 {.  execsq
3060: 6c 20 7b 0a 20 20 20 20 44 45 54 41 43 48 20 61  l {.    DETACH a
3070: 75 78 3b 0a 20 20 20 20 41 54 54 41 43 48 20 27  ux;.    ATTACH '
3080: 74 65 73 74 33 2e 64 62 27 20 41 53 20 61 75 78  test3.db' AS aux
3090: 3b 0a 20 20 20 20 70 72 61 67 6d 61 20 61 75 78  ;.    pragma aux
30a0: 2e 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20  .cache_size;.   
30b0: 20 70 72 61 67 6d 61 20 61 75 78 2e 64 65 66 61   pragma aux.defa
30c0: 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65 3b 0a  ult_cache_size;.
30d0: 20 20 7d 20 0a 7d 20 5b 6c 69 73 74 20 24 44 46    } .} [list $DF
30e0: 4c 54 5f 43 41 43 48 45 5f 53 5a 20 24 44 46 4c  LT_CACHE_SZ $DFL
30f0: 54 5f 43 41 43 48 45 5f 53 5a 5d 0a 64 6f 5f 74  T_CACHE_SZ].do_t
3100: 65 73 74 20 70 72 61 67 6d 61 2d 34 2e 36 20 7b  est pragma-4.6 {
3110: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
3120: 20 44 45 54 41 43 48 20 61 75 78 3b 0a 20 20 20   DETACH aux;.   
3130: 20 41 54 54 41 43 48 20 27 74 65 73 74 32 2e 64   ATTACH 'test2.d
3140: 62 27 20 41 53 20 61 75 78 3b 0a 20 20 20 20 70  b' AS aux;.    p
3150: 72 61 67 6d 61 20 61 75 78 2e 63 61 63 68 65 5f  ragma aux.cache_
3160: 73 69 7a 65 3b 0a 20 20 20 20 70 72 61 67 6d 61  size;.    pragma
3170: 20 61 75 78 2e 64 65 66 61 75 6c 74 5f 63 61 63   aux.default_cac
3180: 68 65 5f 73 69 7a 65 3b 0a 20 20 7d 20 0a 7d 20  he_size;.  } .} 
3190: 7b 34 35 36 20 34 35 36 7d 0a 7d 20 3b 23 20 69  {456 456}.} ;# i
31a0: 66 63 61 70 61 62 6c 65 20 70 61 67 65 72 5f 70  fcapable pager_p
31b0: 72 61 67 6d 61 73 0a 0a 23 20 54 65 73 74 20 74  ragmas..# Test t
31c0: 68 61 74 20 6d 6f 64 69 66 79 69 6e 67 20 74 68  hat modifying th
31d0: 65 20 73 79 6e 63 2d 6c 65 76 65 6c 20 69 6e 20  e sync-level in 
31e0: 74 68 65 20 6d 69 64 64 6c 65 20 6f 66 20 61 20  the middle of a 
31f0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 0a 23  transaction is.#
3200: 20 64 69 73 61 6c 6c 6f 77 65 64 2e 0a 69 66 63   disallowed..ifc
3210: 61 70 61 62 6c 65 20 70 61 67 65 72 5f 70 72 61  apable pager_pra
3220: 67 6d 61 73 20 7b 0a 64 6f 5f 74 65 73 74 20 70  gmas {.do_test p
3230: 72 61 67 6d 61 2d 35 2e 30 20 7b 0a 20 20 65 78  ragma-5.0 {.  ex
3240: 65 63 73 71 6c 20 7b 0a 20 20 20 20 70 72 61 67  ecsql {.    prag
3250: 6d 61 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a  ma synchronous;.
3260: 20 20 7d 20 0a 7d 20 7b 32 7d 0a 64 6f 5f 74 65    } .} {2}.do_te
3270: 73 74 20 70 72 61 67 6d 61 2d 35 2e 31 20 7b 0a  st pragma-5.1 {.
3280: 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20    catchsql {.   
3290: 20 42 45 47 49 4e 3b 0a 20 20 20 20 70 72 61 67   BEGIN;.    prag
32a0: 6d 61 20 73 79 6e 63 68 72 6f 6e 6f 75 73 20 3d  ma synchronous =
32b0: 20 4f 46 46 3b 0a 20 20 7d 20 0a 7d 20 7b 31 20   OFF;.  } .} {1 
32c0: 7b 53 61 66 65 74 79 20 6c 65 76 65 6c 20 6d 61  {Safety level ma
32d0: 79 20 6e 6f 74 20 62 65 20 63 68 61 6e 67 65 64  y not be changed
32e0: 20 69 6e 73 69 64 65 20 61 20 74 72 61 6e 73 61   inside a transa
32f0: 63 74 69 6f 6e 7d 7d 0a 64 6f 5f 74 65 73 74 20  ction}}.do_test 
3300: 70 72 61 67 6d 61 2d 35 2e 32 20 7b 0a 20 20 65  pragma-5.2 {.  e
3310: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 70 72 61  xecsql {.    pra
3320: 67 6d 61 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3b  gma synchronous;
3330: 0a 20 20 7d 20 0a 7d 20 7b 32 7d 0a 63 61 74 63  .  } .} {2}.catc
3340: 68 73 71 6c 20 7b 43 4f 4d 4d 49 54 3b 7d 0a 7d  hsql {COMMIT;}.}
3350: 20 3b 23 20 69 66 63 61 70 61 62 6c 65 20 70 61   ;# ifcapable pa
3360: 67 65 72 5f 70 72 61 67 6d 61 73 0a 0a 23 20 54  ger_pragmas..# T
3370: 65 73 74 20 73 63 68 65 6d 61 2d 71 75 65 72 79  est schema-query
3380: 20 70 72 61 67 6d 61 73 0a 23 0a 69 66 63 61 70   pragmas.#.ifcap
3390: 61 62 6c 65 20 73 63 68 65 6d 61 5f 70 72 61 67  able schema_prag
33a0: 6d 61 73 20 7b 0a 69 66 63 61 70 61 62 6c 65 20  mas {.ifcapable 
33b0: 74 65 6d 70 64 62 26 26 61 74 74 61 63 68 20 7b  tempdb&&attach {
33c0: 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .  do_test pragm
33d0: 61 2d 36 2e 31 20 7b 0a 20 20 20 20 73 65 74 20  a-6.1 {.    set 
33e0: 72 65 73 20 7b 7d 0a 20 20 20 20 65 78 65 63 73  res {}.    execs
33f0: 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f  ql {SELECT * FRO
3400: 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61  M sqlite_temp_ma
3410: 73 74 65 72 7d 0a 20 20 20 20 66 6f 72 65 61 63  ster}.    foreac
3420: 68 20 7b 69 64 78 20 6e 61 6d 65 20 66 69 6c 65  h {idx name file
3430: 7d 20 5b 65 78 65 63 73 71 6c 20 7b 70 72 61 67  } [execsql {prag
3440: 6d 61 20 64 61 74 61 62 61 73 65 5f 6c 69 73 74  ma database_list
3450: 7d 5d 20 7b 0a 20 20 20 20 20 20 6c 61 70 70 65  }] {.      lappe
3460: 6e 64 20 72 65 73 20 24 69 64 78 20 24 6e 61 6d  nd res $idx $nam
3470: 65 0a 20 20 20 20 7d 0a 20 20 20 20 73 65 74 20  e.    }.    set 
3480: 72 65 73 0a 20 20 7d 20 7b 30 20 6d 61 69 6e 20  res.  } {0 main 
3490: 31 20 74 65 6d 70 20 32 20 61 75 78 7d 0a 7d 0a  1 temp 2 aux}.}.
34a0: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 36  do_test pragma-6
34b0: 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .2 {.  execsql {
34c0: 0a 20 20 20 20 70 72 61 67 6d 61 20 74 61 62 6c  .    pragma tabl
34d0: 65 5f 69 6e 66 6f 28 74 32 29 0a 20 20 7d 0a 7d  e_info(t2).  }.}
34e0: 20 7b 30 20 61 20 7b 7d 20 30 20 7b 7d 20 30 20   {0 a {} 0 {} 0 
34f0: 31 20 62 20 7b 7d 20 30 20 7b 7d 20 30 20 32 20  1 b {} 0 {} 0 2 
3500: 63 20 7b 7d 20 30 20 7b 7d 20 30 7d 0a 64 62 20  c {} 0 {} 0}.db 
3510: 6e 75 6c 6c 76 61 6c 75 65 20 3c 3c 4e 55 4c 4c  nullvalue <<NULL
3520: 3e 3e 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  >>.do_test pragm
3530: 61 2d 36 2e 32 2e 32 20 7b 0a 20 20 65 78 65 63  a-6.2.2 {.  exec
3540: 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45  sql {.    CREATE
3550: 20 54 41 42 4c 45 20 74 35 28 0a 20 20 20 20 20   TABLE t5(.     
3560: 20 61 20 54 45 58 54 20 44 45 46 41 55 4c 54 20   a TEXT DEFAULT 
3570: 43 55 52 52 45 4e 54 5f 54 49 4d 45 53 54 41 4d  CURRENT_TIMESTAM
3580: 50 2c 20 0a 20 20 20 20 20 20 62 20 44 45 46 41  P, .      b DEFA
3590: 55 4c 54 20 28 35 2b 33 29 2c 0a 20 20 20 20 20  ULT (5+3),.     
35a0: 20 63 20 54 45 58 54 2c 0a 20 20 20 20 20 20 64   c TEXT,.      d
35b0: 20 49 4e 54 45 47 45 52 20 44 45 46 41 55 4c 54   INTEGER DEFAULT
35c0: 20 4e 55 4c 4c 2c 0a 20 20 20 20 20 20 65 20 54   NULL,.      e T
35d0: 45 58 54 20 44 45 46 41 55 4c 54 20 27 27 0a 20  EXT DEFAULT ''. 
35e0: 20 20 20 29 3b 0a 20 20 20 20 50 52 41 47 4d 41     );.    PRAGMA
35f0: 20 74 61 62 6c 65 5f 69 6e 66 6f 28 74 35 29 3b   table_info(t5);
3600: 0a 20 20 7d 0a 7d 20 7b 30 20 61 20 54 45 58 54  .  }.} {0 a TEXT
3610: 20 30 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 53   0 CURRENT_TIMES
3620: 54 41 4d 50 20 30 20 31 20 62 20 7b 7d 20 30 20  TAMP 0 1 b {} 0 
3630: 35 2b 33 20 30 20 32 20 63 20 54 45 58 54 20 30  5+3 0 2 c TEXT 0
3640: 20 3c 3c 4e 55 4c 4c 3e 3e 20 30 20 33 20 64 20   <<NULL>> 0 3 d 
3650: 49 4e 54 45 47 45 52 20 30 20 4e 55 4c 4c 20 30  INTEGER 0 NULL 0
3660: 20 34 20 65 20 54 45 58 54 20 30 20 27 27 20 30   4 e TEXT 0 '' 0
3670: 7d 0a 64 62 20 6e 75 6c 6c 76 61 6c 75 65 20 7b  }.db nullvalue {
3680: 7d 0a 69 66 63 61 70 61 62 6c 65 20 7b 66 6f 72  }.ifcapable {for
3690: 65 69 67 6e 6b 65 79 7d 20 7b 0a 20 20 64 6f 5f  eignkey} {.  do_
36a0: 74 65 73 74 20 70 72 61 67 6d 61 2d 36 2e 33 20  test pragma-6.3 
36b0: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a  {.    execsql {.
36c0: 20 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42        CREATE TAB
36d0: 4c 45 20 74 33 28 61 20 69 6e 74 20 72 65 66 65  LE t3(a int refe
36e0: 72 65 6e 63 65 73 20 74 32 28 62 29 2c 20 62 20  rences t2(b), b 
36f0: 55 4e 49 51 55 45 29 3b 0a 20 20 20 20 20 20 70  UNIQUE);.      p
3700: 72 61 67 6d 61 20 66 6f 72 65 69 67 6e 5f 6b 65  ragma foreign_ke
3710: 79 5f 6c 69 73 74 28 74 33 29 3b 0a 20 20 20 20  y_list(t3);.    
3720: 7d 0a 20 20 7d 20 7b 30 20 30 20 74 32 20 61 20  }.  } {0 0 t2 a 
3730: 62 20 52 45 53 54 52 49 43 54 20 52 45 53 54 52  b RESTRICT RESTR
3740: 49 43 54 20 4e 4f 4e 45 7d 0a 20 20 64 6f 5f 74  ICT NONE}.  do_t
3750: 65 73 74 20 70 72 61 67 6d 61 2d 36 2e 34 20 7b  est pragma-6.4 {
3760: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
3770: 20 20 20 20 20 70 72 61 67 6d 61 20 69 6e 64 65       pragma inde
3780: 78 5f 6c 69 73 74 28 74 33 29 3b 0a 20 20 20 20  x_list(t3);.    
3790: 7d 0a 20 20 7d 20 7b 30 20 73 71 6c 69 74 65 5f  }.  } {0 sqlite_
37a0: 61 75 74 6f 69 6e 64 65 78 5f 74 33 5f 31 20 31  autoindex_t3_1 1
37b0: 7d 0a 7d 0a 69 66 63 61 70 61 62 6c 65 20 7b 21  }.}.ifcapable {!
37c0: 66 6f 72 65 69 67 6e 6b 65 79 7d 20 7b 0a 20 20  foreignkey} {.  
37d0: 65 78 65 63 73 71 6c 20 7b 43 52 45 41 54 45 20  execsql {CREATE 
37e0: 54 41 42 4c 45 20 74 33 28 61 2c 62 20 55 4e 49  TABLE t3(a,b UNI
37f0: 51 55 45 29 7d 0a 7d 0a 64 6f 5f 74 65 73 74 20  QUE)}.}.do_test 
3800: 70 72 61 67 6d 61 2d 36 2e 35 20 7b 0a 20 20 65  pragma-6.5 {.  e
3810: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45  xecsql {.    CRE
3820: 41 54 45 20 49 4e 44 45 58 20 74 33 69 31 20 4f  ATE INDEX t3i1 O
3830: 4e 20 74 33 28 61 2c 62 29 3b 0a 20 20 20 20 70  N t3(a,b);.    p
3840: 72 61 67 6d 61 20 69 6e 64 65 78 5f 69 6e 66 6f  ragma index_info
3850: 28 74 33 69 31 29 3b 0a 20 20 7d 0a 7d 20 7b 30  (t3i1);.  }.} {0
3860: 20 30 20 61 20 31 20 31 20 62 7d 0a 0a 69 66 63   0 a 1 1 b}..ifc
3870: 61 70 61 62 6c 65 20 74 65 6d 70 64 62 20 7b 0a  apable tempdb {.
3880: 20 20 23 20 54 65 73 74 20 66 6f 72 20 74 69 63    # Test for tic
3890: 6b 65 74 20 23 33 33 32 30 2e 20 57 68 65 6e 20  ket #3320. When 
38a0: 61 20 74 65 6d 70 20 74 61 62 6c 65 20 6f 66 20  a temp table of 
38b0: 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 65 78  the same name ex
38c0: 69 73 74 73 2c 20 6d 61 6b 65 0a 20 20 23 20 73  ists, make.  # s
38d0: 75 72 65 20 74 68 65 20 73 63 68 65 6d 61 20 6f  ure the schema o
38e0: 66 20 74 68 65 20 6d 61 69 6e 20 74 61 62 6c 65  f the main table
38f0: 20 63 61 6e 20 73 74 69 6c 6c 20 62 65 20 71 75   can still be qu
3900: 65 72 69 65 64 20 75 73 69 6e 67 20 0a 20 20 23  eried using .  #
3910: 20 22 70 72 61 67 6d 61 20 74 61 62 6c 65 5f 69   "pragma table_i
3920: 6e 66 6f 22 3a 0a 20 20 64 6f 5f 74 65 73 74 20  nfo":.  do_test 
3930: 70 72 61 67 6d 61 2d 36 2e 36 2e 31 20 7b 0a 20  pragma-6.6.1 {. 
3940: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
3950: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
3960: 74 72 69 61 6c 28 63 6f 6c 5f 6d 61 69 6e 29 3b  trial(col_main);
3970: 0a 20 20 20 20 20 20 43 52 45 41 54 45 20 54 45  .      CREATE TE
3980: 4d 50 20 54 41 42 4c 45 20 74 72 69 61 6c 28 63  MP TABLE trial(c
3990: 6f 6c 5f 74 65 6d 70 29 3b 0a 20 20 20 20 7d 0a  ol_temp);.    }.
39a0: 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65 73 74    } {}.  do_test
39b0: 20 70 72 61 67 6d 61 2d 36 2e 36 2e 32 20 7b 0a   pragma-6.6.2 {.
39c0: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20      execsql {.  
39d0: 20 20 20 20 50 52 41 47 4d 41 20 74 61 62 6c 65      PRAGMA table
39e0: 5f 69 6e 66 6f 28 74 72 69 61 6c 29 3b 0a 20 20  _info(trial);.  
39f0: 20 20 7d 0a 20 20 7d 20 7b 30 20 63 6f 6c 5f 74    }.  } {0 col_t
3a00: 65 6d 70 20 7b 7d 20 30 20 7b 7d 20 30 7d 0a 20  emp {} 0 {} 0}. 
3a10: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
3a20: 36 2e 36 2e 33 20 7b 0a 20 20 20 20 65 78 65 63  6.6.3 {.    exec
3a30: 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47  sql {.      PRAG
3a40: 4d 41 20 74 65 6d 70 2e 74 61 62 6c 65 5f 69 6e  MA temp.table_in
3a50: 66 6f 28 74 72 69 61 6c 29 3b 0a 20 20 20 20 7d  fo(trial);.    }
3a60: 0a 20 20 7d 20 7b 30 20 63 6f 6c 5f 74 65 6d 70  .  } {0 col_temp
3a70: 20 7b 7d 20 30 20 7b 7d 20 30 7d 0a 20 20 64 6f   {} 0 {} 0}.  do
3a80: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 36 2e 36  _test pragma-6.6
3a90: 2e 34 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  .4 {.    execsql
3aa0: 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20   {.      PRAGMA 
3ab0: 6d 61 69 6e 2e 74 61 62 6c 65 5f 69 6e 66 6f 28  main.table_info(
3ac0: 74 72 69 61 6c 29 3b 0a 20 20 20 20 7d 0a 20 20  trial);.    }.  
3ad0: 7d 20 7b 30 20 63 6f 6c 5f 6d 61 69 6e 20 7b 7d  } {0 col_main {}
3ae0: 20 30 20 7b 7d 20 30 7d 0a 7d 0a 0a 62 72 65 61   0 {} 0}.}..brea
3af0: 6b 70 6f 69 6e 74 0a 64 6f 5f 74 65 73 74 20 70  kpoint.do_test p
3b00: 72 61 67 6d 61 2d 36 2e 37 20 7b 0a 20 20 65 78  ragma-6.7 {.  ex
3b10: 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41  ecsql {.    CREA
3b20: 54 45 20 54 41 42 4c 45 20 74 65 73 74 5f 74 61  TE TABLE test_ta
3b30: 62 6c 65 28 0a 20 20 20 20 20 20 6f 6e 65 20 49  ble(.      one I
3b40: 4e 54 20 4e 4f 54 20 4e 55 4c 4c 20 44 45 46 41  NT NOT NULL DEFA
3b50: 55 4c 54 20 2d 31 2c 20 0a 20 20 20 20 20 20 74  ULT -1, .      t
3b60: 77 6f 20 74 65 78 74 2c 0a 20 20 20 20 20 20 74  wo text,.      t
3b70: 68 72 65 65 20 56 41 52 43 48 41 52 28 34 35 2c  hree VARCHAR(45,
3b80: 20 36 35 29 20 44 45 46 41 55 4c 54 20 27 61 62   65) DEFAULT 'ab
3b90: 63 64 65 27 2c 0a 20 20 20 20 20 20 66 6f 75 72  cde',.      four
3ba0: 20 52 45 41 4c 20 44 45 46 41 55 4c 54 20 58 27   REAL DEFAULT X'
3bb0: 61 62 63 64 65 66 27 2c 0a 20 20 20 20 20 20 66  abcdef',.      f
3bc0: 69 76 65 20 44 45 46 41 55 4c 54 20 43 55 52 52  ive DEFAULT CURR
3bd0: 45 4e 54 5f 54 49 4d 45 0a 20 20 20 20 29 3b 0a  ENT_TIME.    );.
3be0: 20 20 20 20 50 52 41 47 4d 41 20 74 61 62 6c 65      PRAGMA table
3bf0: 5f 69 6e 66 6f 28 74 65 73 74 5f 74 61 62 6c 65  _info(test_table
3c00: 29 3b 0a 20 20 7d 0a 7d 20 5b 63 6f 6e 63 61 74  );.  }.} [concat
3c10: 20 5c 0a 20 20 7b 30 20 6f 6e 65 20 49 4e 54 20   \.  {0 one INT 
3c20: 31 20 2d 31 20 30 7d 20 5c 0a 20 20 7b 31 20 74  1 -1 0} \.  {1 t
3c30: 77 6f 20 74 65 78 74 20 30 20 7b 7d 20 30 7d 20  wo text 0 {} 0} 
3c40: 5c 0a 20 20 7b 32 20 74 68 72 65 65 20 7b 56 41  \.  {2 three {VA
3c50: 52 43 48 41 52 28 34 35 2c 20 36 35 29 7d 20 30  RCHAR(45, 65)} 0
3c60: 20 27 61 62 63 64 65 27 20 30 7d 20 5c 0a 20 20   'abcde' 0} \.  
3c70: 7b 33 20 66 6f 75 72 20 52 45 41 4c 20 30 20 58  {3 four REAL 0 X
3c80: 27 61 62 63 64 65 66 27 20 30 7d 20 5c 0a 20 20  'abcdef' 0} \.  
3c90: 7b 34 20 66 69 76 65 20 7b 7d 20 30 20 43 55 52  {4 five {} 0 CUR
3ca0: 52 45 4e 54 5f 54 49 4d 45 20 30 7d 20 5c 0a 5d  RENT_TIME 0} \.]
3cb0: 0a 7d 20 3b 23 20 69 66 63 61 70 61 62 6c 65 20  .} ;# ifcapable 
3cc0: 73 63 68 65 6d 61 5f 70 72 61 67 6d 61 73 0a 23  schema_pragmas.#
3cd0: 20 4d 69 73 63 65 6c 6c 61 6e 65 6f 75 73 20 74   Miscellaneous t
3ce0: 65 73 74 73 0a 23 0a 69 66 63 61 70 61 62 6c 65  ests.#.ifcapable
3cf0: 20 73 63 68 65 6d 61 5f 70 72 61 67 6d 61 73 20   schema_pragmas 
3d00: 7b 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  {.do_test pragma
3d10: 2d 37 2e 31 20 7b 0a 20 20 23 20 4d 61 6b 65 20  -7.1 {.  # Make 
3d20: 73 75 72 65 20 61 20 70 72 61 67 6d 61 20 6b 6e  sure a pragma kn
3d30: 6f 77 73 20 74 6f 20 72 65 61 64 20 74 68 65 20  ows to read the 
3d40: 73 63 68 65 6d 61 20 69 66 20 69 74 20 6e 65 65  schema if it nee
3d50: 64 73 20 74 6f 0a 20 20 64 62 20 63 6c 6f 73 65  ds to.  db close
3d60: 0a 20 20 73 71 6c 69 74 65 33 20 64 62 20 74 65  .  sqlite3 db te
3d70: 73 74 2e 64 62 0a 20 20 65 78 65 63 73 71 6c 20  st.db.  execsql 
3d80: 7b 0a 20 20 20 20 70 72 61 67 6d 61 20 69 6e 64  {.    pragma ind
3d90: 65 78 5f 6c 69 73 74 28 74 33 29 3b 0a 20 20 7d  ex_list(t3);.  }
3da0: 0a 7d 20 7b 30 20 74 33 69 31 20 30 20 31 20 73  .} {0 t3i1 0 1 s
3db0: 71 6c 69 74 65 5f 61 75 74 6f 69 6e 64 65 78 5f  qlite_autoindex_
3dc0: 74 33 5f 31 20 31 7d 0a 7d 20 3b 23 20 69 66 63  t3_1 1}.} ;# ifc
3dd0: 61 70 61 62 6c 65 20 73 63 68 65 6d 61 5f 70 72  apable schema_pr
3de0: 61 67 6d 61 73 0a 69 66 63 61 70 61 62 6c 65 20  agmas.ifcapable 
3df0: 7b 75 74 66 31 36 7d 20 7b 0a 20 20 64 6f 5f 74  {utf16} {.  do_t
3e00: 65 73 74 20 70 72 61 67 6d 61 2d 37 2e 32 20 7b  est pragma-7.2 {
3e10: 0a 20 20 20 20 64 62 20 63 6c 6f 73 65 0a 20 20  .    db close.  
3e20: 20 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73    sqlite3 db tes
3e30: 74 2e 64 62 0a 20 20 20 20 63 61 74 63 68 73 71  t.db.    catchsq
3e40: 6c 20 7b 0a 20 20 20 20 20 20 70 72 61 67 6d 61  l {.      pragma
3e50: 20 65 6e 63 6f 64 69 6e 67 3d 62 6f 67 75 73 3b   encoding=bogus;
3e60: 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 31 20 7b 75  .    }.  } {1 {u
3e70: 6e 73 75 70 70 6f 72 74 65 64 20 65 6e 63 6f 64  nsupported encod
3e80: 69 6e 67 3a 20 62 6f 67 75 73 7d 7d 0a 7d 0a 69  ing: bogus}}.}.i
3e90: 66 63 61 70 61 62 6c 65 20 74 65 6d 70 64 62 20  fcapable tempdb 
3ea0: 7b 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67  {.  do_test prag
3eb0: 6d 61 2d 37 2e 33 20 7b 0a 20 20 20 20 64 62 20  ma-7.3 {.    db 
3ec0: 63 6c 6f 73 65 0a 20 20 20 20 73 71 6c 69 74 65  close.    sqlite
3ed0: 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20 20  3 db test.db.   
3ee0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20   execsql {.     
3ef0: 20 70 72 61 67 6d 61 20 6c 6f 63 6b 5f 73 74 61   pragma lock_sta
3f00: 74 75 73 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b  tus;.    }.  } {
3f10: 6d 61 69 6e 20 75 6e 6c 6f 63 6b 65 64 20 74 65  main unlocked te
3f20: 6d 70 20 63 6c 6f 73 65 64 7d 0a 7d 20 65 6c 73  mp closed}.} els
3f30: 65 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 70 72  e {.  do_test pr
3f40: 61 67 6d 61 2d 37 2e 33 20 7b 0a 20 20 20 20 64  agma-7.3 {.    d
3f50: 62 20 63 6c 6f 73 65 0a 20 20 20 20 73 71 6c 69  b close.    sqli
3f60: 74 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20  te3 db test.db. 
3f70: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
3f80: 20 20 20 70 72 61 67 6d 61 20 6c 6f 63 6b 5f 73     pragma lock_s
3f90: 74 61 74 75 73 3b 0a 20 20 20 20 7d 0a 20 20 7d  tatus;.    }.  }
3fa0: 20 7b 6d 61 69 6e 20 75 6e 6c 6f 63 6b 65 64 7d   {main unlocked}
3fb0: 0a 7d 0a 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  .}...#----------
3fc0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3fd0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3fe0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3ff0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 54  ------------.# T
4000: 65 73 74 20 63 61 73 65 73 20 70 72 61 67 6d 61  est cases pragma
4010: 2d 38 2e 2a 20 74 65 73 74 20 74 68 65 20 22 50  -8.* test the "P
4020: 52 41 47 4d 41 20 73 63 68 65 6d 61 5f 76 65 72  RAGMA schema_ver
4030: 73 69 6f 6e 22 20 61 6e 64 20 22 50 52 41 47 4d  sion" and "PRAGM
4040: 41 0a 23 20 75 73 65 72 5f 76 65 72 73 69 6f 6e  A.# user_version
4050: 22 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 23 0a  " statements..#.
4060: 23 20 70 72 61 67 6d 61 2d 38 2e 31 3a 20 50 52  # pragma-8.1: PR
4070: 41 47 4d 41 20 73 63 68 65 6d 61 5f 76 65 72 73  AGMA schema_vers
4080: 69 6f 6e 0a 23 20 70 72 61 67 6d 61 2d 38 2e 32  ion.# pragma-8.2
4090: 3a 20 50 52 41 47 4d 41 20 75 73 65 72 5f 76 65  : PRAGMA user_ve
40a0: 72 73 69 6f 6e 0a 23 0a 0a 69 66 63 61 70 61 62  rsion.#..ifcapab
40b0: 6c 65 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f  le schema_versio
40c0: 6e 20 7b 0a 0a 23 20 46 69 72 73 74 20 63 68 65  n {..# First che
40d0: 63 6b 20 74 68 61 74 20 77 65 20 63 61 6e 20 73  ck that we can s
40e0: 65 74 20 74 68 65 20 73 63 68 65 6d 61 20 76 65  et the schema ve
40f0: 72 73 69 6f 6e 20 61 6e 64 20 74 68 65 6e 20 72  rsion and then r
4100: 65 74 72 69 65 76 65 20 74 68 65 0a 23 20 73 61  etrieve the.# sa
4110: 6d 65 20 76 61 6c 75 65 2e 0a 64 6f 5f 74 65 73  me value..do_tes
4120: 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e 31 20 7b  t pragma-8.1.1 {
4130: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
4140: 20 50 52 41 47 4d 41 20 73 63 68 65 6d 61 5f 76   PRAGMA schema_v
4150: 65 72 73 69 6f 6e 20 3d 20 31 30 35 3b 0a 20 20  ersion = 105;.  
4160: 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 70  }.} {}.do_test p
4170: 72 61 67 6d 61 2d 38 2e 31 2e 32 20 7b 0a 20 20  ragma-8.1.2 {.  
4180: 65 78 65 63 73 71 6c 32 20 7b 0a 20 20 20 20 50  execsql2 {.    P
4190: 52 41 47 4d 41 20 73 63 68 65 6d 61 5f 76 65 72  RAGMA schema_ver
41a0: 73 69 6f 6e 3b 0a 20 20 7d 0a 7d 20 7b 73 63 68  sion;.  }.} {sch
41b0: 65 6d 61 5f 76 65 72 73 69 6f 6e 20 31 30 35 7d  ema_version 105}
41c0: 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d  .do_test pragma-
41d0: 38 2e 31 2e 33 20 7b 0a 20 20 65 78 65 63 73 71  8.1.3 {.  execsq
41e0: 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 73  l {.    PRAGMA s
41f0: 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 20 3d 20  chema_version = 
4200: 31 30 36 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f  106;.  }.} {}.do
4210: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 31  _test pragma-8.1
4220: 2e 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .4 {.  execsql {
4230: 0a 20 20 20 20 50 52 41 47 4d 41 20 73 63 68 65  .    PRAGMA sche
4240: 6d 61 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 7d 0a  ma_version;.  }.
4250: 7d 20 31 30 36 0a 0a 23 20 43 68 65 63 6b 20 74  } 106..# Check t
4260: 68 61 74 20 63 72 65 61 74 69 6e 67 20 61 20 74  hat creating a t
4270: 61 62 6c 65 20 6d 6f 64 69 66 69 65 73 20 74 68  able modifies th
4280: 65 20 73 63 68 65 6d 61 2d 76 65 72 73 69 6f 6e  e schema-version
4290: 20 28 74 68 69 73 20 69 73 20 72 65 61 6c 6c 79   (this is really
42a0: 0a 23 20 74 6f 20 76 65 72 69 66 79 20 74 68 61  .# to verify tha
42b0: 74 20 74 68 65 20 76 61 6c 75 65 20 62 65 69 6e  t the value bein
42c0: 67 20 72 65 61 64 20 69 73 20 69 6e 20 66 61 63  g read is in fac
42d0: 74 20 74 68 65 20 73 63 68 65 6d 61 20 76 65 72  t the schema ver
42e0: 73 69 6f 6e 29 2e 0a 64 6f 5f 74 65 73 74 20 70  sion)..do_test p
42f0: 72 61 67 6d 61 2d 38 2e 31 2e 35 20 7b 0a 20 20  ragma-8.1.5 {.  
4300: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52  execsql {.    CR
4310: 45 41 54 45 20 54 41 42 4c 45 20 74 34 28 61 2c  EATE TABLE t4(a,
4320: 20 62 2c 20 63 29 3b 0a 20 20 20 20 49 4e 53 45   b, c);.    INSE
4330: 52 54 20 49 4e 54 4f 20 74 34 20 56 41 4c 55 45  RT INTO t4 VALUE
4340: 53 28 31 2c 20 32 2c 20 33 29 3b 0a 20 20 20 20  S(1, 2, 3);.    
4350: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 34  SELECT * FROM t4
4360: 3b 0a 20 20 7d 0a 7d 20 7b 31 20 32 20 33 7d 0a  ;.  }.} {1 2 3}.
4370: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38  do_test pragma-8
4380: 2e 31 2e 36 20 7b 0a 20 20 65 78 65 63 73 71 6c  .1.6 {.  execsql
4390: 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 73 63   {.    PRAGMA sc
43a0: 68 65 6d 61 5f 76 65 72 73 69 6f 6e 3b 0a 20 20  hema_version;.  
43b0: 7d 0a 7d 20 31 30 37 0a 0a 23 20 4e 6f 77 20 6f  }.} 107..# Now o
43c0: 70 65 6e 20 61 20 73 65 63 6f 6e 64 20 63 6f 6e  pen a second con
43d0: 6e 65 63 74 69 6f 6e 20 74 6f 20 74 68 65 20 64  nection to the d
43e0: 61 74 61 62 61 73 65 2e 20 45 6e 73 75 72 65 20  atabase. Ensure 
43f0: 74 68 61 74 20 63 68 61 6e 67 69 6e 67 20 74 68  that changing th
4400: 65 0a 23 20 73 63 68 65 6d 61 2d 76 65 72 73 69  e.# schema-versi
4410: 6f 6e 20 75 73 69 6e 67 20 74 68 65 20 66 69 72  on using the fir
4420: 73 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6f  st connection fo
4430: 72 63 65 73 20 74 68 65 20 73 65 63 6f 6e 64 20  rces the second 
4440: 63 6f 6e 6e 65 63 74 69 6f 6e 0a 23 20 74 6f 20  connection.# to 
4450: 72 65 6c 6f 61 64 20 74 68 65 20 73 63 68 65 6d  reload the schem
4460: 61 2e 20 54 68 69 73 20 68 61 73 20 74 6f 20 62  a. This has to b
4470: 65 20 64 6f 6e 65 20 75 73 69 6e 67 20 74 68 65  e done using the
4480: 20 43 2d 41 50 49 20 74 65 73 74 20 66 75 6e 63   C-API test func
4490: 74 69 6f 6e 73 2c 0a 23 20 62 65 63 61 75 73 65  tions,.# because
44a0: 20 74 68 65 20 54 43 4c 20 41 50 49 20 61 63 63   the TCL API acc
44b0: 6f 75 6e 74 73 20 66 6f 72 20 53 43 48 45 4d 41  ounts for SCHEMA
44c0: 5f 45 52 52 4f 52 20 61 6e 64 20 72 65 74 72 69  _ERROR and retri
44d0: 65 73 20 74 68 65 20 71 75 65 72 79 2e 0a 64 6f  es the query..do
44e0: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 31  _test pragma-8.1
44f0: 2e 37 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 64  .7 {.  sqlite3 d
4500: 62 32 20 74 65 73 74 2e 64 62 3b 20 73 65 74 20  b2 test.db; set 
4510: 3a 3a 44 42 32 20 5b 73 71 6c 69 74 65 33 5f 63  ::DB2 [sqlite3_c
4520: 6f 6e 6e 65 63 74 69 6f 6e 5f 70 6f 69 6e 74 65  onnection_pointe
4530: 72 20 64 62 32 5d 0a 20 20 65 78 65 63 73 71 6c  r db2].  execsql
4540: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20   {.    SELECT * 
4550: 46 52 4f 4d 20 74 34 3b 0a 20 20 7d 20 64 62 32  FROM t4;.  } db2
4560: 0a 7d 20 7b 31 20 32 20 33 7d 0a 64 6f 5f 74 65  .} {1 2 3}.do_te
4570: 73 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e 38 20  st pragma-8.1.8 
4580: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
4590: 20 20 50 52 41 47 4d 41 20 73 63 68 65 6d 61 5f    PRAGMA schema_
45a0: 76 65 72 73 69 6f 6e 20 3d 20 31 30 38 3b 0a 20  version = 108;. 
45b0: 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20   }.} {}.do_test 
45c0: 70 72 61 67 6d 61 2d 38 2e 31 2e 39 20 7b 0a 20  pragma-8.1.9 {. 
45d0: 20 73 65 74 20 3a 3a 53 54 4d 54 20 5b 73 71 6c   set ::STMT [sql
45e0: 69 74 65 33 5f 70 72 65 70 61 72 65 20 24 3a 3a  ite3_prepare $::
45f0: 44 42 32 20 22 53 45 4c 45 43 54 20 2a 20 46 52  DB2 "SELECT * FR
4600: 4f 4d 20 74 34 22 20 2d 31 20 44 55 4d 4d 59 5d  OM t4" -1 DUMMY]
4610: 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20  .  sqlite3_step 
4620: 24 3a 3a 53 54 4d 54 0a 7d 20 53 51 4c 49 54 45  $::STMT.} SQLITE
4630: 5f 45 52 52 4f 52 0a 64 6f 5f 74 65 73 74 20 70  _ERROR.do_test p
4640: 72 61 67 6d 61 2d 38 2e 31 2e 31 30 20 7b 0a 20  ragma-8.1.10 {. 
4650: 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a   sqlite3_finaliz
4660: 65 20 24 3a 3a 53 54 4d 54 0a 7d 20 53 51 4c 49  e $::STMT.} SQLI
4670: 54 45 5f 53 43 48 45 4d 41 0a 0a 23 20 4d 61 6b  TE_SCHEMA..# Mak
4680: 65 20 73 75 72 65 20 74 68 65 20 73 63 68 65 6d  e sure the schem
4690: 61 2d 76 65 72 73 69 6f 6e 20 63 61 6e 20 62 65  a-version can be
46a0: 20 6d 61 6e 69 70 75 6c 61 74 65 64 20 69 6e 20   manipulated in 
46b0: 61 6e 20 61 74 74 61 63 68 65 64 20 64 61 74 61  an attached data
46c0: 62 61 73 65 2e 0a 66 69 6c 65 20 64 65 6c 65 74  base..file delet
46d0: 65 20 2d 66 6f 72 63 65 20 74 65 73 74 32 2e 64  e -force test2.d
46e0: 62 0a 66 69 6c 65 20 64 65 6c 65 74 65 20 2d 66  b.file delete -f
46f0: 6f 72 63 65 20 74 65 73 74 32 2e 64 62 2d 6a 6f  orce test2.db-jo
4700: 75 72 6e 61 6c 0a 69 66 63 61 70 61 62 6c 65 20  urnal.ifcapable 
4710: 61 74 74 61 63 68 20 7b 0a 20 20 64 6f 5f 74 65  attach {.  do_te
4720: 73 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e 31 31  st pragma-8.1.11
4730: 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b   {.    execsql {
4740: 0a 20 20 20 20 20 20 41 54 54 41 43 48 20 27 74  .      ATTACH 't
4750: 65 73 74 32 2e 64 62 27 20 41 53 20 61 75 78 3b  est2.db' AS aux;
4760: 0a 20 20 20 20 20 20 43 52 45 41 54 45 20 54 41  .      CREATE TA
4770: 42 4c 45 20 61 75 78 2e 74 31 28 61 2c 20 62 2c  BLE aux.t1(a, b,
4780: 20 63 29 3b 0a 20 20 20 20 20 20 50 52 41 47 4d   c);.      PRAGM
4790: 41 20 61 75 78 2e 73 63 68 65 6d 61 5f 76 65 72  A aux.schema_ver
47a0: 73 69 6f 6e 20 3d 20 32 30 35 3b 0a 20 20 20 20  sion = 205;.    
47b0: 7d 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65  }.  } {}.  do_te
47c0: 73 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e 31 32  st pragma-8.1.12
47d0: 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b   {.    execsql {
47e0: 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 61 75  .      PRAGMA au
47f0: 78 2e 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e  x.schema_version
4800: 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 32 30 35 0a  ;.    }.  } 205.
4810: 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  }.do_test pragma
4820: 2d 38 2e 31 2e 31 33 20 7b 0a 20 20 65 78 65 63  -8.1.13 {.  exec
4830: 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41  sql {.    PRAGMA
4840: 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 3b   schema_version;
4850: 0a 20 20 7d 0a 7d 20 31 30 38 0a 0a 23 20 41 6e  .  }.} 108..# An
4860: 64 20 63 68 65 63 6b 20 74 68 61 74 20 6d 6f 64  d check that mod
4870: 69 66 79 69 6e 67 20 74 68 65 20 73 63 68 65 6d  ifying the schem
4880: 61 2d 76 65 72 73 69 6f 6e 20 69 6e 20 61 6e 20  a-version in an 
4890: 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
48a0: 65 0a 23 20 66 6f 72 63 65 73 20 74 68 65 20 73  e.# forces the s
48b0: 65 63 6f 6e 64 20 63 6f 6e 6e 65 63 74 69 6f 6e  econd connection
48c0: 20 74 6f 20 72 65 6c 6f 61 64 20 74 68 65 20 73   to reload the s
48d0: 63 68 65 6d 61 2e 0a 69 66 63 61 70 61 62 6c 65  chema..ifcapable
48e0: 20 61 74 74 61 63 68 20 7b 0a 20 20 64 6f 5f 74   attach {.  do_t
48f0: 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e 31  est pragma-8.1.1
4900: 34 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 20  4 {.    sqlite3 
4910: 64 62 32 20 74 65 73 74 2e 64 62 3b 20 73 65 74  db2 test.db; set
4920: 20 3a 3a 44 42 32 20 5b 73 71 6c 69 74 65 33 5f   ::DB2 [sqlite3_
4930: 63 6f 6e 6e 65 63 74 69 6f 6e 5f 70 6f 69 6e 74  connection_point
4940: 65 72 20 64 62 32 5d 0a 20 20 20 20 65 78 65 63  er db2].    exec
4950: 73 71 6c 20 7b 0a 20 20 20 20 20 20 41 54 54 41  sql {.      ATTA
4960: 43 48 20 27 74 65 73 74 32 2e 64 62 27 20 41 53  CH 'test2.db' AS
4970: 20 61 75 78 3b 0a 20 20 20 20 20 20 53 45 4c 45   aux;.      SELE
4980: 43 54 20 2a 20 46 52 4f 4d 20 61 75 78 2e 74 31  CT * FROM aux.t1
4990: 3b 0a 20 20 20 20 7d 20 64 62 32 0a 20 20 7d 20  ;.    } db2.  } 
49a0: 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61  {}.  do_test pra
49b0: 67 6d 61 2d 38 2e 31 2e 31 35 20 7b 0a 20 20 20  gma-8.1.15 {.   
49c0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20   execsql {.     
49d0: 20 50 52 41 47 4d 41 20 61 75 78 2e 73 63 68 65   PRAGMA aux.sche
49e0: 6d 61 5f 76 65 72 73 69 6f 6e 20 3d 20 32 30 36  ma_version = 206
49f0: 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 7d 0a 20  ;.    }.  } {}. 
4a00: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
4a10: 38 2e 31 2e 31 36 20 7b 0a 20 20 20 20 73 65 74  8.1.16 {.    set
4a20: 20 3a 3a 53 54 4d 54 20 5b 73 71 6c 69 74 65 33   ::STMT [sqlite3
4a30: 5f 70 72 65 70 61 72 65 20 24 3a 3a 44 42 32 20  _prepare $::DB2 
4a40: 22 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 61  "SELECT * FROM a
4a50: 75 78 2e 74 31 22 20 2d 31 20 44 55 4d 4d 59 5d  ux.t1" -1 DUMMY]
4a60: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 74 65  .    sqlite3_ste
4a70: 70 20 24 3a 3a 53 54 4d 54 0a 20 20 7d 20 53 51  p $::STMT.  } SQ
4a80: 4c 49 54 45 5f 45 52 52 4f 52 0a 20 20 64 6f 5f  LITE_ERROR.  do_
4a90: 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e  test pragma-8.1.
4aa0: 31 37 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  17 {.    sqlite3
4ab0: 5f 66 69 6e 61 6c 69 7a 65 20 24 3a 3a 53 54 4d  _finalize $::STM
4ac0: 54 0a 20 20 7d 20 53 51 4c 49 54 45 5f 53 43 48  T.  } SQLITE_SCH
4ad0: 45 4d 41 0a 20 20 64 6f 5f 74 65 73 74 20 70 72  EMA.  do_test pr
4ae0: 61 67 6d 61 2d 38 2e 31 2e 31 38 20 7b 0a 20 20  agma-8.1.18 {.  
4af0: 20 20 64 62 32 20 63 6c 6f 73 65 0a 20 20 7d 20    db2 close.  } 
4b00: 7b 7d 0a 7d 0a 0a 23 20 4e 6f 77 20 74 65 73 74  {}.}..# Now test
4b10: 20 74 68 61 74 20 74 68 65 20 75 73 65 72 2d 76   that the user-v
4b20: 65 72 73 69 6f 6e 20 63 61 6e 20 62 65 20 72 65  ersion can be re
4b30: 61 64 20 61 6e 64 20 77 72 69 74 74 65 6e 20 28  ad and written (
4b40: 61 6e 64 20 74 68 61 74 20 77 65 20 61 72 65 6e  and that we aren
4b50: 27 74 0a 23 20 61 63 63 69 64 65 6e 74 61 6c 6c  't.# accidentall
4b60: 79 20 6d 61 6e 69 70 75 6c 61 74 69 6e 67 20 74  y manipulating t
4b70: 68 65 20 73 63 68 65 6d 61 2d 76 65 72 73 69 6f  he schema-versio
4b80: 6e 20 69 6e 73 74 65 61 64 29 2e 0a 64 6f 5f 74  n instead)..do_t
4b90: 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 32 2e 31  est pragma-8.2.1
4ba0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 32 20 7b 0a   {.  execsql2 {.
4bb0: 20 20 20 20 50 52 41 47 4d 41 20 75 73 65 72 5f      PRAGMA user_
4bc0: 76 65 72 73 69 6f 6e 3b 0a 20 20 7d 0a 7d 20 7b  version;.  }.} {
4bd0: 75 73 65 72 5f 76 65 72 73 69 6f 6e 20 30 7d 0a  user_version 0}.
4be0: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38  do_test pragma-8
4bf0: 2e 32 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c  .2.2 {.  execsql
4c00: 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 75 73   {.    PRAGMA us
4c10: 65 72 5f 76 65 72 73 69 6f 6e 20 3d 20 32 3b 0a  er_version = 2;.
4c20: 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74    }.} {}.do_test
4c30: 20 70 72 61 67 6d 61 2d 38 2e 32 2e 33 2e 31 20   pragma-8.2.3.1 
4c40: 7b 0a 20 20 65 78 65 63 73 71 6c 32 20 7b 0a 20  {.  execsql2 {. 
4c50: 20 20 20 50 52 41 47 4d 41 20 75 73 65 72 5f 76     PRAGMA user_v
4c60: 65 72 73 69 6f 6e 3b 0a 20 20 7d 0a 7d 20 7b 75  ersion;.  }.} {u
4c70: 73 65 72 5f 76 65 72 73 69 6f 6e 20 32 7d 0a 64  ser_version 2}.d
4c80: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e  o_test pragma-8.
4c90: 32 2e 33 2e 32 20 7b 0a 20 20 64 62 20 63 6c 6f  2.3.2 {.  db clo
4ca0: 73 65 0a 20 20 73 71 6c 69 74 65 33 20 64 62 20  se.  sqlite3 db 
4cb0: 74 65 73 74 2e 64 62 0a 20 20 65 78 65 63 73 71  test.db.  execsq
4cc0: 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 75  l {.    PRAGMA u
4cd0: 73 65 72 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 7d  ser_version;.  }
4ce0: 0a 7d 20 7b 32 7d 0a 64 6f 5f 74 65 73 74 20 70  .} {2}.do_test p
4cf0: 72 61 67 6d 61 2d 38 2e 32 2e 34 2e 31 20 7b 0a  ragma-8.2.4.1 {.
4d00: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
4d10: 50 52 41 47 4d 41 20 73 63 68 65 6d 61 5f 76 65  PRAGMA schema_ve
4d20: 72 73 69 6f 6e 3b 0a 20 20 7d 0a 7d 20 7b 31 30  rsion;.  }.} {10
4d30: 38 7d 0a 69 66 63 61 70 61 62 6c 65 20 76 61 63  8}.ifcapable vac
4d40: 75 75 6d 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20  uum {.  do_test 
4d50: 70 72 61 67 6d 61 2d 38 2e 32 2e 34 2e 32 20 7b  pragma-8.2.4.2 {
4d60: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
4d70: 20 20 20 20 20 56 41 43 55 55 4d 3b 0a 20 20 20       VACUUM;.   
4d80: 20 20 20 50 52 41 47 4d 41 20 75 73 65 72 5f 76     PRAGMA user_v
4d90: 65 72 73 69 6f 6e 3b 0a 20 20 20 20 7d 0a 20 20  ersion;.    }.  
4da0: 7d 20 7b 32 7d 0a 20 20 64 6f 5f 74 65 73 74 20  } {2}.  do_test 
4db0: 70 72 61 67 6d 61 2d 38 2e 32 2e 34 2e 33 20 7b  pragma-8.2.4.3 {
4dc0: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
4dd0: 20 20 20 20 20 50 52 41 47 4d 41 20 73 63 68 65       PRAGMA sche
4de0: 6d 61 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 20 20  ma_version;.    
4df0: 7d 0a 20 20 7d 20 7b 31 30 39 7d 0a 7d 0a 0a 69  }.  } {109}.}..i
4e00: 66 63 61 70 61 62 6c 65 20 61 74 74 61 63 68 20  fcapable attach 
4e10: 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 41 54 54  {.  db eval {ATT
4e20: 41 43 48 20 27 74 65 73 74 32 2e 64 62 27 20 41  ACH 'test2.db' A
4e30: 53 20 61 75 78 7d 0a 20 20 0a 20 20 23 20 43 68  S aux}.  .  # Ch
4e40: 65 63 6b 20 74 68 61 74 20 74 68 65 20 75 73 65  eck that the use
4e50: 72 2d 76 65 72 73 69 6f 6e 20 69 6e 20 74 68 65  r-version in the
4e60: 20 61 75 78 69 6c 61 72 79 20 64 61 74 61 62 61   auxilary databa
4e70: 73 65 20 63 61 6e 20 62 65 20 6d 61 6e 69 70 75  se can be manipu
4e80: 6c 61 74 65 64 20 28 0a 20 20 23 20 61 6e 64 20  lated (.  # and 
4e90: 74 68 61 74 20 77 65 20 61 72 65 6e 27 74 20 61  that we aren't a
4ea0: 63 63 69 64 65 6e 74 61 6c 6c 79 20 6d 61 6e 69  ccidentally mani
4eb0: 70 75 6c 61 74 69 6e 67 20 74 68 65 20 73 61 6d  pulating the sam
4ec0: 65 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 62  e in the main db
4ed0: 29 2e 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61  )..  do_test pra
4ee0: 67 6d 61 2d 38 2e 32 2e 35 20 7b 0a 20 20 20 20  gma-8.2.5 {.    
4ef0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
4f00: 50 52 41 47 4d 41 20 61 75 78 2e 75 73 65 72 5f  PRAGMA aux.user_
4f10: 76 65 72 73 69 6f 6e 3b 0a 20 20 20 20 7d 0a 20  version;.    }. 
4f20: 20 7d 20 7b 30 7d 0a 20 20 64 6f 5f 74 65 73 74   } {0}.  do_test
4f30: 20 70 72 61 67 6d 61 2d 38 2e 32 2e 36 20 7b 0a   pragma-8.2.6 {.
4f40: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20      execsql {.  
4f50: 20 20 20 20 50 52 41 47 4d 41 20 61 75 78 2e 75      PRAGMA aux.u
4f60: 73 65 72 5f 76 65 72 73 69 6f 6e 20 3d 20 33 3b  ser_version = 3;
4f70: 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 7d 0a 20 20  .    }.  } {}.  
4f80: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38  do_test pragma-8
4f90: 2e 32 2e 37 20 7b 0a 20 20 20 20 65 78 65 63 73  .2.7 {.    execs
4fa0: 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d  ql {.      PRAGM
4fb0: 41 20 61 75 78 2e 75 73 65 72 5f 76 65 72 73 69  A aux.user_versi
4fc0: 6f 6e 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 33  on;.    }.  } {3
4fd0: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67  }.  do_test prag
4fe0: 6d 61 2d 38 2e 32 2e 38 20 7b 0a 20 20 20 20 65  ma-8.2.8 {.    e
4ff0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50  xecsql {.      P
5000: 52 41 47 4d 41 20 6d 61 69 6e 2e 75 73 65 72 5f  RAGMA main.user_
5010: 76 65 72 73 69 6f 6e 3b 0a 20 20 20 20 7d 0a 20  version;.    }. 
5020: 20 7d 20 7b 32 7d 0a 20 20 0a 20 20 23 20 4e 6f   } {2}.  .  # No
5030: 77 20 63 68 65 63 6b 20 74 68 61 74 20 61 20 52  w check that a R
5040: 4f 4c 4c 42 41 43 4b 20 72 65 73 65 74 73 20 74  OLLBACK resets t
5050: 68 65 20 75 73 65 72 2d 76 65 72 73 69 6f 6e 20  he user-version 
5060: 69 66 20 69 74 20 68 61 73 20 62 65 65 6e 20 6d  if it has been m
5070: 6f 64 69 66 69 65 64 0a 20 20 23 20 77 69 74 68  odified.  # with
5080: 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  in a transaction
5090: 2e 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67  ..  do_test prag
50a0: 6d 61 2d 38 2e 32 2e 39 20 7b 0a 20 20 20 20 65  ma-8.2.9 {.    e
50b0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 42  xecsql {.      B
50c0: 45 47 49 4e 3b 0a 20 20 20 20 20 20 50 52 41 47  EGIN;.      PRAG
50d0: 4d 41 20 61 75 78 2e 75 73 65 72 5f 76 65 72 73  MA aux.user_vers
50e0: 69 6f 6e 20 3d 20 31 30 3b 0a 20 20 20 20 20 20  ion = 10;.      
50f0: 50 52 41 47 4d 41 20 75 73 65 72 5f 76 65 72 73  PRAGMA user_vers
5100: 69 6f 6e 20 3d 20 31 31 3b 0a 20 20 20 20 7d 0a  ion = 11;.    }.
5110: 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65 73 74    } {}.  do_test
5120: 20 70 72 61 67 6d 61 2d 38 2e 32 2e 31 30 20 7b   pragma-8.2.10 {
5130: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
5140: 20 20 20 20 20 50 52 41 47 4d 41 20 61 75 78 2e       PRAGMA aux.
5150: 75 73 65 72 5f 76 65 72 73 69 6f 6e 3b 0a 20 20  user_version;.  
5160: 20 20 7d 0a 20 20 7d 20 7b 31 30 7d 0a 20 20 64    }.  } {10}.  d
5170: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e  o_test pragma-8.
5180: 32 2e 31 31 20 7b 0a 20 20 20 20 65 78 65 63 73  2.11 {.    execs
5190: 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d  ql {.      PRAGM
51a0: 41 20 6d 61 69 6e 2e 75 73 65 72 5f 76 65 72 73  A main.user_vers
51b0: 69 6f 6e 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b  ion;.    }.  } {
51c0: 31 31 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72  11}.  do_test pr
51d0: 61 67 6d 61 2d 38 2e 32 2e 31 32 20 7b 0a 20 20  agma-8.2.12 {.  
51e0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
51f0: 20 20 52 4f 4c 4c 42 41 43 4b 3b 0a 20 20 20 20    ROLLBACK;.    
5200: 20 20 50 52 41 47 4d 41 20 61 75 78 2e 75 73 65    PRAGMA aux.use
5210: 72 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 20 20 7d  r_version;.    }
5220: 0a 20 20 7d 20 7b 33 7d 0a 20 20 64 6f 5f 74 65  .  } {3}.  do_te
5230: 73 74 20 70 72 61 67 6d 61 2d 38 2e 32 2e 31 33  st pragma-8.2.13
5240: 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b   {.    execsql {
5250: 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 6d 61  .      PRAGMA ma
5260: 69 6e 2e 75 73 65 72 5f 76 65 72 73 69 6f 6e 3b  in.user_version;
5270: 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 32 7d 0a 7d  .    }.  } {2}.}
5280: 0a 0a 23 20 54 72 79 20 61 20 6e 65 67 61 74 69  ..# Try a negati
5290: 76 65 20 76 61 6c 75 65 20 66 6f 72 20 74 68 65  ve value for the
52a0: 20 75 73 65 72 2d 76 65 72 73 69 6f 6e 0a 64 6f   user-version.do
52b0: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 32  _test pragma-8.2
52c0: 2e 31 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  .14 {.  execsql 
52d0: 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 75 73 65  {.    PRAGMA use
52e0: 72 5f 76 65 72 73 69 6f 6e 20 3d 20 2d 34 35 30  r_version = -450
52f0: 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65  ;.  }.} {}.do_te
5300: 73 74 20 70 72 61 67 6d 61 2d 38 2e 32 2e 31 35  st pragma-8.2.15
5310: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
5320: 20 20 20 50 52 41 47 4d 41 20 75 73 65 72 5f 76     PRAGMA user_v
5330: 65 72 73 69 6f 6e 3b 0a 20 20 7d 0a 7d 20 7b 2d  ersion;.  }.} {-
5340: 34 35 30 7d 0a 7d 20 3b 20 23 20 69 66 63 61 70  450}.} ; # ifcap
5350: 61 62 6c 65 20 73 63 68 65 6d 61 5f 76 65 72 73  able schema_vers
5360: 69 6f 6e 0a 0a 23 20 43 68 65 63 6b 20 74 6f 20  ion..# Check to 
5370: 73 65 65 20 69 66 20 54 45 4d 50 5f 53 54 4f 52  see if TEMP_STOR
5380: 45 20 69 73 20 6d 65 6d 6f 72 79 20 6f 72 20 64  E is memory or d
5390: 69 73 6b 2e 20 20 52 65 74 75 72 6e 20 73 74 72  isk.  Return str
53a0: 69 6e 67 73 0a 23 20 22 6d 65 6d 6f 72 79 22 20  ings.# "memory" 
53b0: 6f 72 20 22 64 69 73 6b 22 20 61 73 20 61 70 70  or "disk" as app
53c0: 72 6f 70 72 69 61 74 65 2e 0a 23 0a 70 72 6f 63  ropriate..#.proc
53d0: 20 63 68 65 63 6b 5f 74 65 6d 70 5f 73 74 6f 72   check_temp_stor
53e0: 65 20 7b 7d 20 7b 0a 20 20 64 62 20 65 76 61 6c  e {} {.  db eval
53f0: 20 7b 43 52 45 41 54 45 20 54 45 4d 50 20 54 41   {CREATE TEMP TA
5400: 42 4c 45 20 49 46 20 4e 4f 54 20 45 58 49 53 54  BLE IF NOT EXIST
5410: 53 20 61 28 62 29 7d 0a 20 20 64 62 20 65 76 61  S a(b)}.  db eva
5420: 6c 20 7b 50 52 41 47 4d 41 20 64 61 74 61 62 61  l {PRAGMA databa
5430: 73 65 5f 6c 69 73 74 7d 20 7b 0a 20 20 20 20 69  se_list} {.    i
5440: 66 20 7b 24 6e 61 6d 65 3d 3d 22 74 65 6d 70 22  f {$name=="temp"
5450: 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20 62 74  } {.      set bt
5460: 20 5b 62 74 72 65 65 5f 66 72 6f 6d 5f 64 62 20   [btree_from_db 
5470: 64 62 20 31 5d 0a 20 20 20 20 20 20 69 66 20 7b  db 1].      if {
5480: 5b 62 74 72 65 65 5f 69 73 6d 65 6d 64 62 20 24  [btree_ismemdb $
5490: 62 74 5d 7d 20 7b 0a 20 20 20 20 20 20 20 20 72  bt]} {.        r
54a0: 65 74 75 72 6e 20 22 6d 65 6d 6f 72 79 22 0a 20  eturn "memory". 
54b0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 72 65 74       }.      ret
54c0: 75 72 6e 20 22 64 69 73 6b 22 0a 20 20 20 20 7d  urn "disk".    }
54d0: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 22 75  .  }.  return "u
54e0: 6e 6b 6e 6f 77 6e 22 0a 7d 0a 0a 0a 23 20 54 65  nknown".}...# Te
54f0: 73 74 20 74 65 6d 70 5f 73 74 6f 72 65 20 61 6e  st temp_store an
5500: 64 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72  d temp_store_dir
5510: 65 63 74 6f 72 79 20 70 72 61 67 6d 61 73 0a 23  ectory pragmas.#
5520: 0a 69 66 63 61 70 61 62 6c 65 20 70 61 67 65 72  .ifcapable pager
5530: 5f 70 72 61 67 6d 61 73 20 7b 0a 64 6f 5f 74 65  _pragmas {.do_te
5540: 73 74 20 70 72 61 67 6d 61 2d 39 2e 31 20 7b 0a  st pragma-9.1 {.
5550: 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 73 71 6c    db close.  sql
5560: 69 74 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a  ite3 db test.db.
5570: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
5580: 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72  PRAGMA temp_stor
5590: 65 3b 0a 20 20 7d 0a 7d 20 7b 30 7d 0a 69 66 20  e;.  }.} {0}.if 
55a0: 7b 24 54 45 4d 50 5f 53 54 4f 52 45 3c 3d 31 7d  {$TEMP_STORE<=1}
55b0: 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61   {.  do_test pra
55c0: 67 6d 61 2d 39 2e 31 2e 31 20 7b 0a 20 20 20 20  gma-9.1.1 {.    
55d0: 63 68 65 63 6b 5f 74 65 6d 70 5f 73 74 6f 72 65  check_temp_store
55e0: 0a 20 20 7d 20 7b 64 69 73 6b 7d 0a 7d 20 65 6c  .  } {disk}.} el
55f0: 73 65 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 70  se {.  do_test p
5600: 72 61 67 6d 61 2d 39 2e 31 2e 31 20 7b 0a 20 20  ragma-9.1.1 {.  
5610: 20 20 63 68 65 63 6b 5f 74 65 6d 70 5f 73 74 6f    check_temp_sto
5620: 72 65 0a 20 20 7d 20 7b 6d 65 6d 6f 72 79 7d 0a  re.  } {memory}.
5630: 7d 0a 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  }..do_test pragm
5640: 61 2d 39 2e 32 20 7b 0a 20 20 64 62 20 63 6c 6f  a-9.2 {.  db clo
5650: 73 65 0a 20 20 73 71 6c 69 74 65 33 20 64 62 20  se.  sqlite3 db 
5660: 74 65 73 74 2e 64 62 0a 20 20 65 78 65 63 73 71  test.db.  execsq
5670: 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 74  l {.    PRAGMA t
5680: 65 6d 70 5f 73 74 6f 72 65 3d 66 69 6c 65 3b 0a  emp_store=file;.
5690: 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f      PRAGMA temp_
56a0: 73 74 6f 72 65 3b 0a 20 20 7d 0a 7d 20 7b 31 7d  store;.  }.} {1}
56b0: 0a 69 66 20 7b 24 54 45 4d 50 5f 53 54 4f 52 45  .if {$TEMP_STORE
56c0: 3d 3d 33 7d 20 7b 0a 20 20 23 20 57 68 65 6e 20  ==3} {.  # When 
56d0: 54 45 4d 50 5f 53 54 4f 52 45 20 69 73 20 33 2c  TEMP_STORE is 3,
56e0: 20 61 6c 77 61 79 73 20 75 73 65 20 6d 65 6d 6f   always use memo
56f0: 72 79 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66  ry regardless of
5700: 20 70 72 61 67 6d 61 20 73 65 74 74 69 6e 67 73   pragma settings
5710: 2e 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67  ..  do_test prag
5720: 6d 61 2d 39 2e 32 2e 31 20 7b 0a 20 20 20 20 63  ma-9.2.1 {.    c
5730: 68 65 63 6b 5f 74 65 6d 70 5f 73 74 6f 72 65 0a  heck_temp_store.
5740: 20 20 7d 20 7b 6d 65 6d 6f 72 79 7d 0a 7d 20 65    } {memory}.} e
5750: 6c 73 65 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20  lse {.  do_test 
5760: 70 72 61 67 6d 61 2d 39 2e 32 2e 31 20 7b 0a 20  pragma-9.2.1 {. 
5770: 20 20 20 63 68 65 63 6b 5f 74 65 6d 70 5f 73 74     check_temp_st
5780: 6f 72 65 0a 20 20 7d 20 7b 64 69 73 6b 7d 0a 7d  ore.  } {disk}.}
5790: 0a 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  ..do_test pragma
57a0: 2d 39 2e 33 20 7b 0a 20 20 64 62 20 63 6c 6f 73  -9.3 {.  db clos
57b0: 65 0a 20 20 73 71 6c 69 74 65 33 20 64 62 20 74  e.  sqlite3 db t
57c0: 65 73 74 2e 64 62 0a 20 20 65 78 65 63 73 71 6c  est.db.  execsql
57d0: 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 74 65   {.    PRAGMA te
57e0: 6d 70 5f 73 74 6f 72 65 3d 6d 65 6d 6f 72 79 3b  mp_store=memory;
57f0: 0a 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70  .    PRAGMA temp
5800: 5f 73 74 6f 72 65 3b 0a 20 20 7d 0a 7d 20 7b 32  _store;.  }.} {2
5810: 7d 0a 69 66 20 7b 24 54 45 4d 50 5f 53 54 4f 52  }.if {$TEMP_STOR
5820: 45 3d 3d 30 7d 20 7b 0a 20 20 23 20 57 68 65 6e  E==0} {.  # When
5830: 20 54 45 4d 50 5f 53 54 4f 52 45 20 69 73 20 30   TEMP_STORE is 0
5840: 2c 20 61 6c 77 61 79 73 20 75 73 65 20 74 68 65  , always use the
5850: 20 64 69 73 6b 20 72 65 67 61 72 64 6c 65 73 73   disk regardless
5860: 20 6f 66 20 70 72 61 67 6d 61 20 73 65 74 74 69   of pragma setti
5870: 6e 67 73 2e 0a 20 20 64 6f 5f 74 65 73 74 20 70  ngs..  do_test p
5880: 72 61 67 6d 61 2d 39 2e 33 2e 31 20 7b 0a 20 20  ragma-9.3.1 {.  
5890: 20 20 63 68 65 63 6b 5f 74 65 6d 70 5f 73 74 6f    check_temp_sto
58a0: 72 65 0a 20 20 7d 20 7b 64 69 73 6b 7d 0a 7d 20  re.  } {disk}.} 
58b0: 65 6c 73 65 20 7b 0a 20 20 64 6f 5f 74 65 73 74  else {.  do_test
58c0: 20 70 72 61 67 6d 61 2d 39 2e 33 2e 31 20 7b 0a   pragma-9.3.1 {.
58d0: 20 20 20 20 63 68 65 63 6b 5f 74 65 6d 70 5f 73      check_temp_s
58e0: 74 6f 72 65 0a 20 20 7d 20 7b 6d 65 6d 6f 72 79  tore.  } {memory
58f0: 7d 0a 7d 0a 0a 64 6f 5f 74 65 73 74 20 70 72 61  }.}..do_test pra
5900: 67 6d 61 2d 39 2e 34 20 7b 0a 20 20 65 78 65 63  gma-9.4 {.  exec
5910: 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41  sql {.    PRAGMA
5920: 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65   temp_store_dire
5930: 63 74 6f 72 79 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a  ctory;.  }.} {}.
5940: 69 66 63 61 70 61 62 6c 65 20 77 73 64 20 7b 0a  ifcapable wsd {.
5950: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
5960: 2d 39 2e 35 20 7b 0a 20 20 20 20 73 65 74 20 70  -9.5 {.    set p
5970: 77 64 20 5b 73 74 72 69 6e 67 20 6d 61 70 20 7b  wd [string map {
5980: 27 20 27 27 7d 20 5b 66 69 6c 65 20 6e 61 74 69  ' ''} [file nati
5990: 76 65 6e 61 6d 65 20 5b 70 77 64 5d 5d 5d 0a 20  vename [pwd]]]. 
59a0: 20 20 20 65 78 65 63 73 71 6c 20 22 0a 20 20 20     execsql ".   
59b0: 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73     PRAGMA temp_s
59c0: 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 3d 27  tore_directory='
59d0: 24 70 77 64 27 3b 0a 20 20 20 20 22 0a 20 20 7d  $pwd';.    ".  }
59e0: 20 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72   {}.  do_test pr
59f0: 61 67 6d 61 2d 39 2e 36 20 7b 0a 20 20 20 20 65  agma-9.6 {.    e
5a00: 78 65 63 73 71 6c 20 7b 20 0a 20 20 20 20 20 20  xecsql { .      
5a10: 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72  PRAGMA temp_stor
5a20: 65 5f 64 69 72 65 63 74 6f 72 79 3b 0a 20 20 20  e_directory;.   
5a30: 20 7d 0a 20 20 7d 20 5b 6c 69 73 74 20 5b 66 69   }.  } [list [fi
5a40: 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 70  le nativename [p
5a50: 77 64 5d 5d 5d 0a 20 20 64 6f 5f 74 65 73 74 20  wd]]].  do_test 
5a60: 70 72 61 67 6d 61 2d 39 2e 37 20 7b 0a 20 20 20  pragma-9.7 {.   
5a70: 20 63 61 74 63 68 73 71 6c 20 7b 20 0a 20 20 20   catchsql { .   
5a80: 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73     PRAGMA temp_s
5a90: 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 3d 27  tore_directory='
5aa0: 2f 4e 4f 4e 2f 45 58 49 53 54 45 4e 54 2f 50 41  /NON/EXISTENT/PA
5ab0: 54 48 2f 46 4f 4f 42 41 52 27 3b 0a 20 20 20 20  TH/FOOBAR';.    
5ac0: 7d 0a 20 20 7d 20 7b 31 20 7b 6e 6f 74 20 61 20  }.  } {1 {not a 
5ad0: 77 72 69 74 61 62 6c 65 20 64 69 72 65 63 74 6f  writable directo
5ae0: 72 79 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70  ry}}.  do_test p
5af0: 72 61 67 6d 61 2d 39 2e 38 20 7b 0a 20 20 20 20  ragma-9.8 {.    
5b00: 65 78 65 63 73 71 6c 20 7b 20 0a 20 20 20 20 20  execsql { .     
5b10: 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f   PRAGMA temp_sto
5b20: 72 65 5f 64 69 72 65 63 74 6f 72 79 3d 27 27 3b  re_directory='';
5b30: 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 7d 0a 20 20  .    }.  } {}.  
5b40: 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74  if {![info exist
5b50: 73 20 54 45 4d 50 5f 53 54 4f 52 45 5d 20 7c 7c  s TEMP_STORE] ||
5b60: 20 24 54 45 4d 50 5f 53 54 4f 52 45 3c 3d 31 7d   $TEMP_STORE<=1}
5b70: 20 7b 0a 20 20 20 20 69 66 63 61 70 61 62 6c 65   {.    ifcapable
5b80: 20 74 65 6d 70 64 62 20 7b 0a 20 20 20 20 20 20   tempdb {.      
5b90: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 39  do_test pragma-9
5ba0: 2e 39 20 7b 0a 20 20 20 20 20 20 20 20 65 78 65  .9 {.        exe
5bb0: 63 73 71 6c 20 7b 20 0a 20 20 20 20 20 20 20 20  csql { .        
5bc0: 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74    PRAGMA temp_st
5bd0: 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 3b 0a 20  ore_directory;. 
5be0: 20 20 20 20 20 20 20 20 20 50 52 41 47 4d 41 20           PRAGMA 
5bf0: 74 65 6d 70 5f 73 74 6f 72 65 3d 46 49 4c 45 3b  temp_store=FILE;
5c00: 0a 20 20 20 20 20 20 20 20 20 20 43 52 45 41 54  .          CREAT
5c10: 45 20 54 45 4d 50 20 54 41 42 4c 45 20 74 65 6d  E TEMP TABLE tem
5c20: 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72  p_store_director
5c30: 79 5f 74 65 73 74 28 61 20 69 6e 74 65 67 65 72  y_test(a integer
5c40: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 49 4e 53  );.          INS
5c50: 45 52 54 20 49 4e 54 4f 20 74 65 6d 70 5f 73 74  ERT INTO temp_st
5c60: 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 5f 74 65  ore_directory_te
5c70: 73 74 20 76 61 6c 75 65 73 20 28 32 29 3b 0a 20  st values (2);. 
5c80: 20 20 20 20 20 20 20 20 20 53 45 4c 45 43 54 20           SELECT 
5c90: 2a 20 46 52 4f 4d 20 74 65 6d 70 5f 73 74 6f 72  * FROM temp_stor
5ca0: 65 5f 64 69 72 65 63 74 6f 72 79 5f 74 65 73 74  e_directory_test
5cb0: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
5cc0: 20 20 7d 20 7b 32 7d 0a 20 20 20 20 20 20 64 6f    } {2}.      do
5cd0: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 39 2e 31  _test pragma-9.1
5ce0: 30 20 7b 0a 20 20 20 20 20 20 20 20 63 61 74 63  0 {.        catc
5cf0: 68 73 71 6c 20 22 0a 20 20 20 20 20 20 20 20 20  hsql ".         
5d00: 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f   PRAGMA temp_sto
5d10: 72 65 5f 64 69 72 65 63 74 6f 72 79 3d 27 24 70  re_directory='$p
5d20: 77 64 27 3b 0a 20 20 20 20 20 20 20 20 20 20 53  wd';.          S
5d30: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 65 6d  ELECT * FROM tem
5d40: 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72  p_store_director
5d50: 79 5f 74 65 73 74 3b 0a 20 20 20 20 20 20 20 20  y_test;.        
5d60: 22 0a 20 20 20 20 20 20 7d 20 7b 31 20 7b 6e 6f  ".      } {1 {no
5d70: 20 73 75 63 68 20 74 61 62 6c 65 3a 20 74 65 6d   such table: tem
5d80: 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72  p_store_director
5d90: 79 5f 74 65 73 74 7d 7d 0a 20 20 20 20 7d 0a 20  y_test}}.    }. 
5da0: 20 7d 0a 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61   }.}.do_test pra
5db0: 67 6d 61 2d 39 2e 31 31 20 7b 0a 20 20 65 78 65  gma-9.11 {.  exe
5dc0: 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d  csql {.    PRAGM
5dd0: 41 20 74 65 6d 70 5f 73 74 6f 72 65 20 3d 20 30  A temp_store = 0
5de0: 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d  ;.    PRAGMA tem
5df0: 70 5f 73 74 6f 72 65 3b 0a 20 20 7d 0a 7d 20 7b  p_store;.  }.} {
5e00: 30 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  0}.do_test pragm
5e10: 61 2d 39 2e 31 32 20 7b 0a 20 20 65 78 65 63 73  a-9.12 {.  execs
5e20: 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20  ql {.    PRAGMA 
5e30: 74 65 6d 70 5f 73 74 6f 72 65 20 3d 20 31 3b 0a  temp_store = 1;.
5e40: 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f      PRAGMA temp_
5e50: 73 74 6f 72 65 3b 0a 20 20 7d 0a 7d 20 7b 31 7d  store;.  }.} {1}
5e60: 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d  .do_test pragma-
5e70: 39 2e 31 33 20 7b 0a 20 20 65 78 65 63 73 71 6c  9.13 {.  execsql
5e80: 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 74 65   {.    PRAGMA te
5e90: 6d 70 5f 73 74 6f 72 65 20 3d 20 32 3b 0a 20 20  mp_store = 2;.  
5ea0: 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74    PRAGMA temp_st
5eb0: 6f 72 65 3b 0a 20 20 7d 0a 7d 20 7b 32 7d 0a 64  ore;.  }.} {2}.d
5ec0: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 39 2e  o_test pragma-9.
5ed0: 31 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  14 {.  execsql {
5ee0: 0a 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70  .    PRAGMA temp
5ef0: 5f 73 74 6f 72 65 20 3d 20 33 3b 0a 20 20 20 20  _store = 3;.    
5f00: 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72  PRAGMA temp_stor
5f10: 65 3b 0a 20 20 7d 0a 7d 20 7b 30 7d 0a 64 6f 5f  e;.  }.} {0}.do_
5f20: 74 65 73 74 20 70 72 61 67 6d 61 2d 39 2e 31 35  test pragma-9.15
5f30: 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a   {.  catchsql {.
5f40: 20 20 20 20 42 45 47 49 4e 20 45 58 43 4c 55 53      BEGIN EXCLUS
5f50: 49 56 45 3b 0a 20 20 20 20 43 52 45 41 54 45 20  IVE;.    CREATE 
5f60: 54 45 4d 50 20 54 41 42 4c 45 20 74 65 6d 70 5f  TEMP TABLE temp_
5f70: 74 61 62 6c 65 28 74 29 3b 0a 20 20 20 20 49 4e  table(t);.    IN
5f80: 53 45 52 54 20 49 4e 54 4f 20 74 65 6d 70 5f 74  SERT INTO temp_t
5f90: 61 62 6c 65 20 56 41 4c 55 45 53 28 27 76 61 6c  able VALUES('val
5fa0: 75 61 62 6c 65 20 64 61 74 61 27 29 3b 0a 20 20  uable data');.  
5fb0: 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74    PRAGMA temp_st
5fc0: 6f 72 65 20 3d 20 31 3b 0a 20 20 7d 0a 7d 20 7b  ore = 1;.  }.} {
5fd0: 31 20 7b 74 65 6d 70 6f 72 61 72 79 20 73 74 6f  1 {temporary sto
5fe0: 72 61 67 65 20 63 61 6e 6e 6f 74 20 62 65 20 63  rage cannot be c
5ff0: 68 61 6e 67 65 64 20 66 72 6f 6d 20 77 69 74 68  hanged from with
6000: 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  in a transaction
6010: 7d 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  }}.do_test pragm
6020: 61 2d 39 2e 31 36 20 7b 0a 20 20 65 78 65 63 73  a-9.16 {.  execs
6030: 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  ql {.    SELECT 
6040: 2a 20 46 52 4f 4d 20 74 65 6d 70 5f 74 61 62 6c  * FROM temp_tabl
6050: 65 3b 0a 20 20 20 20 43 4f 4d 4d 49 54 3b 0a 20  e;.    COMMIT;. 
6060: 20 7d 0a 7d 20 7b 7b 76 61 6c 75 61 62 6c 65 20   }.} {{valuable 
6070: 64 61 74 61 7d 7d 0a 0a 64 6f 5f 74 65 73 74 20  data}}..do_test 
6080: 70 72 61 67 6d 61 2d 39 2e 31 37 20 7b 0a 20 20  pragma-9.17 {.  
6090: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 49 4e  execsql {.    IN
60a0: 53 45 52 54 20 49 4e 54 4f 20 74 65 6d 70 5f 74  SERT INTO temp_t
60b0: 61 62 6c 65 20 56 41 4c 55 45 53 28 27 76 61 6c  able VALUES('val
60c0: 75 61 62 6c 65 20 64 61 74 61 20 49 49 27 29 3b  uable data II');
60d0: 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52  .    SELECT * FR
60e0: 4f 4d 20 74 65 6d 70 5f 74 61 62 6c 65 3b 0a 20  OM temp_table;. 
60f0: 20 7d 0a 7d 20 7b 7b 76 61 6c 75 61 62 6c 65 20   }.} {{valuable 
6100: 64 61 74 61 7d 20 7b 76 61 6c 75 61 62 6c 65 20  data} {valuable 
6110: 64 61 74 61 20 49 49 7d 7d 0a 0a 64 6f 5f 74 65  data II}}..do_te
6120: 73 74 20 70 72 61 67 6d 61 2d 39 2e 31 38 20 7b  st pragma-9.18 {
6130: 0a 20 20 73 65 74 20 72 63 20 5b 63 61 74 63 68  .  set rc [catch
6140: 20 7b 0a 20 20 20 20 64 62 20 65 76 61 6c 20 7b   {.    db eval {
6150: 53 45 4c 45 43 54 20 74 20 46 52 4f 4d 20 74 65  SELECT t FROM te
6160: 6d 70 5f 74 61 62 6c 65 7d 20 7b 0a 20 20 20 20  mp_table} {.    
6170: 20 20 65 78 65 63 73 71 6c 20 7b 70 72 61 67 6d    execsql {pragm
6180: 61 20 74 65 6d 70 5f 73 74 6f 72 65 20 3d 20 31  a temp_store = 1
6190: 7d 0a 20 20 20 20 7d 0a 20 20 7d 20 6d 73 67 5d  }.    }.  } msg]
61a0: 0a 20 20 6c 69 73 74 20 24 72 63 20 24 6d 73 67  .  list $rc $msg
61b0: 0a 7d 20 7b 31 20 7b 74 65 6d 70 6f 72 61 72 79  .} {1 {temporary
61c0: 20 73 74 6f 72 61 67 65 20 63 61 6e 6e 6f 74 20   storage cannot 
61d0: 62 65 20 63 68 61 6e 67 65 64 20 66 72 6f 6d 20  be changed from 
61e0: 77 69 74 68 69 6e 20 61 20 74 72 61 6e 73 61 63  within a transac
61f0: 74 69 6f 6e 7d 7d 0a 0a 7d 20 3b 23 20 69 66 63  tion}}..} ;# ifc
6200: 61 70 61 62 6c 65 20 70 61 67 65 72 5f 70 72 61  apable pager_pra
6210: 67 6d 61 73 0a 0a 69 66 63 61 70 61 62 6c 65 20  gmas..ifcapable 
6220: 74 72 69 67 67 65 72 20 7b 0a 0a 64 6f 5f 74 65  trigger {..do_te
6230: 73 74 20 70 72 61 67 6d 61 2d 31 30 2e 30 20 7b  st pragma-10.0 {
6240: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20  .  catchsql {.  
6250: 20 20 44 52 4f 50 20 54 41 42 4c 45 20 6d 61 69    DROP TABLE mai
6260: 6e 2e 74 31 3b 0a 20 20 7d 0a 20 20 65 78 65 63  n.t1;.  }.  exec
6270: 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41  sql {.    PRAGMA
6280: 20 63 6f 75 6e 74 5f 63 68 61 6e 67 65 73 20 3d   count_changes =
6290: 20 31 3b 0a 0a 20 20 20 20 43 52 45 41 54 45 20   1;..    CREATE 
62a0: 54 41 42 4c 45 20 74 31 28 61 20 50 52 49 4d 41  TABLE t1(a PRIMA
62b0: 52 59 20 4b 45 59 29 3b 0a 20 20 20 20 43 52 45  RY KEY);.    CRE
62c0: 41 54 45 20 54 41 42 4c 45 20 74 31 5f 6d 69 72  ATE TABLE t1_mir
62d0: 72 6f 72 28 61 29 3b 0a 20 20 20 20 43 52 45 41  ror(a);.    CREA
62e0: 54 45 20 54 41 42 4c 45 20 74 31 5f 6d 69 72 72  TE TABLE t1_mirr
62f0: 6f 72 32 28 61 29 3b 0a 20 20 20 20 43 52 45 41  or2(a);.    CREA
6300: 54 45 20 54 52 49 47 47 45 52 20 74 31 5f 62 69  TE TRIGGER t1_bi
6310: 20 42 45 46 4f 52 45 20 49 4e 53 45 52 54 20 4f   BEFORE INSERT O
6320: 4e 20 74 31 20 42 45 47 49 4e 20 0a 20 20 20 20  N t1 BEGIN .    
6330: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
6340: 5f 6d 69 72 72 6f 72 20 56 41 4c 55 45 53 28 6e  _mirror VALUES(n
6350: 65 77 2e 61 29 3b 0a 20 20 20 20 45 4e 44 3b 0a  ew.a);.    END;.
6360: 20 20 20 20 43 52 45 41 54 45 20 54 52 49 47 47      CREATE TRIGG
6370: 45 52 20 74 31 5f 61 69 20 41 46 54 45 52 20 49  ER t1_ai AFTER I
6380: 4e 53 45 52 54 20 4f 4e 20 74 31 20 42 45 47 49  NSERT ON t1 BEGI
6390: 4e 20 0a 20 20 20 20 20 20 49 4e 53 45 52 54 20  N .      INSERT 
63a0: 49 4e 54 4f 20 74 31 5f 6d 69 72 72 6f 72 32 20  INTO t1_mirror2 
63b0: 56 41 4c 55 45 53 28 6e 65 77 2e 61 29 3b 0a 20  VALUES(new.a);. 
63c0: 20 20 20 45 4e 44 3b 0a 20 20 20 20 43 52 45 41     END;.    CREA
63d0: 54 45 20 54 52 49 47 47 45 52 20 74 31 5f 62 75  TE TRIGGER t1_bu
63e0: 20 42 45 46 4f 52 45 20 55 50 44 41 54 45 20 4f   BEFORE UPDATE O
63f0: 4e 20 74 31 20 42 45 47 49 4e 20 0a 20 20 20 20  N t1 BEGIN .    
6400: 20 20 55 50 44 41 54 45 20 74 31 5f 6d 69 72 72    UPDATE t1_mirr
6410: 6f 72 20 53 45 54 20 61 20 3d 20 6e 65 77 2e 61  or SET a = new.a
6420: 20 57 48 45 52 45 20 61 20 3d 20 6f 6c 64 2e 61   WHERE a = old.a
6430: 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20 20 20 43  ;.    END;.    C
6440: 52 45 41 54 45 20 54 52 49 47 47 45 52 20 74 31  REATE TRIGGER t1
6450: 5f 61 75 20 41 46 54 45 52 20 55 50 44 41 54 45  _au AFTER UPDATE
6460: 20 4f 4e 20 74 31 20 42 45 47 49 4e 20 0a 20 20   ON t1 BEGIN .  
6470: 20 20 20 20 55 50 44 41 54 45 20 74 31 5f 6d 69      UPDATE t1_mi
6480: 72 72 6f 72 32 20 53 45 54 20 61 20 3d 20 6e 65  rror2 SET a = ne
6490: 77 2e 61 20 57 48 45 52 45 20 61 20 3d 20 6f 6c  w.a WHERE a = ol
64a0: 64 2e 61 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20  d.a;.    END;.  
64b0: 20 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52    CREATE TRIGGER
64c0: 20 74 31 5f 62 64 20 42 45 46 4f 52 45 20 44 45   t1_bd BEFORE DE
64d0: 4c 45 54 45 20 4f 4e 20 74 31 20 42 45 47 49 4e  LETE ON t1 BEGIN
64e0: 20 0a 20 20 20 20 20 20 44 45 4c 45 54 45 20 46   .      DELETE F
64f0: 52 4f 4d 20 74 31 5f 6d 69 72 72 6f 72 20 57 48  ROM t1_mirror WH
6500: 45 52 45 20 61 20 3d 20 6f 6c 64 2e 61 3b 0a 20  ERE a = old.a;. 
6510: 20 20 20 45 4e 44 3b 0a 20 20 20 20 43 52 45 41     END;.    CREA
6520: 54 45 20 54 52 49 47 47 45 52 20 74 31 5f 61 64  TE TRIGGER t1_ad
6530: 20 41 46 54 45 52 20 44 45 4c 45 54 45 20 4f 4e   AFTER DELETE ON
6540: 20 74 31 20 42 45 47 49 4e 20 0a 20 20 20 20 20   t1 BEGIN .     
6550: 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 31 5f   DELETE FROM t1_
6560: 6d 69 72 72 6f 72 32 20 57 48 45 52 45 20 61 20  mirror2 WHERE a 
6570: 3d 20 6f 6c 64 2e 61 3b 0a 20 20 20 20 45 4e 44  = old.a;.    END
6580: 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a 64 6f 5f 74  ;.  }.} {}..do_t
6590: 65 73 74 20 70 72 61 67 6d 61 2d 31 30 2e 31 20  est pragma-10.1 
65a0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
65b0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
65c0: 20 56 41 4c 55 45 53 28 72 61 6e 64 73 74 72 28   VALUES(randstr(
65d0: 31 30 2c 31 30 29 29 3b 0a 20 20 7d 0a 7d 20 7b  10,10));.  }.} {
65e0: 31 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  1}.do_test pragm
65f0: 61 2d 31 30 2e 32 20 7b 0a 20 20 65 78 65 63 73  a-10.2 {.  execs
6600: 71 6c 20 7b 0a 20 20 20 20 55 50 44 41 54 45 20  ql {.    UPDATE 
6610: 74 31 20 53 45 54 20 61 20 3d 20 72 61 6e 64 73  t1 SET a = rands
6620: 74 72 28 31 30 2c 31 30 29 3b 0a 20 20 7d 0a 7d  tr(10,10);.  }.}
6630: 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61   {1}.do_test pra
6640: 67 6d 61 2d 31 30 2e 33 20 7b 0a 20 20 65 78 65  gma-10.3 {.  exe
6650: 63 73 71 6c 20 7b 0a 20 20 20 20 44 45 4c 45 54  csql {.    DELET
6660: 45 20 46 52 4f 4d 20 74 31 3b 0a 20 20 7d 0a 7d  E FROM t1;.  }.}
6670: 20 7b 31 7d 0a 0a 7d 20 3b 23 20 69 66 63 61 70   {1}..} ;# ifcap
6680: 61 62 6c 65 20 74 72 69 67 67 65 72 0a 0a 69 66  able trigger..if
6690: 63 61 70 61 62 6c 65 20 73 63 68 65 6d 61 5f 70  capable schema_p
66a0: 72 61 67 6d 61 73 20 7b 0a 20 20 64 6f 5f 74 65  ragmas {.  do_te
66b0: 73 74 20 70 72 61 67 6d 61 2d 31 31 2e 31 20 7b  st pragma-11.1 {
66c0: 0a 20 20 20 20 65 78 65 63 73 71 6c 32 20 7b 0a  .    execsql2 {.
66d0: 20 20 20 20 20 20 70 72 61 67 6d 61 20 63 6f 6c        pragma col
66e0: 6c 61 74 69 6f 6e 5f 6c 69 73 74 3b 0a 20 20 20  lation_list;.   
66f0: 20 7d 0a 20 20 7d 20 7b 73 65 71 20 30 20 6e 61   }.  } {seq 0 na
6700: 6d 65 20 4e 4f 43 41 53 45 20 73 65 71 20 31 20  me NOCASE seq 1 
6710: 6e 61 6d 65 20 52 54 52 49 4d 20 73 65 71 20 32  name RTRIM seq 2
6720: 20 6e 61 6d 65 20 42 49 4e 41 52 59 7d 0a 20 20   name BINARY}.  
6730: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31  do_test pragma-1
6740: 31 2e 32 20 7b 0a 20 20 20 20 64 62 20 63 6f 6c  1.2 {.    db col
6750: 6c 61 74 65 20 4e 65 77 5f 43 6f 6c 6c 61 74 69  late New_Collati
6760: 6f 6e 20 62 6c 61 68 2e 2e 2e 0a 20 20 20 20 65  on blah....    e
6770: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 70  xecsql {.      p
6780: 72 61 67 6d 61 20 63 6f 6c 6c 61 74 69 6f 6e 5f  ragma collation_
6790: 6c 69 73 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 20  list;.    }.  } 
67a0: 7b 30 20 4e 65 77 5f 43 6f 6c 6c 61 74 69 6f 6e  {0 New_Collation
67b0: 20 31 20 4e 4f 43 41 53 45 20 32 20 52 54 52 49   1 NOCASE 2 RTRI
67c0: 4d 20 33 20 42 49 4e 41 52 59 7d 0a 7d 0a 0a 69  M 3 BINARY}.}..i
67d0: 66 63 61 70 61 62 6c 65 20 73 63 68 65 6d 61 5f  fcapable schema_
67e0: 70 72 61 67 6d 61 73 26 26 74 65 6d 70 64 62 20  pragmas&&tempdb 
67f0: 7b 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67  {.  do_test prag
6800: 6d 61 2d 31 32 2e 31 20 7b 0a 20 20 20 20 73 71  ma-12.1 {.    sq
6810: 6c 69 74 65 33 20 64 62 32 20 74 65 73 74 2e 64  lite3 db2 test.d
6820: 62 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a  b.    execsql {.
6830: 20 20 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d        PRAGMA tem
6840: 70 2e 74 61 62 6c 65 5f 69 6e 66 6f 28 27 61 62  p.table_info('ab
6850: 63 27 29 3b 0a 20 20 20 20 7d 20 64 62 32 0a 20  c');.    } db2. 
6860: 20 7d 20 7b 7d 0a 20 20 64 62 32 20 63 6c 6f 73   } {}.  db2 clos
6870: 65 0a 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61  e..  do_test pra
6880: 67 6d 61 2d 31 32 2e 32 20 7b 0a 20 20 20 20 73  gma-12.2 {.    s
6890: 71 6c 69 74 65 33 20 64 62 32 20 74 65 73 74 2e  qlite3 db2 test.
68a0: 64 62 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b  db.    execsql {
68b0: 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 74 65  .      PRAGMA te
68c0: 6d 70 2e 64 65 66 61 75 6c 74 5f 63 61 63 68 65  mp.default_cache
68d0: 5f 73 69 7a 65 20 3d 20 32 30 30 3b 0a 20 20 20  _size = 200;.   
68e0: 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 2e 64     PRAGMA temp.d
68f0: 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a  efault_cache_siz
6900: 65 3b 0a 20 20 20 20 7d 20 64 62 32 0a 20 20 7d  e;.    } db2.  }
6910: 20 7b 32 30 30 7d 0a 20 20 64 62 32 20 63 6c 6f   {200}.  db2 clo
6920: 73 65 0a 0a 20 20 64 6f 5f 74 65 73 74 20 70 72  se..  do_test pr
6930: 61 67 6d 61 2d 31 32 2e 33 20 7b 0a 20 20 20 20  agma-12.3 {.    
6940: 73 71 6c 69 74 65 33 20 64 62 32 20 74 65 73 74  sqlite3 db2 test
6950: 2e 64 62 0a 20 20 20 20 65 78 65 63 73 71 6c 20  .db.    execsql 
6960: 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 74  {.      PRAGMA t
6970: 65 6d 70 2e 63 61 63 68 65 5f 73 69 7a 65 20 3d  emp.cache_size =
6980: 20 34 30 30 3b 0a 20 20 20 20 20 20 50 52 41 47   400;.      PRAG
6990: 4d 41 20 74 65 6d 70 2e 63 61 63 68 65 5f 73 69  MA temp.cache_si
69a0: 7a 65 3b 0a 20 20 20 20 7d 20 64 62 32 0a 20 20  ze;.    } db2.  
69b0: 7d 20 7b 34 30 30 7d 0a 20 20 64 62 32 20 63 6c  } {400}.  db2 cl
69c0: 6f 73 65 0a 7d 0a 0a 69 66 63 61 70 61 62 6c 65  ose.}..ifcapable
69d0: 20 62 6c 6f 62 6c 69 74 20 7b 0a 0a 64 6f 5f 74   bloblit {..do_t
69e0: 65 73 74 20 70 72 61 67 6d 61 2d 31 33 2e 31 20  est pragma-13.1 
69f0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
6a00: 20 20 44 52 4f 50 20 54 41 42 4c 45 20 49 46 20    DROP TABLE IF 
6a10: 45 58 49 53 54 53 20 74 34 3b 0a 20 20 20 20 50  EXISTS t4;.    P
6a20: 52 41 47 4d 41 20 76 64 62 65 5f 74 72 61 63 65  RAGMA vdbe_trace
6a30: 3d 6f 6e 3b 0a 20 20 20 20 50 52 41 47 4d 41 20  =on;.    PRAGMA 
6a40: 76 64 62 65 5f 6c 69 73 74 69 6e 67 3d 6f 6e 3b  vdbe_listing=on;
6a50: 0a 20 20 20 20 50 52 41 47 4d 41 20 73 71 6c 5f  .    PRAGMA sql_
6a60: 74 72 61 63 65 3d 6f 6e 3b 0a 20 20 20 20 43 52  trace=on;.    CR
6a70: 45 41 54 45 20 54 41 42 4c 45 20 74 34 28 61 20  EATE TABLE t4(a 
6a80: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
6a90: 4b 45 59 2c 62 29 3b 0a 20 20 20 20 49 4e 53 45  KEY,b);.    INSE
6aa0: 52 54 20 49 4e 54 4f 20 74 34 28 62 29 20 56 41  RT INTO t4(b) VA
6ab0: 4c 55 45 53 28 78 27 30 31 32 33 34 35 36 37 38  LUES(x'012345678
6ac0: 39 61 62 63 64 65 66 30 31 32 33 34 35 36 37 38  9abcdef012345678
6ad0: 39 61 62 63 64 65 66 30 31 32 33 34 35 36 37 38  9abcdef012345678
6ae0: 39 27 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20  9');.    INSERT 
6af0: 49 4e 54 4f 20 74 34 28 62 29 20 56 41 4c 55 45  INTO t4(b) VALUE
6b00: 53 28 72 61 6e 64 73 74 72 28 33 30 2c 33 30 29  S(randstr(30,30)
6b10: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
6b20: 54 4f 20 74 34 28 62 29 20 56 41 4c 55 45 53 28  TO t4(b) VALUES(
6b30: 31 2e 32 33 34 35 36 29 3b 0a 20 20 20 20 49 4e  1.23456);.    IN
6b40: 53 45 52 54 20 49 4e 54 4f 20 74 34 28 62 29 20  SERT INTO t4(b) 
6b50: 56 41 4c 55 45 53 28 4e 55 4c 4c 29 3b 0a 20 20  VALUES(NULL);.  
6b60: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 34    INSERT INTO t4
6b70: 28 62 29 20 56 41 4c 55 45 53 28 30 29 3b 0a 20  (b) VALUES(0);. 
6b80: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
6b90: 34 28 62 29 20 53 45 4c 45 43 54 20 62 7c 7c 62  4(b) SELECT b||b
6ba0: 7c 7c 62 7c 7c 62 20 46 52 4f 4d 20 74 34 3b 0a  ||b||b FROM t4;.
6bb0: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
6bc0: 4d 20 74 34 3b 0a 20 20 7d 0a 20 20 65 78 65 63  M t4;.  }.  exec
6bd0: 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41  sql {.    PRAGMA
6be0: 20 76 64 62 65 5f 74 72 61 63 65 3d 6f 66 66 3b   vdbe_trace=off;
6bf0: 0a 20 20 20 20 50 52 41 47 4d 41 20 76 64 62 65  .    PRAGMA vdbe
6c00: 5f 6c 69 73 74 69 6e 67 3d 6f 66 66 3b 0a 20 20  _listing=off;.  
6c10: 20 20 50 52 41 47 4d 41 20 73 71 6c 5f 74 72 61    PRAGMA sql_tra
6c20: 63 65 3d 6f 66 66 3b 0a 20 20 7d 0a 7d 20 7b 7d  ce=off;.  }.} {}
6c30: 0a 0a 7d 20 3b 23 20 69 66 63 61 70 61 62 6c 65  ..} ;# ifcapable
6c40: 20 62 6c 6f 62 6c 69 74 20 0a 0a 69 66 63 61 70   bloblit ..ifcap
6c50: 61 62 6c 65 20 70 61 67 65 72 5f 70 72 61 67 6d  able pager_pragm
6c60: 61 73 20 7b 0a 20 20 64 62 20 63 6c 6f 73 65 0a  as {.  db close.
6c70: 20 20 66 69 6c 65 20 64 65 6c 65 74 65 20 2d 66    file delete -f
6c80: 6f 72 63 65 20 74 65 73 74 2e 64 62 0a 20 20 73  orce test.db.  s
6c90: 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64  qlite3 db test.d
6ca0: 62 0a 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61  b..  do_test pra
6cb0: 67 6d 61 2d 31 34 2e 31 20 7b 0a 20 20 20 20 65  gma-14.1 {.    e
6cc0: 78 65 63 73 71 6c 20 7b 20 70 72 61 67 6d 61 20  xecsql { pragma 
6cd0: 61 75 74 6f 5f 76 61 63 75 75 6d 20 3d 20 30 20  auto_vacuum = 0 
6ce0: 7d 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 20  }.    execsql { 
6cf0: 70 72 61 67 6d 61 20 70 61 67 65 5f 63 6f 75 6e  pragma page_coun
6d00: 74 20 7d 0a 20 20 7d 20 7b 30 7d 0a 0a 20 20 64  t }.  } {0}..  d
6d10: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 34  o_test pragma-14
6d20: 2e 32 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  .2 {.    execsql
6d30: 20 7b 20 0a 20 20 20 20 20 20 43 52 45 41 54 45   { .      CREATE
6d40: 20 54 41 42 4c 45 20 61 62 63 28 61 2c 20 62 2c   TABLE abc(a, b,
6d50: 20 63 29 3b 0a 20 20 20 20 20 20 50 52 41 47 4d   c);.      PRAGM
6d60: 41 20 70 61 67 65 5f 63 6f 75 6e 74 3b 0a 20 20  A page_count;.  
6d70: 20 20 7d 0a 20 20 7d 20 7b 32 7d 0a 0a 20 20 64    }.  } {2}..  d
6d80: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 34  o_test pragma-14
6d90: 2e 33 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  .3 {.    execsql
6da0: 20 7b 20 0a 20 20 20 20 20 20 42 45 47 49 4e 3b   { .      BEGIN;
6db0: 0a 20 20 20 20 20 20 43 52 45 41 54 45 20 54 41  .      CREATE TA
6dc0: 42 4c 45 20 64 65 66 28 61 2c 20 62 2c 20 63 29  BLE def(a, b, c)
6dd0: 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 70  ;.      PRAGMA p
6de0: 61 67 65 5f 63 6f 75 6e 74 3b 0a 20 20 20 20 7d  age_count;.    }
6df0: 0a 20 20 7d 20 7b 33 7d 0a 0a 20 20 64 6f 5f 74  .  } {3}..  do_t
6e00: 65 73 74 20 70 72 61 67 6d 61 2d 31 34 2e 34 20  est pragma-14.4 
6e10: 7b 0a 20 20 20 20 73 65 74 20 70 61 67 65 5f 73  {.    set page_s
6e20: 69 7a 65 20 5b 64 62 20 6f 6e 65 20 7b 70 72 61  ize [db one {pra
6e30: 67 6d 61 20 70 61 67 65 5f 73 69 7a 65 7d 5d 0a  gma page_size}].
6e40: 20 20 20 20 65 78 70 72 20 5b 66 69 6c 65 20 73      expr [file s
6e50: 69 7a 65 20 74 65 73 74 2e 64 62 5d 20 2f 20 24  ize test.db] / $
6e60: 70 61 67 65 5f 73 69 7a 65 0a 20 20 7d 20 7b 32  page_size.  } {2
6e70: 7d 0a 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61  }..  do_test pra
6e80: 67 6d 61 2d 31 34 2e 35 20 7b 0a 20 20 20 20 65  gma-14.5 {.    e
6e90: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 52  xecsql {.      R
6ea0: 4f 4c 4c 42 41 43 4b 3b 0a 20 20 20 20 20 20 50  OLLBACK;.      P
6eb0: 52 41 47 4d 41 20 70 61 67 65 5f 63 6f 75 6e 74  RAGMA page_count
6ec0: 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 32 7d 0a  ;.    }.  } {2}.
6ed0: 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .  do_test pragm
6ee0: 61 2d 31 34 2e 36 20 7b 0a 20 20 20 20 66 69 6c  a-14.6 {.    fil
6ef0: 65 20 64 65 6c 65 74 65 20 2d 66 6f 72 63 65 20  e delete -force 
6f00: 74 65 73 74 32 2e 64 62 0a 20 20 20 20 73 71 6c  test2.db.    sql
6f10: 69 74 65 33 20 64 62 32 20 74 65 73 74 32 2e 64  ite3 db2 test2.d
6f20: 62 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a  b.    execsql {.
6f30: 20 20 20 20 20 20 50 52 41 47 4d 41 20 61 75 74        PRAGMA aut
6f40: 6f 5f 76 61 63 75 75 6d 20 3d 20 30 3b 0a 20 20  o_vacuum = 0;.  
6f50: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
6f60: 20 74 31 28 61 2c 20 62 2c 20 63 29 3b 0a 20 20   t1(a, b, c);.  
6f70: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
6f80: 20 74 32 28 61 2c 20 62 2c 20 63 29 3b 0a 20 20   t2(a, b, c);.  
6f90: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
6fa0: 20 74 33 28 61 2c 20 62 2c 20 63 29 3b 0a 20 20   t3(a, b, c);.  
6fb0: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
6fc0: 20 74 34 28 61 2c 20 62 2c 20 63 29 3b 0a 20 20   t4(a, b, c);.  
6fd0: 20 20 7d 20 64 62 32 0a 20 20 20 20 64 62 32 20    } db2.    db2 
6fe0: 63 6c 6f 73 65 0a 20 20 20 20 65 78 65 63 73 71  close.    execsq
6ff0: 6c 20 7b 0a 20 20 20 20 20 20 41 54 54 41 43 48  l {.      ATTACH
7000: 20 27 74 65 73 74 32 2e 64 62 27 20 41 53 20 61   'test2.db' AS a
7010: 75 78 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41  ux;.      PRAGMA
7020: 20 61 75 78 2e 70 61 67 65 5f 63 6f 75 6e 74 3b   aux.page_count;
7030: 0a 20 20 20 20 7d 20 0a 20 20 7d 20 7b 35 7d 0a  .    } .  } {5}.
7040: 7d 0a 0a 23 20 54 65 73 74 20 74 68 61 74 20 74  }..# Test that t
7050: 68 65 20 76 61 6c 75 65 20 73 65 74 20 75 73 69  he value set usi
7060: 6e 67 20 74 68 65 20 63 61 63 68 65 5f 73 69 7a  ng the cache_siz
7070: 65 20 70 72 61 67 6d 61 20 69 73 20 6e 6f 74 20  e pragma is not 
7080: 72 65 73 65 74 20 77 68 65 6e 20 74 68 65 0a 23  reset when the.#
7090: 20 73 63 68 65 6d 61 20 69 73 20 72 65 6c 6f 61   schema is reloa
70a0: 64 65 64 2e 0a 23 0a 69 66 63 61 70 61 62 6c 65  ded..#.ifcapable
70b0: 20 70 61 67 65 72 5f 70 72 61 67 6d 61 73 20 7b   pager_pragmas {
70c0: 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 73 71  .  db close.  sq
70d0: 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64 62  lite3 db test.db
70e0: 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .  do_test pragm
70f0: 61 2d 31 35 2e 31 20 7b 0a 20 20 20 20 65 78 65  a-15.1 {.    exe
7100: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41  csql {.      PRA
7110: 47 4d 41 20 63 61 63 68 65 5f 73 69 7a 65 3d 35  GMA cache_size=5
7120: 39 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20  9;.      PRAGMA 
7130: 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20  cache_size;.    
7140: 7d 0a 20 20 7d 20 7b 35 39 7d 0a 20 20 64 6f 5f  }.  } {59}.  do_
7150: 74 65 73 74 20 70 72 61 67 6d 61 2d 31 35 2e 32  test pragma-15.2
7160: 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 20 64   {.    sqlite3 d
7170: 62 32 20 74 65 73 74 2e 64 62 0a 20 20 20 20 65  b2 test.db.    e
7180: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 43  xecsql {.      C
7190: 52 45 41 54 45 20 54 41 42 4c 45 20 6e 65 77 74  REATE TABLE newt
71a0: 61 62 6c 65 28 61 2c 20 62 2c 20 63 29 3b 0a 20  able(a, b, c);. 
71b0: 20 20 20 7d 20 64 62 32 0a 20 20 20 20 64 62 32     } db2.    db2
71c0: 20 63 6c 6f 73 65 0a 20 20 7d 20 7b 7d 0a 20 20   close.  } {}.  
71d0: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31  do_test pragma-1
71e0: 35 2e 33 20 7b 0a 20 20 20 20 23 20 45 76 61 6c  5.3 {.    # Eval
71f0: 75 61 74 69 6e 67 20 74 68 69 73 20 73 74 61 74  uating this stat
7200: 65 6d 65 6e 74 20 77 69 6c 6c 20 63 61 75 73 65  ement will cause
7210: 20 74 68 65 20 73 63 68 65 6d 61 20 74 6f 20 62   the schema to b
7220: 65 20 72 65 6c 6f 61 64 65 64 20 28 62 65 63 61  e reloaded (beca
7230: 75 73 65 0a 20 20 20 20 23 20 74 68 65 20 73 63  use.    # the sc
7240: 68 65 6d 61 20 77 61 73 20 63 68 61 6e 67 65 64  hema was changed
7250: 20 62 79 20 61 6e 6f 74 68 65 72 20 63 6f 6e 6e   by another conn
7260: 65 63 74 69 6f 6e 20 69 6e 20 70 72 61 67 6d 61  ection in pragma
7270: 2d 31 35 2e 32 29 2e 20 41 74 20 6f 6e 65 0a 20  -15.2). At one. 
7280: 20 20 20 23 20 70 6f 69 6e 74 20 74 68 65 72 65     # point there
7290: 20 77 61 73 20 61 20 62 75 67 20 74 68 61 74 20   was a bug that 
72a0: 72 65 73 65 74 20 74 68 65 20 63 61 63 68 65 5f  reset the cache_
72b0: 73 69 7a 65 20 74 6f 20 69 74 73 20 64 65 66 61  size to its defa
72c0: 75 6c 74 20 76 61 6c 75 65 0a 20 20 20 20 23 20  ult value.    # 
72d0: 77 68 65 6e 20 74 68 69 73 20 68 61 70 70 65 6e  when this happen
72e0: 65 64 2e 20 0a 20 20 20 20 65 78 65 63 73 71 6c  ed. .    execsql
72f0: 20 7b 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d   { SELECT * FROM
7300: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 7d   sqlite_master }
7310: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 20 50  .    execsql { P
7320: 52 41 47 4d 41 20 63 61 63 68 65 5f 73 69 7a 65  RAGMA cache_size
7330: 20 7d 0a 20 20 7d 20 7b 35 39 7d 0a 7d 0a 0a 23   }.  } {59}.}..#
7340: 20 52 65 73 65 74 20 74 68 65 20 73 71 6c 69 74   Reset the sqlit
7350: 65 33 5f 74 65 6d 70 5f 64 69 72 65 63 74 6f 72  e3_temp_director
7360: 79 20 76 61 72 69 61 62 6c 65 20 66 6f 72 20 74  y variable for t
7370: 68 65 20 6e 65 78 74 20 72 75 6e 20 6f 66 20 74  he next run of t
7380: 65 73 74 73 3a 0a 73 71 6c 69 74 65 33 20 64 62  ests:.sqlite3 db
7390: 58 20 3a 6d 65 6d 6f 72 79 3a 0a 64 62 58 20 65  X :memory:.dbX e
73a0: 76 61 6c 20 7b 50 52 41 47 4d 41 20 74 65 6d 70  val {PRAGMA temp
73b0: 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79  _store_directory
73c0: 20 3d 20 22 22 7d 0a 64 62 58 20 63 6c 6f 73 65   = ""}.dbX close
73d0: 0a 0a 69 66 63 61 70 61 62 6c 65 20 6c 6f 63 6b  ..ifcapable lock
73e0: 5f 70 72 6f 78 79 5f 70 72 61 67 6d 61 73 20 7b  _proxy_pragmas {
73f0: 0a 20 20 73 65 74 20 73 71 6c 69 74 65 5f 68 6f  .  set sqlite_ho
7400: 73 74 69 64 5f 6e 75 6d 20 31 0a 0a 20 20 73 65  stid_num 1..  se
7410: 74 20 75 73 69 6e 67 5f 70 72 6f 78 79 20 30 0a  t using_proxy 0.
7420: 20 20 66 6f 72 65 61 63 68 20 7b 6e 61 6d 65 20    foreach {name 
7430: 76 61 6c 75 65 7d 20 5b 61 72 72 61 79 20 67 65  value} [array ge
7440: 74 20 65 6e 76 20 53 51 4c 49 54 45 5f 46 4f 52  t env SQLITE_FOR
7450: 43 45 5f 50 52 4f 58 59 5f 4c 4f 43 4b 49 4e 47  CE_PROXY_LOCKING
7460: 5d 20 7b 0a 20 20 20 20 73 65 74 20 75 73 69 6e  ] {.    set usin
7470: 67 5f 70 72 6f 78 79 20 24 76 61 6c 75 65 0a 20  g_proxy $value. 
7480: 20 7d 0a 0a 20 20 23 20 54 65 73 74 20 74 68 65   }..  # Test the
7490: 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65   lock_proxy_file
74a0: 20 70 72 61 67 6d 61 73 2e 0a 20 20 23 0a 20 20   pragmas..  #.  
74b0: 64 62 20 63 6c 6f 73 65 0a 20 20 73 65 74 20 65  db close.  set e
74c0: 6e 76 28 53 51 4c 49 54 45 5f 46 4f 52 43 45 5f  nv(SQLITE_FORCE_
74d0: 50 52 4f 58 59 5f 4c 4f 43 4b 49 4e 47 29 20 22  PROXY_LOCKING) "
74e0: 30 22 0a 0a 20 20 73 71 6c 69 74 65 33 20 64 62  0"..  sqlite3 db
74f0: 20 74 65 73 74 2e 64 62 0a 20 20 64 6f 5f 74 65   test.db.  do_te
7500: 73 74 20 70 72 61 67 6d 61 2d 31 36 2e 31 20 7b  st pragma-16.1 {
7510: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
7520: 20 20 20 20 20 50 52 41 47 4d 41 20 6c 6f 63 6b       PRAGMA lock
7530: 5f 70 72 6f 78 79 5f 66 69 6c 65 3d 22 6d 79 6c  _proxy_file="myl
7540: 69 74 74 6c 65 70 72 6f 78 79 22 3b 0a 20 20 20  ittleproxy";.   
7550: 20 20 20 73 65 6c 65 63 74 20 2a 20 66 72 6f 6d     select * from
7560: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 3b 0a   sqlite_master;.
7570: 20 20 20 20 7d 0a 20 20 20 20 65 78 65 63 73 71      }.    execsq
7580: 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41  l {.      PRAGMA
7590: 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65   lock_proxy_file
75a0: 3b 0a 20 20 20 20 7d 20 0a 20 20 7d 20 7b 6d 79  ;.    } .  } {my
75b0: 6c 69 74 74 6c 65 70 72 6f 78 79 7d 0a 0a 20 20  littleproxy}..  
75c0: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31  do_test pragma-1
75d0: 36 2e 32 20 7b 0a 20 20 20 20 73 71 6c 69 74 65  6.2 {.    sqlite
75e0: 33 20 64 62 32 20 74 65 73 74 2e 64 62 0a 20 20  3 db2 test.db.  
75f0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
7600: 20 20 50 52 41 47 4d 41 20 6c 6f 63 6b 5f 70 72    PRAGMA lock_pr
7610: 6f 78 79 5f 66 69 6c 65 3d 22 6d 79 6c 69 74 74  oxy_file="mylitt
7620: 6c 65 70 72 6f 78 79 22 3b 0a 20 20 20 20 7d 20  leproxy";.    } 
7630: 64 62 32 0a 20 20 7d 20 7b 7d 0a 0a 20 20 64 62  db2.  } {}..  db
7640: 32 20 63 6c 6f 73 65 0a 20 20 64 6f 5f 74 65 73  2 close.  do_tes
7650: 74 20 70 72 61 67 6d 61 2d 31 36 2e 32 2e 31 20  t pragma-16.2.1 
7660: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 20 64 62  {.    sqlite3 db
7670: 32 20 74 65 73 74 2e 64 62 0a 20 20 20 20 65 78  2 test.db.    ex
7680: 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52  ecsql {.      PR
7690: 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f  AGMA lock_proxy_
76a0: 66 69 6c 65 3d 22 3a 61 75 74 6f 3a 22 3b 0a 20  file=":auto:";. 
76b0: 20 20 20 20 20 73 65 6c 65 63 74 20 2a 20 66 72       select * fr
76c0: 6f 6d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  om sqlite_master
76d0: 3b 0a 20 20 20 20 7d 20 64 62 32 0a 20 20 20 20  ;.    } db2.    
76e0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
76f0: 50 52 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78  PRAGMA lock_prox
7700: 79 5f 66 69 6c 65 3b 0a 20 20 20 20 7d 20 64 62  y_file;.    } db
7710: 32 0a 20 20 7d 20 7b 6d 79 6c 69 74 74 6c 65 70  2.  } {mylittlep
7720: 72 6f 78 79 7d 0a 0a 20 20 64 62 32 20 63 6c 6f  roxy}..  db2 clo
7730: 73 65 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61  se.  do_test pra
7740: 67 6d 61 2d 31 36 2e 33 20 7b 0a 20 20 20 20 73  gma-16.3 {.    s
7750: 71 6c 69 74 65 33 20 64 62 32 20 74 65 73 74 2e  qlite3 db2 test.
7760: 64 62 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b  db.    execsql {
7770: 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 6c 6f  .      PRAGMA lo
7780: 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 3d 22 6d  ck_proxy_file="m
7790: 79 6f 74 68 65 72 70 72 6f 78 79 22 3b 0a 20 20  yotherproxy";.  
77a0: 20 20 7d 20 64 62 32 0a 20 20 20 20 63 61 74 63    } db2.    catc
77b0: 68 73 71 6c 20 7b 0a 20 20 20 20 20 20 73 65 6c  hsql {.      sel
77c0: 65 63 74 20 2a 20 66 72 6f 6d 20 73 71 6c 69 74  ect * from sqlit
77d0: 65 5f 6d 61 73 74 65 72 3b 0a 20 20 20 20 7d 20  e_master;.    } 
77e0: 64 62 32 0a 20 20 7d 20 7b 31 20 7b 64 61 74 61  db2.  } {1 {data
77f0: 62 61 73 65 20 69 73 20 6c 6f 63 6b 65 64 7d 7d  base is locked}}
7800: 0a 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67  ..  do_test prag
7810: 6d 61 2d 31 36 2e 34 20 7b 0a 20 20 20 20 64 62  ma-16.4 {.    db
7820: 32 20 63 6c 6f 73 65 0a 20 20 20 20 64 62 20 63  2 close.    db c
7830: 6c 6f 73 65 0a 20 20 20 20 73 71 6c 69 74 65 33  lose.    sqlite3
7840: 20 64 62 32 20 74 65 73 74 2e 64 62 0a 20 20 20   db2 test.db.   
7850: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20   execsql {.     
7860: 20 50 52 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f   PRAGMA lock_pro
7870: 78 79 5f 66 69 6c 65 3d 22 6d 79 6f 72 69 67 69  xy_file="myorigi
7880: 6e 61 6c 70 72 6f 78 79 22 3b 0a 20 20 20 20 20  nalproxy";.     
7890: 20 50 52 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f   PRAGMA lock_pro
78a0: 78 79 5f 66 69 6c 65 3d 22 6d 79 6f 74 68 65 72  xy_file="myother
78b0: 70 72 6f 78 79 22 3b 0a 20 20 20 20 20 20 50 52  proxy";.      PR
78c0: 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f  AGMA lock_proxy_
78d0: 66 69 6c 65 3b 0a 20 20 20 20 7d 20 64 62 32 0a  file;.    } db2.
78e0: 20 20 7d 20 7b 6d 79 6f 74 68 65 72 70 72 6f 78    } {myotherprox
78f0: 79 7d 0a 0a 20 20 64 62 32 20 63 6c 6f 73 65 0a  y}..  db2 close.
7900: 20 20 73 65 74 20 65 6e 76 28 53 51 4c 49 54 45    set env(SQLITE
7910: 5f 46 4f 52 43 45 5f 50 52 4f 58 59 5f 4c 4f 43  _FORCE_PROXY_LOC
7920: 4b 49 4e 47 29 20 22 31 22 0a 20 20 64 6f 5f 74  KING) "1".  do_t
7930: 65 73 74 20 70 72 61 67 6d 61 2d 31 36 2e 35 20  est pragma-16.5 
7940: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 20 64 62  {.    sqlite3 db
7950: 32 20 74 65 73 74 2e 64 62 0a 20 20 20 20 65 78  2 test.db.    ex
7960: 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52  ecsql {.      PR
7970: 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f  AGMA lock_proxy_
7980: 66 69 6c 65 3d 22 3a 61 75 74 6f 3a 22 3b 0a 20  file=":auto:";. 
7990: 20 20 20 20 20 50 52 41 47 4d 41 20 6c 6f 63 6b       PRAGMA lock
79a0: 5f 70 72 6f 78 79 5f 66 69 6c 65 3b 0a 20 20 20  _proxy_file;.   
79b0: 20 7d 20 64 62 32 0a 20 20 7d 20 7b 6d 79 6f 74   } db2.  } {myot
79c0: 68 65 72 70 72 6f 78 79 7d 0a 20 20 0a 20 20 64  herproxy}.  .  d
79d0: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 36  o_test pragma-16
79e0: 2e 36 20 7b 0a 20 20 20 20 64 62 32 20 63 6c 6f  .6 {.    db2 clo
79f0: 73 65 0a 20 20 20 20 73 71 6c 69 74 65 33 20 64  se.    sqlite3 d
7a00: 62 32 20 74 65 73 74 32 2e 64 62 0a 20 20 20 20  b2 test2.db.    
7a10: 73 65 74 20 6c 6f 63 6b 70 61 74 68 20 5b 65 78  set lockpath [ex
7a20: 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52  ecsql {.      PR
7a30: 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f  AGMA lock_proxy_
7a40: 66 69 6c 65 3d 22 3a 61 75 74 6f 3a 22 3b 0a 20  file=":auto:";. 
7a50: 20 20 20 20 20 50 52 41 47 4d 41 20 6c 6f 63 6b       PRAGMA lock
7a60: 5f 70 72 6f 78 79 5f 66 69 6c 65 3b 0a 20 20 20  _proxy_file;.   
7a70: 20 7d 20 64 62 32 5d 0a 20 20 20 20 73 74 72 69   } db2].    stri
7a80: 6e 67 20 6d 61 74 63 68 20 22 2a 74 65 73 74 32  ng match "*test2
7a90: 2e 64 62 3a 61 75 74 6f 3a 22 20 24 6c 6f 63 6b  .db:auto:" $lock
7aa0: 70 61 74 68 0a 20 20 7d 20 7b 31 7d 0a 20 20 0a  path.  } {1}.  .
7ab0: 20 20 73 65 74 20 73 71 6c 69 74 65 5f 68 6f 73    set sqlite_hos
7ac0: 74 69 64 5f 6e 75 6d 20 32 0a 20 20 64 6f 5f 74  tid_num 2.  do_t
7ad0: 65 73 74 20 70 72 61 67 6d 61 2d 31 36 2e 37 20  est pragma-16.7 
7ae0: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 20 64 62  {.    sqlite3 db
7af0: 20 74 65 73 74 32 2e 64 62 0a 20 20 20 20 65 78   test2.db.    ex
7b00: 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52  ecsql {.      PR
7b10: 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f  AGMA lock_proxy_
7b20: 66 69 6c 65 3d 22 3a 61 75 74 6f 3a 22 3b 0a 20  file=":auto:";. 
7b30: 20 20 20 7d 20 0a 20 20 20 20 63 61 74 63 68 73     } .    catchs
7b40: 71 6c 20 7b 0a 20 20 20 20 20 20 73 65 6c 65 63  ql {.      selec
7b50: 74 20 2a 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f  t * from sqlite_
7b60: 6d 61 73 74 65 72 3b 0a 20 20 20 20 7d 0a 20 20  master;.    }.  
7b70: 7d 20 7b 31 20 7b 64 61 74 61 62 61 73 65 20 69  } {1 {database i
7b80: 73 20 6c 6f 63 6b 65 64 7d 7d 0a 20 20 64 62 20  s locked}}.  db 
7b90: 63 6c 6f 73 65 0a 20 20 0a 20 20 64 6f 5f 74 65  close.  .  do_te
7ba0: 73 74 20 70 72 61 67 6d 61 2d 31 36 2e 38 20 7b  st pragma-16.8 {
7bb0: 0a 20 20 20 20 73 71 6c 69 74 65 33 20 64 62 20  .    sqlite3 db 
7bc0: 74 65 73 74 32 2e 64 62 0a 20 20 20 20 63 61 74  test2.db.    cat
7bd0: 63 68 73 71 6c 20 7b 0a 20 20 20 20 20 20 73 65  chsql {.      se
7be0: 6c 65 63 74 20 2a 20 66 72 6f 6d 20 73 71 6c 69  lect * from sqli
7bf0: 74 65 5f 6d 61 73 74 65 72 3b 0a 20 20 20 20 7d  te_master;.    }
7c00: 20 0a 20 20 7d 20 7b 31 20 7b 64 61 74 61 62 61   .  } {1 {databa
7c10: 73 65 20 69 73 20 6c 6f 63 6b 65 64 7d 7d 0a 0a  se is locked}}..
7c20: 20 20 64 62 32 20 63 6c 6f 73 65 0a 20 20 64 6f    db2 close.  do
7c30: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 36 2e  _test pragma-16.
7c40: 38 2e 31 20 7b 0a 20 20 20 20 65 78 65 63 73 71  8.1 {.    execsq
7c50: 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41  l {.      PRAGMA
7c60: 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65   lock_proxy_file
7c70: 3d 22 79 65 74 61 6e 6f 74 68 65 72 70 72 6f 78  ="yetanotherprox
7c80: 79 22 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41  y";.      PRAGMA
7c90: 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65   lock_proxy_file
7ca0: 3b 0a 20 20 20 20 7d 20 0a 20 20 7d 20 7b 79 65  ;.    } .  } {ye
7cb0: 74 61 6e 6f 74 68 65 72 70 72 6f 78 79 7d 0a 20  tanotherproxy}. 
7cc0: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
7cd0: 31 36 2e 38 2e 32 20 7b 0a 20 20 20 20 65 78 65  16.8.2 {.    exe
7ce0: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 63 72 65  csql {.      cre
7cf0: 61 74 65 20 74 61 62 6c 65 20 6d 69 6e 65 28 78  ate table mine(x
7d00: 29 3b 0a 20 20 20 20 7d 20 0a 20 20 7d 20 7b 7d  );.    } .  } {}
7d10: 0a 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 64  ..  db close.  d
7d20: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 36  o_test pragma-16
7d30: 2e 39 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  .9 {.    sqlite3
7d40: 20 64 62 20 70 72 6f 78 79 74 65 73 74 2e 64 62   db proxytest.db
7d50: 0a 20 20 20 20 73 65 74 20 6c 6f 63 6b 70 61 74  .    set lockpat
7d60: 68 32 20 5b 65 78 65 63 73 71 6c 20 7b 0a 20 20  h2 [execsql {.  
7d70: 20 20 20 20 50 52 41 47 4d 41 20 6c 6f 63 6b 5f      PRAGMA lock_
7d80: 70 72 6f 78 79 5f 66 69 6c 65 3d 22 3a 61 75 74  proxy_file=":aut
7d90: 6f 3a 22 3b 0a 20 20 20 20 20 20 50 52 41 47 4d  o:";.      PRAGM
7da0: 41 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c  A lock_proxy_fil
7db0: 65 3b 0a 20 20 20 20 7d 20 64 62 5d 0a 20 20 20  e;.    } db].   
7dc0: 20 73 74 72 69 6e 67 20 6d 61 74 63 68 20 22 2a   string match "*
7dd0: 70 72 6f 78 79 74 65 73 74 2e 64 62 3a 61 75 74  proxytest.db:aut
7de0: 6f 3a 22 20 24 6c 6f 63 6b 70 61 74 68 32 0a 20  o:" $lockpath2. 
7df0: 20 7d 20 7b 31 7d 0a 0a 20 20 73 65 74 20 65 6e   } {1}..  set en
7e00: 76 28 53 51 4c 49 54 45 5f 46 4f 52 43 45 5f 50  v(SQLITE_FORCE_P
7e10: 52 4f 58 59 5f 4c 4f 43 4b 49 4e 47 29 20 24 75  ROXY_LOCKING) $u
7e20: 73 69 6e 67 5f 70 72 6f 78 79 0a 20 20 73 65 74  sing_proxy.  set
7e30: 20 73 71 6c 69 74 65 5f 68 6f 73 74 69 64 5f 6e   sqlite_hostid_n
7e40: 75 6d 20 30 0a 7d 0a 66 69 6e 69 73 68 5f 74 65  um 0.}.finish_te
7e50: 73 74 0a                                         st.