/ Hex Artifact Content
Login

Artifact 37d3475b699de6d7846bca81de3d0324b3a45054:


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 33 20 32 30 30 39 2f 30 31 2f 31 32 20 31  .73 2009/01/12 1
0200: 34 3a 30 31 3a 34 35 20 64 61 6e 69 65 6c 6b 31  4:01:45 danielk1
0210: 39 37 37 20 45 78 70 20 24 0a 0a 73 65 74 20 74  977 Exp $..set t
0220: 65 73 74 64 69 72 20 5b 66 69 6c 65 20 64 69 72  estdir [file dir
0230: 6e 61 6d 65 20 24 61 72 67 76 30 5d 0a 73 6f 75  name $argv0].sou
0240: 72 63 65 20 24 74 65 73 74 64 69 72 2f 74 65 73  rce $testdir/tes
0250: 74 65 72 2e 74 63 6c 0a 0a 23 20 44 6f 20 6e 6f  ter.tcl..# Do no
0260: 74 20 75 73 65 20 61 20 63 6f 64 65 63 20 66 6f  t use a codec fo
0270: 72 20 74 65 73 74 73 20 69 6e 20 74 68 69 73 20  r tests in this 
0280: 66 69 6c 65 2c 20 61 73 20 74 68 65 20 64 61 74  file, as the dat
0290: 61 62 61 73 65 20 66 69 6c 65 20 69 73 0a 23 20  abase file is.# 
02a0: 6d 61 6e 69 70 75 6c 61 74 65 64 20 64 69 72 65  manipulated dire
02b0: 63 74 6c 79 20 75 73 69 6e 67 20 74 63 6c 20 73  ctly using tcl s
02c0: 63 72 69 70 74 73 20 28 75 73 69 6e 67 20 74 68  cripts (using th
02d0: 65 20 5b 68 65 78 69 6f 5f 77 72 69 74 65 5d 20  e [hexio_write] 
02e0: 63 6f 6d 6d 61 6e 64 29 2e 0a 23 0a 64 6f 5f 6e  command)..#.do_n
02f0: 6f 74 5f 75 73 65 5f 63 6f 64 65 63 0a 0a 23 20  ot_use_codec..# 
0300: 54 65 73 74 20 6f 72 67 61 6e 69 7a 61 74 69 6f  Test organizatio
0310: 6e 3a 0a 23 0a 23 20 70 72 61 67 6d 61 2d 31 2e  n:.#.# pragma-1.
0320: 2a 3a 20 54 65 73 74 20 63 61 63 68 65 5f 73 69  *: Test cache_si
0330: 7a 65 2c 20 64 65 66 61 75 6c 74 5f 63 61 63 68  ze, default_cach
0340: 65 5f 73 69 7a 65 20 61 6e 64 20 73 79 6e 63 68  e_size and synch
0350: 72 6f 6e 6f 75 73 20 6f 6e 20 6d 61 69 6e 20 64  ronous on main d
0360: 62 2e 0a 23 20 70 72 61 67 6d 61 2d 32 2e 2a 3a  b..# pragma-2.*:
0370: 20 54 65 73 74 20 73 79 6e 63 68 72 6f 6e 6f 75   Test synchronou
0380: 73 20 6f 6e 20 61 74 74 61 63 68 65 64 20 64 62  s on attached db
0390: 2e 0a 23 20 70 72 61 67 6d 61 2d 33 2e 2a 3a 20  ..# pragma-3.*: 
03a0: 54 65 73 74 20 64 65 74 65 63 74 69 6f 6e 20 6f  Test detection o
03b0: 66 20 74 61 62 6c 65 2f 69 6e 64 65 78 20 69 6e  f table/index in
03c0: 63 6f 6e 73 69 73 74 65 6e 63 79 20 62 79 20 69  consistency by i
03d0: 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 2e 0a  ntegrity_check..
03e0: 23 20 70 72 61 67 6d 61 2d 34 2e 2a 3a 20 54 65  # pragma-4.*: Te
03f0: 73 74 20 63 61 63 68 65 5f 73 69 7a 65 20 61 6e  st cache_size an
0400: 64 20 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f  d default_cache_
0410: 73 69 7a 65 20 6f 6e 20 61 74 74 61 63 68 65 64  size on attached
0420: 20 64 62 2e 0a 23 20 70 72 61 67 6d 61 2d 35 2e   db..# pragma-5.
0430: 2a 3a 20 54 65 73 74 20 74 68 61 74 20 70 72 61  *: Test that pra
0440: 67 6d 61 20 73 79 6e 63 68 72 6f 6e 6f 75 73 20  gma synchronous 
0450: 6d 61 79 20 6e 6f 74 20 62 65 20 75 73 65 64 20  may not be used 
0460: 69 6e 73 69 64 65 20 6f 66 20 61 0a 23 20 20 20  inside of a.#   
0470: 20 20 20 20 20 20 20 20 20 20 74 72 61 6e 73 61            transa
0480: 63 74 69 6f 6e 2e 0a 23 20 70 72 61 67 6d 61 2d  ction..# pragma-
0490: 36 2e 2a 3a 20 54 65 73 74 20 73 63 68 65 6d 61  6.*: Test schema
04a0: 2d 71 75 65 72 79 20 70 72 61 67 6d 61 73 2e 0a  -query pragmas..
04b0: 23 20 70 72 61 67 6d 61 2d 37 2e 2a 3a 20 4d 69  # pragma-7.*: Mi
04c0: 73 63 65 6c 6c 61 6e 65 6f 75 73 20 74 65 73 74  scellaneous test
04d0: 73 2e 0a 23 20 70 72 61 67 6d 61 2d 38 2e 2a 3a  s..# pragma-8.*:
04e0: 20 54 65 73 74 20 75 73 65 72 5f 76 65 72 73 69   Test user_versi
04f0: 6f 6e 20 61 6e 64 20 73 63 68 65 6d 61 5f 76 65  on and schema_ve
0500: 72 73 69 6f 6e 20 70 72 61 67 6d 61 73 2e 0a 23  rsion pragmas..#
0510: 20 70 72 61 67 6d 61 2d 39 2e 2a 3a 20 54 65 73   pragma-9.*: Tes
0520: 74 20 74 65 6d 70 5f 73 74 6f 72 65 20 61 6e 64  t temp_store and
0530: 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65   temp_store_dire
0540: 63 74 6f 72 79 2e 0a 23 20 70 72 61 67 6d 61 2d  ctory..# pragma-
0550: 31 30 2e 2a 3a 20 54 65 73 74 20 74 68 65 20 63  10.*: Test the c
0560: 6f 75 6e 74 5f 63 68 61 6e 67 65 73 20 70 72 61  ount_changes pra
0570: 67 6d 61 20 69 6e 20 74 68 65 20 70 72 65 73 65  gma in the prese
0580: 6e 63 65 20 6f 66 20 74 72 69 67 67 65 72 73 2e  nce of triggers.
0590: 0a 23 20 70 72 61 67 6d 61 2d 31 31 2e 2a 3a 20  .# pragma-11.*: 
05a0: 54 65 73 74 20 74 68 65 20 63 6f 6c 6c 61 74 69  Test the collati
05b0: 6f 6e 5f 6c 69 73 74 20 70 72 61 67 6d 61 2e 0a  on_list pragma..
05c0: 23 20 70 72 61 67 6d 61 2d 31 34 2e 2a 3a 20 54  # pragma-14.*: T
05d0: 65 73 74 20 74 68 65 20 70 61 67 65 5f 63 6f 75  est the page_cou
05e0: 6e 74 20 70 72 61 67 6d 61 2e 0a 23 20 70 72 61  nt pragma..# pra
05f0: 67 6d 61 2d 31 35 2e 2a 3a 20 54 65 73 74 20 74  gma-15.*: Test t
0600: 68 61 74 20 74 68 65 20 76 61 6c 75 65 20 73 65  hat the value se
0610: 74 20 75 73 69 6e 67 20 74 68 65 20 63 61 63 68  t using the cach
0620: 65 5f 73 69 7a 65 20 70 72 61 67 6d 61 20 69 73  e_size pragma is
0630: 20 6e 6f 74 0a 23 20 20 20 20 20 20 20 20 20 20   not.#          
0640: 20 20 20 20 72 65 73 65 74 20 77 68 65 6e 20 74      reset when t
0650: 68 65 20 73 63 68 65 6d 61 20 69 73 20 72 65 6c  he schema is rel
0660: 6f 61 64 65 64 2e 0a 23 20 70 72 61 67 6d 61 2d  oaded..# pragma-
0670: 31 36 2e 2a 3a 20 54 65 73 74 20 70 72 6f 78 79  16.*: Test proxy
0680: 20 6c 6f 63 6b 69 6e 67 0a 23 20 70 72 61 67 6d   locking.# pragm
0690: 61 2d 32 30 2e 2a 3a 20 54 65 73 74 20 64 61 74  a-20.*: Test dat
06a0: 61 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72  a_store_director
06b0: 79 2e 0a 23 0a 0a 69 66 63 61 70 61 62 6c 65 20  y..#..ifcapable 
06c0: 21 70 72 61 67 6d 61 20 7b 0a 20 20 66 69 6e 69  !pragma {.  fini
06d0: 73 68 5f 74 65 73 74 0a 20 20 72 65 74 75 72 6e  sh_test.  return
06e0: 0a 7d 0a 0a 23 20 44 65 6c 65 74 65 20 74 68 65  .}..# Delete the
06f0: 20 70 72 65 65 78 69 73 74 69 6e 67 20 64 61 74   preexisting dat
0700: 61 62 61 73 65 20 74 6f 20 61 76 6f 69 64 20 74  abase to avoid t
0710: 68 65 20 73 70 65 63 69 61 6c 20 73 65 74 75 70  he special setup
0720: 0a 23 20 74 68 61 74 20 74 68 65 20 22 61 6c 6c  .# that the "all
0730: 2e 74 65 73 74 22 20 73 63 72 69 70 74 20 64 6f  .test" script do
0740: 65 73 2e 0a 23 0a 64 62 20 63 6c 6f 73 65 0a 64  es..#.db close.d
0750: 65 6c 65 74 65 5f 66 69 6c 65 20 74 65 73 74 2e  elete_file test.
0760: 64 62 20 74 65 73 74 2e 64 62 2d 6a 6f 75 72 6e  db test.db-journ
0770: 61 6c 0a 64 65 6c 65 74 65 5f 66 69 6c 65 20 74  al.delete_file t
0780: 65 73 74 33 2e 64 62 20 74 65 73 74 33 2e 64 62  est3.db test3.db
0790: 2d 6a 6f 75 72 6e 61 6c 0a 73 71 6c 69 74 65 33  -journal.sqlite3
07a0: 20 64 62 20 74 65 73 74 2e 64 62 3b 20 73 65 74   db test.db; set
07b0: 20 44 42 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6e   DB [sqlite3_con
07c0: 6e 65 63 74 69 6f 6e 5f 70 6f 69 6e 74 65 72 20  nection_pointer 
07d0: 64 62 5d 0a 0a 0a 69 66 63 61 70 61 62 6c 65 20  db]...ifcapable 
07e0: 70 61 67 65 72 5f 70 72 61 67 6d 61 73 20 7b 0a  pager_pragmas {.
07f0: 73 65 74 20 44 46 4c 54 5f 43 41 43 48 45 5f 53  set DFLT_CACHE_S
0800: 5a 20 5b 64 62 20 6f 6e 65 20 7b 50 52 41 47 4d  Z [db one {PRAGM
0810: 41 20 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f  A default_cache_
0820: 73 69 7a 65 7d 5d 0a 73 65 74 20 54 45 4d 50 5f  size}].set TEMP_
0830: 43 41 43 48 45 5f 53 5a 20 5b 64 62 20 6f 6e 65  CACHE_SZ [db one
0840: 20 7b 50 52 41 47 4d 41 20 74 65 6d 70 2e 64 65   {PRAGMA temp.de
0850: 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65  fault_cache_size
0860: 7d 5d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  }].do_test pragm
0870: 61 2d 31 2e 31 20 7b 0a 20 20 65 78 65 63 73 71  a-1.1 {.  execsq
0880: 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 63  l {.    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 24 44  ;.  }.} [list $D
08e0: 46 4c 54 5f 43 41 43 48 45 5f 53 5a 20 24 44 46  FLT_CACHE_SZ $DF
08f0: 4c 54 5f 43 41 43 48 45 5f 53 5a 20 32 5d 0a 64  LT_CACHE_SZ 2].d
0900: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 2e  o_test pragma-1.
0910: 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  2 {.  execsql {.
0920: 20 20 20 20 50 52 41 47 4d 41 20 73 79 6e 63 68      PRAGMA synch
0930: 72 6f 6e 6f 75 73 3d 4f 46 46 3b 0a 20 20 20 20  ronous=OFF;.    
0940: 50 52 41 47 4d 41 20 63 61 63 68 65 5f 73 69 7a  PRAGMA cache_siz
0950: 65 3d 31 32 33 34 3b 0a 20 20 20 20 50 52 41 47  e=1234;.    PRAG
0960: 4d 41 20 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20  MA cache_size;. 
0970: 20 20 20 50 52 41 47 4d 41 20 64 65 66 61 75 6c     PRAGMA defaul
0980: 74 5f 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20  t_cache_size;.  
0990: 20 20 50 52 41 47 4d 41 20 73 79 6e 63 68 72 6f    PRAGMA synchro
09a0: 6e 6f 75 73 3b 0a 20 20 7d 0a 7d 20 5b 6c 69 73  nous;.  }.} [lis
09b0: 74 20 31 32 33 34 20 24 44 46 4c 54 5f 43 41 43  t 1234 $DFLT_CAC
09c0: 48 45 5f 53 5a 20 30 5d 0a 64 6f 5f 74 65 73 74  HE_SZ 0].do_test
09d0: 20 70 72 61 67 6d 61 2d 31 2e 33 20 7b 0a 20 20   pragma-1.3 {.  
09e0: 64 62 20 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74  db close.  sqlit
09f0: 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20  e3 db test.db.  
0a00: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52  execsql {.    PR
0a10: 41 47 4d 41 20 63 61 63 68 65 5f 73 69 7a 65 3b  AGMA cache_size;
0a20: 0a 20 20 20 20 50 52 41 47 4d 41 20 64 65 66 61  .    PRAGMA defa
0a30: 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65 3b 0a  ult_cache_size;.
0a40: 20 20 20 20 50 52 41 47 4d 41 20 73 79 6e 63 68      PRAGMA synch
0a50: 72 6f 6e 6f 75 73 3b 0a 20 20 7d 0a 7d 20 5b 6c  ronous;.  }.} [l
0a60: 69 73 74 20 24 44 46 4c 54 5f 43 41 43 48 45 5f  ist $DFLT_CACHE_
0a70: 53 5a 20 24 44 46 4c 54 5f 43 41 43 48 45 5f 53  SZ $DFLT_CACHE_S
0a80: 5a 20 32 5d 0a 64 6f 5f 74 65 73 74 20 70 72 61  Z 2].do_test pra
0a90: 67 6d 61 2d 31 2e 34 20 7b 0a 20 20 65 78 65 63  gma-1.4 {.  exec
0aa0: 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41  sql {.    PRAGMA
0ab0: 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3d 4f 46 46   synchronous=OFF
0ac0: 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 63 61 63  ;.    PRAGMA cac
0ad0: 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 50 52 41  he_size;.    PRA
0ae0: 47 4d 41 20 64 65 66 61 75 6c 74 5f 63 61 63 68  GMA default_cach
0af0: 65 5f 73 69 7a 65 3b 0a 20 20 20 20 50 52 41 47  e_size;.    PRAG
0b00: 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a  MA synchronous;.
0b10: 20 20 7d 0a 7d 20 5b 6c 69 73 74 20 24 44 46 4c    }.} [list $DFL
0b20: 54 5f 43 41 43 48 45 5f 53 5a 20 24 44 46 4c 54  T_CACHE_SZ $DFLT
0b30: 5f 43 41 43 48 45 5f 53 5a 20 30 5d 0a 64 6f 5f  _CACHE_SZ 0].do_
0b40: 74 65 73 74 20 70 72 61 67 6d 61 2d 31 2e 35 20  test pragma-1.5 
0b50: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
0b60: 20 20 50 52 41 47 4d 41 20 63 61 63 68 65 5f 73    PRAGMA cache_s
0b70: 69 7a 65 3d 2d 34 33 32 31 3b 0a 20 20 20 20 50  ize=-4321;.    P
0b80: 52 41 47 4d 41 20 63 61 63 68 65 5f 73 69 7a 65  RAGMA cache_size
0b90: 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 64 65 66  ;.    PRAGMA def
0ba0: 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65 3b  ault_cache_size;
0bb0: 0a 20 20 20 20 50 52 41 47 4d 41 20 73 79 6e 63  .    PRAGMA sync
0bc0: 68 72 6f 6e 6f 75 73 3b 0a 20 20 7d 0a 7d 20 5b  hronous;.  }.} [
0bd0: 6c 69 73 74 20 2d 34 33 32 31 20 24 44 46 4c 54  list -4321 $DFLT
0be0: 5f 43 41 43 48 45 5f 53 5a 20 30 5d 0a 64 6f 5f  _CACHE_SZ 0].do_
0bf0: 74 65 73 74 20 70 72 61 67 6d 61 2d 31 2e 36 20  test pragma-1.6 
0c00: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
0c10: 20 20 50 52 41 47 4d 41 20 73 79 6e 63 68 72 6f    PRAGMA synchro
0c20: 6e 6f 75 73 3d 4f 4e 3b 0a 20 20 20 20 50 52 41  nous=ON;.    PRA
0c30: 47 4d 41 20 63 61 63 68 65 5f 73 69 7a 65 3b 0a  GMA cache_size;.
0c40: 20 20 20 20 50 52 41 47 4d 41 20 64 65 66 61 75      PRAGMA defau
0c50: 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20  lt_cache_size;. 
0c60: 20 20 20 50 52 41 47 4d 41 20 73 79 6e 63 68 72     PRAGMA synchr
0c70: 6f 6e 6f 75 73 3b 0a 20 20 7d 0a 7d 20 5b 6c 69  onous;.  }.} [li
0c80: 73 74 20 2d 34 33 32 31 20 24 44 46 4c 54 5f 43  st -4321 $DFLT_C
0c90: 41 43 48 45 5f 53 5a 20 31 5d 0a 64 6f 5f 74 65  ACHE_SZ 1].do_te
0ca0: 73 74 20 70 72 61 67 6d 61 2d 31 2e 37 20 7b 0a  st pragma-1.7 {.
0cb0: 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 73 71 6c    db close.  sql
0cc0: 69 74 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a  ite3 db test.db.
0cd0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
0ce0: 50 52 41 47 4d 41 20 63 61 63 68 65 5f 73 69 7a  PRAGMA cache_siz
0cf0: 65 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 64 65  e;.    PRAGMA de
0d00: 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65  fault_cache_size
0d10: 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 73 79 6e  ;.    PRAGMA syn
0d20: 63 68 72 6f 6e 6f 75 73 3b 0a 20 20 7d 0a 7d 20  chronous;.  }.} 
0d30: 5b 6c 69 73 74 20 24 44 46 4c 54 5f 43 41 43 48  [list $DFLT_CACH
0d40: 45 5f 53 5a 20 24 44 46 4c 54 5f 43 41 43 48 45  E_SZ $DFLT_CACHE
0d50: 5f 53 5a 20 32 5d 0a 64 6f 5f 74 65 73 74 20 70  _SZ 2].do_test p
0d60: 72 61 67 6d 61 2d 31 2e 38 20 7b 0a 20 20 65 78  ragma-1.8 {.  ex
0d70: 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47  ecsql {.    PRAG
0d80: 4d 41 20 64 65 66 61 75 6c 74 5f 63 61 63 68 65  MA default_cache
0d90: 5f 73 69 7a 65 3d 2d 31 32 33 3b 0a 20 20 20 20  _size=-123;.    
0da0: 50 52 41 47 4d 41 20 63 61 63 68 65 5f 73 69 7a  PRAGMA cache_siz
0db0: 65 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 64 65  e;.    PRAGMA de
0dc0: 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65  fault_cache_size
0dd0: 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 73 79 6e  ;.    PRAGMA syn
0de0: 63 68 72 6f 6e 6f 75 73 3b 0a 20 20 7d 0a 7d 20  chronous;.  }.} 
0df0: 7b 31 32 33 20 31 32 33 20 32 7d 0a 64 6f 5f 74  {123 123 2}.do_t
0e00: 65 73 74 20 70 72 61 67 6d 61 2d 31 2e 39 2e 31  est pragma-1.9.1
0e10: 20 7b 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20 20   {.  db close.  
0e20: 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e  sqlite3 db test.
0e30: 64 62 3b 20 73 65 74 20 3a 3a 44 42 20 5b 73 71  db; set ::DB [sq
0e40: 6c 69 74 65 33 5f 63 6f 6e 6e 65 63 74 69 6f 6e  lite3_connection
0e50: 5f 70 6f 69 6e 74 65 72 20 64 62 5d 0a 20 20 65  _pointer db].  e
0e60: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41  xecsql {.    PRA
0e70: 47 4d 41 20 63 61 63 68 65 5f 73 69 7a 65 3b 0a  GMA cache_size;.
0e80: 20 20 20 20 50 52 41 47 4d 41 20 64 65 66 61 75      PRAGMA defau
0e90: 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20  lt_cache_size;. 
0ea0: 20 20 20 50 52 41 47 4d 41 20 73 79 6e 63 68 72     PRAGMA synchr
0eb0: 6f 6e 6f 75 73 3b 0a 20 20 7d 0a 7d 20 7b 31 32  onous;.  }.} {12
0ec0: 33 20 31 32 33 20 32 7d 0a 69 66 63 61 70 61 62  3 123 2}.ifcapab
0ed0: 6c 65 20 76 61 63 75 75 6d 20 7b 0a 20 20 64 6f  le vacuum {.  do
0ee0: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 2e 39  _test pragma-1.9
0ef0: 2e 32 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  .2 {.    execsql
0f00: 20 7b 0a 20 20 20 20 20 20 56 41 43 55 55 4d 3b   {.      VACUUM;
0f10: 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 63 61  .      PRAGMA ca
0f20: 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 20 20  che_size;.      
0f30: 50 52 41 47 4d 41 20 64 65 66 61 75 6c 74 5f 63  PRAGMA default_c
0f40: 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 20  ache_size;.     
0f50: 20 50 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e   PRAGMA synchron
0f60: 6f 75 73 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b  ous;.    }.  } {
0f70: 31 32 33 20 31 32 33 20 32 7d 0a 7d 0a 64 6f 5f  123 123 2}.}.do_
0f80: 74 65 73 74 20 70 72 61 67 6d 61 2d 31 2e 31 30  test pragma-1.10
0f90: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
0fa0: 20 20 20 50 52 41 47 4d 41 20 73 79 6e 63 68 72     PRAGMA synchr
0fb0: 6f 6e 6f 75 73 3d 4e 4f 52 4d 41 4c 3b 0a 20 20  onous=NORMAL;.  
0fc0: 20 20 50 52 41 47 4d 41 20 63 61 63 68 65 5f 73    PRAGMA cache_s
0fd0: 69 7a 65 3b 0a 20 20 20 20 50 52 41 47 4d 41 20  ize;.    PRAGMA 
0fe0: 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69  default_cache_si
0ff0: 7a 65 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 73  ze;.    PRAGMA s
1000: 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20 20 7d 0a  ynchronous;.  }.
1010: 7d 20 7b 31 32 33 20 31 32 33 20 31 7d 0a 64 6f  } {123 123 1}.do
1020: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 2e 31  _test pragma-1.1
1030: 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  1 {.  execsql {.
1040: 20 20 20 20 50 52 41 47 4d 41 20 73 79 6e 63 68      PRAGMA synch
1050: 72 6f 6e 6f 75 73 3d 46 55 4c 4c 3b 0a 20 20 20  ronous=FULL;.   
1060: 20 50 52 41 47 4d 41 20 63 61 63 68 65 5f 73 69   PRAGMA cache_si
1070: 7a 65 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 64  ze;.    PRAGMA d
1080: 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a  efault_cache_siz
1090: 65 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 73 79  e;.    PRAGMA sy
10a0: 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20 20 7d 0a 7d  nchronous;.  }.}
10b0: 20 7b 31 32 33 20 31 32 33 20 32 7d 0a 64 6f 5f   {123 123 2}.do_
10c0: 74 65 73 74 20 70 72 61 67 6d 61 2d 31 2e 31 32  test pragma-1.12
10d0: 20 7b 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20 20   {.  db close.  
10e0: 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e  sqlite3 db test.
10f0: 64 62 3b 20 73 65 74 20 3a 3a 44 42 20 5b 73 71  db; set ::DB [sq
1100: 6c 69 74 65 33 5f 63 6f 6e 6e 65 63 74 69 6f 6e  lite3_connection
1110: 5f 70 6f 69 6e 74 65 72 20 64 62 5d 0a 20 20 65  _pointer db].  e
1120: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41  xecsql {.    PRA
1130: 47 4d 41 20 63 61 63 68 65 5f 73 69 7a 65 3b 0a  GMA cache_size;.
1140: 20 20 20 20 50 52 41 47 4d 41 20 64 65 66 61 75      PRAGMA defau
1150: 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20  lt_cache_size;. 
1160: 20 20 20 50 52 41 47 4d 41 20 73 79 6e 63 68 72     PRAGMA synchr
1170: 6f 6e 6f 75 73 3b 0a 20 20 7d 0a 7d 20 7b 31 32  onous;.  }.} {12
1180: 33 20 31 32 33 20 32 7d 0a 0a 23 20 4d 61 6b 65  3 123 2}..# Make
1190: 20 73 75 72 65 20 74 68 65 20 70 72 61 67 6d 61   sure the pragma
11a0: 20 68 61 6e 64 6c 65 72 20 75 6e 64 65 72 73 74   handler underst
11b0: 61 6e 64 73 20 6e 75 6d 65 72 69 63 20 76 61 6c  ands numeric val
11c0: 75 65 73 20 69 6e 20 61 64 64 69 74 69 6f 6e 0a  ues in addition.
11d0: 23 20 74 6f 20 6b 65 79 77 6f 72 64 73 20 6c 69  # to keywords li
11e0: 6b 65 20 22 6f 66 66 22 20 61 6e 64 20 22 66 75  ke "off" and "fu
11f0: 6c 6c 22 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 70  ll"..#.do_test p
1200: 72 61 67 6d 61 2d 31 2e 31 33 20 7b 0a 20 20 65  ragma-1.13 {.  e
1210: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41  xecsql {.    PRA
1220: 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3d  GMA synchronous=
1230: 30 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 73 79  0;.    PRAGMA sy
1240: 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20 20 7d 0a 7d  nchronous;.  }.}
1250: 20 7b 30 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61   {0}.do_test pra
1260: 67 6d 61 2d 31 2e 31 34 20 7b 0a 20 20 65 78 65  gma-1.14 {.  exe
1270: 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d  csql {.    PRAGM
1280: 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3d 32 3b  A synchronous=2;
1290: 0a 20 20 20 20 50 52 41 47 4d 41 20 73 79 6e 63  .    PRAGMA sync
12a0: 68 72 6f 6e 6f 75 73 3b 0a 20 20 7d 0a 7d 20 7b  hronous;.  }.} {
12b0: 32 7d 0a 7d 20 3b 23 20 69 66 63 61 70 61 62 6c  2}.} ;# ifcapabl
12c0: 65 20 70 61 67 65 72 5f 70 72 61 67 6d 61 73 0a  e pager_pragmas.
12d0: 0a 23 20 54 65 73 74 20 74 75 72 6e 69 6e 67 20  .# Test turning 
12e0: 22 66 6c 61 67 22 20 70 72 61 67 6d 61 73 20 6f  "flag" pragmas o
12f0: 6e 20 61 6e 64 20 6f 66 66 2e 0a 23 0a 69 66 63  n and off..#.ifc
1300: 61 70 61 62 6c 65 20 64 65 62 75 67 20 7b 0a 20  apable debug {. 
1310: 20 23 20 50 72 61 67 6d 61 20 22 76 64 62 65 5f   # Pragma "vdbe_
1320: 6c 69 73 74 69 6e 67 22 20 69 73 20 6f 6e 6c 79  listing" is only
1330: 20 61 76 61 69 6c 61 62 6c 65 20 69 66 20 63 6f   available if co
1340: 6d 70 69 6c 65 64 20 77 69 74 68 20 53 51 4c 49  mpiled with SQLI
1350: 54 45 5f 44 45 42 55 47 0a 20 20 23 0a 20 20 64  TE_DEBUG.  #.  d
1360: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 2e  o_test pragma-1.
1370: 31 35 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  15 {.    execsql
1380: 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20   {.      PRAGMA 
1390: 76 64 62 65 5f 6c 69 73 74 69 6e 67 3d 59 45 53  vdbe_listing=YES
13a0: 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 76  ;.      PRAGMA v
13b0: 64 62 65 5f 6c 69 73 74 69 6e 67 3b 0a 20 20 20  dbe_listing;.   
13c0: 20 7d 0a 20 20 7d 20 7b 31 7d 0a 20 20 64 6f 5f   }.  } {1}.  do_
13d0: 74 65 73 74 20 70 72 61 67 6d 61 2d 31 2e 31 36  test pragma-1.16
13e0: 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b   {.    execsql {
13f0: 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 76 64  .      PRAGMA vd
1400: 62 65 5f 6c 69 73 74 69 6e 67 3d 4e 4f 3b 0a 20  be_listing=NO;. 
1410: 20 20 20 20 20 50 52 41 47 4d 41 20 76 64 62 65       PRAGMA vdbe
1420: 5f 6c 69 73 74 69 6e 67 3b 0a 20 20 20 20 7d 0a  _listing;.    }.
1430: 20 20 7d 20 7b 30 7d 0a 7d 0a 0a 64 6f 5f 74 65    } {0}.}..do_te
1440: 73 74 20 70 72 61 67 6d 61 2d 31 2e 31 37 20 7b  st pragma-1.17 {
1450: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
1460: 20 50 52 41 47 4d 41 20 70 61 72 73 65 72 5f 74   PRAGMA parser_t
1470: 72 61 63 65 3d 4f 4e 3b 0a 20 20 20 20 50 52 41  race=ON;.    PRA
1480: 47 4d 41 20 70 61 72 73 65 72 5f 74 72 61 63 65  GMA parser_trace
1490: 3d 4f 46 46 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64  =OFF;.  }.} {}.d
14a0: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 2e  o_test pragma-1.
14b0: 31 38 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  18 {.  execsql {
14c0: 0a 20 20 20 20 50 52 41 47 4d 41 20 62 6f 67 75  .    PRAGMA bogu
14d0: 73 20 3d 20 2d 31 32 33 34 3b 20 20 2d 2d 20 50  s = -1234;  -- P
14e0: 61 72 73 69 6e 67 20 6f 66 20 6e 65 67 61 74 69  arsing of negati
14f0: 76 65 20 76 61 6c 75 65 73 0a 20 20 7d 0a 7d 20  ve values.  }.} 
1500: 7b 7d 0a 0a 23 20 54 65 73 74 20 6d 6f 64 69 66  {}..# Test modif
1510: 79 69 6e 67 20 74 68 65 20 73 61 66 65 74 79 5f  ying the safety_
1520: 6c 65 76 65 6c 20 6f 66 20 61 6e 20 61 74 74 61  level of an atta
1530: 63 68 65 64 20 64 61 74 61 62 61 73 65 2e 0a 69  ched database..i
1540: 66 63 61 70 61 62 6c 65 20 70 61 67 65 72 5f 70  fcapable pager_p
1550: 72 61 67 6d 61 73 26 26 61 74 74 61 63 68 20 7b  ragmas&&attach {
1560: 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .  do_test pragm
1570: 61 2d 32 2e 31 20 7b 0a 20 20 20 20 66 6f 72 63  a-2.1 {.    forc
1580: 65 64 65 6c 65 74 65 20 74 65 73 74 32 2e 64 62  edelete test2.db
1590: 0a 20 20 20 20 66 6f 72 63 65 64 65 6c 65 74 65  .    forcedelete
15a0: 20 74 65 73 74 32 2e 64 62 2d 6a 6f 75 72 6e 61   test2.db-journa
15b0: 6c 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a  l.    execsql {.
15c0: 20 20 20 20 20 20 41 54 54 41 43 48 20 27 74 65        ATTACH 'te
15d0: 73 74 32 2e 64 62 27 20 41 53 20 61 75 78 3b 0a  st2.db' AS aux;.
15e0: 20 20 20 20 7d 20 0a 20 20 7d 20 7b 7d 0a 20 20      } .  } {}.  
15f0: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 32  do_test pragma-2
1600: 2e 32 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  .2 {.    execsql
1610: 20 7b 0a 20 20 20 20 20 20 70 72 61 67 6d 61 20   {.      pragma 
1620: 61 75 78 2e 73 79 6e 63 68 72 6f 6e 6f 75 73 3b  aux.synchronous;
1630: 0a 20 20 20 20 7d 20 0a 20 20 7d 20 7b 32 7d 0a  .    } .  } {2}.
1640: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
1650: 2d 32 2e 33 20 7b 0a 20 20 20 20 65 78 65 63 73  -2.3 {.    execs
1660: 71 6c 20 7b 0a 20 20 20 20 20 20 70 72 61 67 6d  ql {.      pragm
1670: 61 20 61 75 78 2e 73 79 6e 63 68 72 6f 6e 6f 75  a aux.synchronou
1680: 73 20 3d 20 4f 46 46 3b 0a 20 20 20 20 20 20 70  s = OFF;.      p
1690: 72 61 67 6d 61 20 61 75 78 2e 73 79 6e 63 68 72  ragma aux.synchr
16a0: 6f 6e 6f 75 73 3b 0a 20 20 20 20 20 20 70 72 61  onous;.      pra
16b0: 67 6d 61 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3b  gma synchronous;
16c0: 0a 20 20 20 20 7d 20 0a 20 20 7d 20 7b 30 20 32  .    } .  } {0 2
16d0: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67  }.  do_test prag
16e0: 6d 61 2d 32 2e 34 20 7b 0a 20 20 20 20 65 78 65  ma-2.4 {.    exe
16f0: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 70 72 61  csql {.      pra
1700: 67 6d 61 20 61 75 78 2e 73 79 6e 63 68 72 6f 6e  gma aux.synchron
1710: 6f 75 73 20 3d 20 4f 4e 3b 0a 20 20 20 20 20 20  ous = ON;.      
1720: 70 72 61 67 6d 61 20 73 79 6e 63 68 72 6f 6e 6f  pragma synchrono
1730: 75 73 3b 0a 20 20 20 20 20 20 70 72 61 67 6d 61  us;.      pragma
1740: 20 61 75 78 2e 73 79 6e 63 68 72 6f 6e 6f 75 73   aux.synchronous
1750: 3b 0a 20 20 20 20 7d 20 0a 20 20 7d 20 7b 32 20  ;.    } .  } {2 
1760: 31 7d 0a 7d 20 3b 23 20 69 66 63 61 70 61 62 6c  1}.} ;# ifcapabl
1770: 65 20 70 61 67 65 72 5f 70 72 61 67 6d 61 73 0a  e pager_pragmas.
1780: 0a 23 20 43 6f 6e 73 74 72 75 63 74 20 61 20 63  .# Construct a c
1790: 6f 72 72 75 70 74 65 64 20 69 6e 64 65 78 20 61  orrupted index a
17a0: 6e 64 20 6d 61 6b 65 20 73 75 72 65 20 74 68 65  nd make sure the
17b0: 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b   integrity_check
17c0: 0a 23 20 70 72 61 67 6d 61 20 66 69 6e 64 73 20  .# pragma finds 
17d0: 69 74 2e 0a 23 0a 23 20 54 68 65 73 65 20 74 65  it..#.# These te
17e0: 73 74 73 20 77 6f 6e 27 74 20 77 6f 72 6b 20 69  sts won't work i
17f0: 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69  f the database i
1800: 73 20 65 6e 63 72 79 70 74 65 64 0a 23 0a 64 6f  s encrypted.#.do
1810: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 33 2e 31  _test pragma-3.1
1820: 20 7b 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20 20   {.  db close.  
1830: 66 6f 72 63 65 64 65 6c 65 74 65 20 74 65 73 74  forcedelete test
1840: 2e 64 62 20 74 65 73 74 2e 64 62 2d 6a 6f 75 72  .db test.db-jour
1850: 6e 61 6c 0a 20 20 73 71 6c 69 74 65 33 20 64 62  nal.  sqlite3 db
1860: 20 74 65 73 74 2e 64 62 0a 20 20 65 78 65 63 73   test.db.  execs
1870: 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20  ql {.    PRAGMA 
1880: 61 75 74 6f 5f 76 61 63 75 75 6d 3d 4f 46 46 3b  auto_vacuum=OFF;
1890: 0a 20 20 20 20 42 45 47 49 4e 3b 0a 20 20 20 20  .    BEGIN;.    
18a0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 32 28  CREATE TABLE t2(
18b0: 61 2c 62 2c 63 29 3b 0a 20 20 20 20 43 52 45 41  a,b,c);.    CREA
18c0: 54 45 20 49 4e 44 45 58 20 69 32 20 4f 4e 20 74  TE INDEX i2 ON t
18d0: 32 28 61 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  2(a);.    INSERT
18e0: 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28   INTO t2 VALUES(
18f0: 31 31 2c 32 2c 33 29 3b 0a 20 20 20 20 49 4e 53  11,2,3);.    INS
1900: 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55  ERT INTO t2 VALU
1910: 45 53 28 32 32 2c 33 2c 34 29 3b 0a 20 20 20 20  ES(22,3,4);.    
1920: 43 4f 4d 4d 49 54 3b 0a 20 20 20 20 53 45 4c 45  COMMIT;.    SELE
1930: 43 54 20 72 6f 77 69 64 2c 20 2a 20 66 72 6f 6d  CT rowid, * from
1940: 20 74 32 3b 0a 20 20 7d 0a 7d 20 7b 31 20 31 31   t2;.  }.} {1 11
1950: 20 32 20 33 20 32 20 32 32 20 33 20 34 7d 0a 69   2 3 2 22 3 4}.i
1960: 66 63 61 70 61 62 6c 65 20 61 74 74 61 63 68 20  fcapable attach 
1970: 7b 0a 20 20 69 66 20 7b 21 5b 73 71 6c 69 74 65  {.  if {![sqlite
1980: 33 20 2d 68 61 73 2d 63 6f 64 65 63 5d 20 26 26  3 -has-codec] &&
1990: 20 24 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73   $sqlite_options
19a0: 28 69 6e 74 65 67 72 69 74 79 63 6b 29 7d 20 7b  (integrityck)} {
19b0: 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 70 72 61  .    do_test pra
19c0: 67 6d 61 2d 33 2e 32 20 7b 0a 20 20 20 20 20 20  gma-3.2 {.      
19d0: 64 62 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20  db eval {SELECT 
19e0: 72 6f 6f 74 70 61 67 65 20 46 52 4f 4d 20 73 71  rootpage FROM sq
19f0: 6c 69 74 65 5f 6d 61 73 74 65 72 20 57 48 45 52  lite_master WHER
1a00: 45 20 6e 61 6d 65 3d 27 69 32 27 7d 20 62 72 65  E name='i2'} bre
1a10: 61 6b 0a 20 20 20 20 20 20 73 65 74 20 70 67 73  ak.      set pgs
1a20: 7a 20 5b 64 62 20 65 76 61 6c 20 7b 50 52 41 47  z [db eval {PRAG
1a30: 4d 41 20 70 61 67 65 5f 73 69 7a 65 7d 5d 0a 20  MA page_size}]. 
1a40: 20 20 20 20 20 23 20 6f 76 65 72 77 72 69 74 65       # overwrite
1a50: 20 74 68 65 20 68 65 61 64 65 72 20 6f 6e 20 74   the header on t
1a60: 68 65 20 72 6f 6f 74 70 61 67 65 20 6f 66 20 74  he rootpage of t
1a70: 68 65 20 69 6e 64 65 78 20 69 6e 20 6f 72 64 65  he index in orde
1a80: 72 20 74 6f 0a 20 20 20 20 20 20 23 20 6d 61 6b  r to.      # mak
1a90: 65 20 74 68 65 20 69 6e 64 65 78 20 61 70 70 65  e the index appe
1aa0: 61 72 20 74 6f 20 62 65 20 65 6d 70 74 79 2e 0a  ar to be empty..
1ab0: 20 20 20 20 20 20 23 0a 20 20 20 20 20 20 73 65        #.      se
1ac0: 74 20 6f 66 66 73 65 74 20 5b 65 78 70 72 20 7b  t offset [expr {
1ad0: 24 70 67 73 7a 2a 28 24 72 6f 6f 74 70 61 67 65  $pgsz*($rootpage
1ae0: 2d 31 29 7d 5d 0a 20 20 20 20 20 20 68 65 78 69  -1)}].      hexi
1af0: 6f 5f 77 72 69 74 65 20 74 65 73 74 2e 64 62 20  o_write test.db 
1b00: 24 6f 66 66 73 65 74 20 30 61 30 30 30 30 30 30  $offset 0a000000
1b10: 30 30 30 34 30 30 30 30 30 30 30 30 30 30 0a 20  00040000000000. 
1b20: 20 20 20 20 20 64 62 20 63 6c 6f 73 65 0a 20 20       db close.  
1b30: 20 20 20 20 73 71 6c 69 74 65 33 20 64 62 20 74      sqlite3 db t
1b40: 65 73 74 2e 64 62 0a 20 20 20 20 20 20 65 78 65  est.db.      exe
1b50: 63 73 71 6c 20 7b 50 52 41 47 4d 41 20 69 6e 74  csql {PRAGMA int
1b60: 65 67 72 69 74 79 5f 63 68 65 63 6b 7d 0a 20 20  egrity_check}.  
1b70: 20 20 7d 20 7b 7b 72 6f 77 69 64 20 31 20 6d 69    } {{rowid 1 mi
1b80: 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78  ssing from index
1b90: 20 69 32 7d 20 7b 72 6f 77 69 64 20 32 20 6d 69   i2} {rowid 2 mi
1ba0: 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78  ssing from index
1bb0: 20 69 32 7d 20 7b 77 72 6f 6e 67 20 23 20 6f 66   i2} {wrong # of
1bc0: 20 65 6e 74 72 69 65 73 20 69 6e 20 69 6e 64 65   entries in inde
1bd0: 78 20 69 32 7d 7d 0a 20 20 20 20 64 6f 5f 74 65  x i2}}.    do_te
1be0: 73 74 20 70 72 61 67 6d 61 2d 33 2e 33 20 7b 0a  st pragma-3.3 {.
1bf0: 20 20 20 20 20 20 65 78 65 63 73 71 6c 20 7b 50        execsql {P
1c00: 52 41 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f  RAGMA integrity_
1c10: 63 68 65 63 6b 3d 31 7d 0a 20 20 20 20 7d 20 7b  check=1}.    } {
1c20: 7b 72 6f 77 69 64 20 31 20 6d 69 73 73 69 6e 67  {rowid 1 missing
1c30: 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 7d   from index i2}}
1c40: 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 70 72 61  .    do_test pra
1c50: 67 6d 61 2d 33 2e 34 20 7b 0a 20 20 20 20 20 20  gma-3.4 {.      
1c60: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
1c70: 20 20 41 54 54 41 43 48 20 44 41 54 41 42 41 53    ATTACH DATABAS
1c80: 45 20 27 74 65 73 74 2e 64 62 27 20 41 53 20 74  E 'test.db' AS t
1c90: 32 3b 0a 20 20 20 20 20 20 20 20 50 52 41 47 4d  2;.        PRAGM
1ca0: 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63  A integrity_chec
1cb0: 6b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 20  k.      }.    } 
1cc0: 7b 7b 72 6f 77 69 64 20 31 20 6d 69 73 73 69 6e  {{rowid 1 missin
1cd0: 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d  g from index i2}
1ce0: 20 7b 72 6f 77 69 64 20 32 20 6d 69 73 73 69 6e   {rowid 2 missin
1cf0: 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d  g from index i2}
1d00: 20 7b 77 72 6f 6e 67 20 23 20 6f 66 20 65 6e 74   {wrong # of ent
1d10: 72 69 65 73 20 69 6e 20 69 6e 64 65 78 20 69 32  ries in index i2
1d20: 7d 20 7b 72 6f 77 69 64 20 31 20 6d 69 73 73 69  } {rowid 1 missi
1d30: 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32  ng from index i2
1d40: 7d 20 7b 72 6f 77 69 64 20 32 20 6d 69 73 73 69  } {rowid 2 missi
1d50: 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32  ng from index i2
1d60: 7d 20 7b 77 72 6f 6e 67 20 23 20 6f 66 20 65 6e  } {wrong # of en
1d70: 74 72 69 65 73 20 69 6e 20 69 6e 64 65 78 20 69  tries in index i
1d80: 32 7d 7d 0a 20 20 20 20 64 6f 5f 74 65 73 74 20  2}}.    do_test 
1d90: 70 72 61 67 6d 61 2d 33 2e 35 20 7b 0a 20 20 20  pragma-3.5 {.   
1da0: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
1db0: 20 20 20 20 20 50 52 41 47 4d 41 20 69 6e 74 65       PRAGMA inte
1dc0: 67 72 69 74 79 5f 63 68 65 63 6b 3d 34 0a 20 20  grity_check=4.  
1dd0: 20 20 20 20 7d 0a 20 20 20 20 7d 20 7b 7b 72 6f      }.    } {{ro
1de0: 77 69 64 20 31 20 6d 69 73 73 69 6e 67 20 66 72  wid 1 missing fr
1df0: 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b 72 6f  om index i2} {ro
1e00: 77 69 64 20 32 20 6d 69 73 73 69 6e 67 20 66 72  wid 2 missing fr
1e10: 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b 77 72  om index i2} {wr
1e20: 6f 6e 67 20 23 20 6f 66 20 65 6e 74 72 69 65 73  ong # of entries
1e30: 20 69 6e 20 69 6e 64 65 78 20 69 32 7d 20 7b 72   in index i2} {r
1e40: 6f 77 69 64 20 31 20 6d 69 73 73 69 6e 67 20 66  owid 1 missing f
1e50: 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 7d 0a 20  rom index i2}}. 
1e60: 20 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d     do_test pragm
1e70: 61 2d 33 2e 36 20 7b 0a 20 20 20 20 20 20 65 78  a-3.6 {.      ex
1e80: 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 20 20  ecsql {.        
1e90: 50 52 41 47 4d 41 20 69 6e 74 65 67 72 69 74 79  PRAGMA integrity
1ea0: 5f 63 68 65 63 6b 3d 78 79 7a 0a 20 20 20 20 20  _check=xyz.     
1eb0: 20 7d 0a 20 20 20 20 7d 20 7b 7b 72 6f 77 69 64   }.    } {{rowid
1ec0: 20 31 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20   1 missing from 
1ed0: 69 6e 64 65 78 20 69 32 7d 20 7b 72 6f 77 69 64  index i2} {rowid
1ee0: 20 32 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20   2 missing from 
1ef0: 69 6e 64 65 78 20 69 32 7d 20 7b 77 72 6f 6e 67  index i2} {wrong
1f00: 20 23 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e   # of entries in
1f10: 20 69 6e 64 65 78 20 69 32 7d 20 7b 72 6f 77 69   index i2} {rowi
1f20: 64 20 31 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d  d 1 missing from
1f30: 20 69 6e 64 65 78 20 69 32 7d 20 7b 72 6f 77 69   index i2} {rowi
1f40: 64 20 32 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d  d 2 missing from
1f50: 20 69 6e 64 65 78 20 69 32 7d 20 7b 77 72 6f 6e   index i2} {wron
1f60: 67 20 23 20 6f 66 20 65 6e 74 72 69 65 73 20 69  g # of entries i
1f70: 6e 20 69 6e 64 65 78 20 69 32 7d 7d 0a 20 20 20  n index i2}}.   
1f80: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
1f90: 33 2e 37 20 7b 0a 20 20 20 20 20 20 65 78 65 63  3.7 {.      exec
1fa0: 73 71 6c 20 7b 0a 20 20 20 20 20 20 20 20 50 52  sql {.        PR
1fb0: 41 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63  AGMA integrity_c
1fc0: 68 65 63 6b 3d 30 0a 20 20 20 20 20 20 7d 0a 20  heck=0.      }. 
1fd0: 20 20 20 7d 20 7b 7b 72 6f 77 69 64 20 31 20 6d     } {{rowid 1 m
1fe0: 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65  issing from inde
1ff0: 78 20 69 32 7d 20 7b 72 6f 77 69 64 20 32 20 6d  x i2} {rowid 2 m
2000: 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65  issing from inde
2010: 78 20 69 32 7d 20 7b 77 72 6f 6e 67 20 23 20 6f  x i2} {wrong # o
2020: 66 20 65 6e 74 72 69 65 73 20 69 6e 20 69 6e 64  f entries in ind
2030: 65 78 20 69 32 7d 20 7b 72 6f 77 69 64 20 31 20  ex i2} {rowid 1 
2040: 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64  missing from ind
2050: 65 78 20 69 32 7d 20 7b 72 6f 77 69 64 20 32 20  ex i2} {rowid 2 
2060: 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64  missing from ind
2070: 65 78 20 69 32 7d 20 7b 77 72 6f 6e 67 20 23 20  ex i2} {wrong # 
2080: 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 69 6e  of entries in in
2090: 64 65 78 20 69 32 7d 7d 0a 20 20 0a 20 20 20 20  dex i2}}.  .    
20a0: 23 20 41 64 64 20 61 64 64 69 74 69 6f 6e 61 6c  # Add additional
20b0: 20 63 6f 72 72 75 70 74 69 6f 6e 20 62 79 20 61   corruption by a
20c0: 70 70 65 6e 64 69 6e 67 20 75 6e 75 73 65 64 20  ppending unused 
20d0: 70 61 67 65 73 20 74 6f 20 74 68 65 20 65 6e 64  pages to the end
20e0: 20 6f 66 0a 20 20 20 20 23 20 74 68 65 20 64 61   of.    # the da
20f0: 74 61 62 61 73 65 20 66 69 6c 65 20 74 65 73 74  tabase file test
2100: 65 72 72 2e 64 62 0a 20 20 20 20 23 0a 20 20 20  err.db.    #.   
2110: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
2120: 33 2e 38 20 7b 0a 20 20 20 20 20 20 65 78 65 63  3.8 {.      exec
2130: 73 71 6c 20 7b 44 45 54 41 43 48 20 74 32 7d 0a  sql {DETACH t2}.
2140: 20 20 20 20 20 20 66 6f 72 63 65 64 65 6c 65 74        forcedelet
2150: 65 20 74 65 73 74 65 72 72 2e 64 62 20 74 65 73  e testerr.db tes
2160: 74 65 72 72 2e 64 62 2d 6a 6f 75 72 6e 61 6c 0a  terr.db-journal.
2170: 20 20 20 20 20 20 73 65 74 20 6f 75 74 20 5b 6f        set out [o
2180: 70 65 6e 20 74 65 73 74 65 72 72 2e 64 62 20 77  pen testerr.db w
2190: 5d 0a 20 20 20 20 20 20 66 63 6f 6e 66 69 67 75  ].      fconfigu
21a0: 72 65 20 24 6f 75 74 20 2d 74 72 61 6e 73 6c 61  re $out -transla
21b0: 74 69 6f 6e 20 62 69 6e 61 72 79 0a 20 20 20 20  tion binary.    
21c0: 20 20 73 65 74 20 69 6e 20 5b 6f 70 65 6e 20 74    set in [open t
21d0: 65 73 74 2e 64 62 20 72 5d 0a 20 20 20 20 20 20  est.db r].      
21e0: 66 63 6f 6e 66 69 67 75 72 65 20 24 69 6e 20 2d  fconfigure $in -
21f0: 74 72 61 6e 73 6c 61 74 69 6f 6e 20 62 69 6e 61  translation bina
2200: 72 79 0a 20 20 20 20 20 20 70 75 74 73 20 2d 6e  ry.      puts -n
2210: 6f 6e 65 77 6c 69 6e 65 20 24 6f 75 74 20 5b 72  onewline $out [r
2220: 65 61 64 20 24 69 6e 5d 0a 20 20 20 20 20 20 73  ead $in].      s
2230: 65 65 6b 20 24 69 6e 20 30 0a 20 20 20 20 20 20  eek $in 0.      
2240: 70 75 74 73 20 2d 6e 6f 6e 65 77 6c 69 6e 65 20  puts -nonewline 
2250: 24 6f 75 74 20 5b 72 65 61 64 20 24 69 6e 5d 0a  $out [read $in].
2260: 20 20 20 20 20 20 63 6c 6f 73 65 20 24 69 6e 0a        close $in.
2270: 20 20 20 20 20 20 63 6c 6f 73 65 20 24 6f 75 74        close $out
2280: 0a 20 20 20 20 20 20 68 65 78 69 6f 5f 77 72 69  .      hexio_wri
2290: 74 65 20 74 65 73 74 65 72 72 2e 64 62 20 32 38  te testerr.db 28
22a0: 20 30 30 30 30 30 30 30 30 0a 20 20 20 20 20 20   00000000.      
22b0: 65 78 65 63 73 71 6c 20 7b 52 45 49 4e 44 45 58  execsql {REINDEX
22c0: 20 74 32 7d 0a 20 20 20 20 20 20 65 78 65 63 73   t2}.      execs
22d0: 71 6c 20 7b 50 52 41 47 4d 41 20 69 6e 74 65 67  ql {PRAGMA integ
22e0: 72 69 74 79 5f 63 68 65 63 6b 7d 0a 20 20 20 20  rity_check}.    
22f0: 7d 20 7b 6f 6b 7d 0a 20 20 20 20 64 6f 5f 74 65  } {ok}.    do_te
2300: 73 74 20 70 72 61 67 6d 61 2d 33 2e 38 2e 31 20  st pragma-3.8.1 
2310: 7b 0a 20 20 20 20 20 20 65 78 65 63 73 71 6c 20  {.      execsql 
2320: 7b 50 52 41 47 4d 41 20 71 75 69 63 6b 5f 63 68  {PRAGMA quick_ch
2330: 65 63 6b 7d 0a 20 20 20 20 7d 20 7b 6f 6b 7d 0a  eck}.    } {ok}.
2340: 20 20 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67      do_test prag
2350: 6d 61 2d 33 2e 38 2e 32 20 7b 0a 20 20 20 20 20  ma-3.8.2 {.     
2360: 20 65 78 65 63 73 71 6c 20 7b 50 52 41 47 4d 41   execsql {PRAGMA
2370: 20 51 55 49 43 4b 5f 43 48 45 43 4b 7d 0a 20 20   QUICK_CHECK}.  
2380: 20 20 7d 20 7b 6f 6b 7d 0a 20 20 20 20 64 6f 5f    } {ok}.    do_
2390: 74 65 73 74 20 70 72 61 67 6d 61 2d 33 2e 39 20  test pragma-3.9 
23a0: 7b 0a 20 20 20 20 20 20 65 78 65 63 73 71 6c 20  {.      execsql 
23b0: 7b 0a 20 20 20 20 20 20 20 20 41 54 54 41 43 48  {.        ATTACH
23c0: 20 27 74 65 73 74 65 72 72 2e 64 62 27 20 41 53   'testerr.db' AS
23d0: 20 74 32 3b 0a 20 20 20 20 20 20 20 20 50 52 41   t2;.        PRA
23e0: 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68  GMA integrity_ch
23f0: 65 63 6b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  eck.      }.    
2400: 7d 20 7b 7b 2a 2a 2a 20 69 6e 20 64 61 74 61 62  } {{*** in datab
2410: 61 73 65 20 74 32 20 2a 2a 2a 0a 50 61 67 65 20  ase t2 ***.Page 
2420: 34 20 69 73 20 6e 65 76 65 72 20 75 73 65 64 0a  4 is never used.
2430: 50 61 67 65 20 35 20 69 73 20 6e 65 76 65 72 20  Page 5 is never 
2440: 75 73 65 64 0a 50 61 67 65 20 36 20 69 73 20 6e  used.Page 6 is n
2450: 65 76 65 72 20 75 73 65 64 7d 20 7b 72 6f 77 69  ever used} {rowi
2460: 64 20 31 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d  d 1 missing from
2470: 20 69 6e 64 65 78 20 69 32 7d 20 7b 72 6f 77 69   index i2} {rowi
2480: 64 20 32 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d  d 2 missing from
2490: 20 69 6e 64 65 78 20 69 32 7d 20 7b 77 72 6f 6e   index i2} {wron
24a0: 67 20 23 20 6f 66 20 65 6e 74 72 69 65 73 20 69  g # of entries i
24b0: 6e 20 69 6e 64 65 78 20 69 32 7d 7d 0a 20 20 20  n index i2}}.   
24c0: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
24d0: 33 2e 31 30 20 7b 0a 20 20 20 20 20 20 65 78 65  3.10 {.      exe
24e0: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 20 20 50  csql {.        P
24f0: 52 41 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f  RAGMA integrity_
2500: 63 68 65 63 6b 3d 31 0a 20 20 20 20 20 20 7d 0a  check=1.      }.
2510: 20 20 20 20 7d 20 7b 7b 2a 2a 2a 20 69 6e 20 64      } {{*** in d
2520: 61 74 61 62 61 73 65 20 74 32 20 2a 2a 2a 0a 50  atabase t2 ***.P
2530: 61 67 65 20 34 20 69 73 20 6e 65 76 65 72 20 75  age 4 is never u
2540: 73 65 64 7d 7d 0a 20 20 20 20 64 6f 5f 74 65 73  sed}}.    do_tes
2550: 74 20 70 72 61 67 6d 61 2d 33 2e 31 31 20 7b 0a  t pragma-3.11 {.
2560: 20 20 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a        execsql {.
2570: 20 20 20 20 20 20 20 20 50 52 41 47 4d 41 20 69          PRAGMA i
2580: 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 3d 35  ntegrity_check=5
2590: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 20 7b  .      }.    } {
25a0: 7b 2a 2a 2a 20 69 6e 20 64 61 74 61 62 61 73 65  {*** in database
25b0: 20 74 32 20 2a 2a 2a 0a 50 61 67 65 20 34 20 69   t2 ***.Page 4 i
25c0: 73 20 6e 65 76 65 72 20 75 73 65 64 0a 50 61 67  s never used.Pag
25d0: 65 20 35 20 69 73 20 6e 65 76 65 72 20 75 73 65  e 5 is never use
25e0: 64 0a 50 61 67 65 20 36 20 69 73 20 6e 65 76 65  d.Page 6 is neve
25f0: 72 20 75 73 65 64 7d 20 7b 72 6f 77 69 64 20 31  r used} {rowid 1
2600: 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e   missing from in
2610: 64 65 78 20 69 32 7d 20 7b 72 6f 77 69 64 20 32  dex i2} {rowid 2
2620: 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e   missing from in
2630: 64 65 78 20 69 32 7d 7d 0a 20 20 20 20 64 6f 5f  dex i2}}.    do_
2640: 74 65 73 74 20 70 72 61 67 6d 61 2d 33 2e 31 32  test pragma-3.12
2650: 20 7b 0a 20 20 20 20 20 20 65 78 65 63 73 71 6c   {.      execsql
2660: 20 7b 0a 20 20 20 20 20 20 20 20 50 52 41 47 4d   {.        PRAGM
2670: 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63  A integrity_chec
2680: 6b 3d 34 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  k=4.      }.    
2690: 7d 20 7b 7b 2a 2a 2a 20 69 6e 20 64 61 74 61 62  } {{*** in datab
26a0: 61 73 65 20 74 32 20 2a 2a 2a 0a 50 61 67 65 20  ase t2 ***.Page 
26b0: 34 20 69 73 20 6e 65 76 65 72 20 75 73 65 64 0a  4 is never used.
26c0: 50 61 67 65 20 35 20 69 73 20 6e 65 76 65 72 20  Page 5 is never 
26d0: 75 73 65 64 0a 50 61 67 65 20 36 20 69 73 20 6e  used.Page 6 is n
26e0: 65 76 65 72 20 75 73 65 64 7d 20 7b 72 6f 77 69  ever used} {rowi
26f0: 64 20 31 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d  d 1 missing from
2700: 20 69 6e 64 65 78 20 69 32 7d 7d 0a 20 20 20 20   index i2}}.    
2710: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 33  do_test pragma-3
2720: 2e 31 33 20 7b 0a 20 20 20 20 20 20 65 78 65 63  .13 {.      exec
2730: 73 71 6c 20 7b 0a 20 20 20 20 20 20 20 20 50 52  sql {.        PR
2740: 41 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63  AGMA integrity_c
2750: 68 65 63 6b 3d 33 0a 20 20 20 20 20 20 7d 0a 20  heck=3.      }. 
2760: 20 20 20 7d 20 7b 7b 2a 2a 2a 20 69 6e 20 64 61     } {{*** in da
2770: 74 61 62 61 73 65 20 74 32 20 2a 2a 2a 0a 50 61  tabase t2 ***.Pa
2780: 67 65 20 34 20 69 73 20 6e 65 76 65 72 20 75 73  ge 4 is never us
2790: 65 64 0a 50 61 67 65 20 35 20 69 73 20 6e 65 76  ed.Page 5 is nev
27a0: 65 72 20 75 73 65 64 0a 50 61 67 65 20 36 20 69  er used.Page 6 i
27b0: 73 20 6e 65 76 65 72 20 75 73 65 64 7d 7d 0a 20  s never used}}. 
27c0: 20 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d     do_test pragm
27d0: 61 2d 33 2e 31 34 20 7b 0a 20 20 20 20 20 20 65  a-3.14 {.      e
27e0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 20  xecsql {.       
27f0: 20 50 52 41 47 4d 41 20 69 6e 74 65 67 72 69 74   PRAGMA integrit
2800: 79 5f 63 68 65 63 6b 28 32 29 0a 20 20 20 20 20  y_check(2).     
2810: 20 7d 0a 20 20 20 20 7d 20 7b 7b 2a 2a 2a 20 69   }.    } {{*** i
2820: 6e 20 64 61 74 61 62 61 73 65 20 74 32 20 2a 2a  n database t2 **
2830: 2a 0a 50 61 67 65 20 34 20 69 73 20 6e 65 76 65  *.Page 4 is neve
2840: 72 20 75 73 65 64 0a 50 61 67 65 20 35 20 69 73  r used.Page 5 is
2850: 20 6e 65 76 65 72 20 75 73 65 64 7d 7d 0a 20 20   never used}}.  
2860: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
2870: 2d 33 2e 31 35 20 7b 0a 20 20 20 20 20 20 65 78  -3.15 {.      ex
2880: 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 20 20  ecsql {.        
2890: 41 54 54 41 43 48 20 27 74 65 73 74 65 72 72 2e  ATTACH 'testerr.
28a0: 64 62 27 20 41 53 20 74 33 3b 0a 20 20 20 20 20  db' AS t3;.     
28b0: 20 20 20 50 52 41 47 4d 41 20 69 6e 74 65 67 72     PRAGMA integr
28c0: 69 74 79 5f 63 68 65 63 6b 0a 20 20 20 20 20 20  ity_check.      
28d0: 7d 0a 20 20 20 20 7d 20 7b 7b 2a 2a 2a 20 69 6e  }.    } {{*** in
28e0: 20 64 61 74 61 62 61 73 65 20 74 32 20 2a 2a 2a   database t2 ***
28f0: 0a 50 61 67 65 20 34 20 69 73 20 6e 65 76 65 72  .Page 4 is never
2900: 20 75 73 65 64 0a 50 61 67 65 20 35 20 69 73 20   used.Page 5 is 
2910: 6e 65 76 65 72 20 75 73 65 64 0a 50 61 67 65 20  never used.Page 
2920: 36 20 69 73 20 6e 65 76 65 72 20 75 73 65 64 7d  6 is never used}
2930: 20 7b 72 6f 77 69 64 20 31 20 6d 69 73 73 69 6e   {rowid 1 missin
2940: 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d  g from index i2}
2950: 20 7b 72 6f 77 69 64 20 32 20 6d 69 73 73 69 6e   {rowid 2 missin
2960: 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d  g from index i2}
2970: 20 7b 77 72 6f 6e 67 20 23 20 6f 66 20 65 6e 74   {wrong # of ent
2980: 72 69 65 73 20 69 6e 20 69 6e 64 65 78 20 69 32  ries in index i2
2990: 7d 20 7b 2a 2a 2a 20 69 6e 20 64 61 74 61 62 61  } {*** in databa
29a0: 73 65 20 74 33 20 2a 2a 2a 0a 50 61 67 65 20 34  se t3 ***.Page 4
29b0: 20 69 73 20 6e 65 76 65 72 20 75 73 65 64 0a 50   is never used.P
29c0: 61 67 65 20 35 20 69 73 20 6e 65 76 65 72 20 75  age 5 is never u
29d0: 73 65 64 0a 50 61 67 65 20 36 20 69 73 20 6e 65  sed.Page 6 is ne
29e0: 76 65 72 20 75 73 65 64 7d 20 7b 72 6f 77 69 64  ver used} {rowid
29f0: 20 31 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20   1 missing from 
2a00: 69 6e 64 65 78 20 69 32 7d 20 7b 72 6f 77 69 64  index i2} {rowid
2a10: 20 32 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20   2 missing from 
2a20: 69 6e 64 65 78 20 69 32 7d 20 7b 77 72 6f 6e 67  index i2} {wrong
2a30: 20 23 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e   # of entries in
2a40: 20 69 6e 64 65 78 20 69 32 7d 7d 0a 20 20 20 20   index i2}}.    
2a50: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 33  do_test pragma-3
2a60: 2e 31 36 20 7b 0a 20 20 20 20 20 20 65 78 65 63  .16 {.      exec
2a70: 73 71 6c 20 7b 0a 20 20 20 20 20 20 20 20 50 52  sql {.        PR
2a80: 41 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63  AGMA integrity_c
2a90: 68 65 63 6b 28 31 30 29 0a 20 20 20 20 20 20 7d  heck(10).      }
2aa0: 0a 20 20 20 20 7d 20 7b 7b 2a 2a 2a 20 69 6e 20  .    } {{*** in 
2ab0: 64 61 74 61 62 61 73 65 20 74 32 20 2a 2a 2a 0a  database t2 ***.
2ac0: 50 61 67 65 20 34 20 69 73 20 6e 65 76 65 72 20  Page 4 is never 
2ad0: 75 73 65 64 0a 50 61 67 65 20 35 20 69 73 20 6e  used.Page 5 is n
2ae0: 65 76 65 72 20 75 73 65 64 0a 50 61 67 65 20 36  ever used.Page 6
2af0: 20 69 73 20 6e 65 76 65 72 20 75 73 65 64 7d 20   is never used} 
2b00: 7b 72 6f 77 69 64 20 31 20 6d 69 73 73 69 6e 67  {rowid 1 missing
2b10: 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20   from index i2} 
2b20: 7b 72 6f 77 69 64 20 32 20 6d 69 73 73 69 6e 67  {rowid 2 missing
2b30: 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20   from index i2} 
2b40: 7b 77 72 6f 6e 67 20 23 20 6f 66 20 65 6e 74 72  {wrong # of entr
2b50: 69 65 73 20 69 6e 20 69 6e 64 65 78 20 69 32 7d  ies in index i2}
2b60: 20 7b 2a 2a 2a 20 69 6e 20 64 61 74 61 62 61 73   {*** in databas
2b70: 65 20 74 33 20 2a 2a 2a 0a 50 61 67 65 20 34 20  e t3 ***.Page 4 
2b80: 69 73 20 6e 65 76 65 72 20 75 73 65 64 0a 50 61  is never used.Pa
2b90: 67 65 20 35 20 69 73 20 6e 65 76 65 72 20 75 73  ge 5 is never us
2ba0: 65 64 0a 50 61 67 65 20 36 20 69 73 20 6e 65 76  ed.Page 6 is nev
2bb0: 65 72 20 75 73 65 64 7d 20 7b 72 6f 77 69 64 20  er used} {rowid 
2bc0: 31 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69  1 missing from i
2bd0: 6e 64 65 78 20 69 32 7d 7d 0a 20 20 20 20 64 6f  ndex i2}}.    do
2be0: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 33 2e 31  _test pragma-3.1
2bf0: 37 20 7b 0a 20 20 20 20 20 20 65 78 65 63 73 71  7 {.      execsq
2c00: 6c 20 7b 0a 20 20 20 20 20 20 20 20 50 52 41 47  l {.        PRAG
2c10: 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65  MA integrity_che
2c20: 63 6b 3d 38 0a 20 20 20 20 20 20 7d 0a 20 20 20  ck=8.      }.   
2c30: 20 7d 20 7b 7b 2a 2a 2a 20 69 6e 20 64 61 74 61   } {{*** in data
2c40: 62 61 73 65 20 74 32 20 2a 2a 2a 0a 50 61 67 65  base t2 ***.Page
2c50: 20 34 20 69 73 20 6e 65 76 65 72 20 75 73 65 64   4 is never used
2c60: 0a 50 61 67 65 20 35 20 69 73 20 6e 65 76 65 72  .Page 5 is never
2c70: 20 75 73 65 64 0a 50 61 67 65 20 36 20 69 73 20   used.Page 6 is 
2c80: 6e 65 76 65 72 20 75 73 65 64 7d 20 7b 72 6f 77  never used} {row
2c90: 69 64 20 31 20 6d 69 73 73 69 6e 67 20 66 72 6f  id 1 missing fro
2ca0: 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b 72 6f 77  m index i2} {row
2cb0: 69 64 20 32 20 6d 69 73 73 69 6e 67 20 66 72 6f  id 2 missing fro
2cc0: 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b 77 72 6f  m index i2} {wro
2cd0: 6e 67 20 23 20 6f 66 20 65 6e 74 72 69 65 73 20  ng # of entries 
2ce0: 69 6e 20 69 6e 64 65 78 20 69 32 7d 20 7b 2a 2a  in index i2} {**
2cf0: 2a 20 69 6e 20 64 61 74 61 62 61 73 65 20 74 33  * in database t3
2d00: 20 2a 2a 2a 0a 50 61 67 65 20 34 20 69 73 20 6e   ***.Page 4 is n
2d10: 65 76 65 72 20 75 73 65 64 0a 50 61 67 65 20 35  ever used.Page 5
2d20: 20 69 73 20 6e 65 76 65 72 20 75 73 65 64 7d 7d   is never used}}
2d30: 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 70 72 61  .    do_test pra
2d40: 67 6d 61 2d 33 2e 31 38 20 7b 0a 20 20 20 20 20  gma-3.18 {.     
2d50: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20   execsql {.     
2d60: 20 20 20 50 52 41 47 4d 41 20 69 6e 74 65 67 72     PRAGMA integr
2d70: 69 74 79 5f 63 68 65 63 6b 3d 34 0a 20 20 20 20  ity_check=4.    
2d80: 20 20 7d 0a 20 20 20 20 7d 20 7b 7b 2a 2a 2a 20    }.    } {{*** 
2d90: 69 6e 20 64 61 74 61 62 61 73 65 20 74 32 20 2a  in database t2 *
2da0: 2a 2a 0a 50 61 67 65 20 34 20 69 73 20 6e 65 76  **.Page 4 is nev
2db0: 65 72 20 75 73 65 64 0a 50 61 67 65 20 35 20 69  er used.Page 5 i
2dc0: 73 20 6e 65 76 65 72 20 75 73 65 64 0a 50 61 67  s never used.Pag
2dd0: 65 20 36 20 69 73 20 6e 65 76 65 72 20 75 73 65  e 6 is never use
2de0: 64 7d 20 7b 72 6f 77 69 64 20 31 20 6d 69 73 73  d} {rowid 1 miss
2df0: 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69  ing from index i
2e00: 32 7d 7d 0a 20 20 7d 0a 20 20 64 6f 5f 74 65 73  2}}.  }.  do_tes
2e10: 74 20 70 72 61 67 6d 61 2d 33 2e 31 39 20 7b 0a  t pragma-3.19 {.
2e20: 20 20 20 20 63 61 74 63 68 20 7b 64 62 20 63 6c      catch {db cl
2e30: 6f 73 65 7d 0a 20 20 20 20 66 6f 72 63 65 64 65  ose}.    forcede
2e40: 6c 65 74 65 20 74 65 73 74 2e 64 62 20 74 65 73  lete test.db tes
2e50: 74 2e 64 62 2d 6a 6f 75 72 6e 61 6c 0a 20 20 20  t.db-journal.   
2e60: 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74   sqlite3 db test
2e70: 2e 64 62 0a 20 20 20 20 64 62 20 65 76 61 6c 20  .db.    db eval 
2e80: 7b 50 52 41 47 4d 41 20 69 6e 74 65 67 72 69 74  {PRAGMA integrit
2e90: 79 5f 63 68 65 63 6b 7d 0a 20 20 7d 20 7b 6f 6b  y_check}.  } {ok
2ea0: 7d 0a 7d 0a 23 65 78 69 74 0a 0a 23 20 54 65 73  }.}.#exit..# Tes
2eb0: 74 20 6d 6f 64 69 66 79 69 6e 67 20 74 68 65 20  t modifying the 
2ec0: 63 61 63 68 65 5f 73 69 7a 65 20 6f 66 20 61 6e  cache_size of an
2ed0: 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
2ee0: 73 65 2e 0a 69 66 63 61 70 61 62 6c 65 20 70 61  se..ifcapable pa
2ef0: 67 65 72 5f 70 72 61 67 6d 61 73 26 26 61 74 74  ger_pragmas&&att
2f00: 61 63 68 20 7b 0a 64 6f 5f 74 65 73 74 20 70 72  ach {.do_test pr
2f10: 61 67 6d 61 2d 34 2e 31 20 7b 0a 20 20 65 78 65  agma-4.1 {.  exe
2f20: 63 73 71 6c 20 7b 0a 20 20 20 20 41 54 54 41 43  csql {.    ATTAC
2f30: 48 20 27 74 65 73 74 32 2e 64 62 27 20 41 53 20  H 'test2.db' AS 
2f40: 61 75 78 3b 0a 20 20 20 20 70 72 61 67 6d 61 20  aux;.    pragma 
2f50: 61 75 78 2e 63 61 63 68 65 5f 73 69 7a 65 3b 0a  aux.cache_size;.
2f60: 20 20 20 20 70 72 61 67 6d 61 20 61 75 78 2e 64      pragma aux.d
2f70: 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a  efault_cache_siz
2f80: 65 3b 0a 20 20 7d 20 0a 7d 20 5b 6c 69 73 74 20  e;.  } .} [list 
2f90: 24 44 46 4c 54 5f 43 41 43 48 45 5f 53 5a 20 24  $DFLT_CACHE_SZ $
2fa0: 44 46 4c 54 5f 43 41 43 48 45 5f 53 5a 5d 0a 64  DFLT_CACHE_SZ].d
2fb0: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 34 2e  o_test pragma-4.
2fc0: 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  2 {.  execsql {.
2fd0: 20 20 20 20 70 72 61 67 6d 61 20 61 75 78 2e 63      pragma aux.c
2fe0: 61 63 68 65 5f 73 69 7a 65 20 3d 20 35 30 3b 0a  ache_size = 50;.
2ff0: 20 20 20 20 70 72 61 67 6d 61 20 61 75 78 2e 63      pragma aux.c
3000: 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 70  ache_size;.    p
3010: 72 61 67 6d 61 20 61 75 78 2e 64 65 66 61 75 6c  ragma aux.defaul
3020: 74 5f 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20  t_cache_size;.  
3030: 7d 20 0a 7d 20 5b 6c 69 73 74 20 35 30 20 24 44  } .} [list 50 $D
3040: 46 4c 54 5f 43 41 43 48 45 5f 53 5a 5d 0a 64 6f  FLT_CACHE_SZ].do
3050: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 34 2e 33  _test pragma-4.3
3060: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
3070: 20 20 20 70 72 61 67 6d 61 20 61 75 78 2e 64 65     pragma aux.de
3080: 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65  fault_cache_size
3090: 20 3d 20 34 35 36 3b 0a 20 20 20 20 70 72 61 67   = 456;.    prag
30a0: 6d 61 20 61 75 78 2e 63 61 63 68 65 5f 73 69 7a  ma aux.cache_siz
30b0: 65 3b 0a 20 20 20 20 70 72 61 67 6d 61 20 61 75  e;.    pragma au
30c0: 78 2e 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f  x.default_cache_
30d0: 73 69 7a 65 3b 0a 20 20 7d 20 0a 7d 20 7b 34 35  size;.  } .} {45
30e0: 36 20 34 35 36 7d 0a 64 6f 5f 74 65 73 74 20 70  6 456}.do_test p
30f0: 72 61 67 6d 61 2d 34 2e 34 20 7b 0a 20 20 65 78  ragma-4.4 {.  ex
3100: 65 63 73 71 6c 20 7b 0a 20 20 20 20 70 72 61 67  ecsql {.    prag
3110: 6d 61 20 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20  ma cache_size;. 
3120: 20 20 20 70 72 61 67 6d 61 20 64 65 66 61 75 6c     pragma defaul
3130: 74 5f 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20  t_cache_size;.  
3140: 7d 20 0a 7d 20 5b 6c 69 73 74 20 24 44 46 4c 54  } .} [list $DFLT
3150: 5f 43 41 43 48 45 5f 53 5a 20 24 44 46 4c 54 5f  _CACHE_SZ $DFLT_
3160: 43 41 43 48 45 5f 53 5a 5d 0a 64 6f 5f 74 65 73  CACHE_SZ].do_tes
3170: 74 20 70 72 61 67 6d 61 2d 34 2e 35 20 7b 0a 20  t pragma-4.5 {. 
3180: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 44   execsql {.    D
3190: 45 54 41 43 48 20 61 75 78 3b 0a 20 20 20 20 41  ETACH aux;.    A
31a0: 54 54 41 43 48 20 27 74 65 73 74 33 2e 64 62 27  TTACH 'test3.db'
31b0: 20 41 53 20 61 75 78 3b 0a 20 20 20 20 70 72 61   AS aux;.    pra
31c0: 67 6d 61 20 61 75 78 2e 63 61 63 68 65 5f 73 69  gma aux.cache_si
31d0: 7a 65 3b 0a 20 20 20 20 70 72 61 67 6d 61 20 61  ze;.    pragma a
31e0: 75 78 2e 64 65 66 61 75 6c 74 5f 63 61 63 68 65  ux.default_cache
31f0: 5f 73 69 7a 65 3b 0a 20 20 7d 20 0a 7d 20 5b 6c  _size;.  } .} [l
3200: 69 73 74 20 24 44 46 4c 54 5f 43 41 43 48 45 5f  ist $DFLT_CACHE_
3210: 53 5a 20 24 44 46 4c 54 5f 43 41 43 48 45 5f 53  SZ $DFLT_CACHE_S
3220: 5a 5d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  Z].do_test pragm
3230: 61 2d 34 2e 36 20 7b 0a 20 20 65 78 65 63 73 71  a-4.6 {.  execsq
3240: 6c 20 7b 0a 20 20 20 20 44 45 54 41 43 48 20 61  l {.    DETACH a
3250: 75 78 3b 0a 20 20 20 20 41 54 54 41 43 48 20 27  ux;.    ATTACH '
3260: 74 65 73 74 32 2e 64 62 27 20 41 53 20 61 75 78  test2.db' AS aux
3270: 3b 0a 20 20 20 20 70 72 61 67 6d 61 20 61 75 78  ;.    pragma aux
3280: 2e 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20  .cache_size;.   
3290: 20 70 72 61 67 6d 61 20 61 75 78 2e 64 65 66 61   pragma aux.defa
32a0: 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65 3b 0a  ult_cache_size;.
32b0: 20 20 7d 20 0a 7d 20 7b 34 35 36 20 34 35 36 7d    } .} {456 456}
32c0: 0a 7d 20 3b 23 20 69 66 63 61 70 61 62 6c 65 20  .} ;# ifcapable 
32d0: 70 61 67 65 72 5f 70 72 61 67 6d 61 73 0a 0a 23  pager_pragmas..#
32e0: 20 54 65 73 74 20 74 68 61 74 20 6d 6f 64 69 66   Test that modif
32f0: 79 69 6e 67 20 74 68 65 20 73 79 6e 63 2d 6c 65  ying the sync-le
3300: 76 65 6c 20 69 6e 20 74 68 65 20 6d 69 64 64 6c  vel in the middl
3310: 65 20 6f 66 20 61 20 74 72 61 6e 73 61 63 74 69  e of a transacti
3320: 6f 6e 20 69 73 0a 23 20 64 69 73 61 6c 6c 6f 77  on is.# disallow
3330: 65 64 2e 0a 69 66 63 61 70 61 62 6c 65 20 70 61  ed..ifcapable pa
3340: 67 65 72 5f 70 72 61 67 6d 61 73 20 7b 0a 64 6f  ger_pragmas {.do
3350: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 35 2e 30  _test pragma-5.0
3360: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
3370: 20 20 20 70 72 61 67 6d 61 20 73 79 6e 63 68 72     pragma synchr
3380: 6f 6e 6f 75 73 3b 0a 20 20 7d 20 0a 7d 20 7b 32  onous;.  } .} {2
3390: 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  }.do_test pragma
33a0: 2d 35 2e 31 20 7b 0a 20 20 63 61 74 63 68 73 71  -5.1 {.  catchsq
33b0: 6c 20 7b 0a 20 20 20 20 42 45 47 49 4e 3b 0a 20  l {.    BEGIN;. 
33c0: 20 20 20 70 72 61 67 6d 61 20 73 79 6e 63 68 72     pragma synchr
33d0: 6f 6e 6f 75 73 20 3d 20 4f 46 46 3b 0a 20 20 7d  onous = OFF;.  }
33e0: 20 0a 7d 20 7b 31 20 7b 53 61 66 65 74 79 20 6c   .} {1 {Safety l
33f0: 65 76 65 6c 20 6d 61 79 20 6e 6f 74 20 62 65 20  evel may not be 
3400: 63 68 61 6e 67 65 64 20 69 6e 73 69 64 65 20 61  changed inside a
3410: 20 74 72 61 6e 73 61 63 74 69 6f 6e 7d 7d 0a 64   transaction}}.d
3420: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 35 2e  o_test pragma-5.
3430: 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  2 {.  execsql {.
3440: 20 20 20 20 70 72 61 67 6d 61 20 73 79 6e 63 68      pragma synch
3450: 72 6f 6e 6f 75 73 3b 0a 20 20 7d 20 0a 7d 20 7b  ronous;.  } .} {
3460: 32 7d 0a 63 61 74 63 68 73 71 6c 20 7b 43 4f 4d  2}.catchsql {COM
3470: 4d 49 54 3b 7d 0a 7d 20 3b 23 20 69 66 63 61 70  MIT;}.} ;# ifcap
3480: 61 62 6c 65 20 70 61 67 65 72 5f 70 72 61 67 6d  able pager_pragm
3490: 61 73 0a 0a 23 20 54 65 73 74 20 73 63 68 65 6d  as..# Test schem
34a0: 61 2d 71 75 65 72 79 20 70 72 61 67 6d 61 73 0a  a-query pragmas.
34b0: 23 0a 69 66 63 61 70 61 62 6c 65 20 73 63 68 65  #.ifcapable sche
34c0: 6d 61 5f 70 72 61 67 6d 61 73 20 7b 0a 69 66 63  ma_pragmas {.ifc
34d0: 61 70 61 62 6c 65 20 74 65 6d 70 64 62 26 26 61  apable tempdb&&a
34e0: 74 74 61 63 68 20 7b 0a 20 20 64 6f 5f 74 65 73  ttach {.  do_tes
34f0: 74 20 70 72 61 67 6d 61 2d 36 2e 31 20 7b 0a 20  t pragma-6.1 {. 
3500: 20 20 20 73 65 74 20 72 65 73 20 7b 7d 0a 20 20     set res {}.  
3510: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
3520: 54 20 2a 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  T * FROM sqlite_
3530: 74 65 6d 70 5f 6d 61 73 74 65 72 7d 0a 20 20 20  temp_master}.   
3540: 20 66 6f 72 65 61 63 68 20 7b 69 64 78 20 6e 61   foreach {idx na
3550: 6d 65 20 66 69 6c 65 7d 20 5b 65 78 65 63 73 71  me file} [execsq
3560: 6c 20 7b 70 72 61 67 6d 61 20 64 61 74 61 62 61  l {pragma databa
3570: 73 65 5f 6c 69 73 74 7d 5d 20 7b 0a 20 20 20 20  se_list}] {.    
3580: 20 20 6c 61 70 70 65 6e 64 20 72 65 73 20 24 69    lappend res $i
3590: 64 78 20 24 6e 61 6d 65 0a 20 20 20 20 7d 0a 20  dx $name.    }. 
35a0: 20 20 20 73 65 74 20 72 65 73 0a 20 20 7d 20 7b     set res.  } {
35b0: 30 20 6d 61 69 6e 20 31 20 74 65 6d 70 20 32 20  0 main 1 temp 2 
35c0: 61 75 78 7d 0a 7d 0a 64 6f 5f 74 65 73 74 20 70  aux}.}.do_test p
35d0: 72 61 67 6d 61 2d 36 2e 32 20 7b 0a 20 20 65 78  ragma-6.2 {.  ex
35e0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41  ecsql {.    CREA
35f0: 54 45 20 54 41 42 4c 45 20 74 32 28 61 2c 62 2c  TE TABLE t2(a,b,
3600: 63 29 3b 0a 20 20 20 20 70 72 61 67 6d 61 20 74  c);.    pragma t
3610: 61 62 6c 65 5f 69 6e 66 6f 28 74 32 29 0a 20 20  able_info(t2).  
3620: 7d 0a 7d 20 7b 30 20 61 20 7b 7d 20 30 20 7b 7d  }.} {0 a {} 0 {}
3630: 20 30 20 31 20 62 20 7b 7d 20 30 20 7b 7d 20 30   0 1 b {} 0 {} 0
3640: 20 32 20 63 20 7b 7d 20 30 20 7b 7d 20 30 7d 0a   2 c {} 0 {} 0}.
3650: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 36  do_test pragma-6
3660: 2e 32 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c  .2.1 {.  execsql
3670: 20 7b 0a 20 20 20 20 70 72 61 67 6d 61 20 74 61   {.    pragma ta
3680: 62 6c 65 5f 69 6e 66 6f 3b 0a 20 20 7d 0a 7d 20  ble_info;.  }.} 
3690: 7b 7d 0a 64 62 20 6e 75 6c 6c 76 61 6c 75 65 20  {}.db nullvalue 
36a0: 3c 3c 4e 55 4c 4c 3e 3e 0a 64 6f 5f 74 65 73 74  <<NULL>>.do_test
36b0: 20 70 72 61 67 6d 61 2d 36 2e 32 2e 32 20 7b 0a   pragma-6.2.2 {.
36c0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
36d0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 35 28  CREATE TABLE t5(
36e0: 0a 20 20 20 20 20 20 61 20 54 45 58 54 20 44 45  .      a TEXT DE
36f0: 46 41 55 4c 54 20 43 55 52 52 45 4e 54 5f 54 49  FAULT CURRENT_TI
3700: 4d 45 53 54 41 4d 50 2c 20 0a 20 20 20 20 20 20  MESTAMP, .      
3710: 62 20 44 45 46 41 55 4c 54 20 28 35 2b 33 29 2c  b DEFAULT (5+3),
3720: 0a 20 20 20 20 20 20 63 20 54 45 58 54 2c 0a 20  .      c TEXT,. 
3730: 20 20 20 20 20 64 20 49 4e 54 45 47 45 52 20 44       d INTEGER D
3740: 45 46 41 55 4c 54 20 4e 55 4c 4c 2c 0a 20 20 20  EFAULT NULL,.   
3750: 20 20 20 65 20 54 45 58 54 20 44 45 46 41 55 4c     e TEXT DEFAUL
3760: 54 20 27 27 0a 20 20 20 20 29 3b 0a 20 20 20 20  T ''.    );.    
3770: 50 52 41 47 4d 41 20 74 61 62 6c 65 5f 69 6e 66  PRAGMA table_inf
3780: 6f 28 74 35 29 3b 0a 20 20 7d 0a 7d 20 7b 30 20  o(t5);.  }.} {0 
3790: 61 20 54 45 58 54 20 30 20 43 55 52 52 45 4e 54  a TEXT 0 CURRENT
37a0: 5f 54 49 4d 45 53 54 41 4d 50 20 30 20 31 20 62  _TIMESTAMP 0 1 b
37b0: 20 7b 7d 20 30 20 35 2b 33 20 30 20 32 20 63 20   {} 0 5+3 0 2 c 
37c0: 54 45 58 54 20 30 20 3c 3c 4e 55 4c 4c 3e 3e 20  TEXT 0 <<NULL>> 
37d0: 30 20 33 20 64 20 49 4e 54 45 47 45 52 20 30 20  0 3 d INTEGER 0 
37e0: 4e 55 4c 4c 20 30 20 34 20 65 20 54 45 58 54 20  NULL 0 4 e TEXT 
37f0: 30 20 27 27 20 30 7d 0a 64 62 20 6e 75 6c 6c 76  0 '' 0}.db nullv
3800: 61 6c 75 65 20 7b 7d 0a 69 66 63 61 70 61 62 6c  alue {}.ifcapabl
3810: 65 20 7b 66 6f 72 65 69 67 6e 6b 65 79 7d 20 7b  e {foreignkey} {
3820: 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .  do_test pragm
3830: 61 2d 36 2e 33 2e 31 20 7b 0a 20 20 20 20 65 78  a-6.3.1 {.    ex
3840: 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 43 52  ecsql {.      CR
3850: 45 41 54 45 20 54 41 42 4c 45 20 74 33 28 61 20  EATE TABLE t3(a 
3860: 69 6e 74 20 72 65 66 65 72 65 6e 63 65 73 20 74  int references t
3870: 32 28 62 29 2c 20 62 20 55 4e 49 51 55 45 29 3b  2(b), b UNIQUE);
3880: 0a 20 20 20 20 20 20 70 72 61 67 6d 61 20 66 6f  .      pragma fo
3890: 72 65 69 67 6e 5f 6b 65 79 5f 6c 69 73 74 28 74  reign_key_list(t
38a0: 33 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 30  3);.    }.  } {0
38b0: 20 30 20 74 32 20 61 20 62 20 7b 4e 4f 20 41 43   0 t2 a b {NO AC
38c0: 54 49 4f 4e 7d 20 7b 4e 4f 20 41 43 54 49 4f 4e  TION} {NO ACTION
38d0: 7d 20 4e 4f 4e 45 7d 0a 20 20 64 6f 5f 74 65 73  } NONE}.  do_tes
38e0: 74 20 70 72 61 67 6d 61 2d 36 2e 33 2e 32 20 7b  t pragma-6.3.2 {
38f0: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
3900: 20 20 20 20 20 70 72 61 67 6d 61 20 66 6f 72 65       pragma fore
3910: 69 67 6e 5f 6b 65 79 5f 6c 69 73 74 3b 0a 20 20  ign_key_list;.  
3920: 20 20 7d 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f    }.  } {}.  do_
3930: 74 65 73 74 20 70 72 61 67 6d 61 2d 36 2e 33 2e  test pragma-6.3.
3940: 33 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  3 {.    execsql 
3950: 7b 0a 20 20 20 20 20 20 70 72 61 67 6d 61 20 66  {.      pragma f
3960: 6f 72 65 69 67 6e 5f 6b 65 79 5f 6c 69 73 74 28  oreign_key_list(
3970: 74 33 5f 62 6f 67 75 73 29 3b 0a 20 20 20 20 7d  t3_bogus);.    }
3980: 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65 73  .  } {}.  do_tes
3990: 74 20 70 72 61 67 6d 61 2d 36 2e 33 2e 34 20 7b  t pragma-6.3.4 {
39a0: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
39b0: 20 20 20 20 20 70 72 61 67 6d 61 20 66 6f 72 65       pragma fore
39c0: 69 67 6e 5f 6b 65 79 5f 6c 69 73 74 28 74 35 29  ign_key_list(t5)
39d0: 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 7d 0a 20  ;.    }.  } {}. 
39e0: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
39f0: 36 2e 34 20 7b 0a 20 20 20 20 65 78 65 63 73 71  6.4 {.    execsq
3a00: 6c 20 7b 0a 20 20 20 20 20 20 70 72 61 67 6d 61  l {.      pragma
3a10: 20 69 6e 64 65 78 5f 6c 69 73 74 28 74 33 29 3b   index_list(t3);
3a20: 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 30 20 73 71  .    }.  } {0 sq
3a30: 6c 69 74 65 5f 61 75 74 6f 69 6e 64 65 78 5f 74  lite_autoindex_t
3a40: 33 5f 31 20 31 7d 0a 7d 0a 69 66 63 61 70 61 62  3_1 1}.}.ifcapab
3a50: 6c 65 20 7b 21 66 6f 72 65 69 67 6e 6b 65 79 7d  le {!foreignkey}
3a60: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 43 52   {.  execsql {CR
3a70: 45 41 54 45 20 54 41 42 4c 45 20 74 33 28 61 2c  EATE TABLE t3(a,
3a80: 62 20 55 4e 49 51 55 45 29 7d 0a 7d 0a 64 6f 5f  b UNIQUE)}.}.do_
3a90: 74 65 73 74 20 70 72 61 67 6d 61 2d 36 2e 35 2e  test pragma-6.5.
3aa0: 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  1 {.  execsql {.
3ab0: 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45 58      CREATE INDEX
3ac0: 20 74 33 69 31 20 4f 4e 20 74 33 28 61 2c 62 29   t3i1 ON t3(a,b)
3ad0: 3b 0a 20 20 20 20 70 72 61 67 6d 61 20 69 6e 64  ;.    pragma ind
3ae0: 65 78 5f 69 6e 66 6f 28 74 33 69 31 29 3b 0a 20  ex_info(t3i1);. 
3af0: 20 7d 0a 7d 20 7b 30 20 30 20 61 20 31 20 31 20   }.} {0 0 a 1 1 
3b00: 62 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  b}.do_test pragm
3b10: 61 2d 36 2e 35 2e 32 20 7b 0a 20 20 65 78 65 63  a-6.5.2 {.  exec
3b20: 73 71 6c 20 7b 0a 20 20 20 20 70 72 61 67 6d 61  sql {.    pragma
3b30: 20 69 6e 64 65 78 5f 69 6e 66 6f 28 74 33 69 31   index_info(t3i1
3b40: 5f 62 6f 67 75 73 29 3b 0a 20 20 7d 0a 7d 20 7b  _bogus);.  }.} {
3b50: 7d 0a 0a 69 66 63 61 70 61 62 6c 65 20 74 65 6d  }..ifcapable tem
3b60: 70 64 62 20 7b 0a 20 20 23 20 54 65 73 74 20 66  pdb {.  # Test f
3b70: 6f 72 20 74 69 63 6b 65 74 20 23 33 33 32 30 2e  or ticket #3320.
3b80: 20 57 68 65 6e 20 61 20 74 65 6d 70 20 74 61 62   When a temp tab
3b90: 6c 65 20 6f 66 20 74 68 65 20 73 61 6d 65 20 6e  le of the same n
3ba0: 61 6d 65 20 65 78 69 73 74 73 2c 20 6d 61 6b 65  ame exists, make
3bb0: 0a 20 20 23 20 73 75 72 65 20 74 68 65 20 73 63  .  # sure the sc
3bc0: 68 65 6d 61 20 6f 66 20 74 68 65 20 6d 61 69 6e  hema of the main
3bd0: 20 74 61 62 6c 65 20 63 61 6e 20 73 74 69 6c 6c   table can still
3be0: 20 62 65 20 71 75 65 72 69 65 64 20 75 73 69 6e   be queried usin
3bf0: 67 20 0a 20 20 23 20 22 70 72 61 67 6d 61 20 74  g .  # "pragma t
3c00: 61 62 6c 65 5f 69 6e 66 6f 22 3a 0a 20 20 64 6f  able_info":.  do
3c10: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 36 2e 36  _test pragma-6.6
3c20: 2e 31 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  .1 {.    execsql
3c30: 20 7b 0a 20 20 20 20 20 20 43 52 45 41 54 45 20   {.      CREATE 
3c40: 54 41 42 4c 45 20 74 72 69 61 6c 28 63 6f 6c 5f  TABLE trial(col_
3c50: 6d 61 69 6e 29 3b 0a 20 20 20 20 20 20 43 52 45  main);.      CRE
3c60: 41 54 45 20 54 45 4d 50 20 54 41 42 4c 45 20 74  ATE TEMP TABLE t
3c70: 72 69 61 6c 28 63 6f 6c 5f 74 65 6d 70 29 3b 0a  rial(col_temp);.
3c80: 20 20 20 20 7d 0a 20 20 7d 20 7b 7d 0a 20 20 64      }.  } {}.  d
3c90: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 36 2e  o_test pragma-6.
3ca0: 36 2e 32 20 7b 0a 20 20 20 20 65 78 65 63 73 71  6.2 {.    execsq
3cb0: 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41  l {.      PRAGMA
3cc0: 20 74 61 62 6c 65 5f 69 6e 66 6f 28 74 72 69 61   table_info(tria
3cd0: 6c 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 30  l);.    }.  } {0
3ce0: 20 63 6f 6c 5f 74 65 6d 70 20 7b 7d 20 30 20 7b   col_temp {} 0 {
3cf0: 7d 20 30 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70  } 0}.  do_test p
3d00: 72 61 67 6d 61 2d 36 2e 36 2e 33 20 7b 0a 20 20  ragma-6.6.3 {.  
3d10: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
3d20: 20 20 50 52 41 47 4d 41 20 74 65 6d 70 2e 74 61    PRAGMA temp.ta
3d30: 62 6c 65 5f 69 6e 66 6f 28 74 72 69 61 6c 29 3b  ble_info(trial);
3d40: 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 30 20 63 6f  .    }.  } {0 co
3d50: 6c 5f 74 65 6d 70 20 7b 7d 20 30 20 7b 7d 20 30  l_temp {} 0 {} 0
3d60: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67  }.  do_test prag
3d70: 6d 61 2d 36 2e 36 2e 34 20 7b 0a 20 20 20 20 65  ma-6.6.4 {.    e
3d80: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50  xecsql {.      P
3d90: 52 41 47 4d 41 20 6d 61 69 6e 2e 74 61 62 6c 65  RAGMA main.table
3da0: 5f 69 6e 66 6f 28 74 72 69 61 6c 29 3b 0a 20 20  _info(trial);.  
3db0: 20 20 7d 0a 20 20 7d 20 7b 30 20 63 6f 6c 5f 6d    }.  } {0 col_m
3dc0: 61 69 6e 20 7b 7d 20 30 20 7b 7d 20 30 7d 0a 7d  ain {} 0 {} 0}.}
3dd0: 0a 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  ..do_test pragma
3de0: 2d 36 2e 37 20 7b 0a 20 20 65 78 65 63 73 71 6c  -6.7 {.  execsql
3df0: 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41   {.    CREATE TA
3e00: 42 4c 45 20 74 65 73 74 5f 74 61 62 6c 65 28 0a  BLE test_table(.
3e10: 20 20 20 20 20 20 6f 6e 65 20 49 4e 54 20 4e 4f        one INT NO
3e20: 54 20 4e 55 4c 4c 20 44 45 46 41 55 4c 54 20 2d  T NULL DEFAULT -
3e30: 31 2c 20 0a 20 20 20 20 20 20 74 77 6f 20 74 65  1, .      two te
3e40: 78 74 2c 0a 20 20 20 20 20 20 74 68 72 65 65 20  xt,.      three 
3e50: 56 41 52 43 48 41 52 28 34 35 2c 20 36 35 29 20  VARCHAR(45, 65) 
3e60: 44 45 46 41 55 4c 54 20 27 61 62 63 64 65 27 2c  DEFAULT 'abcde',
3e70: 0a 20 20 20 20 20 20 66 6f 75 72 20 52 45 41 4c  .      four REAL
3e80: 20 44 45 46 41 55 4c 54 20 58 27 61 62 63 64 65   DEFAULT X'abcde
3e90: 66 27 2c 0a 20 20 20 20 20 20 66 69 76 65 20 44  f',.      five D
3ea0: 45 46 41 55 4c 54 20 43 55 52 52 45 4e 54 5f 54  EFAULT CURRENT_T
3eb0: 49 4d 45 0a 20 20 20 20 29 3b 0a 20 20 20 20 50  IME.    );.    P
3ec0: 52 41 47 4d 41 20 74 61 62 6c 65 5f 69 6e 66 6f  RAGMA table_info
3ed0: 28 74 65 73 74 5f 74 61 62 6c 65 29 3b 0a 20 20  (test_table);.  
3ee0: 7d 0a 7d 20 5b 63 6f 6e 63 61 74 20 5c 0a 20 20  }.} [concat \.  
3ef0: 7b 30 20 6f 6e 65 20 49 4e 54 20 31 20 2d 31 20  {0 one INT 1 -1 
3f00: 30 7d 20 5c 0a 20 20 7b 31 20 74 77 6f 20 74 65  0} \.  {1 two te
3f10: 78 74 20 30 20 7b 7d 20 30 7d 20 5c 0a 20 20 7b  xt 0 {} 0} \.  {
3f20: 32 20 74 68 72 65 65 20 7b 56 41 52 43 48 41 52  2 three {VARCHAR
3f30: 28 34 35 2c 20 36 35 29 7d 20 30 20 27 61 62 63  (45, 65)} 0 'abc
3f40: 64 65 27 20 30 7d 20 5c 0a 20 20 7b 33 20 66 6f  de' 0} \.  {3 fo
3f50: 75 72 20 52 45 41 4c 20 30 20 58 27 61 62 63 64  ur REAL 0 X'abcd
3f60: 65 66 27 20 30 7d 20 5c 0a 20 20 7b 34 20 66 69  ef' 0} \.  {4 fi
3f70: 76 65 20 7b 7d 20 30 20 43 55 52 52 45 4e 54 5f  ve {} 0 CURRENT_
3f80: 54 49 4d 45 20 30 7d 20 5c 0a 5d 0a 7d 20 3b 23  TIME 0} \.].} ;#
3f90: 20 69 66 63 61 70 61 62 6c 65 20 73 63 68 65 6d   ifcapable schem
3fa0: 61 5f 70 72 61 67 6d 61 73 0a 23 20 4d 69 73 63  a_pragmas.# Misc
3fb0: 65 6c 6c 61 6e 65 6f 75 73 20 74 65 73 74 73 0a  ellaneous tests.
3fc0: 23 0a 69 66 63 61 70 61 62 6c 65 20 73 63 68 65  #.ifcapable sche
3fd0: 6d 61 5f 70 72 61 67 6d 61 73 20 7b 0a 64 6f 5f  ma_pragmas {.do_
3fe0: 74 65 73 74 20 70 72 61 67 6d 61 2d 37 2e 31 2e  test pragma-7.1.
3ff0: 31 20 7b 0a 20 20 23 20 4d 61 6b 65 20 73 75 72  1 {.  # Make sur
4000: 65 20 61 20 70 72 61 67 6d 61 20 6b 6e 6f 77 73  e a pragma knows
4010: 20 74 6f 20 72 65 61 64 20 74 68 65 20 73 63 68   to read the sch
4020: 65 6d 61 20 69 66 20 69 74 20 6e 65 65 64 73 20  ema if it needs 
4030: 74 6f 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20 20  to.  db close.  
4040: 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e  sqlite3 db test.
4050: 64 62 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  db.  execsql {. 
4060: 20 20 20 70 72 61 67 6d 61 20 69 6e 64 65 78 5f     pragma index_
4070: 6c 69 73 74 28 74 33 29 3b 0a 20 20 7d 0a 7d 20  list(t3);.  }.} 
4080: 7b 30 20 74 33 69 31 20 30 20 31 20 73 71 6c 69  {0 t3i1 0 1 sqli
4090: 74 65 5f 61 75 74 6f 69 6e 64 65 78 5f 74 33 5f  te_autoindex_t3_
40a0: 31 20 31 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61  1 1}.do_test pra
40b0: 67 6d 61 2d 37 2e 31 2e 32 20 7b 0a 20 20 65 78  gma-7.1.2 {.  ex
40c0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 70 72 61 67  ecsql {.    prag
40d0: 6d 61 20 69 6e 64 65 78 5f 6c 69 73 74 28 74 33  ma index_list(t3
40e0: 5f 62 6f 67 75 73 29 3b 0a 20 20 7d 0a 7d 20 7b  _bogus);.  }.} {
40f0: 7d 0a 7d 20 3b 23 20 69 66 63 61 70 61 62 6c 65  }.} ;# ifcapable
4100: 20 73 63 68 65 6d 61 5f 70 72 61 67 6d 61 73 0a   schema_pragmas.
4110: 69 66 63 61 70 61 62 6c 65 20 7b 75 74 66 31 36  ifcapable {utf16
4120: 7d 20 7b 0a 20 20 69 66 20 7b 5b 70 65 72 6d 75  } {.  if {[permu
4130: 74 61 74 69 6f 6e 5d 20 3d 3d 20 22 22 7d 20 7b  tation] == ""} {
4140: 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 70 72 61  .    do_test pra
4150: 67 6d 61 2d 37 2e 32 20 7b 0a 20 20 20 20 20 20  gma-7.2 {.      
4160: 64 62 20 63 6c 6f 73 65 0a 20 20 20 20 20 20 73  db close.      s
4170: 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64  qlite3 db test.d
4180: 62 0a 20 20 20 20 20 20 63 61 74 63 68 73 71 6c  b.      catchsql
4190: 20 7b 0a 20 20 20 20 20 20 20 20 70 72 61 67 6d   {.        pragm
41a0: 61 20 65 6e 63 6f 64 69 6e 67 3d 62 6f 67 75 73  a encoding=bogus
41b0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 20  ;.      }.    } 
41c0: 7b 31 20 7b 75 6e 73 75 70 70 6f 72 74 65 64 20  {1 {unsupported 
41d0: 65 6e 63 6f 64 69 6e 67 3a 20 62 6f 67 75 73 7d  encoding: bogus}
41e0: 7d 0a 20 20 7d 0a 7d 0a 69 66 63 61 70 61 62 6c  }.  }.}.ifcapabl
41f0: 65 20 74 65 6d 70 64 62 20 7b 0a 20 20 64 6f 5f  e tempdb {.  do_
4200: 74 65 73 74 20 70 72 61 67 6d 61 2d 37 2e 33 20  test pragma-7.3 
4210: 7b 0a 20 20 20 20 64 62 20 63 6c 6f 73 65 0a 20  {.    db close. 
4220: 20 20 20 73 71 6c 69 74 65 33 20 64 62 20 74 65     sqlite3 db te
4230: 73 74 2e 64 62 0a 20 20 20 20 65 78 65 63 73 71  st.db.    execsq
4240: 6c 20 7b 0a 20 20 20 20 20 20 70 72 61 67 6d 61  l {.      pragma
4250: 20 6c 6f 63 6b 5f 73 74 61 74 75 73 3b 0a 20 20   lock_status;.  
4260: 20 20 7d 0a 20 20 7d 20 7b 6d 61 69 6e 20 75 6e    }.  } {main un
4270: 6c 6f 63 6b 65 64 20 74 65 6d 70 20 63 6c 6f 73  locked temp clos
4280: 65 64 7d 0a 7d 20 65 6c 73 65 20 7b 0a 20 20 64  ed}.} else {.  d
4290: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 37 2e  o_test pragma-7.
42a0: 33 20 7b 0a 20 20 20 20 64 62 20 63 6c 6f 73 65  3 {.    db close
42b0: 0a 20 20 20 20 73 71 6c 69 74 65 33 20 64 62 20  .    sqlite3 db 
42c0: 74 65 73 74 2e 64 62 0a 20 20 20 20 65 78 65 63  test.db.    exec
42d0: 73 71 6c 20 7b 0a 20 20 20 20 20 20 70 72 61 67  sql {.      prag
42e0: 6d 61 20 6c 6f 63 6b 5f 73 74 61 74 75 73 3b 0a  ma lock_status;.
42f0: 20 20 20 20 7d 0a 20 20 7d 20 7b 6d 61 69 6e 20      }.  } {main 
4300: 75 6e 6c 6f 63 6b 65 64 7d 0a 7d 0a 0a 0a 23 2d  unlocked}.}...#-
4310: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4320: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4330: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4340: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4350: 2d 2d 2d 2d 2d 0a 23 20 54 65 73 74 20 63 61 73  -----.# Test cas
4360: 65 73 20 70 72 61 67 6d 61 2d 38 2e 2a 20 74 65  es pragma-8.* te
4370: 73 74 20 74 68 65 20 22 50 52 41 47 4d 41 20 73  st the "PRAGMA s
4380: 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 22 20 61  chema_version" a
4390: 6e 64 20 22 50 52 41 47 4d 41 0a 23 20 75 73 65  nd "PRAGMA.# use
43a0: 72 5f 76 65 72 73 69 6f 6e 22 20 73 74 61 74 65  r_version" state
43b0: 6d 65 6e 74 73 2e 0a 23 0a 23 20 70 72 61 67 6d  ments..#.# pragm
43c0: 61 2d 38 2e 31 3a 20 50 52 41 47 4d 41 20 73 63  a-8.1: PRAGMA sc
43d0: 68 65 6d 61 5f 76 65 72 73 69 6f 6e 0a 23 20 70  hema_version.# p
43e0: 72 61 67 6d 61 2d 38 2e 32 3a 20 50 52 41 47 4d  ragma-8.2: PRAGM
43f0: 41 20 75 73 65 72 5f 76 65 72 73 69 6f 6e 0a 23  A user_version.#
4400: 0a 0a 69 66 63 61 70 61 62 6c 65 20 73 63 68 65  ..ifcapable sche
4410: 6d 61 5f 76 65 72 73 69 6f 6e 20 7b 0a 0a 23 20  ma_version {..# 
4420: 46 69 72 73 74 20 63 68 65 63 6b 20 74 68 61 74  First check that
4430: 20 77 65 20 63 61 6e 20 73 65 74 20 74 68 65 20   we can set the 
4440: 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 20 61  schema version a
4450: 6e 64 20 74 68 65 6e 20 72 65 74 72 69 65 76 65  nd then retrieve
4460: 20 74 68 65 0a 23 20 73 61 6d 65 20 76 61 6c 75   the.# same valu
4470: 65 2e 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  e..do_test pragm
4480: 61 2d 38 2e 31 2e 31 20 7b 0a 20 20 65 78 65 63  a-8.1.1 {.  exec
4490: 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41  sql {.    PRAGMA
44a0: 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 20   schema_version 
44b0: 3d 20 31 30 35 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a  = 105;.  }.} {}.
44c0: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38  do_test pragma-8
44d0: 2e 31 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c  .1.2 {.  execsql
44e0: 32 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 73  2 {.    PRAGMA s
44f0: 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 3b 0a 20  chema_version;. 
4500: 20 7d 0a 7d 20 7b 73 63 68 65 6d 61 5f 76 65 72   }.} {schema_ver
4510: 73 69 6f 6e 20 31 30 35 7d 0a 64 6f 5f 74 65 73  sion 105}.do_tes
4520: 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e 33 20 7b  t pragma-8.1.3 {
4530: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
4540: 20 50 52 41 47 4d 41 20 73 63 68 65 6d 61 5f 76   PRAGMA schema_v
4550: 65 72 73 69 6f 6e 20 3d 20 31 30 36 3b 0a 20 20  ersion = 106;.  
4560: 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 70  }.} {}.do_test p
4570: 72 61 67 6d 61 2d 38 2e 31 2e 34 20 7b 0a 20 20  ragma-8.1.4 {.  
4580: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52  execsql {.    PR
4590: 41 47 4d 41 20 73 63 68 65 6d 61 5f 76 65 72 73  AGMA schema_vers
45a0: 69 6f 6e 3b 0a 20 20 7d 0a 7d 20 31 30 36 0a 0a  ion;.  }.} 106..
45b0: 23 20 43 68 65 63 6b 20 74 68 61 74 20 63 72 65  # Check that cre
45c0: 61 74 69 6e 67 20 61 20 74 61 62 6c 65 20 6d 6f  ating a table mo
45d0: 64 69 66 69 65 73 20 74 68 65 20 73 63 68 65 6d  difies the schem
45e0: 61 2d 76 65 72 73 69 6f 6e 20 28 74 68 69 73 20  a-version (this 
45f0: 69 73 20 72 65 61 6c 6c 79 0a 23 20 74 6f 20 76  is really.# to v
4600: 65 72 69 66 79 20 74 68 61 74 20 74 68 65 20 76  erify that the v
4610: 61 6c 75 65 20 62 65 69 6e 67 20 72 65 61 64 20  alue being read 
4620: 69 73 20 69 6e 20 66 61 63 74 20 74 68 65 20 73  is in fact the s
4630: 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 29 2e 0a  chema version)..
4640: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38  do_test pragma-8
4650: 2e 31 2e 35 20 7b 0a 20 20 65 78 65 63 73 71 6c  .1.5 {.  execsql
4660: 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41   {.    CREATE TA
4670: 42 4c 45 20 74 34 28 61 2c 20 62 2c 20 63 29 3b  BLE t4(a, b, c);
4680: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
4690: 20 74 34 20 56 41 4c 55 45 53 28 31 2c 20 32 2c   t4 VALUES(1, 2,
46a0: 20 33 29 3b 0a 20 20 20 20 53 45 4c 45 43 54 20   3);.    SELECT 
46b0: 2a 20 46 52 4f 4d 20 74 34 3b 0a 20 20 7d 0a 7d  * FROM t4;.  }.}
46c0: 20 7b 31 20 32 20 33 7d 0a 64 6f 5f 74 65 73 74   {1 2 3}.do_test
46d0: 20 70 72 61 67 6d 61 2d 38 2e 31 2e 36 20 7b 0a   pragma-8.1.6 {.
46e0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
46f0: 50 52 41 47 4d 41 20 73 63 68 65 6d 61 5f 76 65  PRAGMA schema_ve
4700: 72 73 69 6f 6e 3b 0a 20 20 7d 0a 7d 20 31 30 37  rsion;.  }.} 107
4710: 0a 0a 23 20 4e 6f 77 20 6f 70 65 6e 20 61 20 73  ..# Now open a s
4720: 65 63 6f 6e 64 20 63 6f 6e 6e 65 63 74 69 6f 6e  econd connection
4730: 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65   to the database
4740: 2e 20 45 6e 73 75 72 65 20 74 68 61 74 20 63 68  . Ensure that ch
4750: 61 6e 67 69 6e 67 20 74 68 65 0a 23 20 73 63 68  anging the.# sch
4760: 65 6d 61 2d 76 65 72 73 69 6f 6e 20 75 73 69 6e  ema-version usin
4770: 67 20 74 68 65 20 66 69 72 73 74 20 63 6f 6e 6e  g the first conn
4780: 65 63 74 69 6f 6e 20 66 6f 72 63 65 73 20 74 68  ection forces th
4790: 65 20 73 65 63 6f 6e 64 20 63 6f 6e 6e 65 63 74  e second connect
47a0: 69 6f 6e 0a 23 20 74 6f 20 72 65 6c 6f 61 64 20  ion.# to reload 
47b0: 74 68 65 20 73 63 68 65 6d 61 2e 20 54 68 69 73  the schema. This
47c0: 20 68 61 73 20 74 6f 20 62 65 20 64 6f 6e 65 20   has to be done 
47d0: 75 73 69 6e 67 20 74 68 65 20 43 2d 41 50 49 20  using the C-API 
47e0: 74 65 73 74 20 66 75 6e 63 74 69 6f 6e 73 2c 0a  test functions,.
47f0: 23 20 62 65 63 61 75 73 65 20 74 68 65 20 54 43  # because the TC
4800: 4c 20 41 50 49 20 61 63 63 6f 75 6e 74 73 20 66  L API accounts f
4810: 6f 72 20 53 43 48 45 4d 41 5f 45 52 52 4f 52 20  or SCHEMA_ERROR 
4820: 61 6e 64 20 72 65 74 72 69 65 73 20 74 68 65 20  and retries the 
4830: 71 75 65 72 79 2e 0a 64 6f 5f 74 65 73 74 20 70  query..do_test p
4840: 72 61 67 6d 61 2d 38 2e 31 2e 37 20 7b 0a 20 20  ragma-8.1.7 {.  
4850: 73 71 6c 69 74 65 33 20 64 62 32 20 74 65 73 74  sqlite3 db2 test
4860: 2e 64 62 3b 20 73 65 74 20 3a 3a 44 42 32 20 5b  .db; set ::DB2 [
4870: 73 71 6c 69 74 65 33 5f 63 6f 6e 6e 65 63 74 69  sqlite3_connecti
4880: 6f 6e 5f 70 6f 69 6e 74 65 72 20 64 62 32 5d 0a  on_pointer db2].
4890: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
48a0: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 34  SELECT * FROM t4
48b0: 3b 0a 20 20 7d 20 64 62 32 0a 7d 20 7b 31 20 32  ;.  } db2.} {1 2
48c0: 20 33 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67   3}.do_test prag
48d0: 6d 61 2d 38 2e 31 2e 38 20 7b 0a 20 20 65 78 65  ma-8.1.8 {.  exe
48e0: 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d  csql {.    PRAGM
48f0: 41 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e  A schema_version
4900: 20 3d 20 31 30 38 3b 0a 20 20 7d 0a 7d 20 7b 7d   = 108;.  }.} {}
4910: 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d  .do_test pragma-
4920: 38 2e 31 2e 39 20 7b 0a 20 20 73 65 74 20 3a 3a  8.1.9 {.  set ::
4930: 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72  STMT [sqlite3_pr
4940: 65 70 61 72 65 20 24 3a 3a 44 42 32 20 22 53 45  epare $::DB2 "SE
4950: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 34 22 20  LECT * FROM t4" 
4960: 2d 31 20 44 55 4d 4d 59 5d 0a 20 20 73 71 6c 69  -1 DUMMY].  sqli
4970: 74 65 33 5f 73 74 65 70 20 24 3a 3a 53 54 4d 54  te3_step $::STMT
4980: 0a 7d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 0a  .} SQLITE_ERROR.
4990: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38  do_test pragma-8
49a0: 2e 31 2e 31 30 20 7b 0a 20 20 73 71 6c 69 74 65  .1.10 {.  sqlite
49b0: 33 5f 66 69 6e 61 6c 69 7a 65 20 24 3a 3a 53 54  3_finalize $::ST
49c0: 4d 54 0a 7d 20 53 51 4c 49 54 45 5f 53 43 48 45  MT.} SQLITE_SCHE
49d0: 4d 41 0a 0a 23 20 4d 61 6b 65 20 73 75 72 65 20  MA..# Make sure 
49e0: 74 68 65 20 73 63 68 65 6d 61 2d 76 65 72 73 69  the schema-versi
49f0: 6f 6e 20 63 61 6e 20 62 65 20 6d 61 6e 69 70 75  on can be manipu
4a00: 6c 61 74 65 64 20 69 6e 20 61 6e 20 61 74 74 61  lated in an atta
4a10: 63 68 65 64 20 64 61 74 61 62 61 73 65 2e 0a 66  ched database..f
4a20: 6f 72 63 65 64 65 6c 65 74 65 20 74 65 73 74 32  orcedelete test2
4a30: 2e 64 62 0a 66 6f 72 63 65 64 65 6c 65 74 65 20  .db.forcedelete 
4a40: 74 65 73 74 32 2e 64 62 2d 6a 6f 75 72 6e 61 6c  test2.db-journal
4a50: 0a 69 66 63 61 70 61 62 6c 65 20 61 74 74 61 63  .ifcapable attac
4a60: 68 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 70 72  h {.  do_test pr
4a70: 61 67 6d 61 2d 38 2e 31 2e 31 31 20 7b 0a 20 20  agma-8.1.11 {.  
4a80: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
4a90: 20 20 41 54 54 41 43 48 20 27 74 65 73 74 32 2e    ATTACH 'test2.
4aa0: 64 62 27 20 41 53 20 61 75 78 3b 0a 20 20 20 20  db' AS aux;.    
4ab0: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 61    CREATE TABLE a
4ac0: 75 78 2e 74 31 28 61 2c 20 62 2c 20 63 29 3b 0a  ux.t1(a, b, c);.
4ad0: 20 20 20 20 20 20 50 52 41 47 4d 41 20 61 75 78        PRAGMA aux
4ae0: 2e 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 20  .schema_version 
4af0: 3d 20 32 30 35 3b 0a 20 20 20 20 7d 0a 20 20 7d  = 205;.    }.  }
4b00: 20 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72   {}.  do_test pr
4b10: 61 67 6d 61 2d 38 2e 31 2e 31 32 20 7b 0a 20 20  agma-8.1.12 {.  
4b20: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
4b30: 20 20 50 52 41 47 4d 41 20 61 75 78 2e 73 63 68    PRAGMA aux.sch
4b40: 65 6d 61 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 20  ema_version;.   
4b50: 20 7d 0a 20 20 7d 20 32 30 35 0a 7d 0a 64 6f 5f   }.  } 205.}.do_
4b60: 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e  test pragma-8.1.
4b70: 31 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  13 {.  execsql {
4b80: 0a 20 20 20 20 50 52 41 47 4d 41 20 73 63 68 65  .    PRAGMA sche
4b90: 6d 61 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 7d 0a  ma_version;.  }.
4ba0: 7d 20 31 30 38 0a 0a 23 20 41 6e 64 20 63 68 65  } 108..# And che
4bb0: 63 6b 20 74 68 61 74 20 6d 6f 64 69 66 79 69 6e  ck that modifyin
4bc0: 67 20 74 68 65 20 73 63 68 65 6d 61 2d 76 65 72  g the schema-ver
4bd0: 73 69 6f 6e 20 69 6e 20 61 6e 20 61 74 74 61 63  sion in an attac
4be0: 68 65 64 20 64 61 74 61 62 61 73 65 0a 23 20 66  hed database.# f
4bf0: 6f 72 63 65 73 20 74 68 65 20 73 65 63 6f 6e 64  orces the second
4c00: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 72   connection to r
4c10: 65 6c 6f 61 64 20 74 68 65 20 73 63 68 65 6d 61  eload the schema
4c20: 2e 0a 69 66 63 61 70 61 62 6c 65 20 61 74 74 61  ..ifcapable atta
4c30: 63 68 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 70  ch {.  do_test p
4c40: 72 61 67 6d 61 2d 38 2e 31 2e 31 34 20 7b 0a 20  ragma-8.1.14 {. 
4c50: 20 20 20 73 71 6c 69 74 65 33 20 64 62 32 20 74     sqlite3 db2 t
4c60: 65 73 74 2e 64 62 3b 20 73 65 74 20 3a 3a 44 42  est.db; set ::DB
4c70: 32 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6e 6e 65  2 [sqlite3_conne
4c80: 63 74 69 6f 6e 5f 70 6f 69 6e 74 65 72 20 64 62  ction_pointer db
4c90: 32 5d 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b  2].    execsql {
4ca0: 0a 20 20 20 20 20 20 41 54 54 41 43 48 20 27 74  .      ATTACH 't
4cb0: 65 73 74 32 2e 64 62 27 20 41 53 20 61 75 78 3b  est2.db' AS aux;
4cc0: 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20 2a 20  .      SELECT * 
4cd0: 46 52 4f 4d 20 61 75 78 2e 74 31 3b 0a 20 20 20  FROM aux.t1;.   
4ce0: 20 7d 20 64 62 32 0a 20 20 7d 20 7b 7d 0a 20 20   } db2.  } {}.  
4cf0: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38  do_test pragma-8
4d00: 2e 31 2e 31 35 20 7b 0a 20 20 20 20 65 78 65 63  .1.15 {.    exec
4d10: 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47  sql {.      PRAG
4d20: 4d 41 20 61 75 78 2e 73 63 68 65 6d 61 5f 76 65  MA aux.schema_ve
4d30: 72 73 69 6f 6e 20 3d 20 32 30 36 3b 0a 20 20 20  rsion = 206;.   
4d40: 20 7d 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74   }.  } {}.  do_t
4d50: 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e 31  est pragma-8.1.1
4d60: 36 20 7b 0a 20 20 20 20 73 65 74 20 3a 3a 53 54  6 {.    set ::ST
4d70: 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70  MT [sqlite3_prep
4d80: 61 72 65 20 24 3a 3a 44 42 32 20 22 53 45 4c 45  are $::DB2 "SELE
4d90: 43 54 20 2a 20 46 52 4f 4d 20 61 75 78 2e 74 31  CT * FROM aux.t1
4da0: 22 20 2d 31 20 44 55 4d 4d 59 5d 0a 20 20 20 20  " -1 DUMMY].    
4db0: 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 3a 3a  sqlite3_step $::
4dc0: 53 54 4d 54 0a 20 20 7d 20 53 51 4c 49 54 45 5f  STMT.  } SQLITE_
4dd0: 45 52 52 4f 52 0a 20 20 64 6f 5f 74 65 73 74 20  ERROR.  do_test 
4de0: 70 72 61 67 6d 61 2d 38 2e 31 2e 31 37 20 7b 0a  pragma-8.1.17 {.
4df0: 20 20 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61      sqlite3_fina
4e00: 6c 69 7a 65 20 24 3a 3a 53 54 4d 54 0a 20 20 7d  lize $::STMT.  }
4e10: 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 0a 20   SQLITE_SCHEMA. 
4e20: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
4e30: 38 2e 31 2e 31 38 20 7b 0a 20 20 20 20 64 62 32  8.1.18 {.    db2
4e40: 20 63 6c 6f 73 65 0a 20 20 7d 20 7b 7d 0a 7d 0a   close.  } {}.}.
4e50: 0a 23 20 4e 6f 77 20 74 65 73 74 20 74 68 61 74  .# Now test that
4e60: 20 74 68 65 20 75 73 65 72 2d 76 65 72 73 69 6f   the user-versio
4e70: 6e 20 63 61 6e 20 62 65 20 72 65 61 64 20 61 6e  n can be read an
4e80: 64 20 77 72 69 74 74 65 6e 20 28 61 6e 64 20 74  d written (and t
4e90: 68 61 74 20 77 65 20 61 72 65 6e 27 74 0a 23 20  hat we aren't.# 
4ea0: 61 63 63 69 64 65 6e 74 61 6c 6c 79 20 6d 61 6e  accidentally man
4eb0: 69 70 75 6c 61 74 69 6e 67 20 74 68 65 20 73 63  ipulating the sc
4ec0: 68 65 6d 61 2d 76 65 72 73 69 6f 6e 20 69 6e 73  hema-version ins
4ed0: 74 65 61 64 29 2e 0a 64 6f 5f 74 65 73 74 20 70  tead)..do_test p
4ee0: 72 61 67 6d 61 2d 38 2e 32 2e 31 20 7b 0a 20 20  ragma-8.2.1 {.  
4ef0: 65 78 65 63 73 71 6c 32 20 7b 0a 20 20 20 20 50  execsql2 {.    P
4f00: 52 41 47 4d 41 20 75 73 65 72 5f 76 65 72 73 69  RAGMA user_versi
4f10: 6f 6e 3b 0a 20 20 7d 0a 7d 20 7b 75 73 65 72 5f  on;.  }.} {user_
4f20: 76 65 72 73 69 6f 6e 20 30 7d 0a 64 6f 5f 74 65  version 0}.do_te
4f30: 73 74 20 70 72 61 67 6d 61 2d 38 2e 32 2e 32 20  st pragma-8.2.2 
4f40: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
4f50: 20 20 50 52 41 47 4d 41 20 75 73 65 72 5f 76 65    PRAGMA user_ve
4f60: 72 73 69 6f 6e 20 3d 20 32 3b 0a 20 20 7d 0a 7d  rsion = 2;.  }.}
4f70: 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67   {}.do_test prag
4f80: 6d 61 2d 38 2e 32 2e 33 2e 31 20 7b 0a 20 20 65  ma-8.2.3.1 {.  e
4f90: 78 65 63 73 71 6c 32 20 7b 0a 20 20 20 20 50 52  xecsql2 {.    PR
4fa0: 41 47 4d 41 20 75 73 65 72 5f 76 65 72 73 69 6f  AGMA user_versio
4fb0: 6e 3b 0a 20 20 7d 0a 7d 20 7b 75 73 65 72 5f 76  n;.  }.} {user_v
4fc0: 65 72 73 69 6f 6e 20 32 7d 0a 64 6f 5f 74 65 73  ersion 2}.do_tes
4fd0: 74 20 70 72 61 67 6d 61 2d 38 2e 32 2e 33 2e 32  t pragma-8.2.3.2
4fe0: 20 7b 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20 20   {.  db close.  
4ff0: 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e  sqlite3 db test.
5000: 64 62 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  db.  execsql {. 
5010: 20 20 20 50 52 41 47 4d 41 20 75 73 65 72 5f 76     PRAGMA user_v
5020: 65 72 73 69 6f 6e 3b 0a 20 20 7d 0a 7d 20 7b 32  ersion;.  }.} {2
5030: 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  }.do_test pragma
5040: 2d 38 2e 32 2e 34 2e 31 20 7b 0a 20 20 65 78 65  -8.2.4.1 {.  exe
5050: 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d  csql {.    PRAGM
5060: 41 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e  A schema_version
5070: 3b 0a 20 20 7d 0a 7d 20 7b 31 30 38 7d 0a 69 66  ;.  }.} {108}.if
5080: 63 61 70 61 62 6c 65 20 76 61 63 75 75 6d 20 7b  capable vacuum {
5090: 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .  do_test pragm
50a0: 61 2d 38 2e 32 2e 34 2e 32 20 7b 0a 20 20 20 20  a-8.2.4.2 {.    
50b0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
50c0: 56 41 43 55 55 4d 3b 0a 20 20 20 20 20 20 50 52  VACUUM;.      PR
50d0: 41 47 4d 41 20 75 73 65 72 5f 76 65 72 73 69 6f  AGMA user_versio
50e0: 6e 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 32 7d  n;.    }.  } {2}
50f0: 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .  do_test pragm
5100: 61 2d 38 2e 32 2e 34 2e 33 20 7b 0a 20 20 20 20  a-8.2.4.3 {.    
5110: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
5120: 50 52 41 47 4d 41 20 73 63 68 65 6d 61 5f 76 65  PRAGMA schema_ve
5130: 72 73 69 6f 6e 3b 0a 20 20 20 20 7d 0a 20 20 7d  rsion;.    }.  }
5140: 20 7b 31 30 39 7d 0a 7d 0a 0a 69 66 63 61 70 61   {109}.}..ifcapa
5150: 62 6c 65 20 61 74 74 61 63 68 20 7b 0a 20 20 64  ble attach {.  d
5160: 62 20 65 76 61 6c 20 7b 41 54 54 41 43 48 20 27  b eval {ATTACH '
5170: 74 65 73 74 32 2e 64 62 27 20 41 53 20 61 75 78  test2.db' AS aux
5180: 7d 0a 20 20 0a 20 20 23 20 43 68 65 63 6b 20 74  }.  .  # Check t
5190: 68 61 74 20 74 68 65 20 75 73 65 72 2d 76 65 72  hat the user-ver
51a0: 73 69 6f 6e 20 69 6e 20 74 68 65 20 61 75 78 69  sion in the auxi
51b0: 6c 61 72 79 20 64 61 74 61 62 61 73 65 20 63 61  lary database ca
51c0: 6e 20 62 65 20 6d 61 6e 69 70 75 6c 61 74 65 64  n be manipulated
51d0: 20 28 0a 20 20 23 20 61 6e 64 20 74 68 61 74 20   (.  # and that 
51e0: 77 65 20 61 72 65 6e 27 74 20 61 63 63 69 64 65  we aren't accide
51f0: 6e 74 61 6c 6c 79 20 6d 61 6e 69 70 75 6c 61 74  ntally manipulat
5200: 69 6e 67 20 74 68 65 20 73 61 6d 65 20 69 6e 20  ing the same in 
5210: 74 68 65 20 6d 61 69 6e 20 64 62 29 2e 0a 20 20  the main db)..  
5220: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38  do_test pragma-8
5230: 2e 32 2e 35 20 7b 0a 20 20 20 20 65 78 65 63 73  .2.5 {.    execs
5240: 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d  ql {.      PRAGM
5250: 41 20 61 75 78 2e 75 73 65 72 5f 76 65 72 73 69  A aux.user_versi
5260: 6f 6e 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 30  on;.    }.  } {0
5270: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67  }.  do_test prag
5280: 6d 61 2d 38 2e 32 2e 36 20 7b 0a 20 20 20 20 65  ma-8.2.6 {.    e
5290: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50  xecsql {.      P
52a0: 52 41 47 4d 41 20 61 75 78 2e 75 73 65 72 5f 76  RAGMA aux.user_v
52b0: 65 72 73 69 6f 6e 20 3d 20 33 3b 0a 20 20 20 20  ersion = 3;.    
52c0: 7d 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65  }.  } {}.  do_te
52d0: 73 74 20 70 72 61 67 6d 61 2d 38 2e 32 2e 37 20  st pragma-8.2.7 
52e0: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a  {.    execsql {.
52f0: 20 20 20 20 20 20 50 52 41 47 4d 41 20 61 75 78        PRAGMA aux
5300: 2e 75 73 65 72 5f 76 65 72 73 69 6f 6e 3b 0a 20  .user_version;. 
5310: 20 20 20 7d 0a 20 20 7d 20 7b 33 7d 0a 20 20 64     }.  } {3}.  d
5320: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e  o_test pragma-8.
5330: 32 2e 38 20 7b 0a 20 20 20 20 65 78 65 63 73 71  2.8 {.    execsq
5340: 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41  l {.      PRAGMA
5350: 20 6d 61 69 6e 2e 75 73 65 72 5f 76 65 72 73 69   main.user_versi
5360: 6f 6e 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 32  on;.    }.  } {2
5370: 7d 0a 20 20 0a 20 20 23 20 4e 6f 77 20 63 68 65  }.  .  # Now che
5380: 63 6b 20 74 68 61 74 20 61 20 52 4f 4c 4c 42 41  ck that a ROLLBA
5390: 43 4b 20 72 65 73 65 74 73 20 74 68 65 20 75 73  CK resets the us
53a0: 65 72 2d 76 65 72 73 69 6f 6e 20 69 66 20 69 74  er-version if it
53b0: 20 68 61 73 20 62 65 65 6e 20 6d 6f 64 69 66 69   has been modifi
53c0: 65 64 0a 20 20 23 20 77 69 74 68 69 6e 20 61 20  ed.  # within a 
53d0: 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 20 20 64  transaction..  d
53e0: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e  o_test pragma-8.
53f0: 32 2e 39 20 7b 0a 20 20 20 20 65 78 65 63 73 71  2.9 {.    execsq
5400: 6c 20 7b 0a 20 20 20 20 20 20 42 45 47 49 4e 3b  l {.      BEGIN;
5410: 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 61 75  .      PRAGMA au
5420: 78 2e 75 73 65 72 5f 76 65 72 73 69 6f 6e 20 3d  x.user_version =
5430: 20 31 30 3b 0a 20 20 20 20 20 20 50 52 41 47 4d   10;.      PRAGM
5440: 41 20 75 73 65 72 5f 76 65 72 73 69 6f 6e 20 3d  A user_version =
5450: 20 31 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b   11;.    }.  } {
5460: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67  }.  do_test prag
5470: 6d 61 2d 38 2e 32 2e 31 30 20 7b 0a 20 20 20 20  ma-8.2.10 {.    
5480: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
5490: 50 52 41 47 4d 41 20 61 75 78 2e 75 73 65 72 5f  PRAGMA aux.user_
54a0: 76 65 72 73 69 6f 6e 3b 0a 20 20 20 20 7d 0a 20  version;.    }. 
54b0: 20 7d 20 7b 31 30 7d 0a 20 20 64 6f 5f 74 65 73   } {10}.  do_tes
54c0: 74 20 70 72 61 67 6d 61 2d 38 2e 32 2e 31 31 20  t pragma-8.2.11 
54d0: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a  {.    execsql {.
54e0: 20 20 20 20 20 20 50 52 41 47 4d 41 20 6d 61 69        PRAGMA mai
54f0: 6e 2e 75 73 65 72 5f 76 65 72 73 69 6f 6e 3b 0a  n.user_version;.
5500: 20 20 20 20 7d 0a 20 20 7d 20 7b 31 31 7d 0a 20      }.  } {11}. 
5510: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
5520: 38 2e 32 2e 31 32 20 7b 0a 20 20 20 20 65 78 65  8.2.12 {.    exe
5530: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 52 4f 4c  csql {.      ROL
5540: 4c 42 41 43 4b 3b 0a 20 20 20 20 20 20 50 52 41  LBACK;.      PRA
5550: 47 4d 41 20 61 75 78 2e 75 73 65 72 5f 76 65 72  GMA aux.user_ver
5560: 73 69 6f 6e 3b 0a 20 20 20 20 7d 0a 20 20 7d 20  sion;.    }.  } 
5570: 7b 33 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72  {3}.  do_test pr
5580: 61 67 6d 61 2d 38 2e 32 2e 31 33 20 7b 0a 20 20  agma-8.2.13 {.  
5590: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
55a0: 20 20 50 52 41 47 4d 41 20 6d 61 69 6e 2e 75 73    PRAGMA main.us
55b0: 65 72 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 20 20  er_version;.    
55c0: 7d 0a 20 20 7d 20 7b 32 7d 0a 7d 0a 0a 23 20 54  }.  } {2}.}..# T
55d0: 72 79 20 61 20 6e 65 67 61 74 69 76 65 20 76 61  ry a negative va
55e0: 6c 75 65 20 66 6f 72 20 74 68 65 20 75 73 65 72  lue for the user
55f0: 2d 76 65 72 73 69 6f 6e 0a 64 6f 5f 74 65 73 74  -version.do_test
5600: 20 70 72 61 67 6d 61 2d 38 2e 32 2e 31 34 20 7b   pragma-8.2.14 {
5610: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
5620: 20 50 52 41 47 4d 41 20 75 73 65 72 5f 76 65 72   PRAGMA user_ver
5630: 73 69 6f 6e 20 3d 20 2d 34 35 30 3b 0a 20 20 7d  sion = -450;.  }
5640: 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 70 72  .} {}.do_test pr
5650: 61 67 6d 61 2d 38 2e 32 2e 31 35 20 7b 0a 20 20  agma-8.2.15 {.  
5660: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52  execsql {.    PR
5670: 41 47 4d 41 20 75 73 65 72 5f 76 65 72 73 69 6f  AGMA user_versio
5680: 6e 3b 0a 20 20 7d 0a 7d 20 7b 2d 34 35 30 7d 0a  n;.  }.} {-450}.
5690: 7d 20 3b 20 23 20 69 66 63 61 70 61 62 6c 65 20  } ; # ifcapable 
56a0: 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 0a 0a  schema_version..
56b0: 23 20 43 68 65 63 6b 20 74 6f 20 73 65 65 20 69  # Check to see i
56c0: 66 20 54 45 4d 50 5f 53 54 4f 52 45 20 69 73 20  f TEMP_STORE is 
56d0: 6d 65 6d 6f 72 79 20 6f 72 20 64 69 73 6b 2e 20  memory or disk. 
56e0: 20 52 65 74 75 72 6e 20 73 74 72 69 6e 67 73 0a   Return strings.
56f0: 23 20 22 6d 65 6d 6f 72 79 22 20 6f 72 20 22 64  # "memory" or "d
5700: 69 73 6b 22 20 61 73 20 61 70 70 72 6f 70 72 69  isk" as appropri
5710: 61 74 65 2e 0a 23 0a 70 72 6f 63 20 63 68 65 63  ate..#.proc chec
5720: 6b 5f 74 65 6d 70 5f 73 74 6f 72 65 20 7b 7d 20  k_temp_store {} 
5730: 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 43 52 45  {.  db eval {CRE
5740: 41 54 45 20 54 45 4d 50 20 54 41 42 4c 45 20 49  ATE TEMP TABLE I
5750: 46 20 4e 4f 54 20 45 58 49 53 54 53 20 61 28 62  F NOT EXISTS a(b
5760: 29 7d 0a 20 20 64 62 20 65 76 61 6c 20 7b 50 52  )}.  db eval {PR
5770: 41 47 4d 41 20 64 61 74 61 62 61 73 65 5f 6c 69  AGMA database_li
5780: 73 74 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 6e  st} {.    if {$n
5790: 61 6d 65 3d 3d 22 74 65 6d 70 22 7d 20 7b 0a 20  ame=="temp"} {. 
57a0: 20 20 20 20 20 73 65 74 20 62 74 20 5b 62 74 72       set bt [btr
57b0: 65 65 5f 66 72 6f 6d 5f 64 62 20 64 62 20 31 5d  ee_from_db db 1]
57c0: 0a 20 20 20 20 20 20 69 66 20 7b 5b 62 74 72 65  .      if {[btre
57d0: 65 5f 69 73 6d 65 6d 64 62 20 24 62 74 5d 7d 20  e_ismemdb $bt]} 
57e0: 7b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  {.        return
57f0: 20 22 6d 65 6d 6f 72 79 22 0a 20 20 20 20 20 20   "memory".      
5800: 7d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 22  }.      return "
5810: 64 69 73 6b 22 0a 20 20 20 20 7d 0a 20 20 7d 0a  disk".    }.  }.
5820: 20 20 72 65 74 75 72 6e 20 22 75 6e 6b 6e 6f 77    return "unknow
5830: 6e 22 0a 7d 0a 0a 0a 23 20 54 65 73 74 20 74 65  n".}...# Test te
5840: 6d 70 5f 73 74 6f 72 65 20 61 6e 64 20 74 65 6d  mp_store and tem
5850: 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72  p_store_director
5860: 79 20 70 72 61 67 6d 61 73 0a 23 0a 69 66 63 61  y pragmas.#.ifca
5870: 70 61 62 6c 65 20 70 61 67 65 72 5f 70 72 61 67  pable pager_prag
5880: 6d 61 73 20 7b 0a 64 6f 5f 74 65 73 74 20 70 72  mas {.do_test pr
5890: 61 67 6d 61 2d 39 2e 31 20 7b 0a 20 20 64 62 20  agma-9.1 {.  db 
58a0: 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74 65 33 20  close.  sqlite3 
58b0: 64 62 20 74 65 73 74 2e 64 62 0a 20 20 65 78 65  db test.db.  exe
58c0: 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d  csql {.    PRAGM
58d0: 41 20 74 65 6d 70 5f 73 74 6f 72 65 3b 0a 20 20  A temp_store;.  
58e0: 7d 0a 7d 20 7b 30 7d 0a 69 66 20 7b 24 54 45 4d  }.} {0}.if {$TEM
58f0: 50 5f 53 54 4f 52 45 3c 3d 31 7d 20 7b 0a 20 20  P_STORE<=1} {.  
5900: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 39  do_test pragma-9
5910: 2e 31 2e 31 20 7b 0a 20 20 20 20 63 68 65 63 6b  .1.1 {.    check
5920: 5f 74 65 6d 70 5f 73 74 6f 72 65 0a 20 20 7d 20  _temp_store.  } 
5930: 7b 64 69 73 6b 7d 0a 7d 20 65 6c 73 65 20 7b 0a  {disk}.} else {.
5940: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
5950: 2d 39 2e 31 2e 31 20 7b 0a 20 20 20 20 63 68 65  -9.1.1 {.    che
5960: 63 6b 5f 74 65 6d 70 5f 73 74 6f 72 65 0a 20 20  ck_temp_store.  
5970: 7d 20 7b 6d 65 6d 6f 72 79 7d 0a 7d 0a 0a 64 6f  } {memory}.}..do
5980: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 39 2e 32  _test pragma-9.2
5990: 20 7b 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20 20   {.  db close.  
59a0: 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e  sqlite3 db test.
59b0: 64 62 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  db.  execsql {. 
59c0: 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73     PRAGMA temp_s
59d0: 74 6f 72 65 3d 66 69 6c 65 3b 0a 20 20 20 20 50  tore=file;.    P
59e0: 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65  RAGMA temp_store
59f0: 3b 0a 20 20 7d 0a 7d 20 7b 31 7d 0a 69 66 20 7b  ;.  }.} {1}.if {
5a00: 24 54 45 4d 50 5f 53 54 4f 52 45 3d 3d 33 7d 20  $TEMP_STORE==3} 
5a10: 7b 0a 20 20 23 20 57 68 65 6e 20 54 45 4d 50 5f  {.  # When TEMP_
5a20: 53 54 4f 52 45 20 69 73 20 33 2c 20 61 6c 77 61  STORE is 3, alwa
5a30: 79 73 20 75 73 65 20 6d 65 6d 6f 72 79 20 72 65  ys use memory re
5a40: 67 61 72 64 6c 65 73 73 20 6f 66 20 70 72 61 67  gardless of prag
5a50: 6d 61 20 73 65 74 74 69 6e 67 73 2e 0a 20 20 64  ma settings..  d
5a60: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 39 2e  o_test pragma-9.
5a70: 32 2e 31 20 7b 0a 20 20 20 20 63 68 65 63 6b 5f  2.1 {.    check_
5a80: 74 65 6d 70 5f 73 74 6f 72 65 0a 20 20 7d 20 7b  temp_store.  } {
5a90: 6d 65 6d 6f 72 79 7d 0a 7d 20 65 6c 73 65 20 7b  memory}.} else {
5aa0: 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .  do_test pragm
5ab0: 61 2d 39 2e 32 2e 31 20 7b 0a 20 20 20 20 63 68  a-9.2.1 {.    ch
5ac0: 65 63 6b 5f 74 65 6d 70 5f 73 74 6f 72 65 0a 20  eck_temp_store. 
5ad0: 20 7d 20 7b 64 69 73 6b 7d 0a 7d 0a 0a 64 6f 5f   } {disk}.}..do_
5ae0: 74 65 73 74 20 70 72 61 67 6d 61 2d 39 2e 33 20  test pragma-9.3 
5af0: 7b 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 73  {.  db close.  s
5b00: 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64  qlite3 db test.d
5b10: 62 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  b.  execsql {.  
5b20: 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74    PRAGMA temp_st
5b30: 6f 72 65 3d 6d 65 6d 6f 72 79 3b 0a 20 20 20 20  ore=memory;.    
5b40: 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72  PRAGMA temp_stor
5b50: 65 3b 0a 20 20 7d 0a 7d 20 7b 32 7d 0a 69 66 20  e;.  }.} {2}.if 
5b60: 7b 24 54 45 4d 50 5f 53 54 4f 52 45 3d 3d 30 7d  {$TEMP_STORE==0}
5b70: 20 7b 0a 20 20 23 20 57 68 65 6e 20 54 45 4d 50   {.  # When TEMP
5b80: 5f 53 54 4f 52 45 20 69 73 20 30 2c 20 61 6c 77  _STORE is 0, alw
5b90: 61 79 73 20 75 73 65 20 74 68 65 20 64 69 73 6b  ays use the disk
5ba0: 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 70   regardless of p
5bb0: 72 61 67 6d 61 20 73 65 74 74 69 6e 67 73 2e 0a  ragma settings..
5bc0: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
5bd0: 2d 39 2e 33 2e 31 20 7b 0a 20 20 20 20 63 68 65  -9.3.1 {.    che
5be0: 63 6b 5f 74 65 6d 70 5f 73 74 6f 72 65 0a 20 20  ck_temp_store.  
5bf0: 7d 20 7b 64 69 73 6b 7d 0a 7d 20 65 6c 73 65 20  } {disk}.} else 
5c00: 7b 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67  {.  do_test prag
5c10: 6d 61 2d 39 2e 33 2e 31 20 7b 0a 20 20 20 20 63  ma-9.3.1 {.    c
5c20: 68 65 63 6b 5f 74 65 6d 70 5f 73 74 6f 72 65 0a  heck_temp_store.
5c30: 20 20 7d 20 7b 6d 65 6d 6f 72 79 7d 0a 7d 0a 0a    } {memory}.}..
5c40: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 39  do_test pragma-9
5c50: 2e 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .4 {.  execsql {
5c60: 0a 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70  .    PRAGMA temp
5c70: 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79  _store_directory
5c80: 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 69 66 63 61 70  ;.  }.} {}.ifcap
5c90: 61 62 6c 65 20 77 73 64 20 7b 0a 20 20 64 6f 5f  able wsd {.  do_
5ca0: 74 65 73 74 20 70 72 61 67 6d 61 2d 39 2e 35 20  test pragma-9.5 
5cb0: 7b 0a 20 20 20 20 73 65 74 20 70 77 64 20 5b 73  {.    set pwd [s
5cc0: 74 72 69 6e 67 20 6d 61 70 20 7b 27 20 27 27 7d  tring map {' ''}
5cd0: 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d   [file nativenam
5ce0: 65 20 5b 67 65 74 5f 70 77 64 5d 5d 5d 0a 20 20  e [get_pwd]]].  
5cf0: 20 20 65 78 65 63 73 71 6c 20 22 0a 20 20 20 20    execsql ".    
5d00: 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74    PRAGMA temp_st
5d10: 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 3d 27 24  ore_directory='$
5d20: 70 77 64 27 3b 0a 20 20 20 20 22 0a 20 20 7d 20  pwd';.    ".  } 
5d30: 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61  {}.  do_test pra
5d40: 67 6d 61 2d 39 2e 36 20 7b 0a 20 20 20 20 65 78  gma-9.6 {.    ex
5d50: 65 63 73 71 6c 20 7b 20 0a 20 20 20 20 20 20 50  ecsql { .      P
5d60: 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65  RAGMA temp_store
5d70: 5f 64 69 72 65 63 74 6f 72 79 3b 0a 20 20 20 20  _directory;.    
5d80: 7d 0a 20 20 7d 20 5b 6c 69 73 74 20 5b 66 69 6c  }.  } [list [fil
5d90: 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 67 65  e nativename [ge
5da0: 74 5f 70 77 64 5d 5d 5d 0a 20 20 64 6f 5f 74 65  t_pwd]]].  do_te
5db0: 73 74 20 70 72 61 67 6d 61 2d 39 2e 37 20 7b 0a  st pragma-9.7 {.
5dc0: 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b 20 0a      catchsql { .
5dd0: 20 20 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d        PRAGMA tem
5de0: 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72  p_store_director
5df0: 79 3d 27 2f 4e 4f 4e 2f 45 58 49 53 54 45 4e 54  y='/NON/EXISTENT
5e00: 2f 50 41 54 48 2f 46 4f 4f 42 41 52 27 3b 0a 20  /PATH/FOOBAR';. 
5e10: 20 20 20 7d 0a 20 20 7d 20 7b 31 20 7b 6e 6f 74     }.  } {1 {not
5e20: 20 61 20 77 72 69 74 61 62 6c 65 20 64 69 72 65   a writable dire
5e30: 63 74 6f 72 79 7d 7d 0a 20 20 64 6f 5f 74 65 73  ctory}}.  do_tes
5e40: 74 20 70 72 61 67 6d 61 2d 39 2e 38 20 7b 0a 20  t pragma-9.8 {. 
5e50: 20 20 20 65 78 65 63 73 71 6c 20 7b 20 0a 20 20     execsql { .  
5e60: 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f      PRAGMA temp_
5e70: 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 3d  store_directory=
5e80: 27 27 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 7d  '';.    }.  } {}
5e90: 0a 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78  .  if {![info ex
5ea0: 69 73 74 73 20 54 45 4d 50 5f 53 54 4f 52 45 5d  ists TEMP_STORE]
5eb0: 20 7c 7c 20 24 54 45 4d 50 5f 53 54 4f 52 45 3c   || $TEMP_STORE<
5ec0: 3d 31 7d 20 7b 0a 20 20 20 20 69 66 63 61 70 61  =1} {.    ifcapa
5ed0: 62 6c 65 20 74 65 6d 70 64 62 20 7b 0a 20 20 20  ble tempdb {.   
5ee0: 20 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d     do_test pragm
5ef0: 61 2d 39 2e 39 20 7b 0a 20 20 20 20 20 20 20 20  a-9.9 {.        
5f00: 65 78 65 63 73 71 6c 20 7b 20 0a 20 20 20 20 20  execsql { .     
5f10: 20 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70       PRAGMA temp
5f20: 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79  _store_directory
5f30: 3b 0a 20 20 20 20 20 20 20 20 20 20 50 52 41 47  ;.          PRAG
5f40: 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 3d 46 49  MA temp_store=FI
5f50: 4c 45 3b 0a 20 20 20 20 20 20 20 20 20 20 43 52  LE;.          CR
5f60: 45 41 54 45 20 54 45 4d 50 20 54 41 42 4c 45 20  EATE TEMP TABLE 
5f70: 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63  temp_store_direc
5f80: 74 6f 72 79 5f 74 65 73 74 28 61 20 69 6e 74 65  tory_test(a inte
5f90: 67 65 72 29 3b 0a 20 20 20 20 20 20 20 20 20 20  ger);.          
5fa0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 65 6d 70  INSERT INTO temp
5fb0: 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79  _store_directory
5fc0: 5f 74 65 73 74 20 76 61 6c 75 65 73 20 28 32 29  _test values (2)
5fd0: 3b 0a 20 20 20 20 20 20 20 20 20 20 53 45 4c 45  ;.          SELE
5fe0: 43 54 20 2a 20 46 52 4f 4d 20 74 65 6d 70 5f 73  CT * FROM temp_s
5ff0: 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 5f 74  tore_directory_t
6000: 65 73 74 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  est;.        }. 
6010: 20 20 20 20 20 7d 20 7b 32 7d 0a 20 20 20 20 20       } {2}.     
6020: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
6030: 39 2e 31 30 20 7b 0a 20 20 20 20 20 20 20 20 63  9.10 {.        c
6040: 61 74 63 68 73 71 6c 20 22 0a 20 20 20 20 20 20  atchsql ".      
6050: 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f      PRAGMA temp_
6060: 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 3d  store_directory=
6070: 27 24 70 77 64 27 3b 0a 20 20 20 20 20 20 20 20  '$pwd';.        
6080: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
6090: 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63  temp_store_direc
60a0: 74 6f 72 79 5f 74 65 73 74 3b 0a 20 20 20 20 20  tory_test;.     
60b0: 20 20 20 22 0a 20 20 20 20 20 20 7d 20 7b 31 20     ".      } {1 
60c0: 7b 6e 6f 20 73 75 63 68 20 74 61 62 6c 65 3a 20  {no such table: 
60d0: 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63  temp_store_direc
60e0: 74 6f 72 79 5f 74 65 73 74 7d 7d 0a 20 20 20 20  tory_test}}.    
60f0: 7d 0a 20 20 7d 0a 7d 0a 64 6f 5f 74 65 73 74 20  }.  }.}.do_test 
6100: 70 72 61 67 6d 61 2d 39 2e 31 31 20 7b 0a 20 20  pragma-9.11 {.  
6110: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52  execsql {.    PR
6120: 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 20  AGMA temp_store 
6130: 3d 20 30 3b 0a 20 20 20 20 50 52 41 47 4d 41 20  = 0;.    PRAGMA 
6140: 74 65 6d 70 5f 73 74 6f 72 65 3b 0a 20 20 7d 0a  temp_store;.  }.
6150: 7d 20 7b 30 7d 0a 64 6f 5f 74 65 73 74 20 70 72  } {0}.do_test pr
6160: 61 67 6d 61 2d 39 2e 31 32 20 7b 0a 20 20 65 78  agma-9.12 {.  ex
6170: 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47  ecsql {.    PRAG
6180: 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 20 3d 20  MA temp_store = 
6190: 31 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 74 65  1;.    PRAGMA te
61a0: 6d 70 5f 73 74 6f 72 65 3b 0a 20 20 7d 0a 7d 20  mp_store;.  }.} 
61b0: 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67  {1}.do_test prag
61c0: 6d 61 2d 39 2e 31 33 20 7b 0a 20 20 65 78 65 63  ma-9.13 {.  exec
61d0: 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41  sql {.    PRAGMA
61e0: 20 74 65 6d 70 5f 73 74 6f 72 65 20 3d 20 32 3b   temp_store = 2;
61f0: 0a 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70  .    PRAGMA temp
6200: 5f 73 74 6f 72 65 3b 0a 20 20 7d 0a 7d 20 7b 32  _store;.  }.} {2
6210: 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  }.do_test pragma
6220: 2d 39 2e 31 34 20 7b 0a 20 20 65 78 65 63 73 71  -9.14 {.  execsq
6230: 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 74  l {.    PRAGMA t
6240: 65 6d 70 5f 73 74 6f 72 65 20 3d 20 33 3b 0a 20  emp_store = 3;. 
6250: 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73     PRAGMA temp_s
6260: 74 6f 72 65 3b 0a 20 20 7d 0a 7d 20 7b 30 7d 0a  tore;.  }.} {0}.
6270: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 39  do_test pragma-9
6280: 2e 31 35 20 7b 0a 20 20 63 61 74 63 68 73 71 6c  .15 {.  catchsql
6290: 20 7b 0a 20 20 20 20 42 45 47 49 4e 20 45 58 43   {.    BEGIN EXC
62a0: 4c 55 53 49 56 45 3b 0a 20 20 20 20 43 52 45 41  LUSIVE;.    CREA
62b0: 54 45 20 54 45 4d 50 20 54 41 42 4c 45 20 74 65  TE TEMP TABLE te
62c0: 6d 70 5f 74 61 62 6c 65 28 74 29 3b 0a 20 20 20  mp_table(t);.   
62d0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 65 6d   INSERT INTO tem
62e0: 70 5f 74 61 62 6c 65 20 56 41 4c 55 45 53 28 27  p_table VALUES('
62f0: 76 61 6c 75 61 62 6c 65 20 64 61 74 61 27 29 3b  valuable data');
6300: 0a 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70  .    PRAGMA temp
6310: 5f 73 74 6f 72 65 20 3d 20 31 3b 0a 20 20 7d 0a  _store = 1;.  }.
6320: 7d 20 7b 31 20 7b 74 65 6d 70 6f 72 61 72 79 20  } {1 {temporary 
6330: 73 74 6f 72 61 67 65 20 63 61 6e 6e 6f 74 20 62  storage cannot b
6340: 65 20 63 68 61 6e 67 65 64 20 66 72 6f 6d 20 77  e changed from w
6350: 69 74 68 69 6e 20 61 20 74 72 61 6e 73 61 63 74  ithin a transact
6360: 69 6f 6e 7d 7d 0a 64 6f 5f 74 65 73 74 20 70 72  ion}}.do_test pr
6370: 61 67 6d 61 2d 39 2e 31 36 20 7b 0a 20 20 65 78  agma-9.16 {.  ex
6380: 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45  ecsql {.    SELE
6390: 43 54 20 2a 20 46 52 4f 4d 20 74 65 6d 70 5f 74  CT * FROM temp_t
63a0: 61 62 6c 65 3b 0a 20 20 20 20 43 4f 4d 4d 49 54  able;.    COMMIT
63b0: 3b 0a 20 20 7d 0a 7d 20 7b 7b 76 61 6c 75 61 62  ;.  }.} {{valuab
63c0: 6c 65 20 64 61 74 61 7d 7d 0a 0a 64 6f 5f 74 65  le data}}..do_te
63d0: 73 74 20 70 72 61 67 6d 61 2d 39 2e 31 37 20 7b  st pragma-9.17 {
63e0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
63f0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 65 6d   INSERT INTO tem
6400: 70 5f 74 61 62 6c 65 20 56 41 4c 55 45 53 28 27  p_table VALUES('
6410: 76 61 6c 75 61 62 6c 65 20 64 61 74 61 20 49 49  valuable data II
6420: 27 29 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a  ');.    SELECT *
6430: 20 46 52 4f 4d 20 74 65 6d 70 5f 74 61 62 6c 65   FROM temp_table
6440: 3b 0a 20 20 7d 0a 7d 20 7b 7b 76 61 6c 75 61 62  ;.  }.} {{valuab
6450: 6c 65 20 64 61 74 61 7d 20 7b 76 61 6c 75 61 62  le data} {valuab
6460: 6c 65 20 64 61 74 61 20 49 49 7d 7d 0a 0a 64 6f  le data II}}..do
6470: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 39 2e 31  _test pragma-9.1
6480: 38 20 7b 0a 20 20 73 65 74 20 72 63 20 5b 63 61  8 {.  set rc [ca
6490: 74 63 68 20 7b 0a 20 20 20 20 64 62 20 65 76 61  tch {.    db eva
64a0: 6c 20 7b 53 45 4c 45 43 54 20 74 20 46 52 4f 4d  l {SELECT t FROM
64b0: 20 74 65 6d 70 5f 74 61 62 6c 65 7d 20 7b 0a 20   temp_table} {. 
64c0: 20 20 20 20 20 65 78 65 63 73 71 6c 20 7b 70 72       execsql {pr
64d0: 61 67 6d 61 20 74 65 6d 70 5f 73 74 6f 72 65 20  agma temp_store 
64e0: 3d 20 31 7d 0a 20 20 20 20 7d 0a 20 20 7d 20 6d  = 1}.    }.  } m
64f0: 73 67 5d 0a 20 20 6c 69 73 74 20 24 72 63 20 24  sg].  list $rc $
6500: 6d 73 67 0a 7d 20 7b 31 20 7b 74 65 6d 70 6f 72  msg.} {1 {tempor
6510: 61 72 79 20 73 74 6f 72 61 67 65 20 63 61 6e 6e  ary storage cann
6520: 6f 74 20 62 65 20 63 68 61 6e 67 65 64 20 66 72  ot be changed fr
6530: 6f 6d 20 77 69 74 68 69 6e 20 61 20 74 72 61 6e  om within a tran
6540: 73 61 63 74 69 6f 6e 7d 7d 0a 0a 7d 20 3b 23 20  saction}}..} ;# 
6550: 69 66 63 61 70 61 62 6c 65 20 70 61 67 65 72 5f  ifcapable pager_
6560: 70 72 61 67 6d 61 73 0a 0a 69 66 63 61 70 61 62  pragmas..ifcapab
6570: 6c 65 20 74 72 69 67 67 65 72 20 7b 0a 0a 64 6f  le trigger {..do
6580: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 30 2e  _test pragma-10.
6590: 30 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b  0 {.  catchsql {
65a0: 0a 20 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20  .    DROP TABLE 
65b0: 6d 61 69 6e 2e 74 31 3b 0a 20 20 7d 0a 20 20 65  main.t1;.  }.  e
65c0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41  xecsql {.    PRA
65d0: 47 4d 41 20 63 6f 75 6e 74 5f 63 68 61 6e 67 65  GMA count_change
65e0: 73 20 3d 20 31 3b 0a 0a 20 20 20 20 43 52 45 41  s = 1;..    CREA
65f0: 54 45 20 54 41 42 4c 45 20 74 31 28 61 20 50 52  TE TABLE t1(a PR
6600: 49 4d 41 52 59 20 4b 45 59 29 3b 0a 20 20 20 20  IMARY KEY);.    
6610: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 5f  CREATE TABLE t1_
6620: 6d 69 72 72 6f 72 28 61 29 3b 0a 20 20 20 20 43  mirror(a);.    C
6630: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 5f 6d  REATE TABLE t1_m
6640: 69 72 72 6f 72 32 28 61 29 3b 0a 20 20 20 20 43  irror2(a);.    C
6650: 52 45 41 54 45 20 54 52 49 47 47 45 52 20 74 31  REATE TRIGGER t1
6660: 5f 62 69 20 42 45 46 4f 52 45 20 49 4e 53 45 52  _bi BEFORE INSER
6670: 54 20 4f 4e 20 74 31 20 42 45 47 49 4e 20 0a 20  T ON t1 BEGIN . 
6680: 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f       INSERT INTO
6690: 20 74 31 5f 6d 69 72 72 6f 72 20 56 41 4c 55 45   t1_mirror VALUE
66a0: 53 28 6e 65 77 2e 61 29 3b 0a 20 20 20 20 45 4e  S(new.a);.    EN
66b0: 44 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54 52  D;.    CREATE TR
66c0: 49 47 47 45 52 20 74 31 5f 61 69 20 41 46 54 45  IGGER t1_ai AFTE
66d0: 52 20 49 4e 53 45 52 54 20 4f 4e 20 74 31 20 42  R INSERT ON t1 B
66e0: 45 47 49 4e 20 0a 20 20 20 20 20 20 49 4e 53 45  EGIN .      INSE
66f0: 52 54 20 49 4e 54 4f 20 74 31 5f 6d 69 72 72 6f  RT INTO t1_mirro
6700: 72 32 20 56 41 4c 55 45 53 28 6e 65 77 2e 61 29  r2 VALUES(new.a)
6710: 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20 20 20 43  ;.    END;.    C
6720: 52 45 41 54 45 20 54 52 49 47 47 45 52 20 74 31  REATE TRIGGER t1
6730: 5f 62 75 20 42 45 46 4f 52 45 20 55 50 44 41 54  _bu BEFORE UPDAT
6740: 45 20 4f 4e 20 74 31 20 42 45 47 49 4e 20 0a 20  E ON t1 BEGIN . 
6750: 20 20 20 20 20 55 50 44 41 54 45 20 74 31 5f 6d       UPDATE t1_m
6760: 69 72 72 6f 72 20 53 45 54 20 61 20 3d 20 6e 65  irror SET a = ne
6770: 77 2e 61 20 57 48 45 52 45 20 61 20 3d 20 6f 6c  w.a WHERE a = ol
6780: 64 2e 61 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20  d.a;.    END;.  
6790: 20 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52    CREATE TRIGGER
67a0: 20 74 31 5f 61 75 20 41 46 54 45 52 20 55 50 44   t1_au AFTER UPD
67b0: 41 54 45 20 4f 4e 20 74 31 20 42 45 47 49 4e 20  ATE ON t1 BEGIN 
67c0: 0a 20 20 20 20 20 20 55 50 44 41 54 45 20 74 31  .      UPDATE t1
67d0: 5f 6d 69 72 72 6f 72 32 20 53 45 54 20 61 20 3d  _mirror2 SET a =
67e0: 20 6e 65 77 2e 61 20 57 48 45 52 45 20 61 20 3d   new.a WHERE a =
67f0: 20 6f 6c 64 2e 61 3b 0a 20 20 20 20 45 4e 44 3b   old.a;.    END;
6800: 0a 20 20 20 20 43 52 45 41 54 45 20 54 52 49 47  .    CREATE TRIG
6810: 47 45 52 20 74 31 5f 62 64 20 42 45 46 4f 52 45  GER t1_bd BEFORE
6820: 20 44 45 4c 45 54 45 20 4f 4e 20 74 31 20 42 45   DELETE ON t1 BE
6830: 47 49 4e 20 0a 20 20 20 20 20 20 44 45 4c 45 54  GIN .      DELET
6840: 45 20 46 52 4f 4d 20 74 31 5f 6d 69 72 72 6f 72  E FROM t1_mirror
6850: 20 57 48 45 52 45 20 61 20 3d 20 6f 6c 64 2e 61   WHERE a = old.a
6860: 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20 20 20 43  ;.    END;.    C
6870: 52 45 41 54 45 20 54 52 49 47 47 45 52 20 74 31  REATE TRIGGER t1
6880: 5f 61 64 20 41 46 54 45 52 20 44 45 4c 45 54 45  _ad AFTER DELETE
6890: 20 4f 4e 20 74 31 20 42 45 47 49 4e 20 0a 20 20   ON t1 BEGIN .  
68a0: 20 20 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20      DELETE FROM 
68b0: 74 31 5f 6d 69 72 72 6f 72 32 20 57 48 45 52 45  t1_mirror2 WHERE
68c0: 20 61 20 3d 20 6f 6c 64 2e 61 3b 0a 20 20 20 20   a = old.a;.    
68d0: 45 4e 44 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a 64  END;.  }.} {}..d
68e0: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 30  o_test pragma-10
68f0: 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .1 {.  execsql {
6900: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
6910: 20 74 31 20 56 41 4c 55 45 53 28 72 61 6e 64 73   t1 VALUES(rands
6920: 74 72 28 31 30 2c 31 30 29 29 3b 0a 20 20 7d 0a  tr(10,10));.  }.
6930: 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 70 72  } {1}.do_test pr
6940: 61 67 6d 61 2d 31 30 2e 32 20 7b 0a 20 20 65 78  agma-10.2 {.  ex
6950: 65 63 73 71 6c 20 7b 0a 20 20 20 20 55 50 44 41  ecsql {.    UPDA
6960: 54 45 20 74 31 20 53 45 54 20 61 20 3d 20 72 61  TE t1 SET a = ra
6970: 6e 64 73 74 72 28 31 30 2c 31 30 29 3b 0a 20 20  ndstr(10,10);.  
6980: 7d 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20  }.} {1}.do_test 
6990: 70 72 61 67 6d 61 2d 31 30 2e 33 20 7b 0a 20 20  pragma-10.3 {.  
69a0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 44 45  execsql {.    DE
69b0: 4c 45 54 45 20 46 52 4f 4d 20 74 31 3b 0a 20 20  LETE FROM t1;.  
69c0: 7d 0a 7d 20 7b 31 7d 0a 0a 7d 20 3b 23 20 69 66  }.} {1}..} ;# if
69d0: 63 61 70 61 62 6c 65 20 74 72 69 67 67 65 72 0a  capable trigger.
69e0: 0a 69 66 63 61 70 61 62 6c 65 20 73 63 68 65 6d  .ifcapable schem
69f0: 61 5f 70 72 61 67 6d 61 73 20 7b 0a 20 20 64 6f  a_pragmas {.  do
6a00: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 31 2e  _test pragma-11.
6a10: 31 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 32  1 {.    execsql2
6a20: 20 7b 0a 20 20 20 20 20 20 70 72 61 67 6d 61 20   {.      pragma 
6a30: 63 6f 6c 6c 61 74 69 6f 6e 5f 6c 69 73 74 3b 0a  collation_list;.
6a40: 20 20 20 20 7d 0a 20 20 7d 20 7b 73 65 71 20 30      }.  } {seq 0
6a50: 20 6e 61 6d 65 20 4e 4f 43 41 53 45 20 73 65 71   name NOCASE seq
6a60: 20 31 20 6e 61 6d 65 20 52 54 52 49 4d 20 73 65   1 name RTRIM se
6a70: 71 20 32 20 6e 61 6d 65 20 42 49 4e 41 52 59 7d  q 2 name BINARY}
6a80: 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .  do_test pragm
6a90: 61 2d 31 31 2e 32 20 7b 0a 20 20 20 20 64 62 20  a-11.2 {.    db 
6aa0: 63 6f 6c 6c 61 74 65 20 4e 65 77 5f 43 6f 6c 6c  collate New_Coll
6ab0: 61 74 69 6f 6e 20 62 6c 61 68 2e 2e 2e 0a 20 20  ation blah....  
6ac0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
6ad0: 20 20 70 72 61 67 6d 61 20 63 6f 6c 6c 61 74 69    pragma collati
6ae0: 6f 6e 5f 6c 69 73 74 3b 0a 20 20 20 20 7d 0a 20  on_list;.    }. 
6af0: 20 7d 20 7b 30 20 4e 65 77 5f 43 6f 6c 6c 61 74   } {0 New_Collat
6b00: 69 6f 6e 20 31 20 4e 4f 43 41 53 45 20 32 20 52  ion 1 NOCASE 2 R
6b10: 54 52 49 4d 20 33 20 42 49 4e 41 52 59 7d 0a 7d  TRIM 3 BINARY}.}
6b20: 0a 0a 69 66 63 61 70 61 62 6c 65 20 73 63 68 65  ..ifcapable sche
6b30: 6d 61 5f 70 72 61 67 6d 61 73 26 26 74 65 6d 70  ma_pragmas&&temp
6b40: 64 62 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 70  db {.  do_test p
6b50: 72 61 67 6d 61 2d 31 32 2e 31 20 7b 0a 20 20 20  ragma-12.1 {.   
6b60: 20 73 71 6c 69 74 65 33 20 64 62 32 20 74 65 73   sqlite3 db2 tes
6b70: 74 2e 64 62 0a 20 20 20 20 65 78 65 63 73 71 6c  t.db.    execsql
6b80: 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20   {.      PRAGMA 
6b90: 74 65 6d 70 2e 74 61 62 6c 65 5f 69 6e 66 6f 28  temp.table_info(
6ba0: 27 61 62 63 27 29 3b 0a 20 20 20 20 7d 20 64 62  'abc');.    } db
6bb0: 32 0a 20 20 7d 20 7b 7d 0a 20 20 64 62 32 20 63  2.  } {}.  db2 c
6bc0: 6c 6f 73 65 0a 0a 20 20 64 6f 5f 74 65 73 74 20  lose..  do_test 
6bd0: 70 72 61 67 6d 61 2d 31 32 2e 32 20 7b 0a 20 20  pragma-12.2 {.  
6be0: 20 20 73 71 6c 69 74 65 33 20 64 62 32 20 74 65    sqlite3 db2 te
6bf0: 73 74 2e 64 62 0a 20 20 20 20 65 78 65 63 73 71  st.db.    execsq
6c00: 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41  l {.      PRAGMA
6c10: 20 74 65 6d 70 2e 64 65 66 61 75 6c 74 5f 63 61   temp.default_ca
6c20: 63 68 65 5f 73 69 7a 65 20 3d 20 32 30 30 3b 0a  che_size = 200;.
6c30: 20 20 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d        PRAGMA tem
6c40: 70 2e 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f  p.default_cache_
6c50: 73 69 7a 65 3b 0a 20 20 20 20 7d 20 64 62 32 0a  size;.    } db2.
6c60: 20 20 7d 20 7b 32 30 30 7d 0a 20 20 64 62 32 20    } {200}.  db2 
6c70: 63 6c 6f 73 65 0a 0a 20 20 64 6f 5f 74 65 73 74  close..  do_test
6c80: 20 70 72 61 67 6d 61 2d 31 32 2e 33 20 7b 0a 20   pragma-12.3 {. 
6c90: 20 20 20 73 71 6c 69 74 65 33 20 64 62 32 20 74     sqlite3 db2 t
6ca0: 65 73 74 2e 64 62 0a 20 20 20 20 65 78 65 63 73  est.db.    execs
6cb0: 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d  ql {.      PRAGM
6cc0: 41 20 74 65 6d 70 2e 63 61 63 68 65 5f 73 69 7a  A temp.cache_siz
6cd0: 65 20 3d 20 34 30 30 3b 0a 20 20 20 20 20 20 50  e = 400;.      P
6ce0: 52 41 47 4d 41 20 74 65 6d 70 2e 63 61 63 68 65  RAGMA temp.cache
6cf0: 5f 73 69 7a 65 3b 0a 20 20 20 20 7d 20 64 62 32  _size;.    } db2
6d00: 0a 20 20 7d 20 7b 34 30 30 7d 0a 20 20 64 62 32  .  } {400}.  db2
6d10: 20 63 6c 6f 73 65 0a 7d 0a 0a 69 66 63 61 70 61   close.}..ifcapa
6d20: 62 6c 65 20 62 6c 6f 62 6c 69 74 20 7b 0a 0a 64  ble bloblit {..d
6d30: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 33  o_test pragma-13
6d40: 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .1 {.  execsql {
6d50: 0a 20 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20  .    DROP TABLE 
6d60: 49 46 20 45 58 49 53 54 53 20 74 34 3b 0a 20 20  IF EXISTS t4;.  
6d70: 20 20 50 52 41 47 4d 41 20 76 64 62 65 5f 74 72    PRAGMA vdbe_tr
6d80: 61 63 65 3d 6f 6e 3b 0a 20 20 20 20 50 52 41 47  ace=on;.    PRAG
6d90: 4d 41 20 76 64 62 65 5f 6c 69 73 74 69 6e 67 3d  MA vdbe_listing=
6da0: 6f 6e 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 73  on;.    PRAGMA s
6db0: 71 6c 5f 74 72 61 63 65 3d 6f 6e 3b 0a 20 20 20  ql_trace=on;.   
6dc0: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 34   CREATE TABLE t4
6dd0: 28 61 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41  (a INTEGER PRIMA
6de0: 52 59 20 4b 45 59 2c 62 29 3b 0a 20 20 20 20 49  RY KEY,b);.    I
6df0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 34 28 62 29  NSERT INTO t4(b)
6e00: 20 56 41 4c 55 45 53 28 78 27 30 31 32 33 34 35   VALUES(x'012345
6e10: 36 37 38 39 61 62 63 64 65 66 30 31 32 33 34 35  6789abcdef012345
6e20: 36 37 38 39 61 62 63 64 65 66 30 31 32 33 34 35  6789abcdef012345
6e30: 36 37 38 39 27 29 3b 0a 20 20 20 20 49 4e 53 45  6789');.    INSE
6e40: 52 54 20 49 4e 54 4f 20 74 34 28 62 29 20 56 41  RT INTO t4(b) VA
6e50: 4c 55 45 53 28 72 61 6e 64 73 74 72 28 33 30 2c  LUES(randstr(30,
6e60: 33 30 29 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  30));.    INSERT
6e70: 20 49 4e 54 4f 20 74 34 28 62 29 20 56 41 4c 55   INTO t4(b) VALU
6e80: 45 53 28 31 2e 32 33 34 35 36 29 3b 0a 20 20 20  ES(1.23456);.   
6e90: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 34 28   INSERT INTO t4(
6ea0: 62 29 20 56 41 4c 55 45 53 28 4e 55 4c 4c 29 3b  b) VALUES(NULL);
6eb0: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
6ec0: 20 74 34 28 62 29 20 56 41 4c 55 45 53 28 30 29   t4(b) VALUES(0)
6ed0: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
6ee0: 4f 20 74 34 28 62 29 20 53 45 4c 45 43 54 20 62  O t4(b) SELECT b
6ef0: 7c 7c 62 7c 7c 62 7c 7c 62 20 46 52 4f 4d 20 74  ||b||b||b FROM t
6f00: 34 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20  4;.    SELECT * 
6f10: 46 52 4f 4d 20 74 34 3b 0a 20 20 7d 0a 20 20 65  FROM t4;.  }.  e
6f20: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41  xecsql {.    PRA
6f30: 47 4d 41 20 76 64 62 65 5f 74 72 61 63 65 3d 6f  GMA vdbe_trace=o
6f40: 66 66 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 76  ff;.    PRAGMA v
6f50: 64 62 65 5f 6c 69 73 74 69 6e 67 3d 6f 66 66 3b  dbe_listing=off;
6f60: 0a 20 20 20 20 50 52 41 47 4d 41 20 73 71 6c 5f  .    PRAGMA sql_
6f70: 74 72 61 63 65 3d 6f 66 66 3b 0a 20 20 7d 0a 7d  trace=off;.  }.}
6f80: 20 7b 7d 0a 0a 7d 20 3b 23 20 69 66 63 61 70 61   {}..} ;# ifcapa
6f90: 62 6c 65 20 62 6c 6f 62 6c 69 74 20 0a 0a 69 66  ble bloblit ..if
6fa0: 63 61 70 61 62 6c 65 20 70 61 67 65 72 5f 70 72  capable pager_pr
6fb0: 61 67 6d 61 73 20 7b 0a 20 20 64 62 20 63 6c 6f  agmas {.  db clo
6fc0: 73 65 0a 20 20 66 6f 72 63 65 64 65 6c 65 74 65  se.  forcedelete
6fd0: 20 74 65 73 74 2e 64 62 0a 20 20 73 71 6c 69 74   test.db.  sqlit
6fe0: 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a 0a 20  e3 db test.db.. 
6ff0: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
7000: 31 34 2e 31 20 7b 0a 20 20 20 20 65 78 65 63 73  14.1 {.    execs
7010: 71 6c 20 7b 20 70 72 61 67 6d 61 20 61 75 74 6f  ql { pragma auto
7020: 5f 76 61 63 75 75 6d 20 3d 20 30 20 7d 0a 20 20  _vacuum = 0 }.  
7030: 20 20 65 78 65 63 73 71 6c 20 7b 20 70 72 61 67    execsql { prag
7040: 6d 61 20 70 61 67 65 5f 63 6f 75 6e 74 20 7d 0a  ma page_count }.
7050: 20 20 7d 20 7b 30 7d 0a 0a 20 20 64 6f 5f 74 65    } {0}..  do_te
7060: 73 74 20 70 72 61 67 6d 61 2d 31 34 2e 32 20 7b  st pragma-14.2 {
7070: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 20 0a  .    execsql { .
7080: 20 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42        CREATE TAB
7090: 4c 45 20 61 62 63 28 61 2c 20 62 2c 20 63 29 3b  LE abc(a, b, c);
70a0: 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 70 61  .      PRAGMA pa
70b0: 67 65 5f 63 6f 75 6e 74 3b 0a 20 20 20 20 7d 0a  ge_count;.    }.
70c0: 20 20 7d 20 7b 32 7d 0a 20 20 64 6f 5f 74 65 73    } {2}.  do_tes
70d0: 74 20 70 72 61 67 6d 61 2d 31 34 2e 32 75 63 20  t pragma-14.2uc 
70e0: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 70  {.    execsql {p
70f0: 72 61 67 6d 61 20 50 41 47 45 5f 43 4f 55 4e 54  ragma PAGE_COUNT
7100: 7d 0a 20 20 7d 20 7b 32 7d 0a 0a 20 20 64 6f 5f  }.  } {2}..  do_
7110: 74 65 73 74 20 70 72 61 67 6d 61 2d 31 34 2e 33  test pragma-14.3
7120: 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b   {.    execsql {
7130: 20 0a 20 20 20 20 20 20 42 45 47 49 4e 3b 0a 20   .      BEGIN;. 
7140: 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c       CREATE TABL
7150: 45 20 64 65 66 28 61 2c 20 62 2c 20 63 29 3b 0a  E def(a, b, c);.
7160: 20 20 20 20 20 20 50 52 41 47 4d 41 20 70 61 67        PRAGMA pag
7170: 65 5f 63 6f 75 6e 74 3b 0a 20 20 20 20 7d 0a 20  e_count;.    }. 
7180: 20 7d 20 7b 33 7d 0a 20 20 64 6f 5f 74 65 73 74   } {3}.  do_test
7190: 20 70 72 61 67 6d 61 2d 31 34 2e 33 75 63 20 7b   pragma-14.3uc {
71a0: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 70 72  .    execsql {pr
71b0: 61 67 6d 61 20 50 41 47 45 5f 43 4f 55 4e 54 7d  agma PAGE_COUNT}
71c0: 0a 20 20 7d 20 7b 33 7d 0a 0a 20 20 64 6f 5f 74  .  } {3}..  do_t
71d0: 65 73 74 20 70 72 61 67 6d 61 2d 31 34 2e 34 20  est pragma-14.4 
71e0: 7b 0a 20 20 20 20 73 65 74 20 70 61 67 65 5f 73  {.    set page_s
71f0: 69 7a 65 20 5b 64 62 20 6f 6e 65 20 7b 70 72 61  ize [db one {pra
7200: 67 6d 61 20 70 61 67 65 5f 73 69 7a 65 7d 5d 0a  gma page_size}].
7210: 20 20 20 20 65 78 70 72 20 5b 66 69 6c 65 20 73      expr [file s
7220: 69 7a 65 20 74 65 73 74 2e 64 62 5d 20 2f 20 24  ize test.db] / $
7230: 70 61 67 65 5f 73 69 7a 65 0a 20 20 7d 20 7b 32  page_size.  } {2
7240: 7d 0a 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61  }..  do_test pra
7250: 67 6d 61 2d 31 34 2e 35 20 7b 0a 20 20 20 20 65  gma-14.5 {.    e
7260: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 52  xecsql {.      R
7270: 4f 4c 4c 42 41 43 4b 3b 0a 20 20 20 20 20 20 50  OLLBACK;.      P
7280: 52 41 47 4d 41 20 70 61 67 65 5f 63 6f 75 6e 74  RAGMA page_count
7290: 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 32 7d 0a  ;.    }.  } {2}.
72a0: 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .  do_test pragm
72b0: 61 2d 31 34 2e 36 20 7b 0a 20 20 20 20 66 6f 72  a-14.6 {.    for
72c0: 63 65 64 65 6c 65 74 65 20 74 65 73 74 32 2e 64  cedelete test2.d
72d0: 62 0a 20 20 20 20 73 71 6c 69 74 65 33 20 64 62  b.    sqlite3 db
72e0: 32 20 74 65 73 74 32 2e 64 62 0a 20 20 20 20 65  2 test2.db.    e
72f0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50  xecsql {.      P
7300: 52 41 47 4d 41 20 61 75 74 6f 5f 76 61 63 75 75  RAGMA auto_vacuu
7310: 6d 20 3d 20 30 3b 0a 20 20 20 20 20 20 43 52 45  m = 0;.      CRE
7320: 41 54 45 20 54 41 42 4c 45 20 74 31 28 61 2c 20  ATE TABLE t1(a, 
7330: 62 2c 20 63 29 3b 0a 20 20 20 20 20 20 43 52 45  b, c);.      CRE
7340: 41 54 45 20 54 41 42 4c 45 20 74 32 28 61 2c 20  ATE TABLE t2(a, 
7350: 62 2c 20 63 29 3b 0a 20 20 20 20 20 20 43 52 45  b, c);.      CRE
7360: 41 54 45 20 54 41 42 4c 45 20 74 33 28 61 2c 20  ATE TABLE t3(a, 
7370: 62 2c 20 63 29 3b 0a 20 20 20 20 20 20 43 52 45  b, c);.      CRE
7380: 41 54 45 20 54 41 42 4c 45 20 74 34 28 61 2c 20  ATE TABLE t4(a, 
7390: 62 2c 20 63 29 3b 0a 20 20 20 20 7d 20 64 62 32  b, c);.    } db2
73a0: 0a 20 20 20 20 64 62 32 20 63 6c 6f 73 65 0a 20  .    db2 close. 
73b0: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
73c0: 20 20 20 41 54 54 41 43 48 20 27 74 65 73 74 32     ATTACH 'test2
73d0: 2e 64 62 27 20 41 53 20 61 75 78 3b 0a 20 20 20  .db' AS aux;.   
73e0: 20 20 20 50 52 41 47 4d 41 20 61 75 78 2e 70 61     PRAGMA aux.pa
73f0: 67 65 5f 63 6f 75 6e 74 3b 0a 20 20 20 20 7d 20  ge_count;.    } 
7400: 0a 20 20 7d 20 7b 35 7d 0a 20 20 64 6f 5f 74 65  .  } {5}.  do_te
7410: 73 74 20 70 72 61 67 6d 61 2d 31 34 2e 36 75 63  st pragma-14.6uc
7420: 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b   {.    execsql {
7430: 70 72 61 67 6d 61 20 41 55 58 2e 50 41 47 45 5f  pragma AUX.PAGE_
7440: 43 4f 55 4e 54 7d 0a 20 20 7d 20 7b 35 7d 0a 7d  COUNT}.  } {5}.}
7450: 0a 0a 23 20 54 65 73 74 20 74 68 61 74 20 74 68  ..# Test that th
7460: 65 20 76 61 6c 75 65 20 73 65 74 20 75 73 69 6e  e value set usin
7470: 67 20 74 68 65 20 63 61 63 68 65 5f 73 69 7a 65  g the cache_size
7480: 20 70 72 61 67 6d 61 20 69 73 20 6e 6f 74 20 72   pragma is not r
7490: 65 73 65 74 20 77 68 65 6e 20 74 68 65 0a 23 20  eset when the.# 
74a0: 73 63 68 65 6d 61 20 69 73 20 72 65 6c 6f 61 64  schema is reload
74b0: 65 64 2e 0a 23 0a 69 66 63 61 70 61 62 6c 65 20  ed..#.ifcapable 
74c0: 70 61 67 65 72 5f 70 72 61 67 6d 61 73 20 7b 0a  pager_pragmas {.
74d0: 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 73 71 6c    db close.  sql
74e0: 69 74 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a  ite3 db test.db.
74f0: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
7500: 2d 31 35 2e 31 20 7b 0a 20 20 20 20 65 78 65 63  -15.1 {.    exec
7510: 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47  sql {.      PRAG
7520: 4d 41 20 63 61 63 68 65 5f 73 69 7a 65 3d 35 39  MA cache_size=59
7530: 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 63  ;.      PRAGMA c
7540: 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 7d  ache_size;.    }
7550: 0a 20 20 7d 20 7b 35 39 7d 0a 20 20 64 6f 5f 74  .  } {59}.  do_t
7560: 65 73 74 20 70 72 61 67 6d 61 2d 31 35 2e 32 20  est pragma-15.2 
7570: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 20 64 62  {.    sqlite3 db
7580: 32 20 74 65 73 74 2e 64 62 0a 20 20 20 20 65 78  2 test.db.    ex
7590: 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 43 52  ecsql {.      CR
75a0: 45 41 54 45 20 54 41 42 4c 45 20 6e 65 77 74 61  EATE TABLE newta
75b0: 62 6c 65 28 61 2c 20 62 2c 20 63 29 3b 0a 20 20  ble(a, b, c);.  
75c0: 20 20 7d 20 64 62 32 0a 20 20 20 20 64 62 32 20    } db2.    db2 
75d0: 63 6c 6f 73 65 0a 20 20 7d 20 7b 7d 0a 20 20 64  close.  } {}.  d
75e0: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 35  o_test pragma-15
75f0: 2e 33 20 7b 0a 20 20 20 20 23 20 45 76 61 6c 75  .3 {.    # Evalu
7600: 61 74 69 6e 67 20 74 68 69 73 20 73 74 61 74 65  ating this state
7610: 6d 65 6e 74 20 77 69 6c 6c 20 63 61 75 73 65 20  ment will cause 
7620: 74 68 65 20 73 63 68 65 6d 61 20 74 6f 20 62 65  the schema to be
7630: 20 72 65 6c 6f 61 64 65 64 20 28 62 65 63 61 75   reloaded (becau
7640: 73 65 0a 20 20 20 20 23 20 74 68 65 20 73 63 68  se.    # the sch
7650: 65 6d 61 20 77 61 73 20 63 68 61 6e 67 65 64 20  ema was changed 
7660: 62 79 20 61 6e 6f 74 68 65 72 20 63 6f 6e 6e 65  by another conne
7670: 63 74 69 6f 6e 20 69 6e 20 70 72 61 67 6d 61 2d  ction in pragma-
7680: 31 35 2e 32 29 2e 20 41 74 20 6f 6e 65 0a 20 20  15.2). At one.  
7690: 20 20 23 20 70 6f 69 6e 74 20 74 68 65 72 65 20    # point there 
76a0: 77 61 73 20 61 20 62 75 67 20 74 68 61 74 20 72  was a bug that r
76b0: 65 73 65 74 20 74 68 65 20 63 61 63 68 65 5f 73  eset the cache_s
76c0: 69 7a 65 20 74 6f 20 69 74 73 20 64 65 66 61 75  ize to its defau
76d0: 6c 74 20 76 61 6c 75 65 0a 20 20 20 20 23 20 77  lt value.    # w
76e0: 68 65 6e 20 74 68 69 73 20 68 61 70 70 65 6e 65  hen this happene
76f0: 64 2e 20 0a 20 20 20 20 65 78 65 63 73 71 6c 20  d. .    execsql 
7700: 7b 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20  { SELECT * FROM 
7710: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 7d 0a  sqlite_master }.
7720: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 20 50 52      execsql { PR
7730: 41 47 4d 41 20 63 61 63 68 65 5f 73 69 7a 65 20  AGMA cache_size 
7740: 7d 0a 20 20 7d 20 7b 35 39 7d 0a 7d 0a 0a 23 20  }.  } {59}.}..# 
7750: 52 65 73 65 74 20 74 68 65 20 73 71 6c 69 74 65  Reset the sqlite
7760: 33 5f 74 65 6d 70 5f 64 69 72 65 63 74 6f 72 79  3_temp_directory
7770: 20 76 61 72 69 61 62 6c 65 20 66 6f 72 20 74 68   variable for th
7780: 65 20 6e 65 78 74 20 72 75 6e 20 6f 66 20 74 65  e next run of te
7790: 73 74 73 3a 0a 73 71 6c 69 74 65 33 20 64 62 58  sts:.sqlite3 dbX
77a0: 20 3a 6d 65 6d 6f 72 79 3a 0a 64 62 58 20 65 76   :memory:.dbX ev
77b0: 61 6c 20 7b 50 52 41 47 4d 41 20 74 65 6d 70 5f  al {PRAGMA temp_
77c0: 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 20  store_directory 
77d0: 3d 20 22 22 7d 0a 64 62 58 20 63 6c 6f 73 65 0a  = ""}.dbX close.
77e0: 0a 73 65 74 20 73 6b 69 70 5f 6c 6f 63 6b 5f 70  .set skip_lock_p
77f0: 72 6f 78 79 5f 74 65 73 74 73 20 5b 70 61 74 68  roxy_tests [path
7800: 5f 69 73 5f 64 6f 73 20 22 2e 22 5d 0a 69 66 63  _is_dos "."].ifc
7810: 61 70 61 62 6c 65 20 21 28 6c 6f 63 6b 5f 70 72  apable !(lock_pr
7820: 6f 78 79 5f 70 72 61 67 6d 61 73 26 26 70 72 65  oxy_pragmas&&pre
7830: 66 65 72 5f 70 72 6f 78 79 5f 6c 6f 63 6b 69 6e  fer_proxy_lockin
7840: 67 29 20 7b 0a 20 20 73 65 74 20 73 6b 69 70 5f  g) {.  set skip_
7850: 6c 6f 63 6b 5f 70 72 6f 78 79 5f 74 65 73 74 73  lock_proxy_tests
7860: 20 31 0a 7d 0a 0a 69 66 20 21 24 73 6b 69 70 5f   1.}..if !$skip_
7870: 6c 6f 63 6b 5f 70 72 6f 78 79 5f 74 65 73 74 73  lock_proxy_tests
7880: 20 7b 0a 20 20 73 65 74 20 73 71 6c 69 74 65 5f   {.  set sqlite_
7890: 68 6f 73 74 69 64 5f 6e 75 6d 20 31 0a 0a 20 20  hostid_num 1..  
78a0: 73 65 74 20 75 73 69 6e 67 5f 70 72 6f 78 79 20  set using_proxy 
78b0: 30 0a 20 20 66 6f 72 65 61 63 68 20 7b 6e 61 6d  0.  foreach {nam
78c0: 65 20 76 61 6c 75 65 7d 20 5b 61 72 72 61 79 20  e value} [array 
78d0: 67 65 74 20 65 6e 76 20 53 51 4c 49 54 45 5f 46  get env SQLITE_F
78e0: 4f 52 43 45 5f 50 52 4f 58 59 5f 4c 4f 43 4b 49  ORCE_PROXY_LOCKI
78f0: 4e 47 5d 20 7b 0a 20 20 20 20 73 65 74 20 75 73  NG] {.    set us
7900: 69 6e 67 5f 70 72 6f 78 79 20 24 76 61 6c 75 65  ing_proxy $value
7910: 0a 20 20 7d 0a 0a 20 20 23 20 54 65 73 74 20 74  .  }..  # Test t
7920: 68 65 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69  he lock_proxy_fi
7930: 6c 65 20 70 72 61 67 6d 61 73 2e 0a 20 20 23 0a  le pragmas..  #.
7940: 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 73 65 74    db close.  set
7950: 20 65 6e 76 28 53 51 4c 49 54 45 5f 46 4f 52 43   env(SQLITE_FORC
7960: 45 5f 50 52 4f 58 59 5f 4c 4f 43 4b 49 4e 47 29  E_PROXY_LOCKING)
7970: 20 22 30 22 0a 0a 20 20 73 71 6c 69 74 65 33 20   "0"..  sqlite3 
7980: 64 62 20 74 65 73 74 2e 64 62 0a 20 20 23 20 73  db test.db.  # s
7990: 65 74 20 6c 6f 63 6b 20 70 72 6f 78 79 20 6e 61  et lock proxy na
79a0: 6d 65 20 61 6e 64 20 74 68 65 6e 20 71 75 65 72  me and then quer
79b0: 79 20 69 74 20 76 69 61 20 70 72 61 67 6d 61 20  y it via pragma 
79c0: 69 6e 74 65 72 66 61 63 65 0a 20 20 73 65 74 20  interface.  set 
79d0: 6c 70 70 20 5b 65 78 65 63 20 6d 6b 74 65 6d 70  lpp [exec mktemp
79e0: 20 2d 74 20 22 70 72 6f 78 79 31 22 5d 0a 20 20   -t "proxy1"].  
79f0: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31  do_test pragma-1
7a00: 36 2e 31 20 7b 0a 20 20 20 20 65 78 65 63 73 71  6.1 {.    execsq
7a10: 6c 20 22 50 52 41 47 4d 41 20 6c 6f 63 6b 5f 70  l "PRAGMA lock_p
7a20: 72 6f 78 79 5f 66 69 6c 65 3d 27 24 6c 70 70 27  roxy_file='$lpp'
7a30: 22 0a 20 20 20 20 65 78 65 63 73 71 6c 20 22 73  ".    execsql "s
7a40: 65 6c 65 63 74 20 2a 20 66 72 6f 6d 20 73 71 6c  elect * from sql
7a50: 69 74 65 5f 6d 61 73 74 65 72 22 0a 20 20 20 20  ite_master".    
7a60: 65 78 65 63 73 71 6c 20 22 50 52 41 47 4d 41 20  execsql "PRAGMA 
7a70: 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 22  lock_proxy_file"
7a80: 0a 20 20 7d 20 24 6c 70 70 0a 0a 20 20 23 20 32  .  } $lpp..  # 2
7a90: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
7aa0: 74 69 6f 6e 73 20 63 61 6e 20 73 68 61 72 65 20  tions can share 
7ab0: 61 20 6c 6f 63 6b 20 70 72 6f 78 79 20 66 69 6c  a lock proxy fil
7ac0: 65 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67  e.  do_test prag
7ad0: 6d 61 2d 31 36 2e 32 20 7b 0a 20 20 20 20 73 71  ma-16.2 {.    sq
7ae0: 6c 69 74 65 33 20 64 62 32 20 74 65 73 74 2e 64  lite3 db2 test.d
7af0: 62 0a 20 20 20 20 65 78 65 63 73 71 6c 20 22 50  b.    execsql "P
7b00: 52 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78 79  RAGMA lock_proxy
7b10: 5f 66 69 6c 65 3d 27 24 6c 70 70 27 22 20 64 62  _file='$lpp'" db
7b20: 32 0a 20 20 7d 20 7b 7d 0a 0a 20 20 64 62 32 20  2.  } {}..  db2 
7b30: 63 6c 6f 73 65 0a 20 20 23 20 32 6e 64 20 64 61  close.  # 2nd da
7b40: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
7b50: 6e 20 73 68 6f 75 6c 64 20 61 75 74 6f 2d 6e 61  n should auto-na
7b60: 6d 65 20 61 6e 20 65 78 69 73 74 69 6e 67 20 6c  me an existing l
7b70: 6f 63 6b 20 70 72 6f 78 79 20 66 69 6c 65 0a 20  ock proxy file. 
7b80: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
7b90: 31 36 2e 32 2e 31 20 7b 0a 20 20 20 20 73 71 6c  16.2.1 {.    sql
7ba0: 69 74 65 33 20 64 62 32 20 74 65 73 74 2e 64 62  ite3 db2 test.db
7bb0: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
7bc0: 20 20 20 20 20 50 52 41 47 4d 41 20 6c 6f 63 6b       PRAGMA lock
7bd0: 5f 70 72 6f 78 79 5f 66 69 6c 65 3d 22 3a 61 75  _proxy_file=":au
7be0: 74 6f 3a 22 3b 0a 20 20 20 20 20 20 73 65 6c 65  to:";.      sele
7bf0: 63 74 20 2a 20 66 72 6f 6d 20 73 71 6c 69 74 65  ct * from sqlite
7c00: 5f 6d 61 73 74 65 72 3b 0a 20 20 20 20 7d 20 64  _master;.    } d
7c10: 62 32 0a 20 20 20 20 65 78 65 63 73 71 6c 20 22  b2.    execsql "
7c20: 50 52 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78  PRAGMA lock_prox
7c30: 79 5f 66 69 6c 65 22 20 64 62 32 0a 20 20 7d 20  y_file" db2.  } 
7c40: 24 6c 70 70 0a 0a 20 20 64 62 32 20 63 6c 6f 73  $lpp..  db2 clos
7c50: 65 0a 20 20 73 65 74 20 6c 70 70 32 20 5b 65 78  e.  set lpp2 [ex
7c60: 65 63 20 6d 6b 74 65 6d 70 20 2d 74 20 22 70 72  ec mktemp -t "pr
7c70: 6f 78 79 32 22 5d 0a 0a 20 20 23 20 32 6e 64 20  oxy2"]..  # 2nd 
7c80: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
7c90: 69 6f 6e 20 63 61 6e 6e 6f 74 20 6f 76 65 72 72  ion cannot overr
7ca0: 69 64 65 20 74 68 65 20 6c 6f 63 6b 20 70 72 6f  ide the lock pro
7cb0: 78 79 20 66 69 6c 65 0a 20 20 64 6f 5f 74 65 73  xy file.  do_tes
7cc0: 74 20 70 72 61 67 6d 61 2d 31 36 2e 33 20 7b 0a  t pragma-16.3 {.
7cd0: 20 20 20 20 73 71 6c 69 74 65 33 20 64 62 32 20      sqlite3 db2 
7ce0: 74 65 73 74 2e 64 62 0a 20 20 20 20 65 78 65 63  test.db.    exec
7cf0: 73 71 6c 20 22 50 52 41 47 4d 41 20 6c 6f 63 6b  sql "PRAGMA lock
7d00: 5f 70 72 6f 78 79 5f 66 69 6c 65 3d 27 24 6c 70  _proxy_file='$lp
7d10: 70 32 27 22 20 64 62 32 0a 20 20 20 20 63 61 74  p2'" db2.    cat
7d20: 63 68 73 71 6c 20 7b 0a 20 20 20 20 20 20 73 65  chsql {.      se
7d30: 6c 65 63 74 20 2a 20 66 72 6f 6d 20 73 71 6c 69  lect * from sqli
7d40: 74 65 5f 6d 61 73 74 65 72 3b 0a 20 20 20 20 7d  te_master;.    }
7d50: 20 64 62 32 0a 20 20 7d 20 7b 31 20 7b 64 61 74   db2.  } {1 {dat
7d60: 61 62 61 73 65 20 69 73 20 6c 6f 63 6b 65 64 7d  abase is locked}
7d70: 7d 0a 0a 20 20 73 65 74 20 6c 70 70 33 20 5b 65  }..  set lpp3 [e
7d80: 78 65 63 20 6d 6b 74 65 6d 70 20 2d 74 20 22 70  xec mktemp -t "p
7d90: 72 6f 78 79 33 22 5d 0a 0a 20 20 23 20 6c 6f 63  roxy3"]..  # loc
7da0: 6b 20 70 72 6f 78 79 20 66 69 6c 65 20 63 61 6e  k proxy file can
7db0: 20 62 65 20 72 65 6e 61 6d 65 64 20 69 66 20 6e   be renamed if n
7dc0: 6f 20 6f 74 68 65 72 20 63 6f 6e 6e 65 63 74 69  o other connecti
7dd0: 6f 6e 73 20 61 72 65 20 61 63 74 69 76 65 0a 20  ons are active. 
7de0: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
7df0: 31 36 2e 34 20 7b 0a 20 20 20 20 64 62 32 20 63  16.4 {.    db2 c
7e00: 6c 6f 73 65 0a 20 20 20 20 64 62 20 63 6c 6f 73  lose.    db clos
7e10: 65 0a 20 20 20 20 73 71 6c 69 74 65 33 20 64 62  e.    sqlite3 db
7e20: 32 20 74 65 73 74 2e 64 62 0a 20 20 20 20 65 78  2 test.db.    ex
7e30: 65 63 73 71 6c 20 22 50 52 41 47 4d 41 20 6c 6f  ecsql "PRAGMA lo
7e40: 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 3d 27 24  ck_proxy_file='$
7e50: 6c 70 70 33 27 22 20 64 62 32 0a 20 20 20 20 65  lpp3'" db2.    e
7e60: 78 65 63 73 71 6c 20 22 50 52 41 47 4d 41 20 6c  xecsql "PRAGMA l
7e70: 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 3d 27  ock_proxy_file='
7e80: 24 6c 70 70 32 27 22 20 64 62 32 0a 20 20 20 20  $lpp2'" db2.    
7e90: 65 78 65 63 73 71 6c 20 22 50 52 41 47 4d 41 20  execsql "PRAGMA 
7ea0: 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 22  lock_proxy_file"
7eb0: 20 64 62 32 0a 20 20 7d 20 24 6c 70 70 32 0a 0a   db2.  } $lpp2..
7ec0: 20 20 64 62 32 20 63 6c 6f 73 65 0a 20 20 73 65    db2 close.  se
7ed0: 74 20 65 6e 76 28 53 51 4c 49 54 45 5f 46 4f 52  t env(SQLITE_FOR
7ee0: 43 45 5f 50 52 4f 58 59 5f 4c 4f 43 4b 49 4e 47  CE_PROXY_LOCKING
7ef0: 29 20 22 31 22 0a 20 20 23 20 61 75 74 6f 2d 6e  ) "1".  # auto-n
7f00: 61 6d 69 6e 67 20 73 68 6f 75 6c 64 20 72 65 75  aming should reu
7f10: 73 65 20 74 68 65 20 6c 61 73 74 20 70 72 6f 78  se the last prox
7f20: 79 20 6e 61 6d 65 20 77 68 65 6e 20 61 76 61 69  y name when avai
7f30: 6c 61 62 6c 65 0a 20 20 64 6f 5f 74 65 73 74 20  lable.  do_test 
7f40: 70 72 61 67 6d 61 2d 31 36 2e 35 20 7b 0a 20 20  pragma-16.5 {.  
7f50: 20 20 73 71 6c 69 74 65 33 20 64 62 32 20 74 65    sqlite3 db2 te
7f60: 73 74 2e 64 62 0a 20 20 20 20 65 78 65 63 73 71  st.db.    execsq
7f70: 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41  l {.      PRAGMA
7f80: 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65   lock_proxy_file
7f90: 3d 22 3a 61 75 74 6f 3a 22 3b 0a 20 20 20 20 20  =":auto:";.     
7fa0: 20 50 52 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f   PRAGMA lock_pro
7fb0: 78 79 5f 66 69 6c 65 3b 0a 20 20 20 20 7d 20 64  xy_file;.    } d
7fc0: 62 32 0a 20 20 7d 20 24 6c 70 70 32 0a 20 20 0a  b2.  } $lpp2.  .
7fd0: 20 20 23 20 61 75 74 6f 2d 6e 61 6d 69 6e 67 20    # auto-naming 
7fe0: 61 20 6e 65 77 20 70 72 6f 78 79 20 73 68 6f 75  a new proxy shou
7ff0: 6c 64 20 75 73 65 20 61 20 70 72 65 64 69 63 74  ld use a predict
8000: 61 62 6c 65 20 26 20 75 6e 69 71 75 65 20 6e 61  able & unique na
8010: 6d 65 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61  me.  do_test pra
8020: 67 6d 61 2d 31 36 2e 36 20 7b 0a 20 20 20 20 64  gma-16.6 {.    d
8030: 62 32 20 63 6c 6f 73 65 0a 20 20 20 20 73 71 6c  b2 close.    sql
8040: 69 74 65 33 20 64 62 32 20 74 65 73 74 32 2e 64  ite3 db2 test2.d
8050: 62 0a 20 20 20 20 73 65 74 20 6c 6f 63 6b 70 61  b.    set lockpa
8060: 74 68 20 5b 65 78 65 63 73 71 6c 20 7b 0a 20 20  th [execsql {.  
8070: 20 20 20 20 50 52 41 47 4d 41 20 6c 6f 63 6b 5f      PRAGMA lock_
8080: 70 72 6f 78 79 5f 66 69 6c 65 3d 22 3a 61 75 74  proxy_file=":aut
8090: 6f 3a 22 3b 0a 20 20 20 20 20 20 50 52 41 47 4d  o:";.      PRAGM
80a0: 41 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c  A lock_proxy_fil
80b0: 65 3b 0a 20 20 20 20 7d 20 64 62 32 5d 0a 20 20  e;.    } db2].  
80c0: 20 20 73 74 72 69 6e 67 20 6d 61 74 63 68 20 22    string match "
80d0: 2a 74 65 73 74 32 2e 64 62 3a 61 75 74 6f 3a 22  *test2.db:auto:"
80e0: 20 24 6c 6f 63 6b 70 61 74 68 0a 20 20 7d 20 7b   $lockpath.  } {
80f0: 31 7d 0a 20 20 0a 20 20 73 65 74 20 73 71 6c 69  1}.  .  set sqli
8100: 74 65 5f 68 6f 73 74 69 64 5f 6e 75 6d 20 32 0a  te_hostid_num 2.
8110: 20 20 23 20 64 62 20 61 63 63 65 73 73 20 73 68    # db access sh
8120: 6f 75 6c 64 20 62 65 20 6c 69 6d 69 74 65 64 20  ould be limited 
8130: 74 6f 20 6f 6e 65 20 68 6f 73 74 20 61 74 20 61  to one host at a
8140: 20 74 69 6d 65 20 28 73 69 6d 75 6c 61 74 65 20   time (simulate 
8150: 32 6e 64 20 68 6f 73 74 20 69 64 29 0a 20 20 64  2nd host id).  d
8160: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 36  o_test pragma-16
8170: 2e 37 20 7b 0a 20 20 20 20 6c 69 73 74 20 5b 63  .7 {.    list [c
8180: 61 74 63 68 20 7b 0a 20 20 20 20 20 20 73 71 6c  atch {.      sql
8190: 69 74 65 33 20 64 62 20 74 65 73 74 32 2e 64 62  ite3 db test2.db
81a0: 0a 20 20 20 20 20 20 65 78 65 63 73 71 6c 20 7b  .      execsql {
81b0: 20 0a 20 20 20 20 20 20 20 20 50 52 41 47 4d 41   .        PRAGMA
81c0: 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65   lock_proxy_file
81d0: 3d 22 3a 61 75 74 6f 3a 22 3b 0a 20 20 20 20 20  =":auto:";.     
81e0: 20 20 20 73 65 6c 65 63 74 20 2a 20 66 72 6f 6d     select * from
81f0: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 3b 0a   sqlite_master;.
8200: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 20 6d 73        }.    } ms
8210: 67 5d 20 24 6d 73 67 0a 20 20 7d 20 7b 31 20 7b  g] $msg.  } {1 {
8220: 64 61 74 61 62 61 73 65 20 69 73 20 6c 6f 63 6b  database is lock
8230: 65 64 7d 7d 0a 20 20 64 62 20 63 6c 6f 73 65 0a  ed}}.  db close.
8240: 20 20 0a 20 20 23 20 64 65 66 61 75 6c 74 20 74    .  # default t
8250: 6f 20 75 73 69 6e 67 20 70 72 6f 78 79 20 6c 6f  o using proxy lo
8260: 63 6b 69 6e 67 20 28 73 69 6d 75 6c 61 74 65 20  cking (simulate 
8270: 6e 65 74 77 6f 72 6b 20 66 69 6c 65 20 73 79 73  network file sys
8280: 74 65 6d 20 64 65 74 65 63 74 69 6f 6e 29 0a 20  tem detection). 
8290: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
82a0: 31 36 2e 38 20 7b 0a 20 20 20 20 6c 69 73 74 20  16.8 {.    list 
82b0: 5b 63 61 74 63 68 20 7b 0a 20 20 20 20 20 20 73  [catch {.      s
82c0: 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 32 2e  qlite3 db test2.
82d0: 64 62 0a 20 20 20 20 20 20 65 78 65 63 73 71 6c  db.      execsql
82e0: 20 7b 20 73 65 6c 65 63 74 20 2a 20 66 72 6f 6d   { select * from
82f0: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 7d   sqlite_master }
8300: 20 0a 20 20 20 20 7d 20 6d 73 67 5d 20 24 6d 73   .    } msg] $ms
8310: 67 0a 20 20 7d 20 7b 31 20 7b 64 61 74 61 62 61  g.  } {1 {databa
8320: 73 65 20 69 73 20 6c 6f 63 6b 65 64 7d 7d 0a 0a  se is locked}}..
8330: 20 20 64 62 32 20 63 6c 6f 73 65 0a 20 20 73 65    db2 close.  se
8340: 74 20 6c 70 70 34 20 5b 65 78 65 63 20 6d 6b 74  t lpp4 [exec mkt
8350: 65 6d 70 20 2d 74 20 22 70 72 6f 78 79 34 22 5d  emp -t "proxy4"]
8360: 0a 0a 20 20 23 20 63 68 65 63 6b 20 74 68 61 74  ..  # check that
8370: 20 64 62 20 69 73 20 75 6e 6c 6f 63 6b 65 64 20   db is unlocked 
8380: 61 66 74 65 72 20 66 69 72 73 74 20 68 6f 73 74  after first host
8390: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 63 6c 6f 73   connection clos
83a0: 65 73 20 0a 20 20 64 6f 5f 74 65 73 74 20 70 72  es .  do_test pr
83b0: 61 67 6d 61 2d 31 36 2e 38 2e 31 20 7b 0a 20 20  agma-16.8.1 {.  
83c0: 20 20 65 78 65 63 73 71 6c 20 22 50 52 41 47 4d    execsql "PRAGM
83d0: 41 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c  A lock_proxy_fil
83e0: 65 3d 27 24 6c 70 70 34 27 22 20 0a 20 20 20 20  e='$lpp4'" .    
83f0: 65 78 65 63 73 71 6c 20 22 73 65 6c 65 63 74 20  execsql "select 
8400: 2a 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f 6d 61  * from sqlite_ma
8410: 73 74 65 72 22 0a 20 20 20 20 65 78 65 63 73 71  ster".    execsq
8420: 6c 20 22 50 52 41 47 4d 41 20 6c 6f 63 6b 5f 70  l "PRAGMA lock_p
8430: 72 6f 78 79 5f 66 69 6c 65 22 0a 20 20 7d 20 24  roxy_file".  } $
8440: 6c 70 70 34 0a 20 20 0a 20 20 64 6f 5f 74 65 73  lpp4.  .  do_tes
8450: 74 20 70 72 61 67 6d 61 2d 31 36 2e 38 2e 32 20  t pragma-16.8.2 
8460: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a  {.    execsql {.
8470: 20 20 20 20 20 20 63 72 65 61 74 65 20 74 61 62        create tab
8480: 6c 65 20 69 66 20 6e 6f 74 20 65 78 69 73 74 73  le if not exists
8490: 20 6d 69 6e 65 28 78 29 3b 0a 20 20 20 20 20 20   mine(x);.      
84a0: 69 6e 73 65 72 74 20 69 6e 74 6f 20 6d 69 6e 65  insert into mine
84b0: 20 76 61 6c 75 65 73 20 28 31 29 3b 0a 20 20 20   values (1);.   
84c0: 20 7d 20 0a 20 20 7d 20 7b 7d 0a 0a 20 20 64 62   } .  } {}..  db
84d0: 20 63 6c 6f 73 65 0a 20 20 66 69 6c 65 20 64 65   close.  file de
84e0: 6c 65 74 65 20 2d 66 6f 72 63 65 20 70 72 6f 78  lete -force prox
84f0: 79 74 65 73 74 2e 64 62 0a 20 20 66 69 6c 65 20  ytest.db.  file 
8500: 64 65 6c 65 74 65 20 2d 66 6f 72 63 65 20 2e 70  delete -force .p
8510: 72 6f 78 79 74 65 73 74 2e 64 62 2d 63 6f 6e 63  roxytest.db-conc
8520: 68 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67  h.  do_test prag
8530: 6d 61 2d 31 36 2e 39 20 7b 0a 20 20 20 20 73 71  ma-16.9 {.    sq
8540: 6c 69 74 65 33 20 64 62 20 70 72 6f 78 79 74 65  lite3 db proxyte
8550: 73 74 2e 64 62 0a 20 20 20 20 73 65 74 20 6c 6f  st.db.    set lo
8560: 63 6b 70 61 74 68 32 20 5b 65 78 65 63 73 71 6c  ckpath2 [execsql
8570: 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20   {.      PRAGMA 
8580: 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 3d  lock_proxy_file=
8590: 22 3a 61 75 74 6f 3a 22 3b 0a 20 20 20 20 20 20  ":auto:";.      
85a0: 50 52 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78  PRAGMA lock_prox
85b0: 79 5f 66 69 6c 65 3b 0a 20 20 20 20 7d 20 64 62  y_file;.    } db
85c0: 5d 0a 20 20 20 20 73 74 72 69 6e 67 20 6d 61 74  ].    string mat
85d0: 63 68 20 22 2a 70 72 6f 78 79 74 65 73 74 2e 64  ch "*proxytest.d
85e0: 62 3a 61 75 74 6f 3a 22 20 24 6c 6f 63 6b 70 61  b:auto:" $lockpa
85f0: 74 68 32 0a 20 20 7d 20 7b 31 7d 0a 0a 20 20 23  th2.  } {1}..  #
8600: 20 65 6e 73 75 72 65 20 63 72 65 61 74 69 6e 67   ensure creating
8610: 20 64 69 72 65 63 74 6f 72 69 65 73 20 66 6f 72   directories for
8620: 20 61 20 6c 6f 63 6b 20 70 72 6f 78 79 20 66 69   a lock proxy fi
8630: 6c 65 20 77 6f 72 6b 73 0a 20 20 73 65 74 20 6c  le works.  set l
8640: 70 70 35 64 20 5b 65 78 65 63 20 6d 6b 74 65 6d  pp5d [exec mktem
8650: 70 20 2d 64 20 2d 74 20 22 70 72 6f 78 79 35 22  p -d -t "proxy5"
8660: 5d 0a 20 20 73 65 74 20 6c 70 70 35 20 24 6c 70  ].  set lpp5 $lp
8670: 70 35 64 2f 73 75 62 2f 64 69 72 2f 6c 6f 63 6b  p5d/sub/dir/lock
8680: 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 64 6f  .  db close.  do
8690: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 36 2e  _test pragma-16.
86a0: 31 30 2e 31 20 7b 0a 20 20 20 20 73 71 6c 69 74  10.1 {.    sqlit
86b0: 65 33 20 64 62 20 70 72 6f 78 79 74 65 73 74 2e  e3 db proxytest.
86c0: 64 62 0a 20 20 20 20 65 78 65 63 73 71 6c 20 22  db.    execsql "
86d0: 50 52 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78  PRAGMA lock_prox
86e0: 79 5f 66 69 6c 65 3d 27 24 6c 70 70 35 27 22 20  y_file='$lpp5'" 
86f0: 0a 20 20 20 20 73 65 74 20 6c 6f 63 6b 70 61 74  .    set lockpat
8700: 68 32 20 5b 65 78 65 63 73 71 6c 20 7b 0a 20 20  h2 [execsql {.  
8710: 20 20 20 20 50 52 41 47 4d 41 20 6c 6f 63 6b 5f      PRAGMA lock_
8720: 70 72 6f 78 79 5f 66 69 6c 65 3b 0a 20 20 20 20  proxy_file;.    
8730: 7d 20 64 62 5d 0a 20 20 20 20 73 74 72 69 6e 67  } db].    string
8740: 20 6d 61 74 63 68 20 22 2a 73 75 62 2f 64 69 72   match "*sub/dir
8750: 2f 6c 6f 63 6b 22 20 24 6c 6f 63 6b 70 61 74 68  /lock" $lockpath
8760: 32 0a 20 20 7d 20 7b 31 7d 0a 0a 20 20 23 20 65  2.  } {1}..  # e
8770: 6e 73 75 72 65 20 74 68 61 74 20 61 66 74 65 72  nsure that after
8780: 20 64 65 6c 65 74 69 6e 67 20 74 68 65 20 70 61   deleting the pa
8790: 74 68 2c 20 73 65 74 74 69 6e 67 20 22 3a 61 75  th, setting ":au
87a0: 74 6f 3a 22 20 77 6f 72 6b 73 20 63 6f 72 72 65  to:" works corre
87b0: 63 74 6c 79 0a 20 20 64 62 20 63 6c 6f 73 65 0a  ctly.  db close.
87c0: 20 20 66 69 6c 65 20 64 65 6c 65 74 65 20 2d 66    file delete -f
87d0: 6f 72 63 65 20 24 6c 70 70 35 64 0a 20 20 64 6f  orce $lpp5d.  do
87e0: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 36 2e  _test pragma-16.
87f0: 31 30 2e 32 20 7b 0a 20 20 20 20 73 71 6c 69 74  10.2 {.    sqlit
8800: 65 33 20 64 62 20 70 72 6f 78 79 74 65 73 74 2e  e3 db proxytest.
8810: 64 62 0a 20 20 20 20 73 65 74 20 6c 6f 63 6b 70  db.    set lockp
8820: 61 74 68 33 20 5b 65 78 65 63 73 71 6c 20 7b 0a  ath3 [execsql {.
8830: 20 20 20 20 20 20 50 52 41 47 4d 41 20 6c 6f 63        PRAGMA loc
8840: 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 3d 22 3a 61  k_proxy_file=":a
8850: 75 74 6f 3a 22 3b 0a 20 20 20 20 20 20 63 72 65  uto:";.      cre
8860: 61 74 65 20 74 61 62 6c 65 20 69 66 20 6e 6f 74  ate table if not
8870: 20 65 78 69 73 74 73 20 70 74 28 79 29 3b 0a 20   exists pt(y);. 
8880: 20 20 20 20 20 50 52 41 47 4d 41 20 6c 6f 63 6b       PRAGMA lock
8890: 5f 70 72 6f 78 79 5f 66 69 6c 65 3b 0a 20 20 20  _proxy_file;.   
88a0: 20 7d 20 64 62 5d 0a 20 20 20 20 73 74 72 69 6e   } db].    strin
88b0: 67 20 6d 61 74 63 68 20 22 2a 73 75 62 2f 64 69  g match "*sub/di
88c0: 72 2f 6c 6f 63 6b 22 20 24 6c 6f 63 6b 70 61 74  r/lock" $lockpat
88d0: 68 33 0a 20 20 7d 20 7b 31 7d 0a 0a 20 20 23 20  h3.  } {1}..  # 
88e0: 65 6e 73 75 72 65 20 74 68 61 74 20 69 66 20 74  ensure that if t
88f0: 68 65 20 70 61 74 68 20 63 61 6e 20 6e 6f 74 20  he path can not 
8900: 62 65 20 63 72 65 61 74 65 64 20 28 66 69 6c 65  be created (file
8910: 20 69 6e 73 74 65 61 64 20 6f 66 20 64 69 72 29   instead of dir)
8920: 0a 20 20 23 20 73 65 74 74 69 6e 67 20 3a 61 75  .  # setting :au
8930: 74 6f 3a 20 64 65 61 6c 73 20 77 69 74 68 20 69  to: deals with i
8940: 74 20 62 79 20 63 72 65 61 74 69 6e 67 20 61 20  t by creating a 
8950: 6e 65 77 20 61 75 74 6f 6e 61 6d 65 64 20 6c 6f  new autonamed lo
8960: 63 6b 20 66 69 6c 65 0a 20 20 64 62 20 63 6c 6f  ck file.  db clo
8970: 73 65 0a 20 20 66 69 6c 65 20 64 65 6c 65 74 65  se.  file delete
8980: 20 2d 66 6f 72 63 65 20 24 6c 70 70 35 64 0a 20   -force $lpp5d. 
8990: 20 63 6c 6f 73 65 20 5b 6f 70 65 6e 20 22 24 6c   close [open "$l
89a0: 70 70 35 64 22 20 61 5d 0a 20 20 64 6f 5f 74 65  pp5d" a].  do_te
89b0: 73 74 20 70 72 61 67 6d 61 2d 31 36 2e 31 30 2e  st pragma-16.10.
89c0: 33 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 20  3 {.    sqlite3 
89d0: 64 62 20 70 72 6f 78 79 74 65 73 74 2e 64 62 0a  db proxytest.db.
89e0: 20 20 20 20 73 65 74 20 6c 6f 63 6b 70 61 74 68      set lockpath
89f0: 32 20 5b 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  2 [execsql {.   
8a00: 20 20 20 50 52 41 47 4d 41 20 6c 6f 63 6b 5f 70     PRAGMA lock_p
8a10: 72 6f 78 79 5f 66 69 6c 65 3d 22 3a 61 75 74 6f  roxy_file=":auto
8a20: 3a 22 3b 0a 20 20 20 20 20 20 63 72 65 61 74 65  :";.      create
8a30: 20 74 61 62 6c 65 20 69 66 20 6e 6f 74 20 65 78   table if not ex
8a40: 69 73 74 73 20 7a 7a 28 79 29 3b 0a 20 20 20 20  ists zz(y);.    
8a50: 20 20 50 52 41 47 4d 41 20 6c 6f 63 6b 5f 70 72    PRAGMA lock_pr
8a60: 6f 78 79 5f 66 69 6c 65 3b 0a 20 20 20 20 7d 20  oxy_file;.    } 
8a70: 64 62 5d 0a 20 20 20 20 73 74 72 69 6e 67 20 6d  db].    string m
8a80: 61 74 63 68 20 22 2a 70 72 6f 78 79 74 65 73 74  atch "*proxytest
8a90: 2e 64 62 3a 61 75 74 6f 3a 22 20 24 6c 6f 63 6b  .db:auto:" $lock
8aa0: 70 61 74 68 32 0a 20 20 7d 20 7b 31 7d 0a 0a 20  path2.  } {1}.. 
8ab0: 20 23 20 6d 61 6b 65 20 73 75 72 65 20 77 65 20   # make sure we 
8ac0: 63 61 6e 20 64 65 61 6c 20 77 69 74 68 20 75 67  can deal with ug
8ad0: 6c 79 20 66 69 6c 65 20 70 61 74 68 73 20 63 6f  ly file paths co
8ae0: 72 72 65 63 74 6c 79 0a 20 20 64 62 20 63 6c 6f  rrectly.  db clo
8af0: 73 65 0a 20 20 66 69 6c 65 20 64 65 6c 65 74 65  se.  file delete
8b00: 20 2d 66 6f 72 63 65 20 24 6c 70 70 35 64 0a 20   -force $lpp5d. 
8b10: 20 73 65 74 20 6c 70 70 36 20 5b 65 78 65 63 20   set lpp6 [exec 
8b20: 6d 6b 74 65 6d 70 20 2d 64 20 2d 74 20 22 70 72  mktemp -d -t "pr
8b30: 6f 78 79 36 22 5d 2f 2e 2f 2e 2f 2e 2f 2f 2f 2f  oxy6"]/./././///
8b40: 2f 2e 2f 70 72 6f 78 79 74 65 73 74 2f 2e 2e 2f  /./proxytest/../
8b50: 70 72 6f 78 79 74 65 73 74 2f 73 75 62 2f 64 69  proxytest/sub/di
8b60: 72 2f 6c 6f 63 6b 0a 20 20 64 6f 5f 74 65 73 74  r/lock.  do_test
8b70: 20 70 72 61 67 6d 61 2d 31 36 2e 31 30 2e 34 20   pragma-16.10.4 
8b80: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 20 64 62  {.    sqlite3 db
8b90: 20 70 72 6f 78 79 74 65 73 74 2e 64 62 0a 20 20   proxytest.db.  
8ba0: 20 20 65 78 65 63 73 71 6c 20 22 50 52 41 47 4d    execsql "PRAGM
8bb0: 41 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c  A lock_proxy_fil
8bc0: 65 3d 27 24 6c 70 70 36 27 22 20 0a 20 20 20 20  e='$lpp6'" .    
8bd0: 73 65 74 20 6c 6f 63 6b 70 61 74 68 34 20 5b 65  set lockpath4 [e
8be0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 63  xecsql {.      c
8bf0: 72 65 61 74 65 20 74 61 62 6c 65 20 69 66 20 6e  reate table if n
8c00: 6f 74 20 65 78 69 73 74 73 20 61 61 28 62 62 29  ot exists aa(bb)
8c10: 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 6c  ;.      PRAGMA l
8c20: 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 3b 0a  ock_proxy_file;.
8c30: 20 20 20 20 7d 20 64 62 5d 0a 20 20 20 20 73 74      } db].    st
8c40: 72 69 6e 67 20 6d 61 74 63 68 20 22 2a 70 72 6f  ring match "*pro
8c50: 78 79 74 65 73 74 2f 73 75 62 2f 64 69 72 2f 6c  xytest/sub/dir/l
8c60: 6f 63 6b 22 20 24 6c 6f 63 6b 70 61 74 68 34 0a  ock" $lockpath4.
8c70: 20 20 7d 20 7b 31 7d 0a 0a 20 20 23 20 65 6e 73    } {1}..  # ens
8c80: 75 72 65 20 74 68 61 74 20 69 66 20 74 68 65 20  ure that if the 
8c90: 70 61 74 68 20 63 61 6e 20 6e 6f 74 20 62 65 20  path can not be 
8ca0: 63 72 65 61 74 65 64 20 28 70 65 72 6d 29 2c 20  created (perm), 
8cb0: 73 65 74 74 69 6e 67 20 3a 61 75 74 6f 3a 20 64  setting :auto: d
8cc0: 65 61 6c 73 0a 20 20 64 62 20 63 6c 6f 73 65 0a  eals.  db close.
8cd0: 20 20 66 69 6c 65 20 64 65 6c 65 74 65 20 2d 66    file delete -f
8ce0: 6f 72 63 65 20 24 6c 70 70 35 64 0a 20 20 64 6f  orce $lpp5d.  do
8cf0: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 36 2e  _test pragma-16.
8d00: 31 30 2e 35 20 7b 0a 20 20 20 20 73 71 6c 69 74  10.5 {.    sqlit
8d10: 65 33 20 64 62 20 70 72 6f 78 79 74 65 73 74 2e  e3 db proxytest.
8d20: 64 62 0a 20 20 20 20 65 78 65 63 73 71 6c 20 22  db.    execsql "
8d30: 50 52 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78  PRAGMA lock_prox
8d40: 79 5f 66 69 6c 65 3d 27 24 6c 70 70 35 27 22 20  y_file='$lpp5'" 
8d50: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
8d60: 20 20 20 20 20 63 72 65 61 74 65 20 74 61 62 6c       create tabl
8d70: 65 20 69 66 20 6e 6f 74 20 65 78 69 73 74 73 20  e if not exists 
8d80: 62 62 28 62 62 29 3b 0a 20 20 20 20 7d 0a 20 20  bb(bb);.    }.  
8d90: 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 20 20 66    db close.    f
8da0: 69 6c 65 20 64 65 6c 65 74 65 20 2d 66 6f 72 63  ile delete -forc
8db0: 65 20 24 6c 70 70 35 64 0a 20 20 20 20 66 69 6c  e $lpp5d.    fil
8dc0: 65 20 6d 6b 64 69 72 20 24 6c 70 70 35 64 0a 20  e mkdir $lpp5d. 
8dd0: 20 20 20 66 69 6c 65 20 61 74 74 72 69 62 75 74     file attribut
8de0: 65 73 20 24 6c 70 70 35 64 20 2d 70 65 72 6d 69  es $lpp5d -permi
8df0: 73 73 69 6f 6e 20 30 30 30 30 0a 20 20 20 20 73  ssion 0000.    s
8e00: 71 6c 69 74 65 33 20 64 62 20 70 72 6f 78 79 74  qlite3 db proxyt
8e10: 65 73 74 2e 64 62 0a 20 20 20 20 73 65 74 20 6c  est.db.    set l
8e20: 6f 63 6b 70 61 74 68 35 20 5b 65 78 65 63 73 71  ockpath5 [execsq
8e30: 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41  l {.      PRAGMA
8e40: 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65   lock_proxy_file
8e50: 3d 22 3a 61 75 74 6f 3a 22 3b 0a 20 20 20 20 20  =":auto:";.     
8e60: 20 63 72 65 61 74 65 20 74 61 62 6c 65 20 69 66   create table if
8e70: 20 6e 6f 74 20 65 78 69 73 74 73 20 63 63 28 62   not exists cc(b
8e80: 62 29 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41  b);.      PRAGMA
8e90: 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65   lock_proxy_file
8ea0: 3b 0a 20 20 20 20 7d 20 64 62 5d 0a 20 20 20 20  ;.    } db].    
8eb0: 73 74 72 69 6e 67 20 6d 61 74 63 68 20 22 2a 70  string match "*p
8ec0: 72 6f 78 79 74 65 73 74 2e 64 62 3a 61 75 74 6f  roxytest.db:auto
8ed0: 3a 22 20 24 6c 6f 63 6b 70 61 74 68 35 0a 20 20  :" $lockpath5.  
8ee0: 7d 20 7b 31 7d 0a 0a 20 20 23 20 65 6e 73 75 72  } {1}..  # ensur
8ef0: 65 20 74 68 61 74 20 69 66 20 74 68 65 20 70 61  e that if the pa
8f00: 74 68 20 63 61 6e 20 6e 6f 74 20 62 65 20 63 72  th can not be cr
8f10: 65 61 74 65 64 2c 20 6c 6f 63 6b 69 6e 67 20 66  eated, locking f
8f20: 61 69 6c 73 0a 20 20 64 62 20 63 6c 6f 73 65 0a  ails.  db close.
8f30: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
8f40: 2d 31 36 2e 31 30 2e 36 20 7b 0a 20 20 20 20 73  -16.10.6 {.    s
8f50: 71 6c 69 74 65 33 20 64 62 20 70 72 6f 78 79 74  qlite3 db proxyt
8f60: 65 73 74 2e 64 62 0a 20 20 20 20 65 78 65 63 73  est.db.    execs
8f70: 71 6c 20 22 50 52 41 47 4d 41 20 6c 6f 63 6b 5f  ql "PRAGMA lock_
8f80: 70 72 6f 78 79 5f 66 69 6c 65 3d 27 24 6c 70 70  proxy_file='$lpp
8f90: 35 27 22 20 0a 20 20 20 20 63 61 74 63 68 73 71  5'" .    catchsq
8fa0: 6c 20 7b 0a 20 20 20 20 20 20 63 72 65 61 74 65  l {.      create
8fb0: 20 74 61 62 6c 65 20 69 66 20 6e 6f 74 20 65 78   table if not ex
8fc0: 69 73 74 73 20 66 61 69 6c 79 28 79 29 3b 0a 20  ists faily(y);. 
8fd0: 20 20 20 20 20 50 52 41 47 4d 41 20 6c 6f 63 6b       PRAGMA lock
8fe0: 5f 70 72 6f 78 79 5f 66 69 6c 65 3b 0a 20 20 20  _proxy_file;.   
8ff0: 20 7d 20 64 62 0a 20 20 7d 20 7b 31 20 7b 64 61   } db.  } {1 {da
9000: 74 61 62 61 73 65 20 69 73 20 6c 6f 63 6b 65 64  tabase is locked
9010: 7d 7d 0a 20 20 64 62 20 63 6c 6f 73 65 0a 0a 20  }}.  db close.. 
9020: 20 66 69 6c 65 20 61 74 74 72 69 62 75 74 65 73   file attributes
9030: 20 24 6c 70 70 35 64 20 2d 70 65 72 6d 69 73 73   $lpp5d -permiss
9040: 69 6f 6e 20 30 37 37 37 0a 20 20 66 69 6c 65 20  ion 0777.  file 
9050: 64 65 6c 65 74 65 20 2d 66 6f 72 63 65 20 24 6c  delete -force $l
9060: 70 70 35 64 0a 0a 20 20 73 65 74 20 65 6e 76 28  pp5d..  set env(
9070: 53 51 4c 49 54 45 5f 46 4f 52 43 45 5f 50 52 4f  SQLITE_FORCE_PRO
9080: 58 59 5f 4c 4f 43 4b 49 4e 47 29 20 24 75 73 69  XY_LOCKING) $usi
9090: 6e 67 5f 70 72 6f 78 79 0a 20 20 73 65 74 20 73  ng_proxy.  set s
90a0: 71 6c 69 74 65 5f 68 6f 73 74 69 64 5f 6e 75 6d  qlite_hostid_num
90b0: 20 30 0a 7d 0a 0a 23 20 50 61 72 73 69 6e 67 20   0.}..# Parsing 
90c0: 6f 66 20 61 75 74 6f 5f 76 61 63 75 75 6d 20 73  of auto_vacuum s
90d0: 65 74 74 69 6e 67 73 2e 0a 23 0a 66 6f 72 65 61  ettings..#.forea
90e0: 63 68 20 7b 61 75 74 6f 76 61 63 5f 73 65 74 74  ch {autovac_sett
90f0: 69 6e 67 20 76 61 6c 7d 20 7b 0a 20 20 30 20 30  ing val} {.  0 0
9100: 0a 20 20 31 20 31 0a 20 20 32 20 32 0a 20 20 33  .  1 1.  2 2.  3
9110: 20 30 0a 20 20 2d 31 20 30 0a 20 20 6e 6f 6e 65   0.  -1 0.  none
9120: 20 30 0a 20 20 4e 4f 4e 45 20 30 0a 20 20 4e 6f   0.  NONE 0.  No
9130: 4e 65 20 30 0a 20 20 66 75 6c 6c 20 31 0a 20 20  Ne 0.  full 1.  
9140: 46 55 4c 4c 20 31 0a 20 20 69 6e 63 72 65 6d 65  FULL 1.  increme
9150: 6e 74 61 6c 20 32 0a 20 20 49 4e 43 52 45 4d 45  ntal 2.  INCREME
9160: 4e 54 41 4c 20 32 0a 20 20 2d 31 32 33 34 20 30  NTAL 2.  -1234 0
9170: 0a 20 20 31 32 33 34 20 30 0a 7d 20 7b 0a 20 20  .  1234 0.} {.  
9180: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31  do_test pragma-1
9190: 37 2e 31 2e 24 61 75 74 6f 76 61 63 5f 73 65 74  7.1.$autovac_set
91a0: 74 69 6e 67 20 7b 0a 20 20 20 20 63 61 74 63 68  ting {.    catch
91b0: 20 7b 64 62 20 63 6c 6f 73 65 7d 0a 20 20 20 20   {db close}.    
91c0: 73 71 6c 69 74 65 33 20 64 62 20 3a 6d 65 6d 6f  sqlite3 db :memo
91d0: 72 79 3a 0a 20 20 20 20 65 78 65 63 73 71 6c 20  ry:.    execsql 
91e0: 22 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 61  ".      PRAGMA a
91f0: 75 74 6f 5f 76 61 63 75 75 6d 3d 24 3a 3a 61 75  uto_vacuum=$::au
9200: 74 6f 76 61 63 5f 73 65 74 74 69 6e 67 3b 0a 20  tovac_setting;. 
9210: 20 20 20 20 20 50 52 41 47 4d 41 20 61 75 74 6f       PRAGMA auto
9220: 5f 76 61 63 75 75 6d 3b 0a 20 20 20 20 22 0a 20  _vacuum;.    ". 
9230: 20 7d 20 24 76 61 6c 0a 7d 0a 0a 23 20 50 61 72   } $val.}..# Par
9240: 73 69 6e 67 20 6f 66 20 74 65 6d 70 5f 73 74 6f  sing of temp_sto
9250: 72 65 20 73 65 74 74 69 6e 67 73 2e 0a 23 0a 66  re settings..#.f
9260: 6f 72 65 61 63 68 20 7b 74 65 6d 70 5f 73 65 74  oreach {temp_set
9270: 74 69 6e 67 20 76 61 6c 7d 20 7b 0a 20 20 30 20  ting val} {.  0 
9280: 30 0a 20 20 31 20 31 0a 20 20 32 20 32 0a 20 20  0.  1 1.  2 2.  
9290: 33 20 30 0a 20 20 2d 31 20 30 0a 20 20 66 69 6c  3 0.  -1 0.  fil
92a0: 65 20 31 0a 20 20 46 49 4c 45 20 31 0a 20 20 66  e 1.  FILE 1.  f
92b0: 49 6c 45 20 31 0a 20 20 6d 65 6d 6f 72 79 20 32  IlE 1.  memory 2
92c0: 0a 20 20 4d 45 4d 4f 52 59 20 32 0a 20 20 4d 65  .  MEMORY 2.  Me
92d0: 4d 6f 52 79 20 32 0a 7d 20 7b 0a 20 20 64 6f 5f  MoRy 2.} {.  do_
92e0: 74 65 73 74 20 70 72 61 67 6d 61 2d 31 38 2e 31  test pragma-18.1
92f0: 2e 24 74 65 6d 70 5f 73 65 74 74 69 6e 67 20 7b  .$temp_setting {
9300: 0a 20 20 20 20 63 61 74 63 68 20 7b 64 62 20 63  .    catch {db c
9310: 6c 6f 73 65 7d 0a 20 20 20 20 73 71 6c 69 74 65  lose}.    sqlite
9320: 33 20 64 62 20 3a 6d 65 6d 6f 72 79 3a 0a 20 20  3 db :memory:.  
9330: 20 20 65 78 65 63 73 71 6c 20 22 0a 20 20 20 20    execsql ".    
9340: 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74    PRAGMA temp_st
9350: 6f 72 65 3d 24 3a 3a 74 65 6d 70 5f 73 65 74 74  ore=$::temp_sett
9360: 69 6e 67 3b 0a 20 20 20 20 20 20 50 52 41 47 4d  ing;.      PRAGM
9370: 41 20 74 65 6d 70 5f 73 74 6f 72 65 3d 24 3a 3a  A temp_store=$::
9380: 74 65 6d 70 5f 73 65 74 74 69 6e 67 3b 0a 20 20  temp_setting;.  
9390: 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f      PRAGMA temp_
93a0: 73 74 6f 72 65 3b 0a 20 20 20 20 22 0a 20 20 7d  store;.    ".  }
93b0: 20 24 76 61 6c 0a 7d 0a 0a 23 20 54 68 65 20 53   $val.}..# The S
93c0: 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 50 52 41 47  QLITE_FCNTL_PRAG
93d0: 4d 41 20 6c 6f 67 69 63 2c 20 77 69 74 68 20 65  MA logic, with e
93e0: 72 72 6f 72 20 68 61 6e 64 6c 69 6e 67 2e 0a 23  rror handling..#
93f0: 0a 64 62 20 63 6c 6f 73 65 0a 74 65 73 74 76 66  .db close.testvf
9400: 73 20 74 76 66 73 0a 73 71 6c 69 74 65 33 20 64  s tvfs.sqlite3 d
9410: 62 20 74 65 73 74 2e 64 62 20 2d 76 66 73 20 74  b test.db -vfs t
9420: 76 66 73 0a 64 6f 5f 74 65 73 74 20 70 72 61 67  vfs.do_test prag
9430: 6d 61 2d 31 39 2e 31 20 7b 0a 20 20 63 61 74 63  ma-19.1 {.  catc
9440: 68 73 71 6c 20 7b 50 52 41 47 4d 41 20 65 72 72  hsql {PRAGMA err
9450: 6f 72 7d 0a 7d 20 7b 31 20 7b 53 51 4c 20 6c 6f  or}.} {1 {SQL lo
9460: 67 69 63 20 65 72 72 6f 72 20 6f 72 20 6d 69 73  gic error or mis
9470: 73 69 6e 67 20 64 61 74 61 62 61 73 65 7d 7d 0a  sing database}}.
9480: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31  do_test pragma-1
9490: 39 2e 32 20 7b 0a 20 20 63 61 74 63 68 73 71 6c  9.2 {.  catchsql
94a0: 20 7b 50 52 41 47 4d 41 20 65 72 72 6f 72 3d 27   {PRAGMA error='
94b0: 54 68 69 73 20 69 73 20 74 68 65 20 65 72 72 6f  This is the erro
94c0: 72 20 6d 65 73 73 61 67 65 27 7d 0a 7d 20 7b 31  r message'}.} {1
94d0: 20 7b 54 68 69 73 20 69 73 20 74 68 65 20 65 72   {This is the er
94e0: 72 6f 72 20 6d 65 73 73 61 67 65 7d 7d 0a 64 6f  ror message}}.do
94f0: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 39 2e  _test pragma-19.
9500: 33 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b  3 {.  catchsql {
9510: 50 52 41 47 4d 41 20 65 72 72 6f 72 3d 27 37 20  PRAGMA error='7 
9520: 54 68 69 73 20 69 73 20 74 68 65 20 65 72 72 6f  This is the erro
9530: 72 20 6d 65 73 73 61 67 65 27 7d 0a 7d 20 7b 31  r message'}.} {1
9540: 20 7b 54 68 69 73 20 69 73 20 74 68 65 20 65 72   {This is the er
9550: 72 6f 72 20 6d 65 73 73 61 67 65 7d 7d 0a 64 6f  ror message}}.do
9560: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 39 2e  _test pragma-19.
9570: 34 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b  4 {.  catchsql {
9580: 50 52 41 47 4d 41 20 65 72 72 6f 72 3d 37 7d 0a  PRAGMA error=7}.
9590: 7d 20 7b 31 20 7b 6f 75 74 20 6f 66 20 6d 65 6d  } {1 {out of mem
95a0: 6f 72 79 7d 7d 0a 64 6f 5f 74 65 73 74 20 70 72  ory}}.do_test pr
95b0: 61 67 6d 61 2d 31 39 2e 35 20 7b 0a 20 20 66 69  agma-19.5 {.  fi
95c0: 6c 65 20 74 61 69 6c 20 5b 6c 69 6e 64 65 78 20  le tail [lindex 
95d0: 5b 65 78 65 63 73 71 6c 20 7b 50 52 41 47 4d 41  [execsql {PRAGMA
95e0: 20 66 69 6c 65 6e 61 6d 65 7d 5d 20 30 5d 0a 7d   filename}] 0].}
95f0: 20 7b 74 65 73 74 2e 64 62 7d 0a 0a 69 66 20 7b   {test.db}..if {
9600: 24 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 70 6c  $tcl_platform(pl
9610: 61 74 66 6f 72 6d 29 3d 3d 22 77 69 6e 64 6f 77  atform)=="window
9620: 73 22 7d 20 7b 0a 23 20 54 65 73 74 20 64 61 74  s"} {.# Test dat
9630: 61 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72  a_store_director
9640: 79 20 70 72 61 67 6d 61 0a 23 0a 64 62 20 63 6c  y pragma.#.db cl
9650: 6f 73 65 0a 73 71 6c 69 74 65 33 20 64 62 20 74  ose.sqlite3 db t
9660: 65 73 74 2e 64 62 0a 66 69 6c 65 20 6d 6b 64 69  est.db.file mkdi
9670: 72 20 64 61 74 61 5f 64 69 72 0a 64 6f 5f 74 65  r data_dir.do_te
9680: 73 74 20 70 72 61 67 6d 61 2d 32 30 2e 31 20 7b  st pragma-20.1 {
9690: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 50 52 41  .  catchsql {PRA
96a0: 47 4d 41 20 64 61 74 61 5f 73 74 6f 72 65 5f 64  GMA data_store_d
96b0: 69 72 65 63 74 6f 72 79 7d 0a 7d 20 7b 30 20 7b  irectory}.} {0 {
96c0: 7d 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  }}.do_test pragm
96d0: 61 2d 32 30 2e 32 20 7b 0a 20 20 73 65 74 20 70  a-20.2 {.  set p
96e0: 77 64 20 5b 73 74 72 69 6e 67 20 6d 61 70 20 7b  wd [string map {
96f0: 27 20 27 27 7d 20 5b 66 69 6c 65 20 6e 61 74 69  ' ''} [file nati
9700: 76 65 6e 61 6d 65 20 5b 67 65 74 5f 70 77 64 5d  vename [get_pwd]
9710: 5d 5d 0a 20 20 63 61 74 63 68 73 71 6c 20 22 50  ]].  catchsql "P
9720: 52 41 47 4d 41 20 64 61 74 61 5f 73 74 6f 72 65  RAGMA data_store
9730: 5f 64 69 72 65 63 74 6f 72 79 3d 27 24 70 77 64  _directory='$pwd
9740: 27 3b 22 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f  ';".} {0 {}}.do_
9750: 74 65 73 74 20 70 72 61 67 6d 61 2d 32 30 2e 33  test pragma-20.3
9760: 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 50   {.  catchsql {P
9770: 52 41 47 4d 41 20 64 61 74 61 5f 73 74 6f 72 65  RAGMA data_store
9780: 5f 64 69 72 65 63 74 6f 72 79 7d 0a 7d 20 5b 6c  _directory}.} [l
9790: 69 73 74 20 30 20 5b 6c 69 73 74 20 5b 66 69 6c  ist 0 [list [fil
97a0: 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 67 65  e nativename [ge
97b0: 74 5f 70 77 64 5d 5d 5d 5d 0a 64 6f 5f 74 65 73  t_pwd]]]].do_tes
97c0: 74 20 70 72 61 67 6d 61 2d 32 30 2e 34 20 7b 0a  t pragma-20.4 {.
97d0: 20 20 73 65 74 20 70 77 64 20 5b 73 74 72 69 6e    set pwd [strin
97e0: 67 20 6d 61 70 20 7b 27 20 27 27 7d 20 5b 66 69  g map {' ''} [fi
97f0: 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5c 0a  le nativename \.
9800: 20 20 20 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b      [file join [
9810: 67 65 74 5f 70 77 64 5d 20 64 61 74 61 5f 64 69  get_pwd] data_di
9820: 72 5d 5d 5d 0a 20 20 63 61 74 63 68 73 71 6c 20  r]]].  catchsql 
9830: 22 50 52 41 47 4d 41 20 64 61 74 61 5f 73 74 6f  "PRAGMA data_sto
9840: 72 65 5f 64 69 72 65 63 74 6f 72 79 3d 27 24 70  re_directory='$p
9850: 77 64 27 3b 22 0a 7d 20 7b 30 20 7b 7d 7d 0a 64  wd';".} {0 {}}.d
9860: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 32 30  o_test pragma-20
9870: 2e 35 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 64  .5 {.  sqlite3 d
9880: 62 32 20 74 65 73 74 32 2e 64 62 0a 20 20 63 61  b2 test2.db.  ca
9890: 74 63 68 73 71 6c 20 22 50 52 41 47 4d 41 20 64  tchsql "PRAGMA d
98a0: 61 74 61 62 61 73 65 5f 6c 69 73 74 3b 22 20 64  atabase_list;" d
98b0: 62 32 0a 7d 20 5b 6c 69 73 74 20 30 20 5b 6c 69  b2.} [list 0 [li
98c0: 73 74 20 30 20 6d 61 69 6e 20 5b 66 69 6c 65 20  st 0 main [file 
98d0: 6e 61 74 69 76 65 6e 61 6d 65 20 5c 0a 20 20 20  nativename \.   
98e0: 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74   [file join [get
98f0: 5f 70 77 64 5d 20 64 61 74 61 5f 64 69 72 20 74  _pwd] data_dir t
9900: 65 73 74 32 2e 64 62 5d 5d 5d 5d 0a 63 61 74 63  est2.db]]]].catc
9910: 68 20 7b 64 62 32 20 63 6c 6f 73 65 7d 0a 64 6f  h {db2 close}.do
9920: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 32 30 2e  _test pragma-20.
9930: 36 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 64 62  6 {.  sqlite3 db
9940: 32 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65  2 [file join [ge
9950: 74 5f 70 77 64 5d 20 74 65 73 74 32 2e 64 62 5d  t_pwd] test2.db]
9960: 0a 20 20 63 61 74 63 68 73 71 6c 20 22 50 52 41  .  catchsql "PRA
9970: 47 4d 41 20 64 61 74 61 62 61 73 65 5f 6c 69 73  GMA database_lis
9980: 74 3b 22 20 64 62 32 0a 7d 20 5b 6c 69 73 74 20  t;" db2.} [list 
9990: 30 20 5b 6c 69 73 74 20 30 20 6d 61 69 6e 20 5b  0 [list 0 main [
99a0: 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20  file nativename 
99b0: 5c 0a 20 20 20 20 5b 66 69 6c 65 20 6a 6f 69 6e  \.    [file join
99c0: 20 5b 67 65 74 5f 70 77 64 5d 20 74 65 73 74 32   [get_pwd] test2
99d0: 2e 64 62 5d 5d 5d 5d 0a 63 61 74 63 68 20 7b 64  .db]]]].catch {d
99e0: 62 32 20 63 6c 6f 73 65 7d 0a 64 6f 5f 74 65 73  b2 close}.do_tes
99f0: 74 20 70 72 61 67 6d 61 2d 32 30 2e 37 20 7b 0a  t pragma-20.7 {.
9a00: 20 20 63 61 74 63 68 73 71 6c 20 22 50 52 41 47    catchsql "PRAG
9a10: 4d 41 20 64 61 74 61 5f 73 74 6f 72 65 5f 64 69  MA data_store_di
9a20: 72 65 63 74 6f 72 79 3d 27 27 3b 22 0a 7d 20 7b  rectory='';".} {
9a30: 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 70 72  0 {}}.do_test pr
9a40: 61 67 6d 61 2d 32 30 2e 38 20 7b 0a 20 20 63 61  agma-20.8 {.  ca
9a50: 74 63 68 73 71 6c 20 7b 50 52 41 47 4d 41 20 64  tchsql {PRAGMA d
9a60: 61 74 61 5f 73 74 6f 72 65 5f 64 69 72 65 63 74  ata_store_direct
9a70: 6f 72 79 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 0a 66  ory}.} {0 {}}..f
9a80: 6f 72 63 65 64 65 6c 65 74 65 20 64 61 74 61 5f  orcedelete data_
9a90: 64 69 72 0a 7d 20 3b 23 20 65 6e 64 69 66 20 77  dir.} ;# endif w
9aa0: 69 6e 64 6f 77 73 0a 0a 66 69 6e 69 73 68 5f 74  indows..finish_t
9ab0: 65 73 74 0a                                      est.