/ Hex Artifact Content
Login

Artifact c8108e01da04f16e67e5754e610bc62c1b993f6c:


0000: 23 20 32 30 30 32 20 4d 61 72 63 68 20 36 0a 23  # 2002 March 6.#
0010: 0a 23 20 54 68 65 20 61 75 74 68 6f 72 20 64 69  .# The author di
0020: 73 63 6c 61 69 6d 73 20 63 6f 70 79 72 69 67 68  sclaims copyrigh
0030: 74 20 74 6f 20 74 68 69 73 20 73 6f 75 72 63 65  t to this source
0040: 20 63 6f 64 65 2e 20 20 49 6e 20 70 6c 61 63 65   code.  In place
0050: 20 6f 66 0a 23 20 61 20 6c 65 67 61 6c 20 6e 6f   of.# a legal no
0060: 74 69 63 65 2c 20 68 65 72 65 20 69 73 20 61 20  tice, here is a 
0070: 62 6c 65 73 73 69 6e 67 3a 0a 23 0a 23 20 20 20  blessing:.#.#   
0080: 20 4d 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64   May you do good
0090: 20 61 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 23   and not evil..#
00a0: 20 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64      May you find
00b0: 20 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72   forgiveness for
00c0: 20 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f   yourself and fo
00d0: 72 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 23 20  rgive others..# 
00e0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
00f0: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0100: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0110: 79 6f 75 20 67 69 76 65 2e 0a 23 0a 23 2a 2a 2a  you give..#.#***
0120: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 0a 23 20 54 68 69 73 20 66 69 6c 65  ****.# This file
0170: 20 69 6d 70 6c 65 6d 65 6e 74 73 20 72 65 67 72   implements regr
0180: 65 73 73 69 6f 6e 20 74 65 73 74 73 20 66 6f 72  ession tests for
0190: 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79 2e   SQLite library.
01a0: 0a 23 0a 23 20 54 68 69 73 20 66 69 6c 65 20 69  .#.# This file i
01b0: 6d 70 6c 65 6d 65 6e 74 73 20 74 65 73 74 73 20  mplements tests 
01c0: 66 6f 72 20 74 68 65 20 50 52 41 47 4d 41 20 63  for the PRAGMA c
01d0: 6f 6d 6d 61 6e 64 2e 0a 23 0a 23 20 24 49 64 3a  ommand..#.# $Id:
01e0: 20 70 72 61 67 6d 61 2e 74 65 73 74 2c 76 20 31   pragma.test,v 1
01f0: 2e 37 33 20 32 30 30 39 2f 30 31 2f 31 32 20 31  .73 2009/01/12 1
0200: 34 3a 30 31 3a 34 35 20 64 61 6e 69 65 6c 6b 31  4:01:45 danielk1
0210: 39 37 37 20 45 78 70 20 24 0a 0a 73 65 74 20 74  977 Exp $..set t
0220: 65 73 74 64 69 72 20 5b 66 69 6c 65 20 64 69 72  estdir [file dir
0230: 6e 61 6d 65 20 24 61 72 67 76 30 5d 0a 73 6f 75  name $argv0].sou
0240: 72 63 65 20 24 74 65 73 74 64 69 72 2f 74 65 73  rce $testdir/tes
0250: 74 65 72 2e 74 63 6c 0a 0a 23 20 44 6f 20 6e 6f  ter.tcl..# Do no
0260: 74 20 75 73 65 20 61 20 63 6f 64 65 63 20 66 6f  t use a codec fo
0270: 72 20 74 65 73 74 73 20 69 6e 20 74 68 69 73 20  r tests in this 
0280: 66 69 6c 65 2c 20 61 73 20 74 68 65 20 64 61 74  file, as the dat
0290: 61 62 61 73 65 20 66 69 6c 65 20 69 73 0a 23 20  abase file is.# 
02a0: 6d 61 6e 69 70 75 6c 61 74 65 64 20 64 69 72 65  manipulated dire
02b0: 63 74 6c 79 20 75 73 69 6e 67 20 74 63 6c 20 73  ctly using tcl s
02c0: 63 72 69 70 74 73 20 28 75 73 69 6e 67 20 74 68  cripts (using th
02d0: 65 20 5b 68 65 78 69 6f 5f 77 72 69 74 65 5d 20  e [hexio_write] 
02e0: 63 6f 6d 6d 61 6e 64 29 2e 0a 23 0a 64 6f 5f 6e  command)..#.do_n
02f0: 6f 74 5f 75 73 65 5f 63 6f 64 65 63 0a 0a 23 20  ot_use_codec..# 
0300: 54 65 73 74 20 6f 72 67 61 6e 69 7a 61 74 69 6f  Test organizatio
0310: 6e 3a 0a 23 0a 23 20 70 72 61 67 6d 61 2d 31 2e  n:.#.# pragma-1.
0320: 2a 3a 20 54 65 73 74 20 63 61 63 68 65 5f 73 69  *: Test cache_si
0330: 7a 65 2c 20 64 65 66 61 75 6c 74 5f 63 61 63 68  ze, default_cach
0340: 65 5f 73 69 7a 65 20 61 6e 64 20 73 79 6e 63 68  e_size and synch
0350: 72 6f 6e 6f 75 73 20 6f 6e 20 6d 61 69 6e 20 64  ronous on main d
0360: 62 2e 0a 23 20 70 72 61 67 6d 61 2d 32 2e 2a 3a  b..# pragma-2.*:
0370: 20 54 65 73 74 20 73 79 6e 63 68 72 6f 6e 6f 75   Test synchronou
0380: 73 20 6f 6e 20 61 74 74 61 63 68 65 64 20 64 62  s on attached db
0390: 2e 0a 23 20 70 72 61 67 6d 61 2d 33 2e 2a 3a 20  ..# pragma-3.*: 
03a0: 54 65 73 74 20 64 65 74 65 63 74 69 6f 6e 20 6f  Test detection o
03b0: 66 20 74 61 62 6c 65 2f 69 6e 64 65 78 20 69 6e  f table/index in
03c0: 63 6f 6e 73 69 73 74 65 6e 63 79 20 62 79 20 69  consistency by i
03d0: 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 2e 0a  ntegrity_check..
03e0: 23 20 70 72 61 67 6d 61 2d 34 2e 2a 3a 20 54 65  # pragma-4.*: Te
03f0: 73 74 20 63 61 63 68 65 5f 73 69 7a 65 20 61 6e  st cache_size an
0400: 64 20 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f  d default_cache_
0410: 73 69 7a 65 20 6f 6e 20 61 74 74 61 63 68 65 64  size on attached
0420: 20 64 62 2e 0a 23 20 70 72 61 67 6d 61 2d 35 2e   db..# pragma-5.
0430: 2a 3a 20 54 65 73 74 20 74 68 61 74 20 70 72 61  *: Test that pra
0440: 67 6d 61 20 73 79 6e 63 68 72 6f 6e 6f 75 73 20  gma synchronous 
0450: 6d 61 79 20 6e 6f 74 20 62 65 20 75 73 65 64 20  may not be used 
0460: 69 6e 73 69 64 65 20 6f 66 20 61 0a 23 20 20 20  inside of a.#   
0470: 20 20 20 20 20 20 20 20 20 20 74 72 61 6e 73 61            transa
0480: 63 74 69 6f 6e 2e 0a 23 20 70 72 61 67 6d 61 2d  ction..# pragma-
0490: 36 2e 2a 3a 20 54 65 73 74 20 73 63 68 65 6d 61  6.*: Test schema
04a0: 2d 71 75 65 72 79 20 70 72 61 67 6d 61 73 2e 0a  -query pragmas..
04b0: 23 20 70 72 61 67 6d 61 2d 37 2e 2a 3a 20 4d 69  # pragma-7.*: Mi
04c0: 73 63 65 6c 6c 61 6e 65 6f 75 73 20 74 65 73 74  scellaneous test
04d0: 73 2e 0a 23 20 70 72 61 67 6d 61 2d 38 2e 2a 3a  s..# pragma-8.*:
04e0: 20 54 65 73 74 20 75 73 65 72 5f 76 65 72 73 69   Test user_versi
04f0: 6f 6e 20 61 6e 64 20 73 63 68 65 6d 61 5f 76 65  on and schema_ve
0500: 72 73 69 6f 6e 20 70 72 61 67 6d 61 73 2e 0a 23  rsion pragmas..#
0510: 20 70 72 61 67 6d 61 2d 39 2e 2a 3a 20 54 65 73   pragma-9.*: Tes
0520: 74 20 74 65 6d 70 5f 73 74 6f 72 65 20 61 6e 64  t temp_store and
0530: 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65   temp_store_dire
0540: 63 74 6f 72 79 2e 0a 23 20 70 72 61 67 6d 61 2d  ctory..# pragma-
0550: 31 30 2e 2a 3a 20 54 65 73 74 20 74 68 65 20 63  10.*: Test the c
0560: 6f 75 6e 74 5f 63 68 61 6e 67 65 73 20 70 72 61  ount_changes pra
0570: 67 6d 61 20 69 6e 20 74 68 65 20 70 72 65 73 65  gma in the prese
0580: 6e 63 65 20 6f 66 20 74 72 69 67 67 65 72 73 2e  nce of triggers.
0590: 0a 23 20 70 72 61 67 6d 61 2d 31 31 2e 2a 3a 20  .# pragma-11.*: 
05a0: 54 65 73 74 20 74 68 65 20 63 6f 6c 6c 61 74 69  Test the collati
05b0: 6f 6e 5f 6c 69 73 74 20 70 72 61 67 6d 61 2e 0a  on_list pragma..
05c0: 23 20 70 72 61 67 6d 61 2d 31 34 2e 2a 3a 20 54  # pragma-14.*: T
05d0: 65 73 74 20 74 68 65 20 70 61 67 65 5f 63 6f 75  est the page_cou
05e0: 6e 74 20 70 72 61 67 6d 61 2e 0a 23 20 70 72 61  nt pragma..# pra
05f0: 67 6d 61 2d 31 35 2e 2a 3a 20 54 65 73 74 20 74  gma-15.*: Test t
0600: 68 61 74 20 74 68 65 20 76 61 6c 75 65 20 73 65  hat the value se
0610: 74 20 75 73 69 6e 67 20 74 68 65 20 63 61 63 68  t using the cach
0620: 65 5f 73 69 7a 65 20 70 72 61 67 6d 61 20 69 73  e_size pragma is
0630: 20 6e 6f 74 0a 23 20 20 20 20 20 20 20 20 20 20   not.#          
0640: 20 20 20 20 72 65 73 65 74 20 77 68 65 6e 20 74      reset when t
0650: 68 65 20 73 63 68 65 6d 61 20 69 73 20 72 65 6c  he schema is rel
0660: 6f 61 64 65 64 2e 0a 23 20 70 72 61 67 6d 61 2d  oaded..# pragma-
0670: 31 36 2e 2a 3a 20 54 65 73 74 20 70 72 6f 78 79  16.*: Test proxy
0680: 20 6c 6f 63 6b 69 6e 67 0a 23 0a 0a 69 66 63 61   locking.#..ifca
0690: 70 61 62 6c 65 20 21 70 72 61 67 6d 61 20 7b 0a  pable !pragma {.
06a0: 20 20 66 69 6e 69 73 68 5f 74 65 73 74 0a 20 20    finish_test.  
06b0: 72 65 74 75 72 6e 0a 7d 0a 0a 23 20 44 65 6c 65  return.}..# Dele
06c0: 74 65 20 74 68 65 20 70 72 65 65 78 69 73 74 69  te the preexisti
06d0: 6e 67 20 64 61 74 61 62 61 73 65 20 74 6f 20 61  ng database to a
06e0: 76 6f 69 64 20 74 68 65 20 73 70 65 63 69 61 6c  void the special
06f0: 20 73 65 74 75 70 0a 23 20 74 68 61 74 20 74 68   setup.# that th
0700: 65 20 22 61 6c 6c 2e 74 65 73 74 22 20 73 63 72  e "all.test" scr
0710: 69 70 74 20 64 6f 65 73 2e 0a 23 0a 64 62 20 63  ipt does..#.db c
0720: 6c 6f 73 65 0a 64 65 6c 65 74 65 5f 66 69 6c 65  lose.delete_file
0730: 20 74 65 73 74 2e 64 62 20 74 65 73 74 2e 64 62   test.db test.db
0740: 2d 6a 6f 75 72 6e 61 6c 0a 64 65 6c 65 74 65 5f  -journal.delete_
0750: 66 69 6c 65 20 74 65 73 74 33 2e 64 62 20 74 65  file test3.db te
0760: 73 74 33 2e 64 62 2d 6a 6f 75 72 6e 61 6c 0a 73  st3.db-journal.s
0770: 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64  qlite3 db test.d
0780: 62 3b 20 73 65 74 20 44 42 20 5b 73 71 6c 69 74  b; set DB [sqlit
0790: 65 33 5f 63 6f 6e 6e 65 63 74 69 6f 6e 5f 70 6f  e3_connection_po
07a0: 69 6e 74 65 72 20 64 62 5d 0a 0a 0a 69 66 63 61  inter db]...ifca
07b0: 70 61 62 6c 65 20 70 61 67 65 72 5f 70 72 61 67  pable pager_prag
07c0: 6d 61 73 20 7b 0a 73 65 74 20 44 46 4c 54 5f 43  mas {.set DFLT_C
07d0: 41 43 48 45 5f 53 5a 20 5b 64 62 20 6f 6e 65 20  ACHE_SZ [db one 
07e0: 7b 50 52 41 47 4d 41 20 64 65 66 61 75 6c 74 5f  {PRAGMA default_
07f0: 63 61 63 68 65 5f 73 69 7a 65 7d 5d 0a 73 65 74  cache_size}].set
0800: 20 54 45 4d 50 5f 43 41 43 48 45 5f 53 5a 20 5b   TEMP_CACHE_SZ [
0810: 64 62 20 6f 6e 65 20 7b 50 52 41 47 4d 41 20 74  db one {PRAGMA t
0820: 65 6d 70 2e 64 65 66 61 75 6c 74 5f 63 61 63 68  emp.default_cach
0830: 65 5f 73 69 7a 65 7d 5d 0a 64 6f 5f 74 65 73 74  e_size}].do_test
0840: 20 70 72 61 67 6d 61 2d 31 2e 31 20 7b 0a 20 20   pragma-1.1 {.  
0850: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52  execsql {.    PR
0860: 41 47 4d 41 20 63 61 63 68 65 5f 73 69 7a 65 3b  AGMA cache_size;
0870: 0a 20 20 20 20 50 52 41 47 4d 41 20 64 65 66 61  .    PRAGMA defa
0880: 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65 3b 0a  ult_cache_size;.
0890: 20 20 20 20 50 52 41 47 4d 41 20 73 79 6e 63 68      PRAGMA synch
08a0: 72 6f 6e 6f 75 73 3b 0a 20 20 7d 0a 7d 20 5b 6c  ronous;.  }.} [l
08b0: 69 73 74 20 24 44 46 4c 54 5f 43 41 43 48 45 5f  ist $DFLT_CACHE_
08c0: 53 5a 20 24 44 46 4c 54 5f 43 41 43 48 45 5f 53  SZ $DFLT_CACHE_S
08d0: 5a 20 32 5d 0a 64 6f 5f 74 65 73 74 20 70 72 61  Z 2].do_test pra
08e0: 67 6d 61 2d 31 2e 32 20 7b 0a 20 20 65 78 65 63  gma-1.2 {.  exec
08f0: 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41  sql {.    PRAGMA
0900: 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3d 4f 46 46   synchronous=OFF
0910: 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 63 61 63  ;.    PRAGMA cac
0920: 68 65 5f 73 69 7a 65 3d 31 32 33 34 3b 0a 20 20  he_size=1234;.  
0930: 20 20 50 52 41 47 4d 41 20 63 61 63 68 65 5f 73    PRAGMA cache_s
0940: 69 7a 65 3b 0a 20 20 20 20 50 52 41 47 4d 41 20  ize;.    PRAGMA 
0950: 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69  default_cache_si
0960: 7a 65 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 73  ze;.    PRAGMA s
0970: 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20 20 7d 0a  ynchronous;.  }.
0980: 7d 20 5b 6c 69 73 74 20 31 32 33 34 20 24 44 46  } [list 1234 $DF
0990: 4c 54 5f 43 41 43 48 45 5f 53 5a 20 30 5d 0a 64  LT_CACHE_SZ 0].d
09a0: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 2e  o_test pragma-1.
09b0: 33 20 7b 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20  3 {.  db close. 
09c0: 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74   sqlite3 db test
09d0: 2e 64 62 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  .db.  execsql {.
09e0: 20 20 20 20 50 52 41 47 4d 41 20 63 61 63 68 65      PRAGMA cache
09f0: 5f 73 69 7a 65 3b 0a 20 20 20 20 50 52 41 47 4d  _size;.    PRAGM
0a00: 41 20 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f  A default_cache_
0a10: 73 69 7a 65 3b 0a 20 20 20 20 50 52 41 47 4d 41  size;.    PRAGMA
0a20: 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20 20   synchronous;.  
0a30: 7d 0a 7d 20 5b 6c 69 73 74 20 24 44 46 4c 54 5f  }.} [list $DFLT_
0a40: 43 41 43 48 45 5f 53 5a 20 24 44 46 4c 54 5f 43  CACHE_SZ $DFLT_C
0a50: 41 43 48 45 5f 53 5a 20 32 5d 0a 64 6f 5f 74 65  ACHE_SZ 2].do_te
0a60: 73 74 20 70 72 61 67 6d 61 2d 31 2e 34 20 7b 0a  st pragma-1.4 {.
0a70: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
0a80: 50 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f  PRAGMA synchrono
0a90: 75 73 3d 4f 46 46 3b 0a 20 20 20 20 50 52 41 47  us=OFF;.    PRAG
0aa0: 4d 41 20 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20  MA cache_size;. 
0ab0: 20 20 20 50 52 41 47 4d 41 20 64 65 66 61 75 6c     PRAGMA defaul
0ac0: 74 5f 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20  t_cache_size;.  
0ad0: 20 20 50 52 41 47 4d 41 20 73 79 6e 63 68 72 6f    PRAGMA synchro
0ae0: 6e 6f 75 73 3b 0a 20 20 7d 0a 7d 20 5b 6c 69 73  nous;.  }.} [lis
0af0: 74 20 24 44 46 4c 54 5f 43 41 43 48 45 5f 53 5a  t $DFLT_CACHE_SZ
0b00: 20 24 44 46 4c 54 5f 43 41 43 48 45 5f 53 5a 20   $DFLT_CACHE_SZ 
0b10: 30 5d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  0].do_test pragm
0b20: 61 2d 31 2e 35 20 7b 0a 20 20 65 78 65 63 73 71  a-1.5 {.  execsq
0b30: 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 63  l {.    PRAGMA c
0b40: 61 63 68 65 5f 73 69 7a 65 3d 2d 34 33 32 31 3b  ache_size=-4321;
0b50: 0a 20 20 20 20 50 52 41 47 4d 41 20 63 61 63 68  .    PRAGMA cach
0b60: 65 5f 73 69 7a 65 3b 0a 20 20 20 20 50 52 41 47  e_size;.    PRAG
0b70: 4d 41 20 64 65 66 61 75 6c 74 5f 63 61 63 68 65  MA default_cache
0b80: 5f 73 69 7a 65 3b 0a 20 20 20 20 50 52 41 47 4d  _size;.    PRAGM
0b90: 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20  A synchronous;. 
0ba0: 20 7d 0a 7d 20 5b 6c 69 73 74 20 34 33 32 31 20   }.} [list 4321 
0bb0: 24 44 46 4c 54 5f 43 41 43 48 45 5f 53 5a 20 30  $DFLT_CACHE_SZ 0
0bc0: 5d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  ].do_test pragma
0bd0: 2d 31 2e 36 20 7b 0a 20 20 65 78 65 63 73 71 6c  -1.6 {.  execsql
0be0: 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 73 79   {.    PRAGMA sy
0bf0: 6e 63 68 72 6f 6e 6f 75 73 3d 4f 4e 3b 0a 20 20  nchronous=ON;.  
0c00: 20 20 50 52 41 47 4d 41 20 63 61 63 68 65 5f 73    PRAGMA cache_s
0c10: 69 7a 65 3b 0a 20 20 20 20 50 52 41 47 4d 41 20  ize;.    PRAGMA 
0c20: 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69  default_cache_si
0c30: 7a 65 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 73  ze;.    PRAGMA s
0c40: 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20 20 7d 0a  ynchronous;.  }.
0c50: 7d 20 5b 6c 69 73 74 20 34 33 32 31 20 24 44 46  } [list 4321 $DF
0c60: 4c 54 5f 43 41 43 48 45 5f 53 5a 20 31 5d 0a 64  LT_CACHE_SZ 1].d
0c70: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 2e  o_test pragma-1.
0c80: 37 20 7b 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20  7 {.  db close. 
0c90: 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74   sqlite3 db test
0ca0: 2e 64 62 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  .db.  execsql {.
0cb0: 20 20 20 20 50 52 41 47 4d 41 20 63 61 63 68 65      PRAGMA cache
0cc0: 5f 73 69 7a 65 3b 0a 20 20 20 20 50 52 41 47 4d  _size;.    PRAGM
0cd0: 41 20 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f  A default_cache_
0ce0: 73 69 7a 65 3b 0a 20 20 20 20 50 52 41 47 4d 41  size;.    PRAGMA
0cf0: 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20 20   synchronous;.  
0d00: 7d 0a 7d 20 5b 6c 69 73 74 20 24 44 46 4c 54 5f  }.} [list $DFLT_
0d10: 43 41 43 48 45 5f 53 5a 20 24 44 46 4c 54 5f 43  CACHE_SZ $DFLT_C
0d20: 41 43 48 45 5f 53 5a 20 32 5d 0a 64 6f 5f 74 65  ACHE_SZ 2].do_te
0d30: 73 74 20 70 72 61 67 6d 61 2d 31 2e 38 20 7b 0a  st pragma-1.8 {.
0d40: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
0d50: 50 52 41 47 4d 41 20 64 65 66 61 75 6c 74 5f 63  PRAGMA default_c
0d60: 61 63 68 65 5f 73 69 7a 65 3d 2d 31 32 33 3b 0a  ache_size=-123;.
0d70: 20 20 20 20 50 52 41 47 4d 41 20 63 61 63 68 65      PRAGMA cache
0d80: 5f 73 69 7a 65 3b 0a 20 20 20 20 50 52 41 47 4d  _size;.    PRAGM
0d90: 41 20 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f  A default_cache_
0da0: 73 69 7a 65 3b 0a 20 20 20 20 50 52 41 47 4d 41  size;.    PRAGMA
0db0: 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20 20   synchronous;.  
0dc0: 7d 0a 7d 20 7b 31 32 33 20 31 32 33 20 32 7d 0a  }.} {123 123 2}.
0dd0: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31  do_test pragma-1
0de0: 2e 39 2e 31 20 7b 0a 20 20 64 62 20 63 6c 6f 73  .9.1 {.  db clos
0df0: 65 0a 20 20 73 71 6c 69 74 65 33 20 64 62 20 74  e.  sqlite3 db t
0e00: 65 73 74 2e 64 62 3b 20 73 65 74 20 3a 3a 44 42  est.db; set ::DB
0e10: 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6e 6e 65 63   [sqlite3_connec
0e20: 74 69 6f 6e 5f 70 6f 69 6e 74 65 72 20 64 62 5d  tion_pointer db]
0e30: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
0e40: 20 50 52 41 47 4d 41 20 63 61 63 68 65 5f 73 69   PRAGMA cache_si
0e50: 7a 65 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 64  ze;.    PRAGMA d
0e60: 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a  efault_cache_siz
0e70: 65 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 73 79  e;.    PRAGMA sy
0e80: 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20 20 7d 0a 7d  nchronous;.  }.}
0e90: 20 7b 31 32 33 20 31 32 33 20 32 7d 0a 69 66 63   {123 123 2}.ifc
0ea0: 61 70 61 62 6c 65 20 76 61 63 75 75 6d 20 7b 0a  apable vacuum {.
0eb0: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
0ec0: 2d 31 2e 39 2e 32 20 7b 0a 20 20 20 20 65 78 65  -1.9.2 {.    exe
0ed0: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 56 41 43  csql {.      VAC
0ee0: 55 55 4d 3b 0a 20 20 20 20 20 20 50 52 41 47 4d  UUM;.      PRAGM
0ef0: 41 20 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20  A cache_size;.  
0f00: 20 20 20 20 50 52 41 47 4d 41 20 64 65 66 61 75      PRAGMA defau
0f10: 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20  lt_cache_size;. 
0f20: 20 20 20 20 20 50 52 41 47 4d 41 20 73 79 6e 63       PRAGMA sync
0f30: 68 72 6f 6e 6f 75 73 3b 0a 20 20 20 20 7d 0a 20  hronous;.    }. 
0f40: 20 7d 20 7b 31 32 33 20 31 32 33 20 32 7d 0a 7d   } {123 123 2}.}
0f50: 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d  .do_test pragma-
0f60: 31 2e 31 30 20 7b 0a 20 20 65 78 65 63 73 71 6c  1.10 {.  execsql
0f70: 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 73 79   {.    PRAGMA sy
0f80: 6e 63 68 72 6f 6e 6f 75 73 3d 4e 4f 52 4d 41 4c  nchronous=NORMAL
0f90: 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 63 61 63  ;.    PRAGMA cac
0fa0: 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 50 52 41  he_size;.    PRA
0fb0: 47 4d 41 20 64 65 66 61 75 6c 74 5f 63 61 63 68  GMA default_cach
0fc0: 65 5f 73 69 7a 65 3b 0a 20 20 20 20 50 52 41 47  e_size;.    PRAG
0fd0: 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a  MA synchronous;.
0fe0: 20 20 7d 0a 7d 20 7b 31 32 33 20 31 32 33 20 31    }.} {123 123 1
0ff0: 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  }.do_test pragma
1000: 2d 31 2e 31 31 20 7b 0a 20 20 65 78 65 63 73 71  -1.11 {.  execsq
1010: 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 73  l {.    PRAGMA s
1020: 79 6e 63 68 72 6f 6e 6f 75 73 3d 46 55 4c 4c 3b  ynchronous=FULL;
1030: 0a 20 20 20 20 50 52 41 47 4d 41 20 63 61 63 68  .    PRAGMA cach
1040: 65 5f 73 69 7a 65 3b 0a 20 20 20 20 50 52 41 47  e_size;.    PRAG
1050: 4d 41 20 64 65 66 61 75 6c 74 5f 63 61 63 68 65  MA default_cache
1060: 5f 73 69 7a 65 3b 0a 20 20 20 20 50 52 41 47 4d  _size;.    PRAGM
1070: 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20  A synchronous;. 
1080: 20 7d 0a 7d 20 7b 31 32 33 20 31 32 33 20 32 7d   }.} {123 123 2}
1090: 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d  .do_test pragma-
10a0: 31 2e 31 32 20 7b 0a 20 20 64 62 20 63 6c 6f 73  1.12 {.  db clos
10b0: 65 0a 20 20 73 71 6c 69 74 65 33 20 64 62 20 74  e.  sqlite3 db t
10c0: 65 73 74 2e 64 62 3b 20 73 65 74 20 3a 3a 44 42  est.db; set ::DB
10d0: 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6e 6e 65 63   [sqlite3_connec
10e0: 74 69 6f 6e 5f 70 6f 69 6e 74 65 72 20 64 62 5d  tion_pointer db]
10f0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
1100: 20 50 52 41 47 4d 41 20 63 61 63 68 65 5f 73 69   PRAGMA cache_si
1110: 7a 65 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 64  ze;.    PRAGMA d
1120: 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a  efault_cache_siz
1130: 65 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 73 79  e;.    PRAGMA sy
1140: 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20 20 7d 0a 7d  nchronous;.  }.}
1150: 20 7b 31 32 33 20 31 32 33 20 32 7d 0a 0a 23 20   {123 123 2}..# 
1160: 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20 70 72  Make sure the pr
1170: 61 67 6d 61 20 68 61 6e 64 6c 65 72 20 75 6e 64  agma handler und
1180: 65 72 73 74 61 6e 64 73 20 6e 75 6d 65 72 69 63  erstands numeric
1190: 20 76 61 6c 75 65 73 20 69 6e 20 61 64 64 69 74   values in addit
11a0: 69 6f 6e 0a 23 20 74 6f 20 6b 65 79 77 6f 72 64  ion.# to keyword
11b0: 73 20 6c 69 6b 65 20 22 6f 66 66 22 20 61 6e 64  s like "off" and
11c0: 20 22 66 75 6c 6c 22 2e 0a 23 0a 64 6f 5f 74 65   "full"..#.do_te
11d0: 73 74 20 70 72 61 67 6d 61 2d 31 2e 31 33 20 7b  st pragma-1.13 {
11e0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
11f0: 20 50 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e   PRAGMA synchron
1200: 6f 75 73 3d 30 3b 0a 20 20 20 20 50 52 41 47 4d  ous=0;.    PRAGM
1210: 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20  A synchronous;. 
1220: 20 7d 0a 7d 20 7b 30 7d 0a 64 6f 5f 74 65 73 74   }.} {0}.do_test
1230: 20 70 72 61 67 6d 61 2d 31 2e 31 34 20 7b 0a 20   pragma-1.14 {. 
1240: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50   execsql {.    P
1250: 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75  RAGMA synchronou
1260: 73 3d 32 3b 0a 20 20 20 20 50 52 41 47 4d 41 20  s=2;.    PRAGMA 
1270: 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20 20 7d  synchronous;.  }
1280: 0a 7d 20 7b 32 7d 0a 7d 20 3b 23 20 69 66 63 61  .} {2}.} ;# ifca
1290: 70 61 62 6c 65 20 70 61 67 65 72 5f 70 72 61 67  pable pager_prag
12a0: 6d 61 73 0a 0a 23 20 54 65 73 74 20 74 75 72 6e  mas..# Test turn
12b0: 69 6e 67 20 22 66 6c 61 67 22 20 70 72 61 67 6d  ing "flag" pragm
12c0: 61 73 20 6f 6e 20 61 6e 64 20 6f 66 66 2e 0a 23  as on and off..#
12d0: 0a 69 66 63 61 70 61 62 6c 65 20 64 65 62 75 67  .ifcapable debug
12e0: 20 7b 0a 20 20 23 20 50 72 61 67 6d 61 20 22 76   {.  # Pragma "v
12f0: 64 62 65 5f 6c 69 73 74 69 6e 67 22 20 69 73 20  dbe_listing" is 
1300: 6f 6e 6c 79 20 61 76 61 69 6c 61 62 6c 65 20 69  only available i
1310: 66 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20  f compiled with 
1320: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 23  SQLITE_DEBUG.  #
1330: 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .  do_test pragm
1340: 61 2d 31 2e 31 35 20 7b 0a 20 20 20 20 65 78 65  a-1.15 {.    exe
1350: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41  csql {.      PRA
1360: 47 4d 41 20 76 64 62 65 5f 6c 69 73 74 69 6e 67  GMA vdbe_listing
1370: 3d 59 45 53 3b 0a 20 20 20 20 20 20 50 52 41 47  =YES;.      PRAG
1380: 4d 41 20 76 64 62 65 5f 6c 69 73 74 69 6e 67 3b  MA vdbe_listing;
1390: 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 31 7d 0a 20  .    }.  } {1}. 
13a0: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
13b0: 31 2e 31 36 20 7b 0a 20 20 20 20 65 78 65 63 73  1.16 {.    execs
13c0: 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d  ql {.      PRAGM
13d0: 41 20 76 64 62 65 5f 6c 69 73 74 69 6e 67 3d 4e  A vdbe_listing=N
13e0: 4f 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20  O;.      PRAGMA 
13f0: 76 64 62 65 5f 6c 69 73 74 69 6e 67 3b 0a 20 20  vdbe_listing;.  
1400: 20 20 7d 0a 20 20 7d 20 7b 30 7d 0a 7d 0a 0a 64    }.  } {0}.}..d
1410: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 2e  o_test pragma-1.
1420: 31 37 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  17 {.  execsql {
1430: 0a 20 20 20 20 50 52 41 47 4d 41 20 70 61 72 73  .    PRAGMA pars
1440: 65 72 5f 74 72 61 63 65 3d 4f 4e 3b 0a 20 20 20  er_trace=ON;.   
1450: 20 50 52 41 47 4d 41 20 70 61 72 73 65 72 5f 74   PRAGMA parser_t
1460: 72 61 63 65 3d 4f 46 46 3b 0a 20 20 7d 0a 7d 20  race=OFF;.  }.} 
1470: 7b 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  {}.do_test pragm
1480: 61 2d 31 2e 31 38 20 7b 0a 20 20 65 78 65 63 73  a-1.18 {.  execs
1490: 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20  ql {.    PRAGMA 
14a0: 62 6f 67 75 73 20 3d 20 2d 31 32 33 34 3b 20 20  bogus = -1234;  
14b0: 2d 2d 20 50 61 72 73 69 6e 67 20 6f 66 20 6e 65  -- Parsing of ne
14c0: 67 61 74 69 76 65 20 76 61 6c 75 65 73 0a 20 20  gative values.  
14d0: 7d 0a 7d 20 7b 7d 0a 0a 23 20 54 65 73 74 20 6d  }.} {}..# Test m
14e0: 6f 64 69 66 79 69 6e 67 20 74 68 65 20 73 61 66  odifying the saf
14f0: 65 74 79 5f 6c 65 76 65 6c 20 6f 66 20 61 6e 20  ety_level of an 
1500: 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
1510: 65 2e 0a 69 66 63 61 70 61 62 6c 65 20 70 61 67  e..ifcapable pag
1520: 65 72 5f 70 72 61 67 6d 61 73 26 26 61 74 74 61  er_pragmas&&atta
1530: 63 68 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 70  ch {.  do_test p
1540: 72 61 67 6d 61 2d 32 2e 31 20 7b 0a 20 20 20 20  ragma-2.1 {.    
1550: 66 6f 72 63 65 64 65 6c 65 74 65 20 74 65 73 74  forcedelete test
1560: 32 2e 64 62 0a 20 20 20 20 66 6f 72 63 65 64 65  2.db.    forcede
1570: 6c 65 74 65 20 74 65 73 74 32 2e 64 62 2d 6a 6f  lete test2.db-jo
1580: 75 72 6e 61 6c 0a 20 20 20 20 65 78 65 63 73 71  urnal.    execsq
1590: 6c 20 7b 0a 20 20 20 20 20 20 41 54 54 41 43 48  l {.      ATTACH
15a0: 20 27 74 65 73 74 32 2e 64 62 27 20 41 53 20 61   'test2.db' AS a
15b0: 75 78 3b 0a 20 20 20 20 7d 20 0a 20 20 7d 20 7b  ux;.    } .  } {
15c0: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67  }.  do_test prag
15d0: 6d 61 2d 32 2e 32 20 7b 0a 20 20 20 20 65 78 65  ma-2.2 {.    exe
15e0: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 70 72 61  csql {.      pra
15f0: 67 6d 61 20 61 75 78 2e 73 79 6e 63 68 72 6f 6e  gma aux.synchron
1600: 6f 75 73 3b 0a 20 20 20 20 7d 20 0a 20 20 7d 20  ous;.    } .  } 
1610: 7b 32 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72  {2}.  do_test pr
1620: 61 67 6d 61 2d 32 2e 33 20 7b 0a 20 20 20 20 65  agma-2.3 {.    e
1630: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 70  xecsql {.      p
1640: 72 61 67 6d 61 20 61 75 78 2e 73 79 6e 63 68 72  ragma aux.synchr
1650: 6f 6e 6f 75 73 20 3d 20 4f 46 46 3b 0a 20 20 20  onous = OFF;.   
1660: 20 20 20 70 72 61 67 6d 61 20 61 75 78 2e 73 79     pragma aux.sy
1670: 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20 20 20 20 20  nchronous;.     
1680: 20 70 72 61 67 6d 61 20 73 79 6e 63 68 72 6f 6e   pragma synchron
1690: 6f 75 73 3b 0a 20 20 20 20 7d 20 0a 20 20 7d 20  ous;.    } .  } 
16a0: 7b 30 20 32 7d 0a 20 20 64 6f 5f 74 65 73 74 20  {0 2}.  do_test 
16b0: 70 72 61 67 6d 61 2d 32 2e 34 20 7b 0a 20 20 20  pragma-2.4 {.   
16c0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20   execsql {.     
16d0: 20 70 72 61 67 6d 61 20 61 75 78 2e 73 79 6e 63   pragma aux.sync
16e0: 68 72 6f 6e 6f 75 73 20 3d 20 4f 4e 3b 0a 20 20  hronous = ON;.  
16f0: 20 20 20 20 70 72 61 67 6d 61 20 73 79 6e 63 68      pragma synch
1700: 72 6f 6e 6f 75 73 3b 0a 20 20 20 20 20 20 70 72  ronous;.      pr
1710: 61 67 6d 61 20 61 75 78 2e 73 79 6e 63 68 72 6f  agma aux.synchro
1720: 6e 6f 75 73 3b 0a 20 20 20 20 7d 20 0a 20 20 7d  nous;.    } .  }
1730: 20 7b 32 20 31 7d 0a 7d 20 3b 23 20 69 66 63 61   {2 1}.} ;# ifca
1740: 70 61 62 6c 65 20 70 61 67 65 72 5f 70 72 61 67  pable pager_prag
1750: 6d 61 73 0a 0a 23 20 43 6f 6e 73 74 72 75 63 74  mas..# Construct
1760: 20 61 20 63 6f 72 72 75 70 74 65 64 20 69 6e 64   a corrupted ind
1770: 65 78 20 61 6e 64 20 6d 61 6b 65 20 73 75 72 65  ex and make sure
1780: 20 74 68 65 20 69 6e 74 65 67 72 69 74 79 5f 63   the integrity_c
1790: 68 65 63 6b 0a 23 20 70 72 61 67 6d 61 20 66 69  heck.# pragma fi
17a0: 6e 64 73 20 69 74 2e 0a 23 0a 23 20 54 68 65 73  nds it..#.# Thes
17b0: 65 20 74 65 73 74 73 20 77 6f 6e 27 74 20 77 6f  e tests won't wo
17c0: 72 6b 20 69 66 20 74 68 65 20 64 61 74 61 62 61  rk if the databa
17d0: 73 65 20 69 73 20 65 6e 63 72 79 70 74 65 64 0a  se is encrypted.
17e0: 23 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  #.do_test pragma
17f0: 2d 33 2e 31 20 7b 0a 20 20 64 62 20 63 6c 6f 73  -3.1 {.  db clos
1800: 65 0a 20 20 66 6f 72 63 65 64 65 6c 65 74 65 20  e.  forcedelete 
1810: 74 65 73 74 2e 64 62 20 74 65 73 74 2e 64 62 2d  test.db test.db-
1820: 6a 6f 75 72 6e 61 6c 0a 20 20 73 71 6c 69 74 65  journal.  sqlite
1830: 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20 65  3 db test.db.  e
1840: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41  xecsql {.    PRA
1850: 47 4d 41 20 61 75 74 6f 5f 76 61 63 75 75 6d 3d  GMA auto_vacuum=
1860: 4f 46 46 3b 0a 20 20 20 20 42 45 47 49 4e 3b 0a  OFF;.    BEGIN;.
1870: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
1880: 20 74 32 28 61 2c 62 2c 63 29 3b 0a 20 20 20 20   t2(a,b,c);.    
1890: 43 52 45 41 54 45 20 49 4e 44 45 58 20 69 32 20  CREATE INDEX i2 
18a0: 4f 4e 20 74 32 28 61 29 3b 0a 20 20 20 20 49 4e  ON t2(a);.    IN
18b0: 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c  SERT INTO t2 VAL
18c0: 55 45 53 28 31 31 2c 32 2c 33 29 3b 0a 20 20 20  UES(11,2,3);.   
18d0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20   INSERT INTO t2 
18e0: 56 41 4c 55 45 53 28 32 32 2c 33 2c 34 29 3b 0a  VALUES(22,3,4);.
18f0: 20 20 20 20 43 4f 4d 4d 49 54 3b 0a 20 20 20 20      COMMIT;.    
1900: 53 45 4c 45 43 54 20 72 6f 77 69 64 2c 20 2a 20  SELECT rowid, * 
1910: 66 72 6f 6d 20 74 32 3b 0a 20 20 7d 0a 7d 20 7b  from t2;.  }.} {
1920: 31 20 31 31 20 32 20 33 20 32 20 32 32 20 33 20  1 11 2 3 2 22 3 
1930: 34 7d 0a 69 66 63 61 70 61 62 6c 65 20 61 74 74  4}.ifcapable att
1940: 61 63 68 20 7b 0a 20 20 69 66 20 7b 21 5b 73 71  ach {.  if {![sq
1950: 6c 69 74 65 33 20 2d 68 61 73 2d 63 6f 64 65 63  lite3 -has-codec
1960: 5d 20 26 26 20 24 73 71 6c 69 74 65 5f 6f 70 74  ] && $sqlite_opt
1970: 69 6f 6e 73 28 69 6e 74 65 67 72 69 74 79 63 6b  ions(integrityck
1980: 29 7d 20 7b 0a 20 20 20 20 64 6f 5f 74 65 73 74  )} {.    do_test
1990: 20 70 72 61 67 6d 61 2d 33 2e 32 20 7b 0a 20 20   pragma-3.2 {.  
19a0: 20 20 20 20 64 62 20 65 76 61 6c 20 7b 53 45 4c      db eval {SEL
19b0: 45 43 54 20 72 6f 6f 74 70 61 67 65 20 46 52 4f  ECT rootpage FRO
19c0: 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20  M sqlite_master 
19d0: 57 48 45 52 45 20 6e 61 6d 65 3d 27 69 32 27 7d  WHERE name='i2'}
19e0: 20 62 72 65 61 6b 0a 20 20 20 20 20 20 73 65 74   break.      set
19f0: 20 70 67 73 7a 20 5b 64 62 20 65 76 61 6c 20 7b   pgsz [db eval {
1a00: 50 52 41 47 4d 41 20 70 61 67 65 5f 73 69 7a 65  PRAGMA page_size
1a10: 7d 5d 0a 20 20 20 20 20 20 23 20 6f 76 65 72 77  }].      # overw
1a20: 72 69 74 65 20 74 68 65 20 68 65 61 64 65 72 20  rite the header 
1a30: 6f 6e 20 74 68 65 20 72 6f 6f 74 70 61 67 65 20  on the rootpage 
1a40: 6f 66 20 74 68 65 20 69 6e 64 65 78 20 69 6e 20  of the index in 
1a50: 6f 72 64 65 72 20 74 6f 0a 20 20 20 20 20 20 23  order to.      #
1a60: 20 6d 61 6b 65 20 74 68 65 20 69 6e 64 65 78 20   make the index 
1a70: 61 70 70 65 61 72 20 74 6f 20 62 65 20 65 6d 70  appear to be emp
1a80: 74 79 2e 0a 20 20 20 20 20 20 23 0a 20 20 20 20  ty..      #.    
1a90: 20 20 73 65 74 20 6f 66 66 73 65 74 20 5b 65 78    set offset [ex
1aa0: 70 72 20 7b 24 70 67 73 7a 2a 28 24 72 6f 6f 74  pr {$pgsz*($root
1ab0: 70 61 67 65 2d 31 29 7d 5d 0a 20 20 20 20 20 20  page-1)}].      
1ac0: 68 65 78 69 6f 5f 77 72 69 74 65 20 74 65 73 74  hexio_write test
1ad0: 2e 64 62 20 24 6f 66 66 73 65 74 20 30 61 30 30  .db $offset 0a00
1ae0: 30 30 30 30 30 30 30 34 30 30 30 30 30 30 30 30  0000000400000000
1af0: 30 30 0a 20 20 20 20 20 20 64 62 20 63 6c 6f 73  00.      db clos
1b00: 65 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 20  e.      sqlite3 
1b10: 64 62 20 74 65 73 74 2e 64 62 0a 20 20 20 20 20  db test.db.     
1b20: 20 65 78 65 63 73 71 6c 20 7b 50 52 41 47 4d 41   execsql {PRAGMA
1b30: 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b   integrity_check
1b40: 7d 0a 20 20 20 20 7d 20 7b 7b 72 6f 77 69 64 20  }.    } {{rowid 
1b50: 31 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69  1 missing from i
1b60: 6e 64 65 78 20 69 32 7d 20 7b 72 6f 77 69 64 20  ndex i2} {rowid 
1b70: 32 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69  2 missing from i
1b80: 6e 64 65 78 20 69 32 7d 20 7b 77 72 6f 6e 67 20  ndex i2} {wrong 
1b90: 23 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20  # of entries in 
1ba0: 69 6e 64 65 78 20 69 32 7d 7d 0a 20 20 20 20 64  index i2}}.    d
1bb0: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 33 2e  o_test pragma-3.
1bc0: 33 20 7b 0a 20 20 20 20 20 20 65 78 65 63 73 71  3 {.      execsq
1bd0: 6c 20 7b 50 52 41 47 4d 41 20 69 6e 74 65 67 72  l {PRAGMA integr
1be0: 69 74 79 5f 63 68 65 63 6b 3d 31 7d 0a 20 20 20  ity_check=1}.   
1bf0: 20 7d 20 7b 7b 72 6f 77 69 64 20 31 20 6d 69 73   } {{rowid 1 mis
1c00: 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20  sing from index 
1c10: 69 32 7d 7d 0a 20 20 20 20 64 6f 5f 74 65 73 74  i2}}.    do_test
1c20: 20 70 72 61 67 6d 61 2d 33 2e 34 20 7b 0a 20 20   pragma-3.4 {.  
1c30: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20      execsql {.  
1c40: 20 20 20 20 20 20 41 54 54 41 43 48 20 44 41 54        ATTACH DAT
1c50: 41 42 41 53 45 20 27 74 65 73 74 2e 64 62 27 20  ABASE 'test.db' 
1c60: 41 53 20 74 32 3b 0a 20 20 20 20 20 20 20 20 50  AS t2;.        P
1c70: 52 41 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f  RAGMA integrity_
1c80: 63 68 65 63 6b 0a 20 20 20 20 20 20 7d 0a 20 20  check.      }.  
1c90: 20 20 7d 20 7b 7b 72 6f 77 69 64 20 31 20 6d 69    } {{rowid 1 mi
1ca0: 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78  ssing from index
1cb0: 20 69 32 7d 20 7b 72 6f 77 69 64 20 32 20 6d 69   i2} {rowid 2 mi
1cc0: 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78  ssing from index
1cd0: 20 69 32 7d 20 7b 77 72 6f 6e 67 20 23 20 6f 66   i2} {wrong # of
1ce0: 20 65 6e 74 72 69 65 73 20 69 6e 20 69 6e 64 65   entries in inde
1cf0: 78 20 69 32 7d 20 7b 72 6f 77 69 64 20 31 20 6d  x i2} {rowid 1 m
1d00: 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65  issing from inde
1d10: 78 20 69 32 7d 20 7b 72 6f 77 69 64 20 32 20 6d  x i2} {rowid 2 m
1d20: 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65  issing from inde
1d30: 78 20 69 32 7d 20 7b 77 72 6f 6e 67 20 23 20 6f  x i2} {wrong # o
1d40: 66 20 65 6e 74 72 69 65 73 20 69 6e 20 69 6e 64  f entries in ind
1d50: 65 78 20 69 32 7d 7d 0a 20 20 20 20 64 6f 5f 74  ex i2}}.    do_t
1d60: 65 73 74 20 70 72 61 67 6d 61 2d 33 2e 35 20 7b  est pragma-3.5 {
1d70: 0a 20 20 20 20 20 20 65 78 65 63 73 71 6c 20 7b  .      execsql {
1d80: 0a 20 20 20 20 20 20 20 20 50 52 41 47 4d 41 20  .        PRAGMA 
1d90: 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 3d  integrity_check=
1da0: 34 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 20  4.      }.    } 
1db0: 7b 7b 72 6f 77 69 64 20 31 20 6d 69 73 73 69 6e  {{rowid 1 missin
1dc0: 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d  g from index i2}
1dd0: 20 7b 72 6f 77 69 64 20 32 20 6d 69 73 73 69 6e   {rowid 2 missin
1de0: 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d  g from index i2}
1df0: 20 7b 77 72 6f 6e 67 20 23 20 6f 66 20 65 6e 74   {wrong # of ent
1e00: 72 69 65 73 20 69 6e 20 69 6e 64 65 78 20 69 32  ries in index i2
1e10: 7d 20 7b 72 6f 77 69 64 20 31 20 6d 69 73 73 69  } {rowid 1 missi
1e20: 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32  ng from index i2
1e30: 7d 7d 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 70  }}.    do_test p
1e40: 72 61 67 6d 61 2d 33 2e 36 20 7b 0a 20 20 20 20  ragma-3.6 {.    
1e50: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
1e60: 20 20 20 20 50 52 41 47 4d 41 20 69 6e 74 65 67      PRAGMA integ
1e70: 72 69 74 79 5f 63 68 65 63 6b 3d 78 79 7a 0a 20  rity_check=xyz. 
1e80: 20 20 20 20 20 7d 0a 20 20 20 20 7d 20 7b 7b 72       }.    } {{r
1e90: 6f 77 69 64 20 31 20 6d 69 73 73 69 6e 67 20 66  owid 1 missing f
1ea0: 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b 72  rom index i2} {r
1eb0: 6f 77 69 64 20 32 20 6d 69 73 73 69 6e 67 20 66  owid 2 missing f
1ec0: 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b 77  rom index i2} {w
1ed0: 72 6f 6e 67 20 23 20 6f 66 20 65 6e 74 72 69 65  rong # of entrie
1ee0: 73 20 69 6e 20 69 6e 64 65 78 20 69 32 7d 20 7b  s in index i2} {
1ef0: 72 6f 77 69 64 20 31 20 6d 69 73 73 69 6e 67 20  rowid 1 missing 
1f00: 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b  from index i2} {
1f10: 72 6f 77 69 64 20 32 20 6d 69 73 73 69 6e 67 20  rowid 2 missing 
1f20: 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b  from index i2} {
1f30: 77 72 6f 6e 67 20 23 20 6f 66 20 65 6e 74 72 69  wrong # of entri
1f40: 65 73 20 69 6e 20 69 6e 64 65 78 20 69 32 7d 7d  es in index i2}}
1f50: 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 70 72 61  .    do_test pra
1f60: 67 6d 61 2d 33 2e 37 20 7b 0a 20 20 20 20 20 20  gma-3.7 {.      
1f70: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
1f80: 20 20 50 52 41 47 4d 41 20 69 6e 74 65 67 72 69    PRAGMA integri
1f90: 74 79 5f 63 68 65 63 6b 3d 30 0a 20 20 20 20 20  ty_check=0.     
1fa0: 20 7d 0a 20 20 20 20 7d 20 7b 7b 72 6f 77 69 64   }.    } {{rowid
1fb0: 20 31 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20   1 missing from 
1fc0: 69 6e 64 65 78 20 69 32 7d 20 7b 72 6f 77 69 64  index i2} {rowid
1fd0: 20 32 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20   2 missing from 
1fe0: 69 6e 64 65 78 20 69 32 7d 20 7b 77 72 6f 6e 67  index i2} {wrong
1ff0: 20 23 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e   # of entries in
2000: 20 69 6e 64 65 78 20 69 32 7d 20 7b 72 6f 77 69   index i2} {rowi
2010: 64 20 31 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d  d 1 missing from
2020: 20 69 6e 64 65 78 20 69 32 7d 20 7b 72 6f 77 69   index i2} {rowi
2030: 64 20 32 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d  d 2 missing from
2040: 20 69 6e 64 65 78 20 69 32 7d 20 7b 77 72 6f 6e   index i2} {wron
2050: 67 20 23 20 6f 66 20 65 6e 74 72 69 65 73 20 69  g # of entries i
2060: 6e 20 69 6e 64 65 78 20 69 32 7d 7d 0a 20 20 0a  n index i2}}.  .
2070: 20 20 20 20 23 20 41 64 64 20 61 64 64 69 74 69      # Add additi
2080: 6f 6e 61 6c 20 63 6f 72 72 75 70 74 69 6f 6e 20  onal corruption 
2090: 62 79 20 61 70 70 65 6e 64 69 6e 67 20 75 6e 75  by appending unu
20a0: 73 65 64 20 70 61 67 65 73 20 74 6f 20 74 68 65  sed pages to the
20b0: 20 65 6e 64 20 6f 66 0a 20 20 20 20 23 20 74 68   end of.    # th
20c0: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
20d0: 74 65 73 74 65 72 72 2e 64 62 0a 20 20 20 20 23  testerr.db.    #
20e0: 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 70 72 61  .    do_test pra
20f0: 67 6d 61 2d 33 2e 38 20 7b 0a 20 20 20 20 20 20  gma-3.8 {.      
2100: 65 78 65 63 73 71 6c 20 7b 44 45 54 41 43 48 20  execsql {DETACH 
2110: 74 32 7d 0a 20 20 20 20 20 20 66 6f 72 63 65 64  t2}.      forced
2120: 65 6c 65 74 65 20 74 65 73 74 65 72 72 2e 64 62  elete testerr.db
2130: 20 74 65 73 74 65 72 72 2e 64 62 2d 6a 6f 75 72   testerr.db-jour
2140: 6e 61 6c 0a 20 20 20 20 20 20 73 65 74 20 6f 75  nal.      set ou
2150: 74 20 5b 6f 70 65 6e 20 74 65 73 74 65 72 72 2e  t [open testerr.
2160: 64 62 20 77 5d 0a 20 20 20 20 20 20 66 63 6f 6e  db w].      fcon
2170: 66 69 67 75 72 65 20 24 6f 75 74 20 2d 74 72 61  figure $out -tra
2180: 6e 73 6c 61 74 69 6f 6e 20 62 69 6e 61 72 79 0a  nslation binary.
2190: 20 20 20 20 20 20 73 65 74 20 69 6e 20 5b 6f 70        set in [op
21a0: 65 6e 20 74 65 73 74 2e 64 62 20 72 5d 0a 20 20  en test.db r].  
21b0: 20 20 20 20 66 63 6f 6e 66 69 67 75 72 65 20 24      fconfigure $
21c0: 69 6e 20 2d 74 72 61 6e 73 6c 61 74 69 6f 6e 20  in -translation 
21d0: 62 69 6e 61 72 79 0a 20 20 20 20 20 20 70 75 74  binary.      put
21e0: 73 20 2d 6e 6f 6e 65 77 6c 69 6e 65 20 24 6f 75  s -nonewline $ou
21f0: 74 20 5b 72 65 61 64 20 24 69 6e 5d 0a 20 20 20  t [read $in].   
2200: 20 20 20 73 65 65 6b 20 24 69 6e 20 30 0a 20 20     seek $in 0.  
2210: 20 20 20 20 70 75 74 73 20 2d 6e 6f 6e 65 77 6c      puts -nonewl
2220: 69 6e 65 20 24 6f 75 74 20 5b 72 65 61 64 20 24  ine $out [read $
2230: 69 6e 5d 0a 20 20 20 20 20 20 63 6c 6f 73 65 20  in].      close 
2240: 24 69 6e 0a 20 20 20 20 20 20 63 6c 6f 73 65 20  $in.      close 
2250: 24 6f 75 74 0a 20 20 20 20 20 20 68 65 78 69 6f  $out.      hexio
2260: 5f 77 72 69 74 65 20 74 65 73 74 65 72 72 2e 64  _write testerr.d
2270: 62 20 32 38 20 30 30 30 30 30 30 30 30 0a 20 20  b 28 00000000.  
2280: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 52 45 49      execsql {REI
2290: 4e 44 45 58 20 74 32 7d 0a 20 20 20 20 20 20 65  NDEX t2}.      e
22a0: 78 65 63 73 71 6c 20 7b 50 52 41 47 4d 41 20 69  xecsql {PRAGMA i
22b0: 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 7d 0a  ntegrity_check}.
22c0: 20 20 20 20 7d 20 7b 6f 6b 7d 0a 20 20 20 20 64      } {ok}.    d
22d0: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 33 2e  o_test pragma-3.
22e0: 38 2e 31 20 7b 0a 20 20 20 20 20 20 65 78 65 63  8.1 {.      exec
22f0: 73 71 6c 20 7b 50 52 41 47 4d 41 20 71 75 69 63  sql {PRAGMA quic
2300: 6b 5f 63 68 65 63 6b 7d 0a 20 20 20 20 7d 20 7b  k_check}.    } {
2310: 6f 6b 7d 0a 20 20 20 20 64 6f 5f 74 65 73 74 20  ok}.    do_test 
2320: 70 72 61 67 6d 61 2d 33 2e 39 20 7b 0a 20 20 20  pragma-3.9 {.   
2330: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
2340: 20 20 20 20 20 41 54 54 41 43 48 20 27 74 65 73       ATTACH 'tes
2350: 74 65 72 72 2e 64 62 27 20 41 53 20 74 32 3b 0a  terr.db' AS t2;.
2360: 20 20 20 20 20 20 20 20 50 52 41 47 4d 41 20 69          PRAGMA i
2370: 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 0a 20  ntegrity_check. 
2380: 20 20 20 20 20 7d 0a 20 20 20 20 7d 20 7b 7b 2a       }.    } {{*
2390: 2a 2a 20 69 6e 20 64 61 74 61 62 61 73 65 20 74  ** in database t
23a0: 32 20 2a 2a 2a 0a 50 61 67 65 20 34 20 69 73 20  2 ***.Page 4 is 
23b0: 6e 65 76 65 72 20 75 73 65 64 0a 50 61 67 65 20  never used.Page 
23c0: 35 20 69 73 20 6e 65 76 65 72 20 75 73 65 64 0a  5 is never used.
23d0: 50 61 67 65 20 36 20 69 73 20 6e 65 76 65 72 20  Page 6 is never 
23e0: 75 73 65 64 7d 20 7b 72 6f 77 69 64 20 31 20 6d  used} {rowid 1 m
23f0: 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65  issing from inde
2400: 78 20 69 32 7d 20 7b 72 6f 77 69 64 20 32 20 6d  x i2} {rowid 2 m
2410: 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65  issing from inde
2420: 78 20 69 32 7d 20 7b 77 72 6f 6e 67 20 23 20 6f  x i2} {wrong # o
2430: 66 20 65 6e 74 72 69 65 73 20 69 6e 20 69 6e 64  f entries in ind
2440: 65 78 20 69 32 7d 7d 0a 20 20 20 20 64 6f 5f 74  ex i2}}.    do_t
2450: 65 73 74 20 70 72 61 67 6d 61 2d 33 2e 31 30 20  est pragma-3.10 
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 31 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  =1.      }.    }
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 7d 7d   is never used}}
24d0: 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 70 72 61  .    do_test pra
24e0: 67 6d 61 2d 33 2e 31 31 20 7b 0a 20 20 20 20 20  gma-3.11 {.     
24f0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20   execsql {.     
2500: 20 20 20 50 52 41 47 4d 41 20 69 6e 74 65 67 72     PRAGMA integr
2510: 69 74 79 5f 63 68 65 63 6b 3d 35 0a 20 20 20 20  ity_check=5.    
2520: 20 20 7d 0a 20 20 20 20 7d 20 7b 7b 2a 2a 2a 20    }.    } {{*** 
2530: 69 6e 20 64 61 74 61 62 61 73 65 20 74 32 20 2a  in database t2 *
2540: 2a 2a 0a 50 61 67 65 20 34 20 69 73 20 6e 65 76  **.Page 4 is nev
2550: 65 72 20 75 73 65 64 0a 50 61 67 65 20 35 20 69  er used.Page 5 i
2560: 73 20 6e 65 76 65 72 20 75 73 65 64 0a 50 61 67  s never used.Pag
2570: 65 20 36 20 69 73 20 6e 65 76 65 72 20 75 73 65  e 6 is never use
2580: 64 7d 20 7b 72 6f 77 69 64 20 31 20 6d 69 73 73  d} {rowid 1 miss
2590: 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69  ing from index i
25a0: 32 7d 20 7b 72 6f 77 69 64 20 32 20 6d 69 73 73  2} {rowid 2 miss
25b0: 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69  ing from index i
25c0: 32 7d 7d 0a 20 20 20 20 64 6f 5f 74 65 73 74 20  2}}.    do_test 
25d0: 70 72 61 67 6d 61 2d 33 2e 31 32 20 7b 0a 20 20  pragma-3.12 {.  
25e0: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20      execsql {.  
25f0: 20 20 20 20 20 20 50 52 41 47 4d 41 20 69 6e 74        PRAGMA int
2600: 65 67 72 69 74 79 5f 63 68 65 63 6b 3d 34 0a 20  egrity_check=4. 
2610: 20 20 20 20 20 7d 0a 20 20 20 20 7d 20 7b 7b 2a       }.    } {{*
2620: 2a 2a 20 69 6e 20 64 61 74 61 62 61 73 65 20 74  ** in database t
2630: 32 20 2a 2a 2a 0a 50 61 67 65 20 34 20 69 73 20  2 ***.Page 4 is 
2640: 6e 65 76 65 72 20 75 73 65 64 0a 50 61 67 65 20  never used.Page 
2650: 35 20 69 73 20 6e 65 76 65 72 20 75 73 65 64 0a  5 is never used.
2660: 50 61 67 65 20 36 20 69 73 20 6e 65 76 65 72 20  Page 6 is never 
2670: 75 73 65 64 7d 20 7b 72 6f 77 69 64 20 31 20 6d  used} {rowid 1 m
2680: 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65  issing from inde
2690: 78 20 69 32 7d 7d 0a 20 20 20 20 64 6f 5f 74 65  x i2}}.    do_te
26a0: 73 74 20 70 72 61 67 6d 61 2d 33 2e 31 33 20 7b  st pragma-3.13 {
26b0: 0a 20 20 20 20 20 20 65 78 65 63 73 71 6c 20 7b  .      execsql {
26c0: 0a 20 20 20 20 20 20 20 20 50 52 41 47 4d 41 20  .        PRAGMA 
26d0: 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 3d  integrity_check=
26e0: 33 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 20  3.      }.    } 
26f0: 7b 7b 2a 2a 2a 20 69 6e 20 64 61 74 61 62 61 73  {{*** in databas
2700: 65 20 74 32 20 2a 2a 2a 0a 50 61 67 65 20 34 20  e t2 ***.Page 4 
2710: 69 73 20 6e 65 76 65 72 20 75 73 65 64 0a 50 61  is never used.Pa
2720: 67 65 20 35 20 69 73 20 6e 65 76 65 72 20 75 73  ge 5 is never us
2730: 65 64 0a 50 61 67 65 20 36 20 69 73 20 6e 65 76  ed.Page 6 is nev
2740: 65 72 20 75 73 65 64 7d 7d 0a 20 20 20 20 64 6f  er used}}.    do
2750: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 33 2e 31  _test pragma-3.1
2760: 34 20 7b 0a 20 20 20 20 20 20 65 78 65 63 73 71  4 {.      execsq
2770: 6c 20 7b 0a 20 20 20 20 20 20 20 20 50 52 41 47  l {.        PRAG
2780: 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65  MA integrity_che
2790: 63 6b 28 32 29 0a 20 20 20 20 20 20 7d 0a 20 20  ck(2).      }.  
27a0: 20 20 7d 20 7b 7b 2a 2a 2a 20 69 6e 20 64 61 74    } {{*** in dat
27b0: 61 62 61 73 65 20 74 32 20 2a 2a 2a 0a 50 61 67  abase t2 ***.Pag
27c0: 65 20 34 20 69 73 20 6e 65 76 65 72 20 75 73 65  e 4 is never use
27d0: 64 0a 50 61 67 65 20 35 20 69 73 20 6e 65 76 65  d.Page 5 is neve
27e0: 72 20 75 73 65 64 7d 7d 0a 20 20 20 20 64 6f 5f  r used}}.    do_
27f0: 74 65 73 74 20 70 72 61 67 6d 61 2d 33 2e 31 35  test pragma-3.15
2800: 20 7b 0a 20 20 20 20 20 20 65 78 65 63 73 71 6c   {.      execsql
2810: 20 7b 0a 20 20 20 20 20 20 20 20 41 54 54 41 43   {.        ATTAC
2820: 48 20 27 74 65 73 74 65 72 72 2e 64 62 27 20 41  H 'testerr.db' A
2830: 53 20 74 33 3b 0a 20 20 20 20 20 20 20 20 50 52  S t3;.        PR
2840: 41 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63  AGMA integrity_c
2850: 68 65 63 6b 0a 20 20 20 20 20 20 7d 0a 20 20 20  heck.      }.   
2860: 20 7d 20 7b 7b 2a 2a 2a 20 69 6e 20 64 61 74 61   } {{*** in data
2870: 62 61 73 65 20 74 32 20 2a 2a 2a 0a 50 61 67 65  base t2 ***.Page
2880: 20 34 20 69 73 20 6e 65 76 65 72 20 75 73 65 64   4 is never used
2890: 0a 50 61 67 65 20 35 20 69 73 20 6e 65 76 65 72  .Page 5 is never
28a0: 20 75 73 65 64 0a 50 61 67 65 20 36 20 69 73 20   used.Page 6 is 
28b0: 6e 65 76 65 72 20 75 73 65 64 7d 20 7b 72 6f 77  never used} {row
28c0: 69 64 20 31 20 6d 69 73 73 69 6e 67 20 66 72 6f  id 1 missing fro
28d0: 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b 72 6f 77  m index i2} {row
28e0: 69 64 20 32 20 6d 69 73 73 69 6e 67 20 66 72 6f  id 2 missing fro
28f0: 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b 77 72 6f  m index i2} {wro
2900: 6e 67 20 23 20 6f 66 20 65 6e 74 72 69 65 73 20  ng # of entries 
2910: 69 6e 20 69 6e 64 65 78 20 69 32 7d 20 7b 2a 2a  in index i2} {**
2920: 2a 20 69 6e 20 64 61 74 61 62 61 73 65 20 74 33  * in database t3
2930: 20 2a 2a 2a 0a 50 61 67 65 20 34 20 69 73 20 6e   ***.Page 4 is n
2940: 65 76 65 72 20 75 73 65 64 0a 50 61 67 65 20 35  ever used.Page 5
2950: 20 69 73 20 6e 65 76 65 72 20 75 73 65 64 0a 50   is never used.P
2960: 61 67 65 20 36 20 69 73 20 6e 65 76 65 72 20 75  age 6 is never u
2970: 73 65 64 7d 20 7b 72 6f 77 69 64 20 31 20 6d 69  sed} {rowid 1 mi
2980: 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78  ssing from index
2990: 20 69 32 7d 20 7b 72 6f 77 69 64 20 32 20 6d 69   i2} {rowid 2 mi
29a0: 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78  ssing from index
29b0: 20 69 32 7d 20 7b 77 72 6f 6e 67 20 23 20 6f 66   i2} {wrong # of
29c0: 20 65 6e 74 72 69 65 73 20 69 6e 20 69 6e 64 65   entries in inde
29d0: 78 20 69 32 7d 7d 0a 20 20 20 20 64 6f 5f 74 65  x i2}}.    do_te
29e0: 73 74 20 70 72 61 67 6d 61 2d 33 2e 31 36 20 7b  st pragma-3.16 {
29f0: 0a 20 20 20 20 20 20 65 78 65 63 73 71 6c 20 7b  .      execsql {
2a00: 0a 20 20 20 20 20 20 20 20 50 52 41 47 4d 41 20  .        PRAGMA 
2a10: 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 28  integrity_check(
2a20: 31 30 29 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  10).      }.    
2a30: 7d 20 7b 7b 2a 2a 2a 20 69 6e 20 64 61 74 61 62  } {{*** in datab
2a40: 61 73 65 20 74 32 20 2a 2a 2a 0a 50 61 67 65 20  ase t2 ***.Page 
2a50: 34 20 69 73 20 6e 65 76 65 72 20 75 73 65 64 0a  4 is never used.
2a60: 50 61 67 65 20 35 20 69 73 20 6e 65 76 65 72 20  Page 5 is never 
2a70: 75 73 65 64 0a 50 61 67 65 20 36 20 69 73 20 6e  used.Page 6 is n
2a80: 65 76 65 72 20 75 73 65 64 7d 20 7b 72 6f 77 69  ever used} {rowi
2a90: 64 20 31 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d  d 1 missing from
2aa0: 20 69 6e 64 65 78 20 69 32 7d 20 7b 72 6f 77 69   index i2} {rowi
2ab0: 64 20 32 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d  d 2 missing from
2ac0: 20 69 6e 64 65 78 20 69 32 7d 20 7b 77 72 6f 6e   index i2} {wron
2ad0: 67 20 23 20 6f 66 20 65 6e 74 72 69 65 73 20 69  g # of entries i
2ae0: 6e 20 69 6e 64 65 78 20 69 32 7d 20 7b 2a 2a 2a  n index i2} {***
2af0: 20 69 6e 20 64 61 74 61 62 61 73 65 20 74 33 20   in database t3 
2b00: 2a 2a 2a 0a 50 61 67 65 20 34 20 69 73 20 6e 65  ***.Page 4 is ne
2b10: 76 65 72 20 75 73 65 64 0a 50 61 67 65 20 35 20  ver used.Page 5 
2b20: 69 73 20 6e 65 76 65 72 20 75 73 65 64 0a 50 61  is never used.Pa
2b30: 67 65 20 36 20 69 73 20 6e 65 76 65 72 20 75 73  ge 6 is never us
2b40: 65 64 7d 20 7b 72 6f 77 69 64 20 31 20 6d 69 73  ed} {rowid 1 mis
2b50: 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20  sing from index 
2b60: 69 32 7d 7d 0a 20 20 20 20 64 6f 5f 74 65 73 74  i2}}.    do_test
2b70: 20 70 72 61 67 6d 61 2d 33 2e 31 37 20 7b 0a 20   pragma-3.17 {. 
2b80: 20 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20       execsql {. 
2b90: 20 20 20 20 20 20 20 50 52 41 47 4d 41 20 69 6e         PRAGMA in
2ba0: 74 65 67 72 69 74 79 5f 63 68 65 63 6b 3d 38 0a  tegrity_check=8.
2bb0: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 20 7b 7b        }.    } {{
2bc0: 2a 2a 2a 20 69 6e 20 64 61 74 61 62 61 73 65 20  *** in database 
2bd0: 74 32 20 2a 2a 2a 0a 50 61 67 65 20 34 20 69 73  t2 ***.Page 4 is
2be0: 20 6e 65 76 65 72 20 75 73 65 64 0a 50 61 67 65   never used.Page
2bf0: 20 35 20 69 73 20 6e 65 76 65 72 20 75 73 65 64   5 is never used
2c00: 0a 50 61 67 65 20 36 20 69 73 20 6e 65 76 65 72  .Page 6 is never
2c10: 20 75 73 65 64 7d 20 7b 72 6f 77 69 64 20 31 20   used} {rowid 1 
2c20: 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64  missing from ind
2c30: 65 78 20 69 32 7d 20 7b 72 6f 77 69 64 20 32 20  ex i2} {rowid 2 
2c40: 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64  missing from ind
2c50: 65 78 20 69 32 7d 20 7b 77 72 6f 6e 67 20 23 20  ex i2} {wrong # 
2c60: 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 69 6e  of entries in in
2c70: 64 65 78 20 69 32 7d 20 7b 2a 2a 2a 20 69 6e 20  dex i2} {*** in 
2c80: 64 61 74 61 62 61 73 65 20 74 33 20 2a 2a 2a 0a  database t3 ***.
2c90: 50 61 67 65 20 34 20 69 73 20 6e 65 76 65 72 20  Page 4 is never 
2ca0: 75 73 65 64 0a 50 61 67 65 20 35 20 69 73 20 6e  used.Page 5 is n
2cb0: 65 76 65 72 20 75 73 65 64 7d 7d 0a 20 20 20 20  ever used}}.    
2cc0: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 33  do_test pragma-3
2cd0: 2e 31 38 20 7b 0a 20 20 20 20 20 20 65 78 65 63  .18 {.      exec
2ce0: 73 71 6c 20 7b 0a 20 20 20 20 20 20 20 20 50 52  sql {.        PR
2cf0: 41 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63  AGMA integrity_c
2d00: 68 65 63 6b 3d 34 0a 20 20 20 20 20 20 7d 0a 20  heck=4.      }. 
2d10: 20 20 20 7d 20 7b 7b 2a 2a 2a 20 69 6e 20 64 61     } {{*** in da
2d20: 74 61 62 61 73 65 20 74 32 20 2a 2a 2a 0a 50 61  tabase t2 ***.Pa
2d30: 67 65 20 34 20 69 73 20 6e 65 76 65 72 20 75 73  ge 4 is never us
2d40: 65 64 0a 50 61 67 65 20 35 20 69 73 20 6e 65 76  ed.Page 5 is nev
2d50: 65 72 20 75 73 65 64 0a 50 61 67 65 20 36 20 69  er used.Page 6 i
2d60: 73 20 6e 65 76 65 72 20 75 73 65 64 7d 20 7b 72  s never used} {r
2d70: 6f 77 69 64 20 31 20 6d 69 73 73 69 6e 67 20 66  owid 1 missing f
2d80: 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 7d 0a 20  rom index i2}}. 
2d90: 20 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61   }.  do_test pra
2da0: 67 6d 61 2d 33 2e 31 39 20 7b 0a 20 20 20 20 63  gma-3.19 {.    c
2db0: 61 74 63 68 20 7b 64 62 20 63 6c 6f 73 65 7d 0a  atch {db close}.
2dc0: 20 20 20 20 66 6f 72 63 65 64 65 6c 65 74 65 20      forcedelete 
2dd0: 74 65 73 74 2e 64 62 20 74 65 73 74 2e 64 62 2d  test.db test.db-
2de0: 6a 6f 75 72 6e 61 6c 0a 20 20 20 20 73 71 6c 69  journal.    sqli
2df0: 74 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20  te3 db test.db. 
2e00: 20 20 20 64 62 20 65 76 61 6c 20 7b 50 52 41 47     db eval {PRAG
2e10: 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65  MA integrity_che
2e20: 63 6b 7d 0a 20 20 7d 20 7b 6f 6b 7d 0a 7d 0a 23  ck}.  } {ok}.}.#
2e30: 65 78 69 74 0a 0a 23 20 54 65 73 74 20 6d 6f 64  exit..# Test mod
2e40: 69 66 79 69 6e 67 20 74 68 65 20 63 61 63 68 65  ifying the cache
2e50: 5f 73 69 7a 65 20 6f 66 20 61 6e 20 61 74 74 61  _size of an atta
2e60: 63 68 65 64 20 64 61 74 61 62 61 73 65 2e 0a 69  ched database..i
2e70: 66 63 61 70 61 62 6c 65 20 70 61 67 65 72 5f 70  fcapable pager_p
2e80: 72 61 67 6d 61 73 26 26 61 74 74 61 63 68 20 7b  ragmas&&attach {
2e90: 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d  .do_test pragma-
2ea0: 34 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  4.1 {.  execsql 
2eb0: 7b 0a 20 20 20 20 41 54 54 41 43 48 20 27 74 65  {.    ATTACH 'te
2ec0: 73 74 32 2e 64 62 27 20 41 53 20 61 75 78 3b 0a  st2.db' AS aux;.
2ed0: 20 20 20 20 70 72 61 67 6d 61 20 61 75 78 2e 63      pragma aux.c
2ee0: 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 70  ache_size;.    p
2ef0: 72 61 67 6d 61 20 61 75 78 2e 64 65 66 61 75 6c  ragma aux.defaul
2f00: 74 5f 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20  t_cache_size;.  
2f10: 7d 20 0a 7d 20 5b 6c 69 73 74 20 24 44 46 4c 54  } .} [list $DFLT
2f20: 5f 43 41 43 48 45 5f 53 5a 20 24 44 46 4c 54 5f  _CACHE_SZ $DFLT_
2f30: 43 41 43 48 45 5f 53 5a 5d 0a 64 6f 5f 74 65 73  CACHE_SZ].do_tes
2f40: 74 20 70 72 61 67 6d 61 2d 34 2e 32 20 7b 0a 20  t pragma-4.2 {. 
2f50: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 70   execsql {.    p
2f60: 72 61 67 6d 61 20 61 75 78 2e 63 61 63 68 65 5f  ragma aux.cache_
2f70: 73 69 7a 65 20 3d 20 35 30 3b 0a 20 20 20 20 70  size = 50;.    p
2f80: 72 61 67 6d 61 20 61 75 78 2e 63 61 63 68 65 5f  ragma aux.cache_
2f90: 73 69 7a 65 3b 0a 20 20 20 20 70 72 61 67 6d 61  size;.    pragma
2fa0: 20 61 75 78 2e 64 65 66 61 75 6c 74 5f 63 61 63   aux.default_cac
2fb0: 68 65 5f 73 69 7a 65 3b 0a 20 20 7d 20 0a 7d 20  he_size;.  } .} 
2fc0: 5b 6c 69 73 74 20 35 30 20 24 44 46 4c 54 5f 43  [list 50 $DFLT_C
2fd0: 41 43 48 45 5f 53 5a 5d 0a 64 6f 5f 74 65 73 74  ACHE_SZ].do_test
2fe0: 20 70 72 61 67 6d 61 2d 34 2e 33 20 7b 0a 20 20   pragma-4.3 {.  
2ff0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 70 72  execsql {.    pr
3000: 61 67 6d 61 20 61 75 78 2e 64 65 66 61 75 6c 74  agma aux.default
3010: 5f 63 61 63 68 65 5f 73 69 7a 65 20 3d 20 34 35  _cache_size = 45
3020: 36 3b 0a 20 20 20 20 70 72 61 67 6d 61 20 61 75  6;.    pragma au
3030: 78 2e 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20  x.cache_size;.  
3040: 20 20 70 72 61 67 6d 61 20 61 75 78 2e 64 65 66    pragma aux.def
3050: 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65 3b  ault_cache_size;
3060: 0a 20 20 7d 20 0a 7d 20 7b 34 35 36 20 34 35 36  .  } .} {456 456
3070: 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  }.do_test pragma
3080: 2d 34 2e 34 20 7b 0a 20 20 65 78 65 63 73 71 6c  -4.4 {.  execsql
3090: 20 7b 0a 20 20 20 20 70 72 61 67 6d 61 20 63 61   {.    pragma ca
30a0: 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 70 72  che_size;.    pr
30b0: 61 67 6d 61 20 64 65 66 61 75 6c 74 5f 63 61 63  agma default_cac
30c0: 68 65 5f 73 69 7a 65 3b 0a 20 20 7d 20 0a 7d 20  he_size;.  } .} 
30d0: 5b 6c 69 73 74 20 24 44 46 4c 54 5f 43 41 43 48  [list $DFLT_CACH
30e0: 45 5f 53 5a 20 24 44 46 4c 54 5f 43 41 43 48 45  E_SZ $DFLT_CACHE
30f0: 5f 53 5a 5d 0a 64 6f 5f 74 65 73 74 20 70 72 61  _SZ].do_test pra
3100: 67 6d 61 2d 34 2e 35 20 7b 0a 20 20 65 78 65 63  gma-4.5 {.  exec
3110: 73 71 6c 20 7b 0a 20 20 20 20 44 45 54 41 43 48  sql {.    DETACH
3120: 20 61 75 78 3b 0a 20 20 20 20 41 54 54 41 43 48   aux;.    ATTACH
3130: 20 27 74 65 73 74 33 2e 64 62 27 20 41 53 20 61   'test3.db' AS a
3140: 75 78 3b 0a 20 20 20 20 70 72 61 67 6d 61 20 61  ux;.    pragma a
3150: 75 78 2e 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20  ux.cache_size;. 
3160: 20 20 20 70 72 61 67 6d 61 20 61 75 78 2e 64 65     pragma aux.de
3170: 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65  fault_cache_size
3180: 3b 0a 20 20 7d 20 0a 7d 20 5b 6c 69 73 74 20 24  ;.  } .} [list $
3190: 44 46 4c 54 5f 43 41 43 48 45 5f 53 5a 20 24 44  DFLT_CACHE_SZ $D
31a0: 46 4c 54 5f 43 41 43 48 45 5f 53 5a 5d 0a 64 6f  FLT_CACHE_SZ].do
31b0: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 34 2e 36  _test pragma-4.6
31c0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
31d0: 20 20 20 44 45 54 41 43 48 20 61 75 78 3b 0a 20     DETACH aux;. 
31e0: 20 20 20 41 54 54 41 43 48 20 27 74 65 73 74 32     ATTACH 'test2
31f0: 2e 64 62 27 20 41 53 20 61 75 78 3b 0a 20 20 20  .db' AS aux;.   
3200: 20 70 72 61 67 6d 61 20 61 75 78 2e 63 61 63 68   pragma aux.cach
3210: 65 5f 73 69 7a 65 3b 0a 20 20 20 20 70 72 61 67  e_size;.    prag
3220: 6d 61 20 61 75 78 2e 64 65 66 61 75 6c 74 5f 63  ma aux.default_c
3230: 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 7d 20 0a  ache_size;.  } .
3240: 7d 20 7b 34 35 36 20 34 35 36 7d 0a 7d 20 3b 23  } {456 456}.} ;#
3250: 20 69 66 63 61 70 61 62 6c 65 20 70 61 67 65 72   ifcapable pager
3260: 5f 70 72 61 67 6d 61 73 0a 0a 23 20 54 65 73 74  _pragmas..# Test
3270: 20 74 68 61 74 20 6d 6f 64 69 66 79 69 6e 67 20   that modifying 
3280: 74 68 65 20 73 79 6e 63 2d 6c 65 76 65 6c 20 69  the sync-level i
3290: 6e 20 74 68 65 20 6d 69 64 64 6c 65 20 6f 66 20  n the middle of 
32a0: 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  a transaction is
32b0: 0a 23 20 64 69 73 61 6c 6c 6f 77 65 64 2e 0a 69  .# disallowed..i
32c0: 66 63 61 70 61 62 6c 65 20 70 61 67 65 72 5f 70  fcapable pager_p
32d0: 72 61 67 6d 61 73 20 7b 0a 64 6f 5f 74 65 73 74  ragmas {.do_test
32e0: 20 70 72 61 67 6d 61 2d 35 2e 30 20 7b 0a 20 20   pragma-5.0 {.  
32f0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 70 72  execsql {.    pr
3300: 61 67 6d 61 20 73 79 6e 63 68 72 6f 6e 6f 75 73  agma synchronous
3310: 3b 0a 20 20 7d 20 0a 7d 20 7b 32 7d 0a 64 6f 5f  ;.  } .} {2}.do_
3320: 74 65 73 74 20 70 72 61 67 6d 61 2d 35 2e 31 20  test pragma-5.1 
3330: 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20  {.  catchsql {. 
3340: 20 20 20 42 45 47 49 4e 3b 0a 20 20 20 20 70 72     BEGIN;.    pr
3350: 61 67 6d 61 20 73 79 6e 63 68 72 6f 6e 6f 75 73  agma synchronous
3360: 20 3d 20 4f 46 46 3b 0a 20 20 7d 20 0a 7d 20 7b   = OFF;.  } .} {
3370: 31 20 7b 53 61 66 65 74 79 20 6c 65 76 65 6c 20  1 {Safety level 
3380: 6d 61 79 20 6e 6f 74 20 62 65 20 63 68 61 6e 67  may not be chang
3390: 65 64 20 69 6e 73 69 64 65 20 61 20 74 72 61 6e  ed inside a tran
33a0: 73 61 63 74 69 6f 6e 7d 7d 0a 64 6f 5f 74 65 73  saction}}.do_tes
33b0: 74 20 70 72 61 67 6d 61 2d 35 2e 32 20 7b 0a 20  t pragma-5.2 {. 
33c0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 70   execsql {.    p
33d0: 72 61 67 6d 61 20 73 79 6e 63 68 72 6f 6e 6f 75  ragma synchronou
33e0: 73 3b 0a 20 20 7d 20 0a 7d 20 7b 32 7d 0a 63 61  s;.  } .} {2}.ca
33f0: 74 63 68 73 71 6c 20 7b 43 4f 4d 4d 49 54 3b 7d  tchsql {COMMIT;}
3400: 0a 7d 20 3b 23 20 69 66 63 61 70 61 62 6c 65 20  .} ;# ifcapable 
3410: 70 61 67 65 72 5f 70 72 61 67 6d 61 73 0a 0a 23  pager_pragmas..#
3420: 20 54 65 73 74 20 73 63 68 65 6d 61 2d 71 75 65   Test schema-que
3430: 72 79 20 70 72 61 67 6d 61 73 0a 23 0a 69 66 63  ry pragmas.#.ifc
3440: 61 70 61 62 6c 65 20 73 63 68 65 6d 61 5f 70 72  apable schema_pr
3450: 61 67 6d 61 73 20 7b 0a 69 66 63 61 70 61 62 6c  agmas {.ifcapabl
3460: 65 20 74 65 6d 70 64 62 26 26 61 74 74 61 63 68  e tempdb&&attach
3470: 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61   {.  do_test pra
3480: 67 6d 61 2d 36 2e 31 20 7b 0a 20 20 20 20 73 65  gma-6.1 {.    se
3490: 74 20 72 65 73 20 7b 7d 0a 20 20 20 20 65 78 65  t res {}.    exe
34a0: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46  csql {SELECT * F
34b0: 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f  ROM sqlite_temp_
34c0: 6d 61 73 74 65 72 7d 0a 20 20 20 20 66 6f 72 65  master}.    fore
34d0: 61 63 68 20 7b 69 64 78 20 6e 61 6d 65 20 66 69  ach {idx name fi
34e0: 6c 65 7d 20 5b 65 78 65 63 73 71 6c 20 7b 70 72  le} [execsql {pr
34f0: 61 67 6d 61 20 64 61 74 61 62 61 73 65 5f 6c 69  agma database_li
3500: 73 74 7d 5d 20 7b 0a 20 20 20 20 20 20 6c 61 70  st}] {.      lap
3510: 70 65 6e 64 20 72 65 73 20 24 69 64 78 20 24 6e  pend res $idx $n
3520: 61 6d 65 0a 20 20 20 20 7d 0a 20 20 20 20 73 65  ame.    }.    se
3530: 74 20 72 65 73 0a 20 20 7d 20 7b 30 20 6d 61 69  t res.  } {0 mai
3540: 6e 20 31 20 74 65 6d 70 20 32 20 61 75 78 7d 0a  n 1 temp 2 aux}.
3550: 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  }.do_test pragma
3560: 2d 36 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c  -6.2 {.  execsql
3570: 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41   {.    CREATE TA
3580: 42 4c 45 20 74 32 28 61 2c 62 2c 63 29 3b 0a 20  BLE t2(a,b,c);. 
3590: 20 20 20 70 72 61 67 6d 61 20 74 61 62 6c 65 5f     pragma table_
35a0: 69 6e 66 6f 28 74 32 29 0a 20 20 7d 0a 7d 20 7b  info(t2).  }.} {
35b0: 30 20 61 20 7b 7d 20 30 20 7b 7d 20 30 20 31 20  0 a {} 0 {} 0 1 
35c0: 62 20 7b 7d 20 30 20 7b 7d 20 30 20 32 20 63 20  b {} 0 {} 0 2 c 
35d0: 7b 7d 20 30 20 7b 7d 20 30 7d 0a 64 6f 5f 74 65  {} 0 {} 0}.do_te
35e0: 73 74 20 70 72 61 67 6d 61 2d 36 2e 32 2e 31 20  st pragma-6.2.1 
35f0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
3600: 20 20 70 72 61 67 6d 61 20 74 61 62 6c 65 5f 69    pragma table_i
3610: 6e 66 6f 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 62  nfo;.  }.} {}.db
3620: 20 6e 75 6c 6c 76 61 6c 75 65 20 3c 3c 4e 55 4c   nullvalue <<NUL
3630: 4c 3e 3e 0a 64 6f 5f 74 65 73 74 20 70 72 61 67  L>>.do_test prag
3640: 6d 61 2d 36 2e 32 2e 32 20 7b 0a 20 20 65 78 65  ma-6.2.2 {.  exe
3650: 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54  csql {.    CREAT
3660: 45 20 54 41 42 4c 45 20 74 35 28 0a 20 20 20 20  E TABLE t5(.    
3670: 20 20 61 20 54 45 58 54 20 44 45 46 41 55 4c 54    a TEXT DEFAULT
3680: 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 53 54 41   CURRENT_TIMESTA
3690: 4d 50 2c 20 0a 20 20 20 20 20 20 62 20 44 45 46  MP, .      b DEF
36a0: 41 55 4c 54 20 28 35 2b 33 29 2c 0a 20 20 20 20  AULT (5+3),.    
36b0: 20 20 63 20 54 45 58 54 2c 0a 20 20 20 20 20 20    c TEXT,.      
36c0: 64 20 49 4e 54 45 47 45 52 20 44 45 46 41 55 4c  d INTEGER DEFAUL
36d0: 54 20 4e 55 4c 4c 2c 0a 20 20 20 20 20 20 65 20  T NULL,.      e 
36e0: 54 45 58 54 20 44 45 46 41 55 4c 54 20 27 27 0a  TEXT DEFAULT ''.
36f0: 20 20 20 20 29 3b 0a 20 20 20 20 50 52 41 47 4d      );.    PRAGM
3700: 41 20 74 61 62 6c 65 5f 69 6e 66 6f 28 74 35 29  A table_info(t5)
3710: 3b 0a 20 20 7d 0a 7d 20 7b 30 20 61 20 54 45 58  ;.  }.} {0 a TEX
3720: 54 20 30 20 43 55 52 52 45 4e 54 5f 54 49 4d 45  T 0 CURRENT_TIME
3730: 53 54 41 4d 50 20 30 20 31 20 62 20 7b 7d 20 30  STAMP 0 1 b {} 0
3740: 20 35 2b 33 20 30 20 32 20 63 20 54 45 58 54 20   5+3 0 2 c TEXT 
3750: 30 20 3c 3c 4e 55 4c 4c 3e 3e 20 30 20 33 20 64  0 <<NULL>> 0 3 d
3760: 20 49 4e 54 45 47 45 52 20 30 20 4e 55 4c 4c 20   INTEGER 0 NULL 
3770: 30 20 34 20 65 20 54 45 58 54 20 30 20 27 27 20  0 4 e TEXT 0 '' 
3780: 30 7d 0a 64 62 20 6e 75 6c 6c 76 61 6c 75 65 20  0}.db nullvalue 
3790: 7b 7d 0a 69 66 63 61 70 61 62 6c 65 20 7b 66 6f  {}.ifcapable {fo
37a0: 72 65 69 67 6e 6b 65 79 7d 20 7b 0a 20 20 64 6f  reignkey} {.  do
37b0: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 36 2e 33  _test pragma-6.3
37c0: 2e 31 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  .1 {.    execsql
37d0: 20 7b 0a 20 20 20 20 20 20 43 52 45 41 54 45 20   {.      CREATE 
37e0: 54 41 42 4c 45 20 74 33 28 61 20 69 6e 74 20 72  TABLE t3(a int r
37f0: 65 66 65 72 65 6e 63 65 73 20 74 32 28 62 29 2c  eferences t2(b),
3800: 20 62 20 55 4e 49 51 55 45 29 3b 0a 20 20 20 20   b UNIQUE);.    
3810: 20 20 70 72 61 67 6d 61 20 66 6f 72 65 69 67 6e    pragma foreign
3820: 5f 6b 65 79 5f 6c 69 73 74 28 74 33 29 3b 0a 20  _key_list(t3);. 
3830: 20 20 20 7d 0a 20 20 7d 20 7b 30 20 30 20 74 32     }.  } {0 0 t2
3840: 20 61 20 62 20 7b 4e 4f 20 41 43 54 49 4f 4e 7d   a b {NO ACTION}
3850: 20 7b 4e 4f 20 41 43 54 49 4f 4e 7d 20 4e 4f 4e   {NO ACTION} NON
3860: 45 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61  E}.  do_test pra
3870: 67 6d 61 2d 36 2e 33 2e 32 20 7b 0a 20 20 20 20  gma-6.3.2 {.    
3880: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
3890: 70 72 61 67 6d 61 20 66 6f 72 65 69 67 6e 5f 6b  pragma foreign_k
38a0: 65 79 5f 6c 69 73 74 3b 0a 20 20 20 20 7d 0a 20  ey_list;.    }. 
38b0: 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20   } {}.  do_test 
38c0: 70 72 61 67 6d 61 2d 36 2e 33 2e 33 20 7b 0a 20  pragma-6.3.3 {. 
38d0: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
38e0: 20 20 20 70 72 61 67 6d 61 20 66 6f 72 65 69 67     pragma foreig
38f0: 6e 5f 6b 65 79 5f 6c 69 73 74 28 74 33 5f 62 6f  n_key_list(t3_bo
3900: 67 75 73 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 20  gus);.    }.  } 
3910: 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61  {}.  do_test pra
3920: 67 6d 61 2d 36 2e 33 2e 34 20 7b 0a 20 20 20 20  gma-6.3.4 {.    
3930: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
3940: 70 72 61 67 6d 61 20 66 6f 72 65 69 67 6e 5f 6b  pragma foreign_k
3950: 65 79 5f 6c 69 73 74 28 74 35 29 3b 0a 20 20 20  ey_list(t5);.   
3960: 20 7d 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74   }.  } {}.  do_t
3970: 65 73 74 20 70 72 61 67 6d 61 2d 36 2e 34 20 7b  est pragma-6.4 {
3980: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
3990: 20 20 20 20 20 70 72 61 67 6d 61 20 69 6e 64 65       pragma inde
39a0: 78 5f 6c 69 73 74 28 74 33 29 3b 0a 20 20 20 20  x_list(t3);.    
39b0: 7d 0a 20 20 7d 20 7b 30 20 73 71 6c 69 74 65 5f  }.  } {0 sqlite_
39c0: 61 75 74 6f 69 6e 64 65 78 5f 74 33 5f 31 20 31  autoindex_t3_1 1
39d0: 7d 0a 7d 0a 69 66 63 61 70 61 62 6c 65 20 7b 21  }.}.ifcapable {!
39e0: 66 6f 72 65 69 67 6e 6b 65 79 7d 20 7b 0a 20 20  foreignkey} {.  
39f0: 65 78 65 63 73 71 6c 20 7b 43 52 45 41 54 45 20  execsql {CREATE 
3a00: 54 41 42 4c 45 20 74 33 28 61 2c 62 20 55 4e 49  TABLE t3(a,b UNI
3a10: 51 55 45 29 7d 0a 7d 0a 64 6f 5f 74 65 73 74 20  QUE)}.}.do_test 
3a20: 70 72 61 67 6d 61 2d 36 2e 35 2e 31 20 7b 0a 20  pragma-6.5.1 {. 
3a30: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43   execsql {.    C
3a40: 52 45 41 54 45 20 49 4e 44 45 58 20 74 33 69 31  REATE INDEX t3i1
3a50: 20 4f 4e 20 74 33 28 61 2c 62 29 3b 0a 20 20 20   ON t3(a,b);.   
3a60: 20 70 72 61 67 6d 61 20 69 6e 64 65 78 5f 69 6e   pragma index_in
3a70: 66 6f 28 74 33 69 31 29 3b 0a 20 20 7d 0a 7d 20  fo(t3i1);.  }.} 
3a80: 7b 30 20 30 20 61 20 31 20 31 20 62 7d 0a 64 6f  {0 0 a 1 1 b}.do
3a90: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 36 2e 35  _test pragma-6.5
3aa0: 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .2 {.  execsql {
3ab0: 0a 20 20 20 20 70 72 61 67 6d 61 20 69 6e 64 65  .    pragma inde
3ac0: 78 5f 69 6e 66 6f 28 74 33 69 31 5f 62 6f 67 75  x_info(t3i1_bogu
3ad0: 73 29 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a 69 66  s);.  }.} {}..if
3ae0: 63 61 70 61 62 6c 65 20 74 65 6d 70 64 62 20 7b  capable tempdb {
3af0: 0a 20 20 23 20 54 65 73 74 20 66 6f 72 20 74 69  .  # Test for ti
3b00: 63 6b 65 74 20 23 33 33 32 30 2e 20 57 68 65 6e  cket #3320. When
3b10: 20 61 20 74 65 6d 70 20 74 61 62 6c 65 20 6f 66   a temp table of
3b20: 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 65   the same name e
3b30: 78 69 73 74 73 2c 20 6d 61 6b 65 0a 20 20 23 20  xists, make.  # 
3b40: 73 75 72 65 20 74 68 65 20 73 63 68 65 6d 61 20  sure the schema 
3b50: 6f 66 20 74 68 65 20 6d 61 69 6e 20 74 61 62 6c  of the main tabl
3b60: 65 20 63 61 6e 20 73 74 69 6c 6c 20 62 65 20 71  e can still be q
3b70: 75 65 72 69 65 64 20 75 73 69 6e 67 20 0a 20 20  ueried using .  
3b80: 23 20 22 70 72 61 67 6d 61 20 74 61 62 6c 65 5f  # "pragma table_
3b90: 69 6e 66 6f 22 3a 0a 20 20 64 6f 5f 74 65 73 74  info":.  do_test
3ba0: 20 70 72 61 67 6d 61 2d 36 2e 36 2e 31 20 7b 0a   pragma-6.6.1 {.
3bb0: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20      execsql {.  
3bc0: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
3bd0: 20 74 72 69 61 6c 28 63 6f 6c 5f 6d 61 69 6e 29   trial(col_main)
3be0: 3b 0a 20 20 20 20 20 20 43 52 45 41 54 45 20 54  ;.      CREATE T
3bf0: 45 4d 50 20 54 41 42 4c 45 20 74 72 69 61 6c 28  EMP TABLE trial(
3c00: 63 6f 6c 5f 74 65 6d 70 29 3b 0a 20 20 20 20 7d  col_temp);.    }
3c10: 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65 73  .  } {}.  do_tes
3c20: 74 20 70 72 61 67 6d 61 2d 36 2e 36 2e 32 20 7b  t pragma-6.6.2 {
3c30: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
3c40: 20 20 20 20 20 50 52 41 47 4d 41 20 74 61 62 6c       PRAGMA tabl
3c50: 65 5f 69 6e 66 6f 28 74 72 69 61 6c 29 3b 0a 20  e_info(trial);. 
3c60: 20 20 20 7d 0a 20 20 7d 20 7b 30 20 63 6f 6c 5f     }.  } {0 col_
3c70: 74 65 6d 70 20 7b 7d 20 30 20 7b 7d 20 30 7d 0a  temp {} 0 {} 0}.
3c80: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
3c90: 2d 36 2e 36 2e 33 20 7b 0a 20 20 20 20 65 78 65  -6.6.3 {.    exe
3ca0: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41  csql {.      PRA
3cb0: 47 4d 41 20 74 65 6d 70 2e 74 61 62 6c 65 5f 69  GMA temp.table_i
3cc0: 6e 66 6f 28 74 72 69 61 6c 29 3b 0a 20 20 20 20  nfo(trial);.    
3cd0: 7d 0a 20 20 7d 20 7b 30 20 63 6f 6c 5f 74 65 6d  }.  } {0 col_tem
3ce0: 70 20 7b 7d 20 30 20 7b 7d 20 30 7d 0a 20 20 64  p {} 0 {} 0}.  d
3cf0: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 36 2e  o_test pragma-6.
3d00: 36 2e 34 20 7b 0a 20 20 20 20 65 78 65 63 73 71  6.4 {.    execsq
3d10: 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41  l {.      PRAGMA
3d20: 20 6d 61 69 6e 2e 74 61 62 6c 65 5f 69 6e 66 6f   main.table_info
3d30: 28 74 72 69 61 6c 29 3b 0a 20 20 20 20 7d 0a 20  (trial);.    }. 
3d40: 20 7d 20 7b 30 20 63 6f 6c 5f 6d 61 69 6e 20 7b   } {0 col_main {
3d50: 7d 20 30 20 7b 7d 20 30 7d 0a 7d 0a 0a 64 6f 5f  } 0 {} 0}.}..do_
3d60: 74 65 73 74 20 70 72 61 67 6d 61 2d 36 2e 37 20  test pragma-6.7 
3d70: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
3d80: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
3d90: 65 73 74 5f 74 61 62 6c 65 28 0a 20 20 20 20 20  est_table(.     
3da0: 20 6f 6e 65 20 49 4e 54 20 4e 4f 54 20 4e 55 4c   one INT NOT NUL
3db0: 4c 20 44 45 46 41 55 4c 54 20 2d 31 2c 20 0a 20  L DEFAULT -1, . 
3dc0: 20 20 20 20 20 74 77 6f 20 74 65 78 74 2c 0a 20       two text,. 
3dd0: 20 20 20 20 20 74 68 72 65 65 20 56 41 52 43 48       three VARCH
3de0: 41 52 28 34 35 2c 20 36 35 29 20 44 45 46 41 55  AR(45, 65) DEFAU
3df0: 4c 54 20 27 61 62 63 64 65 27 2c 0a 20 20 20 20  LT 'abcde',.    
3e00: 20 20 66 6f 75 72 20 52 45 41 4c 20 44 45 46 41    four REAL DEFA
3e10: 55 4c 54 20 58 27 61 62 63 64 65 66 27 2c 0a 20  ULT X'abcdef',. 
3e20: 20 20 20 20 20 66 69 76 65 20 44 45 46 41 55 4c       five DEFAUL
3e30: 54 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 0a 20  T CURRENT_TIME. 
3e40: 20 20 20 29 3b 0a 20 20 20 20 50 52 41 47 4d 41     );.    PRAGMA
3e50: 20 74 61 62 6c 65 5f 69 6e 66 6f 28 74 65 73 74   table_info(test
3e60: 5f 74 61 62 6c 65 29 3b 0a 20 20 7d 0a 7d 20 5b  _table);.  }.} [
3e70: 63 6f 6e 63 61 74 20 5c 0a 20 20 7b 30 20 6f 6e  concat \.  {0 on
3e80: 65 20 49 4e 54 20 31 20 2d 31 20 30 7d 20 5c 0a  e INT 1 -1 0} \.
3e90: 20 20 7b 31 20 74 77 6f 20 74 65 78 74 20 30 20    {1 two text 0 
3ea0: 7b 7d 20 30 7d 20 5c 0a 20 20 7b 32 20 74 68 72  {} 0} \.  {2 thr
3eb0: 65 65 20 7b 56 41 52 43 48 41 52 28 34 35 2c 20  ee {VARCHAR(45, 
3ec0: 36 35 29 7d 20 30 20 27 61 62 63 64 65 27 20 30  65)} 0 'abcde' 0
3ed0: 7d 20 5c 0a 20 20 7b 33 20 66 6f 75 72 20 52 45  } \.  {3 four RE
3ee0: 41 4c 20 30 20 58 27 61 62 63 64 65 66 27 20 30  AL 0 X'abcdef' 0
3ef0: 7d 20 5c 0a 20 20 7b 34 20 66 69 76 65 20 7b 7d  } \.  {4 five {}
3f00: 20 30 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 20   0 CURRENT_TIME 
3f10: 30 7d 20 5c 0a 5d 0a 7d 20 3b 23 20 69 66 63 61  0} \.].} ;# ifca
3f20: 70 61 62 6c 65 20 73 63 68 65 6d 61 5f 70 72 61  pable schema_pra
3f30: 67 6d 61 73 0a 23 20 4d 69 73 63 65 6c 6c 61 6e  gmas.# Miscellan
3f40: 65 6f 75 73 20 74 65 73 74 73 0a 23 0a 69 66 63  eous tests.#.ifc
3f50: 61 70 61 62 6c 65 20 73 63 68 65 6d 61 5f 70 72  apable schema_pr
3f60: 61 67 6d 61 73 20 7b 0a 64 6f 5f 74 65 73 74 20  agmas {.do_test 
3f70: 70 72 61 67 6d 61 2d 37 2e 31 2e 31 20 7b 0a 20  pragma-7.1.1 {. 
3f80: 20 23 20 4d 61 6b 65 20 73 75 72 65 20 61 20 70   # Make sure a p
3f90: 72 61 67 6d 61 20 6b 6e 6f 77 73 20 74 6f 20 72  ragma knows to r
3fa0: 65 61 64 20 74 68 65 20 73 63 68 65 6d 61 20 69  ead the schema i
3fb0: 66 20 69 74 20 6e 65 65 64 73 20 74 6f 0a 20 20  f it needs to.  
3fc0: 64 62 20 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74  db close.  sqlit
3fd0: 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20  e3 db test.db.  
3fe0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 70 72  execsql {.    pr
3ff0: 61 67 6d 61 20 69 6e 64 65 78 5f 6c 69 73 74 28  agma index_list(
4000: 74 33 29 3b 0a 20 20 7d 0a 7d 20 7b 30 20 74 33  t3);.  }.} {0 t3
4010: 69 31 20 30 20 31 20 73 71 6c 69 74 65 5f 61 75  i1 0 1 sqlite_au
4020: 74 6f 69 6e 64 65 78 5f 74 33 5f 31 20 31 7d 0a  toindex_t3_1 1}.
4030: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 37  do_test pragma-7
4040: 2e 31 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c  .1.2 {.  execsql
4050: 20 7b 0a 20 20 20 20 70 72 61 67 6d 61 20 69 6e   {.    pragma in
4060: 64 65 78 5f 6c 69 73 74 28 74 33 5f 62 6f 67 75  dex_list(t3_bogu
4070: 73 29 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 7d 20 3b  s);.  }.} {}.} ;
4080: 23 20 69 66 63 61 70 61 62 6c 65 20 73 63 68 65  # ifcapable sche
4090: 6d 61 5f 70 72 61 67 6d 61 73 0a 69 66 63 61 70  ma_pragmas.ifcap
40a0: 61 62 6c 65 20 7b 75 74 66 31 36 7d 20 7b 0a 20  able {utf16} {. 
40b0: 20 69 66 20 7b 5b 70 65 72 6d 75 74 61 74 69 6f   if {[permutatio
40c0: 6e 5d 20 3d 3d 20 22 22 7d 20 7b 0a 20 20 20 20  n] == ""} {.    
40d0: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 37  do_test pragma-7
40e0: 2e 32 20 7b 0a 20 20 20 20 20 20 64 62 20 63 6c  .2 {.      db cl
40f0: 6f 73 65 0a 20 20 20 20 20 20 73 71 6c 69 74 65  ose.      sqlite
4100: 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20 20  3 db test.db.   
4110: 20 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20     catchsql {.  
4120: 20 20 20 20 20 20 70 72 61 67 6d 61 20 65 6e 63        pragma enc
4130: 6f 64 69 6e 67 3d 62 6f 67 75 73 3b 0a 20 20 20  oding=bogus;.   
4140: 20 20 20 7d 0a 20 20 20 20 7d 20 7b 31 20 7b 75     }.    } {1 {u
4150: 6e 73 75 70 70 6f 72 74 65 64 20 65 6e 63 6f 64  nsupported encod
4160: 69 6e 67 3a 20 62 6f 67 75 73 7d 7d 0a 20 20 7d  ing: bogus}}.  }
4170: 0a 7d 0a 69 66 63 61 70 61 62 6c 65 20 74 65 6d  .}.ifcapable tem
4180: 70 64 62 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20  pdb {.  do_test 
4190: 70 72 61 67 6d 61 2d 37 2e 33 20 7b 0a 20 20 20  pragma-7.3 {.   
41a0: 20 64 62 20 63 6c 6f 73 65 0a 20 20 20 20 73 71   db close.    sq
41b0: 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64 62  lite3 db test.db
41c0: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
41d0: 20 20 20 20 20 70 72 61 67 6d 61 20 6c 6f 63 6b       pragma lock
41e0: 5f 73 74 61 74 75 73 3b 0a 20 20 20 20 7d 0a 20  _status;.    }. 
41f0: 20 7d 20 7b 6d 61 69 6e 20 75 6e 6c 6f 63 6b 65   } {main unlocke
4200: 64 20 74 65 6d 70 20 63 6c 6f 73 65 64 7d 0a 7d  d temp closed}.}
4210: 20 65 6c 73 65 20 7b 0a 20 20 64 6f 5f 74 65 73   else {.  do_tes
4220: 74 20 70 72 61 67 6d 61 2d 37 2e 33 20 7b 0a 20  t pragma-7.3 {. 
4230: 20 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 20 20     db close.    
4240: 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e  sqlite3 db test.
4250: 64 62 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b  db.    execsql {
4260: 0a 20 20 20 20 20 20 70 72 61 67 6d 61 20 6c 6f  .      pragma lo
4270: 63 6b 5f 73 74 61 74 75 73 3b 0a 20 20 20 20 7d  ck_status;.    }
4280: 0a 20 20 7d 20 7b 6d 61 69 6e 20 75 6e 6c 6f 63  .  } {main unloc
4290: 6b 65 64 7d 0a 7d 0a 0a 0a 23 2d 2d 2d 2d 2d 2d  ked}.}...#------
42a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
42b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
42c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
42d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
42e0: 0a 23 20 54 65 73 74 20 63 61 73 65 73 20 70 72  .# Test cases pr
42f0: 61 67 6d 61 2d 38 2e 2a 20 74 65 73 74 20 74 68  agma-8.* test th
4300: 65 20 22 50 52 41 47 4d 41 20 73 63 68 65 6d 61  e "PRAGMA schema
4310: 5f 76 65 72 73 69 6f 6e 22 20 61 6e 64 20 22 50  _version" and "P
4320: 52 41 47 4d 41 0a 23 20 75 73 65 72 5f 76 65 72  RAGMA.# user_ver
4330: 73 69 6f 6e 22 20 73 74 61 74 65 6d 65 6e 74 73  sion" statements
4340: 2e 0a 23 0a 23 20 70 72 61 67 6d 61 2d 38 2e 31  ..#.# pragma-8.1
4350: 3a 20 50 52 41 47 4d 41 20 73 63 68 65 6d 61 5f  : PRAGMA schema_
4360: 76 65 72 73 69 6f 6e 0a 23 20 70 72 61 67 6d 61  version.# pragma
4370: 2d 38 2e 32 3a 20 50 52 41 47 4d 41 20 75 73 65  -8.2: PRAGMA use
4380: 72 5f 76 65 72 73 69 6f 6e 0a 23 0a 0a 69 66 63  r_version.#..ifc
4390: 61 70 61 62 6c 65 20 73 63 68 65 6d 61 5f 76 65  apable schema_ve
43a0: 72 73 69 6f 6e 20 7b 0a 0a 23 20 46 69 72 73 74  rsion {..# First
43b0: 20 63 68 65 63 6b 20 74 68 61 74 20 77 65 20 63   check that we c
43c0: 61 6e 20 73 65 74 20 74 68 65 20 73 63 68 65 6d  an set the schem
43d0: 61 20 76 65 72 73 69 6f 6e 20 61 6e 64 20 74 68  a version and th
43e0: 65 6e 20 72 65 74 72 69 65 76 65 20 74 68 65 0a  en retrieve the.
43f0: 23 20 73 61 6d 65 20 76 61 6c 75 65 2e 0a 64 6f  # same value..do
4400: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 31  _test pragma-8.1
4410: 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .1 {.  execsql {
4420: 0a 20 20 20 20 50 52 41 47 4d 41 20 73 63 68 65  .    PRAGMA sche
4430: 6d 61 5f 76 65 72 73 69 6f 6e 20 3d 20 31 30 35  ma_version = 105
4440: 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65  ;.  }.} {}.do_te
4450: 73 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e 32 20  st pragma-8.1.2 
4460: 7b 0a 20 20 65 78 65 63 73 71 6c 32 20 7b 0a 20  {.  execsql2 {. 
4470: 20 20 20 50 52 41 47 4d 41 20 73 63 68 65 6d 61     PRAGMA schema
4480: 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 7d 0a 7d 20  _version;.  }.} 
4490: 7b 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 20  {schema_version 
44a0: 31 30 35 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61  105}.do_test pra
44b0: 67 6d 61 2d 38 2e 31 2e 33 20 7b 0a 20 20 65 78  gma-8.1.3 {.  ex
44c0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47  ecsql {.    PRAG
44d0: 4d 41 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f  MA schema_versio
44e0: 6e 20 3d 20 31 30 36 3b 0a 20 20 7d 0a 7d 20 7b  n = 106;.  }.} {
44f0: 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  }.do_test pragma
4500: 2d 38 2e 31 2e 34 20 7b 0a 20 20 65 78 65 63 73  -8.1.4 {.  execs
4510: 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20  ql {.    PRAGMA 
4520: 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 3b 0a  schema_version;.
4530: 20 20 7d 0a 7d 20 31 30 36 0a 0a 23 20 43 68 65    }.} 106..# Che
4540: 63 6b 20 74 68 61 74 20 63 72 65 61 74 69 6e 67  ck that creating
4550: 20 61 20 74 61 62 6c 65 20 6d 6f 64 69 66 69 65   a table modifie
4560: 73 20 74 68 65 20 73 63 68 65 6d 61 2d 76 65 72  s the schema-ver
4570: 73 69 6f 6e 20 28 74 68 69 73 20 69 73 20 72 65  sion (this is re
4580: 61 6c 6c 79 0a 23 20 74 6f 20 76 65 72 69 66 79  ally.# to verify
4590: 20 74 68 61 74 20 74 68 65 20 76 61 6c 75 65 20   that the value 
45a0: 62 65 69 6e 67 20 72 65 61 64 20 69 73 20 69 6e  being read is in
45b0: 20 66 61 63 74 20 74 68 65 20 73 63 68 65 6d 61   fact the schema
45c0: 20 76 65 72 73 69 6f 6e 29 2e 0a 64 6f 5f 74 65   version)..do_te
45d0: 73 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e 35 20  st pragma-8.1.5 
45e0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
45f0: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
4600: 34 28 61 2c 20 62 2c 20 63 29 3b 0a 20 20 20 20  4(a, b, c);.    
4610: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 34 20 56  INSERT INTO t4 V
4620: 41 4c 55 45 53 28 31 2c 20 32 2c 20 33 29 3b 0a  ALUES(1, 2, 3);.
4630: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
4640: 4d 20 74 34 3b 0a 20 20 7d 0a 7d 20 7b 31 20 32  M t4;.  }.} {1 2
4650: 20 33 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67   3}.do_test prag
4660: 6d 61 2d 38 2e 31 2e 36 20 7b 0a 20 20 65 78 65  ma-8.1.6 {.  exe
4670: 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d  csql {.    PRAGM
4680: 41 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e  A schema_version
4690: 3b 0a 20 20 7d 0a 7d 20 31 30 37 0a 0a 23 20 4e  ;.  }.} 107..# N
46a0: 6f 77 20 6f 70 65 6e 20 61 20 73 65 63 6f 6e 64  ow open a second
46b0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 74   connection to t
46c0: 68 65 20 64 61 74 61 62 61 73 65 2e 20 45 6e 73  he database. Ens
46d0: 75 72 65 20 74 68 61 74 20 63 68 61 6e 67 69 6e  ure that changin
46e0: 67 20 74 68 65 0a 23 20 73 63 68 65 6d 61 2d 76  g the.# schema-v
46f0: 65 72 73 69 6f 6e 20 75 73 69 6e 67 20 74 68 65  ersion using the
4700: 20 66 69 72 73 74 20 63 6f 6e 6e 65 63 74 69 6f   first connectio
4710: 6e 20 66 6f 72 63 65 73 20 74 68 65 20 73 65 63  n forces the sec
4720: 6f 6e 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 0a 23  ond connection.#
4730: 20 74 6f 20 72 65 6c 6f 61 64 20 74 68 65 20 73   to reload the s
4740: 63 68 65 6d 61 2e 20 54 68 69 73 20 68 61 73 20  chema. This has 
4750: 74 6f 20 62 65 20 64 6f 6e 65 20 75 73 69 6e 67  to be done using
4760: 20 74 68 65 20 43 2d 41 50 49 20 74 65 73 74 20   the C-API test 
4770: 66 75 6e 63 74 69 6f 6e 73 2c 0a 23 20 62 65 63  functions,.# bec
4780: 61 75 73 65 20 74 68 65 20 54 43 4c 20 41 50 49  ause the TCL API
4790: 20 61 63 63 6f 75 6e 74 73 20 66 6f 72 20 53 43   accounts for SC
47a0: 48 45 4d 41 5f 45 52 52 4f 52 20 61 6e 64 20 72  HEMA_ERROR and r
47b0: 65 74 72 69 65 73 20 74 68 65 20 71 75 65 72 79  etries the query
47c0: 2e 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  ..do_test pragma
47d0: 2d 38 2e 31 2e 37 20 7b 0a 20 20 73 71 6c 69 74  -8.1.7 {.  sqlit
47e0: 65 33 20 64 62 32 20 74 65 73 74 2e 64 62 3b 20  e3 db2 test.db; 
47f0: 73 65 74 20 3a 3a 44 42 32 20 5b 73 71 6c 69 74  set ::DB2 [sqlit
4800: 65 33 5f 63 6f 6e 6e 65 63 74 69 6f 6e 5f 70 6f  e3_connection_po
4810: 69 6e 74 65 72 20 64 62 32 5d 0a 20 20 65 78 65  inter db2].  exe
4820: 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43  csql {.    SELEC
4830: 54 20 2a 20 46 52 4f 4d 20 74 34 3b 0a 20 20 7d  T * FROM t4;.  }
4840: 20 64 62 32 0a 7d 20 7b 31 20 32 20 33 7d 0a 64   db2.} {1 2 3}.d
4850: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e  o_test pragma-8.
4860: 31 2e 38 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  1.8 {.  execsql 
4870: 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 73 63 68  {.    PRAGMA sch
4880: 65 6d 61 5f 76 65 72 73 69 6f 6e 20 3d 20 31 30  ema_version = 10
4890: 38 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74  8;.  }.} {}.do_t
48a0: 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e 39  est pragma-8.1.9
48b0: 20 7b 0a 20 20 73 65 74 20 3a 3a 53 54 4d 54 20   {.  set ::STMT 
48c0: 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65  [sqlite3_prepare
48d0: 20 24 3a 3a 44 42 32 20 22 53 45 4c 45 43 54 20   $::DB2 "SELECT 
48e0: 2a 20 46 52 4f 4d 20 74 34 22 20 2d 31 20 44 55  * FROM t4" -1 DU
48f0: 4d 4d 59 5d 0a 20 20 73 71 6c 69 74 65 33 5f 73  MMY].  sqlite3_s
4900: 74 65 70 20 24 3a 3a 53 54 4d 54 0a 7d 20 53 51  tep $::STMT.} SQ
4910: 4c 49 54 45 5f 45 52 52 4f 52 0a 64 6f 5f 74 65  LITE_ERROR.do_te
4920: 73 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e 31 30  st pragma-8.1.10
4930: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e   {.  sqlite3_fin
4940: 61 6c 69 7a 65 20 24 3a 3a 53 54 4d 54 0a 7d 20  alize $::STMT.} 
4950: 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 0a 0a 23  SQLITE_SCHEMA..#
4960: 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20 73   Make sure the s
4970: 63 68 65 6d 61 2d 76 65 72 73 69 6f 6e 20 63 61  chema-version ca
4980: 6e 20 62 65 20 6d 61 6e 69 70 75 6c 61 74 65 64  n be manipulated
4990: 20 69 6e 20 61 6e 20 61 74 74 61 63 68 65 64 20   in an attached 
49a0: 64 61 74 61 62 61 73 65 2e 0a 66 6f 72 63 65 64  database..forced
49b0: 65 6c 65 74 65 20 74 65 73 74 32 2e 64 62 0a 66  elete test2.db.f
49c0: 6f 72 63 65 64 65 6c 65 74 65 20 74 65 73 74 32  orcedelete test2
49d0: 2e 64 62 2d 6a 6f 75 72 6e 61 6c 0a 69 66 63 61  .db-journal.ifca
49e0: 70 61 62 6c 65 20 61 74 74 61 63 68 20 7b 0a 20  pable attach {. 
49f0: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
4a00: 38 2e 31 2e 31 31 20 7b 0a 20 20 20 20 65 78 65  8.1.11 {.    exe
4a10: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 41 54 54  csql {.      ATT
4a20: 41 43 48 20 27 74 65 73 74 32 2e 64 62 27 20 41  ACH 'test2.db' A
4a30: 53 20 61 75 78 3b 0a 20 20 20 20 20 20 43 52 45  S aux;.      CRE
4a40: 41 54 45 20 54 41 42 4c 45 20 61 75 78 2e 74 31  ATE TABLE aux.t1
4a50: 28 61 2c 20 62 2c 20 63 29 3b 0a 20 20 20 20 20  (a, b, c);.     
4a60: 20 50 52 41 47 4d 41 20 61 75 78 2e 73 63 68 65   PRAGMA aux.sche
4a70: 6d 61 5f 76 65 72 73 69 6f 6e 20 3d 20 32 30 35  ma_version = 205
4a80: 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 7d 0a 20  ;.    }.  } {}. 
4a90: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
4aa0: 38 2e 31 2e 31 32 20 7b 0a 20 20 20 20 65 78 65  8.1.12 {.    exe
4ab0: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41  csql {.      PRA
4ac0: 47 4d 41 20 61 75 78 2e 73 63 68 65 6d 61 5f 76  GMA aux.schema_v
4ad0: 65 72 73 69 6f 6e 3b 0a 20 20 20 20 7d 0a 20 20  ersion;.    }.  
4ae0: 7d 20 32 30 35 0a 7d 0a 64 6f 5f 74 65 73 74 20  } 205.}.do_test 
4af0: 70 72 61 67 6d 61 2d 38 2e 31 2e 31 33 20 7b 0a  pragma-8.1.13 {.
4b00: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
4b10: 50 52 41 47 4d 41 20 73 63 68 65 6d 61 5f 76 65  PRAGMA schema_ve
4b20: 72 73 69 6f 6e 3b 0a 20 20 7d 0a 7d 20 31 30 38  rsion;.  }.} 108
4b30: 0a 0a 23 20 41 6e 64 20 63 68 65 63 6b 20 74 68  ..# And check th
4b40: 61 74 20 6d 6f 64 69 66 79 69 6e 67 20 74 68 65  at modifying the
4b50: 20 73 63 68 65 6d 61 2d 76 65 72 73 69 6f 6e 20   schema-version 
4b60: 69 6e 20 61 6e 20 61 74 74 61 63 68 65 64 20 64  in an attached d
4b70: 61 74 61 62 61 73 65 0a 23 20 66 6f 72 63 65 73  atabase.# forces
4b80: 20 74 68 65 20 73 65 63 6f 6e 64 20 63 6f 6e 6e   the second conn
4b90: 65 63 74 69 6f 6e 20 74 6f 20 72 65 6c 6f 61 64  ection to reload
4ba0: 20 74 68 65 20 73 63 68 65 6d 61 2e 0a 69 66 63   the schema..ifc
4bb0: 61 70 61 62 6c 65 20 61 74 74 61 63 68 20 7b 0a  apable attach {.
4bc0: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
4bd0: 2d 38 2e 31 2e 31 34 20 7b 0a 20 20 20 20 73 71  -8.1.14 {.    sq
4be0: 6c 69 74 65 33 20 64 62 32 20 74 65 73 74 2e 64  lite3 db2 test.d
4bf0: 62 3b 20 73 65 74 20 3a 3a 44 42 32 20 5b 73 71  b; set ::DB2 [sq
4c00: 6c 69 74 65 33 5f 63 6f 6e 6e 65 63 74 69 6f 6e  lite3_connection
4c10: 5f 70 6f 69 6e 74 65 72 20 64 62 32 5d 0a 20 20  _pointer db2].  
4c20: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
4c30: 20 20 41 54 54 41 43 48 20 27 74 65 73 74 32 2e    ATTACH 'test2.
4c40: 64 62 27 20 41 53 20 61 75 78 3b 0a 20 20 20 20  db' AS aux;.    
4c50: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
4c60: 61 75 78 2e 74 31 3b 0a 20 20 20 20 7d 20 64 62  aux.t1;.    } db
4c70: 32 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65  2.  } {}.  do_te
4c80: 73 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e 31 35  st pragma-8.1.15
4c90: 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b   {.    execsql {
4ca0: 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 61 75  .      PRAGMA au
4cb0: 78 2e 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e  x.schema_version
4cc0: 20 3d 20 32 30 36 3b 0a 20 20 20 20 7d 0a 20 20   = 206;.    }.  
4cd0: 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70  } {}.  do_test p
4ce0: 72 61 67 6d 61 2d 38 2e 31 2e 31 36 20 7b 0a 20  ragma-8.1.16 {. 
4cf0: 20 20 20 73 65 74 20 3a 3a 53 54 4d 54 20 5b 73     set ::STMT [s
4d00: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 20 24  qlite3_prepare $
4d10: 3a 3a 44 42 32 20 22 53 45 4c 45 43 54 20 2a 20  ::DB2 "SELECT * 
4d20: 46 52 4f 4d 20 61 75 78 2e 74 31 22 20 2d 31 20  FROM aux.t1" -1 
4d30: 44 55 4d 4d 59 5d 0a 20 20 20 20 73 71 6c 69 74  DUMMY].    sqlit
4d40: 65 33 5f 73 74 65 70 20 24 3a 3a 53 54 4d 54 0a  e3_step $::STMT.
4d50: 20 20 7d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52    } SQLITE_ERROR
4d60: 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .  do_test pragm
4d70: 61 2d 38 2e 31 2e 31 37 20 7b 0a 20 20 20 20 73  a-8.1.17 {.    s
4d80: 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20  qlite3_finalize 
4d90: 24 3a 3a 53 54 4d 54 0a 20 20 7d 20 53 51 4c 49  $::STMT.  } SQLI
4da0: 54 45 5f 53 43 48 45 4d 41 0a 20 20 64 6f 5f 74  TE_SCHEMA.  do_t
4db0: 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e 31  est pragma-8.1.1
4dc0: 38 20 7b 0a 20 20 20 20 64 62 32 20 63 6c 6f 73  8 {.    db2 clos
4dd0: 65 0a 20 20 7d 20 7b 7d 0a 7d 0a 0a 23 20 4e 6f  e.  } {}.}..# No
4de0: 77 20 74 65 73 74 20 74 68 61 74 20 74 68 65 20  w test that the 
4df0: 75 73 65 72 2d 76 65 72 73 69 6f 6e 20 63 61 6e  user-version can
4e00: 20 62 65 20 72 65 61 64 20 61 6e 64 20 77 72 69   be read and wri
4e10: 74 74 65 6e 20 28 61 6e 64 20 74 68 61 74 20 77  tten (and that w
4e20: 65 20 61 72 65 6e 27 74 0a 23 20 61 63 63 69 64  e aren't.# accid
4e30: 65 6e 74 61 6c 6c 79 20 6d 61 6e 69 70 75 6c 61  entally manipula
4e40: 74 69 6e 67 20 74 68 65 20 73 63 68 65 6d 61 2d  ting the schema-
4e50: 76 65 72 73 69 6f 6e 20 69 6e 73 74 65 61 64 29  version instead)
4e60: 2e 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  ..do_test pragma
4e70: 2d 38 2e 32 2e 31 20 7b 0a 20 20 65 78 65 63 73  -8.2.1 {.  execs
4e80: 71 6c 32 20 7b 0a 20 20 20 20 50 52 41 47 4d 41  ql2 {.    PRAGMA
4e90: 20 75 73 65 72 5f 76 65 72 73 69 6f 6e 3b 0a 20   user_version;. 
4ea0: 20 7d 0a 7d 20 7b 75 73 65 72 5f 76 65 72 73 69   }.} {user_versi
4eb0: 6f 6e 20 30 7d 0a 64 6f 5f 74 65 73 74 20 70 72  on 0}.do_test pr
4ec0: 61 67 6d 61 2d 38 2e 32 2e 32 20 7b 0a 20 20 65  agma-8.2.2 {.  e
4ed0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41  xecsql {.    PRA
4ee0: 47 4d 41 20 75 73 65 72 5f 76 65 72 73 69 6f 6e  GMA user_version
4ef0: 20 3d 20 32 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64   = 2;.  }.} {}.d
4f00: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e  o_test pragma-8.
4f10: 32 2e 33 2e 31 20 7b 0a 20 20 65 78 65 63 73 71  2.3.1 {.  execsq
4f20: 6c 32 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20  l2 {.    PRAGMA 
4f30: 75 73 65 72 5f 76 65 72 73 69 6f 6e 3b 0a 20 20  user_version;.  
4f40: 7d 0a 7d 20 7b 75 73 65 72 5f 76 65 72 73 69 6f  }.} {user_versio
4f50: 6e 20 32 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61  n 2}.do_test pra
4f60: 67 6d 61 2d 38 2e 32 2e 33 2e 32 20 7b 0a 20 20  gma-8.2.3.2 {.  
4f70: 64 62 20 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74  db close.  sqlit
4f80: 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20  e3 db test.db.  
4f90: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52  execsql {.    PR
4fa0: 41 47 4d 41 20 75 73 65 72 5f 76 65 72 73 69 6f  AGMA user_versio
4fb0: 6e 3b 0a 20 20 7d 0a 7d 20 7b 32 7d 0a 64 6f 5f  n;.  }.} {2}.do_
4fc0: 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 32 2e  test pragma-8.2.
4fd0: 34 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  4.1 {.  execsql 
4fe0: 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 73 63 68  {.    PRAGMA sch
4ff0: 65 6d 61 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 7d  ema_version;.  }
5000: 0a 7d 20 7b 31 30 38 7d 0a 69 66 63 61 70 61 62  .} {108}.ifcapab
5010: 6c 65 20 76 61 63 75 75 6d 20 7b 0a 20 20 64 6f  le vacuum {.  do
5020: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 32  _test pragma-8.2
5030: 2e 34 2e 32 20 7b 0a 20 20 20 20 65 78 65 63 73  .4.2 {.    execs
5040: 71 6c 20 7b 0a 20 20 20 20 20 20 56 41 43 55 55  ql {.      VACUU
5050: 4d 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20  M;.      PRAGMA 
5060: 75 73 65 72 5f 76 65 72 73 69 6f 6e 3b 0a 20 20  user_version;.  
5070: 20 20 7d 0a 20 20 7d 20 7b 32 7d 0a 20 20 64 6f    }.  } {2}.  do
5080: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 32  _test pragma-8.2
5090: 2e 34 2e 33 20 7b 0a 20 20 20 20 65 78 65 63 73  .4.3 {.    execs
50a0: 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d  ql {.      PRAGM
50b0: 41 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e  A schema_version
50c0: 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 31 30 39  ;.    }.  } {109
50d0: 7d 0a 7d 0a 0a 69 66 63 61 70 61 62 6c 65 20 61  }.}..ifcapable a
50e0: 74 74 61 63 68 20 7b 0a 20 20 64 62 20 65 76 61  ttach {.  db eva
50f0: 6c 20 7b 41 54 54 41 43 48 20 27 74 65 73 74 32  l {ATTACH 'test2
5100: 2e 64 62 27 20 41 53 20 61 75 78 7d 0a 20 20 0a  .db' AS aux}.  .
5110: 20 20 23 20 43 68 65 63 6b 20 74 68 61 74 20 74    # Check that t
5120: 68 65 20 75 73 65 72 2d 76 65 72 73 69 6f 6e 20  he user-version 
5130: 69 6e 20 74 68 65 20 61 75 78 69 6c 61 72 79 20  in the auxilary 
5140: 64 61 74 61 62 61 73 65 20 63 61 6e 20 62 65 20  database can be 
5150: 6d 61 6e 69 70 75 6c 61 74 65 64 20 28 0a 20 20  manipulated (.  
5160: 23 20 61 6e 64 20 74 68 61 74 20 77 65 20 61 72  # and that we ar
5170: 65 6e 27 74 20 61 63 63 69 64 65 6e 74 61 6c 6c  en't accidentall
5180: 79 20 6d 61 6e 69 70 75 6c 61 74 69 6e 67 20 74  y manipulating t
5190: 68 65 20 73 61 6d 65 20 69 6e 20 74 68 65 20 6d  he same in the m
51a0: 61 69 6e 20 64 62 29 2e 0a 20 20 64 6f 5f 74 65  ain db)..  do_te
51b0: 73 74 20 70 72 61 67 6d 61 2d 38 2e 32 2e 35 20  st pragma-8.2.5 
51c0: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a  {.    execsql {.
51d0: 20 20 20 20 20 20 50 52 41 47 4d 41 20 61 75 78        PRAGMA aux
51e0: 2e 75 73 65 72 5f 76 65 72 73 69 6f 6e 3b 0a 20  .user_version;. 
51f0: 20 20 20 7d 0a 20 20 7d 20 7b 30 7d 0a 20 20 64     }.  } {0}.  d
5200: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e  o_test pragma-8.
5210: 32 2e 36 20 7b 0a 20 20 20 20 65 78 65 63 73 71  2.6 {.    execsq
5220: 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41  l {.      PRAGMA
5230: 20 61 75 78 2e 75 73 65 72 5f 76 65 72 73 69 6f   aux.user_versio
5240: 6e 20 3d 20 33 3b 0a 20 20 20 20 7d 0a 20 20 7d  n = 3;.    }.  }
5250: 20 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72   {}.  do_test pr
5260: 61 67 6d 61 2d 38 2e 32 2e 37 20 7b 0a 20 20 20  agma-8.2.7 {.   
5270: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20   execsql {.     
5280: 20 50 52 41 47 4d 41 20 61 75 78 2e 75 73 65 72   PRAGMA aux.user
5290: 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 20 20 7d 0a  _version;.    }.
52a0: 20 20 7d 20 7b 33 7d 0a 20 20 64 6f 5f 74 65 73    } {3}.  do_tes
52b0: 74 20 70 72 61 67 6d 61 2d 38 2e 32 2e 38 20 7b  t pragma-8.2.8 {
52c0: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
52d0: 20 20 20 20 20 50 52 41 47 4d 41 20 6d 61 69 6e       PRAGMA main
52e0: 2e 75 73 65 72 5f 76 65 72 73 69 6f 6e 3b 0a 20  .user_version;. 
52f0: 20 20 20 7d 0a 20 20 7d 20 7b 32 7d 0a 20 20 0a     }.  } {2}.  .
5300: 20 20 23 20 4e 6f 77 20 63 68 65 63 6b 20 74 68    # Now check th
5310: 61 74 20 61 20 52 4f 4c 4c 42 41 43 4b 20 72 65  at a ROLLBACK re
5320: 73 65 74 73 20 74 68 65 20 75 73 65 72 2d 76 65  sets the user-ve
5330: 72 73 69 6f 6e 20 69 66 20 69 74 20 68 61 73 20  rsion if it has 
5340: 62 65 65 6e 20 6d 6f 64 69 66 69 65 64 0a 20 20  been modified.  
5350: 23 20 77 69 74 68 69 6e 20 61 20 74 72 61 6e 73  # within a trans
5360: 61 63 74 69 6f 6e 2e 0a 20 20 64 6f 5f 74 65 73  action..  do_tes
5370: 74 20 70 72 61 67 6d 61 2d 38 2e 32 2e 39 20 7b  t pragma-8.2.9 {
5380: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
5390: 20 20 20 20 20 42 45 47 49 4e 3b 0a 20 20 20 20       BEGIN;.    
53a0: 20 20 50 52 41 47 4d 41 20 61 75 78 2e 75 73 65    PRAGMA aux.use
53b0: 72 5f 76 65 72 73 69 6f 6e 20 3d 20 31 30 3b 0a  r_version = 10;.
53c0: 20 20 20 20 20 20 50 52 41 47 4d 41 20 75 73 65        PRAGMA use
53d0: 72 5f 76 65 72 73 69 6f 6e 20 3d 20 31 31 3b 0a  r_version = 11;.
53e0: 20 20 20 20 7d 0a 20 20 7d 20 7b 7d 0a 20 20 64      }.  } {}.  d
53f0: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e  o_test pragma-8.
5400: 32 2e 31 30 20 7b 0a 20 20 20 20 65 78 65 63 73  2.10 {.    execs
5410: 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d  ql {.      PRAGM
5420: 41 20 61 75 78 2e 75 73 65 72 5f 76 65 72 73 69  A aux.user_versi
5430: 6f 6e 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 31  on;.    }.  } {1
5440: 30 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61  0}.  do_test pra
5450: 67 6d 61 2d 38 2e 32 2e 31 31 20 7b 0a 20 20 20  gma-8.2.11 {.   
5460: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20   execsql {.     
5470: 20 50 52 41 47 4d 41 20 6d 61 69 6e 2e 75 73 65   PRAGMA main.use
5480: 72 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 20 20 7d  r_version;.    }
5490: 0a 20 20 7d 20 7b 31 31 7d 0a 20 20 64 6f 5f 74  .  } {11}.  do_t
54a0: 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 32 2e 31  est pragma-8.2.1
54b0: 32 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  2 {.    execsql 
54c0: 7b 0a 20 20 20 20 20 20 52 4f 4c 4c 42 41 43 4b  {.      ROLLBACK
54d0: 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 61  ;.      PRAGMA a
54e0: 75 78 2e 75 73 65 72 5f 76 65 72 73 69 6f 6e 3b  ux.user_version;
54f0: 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 33 7d 0a 20  .    }.  } {3}. 
5500: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
5510: 38 2e 32 2e 31 33 20 7b 0a 20 20 20 20 65 78 65  8.2.13 {.    exe
5520: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41  csql {.      PRA
5530: 47 4d 41 20 6d 61 69 6e 2e 75 73 65 72 5f 76 65  GMA main.user_ve
5540: 72 73 69 6f 6e 3b 0a 20 20 20 20 7d 0a 20 20 7d  rsion;.    }.  }
5550: 20 7b 32 7d 0a 7d 0a 0a 23 20 54 72 79 20 61 20   {2}.}..# Try a 
5560: 6e 65 67 61 74 69 76 65 20 76 61 6c 75 65 20 66  negative value f
5570: 6f 72 20 74 68 65 20 75 73 65 72 2d 76 65 72 73  or the user-vers
5580: 69 6f 6e 0a 64 6f 5f 74 65 73 74 20 70 72 61 67  ion.do_test prag
5590: 6d 61 2d 38 2e 32 2e 31 34 20 7b 0a 20 20 65 78  ma-8.2.14 {.  ex
55a0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47  ecsql {.    PRAG
55b0: 4d 41 20 75 73 65 72 5f 76 65 72 73 69 6f 6e 20  MA user_version 
55c0: 3d 20 2d 34 35 30 3b 0a 20 20 7d 0a 7d 20 7b 7d  = -450;.  }.} {}
55d0: 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d  .do_test pragma-
55e0: 38 2e 32 2e 31 35 20 7b 0a 20 20 65 78 65 63 73  8.2.15 {.  execs
55f0: 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20  ql {.    PRAGMA 
5600: 75 73 65 72 5f 76 65 72 73 69 6f 6e 3b 0a 20 20  user_version;.  
5610: 7d 0a 7d 20 7b 2d 34 35 30 7d 0a 7d 20 3b 20 23  }.} {-450}.} ; #
5620: 20 69 66 63 61 70 61 62 6c 65 20 73 63 68 65 6d   ifcapable schem
5630: 61 5f 76 65 72 73 69 6f 6e 0a 0a 23 20 43 68 65  a_version..# Che
5640: 63 6b 20 74 6f 20 73 65 65 20 69 66 20 54 45 4d  ck to see if TEM
5650: 50 5f 53 54 4f 52 45 20 69 73 20 6d 65 6d 6f 72  P_STORE is memor
5660: 79 20 6f 72 20 64 69 73 6b 2e 20 20 52 65 74 75  y or disk.  Retu
5670: 72 6e 20 73 74 72 69 6e 67 73 0a 23 20 22 6d 65  rn strings.# "me
5680: 6d 6f 72 79 22 20 6f 72 20 22 64 69 73 6b 22 20  mory" or "disk" 
5690: 61 73 20 61 70 70 72 6f 70 72 69 61 74 65 2e 0a  as appropriate..
56a0: 23 0a 70 72 6f 63 20 63 68 65 63 6b 5f 74 65 6d  #.proc check_tem
56b0: 70 5f 73 74 6f 72 65 20 7b 7d 20 7b 0a 20 20 64  p_store {} {.  d
56c0: 62 20 65 76 61 6c 20 7b 43 52 45 41 54 45 20 54  b eval {CREATE T
56d0: 45 4d 50 20 54 41 42 4c 45 20 49 46 20 4e 4f 54  EMP TABLE IF NOT
56e0: 20 45 58 49 53 54 53 20 61 28 62 29 7d 0a 20 20   EXISTS a(b)}.  
56f0: 64 62 20 65 76 61 6c 20 7b 50 52 41 47 4d 41 20  db eval {PRAGMA 
5700: 64 61 74 61 62 61 73 65 5f 6c 69 73 74 7d 20 7b  database_list} {
5710: 0a 20 20 20 20 69 66 20 7b 24 6e 61 6d 65 3d 3d  .    if {$name==
5720: 22 74 65 6d 70 22 7d 20 7b 0a 20 20 20 20 20 20  "temp"} {.      
5730: 73 65 74 20 62 74 20 5b 62 74 72 65 65 5f 66 72  set bt [btree_fr
5740: 6f 6d 5f 64 62 20 64 62 20 31 5d 0a 20 20 20 20  om_db db 1].    
5750: 20 20 69 66 20 7b 5b 62 74 72 65 65 5f 69 73 6d    if {[btree_ism
5760: 65 6d 64 62 20 24 62 74 5d 7d 20 7b 0a 20 20 20  emdb $bt]} {.   
5770: 20 20 20 20 20 72 65 74 75 72 6e 20 22 6d 65 6d       return "mem
5780: 6f 72 79 22 0a 20 20 20 20 20 20 7d 0a 20 20 20  ory".      }.   
5790: 20 20 20 72 65 74 75 72 6e 20 22 64 69 73 6b 22     return "disk"
57a0: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74  .    }.  }.  ret
57b0: 75 72 6e 20 22 75 6e 6b 6e 6f 77 6e 22 0a 7d 0a  urn "unknown".}.
57c0: 0a 0a 23 20 54 65 73 74 20 74 65 6d 70 5f 73 74  ..# Test temp_st
57d0: 6f 72 65 20 61 6e 64 20 74 65 6d 70 5f 73 74 6f  ore and temp_sto
57e0: 72 65 5f 64 69 72 65 63 74 6f 72 79 20 70 72 61  re_directory pra
57f0: 67 6d 61 73 0a 23 0a 69 66 63 61 70 61 62 6c 65  gmas.#.ifcapable
5800: 20 70 61 67 65 72 5f 70 72 61 67 6d 61 73 20 7b   pager_pragmas {
5810: 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d  .do_test pragma-
5820: 39 2e 31 20 7b 0a 20 20 64 62 20 63 6c 6f 73 65  9.1 {.  db close
5830: 0a 20 20 73 71 6c 69 74 65 33 20 64 62 20 74 65  .  sqlite3 db te
5840: 73 74 2e 64 62 0a 20 20 65 78 65 63 73 71 6c 20  st.db.  execsql 
5850: 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d  {.    PRAGMA tem
5860: 70 5f 73 74 6f 72 65 3b 0a 20 20 7d 0a 7d 20 7b  p_store;.  }.} {
5870: 30 7d 0a 69 66 20 7b 24 54 45 4d 50 5f 53 54 4f  0}.if {$TEMP_STO
5880: 52 45 3c 3d 31 7d 20 7b 0a 20 20 64 6f 5f 74 65  RE<=1} {.  do_te
5890: 73 74 20 70 72 61 67 6d 61 2d 39 2e 31 2e 31 20  st pragma-9.1.1 
58a0: 7b 0a 20 20 20 20 63 68 65 63 6b 5f 74 65 6d 70  {.    check_temp
58b0: 5f 73 74 6f 72 65 0a 20 20 7d 20 7b 64 69 73 6b  _store.  } {disk
58c0: 7d 0a 7d 20 65 6c 73 65 20 7b 0a 20 20 64 6f 5f  }.} else {.  do_
58d0: 74 65 73 74 20 70 72 61 67 6d 61 2d 39 2e 31 2e  test pragma-9.1.
58e0: 31 20 7b 0a 20 20 20 20 63 68 65 63 6b 5f 74 65  1 {.    check_te
58f0: 6d 70 5f 73 74 6f 72 65 0a 20 20 7d 20 7b 6d 65  mp_store.  } {me
5900: 6d 6f 72 79 7d 0a 7d 0a 0a 64 6f 5f 74 65 73 74  mory}.}..do_test
5910: 20 70 72 61 67 6d 61 2d 39 2e 32 20 7b 0a 20 20   pragma-9.2 {.  
5920: 64 62 20 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74  db close.  sqlit
5930: 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20  e3 db test.db.  
5940: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52  execsql {.    PR
5950: 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 3d  AGMA temp_store=
5960: 66 69 6c 65 3b 0a 20 20 20 20 50 52 41 47 4d 41  file;.    PRAGMA
5970: 20 74 65 6d 70 5f 73 74 6f 72 65 3b 0a 20 20 7d   temp_store;.  }
5980: 0a 7d 20 7b 31 7d 0a 69 66 20 7b 24 54 45 4d 50  .} {1}.if {$TEMP
5990: 5f 53 54 4f 52 45 3d 3d 33 7d 20 7b 0a 20 20 23  _STORE==3} {.  #
59a0: 20 57 68 65 6e 20 54 45 4d 50 5f 53 54 4f 52 45   When TEMP_STORE
59b0: 20 69 73 20 33 2c 20 61 6c 77 61 79 73 20 75 73   is 3, always us
59c0: 65 20 6d 65 6d 6f 72 79 20 72 65 67 61 72 64 6c  e memory regardl
59d0: 65 73 73 20 6f 66 20 70 72 61 67 6d 61 20 73 65  ess of pragma se
59e0: 74 74 69 6e 67 73 2e 0a 20 20 64 6f 5f 74 65 73  ttings..  do_tes
59f0: 74 20 70 72 61 67 6d 61 2d 39 2e 32 2e 31 20 7b  t pragma-9.2.1 {
5a00: 0a 20 20 20 20 63 68 65 63 6b 5f 74 65 6d 70 5f  .    check_temp_
5a10: 73 74 6f 72 65 0a 20 20 7d 20 7b 6d 65 6d 6f 72  store.  } {memor
5a20: 79 7d 0a 7d 20 65 6c 73 65 20 7b 0a 20 20 64 6f  y}.} else {.  do
5a30: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 39 2e 32  _test pragma-9.2
5a40: 2e 31 20 7b 0a 20 20 20 20 63 68 65 63 6b 5f 74  .1 {.    check_t
5a50: 65 6d 70 5f 73 74 6f 72 65 0a 20 20 7d 20 7b 64  emp_store.  } {d
5a60: 69 73 6b 7d 0a 7d 0a 0a 64 6f 5f 74 65 73 74 20  isk}.}..do_test 
5a70: 70 72 61 67 6d 61 2d 39 2e 33 20 7b 0a 20 20 64  pragma-9.3 {.  d
5a80: 62 20 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74 65  b close.  sqlite
5a90: 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20 65  3 db test.db.  e
5aa0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41  xecsql {.    PRA
5ab0: 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 3d 6d  GMA temp_store=m
5ac0: 65 6d 6f 72 79 3b 0a 20 20 20 20 50 52 41 47 4d  emory;.    PRAGM
5ad0: 41 20 74 65 6d 70 5f 73 74 6f 72 65 3b 0a 20 20  A temp_store;.  
5ae0: 7d 0a 7d 20 7b 32 7d 0a 69 66 20 7b 24 54 45 4d  }.} {2}.if {$TEM
5af0: 50 5f 53 54 4f 52 45 3d 3d 30 7d 20 7b 0a 20 20  P_STORE==0} {.  
5b00: 23 20 57 68 65 6e 20 54 45 4d 50 5f 53 54 4f 52  # When TEMP_STOR
5b10: 45 20 69 73 20 30 2c 20 61 6c 77 61 79 73 20 75  E is 0, always u
5b20: 73 65 20 74 68 65 20 64 69 73 6b 20 72 65 67 61  se the disk rega
5b30: 72 64 6c 65 73 73 20 6f 66 20 70 72 61 67 6d 61  rdless of pragma
5b40: 20 73 65 74 74 69 6e 67 73 2e 0a 20 20 64 6f 5f   settings..  do_
5b50: 74 65 73 74 20 70 72 61 67 6d 61 2d 39 2e 33 2e  test pragma-9.3.
5b60: 31 20 7b 0a 20 20 20 20 63 68 65 63 6b 5f 74 65  1 {.    check_te
5b70: 6d 70 5f 73 74 6f 72 65 0a 20 20 7d 20 7b 64 69  mp_store.  } {di
5b80: 73 6b 7d 0a 7d 20 65 6c 73 65 20 7b 0a 20 20 64  sk}.} else {.  d
5b90: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 39 2e  o_test pragma-9.
5ba0: 33 2e 31 20 7b 0a 20 20 20 20 63 68 65 63 6b 5f  3.1 {.    check_
5bb0: 74 65 6d 70 5f 73 74 6f 72 65 0a 20 20 7d 20 7b  temp_store.  } {
5bc0: 6d 65 6d 6f 72 79 7d 0a 7d 0a 0a 64 6f 5f 74 65  memory}.}..do_te
5bd0: 73 74 20 70 72 61 67 6d 61 2d 39 2e 34 20 7b 0a  st pragma-9.4 {.
5be0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
5bf0: 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72  PRAGMA temp_stor
5c00: 65 5f 64 69 72 65 63 74 6f 72 79 3b 0a 20 20 7d  e_directory;.  }
5c10: 0a 7d 20 7b 7d 0a 69 66 63 61 70 61 62 6c 65 20  .} {}.ifcapable 
5c20: 77 73 64 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20  wsd {.  do_test 
5c30: 70 72 61 67 6d 61 2d 39 2e 35 20 7b 0a 20 20 20  pragma-9.5 {.   
5c40: 20 73 65 74 20 70 77 64 20 5b 73 74 72 69 6e 67   set pwd [string
5c50: 20 6d 61 70 20 7b 27 20 27 27 7d 20 5b 66 69 6c   map {' ''} [fil
5c60: 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 70 77  e nativename [pw
5c70: 64 5d 5d 5d 0a 20 20 20 20 65 78 65 63 73 71 6c  d]]].    execsql
5c80: 20 22 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20   ".      PRAGMA 
5c90: 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63  temp_store_direc
5ca0: 74 6f 72 79 3d 27 24 70 77 64 27 3b 0a 20 20 20  tory='$pwd';.   
5cb0: 20 22 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74   ".  } {}.  do_t
5cc0: 65 73 74 20 70 72 61 67 6d 61 2d 39 2e 36 20 7b  est pragma-9.6 {
5cd0: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 20 0a  .    execsql { .
5ce0: 20 20 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d        PRAGMA tem
5cf0: 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72  p_store_director
5d00: 79 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 5b 6c 69  y;.    }.  } [li
5d10: 73 74 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e  st [file nativen
5d20: 61 6d 65 20 5b 70 77 64 5d 5d 5d 0a 20 20 64 6f  ame [pwd]]].  do
5d30: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 39 2e 37  _test pragma-9.7
5d40: 20 7b 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20   {.    catchsql 
5d50: 7b 20 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20  { .      PRAGMA 
5d60: 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63  temp_store_direc
5d70: 74 6f 72 79 3d 27 2f 4e 4f 4e 2f 45 58 49 53 54  tory='/NON/EXIST
5d80: 45 4e 54 2f 50 41 54 48 2f 46 4f 4f 42 41 52 27  ENT/PATH/FOOBAR'
5d90: 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 31 20 7b  ;.    }.  } {1 {
5da0: 6e 6f 74 20 61 20 77 72 69 74 61 62 6c 65 20 64  not a writable d
5db0: 69 72 65 63 74 6f 72 79 7d 7d 0a 20 20 64 6f 5f  irectory}}.  do_
5dc0: 74 65 73 74 20 70 72 61 67 6d 61 2d 39 2e 38 20  test pragma-9.8 
5dd0: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 20  {.    execsql { 
5de0: 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 74 65  .      PRAGMA te
5df0: 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f  mp_store_directo
5e00: 72 79 3d 27 27 3b 0a 20 20 20 20 7d 0a 20 20 7d  ry='';.    }.  }
5e10: 20 7b 7d 0a 20 20 69 66 20 7b 21 5b 69 6e 66 6f   {}.  if {![info
5e20: 20 65 78 69 73 74 73 20 54 45 4d 50 5f 53 54 4f   exists TEMP_STO
5e30: 52 45 5d 20 7c 7c 20 24 54 45 4d 50 5f 53 54 4f  RE] || $TEMP_STO
5e40: 52 45 3c 3d 31 7d 20 7b 0a 20 20 20 20 69 66 63  RE<=1} {.    ifc
5e50: 61 70 61 62 6c 65 20 74 65 6d 70 64 62 20 7b 0a  apable tempdb {.
5e60: 20 20 20 20 20 20 64 6f 5f 74 65 73 74 20 70 72        do_test pr
5e70: 61 67 6d 61 2d 39 2e 39 20 7b 0a 20 20 20 20 20  agma-9.9 {.     
5e80: 20 20 20 65 78 65 63 73 71 6c 20 7b 20 0a 20 20     execsql { .  
5e90: 20 20 20 20 20 20 20 20 50 52 41 47 4d 41 20 74          PRAGMA t
5ea0: 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74  emp_store_direct
5eb0: 6f 72 79 3b 0a 20 20 20 20 20 20 20 20 20 20 50  ory;.          P
5ec0: 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65  RAGMA temp_store
5ed0: 3d 46 49 4c 45 3b 0a 20 20 20 20 20 20 20 20 20  =FILE;.         
5ee0: 20 43 52 45 41 54 45 20 54 45 4d 50 20 54 41 42   CREATE TEMP TAB
5ef0: 4c 45 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69  LE temp_store_di
5f00: 72 65 63 74 6f 72 79 5f 74 65 73 74 28 61 20 69  rectory_test(a i
5f10: 6e 74 65 67 65 72 29 3b 0a 20 20 20 20 20 20 20  nteger);.       
5f20: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
5f30: 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74  emp_store_direct
5f40: 6f 72 79 5f 74 65 73 74 20 76 61 6c 75 65 73 20  ory_test values 
5f50: 28 32 29 3b 0a 20 20 20 20 20 20 20 20 20 20 53  (2);.          S
5f60: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 65 6d  ELECT * FROM tem
5f70: 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72  p_store_director
5f80: 79 5f 74 65 73 74 3b 0a 20 20 20 20 20 20 20 20  y_test;.        
5f90: 7d 0a 20 20 20 20 20 20 7d 20 7b 32 7d 0a 20 20  }.      } {2}.  
5fa0: 20 20 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67      do_test prag
5fb0: 6d 61 2d 39 2e 31 30 20 7b 0a 20 20 20 20 20 20  ma-9.10 {.      
5fc0: 20 20 63 61 74 63 68 73 71 6c 20 22 0a 20 20 20    catchsql ".   
5fd0: 20 20 20 20 20 20 20 50 52 41 47 4d 41 20 74 65         PRAGMA te
5fe0: 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f  mp_store_directo
5ff0: 72 79 3d 27 24 70 77 64 27 3b 0a 20 20 20 20 20  ry='$pwd';.     
6000: 20 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52       SELECT * FR
6010: 4f 4d 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69  OM temp_store_di
6020: 72 65 63 74 6f 72 79 5f 74 65 73 74 3b 0a 20 20  rectory_test;.  
6030: 20 20 20 20 20 20 22 0a 20 20 20 20 20 20 7d 20        ".      } 
6040: 7b 31 20 7b 6e 6f 20 73 75 63 68 20 74 61 62 6c  {1 {no such tabl
6050: 65 3a 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69  e: temp_store_di
6060: 72 65 63 74 6f 72 79 5f 74 65 73 74 7d 7d 0a 20  rectory_test}}. 
6070: 20 20 20 7d 0a 20 20 7d 0a 7d 0a 64 6f 5f 74 65     }.  }.}.do_te
6080: 73 74 20 70 72 61 67 6d 61 2d 39 2e 31 31 20 7b  st pragma-9.11 {
6090: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
60a0: 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f   PRAGMA temp_sto
60b0: 72 65 20 3d 20 30 3b 0a 20 20 20 20 50 52 41 47  re = 0;.    PRAG
60c0: 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 3b 0a 20  MA temp_store;. 
60d0: 20 7d 0a 7d 20 7b 30 7d 0a 64 6f 5f 74 65 73 74   }.} {0}.do_test
60e0: 20 70 72 61 67 6d 61 2d 39 2e 31 32 20 7b 0a 20   pragma-9.12 {. 
60f0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50   execsql {.    P
6100: 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65  RAGMA temp_store
6110: 20 3d 20 31 3b 0a 20 20 20 20 50 52 41 47 4d 41   = 1;.    PRAGMA
6120: 20 74 65 6d 70 5f 73 74 6f 72 65 3b 0a 20 20 7d   temp_store;.  }
6130: 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 70  .} {1}.do_test p
6140: 72 61 67 6d 61 2d 39 2e 31 33 20 7b 0a 20 20 65  ragma-9.13 {.  e
6150: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41  xecsql {.    PRA
6160: 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 20 3d  GMA temp_store =
6170: 20 32 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 74   2;.    PRAGMA t
6180: 65 6d 70 5f 73 74 6f 72 65 3b 0a 20 20 7d 0a 7d  emp_store;.  }.}
6190: 20 7b 32 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61   {2}.do_test pra
61a0: 67 6d 61 2d 39 2e 31 34 20 7b 0a 20 20 65 78 65  gma-9.14 {.  exe
61b0: 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d  csql {.    PRAGM
61c0: 41 20 74 65 6d 70 5f 73 74 6f 72 65 20 3d 20 33  A temp_store = 3
61d0: 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d  ;.    PRAGMA tem
61e0: 70 5f 73 74 6f 72 65 3b 0a 20 20 7d 0a 7d 20 7b  p_store;.  }.} {
61f0: 30 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  0}.do_test pragm
6200: 61 2d 39 2e 31 35 20 7b 0a 20 20 63 61 74 63 68  a-9.15 {.  catch
6210: 73 71 6c 20 7b 0a 20 20 20 20 42 45 47 49 4e 20  sql {.    BEGIN 
6220: 45 58 43 4c 55 53 49 56 45 3b 0a 20 20 20 20 43  EXCLUSIVE;.    C
6230: 52 45 41 54 45 20 54 45 4d 50 20 54 41 42 4c 45  REATE TEMP TABLE
6240: 20 74 65 6d 70 5f 74 61 62 6c 65 28 74 29 3b 0a   temp_table(t);.
6250: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
6260: 74 65 6d 70 5f 74 61 62 6c 65 20 56 41 4c 55 45  temp_table VALUE
6270: 53 28 27 76 61 6c 75 61 62 6c 65 20 64 61 74 61  S('valuable data
6280: 27 29 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 74  ');.    PRAGMA t
6290: 65 6d 70 5f 73 74 6f 72 65 20 3d 20 31 3b 0a 20  emp_store = 1;. 
62a0: 20 7d 0a 7d 20 7b 31 20 7b 74 65 6d 70 6f 72 61   }.} {1 {tempora
62b0: 72 79 20 73 74 6f 72 61 67 65 20 63 61 6e 6e 6f  ry storage canno
62c0: 74 20 62 65 20 63 68 61 6e 67 65 64 20 66 72 6f  t be changed fro
62d0: 6d 20 77 69 74 68 69 6e 20 61 20 74 72 61 6e 73  m within a trans
62e0: 61 63 74 69 6f 6e 7d 7d 0a 64 6f 5f 74 65 73 74  action}}.do_test
62f0: 20 70 72 61 67 6d 61 2d 39 2e 31 36 20 7b 0a 20   pragma-9.16 {. 
6300: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53   execsql {.    S
6310: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 65 6d  ELECT * FROM tem
6320: 70 5f 74 61 62 6c 65 3b 0a 20 20 20 20 43 4f 4d  p_table;.    COM
6330: 4d 49 54 3b 0a 20 20 7d 0a 7d 20 7b 7b 76 61 6c  MIT;.  }.} {{val
6340: 75 61 62 6c 65 20 64 61 74 61 7d 7d 0a 0a 64 6f  uable data}}..do
6350: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 39 2e 31  _test pragma-9.1
6360: 37 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  7 {.  execsql {.
6370: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
6380: 74 65 6d 70 5f 74 61 62 6c 65 20 56 41 4c 55 45  temp_table VALUE
6390: 53 28 27 76 61 6c 75 61 62 6c 65 20 64 61 74 61  S('valuable data
63a0: 20 49 49 27 29 3b 0a 20 20 20 20 53 45 4c 45 43   II');.    SELEC
63b0: 54 20 2a 20 46 52 4f 4d 20 74 65 6d 70 5f 74 61  T * FROM temp_ta
63c0: 62 6c 65 3b 0a 20 20 7d 0a 7d 20 7b 7b 76 61 6c  ble;.  }.} {{val
63d0: 75 61 62 6c 65 20 64 61 74 61 7d 20 7b 76 61 6c  uable data} {val
63e0: 75 61 62 6c 65 20 64 61 74 61 20 49 49 7d 7d 0a  uable data II}}.
63f0: 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d  .do_test pragma-
6400: 39 2e 31 38 20 7b 0a 20 20 73 65 74 20 72 63 20  9.18 {.  set rc 
6410: 5b 63 61 74 63 68 20 7b 0a 20 20 20 20 64 62 20  [catch {.    db 
6420: 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 74 20 46  eval {SELECT t F
6430: 52 4f 4d 20 74 65 6d 70 5f 74 61 62 6c 65 7d 20  ROM temp_table} 
6440: 7b 0a 20 20 20 20 20 20 65 78 65 63 73 71 6c 20  {.      execsql 
6450: 7b 70 72 61 67 6d 61 20 74 65 6d 70 5f 73 74 6f  {pragma temp_sto
6460: 72 65 20 3d 20 31 7d 0a 20 20 20 20 7d 0a 20 20  re = 1}.    }.  
6470: 7d 20 6d 73 67 5d 0a 20 20 6c 69 73 74 20 24 72  } msg].  list $r
6480: 63 20 24 6d 73 67 0a 7d 20 7b 31 20 7b 74 65 6d  c $msg.} {1 {tem
6490: 70 6f 72 61 72 79 20 73 74 6f 72 61 67 65 20 63  porary storage c
64a0: 61 6e 6e 6f 74 20 62 65 20 63 68 61 6e 67 65 64  annot be changed
64b0: 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 20 74   from within a t
64c0: 72 61 6e 73 61 63 74 69 6f 6e 7d 7d 0a 0a 7d 20  ransaction}}..} 
64d0: 3b 23 20 69 66 63 61 70 61 62 6c 65 20 70 61 67  ;# ifcapable pag
64e0: 65 72 5f 70 72 61 67 6d 61 73 0a 0a 69 66 63 61  er_pragmas..ifca
64f0: 70 61 62 6c 65 20 74 72 69 67 67 65 72 20 7b 0a  pable trigger {.
6500: 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d  .do_test pragma-
6510: 31 30 2e 30 20 7b 0a 20 20 63 61 74 63 68 73 71  10.0 {.  catchsq
6520: 6c 20 7b 0a 20 20 20 20 44 52 4f 50 20 54 41 42  l {.    DROP TAB
6530: 4c 45 20 6d 61 69 6e 2e 74 31 3b 0a 20 20 7d 0a  LE main.t1;.  }.
6540: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
6550: 50 52 41 47 4d 41 20 63 6f 75 6e 74 5f 63 68 61  PRAGMA count_cha
6560: 6e 67 65 73 20 3d 20 31 3b 0a 0a 20 20 20 20 43  nges = 1;..    C
6570: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 61  REATE TABLE t1(a
6580: 20 50 52 49 4d 41 52 59 20 4b 45 59 29 3b 0a 20   PRIMARY KEY);. 
6590: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
65a0: 74 31 5f 6d 69 72 72 6f 72 28 61 29 3b 0a 20 20  t1_mirror(a);.  
65b0: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
65c0: 31 5f 6d 69 72 72 6f 72 32 28 61 29 3b 0a 20 20  1_mirror2(a);.  
65d0: 20 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52    CREATE TRIGGER
65e0: 20 74 31 5f 62 69 20 42 45 46 4f 52 45 20 49 4e   t1_bi BEFORE IN
65f0: 53 45 52 54 20 4f 4e 20 74 31 20 42 45 47 49 4e  SERT ON t1 BEGIN
6600: 20 0a 20 20 20 20 20 20 49 4e 53 45 52 54 20 49   .      INSERT I
6610: 4e 54 4f 20 74 31 5f 6d 69 72 72 6f 72 20 56 41  NTO t1_mirror VA
6620: 4c 55 45 53 28 6e 65 77 2e 61 29 3b 0a 20 20 20  LUES(new.a);.   
6630: 20 45 4e 44 3b 0a 20 20 20 20 43 52 45 41 54 45   END;.    CREATE
6640: 20 54 52 49 47 47 45 52 20 74 31 5f 61 69 20 41   TRIGGER t1_ai A
6650: 46 54 45 52 20 49 4e 53 45 52 54 20 4f 4e 20 74  FTER INSERT ON t
6660: 31 20 42 45 47 49 4e 20 0a 20 20 20 20 20 20 49  1 BEGIN .      I
6670: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 5f 6d 69  NSERT INTO t1_mi
6680: 72 72 6f 72 32 20 56 41 4c 55 45 53 28 6e 65 77  rror2 VALUES(new
6690: 2e 61 29 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20  .a);.    END;.  
66a0: 20 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52    CREATE TRIGGER
66b0: 20 74 31 5f 62 75 20 42 45 46 4f 52 45 20 55 50   t1_bu BEFORE UP
66c0: 44 41 54 45 20 4f 4e 20 74 31 20 42 45 47 49 4e  DATE ON t1 BEGIN
66d0: 20 0a 20 20 20 20 20 20 55 50 44 41 54 45 20 74   .      UPDATE t
66e0: 31 5f 6d 69 72 72 6f 72 20 53 45 54 20 61 20 3d  1_mirror SET a =
66f0: 20 6e 65 77 2e 61 20 57 48 45 52 45 20 61 20 3d   new.a WHERE a =
6700: 20 6f 6c 64 2e 61 3b 0a 20 20 20 20 45 4e 44 3b   old.a;.    END;
6710: 0a 20 20 20 20 43 52 45 41 54 45 20 54 52 49 47  .    CREATE TRIG
6720: 47 45 52 20 74 31 5f 61 75 20 41 46 54 45 52 20  GER t1_au AFTER 
6730: 55 50 44 41 54 45 20 4f 4e 20 74 31 20 42 45 47  UPDATE ON t1 BEG
6740: 49 4e 20 0a 20 20 20 20 20 20 55 50 44 41 54 45  IN .      UPDATE
6750: 20 74 31 5f 6d 69 72 72 6f 72 32 20 53 45 54 20   t1_mirror2 SET 
6760: 61 20 3d 20 6e 65 77 2e 61 20 57 48 45 52 45 20  a = new.a WHERE 
6770: 61 20 3d 20 6f 6c 64 2e 61 3b 0a 20 20 20 20 45  a = old.a;.    E
6780: 4e 44 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54  ND;.    CREATE T
6790: 52 49 47 47 45 52 20 74 31 5f 62 64 20 42 45 46  RIGGER t1_bd BEF
67a0: 4f 52 45 20 44 45 4c 45 54 45 20 4f 4e 20 74 31  ORE DELETE ON t1
67b0: 20 42 45 47 49 4e 20 0a 20 20 20 20 20 20 44 45   BEGIN .      DE
67c0: 4c 45 54 45 20 46 52 4f 4d 20 74 31 5f 6d 69 72  LETE FROM t1_mir
67d0: 72 6f 72 20 57 48 45 52 45 20 61 20 3d 20 6f 6c  ror WHERE a = ol
67e0: 64 2e 61 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20  d.a;.    END;.  
67f0: 20 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52    CREATE TRIGGER
6800: 20 74 31 5f 61 64 20 41 46 54 45 52 20 44 45 4c   t1_ad AFTER DEL
6810: 45 54 45 20 4f 4e 20 74 31 20 42 45 47 49 4e 20  ETE ON t1 BEGIN 
6820: 0a 20 20 20 20 20 20 44 45 4c 45 54 45 20 46 52  .      DELETE FR
6830: 4f 4d 20 74 31 5f 6d 69 72 72 6f 72 32 20 57 48  OM t1_mirror2 WH
6840: 45 52 45 20 61 20 3d 20 6f 6c 64 2e 61 3b 0a 20  ERE a = old.a;. 
6850: 20 20 20 45 4e 44 3b 0a 20 20 7d 0a 7d 20 7b 7d     END;.  }.} {}
6860: 0a 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  ..do_test pragma
6870: 2d 31 30 2e 31 20 7b 0a 20 20 65 78 65 63 73 71  -10.1 {.  execsq
6880: 6c 20 7b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  l {.    INSERT I
6890: 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 72 61  NTO t1 VALUES(ra
68a0: 6e 64 73 74 72 28 31 30 2c 31 30 29 29 3b 0a 20  ndstr(10,10));. 
68b0: 20 7d 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74   }.} {1}.do_test
68c0: 20 70 72 61 67 6d 61 2d 31 30 2e 32 20 7b 0a 20   pragma-10.2 {. 
68d0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 55   execsql {.    U
68e0: 50 44 41 54 45 20 74 31 20 53 45 54 20 61 20 3d  PDATE t1 SET a =
68f0: 20 72 61 6e 64 73 74 72 28 31 30 2c 31 30 29 3b   randstr(10,10);
6900: 0a 20 20 7d 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65  .  }.} {1}.do_te
6910: 73 74 20 70 72 61 67 6d 61 2d 31 30 2e 33 20 7b  st pragma-10.3 {
6920: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
6930: 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 31 3b   DELETE FROM t1;
6940: 0a 20 20 7d 0a 7d 20 7b 31 7d 0a 0a 7d 20 3b 23  .  }.} {1}..} ;#
6950: 20 69 66 63 61 70 61 62 6c 65 20 74 72 69 67 67   ifcapable trigg
6960: 65 72 0a 0a 69 66 63 61 70 61 62 6c 65 20 73 63  er..ifcapable sc
6970: 68 65 6d 61 5f 70 72 61 67 6d 61 73 20 7b 0a 20  hema_pragmas {. 
6980: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
6990: 31 31 2e 31 20 7b 0a 20 20 20 20 65 78 65 63 73  11.1 {.    execs
69a0: 71 6c 32 20 7b 0a 20 20 20 20 20 20 70 72 61 67  ql2 {.      prag
69b0: 6d 61 20 63 6f 6c 6c 61 74 69 6f 6e 5f 6c 69 73  ma collation_lis
69c0: 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 73 65  t;.    }.  } {se
69d0: 71 20 30 20 6e 61 6d 65 20 4e 4f 43 41 53 45 20  q 0 name NOCASE 
69e0: 73 65 71 20 31 20 6e 61 6d 65 20 52 54 52 49 4d  seq 1 name RTRIM
69f0: 20 73 65 71 20 32 20 6e 61 6d 65 20 42 49 4e 41   seq 2 name BINA
6a00: 52 59 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72  RY}.  do_test pr
6a10: 61 67 6d 61 2d 31 31 2e 32 20 7b 0a 20 20 20 20  agma-11.2 {.    
6a20: 64 62 20 63 6f 6c 6c 61 74 65 20 4e 65 77 5f 43  db collate New_C
6a30: 6f 6c 6c 61 74 69 6f 6e 20 62 6c 61 68 2e 2e 2e  ollation blah...
6a40: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
6a50: 20 20 20 20 20 70 72 61 67 6d 61 20 63 6f 6c 6c       pragma coll
6a60: 61 74 69 6f 6e 5f 6c 69 73 74 3b 0a 20 20 20 20  ation_list;.    
6a70: 7d 0a 20 20 7d 20 7b 30 20 4e 65 77 5f 43 6f 6c  }.  } {0 New_Col
6a80: 6c 61 74 69 6f 6e 20 31 20 4e 4f 43 41 53 45 20  lation 1 NOCASE 
6a90: 32 20 52 54 52 49 4d 20 33 20 42 49 4e 41 52 59  2 RTRIM 3 BINARY
6aa0: 7d 0a 7d 0a 0a 69 66 63 61 70 61 62 6c 65 20 73  }.}..ifcapable s
6ab0: 63 68 65 6d 61 5f 70 72 61 67 6d 61 73 26 26 74  chema_pragmas&&t
6ac0: 65 6d 70 64 62 20 7b 0a 20 20 64 6f 5f 74 65 73  empdb {.  do_tes
6ad0: 74 20 70 72 61 67 6d 61 2d 31 32 2e 31 20 7b 0a  t pragma-12.1 {.
6ae0: 20 20 20 20 73 71 6c 69 74 65 33 20 64 62 32 20      sqlite3 db2 
6af0: 74 65 73 74 2e 64 62 0a 20 20 20 20 65 78 65 63  test.db.    exec
6b00: 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47  sql {.      PRAG
6b10: 4d 41 20 74 65 6d 70 2e 74 61 62 6c 65 5f 69 6e  MA temp.table_in
6b20: 66 6f 28 27 61 62 63 27 29 3b 0a 20 20 20 20 7d  fo('abc');.    }
6b30: 20 64 62 32 0a 20 20 7d 20 7b 7d 0a 20 20 64 62   db2.  } {}.  db
6b40: 32 20 63 6c 6f 73 65 0a 0a 20 20 64 6f 5f 74 65  2 close..  do_te
6b50: 73 74 20 70 72 61 67 6d 61 2d 31 32 2e 32 20 7b  st pragma-12.2 {
6b60: 0a 20 20 20 20 73 71 6c 69 74 65 33 20 64 62 32  .    sqlite3 db2
6b70: 20 74 65 73 74 2e 64 62 0a 20 20 20 20 65 78 65   test.db.    exe
6b80: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41  csql {.      PRA
6b90: 47 4d 41 20 74 65 6d 70 2e 64 65 66 61 75 6c 74  GMA temp.default
6ba0: 5f 63 61 63 68 65 5f 73 69 7a 65 20 3d 20 32 30  _cache_size = 20
6bb0: 30 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20  0;.      PRAGMA 
6bc0: 74 65 6d 70 2e 64 65 66 61 75 6c 74 5f 63 61 63  temp.default_cac
6bd0: 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 7d 20 64  he_size;.    } d
6be0: 62 32 0a 20 20 7d 20 7b 32 30 30 7d 0a 20 20 64  b2.  } {200}.  d
6bf0: 62 32 20 63 6c 6f 73 65 0a 0a 20 20 64 6f 5f 74  b2 close..  do_t
6c00: 65 73 74 20 70 72 61 67 6d 61 2d 31 32 2e 33 20  est pragma-12.3 
6c10: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 20 64 62  {.    sqlite3 db
6c20: 32 20 74 65 73 74 2e 64 62 0a 20 20 20 20 65 78  2 test.db.    ex
6c30: 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52  ecsql {.      PR
6c40: 41 47 4d 41 20 74 65 6d 70 2e 63 61 63 68 65 5f  AGMA temp.cache_
6c50: 73 69 7a 65 20 3d 20 34 30 30 3b 0a 20 20 20 20  size = 400;.    
6c60: 20 20 50 52 41 47 4d 41 20 74 65 6d 70 2e 63 61    PRAGMA temp.ca
6c70: 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 7d 20  che_size;.    } 
6c80: 64 62 32 0a 20 20 7d 20 7b 34 30 30 7d 0a 20 20  db2.  } {400}.  
6c90: 64 62 32 20 63 6c 6f 73 65 0a 7d 0a 0a 69 66 63  db2 close.}..ifc
6ca0: 61 70 61 62 6c 65 20 62 6c 6f 62 6c 69 74 20 7b  apable bloblit {
6cb0: 0a 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  ..do_test pragma
6cc0: 2d 31 33 2e 31 20 7b 0a 20 20 65 78 65 63 73 71  -13.1 {.  execsq
6cd0: 6c 20 7b 0a 20 20 20 20 44 52 4f 50 20 54 41 42  l {.    DROP TAB
6ce0: 4c 45 20 49 46 20 45 58 49 53 54 53 20 74 34 3b  LE IF EXISTS t4;
6cf0: 0a 20 20 20 20 50 52 41 47 4d 41 20 76 64 62 65  .    PRAGMA vdbe
6d00: 5f 74 72 61 63 65 3d 6f 6e 3b 0a 20 20 20 20 50  _trace=on;.    P
6d10: 52 41 47 4d 41 20 76 64 62 65 5f 6c 69 73 74 69  RAGMA vdbe_listi
6d20: 6e 67 3d 6f 6e 3b 0a 20 20 20 20 50 52 41 47 4d  ng=on;.    PRAGM
6d30: 41 20 73 71 6c 5f 74 72 61 63 65 3d 6f 6e 3b 0a  A sql_trace=on;.
6d40: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
6d50: 20 74 34 28 61 20 49 4e 54 45 47 45 52 20 50 52   t4(a INTEGER PR
6d60: 49 4d 41 52 59 20 4b 45 59 2c 62 29 3b 0a 20 20  IMARY KEY,b);.  
6d70: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 34    INSERT INTO t4
6d80: 28 62 29 20 56 41 4c 55 45 53 28 78 27 30 31 32  (b) VALUES(x'012
6d90: 33 34 35 36 37 38 39 61 62 63 64 65 66 30 31 32  3456789abcdef012
6da0: 33 34 35 36 37 38 39 61 62 63 64 65 66 30 31 32  3456789abcdef012
6db0: 33 34 35 36 37 38 39 27 29 3b 0a 20 20 20 20 49  3456789');.    I
6dc0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 34 28 62 29  NSERT INTO t4(b)
6dd0: 20 56 41 4c 55 45 53 28 72 61 6e 64 73 74 72 28   VALUES(randstr(
6de0: 33 30 2c 33 30 29 29 3b 0a 20 20 20 20 49 4e 53  30,30));.    INS
6df0: 45 52 54 20 49 4e 54 4f 20 74 34 28 62 29 20 56  ERT INTO t4(b) V
6e00: 41 4c 55 45 53 28 31 2e 32 33 34 35 36 29 3b 0a  ALUES(1.23456);.
6e10: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
6e20: 74 34 28 62 29 20 56 41 4c 55 45 53 28 4e 55 4c  t4(b) VALUES(NUL
6e30: 4c 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  L);.    INSERT I
6e40: 4e 54 4f 20 74 34 28 62 29 20 56 41 4c 55 45 53  NTO t4(b) VALUES
6e50: 28 30 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20  (0);.    INSERT 
6e60: 49 4e 54 4f 20 74 34 28 62 29 20 53 45 4c 45 43  INTO t4(b) SELEC
6e70: 54 20 62 7c 7c 62 7c 7c 62 7c 7c 62 20 46 52 4f  T b||b||b||b FRO
6e80: 4d 20 74 34 3b 0a 20 20 20 20 53 45 4c 45 43 54  M t4;.    SELECT
6e90: 20 2a 20 46 52 4f 4d 20 74 34 3b 0a 20 20 7d 0a   * FROM t4;.  }.
6ea0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
6eb0: 50 52 41 47 4d 41 20 76 64 62 65 5f 74 72 61 63  PRAGMA vdbe_trac
6ec0: 65 3d 6f 66 66 3b 0a 20 20 20 20 50 52 41 47 4d  e=off;.    PRAGM
6ed0: 41 20 76 64 62 65 5f 6c 69 73 74 69 6e 67 3d 6f  A vdbe_listing=o
6ee0: 66 66 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 73  ff;.    PRAGMA s
6ef0: 71 6c 5f 74 72 61 63 65 3d 6f 66 66 3b 0a 20 20  ql_trace=off;.  
6f00: 7d 0a 7d 20 7b 7d 0a 0a 7d 20 3b 23 20 69 66 63  }.} {}..} ;# ifc
6f10: 61 70 61 62 6c 65 20 62 6c 6f 62 6c 69 74 20 0a  apable bloblit .
6f20: 0a 69 66 63 61 70 61 62 6c 65 20 70 61 67 65 72  .ifcapable pager
6f30: 5f 70 72 61 67 6d 61 73 20 7b 0a 20 20 64 62 20  _pragmas {.  db 
6f40: 63 6c 6f 73 65 0a 20 20 66 6f 72 63 65 64 65 6c  close.  forcedel
6f50: 65 74 65 20 74 65 73 74 2e 64 62 0a 20 20 73 71  ete test.db.  sq
6f60: 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64 62  lite3 db test.db
6f70: 0a 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67  ..  do_test prag
6f80: 6d 61 2d 31 34 2e 31 20 7b 0a 20 20 20 20 65 78  ma-14.1 {.    ex
6f90: 65 63 73 71 6c 20 7b 20 70 72 61 67 6d 61 20 61  ecsql { pragma a
6fa0: 75 74 6f 5f 76 61 63 75 75 6d 20 3d 20 30 20 7d  uto_vacuum = 0 }
6fb0: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 20 70  .    execsql { p
6fc0: 72 61 67 6d 61 20 70 61 67 65 5f 63 6f 75 6e 74  ragma page_count
6fd0: 20 7d 0a 20 20 7d 20 7b 30 7d 0a 0a 20 20 64 6f   }.  } {0}..  do
6fe0: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 34 2e  _test pragma-14.
6ff0: 32 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  2 {.    execsql 
7000: 7b 20 0a 20 20 20 20 20 20 43 52 45 41 54 45 20  { .      CREATE 
7010: 54 41 42 4c 45 20 61 62 63 28 61 2c 20 62 2c 20  TABLE abc(a, b, 
7020: 63 29 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41  c);.      PRAGMA
7030: 20 70 61 67 65 5f 63 6f 75 6e 74 3b 0a 20 20 20   page_count;.   
7040: 20 7d 0a 20 20 7d 20 7b 32 7d 0a 0a 20 20 64 6f   }.  } {2}..  do
7050: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 34 2e  _test pragma-14.
7060: 33 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  3 {.    execsql 
7070: 7b 20 0a 20 20 20 20 20 20 42 45 47 49 4e 3b 0a  { .      BEGIN;.
7080: 20 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42        CREATE TAB
7090: 4c 45 20 64 65 66 28 61 2c 20 62 2c 20 63 29 3b  LE def(a, b, c);
70a0: 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 70 61  .      PRAGMA pa
70b0: 67 65 5f 63 6f 75 6e 74 3b 0a 20 20 20 20 7d 0a  ge_count;.    }.
70c0: 20 20 7d 20 7b 33 7d 0a 0a 20 20 64 6f 5f 74 65    } {3}..  do_te
70d0: 73 74 20 70 72 61 67 6d 61 2d 31 34 2e 34 20 7b  st pragma-14.4 {
70e0: 0a 20 20 20 20 73 65 74 20 70 61 67 65 5f 73 69  .    set page_si
70f0: 7a 65 20 5b 64 62 20 6f 6e 65 20 7b 70 72 61 67  ze [db one {prag
7100: 6d 61 20 70 61 67 65 5f 73 69 7a 65 7d 5d 0a 20  ma page_size}]. 
7110: 20 20 20 65 78 70 72 20 5b 66 69 6c 65 20 73 69     expr [file si
7120: 7a 65 20 74 65 73 74 2e 64 62 5d 20 2f 20 24 70  ze test.db] / $p
7130: 61 67 65 5f 73 69 7a 65 0a 20 20 7d 20 7b 32 7d  age_size.  } {2}
7140: 0a 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67  ..  do_test prag
7150: 6d 61 2d 31 34 2e 35 20 7b 0a 20 20 20 20 65 78  ma-14.5 {.    ex
7160: 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 52 4f  ecsql {.      RO
7170: 4c 4c 42 41 43 4b 3b 0a 20 20 20 20 20 20 50 52  LLBACK;.      PR
7180: 41 47 4d 41 20 70 61 67 65 5f 63 6f 75 6e 74 3b  AGMA page_count;
7190: 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 32 7d 0a 0a  .    }.  } {2}..
71a0: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
71b0: 2d 31 34 2e 36 20 7b 0a 20 20 20 20 66 6f 72 63  -14.6 {.    forc
71c0: 65 64 65 6c 65 74 65 20 74 65 73 74 32 2e 64 62  edelete test2.db
71d0: 0a 20 20 20 20 73 71 6c 69 74 65 33 20 64 62 32  .    sqlite3 db2
71e0: 20 74 65 73 74 32 2e 64 62 0a 20 20 20 20 65 78   test2.db.    ex
71f0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52  ecsql {.      PR
7200: 41 47 4d 41 20 61 75 74 6f 5f 76 61 63 75 75 6d  AGMA auto_vacuum
7210: 20 3d 20 30 3b 0a 20 20 20 20 20 20 43 52 45 41   = 0;.      CREA
7220: 54 45 20 54 41 42 4c 45 20 74 31 28 61 2c 20 62  TE TABLE t1(a, b
7230: 2c 20 63 29 3b 0a 20 20 20 20 20 20 43 52 45 41  , c);.      CREA
7240: 54 45 20 54 41 42 4c 45 20 74 32 28 61 2c 20 62  TE TABLE t2(a, b
7250: 2c 20 63 29 3b 0a 20 20 20 20 20 20 43 52 45 41  , c);.      CREA
7260: 54 45 20 54 41 42 4c 45 20 74 33 28 61 2c 20 62  TE TABLE t3(a, b
7270: 2c 20 63 29 3b 0a 20 20 20 20 20 20 43 52 45 41  , c);.      CREA
7280: 54 45 20 54 41 42 4c 45 20 74 34 28 61 2c 20 62  TE TABLE t4(a, b
7290: 2c 20 63 29 3b 0a 20 20 20 20 7d 20 64 62 32 0a  , c);.    } db2.
72a0: 20 20 20 20 64 62 32 20 63 6c 6f 73 65 0a 20 20      db2 close.  
72b0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
72c0: 20 20 41 54 54 41 43 48 20 27 74 65 73 74 32 2e    ATTACH 'test2.
72d0: 64 62 27 20 41 53 20 61 75 78 3b 0a 20 20 20 20  db' AS aux;.    
72e0: 20 20 50 52 41 47 4d 41 20 61 75 78 2e 70 61 67    PRAGMA aux.pag
72f0: 65 5f 63 6f 75 6e 74 3b 0a 20 20 20 20 7d 20 0a  e_count;.    } .
7300: 20 20 7d 20 7b 35 7d 0a 7d 0a 0a 23 20 54 65 73    } {5}.}..# Tes
7310: 74 20 74 68 61 74 20 74 68 65 20 76 61 6c 75 65  t that the value
7320: 20 73 65 74 20 75 73 69 6e 67 20 74 68 65 20 63   set using the c
7330: 61 63 68 65 5f 73 69 7a 65 20 70 72 61 67 6d 61  ache_size pragma
7340: 20 69 73 20 6e 6f 74 20 72 65 73 65 74 20 77 68   is not reset wh
7350: 65 6e 20 74 68 65 0a 23 20 73 63 68 65 6d 61 20  en the.# schema 
7360: 69 73 20 72 65 6c 6f 61 64 65 64 2e 0a 23 0a 69  is reloaded..#.i
7370: 66 63 61 70 61 62 6c 65 20 70 61 67 65 72 5f 70  fcapable pager_p
7380: 72 61 67 6d 61 73 20 7b 0a 20 20 64 62 20 63 6c  ragmas {.  db cl
7390: 6f 73 65 0a 20 20 73 71 6c 69 74 65 33 20 64 62  ose.  sqlite3 db
73a0: 20 74 65 73 74 2e 64 62 0a 20 20 64 6f 5f 74 65   test.db.  do_te
73b0: 73 74 20 70 72 61 67 6d 61 2d 31 35 2e 31 20 7b  st pragma-15.1 {
73c0: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
73d0: 20 20 20 20 20 50 52 41 47 4d 41 20 63 61 63 68       PRAGMA cach
73e0: 65 5f 73 69 7a 65 3d 35 39 3b 0a 20 20 20 20 20  e_size=59;.     
73f0: 20 50 52 41 47 4d 41 20 63 61 63 68 65 5f 73 69   PRAGMA cache_si
7400: 7a 65 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 35  ze;.    }.  } {5
7410: 39 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61  9}.  do_test pra
7420: 67 6d 61 2d 31 35 2e 32 20 7b 0a 20 20 20 20 73  gma-15.2 {.    s
7430: 71 6c 69 74 65 33 20 64 62 32 20 74 65 73 74 2e  qlite3 db2 test.
7440: 64 62 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b  db.    execsql {
7450: 0a 20 20 20 20 20 20 43 52 45 41 54 45 20 54 41  .      CREATE TA
7460: 42 4c 45 20 6e 65 77 74 61 62 6c 65 28 61 2c 20  BLE newtable(a, 
7470: 62 2c 20 63 29 3b 0a 20 20 20 20 7d 20 64 62 32  b, c);.    } db2
7480: 0a 20 20 20 20 64 62 32 20 63 6c 6f 73 65 0a 20  .    db2 close. 
7490: 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20   } {}.  do_test 
74a0: 70 72 61 67 6d 61 2d 31 35 2e 33 20 7b 0a 20 20  pragma-15.3 {.  
74b0: 20 20 23 20 45 76 61 6c 75 61 74 69 6e 67 20 74    # Evaluating t
74c0: 68 69 73 20 73 74 61 74 65 6d 65 6e 74 20 77 69  his statement wi
74d0: 6c 6c 20 63 61 75 73 65 20 74 68 65 20 73 63 68  ll cause the sch
74e0: 65 6d 61 20 74 6f 20 62 65 20 72 65 6c 6f 61 64  ema to be reload
74f0: 65 64 20 28 62 65 63 61 75 73 65 0a 20 20 20 20  ed (because.    
7500: 23 20 74 68 65 20 73 63 68 65 6d 61 20 77 61 73  # the schema was
7510: 20 63 68 61 6e 67 65 64 20 62 79 20 61 6e 6f 74   changed by anot
7520: 68 65 72 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69  her connection i
7530: 6e 20 70 72 61 67 6d 61 2d 31 35 2e 32 29 2e 20  n pragma-15.2). 
7540: 41 74 20 6f 6e 65 0a 20 20 20 20 23 20 70 6f 69  At one.    # poi
7550: 6e 74 20 74 68 65 72 65 20 77 61 73 20 61 20 62  nt there was a b
7560: 75 67 20 74 68 61 74 20 72 65 73 65 74 20 74 68  ug that reset th
7570: 65 20 63 61 63 68 65 5f 73 69 7a 65 20 74 6f 20  e cache_size to 
7580: 69 74 73 20 64 65 66 61 75 6c 74 20 76 61 6c 75  its default valu
7590: 65 0a 20 20 20 20 23 20 77 68 65 6e 20 74 68 69  e.    # when thi
75a0: 73 20 68 61 70 70 65 6e 65 64 2e 20 0a 20 20 20  s happened. .   
75b0: 20 65 78 65 63 73 71 6c 20 7b 20 53 45 4c 45 43   execsql { SELEC
75c0: 54 20 2a 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  T * FROM sqlite_
75d0: 6d 61 73 74 65 72 20 7d 0a 20 20 20 20 65 78 65  master }.    exe
75e0: 63 73 71 6c 20 7b 20 50 52 41 47 4d 41 20 63 61  csql { PRAGMA ca
75f0: 63 68 65 5f 73 69 7a 65 20 7d 0a 20 20 7d 20 7b  che_size }.  } {
7600: 35 39 7d 0a 7d 0a 0a 23 20 52 65 73 65 74 20 74  59}.}..# Reset t
7610: 68 65 20 73 71 6c 69 74 65 33 5f 74 65 6d 70 5f  he sqlite3_temp_
7620: 64 69 72 65 63 74 6f 72 79 20 76 61 72 69 61 62  directory variab
7630: 6c 65 20 66 6f 72 20 74 68 65 20 6e 65 78 74 20  le for the next 
7640: 72 75 6e 20 6f 66 20 74 65 73 74 73 3a 0a 73 71  run of tests:.sq
7650: 6c 69 74 65 33 20 64 62 58 20 3a 6d 65 6d 6f 72  lite3 dbX :memor
7660: 79 3a 0a 64 62 58 20 65 76 61 6c 20 7b 50 52 41  y:.dbX eval {PRA
7670: 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64  GMA temp_store_d
7680: 69 72 65 63 74 6f 72 79 20 3d 20 22 22 7d 0a 64  irectory = ""}.d
7690: 62 58 20 63 6c 6f 73 65 0a 0a 69 66 63 61 70 61  bX close..ifcapa
76a0: 62 6c 65 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 70  ble lock_proxy_p
76b0: 72 61 67 6d 61 73 26 26 70 72 65 66 65 72 5f 70  ragmas&&prefer_p
76c0: 72 6f 78 79 5f 6c 6f 63 6b 69 6e 67 20 7b 0a 20  roxy_locking {. 
76d0: 20 73 65 74 20 73 71 6c 69 74 65 5f 68 6f 73 74   set sqlite_host
76e0: 69 64 5f 6e 75 6d 20 31 0a 0a 20 20 73 65 74 20  id_num 1..  set 
76f0: 75 73 69 6e 67 5f 70 72 6f 78 79 20 30 0a 20 20  using_proxy 0.  
7700: 66 6f 72 65 61 63 68 20 7b 6e 61 6d 65 20 76 61  foreach {name va
7710: 6c 75 65 7d 20 5b 61 72 72 61 79 20 67 65 74 20  lue} [array get 
7720: 65 6e 76 20 53 51 4c 49 54 45 5f 46 4f 52 43 45  env SQLITE_FORCE
7730: 5f 50 52 4f 58 59 5f 4c 4f 43 4b 49 4e 47 5d 20  _PROXY_LOCKING] 
7740: 7b 0a 20 20 20 20 73 65 74 20 75 73 69 6e 67 5f  {.    set using_
7750: 70 72 6f 78 79 20 24 76 61 6c 75 65 0a 20 20 7d  proxy $value.  }
7760: 0a 0a 20 20 23 20 54 65 73 74 20 74 68 65 20 6c  ..  # Test the l
7770: 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 20 70  ock_proxy_file p
7780: 72 61 67 6d 61 73 2e 0a 20 20 23 0a 20 20 64 62  ragmas..  #.  db
7790: 20 63 6c 6f 73 65 0a 20 20 73 65 74 20 65 6e 76   close.  set env
77a0: 28 53 51 4c 49 54 45 5f 46 4f 52 43 45 5f 50 52  (SQLITE_FORCE_PR
77b0: 4f 58 59 5f 4c 4f 43 4b 49 4e 47 29 20 22 30 22  OXY_LOCKING) "0"
77c0: 0a 0a 20 20 73 71 6c 69 74 65 33 20 64 62 20 74  ..  sqlite3 db t
77d0: 65 73 74 2e 64 62 0a 20 20 64 6f 5f 74 65 73 74  est.db.  do_test
77e0: 20 70 72 61 67 6d 61 2d 31 36 2e 31 20 7b 0a 20   pragma-16.1 {. 
77f0: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
7800: 20 20 20 50 52 41 47 4d 41 20 6c 6f 63 6b 5f 70     PRAGMA lock_p
7810: 72 6f 78 79 5f 66 69 6c 65 3d 22 6d 79 6c 69 74  roxy_file="mylit
7820: 74 6c 65 70 72 6f 78 79 22 3b 0a 20 20 20 20 20  tleproxy";.     
7830: 20 73 65 6c 65 63 74 20 2a 20 66 72 6f 6d 20 73   select * from s
7840: 71 6c 69 74 65 5f 6d 61 73 74 65 72 3b 0a 20 20  qlite_master;.  
7850: 20 20 7d 0a 20 20 20 20 65 78 65 63 73 71 6c 20    }.    execsql 
7860: 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 6c  {.      PRAGMA l
7870: 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 3b 0a  ock_proxy_file;.
7880: 20 20 20 20 7d 20 0a 20 20 7d 20 7b 6d 79 6c 69      } .  } {myli
7890: 74 74 6c 65 70 72 6f 78 79 7d 0a 0a 20 20 64 6f  ttleproxy}..  do
78a0: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 36 2e  _test pragma-16.
78b0: 32 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 20  2 {.    sqlite3 
78c0: 64 62 32 20 74 65 73 74 2e 64 62 0a 20 20 20 20  db2 test.db.    
78d0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
78e0: 50 52 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78  PRAGMA lock_prox
78f0: 79 5f 66 69 6c 65 3d 22 6d 79 6c 69 74 74 6c 65  y_file="mylittle
7900: 70 72 6f 78 79 22 3b 0a 20 20 20 20 7d 20 64 62  proxy";.    } db
7910: 32 0a 20 20 7d 20 7b 7d 0a 0a 20 20 64 62 32 20  2.  } {}..  db2 
7920: 63 6c 6f 73 65 0a 20 20 64 6f 5f 74 65 73 74 20  close.  do_test 
7930: 70 72 61 67 6d 61 2d 31 36 2e 32 2e 31 20 7b 0a  pragma-16.2.1 {.
7940: 20 20 20 20 73 71 6c 69 74 65 33 20 64 62 32 20      sqlite3 db2 
7950: 74 65 73 74 2e 64 62 0a 20 20 20 20 65 78 65 63  test.db.    exec
7960: 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47  sql {.      PRAG
7970: 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69  MA lock_proxy_fi
7980: 6c 65 3d 22 3a 61 75 74 6f 3a 22 3b 0a 20 20 20  le=":auto:";.   
7990: 20 20 20 73 65 6c 65 63 74 20 2a 20 66 72 6f 6d     select * from
79a0: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 3b 0a   sqlite_master;.
79b0: 20 20 20 20 7d 20 64 62 32 0a 20 20 20 20 65 78      } db2.    ex
79c0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52  ecsql {.      PR
79d0: 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f  AGMA lock_proxy_
79e0: 66 69 6c 65 3b 0a 20 20 20 20 7d 20 64 62 32 0a  file;.    } db2.
79f0: 20 20 7d 20 7b 6d 79 6c 69 74 74 6c 65 70 72 6f    } {mylittlepro
7a00: 78 79 7d 0a 0a 20 20 64 62 32 20 63 6c 6f 73 65  xy}..  db2 close
7a10: 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .  do_test pragm
7a20: 61 2d 31 36 2e 33 20 7b 0a 20 20 20 20 73 71 6c  a-16.3 {.    sql
7a30: 69 74 65 33 20 64 62 32 20 74 65 73 74 2e 64 62  ite3 db2 test.db
7a40: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
7a50: 20 20 20 20 20 50 52 41 47 4d 41 20 6c 6f 63 6b       PRAGMA lock
7a60: 5f 70 72 6f 78 79 5f 66 69 6c 65 3d 22 6d 79 6f  _proxy_file="myo
7a70: 74 68 65 72 70 72 6f 78 79 22 3b 0a 20 20 20 20  therproxy";.    
7a80: 7d 20 64 62 32 0a 20 20 20 20 63 61 74 63 68 73  } db2.    catchs
7a90: 71 6c 20 7b 0a 20 20 20 20 20 20 73 65 6c 65 63  ql {.      selec
7aa0: 74 20 2a 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f  t * from sqlite_
7ab0: 6d 61 73 74 65 72 3b 0a 20 20 20 20 7d 20 64 62  master;.    } db
7ac0: 32 0a 20 20 7d 20 7b 31 20 7b 64 61 74 61 62 61  2.  } {1 {databa
7ad0: 73 65 20 69 73 20 6c 6f 63 6b 65 64 7d 7d 0a 0a  se is locked}}..
7ae0: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
7af0: 2d 31 36 2e 34 20 7b 0a 20 20 20 20 64 62 32 20  -16.4 {.    db2 
7b00: 63 6c 6f 73 65 0a 20 20 20 20 64 62 20 63 6c 6f  close.    db clo
7b10: 73 65 0a 20 20 20 20 73 71 6c 69 74 65 33 20 64  se.    sqlite3 d
7b20: 62 32 20 74 65 73 74 2e 64 62 0a 20 20 20 20 65  b2 test.db.    e
7b30: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50  xecsql {.      P
7b40: 52 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78 79  RAGMA lock_proxy
7b50: 5f 66 69 6c 65 3d 22 6d 79 6f 72 69 67 69 6e 61  _file="myorigina
7b60: 6c 70 72 6f 78 79 22 3b 0a 20 20 20 20 20 20 50  lproxy";.      P
7b70: 52 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78 79  RAGMA lock_proxy
7b80: 5f 66 69 6c 65 3d 22 6d 79 6f 74 68 65 72 70 72  _file="myotherpr
7b90: 6f 78 79 22 3b 0a 20 20 20 20 20 20 50 52 41 47  oxy";.      PRAG
7ba0: 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69  MA lock_proxy_fi
7bb0: 6c 65 3b 0a 20 20 20 20 7d 20 64 62 32 0a 20 20  le;.    } db2.  
7bc0: 7d 20 7b 6d 79 6f 74 68 65 72 70 72 6f 78 79 7d  } {myotherproxy}
7bd0: 0a 0a 20 20 64 62 32 20 63 6c 6f 73 65 0a 20 20  ..  db2 close.  
7be0: 73 65 74 20 65 6e 76 28 53 51 4c 49 54 45 5f 46  set env(SQLITE_F
7bf0: 4f 52 43 45 5f 50 52 4f 58 59 5f 4c 4f 43 4b 49  ORCE_PROXY_LOCKI
7c00: 4e 47 29 20 22 31 22 0a 20 20 64 6f 5f 74 65 73  NG) "1".  do_tes
7c10: 74 20 70 72 61 67 6d 61 2d 31 36 2e 35 20 7b 0a  t pragma-16.5 {.
7c20: 20 20 20 20 73 71 6c 69 74 65 33 20 64 62 32 20      sqlite3 db2 
7c30: 74 65 73 74 2e 64 62 0a 20 20 20 20 65 78 65 63  test.db.    exec
7c40: 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47  sql {.      PRAG
7c50: 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69  MA lock_proxy_fi
7c60: 6c 65 3d 22 3a 61 75 74 6f 3a 22 3b 0a 20 20 20  le=":auto:";.   
7c70: 20 20 20 50 52 41 47 4d 41 20 6c 6f 63 6b 5f 70     PRAGMA lock_p
7c80: 72 6f 78 79 5f 66 69 6c 65 3b 0a 20 20 20 20 7d  roxy_file;.    }
7c90: 20 64 62 32 0a 20 20 7d 20 7b 6d 79 6f 74 68 65   db2.  } {myothe
7ca0: 72 70 72 6f 78 79 7d 0a 20 20 0a 20 20 64 6f 5f  rproxy}.  .  do_
7cb0: 74 65 73 74 20 70 72 61 67 6d 61 2d 31 36 2e 36  test pragma-16.6
7cc0: 20 7b 0a 20 20 20 20 64 62 32 20 63 6c 6f 73 65   {.    db2 close
7cd0: 0a 20 20 20 20 73 71 6c 69 74 65 33 20 64 62 32  .    sqlite3 db2
7ce0: 20 74 65 73 74 32 2e 64 62 0a 20 20 20 20 73 65   test2.db.    se
7cf0: 74 20 6c 6f 63 6b 70 61 74 68 20 5b 65 78 65 63  t lockpath [exec
7d00: 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47  sql {.      PRAG
7d10: 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69  MA lock_proxy_fi
7d20: 6c 65 3d 22 3a 61 75 74 6f 3a 22 3b 0a 20 20 20  le=":auto:";.   
7d30: 20 20 20 50 52 41 47 4d 41 20 6c 6f 63 6b 5f 70     PRAGMA lock_p
7d40: 72 6f 78 79 5f 66 69 6c 65 3b 0a 20 20 20 20 7d  roxy_file;.    }
7d50: 20 64 62 32 5d 0a 20 20 20 20 73 74 72 69 6e 67   db2].    string
7d60: 20 6d 61 74 63 68 20 22 2a 74 65 73 74 32 2e 64   match "*test2.d
7d70: 62 3a 61 75 74 6f 3a 22 20 24 6c 6f 63 6b 70 61  b:auto:" $lockpa
7d80: 74 68 0a 20 20 7d 20 7b 31 7d 0a 20 20 0a 20 20  th.  } {1}.  .  
7d90: 73 65 74 20 73 71 6c 69 74 65 5f 68 6f 73 74 69  set sqlite_hosti
7da0: 64 5f 6e 75 6d 20 32 0a 20 20 64 6f 5f 74 65 73  d_num 2.  do_tes
7db0: 74 20 70 72 61 67 6d 61 2d 31 36 2e 37 20 7b 0a  t pragma-16.7 {.
7dc0: 20 20 20 20 6c 69 73 74 20 5b 63 61 74 63 68 20      list [catch 
7dd0: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 20  {.      sqlite3 
7de0: 64 62 20 74 65 73 74 32 2e 64 62 0a 20 20 20 20  db test2.db.    
7df0: 20 20 65 78 65 63 73 71 6c 20 7b 20 0a 20 20 20    execsql { .   
7e00: 20 20 20 20 20 50 52 41 47 4d 41 20 6c 6f 63 6b       PRAGMA lock
7e10: 5f 70 72 6f 78 79 5f 66 69 6c 65 3d 22 3a 61 75  _proxy_file=":au
7e20: 74 6f 3a 22 3b 0a 20 20 20 20 20 20 20 20 73 65  to:";.        se
7e30: 6c 65 63 74 20 2a 20 66 72 6f 6d 20 73 71 6c 69  lect * from sqli
7e40: 74 65 5f 6d 61 73 74 65 72 3b 0a 20 20 20 20 20  te_master;.     
7e50: 20 7d 0a 20 20 20 20 7d 20 6d 73 67 5d 20 24 6d   }.    } msg] $m
7e60: 73 67 0a 20 20 7d 20 7b 31 20 7b 64 61 74 61 62  sg.  } {1 {datab
7e70: 61 73 65 20 69 73 20 6c 6f 63 6b 65 64 7d 7d 0a  ase is locked}}.
7e80: 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 0a 20 20    db close.  .  
7e90: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31  do_test pragma-1
7ea0: 36 2e 38 20 7b 0a 20 20 20 20 6c 69 73 74 20 5b  6.8 {.    list [
7eb0: 63 61 74 63 68 20 7b 0a 20 20 20 20 20 20 73 71  catch {.      sq
7ec0: 6c 69 74 65 33 20 64 62 20 74 65 73 74 32 2e 64  lite3 db test2.d
7ed0: 62 0a 20 20 20 20 20 20 65 78 65 63 73 71 6c 20  b.      execsql 
7ee0: 7b 20 73 65 6c 65 63 74 20 2a 20 66 72 6f 6d 20  { select * from 
7ef0: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 7d 20  sqlite_master } 
7f00: 0a 20 20 20 20 7d 20 6d 73 67 5d 20 24 6d 73 67  .    } msg] $msg
7f10: 0a 20 20 7d 20 7b 31 20 7b 64 61 74 61 62 61 73  .  } {1 {databas
7f20: 65 20 69 73 20 6c 6f 63 6b 65 64 7d 7d 0a 0a 20  e is locked}}.. 
7f30: 20 64 62 32 20 63 6c 6f 73 65 0a 20 20 64 6f 5f   db2 close.  do_
7f40: 74 65 73 74 20 70 72 61 67 6d 61 2d 31 36 2e 38  test pragma-16.8
7f50: 2e 31 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  .1 {.    execsql
7f60: 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20   {.      PRAGMA 
7f70: 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 3d  lock_proxy_file=
7f80: 22 79 65 74 61 6e 6f 74 68 65 72 70 72 6f 78 79  "yetanotherproxy
7f90: 22 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20  ";.      PRAGMA 
7fa0: 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 3b  lock_proxy_file;
7fb0: 0a 20 20 20 20 7d 20 0a 20 20 7d 20 7b 79 65 74  .    } .  } {yet
7fc0: 61 6e 6f 74 68 65 72 70 72 6f 78 79 7d 0a 20 20  anotherproxy}.  
7fd0: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31  do_test pragma-1
7fe0: 36 2e 38 2e 32 20 7b 0a 20 20 20 20 65 78 65 63  6.8.2 {.    exec
7ff0: 73 71 6c 20 7b 0a 20 20 20 20 20 20 63 72 65 61  sql {.      crea
8000: 74 65 20 74 61 62 6c 65 20 6d 69 6e 65 28 78 29  te table mine(x)
8010: 3b 0a 20 20 20 20 7d 20 0a 20 20 7d 20 7b 7d 0a  ;.    } .  } {}.
8020: 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 64 6f  .  db close.  do
8030: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 36 2e  _test pragma-16.
8040: 39 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 20  9 {.    sqlite3 
8050: 64 62 20 70 72 6f 78 79 74 65 73 74 2e 64 62 0a  db proxytest.db.
8060: 20 20 20 20 73 65 74 20 6c 6f 63 6b 70 61 74 68      set lockpath
8070: 32 20 5b 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  2 [execsql {.   
8080: 20 20 20 50 52 41 47 4d 41 20 6c 6f 63 6b 5f 70     PRAGMA lock_p
8090: 72 6f 78 79 5f 66 69 6c 65 3d 22 3a 61 75 74 6f  roxy_file=":auto
80a0: 3a 22 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41  :";.      PRAGMA
80b0: 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65   lock_proxy_file
80c0: 3b 0a 20 20 20 20 7d 20 64 62 5d 0a 20 20 20 20  ;.    } db].    
80d0: 73 74 72 69 6e 67 20 6d 61 74 63 68 20 22 2a 70  string match "*p
80e0: 72 6f 78 79 74 65 73 74 2e 64 62 3a 61 75 74 6f  roxytest.db:auto
80f0: 3a 22 20 24 6c 6f 63 6b 70 61 74 68 32 0a 20 20  :" $lockpath2.  
8100: 7d 20 7b 31 7d 0a 0a 20 20 73 65 74 20 65 6e 76  } {1}..  set env
8110: 28 53 51 4c 49 54 45 5f 46 4f 52 43 45 5f 50 52  (SQLITE_FORCE_PR
8120: 4f 58 59 5f 4c 4f 43 4b 49 4e 47 29 20 24 75 73  OXY_LOCKING) $us
8130: 69 6e 67 5f 70 72 6f 78 79 0a 20 20 73 65 74 20  ing_proxy.  set 
8140: 73 71 6c 69 74 65 5f 68 6f 73 74 69 64 5f 6e 75  sqlite_hostid_nu
8150: 6d 20 30 0a 7d 0a 0a 23 20 50 61 72 73 69 6e 67  m 0.}..# Parsing
8160: 20 6f 66 20 61 75 74 6f 5f 76 61 63 75 75 6d 20   of auto_vacuum 
8170: 73 65 74 74 69 6e 67 73 2e 0a 23 0a 66 6f 72 65  settings..#.fore
8180: 61 63 68 20 7b 61 75 74 6f 76 61 63 5f 73 65 74  ach {autovac_set
8190: 74 69 6e 67 20 76 61 6c 7d 20 7b 0a 20 20 30 20  ting val} {.  0 
81a0: 30 0a 20 20 31 20 31 0a 20 20 32 20 32 0a 20 20  0.  1 1.  2 2.  
81b0: 33 20 30 0a 20 20 2d 31 20 30 0a 20 20 6e 6f 6e  3 0.  -1 0.  non
81c0: 65 20 30 0a 20 20 4e 4f 4e 45 20 30 0a 20 20 4e  e 0.  NONE 0.  N
81d0: 6f 4e 65 20 30 0a 20 20 66 75 6c 6c 20 31 0a 20  oNe 0.  full 1. 
81e0: 20 46 55 4c 4c 20 31 0a 20 20 69 6e 63 72 65 6d   FULL 1.  increm
81f0: 65 6e 74 61 6c 20 32 0a 20 20 49 4e 43 52 45 4d  ental 2.  INCREM
8200: 45 4e 54 41 4c 20 32 0a 20 20 2d 31 32 33 34 20  ENTAL 2.  -1234 
8210: 30 0a 20 20 31 32 33 34 20 30 0a 7d 20 7b 0a 20  0.  1234 0.} {. 
8220: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
8230: 31 37 2e 31 2e 24 61 75 74 6f 76 61 63 5f 73 65  17.1.$autovac_se
8240: 74 74 69 6e 67 20 7b 0a 20 20 20 20 63 61 74 63  tting {.    catc
8250: 68 20 7b 64 62 20 63 6c 6f 73 65 7d 0a 20 20 20  h {db close}.   
8260: 20 73 71 6c 69 74 65 33 20 64 62 20 3a 6d 65 6d   sqlite3 db :mem
8270: 6f 72 79 3a 0a 20 20 20 20 65 78 65 63 73 71 6c  ory:.    execsql
8280: 20 22 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20   ".      PRAGMA 
8290: 61 75 74 6f 5f 76 61 63 75 75 6d 3d 24 3a 3a 61  auto_vacuum=$::a
82a0: 75 74 6f 76 61 63 5f 73 65 74 74 69 6e 67 3b 0a  utovac_setting;.
82b0: 20 20 20 20 20 20 50 52 41 47 4d 41 20 61 75 74        PRAGMA aut
82c0: 6f 5f 76 61 63 75 75 6d 3b 0a 20 20 20 20 22 0a  o_vacuum;.    ".
82d0: 20 20 7d 20 24 76 61 6c 0a 7d 0a 0a 23 20 50 61    } $val.}..# Pa
82e0: 72 73 69 6e 67 20 6f 66 20 74 65 6d 70 5f 73 74  rsing of temp_st
82f0: 6f 72 65 20 73 65 74 74 69 6e 67 73 2e 0a 23 0a  ore settings..#.
8300: 66 6f 72 65 61 63 68 20 7b 74 65 6d 70 5f 73 65  foreach {temp_se
8310: 74 74 69 6e 67 20 76 61 6c 7d 20 7b 0a 20 20 30  tting val} {.  0
8320: 20 30 0a 20 20 31 20 31 0a 20 20 32 20 32 0a 20   0.  1 1.  2 2. 
8330: 20 33 20 30 0a 20 20 2d 31 20 30 0a 20 20 66 69   3 0.  -1 0.  fi
8340: 6c 65 20 31 0a 20 20 46 49 4c 45 20 31 0a 20 20  le 1.  FILE 1.  
8350: 66 49 6c 45 20 31 0a 20 20 6d 65 6d 6f 72 79 20  fIlE 1.  memory 
8360: 32 0a 20 20 4d 45 4d 4f 52 59 20 32 0a 20 20 4d  2.  MEMORY 2.  M
8370: 65 4d 6f 52 79 20 32 0a 7d 20 7b 0a 20 20 64 6f  eMoRy 2.} {.  do
8380: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 38 2e  _test pragma-18.
8390: 31 2e 24 74 65 6d 70 5f 73 65 74 74 69 6e 67 20  1.$temp_setting 
83a0: 7b 0a 20 20 20 20 63 61 74 63 68 20 7b 64 62 20  {.    catch {db 
83b0: 63 6c 6f 73 65 7d 0a 20 20 20 20 73 71 6c 69 74  close}.    sqlit
83c0: 65 33 20 64 62 20 3a 6d 65 6d 6f 72 79 3a 0a 20  e3 db :memory:. 
83d0: 20 20 20 65 78 65 63 73 71 6c 20 22 0a 20 20 20     execsql ".   
83e0: 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73     PRAGMA temp_s
83f0: 74 6f 72 65 3d 24 3a 3a 74 65 6d 70 5f 73 65 74  tore=$::temp_set
8400: 74 69 6e 67 3b 0a 20 20 20 20 20 20 50 52 41 47  ting;.      PRAG
8410: 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 3d 24 3a  MA temp_store=$:
8420: 3a 74 65 6d 70 5f 73 65 74 74 69 6e 67 3b 0a 20  :temp_setting;. 
8430: 20 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70       PRAGMA temp
8440: 5f 73 74 6f 72 65 3b 0a 20 20 20 20 22 0a 20 20  _store;.    ".  
8450: 7d 20 24 76 61 6c 0a 7d 0a 0a 66 69 6e 69 73 68  } $val.}..finish
8460: 5f 74 65 73 74 0a                                _test.