/ Hex Artifact Content
Login
SQLite training in Houston TX on 2019-11-05 (details)
Part of the 2019 Tcl Conference

Artifact 6960f9efbce476f70ba9ee2171daf5042f9e3d8a:


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 54 65 73 74 20  ter.tcl..# Test 
0260: 6f 72 67 61 6e 69 7a 61 74 69 6f 6e 3a 0a 23 0a  organization:.#.
0270: 23 20 70 72 61 67 6d 61 2d 31 2e 2a 3a 20 54 65  # pragma-1.*: Te
0280: 73 74 20 63 61 63 68 65 5f 73 69 7a 65 2c 20 64  st cache_size, d
0290: 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a  efault_cache_siz
02a0: 65 20 61 6e 64 20 73 79 6e 63 68 72 6f 6e 6f 75  e and synchronou
02b0: 73 20 6f 6e 20 6d 61 69 6e 20 64 62 2e 0a 23 20  s on main db..# 
02c0: 70 72 61 67 6d 61 2d 32 2e 2a 3a 20 54 65 73 74  pragma-2.*: Test
02d0: 20 73 79 6e 63 68 72 6f 6e 6f 75 73 20 6f 6e 20   synchronous on 
02e0: 61 74 74 61 63 68 65 64 20 64 62 2e 0a 23 20 70  attached db..# p
02f0: 72 61 67 6d 61 2d 33 2e 2a 3a 20 54 65 73 74 20  ragma-3.*: Test 
0300: 64 65 74 65 63 74 69 6f 6e 20 6f 66 20 74 61 62  detection of tab
0310: 6c 65 2f 69 6e 64 65 78 20 69 6e 63 6f 6e 73 69  le/index inconsi
0320: 73 74 65 6e 63 79 20 62 79 20 69 6e 74 65 67 72  stency by integr
0330: 69 74 79 5f 63 68 65 63 6b 2e 0a 23 20 70 72 61  ity_check..# pra
0340: 67 6d 61 2d 34 2e 2a 3a 20 54 65 73 74 20 63 61  gma-4.*: Test ca
0350: 63 68 65 5f 73 69 7a 65 20 61 6e 64 20 64 65 66  che_size and def
0360: 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65 20  ault_cache_size 
0370: 6f 6e 20 61 74 74 61 63 68 65 64 20 64 62 2e 0a  on attached db..
0380: 23 20 70 72 61 67 6d 61 2d 35 2e 2a 3a 20 54 65  # pragma-5.*: Te
0390: 73 74 20 74 68 61 74 20 70 72 61 67 6d 61 20 73  st that pragma s
03a0: 79 6e 63 68 72 6f 6e 6f 75 73 20 6d 61 79 20 6e  ynchronous may n
03b0: 6f 74 20 62 65 20 75 73 65 64 20 69 6e 73 69 64  ot be used insid
03c0: 65 20 6f 66 20 61 0a 23 20 20 20 20 20 20 20 20  e of a.#        
03d0: 20 20 20 20 20 74 72 61 6e 73 61 63 74 69 6f 6e       transaction
03e0: 2e 0a 23 20 70 72 61 67 6d 61 2d 36 2e 2a 3a 20  ..# pragma-6.*: 
03f0: 54 65 73 74 20 73 63 68 65 6d 61 2d 71 75 65 72  Test schema-quer
0400: 79 20 70 72 61 67 6d 61 73 2e 0a 23 20 70 72 61  y pragmas..# pra
0410: 67 6d 61 2d 37 2e 2a 3a 20 4d 69 73 63 65 6c 6c  gma-7.*: Miscell
0420: 61 6e 65 6f 75 73 20 74 65 73 74 73 2e 0a 23 20  aneous tests..# 
0430: 70 72 61 67 6d 61 2d 38 2e 2a 3a 20 54 65 73 74  pragma-8.*: Test
0440: 20 75 73 65 72 5f 76 65 72 73 69 6f 6e 20 61 6e   user_version an
0450: 64 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e  d schema_version
0460: 20 70 72 61 67 6d 61 73 2e 0a 23 20 70 72 61 67   pragmas..# prag
0470: 6d 61 2d 39 2e 2a 3a 20 54 65 73 74 20 74 65 6d  ma-9.*: Test tem
0480: 70 5f 73 74 6f 72 65 20 61 6e 64 20 74 65 6d 70  p_store and temp
0490: 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79  _store_directory
04a0: 2e 0a 23 20 70 72 61 67 6d 61 2d 31 30 2e 2a 3a  ..# pragma-10.*:
04b0: 20 54 65 73 74 20 74 68 65 20 63 6f 75 6e 74 5f   Test the count_
04c0: 63 68 61 6e 67 65 73 20 70 72 61 67 6d 61 20 69  changes pragma i
04d0: 6e 20 74 68 65 20 70 72 65 73 65 6e 63 65 20 6f  n the presence o
04e0: 66 20 74 72 69 67 67 65 72 73 2e 0a 23 20 70 72  f triggers..# pr
04f0: 61 67 6d 61 2d 31 31 2e 2a 3a 20 54 65 73 74 20  agma-11.*: Test 
0500: 74 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 5f 6c 69  the collation_li
0510: 73 74 20 70 72 61 67 6d 61 2e 0a 23 20 70 72 61  st pragma..# pra
0520: 67 6d 61 2d 31 34 2e 2a 3a 20 54 65 73 74 20 74  gma-14.*: Test t
0530: 68 65 20 70 61 67 65 5f 63 6f 75 6e 74 20 70 72  he page_count pr
0540: 61 67 6d 61 2e 0a 23 20 70 72 61 67 6d 61 2d 31  agma..# pragma-1
0550: 35 2e 2a 3a 20 54 65 73 74 20 74 68 61 74 20 74  5.*: Test that t
0560: 68 65 20 76 61 6c 75 65 20 73 65 74 20 75 73 69  he value set usi
0570: 6e 67 20 74 68 65 20 63 61 63 68 65 5f 73 69 7a  ng the cache_siz
0580: 65 20 70 72 61 67 6d 61 20 69 73 20 6e 6f 74 0a  e pragma is not.
0590: 23 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72  #              r
05a0: 65 73 65 74 20 77 68 65 6e 20 74 68 65 20 73 63  eset when the sc
05b0: 68 65 6d 61 20 69 73 20 72 65 6c 6f 61 64 65 64  hema is reloaded
05c0: 2e 0a 23 20 70 72 61 67 6d 61 2d 31 36 2e 2a 3a  ..# pragma-16.*:
05d0: 20 54 65 73 74 20 70 72 6f 78 79 20 6c 6f 63 6b   Test proxy lock
05e0: 69 6e 67 0a 23 0a 0a 69 66 63 61 70 61 62 6c 65  ing.#..ifcapable
05f0: 20 21 70 72 61 67 6d 61 20 7b 0a 20 20 66 69 6e   !pragma {.  fin
0600: 69 73 68 5f 74 65 73 74 0a 20 20 72 65 74 75 72  ish_test.  retur
0610: 6e 0a 7d 0a 0a 23 20 44 65 6c 65 74 65 20 74 68  n.}..# Delete th
0620: 65 20 70 72 65 65 78 69 73 74 69 6e 67 20 64 61  e preexisting da
0630: 74 61 62 61 73 65 20 74 6f 20 61 76 6f 69 64 20  tabase to avoid 
0640: 74 68 65 20 73 70 65 63 69 61 6c 20 73 65 74 75  the special setu
0650: 70 0a 23 20 74 68 61 74 20 74 68 65 20 22 61 6c  p.# that the "al
0660: 6c 2e 74 65 73 74 22 20 73 63 72 69 70 74 20 64  l.test" script d
0670: 6f 65 73 2e 0a 23 0a 64 62 20 63 6c 6f 73 65 0a  oes..#.db close.
0680: 66 69 6c 65 20 64 65 6c 65 74 65 20 74 65 73 74  file delete test
0690: 2e 64 62 20 74 65 73 74 2e 64 62 2d 6a 6f 75 72  .db test.db-jour
06a0: 6e 61 6c 0a 66 69 6c 65 20 64 65 6c 65 74 65 20  nal.file delete 
06b0: 74 65 73 74 33 2e 64 62 20 74 65 73 74 33 2e 64  test3.db test3.d
06c0: 62 2d 6a 6f 75 72 6e 61 6c 0a 73 71 6c 69 74 65  b-journal.sqlite
06d0: 33 20 64 62 20 74 65 73 74 2e 64 62 3b 20 73 65  3 db test.db; se
06e0: 74 20 44 42 20 5b 73 71 6c 69 74 65 33 5f 63 6f  t DB [sqlite3_co
06f0: 6e 6e 65 63 74 69 6f 6e 5f 70 6f 69 6e 74 65 72  nnection_pointer
0700: 20 64 62 5d 0a 0a 0a 69 66 63 61 70 61 62 6c 65   db]...ifcapable
0710: 20 70 61 67 65 72 5f 70 72 61 67 6d 61 73 20 7b   pager_pragmas {
0720: 0a 73 65 74 20 44 46 4c 54 5f 43 41 43 48 45 5f  .set DFLT_CACHE_
0730: 53 5a 20 5b 64 62 20 6f 6e 65 20 7b 50 52 41 47  SZ [db one {PRAG
0740: 4d 41 20 64 65 66 61 75 6c 74 5f 63 61 63 68 65  MA default_cache
0750: 5f 73 69 7a 65 7d 5d 0a 73 65 74 20 54 45 4d 50  _size}].set TEMP
0760: 5f 43 41 43 48 45 5f 53 5a 20 5b 64 62 20 6f 6e  _CACHE_SZ [db on
0770: 65 20 7b 50 52 41 47 4d 41 20 74 65 6d 70 2e 64  e {PRAGMA temp.d
0780: 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a  efault_cache_siz
0790: 65 7d 5d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67  e}].do_test prag
07a0: 6d 61 2d 31 2e 31 20 7b 0a 20 20 65 78 65 63 73  ma-1.1 {.  execs
07b0: 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20  ql {.    PRAGMA 
07c0: 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20  cache_size;.    
07d0: 50 52 41 47 4d 41 20 64 65 66 61 75 6c 74 5f 63  PRAGMA default_c
07e0: 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 50  ache_size;.    P
07f0: 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75  RAGMA synchronou
0800: 73 3b 0a 20 20 7d 0a 7d 20 5b 6c 69 73 74 20 24  s;.  }.} [list $
0810: 44 46 4c 54 5f 43 41 43 48 45 5f 53 5a 20 24 44  DFLT_CACHE_SZ $D
0820: 46 4c 54 5f 43 41 43 48 45 5f 53 5a 20 32 5d 0a  FLT_CACHE_SZ 2].
0830: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31  do_test pragma-1
0840: 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .2 {.  execsql {
0850: 0a 20 20 20 20 50 52 41 47 4d 41 20 73 79 6e 63  .    PRAGMA sync
0860: 68 72 6f 6e 6f 75 73 3d 4f 46 46 3b 0a 20 20 20  hronous=OFF;.   
0870: 20 50 52 41 47 4d 41 20 63 61 63 68 65 5f 73 69   PRAGMA cache_si
0880: 7a 65 3d 31 32 33 34 3b 0a 20 20 20 20 50 52 41  ze=1234;.    PRA
0890: 47 4d 41 20 63 61 63 68 65 5f 73 69 7a 65 3b 0a  GMA cache_size;.
08a0: 20 20 20 20 50 52 41 47 4d 41 20 64 65 66 61 75      PRAGMA defau
08b0: 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20  lt_cache_size;. 
08c0: 20 20 20 50 52 41 47 4d 41 20 73 79 6e 63 68 72     PRAGMA synchr
08d0: 6f 6e 6f 75 73 3b 0a 20 20 7d 0a 7d 20 5b 6c 69  onous;.  }.} [li
08e0: 73 74 20 31 32 33 34 20 24 44 46 4c 54 5f 43 41  st 1234 $DFLT_CA
08f0: 43 48 45 5f 53 5a 20 30 5d 0a 64 6f 5f 74 65 73  CHE_SZ 0].do_tes
0900: 74 20 70 72 61 67 6d 61 2d 31 2e 33 20 7b 0a 20  t pragma-1.3 {. 
0910: 20 64 62 20 63 6c 6f 73 65 0a 20 20 73 71 6c 69   db close.  sqli
0920: 74 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20  te3 db test.db. 
0930: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50   execsql {.    P
0940: 52 41 47 4d 41 20 63 61 63 68 65 5f 73 69 7a 65  RAGMA cache_size
0950: 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 64 65 66  ;.    PRAGMA def
0960: 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65 3b  ault_cache_size;
0970: 0a 20 20 20 20 50 52 41 47 4d 41 20 73 79 6e 63  .    PRAGMA sync
0980: 68 72 6f 6e 6f 75 73 3b 0a 20 20 7d 0a 7d 20 5b  hronous;.  }.} [
0990: 6c 69 73 74 20 24 44 46 4c 54 5f 43 41 43 48 45  list $DFLT_CACHE
09a0: 5f 53 5a 20 24 44 46 4c 54 5f 43 41 43 48 45 5f  _SZ $DFLT_CACHE_
09b0: 53 5a 20 32 5d 0a 64 6f 5f 74 65 73 74 20 70 72  SZ 2].do_test pr
09c0: 61 67 6d 61 2d 31 2e 34 20 7b 0a 20 20 65 78 65  agma-1.4 {.  exe
09d0: 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d  csql {.    PRAGM
09e0: 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3d 4f 46  A synchronous=OF
09f0: 46 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 63 61  F;.    PRAGMA ca
0a00: 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 50 52  che_size;.    PR
0a10: 41 47 4d 41 20 64 65 66 61 75 6c 74 5f 63 61 63  AGMA default_cac
0a20: 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 50 52 41  he_size;.    PRA
0a30: 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3b  GMA synchronous;
0a40: 0a 20 20 7d 0a 7d 20 5b 6c 69 73 74 20 24 44 46  .  }.} [list $DF
0a50: 4c 54 5f 43 41 43 48 45 5f 53 5a 20 24 44 46 4c  LT_CACHE_SZ $DFL
0a60: 54 5f 43 41 43 48 45 5f 53 5a 20 30 5d 0a 64 6f  T_CACHE_SZ 0].do
0a70: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 2e 35  _test pragma-1.5
0a80: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
0a90: 20 20 20 50 52 41 47 4d 41 20 63 61 63 68 65 5f     PRAGMA cache_
0aa0: 73 69 7a 65 3d 2d 34 33 32 31 3b 0a 20 20 20 20  size=-4321;.    
0ab0: 50 52 41 47 4d 41 20 63 61 63 68 65 5f 73 69 7a  PRAGMA cache_siz
0ac0: 65 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 64 65  e;.    PRAGMA de
0ad0: 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65  fault_cache_size
0ae0: 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 73 79 6e  ;.    PRAGMA syn
0af0: 63 68 72 6f 6e 6f 75 73 3b 0a 20 20 7d 0a 7d 20  chronous;.  }.} 
0b00: 5b 6c 69 73 74 20 34 33 32 31 20 24 44 46 4c 54  [list 4321 $DFLT
0b10: 5f 43 41 43 48 45 5f 53 5a 20 30 5d 0a 64 6f 5f  _CACHE_SZ 0].do_
0b20: 74 65 73 74 20 70 72 61 67 6d 61 2d 31 2e 36 20  test pragma-1.6 
0b30: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
0b40: 20 20 50 52 41 47 4d 41 20 73 79 6e 63 68 72 6f    PRAGMA synchro
0b50: 6e 6f 75 73 3d 4f 4e 3b 0a 20 20 20 20 50 52 41  nous=ON;.    PRA
0b60: 47 4d 41 20 63 61 63 68 65 5f 73 69 7a 65 3b 0a  GMA cache_size;.
0b70: 20 20 20 20 50 52 41 47 4d 41 20 64 65 66 61 75      PRAGMA defau
0b80: 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20  lt_cache_size;. 
0b90: 20 20 20 50 52 41 47 4d 41 20 73 79 6e 63 68 72     PRAGMA synchr
0ba0: 6f 6e 6f 75 73 3b 0a 20 20 7d 0a 7d 20 5b 6c 69  onous;.  }.} [li
0bb0: 73 74 20 34 33 32 31 20 24 44 46 4c 54 5f 43 41  st 4321 $DFLT_CA
0bc0: 43 48 45 5f 53 5a 20 31 5d 0a 64 6f 5f 74 65 73  CHE_SZ 1].do_tes
0bd0: 74 20 70 72 61 67 6d 61 2d 31 2e 37 20 7b 0a 20  t pragma-1.7 {. 
0be0: 20 64 62 20 63 6c 6f 73 65 0a 20 20 73 71 6c 69   db close.  sqli
0bf0: 74 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20  te3 db test.db. 
0c00: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50   execsql {.    P
0c10: 52 41 47 4d 41 20 63 61 63 68 65 5f 73 69 7a 65  RAGMA cache_size
0c20: 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 64 65 66  ;.    PRAGMA def
0c30: 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65 3b  ault_cache_size;
0c40: 0a 20 20 20 20 50 52 41 47 4d 41 20 73 79 6e 63  .    PRAGMA sync
0c50: 68 72 6f 6e 6f 75 73 3b 0a 20 20 7d 0a 7d 20 5b  hronous;.  }.} [
0c60: 6c 69 73 74 20 24 44 46 4c 54 5f 43 41 43 48 45  list $DFLT_CACHE
0c70: 5f 53 5a 20 24 44 46 4c 54 5f 43 41 43 48 45 5f  _SZ $DFLT_CACHE_
0c80: 53 5a 20 32 5d 0a 64 6f 5f 74 65 73 74 20 70 72  SZ 2].do_test pr
0c90: 61 67 6d 61 2d 31 2e 38 20 7b 0a 20 20 65 78 65  agma-1.8 {.  exe
0ca0: 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d  csql {.    PRAGM
0cb0: 41 20 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f  A default_cache_
0cc0: 73 69 7a 65 3d 2d 31 32 33 3b 0a 20 20 20 20 50  size=-123;.    P
0cd0: 52 41 47 4d 41 20 63 61 63 68 65 5f 73 69 7a 65  RAGMA cache_size
0ce0: 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 64 65 66  ;.    PRAGMA def
0cf0: 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65 3b  ault_cache_size;
0d00: 0a 20 20 20 20 50 52 41 47 4d 41 20 73 79 6e 63  .    PRAGMA sync
0d10: 68 72 6f 6e 6f 75 73 3b 0a 20 20 7d 0a 7d 20 7b  hronous;.  }.} {
0d20: 31 32 33 20 31 32 33 20 32 7d 0a 64 6f 5f 74 65  123 123 2}.do_te
0d30: 73 74 20 70 72 61 67 6d 61 2d 31 2e 39 2e 31 20  st pragma-1.9.1 
0d40: 7b 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 73  {.  db close.  s
0d50: 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64  qlite3 db test.d
0d60: 62 3b 20 73 65 74 20 3a 3a 44 42 20 5b 73 71 6c  b; set ::DB [sql
0d70: 69 74 65 33 5f 63 6f 6e 6e 65 63 74 69 6f 6e 5f  ite3_connection_
0d80: 70 6f 69 6e 74 65 72 20 64 62 5d 0a 20 20 65 78  pointer db].  ex
0d90: 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47  ecsql {.    PRAG
0da0: 4d 41 20 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20  MA cache_size;. 
0db0: 20 20 20 50 52 41 47 4d 41 20 64 65 66 61 75 6c     PRAGMA defaul
0dc0: 74 5f 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20  t_cache_size;.  
0dd0: 20 20 50 52 41 47 4d 41 20 73 79 6e 63 68 72 6f    PRAGMA synchro
0de0: 6e 6f 75 73 3b 0a 20 20 7d 0a 7d 20 7b 31 32 33  nous;.  }.} {123
0df0: 20 31 32 33 20 32 7d 0a 69 66 63 61 70 61 62 6c   123 2}.ifcapabl
0e00: 65 20 76 61 63 75 75 6d 20 7b 0a 20 20 64 6f 5f  e vacuum {.  do_
0e10: 74 65 73 74 20 70 72 61 67 6d 61 2d 31 2e 39 2e  test pragma-1.9.
0e20: 32 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  2 {.    execsql 
0e30: 7b 0a 20 20 20 20 20 20 56 41 43 55 55 4d 3b 0a  {.      VACUUM;.
0e40: 20 20 20 20 20 20 50 52 41 47 4d 41 20 63 61 63        PRAGMA cac
0e50: 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 20 20 50  he_size;.      P
0e60: 52 41 47 4d 41 20 64 65 66 61 75 6c 74 5f 63 61  RAGMA default_ca
0e70: 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 20 20  che_size;.      
0e80: 50 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f  PRAGMA synchrono
0e90: 75 73 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 31  us;.    }.  } {1
0ea0: 32 33 20 31 32 33 20 32 7d 0a 7d 0a 64 6f 5f 74  23 123 2}.}.do_t
0eb0: 65 73 74 20 70 72 61 67 6d 61 2d 31 2e 31 30 20  est pragma-1.10 
0ec0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
0ed0: 20 20 50 52 41 47 4d 41 20 73 79 6e 63 68 72 6f    PRAGMA synchro
0ee0: 6e 6f 75 73 3d 4e 4f 52 4d 41 4c 3b 0a 20 20 20  nous=NORMAL;.   
0ef0: 20 50 52 41 47 4d 41 20 63 61 63 68 65 5f 73 69   PRAGMA cache_si
0f00: 7a 65 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 64  ze;.    PRAGMA d
0f10: 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a  efault_cache_siz
0f20: 65 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 73 79  e;.    PRAGMA sy
0f30: 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20 20 7d 0a 7d  nchronous;.  }.}
0f40: 20 7b 31 32 33 20 31 32 33 20 31 7d 0a 64 6f 5f   {123 123 1}.do_
0f50: 74 65 73 74 20 70 72 61 67 6d 61 2d 31 2e 31 31  test pragma-1.11
0f60: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
0f70: 20 20 20 50 52 41 47 4d 41 20 73 79 6e 63 68 72     PRAGMA synchr
0f80: 6f 6e 6f 75 73 3d 46 55 4c 4c 3b 0a 20 20 20 20  onous=FULL;.    
0f90: 50 52 41 47 4d 41 20 63 61 63 68 65 5f 73 69 7a  PRAGMA cache_siz
0fa0: 65 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 64 65  e;.    PRAGMA de
0fb0: 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65  fault_cache_size
0fc0: 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 73 79 6e  ;.    PRAGMA syn
0fd0: 63 68 72 6f 6e 6f 75 73 3b 0a 20 20 7d 0a 7d 20  chronous;.  }.} 
0fe0: 7b 31 32 33 20 31 32 33 20 32 7d 0a 64 6f 5f 74  {123 123 2}.do_t
0ff0: 65 73 74 20 70 72 61 67 6d 61 2d 31 2e 31 32 20  est pragma-1.12 
1000: 7b 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 73  {.  db close.  s
1010: 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64  qlite3 db test.d
1020: 62 3b 20 73 65 74 20 3a 3a 44 42 20 5b 73 71 6c  b; set ::DB [sql
1030: 69 74 65 33 5f 63 6f 6e 6e 65 63 74 69 6f 6e 5f  ite3_connection_
1040: 70 6f 69 6e 74 65 72 20 64 62 5d 0a 20 20 65 78  pointer db].  ex
1050: 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47  ecsql {.    PRAG
1060: 4d 41 20 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20  MA cache_size;. 
1070: 20 20 20 50 52 41 47 4d 41 20 64 65 66 61 75 6c     PRAGMA defaul
1080: 74 5f 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20  t_cache_size;.  
1090: 20 20 50 52 41 47 4d 41 20 73 79 6e 63 68 72 6f    PRAGMA synchro
10a0: 6e 6f 75 73 3b 0a 20 20 7d 0a 7d 20 7b 31 32 33  nous;.  }.} {123
10b0: 20 31 32 33 20 32 7d 0a 0a 23 20 4d 61 6b 65 20   123 2}..# Make 
10c0: 73 75 72 65 20 74 68 65 20 70 72 61 67 6d 61 20  sure the pragma 
10d0: 68 61 6e 64 6c 65 72 20 75 6e 64 65 72 73 74 61  handler understa
10e0: 6e 64 73 20 6e 75 6d 65 72 69 63 20 76 61 6c 75  nds numeric valu
10f0: 65 73 20 69 6e 20 61 64 64 69 74 69 6f 6e 0a 23  es in addition.#
1100: 20 74 6f 20 6b 65 79 77 6f 72 64 73 20 6c 69 6b   to keywords lik
1110: 65 20 22 6f 66 66 22 20 61 6e 64 20 22 66 75 6c  e "off" and "ful
1120: 6c 22 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 70 72  l"..#.do_test pr
1130: 61 67 6d 61 2d 31 2e 31 33 20 7b 0a 20 20 65 78  agma-1.13 {.  ex
1140: 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47  ecsql {.    PRAG
1150: 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3d 30  MA synchronous=0
1160: 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 73 79 6e  ;.    PRAGMA syn
1170: 63 68 72 6f 6e 6f 75 73 3b 0a 20 20 7d 0a 7d 20  chronous;.  }.} 
1180: 7b 30 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67  {0}.do_test prag
1190: 6d 61 2d 31 2e 31 34 20 7b 0a 20 20 65 78 65 63  ma-1.14 {.  exec
11a0: 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41  sql {.    PRAGMA
11b0: 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3d 32 3b 0a   synchronous=2;.
11c0: 20 20 20 20 50 52 41 47 4d 41 20 73 79 6e 63 68      PRAGMA synch
11d0: 72 6f 6e 6f 75 73 3b 0a 20 20 7d 0a 7d 20 7b 32  ronous;.  }.} {2
11e0: 7d 0a 7d 20 3b 23 20 69 66 63 61 70 61 62 6c 65  }.} ;# ifcapable
11f0: 20 70 61 67 65 72 5f 70 72 61 67 6d 61 73 0a 0a   pager_pragmas..
1200: 23 20 54 65 73 74 20 74 75 72 6e 69 6e 67 20 22  # Test turning "
1210: 66 6c 61 67 22 20 70 72 61 67 6d 61 73 20 6f 6e  flag" pragmas on
1220: 20 61 6e 64 20 6f 66 66 2e 0a 23 0a 69 66 63 61   and off..#.ifca
1230: 70 61 62 6c 65 20 64 65 62 75 67 20 7b 0a 20 20  pable debug {.  
1240: 23 20 50 72 61 67 6d 61 20 22 76 64 62 65 5f 6c  # Pragma "vdbe_l
1250: 69 73 74 69 6e 67 22 20 69 73 20 6f 6e 6c 79 20  isting" is only 
1260: 61 76 61 69 6c 61 62 6c 65 20 69 66 20 63 6f 6d  available if com
1270: 70 69 6c 65 64 20 77 69 74 68 20 53 51 4c 49 54  piled with SQLIT
1280: 45 5f 44 45 42 55 47 0a 20 20 23 0a 20 20 64 6f  E_DEBUG.  #.  do
1290: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 2e 31  _test pragma-1.1
12a0: 35 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  5 {.    execsql 
12b0: 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 76  {.      PRAGMA v
12c0: 64 62 65 5f 6c 69 73 74 69 6e 67 3d 59 45 53 3b  dbe_listing=YES;
12d0: 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 76 64  .      PRAGMA vd
12e0: 62 65 5f 6c 69 73 74 69 6e 67 3b 0a 20 20 20 20  be_listing;.    
12f0: 7d 0a 20 20 7d 20 7b 31 7d 0a 20 20 64 6f 5f 74  }.  } {1}.  do_t
1300: 65 73 74 20 70 72 61 67 6d 61 2d 31 2e 31 36 20  est pragma-1.16 
1310: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a  {.    execsql {.
1320: 20 20 20 20 20 20 50 52 41 47 4d 41 20 76 64 62        PRAGMA vdb
1330: 65 5f 6c 69 73 74 69 6e 67 3d 4e 4f 3b 0a 20 20  e_listing=NO;.  
1340: 20 20 20 20 50 52 41 47 4d 41 20 76 64 62 65 5f      PRAGMA vdbe_
1350: 6c 69 73 74 69 6e 67 3b 0a 20 20 20 20 7d 0a 20  listing;.    }. 
1360: 20 7d 20 7b 30 7d 0a 7d 0a 0a 64 6f 5f 74 65 73   } {0}.}..do_tes
1370: 74 20 70 72 61 67 6d 61 2d 31 2e 31 37 20 7b 0a  t pragma-1.17 {.
1380: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
1390: 50 52 41 47 4d 41 20 70 61 72 73 65 72 5f 74 72  PRAGMA parser_tr
13a0: 61 63 65 3d 4f 4e 3b 0a 20 20 20 20 50 52 41 47  ace=ON;.    PRAG
13b0: 4d 41 20 70 61 72 73 65 72 5f 74 72 61 63 65 3d  MA parser_trace=
13c0: 4f 46 46 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f  OFF;.  }.} {}.do
13d0: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 2e 31  _test pragma-1.1
13e0: 38 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  8 {.  execsql {.
13f0: 20 20 20 20 50 52 41 47 4d 41 20 62 6f 67 75 73      PRAGMA bogus
1400: 20 3d 20 2d 31 32 33 34 3b 20 20 2d 2d 20 50 61   = -1234;  -- Pa
1410: 72 73 69 6e 67 20 6f 66 20 6e 65 67 61 74 69 76  rsing of negativ
1420: 65 20 76 61 6c 75 65 73 0a 20 20 7d 0a 7d 20 7b  e values.  }.} {
1430: 7d 0a 0a 23 20 54 65 73 74 20 6d 6f 64 69 66 79  }..# Test modify
1440: 69 6e 67 20 74 68 65 20 73 61 66 65 74 79 5f 6c  ing the safety_l
1450: 65 76 65 6c 20 6f 66 20 61 6e 20 61 74 74 61 63  evel of an attac
1460: 68 65 64 20 64 61 74 61 62 61 73 65 2e 0a 69 66  hed database..if
1470: 63 61 70 61 62 6c 65 20 70 61 67 65 72 5f 70 72  capable pager_pr
1480: 61 67 6d 61 73 26 26 61 74 74 61 63 68 20 7b 0a  agmas&&attach {.
1490: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
14a0: 2d 32 2e 31 20 7b 0a 20 20 20 20 66 69 6c 65 20  -2.1 {.    file 
14b0: 64 65 6c 65 74 65 20 2d 66 6f 72 63 65 20 74 65  delete -force te
14c0: 73 74 32 2e 64 62 0a 20 20 20 20 66 69 6c 65 20  st2.db.    file 
14d0: 64 65 6c 65 74 65 20 2d 66 6f 72 63 65 20 74 65  delete -force te
14e0: 73 74 32 2e 64 62 2d 6a 6f 75 72 6e 61 6c 0a 20  st2.db-journal. 
14f0: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
1500: 20 20 20 41 54 54 41 43 48 20 27 74 65 73 74 32     ATTACH 'test2
1510: 2e 64 62 27 20 41 53 20 61 75 78 3b 0a 20 20 20  .db' AS aux;.   
1520: 20 7d 20 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f   } .  } {}.  do_
1530: 74 65 73 74 20 70 72 61 67 6d 61 2d 32 2e 32 20  test pragma-2.2 
1540: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a  {.    execsql {.
1550: 20 20 20 20 20 20 70 72 61 67 6d 61 20 61 75 78        pragma aux
1560: 2e 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20 20  .synchronous;.  
1570: 20 20 7d 20 0a 20 20 7d 20 7b 32 7d 0a 20 20 64    } .  } {2}.  d
1580: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 32 2e  o_test pragma-2.
1590: 33 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  3 {.    execsql 
15a0: 7b 0a 20 20 20 20 20 20 70 72 61 67 6d 61 20 61  {.      pragma a
15b0: 75 78 2e 73 79 6e 63 68 72 6f 6e 6f 75 73 20 3d  ux.synchronous =
15c0: 20 4f 46 46 3b 0a 20 20 20 20 20 20 70 72 61 67   OFF;.      prag
15d0: 6d 61 20 61 75 78 2e 73 79 6e 63 68 72 6f 6e 6f  ma aux.synchrono
15e0: 75 73 3b 0a 20 20 20 20 20 20 70 72 61 67 6d 61  us;.      pragma
15f0: 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20 20   synchronous;.  
1600: 20 20 7d 20 0a 20 20 7d 20 7b 30 20 32 7d 0a 20    } .  } {0 2}. 
1610: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
1620: 32 2e 34 20 7b 0a 20 20 20 20 65 78 65 63 73 71  2.4 {.    execsq
1630: 6c 20 7b 0a 20 20 20 20 20 20 70 72 61 67 6d 61  l {.      pragma
1640: 20 61 75 78 2e 73 79 6e 63 68 72 6f 6e 6f 75 73   aux.synchronous
1650: 20 3d 20 4f 4e 3b 0a 20 20 20 20 20 20 70 72 61   = ON;.      pra
1660: 67 6d 61 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3b  gma synchronous;
1670: 0a 20 20 20 20 20 20 70 72 61 67 6d 61 20 61 75  .      pragma au
1680: 78 2e 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20  x.synchronous;. 
1690: 20 20 20 7d 20 0a 20 20 7d 20 7b 32 20 31 7d 0a     } .  } {2 1}.
16a0: 7d 20 3b 23 20 69 66 63 61 70 61 62 6c 65 20 70  } ;# ifcapable p
16b0: 61 67 65 72 5f 70 72 61 67 6d 61 73 0a 0a 23 20  ager_pragmas..# 
16c0: 43 6f 6e 73 74 72 75 63 74 20 61 20 63 6f 72 72  Construct a corr
16d0: 75 70 74 65 64 20 69 6e 64 65 78 20 61 6e 64 20  upted index and 
16e0: 6d 61 6b 65 20 73 75 72 65 20 74 68 65 20 69 6e  make sure the in
16f0: 74 65 67 72 69 74 79 5f 63 68 65 63 6b 0a 23 20  tegrity_check.# 
1700: 70 72 61 67 6d 61 20 66 69 6e 64 73 20 69 74 2e  pragma finds it.
1710: 0a 23 0a 23 20 54 68 65 73 65 20 74 65 73 74 73  .#.# These tests
1720: 20 77 6f 6e 27 74 20 77 6f 72 6b 20 69 66 20 74   won't work if t
1730: 68 65 20 64 61 74 61 62 61 73 65 20 69 73 20 65  he database is e
1740: 6e 63 72 79 70 74 65 64 0a 23 0a 64 6f 5f 74 65  ncrypted.#.do_te
1750: 73 74 20 70 72 61 67 6d 61 2d 33 2e 31 20 7b 0a  st pragma-3.1 {.
1760: 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 66 69 6c    db close.  fil
1770: 65 20 64 65 6c 65 74 65 20 2d 66 6f 72 63 65 20  e delete -force 
1780: 74 65 73 74 2e 64 62 20 74 65 73 74 2e 64 62 2d  test.db test.db-
1790: 6a 6f 75 72 6e 61 6c 0a 20 20 73 71 6c 69 74 65  journal.  sqlite
17a0: 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20 65  3 db test.db.  e
17b0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41  xecsql {.    PRA
17c0: 47 4d 41 20 61 75 74 6f 5f 76 61 63 75 75 6d 3d  GMA auto_vacuum=
17d0: 4f 46 46 3b 0a 20 20 20 20 42 45 47 49 4e 3b 0a  OFF;.    BEGIN;.
17e0: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
17f0: 20 74 32 28 61 2c 62 2c 63 29 3b 0a 20 20 20 20   t2(a,b,c);.    
1800: 43 52 45 41 54 45 20 49 4e 44 45 58 20 69 32 20  CREATE INDEX i2 
1810: 4f 4e 20 74 32 28 61 29 3b 0a 20 20 20 20 49 4e  ON t2(a);.    IN
1820: 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c  SERT INTO t2 VAL
1830: 55 45 53 28 31 31 2c 32 2c 33 29 3b 0a 20 20 20  UES(11,2,3);.   
1840: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20   INSERT INTO t2 
1850: 56 41 4c 55 45 53 28 32 32 2c 33 2c 34 29 3b 0a  VALUES(22,3,4);.
1860: 20 20 20 20 43 4f 4d 4d 49 54 3b 0a 20 20 20 20      COMMIT;.    
1870: 53 45 4c 45 43 54 20 72 6f 77 69 64 2c 20 2a 20  SELECT rowid, * 
1880: 66 72 6f 6d 20 74 32 3b 0a 20 20 7d 0a 7d 20 7b  from t2;.  }.} {
1890: 31 20 31 31 20 32 20 33 20 32 20 32 32 20 33 20  1 11 2 3 2 22 3 
18a0: 34 7d 0a 69 66 63 61 70 61 62 6c 65 20 61 74 74  4}.ifcapable att
18b0: 61 63 68 20 7b 0a 20 20 69 66 20 7b 21 5b 73 71  ach {.  if {![sq
18c0: 6c 69 74 65 33 20 2d 68 61 73 2d 63 6f 64 65 63  lite3 -has-codec
18d0: 5d 20 26 26 20 24 73 71 6c 69 74 65 5f 6f 70 74  ] && $sqlite_opt
18e0: 69 6f 6e 73 28 69 6e 74 65 67 72 69 74 79 63 6b  ions(integrityck
18f0: 29 7d 20 7b 0a 20 20 20 20 64 6f 5f 74 65 73 74  )} {.    do_test
1900: 20 70 72 61 67 6d 61 2d 33 2e 32 20 7b 0a 20 20   pragma-3.2 {.  
1910: 20 20 20 20 64 62 20 65 76 61 6c 20 7b 53 45 4c      db eval {SEL
1920: 45 43 54 20 72 6f 6f 74 70 61 67 65 20 46 52 4f  ECT rootpage FRO
1930: 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20  M sqlite_master 
1940: 57 48 45 52 45 20 6e 61 6d 65 3d 27 69 32 27 7d  WHERE name='i2'}
1950: 20 62 72 65 61 6b 0a 20 20 20 20 20 20 73 65 74   break.      set
1960: 20 70 67 73 7a 20 5b 64 62 20 65 76 61 6c 20 7b   pgsz [db eval {
1970: 50 52 41 47 4d 41 20 70 61 67 65 5f 73 69 7a 65  PRAGMA page_size
1980: 7d 5d 0a 20 20 20 20 20 20 23 20 6f 76 65 72 77  }].      # overw
1990: 72 69 74 65 20 74 68 65 20 68 65 61 64 65 72 20  rite the header 
19a0: 6f 6e 20 74 68 65 20 72 6f 6f 74 70 61 67 65 20  on the rootpage 
19b0: 6f 66 20 74 68 65 20 69 6e 64 65 78 20 69 6e 20  of the index in 
19c0: 6f 72 64 65 72 20 74 6f 0a 20 20 20 20 20 20 23  order to.      #
19d0: 20 6d 61 6b 65 20 74 68 65 20 69 6e 64 65 78 20   make the index 
19e0: 61 70 70 65 61 72 20 74 6f 20 62 65 20 65 6d 70  appear to be emp
19f0: 74 79 2e 0a 20 20 20 20 20 20 23 0a 20 20 20 20  ty..      #.    
1a00: 20 20 73 65 74 20 6f 66 66 73 65 74 20 5b 65 78    set offset [ex
1a10: 70 72 20 7b 24 70 67 73 7a 2a 28 24 72 6f 6f 74  pr {$pgsz*($root
1a20: 70 61 67 65 2d 31 29 7d 5d 0a 20 20 20 20 20 20  page-1)}].      
1a30: 68 65 78 69 6f 5f 77 72 69 74 65 20 74 65 73 74  hexio_write test
1a40: 2e 64 62 20 24 6f 66 66 73 65 74 20 30 61 30 30  .db $offset 0a00
1a50: 30 30 30 30 30 30 30 34 30 30 30 30 30 30 30 30  0000000400000000
1a60: 30 30 0a 20 20 20 20 20 20 64 62 20 63 6c 6f 73  00.      db clos
1a70: 65 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 20  e.      sqlite3 
1a80: 64 62 20 74 65 73 74 2e 64 62 0a 20 20 20 20 20  db test.db.     
1a90: 20 65 78 65 63 73 71 6c 20 7b 50 52 41 47 4d 41   execsql {PRAGMA
1aa0: 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b   integrity_check
1ab0: 7d 0a 20 20 20 20 7d 20 7b 7b 72 6f 77 69 64 20  }.    } {{rowid 
1ac0: 31 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69  1 missing from i
1ad0: 6e 64 65 78 20 69 32 7d 20 7b 72 6f 77 69 64 20  ndex i2} {rowid 
1ae0: 32 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69  2 missing from i
1af0: 6e 64 65 78 20 69 32 7d 20 7b 77 72 6f 6e 67 20  ndex i2} {wrong 
1b00: 23 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20  # of entries in 
1b10: 69 6e 64 65 78 20 69 32 7d 7d 0a 20 20 20 20 64  index i2}}.    d
1b20: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 33 2e  o_test pragma-3.
1b30: 33 20 7b 0a 20 20 20 20 20 20 65 78 65 63 73 71  3 {.      execsq
1b40: 6c 20 7b 50 52 41 47 4d 41 20 69 6e 74 65 67 72  l {PRAGMA integr
1b50: 69 74 79 5f 63 68 65 63 6b 3d 31 7d 0a 20 20 20  ity_check=1}.   
1b60: 20 7d 20 7b 7b 72 6f 77 69 64 20 31 20 6d 69 73   } {{rowid 1 mis
1b70: 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20  sing from index 
1b80: 69 32 7d 7d 0a 20 20 20 20 64 6f 5f 74 65 73 74  i2}}.    do_test
1b90: 20 70 72 61 67 6d 61 2d 33 2e 34 20 7b 0a 20 20   pragma-3.4 {.  
1ba0: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20      execsql {.  
1bb0: 20 20 20 20 20 20 41 54 54 41 43 48 20 44 41 54        ATTACH DAT
1bc0: 41 42 41 53 45 20 27 74 65 73 74 2e 64 62 27 20  ABASE 'test.db' 
1bd0: 41 53 20 74 32 3b 0a 20 20 20 20 20 20 20 20 50  AS t2;.        P
1be0: 52 41 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f  RAGMA integrity_
1bf0: 63 68 65 63 6b 0a 20 20 20 20 20 20 7d 0a 20 20  check.      }.  
1c00: 20 20 7d 20 7b 7b 72 6f 77 69 64 20 31 20 6d 69    } {{rowid 1 mi
1c10: 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78  ssing from index
1c20: 20 69 32 7d 20 7b 72 6f 77 69 64 20 32 20 6d 69   i2} {rowid 2 mi
1c30: 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78  ssing from index
1c40: 20 69 32 7d 20 7b 77 72 6f 6e 67 20 23 20 6f 66   i2} {wrong # of
1c50: 20 65 6e 74 72 69 65 73 20 69 6e 20 69 6e 64 65   entries in inde
1c60: 78 20 69 32 7d 20 7b 72 6f 77 69 64 20 31 20 6d  x i2} {rowid 1 m
1c70: 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65  issing from inde
1c80: 78 20 69 32 7d 20 7b 72 6f 77 69 64 20 32 20 6d  x i2} {rowid 2 m
1c90: 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65  issing from inde
1ca0: 78 20 69 32 7d 20 7b 77 72 6f 6e 67 20 23 20 6f  x i2} {wrong # o
1cb0: 66 20 65 6e 74 72 69 65 73 20 69 6e 20 69 6e 64  f entries in ind
1cc0: 65 78 20 69 32 7d 7d 0a 20 20 20 20 64 6f 5f 74  ex i2}}.    do_t
1cd0: 65 73 74 20 70 72 61 67 6d 61 2d 33 2e 35 20 7b  est pragma-3.5 {
1ce0: 0a 20 20 20 20 20 20 65 78 65 63 73 71 6c 20 7b  .      execsql {
1cf0: 0a 20 20 20 20 20 20 20 20 50 52 41 47 4d 41 20  .        PRAGMA 
1d00: 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 3d  integrity_check=
1d10: 34 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 20  4.      }.    } 
1d20: 7b 7b 72 6f 77 69 64 20 31 20 6d 69 73 73 69 6e  {{rowid 1 missin
1d30: 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d  g from index i2}
1d40: 20 7b 72 6f 77 69 64 20 32 20 6d 69 73 73 69 6e   {rowid 2 missin
1d50: 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d  g from index i2}
1d60: 20 7b 77 72 6f 6e 67 20 23 20 6f 66 20 65 6e 74   {wrong # of ent
1d70: 72 69 65 73 20 69 6e 20 69 6e 64 65 78 20 69 32  ries in index i2
1d80: 7d 20 7b 72 6f 77 69 64 20 31 20 6d 69 73 73 69  } {rowid 1 missi
1d90: 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32  ng from index i2
1da0: 7d 7d 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 70  }}.    do_test p
1db0: 72 61 67 6d 61 2d 33 2e 36 20 7b 0a 20 20 20 20  ragma-3.6 {.    
1dc0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
1dd0: 20 20 20 20 50 52 41 47 4d 41 20 69 6e 74 65 67      PRAGMA integ
1de0: 72 69 74 79 5f 63 68 65 63 6b 3d 78 79 7a 0a 20  rity_check=xyz. 
1df0: 20 20 20 20 20 7d 0a 20 20 20 20 7d 20 7b 7b 72       }.    } {{r
1e00: 6f 77 69 64 20 31 20 6d 69 73 73 69 6e 67 20 66  owid 1 missing f
1e10: 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b 72  rom index i2} {r
1e20: 6f 77 69 64 20 32 20 6d 69 73 73 69 6e 67 20 66  owid 2 missing f
1e30: 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b 77  rom index i2} {w
1e40: 72 6f 6e 67 20 23 20 6f 66 20 65 6e 74 72 69 65  rong # of entrie
1e50: 73 20 69 6e 20 69 6e 64 65 78 20 69 32 7d 20 7b  s in index i2} {
1e60: 72 6f 77 69 64 20 31 20 6d 69 73 73 69 6e 67 20  rowid 1 missing 
1e70: 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b  from index i2} {
1e80: 72 6f 77 69 64 20 32 20 6d 69 73 73 69 6e 67 20  rowid 2 missing 
1e90: 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b  from index i2} {
1ea0: 77 72 6f 6e 67 20 23 20 6f 66 20 65 6e 74 72 69  wrong # of entri
1eb0: 65 73 20 69 6e 20 69 6e 64 65 78 20 69 32 7d 7d  es in index i2}}
1ec0: 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 70 72 61  .    do_test pra
1ed0: 67 6d 61 2d 33 2e 37 20 7b 0a 20 20 20 20 20 20  gma-3.7 {.      
1ee0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
1ef0: 20 20 50 52 41 47 4d 41 20 69 6e 74 65 67 72 69    PRAGMA integri
1f00: 74 79 5f 63 68 65 63 6b 3d 30 0a 20 20 20 20 20  ty_check=0.     
1f10: 20 7d 0a 20 20 20 20 7d 20 7b 7b 72 6f 77 69 64   }.    } {{rowid
1f20: 20 31 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20   1 missing from 
1f30: 69 6e 64 65 78 20 69 32 7d 20 7b 72 6f 77 69 64  index i2} {rowid
1f40: 20 32 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20   2 missing from 
1f50: 69 6e 64 65 78 20 69 32 7d 20 7b 77 72 6f 6e 67  index i2} {wrong
1f60: 20 23 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e   # of entries in
1f70: 20 69 6e 64 65 78 20 69 32 7d 20 7b 72 6f 77 69   index i2} {rowi
1f80: 64 20 31 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d  d 1 missing from
1f90: 20 69 6e 64 65 78 20 69 32 7d 20 7b 72 6f 77 69   index i2} {rowi
1fa0: 64 20 32 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d  d 2 missing from
1fb0: 20 69 6e 64 65 78 20 69 32 7d 20 7b 77 72 6f 6e   index i2} {wron
1fc0: 67 20 23 20 6f 66 20 65 6e 74 72 69 65 73 20 69  g # of entries i
1fd0: 6e 20 69 6e 64 65 78 20 69 32 7d 7d 0a 20 20 0a  n index i2}}.  .
1fe0: 20 20 20 20 23 20 41 64 64 20 61 64 64 69 74 69      # Add additi
1ff0: 6f 6e 61 6c 20 63 6f 72 72 75 70 74 69 6f 6e 20  onal corruption 
2000: 62 79 20 61 70 70 65 6e 64 69 6e 67 20 75 6e 75  by appending unu
2010: 73 65 64 20 70 61 67 65 73 20 74 6f 20 74 68 65  sed pages to the
2020: 20 65 6e 64 20 6f 66 0a 20 20 20 20 23 20 74 68   end of.    # th
2030: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
2040: 74 65 73 74 65 72 72 2e 64 62 0a 20 20 20 20 23  testerr.db.    #
2050: 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 70 72 61  .    do_test pra
2060: 67 6d 61 2d 33 2e 38 20 7b 0a 20 20 20 20 20 20  gma-3.8 {.      
2070: 65 78 65 63 73 71 6c 20 7b 44 45 54 41 43 48 20  execsql {DETACH 
2080: 74 32 7d 0a 20 20 20 20 20 20 66 69 6c 65 20 64  t2}.      file d
2090: 65 6c 65 74 65 20 2d 66 6f 72 63 65 20 74 65 73  elete -force tes
20a0: 74 65 72 72 2e 64 62 20 74 65 73 74 65 72 72 2e  terr.db testerr.
20b0: 64 62 2d 6a 6f 75 72 6e 61 6c 0a 20 20 20 20 20  db-journal.     
20c0: 20 73 65 74 20 6f 75 74 20 5b 6f 70 65 6e 20 74   set out [open t
20d0: 65 73 74 65 72 72 2e 64 62 20 77 5d 0a 20 20 20  esterr.db w].   
20e0: 20 20 20 66 63 6f 6e 66 69 67 75 72 65 20 24 6f     fconfigure $o
20f0: 75 74 20 2d 74 72 61 6e 73 6c 61 74 69 6f 6e 20  ut -translation 
2100: 62 69 6e 61 72 79 0a 20 20 20 20 20 20 73 65 74  binary.      set
2110: 20 69 6e 20 5b 6f 70 65 6e 20 74 65 73 74 2e 64   in [open test.d
2120: 62 20 72 5d 0a 20 20 20 20 20 20 66 63 6f 6e 66  b r].      fconf
2130: 69 67 75 72 65 20 24 69 6e 20 2d 74 72 61 6e 73  igure $in -trans
2140: 6c 61 74 69 6f 6e 20 62 69 6e 61 72 79 0a 20 20  lation binary.  
2150: 20 20 20 20 70 75 74 73 20 2d 6e 6f 6e 65 77 6c      puts -nonewl
2160: 69 6e 65 20 24 6f 75 74 20 5b 72 65 61 64 20 24  ine $out [read $
2170: 69 6e 5d 0a 20 20 20 20 20 20 73 65 65 6b 20 24  in].      seek $
2180: 69 6e 20 30 0a 20 20 20 20 20 20 70 75 74 73 20  in 0.      puts 
2190: 2d 6e 6f 6e 65 77 6c 69 6e 65 20 24 6f 75 74 20  -nonewline $out 
21a0: 5b 72 65 61 64 20 24 69 6e 5d 0a 20 20 20 20 20  [read $in].     
21b0: 20 63 6c 6f 73 65 20 24 69 6e 0a 20 20 20 20 20   close $in.     
21c0: 20 63 6c 6f 73 65 20 24 6f 75 74 0a 20 20 20 20   close $out.    
21d0: 20 20 68 65 78 69 6f 5f 77 72 69 74 65 20 74 65    hexio_write te
21e0: 73 74 65 72 72 2e 64 62 20 32 38 20 30 30 30 30  sterr.db 28 0000
21f0: 30 30 30 30 0a 20 20 20 20 20 20 65 78 65 63 73  0000.      execs
2200: 71 6c 20 7b 52 45 49 4e 44 45 58 20 74 32 7d 0a  ql {REINDEX t2}.
2210: 20 20 20 20 20 20 65 78 65 63 73 71 6c 20 7b 50        execsql {P
2220: 52 41 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f  RAGMA integrity_
2230: 63 68 65 63 6b 7d 0a 20 20 20 20 7d 20 7b 6f 6b  check}.    } {ok
2240: 7d 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 70 72  }.    do_test pr
2250: 61 67 6d 61 2d 33 2e 38 2e 31 20 7b 0a 20 20 20  agma-3.8.1 {.   
2260: 20 20 20 65 78 65 63 73 71 6c 20 7b 50 52 41 47     execsql {PRAG
2270: 4d 41 20 71 75 69 63 6b 5f 63 68 65 63 6b 7d 0a  MA quick_check}.
2280: 20 20 20 20 7d 20 7b 6f 6b 7d 0a 20 20 20 20 64      } {ok}.    d
2290: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 33 2e  o_test pragma-3.
22a0: 39 20 7b 0a 20 20 20 20 20 20 65 78 65 63 73 71  9 {.      execsq
22b0: 6c 20 7b 0a 20 20 20 20 20 20 20 20 41 54 54 41  l {.        ATTA
22c0: 43 48 20 27 74 65 73 74 65 72 72 2e 64 62 27 20  CH 'testerr.db' 
22d0: 41 53 20 74 32 3b 0a 20 20 20 20 20 20 20 20 50  AS t2;.        P
22e0: 52 41 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f  RAGMA integrity_
22f0: 63 68 65 63 6b 0a 20 20 20 20 20 20 7d 0a 20 20  check.      }.  
2300: 20 20 7d 20 7b 7b 2a 2a 2a 20 69 6e 20 64 61 74    } {{*** in dat
2310: 61 62 61 73 65 20 74 32 20 2a 2a 2a 0a 50 61 67  abase t2 ***.Pag
2320: 65 20 34 20 69 73 20 6e 65 76 65 72 20 75 73 65  e 4 is never use
2330: 64 0a 50 61 67 65 20 35 20 69 73 20 6e 65 76 65  d.Page 5 is neve
2340: 72 20 75 73 65 64 0a 50 61 67 65 20 36 20 69 73  r used.Page 6 is
2350: 20 6e 65 76 65 72 20 75 73 65 64 7d 20 7b 72 6f   never used} {ro
2360: 77 69 64 20 31 20 6d 69 73 73 69 6e 67 20 66 72  wid 1 missing fr
2370: 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b 72 6f  om index i2} {ro
2380: 77 69 64 20 32 20 6d 69 73 73 69 6e 67 20 66 72  wid 2 missing fr
2390: 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b 77 72  om index i2} {wr
23a0: 6f 6e 67 20 23 20 6f 66 20 65 6e 74 72 69 65 73  ong # of entries
23b0: 20 69 6e 20 69 6e 64 65 78 20 69 32 7d 7d 0a 20   in index i2}}. 
23c0: 20 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d     do_test pragm
23d0: 61 2d 33 2e 31 30 20 7b 0a 20 20 20 20 20 20 65  a-3.10 {.      e
23e0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 20  xecsql {.       
23f0: 20 50 52 41 47 4d 41 20 69 6e 74 65 67 72 69 74   PRAGMA integrit
2400: 79 5f 63 68 65 63 6b 3d 31 0a 20 20 20 20 20 20  y_check=1.      
2410: 7d 0a 20 20 20 20 7d 20 7b 7b 2a 2a 2a 20 69 6e  }.    } {{*** in
2420: 20 64 61 74 61 62 61 73 65 20 74 32 20 2a 2a 2a   database t2 ***
2430: 0a 50 61 67 65 20 34 20 69 73 20 6e 65 76 65 72  .Page 4 is never
2440: 20 75 73 65 64 7d 7d 0a 20 20 20 20 64 6f 5f 74   used}}.    do_t
2450: 65 73 74 20 70 72 61 67 6d 61 2d 33 2e 31 31 20  est pragma-3.11 
2460: 7b 0a 20 20 20 20 20 20 65 78 65 63 73 71 6c 20  {.      execsql 
2470: 7b 0a 20 20 20 20 20 20 20 20 50 52 41 47 4d 41  {.        PRAGMA
2480: 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b   integrity_check
2490: 3d 35 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  =5.      }.    }
24a0: 20 7b 7b 2a 2a 2a 20 69 6e 20 64 61 74 61 62 61   {{*** in databa
24b0: 73 65 20 74 32 20 2a 2a 2a 0a 50 61 67 65 20 34  se t2 ***.Page 4
24c0: 20 69 73 20 6e 65 76 65 72 20 75 73 65 64 0a 50   is never used.P
24d0: 61 67 65 20 35 20 69 73 20 6e 65 76 65 72 20 75  age 5 is never u
24e0: 73 65 64 0a 50 61 67 65 20 36 20 69 73 20 6e 65  sed.Page 6 is ne
24f0: 76 65 72 20 75 73 65 64 7d 20 7b 72 6f 77 69 64  ver used} {rowid
2500: 20 31 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20   1 missing from 
2510: 69 6e 64 65 78 20 69 32 7d 20 7b 72 6f 77 69 64  index i2} {rowid
2520: 20 32 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20   2 missing from 
2530: 69 6e 64 65 78 20 69 32 7d 7d 0a 20 20 20 20 64  index i2}}.    d
2540: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 33 2e  o_test pragma-3.
2550: 31 32 20 7b 0a 20 20 20 20 20 20 65 78 65 63 73  12 {.      execs
2560: 71 6c 20 7b 0a 20 20 20 20 20 20 20 20 50 52 41  ql {.        PRA
2570: 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68  GMA integrity_ch
2580: 65 63 6b 3d 34 0a 20 20 20 20 20 20 7d 0a 20 20  eck=4.      }.  
2590: 20 20 7d 20 7b 7b 2a 2a 2a 20 69 6e 20 64 61 74    } {{*** in dat
25a0: 61 62 61 73 65 20 74 32 20 2a 2a 2a 0a 50 61 67  abase t2 ***.Pag
25b0: 65 20 34 20 69 73 20 6e 65 76 65 72 20 75 73 65  e 4 is never use
25c0: 64 0a 50 61 67 65 20 35 20 69 73 20 6e 65 76 65  d.Page 5 is neve
25d0: 72 20 75 73 65 64 0a 50 61 67 65 20 36 20 69 73  r used.Page 6 is
25e0: 20 6e 65 76 65 72 20 75 73 65 64 7d 20 7b 72 6f   never used} {ro
25f0: 77 69 64 20 31 20 6d 69 73 73 69 6e 67 20 66 72  wid 1 missing fr
2600: 6f 6d 20 69 6e 64 65 78 20 69 32 7d 7d 0a 20 20  om index i2}}.  
2610: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
2620: 2d 33 2e 31 33 20 7b 0a 20 20 20 20 20 20 65 78  -3.13 {.      ex
2630: 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 20 20  ecsql {.        
2640: 50 52 41 47 4d 41 20 69 6e 74 65 67 72 69 74 79  PRAGMA integrity
2650: 5f 63 68 65 63 6b 3d 33 0a 20 20 20 20 20 20 7d  _check=3.      }
2660: 0a 20 20 20 20 7d 20 7b 7b 2a 2a 2a 20 69 6e 20  .    } {{*** in 
2670: 64 61 74 61 62 61 73 65 20 74 32 20 2a 2a 2a 0a  database t2 ***.
2680: 50 61 67 65 20 34 20 69 73 20 6e 65 76 65 72 20  Page 4 is never 
2690: 75 73 65 64 0a 50 61 67 65 20 35 20 69 73 20 6e  used.Page 5 is n
26a0: 65 76 65 72 20 75 73 65 64 0a 50 61 67 65 20 36  ever used.Page 6
26b0: 20 69 73 20 6e 65 76 65 72 20 75 73 65 64 7d 7d   is never used}}
26c0: 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 70 72 61  .    do_test pra
26d0: 67 6d 61 2d 33 2e 31 34 20 7b 0a 20 20 20 20 20  gma-3.14 {.     
26e0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20   execsql {.     
26f0: 20 20 20 50 52 41 47 4d 41 20 69 6e 74 65 67 72     PRAGMA integr
2700: 69 74 79 5f 63 68 65 63 6b 28 32 29 0a 20 20 20  ity_check(2).   
2710: 20 20 20 7d 0a 20 20 20 20 7d 20 7b 7b 2a 2a 2a     }.    } {{***
2720: 20 69 6e 20 64 61 74 61 62 61 73 65 20 74 32 20   in database t2 
2730: 2a 2a 2a 0a 50 61 67 65 20 34 20 69 73 20 6e 65  ***.Page 4 is ne
2740: 76 65 72 20 75 73 65 64 0a 50 61 67 65 20 35 20  ver used.Page 5 
2750: 69 73 20 6e 65 76 65 72 20 75 73 65 64 7d 7d 0a  is never used}}.
2760: 20 20 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67      do_test prag
2770: 6d 61 2d 33 2e 31 35 20 7b 0a 20 20 20 20 20 20  ma-3.15 {.      
2780: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
2790: 20 20 41 54 54 41 43 48 20 27 74 65 73 74 65 72    ATTACH 'tester
27a0: 72 2e 64 62 27 20 41 53 20 74 33 3b 0a 20 20 20  r.db' AS t3;.   
27b0: 20 20 20 20 20 50 52 41 47 4d 41 20 69 6e 74 65       PRAGMA inte
27c0: 67 72 69 74 79 5f 63 68 65 63 6b 0a 20 20 20 20  grity_check.    
27d0: 20 20 7d 0a 20 20 20 20 7d 20 7b 7b 2a 2a 2a 20    }.    } {{*** 
27e0: 69 6e 20 64 61 74 61 62 61 73 65 20 74 32 20 2a  in database t2 *
27f0: 2a 2a 0a 50 61 67 65 20 34 20 69 73 20 6e 65 76  **.Page 4 is nev
2800: 65 72 20 75 73 65 64 0a 50 61 67 65 20 35 20 69  er used.Page 5 i
2810: 73 20 6e 65 76 65 72 20 75 73 65 64 0a 50 61 67  s never used.Pag
2820: 65 20 36 20 69 73 20 6e 65 76 65 72 20 75 73 65  e 6 is never use
2830: 64 7d 20 7b 72 6f 77 69 64 20 31 20 6d 69 73 73  d} {rowid 1 miss
2840: 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69  ing from index i
2850: 32 7d 20 7b 72 6f 77 69 64 20 32 20 6d 69 73 73  2} {rowid 2 miss
2860: 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69  ing from index i
2870: 32 7d 20 7b 77 72 6f 6e 67 20 23 20 6f 66 20 65  2} {wrong # of e
2880: 6e 74 72 69 65 73 20 69 6e 20 69 6e 64 65 78 20  ntries in index 
2890: 69 32 7d 20 7b 2a 2a 2a 20 69 6e 20 64 61 74 61  i2} {*** in data
28a0: 62 61 73 65 20 74 33 20 2a 2a 2a 0a 50 61 67 65  base t3 ***.Page
28b0: 20 34 20 69 73 20 6e 65 76 65 72 20 75 73 65 64   4 is never used
28c0: 0a 50 61 67 65 20 35 20 69 73 20 6e 65 76 65 72  .Page 5 is never
28d0: 20 75 73 65 64 0a 50 61 67 65 20 36 20 69 73 20   used.Page 6 is 
28e0: 6e 65 76 65 72 20 75 73 65 64 7d 20 7b 72 6f 77  never used} {row
28f0: 69 64 20 31 20 6d 69 73 73 69 6e 67 20 66 72 6f  id 1 missing fro
2900: 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b 72 6f 77  m index i2} {row
2910: 69 64 20 32 20 6d 69 73 73 69 6e 67 20 66 72 6f  id 2 missing fro
2920: 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b 77 72 6f  m index i2} {wro
2930: 6e 67 20 23 20 6f 66 20 65 6e 74 72 69 65 73 20  ng # of entries 
2940: 69 6e 20 69 6e 64 65 78 20 69 32 7d 7d 0a 20 20  in index i2}}.  
2950: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
2960: 2d 33 2e 31 36 20 7b 0a 20 20 20 20 20 20 65 78  -3.16 {.      ex
2970: 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 20 20  ecsql {.        
2980: 50 52 41 47 4d 41 20 69 6e 74 65 67 72 69 74 79  PRAGMA integrity
2990: 5f 63 68 65 63 6b 28 31 30 29 0a 20 20 20 20 20  _check(10).     
29a0: 20 7d 0a 20 20 20 20 7d 20 7b 7b 2a 2a 2a 20 69   }.    } {{*** i
29b0: 6e 20 64 61 74 61 62 61 73 65 20 74 32 20 2a 2a  n database t2 **
29c0: 2a 0a 50 61 67 65 20 34 20 69 73 20 6e 65 76 65  *.Page 4 is neve
29d0: 72 20 75 73 65 64 0a 50 61 67 65 20 35 20 69 73  r used.Page 5 is
29e0: 20 6e 65 76 65 72 20 75 73 65 64 0a 50 61 67 65   never used.Page
29f0: 20 36 20 69 73 20 6e 65 76 65 72 20 75 73 65 64   6 is never used
2a00: 7d 20 7b 72 6f 77 69 64 20 31 20 6d 69 73 73 69  } {rowid 1 missi
2a10: 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32  ng from index i2
2a20: 7d 20 7b 72 6f 77 69 64 20 32 20 6d 69 73 73 69  } {rowid 2 missi
2a30: 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32  ng from index i2
2a40: 7d 20 7b 77 72 6f 6e 67 20 23 20 6f 66 20 65 6e  } {wrong # of en
2a50: 74 72 69 65 73 20 69 6e 20 69 6e 64 65 78 20 69  tries in index i
2a60: 32 7d 20 7b 2a 2a 2a 20 69 6e 20 64 61 74 61 62  2} {*** in datab
2a70: 61 73 65 20 74 33 20 2a 2a 2a 0a 50 61 67 65 20  ase t3 ***.Page 
2a80: 34 20 69 73 20 6e 65 76 65 72 20 75 73 65 64 0a  4 is never used.
2a90: 50 61 67 65 20 35 20 69 73 20 6e 65 76 65 72 20  Page 5 is never 
2aa0: 75 73 65 64 0a 50 61 67 65 20 36 20 69 73 20 6e  used.Page 6 is n
2ab0: 65 76 65 72 20 75 73 65 64 7d 20 7b 72 6f 77 69  ever used} {rowi
2ac0: 64 20 31 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d  d 1 missing from
2ad0: 20 69 6e 64 65 78 20 69 32 7d 7d 0a 20 20 20 20   index i2}}.    
2ae0: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 33  do_test pragma-3
2af0: 2e 31 37 20 7b 0a 20 20 20 20 20 20 65 78 65 63  .17 {.      exec
2b00: 73 71 6c 20 7b 0a 20 20 20 20 20 20 20 20 50 52  sql {.        PR
2b10: 41 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63  AGMA integrity_c
2b20: 68 65 63 6b 3d 38 0a 20 20 20 20 20 20 7d 0a 20  heck=8.      }. 
2b30: 20 20 20 7d 20 7b 7b 2a 2a 2a 20 69 6e 20 64 61     } {{*** in da
2b40: 74 61 62 61 73 65 20 74 32 20 2a 2a 2a 0a 50 61  tabase t2 ***.Pa
2b50: 67 65 20 34 20 69 73 20 6e 65 76 65 72 20 75 73  ge 4 is never us
2b60: 65 64 0a 50 61 67 65 20 35 20 69 73 20 6e 65 76  ed.Page 5 is nev
2b70: 65 72 20 75 73 65 64 0a 50 61 67 65 20 36 20 69  er used.Page 6 i
2b80: 73 20 6e 65 76 65 72 20 75 73 65 64 7d 20 7b 72  s never used} {r
2b90: 6f 77 69 64 20 31 20 6d 69 73 73 69 6e 67 20 66  owid 1 missing f
2ba0: 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b 72  rom index i2} {r
2bb0: 6f 77 69 64 20 32 20 6d 69 73 73 69 6e 67 20 66  owid 2 missing f
2bc0: 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b 77  rom index i2} {w
2bd0: 72 6f 6e 67 20 23 20 6f 66 20 65 6e 74 72 69 65  rong # of entrie
2be0: 73 20 69 6e 20 69 6e 64 65 78 20 69 32 7d 20 7b  s in index i2} {
2bf0: 2a 2a 2a 20 69 6e 20 64 61 74 61 62 61 73 65 20  *** in database 
2c00: 74 33 20 2a 2a 2a 0a 50 61 67 65 20 34 20 69 73  t3 ***.Page 4 is
2c10: 20 6e 65 76 65 72 20 75 73 65 64 0a 50 61 67 65   never used.Page
2c20: 20 35 20 69 73 20 6e 65 76 65 72 20 75 73 65 64   5 is never used
2c30: 7d 7d 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 70  }}.    do_test p
2c40: 72 61 67 6d 61 2d 33 2e 31 38 20 7b 0a 20 20 20  ragma-3.18 {.   
2c50: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
2c60: 20 20 20 20 20 50 52 41 47 4d 41 20 69 6e 74 65       PRAGMA inte
2c70: 67 72 69 74 79 5f 63 68 65 63 6b 3d 34 0a 20 20  grity_check=4.  
2c80: 20 20 20 20 7d 0a 20 20 20 20 7d 20 7b 7b 2a 2a      }.    } {{**
2c90: 2a 20 69 6e 20 64 61 74 61 62 61 73 65 20 74 32  * in database t2
2ca0: 20 2a 2a 2a 0a 50 61 67 65 20 34 20 69 73 20 6e   ***.Page 4 is n
2cb0: 65 76 65 72 20 75 73 65 64 0a 50 61 67 65 20 35  ever used.Page 5
2cc0: 20 69 73 20 6e 65 76 65 72 20 75 73 65 64 0a 50   is never used.P
2cd0: 61 67 65 20 36 20 69 73 20 6e 65 76 65 72 20 75  age 6 is never u
2ce0: 73 65 64 7d 20 7b 72 6f 77 69 64 20 31 20 6d 69  sed} {rowid 1 mi
2cf0: 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78  ssing from index
2d00: 20 69 32 7d 7d 0a 20 20 7d 0a 20 20 64 6f 5f 74   i2}}.  }.  do_t
2d10: 65 73 74 20 70 72 61 67 6d 61 2d 33 2e 31 39 20  est pragma-3.19 
2d20: 7b 0a 20 20 20 20 63 61 74 63 68 20 7b 64 62 20  {.    catch {db 
2d30: 63 6c 6f 73 65 7d 0a 20 20 20 20 66 69 6c 65 20  close}.    file 
2d40: 64 65 6c 65 74 65 20 2d 66 6f 72 63 65 20 74 65  delete -force te
2d50: 73 74 2e 64 62 20 74 65 73 74 2e 64 62 2d 6a 6f  st.db test.db-jo
2d60: 75 72 6e 61 6c 0a 20 20 20 20 73 71 6c 69 74 65  urnal.    sqlite
2d70: 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20 20  3 db test.db.   
2d80: 20 64 62 20 65 76 61 6c 20 7b 50 52 41 47 4d 41   db eval {PRAGMA
2d90: 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b   integrity_check
2da0: 7d 0a 20 20 7d 20 7b 6f 6b 7d 0a 7d 0a 23 65 78  }.  } {ok}.}.#ex
2db0: 69 74 0a 0a 23 20 54 65 73 74 20 6d 6f 64 69 66  it..# Test modif
2dc0: 79 69 6e 67 20 74 68 65 20 63 61 63 68 65 5f 73  ying the cache_s
2dd0: 69 7a 65 20 6f 66 20 61 6e 20 61 74 74 61 63 68  ize of an attach
2de0: 65 64 20 64 61 74 61 62 61 73 65 2e 0a 69 66 63  ed database..ifc
2df0: 61 70 61 62 6c 65 20 70 61 67 65 72 5f 70 72 61  apable pager_pra
2e00: 67 6d 61 73 26 26 61 74 74 61 63 68 20 7b 0a 64  gmas&&attach {.d
2e10: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 34 2e  o_test pragma-4.
2e20: 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  1 {.  execsql {.
2e30: 20 20 20 20 41 54 54 41 43 48 20 27 74 65 73 74      ATTACH 'test
2e40: 32 2e 64 62 27 20 41 53 20 61 75 78 3b 0a 20 20  2.db' AS aux;.  
2e50: 20 20 70 72 61 67 6d 61 20 61 75 78 2e 63 61 63    pragma aux.cac
2e60: 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 70 72 61  he_size;.    pra
2e70: 67 6d 61 20 61 75 78 2e 64 65 66 61 75 6c 74 5f  gma aux.default_
2e80: 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 7d 20  cache_size;.  } 
2e90: 0a 7d 20 5b 6c 69 73 74 20 24 44 46 4c 54 5f 43  .} [list $DFLT_C
2ea0: 41 43 48 45 5f 53 5a 20 24 44 46 4c 54 5f 43 41  ACHE_SZ $DFLT_CA
2eb0: 43 48 45 5f 53 5a 5d 0a 64 6f 5f 74 65 73 74 20  CHE_SZ].do_test 
2ec0: 70 72 61 67 6d 61 2d 34 2e 32 20 7b 0a 20 20 65  pragma-4.2 {.  e
2ed0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 70 72 61  xecsql {.    pra
2ee0: 67 6d 61 20 61 75 78 2e 63 61 63 68 65 5f 73 69  gma aux.cache_si
2ef0: 7a 65 20 3d 20 35 30 3b 0a 20 20 20 20 70 72 61  ze = 50;.    pra
2f00: 67 6d 61 20 61 75 78 2e 63 61 63 68 65 5f 73 69  gma aux.cache_si
2f10: 7a 65 3b 0a 20 20 20 20 70 72 61 67 6d 61 20 61  ze;.    pragma a
2f20: 75 78 2e 64 65 66 61 75 6c 74 5f 63 61 63 68 65  ux.default_cache
2f30: 5f 73 69 7a 65 3b 0a 20 20 7d 20 0a 7d 20 5b 6c  _size;.  } .} [l
2f40: 69 73 74 20 35 30 20 24 44 46 4c 54 5f 43 41 43  ist 50 $DFLT_CAC
2f50: 48 45 5f 53 5a 5d 0a 64 6f 5f 74 65 73 74 20 70  HE_SZ].do_test p
2f60: 72 61 67 6d 61 2d 34 2e 33 20 7b 0a 20 20 65 78  ragma-4.3 {.  ex
2f70: 65 63 73 71 6c 20 7b 0a 20 20 20 20 70 72 61 67  ecsql {.    prag
2f80: 6d 61 20 61 75 78 2e 64 65 66 61 75 6c 74 5f 63  ma aux.default_c
2f90: 61 63 68 65 5f 73 69 7a 65 20 3d 20 34 35 36 3b  ache_size = 456;
2fa0: 0a 20 20 20 20 70 72 61 67 6d 61 20 61 75 78 2e  .    pragma aux.
2fb0: 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20  cache_size;.    
2fc0: 70 72 61 67 6d 61 20 61 75 78 2e 64 65 66 61 75  pragma aux.defau
2fd0: 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20  lt_cache_size;. 
2fe0: 20 7d 20 0a 7d 20 7b 34 35 36 20 34 35 36 7d 0a   } .} {456 456}.
2ff0: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 34  do_test pragma-4
3000: 2e 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .4 {.  execsql {
3010: 0a 20 20 20 20 70 72 61 67 6d 61 20 63 61 63 68  .    pragma cach
3020: 65 5f 73 69 7a 65 3b 0a 20 20 20 20 70 72 61 67  e_size;.    prag
3030: 6d 61 20 64 65 66 61 75 6c 74 5f 63 61 63 68 65  ma default_cache
3040: 5f 73 69 7a 65 3b 0a 20 20 7d 20 0a 7d 20 5b 6c  _size;.  } .} [l
3050: 69 73 74 20 24 44 46 4c 54 5f 43 41 43 48 45 5f  ist $DFLT_CACHE_
3060: 53 5a 20 24 44 46 4c 54 5f 43 41 43 48 45 5f 53  SZ $DFLT_CACHE_S
3070: 5a 5d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  Z].do_test pragm
3080: 61 2d 34 2e 35 20 7b 0a 20 20 65 78 65 63 73 71  a-4.5 {.  execsq
3090: 6c 20 7b 0a 20 20 20 20 44 45 54 41 43 48 20 61  l {.    DETACH a
30a0: 75 78 3b 0a 20 20 20 20 41 54 54 41 43 48 20 27  ux;.    ATTACH '
30b0: 74 65 73 74 33 2e 64 62 27 20 41 53 20 61 75 78  test3.db' AS aux
30c0: 3b 0a 20 20 20 20 70 72 61 67 6d 61 20 61 75 78  ;.    pragma aux
30d0: 2e 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20  .cache_size;.   
30e0: 20 70 72 61 67 6d 61 20 61 75 78 2e 64 65 66 61   pragma aux.defa
30f0: 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65 3b 0a  ult_cache_size;.
3100: 20 20 7d 20 0a 7d 20 5b 6c 69 73 74 20 24 44 46    } .} [list $DF
3110: 4c 54 5f 43 41 43 48 45 5f 53 5a 20 24 44 46 4c  LT_CACHE_SZ $DFL
3120: 54 5f 43 41 43 48 45 5f 53 5a 5d 0a 64 6f 5f 74  T_CACHE_SZ].do_t
3130: 65 73 74 20 70 72 61 67 6d 61 2d 34 2e 36 20 7b  est pragma-4.6 {
3140: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
3150: 20 44 45 54 41 43 48 20 61 75 78 3b 0a 20 20 20   DETACH aux;.   
3160: 20 41 54 54 41 43 48 20 27 74 65 73 74 32 2e 64   ATTACH 'test2.d
3170: 62 27 20 41 53 20 61 75 78 3b 0a 20 20 20 20 70  b' AS aux;.    p
3180: 72 61 67 6d 61 20 61 75 78 2e 63 61 63 68 65 5f  ragma aux.cache_
3190: 73 69 7a 65 3b 0a 20 20 20 20 70 72 61 67 6d 61  size;.    pragma
31a0: 20 61 75 78 2e 64 65 66 61 75 6c 74 5f 63 61 63   aux.default_cac
31b0: 68 65 5f 73 69 7a 65 3b 0a 20 20 7d 20 0a 7d 20  he_size;.  } .} 
31c0: 7b 34 35 36 20 34 35 36 7d 0a 7d 20 3b 23 20 69  {456 456}.} ;# i
31d0: 66 63 61 70 61 62 6c 65 20 70 61 67 65 72 5f 70  fcapable pager_p
31e0: 72 61 67 6d 61 73 0a 0a 23 20 54 65 73 74 20 74  ragmas..# Test t
31f0: 68 61 74 20 6d 6f 64 69 66 79 69 6e 67 20 74 68  hat modifying th
3200: 65 20 73 79 6e 63 2d 6c 65 76 65 6c 20 69 6e 20  e sync-level in 
3210: 74 68 65 20 6d 69 64 64 6c 65 20 6f 66 20 61 20  the middle of a 
3220: 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 0a 23  transaction is.#
3230: 20 64 69 73 61 6c 6c 6f 77 65 64 2e 0a 69 66 63   disallowed..ifc
3240: 61 70 61 62 6c 65 20 70 61 67 65 72 5f 70 72 61  apable pager_pra
3250: 67 6d 61 73 20 7b 0a 64 6f 5f 74 65 73 74 20 70  gmas {.do_test p
3260: 72 61 67 6d 61 2d 35 2e 30 20 7b 0a 20 20 65 78  ragma-5.0 {.  ex
3270: 65 63 73 71 6c 20 7b 0a 20 20 20 20 70 72 61 67  ecsql {.    prag
3280: 6d 61 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a  ma synchronous;.
3290: 20 20 7d 20 0a 7d 20 7b 32 7d 0a 64 6f 5f 74 65    } .} {2}.do_te
32a0: 73 74 20 70 72 61 67 6d 61 2d 35 2e 31 20 7b 0a  st pragma-5.1 {.
32b0: 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20    catchsql {.   
32c0: 20 42 45 47 49 4e 3b 0a 20 20 20 20 70 72 61 67   BEGIN;.    prag
32d0: 6d 61 20 73 79 6e 63 68 72 6f 6e 6f 75 73 20 3d  ma synchronous =
32e0: 20 4f 46 46 3b 0a 20 20 7d 20 0a 7d 20 7b 31 20   OFF;.  } .} {1 
32f0: 7b 53 61 66 65 74 79 20 6c 65 76 65 6c 20 6d 61  {Safety level ma
3300: 79 20 6e 6f 74 20 62 65 20 63 68 61 6e 67 65 64  y not be changed
3310: 20 69 6e 73 69 64 65 20 61 20 74 72 61 6e 73 61   inside a transa
3320: 63 74 69 6f 6e 7d 7d 0a 64 6f 5f 74 65 73 74 20  ction}}.do_test 
3330: 70 72 61 67 6d 61 2d 35 2e 32 20 7b 0a 20 20 65  pragma-5.2 {.  e
3340: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 70 72 61  xecsql {.    pra
3350: 67 6d 61 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3b  gma synchronous;
3360: 0a 20 20 7d 20 0a 7d 20 7b 32 7d 0a 63 61 74 63  .  } .} {2}.catc
3370: 68 73 71 6c 20 7b 43 4f 4d 4d 49 54 3b 7d 0a 7d  hsql {COMMIT;}.}
3380: 20 3b 23 20 69 66 63 61 70 61 62 6c 65 20 70 61   ;# ifcapable pa
3390: 67 65 72 5f 70 72 61 67 6d 61 73 0a 0a 23 20 54  ger_pragmas..# T
33a0: 65 73 74 20 73 63 68 65 6d 61 2d 71 75 65 72 79  est schema-query
33b0: 20 70 72 61 67 6d 61 73 0a 23 0a 69 66 63 61 70   pragmas.#.ifcap
33c0: 61 62 6c 65 20 73 63 68 65 6d 61 5f 70 72 61 67  able schema_prag
33d0: 6d 61 73 20 7b 0a 69 66 63 61 70 61 62 6c 65 20  mas {.ifcapable 
33e0: 74 65 6d 70 64 62 26 26 61 74 74 61 63 68 20 7b  tempdb&&attach {
33f0: 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .  do_test pragm
3400: 61 2d 36 2e 31 20 7b 0a 20 20 20 20 73 65 74 20  a-6.1 {.    set 
3410: 72 65 73 20 7b 7d 0a 20 20 20 20 65 78 65 63 73  res {}.    execs
3420: 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f  ql {SELECT * FRO
3430: 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61  M sqlite_temp_ma
3440: 73 74 65 72 7d 0a 20 20 20 20 66 6f 72 65 61 63  ster}.    foreac
3450: 68 20 7b 69 64 78 20 6e 61 6d 65 20 66 69 6c 65  h {idx name file
3460: 7d 20 5b 65 78 65 63 73 71 6c 20 7b 70 72 61 67  } [execsql {prag
3470: 6d 61 20 64 61 74 61 62 61 73 65 5f 6c 69 73 74  ma database_list
3480: 7d 5d 20 7b 0a 20 20 20 20 20 20 6c 61 70 70 65  }] {.      lappe
3490: 6e 64 20 72 65 73 20 24 69 64 78 20 24 6e 61 6d  nd res $idx $nam
34a0: 65 0a 20 20 20 20 7d 0a 20 20 20 20 73 65 74 20  e.    }.    set 
34b0: 72 65 73 0a 20 20 7d 20 7b 30 20 6d 61 69 6e 20  res.  } {0 main 
34c0: 31 20 74 65 6d 70 20 32 20 61 75 78 7d 0a 7d 0a  1 temp 2 aux}.}.
34d0: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 36  do_test pragma-6
34e0: 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .2 {.  execsql {
34f0: 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  .    CREATE TABL
3500: 45 20 74 32 28 61 2c 62 2c 63 29 3b 0a 20 20 20  E t2(a,b,c);.   
3510: 20 70 72 61 67 6d 61 20 74 61 62 6c 65 5f 69 6e   pragma table_in
3520: 66 6f 28 74 32 29 0a 20 20 7d 0a 7d 20 7b 30 20  fo(t2).  }.} {0 
3530: 61 20 7b 7d 20 30 20 7b 7d 20 30 20 31 20 62 20  a {} 0 {} 0 1 b 
3540: 7b 7d 20 30 20 7b 7d 20 30 20 32 20 63 20 7b 7d  {} 0 {} 0 2 c {}
3550: 20 30 20 7b 7d 20 30 7d 0a 64 6f 5f 74 65 73 74   0 {} 0}.do_test
3560: 20 70 72 61 67 6d 61 2d 36 2e 32 2e 31 20 7b 0a   pragma-6.2.1 {.
3570: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
3580: 70 72 61 67 6d 61 20 74 61 62 6c 65 5f 69 6e 66  pragma table_inf
3590: 6f 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 62 20 6e  o;.  }.} {}.db n
35a0: 75 6c 6c 76 61 6c 75 65 20 3c 3c 4e 55 4c 4c 3e  ullvalue <<NULL>
35b0: 3e 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  >.do_test pragma
35c0: 2d 36 2e 32 2e 32 20 7b 0a 20 20 65 78 65 63 73  -6.2.2 {.  execs
35d0: 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20  ql {.    CREATE 
35e0: 54 41 42 4c 45 20 74 35 28 0a 20 20 20 20 20 20  TABLE t5(.      
35f0: 61 20 54 45 58 54 20 44 45 46 41 55 4c 54 20 43  a TEXT DEFAULT C
3600: 55 52 52 45 4e 54 5f 54 49 4d 45 53 54 41 4d 50  URRENT_TIMESTAMP
3610: 2c 20 0a 20 20 20 20 20 20 62 20 44 45 46 41 55  , .      b DEFAU
3620: 4c 54 20 28 35 2b 33 29 2c 0a 20 20 20 20 20 20  LT (5+3),.      
3630: 63 20 54 45 58 54 2c 0a 20 20 20 20 20 20 64 20  c TEXT,.      d 
3640: 49 4e 54 45 47 45 52 20 44 45 46 41 55 4c 54 20  INTEGER DEFAULT 
3650: 4e 55 4c 4c 2c 0a 20 20 20 20 20 20 65 20 54 45  NULL,.      e TE
3660: 58 54 20 44 45 46 41 55 4c 54 20 27 27 0a 20 20  XT DEFAULT ''.  
3670: 20 20 29 3b 0a 20 20 20 20 50 52 41 47 4d 41 20    );.    PRAGMA 
3680: 74 61 62 6c 65 5f 69 6e 66 6f 28 74 35 29 3b 0a  table_info(t5);.
3690: 20 20 7d 0a 7d 20 7b 30 20 61 20 54 45 58 54 20    }.} {0 a TEXT 
36a0: 30 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 53 54  0 CURRENT_TIMEST
36b0: 41 4d 50 20 30 20 31 20 62 20 7b 7d 20 30 20 35  AMP 0 1 b {} 0 5
36c0: 2b 33 20 30 20 32 20 63 20 54 45 58 54 20 30 20  +3 0 2 c TEXT 0 
36d0: 3c 3c 4e 55 4c 4c 3e 3e 20 30 20 33 20 64 20 49  <<NULL>> 0 3 d I
36e0: 4e 54 45 47 45 52 20 30 20 4e 55 4c 4c 20 30 20  NTEGER 0 NULL 0 
36f0: 34 20 65 20 54 45 58 54 20 30 20 27 27 20 30 7d  4 e TEXT 0 '' 0}
3700: 0a 64 62 20 6e 75 6c 6c 76 61 6c 75 65 20 7b 7d  .db nullvalue {}
3710: 0a 69 66 63 61 70 61 62 6c 65 20 7b 66 6f 72 65  .ifcapable {fore
3720: 69 67 6e 6b 65 79 7d 20 7b 0a 20 20 64 6f 5f 74  ignkey} {.  do_t
3730: 65 73 74 20 70 72 61 67 6d 61 2d 36 2e 33 2e 31  est pragma-6.3.1
3740: 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b   {.    execsql {
3750: 0a 20 20 20 20 20 20 43 52 45 41 54 45 20 54 41  .      CREATE TA
3760: 42 4c 45 20 74 33 28 61 20 69 6e 74 20 72 65 66  BLE t3(a int ref
3770: 65 72 65 6e 63 65 73 20 74 32 28 62 29 2c 20 62  erences t2(b), b
3780: 20 55 4e 49 51 55 45 29 3b 0a 20 20 20 20 20 20   UNIQUE);.      
3790: 70 72 61 67 6d 61 20 66 6f 72 65 69 67 6e 5f 6b  pragma foreign_k
37a0: 65 79 5f 6c 69 73 74 28 74 33 29 3b 0a 20 20 20  ey_list(t3);.   
37b0: 20 7d 0a 20 20 7d 20 7b 30 20 30 20 74 32 20 61   }.  } {0 0 t2 a
37c0: 20 62 20 7b 4e 4f 20 41 43 54 49 4f 4e 7d 20 7b   b {NO ACTION} {
37d0: 4e 4f 20 41 43 54 49 4f 4e 7d 20 4e 4f 4e 45 7d  NO ACTION} NONE}
37e0: 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .  do_test pragm
37f0: 61 2d 36 2e 33 2e 32 20 7b 0a 20 20 20 20 65 78  a-6.3.2 {.    ex
3800: 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 70 72  ecsql {.      pr
3810: 61 67 6d 61 20 66 6f 72 65 69 67 6e 5f 6b 65 79  agma foreign_key
3820: 5f 6c 69 73 74 3b 0a 20 20 20 20 7d 0a 20 20 7d  _list;.    }.  }
3830: 20 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72   {}.  do_test pr
3840: 61 67 6d 61 2d 36 2e 33 2e 33 20 7b 0a 20 20 20  agma-6.3.3 {.   
3850: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20   execsql {.     
3860: 20 70 72 61 67 6d 61 20 66 6f 72 65 69 67 6e 5f   pragma foreign_
3870: 6b 65 79 5f 6c 69 73 74 28 74 33 5f 62 6f 67 75  key_list(t3_bogu
3880: 73 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 7d  s);.    }.  } {}
3890: 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .  do_test pragm
38a0: 61 2d 36 2e 33 2e 34 20 7b 0a 20 20 20 20 65 78  a-6.3.4 {.    ex
38b0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 70 72  ecsql {.      pr
38c0: 61 67 6d 61 20 66 6f 72 65 69 67 6e 5f 6b 65 79  agma foreign_key
38d0: 5f 6c 69 73 74 28 74 35 29 3b 0a 20 20 20 20 7d  _list(t5);.    }
38e0: 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65 73  .  } {}.  do_tes
38f0: 74 20 70 72 61 67 6d 61 2d 36 2e 34 20 7b 0a 20  t pragma-6.4 {. 
3900: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
3910: 20 20 20 70 72 61 67 6d 61 20 69 6e 64 65 78 5f     pragma index_
3920: 6c 69 73 74 28 74 33 29 3b 0a 20 20 20 20 7d 0a  list(t3);.    }.
3930: 20 20 7d 20 7b 30 20 73 71 6c 69 74 65 5f 61 75    } {0 sqlite_au
3940: 74 6f 69 6e 64 65 78 5f 74 33 5f 31 20 31 7d 0a  toindex_t3_1 1}.
3950: 7d 0a 69 66 63 61 70 61 62 6c 65 20 7b 21 66 6f  }.ifcapable {!fo
3960: 72 65 69 67 6e 6b 65 79 7d 20 7b 0a 20 20 65 78  reignkey} {.  ex
3970: 65 63 73 71 6c 20 7b 43 52 45 41 54 45 20 54 41  ecsql {CREATE TA
3980: 42 4c 45 20 74 33 28 61 2c 62 20 55 4e 49 51 55  BLE t3(a,b UNIQU
3990: 45 29 7d 0a 7d 0a 64 6f 5f 74 65 73 74 20 70 72  E)}.}.do_test pr
39a0: 61 67 6d 61 2d 36 2e 35 2e 31 20 7b 0a 20 20 65  agma-6.5.1 {.  e
39b0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45  xecsql {.    CRE
39c0: 41 54 45 20 49 4e 44 45 58 20 74 33 69 31 20 4f  ATE INDEX t3i1 O
39d0: 4e 20 74 33 28 61 2c 62 29 3b 0a 20 20 20 20 70  N t3(a,b);.    p
39e0: 72 61 67 6d 61 20 69 6e 64 65 78 5f 69 6e 66 6f  ragma index_info
39f0: 28 74 33 69 31 29 3b 0a 20 20 7d 0a 7d 20 7b 30  (t3i1);.  }.} {0
3a00: 20 30 20 61 20 31 20 31 20 62 7d 0a 64 6f 5f 74   0 a 1 1 b}.do_t
3a10: 65 73 74 20 70 72 61 67 6d 61 2d 36 2e 35 2e 32  est pragma-6.5.2
3a20: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
3a30: 20 20 20 70 72 61 67 6d 61 20 69 6e 64 65 78 5f     pragma index_
3a40: 69 6e 66 6f 28 74 33 69 31 5f 62 6f 67 75 73 29  info(t3i1_bogus)
3a50: 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a 69 66 63 61  ;.  }.} {}..ifca
3a60: 70 61 62 6c 65 20 74 65 6d 70 64 62 20 7b 0a 20  pable tempdb {. 
3a70: 20 23 20 54 65 73 74 20 66 6f 72 20 74 69 63 6b   # Test for tick
3a80: 65 74 20 23 33 33 32 30 2e 20 57 68 65 6e 20 61  et #3320. When a
3a90: 20 74 65 6d 70 20 74 61 62 6c 65 20 6f 66 20 74   temp table of t
3aa0: 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 65 78 69  he same name exi
3ab0: 73 74 73 2c 20 6d 61 6b 65 0a 20 20 23 20 73 75  sts, make.  # su
3ac0: 72 65 20 74 68 65 20 73 63 68 65 6d 61 20 6f 66  re the schema of
3ad0: 20 74 68 65 20 6d 61 69 6e 20 74 61 62 6c 65 20   the main table 
3ae0: 63 61 6e 20 73 74 69 6c 6c 20 62 65 20 71 75 65  can still be que
3af0: 72 69 65 64 20 75 73 69 6e 67 20 0a 20 20 23 20  ried using .  # 
3b00: 22 70 72 61 67 6d 61 20 74 61 62 6c 65 5f 69 6e  "pragma table_in
3b10: 66 6f 22 3a 0a 20 20 64 6f 5f 74 65 73 74 20 70  fo":.  do_test p
3b20: 72 61 67 6d 61 2d 36 2e 36 2e 31 20 7b 0a 20 20  ragma-6.6.1 {.  
3b30: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
3b40: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
3b50: 72 69 61 6c 28 63 6f 6c 5f 6d 61 69 6e 29 3b 0a  rial(col_main);.
3b60: 20 20 20 20 20 20 43 52 45 41 54 45 20 54 45 4d        CREATE TEM
3b70: 50 20 54 41 42 4c 45 20 74 72 69 61 6c 28 63 6f  P TABLE trial(co
3b80: 6c 5f 74 65 6d 70 29 3b 0a 20 20 20 20 7d 0a 20  l_temp);.    }. 
3b90: 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20   } {}.  do_test 
3ba0: 70 72 61 67 6d 61 2d 36 2e 36 2e 32 20 7b 0a 20  pragma-6.6.2 {. 
3bb0: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
3bc0: 20 20 20 50 52 41 47 4d 41 20 74 61 62 6c 65 5f     PRAGMA table_
3bd0: 69 6e 66 6f 28 74 72 69 61 6c 29 3b 0a 20 20 20  info(trial);.   
3be0: 20 7d 0a 20 20 7d 20 7b 30 20 63 6f 6c 5f 74 65   }.  } {0 col_te
3bf0: 6d 70 20 7b 7d 20 30 20 7b 7d 20 30 7d 0a 20 20  mp {} 0 {} 0}.  
3c00: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 36  do_test pragma-6
3c10: 2e 36 2e 33 20 7b 0a 20 20 20 20 65 78 65 63 73  .6.3 {.    execs
3c20: 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d  ql {.      PRAGM
3c30: 41 20 74 65 6d 70 2e 74 61 62 6c 65 5f 69 6e 66  A temp.table_inf
3c40: 6f 28 74 72 69 61 6c 29 3b 0a 20 20 20 20 7d 0a  o(trial);.    }.
3c50: 20 20 7d 20 7b 30 20 63 6f 6c 5f 74 65 6d 70 20    } {0 col_temp 
3c60: 7b 7d 20 30 20 7b 7d 20 30 7d 0a 20 20 64 6f 5f  {} 0 {} 0}.  do_
3c70: 74 65 73 74 20 70 72 61 67 6d 61 2d 36 2e 36 2e  test pragma-6.6.
3c80: 34 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  4 {.    execsql 
3c90: 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 6d  {.      PRAGMA m
3ca0: 61 69 6e 2e 74 61 62 6c 65 5f 69 6e 66 6f 28 74  ain.table_info(t
3cb0: 72 69 61 6c 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  rial);.    }.  }
3cc0: 20 7b 30 20 63 6f 6c 5f 6d 61 69 6e 20 7b 7d 20   {0 col_main {} 
3cd0: 30 20 7b 7d 20 30 7d 0a 7d 0a 0a 64 6f 5f 74 65  0 {} 0}.}..do_te
3ce0: 73 74 20 70 72 61 67 6d 61 2d 36 2e 37 20 7b 0a  st pragma-6.7 {.
3cf0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
3d00: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 65 73  CREATE TABLE tes
3d10: 74 5f 74 61 62 6c 65 28 0a 20 20 20 20 20 20 6f  t_table(.      o
3d20: 6e 65 20 49 4e 54 20 4e 4f 54 20 4e 55 4c 4c 20  ne INT NOT NULL 
3d30: 44 45 46 41 55 4c 54 20 2d 31 2c 20 0a 20 20 20  DEFAULT -1, .   
3d40: 20 20 20 74 77 6f 20 74 65 78 74 2c 0a 20 20 20     two text,.   
3d50: 20 20 20 74 68 72 65 65 20 56 41 52 43 48 41 52     three VARCHAR
3d60: 28 34 35 2c 20 36 35 29 20 44 45 46 41 55 4c 54  (45, 65) DEFAULT
3d70: 20 27 61 62 63 64 65 27 2c 0a 20 20 20 20 20 20   'abcde',.      
3d80: 66 6f 75 72 20 52 45 41 4c 20 44 45 46 41 55 4c  four REAL DEFAUL
3d90: 54 20 58 27 61 62 63 64 65 66 27 2c 0a 20 20 20  T X'abcdef',.   
3da0: 20 20 20 66 69 76 65 20 44 45 46 41 55 4c 54 20     five DEFAULT 
3db0: 43 55 52 52 45 4e 54 5f 54 49 4d 45 0a 20 20 20  CURRENT_TIME.   
3dc0: 20 29 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 74   );.    PRAGMA t
3dd0: 61 62 6c 65 5f 69 6e 66 6f 28 74 65 73 74 5f 74  able_info(test_t
3de0: 61 62 6c 65 29 3b 0a 20 20 7d 0a 7d 20 5b 63 6f  able);.  }.} [co
3df0: 6e 63 61 74 20 5c 0a 20 20 7b 30 20 6f 6e 65 20  ncat \.  {0 one 
3e00: 49 4e 54 20 31 20 2d 31 20 30 7d 20 5c 0a 20 20  INT 1 -1 0} \.  
3e10: 7b 31 20 74 77 6f 20 74 65 78 74 20 30 20 7b 7d  {1 two text 0 {}
3e20: 20 30 7d 20 5c 0a 20 20 7b 32 20 74 68 72 65 65   0} \.  {2 three
3e30: 20 7b 56 41 52 43 48 41 52 28 34 35 2c 20 36 35   {VARCHAR(45, 65
3e40: 29 7d 20 30 20 27 61 62 63 64 65 27 20 30 7d 20  )} 0 'abcde' 0} 
3e50: 5c 0a 20 20 7b 33 20 66 6f 75 72 20 52 45 41 4c  \.  {3 four REAL
3e60: 20 30 20 58 27 61 62 63 64 65 66 27 20 30 7d 20   0 X'abcdef' 0} 
3e70: 5c 0a 20 20 7b 34 20 66 69 76 65 20 7b 7d 20 30  \.  {4 five {} 0
3e80: 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 20 30 7d   CURRENT_TIME 0}
3e90: 20 5c 0a 5d 0a 7d 20 3b 23 20 69 66 63 61 70 61   \.].} ;# ifcapa
3ea0: 62 6c 65 20 73 63 68 65 6d 61 5f 70 72 61 67 6d  ble schema_pragm
3eb0: 61 73 0a 23 20 4d 69 73 63 65 6c 6c 61 6e 65 6f  as.# Miscellaneo
3ec0: 75 73 20 74 65 73 74 73 0a 23 0a 69 66 63 61 70  us tests.#.ifcap
3ed0: 61 62 6c 65 20 73 63 68 65 6d 61 5f 70 72 61 67  able schema_prag
3ee0: 6d 61 73 20 7b 0a 64 6f 5f 74 65 73 74 20 70 72  mas {.do_test pr
3ef0: 61 67 6d 61 2d 37 2e 31 2e 31 20 7b 0a 20 20 23  agma-7.1.1 {.  #
3f00: 20 4d 61 6b 65 20 73 75 72 65 20 61 20 70 72 61   Make sure a pra
3f10: 67 6d 61 20 6b 6e 6f 77 73 20 74 6f 20 72 65 61  gma knows to rea
3f20: 64 20 74 68 65 20 73 63 68 65 6d 61 20 69 66 20  d the schema if 
3f30: 69 74 20 6e 65 65 64 73 20 74 6f 0a 20 20 64 62  it needs to.  db
3f40: 20 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74 65 33   close.  sqlite3
3f50: 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20 65 78   db test.db.  ex
3f60: 65 63 73 71 6c 20 7b 0a 20 20 20 20 70 72 61 67  ecsql {.    prag
3f70: 6d 61 20 69 6e 64 65 78 5f 6c 69 73 74 28 74 33  ma index_list(t3
3f80: 29 3b 0a 20 20 7d 0a 7d 20 7b 30 20 74 33 69 31  );.  }.} {0 t3i1
3f90: 20 30 20 31 20 73 71 6c 69 74 65 5f 61 75 74 6f   0 1 sqlite_auto
3fa0: 69 6e 64 65 78 5f 74 33 5f 31 20 31 7d 0a 64 6f  index_t3_1 1}.do
3fb0: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 37 2e 31  _test pragma-7.1
3fc0: 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .2 {.  execsql {
3fd0: 0a 20 20 20 20 70 72 61 67 6d 61 20 69 6e 64 65  .    pragma inde
3fe0: 78 5f 6c 69 73 74 28 74 33 5f 62 6f 67 75 73 29  x_list(t3_bogus)
3ff0: 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 7d 20 3b 23 20  ;.  }.} {}.} ;# 
4000: 69 66 63 61 70 61 62 6c 65 20 73 63 68 65 6d 61  ifcapable schema
4010: 5f 70 72 61 67 6d 61 73 0a 69 66 63 61 70 61 62  _pragmas.ifcapab
4020: 6c 65 20 7b 75 74 66 31 36 7d 20 7b 0a 20 20 64  le {utf16} {.  d
4030: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 37 2e  o_test pragma-7.
4040: 32 20 7b 0a 20 20 20 20 64 62 20 63 6c 6f 73 65  2 {.    db close
4050: 0a 20 20 20 20 73 71 6c 69 74 65 33 20 64 62 20  .    sqlite3 db 
4060: 74 65 73 74 2e 64 62 0a 20 20 20 20 63 61 74 63  test.db.    catc
4070: 68 73 71 6c 20 7b 0a 20 20 20 20 20 20 70 72 61  hsql {.      pra
4080: 67 6d 61 20 65 6e 63 6f 64 69 6e 67 3d 62 6f 67  gma encoding=bog
4090: 75 73 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 31  us;.    }.  } {1
40a0: 20 7b 75 6e 73 75 70 70 6f 72 74 65 64 20 65 6e   {unsupported en
40b0: 63 6f 64 69 6e 67 3a 20 62 6f 67 75 73 7d 7d 0a  coding: bogus}}.
40c0: 7d 0a 69 66 63 61 70 61 62 6c 65 20 74 65 6d 70  }.ifcapable temp
40d0: 64 62 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 70  db {.  do_test p
40e0: 72 61 67 6d 61 2d 37 2e 33 20 7b 0a 20 20 20 20  ragma-7.3 {.    
40f0: 64 62 20 63 6c 6f 73 65 0a 20 20 20 20 73 71 6c  db close.    sql
4100: 69 74 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a  ite3 db test.db.
4110: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20      execsql {.  
4120: 20 20 20 20 70 72 61 67 6d 61 20 6c 6f 63 6b 5f      pragma lock_
4130: 73 74 61 74 75 73 3b 0a 20 20 20 20 7d 0a 20 20  status;.    }.  
4140: 7d 20 7b 6d 61 69 6e 20 75 6e 6c 6f 63 6b 65 64  } {main unlocked
4150: 20 74 65 6d 70 20 63 6c 6f 73 65 64 7d 0a 7d 20   temp closed}.} 
4160: 65 6c 73 65 20 7b 0a 20 20 64 6f 5f 74 65 73 74  else {.  do_test
4170: 20 70 72 61 67 6d 61 2d 37 2e 33 20 7b 0a 20 20   pragma-7.3 {.  
4180: 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 20 20 73    db close.    s
4190: 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64  qlite3 db test.d
41a0: 62 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a  b.    execsql {.
41b0: 20 20 20 20 20 20 70 72 61 67 6d 61 20 6c 6f 63        pragma loc
41c0: 6b 5f 73 74 61 74 75 73 3b 0a 20 20 20 20 7d 0a  k_status;.    }.
41d0: 20 20 7d 20 7b 6d 61 69 6e 20 75 6e 6c 6f 63 6b    } {main unlock
41e0: 65 64 7d 0a 7d 0a 0a 0a 23 2d 2d 2d 2d 2d 2d 2d  ed}.}...#-------
41f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4200: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4210: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4220: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a  ---------------.
4230: 23 20 54 65 73 74 20 63 61 73 65 73 20 70 72 61  # Test cases pra
4240: 67 6d 61 2d 38 2e 2a 20 74 65 73 74 20 74 68 65  gma-8.* test the
4250: 20 22 50 52 41 47 4d 41 20 73 63 68 65 6d 61 5f   "PRAGMA schema_
4260: 76 65 72 73 69 6f 6e 22 20 61 6e 64 20 22 50 52  version" and "PR
4270: 41 47 4d 41 0a 23 20 75 73 65 72 5f 76 65 72 73  AGMA.# user_vers
4280: 69 6f 6e 22 20 73 74 61 74 65 6d 65 6e 74 73 2e  ion" statements.
4290: 0a 23 0a 23 20 70 72 61 67 6d 61 2d 38 2e 31 3a  .#.# pragma-8.1:
42a0: 20 50 52 41 47 4d 41 20 73 63 68 65 6d 61 5f 76   PRAGMA schema_v
42b0: 65 72 73 69 6f 6e 0a 23 20 70 72 61 67 6d 61 2d  ersion.# pragma-
42c0: 38 2e 32 3a 20 50 52 41 47 4d 41 20 75 73 65 72  8.2: PRAGMA user
42d0: 5f 76 65 72 73 69 6f 6e 0a 23 0a 0a 69 66 63 61  _version.#..ifca
42e0: 70 61 62 6c 65 20 73 63 68 65 6d 61 5f 76 65 72  pable schema_ver
42f0: 73 69 6f 6e 20 7b 0a 0a 23 20 46 69 72 73 74 20  sion {..# First 
4300: 63 68 65 63 6b 20 74 68 61 74 20 77 65 20 63 61  check that we ca
4310: 6e 20 73 65 74 20 74 68 65 20 73 63 68 65 6d 61  n set the schema
4320: 20 76 65 72 73 69 6f 6e 20 61 6e 64 20 74 68 65   version and the
4330: 6e 20 72 65 74 72 69 65 76 65 20 74 68 65 0a 23  n retrieve the.#
4340: 20 73 61 6d 65 20 76 61 6c 75 65 2e 0a 64 6f 5f   same value..do_
4350: 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e  test pragma-8.1.
4360: 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  1 {.  execsql {.
4370: 20 20 20 20 50 52 41 47 4d 41 20 73 63 68 65 6d      PRAGMA schem
4380: 61 5f 76 65 72 73 69 6f 6e 20 3d 20 31 30 35 3b  a_version = 105;
4390: 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73  .  }.} {}.do_tes
43a0: 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e 32 20 7b  t pragma-8.1.2 {
43b0: 0a 20 20 65 78 65 63 73 71 6c 32 20 7b 0a 20 20  .  execsql2 {.  
43c0: 20 20 50 52 41 47 4d 41 20 73 63 68 65 6d 61 5f    PRAGMA schema_
43d0: 76 65 72 73 69 6f 6e 3b 0a 20 20 7d 0a 7d 20 7b  version;.  }.} {
43e0: 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 20 31  schema_version 1
43f0: 30 35 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67  05}.do_test prag
4400: 6d 61 2d 38 2e 31 2e 33 20 7b 0a 20 20 65 78 65  ma-8.1.3 {.  exe
4410: 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d  csql {.    PRAGM
4420: 41 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e  A schema_version
4430: 20 3d 20 31 30 36 3b 0a 20 20 7d 0a 7d 20 7b 7d   = 106;.  }.} {}
4440: 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d  .do_test pragma-
4450: 38 2e 31 2e 34 20 7b 0a 20 20 65 78 65 63 73 71  8.1.4 {.  execsq
4460: 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 73  l {.    PRAGMA s
4470: 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 3b 0a 20  chema_version;. 
4480: 20 7d 0a 7d 20 31 30 36 0a 0a 23 20 43 68 65 63   }.} 106..# Chec
4490: 6b 20 74 68 61 74 20 63 72 65 61 74 69 6e 67 20  k that creating 
44a0: 61 20 74 61 62 6c 65 20 6d 6f 64 69 66 69 65 73  a table modifies
44b0: 20 74 68 65 20 73 63 68 65 6d 61 2d 76 65 72 73   the schema-vers
44c0: 69 6f 6e 20 28 74 68 69 73 20 69 73 20 72 65 61  ion (this is rea
44d0: 6c 6c 79 0a 23 20 74 6f 20 76 65 72 69 66 79 20  lly.# to verify 
44e0: 74 68 61 74 20 74 68 65 20 76 61 6c 75 65 20 62  that the value b
44f0: 65 69 6e 67 20 72 65 61 64 20 69 73 20 69 6e 20  eing read is in 
4500: 66 61 63 74 20 74 68 65 20 73 63 68 65 6d 61 20  fact the schema 
4510: 76 65 72 73 69 6f 6e 29 2e 0a 64 6f 5f 74 65 73  version)..do_tes
4520: 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e 35 20 7b  t pragma-8.1.5 {
4530: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
4540: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 34   CREATE TABLE t4
4550: 28 61 2c 20 62 2c 20 63 29 3b 0a 20 20 20 20 49  (a, b, c);.    I
4560: 4e 53 45 52 54 20 49 4e 54 4f 20 74 34 20 56 41  NSERT INTO t4 VA
4570: 4c 55 45 53 28 31 2c 20 32 2c 20 33 29 3b 0a 20  LUES(1, 2, 3);. 
4580: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
4590: 20 74 34 3b 0a 20 20 7d 0a 7d 20 7b 31 20 32 20   t4;.  }.} {1 2 
45a0: 33 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  3}.do_test pragm
45b0: 61 2d 38 2e 31 2e 36 20 7b 0a 20 20 65 78 65 63  a-8.1.6 {.  exec
45c0: 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41  sql {.    PRAGMA
45d0: 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 3b   schema_version;
45e0: 0a 20 20 7d 0a 7d 20 31 30 37 0a 0a 23 20 4e 6f  .  }.} 107..# No
45f0: 77 20 6f 70 65 6e 20 61 20 73 65 63 6f 6e 64 20  w open a second 
4600: 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 74 68  connection to th
4610: 65 20 64 61 74 61 62 61 73 65 2e 20 45 6e 73 75  e database. Ensu
4620: 72 65 20 74 68 61 74 20 63 68 61 6e 67 69 6e 67  re that changing
4630: 20 74 68 65 0a 23 20 73 63 68 65 6d 61 2d 76 65   the.# schema-ve
4640: 72 73 69 6f 6e 20 75 73 69 6e 67 20 74 68 65 20  rsion using the 
4650: 66 69 72 73 74 20 63 6f 6e 6e 65 63 74 69 6f 6e  first connection
4660: 20 66 6f 72 63 65 73 20 74 68 65 20 73 65 63 6f   forces the seco
4670: 6e 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 0a 23 20  nd connection.# 
4680: 74 6f 20 72 65 6c 6f 61 64 20 74 68 65 20 73 63  to reload the sc
4690: 68 65 6d 61 2e 20 54 68 69 73 20 68 61 73 20 74  hema. This has t
46a0: 6f 20 62 65 20 64 6f 6e 65 20 75 73 69 6e 67 20  o be done using 
46b0: 74 68 65 20 43 2d 41 50 49 20 74 65 73 74 20 66  the C-API test f
46c0: 75 6e 63 74 69 6f 6e 73 2c 0a 23 20 62 65 63 61  unctions,.# beca
46d0: 75 73 65 20 74 68 65 20 54 43 4c 20 41 50 49 20  use the TCL API 
46e0: 61 63 63 6f 75 6e 74 73 20 66 6f 72 20 53 43 48  accounts for SCH
46f0: 45 4d 41 5f 45 52 52 4f 52 20 61 6e 64 20 72 65  EMA_ERROR and re
4700: 74 72 69 65 73 20 74 68 65 20 71 75 65 72 79 2e  tries the query.
4710: 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d  .do_test pragma-
4720: 38 2e 31 2e 37 20 7b 0a 20 20 73 71 6c 69 74 65  8.1.7 {.  sqlite
4730: 33 20 64 62 32 20 74 65 73 74 2e 64 62 3b 20 73  3 db2 test.db; s
4740: 65 74 20 3a 3a 44 42 32 20 5b 73 71 6c 69 74 65  et ::DB2 [sqlite
4750: 33 5f 63 6f 6e 6e 65 63 74 69 6f 6e 5f 70 6f 69  3_connection_poi
4760: 6e 74 65 72 20 64 62 32 5d 0a 20 20 65 78 65 63  nter db2].  exec
4770: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
4780: 20 2a 20 46 52 4f 4d 20 74 34 3b 0a 20 20 7d 20   * FROM t4;.  } 
4790: 64 62 32 0a 7d 20 7b 31 20 32 20 33 7d 0a 64 6f  db2.} {1 2 3}.do
47a0: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 31  _test pragma-8.1
47b0: 2e 38 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .8 {.  execsql {
47c0: 0a 20 20 20 20 50 52 41 47 4d 41 20 73 63 68 65  .    PRAGMA sche
47d0: 6d 61 5f 76 65 72 73 69 6f 6e 20 3d 20 31 30 38  ma_version = 108
47e0: 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65  ;.  }.} {}.do_te
47f0: 73 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e 39 20  st pragma-8.1.9 
4800: 7b 0a 20 20 73 65 74 20 3a 3a 53 54 4d 54 20 5b  {.  set ::STMT [
4810: 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 20  sqlite3_prepare 
4820: 24 3a 3a 44 42 32 20 22 53 45 4c 45 43 54 20 2a  $::DB2 "SELECT *
4830: 20 46 52 4f 4d 20 74 34 22 20 2d 31 20 44 55 4d   FROM t4" -1 DUM
4840: 4d 59 5d 0a 20 20 73 71 6c 69 74 65 33 5f 73 74  MY].  sqlite3_st
4850: 65 70 20 24 3a 3a 53 54 4d 54 0a 7d 20 53 51 4c  ep $::STMT.} SQL
4860: 49 54 45 5f 45 52 52 4f 52 0a 64 6f 5f 74 65 73  ITE_ERROR.do_tes
4870: 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e 31 30 20  t pragma-8.1.10 
4880: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61  {.  sqlite3_fina
4890: 6c 69 7a 65 20 24 3a 3a 53 54 4d 54 0a 7d 20 53  lize $::STMT.} S
48a0: 51 4c 49 54 45 5f 53 43 48 45 4d 41 0a 0a 23 20  QLITE_SCHEMA..# 
48b0: 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20 73 63  Make sure the sc
48c0: 68 65 6d 61 2d 76 65 72 73 69 6f 6e 20 63 61 6e  hema-version can
48d0: 20 62 65 20 6d 61 6e 69 70 75 6c 61 74 65 64 20   be manipulated 
48e0: 69 6e 20 61 6e 20 61 74 74 61 63 68 65 64 20 64  in an attached d
48f0: 61 74 61 62 61 73 65 2e 0a 66 69 6c 65 20 64 65  atabase..file de
4900: 6c 65 74 65 20 2d 66 6f 72 63 65 20 74 65 73 74  lete -force test
4910: 32 2e 64 62 0a 66 69 6c 65 20 64 65 6c 65 74 65  2.db.file delete
4920: 20 2d 66 6f 72 63 65 20 74 65 73 74 32 2e 64 62   -force test2.db
4930: 2d 6a 6f 75 72 6e 61 6c 0a 69 66 63 61 70 61 62  -journal.ifcapab
4940: 6c 65 20 61 74 74 61 63 68 20 7b 0a 20 20 64 6f  le attach {.  do
4950: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 31  _test pragma-8.1
4960: 2e 31 31 20 7b 0a 20 20 20 20 65 78 65 63 73 71  .11 {.    execsq
4970: 6c 20 7b 0a 20 20 20 20 20 20 41 54 54 41 43 48  l {.      ATTACH
4980: 20 27 74 65 73 74 32 2e 64 62 27 20 41 53 20 61   'test2.db' AS a
4990: 75 78 3b 0a 20 20 20 20 20 20 43 52 45 41 54 45  ux;.      CREATE
49a0: 20 54 41 42 4c 45 20 61 75 78 2e 74 31 28 61 2c   TABLE aux.t1(a,
49b0: 20 62 2c 20 63 29 3b 0a 20 20 20 20 20 20 50 52   b, c);.      PR
49c0: 41 47 4d 41 20 61 75 78 2e 73 63 68 65 6d 61 5f  AGMA aux.schema_
49d0: 76 65 72 73 69 6f 6e 20 3d 20 32 30 35 3b 0a 20  version = 205;. 
49e0: 20 20 20 7d 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f     }.  } {}.  do
49f0: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 31  _test pragma-8.1
4a00: 2e 31 32 20 7b 0a 20 20 20 20 65 78 65 63 73 71  .12 {.    execsq
4a10: 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41  l {.      PRAGMA
4a20: 20 61 75 78 2e 73 63 68 65 6d 61 5f 76 65 72 73   aux.schema_vers
4a30: 69 6f 6e 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 32  ion;.    }.  } 2
4a40: 30 35 0a 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61  05.}.do_test pra
4a50: 67 6d 61 2d 38 2e 31 2e 31 33 20 7b 0a 20 20 65  gma-8.1.13 {.  e
4a60: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41  xecsql {.    PRA
4a70: 47 4d 41 20 73 63 68 65 6d 61 5f 76 65 72 73 69  GMA schema_versi
4a80: 6f 6e 3b 0a 20 20 7d 0a 7d 20 31 30 38 0a 0a 23  on;.  }.} 108..#
4a90: 20 41 6e 64 20 63 68 65 63 6b 20 74 68 61 74 20   And check that 
4aa0: 6d 6f 64 69 66 79 69 6e 67 20 74 68 65 20 73 63  modifying the sc
4ab0: 68 65 6d 61 2d 76 65 72 73 69 6f 6e 20 69 6e 20  hema-version in 
4ac0: 61 6e 20 61 74 74 61 63 68 65 64 20 64 61 74 61  an attached data
4ad0: 62 61 73 65 0a 23 20 66 6f 72 63 65 73 20 74 68  base.# forces th
4ae0: 65 20 73 65 63 6f 6e 64 20 63 6f 6e 6e 65 63 74  e second connect
4af0: 69 6f 6e 20 74 6f 20 72 65 6c 6f 61 64 20 74 68  ion to reload th
4b00: 65 20 73 63 68 65 6d 61 2e 0a 69 66 63 61 70 61  e schema..ifcapa
4b10: 62 6c 65 20 61 74 74 61 63 68 20 7b 0a 20 20 64  ble attach {.  d
4b20: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e  o_test pragma-8.
4b30: 31 2e 31 34 20 7b 0a 20 20 20 20 73 71 6c 69 74  1.14 {.    sqlit
4b40: 65 33 20 64 62 32 20 74 65 73 74 2e 64 62 3b 20  e3 db2 test.db; 
4b50: 73 65 74 20 3a 3a 44 42 32 20 5b 73 71 6c 69 74  set ::DB2 [sqlit
4b60: 65 33 5f 63 6f 6e 6e 65 63 74 69 6f 6e 5f 70 6f  e3_connection_po
4b70: 69 6e 74 65 72 20 64 62 32 5d 0a 20 20 20 20 65  inter db2].    e
4b80: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 41  xecsql {.      A
4b90: 54 54 41 43 48 20 27 74 65 73 74 32 2e 64 62 27  TTACH 'test2.db'
4ba0: 20 41 53 20 61 75 78 3b 0a 20 20 20 20 20 20 53   AS aux;.      S
4bb0: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 61 75 78  ELECT * FROM aux
4bc0: 2e 74 31 3b 0a 20 20 20 20 7d 20 64 62 32 0a 20  .t1;.    } db2. 
4bd0: 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20   } {}.  do_test 
4be0: 70 72 61 67 6d 61 2d 38 2e 31 2e 31 35 20 7b 0a  pragma-8.1.15 {.
4bf0: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20      execsql {.  
4c00: 20 20 20 20 50 52 41 47 4d 41 20 61 75 78 2e 73      PRAGMA aux.s
4c10: 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 20 3d 20  chema_version = 
4c20: 32 30 36 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b  206;.    }.  } {
4c30: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67  }.  do_test prag
4c40: 6d 61 2d 38 2e 31 2e 31 36 20 7b 0a 20 20 20 20  ma-8.1.16 {.    
4c50: 73 65 74 20 3a 3a 53 54 4d 54 20 5b 73 71 6c 69  set ::STMT [sqli
4c60: 74 65 33 5f 70 72 65 70 61 72 65 20 24 3a 3a 44  te3_prepare $::D
4c70: 42 32 20 22 53 45 4c 45 43 54 20 2a 20 46 52 4f  B2 "SELECT * FRO
4c80: 4d 20 61 75 78 2e 74 31 22 20 2d 31 20 44 55 4d  M aux.t1" -1 DUM
4c90: 4d 59 5d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  MY].    sqlite3_
4ca0: 73 74 65 70 20 24 3a 3a 53 54 4d 54 0a 20 20 7d  step $::STMT.  }
4cb0: 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 0a 20 20   SQLITE_ERROR.  
4cc0: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38  do_test pragma-8
4cd0: 2e 31 2e 31 37 20 7b 0a 20 20 20 20 73 71 6c 69  .1.17 {.    sqli
4ce0: 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24 3a 3a  te3_finalize $::
4cf0: 53 54 4d 54 0a 20 20 7d 20 53 51 4c 49 54 45 5f  STMT.  } SQLITE_
4d00: 53 43 48 45 4d 41 0a 20 20 64 6f 5f 74 65 73 74  SCHEMA.  do_test
4d10: 20 70 72 61 67 6d 61 2d 38 2e 31 2e 31 38 20 7b   pragma-8.1.18 {
4d20: 0a 20 20 20 20 64 62 32 20 63 6c 6f 73 65 0a 20  .    db2 close. 
4d30: 20 7d 20 7b 7d 0a 7d 0a 0a 23 20 4e 6f 77 20 74   } {}.}..# Now t
4d40: 65 73 74 20 74 68 61 74 20 74 68 65 20 75 73 65  est that the use
4d50: 72 2d 76 65 72 73 69 6f 6e 20 63 61 6e 20 62 65  r-version can be
4d60: 20 72 65 61 64 20 61 6e 64 20 77 72 69 74 74 65   read and writte
4d70: 6e 20 28 61 6e 64 20 74 68 61 74 20 77 65 20 61  n (and that we a
4d80: 72 65 6e 27 74 0a 23 20 61 63 63 69 64 65 6e 74  ren't.# accident
4d90: 61 6c 6c 79 20 6d 61 6e 69 70 75 6c 61 74 69 6e  ally manipulatin
4da0: 67 20 74 68 65 20 73 63 68 65 6d 61 2d 76 65 72  g the schema-ver
4db0: 73 69 6f 6e 20 69 6e 73 74 65 61 64 29 2e 0a 64  sion instead)..d
4dc0: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e  o_test pragma-8.
4dd0: 32 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 32  2.1 {.  execsql2
4de0: 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 75 73   {.    PRAGMA us
4df0: 65 72 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 7d 0a  er_version;.  }.
4e00: 7d 20 7b 75 73 65 72 5f 76 65 72 73 69 6f 6e 20  } {user_version 
4e10: 30 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  0}.do_test pragm
4e20: 61 2d 38 2e 32 2e 32 20 7b 0a 20 20 65 78 65 63  a-8.2.2 {.  exec
4e30: 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41  sql {.    PRAGMA
4e40: 20 75 73 65 72 5f 76 65 72 73 69 6f 6e 20 3d 20   user_version = 
4e50: 32 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74  2;.  }.} {}.do_t
4e60: 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 32 2e 33  est pragma-8.2.3
4e70: 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 32 20  .1 {.  execsql2 
4e80: 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 75 73 65  {.    PRAGMA use
4e90: 72 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 7d 0a 7d  r_version;.  }.}
4ea0: 20 7b 75 73 65 72 5f 76 65 72 73 69 6f 6e 20 32   {user_version 2
4eb0: 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  }.do_test pragma
4ec0: 2d 38 2e 32 2e 33 2e 32 20 7b 0a 20 20 64 62 20  -8.2.3.2 {.  db 
4ed0: 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74 65 33 20  close.  sqlite3 
4ee0: 64 62 20 74 65 73 74 2e 64 62 0a 20 20 65 78 65  db test.db.  exe
4ef0: 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d  csql {.    PRAGM
4f00: 41 20 75 73 65 72 5f 76 65 72 73 69 6f 6e 3b 0a  A user_version;.
4f10: 20 20 7d 0a 7d 20 7b 32 7d 0a 64 6f 5f 74 65 73    }.} {2}.do_tes
4f20: 74 20 70 72 61 67 6d 61 2d 38 2e 32 2e 34 2e 31  t pragma-8.2.4.1
4f30: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
4f40: 20 20 20 50 52 41 47 4d 41 20 73 63 68 65 6d 61     PRAGMA schema
4f50: 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 7d 0a 7d 20  _version;.  }.} 
4f60: 7b 31 30 38 7d 0a 69 66 63 61 70 61 62 6c 65 20  {108}.ifcapable 
4f70: 76 61 63 75 75 6d 20 7b 0a 20 20 64 6f 5f 74 65  vacuum {.  do_te
4f80: 73 74 20 70 72 61 67 6d 61 2d 38 2e 32 2e 34 2e  st pragma-8.2.4.
4f90: 32 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  2 {.    execsql 
4fa0: 7b 0a 20 20 20 20 20 20 56 41 43 55 55 4d 3b 0a  {.      VACUUM;.
4fb0: 20 20 20 20 20 20 50 52 41 47 4d 41 20 75 73 65        PRAGMA use
4fc0: 72 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 20 20 7d  r_version;.    }
4fd0: 0a 20 20 7d 20 7b 32 7d 0a 20 20 64 6f 5f 74 65  .  } {2}.  do_te
4fe0: 73 74 20 70 72 61 67 6d 61 2d 38 2e 32 2e 34 2e  st pragma-8.2.4.
4ff0: 33 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  3 {.    execsql 
5000: 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 73  {.      PRAGMA s
5010: 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 3b 0a 20  chema_version;. 
5020: 20 20 20 7d 0a 20 20 7d 20 7b 31 30 39 7d 0a 7d     }.  } {109}.}
5030: 0a 0a 69 66 63 61 70 61 62 6c 65 20 61 74 74 61  ..ifcapable atta
5040: 63 68 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b  ch {.  db eval {
5050: 41 54 54 41 43 48 20 27 74 65 73 74 32 2e 64 62  ATTACH 'test2.db
5060: 27 20 41 53 20 61 75 78 7d 0a 20 20 0a 20 20 23  ' AS aux}.  .  #
5070: 20 43 68 65 63 6b 20 74 68 61 74 20 74 68 65 20   Check that the 
5080: 75 73 65 72 2d 76 65 72 73 69 6f 6e 20 69 6e 20  user-version in 
5090: 74 68 65 20 61 75 78 69 6c 61 72 79 20 64 61 74  the auxilary dat
50a0: 61 62 61 73 65 20 63 61 6e 20 62 65 20 6d 61 6e  abase can be man
50b0: 69 70 75 6c 61 74 65 64 20 28 0a 20 20 23 20 61  ipulated (.  # a
50c0: 6e 64 20 74 68 61 74 20 77 65 20 61 72 65 6e 27  nd that we aren'
50d0: 74 20 61 63 63 69 64 65 6e 74 61 6c 6c 79 20 6d  t accidentally m
50e0: 61 6e 69 70 75 6c 61 74 69 6e 67 20 74 68 65 20  anipulating the 
50f0: 73 61 6d 65 20 69 6e 20 74 68 65 20 6d 61 69 6e  same in the main
5100: 20 64 62 29 2e 0a 20 20 64 6f 5f 74 65 73 74 20   db)..  do_test 
5110: 70 72 61 67 6d 61 2d 38 2e 32 2e 35 20 7b 0a 20  pragma-8.2.5 {. 
5120: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
5130: 20 20 20 50 52 41 47 4d 41 20 61 75 78 2e 75 73     PRAGMA aux.us
5140: 65 72 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 20 20  er_version;.    
5150: 7d 0a 20 20 7d 20 7b 30 7d 0a 20 20 64 6f 5f 74  }.  } {0}.  do_t
5160: 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 32 2e 36  est pragma-8.2.6
5170: 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b   {.    execsql {
5180: 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 61 75  .      PRAGMA au
5190: 78 2e 75 73 65 72 5f 76 65 72 73 69 6f 6e 20 3d  x.user_version =
51a0: 20 33 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 7d   3;.    }.  } {}
51b0: 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .  do_test pragm
51c0: 61 2d 38 2e 32 2e 37 20 7b 0a 20 20 20 20 65 78  a-8.2.7 {.    ex
51d0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52  ecsql {.      PR
51e0: 41 47 4d 41 20 61 75 78 2e 75 73 65 72 5f 76 65  AGMA aux.user_ve
51f0: 72 73 69 6f 6e 3b 0a 20 20 20 20 7d 0a 20 20 7d  rsion;.    }.  }
5200: 20 7b 33 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70   {3}.  do_test p
5210: 72 61 67 6d 61 2d 38 2e 32 2e 38 20 7b 0a 20 20  ragma-8.2.8 {.  
5220: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
5230: 20 20 50 52 41 47 4d 41 20 6d 61 69 6e 2e 75 73    PRAGMA main.us
5240: 65 72 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 20 20  er_version;.    
5250: 7d 0a 20 20 7d 20 7b 32 7d 0a 20 20 0a 20 20 23  }.  } {2}.  .  #
5260: 20 4e 6f 77 20 63 68 65 63 6b 20 74 68 61 74 20   Now check that 
5270: 61 20 52 4f 4c 4c 42 41 43 4b 20 72 65 73 65 74  a ROLLBACK reset
5280: 73 20 74 68 65 20 75 73 65 72 2d 76 65 72 73 69  s the user-versi
5290: 6f 6e 20 69 66 20 69 74 20 68 61 73 20 62 65 65  on if it has bee
52a0: 6e 20 6d 6f 64 69 66 69 65 64 0a 20 20 23 20 77  n modified.  # w
52b0: 69 74 68 69 6e 20 61 20 74 72 61 6e 73 61 63 74  ithin a transact
52c0: 69 6f 6e 2e 0a 20 20 64 6f 5f 74 65 73 74 20 70  ion..  do_test p
52d0: 72 61 67 6d 61 2d 38 2e 32 2e 39 20 7b 0a 20 20  ragma-8.2.9 {.  
52e0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
52f0: 20 20 42 45 47 49 4e 3b 0a 20 20 20 20 20 20 50    BEGIN;.      P
5300: 52 41 47 4d 41 20 61 75 78 2e 75 73 65 72 5f 76  RAGMA aux.user_v
5310: 65 72 73 69 6f 6e 20 3d 20 31 30 3b 0a 20 20 20  ersion = 10;.   
5320: 20 20 20 50 52 41 47 4d 41 20 75 73 65 72 5f 76     PRAGMA user_v
5330: 65 72 73 69 6f 6e 20 3d 20 31 31 3b 0a 20 20 20  ersion = 11;.   
5340: 20 7d 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74   }.  } {}.  do_t
5350: 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 32 2e 31  est pragma-8.2.1
5360: 30 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  0 {.    execsql 
5370: 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 61  {.      PRAGMA a
5380: 75 78 2e 75 73 65 72 5f 76 65 72 73 69 6f 6e 3b  ux.user_version;
5390: 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 31 30 7d 0a  .    }.  } {10}.
53a0: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
53b0: 2d 38 2e 32 2e 31 31 20 7b 0a 20 20 20 20 65 78  -8.2.11 {.    ex
53c0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52  ecsql {.      PR
53d0: 41 47 4d 41 20 6d 61 69 6e 2e 75 73 65 72 5f 76  AGMA main.user_v
53e0: 65 72 73 69 6f 6e 3b 0a 20 20 20 20 7d 0a 20 20  ersion;.    }.  
53f0: 7d 20 7b 31 31 7d 0a 20 20 64 6f 5f 74 65 73 74  } {11}.  do_test
5400: 20 70 72 61 67 6d 61 2d 38 2e 32 2e 31 32 20 7b   pragma-8.2.12 {
5410: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
5420: 20 20 20 20 20 52 4f 4c 4c 42 41 43 4b 3b 0a 20       ROLLBACK;. 
5430: 20 20 20 20 20 50 52 41 47 4d 41 20 61 75 78 2e       PRAGMA aux.
5440: 75 73 65 72 5f 76 65 72 73 69 6f 6e 3b 0a 20 20  user_version;.  
5450: 20 20 7d 0a 20 20 7d 20 7b 33 7d 0a 20 20 64 6f    }.  } {3}.  do
5460: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 32  _test pragma-8.2
5470: 2e 31 33 20 7b 0a 20 20 20 20 65 78 65 63 73 71  .13 {.    execsq
5480: 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41  l {.      PRAGMA
5490: 20 6d 61 69 6e 2e 75 73 65 72 5f 76 65 72 73 69   main.user_versi
54a0: 6f 6e 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 32  on;.    }.  } {2
54b0: 7d 0a 7d 0a 0a 23 20 54 72 79 20 61 20 6e 65 67  }.}..# Try a neg
54c0: 61 74 69 76 65 20 76 61 6c 75 65 20 66 6f 72 20  ative value for 
54d0: 74 68 65 20 75 73 65 72 2d 76 65 72 73 69 6f 6e  the user-version
54e0: 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d  .do_test pragma-
54f0: 38 2e 32 2e 31 34 20 7b 0a 20 20 65 78 65 63 73  8.2.14 {.  execs
5500: 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20  ql {.    PRAGMA 
5510: 75 73 65 72 5f 76 65 72 73 69 6f 6e 20 3d 20 2d  user_version = -
5520: 34 35 30 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f  450;.  }.} {}.do
5530: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 32  _test pragma-8.2
5540: 2e 31 35 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  .15 {.  execsql 
5550: 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 75 73 65  {.    PRAGMA use
5560: 72 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 7d 0a 7d  r_version;.  }.}
5570: 20 7b 2d 34 35 30 7d 0a 7d 20 3b 20 23 20 69 66   {-450}.} ; # if
5580: 63 61 70 61 62 6c 65 20 73 63 68 65 6d 61 5f 76  capable schema_v
5590: 65 72 73 69 6f 6e 0a 0a 23 20 43 68 65 63 6b 20  ersion..# Check 
55a0: 74 6f 20 73 65 65 20 69 66 20 54 45 4d 50 5f 53  to see if TEMP_S
55b0: 54 4f 52 45 20 69 73 20 6d 65 6d 6f 72 79 20 6f  TORE is memory o
55c0: 72 20 64 69 73 6b 2e 20 20 52 65 74 75 72 6e 20  r disk.  Return 
55d0: 73 74 72 69 6e 67 73 0a 23 20 22 6d 65 6d 6f 72  strings.# "memor
55e0: 79 22 20 6f 72 20 22 64 69 73 6b 22 20 61 73 20  y" or "disk" as 
55f0: 61 70 70 72 6f 70 72 69 61 74 65 2e 0a 23 0a 70  appropriate..#.p
5600: 72 6f 63 20 63 68 65 63 6b 5f 74 65 6d 70 5f 73  roc check_temp_s
5610: 74 6f 72 65 20 7b 7d 20 7b 0a 20 20 64 62 20 65  tore {} {.  db e
5620: 76 61 6c 20 7b 43 52 45 41 54 45 20 54 45 4d 50  val {CREATE TEMP
5630: 20 54 41 42 4c 45 20 49 46 20 4e 4f 54 20 45 58   TABLE IF NOT EX
5640: 49 53 54 53 20 61 28 62 29 7d 0a 20 20 64 62 20  ISTS a(b)}.  db 
5650: 65 76 61 6c 20 7b 50 52 41 47 4d 41 20 64 61 74  eval {PRAGMA dat
5660: 61 62 61 73 65 5f 6c 69 73 74 7d 20 7b 0a 20 20  abase_list} {.  
5670: 20 20 69 66 20 7b 24 6e 61 6d 65 3d 3d 22 74 65    if {$name=="te
5680: 6d 70 22 7d 20 7b 0a 20 20 20 20 20 20 73 65 74  mp"} {.      set
5690: 20 62 74 20 5b 62 74 72 65 65 5f 66 72 6f 6d 5f   bt [btree_from_
56a0: 64 62 20 64 62 20 31 5d 0a 20 20 20 20 20 20 69  db db 1].      i
56b0: 66 20 7b 5b 62 74 72 65 65 5f 69 73 6d 65 6d 64  f {[btree_ismemd
56c0: 62 20 24 62 74 5d 7d 20 7b 0a 20 20 20 20 20 20  b $bt]} {.      
56d0: 20 20 72 65 74 75 72 6e 20 22 6d 65 6d 6f 72 79    return "memory
56e0: 22 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ".      }.      
56f0: 72 65 74 75 72 6e 20 22 64 69 73 6b 22 0a 20 20  return "disk".  
5700: 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e    }.  }.  return
5710: 20 22 75 6e 6b 6e 6f 77 6e 22 0a 7d 0a 0a 0a 23   "unknown".}...#
5720: 20 54 65 73 74 20 74 65 6d 70 5f 73 74 6f 72 65   Test temp_store
5730: 20 61 6e 64 20 74 65 6d 70 5f 73 74 6f 72 65 5f   and temp_store_
5740: 64 69 72 65 63 74 6f 72 79 20 70 72 61 67 6d 61  directory pragma
5750: 73 0a 23 0a 69 66 63 61 70 61 62 6c 65 20 70 61  s.#.ifcapable pa
5760: 67 65 72 5f 70 72 61 67 6d 61 73 20 7b 0a 64 6f  ger_pragmas {.do
5770: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 39 2e 31  _test pragma-9.1
5780: 20 7b 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20 20   {.  db close.  
5790: 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e  sqlite3 db test.
57a0: 64 62 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  db.  execsql {. 
57b0: 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73     PRAGMA temp_s
57c0: 74 6f 72 65 3b 0a 20 20 7d 0a 7d 20 7b 30 7d 0a  tore;.  }.} {0}.
57d0: 69 66 20 7b 24 54 45 4d 50 5f 53 54 4f 52 45 3c  if {$TEMP_STORE<
57e0: 3d 31 7d 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20  =1} {.  do_test 
57f0: 70 72 61 67 6d 61 2d 39 2e 31 2e 31 20 7b 0a 20  pragma-9.1.1 {. 
5800: 20 20 20 63 68 65 63 6b 5f 74 65 6d 70 5f 73 74     check_temp_st
5810: 6f 72 65 0a 20 20 7d 20 7b 64 69 73 6b 7d 0a 7d  ore.  } {disk}.}
5820: 20 65 6c 73 65 20 7b 0a 20 20 64 6f 5f 74 65 73   else {.  do_tes
5830: 74 20 70 72 61 67 6d 61 2d 39 2e 31 2e 31 20 7b  t pragma-9.1.1 {
5840: 0a 20 20 20 20 63 68 65 63 6b 5f 74 65 6d 70 5f  .    check_temp_
5850: 73 74 6f 72 65 0a 20 20 7d 20 7b 6d 65 6d 6f 72  store.  } {memor
5860: 79 7d 0a 7d 0a 0a 64 6f 5f 74 65 73 74 20 70 72  y}.}..do_test pr
5870: 61 67 6d 61 2d 39 2e 32 20 7b 0a 20 20 64 62 20  agma-9.2 {.  db 
5880: 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74 65 33 20  close.  sqlite3 
5890: 64 62 20 74 65 73 74 2e 64 62 0a 20 20 65 78 65  db test.db.  exe
58a0: 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d  csql {.    PRAGM
58b0: 41 20 74 65 6d 70 5f 73 74 6f 72 65 3d 66 69 6c  A temp_store=fil
58c0: 65 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 74 65  e;.    PRAGMA te
58d0: 6d 70 5f 73 74 6f 72 65 3b 0a 20 20 7d 0a 7d 20  mp_store;.  }.} 
58e0: 7b 31 7d 0a 69 66 20 7b 24 54 45 4d 50 5f 53 54  {1}.if {$TEMP_ST
58f0: 4f 52 45 3d 3d 33 7d 20 7b 0a 20 20 23 20 57 68  ORE==3} {.  # Wh
5900: 65 6e 20 54 45 4d 50 5f 53 54 4f 52 45 20 69 73  en TEMP_STORE is
5910: 20 33 2c 20 61 6c 77 61 79 73 20 75 73 65 20 6d   3, always use m
5920: 65 6d 6f 72 79 20 72 65 67 61 72 64 6c 65 73 73  emory regardless
5930: 20 6f 66 20 70 72 61 67 6d 61 20 73 65 74 74 69   of pragma setti
5940: 6e 67 73 2e 0a 20 20 64 6f 5f 74 65 73 74 20 70  ngs..  do_test p
5950: 72 61 67 6d 61 2d 39 2e 32 2e 31 20 7b 0a 20 20  ragma-9.2.1 {.  
5960: 20 20 63 68 65 63 6b 5f 74 65 6d 70 5f 73 74 6f    check_temp_sto
5970: 72 65 0a 20 20 7d 20 7b 6d 65 6d 6f 72 79 7d 0a  re.  } {memory}.
5980: 7d 20 65 6c 73 65 20 7b 0a 20 20 64 6f 5f 74 65  } else {.  do_te
5990: 73 74 20 70 72 61 67 6d 61 2d 39 2e 32 2e 31 20  st pragma-9.2.1 
59a0: 7b 0a 20 20 20 20 63 68 65 63 6b 5f 74 65 6d 70  {.    check_temp
59b0: 5f 73 74 6f 72 65 0a 20 20 7d 20 7b 64 69 73 6b  _store.  } {disk
59c0: 7d 0a 7d 0a 0a 64 6f 5f 74 65 73 74 20 70 72 61  }.}..do_test pra
59d0: 67 6d 61 2d 39 2e 33 20 7b 0a 20 20 64 62 20 63  gma-9.3 {.  db c
59e0: 6c 6f 73 65 0a 20 20 73 71 6c 69 74 65 33 20 64  lose.  sqlite3 d
59f0: 62 20 74 65 73 74 2e 64 62 0a 20 20 65 78 65 63  b test.db.  exec
5a00: 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41  sql {.    PRAGMA
5a10: 20 74 65 6d 70 5f 73 74 6f 72 65 3d 6d 65 6d 6f   temp_store=memo
5a20: 72 79 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 74  ry;.    PRAGMA t
5a30: 65 6d 70 5f 73 74 6f 72 65 3b 0a 20 20 7d 0a 7d  emp_store;.  }.}
5a40: 20 7b 32 7d 0a 69 66 20 7b 24 54 45 4d 50 5f 53   {2}.if {$TEMP_S
5a50: 54 4f 52 45 3d 3d 30 7d 20 7b 0a 20 20 23 20 57  TORE==0} {.  # W
5a60: 68 65 6e 20 54 45 4d 50 5f 53 54 4f 52 45 20 69  hen TEMP_STORE i
5a70: 73 20 30 2c 20 61 6c 77 61 79 73 20 75 73 65 20  s 0, always use 
5a80: 74 68 65 20 64 69 73 6b 20 72 65 67 61 72 64 6c  the disk regardl
5a90: 65 73 73 20 6f 66 20 70 72 61 67 6d 61 20 73 65  ess of pragma se
5aa0: 74 74 69 6e 67 73 2e 0a 20 20 64 6f 5f 74 65 73  ttings..  do_tes
5ab0: 74 20 70 72 61 67 6d 61 2d 39 2e 33 2e 31 20 7b  t pragma-9.3.1 {
5ac0: 0a 20 20 20 20 63 68 65 63 6b 5f 74 65 6d 70 5f  .    check_temp_
5ad0: 73 74 6f 72 65 0a 20 20 7d 20 7b 64 69 73 6b 7d  store.  } {disk}
5ae0: 0a 7d 20 65 6c 73 65 20 7b 0a 20 20 64 6f 5f 74  .} else {.  do_t
5af0: 65 73 74 20 70 72 61 67 6d 61 2d 39 2e 33 2e 31  est pragma-9.3.1
5b00: 20 7b 0a 20 20 20 20 63 68 65 63 6b 5f 74 65 6d   {.    check_tem
5b10: 70 5f 73 74 6f 72 65 0a 20 20 7d 20 7b 6d 65 6d  p_store.  } {mem
5b20: 6f 72 79 7d 0a 7d 0a 0a 64 6f 5f 74 65 73 74 20  ory}.}..do_test 
5b30: 70 72 61 67 6d 61 2d 39 2e 34 20 7b 0a 20 20 65  pragma-9.4 {.  e
5b40: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41  xecsql {.    PRA
5b50: 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64  GMA temp_store_d
5b60: 69 72 65 63 74 6f 72 79 3b 0a 20 20 7d 0a 7d 20  irectory;.  }.} 
5b70: 7b 7d 0a 69 66 63 61 70 61 62 6c 65 20 77 73 64  {}.ifcapable wsd
5b80: 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61   {.  do_test pra
5b90: 67 6d 61 2d 39 2e 35 20 7b 0a 20 20 20 20 73 65  gma-9.5 {.    se
5ba0: 74 20 70 77 64 20 5b 73 74 72 69 6e 67 20 6d 61  t pwd [string ma
5bb0: 70 20 7b 27 20 27 27 7d 20 5b 66 69 6c 65 20 6e  p {' ''} [file n
5bc0: 61 74 69 76 65 6e 61 6d 65 20 5b 70 77 64 5d 5d  ativename [pwd]]
5bd0: 5d 0a 20 20 20 20 65 78 65 63 73 71 6c 20 22 0a  ].    execsql ".
5be0: 20 20 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d        PRAGMA tem
5bf0: 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72  p_store_director
5c00: 79 3d 27 24 70 77 64 27 3b 0a 20 20 20 20 22 0a  y='$pwd';.    ".
5c10: 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65 73 74    } {}.  do_test
5c20: 20 70 72 61 67 6d 61 2d 39 2e 36 20 7b 0a 20 20   pragma-9.6 {.  
5c30: 20 20 65 78 65 63 73 71 6c 20 7b 20 0a 20 20 20    execsql { .   
5c40: 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73     PRAGMA temp_s
5c50: 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 3b 0a  tore_directory;.
5c60: 20 20 20 20 7d 0a 20 20 7d 20 5b 6c 69 73 74 20      }.  } [list 
5c70: 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65  [file nativename
5c80: 20 5b 70 77 64 5d 5d 5d 0a 20 20 64 6f 5f 74 65   [pwd]]].  do_te
5c90: 73 74 20 70 72 61 67 6d 61 2d 39 2e 37 20 7b 0a  st pragma-9.7 {.
5ca0: 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b 20 0a      catchsql { .
5cb0: 20 20 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d        PRAGMA tem
5cc0: 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72  p_store_director
5cd0: 79 3d 27 2f 4e 4f 4e 2f 45 58 49 53 54 45 4e 54  y='/NON/EXISTENT
5ce0: 2f 50 41 54 48 2f 46 4f 4f 42 41 52 27 3b 0a 20  /PATH/FOOBAR';. 
5cf0: 20 20 20 7d 0a 20 20 7d 20 7b 31 20 7b 6e 6f 74     }.  } {1 {not
5d00: 20 61 20 77 72 69 74 61 62 6c 65 20 64 69 72 65   a writable dire
5d10: 63 74 6f 72 79 7d 7d 0a 20 20 64 6f 5f 74 65 73  ctory}}.  do_tes
5d20: 74 20 70 72 61 67 6d 61 2d 39 2e 38 20 7b 0a 20  t pragma-9.8 {. 
5d30: 20 20 20 65 78 65 63 73 71 6c 20 7b 20 0a 20 20     execsql { .  
5d40: 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f      PRAGMA temp_
5d50: 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 3d  store_directory=
5d60: 27 27 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 7d  '';.    }.  } {}
5d70: 0a 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78  .  if {![info ex
5d80: 69 73 74 73 20 54 45 4d 50 5f 53 54 4f 52 45 5d  ists TEMP_STORE]
5d90: 20 7c 7c 20 24 54 45 4d 50 5f 53 54 4f 52 45 3c   || $TEMP_STORE<
5da0: 3d 31 7d 20 7b 0a 20 20 20 20 69 66 63 61 70 61  =1} {.    ifcapa
5db0: 62 6c 65 20 74 65 6d 70 64 62 20 7b 0a 20 20 20  ble tempdb {.   
5dc0: 20 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d     do_test pragm
5dd0: 61 2d 39 2e 39 20 7b 0a 20 20 20 20 20 20 20 20  a-9.9 {.        
5de0: 65 78 65 63 73 71 6c 20 7b 20 0a 20 20 20 20 20  execsql { .     
5df0: 20 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70       PRAGMA temp
5e00: 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79  _store_directory
5e10: 3b 0a 20 20 20 20 20 20 20 20 20 20 50 52 41 47  ;.          PRAG
5e20: 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 3d 46 49  MA temp_store=FI
5e30: 4c 45 3b 0a 20 20 20 20 20 20 20 20 20 20 43 52  LE;.          CR
5e40: 45 41 54 45 20 54 45 4d 50 20 54 41 42 4c 45 20  EATE TEMP TABLE 
5e50: 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63  temp_store_direc
5e60: 74 6f 72 79 5f 74 65 73 74 28 61 20 69 6e 74 65  tory_test(a inte
5e70: 67 65 72 29 3b 0a 20 20 20 20 20 20 20 20 20 20  ger);.          
5e80: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 65 6d 70  INSERT INTO temp
5e90: 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79  _store_directory
5ea0: 5f 74 65 73 74 20 76 61 6c 75 65 73 20 28 32 29  _test values (2)
5eb0: 3b 0a 20 20 20 20 20 20 20 20 20 20 53 45 4c 45  ;.          SELE
5ec0: 43 54 20 2a 20 46 52 4f 4d 20 74 65 6d 70 5f 73  CT * FROM temp_s
5ed0: 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 5f 74  tore_directory_t
5ee0: 65 73 74 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  est;.        }. 
5ef0: 20 20 20 20 20 7d 20 7b 32 7d 0a 20 20 20 20 20       } {2}.     
5f00: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
5f10: 39 2e 31 30 20 7b 0a 20 20 20 20 20 20 20 20 63  9.10 {.        c
5f20: 61 74 63 68 73 71 6c 20 22 0a 20 20 20 20 20 20  atchsql ".      
5f30: 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f      PRAGMA temp_
5f40: 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 3d  store_directory=
5f50: 27 24 70 77 64 27 3b 0a 20 20 20 20 20 20 20 20  '$pwd';.        
5f60: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
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 3b 0a 20 20 20 20 20  tory_test;.     
5f90: 20 20 20 22 0a 20 20 20 20 20 20 7d 20 7b 31 20     ".      } {1 
5fa0: 7b 6e 6f 20 73 75 63 68 20 74 61 62 6c 65 3a 20  {no such table: 
5fb0: 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63  temp_store_direc
5fc0: 74 6f 72 79 5f 74 65 73 74 7d 7d 0a 20 20 20 20  tory_test}}.    
5fd0: 7d 0a 20 20 7d 0a 7d 0a 64 6f 5f 74 65 73 74 20  }.  }.}.do_test 
5fe0: 70 72 61 67 6d 61 2d 39 2e 31 31 20 7b 0a 20 20  pragma-9.11 {.  
5ff0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52  execsql {.    PR
6000: 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 20  AGMA temp_store 
6010: 3d 20 30 3b 0a 20 20 20 20 50 52 41 47 4d 41 20  = 0;.    PRAGMA 
6020: 74 65 6d 70 5f 73 74 6f 72 65 3b 0a 20 20 7d 0a  temp_store;.  }.
6030: 7d 20 7b 30 7d 0a 64 6f 5f 74 65 73 74 20 70 72  } {0}.do_test pr
6040: 61 67 6d 61 2d 39 2e 31 32 20 7b 0a 20 20 65 78  agma-9.12 {.  ex
6050: 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47  ecsql {.    PRAG
6060: 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 20 3d 20  MA temp_store = 
6070: 31 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 74 65  1;.    PRAGMA te
6080: 6d 70 5f 73 74 6f 72 65 3b 0a 20 20 7d 0a 7d 20  mp_store;.  }.} 
6090: 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67  {1}.do_test prag
60a0: 6d 61 2d 39 2e 31 33 20 7b 0a 20 20 65 78 65 63  ma-9.13 {.  exec
60b0: 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41  sql {.    PRAGMA
60c0: 20 74 65 6d 70 5f 73 74 6f 72 65 20 3d 20 32 3b   temp_store = 2;
60d0: 0a 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70  .    PRAGMA temp
60e0: 5f 73 74 6f 72 65 3b 0a 20 20 7d 0a 7d 20 7b 32  _store;.  }.} {2
60f0: 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  }.do_test pragma
6100: 2d 39 2e 31 34 20 7b 0a 20 20 65 78 65 63 73 71  -9.14 {.  execsq
6110: 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 74  l {.    PRAGMA t
6120: 65 6d 70 5f 73 74 6f 72 65 20 3d 20 33 3b 0a 20  emp_store = 3;. 
6130: 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73     PRAGMA temp_s
6140: 74 6f 72 65 3b 0a 20 20 7d 0a 7d 20 7b 30 7d 0a  tore;.  }.} {0}.
6150: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 39  do_test pragma-9
6160: 2e 31 35 20 7b 0a 20 20 63 61 74 63 68 73 71 6c  .15 {.  catchsql
6170: 20 7b 0a 20 20 20 20 42 45 47 49 4e 20 45 58 43   {.    BEGIN EXC
6180: 4c 55 53 49 56 45 3b 0a 20 20 20 20 43 52 45 41  LUSIVE;.    CREA
6190: 54 45 20 54 45 4d 50 20 54 41 42 4c 45 20 74 65  TE TEMP TABLE te
61a0: 6d 70 5f 74 61 62 6c 65 28 74 29 3b 0a 20 20 20  mp_table(t);.   
61b0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 65 6d   INSERT INTO tem
61c0: 70 5f 74 61 62 6c 65 20 56 41 4c 55 45 53 28 27  p_table VALUES('
61d0: 76 61 6c 75 61 62 6c 65 20 64 61 74 61 27 29 3b  valuable data');
61e0: 0a 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70  .    PRAGMA temp
61f0: 5f 73 74 6f 72 65 20 3d 20 31 3b 0a 20 20 7d 0a  _store = 1;.  }.
6200: 7d 20 7b 31 20 7b 74 65 6d 70 6f 72 61 72 79 20  } {1 {temporary 
6210: 73 74 6f 72 61 67 65 20 63 61 6e 6e 6f 74 20 62  storage cannot b
6220: 65 20 63 68 61 6e 67 65 64 20 66 72 6f 6d 20 77  e changed from w
6230: 69 74 68 69 6e 20 61 20 74 72 61 6e 73 61 63 74  ithin a transact
6240: 69 6f 6e 7d 7d 0a 64 6f 5f 74 65 73 74 20 70 72  ion}}.do_test pr
6250: 61 67 6d 61 2d 39 2e 31 36 20 7b 0a 20 20 65 78  agma-9.16 {.  ex
6260: 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45  ecsql {.    SELE
6270: 43 54 20 2a 20 46 52 4f 4d 20 74 65 6d 70 5f 74  CT * FROM temp_t
6280: 61 62 6c 65 3b 0a 20 20 20 20 43 4f 4d 4d 49 54  able;.    COMMIT
6290: 3b 0a 20 20 7d 0a 7d 20 7b 7b 76 61 6c 75 61 62  ;.  }.} {{valuab
62a0: 6c 65 20 64 61 74 61 7d 7d 0a 0a 64 6f 5f 74 65  le data}}..do_te
62b0: 73 74 20 70 72 61 67 6d 61 2d 39 2e 31 37 20 7b  st pragma-9.17 {
62c0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
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 20 49 49  valuable data II
6300: 27 29 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a  ');.    SELECT *
6310: 20 46 52 4f 4d 20 74 65 6d 70 5f 74 61 62 6c 65   FROM temp_table
6320: 3b 0a 20 20 7d 0a 7d 20 7b 7b 76 61 6c 75 61 62  ;.  }.} {{valuab
6330: 6c 65 20 64 61 74 61 7d 20 7b 76 61 6c 75 61 62  le data} {valuab
6340: 6c 65 20 64 61 74 61 20 49 49 7d 7d 0a 0a 64 6f  le data II}}..do
6350: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 39 2e 31  _test pragma-9.1
6360: 38 20 7b 0a 20 20 73 65 74 20 72 63 20 5b 63 61  8 {.  set rc [ca
6370: 74 63 68 20 7b 0a 20 20 20 20 64 62 20 65 76 61  tch {.    db eva
6380: 6c 20 7b 53 45 4c 45 43 54 20 74 20 46 52 4f 4d  l {SELECT t FROM
6390: 20 74 65 6d 70 5f 74 61 62 6c 65 7d 20 7b 0a 20   temp_table} {. 
63a0: 20 20 20 20 20 65 78 65 63 73 71 6c 20 7b 70 72       execsql {pr
63b0: 61 67 6d 61 20 74 65 6d 70 5f 73 74 6f 72 65 20  agma temp_store 
63c0: 3d 20 31 7d 0a 20 20 20 20 7d 0a 20 20 7d 20 6d  = 1}.    }.  } m
63d0: 73 67 5d 0a 20 20 6c 69 73 74 20 24 72 63 20 24  sg].  list $rc $
63e0: 6d 73 67 0a 7d 20 7b 31 20 7b 74 65 6d 70 6f 72  msg.} {1 {tempor
63f0: 61 72 79 20 73 74 6f 72 61 67 65 20 63 61 6e 6e  ary storage cann
6400: 6f 74 20 62 65 20 63 68 61 6e 67 65 64 20 66 72  ot be changed fr
6410: 6f 6d 20 77 69 74 68 69 6e 20 61 20 74 72 61 6e  om within a tran
6420: 73 61 63 74 69 6f 6e 7d 7d 0a 0a 7d 20 3b 23 20  saction}}..} ;# 
6430: 69 66 63 61 70 61 62 6c 65 20 70 61 67 65 72 5f  ifcapable pager_
6440: 70 72 61 67 6d 61 73 0a 0a 69 66 63 61 70 61 62  pragmas..ifcapab
6450: 6c 65 20 74 72 69 67 67 65 72 20 7b 0a 0a 64 6f  le trigger {..do
6460: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 30 2e  _test pragma-10.
6470: 30 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b  0 {.  catchsql {
6480: 0a 20 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20  .    DROP TABLE 
6490: 6d 61 69 6e 2e 74 31 3b 0a 20 20 7d 0a 20 20 65  main.t1;.  }.  e
64a0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41  xecsql {.    PRA
64b0: 47 4d 41 20 63 6f 75 6e 74 5f 63 68 61 6e 67 65  GMA count_change
64c0: 73 20 3d 20 31 3b 0a 0a 20 20 20 20 43 52 45 41  s = 1;..    CREA
64d0: 54 45 20 54 41 42 4c 45 20 74 31 28 61 20 50 52  TE TABLE t1(a PR
64e0: 49 4d 41 52 59 20 4b 45 59 29 3b 0a 20 20 20 20  IMARY KEY);.    
64f0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 5f  CREATE TABLE t1_
6500: 6d 69 72 72 6f 72 28 61 29 3b 0a 20 20 20 20 43  mirror(a);.    C
6510: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 5f 6d  REATE TABLE t1_m
6520: 69 72 72 6f 72 32 28 61 29 3b 0a 20 20 20 20 43  irror2(a);.    C
6530: 52 45 41 54 45 20 54 52 49 47 47 45 52 20 74 31  REATE TRIGGER t1
6540: 5f 62 69 20 42 45 46 4f 52 45 20 49 4e 53 45 52  _bi BEFORE INSER
6550: 54 20 4f 4e 20 74 31 20 42 45 47 49 4e 20 0a 20  T ON t1 BEGIN . 
6560: 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f       INSERT INTO
6570: 20 74 31 5f 6d 69 72 72 6f 72 20 56 41 4c 55 45   t1_mirror VALUE
6580: 53 28 6e 65 77 2e 61 29 3b 0a 20 20 20 20 45 4e  S(new.a);.    EN
6590: 44 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54 52  D;.    CREATE TR
65a0: 49 47 47 45 52 20 74 31 5f 61 69 20 41 46 54 45  IGGER t1_ai AFTE
65b0: 52 20 49 4e 53 45 52 54 20 4f 4e 20 74 31 20 42  R INSERT ON t1 B
65c0: 45 47 49 4e 20 0a 20 20 20 20 20 20 49 4e 53 45  EGIN .      INSE
65d0: 52 54 20 49 4e 54 4f 20 74 31 5f 6d 69 72 72 6f  RT INTO t1_mirro
65e0: 72 32 20 56 41 4c 55 45 53 28 6e 65 77 2e 61 29  r2 VALUES(new.a)
65f0: 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20 20 20 43  ;.    END;.    C
6600: 52 45 41 54 45 20 54 52 49 47 47 45 52 20 74 31  REATE TRIGGER t1
6610: 5f 62 75 20 42 45 46 4f 52 45 20 55 50 44 41 54  _bu BEFORE UPDAT
6620: 45 20 4f 4e 20 74 31 20 42 45 47 49 4e 20 0a 20  E ON t1 BEGIN . 
6630: 20 20 20 20 20 55 50 44 41 54 45 20 74 31 5f 6d       UPDATE t1_m
6640: 69 72 72 6f 72 20 53 45 54 20 61 20 3d 20 6e 65  irror SET a = ne
6650: 77 2e 61 20 57 48 45 52 45 20 61 20 3d 20 6f 6c  w.a WHERE a = ol
6660: 64 2e 61 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20  d.a;.    END;.  
6670: 20 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52    CREATE TRIGGER
6680: 20 74 31 5f 61 75 20 41 46 54 45 52 20 55 50 44   t1_au AFTER UPD
6690: 41 54 45 20 4f 4e 20 74 31 20 42 45 47 49 4e 20  ATE ON t1 BEGIN 
66a0: 0a 20 20 20 20 20 20 55 50 44 41 54 45 20 74 31  .      UPDATE t1
66b0: 5f 6d 69 72 72 6f 72 32 20 53 45 54 20 61 20 3d  _mirror2 SET a =
66c0: 20 6e 65 77 2e 61 20 57 48 45 52 45 20 61 20 3d   new.a WHERE a =
66d0: 20 6f 6c 64 2e 61 3b 0a 20 20 20 20 45 4e 44 3b   old.a;.    END;
66e0: 0a 20 20 20 20 43 52 45 41 54 45 20 54 52 49 47  .    CREATE TRIG
66f0: 47 45 52 20 74 31 5f 62 64 20 42 45 46 4f 52 45  GER t1_bd BEFORE
6700: 20 44 45 4c 45 54 45 20 4f 4e 20 74 31 20 42 45   DELETE ON t1 BE
6710: 47 49 4e 20 0a 20 20 20 20 20 20 44 45 4c 45 54  GIN .      DELET
6720: 45 20 46 52 4f 4d 20 74 31 5f 6d 69 72 72 6f 72  E FROM t1_mirror
6730: 20 57 48 45 52 45 20 61 20 3d 20 6f 6c 64 2e 61   WHERE a = old.a
6740: 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20 20 20 43  ;.    END;.    C
6750: 52 45 41 54 45 20 54 52 49 47 47 45 52 20 74 31  REATE TRIGGER t1
6760: 5f 61 64 20 41 46 54 45 52 20 44 45 4c 45 54 45  _ad AFTER DELETE
6770: 20 4f 4e 20 74 31 20 42 45 47 49 4e 20 0a 20 20   ON t1 BEGIN .  
6780: 20 20 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20      DELETE FROM 
6790: 74 31 5f 6d 69 72 72 6f 72 32 20 57 48 45 52 45  t1_mirror2 WHERE
67a0: 20 61 20 3d 20 6f 6c 64 2e 61 3b 0a 20 20 20 20   a = old.a;.    
67b0: 45 4e 44 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a 64  END;.  }.} {}..d
67c0: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 30  o_test pragma-10
67d0: 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .1 {.  execsql {
67e0: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
67f0: 20 74 31 20 56 41 4c 55 45 53 28 72 61 6e 64 73   t1 VALUES(rands
6800: 74 72 28 31 30 2c 31 30 29 29 3b 0a 20 20 7d 0a  tr(10,10));.  }.
6810: 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 70 72  } {1}.do_test pr
6820: 61 67 6d 61 2d 31 30 2e 32 20 7b 0a 20 20 65 78  agma-10.2 {.  ex
6830: 65 63 73 71 6c 20 7b 0a 20 20 20 20 55 50 44 41  ecsql {.    UPDA
6840: 54 45 20 74 31 20 53 45 54 20 61 20 3d 20 72 61  TE t1 SET a = ra
6850: 6e 64 73 74 72 28 31 30 2c 31 30 29 3b 0a 20 20  ndstr(10,10);.  
6860: 7d 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20  }.} {1}.do_test 
6870: 70 72 61 67 6d 61 2d 31 30 2e 33 20 7b 0a 20 20  pragma-10.3 {.  
6880: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 44 45  execsql {.    DE
6890: 4c 45 54 45 20 46 52 4f 4d 20 74 31 3b 0a 20 20  LETE FROM t1;.  
68a0: 7d 0a 7d 20 7b 31 7d 0a 0a 7d 20 3b 23 20 69 66  }.} {1}..} ;# if
68b0: 63 61 70 61 62 6c 65 20 74 72 69 67 67 65 72 0a  capable trigger.
68c0: 0a 69 66 63 61 70 61 62 6c 65 20 73 63 68 65 6d  .ifcapable schem
68d0: 61 5f 70 72 61 67 6d 61 73 20 7b 0a 20 20 64 6f  a_pragmas {.  do
68e0: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 31 2e  _test pragma-11.
68f0: 31 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 32  1 {.    execsql2
6900: 20 7b 0a 20 20 20 20 20 20 70 72 61 67 6d 61 20   {.      pragma 
6910: 63 6f 6c 6c 61 74 69 6f 6e 5f 6c 69 73 74 3b 0a  collation_list;.
6920: 20 20 20 20 7d 0a 20 20 7d 20 7b 73 65 71 20 30      }.  } {seq 0
6930: 20 6e 61 6d 65 20 4e 4f 43 41 53 45 20 73 65 71   name NOCASE seq
6940: 20 31 20 6e 61 6d 65 20 52 54 52 49 4d 20 73 65   1 name RTRIM se
6950: 71 20 32 20 6e 61 6d 65 20 42 49 4e 41 52 59 7d  q 2 name BINARY}
6960: 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .  do_test pragm
6970: 61 2d 31 31 2e 32 20 7b 0a 20 20 20 20 64 62 20  a-11.2 {.    db 
6980: 63 6f 6c 6c 61 74 65 20 4e 65 77 5f 43 6f 6c 6c  collate New_Coll
6990: 61 74 69 6f 6e 20 62 6c 61 68 2e 2e 2e 0a 20 20  ation blah....  
69a0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
69b0: 20 20 70 72 61 67 6d 61 20 63 6f 6c 6c 61 74 69    pragma collati
69c0: 6f 6e 5f 6c 69 73 74 3b 0a 20 20 20 20 7d 0a 20  on_list;.    }. 
69d0: 20 7d 20 7b 30 20 4e 65 77 5f 43 6f 6c 6c 61 74   } {0 New_Collat
69e0: 69 6f 6e 20 31 20 4e 4f 43 41 53 45 20 32 20 52  ion 1 NOCASE 2 R
69f0: 54 52 49 4d 20 33 20 42 49 4e 41 52 59 7d 0a 7d  TRIM 3 BINARY}.}
6a00: 0a 0a 69 66 63 61 70 61 62 6c 65 20 73 63 68 65  ..ifcapable sche
6a10: 6d 61 5f 70 72 61 67 6d 61 73 26 26 74 65 6d 70  ma_pragmas&&temp
6a20: 64 62 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 70  db {.  do_test p
6a30: 72 61 67 6d 61 2d 31 32 2e 31 20 7b 0a 20 20 20  ragma-12.1 {.   
6a40: 20 73 71 6c 69 74 65 33 20 64 62 32 20 74 65 73   sqlite3 db2 tes
6a50: 74 2e 64 62 0a 20 20 20 20 65 78 65 63 73 71 6c  t.db.    execsql
6a60: 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20   {.      PRAGMA 
6a70: 74 65 6d 70 2e 74 61 62 6c 65 5f 69 6e 66 6f 28  temp.table_info(
6a80: 27 61 62 63 27 29 3b 0a 20 20 20 20 7d 20 64 62  'abc');.    } db
6a90: 32 0a 20 20 7d 20 7b 7d 0a 20 20 64 62 32 20 63  2.  } {}.  db2 c
6aa0: 6c 6f 73 65 0a 0a 20 20 64 6f 5f 74 65 73 74 20  lose..  do_test 
6ab0: 70 72 61 67 6d 61 2d 31 32 2e 32 20 7b 0a 20 20  pragma-12.2 {.  
6ac0: 20 20 73 71 6c 69 74 65 33 20 64 62 32 20 74 65    sqlite3 db2 te
6ad0: 73 74 2e 64 62 0a 20 20 20 20 65 78 65 63 73 71  st.db.    execsq
6ae0: 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41  l {.      PRAGMA
6af0: 20 74 65 6d 70 2e 64 65 66 61 75 6c 74 5f 63 61   temp.default_ca
6b00: 63 68 65 5f 73 69 7a 65 20 3d 20 32 30 30 3b 0a  che_size = 200;.
6b10: 20 20 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d        PRAGMA tem
6b20: 70 2e 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f  p.default_cache_
6b30: 73 69 7a 65 3b 0a 20 20 20 20 7d 20 64 62 32 0a  size;.    } db2.
6b40: 20 20 7d 20 7b 32 30 30 7d 0a 20 20 64 62 32 20    } {200}.  db2 
6b50: 63 6c 6f 73 65 0a 0a 20 20 64 6f 5f 74 65 73 74  close..  do_test
6b60: 20 70 72 61 67 6d 61 2d 31 32 2e 33 20 7b 0a 20   pragma-12.3 {. 
6b70: 20 20 20 73 71 6c 69 74 65 33 20 64 62 32 20 74     sqlite3 db2 t
6b80: 65 73 74 2e 64 62 0a 20 20 20 20 65 78 65 63 73  est.db.    execs
6b90: 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d  ql {.      PRAGM
6ba0: 41 20 74 65 6d 70 2e 63 61 63 68 65 5f 73 69 7a  A temp.cache_siz
6bb0: 65 20 3d 20 34 30 30 3b 0a 20 20 20 20 20 20 50  e = 400;.      P
6bc0: 52 41 47 4d 41 20 74 65 6d 70 2e 63 61 63 68 65  RAGMA temp.cache
6bd0: 5f 73 69 7a 65 3b 0a 20 20 20 20 7d 20 64 62 32  _size;.    } db2
6be0: 0a 20 20 7d 20 7b 34 30 30 7d 0a 20 20 64 62 32  .  } {400}.  db2
6bf0: 20 63 6c 6f 73 65 0a 7d 0a 0a 69 66 63 61 70 61   close.}..ifcapa
6c00: 62 6c 65 20 62 6c 6f 62 6c 69 74 20 7b 0a 0a 64  ble bloblit {..d
6c10: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 33  o_test pragma-13
6c20: 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .1 {.  execsql {
6c30: 0a 20 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20  .    DROP TABLE 
6c40: 49 46 20 45 58 49 53 54 53 20 74 34 3b 0a 20 20  IF EXISTS t4;.  
6c50: 20 20 50 52 41 47 4d 41 20 76 64 62 65 5f 74 72    PRAGMA vdbe_tr
6c60: 61 63 65 3d 6f 6e 3b 0a 20 20 20 20 50 52 41 47  ace=on;.    PRAG
6c70: 4d 41 20 76 64 62 65 5f 6c 69 73 74 69 6e 67 3d  MA vdbe_listing=
6c80: 6f 6e 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 73  on;.    PRAGMA s
6c90: 71 6c 5f 74 72 61 63 65 3d 6f 6e 3b 0a 20 20 20  ql_trace=on;.   
6ca0: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 34   CREATE TABLE t4
6cb0: 28 61 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41  (a INTEGER PRIMA
6cc0: 52 59 20 4b 45 59 2c 62 29 3b 0a 20 20 20 20 49  RY KEY,b);.    I
6cd0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 34 28 62 29  NSERT INTO t4(b)
6ce0: 20 56 41 4c 55 45 53 28 78 27 30 31 32 33 34 35   VALUES(x'012345
6cf0: 36 37 38 39 61 62 63 64 65 66 30 31 32 33 34 35  6789abcdef012345
6d00: 36 37 38 39 61 62 63 64 65 66 30 31 32 33 34 35  6789abcdef012345
6d10: 36 37 38 39 27 29 3b 0a 20 20 20 20 49 4e 53 45  6789');.    INSE
6d20: 52 54 20 49 4e 54 4f 20 74 34 28 62 29 20 56 41  RT INTO t4(b) VA
6d30: 4c 55 45 53 28 72 61 6e 64 73 74 72 28 33 30 2c  LUES(randstr(30,
6d40: 33 30 29 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  30));.    INSERT
6d50: 20 49 4e 54 4f 20 74 34 28 62 29 20 56 41 4c 55   INTO t4(b) VALU
6d60: 45 53 28 31 2e 32 33 34 35 36 29 3b 0a 20 20 20  ES(1.23456);.   
6d70: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 34 28   INSERT INTO t4(
6d80: 62 29 20 56 41 4c 55 45 53 28 4e 55 4c 4c 29 3b  b) VALUES(NULL);
6d90: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
6da0: 20 74 34 28 62 29 20 56 41 4c 55 45 53 28 30 29   t4(b) VALUES(0)
6db0: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
6dc0: 4f 20 74 34 28 62 29 20 53 45 4c 45 43 54 20 62  O t4(b) SELECT b
6dd0: 7c 7c 62 7c 7c 62 7c 7c 62 20 46 52 4f 4d 20 74  ||b||b||b FROM t
6de0: 34 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20  4;.    SELECT * 
6df0: 46 52 4f 4d 20 74 34 3b 0a 20 20 7d 0a 20 20 65  FROM t4;.  }.  e
6e00: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41  xecsql {.    PRA
6e10: 47 4d 41 20 76 64 62 65 5f 74 72 61 63 65 3d 6f  GMA vdbe_trace=o
6e20: 66 66 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 76  ff;.    PRAGMA v
6e30: 64 62 65 5f 6c 69 73 74 69 6e 67 3d 6f 66 66 3b  dbe_listing=off;
6e40: 0a 20 20 20 20 50 52 41 47 4d 41 20 73 71 6c 5f  .    PRAGMA sql_
6e50: 74 72 61 63 65 3d 6f 66 66 3b 0a 20 20 7d 0a 7d  trace=off;.  }.}
6e60: 20 7b 7d 0a 0a 7d 20 3b 23 20 69 66 63 61 70 61   {}..} ;# ifcapa
6e70: 62 6c 65 20 62 6c 6f 62 6c 69 74 20 0a 0a 69 66  ble bloblit ..if
6e80: 63 61 70 61 62 6c 65 20 70 61 67 65 72 5f 70 72  capable pager_pr
6e90: 61 67 6d 61 73 20 7b 0a 20 20 64 62 20 63 6c 6f  agmas {.  db clo
6ea0: 73 65 0a 20 20 66 69 6c 65 20 64 65 6c 65 74 65  se.  file delete
6eb0: 20 2d 66 6f 72 63 65 20 74 65 73 74 2e 64 62 0a   -force test.db.
6ec0: 20 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73    sqlite3 db tes
6ed0: 74 2e 64 62 0a 0a 20 20 64 6f 5f 74 65 73 74 20  t.db..  do_test 
6ee0: 70 72 61 67 6d 61 2d 31 34 2e 31 20 7b 0a 20 20  pragma-14.1 {.  
6ef0: 20 20 65 78 65 63 73 71 6c 20 7b 20 70 72 61 67    execsql { prag
6f00: 6d 61 20 61 75 74 6f 5f 76 61 63 75 75 6d 20 3d  ma auto_vacuum =
6f10: 20 30 20 7d 0a 20 20 20 20 65 78 65 63 73 71 6c   0 }.    execsql
6f20: 20 7b 20 70 72 61 67 6d 61 20 70 61 67 65 5f 63   { pragma page_c
6f30: 6f 75 6e 74 20 7d 0a 20 20 7d 20 7b 30 7d 0a 0a  ount }.  } {0}..
6f40: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
6f50: 2d 31 34 2e 32 20 7b 0a 20 20 20 20 65 78 65 63  -14.2 {.    exec
6f60: 73 71 6c 20 7b 20 0a 20 20 20 20 20 20 43 52 45  sql { .      CRE
6f70: 41 54 45 20 54 41 42 4c 45 20 61 62 63 28 61 2c  ATE TABLE abc(a,
6f80: 20 62 2c 20 63 29 3b 0a 20 20 20 20 20 20 50 52   b, c);.      PR
6f90: 41 47 4d 41 20 70 61 67 65 5f 63 6f 75 6e 74 3b  AGMA page_count;
6fa0: 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 32 7d 0a 0a  .    }.  } {2}..
6fb0: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
6fc0: 2d 31 34 2e 33 20 7b 0a 20 20 20 20 65 78 65 63  -14.3 {.    exec
6fd0: 73 71 6c 20 7b 20 0a 20 20 20 20 20 20 42 45 47  sql { .      BEG
6fe0: 49 4e 3b 0a 20 20 20 20 20 20 43 52 45 41 54 45  IN;.      CREATE
6ff0: 20 54 41 42 4c 45 20 64 65 66 28 61 2c 20 62 2c   TABLE def(a, b,
7000: 20 63 29 3b 0a 20 20 20 20 20 20 50 52 41 47 4d   c);.      PRAGM
7010: 41 20 70 61 67 65 5f 63 6f 75 6e 74 3b 0a 20 20  A page_count;.  
7020: 20 20 7d 0a 20 20 7d 20 7b 33 7d 0a 0a 20 20 64    }.  } {3}..  d
7030: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 34  o_test pragma-14
7040: 2e 34 20 7b 0a 20 20 20 20 73 65 74 20 70 61 67  .4 {.    set pag
7050: 65 5f 73 69 7a 65 20 5b 64 62 20 6f 6e 65 20 7b  e_size [db one {
7060: 70 72 61 67 6d 61 20 70 61 67 65 5f 73 69 7a 65  pragma page_size
7070: 7d 5d 0a 20 20 20 20 65 78 70 72 20 5b 66 69 6c  }].    expr [fil
7080: 65 20 73 69 7a 65 20 74 65 73 74 2e 64 62 5d 20  e size test.db] 
7090: 2f 20 24 70 61 67 65 5f 73 69 7a 65 0a 20 20 7d  / $page_size.  }
70a0: 20 7b 32 7d 0a 0a 20 20 64 6f 5f 74 65 73 74 20   {2}..  do_test 
70b0: 70 72 61 67 6d 61 2d 31 34 2e 35 20 7b 0a 20 20  pragma-14.5 {.  
70c0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
70d0: 20 20 52 4f 4c 4c 42 41 43 4b 3b 0a 20 20 20 20    ROLLBACK;.    
70e0: 20 20 50 52 41 47 4d 41 20 70 61 67 65 5f 63 6f    PRAGMA page_co
70f0: 75 6e 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b  unt;.    }.  } {
7100: 32 7d 0a 0a 20 20 64 6f 5f 74 65 73 74 20 70 72  2}..  do_test pr
7110: 61 67 6d 61 2d 31 34 2e 36 20 7b 0a 20 20 20 20  agma-14.6 {.    
7120: 66 69 6c 65 20 64 65 6c 65 74 65 20 2d 66 6f 72  file delete -for
7130: 63 65 20 74 65 73 74 32 2e 64 62 0a 20 20 20 20  ce test2.db.    
7140: 73 71 6c 69 74 65 33 20 64 62 32 20 74 65 73 74  sqlite3 db2 test
7150: 32 2e 64 62 0a 20 20 20 20 65 78 65 63 73 71 6c  2.db.    execsql
7160: 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20   {.      PRAGMA 
7170: 61 75 74 6f 5f 76 61 63 75 75 6d 20 3d 20 30 3b  auto_vacuum = 0;
7180: 0a 20 20 20 20 20 20 43 52 45 41 54 45 20 54 41  .      CREATE TA
7190: 42 4c 45 20 74 31 28 61 2c 20 62 2c 20 63 29 3b  BLE t1(a, b, c);
71a0: 0a 20 20 20 20 20 20 43 52 45 41 54 45 20 54 41  .      CREATE TA
71b0: 42 4c 45 20 74 32 28 61 2c 20 62 2c 20 63 29 3b  BLE t2(a, b, c);
71c0: 0a 20 20 20 20 20 20 43 52 45 41 54 45 20 54 41  .      CREATE TA
71d0: 42 4c 45 20 74 33 28 61 2c 20 62 2c 20 63 29 3b  BLE t3(a, b, c);
71e0: 0a 20 20 20 20 20 20 43 52 45 41 54 45 20 54 41  .      CREATE TA
71f0: 42 4c 45 20 74 34 28 61 2c 20 62 2c 20 63 29 3b  BLE t4(a, b, c);
7200: 0a 20 20 20 20 7d 20 64 62 32 0a 20 20 20 20 64  .    } db2.    d
7210: 62 32 20 63 6c 6f 73 65 0a 20 20 20 20 65 78 65  b2 close.    exe
7220: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 41 54 54  csql {.      ATT
7230: 41 43 48 20 27 74 65 73 74 32 2e 64 62 27 20 41  ACH 'test2.db' A
7240: 53 20 61 75 78 3b 0a 20 20 20 20 20 20 50 52 41  S aux;.      PRA
7250: 47 4d 41 20 61 75 78 2e 70 61 67 65 5f 63 6f 75  GMA aux.page_cou
7260: 6e 74 3b 0a 20 20 20 20 7d 20 0a 20 20 7d 20 7b  nt;.    } .  } {
7270: 35 7d 0a 7d 0a 0a 23 20 54 65 73 74 20 74 68 61  5}.}..# Test tha
7280: 74 20 74 68 65 20 76 61 6c 75 65 20 73 65 74 20  t the value set 
7290: 75 73 69 6e 67 20 74 68 65 20 63 61 63 68 65 5f  using the cache_
72a0: 73 69 7a 65 20 70 72 61 67 6d 61 20 69 73 20 6e  size pragma is n
72b0: 6f 74 20 72 65 73 65 74 20 77 68 65 6e 20 74 68  ot reset when th
72c0: 65 0a 23 20 73 63 68 65 6d 61 20 69 73 20 72 65  e.# schema is re
72d0: 6c 6f 61 64 65 64 2e 0a 23 0a 69 66 63 61 70 61  loaded..#.ifcapa
72e0: 62 6c 65 20 70 61 67 65 72 5f 70 72 61 67 6d 61  ble pager_pragma
72f0: 73 20 7b 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20  s {.  db close. 
7300: 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74   sqlite3 db test
7310: 2e 64 62 0a 20 20 64 6f 5f 74 65 73 74 20 70 72  .db.  do_test pr
7320: 61 67 6d 61 2d 31 35 2e 31 20 7b 0a 20 20 20 20  agma-15.1 {.    
7330: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
7340: 50 52 41 47 4d 41 20 63 61 63 68 65 5f 73 69 7a  PRAGMA cache_siz
7350: 65 3d 35 39 3b 0a 20 20 20 20 20 20 50 52 41 47  e=59;.      PRAG
7360: 4d 41 20 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20  MA cache_size;. 
7370: 20 20 20 7d 0a 20 20 7d 20 7b 35 39 7d 0a 20 20     }.  } {59}.  
7380: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31  do_test pragma-1
7390: 35 2e 32 20 7b 0a 20 20 20 20 73 71 6c 69 74 65  5.2 {.    sqlite
73a0: 33 20 64 62 32 20 74 65 73 74 2e 64 62 0a 20 20  3 db2 test.db.  
73b0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
73c0: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 6e    CREATE TABLE n
73d0: 65 77 74 61 62 6c 65 28 61 2c 20 62 2c 20 63 29  ewtable(a, b, c)
73e0: 3b 0a 20 20 20 20 7d 20 64 62 32 0a 20 20 20 20  ;.    } db2.    
73f0: 64 62 32 20 63 6c 6f 73 65 0a 20 20 7d 20 7b 7d  db2 close.  } {}
7400: 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .  do_test pragm
7410: 61 2d 31 35 2e 33 20 7b 0a 20 20 20 20 23 20 45  a-15.3 {.    # E
7420: 76 61 6c 75 61 74 69 6e 67 20 74 68 69 73 20 73  valuating this s
7430: 74 61 74 65 6d 65 6e 74 20 77 69 6c 6c 20 63 61  tatement will ca
7440: 75 73 65 20 74 68 65 20 73 63 68 65 6d 61 20 74  use the schema t
7450: 6f 20 62 65 20 72 65 6c 6f 61 64 65 64 20 28 62  o be reloaded (b
7460: 65 63 61 75 73 65 0a 20 20 20 20 23 20 74 68 65  ecause.    # the
7470: 20 73 63 68 65 6d 61 20 77 61 73 20 63 68 61 6e   schema was chan
7480: 67 65 64 20 62 79 20 61 6e 6f 74 68 65 72 20 63  ged by another c
7490: 6f 6e 6e 65 63 74 69 6f 6e 20 69 6e 20 70 72 61  onnection in pra
74a0: 67 6d 61 2d 31 35 2e 32 29 2e 20 41 74 20 6f 6e  gma-15.2). At on
74b0: 65 0a 20 20 20 20 23 20 70 6f 69 6e 74 20 74 68  e.    # point th
74c0: 65 72 65 20 77 61 73 20 61 20 62 75 67 20 74 68  ere was a bug th
74d0: 61 74 20 72 65 73 65 74 20 74 68 65 20 63 61 63  at reset the cac
74e0: 68 65 5f 73 69 7a 65 20 74 6f 20 69 74 73 20 64  he_size to its d
74f0: 65 66 61 75 6c 74 20 76 61 6c 75 65 0a 20 20 20  efault value.   
7500: 20 23 20 77 68 65 6e 20 74 68 69 73 20 68 61 70   # when this hap
7510: 70 65 6e 65 64 2e 20 0a 20 20 20 20 65 78 65 63  pened. .    exec
7520: 73 71 6c 20 7b 20 53 45 4c 45 43 54 20 2a 20 46  sql { SELECT * F
7530: 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
7540: 72 20 7d 0a 20 20 20 20 65 78 65 63 73 71 6c 20  r }.    execsql 
7550: 7b 20 50 52 41 47 4d 41 20 63 61 63 68 65 5f 73  { PRAGMA cache_s
7560: 69 7a 65 20 7d 0a 20 20 7d 20 7b 35 39 7d 0a 7d  ize }.  } {59}.}
7570: 0a 0a 23 20 52 65 73 65 74 20 74 68 65 20 73 71  ..# Reset the sq
7580: 6c 69 74 65 33 5f 74 65 6d 70 5f 64 69 72 65 63  lite3_temp_direc
7590: 74 6f 72 79 20 76 61 72 69 61 62 6c 65 20 66 6f  tory variable fo
75a0: 72 20 74 68 65 20 6e 65 78 74 20 72 75 6e 20 6f  r the next run o
75b0: 66 20 74 65 73 74 73 3a 0a 73 71 6c 69 74 65 33  f tests:.sqlite3
75c0: 20 64 62 58 20 3a 6d 65 6d 6f 72 79 3a 0a 64 62   dbX :memory:.db
75d0: 58 20 65 76 61 6c 20 7b 50 52 41 47 4d 41 20 74  X eval {PRAGMA t
75e0: 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74  emp_store_direct
75f0: 6f 72 79 20 3d 20 22 22 7d 0a 64 62 58 20 63 6c  ory = ""}.dbX cl
7600: 6f 73 65 0a 0a 69 66 63 61 70 61 62 6c 65 20 6c  ose..ifcapable l
7610: 6f 63 6b 5f 70 72 6f 78 79 5f 70 72 61 67 6d 61  ock_proxy_pragma
7620: 73 26 26 70 72 65 66 65 72 5f 70 72 6f 78 79 5f  s&&prefer_proxy_
7630: 6c 6f 63 6b 69 6e 67 20 7b 0a 20 20 73 65 74 20  locking {.  set 
7640: 73 71 6c 69 74 65 5f 68 6f 73 74 69 64 5f 6e 75  sqlite_hostid_nu
7650: 6d 20 31 0a 0a 20 20 73 65 74 20 75 73 69 6e 67  m 1..  set using
7660: 5f 70 72 6f 78 79 20 30 0a 20 20 66 6f 72 65 61  _proxy 0.  forea
7670: 63 68 20 7b 6e 61 6d 65 20 76 61 6c 75 65 7d 20  ch {name value} 
7680: 5b 61 72 72 61 79 20 67 65 74 20 65 6e 76 20 53  [array get env S
7690: 51 4c 49 54 45 5f 46 4f 52 43 45 5f 50 52 4f 58  QLITE_FORCE_PROX
76a0: 59 5f 4c 4f 43 4b 49 4e 47 5d 20 7b 0a 20 20 20  Y_LOCKING] {.   
76b0: 20 73 65 74 20 75 73 69 6e 67 5f 70 72 6f 78 79   set using_proxy
76c0: 20 24 76 61 6c 75 65 0a 20 20 7d 0a 0a 20 20 23   $value.  }..  #
76d0: 20 54 65 73 74 20 74 68 65 20 6c 6f 63 6b 5f 70   Test the lock_p
76e0: 72 6f 78 79 5f 66 69 6c 65 20 70 72 61 67 6d 61  roxy_file pragma
76f0: 73 2e 0a 20 20 23 0a 20 20 64 62 20 63 6c 6f 73  s..  #.  db clos
7700: 65 0a 20 20 73 65 74 20 65 6e 76 28 53 51 4c 49  e.  set env(SQLI
7710: 54 45 5f 46 4f 52 43 45 5f 50 52 4f 58 59 5f 4c  TE_FORCE_PROXY_L
7720: 4f 43 4b 49 4e 47 29 20 22 30 22 0a 0a 20 20 73  OCKING) "0"..  s
7730: 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64  qlite3 db test.d
7740: 62 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67  b.  do_test prag
7750: 6d 61 2d 31 36 2e 31 20 7b 0a 20 20 20 20 65 78  ma-16.1 {.    ex
7760: 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52  ecsql {.      PR
7770: 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f  AGMA lock_proxy_
7780: 66 69 6c 65 3d 22 6d 79 6c 69 74 74 6c 65 70 72  file="mylittlepr
7790: 6f 78 79 22 3b 0a 20 20 20 20 20 20 73 65 6c 65  oxy";.      sele
77a0: 63 74 20 2a 20 66 72 6f 6d 20 73 71 6c 69 74 65  ct * from sqlite
77b0: 5f 6d 61 73 74 65 72 3b 0a 20 20 20 20 7d 0a 20  _master;.    }. 
77c0: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
77d0: 20 20 20 50 52 41 47 4d 41 20 6c 6f 63 6b 5f 70     PRAGMA lock_p
77e0: 72 6f 78 79 5f 66 69 6c 65 3b 0a 20 20 20 20 7d  roxy_file;.    }
77f0: 20 0a 20 20 7d 20 7b 6d 79 6c 69 74 74 6c 65 70   .  } {mylittlep
7800: 72 6f 78 79 7d 0a 0a 20 20 64 6f 5f 74 65 73 74  roxy}..  do_test
7810: 20 70 72 61 67 6d 61 2d 31 36 2e 32 20 7b 0a 20   pragma-16.2 {. 
7820: 20 20 20 73 71 6c 69 74 65 33 20 64 62 32 20 74     sqlite3 db2 t
7830: 65 73 74 2e 64 62 0a 20 20 20 20 65 78 65 63 73  est.db.    execs
7840: 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d  ql {.      PRAGM
7850: 41 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c  A lock_proxy_fil
7860: 65 3d 22 6d 79 6c 69 74 74 6c 65 70 72 6f 78 79  e="mylittleproxy
7870: 22 3b 0a 20 20 20 20 7d 20 64 62 32 0a 20 20 7d  ";.    } db2.  }
7880: 20 7b 7d 0a 0a 20 20 64 62 32 20 63 6c 6f 73 65   {}..  db2 close
7890: 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .  do_test pragm
78a0: 61 2d 31 36 2e 32 2e 31 20 7b 0a 20 20 20 20 73  a-16.2.1 {.    s
78b0: 71 6c 69 74 65 33 20 64 62 32 20 74 65 73 74 2e  qlite3 db2 test.
78c0: 64 62 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b  db.    execsql {
78d0: 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 6c 6f  .      PRAGMA lo
78e0: 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 3d 22 3a  ck_proxy_file=":
78f0: 61 75 74 6f 3a 22 3b 0a 20 20 20 20 20 20 73 65  auto:";.      se
7900: 6c 65 63 74 20 2a 20 66 72 6f 6d 20 73 71 6c 69  lect * from sqli
7910: 74 65 5f 6d 61 73 74 65 72 3b 0a 20 20 20 20 7d  te_master;.    }
7920: 20 64 62 32 0a 20 20 20 20 65 78 65 63 73 71 6c   db2.    execsql
7930: 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20   {.      PRAGMA 
7940: 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 3b  lock_proxy_file;
7950: 0a 20 20 20 20 7d 20 64 62 32 0a 20 20 7d 20 7b  .    } db2.  } {
7960: 6d 79 6c 69 74 74 6c 65 70 72 6f 78 79 7d 0a 0a  mylittleproxy}..
7970: 20 20 64 62 32 20 63 6c 6f 73 65 0a 20 20 64 6f    db2 close.  do
7980: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 36 2e  _test pragma-16.
7990: 33 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 20  3 {.    sqlite3 
79a0: 64 62 32 20 74 65 73 74 2e 64 62 0a 20 20 20 20  db2 test.db.    
79b0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
79c0: 50 52 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78  PRAGMA lock_prox
79d0: 79 5f 66 69 6c 65 3d 22 6d 79 6f 74 68 65 72 70  y_file="myotherp
79e0: 72 6f 78 79 22 3b 0a 20 20 20 20 7d 20 64 62 32  roxy";.    } db2
79f0: 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b 0a  .    catchsql {.
7a00: 20 20 20 20 20 20 73 65 6c 65 63 74 20 2a 20 66        select * f
7a10: 72 6f 6d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  rom sqlite_maste
7a20: 72 3b 0a 20 20 20 20 7d 20 64 62 32 0a 20 20 7d  r;.    } db2.  }
7a30: 20 7b 31 20 7b 64 61 74 61 62 61 73 65 20 69 73   {1 {database is
7a40: 20 6c 6f 63 6b 65 64 7d 7d 0a 0a 20 20 64 6f 5f   locked}}..  do_
7a50: 74 65 73 74 20 70 72 61 67 6d 61 2d 31 36 2e 34  test pragma-16.4
7a60: 20 7b 0a 20 20 20 20 64 62 32 20 63 6c 6f 73 65   {.    db2 close
7a70: 0a 20 20 20 20 64 62 20 63 6c 6f 73 65 0a 20 20  .    db close.  
7a80: 20 20 73 71 6c 69 74 65 33 20 64 62 32 20 74 65    sqlite3 db2 te
7a90: 73 74 2e 64 62 0a 20 20 20 20 65 78 65 63 73 71  st.db.    execsq
7aa0: 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41  l {.      PRAGMA
7ab0: 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65   lock_proxy_file
7ac0: 3d 22 6d 79 6f 72 69 67 69 6e 61 6c 70 72 6f 78  ="myoriginalprox
7ad0: 79 22 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41  y";.      PRAGMA
7ae0: 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65   lock_proxy_file
7af0: 3d 22 6d 79 6f 74 68 65 72 70 72 6f 78 79 22 3b  ="myotherproxy";
7b00: 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 6c 6f  .      PRAGMA lo
7b10: 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 3b 0a 20  ck_proxy_file;. 
7b20: 20 20 20 7d 20 64 62 32 0a 20 20 7d 20 7b 6d 79     } db2.  } {my
7b30: 6f 74 68 65 72 70 72 6f 78 79 7d 0a 0a 20 20 64  otherproxy}..  d
7b40: 62 32 20 63 6c 6f 73 65 0a 20 20 73 65 74 20 65  b2 close.  set e
7b50: 6e 76 28 53 51 4c 49 54 45 5f 46 4f 52 43 45 5f  nv(SQLITE_FORCE_
7b60: 50 52 4f 58 59 5f 4c 4f 43 4b 49 4e 47 29 20 22  PROXY_LOCKING) "
7b70: 31 22 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61  1".  do_test pra
7b80: 67 6d 61 2d 31 36 2e 35 20 7b 0a 20 20 20 20 73  gma-16.5 {.    s
7b90: 71 6c 69 74 65 33 20 64 62 32 20 74 65 73 74 2e  qlite3 db2 test.
7ba0: 64 62 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b  db.    execsql {
7bb0: 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 6c 6f  .      PRAGMA lo
7bc0: 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 3d 22 3a  ck_proxy_file=":
7bd0: 61 75 74 6f 3a 22 3b 0a 20 20 20 20 20 20 50 52  auto:";.      PR
7be0: 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f  AGMA lock_proxy_
7bf0: 66 69 6c 65 3b 0a 20 20 20 20 7d 20 64 62 32 0a  file;.    } db2.
7c00: 20 20 7d 20 7b 6d 79 6f 74 68 65 72 70 72 6f 78    } {myotherprox
7c10: 79 7d 0a 20 20 0a 20 20 64 6f 5f 74 65 73 74 20  y}.  .  do_test 
7c20: 70 72 61 67 6d 61 2d 31 36 2e 36 20 7b 0a 20 20  pragma-16.6 {.  
7c30: 20 20 64 62 32 20 63 6c 6f 73 65 0a 20 20 20 20    db2 close.    
7c40: 73 71 6c 69 74 65 33 20 64 62 32 20 74 65 73 74  sqlite3 db2 test
7c50: 32 2e 64 62 0a 20 20 20 20 73 65 74 20 6c 6f 63  2.db.    set loc
7c60: 6b 70 61 74 68 20 5b 65 78 65 63 73 71 6c 20 7b  kpath [execsql {
7c70: 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 6c 6f  .      PRAGMA lo
7c80: 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 3d 22 3a  ck_proxy_file=":
7c90: 61 75 74 6f 3a 22 3b 0a 20 20 20 20 20 20 50 52  auto:";.      PR
7ca0: 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f  AGMA lock_proxy_
7cb0: 66 69 6c 65 3b 0a 20 20 20 20 7d 20 64 62 32 5d  file;.    } db2]
7cc0: 0a 20 20 20 20 73 74 72 69 6e 67 20 6d 61 74 63  .    string matc
7cd0: 68 20 22 2a 74 65 73 74 32 2e 64 62 3a 61 75 74  h "*test2.db:aut
7ce0: 6f 3a 22 20 24 6c 6f 63 6b 70 61 74 68 0a 20 20  o:" $lockpath.  
7cf0: 7d 20 7b 31 7d 0a 20 20 0a 20 20 73 65 74 20 73  } {1}.  .  set s
7d00: 71 6c 69 74 65 5f 68 6f 73 74 69 64 5f 6e 75 6d  qlite_hostid_num
7d10: 20 32 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61   2.  do_test pra
7d20: 67 6d 61 2d 31 36 2e 37 20 7b 0a 20 20 20 20 73  gma-16.7 {.    s
7d30: 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 32 2e  qlite3 db test2.
7d40: 64 62 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b  db.    execsql {
7d50: 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 6c 6f  .      PRAGMA lo
7d60: 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 3d 22 3a  ck_proxy_file=":
7d70: 61 75 74 6f 3a 22 3b 0a 20 20 20 20 7d 20 0a 20  auto:";.    } . 
7d80: 20 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20     catchsql {.  
7d90: 20 20 20 20 73 65 6c 65 63 74 20 2a 20 66 72 6f      select * fro
7da0: 6d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 3b  m sqlite_master;
7db0: 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 31 20 7b 64  .    }.  } {1 {d
7dc0: 61 74 61 62 61 73 65 20 69 73 20 6c 6f 63 6b 65  atabase is locke
7dd0: 64 7d 7d 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20  d}}.  db close. 
7de0: 20 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67   .  do_test prag
7df0: 6d 61 2d 31 36 2e 38 20 7b 0a 20 20 20 20 73 71  ma-16.8 {.    sq
7e00: 6c 69 74 65 33 20 64 62 20 74 65 73 74 32 2e 64  lite3 db test2.d
7e10: 62 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b  b.    catchsql {
7e20: 0a 20 20 20 20 20 20 73 65 6c 65 63 74 20 2a 20  .      select * 
7e30: 66 72 6f 6d 20 73 71 6c 69 74 65 5f 6d 61 73 74  from sqlite_mast
7e40: 65 72 3b 0a 20 20 20 20 7d 20 0a 20 20 7d 20 7b  er;.    } .  } {
7e50: 31 20 7b 64 61 74 61 62 61 73 65 20 69 73 20 6c  1 {database is l
7e60: 6f 63 6b 65 64 7d 7d 0a 0a 20 20 64 62 32 20 63  ocked}}..  db2 c
7e70: 6c 6f 73 65 0a 20 20 64 6f 5f 74 65 73 74 20 70  lose.  do_test p
7e80: 72 61 67 6d 61 2d 31 36 2e 38 2e 31 20 7b 0a 20  ragma-16.8.1 {. 
7e90: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
7ea0: 20 20 20 50 52 41 47 4d 41 20 6c 6f 63 6b 5f 70     PRAGMA lock_p
7eb0: 72 6f 78 79 5f 66 69 6c 65 3d 22 79 65 74 61 6e  roxy_file="yetan
7ec0: 6f 74 68 65 72 70 72 6f 78 79 22 3b 0a 20 20 20  otherproxy";.   
7ed0: 20 20 20 50 52 41 47 4d 41 20 6c 6f 63 6b 5f 70     PRAGMA lock_p
7ee0: 72 6f 78 79 5f 66 69 6c 65 3b 0a 20 20 20 20 7d  roxy_file;.    }
7ef0: 20 0a 20 20 7d 20 7b 79 65 74 61 6e 6f 74 68 65   .  } {yetanothe
7f00: 72 70 72 6f 78 79 7d 0a 20 20 64 6f 5f 74 65 73  rproxy}.  do_tes
7f10: 74 20 70 72 61 67 6d 61 2d 31 36 2e 38 2e 32 20  t pragma-16.8.2 
7f20: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a  {.    execsql {.
7f30: 20 20 20 20 20 20 63 72 65 61 74 65 20 74 61 62        create tab
7f40: 6c 65 20 6d 69 6e 65 28 78 29 3b 0a 20 20 20 20  le mine(x);.    
7f50: 7d 20 0a 20 20 7d 20 7b 7d 0a 0a 20 20 64 62 20  } .  } {}..  db 
7f60: 63 6c 6f 73 65 0a 20 20 64 6f 5f 74 65 73 74 20  close.  do_test 
7f70: 70 72 61 67 6d 61 2d 31 36 2e 39 20 7b 0a 20 20  pragma-16.9 {.  
7f80: 20 20 73 71 6c 69 74 65 33 20 64 62 20 70 72 6f    sqlite3 db pro
7f90: 78 79 74 65 73 74 2e 64 62 0a 20 20 20 20 73 65  xytest.db.    se
7fa0: 74 20 6c 6f 63 6b 70 61 74 68 32 20 5b 65 78 65  t lockpath2 [exe
7fb0: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41  csql {.      PRA
7fc0: 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66  GMA lock_proxy_f
7fd0: 69 6c 65 3d 22 3a 61 75 74 6f 3a 22 3b 0a 20 20  ile=":auto:";.  
7fe0: 20 20 20 20 50 52 41 47 4d 41 20 6c 6f 63 6b 5f      PRAGMA lock_
7ff0: 70 72 6f 78 79 5f 66 69 6c 65 3b 0a 20 20 20 20  proxy_file;.    
8000: 7d 20 64 62 5d 0a 20 20 20 20 73 74 72 69 6e 67  } db].    string
8010: 20 6d 61 74 63 68 20 22 2a 70 72 6f 78 79 74 65   match "*proxyte
8020: 73 74 2e 64 62 3a 61 75 74 6f 3a 22 20 24 6c 6f  st.db:auto:" $lo
8030: 63 6b 70 61 74 68 32 0a 20 20 7d 20 7b 31 7d 0a  ckpath2.  } {1}.
8040: 0a 20 20 73 65 74 20 65 6e 76 28 53 51 4c 49 54  .  set env(SQLIT
8050: 45 5f 46 4f 52 43 45 5f 50 52 4f 58 59 5f 4c 4f  E_FORCE_PROXY_LO
8060: 43 4b 49 4e 47 29 20 24 75 73 69 6e 67 5f 70 72  CKING) $using_pr
8070: 6f 78 79 0a 20 20 73 65 74 20 73 71 6c 69 74 65  oxy.  set sqlite
8080: 5f 68 6f 73 74 69 64 5f 6e 75 6d 20 30 0a 7d 0a  _hostid_num 0.}.
8090: 0a 23 20 50 61 72 73 69 6e 67 20 6f 66 20 61 75  .# Parsing of au
80a0: 74 6f 5f 76 61 63 75 75 6d 20 73 65 74 74 69 6e  to_vacuum settin
80b0: 67 73 2e 0a 23 0a 66 6f 72 65 61 63 68 20 7b 61  gs..#.foreach {a
80c0: 75 74 6f 76 61 63 5f 73 65 74 74 69 6e 67 20 76  utovac_setting v
80d0: 61 6c 7d 20 7b 0a 20 20 30 20 30 0a 20 20 31 20  al} {.  0 0.  1 
80e0: 31 0a 20 20 32 20 32 0a 20 20 33 20 30 0a 20 20  1.  2 2.  3 0.  
80f0: 2d 31 20 30 0a 20 20 6e 6f 6e 65 20 30 0a 20 20  -1 0.  none 0.  
8100: 4e 4f 4e 45 20 30 0a 20 20 4e 6f 4e 65 20 30 0a  NONE 0.  NoNe 0.
8110: 20 20 66 75 6c 6c 20 31 0a 20 20 46 55 4c 4c 20    full 1.  FULL 
8120: 31 0a 20 20 69 6e 63 72 65 6d 65 6e 74 61 6c 20  1.  incremental 
8130: 32 0a 20 20 49 4e 43 52 45 4d 45 4e 54 41 4c 20  2.  INCREMENTAL 
8140: 32 0a 20 20 2d 31 32 33 34 20 30 0a 20 20 31 32  2.  -1234 0.  12
8150: 33 34 20 30 0a 7d 20 7b 0a 20 20 64 6f 5f 74 65  34 0.} {.  do_te
8160: 73 74 20 70 72 61 67 6d 61 2d 31 37 2e 31 2e 24  st pragma-17.1.$
8170: 61 75 74 6f 76 61 63 5f 73 65 74 74 69 6e 67 20  autovac_setting 
8180: 7b 0a 20 20 20 20 63 61 74 63 68 20 7b 64 62 20  {.    catch {db 
8190: 63 6c 6f 73 65 7d 0a 20 20 20 20 73 71 6c 69 74  close}.    sqlit
81a0: 65 33 20 64 62 20 3a 6d 65 6d 6f 72 79 3a 0a 20  e3 db :memory:. 
81b0: 20 20 20 65 78 65 63 73 71 6c 20 22 0a 20 20 20     execsql ".   
81c0: 20 20 20 50 52 41 47 4d 41 20 61 75 74 6f 5f 76     PRAGMA auto_v
81d0: 61 63 75 75 6d 3d 24 3a 3a 61 75 74 6f 76 61 63  acuum=$::autovac
81e0: 5f 73 65 74 74 69 6e 67 3b 0a 20 20 20 20 20 20  _setting;.      
81f0: 50 52 41 47 4d 41 20 61 75 74 6f 5f 76 61 63 75  PRAGMA auto_vacu
8200: 75 6d 3b 0a 20 20 20 20 22 0a 20 20 7d 20 24 76  um;.    ".  } $v
8210: 61 6c 0a 7d 0a 0a 23 20 50 61 72 73 69 6e 67 20  al.}..# Parsing 
8220: 6f 66 20 74 65 6d 70 5f 73 74 6f 72 65 20 73 65  of temp_store se
8230: 74 74 69 6e 67 73 2e 0a 23 0a 66 6f 72 65 61 63  ttings..#.foreac
8240: 68 20 7b 74 65 6d 70 5f 73 65 74 74 69 6e 67 20  h {temp_setting 
8250: 76 61 6c 7d 20 7b 0a 20 20 30 20 30 0a 20 20 31  val} {.  0 0.  1
8260: 20 31 0a 20 20 32 20 32 0a 20 20 33 20 30 0a 20   1.  2 2.  3 0. 
8270: 20 2d 31 20 30 0a 20 20 66 69 6c 65 20 31 0a 20   -1 0.  file 1. 
8280: 20 46 49 4c 45 20 31 0a 20 20 66 49 6c 45 20 31   FILE 1.  fIlE 1
8290: 0a 20 20 6d 65 6d 6f 72 79 20 32 0a 20 20 4d 45  .  memory 2.  ME
82a0: 4d 4f 52 59 20 32 0a 20 20 4d 65 4d 6f 52 79 20  MORY 2.  MeMoRy 
82b0: 32 0a 7d 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20  2.} {.  do_test 
82c0: 70 72 61 67 6d 61 2d 31 38 2e 31 2e 24 74 65 6d  pragma-18.1.$tem
82d0: 70 5f 73 65 74 74 69 6e 67 20 7b 0a 20 20 20 20  p_setting {.    
82e0: 63 61 74 63 68 20 7b 64 62 20 63 6c 6f 73 65 7d  catch {db close}
82f0: 0a 20 20 20 20 73 71 6c 69 74 65 33 20 64 62 20  .    sqlite3 db 
8300: 3a 6d 65 6d 6f 72 79 3a 0a 20 20 20 20 65 78 65  :memory:.    exe
8310: 63 73 71 6c 20 22 0a 20 20 20 20 20 20 50 52 41  csql ".      PRA
8320: 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 3d 24  GMA temp_store=$
8330: 3a 3a 74 65 6d 70 5f 73 65 74 74 69 6e 67 3b 0a  ::temp_setting;.
8340: 20 20 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d        PRAGMA tem
8350: 70 5f 73 74 6f 72 65 3d 24 3a 3a 74 65 6d 70 5f  p_store=$::temp_
8360: 73 65 74 74 69 6e 67 3b 0a 20 20 20 20 20 20 50  setting;.      P
8370: 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65  RAGMA temp_store
8380: 3b 0a 20 20 20 20 22 0a 20 20 7d 20 24 76 61 6c  ;.    ".  } $val
8390: 0a 7d 0a 0a 66 69 6e 69 73 68 5f 74 65 73 74 0a  .}..finish_test.