/ Hex Artifact Content
Login

Artifact b55931bbd5dd543e56fd942dbf4b7439619b09a6:


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 36 35 20 32 30 30 38 2f 30 38 2f 32 30 20 31  .65 2008/08/20 1
0200: 36 3a 33 34 3a 32 34 20 64 61 6e 69 65 6c 6b 31  6:34:24 danielk1
0210: 39 37 37 20 45 78 70 20 24 0a 0a 73 65 74 20 74  977 Exp $..set t
0220: 65 73 74 64 69 72 20 5b 66 69 6c 65 20 64 69 72  estdir [file dir
0230: 6e 61 6d 65 20 24 61 72 67 76 30 5d 0a 73 6f 75  name $argv0].sou
0240: 72 63 65 20 24 74 65 73 74 64 69 72 2f 74 65 73  rce $testdir/tes
0250: 74 65 72 2e 74 63 6c 0a 0a 23 20 54 65 73 74 20  ter.tcl..# Test 
0260: 6f 72 67 61 6e 69 7a 61 74 69 6f 6e 3a 0a 23 0a  organization:.#.
0270: 23 20 70 72 61 67 6d 61 2d 31 2e 2a 3a 20 54 65  # pragma-1.*: Te
0280: 73 74 20 63 61 63 68 65 5f 73 69 7a 65 2c 20 64  st cache_size, d
0290: 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a  efault_cache_siz
02a0: 65 20 61 6e 64 20 73 79 6e 63 68 72 6f 6e 6f 75  e and synchronou
02b0: 73 20 6f 6e 20 6d 61 69 6e 20 64 62 2e 0a 23 20  s on main db..# 
02c0: 70 72 61 67 6d 61 2d 32 2e 2a 3a 20 54 65 73 74  pragma-2.*: Test
02d0: 20 73 79 6e 63 68 72 6f 6e 6f 75 73 20 6f 6e 20   synchronous on 
02e0: 61 74 74 61 63 68 65 64 20 64 62 2e 0a 23 20 70  attached db..# p
02f0: 72 61 67 6d 61 2d 33 2e 2a 3a 20 54 65 73 74 20  ragma-3.*: Test 
0300: 64 65 74 65 63 74 69 6f 6e 20 6f 66 20 74 61 62  detection of tab
0310: 6c 65 2f 69 6e 64 65 78 20 69 6e 63 6f 6e 73 69  le/index inconsi
0320: 73 74 65 6e 63 79 20 62 79 20 69 6e 74 65 67 72  stency by integr
0330: 69 74 79 5f 63 68 65 63 6b 2e 0a 23 20 70 72 61  ity_check..# pra
0340: 67 6d 61 2d 34 2e 2a 3a 20 54 65 73 74 20 63 61  gma-4.*: Test ca
0350: 63 68 65 5f 73 69 7a 65 20 61 6e 64 20 64 65 66  che_size and def
0360: 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65 20  ault_cache_size 
0370: 6f 6e 20 61 74 74 61 63 68 65 64 20 64 62 2e 0a  on attached db..
0380: 23 20 70 72 61 67 6d 61 2d 35 2e 2a 3a 20 54 65  # pragma-5.*: Te
0390: 73 74 20 74 68 61 74 20 70 72 61 67 6d 61 20 73  st that pragma s
03a0: 79 6e 63 68 72 6f 6e 6f 75 73 20 6d 61 79 20 6e  ynchronous may n
03b0: 6f 74 20 62 65 20 75 73 65 64 20 69 6e 73 69 64  ot be used insid
03c0: 65 20 6f 66 20 61 0a 23 20 20 20 20 20 20 20 20  e of a.#        
03d0: 20 20 20 20 20 74 72 61 6e 73 61 63 74 69 6f 6e       transaction
03e0: 2e 0a 23 20 70 72 61 67 6d 61 2d 36 2e 2a 3a 20  ..# pragma-6.*: 
03f0: 54 65 73 74 20 73 63 68 65 6d 61 2d 71 75 65 72  Test schema-quer
0400: 79 20 70 72 61 67 6d 61 73 2e 0a 23 20 70 72 61  y pragmas..# pra
0410: 67 6d 61 2d 37 2e 2a 3a 20 4d 69 73 63 65 6c 6c  gma-7.*: Miscell
0420: 61 6e 65 6f 75 73 20 74 65 73 74 73 2e 0a 23 20  aneous tests..# 
0430: 70 72 61 67 6d 61 2d 38 2e 2a 3a 20 54 65 73 74  pragma-8.*: Test
0440: 20 75 73 65 72 5f 76 65 72 73 69 6f 6e 20 61 6e   user_version an
0450: 64 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e  d schema_version
0460: 20 70 72 61 67 6d 61 73 2e 0a 23 20 70 72 61 67   pragmas..# prag
0470: 6d 61 2d 39 2e 2a 3a 20 54 65 73 74 20 74 65 6d  ma-9.*: Test tem
0480: 70 5f 73 74 6f 72 65 20 61 6e 64 20 74 65 6d 70  p_store and temp
0490: 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79  _store_directory
04a0: 2e 0a 23 20 70 72 61 67 6d 61 2d 31 30 2e 2a 3a  ..# pragma-10.*:
04b0: 20 54 65 73 74 20 74 68 65 20 63 6f 75 6e 74 5f   Test the count_
04c0: 63 68 61 6e 67 65 73 20 70 72 61 67 6d 61 20 69  changes pragma i
04d0: 6e 20 74 68 65 20 70 72 65 73 65 6e 63 65 20 6f  n the presence o
04e0: 66 20 74 72 69 67 67 65 72 73 2e 0a 23 20 70 72  f triggers..# pr
04f0: 61 67 6d 61 2d 31 31 2e 2a 3a 20 54 65 73 74 20  agma-11.*: Test 
0500: 74 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 5f 6c 69  the collation_li
0510: 73 74 20 70 72 61 67 6d 61 2e 0a 23 20 70 72 61  st pragma..# pra
0520: 67 6d 61 2d 31 34 2e 2a 3a 20 54 65 73 74 20 74  gma-14.*: Test t
0530: 68 65 20 70 61 67 65 5f 63 6f 75 6e 74 20 70 72  he page_count pr
0540: 61 67 6d 61 2e 0a 23 20 70 72 61 67 6d 61 2d 31  agma..# pragma-1
0550: 35 2e 2a 3a 20 54 65 73 74 20 74 68 61 74 20 74  5.*: Test that t
0560: 68 65 20 76 61 6c 75 65 20 73 65 74 20 75 73 69  he value set usi
0570: 6e 67 20 74 68 65 20 63 61 63 68 65 5f 73 69 7a  ng the cache_siz
0580: 65 20 70 72 61 67 6d 61 20 69 73 20 6e 6f 74 0a  e pragma is not.
0590: 23 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72  #              r
05a0: 65 73 65 74 20 77 68 65 6e 20 74 68 65 20 73 63  eset when the sc
05b0: 68 65 6d 61 20 69 73 20 72 65 6c 6f 61 64 65 64  hema is reloaded
05c0: 2e 0a 23 0a 0a 69 66 63 61 70 61 62 6c 65 20 21  ..#..ifcapable !
05d0: 70 72 61 67 6d 61 20 7b 0a 20 20 66 69 6e 69 73  pragma {.  finis
05e0: 68 5f 74 65 73 74 0a 20 20 72 65 74 75 72 6e 0a  h_test.  return.
05f0: 7d 0a 0a 23 20 44 65 6c 65 74 65 20 74 68 65 20  }..# Delete the 
0600: 70 72 65 65 78 69 73 74 69 6e 67 20 64 61 74 61  preexisting data
0610: 62 61 73 65 20 74 6f 20 61 76 6f 69 64 20 74 68  base to avoid th
0620: 65 20 73 70 65 63 69 61 6c 20 73 65 74 75 70 0a  e special setup.
0630: 23 20 74 68 61 74 20 74 68 65 20 22 61 6c 6c 2e  # that the "all.
0640: 74 65 73 74 22 20 73 63 72 69 70 74 20 64 6f 65  test" script doe
0650: 73 2e 0a 23 0a 64 62 20 63 6c 6f 73 65 0a 66 69  s..#.db close.fi
0660: 6c 65 20 64 65 6c 65 74 65 20 74 65 73 74 2e 64  le delete test.d
0670: 62 20 74 65 73 74 2e 64 62 2d 6a 6f 75 72 6e 61  b test.db-journa
0680: 6c 0a 66 69 6c 65 20 64 65 6c 65 74 65 20 74 65  l.file delete te
0690: 73 74 33 2e 64 62 20 74 65 73 74 33 2e 64 62 2d  st3.db test3.db-
06a0: 6a 6f 75 72 6e 61 6c 0a 73 71 6c 69 74 65 33 20  journal.sqlite3 
06b0: 64 62 20 74 65 73 74 2e 64 62 3b 20 73 65 74 20  db test.db; set 
06c0: 44 42 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6e 6e  DB [sqlite3_conn
06d0: 65 63 74 69 6f 6e 5f 70 6f 69 6e 74 65 72 20 64  ection_pointer d
06e0: 62 5d 0a 0a 0a 69 66 63 61 70 61 62 6c 65 20 70  b]...ifcapable p
06f0: 61 67 65 72 5f 70 72 61 67 6d 61 73 20 7b 0a 73  ager_pragmas {.s
0700: 65 74 20 44 46 4c 54 5f 43 41 43 48 45 5f 53 5a  et DFLT_CACHE_SZ
0710: 20 5b 64 62 20 6f 6e 65 20 7b 50 52 41 47 4d 41   [db one {PRAGMA
0720: 20 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73   default_cache_s
0730: 69 7a 65 7d 5d 0a 73 65 74 20 54 45 4d 50 5f 43  ize}].set TEMP_C
0740: 41 43 48 45 5f 53 5a 20 5b 64 62 20 6f 6e 65 20  ACHE_SZ [db one 
0750: 7b 50 52 41 47 4d 41 20 74 65 6d 70 2e 64 65 66  {PRAGMA temp.def
0760: 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65 7d  ault_cache_size}
0770: 5d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  ].do_test pragma
0780: 2d 31 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c  -1.1 {.  execsql
0790: 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 63 61   {.    PRAGMA ca
07a0: 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 50 52  che_size;.    PR
07b0: 41 47 4d 41 20 64 65 66 61 75 6c 74 5f 63 61 63  AGMA default_cac
07c0: 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 50 52 41  he_size;.    PRA
07d0: 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3b  GMA synchronous;
07e0: 0a 20 20 7d 0a 7d 20 5b 6c 69 73 74 20 24 44 46  .  }.} [list $DF
07f0: 4c 54 5f 43 41 43 48 45 5f 53 5a 20 24 44 46 4c  LT_CACHE_SZ $DFL
0800: 54 5f 43 41 43 48 45 5f 53 5a 20 32 5d 0a 64 6f  T_CACHE_SZ 2].do
0810: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 2e 32  _test pragma-1.2
0820: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
0830: 20 20 20 50 52 41 47 4d 41 20 73 79 6e 63 68 72     PRAGMA synchr
0840: 6f 6e 6f 75 73 3d 4f 46 46 3b 0a 20 20 20 20 50  onous=OFF;.    P
0850: 52 41 47 4d 41 20 63 61 63 68 65 5f 73 69 7a 65  RAGMA cache_size
0860: 3d 31 32 33 34 3b 0a 20 20 20 20 50 52 41 47 4d  =1234;.    PRAGM
0870: 41 20 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20  A cache_size;.  
0880: 20 20 50 52 41 47 4d 41 20 64 65 66 61 75 6c 74    PRAGMA default
0890: 5f 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20  _cache_size;.   
08a0: 20 50 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e   PRAGMA synchron
08b0: 6f 75 73 3b 0a 20 20 7d 0a 7d 20 5b 6c 69 73 74  ous;.  }.} [list
08c0: 20 31 32 33 34 20 24 44 46 4c 54 5f 43 41 43 48   1234 $DFLT_CACH
08d0: 45 5f 53 5a 20 30 5d 0a 64 6f 5f 74 65 73 74 20  E_SZ 0].do_test 
08e0: 70 72 61 67 6d 61 2d 31 2e 33 20 7b 0a 20 20 64  pragma-1.3 {.  d
08f0: 62 20 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74 65  b close.  sqlite
0900: 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20 65  3 db test.db.  e
0910: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41  xecsql {.    PRA
0920: 47 4d 41 20 63 61 63 68 65 5f 73 69 7a 65 3b 0a  GMA cache_size;.
0930: 20 20 20 20 50 52 41 47 4d 41 20 64 65 66 61 75      PRAGMA defau
0940: 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20  lt_cache_size;. 
0950: 20 20 20 50 52 41 47 4d 41 20 73 79 6e 63 68 72     PRAGMA synchr
0960: 6f 6e 6f 75 73 3b 0a 20 20 7d 0a 7d 20 5b 6c 69  onous;.  }.} [li
0970: 73 74 20 24 44 46 4c 54 5f 43 41 43 48 45 5f 53  st $DFLT_CACHE_S
0980: 5a 20 24 44 46 4c 54 5f 43 41 43 48 45 5f 53 5a  Z $DFLT_CACHE_SZ
0990: 20 32 5d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67   2].do_test prag
09a0: 6d 61 2d 31 2e 34 20 7b 0a 20 20 65 78 65 63 73  ma-1.4 {.  execs
09b0: 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20  ql {.    PRAGMA 
09c0: 73 79 6e 63 68 72 6f 6e 6f 75 73 3d 4f 46 46 3b  synchronous=OFF;
09d0: 0a 20 20 20 20 50 52 41 47 4d 41 20 63 61 63 68  .    PRAGMA cach
09e0: 65 5f 73 69 7a 65 3b 0a 20 20 20 20 50 52 41 47  e_size;.    PRAG
09f0: 4d 41 20 64 65 66 61 75 6c 74 5f 63 61 63 68 65  MA default_cache
0a00: 5f 73 69 7a 65 3b 0a 20 20 20 20 50 52 41 47 4d  _size;.    PRAGM
0a10: 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20  A synchronous;. 
0a20: 20 7d 0a 7d 20 5b 6c 69 73 74 20 24 44 46 4c 54   }.} [list $DFLT
0a30: 5f 43 41 43 48 45 5f 53 5a 20 24 44 46 4c 54 5f  _CACHE_SZ $DFLT_
0a40: 43 41 43 48 45 5f 53 5a 20 30 5d 0a 64 6f 5f 74  CACHE_SZ 0].do_t
0a50: 65 73 74 20 70 72 61 67 6d 61 2d 31 2e 35 20 7b  est pragma-1.5 {
0a60: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
0a70: 20 50 52 41 47 4d 41 20 63 61 63 68 65 5f 73 69   PRAGMA cache_si
0a80: 7a 65 3d 34 33 32 31 3b 0a 20 20 20 20 50 52 41  ze=4321;.    PRA
0a90: 47 4d 41 20 63 61 63 68 65 5f 73 69 7a 65 3b 0a  GMA cache_size;.
0aa0: 20 20 20 20 50 52 41 47 4d 41 20 64 65 66 61 75      PRAGMA defau
0ab0: 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20  lt_cache_size;. 
0ac0: 20 20 20 50 52 41 47 4d 41 20 73 79 6e 63 68 72     PRAGMA synchr
0ad0: 6f 6e 6f 75 73 3b 0a 20 20 7d 0a 7d 20 5b 6c 69  onous;.  }.} [li
0ae0: 73 74 20 34 33 32 31 20 24 44 46 4c 54 5f 43 41  st 4321 $DFLT_CA
0af0: 43 48 45 5f 53 5a 20 30 5d 0a 64 6f 5f 74 65 73  CHE_SZ 0].do_tes
0b00: 74 20 70 72 61 67 6d 61 2d 31 2e 36 20 7b 0a 20  t pragma-1.6 {. 
0b10: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50   execsql {.    P
0b20: 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75  RAGMA synchronou
0b30: 73 3d 4f 4e 3b 0a 20 20 20 20 50 52 41 47 4d 41  s=ON;.    PRAGMA
0b40: 20 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20   cache_size;.   
0b50: 20 50 52 41 47 4d 41 20 64 65 66 61 75 6c 74 5f   PRAGMA default_
0b60: 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20  cache_size;.    
0b70: 50 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f  PRAGMA synchrono
0b80: 75 73 3b 0a 20 20 7d 0a 7d 20 5b 6c 69 73 74 20  us;.  }.} [list 
0b90: 34 33 32 31 20 24 44 46 4c 54 5f 43 41 43 48 45  4321 $DFLT_CACHE
0ba0: 5f 53 5a 20 31 5d 0a 64 6f 5f 74 65 73 74 20 70  _SZ 1].do_test p
0bb0: 72 61 67 6d 61 2d 31 2e 37 20 7b 0a 20 20 64 62  ragma-1.7 {.  db
0bc0: 20 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74 65 33   close.  sqlite3
0bd0: 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20 65 78   db test.db.  ex
0be0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47  ecsql {.    PRAG
0bf0: 4d 41 20 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20  MA cache_size;. 
0c00: 20 20 20 50 52 41 47 4d 41 20 64 65 66 61 75 6c     PRAGMA defaul
0c10: 74 5f 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20  t_cache_size;.  
0c20: 20 20 50 52 41 47 4d 41 20 73 79 6e 63 68 72 6f    PRAGMA synchro
0c30: 6e 6f 75 73 3b 0a 20 20 7d 0a 7d 20 5b 6c 69 73  nous;.  }.} [lis
0c40: 74 20 24 44 46 4c 54 5f 43 41 43 48 45 5f 53 5a  t $DFLT_CACHE_SZ
0c50: 20 24 44 46 4c 54 5f 43 41 43 48 45 5f 53 5a 20   $DFLT_CACHE_SZ 
0c60: 32 5d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  2].do_test pragm
0c70: 61 2d 31 2e 38 20 7b 0a 20 20 65 78 65 63 73 71  a-1.8 {.  execsq
0c80: 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 64  l {.    PRAGMA d
0c90: 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a  efault_cache_siz
0ca0: 65 3d 31 32 33 3b 0a 20 20 20 20 50 52 41 47 4d  e=123;.    PRAGM
0cb0: 41 20 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20  A cache_size;.  
0cc0: 20 20 50 52 41 47 4d 41 20 64 65 66 61 75 6c 74    PRAGMA default
0cd0: 5f 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20  _cache_size;.   
0ce0: 20 50 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e   PRAGMA synchron
0cf0: 6f 75 73 3b 0a 20 20 7d 0a 7d 20 7b 31 32 33 20  ous;.  }.} {123 
0d00: 31 32 33 20 32 7d 0a 64 6f 5f 74 65 73 74 20 70  123 2}.do_test p
0d10: 72 61 67 6d 61 2d 31 2e 39 2e 31 20 7b 0a 20 20  ragma-1.9.1 {.  
0d20: 64 62 20 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74  db close.  sqlit
0d30: 65 33 20 64 62 20 74 65 73 74 2e 64 62 3b 20 73  e3 db test.db; s
0d40: 65 74 20 3a 3a 44 42 20 5b 73 71 6c 69 74 65 33  et ::DB [sqlite3
0d50: 5f 63 6f 6e 6e 65 63 74 69 6f 6e 5f 70 6f 69 6e  _connection_poin
0d60: 74 65 72 20 64 62 5d 0a 20 20 65 78 65 63 73 71  ter db].  execsq
0d70: 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 63  l {.    PRAGMA c
0d80: 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 50  ache_size;.    P
0d90: 52 41 47 4d 41 20 64 65 66 61 75 6c 74 5f 63 61  RAGMA default_ca
0da0: 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 50 52  che_size;.    PR
0db0: 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73  AGMA synchronous
0dc0: 3b 0a 20 20 7d 0a 7d 20 7b 31 32 33 20 31 32 33  ;.  }.} {123 123
0dd0: 20 32 7d 0a 69 66 63 61 70 61 62 6c 65 20 76 61   2}.ifcapable va
0de0: 63 75 75 6d 20 7b 0a 20 20 64 6f 5f 74 65 73 74  cuum {.  do_test
0df0: 20 70 72 61 67 6d 61 2d 31 2e 39 2e 32 20 7b 0a   pragma-1.9.2 {.
0e00: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20      execsql {.  
0e10: 20 20 20 20 56 41 43 55 55 4d 3b 0a 20 20 20 20      VACUUM;.    
0e20: 20 20 50 52 41 47 4d 41 20 63 61 63 68 65 5f 73    PRAGMA cache_s
0e30: 69 7a 65 3b 0a 20 20 20 20 20 20 50 52 41 47 4d  ize;.      PRAGM
0e40: 41 20 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f  A default_cache_
0e50: 73 69 7a 65 3b 0a 20 20 20 20 20 20 50 52 41 47  size;.      PRAG
0e60: 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a  MA synchronous;.
0e70: 20 20 20 20 7d 0a 20 20 7d 20 7b 31 32 33 20 31      }.  } {123 1
0e80: 32 33 20 32 7d 0a 7d 0a 64 6f 5f 74 65 73 74 20  23 2}.}.do_test 
0e90: 70 72 61 67 6d 61 2d 31 2e 31 30 20 7b 0a 20 20  pragma-1.10 {.  
0ea0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52  execsql {.    PR
0eb0: 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73  AGMA synchronous
0ec0: 3d 4e 4f 52 4d 41 4c 3b 0a 20 20 20 20 50 52 41  =NORMAL;.    PRA
0ed0: 47 4d 41 20 63 61 63 68 65 5f 73 69 7a 65 3b 0a  GMA cache_size;.
0ee0: 20 20 20 20 50 52 41 47 4d 41 20 64 65 66 61 75      PRAGMA defau
0ef0: 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20  lt_cache_size;. 
0f00: 20 20 20 50 52 41 47 4d 41 20 73 79 6e 63 68 72     PRAGMA synchr
0f10: 6f 6e 6f 75 73 3b 0a 20 20 7d 0a 7d 20 7b 31 32  onous;.  }.} {12
0f20: 33 20 31 32 33 20 31 7d 0a 64 6f 5f 74 65 73 74  3 123 1}.do_test
0f30: 20 70 72 61 67 6d 61 2d 31 2e 31 31 20 7b 0a 20   pragma-1.11 {. 
0f40: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50   execsql {.    P
0f50: 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75  RAGMA synchronou
0f60: 73 3d 46 55 4c 4c 3b 0a 20 20 20 20 50 52 41 47  s=FULL;.    PRAG
0f70: 4d 41 20 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20  MA cache_size;. 
0f80: 20 20 20 50 52 41 47 4d 41 20 64 65 66 61 75 6c     PRAGMA defaul
0f90: 74 5f 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20  t_cache_size;.  
0fa0: 20 20 50 52 41 47 4d 41 20 73 79 6e 63 68 72 6f    PRAGMA synchro
0fb0: 6e 6f 75 73 3b 0a 20 20 7d 0a 7d 20 7b 31 32 33  nous;.  }.} {123
0fc0: 20 31 32 33 20 32 7d 0a 64 6f 5f 74 65 73 74 20   123 2}.do_test 
0fd0: 70 72 61 67 6d 61 2d 31 2e 31 32 20 7b 0a 20 20  pragma-1.12 {.  
0fe0: 64 62 20 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74  db close.  sqlit
0ff0: 65 33 20 64 62 20 74 65 73 74 2e 64 62 3b 20 73  e3 db test.db; s
1000: 65 74 20 3a 3a 44 42 20 5b 73 71 6c 69 74 65 33  et ::DB [sqlite3
1010: 5f 63 6f 6e 6e 65 63 74 69 6f 6e 5f 70 6f 69 6e  _connection_poin
1020: 74 65 72 20 64 62 5d 0a 20 20 65 78 65 63 73 71  ter db].  execsq
1030: 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 63  l {.    PRAGMA c
1040: 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 50  ache_size;.    P
1050: 52 41 47 4d 41 20 64 65 66 61 75 6c 74 5f 63 61  RAGMA default_ca
1060: 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 50 52  che_size;.    PR
1070: 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73  AGMA synchronous
1080: 3b 0a 20 20 7d 0a 7d 20 7b 31 32 33 20 31 32 33  ;.  }.} {123 123
1090: 20 32 7d 0a 0a 23 20 4d 61 6b 65 20 73 75 72 65   2}..# Make sure
10a0: 20 74 68 65 20 70 72 61 67 6d 61 20 68 61 6e 64   the pragma hand
10b0: 6c 65 72 20 75 6e 64 65 72 73 74 61 6e 64 73 20  ler understands 
10c0: 6e 75 6d 65 72 69 63 20 76 61 6c 75 65 73 20 69  numeric values i
10d0: 6e 20 61 64 64 69 74 69 6f 6e 0a 23 20 74 6f 20  n addition.# to 
10e0: 6b 65 79 77 6f 72 64 73 20 6c 69 6b 65 20 22 6f  keywords like "o
10f0: 66 66 22 20 61 6e 64 20 22 66 75 6c 6c 22 2e 0a  ff" and "full"..
1100: 23 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  #.do_test pragma
1110: 2d 31 2e 31 33 20 7b 0a 20 20 65 78 65 63 73 71  -1.13 {.  execsq
1120: 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 73  l {.    PRAGMA s
1130: 79 6e 63 68 72 6f 6e 6f 75 73 3d 30 3b 0a 20 20  ynchronous=0;.  
1140: 20 20 50 52 41 47 4d 41 20 73 79 6e 63 68 72 6f    PRAGMA synchro
1150: 6e 6f 75 73 3b 0a 20 20 7d 0a 7d 20 7b 30 7d 0a  nous;.  }.} {0}.
1160: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31  do_test pragma-1
1170: 2e 31 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  .14 {.  execsql 
1180: 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 73 79 6e  {.    PRAGMA syn
1190: 63 68 72 6f 6e 6f 75 73 3d 32 3b 0a 20 20 20 20  chronous=2;.    
11a0: 50 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f  PRAGMA synchrono
11b0: 75 73 3b 0a 20 20 7d 0a 7d 20 7b 32 7d 0a 7d 20  us;.  }.} {2}.} 
11c0: 3b 23 20 69 66 63 61 70 61 62 6c 65 20 70 61 67  ;# ifcapable pag
11d0: 65 72 5f 70 72 61 67 6d 61 73 0a 0a 23 20 54 65  er_pragmas..# Te
11e0: 73 74 20 74 75 72 6e 69 6e 67 20 22 66 6c 61 67  st turning "flag
11f0: 22 20 70 72 61 67 6d 61 73 20 6f 6e 20 61 6e 64  " pragmas on and
1200: 20 6f 66 66 2e 0a 23 0a 69 66 63 61 70 61 62 6c   off..#.ifcapabl
1210: 65 20 64 65 62 75 67 20 7b 0a 20 20 23 20 50 72  e debug {.  # Pr
1220: 61 67 6d 61 20 22 76 64 62 65 5f 6c 69 73 74 69  agma "vdbe_listi
1230: 6e 67 22 20 69 73 20 6f 6e 6c 79 20 61 76 61 69  ng" is only avai
1240: 6c 61 62 6c 65 20 69 66 20 63 6f 6d 70 69 6c 65  lable if compile
1250: 64 20 77 69 74 68 20 53 51 4c 49 54 45 5f 44 45  d with SQLITE_DE
1260: 42 55 47 0a 20 20 23 0a 20 20 64 6f 5f 74 65 73  BUG.  #.  do_tes
1270: 74 20 70 72 61 67 6d 61 2d 31 2e 31 35 20 7b 0a  t pragma-1.15 {.
1280: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20      execsql {.  
1290: 20 20 20 20 50 52 41 47 4d 41 20 76 64 62 65 5f      PRAGMA vdbe_
12a0: 6c 69 73 74 69 6e 67 3d 59 45 53 3b 0a 20 20 20  listing=YES;.   
12b0: 20 20 20 50 52 41 47 4d 41 20 76 64 62 65 5f 6c     PRAGMA vdbe_l
12c0: 69 73 74 69 6e 67 3b 0a 20 20 20 20 7d 0a 20 20  isting;.    }.  
12d0: 7d 20 7b 31 7d 0a 20 20 64 6f 5f 74 65 73 74 20  } {1}.  do_test 
12e0: 70 72 61 67 6d 61 2d 31 2e 31 36 20 7b 0a 20 20  pragma-1.16 {.  
12f0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
1300: 20 20 50 52 41 47 4d 41 20 76 64 62 65 5f 6c 69    PRAGMA vdbe_li
1310: 73 74 69 6e 67 3d 4e 4f 3b 0a 20 20 20 20 20 20  sting=NO;.      
1320: 50 52 41 47 4d 41 20 76 64 62 65 5f 6c 69 73 74  PRAGMA vdbe_list
1330: 69 6e 67 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b  ing;.    }.  } {
1340: 30 7d 0a 7d 0a 0a 64 6f 5f 74 65 73 74 20 70 72  0}.}..do_test pr
1350: 61 67 6d 61 2d 31 2e 31 37 20 7b 0a 20 20 65 78  agma-1.17 {.  ex
1360: 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47  ecsql {.    PRAG
1370: 4d 41 20 70 61 72 73 65 72 5f 74 72 61 63 65 3d  MA parser_trace=
1380: 4f 4e 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 70  ON;.    PRAGMA p
1390: 61 72 73 65 72 5f 74 72 61 63 65 3d 4f 46 46 3b  arser_trace=OFF;
13a0: 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73  .  }.} {}.do_tes
13b0: 74 20 70 72 61 67 6d 61 2d 31 2e 31 38 20 7b 0a  t pragma-1.18 {.
13c0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
13d0: 50 52 41 47 4d 41 20 62 6f 67 75 73 20 3d 20 2d  PRAGMA bogus = -
13e0: 31 32 33 34 3b 20 20 2d 2d 20 50 61 72 73 69 6e  1234;  -- Parsin
13f0: 67 20 6f 66 20 6e 65 67 61 74 69 76 65 20 76 61  g of negative va
1400: 6c 75 65 73 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a 23  lues.  }.} {}..#
1410: 20 54 65 73 74 20 6d 6f 64 69 66 79 69 6e 67 20   Test modifying 
1420: 74 68 65 20 73 61 66 65 74 79 5f 6c 65 76 65 6c  the safety_level
1430: 20 6f 66 20 61 6e 20 61 74 74 61 63 68 65 64 20   of an attached 
1440: 64 61 74 61 62 61 73 65 2e 0a 69 66 63 61 70 61  database..ifcapa
1450: 62 6c 65 20 70 61 67 65 72 5f 70 72 61 67 6d 61  ble pager_pragma
1460: 73 26 26 61 74 74 61 63 68 20 7b 0a 20 20 64 6f  s&&attach {.  do
1470: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 32 2e 31  _test pragma-2.1
1480: 20 7b 0a 20 20 20 20 66 69 6c 65 20 64 65 6c 65   {.    file dele
1490: 74 65 20 2d 66 6f 72 63 65 20 74 65 73 74 32 2e  te -force test2.
14a0: 64 62 0a 20 20 20 20 66 69 6c 65 20 64 65 6c 65  db.    file dele
14b0: 74 65 20 2d 66 6f 72 63 65 20 74 65 73 74 32 2e  te -force test2.
14c0: 64 62 2d 6a 6f 75 72 6e 61 6c 0a 20 20 20 20 65  db-journal.    e
14d0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 41  xecsql {.      A
14e0: 54 54 41 43 48 20 27 74 65 73 74 32 2e 64 62 27  TTACH 'test2.db'
14f0: 20 41 53 20 61 75 78 3b 0a 20 20 20 20 7d 20 0a   AS aux;.    } .
1500: 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65 73 74    } {}.  do_test
1510: 20 70 72 61 67 6d 61 2d 32 2e 32 20 7b 0a 20 20   pragma-2.2 {.  
1520: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
1530: 20 20 70 72 61 67 6d 61 20 61 75 78 2e 73 79 6e    pragma aux.syn
1540: 63 68 72 6f 6e 6f 75 73 3b 0a 20 20 20 20 7d 20  chronous;.    } 
1550: 0a 20 20 7d 20 7b 32 7d 0a 20 20 64 6f 5f 74 65  .  } {2}.  do_te
1560: 73 74 20 70 72 61 67 6d 61 2d 32 2e 33 20 7b 0a  st pragma-2.3 {.
1570: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20      execsql {.  
1580: 20 20 20 20 70 72 61 67 6d 61 20 61 75 78 2e 73      pragma aux.s
1590: 79 6e 63 68 72 6f 6e 6f 75 73 20 3d 20 4f 46 46  ynchronous = OFF
15a0: 3b 0a 20 20 20 20 20 20 70 72 61 67 6d 61 20 61  ;.      pragma a
15b0: 75 78 2e 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a  ux.synchronous;.
15c0: 20 20 20 20 20 20 70 72 61 67 6d 61 20 73 79 6e        pragma syn
15d0: 63 68 72 6f 6e 6f 75 73 3b 0a 20 20 20 20 7d 20  chronous;.    } 
15e0: 0a 20 20 7d 20 7b 30 20 32 7d 0a 20 20 64 6f 5f  .  } {0 2}.  do_
15f0: 74 65 73 74 20 70 72 61 67 6d 61 2d 32 2e 34 20  test pragma-2.4 
1600: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a  {.    execsql {.
1610: 20 20 20 20 20 20 70 72 61 67 6d 61 20 61 75 78        pragma aux
1620: 2e 73 79 6e 63 68 72 6f 6e 6f 75 73 20 3d 20 4f  .synchronous = O
1630: 4e 3b 0a 20 20 20 20 20 20 70 72 61 67 6d 61 20  N;.      pragma 
1640: 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20 20 20  synchronous;.   
1650: 20 20 20 70 72 61 67 6d 61 20 61 75 78 2e 73 79     pragma aux.sy
1660: 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20 20 20 20 7d  nchronous;.    }
1670: 20 0a 20 20 7d 20 7b 32 20 31 7d 0a 7d 20 3b 23   .  } {2 1}.} ;#
1680: 20 69 66 63 61 70 61 62 6c 65 20 70 61 67 65 72   ifcapable pager
1690: 5f 70 72 61 67 6d 61 73 0a 0a 23 20 43 6f 6e 73  _pragmas..# Cons
16a0: 74 72 75 63 74 20 61 20 63 6f 72 72 75 70 74 65  truct a corrupte
16b0: 64 20 69 6e 64 65 78 20 61 6e 64 20 6d 61 6b 65  d index and make
16c0: 20 73 75 72 65 20 74 68 65 20 69 6e 74 65 67 72   sure the integr
16d0: 69 74 79 5f 63 68 65 63 6b 0a 23 20 70 72 61 67  ity_check.# prag
16e0: 6d 61 20 66 69 6e 64 73 20 69 74 2e 0a 23 0a 23  ma finds it..#.#
16f0: 20 54 68 65 73 65 20 74 65 73 74 73 20 77 6f 6e   These tests won
1700: 27 74 20 77 6f 72 6b 20 69 66 20 74 68 65 20 64  't work if the d
1710: 61 74 61 62 61 73 65 20 69 73 20 65 6e 63 72 79  atabase is encry
1720: 70 74 65 64 0a 23 0a 64 6f 5f 74 65 73 74 20 70  pted.#.do_test p
1730: 72 61 67 6d 61 2d 33 2e 31 20 7b 0a 20 20 64 62  ragma-3.1 {.  db
1740: 20 63 6c 6f 73 65 0a 20 20 66 69 6c 65 20 64 65   close.  file de
1750: 6c 65 74 65 20 2d 66 6f 72 63 65 20 74 65 73 74  lete -force test
1760: 2e 64 62 20 74 65 73 74 2e 64 62 2d 6a 6f 75 72  .db test.db-jour
1770: 6e 61 6c 0a 20 20 73 71 6c 69 74 65 33 20 64 62  nal.  sqlite3 db
1780: 20 74 65 73 74 2e 64 62 0a 20 20 65 78 65 63 73   test.db.  execs
1790: 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20  ql {.    PRAGMA 
17a0: 61 75 74 6f 5f 76 61 63 75 75 6d 3d 4f 46 46 3b  auto_vacuum=OFF;
17b0: 0a 20 20 20 20 42 45 47 49 4e 3b 0a 20 20 20 20  .    BEGIN;.    
17c0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 32 28  CREATE TABLE t2(
17d0: 61 2c 62 2c 63 29 3b 0a 20 20 20 20 43 52 45 41  a,b,c);.    CREA
17e0: 54 45 20 49 4e 44 45 58 20 69 32 20 4f 4e 20 74  TE INDEX i2 ON t
17f0: 32 28 61 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  2(a);.    INSERT
1800: 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28   INTO t2 VALUES(
1810: 31 31 2c 32 2c 33 29 3b 0a 20 20 20 20 49 4e 53  11,2,3);.    INS
1820: 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55  ERT INTO t2 VALU
1830: 45 53 28 32 32 2c 33 2c 34 29 3b 0a 20 20 20 20  ES(22,3,4);.    
1840: 43 4f 4d 4d 49 54 3b 0a 20 20 20 20 53 45 4c 45  COMMIT;.    SELE
1850: 43 54 20 72 6f 77 69 64 2c 20 2a 20 66 72 6f 6d  CT rowid, * from
1860: 20 74 32 3b 0a 20 20 7d 0a 7d 20 7b 31 20 31 31   t2;.  }.} {1 11
1870: 20 32 20 33 20 32 20 32 32 20 33 20 34 7d 0a 69   2 3 2 22 3 4}.i
1880: 66 63 61 70 61 62 6c 65 20 61 74 74 61 63 68 20  fcapable attach 
1890: 7b 0a 20 20 69 66 20 7b 21 5b 73 71 6c 69 74 65  {.  if {![sqlite
18a0: 33 20 2d 68 61 73 2d 63 6f 64 65 63 5d 20 26 26  3 -has-codec] &&
18b0: 20 24 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73   $sqlite_options
18c0: 28 69 6e 74 65 67 72 69 74 79 63 6b 29 7d 20 7b  (integrityck)} {
18d0: 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 70 72 61  .    do_test pra
18e0: 67 6d 61 2d 33 2e 32 20 7b 0a 20 20 20 20 20 20  gma-3.2 {.      
18f0: 64 62 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20  db eval {SELECT 
1900: 72 6f 6f 74 70 61 67 65 20 46 52 4f 4d 20 73 71  rootpage FROM sq
1910: 6c 69 74 65 5f 6d 61 73 74 65 72 20 57 48 45 52  lite_master WHER
1920: 45 20 6e 61 6d 65 3d 27 69 32 27 7d 20 62 72 65  E name='i2'} bre
1930: 61 6b 0a 20 20 20 20 20 20 73 65 74 20 70 67 73  ak.      set pgs
1940: 7a 20 5b 64 62 20 65 76 61 6c 20 7b 50 52 41 47  z [db eval {PRAG
1950: 4d 41 20 70 61 67 65 5f 73 69 7a 65 7d 5d 0a 20  MA page_size}]. 
1960: 20 20 20 20 20 23 20 6f 76 65 72 77 72 69 74 65       # overwrite
1970: 20 74 68 65 20 68 65 61 64 65 72 20 6f 6e 20 74   the header on t
1980: 68 65 20 72 6f 6f 74 70 61 67 65 20 6f 66 20 74  he rootpage of t
1990: 68 65 20 69 6e 64 65 78 20 69 6e 20 6f 72 64 65  he index in orde
19a0: 72 20 74 6f 0a 20 20 20 20 20 20 23 20 6d 61 6b  r to.      # mak
19b0: 65 20 74 68 65 20 69 6e 64 65 78 20 61 70 70 65  e the index appe
19c0: 61 72 20 74 6f 20 62 65 20 65 6d 70 74 79 2e 0a  ar to be empty..
19d0: 20 20 20 20 20 20 23 0a 20 20 20 20 20 20 73 65        #.      se
19e0: 74 20 6f 66 66 73 65 74 20 5b 65 78 70 72 20 7b  t offset [expr {
19f0: 24 70 67 73 7a 2a 28 24 72 6f 6f 74 70 61 67 65  $pgsz*($rootpage
1a00: 2d 31 29 7d 5d 0a 20 20 20 20 20 20 68 65 78 69  -1)}].      hexi
1a10: 6f 5f 77 72 69 74 65 20 74 65 73 74 2e 64 62 20  o_write test.db 
1a20: 24 6f 66 66 73 65 74 20 30 61 30 30 30 30 30 30  $offset 0a000000
1a30: 30 30 30 34 30 30 30 30 30 30 30 30 30 30 0a 20  00040000000000. 
1a40: 20 20 20 20 20 64 62 20 63 6c 6f 73 65 0a 20 20       db close.  
1a50: 20 20 20 20 73 71 6c 69 74 65 33 20 64 62 20 74      sqlite3 db t
1a60: 65 73 74 2e 64 62 0a 20 20 20 20 20 20 65 78 65  est.db.      exe
1a70: 63 73 71 6c 20 7b 50 52 41 47 4d 41 20 69 6e 74  csql {PRAGMA int
1a80: 65 67 72 69 74 79 5f 63 68 65 63 6b 7d 0a 20 20  egrity_check}.  
1a90: 20 20 7d 20 7b 7b 72 6f 77 69 64 20 31 20 6d 69    } {{rowid 1 mi
1aa0: 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78  ssing from index
1ab0: 20 69 32 7d 20 7b 72 6f 77 69 64 20 32 20 6d 69   i2} {rowid 2 mi
1ac0: 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78  ssing from index
1ad0: 20 69 32 7d 20 7b 77 72 6f 6e 67 20 23 20 6f 66   i2} {wrong # of
1ae0: 20 65 6e 74 72 69 65 73 20 69 6e 20 69 6e 64 65   entries in inde
1af0: 78 20 69 32 7d 7d 0a 20 20 20 20 64 6f 5f 74 65  x i2}}.    do_te
1b00: 73 74 20 70 72 61 67 6d 61 2d 33 2e 33 20 7b 0a  st pragma-3.3 {.
1b10: 20 20 20 20 20 20 65 78 65 63 73 71 6c 20 7b 50        execsql {P
1b20: 52 41 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f  RAGMA integrity_
1b30: 63 68 65 63 6b 3d 31 7d 0a 20 20 20 20 7d 20 7b  check=1}.    } {
1b40: 7b 72 6f 77 69 64 20 31 20 6d 69 73 73 69 6e 67  {rowid 1 missing
1b50: 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 7d   from index i2}}
1b60: 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 70 72 61  .    do_test pra
1b70: 67 6d 61 2d 33 2e 34 20 7b 0a 20 20 20 20 20 20  gma-3.4 {.      
1b80: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
1b90: 20 20 41 54 54 41 43 48 20 44 41 54 41 42 41 53    ATTACH DATABAS
1ba0: 45 20 27 74 65 73 74 2e 64 62 27 20 41 53 20 74  E 'test.db' AS t
1bb0: 32 3b 0a 20 20 20 20 20 20 20 20 50 52 41 47 4d  2;.        PRAGM
1bc0: 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63  A integrity_chec
1bd0: 6b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 20  k.      }.    } 
1be0: 7b 7b 72 6f 77 69 64 20 31 20 6d 69 73 73 69 6e  {{rowid 1 missin
1bf0: 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d  g from index i2}
1c00: 20 7b 72 6f 77 69 64 20 32 20 6d 69 73 73 69 6e   {rowid 2 missin
1c10: 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d  g from index i2}
1c20: 20 7b 77 72 6f 6e 67 20 23 20 6f 66 20 65 6e 74   {wrong # of ent
1c30: 72 69 65 73 20 69 6e 20 69 6e 64 65 78 20 69 32  ries in index i2
1c40: 7d 20 7b 72 6f 77 69 64 20 31 20 6d 69 73 73 69  } {rowid 1 missi
1c50: 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32  ng from index i2
1c60: 7d 20 7b 72 6f 77 69 64 20 32 20 6d 69 73 73 69  } {rowid 2 missi
1c70: 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32  ng from index i2
1c80: 7d 20 7b 77 72 6f 6e 67 20 23 20 6f 66 20 65 6e  } {wrong # of en
1c90: 74 72 69 65 73 20 69 6e 20 69 6e 64 65 78 20 69  tries in index i
1ca0: 32 7d 7d 0a 20 20 20 20 64 6f 5f 74 65 73 74 20  2}}.    do_test 
1cb0: 70 72 61 67 6d 61 2d 33 2e 35 20 7b 0a 20 20 20  pragma-3.5 {.   
1cc0: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
1cd0: 20 20 20 20 20 50 52 41 47 4d 41 20 69 6e 74 65       PRAGMA inte
1ce0: 67 72 69 74 79 5f 63 68 65 63 6b 3d 34 0a 20 20  grity_check=4.  
1cf0: 20 20 20 20 7d 0a 20 20 20 20 7d 20 7b 7b 72 6f      }.    } {{ro
1d00: 77 69 64 20 31 20 6d 69 73 73 69 6e 67 20 66 72  wid 1 missing fr
1d10: 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b 72 6f  om index i2} {ro
1d20: 77 69 64 20 32 20 6d 69 73 73 69 6e 67 20 66 72  wid 2 missing fr
1d30: 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b 77 72  om index i2} {wr
1d40: 6f 6e 67 20 23 20 6f 66 20 65 6e 74 72 69 65 73  ong # of entries
1d50: 20 69 6e 20 69 6e 64 65 78 20 69 32 7d 20 7b 72   in index i2} {r
1d60: 6f 77 69 64 20 31 20 6d 69 73 73 69 6e 67 20 66  owid 1 missing f
1d70: 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 7d 0a 20  rom index i2}}. 
1d80: 20 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d     do_test pragm
1d90: 61 2d 33 2e 36 20 7b 0a 20 20 20 20 20 20 65 78  a-3.6 {.      ex
1da0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 20 20  ecsql {.        
1db0: 50 52 41 47 4d 41 20 69 6e 74 65 67 72 69 74 79  PRAGMA integrity
1dc0: 5f 63 68 65 63 6b 3d 78 79 7a 0a 20 20 20 20 20  _check=xyz.     
1dd0: 20 7d 0a 20 20 20 20 7d 20 7b 7b 72 6f 77 69 64   }.    } {{rowid
1de0: 20 31 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20   1 missing from 
1df0: 69 6e 64 65 78 20 69 32 7d 20 7b 72 6f 77 69 64  index i2} {rowid
1e00: 20 32 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20   2 missing from 
1e10: 69 6e 64 65 78 20 69 32 7d 20 7b 77 72 6f 6e 67  index i2} {wrong
1e20: 20 23 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e   # of entries in
1e30: 20 69 6e 64 65 78 20 69 32 7d 20 7b 72 6f 77 69   index i2} {rowi
1e40: 64 20 31 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d  d 1 missing from
1e50: 20 69 6e 64 65 78 20 69 32 7d 20 7b 72 6f 77 69   index i2} {rowi
1e60: 64 20 32 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d  d 2 missing from
1e70: 20 69 6e 64 65 78 20 69 32 7d 20 7b 77 72 6f 6e   index i2} {wron
1e80: 67 20 23 20 6f 66 20 65 6e 74 72 69 65 73 20 69  g # of entries i
1e90: 6e 20 69 6e 64 65 78 20 69 32 7d 7d 0a 20 20 20  n index i2}}.   
1ea0: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
1eb0: 33 2e 37 20 7b 0a 20 20 20 20 20 20 65 78 65 63  3.7 {.      exec
1ec0: 73 71 6c 20 7b 0a 20 20 20 20 20 20 20 20 50 52  sql {.        PR
1ed0: 41 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63  AGMA integrity_c
1ee0: 68 65 63 6b 3d 30 0a 20 20 20 20 20 20 7d 0a 20  heck=0.      }. 
1ef0: 20 20 20 7d 20 7b 7b 72 6f 77 69 64 20 31 20 6d     } {{rowid 1 m
1f00: 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65  issing from inde
1f10: 78 20 69 32 7d 20 7b 72 6f 77 69 64 20 32 20 6d  x i2} {rowid 2 m
1f20: 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65  issing from inde
1f30: 78 20 69 32 7d 20 7b 77 72 6f 6e 67 20 23 20 6f  x i2} {wrong # o
1f40: 66 20 65 6e 74 72 69 65 73 20 69 6e 20 69 6e 64  f entries in ind
1f50: 65 78 20 69 32 7d 20 7b 72 6f 77 69 64 20 31 20  ex i2} {rowid 1 
1f60: 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64  missing from ind
1f70: 65 78 20 69 32 7d 20 7b 72 6f 77 69 64 20 32 20  ex i2} {rowid 2 
1f80: 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64  missing from ind
1f90: 65 78 20 69 32 7d 20 7b 77 72 6f 6e 67 20 23 20  ex i2} {wrong # 
1fa0: 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 69 6e  of entries in in
1fb0: 64 65 78 20 69 32 7d 7d 0a 20 20 0a 20 20 20 20  dex i2}}.  .    
1fc0: 23 20 41 64 64 20 61 64 64 69 74 69 6f 6e 61 6c  # Add additional
1fd0: 20 63 6f 72 72 75 70 74 69 6f 6e 20 62 79 20 61   corruption by a
1fe0: 70 70 65 6e 64 69 6e 67 20 75 6e 75 73 65 64 20  ppending unused 
1ff0: 70 61 67 65 73 20 74 6f 20 74 68 65 20 65 6e 64  pages to the end
2000: 20 6f 66 0a 20 20 20 20 23 20 74 68 65 20 64 61   of.    # the da
2010: 74 61 62 61 73 65 20 66 69 6c 65 20 74 65 73 74  tabase file test
2020: 65 72 72 2e 64 62 0a 20 20 20 20 23 0a 20 20 20  err.db.    #.   
2030: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
2040: 33 2e 38 20 7b 0a 20 20 20 20 20 20 65 78 65 63  3.8 {.      exec
2050: 73 71 6c 20 7b 44 45 54 41 43 48 20 74 32 7d 0a  sql {DETACH t2}.
2060: 20 20 20 20 20 20 66 69 6c 65 20 64 65 6c 65 74        file delet
2070: 65 20 2d 66 6f 72 63 65 20 74 65 73 74 65 72 72  e -force testerr
2080: 2e 64 62 20 74 65 73 74 65 72 72 2e 64 62 2d 6a  .db testerr.db-j
2090: 6f 75 72 6e 61 6c 0a 20 20 20 20 20 20 73 65 74  ournal.      set
20a0: 20 6f 75 74 20 5b 6f 70 65 6e 20 74 65 73 74 65   out [open teste
20b0: 72 72 2e 64 62 20 77 5d 0a 20 20 20 20 20 20 66  rr.db w].      f
20c0: 63 6f 6e 66 69 67 75 72 65 20 24 6f 75 74 20 2d  configure $out -
20d0: 74 72 61 6e 73 6c 61 74 69 6f 6e 20 62 69 6e 61  translation bina
20e0: 72 79 0a 20 20 20 20 20 20 73 65 74 20 69 6e 20  ry.      set in 
20f0: 5b 6f 70 65 6e 20 74 65 73 74 2e 64 62 20 72 5d  [open test.db r]
2100: 0a 20 20 20 20 20 20 66 63 6f 6e 66 69 67 75 72  .      fconfigur
2110: 65 20 24 69 6e 20 2d 74 72 61 6e 73 6c 61 74 69  e $in -translati
2120: 6f 6e 20 62 69 6e 61 72 79 0a 20 20 20 20 20 20  on binary.      
2130: 70 75 74 73 20 2d 6e 6f 6e 65 77 6c 69 6e 65 20  puts -nonewline 
2140: 24 6f 75 74 20 5b 72 65 61 64 20 24 69 6e 5d 0a  $out [read $in].
2150: 20 20 20 20 20 20 73 65 65 6b 20 24 69 6e 20 30        seek $in 0
2160: 0a 20 20 20 20 20 20 70 75 74 73 20 2d 6e 6f 6e  .      puts -non
2170: 65 77 6c 69 6e 65 20 24 6f 75 74 20 5b 72 65 61  ewline $out [rea
2180: 64 20 24 69 6e 5d 0a 20 20 20 20 20 20 63 6c 6f  d $in].      clo
2190: 73 65 20 24 69 6e 0a 20 20 20 20 20 20 63 6c 6f  se $in.      clo
21a0: 73 65 20 24 6f 75 74 0a 20 20 20 20 20 20 65 78  se $out.      ex
21b0: 65 63 73 71 6c 20 7b 52 45 49 4e 44 45 58 20 74  ecsql {REINDEX t
21c0: 32 7d 0a 20 20 20 20 20 20 65 78 65 63 73 71 6c  2}.      execsql
21d0: 20 7b 50 52 41 47 4d 41 20 69 6e 74 65 67 72 69   {PRAGMA integri
21e0: 74 79 5f 63 68 65 63 6b 7d 0a 20 20 20 20 7d 20  ty_check}.    } 
21f0: 7b 6f 6b 7d 0a 20 20 20 20 64 6f 5f 74 65 73 74  {ok}.    do_test
2200: 20 70 72 61 67 6d 61 2d 33 2e 38 2e 31 20 7b 0a   pragma-3.8.1 {.
2210: 20 20 20 20 20 20 65 78 65 63 73 71 6c 20 7b 50        execsql {P
2220: 52 41 47 4d 41 20 71 75 69 63 6b 5f 63 68 65 63  RAGMA quick_chec
2230: 6b 7d 0a 20 20 20 20 7d 20 7b 6f 6b 7d 0a 20 20  k}.    } {ok}.  
2240: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
2250: 2d 33 2e 39 20 7b 0a 20 20 20 20 20 20 65 78 65  -3.9 {.      exe
2260: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 20 20 41  csql {.        A
2270: 54 54 41 43 48 20 27 74 65 73 74 65 72 72 2e 64  TTACH 'testerr.d
2280: 62 27 20 41 53 20 74 32 3b 0a 20 20 20 20 20 20  b' AS t2;.      
2290: 20 20 50 52 41 47 4d 41 20 69 6e 74 65 67 72 69    PRAGMA integri
22a0: 74 79 5f 63 68 65 63 6b 0a 20 20 20 20 20 20 7d  ty_check.      }
22b0: 0a 20 20 20 20 7d 20 7b 7b 2a 2a 2a 20 69 6e 20  .    } {{*** in 
22c0: 64 61 74 61 62 61 73 65 20 74 32 20 2a 2a 2a 0a  database t2 ***.
22d0: 50 61 67 65 20 34 20 69 73 20 6e 65 76 65 72 20  Page 4 is never 
22e0: 75 73 65 64 0a 50 61 67 65 20 35 20 69 73 20 6e  used.Page 5 is n
22f0: 65 76 65 72 20 75 73 65 64 0a 50 61 67 65 20 36  ever used.Page 6
2300: 20 69 73 20 6e 65 76 65 72 20 75 73 65 64 7d 20   is never used} 
2310: 7b 72 6f 77 69 64 20 31 20 6d 69 73 73 69 6e 67  {rowid 1 missing
2320: 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20   from index i2} 
2330: 7b 72 6f 77 69 64 20 32 20 6d 69 73 73 69 6e 67  {rowid 2 missing
2340: 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20   from index i2} 
2350: 7b 77 72 6f 6e 67 20 23 20 6f 66 20 65 6e 74 72  {wrong # of entr
2360: 69 65 73 20 69 6e 20 69 6e 64 65 78 20 69 32 7d  ies in index i2}
2370: 7d 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 70 72  }.    do_test pr
2380: 61 67 6d 61 2d 33 2e 31 30 20 7b 0a 20 20 20 20  agma-3.10 {.    
2390: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
23a0: 20 20 20 20 50 52 41 47 4d 41 20 69 6e 74 65 67      PRAGMA integ
23b0: 72 69 74 79 5f 63 68 65 63 6b 3d 31 0a 20 20 20  rity_check=1.   
23c0: 20 20 20 7d 0a 20 20 20 20 7d 20 7b 7b 2a 2a 2a     }.    } {{***
23d0: 20 69 6e 20 64 61 74 61 62 61 73 65 20 74 32 20   in database t2 
23e0: 2a 2a 2a 0a 50 61 67 65 20 34 20 69 73 20 6e 65  ***.Page 4 is ne
23f0: 76 65 72 20 75 73 65 64 7d 7d 0a 20 20 20 20 64  ver used}}.    d
2400: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 33 2e  o_test pragma-3.
2410: 31 31 20 7b 0a 20 20 20 20 20 20 65 78 65 63 73  11 {.      execs
2420: 71 6c 20 7b 0a 20 20 20 20 20 20 20 20 50 52 41  ql {.        PRA
2430: 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68  GMA integrity_ch
2440: 65 63 6b 3d 35 0a 20 20 20 20 20 20 7d 0a 20 20  eck=5.      }.  
2450: 20 20 7d 20 7b 7b 2a 2a 2a 20 69 6e 20 64 61 74    } {{*** in dat
2460: 61 62 61 73 65 20 74 32 20 2a 2a 2a 0a 50 61 67  abase t2 ***.Pag
2470: 65 20 34 20 69 73 20 6e 65 76 65 72 20 75 73 65  e 4 is never use
2480: 64 0a 50 61 67 65 20 35 20 69 73 20 6e 65 76 65  d.Page 5 is neve
2490: 72 20 75 73 65 64 0a 50 61 67 65 20 36 20 69 73  r used.Page 6 is
24a0: 20 6e 65 76 65 72 20 75 73 65 64 7d 20 7b 72 6f   never used} {ro
24b0: 77 69 64 20 31 20 6d 69 73 73 69 6e 67 20 66 72  wid 1 missing fr
24c0: 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b 72 6f  om index i2} {ro
24d0: 77 69 64 20 32 20 6d 69 73 73 69 6e 67 20 66 72  wid 2 missing fr
24e0: 6f 6d 20 69 6e 64 65 78 20 69 32 7d 7d 0a 20 20  om index i2}}.  
24f0: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
2500: 2d 33 2e 31 32 20 7b 0a 20 20 20 20 20 20 65 78  -3.12 {.      ex
2510: 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 20 20  ecsql {.        
2520: 50 52 41 47 4d 41 20 69 6e 74 65 67 72 69 74 79  PRAGMA integrity
2530: 5f 63 68 65 63 6b 3d 34 0a 20 20 20 20 20 20 7d  _check=4.      }
2540: 0a 20 20 20 20 7d 20 7b 7b 2a 2a 2a 20 69 6e 20  .    } {{*** in 
2550: 64 61 74 61 62 61 73 65 20 74 32 20 2a 2a 2a 0a  database t2 ***.
2560: 50 61 67 65 20 34 20 69 73 20 6e 65 76 65 72 20  Page 4 is never 
2570: 75 73 65 64 0a 50 61 67 65 20 35 20 69 73 20 6e  used.Page 5 is n
2580: 65 76 65 72 20 75 73 65 64 0a 50 61 67 65 20 36  ever used.Page 6
2590: 20 69 73 20 6e 65 76 65 72 20 75 73 65 64 7d 20   is never used} 
25a0: 7b 72 6f 77 69 64 20 31 20 6d 69 73 73 69 6e 67  {rowid 1 missing
25b0: 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 7d   from index i2}}
25c0: 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 70 72 61  .    do_test pra
25d0: 67 6d 61 2d 33 2e 31 33 20 7b 0a 20 20 20 20 20  gma-3.13 {.     
25e0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20   execsql {.     
25f0: 20 20 20 50 52 41 47 4d 41 20 69 6e 74 65 67 72     PRAGMA integr
2600: 69 74 79 5f 63 68 65 63 6b 3d 33 0a 20 20 20 20  ity_check=3.    
2610: 20 20 7d 0a 20 20 20 20 7d 20 7b 7b 2a 2a 2a 20    }.    } {{*** 
2620: 69 6e 20 64 61 74 61 62 61 73 65 20 74 32 20 2a  in database t2 *
2630: 2a 2a 0a 50 61 67 65 20 34 20 69 73 20 6e 65 76  **.Page 4 is nev
2640: 65 72 20 75 73 65 64 0a 50 61 67 65 20 35 20 69  er used.Page 5 i
2650: 73 20 6e 65 76 65 72 20 75 73 65 64 0a 50 61 67  s never used.Pag
2660: 65 20 36 20 69 73 20 6e 65 76 65 72 20 75 73 65  e 6 is never use
2670: 64 7d 7d 0a 20 20 20 20 64 6f 5f 74 65 73 74 20  d}}.    do_test 
2680: 70 72 61 67 6d 61 2d 33 2e 31 34 20 7b 0a 20 20  pragma-3.14 {.  
2690: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20      execsql {.  
26a0: 20 20 20 20 20 20 50 52 41 47 4d 41 20 69 6e 74        PRAGMA int
26b0: 65 67 72 69 74 79 5f 63 68 65 63 6b 28 32 29 0a  egrity_check(2).
26c0: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 20 7b 7b        }.    } {{
26d0: 2a 2a 2a 20 69 6e 20 64 61 74 61 62 61 73 65 20  *** in database 
26e0: 74 32 20 2a 2a 2a 0a 50 61 67 65 20 34 20 69 73  t2 ***.Page 4 is
26f0: 20 6e 65 76 65 72 20 75 73 65 64 0a 50 61 67 65   never used.Page
2700: 20 35 20 69 73 20 6e 65 76 65 72 20 75 73 65 64   5 is never used
2710: 7d 7d 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 70  }}.    do_test p
2720: 72 61 67 6d 61 2d 33 2e 31 35 20 7b 0a 20 20 20  ragma-3.15 {.   
2730: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
2740: 20 20 20 20 20 41 54 54 41 43 48 20 27 74 65 73       ATTACH 'tes
2750: 74 65 72 72 2e 64 62 27 20 41 53 20 74 33 3b 0a  terr.db' AS t3;.
2760: 20 20 20 20 20 20 20 20 50 52 41 47 4d 41 20 69          PRAGMA i
2770: 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 0a 20  ntegrity_check. 
2780: 20 20 20 20 20 7d 0a 20 20 20 20 7d 20 7b 7b 2a       }.    } {{*
2790: 2a 2a 20 69 6e 20 64 61 74 61 62 61 73 65 20 74  ** in database t
27a0: 32 20 2a 2a 2a 0a 50 61 67 65 20 34 20 69 73 20  2 ***.Page 4 is 
27b0: 6e 65 76 65 72 20 75 73 65 64 0a 50 61 67 65 20  never used.Page 
27c0: 35 20 69 73 20 6e 65 76 65 72 20 75 73 65 64 0a  5 is never used.
27d0: 50 61 67 65 20 36 20 69 73 20 6e 65 76 65 72 20  Page 6 is never 
27e0: 75 73 65 64 7d 20 7b 72 6f 77 69 64 20 31 20 6d  used} {rowid 1 m
27f0: 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65  issing from inde
2800: 78 20 69 32 7d 20 7b 72 6f 77 69 64 20 32 20 6d  x i2} {rowid 2 m
2810: 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65  issing from inde
2820: 78 20 69 32 7d 20 7b 77 72 6f 6e 67 20 23 20 6f  x i2} {wrong # o
2830: 66 20 65 6e 74 72 69 65 73 20 69 6e 20 69 6e 64  f entries in ind
2840: 65 78 20 69 32 7d 20 7b 2a 2a 2a 20 69 6e 20 64  ex i2} {*** in d
2850: 61 74 61 62 61 73 65 20 74 33 20 2a 2a 2a 0a 50  atabase t3 ***.P
2860: 61 67 65 20 34 20 69 73 20 6e 65 76 65 72 20 75  age 4 is never u
2870: 73 65 64 0a 50 61 67 65 20 35 20 69 73 20 6e 65  sed.Page 5 is ne
2880: 76 65 72 20 75 73 65 64 0a 50 61 67 65 20 36 20  ver used.Page 6 
2890: 69 73 20 6e 65 76 65 72 20 75 73 65 64 7d 20 7b  is never used} {
28a0: 72 6f 77 69 64 20 31 20 6d 69 73 73 69 6e 67 20  rowid 1 missing 
28b0: 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b  from index i2} {
28c0: 72 6f 77 69 64 20 32 20 6d 69 73 73 69 6e 67 20  rowid 2 missing 
28d0: 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b  from index i2} {
28e0: 77 72 6f 6e 67 20 23 20 6f 66 20 65 6e 74 72 69  wrong # of entri
28f0: 65 73 20 69 6e 20 69 6e 64 65 78 20 69 32 7d 7d  es in index i2}}
2900: 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 70 72 61  .    do_test pra
2910: 67 6d 61 2d 33 2e 31 36 20 7b 0a 20 20 20 20 20  gma-3.16 {.     
2920: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20   execsql {.     
2930: 20 20 20 50 52 41 47 4d 41 20 69 6e 74 65 67 72     PRAGMA integr
2940: 69 74 79 5f 63 68 65 63 6b 28 31 30 29 0a 20 20  ity_check(10).  
2950: 20 20 20 20 7d 0a 20 20 20 20 7d 20 7b 7b 2a 2a      }.    } {{**
2960: 2a 20 69 6e 20 64 61 74 61 62 61 73 65 20 74 32  * in database t2
2970: 20 2a 2a 2a 0a 50 61 67 65 20 34 20 69 73 20 6e   ***.Page 4 is n
2980: 65 76 65 72 20 75 73 65 64 0a 50 61 67 65 20 35  ever used.Page 5
2990: 20 69 73 20 6e 65 76 65 72 20 75 73 65 64 0a 50   is never used.P
29a0: 61 67 65 20 36 20 69 73 20 6e 65 76 65 72 20 75  age 6 is never u
29b0: 73 65 64 7d 20 7b 72 6f 77 69 64 20 31 20 6d 69  sed} {rowid 1 mi
29c0: 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78  ssing from index
29d0: 20 69 32 7d 20 7b 72 6f 77 69 64 20 32 20 6d 69   i2} {rowid 2 mi
29e0: 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78  ssing from index
29f0: 20 69 32 7d 20 7b 77 72 6f 6e 67 20 23 20 6f 66   i2} {wrong # of
2a00: 20 65 6e 74 72 69 65 73 20 69 6e 20 69 6e 64 65   entries in inde
2a10: 78 20 69 32 7d 20 7b 2a 2a 2a 20 69 6e 20 64 61  x i2} {*** in da
2a20: 74 61 62 61 73 65 20 74 33 20 2a 2a 2a 0a 50 61  tabase t3 ***.Pa
2a30: 67 65 20 34 20 69 73 20 6e 65 76 65 72 20 75 73  ge 4 is never us
2a40: 65 64 0a 50 61 67 65 20 35 20 69 73 20 6e 65 76  ed.Page 5 is nev
2a50: 65 72 20 75 73 65 64 0a 50 61 67 65 20 36 20 69  er used.Page 6 i
2a60: 73 20 6e 65 76 65 72 20 75 73 65 64 7d 20 7b 72  s never used} {r
2a70: 6f 77 69 64 20 31 20 6d 69 73 73 69 6e 67 20 66  owid 1 missing f
2a80: 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 7d 0a 20  rom index i2}}. 
2a90: 20 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d     do_test pragm
2aa0: 61 2d 33 2e 31 37 20 7b 0a 20 20 20 20 20 20 65  a-3.17 {.      e
2ab0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 20  xecsql {.       
2ac0: 20 50 52 41 47 4d 41 20 69 6e 74 65 67 72 69 74   PRAGMA integrit
2ad0: 79 5f 63 68 65 63 6b 3d 38 0a 20 20 20 20 20 20  y_check=8.      
2ae0: 7d 0a 20 20 20 20 7d 20 7b 7b 2a 2a 2a 20 69 6e  }.    } {{*** in
2af0: 20 64 61 74 61 62 61 73 65 20 74 32 20 2a 2a 2a   database t2 ***
2b00: 0a 50 61 67 65 20 34 20 69 73 20 6e 65 76 65 72  .Page 4 is never
2b10: 20 75 73 65 64 0a 50 61 67 65 20 35 20 69 73 20   used.Page 5 is 
2b20: 6e 65 76 65 72 20 75 73 65 64 0a 50 61 67 65 20  never used.Page 
2b30: 36 20 69 73 20 6e 65 76 65 72 20 75 73 65 64 7d  6 is never used}
2b40: 20 7b 72 6f 77 69 64 20 31 20 6d 69 73 73 69 6e   {rowid 1 missin
2b50: 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d  g from index i2}
2b60: 20 7b 72 6f 77 69 64 20 32 20 6d 69 73 73 69 6e   {rowid 2 missin
2b70: 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d  g from index i2}
2b80: 20 7b 77 72 6f 6e 67 20 23 20 6f 66 20 65 6e 74   {wrong # of ent
2b90: 72 69 65 73 20 69 6e 20 69 6e 64 65 78 20 69 32  ries in index i2
2ba0: 7d 20 7b 2a 2a 2a 20 69 6e 20 64 61 74 61 62 61  } {*** in databa
2bb0: 73 65 20 74 33 20 2a 2a 2a 0a 50 61 67 65 20 34  se t3 ***.Page 4
2bc0: 20 69 73 20 6e 65 76 65 72 20 75 73 65 64 0a 50   is never used.P
2bd0: 61 67 65 20 35 20 69 73 20 6e 65 76 65 72 20 75  age 5 is never u
2be0: 73 65 64 7d 7d 0a 20 20 20 20 64 6f 5f 74 65 73  sed}}.    do_tes
2bf0: 74 20 70 72 61 67 6d 61 2d 33 2e 31 38 20 7b 0a  t pragma-3.18 {.
2c00: 20 20 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a        execsql {.
2c10: 20 20 20 20 20 20 20 20 50 52 41 47 4d 41 20 69          PRAGMA i
2c20: 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 3d 34  ntegrity_check=4
2c30: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 20 7b  .      }.    } {
2c40: 7b 2a 2a 2a 20 69 6e 20 64 61 74 61 62 61 73 65  {*** in database
2c50: 20 74 32 20 2a 2a 2a 0a 50 61 67 65 20 34 20 69   t2 ***.Page 4 i
2c60: 73 20 6e 65 76 65 72 20 75 73 65 64 0a 50 61 67  s never used.Pag
2c70: 65 20 35 20 69 73 20 6e 65 76 65 72 20 75 73 65  e 5 is never use
2c80: 64 0a 50 61 67 65 20 36 20 69 73 20 6e 65 76 65  d.Page 6 is neve
2c90: 72 20 75 73 65 64 7d 20 7b 72 6f 77 69 64 20 31  r used} {rowid 1
2ca0: 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e   missing from in
2cb0: 64 65 78 20 69 32 7d 7d 0a 20 20 7d 0a 20 20 64  dex i2}}.  }.  d
2cc0: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 33 2e  o_test pragma-3.
2cd0: 39 39 20 7b 0a 20 20 20 20 63 61 74 63 68 73 71  99 {.    catchsq
2ce0: 6c 20 7b 44 45 54 41 43 48 20 74 33 7d 0a 20 20  l {DETACH t3}.  
2cf0: 20 20 63 61 74 63 68 73 71 6c 20 7b 44 45 54 41    catchsql {DETA
2d00: 43 48 20 74 32 7d 0a 20 20 20 20 66 69 6c 65 20  CH t2}.    file 
2d10: 64 65 6c 65 74 65 20 2d 66 6f 72 63 65 20 74 65  delete -force te
2d20: 73 74 65 72 72 2e 64 62 20 74 65 73 74 65 72 72  sterr.db testerr
2d30: 2e 64 62 2d 6a 6f 75 72 6e 61 6c 0a 20 20 20 20  .db-journal.    
2d40: 63 61 74 63 68 73 71 6c 20 7b 44 52 4f 50 20 49  catchsql {DROP I
2d50: 4e 44 45 58 20 69 32 7d 0a 20 20 7d 20 7b 30 20  NDEX i2}.  } {0 
2d60: 7b 7d 7d 0a 7d 0a 0a 23 20 54 65 73 74 20 6d 6f  {}}.}..# Test mo
2d70: 64 69 66 79 69 6e 67 20 74 68 65 20 63 61 63 68  difying the cach
2d80: 65 5f 73 69 7a 65 20 6f 66 20 61 6e 20 61 74 74  e_size of an att
2d90: 61 63 68 65 64 20 64 61 74 61 62 61 73 65 2e 0a  ached database..
2da0: 69 66 63 61 70 61 62 6c 65 20 70 61 67 65 72 5f  ifcapable pager_
2db0: 70 72 61 67 6d 61 73 26 26 61 74 74 61 63 68 20  pragmas&&attach 
2dc0: 7b 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  {.do_test pragma
2dd0: 2d 34 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c  -4.1 {.  execsql
2de0: 20 7b 0a 20 20 20 20 41 54 54 41 43 48 20 27 74   {.    ATTACH 't
2df0: 65 73 74 32 2e 64 62 27 20 41 53 20 61 75 78 3b  est2.db' AS aux;
2e00: 0a 20 20 20 20 70 72 61 67 6d 61 20 61 75 78 2e  .    pragma aux.
2e10: 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20  cache_size;.    
2e20: 70 72 61 67 6d 61 20 61 75 78 2e 64 65 66 61 75  pragma aux.defau
2e30: 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20  lt_cache_size;. 
2e40: 20 7d 20 0a 7d 20 5b 6c 69 73 74 20 24 44 46 4c   } .} [list $DFL
2e50: 54 5f 43 41 43 48 45 5f 53 5a 20 24 44 46 4c 54  T_CACHE_SZ $DFLT
2e60: 5f 43 41 43 48 45 5f 53 5a 5d 0a 64 6f 5f 74 65  _CACHE_SZ].do_te
2e70: 73 74 20 70 72 61 67 6d 61 2d 34 2e 32 20 7b 0a  st pragma-4.2 {.
2e80: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
2e90: 70 72 61 67 6d 61 20 61 75 78 2e 63 61 63 68 65  pragma aux.cache
2ea0: 5f 73 69 7a 65 20 3d 20 35 30 3b 0a 20 20 20 20  _size = 50;.    
2eb0: 70 72 61 67 6d 61 20 61 75 78 2e 63 61 63 68 65  pragma aux.cache
2ec0: 5f 73 69 7a 65 3b 0a 20 20 20 20 70 72 61 67 6d  _size;.    pragm
2ed0: 61 20 61 75 78 2e 64 65 66 61 75 6c 74 5f 63 61  a aux.default_ca
2ee0: 63 68 65 5f 73 69 7a 65 3b 0a 20 20 7d 20 0a 7d  che_size;.  } .}
2ef0: 20 5b 6c 69 73 74 20 35 30 20 24 44 46 4c 54 5f   [list 50 $DFLT_
2f00: 43 41 43 48 45 5f 53 5a 5d 0a 64 6f 5f 74 65 73  CACHE_SZ].do_tes
2f10: 74 20 70 72 61 67 6d 61 2d 34 2e 33 20 7b 0a 20  t pragma-4.3 {. 
2f20: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 70   execsql {.    p
2f30: 72 61 67 6d 61 20 61 75 78 2e 64 65 66 61 75 6c  ragma aux.defaul
2f40: 74 5f 63 61 63 68 65 5f 73 69 7a 65 20 3d 20 34  t_cache_size = 4
2f50: 35 36 3b 0a 20 20 20 20 70 72 61 67 6d 61 20 61  56;.    pragma a
2f60: 75 78 2e 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20  ux.cache_size;. 
2f70: 20 20 20 70 72 61 67 6d 61 20 61 75 78 2e 64 65     pragma aux.de
2f80: 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65  fault_cache_size
2f90: 3b 0a 20 20 7d 20 0a 7d 20 7b 34 35 36 20 34 35  ;.  } .} {456 45
2fa0: 36 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  6}.do_test pragm
2fb0: 61 2d 34 2e 34 20 7b 0a 20 20 65 78 65 63 73 71  a-4.4 {.  execsq
2fc0: 6c 20 7b 0a 20 20 20 20 70 72 61 67 6d 61 20 63  l {.    pragma c
2fd0: 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 70  ache_size;.    p
2fe0: 72 61 67 6d 61 20 64 65 66 61 75 6c 74 5f 63 61  ragma default_ca
2ff0: 63 68 65 5f 73 69 7a 65 3b 0a 20 20 7d 20 0a 7d  che_size;.  } .}
3000: 20 5b 6c 69 73 74 20 24 44 46 4c 54 5f 43 41 43   [list $DFLT_CAC
3010: 48 45 5f 53 5a 20 24 44 46 4c 54 5f 43 41 43 48  HE_SZ $DFLT_CACH
3020: 45 5f 53 5a 5d 0a 64 6f 5f 74 65 73 74 20 70 72  E_SZ].do_test pr
3030: 61 67 6d 61 2d 34 2e 35 20 7b 0a 20 20 65 78 65  agma-4.5 {.  exe
3040: 63 73 71 6c 20 7b 0a 20 20 20 20 44 45 54 41 43  csql {.    DETAC
3050: 48 20 61 75 78 3b 0a 20 20 20 20 41 54 54 41 43  H aux;.    ATTAC
3060: 48 20 27 74 65 73 74 33 2e 64 62 27 20 41 53 20  H 'test3.db' AS 
3070: 61 75 78 3b 0a 20 20 20 20 70 72 61 67 6d 61 20  aux;.    pragma 
3080: 61 75 78 2e 63 61 63 68 65 5f 73 69 7a 65 3b 0a  aux.cache_size;.
3090: 20 20 20 20 70 72 61 67 6d 61 20 61 75 78 2e 64      pragma aux.d
30a0: 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a  efault_cache_siz
30b0: 65 3b 0a 20 20 7d 20 0a 7d 20 5b 6c 69 73 74 20  e;.  } .} [list 
30c0: 24 44 46 4c 54 5f 43 41 43 48 45 5f 53 5a 20 24  $DFLT_CACHE_SZ $
30d0: 44 46 4c 54 5f 43 41 43 48 45 5f 53 5a 5d 0a 64  DFLT_CACHE_SZ].d
30e0: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 34 2e  o_test pragma-4.
30f0: 36 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  6 {.  execsql {.
3100: 20 20 20 20 44 45 54 41 43 48 20 61 75 78 3b 0a      DETACH aux;.
3110: 20 20 20 20 41 54 54 41 43 48 20 27 74 65 73 74      ATTACH 'test
3120: 32 2e 64 62 27 20 41 53 20 61 75 78 3b 0a 20 20  2.db' AS aux;.  
3130: 20 20 70 72 61 67 6d 61 20 61 75 78 2e 63 61 63    pragma aux.cac
3140: 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 70 72 61  he_size;.    pra
3150: 67 6d 61 20 61 75 78 2e 64 65 66 61 75 6c 74 5f  gma aux.default_
3160: 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 7d 20  cache_size;.  } 
3170: 0a 7d 20 7b 34 35 36 20 34 35 36 7d 0a 7d 20 3b  .} {456 456}.} ;
3180: 23 20 69 66 63 61 70 61 62 6c 65 20 70 61 67 65  # ifcapable page
3190: 72 5f 70 72 61 67 6d 61 73 0a 0a 23 20 54 65 73  r_pragmas..# Tes
31a0: 74 20 74 68 61 74 20 6d 6f 64 69 66 79 69 6e 67  t that modifying
31b0: 20 74 68 65 20 73 79 6e 63 2d 6c 65 76 65 6c 20   the sync-level 
31c0: 69 6e 20 74 68 65 20 6d 69 64 64 6c 65 20 6f 66  in the middle of
31d0: 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69   a transaction i
31e0: 73 0a 23 20 64 69 73 61 6c 6c 6f 77 65 64 2e 0a  s.# disallowed..
31f0: 69 66 63 61 70 61 62 6c 65 20 70 61 67 65 72 5f  ifcapable pager_
3200: 70 72 61 67 6d 61 73 20 7b 0a 64 6f 5f 74 65 73  pragmas {.do_tes
3210: 74 20 70 72 61 67 6d 61 2d 35 2e 30 20 7b 0a 20  t pragma-5.0 {. 
3220: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 70   execsql {.    p
3230: 72 61 67 6d 61 20 73 79 6e 63 68 72 6f 6e 6f 75  ragma synchronou
3240: 73 3b 0a 20 20 7d 20 0a 7d 20 7b 32 7d 0a 64 6f  s;.  } .} {2}.do
3250: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 35 2e 31  _test pragma-5.1
3260: 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a   {.  catchsql {.
3270: 20 20 20 20 42 45 47 49 4e 3b 0a 20 20 20 20 70      BEGIN;.    p
3280: 72 61 67 6d 61 20 73 79 6e 63 68 72 6f 6e 6f 75  ragma synchronou
3290: 73 20 3d 20 4f 46 46 3b 0a 20 20 7d 20 0a 7d 20  s = OFF;.  } .} 
32a0: 7b 31 20 7b 53 61 66 65 74 79 20 6c 65 76 65 6c  {1 {Safety level
32b0: 20 6d 61 79 20 6e 6f 74 20 62 65 20 63 68 61 6e   may not be chan
32c0: 67 65 64 20 69 6e 73 69 64 65 20 61 20 74 72 61  ged inside a tra
32d0: 6e 73 61 63 74 69 6f 6e 7d 7d 0a 64 6f 5f 74 65  nsaction}}.do_te
32e0: 73 74 20 70 72 61 67 6d 61 2d 35 2e 32 20 7b 0a  st pragma-5.2 {.
32f0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
3300: 70 72 61 67 6d 61 20 73 79 6e 63 68 72 6f 6e 6f  pragma synchrono
3310: 75 73 3b 0a 20 20 7d 20 0a 7d 20 7b 32 7d 0a 63  us;.  } .} {2}.c
3320: 61 74 63 68 73 71 6c 20 7b 43 4f 4d 4d 49 54 3b  atchsql {COMMIT;
3330: 7d 0a 7d 20 3b 23 20 69 66 63 61 70 61 62 6c 65  }.} ;# ifcapable
3340: 20 70 61 67 65 72 5f 70 72 61 67 6d 61 73 0a 0a   pager_pragmas..
3350: 23 20 54 65 73 74 20 73 63 68 65 6d 61 2d 71 75  # Test schema-qu
3360: 65 72 79 20 70 72 61 67 6d 61 73 0a 23 0a 69 66  ery pragmas.#.if
3370: 63 61 70 61 62 6c 65 20 73 63 68 65 6d 61 5f 70  capable schema_p
3380: 72 61 67 6d 61 73 20 7b 0a 69 66 63 61 70 61 62  ragmas {.ifcapab
3390: 6c 65 20 74 65 6d 70 64 62 26 26 61 74 74 61 63  le tempdb&&attac
33a0: 68 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 70 72  h {.  do_test pr
33b0: 61 67 6d 61 2d 36 2e 31 20 7b 0a 20 20 20 20 73  agma-6.1 {.    s
33c0: 65 74 20 72 65 73 20 7b 7d 0a 20 20 20 20 65 78  et res {}.    ex
33d0: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20  ecsql {SELECT * 
33e0: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70  FROM sqlite_temp
33f0: 5f 6d 61 73 74 65 72 7d 0a 20 20 20 20 66 6f 72  _master}.    for
3400: 65 61 63 68 20 7b 69 64 78 20 6e 61 6d 65 20 66  each {idx name f
3410: 69 6c 65 7d 20 5b 65 78 65 63 73 71 6c 20 7b 70  ile} [execsql {p
3420: 72 61 67 6d 61 20 64 61 74 61 62 61 73 65 5f 6c  ragma database_l
3430: 69 73 74 7d 5d 20 7b 0a 20 20 20 20 20 20 6c 61  ist}] {.      la
3440: 70 70 65 6e 64 20 72 65 73 20 24 69 64 78 20 24  ppend res $idx $
3450: 6e 61 6d 65 0a 20 20 20 20 7d 0a 20 20 20 20 73  name.    }.    s
3460: 65 74 20 72 65 73 0a 20 20 7d 20 7b 30 20 6d 61  et res.  } {0 ma
3470: 69 6e 20 31 20 74 65 6d 70 20 32 20 61 75 78 7d  in 1 temp 2 aux}
3480: 0a 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .}.do_test pragm
3490: 61 2d 36 2e 32 20 7b 0a 20 20 65 78 65 63 73 71  a-6.2 {.  execsq
34a0: 6c 20 7b 0a 20 20 20 20 70 72 61 67 6d 61 20 74  l {.    pragma t
34b0: 61 62 6c 65 5f 69 6e 66 6f 28 74 32 29 0a 20 20  able_info(t2).  
34c0: 7d 0a 7d 20 7b 30 20 61 20 7b 7d 20 30 20 7b 7d  }.} {0 a {} 0 {}
34d0: 20 30 20 31 20 62 20 7b 7d 20 30 20 7b 7d 20 30   0 1 b {} 0 {} 0
34e0: 20 32 20 63 20 7b 7d 20 30 20 7b 7d 20 30 7d 0a   2 c {} 0 {} 0}.
34f0: 64 62 20 6e 75 6c 6c 76 61 6c 75 65 20 3c 3c 4e  db nullvalue <<N
3500: 55 4c 4c 3e 3e 0a 64 6f 5f 74 65 73 74 20 70 72  ULL>>.do_test pr
3510: 61 67 6d 61 2d 36 2e 32 2e 32 20 7b 0a 20 20 65  agma-6.2.2 {.  e
3520: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45  xecsql {.    CRE
3530: 41 54 45 20 54 41 42 4c 45 20 74 35 28 0a 20 20  ATE TABLE t5(.  
3540: 20 20 20 20 61 20 54 45 58 54 20 44 45 46 41 55      a TEXT DEFAU
3550: 4c 54 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 53  LT CURRENT_TIMES
3560: 54 41 4d 50 2c 20 0a 20 20 20 20 20 20 62 20 44  TAMP, .      b D
3570: 45 46 41 55 4c 54 20 28 35 2b 33 29 2c 0a 20 20  EFAULT (5+3),.  
3580: 20 20 20 20 63 20 54 45 58 54 2c 0a 20 20 20 20      c TEXT,.    
3590: 20 20 64 20 49 4e 54 45 47 45 52 20 44 45 46 41    d INTEGER DEFA
35a0: 55 4c 54 20 4e 55 4c 4c 2c 0a 20 20 20 20 20 20  ULT NULL,.      
35b0: 65 20 54 45 58 54 20 44 45 46 41 55 4c 54 20 27  e TEXT DEFAULT '
35c0: 27 0a 20 20 20 20 29 3b 0a 20 20 20 20 50 52 41  '.    );.    PRA
35d0: 47 4d 41 20 74 61 62 6c 65 5f 69 6e 66 6f 28 74  GMA table_info(t
35e0: 35 29 3b 0a 20 20 7d 0a 7d 20 7b 30 20 61 20 54  5);.  }.} {0 a T
35f0: 45 58 54 20 30 20 43 55 52 52 45 4e 54 5f 54 49  EXT 0 CURRENT_TI
3600: 4d 45 53 54 41 4d 50 20 30 20 31 20 62 20 7b 7d  MESTAMP 0 1 b {}
3610: 20 30 20 35 2b 33 20 30 20 32 20 63 20 54 45 58   0 5+3 0 2 c TEX
3620: 54 20 30 20 3c 3c 4e 55 4c 4c 3e 3e 20 30 20 33  T 0 <<NULL>> 0 3
3630: 20 64 20 49 4e 54 45 47 45 52 20 30 20 4e 55 4c   d INTEGER 0 NUL
3640: 4c 20 30 20 34 20 65 20 54 45 58 54 20 30 20 27  L 0 4 e TEXT 0 '
3650: 27 20 30 7d 0a 64 62 20 6e 75 6c 6c 76 61 6c 75  ' 0}.db nullvalu
3660: 65 20 7b 7d 0a 69 66 63 61 70 61 62 6c 65 20 7b  e {}.ifcapable {
3670: 66 6f 72 65 69 67 6e 6b 65 79 7d 20 7b 0a 20 20  foreignkey} {.  
3680: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 36  do_test pragma-6
3690: 2e 33 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  .3 {.    execsql
36a0: 20 7b 0a 20 20 20 20 20 20 43 52 45 41 54 45 20   {.      CREATE 
36b0: 54 41 42 4c 45 20 74 33 28 61 20 69 6e 74 20 72  TABLE t3(a int r
36c0: 65 66 65 72 65 6e 63 65 73 20 74 32 28 62 29 2c  eferences t2(b),
36d0: 20 62 20 55 4e 49 51 55 45 29 3b 0a 20 20 20 20   b UNIQUE);.    
36e0: 20 20 70 72 61 67 6d 61 20 66 6f 72 65 69 67 6e    pragma foreign
36f0: 5f 6b 65 79 5f 6c 69 73 74 28 74 33 29 3b 0a 20  _key_list(t3);. 
3700: 20 20 20 7d 0a 20 20 7d 20 7b 30 20 30 20 74 32     }.  } {0 0 t2
3710: 20 61 20 62 7d 0a 20 20 64 6f 5f 74 65 73 74 20   a b}.  do_test 
3720: 70 72 61 67 6d 61 2d 36 2e 34 20 7b 0a 20 20 20  pragma-6.4 {.   
3730: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20   execsql {.     
3740: 20 70 72 61 67 6d 61 20 69 6e 64 65 78 5f 6c 69   pragma index_li
3750: 73 74 28 74 33 29 3b 0a 20 20 20 20 7d 0a 20 20  st(t3);.    }.  
3760: 7d 20 7b 30 20 73 71 6c 69 74 65 5f 61 75 74 6f  } {0 sqlite_auto
3770: 69 6e 64 65 78 5f 74 33 5f 31 20 31 7d 0a 7d 0a  index_t3_1 1}.}.
3780: 69 66 63 61 70 61 62 6c 65 20 7b 21 66 6f 72 65  ifcapable {!fore
3790: 69 67 6e 6b 65 79 7d 20 7b 0a 20 20 65 78 65 63  ignkey} {.  exec
37a0: 73 71 6c 20 7b 43 52 45 41 54 45 20 54 41 42 4c  sql {CREATE TABL
37b0: 45 20 74 33 28 61 2c 62 20 55 4e 49 51 55 45 29  E t3(a,b UNIQUE)
37c0: 7d 0a 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67  }.}.do_test prag
37d0: 6d 61 2d 36 2e 35 20 7b 0a 20 20 65 78 65 63 73  ma-6.5 {.  execs
37e0: 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20  ql {.    CREATE 
37f0: 49 4e 44 45 58 20 74 33 69 31 20 4f 4e 20 74 33  INDEX t3i1 ON t3
3800: 28 61 2c 62 29 3b 0a 20 20 20 20 70 72 61 67 6d  (a,b);.    pragm
3810: 61 20 69 6e 64 65 78 5f 69 6e 66 6f 28 74 33 69  a index_info(t3i
3820: 31 29 3b 0a 20 20 7d 0a 7d 20 7b 30 20 30 20 61  1);.  }.} {0 0 a
3830: 20 31 20 31 20 62 7d 0a 0a 69 66 63 61 70 61 62   1 1 b}..ifcapab
3840: 6c 65 20 74 65 6d 70 64 62 20 7b 0a 20 20 23 20  le tempdb {.  # 
3850: 54 65 73 74 20 66 6f 72 20 74 69 63 6b 65 74 20  Test for ticket 
3860: 23 33 33 32 30 2e 20 57 68 65 6e 20 61 20 74 65  #3320. When a te
3870: 6d 70 20 74 61 62 6c 65 20 6f 66 20 74 68 65 20  mp table of the 
3880: 73 61 6d 65 20 6e 61 6d 65 20 65 78 69 73 74 73  same name exists
3890: 2c 20 6d 61 6b 65 0a 20 20 23 20 73 75 72 65 20  , make.  # sure 
38a0: 74 68 65 20 73 63 68 65 6d 61 20 6f 66 20 74 68  the schema of th
38b0: 65 20 6d 61 69 6e 20 74 61 62 6c 65 20 63 61 6e  e main table can
38c0: 20 73 74 69 6c 6c 20 62 65 20 71 75 65 72 69 65   still be querie
38d0: 64 20 75 73 69 6e 67 20 0a 20 20 23 20 22 70 72  d using .  # "pr
38e0: 61 67 6d 61 20 74 61 62 6c 65 5f 69 6e 66 6f 22  agma table_info"
38f0: 3a 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67  :.  do_test prag
3900: 6d 61 2d 36 2e 36 2e 31 20 7b 0a 20 20 20 20 65  ma-6.6.1 {.    e
3910: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 43  xecsql {.      C
3920: 52 45 41 54 45 20 54 41 42 4c 45 20 74 72 69 61  REATE TABLE tria
3930: 6c 28 63 6f 6c 5f 6d 61 69 6e 29 3b 0a 20 20 20  l(col_main);.   
3940: 20 20 20 43 52 45 41 54 45 20 54 45 4d 50 20 54     CREATE TEMP T
3950: 41 42 4c 45 20 74 72 69 61 6c 28 63 6f 6c 5f 74  ABLE trial(col_t
3960: 65 6d 70 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 20  emp);.    }.  } 
3970: 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61  {}.  do_test pra
3980: 67 6d 61 2d 36 2e 36 2e 32 20 7b 0a 20 20 20 20  gma-6.6.2 {.    
3990: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
39a0: 50 52 41 47 4d 41 20 74 61 62 6c 65 5f 69 6e 66  PRAGMA table_inf
39b0: 6f 28 74 72 69 61 6c 29 3b 0a 20 20 20 20 7d 0a  o(trial);.    }.
39c0: 20 20 7d 20 7b 30 20 63 6f 6c 5f 74 65 6d 70 20    } {0 col_temp 
39d0: 7b 7d 20 30 20 7b 7d 20 30 7d 0a 20 20 64 6f 5f  {} 0 {} 0}.  do_
39e0: 74 65 73 74 20 70 72 61 67 6d 61 2d 36 2e 36 2e  test pragma-6.6.
39f0: 33 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  3 {.    execsql 
3a00: 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 74  {.      PRAGMA t
3a10: 65 6d 70 2e 74 61 62 6c 65 5f 69 6e 66 6f 28 74  emp.table_info(t
3a20: 72 69 61 6c 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  rial);.    }.  }
3a30: 20 7b 30 20 63 6f 6c 5f 74 65 6d 70 20 7b 7d 20   {0 col_temp {} 
3a40: 30 20 7b 7d 20 30 7d 0a 20 20 64 6f 5f 74 65 73  0 {} 0}.  do_tes
3a50: 74 20 70 72 61 67 6d 61 2d 36 2e 36 2e 34 20 7b  t pragma-6.6.4 {
3a60: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
3a70: 20 20 20 20 20 50 52 41 47 4d 41 20 6d 61 69 6e       PRAGMA main
3a80: 2e 74 61 62 6c 65 5f 69 6e 66 6f 28 74 72 69 61  .table_info(tria
3a90: 6c 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 30  l);.    }.  } {0
3aa0: 20 63 6f 6c 5f 6d 61 69 6e 20 7b 7d 20 30 20 7b   col_main {} 0 {
3ab0: 7d 20 30 7d 0a 7d 0a 7d 20 3b 23 20 69 66 63 61  } 0}.}.} ;# ifca
3ac0: 70 61 62 6c 65 20 73 63 68 65 6d 61 5f 70 72 61  pable schema_pra
3ad0: 67 6d 61 73 0a 23 20 4d 69 73 63 65 6c 6c 61 6e  gmas.# Miscellan
3ae0: 65 6f 75 73 20 74 65 73 74 73 0a 23 0a 69 66 63  eous tests.#.ifc
3af0: 61 70 61 62 6c 65 20 73 63 68 65 6d 61 5f 70 72  apable schema_pr
3b00: 61 67 6d 61 73 20 7b 0a 64 6f 5f 74 65 73 74 20  agmas {.do_test 
3b10: 70 72 61 67 6d 61 2d 37 2e 31 20 7b 0a 20 20 23  pragma-7.1 {.  #
3b20: 20 4d 61 6b 65 20 73 75 72 65 20 61 20 70 72 61   Make sure a pra
3b30: 67 6d 61 20 6b 6e 6f 77 73 20 74 6f 20 72 65 61  gma knows to rea
3b40: 64 20 74 68 65 20 73 63 68 65 6d 61 20 69 66 20  d the schema if 
3b50: 69 74 20 6e 65 65 64 73 20 74 6f 0a 20 20 64 62  it needs to.  db
3b60: 20 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74 65 33   close.  sqlite3
3b70: 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20 65 78   db test.db.  ex
3b80: 65 63 73 71 6c 20 7b 0a 20 20 20 20 70 72 61 67  ecsql {.    prag
3b90: 6d 61 20 69 6e 64 65 78 5f 6c 69 73 74 28 74 33  ma index_list(t3
3ba0: 29 3b 0a 20 20 7d 0a 7d 20 7b 30 20 74 33 69 31  );.  }.} {0 t3i1
3bb0: 20 30 20 31 20 73 71 6c 69 74 65 5f 61 75 74 6f   0 1 sqlite_auto
3bc0: 69 6e 64 65 78 5f 74 33 5f 31 20 31 7d 0a 7d 20  index_t3_1 1}.} 
3bd0: 3b 23 20 69 66 63 61 70 61 62 6c 65 20 73 63 68  ;# ifcapable sch
3be0: 65 6d 61 5f 70 72 61 67 6d 61 73 0a 69 66 63 61  ema_pragmas.ifca
3bf0: 70 61 62 6c 65 20 7b 75 74 66 31 36 7d 20 7b 0a  pable {utf16} {.
3c00: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
3c10: 2d 37 2e 32 20 7b 0a 20 20 20 20 64 62 20 63 6c  -7.2 {.    db cl
3c20: 6f 73 65 0a 20 20 20 20 73 71 6c 69 74 65 33 20  ose.    sqlite3 
3c30: 64 62 20 74 65 73 74 2e 64 62 0a 20 20 20 20 63  db test.db.    c
3c40: 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 20 20  atchsql {.      
3c50: 70 72 61 67 6d 61 20 65 6e 63 6f 64 69 6e 67 3d  pragma encoding=
3c60: 62 6f 67 75 73 3b 0a 20 20 20 20 7d 0a 20 20 7d  bogus;.    }.  }
3c70: 20 7b 31 20 7b 75 6e 73 75 70 70 6f 72 74 65 64   {1 {unsupported
3c80: 20 65 6e 63 6f 64 69 6e 67 3a 20 62 6f 67 75 73   encoding: bogus
3c90: 7d 7d 0a 7d 0a 69 66 63 61 70 61 62 6c 65 20 74  }}.}.ifcapable t
3ca0: 65 6d 70 64 62 20 7b 0a 20 20 64 6f 5f 74 65 73  empdb {.  do_tes
3cb0: 74 20 70 72 61 67 6d 61 2d 37 2e 33 20 7b 0a 20  t pragma-7.3 {. 
3cc0: 20 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 20 20     db close.    
3cd0: 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e  sqlite3 db test.
3ce0: 64 62 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b  db.    execsql {
3cf0: 0a 20 20 20 20 20 20 70 72 61 67 6d 61 20 6c 6f  .      pragma lo
3d00: 63 6b 5f 73 74 61 74 75 73 3b 0a 20 20 20 20 7d  ck_status;.    }
3d10: 0a 20 20 7d 20 7b 6d 61 69 6e 20 75 6e 6c 6f 63  .  } {main unloc
3d20: 6b 65 64 20 74 65 6d 70 20 63 6c 6f 73 65 64 7d  ked temp closed}
3d30: 0a 7d 20 65 6c 73 65 20 7b 0a 20 20 64 6f 5f 74  .} else {.  do_t
3d40: 65 73 74 20 70 72 61 67 6d 61 2d 37 2e 33 20 7b  est pragma-7.3 {
3d50: 0a 20 20 20 20 64 62 20 63 6c 6f 73 65 0a 20 20  .    db close.  
3d60: 20 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73    sqlite3 db tes
3d70: 74 2e 64 62 0a 20 20 20 20 65 78 65 63 73 71 6c  t.db.    execsql
3d80: 20 7b 0a 20 20 20 20 20 20 70 72 61 67 6d 61 20   {.      pragma 
3d90: 6c 6f 63 6b 5f 73 74 61 74 75 73 3b 0a 20 20 20  lock_status;.   
3da0: 20 7d 0a 20 20 7d 20 7b 6d 61 69 6e 20 75 6e 6c   }.  } {main unl
3db0: 6f 63 6b 65 64 7d 0a 7d 0a 0a 0a 23 2d 2d 2d 2d  ocked}.}...#----
3dc0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3dd0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3de0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3df0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3e00: 2d 2d 0a 23 20 54 65 73 74 20 63 61 73 65 73 20  --.# Test cases 
3e10: 70 72 61 67 6d 61 2d 38 2e 2a 20 74 65 73 74 20  pragma-8.* test 
3e20: 74 68 65 20 22 50 52 41 47 4d 41 20 73 63 68 65  the "PRAGMA sche
3e30: 6d 61 5f 76 65 72 73 69 6f 6e 22 20 61 6e 64 20  ma_version" and 
3e40: 22 50 52 41 47 4d 41 0a 23 20 75 73 65 72 5f 76  "PRAGMA.# user_v
3e50: 65 72 73 69 6f 6e 22 20 73 74 61 74 65 6d 65 6e  ersion" statemen
3e60: 74 73 2e 0a 23 0a 23 20 70 72 61 67 6d 61 2d 38  ts..#.# pragma-8
3e70: 2e 31 3a 20 50 52 41 47 4d 41 20 73 63 68 65 6d  .1: PRAGMA schem
3e80: 61 5f 76 65 72 73 69 6f 6e 0a 23 20 70 72 61 67  a_version.# prag
3e90: 6d 61 2d 38 2e 32 3a 20 50 52 41 47 4d 41 20 75  ma-8.2: PRAGMA u
3ea0: 73 65 72 5f 76 65 72 73 69 6f 6e 0a 23 0a 0a 69  ser_version.#..i
3eb0: 66 63 61 70 61 62 6c 65 20 73 63 68 65 6d 61 5f  fcapable schema_
3ec0: 76 65 72 73 69 6f 6e 20 7b 0a 0a 23 20 46 69 72  version {..# Fir
3ed0: 73 74 20 63 68 65 63 6b 20 74 68 61 74 20 77 65  st check that we
3ee0: 20 63 61 6e 20 73 65 74 20 74 68 65 20 73 63 68   can set the sch
3ef0: 65 6d 61 20 76 65 72 73 69 6f 6e 20 61 6e 64 20  ema version and 
3f00: 74 68 65 6e 20 72 65 74 72 69 65 76 65 20 74 68  then retrieve th
3f10: 65 0a 23 20 73 61 6d 65 20 76 61 6c 75 65 2e 0a  e.# same value..
3f20: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38  do_test pragma-8
3f30: 2e 31 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c  .1.1 {.  execsql
3f40: 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 73 63   {.    PRAGMA sc
3f50: 68 65 6d 61 5f 76 65 72 73 69 6f 6e 20 3d 20 31  hema_version = 1
3f60: 30 35 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f  05;.  }.} {}.do_
3f70: 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e  test pragma-8.1.
3f80: 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 32 20 7b  2 {.  execsql2 {
3f90: 0a 20 20 20 20 50 52 41 47 4d 41 20 73 63 68 65  .    PRAGMA sche
3fa0: 6d 61 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 7d 0a  ma_version;.  }.
3fb0: 7d 20 7b 73 63 68 65 6d 61 5f 76 65 72 73 69 6f  } {schema_versio
3fc0: 6e 20 31 30 35 7d 0a 64 6f 5f 74 65 73 74 20 70  n 105}.do_test p
3fd0: 72 61 67 6d 61 2d 38 2e 31 2e 33 20 7b 0a 20 20  ragma-8.1.3 {.  
3fe0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52  execsql {.    PR
3ff0: 41 47 4d 41 20 73 63 68 65 6d 61 5f 76 65 72 73  AGMA schema_vers
4000: 69 6f 6e 20 3d 20 31 30 36 3b 0a 20 20 7d 0a 7d  ion = 106;.  }.}
4010: 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67   {}.do_test prag
4020: 6d 61 2d 38 2e 31 2e 34 20 7b 0a 20 20 65 78 65  ma-8.1.4 {.  exe
4030: 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d  csql {.    PRAGM
4040: 41 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e  A schema_version
4050: 3b 0a 20 20 7d 0a 7d 20 31 30 36 0a 0a 23 20 43  ;.  }.} 106..# C
4060: 68 65 63 6b 20 74 68 61 74 20 63 72 65 61 74 69  heck that creati
4070: 6e 67 20 61 20 74 61 62 6c 65 20 6d 6f 64 69 66  ng a table modif
4080: 69 65 73 20 74 68 65 20 73 63 68 65 6d 61 2d 76  ies the schema-v
4090: 65 72 73 69 6f 6e 20 28 74 68 69 73 20 69 73 20  ersion (this is 
40a0: 72 65 61 6c 6c 79 0a 23 20 74 6f 20 76 65 72 69  really.# to veri
40b0: 66 79 20 74 68 61 74 20 74 68 65 20 76 61 6c 75  fy that the valu
40c0: 65 20 62 65 69 6e 67 20 72 65 61 64 20 69 73 20  e being read is 
40d0: 69 6e 20 66 61 63 74 20 74 68 65 20 73 63 68 65  in fact the sche
40e0: 6d 61 20 76 65 72 73 69 6f 6e 29 2e 0a 64 6f 5f  ma version)..do_
40f0: 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e  test pragma-8.1.
4100: 35 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  5 {.  execsql {.
4110: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
4120: 20 74 34 28 61 2c 20 62 2c 20 63 29 3b 0a 20 20   t4(a, b, c);.  
4130: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 34    INSERT INTO t4
4140: 20 56 41 4c 55 45 53 28 31 2c 20 32 2c 20 33 29   VALUES(1, 2, 3)
4150: 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  ;.    SELECT * F
4160: 52 4f 4d 20 74 34 3b 0a 20 20 7d 0a 7d 20 7b 31  ROM t4;.  }.} {1
4170: 20 32 20 33 7d 0a 64 6f 5f 74 65 73 74 20 70 72   2 3}.do_test pr
4180: 61 67 6d 61 2d 38 2e 31 2e 36 20 7b 0a 20 20 65  agma-8.1.6 {.  e
4190: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41  xecsql {.    PRA
41a0: 47 4d 41 20 73 63 68 65 6d 61 5f 76 65 72 73 69  GMA schema_versi
41b0: 6f 6e 3b 0a 20 20 7d 0a 7d 20 31 30 37 0a 0a 23  on;.  }.} 107..#
41c0: 20 4e 6f 77 20 6f 70 65 6e 20 61 20 73 65 63 6f   Now open a seco
41d0: 6e 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f  nd connection to
41e0: 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20 45   the database. E
41f0: 6e 73 75 72 65 20 74 68 61 74 20 63 68 61 6e 67  nsure that chang
4200: 69 6e 67 20 74 68 65 0a 23 20 73 63 68 65 6d 61  ing the.# schema
4210: 2d 76 65 72 73 69 6f 6e 20 75 73 69 6e 67 20 74  -version using t
4220: 68 65 20 66 69 72 73 74 20 63 6f 6e 6e 65 63 74  he first connect
4230: 69 6f 6e 20 66 6f 72 63 65 73 20 74 68 65 20 73  ion forces the s
4240: 65 63 6f 6e 64 20 63 6f 6e 6e 65 63 74 69 6f 6e  econd connection
4250: 0a 23 20 74 6f 20 72 65 6c 6f 61 64 20 74 68 65  .# to reload the
4260: 20 73 63 68 65 6d 61 2e 20 54 68 69 73 20 68 61   schema. This ha
4270: 73 20 74 6f 20 62 65 20 64 6f 6e 65 20 75 73 69  s to be done usi
4280: 6e 67 20 74 68 65 20 43 2d 41 50 49 20 74 65 73  ng the C-API tes
4290: 74 20 66 75 6e 63 74 69 6f 6e 73 2c 0a 23 20 62  t functions,.# b
42a0: 65 63 61 75 73 65 20 74 68 65 20 54 43 4c 20 41  ecause the TCL A
42b0: 50 49 20 61 63 63 6f 75 6e 74 73 20 66 6f 72 20  PI accounts for 
42c0: 53 43 48 45 4d 41 5f 45 52 52 4f 52 20 61 6e 64  SCHEMA_ERROR and
42d0: 20 72 65 74 72 69 65 73 20 74 68 65 20 71 75 65   retries the que
42e0: 72 79 2e 0a 64 6f 5f 74 65 73 74 20 70 72 61 67  ry..do_test prag
42f0: 6d 61 2d 38 2e 31 2e 37 20 7b 0a 20 20 73 71 6c  ma-8.1.7 {.  sql
4300: 69 74 65 33 20 64 62 32 20 74 65 73 74 2e 64 62  ite3 db2 test.db
4310: 3b 20 73 65 74 20 3a 3a 44 42 32 20 5b 73 71 6c  ; set ::DB2 [sql
4320: 69 74 65 33 5f 63 6f 6e 6e 65 63 74 69 6f 6e 5f  ite3_connection_
4330: 70 6f 69 6e 74 65 72 20 64 62 32 5d 0a 20 20 65  pointer db2].  e
4340: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c  xecsql {.    SEL
4350: 45 43 54 20 2a 20 46 52 4f 4d 20 74 34 3b 0a 20  ECT * FROM t4;. 
4360: 20 7d 20 64 62 32 0a 7d 20 7b 31 20 32 20 33 7d   } db2.} {1 2 3}
4370: 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d  .do_test pragma-
4380: 38 2e 31 2e 38 20 7b 0a 20 20 65 78 65 63 73 71  8.1.8 {.  execsq
4390: 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 73  l {.    PRAGMA s
43a0: 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 20 3d 20  chema_version = 
43b0: 31 30 38 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f  108;.  }.} {}.do
43c0: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 31  _test pragma-8.1
43d0: 2e 39 20 7b 0a 20 20 73 65 74 20 3a 3a 53 54 4d  .9 {.  set ::STM
43e0: 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61  T [sqlite3_prepa
43f0: 72 65 20 24 3a 3a 44 42 32 20 22 53 45 4c 45 43  re $::DB2 "SELEC
4400: 54 20 2a 20 46 52 4f 4d 20 74 34 22 20 2d 31 20  T * FROM t4" -1 
4410: 44 55 4d 4d 59 5d 0a 20 20 73 71 6c 69 74 65 33  DUMMY].  sqlite3
4420: 5f 73 74 65 70 20 24 3a 3a 53 54 4d 54 0a 7d 20  _step $::STMT.} 
4430: 53 51 4c 49 54 45 5f 45 52 52 4f 52 0a 64 6f 5f  SQLITE_ERROR.do_
4440: 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e  test pragma-8.1.
4450: 31 30 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 66  10 {.  sqlite3_f
4460: 69 6e 61 6c 69 7a 65 20 24 3a 3a 53 54 4d 54 0a  inalize $::STMT.
4470: 7d 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 0a  } SQLITE_SCHEMA.
4480: 0a 23 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65  .# Make sure the
4490: 20 73 63 68 65 6d 61 2d 76 65 72 73 69 6f 6e 20   schema-version 
44a0: 63 61 6e 20 62 65 20 6d 61 6e 69 70 75 6c 61 74  can be manipulat
44b0: 65 64 20 69 6e 20 61 6e 20 61 74 74 61 63 68 65  ed in an attache
44c0: 64 20 64 61 74 61 62 61 73 65 2e 0a 66 69 6c 65  d database..file
44d0: 20 64 65 6c 65 74 65 20 2d 66 6f 72 63 65 20 74   delete -force t
44e0: 65 73 74 32 2e 64 62 0a 66 69 6c 65 20 64 65 6c  est2.db.file del
44f0: 65 74 65 20 2d 66 6f 72 63 65 20 74 65 73 74 32  ete -force test2
4500: 2e 64 62 2d 6a 6f 75 72 6e 61 6c 0a 69 66 63 61  .db-journal.ifca
4510: 70 61 62 6c 65 20 61 74 74 61 63 68 20 7b 0a 20  pable attach {. 
4520: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
4530: 38 2e 31 2e 31 31 20 7b 0a 20 20 20 20 65 78 65  8.1.11 {.    exe
4540: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 41 54 54  csql {.      ATT
4550: 41 43 48 20 27 74 65 73 74 32 2e 64 62 27 20 41  ACH 'test2.db' A
4560: 53 20 61 75 78 3b 0a 20 20 20 20 20 20 43 52 45  S aux;.      CRE
4570: 41 54 45 20 54 41 42 4c 45 20 61 75 78 2e 74 31  ATE TABLE aux.t1
4580: 28 61 2c 20 62 2c 20 63 29 3b 0a 20 20 20 20 20  (a, b, c);.     
4590: 20 50 52 41 47 4d 41 20 61 75 78 2e 73 63 68 65   PRAGMA aux.sche
45a0: 6d 61 5f 76 65 72 73 69 6f 6e 20 3d 20 32 30 35  ma_version = 205
45b0: 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 7d 0a 20  ;.    }.  } {}. 
45c0: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
45d0: 38 2e 31 2e 31 32 20 7b 0a 20 20 20 20 65 78 65  8.1.12 {.    exe
45e0: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41  csql {.      PRA
45f0: 47 4d 41 20 61 75 78 2e 73 63 68 65 6d 61 5f 76  GMA aux.schema_v
4600: 65 72 73 69 6f 6e 3b 0a 20 20 20 20 7d 0a 20 20  ersion;.    }.  
4610: 7d 20 32 30 35 0a 7d 0a 64 6f 5f 74 65 73 74 20  } 205.}.do_test 
4620: 70 72 61 67 6d 61 2d 38 2e 31 2e 31 33 20 7b 0a  pragma-8.1.13 {.
4630: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
4640: 50 52 41 47 4d 41 20 73 63 68 65 6d 61 5f 76 65  PRAGMA schema_ve
4650: 72 73 69 6f 6e 3b 0a 20 20 7d 0a 7d 20 31 30 38  rsion;.  }.} 108
4660: 0a 0a 23 20 41 6e 64 20 63 68 65 63 6b 20 74 68  ..# And check th
4670: 61 74 20 6d 6f 64 69 66 79 69 6e 67 20 74 68 65  at modifying the
4680: 20 73 63 68 65 6d 61 2d 76 65 72 73 69 6f 6e 20   schema-version 
4690: 69 6e 20 61 6e 20 61 74 74 61 63 68 65 64 20 64  in an attached d
46a0: 61 74 61 62 61 73 65 0a 23 20 66 6f 72 63 65 73  atabase.# forces
46b0: 20 74 68 65 20 73 65 63 6f 6e 64 20 63 6f 6e 6e   the second conn
46c0: 65 63 74 69 6f 6e 20 74 6f 20 72 65 6c 6f 61 64  ection to reload
46d0: 20 74 68 65 20 73 63 68 65 6d 61 2e 0a 69 66 63   the schema..ifc
46e0: 61 70 61 62 6c 65 20 61 74 74 61 63 68 20 7b 0a  apable attach {.
46f0: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
4700: 2d 38 2e 31 2e 31 34 20 7b 0a 20 20 20 20 73 71  -8.1.14 {.    sq
4710: 6c 69 74 65 33 20 64 62 32 20 74 65 73 74 2e 64  lite3 db2 test.d
4720: 62 3b 20 73 65 74 20 3a 3a 44 42 32 20 5b 73 71  b; set ::DB2 [sq
4730: 6c 69 74 65 33 5f 63 6f 6e 6e 65 63 74 69 6f 6e  lite3_connection
4740: 5f 70 6f 69 6e 74 65 72 20 64 62 32 5d 0a 20 20  _pointer db2].  
4750: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
4760: 20 20 41 54 54 41 43 48 20 27 74 65 73 74 32 2e    ATTACH 'test2.
4770: 64 62 27 20 41 53 20 61 75 78 3b 0a 20 20 20 20  db' AS aux;.    
4780: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
4790: 61 75 78 2e 74 31 3b 0a 20 20 20 20 7d 20 64 62  aux.t1;.    } db
47a0: 32 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65  2.  } {}.  do_te
47b0: 73 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e 31 35  st pragma-8.1.15
47c0: 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b   {.    execsql {
47d0: 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 61 75  .      PRAGMA au
47e0: 78 2e 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e  x.schema_version
47f0: 20 3d 20 32 30 36 3b 0a 20 20 20 20 7d 0a 20 20   = 206;.    }.  
4800: 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70  } {}.  do_test p
4810: 72 61 67 6d 61 2d 38 2e 31 2e 31 36 20 7b 0a 20  ragma-8.1.16 {. 
4820: 20 20 20 73 65 74 20 3a 3a 53 54 4d 54 20 5b 73     set ::STMT [s
4830: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 20 24  qlite3_prepare $
4840: 3a 3a 44 42 32 20 22 53 45 4c 45 43 54 20 2a 20  ::DB2 "SELECT * 
4850: 46 52 4f 4d 20 61 75 78 2e 74 31 22 20 2d 31 20  FROM aux.t1" -1 
4860: 44 55 4d 4d 59 5d 0a 20 20 20 20 73 71 6c 69 74  DUMMY].    sqlit
4870: 65 33 5f 73 74 65 70 20 24 3a 3a 53 54 4d 54 0a  e3_step $::STMT.
4880: 20 20 7d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52    } SQLITE_ERROR
4890: 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .  do_test pragm
48a0: 61 2d 38 2e 31 2e 31 37 20 7b 0a 20 20 20 20 73  a-8.1.17 {.    s
48b0: 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20  qlite3_finalize 
48c0: 24 3a 3a 53 54 4d 54 0a 20 20 7d 20 53 51 4c 49  $::STMT.  } SQLI
48d0: 54 45 5f 53 43 48 45 4d 41 0a 20 20 64 6f 5f 74  TE_SCHEMA.  do_t
48e0: 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e 31  est pragma-8.1.1
48f0: 38 20 7b 0a 20 20 20 20 64 62 32 20 63 6c 6f 73  8 {.    db2 clos
4900: 65 0a 20 20 7d 20 7b 7d 0a 7d 0a 0a 23 20 4e 6f  e.  } {}.}..# No
4910: 77 20 74 65 73 74 20 74 68 61 74 20 74 68 65 20  w test that the 
4920: 75 73 65 72 2d 76 65 72 73 69 6f 6e 20 63 61 6e  user-version can
4930: 20 62 65 20 72 65 61 64 20 61 6e 64 20 77 72 69   be read and wri
4940: 74 74 65 6e 20 28 61 6e 64 20 74 68 61 74 20 77  tten (and that w
4950: 65 20 61 72 65 6e 27 74 0a 23 20 61 63 63 69 64  e aren't.# accid
4960: 65 6e 74 61 6c 6c 79 20 6d 61 6e 69 70 75 6c 61  entally manipula
4970: 74 69 6e 67 20 74 68 65 20 73 63 68 65 6d 61 2d  ting the schema-
4980: 76 65 72 73 69 6f 6e 20 69 6e 73 74 65 61 64 29  version instead)
4990: 2e 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  ..do_test pragma
49a0: 2d 38 2e 32 2e 31 20 7b 0a 20 20 65 78 65 63 73  -8.2.1 {.  execs
49b0: 71 6c 32 20 7b 0a 20 20 20 20 50 52 41 47 4d 41  ql2 {.    PRAGMA
49c0: 20 75 73 65 72 5f 76 65 72 73 69 6f 6e 3b 0a 20   user_version;. 
49d0: 20 7d 0a 7d 20 7b 75 73 65 72 5f 76 65 72 73 69   }.} {user_versi
49e0: 6f 6e 20 30 7d 0a 64 6f 5f 74 65 73 74 20 70 72  on 0}.do_test pr
49f0: 61 67 6d 61 2d 38 2e 32 2e 32 20 7b 0a 20 20 65  agma-8.2.2 {.  e
4a00: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41  xecsql {.    PRA
4a10: 47 4d 41 20 75 73 65 72 5f 76 65 72 73 69 6f 6e  GMA user_version
4a20: 20 3d 20 32 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64   = 2;.  }.} {}.d
4a30: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e  o_test pragma-8.
4a40: 32 2e 33 2e 31 20 7b 0a 20 20 65 78 65 63 73 71  2.3.1 {.  execsq
4a50: 6c 32 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20  l2 {.    PRAGMA 
4a60: 75 73 65 72 5f 76 65 72 73 69 6f 6e 3b 0a 20 20  user_version;.  
4a70: 7d 0a 7d 20 7b 75 73 65 72 5f 76 65 72 73 69 6f  }.} {user_versio
4a80: 6e 20 32 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61  n 2}.do_test pra
4a90: 67 6d 61 2d 38 2e 32 2e 33 2e 32 20 7b 0a 20 20  gma-8.2.3.2 {.  
4aa0: 64 62 20 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74  db close.  sqlit
4ab0: 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20  e3 db test.db.  
4ac0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52  execsql {.    PR
4ad0: 41 47 4d 41 20 75 73 65 72 5f 76 65 72 73 69 6f  AGMA user_versio
4ae0: 6e 3b 0a 20 20 7d 0a 7d 20 7b 32 7d 0a 64 6f 5f  n;.  }.} {2}.do_
4af0: 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 32 2e  test pragma-8.2.
4b00: 34 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  4.1 {.  execsql 
4b10: 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 73 63 68  {.    PRAGMA sch
4b20: 65 6d 61 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 7d  ema_version;.  }
4b30: 0a 7d 20 7b 31 30 38 7d 0a 69 66 63 61 70 61 62  .} {108}.ifcapab
4b40: 6c 65 20 76 61 63 75 75 6d 20 7b 0a 20 20 64 6f  le vacuum {.  do
4b50: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 32  _test pragma-8.2
4b60: 2e 34 2e 32 20 7b 0a 20 20 20 20 65 78 65 63 73  .4.2 {.    execs
4b70: 71 6c 20 7b 0a 20 20 20 20 20 20 56 41 43 55 55  ql {.      VACUU
4b80: 4d 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20  M;.      PRAGMA 
4b90: 75 73 65 72 5f 76 65 72 73 69 6f 6e 3b 0a 20 20  user_version;.  
4ba0: 20 20 7d 0a 20 20 7d 20 7b 32 7d 0a 20 20 64 6f    }.  } {2}.  do
4bb0: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 32  _test pragma-8.2
4bc0: 2e 34 2e 33 20 7b 0a 20 20 20 20 65 78 65 63 73  .4.3 {.    execs
4bd0: 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d  ql {.      PRAGM
4be0: 41 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e  A schema_version
4bf0: 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 31 30 39  ;.    }.  } {109
4c00: 7d 0a 7d 0a 0a 69 66 63 61 70 61 62 6c 65 20 61  }.}..ifcapable a
4c10: 74 74 61 63 68 20 7b 0a 20 20 64 62 20 65 76 61  ttach {.  db eva
4c20: 6c 20 7b 41 54 54 41 43 48 20 27 74 65 73 74 32  l {ATTACH 'test2
4c30: 2e 64 62 27 20 41 53 20 61 75 78 7d 0a 20 20 0a  .db' AS aux}.  .
4c40: 20 20 23 20 43 68 65 63 6b 20 74 68 61 74 20 74    # Check that t
4c50: 68 65 20 75 73 65 72 2d 76 65 72 73 69 6f 6e 20  he user-version 
4c60: 69 6e 20 74 68 65 20 61 75 78 69 6c 61 72 79 20  in the auxilary 
4c70: 64 61 74 61 62 61 73 65 20 63 61 6e 20 62 65 20  database can be 
4c80: 6d 61 6e 69 70 75 6c 61 74 65 64 20 28 0a 20 20  manipulated (.  
4c90: 23 20 61 6e 64 20 74 68 61 74 20 77 65 20 61 72  # and that we ar
4ca0: 65 6e 27 74 20 61 63 63 69 64 65 6e 74 61 6c 6c  en't accidentall
4cb0: 79 20 6d 61 6e 69 70 75 6c 61 74 69 6e 67 20 74  y manipulating t
4cc0: 68 65 20 73 61 6d 65 20 69 6e 20 74 68 65 20 6d  he same in the m
4cd0: 61 69 6e 20 64 62 29 2e 0a 20 20 64 6f 5f 74 65  ain db)..  do_te
4ce0: 73 74 20 70 72 61 67 6d 61 2d 38 2e 32 2e 35 20  st pragma-8.2.5 
4cf0: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a  {.    execsql {.
4d00: 20 20 20 20 20 20 50 52 41 47 4d 41 20 61 75 78        PRAGMA aux
4d10: 2e 75 73 65 72 5f 76 65 72 73 69 6f 6e 3b 0a 20  .user_version;. 
4d20: 20 20 20 7d 0a 20 20 7d 20 7b 30 7d 0a 20 20 64     }.  } {0}.  d
4d30: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e  o_test pragma-8.
4d40: 32 2e 36 20 7b 0a 20 20 20 20 65 78 65 63 73 71  2.6 {.    execsq
4d50: 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41  l {.      PRAGMA
4d60: 20 61 75 78 2e 75 73 65 72 5f 76 65 72 73 69 6f   aux.user_versio
4d70: 6e 20 3d 20 33 3b 0a 20 20 20 20 7d 0a 20 20 7d  n = 3;.    }.  }
4d80: 20 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72   {}.  do_test pr
4d90: 61 67 6d 61 2d 38 2e 32 2e 37 20 7b 0a 20 20 20  agma-8.2.7 {.   
4da0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20   execsql {.     
4db0: 20 50 52 41 47 4d 41 20 61 75 78 2e 75 73 65 72   PRAGMA aux.user
4dc0: 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 20 20 7d 0a  _version;.    }.
4dd0: 20 20 7d 20 7b 33 7d 0a 20 20 64 6f 5f 74 65 73    } {3}.  do_tes
4de0: 74 20 70 72 61 67 6d 61 2d 38 2e 32 2e 38 20 7b  t pragma-8.2.8 {
4df0: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
4e00: 20 20 20 20 20 50 52 41 47 4d 41 20 6d 61 69 6e       PRAGMA main
4e10: 2e 75 73 65 72 5f 76 65 72 73 69 6f 6e 3b 0a 20  .user_version;. 
4e20: 20 20 20 7d 0a 20 20 7d 20 7b 32 7d 0a 20 20 0a     }.  } {2}.  .
4e30: 20 20 23 20 4e 6f 77 20 63 68 65 63 6b 20 74 68    # Now check th
4e40: 61 74 20 61 20 52 4f 4c 4c 42 41 43 4b 20 72 65  at a ROLLBACK re
4e50: 73 65 74 73 20 74 68 65 20 75 73 65 72 2d 76 65  sets the user-ve
4e60: 72 73 69 6f 6e 20 69 66 20 69 74 20 68 61 73 20  rsion if it has 
4e70: 62 65 65 6e 20 6d 6f 64 69 66 69 65 64 0a 20 20  been modified.  
4e80: 23 20 77 69 74 68 69 6e 20 61 20 74 72 61 6e 73  # within a trans
4e90: 61 63 74 69 6f 6e 2e 0a 20 20 64 6f 5f 74 65 73  action..  do_tes
4ea0: 74 20 70 72 61 67 6d 61 2d 38 2e 32 2e 39 20 7b  t pragma-8.2.9 {
4eb0: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
4ec0: 20 20 20 20 20 42 45 47 49 4e 3b 0a 20 20 20 20       BEGIN;.    
4ed0: 20 20 50 52 41 47 4d 41 20 61 75 78 2e 75 73 65    PRAGMA aux.use
4ee0: 72 5f 76 65 72 73 69 6f 6e 20 3d 20 31 30 3b 0a  r_version = 10;.
4ef0: 20 20 20 20 20 20 50 52 41 47 4d 41 20 75 73 65        PRAGMA use
4f00: 72 5f 76 65 72 73 69 6f 6e 20 3d 20 31 31 3b 0a  r_version = 11;.
4f10: 20 20 20 20 7d 0a 20 20 7d 20 7b 7d 0a 20 20 64      }.  } {}.  d
4f20: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e  o_test pragma-8.
4f30: 32 2e 31 30 20 7b 0a 20 20 20 20 65 78 65 63 73  2.10 {.    execs
4f40: 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d  ql {.      PRAGM
4f50: 41 20 61 75 78 2e 75 73 65 72 5f 76 65 72 73 69  A aux.user_versi
4f60: 6f 6e 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 31  on;.    }.  } {1
4f70: 30 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61  0}.  do_test pra
4f80: 67 6d 61 2d 38 2e 32 2e 31 31 20 7b 0a 20 20 20  gma-8.2.11 {.   
4f90: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20   execsql {.     
4fa0: 20 50 52 41 47 4d 41 20 6d 61 69 6e 2e 75 73 65   PRAGMA main.use
4fb0: 72 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 20 20 7d  r_version;.    }
4fc0: 0a 20 20 7d 20 7b 31 31 7d 0a 20 20 64 6f 5f 74  .  } {11}.  do_t
4fd0: 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 32 2e 31  est pragma-8.2.1
4fe0: 32 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  2 {.    execsql 
4ff0: 7b 0a 20 20 20 20 20 20 52 4f 4c 4c 42 41 43 4b  {.      ROLLBACK
5000: 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 61  ;.      PRAGMA a
5010: 75 78 2e 75 73 65 72 5f 76 65 72 73 69 6f 6e 3b  ux.user_version;
5020: 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 33 7d 0a 20  .    }.  } {3}. 
5030: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
5040: 38 2e 32 2e 31 33 20 7b 0a 20 20 20 20 65 78 65  8.2.13 {.    exe
5050: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41  csql {.      PRA
5060: 47 4d 41 20 6d 61 69 6e 2e 75 73 65 72 5f 76 65  GMA main.user_ve
5070: 72 73 69 6f 6e 3b 0a 20 20 20 20 7d 0a 20 20 7d  rsion;.    }.  }
5080: 20 7b 32 7d 0a 7d 0a 0a 23 20 54 72 79 20 61 20   {2}.}..# Try a 
5090: 6e 65 67 61 74 69 76 65 20 76 61 6c 75 65 20 66  negative value f
50a0: 6f 72 20 74 68 65 20 75 73 65 72 2d 76 65 72 73  or the user-vers
50b0: 69 6f 6e 0a 64 6f 5f 74 65 73 74 20 70 72 61 67  ion.do_test prag
50c0: 6d 61 2d 38 2e 32 2e 31 34 20 7b 0a 20 20 65 78  ma-8.2.14 {.  ex
50d0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47  ecsql {.    PRAG
50e0: 4d 41 20 75 73 65 72 5f 76 65 72 73 69 6f 6e 20  MA user_version 
50f0: 3d 20 2d 34 35 30 3b 0a 20 20 7d 0a 7d 20 7b 7d  = -450;.  }.} {}
5100: 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d  .do_test pragma-
5110: 38 2e 32 2e 31 35 20 7b 0a 20 20 65 78 65 63 73  8.2.15 {.  execs
5120: 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20  ql {.    PRAGMA 
5130: 75 73 65 72 5f 76 65 72 73 69 6f 6e 3b 0a 20 20  user_version;.  
5140: 7d 0a 7d 20 7b 2d 34 35 30 7d 0a 7d 20 3b 20 23  }.} {-450}.} ; #
5150: 20 69 66 63 61 70 61 62 6c 65 20 73 63 68 65 6d   ifcapable schem
5160: 61 5f 76 65 72 73 69 6f 6e 0a 0a 23 20 43 68 65  a_version..# Che
5170: 63 6b 20 74 6f 20 73 65 65 20 69 66 20 54 45 4d  ck to see if TEM
5180: 50 5f 53 54 4f 52 45 20 69 73 20 6d 65 6d 6f 72  P_STORE is memor
5190: 79 20 6f 72 20 64 69 73 6b 2e 20 20 52 65 74 75  y or disk.  Retu
51a0: 72 6e 20 73 74 72 69 6e 67 73 0a 23 20 22 6d 65  rn strings.# "me
51b0: 6d 6f 72 79 22 20 6f 72 20 22 64 69 73 6b 22 20  mory" or "disk" 
51c0: 61 73 20 61 70 70 72 6f 70 72 69 61 74 65 2e 0a  as appropriate..
51d0: 23 0a 70 72 6f 63 20 63 68 65 63 6b 5f 74 65 6d  #.proc check_tem
51e0: 70 5f 73 74 6f 72 65 20 7b 7d 20 7b 0a 20 20 64  p_store {} {.  d
51f0: 62 20 65 76 61 6c 20 7b 43 52 45 41 54 45 20 54  b eval {CREATE T
5200: 45 4d 50 20 54 41 42 4c 45 20 49 46 20 4e 4f 54  EMP TABLE IF NOT
5210: 20 45 58 49 53 54 53 20 61 28 62 29 7d 0a 20 20   EXISTS a(b)}.  
5220: 64 62 20 65 76 61 6c 20 7b 50 52 41 47 4d 41 20  db eval {PRAGMA 
5230: 64 61 74 61 62 61 73 65 5f 6c 69 73 74 7d 20 7b  database_list} {
5240: 0a 20 20 20 20 69 66 20 7b 24 6e 61 6d 65 3d 3d  .    if {$name==
5250: 22 74 65 6d 70 22 7d 20 7b 0a 20 20 20 20 20 20  "temp"} {.      
5260: 73 65 74 20 62 74 20 5b 62 74 72 65 65 5f 66 72  set bt [btree_fr
5270: 6f 6d 5f 64 62 20 64 62 20 31 5d 0a 20 20 20 20  om_db db 1].    
5280: 20 20 69 66 20 7b 5b 62 74 72 65 65 5f 69 73 6d    if {[btree_ism
5290: 65 6d 64 62 20 24 62 74 5d 7d 20 7b 0a 20 20 20  emdb $bt]} {.   
52a0: 20 20 20 20 20 72 65 74 75 72 6e 20 22 6d 65 6d       return "mem
52b0: 6f 72 79 22 0a 20 20 20 20 20 20 7d 0a 20 20 20  ory".      }.   
52c0: 20 20 20 72 65 74 75 72 6e 20 22 64 69 73 6b 22     return "disk"
52d0: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74  .    }.  }.  ret
52e0: 75 72 6e 20 22 75 6e 6b 6e 6f 77 6e 22 0a 7d 0a  urn "unknown".}.
52f0: 0a 0a 23 20 54 65 73 74 20 74 65 6d 70 5f 73 74  ..# Test temp_st
5300: 6f 72 65 20 61 6e 64 20 74 65 6d 70 5f 73 74 6f  ore and temp_sto
5310: 72 65 5f 64 69 72 65 63 74 6f 72 79 20 70 72 61  re_directory pra
5320: 67 6d 61 73 0a 23 0a 69 66 63 61 70 61 62 6c 65  gmas.#.ifcapable
5330: 20 70 61 67 65 72 5f 70 72 61 67 6d 61 73 20 7b   pager_pragmas {
5340: 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d  .do_test pragma-
5350: 39 2e 31 20 7b 0a 20 20 64 62 20 63 6c 6f 73 65  9.1 {.  db close
5360: 0a 20 20 73 71 6c 69 74 65 33 20 64 62 20 74 65  .  sqlite3 db te
5370: 73 74 2e 64 62 0a 20 20 65 78 65 63 73 71 6c 20  st.db.  execsql 
5380: 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d  {.    PRAGMA tem
5390: 70 5f 73 74 6f 72 65 3b 0a 20 20 7d 0a 7d 20 7b  p_store;.  }.} {
53a0: 30 7d 0a 69 66 20 7b 24 54 45 4d 50 5f 53 54 4f  0}.if {$TEMP_STO
53b0: 52 45 3c 3d 31 7d 20 7b 0a 20 20 64 6f 5f 74 65  RE<=1} {.  do_te
53c0: 73 74 20 70 72 61 67 6d 61 2d 39 2e 31 2e 31 20  st pragma-9.1.1 
53d0: 7b 0a 20 20 20 20 63 68 65 63 6b 5f 74 65 6d 70  {.    check_temp
53e0: 5f 73 74 6f 72 65 0a 20 20 7d 20 7b 64 69 73 6b  _store.  } {disk
53f0: 7d 0a 7d 20 65 6c 73 65 20 7b 0a 20 20 64 6f 5f  }.} else {.  do_
5400: 74 65 73 74 20 70 72 61 67 6d 61 2d 39 2e 31 2e  test pragma-9.1.
5410: 31 20 7b 0a 20 20 20 20 63 68 65 63 6b 5f 74 65  1 {.    check_te
5420: 6d 70 5f 73 74 6f 72 65 0a 20 20 7d 20 7b 6d 65  mp_store.  } {me
5430: 6d 6f 72 79 7d 0a 7d 0a 0a 64 6f 5f 74 65 73 74  mory}.}..do_test
5440: 20 70 72 61 67 6d 61 2d 39 2e 32 20 7b 0a 20 20   pragma-9.2 {.  
5450: 64 62 20 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74  db close.  sqlit
5460: 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20  e3 db test.db.  
5470: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52  execsql {.    PR
5480: 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 3d  AGMA temp_store=
5490: 66 69 6c 65 3b 0a 20 20 20 20 50 52 41 47 4d 41  file;.    PRAGMA
54a0: 20 74 65 6d 70 5f 73 74 6f 72 65 3b 0a 20 20 7d   temp_store;.  }
54b0: 0a 7d 20 7b 31 7d 0a 69 66 20 7b 24 54 45 4d 50  .} {1}.if {$TEMP
54c0: 5f 53 54 4f 52 45 3d 3d 33 7d 20 7b 0a 20 20 23  _STORE==3} {.  #
54d0: 20 57 68 65 6e 20 54 45 4d 50 5f 53 54 4f 52 45   When TEMP_STORE
54e0: 20 69 73 20 33 2c 20 61 6c 77 61 79 73 20 75 73   is 3, always us
54f0: 65 20 6d 65 6d 6f 72 79 20 72 65 67 61 72 64 6c  e memory regardl
5500: 65 73 73 20 6f 66 20 70 72 61 67 6d 61 20 73 65  ess of pragma se
5510: 74 74 69 6e 67 73 2e 0a 20 20 64 6f 5f 74 65 73  ttings..  do_tes
5520: 74 20 70 72 61 67 6d 61 2d 39 2e 32 2e 31 20 7b  t pragma-9.2.1 {
5530: 0a 20 20 20 20 63 68 65 63 6b 5f 74 65 6d 70 5f  .    check_temp_
5540: 73 74 6f 72 65 0a 20 20 7d 20 7b 6d 65 6d 6f 72  store.  } {memor
5550: 79 7d 0a 7d 20 65 6c 73 65 20 7b 0a 20 20 64 6f  y}.} else {.  do
5560: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 39 2e 32  _test pragma-9.2
5570: 2e 31 20 7b 0a 20 20 20 20 63 68 65 63 6b 5f 74  .1 {.    check_t
5580: 65 6d 70 5f 73 74 6f 72 65 0a 20 20 7d 20 7b 64  emp_store.  } {d
5590: 69 73 6b 7d 0a 7d 0a 0a 64 6f 5f 74 65 73 74 20  isk}.}..do_test 
55a0: 70 72 61 67 6d 61 2d 39 2e 33 20 7b 0a 20 20 64  pragma-9.3 {.  d
55b0: 62 20 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74 65  b close.  sqlite
55c0: 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20 65  3 db test.db.  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 74 65 6d 70 5f 73 74 6f 72 65 3d 6d  GMA temp_store=m
55f0: 65 6d 6f 72 79 3b 0a 20 20 20 20 50 52 41 47 4d  emory;.    PRAGM
5600: 41 20 74 65 6d 70 5f 73 74 6f 72 65 3b 0a 20 20  A temp_store;.  
5610: 7d 0a 7d 20 7b 32 7d 0a 69 66 20 7b 24 54 45 4d  }.} {2}.if {$TEM
5620: 50 5f 53 54 4f 52 45 3d 3d 30 7d 20 7b 0a 20 20  P_STORE==0} {.  
5630: 23 20 57 68 65 6e 20 54 45 4d 50 5f 53 54 4f 52  # When TEMP_STOR
5640: 45 20 69 73 20 30 2c 20 61 6c 77 61 79 73 20 75  E is 0, always u
5650: 73 65 20 74 68 65 20 64 69 73 6b 20 72 65 67 61  se the disk rega
5660: 72 64 6c 65 73 73 20 6f 66 20 70 72 61 67 6d 61  rdless of pragma
5670: 20 73 65 74 74 69 6e 67 73 2e 0a 20 20 64 6f 5f   settings..  do_
5680: 74 65 73 74 20 70 72 61 67 6d 61 2d 39 2e 33 2e  test pragma-9.3.
5690: 31 20 7b 0a 20 20 20 20 63 68 65 63 6b 5f 74 65  1 {.    check_te
56a0: 6d 70 5f 73 74 6f 72 65 0a 20 20 7d 20 7b 64 69  mp_store.  } {di
56b0: 73 6b 7d 0a 7d 20 65 6c 73 65 20 7b 0a 20 20 64  sk}.} else {.  d
56c0: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 39 2e  o_test pragma-9.
56d0: 33 2e 31 20 7b 0a 20 20 20 20 63 68 65 63 6b 5f  3.1 {.    check_
56e0: 74 65 6d 70 5f 73 74 6f 72 65 0a 20 20 7d 20 7b  temp_store.  } {
56f0: 6d 65 6d 6f 72 79 7d 0a 7d 0a 0a 64 6f 5f 74 65  memory}.}..do_te
5700: 73 74 20 70 72 61 67 6d 61 2d 39 2e 34 20 7b 0a  st pragma-9.4 {.
5710: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
5720: 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72  PRAGMA temp_stor
5730: 65 5f 64 69 72 65 63 74 6f 72 79 3b 0a 20 20 7d  e_directory;.  }
5740: 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 70 72  .} {}.do_test pr
5750: 61 67 6d 61 2d 39 2e 35 20 7b 0a 20 20 73 65 74  agma-9.5 {.  set
5760: 20 70 77 64 20 5b 73 74 72 69 6e 67 20 6d 61 70   pwd [string map
5770: 20 7b 27 20 27 27 7d 20 5b 70 77 64 5d 5d 0a 20   {' ''} [pwd]]. 
5780: 20 65 78 65 63 73 71 6c 20 22 0a 20 20 20 20 50   execsql ".    P
5790: 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65  RAGMA temp_store
57a0: 5f 64 69 72 65 63 74 6f 72 79 3d 27 24 70 77 64  _directory='$pwd
57b0: 27 3b 0a 20 20 22 0a 7d 20 7b 7d 0a 64 6f 5f 74  ';.  ".} {}.do_t
57c0: 65 73 74 20 70 72 61 67 6d 61 2d 39 2e 36 20 7b  est pragma-9.6 {
57d0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 0a 20 20  .  execsql { .  
57e0: 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74    PRAGMA temp_st
57f0: 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 3b 0a 20  ore_directory;. 
5800: 20 7d 0a 7d 20 5b 6c 69 73 74 20 5b 70 77 64 5d   }.} [list [pwd]
5810: 5d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  ].do_test pragma
5820: 2d 39 2e 37 20 7b 0a 20 20 63 61 74 63 68 73 71  -9.7 {.  catchsq
5830: 6c 20 7b 20 0a 20 20 20 20 50 52 41 47 4d 41 20  l { .    PRAGMA 
5840: 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63  temp_store_direc
5850: 74 6f 72 79 3d 27 2f 4e 4f 4e 2f 45 58 49 53 54  tory='/NON/EXIST
5860: 45 4e 54 2f 50 41 54 48 2f 46 4f 4f 42 41 52 27  ENT/PATH/FOOBAR'
5870: 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20  ;.  }.} {1 {not 
5880: 61 20 77 72 69 74 61 62 6c 65 20 64 69 72 65 63  a writable direc
5890: 74 6f 72 79 7d 7d 0a 64 6f 5f 74 65 73 74 20 70  tory}}.do_test p
58a0: 72 61 67 6d 61 2d 39 2e 38 20 7b 0a 20 20 65 78  ragma-9.8 {.  ex
58b0: 65 63 73 71 6c 20 7b 20 0a 20 20 20 20 50 52 41  ecsql { .    PRA
58c0: 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64  GMA temp_store_d
58d0: 69 72 65 63 74 6f 72 79 3d 27 27 3b 0a 20 20 7d  irectory='';.  }
58e0: 0a 7d 20 7b 7d 0a 69 66 20 7b 21 5b 69 6e 66 6f  .} {}.if {![info
58f0: 20 65 78 69 73 74 73 20 54 45 4d 50 5f 53 54 4f   exists TEMP_STO
5900: 52 45 5d 20 7c 7c 20 24 54 45 4d 50 5f 53 54 4f  RE] || $TEMP_STO
5910: 52 45 3c 3d 31 7d 20 7b 0a 20 20 69 66 63 61 70  RE<=1} {.  ifcap
5920: 61 62 6c 65 20 74 65 6d 70 64 62 20 7b 0a 20 20  able tempdb {.  
5930: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
5940: 2d 39 2e 39 20 7b 0a 20 20 20 20 20 20 65 78 65  -9.9 {.      exe
5950: 63 73 71 6c 20 7b 20 0a 20 20 20 20 20 20 20 20  csql { .        
5960: 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72  PRAGMA temp_stor
5970: 65 5f 64 69 72 65 63 74 6f 72 79 3b 0a 20 20 20  e_directory;.   
5980: 20 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70       PRAGMA temp
5990: 5f 73 74 6f 72 65 3d 46 49 4c 45 3b 0a 20 20 20  _store=FILE;.   
59a0: 20 20 20 20 20 43 52 45 41 54 45 20 54 45 4d 50       CREATE TEMP
59b0: 20 54 41 42 4c 45 20 74 65 6d 70 5f 73 74 6f 72   TABLE temp_stor
59c0: 65 5f 64 69 72 65 63 74 6f 72 79 5f 74 65 73 74  e_directory_test
59d0: 28 61 20 69 6e 74 65 67 65 72 29 3b 0a 20 20 20  (a integer);.   
59e0: 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f       INSERT INTO
59f0: 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65   temp_store_dire
5a00: 63 74 6f 72 79 5f 74 65 73 74 20 76 61 6c 75 65  ctory_test value
5a10: 73 20 28 32 29 3b 0a 20 20 20 20 20 20 20 20 53  s (2);.        S
5a20: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 65 6d  ELECT * FROM tem
5a30: 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72  p_store_director
5a40: 79 5f 74 65 73 74 3b 0a 20 20 20 20 20 20 7d 0a  y_test;.      }.
5a50: 20 20 20 20 7d 20 7b 32 7d 0a 20 20 20 20 64 6f      } {2}.    do
5a60: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 39 2e 31  _test pragma-9.1
5a70: 30 20 7b 0a 20 20 20 20 20 20 63 61 74 63 68 73  0 {.      catchs
5a80: 71 6c 20 22 0a 20 20 20 20 20 20 20 20 50 52 41  ql ".        PRA
5a90: 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64  GMA temp_store_d
5aa0: 69 72 65 63 74 6f 72 79 3d 27 24 70 77 64 27 3b  irectory='$pwd';
5ab0: 0a 20 20 20 20 20 20 20 20 53 45 4c 45 43 54 20  .        SELECT 
5ac0: 2a 20 46 52 4f 4d 20 74 65 6d 70 5f 73 74 6f 72  * FROM temp_stor
5ad0: 65 5f 64 69 72 65 63 74 6f 72 79 5f 74 65 73 74  e_directory_test
5ae0: 3b 0a 20 20 20 20 20 20 22 0a 20 20 20 20 7d 20  ;.      ".    } 
5af0: 7b 31 20 7b 6e 6f 20 73 75 63 68 20 74 61 62 6c  {1 {no such tabl
5b00: 65 3a 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69  e: temp_store_di
5b10: 72 65 63 74 6f 72 79 5f 74 65 73 74 7d 7d 0a 20  rectory_test}}. 
5b20: 20 7d 0a 7d 20 20 0a 64 6f 5f 74 65 73 74 20 70   }.}  .do_test p
5b30: 72 61 67 6d 61 2d 39 2e 31 31 20 7b 0a 20 20 65  ragma-9.11 {.  e
5b40: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41  xecsql {.    PRA
5b50: 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 20 3d  GMA temp_store =
5b60: 20 30 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 74   0;.    PRAGMA t
5b70: 65 6d 70 5f 73 74 6f 72 65 3b 0a 20 20 7d 0a 7d  emp_store;.  }.}
5b80: 20 7b 30 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61   {0}.do_test pra
5b90: 67 6d 61 2d 39 2e 31 32 20 7b 0a 20 20 65 78 65  gma-9.12 {.  exe
5ba0: 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d  csql {.    PRAGM
5bb0: 41 20 74 65 6d 70 5f 73 74 6f 72 65 20 3d 20 31  A temp_store = 1
5bc0: 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d  ;.    PRAGMA tem
5bd0: 70 5f 73 74 6f 72 65 3b 0a 20 20 7d 0a 7d 20 7b  p_store;.  }.} {
5be0: 31 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  1}.do_test pragm
5bf0: 61 2d 39 2e 31 33 20 7b 0a 20 20 65 78 65 63 73  a-9.13 {.  execs
5c00: 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20  ql {.    PRAGMA 
5c10: 74 65 6d 70 5f 73 74 6f 72 65 20 3d 20 32 3b 0a  temp_store = 2;.
5c20: 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f      PRAGMA temp_
5c30: 73 74 6f 72 65 3b 0a 20 20 7d 0a 7d 20 7b 32 7d  store;.  }.} {2}
5c40: 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d  .do_test pragma-
5c50: 39 2e 31 34 20 7b 0a 20 20 65 78 65 63 73 71 6c  9.14 {.  execsql
5c60: 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 74 65   {.    PRAGMA te
5c70: 6d 70 5f 73 74 6f 72 65 20 3d 20 33 3b 0a 20 20  mp_store = 3;.  
5c80: 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74    PRAGMA temp_st
5c90: 6f 72 65 3b 0a 20 20 7d 0a 7d 20 7b 30 7d 0a 64  ore;.  }.} {0}.d
5ca0: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 39 2e  o_test pragma-9.
5cb0: 31 35 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20  15 {.  catchsql 
5cc0: 7b 0a 20 20 20 20 42 45 47 49 4e 20 45 58 43 4c  {.    BEGIN EXCL
5cd0: 55 53 49 56 45 3b 0a 20 20 20 20 43 52 45 41 54  USIVE;.    CREAT
5ce0: 45 20 54 45 4d 50 20 54 41 42 4c 45 20 74 65 6d  E TEMP TABLE tem
5cf0: 70 5f 74 61 62 6c 65 28 74 29 3b 0a 20 20 20 20  p_table(t);.    
5d00: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 65 6d 70  INSERT INTO temp
5d10: 5f 74 61 62 6c 65 20 56 41 4c 55 45 53 28 27 76  _table VALUES('v
5d20: 61 6c 75 61 62 6c 65 20 64 61 74 61 27 29 3b 0a  aluable data');.
5d30: 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f      PRAGMA temp_
5d40: 73 74 6f 72 65 20 3d 20 31 3b 0a 20 20 7d 0a 7d  store = 1;.  }.}
5d50: 20 7b 31 20 7b 74 65 6d 70 6f 72 61 72 79 20 73   {1 {temporary s
5d60: 74 6f 72 61 67 65 20 63 61 6e 6e 6f 74 20 62 65  torage cannot be
5d70: 20 63 68 61 6e 67 65 64 20 66 72 6f 6d 20 77 69   changed from wi
5d80: 74 68 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69  thin a transacti
5d90: 6f 6e 7d 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61  on}}.do_test pra
5da0: 67 6d 61 2d 39 2e 31 36 20 7b 0a 20 20 65 78 65  gma-9.16 {.  exe
5db0: 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43  csql {.    SELEC
5dc0: 54 20 2a 20 46 52 4f 4d 20 74 65 6d 70 5f 74 61  T * FROM temp_ta
5dd0: 62 6c 65 3b 0a 20 20 20 20 43 4f 4d 4d 49 54 3b  ble;.    COMMIT;
5de0: 0a 20 20 7d 0a 7d 20 7b 7b 76 61 6c 75 61 62 6c  .  }.} {{valuabl
5df0: 65 20 64 61 74 61 7d 7d 0a 0a 64 6f 5f 74 65 73  e data}}..do_tes
5e00: 74 20 70 72 61 67 6d 61 2d 39 2e 31 37 20 7b 0a  t pragma-9.17 {.
5e10: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
5e20: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 65 6d 70  INSERT INTO temp
5e30: 5f 74 61 62 6c 65 20 56 41 4c 55 45 53 28 27 76  _table VALUES('v
5e40: 61 6c 75 61 62 6c 65 20 64 61 74 61 20 49 49 27  aluable data II'
5e50: 29 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20  );.    SELECT * 
5e60: 46 52 4f 4d 20 74 65 6d 70 5f 74 61 62 6c 65 3b  FROM temp_table;
5e70: 0a 20 20 7d 0a 7d 20 7b 7b 76 61 6c 75 61 62 6c  .  }.} {{valuabl
5e80: 65 20 64 61 74 61 7d 20 7b 76 61 6c 75 61 62 6c  e data} {valuabl
5e90: 65 20 64 61 74 61 20 49 49 7d 7d 0a 0a 64 6f 5f  e data II}}..do_
5ea0: 74 65 73 74 20 70 72 61 67 6d 61 2d 39 2e 31 38  test pragma-9.18
5eb0: 20 7b 0a 20 20 73 65 74 20 72 63 20 5b 63 61 74   {.  set rc [cat
5ec0: 63 68 20 7b 0a 20 20 20 20 64 62 20 65 76 61 6c  ch {.    db eval
5ed0: 20 7b 53 45 4c 45 43 54 20 74 20 46 52 4f 4d 20   {SELECT t FROM 
5ee0: 74 65 6d 70 5f 74 61 62 6c 65 7d 20 7b 0a 20 20  temp_table} {.  
5ef0: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 70 72 61      execsql {pra
5f00: 67 6d 61 20 74 65 6d 70 5f 73 74 6f 72 65 20 3d  gma temp_store =
5f10: 20 31 7d 0a 20 20 20 20 7d 0a 20 20 7d 20 6d 73   1}.    }.  } ms
5f20: 67 5d 0a 20 20 6c 69 73 74 20 24 72 63 20 24 6d  g].  list $rc $m
5f30: 73 67 0a 7d 20 7b 31 20 7b 74 65 6d 70 6f 72 61  sg.} {1 {tempora
5f40: 72 79 20 73 74 6f 72 61 67 65 20 63 61 6e 6e 6f  ry storage canno
5f50: 74 20 62 65 20 63 68 61 6e 67 65 64 20 66 72 6f  t be changed fro
5f60: 6d 20 77 69 74 68 69 6e 20 61 20 74 72 61 6e 73  m within a trans
5f70: 61 63 74 69 6f 6e 7d 7d 0a 0a 7d 20 3b 23 20 69  action}}..} ;# i
5f80: 66 63 61 70 61 62 6c 65 20 70 61 67 65 72 5f 70  fcapable pager_p
5f90: 72 61 67 6d 61 73 0a 0a 69 66 63 61 70 61 62 6c  ragmas..ifcapabl
5fa0: 65 20 74 72 69 67 67 65 72 20 7b 0a 0a 64 6f 5f  e trigger {..do_
5fb0: 74 65 73 74 20 70 72 61 67 6d 61 2d 31 30 2e 30  test pragma-10.0
5fc0: 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a   {.  catchsql {.
5fd0: 20 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20 6d      DROP TABLE m
5fe0: 61 69 6e 2e 74 31 3b 0a 20 20 7d 0a 20 20 65 78  ain.t1;.  }.  ex
5ff0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47  ecsql {.    PRAG
6000: 4d 41 20 63 6f 75 6e 74 5f 63 68 61 6e 67 65 73  MA count_changes
6010: 20 3d 20 31 3b 0a 0a 20 20 20 20 43 52 45 41 54   = 1;..    CREAT
6020: 45 20 54 41 42 4c 45 20 74 31 28 61 20 50 52 49  E TABLE t1(a PRI
6030: 4d 41 52 59 20 4b 45 59 29 3b 0a 20 20 20 20 43  MARY KEY);.    C
6040: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 5f 6d  REATE TABLE t1_m
6050: 69 72 72 6f 72 28 61 29 3b 0a 20 20 20 20 43 52  irror(a);.    CR
6060: 45 41 54 45 20 54 41 42 4c 45 20 74 31 5f 6d 69  EATE TABLE t1_mi
6070: 72 72 6f 72 32 28 61 29 3b 0a 20 20 20 20 43 52  rror2(a);.    CR
6080: 45 41 54 45 20 54 52 49 47 47 45 52 20 74 31 5f  EATE TRIGGER t1_
6090: 62 69 20 42 45 46 4f 52 45 20 49 4e 53 45 52 54  bi BEFORE INSERT
60a0: 20 4f 4e 20 74 31 20 42 45 47 49 4e 20 0a 20 20   ON t1 BEGIN .  
60b0: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
60c0: 74 31 5f 6d 69 72 72 6f 72 20 56 41 4c 55 45 53  t1_mirror VALUES
60d0: 28 6e 65 77 2e 61 29 3b 0a 20 20 20 20 45 4e 44  (new.a);.    END
60e0: 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54 52 49  ;.    CREATE TRI
60f0: 47 47 45 52 20 74 31 5f 61 69 20 41 46 54 45 52  GGER t1_ai AFTER
6100: 20 49 4e 53 45 52 54 20 4f 4e 20 74 31 20 42 45   INSERT ON t1 BE
6110: 47 49 4e 20 0a 20 20 20 20 20 20 49 4e 53 45 52  GIN .      INSER
6120: 54 20 49 4e 54 4f 20 74 31 5f 6d 69 72 72 6f 72  T INTO t1_mirror
6130: 32 20 56 41 4c 55 45 53 28 6e 65 77 2e 61 29 3b  2 VALUES(new.a);
6140: 0a 20 20 20 20 45 4e 44 3b 0a 20 20 20 20 43 52  .    END;.    CR
6150: 45 41 54 45 20 54 52 49 47 47 45 52 20 74 31 5f  EATE TRIGGER t1_
6160: 62 75 20 42 45 46 4f 52 45 20 55 50 44 41 54 45  bu BEFORE UPDATE
6170: 20 4f 4e 20 74 31 20 42 45 47 49 4e 20 0a 20 20   ON t1 BEGIN .  
6180: 20 20 20 20 55 50 44 41 54 45 20 74 31 5f 6d 69      UPDATE t1_mi
6190: 72 72 6f 72 20 53 45 54 20 61 20 3d 20 6e 65 77  rror SET a = new
61a0: 2e 61 20 57 48 45 52 45 20 61 20 3d 20 6f 6c 64  .a WHERE a = old
61b0: 2e 61 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20 20  .a;.    END;.   
61c0: 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20   CREATE TRIGGER 
61d0: 74 31 5f 61 75 20 41 46 54 45 52 20 55 50 44 41  t1_au AFTER UPDA
61e0: 54 45 20 4f 4e 20 74 31 20 42 45 47 49 4e 20 0a  TE ON t1 BEGIN .
61f0: 20 20 20 20 20 20 55 50 44 41 54 45 20 74 31 5f        UPDATE t1_
6200: 6d 69 72 72 6f 72 32 20 53 45 54 20 61 20 3d 20  mirror2 SET a = 
6210: 6e 65 77 2e 61 20 57 48 45 52 45 20 61 20 3d 20  new.a WHERE a = 
6220: 6f 6c 64 2e 61 3b 0a 20 20 20 20 45 4e 44 3b 0a  old.a;.    END;.
6230: 20 20 20 20 43 52 45 41 54 45 20 54 52 49 47 47      CREATE TRIGG
6240: 45 52 20 74 31 5f 62 64 20 42 45 46 4f 52 45 20  ER t1_bd BEFORE 
6250: 44 45 4c 45 54 45 20 4f 4e 20 74 31 20 42 45 47  DELETE ON t1 BEG
6260: 49 4e 20 0a 20 20 20 20 20 20 44 45 4c 45 54 45  IN .      DELETE
6270: 20 46 52 4f 4d 20 74 31 5f 6d 69 72 72 6f 72 20   FROM t1_mirror 
6280: 57 48 45 52 45 20 61 20 3d 20 6f 6c 64 2e 61 3b  WHERE a = old.a;
6290: 0a 20 20 20 20 45 4e 44 3b 0a 20 20 20 20 43 52  .    END;.    CR
62a0: 45 41 54 45 20 54 52 49 47 47 45 52 20 74 31 5f  EATE TRIGGER t1_
62b0: 61 64 20 41 46 54 45 52 20 44 45 4c 45 54 45 20  ad AFTER DELETE 
62c0: 4f 4e 20 74 31 20 42 45 47 49 4e 20 0a 20 20 20  ON t1 BEGIN .   
62d0: 20 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 74     DELETE FROM t
62e0: 31 5f 6d 69 72 72 6f 72 32 20 57 48 45 52 45 20  1_mirror2 WHERE 
62f0: 61 20 3d 20 6f 6c 64 2e 61 3b 0a 20 20 20 20 45  a = old.a;.    E
6300: 4e 44 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a 64 6f  ND;.  }.} {}..do
6310: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 30 2e  _test pragma-10.
6320: 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  1 {.  execsql {.
6330: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
6340: 74 31 20 56 41 4c 55 45 53 28 72 61 6e 64 73 74  t1 VALUES(randst
6350: 72 28 31 30 2c 31 30 29 29 3b 0a 20 20 7d 0a 7d  r(10,10));.  }.}
6360: 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61   {1}.do_test pra
6370: 67 6d 61 2d 31 30 2e 32 20 7b 0a 20 20 65 78 65  gma-10.2 {.  exe
6380: 63 73 71 6c 20 7b 0a 20 20 20 20 55 50 44 41 54  csql {.    UPDAT
6390: 45 20 74 31 20 53 45 54 20 61 20 3d 20 72 61 6e  E t1 SET a = ran
63a0: 64 73 74 72 28 31 30 2c 31 30 29 3b 0a 20 20 7d  dstr(10,10);.  }
63b0: 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 70  .} {1}.do_test p
63c0: 72 61 67 6d 61 2d 31 30 2e 33 20 7b 0a 20 20 65  ragma-10.3 {.  e
63d0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 44 45 4c  xecsql {.    DEL
63e0: 45 54 45 20 46 52 4f 4d 20 74 31 3b 0a 20 20 7d  ETE FROM t1;.  }
63f0: 0a 7d 20 7b 31 7d 0a 0a 7d 20 3b 23 20 69 66 63  .} {1}..} ;# ifc
6400: 61 70 61 62 6c 65 20 74 72 69 67 67 65 72 0a 0a  apable trigger..
6410: 69 66 63 61 70 61 62 6c 65 20 73 63 68 65 6d 61  ifcapable schema
6420: 5f 70 72 61 67 6d 61 73 20 7b 0a 20 20 64 6f 5f  _pragmas {.  do_
6430: 74 65 73 74 20 70 72 61 67 6d 61 2d 31 31 2e 31  test pragma-11.1
6440: 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 32 20   {.    execsql2 
6450: 7b 0a 20 20 20 20 20 20 70 72 61 67 6d 61 20 63  {.      pragma c
6460: 6f 6c 6c 61 74 69 6f 6e 5f 6c 69 73 74 3b 0a 20  ollation_list;. 
6470: 20 20 20 7d 0a 20 20 7d 20 7b 73 65 71 20 30 20     }.  } {seq 0 
6480: 6e 61 6d 65 20 4e 4f 43 41 53 45 20 73 65 71 20  name NOCASE seq 
6490: 31 20 6e 61 6d 65 20 52 54 52 49 4d 20 73 65 71  1 name RTRIM seq
64a0: 20 32 20 6e 61 6d 65 20 42 49 4e 41 52 59 7d 0a   2 name BINARY}.
64b0: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
64c0: 2d 31 31 2e 32 20 7b 0a 20 20 20 20 64 62 20 63  -11.2 {.    db c
64d0: 6f 6c 6c 61 74 65 20 4e 65 77 5f 43 6f 6c 6c 61  ollate New_Colla
64e0: 74 69 6f 6e 20 62 6c 61 68 2e 2e 2e 0a 20 20 20  tion blah....   
64f0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20   execsql {.     
6500: 20 70 72 61 67 6d 61 20 63 6f 6c 6c 61 74 69 6f   pragma collatio
6510: 6e 5f 6c 69 73 74 3b 0a 20 20 20 20 7d 0a 20 20  n_list;.    }.  
6520: 7d 20 7b 30 20 4e 65 77 5f 43 6f 6c 6c 61 74 69  } {0 New_Collati
6530: 6f 6e 20 31 20 4e 4f 43 41 53 45 20 32 20 52 54  on 1 NOCASE 2 RT
6540: 52 49 4d 20 33 20 42 49 4e 41 52 59 7d 0a 7d 0a  RIM 3 BINARY}.}.
6550: 0a 69 66 63 61 70 61 62 6c 65 20 73 63 68 65 6d  .ifcapable schem
6560: 61 5f 70 72 61 67 6d 61 73 26 26 74 65 6d 70 64  a_pragmas&&tempd
6570: 62 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 70 72  b {.  do_test pr
6580: 61 67 6d 61 2d 31 32 2e 31 20 7b 0a 20 20 20 20  agma-12.1 {.    
6590: 73 71 6c 69 74 65 33 20 64 62 32 20 74 65 73 74  sqlite3 db2 test
65a0: 2e 64 62 0a 20 20 20 20 65 78 65 63 73 71 6c 20  .db.    execsql 
65b0: 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 74  {.      PRAGMA t
65c0: 65 6d 70 2e 74 61 62 6c 65 5f 69 6e 66 6f 28 27  emp.table_info('
65d0: 61 62 63 27 29 3b 0a 20 20 20 20 7d 20 64 62 32  abc');.    } db2
65e0: 0a 20 20 7d 20 7b 7d 0a 20 20 64 62 32 20 63 6c  .  } {}.  db2 cl
65f0: 6f 73 65 0a 0a 20 20 64 6f 5f 74 65 73 74 20 70  ose..  do_test p
6600: 72 61 67 6d 61 2d 31 32 2e 32 20 7b 0a 20 20 20  ragma-12.2 {.   
6610: 20 73 71 6c 69 74 65 33 20 64 62 32 20 74 65 73   sqlite3 db2 tes
6620: 74 2e 64 62 0a 20 20 20 20 65 78 65 63 73 71 6c  t.db.    execsql
6630: 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20   {.      PRAGMA 
6640: 74 65 6d 70 2e 64 65 66 61 75 6c 74 5f 63 61 63  temp.default_cac
6650: 68 65 5f 73 69 7a 65 20 3d 20 32 30 30 3b 0a 20  he_size = 200;. 
6660: 20 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70       PRAGMA temp
6670: 2e 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73  .default_cache_s
6680: 69 7a 65 3b 0a 20 20 20 20 7d 20 64 62 32 0a 20  ize;.    } db2. 
6690: 20 7d 20 7b 32 30 30 7d 0a 20 20 64 62 32 20 63   } {200}.  db2 c
66a0: 6c 6f 73 65 0a 0a 20 20 64 6f 5f 74 65 73 74 20  lose..  do_test 
66b0: 70 72 61 67 6d 61 2d 31 32 2e 33 20 7b 0a 20 20  pragma-12.3 {.  
66c0: 20 20 73 71 6c 69 74 65 33 20 64 62 32 20 74 65    sqlite3 db2 te
66d0: 73 74 2e 64 62 0a 20 20 20 20 65 78 65 63 73 71  st.db.    execsq
66e0: 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41  l {.      PRAGMA
66f0: 20 74 65 6d 70 2e 63 61 63 68 65 5f 73 69 7a 65   temp.cache_size
6700: 20 3d 20 34 30 30 3b 0a 20 20 20 20 20 20 50 52   = 400;.      PR
6710: 41 47 4d 41 20 74 65 6d 70 2e 63 61 63 68 65 5f  AGMA temp.cache_
6720: 73 69 7a 65 3b 0a 20 20 20 20 7d 20 64 62 32 0a  size;.    } db2.
6730: 20 20 7d 20 7b 34 30 30 7d 0a 20 20 64 62 32 20    } {400}.  db2 
6740: 63 6c 6f 73 65 0a 7d 0a 0a 69 66 63 61 70 61 62  close.}..ifcapab
6750: 6c 65 20 62 6c 6f 62 6c 69 74 20 7b 0a 0a 64 6f  le bloblit {..do
6760: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 33 2e  _test pragma-13.
6770: 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  1 {.  execsql {.
6780: 20 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20 49      DROP TABLE I
6790: 46 20 45 58 49 53 54 53 20 74 34 3b 0a 20 20 20  F EXISTS t4;.   
67a0: 20 50 52 41 47 4d 41 20 76 64 62 65 5f 74 72 61   PRAGMA vdbe_tra
67b0: 63 65 3d 6f 6e 3b 0a 20 20 20 20 50 52 41 47 4d  ce=on;.    PRAGM
67c0: 41 20 76 64 62 65 5f 6c 69 73 74 69 6e 67 3d 6f  A vdbe_listing=o
67d0: 6e 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 73 71  n;.    PRAGMA sq
67e0: 6c 5f 74 72 61 63 65 3d 6f 6e 3b 0a 20 20 20 20  l_trace=on;.    
67f0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 34 28  CREATE TABLE t4(
6800: 61 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52  a INTEGER PRIMAR
6810: 59 20 4b 45 59 2c 62 29 3b 0a 20 20 20 20 49 4e  Y KEY,b);.    IN
6820: 53 45 52 54 20 49 4e 54 4f 20 74 34 28 62 29 20  SERT INTO t4(b) 
6830: 56 41 4c 55 45 53 28 78 27 30 31 32 33 34 35 36  VALUES(x'0123456
6840: 37 38 39 61 62 63 64 65 66 30 31 32 33 34 35 36  789abcdef0123456
6850: 37 38 39 61 62 63 64 65 66 30 31 32 33 34 35 36  789abcdef0123456
6860: 37 38 39 27 29 3b 0a 20 20 20 20 49 4e 53 45 52  789');.    INSER
6870: 54 20 49 4e 54 4f 20 74 34 28 62 29 20 56 41 4c  T INTO t4(b) VAL
6880: 55 45 53 28 72 61 6e 64 73 74 72 28 33 30 2c 33  UES(randstr(30,3
6890: 30 29 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20  0));.    INSERT 
68a0: 49 4e 54 4f 20 74 34 28 62 29 20 56 41 4c 55 45  INTO t4(b) VALUE
68b0: 53 28 31 2e 32 33 34 35 36 29 3b 0a 20 20 20 20  S(1.23456);.    
68c0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 34 28 62  INSERT INTO t4(b
68d0: 29 20 56 41 4c 55 45 53 28 4e 55 4c 4c 29 3b 0a  ) VALUES(NULL);.
68e0: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
68f0: 74 34 28 62 29 20 56 41 4c 55 45 53 28 30 29 3b  t4(b) VALUES(0);
6900: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
6910: 20 74 34 28 62 29 20 53 45 4c 45 43 54 20 62 7c   t4(b) SELECT b|
6920: 7c 62 7c 7c 62 7c 7c 62 20 46 52 4f 4d 20 74 34  |b||b||b FROM t4
6930: 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  ;.    SELECT * F
6940: 52 4f 4d 20 74 34 3b 0a 20 20 7d 0a 20 20 65 78  ROM t4;.  }.  ex
6950: 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47  ecsql {.    PRAG
6960: 4d 41 20 76 64 62 65 5f 74 72 61 63 65 3d 6f 66  MA vdbe_trace=of
6970: 66 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 76 64  f;.    PRAGMA vd
6980: 62 65 5f 6c 69 73 74 69 6e 67 3d 6f 66 66 3b 0a  be_listing=off;.
6990: 20 20 20 20 50 52 41 47 4d 41 20 73 71 6c 5f 74      PRAGMA sql_t
69a0: 72 61 63 65 3d 6f 66 66 3b 0a 20 20 7d 0a 7d 20  race=off;.  }.} 
69b0: 7b 7d 0a 0a 7d 20 3b 23 20 69 66 63 61 70 61 62  {}..} ;# ifcapab
69c0: 6c 65 20 62 6c 6f 62 6c 69 74 20 0a 0a 69 66 63  le bloblit ..ifc
69d0: 61 70 61 62 6c 65 20 70 61 67 65 72 5f 70 72 61  apable pager_pra
69e0: 67 6d 61 73 20 7b 0a 20 20 64 62 20 63 6c 6f 73  gmas {.  db clos
69f0: 65 0a 20 20 66 69 6c 65 20 64 65 6c 65 74 65 20  e.  file delete 
6a00: 2d 66 6f 72 63 65 20 74 65 73 74 2e 64 62 0a 20  -force test.db. 
6a10: 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74   sqlite3 db test
6a20: 2e 64 62 0a 0a 20 20 64 6f 5f 74 65 73 74 20 70  .db..  do_test p
6a30: 72 61 67 6d 61 2d 31 34 2e 31 20 7b 0a 20 20 20  ragma-14.1 {.   
6a40: 20 65 78 65 63 73 71 6c 20 7b 20 70 72 61 67 6d   execsql { pragm
6a50: 61 20 61 75 74 6f 5f 76 61 63 75 75 6d 20 3d 20  a auto_vacuum = 
6a60: 30 20 7d 0a 20 20 20 20 65 78 65 63 73 71 6c 20  0 }.    execsql 
6a70: 7b 20 70 72 61 67 6d 61 20 70 61 67 65 5f 63 6f  { pragma page_co
6a80: 75 6e 74 20 7d 0a 20 20 7d 20 7b 30 7d 0a 0a 20  unt }.  } {0}.. 
6a90: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
6aa0: 31 34 2e 32 20 7b 0a 20 20 20 20 65 78 65 63 73  14.2 {.    execs
6ab0: 71 6c 20 7b 20 0a 20 20 20 20 20 20 43 52 45 41  ql { .      CREA
6ac0: 54 45 20 54 41 42 4c 45 20 61 62 63 28 61 2c 20  TE TABLE abc(a, 
6ad0: 62 2c 20 63 29 3b 0a 20 20 20 20 20 20 50 52 41  b, c);.      PRA
6ae0: 47 4d 41 20 70 61 67 65 5f 63 6f 75 6e 74 3b 0a  GMA page_count;.
6af0: 20 20 20 20 7d 0a 20 20 7d 20 7b 32 7d 0a 0a 20      }.  } {2}.. 
6b00: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
6b10: 31 34 2e 33 20 7b 0a 20 20 20 20 65 78 65 63 73  14.3 {.    execs
6b20: 71 6c 20 7b 20 0a 20 20 20 20 20 20 42 45 47 49  ql { .      BEGI
6b30: 4e 3b 0a 20 20 20 20 20 20 43 52 45 41 54 45 20  N;.      CREATE 
6b40: 54 41 42 4c 45 20 64 65 66 28 61 2c 20 62 2c 20  TABLE def(a, b, 
6b50: 63 29 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41  c);.      PRAGMA
6b60: 20 70 61 67 65 5f 63 6f 75 6e 74 3b 0a 20 20 20   page_count;.   
6b70: 20 7d 0a 20 20 7d 20 7b 33 7d 0a 0a 20 20 64 6f   }.  } {3}..  do
6b80: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 34 2e  _test pragma-14.
6b90: 34 20 7b 0a 20 20 20 20 73 65 74 20 70 61 67 65  4 {.    set page
6ba0: 5f 73 69 7a 65 20 5b 64 62 20 6f 6e 65 20 7b 70  _size [db one {p
6bb0: 72 61 67 6d 61 20 70 61 67 65 5f 73 69 7a 65 7d  ragma page_size}
6bc0: 5d 0a 20 20 20 20 65 78 70 72 20 5b 66 69 6c 65  ].    expr [file
6bd0: 20 73 69 7a 65 20 74 65 73 74 2e 64 62 5d 20 2f   size test.db] /
6be0: 20 24 70 61 67 65 5f 73 69 7a 65 0a 20 20 7d 20   $page_size.  } 
6bf0: 7b 32 7d 0a 0a 20 20 64 6f 5f 74 65 73 74 20 70  {2}..  do_test p
6c00: 72 61 67 6d 61 2d 31 34 2e 35 20 7b 0a 20 20 20  ragma-14.5 {.   
6c10: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20   execsql {.     
6c20: 20 52 4f 4c 4c 42 41 43 4b 3b 0a 20 20 20 20 20   ROLLBACK;.     
6c30: 20 50 52 41 47 4d 41 20 70 61 67 65 5f 63 6f 75   PRAGMA page_cou
6c40: 6e 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 32  nt;.    }.  } {2
6c50: 7d 0a 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61  }..  do_test pra
6c60: 67 6d 61 2d 31 34 2e 36 20 7b 0a 20 20 20 20 66  gma-14.6 {.    f
6c70: 69 6c 65 20 64 65 6c 65 74 65 20 2d 66 6f 72 63  ile delete -forc
6c80: 65 20 74 65 73 74 32 2e 64 62 0a 20 20 20 20 73  e test2.db.    s
6c90: 71 6c 69 74 65 33 20 64 62 32 20 74 65 73 74 32  qlite3 db2 test2
6ca0: 2e 64 62 0a 20 20 20 20 65 78 65 63 73 71 6c 20  .db.    execsql 
6cb0: 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 61  {.      PRAGMA a
6cc0: 75 74 6f 5f 76 61 63 75 75 6d 20 3d 20 30 3b 0a  uto_vacuum = 0;.
6cd0: 20 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42        CREATE TAB
6ce0: 4c 45 20 74 31 28 61 2c 20 62 2c 20 63 29 3b 0a  LE t1(a, b, c);.
6cf0: 20 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42        CREATE TAB
6d00: 4c 45 20 74 32 28 61 2c 20 62 2c 20 63 29 3b 0a  LE t2(a, b, c);.
6d10: 20 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42        CREATE TAB
6d20: 4c 45 20 74 33 28 61 2c 20 62 2c 20 63 29 3b 0a  LE t3(a, b, c);.
6d30: 20 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42        CREATE TAB
6d40: 4c 45 20 74 34 28 61 2c 20 62 2c 20 63 29 3b 0a  LE t4(a, b, c);.
6d50: 20 20 20 20 7d 20 64 62 32 0a 20 20 20 20 64 62      } db2.    db
6d60: 32 20 63 6c 6f 73 65 0a 20 20 20 20 65 78 65 63  2 close.    exec
6d70: 73 71 6c 20 7b 0a 20 20 20 20 20 20 41 54 54 41  sql {.      ATTA
6d80: 43 48 20 27 74 65 73 74 32 2e 64 62 27 20 41 53  CH 'test2.db' AS
6d90: 20 61 75 78 3b 0a 20 20 20 20 20 20 50 52 41 47   aux;.      PRAG
6da0: 4d 41 20 61 75 78 2e 70 61 67 65 5f 63 6f 75 6e  MA aux.page_coun
6db0: 74 3b 0a 20 20 20 20 7d 20 0a 20 20 7d 20 7b 35  t;.    } .  } {5
6dc0: 7d 0a 7d 0a 0a 23 20 54 65 73 74 20 74 68 61 74  }.}..# Test that
6dd0: 20 74 68 65 20 76 61 6c 75 65 20 73 65 74 20 75   the value set u
6de0: 73 69 6e 67 20 74 68 65 20 63 61 63 68 65 5f 73  sing the cache_s
6df0: 69 7a 65 20 70 72 61 67 6d 61 20 69 73 20 6e 6f  ize pragma is no
6e00: 74 20 72 65 73 65 74 20 77 68 65 6e 20 74 68 65  t reset when the
6e10: 0a 23 20 73 63 68 65 6d 61 20 69 73 20 72 65 6c  .# schema is rel
6e20: 6f 61 64 65 64 2e 0a 23 0a 69 66 63 61 70 61 62  oaded..#.ifcapab
6e30: 6c 65 20 70 61 67 65 72 5f 70 72 61 67 6d 61 73  le pager_pragmas
6e40: 20 7b 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20 20   {.  db close.  
6e50: 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e  sqlite3 db test.
6e60: 64 62 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61  db.  do_test pra
6e70: 67 6d 61 2d 31 35 2e 31 20 7b 0a 20 20 20 20 65  gma-15.1 {.    e
6e80: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50  xecsql {.      P
6e90: 52 41 47 4d 41 20 63 61 63 68 65 5f 73 69 7a 65  RAGMA cache_size
6ea0: 3d 35 39 3b 0a 20 20 20 20 20 20 50 52 41 47 4d  =59;.      PRAGM
6eb0: 41 20 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20  A cache_size;.  
6ec0: 20 20 7d 0a 20 20 7d 20 7b 35 39 7d 0a 20 20 64    }.  } {59}.  d
6ed0: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 35  o_test pragma-15
6ee0: 2e 32 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  .2 {.    sqlite3
6ef0: 20 64 62 32 20 74 65 73 74 2e 64 62 0a 20 20 20   db2 test.db.   
6f00: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20   execsql {.     
6f10: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 6e 65   CREATE TABLE ne
6f20: 77 74 61 62 6c 65 28 61 2c 20 62 2c 20 63 29 3b  wtable(a, b, c);
6f30: 0a 20 20 20 20 7d 20 64 62 32 0a 20 20 20 20 64  .    } db2.    d
6f40: 62 32 20 63 6c 6f 73 65 0a 20 20 7d 20 7b 7d 0a  b2 close.  } {}.
6f50: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
6f60: 2d 31 35 2e 33 20 7b 0a 20 20 20 20 23 20 45 76  -15.3 {.    # Ev
6f70: 61 6c 75 61 74 69 6e 67 20 74 68 69 73 20 73 74  aluating this st
6f80: 61 74 65 6d 65 6e 74 20 77 69 6c 6c 20 63 61 75  atement will cau
6f90: 73 65 20 74 68 65 20 73 63 68 65 6d 61 20 74 6f  se the schema to
6fa0: 20 62 65 20 72 65 6c 6f 61 64 65 64 20 28 62 65   be reloaded (be
6fb0: 63 61 75 73 65 0a 20 20 20 20 23 20 74 68 65 20  cause.    # the 
6fc0: 73 63 68 65 6d 61 20 77 61 73 20 63 68 61 6e 67  schema was chang
6fd0: 65 64 20 62 79 20 61 6e 6f 74 68 65 72 20 63 6f  ed by another co
6fe0: 6e 6e 65 63 74 69 6f 6e 20 69 6e 20 70 72 61 67  nnection in prag
6ff0: 6d 61 2d 31 35 2e 32 29 2e 20 41 74 20 6f 6e 65  ma-15.2). At one
7000: 0a 20 20 20 20 23 20 70 6f 69 6e 74 20 74 68 65  .    # point the
7010: 72 65 20 77 61 73 20 61 20 62 75 67 20 74 68 61  re was a bug tha
7020: 74 20 72 65 73 65 74 20 74 68 65 20 63 61 63 68  t reset the cach
7030: 65 5f 73 69 7a 65 20 74 6f 20 69 74 73 20 64 65  e_size to its de
7040: 66 61 75 6c 74 20 76 61 6c 75 65 0a 20 20 20 20  fault value.    
7050: 23 20 77 68 65 6e 20 74 68 69 73 20 68 61 70 70  # when this happ
7060: 65 6e 65 64 2e 20 0a 20 20 20 20 65 78 65 63 73  ened. .    execs
7070: 71 6c 20 7b 20 53 45 4c 45 43 54 20 2a 20 46 52  ql { SELECT * FR
7080: 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  OM sqlite_master
7090: 20 7d 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b   }.    execsql {
70a0: 20 50 52 41 47 4d 41 20 63 61 63 68 65 5f 73 69   PRAGMA cache_si
70b0: 7a 65 20 7d 0a 20 20 7d 20 7b 35 39 7d 0a 7d 0a  ze }.  } {59}.}.
70c0: 0a 23 20 52 65 73 65 74 20 74 68 65 20 73 71 6c  .# Reset the sql
70d0: 69 74 65 33 5f 74 65 6d 70 5f 64 69 72 65 63 74  ite3_temp_direct
70e0: 6f 72 79 20 76 61 72 69 61 62 6c 65 20 66 6f 72  ory variable for
70f0: 20 74 68 65 20 6e 65 78 74 20 72 75 6e 20 6f 66   the next run of
7100: 20 74 65 73 74 73 3a 0a 73 71 6c 69 74 65 33 20   tests:.sqlite3 
7110: 64 62 58 20 3a 6d 65 6d 6f 72 79 3a 0a 64 62 58  dbX :memory:.dbX
7120: 20 65 76 61 6c 20 7b 50 52 41 47 4d 41 20 74 65   eval {PRAGMA te
7130: 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f  mp_store_directo
7140: 72 79 20 3d 20 22 22 7d 0a 64 62 58 20 63 6c 6f  ry = ""}.dbX clo
7150: 73 65 0a 0a 66 69 6e 69 73 68 5f 74 65 73 74 0a  se..finish_test.