/ Hex Artifact Content
Login

Artifact fdfc09067ea104a0c247a1a79d8093b56656f850:


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 66 69 6c 65 20 64 65 6c 65 74 65  lose.file delete
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 66 69 6c 65 20 64 65  -journal.file de
0750: 6c 65 74 65 20 74 65 73 74 33 2e 64 62 20 74 65  lete test3.db te
0760: 73 74 33 2e 64 62 2d 6a 6f 75 72 6e 61 6c 0a 73  st3.db-journal.s
0770: 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64  qlite3 db test.d
0780: 62 3b 20 73 65 74 20 44 42 20 5b 73 71 6c 69 74  b; set DB [sqlit
0790: 65 33 5f 63 6f 6e 6e 65 63 74 69 6f 6e 5f 70 6f  e3_connection_po
07a0: 69 6e 74 65 72 20 64 62 5d 0a 0a 0a 69 66 63 61  inter db]...ifca
07b0: 70 61 62 6c 65 20 70 61 67 65 72 5f 70 72 61 67  pable pager_prag
07c0: 6d 61 73 20 7b 0a 73 65 74 20 44 46 4c 54 5f 43  mas {.set DFLT_C
07d0: 41 43 48 45 5f 53 5a 20 5b 64 62 20 6f 6e 65 20  ACHE_SZ [db one 
07e0: 7b 50 52 41 47 4d 41 20 64 65 66 61 75 6c 74 5f  {PRAGMA default_
07f0: 63 61 63 68 65 5f 73 69 7a 65 7d 5d 0a 73 65 74  cache_size}].set
0800: 20 54 45 4d 50 5f 43 41 43 48 45 5f 53 5a 20 5b   TEMP_CACHE_SZ [
0810: 64 62 20 6f 6e 65 20 7b 50 52 41 47 4d 41 20 74  db one {PRAGMA t
0820: 65 6d 70 2e 64 65 66 61 75 6c 74 5f 63 61 63 68  emp.default_cach
0830: 65 5f 73 69 7a 65 7d 5d 0a 64 6f 5f 74 65 73 74  e_size}].do_test
0840: 20 70 72 61 67 6d 61 2d 31 2e 31 20 7b 0a 20 20   pragma-1.1 {.  
0850: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52  execsql {.    PR
0860: 41 47 4d 41 20 63 61 63 68 65 5f 73 69 7a 65 3b  AGMA cache_size;
0870: 0a 20 20 20 20 50 52 41 47 4d 41 20 64 65 66 61  .    PRAGMA defa
0880: 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65 3b 0a  ult_cache_size;.
0890: 20 20 20 20 50 52 41 47 4d 41 20 73 79 6e 63 68      PRAGMA synch
08a0: 72 6f 6e 6f 75 73 3b 0a 20 20 7d 0a 7d 20 5b 6c  ronous;.  }.} [l
08b0: 69 73 74 20 24 44 46 4c 54 5f 43 41 43 48 45 5f  ist $DFLT_CACHE_
08c0: 53 5a 20 24 44 46 4c 54 5f 43 41 43 48 45 5f 53  SZ $DFLT_CACHE_S
08d0: 5a 20 32 5d 0a 64 6f 5f 74 65 73 74 20 70 72 61  Z 2].do_test pra
08e0: 67 6d 61 2d 31 2e 32 20 7b 0a 20 20 65 78 65 63  gma-1.2 {.  exec
08f0: 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41  sql {.    PRAGMA
0900: 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3d 4f 46 46   synchronous=OFF
0910: 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 63 61 63  ;.    PRAGMA cac
0920: 68 65 5f 73 69 7a 65 3d 31 32 33 34 3b 0a 20 20  he_size=1234;.  
0930: 20 20 50 52 41 47 4d 41 20 63 61 63 68 65 5f 73    PRAGMA cache_s
0940: 69 7a 65 3b 0a 20 20 20 20 50 52 41 47 4d 41 20  ize;.    PRAGMA 
0950: 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69  default_cache_si
0960: 7a 65 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 73  ze;.    PRAGMA s
0970: 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20 20 7d 0a  ynchronous;.  }.
0980: 7d 20 5b 6c 69 73 74 20 31 32 33 34 20 24 44 46  } [list 1234 $DF
0990: 4c 54 5f 43 41 43 48 45 5f 53 5a 20 30 5d 0a 64  LT_CACHE_SZ 0].d
09a0: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 2e  o_test pragma-1.
09b0: 33 20 7b 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20  3 {.  db close. 
09c0: 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74   sqlite3 db test
09d0: 2e 64 62 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  .db.  execsql {.
09e0: 20 20 20 20 50 52 41 47 4d 41 20 63 61 63 68 65      PRAGMA cache
09f0: 5f 73 69 7a 65 3b 0a 20 20 20 20 50 52 41 47 4d  _size;.    PRAGM
0a00: 41 20 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f  A default_cache_
0a10: 73 69 7a 65 3b 0a 20 20 20 20 50 52 41 47 4d 41  size;.    PRAGMA
0a20: 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20 20   synchronous;.  
0a30: 7d 0a 7d 20 5b 6c 69 73 74 20 24 44 46 4c 54 5f  }.} [list $DFLT_
0a40: 43 41 43 48 45 5f 53 5a 20 24 44 46 4c 54 5f 43  CACHE_SZ $DFLT_C
0a50: 41 43 48 45 5f 53 5a 20 32 5d 0a 64 6f 5f 74 65  ACHE_SZ 2].do_te
0a60: 73 74 20 70 72 61 67 6d 61 2d 31 2e 34 20 7b 0a  st pragma-1.4 {.
0a70: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
0a80: 50 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f  PRAGMA synchrono
0a90: 75 73 3d 4f 46 46 3b 0a 20 20 20 20 50 52 41 47  us=OFF;.    PRAG
0aa0: 4d 41 20 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20  MA cache_size;. 
0ab0: 20 20 20 50 52 41 47 4d 41 20 64 65 66 61 75 6c     PRAGMA defaul
0ac0: 74 5f 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20  t_cache_size;.  
0ad0: 20 20 50 52 41 47 4d 41 20 73 79 6e 63 68 72 6f    PRAGMA synchro
0ae0: 6e 6f 75 73 3b 0a 20 20 7d 0a 7d 20 5b 6c 69 73  nous;.  }.} [lis
0af0: 74 20 24 44 46 4c 54 5f 43 41 43 48 45 5f 53 5a  t $DFLT_CACHE_SZ
0b00: 20 24 44 46 4c 54 5f 43 41 43 48 45 5f 53 5a 20   $DFLT_CACHE_SZ 
0b10: 30 5d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  0].do_test pragm
0b20: 61 2d 31 2e 35 20 7b 0a 20 20 65 78 65 63 73 71  a-1.5 {.  execsq
0b30: 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 63  l {.    PRAGMA c
0b40: 61 63 68 65 5f 73 69 7a 65 3d 2d 34 33 32 31 3b  ache_size=-4321;
0b50: 0a 20 20 20 20 50 52 41 47 4d 41 20 63 61 63 68  .    PRAGMA cach
0b60: 65 5f 73 69 7a 65 3b 0a 20 20 20 20 50 52 41 47  e_size;.    PRAG
0b70: 4d 41 20 64 65 66 61 75 6c 74 5f 63 61 63 68 65  MA default_cache
0b80: 5f 73 69 7a 65 3b 0a 20 20 20 20 50 52 41 47 4d  _size;.    PRAGM
0b90: 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20  A synchronous;. 
0ba0: 20 7d 0a 7d 20 5b 6c 69 73 74 20 34 33 32 31 20   }.} [list 4321 
0bb0: 24 44 46 4c 54 5f 43 41 43 48 45 5f 53 5a 20 30  $DFLT_CACHE_SZ 0
0bc0: 5d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  ].do_test pragma
0bd0: 2d 31 2e 36 20 7b 0a 20 20 65 78 65 63 73 71 6c  -1.6 {.  execsql
0be0: 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 73 79   {.    PRAGMA sy
0bf0: 6e 63 68 72 6f 6e 6f 75 73 3d 4f 4e 3b 0a 20 20  nchronous=ON;.  
0c00: 20 20 50 52 41 47 4d 41 20 63 61 63 68 65 5f 73    PRAGMA cache_s
0c10: 69 7a 65 3b 0a 20 20 20 20 50 52 41 47 4d 41 20  ize;.    PRAGMA 
0c20: 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69  default_cache_si
0c30: 7a 65 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 73  ze;.    PRAGMA s
0c40: 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20 20 7d 0a  ynchronous;.  }.
0c50: 7d 20 5b 6c 69 73 74 20 34 33 32 31 20 24 44 46  } [list 4321 $DF
0c60: 4c 54 5f 43 41 43 48 45 5f 53 5a 20 31 5d 0a 64  LT_CACHE_SZ 1].d
0c70: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 2e  o_test pragma-1.
0c80: 37 20 7b 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20  7 {.  db close. 
0c90: 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74   sqlite3 db test
0ca0: 2e 64 62 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  .db.  execsql {.
0cb0: 20 20 20 20 50 52 41 47 4d 41 20 63 61 63 68 65      PRAGMA cache
0cc0: 5f 73 69 7a 65 3b 0a 20 20 20 20 50 52 41 47 4d  _size;.    PRAGM
0cd0: 41 20 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f  A default_cache_
0ce0: 73 69 7a 65 3b 0a 20 20 20 20 50 52 41 47 4d 41  size;.    PRAGMA
0cf0: 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20 20   synchronous;.  
0d00: 7d 0a 7d 20 5b 6c 69 73 74 20 24 44 46 4c 54 5f  }.} [list $DFLT_
0d10: 43 41 43 48 45 5f 53 5a 20 24 44 46 4c 54 5f 43  CACHE_SZ $DFLT_C
0d20: 41 43 48 45 5f 53 5a 20 32 5d 0a 64 6f 5f 74 65  ACHE_SZ 2].do_te
0d30: 73 74 20 70 72 61 67 6d 61 2d 31 2e 38 20 7b 0a  st pragma-1.8 {.
0d40: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
0d50: 50 52 41 47 4d 41 20 64 65 66 61 75 6c 74 5f 63  PRAGMA default_c
0d60: 61 63 68 65 5f 73 69 7a 65 3d 2d 31 32 33 3b 0a  ache_size=-123;.
0d70: 20 20 20 20 50 52 41 47 4d 41 20 63 61 63 68 65      PRAGMA cache
0d80: 5f 73 69 7a 65 3b 0a 20 20 20 20 50 52 41 47 4d  _size;.    PRAGM
0d90: 41 20 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f  A default_cache_
0da0: 73 69 7a 65 3b 0a 20 20 20 20 50 52 41 47 4d 41  size;.    PRAGMA
0db0: 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20 20   synchronous;.  
0dc0: 7d 0a 7d 20 7b 31 32 33 20 31 32 33 20 32 7d 0a  }.} {123 123 2}.
0dd0: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31  do_test pragma-1
0de0: 2e 39 2e 31 20 7b 0a 20 20 64 62 20 63 6c 6f 73  .9.1 {.  db clos
0df0: 65 0a 20 20 73 71 6c 69 74 65 33 20 64 62 20 74  e.  sqlite3 db t
0e00: 65 73 74 2e 64 62 3b 20 73 65 74 20 3a 3a 44 42  est.db; set ::DB
0e10: 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6e 6e 65 63   [sqlite3_connec
0e20: 74 69 6f 6e 5f 70 6f 69 6e 74 65 72 20 64 62 5d  tion_pointer db]
0e30: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
0e40: 20 50 52 41 47 4d 41 20 63 61 63 68 65 5f 73 69   PRAGMA cache_si
0e50: 7a 65 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 64  ze;.    PRAGMA d
0e60: 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a  efault_cache_siz
0e70: 65 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 73 79  e;.    PRAGMA sy
0e80: 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20 20 7d 0a 7d  nchronous;.  }.}
0e90: 20 7b 31 32 33 20 31 32 33 20 32 7d 0a 69 66 63   {123 123 2}.ifc
0ea0: 61 70 61 62 6c 65 20 76 61 63 75 75 6d 20 7b 0a  apable vacuum {.
0eb0: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
0ec0: 2d 31 2e 39 2e 32 20 7b 0a 20 20 20 20 65 78 65  -1.9.2 {.    exe
0ed0: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 56 41 43  csql {.      VAC
0ee0: 55 55 4d 3b 0a 20 20 20 20 20 20 50 52 41 47 4d  UUM;.      PRAGM
0ef0: 41 20 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20  A cache_size;.  
0f00: 20 20 20 20 50 52 41 47 4d 41 20 64 65 66 61 75      PRAGMA defau
0f10: 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20  lt_cache_size;. 
0f20: 20 20 20 20 20 50 52 41 47 4d 41 20 73 79 6e 63       PRAGMA sync
0f30: 68 72 6f 6e 6f 75 73 3b 0a 20 20 20 20 7d 0a 20  hronous;.    }. 
0f40: 20 7d 20 7b 31 32 33 20 31 32 33 20 32 7d 0a 7d   } {123 123 2}.}
0f50: 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d  .do_test pragma-
0f60: 31 2e 31 30 20 7b 0a 20 20 65 78 65 63 73 71 6c  1.10 {.  execsql
0f70: 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 73 79   {.    PRAGMA sy
0f80: 6e 63 68 72 6f 6e 6f 75 73 3d 4e 4f 52 4d 41 4c  nchronous=NORMAL
0f90: 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 63 61 63  ;.    PRAGMA cac
0fa0: 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 50 52 41  he_size;.    PRA
0fb0: 47 4d 41 20 64 65 66 61 75 6c 74 5f 63 61 63 68  GMA default_cach
0fc0: 65 5f 73 69 7a 65 3b 0a 20 20 20 20 50 52 41 47  e_size;.    PRAG
0fd0: 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a  MA synchronous;.
0fe0: 20 20 7d 0a 7d 20 7b 31 32 33 20 31 32 33 20 31    }.} {123 123 1
0ff0: 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  }.do_test pragma
1000: 2d 31 2e 31 31 20 7b 0a 20 20 65 78 65 63 73 71  -1.11 {.  execsq
1010: 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 73  l {.    PRAGMA s
1020: 79 6e 63 68 72 6f 6e 6f 75 73 3d 46 55 4c 4c 3b  ynchronous=FULL;
1030: 0a 20 20 20 20 50 52 41 47 4d 41 20 63 61 63 68  .    PRAGMA cach
1040: 65 5f 73 69 7a 65 3b 0a 20 20 20 20 50 52 41 47  e_size;.    PRAG
1050: 4d 41 20 64 65 66 61 75 6c 74 5f 63 61 63 68 65  MA default_cache
1060: 5f 73 69 7a 65 3b 0a 20 20 20 20 50 52 41 47 4d  _size;.    PRAGM
1070: 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20  A synchronous;. 
1080: 20 7d 0a 7d 20 7b 31 32 33 20 31 32 33 20 32 7d   }.} {123 123 2}
1090: 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d  .do_test pragma-
10a0: 31 2e 31 32 20 7b 0a 20 20 64 62 20 63 6c 6f 73  1.12 {.  db clos
10b0: 65 0a 20 20 73 71 6c 69 74 65 33 20 64 62 20 74  e.  sqlite3 db t
10c0: 65 73 74 2e 64 62 3b 20 73 65 74 20 3a 3a 44 42  est.db; set ::DB
10d0: 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6e 6e 65 63   [sqlite3_connec
10e0: 74 69 6f 6e 5f 70 6f 69 6e 74 65 72 20 64 62 5d  tion_pointer db]
10f0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
1100: 20 50 52 41 47 4d 41 20 63 61 63 68 65 5f 73 69   PRAGMA cache_si
1110: 7a 65 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 64  ze;.    PRAGMA d
1120: 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a  efault_cache_siz
1130: 65 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 73 79  e;.    PRAGMA sy
1140: 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20 20 7d 0a 7d  nchronous;.  }.}
1150: 20 7b 31 32 33 20 31 32 33 20 32 7d 0a 0a 23 20   {123 123 2}..# 
1160: 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20 70 72  Make sure the pr
1170: 61 67 6d 61 20 68 61 6e 64 6c 65 72 20 75 6e 64  agma handler und
1180: 65 72 73 74 61 6e 64 73 20 6e 75 6d 65 72 69 63  erstands numeric
1190: 20 76 61 6c 75 65 73 20 69 6e 20 61 64 64 69 74   values in addit
11a0: 69 6f 6e 0a 23 20 74 6f 20 6b 65 79 77 6f 72 64  ion.# to keyword
11b0: 73 20 6c 69 6b 65 20 22 6f 66 66 22 20 61 6e 64  s like "off" and
11c0: 20 22 66 75 6c 6c 22 2e 0a 23 0a 64 6f 5f 74 65   "full"..#.do_te
11d0: 73 74 20 70 72 61 67 6d 61 2d 31 2e 31 33 20 7b  st pragma-1.13 {
11e0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
11f0: 20 50 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e   PRAGMA synchron
1200: 6f 75 73 3d 30 3b 0a 20 20 20 20 50 52 41 47 4d  ous=0;.    PRAGM
1210: 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20  A synchronous;. 
1220: 20 7d 0a 7d 20 7b 30 7d 0a 64 6f 5f 74 65 73 74   }.} {0}.do_test
1230: 20 70 72 61 67 6d 61 2d 31 2e 31 34 20 7b 0a 20   pragma-1.14 {. 
1240: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50   execsql {.    P
1250: 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75  RAGMA synchronou
1260: 73 3d 32 3b 0a 20 20 20 20 50 52 41 47 4d 41 20  s=2;.    PRAGMA 
1270: 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20 20 7d  synchronous;.  }
1280: 0a 7d 20 7b 32 7d 0a 7d 20 3b 23 20 69 66 63 61  .} {2}.} ;# ifca
1290: 70 61 62 6c 65 20 70 61 67 65 72 5f 70 72 61 67  pable pager_prag
12a0: 6d 61 73 0a 0a 23 20 54 65 73 74 20 74 75 72 6e  mas..# Test turn
12b0: 69 6e 67 20 22 66 6c 61 67 22 20 70 72 61 67 6d  ing "flag" pragm
12c0: 61 73 20 6f 6e 20 61 6e 64 20 6f 66 66 2e 0a 23  as on and off..#
12d0: 0a 69 66 63 61 70 61 62 6c 65 20 64 65 62 75 67  .ifcapable debug
12e0: 20 7b 0a 20 20 23 20 50 72 61 67 6d 61 20 22 76   {.  # Pragma "v
12f0: 64 62 65 5f 6c 69 73 74 69 6e 67 22 20 69 73 20  dbe_listing" is 
1300: 6f 6e 6c 79 20 61 76 61 69 6c 61 62 6c 65 20 69  only available i
1310: 66 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20  f compiled with 
1320: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 23  SQLITE_DEBUG.  #
1330: 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .  do_test pragm
1340: 61 2d 31 2e 31 35 20 7b 0a 20 20 20 20 65 78 65  a-1.15 {.    exe
1350: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41  csql {.      PRA
1360: 47 4d 41 20 76 64 62 65 5f 6c 69 73 74 69 6e 67  GMA vdbe_listing
1370: 3d 59 45 53 3b 0a 20 20 20 20 20 20 50 52 41 47  =YES;.      PRAG
1380: 4d 41 20 76 64 62 65 5f 6c 69 73 74 69 6e 67 3b  MA vdbe_listing;
1390: 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 31 7d 0a 20  .    }.  } {1}. 
13a0: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
13b0: 31 2e 31 36 20 7b 0a 20 20 20 20 65 78 65 63 73  1.16 {.    execs
13c0: 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d  ql {.      PRAGM
13d0: 41 20 76 64 62 65 5f 6c 69 73 74 69 6e 67 3d 4e  A vdbe_listing=N
13e0: 4f 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20  O;.      PRAGMA 
13f0: 76 64 62 65 5f 6c 69 73 74 69 6e 67 3b 0a 20 20  vdbe_listing;.  
1400: 20 20 7d 0a 20 20 7d 20 7b 30 7d 0a 7d 0a 0a 64    }.  } {0}.}..d
1410: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 2e  o_test pragma-1.
1420: 31 37 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  17 {.  execsql {
1430: 0a 20 20 20 20 50 52 41 47 4d 41 20 70 61 72 73  .    PRAGMA pars
1440: 65 72 5f 74 72 61 63 65 3d 4f 4e 3b 0a 20 20 20  er_trace=ON;.   
1450: 20 50 52 41 47 4d 41 20 70 61 72 73 65 72 5f 74   PRAGMA parser_t
1460: 72 61 63 65 3d 4f 46 46 3b 0a 20 20 7d 0a 7d 20  race=OFF;.  }.} 
1470: 7b 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  {}.do_test pragm
1480: 61 2d 31 2e 31 38 20 7b 0a 20 20 65 78 65 63 73  a-1.18 {.  execs
1490: 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20  ql {.    PRAGMA 
14a0: 62 6f 67 75 73 20 3d 20 2d 31 32 33 34 3b 20 20  bogus = -1234;  
14b0: 2d 2d 20 50 61 72 73 69 6e 67 20 6f 66 20 6e 65  -- Parsing of ne
14c0: 67 61 74 69 76 65 20 76 61 6c 75 65 73 0a 20 20  gative values.  
14d0: 7d 0a 7d 20 7b 7d 0a 0a 23 20 54 65 73 74 20 6d  }.} {}..# Test m
14e0: 6f 64 69 66 79 69 6e 67 20 74 68 65 20 73 61 66  odifying the saf
14f0: 65 74 79 5f 6c 65 76 65 6c 20 6f 66 20 61 6e 20  ety_level of an 
1500: 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
1510: 65 2e 0a 69 66 63 61 70 61 62 6c 65 20 70 61 67  e..ifcapable pag
1520: 65 72 5f 70 72 61 67 6d 61 73 26 26 61 74 74 61  er_pragmas&&atta
1530: 63 68 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 70  ch {.  do_test p
1540: 72 61 67 6d 61 2d 32 2e 31 20 7b 0a 20 20 20 20  ragma-2.1 {.    
1550: 66 69 6c 65 20 64 65 6c 65 74 65 20 2d 66 6f 72  file delete -for
1560: 63 65 20 74 65 73 74 32 2e 64 62 0a 20 20 20 20  ce test2.db.    
1570: 66 69 6c 65 20 64 65 6c 65 74 65 20 2d 66 6f 72  file delete -for
1580: 63 65 20 74 65 73 74 32 2e 64 62 2d 6a 6f 75 72  ce test2.db-jour
1590: 6e 61 6c 0a 20 20 20 20 65 78 65 63 73 71 6c 20  nal.    execsql 
15a0: 7b 0a 20 20 20 20 20 20 41 54 54 41 43 48 20 27  {.      ATTACH '
15b0: 74 65 73 74 32 2e 64 62 27 20 41 53 20 61 75 78  test2.db' AS aux
15c0: 3b 0a 20 20 20 20 7d 20 0a 20 20 7d 20 7b 7d 0a  ;.    } .  } {}.
15d0: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
15e0: 2d 32 2e 32 20 7b 0a 20 20 20 20 65 78 65 63 73  -2.2 {.    execs
15f0: 71 6c 20 7b 0a 20 20 20 20 20 20 70 72 61 67 6d  ql {.      pragm
1600: 61 20 61 75 78 2e 73 79 6e 63 68 72 6f 6e 6f 75  a aux.synchronou
1610: 73 3b 0a 20 20 20 20 7d 20 0a 20 20 7d 20 7b 32  s;.    } .  } {2
1620: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67  }.  do_test prag
1630: 6d 61 2d 32 2e 33 20 7b 0a 20 20 20 20 65 78 65  ma-2.3 {.    exe
1640: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 70 72 61  csql {.      pra
1650: 67 6d 61 20 61 75 78 2e 73 79 6e 63 68 72 6f 6e  gma aux.synchron
1660: 6f 75 73 20 3d 20 4f 46 46 3b 0a 20 20 20 20 20  ous = OFF;.     
1670: 20 70 72 61 67 6d 61 20 61 75 78 2e 73 79 6e 63   pragma aux.sync
1680: 68 72 6f 6e 6f 75 73 3b 0a 20 20 20 20 20 20 70  hronous;.      p
1690: 72 61 67 6d 61 20 73 79 6e 63 68 72 6f 6e 6f 75  ragma synchronou
16a0: 73 3b 0a 20 20 20 20 7d 20 0a 20 20 7d 20 7b 30  s;.    } .  } {0
16b0: 20 32 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72   2}.  do_test pr
16c0: 61 67 6d 61 2d 32 2e 34 20 7b 0a 20 20 20 20 65  agma-2.4 {.    e
16d0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 70  xecsql {.      p
16e0: 72 61 67 6d 61 20 61 75 78 2e 73 79 6e 63 68 72  ragma aux.synchr
16f0: 6f 6e 6f 75 73 20 3d 20 4f 4e 3b 0a 20 20 20 20  onous = ON;.    
1700: 20 20 70 72 61 67 6d 61 20 73 79 6e 63 68 72 6f    pragma synchro
1710: 6e 6f 75 73 3b 0a 20 20 20 20 20 20 70 72 61 67  nous;.      prag
1720: 6d 61 20 61 75 78 2e 73 79 6e 63 68 72 6f 6e 6f  ma aux.synchrono
1730: 75 73 3b 0a 20 20 20 20 7d 20 0a 20 20 7d 20 7b  us;.    } .  } {
1740: 32 20 31 7d 0a 7d 20 3b 23 20 69 66 63 61 70 61  2 1}.} ;# ifcapa
1750: 62 6c 65 20 70 61 67 65 72 5f 70 72 61 67 6d 61  ble pager_pragma
1760: 73 0a 0a 23 20 43 6f 6e 73 74 72 75 63 74 20 61  s..# Construct a
1770: 20 63 6f 72 72 75 70 74 65 64 20 69 6e 64 65 78   corrupted index
1780: 20 61 6e 64 20 6d 61 6b 65 20 73 75 72 65 20 74   and make sure t
1790: 68 65 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65  he integrity_che
17a0: 63 6b 0a 23 20 70 72 61 67 6d 61 20 66 69 6e 64  ck.# pragma find
17b0: 73 20 69 74 2e 0a 23 0a 23 20 54 68 65 73 65 20  s it..#.# These 
17c0: 74 65 73 74 73 20 77 6f 6e 27 74 20 77 6f 72 6b  tests won't work
17d0: 20 69 66 20 74 68 65 20 64 61 74 61 62 61 73 65   if the database
17e0: 20 69 73 20 65 6e 63 72 79 70 74 65 64 0a 23 0a   is encrypted.#.
17f0: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 33  do_test pragma-3
1800: 2e 31 20 7b 0a 20 20 64 62 20 63 6c 6f 73 65 0a  .1 {.  db close.
1810: 20 20 66 69 6c 65 20 64 65 6c 65 74 65 20 2d 66    file delete -f
1820: 6f 72 63 65 20 74 65 73 74 2e 64 62 20 74 65 73  orce test.db tes
1830: 74 2e 64 62 2d 6a 6f 75 72 6e 61 6c 0a 20 20 73  t.db-journal.  s
1840: 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64  qlite3 db test.d
1850: 62 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  b.  execsql {.  
1860: 20 20 50 52 41 47 4d 41 20 61 75 74 6f 5f 76 61    PRAGMA auto_va
1870: 63 75 75 6d 3d 4f 46 46 3b 0a 20 20 20 20 42 45  cuum=OFF;.    BE
1880: 47 49 4e 3b 0a 20 20 20 20 43 52 45 41 54 45 20  GIN;.    CREATE 
1890: 54 41 42 4c 45 20 74 32 28 61 2c 62 2c 63 29 3b  TABLE t2(a,b,c);
18a0: 0a 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45  .    CREATE INDE
18b0: 58 20 69 32 20 4f 4e 20 74 32 28 61 29 3b 0a 20  X i2 ON t2(a);. 
18c0: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
18d0: 32 20 56 41 4c 55 45 53 28 31 31 2c 32 2c 33 29  2 VALUES(11,2,3)
18e0: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
18f0: 4f 20 74 32 20 56 41 4c 55 45 53 28 32 32 2c 33  O t2 VALUES(22,3
1900: 2c 34 29 3b 0a 20 20 20 20 43 4f 4d 4d 49 54 3b  ,4);.    COMMIT;
1910: 0a 20 20 20 20 53 45 4c 45 43 54 20 72 6f 77 69  .    SELECT rowi
1920: 64 2c 20 2a 20 66 72 6f 6d 20 74 32 3b 0a 20 20  d, * from t2;.  
1930: 7d 0a 7d 20 7b 31 20 31 31 20 32 20 33 20 32 20  }.} {1 11 2 3 2 
1940: 32 32 20 33 20 34 7d 0a 69 66 63 61 70 61 62 6c  22 3 4}.ifcapabl
1950: 65 20 61 74 74 61 63 68 20 7b 0a 20 20 69 66 20  e attach {.  if 
1960: 7b 21 5b 73 71 6c 69 74 65 33 20 2d 68 61 73 2d  {![sqlite3 -has-
1970: 63 6f 64 65 63 5d 20 26 26 20 24 73 71 6c 69 74  codec] && $sqlit
1980: 65 5f 6f 70 74 69 6f 6e 73 28 69 6e 74 65 67 72  e_options(integr
1990: 69 74 79 63 6b 29 7d 20 7b 0a 20 20 20 20 64 6f  ityck)} {.    do
19a0: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 33 2e 32  _test pragma-3.2
19b0: 20 7b 0a 20 20 20 20 20 20 64 62 20 65 76 61 6c   {.      db eval
19c0: 20 7b 53 45 4c 45 43 54 20 72 6f 6f 74 70 61 67   {SELECT rootpag
19d0: 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61  e FROM sqlite_ma
19e0: 73 74 65 72 20 57 48 45 52 45 20 6e 61 6d 65 3d  ster WHERE name=
19f0: 27 69 32 27 7d 20 62 72 65 61 6b 0a 20 20 20 20  'i2'} break.    
1a00: 20 20 73 65 74 20 70 67 73 7a 20 5b 64 62 20 65    set pgsz [db e
1a10: 76 61 6c 20 7b 50 52 41 47 4d 41 20 70 61 67 65  val {PRAGMA page
1a20: 5f 73 69 7a 65 7d 5d 0a 20 20 20 20 20 20 23 20  _size}].      # 
1a30: 6f 76 65 72 77 72 69 74 65 20 74 68 65 20 68 65  overwrite the he
1a40: 61 64 65 72 20 6f 6e 20 74 68 65 20 72 6f 6f 74  ader on the root
1a50: 70 61 67 65 20 6f 66 20 74 68 65 20 69 6e 64 65  page of the inde
1a60: 78 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 20 20  x in order to.  
1a70: 20 20 20 20 23 20 6d 61 6b 65 20 74 68 65 20 69      # make the i
1a80: 6e 64 65 78 20 61 70 70 65 61 72 20 74 6f 20 62  ndex appear to b
1a90: 65 20 65 6d 70 74 79 2e 0a 20 20 20 20 20 20 23  e empty..      #
1aa0: 0a 20 20 20 20 20 20 73 65 74 20 6f 66 66 73 65  .      set offse
1ab0: 74 20 5b 65 78 70 72 20 7b 24 70 67 73 7a 2a 28  t [expr {$pgsz*(
1ac0: 24 72 6f 6f 74 70 61 67 65 2d 31 29 7d 5d 0a 20  $rootpage-1)}]. 
1ad0: 20 20 20 20 20 68 65 78 69 6f 5f 77 72 69 74 65       hexio_write
1ae0: 20 74 65 73 74 2e 64 62 20 24 6f 66 66 73 65 74   test.db $offset
1af0: 20 30 61 30 30 30 30 30 30 30 30 30 34 30 30 30   0a0000000004000
1b00: 30 30 30 30 30 30 30 0a 20 20 20 20 20 20 64 62  0000000.      db
1b10: 20 63 6c 6f 73 65 0a 20 20 20 20 20 20 73 71 6c   close.      sql
1b20: 69 74 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a  ite3 db test.db.
1b30: 20 20 20 20 20 20 65 78 65 63 73 71 6c 20 7b 50        execsql {P
1b40: 52 41 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f  RAGMA integrity_
1b50: 63 68 65 63 6b 7d 0a 20 20 20 20 7d 20 7b 7b 72  check}.    } {{r
1b60: 6f 77 69 64 20 31 20 6d 69 73 73 69 6e 67 20 66  owid 1 missing f
1b70: 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b 72  rom index i2} {r
1b80: 6f 77 69 64 20 32 20 6d 69 73 73 69 6e 67 20 66  owid 2 missing f
1b90: 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b 77  rom index i2} {w
1ba0: 72 6f 6e 67 20 23 20 6f 66 20 65 6e 74 72 69 65  rong # of entrie
1bb0: 73 20 69 6e 20 69 6e 64 65 78 20 69 32 7d 7d 0a  s in index i2}}.
1bc0: 20 20 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67      do_test prag
1bd0: 6d 61 2d 33 2e 33 20 7b 0a 20 20 20 20 20 20 65  ma-3.3 {.      e
1be0: 78 65 63 73 71 6c 20 7b 50 52 41 47 4d 41 20 69  xecsql {PRAGMA i
1bf0: 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 3d 31  ntegrity_check=1
1c00: 7d 0a 20 20 20 20 7d 20 7b 7b 72 6f 77 69 64 20  }.    } {{rowid 
1c10: 31 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69  1 missing from i
1c20: 6e 64 65 78 20 69 32 7d 7d 0a 20 20 20 20 64 6f  ndex i2}}.    do
1c30: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 33 2e 34  _test pragma-3.4
1c40: 20 7b 0a 20 20 20 20 20 20 65 78 65 63 73 71 6c   {.      execsql
1c50: 20 7b 0a 20 20 20 20 20 20 20 20 41 54 54 41 43   {.        ATTAC
1c60: 48 20 44 41 54 41 42 41 53 45 20 27 74 65 73 74  H DATABASE 'test
1c70: 2e 64 62 27 20 41 53 20 74 32 3b 0a 20 20 20 20  .db' AS t2;.    
1c80: 20 20 20 20 50 52 41 47 4d 41 20 69 6e 74 65 67      PRAGMA integ
1c90: 72 69 74 79 5f 63 68 65 63 6b 0a 20 20 20 20 20  rity_check.     
1ca0: 20 7d 0a 20 20 20 20 7d 20 7b 7b 72 6f 77 69 64   }.    } {{rowid
1cb0: 20 31 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20   1 missing from 
1cc0: 69 6e 64 65 78 20 69 32 7d 20 7b 72 6f 77 69 64  index i2} {rowid
1cd0: 20 32 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20   2 missing from 
1ce0: 69 6e 64 65 78 20 69 32 7d 20 7b 77 72 6f 6e 67  index i2} {wrong
1cf0: 20 23 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e   # of entries in
1d00: 20 69 6e 64 65 78 20 69 32 7d 20 7b 72 6f 77 69   index i2} {rowi
1d10: 64 20 31 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d  d 1 missing from
1d20: 20 69 6e 64 65 78 20 69 32 7d 20 7b 72 6f 77 69   index i2} {rowi
1d30: 64 20 32 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d  d 2 missing from
1d40: 20 69 6e 64 65 78 20 69 32 7d 20 7b 77 72 6f 6e   index i2} {wron
1d50: 67 20 23 20 6f 66 20 65 6e 74 72 69 65 73 20 69  g # of entries i
1d60: 6e 20 69 6e 64 65 78 20 69 32 7d 7d 0a 20 20 20  n index i2}}.   
1d70: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
1d80: 33 2e 35 20 7b 0a 20 20 20 20 20 20 65 78 65 63  3.5 {.      exec
1d90: 73 71 6c 20 7b 0a 20 20 20 20 20 20 20 20 50 52  sql {.        PR
1da0: 41 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63  AGMA integrity_c
1db0: 68 65 63 6b 3d 34 0a 20 20 20 20 20 20 7d 0a 20  heck=4.      }. 
1dc0: 20 20 20 7d 20 7b 7b 72 6f 77 69 64 20 31 20 6d     } {{rowid 1 m
1dd0: 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65  issing from inde
1de0: 78 20 69 32 7d 20 7b 72 6f 77 69 64 20 32 20 6d  x i2} {rowid 2 m
1df0: 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65  issing from inde
1e00: 78 20 69 32 7d 20 7b 77 72 6f 6e 67 20 23 20 6f  x i2} {wrong # o
1e10: 66 20 65 6e 74 72 69 65 73 20 69 6e 20 69 6e 64  f entries in ind
1e20: 65 78 20 69 32 7d 20 7b 72 6f 77 69 64 20 31 20  ex i2} {rowid 1 
1e30: 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64  missing from ind
1e40: 65 78 20 69 32 7d 7d 0a 20 20 20 20 64 6f 5f 74  ex i2}}.    do_t
1e50: 65 73 74 20 70 72 61 67 6d 61 2d 33 2e 36 20 7b  est pragma-3.6 {
1e60: 0a 20 20 20 20 20 20 65 78 65 63 73 71 6c 20 7b  .      execsql {
1e70: 0a 20 20 20 20 20 20 20 20 50 52 41 47 4d 41 20  .        PRAGMA 
1e80: 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 3d  integrity_check=
1e90: 78 79 7a 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  xyz.      }.    
1ea0: 7d 20 7b 7b 72 6f 77 69 64 20 31 20 6d 69 73 73  } {{rowid 1 miss
1eb0: 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69  ing from index i
1ec0: 32 7d 20 7b 72 6f 77 69 64 20 32 20 6d 69 73 73  2} {rowid 2 miss
1ed0: 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69  ing from index i
1ee0: 32 7d 20 7b 77 72 6f 6e 67 20 23 20 6f 66 20 65  2} {wrong # of e
1ef0: 6e 74 72 69 65 73 20 69 6e 20 69 6e 64 65 78 20  ntries in index 
1f00: 69 32 7d 20 7b 72 6f 77 69 64 20 31 20 6d 69 73  i2} {rowid 1 mis
1f10: 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20  sing from index 
1f20: 69 32 7d 20 7b 72 6f 77 69 64 20 32 20 6d 69 73  i2} {rowid 2 mis
1f30: 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20  sing from index 
1f40: 69 32 7d 20 7b 77 72 6f 6e 67 20 23 20 6f 66 20  i2} {wrong # of 
1f50: 65 6e 74 72 69 65 73 20 69 6e 20 69 6e 64 65 78  entries in index
1f60: 20 69 32 7d 7d 0a 20 20 20 20 64 6f 5f 74 65 73   i2}}.    do_tes
1f70: 74 20 70 72 61 67 6d 61 2d 33 2e 37 20 7b 0a 20  t pragma-3.7 {. 
1f80: 20 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20       execsql {. 
1f90: 20 20 20 20 20 20 20 50 52 41 47 4d 41 20 69 6e         PRAGMA in
1fa0: 74 65 67 72 69 74 79 5f 63 68 65 63 6b 3d 30 0a  tegrity_check=0.
1fb0: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 20 7b 7b        }.    } {{
1fc0: 72 6f 77 69 64 20 31 20 6d 69 73 73 69 6e 67 20  rowid 1 missing 
1fd0: 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b  from index i2} {
1fe0: 72 6f 77 69 64 20 32 20 6d 69 73 73 69 6e 67 20  rowid 2 missing 
1ff0: 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b  from index i2} {
2000: 77 72 6f 6e 67 20 23 20 6f 66 20 65 6e 74 72 69  wrong # of entri
2010: 65 73 20 69 6e 20 69 6e 64 65 78 20 69 32 7d 20  es in index i2} 
2020: 7b 72 6f 77 69 64 20 31 20 6d 69 73 73 69 6e 67  {rowid 1 missing
2030: 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20   from index i2} 
2040: 7b 72 6f 77 69 64 20 32 20 6d 69 73 73 69 6e 67  {rowid 2 missing
2050: 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20   from index i2} 
2060: 7b 77 72 6f 6e 67 20 23 20 6f 66 20 65 6e 74 72  {wrong # of entr
2070: 69 65 73 20 69 6e 20 69 6e 64 65 78 20 69 32 7d  ies in index i2}
2080: 7d 0a 20 20 0a 20 20 20 20 23 20 41 64 64 20 61  }.  .    # Add a
2090: 64 64 69 74 69 6f 6e 61 6c 20 63 6f 72 72 75 70  dditional corrup
20a0: 74 69 6f 6e 20 62 79 20 61 70 70 65 6e 64 69 6e  tion by appendin
20b0: 67 20 75 6e 75 73 65 64 20 70 61 67 65 73 20 74  g unused pages t
20c0: 6f 20 74 68 65 20 65 6e 64 20 6f 66 0a 20 20 20  o the end of.   
20d0: 20 23 20 74 68 65 20 64 61 74 61 62 61 73 65 20   # the database 
20e0: 66 69 6c 65 20 74 65 73 74 65 72 72 2e 64 62 0a  file testerr.db.
20f0: 20 20 20 20 23 0a 20 20 20 20 64 6f 5f 74 65 73      #.    do_tes
2100: 74 20 70 72 61 67 6d 61 2d 33 2e 38 20 7b 0a 20  t pragma-3.8 {. 
2110: 20 20 20 20 20 65 78 65 63 73 71 6c 20 7b 44 45       execsql {DE
2120: 54 41 43 48 20 74 32 7d 0a 20 20 20 20 20 20 66  TACH t2}.      f
2130: 69 6c 65 20 64 65 6c 65 74 65 20 2d 66 6f 72 63  ile delete -forc
2140: 65 20 74 65 73 74 65 72 72 2e 64 62 20 74 65 73  e testerr.db tes
2150: 74 65 72 72 2e 64 62 2d 6a 6f 75 72 6e 61 6c 0a  terr.db-journal.
2160: 20 20 20 20 20 20 73 65 74 20 6f 75 74 20 5b 6f        set out [o
2170: 70 65 6e 20 74 65 73 74 65 72 72 2e 64 62 20 77  pen testerr.db w
2180: 5d 0a 20 20 20 20 20 20 66 63 6f 6e 66 69 67 75  ].      fconfigu
2190: 72 65 20 24 6f 75 74 20 2d 74 72 61 6e 73 6c 61  re $out -transla
21a0: 74 69 6f 6e 20 62 69 6e 61 72 79 0a 20 20 20 20  tion binary.    
21b0: 20 20 73 65 74 20 69 6e 20 5b 6f 70 65 6e 20 74    set in [open t
21c0: 65 73 74 2e 64 62 20 72 5d 0a 20 20 20 20 20 20  est.db r].      
21d0: 66 63 6f 6e 66 69 67 75 72 65 20 24 69 6e 20 2d  fconfigure $in -
21e0: 74 72 61 6e 73 6c 61 74 69 6f 6e 20 62 69 6e 61  translation bina
21f0: 72 79 0a 20 20 20 20 20 20 70 75 74 73 20 2d 6e  ry.      puts -n
2200: 6f 6e 65 77 6c 69 6e 65 20 24 6f 75 74 20 5b 72  onewline $out [r
2210: 65 61 64 20 24 69 6e 5d 0a 20 20 20 20 20 20 73  ead $in].      s
2220: 65 65 6b 20 24 69 6e 20 30 0a 20 20 20 20 20 20  eek $in 0.      
2230: 70 75 74 73 20 2d 6e 6f 6e 65 77 6c 69 6e 65 20  puts -nonewline 
2240: 24 6f 75 74 20 5b 72 65 61 64 20 24 69 6e 5d 0a  $out [read $in].
2250: 20 20 20 20 20 20 63 6c 6f 73 65 20 24 69 6e 0a        close $in.
2260: 20 20 20 20 20 20 63 6c 6f 73 65 20 24 6f 75 74        close $out
2270: 0a 20 20 20 20 20 20 68 65 78 69 6f 5f 77 72 69  .      hexio_wri
2280: 74 65 20 74 65 73 74 65 72 72 2e 64 62 20 32 38  te testerr.db 28
2290: 20 30 30 30 30 30 30 30 30 0a 20 20 20 20 20 20   00000000.      
22a0: 65 78 65 63 73 71 6c 20 7b 52 45 49 4e 44 45 58  execsql {REINDEX
22b0: 20 74 32 7d 0a 20 20 20 20 20 20 65 78 65 63 73   t2}.      execs
22c0: 71 6c 20 7b 50 52 41 47 4d 41 20 69 6e 74 65 67  ql {PRAGMA integ
22d0: 72 69 74 79 5f 63 68 65 63 6b 7d 0a 20 20 20 20  rity_check}.    
22e0: 7d 20 7b 6f 6b 7d 0a 20 20 20 20 64 6f 5f 74 65  } {ok}.    do_te
22f0: 73 74 20 70 72 61 67 6d 61 2d 33 2e 38 2e 31 20  st pragma-3.8.1 
2300: 7b 0a 20 20 20 20 20 20 65 78 65 63 73 71 6c 20  {.      execsql 
2310: 7b 50 52 41 47 4d 41 20 71 75 69 63 6b 5f 63 68  {PRAGMA quick_ch
2320: 65 63 6b 7d 0a 20 20 20 20 7d 20 7b 6f 6b 7d 0a  eck}.    } {ok}.
2330: 20 20 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67      do_test prag
2340: 6d 61 2d 33 2e 39 20 7b 0a 20 20 20 20 20 20 65  ma-3.9 {.      e
2350: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 20  xecsql {.       
2360: 20 41 54 54 41 43 48 20 27 74 65 73 74 65 72 72   ATTACH 'testerr
2370: 2e 64 62 27 20 41 53 20 74 32 3b 0a 20 20 20 20  .db' AS t2;.    
2380: 20 20 20 20 50 52 41 47 4d 41 20 69 6e 74 65 67      PRAGMA integ
2390: 72 69 74 79 5f 63 68 65 63 6b 0a 20 20 20 20 20  rity_check.     
23a0: 20 7d 0a 20 20 20 20 7d 20 7b 7b 2a 2a 2a 20 69   }.    } {{*** i
23b0: 6e 20 64 61 74 61 62 61 73 65 20 74 32 20 2a 2a  n database t2 **
23c0: 2a 0a 50 61 67 65 20 34 20 69 73 20 6e 65 76 65  *.Page 4 is neve
23d0: 72 20 75 73 65 64 0a 50 61 67 65 20 35 20 69 73  r used.Page 5 is
23e0: 20 6e 65 76 65 72 20 75 73 65 64 0a 50 61 67 65   never used.Page
23f0: 20 36 20 69 73 20 6e 65 76 65 72 20 75 73 65 64   6 is never used
2400: 7d 20 7b 72 6f 77 69 64 20 31 20 6d 69 73 73 69  } {rowid 1 missi
2410: 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32  ng from index i2
2420: 7d 20 7b 72 6f 77 69 64 20 32 20 6d 69 73 73 69  } {rowid 2 missi
2430: 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32  ng from index i2
2440: 7d 20 7b 77 72 6f 6e 67 20 23 20 6f 66 20 65 6e  } {wrong # of en
2450: 74 72 69 65 73 20 69 6e 20 69 6e 64 65 78 20 69  tries in index i
2460: 32 7d 7d 0a 20 20 20 20 64 6f 5f 74 65 73 74 20  2}}.    do_test 
2470: 70 72 61 67 6d 61 2d 33 2e 31 30 20 7b 0a 20 20  pragma-3.10 {.  
2480: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20      execsql {.  
2490: 20 20 20 20 20 20 50 52 41 47 4d 41 20 69 6e 74        PRAGMA int
24a0: 65 67 72 69 74 79 5f 63 68 65 63 6b 3d 31 0a 20  egrity_check=1. 
24b0: 20 20 20 20 20 7d 0a 20 20 20 20 7d 20 7b 7b 2a       }.    } {{*
24c0: 2a 2a 20 69 6e 20 64 61 74 61 62 61 73 65 20 74  ** in database t
24d0: 32 20 2a 2a 2a 0a 50 61 67 65 20 34 20 69 73 20  2 ***.Page 4 is 
24e0: 6e 65 76 65 72 20 75 73 65 64 7d 7d 0a 20 20 20  never used}}.   
24f0: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
2500: 33 2e 31 31 20 7b 0a 20 20 20 20 20 20 65 78 65  3.11 {.      exe
2510: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 20 20 50  csql {.        P
2520: 52 41 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f  RAGMA integrity_
2530: 63 68 65 63 6b 3d 35 0a 20 20 20 20 20 20 7d 0a  check=5.      }.
2540: 20 20 20 20 7d 20 7b 7b 2a 2a 2a 20 69 6e 20 64      } {{*** in d
2550: 61 74 61 62 61 73 65 20 74 32 20 2a 2a 2a 0a 50  atabase t2 ***.P
2560: 61 67 65 20 34 20 69 73 20 6e 65 76 65 72 20 75  age 4 is never u
2570: 73 65 64 0a 50 61 67 65 20 35 20 69 73 20 6e 65  sed.Page 5 is ne
2580: 76 65 72 20 75 73 65 64 0a 50 61 67 65 20 36 20  ver used.Page 6 
2590: 69 73 20 6e 65 76 65 72 20 75 73 65 64 7d 20 7b  is never used} {
25a0: 72 6f 77 69 64 20 31 20 6d 69 73 73 69 6e 67 20  rowid 1 missing 
25b0: 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b  from index i2} {
25c0: 72 6f 77 69 64 20 32 20 6d 69 73 73 69 6e 67 20  rowid 2 missing 
25d0: 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 7d 0a  from index i2}}.
25e0: 20 20 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67      do_test prag
25f0: 6d 61 2d 33 2e 31 32 20 7b 0a 20 20 20 20 20 20  ma-3.12 {.      
2600: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
2610: 20 20 50 52 41 47 4d 41 20 69 6e 74 65 67 72 69    PRAGMA integri
2620: 74 79 5f 63 68 65 63 6b 3d 34 0a 20 20 20 20 20  ty_check=4.     
2630: 20 7d 0a 20 20 20 20 7d 20 7b 7b 2a 2a 2a 20 69   }.    } {{*** i
2640: 6e 20 64 61 74 61 62 61 73 65 20 74 32 20 2a 2a  n database t2 **
2650: 2a 0a 50 61 67 65 20 34 20 69 73 20 6e 65 76 65  *.Page 4 is neve
2660: 72 20 75 73 65 64 0a 50 61 67 65 20 35 20 69 73  r used.Page 5 is
2670: 20 6e 65 76 65 72 20 75 73 65 64 0a 50 61 67 65   never used.Page
2680: 20 36 20 69 73 20 6e 65 76 65 72 20 75 73 65 64   6 is never used
2690: 7d 20 7b 72 6f 77 69 64 20 31 20 6d 69 73 73 69  } {rowid 1 missi
26a0: 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32  ng from index i2
26b0: 7d 7d 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 70  }}.    do_test p
26c0: 72 61 67 6d 61 2d 33 2e 31 33 20 7b 0a 20 20 20  ragma-3.13 {.   
26d0: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
26e0: 20 20 20 20 20 50 52 41 47 4d 41 20 69 6e 74 65       PRAGMA inte
26f0: 67 72 69 74 79 5f 63 68 65 63 6b 3d 33 0a 20 20  grity_check=3.  
2700: 20 20 20 20 7d 0a 20 20 20 20 7d 20 7b 7b 2a 2a      }.    } {{**
2710: 2a 20 69 6e 20 64 61 74 61 62 61 73 65 20 74 32  * in database t2
2720: 20 2a 2a 2a 0a 50 61 67 65 20 34 20 69 73 20 6e   ***.Page 4 is n
2730: 65 76 65 72 20 75 73 65 64 0a 50 61 67 65 20 35  ever used.Page 5
2740: 20 69 73 20 6e 65 76 65 72 20 75 73 65 64 0a 50   is never used.P
2750: 61 67 65 20 36 20 69 73 20 6e 65 76 65 72 20 75  age 6 is never u
2760: 73 65 64 7d 7d 0a 20 20 20 20 64 6f 5f 74 65 73  sed}}.    do_tes
2770: 74 20 70 72 61 67 6d 61 2d 33 2e 31 34 20 7b 0a  t pragma-3.14 {.
2780: 20 20 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a        execsql {.
2790: 20 20 20 20 20 20 20 20 50 52 41 47 4d 41 20 69          PRAGMA i
27a0: 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 28 32  ntegrity_check(2
27b0: 29 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 20  ).      }.    } 
27c0: 7b 7b 2a 2a 2a 20 69 6e 20 64 61 74 61 62 61 73  {{*** in databas
27d0: 65 20 74 32 20 2a 2a 2a 0a 50 61 67 65 20 34 20  e t2 ***.Page 4 
27e0: 69 73 20 6e 65 76 65 72 20 75 73 65 64 0a 50 61  is never used.Pa
27f0: 67 65 20 35 20 69 73 20 6e 65 76 65 72 20 75 73  ge 5 is never us
2800: 65 64 7d 7d 0a 20 20 20 20 64 6f 5f 74 65 73 74  ed}}.    do_test
2810: 20 70 72 61 67 6d 61 2d 33 2e 31 35 20 7b 0a 20   pragma-3.15 {. 
2820: 20 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20       execsql {. 
2830: 20 20 20 20 20 20 20 41 54 54 41 43 48 20 27 74         ATTACH 't
2840: 65 73 74 65 72 72 2e 64 62 27 20 41 53 20 74 33  esterr.db' AS t3
2850: 3b 0a 20 20 20 20 20 20 20 20 50 52 41 47 4d 41  ;.        PRAGMA
2860: 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b   integrity_check
2870: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 20 7b  .      }.    } {
2880: 7b 2a 2a 2a 20 69 6e 20 64 61 74 61 62 61 73 65  {*** in database
2890: 20 74 32 20 2a 2a 2a 0a 50 61 67 65 20 34 20 69   t2 ***.Page 4 i
28a0: 73 20 6e 65 76 65 72 20 75 73 65 64 0a 50 61 67  s never used.Pag
28b0: 65 20 35 20 69 73 20 6e 65 76 65 72 20 75 73 65  e 5 is never use
28c0: 64 0a 50 61 67 65 20 36 20 69 73 20 6e 65 76 65  d.Page 6 is neve
28d0: 72 20 75 73 65 64 7d 20 7b 72 6f 77 69 64 20 31  r used} {rowid 1
28e0: 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e   missing from in
28f0: 64 65 78 20 69 32 7d 20 7b 72 6f 77 69 64 20 32  dex i2} {rowid 2
2900: 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e   missing from in
2910: 64 65 78 20 69 32 7d 20 7b 77 72 6f 6e 67 20 23  dex i2} {wrong #
2920: 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 69   of entries in i
2930: 6e 64 65 78 20 69 32 7d 20 7b 2a 2a 2a 20 69 6e  ndex i2} {*** in
2940: 20 64 61 74 61 62 61 73 65 20 74 33 20 2a 2a 2a   database t3 ***
2950: 0a 50 61 67 65 20 34 20 69 73 20 6e 65 76 65 72  .Page 4 is never
2960: 20 75 73 65 64 0a 50 61 67 65 20 35 20 69 73 20   used.Page 5 is 
2970: 6e 65 76 65 72 20 75 73 65 64 0a 50 61 67 65 20  never used.Page 
2980: 36 20 69 73 20 6e 65 76 65 72 20 75 73 65 64 7d  6 is never used}
2990: 20 7b 72 6f 77 69 64 20 31 20 6d 69 73 73 69 6e   {rowid 1 missin
29a0: 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d  g from index i2}
29b0: 20 7b 72 6f 77 69 64 20 32 20 6d 69 73 73 69 6e   {rowid 2 missin
29c0: 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d  g from index i2}
29d0: 20 7b 77 72 6f 6e 67 20 23 20 6f 66 20 65 6e 74   {wrong # of ent
29e0: 72 69 65 73 20 69 6e 20 69 6e 64 65 78 20 69 32  ries in index i2
29f0: 7d 7d 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 70  }}.    do_test p
2a00: 72 61 67 6d 61 2d 33 2e 31 36 20 7b 0a 20 20 20  ragma-3.16 {.   
2a10: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
2a20: 20 20 20 20 20 50 52 41 47 4d 41 20 69 6e 74 65       PRAGMA inte
2a30: 67 72 69 74 79 5f 63 68 65 63 6b 28 31 30 29 0a  grity_check(10).
2a40: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 20 7b 7b        }.    } {{
2a50: 2a 2a 2a 20 69 6e 20 64 61 74 61 62 61 73 65 20  *** in database 
2a60: 74 32 20 2a 2a 2a 0a 50 61 67 65 20 34 20 69 73  t2 ***.Page 4 is
2a70: 20 6e 65 76 65 72 20 75 73 65 64 0a 50 61 67 65   never used.Page
2a80: 20 35 20 69 73 20 6e 65 76 65 72 20 75 73 65 64   5 is never used
2a90: 0a 50 61 67 65 20 36 20 69 73 20 6e 65 76 65 72  .Page 6 is never
2aa0: 20 75 73 65 64 7d 20 7b 72 6f 77 69 64 20 31 20   used} {rowid 1 
2ab0: 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64  missing from ind
2ac0: 65 78 20 69 32 7d 20 7b 72 6f 77 69 64 20 32 20  ex i2} {rowid 2 
2ad0: 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64  missing from ind
2ae0: 65 78 20 69 32 7d 20 7b 77 72 6f 6e 67 20 23 20  ex i2} {wrong # 
2af0: 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 69 6e  of entries in in
2b00: 64 65 78 20 69 32 7d 20 7b 2a 2a 2a 20 69 6e 20  dex i2} {*** in 
2b10: 64 61 74 61 62 61 73 65 20 74 33 20 2a 2a 2a 0a  database t3 ***.
2b20: 50 61 67 65 20 34 20 69 73 20 6e 65 76 65 72 20  Page 4 is never 
2b30: 75 73 65 64 0a 50 61 67 65 20 35 20 69 73 20 6e  used.Page 5 is n
2b40: 65 76 65 72 20 75 73 65 64 0a 50 61 67 65 20 36  ever used.Page 6
2b50: 20 69 73 20 6e 65 76 65 72 20 75 73 65 64 7d 20   is never used} 
2b60: 7b 72 6f 77 69 64 20 31 20 6d 69 73 73 69 6e 67  {rowid 1 missing
2b70: 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 7d   from index i2}}
2b80: 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 70 72 61  .    do_test pra
2b90: 67 6d 61 2d 33 2e 31 37 20 7b 0a 20 20 20 20 20  gma-3.17 {.     
2ba0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20   execsql {.     
2bb0: 20 20 20 50 52 41 47 4d 41 20 69 6e 74 65 67 72     PRAGMA integr
2bc0: 69 74 79 5f 63 68 65 63 6b 3d 38 0a 20 20 20 20  ity_check=8.    
2bd0: 20 20 7d 0a 20 20 20 20 7d 20 7b 7b 2a 2a 2a 20    }.    } {{*** 
2be0: 69 6e 20 64 61 74 61 62 61 73 65 20 74 32 20 2a  in database t2 *
2bf0: 2a 2a 0a 50 61 67 65 20 34 20 69 73 20 6e 65 76  **.Page 4 is nev
2c00: 65 72 20 75 73 65 64 0a 50 61 67 65 20 35 20 69  er used.Page 5 i
2c10: 73 20 6e 65 76 65 72 20 75 73 65 64 0a 50 61 67  s never used.Pag
2c20: 65 20 36 20 69 73 20 6e 65 76 65 72 20 75 73 65  e 6 is never use
2c30: 64 7d 20 7b 72 6f 77 69 64 20 31 20 6d 69 73 73  d} {rowid 1 miss
2c40: 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69  ing from index i
2c50: 32 7d 20 7b 72 6f 77 69 64 20 32 20 6d 69 73 73  2} {rowid 2 miss
2c60: 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69  ing from index i
2c70: 32 7d 20 7b 77 72 6f 6e 67 20 23 20 6f 66 20 65  2} {wrong # of e
2c80: 6e 74 72 69 65 73 20 69 6e 20 69 6e 64 65 78 20  ntries in index 
2c90: 69 32 7d 20 7b 2a 2a 2a 20 69 6e 20 64 61 74 61  i2} {*** in data
2ca0: 62 61 73 65 20 74 33 20 2a 2a 2a 0a 50 61 67 65  base t3 ***.Page
2cb0: 20 34 20 69 73 20 6e 65 76 65 72 20 75 73 65 64   4 is never used
2cc0: 0a 50 61 67 65 20 35 20 69 73 20 6e 65 76 65 72  .Page 5 is never
2cd0: 20 75 73 65 64 7d 7d 0a 20 20 20 20 64 6f 5f 74   used}}.    do_t
2ce0: 65 73 74 20 70 72 61 67 6d 61 2d 33 2e 31 38 20  est pragma-3.18 
2cf0: 7b 0a 20 20 20 20 20 20 65 78 65 63 73 71 6c 20  {.      execsql 
2d00: 7b 0a 20 20 20 20 20 20 20 20 50 52 41 47 4d 41  {.        PRAGMA
2d10: 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b   integrity_check
2d20: 3d 34 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  =4.      }.    }
2d30: 20 7b 7b 2a 2a 2a 20 69 6e 20 64 61 74 61 62 61   {{*** in databa
2d40: 73 65 20 74 32 20 2a 2a 2a 0a 50 61 67 65 20 34  se t2 ***.Page 4
2d50: 20 69 73 20 6e 65 76 65 72 20 75 73 65 64 0a 50   is never used.P
2d60: 61 67 65 20 35 20 69 73 20 6e 65 76 65 72 20 75  age 5 is never u
2d70: 73 65 64 0a 50 61 67 65 20 36 20 69 73 20 6e 65  sed.Page 6 is ne
2d80: 76 65 72 20 75 73 65 64 7d 20 7b 72 6f 77 69 64  ver used} {rowid
2d90: 20 31 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20   1 missing from 
2da0: 69 6e 64 65 78 20 69 32 7d 7d 0a 20 20 7d 0a 20  index i2}}.  }. 
2db0: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
2dc0: 33 2e 31 39 20 7b 0a 20 20 20 20 63 61 74 63 68  3.19 {.    catch
2dd0: 20 7b 64 62 20 63 6c 6f 73 65 7d 0a 20 20 20 20   {db close}.    
2de0: 66 69 6c 65 20 64 65 6c 65 74 65 20 2d 66 6f 72  file delete -for
2df0: 63 65 20 74 65 73 74 2e 64 62 20 74 65 73 74 2e  ce test.db test.
2e00: 64 62 2d 6a 6f 75 72 6e 61 6c 0a 20 20 20 20 73  db-journal.    s
2e10: 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64  qlite3 db test.d
2e20: 62 0a 20 20 20 20 64 62 20 65 76 61 6c 20 7b 50  b.    db eval {P
2e30: 52 41 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f  RAGMA integrity_
2e40: 63 68 65 63 6b 7d 0a 20 20 7d 20 7b 6f 6b 7d 0a  check}.  } {ok}.
2e50: 7d 0a 23 65 78 69 74 0a 0a 23 20 54 65 73 74 20  }.#exit..# Test 
2e60: 6d 6f 64 69 66 79 69 6e 67 20 74 68 65 20 63 61  modifying the ca
2e70: 63 68 65 5f 73 69 7a 65 20 6f 66 20 61 6e 20 61  che_size of an a
2e80: 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65  ttached database
2e90: 2e 0a 69 66 63 61 70 61 62 6c 65 20 70 61 67 65  ..ifcapable page
2ea0: 72 5f 70 72 61 67 6d 61 73 26 26 61 74 74 61 63  r_pragmas&&attac
2eb0: 68 20 7b 0a 64 6f 5f 74 65 73 74 20 70 72 61 67  h {.do_test prag
2ec0: 6d 61 2d 34 2e 31 20 7b 0a 20 20 65 78 65 63 73  ma-4.1 {.  execs
2ed0: 71 6c 20 7b 0a 20 20 20 20 41 54 54 41 43 48 20  ql {.    ATTACH 
2ee0: 27 74 65 73 74 32 2e 64 62 27 20 41 53 20 61 75  'test2.db' AS au
2ef0: 78 3b 0a 20 20 20 20 70 72 61 67 6d 61 20 61 75  x;.    pragma au
2f00: 78 2e 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20  x.cache_size;.  
2f10: 20 20 70 72 61 67 6d 61 20 61 75 78 2e 64 65 66    pragma aux.def
2f20: 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65 3b  ault_cache_size;
2f30: 0a 20 20 7d 20 0a 7d 20 5b 6c 69 73 74 20 24 44  .  } .} [list $D
2f40: 46 4c 54 5f 43 41 43 48 45 5f 53 5a 20 24 44 46  FLT_CACHE_SZ $DF
2f50: 4c 54 5f 43 41 43 48 45 5f 53 5a 5d 0a 64 6f 5f  LT_CACHE_SZ].do_
2f60: 74 65 73 74 20 70 72 61 67 6d 61 2d 34 2e 32 20  test pragma-4.2 
2f70: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
2f80: 20 20 70 72 61 67 6d 61 20 61 75 78 2e 63 61 63    pragma aux.cac
2f90: 68 65 5f 73 69 7a 65 20 3d 20 35 30 3b 0a 20 20  he_size = 50;.  
2fa0: 20 20 70 72 61 67 6d 61 20 61 75 78 2e 63 61 63    pragma aux.cac
2fb0: 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 70 72 61  he_size;.    pra
2fc0: 67 6d 61 20 61 75 78 2e 64 65 66 61 75 6c 74 5f  gma aux.default_
2fd0: 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 7d 20  cache_size;.  } 
2fe0: 0a 7d 20 5b 6c 69 73 74 20 35 30 20 24 44 46 4c  .} [list 50 $DFL
2ff0: 54 5f 43 41 43 48 45 5f 53 5a 5d 0a 64 6f 5f 74  T_CACHE_SZ].do_t
3000: 65 73 74 20 70 72 61 67 6d 61 2d 34 2e 33 20 7b  est pragma-4.3 {
3010: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
3020: 20 70 72 61 67 6d 61 20 61 75 78 2e 64 65 66 61   pragma aux.defa
3030: 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65 20 3d  ult_cache_size =
3040: 20 34 35 36 3b 0a 20 20 20 20 70 72 61 67 6d 61   456;.    pragma
3050: 20 61 75 78 2e 63 61 63 68 65 5f 73 69 7a 65 3b   aux.cache_size;
3060: 0a 20 20 20 20 70 72 61 67 6d 61 20 61 75 78 2e  .    pragma aux.
3070: 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69  default_cache_si
3080: 7a 65 3b 0a 20 20 7d 20 0a 7d 20 7b 34 35 36 20  ze;.  } .} {456 
3090: 34 35 36 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61  456}.do_test pra
30a0: 67 6d 61 2d 34 2e 34 20 7b 0a 20 20 65 78 65 63  gma-4.4 {.  exec
30b0: 73 71 6c 20 7b 0a 20 20 20 20 70 72 61 67 6d 61  sql {.    pragma
30c0: 20 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20   cache_size;.   
30d0: 20 70 72 61 67 6d 61 20 64 65 66 61 75 6c 74 5f   pragma default_
30e0: 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 7d 20  cache_size;.  } 
30f0: 0a 7d 20 5b 6c 69 73 74 20 24 44 46 4c 54 5f 43  .} [list $DFLT_C
3100: 41 43 48 45 5f 53 5a 20 24 44 46 4c 54 5f 43 41  ACHE_SZ $DFLT_CA
3110: 43 48 45 5f 53 5a 5d 0a 64 6f 5f 74 65 73 74 20  CHE_SZ].do_test 
3120: 70 72 61 67 6d 61 2d 34 2e 35 20 7b 0a 20 20 65  pragma-4.5 {.  e
3130: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 44 45 54  xecsql {.    DET
3140: 41 43 48 20 61 75 78 3b 0a 20 20 20 20 41 54 54  ACH aux;.    ATT
3150: 41 43 48 20 27 74 65 73 74 33 2e 64 62 27 20 41  ACH 'test3.db' A
3160: 53 20 61 75 78 3b 0a 20 20 20 20 70 72 61 67 6d  S aux;.    pragm
3170: 61 20 61 75 78 2e 63 61 63 68 65 5f 73 69 7a 65  a aux.cache_size
3180: 3b 0a 20 20 20 20 70 72 61 67 6d 61 20 61 75 78  ;.    pragma aux
3190: 2e 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73  .default_cache_s
31a0: 69 7a 65 3b 0a 20 20 7d 20 0a 7d 20 5b 6c 69 73  ize;.  } .} [lis
31b0: 74 20 24 44 46 4c 54 5f 43 41 43 48 45 5f 53 5a  t $DFLT_CACHE_SZ
31c0: 20 24 44 46 4c 54 5f 43 41 43 48 45 5f 53 5a 5d   $DFLT_CACHE_SZ]
31d0: 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d  .do_test pragma-
31e0: 34 2e 36 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  4.6 {.  execsql 
31f0: 7b 0a 20 20 20 20 44 45 54 41 43 48 20 61 75 78  {.    DETACH aux
3200: 3b 0a 20 20 20 20 41 54 54 41 43 48 20 27 74 65  ;.    ATTACH 'te
3210: 73 74 32 2e 64 62 27 20 41 53 20 61 75 78 3b 0a  st2.db' AS aux;.
3220: 20 20 20 20 70 72 61 67 6d 61 20 61 75 78 2e 63      pragma aux.c
3230: 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 70  ache_size;.    p
3240: 72 61 67 6d 61 20 61 75 78 2e 64 65 66 61 75 6c  ragma aux.defaul
3250: 74 5f 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20  t_cache_size;.  
3260: 7d 20 0a 7d 20 7b 34 35 36 20 34 35 36 7d 0a 7d  } .} {456 456}.}
3270: 20 3b 23 20 69 66 63 61 70 61 62 6c 65 20 70 61   ;# ifcapable pa
3280: 67 65 72 5f 70 72 61 67 6d 61 73 0a 0a 23 20 54  ger_pragmas..# T
3290: 65 73 74 20 74 68 61 74 20 6d 6f 64 69 66 79 69  est that modifyi
32a0: 6e 67 20 74 68 65 20 73 79 6e 63 2d 6c 65 76 65  ng the sync-leve
32b0: 6c 20 69 6e 20 74 68 65 20 6d 69 64 64 6c 65 20  l in the middle 
32c0: 6f 66 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  of a transaction
32d0: 20 69 73 0a 23 20 64 69 73 61 6c 6c 6f 77 65 64   is.# disallowed
32e0: 2e 0a 69 66 63 61 70 61 62 6c 65 20 70 61 67 65  ..ifcapable page
32f0: 72 5f 70 72 61 67 6d 61 73 20 7b 0a 64 6f 5f 74  r_pragmas {.do_t
3300: 65 73 74 20 70 72 61 67 6d 61 2d 35 2e 30 20 7b  est pragma-5.0 {
3310: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
3320: 20 70 72 61 67 6d 61 20 73 79 6e 63 68 72 6f 6e   pragma synchron
3330: 6f 75 73 3b 0a 20 20 7d 20 0a 7d 20 7b 32 7d 0a  ous;.  } .} {2}.
3340: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 35  do_test pragma-5
3350: 2e 31 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20  .1 {.  catchsql 
3360: 7b 0a 20 20 20 20 42 45 47 49 4e 3b 0a 20 20 20  {.    BEGIN;.   
3370: 20 70 72 61 67 6d 61 20 73 79 6e 63 68 72 6f 6e   pragma synchron
3380: 6f 75 73 20 3d 20 4f 46 46 3b 0a 20 20 7d 20 0a  ous = OFF;.  } .
3390: 7d 20 7b 31 20 7b 53 61 66 65 74 79 20 6c 65 76  } {1 {Safety lev
33a0: 65 6c 20 6d 61 79 20 6e 6f 74 20 62 65 20 63 68  el may not be ch
33b0: 61 6e 67 65 64 20 69 6e 73 69 64 65 20 61 20 74  anged inside a t
33c0: 72 61 6e 73 61 63 74 69 6f 6e 7d 7d 0a 64 6f 5f  ransaction}}.do_
33d0: 74 65 73 74 20 70 72 61 67 6d 61 2d 35 2e 32 20  test pragma-5.2 
33e0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
33f0: 20 20 70 72 61 67 6d 61 20 73 79 6e 63 68 72 6f    pragma synchro
3400: 6e 6f 75 73 3b 0a 20 20 7d 20 0a 7d 20 7b 32 7d  nous;.  } .} {2}
3410: 0a 63 61 74 63 68 73 71 6c 20 7b 43 4f 4d 4d 49  .catchsql {COMMI
3420: 54 3b 7d 0a 7d 20 3b 23 20 69 66 63 61 70 61 62  T;}.} ;# ifcapab
3430: 6c 65 20 70 61 67 65 72 5f 70 72 61 67 6d 61 73  le pager_pragmas
3440: 0a 0a 23 20 54 65 73 74 20 73 63 68 65 6d 61 2d  ..# Test schema-
3450: 71 75 65 72 79 20 70 72 61 67 6d 61 73 0a 23 0a  query pragmas.#.
3460: 69 66 63 61 70 61 62 6c 65 20 73 63 68 65 6d 61  ifcapable schema
3470: 5f 70 72 61 67 6d 61 73 20 7b 0a 69 66 63 61 70  _pragmas {.ifcap
3480: 61 62 6c 65 20 74 65 6d 70 64 62 26 26 61 74 74  able tempdb&&att
3490: 61 63 68 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20  ach {.  do_test 
34a0: 70 72 61 67 6d 61 2d 36 2e 31 20 7b 0a 20 20 20  pragma-6.1 {.   
34b0: 20 73 65 74 20 72 65 73 20 7b 7d 0a 20 20 20 20   set res {}.    
34c0: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
34d0: 2a 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65  * FROM sqlite_te
34e0: 6d 70 5f 6d 61 73 74 65 72 7d 0a 20 20 20 20 66  mp_master}.    f
34f0: 6f 72 65 61 63 68 20 7b 69 64 78 20 6e 61 6d 65  oreach {idx name
3500: 20 66 69 6c 65 7d 20 5b 65 78 65 63 73 71 6c 20   file} [execsql 
3510: 7b 70 72 61 67 6d 61 20 64 61 74 61 62 61 73 65  {pragma database
3520: 5f 6c 69 73 74 7d 5d 20 7b 0a 20 20 20 20 20 20  _list}] {.      
3530: 6c 61 70 70 65 6e 64 20 72 65 73 20 24 69 64 78  lappend res $idx
3540: 20 24 6e 61 6d 65 0a 20 20 20 20 7d 0a 20 20 20   $name.    }.   
3550: 20 73 65 74 20 72 65 73 0a 20 20 7d 20 7b 30 20   set res.  } {0 
3560: 6d 61 69 6e 20 31 20 74 65 6d 70 20 32 20 61 75  main 1 temp 2 au
3570: 78 7d 0a 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61  x}.}.do_test pra
3580: 67 6d 61 2d 36 2e 32 20 7b 0a 20 20 65 78 65 63  gma-6.2 {.  exec
3590: 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45  sql {.    CREATE
35a0: 20 54 41 42 4c 45 20 74 32 28 61 2c 62 2c 63 29   TABLE t2(a,b,c)
35b0: 3b 0a 20 20 20 20 70 72 61 67 6d 61 20 74 61 62  ;.    pragma tab
35c0: 6c 65 5f 69 6e 66 6f 28 74 32 29 0a 20 20 7d 0a  le_info(t2).  }.
35d0: 7d 20 7b 30 20 61 20 7b 7d 20 30 20 7b 7d 20 30  } {0 a {} 0 {} 0
35e0: 20 31 20 62 20 7b 7d 20 30 20 7b 7d 20 30 20 32   1 b {} 0 {} 0 2
35f0: 20 63 20 7b 7d 20 30 20 7b 7d 20 30 7d 0a 64 6f   c {} 0 {} 0}.do
3600: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 36 2e 32  _test pragma-6.2
3610: 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .1 {.  execsql {
3620: 0a 20 20 20 20 70 72 61 67 6d 61 20 74 61 62 6c  .    pragma tabl
3630: 65 5f 69 6e 66 6f 3b 0a 20 20 7d 0a 7d 20 7b 7d  e_info;.  }.} {}
3640: 0a 64 62 20 6e 75 6c 6c 76 61 6c 75 65 20 3c 3c  .db nullvalue <<
3650: 4e 55 4c 4c 3e 3e 0a 64 6f 5f 74 65 73 74 20 70  NULL>>.do_test p
3660: 72 61 67 6d 61 2d 36 2e 32 2e 32 20 7b 0a 20 20  ragma-6.2.2 {.  
3670: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52  execsql {.    CR
3680: 45 41 54 45 20 54 41 42 4c 45 20 74 35 28 0a 20  EATE TABLE t5(. 
3690: 20 20 20 20 20 61 20 54 45 58 54 20 44 45 46 41       a TEXT DEFA
36a0: 55 4c 54 20 43 55 52 52 45 4e 54 5f 54 49 4d 45  ULT CURRENT_TIME
36b0: 53 54 41 4d 50 2c 20 0a 20 20 20 20 20 20 62 20  STAMP, .      b 
36c0: 44 45 46 41 55 4c 54 20 28 35 2b 33 29 2c 0a 20  DEFAULT (5+3),. 
36d0: 20 20 20 20 20 63 20 54 45 58 54 2c 0a 20 20 20       c TEXT,.   
36e0: 20 20 20 64 20 49 4e 54 45 47 45 52 20 44 45 46     d INTEGER DEF
36f0: 41 55 4c 54 20 4e 55 4c 4c 2c 0a 20 20 20 20 20  AULT NULL,.     
3700: 20 65 20 54 45 58 54 20 44 45 46 41 55 4c 54 20   e TEXT DEFAULT 
3710: 27 27 0a 20 20 20 20 29 3b 0a 20 20 20 20 50 52  ''.    );.    PR
3720: 41 47 4d 41 20 74 61 62 6c 65 5f 69 6e 66 6f 28  AGMA table_info(
3730: 74 35 29 3b 0a 20 20 7d 0a 7d 20 7b 30 20 61 20  t5);.  }.} {0 a 
3740: 54 45 58 54 20 30 20 43 55 52 52 45 4e 54 5f 54  TEXT 0 CURRENT_T
3750: 49 4d 45 53 54 41 4d 50 20 30 20 31 20 62 20 7b  IMESTAMP 0 1 b {
3760: 7d 20 30 20 35 2b 33 20 30 20 32 20 63 20 54 45  } 0 5+3 0 2 c TE
3770: 58 54 20 30 20 3c 3c 4e 55 4c 4c 3e 3e 20 30 20  XT 0 <<NULL>> 0 
3780: 33 20 64 20 49 4e 54 45 47 45 52 20 30 20 4e 55  3 d INTEGER 0 NU
3790: 4c 4c 20 30 20 34 20 65 20 54 45 58 54 20 30 20  LL 0 4 e TEXT 0 
37a0: 27 27 20 30 7d 0a 64 62 20 6e 75 6c 6c 76 61 6c  '' 0}.db nullval
37b0: 75 65 20 7b 7d 0a 69 66 63 61 70 61 62 6c 65 20  ue {}.ifcapable 
37c0: 7b 66 6f 72 65 69 67 6e 6b 65 79 7d 20 7b 0a 20  {foreignkey} {. 
37d0: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
37e0: 36 2e 33 2e 31 20 7b 0a 20 20 20 20 65 78 65 63  6.3.1 {.    exec
37f0: 73 71 6c 20 7b 0a 20 20 20 20 20 20 43 52 45 41  sql {.      CREA
3800: 54 45 20 54 41 42 4c 45 20 74 33 28 61 20 69 6e  TE TABLE t3(a in
3810: 74 20 72 65 66 65 72 65 6e 63 65 73 20 74 32 28  t references t2(
3820: 62 29 2c 20 62 20 55 4e 49 51 55 45 29 3b 0a 20  b), b UNIQUE);. 
3830: 20 20 20 20 20 70 72 61 67 6d 61 20 66 6f 72 65       pragma fore
3840: 69 67 6e 5f 6b 65 79 5f 6c 69 73 74 28 74 33 29  ign_key_list(t3)
3850: 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 30 20 30  ;.    }.  } {0 0
3860: 20 74 32 20 61 20 62 20 7b 4e 4f 20 41 43 54 49   t2 a b {NO ACTI
3870: 4f 4e 7d 20 7b 4e 4f 20 41 43 54 49 4f 4e 7d 20  ON} {NO ACTION} 
3880: 4e 4f 4e 45 7d 0a 20 20 64 6f 5f 74 65 73 74 20  NONE}.  do_test 
3890: 70 72 61 67 6d 61 2d 36 2e 33 2e 32 20 7b 0a 20  pragma-6.3.2 {. 
38a0: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
38b0: 20 20 20 70 72 61 67 6d 61 20 66 6f 72 65 69 67     pragma foreig
38c0: 6e 5f 6b 65 79 5f 6c 69 73 74 3b 0a 20 20 20 20  n_key_list;.    
38d0: 7d 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65  }.  } {}.  do_te
38e0: 73 74 20 70 72 61 67 6d 61 2d 36 2e 33 2e 33 20  st pragma-6.3.3 
38f0: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a  {.    execsql {.
3900: 20 20 20 20 20 20 70 72 61 67 6d 61 20 66 6f 72        pragma for
3910: 65 69 67 6e 5f 6b 65 79 5f 6c 69 73 74 28 74 33  eign_key_list(t3
3920: 5f 62 6f 67 75 73 29 3b 0a 20 20 20 20 7d 0a 20  _bogus);.    }. 
3930: 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20   } {}.  do_test 
3940: 70 72 61 67 6d 61 2d 36 2e 33 2e 34 20 7b 0a 20  pragma-6.3.4 {. 
3950: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
3960: 20 20 20 70 72 61 67 6d 61 20 66 6f 72 65 69 67     pragma foreig
3970: 6e 5f 6b 65 79 5f 6c 69 73 74 28 74 35 29 3b 0a  n_key_list(t5);.
3980: 20 20 20 20 7d 0a 20 20 7d 20 7b 7d 0a 20 20 64      }.  } {}.  d
3990: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 36 2e  o_test pragma-6.
39a0: 34 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  4 {.    execsql 
39b0: 7b 0a 20 20 20 20 20 20 70 72 61 67 6d 61 20 69  {.      pragma i
39c0: 6e 64 65 78 5f 6c 69 73 74 28 74 33 29 3b 0a 20  ndex_list(t3);. 
39d0: 20 20 20 7d 0a 20 20 7d 20 7b 30 20 73 71 6c 69     }.  } {0 sqli
39e0: 74 65 5f 61 75 74 6f 69 6e 64 65 78 5f 74 33 5f  te_autoindex_t3_
39f0: 31 20 31 7d 0a 7d 0a 69 66 63 61 70 61 62 6c 65  1 1}.}.ifcapable
3a00: 20 7b 21 66 6f 72 65 69 67 6e 6b 65 79 7d 20 7b   {!foreignkey} {
3a10: 0a 20 20 65 78 65 63 73 71 6c 20 7b 43 52 45 41  .  execsql {CREA
3a20: 54 45 20 54 41 42 4c 45 20 74 33 28 61 2c 62 20  TE TABLE t3(a,b 
3a30: 55 4e 49 51 55 45 29 7d 0a 7d 0a 64 6f 5f 74 65  UNIQUE)}.}.do_te
3a40: 73 74 20 70 72 61 67 6d 61 2d 36 2e 35 2e 31 20  st pragma-6.5.1 
3a50: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
3a60: 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 74    CREATE INDEX t
3a70: 33 69 31 20 4f 4e 20 74 33 28 61 2c 62 29 3b 0a  3i1 ON t3(a,b);.
3a80: 20 20 20 20 70 72 61 67 6d 61 20 69 6e 64 65 78      pragma index
3a90: 5f 69 6e 66 6f 28 74 33 69 31 29 3b 0a 20 20 7d  _info(t3i1);.  }
3aa0: 0a 7d 20 7b 30 20 30 20 61 20 31 20 31 20 62 7d  .} {0 0 a 1 1 b}
3ab0: 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d  .do_test pragma-
3ac0: 36 2e 35 2e 32 20 7b 0a 20 20 65 78 65 63 73 71  6.5.2 {.  execsq
3ad0: 6c 20 7b 0a 20 20 20 20 70 72 61 67 6d 61 20 69  l {.    pragma i
3ae0: 6e 64 65 78 5f 69 6e 66 6f 28 74 33 69 31 5f 62  ndex_info(t3i1_b
3af0: 6f 67 75 73 29 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a  ogus);.  }.} {}.
3b00: 0a 69 66 63 61 70 61 62 6c 65 20 74 65 6d 70 64  .ifcapable tempd
3b10: 62 20 7b 0a 20 20 23 20 54 65 73 74 20 66 6f 72  b {.  # Test for
3b20: 20 74 69 63 6b 65 74 20 23 33 33 32 30 2e 20 57   ticket #3320. W
3b30: 68 65 6e 20 61 20 74 65 6d 70 20 74 61 62 6c 65  hen a temp table
3b40: 20 6f 66 20 74 68 65 20 73 61 6d 65 20 6e 61 6d   of the same nam
3b50: 65 20 65 78 69 73 74 73 2c 20 6d 61 6b 65 0a 20  e exists, make. 
3b60: 20 23 20 73 75 72 65 20 74 68 65 20 73 63 68 65   # sure the sche
3b70: 6d 61 20 6f 66 20 74 68 65 20 6d 61 69 6e 20 74  ma of the main t
3b80: 61 62 6c 65 20 63 61 6e 20 73 74 69 6c 6c 20 62  able can still b
3b90: 65 20 71 75 65 72 69 65 64 20 75 73 69 6e 67 20  e queried using 
3ba0: 0a 20 20 23 20 22 70 72 61 67 6d 61 20 74 61 62  .  # "pragma tab
3bb0: 6c 65 5f 69 6e 66 6f 22 3a 0a 20 20 64 6f 5f 74  le_info":.  do_t
3bc0: 65 73 74 20 70 72 61 67 6d 61 2d 36 2e 36 2e 31  est pragma-6.6.1
3bd0: 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b   {.    execsql {
3be0: 0a 20 20 20 20 20 20 43 52 45 41 54 45 20 54 41  .      CREATE TA
3bf0: 42 4c 45 20 74 72 69 61 6c 28 63 6f 6c 5f 6d 61  BLE trial(col_ma
3c00: 69 6e 29 3b 0a 20 20 20 20 20 20 43 52 45 41 54  in);.      CREAT
3c10: 45 20 54 45 4d 50 20 54 41 42 4c 45 20 74 72 69  E TEMP TABLE tri
3c20: 61 6c 28 63 6f 6c 5f 74 65 6d 70 29 3b 0a 20 20  al(col_temp);.  
3c30: 20 20 7d 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f    }.  } {}.  do_
3c40: 74 65 73 74 20 70 72 61 67 6d 61 2d 36 2e 36 2e  test pragma-6.6.
3c50: 32 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  2 {.    execsql 
3c60: 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 74  {.      PRAGMA t
3c70: 61 62 6c 65 5f 69 6e 66 6f 28 74 72 69 61 6c 29  able_info(trial)
3c80: 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 30 20 63  ;.    }.  } {0 c
3c90: 6f 6c 5f 74 65 6d 70 20 7b 7d 20 30 20 7b 7d 20  ol_temp {} 0 {} 
3ca0: 30 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61  0}.  do_test pra
3cb0: 67 6d 61 2d 36 2e 36 2e 33 20 7b 0a 20 20 20 20  gma-6.6.3 {.    
3cc0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
3cd0: 50 52 41 47 4d 41 20 74 65 6d 70 2e 74 61 62 6c  PRAGMA temp.tabl
3ce0: 65 5f 69 6e 66 6f 28 74 72 69 61 6c 29 3b 0a 20  e_info(trial);. 
3cf0: 20 20 20 7d 0a 20 20 7d 20 7b 30 20 63 6f 6c 5f     }.  } {0 col_
3d00: 74 65 6d 70 20 7b 7d 20 30 20 7b 7d 20 30 7d 0a  temp {} 0 {} 0}.
3d10: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
3d20: 2d 36 2e 36 2e 34 20 7b 0a 20 20 20 20 65 78 65  -6.6.4 {.    exe
3d30: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41  csql {.      PRA
3d40: 47 4d 41 20 6d 61 69 6e 2e 74 61 62 6c 65 5f 69  GMA main.table_i
3d50: 6e 66 6f 28 74 72 69 61 6c 29 3b 0a 20 20 20 20  nfo(trial);.    
3d60: 7d 0a 20 20 7d 20 7b 30 20 63 6f 6c 5f 6d 61 69  }.  } {0 col_mai
3d70: 6e 20 7b 7d 20 30 20 7b 7d 20 30 7d 0a 7d 0a 0a  n {} 0 {} 0}.}..
3d80: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 36  do_test pragma-6
3d90: 2e 37 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .7 {.  execsql {
3da0: 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  .    CREATE TABL
3db0: 45 20 74 65 73 74 5f 74 61 62 6c 65 28 0a 20 20  E test_table(.  
3dc0: 20 20 20 20 6f 6e 65 20 49 4e 54 20 4e 4f 54 20      one INT NOT 
3dd0: 4e 55 4c 4c 20 44 45 46 41 55 4c 54 20 2d 31 2c  NULL DEFAULT -1,
3de0: 20 0a 20 20 20 20 20 20 74 77 6f 20 74 65 78 74   .      two text
3df0: 2c 0a 20 20 20 20 20 20 74 68 72 65 65 20 56 41  ,.      three VA
3e00: 52 43 48 41 52 28 34 35 2c 20 36 35 29 20 44 45  RCHAR(45, 65) DE
3e10: 46 41 55 4c 54 20 27 61 62 63 64 65 27 2c 0a 20  FAULT 'abcde',. 
3e20: 20 20 20 20 20 66 6f 75 72 20 52 45 41 4c 20 44       four REAL D
3e30: 45 46 41 55 4c 54 20 58 27 61 62 63 64 65 66 27  EFAULT X'abcdef'
3e40: 2c 0a 20 20 20 20 20 20 66 69 76 65 20 44 45 46  ,.      five DEF
3e50: 41 55 4c 54 20 43 55 52 52 45 4e 54 5f 54 49 4d  AULT CURRENT_TIM
3e60: 45 0a 20 20 20 20 29 3b 0a 20 20 20 20 50 52 41  E.    );.    PRA
3e70: 47 4d 41 20 74 61 62 6c 65 5f 69 6e 66 6f 28 74  GMA table_info(t
3e80: 65 73 74 5f 74 61 62 6c 65 29 3b 0a 20 20 7d 0a  est_table);.  }.
3e90: 7d 20 5b 63 6f 6e 63 61 74 20 5c 0a 20 20 7b 30  } [concat \.  {0
3ea0: 20 6f 6e 65 20 49 4e 54 20 31 20 2d 31 20 30 7d   one INT 1 -1 0}
3eb0: 20 5c 0a 20 20 7b 31 20 74 77 6f 20 74 65 78 74   \.  {1 two text
3ec0: 20 30 20 7b 7d 20 30 7d 20 5c 0a 20 20 7b 32 20   0 {} 0} \.  {2 
3ed0: 74 68 72 65 65 20 7b 56 41 52 43 48 41 52 28 34  three {VARCHAR(4
3ee0: 35 2c 20 36 35 29 7d 20 30 20 27 61 62 63 64 65  5, 65)} 0 'abcde
3ef0: 27 20 30 7d 20 5c 0a 20 20 7b 33 20 66 6f 75 72  ' 0} \.  {3 four
3f00: 20 52 45 41 4c 20 30 20 58 27 61 62 63 64 65 66   REAL 0 X'abcdef
3f10: 27 20 30 7d 20 5c 0a 20 20 7b 34 20 66 69 76 65  ' 0} \.  {4 five
3f20: 20 7b 7d 20 30 20 43 55 52 52 45 4e 54 5f 54 49   {} 0 CURRENT_TI
3f30: 4d 45 20 30 7d 20 5c 0a 5d 0a 7d 20 3b 23 20 69  ME 0} \.].} ;# i
3f40: 66 63 61 70 61 62 6c 65 20 73 63 68 65 6d 61 5f  fcapable schema_
3f50: 70 72 61 67 6d 61 73 0a 23 20 4d 69 73 63 65 6c  pragmas.# Miscel
3f60: 6c 61 6e 65 6f 75 73 20 74 65 73 74 73 0a 23 0a  laneous tests.#.
3f70: 69 66 63 61 70 61 62 6c 65 20 73 63 68 65 6d 61  ifcapable schema
3f80: 5f 70 72 61 67 6d 61 73 20 7b 0a 64 6f 5f 74 65  _pragmas {.do_te
3f90: 73 74 20 70 72 61 67 6d 61 2d 37 2e 31 2e 31 20  st pragma-7.1.1 
3fa0: 7b 0a 20 20 23 20 4d 61 6b 65 20 73 75 72 65 20  {.  # Make sure 
3fb0: 61 20 70 72 61 67 6d 61 20 6b 6e 6f 77 73 20 74  a pragma knows t
3fc0: 6f 20 72 65 61 64 20 74 68 65 20 73 63 68 65 6d  o read the schem
3fd0: 61 20 69 66 20 69 74 20 6e 65 65 64 73 20 74 6f  a if it needs to
3fe0: 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 73 71  .  db close.  sq
3ff0: 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64 62  lite3 db test.db
4000: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
4010: 20 70 72 61 67 6d 61 20 69 6e 64 65 78 5f 6c 69   pragma index_li
4020: 73 74 28 74 33 29 3b 0a 20 20 7d 0a 7d 20 7b 30  st(t3);.  }.} {0
4030: 20 74 33 69 31 20 30 20 31 20 73 71 6c 69 74 65   t3i1 0 1 sqlite
4040: 5f 61 75 74 6f 69 6e 64 65 78 5f 74 33 5f 31 20  _autoindex_t3_1 
4050: 31 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  1}.do_test pragm
4060: 61 2d 37 2e 31 2e 32 20 7b 0a 20 20 65 78 65 63  a-7.1.2 {.  exec
4070: 73 71 6c 20 7b 0a 20 20 20 20 70 72 61 67 6d 61  sql {.    pragma
4080: 20 69 6e 64 65 78 5f 6c 69 73 74 28 74 33 5f 62   index_list(t3_b
4090: 6f 67 75 73 29 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a  ogus);.  }.} {}.
40a0: 7d 20 3b 23 20 69 66 63 61 70 61 62 6c 65 20 73  } ;# ifcapable s
40b0: 63 68 65 6d 61 5f 70 72 61 67 6d 61 73 0a 69 66  chema_pragmas.if
40c0: 63 61 70 61 62 6c 65 20 7b 75 74 66 31 36 7d 20  capable {utf16} 
40d0: 7b 0a 20 20 69 66 20 7b 5b 70 65 72 6d 75 74 61  {.  if {[permuta
40e0: 74 69 6f 6e 5d 20 3d 3d 20 22 22 7d 20 7b 0a 20  tion] == ""} {. 
40f0: 20 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d     do_test pragm
4100: 61 2d 37 2e 32 20 7b 0a 20 20 20 20 20 20 64 62  a-7.2 {.      db
4110: 20 63 6c 6f 73 65 0a 20 20 20 20 20 20 73 71 6c   close.      sql
4120: 69 74 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a  ite3 db test.db.
4130: 20 20 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b        catchsql {
4140: 0a 20 20 20 20 20 20 20 20 70 72 61 67 6d 61 20  .        pragma 
4150: 65 6e 63 6f 64 69 6e 67 3d 62 6f 67 75 73 3b 0a  encoding=bogus;.
4160: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 20 7b 31        }.    } {1
4170: 20 7b 75 6e 73 75 70 70 6f 72 74 65 64 20 65 6e   {unsupported en
4180: 63 6f 64 69 6e 67 3a 20 62 6f 67 75 73 7d 7d 0a  coding: bogus}}.
4190: 20 20 7d 0a 7d 0a 69 66 63 61 70 61 62 6c 65 20    }.}.ifcapable 
41a0: 74 65 6d 70 64 62 20 7b 0a 20 20 64 6f 5f 74 65  tempdb {.  do_te
41b0: 73 74 20 70 72 61 67 6d 61 2d 37 2e 33 20 7b 0a  st pragma-7.3 {.
41c0: 20 20 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 20      db close.   
41d0: 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74   sqlite3 db test
41e0: 2e 64 62 0a 20 20 20 20 65 78 65 63 73 71 6c 20  .db.    execsql 
41f0: 7b 0a 20 20 20 20 20 20 70 72 61 67 6d 61 20 6c  {.      pragma l
4200: 6f 63 6b 5f 73 74 61 74 75 73 3b 0a 20 20 20 20  ock_status;.    
4210: 7d 0a 20 20 7d 20 7b 6d 61 69 6e 20 75 6e 6c 6f  }.  } {main unlo
4220: 63 6b 65 64 20 74 65 6d 70 20 63 6c 6f 73 65 64  cked temp closed
4230: 7d 0a 7d 20 65 6c 73 65 20 7b 0a 20 20 64 6f 5f  }.} else {.  do_
4240: 74 65 73 74 20 70 72 61 67 6d 61 2d 37 2e 33 20  test pragma-7.3 
4250: 7b 0a 20 20 20 20 64 62 20 63 6c 6f 73 65 0a 20  {.    db close. 
4260: 20 20 20 73 71 6c 69 74 65 33 20 64 62 20 74 65     sqlite3 db te
4270: 73 74 2e 64 62 0a 20 20 20 20 65 78 65 63 73 71  st.db.    execsq
4280: 6c 20 7b 0a 20 20 20 20 20 20 70 72 61 67 6d 61  l {.      pragma
4290: 20 6c 6f 63 6b 5f 73 74 61 74 75 73 3b 0a 20 20   lock_status;.  
42a0: 20 20 7d 0a 20 20 7d 20 7b 6d 61 69 6e 20 75 6e    }.  } {main un
42b0: 6c 6f 63 6b 65 64 7d 0a 7d 0a 0a 0a 23 2d 2d 2d  locked}.}...#---
42c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
42d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
42e0: 2d 2d 2d 2d 2d 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 0a 23 20 54 65 73 74 20 63 61 73 65 73  ---.# Test cases
4310: 20 70 72 61 67 6d 61 2d 38 2e 2a 20 74 65 73 74   pragma-8.* test
4320: 20 74 68 65 20 22 50 52 41 47 4d 41 20 73 63 68   the "PRAGMA sch
4330: 65 6d 61 5f 76 65 72 73 69 6f 6e 22 20 61 6e 64  ema_version" and
4340: 20 22 50 52 41 47 4d 41 0a 23 20 75 73 65 72 5f   "PRAGMA.# user_
4350: 76 65 72 73 69 6f 6e 22 20 73 74 61 74 65 6d 65  version" stateme
4360: 6e 74 73 2e 0a 23 0a 23 20 70 72 61 67 6d 61 2d  nts..#.# pragma-
4370: 38 2e 31 3a 20 50 52 41 47 4d 41 20 73 63 68 65  8.1: PRAGMA sche
4380: 6d 61 5f 76 65 72 73 69 6f 6e 0a 23 20 70 72 61  ma_version.# pra
4390: 67 6d 61 2d 38 2e 32 3a 20 50 52 41 47 4d 41 20  gma-8.2: PRAGMA 
43a0: 75 73 65 72 5f 76 65 72 73 69 6f 6e 0a 23 0a 0a  user_version.#..
43b0: 69 66 63 61 70 61 62 6c 65 20 73 63 68 65 6d 61  ifcapable schema
43c0: 5f 76 65 72 73 69 6f 6e 20 7b 0a 0a 23 20 46 69  _version {..# Fi
43d0: 72 73 74 20 63 68 65 63 6b 20 74 68 61 74 20 77  rst check that w
43e0: 65 20 63 61 6e 20 73 65 74 20 74 68 65 20 73 63  e can set the sc
43f0: 68 65 6d 61 20 76 65 72 73 69 6f 6e 20 61 6e 64  hema version and
4400: 20 74 68 65 6e 20 72 65 74 72 69 65 76 65 20 74   then retrieve t
4410: 68 65 0a 23 20 73 61 6d 65 20 76 61 6c 75 65 2e  he.# same value.
4420: 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d  .do_test pragma-
4430: 38 2e 31 2e 31 20 7b 0a 20 20 65 78 65 63 73 71  8.1.1 {.  execsq
4440: 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 73  l {.    PRAGMA s
4450: 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 20 3d 20  chema_version = 
4460: 31 30 35 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f  105;.  }.} {}.do
4470: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 31  _test pragma-8.1
4480: 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 32 20  .2 {.  execsql2 
4490: 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 73 63 68  {.    PRAGMA sch
44a0: 65 6d 61 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 7d  ema_version;.  }
44b0: 0a 7d 20 7b 73 63 68 65 6d 61 5f 76 65 72 73 69  .} {schema_versi
44c0: 6f 6e 20 31 30 35 7d 0a 64 6f 5f 74 65 73 74 20  on 105}.do_test 
44d0: 70 72 61 67 6d 61 2d 38 2e 31 2e 33 20 7b 0a 20  pragma-8.1.3 {. 
44e0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50   execsql {.    P
44f0: 52 41 47 4d 41 20 73 63 68 65 6d 61 5f 76 65 72  RAGMA schema_ver
4500: 73 69 6f 6e 20 3d 20 31 30 36 3b 0a 20 20 7d 0a  sion = 106;.  }.
4510: 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61  } {}.do_test pra
4520: 67 6d 61 2d 38 2e 31 2e 34 20 7b 0a 20 20 65 78  gma-8.1.4 {.  ex
4530: 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47  ecsql {.    PRAG
4540: 4d 41 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f  MA schema_versio
4550: 6e 3b 0a 20 20 7d 0a 7d 20 31 30 36 0a 0a 23 20  n;.  }.} 106..# 
4560: 43 68 65 63 6b 20 74 68 61 74 20 63 72 65 61 74  Check that creat
4570: 69 6e 67 20 61 20 74 61 62 6c 65 20 6d 6f 64 69  ing a table modi
4580: 66 69 65 73 20 74 68 65 20 73 63 68 65 6d 61 2d  fies the schema-
4590: 76 65 72 73 69 6f 6e 20 28 74 68 69 73 20 69 73  version (this is
45a0: 20 72 65 61 6c 6c 79 0a 23 20 74 6f 20 76 65 72   really.# to ver
45b0: 69 66 79 20 74 68 61 74 20 74 68 65 20 76 61 6c  ify that the val
45c0: 75 65 20 62 65 69 6e 67 20 72 65 61 64 20 69 73  ue being read is
45d0: 20 69 6e 20 66 61 63 74 20 74 68 65 20 73 63 68   in fact the sch
45e0: 65 6d 61 20 76 65 72 73 69 6f 6e 29 2e 0a 64 6f  ema version)..do
45f0: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 31  _test pragma-8.1
4600: 2e 35 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .5 {.  execsql {
4610: 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  .    CREATE TABL
4620: 45 20 74 34 28 61 2c 20 62 2c 20 63 29 3b 0a 20  E t4(a, b, c);. 
4630: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
4640: 34 20 56 41 4c 55 45 53 28 31 2c 20 32 2c 20 33  4 VALUES(1, 2, 3
4650: 29 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20  );.    SELECT * 
4660: 46 52 4f 4d 20 74 34 3b 0a 20 20 7d 0a 7d 20 7b  FROM t4;.  }.} {
4670: 31 20 32 20 33 7d 0a 64 6f 5f 74 65 73 74 20 70  1 2 3}.do_test p
4680: 72 61 67 6d 61 2d 38 2e 31 2e 36 20 7b 0a 20 20  ragma-8.1.6 {.  
4690: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52  execsql {.    PR
46a0: 41 47 4d 41 20 73 63 68 65 6d 61 5f 76 65 72 73  AGMA schema_vers
46b0: 69 6f 6e 3b 0a 20 20 7d 0a 7d 20 31 30 37 0a 0a  ion;.  }.} 107..
46c0: 23 20 4e 6f 77 20 6f 70 65 6e 20 61 20 73 65 63  # Now open a sec
46d0: 6f 6e 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 74  ond connection t
46e0: 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20  o the database. 
46f0: 45 6e 73 75 72 65 20 74 68 61 74 20 63 68 61 6e  Ensure that chan
4700: 67 69 6e 67 20 74 68 65 0a 23 20 73 63 68 65 6d  ging the.# schem
4710: 61 2d 76 65 72 73 69 6f 6e 20 75 73 69 6e 67 20  a-version using 
4720: 74 68 65 20 66 69 72 73 74 20 63 6f 6e 6e 65 63  the first connec
4730: 74 69 6f 6e 20 66 6f 72 63 65 73 20 74 68 65 20  tion forces the 
4740: 73 65 63 6f 6e 64 20 63 6f 6e 6e 65 63 74 69 6f  second connectio
4750: 6e 0a 23 20 74 6f 20 72 65 6c 6f 61 64 20 74 68  n.# to reload th
4760: 65 20 73 63 68 65 6d 61 2e 20 54 68 69 73 20 68  e schema. This h
4770: 61 73 20 74 6f 20 62 65 20 64 6f 6e 65 20 75 73  as to be done us
4780: 69 6e 67 20 74 68 65 20 43 2d 41 50 49 20 74 65  ing the C-API te
4790: 73 74 20 66 75 6e 63 74 69 6f 6e 73 2c 0a 23 20  st functions,.# 
47a0: 62 65 63 61 75 73 65 20 74 68 65 20 54 43 4c 20  because the TCL 
47b0: 41 50 49 20 61 63 63 6f 75 6e 74 73 20 66 6f 72  API accounts for
47c0: 20 53 43 48 45 4d 41 5f 45 52 52 4f 52 20 61 6e   SCHEMA_ERROR an
47d0: 64 20 72 65 74 72 69 65 73 20 74 68 65 20 71 75  d retries the qu
47e0: 65 72 79 2e 0a 64 6f 5f 74 65 73 74 20 70 72 61  ery..do_test pra
47f0: 67 6d 61 2d 38 2e 31 2e 37 20 7b 0a 20 20 73 71  gma-8.1.7 {.  sq
4800: 6c 69 74 65 33 20 64 62 32 20 74 65 73 74 2e 64  lite3 db2 test.d
4810: 62 3b 20 73 65 74 20 3a 3a 44 42 32 20 5b 73 71  b; set ::DB2 [sq
4820: 6c 69 74 65 33 5f 63 6f 6e 6e 65 63 74 69 6f 6e  lite3_connection
4830: 5f 70 6f 69 6e 74 65 72 20 64 62 32 5d 0a 20 20  _pointer db2].  
4840: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45  execsql {.    SE
4850: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 34 3b 0a  LECT * FROM t4;.
4860: 20 20 7d 20 64 62 32 0a 7d 20 7b 31 20 32 20 33    } db2.} {1 2 3
4870: 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  }.do_test pragma
4880: 2d 38 2e 31 2e 38 20 7b 0a 20 20 65 78 65 63 73  -8.1.8 {.  execs
4890: 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20  ql {.    PRAGMA 
48a0: 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 20 3d  schema_version =
48b0: 20 31 30 38 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64   108;.  }.} {}.d
48c0: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e  o_test pragma-8.
48d0: 31 2e 39 20 7b 0a 20 20 73 65 74 20 3a 3a 53 54  1.9 {.  set ::ST
48e0: 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70  MT [sqlite3_prep
48f0: 61 72 65 20 24 3a 3a 44 42 32 20 22 53 45 4c 45  are $::DB2 "SELE
4900: 43 54 20 2a 20 46 52 4f 4d 20 74 34 22 20 2d 31  CT * FROM t4" -1
4910: 20 44 55 4d 4d 59 5d 0a 20 20 73 71 6c 69 74 65   DUMMY].  sqlite
4920: 33 5f 73 74 65 70 20 24 3a 3a 53 54 4d 54 0a 7d  3_step $::STMT.}
4930: 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 0a 64 6f   SQLITE_ERROR.do
4940: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 31  _test pragma-8.1
4950: 2e 31 30 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  .10 {.  sqlite3_
4960: 66 69 6e 61 6c 69 7a 65 20 24 3a 3a 53 54 4d 54  finalize $::STMT
4970: 0a 7d 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41  .} SQLITE_SCHEMA
4980: 0a 0a 23 20 4d 61 6b 65 20 73 75 72 65 20 74 68  ..# Make sure th
4990: 65 20 73 63 68 65 6d 61 2d 76 65 72 73 69 6f 6e  e schema-version
49a0: 20 63 61 6e 20 62 65 20 6d 61 6e 69 70 75 6c 61   can be manipula
49b0: 74 65 64 20 69 6e 20 61 6e 20 61 74 74 61 63 68  ted in an attach
49c0: 65 64 20 64 61 74 61 62 61 73 65 2e 0a 66 69 6c  ed database..fil
49d0: 65 20 64 65 6c 65 74 65 20 2d 66 6f 72 63 65 20  e delete -force 
49e0: 74 65 73 74 32 2e 64 62 0a 66 69 6c 65 20 64 65  test2.db.file de
49f0: 6c 65 74 65 20 2d 66 6f 72 63 65 20 74 65 73 74  lete -force test
4a00: 32 2e 64 62 2d 6a 6f 75 72 6e 61 6c 0a 69 66 63  2.db-journal.ifc
4a10: 61 70 61 62 6c 65 20 61 74 74 61 63 68 20 7b 0a  apable attach {.
4a20: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
4a30: 2d 38 2e 31 2e 31 31 20 7b 0a 20 20 20 20 65 78  -8.1.11 {.    ex
4a40: 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 41 54  ecsql {.      AT
4a50: 54 41 43 48 20 27 74 65 73 74 32 2e 64 62 27 20  TACH 'test2.db' 
4a60: 41 53 20 61 75 78 3b 0a 20 20 20 20 20 20 43 52  AS aux;.      CR
4a70: 45 41 54 45 20 54 41 42 4c 45 20 61 75 78 2e 74  EATE TABLE aux.t
4a80: 31 28 61 2c 20 62 2c 20 63 29 3b 0a 20 20 20 20  1(a, b, c);.    
4a90: 20 20 50 52 41 47 4d 41 20 61 75 78 2e 73 63 68    PRAGMA aux.sch
4aa0: 65 6d 61 5f 76 65 72 73 69 6f 6e 20 3d 20 32 30  ema_version = 20
4ab0: 35 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 7d 0a  5;.    }.  } {}.
4ac0: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
4ad0: 2d 38 2e 31 2e 31 32 20 7b 0a 20 20 20 20 65 78  -8.1.12 {.    ex
4ae0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52  ecsql {.      PR
4af0: 41 47 4d 41 20 61 75 78 2e 73 63 68 65 6d 61 5f  AGMA aux.schema_
4b00: 76 65 72 73 69 6f 6e 3b 0a 20 20 20 20 7d 0a 20  version;.    }. 
4b10: 20 7d 20 32 30 35 0a 7d 0a 64 6f 5f 74 65 73 74   } 205.}.do_test
4b20: 20 70 72 61 67 6d 61 2d 38 2e 31 2e 31 33 20 7b   pragma-8.1.13 {
4b30: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
4b40: 20 50 52 41 47 4d 41 20 73 63 68 65 6d 61 5f 76   PRAGMA schema_v
4b50: 65 72 73 69 6f 6e 3b 0a 20 20 7d 0a 7d 20 31 30  ersion;.  }.} 10
4b60: 38 0a 0a 23 20 41 6e 64 20 63 68 65 63 6b 20 74  8..# And check t
4b70: 68 61 74 20 6d 6f 64 69 66 79 69 6e 67 20 74 68  hat modifying th
4b80: 65 20 73 63 68 65 6d 61 2d 76 65 72 73 69 6f 6e  e schema-version
4b90: 20 69 6e 20 61 6e 20 61 74 74 61 63 68 65 64 20   in an attached 
4ba0: 64 61 74 61 62 61 73 65 0a 23 20 66 6f 72 63 65  database.# force
4bb0: 73 20 74 68 65 20 73 65 63 6f 6e 64 20 63 6f 6e  s the second con
4bc0: 6e 65 63 74 69 6f 6e 20 74 6f 20 72 65 6c 6f 61  nection to reloa
4bd0: 64 20 74 68 65 20 73 63 68 65 6d 61 2e 0a 69 66  d the schema..if
4be0: 63 61 70 61 62 6c 65 20 61 74 74 61 63 68 20 7b  capable attach {
4bf0: 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .  do_test pragm
4c00: 61 2d 38 2e 31 2e 31 34 20 7b 0a 20 20 20 20 73  a-8.1.14 {.    s
4c10: 71 6c 69 74 65 33 20 64 62 32 20 74 65 73 74 2e  qlite3 db2 test.
4c20: 64 62 3b 20 73 65 74 20 3a 3a 44 42 32 20 5b 73  db; set ::DB2 [s
4c30: 71 6c 69 74 65 33 5f 63 6f 6e 6e 65 63 74 69 6f  qlite3_connectio
4c40: 6e 5f 70 6f 69 6e 74 65 72 20 64 62 32 5d 0a 20  n_pointer db2]. 
4c50: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
4c60: 20 20 20 41 54 54 41 43 48 20 27 74 65 73 74 32     ATTACH 'test2
4c70: 2e 64 62 27 20 41 53 20 61 75 78 3b 0a 20 20 20  .db' AS aux;.   
4c80: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
4c90: 20 61 75 78 2e 74 31 3b 0a 20 20 20 20 7d 20 64   aux.t1;.    } d
4ca0: 62 32 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74  b2.  } {}.  do_t
4cb0: 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e 31  est pragma-8.1.1
4cc0: 35 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  5 {.    execsql 
4cd0: 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 61  {.      PRAGMA a
4ce0: 75 78 2e 73 63 68 65 6d 61 5f 76 65 72 73 69 6f  ux.schema_versio
4cf0: 6e 20 3d 20 32 30 36 3b 0a 20 20 20 20 7d 0a 20  n = 206;.    }. 
4d00: 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20   } {}.  do_test 
4d10: 70 72 61 67 6d 61 2d 38 2e 31 2e 31 36 20 7b 0a  pragma-8.1.16 {.
4d20: 20 20 20 20 73 65 74 20 3a 3a 53 54 4d 54 20 5b      set ::STMT [
4d30: 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 20  sqlite3_prepare 
4d40: 24 3a 3a 44 42 32 20 22 53 45 4c 45 43 54 20 2a  $::DB2 "SELECT *
4d50: 20 46 52 4f 4d 20 61 75 78 2e 74 31 22 20 2d 31   FROM aux.t1" -1
4d60: 20 44 55 4d 4d 59 5d 0a 20 20 20 20 73 71 6c 69   DUMMY].    sqli
4d70: 74 65 33 5f 73 74 65 70 20 24 3a 3a 53 54 4d 54  te3_step $::STMT
4d80: 0a 20 20 7d 20 53 51 4c 49 54 45 5f 45 52 52 4f  .  } SQLITE_ERRO
4d90: 52 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67  R.  do_test prag
4da0: 6d 61 2d 38 2e 31 2e 31 37 20 7b 0a 20 20 20 20  ma-8.1.17 {.    
4db0: 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65  sqlite3_finalize
4dc0: 20 24 3a 3a 53 54 4d 54 0a 20 20 7d 20 53 51 4c   $::STMT.  } SQL
4dd0: 49 54 45 5f 53 43 48 45 4d 41 0a 20 20 64 6f 5f  ITE_SCHEMA.  do_
4de0: 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e  test pragma-8.1.
4df0: 31 38 20 7b 0a 20 20 20 20 64 62 32 20 63 6c 6f  18 {.    db2 clo
4e00: 73 65 0a 20 20 7d 20 7b 7d 0a 7d 0a 0a 23 20 4e  se.  } {}.}..# N
4e10: 6f 77 20 74 65 73 74 20 74 68 61 74 20 74 68 65  ow test that the
4e20: 20 75 73 65 72 2d 76 65 72 73 69 6f 6e 20 63 61   user-version ca
4e30: 6e 20 62 65 20 72 65 61 64 20 61 6e 64 20 77 72  n be read and wr
4e40: 69 74 74 65 6e 20 28 61 6e 64 20 74 68 61 74 20  itten (and that 
4e50: 77 65 20 61 72 65 6e 27 74 0a 23 20 61 63 63 69  we aren't.# acci
4e60: 64 65 6e 74 61 6c 6c 79 20 6d 61 6e 69 70 75 6c  dentally manipul
4e70: 61 74 69 6e 67 20 74 68 65 20 73 63 68 65 6d 61  ating the schema
4e80: 2d 76 65 72 73 69 6f 6e 20 69 6e 73 74 65 61 64  -version instead
4e90: 29 2e 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  )..do_test pragm
4ea0: 61 2d 38 2e 32 2e 31 20 7b 0a 20 20 65 78 65 63  a-8.2.1 {.  exec
4eb0: 73 71 6c 32 20 7b 0a 20 20 20 20 50 52 41 47 4d  sql2 {.    PRAGM
4ec0: 41 20 75 73 65 72 5f 76 65 72 73 69 6f 6e 3b 0a  A user_version;.
4ed0: 20 20 7d 0a 7d 20 7b 75 73 65 72 5f 76 65 72 73    }.} {user_vers
4ee0: 69 6f 6e 20 30 7d 0a 64 6f 5f 74 65 73 74 20 70  ion 0}.do_test p
4ef0: 72 61 67 6d 61 2d 38 2e 32 2e 32 20 7b 0a 20 20  ragma-8.2.2 {.  
4f00: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52  execsql {.    PR
4f10: 41 47 4d 41 20 75 73 65 72 5f 76 65 72 73 69 6f  AGMA user_versio
4f20: 6e 20 3d 20 32 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a  n = 2;.  }.} {}.
4f30: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38  do_test pragma-8
4f40: 2e 32 2e 33 2e 31 20 7b 0a 20 20 65 78 65 63 73  .2.3.1 {.  execs
4f50: 71 6c 32 20 7b 0a 20 20 20 20 50 52 41 47 4d 41  ql2 {.    PRAGMA
4f60: 20 75 73 65 72 5f 76 65 72 73 69 6f 6e 3b 0a 20   user_version;. 
4f70: 20 7d 0a 7d 20 7b 75 73 65 72 5f 76 65 72 73 69   }.} {user_versi
4f80: 6f 6e 20 32 7d 0a 64 6f 5f 74 65 73 74 20 70 72  on 2}.do_test pr
4f90: 61 67 6d 61 2d 38 2e 32 2e 33 2e 32 20 7b 0a 20  agma-8.2.3.2 {. 
4fa0: 20 64 62 20 63 6c 6f 73 65 0a 20 20 73 71 6c 69   db close.  sqli
4fb0: 74 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20  te3 db test.db. 
4fc0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50   execsql {.    P
4fd0: 52 41 47 4d 41 20 75 73 65 72 5f 76 65 72 73 69  RAGMA user_versi
4fe0: 6f 6e 3b 0a 20 20 7d 0a 7d 20 7b 32 7d 0a 64 6f  on;.  }.} {2}.do
4ff0: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 32  _test pragma-8.2
5000: 2e 34 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c  .4.1 {.  execsql
5010: 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 73 63   {.    PRAGMA sc
5020: 68 65 6d 61 5f 76 65 72 73 69 6f 6e 3b 0a 20 20  hema_version;.  
5030: 7d 0a 7d 20 7b 31 30 38 7d 0a 69 66 63 61 70 61  }.} {108}.ifcapa
5040: 62 6c 65 20 76 61 63 75 75 6d 20 7b 0a 20 20 64  ble vacuum {.  d
5050: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e  o_test pragma-8.
5060: 32 2e 34 2e 32 20 7b 0a 20 20 20 20 65 78 65 63  2.4.2 {.    exec
5070: 73 71 6c 20 7b 0a 20 20 20 20 20 20 56 41 43 55  sql {.      VACU
5080: 55 4d 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41  UM;.      PRAGMA
5090: 20 75 73 65 72 5f 76 65 72 73 69 6f 6e 3b 0a 20   user_version;. 
50a0: 20 20 20 7d 0a 20 20 7d 20 7b 32 7d 0a 20 20 64     }.  } {2}.  d
50b0: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e  o_test pragma-8.
50c0: 32 2e 34 2e 33 20 7b 0a 20 20 20 20 65 78 65 63  2.4.3 {.    exec
50d0: 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47  sql {.      PRAG
50e0: 4d 41 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f  MA schema_versio
50f0: 6e 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 31 30  n;.    }.  } {10
5100: 39 7d 0a 7d 0a 0a 69 66 63 61 70 61 62 6c 65 20  9}.}..ifcapable 
5110: 61 74 74 61 63 68 20 7b 0a 20 20 64 62 20 65 76  attach {.  db ev
5120: 61 6c 20 7b 41 54 54 41 43 48 20 27 74 65 73 74  al {ATTACH 'test
5130: 32 2e 64 62 27 20 41 53 20 61 75 78 7d 0a 20 20  2.db' AS aux}.  
5140: 0a 20 20 23 20 43 68 65 63 6b 20 74 68 61 74 20  .  # Check that 
5150: 74 68 65 20 75 73 65 72 2d 76 65 72 73 69 6f 6e  the user-version
5160: 20 69 6e 20 74 68 65 20 61 75 78 69 6c 61 72 79   in the auxilary
5170: 20 64 61 74 61 62 61 73 65 20 63 61 6e 20 62 65   database can be
5180: 20 6d 61 6e 69 70 75 6c 61 74 65 64 20 28 0a 20   manipulated (. 
5190: 20 23 20 61 6e 64 20 74 68 61 74 20 77 65 20 61   # and that we a
51a0: 72 65 6e 27 74 20 61 63 63 69 64 65 6e 74 61 6c  ren't accidental
51b0: 6c 79 20 6d 61 6e 69 70 75 6c 61 74 69 6e 67 20  ly manipulating 
51c0: 74 68 65 20 73 61 6d 65 20 69 6e 20 74 68 65 20  the same in the 
51d0: 6d 61 69 6e 20 64 62 29 2e 0a 20 20 64 6f 5f 74  main db)..  do_t
51e0: 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 32 2e 35  est pragma-8.2.5
51f0: 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b   {.    execsql {
5200: 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 61 75  .      PRAGMA au
5210: 78 2e 75 73 65 72 5f 76 65 72 73 69 6f 6e 3b 0a  x.user_version;.
5220: 20 20 20 20 7d 0a 20 20 7d 20 7b 30 7d 0a 20 20      }.  } {0}.  
5230: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38  do_test pragma-8
5240: 2e 32 2e 36 20 7b 0a 20 20 20 20 65 78 65 63 73  .2.6 {.    execs
5250: 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d  ql {.      PRAGM
5260: 41 20 61 75 78 2e 75 73 65 72 5f 76 65 72 73 69  A aux.user_versi
5270: 6f 6e 20 3d 20 33 3b 0a 20 20 20 20 7d 0a 20 20  on = 3;.    }.  
5280: 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70  } {}.  do_test p
5290: 72 61 67 6d 61 2d 38 2e 32 2e 37 20 7b 0a 20 20  ragma-8.2.7 {.  
52a0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
52b0: 20 20 50 52 41 47 4d 41 20 61 75 78 2e 75 73 65    PRAGMA aux.use
52c0: 72 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 20 20 7d  r_version;.    }
52d0: 0a 20 20 7d 20 7b 33 7d 0a 20 20 64 6f 5f 74 65  .  } {3}.  do_te
52e0: 73 74 20 70 72 61 67 6d 61 2d 38 2e 32 2e 38 20  st pragma-8.2.8 
52f0: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a  {.    execsql {.
5300: 20 20 20 20 20 20 50 52 41 47 4d 41 20 6d 61 69        PRAGMA mai
5310: 6e 2e 75 73 65 72 5f 76 65 72 73 69 6f 6e 3b 0a  n.user_version;.
5320: 20 20 20 20 7d 0a 20 20 7d 20 7b 32 7d 0a 20 20      }.  } {2}.  
5330: 0a 20 20 23 20 4e 6f 77 20 63 68 65 63 6b 20 74  .  # Now check t
5340: 68 61 74 20 61 20 52 4f 4c 4c 42 41 43 4b 20 72  hat a ROLLBACK r
5350: 65 73 65 74 73 20 74 68 65 20 75 73 65 72 2d 76  esets the user-v
5360: 65 72 73 69 6f 6e 20 69 66 20 69 74 20 68 61 73  ersion if it has
5370: 20 62 65 65 6e 20 6d 6f 64 69 66 69 65 64 0a 20   been modified. 
5380: 20 23 20 77 69 74 68 69 6e 20 61 20 74 72 61 6e   # within a tran
5390: 73 61 63 74 69 6f 6e 2e 0a 20 20 64 6f 5f 74 65  saction..  do_te
53a0: 73 74 20 70 72 61 67 6d 61 2d 38 2e 32 2e 39 20  st pragma-8.2.9 
53b0: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a  {.    execsql {.
53c0: 20 20 20 20 20 20 42 45 47 49 4e 3b 0a 20 20 20        BEGIN;.   
53d0: 20 20 20 50 52 41 47 4d 41 20 61 75 78 2e 75 73     PRAGMA aux.us
53e0: 65 72 5f 76 65 72 73 69 6f 6e 20 3d 20 31 30 3b  er_version = 10;
53f0: 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 75 73  .      PRAGMA us
5400: 65 72 5f 76 65 72 73 69 6f 6e 20 3d 20 31 31 3b  er_version = 11;
5410: 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 7d 0a 20 20  .    }.  } {}.  
5420: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38  do_test pragma-8
5430: 2e 32 2e 31 30 20 7b 0a 20 20 20 20 65 78 65 63  .2.10 {.    exec
5440: 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47  sql {.      PRAG
5450: 4d 41 20 61 75 78 2e 75 73 65 72 5f 76 65 72 73  MA aux.user_vers
5460: 69 6f 6e 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b  ion;.    }.  } {
5470: 31 30 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72  10}.  do_test pr
5480: 61 67 6d 61 2d 38 2e 32 2e 31 31 20 7b 0a 20 20  agma-8.2.11 {.  
5490: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
54a0: 20 20 50 52 41 47 4d 41 20 6d 61 69 6e 2e 75 73    PRAGMA main.us
54b0: 65 72 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 20 20  er_version;.    
54c0: 7d 0a 20 20 7d 20 7b 31 31 7d 0a 20 20 64 6f 5f  }.  } {11}.  do_
54d0: 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 32 2e  test pragma-8.2.
54e0: 31 32 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  12 {.    execsql
54f0: 20 7b 0a 20 20 20 20 20 20 52 4f 4c 4c 42 41 43   {.      ROLLBAC
5500: 4b 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20  K;.      PRAGMA 
5510: 61 75 78 2e 75 73 65 72 5f 76 65 72 73 69 6f 6e  aux.user_version
5520: 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 33 7d 0a  ;.    }.  } {3}.
5530: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
5540: 2d 38 2e 32 2e 31 33 20 7b 0a 20 20 20 20 65 78  -8.2.13 {.    ex
5550: 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52  ecsql {.      PR
5560: 41 47 4d 41 20 6d 61 69 6e 2e 75 73 65 72 5f 76  AGMA main.user_v
5570: 65 72 73 69 6f 6e 3b 0a 20 20 20 20 7d 0a 20 20  ersion;.    }.  
5580: 7d 20 7b 32 7d 0a 7d 0a 0a 23 20 54 72 79 20 61  } {2}.}..# Try a
5590: 20 6e 65 67 61 74 69 76 65 20 76 61 6c 75 65 20   negative value 
55a0: 66 6f 72 20 74 68 65 20 75 73 65 72 2d 76 65 72  for the user-ver
55b0: 73 69 6f 6e 0a 64 6f 5f 74 65 73 74 20 70 72 61  sion.do_test pra
55c0: 67 6d 61 2d 38 2e 32 2e 31 34 20 7b 0a 20 20 65  gma-8.2.14 {.  e
55d0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41  xecsql {.    PRA
55e0: 47 4d 41 20 75 73 65 72 5f 76 65 72 73 69 6f 6e  GMA user_version
55f0: 20 3d 20 2d 34 35 30 3b 0a 20 20 7d 0a 7d 20 7b   = -450;.  }.} {
5600: 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  }.do_test pragma
5610: 2d 38 2e 32 2e 31 35 20 7b 0a 20 20 65 78 65 63  -8.2.15 {.  exec
5620: 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41  sql {.    PRAGMA
5630: 20 75 73 65 72 5f 76 65 72 73 69 6f 6e 3b 0a 20   user_version;. 
5640: 20 7d 0a 7d 20 7b 2d 34 35 30 7d 0a 7d 20 3b 20   }.} {-450}.} ; 
5650: 23 20 69 66 63 61 70 61 62 6c 65 20 73 63 68 65  # ifcapable sche
5660: 6d 61 5f 76 65 72 73 69 6f 6e 0a 0a 23 20 43 68  ma_version..# Ch
5670: 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 54 45  eck to see if TE
5680: 4d 50 5f 53 54 4f 52 45 20 69 73 20 6d 65 6d 6f  MP_STORE is memo
5690: 72 79 20 6f 72 20 64 69 73 6b 2e 20 20 52 65 74  ry or disk.  Ret
56a0: 75 72 6e 20 73 74 72 69 6e 67 73 0a 23 20 22 6d  urn strings.# "m
56b0: 65 6d 6f 72 79 22 20 6f 72 20 22 64 69 73 6b 22  emory" or "disk"
56c0: 20 61 73 20 61 70 70 72 6f 70 72 69 61 74 65 2e   as appropriate.
56d0: 0a 23 0a 70 72 6f 63 20 63 68 65 63 6b 5f 74 65  .#.proc check_te
56e0: 6d 70 5f 73 74 6f 72 65 20 7b 7d 20 7b 0a 20 20  mp_store {} {.  
56f0: 64 62 20 65 76 61 6c 20 7b 43 52 45 41 54 45 20  db eval {CREATE 
5700: 54 45 4d 50 20 54 41 42 4c 45 20 49 46 20 4e 4f  TEMP TABLE IF NO
5710: 54 20 45 58 49 53 54 53 20 61 28 62 29 7d 0a 20  T EXISTS a(b)}. 
5720: 20 64 62 20 65 76 61 6c 20 7b 50 52 41 47 4d 41   db eval {PRAGMA
5730: 20 64 61 74 61 62 61 73 65 5f 6c 69 73 74 7d 20   database_list} 
5740: 7b 0a 20 20 20 20 69 66 20 7b 24 6e 61 6d 65 3d  {.    if {$name=
5750: 3d 22 74 65 6d 70 22 7d 20 7b 0a 20 20 20 20 20  ="temp"} {.     
5760: 20 73 65 74 20 62 74 20 5b 62 74 72 65 65 5f 66   set bt [btree_f
5770: 72 6f 6d 5f 64 62 20 64 62 20 31 5d 0a 20 20 20  rom_db db 1].   
5780: 20 20 20 69 66 20 7b 5b 62 74 72 65 65 5f 69 73     if {[btree_is
5790: 6d 65 6d 64 62 20 24 62 74 5d 7d 20 7b 0a 20 20  memdb $bt]} {.  
57a0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 22 6d 65        return "me
57b0: 6d 6f 72 79 22 0a 20 20 20 20 20 20 7d 0a 20 20  mory".      }.  
57c0: 20 20 20 20 72 65 74 75 72 6e 20 22 64 69 73 6b      return "disk
57d0: 22 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65  ".    }.  }.  re
57e0: 74 75 72 6e 20 22 75 6e 6b 6e 6f 77 6e 22 0a 7d  turn "unknown".}
57f0: 0a 0a 0a 23 20 54 65 73 74 20 74 65 6d 70 5f 73  ...# Test temp_s
5800: 74 6f 72 65 20 61 6e 64 20 74 65 6d 70 5f 73 74  tore and temp_st
5810: 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 20 70 72  ore_directory pr
5820: 61 67 6d 61 73 0a 23 0a 69 66 63 61 70 61 62 6c  agmas.#.ifcapabl
5830: 65 20 70 61 67 65 72 5f 70 72 61 67 6d 61 73 20  e pager_pragmas 
5840: 7b 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  {.do_test pragma
5850: 2d 39 2e 31 20 7b 0a 20 20 64 62 20 63 6c 6f 73  -9.1 {.  db clos
5860: 65 0a 20 20 73 71 6c 69 74 65 33 20 64 62 20 74  e.  sqlite3 db t
5870: 65 73 74 2e 64 62 0a 20 20 65 78 65 63 73 71 6c  est.db.  execsql
5880: 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 74 65   {.    PRAGMA te
5890: 6d 70 5f 73 74 6f 72 65 3b 0a 20 20 7d 0a 7d 20  mp_store;.  }.} 
58a0: 7b 30 7d 0a 69 66 20 7b 24 54 45 4d 50 5f 53 54  {0}.if {$TEMP_ST
58b0: 4f 52 45 3c 3d 31 7d 20 7b 0a 20 20 64 6f 5f 74  ORE<=1} {.  do_t
58c0: 65 73 74 20 70 72 61 67 6d 61 2d 39 2e 31 2e 31  est pragma-9.1.1
58d0: 20 7b 0a 20 20 20 20 63 68 65 63 6b 5f 74 65 6d   {.    check_tem
58e0: 70 5f 73 74 6f 72 65 0a 20 20 7d 20 7b 64 69 73  p_store.  } {dis
58f0: 6b 7d 0a 7d 20 65 6c 73 65 20 7b 0a 20 20 64 6f  k}.} else {.  do
5900: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 39 2e 31  _test pragma-9.1
5910: 2e 31 20 7b 0a 20 20 20 20 63 68 65 63 6b 5f 74  .1 {.    check_t
5920: 65 6d 70 5f 73 74 6f 72 65 0a 20 20 7d 20 7b 6d  emp_store.  } {m
5930: 65 6d 6f 72 79 7d 0a 7d 0a 0a 64 6f 5f 74 65 73  emory}.}..do_tes
5940: 74 20 70 72 61 67 6d 61 2d 39 2e 32 20 7b 0a 20  t pragma-9.2 {. 
5950: 20 64 62 20 63 6c 6f 73 65 0a 20 20 73 71 6c 69   db close.  sqli
5960: 74 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20  te3 db test.db. 
5970: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50   execsql {.    P
5980: 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65  RAGMA temp_store
5990: 3d 66 69 6c 65 3b 0a 20 20 20 20 50 52 41 47 4d  =file;.    PRAGM
59a0: 41 20 74 65 6d 70 5f 73 74 6f 72 65 3b 0a 20 20  A temp_store;.  
59b0: 7d 0a 7d 20 7b 31 7d 0a 69 66 20 7b 24 54 45 4d  }.} {1}.if {$TEM
59c0: 50 5f 53 54 4f 52 45 3d 3d 33 7d 20 7b 0a 20 20  P_STORE==3} {.  
59d0: 23 20 57 68 65 6e 20 54 45 4d 50 5f 53 54 4f 52  # When TEMP_STOR
59e0: 45 20 69 73 20 33 2c 20 61 6c 77 61 79 73 20 75  E is 3, always u
59f0: 73 65 20 6d 65 6d 6f 72 79 20 72 65 67 61 72 64  se memory regard
5a00: 6c 65 73 73 20 6f 66 20 70 72 61 67 6d 61 20 73  less of pragma s
5a10: 65 74 74 69 6e 67 73 2e 0a 20 20 64 6f 5f 74 65  ettings..  do_te
5a20: 73 74 20 70 72 61 67 6d 61 2d 39 2e 32 2e 31 20  st pragma-9.2.1 
5a30: 7b 0a 20 20 20 20 63 68 65 63 6b 5f 74 65 6d 70  {.    check_temp
5a40: 5f 73 74 6f 72 65 0a 20 20 7d 20 7b 6d 65 6d 6f  _store.  } {memo
5a50: 72 79 7d 0a 7d 20 65 6c 73 65 20 7b 0a 20 20 64  ry}.} else {.  d
5a60: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 39 2e  o_test pragma-9.
5a70: 32 2e 31 20 7b 0a 20 20 20 20 63 68 65 63 6b 5f  2.1 {.    check_
5a80: 74 65 6d 70 5f 73 74 6f 72 65 0a 20 20 7d 20 7b  temp_store.  } {
5a90: 64 69 73 6b 7d 0a 7d 0a 0a 64 6f 5f 74 65 73 74  disk}.}..do_test
5aa0: 20 70 72 61 67 6d 61 2d 39 2e 33 20 7b 0a 20 20   pragma-9.3 {.  
5ab0: 64 62 20 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74  db close.  sqlit
5ac0: 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20  e3 db test.db.  
5ad0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52  execsql {.    PR
5ae0: 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 3d  AGMA temp_store=
5af0: 6d 65 6d 6f 72 79 3b 0a 20 20 20 20 50 52 41 47  memory;.    PRAG
5b00: 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 3b 0a 20  MA temp_store;. 
5b10: 20 7d 0a 7d 20 7b 32 7d 0a 69 66 20 7b 24 54 45   }.} {2}.if {$TE
5b20: 4d 50 5f 53 54 4f 52 45 3d 3d 30 7d 20 7b 0a 20  MP_STORE==0} {. 
5b30: 20 23 20 57 68 65 6e 20 54 45 4d 50 5f 53 54 4f   # When TEMP_STO
5b40: 52 45 20 69 73 20 30 2c 20 61 6c 77 61 79 73 20  RE is 0, always 
5b50: 75 73 65 20 74 68 65 20 64 69 73 6b 20 72 65 67  use the disk reg
5b60: 61 72 64 6c 65 73 73 20 6f 66 20 70 72 61 67 6d  ardless of pragm
5b70: 61 20 73 65 74 74 69 6e 67 73 2e 0a 20 20 64 6f  a settings..  do
5b80: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 39 2e 33  _test pragma-9.3
5b90: 2e 31 20 7b 0a 20 20 20 20 63 68 65 63 6b 5f 74  .1 {.    check_t
5ba0: 65 6d 70 5f 73 74 6f 72 65 0a 20 20 7d 20 7b 64  emp_store.  } {d
5bb0: 69 73 6b 7d 0a 7d 20 65 6c 73 65 20 7b 0a 20 20  isk}.} else {.  
5bc0: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 39  do_test pragma-9
5bd0: 2e 33 2e 31 20 7b 0a 20 20 20 20 63 68 65 63 6b  .3.1 {.    check
5be0: 5f 74 65 6d 70 5f 73 74 6f 72 65 0a 20 20 7d 20  _temp_store.  } 
5bf0: 7b 6d 65 6d 6f 72 79 7d 0a 7d 0a 0a 64 6f 5f 74  {memory}.}..do_t
5c00: 65 73 74 20 70 72 61 67 6d 61 2d 39 2e 34 20 7b  est pragma-9.4 {
5c10: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
5c20: 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f   PRAGMA temp_sto
5c30: 72 65 5f 64 69 72 65 63 74 6f 72 79 3b 0a 20 20  re_directory;.  
5c40: 7d 0a 7d 20 7b 7d 0a 69 66 63 61 70 61 62 6c 65  }.} {}.ifcapable
5c50: 20 77 73 64 20 7b 0a 20 20 64 6f 5f 74 65 73 74   wsd {.  do_test
5c60: 20 70 72 61 67 6d 61 2d 39 2e 35 20 7b 0a 20 20   pragma-9.5 {.  
5c70: 20 20 73 65 74 20 70 77 64 20 5b 73 74 72 69 6e    set pwd [strin
5c80: 67 20 6d 61 70 20 7b 27 20 27 27 7d 20 5b 66 69  g map {' ''} [fi
5c90: 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 70  le nativename [p
5ca0: 77 64 5d 5d 5d 0a 20 20 20 20 65 78 65 63 73 71  wd]]].    execsq
5cb0: 6c 20 22 0a 20 20 20 20 20 20 50 52 41 47 4d 41  l ".      PRAGMA
5cc0: 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65   temp_store_dire
5cd0: 63 74 6f 72 79 3d 27 24 70 77 64 27 3b 0a 20 20  ctory='$pwd';.  
5ce0: 20 20 22 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f    ".  } {}.  do_
5cf0: 74 65 73 74 20 70 72 61 67 6d 61 2d 39 2e 36 20  test pragma-9.6 
5d00: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 20  {.    execsql { 
5d10: 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 74 65  .      PRAGMA te
5d20: 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f  mp_store_directo
5d30: 72 79 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 5b 6c  ry;.    }.  } [l
5d40: 69 73 74 20 5b 66 69 6c 65 20 6e 61 74 69 76 65  ist [file native
5d50: 6e 61 6d 65 20 5b 70 77 64 5d 5d 5d 0a 20 20 64  name [pwd]]].  d
5d60: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 39 2e  o_test pragma-9.
5d70: 37 20 7b 0a 20 20 20 20 63 61 74 63 68 73 71 6c  7 {.    catchsql
5d80: 20 7b 20 0a 20 20 20 20 20 20 50 52 41 47 4d 41   { .      PRAGMA
5d90: 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65   temp_store_dire
5da0: 63 74 6f 72 79 3d 27 2f 4e 4f 4e 2f 45 58 49 53  ctory='/NON/EXIS
5db0: 54 45 4e 54 2f 50 41 54 48 2f 46 4f 4f 42 41 52  TENT/PATH/FOOBAR
5dc0: 27 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 31 20  ';.    }.  } {1 
5dd0: 7b 6e 6f 74 20 61 20 77 72 69 74 61 62 6c 65 20  {not a writable 
5de0: 64 69 72 65 63 74 6f 72 79 7d 7d 0a 20 20 64 6f  directory}}.  do
5df0: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 39 2e 38  _test pragma-9.8
5e00: 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b   {.    execsql {
5e10: 20 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 74   .      PRAGMA t
5e20: 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74  emp_store_direct
5e30: 6f 72 79 3d 27 27 3b 0a 20 20 20 20 7d 0a 20 20  ory='';.    }.  
5e40: 7d 20 7b 7d 0a 20 20 69 66 20 7b 21 5b 69 6e 66  } {}.  if {![inf
5e50: 6f 20 65 78 69 73 74 73 20 54 45 4d 50 5f 53 54  o exists TEMP_ST
5e60: 4f 52 45 5d 20 7c 7c 20 24 54 45 4d 50 5f 53 54  ORE] || $TEMP_ST
5e70: 4f 52 45 3c 3d 31 7d 20 7b 0a 20 20 20 20 69 66  ORE<=1} {.    if
5e80: 63 61 70 61 62 6c 65 20 74 65 6d 70 64 62 20 7b  capable tempdb {
5e90: 0a 20 20 20 20 20 20 64 6f 5f 74 65 73 74 20 70  .      do_test p
5ea0: 72 61 67 6d 61 2d 39 2e 39 20 7b 0a 20 20 20 20  ragma-9.9 {.    
5eb0: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 20 0a 20      execsql { . 
5ec0: 20 20 20 20 20 20 20 20 20 50 52 41 47 4d 41 20           PRAGMA 
5ed0: 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63  temp_store_direc
5ee0: 74 6f 72 79 3b 0a 20 20 20 20 20 20 20 20 20 20  tory;.          
5ef0: 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72  PRAGMA temp_stor
5f00: 65 3d 46 49 4c 45 3b 0a 20 20 20 20 20 20 20 20  e=FILE;.        
5f10: 20 20 43 52 45 41 54 45 20 54 45 4d 50 20 54 41    CREATE TEMP TA
5f20: 42 4c 45 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64  BLE temp_store_d
5f30: 69 72 65 63 74 6f 72 79 5f 74 65 73 74 28 61 20  irectory_test(a 
5f40: 69 6e 74 65 67 65 72 29 3b 0a 20 20 20 20 20 20  integer);.      
5f50: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
5f60: 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63  temp_store_direc
5f70: 74 6f 72 79 5f 74 65 73 74 20 76 61 6c 75 65 73  tory_test values
5f80: 20 28 32 29 3b 0a 20 20 20 20 20 20 20 20 20 20   (2);.          
5f90: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 65  SELECT * FROM te
5fa0: 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f  mp_store_directo
5fb0: 72 79 5f 74 65 73 74 3b 0a 20 20 20 20 20 20 20  ry_test;.       
5fc0: 20 7d 0a 20 20 20 20 20 20 7d 20 7b 32 7d 0a 20   }.      } {2}. 
5fd0: 20 20 20 20 20 64 6f 5f 74 65 73 74 20 70 72 61       do_test pra
5fe0: 67 6d 61 2d 39 2e 31 30 20 7b 0a 20 20 20 20 20  gma-9.10 {.     
5ff0: 20 20 20 63 61 74 63 68 73 71 6c 20 22 0a 20 20     catchsql ".  
6000: 20 20 20 20 20 20 20 20 50 52 41 47 4d 41 20 74          PRAGMA t
6010: 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74  emp_store_direct
6020: 6f 72 79 3d 27 24 70 77 64 27 3b 0a 20 20 20 20  ory='$pwd';.    
6030: 20 20 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46        SELECT * F
6040: 52 4f 4d 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64  ROM temp_store_d
6050: 69 72 65 63 74 6f 72 79 5f 74 65 73 74 3b 0a 20  irectory_test;. 
6060: 20 20 20 20 20 20 20 22 0a 20 20 20 20 20 20 7d         ".      }
6070: 20 7b 31 20 7b 6e 6f 20 73 75 63 68 20 74 61 62   {1 {no such tab
6080: 6c 65 3a 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64  le: temp_store_d
6090: 69 72 65 63 74 6f 72 79 5f 74 65 73 74 7d 7d 0a  irectory_test}}.
60a0: 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 64 6f 5f 74      }.  }.}.do_t
60b0: 65 73 74 20 70 72 61 67 6d 61 2d 39 2e 31 31 20  est pragma-9.11 
60c0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
60d0: 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74    PRAGMA temp_st
60e0: 6f 72 65 20 3d 20 30 3b 0a 20 20 20 20 50 52 41  ore = 0;.    PRA
60f0: 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 3b 0a  GMA temp_store;.
6100: 20 20 7d 0a 7d 20 7b 30 7d 0a 64 6f 5f 74 65 73    }.} {0}.do_tes
6110: 74 20 70 72 61 67 6d 61 2d 39 2e 31 32 20 7b 0a  t pragma-9.12 {.
6120: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
6130: 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72  PRAGMA temp_stor
6140: 65 20 3d 20 31 3b 0a 20 20 20 20 50 52 41 47 4d  e = 1;.    PRAGM
6150: 41 20 74 65 6d 70 5f 73 74 6f 72 65 3b 0a 20 20  A temp_store;.  
6160: 7d 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20  }.} {1}.do_test 
6170: 70 72 61 67 6d 61 2d 39 2e 31 33 20 7b 0a 20 20  pragma-9.13 {.  
6180: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52  execsql {.    PR
6190: 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 20  AGMA temp_store 
61a0: 3d 20 32 3b 0a 20 20 20 20 50 52 41 47 4d 41 20  = 2;.    PRAGMA 
61b0: 74 65 6d 70 5f 73 74 6f 72 65 3b 0a 20 20 7d 0a  temp_store;.  }.
61c0: 7d 20 7b 32 7d 0a 64 6f 5f 74 65 73 74 20 70 72  } {2}.do_test pr
61d0: 61 67 6d 61 2d 39 2e 31 34 20 7b 0a 20 20 65 78  agma-9.14 {.  ex
61e0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47  ecsql {.    PRAG
61f0: 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 20 3d 20  MA temp_store = 
6200: 33 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 74 65  3;.    PRAGMA te
6210: 6d 70 5f 73 74 6f 72 65 3b 0a 20 20 7d 0a 7d 20  mp_store;.  }.} 
6220: 7b 30 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67  {0}.do_test prag
6230: 6d 61 2d 39 2e 31 35 20 7b 0a 20 20 63 61 74 63  ma-9.15 {.  catc
6240: 68 73 71 6c 20 7b 0a 20 20 20 20 42 45 47 49 4e  hsql {.    BEGIN
6250: 20 45 58 43 4c 55 53 49 56 45 3b 0a 20 20 20 20   EXCLUSIVE;.    
6260: 43 52 45 41 54 45 20 54 45 4d 50 20 54 41 42 4c  CREATE TEMP TABL
6270: 45 20 74 65 6d 70 5f 74 61 62 6c 65 28 74 29 3b  E temp_table(t);
6280: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
6290: 20 74 65 6d 70 5f 74 61 62 6c 65 20 56 41 4c 55   temp_table VALU
62a0: 45 53 28 27 76 61 6c 75 61 62 6c 65 20 64 61 74  ES('valuable dat
62b0: 61 27 29 3b 0a 20 20 20 20 50 52 41 47 4d 41 20  a');.    PRAGMA 
62c0: 74 65 6d 70 5f 73 74 6f 72 65 20 3d 20 31 3b 0a  temp_store = 1;.
62d0: 20 20 7d 0a 7d 20 7b 31 20 7b 74 65 6d 70 6f 72    }.} {1 {tempor
62e0: 61 72 79 20 73 74 6f 72 61 67 65 20 63 61 6e 6e  ary storage cann
62f0: 6f 74 20 62 65 20 63 68 61 6e 67 65 64 20 66 72  ot be changed fr
6300: 6f 6d 20 77 69 74 68 69 6e 20 61 20 74 72 61 6e  om within a tran
6310: 73 61 63 74 69 6f 6e 7d 7d 0a 64 6f 5f 74 65 73  saction}}.do_tes
6320: 74 20 70 72 61 67 6d 61 2d 39 2e 31 36 20 7b 0a  t pragma-9.16 {.
6330: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
6340: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 65  SELECT * FROM te
6350: 6d 70 5f 74 61 62 6c 65 3b 0a 20 20 20 20 43 4f  mp_table;.    CO
6360: 4d 4d 49 54 3b 0a 20 20 7d 0a 7d 20 7b 7b 76 61  MMIT;.  }.} {{va
6370: 6c 75 61 62 6c 65 20 64 61 74 61 7d 7d 0a 0a 64  luable data}}..d
6380: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 39 2e  o_test pragma-9.
6390: 31 37 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  17 {.  execsql {
63a0: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
63b0: 20 74 65 6d 70 5f 74 61 62 6c 65 20 56 41 4c 55   temp_table VALU
63c0: 45 53 28 27 76 61 6c 75 61 62 6c 65 20 64 61 74  ES('valuable dat
63d0: 61 20 49 49 27 29 3b 0a 20 20 20 20 53 45 4c 45  a II');.    SELE
63e0: 43 54 20 2a 20 46 52 4f 4d 20 74 65 6d 70 5f 74  CT * FROM temp_t
63f0: 61 62 6c 65 3b 0a 20 20 7d 0a 7d 20 7b 7b 76 61  able;.  }.} {{va
6400: 6c 75 61 62 6c 65 20 64 61 74 61 7d 20 7b 76 61  luable data} {va
6410: 6c 75 61 62 6c 65 20 64 61 74 61 20 49 49 7d 7d  luable data II}}
6420: 0a 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  ..do_test pragma
6430: 2d 39 2e 31 38 20 7b 0a 20 20 73 65 74 20 72 63  -9.18 {.  set rc
6440: 20 5b 63 61 74 63 68 20 7b 0a 20 20 20 20 64 62   [catch {.    db
6450: 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 74 20   eval {SELECT t 
6460: 46 52 4f 4d 20 74 65 6d 70 5f 74 61 62 6c 65 7d  FROM temp_table}
6470: 20 7b 0a 20 20 20 20 20 20 65 78 65 63 73 71 6c   {.      execsql
6480: 20 7b 70 72 61 67 6d 61 20 74 65 6d 70 5f 73 74   {pragma temp_st
6490: 6f 72 65 20 3d 20 31 7d 0a 20 20 20 20 7d 0a 20  ore = 1}.    }. 
64a0: 20 7d 20 6d 73 67 5d 0a 20 20 6c 69 73 74 20 24   } msg].  list $
64b0: 72 63 20 24 6d 73 67 0a 7d 20 7b 31 20 7b 74 65  rc $msg.} {1 {te
64c0: 6d 70 6f 72 61 72 79 20 73 74 6f 72 61 67 65 20  mporary storage 
64d0: 63 61 6e 6e 6f 74 20 62 65 20 63 68 61 6e 67 65  cannot be change
64e0: 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 20  d from within a 
64f0: 74 72 61 6e 73 61 63 74 69 6f 6e 7d 7d 0a 0a 7d  transaction}}..}
6500: 20 3b 23 20 69 66 63 61 70 61 62 6c 65 20 70 61   ;# ifcapable pa
6510: 67 65 72 5f 70 72 61 67 6d 61 73 0a 0a 69 66 63  ger_pragmas..ifc
6520: 61 70 61 62 6c 65 20 74 72 69 67 67 65 72 20 7b  apable trigger {
6530: 0a 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  ..do_test pragma
6540: 2d 31 30 2e 30 20 7b 0a 20 20 63 61 74 63 68 73  -10.0 {.  catchs
6550: 71 6c 20 7b 0a 20 20 20 20 44 52 4f 50 20 54 41  ql {.    DROP TA
6560: 42 4c 45 20 6d 61 69 6e 2e 74 31 3b 0a 20 20 7d  BLE main.t1;.  }
6570: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
6580: 20 50 52 41 47 4d 41 20 63 6f 75 6e 74 5f 63 68   PRAGMA count_ch
6590: 61 6e 67 65 73 20 3d 20 31 3b 0a 0a 20 20 20 20  anges = 1;..    
65a0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28  CREATE TABLE t1(
65b0: 61 20 50 52 49 4d 41 52 59 20 4b 45 59 29 3b 0a  a PRIMARY KEY);.
65c0: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
65d0: 20 74 31 5f 6d 69 72 72 6f 72 28 61 29 3b 0a 20   t1_mirror(a);. 
65e0: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
65f0: 74 31 5f 6d 69 72 72 6f 72 32 28 61 29 3b 0a 20  t1_mirror2(a);. 
6600: 20 20 20 43 52 45 41 54 45 20 54 52 49 47 47 45     CREATE TRIGGE
6610: 52 20 74 31 5f 62 69 20 42 45 46 4f 52 45 20 49  R t1_bi BEFORE I
6620: 4e 53 45 52 54 20 4f 4e 20 74 31 20 42 45 47 49  NSERT ON t1 BEGI
6630: 4e 20 0a 20 20 20 20 20 20 49 4e 53 45 52 54 20  N .      INSERT 
6640: 49 4e 54 4f 20 74 31 5f 6d 69 72 72 6f 72 20 56  INTO t1_mirror V
6650: 41 4c 55 45 53 28 6e 65 77 2e 61 29 3b 0a 20 20  ALUES(new.a);.  
6660: 20 20 45 4e 44 3b 0a 20 20 20 20 43 52 45 41 54    END;.    CREAT
6670: 45 20 54 52 49 47 47 45 52 20 74 31 5f 61 69 20  E TRIGGER t1_ai 
6680: 41 46 54 45 52 20 49 4e 53 45 52 54 20 4f 4e 20  AFTER INSERT ON 
6690: 74 31 20 42 45 47 49 4e 20 0a 20 20 20 20 20 20  t1 BEGIN .      
66a0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 5f 6d  INSERT INTO t1_m
66b0: 69 72 72 6f 72 32 20 56 41 4c 55 45 53 28 6e 65  irror2 VALUES(ne
66c0: 77 2e 61 29 3b 0a 20 20 20 20 45 4e 44 3b 0a 20  w.a);.    END;. 
66d0: 20 20 20 43 52 45 41 54 45 20 54 52 49 47 47 45     CREATE TRIGGE
66e0: 52 20 74 31 5f 62 75 20 42 45 46 4f 52 45 20 55  R t1_bu BEFORE U
66f0: 50 44 41 54 45 20 4f 4e 20 74 31 20 42 45 47 49  PDATE ON t1 BEGI
6700: 4e 20 0a 20 20 20 20 20 20 55 50 44 41 54 45 20  N .      UPDATE 
6710: 74 31 5f 6d 69 72 72 6f 72 20 53 45 54 20 61 20  t1_mirror SET a 
6720: 3d 20 6e 65 77 2e 61 20 57 48 45 52 45 20 61 20  = new.a WHERE a 
6730: 3d 20 6f 6c 64 2e 61 3b 0a 20 20 20 20 45 4e 44  = old.a;.    END
6740: 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54 52 49  ;.    CREATE TRI
6750: 47 47 45 52 20 74 31 5f 61 75 20 41 46 54 45 52  GGER t1_au AFTER
6760: 20 55 50 44 41 54 45 20 4f 4e 20 74 31 20 42 45   UPDATE ON t1 BE
6770: 47 49 4e 20 0a 20 20 20 20 20 20 55 50 44 41 54  GIN .      UPDAT
6780: 45 20 74 31 5f 6d 69 72 72 6f 72 32 20 53 45 54  E t1_mirror2 SET
6790: 20 61 20 3d 20 6e 65 77 2e 61 20 57 48 45 52 45   a = new.a WHERE
67a0: 20 61 20 3d 20 6f 6c 64 2e 61 3b 0a 20 20 20 20   a = old.a;.    
67b0: 45 4e 44 3b 0a 20 20 20 20 43 52 45 41 54 45 20  END;.    CREATE 
67c0: 54 52 49 47 47 45 52 20 74 31 5f 62 64 20 42 45  TRIGGER t1_bd BE
67d0: 46 4f 52 45 20 44 45 4c 45 54 45 20 4f 4e 20 74  FORE DELETE ON t
67e0: 31 20 42 45 47 49 4e 20 0a 20 20 20 20 20 20 44  1 BEGIN .      D
67f0: 45 4c 45 54 45 20 46 52 4f 4d 20 74 31 5f 6d 69  ELETE FROM t1_mi
6800: 72 72 6f 72 20 57 48 45 52 45 20 61 20 3d 20 6f  rror WHERE a = o
6810: 6c 64 2e 61 3b 0a 20 20 20 20 45 4e 44 3b 0a 20  ld.a;.    END;. 
6820: 20 20 20 43 52 45 41 54 45 20 54 52 49 47 47 45     CREATE TRIGGE
6830: 52 20 74 31 5f 61 64 20 41 46 54 45 52 20 44 45  R t1_ad AFTER DE
6840: 4c 45 54 45 20 4f 4e 20 74 31 20 42 45 47 49 4e  LETE ON t1 BEGIN
6850: 20 0a 20 20 20 20 20 20 44 45 4c 45 54 45 20 46   .      DELETE F
6860: 52 4f 4d 20 74 31 5f 6d 69 72 72 6f 72 32 20 57  ROM t1_mirror2 W
6870: 48 45 52 45 20 61 20 3d 20 6f 6c 64 2e 61 3b 0a  HERE a = old.a;.
6880: 20 20 20 20 45 4e 44 3b 0a 20 20 7d 0a 7d 20 7b      END;.  }.} {
6890: 7d 0a 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  }..do_test pragm
68a0: 61 2d 31 30 2e 31 20 7b 0a 20 20 65 78 65 63 73  a-10.1 {.  execs
68b0: 71 6c 20 7b 0a 20 20 20 20 49 4e 53 45 52 54 20  ql {.    INSERT 
68c0: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 72  INTO t1 VALUES(r
68d0: 61 6e 64 73 74 72 28 31 30 2c 31 30 29 29 3b 0a  andstr(10,10));.
68e0: 20 20 7d 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73    }.} {1}.do_tes
68f0: 74 20 70 72 61 67 6d 61 2d 31 30 2e 32 20 7b 0a  t pragma-10.2 {.
6900: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
6910: 55 50 44 41 54 45 20 74 31 20 53 45 54 20 61 20  UPDATE t1 SET a 
6920: 3d 20 72 61 6e 64 73 74 72 28 31 30 2c 31 30 29  = randstr(10,10)
6930: 3b 0a 20 20 7d 0a 7d 20 7b 31 7d 0a 64 6f 5f 74  ;.  }.} {1}.do_t
6940: 65 73 74 20 70 72 61 67 6d 61 2d 31 30 2e 33 20  est pragma-10.3 
6950: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
6960: 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 31    DELETE FROM t1
6970: 3b 0a 20 20 7d 0a 7d 20 7b 31 7d 0a 0a 7d 20 3b  ;.  }.} {1}..} ;
6980: 23 20 69 66 63 61 70 61 62 6c 65 20 74 72 69 67  # ifcapable trig
6990: 67 65 72 0a 0a 69 66 63 61 70 61 62 6c 65 20 73  ger..ifcapable s
69a0: 63 68 65 6d 61 5f 70 72 61 67 6d 61 73 20 7b 0a  chema_pragmas {.
69b0: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
69c0: 2d 31 31 2e 31 20 7b 0a 20 20 20 20 65 78 65 63  -11.1 {.    exec
69d0: 73 71 6c 32 20 7b 0a 20 20 20 20 20 20 70 72 61  sql2 {.      pra
69e0: 67 6d 61 20 63 6f 6c 6c 61 74 69 6f 6e 5f 6c 69  gma collation_li
69f0: 73 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 73  st;.    }.  } {s
6a00: 65 71 20 30 20 6e 61 6d 65 20 4e 4f 43 41 53 45  eq 0 name NOCASE
6a10: 20 73 65 71 20 31 20 6e 61 6d 65 20 52 54 52 49   seq 1 name RTRI
6a20: 4d 20 73 65 71 20 32 20 6e 61 6d 65 20 42 49 4e  M seq 2 name BIN
6a30: 41 52 59 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70  ARY}.  do_test p
6a40: 72 61 67 6d 61 2d 31 31 2e 32 20 7b 0a 20 20 20  ragma-11.2 {.   
6a50: 20 64 62 20 63 6f 6c 6c 61 74 65 20 4e 65 77 5f   db collate New_
6a60: 43 6f 6c 6c 61 74 69 6f 6e 20 62 6c 61 68 2e 2e  Collation blah..
6a70: 2e 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a  ..    execsql {.
6a80: 20 20 20 20 20 20 70 72 61 67 6d 61 20 63 6f 6c        pragma col
6a90: 6c 61 74 69 6f 6e 5f 6c 69 73 74 3b 0a 20 20 20  lation_list;.   
6aa0: 20 7d 0a 20 20 7d 20 7b 30 20 4e 65 77 5f 43 6f   }.  } {0 New_Co
6ab0: 6c 6c 61 74 69 6f 6e 20 31 20 4e 4f 43 41 53 45  llation 1 NOCASE
6ac0: 20 32 20 52 54 52 49 4d 20 33 20 42 49 4e 41 52   2 RTRIM 3 BINAR
6ad0: 59 7d 0a 7d 0a 0a 69 66 63 61 70 61 62 6c 65 20  Y}.}..ifcapable 
6ae0: 73 63 68 65 6d 61 5f 70 72 61 67 6d 61 73 26 26  schema_pragmas&&
6af0: 74 65 6d 70 64 62 20 7b 0a 20 20 64 6f 5f 74 65  tempdb {.  do_te
6b00: 73 74 20 70 72 61 67 6d 61 2d 31 32 2e 31 20 7b  st pragma-12.1 {
6b10: 0a 20 20 20 20 73 71 6c 69 74 65 33 20 64 62 32  .    sqlite3 db2
6b20: 20 74 65 73 74 2e 64 62 0a 20 20 20 20 65 78 65   test.db.    exe
6b30: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41  csql {.      PRA
6b40: 47 4d 41 20 74 65 6d 70 2e 74 61 62 6c 65 5f 69  GMA temp.table_i
6b50: 6e 66 6f 28 27 61 62 63 27 29 3b 0a 20 20 20 20  nfo('abc');.    
6b60: 7d 20 64 62 32 0a 20 20 7d 20 7b 7d 0a 20 20 64  } db2.  } {}.  d
6b70: 62 32 20 63 6c 6f 73 65 0a 0a 20 20 64 6f 5f 74  b2 close..  do_t
6b80: 65 73 74 20 70 72 61 67 6d 61 2d 31 32 2e 32 20  est pragma-12.2 
6b90: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 20 64 62  {.    sqlite3 db
6ba0: 32 20 74 65 73 74 2e 64 62 0a 20 20 20 20 65 78  2 test.db.    ex
6bb0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52  ecsql {.      PR
6bc0: 41 47 4d 41 20 74 65 6d 70 2e 64 65 66 61 75 6c  AGMA temp.defaul
6bd0: 74 5f 63 61 63 68 65 5f 73 69 7a 65 20 3d 20 32  t_cache_size = 2
6be0: 30 30 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41  00;.      PRAGMA
6bf0: 20 74 65 6d 70 2e 64 65 66 61 75 6c 74 5f 63 61   temp.default_ca
6c00: 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 7d 20  che_size;.    } 
6c10: 64 62 32 0a 20 20 7d 20 7b 32 30 30 7d 0a 20 20  db2.  } {200}.  
6c20: 64 62 32 20 63 6c 6f 73 65 0a 0a 20 20 64 6f 5f  db2 close..  do_
6c30: 74 65 73 74 20 70 72 61 67 6d 61 2d 31 32 2e 33  test pragma-12.3
6c40: 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 20 64   {.    sqlite3 d
6c50: 62 32 20 74 65 73 74 2e 64 62 0a 20 20 20 20 65  b2 test.db.    e
6c60: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50  xecsql {.      P
6c70: 52 41 47 4d 41 20 74 65 6d 70 2e 63 61 63 68 65  RAGMA temp.cache
6c80: 5f 73 69 7a 65 20 3d 20 34 30 30 3b 0a 20 20 20  _size = 400;.   
6c90: 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 2e 63     PRAGMA temp.c
6ca0: 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 7d  ache_size;.    }
6cb0: 20 64 62 32 0a 20 20 7d 20 7b 34 30 30 7d 0a 20   db2.  } {400}. 
6cc0: 20 64 62 32 20 63 6c 6f 73 65 0a 7d 0a 0a 69 66   db2 close.}..if
6cd0: 63 61 70 61 62 6c 65 20 62 6c 6f 62 6c 69 74 20  capable bloblit 
6ce0: 7b 0a 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  {..do_test pragm
6cf0: 61 2d 31 33 2e 31 20 7b 0a 20 20 65 78 65 63 73  a-13.1 {.  execs
6d00: 71 6c 20 7b 0a 20 20 20 20 44 52 4f 50 20 54 41  ql {.    DROP TA
6d10: 42 4c 45 20 49 46 20 45 58 49 53 54 53 20 74 34  BLE IF EXISTS t4
6d20: 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 76 64 62  ;.    PRAGMA vdb
6d30: 65 5f 74 72 61 63 65 3d 6f 6e 3b 0a 20 20 20 20  e_trace=on;.    
6d40: 50 52 41 47 4d 41 20 76 64 62 65 5f 6c 69 73 74  PRAGMA vdbe_list
6d50: 69 6e 67 3d 6f 6e 3b 0a 20 20 20 20 50 52 41 47  ing=on;.    PRAG
6d60: 4d 41 20 73 71 6c 5f 74 72 61 63 65 3d 6f 6e 3b  MA sql_trace=on;
6d70: 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  .    CREATE TABL
6d80: 45 20 74 34 28 61 20 49 4e 54 45 47 45 52 20 50  E t4(a INTEGER P
6d90: 52 49 4d 41 52 59 20 4b 45 59 2c 62 29 3b 0a 20  RIMARY KEY,b);. 
6da0: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
6db0: 34 28 62 29 20 56 41 4c 55 45 53 28 78 27 30 31  4(b) VALUES(x'01
6dc0: 32 33 34 35 36 37 38 39 61 62 63 64 65 66 30 31  23456789abcdef01
6dd0: 32 33 34 35 36 37 38 39 61 62 63 64 65 66 30 31  23456789abcdef01
6de0: 32 33 34 35 36 37 38 39 27 29 3b 0a 20 20 20 20  23456789');.    
6df0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 34 28 62  INSERT INTO t4(b
6e00: 29 20 56 41 4c 55 45 53 28 72 61 6e 64 73 74 72  ) VALUES(randstr
6e10: 28 33 30 2c 33 30 29 29 3b 0a 20 20 20 20 49 4e  (30,30));.    IN
6e20: 53 45 52 54 20 49 4e 54 4f 20 74 34 28 62 29 20  SERT INTO t4(b) 
6e30: 56 41 4c 55 45 53 28 31 2e 32 33 34 35 36 29 3b  VALUES(1.23456);
6e40: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
6e50: 20 74 34 28 62 29 20 56 41 4c 55 45 53 28 4e 55   t4(b) VALUES(NU
6e60: 4c 4c 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20  LL);.    INSERT 
6e70: 49 4e 54 4f 20 74 34 28 62 29 20 56 41 4c 55 45  INTO t4(b) VALUE
6e80: 53 28 30 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  S(0);.    INSERT
6e90: 20 49 4e 54 4f 20 74 34 28 62 29 20 53 45 4c 45   INTO t4(b) SELE
6ea0: 43 54 20 62 7c 7c 62 7c 7c 62 7c 7c 62 20 46 52  CT b||b||b||b FR
6eb0: 4f 4d 20 74 34 3b 0a 20 20 20 20 53 45 4c 45 43  OM t4;.    SELEC
6ec0: 54 20 2a 20 46 52 4f 4d 20 74 34 3b 0a 20 20 7d  T * FROM t4;.  }
6ed0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
6ee0: 20 50 52 41 47 4d 41 20 76 64 62 65 5f 74 72 61   PRAGMA vdbe_tra
6ef0: 63 65 3d 6f 66 66 3b 0a 20 20 20 20 50 52 41 47  ce=off;.    PRAG
6f00: 4d 41 20 76 64 62 65 5f 6c 69 73 74 69 6e 67 3d  MA vdbe_listing=
6f10: 6f 66 66 3b 0a 20 20 20 20 50 52 41 47 4d 41 20  off;.    PRAGMA 
6f20: 73 71 6c 5f 74 72 61 63 65 3d 6f 66 66 3b 0a 20  sql_trace=off;. 
6f30: 20 7d 0a 7d 20 7b 7d 0a 0a 7d 20 3b 23 20 69 66   }.} {}..} ;# if
6f40: 63 61 70 61 62 6c 65 20 62 6c 6f 62 6c 69 74 20  capable bloblit 
6f50: 0a 0a 69 66 63 61 70 61 62 6c 65 20 70 61 67 65  ..ifcapable page
6f60: 72 5f 70 72 61 67 6d 61 73 20 7b 0a 20 20 64 62  r_pragmas {.  db
6f70: 20 63 6c 6f 73 65 0a 20 20 66 69 6c 65 20 64 65   close.  file de
6f80: 6c 65 74 65 20 2d 66 6f 72 63 65 20 74 65 73 74  lete -force test
6f90: 2e 64 62 0a 20 20 73 71 6c 69 74 65 33 20 64 62  .db.  sqlite3 db
6fa0: 20 74 65 73 74 2e 64 62 0a 0a 20 20 64 6f 5f 74   test.db..  do_t
6fb0: 65 73 74 20 70 72 61 67 6d 61 2d 31 34 2e 31 20  est pragma-14.1 
6fc0: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 20  {.    execsql { 
6fd0: 70 72 61 67 6d 61 20 61 75 74 6f 5f 76 61 63 75  pragma auto_vacu
6fe0: 75 6d 20 3d 20 30 20 7d 0a 20 20 20 20 65 78 65  um = 0 }.    exe
6ff0: 63 73 71 6c 20 7b 20 70 72 61 67 6d 61 20 70 61  csql { pragma pa
7000: 67 65 5f 63 6f 75 6e 74 20 7d 0a 20 20 7d 20 7b  ge_count }.  } {
7010: 30 7d 0a 0a 20 20 64 6f 5f 74 65 73 74 20 70 72  0}..  do_test pr
7020: 61 67 6d 61 2d 31 34 2e 32 20 7b 0a 20 20 20 20  agma-14.2 {.    
7030: 65 78 65 63 73 71 6c 20 7b 20 0a 20 20 20 20 20  execsql { .     
7040: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 61 62   CREATE TABLE ab
7050: 63 28 61 2c 20 62 2c 20 63 29 3b 0a 20 20 20 20  c(a, b, c);.    
7060: 20 20 50 52 41 47 4d 41 20 70 61 67 65 5f 63 6f    PRAGMA page_co
7070: 75 6e 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b  unt;.    }.  } {
7080: 32 7d 0a 0a 20 20 64 6f 5f 74 65 73 74 20 70 72  2}..  do_test pr
7090: 61 67 6d 61 2d 31 34 2e 33 20 7b 0a 20 20 20 20  agma-14.3 {.    
70a0: 65 78 65 63 73 71 6c 20 7b 20 0a 20 20 20 20 20  execsql { .     
70b0: 20 42 45 47 49 4e 3b 0a 20 20 20 20 20 20 43 52   BEGIN;.      CR
70c0: 45 41 54 45 20 54 41 42 4c 45 20 64 65 66 28 61  EATE TABLE def(a
70d0: 2c 20 62 2c 20 63 29 3b 0a 20 20 20 20 20 20 50  , b, c);.      P
70e0: 52 41 47 4d 41 20 70 61 67 65 5f 63 6f 75 6e 74  RAGMA page_count
70f0: 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 33 7d 0a  ;.    }.  } {3}.
7100: 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .  do_test pragm
7110: 61 2d 31 34 2e 34 20 7b 0a 20 20 20 20 73 65 74  a-14.4 {.    set
7120: 20 70 61 67 65 5f 73 69 7a 65 20 5b 64 62 20 6f   page_size [db o
7130: 6e 65 20 7b 70 72 61 67 6d 61 20 70 61 67 65 5f  ne {pragma page_
7140: 73 69 7a 65 7d 5d 0a 20 20 20 20 65 78 70 72 20  size}].    expr 
7150: 5b 66 69 6c 65 20 73 69 7a 65 20 74 65 73 74 2e  [file size test.
7160: 64 62 5d 20 2f 20 24 70 61 67 65 5f 73 69 7a 65  db] / $page_size
7170: 0a 20 20 7d 20 7b 32 7d 0a 0a 20 20 64 6f 5f 74  .  } {2}..  do_t
7180: 65 73 74 20 70 72 61 67 6d 61 2d 31 34 2e 35 20  est pragma-14.5 
7190: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a  {.    execsql {.
71a0: 20 20 20 20 20 20 52 4f 4c 4c 42 41 43 4b 3b 0a        ROLLBACK;.
71b0: 20 20 20 20 20 20 50 52 41 47 4d 41 20 70 61 67        PRAGMA pag
71c0: 65 5f 63 6f 75 6e 74 3b 0a 20 20 20 20 7d 0a 20  e_count;.    }. 
71d0: 20 7d 20 7b 32 7d 0a 0a 20 20 64 6f 5f 74 65 73   } {2}..  do_tes
71e0: 74 20 70 72 61 67 6d 61 2d 31 34 2e 36 20 7b 0a  t pragma-14.6 {.
71f0: 20 20 20 20 66 69 6c 65 20 64 65 6c 65 74 65 20      file delete 
7200: 2d 66 6f 72 63 65 20 74 65 73 74 32 2e 64 62 0a  -force test2.db.
7210: 20 20 20 20 73 71 6c 69 74 65 33 20 64 62 32 20      sqlite3 db2 
7220: 74 65 73 74 32 2e 64 62 0a 20 20 20 20 65 78 65  test2.db.    exe
7230: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41  csql {.      PRA
7240: 47 4d 41 20 61 75 74 6f 5f 76 61 63 75 75 6d 20  GMA auto_vacuum 
7250: 3d 20 30 3b 0a 20 20 20 20 20 20 43 52 45 41 54  = 0;.      CREAT
7260: 45 20 54 41 42 4c 45 20 74 31 28 61 2c 20 62 2c  E TABLE t1(a, b,
7270: 20 63 29 3b 0a 20 20 20 20 20 20 43 52 45 41 54   c);.      CREAT
7280: 45 20 54 41 42 4c 45 20 74 32 28 61 2c 20 62 2c  E TABLE t2(a, b,
7290: 20 63 29 3b 0a 20 20 20 20 20 20 43 52 45 41 54   c);.      CREAT
72a0: 45 20 54 41 42 4c 45 20 74 33 28 61 2c 20 62 2c  E TABLE t3(a, b,
72b0: 20 63 29 3b 0a 20 20 20 20 20 20 43 52 45 41 54   c);.      CREAT
72c0: 45 20 54 41 42 4c 45 20 74 34 28 61 2c 20 62 2c  E TABLE t4(a, b,
72d0: 20 63 29 3b 0a 20 20 20 20 7d 20 64 62 32 0a 20   c);.    } db2. 
72e0: 20 20 20 64 62 32 20 63 6c 6f 73 65 0a 20 20 20     db2 close.   
72f0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20   execsql {.     
7300: 20 41 54 54 41 43 48 20 27 74 65 73 74 32 2e 64   ATTACH 'test2.d
7310: 62 27 20 41 53 20 61 75 78 3b 0a 20 20 20 20 20  b' AS aux;.     
7320: 20 50 52 41 47 4d 41 20 61 75 78 2e 70 61 67 65   PRAGMA aux.page
7330: 5f 63 6f 75 6e 74 3b 0a 20 20 20 20 7d 20 0a 20  _count;.    } . 
7340: 20 7d 20 7b 35 7d 0a 7d 0a 0a 23 20 54 65 73 74   } {5}.}..# Test
7350: 20 74 68 61 74 20 74 68 65 20 76 61 6c 75 65 20   that the value 
7360: 73 65 74 20 75 73 69 6e 67 20 74 68 65 20 63 61  set using the ca
7370: 63 68 65 5f 73 69 7a 65 20 70 72 61 67 6d 61 20  che_size pragma 
7380: 69 73 20 6e 6f 74 20 72 65 73 65 74 20 77 68 65  is not reset whe
7390: 6e 20 74 68 65 0a 23 20 73 63 68 65 6d 61 20 69  n the.# schema i
73a0: 73 20 72 65 6c 6f 61 64 65 64 2e 0a 23 0a 69 66  s reloaded..#.if
73b0: 63 61 70 61 62 6c 65 20 70 61 67 65 72 5f 70 72  capable pager_pr
73c0: 61 67 6d 61 73 20 7b 0a 20 20 64 62 20 63 6c 6f  agmas {.  db clo
73d0: 73 65 0a 20 20 73 71 6c 69 74 65 33 20 64 62 20  se.  sqlite3 db 
73e0: 74 65 73 74 2e 64 62 0a 20 20 64 6f 5f 74 65 73  test.db.  do_tes
73f0: 74 20 70 72 61 67 6d 61 2d 31 35 2e 31 20 7b 0a  t pragma-15.1 {.
7400: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20      execsql {.  
7410: 20 20 20 20 50 52 41 47 4d 41 20 63 61 63 68 65      PRAGMA cache
7420: 5f 73 69 7a 65 3d 35 39 3b 0a 20 20 20 20 20 20  _size=59;.      
7430: 50 52 41 47 4d 41 20 63 61 63 68 65 5f 73 69 7a  PRAGMA cache_siz
7440: 65 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 35 39  e;.    }.  } {59
7450: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67  }.  do_test prag
7460: 6d 61 2d 31 35 2e 32 20 7b 0a 20 20 20 20 73 71  ma-15.2 {.    sq
7470: 6c 69 74 65 33 20 64 62 32 20 74 65 73 74 2e 64  lite3 db2 test.d
7480: 62 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a  b.    execsql {.
7490: 20 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42        CREATE TAB
74a0: 4c 45 20 6e 65 77 74 61 62 6c 65 28 61 2c 20 62  LE newtable(a, b
74b0: 2c 20 63 29 3b 0a 20 20 20 20 7d 20 64 62 32 0a  , c);.    } db2.
74c0: 20 20 20 20 64 62 32 20 63 6c 6f 73 65 0a 20 20      db2 close.  
74d0: 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70  } {}.  do_test p
74e0: 72 61 67 6d 61 2d 31 35 2e 33 20 7b 0a 20 20 20  ragma-15.3 {.   
74f0: 20 23 20 45 76 61 6c 75 61 74 69 6e 67 20 74 68   # Evaluating th
7500: 69 73 20 73 74 61 74 65 6d 65 6e 74 20 77 69 6c  is statement wil
7510: 6c 20 63 61 75 73 65 20 74 68 65 20 73 63 68 65  l cause the sche
7520: 6d 61 20 74 6f 20 62 65 20 72 65 6c 6f 61 64 65  ma to be reloade
7530: 64 20 28 62 65 63 61 75 73 65 0a 20 20 20 20 23  d (because.    #
7540: 20 74 68 65 20 73 63 68 65 6d 61 20 77 61 73 20   the schema was 
7550: 63 68 61 6e 67 65 64 20 62 79 20 61 6e 6f 74 68  changed by anoth
7560: 65 72 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 6e  er connection in
7570: 20 70 72 61 67 6d 61 2d 31 35 2e 32 29 2e 20 41   pragma-15.2). A
7580: 74 20 6f 6e 65 0a 20 20 20 20 23 20 70 6f 69 6e  t one.    # poin
7590: 74 20 74 68 65 72 65 20 77 61 73 20 61 20 62 75  t there was a bu
75a0: 67 20 74 68 61 74 20 72 65 73 65 74 20 74 68 65  g that reset the
75b0: 20 63 61 63 68 65 5f 73 69 7a 65 20 74 6f 20 69   cache_size to i
75c0: 74 73 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65  ts default value
75d0: 0a 20 20 20 20 23 20 77 68 65 6e 20 74 68 69 73  .    # when this
75e0: 20 68 61 70 70 65 6e 65 64 2e 20 0a 20 20 20 20   happened. .    
75f0: 65 78 65 63 73 71 6c 20 7b 20 53 45 4c 45 43 54  execsql { SELECT
7600: 20 2a 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d   * FROM sqlite_m
7610: 61 73 74 65 72 20 7d 0a 20 20 20 20 65 78 65 63  aster }.    exec
7620: 73 71 6c 20 7b 20 50 52 41 47 4d 41 20 63 61 63  sql { PRAGMA cac
7630: 68 65 5f 73 69 7a 65 20 7d 0a 20 20 7d 20 7b 35  he_size }.  } {5
7640: 39 7d 0a 7d 0a 0a 23 20 52 65 73 65 74 20 74 68  9}.}..# Reset th
7650: 65 20 73 71 6c 69 74 65 33 5f 74 65 6d 70 5f 64  e sqlite3_temp_d
7660: 69 72 65 63 74 6f 72 79 20 76 61 72 69 61 62 6c  irectory variabl
7670: 65 20 66 6f 72 20 74 68 65 20 6e 65 78 74 20 72  e for the next r
7680: 75 6e 20 6f 66 20 74 65 73 74 73 3a 0a 73 71 6c  un of tests:.sql
7690: 69 74 65 33 20 64 62 58 20 3a 6d 65 6d 6f 72 79  ite3 dbX :memory
76a0: 3a 0a 64 62 58 20 65 76 61 6c 20 7b 50 52 41 47  :.dbX eval {PRAG
76b0: 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69  MA temp_store_di
76c0: 72 65 63 74 6f 72 79 20 3d 20 22 22 7d 0a 64 62  rectory = ""}.db
76d0: 58 20 63 6c 6f 73 65 0a 0a 69 66 63 61 70 61 62  X close..ifcapab
76e0: 6c 65 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 70 72  le lock_proxy_pr
76f0: 61 67 6d 61 73 26 26 70 72 65 66 65 72 5f 70 72  agmas&&prefer_pr
7700: 6f 78 79 5f 6c 6f 63 6b 69 6e 67 20 7b 0a 20 20  oxy_locking {.  
7710: 73 65 74 20 73 71 6c 69 74 65 5f 68 6f 73 74 69  set sqlite_hosti
7720: 64 5f 6e 75 6d 20 31 0a 0a 20 20 73 65 74 20 75  d_num 1..  set u
7730: 73 69 6e 67 5f 70 72 6f 78 79 20 30 0a 20 20 66  sing_proxy 0.  f
7740: 6f 72 65 61 63 68 20 7b 6e 61 6d 65 20 76 61 6c  oreach {name val
7750: 75 65 7d 20 5b 61 72 72 61 79 20 67 65 74 20 65  ue} [array get e
7760: 6e 76 20 53 51 4c 49 54 45 5f 46 4f 52 43 45 5f  nv SQLITE_FORCE_
7770: 50 52 4f 58 59 5f 4c 4f 43 4b 49 4e 47 5d 20 7b  PROXY_LOCKING] {
7780: 0a 20 20 20 20 73 65 74 20 75 73 69 6e 67 5f 70  .    set using_p
7790: 72 6f 78 79 20 24 76 61 6c 75 65 0a 20 20 7d 0a  roxy $value.  }.
77a0: 0a 20 20 23 20 54 65 73 74 20 74 68 65 20 6c 6f  .  # Test the lo
77b0: 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 20 70 72  ck_proxy_file pr
77c0: 61 67 6d 61 73 2e 0a 20 20 23 0a 20 20 64 62 20  agmas..  #.  db 
77d0: 63 6c 6f 73 65 0a 20 20 73 65 74 20 65 6e 76 28  close.  set env(
77e0: 53 51 4c 49 54 45 5f 46 4f 52 43 45 5f 50 52 4f  SQLITE_FORCE_PRO
77f0: 58 59 5f 4c 4f 43 4b 49 4e 47 29 20 22 30 22 0a  XY_LOCKING) "0".
7800: 0a 20 20 73 71 6c 69 74 65 33 20 64 62 20 74 65  .  sqlite3 db te
7810: 73 74 2e 64 62 0a 20 20 64 6f 5f 74 65 73 74 20  st.db.  do_test 
7820: 70 72 61 67 6d 61 2d 31 36 2e 31 20 7b 0a 20 20  pragma-16.1 {.  
7830: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
7840: 20 20 50 52 41 47 4d 41 20 6c 6f 63 6b 5f 70 72    PRAGMA lock_pr
7850: 6f 78 79 5f 66 69 6c 65 3d 22 6d 79 6c 69 74 74  oxy_file="mylitt
7860: 6c 65 70 72 6f 78 79 22 3b 0a 20 20 20 20 20 20  leproxy";.      
7870: 73 65 6c 65 63 74 20 2a 20 66 72 6f 6d 20 73 71  select * from sq
7880: 6c 69 74 65 5f 6d 61 73 74 65 72 3b 0a 20 20 20  lite_master;.   
7890: 20 7d 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b   }.    execsql {
78a0: 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 6c 6f  .      PRAGMA lo
78b0: 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 3b 0a 20  ck_proxy_file;. 
78c0: 20 20 20 7d 20 0a 20 20 7d 20 7b 6d 79 6c 69 74     } .  } {mylit
78d0: 74 6c 65 70 72 6f 78 79 7d 0a 0a 20 20 64 6f 5f  tleproxy}..  do_
78e0: 74 65 73 74 20 70 72 61 67 6d 61 2d 31 36 2e 32  test pragma-16.2
78f0: 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 20 64   {.    sqlite3 d
7900: 62 32 20 74 65 73 74 2e 64 62 0a 20 20 20 20 65  b2 test.db.    e
7910: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50  xecsql {.      P
7920: 52 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78 79  RAGMA lock_proxy
7930: 5f 66 69 6c 65 3d 22 6d 79 6c 69 74 74 6c 65 70  _file="mylittlep
7940: 72 6f 78 79 22 3b 0a 20 20 20 20 7d 20 64 62 32  roxy";.    } db2
7950: 0a 20 20 7d 20 7b 7d 0a 0a 20 20 64 62 32 20 63  .  } {}..  db2 c
7960: 6c 6f 73 65 0a 20 20 64 6f 5f 74 65 73 74 20 70  lose.  do_test p
7970: 72 61 67 6d 61 2d 31 36 2e 32 2e 31 20 7b 0a 20  ragma-16.2.1 {. 
7980: 20 20 20 73 71 6c 69 74 65 33 20 64 62 32 20 74     sqlite3 db2 t
7990: 65 73 74 2e 64 62 0a 20 20 20 20 65 78 65 63 73  est.db.    execs
79a0: 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d  ql {.      PRAGM
79b0: 41 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c  A lock_proxy_fil
79c0: 65 3d 22 3a 61 75 74 6f 3a 22 3b 0a 20 20 20 20  e=":auto:";.    
79d0: 20 20 73 65 6c 65 63 74 20 2a 20 66 72 6f 6d 20    select * from 
79e0: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 3b 0a 20  sqlite_master;. 
79f0: 20 20 20 7d 20 64 62 32 0a 20 20 20 20 65 78 65     } db2.    exe
7a00: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41  csql {.      PRA
7a10: 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66  GMA lock_proxy_f
7a20: 69 6c 65 3b 0a 20 20 20 20 7d 20 64 62 32 0a 20  ile;.    } db2. 
7a30: 20 7d 20 7b 6d 79 6c 69 74 74 6c 65 70 72 6f 78   } {mylittleprox
7a40: 79 7d 0a 0a 20 20 64 62 32 20 63 6c 6f 73 65 0a  y}..  db2 close.
7a50: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
7a60: 2d 31 36 2e 33 20 7b 0a 20 20 20 20 73 71 6c 69  -16.3 {.    sqli
7a70: 74 65 33 20 64 62 32 20 74 65 73 74 2e 64 62 0a  te3 db2 test.db.
7a80: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20      execsql {.  
7a90: 20 20 20 20 50 52 41 47 4d 41 20 6c 6f 63 6b 5f      PRAGMA lock_
7aa0: 70 72 6f 78 79 5f 66 69 6c 65 3d 22 6d 79 6f 74  proxy_file="myot
7ab0: 68 65 72 70 72 6f 78 79 22 3b 0a 20 20 20 20 7d  herproxy";.    }
7ac0: 20 64 62 32 0a 20 20 20 20 63 61 74 63 68 73 71   db2.    catchsq
7ad0: 6c 20 7b 0a 20 20 20 20 20 20 73 65 6c 65 63 74  l {.      select
7ae0: 20 2a 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f 6d   * from sqlite_m
7af0: 61 73 74 65 72 3b 0a 20 20 20 20 7d 20 64 62 32  aster;.    } db2
7b00: 0a 20 20 7d 20 7b 31 20 7b 64 61 74 61 62 61 73  .  } {1 {databas
7b10: 65 20 69 73 20 6c 6f 63 6b 65 64 7d 7d 0a 0a 20  e is locked}}.. 
7b20: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
7b30: 31 36 2e 34 20 7b 0a 20 20 20 20 64 62 32 20 63  16.4 {.    db2 c
7b40: 6c 6f 73 65 0a 20 20 20 20 64 62 20 63 6c 6f 73  lose.    db clos
7b50: 65 0a 20 20 20 20 73 71 6c 69 74 65 33 20 64 62  e.    sqlite3 db
7b60: 32 20 74 65 73 74 2e 64 62 0a 20 20 20 20 65 78  2 test.db.    ex
7b70: 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52  ecsql {.      PR
7b80: 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f  AGMA lock_proxy_
7b90: 66 69 6c 65 3d 22 6d 79 6f 72 69 67 69 6e 61 6c  file="myoriginal
7ba0: 70 72 6f 78 79 22 3b 0a 20 20 20 20 20 20 50 52  proxy";.      PR
7bb0: 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f  AGMA lock_proxy_
7bc0: 66 69 6c 65 3d 22 6d 79 6f 74 68 65 72 70 72 6f  file="myotherpro
7bd0: 78 79 22 3b 0a 20 20 20 20 20 20 50 52 41 47 4d  xy";.      PRAGM
7be0: 41 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c  A lock_proxy_fil
7bf0: 65 3b 0a 20 20 20 20 7d 20 64 62 32 0a 20 20 7d  e;.    } db2.  }
7c00: 20 7b 6d 79 6f 74 68 65 72 70 72 6f 78 79 7d 0a   {myotherproxy}.
7c10: 0a 20 20 64 62 32 20 63 6c 6f 73 65 0a 20 20 73  .  db2 close.  s
7c20: 65 74 20 65 6e 76 28 53 51 4c 49 54 45 5f 46 4f  et env(SQLITE_FO
7c30: 52 43 45 5f 50 52 4f 58 59 5f 4c 4f 43 4b 49 4e  RCE_PROXY_LOCKIN
7c40: 47 29 20 22 31 22 0a 20 20 64 6f 5f 74 65 73 74  G) "1".  do_test
7c50: 20 70 72 61 67 6d 61 2d 31 36 2e 35 20 7b 0a 20   pragma-16.5 {. 
7c60: 20 20 20 73 71 6c 69 74 65 33 20 64 62 32 20 74     sqlite3 db2 t
7c70: 65 73 74 2e 64 62 0a 20 20 20 20 65 78 65 63 73  est.db.    execs
7c80: 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d  ql {.      PRAGM
7c90: 41 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c  A lock_proxy_fil
7ca0: 65 3d 22 3a 61 75 74 6f 3a 22 3b 0a 20 20 20 20  e=":auto:";.    
7cb0: 20 20 50 52 41 47 4d 41 20 6c 6f 63 6b 5f 70 72    PRAGMA lock_pr
7cc0: 6f 78 79 5f 66 69 6c 65 3b 0a 20 20 20 20 7d 20  oxy_file;.    } 
7cd0: 64 62 32 0a 20 20 7d 20 7b 6d 79 6f 74 68 65 72  db2.  } {myother
7ce0: 70 72 6f 78 79 7d 0a 20 20 0a 20 20 64 6f 5f 74  proxy}.  .  do_t
7cf0: 65 73 74 20 70 72 61 67 6d 61 2d 31 36 2e 36 20  est pragma-16.6 
7d00: 7b 0a 20 20 20 20 64 62 32 20 63 6c 6f 73 65 0a  {.    db2 close.
7d10: 20 20 20 20 73 71 6c 69 74 65 33 20 64 62 32 20      sqlite3 db2 
7d20: 74 65 73 74 32 2e 64 62 0a 20 20 20 20 73 65 74  test2.db.    set
7d30: 20 6c 6f 63 6b 70 61 74 68 20 5b 65 78 65 63 73   lockpath [execs
7d40: 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d  ql {.      PRAGM
7d50: 41 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c  A lock_proxy_fil
7d60: 65 3d 22 3a 61 75 74 6f 3a 22 3b 0a 20 20 20 20  e=":auto:";.    
7d70: 20 20 50 52 41 47 4d 41 20 6c 6f 63 6b 5f 70 72    PRAGMA lock_pr
7d80: 6f 78 79 5f 66 69 6c 65 3b 0a 20 20 20 20 7d 20  oxy_file;.    } 
7d90: 64 62 32 5d 0a 20 20 20 20 73 74 72 69 6e 67 20  db2].    string 
7da0: 6d 61 74 63 68 20 22 2a 74 65 73 74 32 2e 64 62  match "*test2.db
7db0: 3a 61 75 74 6f 3a 22 20 24 6c 6f 63 6b 70 61 74  :auto:" $lockpat
7dc0: 68 0a 20 20 7d 20 7b 31 7d 0a 20 20 0a 20 20 73  h.  } {1}.  .  s
7dd0: 65 74 20 73 71 6c 69 74 65 5f 68 6f 73 74 69 64  et sqlite_hostid
7de0: 5f 6e 75 6d 20 32 0a 20 20 64 6f 5f 74 65 73 74  _num 2.  do_test
7df0: 20 70 72 61 67 6d 61 2d 31 36 2e 37 20 7b 0a 20   pragma-16.7 {. 
7e00: 20 20 20 6c 69 73 74 20 5b 63 61 74 63 68 20 7b     list [catch {
7e10: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 20 64  .      sqlite3 d
7e20: 62 20 74 65 73 74 32 2e 64 62 0a 20 20 20 20 20  b test2.db.     
7e30: 20 65 78 65 63 73 71 6c 20 7b 20 0a 20 20 20 20   execsql { .    
7e40: 20 20 20 20 50 52 41 47 4d 41 20 6c 6f 63 6b 5f      PRAGMA lock_
7e50: 70 72 6f 78 79 5f 66 69 6c 65 3d 22 3a 61 75 74  proxy_file=":aut
7e60: 6f 3a 22 3b 0a 20 20 20 20 20 20 20 20 73 65 6c  o:";.        sel
7e70: 65 63 74 20 2a 20 66 72 6f 6d 20 73 71 6c 69 74  ect * from sqlit
7e80: 65 5f 6d 61 73 74 65 72 3b 0a 20 20 20 20 20 20  e_master;.      
7e90: 7d 0a 20 20 20 20 7d 20 6d 73 67 5d 20 24 6d 73  }.    } msg] $ms
7ea0: 67 0a 20 20 7d 20 7b 31 20 7b 64 61 74 61 62 61  g.  } {1 {databa
7eb0: 73 65 20 69 73 20 6c 6f 63 6b 65 64 7d 7d 0a 20  se is locked}}. 
7ec0: 20 64 62 20 63 6c 6f 73 65 0a 20 20 0a 20 20 64   db close.  .  d
7ed0: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 36  o_test pragma-16
7ee0: 2e 38 20 7b 0a 20 20 20 20 6c 69 73 74 20 5b 63  .8 {.    list [c
7ef0: 61 74 63 68 20 7b 0a 20 20 20 20 20 20 73 71 6c  atch {.      sql
7f00: 69 74 65 33 20 64 62 20 74 65 73 74 32 2e 64 62  ite3 db test2.db
7f10: 0a 20 20 20 20 20 20 65 78 65 63 73 71 6c 20 7b  .      execsql {
7f20: 20 73 65 6c 65 63 74 20 2a 20 66 72 6f 6d 20 73   select * from s
7f30: 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 7d 20 0a  qlite_master } .
7f40: 20 20 20 20 7d 20 6d 73 67 5d 20 24 6d 73 67 0a      } msg] $msg.
7f50: 20 20 7d 20 7b 31 20 7b 64 61 74 61 62 61 73 65    } {1 {database
7f60: 20 69 73 20 6c 6f 63 6b 65 64 7d 7d 0a 0a 20 20   is locked}}..  
7f70: 64 62 32 20 63 6c 6f 73 65 0a 20 20 64 6f 5f 74  db2 close.  do_t
7f80: 65 73 74 20 70 72 61 67 6d 61 2d 31 36 2e 38 2e  est pragma-16.8.
7f90: 31 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  1 {.    execsql 
7fa0: 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 6c  {.      PRAGMA l
7fb0: 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 3d 22  ock_proxy_file="
7fc0: 79 65 74 61 6e 6f 74 68 65 72 70 72 6f 78 79 22  yetanotherproxy"
7fd0: 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 6c  ;.      PRAGMA l
7fe0: 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 3b 0a  ock_proxy_file;.
7ff0: 20 20 20 20 7d 20 0a 20 20 7d 20 7b 79 65 74 61      } .  } {yeta
8000: 6e 6f 74 68 65 72 70 72 6f 78 79 7d 0a 20 20 64  notherproxy}.  d
8010: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 36  o_test pragma-16
8020: 2e 38 2e 32 20 7b 0a 20 20 20 20 65 78 65 63 73  .8.2 {.    execs
8030: 71 6c 20 7b 0a 20 20 20 20 20 20 63 72 65 61 74  ql {.      creat
8040: 65 20 74 61 62 6c 65 20 6d 69 6e 65 28 78 29 3b  e table mine(x);
8050: 0a 20 20 20 20 7d 20 0a 20 20 7d 20 7b 7d 0a 0a  .    } .  } {}..
8060: 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 64 6f 5f    db close.  do_
8070: 74 65 73 74 20 70 72 61 67 6d 61 2d 31 36 2e 39  test pragma-16.9
8080: 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 20 64   {.    sqlite3 d
8090: 62 20 70 72 6f 78 79 74 65 73 74 2e 64 62 0a 20  b proxytest.db. 
80a0: 20 20 20 73 65 74 20 6c 6f 63 6b 70 61 74 68 32     set lockpath2
80b0: 20 5b 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20   [execsql {.    
80c0: 20 20 50 52 41 47 4d 41 20 6c 6f 63 6b 5f 70 72    PRAGMA lock_pr
80d0: 6f 78 79 5f 66 69 6c 65 3d 22 3a 61 75 74 6f 3a  oxy_file=":auto:
80e0: 22 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20  ";.      PRAGMA 
80f0: 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 3b  lock_proxy_file;
8100: 0a 20 20 20 20 7d 20 64 62 5d 0a 20 20 20 20 73  .    } db].    s
8110: 74 72 69 6e 67 20 6d 61 74 63 68 20 22 2a 70 72  tring match "*pr
8120: 6f 78 79 74 65 73 74 2e 64 62 3a 61 75 74 6f 3a  oxytest.db:auto:
8130: 22 20 24 6c 6f 63 6b 70 61 74 68 32 0a 20 20 7d  " $lockpath2.  }
8140: 20 7b 31 7d 0a 0a 20 20 73 65 74 20 65 6e 76 28   {1}..  set env(
8150: 53 51 4c 49 54 45 5f 46 4f 52 43 45 5f 50 52 4f  SQLITE_FORCE_PRO
8160: 58 59 5f 4c 4f 43 4b 49 4e 47 29 20 24 75 73 69  XY_LOCKING) $usi
8170: 6e 67 5f 70 72 6f 78 79 0a 20 20 73 65 74 20 73  ng_proxy.  set s
8180: 71 6c 69 74 65 5f 68 6f 73 74 69 64 5f 6e 75 6d  qlite_hostid_num
8190: 20 30 0a 7d 0a 0a 23 20 50 61 72 73 69 6e 67 20   0.}..# Parsing 
81a0: 6f 66 20 61 75 74 6f 5f 76 61 63 75 75 6d 20 73  of auto_vacuum s
81b0: 65 74 74 69 6e 67 73 2e 0a 23 0a 66 6f 72 65 61  ettings..#.forea
81c0: 63 68 20 7b 61 75 74 6f 76 61 63 5f 73 65 74 74  ch {autovac_sett
81d0: 69 6e 67 20 76 61 6c 7d 20 7b 0a 20 20 30 20 30  ing val} {.  0 0
81e0: 0a 20 20 31 20 31 0a 20 20 32 20 32 0a 20 20 33  .  1 1.  2 2.  3
81f0: 20 30 0a 20 20 2d 31 20 30 0a 20 20 6e 6f 6e 65   0.  -1 0.  none
8200: 20 30 0a 20 20 4e 4f 4e 45 20 30 0a 20 20 4e 6f   0.  NONE 0.  No
8210: 4e 65 20 30 0a 20 20 66 75 6c 6c 20 31 0a 20 20  Ne 0.  full 1.  
8220: 46 55 4c 4c 20 31 0a 20 20 69 6e 63 72 65 6d 65  FULL 1.  increme
8230: 6e 74 61 6c 20 32 0a 20 20 49 4e 43 52 45 4d 45  ntal 2.  INCREME
8240: 4e 54 41 4c 20 32 0a 20 20 2d 31 32 33 34 20 30  NTAL 2.  -1234 0
8250: 0a 20 20 31 32 33 34 20 30 0a 7d 20 7b 0a 20 20  .  1234 0.} {.  
8260: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31  do_test pragma-1
8270: 37 2e 31 2e 24 61 75 74 6f 76 61 63 5f 73 65 74  7.1.$autovac_set
8280: 74 69 6e 67 20 7b 0a 20 20 20 20 63 61 74 63 68  ting {.    catch
8290: 20 7b 64 62 20 63 6c 6f 73 65 7d 0a 20 20 20 20   {db close}.    
82a0: 73 71 6c 69 74 65 33 20 64 62 20 3a 6d 65 6d 6f  sqlite3 db :memo
82b0: 72 79 3a 0a 20 20 20 20 65 78 65 63 73 71 6c 20  ry:.    execsql 
82c0: 22 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 61  ".      PRAGMA a
82d0: 75 74 6f 5f 76 61 63 75 75 6d 3d 24 3a 3a 61 75  uto_vacuum=$::au
82e0: 74 6f 76 61 63 5f 73 65 74 74 69 6e 67 3b 0a 20  tovac_setting;. 
82f0: 20 20 20 20 20 50 52 41 47 4d 41 20 61 75 74 6f       PRAGMA auto
8300: 5f 76 61 63 75 75 6d 3b 0a 20 20 20 20 22 0a 20  _vacuum;.    ". 
8310: 20 7d 20 24 76 61 6c 0a 7d 0a 0a 23 20 50 61 72   } $val.}..# Par
8320: 73 69 6e 67 20 6f 66 20 74 65 6d 70 5f 73 74 6f  sing of temp_sto
8330: 72 65 20 73 65 74 74 69 6e 67 73 2e 0a 23 0a 66  re settings..#.f
8340: 6f 72 65 61 63 68 20 7b 74 65 6d 70 5f 73 65 74  oreach {temp_set
8350: 74 69 6e 67 20 76 61 6c 7d 20 7b 0a 20 20 30 20  ting val} {.  0 
8360: 30 0a 20 20 31 20 31 0a 20 20 32 20 32 0a 20 20  0.  1 1.  2 2.  
8370: 33 20 30 0a 20 20 2d 31 20 30 0a 20 20 66 69 6c  3 0.  -1 0.  fil
8380: 65 20 31 0a 20 20 46 49 4c 45 20 31 0a 20 20 66  e 1.  FILE 1.  f
8390: 49 6c 45 20 31 0a 20 20 6d 65 6d 6f 72 79 20 32  IlE 1.  memory 2
83a0: 0a 20 20 4d 45 4d 4f 52 59 20 32 0a 20 20 4d 65  .  MEMORY 2.  Me
83b0: 4d 6f 52 79 20 32 0a 7d 20 7b 0a 20 20 64 6f 5f  MoRy 2.} {.  do_
83c0: 74 65 73 74 20 70 72 61 67 6d 61 2d 31 38 2e 31  test pragma-18.1
83d0: 2e 24 74 65 6d 70 5f 73 65 74 74 69 6e 67 20 7b  .$temp_setting {
83e0: 0a 20 20 20 20 63 61 74 63 68 20 7b 64 62 20 63  .    catch {db c
83f0: 6c 6f 73 65 7d 0a 20 20 20 20 73 71 6c 69 74 65  lose}.    sqlite
8400: 33 20 64 62 20 3a 6d 65 6d 6f 72 79 3a 0a 20 20  3 db :memory:.  
8410: 20 20 65 78 65 63 73 71 6c 20 22 0a 20 20 20 20    execsql ".    
8420: 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74    PRAGMA temp_st
8430: 6f 72 65 3d 24 3a 3a 74 65 6d 70 5f 73 65 74 74  ore=$::temp_sett
8440: 69 6e 67 3b 0a 20 20 20 20 20 20 50 52 41 47 4d  ing;.      PRAGM
8450: 41 20 74 65 6d 70 5f 73 74 6f 72 65 3d 24 3a 3a  A temp_store=$::
8460: 74 65 6d 70 5f 73 65 74 74 69 6e 67 3b 0a 20 20  temp_setting;.  
8470: 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f      PRAGMA temp_
8480: 73 74 6f 72 65 3b 0a 20 20 20 20 22 0a 20 20 7d  store;.    ".  }
8490: 20 24 76 61 6c 0a 7d 0a 0a 66 69 6e 69 73 68 5f   $val.}..finish_
84a0: 74 65 73 74 0a                                   test.