/ Hex Artifact Content
Login

Artifact f11c59ec935a52edb4d3d5676d456588121fcefa:


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 2d 34 33 32 31   }.} [list -4321
0bb0: 20 24 44 46 4c 54 5f 43 41 43 48 45 5f 53 5a 20   $DFLT_CACHE_SZ 
0bc0: 30 5d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  0].do_test pragm
0bd0: 61 2d 31 2e 36 20 7b 0a 20 20 65 78 65 63 73 71  a-1.6 {.  execsq
0be0: 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 73  l {.    PRAGMA s
0bf0: 79 6e 63 68 72 6f 6e 6f 75 73 3d 4f 4e 3b 0a 20  ynchronous=ON;. 
0c00: 20 20 20 50 52 41 47 4d 41 20 63 61 63 68 65 5f     PRAGMA cache_
0c10: 73 69 7a 65 3b 0a 20 20 20 20 50 52 41 47 4d 41  size;.    PRAGMA
0c20: 20 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73   default_cache_s
0c30: 69 7a 65 3b 0a 20 20 20 20 50 52 41 47 4d 41 20  ize;.    PRAGMA 
0c40: 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20 20 7d  synchronous;.  }
0c50: 0a 7d 20 5b 6c 69 73 74 20 2d 34 33 32 31 20 24  .} [list -4321 $
0c60: 44 46 4c 54 5f 43 41 43 48 45 5f 53 5a 20 31 5d  DFLT_CACHE_SZ 1]
0c70: 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d  .do_test pragma-
0c80: 31 2e 37 20 7b 0a 20 20 64 62 20 63 6c 6f 73 65  1.7 {.  db close
0c90: 0a 20 20 73 71 6c 69 74 65 33 20 64 62 20 74 65  .  sqlite3 db te
0ca0: 73 74 2e 64 62 0a 20 20 65 78 65 63 73 71 6c 20  st.db.  execsql 
0cb0: 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 63 61 63  {.    PRAGMA cac
0cc0: 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 50 52 41  he_size;.    PRA
0cd0: 47 4d 41 20 64 65 66 61 75 6c 74 5f 63 61 63 68  GMA default_cach
0ce0: 65 5f 73 69 7a 65 3b 0a 20 20 20 20 50 52 41 47  e_size;.    PRAG
0cf0: 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a  MA synchronous;.
0d00: 20 20 7d 0a 7d 20 5b 6c 69 73 74 20 24 44 46 4c    }.} [list $DFL
0d10: 54 5f 43 41 43 48 45 5f 53 5a 20 24 44 46 4c 54  T_CACHE_SZ $DFLT
0d20: 5f 43 41 43 48 45 5f 53 5a 20 32 5d 0a 64 6f 5f  _CACHE_SZ 2].do_
0d30: 74 65 73 74 20 70 72 61 67 6d 61 2d 31 2e 38 20  test pragma-1.8 
0d40: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
0d50: 20 20 50 52 41 47 4d 41 20 64 65 66 61 75 6c 74    PRAGMA default
0d60: 5f 63 61 63 68 65 5f 73 69 7a 65 3d 2d 31 32 33  _cache_size=-123
0d70: 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 63 61 63  ;.    PRAGMA cac
0d80: 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 50 52 41  he_size;.    PRA
0d90: 47 4d 41 20 64 65 66 61 75 6c 74 5f 63 61 63 68  GMA default_cach
0da0: 65 5f 73 69 7a 65 3b 0a 20 20 20 20 50 52 41 47  e_size;.    PRAG
0db0: 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a  MA synchronous;.
0dc0: 20 20 7d 0a 7d 20 7b 31 32 33 20 31 32 33 20 32    }.} {123 123 2
0dd0: 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  }.do_test pragma
0de0: 2d 31 2e 39 2e 31 20 7b 0a 20 20 64 62 20 63 6c  -1.9.1 {.  db cl
0df0: 6f 73 65 0a 20 20 73 71 6c 69 74 65 33 20 64 62  ose.  sqlite3 db
0e00: 20 74 65 73 74 2e 64 62 3b 20 73 65 74 20 3a 3a   test.db; set ::
0e10: 44 42 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6e 6e  DB [sqlite3_conn
0e20: 65 63 74 69 6f 6e 5f 70 6f 69 6e 74 65 72 20 64  ection_pointer d
0e30: 62 5d 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  b].  execsql {. 
0e40: 20 20 20 50 52 41 47 4d 41 20 63 61 63 68 65 5f     PRAGMA cache_
0e50: 73 69 7a 65 3b 0a 20 20 20 20 50 52 41 47 4d 41  size;.    PRAGMA
0e60: 20 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73   default_cache_s
0e70: 69 7a 65 3b 0a 20 20 20 20 50 52 41 47 4d 41 20  ize;.    PRAGMA 
0e80: 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20 20 7d  synchronous;.  }
0e90: 0a 7d 20 7b 31 32 33 20 31 32 33 20 32 7d 0a 69  .} {123 123 2}.i
0ea0: 66 63 61 70 61 62 6c 65 20 76 61 63 75 75 6d 20  fcapable vacuum 
0eb0: 7b 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67  {.  do_test prag
0ec0: 6d 61 2d 31 2e 39 2e 32 20 7b 0a 20 20 20 20 65  ma-1.9.2 {.    e
0ed0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 56  xecsql {.      V
0ee0: 41 43 55 55 4d 3b 0a 20 20 20 20 20 20 50 52 41  ACUUM;.      PRA
0ef0: 47 4d 41 20 63 61 63 68 65 5f 73 69 7a 65 3b 0a  GMA cache_size;.
0f00: 20 20 20 20 20 20 50 52 41 47 4d 41 20 64 65 66        PRAGMA def
0f10: 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65 3b  ault_cache_size;
0f20: 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 73 79  .      PRAGMA sy
0f30: 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20 20 20 20 7d  nchronous;.    }
0f40: 0a 20 20 7d 20 7b 31 32 33 20 31 32 33 20 32 7d  .  } {123 123 2}
0f50: 0a 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .}.do_test pragm
0f60: 61 2d 31 2e 31 30 20 7b 0a 20 20 65 78 65 63 73  a-1.10 {.  execs
0f70: 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20  ql {.    PRAGMA 
0f80: 73 79 6e 63 68 72 6f 6e 6f 75 73 3d 4e 4f 52 4d  synchronous=NORM
0f90: 41 4c 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 63  AL;.    PRAGMA c
0fa0: 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 50  ache_size;.    P
0fb0: 52 41 47 4d 41 20 64 65 66 61 75 6c 74 5f 63 61  RAGMA default_ca
0fc0: 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 50 52  che_size;.    PR
0fd0: 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73  AGMA synchronous
0fe0: 3b 0a 20 20 7d 0a 7d 20 7b 31 32 33 20 31 32 33  ;.  }.} {123 123
0ff0: 20 31 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67   1}.do_test prag
1000: 6d 61 2d 31 2e 31 31 20 7b 0a 20 20 65 78 65 63  ma-1.11 {.  exec
1010: 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41  sql {.    PRAGMA
1020: 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3d 46 55 4c   synchronous=FUL
1030: 4c 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 63 61  L;.    PRAGMA ca
1040: 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 50 52  che_size;.    PR
1050: 41 47 4d 41 20 64 65 66 61 75 6c 74 5f 63 61 63  AGMA default_cac
1060: 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 50 52 41  he_size;.    PRA
1070: 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3b  GMA synchronous;
1080: 0a 20 20 7d 0a 7d 20 7b 31 32 33 20 31 32 33 20  .  }.} {123 123 
1090: 32 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  2}.do_test pragm
10a0: 61 2d 31 2e 31 32 20 7b 0a 20 20 64 62 20 63 6c  a-1.12 {.  db cl
10b0: 6f 73 65 0a 20 20 73 71 6c 69 74 65 33 20 64 62  ose.  sqlite3 db
10c0: 20 74 65 73 74 2e 64 62 3b 20 73 65 74 20 3a 3a   test.db; set ::
10d0: 44 42 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6e 6e  DB [sqlite3_conn
10e0: 65 63 74 69 6f 6e 5f 70 6f 69 6e 74 65 72 20 64  ection_pointer d
10f0: 62 5d 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  b].  execsql {. 
1100: 20 20 20 50 52 41 47 4d 41 20 63 61 63 68 65 5f     PRAGMA cache_
1110: 73 69 7a 65 3b 0a 20 20 20 20 50 52 41 47 4d 41  size;.    PRAGMA
1120: 20 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73   default_cache_s
1130: 69 7a 65 3b 0a 20 20 20 20 50 52 41 47 4d 41 20  ize;.    PRAGMA 
1140: 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20 20 7d  synchronous;.  }
1150: 0a 7d 20 7b 31 32 33 20 31 32 33 20 32 7d 0a 0a  .} {123 123 2}..
1160: 23 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20  # Make sure the 
1170: 70 72 61 67 6d 61 20 68 61 6e 64 6c 65 72 20 75  pragma handler u
1180: 6e 64 65 72 73 74 61 6e 64 73 20 6e 75 6d 65 72  nderstands numer
1190: 69 63 20 76 61 6c 75 65 73 20 69 6e 20 61 64 64  ic values in add
11a0: 69 74 69 6f 6e 0a 23 20 74 6f 20 6b 65 79 77 6f  ition.# to keywo
11b0: 72 64 73 20 6c 69 6b 65 20 22 6f 66 66 22 20 61  rds like "off" a
11c0: 6e 64 20 22 66 75 6c 6c 22 2e 0a 23 0a 64 6f 5f  nd "full"..#.do_
11d0: 74 65 73 74 20 70 72 61 67 6d 61 2d 31 2e 31 33  test pragma-1.13
11e0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
11f0: 20 20 20 50 52 41 47 4d 41 20 73 79 6e 63 68 72     PRAGMA synchr
1200: 6f 6e 6f 75 73 3d 30 3b 0a 20 20 20 20 50 52 41  onous=0;.    PRA
1210: 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3b  GMA synchronous;
1220: 0a 20 20 7d 0a 7d 20 7b 30 7d 0a 64 6f 5f 74 65  .  }.} {0}.do_te
1230: 73 74 20 70 72 61 67 6d 61 2d 31 2e 31 34 20 7b  st pragma-1.14 {
1240: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
1250: 20 50 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e   PRAGMA synchron
1260: 6f 75 73 3d 32 3b 0a 20 20 20 20 50 52 41 47 4d  ous=2;.    PRAGM
1270: 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20  A synchronous;. 
1280: 20 7d 0a 7d 20 7b 32 7d 0a 7d 20 3b 23 20 69 66   }.} {2}.} ;# if
1290: 63 61 70 61 62 6c 65 20 70 61 67 65 72 5f 70 72  capable pager_pr
12a0: 61 67 6d 61 73 0a 0a 23 20 54 65 73 74 20 74 75  agmas..# Test tu
12b0: 72 6e 69 6e 67 20 22 66 6c 61 67 22 20 70 72 61  rning "flag" pra
12c0: 67 6d 61 73 20 6f 6e 20 61 6e 64 20 6f 66 66 2e  gmas on and off.
12d0: 0a 23 0a 69 66 63 61 70 61 62 6c 65 20 64 65 62  .#.ifcapable deb
12e0: 75 67 20 7b 0a 20 20 23 20 50 72 61 67 6d 61 20  ug {.  # Pragma 
12f0: 22 76 64 62 65 5f 6c 69 73 74 69 6e 67 22 20 69  "vdbe_listing" i
1300: 73 20 6f 6e 6c 79 20 61 76 61 69 6c 61 62 6c 65  s only available
1310: 20 69 66 20 63 6f 6d 70 69 6c 65 64 20 77 69 74   if compiled wit
1320: 68 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  h SQLITE_DEBUG. 
1330: 20 23 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61   #.  do_test pra
1340: 67 6d 61 2d 31 2e 31 35 20 7b 0a 20 20 20 20 65  gma-1.15 {.    e
1350: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50  xecsql {.      P
1360: 52 41 47 4d 41 20 76 64 62 65 5f 6c 69 73 74 69  RAGMA vdbe_listi
1370: 6e 67 3d 59 45 53 3b 0a 20 20 20 20 20 20 50 52  ng=YES;.      PR
1380: 41 47 4d 41 20 76 64 62 65 5f 6c 69 73 74 69 6e  AGMA vdbe_listin
1390: 67 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 31 7d  g;.    }.  } {1}
13a0: 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .  do_test pragm
13b0: 61 2d 31 2e 31 36 20 7b 0a 20 20 20 20 65 78 65  a-1.16 {.    exe
13c0: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41  csql {.      PRA
13d0: 47 4d 41 20 76 64 62 65 5f 6c 69 73 74 69 6e 67  GMA vdbe_listing
13e0: 3d 4e 4f 3b 0a 20 20 20 20 20 20 50 52 41 47 4d  =NO;.      PRAGM
13f0: 41 20 76 64 62 65 5f 6c 69 73 74 69 6e 67 3b 0a  A vdbe_listing;.
1400: 20 20 20 20 7d 0a 20 20 7d 20 7b 30 7d 0a 7d 0a      }.  } {0}.}.
1410: 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d  .do_test pragma-
1420: 31 2e 31 37 20 7b 0a 20 20 65 78 65 63 73 71 6c  1.17 {.  execsql
1430: 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 70 61   {.    PRAGMA pa
1440: 72 73 65 72 5f 74 72 61 63 65 3d 4f 4e 3b 0a 20  rser_trace=ON;. 
1450: 20 20 20 50 52 41 47 4d 41 20 70 61 72 73 65 72     PRAGMA parser
1460: 5f 74 72 61 63 65 3d 4f 46 46 3b 0a 20 20 7d 0a  _trace=OFF;.  }.
1470: 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61  } {}.do_test pra
1480: 67 6d 61 2d 31 2e 31 38 20 7b 0a 20 20 65 78 65  gma-1.18 {.  exe
1490: 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d  csql {.    PRAGM
14a0: 41 20 62 6f 67 75 73 20 3d 20 2d 31 32 33 34 3b  A bogus = -1234;
14b0: 20 20 2d 2d 20 50 61 72 73 69 6e 67 20 6f 66 20    -- Parsing of 
14c0: 6e 65 67 61 74 69 76 65 20 76 61 6c 75 65 73 0a  negative values.
14d0: 20 20 7d 0a 7d 20 7b 7d 0a 0a 23 20 54 65 73 74    }.} {}..# Test
14e0: 20 6d 6f 64 69 66 79 69 6e 67 20 74 68 65 20 73   modifying the s
14f0: 61 66 65 74 79 5f 6c 65 76 65 6c 20 6f 66 20 61  afety_level of a
1500: 6e 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  n attached datab
1510: 61 73 65 2e 0a 69 66 63 61 70 61 62 6c 65 20 70  ase..ifcapable p
1520: 61 67 65 72 5f 70 72 61 67 6d 61 73 26 26 61 74  ager_pragmas&&at
1530: 74 61 63 68 20 7b 0a 20 20 64 6f 5f 74 65 73 74  tach {.  do_test
1540: 20 70 72 61 67 6d 61 2d 32 2e 31 20 7b 0a 20 20   pragma-2.1 {.  
1550: 20 20 66 6f 72 63 65 64 65 6c 65 74 65 20 74 65    forcedelete te
1560: 73 74 32 2e 64 62 0a 20 20 20 20 66 6f 72 63 65  st2.db.    force
1570: 64 65 6c 65 74 65 20 74 65 73 74 32 2e 64 62 2d  delete test2.db-
1580: 6a 6f 75 72 6e 61 6c 0a 20 20 20 20 65 78 65 63  journal.    exec
1590: 73 71 6c 20 7b 0a 20 20 20 20 20 20 41 54 54 41  sql {.      ATTA
15a0: 43 48 20 27 74 65 73 74 32 2e 64 62 27 20 41 53  CH 'test2.db' AS
15b0: 20 61 75 78 3b 0a 20 20 20 20 7d 20 0a 20 20 7d   aux;.    } .  }
15c0: 20 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72   {}.  do_test pr
15d0: 61 67 6d 61 2d 32 2e 32 20 7b 0a 20 20 20 20 65  agma-2.2 {.    e
15e0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 70  xecsql {.      p
15f0: 72 61 67 6d 61 20 61 75 78 2e 73 79 6e 63 68 72  ragma aux.synchr
1600: 6f 6e 6f 75 73 3b 0a 20 20 20 20 7d 20 0a 20 20  onous;.    } .  
1610: 7d 20 7b 32 7d 0a 20 20 64 6f 5f 74 65 73 74 20  } {2}.  do_test 
1620: 70 72 61 67 6d 61 2d 32 2e 33 20 7b 0a 20 20 20  pragma-2.3 {.   
1630: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20   execsql {.     
1640: 20 70 72 61 67 6d 61 20 61 75 78 2e 73 79 6e 63   pragma aux.sync
1650: 68 72 6f 6e 6f 75 73 20 3d 20 4f 46 46 3b 0a 20  hronous = OFF;. 
1660: 20 20 20 20 20 70 72 61 67 6d 61 20 61 75 78 2e       pragma aux.
1670: 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20 20 20  synchronous;.   
1680: 20 20 20 70 72 61 67 6d 61 20 73 79 6e 63 68 72     pragma synchr
1690: 6f 6e 6f 75 73 3b 0a 20 20 20 20 7d 20 0a 20 20  onous;.    } .  
16a0: 7d 20 7b 30 20 32 7d 0a 20 20 64 6f 5f 74 65 73  } {0 2}.  do_tes
16b0: 74 20 70 72 61 67 6d 61 2d 32 2e 34 20 7b 0a 20  t pragma-2.4 {. 
16c0: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
16d0: 20 20 20 70 72 61 67 6d 61 20 61 75 78 2e 73 79     pragma aux.sy
16e0: 6e 63 68 72 6f 6e 6f 75 73 20 3d 20 4f 4e 3b 0a  nchronous = ON;.
16f0: 20 20 20 20 20 20 70 72 61 67 6d 61 20 73 79 6e        pragma syn
1700: 63 68 72 6f 6e 6f 75 73 3b 0a 20 20 20 20 20 20  chronous;.      
1710: 70 72 61 67 6d 61 20 61 75 78 2e 73 79 6e 63 68  pragma aux.synch
1720: 72 6f 6e 6f 75 73 3b 0a 20 20 20 20 7d 20 0a 20  ronous;.    } . 
1730: 20 7d 20 7b 32 20 31 7d 0a 7d 20 3b 23 20 69 66   } {2 1}.} ;# if
1740: 63 61 70 61 62 6c 65 20 70 61 67 65 72 5f 70 72  capable pager_pr
1750: 61 67 6d 61 73 0a 0a 23 20 43 6f 6e 73 74 72 75  agmas..# Constru
1760: 63 74 20 61 20 63 6f 72 72 75 70 74 65 64 20 69  ct a corrupted i
1770: 6e 64 65 78 20 61 6e 64 20 6d 61 6b 65 20 73 75  ndex and make su
1780: 72 65 20 74 68 65 20 69 6e 74 65 67 72 69 74 79  re the integrity
1790: 5f 63 68 65 63 6b 0a 23 20 70 72 61 67 6d 61 20  _check.# pragma 
17a0: 66 69 6e 64 73 20 69 74 2e 0a 23 0a 23 20 54 68  finds it..#.# Th
17b0: 65 73 65 20 74 65 73 74 73 20 77 6f 6e 27 74 20  ese tests won't 
17c0: 77 6f 72 6b 20 69 66 20 74 68 65 20 64 61 74 61  work if the data
17d0: 62 61 73 65 20 69 73 20 65 6e 63 72 79 70 74 65  base is encrypte
17e0: 64 0a 23 0a 64 6f 5f 74 65 73 74 20 70 72 61 67  d.#.do_test prag
17f0: 6d 61 2d 33 2e 31 20 7b 0a 20 20 64 62 20 63 6c  ma-3.1 {.  db cl
1800: 6f 73 65 0a 20 20 66 6f 72 63 65 64 65 6c 65 74  ose.  forcedelet
1810: 65 20 74 65 73 74 2e 64 62 20 74 65 73 74 2e 64  e test.db test.d
1820: 62 2d 6a 6f 75 72 6e 61 6c 0a 20 20 73 71 6c 69  b-journal.  sqli
1830: 74 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20  te3 db test.db. 
1840: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50   execsql {.    P
1850: 52 41 47 4d 41 20 61 75 74 6f 5f 76 61 63 75 75  RAGMA auto_vacuu
1860: 6d 3d 4f 46 46 3b 0a 20 20 20 20 42 45 47 49 4e  m=OFF;.    BEGIN
1870: 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42  ;.    CREATE TAB
1880: 4c 45 20 74 32 28 61 2c 62 2c 63 29 3b 0a 20 20  LE t2(a,b,c);.  
1890: 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 69    CREATE INDEX i
18a0: 32 20 4f 4e 20 74 32 28 61 29 3b 0a 20 20 20 20  2 ON t2(a);.    
18b0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56  INSERT INTO t2 V
18c0: 41 4c 55 45 53 28 31 31 2c 32 2c 33 29 3b 0a 20  ALUES(11,2,3);. 
18d0: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
18e0: 32 20 56 41 4c 55 45 53 28 32 32 2c 33 2c 34 29  2 VALUES(22,3,4)
18f0: 3b 0a 20 20 20 20 43 4f 4d 4d 49 54 3b 0a 20 20  ;.    COMMIT;.  
1900: 20 20 53 45 4c 45 43 54 20 72 6f 77 69 64 2c 20    SELECT rowid, 
1910: 2a 20 66 72 6f 6d 20 74 32 3b 0a 20 20 7d 0a 7d  * from t2;.  }.}
1920: 20 7b 31 20 31 31 20 32 20 33 20 32 20 32 32 20   {1 11 2 3 2 22 
1930: 33 20 34 7d 0a 69 66 63 61 70 61 62 6c 65 20 61  3 4}.ifcapable a
1940: 74 74 61 63 68 20 7b 0a 20 20 69 66 20 7b 21 5b  ttach {.  if {![
1950: 73 71 6c 69 74 65 33 20 2d 68 61 73 2d 63 6f 64  sqlite3 -has-cod
1960: 65 63 5d 20 26 26 20 24 73 71 6c 69 74 65 5f 6f  ec] && $sqlite_o
1970: 70 74 69 6f 6e 73 28 69 6e 74 65 67 72 69 74 79  ptions(integrity
1980: 63 6b 29 7d 20 7b 0a 20 20 20 20 64 6f 5f 74 65  ck)} {.    do_te
1990: 73 74 20 70 72 61 67 6d 61 2d 33 2e 32 20 7b 0a  st pragma-3.2 {.
19a0: 20 20 20 20 20 20 64 62 20 65 76 61 6c 20 7b 53        db eval {S
19b0: 45 4c 45 43 54 20 72 6f 6f 74 70 61 67 65 20 46  ELECT rootpage F
19c0: 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
19d0: 72 20 57 48 45 52 45 20 6e 61 6d 65 3d 27 69 32  r WHERE name='i2
19e0: 27 7d 20 62 72 65 61 6b 0a 20 20 20 20 20 20 73  '} break.      s
19f0: 65 74 20 70 67 73 7a 20 5b 64 62 20 65 76 61 6c  et pgsz [db eval
1a00: 20 7b 50 52 41 47 4d 41 20 70 61 67 65 5f 73 69   {PRAGMA page_si
1a10: 7a 65 7d 5d 0a 20 20 20 20 20 20 23 20 6f 76 65  ze}].      # ove
1a20: 72 77 72 69 74 65 20 74 68 65 20 68 65 61 64 65  rwrite the heade
1a30: 72 20 6f 6e 20 74 68 65 20 72 6f 6f 74 70 61 67  r on the rootpag
1a40: 65 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20 69  e of the index i
1a50: 6e 20 6f 72 64 65 72 20 74 6f 0a 20 20 20 20 20  n order to.     
1a60: 20 23 20 6d 61 6b 65 20 74 68 65 20 69 6e 64 65   # make the inde
1a70: 78 20 61 70 70 65 61 72 20 74 6f 20 62 65 20 65  x appear to be e
1a80: 6d 70 74 79 2e 0a 20 20 20 20 20 20 23 0a 20 20  mpty..      #.  
1a90: 20 20 20 20 73 65 74 20 6f 66 66 73 65 74 20 5b      set offset [
1aa0: 65 78 70 72 20 7b 24 70 67 73 7a 2a 28 24 72 6f  expr {$pgsz*($ro
1ab0: 6f 74 70 61 67 65 2d 31 29 7d 5d 0a 20 20 20 20  otpage-1)}].    
1ac0: 20 20 68 65 78 69 6f 5f 77 72 69 74 65 20 74 65    hexio_write te
1ad0: 73 74 2e 64 62 20 24 6f 66 66 73 65 74 20 30 61  st.db $offset 0a
1ae0: 30 30 30 30 30 30 30 30 30 34 30 30 30 30 30 30  0000000004000000
1af0: 30 30 30 30 0a 20 20 20 20 20 20 64 62 20 63 6c  0000.      db cl
1b00: 6f 73 65 0a 20 20 20 20 20 20 73 71 6c 69 74 65  ose.      sqlite
1b10: 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20 20  3 db test.db.   
1b20: 20 20 20 65 78 65 63 73 71 6c 20 7b 50 52 41 47     execsql {PRAG
1b30: 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65  MA integrity_che
1b40: 63 6b 7d 0a 20 20 20 20 7d 20 7b 7b 72 6f 77 69  ck}.    } {{rowi
1b50: 64 20 31 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d  d 1 missing from
1b60: 20 69 6e 64 65 78 20 69 32 7d 20 7b 72 6f 77 69   index i2} {rowi
1b70: 64 20 32 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d  d 2 missing from
1b80: 20 69 6e 64 65 78 20 69 32 7d 20 7b 77 72 6f 6e   index i2} {wron
1b90: 67 20 23 20 6f 66 20 65 6e 74 72 69 65 73 20 69  g # of entries i
1ba0: 6e 20 69 6e 64 65 78 20 69 32 7d 7d 0a 20 20 20  n index i2}}.   
1bb0: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
1bc0: 33 2e 33 20 7b 0a 20 20 20 20 20 20 65 78 65 63  3.3 {.      exec
1bd0: 73 71 6c 20 7b 50 52 41 47 4d 41 20 69 6e 74 65  sql {PRAGMA inte
1be0: 67 72 69 74 79 5f 63 68 65 63 6b 3d 31 7d 0a 20  grity_check=1}. 
1bf0: 20 20 20 7d 20 7b 7b 72 6f 77 69 64 20 31 20 6d     } {{rowid 1 m
1c00: 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65  issing from inde
1c10: 78 20 69 32 7d 7d 0a 20 20 20 20 64 6f 5f 74 65  x i2}}.    do_te
1c20: 73 74 20 70 72 61 67 6d 61 2d 33 2e 34 20 7b 0a  st pragma-3.4 {.
1c30: 20 20 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a        execsql {.
1c40: 20 20 20 20 20 20 20 20 41 54 54 41 43 48 20 44          ATTACH D
1c50: 41 54 41 42 41 53 45 20 27 74 65 73 74 2e 64 62  ATABASE 'test.db
1c60: 27 20 41 53 20 74 32 3b 0a 20 20 20 20 20 20 20  ' AS t2;.       
1c70: 20 50 52 41 47 4d 41 20 69 6e 74 65 67 72 69 74   PRAGMA integrit
1c80: 79 5f 63 68 65 63 6b 0a 20 20 20 20 20 20 7d 0a  y_check.      }.
1c90: 20 20 20 20 7d 20 7b 7b 72 6f 77 69 64 20 31 20      } {{rowid 1 
1ca0: 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64  missing from ind
1cb0: 65 78 20 69 32 7d 20 7b 72 6f 77 69 64 20 32 20  ex i2} {rowid 2 
1cc0: 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64  missing from ind
1cd0: 65 78 20 69 32 7d 20 7b 77 72 6f 6e 67 20 23 20  ex i2} {wrong # 
1ce0: 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 69 6e  of entries in in
1cf0: 64 65 78 20 69 32 7d 20 7b 72 6f 77 69 64 20 31  dex i2} {rowid 1
1d00: 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e   missing from in
1d10: 64 65 78 20 69 32 7d 20 7b 72 6f 77 69 64 20 32  dex i2} {rowid 2
1d20: 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e   missing from in
1d30: 64 65 78 20 69 32 7d 20 7b 77 72 6f 6e 67 20 23  dex i2} {wrong #
1d40: 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 69   of entries in i
1d50: 6e 64 65 78 20 69 32 7d 7d 0a 20 20 20 20 64 6f  ndex i2}}.    do
1d60: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 33 2e 35  _test pragma-3.5
1d70: 20 7b 0a 20 20 20 20 20 20 65 78 65 63 73 71 6c   {.      execsql
1d80: 20 7b 0a 20 20 20 20 20 20 20 20 50 52 41 47 4d   {.        PRAGM
1d90: 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63  A integrity_chec
1da0: 6b 3d 34 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  k=4.      }.    
1db0: 7d 20 7b 7b 72 6f 77 69 64 20 31 20 6d 69 73 73  } {{rowid 1 miss
1dc0: 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69  ing from index i
1dd0: 32 7d 20 7b 72 6f 77 69 64 20 32 20 6d 69 73 73  2} {rowid 2 miss
1de0: 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69  ing from index i
1df0: 32 7d 20 7b 77 72 6f 6e 67 20 23 20 6f 66 20 65  2} {wrong # of e
1e00: 6e 74 72 69 65 73 20 69 6e 20 69 6e 64 65 78 20  ntries in index 
1e10: 69 32 7d 20 7b 72 6f 77 69 64 20 31 20 6d 69 73  i2} {rowid 1 mis
1e20: 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20  sing from index 
1e30: 69 32 7d 7d 0a 20 20 20 20 64 6f 5f 74 65 73 74  i2}}.    do_test
1e40: 20 70 72 61 67 6d 61 2d 33 2e 36 20 7b 0a 20 20   pragma-3.6 {.  
1e50: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20      execsql {.  
1e60: 20 20 20 20 20 20 50 52 41 47 4d 41 20 69 6e 74        PRAGMA int
1e70: 65 67 72 69 74 79 5f 63 68 65 63 6b 3d 78 79 7a  egrity_check=xyz
1e80: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 20 7b  .      }.    } {
1e90: 7b 72 6f 77 69 64 20 31 20 6d 69 73 73 69 6e 67  {rowid 1 missing
1ea0: 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20   from index i2} 
1eb0: 7b 72 6f 77 69 64 20 32 20 6d 69 73 73 69 6e 67  {rowid 2 missing
1ec0: 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20   from index i2} 
1ed0: 7b 77 72 6f 6e 67 20 23 20 6f 66 20 65 6e 74 72  {wrong # of entr
1ee0: 69 65 73 20 69 6e 20 69 6e 64 65 78 20 69 32 7d  ies in index i2}
1ef0: 20 7b 72 6f 77 69 64 20 31 20 6d 69 73 73 69 6e   {rowid 1 missin
1f00: 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d  g from index i2}
1f10: 20 7b 72 6f 77 69 64 20 32 20 6d 69 73 73 69 6e   {rowid 2 missin
1f20: 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d  g from index i2}
1f30: 20 7b 77 72 6f 6e 67 20 23 20 6f 66 20 65 6e 74   {wrong # of ent
1f40: 72 69 65 73 20 69 6e 20 69 6e 64 65 78 20 69 32  ries in index i2
1f50: 7d 7d 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 70  }}.    do_test p
1f60: 72 61 67 6d 61 2d 33 2e 37 20 7b 0a 20 20 20 20  ragma-3.7 {.    
1f70: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
1f80: 20 20 20 20 50 52 41 47 4d 41 20 69 6e 74 65 67      PRAGMA integ
1f90: 72 69 74 79 5f 63 68 65 63 6b 3d 30 0a 20 20 20  rity_check=0.   
1fa0: 20 20 20 7d 0a 20 20 20 20 7d 20 7b 7b 72 6f 77     }.    } {{row
1fb0: 69 64 20 31 20 6d 69 73 73 69 6e 67 20 66 72 6f  id 1 missing fro
1fc0: 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b 72 6f 77  m index i2} {row
1fd0: 69 64 20 32 20 6d 69 73 73 69 6e 67 20 66 72 6f  id 2 missing fro
1fe0: 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b 77 72 6f  m index i2} {wro
1ff0: 6e 67 20 23 20 6f 66 20 65 6e 74 72 69 65 73 20  ng # of entries 
2000: 69 6e 20 69 6e 64 65 78 20 69 32 7d 20 7b 72 6f  in index i2} {ro
2010: 77 69 64 20 31 20 6d 69 73 73 69 6e 67 20 66 72  wid 1 missing fr
2020: 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b 72 6f  om index i2} {ro
2030: 77 69 64 20 32 20 6d 69 73 73 69 6e 67 20 66 72  wid 2 missing fr
2040: 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b 77 72  om index i2} {wr
2050: 6f 6e 67 20 23 20 6f 66 20 65 6e 74 72 69 65 73  ong # of entries
2060: 20 69 6e 20 69 6e 64 65 78 20 69 32 7d 7d 0a 20   in index i2}}. 
2070: 20 0a 20 20 20 20 23 20 41 64 64 20 61 64 64 69   .    # Add addi
2080: 74 69 6f 6e 61 6c 20 63 6f 72 72 75 70 74 69 6f  tional corruptio
2090: 6e 20 62 79 20 61 70 70 65 6e 64 69 6e 67 20 75  n by appending u
20a0: 6e 75 73 65 64 20 70 61 67 65 73 20 74 6f 20 74  nused pages to t
20b0: 68 65 20 65 6e 64 20 6f 66 0a 20 20 20 20 23 20  he end of.    # 
20c0: 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
20d0: 65 20 74 65 73 74 65 72 72 2e 64 62 0a 20 20 20  e testerr.db.   
20e0: 20 23 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 70   #.    do_test p
20f0: 72 61 67 6d 61 2d 33 2e 38 20 7b 0a 20 20 20 20  ragma-3.8 {.    
2100: 20 20 65 78 65 63 73 71 6c 20 7b 44 45 54 41 43    execsql {DETAC
2110: 48 20 74 32 7d 0a 20 20 20 20 20 20 66 6f 72 63  H t2}.      forc
2120: 65 64 65 6c 65 74 65 20 74 65 73 74 65 72 72 2e  edelete testerr.
2130: 64 62 20 74 65 73 74 65 72 72 2e 64 62 2d 6a 6f  db testerr.db-jo
2140: 75 72 6e 61 6c 0a 20 20 20 20 20 20 73 65 74 20  urnal.      set 
2150: 6f 75 74 20 5b 6f 70 65 6e 20 74 65 73 74 65 72  out [open tester
2160: 72 2e 64 62 20 77 5d 0a 20 20 20 20 20 20 66 63  r.db w].      fc
2170: 6f 6e 66 69 67 75 72 65 20 24 6f 75 74 20 2d 74  onfigure $out -t
2180: 72 61 6e 73 6c 61 74 69 6f 6e 20 62 69 6e 61 72  ranslation binar
2190: 79 0a 20 20 20 20 20 20 73 65 74 20 69 6e 20 5b  y.      set in [
21a0: 6f 70 65 6e 20 74 65 73 74 2e 64 62 20 72 5d 0a  open test.db r].
21b0: 20 20 20 20 20 20 66 63 6f 6e 66 69 67 75 72 65        fconfigure
21c0: 20 24 69 6e 20 2d 74 72 61 6e 73 6c 61 74 69 6f   $in -translatio
21d0: 6e 20 62 69 6e 61 72 79 0a 20 20 20 20 20 20 70  n binary.      p
21e0: 75 74 73 20 2d 6e 6f 6e 65 77 6c 69 6e 65 20 24  uts -nonewline $
21f0: 6f 75 74 20 5b 72 65 61 64 20 24 69 6e 5d 0a 20  out [read $in]. 
2200: 20 20 20 20 20 73 65 65 6b 20 24 69 6e 20 30 0a       seek $in 0.
2210: 20 20 20 20 20 20 70 75 74 73 20 2d 6e 6f 6e 65        puts -none
2220: 77 6c 69 6e 65 20 24 6f 75 74 20 5b 72 65 61 64  wline $out [read
2230: 20 24 69 6e 5d 0a 20 20 20 20 20 20 63 6c 6f 73   $in].      clos
2240: 65 20 24 69 6e 0a 20 20 20 20 20 20 63 6c 6f 73  e $in.      clos
2250: 65 20 24 6f 75 74 0a 20 20 20 20 20 20 68 65 78  e $out.      hex
2260: 69 6f 5f 77 72 69 74 65 20 74 65 73 74 65 72 72  io_write testerr
2270: 2e 64 62 20 32 38 20 30 30 30 30 30 30 30 30 0a  .db 28 00000000.
2280: 20 20 20 20 20 20 65 78 65 63 73 71 6c 20 7b 52        execsql {R
2290: 45 49 4e 44 45 58 20 74 32 7d 0a 20 20 20 20 20  EINDEX t2}.     
22a0: 20 65 78 65 63 73 71 6c 20 7b 50 52 41 47 4d 41   execsql {PRAGMA
22b0: 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b   integrity_check
22c0: 7d 0a 20 20 20 20 7d 20 7b 6f 6b 7d 0a 20 20 20  }.    } {ok}.   
22d0: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
22e0: 33 2e 38 2e 31 20 7b 0a 20 20 20 20 20 20 65 78  3.8.1 {.      ex
22f0: 65 63 73 71 6c 20 7b 50 52 41 47 4d 41 20 71 75  ecsql {PRAGMA qu
2300: 69 63 6b 5f 63 68 65 63 6b 7d 0a 20 20 20 20 7d  ick_check}.    }
2310: 20 7b 6f 6b 7d 0a 20 20 20 20 64 6f 5f 74 65 73   {ok}.    do_tes
2320: 74 20 70 72 61 67 6d 61 2d 33 2e 38 2e 32 20 7b  t pragma-3.8.2 {
2330: 0a 20 20 20 20 20 20 65 78 65 63 73 71 6c 20 7b  .      execsql {
2340: 50 52 41 47 4d 41 20 51 55 49 43 4b 5f 43 48 45  PRAGMA QUICK_CHE
2350: 43 4b 7d 0a 20 20 20 20 7d 20 7b 6f 6b 7d 0a 20  CK}.    } {ok}. 
2360: 20 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d     do_test pragm
2370: 61 2d 33 2e 39 20 7b 0a 20 20 20 20 20 20 65 78  a-3.9 {.      ex
2380: 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 20 20  ecsql {.        
2390: 41 54 54 41 43 48 20 27 74 65 73 74 65 72 72 2e  ATTACH 'testerr.
23a0: 64 62 27 20 41 53 20 74 32 3b 0a 20 20 20 20 20  db' AS t2;.     
23b0: 20 20 20 50 52 41 47 4d 41 20 69 6e 74 65 67 72     PRAGMA integr
23c0: 69 74 79 5f 63 68 65 63 6b 0a 20 20 20 20 20 20  ity_check.      
23d0: 7d 0a 20 20 20 20 7d 20 7b 7b 2a 2a 2a 20 69 6e  }.    } {{*** in
23e0: 20 64 61 74 61 62 61 73 65 20 74 32 20 2a 2a 2a   database t2 ***
23f0: 0a 50 61 67 65 20 34 20 69 73 20 6e 65 76 65 72  .Page 4 is never
2400: 20 75 73 65 64 0a 50 61 67 65 20 35 20 69 73 20   used.Page 5 is 
2410: 6e 65 76 65 72 20 75 73 65 64 0a 50 61 67 65 20  never used.Page 
2420: 36 20 69 73 20 6e 65 76 65 72 20 75 73 65 64 7d  6 is never used}
2430: 20 7b 72 6f 77 69 64 20 31 20 6d 69 73 73 69 6e   {rowid 1 missin
2440: 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d  g from index i2}
2450: 20 7b 72 6f 77 69 64 20 32 20 6d 69 73 73 69 6e   {rowid 2 missin
2460: 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d  g from index i2}
2470: 20 7b 77 72 6f 6e 67 20 23 20 6f 66 20 65 6e 74   {wrong # of ent
2480: 72 69 65 73 20 69 6e 20 69 6e 64 65 78 20 69 32  ries in index i2
2490: 7d 7d 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 70  }}.    do_test p
24a0: 72 61 67 6d 61 2d 33 2e 31 30 20 7b 0a 20 20 20  ragma-3.10 {.   
24b0: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
24c0: 20 20 20 20 20 50 52 41 47 4d 41 20 69 6e 74 65       PRAGMA inte
24d0: 67 72 69 74 79 5f 63 68 65 63 6b 3d 31 0a 20 20  grity_check=1.  
24e0: 20 20 20 20 7d 0a 20 20 20 20 7d 20 7b 7b 2a 2a      }.    } {{**
24f0: 2a 20 69 6e 20 64 61 74 61 62 61 73 65 20 74 32  * in database t2
2500: 20 2a 2a 2a 0a 50 61 67 65 20 34 20 69 73 20 6e   ***.Page 4 is n
2510: 65 76 65 72 20 75 73 65 64 7d 7d 0a 20 20 20 20  ever used}}.    
2520: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 33  do_test pragma-3
2530: 2e 31 31 20 7b 0a 20 20 20 20 20 20 65 78 65 63  .11 {.      exec
2540: 73 71 6c 20 7b 0a 20 20 20 20 20 20 20 20 50 52  sql {.        PR
2550: 41 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63  AGMA integrity_c
2560: 68 65 63 6b 3d 35 0a 20 20 20 20 20 20 7d 0a 20  heck=5.      }. 
2570: 20 20 20 7d 20 7b 7b 2a 2a 2a 20 69 6e 20 64 61     } {{*** in da
2580: 74 61 62 61 73 65 20 74 32 20 2a 2a 2a 0a 50 61  tabase t2 ***.Pa
2590: 67 65 20 34 20 69 73 20 6e 65 76 65 72 20 75 73  ge 4 is never us
25a0: 65 64 0a 50 61 67 65 20 35 20 69 73 20 6e 65 76  ed.Page 5 is nev
25b0: 65 72 20 75 73 65 64 0a 50 61 67 65 20 36 20 69  er used.Page 6 i
25c0: 73 20 6e 65 76 65 72 20 75 73 65 64 7d 20 7b 72  s never used} {r
25d0: 6f 77 69 64 20 31 20 6d 69 73 73 69 6e 67 20 66  owid 1 missing f
25e0: 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b 72  rom index i2} {r
25f0: 6f 77 69 64 20 32 20 6d 69 73 73 69 6e 67 20 66  owid 2 missing f
2600: 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 7d 0a 20  rom index i2}}. 
2610: 20 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d     do_test pragm
2620: 61 2d 33 2e 31 32 20 7b 0a 20 20 20 20 20 20 65  a-3.12 {.      e
2630: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 20  xecsql {.       
2640: 20 50 52 41 47 4d 41 20 69 6e 74 65 67 72 69 74   PRAGMA integrit
2650: 79 5f 63 68 65 63 6b 3d 34 0a 20 20 20 20 20 20  y_check=4.      
2660: 7d 0a 20 20 20 20 7d 20 7b 7b 2a 2a 2a 20 69 6e  }.    } {{*** in
2670: 20 64 61 74 61 62 61 73 65 20 74 32 20 2a 2a 2a   database t2 ***
2680: 0a 50 61 67 65 20 34 20 69 73 20 6e 65 76 65 72  .Page 4 is never
2690: 20 75 73 65 64 0a 50 61 67 65 20 35 20 69 73 20   used.Page 5 is 
26a0: 6e 65 76 65 72 20 75 73 65 64 0a 50 61 67 65 20  never used.Page 
26b0: 36 20 69 73 20 6e 65 76 65 72 20 75 73 65 64 7d  6 is never used}
26c0: 20 7b 72 6f 77 69 64 20 31 20 6d 69 73 73 69 6e   {rowid 1 missin
26d0: 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d  g from index i2}
26e0: 7d 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 70 72  }.    do_test pr
26f0: 61 67 6d 61 2d 33 2e 31 33 20 7b 0a 20 20 20 20  agma-3.13 {.    
2700: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
2710: 20 20 20 20 50 52 41 47 4d 41 20 69 6e 74 65 67      PRAGMA integ
2720: 72 69 74 79 5f 63 68 65 63 6b 3d 33 0a 20 20 20  rity_check=3.   
2730: 20 20 20 7d 0a 20 20 20 20 7d 20 7b 7b 2a 2a 2a     }.    } {{***
2740: 20 69 6e 20 64 61 74 61 62 61 73 65 20 74 32 20   in database t2 
2750: 2a 2a 2a 0a 50 61 67 65 20 34 20 69 73 20 6e 65  ***.Page 4 is ne
2760: 76 65 72 20 75 73 65 64 0a 50 61 67 65 20 35 20  ver used.Page 5 
2770: 69 73 20 6e 65 76 65 72 20 75 73 65 64 0a 50 61  is never used.Pa
2780: 67 65 20 36 20 69 73 20 6e 65 76 65 72 20 75 73  ge 6 is never us
2790: 65 64 7d 7d 0a 20 20 20 20 64 6f 5f 74 65 73 74  ed}}.    do_test
27a0: 20 70 72 61 67 6d 61 2d 33 2e 31 34 20 7b 0a 20   pragma-3.14 {. 
27b0: 20 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20       execsql {. 
27c0: 20 20 20 20 20 20 20 50 52 41 47 4d 41 20 69 6e         PRAGMA in
27d0: 74 65 67 72 69 74 79 5f 63 68 65 63 6b 28 32 29  tegrity_check(2)
27e0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 20 7b  .      }.    } {
27f0: 7b 2a 2a 2a 20 69 6e 20 64 61 74 61 62 61 73 65  {*** in database
2800: 20 74 32 20 2a 2a 2a 0a 50 61 67 65 20 34 20 69   t2 ***.Page 4 i
2810: 73 20 6e 65 76 65 72 20 75 73 65 64 0a 50 61 67  s never used.Pag
2820: 65 20 35 20 69 73 20 6e 65 76 65 72 20 75 73 65  e 5 is never use
2830: 64 7d 7d 0a 20 20 20 20 64 6f 5f 74 65 73 74 20  d}}.    do_test 
2840: 70 72 61 67 6d 61 2d 33 2e 31 35 20 7b 0a 20 20  pragma-3.15 {.  
2850: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20      execsql {.  
2860: 20 20 20 20 20 20 41 54 54 41 43 48 20 27 74 65        ATTACH 'te
2870: 73 74 65 72 72 2e 64 62 27 20 41 53 20 74 33 3b  sterr.db' AS t3;
2880: 0a 20 20 20 20 20 20 20 20 50 52 41 47 4d 41 20  .        PRAGMA 
2890: 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 0a  integrity_check.
28a0: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 20 7b 7b        }.    } {{
28b0: 2a 2a 2a 20 69 6e 20 64 61 74 61 62 61 73 65 20  *** in database 
28c0: 74 32 20 2a 2a 2a 0a 50 61 67 65 20 34 20 69 73  t2 ***.Page 4 is
28d0: 20 6e 65 76 65 72 20 75 73 65 64 0a 50 61 67 65   never used.Page
28e0: 20 35 20 69 73 20 6e 65 76 65 72 20 75 73 65 64   5 is never used
28f0: 0a 50 61 67 65 20 36 20 69 73 20 6e 65 76 65 72  .Page 6 is never
2900: 20 75 73 65 64 7d 20 7b 72 6f 77 69 64 20 31 20   used} {rowid 1 
2910: 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64  missing from ind
2920: 65 78 20 69 32 7d 20 7b 72 6f 77 69 64 20 32 20  ex i2} {rowid 2 
2930: 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64  missing from ind
2940: 65 78 20 69 32 7d 20 7b 77 72 6f 6e 67 20 23 20  ex i2} {wrong # 
2950: 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 69 6e  of entries in in
2960: 64 65 78 20 69 32 7d 20 7b 2a 2a 2a 20 69 6e 20  dex i2} {*** in 
2970: 64 61 74 61 62 61 73 65 20 74 33 20 2a 2a 2a 0a  database t3 ***.
2980: 50 61 67 65 20 34 20 69 73 20 6e 65 76 65 72 20  Page 4 is never 
2990: 75 73 65 64 0a 50 61 67 65 20 35 20 69 73 20 6e  used.Page 5 is n
29a0: 65 76 65 72 20 75 73 65 64 0a 50 61 67 65 20 36  ever used.Page 6
29b0: 20 69 73 20 6e 65 76 65 72 20 75 73 65 64 7d 20   is never used} 
29c0: 7b 72 6f 77 69 64 20 31 20 6d 69 73 73 69 6e 67  {rowid 1 missing
29d0: 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20   from index i2} 
29e0: 7b 72 6f 77 69 64 20 32 20 6d 69 73 73 69 6e 67  {rowid 2 missing
29f0: 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20   from index i2} 
2a00: 7b 77 72 6f 6e 67 20 23 20 6f 66 20 65 6e 74 72  {wrong # of entr
2a10: 69 65 73 20 69 6e 20 69 6e 64 65 78 20 69 32 7d  ies in index i2}
2a20: 7d 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 70 72  }.    do_test pr
2a30: 61 67 6d 61 2d 33 2e 31 36 20 7b 0a 20 20 20 20  agma-3.16 {.    
2a40: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
2a50: 20 20 20 20 50 52 41 47 4d 41 20 69 6e 74 65 67      PRAGMA integ
2a60: 72 69 74 79 5f 63 68 65 63 6b 28 31 30 29 0a 20  rity_check(10). 
2a70: 20 20 20 20 20 7d 0a 20 20 20 20 7d 20 7b 7b 2a       }.    } {{*
2a80: 2a 2a 20 69 6e 20 64 61 74 61 62 61 73 65 20 74  ** in database t
2a90: 32 20 2a 2a 2a 0a 50 61 67 65 20 34 20 69 73 20  2 ***.Page 4 is 
2aa0: 6e 65 76 65 72 20 75 73 65 64 0a 50 61 67 65 20  never used.Page 
2ab0: 35 20 69 73 20 6e 65 76 65 72 20 75 73 65 64 0a  5 is never used.
2ac0: 50 61 67 65 20 36 20 69 73 20 6e 65 76 65 72 20  Page 6 is never 
2ad0: 75 73 65 64 7d 20 7b 72 6f 77 69 64 20 31 20 6d  used} {rowid 1 m
2ae0: 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65  issing from inde
2af0: 78 20 69 32 7d 20 7b 72 6f 77 69 64 20 32 20 6d  x i2} {rowid 2 m
2b00: 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65  issing from inde
2b10: 78 20 69 32 7d 20 7b 77 72 6f 6e 67 20 23 20 6f  x i2} {wrong # o
2b20: 66 20 65 6e 74 72 69 65 73 20 69 6e 20 69 6e 64  f entries in ind
2b30: 65 78 20 69 32 7d 20 7b 2a 2a 2a 20 69 6e 20 64  ex i2} {*** in d
2b40: 61 74 61 62 61 73 65 20 74 33 20 2a 2a 2a 0a 50  atabase t3 ***.P
2b50: 61 67 65 20 34 20 69 73 20 6e 65 76 65 72 20 75  age 4 is never u
2b60: 73 65 64 0a 50 61 67 65 20 35 20 69 73 20 6e 65  sed.Page 5 is ne
2b70: 76 65 72 20 75 73 65 64 0a 50 61 67 65 20 36 20  ver used.Page 6 
2b80: 69 73 20 6e 65 76 65 72 20 75 73 65 64 7d 20 7b  is never used} {
2b90: 72 6f 77 69 64 20 31 20 6d 69 73 73 69 6e 67 20  rowid 1 missing 
2ba0: 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 7d 0a  from index i2}}.
2bb0: 20 20 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67      do_test prag
2bc0: 6d 61 2d 33 2e 31 37 20 7b 0a 20 20 20 20 20 20  ma-3.17 {.      
2bd0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
2be0: 20 20 50 52 41 47 4d 41 20 69 6e 74 65 67 72 69    PRAGMA integri
2bf0: 74 79 5f 63 68 65 63 6b 3d 38 0a 20 20 20 20 20  ty_check=8.     
2c00: 20 7d 0a 20 20 20 20 7d 20 7b 7b 2a 2a 2a 20 69   }.    } {{*** i
2c10: 6e 20 64 61 74 61 62 61 73 65 20 74 32 20 2a 2a  n database t2 **
2c20: 2a 0a 50 61 67 65 20 34 20 69 73 20 6e 65 76 65  *.Page 4 is neve
2c30: 72 20 75 73 65 64 0a 50 61 67 65 20 35 20 69 73  r used.Page 5 is
2c40: 20 6e 65 76 65 72 20 75 73 65 64 0a 50 61 67 65   never used.Page
2c50: 20 36 20 69 73 20 6e 65 76 65 72 20 75 73 65 64   6 is never used
2c60: 7d 20 7b 72 6f 77 69 64 20 31 20 6d 69 73 73 69  } {rowid 1 missi
2c70: 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32  ng from index i2
2c80: 7d 20 7b 72 6f 77 69 64 20 32 20 6d 69 73 73 69  } {rowid 2 missi
2c90: 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32  ng from index i2
2ca0: 7d 20 7b 77 72 6f 6e 67 20 23 20 6f 66 20 65 6e  } {wrong # of en
2cb0: 74 72 69 65 73 20 69 6e 20 69 6e 64 65 78 20 69  tries in index i
2cc0: 32 7d 20 7b 2a 2a 2a 20 69 6e 20 64 61 74 61 62  2} {*** in datab
2cd0: 61 73 65 20 74 33 20 2a 2a 2a 0a 50 61 67 65 20  ase t3 ***.Page 
2ce0: 34 20 69 73 20 6e 65 76 65 72 20 75 73 65 64 0a  4 is never used.
2cf0: 50 61 67 65 20 35 20 69 73 20 6e 65 76 65 72 20  Page 5 is never 
2d00: 75 73 65 64 7d 7d 0a 20 20 20 20 64 6f 5f 74 65  used}}.    do_te
2d10: 73 74 20 70 72 61 67 6d 61 2d 33 2e 31 38 20 7b  st pragma-3.18 {
2d20: 0a 20 20 20 20 20 20 65 78 65 63 73 71 6c 20 7b  .      execsql {
2d30: 0a 20 20 20 20 20 20 20 20 50 52 41 47 4d 41 20  .        PRAGMA 
2d40: 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 3d  integrity_check=
2d50: 34 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 20  4.      }.    } 
2d60: 7b 7b 2a 2a 2a 20 69 6e 20 64 61 74 61 62 61 73  {{*** in databas
2d70: 65 20 74 32 20 2a 2a 2a 0a 50 61 67 65 20 34 20  e t2 ***.Page 4 
2d80: 69 73 20 6e 65 76 65 72 20 75 73 65 64 0a 50 61  is never used.Pa
2d90: 67 65 20 35 20 69 73 20 6e 65 76 65 72 20 75 73  ge 5 is never us
2da0: 65 64 0a 50 61 67 65 20 36 20 69 73 20 6e 65 76  ed.Page 6 is nev
2db0: 65 72 20 75 73 65 64 7d 20 7b 72 6f 77 69 64 20  er used} {rowid 
2dc0: 31 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69  1 missing from i
2dd0: 6e 64 65 78 20 69 32 7d 7d 0a 20 20 7d 0a 20 20  ndex i2}}.  }.  
2de0: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 33  do_test pragma-3
2df0: 2e 31 39 20 7b 0a 20 20 20 20 63 61 74 63 68 20  .19 {.    catch 
2e00: 7b 64 62 20 63 6c 6f 73 65 7d 0a 20 20 20 20 66  {db close}.    f
2e10: 6f 72 63 65 64 65 6c 65 74 65 20 74 65 73 74 2e  orcedelete test.
2e20: 64 62 20 74 65 73 74 2e 64 62 2d 6a 6f 75 72 6e  db test.db-journ
2e30: 61 6c 0a 20 20 20 20 73 71 6c 69 74 65 33 20 64  al.    sqlite3 d
2e40: 62 20 74 65 73 74 2e 64 62 0a 20 20 20 20 64 62  b test.db.    db
2e50: 20 65 76 61 6c 20 7b 50 52 41 47 4d 41 20 69 6e   eval {PRAGMA in
2e60: 74 65 67 72 69 74 79 5f 63 68 65 63 6b 7d 0a 20  tegrity_check}. 
2e70: 20 7d 20 7b 6f 6b 7d 0a 7d 0a 23 65 78 69 74 0a   } {ok}.}.#exit.
2e80: 0a 23 20 54 65 73 74 20 6d 6f 64 69 66 79 69 6e  .# Test modifyin
2e90: 67 20 74 68 65 20 63 61 63 68 65 5f 73 69 7a 65  g the cache_size
2ea0: 20 6f 66 20 61 6e 20 61 74 74 61 63 68 65 64 20   of an attached 
2eb0: 64 61 74 61 62 61 73 65 2e 0a 69 66 63 61 70 61  database..ifcapa
2ec0: 62 6c 65 20 70 61 67 65 72 5f 70 72 61 67 6d 61  ble pager_pragma
2ed0: 73 26 26 61 74 74 61 63 68 20 7b 0a 64 6f 5f 74  s&&attach {.do_t
2ee0: 65 73 74 20 70 72 61 67 6d 61 2d 34 2e 31 20 7b  est pragma-4.1 {
2ef0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
2f00: 20 41 54 54 41 43 48 20 27 74 65 73 74 32 2e 64   ATTACH 'test2.d
2f10: 62 27 20 41 53 20 61 75 78 3b 0a 20 20 20 20 70  b' AS aux;.    p
2f20: 72 61 67 6d 61 20 61 75 78 2e 63 61 63 68 65 5f  ragma aux.cache_
2f30: 73 69 7a 65 3b 0a 20 20 20 20 70 72 61 67 6d 61  size;.    pragma
2f40: 20 61 75 78 2e 64 65 66 61 75 6c 74 5f 63 61 63   aux.default_cac
2f50: 68 65 5f 73 69 7a 65 3b 0a 20 20 7d 20 0a 7d 20  he_size;.  } .} 
2f60: 5b 6c 69 73 74 20 24 44 46 4c 54 5f 43 41 43 48  [list $DFLT_CACH
2f70: 45 5f 53 5a 20 24 44 46 4c 54 5f 43 41 43 48 45  E_SZ $DFLT_CACHE
2f80: 5f 53 5a 5d 0a 64 6f 5f 74 65 73 74 20 70 72 61  _SZ].do_test pra
2f90: 67 6d 61 2d 34 2e 32 20 7b 0a 20 20 65 78 65 63  gma-4.2 {.  exec
2fa0: 73 71 6c 20 7b 0a 20 20 20 20 70 72 61 67 6d 61  sql {.    pragma
2fb0: 20 61 75 78 2e 63 61 63 68 65 5f 73 69 7a 65 20   aux.cache_size 
2fc0: 3d 20 35 30 3b 0a 20 20 20 20 70 72 61 67 6d 61  = 50;.    pragma
2fd0: 20 61 75 78 2e 63 61 63 68 65 5f 73 69 7a 65 3b   aux.cache_size;
2fe0: 0a 20 20 20 20 70 72 61 67 6d 61 20 61 75 78 2e  .    pragma aux.
2ff0: 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69  default_cache_si
3000: 7a 65 3b 0a 20 20 7d 20 0a 7d 20 5b 6c 69 73 74  ze;.  } .} [list
3010: 20 35 30 20 24 44 46 4c 54 5f 43 41 43 48 45 5f   50 $DFLT_CACHE_
3020: 53 5a 5d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67  SZ].do_test prag
3030: 6d 61 2d 34 2e 33 20 7b 0a 20 20 65 78 65 63 73  ma-4.3 {.  execs
3040: 71 6c 20 7b 0a 20 20 20 20 70 72 61 67 6d 61 20  ql {.    pragma 
3050: 61 75 78 2e 64 65 66 61 75 6c 74 5f 63 61 63 68  aux.default_cach
3060: 65 5f 73 69 7a 65 20 3d 20 34 35 36 3b 0a 20 20  e_size = 456;.  
3070: 20 20 70 72 61 67 6d 61 20 61 75 78 2e 63 61 63    pragma aux.cac
3080: 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 70 72 61  he_size;.    pra
3090: 67 6d 61 20 61 75 78 2e 64 65 66 61 75 6c 74 5f  gma aux.default_
30a0: 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 7d 20  cache_size;.  } 
30b0: 0a 7d 20 7b 34 35 36 20 34 35 36 7d 0a 64 6f 5f  .} {456 456}.do_
30c0: 74 65 73 74 20 70 72 61 67 6d 61 2d 34 2e 34 20  test pragma-4.4 
30d0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
30e0: 20 20 70 72 61 67 6d 61 20 63 61 63 68 65 5f 73    pragma cache_s
30f0: 69 7a 65 3b 0a 20 20 20 20 70 72 61 67 6d 61 20  ize;.    pragma 
3100: 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69  default_cache_si
3110: 7a 65 3b 0a 20 20 7d 20 0a 7d 20 5b 6c 69 73 74  ze;.  } .} [list
3120: 20 24 44 46 4c 54 5f 43 41 43 48 45 5f 53 5a 20   $DFLT_CACHE_SZ 
3130: 24 44 46 4c 54 5f 43 41 43 48 45 5f 53 5a 5d 0a  $DFLT_CACHE_SZ].
3140: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 34  do_test pragma-4
3150: 2e 35 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .5 {.  execsql {
3160: 0a 20 20 20 20 44 45 54 41 43 48 20 61 75 78 3b  .    DETACH aux;
3170: 0a 20 20 20 20 41 54 54 41 43 48 20 27 74 65 73  .    ATTACH 'tes
3180: 74 33 2e 64 62 27 20 41 53 20 61 75 78 3b 0a 20  t3.db' AS aux;. 
3190: 20 20 20 70 72 61 67 6d 61 20 61 75 78 2e 63 61     pragma aux.ca
31a0: 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 70 72  che_size;.    pr
31b0: 61 67 6d 61 20 61 75 78 2e 64 65 66 61 75 6c 74  agma aux.default
31c0: 5f 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 7d  _cache_size;.  }
31d0: 20 0a 7d 20 5b 6c 69 73 74 20 24 44 46 4c 54 5f   .} [list $DFLT_
31e0: 43 41 43 48 45 5f 53 5a 20 24 44 46 4c 54 5f 43  CACHE_SZ $DFLT_C
31f0: 41 43 48 45 5f 53 5a 5d 0a 64 6f 5f 74 65 73 74  ACHE_SZ].do_test
3200: 20 70 72 61 67 6d 61 2d 34 2e 36 20 7b 0a 20 20   pragma-4.6 {.  
3210: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 44 45  execsql {.    DE
3220: 54 41 43 48 20 61 75 78 3b 0a 20 20 20 20 41 54  TACH aux;.    AT
3230: 54 41 43 48 20 27 74 65 73 74 32 2e 64 62 27 20  TACH 'test2.db' 
3240: 41 53 20 61 75 78 3b 0a 20 20 20 20 70 72 61 67  AS aux;.    prag
3250: 6d 61 20 61 75 78 2e 63 61 63 68 65 5f 73 69 7a  ma aux.cache_siz
3260: 65 3b 0a 20 20 20 20 70 72 61 67 6d 61 20 61 75  e;.    pragma au
3270: 78 2e 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f  x.default_cache_
3280: 73 69 7a 65 3b 0a 20 20 7d 20 0a 7d 20 7b 34 35  size;.  } .} {45
3290: 36 20 34 35 36 7d 0a 7d 20 3b 23 20 69 66 63 61  6 456}.} ;# ifca
32a0: 70 61 62 6c 65 20 70 61 67 65 72 5f 70 72 61 67  pable pager_prag
32b0: 6d 61 73 0a 0a 23 20 54 65 73 74 20 74 68 61 74  mas..# Test that
32c0: 20 6d 6f 64 69 66 79 69 6e 67 20 74 68 65 20 73   modifying the s
32d0: 79 6e 63 2d 6c 65 76 65 6c 20 69 6e 20 74 68 65  ync-level in the
32e0: 20 6d 69 64 64 6c 65 20 6f 66 20 61 20 74 72 61   middle of a tra
32f0: 6e 73 61 63 74 69 6f 6e 20 69 73 0a 23 20 64 69  nsaction is.# di
3300: 73 61 6c 6c 6f 77 65 64 2e 0a 69 66 63 61 70 61  sallowed..ifcapa
3310: 62 6c 65 20 70 61 67 65 72 5f 70 72 61 67 6d 61  ble pager_pragma
3320: 73 20 7b 0a 64 6f 5f 74 65 73 74 20 70 72 61 67  s {.do_test prag
3330: 6d 61 2d 35 2e 30 20 7b 0a 20 20 65 78 65 63 73  ma-5.0 {.  execs
3340: 71 6c 20 7b 0a 20 20 20 20 70 72 61 67 6d 61 20  ql {.    pragma 
3350: 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20 20 7d  synchronous;.  }
3360: 20 0a 7d 20 7b 32 7d 0a 64 6f 5f 74 65 73 74 20   .} {2}.do_test 
3370: 70 72 61 67 6d 61 2d 35 2e 31 20 7b 0a 20 20 63  pragma-5.1 {.  c
3380: 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 42 45  atchsql {.    BE
3390: 47 49 4e 3b 0a 20 20 20 20 70 72 61 67 6d 61 20  GIN;.    pragma 
33a0: 73 79 6e 63 68 72 6f 6e 6f 75 73 20 3d 20 4f 46  synchronous = OF
33b0: 46 3b 0a 20 20 7d 20 0a 7d 20 7b 31 20 7b 53 61  F;.  } .} {1 {Sa
33c0: 66 65 74 79 20 6c 65 76 65 6c 20 6d 61 79 20 6e  fety level may n
33d0: 6f 74 20 62 65 20 63 68 61 6e 67 65 64 20 69 6e  ot be changed in
33e0: 73 69 64 65 20 61 20 74 72 61 6e 73 61 63 74 69  side a transacti
33f0: 6f 6e 7d 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61  on}}.do_test pra
3400: 67 6d 61 2d 35 2e 32 20 7b 0a 20 20 65 78 65 63  gma-5.2 {.  exec
3410: 73 71 6c 20 7b 0a 20 20 20 20 70 72 61 67 6d 61  sql {.    pragma
3420: 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20 20   synchronous;.  
3430: 7d 20 0a 7d 20 7b 32 7d 0a 63 61 74 63 68 73 71  } .} {2}.catchsq
3440: 6c 20 7b 43 4f 4d 4d 49 54 3b 7d 0a 7d 20 3b 23  l {COMMIT;}.} ;#
3450: 20 69 66 63 61 70 61 62 6c 65 20 70 61 67 65 72   ifcapable pager
3460: 5f 70 72 61 67 6d 61 73 0a 0a 23 20 54 65 73 74  _pragmas..# Test
3470: 20 73 63 68 65 6d 61 2d 71 75 65 72 79 20 70 72   schema-query pr
3480: 61 67 6d 61 73 0a 23 0a 69 66 63 61 70 61 62 6c  agmas.#.ifcapabl
3490: 65 20 73 63 68 65 6d 61 5f 70 72 61 67 6d 61 73  e schema_pragmas
34a0: 20 7b 0a 69 66 63 61 70 61 62 6c 65 20 74 65 6d   {.ifcapable tem
34b0: 70 64 62 26 26 61 74 74 61 63 68 20 7b 0a 20 20  pdb&&attach {.  
34c0: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 36  do_test pragma-6
34d0: 2e 31 20 7b 0a 20 20 20 20 73 65 74 20 72 65 73  .1 {.    set res
34e0: 20 7b 7d 0a 20 20 20 20 65 78 65 63 73 71 6c 20   {}.    execsql 
34f0: 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 73  {SELECT * FROM s
3500: 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65  qlite_temp_maste
3510: 72 7d 0a 20 20 20 20 66 6f 72 65 61 63 68 20 7b  r}.    foreach {
3520: 69 64 78 20 6e 61 6d 65 20 66 69 6c 65 7d 20 5b  idx name file} [
3530: 65 78 65 63 73 71 6c 20 7b 70 72 61 67 6d 61 20  execsql {pragma 
3540: 64 61 74 61 62 61 73 65 5f 6c 69 73 74 7d 5d 20  database_list}] 
3550: 7b 0a 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20  {.      lappend 
3560: 72 65 73 20 24 69 64 78 20 24 6e 61 6d 65 0a 20  res $idx $name. 
3570: 20 20 20 7d 0a 20 20 20 20 73 65 74 20 72 65 73     }.    set res
3580: 0a 20 20 7d 20 7b 30 20 6d 61 69 6e 20 31 20 74  .  } {0 main 1 t
3590: 65 6d 70 20 32 20 61 75 78 7d 0a 7d 0a 64 6f 5f  emp 2 aux}.}.do_
35a0: 74 65 73 74 20 70 72 61 67 6d 61 2d 36 2e 32 20  test pragma-6.2 
35b0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
35c0: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
35d0: 32 28 61 2c 62 2c 63 29 3b 0a 20 20 20 20 70 72  2(a,b,c);.    pr
35e0: 61 67 6d 61 20 74 61 62 6c 65 5f 69 6e 66 6f 28  agma table_info(
35f0: 74 32 29 0a 20 20 7d 0a 7d 20 7b 30 20 61 20 7b  t2).  }.} {0 a {
3600: 7d 20 30 20 7b 7d 20 30 20 31 20 62 20 7b 7d 20  } 0 {} 0 1 b {} 
3610: 30 20 7b 7d 20 30 20 32 20 63 20 7b 7d 20 30 20  0 {} 0 2 c {} 0 
3620: 7b 7d 20 30 7d 0a 64 6f 5f 74 65 73 74 20 70 72  {} 0}.do_test pr
3630: 61 67 6d 61 2d 36 2e 32 2e 31 20 7b 0a 20 20 65  agma-6.2.1 {.  e
3640: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 70 72 61  xecsql {.    pra
3650: 67 6d 61 20 74 61 62 6c 65 5f 69 6e 66 6f 3b 0a  gma table_info;.
3660: 20 20 7d 0a 7d 20 7b 7d 0a 64 62 20 6e 75 6c 6c    }.} {}.db null
3670: 76 61 6c 75 65 20 3c 3c 4e 55 4c 4c 3e 3e 0a 64  value <<NULL>>.d
3680: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 36 2e  o_test pragma-6.
3690: 32 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  2.2 {.  execsql 
36a0: 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42  {.    CREATE TAB
36b0: 4c 45 20 74 35 28 0a 20 20 20 20 20 20 61 20 54  LE t5(.      a T
36c0: 45 58 54 20 44 45 46 41 55 4c 54 20 43 55 52 52  EXT DEFAULT CURR
36d0: 45 4e 54 5f 54 49 4d 45 53 54 41 4d 50 2c 20 0a  ENT_TIMESTAMP, .
36e0: 20 20 20 20 20 20 62 20 44 45 46 41 55 4c 54 20        b DEFAULT 
36f0: 28 35 2b 33 29 2c 0a 20 20 20 20 20 20 63 20 54  (5+3),.      c T
3700: 45 58 54 2c 0a 20 20 20 20 20 20 64 20 49 4e 54  EXT,.      d INT
3710: 45 47 45 52 20 44 45 46 41 55 4c 54 20 4e 55 4c  EGER DEFAULT NUL
3720: 4c 2c 0a 20 20 20 20 20 20 65 20 54 45 58 54 20  L,.      e TEXT 
3730: 44 45 46 41 55 4c 54 20 27 27 0a 20 20 20 20 29  DEFAULT ''.    )
3740: 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 74 61 62  ;.    PRAGMA tab
3750: 6c 65 5f 69 6e 66 6f 28 74 35 29 3b 0a 20 20 7d  le_info(t5);.  }
3760: 0a 7d 20 7b 30 20 61 20 54 45 58 54 20 30 20 43  .} {0 a TEXT 0 C
3770: 55 52 52 45 4e 54 5f 54 49 4d 45 53 54 41 4d 50  URRENT_TIMESTAMP
3780: 20 30 20 31 20 62 20 7b 7d 20 30 20 35 2b 33 20   0 1 b {} 0 5+3 
3790: 30 20 32 20 63 20 54 45 58 54 20 30 20 3c 3c 4e  0 2 c TEXT 0 <<N
37a0: 55 4c 4c 3e 3e 20 30 20 33 20 64 20 49 4e 54 45  ULL>> 0 3 d INTE
37b0: 47 45 52 20 30 20 4e 55 4c 4c 20 30 20 34 20 65  GER 0 NULL 0 4 e
37c0: 20 54 45 58 54 20 30 20 27 27 20 30 7d 0a 64 62   TEXT 0 '' 0}.db
37d0: 20 6e 75 6c 6c 76 61 6c 75 65 20 7b 7d 0a 69 66   nullvalue {}.if
37e0: 63 61 70 61 62 6c 65 20 7b 66 6f 72 65 69 67 6e  capable {foreign
37f0: 6b 65 79 7d 20 7b 0a 20 20 64 6f 5f 74 65 73 74  key} {.  do_test
3800: 20 70 72 61 67 6d 61 2d 36 2e 33 2e 31 20 7b 0a   pragma-6.3.1 {.
3810: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20      execsql {.  
3820: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
3830: 20 74 33 28 61 20 69 6e 74 20 72 65 66 65 72 65   t3(a int refere
3840: 6e 63 65 73 20 74 32 28 62 29 2c 20 62 20 55 4e  nces t2(b), b UN
3850: 49 51 55 45 29 3b 0a 20 20 20 20 20 20 70 72 61  IQUE);.      pra
3860: 67 6d 61 20 66 6f 72 65 69 67 6e 5f 6b 65 79 5f  gma foreign_key_
3870: 6c 69 73 74 28 74 33 29 3b 0a 20 20 20 20 7d 0a  list(t3);.    }.
3880: 20 20 7d 20 7b 30 20 30 20 74 32 20 61 20 62 20    } {0 0 t2 a b 
3890: 7b 4e 4f 20 41 43 54 49 4f 4e 7d 20 7b 4e 4f 20  {NO ACTION} {NO 
38a0: 41 43 54 49 4f 4e 7d 20 4e 4f 4e 45 7d 0a 20 20  ACTION} NONE}.  
38b0: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 36  do_test pragma-6
38c0: 2e 33 2e 32 20 7b 0a 20 20 20 20 65 78 65 63 73  .3.2 {.    execs
38d0: 71 6c 20 7b 0a 20 20 20 20 20 20 70 72 61 67 6d  ql {.      pragm
38e0: 61 20 66 6f 72 65 69 67 6e 5f 6b 65 79 5f 6c 69  a foreign_key_li
38f0: 73 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 7d  st;.    }.  } {}
3900: 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .  do_test pragm
3910: 61 2d 36 2e 33 2e 33 20 7b 0a 20 20 20 20 65 78  a-6.3.3 {.    ex
3920: 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 70 72  ecsql {.      pr
3930: 61 67 6d 61 20 66 6f 72 65 69 67 6e 5f 6b 65 79  agma foreign_key
3940: 5f 6c 69 73 74 28 74 33 5f 62 6f 67 75 73 29 3b  _list(t3_bogus);
3950: 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 7d 0a 20 20  .    }.  } {}.  
3960: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 36  do_test pragma-6
3970: 2e 33 2e 34 20 7b 0a 20 20 20 20 65 78 65 63 73  .3.4 {.    execs
3980: 71 6c 20 7b 0a 20 20 20 20 20 20 70 72 61 67 6d  ql {.      pragm
3990: 61 20 66 6f 72 65 69 67 6e 5f 6b 65 79 5f 6c 69  a foreign_key_li
39a0: 73 74 28 74 35 29 3b 0a 20 20 20 20 7d 0a 20 20  st(t5);.    }.  
39b0: 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70  } {}.  do_test p
39c0: 72 61 67 6d 61 2d 36 2e 34 20 7b 0a 20 20 20 20  ragma-6.4 {.    
39d0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
39e0: 70 72 61 67 6d 61 20 69 6e 64 65 78 5f 6c 69 73  pragma index_lis
39f0: 74 28 74 33 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  t(t3);.    }.  }
3a00: 20 7b 30 20 73 71 6c 69 74 65 5f 61 75 74 6f 69   {0 sqlite_autoi
3a10: 6e 64 65 78 5f 74 33 5f 31 20 31 7d 0a 7d 0a 69  ndex_t3_1 1}.}.i
3a20: 66 63 61 70 61 62 6c 65 20 7b 21 66 6f 72 65 69  fcapable {!forei
3a30: 67 6e 6b 65 79 7d 20 7b 0a 20 20 65 78 65 63 73  gnkey} {.  execs
3a40: 71 6c 20 7b 43 52 45 41 54 45 20 54 41 42 4c 45  ql {CREATE TABLE
3a50: 20 74 33 28 61 2c 62 20 55 4e 49 51 55 45 29 7d   t3(a,b UNIQUE)}
3a60: 0a 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .}.do_test pragm
3a70: 61 2d 36 2e 35 2e 31 20 7b 0a 20 20 65 78 65 63  a-6.5.1 {.  exec
3a80: 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45  sql {.    CREATE
3a90: 20 49 4e 44 45 58 20 74 33 69 31 20 4f 4e 20 74   INDEX t3i1 ON t
3aa0: 33 28 61 2c 62 29 3b 0a 20 20 20 20 70 72 61 67  3(a,b);.    prag
3ab0: 6d 61 20 69 6e 64 65 78 5f 69 6e 66 6f 28 74 33  ma index_info(t3
3ac0: 69 31 29 3b 0a 20 20 7d 0a 7d 20 7b 30 20 30 20  i1);.  }.} {0 0 
3ad0: 61 20 31 20 31 20 62 7d 0a 64 6f 5f 74 65 73 74  a 1 1 b}.do_test
3ae0: 20 70 72 61 67 6d 61 2d 36 2e 35 2e 32 20 7b 0a   pragma-6.5.2 {.
3af0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
3b00: 70 72 61 67 6d 61 20 69 6e 64 65 78 5f 69 6e 66  pragma index_inf
3b10: 6f 28 74 33 69 31 5f 62 6f 67 75 73 29 3b 0a 20  o(t3i1_bogus);. 
3b20: 20 7d 0a 7d 20 7b 7d 0a 0a 69 66 63 61 70 61 62   }.} {}..ifcapab
3b30: 6c 65 20 74 65 6d 70 64 62 20 7b 0a 20 20 23 20  le tempdb {.  # 
3b40: 54 65 73 74 20 66 6f 72 20 74 69 63 6b 65 74 20  Test for ticket 
3b50: 23 33 33 32 30 2e 20 57 68 65 6e 20 61 20 74 65  #3320. When a te
3b60: 6d 70 20 74 61 62 6c 65 20 6f 66 20 74 68 65 20  mp table of the 
3b70: 73 61 6d 65 20 6e 61 6d 65 20 65 78 69 73 74 73  same name exists
3b80: 2c 20 6d 61 6b 65 0a 20 20 23 20 73 75 72 65 20  , make.  # sure 
3b90: 74 68 65 20 73 63 68 65 6d 61 20 6f 66 20 74 68  the schema of th
3ba0: 65 20 6d 61 69 6e 20 74 61 62 6c 65 20 63 61 6e  e main table can
3bb0: 20 73 74 69 6c 6c 20 62 65 20 71 75 65 72 69 65   still be querie
3bc0: 64 20 75 73 69 6e 67 20 0a 20 20 23 20 22 70 72  d using .  # "pr
3bd0: 61 67 6d 61 20 74 61 62 6c 65 5f 69 6e 66 6f 22  agma table_info"
3be0: 3a 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67  :.  do_test prag
3bf0: 6d 61 2d 36 2e 36 2e 31 20 7b 0a 20 20 20 20 65  ma-6.6.1 {.    e
3c00: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 43  xecsql {.      C
3c10: 52 45 41 54 45 20 54 41 42 4c 45 20 74 72 69 61  REATE TABLE tria
3c20: 6c 28 63 6f 6c 5f 6d 61 69 6e 29 3b 0a 20 20 20  l(col_main);.   
3c30: 20 20 20 43 52 45 41 54 45 20 54 45 4d 50 20 54     CREATE TEMP T
3c40: 41 42 4c 45 20 74 72 69 61 6c 28 63 6f 6c 5f 74  ABLE trial(col_t
3c50: 65 6d 70 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 20  emp);.    }.  } 
3c60: 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61  {}.  do_test pra
3c70: 67 6d 61 2d 36 2e 36 2e 32 20 7b 0a 20 20 20 20  gma-6.6.2 {.    
3c80: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
3c90: 50 52 41 47 4d 41 20 74 61 62 6c 65 5f 69 6e 66  PRAGMA table_inf
3ca0: 6f 28 74 72 69 61 6c 29 3b 0a 20 20 20 20 7d 0a  o(trial);.    }.
3cb0: 20 20 7d 20 7b 30 20 63 6f 6c 5f 74 65 6d 70 20    } {0 col_temp 
3cc0: 7b 7d 20 30 20 7b 7d 20 30 7d 0a 20 20 64 6f 5f  {} 0 {} 0}.  do_
3cd0: 74 65 73 74 20 70 72 61 67 6d 61 2d 36 2e 36 2e  test pragma-6.6.
3ce0: 33 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  3 {.    execsql 
3cf0: 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 74  {.      PRAGMA t
3d00: 65 6d 70 2e 74 61 62 6c 65 5f 69 6e 66 6f 28 74  emp.table_info(t
3d10: 72 69 61 6c 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  rial);.    }.  }
3d20: 20 7b 30 20 63 6f 6c 5f 74 65 6d 70 20 7b 7d 20   {0 col_temp {} 
3d30: 30 20 7b 7d 20 30 7d 0a 20 20 64 6f 5f 74 65 73  0 {} 0}.  do_tes
3d40: 74 20 70 72 61 67 6d 61 2d 36 2e 36 2e 34 20 7b  t pragma-6.6.4 {
3d50: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
3d60: 20 20 20 20 20 50 52 41 47 4d 41 20 6d 61 69 6e       PRAGMA main
3d70: 2e 74 61 62 6c 65 5f 69 6e 66 6f 28 74 72 69 61  .table_info(tria
3d80: 6c 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 30  l);.    }.  } {0
3d90: 20 63 6f 6c 5f 6d 61 69 6e 20 7b 7d 20 30 20 7b   col_main {} 0 {
3da0: 7d 20 30 7d 0a 7d 0a 0a 64 6f 5f 74 65 73 74 20  } 0}.}..do_test 
3db0: 70 72 61 67 6d 61 2d 36 2e 37 20 7b 0a 20 20 65  pragma-6.7 {.  e
3dc0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45  xecsql {.    CRE
3dd0: 41 54 45 20 54 41 42 4c 45 20 74 65 73 74 5f 74  ATE TABLE test_t
3de0: 61 62 6c 65 28 0a 20 20 20 20 20 20 6f 6e 65 20  able(.      one 
3df0: 49 4e 54 20 4e 4f 54 20 4e 55 4c 4c 20 44 45 46  INT NOT NULL DEF
3e00: 41 55 4c 54 20 2d 31 2c 20 0a 20 20 20 20 20 20  AULT -1, .      
3e10: 74 77 6f 20 74 65 78 74 2c 0a 20 20 20 20 20 20  two text,.      
3e20: 74 68 72 65 65 20 56 41 52 43 48 41 52 28 34 35  three VARCHAR(45
3e30: 2c 20 36 35 29 20 44 45 46 41 55 4c 54 20 27 61  , 65) DEFAULT 'a
3e40: 62 63 64 65 27 2c 0a 20 20 20 20 20 20 66 6f 75  bcde',.      fou
3e50: 72 20 52 45 41 4c 20 44 45 46 41 55 4c 54 20 58  r REAL DEFAULT X
3e60: 27 61 62 63 64 65 66 27 2c 0a 20 20 20 20 20 20  'abcdef',.      
3e70: 66 69 76 65 20 44 45 46 41 55 4c 54 20 43 55 52  five DEFAULT CUR
3e80: 52 45 4e 54 5f 54 49 4d 45 0a 20 20 20 20 29 3b  RENT_TIME.    );
3e90: 0a 20 20 20 20 50 52 41 47 4d 41 20 74 61 62 6c  .    PRAGMA tabl
3ea0: 65 5f 69 6e 66 6f 28 74 65 73 74 5f 74 61 62 6c  e_info(test_tabl
3eb0: 65 29 3b 0a 20 20 7d 0a 7d 20 5b 63 6f 6e 63 61  e);.  }.} [conca
3ec0: 74 20 5c 0a 20 20 7b 30 20 6f 6e 65 20 49 4e 54  t \.  {0 one INT
3ed0: 20 31 20 2d 31 20 30 7d 20 5c 0a 20 20 7b 31 20   1 -1 0} \.  {1 
3ee0: 74 77 6f 20 74 65 78 74 20 30 20 7b 7d 20 30 7d  two text 0 {} 0}
3ef0: 20 5c 0a 20 20 7b 32 20 74 68 72 65 65 20 7b 56   \.  {2 three {V
3f00: 41 52 43 48 41 52 28 34 35 2c 20 36 35 29 7d 20  ARCHAR(45, 65)} 
3f10: 30 20 27 61 62 63 64 65 27 20 30 7d 20 5c 0a 20  0 'abcde' 0} \. 
3f20: 20 7b 33 20 66 6f 75 72 20 52 45 41 4c 20 30 20   {3 four REAL 0 
3f30: 58 27 61 62 63 64 65 66 27 20 30 7d 20 5c 0a 20  X'abcdef' 0} \. 
3f40: 20 7b 34 20 66 69 76 65 20 7b 7d 20 30 20 43 55   {4 five {} 0 CU
3f50: 52 52 45 4e 54 5f 54 49 4d 45 20 30 7d 20 5c 0a  RRENT_TIME 0} \.
3f60: 5d 0a 7d 20 3b 23 20 69 66 63 61 70 61 62 6c 65  ].} ;# ifcapable
3f70: 20 73 63 68 65 6d 61 5f 70 72 61 67 6d 61 73 0a   schema_pragmas.
3f80: 23 20 4d 69 73 63 65 6c 6c 61 6e 65 6f 75 73 20  # Miscellaneous 
3f90: 74 65 73 74 73 0a 23 0a 69 66 63 61 70 61 62 6c  tests.#.ifcapabl
3fa0: 65 20 73 63 68 65 6d 61 5f 70 72 61 67 6d 61 73  e schema_pragmas
3fb0: 20 7b 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d   {.do_test pragm
3fc0: 61 2d 37 2e 31 2e 31 20 7b 0a 20 20 23 20 4d 61  a-7.1.1 {.  # Ma
3fd0: 6b 65 20 73 75 72 65 20 61 20 70 72 61 67 6d 61  ke sure a pragma
3fe0: 20 6b 6e 6f 77 73 20 74 6f 20 72 65 61 64 20 74   knows to read t
3ff0: 68 65 20 73 63 68 65 6d 61 20 69 66 20 69 74 20  he schema if it 
4000: 6e 65 65 64 73 20 74 6f 0a 20 20 64 62 20 63 6c  needs to.  db cl
4010: 6f 73 65 0a 20 20 73 71 6c 69 74 65 33 20 64 62  ose.  sqlite3 db
4020: 20 74 65 73 74 2e 64 62 0a 20 20 65 78 65 63 73   test.db.  execs
4030: 71 6c 20 7b 0a 20 20 20 20 70 72 61 67 6d 61 20  ql {.    pragma 
4040: 69 6e 64 65 78 5f 6c 69 73 74 28 74 33 29 3b 0a  index_list(t3);.
4050: 20 20 7d 0a 7d 20 7b 30 20 74 33 69 31 20 30 20    }.} {0 t3i1 0 
4060: 31 20 73 71 6c 69 74 65 5f 61 75 74 6f 69 6e 64  1 sqlite_autoind
4070: 65 78 5f 74 33 5f 31 20 31 7d 0a 64 6f 5f 74 65  ex_t3_1 1}.do_te
4080: 73 74 20 70 72 61 67 6d 61 2d 37 2e 31 2e 32 20  st pragma-7.1.2 
4090: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
40a0: 20 20 70 72 61 67 6d 61 20 69 6e 64 65 78 5f 6c    pragma index_l
40b0: 69 73 74 28 74 33 5f 62 6f 67 75 73 29 3b 0a 20  ist(t3_bogus);. 
40c0: 20 7d 0a 7d 20 7b 7d 0a 7d 20 3b 23 20 69 66 63   }.} {}.} ;# ifc
40d0: 61 70 61 62 6c 65 20 73 63 68 65 6d 61 5f 70 72  apable schema_pr
40e0: 61 67 6d 61 73 0a 69 66 63 61 70 61 62 6c 65 20  agmas.ifcapable 
40f0: 7b 75 74 66 31 36 7d 20 7b 0a 20 20 69 66 20 7b  {utf16} {.  if {
4100: 5b 70 65 72 6d 75 74 61 74 69 6f 6e 5d 20 3d 3d  [permutation] ==
4110: 20 22 22 7d 20 7b 0a 20 20 20 20 64 6f 5f 74 65   ""} {.    do_te
4120: 73 74 20 70 72 61 67 6d 61 2d 37 2e 32 20 7b 0a  st pragma-7.2 {.
4130: 20 20 20 20 20 20 64 62 20 63 6c 6f 73 65 0a 20        db close. 
4140: 20 20 20 20 20 73 71 6c 69 74 65 33 20 64 62 20       sqlite3 db 
4150: 74 65 73 74 2e 64 62 0a 20 20 20 20 20 20 63 61  test.db.      ca
4160: 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 20 20 20  tchsql {.       
4170: 20 70 72 61 67 6d 61 20 65 6e 63 6f 64 69 6e 67   pragma encoding
4180: 3d 62 6f 67 75 73 3b 0a 20 20 20 20 20 20 7d 0a  =bogus;.      }.
4190: 20 20 20 20 7d 20 7b 31 20 7b 75 6e 73 75 70 70      } {1 {unsupp
41a0: 6f 72 74 65 64 20 65 6e 63 6f 64 69 6e 67 3a 20  orted encoding: 
41b0: 62 6f 67 75 73 7d 7d 0a 20 20 7d 0a 7d 0a 69 66  bogus}}.  }.}.if
41c0: 63 61 70 61 62 6c 65 20 74 65 6d 70 64 62 20 7b  capable tempdb {
41d0: 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .  do_test pragm
41e0: 61 2d 37 2e 33 20 7b 0a 20 20 20 20 64 62 20 63  a-7.3 {.    db c
41f0: 6c 6f 73 65 0a 20 20 20 20 73 71 6c 69 74 65 33  lose.    sqlite3
4200: 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20 20 20   db test.db.    
4210: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
4220: 70 72 61 67 6d 61 20 6c 6f 63 6b 5f 73 74 61 74  pragma lock_stat
4230: 75 73 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 6d  us;.    }.  } {m
4240: 61 69 6e 20 75 6e 6c 6f 63 6b 65 64 20 74 65 6d  ain unlocked tem
4250: 70 20 63 6c 6f 73 65 64 7d 0a 7d 20 65 6c 73 65  p closed}.} else
4260: 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61   {.  do_test pra
4270: 67 6d 61 2d 37 2e 33 20 7b 0a 20 20 20 20 64 62  gma-7.3 {.    db
4280: 20 63 6c 6f 73 65 0a 20 20 20 20 73 71 6c 69 74   close.    sqlit
4290: 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20  e3 db test.db.  
42a0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
42b0: 20 20 70 72 61 67 6d 61 20 6c 6f 63 6b 5f 73 74    pragma lock_st
42c0: 61 74 75 73 3b 0a 20 20 20 20 7d 0a 20 20 7d 20  atus;.    }.  } 
42d0: 7b 6d 61 69 6e 20 75 6e 6c 6f 63 6b 65 64 7d 0a  {main unlocked}.
42e0: 7d 0a 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  }...#-----------
42f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4300: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4310: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4320: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 54 65  -----------.# Te
4330: 73 74 20 63 61 73 65 73 20 70 72 61 67 6d 61 2d  st cases pragma-
4340: 38 2e 2a 20 74 65 73 74 20 74 68 65 20 22 50 52  8.* test the "PR
4350: 41 47 4d 41 20 73 63 68 65 6d 61 5f 76 65 72 73  AGMA schema_vers
4360: 69 6f 6e 22 20 61 6e 64 20 22 50 52 41 47 4d 41  ion" and "PRAGMA
4370: 0a 23 20 75 73 65 72 5f 76 65 72 73 69 6f 6e 22  .# user_version"
4380: 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 23 0a 23   statements..#.#
4390: 20 70 72 61 67 6d 61 2d 38 2e 31 3a 20 50 52 41   pragma-8.1: PRA
43a0: 47 4d 41 20 73 63 68 65 6d 61 5f 76 65 72 73 69  GMA schema_versi
43b0: 6f 6e 0a 23 20 70 72 61 67 6d 61 2d 38 2e 32 3a  on.# pragma-8.2:
43c0: 20 50 52 41 47 4d 41 20 75 73 65 72 5f 76 65 72   PRAGMA user_ver
43d0: 73 69 6f 6e 0a 23 0a 0a 69 66 63 61 70 61 62 6c  sion.#..ifcapabl
43e0: 65 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e  e schema_version
43f0: 20 7b 0a 0a 23 20 46 69 72 73 74 20 63 68 65 63   {..# First chec
4400: 6b 20 74 68 61 74 20 77 65 20 63 61 6e 20 73 65  k that we can se
4410: 74 20 74 68 65 20 73 63 68 65 6d 61 20 76 65 72  t the schema ver
4420: 73 69 6f 6e 20 61 6e 64 20 74 68 65 6e 20 72 65  sion and then re
4430: 74 72 69 65 76 65 20 74 68 65 0a 23 20 73 61 6d  trieve the.# sam
4440: 65 20 76 61 6c 75 65 2e 0a 64 6f 5f 74 65 73 74  e value..do_test
4450: 20 70 72 61 67 6d 61 2d 38 2e 31 2e 31 20 7b 0a   pragma-8.1.1 {.
4460: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
4470: 50 52 41 47 4d 41 20 73 63 68 65 6d 61 5f 76 65  PRAGMA schema_ve
4480: 72 73 69 6f 6e 20 3d 20 31 30 35 3b 0a 20 20 7d  rsion = 105;.  }
4490: 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 70 72  .} {}.do_test pr
44a0: 61 67 6d 61 2d 38 2e 31 2e 32 20 7b 0a 20 20 65  agma-8.1.2 {.  e
44b0: 78 65 63 73 71 6c 32 20 7b 0a 20 20 20 20 50 52  xecsql2 {.    PR
44c0: 41 47 4d 41 20 73 63 68 65 6d 61 5f 76 65 72 73  AGMA schema_vers
44d0: 69 6f 6e 3b 0a 20 20 7d 0a 7d 20 7b 73 63 68 65  ion;.  }.} {sche
44e0: 6d 61 5f 76 65 72 73 69 6f 6e 20 31 30 35 7d 0a  ma_version 105}.
44f0: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38  do_test pragma-8
4500: 2e 31 2e 33 20 7b 0a 20 20 65 78 65 63 73 71 6c  .1.3 {.  execsql
4510: 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 73 63   {.    PRAGMA sc
4520: 68 65 6d 61 5f 76 65 72 73 69 6f 6e 20 3d 20 31  hema_version = 1
4530: 30 36 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f  06;.  }.} {}.do_
4540: 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e  test pragma-8.1.
4550: 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  4 {.  execsql {.
4560: 20 20 20 20 50 52 41 47 4d 41 20 73 63 68 65 6d      PRAGMA schem
4570: 61 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 7d 0a 7d  a_version;.  }.}
4580: 20 31 30 36 0a 0a 23 20 43 68 65 63 6b 20 74 68   106..# Check th
4590: 61 74 20 63 72 65 61 74 69 6e 67 20 61 20 74 61  at creating a ta
45a0: 62 6c 65 20 6d 6f 64 69 66 69 65 73 20 74 68 65  ble modifies the
45b0: 20 73 63 68 65 6d 61 2d 76 65 72 73 69 6f 6e 20   schema-version 
45c0: 28 74 68 69 73 20 69 73 20 72 65 61 6c 6c 79 0a  (this is really.
45d0: 23 20 74 6f 20 76 65 72 69 66 79 20 74 68 61 74  # to verify that
45e0: 20 74 68 65 20 76 61 6c 75 65 20 62 65 69 6e 67   the value being
45f0: 20 72 65 61 64 20 69 73 20 69 6e 20 66 61 63 74   read is in fact
4600: 20 74 68 65 20 73 63 68 65 6d 61 20 76 65 72 73   the schema vers
4610: 69 6f 6e 29 2e 0a 64 6f 5f 74 65 73 74 20 70 72  ion)..do_test pr
4620: 61 67 6d 61 2d 38 2e 31 2e 35 20 7b 0a 20 20 65  agma-8.1.5 {.  e
4630: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45  xecsql {.    CRE
4640: 41 54 45 20 54 41 42 4c 45 20 74 34 28 61 2c 20  ATE TABLE t4(a, 
4650: 62 2c 20 63 29 3b 0a 20 20 20 20 49 4e 53 45 52  b, c);.    INSER
4660: 54 20 49 4e 54 4f 20 74 34 20 56 41 4c 55 45 53  T INTO t4 VALUES
4670: 28 31 2c 20 32 2c 20 33 29 3b 0a 20 20 20 20 53  (1, 2, 3);.    S
4680: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 34 3b  ELECT * FROM t4;
4690: 0a 20 20 7d 0a 7d 20 7b 31 20 32 20 33 7d 0a 64  .  }.} {1 2 3}.d
46a0: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e  o_test pragma-8.
46b0: 31 2e 36 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  1.6 {.  execsql 
46c0: 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 73 63 68  {.    PRAGMA sch
46d0: 65 6d 61 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 7d  ema_version;.  }
46e0: 0a 7d 20 31 30 37 0a 0a 23 20 4e 6f 77 20 6f 70  .} 107..# Now op
46f0: 65 6e 20 61 20 73 65 63 6f 6e 64 20 63 6f 6e 6e  en a second conn
4700: 65 63 74 69 6f 6e 20 74 6f 20 74 68 65 20 64 61  ection to the da
4710: 74 61 62 61 73 65 2e 20 45 6e 73 75 72 65 20 74  tabase. Ensure t
4720: 68 61 74 20 63 68 61 6e 67 69 6e 67 20 74 68 65  hat changing the
4730: 0a 23 20 73 63 68 65 6d 61 2d 76 65 72 73 69 6f  .# schema-versio
4740: 6e 20 75 73 69 6e 67 20 74 68 65 20 66 69 72 73  n using the firs
4750: 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6f 72  t connection for
4760: 63 65 73 20 74 68 65 20 73 65 63 6f 6e 64 20 63  ces the second c
4770: 6f 6e 6e 65 63 74 69 6f 6e 0a 23 20 74 6f 20 72  onnection.# to r
4780: 65 6c 6f 61 64 20 74 68 65 20 73 63 68 65 6d 61  eload the schema
4790: 2e 20 54 68 69 73 20 68 61 73 20 74 6f 20 62 65  . This has to be
47a0: 20 64 6f 6e 65 20 75 73 69 6e 67 20 74 68 65 20   done using the 
47b0: 43 2d 41 50 49 20 74 65 73 74 20 66 75 6e 63 74  C-API test funct
47c0: 69 6f 6e 73 2c 0a 23 20 62 65 63 61 75 73 65 20  ions,.# because 
47d0: 74 68 65 20 54 43 4c 20 41 50 49 20 61 63 63 6f  the TCL API acco
47e0: 75 6e 74 73 20 66 6f 72 20 53 43 48 45 4d 41 5f  unts for SCHEMA_
47f0: 45 52 52 4f 52 20 61 6e 64 20 72 65 74 72 69 65  ERROR and retrie
4800: 73 20 74 68 65 20 71 75 65 72 79 2e 0a 64 6f 5f  s the query..do_
4810: 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e  test pragma-8.1.
4820: 37 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 64 62  7 {.  sqlite3 db
4830: 32 20 74 65 73 74 2e 64 62 3b 20 73 65 74 20 3a  2 test.db; set :
4840: 3a 44 42 32 20 5b 73 71 6c 69 74 65 33 5f 63 6f  :DB2 [sqlite3_co
4850: 6e 6e 65 63 74 69 6f 6e 5f 70 6f 69 6e 74 65 72  nnection_pointer
4860: 20 64 62 32 5d 0a 20 20 65 78 65 63 73 71 6c 20   db2].  execsql 
4870: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  {.    SELECT * F
4880: 52 4f 4d 20 74 34 3b 0a 20 20 7d 20 64 62 32 0a  ROM t4;.  } db2.
4890: 7d 20 7b 31 20 32 20 33 7d 0a 64 6f 5f 74 65 73  } {1 2 3}.do_tes
48a0: 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e 38 20 7b  t pragma-8.1.8 {
48b0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
48c0: 20 50 52 41 47 4d 41 20 73 63 68 65 6d 61 5f 76   PRAGMA schema_v
48d0: 65 72 73 69 6f 6e 20 3d 20 31 30 38 3b 0a 20 20  ersion = 108;.  
48e0: 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 70  }.} {}.do_test p
48f0: 72 61 67 6d 61 2d 38 2e 31 2e 39 20 7b 0a 20 20  ragma-8.1.9 {.  
4900: 73 65 74 20 3a 3a 53 54 4d 54 20 5b 73 71 6c 69  set ::STMT [sqli
4910: 74 65 33 5f 70 72 65 70 61 72 65 20 24 3a 3a 44  te3_prepare $::D
4920: 42 32 20 22 53 45 4c 45 43 54 20 2a 20 46 52 4f  B2 "SELECT * FRO
4930: 4d 20 74 34 22 20 2d 31 20 44 55 4d 4d 59 5d 0a  M t4" -1 DUMMY].
4940: 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24    sqlite3_step $
4950: 3a 3a 53 54 4d 54 0a 7d 20 53 51 4c 49 54 45 5f  ::STMT.} SQLITE_
4960: 45 52 52 4f 52 0a 64 6f 5f 74 65 73 74 20 70 72  ERROR.do_test pr
4970: 61 67 6d 61 2d 38 2e 31 2e 31 30 20 7b 0a 20 20  agma-8.1.10 {.  
4980: 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65  sqlite3_finalize
4990: 20 24 3a 3a 53 54 4d 54 0a 7d 20 53 51 4c 49 54   $::STMT.} SQLIT
49a0: 45 5f 53 43 48 45 4d 41 0a 0a 23 20 4d 61 6b 65  E_SCHEMA..# Make
49b0: 20 73 75 72 65 20 74 68 65 20 73 63 68 65 6d 61   sure the schema
49c0: 2d 76 65 72 73 69 6f 6e 20 63 61 6e 20 62 65 20  -version can be 
49d0: 6d 61 6e 69 70 75 6c 61 74 65 64 20 69 6e 20 61  manipulated in a
49e0: 6e 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  n attached datab
49f0: 61 73 65 2e 0a 66 6f 72 63 65 64 65 6c 65 74 65  ase..forcedelete
4a00: 20 74 65 73 74 32 2e 64 62 0a 66 6f 72 63 65 64   test2.db.forced
4a10: 65 6c 65 74 65 20 74 65 73 74 32 2e 64 62 2d 6a  elete test2.db-j
4a20: 6f 75 72 6e 61 6c 0a 69 66 63 61 70 61 62 6c 65  ournal.ifcapable
4a30: 20 61 74 74 61 63 68 20 7b 0a 20 20 64 6f 5f 74   attach {.  do_t
4a40: 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e 31  est pragma-8.1.1
4a50: 31 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  1 {.    execsql 
4a60: 7b 0a 20 20 20 20 20 20 41 54 54 41 43 48 20 27  {.      ATTACH '
4a70: 74 65 73 74 32 2e 64 62 27 20 41 53 20 61 75 78  test2.db' AS aux
4a80: 3b 0a 20 20 20 20 20 20 43 52 45 41 54 45 20 54  ;.      CREATE T
4a90: 41 42 4c 45 20 61 75 78 2e 74 31 28 61 2c 20 62  ABLE aux.t1(a, b
4aa0: 2c 20 63 29 3b 0a 20 20 20 20 20 20 50 52 41 47  , c);.      PRAG
4ab0: 4d 41 20 61 75 78 2e 73 63 68 65 6d 61 5f 76 65  MA aux.schema_ve
4ac0: 72 73 69 6f 6e 20 3d 20 32 30 35 3b 0a 20 20 20  rsion = 205;.   
4ad0: 20 7d 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74   }.  } {}.  do_t
4ae0: 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e 31  est pragma-8.1.1
4af0: 32 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  2 {.    execsql 
4b00: 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 61  {.      PRAGMA a
4b10: 75 78 2e 73 63 68 65 6d 61 5f 76 65 72 73 69 6f  ux.schema_versio
4b20: 6e 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 32 30 35  n;.    }.  } 205
4b30: 0a 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .}.do_test pragm
4b40: 61 2d 38 2e 31 2e 31 33 20 7b 0a 20 20 65 78 65  a-8.1.13 {.  exe
4b50: 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d  csql {.    PRAGM
4b60: 41 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e  A schema_version
4b70: 3b 0a 20 20 7d 0a 7d 20 31 30 38 0a 0a 23 20 41  ;.  }.} 108..# A
4b80: 6e 64 20 63 68 65 63 6b 20 74 68 61 74 20 6d 6f  nd check that mo
4b90: 64 69 66 79 69 6e 67 20 74 68 65 20 73 63 68 65  difying the sche
4ba0: 6d 61 2d 76 65 72 73 69 6f 6e 20 69 6e 20 61 6e  ma-version in an
4bb0: 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
4bc0: 73 65 0a 23 20 66 6f 72 63 65 73 20 74 68 65 20  se.# forces the 
4bd0: 73 65 63 6f 6e 64 20 63 6f 6e 6e 65 63 74 69 6f  second connectio
4be0: 6e 20 74 6f 20 72 65 6c 6f 61 64 20 74 68 65 20  n to reload the 
4bf0: 73 63 68 65 6d 61 2e 0a 69 66 63 61 70 61 62 6c  schema..ifcapabl
4c00: 65 20 61 74 74 61 63 68 20 7b 0a 20 20 64 6f 5f  e attach {.  do_
4c10: 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e  test pragma-8.1.
4c20: 31 34 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  14 {.    sqlite3
4c30: 20 64 62 32 20 74 65 73 74 2e 64 62 3b 20 73 65   db2 test.db; se
4c40: 74 20 3a 3a 44 42 32 20 5b 73 71 6c 69 74 65 33  t ::DB2 [sqlite3
4c50: 5f 63 6f 6e 6e 65 63 74 69 6f 6e 5f 70 6f 69 6e  _connection_poin
4c60: 74 65 72 20 64 62 32 5d 0a 20 20 20 20 65 78 65  ter db2].    exe
4c70: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 41 54 54  csql {.      ATT
4c80: 41 43 48 20 27 74 65 73 74 32 2e 64 62 27 20 41  ACH 'test2.db' A
4c90: 53 20 61 75 78 3b 0a 20 20 20 20 20 20 53 45 4c  S aux;.      SEL
4ca0: 45 43 54 20 2a 20 46 52 4f 4d 20 61 75 78 2e 74  ECT * FROM aux.t
4cb0: 31 3b 0a 20 20 20 20 7d 20 64 62 32 0a 20 20 7d  1;.    } db2.  }
4cc0: 20 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72   {}.  do_test pr
4cd0: 61 67 6d 61 2d 38 2e 31 2e 31 35 20 7b 0a 20 20  agma-8.1.15 {.  
4ce0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
4cf0: 20 20 50 52 41 47 4d 41 20 61 75 78 2e 73 63 68    PRAGMA aux.sch
4d00: 65 6d 61 5f 76 65 72 73 69 6f 6e 20 3d 20 32 30  ema_version = 20
4d10: 36 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 7d 0a  6;.    }.  } {}.
4d20: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
4d30: 2d 38 2e 31 2e 31 36 20 7b 0a 20 20 20 20 73 65  -8.1.16 {.    se
4d40: 74 20 3a 3a 53 54 4d 54 20 5b 73 71 6c 69 74 65  t ::STMT [sqlite
4d50: 33 5f 70 72 65 70 61 72 65 20 24 3a 3a 44 42 32  3_prepare $::DB2
4d60: 20 22 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20   "SELECT * FROM 
4d70: 61 75 78 2e 74 31 22 20 2d 31 20 44 55 4d 4d 59  aux.t1" -1 DUMMY
4d80: 5d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 74  ].    sqlite3_st
4d90: 65 70 20 24 3a 3a 53 54 4d 54 0a 20 20 7d 20 53  ep $::STMT.  } S
4da0: 51 4c 49 54 45 5f 45 52 52 4f 52 0a 20 20 64 6f  QLITE_ERROR.  do
4db0: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 31  _test pragma-8.1
4dc0: 2e 31 37 20 7b 0a 20 20 20 20 73 71 6c 69 74 65  .17 {.    sqlite
4dd0: 33 5f 66 69 6e 61 6c 69 7a 65 20 24 3a 3a 53 54  3_finalize $::ST
4de0: 4d 54 0a 20 20 7d 20 53 51 4c 49 54 45 5f 53 43  MT.  } SQLITE_SC
4df0: 48 45 4d 41 0a 20 20 64 6f 5f 74 65 73 74 20 70  HEMA.  do_test p
4e00: 72 61 67 6d 61 2d 38 2e 31 2e 31 38 20 7b 0a 20  ragma-8.1.18 {. 
4e10: 20 20 20 64 62 32 20 63 6c 6f 73 65 0a 20 20 7d     db2 close.  }
4e20: 20 7b 7d 0a 7d 0a 0a 23 20 4e 6f 77 20 74 65 73   {}.}..# Now tes
4e30: 74 20 74 68 61 74 20 74 68 65 20 75 73 65 72 2d  t that the user-
4e40: 76 65 72 73 69 6f 6e 20 63 61 6e 20 62 65 20 72  version can be r
4e50: 65 61 64 20 61 6e 64 20 77 72 69 74 74 65 6e 20  ead and written 
4e60: 28 61 6e 64 20 74 68 61 74 20 77 65 20 61 72 65  (and that we are
4e70: 6e 27 74 0a 23 20 61 63 63 69 64 65 6e 74 61 6c  n't.# accidental
4e80: 6c 79 20 6d 61 6e 69 70 75 6c 61 74 69 6e 67 20  ly manipulating 
4e90: 74 68 65 20 73 63 68 65 6d 61 2d 76 65 72 73 69  the schema-versi
4ea0: 6f 6e 20 69 6e 73 74 65 61 64 29 2e 0a 64 6f 5f  on instead)..do_
4eb0: 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 32 2e  test pragma-8.2.
4ec0: 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 32 20 7b  1 {.  execsql2 {
4ed0: 0a 20 20 20 20 50 52 41 47 4d 41 20 75 73 65 72  .    PRAGMA user
4ee0: 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 7d 0a 7d 20  _version;.  }.} 
4ef0: 7b 75 73 65 72 5f 76 65 72 73 69 6f 6e 20 30 7d  {user_version 0}
4f00: 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d  .do_test pragma-
4f10: 38 2e 32 2e 32 20 7b 0a 20 20 65 78 65 63 73 71  8.2.2 {.  execsq
4f20: 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 75  l {.    PRAGMA u
4f30: 73 65 72 5f 76 65 72 73 69 6f 6e 20 3d 20 32 3b  ser_version = 2;
4f40: 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73  .  }.} {}.do_tes
4f50: 74 20 70 72 61 67 6d 61 2d 38 2e 32 2e 33 2e 31  t pragma-8.2.3.1
4f60: 20 7b 0a 20 20 65 78 65 63 73 71 6c 32 20 7b 0a   {.  execsql2 {.
4f70: 20 20 20 20 50 52 41 47 4d 41 20 75 73 65 72 5f      PRAGMA user_
4f80: 76 65 72 73 69 6f 6e 3b 0a 20 20 7d 0a 7d 20 7b  version;.  }.} {
4f90: 75 73 65 72 5f 76 65 72 73 69 6f 6e 20 32 7d 0a  user_version 2}.
4fa0: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38  do_test pragma-8
4fb0: 2e 32 2e 33 2e 32 20 7b 0a 20 20 64 62 20 63 6c  .2.3.2 {.  db cl
4fc0: 6f 73 65 0a 20 20 73 71 6c 69 74 65 33 20 64 62  ose.  sqlite3 db
4fd0: 20 74 65 73 74 2e 64 62 0a 20 20 65 78 65 63 73   test.db.  execs
4fe0: 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20  ql {.    PRAGMA 
4ff0: 75 73 65 72 5f 76 65 72 73 69 6f 6e 3b 0a 20 20  user_version;.  
5000: 7d 0a 7d 20 7b 32 7d 0a 64 6f 5f 74 65 73 74 20  }.} {2}.do_test 
5010: 70 72 61 67 6d 61 2d 38 2e 32 2e 34 2e 31 20 7b  pragma-8.2.4.1 {
5020: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
5030: 20 50 52 41 47 4d 41 20 73 63 68 65 6d 61 5f 76   PRAGMA schema_v
5040: 65 72 73 69 6f 6e 3b 0a 20 20 7d 0a 7d 20 7b 31  ersion;.  }.} {1
5050: 30 38 7d 0a 69 66 63 61 70 61 62 6c 65 20 76 61  08}.ifcapable va
5060: 63 75 75 6d 20 7b 0a 20 20 64 6f 5f 74 65 73 74  cuum {.  do_test
5070: 20 70 72 61 67 6d 61 2d 38 2e 32 2e 34 2e 32 20   pragma-8.2.4.2 
5080: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a  {.    execsql {.
5090: 20 20 20 20 20 20 56 41 43 55 55 4d 3b 0a 20 20        VACUUM;.  
50a0: 20 20 20 20 50 52 41 47 4d 41 20 75 73 65 72 5f      PRAGMA user_
50b0: 76 65 72 73 69 6f 6e 3b 0a 20 20 20 20 7d 0a 20  version;.    }. 
50c0: 20 7d 20 7b 32 7d 0a 20 20 64 6f 5f 74 65 73 74   } {2}.  do_test
50d0: 20 70 72 61 67 6d 61 2d 38 2e 32 2e 34 2e 33 20   pragma-8.2.4.3 
50e0: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a  {.    execsql {.
50f0: 20 20 20 20 20 20 50 52 41 47 4d 41 20 73 63 68        PRAGMA sch
5100: 65 6d 61 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 20  ema_version;.   
5110: 20 7d 0a 20 20 7d 20 7b 31 30 39 7d 0a 7d 0a 0a   }.  } {109}.}..
5120: 69 66 63 61 70 61 62 6c 65 20 61 74 74 61 63 68  ifcapable attach
5130: 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 41 54   {.  db eval {AT
5140: 54 41 43 48 20 27 74 65 73 74 32 2e 64 62 27 20  TACH 'test2.db' 
5150: 41 53 20 61 75 78 7d 0a 20 20 0a 20 20 23 20 43  AS aux}.  .  # C
5160: 68 65 63 6b 20 74 68 61 74 20 74 68 65 20 75 73  heck that the us
5170: 65 72 2d 76 65 72 73 69 6f 6e 20 69 6e 20 74 68  er-version in th
5180: 65 20 61 75 78 69 6c 61 72 79 20 64 61 74 61 62  e auxilary datab
5190: 61 73 65 20 63 61 6e 20 62 65 20 6d 61 6e 69 70  ase can be manip
51a0: 75 6c 61 74 65 64 20 28 0a 20 20 23 20 61 6e 64  ulated (.  # and
51b0: 20 74 68 61 74 20 77 65 20 61 72 65 6e 27 74 20   that we aren't 
51c0: 61 63 63 69 64 65 6e 74 61 6c 6c 79 20 6d 61 6e  accidentally man
51d0: 69 70 75 6c 61 74 69 6e 67 20 74 68 65 20 73 61  ipulating the sa
51e0: 6d 65 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64  me in the main d
51f0: 62 29 2e 0a 20 20 64 6f 5f 74 65 73 74 20 70 72  b)..  do_test pr
5200: 61 67 6d 61 2d 38 2e 32 2e 35 20 7b 0a 20 20 20  agma-8.2.5 {.   
5210: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20   execsql {.     
5220: 20 50 52 41 47 4d 41 20 61 75 78 2e 75 73 65 72   PRAGMA aux.user
5230: 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 20 20 7d 0a  _version;.    }.
5240: 20 20 7d 20 7b 30 7d 0a 20 20 64 6f 5f 74 65 73    } {0}.  do_tes
5250: 74 20 70 72 61 67 6d 61 2d 38 2e 32 2e 36 20 7b  t pragma-8.2.6 {
5260: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
5270: 20 20 20 20 20 50 52 41 47 4d 41 20 61 75 78 2e       PRAGMA aux.
5280: 75 73 65 72 5f 76 65 72 73 69 6f 6e 20 3d 20 33  user_version = 3
5290: 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 7d 0a 20  ;.    }.  } {}. 
52a0: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
52b0: 38 2e 32 2e 37 20 7b 0a 20 20 20 20 65 78 65 63  8.2.7 {.    exec
52c0: 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47  sql {.      PRAG
52d0: 4d 41 20 61 75 78 2e 75 73 65 72 5f 76 65 72 73  MA aux.user_vers
52e0: 69 6f 6e 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b  ion;.    }.  } {
52f0: 33 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61  3}.  do_test pra
5300: 67 6d 61 2d 38 2e 32 2e 38 20 7b 0a 20 20 20 20  gma-8.2.8 {.    
5310: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
5320: 50 52 41 47 4d 41 20 6d 61 69 6e 2e 75 73 65 72  PRAGMA main.user
5330: 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 20 20 7d 0a  _version;.    }.
5340: 20 20 7d 20 7b 32 7d 0a 20 20 0a 20 20 23 20 4e    } {2}.  .  # N
5350: 6f 77 20 63 68 65 63 6b 20 74 68 61 74 20 61 20  ow check that a 
5360: 52 4f 4c 4c 42 41 43 4b 20 72 65 73 65 74 73 20  ROLLBACK resets 
5370: 74 68 65 20 75 73 65 72 2d 76 65 72 73 69 6f 6e  the user-version
5380: 20 69 66 20 69 74 20 68 61 73 20 62 65 65 6e 20   if it has been 
5390: 6d 6f 64 69 66 69 65 64 0a 20 20 23 20 77 69 74  modified.  # wit
53a0: 68 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f  hin a transactio
53b0: 6e 2e 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61  n..  do_test pra
53c0: 67 6d 61 2d 38 2e 32 2e 39 20 7b 0a 20 20 20 20  gma-8.2.9 {.    
53d0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
53e0: 42 45 47 49 4e 3b 0a 20 20 20 20 20 20 50 52 41  BEGIN;.      PRA
53f0: 47 4d 41 20 61 75 78 2e 75 73 65 72 5f 76 65 72  GMA aux.user_ver
5400: 73 69 6f 6e 20 3d 20 31 30 3b 0a 20 20 20 20 20  sion = 10;.     
5410: 20 50 52 41 47 4d 41 20 75 73 65 72 5f 76 65 72   PRAGMA user_ver
5420: 73 69 6f 6e 20 3d 20 31 31 3b 0a 20 20 20 20 7d  sion = 11;.    }
5430: 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65 73  .  } {}.  do_tes
5440: 74 20 70 72 61 67 6d 61 2d 38 2e 32 2e 31 30 20  t pragma-8.2.10 
5450: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a  {.    execsql {.
5460: 20 20 20 20 20 20 50 52 41 47 4d 41 20 61 75 78        PRAGMA aux
5470: 2e 75 73 65 72 5f 76 65 72 73 69 6f 6e 3b 0a 20  .user_version;. 
5480: 20 20 20 7d 0a 20 20 7d 20 7b 31 30 7d 0a 20 20     }.  } {10}.  
5490: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38  do_test pragma-8
54a0: 2e 32 2e 31 31 20 7b 0a 20 20 20 20 65 78 65 63  .2.11 {.    exec
54b0: 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47  sql {.      PRAG
54c0: 4d 41 20 6d 61 69 6e 2e 75 73 65 72 5f 76 65 72  MA main.user_ver
54d0: 73 69 6f 6e 3b 0a 20 20 20 20 7d 0a 20 20 7d 20  sion;.    }.  } 
54e0: 7b 31 31 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70  {11}.  do_test p
54f0: 72 61 67 6d 61 2d 38 2e 32 2e 31 32 20 7b 0a 20  ragma-8.2.12 {. 
5500: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
5510: 20 20 20 52 4f 4c 4c 42 41 43 4b 3b 0a 20 20 20     ROLLBACK;.   
5520: 20 20 20 50 52 41 47 4d 41 20 61 75 78 2e 75 73     PRAGMA aux.us
5530: 65 72 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 20 20  er_version;.    
5540: 7d 0a 20 20 7d 20 7b 33 7d 0a 20 20 64 6f 5f 74  }.  } {3}.  do_t
5550: 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 32 2e 31  est pragma-8.2.1
5560: 33 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  3 {.    execsql 
5570: 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 6d  {.      PRAGMA m
5580: 61 69 6e 2e 75 73 65 72 5f 76 65 72 73 69 6f 6e  ain.user_version
5590: 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 32 7d 0a  ;.    }.  } {2}.
55a0: 7d 0a 0a 23 20 54 72 79 20 61 20 6e 65 67 61 74  }..# Try a negat
55b0: 69 76 65 20 76 61 6c 75 65 20 66 6f 72 20 74 68  ive value for th
55c0: 65 20 75 73 65 72 2d 76 65 72 73 69 6f 6e 0a 64  e user-version.d
55d0: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e  o_test pragma-8.
55e0: 32 2e 31 34 20 7b 0a 20 20 65 78 65 63 73 71 6c  2.14 {.  execsql
55f0: 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 75 73   {.    PRAGMA us
5600: 65 72 5f 76 65 72 73 69 6f 6e 20 3d 20 2d 34 35  er_version = -45
5610: 30 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74  0;.  }.} {}.do_t
5620: 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 32 2e 31  est pragma-8.2.1
5630: 35 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  5 {.  execsql {.
5640: 20 20 20 20 50 52 41 47 4d 41 20 75 73 65 72 5f      PRAGMA user_
5650: 76 65 72 73 69 6f 6e 3b 0a 20 20 7d 0a 7d 20 7b  version;.  }.} {
5660: 2d 34 35 30 7d 0a 7d 20 3b 20 23 20 69 66 63 61  -450}.} ; # ifca
5670: 70 61 62 6c 65 20 73 63 68 65 6d 61 5f 76 65 72  pable schema_ver
5680: 73 69 6f 6e 0a 0a 23 20 43 68 65 63 6b 20 74 6f  sion..# Check to
5690: 20 73 65 65 20 69 66 20 54 45 4d 50 5f 53 54 4f   see if TEMP_STO
56a0: 52 45 20 69 73 20 6d 65 6d 6f 72 79 20 6f 72 20  RE is memory or 
56b0: 64 69 73 6b 2e 20 20 52 65 74 75 72 6e 20 73 74  disk.  Return st
56c0: 72 69 6e 67 73 0a 23 20 22 6d 65 6d 6f 72 79 22  rings.# "memory"
56d0: 20 6f 72 20 22 64 69 73 6b 22 20 61 73 20 61 70   or "disk" as ap
56e0: 70 72 6f 70 72 69 61 74 65 2e 0a 23 0a 70 72 6f  propriate..#.pro
56f0: 63 20 63 68 65 63 6b 5f 74 65 6d 70 5f 73 74 6f  c check_temp_sto
5700: 72 65 20 7b 7d 20 7b 0a 20 20 64 62 20 65 76 61  re {} {.  db eva
5710: 6c 20 7b 43 52 45 41 54 45 20 54 45 4d 50 20 54  l {CREATE TEMP T
5720: 41 42 4c 45 20 49 46 20 4e 4f 54 20 45 58 49 53  ABLE IF NOT EXIS
5730: 54 53 20 61 28 62 29 7d 0a 20 20 64 62 20 65 76  TS a(b)}.  db ev
5740: 61 6c 20 7b 50 52 41 47 4d 41 20 64 61 74 61 62  al {PRAGMA datab
5750: 61 73 65 5f 6c 69 73 74 7d 20 7b 0a 20 20 20 20  ase_list} {.    
5760: 69 66 20 7b 24 6e 61 6d 65 3d 3d 22 74 65 6d 70  if {$name=="temp
5770: 22 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20 62  "} {.      set b
5780: 74 20 5b 62 74 72 65 65 5f 66 72 6f 6d 5f 64 62  t [btree_from_db
5790: 20 64 62 20 31 5d 0a 20 20 20 20 20 20 69 66 20   db 1].      if 
57a0: 7b 5b 62 74 72 65 65 5f 69 73 6d 65 6d 64 62 20  {[btree_ismemdb 
57b0: 24 62 74 5d 7d 20 7b 0a 20 20 20 20 20 20 20 20  $bt]} {.        
57c0: 72 65 74 75 72 6e 20 22 6d 65 6d 6f 72 79 22 0a  return "memory".
57d0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 72 65        }.      re
57e0: 74 75 72 6e 20 22 64 69 73 6b 22 0a 20 20 20 20  turn "disk".    
57f0: 7d 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 22  }.  }.  return "
5800: 75 6e 6b 6e 6f 77 6e 22 0a 7d 0a 0a 0a 23 20 54  unknown".}...# T
5810: 65 73 74 20 74 65 6d 70 5f 73 74 6f 72 65 20 61  est temp_store a
5820: 6e 64 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69  nd temp_store_di
5830: 72 65 63 74 6f 72 79 20 70 72 61 67 6d 61 73 0a  rectory pragmas.
5840: 23 0a 69 66 63 61 70 61 62 6c 65 20 70 61 67 65  #.ifcapable page
5850: 72 5f 70 72 61 67 6d 61 73 20 7b 0a 64 6f 5f 74  r_pragmas {.do_t
5860: 65 73 74 20 70 72 61 67 6d 61 2d 39 2e 31 20 7b  est pragma-9.1 {
5870: 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 73 71  .  db close.  sq
5880: 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64 62  lite3 db test.db
5890: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
58a0: 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f   PRAGMA temp_sto
58b0: 72 65 3b 0a 20 20 7d 0a 7d 20 7b 30 7d 0a 69 66  re;.  }.} {0}.if
58c0: 20 7b 24 54 45 4d 50 5f 53 54 4f 52 45 3c 3d 31   {$TEMP_STORE<=1
58d0: 7d 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 70 72  } {.  do_test pr
58e0: 61 67 6d 61 2d 39 2e 31 2e 31 20 7b 0a 20 20 20  agma-9.1.1 {.   
58f0: 20 63 68 65 63 6b 5f 74 65 6d 70 5f 73 74 6f 72   check_temp_stor
5900: 65 0a 20 20 7d 20 7b 64 69 73 6b 7d 0a 7d 20 65  e.  } {disk}.} e
5910: 6c 73 65 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20  lse {.  do_test 
5920: 70 72 61 67 6d 61 2d 39 2e 31 2e 31 20 7b 0a 20  pragma-9.1.1 {. 
5930: 20 20 20 63 68 65 63 6b 5f 74 65 6d 70 5f 73 74     check_temp_st
5940: 6f 72 65 0a 20 20 7d 20 7b 6d 65 6d 6f 72 79 7d  ore.  } {memory}
5950: 0a 7d 0a 0a 64 6f 5f 74 65 73 74 20 70 72 61 67  .}..do_test prag
5960: 6d 61 2d 39 2e 32 20 7b 0a 20 20 64 62 20 63 6c  ma-9.2 {.  db cl
5970: 6f 73 65 0a 20 20 73 71 6c 69 74 65 33 20 64 62  ose.  sqlite3 db
5980: 20 74 65 73 74 2e 64 62 0a 20 20 65 78 65 63 73   test.db.  execs
5990: 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20  ql {.    PRAGMA 
59a0: 74 65 6d 70 5f 73 74 6f 72 65 3d 66 69 6c 65 3b  temp_store=file;
59b0: 0a 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70  .    PRAGMA temp
59c0: 5f 73 74 6f 72 65 3b 0a 20 20 7d 0a 7d 20 7b 31  _store;.  }.} {1
59d0: 7d 0a 69 66 20 7b 24 54 45 4d 50 5f 53 54 4f 52  }.if {$TEMP_STOR
59e0: 45 3d 3d 33 7d 20 7b 0a 20 20 23 20 57 68 65 6e  E==3} {.  # When
59f0: 20 54 45 4d 50 5f 53 54 4f 52 45 20 69 73 20 33   TEMP_STORE is 3
5a00: 2c 20 61 6c 77 61 79 73 20 75 73 65 20 6d 65 6d  , always use mem
5a10: 6f 72 79 20 72 65 67 61 72 64 6c 65 73 73 20 6f  ory regardless o
5a20: 66 20 70 72 61 67 6d 61 20 73 65 74 74 69 6e 67  f pragma setting
5a30: 73 2e 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61  s..  do_test pra
5a40: 67 6d 61 2d 39 2e 32 2e 31 20 7b 0a 20 20 20 20  gma-9.2.1 {.    
5a50: 63 68 65 63 6b 5f 74 65 6d 70 5f 73 74 6f 72 65  check_temp_store
5a60: 0a 20 20 7d 20 7b 6d 65 6d 6f 72 79 7d 0a 7d 20  .  } {memory}.} 
5a70: 65 6c 73 65 20 7b 0a 20 20 64 6f 5f 74 65 73 74  else {.  do_test
5a80: 20 70 72 61 67 6d 61 2d 39 2e 32 2e 31 20 7b 0a   pragma-9.2.1 {.
5a90: 20 20 20 20 63 68 65 63 6b 5f 74 65 6d 70 5f 73      check_temp_s
5aa0: 74 6f 72 65 0a 20 20 7d 20 7b 64 69 73 6b 7d 0a  tore.  } {disk}.
5ab0: 7d 0a 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  }..do_test pragm
5ac0: 61 2d 39 2e 33 20 7b 0a 20 20 64 62 20 63 6c 6f  a-9.3 {.  db clo
5ad0: 73 65 0a 20 20 73 71 6c 69 74 65 33 20 64 62 20  se.  sqlite3 db 
5ae0: 74 65 73 74 2e 64 62 0a 20 20 65 78 65 63 73 71  test.db.  execsq
5af0: 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 74  l {.    PRAGMA t
5b00: 65 6d 70 5f 73 74 6f 72 65 3d 6d 65 6d 6f 72 79  emp_store=memory
5b10: 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d  ;.    PRAGMA tem
5b20: 70 5f 73 74 6f 72 65 3b 0a 20 20 7d 0a 7d 20 7b  p_store;.  }.} {
5b30: 32 7d 0a 69 66 20 7b 24 54 45 4d 50 5f 53 54 4f  2}.if {$TEMP_STO
5b40: 52 45 3d 3d 30 7d 20 7b 0a 20 20 23 20 57 68 65  RE==0} {.  # Whe
5b50: 6e 20 54 45 4d 50 5f 53 54 4f 52 45 20 69 73 20  n TEMP_STORE is 
5b60: 30 2c 20 61 6c 77 61 79 73 20 75 73 65 20 74 68  0, always use th
5b70: 65 20 64 69 73 6b 20 72 65 67 61 72 64 6c 65 73  e disk regardles
5b80: 73 20 6f 66 20 70 72 61 67 6d 61 20 73 65 74 74  s of pragma sett
5b90: 69 6e 67 73 2e 0a 20 20 64 6f 5f 74 65 73 74 20  ings..  do_test 
5ba0: 70 72 61 67 6d 61 2d 39 2e 33 2e 31 20 7b 0a 20  pragma-9.3.1 {. 
5bb0: 20 20 20 63 68 65 63 6b 5f 74 65 6d 70 5f 73 74     check_temp_st
5bc0: 6f 72 65 0a 20 20 7d 20 7b 64 69 73 6b 7d 0a 7d  ore.  } {disk}.}
5bd0: 20 65 6c 73 65 20 7b 0a 20 20 64 6f 5f 74 65 73   else {.  do_tes
5be0: 74 20 70 72 61 67 6d 61 2d 39 2e 33 2e 31 20 7b  t pragma-9.3.1 {
5bf0: 0a 20 20 20 20 63 68 65 63 6b 5f 74 65 6d 70 5f  .    check_temp_
5c00: 73 74 6f 72 65 0a 20 20 7d 20 7b 6d 65 6d 6f 72  store.  } {memor
5c10: 79 7d 0a 7d 0a 0a 64 6f 5f 74 65 73 74 20 70 72  y}.}..do_test pr
5c20: 61 67 6d 61 2d 39 2e 34 20 7b 0a 20 20 65 78 65  agma-9.4 {.  exe
5c30: 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d  csql {.    PRAGM
5c40: 41 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72  A temp_store_dir
5c50: 65 63 74 6f 72 79 3b 0a 20 20 7d 0a 7d 20 7b 7d  ectory;.  }.} {}
5c60: 0a 69 66 63 61 70 61 62 6c 65 20 77 73 64 20 7b  .ifcapable wsd {
5c70: 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .  do_test pragm
5c80: 61 2d 39 2e 35 20 7b 0a 20 20 20 20 73 65 74 20  a-9.5 {.    set 
5c90: 70 77 64 20 5b 73 74 72 69 6e 67 20 6d 61 70 20  pwd [string map 
5ca0: 7b 27 20 27 27 7d 20 5b 66 69 6c 65 20 6e 61 74  {' ''} [file nat
5cb0: 69 76 65 6e 61 6d 65 20 5b 70 77 64 5d 5d 5d 0a  ivename [pwd]]].
5cc0: 20 20 20 20 65 78 65 63 73 71 6c 20 22 0a 20 20      execsql ".  
5cd0: 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f      PRAGMA temp_
5ce0: 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 3d  store_directory=
5cf0: 27 24 70 77 64 27 3b 0a 20 20 20 20 22 0a 20 20  '$pwd';.    ".  
5d00: 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70  } {}.  do_test p
5d10: 72 61 67 6d 61 2d 39 2e 36 20 7b 0a 20 20 20 20  ragma-9.6 {.    
5d20: 65 78 65 63 73 71 6c 20 7b 20 0a 20 20 20 20 20  execsql { .     
5d30: 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f   PRAGMA temp_sto
5d40: 72 65 5f 64 69 72 65 63 74 6f 72 79 3b 0a 20 20  re_directory;.  
5d50: 20 20 7d 0a 20 20 7d 20 5b 6c 69 73 74 20 5b 66    }.  } [list [f
5d60: 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b  ile nativename [
5d70: 70 77 64 5d 5d 5d 0a 20 20 64 6f 5f 74 65 73 74  pwd]]].  do_test
5d80: 20 70 72 61 67 6d 61 2d 39 2e 37 20 7b 0a 20 20   pragma-9.7 {.  
5d90: 20 20 63 61 74 63 68 73 71 6c 20 7b 20 0a 20 20    catchsql { .  
5da0: 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f      PRAGMA temp_
5db0: 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 3d  store_directory=
5dc0: 27 2f 4e 4f 4e 2f 45 58 49 53 54 45 4e 54 2f 50  '/NON/EXISTENT/P
5dd0: 41 54 48 2f 46 4f 4f 42 41 52 27 3b 0a 20 20 20  ATH/FOOBAR';.   
5de0: 20 7d 0a 20 20 7d 20 7b 31 20 7b 6e 6f 74 20 61   }.  } {1 {not a
5df0: 20 77 72 69 74 61 62 6c 65 20 64 69 72 65 63 74   writable direct
5e00: 6f 72 79 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20  ory}}.  do_test 
5e10: 70 72 61 67 6d 61 2d 39 2e 38 20 7b 0a 20 20 20  pragma-9.8 {.   
5e20: 20 65 78 65 63 73 71 6c 20 7b 20 0a 20 20 20 20   execsql { .    
5e30: 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74    PRAGMA temp_st
5e40: 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 3d 27 27  ore_directory=''
5e50: 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 7d 0a 20  ;.    }.  } {}. 
5e60: 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73   if {![info exis
5e70: 74 73 20 54 45 4d 50 5f 53 54 4f 52 45 5d 20 7c  ts TEMP_STORE] |
5e80: 7c 20 24 54 45 4d 50 5f 53 54 4f 52 45 3c 3d 31  | $TEMP_STORE<=1
5e90: 7d 20 7b 0a 20 20 20 20 69 66 63 61 70 61 62 6c  } {.    ifcapabl
5ea0: 65 20 74 65 6d 70 64 62 20 7b 0a 20 20 20 20 20  e tempdb {.     
5eb0: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
5ec0: 39 2e 39 20 7b 0a 20 20 20 20 20 20 20 20 65 78  9.9 {.        ex
5ed0: 65 63 73 71 6c 20 7b 20 0a 20 20 20 20 20 20 20  ecsql { .       
5ee0: 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73     PRAGMA temp_s
5ef0: 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 3b 0a  tore_directory;.
5f00: 20 20 20 20 20 20 20 20 20 20 50 52 41 47 4d 41            PRAGMA
5f10: 20 74 65 6d 70 5f 73 74 6f 72 65 3d 46 49 4c 45   temp_store=FILE
5f20: 3b 0a 20 20 20 20 20 20 20 20 20 20 43 52 45 41  ;.          CREA
5f30: 54 45 20 54 45 4d 50 20 54 41 42 4c 45 20 74 65  TE TEMP TABLE te
5f40: 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f  mp_store_directo
5f50: 72 79 5f 74 65 73 74 28 61 20 69 6e 74 65 67 65  ry_test(a intege
5f60: 72 29 3b 0a 20 20 20 20 20 20 20 20 20 20 49 4e  r);.          IN
5f70: 53 45 52 54 20 49 4e 54 4f 20 74 65 6d 70 5f 73  SERT INTO temp_s
5f80: 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 5f 74  tore_directory_t
5f90: 65 73 74 20 76 61 6c 75 65 73 20 28 32 29 3b 0a  est values (2);.
5fa0: 20 20 20 20 20 20 20 20 20 20 53 45 4c 45 43 54            SELECT
5fb0: 20 2a 20 46 52 4f 4d 20 74 65 6d 70 5f 73 74 6f   * FROM temp_sto
5fc0: 72 65 5f 64 69 72 65 63 74 6f 72 79 5f 74 65 73  re_directory_tes
5fd0: 74 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  t;.        }.   
5fe0: 20 20 20 7d 20 7b 32 7d 0a 20 20 20 20 20 20 64     } {2}.      d
5ff0: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 39 2e  o_test pragma-9.
6000: 31 30 20 7b 0a 20 20 20 20 20 20 20 20 63 61 74  10 {.        cat
6010: 63 68 73 71 6c 20 22 0a 20 20 20 20 20 20 20 20  chsql ".        
6020: 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74    PRAGMA temp_st
6030: 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 3d 27 24  ore_directory='$
6040: 70 77 64 27 3b 0a 20 20 20 20 20 20 20 20 20 20  pwd';.          
6050: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 65  SELECT * FROM te
6060: 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f  mp_store_directo
6070: 72 79 5f 74 65 73 74 3b 0a 20 20 20 20 20 20 20  ry_test;.       
6080: 20 22 0a 20 20 20 20 20 20 7d 20 7b 31 20 7b 6e   ".      } {1 {n
6090: 6f 20 73 75 63 68 20 74 61 62 6c 65 3a 20 74 65  o such table: te
60a0: 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f  mp_store_directo
60b0: 72 79 5f 74 65 73 74 7d 7d 0a 20 20 20 20 7d 0a  ry_test}}.    }.
60c0: 20 20 7d 0a 7d 0a 64 6f 5f 74 65 73 74 20 70 72    }.}.do_test pr
60d0: 61 67 6d 61 2d 39 2e 31 31 20 7b 0a 20 20 65 78  agma-9.11 {.  ex
60e0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47  ecsql {.    PRAG
60f0: 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 20 3d 20  MA temp_store = 
6100: 30 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 74 65  0;.    PRAGMA te
6110: 6d 70 5f 73 74 6f 72 65 3b 0a 20 20 7d 0a 7d 20  mp_store;.  }.} 
6120: 7b 30 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67  {0}.do_test prag
6130: 6d 61 2d 39 2e 31 32 20 7b 0a 20 20 65 78 65 63  ma-9.12 {.  exec
6140: 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41  sql {.    PRAGMA
6150: 20 74 65 6d 70 5f 73 74 6f 72 65 20 3d 20 31 3b   temp_store = 1;
6160: 0a 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70  .    PRAGMA temp
6170: 5f 73 74 6f 72 65 3b 0a 20 20 7d 0a 7d 20 7b 31  _store;.  }.} {1
6180: 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  }.do_test pragma
6190: 2d 39 2e 31 33 20 7b 0a 20 20 65 78 65 63 73 71  -9.13 {.  execsq
61a0: 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 74  l {.    PRAGMA t
61b0: 65 6d 70 5f 73 74 6f 72 65 20 3d 20 32 3b 0a 20  emp_store = 2;. 
61c0: 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73     PRAGMA temp_s
61d0: 74 6f 72 65 3b 0a 20 20 7d 0a 7d 20 7b 32 7d 0a  tore;.  }.} {2}.
61e0: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 39  do_test pragma-9
61f0: 2e 31 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  .14 {.  execsql 
6200: 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d  {.    PRAGMA tem
6210: 70 5f 73 74 6f 72 65 20 3d 20 33 3b 0a 20 20 20  p_store = 3;.   
6220: 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f   PRAGMA temp_sto
6230: 72 65 3b 0a 20 20 7d 0a 7d 20 7b 30 7d 0a 64 6f  re;.  }.} {0}.do
6240: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 39 2e 31  _test pragma-9.1
6250: 35 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b  5 {.  catchsql {
6260: 0a 20 20 20 20 42 45 47 49 4e 20 45 58 43 4c 55  .    BEGIN EXCLU
6270: 53 49 56 45 3b 0a 20 20 20 20 43 52 45 41 54 45  SIVE;.    CREATE
6280: 20 54 45 4d 50 20 54 41 42 4c 45 20 74 65 6d 70   TEMP TABLE temp
6290: 5f 74 61 62 6c 65 28 74 29 3b 0a 20 20 20 20 49  _table(t);.    I
62a0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 65 6d 70 5f  NSERT INTO temp_
62b0: 74 61 62 6c 65 20 56 41 4c 55 45 53 28 27 76 61  table VALUES('va
62c0: 6c 75 61 62 6c 65 20 64 61 74 61 27 29 3b 0a 20  luable data');. 
62d0: 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73     PRAGMA temp_s
62e0: 74 6f 72 65 20 3d 20 31 3b 0a 20 20 7d 0a 7d 20  tore = 1;.  }.} 
62f0: 7b 31 20 7b 74 65 6d 70 6f 72 61 72 79 20 73 74  {1 {temporary st
6300: 6f 72 61 67 65 20 63 61 6e 6e 6f 74 20 62 65 20  orage cannot be 
6310: 63 68 61 6e 67 65 64 20 66 72 6f 6d 20 77 69 74  changed from wit
6320: 68 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f  hin a transactio
6330: 6e 7d 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67  n}}.do_test prag
6340: 6d 61 2d 39 2e 31 36 20 7b 0a 20 20 65 78 65 63  ma-9.16 {.  exec
6350: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
6360: 20 2a 20 46 52 4f 4d 20 74 65 6d 70 5f 74 61 62   * FROM temp_tab
6370: 6c 65 3b 0a 20 20 20 20 43 4f 4d 4d 49 54 3b 0a  le;.    COMMIT;.
6380: 20 20 7d 0a 7d 20 7b 7b 76 61 6c 75 61 62 6c 65    }.} {{valuable
6390: 20 64 61 74 61 7d 7d 0a 0a 64 6f 5f 74 65 73 74   data}}..do_test
63a0: 20 70 72 61 67 6d 61 2d 39 2e 31 37 20 7b 0a 20   pragma-9.17 {. 
63b0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 49   execsql {.    I
63c0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 65 6d 70 5f  NSERT INTO temp_
63d0: 74 61 62 6c 65 20 56 41 4c 55 45 53 28 27 76 61  table VALUES('va
63e0: 6c 75 61 62 6c 65 20 64 61 74 61 20 49 49 27 29  luable data II')
63f0: 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  ;.    SELECT * F
6400: 52 4f 4d 20 74 65 6d 70 5f 74 61 62 6c 65 3b 0a  ROM temp_table;.
6410: 20 20 7d 0a 7d 20 7b 7b 76 61 6c 75 61 62 6c 65    }.} {{valuable
6420: 20 64 61 74 61 7d 20 7b 76 61 6c 75 61 62 6c 65   data} {valuable
6430: 20 64 61 74 61 20 49 49 7d 7d 0a 0a 64 6f 5f 74   data II}}..do_t
6440: 65 73 74 20 70 72 61 67 6d 61 2d 39 2e 31 38 20  est pragma-9.18 
6450: 7b 0a 20 20 73 65 74 20 72 63 20 5b 63 61 74 63  {.  set rc [catc
6460: 68 20 7b 0a 20 20 20 20 64 62 20 65 76 61 6c 20  h {.    db eval 
6470: 7b 53 45 4c 45 43 54 20 74 20 46 52 4f 4d 20 74  {SELECT t FROM t
6480: 65 6d 70 5f 74 61 62 6c 65 7d 20 7b 0a 20 20 20  emp_table} {.   
6490: 20 20 20 65 78 65 63 73 71 6c 20 7b 70 72 61 67     execsql {prag
64a0: 6d 61 20 74 65 6d 70 5f 73 74 6f 72 65 20 3d 20  ma temp_store = 
64b0: 31 7d 0a 20 20 20 20 7d 0a 20 20 7d 20 6d 73 67  1}.    }.  } msg
64c0: 5d 0a 20 20 6c 69 73 74 20 24 72 63 20 24 6d 73  ].  list $rc $ms
64d0: 67 0a 7d 20 7b 31 20 7b 74 65 6d 70 6f 72 61 72  g.} {1 {temporar
64e0: 79 20 73 74 6f 72 61 67 65 20 63 61 6e 6e 6f 74  y storage cannot
64f0: 20 62 65 20 63 68 61 6e 67 65 64 20 66 72 6f 6d   be changed from
6500: 20 77 69 74 68 69 6e 20 61 20 74 72 61 6e 73 61   within a transa
6510: 63 74 69 6f 6e 7d 7d 0a 0a 7d 20 3b 23 20 69 66  ction}}..} ;# if
6520: 63 61 70 61 62 6c 65 20 70 61 67 65 72 5f 70 72  capable pager_pr
6530: 61 67 6d 61 73 0a 0a 69 66 63 61 70 61 62 6c 65  agmas..ifcapable
6540: 20 74 72 69 67 67 65 72 20 7b 0a 0a 64 6f 5f 74   trigger {..do_t
6550: 65 73 74 20 70 72 61 67 6d 61 2d 31 30 2e 30 20  est pragma-10.0 
6560: 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20  {.  catchsql {. 
6570: 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20 6d 61     DROP TABLE ma
6580: 69 6e 2e 74 31 3b 0a 20 20 7d 0a 20 20 65 78 65  in.t1;.  }.  exe
6590: 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d  csql {.    PRAGM
65a0: 41 20 63 6f 75 6e 74 5f 63 68 61 6e 67 65 73 20  A count_changes 
65b0: 3d 20 31 3b 0a 0a 20 20 20 20 43 52 45 41 54 45  = 1;..    CREATE
65c0: 20 54 41 42 4c 45 20 74 31 28 61 20 50 52 49 4d   TABLE t1(a PRIM
65d0: 41 52 59 20 4b 45 59 29 3b 0a 20 20 20 20 43 52  ARY KEY);.    CR
65e0: 45 41 54 45 20 54 41 42 4c 45 20 74 31 5f 6d 69  EATE TABLE t1_mi
65f0: 72 72 6f 72 28 61 29 3b 0a 20 20 20 20 43 52 45  rror(a);.    CRE
6600: 41 54 45 20 54 41 42 4c 45 20 74 31 5f 6d 69 72  ATE TABLE t1_mir
6610: 72 6f 72 32 28 61 29 3b 0a 20 20 20 20 43 52 45  ror2(a);.    CRE
6620: 41 54 45 20 54 52 49 47 47 45 52 20 74 31 5f 62  ATE TRIGGER t1_b
6630: 69 20 42 45 46 4f 52 45 20 49 4e 53 45 52 54 20  i BEFORE INSERT 
6640: 4f 4e 20 74 31 20 42 45 47 49 4e 20 0a 20 20 20  ON t1 BEGIN .   
6650: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
6660: 31 5f 6d 69 72 72 6f 72 20 56 41 4c 55 45 53 28  1_mirror VALUES(
6670: 6e 65 77 2e 61 29 3b 0a 20 20 20 20 45 4e 44 3b  new.a);.    END;
6680: 0a 20 20 20 20 43 52 45 41 54 45 20 54 52 49 47  .    CREATE TRIG
6690: 47 45 52 20 74 31 5f 61 69 20 41 46 54 45 52 20  GER t1_ai AFTER 
66a0: 49 4e 53 45 52 54 20 4f 4e 20 74 31 20 42 45 47  INSERT ON t1 BEG
66b0: 49 4e 20 0a 20 20 20 20 20 20 49 4e 53 45 52 54  IN .      INSERT
66c0: 20 49 4e 54 4f 20 74 31 5f 6d 69 72 72 6f 72 32   INTO t1_mirror2
66d0: 20 56 41 4c 55 45 53 28 6e 65 77 2e 61 29 3b 0a   VALUES(new.a);.
66e0: 20 20 20 20 45 4e 44 3b 0a 20 20 20 20 43 52 45      END;.    CRE
66f0: 41 54 45 20 54 52 49 47 47 45 52 20 74 31 5f 62  ATE TRIGGER t1_b
6700: 75 20 42 45 46 4f 52 45 20 55 50 44 41 54 45 20  u BEFORE UPDATE 
6710: 4f 4e 20 74 31 20 42 45 47 49 4e 20 0a 20 20 20  ON t1 BEGIN .   
6720: 20 20 20 55 50 44 41 54 45 20 74 31 5f 6d 69 72     UPDATE t1_mir
6730: 72 6f 72 20 53 45 54 20 61 20 3d 20 6e 65 77 2e  ror SET a = new.
6740: 61 20 57 48 45 52 45 20 61 20 3d 20 6f 6c 64 2e  a WHERE a = old.
6750: 61 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20 20 20  a;.    END;.    
6760: 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20 74  CREATE TRIGGER t
6770: 31 5f 61 75 20 41 46 54 45 52 20 55 50 44 41 54  1_au AFTER UPDAT
6780: 45 20 4f 4e 20 74 31 20 42 45 47 49 4e 20 0a 20  E ON t1 BEGIN . 
6790: 20 20 20 20 20 55 50 44 41 54 45 20 74 31 5f 6d       UPDATE t1_m
67a0: 69 72 72 6f 72 32 20 53 45 54 20 61 20 3d 20 6e  irror2 SET a = n
67b0: 65 77 2e 61 20 57 48 45 52 45 20 61 20 3d 20 6f  ew.a WHERE a = o
67c0: 6c 64 2e 61 3b 0a 20 20 20 20 45 4e 44 3b 0a 20  ld.a;.    END;. 
67d0: 20 20 20 43 52 45 41 54 45 20 54 52 49 47 47 45     CREATE TRIGGE
67e0: 52 20 74 31 5f 62 64 20 42 45 46 4f 52 45 20 44  R t1_bd BEFORE D
67f0: 45 4c 45 54 45 20 4f 4e 20 74 31 20 42 45 47 49  ELETE ON t1 BEGI
6800: 4e 20 0a 20 20 20 20 20 20 44 45 4c 45 54 45 20  N .      DELETE 
6810: 46 52 4f 4d 20 74 31 5f 6d 69 72 72 6f 72 20 57  FROM t1_mirror W
6820: 48 45 52 45 20 61 20 3d 20 6f 6c 64 2e 61 3b 0a  HERE a = old.a;.
6830: 20 20 20 20 45 4e 44 3b 0a 20 20 20 20 43 52 45      END;.    CRE
6840: 41 54 45 20 54 52 49 47 47 45 52 20 74 31 5f 61  ATE TRIGGER t1_a
6850: 64 20 41 46 54 45 52 20 44 45 4c 45 54 45 20 4f  d AFTER DELETE O
6860: 4e 20 74 31 20 42 45 47 49 4e 20 0a 20 20 20 20  N t1 BEGIN .    
6870: 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 31    DELETE FROM t1
6880: 5f 6d 69 72 72 6f 72 32 20 57 48 45 52 45 20 61  _mirror2 WHERE a
6890: 20 3d 20 6f 6c 64 2e 61 3b 0a 20 20 20 20 45 4e   = old.a;.    EN
68a0: 44 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a 64 6f 5f  D;.  }.} {}..do_
68b0: 74 65 73 74 20 70 72 61 67 6d 61 2d 31 30 2e 31  test pragma-10.1
68c0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
68d0: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
68e0: 31 20 56 41 4c 55 45 53 28 72 61 6e 64 73 74 72  1 VALUES(randstr
68f0: 28 31 30 2c 31 30 29 29 3b 0a 20 20 7d 0a 7d 20  (10,10));.  }.} 
6900: 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67  {1}.do_test prag
6910: 6d 61 2d 31 30 2e 32 20 7b 0a 20 20 65 78 65 63  ma-10.2 {.  exec
6920: 73 71 6c 20 7b 0a 20 20 20 20 55 50 44 41 54 45  sql {.    UPDATE
6930: 20 74 31 20 53 45 54 20 61 20 3d 20 72 61 6e 64   t1 SET a = rand
6940: 73 74 72 28 31 30 2c 31 30 29 3b 0a 20 20 7d 0a  str(10,10);.  }.
6950: 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 70 72  } {1}.do_test pr
6960: 61 67 6d 61 2d 31 30 2e 33 20 7b 0a 20 20 65 78  agma-10.3 {.  ex
6970: 65 63 73 71 6c 20 7b 0a 20 20 20 20 44 45 4c 45  ecsql {.    DELE
6980: 54 45 20 46 52 4f 4d 20 74 31 3b 0a 20 20 7d 0a  TE FROM t1;.  }.
6990: 7d 20 7b 31 7d 0a 0a 7d 20 3b 23 20 69 66 63 61  } {1}..} ;# ifca
69a0: 70 61 62 6c 65 20 74 72 69 67 67 65 72 0a 0a 69  pable trigger..i
69b0: 66 63 61 70 61 62 6c 65 20 73 63 68 65 6d 61 5f  fcapable schema_
69c0: 70 72 61 67 6d 61 73 20 7b 0a 20 20 64 6f 5f 74  pragmas {.  do_t
69d0: 65 73 74 20 70 72 61 67 6d 61 2d 31 31 2e 31 20  est pragma-11.1 
69e0: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 32 20 7b  {.    execsql2 {
69f0: 0a 20 20 20 20 20 20 70 72 61 67 6d 61 20 63 6f  .      pragma co
6a00: 6c 6c 61 74 69 6f 6e 5f 6c 69 73 74 3b 0a 20 20  llation_list;.  
6a10: 20 20 7d 0a 20 20 7d 20 7b 73 65 71 20 30 20 6e    }.  } {seq 0 n
6a20: 61 6d 65 20 4e 4f 43 41 53 45 20 73 65 71 20 31  ame NOCASE seq 1
6a30: 20 6e 61 6d 65 20 52 54 52 49 4d 20 73 65 71 20   name RTRIM seq 
6a40: 32 20 6e 61 6d 65 20 42 49 4e 41 52 59 7d 0a 20  2 name BINARY}. 
6a50: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
6a60: 31 31 2e 32 20 7b 0a 20 20 20 20 64 62 20 63 6f  11.2 {.    db co
6a70: 6c 6c 61 74 65 20 4e 65 77 5f 43 6f 6c 6c 61 74  llate New_Collat
6a80: 69 6f 6e 20 62 6c 61 68 2e 2e 2e 0a 20 20 20 20  ion blah....    
6a90: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
6aa0: 70 72 61 67 6d 61 20 63 6f 6c 6c 61 74 69 6f 6e  pragma collation
6ab0: 5f 6c 69 73 74 3b 0a 20 20 20 20 7d 0a 20 20 7d  _list;.    }.  }
6ac0: 20 7b 30 20 4e 65 77 5f 43 6f 6c 6c 61 74 69 6f   {0 New_Collatio
6ad0: 6e 20 31 20 4e 4f 43 41 53 45 20 32 20 52 54 52  n 1 NOCASE 2 RTR
6ae0: 49 4d 20 33 20 42 49 4e 41 52 59 7d 0a 7d 0a 0a  IM 3 BINARY}.}..
6af0: 69 66 63 61 70 61 62 6c 65 20 73 63 68 65 6d 61  ifcapable schema
6b00: 5f 70 72 61 67 6d 61 73 26 26 74 65 6d 70 64 62  _pragmas&&tempdb
6b10: 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61   {.  do_test pra
6b20: 67 6d 61 2d 31 32 2e 31 20 7b 0a 20 20 20 20 73  gma-12.1 {.    s
6b30: 71 6c 69 74 65 33 20 64 62 32 20 74 65 73 74 2e  qlite3 db2 test.
6b40: 64 62 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b  db.    execsql {
6b50: 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 74 65  .      PRAGMA te
6b60: 6d 70 2e 74 61 62 6c 65 5f 69 6e 66 6f 28 27 61  mp.table_info('a
6b70: 62 63 27 29 3b 0a 20 20 20 20 7d 20 64 62 32 0a  bc');.    } db2.
6b80: 20 20 7d 20 7b 7d 0a 20 20 64 62 32 20 63 6c 6f    } {}.  db2 clo
6b90: 73 65 0a 0a 20 20 64 6f 5f 74 65 73 74 20 70 72  se..  do_test pr
6ba0: 61 67 6d 61 2d 31 32 2e 32 20 7b 0a 20 20 20 20  agma-12.2 {.    
6bb0: 73 71 6c 69 74 65 33 20 64 62 32 20 74 65 73 74  sqlite3 db2 test
6bc0: 2e 64 62 0a 20 20 20 20 65 78 65 63 73 71 6c 20  .db.    execsql 
6bd0: 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 74  {.      PRAGMA t
6be0: 65 6d 70 2e 64 65 66 61 75 6c 74 5f 63 61 63 68  emp.default_cach
6bf0: 65 5f 73 69 7a 65 20 3d 20 32 30 30 3b 0a 20 20  e_size = 200;.  
6c00: 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 2e      PRAGMA temp.
6c10: 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69  default_cache_si
6c20: 7a 65 3b 0a 20 20 20 20 7d 20 64 62 32 0a 20 20  ze;.    } db2.  
6c30: 7d 20 7b 32 30 30 7d 0a 20 20 64 62 32 20 63 6c  } {200}.  db2 cl
6c40: 6f 73 65 0a 0a 20 20 64 6f 5f 74 65 73 74 20 70  ose..  do_test p
6c50: 72 61 67 6d 61 2d 31 32 2e 33 20 7b 0a 20 20 20  ragma-12.3 {.   
6c60: 20 73 71 6c 69 74 65 33 20 64 62 32 20 74 65 73   sqlite3 db2 tes
6c70: 74 2e 64 62 0a 20 20 20 20 65 78 65 63 73 71 6c  t.db.    execsql
6c80: 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20   {.      PRAGMA 
6c90: 74 65 6d 70 2e 63 61 63 68 65 5f 73 69 7a 65 20  temp.cache_size 
6ca0: 3d 20 34 30 30 3b 0a 20 20 20 20 20 20 50 52 41  = 400;.      PRA
6cb0: 47 4d 41 20 74 65 6d 70 2e 63 61 63 68 65 5f 73  GMA temp.cache_s
6cc0: 69 7a 65 3b 0a 20 20 20 20 7d 20 64 62 32 0a 20  ize;.    } db2. 
6cd0: 20 7d 20 7b 34 30 30 7d 0a 20 20 64 62 32 20 63   } {400}.  db2 c
6ce0: 6c 6f 73 65 0a 7d 0a 0a 69 66 63 61 70 61 62 6c  lose.}..ifcapabl
6cf0: 65 20 62 6c 6f 62 6c 69 74 20 7b 0a 0a 64 6f 5f  e bloblit {..do_
6d00: 74 65 73 74 20 70 72 61 67 6d 61 2d 31 33 2e 31  test pragma-13.1
6d10: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
6d20: 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20 49 46     DROP TABLE IF
6d30: 20 45 58 49 53 54 53 20 74 34 3b 0a 20 20 20 20   EXISTS t4;.    
6d40: 50 52 41 47 4d 41 20 76 64 62 65 5f 74 72 61 63  PRAGMA vdbe_trac
6d50: 65 3d 6f 6e 3b 0a 20 20 20 20 50 52 41 47 4d 41  e=on;.    PRAGMA
6d60: 20 76 64 62 65 5f 6c 69 73 74 69 6e 67 3d 6f 6e   vdbe_listing=on
6d70: 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 73 71 6c  ;.    PRAGMA sql
6d80: 5f 74 72 61 63 65 3d 6f 6e 3b 0a 20 20 20 20 43  _trace=on;.    C
6d90: 52 45 41 54 45 20 54 41 42 4c 45 20 74 34 28 61  REATE TABLE t4(a
6da0: 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59   INTEGER PRIMARY
6db0: 20 4b 45 59 2c 62 29 3b 0a 20 20 20 20 49 4e 53   KEY,b);.    INS
6dc0: 45 52 54 20 49 4e 54 4f 20 74 34 28 62 29 20 56  ERT INTO t4(b) V
6dd0: 41 4c 55 45 53 28 78 27 30 31 32 33 34 35 36 37  ALUES(x'01234567
6de0: 38 39 61 62 63 64 65 66 30 31 32 33 34 35 36 37  89abcdef01234567
6df0: 38 39 61 62 63 64 65 66 30 31 32 33 34 35 36 37  89abcdef01234567
6e00: 38 39 27 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  89');.    INSERT
6e10: 20 49 4e 54 4f 20 74 34 28 62 29 20 56 41 4c 55   INTO t4(b) VALU
6e20: 45 53 28 72 61 6e 64 73 74 72 28 33 30 2c 33 30  ES(randstr(30,30
6e30: 29 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  ));.    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 31 2e 32 33 34 35 36 29 3b 0a 20 20 20 20 49  (1.23456);.    I
6e60: 4e 53 45 52 54 20 49 4e 54 4f 20 74 34 28 62 29  NSERT INTO t4(b)
6e70: 20 56 41 4c 55 45 53 28 4e 55 4c 4c 29 3b 0a 20   VALUES(NULL);. 
6e80: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
6e90: 34 28 62 29 20 56 41 4c 55 45 53 28 30 29 3b 0a  4(b) VALUES(0);.
6ea0: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
6eb0: 74 34 28 62 29 20 53 45 4c 45 43 54 20 62 7c 7c  t4(b) SELECT b||
6ec0: 62 7c 7c 62 7c 7c 62 20 46 52 4f 4d 20 74 34 3b  b||b||b FROM t4;
6ed0: 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52  .    SELECT * FR
6ee0: 4f 4d 20 74 34 3b 0a 20 20 7d 0a 20 20 65 78 65  OM t4;.  }.  exe
6ef0: 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d  csql {.    PRAGM
6f00: 41 20 76 64 62 65 5f 74 72 61 63 65 3d 6f 66 66  A vdbe_trace=off
6f10: 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 76 64 62  ;.    PRAGMA vdb
6f20: 65 5f 6c 69 73 74 69 6e 67 3d 6f 66 66 3b 0a 20  e_listing=off;. 
6f30: 20 20 20 50 52 41 47 4d 41 20 73 71 6c 5f 74 72     PRAGMA sql_tr
6f40: 61 63 65 3d 6f 66 66 3b 0a 20 20 7d 0a 7d 20 7b  ace=off;.  }.} {
6f50: 7d 0a 0a 7d 20 3b 23 20 69 66 63 61 70 61 62 6c  }..} ;# ifcapabl
6f60: 65 20 62 6c 6f 62 6c 69 74 20 0a 0a 69 66 63 61  e bloblit ..ifca
6f70: 70 61 62 6c 65 20 70 61 67 65 72 5f 70 72 61 67  pable pager_prag
6f80: 6d 61 73 20 7b 0a 20 20 64 62 20 63 6c 6f 73 65  mas {.  db close
6f90: 0a 20 20 66 6f 72 63 65 64 65 6c 65 74 65 20 74  .  forcedelete t
6fa0: 65 73 74 2e 64 62 0a 20 20 73 71 6c 69 74 65 33  est.db.  sqlite3
6fb0: 20 64 62 20 74 65 73 74 2e 64 62 0a 0a 20 20 64   db test.db..  d
6fc0: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 34  o_test pragma-14
6fd0: 2e 31 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  .1 {.    execsql
6fe0: 20 7b 20 70 72 61 67 6d 61 20 61 75 74 6f 5f 76   { pragma auto_v
6ff0: 61 63 75 75 6d 20 3d 20 30 20 7d 0a 20 20 20 20  acuum = 0 }.    
7000: 65 78 65 63 73 71 6c 20 7b 20 70 72 61 67 6d 61  execsql { pragma
7010: 20 70 61 67 65 5f 63 6f 75 6e 74 20 7d 0a 20 20   page_count }.  
7020: 7d 20 7b 30 7d 0a 0a 20 20 64 6f 5f 74 65 73 74  } {0}..  do_test
7030: 20 70 72 61 67 6d 61 2d 31 34 2e 32 20 7b 0a 20   pragma-14.2 {. 
7040: 20 20 20 65 78 65 63 73 71 6c 20 7b 20 0a 20 20     execsql { .  
7050: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
7060: 20 61 62 63 28 61 2c 20 62 2c 20 63 29 3b 0a 20   abc(a, b, c);. 
7070: 20 20 20 20 20 50 52 41 47 4d 41 20 70 61 67 65       PRAGMA page
7080: 5f 63 6f 75 6e 74 3b 0a 20 20 20 20 7d 0a 20 20  _count;.    }.  
7090: 7d 20 7b 32 7d 0a 20 20 64 6f 5f 74 65 73 74 20  } {2}.  do_test 
70a0: 70 72 61 67 6d 61 2d 31 34 2e 32 75 63 20 7b 0a  pragma-14.2uc {.
70b0: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 70 72 61      execsql {pra
70c0: 67 6d 61 20 50 41 47 45 5f 43 4f 55 4e 54 7d 0a  gma PAGE_COUNT}.
70d0: 20 20 7d 20 7b 32 7d 0a 0a 20 20 64 6f 5f 74 65    } {2}..  do_te
70e0: 73 74 20 70 72 61 67 6d 61 2d 31 34 2e 33 20 7b  st pragma-14.3 {
70f0: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 20 0a  .    execsql { .
7100: 20 20 20 20 20 20 42 45 47 49 4e 3b 0a 20 20 20        BEGIN;.   
7110: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
7120: 64 65 66 28 61 2c 20 62 2c 20 63 29 3b 0a 20 20  def(a, b, c);.  
7130: 20 20 20 20 50 52 41 47 4d 41 20 70 61 67 65 5f      PRAGMA page_
7140: 63 6f 75 6e 74 3b 0a 20 20 20 20 7d 0a 20 20 7d  count;.    }.  }
7150: 20 7b 33 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70   {3}.  do_test p
7160: 72 61 67 6d 61 2d 31 34 2e 33 75 63 20 7b 0a 20  ragma-14.3uc {. 
7170: 20 20 20 65 78 65 63 73 71 6c 20 7b 70 72 61 67     execsql {prag
7180: 6d 61 20 50 41 47 45 5f 43 4f 55 4e 54 7d 0a 20  ma PAGE_COUNT}. 
7190: 20 7d 20 7b 33 7d 0a 0a 20 20 64 6f 5f 74 65 73   } {3}..  do_tes
71a0: 74 20 70 72 61 67 6d 61 2d 31 34 2e 34 20 7b 0a  t pragma-14.4 {.
71b0: 20 20 20 20 73 65 74 20 70 61 67 65 5f 73 69 7a      set page_siz
71c0: 65 20 5b 64 62 20 6f 6e 65 20 7b 70 72 61 67 6d  e [db one {pragm
71d0: 61 20 70 61 67 65 5f 73 69 7a 65 7d 5d 0a 20 20  a page_size}].  
71e0: 20 20 65 78 70 72 20 5b 66 69 6c 65 20 73 69 7a    expr [file siz
71f0: 65 20 74 65 73 74 2e 64 62 5d 20 2f 20 24 70 61  e test.db] / $pa
7200: 67 65 5f 73 69 7a 65 0a 20 20 7d 20 7b 32 7d 0a  ge_size.  } {2}.
7210: 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .  do_test pragm
7220: 61 2d 31 34 2e 35 20 7b 0a 20 20 20 20 65 78 65  a-14.5 {.    exe
7230: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 52 4f 4c  csql {.      ROL
7240: 4c 42 41 43 4b 3b 0a 20 20 20 20 20 20 50 52 41  LBACK;.      PRA
7250: 47 4d 41 20 70 61 67 65 5f 63 6f 75 6e 74 3b 0a  GMA page_count;.
7260: 20 20 20 20 7d 0a 20 20 7d 20 7b 32 7d 0a 0a 20      }.  } {2}.. 
7270: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
7280: 31 34 2e 36 20 7b 0a 20 20 20 20 66 6f 72 63 65  14.6 {.    force
7290: 64 65 6c 65 74 65 20 74 65 73 74 32 2e 64 62 0a  delete test2.db.
72a0: 20 20 20 20 73 71 6c 69 74 65 33 20 64 62 32 20      sqlite3 db2 
72b0: 74 65 73 74 32 2e 64 62 0a 20 20 20 20 65 78 65  test2.db.    exe
72c0: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41  csql {.      PRA
72d0: 47 4d 41 20 61 75 74 6f 5f 76 61 63 75 75 6d 20  GMA auto_vacuum 
72e0: 3d 20 30 3b 0a 20 20 20 20 20 20 43 52 45 41 54  = 0;.      CREAT
72f0: 45 20 54 41 42 4c 45 20 74 31 28 61 2c 20 62 2c  E TABLE t1(a, b,
7300: 20 63 29 3b 0a 20 20 20 20 20 20 43 52 45 41 54   c);.      CREAT
7310: 45 20 54 41 42 4c 45 20 74 32 28 61 2c 20 62 2c  E TABLE t2(a, b,
7320: 20 63 29 3b 0a 20 20 20 20 20 20 43 52 45 41 54   c);.      CREAT
7330: 45 20 54 41 42 4c 45 20 74 33 28 61 2c 20 62 2c  E TABLE t3(a, b,
7340: 20 63 29 3b 0a 20 20 20 20 20 20 43 52 45 41 54   c);.      CREAT
7350: 45 20 54 41 42 4c 45 20 74 34 28 61 2c 20 62 2c  E TABLE t4(a, b,
7360: 20 63 29 3b 0a 20 20 20 20 7d 20 64 62 32 0a 20   c);.    } db2. 
7370: 20 20 20 64 62 32 20 63 6c 6f 73 65 0a 20 20 20     db2 close.   
7380: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20   execsql {.     
7390: 20 41 54 54 41 43 48 20 27 74 65 73 74 32 2e 64   ATTACH 'test2.d
73a0: 62 27 20 41 53 20 61 75 78 3b 0a 20 20 20 20 20  b' AS aux;.     
73b0: 20 50 52 41 47 4d 41 20 61 75 78 2e 70 61 67 65   PRAGMA aux.page
73c0: 5f 63 6f 75 6e 74 3b 0a 20 20 20 20 7d 20 0a 20  _count;.    } . 
73d0: 20 7d 20 7b 35 7d 0a 20 20 64 6f 5f 74 65 73 74   } {5}.  do_test
73e0: 20 70 72 61 67 6d 61 2d 31 34 2e 36 75 63 20 7b   pragma-14.6uc {
73f0: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 70 72  .    execsql {pr
7400: 61 67 6d 61 20 41 55 58 2e 50 41 47 45 5f 43 4f  agma AUX.PAGE_CO
7410: 55 4e 54 7d 0a 20 20 7d 20 7b 35 7d 0a 7d 0a 0a  UNT}.  } {5}.}..
7420: 23 20 54 65 73 74 20 74 68 61 74 20 74 68 65 20  # Test that the 
7430: 76 61 6c 75 65 20 73 65 74 20 75 73 69 6e 67 20  value set using 
7440: 74 68 65 20 63 61 63 68 65 5f 73 69 7a 65 20 70  the cache_size p
7450: 72 61 67 6d 61 20 69 73 20 6e 6f 74 20 72 65 73  ragma is not res
7460: 65 74 20 77 68 65 6e 20 74 68 65 0a 23 20 73 63  et when the.# sc
7470: 68 65 6d 61 20 69 73 20 72 65 6c 6f 61 64 65 64  hema is reloaded
7480: 2e 0a 23 0a 69 66 63 61 70 61 62 6c 65 20 70 61  ..#.ifcapable pa
7490: 67 65 72 5f 70 72 61 67 6d 61 73 20 7b 0a 20 20  ger_pragmas {.  
74a0: 64 62 20 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74  db close.  sqlit
74b0: 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20  e3 db test.db.  
74c0: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31  do_test pragma-1
74d0: 35 2e 31 20 7b 0a 20 20 20 20 65 78 65 63 73 71  5.1 {.    execsq
74e0: 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41  l {.      PRAGMA
74f0: 20 63 61 63 68 65 5f 73 69 7a 65 3d 35 39 3b 0a   cache_size=59;.
7500: 20 20 20 20 20 20 50 52 41 47 4d 41 20 63 61 63        PRAGMA cac
7510: 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 7d 0a 20  he_size;.    }. 
7520: 20 7d 20 7b 35 39 7d 0a 20 20 64 6f 5f 74 65 73   } {59}.  do_tes
7530: 74 20 70 72 61 67 6d 61 2d 31 35 2e 32 20 7b 0a  t pragma-15.2 {.
7540: 20 20 20 20 73 71 6c 69 74 65 33 20 64 62 32 20      sqlite3 db2 
7550: 74 65 73 74 2e 64 62 0a 20 20 20 20 65 78 65 63  test.db.    exec
7560: 73 71 6c 20 7b 0a 20 20 20 20 20 20 43 52 45 41  sql {.      CREA
7570: 54 45 20 54 41 42 4c 45 20 6e 65 77 74 61 62 6c  TE TABLE newtabl
7580: 65 28 61 2c 20 62 2c 20 63 29 3b 0a 20 20 20 20  e(a, b, c);.    
7590: 7d 20 64 62 32 0a 20 20 20 20 64 62 32 20 63 6c  } db2.    db2 cl
75a0: 6f 73 65 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f  ose.  } {}.  do_
75b0: 74 65 73 74 20 70 72 61 67 6d 61 2d 31 35 2e 33  test pragma-15.3
75c0: 20 7b 0a 20 20 20 20 23 20 45 76 61 6c 75 61 74   {.    # Evaluat
75d0: 69 6e 67 20 74 68 69 73 20 73 74 61 74 65 6d 65  ing this stateme
75e0: 6e 74 20 77 69 6c 6c 20 63 61 75 73 65 20 74 68  nt will cause th
75f0: 65 20 73 63 68 65 6d 61 20 74 6f 20 62 65 20 72  e schema to be r
7600: 65 6c 6f 61 64 65 64 20 28 62 65 63 61 75 73 65  eloaded (because
7610: 0a 20 20 20 20 23 20 74 68 65 20 73 63 68 65 6d  .    # the schem
7620: 61 20 77 61 73 20 63 68 61 6e 67 65 64 20 62 79  a was changed by
7630: 20 61 6e 6f 74 68 65 72 20 63 6f 6e 6e 65 63 74   another connect
7640: 69 6f 6e 20 69 6e 20 70 72 61 67 6d 61 2d 31 35  ion in pragma-15
7650: 2e 32 29 2e 20 41 74 20 6f 6e 65 0a 20 20 20 20  .2). At one.    
7660: 23 20 70 6f 69 6e 74 20 74 68 65 72 65 20 77 61  # point there wa
7670: 73 20 61 20 62 75 67 20 74 68 61 74 20 72 65 73  s a bug that res
7680: 65 74 20 74 68 65 20 63 61 63 68 65 5f 73 69 7a  et the cache_siz
7690: 65 20 74 6f 20 69 74 73 20 64 65 66 61 75 6c 74  e to its default
76a0: 20 76 61 6c 75 65 0a 20 20 20 20 23 20 77 68 65   value.    # whe
76b0: 6e 20 74 68 69 73 20 68 61 70 70 65 6e 65 64 2e  n this happened.
76c0: 20 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 20   .    execsql { 
76d0: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 73 71  SELECT * FROM sq
76e0: 6c 69 74 65 5f 6d 61 73 74 65 72 20 7d 0a 20 20  lite_master }.  
76f0: 20 20 65 78 65 63 73 71 6c 20 7b 20 50 52 41 47    execsql { PRAG
7700: 4d 41 20 63 61 63 68 65 5f 73 69 7a 65 20 7d 0a  MA cache_size }.
7710: 20 20 7d 20 7b 35 39 7d 0a 7d 0a 0a 23 20 52 65    } {59}.}..# Re
7720: 73 65 74 20 74 68 65 20 73 71 6c 69 74 65 33 5f  set the sqlite3_
7730: 74 65 6d 70 5f 64 69 72 65 63 74 6f 72 79 20 76  temp_directory v
7740: 61 72 69 61 62 6c 65 20 66 6f 72 20 74 68 65 20  ariable for the 
7750: 6e 65 78 74 20 72 75 6e 20 6f 66 20 74 65 73 74  next run of test
7760: 73 3a 0a 73 71 6c 69 74 65 33 20 64 62 58 20 3a  s:.sqlite3 dbX :
7770: 6d 65 6d 6f 72 79 3a 0a 64 62 58 20 65 76 61 6c  memory:.dbX eval
7780: 20 7b 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74   {PRAGMA temp_st
7790: 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 20 3d 20  ore_directory = 
77a0: 22 22 7d 0a 64 62 58 20 63 6c 6f 73 65 0a 0a 69  ""}.dbX close..i
77b0: 66 63 61 70 61 62 6c 65 20 6c 6f 63 6b 5f 70 72  fcapable lock_pr
77c0: 6f 78 79 5f 70 72 61 67 6d 61 73 26 26 70 72 65  oxy_pragmas&&pre
77d0: 66 65 72 5f 70 72 6f 78 79 5f 6c 6f 63 6b 69 6e  fer_proxy_lockin
77e0: 67 20 7b 0a 20 20 73 65 74 20 73 71 6c 69 74 65  g {.  set sqlite
77f0: 5f 68 6f 73 74 69 64 5f 6e 75 6d 20 31 0a 0a 20  _hostid_num 1.. 
7800: 20 73 65 74 20 75 73 69 6e 67 5f 70 72 6f 78 79   set using_proxy
7810: 20 30 0a 20 20 66 6f 72 65 61 63 68 20 7b 6e 61   0.  foreach {na
7820: 6d 65 20 76 61 6c 75 65 7d 20 5b 61 72 72 61 79  me value} [array
7830: 20 67 65 74 20 65 6e 76 20 53 51 4c 49 54 45 5f   get env SQLITE_
7840: 46 4f 52 43 45 5f 50 52 4f 58 59 5f 4c 4f 43 4b  FORCE_PROXY_LOCK
7850: 49 4e 47 5d 20 7b 0a 20 20 20 20 73 65 74 20 75  ING] {.    set u
7860: 73 69 6e 67 5f 70 72 6f 78 79 20 24 76 61 6c 75  sing_proxy $valu
7870: 65 0a 20 20 7d 0a 0a 20 20 23 20 54 65 73 74 20  e.  }..  # Test 
7880: 74 68 65 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66  the lock_proxy_f
7890: 69 6c 65 20 70 72 61 67 6d 61 73 2e 0a 20 20 23  ile pragmas..  #
78a0: 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 73 65  .  db close.  se
78b0: 74 20 65 6e 76 28 53 51 4c 49 54 45 5f 46 4f 52  t env(SQLITE_FOR
78c0: 43 45 5f 50 52 4f 58 59 5f 4c 4f 43 4b 49 4e 47  CE_PROXY_LOCKING
78d0: 29 20 22 30 22 0a 0a 20 20 73 71 6c 69 74 65 33  ) "0"..  sqlite3
78e0: 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20 64 6f   db test.db.  do
78f0: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 36 2e  _test pragma-16.
7900: 31 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  1 {.    execsql 
7910: 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 6c  {.      PRAGMA l
7920: 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 3d 22  ock_proxy_file="
7930: 6d 79 6c 69 74 74 6c 65 70 72 6f 78 79 22 3b 0a  mylittleproxy";.
7940: 20 20 20 20 20 20 73 65 6c 65 63 74 20 2a 20 66        select * f
7950: 72 6f 6d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  rom sqlite_maste
7960: 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20 65 78 65  r;.    }.    exe
7970: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41  csql {.      PRA
7980: 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66  GMA lock_proxy_f
7990: 69 6c 65 3b 0a 20 20 20 20 7d 20 0a 20 20 7d 20  ile;.    } .  } 
79a0: 7b 6d 79 6c 69 74 74 6c 65 70 72 6f 78 79 7d 0a  {mylittleproxy}.
79b0: 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .  do_test pragm
79c0: 61 2d 31 36 2e 32 20 7b 0a 20 20 20 20 73 71 6c  a-16.2 {.    sql
79d0: 69 74 65 33 20 64 62 32 20 74 65 73 74 2e 64 62  ite3 db2 test.db
79e0: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
79f0: 20 20 20 20 20 50 52 41 47 4d 41 20 6c 6f 63 6b       PRAGMA lock
7a00: 5f 70 72 6f 78 79 5f 66 69 6c 65 3d 22 6d 79 6c  _proxy_file="myl
7a10: 69 74 74 6c 65 70 72 6f 78 79 22 3b 0a 20 20 20  ittleproxy";.   
7a20: 20 7d 20 64 62 32 0a 20 20 7d 20 7b 7d 0a 0a 20   } db2.  } {}.. 
7a30: 20 64 62 32 20 63 6c 6f 73 65 0a 20 20 64 6f 5f   db2 close.  do_
7a40: 74 65 73 74 20 70 72 61 67 6d 61 2d 31 36 2e 32  test pragma-16.2
7a50: 2e 31 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  .1 {.    sqlite3
7a60: 20 64 62 32 20 74 65 73 74 2e 64 62 0a 20 20 20   db2 test.db.   
7a70: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20   execsql {.     
7a80: 20 50 52 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f   PRAGMA lock_pro
7a90: 78 79 5f 66 69 6c 65 3d 22 3a 61 75 74 6f 3a 22  xy_file=":auto:"
7aa0: 3b 0a 20 20 20 20 20 20 73 65 6c 65 63 74 20 2a  ;.      select *
7ab0: 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f 6d 61 73   from sqlite_mas
7ac0: 74 65 72 3b 0a 20 20 20 20 7d 20 64 62 32 0a 20  ter;.    } db2. 
7ad0: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
7ae0: 20 20 20 50 52 41 47 4d 41 20 6c 6f 63 6b 5f 70     PRAGMA lock_p
7af0: 72 6f 78 79 5f 66 69 6c 65 3b 0a 20 20 20 20 7d  roxy_file;.    }
7b00: 20 64 62 32 0a 20 20 7d 20 7b 6d 79 6c 69 74 74   db2.  } {mylitt
7b10: 6c 65 70 72 6f 78 79 7d 0a 0a 20 20 64 62 32 20  leproxy}..  db2 
7b20: 63 6c 6f 73 65 0a 20 20 64 6f 5f 74 65 73 74 20  close.  do_test 
7b30: 70 72 61 67 6d 61 2d 31 36 2e 33 20 7b 0a 20 20  pragma-16.3 {.  
7b40: 20 20 73 71 6c 69 74 65 33 20 64 62 32 20 74 65    sqlite3 db2 te
7b50: 73 74 2e 64 62 0a 20 20 20 20 65 78 65 63 73 71  st.db.    execsq
7b60: 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41  l {.      PRAGMA
7b70: 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65   lock_proxy_file
7b80: 3d 22 6d 79 6f 74 68 65 72 70 72 6f 78 79 22 3b  ="myotherproxy";
7b90: 0a 20 20 20 20 7d 20 64 62 32 0a 20 20 20 20 63  .    } db2.    c
7ba0: 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 20 20  atchsql {.      
7bb0: 73 65 6c 65 63 74 20 2a 20 66 72 6f 6d 20 73 71  select * from sq
7bc0: 6c 69 74 65 5f 6d 61 73 74 65 72 3b 0a 20 20 20  lite_master;.   
7bd0: 20 7d 20 64 62 32 0a 20 20 7d 20 7b 31 20 7b 64   } db2.  } {1 {d
7be0: 61 74 61 62 61 73 65 20 69 73 20 6c 6f 63 6b 65  atabase is locke
7bf0: 64 7d 7d 0a 0a 20 20 64 6f 5f 74 65 73 74 20 70  d}}..  do_test p
7c00: 72 61 67 6d 61 2d 31 36 2e 34 20 7b 0a 20 20 20  ragma-16.4 {.   
7c10: 20 64 62 32 20 63 6c 6f 73 65 0a 20 20 20 20 64   db2 close.    d
7c20: 62 20 63 6c 6f 73 65 0a 20 20 20 20 73 71 6c 69  b close.    sqli
7c30: 74 65 33 20 64 62 32 20 74 65 73 74 2e 64 62 0a  te3 db2 test.db.
7c40: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20      execsql {.  
7c50: 20 20 20 20 50 52 41 47 4d 41 20 6c 6f 63 6b 5f      PRAGMA lock_
7c60: 70 72 6f 78 79 5f 66 69 6c 65 3d 22 6d 79 6f 72  proxy_file="myor
7c70: 69 67 69 6e 61 6c 70 72 6f 78 79 22 3b 0a 20 20  iginalproxy";.  
7c80: 20 20 20 20 50 52 41 47 4d 41 20 6c 6f 63 6b 5f      PRAGMA lock_
7c90: 70 72 6f 78 79 5f 66 69 6c 65 3d 22 6d 79 6f 74  proxy_file="myot
7ca0: 68 65 72 70 72 6f 78 79 22 3b 0a 20 20 20 20 20  herproxy";.     
7cb0: 20 50 52 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f   PRAGMA lock_pro
7cc0: 78 79 5f 66 69 6c 65 3b 0a 20 20 20 20 7d 20 64  xy_file;.    } d
7cd0: 62 32 0a 20 20 7d 20 7b 6d 79 6f 74 68 65 72 70  b2.  } {myotherp
7ce0: 72 6f 78 79 7d 0a 0a 20 20 64 62 32 20 63 6c 6f  roxy}..  db2 clo
7cf0: 73 65 0a 20 20 73 65 74 20 65 6e 76 28 53 51 4c  se.  set env(SQL
7d00: 49 54 45 5f 46 4f 52 43 45 5f 50 52 4f 58 59 5f  ITE_FORCE_PROXY_
7d10: 4c 4f 43 4b 49 4e 47 29 20 22 31 22 0a 20 20 64  LOCKING) "1".  d
7d20: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 36  o_test pragma-16
7d30: 2e 35 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  .5 {.    sqlite3
7d40: 20 64 62 32 20 74 65 73 74 2e 64 62 0a 20 20 20   db2 test.db.   
7d50: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20   execsql {.     
7d60: 20 50 52 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f   PRAGMA lock_pro
7d70: 78 79 5f 66 69 6c 65 3d 22 3a 61 75 74 6f 3a 22  xy_file=":auto:"
7d80: 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 6c  ;.      PRAGMA l
7d90: 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 3b 0a  ock_proxy_file;.
7da0: 20 20 20 20 7d 20 64 62 32 0a 20 20 7d 20 7b 6d      } db2.  } {m
7db0: 79 6f 74 68 65 72 70 72 6f 78 79 7d 0a 20 20 0a  yotherproxy}.  .
7dc0: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
7dd0: 2d 31 36 2e 36 20 7b 0a 20 20 20 20 64 62 32 20  -16.6 {.    db2 
7de0: 63 6c 6f 73 65 0a 20 20 20 20 73 71 6c 69 74 65  close.    sqlite
7df0: 33 20 64 62 32 20 74 65 73 74 32 2e 64 62 0a 20  3 db2 test2.db. 
7e00: 20 20 20 73 65 74 20 6c 6f 63 6b 70 61 74 68 20     set lockpath 
7e10: 5b 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20  [execsql {.     
7e20: 20 50 52 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f   PRAGMA lock_pro
7e30: 78 79 5f 66 69 6c 65 3d 22 3a 61 75 74 6f 3a 22  xy_file=":auto:"
7e40: 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 6c  ;.      PRAGMA l
7e50: 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 3b 0a  ock_proxy_file;.
7e60: 20 20 20 20 7d 20 64 62 32 5d 0a 20 20 20 20 73      } db2].    s
7e70: 74 72 69 6e 67 20 6d 61 74 63 68 20 22 2a 74 65  tring match "*te
7e80: 73 74 32 2e 64 62 3a 61 75 74 6f 3a 22 20 24 6c  st2.db:auto:" $l
7e90: 6f 63 6b 70 61 74 68 0a 20 20 7d 20 7b 31 7d 0a  ockpath.  } {1}.
7ea0: 20 20 0a 20 20 73 65 74 20 73 71 6c 69 74 65 5f    .  set sqlite_
7eb0: 68 6f 73 74 69 64 5f 6e 75 6d 20 32 0a 20 20 64  hostid_num 2.  d
7ec0: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 36  o_test pragma-16
7ed0: 2e 37 20 7b 0a 20 20 20 20 6c 69 73 74 20 5b 63  .7 {.    list [c
7ee0: 61 74 63 68 20 7b 0a 20 20 20 20 20 20 73 71 6c  atch {.      sql
7ef0: 69 74 65 33 20 64 62 20 74 65 73 74 32 2e 64 62  ite3 db test2.db
7f00: 0a 20 20 20 20 20 20 65 78 65 63 73 71 6c 20 7b  .      execsql {
7f10: 20 0a 20 20 20 20 20 20 20 20 50 52 41 47 4d 41   .        PRAGMA
7f20: 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65   lock_proxy_file
7f30: 3d 22 3a 61 75 74 6f 3a 22 3b 0a 20 20 20 20 20  =":auto:";.     
7f40: 20 20 20 73 65 6c 65 63 74 20 2a 20 66 72 6f 6d     select * from
7f50: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 3b 0a   sqlite_master;.
7f60: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 20 6d 73        }.    } ms
7f70: 67 5d 20 24 6d 73 67 0a 20 20 7d 20 7b 31 20 7b  g] $msg.  } {1 {
7f80: 64 61 74 61 62 61 73 65 20 69 73 20 6c 6f 63 6b  database is lock
7f90: 65 64 7d 7d 0a 20 20 64 62 20 63 6c 6f 73 65 0a  ed}}.  db close.
7fa0: 20 20 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61    .  do_test pra
7fb0: 67 6d 61 2d 31 36 2e 38 20 7b 0a 20 20 20 20 6c  gma-16.8 {.    l
7fc0: 69 73 74 20 5b 63 61 74 63 68 20 7b 0a 20 20 20  ist [catch {.   
7fd0: 20 20 20 73 71 6c 69 74 65 33 20 64 62 20 74 65     sqlite3 db te
7fe0: 73 74 32 2e 64 62 0a 20 20 20 20 20 20 65 78 65  st2.db.      exe
7ff0: 63 73 71 6c 20 7b 20 73 65 6c 65 63 74 20 2a 20  csql { select * 
8000: 66 72 6f 6d 20 73 71 6c 69 74 65 5f 6d 61 73 74  from sqlite_mast
8010: 65 72 20 7d 20 0a 20 20 20 20 7d 20 6d 73 67 5d  er } .    } msg]
8020: 20 24 6d 73 67 0a 20 20 7d 20 7b 31 20 7b 64 61   $msg.  } {1 {da
8030: 74 61 62 61 73 65 20 69 73 20 6c 6f 63 6b 65 64  tabase is locked
8040: 7d 7d 0a 0a 20 20 64 62 32 20 63 6c 6f 73 65 0a  }}..  db2 close.
8050: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
8060: 2d 31 36 2e 38 2e 31 20 7b 0a 20 20 20 20 65 78  -16.8.1 {.    ex
8070: 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52  ecsql {.      PR
8080: 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f  AGMA lock_proxy_
8090: 66 69 6c 65 3d 22 79 65 74 61 6e 6f 74 68 65 72  file="yetanother
80a0: 70 72 6f 78 79 22 3b 0a 20 20 20 20 20 20 50 52  proxy";.      PR
80b0: 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f  AGMA lock_proxy_
80c0: 66 69 6c 65 3b 0a 20 20 20 20 7d 20 0a 20 20 7d  file;.    } .  }
80d0: 20 7b 79 65 74 61 6e 6f 74 68 65 72 70 72 6f 78   {yetanotherprox
80e0: 79 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61  y}.  do_test pra
80f0: 67 6d 61 2d 31 36 2e 38 2e 32 20 7b 0a 20 20 20  gma-16.8.2 {.   
8100: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20   execsql {.     
8110: 20 63 72 65 61 74 65 20 74 61 62 6c 65 20 6d 69   create table mi
8120: 6e 65 28 78 29 3b 0a 20 20 20 20 7d 20 0a 20 20  ne(x);.    } .  
8130: 7d 20 7b 7d 0a 0a 20 20 64 62 20 63 6c 6f 73 65  } {}..  db close
8140: 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .  do_test pragm
8150: 61 2d 31 36 2e 39 20 7b 0a 20 20 20 20 73 71 6c  a-16.9 {.    sql
8160: 69 74 65 33 20 64 62 20 70 72 6f 78 79 74 65 73  ite3 db proxytes
8170: 74 2e 64 62 0a 20 20 20 20 73 65 74 20 6c 6f 63  t.db.    set loc
8180: 6b 70 61 74 68 32 20 5b 65 78 65 63 73 71 6c 20  kpath2 [execsql 
8190: 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 6c  {.      PRAGMA l
81a0: 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 3d 22  ock_proxy_file="
81b0: 3a 61 75 74 6f 3a 22 3b 0a 20 20 20 20 20 20 50  :auto:";.      P
81c0: 52 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78 79  RAGMA lock_proxy
81d0: 5f 66 69 6c 65 3b 0a 20 20 20 20 7d 20 64 62 5d  _file;.    } db]
81e0: 0a 20 20 20 20 73 74 72 69 6e 67 20 6d 61 74 63  .    string matc
81f0: 68 20 22 2a 70 72 6f 78 79 74 65 73 74 2e 64 62  h "*proxytest.db
8200: 3a 61 75 74 6f 3a 22 20 24 6c 6f 63 6b 70 61 74  :auto:" $lockpat
8210: 68 32 0a 20 20 7d 20 7b 31 7d 0a 0a 20 20 73 65  h2.  } {1}..  se
8220: 74 20 65 6e 76 28 53 51 4c 49 54 45 5f 46 4f 52  t env(SQLITE_FOR
8230: 43 45 5f 50 52 4f 58 59 5f 4c 4f 43 4b 49 4e 47  CE_PROXY_LOCKING
8240: 29 20 24 75 73 69 6e 67 5f 70 72 6f 78 79 0a 20  ) $using_proxy. 
8250: 20 73 65 74 20 73 71 6c 69 74 65 5f 68 6f 73 74   set sqlite_host
8260: 69 64 5f 6e 75 6d 20 30 0a 7d 0a 0a 23 20 50 61  id_num 0.}..# Pa
8270: 72 73 69 6e 67 20 6f 66 20 61 75 74 6f 5f 76 61  rsing of auto_va
8280: 63 75 75 6d 20 73 65 74 74 69 6e 67 73 2e 0a 23  cuum settings..#
8290: 0a 66 6f 72 65 61 63 68 20 7b 61 75 74 6f 76 61  .foreach {autova
82a0: 63 5f 73 65 74 74 69 6e 67 20 76 61 6c 7d 20 7b  c_setting val} {
82b0: 0a 20 20 30 20 30 0a 20 20 31 20 31 0a 20 20 32  .  0 0.  1 1.  2
82c0: 20 32 0a 20 20 33 20 30 0a 20 20 2d 31 20 30 0a   2.  3 0.  -1 0.
82d0: 20 20 6e 6f 6e 65 20 30 0a 20 20 4e 4f 4e 45 20    none 0.  NONE 
82e0: 30 0a 20 20 4e 6f 4e 65 20 30 0a 20 20 66 75 6c  0.  NoNe 0.  ful
82f0: 6c 20 31 0a 20 20 46 55 4c 4c 20 31 0a 20 20 69  l 1.  FULL 1.  i
8300: 6e 63 72 65 6d 65 6e 74 61 6c 20 32 0a 20 20 49  ncremental 2.  I
8310: 4e 43 52 45 4d 45 4e 54 41 4c 20 32 0a 20 20 2d  NCREMENTAL 2.  -
8320: 31 32 33 34 20 30 0a 20 20 31 32 33 34 20 30 0a  1234 0.  1234 0.
8330: 7d 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 70 72  } {.  do_test pr
8340: 61 67 6d 61 2d 31 37 2e 31 2e 24 61 75 74 6f 76  agma-17.1.$autov
8350: 61 63 5f 73 65 74 74 69 6e 67 20 7b 0a 20 20 20  ac_setting {.   
8360: 20 63 61 74 63 68 20 7b 64 62 20 63 6c 6f 73 65   catch {db close
8370: 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 20 64 62  }.    sqlite3 db
8380: 20 3a 6d 65 6d 6f 72 79 3a 0a 20 20 20 20 65 78   :memory:.    ex
8390: 65 63 73 71 6c 20 22 0a 20 20 20 20 20 20 50 52  ecsql ".      PR
83a0: 41 47 4d 41 20 61 75 74 6f 5f 76 61 63 75 75 6d  AGMA auto_vacuum
83b0: 3d 24 3a 3a 61 75 74 6f 76 61 63 5f 73 65 74 74  =$::autovac_sett
83c0: 69 6e 67 3b 0a 20 20 20 20 20 20 50 52 41 47 4d  ing;.      PRAGM
83d0: 41 20 61 75 74 6f 5f 76 61 63 75 75 6d 3b 0a 20  A auto_vacuum;. 
83e0: 20 20 20 22 0a 20 20 7d 20 24 76 61 6c 0a 7d 0a     ".  } $val.}.
83f0: 0a 23 20 50 61 72 73 69 6e 67 20 6f 66 20 74 65  .# Parsing of te
8400: 6d 70 5f 73 74 6f 72 65 20 73 65 74 74 69 6e 67  mp_store setting
8410: 73 2e 0a 23 0a 66 6f 72 65 61 63 68 20 7b 74 65  s..#.foreach {te
8420: 6d 70 5f 73 65 74 74 69 6e 67 20 76 61 6c 7d 20  mp_setting val} 
8430: 7b 0a 20 20 30 20 30 0a 20 20 31 20 31 0a 20 20  {.  0 0.  1 1.  
8440: 32 20 32 0a 20 20 33 20 30 0a 20 20 2d 31 20 30  2 2.  3 0.  -1 0
8450: 0a 20 20 66 69 6c 65 20 31 0a 20 20 46 49 4c 45  .  file 1.  FILE
8460: 20 31 0a 20 20 66 49 6c 45 20 31 0a 20 20 6d 65   1.  fIlE 1.  me
8470: 6d 6f 72 79 20 32 0a 20 20 4d 45 4d 4f 52 59 20  mory 2.  MEMORY 
8480: 32 0a 20 20 4d 65 4d 6f 52 79 20 32 0a 7d 20 7b  2.  MeMoRy 2.} {
8490: 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .  do_test pragm
84a0: 61 2d 31 38 2e 31 2e 24 74 65 6d 70 5f 73 65 74  a-18.1.$temp_set
84b0: 74 69 6e 67 20 7b 0a 20 20 20 20 63 61 74 63 68  ting {.    catch
84c0: 20 7b 64 62 20 63 6c 6f 73 65 7d 0a 20 20 20 20   {db close}.    
84d0: 73 71 6c 69 74 65 33 20 64 62 20 3a 6d 65 6d 6f  sqlite3 db :memo
84e0: 72 79 3a 0a 20 20 20 20 65 78 65 63 73 71 6c 20  ry:.    execsql 
84f0: 22 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 74  ".      PRAGMA t
8500: 65 6d 70 5f 73 74 6f 72 65 3d 24 3a 3a 74 65 6d  emp_store=$::tem
8510: 70 5f 73 65 74 74 69 6e 67 3b 0a 20 20 20 20 20  p_setting;.     
8520: 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f   PRAGMA temp_sto
8530: 72 65 3d 24 3a 3a 74 65 6d 70 5f 73 65 74 74 69  re=$::temp_setti
8540: 6e 67 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41  ng;.      PRAGMA
8550: 20 74 65 6d 70 5f 73 74 6f 72 65 3b 0a 20 20 20   temp_store;.   
8560: 20 22 0a 20 20 7d 20 24 76 61 6c 0a 7d 0a 0a 23   ".  } $val.}..#
8570: 20 54 68 65 20 53 51 4c 49 54 45 5f 46 43 4e 54   The SQLITE_FCNT
8580: 4c 5f 50 52 41 47 4d 41 20 6c 6f 67 69 63 2c 20  L_PRAGMA logic, 
8590: 77 69 74 68 20 65 72 72 6f 72 20 68 61 6e 64 6c  with error handl
85a0: 69 6e 67 2e 0a 23 0a 64 62 20 63 6c 6f 73 65 0a  ing..#.db close.
85b0: 74 65 73 74 76 66 73 20 74 76 66 73 0a 73 71 6c  testvfs tvfs.sql
85c0: 69 74 65 33 20 64 62 20 74 65 73 74 2e 64 62 20  ite3 db test.db 
85d0: 2d 76 66 73 20 74 76 66 73 0a 64 6f 5f 74 65 73  -vfs tvfs.do_tes
85e0: 74 20 70 72 61 67 6d 61 2d 31 39 2e 31 20 7b 0a  t pragma-19.1 {.
85f0: 20 20 63 61 74 63 68 73 71 6c 20 7b 50 52 41 47    catchsql {PRAG
8600: 4d 41 20 65 72 72 6f 72 7d 0a 7d 20 7b 31 20 7b  MA error}.} {1 {
8610: 53 51 4c 20 6c 6f 67 69 63 20 65 72 72 6f 72 20  SQL logic error 
8620: 6f 72 20 6d 69 73 73 69 6e 67 20 64 61 74 61 62  or missing datab
8630: 61 73 65 7d 7d 0a 64 6f 5f 74 65 73 74 20 70 72  ase}}.do_test pr
8640: 61 67 6d 61 2d 31 39 2e 32 20 7b 0a 20 20 63 61  agma-19.2 {.  ca
8650: 74 63 68 73 71 6c 20 7b 50 52 41 47 4d 41 20 65  tchsql {PRAGMA e
8660: 72 72 6f 72 3d 27 54 68 69 73 20 69 73 20 74 68  rror='This is th
8670: 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 27  e error message'
8680: 7d 0a 7d 20 7b 31 20 7b 54 68 69 73 20 69 73 20  }.} {1 {This is 
8690: 74 68 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67  the error messag
86a0: 65 7d 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67  e}}.do_test prag
86b0: 6d 61 2d 31 39 2e 33 20 7b 0a 20 20 63 61 74 63  ma-19.3 {.  catc
86c0: 68 73 71 6c 20 7b 50 52 41 47 4d 41 20 65 72 72  hsql {PRAGMA err
86d0: 6f 72 3d 27 37 20 54 68 69 73 20 69 73 20 74 68  or='7 This is th
86e0: 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 27  e error message'
86f0: 7d 0a 7d 20 7b 31 20 7b 54 68 69 73 20 69 73 20  }.} {1 {This is 
8700: 74 68 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67  the error messag
8710: 65 7d 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67  e}}.do_test prag
8720: 6d 61 2d 31 39 2e 34 20 7b 0a 20 20 63 61 74 63  ma-19.4 {.  catc
8730: 68 73 71 6c 20 7b 50 52 41 47 4d 41 20 65 72 72  hsql {PRAGMA err
8740: 6f 72 3d 37 7d 0a 7d 20 7b 31 20 7b 6f 75 74 20  or=7}.} {1 {out 
8750: 6f 66 20 6d 65 6d 6f 72 79 7d 7d 0a 64 6f 5f 74  of memory}}.do_t
8760: 65 73 74 20 70 72 61 67 6d 61 2d 31 39 2e 35 20  est pragma-19.5 
8770: 7b 0a 20 20 66 69 6c 65 20 74 61 69 6c 20 5b 6c  {.  file tail [l
8780: 69 6e 64 65 78 20 5b 65 78 65 63 73 71 6c 20 7b  index [execsql {
8790: 50 52 41 47 4d 41 20 66 69 6c 65 6e 61 6d 65 7d  PRAGMA filename}
87a0: 5d 20 30 5d 0a 7d 20 7b 74 65 73 74 2e 64 62 7d  ] 0].} {test.db}
87b0: 0a 0a 0a 66 69 6e 69 73 68 5f 74 65 73 74 0a     ...finish_test.