/ Hex Artifact Content
Login

Artifact 583937903d01cad823ae195573d90c02ea945717:


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 38 20 32 30 30 38 2f 31 30 2f 31 30 20 31  .68 2008/10/10 1
0200: 37 3a 34 37 3a 32 31 20 64 61 6e 69 65 6c 6b 31  7:47:21 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 20 52 45 53 54 52 49 43 54 20 52 45   a b RESTRICT RE
3720: 53 54 52 49 43 54 20 4e 4f 4e 45 7d 0a 20 20 64  STRICT NONE}.  d
3730: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 36 2e  o_test pragma-6.
3740: 34 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  4 {.    execsql 
3750: 7b 0a 20 20 20 20 20 20 70 72 61 67 6d 61 20 69  {.      pragma i
3760: 6e 64 65 78 5f 6c 69 73 74 28 74 33 29 3b 0a 20  ndex_list(t3);. 
3770: 20 20 20 7d 0a 20 20 7d 20 7b 30 20 73 71 6c 69     }.  } {0 sqli
3780: 74 65 5f 61 75 74 6f 69 6e 64 65 78 5f 74 33 5f  te_autoindex_t3_
3790: 31 20 31 7d 0a 7d 0a 69 66 63 61 70 61 62 6c 65  1 1}.}.ifcapable
37a0: 20 7b 21 66 6f 72 65 69 67 6e 6b 65 79 7d 20 7b   {!foreignkey} {
37b0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 43 52 45 41  .  execsql {CREA
37c0: 54 45 20 54 41 42 4c 45 20 74 33 28 61 2c 62 20  TE TABLE t3(a,b 
37d0: 55 4e 49 51 55 45 29 7d 0a 7d 0a 64 6f 5f 74 65  UNIQUE)}.}.do_te
37e0: 73 74 20 70 72 61 67 6d 61 2d 36 2e 35 20 7b 0a  st pragma-6.5 {.
37f0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
3800: 43 52 45 41 54 45 20 49 4e 44 45 58 20 74 33 69  CREATE INDEX t3i
3810: 31 20 4f 4e 20 74 33 28 61 2c 62 29 3b 0a 20 20  1 ON t3(a,b);.  
3820: 20 20 70 72 61 67 6d 61 20 69 6e 64 65 78 5f 69    pragma index_i
3830: 6e 66 6f 28 74 33 69 31 29 3b 0a 20 20 7d 0a 7d  nfo(t3i1);.  }.}
3840: 20 7b 30 20 30 20 61 20 31 20 31 20 62 7d 0a 0a   {0 0 a 1 1 b}..
3850: 69 66 63 61 70 61 62 6c 65 20 74 65 6d 70 64 62  ifcapable tempdb
3860: 20 7b 0a 20 20 23 20 54 65 73 74 20 66 6f 72 20   {.  # Test for 
3870: 74 69 63 6b 65 74 20 23 33 33 32 30 2e 20 57 68  ticket #3320. Wh
3880: 65 6e 20 61 20 74 65 6d 70 20 74 61 62 6c 65 20  en a temp table 
3890: 6f 66 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65  of the same name
38a0: 20 65 78 69 73 74 73 2c 20 6d 61 6b 65 0a 20 20   exists, make.  
38b0: 23 20 73 75 72 65 20 74 68 65 20 73 63 68 65 6d  # sure the schem
38c0: 61 20 6f 66 20 74 68 65 20 6d 61 69 6e 20 74 61  a of the main ta
38d0: 62 6c 65 20 63 61 6e 20 73 74 69 6c 6c 20 62 65  ble can still be
38e0: 20 71 75 65 72 69 65 64 20 75 73 69 6e 67 20 0a   queried using .
38f0: 20 20 23 20 22 70 72 61 67 6d 61 20 74 61 62 6c    # "pragma tabl
3900: 65 5f 69 6e 66 6f 22 3a 0a 20 20 64 6f 5f 74 65  e_info":.  do_te
3910: 73 74 20 70 72 61 67 6d 61 2d 36 2e 36 2e 31 20  st pragma-6.6.1 
3920: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a  {.    execsql {.
3930: 20 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42        CREATE TAB
3940: 4c 45 20 74 72 69 61 6c 28 63 6f 6c 5f 6d 61 69  LE trial(col_mai
3950: 6e 29 3b 0a 20 20 20 20 20 20 43 52 45 41 54 45  n);.      CREATE
3960: 20 54 45 4d 50 20 54 41 42 4c 45 20 74 72 69 61   TEMP TABLE tria
3970: 6c 28 63 6f 6c 5f 74 65 6d 70 29 3b 0a 20 20 20  l(col_temp);.   
3980: 20 7d 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74   }.  } {}.  do_t
3990: 65 73 74 20 70 72 61 67 6d 61 2d 36 2e 36 2e 32  est pragma-6.6.2
39a0: 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b   {.    execsql {
39b0: 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 74 61  .      PRAGMA ta
39c0: 62 6c 65 5f 69 6e 66 6f 28 74 72 69 61 6c 29 3b  ble_info(trial);
39d0: 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 30 20 63 6f  .    }.  } {0 co
39e0: 6c 5f 74 65 6d 70 20 7b 7d 20 30 20 7b 7d 20 30  l_temp {} 0 {} 0
39f0: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67  }.  do_test prag
3a00: 6d 61 2d 36 2e 36 2e 33 20 7b 0a 20 20 20 20 65  ma-6.6.3 {.    e
3a10: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50  xecsql {.      P
3a20: 52 41 47 4d 41 20 74 65 6d 70 2e 74 61 62 6c 65  RAGMA temp.table
3a30: 5f 69 6e 66 6f 28 74 72 69 61 6c 29 3b 0a 20 20  _info(trial);.  
3a40: 20 20 7d 0a 20 20 7d 20 7b 30 20 63 6f 6c 5f 74    }.  } {0 col_t
3a50: 65 6d 70 20 7b 7d 20 30 20 7b 7d 20 30 7d 0a 20  emp {} 0 {} 0}. 
3a60: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
3a70: 36 2e 36 2e 34 20 7b 0a 20 20 20 20 65 78 65 63  6.6.4 {.    exec
3a80: 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47  sql {.      PRAG
3a90: 4d 41 20 6d 61 69 6e 2e 74 61 62 6c 65 5f 69 6e  MA main.table_in
3aa0: 66 6f 28 74 72 69 61 6c 29 3b 0a 20 20 20 20 7d  fo(trial);.    }
3ab0: 0a 20 20 7d 20 7b 30 20 63 6f 6c 5f 6d 61 69 6e  .  } {0 col_main
3ac0: 20 7b 7d 20 30 20 7b 7d 20 30 7d 0a 7d 0a 7d 20   {} 0 {} 0}.}.} 
3ad0: 3b 23 20 69 66 63 61 70 61 62 6c 65 20 73 63 68  ;# ifcapable sch
3ae0: 65 6d 61 5f 70 72 61 67 6d 61 73 0a 23 20 4d 69  ema_pragmas.# Mi
3af0: 73 63 65 6c 6c 61 6e 65 6f 75 73 20 74 65 73 74  scellaneous test
3b00: 73 0a 23 0a 69 66 63 61 70 61 62 6c 65 20 73 63  s.#.ifcapable sc
3b10: 68 65 6d 61 5f 70 72 61 67 6d 61 73 20 7b 0a 64  hema_pragmas {.d
3b20: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 37 2e  o_test pragma-7.
3b30: 31 20 7b 0a 20 20 23 20 4d 61 6b 65 20 73 75 72  1 {.  # Make sur
3b40: 65 20 61 20 70 72 61 67 6d 61 20 6b 6e 6f 77 73  e a pragma knows
3b50: 20 74 6f 20 72 65 61 64 20 74 68 65 20 73 63 68   to read the sch
3b60: 65 6d 61 20 69 66 20 69 74 20 6e 65 65 64 73 20  ema if it needs 
3b70: 74 6f 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20 20  to.  db close.  
3b80: 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e  sqlite3 db test.
3b90: 64 62 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  db.  execsql {. 
3ba0: 20 20 20 70 72 61 67 6d 61 20 69 6e 64 65 78 5f     pragma index_
3bb0: 6c 69 73 74 28 74 33 29 3b 0a 20 20 7d 0a 7d 20  list(t3);.  }.} 
3bc0: 7b 30 20 74 33 69 31 20 30 20 31 20 73 71 6c 69  {0 t3i1 0 1 sqli
3bd0: 74 65 5f 61 75 74 6f 69 6e 64 65 78 5f 74 33 5f  te_autoindex_t3_
3be0: 31 20 31 7d 0a 7d 20 3b 23 20 69 66 63 61 70 61  1 1}.} ;# ifcapa
3bf0: 62 6c 65 20 73 63 68 65 6d 61 5f 70 72 61 67 6d  ble schema_pragm
3c00: 61 73 0a 69 66 63 61 70 61 62 6c 65 20 7b 75 74  as.ifcapable {ut
3c10: 66 31 36 7d 20 7b 0a 20 20 64 6f 5f 74 65 73 74  f16} {.  do_test
3c20: 20 70 72 61 67 6d 61 2d 37 2e 32 20 7b 0a 20 20   pragma-7.2 {.  
3c30: 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 20 20 73    db close.    s
3c40: 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64  qlite3 db test.d
3c50: 62 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b  b.    catchsql {
3c60: 0a 20 20 20 20 20 20 70 72 61 67 6d 61 20 65 6e  .      pragma en
3c70: 63 6f 64 69 6e 67 3d 62 6f 67 75 73 3b 0a 20 20  coding=bogus;.  
3c80: 20 20 7d 0a 20 20 7d 20 7b 31 20 7b 75 6e 73 75    }.  } {1 {unsu
3c90: 70 70 6f 72 74 65 64 20 65 6e 63 6f 64 69 6e 67  pported encoding
3ca0: 3a 20 62 6f 67 75 73 7d 7d 0a 7d 0a 69 66 63 61  : bogus}}.}.ifca
3cb0: 70 61 62 6c 65 20 74 65 6d 70 64 62 20 7b 0a 20  pable tempdb {. 
3cc0: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
3cd0: 37 2e 33 20 7b 0a 20 20 20 20 64 62 20 63 6c 6f  7.3 {.    db clo
3ce0: 73 65 0a 20 20 20 20 73 71 6c 69 74 65 33 20 64  se.    sqlite3 d
3cf0: 62 20 74 65 73 74 2e 64 62 0a 20 20 20 20 65 78  b test.db.    ex
3d00: 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 70 72  ecsql {.      pr
3d10: 61 67 6d 61 20 6c 6f 63 6b 5f 73 74 61 74 75 73  agma lock_status
3d20: 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 6d 61 69  ;.    }.  } {mai
3d30: 6e 20 75 6e 6c 6f 63 6b 65 64 20 74 65 6d 70 20  n unlocked temp 
3d40: 63 6c 6f 73 65 64 7d 0a 7d 20 65 6c 73 65 20 7b  closed}.} else {
3d50: 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .  do_test pragm
3d60: 61 2d 37 2e 33 20 7b 0a 20 20 20 20 64 62 20 63  a-7.3 {.    db c
3d70: 6c 6f 73 65 0a 20 20 20 20 73 71 6c 69 74 65 33  lose.    sqlite3
3d80: 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20 20 20   db test.db.    
3d90: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
3da0: 70 72 61 67 6d 61 20 6c 6f 63 6b 5f 73 74 61 74  pragma lock_stat
3db0: 75 73 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 6d  us;.    }.  } {m
3dc0: 61 69 6e 20 75 6e 6c 6f 63 6b 65 64 7d 0a 7d 0a  ain unlocked}.}.
3dd0: 0a 0a 23 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 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3e10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 54 65 73 74  ---------.# Test
3e20: 20 63 61 73 65 73 20 70 72 61 67 6d 61 2d 38 2e   cases pragma-8.
3e30: 2a 20 74 65 73 74 20 74 68 65 20 22 50 52 41 47  * test the "PRAG
3e40: 4d 41 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f  MA schema_versio
3e50: 6e 22 20 61 6e 64 20 22 50 52 41 47 4d 41 0a 23  n" and "PRAGMA.#
3e60: 20 75 73 65 72 5f 76 65 72 73 69 6f 6e 22 20 73   user_version" s
3e70: 74 61 74 65 6d 65 6e 74 73 2e 0a 23 0a 23 20 70  tatements..#.# p
3e80: 72 61 67 6d 61 2d 38 2e 31 3a 20 50 52 41 47 4d  ragma-8.1: PRAGM
3e90: 41 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e  A schema_version
3ea0: 0a 23 20 70 72 61 67 6d 61 2d 38 2e 32 3a 20 50  .# pragma-8.2: P
3eb0: 52 41 47 4d 41 20 75 73 65 72 5f 76 65 72 73 69  RAGMA user_versi
3ec0: 6f 6e 0a 23 0a 0a 69 66 63 61 70 61 62 6c 65 20  on.#..ifcapable 
3ed0: 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 20 7b  schema_version {
3ee0: 0a 0a 23 20 46 69 72 73 74 20 63 68 65 63 6b 20  ..# First check 
3ef0: 74 68 61 74 20 77 65 20 63 61 6e 20 73 65 74 20  that we can set 
3f00: 74 68 65 20 73 63 68 65 6d 61 20 76 65 72 73 69  the schema versi
3f10: 6f 6e 20 61 6e 64 20 74 68 65 6e 20 72 65 74 72  on and then retr
3f20: 69 65 76 65 20 74 68 65 0a 23 20 73 61 6d 65 20  ieve the.# same 
3f30: 76 61 6c 75 65 2e 0a 64 6f 5f 74 65 73 74 20 70  value..do_test p
3f40: 72 61 67 6d 61 2d 38 2e 31 2e 31 20 7b 0a 20 20  ragma-8.1.1 {.  
3f50: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52  execsql {.    PR
3f60: 41 47 4d 41 20 73 63 68 65 6d 61 5f 76 65 72 73  AGMA schema_vers
3f70: 69 6f 6e 20 3d 20 31 30 35 3b 0a 20 20 7d 0a 7d  ion = 105;.  }.}
3f80: 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67   {}.do_test prag
3f90: 6d 61 2d 38 2e 31 2e 32 20 7b 0a 20 20 65 78 65  ma-8.1.2 {.  exe
3fa0: 63 73 71 6c 32 20 7b 0a 20 20 20 20 50 52 41 47  csql2 {.    PRAG
3fb0: 4d 41 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f  MA schema_versio
3fc0: 6e 3b 0a 20 20 7d 0a 7d 20 7b 73 63 68 65 6d 61  n;.  }.} {schema
3fd0: 5f 76 65 72 73 69 6f 6e 20 31 30 35 7d 0a 64 6f  _version 105}.do
3fe0: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 31  _test pragma-8.1
3ff0: 2e 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .3 {.  execsql {
4000: 0a 20 20 20 20 50 52 41 47 4d 41 20 73 63 68 65  .    PRAGMA sche
4010: 6d 61 5f 76 65 72 73 69 6f 6e 20 3d 20 31 30 36  ma_version = 106
4020: 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65  ;.  }.} {}.do_te
4030: 73 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e 34 20  st pragma-8.1.4 
4040: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
4050: 20 20 50 52 41 47 4d 41 20 73 63 68 65 6d 61 5f    PRAGMA schema_
4060: 76 65 72 73 69 6f 6e 3b 0a 20 20 7d 0a 7d 20 31  version;.  }.} 1
4070: 30 36 0a 0a 23 20 43 68 65 63 6b 20 74 68 61 74  06..# Check that
4080: 20 63 72 65 61 74 69 6e 67 20 61 20 74 61 62 6c   creating a tabl
4090: 65 20 6d 6f 64 69 66 69 65 73 20 74 68 65 20 73  e modifies the s
40a0: 63 68 65 6d 61 2d 76 65 72 73 69 6f 6e 20 28 74  chema-version (t
40b0: 68 69 73 20 69 73 20 72 65 61 6c 6c 79 0a 23 20  his is really.# 
40c0: 74 6f 20 76 65 72 69 66 79 20 74 68 61 74 20 74  to verify that t
40d0: 68 65 20 76 61 6c 75 65 20 62 65 69 6e 67 20 72  he value being r
40e0: 65 61 64 20 69 73 20 69 6e 20 66 61 63 74 20 74  ead is in fact t
40f0: 68 65 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f  he schema versio
4100: 6e 29 2e 0a 64 6f 5f 74 65 73 74 20 70 72 61 67  n)..do_test prag
4110: 6d 61 2d 38 2e 31 2e 35 20 7b 0a 20 20 65 78 65  ma-8.1.5 {.  exe
4120: 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54  csql {.    CREAT
4130: 45 20 54 41 42 4c 45 20 74 34 28 61 2c 20 62 2c  E TABLE t4(a, b,
4140: 20 63 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20   c);.    INSERT 
4150: 49 4e 54 4f 20 74 34 20 56 41 4c 55 45 53 28 31  INTO t4 VALUES(1
4160: 2c 20 32 2c 20 33 29 3b 0a 20 20 20 20 53 45 4c  , 2, 3);.    SEL
4170: 45 43 54 20 2a 20 46 52 4f 4d 20 74 34 3b 0a 20  ECT * FROM t4;. 
4180: 20 7d 0a 7d 20 7b 31 20 32 20 33 7d 0a 64 6f 5f   }.} {1 2 3}.do_
4190: 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e  test pragma-8.1.
41a0: 36 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  6 {.  execsql {.
41b0: 20 20 20 20 50 52 41 47 4d 41 20 73 63 68 65 6d      PRAGMA schem
41c0: 61 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 7d 0a 7d  a_version;.  }.}
41d0: 20 31 30 37 0a 0a 23 20 4e 6f 77 20 6f 70 65 6e   107..# Now open
41e0: 20 61 20 73 65 63 6f 6e 64 20 63 6f 6e 6e 65 63   a second connec
41f0: 74 69 6f 6e 20 74 6f 20 74 68 65 20 64 61 74 61  tion to the data
4200: 62 61 73 65 2e 20 45 6e 73 75 72 65 20 74 68 61  base. Ensure tha
4210: 74 20 63 68 61 6e 67 69 6e 67 20 74 68 65 0a 23  t changing the.#
4220: 20 73 63 68 65 6d 61 2d 76 65 72 73 69 6f 6e 20   schema-version 
4230: 75 73 69 6e 67 20 74 68 65 20 66 69 72 73 74 20  using the first 
4240: 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6f 72 63 65  connection force
4250: 73 20 74 68 65 20 73 65 63 6f 6e 64 20 63 6f 6e  s the second con
4260: 6e 65 63 74 69 6f 6e 0a 23 20 74 6f 20 72 65 6c  nection.# to rel
4270: 6f 61 64 20 74 68 65 20 73 63 68 65 6d 61 2e 20  oad the schema. 
4280: 54 68 69 73 20 68 61 73 20 74 6f 20 62 65 20 64  This has to be d
4290: 6f 6e 65 20 75 73 69 6e 67 20 74 68 65 20 43 2d  one using the C-
42a0: 41 50 49 20 74 65 73 74 20 66 75 6e 63 74 69 6f  API test functio
42b0: 6e 73 2c 0a 23 20 62 65 63 61 75 73 65 20 74 68  ns,.# because th
42c0: 65 20 54 43 4c 20 41 50 49 20 61 63 63 6f 75 6e  e TCL API accoun
42d0: 74 73 20 66 6f 72 20 53 43 48 45 4d 41 5f 45 52  ts for SCHEMA_ER
42e0: 52 4f 52 20 61 6e 64 20 72 65 74 72 69 65 73 20  ROR and retries 
42f0: 74 68 65 20 71 75 65 72 79 2e 0a 64 6f 5f 74 65  the query..do_te
4300: 73 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e 37 20  st pragma-8.1.7 
4310: 7b 0a 20 20 73 71 6c 69 74 65 33 20 64 62 32 20  {.  sqlite3 db2 
4320: 74 65 73 74 2e 64 62 3b 20 73 65 74 20 3a 3a 44  test.db; set ::D
4330: 42 32 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6e 6e  B2 [sqlite3_conn
4340: 65 63 74 69 6f 6e 5f 70 6f 69 6e 74 65 72 20 64  ection_pointer d
4350: 62 32 5d 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  b2].  execsql {.
4360: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
4370: 4d 20 74 34 3b 0a 20 20 7d 20 64 62 32 0a 7d 20  M t4;.  } db2.} 
4380: 7b 31 20 32 20 33 7d 0a 64 6f 5f 74 65 73 74 20  {1 2 3}.do_test 
4390: 70 72 61 67 6d 61 2d 38 2e 31 2e 38 20 7b 0a 20  pragma-8.1.8 {. 
43a0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50   execsql {.    P
43b0: 52 41 47 4d 41 20 73 63 68 65 6d 61 5f 76 65 72  RAGMA schema_ver
43c0: 73 69 6f 6e 20 3d 20 31 30 38 3b 0a 20 20 7d 0a  sion = 108;.  }.
43d0: 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61  } {}.do_test pra
43e0: 67 6d 61 2d 38 2e 31 2e 39 20 7b 0a 20 20 73 65  gma-8.1.9 {.  se
43f0: 74 20 3a 3a 53 54 4d 54 20 5b 73 71 6c 69 74 65  t ::STMT [sqlite
4400: 33 5f 70 72 65 70 61 72 65 20 24 3a 3a 44 42 32  3_prepare $::DB2
4410: 20 22 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20   "SELECT * FROM 
4420: 74 34 22 20 2d 31 20 44 55 4d 4d 59 5d 0a 20 20  t4" -1 DUMMY].  
4430: 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 3a 3a  sqlite3_step $::
4440: 53 54 4d 54 0a 7d 20 53 51 4c 49 54 45 5f 45 52  STMT.} SQLITE_ER
4450: 52 4f 52 0a 64 6f 5f 74 65 73 74 20 70 72 61 67  ROR.do_test prag
4460: 6d 61 2d 38 2e 31 2e 31 30 20 7b 0a 20 20 73 71  ma-8.1.10 {.  sq
4470: 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24  lite3_finalize $
4480: 3a 3a 53 54 4d 54 0a 7d 20 53 51 4c 49 54 45 5f  ::STMT.} SQLITE_
4490: 53 43 48 45 4d 41 0a 0a 23 20 4d 61 6b 65 20 73  SCHEMA..# Make s
44a0: 75 72 65 20 74 68 65 20 73 63 68 65 6d 61 2d 76  ure the schema-v
44b0: 65 72 73 69 6f 6e 20 63 61 6e 20 62 65 20 6d 61  ersion can be ma
44c0: 6e 69 70 75 6c 61 74 65 64 20 69 6e 20 61 6e 20  nipulated in an 
44d0: 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
44e0: 65 2e 0a 66 69 6c 65 20 64 65 6c 65 74 65 20 2d  e..file delete -
44f0: 66 6f 72 63 65 20 74 65 73 74 32 2e 64 62 0a 66  force test2.db.f
4500: 69 6c 65 20 64 65 6c 65 74 65 20 2d 66 6f 72 63  ile delete -forc
4510: 65 20 74 65 73 74 32 2e 64 62 2d 6a 6f 75 72 6e  e test2.db-journ
4520: 61 6c 0a 69 66 63 61 70 61 62 6c 65 20 61 74 74  al.ifcapable att
4530: 61 63 68 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20  ach {.  do_test 
4540: 70 72 61 67 6d 61 2d 38 2e 31 2e 31 31 20 7b 0a  pragma-8.1.11 {.
4550: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20      execsql {.  
4560: 20 20 20 20 41 54 54 41 43 48 20 27 74 65 73 74      ATTACH 'test
4570: 32 2e 64 62 27 20 41 53 20 61 75 78 3b 0a 20 20  2.db' AS aux;.  
4580: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
4590: 20 61 75 78 2e 74 31 28 61 2c 20 62 2c 20 63 29   aux.t1(a, b, c)
45a0: 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 61  ;.      PRAGMA a
45b0: 75 78 2e 73 63 68 65 6d 61 5f 76 65 72 73 69 6f  ux.schema_versio
45c0: 6e 20 3d 20 32 30 35 3b 0a 20 20 20 20 7d 0a 20  n = 205;.    }. 
45d0: 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20   } {}.  do_test 
45e0: 70 72 61 67 6d 61 2d 38 2e 31 2e 31 32 20 7b 0a  pragma-8.1.12 {.
45f0: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20      execsql {.  
4600: 20 20 20 20 50 52 41 47 4d 41 20 61 75 78 2e 73      PRAGMA aux.s
4610: 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 3b 0a 20  chema_version;. 
4620: 20 20 20 7d 0a 20 20 7d 20 32 30 35 0a 7d 0a 64     }.  } 205.}.d
4630: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e  o_test pragma-8.
4640: 31 2e 31 33 20 7b 0a 20 20 65 78 65 63 73 71 6c  1.13 {.  execsql
4650: 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 73 63   {.    PRAGMA sc
4660: 68 65 6d 61 5f 76 65 72 73 69 6f 6e 3b 0a 20 20  hema_version;.  
4670: 7d 0a 7d 20 31 30 38 0a 0a 23 20 41 6e 64 20 63  }.} 108..# And c
4680: 68 65 63 6b 20 74 68 61 74 20 6d 6f 64 69 66 79  heck that modify
4690: 69 6e 67 20 74 68 65 20 73 63 68 65 6d 61 2d 76  ing the schema-v
46a0: 65 72 73 69 6f 6e 20 69 6e 20 61 6e 20 61 74 74  ersion in an att
46b0: 61 63 68 65 64 20 64 61 74 61 62 61 73 65 0a 23  ached database.#
46c0: 20 66 6f 72 63 65 73 20 74 68 65 20 73 65 63 6f   forces the seco
46d0: 6e 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f  nd connection to
46e0: 20 72 65 6c 6f 61 64 20 74 68 65 20 73 63 68 65   reload the sche
46f0: 6d 61 2e 0a 69 66 63 61 70 61 62 6c 65 20 61 74  ma..ifcapable at
4700: 74 61 63 68 20 7b 0a 20 20 64 6f 5f 74 65 73 74  tach {.  do_test
4710: 20 70 72 61 67 6d 61 2d 38 2e 31 2e 31 34 20 7b   pragma-8.1.14 {
4720: 0a 20 20 20 20 73 71 6c 69 74 65 33 20 64 62 32  .    sqlite3 db2
4730: 20 74 65 73 74 2e 64 62 3b 20 73 65 74 20 3a 3a   test.db; set ::
4740: 44 42 32 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6e  DB2 [sqlite3_con
4750: 6e 65 63 74 69 6f 6e 5f 70 6f 69 6e 74 65 72 20  nection_pointer 
4760: 64 62 32 5d 0a 20 20 20 20 65 78 65 63 73 71 6c  db2].    execsql
4770: 20 7b 0a 20 20 20 20 20 20 41 54 54 41 43 48 20   {.      ATTACH 
4780: 27 74 65 73 74 32 2e 64 62 27 20 41 53 20 61 75  'test2.db' AS au
4790: 78 3b 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20  x;.      SELECT 
47a0: 2a 20 46 52 4f 4d 20 61 75 78 2e 74 31 3b 0a 20  * FROM aux.t1;. 
47b0: 20 20 20 7d 20 64 62 32 0a 20 20 7d 20 7b 7d 0a     } db2.  } {}.
47c0: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
47d0: 2d 38 2e 31 2e 31 35 20 7b 0a 20 20 20 20 65 78  -8.1.15 {.    ex
47e0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52  ecsql {.      PR
47f0: 41 47 4d 41 20 61 75 78 2e 73 63 68 65 6d 61 5f  AGMA aux.schema_
4800: 76 65 72 73 69 6f 6e 20 3d 20 32 30 36 3b 0a 20  version = 206;. 
4810: 20 20 20 7d 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f     }.  } {}.  do
4820: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 31  _test pragma-8.1
4830: 2e 31 36 20 7b 0a 20 20 20 20 73 65 74 20 3a 3a  .16 {.    set ::
4840: 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72  STMT [sqlite3_pr
4850: 65 70 61 72 65 20 24 3a 3a 44 42 32 20 22 53 45  epare $::DB2 "SE
4860: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 61 75 78 2e  LECT * FROM aux.
4870: 74 31 22 20 2d 31 20 44 55 4d 4d 59 5d 0a 20 20  t1" -1 DUMMY].  
4880: 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24    sqlite3_step $
4890: 3a 3a 53 54 4d 54 0a 20 20 7d 20 53 51 4c 49 54  ::STMT.  } SQLIT
48a0: 45 5f 45 52 52 4f 52 0a 20 20 64 6f 5f 74 65 73  E_ERROR.  do_tes
48b0: 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e 31 37 20  t pragma-8.1.17 
48c0: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66 69  {.    sqlite3_fi
48d0: 6e 61 6c 69 7a 65 20 24 3a 3a 53 54 4d 54 0a 20  nalize $::STMT. 
48e0: 20 7d 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41   } SQLITE_SCHEMA
48f0: 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .  do_test pragm
4900: 61 2d 38 2e 31 2e 31 38 20 7b 0a 20 20 20 20 64  a-8.1.18 {.    d
4910: 62 32 20 63 6c 6f 73 65 0a 20 20 7d 20 7b 7d 0a  b2 close.  } {}.
4920: 7d 0a 0a 23 20 4e 6f 77 20 74 65 73 74 20 74 68  }..# Now test th
4930: 61 74 20 74 68 65 20 75 73 65 72 2d 76 65 72 73  at the user-vers
4940: 69 6f 6e 20 63 61 6e 20 62 65 20 72 65 61 64 20  ion can be read 
4950: 61 6e 64 20 77 72 69 74 74 65 6e 20 28 61 6e 64  and written (and
4960: 20 74 68 61 74 20 77 65 20 61 72 65 6e 27 74 0a   that we aren't.
4970: 23 20 61 63 63 69 64 65 6e 74 61 6c 6c 79 20 6d  # accidentally m
4980: 61 6e 69 70 75 6c 61 74 69 6e 67 20 74 68 65 20  anipulating the 
4990: 73 63 68 65 6d 61 2d 76 65 72 73 69 6f 6e 20 69  schema-version i
49a0: 6e 73 74 65 61 64 29 2e 0a 64 6f 5f 74 65 73 74  nstead)..do_test
49b0: 20 70 72 61 67 6d 61 2d 38 2e 32 2e 31 20 7b 0a   pragma-8.2.1 {.
49c0: 20 20 65 78 65 63 73 71 6c 32 20 7b 0a 20 20 20    execsql2 {.   
49d0: 20 50 52 41 47 4d 41 20 75 73 65 72 5f 76 65 72   PRAGMA user_ver
49e0: 73 69 6f 6e 3b 0a 20 20 7d 0a 7d 20 7b 75 73 65  sion;.  }.} {use
49f0: 72 5f 76 65 72 73 69 6f 6e 20 30 7d 0a 64 6f 5f  r_version 0}.do_
4a00: 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 32 2e  test pragma-8.2.
4a10: 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  2 {.  execsql {.
4a20: 20 20 20 20 50 52 41 47 4d 41 20 75 73 65 72 5f      PRAGMA user_
4a30: 76 65 72 73 69 6f 6e 20 3d 20 32 3b 0a 20 20 7d  version = 2;.  }
4a40: 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 70 72  .} {}.do_test pr
4a50: 61 67 6d 61 2d 38 2e 32 2e 33 2e 31 20 7b 0a 20  agma-8.2.3.1 {. 
4a60: 20 65 78 65 63 73 71 6c 32 20 7b 0a 20 20 20 20   execsql2 {.    
4a70: 50 52 41 47 4d 41 20 75 73 65 72 5f 76 65 72 73  PRAGMA user_vers
4a80: 69 6f 6e 3b 0a 20 20 7d 0a 7d 20 7b 75 73 65 72  ion;.  }.} {user
4a90: 5f 76 65 72 73 69 6f 6e 20 32 7d 0a 64 6f 5f 74  _version 2}.do_t
4aa0: 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 32 2e 33  est pragma-8.2.3
4ab0: 2e 32 20 7b 0a 20 20 64 62 20 63 6c 6f 73 65 0a  .2 {.  db close.
4ac0: 20 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73    sqlite3 db tes
4ad0: 74 2e 64 62 0a 20 20 65 78 65 63 73 71 6c 20 7b  t.db.  execsql {
4ae0: 0a 20 20 20 20 50 52 41 47 4d 41 20 75 73 65 72  .    PRAGMA user
4af0: 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 7d 0a 7d 20  _version;.  }.} 
4b00: 7b 32 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67  {2}.do_test prag
4b10: 6d 61 2d 38 2e 32 2e 34 2e 31 20 7b 0a 20 20 65  ma-8.2.4.1 {.  e
4b20: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41  xecsql {.    PRA
4b30: 47 4d 41 20 73 63 68 65 6d 61 5f 76 65 72 73 69  GMA schema_versi
4b40: 6f 6e 3b 0a 20 20 7d 0a 7d 20 7b 31 30 38 7d 0a  on;.  }.} {108}.
4b50: 69 66 63 61 70 61 62 6c 65 20 76 61 63 75 75 6d  ifcapable vacuum
4b60: 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61   {.  do_test pra
4b70: 67 6d 61 2d 38 2e 32 2e 34 2e 32 20 7b 0a 20 20  gma-8.2.4.2 {.  
4b80: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
4b90: 20 20 56 41 43 55 55 4d 3b 0a 20 20 20 20 20 20    VACUUM;.      
4ba0: 50 52 41 47 4d 41 20 75 73 65 72 5f 76 65 72 73  PRAGMA user_vers
4bb0: 69 6f 6e 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b  ion;.    }.  } {
4bc0: 32 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61  2}.  do_test pra
4bd0: 67 6d 61 2d 38 2e 32 2e 34 2e 33 20 7b 0a 20 20  gma-8.2.4.3 {.  
4be0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
4bf0: 20 20 50 52 41 47 4d 41 20 73 63 68 65 6d 61 5f    PRAGMA schema_
4c00: 76 65 72 73 69 6f 6e 3b 0a 20 20 20 20 7d 0a 20  version;.    }. 
4c10: 20 7d 20 7b 31 30 39 7d 0a 7d 0a 0a 69 66 63 61   } {109}.}..ifca
4c20: 70 61 62 6c 65 20 61 74 74 61 63 68 20 7b 0a 20  pable attach {. 
4c30: 20 64 62 20 65 76 61 6c 20 7b 41 54 54 41 43 48   db eval {ATTACH
4c40: 20 27 74 65 73 74 32 2e 64 62 27 20 41 53 20 61   'test2.db' AS a
4c50: 75 78 7d 0a 20 20 0a 20 20 23 20 43 68 65 63 6b  ux}.  .  # Check
4c60: 20 74 68 61 74 20 74 68 65 20 75 73 65 72 2d 76   that the user-v
4c70: 65 72 73 69 6f 6e 20 69 6e 20 74 68 65 20 61 75  ersion in the au
4c80: 78 69 6c 61 72 79 20 64 61 74 61 62 61 73 65 20  xilary database 
4c90: 63 61 6e 20 62 65 20 6d 61 6e 69 70 75 6c 61 74  can be manipulat
4ca0: 65 64 20 28 0a 20 20 23 20 61 6e 64 20 74 68 61  ed (.  # and tha
4cb0: 74 20 77 65 20 61 72 65 6e 27 74 20 61 63 63 69  t we aren't acci
4cc0: 64 65 6e 74 61 6c 6c 79 20 6d 61 6e 69 70 75 6c  dentally manipul
4cd0: 61 74 69 6e 67 20 74 68 65 20 73 61 6d 65 20 69  ating the same i
4ce0: 6e 20 74 68 65 20 6d 61 69 6e 20 64 62 29 2e 0a  n the main db)..
4cf0: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
4d00: 2d 38 2e 32 2e 35 20 7b 0a 20 20 20 20 65 78 65  -8.2.5 {.    exe
4d10: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41  csql {.      PRA
4d20: 47 4d 41 20 61 75 78 2e 75 73 65 72 5f 76 65 72  GMA aux.user_ver
4d30: 73 69 6f 6e 3b 0a 20 20 20 20 7d 0a 20 20 7d 20  sion;.    }.  } 
4d40: 7b 30 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72  {0}.  do_test pr
4d50: 61 67 6d 61 2d 38 2e 32 2e 36 20 7b 0a 20 20 20  agma-8.2.6 {.   
4d60: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20   execsql {.     
4d70: 20 50 52 41 47 4d 41 20 61 75 78 2e 75 73 65 72   PRAGMA aux.user
4d80: 5f 76 65 72 73 69 6f 6e 20 3d 20 33 3b 0a 20 20  _version = 3;.  
4d90: 20 20 7d 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f    }.  } {}.  do_
4da0: 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 32 2e  test pragma-8.2.
4db0: 37 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  7 {.    execsql 
4dc0: 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 61  {.      PRAGMA a
4dd0: 75 78 2e 75 73 65 72 5f 76 65 72 73 69 6f 6e 3b  ux.user_version;
4de0: 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 33 7d 0a 20  .    }.  } {3}. 
4df0: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
4e00: 38 2e 32 2e 38 20 7b 0a 20 20 20 20 65 78 65 63  8.2.8 {.    exec
4e10: 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47  sql {.      PRAG
4e20: 4d 41 20 6d 61 69 6e 2e 75 73 65 72 5f 76 65 72  MA main.user_ver
4e30: 73 69 6f 6e 3b 0a 20 20 20 20 7d 0a 20 20 7d 20  sion;.    }.  } 
4e40: 7b 32 7d 0a 20 20 0a 20 20 23 20 4e 6f 77 20 63  {2}.  .  # Now c
4e50: 68 65 63 6b 20 74 68 61 74 20 61 20 52 4f 4c 4c  heck that a ROLL
4e60: 42 41 43 4b 20 72 65 73 65 74 73 20 74 68 65 20  BACK resets the 
4e70: 75 73 65 72 2d 76 65 72 73 69 6f 6e 20 69 66 20  user-version if 
4e80: 69 74 20 68 61 73 20 62 65 65 6e 20 6d 6f 64 69  it has been modi
4e90: 66 69 65 64 0a 20 20 23 20 77 69 74 68 69 6e 20  fied.  # within 
4ea0: 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 20  a transaction.. 
4eb0: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
4ec0: 38 2e 32 2e 39 20 7b 0a 20 20 20 20 65 78 65 63  8.2.9 {.    exec
4ed0: 73 71 6c 20 7b 0a 20 20 20 20 20 20 42 45 47 49  sql {.      BEGI
4ee0: 4e 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20  N;.      PRAGMA 
4ef0: 61 75 78 2e 75 73 65 72 5f 76 65 72 73 69 6f 6e  aux.user_version
4f00: 20 3d 20 31 30 3b 0a 20 20 20 20 20 20 50 52 41   = 10;.      PRA
4f10: 47 4d 41 20 75 73 65 72 5f 76 65 72 73 69 6f 6e  GMA user_version
4f20: 20 3d 20 31 31 3b 0a 20 20 20 20 7d 0a 20 20 7d   = 11;.    }.  }
4f30: 20 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72   {}.  do_test pr
4f40: 61 67 6d 61 2d 38 2e 32 2e 31 30 20 7b 0a 20 20  agma-8.2.10 {.  
4f50: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
4f60: 20 20 50 52 41 47 4d 41 20 61 75 78 2e 75 73 65    PRAGMA aux.use
4f70: 72 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 20 20 7d  r_version;.    }
4f80: 0a 20 20 7d 20 7b 31 30 7d 0a 20 20 64 6f 5f 74  .  } {10}.  do_t
4f90: 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 32 2e 31  est pragma-8.2.1
4fa0: 31 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  1 {.    execsql 
4fb0: 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 6d  {.      PRAGMA m
4fc0: 61 69 6e 2e 75 73 65 72 5f 76 65 72 73 69 6f 6e  ain.user_version
4fd0: 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 31 31 7d  ;.    }.  } {11}
4fe0: 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .  do_test pragm
4ff0: 61 2d 38 2e 32 2e 31 32 20 7b 0a 20 20 20 20 65  a-8.2.12 {.    e
5000: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 52  xecsql {.      R
5010: 4f 4c 4c 42 41 43 4b 3b 0a 20 20 20 20 20 20 50  OLLBACK;.      P
5020: 52 41 47 4d 41 20 61 75 78 2e 75 73 65 72 5f 76  RAGMA aux.user_v
5030: 65 72 73 69 6f 6e 3b 0a 20 20 20 20 7d 0a 20 20  ersion;.    }.  
5040: 7d 20 7b 33 7d 0a 20 20 64 6f 5f 74 65 73 74 20  } {3}.  do_test 
5050: 70 72 61 67 6d 61 2d 38 2e 32 2e 31 33 20 7b 0a  pragma-8.2.13 {.
5060: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20      execsql {.  
5070: 20 20 20 20 50 52 41 47 4d 41 20 6d 61 69 6e 2e      PRAGMA main.
5080: 75 73 65 72 5f 76 65 72 73 69 6f 6e 3b 0a 20 20  user_version;.  
5090: 20 20 7d 0a 20 20 7d 20 7b 32 7d 0a 7d 0a 0a 23    }.  } {2}.}..#
50a0: 20 54 72 79 20 61 20 6e 65 67 61 74 69 76 65 20   Try a negative 
50b0: 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20 75 73  value for the us
50c0: 65 72 2d 76 65 72 73 69 6f 6e 0a 64 6f 5f 74 65  er-version.do_te
50d0: 73 74 20 70 72 61 67 6d 61 2d 38 2e 32 2e 31 34  st pragma-8.2.14
50e0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
50f0: 20 20 20 50 52 41 47 4d 41 20 75 73 65 72 5f 76     PRAGMA user_v
5100: 65 72 73 69 6f 6e 20 3d 20 2d 34 35 30 3b 0a 20  ersion = -450;. 
5110: 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20   }.} {}.do_test 
5120: 70 72 61 67 6d 61 2d 38 2e 32 2e 31 35 20 7b 0a  pragma-8.2.15 {.
5130: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
5140: 50 52 41 47 4d 41 20 75 73 65 72 5f 76 65 72 73  PRAGMA user_vers
5150: 69 6f 6e 3b 0a 20 20 7d 0a 7d 20 7b 2d 34 35 30  ion;.  }.} {-450
5160: 7d 0a 7d 20 3b 20 23 20 69 66 63 61 70 61 62 6c  }.} ; # ifcapabl
5170: 65 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e  e schema_version
5180: 0a 0a 23 20 43 68 65 63 6b 20 74 6f 20 73 65 65  ..# Check to see
5190: 20 69 66 20 54 45 4d 50 5f 53 54 4f 52 45 20 69   if TEMP_STORE i
51a0: 73 20 6d 65 6d 6f 72 79 20 6f 72 20 64 69 73 6b  s memory or disk
51b0: 2e 20 20 52 65 74 75 72 6e 20 73 74 72 69 6e 67  .  Return string
51c0: 73 0a 23 20 22 6d 65 6d 6f 72 79 22 20 6f 72 20  s.# "memory" or 
51d0: 22 64 69 73 6b 22 20 61 73 20 61 70 70 72 6f 70  "disk" as approp
51e0: 72 69 61 74 65 2e 0a 23 0a 70 72 6f 63 20 63 68  riate..#.proc ch
51f0: 65 63 6b 5f 74 65 6d 70 5f 73 74 6f 72 65 20 7b  eck_temp_store {
5200: 7d 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 43  } {.  db eval {C
5210: 52 45 41 54 45 20 54 45 4d 50 20 54 41 42 4c 45  REATE TEMP TABLE
5220: 20 49 46 20 4e 4f 54 20 45 58 49 53 54 53 20 61   IF NOT EXISTS a
5230: 28 62 29 7d 0a 20 20 64 62 20 65 76 61 6c 20 7b  (b)}.  db eval {
5240: 50 52 41 47 4d 41 20 64 61 74 61 62 61 73 65 5f  PRAGMA database_
5250: 6c 69 73 74 7d 20 7b 0a 20 20 20 20 69 66 20 7b  list} {.    if {
5260: 24 6e 61 6d 65 3d 3d 22 74 65 6d 70 22 7d 20 7b  $name=="temp"} {
5270: 0a 20 20 20 20 20 20 73 65 74 20 62 74 20 5b 62  .      set bt [b
5280: 74 72 65 65 5f 66 72 6f 6d 5f 64 62 20 64 62 20  tree_from_db db 
5290: 31 5d 0a 20 20 20 20 20 20 69 66 20 7b 5b 62 74  1].      if {[bt
52a0: 72 65 65 5f 69 73 6d 65 6d 64 62 20 24 62 74 5d  ree_ismemdb $bt]
52b0: 7d 20 7b 0a 20 20 20 20 20 20 20 20 72 65 74 75  } {.        retu
52c0: 72 6e 20 22 6d 65 6d 6f 72 79 22 0a 20 20 20 20  rn "memory".    
52d0: 20 20 7d 0a 20 20 20 20 20 20 72 65 74 75 72 6e    }.      return
52e0: 20 22 64 69 73 6b 22 0a 20 20 20 20 7d 0a 20 20   "disk".    }.  
52f0: 7d 0a 20 20 72 65 74 75 72 6e 20 22 75 6e 6b 6e  }.  return "unkn
5300: 6f 77 6e 22 0a 7d 0a 0a 0a 23 20 54 65 73 74 20  own".}...# Test 
5310: 74 65 6d 70 5f 73 74 6f 72 65 20 61 6e 64 20 74  temp_store and t
5320: 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74  emp_store_direct
5330: 6f 72 79 20 70 72 61 67 6d 61 73 0a 23 0a 69 66  ory pragmas.#.if
5340: 63 61 70 61 62 6c 65 20 70 61 67 65 72 5f 70 72  capable pager_pr
5350: 61 67 6d 61 73 20 7b 0a 64 6f 5f 74 65 73 74 20  agmas {.do_test 
5360: 70 72 61 67 6d 61 2d 39 2e 31 20 7b 0a 20 20 64  pragma-9.1 {.  d
5370: 62 20 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74 65  b close.  sqlite
5380: 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20 65  3 db test.db.  e
5390: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41  xecsql {.    PRA
53a0: 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 3b 0a  GMA temp_store;.
53b0: 20 20 7d 0a 7d 20 7b 30 7d 0a 69 66 20 7b 24 54    }.} {0}.if {$T
53c0: 45 4d 50 5f 53 54 4f 52 45 3c 3d 31 7d 20 7b 0a  EMP_STORE<=1} {.
53d0: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
53e0: 2d 39 2e 31 2e 31 20 7b 0a 20 20 20 20 63 68 65  -9.1.1 {.    che
53f0: 63 6b 5f 74 65 6d 70 5f 73 74 6f 72 65 0a 20 20  ck_temp_store.  
5400: 7d 20 7b 64 69 73 6b 7d 0a 7d 20 65 6c 73 65 20  } {disk}.} else 
5410: 7b 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67  {.  do_test prag
5420: 6d 61 2d 39 2e 31 2e 31 20 7b 0a 20 20 20 20 63  ma-9.1.1 {.    c
5430: 68 65 63 6b 5f 74 65 6d 70 5f 73 74 6f 72 65 0a  heck_temp_store.
5440: 20 20 7d 20 7b 6d 65 6d 6f 72 79 7d 0a 7d 0a 0a    } {memory}.}..
5450: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 39  do_test pragma-9
5460: 2e 32 20 7b 0a 20 20 64 62 20 63 6c 6f 73 65 0a  .2 {.  db close.
5470: 20 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73    sqlite3 db tes
5480: 74 2e 64 62 0a 20 20 65 78 65 63 73 71 6c 20 7b  t.db.  execsql {
5490: 0a 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70  .    PRAGMA temp
54a0: 5f 73 74 6f 72 65 3d 66 69 6c 65 3b 0a 20 20 20  _store=file;.   
54b0: 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f   PRAGMA temp_sto
54c0: 72 65 3b 0a 20 20 7d 0a 7d 20 7b 31 7d 0a 69 66  re;.  }.} {1}.if
54d0: 20 7b 24 54 45 4d 50 5f 53 54 4f 52 45 3d 3d 33   {$TEMP_STORE==3
54e0: 7d 20 7b 0a 20 20 23 20 57 68 65 6e 20 54 45 4d  } {.  # When TEM
54f0: 50 5f 53 54 4f 52 45 20 69 73 20 33 2c 20 61 6c  P_STORE is 3, al
5500: 77 61 79 73 20 75 73 65 20 6d 65 6d 6f 72 79 20  ways use memory 
5510: 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 70 72  regardless of pr
5520: 61 67 6d 61 20 73 65 74 74 69 6e 67 73 2e 0a 20  agma settings.. 
5530: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
5540: 39 2e 32 2e 31 20 7b 0a 20 20 20 20 63 68 65 63  9.2.1 {.    chec
5550: 6b 5f 74 65 6d 70 5f 73 74 6f 72 65 0a 20 20 7d  k_temp_store.  }
5560: 20 7b 6d 65 6d 6f 72 79 7d 0a 7d 20 65 6c 73 65   {memory}.} else
5570: 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61   {.  do_test pra
5580: 67 6d 61 2d 39 2e 32 2e 31 20 7b 0a 20 20 20 20  gma-9.2.1 {.    
5590: 63 68 65 63 6b 5f 74 65 6d 70 5f 73 74 6f 72 65  check_temp_store
55a0: 0a 20 20 7d 20 7b 64 69 73 6b 7d 0a 7d 0a 0a 64  .  } {disk}.}..d
55b0: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 39 2e  o_test pragma-9.
55c0: 33 20 7b 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20  3 {.  db close. 
55d0: 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74   sqlite3 db test
55e0: 2e 64 62 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  .db.  execsql {.
55f0: 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f      PRAGMA temp_
5600: 73 74 6f 72 65 3d 6d 65 6d 6f 72 79 3b 0a 20 20  store=memory;.  
5610: 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74    PRAGMA temp_st
5620: 6f 72 65 3b 0a 20 20 7d 0a 7d 20 7b 32 7d 0a 69  ore;.  }.} {2}.i
5630: 66 20 7b 24 54 45 4d 50 5f 53 54 4f 52 45 3d 3d  f {$TEMP_STORE==
5640: 30 7d 20 7b 0a 20 20 23 20 57 68 65 6e 20 54 45  0} {.  # When TE
5650: 4d 50 5f 53 54 4f 52 45 20 69 73 20 30 2c 20 61  MP_STORE is 0, a
5660: 6c 77 61 79 73 20 75 73 65 20 74 68 65 20 64 69  lways use the di
5670: 73 6b 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66  sk regardless of
5680: 20 70 72 61 67 6d 61 20 73 65 74 74 69 6e 67 73   pragma settings
5690: 2e 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67  ..  do_test prag
56a0: 6d 61 2d 39 2e 33 2e 31 20 7b 0a 20 20 20 20 63  ma-9.3.1 {.    c
56b0: 68 65 63 6b 5f 74 65 6d 70 5f 73 74 6f 72 65 0a  heck_temp_store.
56c0: 20 20 7d 20 7b 64 69 73 6b 7d 0a 7d 20 65 6c 73    } {disk}.} els
56d0: 65 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 70 72  e {.  do_test pr
56e0: 61 67 6d 61 2d 39 2e 33 2e 31 20 7b 0a 20 20 20  agma-9.3.1 {.   
56f0: 20 63 68 65 63 6b 5f 74 65 6d 70 5f 73 74 6f 72   check_temp_stor
5700: 65 0a 20 20 7d 20 7b 6d 65 6d 6f 72 79 7d 0a 7d  e.  } {memory}.}
5710: 0a 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  ..do_test pragma
5720: 2d 39 2e 34 20 7b 0a 20 20 65 78 65 63 73 71 6c  -9.4 {.  execsql
5730: 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 74 65   {.    PRAGMA te
5740: 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f  mp_store_directo
5750: 72 79 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 69 66 63  ry;.  }.} {}.ifc
5760: 61 70 61 62 6c 65 20 77 73 64 20 7b 0a 20 20 64  apable wsd {.  d
5770: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 39 2e  o_test pragma-9.
5780: 35 20 7b 0a 20 20 20 20 73 65 74 20 70 77 64 20  5 {.    set pwd 
5790: 5b 73 74 72 69 6e 67 20 6d 61 70 20 7b 27 20 27  [string map {' '
57a0: 27 7d 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e  '} [file nativen
57b0: 61 6d 65 20 5b 70 77 64 5d 5d 5d 0a 20 20 20 20  ame [pwd]]].    
57c0: 65 78 65 63 73 71 6c 20 22 0a 20 20 20 20 20 20  execsql ".      
57d0: 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72  PRAGMA temp_stor
57e0: 65 5f 64 69 72 65 63 74 6f 72 79 3d 27 24 70 77  e_directory='$pw
57f0: 64 27 3b 0a 20 20 20 20 22 0a 20 20 7d 20 7b 7d  d';.    ".  } {}
5800: 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .  do_test pragm
5810: 61 2d 39 2e 36 20 7b 0a 20 20 20 20 65 78 65 63  a-9.6 {.    exec
5820: 73 71 6c 20 7b 20 0a 20 20 20 20 20 20 50 52 41  sql { .      PRA
5830: 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64  GMA temp_store_d
5840: 69 72 65 63 74 6f 72 79 3b 0a 20 20 20 20 7d 0a  irectory;.    }.
5850: 20 20 7d 20 5b 6c 69 73 74 20 5b 66 69 6c 65 20    } [list [file 
5860: 6e 61 74 69 76 65 6e 61 6d 65 20 5b 70 77 64 5d  nativename [pwd]
5870: 5d 5d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61  ]].  do_test pra
5880: 67 6d 61 2d 39 2e 37 20 7b 0a 20 20 20 20 63 61  gma-9.7 {.    ca
5890: 74 63 68 73 71 6c 20 7b 20 0a 20 20 20 20 20 20  tchsql { .      
58a0: 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72  PRAGMA temp_stor
58b0: 65 5f 64 69 72 65 63 74 6f 72 79 3d 27 2f 4e 4f  e_directory='/NO
58c0: 4e 2f 45 58 49 53 54 45 4e 54 2f 50 41 54 48 2f  N/EXISTENT/PATH/
58d0: 46 4f 4f 42 41 52 27 3b 0a 20 20 20 20 7d 0a 20  FOOBAR';.    }. 
58e0: 20 7d 20 7b 31 20 7b 6e 6f 74 20 61 20 77 72 69   } {1 {not a wri
58f0: 74 61 62 6c 65 20 64 69 72 65 63 74 6f 72 79 7d  table directory}
5900: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67  }.  do_test prag
5910: 6d 61 2d 39 2e 38 20 7b 0a 20 20 20 20 65 78 65  ma-9.8 {.    exe
5920: 63 73 71 6c 20 7b 20 0a 20 20 20 20 20 20 50 52  csql { .      PR
5930: 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 5f  AGMA temp_store_
5940: 64 69 72 65 63 74 6f 72 79 3d 27 27 3b 0a 20 20  directory='';.  
5950: 20 20 7d 0a 20 20 7d 20 7b 7d 0a 20 20 69 66 20    }.  } {}.  if 
5960: 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 54  {![info exists T
5970: 45 4d 50 5f 53 54 4f 52 45 5d 20 7c 7c 20 24 54  EMP_STORE] || $T
5980: 45 4d 50 5f 53 54 4f 52 45 3c 3d 31 7d 20 7b 0a  EMP_STORE<=1} {.
5990: 20 20 20 20 69 66 63 61 70 61 62 6c 65 20 74 65      ifcapable te
59a0: 6d 70 64 62 20 7b 0a 20 20 20 20 20 20 64 6f 5f  mpdb {.      do_
59b0: 74 65 73 74 20 70 72 61 67 6d 61 2d 39 2e 39 20  test pragma-9.9 
59c0: 7b 0a 20 20 20 20 20 20 20 20 65 78 65 63 73 71  {.        execsq
59d0: 6c 20 7b 20 0a 20 20 20 20 20 20 20 20 20 20 50  l { .          P
59e0: 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65  RAGMA temp_store
59f0: 5f 64 69 72 65 63 74 6f 72 79 3b 0a 20 20 20 20  _directory;.    
5a00: 20 20 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d        PRAGMA tem
5a10: 70 5f 73 74 6f 72 65 3d 46 49 4c 45 3b 0a 20 20  p_store=FILE;.  
5a20: 20 20 20 20 20 20 20 20 43 52 45 41 54 45 20 54          CREATE T
5a30: 45 4d 50 20 54 41 42 4c 45 20 74 65 6d 70 5f 73  EMP TABLE temp_s
5a40: 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 5f 74  tore_directory_t
5a50: 65 73 74 28 61 20 69 6e 74 65 67 65 72 29 3b 0a  est(a integer);.
5a60: 20 20 20 20 20 20 20 20 20 20 49 4e 53 45 52 54            INSERT
5a70: 20 49 4e 54 4f 20 74 65 6d 70 5f 73 74 6f 72 65   INTO temp_store
5a80: 5f 64 69 72 65 63 74 6f 72 79 5f 74 65 73 74 20  _directory_test 
5a90: 76 61 6c 75 65 73 20 28 32 29 3b 0a 20 20 20 20  values (2);.    
5aa0: 20 20 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46        SELECT * F
5ab0: 52 4f 4d 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64  ROM temp_store_d
5ac0: 69 72 65 63 74 6f 72 79 5f 74 65 73 74 3b 0a 20  irectory_test;. 
5ad0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
5ae0: 20 7b 32 7d 0a 20 20 20 20 20 20 64 6f 5f 74 65   {2}.      do_te
5af0: 73 74 20 70 72 61 67 6d 61 2d 39 2e 31 30 20 7b  st pragma-9.10 {
5b00: 0a 20 20 20 20 20 20 20 20 63 61 74 63 68 73 71  .        catchsq
5b10: 6c 20 22 0a 20 20 20 20 20 20 20 20 20 20 50 52  l ".          PR
5b20: 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 5f  AGMA temp_store_
5b30: 64 69 72 65 63 74 6f 72 79 3d 27 24 70 77 64 27  directory='$pwd'
5b40: 3b 0a 20 20 20 20 20 20 20 20 20 20 53 45 4c 45  ;.          SELE
5b50: 43 54 20 2a 20 46 52 4f 4d 20 74 65 6d 70 5f 73  CT * FROM temp_s
5b60: 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 5f 74  tore_directory_t
5b70: 65 73 74 3b 0a 20 20 20 20 20 20 20 20 22 0a 20  est;.        ". 
5b80: 20 20 20 20 20 7d 20 7b 31 20 7b 6e 6f 20 73 75       } {1 {no su
5b90: 63 68 20 74 61 62 6c 65 3a 20 74 65 6d 70 5f 73  ch table: temp_s
5ba0: 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 5f 74  tore_directory_t
5bb0: 65 73 74 7d 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a  est}}.    }.  }.
5bc0: 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  }.do_test pragma
5bd0: 2d 39 2e 31 31 20 7b 0a 20 20 65 78 65 63 73 71  -9.11 {.  execsq
5be0: 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 74  l {.    PRAGMA t
5bf0: 65 6d 70 5f 73 74 6f 72 65 20 3d 20 30 3b 0a 20  emp_store = 0;. 
5c00: 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73     PRAGMA temp_s
5c10: 74 6f 72 65 3b 0a 20 20 7d 0a 7d 20 7b 30 7d 0a  tore;.  }.} {0}.
5c20: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 39  do_test pragma-9
5c30: 2e 31 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  .12 {.  execsql 
5c40: 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d  {.    PRAGMA tem
5c50: 70 5f 73 74 6f 72 65 20 3d 20 31 3b 0a 20 20 20  p_store = 1;.   
5c60: 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f   PRAGMA temp_sto
5c70: 72 65 3b 0a 20 20 7d 0a 7d 20 7b 31 7d 0a 64 6f  re;.  }.} {1}.do
5c80: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 39 2e 31  _test pragma-9.1
5c90: 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  3 {.  execsql {.
5ca0: 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f      PRAGMA temp_
5cb0: 73 74 6f 72 65 20 3d 20 32 3b 0a 20 20 20 20 50  store = 2;.    P
5cc0: 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65  RAGMA temp_store
5cd0: 3b 0a 20 20 7d 0a 7d 20 7b 32 7d 0a 64 6f 5f 74  ;.  }.} {2}.do_t
5ce0: 65 73 74 20 70 72 61 67 6d 61 2d 39 2e 31 34 20  est pragma-9.14 
5cf0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
5d00: 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74    PRAGMA temp_st
5d10: 6f 72 65 20 3d 20 33 3b 0a 20 20 20 20 50 52 41  ore = 3;.    PRA
5d20: 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 3b 0a  GMA temp_store;.
5d30: 20 20 7d 0a 7d 20 7b 30 7d 0a 64 6f 5f 74 65 73    }.} {0}.do_tes
5d40: 74 20 70 72 61 67 6d 61 2d 39 2e 31 35 20 7b 0a  t pragma-9.15 {.
5d50: 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20    catchsql {.   
5d60: 20 42 45 47 49 4e 20 45 58 43 4c 55 53 49 56 45   BEGIN EXCLUSIVE
5d70: 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54 45 4d  ;.    CREATE TEM
5d80: 50 20 54 41 42 4c 45 20 74 65 6d 70 5f 74 61 62  P TABLE temp_tab
5d90: 6c 65 28 74 29 3b 0a 20 20 20 20 49 4e 53 45 52  le(t);.    INSER
5da0: 54 20 49 4e 54 4f 20 74 65 6d 70 5f 74 61 62 6c  T INTO temp_tabl
5db0: 65 20 56 41 4c 55 45 53 28 27 76 61 6c 75 61 62  e VALUES('valuab
5dc0: 6c 65 20 64 61 74 61 27 29 3b 0a 20 20 20 20 50  le data');.    P
5dd0: 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65  RAGMA temp_store
5de0: 20 3d 20 31 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b   = 1;.  }.} {1 {
5df0: 74 65 6d 70 6f 72 61 72 79 20 73 74 6f 72 61 67  temporary storag
5e00: 65 20 63 61 6e 6e 6f 74 20 62 65 20 63 68 61 6e  e cannot be chan
5e10: 67 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20  ged from within 
5e20: 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 7d 7d 0a  a transaction}}.
5e30: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 39  do_test pragma-9
5e40: 2e 31 36 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  .16 {.  execsql 
5e50: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  {.    SELECT * F
5e60: 52 4f 4d 20 74 65 6d 70 5f 74 61 62 6c 65 3b 0a  ROM temp_table;.
5e70: 20 20 20 20 43 4f 4d 4d 49 54 3b 0a 20 20 7d 0a      COMMIT;.  }.
5e80: 7d 20 7b 7b 76 61 6c 75 61 62 6c 65 20 64 61 74  } {{valuable dat
5e90: 61 7d 7d 0a 0a 64 6f 5f 74 65 73 74 20 70 72 61  a}}..do_test pra
5ea0: 67 6d 61 2d 39 2e 31 37 20 7b 0a 20 20 65 78 65  gma-9.17 {.  exe
5eb0: 63 73 71 6c 20 7b 0a 20 20 20 20 49 4e 53 45 52  csql {.    INSER
5ec0: 54 20 49 4e 54 4f 20 74 65 6d 70 5f 74 61 62 6c  T INTO temp_tabl
5ed0: 65 20 56 41 4c 55 45 53 28 27 76 61 6c 75 61 62  e VALUES('valuab
5ee0: 6c 65 20 64 61 74 61 20 49 49 27 29 3b 0a 20 20  le data II');.  
5ef0: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
5f00: 74 65 6d 70 5f 74 61 62 6c 65 3b 0a 20 20 7d 0a  temp_table;.  }.
5f10: 7d 20 7b 7b 76 61 6c 75 61 62 6c 65 20 64 61 74  } {{valuable dat
5f20: 61 7d 20 7b 76 61 6c 75 61 62 6c 65 20 64 61 74  a} {valuable dat
5f30: 61 20 49 49 7d 7d 0a 0a 64 6f 5f 74 65 73 74 20  a II}}..do_test 
5f40: 70 72 61 67 6d 61 2d 39 2e 31 38 20 7b 0a 20 20  pragma-9.18 {.  
5f50: 73 65 74 20 72 63 20 5b 63 61 74 63 68 20 7b 0a  set rc [catch {.
5f60: 20 20 20 20 64 62 20 65 76 61 6c 20 7b 53 45 4c      db eval {SEL
5f70: 45 43 54 20 74 20 46 52 4f 4d 20 74 65 6d 70 5f  ECT t FROM temp_
5f80: 74 61 62 6c 65 7d 20 7b 0a 20 20 20 20 20 20 65  table} {.      e
5f90: 78 65 63 73 71 6c 20 7b 70 72 61 67 6d 61 20 74  xecsql {pragma t
5fa0: 65 6d 70 5f 73 74 6f 72 65 20 3d 20 31 7d 0a 20  emp_store = 1}. 
5fb0: 20 20 20 7d 0a 20 20 7d 20 6d 73 67 5d 0a 20 20     }.  } msg].  
5fc0: 6c 69 73 74 20 24 72 63 20 24 6d 73 67 0a 7d 20  list $rc $msg.} 
5fd0: 7b 31 20 7b 74 65 6d 70 6f 72 61 72 79 20 73 74  {1 {temporary st
5fe0: 6f 72 61 67 65 20 63 61 6e 6e 6f 74 20 62 65 20  orage cannot be 
5ff0: 63 68 61 6e 67 65 64 20 66 72 6f 6d 20 77 69 74  changed from wit
6000: 68 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f  hin a transactio
6010: 6e 7d 7d 0a 0a 7d 20 3b 23 20 69 66 63 61 70 61  n}}..} ;# ifcapa
6020: 62 6c 65 20 70 61 67 65 72 5f 70 72 61 67 6d 61  ble pager_pragma
6030: 73 0a 0a 69 66 63 61 70 61 62 6c 65 20 74 72 69  s..ifcapable tri
6040: 67 67 65 72 20 7b 0a 0a 64 6f 5f 74 65 73 74 20  gger {..do_test 
6050: 70 72 61 67 6d 61 2d 31 30 2e 30 20 7b 0a 20 20  pragma-10.0 {.  
6060: 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 44  catchsql {.    D
6070: 52 4f 50 20 54 41 42 4c 45 20 6d 61 69 6e 2e 74  ROP TABLE main.t
6080: 31 3b 0a 20 20 7d 0a 20 20 65 78 65 63 73 71 6c  1;.  }.  execsql
6090: 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 63 6f   {.    PRAGMA co
60a0: 75 6e 74 5f 63 68 61 6e 67 65 73 20 3d 20 31 3b  unt_changes = 1;
60b0: 0a 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42  ..    CREATE TAB
60c0: 4c 45 20 74 31 28 61 20 50 52 49 4d 41 52 59 20  LE t1(a PRIMARY 
60d0: 4b 45 59 29 3b 0a 20 20 20 20 43 52 45 41 54 45  KEY);.    CREATE
60e0: 20 54 41 42 4c 45 20 74 31 5f 6d 69 72 72 6f 72   TABLE t1_mirror
60f0: 28 61 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20  (a);.    CREATE 
6100: 54 41 42 4c 45 20 74 31 5f 6d 69 72 72 6f 72 32  TABLE t1_mirror2
6110: 28 61 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20  (a);.    CREATE 
6120: 54 52 49 47 47 45 52 20 74 31 5f 62 69 20 42 45  TRIGGER t1_bi BE
6130: 46 4f 52 45 20 49 4e 53 45 52 54 20 4f 4e 20 74  FORE INSERT ON t
6140: 31 20 42 45 47 49 4e 20 0a 20 20 20 20 20 20 49  1 BEGIN .      I
6150: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 5f 6d 69  NSERT INTO t1_mi
6160: 72 72 6f 72 20 56 41 4c 55 45 53 28 6e 65 77 2e  rror VALUES(new.
6170: 61 29 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20 20  a);.    END;.   
6180: 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20   CREATE TRIGGER 
6190: 74 31 5f 61 69 20 41 46 54 45 52 20 49 4e 53 45  t1_ai AFTER INSE
61a0: 52 54 20 4f 4e 20 74 31 20 42 45 47 49 4e 20 0a  RT ON t1 BEGIN .
61b0: 20 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54        INSERT INT
61c0: 4f 20 74 31 5f 6d 69 72 72 6f 72 32 20 56 41 4c  O t1_mirror2 VAL
61d0: 55 45 53 28 6e 65 77 2e 61 29 3b 0a 20 20 20 20  UES(new.a);.    
61e0: 45 4e 44 3b 0a 20 20 20 20 43 52 45 41 54 45 20  END;.    CREATE 
61f0: 54 52 49 47 47 45 52 20 74 31 5f 62 75 20 42 45  TRIGGER t1_bu BE
6200: 46 4f 52 45 20 55 50 44 41 54 45 20 4f 4e 20 74  FORE UPDATE ON t
6210: 31 20 42 45 47 49 4e 20 0a 20 20 20 20 20 20 55  1 BEGIN .      U
6220: 50 44 41 54 45 20 74 31 5f 6d 69 72 72 6f 72 20  PDATE t1_mirror 
6230: 53 45 54 20 61 20 3d 20 6e 65 77 2e 61 20 57 48  SET a = new.a WH
6240: 45 52 45 20 61 20 3d 20 6f 6c 64 2e 61 3b 0a 20  ERE a = old.a;. 
6250: 20 20 20 45 4e 44 3b 0a 20 20 20 20 43 52 45 41     END;.    CREA
6260: 54 45 20 54 52 49 47 47 45 52 20 74 31 5f 61 75  TE TRIGGER t1_au
6270: 20 41 46 54 45 52 20 55 50 44 41 54 45 20 4f 4e   AFTER UPDATE ON
6280: 20 74 31 20 42 45 47 49 4e 20 0a 20 20 20 20 20   t1 BEGIN .     
6290: 20 55 50 44 41 54 45 20 74 31 5f 6d 69 72 72 6f   UPDATE t1_mirro
62a0: 72 32 20 53 45 54 20 61 20 3d 20 6e 65 77 2e 61  r2 SET a = new.a
62b0: 20 57 48 45 52 45 20 61 20 3d 20 6f 6c 64 2e 61   WHERE a = old.a
62c0: 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20 20 20 43  ;.    END;.    C
62d0: 52 45 41 54 45 20 54 52 49 47 47 45 52 20 74 31  REATE TRIGGER t1
62e0: 5f 62 64 20 42 45 46 4f 52 45 20 44 45 4c 45 54  _bd BEFORE DELET
62f0: 45 20 4f 4e 20 74 31 20 42 45 47 49 4e 20 0a 20  E ON t1 BEGIN . 
6300: 20 20 20 20 20 44 45 4c 45 54 45 20 46 52 4f 4d       DELETE FROM
6310: 20 74 31 5f 6d 69 72 72 6f 72 20 57 48 45 52 45   t1_mirror WHERE
6320: 20 61 20 3d 20 6f 6c 64 2e 61 3b 0a 20 20 20 20   a = old.a;.    
6330: 45 4e 44 3b 0a 20 20 20 20 43 52 45 41 54 45 20  END;.    CREATE 
6340: 54 52 49 47 47 45 52 20 74 31 5f 61 64 20 41 46  TRIGGER t1_ad AF
6350: 54 45 52 20 44 45 4c 45 54 45 20 4f 4e 20 74 31  TER DELETE ON t1
6360: 20 42 45 47 49 4e 20 0a 20 20 20 20 20 20 44 45   BEGIN .      DE
6370: 4c 45 54 45 20 46 52 4f 4d 20 74 31 5f 6d 69 72  LETE FROM t1_mir
6380: 72 6f 72 32 20 57 48 45 52 45 20 61 20 3d 20 6f  ror2 WHERE a = o
6390: 6c 64 2e 61 3b 0a 20 20 20 20 45 4e 44 3b 0a 20  ld.a;.    END;. 
63a0: 20 7d 0a 7d 20 7b 7d 0a 0a 64 6f 5f 74 65 73 74   }.} {}..do_test
63b0: 20 70 72 61 67 6d 61 2d 31 30 2e 31 20 7b 0a 20   pragma-10.1 {. 
63c0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 49   execsql {.    I
63d0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41  NSERT INTO t1 VA
63e0: 4c 55 45 53 28 72 61 6e 64 73 74 72 28 31 30 2c  LUES(randstr(10,
63f0: 31 30 29 29 3b 0a 20 20 7d 0a 7d 20 7b 31 7d 0a  10));.  }.} {1}.
6400: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31  do_test pragma-1
6410: 30 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  0.2 {.  execsql 
6420: 7b 0a 20 20 20 20 55 50 44 41 54 45 20 74 31 20  {.    UPDATE t1 
6430: 53 45 54 20 61 20 3d 20 72 61 6e 64 73 74 72 28  SET a = randstr(
6440: 31 30 2c 31 30 29 3b 0a 20 20 7d 0a 7d 20 7b 31  10,10);.  }.} {1
6450: 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  }.do_test pragma
6460: 2d 31 30 2e 33 20 7b 0a 20 20 65 78 65 63 73 71  -10.3 {.  execsq
6470: 6c 20 7b 0a 20 20 20 20 44 45 4c 45 54 45 20 46  l {.    DELETE F
6480: 52 4f 4d 20 74 31 3b 0a 20 20 7d 0a 7d 20 7b 31  ROM t1;.  }.} {1
6490: 7d 0a 0a 7d 20 3b 23 20 69 66 63 61 70 61 62 6c  }..} ;# ifcapabl
64a0: 65 20 74 72 69 67 67 65 72 0a 0a 69 66 63 61 70  e trigger..ifcap
64b0: 61 62 6c 65 20 73 63 68 65 6d 61 5f 70 72 61 67  able schema_prag
64c0: 6d 61 73 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20  mas {.  do_test 
64d0: 70 72 61 67 6d 61 2d 31 31 2e 31 20 7b 0a 20 20  pragma-11.1 {.  
64e0: 20 20 65 78 65 63 73 71 6c 32 20 7b 0a 20 20 20    execsql2 {.   
64f0: 20 20 20 70 72 61 67 6d 61 20 63 6f 6c 6c 61 74     pragma collat
6500: 69 6f 6e 5f 6c 69 73 74 3b 0a 20 20 20 20 7d 0a  ion_list;.    }.
6510: 20 20 7d 20 7b 73 65 71 20 30 20 6e 61 6d 65 20    } {seq 0 name 
6520: 4e 4f 43 41 53 45 20 73 65 71 20 31 20 6e 61 6d  NOCASE seq 1 nam
6530: 65 20 52 54 52 49 4d 20 73 65 71 20 32 20 6e 61  e RTRIM seq 2 na
6540: 6d 65 20 42 49 4e 41 52 59 7d 0a 20 20 64 6f 5f  me BINARY}.  do_
6550: 74 65 73 74 20 70 72 61 67 6d 61 2d 31 31 2e 32  test pragma-11.2
6560: 20 7b 0a 20 20 20 20 64 62 20 63 6f 6c 6c 61 74   {.    db collat
6570: 65 20 4e 65 77 5f 43 6f 6c 6c 61 74 69 6f 6e 20  e New_Collation 
6580: 62 6c 61 68 2e 2e 2e 0a 20 20 20 20 65 78 65 63  blah....    exec
6590: 73 71 6c 20 7b 0a 20 20 20 20 20 20 70 72 61 67  sql {.      prag
65a0: 6d 61 20 63 6f 6c 6c 61 74 69 6f 6e 5f 6c 69 73  ma collation_lis
65b0: 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 30 20  t;.    }.  } {0 
65c0: 4e 65 77 5f 43 6f 6c 6c 61 74 69 6f 6e 20 31 20  New_Collation 1 
65d0: 4e 4f 43 41 53 45 20 32 20 52 54 52 49 4d 20 33  NOCASE 2 RTRIM 3
65e0: 20 42 49 4e 41 52 59 7d 0a 7d 0a 0a 69 66 63 61   BINARY}.}..ifca
65f0: 70 61 62 6c 65 20 73 63 68 65 6d 61 5f 70 72 61  pable schema_pra
6600: 67 6d 61 73 26 26 74 65 6d 70 64 62 20 7b 0a 20  gmas&&tempdb {. 
6610: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
6620: 31 32 2e 31 20 7b 0a 20 20 20 20 73 71 6c 69 74  12.1 {.    sqlit
6630: 65 33 20 64 62 32 20 74 65 73 74 2e 64 62 0a 20  e3 db2 test.db. 
6640: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
6650: 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 2e 74     PRAGMA temp.t
6660: 61 62 6c 65 5f 69 6e 66 6f 28 27 61 62 63 27 29  able_info('abc')
6670: 3b 0a 20 20 20 20 7d 20 64 62 32 0a 20 20 7d 20  ;.    } db2.  } 
6680: 7b 7d 0a 20 20 64 62 32 20 63 6c 6f 73 65 0a 0a  {}.  db2 close..
6690: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
66a0: 2d 31 32 2e 32 20 7b 0a 20 20 20 20 73 71 6c 69  -12.2 {.    sqli
66b0: 74 65 33 20 64 62 32 20 74 65 73 74 2e 64 62 0a  te3 db2 test.db.
66c0: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20      execsql {.  
66d0: 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 2e      PRAGMA temp.
66e0: 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69  default_cache_si
66f0: 7a 65 20 3d 20 32 30 30 3b 0a 20 20 20 20 20 20  ze = 200;.      
6700: 50 52 41 47 4d 41 20 74 65 6d 70 2e 64 65 66 61  PRAGMA temp.defa
6710: 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65 3b 0a  ult_cache_size;.
6720: 20 20 20 20 7d 20 64 62 32 0a 20 20 7d 20 7b 32      } db2.  } {2
6730: 30 30 7d 0a 20 20 64 62 32 20 63 6c 6f 73 65 0a  00}.  db2 close.
6740: 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .  do_test pragm
6750: 61 2d 31 32 2e 33 20 7b 0a 20 20 20 20 73 71 6c  a-12.3 {.    sql
6760: 69 74 65 33 20 64 62 32 20 74 65 73 74 2e 64 62  ite3 db2 test.db
6770: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
6780: 20 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70       PRAGMA temp
6790: 2e 63 61 63 68 65 5f 73 69 7a 65 20 3d 20 34 30  .cache_size = 40
67a0: 30 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20  0;.      PRAGMA 
67b0: 74 65 6d 70 2e 63 61 63 68 65 5f 73 69 7a 65 3b  temp.cache_size;
67c0: 0a 20 20 20 20 7d 20 64 62 32 0a 20 20 7d 20 7b  .    } db2.  } {
67d0: 34 30 30 7d 0a 20 20 64 62 32 20 63 6c 6f 73 65  400}.  db2 close
67e0: 0a 7d 0a 0a 69 66 63 61 70 61 62 6c 65 20 62 6c  .}..ifcapable bl
67f0: 6f 62 6c 69 74 20 7b 0a 0a 64 6f 5f 74 65 73 74  oblit {..do_test
6800: 20 70 72 61 67 6d 61 2d 31 33 2e 31 20 7b 0a 20   pragma-13.1 {. 
6810: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 44   execsql {.    D
6820: 52 4f 50 20 54 41 42 4c 45 20 49 46 20 45 58 49  ROP TABLE IF EXI
6830: 53 54 53 20 74 34 3b 0a 20 20 20 20 50 52 41 47  STS t4;.    PRAG
6840: 4d 41 20 76 64 62 65 5f 74 72 61 63 65 3d 6f 6e  MA vdbe_trace=on
6850: 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 76 64 62  ;.    PRAGMA vdb
6860: 65 5f 6c 69 73 74 69 6e 67 3d 6f 6e 3b 0a 20 20  e_listing=on;.  
6870: 20 20 50 52 41 47 4d 41 20 73 71 6c 5f 74 72 61    PRAGMA sql_tra
6880: 63 65 3d 6f 6e 3b 0a 20 20 20 20 43 52 45 41 54  ce=on;.    CREAT
6890: 45 20 54 41 42 4c 45 20 74 34 28 61 20 49 4e 54  E TABLE t4(a INT
68a0: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
68b0: 2c 62 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20  ,b);.    INSERT 
68c0: 49 4e 54 4f 20 74 34 28 62 29 20 56 41 4c 55 45  INTO t4(b) VALUE
68d0: 53 28 78 27 30 31 32 33 34 35 36 37 38 39 61 62  S(x'0123456789ab
68e0: 63 64 65 66 30 31 32 33 34 35 36 37 38 39 61 62  cdef0123456789ab
68f0: 63 64 65 66 30 31 32 33 34 35 36 37 38 39 27 29  cdef0123456789')
6900: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
6910: 4f 20 74 34 28 62 29 20 56 41 4c 55 45 53 28 72  O t4(b) VALUES(r
6920: 61 6e 64 73 74 72 28 33 30 2c 33 30 29 29 3b 0a  andstr(30,30));.
6930: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
6940: 74 34 28 62 29 20 56 41 4c 55 45 53 28 31 2e 32  t4(b) VALUES(1.2
6950: 33 34 35 36 29 3b 0a 20 20 20 20 49 4e 53 45 52  3456);.    INSER
6960: 54 20 49 4e 54 4f 20 74 34 28 62 29 20 56 41 4c  T INTO t4(b) VAL
6970: 55 45 53 28 4e 55 4c 4c 29 3b 0a 20 20 20 20 49  UES(NULL);.    I
6980: 4e 53 45 52 54 20 49 4e 54 4f 20 74 34 28 62 29  NSERT INTO t4(b)
6990: 20 56 41 4c 55 45 53 28 30 29 3b 0a 20 20 20 20   VALUES(0);.    
69a0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 34 28 62  INSERT INTO t4(b
69b0: 29 20 53 45 4c 45 43 54 20 62 7c 7c 62 7c 7c 62  ) SELECT b||b||b
69c0: 7c 7c 62 20 46 52 4f 4d 20 74 34 3b 0a 20 20 20  ||b FROM t4;.   
69d0: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
69e0: 34 3b 0a 20 20 7d 0a 20 20 65 78 65 63 73 71 6c  4;.  }.  execsql
69f0: 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 76 64   {.    PRAGMA vd
6a00: 62 65 5f 74 72 61 63 65 3d 6f 66 66 3b 0a 20 20  be_trace=off;.  
6a10: 20 20 50 52 41 47 4d 41 20 76 64 62 65 5f 6c 69    PRAGMA vdbe_li
6a20: 73 74 69 6e 67 3d 6f 66 66 3b 0a 20 20 20 20 50  sting=off;.    P
6a30: 52 41 47 4d 41 20 73 71 6c 5f 74 72 61 63 65 3d  RAGMA sql_trace=
6a40: 6f 66 66 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a 7d  off;.  }.} {}..}
6a50: 20 3b 23 20 69 66 63 61 70 61 62 6c 65 20 62 6c   ;# ifcapable bl
6a60: 6f 62 6c 69 74 20 0a 0a 69 66 63 61 70 61 62 6c  oblit ..ifcapabl
6a70: 65 20 70 61 67 65 72 5f 70 72 61 67 6d 61 73 20  e pager_pragmas 
6a80: 7b 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 66  {.  db close.  f
6a90: 69 6c 65 20 64 65 6c 65 74 65 20 2d 66 6f 72 63  ile delete -forc
6aa0: 65 20 74 65 73 74 2e 64 62 0a 20 20 73 71 6c 69  e test.db.  sqli
6ab0: 74 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a 0a  te3 db test.db..
6ac0: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
6ad0: 2d 31 34 2e 31 20 7b 0a 20 20 20 20 65 78 65 63  -14.1 {.    exec
6ae0: 73 71 6c 20 7b 20 70 72 61 67 6d 61 20 61 75 74  sql { pragma aut
6af0: 6f 5f 76 61 63 75 75 6d 20 3d 20 30 20 7d 0a 20  o_vacuum = 0 }. 
6b00: 20 20 20 65 78 65 63 73 71 6c 20 7b 20 70 72 61     execsql { pra
6b10: 67 6d 61 20 70 61 67 65 5f 63 6f 75 6e 74 20 7d  gma page_count }
6b20: 0a 20 20 7d 20 7b 30 7d 0a 0a 20 20 64 6f 5f 74  .  } {0}..  do_t
6b30: 65 73 74 20 70 72 61 67 6d 61 2d 31 34 2e 32 20  est pragma-14.2 
6b40: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 20  {.    execsql { 
6b50: 0a 20 20 20 20 20 20 43 52 45 41 54 45 20 54 41  .      CREATE TA
6b60: 42 4c 45 20 61 62 63 28 61 2c 20 62 2c 20 63 29  BLE abc(a, b, c)
6b70: 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 70  ;.      PRAGMA p
6b80: 61 67 65 5f 63 6f 75 6e 74 3b 0a 20 20 20 20 7d  age_count;.    }
6b90: 0a 20 20 7d 20 7b 32 7d 0a 0a 20 20 64 6f 5f 74  .  } {2}..  do_t
6ba0: 65 73 74 20 70 72 61 67 6d 61 2d 31 34 2e 33 20  est pragma-14.3 
6bb0: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 20  {.    execsql { 
6bc0: 0a 20 20 20 20 20 20 42 45 47 49 4e 3b 0a 20 20  .      BEGIN;.  
6bd0: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
6be0: 20 64 65 66 28 61 2c 20 62 2c 20 63 29 3b 0a 20   def(a, b, c);. 
6bf0: 20 20 20 20 20 50 52 41 47 4d 41 20 70 61 67 65       PRAGMA page
6c00: 5f 63 6f 75 6e 74 3b 0a 20 20 20 20 7d 0a 20 20  _count;.    }.  
6c10: 7d 20 7b 33 7d 0a 0a 20 20 64 6f 5f 74 65 73 74  } {3}..  do_test
6c20: 20 70 72 61 67 6d 61 2d 31 34 2e 34 20 7b 0a 20   pragma-14.4 {. 
6c30: 20 20 20 73 65 74 20 70 61 67 65 5f 73 69 7a 65     set page_size
6c40: 20 5b 64 62 20 6f 6e 65 20 7b 70 72 61 67 6d 61   [db one {pragma
6c50: 20 70 61 67 65 5f 73 69 7a 65 7d 5d 0a 20 20 20   page_size}].   
6c60: 20 65 78 70 72 20 5b 66 69 6c 65 20 73 69 7a 65   expr [file size
6c70: 20 74 65 73 74 2e 64 62 5d 20 2f 20 24 70 61 67   test.db] / $pag
6c80: 65 5f 73 69 7a 65 0a 20 20 7d 20 7b 32 7d 0a 0a  e_size.  } {2}..
6c90: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
6ca0: 2d 31 34 2e 35 20 7b 0a 20 20 20 20 65 78 65 63  -14.5 {.    exec
6cb0: 73 71 6c 20 7b 0a 20 20 20 20 20 20 52 4f 4c 4c  sql {.      ROLL
6cc0: 42 41 43 4b 3b 0a 20 20 20 20 20 20 50 52 41 47  BACK;.      PRAG
6cd0: 4d 41 20 70 61 67 65 5f 63 6f 75 6e 74 3b 0a 20  MA page_count;. 
6ce0: 20 20 20 7d 0a 20 20 7d 20 7b 32 7d 0a 0a 20 20     }.  } {2}..  
6cf0: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31  do_test pragma-1
6d00: 34 2e 36 20 7b 0a 20 20 20 20 66 69 6c 65 20 64  4.6 {.    file d
6d10: 65 6c 65 74 65 20 2d 66 6f 72 63 65 20 74 65 73  elete -force tes
6d20: 74 32 2e 64 62 0a 20 20 20 20 73 71 6c 69 74 65  t2.db.    sqlite
6d30: 33 20 64 62 32 20 74 65 73 74 32 2e 64 62 0a 20  3 db2 test2.db. 
6d40: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
6d50: 20 20 20 50 52 41 47 4d 41 20 61 75 74 6f 5f 76     PRAGMA auto_v
6d60: 61 63 75 75 6d 20 3d 20 30 3b 0a 20 20 20 20 20  acuum = 0;.     
6d70: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31   CREATE TABLE t1
6d80: 28 61 2c 20 62 2c 20 63 29 3b 0a 20 20 20 20 20  (a, b, c);.     
6d90: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 32   CREATE TABLE t2
6da0: 28 61 2c 20 62 2c 20 63 29 3b 0a 20 20 20 20 20  (a, b, c);.     
6db0: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 33   CREATE TABLE t3
6dc0: 28 61 2c 20 62 2c 20 63 29 3b 0a 20 20 20 20 20  (a, b, c);.     
6dd0: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 34   CREATE TABLE t4
6de0: 28 61 2c 20 62 2c 20 63 29 3b 0a 20 20 20 20 7d  (a, b, c);.    }
6df0: 20 64 62 32 0a 20 20 20 20 64 62 32 20 63 6c 6f   db2.    db2 clo
6e00: 73 65 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b  se.    execsql {
6e10: 0a 20 20 20 20 20 20 41 54 54 41 43 48 20 27 74  .      ATTACH 't
6e20: 65 73 74 32 2e 64 62 27 20 41 53 20 61 75 78 3b  est2.db' AS aux;
6e30: 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 61 75  .      PRAGMA au
6e40: 78 2e 70 61 67 65 5f 63 6f 75 6e 74 3b 0a 20 20  x.page_count;.  
6e50: 20 20 7d 20 0a 20 20 7d 20 7b 35 7d 0a 7d 0a 0a    } .  } {5}.}..
6e60: 23 20 54 65 73 74 20 74 68 61 74 20 74 68 65 20  # Test that the 
6e70: 76 61 6c 75 65 20 73 65 74 20 75 73 69 6e 67 20  value set using 
6e80: 74 68 65 20 63 61 63 68 65 5f 73 69 7a 65 20 70  the cache_size p
6e90: 72 61 67 6d 61 20 69 73 20 6e 6f 74 20 72 65 73  ragma is not res
6ea0: 65 74 20 77 68 65 6e 20 74 68 65 0a 23 20 73 63  et when the.# sc
6eb0: 68 65 6d 61 20 69 73 20 72 65 6c 6f 61 64 65 64  hema is reloaded
6ec0: 2e 0a 23 0a 69 66 63 61 70 61 62 6c 65 20 70 61  ..#.ifcapable pa
6ed0: 67 65 72 5f 70 72 61 67 6d 61 73 20 7b 0a 20 20  ger_pragmas {.  
6ee0: 64 62 20 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74  db close.  sqlit
6ef0: 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20  e3 db test.db.  
6f00: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31  do_test pragma-1
6f10: 35 2e 31 20 7b 0a 20 20 20 20 65 78 65 63 73 71  5.1 {.    execsq
6f20: 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41  l {.      PRAGMA
6f30: 20 63 61 63 68 65 5f 73 69 7a 65 3d 35 39 3b 0a   cache_size=59;.
6f40: 20 20 20 20 20 20 50 52 41 47 4d 41 20 63 61 63        PRAGMA cac
6f50: 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 7d 0a 20  he_size;.    }. 
6f60: 20 7d 20 7b 35 39 7d 0a 20 20 64 6f 5f 74 65 73   } {59}.  do_tes
6f70: 74 20 70 72 61 67 6d 61 2d 31 35 2e 32 20 7b 0a  t pragma-15.2 {.
6f80: 20 20 20 20 73 71 6c 69 74 65 33 20 64 62 32 20      sqlite3 db2 
6f90: 74 65 73 74 2e 64 62 0a 20 20 20 20 65 78 65 63  test.db.    exec
6fa0: 73 71 6c 20 7b 0a 20 20 20 20 20 20 43 52 45 41  sql {.      CREA
6fb0: 54 45 20 54 41 42 4c 45 20 6e 65 77 74 61 62 6c  TE TABLE newtabl
6fc0: 65 28 61 2c 20 62 2c 20 63 29 3b 0a 20 20 20 20  e(a, b, c);.    
6fd0: 7d 20 64 62 32 0a 20 20 20 20 64 62 32 20 63 6c  } db2.    db2 cl
6fe0: 6f 73 65 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f  ose.  } {}.  do_
6ff0: 74 65 73 74 20 70 72 61 67 6d 61 2d 31 35 2e 33  test pragma-15.3
7000: 20 7b 0a 20 20 20 20 23 20 45 76 61 6c 75 61 74   {.    # Evaluat
7010: 69 6e 67 20 74 68 69 73 20 73 74 61 74 65 6d 65  ing this stateme
7020: 6e 74 20 77 69 6c 6c 20 63 61 75 73 65 20 74 68  nt will cause th
7030: 65 20 73 63 68 65 6d 61 20 74 6f 20 62 65 20 72  e schema to be r
7040: 65 6c 6f 61 64 65 64 20 28 62 65 63 61 75 73 65  eloaded (because
7050: 0a 20 20 20 20 23 20 74 68 65 20 73 63 68 65 6d  .    # the schem
7060: 61 20 77 61 73 20 63 68 61 6e 67 65 64 20 62 79  a was changed by
7070: 20 61 6e 6f 74 68 65 72 20 63 6f 6e 6e 65 63 74   another connect
7080: 69 6f 6e 20 69 6e 20 70 72 61 67 6d 61 2d 31 35  ion in pragma-15
7090: 2e 32 29 2e 20 41 74 20 6f 6e 65 0a 20 20 20 20  .2). At one.    
70a0: 23 20 70 6f 69 6e 74 20 74 68 65 72 65 20 77 61  # point there wa
70b0: 73 20 61 20 62 75 67 20 74 68 61 74 20 72 65 73  s a bug that res
70c0: 65 74 20 74 68 65 20 63 61 63 68 65 5f 73 69 7a  et the cache_siz
70d0: 65 20 74 6f 20 69 74 73 20 64 65 66 61 75 6c 74  e to its default
70e0: 20 76 61 6c 75 65 0a 20 20 20 20 23 20 77 68 65   value.    # whe
70f0: 6e 20 74 68 69 73 20 68 61 70 70 65 6e 65 64 2e  n this happened.
7100: 20 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 20   .    execsql { 
7110: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 73 71  SELECT * FROM sq
7120: 6c 69 74 65 5f 6d 61 73 74 65 72 20 7d 0a 20 20  lite_master }.  
7130: 20 20 65 78 65 63 73 71 6c 20 7b 20 50 52 41 47    execsql { PRAG
7140: 4d 41 20 63 61 63 68 65 5f 73 69 7a 65 20 7d 0a  MA cache_size }.
7150: 20 20 7d 20 7b 35 39 7d 0a 7d 0a 0a 23 20 52 65    } {59}.}..# Re
7160: 73 65 74 20 74 68 65 20 73 71 6c 69 74 65 33 5f  set the sqlite3_
7170: 74 65 6d 70 5f 64 69 72 65 63 74 6f 72 79 20 76  temp_directory v
7180: 61 72 69 61 62 6c 65 20 66 6f 72 20 74 68 65 20  ariable for the 
7190: 6e 65 78 74 20 72 75 6e 20 6f 66 20 74 65 73 74  next run of test
71a0: 73 3a 0a 73 71 6c 69 74 65 33 20 64 62 58 20 3a  s:.sqlite3 dbX :
71b0: 6d 65 6d 6f 72 79 3a 0a 64 62 58 20 65 76 61 6c  memory:.dbX eval
71c0: 20 7b 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74   {PRAGMA temp_st
71d0: 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 20 3d 20  ore_directory = 
71e0: 22 22 7d 0a 64 62 58 20 63 6c 6f 73 65 0a 0a 66  ""}.dbX close..f
71f0: 69 6e 69 73 68 5f 74 65 73 74 0a                 inish_test.