/ Hex Artifact Content
Login

Artifact ffcad56b3058c8661a4cf54205ce44894f7263e2:


0000: 23 20 32 30 30 32 20 4d 61 72 63 68 20 36 0a 23  # 2002 March 6.#
0010: 0a 23 20 54 68 65 20 61 75 74 68 6f 72 20 64 69  .# The author di
0020: 73 63 6c 61 69 6d 73 20 63 6f 70 79 72 69 67 68  sclaims copyrigh
0030: 74 20 74 6f 20 74 68 69 73 20 73 6f 75 72 63 65  t to this source
0040: 20 63 6f 64 65 2e 20 20 49 6e 20 70 6c 61 63 65   code.  In place
0050: 20 6f 66 0a 23 20 61 20 6c 65 67 61 6c 20 6e 6f   of.# a legal no
0060: 74 69 63 65 2c 20 68 65 72 65 20 69 73 20 61 20  tice, here is a 
0070: 62 6c 65 73 73 69 6e 67 3a 0a 23 0a 23 20 20 20  blessing:.#.#   
0080: 20 4d 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64   May you do good
0090: 20 61 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 23   and not evil..#
00a0: 20 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64      May you find
00b0: 20 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72   forgiveness for
00c0: 20 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f   yourself and fo
00d0: 72 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 23 20  rgive others..# 
00e0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
00f0: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0100: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0110: 79 6f 75 20 67 69 76 65 2e 0a 23 0a 23 2a 2a 2a  you give..#.#***
0120: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 0a 23 20 54 68 69 73 20 66 69 6c 65  ****.# This file
0170: 20 69 6d 70 6c 65 6d 65 6e 74 73 20 72 65 67 72   implements regr
0180: 65 73 73 69 6f 6e 20 74 65 73 74 73 20 66 6f 72  ession tests for
0190: 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79 2e   SQLite library.
01a0: 0a 23 0a 23 20 54 68 69 73 20 66 69 6c 65 20 69  .#.# This file i
01b0: 6d 70 6c 65 6d 65 6e 74 73 20 74 65 73 74 73 20  mplements tests 
01c0: 66 6f 72 20 74 68 65 20 50 52 41 47 4d 41 20 63  for the PRAGMA c
01d0: 6f 6d 6d 61 6e 64 2e 0a 23 0a 23 20 24 49 64 3a  ommand..#.# $Id:
01e0: 20 70 72 61 67 6d 61 2e 74 65 73 74 2c 76 20 31   pragma.test,v 1
01f0: 2e 37 33 20 32 30 30 39 2f 30 31 2f 31 32 20 31  .73 2009/01/12 1
0200: 34 3a 30 31 3a 34 35 20 64 61 6e 69 65 6c 6b 31  4:01:45 danielk1
0210: 39 37 37 20 45 78 70 20 24 0a 0a 73 65 74 20 74  977 Exp $..set t
0220: 65 73 74 64 69 72 20 5b 66 69 6c 65 20 64 69 72  estdir [file dir
0230: 6e 61 6d 65 20 24 61 72 67 76 30 5d 0a 73 6f 75  name $argv0].sou
0240: 72 63 65 20 24 74 65 73 74 64 69 72 2f 74 65 73  rce $testdir/tes
0250: 74 65 72 2e 74 63 6c 0a 73 65 74 20 74 65 73 74  ter.tcl.set test
0260: 70 72 65 66 69 78 20 70 72 61 67 6d 61 0a 0a 23  prefix pragma..#
0270: 20 44 6f 20 6e 6f 74 20 75 73 65 20 61 20 63 6f   Do not use a co
0280: 64 65 63 20 66 6f 72 20 74 65 73 74 73 20 69 6e  dec for tests in
0290: 20 74 68 69 73 20 66 69 6c 65 2c 20 61 73 20 74   this file, as t
02a0: 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
02b0: 20 69 73 0a 23 20 6d 61 6e 69 70 75 6c 61 74 65   is.# manipulate
02c0: 64 20 64 69 72 65 63 74 6c 79 20 75 73 69 6e 67  d directly using
02d0: 20 74 63 6c 20 73 63 72 69 70 74 73 20 28 75 73   tcl scripts (us
02e0: 69 6e 67 20 74 68 65 20 5b 68 65 78 69 6f 5f 77  ing the [hexio_w
02f0: 72 69 74 65 5d 20 63 6f 6d 6d 61 6e 64 29 2e 0a  rite] command)..
0300: 23 0a 64 6f 5f 6e 6f 74 5f 75 73 65 5f 63 6f 64  #.do_not_use_cod
0310: 65 63 0a 0a 23 20 54 65 73 74 20 6f 72 67 61 6e  ec..# Test organ
0320: 69 7a 61 74 69 6f 6e 3a 0a 23 0a 23 20 70 72 61  ization:.#.# pra
0330: 67 6d 61 2d 31 2e 2a 3a 20 54 65 73 74 20 63 61  gma-1.*: Test ca
0340: 63 68 65 5f 73 69 7a 65 2c 20 64 65 66 61 75 6c  che_size, defaul
0350: 74 5f 63 61 63 68 65 5f 73 69 7a 65 20 61 6e 64  t_cache_size and
0360: 20 73 79 6e 63 68 72 6f 6e 6f 75 73 20 6f 6e 20   synchronous on 
0370: 6d 61 69 6e 20 64 62 2e 0a 23 20 70 72 61 67 6d  main db..# pragm
0380: 61 2d 32 2e 2a 3a 20 54 65 73 74 20 73 79 6e 63  a-2.*: Test sync
0390: 68 72 6f 6e 6f 75 73 20 6f 6e 20 61 74 74 61 63  hronous on attac
03a0: 68 65 64 20 64 62 2e 0a 23 20 70 72 61 67 6d 61  hed db..# pragma
03b0: 2d 33 2e 2a 3a 20 54 65 73 74 20 64 65 74 65 63  -3.*: Test detec
03c0: 74 69 6f 6e 20 6f 66 20 74 61 62 6c 65 2f 69 6e  tion of table/in
03d0: 64 65 78 20 69 6e 63 6f 6e 73 69 73 74 65 6e 63  dex inconsistenc
03e0: 79 20 62 79 20 69 6e 74 65 67 72 69 74 79 5f 63  y by integrity_c
03f0: 68 65 63 6b 2e 0a 23 20 70 72 61 67 6d 61 2d 34  heck..# pragma-4
0400: 2e 2a 3a 20 54 65 73 74 20 63 61 63 68 65 5f 73  .*: Test cache_s
0410: 69 7a 65 20 61 6e 64 20 64 65 66 61 75 6c 74 5f  ize and default_
0420: 63 61 63 68 65 5f 73 69 7a 65 20 6f 6e 20 61 74  cache_size on at
0430: 74 61 63 68 65 64 20 64 62 2e 0a 23 20 70 72 61  tached db..# pra
0440: 67 6d 61 2d 35 2e 2a 3a 20 54 65 73 74 20 74 68  gma-5.*: Test th
0450: 61 74 20 70 72 61 67 6d 61 20 73 79 6e 63 68 72  at pragma synchr
0460: 6f 6e 6f 75 73 20 6d 61 79 20 6e 6f 74 20 62 65  onous may not be
0470: 20 75 73 65 64 20 69 6e 73 69 64 65 20 6f 66 20   used inside of 
0480: 61 0a 23 20 20 20 20 20 20 20 20 20 20 20 20 20  a.#             
0490: 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 23 20 70  transaction..# p
04a0: 72 61 67 6d 61 2d 36 2e 2a 3a 20 54 65 73 74 20  ragma-6.*: Test 
04b0: 73 63 68 65 6d 61 2d 71 75 65 72 79 20 70 72 61  schema-query pra
04c0: 67 6d 61 73 2e 0a 23 20 70 72 61 67 6d 61 2d 37  gmas..# pragma-7
04d0: 2e 2a 3a 20 4d 69 73 63 65 6c 6c 61 6e 65 6f 75  .*: Miscellaneou
04e0: 73 20 74 65 73 74 73 2e 0a 23 20 70 72 61 67 6d  s tests..# pragm
04f0: 61 2d 38 2e 2a 3a 20 54 65 73 74 20 75 73 65 72  a-8.*: Test user
0500: 5f 76 65 72 73 69 6f 6e 20 61 6e 64 20 73 63 68  _version and sch
0510: 65 6d 61 5f 76 65 72 73 69 6f 6e 20 70 72 61 67  ema_version prag
0520: 6d 61 73 2e 0a 23 20 70 72 61 67 6d 61 2d 39 2e  mas..# pragma-9.
0530: 2a 3a 20 54 65 73 74 20 74 65 6d 70 5f 73 74 6f  *: Test temp_sto
0540: 72 65 20 61 6e 64 20 74 65 6d 70 5f 73 74 6f 72  re and temp_stor
0550: 65 5f 64 69 72 65 63 74 6f 72 79 2e 0a 23 20 70  e_directory..# p
0560: 72 61 67 6d 61 2d 31 30 2e 2a 3a 20 54 65 73 74  ragma-10.*: Test
0570: 20 74 68 65 20 63 6f 75 6e 74 5f 63 68 61 6e 67   the count_chang
0580: 65 73 20 70 72 61 67 6d 61 20 69 6e 20 74 68 65  es pragma in the
0590: 20 70 72 65 73 65 6e 63 65 20 6f 66 20 74 72 69   presence of tri
05a0: 67 67 65 72 73 2e 0a 23 20 70 72 61 67 6d 61 2d  ggers..# pragma-
05b0: 31 31 2e 2a 3a 20 54 65 73 74 20 74 68 65 20 63  11.*: Test the c
05c0: 6f 6c 6c 61 74 69 6f 6e 5f 6c 69 73 74 20 70 72  ollation_list pr
05d0: 61 67 6d 61 2e 0a 23 20 70 72 61 67 6d 61 2d 31  agma..# pragma-1
05e0: 34 2e 2a 3a 20 54 65 73 74 20 74 68 65 20 70 61  4.*: Test the pa
05f0: 67 65 5f 63 6f 75 6e 74 20 70 72 61 67 6d 61 2e  ge_count pragma.
0600: 0a 23 20 70 72 61 67 6d 61 2d 31 35 2e 2a 3a 20  .# pragma-15.*: 
0610: 54 65 73 74 20 74 68 61 74 20 74 68 65 20 76 61  Test that the va
0620: 6c 75 65 20 73 65 74 20 75 73 69 6e 67 20 74 68  lue set using th
0630: 65 20 63 61 63 68 65 5f 73 69 7a 65 20 70 72 61  e cache_size pra
0640: 67 6d 61 20 69 73 20 6e 6f 74 0a 23 20 20 20 20  gma is not.#    
0650: 20 20 20 20 20 20 20 20 20 20 72 65 73 65 74 20            reset 
0660: 77 68 65 6e 20 74 68 65 20 73 63 68 65 6d 61 20  when the schema 
0670: 69 73 20 72 65 6c 6f 61 64 65 64 2e 0a 23 20 70  is reloaded..# p
0680: 72 61 67 6d 61 2d 31 36 2e 2a 3a 20 54 65 73 74  ragma-16.*: Test
0690: 20 70 72 6f 78 79 20 6c 6f 63 6b 69 6e 67 0a 23   proxy locking.#
06a0: 20 70 72 61 67 6d 61 2d 32 30 2e 2a 3a 20 54 65   pragma-20.*: Te
06b0: 73 74 20 64 61 74 61 5f 73 74 6f 72 65 5f 64 69  st data_store_di
06c0: 72 65 63 74 6f 72 79 2e 0a 23 20 70 72 61 67 6d  rectory..# pragm
06d0: 61 2d 32 32 2e 2a 3a 20 54 65 73 74 20 74 68 61  a-22.*: Test tha
06e0: 74 20 22 50 52 41 47 4d 41 20 5b 64 62 5d 2e 69  t "PRAGMA [db].i
06f0: 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 22 20  ntegrity_check" 
0700: 72 65 73 70 65 63 74 73 20 74 68 65 20 22 64 62  respects the "db
0710: 22 0a 23 20 20 20 20 20 20 20 20 20 20 20 20 20  ".#             
0720: 20 64 69 72 65 63 74 69 76 65 20 2d 20 69 66 20   directive - if 
0730: 69 74 20 69 73 20 70 72 65 73 65 6e 74 2e 0a 23  it is present..#
0740: 0a 0a 69 66 63 61 70 61 62 6c 65 20 21 70 72 61  ..ifcapable !pra
0750: 67 6d 61 20 7b 0a 20 20 66 69 6e 69 73 68 5f 74  gma {.  finish_t
0760: 65 73 74 0a 20 20 72 65 74 75 72 6e 0a 7d 0a 0a  est.  return.}..
0770: 23 20 44 65 6c 65 74 65 20 74 68 65 20 70 72 65  # Delete the pre
0780: 65 78 69 73 74 69 6e 67 20 64 61 74 61 62 61 73  existing databas
0790: 65 20 74 6f 20 61 76 6f 69 64 20 74 68 65 20 73  e to avoid the s
07a0: 70 65 63 69 61 6c 20 73 65 74 75 70 0a 23 20 74  pecial setup.# t
07b0: 68 61 74 20 74 68 65 20 22 61 6c 6c 2e 74 65 73  hat the "all.tes
07c0: 74 22 20 73 63 72 69 70 74 20 64 6f 65 73 2e 0a  t" script does..
07d0: 23 0a 64 62 20 63 6c 6f 73 65 0a 64 65 6c 65 74  #.db close.delet
07e0: 65 5f 66 69 6c 65 20 74 65 73 74 2e 64 62 20 74  e_file test.db t
07f0: 65 73 74 2e 64 62 2d 6a 6f 75 72 6e 61 6c 0a 64  est.db-journal.d
0800: 65 6c 65 74 65 5f 66 69 6c 65 20 74 65 73 74 33  elete_file test3
0810: 2e 64 62 20 74 65 73 74 33 2e 64 62 2d 6a 6f 75  .db test3.db-jou
0820: 72 6e 61 6c 0a 73 71 6c 69 74 65 33 20 64 62 20  rnal.sqlite3 db 
0830: 74 65 73 74 2e 64 62 3b 20 73 65 74 20 44 42 20  test.db; set DB 
0840: 5b 73 71 6c 69 74 65 33 5f 63 6f 6e 6e 65 63 74  [sqlite3_connect
0850: 69 6f 6e 5f 70 6f 69 6e 74 65 72 20 64 62 5d 0a  ion_pointer db].
0860: 0a 0a 69 66 63 61 70 61 62 6c 65 20 70 61 67 65  ..ifcapable page
0870: 72 5f 70 72 61 67 6d 61 73 20 7b 0a 73 65 74 20  r_pragmas {.set 
0880: 44 46 4c 54 5f 43 41 43 48 45 5f 53 5a 20 5b 64  DFLT_CACHE_SZ [d
0890: 62 20 6f 6e 65 20 7b 50 52 41 47 4d 41 20 64 65  b one {PRAGMA de
08a0: 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65  fault_cache_size
08b0: 7d 5d 0a 73 65 74 20 54 45 4d 50 5f 43 41 43 48  }].set TEMP_CACH
08c0: 45 5f 53 5a 20 5b 64 62 20 6f 6e 65 20 7b 50 52  E_SZ [db one {PR
08d0: 41 47 4d 41 20 74 65 6d 70 2e 64 65 66 61 75 6c  AGMA temp.defaul
08e0: 74 5f 63 61 63 68 65 5f 73 69 7a 65 7d 5d 0a 64  t_cache_size}].d
08f0: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 2e  o_test pragma-1.
0900: 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  1 {.  execsql {.
0910: 20 20 20 20 50 52 41 47 4d 41 20 63 61 63 68 65      PRAGMA cache
0920: 5f 73 69 7a 65 3b 0a 20 20 20 20 50 52 41 47 4d  _size;.    PRAGM
0930: 41 20 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f  A default_cache_
0940: 73 69 7a 65 3b 0a 20 20 20 20 50 52 41 47 4d 41  size;.    PRAGMA
0950: 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20 20   synchronous;.  
0960: 7d 0a 7d 20 5b 6c 69 73 74 20 24 44 46 4c 54 5f  }.} [list $DFLT_
0970: 43 41 43 48 45 5f 53 5a 20 24 44 46 4c 54 5f 43  CACHE_SZ $DFLT_C
0980: 41 43 48 45 5f 53 5a 20 32 5d 0a 64 6f 5f 74 65  ACHE_SZ 2].do_te
0990: 73 74 20 70 72 61 67 6d 61 2d 31 2e 32 20 7b 0a  st pragma-1.2 {.
09a0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
09b0: 50 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f  PRAGMA synchrono
09c0: 75 73 3d 4f 46 46 3b 0a 20 20 20 20 50 52 41 47  us=OFF;.    PRAG
09d0: 4d 41 20 63 61 63 68 65 5f 73 69 7a 65 3d 31 32  MA cache_size=12
09e0: 33 34 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 63  34;.    PRAGMA c
09f0: 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 50  ache_size;.    P
0a00: 52 41 47 4d 41 20 64 65 66 61 75 6c 74 5f 63 61  RAGMA default_ca
0a10: 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 50 52  che_size;.    PR
0a20: 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73  AGMA synchronous
0a30: 3b 0a 20 20 7d 0a 7d 20 5b 6c 69 73 74 20 31 32  ;.  }.} [list 12
0a40: 33 34 20 24 44 46 4c 54 5f 43 41 43 48 45 5f 53  34 $DFLT_CACHE_S
0a50: 5a 20 30 5d 0a 64 6f 5f 74 65 73 74 20 70 72 61  Z 0].do_test pra
0a60: 67 6d 61 2d 31 2e 33 20 7b 0a 20 20 64 62 20 63  gma-1.3 {.  db c
0a70: 6c 6f 73 65 0a 20 20 73 71 6c 69 74 65 33 20 64  lose.  sqlite3 d
0a80: 62 20 74 65 73 74 2e 64 62 0a 20 20 65 78 65 63  b test.db.  exec
0a90: 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41  sql {.    PRAGMA
0aa0: 20 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20   cache_size;.   
0ab0: 20 50 52 41 47 4d 41 20 64 65 66 61 75 6c 74 5f   PRAGMA default_
0ac0: 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20  cache_size;.    
0ad0: 50 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f  PRAGMA synchrono
0ae0: 75 73 3b 0a 20 20 7d 0a 7d 20 5b 6c 69 73 74 20  us;.  }.} [list 
0af0: 24 44 46 4c 54 5f 43 41 43 48 45 5f 53 5a 20 24  $DFLT_CACHE_SZ $
0b00: 44 46 4c 54 5f 43 41 43 48 45 5f 53 5a 20 32 5d  DFLT_CACHE_SZ 2]
0b10: 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d  .do_test pragma-
0b20: 31 2e 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  1.4 {.  execsql 
0b30: 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 73 79 6e  {.    PRAGMA syn
0b40: 63 68 72 6f 6e 6f 75 73 3d 4f 46 46 3b 0a 20 20  chronous=OFF;.  
0b50: 20 20 50 52 41 47 4d 41 20 63 61 63 68 65 5f 73    PRAGMA cache_s
0b60: 69 7a 65 3b 0a 20 20 20 20 50 52 41 47 4d 41 20  ize;.    PRAGMA 
0b70: 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69  default_cache_si
0b80: 7a 65 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 73  ze;.    PRAGMA s
0b90: 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20 20 7d 0a  ynchronous;.  }.
0ba0: 7d 20 5b 6c 69 73 74 20 24 44 46 4c 54 5f 43 41  } [list $DFLT_CA
0bb0: 43 48 45 5f 53 5a 20 24 44 46 4c 54 5f 43 41 43  CHE_SZ $DFLT_CAC
0bc0: 48 45 5f 53 5a 20 30 5d 0a 64 6f 5f 74 65 73 74  HE_SZ 0].do_test
0bd0: 20 70 72 61 67 6d 61 2d 31 2e 35 20 7b 0a 20 20   pragma-1.5 {.  
0be0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52  execsql {.    PR
0bf0: 41 47 4d 41 20 63 61 63 68 65 5f 73 69 7a 65 3d  AGMA cache_size=
0c00: 2d 34 33 32 31 3b 0a 20 20 20 20 50 52 41 47 4d  -4321;.    PRAGM
0c10: 41 20 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20  A cache_size;.  
0c20: 20 20 50 52 41 47 4d 41 20 64 65 66 61 75 6c 74    PRAGMA default
0c30: 5f 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20  _cache_size;.   
0c40: 20 50 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e   PRAGMA synchron
0c50: 6f 75 73 3b 0a 20 20 7d 0a 7d 20 5b 6c 69 73 74  ous;.  }.} [list
0c60: 20 2d 34 33 32 31 20 24 44 46 4c 54 5f 43 41 43   -4321 $DFLT_CAC
0c70: 48 45 5f 53 5a 20 30 5d 0a 64 6f 5f 74 65 73 74  HE_SZ 0].do_test
0c80: 20 70 72 61 67 6d 61 2d 31 2e 36 20 7b 0a 20 20   pragma-1.6 {.  
0c90: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52  execsql {.    PR
0ca0: 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73  AGMA synchronous
0cb0: 3d 4f 4e 3b 0a 20 20 20 20 50 52 41 47 4d 41 20  =ON;.    PRAGMA 
0cc0: 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20  cache_size;.    
0cd0: 50 52 41 47 4d 41 20 64 65 66 61 75 6c 74 5f 63  PRAGMA default_c
0ce0: 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 50  ache_size;.    P
0cf0: 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75  RAGMA synchronou
0d00: 73 3b 0a 20 20 7d 0a 7d 20 5b 6c 69 73 74 20 2d  s;.  }.} [list -
0d10: 34 33 32 31 20 24 44 46 4c 54 5f 43 41 43 48 45  4321 $DFLT_CACHE
0d20: 5f 53 5a 20 31 5d 0a 64 6f 5f 74 65 73 74 20 70  _SZ 1].do_test p
0d30: 72 61 67 6d 61 2d 31 2e 37 20 7b 0a 20 20 64 62  ragma-1.7 {.  db
0d40: 20 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74 65 33   close.  sqlite3
0d50: 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20 65 78   db test.db.  ex
0d60: 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47  ecsql {.    PRAG
0d70: 4d 41 20 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20  MA cache_size;. 
0d80: 20 20 20 50 52 41 47 4d 41 20 64 65 66 61 75 6c     PRAGMA defaul
0d90: 74 5f 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20  t_cache_size;.  
0da0: 20 20 50 52 41 47 4d 41 20 73 79 6e 63 68 72 6f    PRAGMA synchro
0db0: 6e 6f 75 73 3b 0a 20 20 7d 0a 7d 20 5b 6c 69 73  nous;.  }.} [lis
0dc0: 74 20 24 44 46 4c 54 5f 43 41 43 48 45 5f 53 5a  t $DFLT_CACHE_SZ
0dd0: 20 24 44 46 4c 54 5f 43 41 43 48 45 5f 53 5a 20   $DFLT_CACHE_SZ 
0de0: 32 5d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  2].do_test pragm
0df0: 61 2d 31 2e 38 20 7b 0a 20 20 65 78 65 63 73 71  a-1.8 {.  execsq
0e00: 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 64  l {.    PRAGMA d
0e10: 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a  efault_cache_siz
0e20: 65 3d 2d 31 32 33 3b 0a 20 20 20 20 50 52 41 47  e=-123;.    PRAG
0e30: 4d 41 20 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20  MA cache_size;. 
0e40: 20 20 20 50 52 41 47 4d 41 20 64 65 66 61 75 6c     PRAGMA defaul
0e50: 74 5f 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20  t_cache_size;.  
0e60: 20 20 50 52 41 47 4d 41 20 73 79 6e 63 68 72 6f    PRAGMA synchro
0e70: 6e 6f 75 73 3b 0a 20 20 7d 0a 7d 20 7b 31 32 33  nous;.  }.} {123
0e80: 20 31 32 33 20 32 7d 0a 64 6f 5f 74 65 73 74 20   123 2}.do_test 
0e90: 70 72 61 67 6d 61 2d 31 2e 39 2e 31 20 7b 0a 20  pragma-1.9.1 {. 
0ea0: 20 64 62 20 63 6c 6f 73 65 0a 20 20 73 71 6c 69   db close.  sqli
0eb0: 74 65 33 20 64 62 20 74 65 73 74 2e 64 62 3b 20  te3 db test.db; 
0ec0: 73 65 74 20 3a 3a 44 42 20 5b 73 71 6c 69 74 65  set ::DB [sqlite
0ed0: 33 5f 63 6f 6e 6e 65 63 74 69 6f 6e 5f 70 6f 69  3_connection_poi
0ee0: 6e 74 65 72 20 64 62 5d 0a 20 20 65 78 65 63 73  nter db].  execs
0ef0: 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20  ql {.    PRAGMA 
0f00: 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20  cache_size;.    
0f10: 50 52 41 47 4d 41 20 64 65 66 61 75 6c 74 5f 63  PRAGMA default_c
0f20: 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 50  ache_size;.    P
0f30: 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75  RAGMA synchronou
0f40: 73 3b 0a 20 20 7d 0a 7d 20 7b 31 32 33 20 31 32  s;.  }.} {123 12
0f50: 33 20 32 7d 0a 69 66 63 61 70 61 62 6c 65 20 76  3 2}.ifcapable v
0f60: 61 63 75 75 6d 20 7b 0a 20 20 64 6f 5f 74 65 73  acuum {.  do_tes
0f70: 74 20 70 72 61 67 6d 61 2d 31 2e 39 2e 32 20 7b  t pragma-1.9.2 {
0f80: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
0f90: 20 20 20 20 20 56 41 43 55 55 4d 3b 0a 20 20 20       VACUUM;.   
0fa0: 20 20 20 50 52 41 47 4d 41 20 63 61 63 68 65 5f     PRAGMA cache_
0fb0: 73 69 7a 65 3b 0a 20 20 20 20 20 20 50 52 41 47  size;.      PRAG
0fc0: 4d 41 20 64 65 66 61 75 6c 74 5f 63 61 63 68 65  MA default_cache
0fd0: 5f 73 69 7a 65 3b 0a 20 20 20 20 20 20 50 52 41  _size;.      PRA
0fe0: 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3b  GMA synchronous;
0ff0: 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 31 32 33 20  .    }.  } {123 
1000: 31 32 33 20 32 7d 0a 7d 0a 64 6f 5f 74 65 73 74  123 2}.}.do_test
1010: 20 70 72 61 67 6d 61 2d 31 2e 31 30 20 7b 0a 20   pragma-1.10 {. 
1020: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50   execsql {.    P
1030: 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75  RAGMA synchronou
1040: 73 3d 4e 4f 52 4d 41 4c 3b 0a 20 20 20 20 50 52  s=NORMAL;.    PR
1050: 41 47 4d 41 20 63 61 63 68 65 5f 73 69 7a 65 3b  AGMA cache_size;
1060: 0a 20 20 20 20 50 52 41 47 4d 41 20 64 65 66 61  .    PRAGMA defa
1070: 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65 3b 0a  ult_cache_size;.
1080: 20 20 20 20 50 52 41 47 4d 41 20 73 79 6e 63 68      PRAGMA synch
1090: 72 6f 6e 6f 75 73 3b 0a 20 20 7d 0a 7d 20 7b 31  ronous;.  }.} {1
10a0: 32 33 20 31 32 33 20 31 7d 0a 64 6f 5f 74 65 73  23 123 1}.do_tes
10b0: 74 20 70 72 61 67 6d 61 2d 31 2e 31 31 20 7b 0a  t pragma-1.11 {.
10c0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
10d0: 50 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f  PRAGMA synchrono
10e0: 75 73 3d 46 55 4c 4c 3b 0a 20 20 20 20 50 52 41  us=FULL;.    PRA
10f0: 47 4d 41 20 63 61 63 68 65 5f 73 69 7a 65 3b 0a  GMA cache_size;.
1100: 20 20 20 20 50 52 41 47 4d 41 20 64 65 66 61 75      PRAGMA defau
1110: 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20  lt_cache_size;. 
1120: 20 20 20 50 52 41 47 4d 41 20 73 79 6e 63 68 72     PRAGMA synchr
1130: 6f 6e 6f 75 73 3b 0a 20 20 7d 0a 7d 20 7b 31 32  onous;.  }.} {12
1140: 33 20 31 32 33 20 32 7d 0a 64 6f 5f 74 65 73 74  3 123 2}.do_test
1150: 20 70 72 61 67 6d 61 2d 31 2e 31 32 20 7b 0a 20   pragma-1.12 {. 
1160: 20 64 62 20 63 6c 6f 73 65 0a 20 20 73 71 6c 69   db close.  sqli
1170: 74 65 33 20 64 62 20 74 65 73 74 2e 64 62 3b 20  te3 db test.db; 
1180: 73 65 74 20 3a 3a 44 42 20 5b 73 71 6c 69 74 65  set ::DB [sqlite
1190: 33 5f 63 6f 6e 6e 65 63 74 69 6f 6e 5f 70 6f 69  3_connection_poi
11a0: 6e 74 65 72 20 64 62 5d 0a 20 20 65 78 65 63 73  nter db].  execs
11b0: 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20  ql {.    PRAGMA 
11c0: 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20  cache_size;.    
11d0: 50 52 41 47 4d 41 20 64 65 66 61 75 6c 74 5f 63  PRAGMA default_c
11e0: 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 50  ache_size;.    P
11f0: 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75  RAGMA synchronou
1200: 73 3b 0a 20 20 7d 0a 7d 20 7b 31 32 33 20 31 32  s;.  }.} {123 12
1210: 33 20 32 7d 0a 0a 23 20 4d 61 6b 65 20 73 75 72  3 2}..# Make sur
1220: 65 20 74 68 65 20 70 72 61 67 6d 61 20 68 61 6e  e the pragma han
1230: 64 6c 65 72 20 75 6e 64 65 72 73 74 61 6e 64 73  dler understands
1240: 20 6e 75 6d 65 72 69 63 20 76 61 6c 75 65 73 20   numeric values 
1250: 69 6e 20 61 64 64 69 74 69 6f 6e 0a 23 20 74 6f  in addition.# to
1260: 20 6b 65 79 77 6f 72 64 73 20 6c 69 6b 65 20 22   keywords like "
1270: 6f 66 66 22 20 61 6e 64 20 22 66 75 6c 6c 22 2e  off" and "full".
1280: 0a 23 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .#.do_test pragm
1290: 61 2d 31 2e 31 33 20 7b 0a 20 20 65 78 65 63 73  a-1.13 {.  execs
12a0: 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20  ql {.    PRAGMA 
12b0: 73 79 6e 63 68 72 6f 6e 6f 75 73 3d 30 3b 0a 20  synchronous=0;. 
12c0: 20 20 20 50 52 41 47 4d 41 20 73 79 6e 63 68 72     PRAGMA synchr
12d0: 6f 6e 6f 75 73 3b 0a 20 20 7d 0a 7d 20 7b 30 7d  onous;.  }.} {0}
12e0: 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d  .do_test pragma-
12f0: 31 2e 31 34 20 7b 0a 20 20 65 78 65 63 73 71 6c  1.14 {.  execsql
1300: 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 73 79   {.    PRAGMA sy
1310: 6e 63 68 72 6f 6e 6f 75 73 3d 32 3b 0a 20 20 20  nchronous=2;.   
1320: 20 50 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e   PRAGMA synchron
1330: 6f 75 73 3b 0a 20 20 7d 0a 7d 20 7b 32 7d 0a 7d  ous;.  }.} {2}.}
1340: 20 3b 23 20 69 66 63 61 70 61 62 6c 65 20 70 61   ;# ifcapable pa
1350: 67 65 72 5f 70 72 61 67 6d 61 73 0a 0a 23 20 54  ger_pragmas..# T
1360: 65 73 74 20 74 75 72 6e 69 6e 67 20 22 66 6c 61  est turning "fla
1370: 67 22 20 70 72 61 67 6d 61 73 20 6f 6e 20 61 6e  g" pragmas on an
1380: 64 20 6f 66 66 2e 0a 23 0a 69 66 63 61 70 61 62  d off..#.ifcapab
1390: 6c 65 20 64 65 62 75 67 20 7b 0a 20 20 23 20 50  le debug {.  # P
13a0: 72 61 67 6d 61 20 22 76 64 62 65 5f 6c 69 73 74  ragma "vdbe_list
13b0: 69 6e 67 22 20 69 73 20 6f 6e 6c 79 20 61 76 61  ing" is only ava
13c0: 69 6c 61 62 6c 65 20 69 66 20 63 6f 6d 70 69 6c  ilable if compil
13d0: 65 64 20 77 69 74 68 20 53 51 4c 49 54 45 5f 44  ed with SQLITE_D
13e0: 45 42 55 47 0a 20 20 23 0a 20 20 64 6f 5f 74 65  EBUG.  #.  do_te
13f0: 73 74 20 70 72 61 67 6d 61 2d 31 2e 31 35 20 7b  st pragma-1.15 {
1400: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
1410: 20 20 20 20 20 50 52 41 47 4d 41 20 76 64 62 65       PRAGMA vdbe
1420: 5f 6c 69 73 74 69 6e 67 3d 59 45 53 3b 0a 20 20  _listing=YES;.  
1430: 20 20 20 20 50 52 41 47 4d 41 20 76 64 62 65 5f      PRAGMA vdbe_
1440: 6c 69 73 74 69 6e 67 3b 0a 20 20 20 20 7d 0a 20  listing;.    }. 
1450: 20 7d 20 7b 31 7d 0a 20 20 64 6f 5f 74 65 73 74   } {1}.  do_test
1460: 20 70 72 61 67 6d 61 2d 31 2e 31 36 20 7b 0a 20   pragma-1.16 {. 
1470: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
1480: 20 20 20 50 52 41 47 4d 41 20 76 64 62 65 5f 6c     PRAGMA vdbe_l
1490: 69 73 74 69 6e 67 3d 4e 4f 3b 0a 20 20 20 20 20  isting=NO;.     
14a0: 20 50 52 41 47 4d 41 20 76 64 62 65 5f 6c 69 73   PRAGMA vdbe_lis
14b0: 74 69 6e 67 3b 0a 20 20 20 20 7d 0a 20 20 7d 20  ting;.    }.  } 
14c0: 7b 30 7d 0a 7d 0a 0a 64 6f 5f 74 65 73 74 20 70  {0}.}..do_test p
14d0: 72 61 67 6d 61 2d 31 2e 31 37 20 7b 0a 20 20 65  ragma-1.17 {.  e
14e0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41  xecsql {.    PRA
14f0: 47 4d 41 20 70 61 72 73 65 72 5f 74 72 61 63 65  GMA parser_trace
1500: 3d 4f 4e 3b 0a 20 20 20 20 50 52 41 47 4d 41 20  =ON;.    PRAGMA 
1510: 70 61 72 73 65 72 5f 74 72 61 63 65 3d 4f 46 46  parser_trace=OFF
1520: 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65  ;.  }.} {}.do_te
1530: 73 74 20 70 72 61 67 6d 61 2d 31 2e 31 38 20 7b  st pragma-1.18 {
1540: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
1550: 20 50 52 41 47 4d 41 20 62 6f 67 75 73 20 3d 20   PRAGMA bogus = 
1560: 2d 31 32 33 34 3b 20 20 2d 2d 20 50 61 72 73 69  -1234;  -- Parsi
1570: 6e 67 20 6f 66 20 6e 65 67 61 74 69 76 65 20 76  ng of negative v
1580: 61 6c 75 65 73 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a  alues.  }.} {}..
1590: 23 20 54 65 73 74 20 6d 6f 64 69 66 79 69 6e 67  # Test modifying
15a0: 20 74 68 65 20 73 61 66 65 74 79 5f 6c 65 76 65   the safety_leve
15b0: 6c 20 6f 66 20 61 6e 20 61 74 74 61 63 68 65 64  l of an attached
15c0: 20 64 61 74 61 62 61 73 65 2e 0a 69 66 63 61 70   database..ifcap
15d0: 61 62 6c 65 20 70 61 67 65 72 5f 70 72 61 67 6d  able pager_pragm
15e0: 61 73 26 26 61 74 74 61 63 68 20 7b 0a 20 20 64  as&&attach {.  d
15f0: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 32 2e  o_test pragma-2.
1600: 31 20 7b 0a 20 20 20 20 66 6f 72 63 65 64 65 6c  1 {.    forcedel
1610: 65 74 65 20 74 65 73 74 32 2e 64 62 0a 20 20 20  ete test2.db.   
1620: 20 66 6f 72 63 65 64 65 6c 65 74 65 20 74 65 73   forcedelete tes
1630: 74 32 2e 64 62 2d 6a 6f 75 72 6e 61 6c 0a 20 20  t2.db-journal.  
1640: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
1650: 20 20 41 54 54 41 43 48 20 27 74 65 73 74 32 2e    ATTACH 'test2.
1660: 64 62 27 20 41 53 20 61 75 78 3b 0a 20 20 20 20  db' AS aux;.    
1670: 7d 20 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74  } .  } {}.  do_t
1680: 65 73 74 20 70 72 61 67 6d 61 2d 32 2e 32 20 7b  est pragma-2.2 {
1690: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
16a0: 20 20 20 20 20 70 72 61 67 6d 61 20 61 75 78 2e       pragma aux.
16b0: 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20 20 20  synchronous;.   
16c0: 20 7d 20 0a 20 20 7d 20 7b 32 7d 0a 20 20 64 6f   } .  } {2}.  do
16d0: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 32 2e 33  _test pragma-2.3
16e0: 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b   {.    execsql {
16f0: 0a 20 20 20 20 20 20 70 72 61 67 6d 61 20 61 75  .      pragma au
1700: 78 2e 73 79 6e 63 68 72 6f 6e 6f 75 73 20 3d 20  x.synchronous = 
1710: 4f 46 46 3b 0a 20 20 20 20 20 20 70 72 61 67 6d  OFF;.      pragm
1720: 61 20 61 75 78 2e 73 79 6e 63 68 72 6f 6e 6f 75  a aux.synchronou
1730: 73 3b 0a 20 20 20 20 20 20 70 72 61 67 6d 61 20  s;.      pragma 
1740: 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20 20 20  synchronous;.   
1750: 20 7d 20 0a 20 20 7d 20 7b 30 20 32 7d 0a 20 20   } .  } {0 2}.  
1760: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 32  do_test pragma-2
1770: 2e 34 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  .4 {.    execsql
1780: 20 7b 0a 20 20 20 20 20 20 70 72 61 67 6d 61 20   {.      pragma 
1790: 61 75 78 2e 73 79 6e 63 68 72 6f 6e 6f 75 73 20  aux.synchronous 
17a0: 3d 20 4f 4e 3b 0a 20 20 20 20 20 20 70 72 61 67  = ON;.      prag
17b0: 6d 61 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a  ma synchronous;.
17c0: 20 20 20 20 20 20 70 72 61 67 6d 61 20 61 75 78        pragma aux
17d0: 2e 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20 20  .synchronous;.  
17e0: 20 20 7d 20 0a 20 20 7d 20 7b 32 20 31 7d 0a 7d    } .  } {2 1}.}
17f0: 20 3b 23 20 69 66 63 61 70 61 62 6c 65 20 70 61   ;# ifcapable pa
1800: 67 65 72 5f 70 72 61 67 6d 61 73 0a 0a 23 20 43  ger_pragmas..# C
1810: 6f 6e 73 74 72 75 63 74 20 61 20 63 6f 72 72 75  onstruct a corru
1820: 70 74 65 64 20 69 6e 64 65 78 20 61 6e 64 20 6d  pted index and m
1830: 61 6b 65 20 73 75 72 65 20 74 68 65 20 69 6e 74  ake sure the int
1840: 65 67 72 69 74 79 5f 63 68 65 63 6b 0a 23 20 70  egrity_check.# p
1850: 72 61 67 6d 61 20 66 69 6e 64 73 20 69 74 2e 0a  ragma finds it..
1860: 23 0a 23 20 54 68 65 73 65 20 74 65 73 74 73 20  #.# These tests 
1870: 77 6f 6e 27 74 20 77 6f 72 6b 20 69 66 20 74 68  won't work if th
1880: 65 20 64 61 74 61 62 61 73 65 20 69 73 20 65 6e  e database is en
1890: 63 72 79 70 74 65 64 0a 23 0a 64 6f 5f 74 65 73  crypted.#.do_tes
18a0: 74 20 70 72 61 67 6d 61 2d 33 2e 31 20 7b 0a 20  t pragma-3.1 {. 
18b0: 20 64 62 20 63 6c 6f 73 65 0a 20 20 66 6f 72 63   db close.  forc
18c0: 65 64 65 6c 65 74 65 20 74 65 73 74 2e 64 62 20  edelete test.db 
18d0: 74 65 73 74 2e 64 62 2d 6a 6f 75 72 6e 61 6c 0a  test.db-journal.
18e0: 20 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73    sqlite3 db tes
18f0: 74 2e 64 62 0a 20 20 65 78 65 63 73 71 6c 20 7b  t.db.  execsql {
1900: 0a 20 20 20 20 50 52 41 47 4d 41 20 6d 6d 61 70  .    PRAGMA mmap
1910: 5f 6c 69 6d 69 74 3d 30 3b 0a 20 20 20 20 50 52  _limit=0;.    PR
1920: 41 47 4d 41 20 61 75 74 6f 5f 76 61 63 75 75 6d  AGMA auto_vacuum
1930: 3d 4f 46 46 3b 0a 20 20 20 20 42 45 47 49 4e 3b  =OFF;.    BEGIN;
1940: 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  .    CREATE TABL
1950: 45 20 74 32 28 61 2c 62 2c 63 29 3b 0a 20 20 20  E t2(a,b,c);.   
1960: 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 69 32   CREATE INDEX i2
1970: 20 4f 4e 20 74 32 28 61 29 3b 0a 20 20 20 20 49   ON t2(a);.    I
1980: 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41  NSERT INTO t2 VA
1990: 4c 55 45 53 28 31 31 2c 32 2c 33 29 3b 0a 20 20  LUES(11,2,3);.  
19a0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32    INSERT INTO t2
19b0: 20 56 41 4c 55 45 53 28 32 32 2c 33 2c 34 29 3b   VALUES(22,3,4);
19c0: 0a 20 20 20 20 43 4f 4d 4d 49 54 3b 0a 20 20 20  .    COMMIT;.   
19d0: 20 53 45 4c 45 43 54 20 72 6f 77 69 64 2c 20 2a   SELECT rowid, *
19e0: 20 66 72 6f 6d 20 74 32 3b 0a 20 20 7d 0a 7d 20   from t2;.  }.} 
19f0: 7b 31 20 31 31 20 32 20 33 20 32 20 32 32 20 33  {1 11 2 3 2 22 3
1a00: 20 34 7d 0a 69 66 63 61 70 61 62 6c 65 20 61 74   4}.ifcapable at
1a10: 74 61 63 68 20 7b 0a 20 20 69 66 20 7b 21 5b 73  tach {.  if {![s
1a20: 71 6c 69 74 65 33 20 2d 68 61 73 2d 63 6f 64 65  qlite3 -has-code
1a30: 63 5d 20 26 26 20 24 73 71 6c 69 74 65 5f 6f 70  c] && $sqlite_op
1a40: 74 69 6f 6e 73 28 69 6e 74 65 67 72 69 74 79 63  tions(integrityc
1a50: 6b 29 7d 20 7b 0a 20 20 20 20 64 6f 5f 74 65 73  k)} {.    do_tes
1a60: 74 20 70 72 61 67 6d 61 2d 33 2e 32 20 7b 0a 20  t pragma-3.2 {. 
1a70: 20 20 20 20 20 64 62 20 65 76 61 6c 20 7b 53 45       db eval {SE
1a80: 4c 45 43 54 20 72 6f 6f 74 70 61 67 65 20 46 52  LECT rootpage FR
1a90: 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  OM sqlite_master
1aa0: 20 57 48 45 52 45 20 6e 61 6d 65 3d 27 69 32 27   WHERE name='i2'
1ab0: 7d 20 62 72 65 61 6b 0a 20 20 20 20 20 20 73 65  } break.      se
1ac0: 74 20 70 67 73 7a 20 5b 64 62 20 65 76 61 6c 20  t pgsz [db eval 
1ad0: 7b 50 52 41 47 4d 41 20 70 61 67 65 5f 73 69 7a  {PRAGMA page_siz
1ae0: 65 7d 5d 0a 20 20 20 20 20 20 23 20 6f 76 65 72  e}].      # over
1af0: 77 72 69 74 65 20 74 68 65 20 68 65 61 64 65 72  write the header
1b00: 20 6f 6e 20 74 68 65 20 72 6f 6f 74 70 61 67 65   on the rootpage
1b10: 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20 69 6e   of the index in
1b20: 20 6f 72 64 65 72 20 74 6f 0a 20 20 20 20 20 20   order to.      
1b30: 23 20 6d 61 6b 65 20 74 68 65 20 69 6e 64 65 78  # make the index
1b40: 20 61 70 70 65 61 72 20 74 6f 20 62 65 20 65 6d   appear to be em
1b50: 70 74 79 2e 0a 20 20 20 20 20 20 23 0a 20 20 20  pty..      #.   
1b60: 20 20 20 73 65 74 20 6f 66 66 73 65 74 20 5b 65     set offset [e
1b70: 78 70 72 20 7b 24 70 67 73 7a 2a 28 24 72 6f 6f  xpr {$pgsz*($roo
1b80: 74 70 61 67 65 2d 31 29 7d 5d 0a 20 20 20 20 20  tpage-1)}].     
1b90: 20 68 65 78 69 6f 5f 77 72 69 74 65 20 74 65 73   hexio_write tes
1ba0: 74 2e 64 62 20 24 6f 66 66 73 65 74 20 30 61 30  t.db $offset 0a0
1bb0: 30 30 30 30 30 30 30 30 34 30 30 30 30 30 30 30  0000000040000000
1bc0: 30 30 30 0a 20 20 20 20 20 20 64 62 20 63 6c 6f  000.      db clo
1bd0: 73 65 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  se.      sqlite3
1be0: 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20 20 20   db test.db.    
1bf0: 20 20 65 78 65 63 73 71 6c 20 7b 50 52 41 47 4d    execsql {PRAGM
1c00: 41 20 6d 6d 61 70 5f 6c 69 6d 69 74 3d 30 7d 0a  A mmap_limit=0}.
1c10: 20 20 20 20 20 20 65 78 65 63 73 71 6c 20 7b 50        execsql {P
1c20: 52 41 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f  RAGMA integrity_
1c30: 63 68 65 63 6b 7d 0a 20 20 20 20 7d 20 7b 7b 72  check}.    } {{r
1c40: 6f 77 69 64 20 31 20 6d 69 73 73 69 6e 67 20 66  owid 1 missing f
1c50: 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b 72  rom index i2} {r
1c60: 6f 77 69 64 20 32 20 6d 69 73 73 69 6e 67 20 66  owid 2 missing f
1c70: 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b 77  rom index i2} {w
1c80: 72 6f 6e 67 20 23 20 6f 66 20 65 6e 74 72 69 65  rong # of entrie
1c90: 73 20 69 6e 20 69 6e 64 65 78 20 69 32 7d 7d 0a  s in index i2}}.
1ca0: 20 20 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67      do_test prag
1cb0: 6d 61 2d 33 2e 33 20 7b 0a 20 20 20 20 20 20 65  ma-3.3 {.      e
1cc0: 78 65 63 73 71 6c 20 7b 50 52 41 47 4d 41 20 69  xecsql {PRAGMA i
1cd0: 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 3d 31  ntegrity_check=1
1ce0: 7d 0a 20 20 20 20 7d 20 7b 7b 72 6f 77 69 64 20  }.    } {{rowid 
1cf0: 31 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69  1 missing from i
1d00: 6e 64 65 78 20 69 32 7d 7d 0a 20 20 20 20 64 6f  ndex i2}}.    do
1d10: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 33 2e 34  _test pragma-3.4
1d20: 20 7b 0a 20 20 20 20 20 20 65 78 65 63 73 71 6c   {.      execsql
1d30: 20 7b 0a 20 20 20 20 20 20 20 20 41 54 54 41 43   {.        ATTAC
1d40: 48 20 44 41 54 41 42 41 53 45 20 27 74 65 73 74  H DATABASE 'test
1d50: 2e 64 62 27 20 41 53 20 74 32 3b 0a 20 20 20 20  .db' AS t2;.    
1d60: 20 20 20 20 50 52 41 47 4d 41 20 69 6e 74 65 67      PRAGMA integ
1d70: 72 69 74 79 5f 63 68 65 63 6b 0a 20 20 20 20 20  rity_check.     
1d80: 20 7d 0a 20 20 20 20 7d 20 7b 7b 72 6f 77 69 64   }.    } {{rowid
1d90: 20 31 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20   1 missing from 
1da0: 69 6e 64 65 78 20 69 32 7d 20 7b 72 6f 77 69 64  index i2} {rowid
1db0: 20 32 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20   2 missing from 
1dc0: 69 6e 64 65 78 20 69 32 7d 20 7b 77 72 6f 6e 67  index i2} {wrong
1dd0: 20 23 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e   # of entries in
1de0: 20 69 6e 64 65 78 20 69 32 7d 20 7b 72 6f 77 69   index i2} {rowi
1df0: 64 20 31 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d  d 1 missing from
1e00: 20 69 6e 64 65 78 20 69 32 7d 20 7b 72 6f 77 69   index i2} {rowi
1e10: 64 20 32 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d  d 2 missing from
1e20: 20 69 6e 64 65 78 20 69 32 7d 20 7b 77 72 6f 6e   index i2} {wron
1e30: 67 20 23 20 6f 66 20 65 6e 74 72 69 65 73 20 69  g # of entries i
1e40: 6e 20 69 6e 64 65 78 20 69 32 7d 7d 0a 20 20 20  n index i2}}.   
1e50: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
1e60: 33 2e 35 20 7b 0a 20 20 20 20 20 20 65 78 65 63  3.5 {.      exec
1e70: 73 71 6c 20 7b 0a 20 20 20 20 20 20 20 20 50 52  sql {.        PR
1e80: 41 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63  AGMA integrity_c
1e90: 68 65 63 6b 3d 34 0a 20 20 20 20 20 20 7d 0a 20  heck=4.      }. 
1ea0: 20 20 20 7d 20 7b 7b 72 6f 77 69 64 20 31 20 6d     } {{rowid 1 m
1eb0: 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65  issing from inde
1ec0: 78 20 69 32 7d 20 7b 72 6f 77 69 64 20 32 20 6d  x i2} {rowid 2 m
1ed0: 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65  issing from inde
1ee0: 78 20 69 32 7d 20 7b 77 72 6f 6e 67 20 23 20 6f  x i2} {wrong # o
1ef0: 66 20 65 6e 74 72 69 65 73 20 69 6e 20 69 6e 64  f entries in ind
1f00: 65 78 20 69 32 7d 20 7b 72 6f 77 69 64 20 31 20  ex i2} {rowid 1 
1f10: 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64  missing from ind
1f20: 65 78 20 69 32 7d 7d 0a 20 20 20 20 64 6f 5f 74  ex i2}}.    do_t
1f30: 65 73 74 20 70 72 61 67 6d 61 2d 33 2e 36 20 7b  est pragma-3.6 {
1f40: 0a 20 20 20 20 20 20 65 78 65 63 73 71 6c 20 7b  .      execsql {
1f50: 0a 20 20 20 20 20 20 20 20 50 52 41 47 4d 41 20  .        PRAGMA 
1f60: 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 3d  integrity_check=
1f70: 78 79 7a 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  xyz.      }.    
1f80: 7d 20 7b 7b 72 6f 77 69 64 20 31 20 6d 69 73 73  } {{rowid 1 miss
1f90: 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69  ing from index i
1fa0: 32 7d 20 7b 72 6f 77 69 64 20 32 20 6d 69 73 73  2} {rowid 2 miss
1fb0: 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69  ing from index i
1fc0: 32 7d 20 7b 77 72 6f 6e 67 20 23 20 6f 66 20 65  2} {wrong # of e
1fd0: 6e 74 72 69 65 73 20 69 6e 20 69 6e 64 65 78 20  ntries in index 
1fe0: 69 32 7d 20 7b 72 6f 77 69 64 20 31 20 6d 69 73  i2} {rowid 1 mis
1ff0: 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20  sing from index 
2000: 69 32 7d 20 7b 72 6f 77 69 64 20 32 20 6d 69 73  i2} {rowid 2 mis
2010: 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20  sing from index 
2020: 69 32 7d 20 7b 77 72 6f 6e 67 20 23 20 6f 66 20  i2} {wrong # of 
2030: 65 6e 74 72 69 65 73 20 69 6e 20 69 6e 64 65 78  entries in index
2040: 20 69 32 7d 7d 0a 20 20 20 20 64 6f 5f 74 65 73   i2}}.    do_tes
2050: 74 20 70 72 61 67 6d 61 2d 33 2e 37 20 7b 0a 20  t pragma-3.7 {. 
2060: 20 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20       execsql {. 
2070: 20 20 20 20 20 20 20 50 52 41 47 4d 41 20 69 6e         PRAGMA in
2080: 74 65 67 72 69 74 79 5f 63 68 65 63 6b 3d 30 0a  tegrity_check=0.
2090: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 20 7b 7b        }.    } {{
20a0: 72 6f 77 69 64 20 31 20 6d 69 73 73 69 6e 67 20  rowid 1 missing 
20b0: 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b  from index i2} {
20c0: 72 6f 77 69 64 20 32 20 6d 69 73 73 69 6e 67 20  rowid 2 missing 
20d0: 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b  from index i2} {
20e0: 77 72 6f 6e 67 20 23 20 6f 66 20 65 6e 74 72 69  wrong # of entri
20f0: 65 73 20 69 6e 20 69 6e 64 65 78 20 69 32 7d 20  es in index i2} 
2100: 7b 72 6f 77 69 64 20 31 20 6d 69 73 73 69 6e 67  {rowid 1 missing
2110: 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20   from index i2} 
2120: 7b 72 6f 77 69 64 20 32 20 6d 69 73 73 69 6e 67  {rowid 2 missing
2130: 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20   from index i2} 
2140: 7b 77 72 6f 6e 67 20 23 20 6f 66 20 65 6e 74 72  {wrong # of entr
2150: 69 65 73 20 69 6e 20 69 6e 64 65 78 20 69 32 7d  ies in index i2}
2160: 7d 0a 20 20 0a 20 20 20 20 23 20 41 64 64 20 61  }.  .    # Add a
2170: 64 64 69 74 69 6f 6e 61 6c 20 63 6f 72 72 75 70  dditional corrup
2180: 74 69 6f 6e 20 62 79 20 61 70 70 65 6e 64 69 6e  tion by appendin
2190: 67 20 75 6e 75 73 65 64 20 70 61 67 65 73 20 74  g unused pages t
21a0: 6f 20 74 68 65 20 65 6e 64 20 6f 66 0a 20 20 20  o the end of.   
21b0: 20 23 20 74 68 65 20 64 61 74 61 62 61 73 65 20   # the database 
21c0: 66 69 6c 65 20 74 65 73 74 65 72 72 2e 64 62 0a  file testerr.db.
21d0: 20 20 20 20 23 0a 20 20 20 20 64 6f 5f 74 65 73      #.    do_tes
21e0: 74 20 70 72 61 67 6d 61 2d 33 2e 38 20 7b 0a 20  t pragma-3.8 {. 
21f0: 20 20 20 20 20 65 78 65 63 73 71 6c 20 7b 44 45       execsql {DE
2200: 54 41 43 48 20 74 32 7d 0a 20 20 20 20 20 20 66  TACH t2}.      f
2210: 6f 72 63 65 64 65 6c 65 74 65 20 74 65 73 74 65  orcedelete teste
2220: 72 72 2e 64 62 20 74 65 73 74 65 72 72 2e 64 62  rr.db testerr.db
2230: 2d 6a 6f 75 72 6e 61 6c 0a 20 20 20 20 20 20 73  -journal.      s
2240: 65 74 20 6f 75 74 20 5b 6f 70 65 6e 20 74 65 73  et out [open tes
2250: 74 65 72 72 2e 64 62 20 77 5d 0a 20 20 20 20 20  terr.db w].     
2260: 20 66 63 6f 6e 66 69 67 75 72 65 20 24 6f 75 74   fconfigure $out
2270: 20 2d 74 72 61 6e 73 6c 61 74 69 6f 6e 20 62 69   -translation bi
2280: 6e 61 72 79 0a 20 20 20 20 20 20 73 65 74 20 69  nary.      set i
2290: 6e 20 5b 6f 70 65 6e 20 74 65 73 74 2e 64 62 20  n [open test.db 
22a0: 72 5d 0a 20 20 20 20 20 20 66 63 6f 6e 66 69 67  r].      fconfig
22b0: 75 72 65 20 24 69 6e 20 2d 74 72 61 6e 73 6c 61  ure $in -transla
22c0: 74 69 6f 6e 20 62 69 6e 61 72 79 0a 20 20 20 20  tion binary.    
22d0: 20 20 70 75 74 73 20 2d 6e 6f 6e 65 77 6c 69 6e    puts -nonewlin
22e0: 65 20 24 6f 75 74 20 5b 72 65 61 64 20 24 69 6e  e $out [read $in
22f0: 5d 0a 20 20 20 20 20 20 73 65 65 6b 20 24 69 6e  ].      seek $in
2300: 20 30 0a 20 20 20 20 20 20 70 75 74 73 20 2d 6e   0.      puts -n
2310: 6f 6e 65 77 6c 69 6e 65 20 24 6f 75 74 20 5b 72  onewline $out [r
2320: 65 61 64 20 24 69 6e 5d 0a 20 20 20 20 20 20 63  ead $in].      c
2330: 6c 6f 73 65 20 24 69 6e 0a 20 20 20 20 20 20 63  lose $in.      c
2340: 6c 6f 73 65 20 24 6f 75 74 0a 20 20 20 20 20 20  lose $out.      
2350: 68 65 78 69 6f 5f 77 72 69 74 65 20 74 65 73 74  hexio_write test
2360: 65 72 72 2e 64 62 20 32 38 20 30 30 30 30 30 30  err.db 28 000000
2370: 30 30 0a 20 20 20 20 20 20 65 78 65 63 73 71 6c  00.      execsql
2380: 20 7b 52 45 49 4e 44 45 58 20 74 32 7d 0a 20 20   {REINDEX t2}.  
2390: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 50 52 41      execsql {PRA
23a0: 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68  GMA integrity_ch
23b0: 65 63 6b 7d 0a 20 20 20 20 7d 20 7b 6f 6b 7d 0a  eck}.    } {ok}.
23c0: 20 20 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67      do_test prag
23d0: 6d 61 2d 33 2e 38 2e 31 20 7b 0a 20 20 20 20 20  ma-3.8.1 {.     
23e0: 20 65 78 65 63 73 71 6c 20 7b 50 52 41 47 4d 41   execsql {PRAGMA
23f0: 20 71 75 69 63 6b 5f 63 68 65 63 6b 7d 0a 20 20   quick_check}.  
2400: 20 20 7d 20 7b 6f 6b 7d 0a 20 20 20 20 64 6f 5f    } {ok}.    do_
2410: 74 65 73 74 20 70 72 61 67 6d 61 2d 33 2e 38 2e  test pragma-3.8.
2420: 32 20 7b 0a 20 20 20 20 20 20 65 78 65 63 73 71  2 {.      execsq
2430: 6c 20 7b 50 52 41 47 4d 41 20 51 55 49 43 4b 5f  l {PRAGMA QUICK_
2440: 43 48 45 43 4b 7d 0a 20 20 20 20 7d 20 7b 6f 6b  CHECK}.    } {ok
2450: 7d 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 70 72  }.    do_test pr
2460: 61 67 6d 61 2d 33 2e 39 20 7b 0a 20 20 20 20 20  agma-3.9 {.     
2470: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20   execsql {.     
2480: 20 20 20 41 54 54 41 43 48 20 27 74 65 73 74 65     ATTACH 'teste
2490: 72 72 2e 64 62 27 20 41 53 20 74 32 3b 0a 20 20  rr.db' AS t2;.  
24a0: 20 20 20 20 20 20 50 52 41 47 4d 41 20 69 6e 74        PRAGMA int
24b0: 65 67 72 69 74 79 5f 63 68 65 63 6b 0a 20 20 20  egrity_check.   
24c0: 20 20 20 7d 0a 20 20 20 20 7d 20 7b 7b 2a 2a 2a     }.    } {{***
24d0: 20 69 6e 20 64 61 74 61 62 61 73 65 20 74 32 20   in database t2 
24e0: 2a 2a 2a 0a 50 61 67 65 20 34 20 69 73 20 6e 65  ***.Page 4 is ne
24f0: 76 65 72 20 75 73 65 64 0a 50 61 67 65 20 35 20  ver used.Page 5 
2500: 69 73 20 6e 65 76 65 72 20 75 73 65 64 0a 50 61  is never used.Pa
2510: 67 65 20 36 20 69 73 20 6e 65 76 65 72 20 75 73  ge 6 is never us
2520: 65 64 7d 20 7b 72 6f 77 69 64 20 31 20 6d 69 73  ed} {rowid 1 mis
2530: 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20  sing from index 
2540: 69 32 7d 20 7b 72 6f 77 69 64 20 32 20 6d 69 73  i2} {rowid 2 mis
2550: 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20  sing from index 
2560: 69 32 7d 20 7b 77 72 6f 6e 67 20 23 20 6f 66 20  i2} {wrong # of 
2570: 65 6e 74 72 69 65 73 20 69 6e 20 69 6e 64 65 78  entries in index
2580: 20 69 32 7d 7d 0a 20 20 20 20 64 6f 5f 74 65 73   i2}}.    do_tes
2590: 74 20 70 72 61 67 6d 61 2d 33 2e 31 30 20 7b 0a  t pragma-3.10 {.
25a0: 20 20 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a        execsql {.
25b0: 20 20 20 20 20 20 20 20 50 52 41 47 4d 41 20 69          PRAGMA i
25c0: 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 3d 31  ntegrity_check=1
25d0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 20 7b  .      }.    } {
25e0: 7b 2a 2a 2a 20 69 6e 20 64 61 74 61 62 61 73 65  {*** in database
25f0: 20 74 32 20 2a 2a 2a 0a 50 61 67 65 20 34 20 69   t2 ***.Page 4 i
2600: 73 20 6e 65 76 65 72 20 75 73 65 64 7d 7d 0a 20  s never used}}. 
2610: 20 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d     do_test pragm
2620: 61 2d 33 2e 31 31 20 7b 0a 20 20 20 20 20 20 65  a-3.11 {.      e
2630: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 20  xecsql {.       
2640: 20 50 52 41 47 4d 41 20 69 6e 74 65 67 72 69 74   PRAGMA integrit
2650: 79 5f 63 68 65 63 6b 3d 35 0a 20 20 20 20 20 20  y_check=5.      
2660: 7d 0a 20 20 20 20 7d 20 7b 7b 2a 2a 2a 20 69 6e  }.    } {{*** in
2670: 20 64 61 74 61 62 61 73 65 20 74 32 20 2a 2a 2a   database t2 ***
2680: 0a 50 61 67 65 20 34 20 69 73 20 6e 65 76 65 72  .Page 4 is never
2690: 20 75 73 65 64 0a 50 61 67 65 20 35 20 69 73 20   used.Page 5 is 
26a0: 6e 65 76 65 72 20 75 73 65 64 0a 50 61 67 65 20  never used.Page 
26b0: 36 20 69 73 20 6e 65 76 65 72 20 75 73 65 64 7d  6 is never used}
26c0: 20 7b 72 6f 77 69 64 20 31 20 6d 69 73 73 69 6e   {rowid 1 missin
26d0: 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d  g from index i2}
26e0: 20 7b 72 6f 77 69 64 20 32 20 6d 69 73 73 69 6e   {rowid 2 missin
26f0: 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d  g from index i2}
2700: 7d 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 70 72  }.    do_test pr
2710: 61 67 6d 61 2d 33 2e 31 32 20 7b 0a 20 20 20 20  agma-3.12 {.    
2720: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
2730: 20 20 20 20 50 52 41 47 4d 41 20 69 6e 74 65 67      PRAGMA integ
2740: 72 69 74 79 5f 63 68 65 63 6b 3d 34 0a 20 20 20  rity_check=4.   
2750: 20 20 20 7d 0a 20 20 20 20 7d 20 7b 7b 2a 2a 2a     }.    } {{***
2760: 20 69 6e 20 64 61 74 61 62 61 73 65 20 74 32 20   in database t2 
2770: 2a 2a 2a 0a 50 61 67 65 20 34 20 69 73 20 6e 65  ***.Page 4 is ne
2780: 76 65 72 20 75 73 65 64 0a 50 61 67 65 20 35 20  ver used.Page 5 
2790: 69 73 20 6e 65 76 65 72 20 75 73 65 64 0a 50 61  is never used.Pa
27a0: 67 65 20 36 20 69 73 20 6e 65 76 65 72 20 75 73  ge 6 is never us
27b0: 65 64 7d 20 7b 72 6f 77 69 64 20 31 20 6d 69 73  ed} {rowid 1 mis
27c0: 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20  sing from index 
27d0: 69 32 7d 7d 0a 20 20 20 20 64 6f 5f 74 65 73 74  i2}}.    do_test
27e0: 20 70 72 61 67 6d 61 2d 33 2e 31 33 20 7b 0a 20   pragma-3.13 {. 
27f0: 20 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20       execsql {. 
2800: 20 20 20 20 20 20 20 50 52 41 47 4d 41 20 69 6e         PRAGMA in
2810: 74 65 67 72 69 74 79 5f 63 68 65 63 6b 3d 33 0a  tegrity_check=3.
2820: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 20 7b 7b        }.    } {{
2830: 2a 2a 2a 20 69 6e 20 64 61 74 61 62 61 73 65 20  *** in database 
2840: 74 32 20 2a 2a 2a 0a 50 61 67 65 20 34 20 69 73  t2 ***.Page 4 is
2850: 20 6e 65 76 65 72 20 75 73 65 64 0a 50 61 67 65   never used.Page
2860: 20 35 20 69 73 20 6e 65 76 65 72 20 75 73 65 64   5 is never used
2870: 0a 50 61 67 65 20 36 20 69 73 20 6e 65 76 65 72  .Page 6 is never
2880: 20 75 73 65 64 7d 7d 0a 20 20 20 20 64 6f 5f 74   used}}.    do_t
2890: 65 73 74 20 70 72 61 67 6d 61 2d 33 2e 31 34 20  est pragma-3.14 
28a0: 7b 0a 20 20 20 20 20 20 65 78 65 63 73 71 6c 20  {.      execsql 
28b0: 7b 0a 20 20 20 20 20 20 20 20 50 52 41 47 4d 41  {.        PRAGMA
28c0: 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b   integrity_check
28d0: 28 32 29 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  (2).      }.    
28e0: 7d 20 7b 7b 2a 2a 2a 20 69 6e 20 64 61 74 61 62  } {{*** in datab
28f0: 61 73 65 20 74 32 20 2a 2a 2a 0a 50 61 67 65 20  ase t2 ***.Page 
2900: 34 20 69 73 20 6e 65 76 65 72 20 75 73 65 64 0a  4 is never used.
2910: 50 61 67 65 20 35 20 69 73 20 6e 65 76 65 72 20  Page 5 is never 
2920: 75 73 65 64 7d 7d 0a 20 20 20 20 64 6f 5f 74 65  used}}.    do_te
2930: 73 74 20 70 72 61 67 6d 61 2d 33 2e 31 35 20 7b  st pragma-3.15 {
2940: 0a 20 20 20 20 20 20 65 78 65 63 73 71 6c 20 7b  .      execsql {
2950: 0a 20 20 20 20 20 20 20 20 41 54 54 41 43 48 20  .        ATTACH 
2960: 27 74 65 73 74 65 72 72 2e 64 62 27 20 41 53 20  'testerr.db' AS 
2970: 74 33 3b 0a 20 20 20 20 20 20 20 20 50 52 41 47  t3;.        PRAG
2980: 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65  MA integrity_che
2990: 63 6b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  ck.      }.    }
29a0: 20 7b 7b 2a 2a 2a 20 69 6e 20 64 61 74 61 62 61   {{*** in databa
29b0: 73 65 20 74 32 20 2a 2a 2a 0a 50 61 67 65 20 34  se t2 ***.Page 4
29c0: 20 69 73 20 6e 65 76 65 72 20 75 73 65 64 0a 50   is never used.P
29d0: 61 67 65 20 35 20 69 73 20 6e 65 76 65 72 20 75  age 5 is never u
29e0: 73 65 64 0a 50 61 67 65 20 36 20 69 73 20 6e 65  sed.Page 6 is ne
29f0: 76 65 72 20 75 73 65 64 7d 20 7b 72 6f 77 69 64  ver used} {rowid
2a00: 20 31 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20   1 missing from 
2a10: 69 6e 64 65 78 20 69 32 7d 20 7b 72 6f 77 69 64  index i2} {rowid
2a20: 20 32 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20   2 missing from 
2a30: 69 6e 64 65 78 20 69 32 7d 20 7b 77 72 6f 6e 67  index i2} {wrong
2a40: 20 23 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e   # of entries in
2a50: 20 69 6e 64 65 78 20 69 32 7d 20 7b 2a 2a 2a 20   index i2} {*** 
2a60: 69 6e 20 64 61 74 61 62 61 73 65 20 74 33 20 2a  in database t3 *
2a70: 2a 2a 0a 50 61 67 65 20 34 20 69 73 20 6e 65 76  **.Page 4 is nev
2a80: 65 72 20 75 73 65 64 0a 50 61 67 65 20 35 20 69  er used.Page 5 i
2a90: 73 20 6e 65 76 65 72 20 75 73 65 64 0a 50 61 67  s never used.Pag
2aa0: 65 20 36 20 69 73 20 6e 65 76 65 72 20 75 73 65  e 6 is never use
2ab0: 64 7d 20 7b 72 6f 77 69 64 20 31 20 6d 69 73 73  d} {rowid 1 miss
2ac0: 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69  ing from index i
2ad0: 32 7d 20 7b 72 6f 77 69 64 20 32 20 6d 69 73 73  2} {rowid 2 miss
2ae0: 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69  ing from index i
2af0: 32 7d 20 7b 77 72 6f 6e 67 20 23 20 6f 66 20 65  2} {wrong # of e
2b00: 6e 74 72 69 65 73 20 69 6e 20 69 6e 64 65 78 20  ntries in index 
2b10: 69 32 7d 7d 0a 20 20 20 20 64 6f 5f 74 65 73 74  i2}}.    do_test
2b20: 20 70 72 61 67 6d 61 2d 33 2e 31 36 20 7b 0a 20   pragma-3.16 {. 
2b30: 20 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20       execsql {. 
2b40: 20 20 20 20 20 20 20 50 52 41 47 4d 41 20 69 6e         PRAGMA in
2b50: 74 65 67 72 69 74 79 5f 63 68 65 63 6b 28 31 30  tegrity_check(10
2b60: 29 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 20  ).      }.    } 
2b70: 7b 7b 2a 2a 2a 20 69 6e 20 64 61 74 61 62 61 73  {{*** in databas
2b80: 65 20 74 32 20 2a 2a 2a 0a 50 61 67 65 20 34 20  e t2 ***.Page 4 
2b90: 69 73 20 6e 65 76 65 72 20 75 73 65 64 0a 50 61  is never used.Pa
2ba0: 67 65 20 35 20 69 73 20 6e 65 76 65 72 20 75 73  ge 5 is never us
2bb0: 65 64 0a 50 61 67 65 20 36 20 69 73 20 6e 65 76  ed.Page 6 is nev
2bc0: 65 72 20 75 73 65 64 7d 20 7b 72 6f 77 69 64 20  er used} {rowid 
2bd0: 31 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69  1 missing from i
2be0: 6e 64 65 78 20 69 32 7d 20 7b 72 6f 77 69 64 20  ndex i2} {rowid 
2bf0: 32 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69  2 missing from i
2c00: 6e 64 65 78 20 69 32 7d 20 7b 77 72 6f 6e 67 20  ndex i2} {wrong 
2c10: 23 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20  # of entries in 
2c20: 69 6e 64 65 78 20 69 32 7d 20 7b 2a 2a 2a 20 69  index i2} {*** i
2c30: 6e 20 64 61 74 61 62 61 73 65 20 74 33 20 2a 2a  n database t3 **
2c40: 2a 0a 50 61 67 65 20 34 20 69 73 20 6e 65 76 65  *.Page 4 is neve
2c50: 72 20 75 73 65 64 0a 50 61 67 65 20 35 20 69 73  r used.Page 5 is
2c60: 20 6e 65 76 65 72 20 75 73 65 64 0a 50 61 67 65   never used.Page
2c70: 20 36 20 69 73 20 6e 65 76 65 72 20 75 73 65 64   6 is never used
2c80: 7d 20 7b 72 6f 77 69 64 20 31 20 6d 69 73 73 69  } {rowid 1 missi
2c90: 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32  ng from index i2
2ca0: 7d 7d 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 70  }}.    do_test p
2cb0: 72 61 67 6d 61 2d 33 2e 31 37 20 7b 0a 20 20 20  ragma-3.17 {.   
2cc0: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
2cd0: 20 20 20 20 20 50 52 41 47 4d 41 20 69 6e 74 65       PRAGMA inte
2ce0: 67 72 69 74 79 5f 63 68 65 63 6b 3d 38 0a 20 20  grity_check=8.  
2cf0: 20 20 20 20 7d 0a 20 20 20 20 7d 20 7b 7b 2a 2a      }.    } {{**
2d00: 2a 20 69 6e 20 64 61 74 61 62 61 73 65 20 74 32  * in database t2
2d10: 20 2a 2a 2a 0a 50 61 67 65 20 34 20 69 73 20 6e   ***.Page 4 is n
2d20: 65 76 65 72 20 75 73 65 64 0a 50 61 67 65 20 35  ever used.Page 5
2d30: 20 69 73 20 6e 65 76 65 72 20 75 73 65 64 0a 50   is never used.P
2d40: 61 67 65 20 36 20 69 73 20 6e 65 76 65 72 20 75  age 6 is never u
2d50: 73 65 64 7d 20 7b 72 6f 77 69 64 20 31 20 6d 69  sed} {rowid 1 mi
2d60: 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78  ssing from index
2d70: 20 69 32 7d 20 7b 72 6f 77 69 64 20 32 20 6d 69   i2} {rowid 2 mi
2d80: 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78  ssing from index
2d90: 20 69 32 7d 20 7b 77 72 6f 6e 67 20 23 20 6f 66   i2} {wrong # of
2da0: 20 65 6e 74 72 69 65 73 20 69 6e 20 69 6e 64 65   entries in inde
2db0: 78 20 69 32 7d 20 7b 2a 2a 2a 20 69 6e 20 64 61  x i2} {*** in da
2dc0: 74 61 62 61 73 65 20 74 33 20 2a 2a 2a 0a 50 61  tabase t3 ***.Pa
2dd0: 67 65 20 34 20 69 73 20 6e 65 76 65 72 20 75 73  ge 4 is never us
2de0: 65 64 0a 50 61 67 65 20 35 20 69 73 20 6e 65 76  ed.Page 5 is nev
2df0: 65 72 20 75 73 65 64 7d 7d 0a 20 20 20 20 64 6f  er used}}.    do
2e00: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 33 2e 31  _test pragma-3.1
2e10: 38 20 7b 0a 20 20 20 20 20 20 65 78 65 63 73 71  8 {.      execsq
2e20: 6c 20 7b 0a 20 20 20 20 20 20 20 20 50 52 41 47  l {.        PRAG
2e30: 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65  MA integrity_che
2e40: 63 6b 3d 34 0a 20 20 20 20 20 20 7d 0a 20 20 20  ck=4.      }.   
2e50: 20 7d 20 7b 7b 2a 2a 2a 20 69 6e 20 64 61 74 61   } {{*** in data
2e60: 62 61 73 65 20 74 32 20 2a 2a 2a 0a 50 61 67 65  base t2 ***.Page
2e70: 20 34 20 69 73 20 6e 65 76 65 72 20 75 73 65 64   4 is never used
2e80: 0a 50 61 67 65 20 35 20 69 73 20 6e 65 76 65 72  .Page 5 is never
2e90: 20 75 73 65 64 0a 50 61 67 65 20 36 20 69 73 20   used.Page 6 is 
2ea0: 6e 65 76 65 72 20 75 73 65 64 7d 20 7b 72 6f 77  never used} {row
2eb0: 69 64 20 31 20 6d 69 73 73 69 6e 67 20 66 72 6f  id 1 missing fro
2ec0: 6d 20 69 6e 64 65 78 20 69 32 7d 7d 0a 20 20 7d  m index i2}}.  }
2ed0: 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .  do_test pragm
2ee0: 61 2d 33 2e 31 39 20 7b 0a 20 20 20 20 63 61 74  a-3.19 {.    cat
2ef0: 63 68 20 7b 64 62 20 63 6c 6f 73 65 7d 0a 20 20  ch {db close}.  
2f00: 20 20 66 6f 72 63 65 64 65 6c 65 74 65 20 74 65    forcedelete te
2f10: 73 74 2e 64 62 20 74 65 73 74 2e 64 62 2d 6a 6f  st.db test.db-jo
2f20: 75 72 6e 61 6c 0a 20 20 20 20 73 71 6c 69 74 65  urnal.    sqlite
2f30: 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20 20  3 db test.db.   
2f40: 20 64 62 20 65 76 61 6c 20 7b 50 52 41 47 4d 41   db eval {PRAGMA
2f50: 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b   integrity_check
2f60: 7d 0a 20 20 7d 20 7b 6f 6b 7d 0a 7d 0a 23 65 78  }.  } {ok}.}.#ex
2f70: 69 74 0a 0a 23 20 54 65 73 74 20 6d 6f 64 69 66  it..# Test modif
2f80: 79 69 6e 67 20 74 68 65 20 63 61 63 68 65 5f 73  ying the cache_s
2f90: 69 7a 65 20 6f 66 20 61 6e 20 61 74 74 61 63 68  ize of an attach
2fa0: 65 64 20 64 61 74 61 62 61 73 65 2e 0a 69 66 63  ed database..ifc
2fb0: 61 70 61 62 6c 65 20 70 61 67 65 72 5f 70 72 61  apable pager_pra
2fc0: 67 6d 61 73 26 26 61 74 74 61 63 68 20 7b 0a 64  gmas&&attach {.d
2fd0: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 34 2e  o_test pragma-4.
2fe0: 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  1 {.  execsql {.
2ff0: 20 20 20 20 41 54 54 41 43 48 20 27 74 65 73 74      ATTACH 'test
3000: 32 2e 64 62 27 20 41 53 20 61 75 78 3b 0a 20 20  2.db' AS aux;.  
3010: 20 20 70 72 61 67 6d 61 20 61 75 78 2e 63 61 63    pragma aux.cac
3020: 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 70 72 61  he_size;.    pra
3030: 67 6d 61 20 61 75 78 2e 64 65 66 61 75 6c 74 5f  gma aux.default_
3040: 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 7d 20  cache_size;.  } 
3050: 0a 7d 20 5b 6c 69 73 74 20 24 44 46 4c 54 5f 43  .} [list $DFLT_C
3060: 41 43 48 45 5f 53 5a 20 24 44 46 4c 54 5f 43 41  ACHE_SZ $DFLT_CA
3070: 43 48 45 5f 53 5a 5d 0a 64 6f 5f 74 65 73 74 20  CHE_SZ].do_test 
3080: 70 72 61 67 6d 61 2d 34 2e 32 20 7b 0a 20 20 65  pragma-4.2 {.  e
3090: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 70 72 61  xecsql {.    pra
30a0: 67 6d 61 20 61 75 78 2e 63 61 63 68 65 5f 73 69  gma aux.cache_si
30b0: 7a 65 20 3d 20 35 30 3b 0a 20 20 20 20 70 72 61  ze = 50;.    pra
30c0: 67 6d 61 20 61 75 78 2e 63 61 63 68 65 5f 73 69  gma aux.cache_si
30d0: 7a 65 3b 0a 20 20 20 20 70 72 61 67 6d 61 20 61  ze;.    pragma a
30e0: 75 78 2e 64 65 66 61 75 6c 74 5f 63 61 63 68 65  ux.default_cache
30f0: 5f 73 69 7a 65 3b 0a 20 20 7d 20 0a 7d 20 5b 6c  _size;.  } .} [l
3100: 69 73 74 20 35 30 20 24 44 46 4c 54 5f 43 41 43  ist 50 $DFLT_CAC
3110: 48 45 5f 53 5a 5d 0a 64 6f 5f 74 65 73 74 20 70  HE_SZ].do_test p
3120: 72 61 67 6d 61 2d 34 2e 33 20 7b 0a 20 20 65 78  ragma-4.3 {.  ex
3130: 65 63 73 71 6c 20 7b 0a 20 20 20 20 70 72 61 67  ecsql {.    prag
3140: 6d 61 20 61 75 78 2e 64 65 66 61 75 6c 74 5f 63  ma aux.default_c
3150: 61 63 68 65 5f 73 69 7a 65 20 3d 20 34 35 36 3b  ache_size = 456;
3160: 0a 20 20 20 20 70 72 61 67 6d 61 20 61 75 78 2e  .    pragma aux.
3170: 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20  cache_size;.    
3180: 70 72 61 67 6d 61 20 61 75 78 2e 64 65 66 61 75  pragma aux.defau
3190: 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20  lt_cache_size;. 
31a0: 20 7d 20 0a 7d 20 7b 34 35 36 20 34 35 36 7d 0a   } .} {456 456}.
31b0: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 34  do_test pragma-4
31c0: 2e 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .4 {.  execsql {
31d0: 0a 20 20 20 20 70 72 61 67 6d 61 20 63 61 63 68  .    pragma cach
31e0: 65 5f 73 69 7a 65 3b 0a 20 20 20 20 70 72 61 67  e_size;.    prag
31f0: 6d 61 20 64 65 66 61 75 6c 74 5f 63 61 63 68 65  ma default_cache
3200: 5f 73 69 7a 65 3b 0a 20 20 7d 20 0a 7d 20 5b 6c  _size;.  } .} [l
3210: 69 73 74 20 24 44 46 4c 54 5f 43 41 43 48 45 5f  ist $DFLT_CACHE_
3220: 53 5a 20 24 44 46 4c 54 5f 43 41 43 48 45 5f 53  SZ $DFLT_CACHE_S
3230: 5a 5d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  Z].do_test pragm
3240: 61 2d 34 2e 35 20 7b 0a 20 20 65 78 65 63 73 71  a-4.5 {.  execsq
3250: 6c 20 7b 0a 20 20 20 20 44 45 54 41 43 48 20 61  l {.    DETACH a
3260: 75 78 3b 0a 20 20 20 20 41 54 54 41 43 48 20 27  ux;.    ATTACH '
3270: 74 65 73 74 33 2e 64 62 27 20 41 53 20 61 75 78  test3.db' AS aux
3280: 3b 0a 20 20 20 20 70 72 61 67 6d 61 20 61 75 78  ;.    pragma aux
3290: 2e 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20  .cache_size;.   
32a0: 20 70 72 61 67 6d 61 20 61 75 78 2e 64 65 66 61   pragma aux.defa
32b0: 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65 3b 0a  ult_cache_size;.
32c0: 20 20 7d 20 0a 7d 20 5b 6c 69 73 74 20 24 44 46    } .} [list $DF
32d0: 4c 54 5f 43 41 43 48 45 5f 53 5a 20 24 44 46 4c  LT_CACHE_SZ $DFL
32e0: 54 5f 43 41 43 48 45 5f 53 5a 5d 0a 64 6f 5f 74  T_CACHE_SZ].do_t
32f0: 65 73 74 20 70 72 61 67 6d 61 2d 34 2e 36 20 7b  est pragma-4.6 {
3300: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
3310: 20 44 45 54 41 43 48 20 61 75 78 3b 0a 20 20 20   DETACH aux;.   
3320: 20 41 54 54 41 43 48 20 27 74 65 73 74 32 2e 64   ATTACH 'test2.d
3330: 62 27 20 41 53 20 61 75 78 3b 0a 20 20 20 20 70  b' AS aux;.    p
3340: 72 61 67 6d 61 20 61 75 78 2e 63 61 63 68 65 5f  ragma aux.cache_
3350: 73 69 7a 65 3b 0a 20 20 20 20 70 72 61 67 6d 61  size;.    pragma
3360: 20 61 75 78 2e 64 65 66 61 75 6c 74 5f 63 61 63   aux.default_cac
3370: 68 65 5f 73 69 7a 65 3b 0a 20 20 7d 20 0a 7d 20  he_size;.  } .} 
3380: 7b 34 35 36 20 34 35 36 7d 0a 7d 20 3b 23 20 69  {456 456}.} ;# i
3390: 66 63 61 70 61 62 6c 65 20 70 61 67 65 72 5f 70  fcapable pager_p
33a0: 72 61 67 6d 61 73 0a 0a 23 20 54 65 73 74 20 74  ragmas..# Test t
33b0: 68 61 74 20 6d 6f 64 69 66 79 69 6e 67 20 74 68  hat modifying th
33c0: 65 20 73 79 6e 63 2d 6c 65 76 65 6c 20 69 6e 20  e sync-level in 
33d0: 74 68 65 20 6d 69 64 64 6c 65 20 6f 66 20 61 20  the middle of a 
33e0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 0a 23  transaction is.#
33f0: 20 64 69 73 61 6c 6c 6f 77 65 64 2e 0a 69 66 63   disallowed..ifc
3400: 61 70 61 62 6c 65 20 70 61 67 65 72 5f 70 72 61  apable pager_pra
3410: 67 6d 61 73 20 7b 0a 64 6f 5f 74 65 73 74 20 70  gmas {.do_test p
3420: 72 61 67 6d 61 2d 35 2e 30 20 7b 0a 20 20 65 78  ragma-5.0 {.  ex
3430: 65 63 73 71 6c 20 7b 0a 20 20 20 20 70 72 61 67  ecsql {.    prag
3440: 6d 61 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a  ma synchronous;.
3450: 20 20 7d 20 0a 7d 20 7b 32 7d 0a 64 6f 5f 74 65    } .} {2}.do_te
3460: 73 74 20 70 72 61 67 6d 61 2d 35 2e 31 20 7b 0a  st pragma-5.1 {.
3470: 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20    catchsql {.   
3480: 20 42 45 47 49 4e 3b 0a 20 20 20 20 70 72 61 67   BEGIN;.    prag
3490: 6d 61 20 73 79 6e 63 68 72 6f 6e 6f 75 73 20 3d  ma synchronous =
34a0: 20 4f 46 46 3b 0a 20 20 7d 20 0a 7d 20 7b 31 20   OFF;.  } .} {1 
34b0: 7b 53 61 66 65 74 79 20 6c 65 76 65 6c 20 6d 61  {Safety level ma
34c0: 79 20 6e 6f 74 20 62 65 20 63 68 61 6e 67 65 64  y not be changed
34d0: 20 69 6e 73 69 64 65 20 61 20 74 72 61 6e 73 61   inside a transa
34e0: 63 74 69 6f 6e 7d 7d 0a 64 6f 5f 74 65 73 74 20  ction}}.do_test 
34f0: 70 72 61 67 6d 61 2d 35 2e 32 20 7b 0a 20 20 65  pragma-5.2 {.  e
3500: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 70 72 61  xecsql {.    pra
3510: 67 6d 61 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3b  gma synchronous;
3520: 0a 20 20 7d 20 0a 7d 20 7b 32 7d 0a 63 61 74 63  .  } .} {2}.catc
3530: 68 73 71 6c 20 7b 43 4f 4d 4d 49 54 3b 7d 0a 7d  hsql {COMMIT;}.}
3540: 20 3b 23 20 69 66 63 61 70 61 62 6c 65 20 70 61   ;# ifcapable pa
3550: 67 65 72 5f 70 72 61 67 6d 61 73 0a 0a 23 20 54  ger_pragmas..# T
3560: 65 73 74 20 73 63 68 65 6d 61 2d 71 75 65 72 79  est schema-query
3570: 20 70 72 61 67 6d 61 73 0a 23 0a 69 66 63 61 70   pragmas.#.ifcap
3580: 61 62 6c 65 20 73 63 68 65 6d 61 5f 70 72 61 67  able schema_prag
3590: 6d 61 73 20 7b 0a 69 66 63 61 70 61 62 6c 65 20  mas {.ifcapable 
35a0: 74 65 6d 70 64 62 26 26 61 74 74 61 63 68 20 7b  tempdb&&attach {
35b0: 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .  do_test pragm
35c0: 61 2d 36 2e 31 20 7b 0a 20 20 20 20 73 65 74 20  a-6.1 {.    set 
35d0: 72 65 73 20 7b 7d 0a 20 20 20 20 65 78 65 63 73  res {}.    execs
35e0: 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f  ql {SELECT * FRO
35f0: 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61  M sqlite_temp_ma
3600: 73 74 65 72 7d 0a 20 20 20 20 66 6f 72 65 61 63  ster}.    foreac
3610: 68 20 7b 69 64 78 20 6e 61 6d 65 20 66 69 6c 65  h {idx name file
3620: 7d 20 5b 65 78 65 63 73 71 6c 20 7b 70 72 61 67  } [execsql {prag
3630: 6d 61 20 64 61 74 61 62 61 73 65 5f 6c 69 73 74  ma database_list
3640: 7d 5d 20 7b 0a 20 20 20 20 20 20 6c 61 70 70 65  }] {.      lappe
3650: 6e 64 20 72 65 73 20 24 69 64 78 20 24 6e 61 6d  nd res $idx $nam
3660: 65 0a 20 20 20 20 7d 0a 20 20 20 20 73 65 74 20  e.    }.    set 
3670: 72 65 73 0a 20 20 7d 20 7b 30 20 6d 61 69 6e 20  res.  } {0 main 
3680: 31 20 74 65 6d 70 20 32 20 61 75 78 7d 0a 7d 0a  1 temp 2 aux}.}.
3690: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 36  do_test pragma-6
36a0: 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .2 {.  execsql {
36b0: 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  .    CREATE TABL
36c0: 45 20 74 32 28 61 2c 62 2c 63 29 3b 0a 20 20 20  E t2(a,b,c);.   
36d0: 20 70 72 61 67 6d 61 20 74 61 62 6c 65 5f 69 6e   pragma table_in
36e0: 66 6f 28 74 32 29 0a 20 20 7d 0a 7d 20 7b 30 20  fo(t2).  }.} {0 
36f0: 61 20 7b 7d 20 30 20 7b 7d 20 30 20 31 20 62 20  a {} 0 {} 0 1 b 
3700: 7b 7d 20 30 20 7b 7d 20 30 20 32 20 63 20 7b 7d  {} 0 {} 0 2 c {}
3710: 20 30 20 7b 7d 20 30 7d 0a 64 6f 5f 74 65 73 74   0 {} 0}.do_test
3720: 20 70 72 61 67 6d 61 2d 36 2e 32 2e 31 20 7b 0a   pragma-6.2.1 {.
3730: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
3740: 70 72 61 67 6d 61 20 74 61 62 6c 65 5f 69 6e 66  pragma table_inf
3750: 6f 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 62 20 6e  o;.  }.} {}.db n
3760: 75 6c 6c 76 61 6c 75 65 20 3c 3c 4e 55 4c 4c 3e  ullvalue <<NULL>
3770: 3e 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  >.do_test pragma
3780: 2d 36 2e 32 2e 32 20 7b 0a 20 20 65 78 65 63 73  -6.2.2 {.  execs
3790: 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20  ql {.    CREATE 
37a0: 54 41 42 4c 45 20 74 35 28 0a 20 20 20 20 20 20  TABLE t5(.      
37b0: 61 20 54 45 58 54 20 44 45 46 41 55 4c 54 20 43  a TEXT DEFAULT C
37c0: 55 52 52 45 4e 54 5f 54 49 4d 45 53 54 41 4d 50  URRENT_TIMESTAMP
37d0: 2c 20 0a 20 20 20 20 20 20 62 20 44 45 46 41 55  , .      b DEFAU
37e0: 4c 54 20 28 35 2b 33 29 2c 0a 20 20 20 20 20 20  LT (5+3),.      
37f0: 63 20 54 45 58 54 2c 0a 20 20 20 20 20 20 64 20  c TEXT,.      d 
3800: 49 4e 54 45 47 45 52 20 44 45 46 41 55 4c 54 20  INTEGER DEFAULT 
3810: 4e 55 4c 4c 2c 0a 20 20 20 20 20 20 65 20 54 45  NULL,.      e TE
3820: 58 54 20 44 45 46 41 55 4c 54 20 27 27 2c 0a 20  XT DEFAULT '',. 
3830: 20 20 20 20 20 55 4e 49 51 55 45 28 62 2c 63 2c       UNIQUE(b,c,
3840: 64 29 2c 0a 20 20 20 20 20 20 50 52 49 4d 41 52  d),.      PRIMAR
3850: 59 20 4b 45 59 28 65 2c 62 2c 63 29 0a 20 20 20  Y KEY(e,b,c).   
3860: 20 29 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 74   );.    PRAGMA t
3870: 61 62 6c 65 5f 69 6e 66 6f 28 74 35 29 3b 0a 20  able_info(t5);. 
3880: 20 7d 0a 7d 20 7b 30 20 61 20 54 45 58 54 20 30   }.} {0 a TEXT 0
3890: 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 53 54 41   CURRENT_TIMESTA
38a0: 4d 50 20 30 20 31 20 62 20 7b 7d 20 30 20 35 2b  MP 0 1 b {} 0 5+
38b0: 33 20 32 20 32 20 63 20 54 45 58 54 20 30 20 3c  3 2 2 c TEXT 0 <
38c0: 3c 4e 55 4c 4c 3e 3e 20 33 20 33 20 64 20 49 4e  <NULL>> 3 3 d IN
38d0: 54 45 47 45 52 20 30 20 4e 55 4c 4c 20 30 20 34  TEGER 0 NULL 0 4
38e0: 20 65 20 54 45 58 54 20 30 20 27 27 20 31 7d 0a   e TEXT 0 '' 1}.
38f0: 64 62 20 6e 75 6c 6c 76 61 6c 75 65 20 7b 7d 0a  db nullvalue {}.
3900: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 36  do_test pragma-6
3910: 2e 32 2e 33 20 7b 0a 20 20 65 78 65 63 73 71 6c  .2.3 {.  execsql
3920: 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41   {.    CREATE TA
3930: 42 4c 45 20 74 32 5f 33 28 61 2c 62 20 49 4e 54  BLE t2_3(a,b INT
3940: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
3950: 2c 63 29 3b 0a 20 20 20 20 70 72 61 67 6d 61 20  ,c);.    pragma 
3960: 74 61 62 6c 65 5f 69 6e 66 6f 28 74 32 5f 33 29  table_info(t2_3)
3970: 0a 20 20 7d 0a 7d 20 7b 30 20 61 20 7b 7d 20 30  .  }.} {0 a {} 0
3980: 20 7b 7d 20 30 20 31 20 62 20 49 4e 54 45 47 45   {} 0 1 b INTEGE
3990: 52 20 30 20 7b 7d 20 31 20 32 20 63 20 7b 7d 20  R 0 {} 1 2 c {} 
39a0: 30 20 7b 7d 20 30 7d 0a 69 66 63 61 70 61 62 6c  0 {} 0}.ifcapabl
39b0: 65 20 7b 66 6f 72 65 69 67 6e 6b 65 79 7d 20 7b  e {foreignkey} {
39c0: 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .  do_test pragm
39d0: 61 2d 36 2e 33 2e 31 20 7b 0a 20 20 20 20 65 78  a-6.3.1 {.    ex
39e0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 43 52  ecsql {.      CR
39f0: 45 41 54 45 20 54 41 42 4c 45 20 74 33 28 61 20  EATE TABLE t3(a 
3a00: 69 6e 74 20 72 65 66 65 72 65 6e 63 65 73 20 74  int references t
3a10: 32 28 62 29 2c 20 62 20 55 4e 49 51 55 45 29 3b  2(b), b UNIQUE);
3a20: 0a 20 20 20 20 20 20 70 72 61 67 6d 61 20 66 6f  .      pragma fo
3a30: 72 65 69 67 6e 5f 6b 65 79 5f 6c 69 73 74 28 74  reign_key_list(t
3a40: 33 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 30  3);.    }.  } {0
3a50: 20 30 20 74 32 20 61 20 62 20 7b 4e 4f 20 41 43   0 t2 a b {NO AC
3a60: 54 49 4f 4e 7d 20 7b 4e 4f 20 41 43 54 49 4f 4e  TION} {NO ACTION
3a70: 7d 20 4e 4f 4e 45 7d 0a 20 20 64 6f 5f 74 65 73  } NONE}.  do_tes
3a80: 74 20 70 72 61 67 6d 61 2d 36 2e 33 2e 32 20 7b  t pragma-6.3.2 {
3a90: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
3aa0: 20 20 20 20 20 70 72 61 67 6d 61 20 66 6f 72 65       pragma fore
3ab0: 69 67 6e 5f 6b 65 79 5f 6c 69 73 74 3b 0a 20 20  ign_key_list;.  
3ac0: 20 20 7d 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f    }.  } {}.  do_
3ad0: 74 65 73 74 20 70 72 61 67 6d 61 2d 36 2e 33 2e  test pragma-6.3.
3ae0: 33 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  3 {.    execsql 
3af0: 7b 0a 20 20 20 20 20 20 70 72 61 67 6d 61 20 66  {.      pragma f
3b00: 6f 72 65 69 67 6e 5f 6b 65 79 5f 6c 69 73 74 28  oreign_key_list(
3b10: 74 33 5f 62 6f 67 75 73 29 3b 0a 20 20 20 20 7d  t3_bogus);.    }
3b20: 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65 73  .  } {}.  do_tes
3b30: 74 20 70 72 61 67 6d 61 2d 36 2e 33 2e 34 20 7b  t pragma-6.3.4 {
3b40: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
3b50: 20 20 20 20 20 70 72 61 67 6d 61 20 66 6f 72 65       pragma fore
3b60: 69 67 6e 5f 6b 65 79 5f 6c 69 73 74 28 74 35 29  ign_key_list(t5)
3b70: 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 7d 0a 20  ;.    }.  } {}. 
3b80: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
3b90: 36 2e 34 20 7b 0a 20 20 20 20 65 78 65 63 73 71  6.4 {.    execsq
3ba0: 6c 20 7b 0a 20 20 20 20 20 20 70 72 61 67 6d 61  l {.      pragma
3bb0: 20 69 6e 64 65 78 5f 6c 69 73 74 28 74 33 29 3b   index_list(t3);
3bc0: 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 30 20 73 71  .    }.  } {0 sq
3bd0: 6c 69 74 65 5f 61 75 74 6f 69 6e 64 65 78 5f 74  lite_autoindex_t
3be0: 33 5f 31 20 31 7d 0a 7d 0a 69 66 63 61 70 61 62  3_1 1}.}.ifcapab
3bf0: 6c 65 20 7b 21 66 6f 72 65 69 67 6e 6b 65 79 7d  le {!foreignkey}
3c00: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 43 52   {.  execsql {CR
3c10: 45 41 54 45 20 54 41 42 4c 45 20 74 33 28 61 2c  EATE TABLE t3(a,
3c20: 62 20 55 4e 49 51 55 45 29 7d 0a 7d 0a 64 6f 5f  b UNIQUE)}.}.do_
3c30: 74 65 73 74 20 70 72 61 67 6d 61 2d 36 2e 35 2e  test pragma-6.5.
3c40: 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  1 {.  execsql {.
3c50: 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45 58      CREATE INDEX
3c60: 20 74 33 69 31 20 4f 4e 20 74 33 28 61 2c 62 29   t3i1 ON t3(a,b)
3c70: 3b 0a 20 20 20 20 70 72 61 67 6d 61 20 69 6e 64  ;.    pragma ind
3c80: 65 78 5f 69 6e 66 6f 28 74 33 69 31 29 3b 0a 20  ex_info(t3i1);. 
3c90: 20 7d 0a 7d 20 7b 30 20 30 20 61 20 31 20 31 20   }.} {0 0 a 1 1 
3ca0: 62 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  b}.do_test pragm
3cb0: 61 2d 36 2e 35 2e 32 20 7b 0a 20 20 65 78 65 63  a-6.5.2 {.  exec
3cc0: 73 71 6c 20 7b 0a 20 20 20 20 70 72 61 67 6d 61  sql {.    pragma
3cd0: 20 69 6e 64 65 78 5f 69 6e 66 6f 28 74 33 69 31   index_info(t3i1
3ce0: 5f 62 6f 67 75 73 29 3b 0a 20 20 7d 0a 7d 20 7b  _bogus);.  }.} {
3cf0: 7d 0a 0a 69 66 63 61 70 61 62 6c 65 20 74 65 6d  }..ifcapable tem
3d00: 70 64 62 20 7b 0a 20 20 23 20 54 65 73 74 20 66  pdb {.  # Test f
3d10: 6f 72 20 74 69 63 6b 65 74 20 23 33 33 32 30 2e  or ticket #3320.
3d20: 20 57 68 65 6e 20 61 20 74 65 6d 70 20 74 61 62   When a temp tab
3d30: 6c 65 20 6f 66 20 74 68 65 20 73 61 6d 65 20 6e  le of the same n
3d40: 61 6d 65 20 65 78 69 73 74 73 2c 20 6d 61 6b 65  ame exists, make
3d50: 0a 20 20 23 20 73 75 72 65 20 74 68 65 20 73 63  .  # sure the sc
3d60: 68 65 6d 61 20 6f 66 20 74 68 65 20 6d 61 69 6e  hema of the main
3d70: 20 74 61 62 6c 65 20 63 61 6e 20 73 74 69 6c 6c   table can still
3d80: 20 62 65 20 71 75 65 72 69 65 64 20 75 73 69 6e   be queried usin
3d90: 67 20 0a 20 20 23 20 22 70 72 61 67 6d 61 20 74  g .  # "pragma t
3da0: 61 62 6c 65 5f 69 6e 66 6f 22 3a 0a 20 20 64 6f  able_info":.  do
3db0: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 36 2e 36  _test pragma-6.6
3dc0: 2e 31 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  .1 {.    execsql
3dd0: 20 7b 0a 20 20 20 20 20 20 43 52 45 41 54 45 20   {.      CREATE 
3de0: 54 41 42 4c 45 20 74 72 69 61 6c 28 63 6f 6c 5f  TABLE trial(col_
3df0: 6d 61 69 6e 29 3b 0a 20 20 20 20 20 20 43 52 45  main);.      CRE
3e00: 41 54 45 20 54 45 4d 50 20 54 41 42 4c 45 20 74  ATE TEMP TABLE t
3e10: 72 69 61 6c 28 63 6f 6c 5f 74 65 6d 70 29 3b 0a  rial(col_temp);.
3e20: 20 20 20 20 7d 0a 20 20 7d 20 7b 7d 0a 20 20 64      }.  } {}.  d
3e30: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 36 2e  o_test pragma-6.
3e40: 36 2e 32 20 7b 0a 20 20 20 20 65 78 65 63 73 71  6.2 {.    execsq
3e50: 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41  l {.      PRAGMA
3e60: 20 74 61 62 6c 65 5f 69 6e 66 6f 28 74 72 69 61   table_info(tria
3e70: 6c 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 30  l);.    }.  } {0
3e80: 20 63 6f 6c 5f 74 65 6d 70 20 7b 7d 20 30 20 7b   col_temp {} 0 {
3e90: 7d 20 30 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70  } 0}.  do_test p
3ea0: 72 61 67 6d 61 2d 36 2e 36 2e 33 20 7b 0a 20 20  ragma-6.6.3 {.  
3eb0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
3ec0: 20 20 50 52 41 47 4d 41 20 74 65 6d 70 2e 74 61    PRAGMA temp.ta
3ed0: 62 6c 65 5f 69 6e 66 6f 28 74 72 69 61 6c 29 3b  ble_info(trial);
3ee0: 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 30 20 63 6f  .    }.  } {0 co
3ef0: 6c 5f 74 65 6d 70 20 7b 7d 20 30 20 7b 7d 20 30  l_temp {} 0 {} 0
3f00: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67  }.  do_test prag
3f10: 6d 61 2d 36 2e 36 2e 34 20 7b 0a 20 20 20 20 65  ma-6.6.4 {.    e
3f20: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50  xecsql {.      P
3f30: 52 41 47 4d 41 20 6d 61 69 6e 2e 74 61 62 6c 65  RAGMA main.table
3f40: 5f 69 6e 66 6f 28 74 72 69 61 6c 29 3b 0a 20 20  _info(trial);.  
3f50: 20 20 7d 0a 20 20 7d 20 7b 30 20 63 6f 6c 5f 6d    }.  } {0 col_m
3f60: 61 69 6e 20 7b 7d 20 30 20 7b 7d 20 30 7d 0a 7d  ain {} 0 {} 0}.}
3f70: 0a 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  ..do_test pragma
3f80: 2d 36 2e 37 20 7b 0a 20 20 65 78 65 63 73 71 6c  -6.7 {.  execsql
3f90: 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41   {.    CREATE TA
3fa0: 42 4c 45 20 74 65 73 74 5f 74 61 62 6c 65 28 0a  BLE test_table(.
3fb0: 20 20 20 20 20 20 6f 6e 65 20 49 4e 54 20 4e 4f        one INT NO
3fc0: 54 20 4e 55 4c 4c 20 44 45 46 41 55 4c 54 20 2d  T NULL DEFAULT -
3fd0: 31 2c 20 0a 20 20 20 20 20 20 74 77 6f 20 74 65  1, .      two te
3fe0: 78 74 2c 0a 20 20 20 20 20 20 74 68 72 65 65 20  xt,.      three 
3ff0: 56 41 52 43 48 41 52 28 34 35 2c 20 36 35 29 20  VARCHAR(45, 65) 
4000: 44 45 46 41 55 4c 54 20 27 61 62 63 64 65 27 2c  DEFAULT 'abcde',
4010: 0a 20 20 20 20 20 20 66 6f 75 72 20 52 45 41 4c  .      four REAL
4020: 20 44 45 46 41 55 4c 54 20 58 27 61 62 63 64 65   DEFAULT X'abcde
4030: 66 27 2c 0a 20 20 20 20 20 20 66 69 76 65 20 44  f',.      five D
4040: 45 46 41 55 4c 54 20 43 55 52 52 45 4e 54 5f 54  EFAULT CURRENT_T
4050: 49 4d 45 0a 20 20 20 20 29 3b 0a 20 20 20 20 50  IME.    );.    P
4060: 52 41 47 4d 41 20 74 61 62 6c 65 5f 69 6e 66 6f  RAGMA table_info
4070: 28 74 65 73 74 5f 74 61 62 6c 65 29 3b 0a 20 20  (test_table);.  
4080: 7d 0a 7d 20 5b 63 6f 6e 63 61 74 20 5c 0a 20 20  }.} [concat \.  
4090: 7b 30 20 6f 6e 65 20 49 4e 54 20 31 20 2d 31 20  {0 one INT 1 -1 
40a0: 30 7d 20 5c 0a 20 20 7b 31 20 74 77 6f 20 74 65  0} \.  {1 two te
40b0: 78 74 20 30 20 7b 7d 20 30 7d 20 5c 0a 20 20 7b  xt 0 {} 0} \.  {
40c0: 32 20 74 68 72 65 65 20 7b 56 41 52 43 48 41 52  2 three {VARCHAR
40d0: 28 34 35 2c 20 36 35 29 7d 20 30 20 27 61 62 63  (45, 65)} 0 'abc
40e0: 64 65 27 20 30 7d 20 5c 0a 20 20 7b 33 20 66 6f  de' 0} \.  {3 fo
40f0: 75 72 20 52 45 41 4c 20 30 20 58 27 61 62 63 64  ur REAL 0 X'abcd
4100: 65 66 27 20 30 7d 20 5c 0a 20 20 7b 34 20 66 69  ef' 0} \.  {4 fi
4110: 76 65 20 7b 7d 20 30 20 43 55 52 52 45 4e 54 5f  ve {} 0 CURRENT_
4120: 54 49 4d 45 20 30 7d 20 5c 0a 5d 0a 7d 20 3b 23  TIME 0} \.].} ;#
4130: 20 69 66 63 61 70 61 62 6c 65 20 73 63 68 65 6d   ifcapable schem
4140: 61 5f 70 72 61 67 6d 61 73 0a 23 20 4d 69 73 63  a_pragmas.# Misc
4150: 65 6c 6c 61 6e 65 6f 75 73 20 74 65 73 74 73 0a  ellaneous tests.
4160: 23 0a 69 66 63 61 70 61 62 6c 65 20 73 63 68 65  #.ifcapable sche
4170: 6d 61 5f 70 72 61 67 6d 61 73 20 7b 0a 64 6f 5f  ma_pragmas {.do_
4180: 74 65 73 74 20 70 72 61 67 6d 61 2d 37 2e 31 2e  test pragma-7.1.
4190: 31 20 7b 0a 20 20 23 20 4d 61 6b 65 20 73 75 72  1 {.  # Make sur
41a0: 65 20 61 20 70 72 61 67 6d 61 20 6b 6e 6f 77 73  e a pragma knows
41b0: 20 74 6f 20 72 65 61 64 20 74 68 65 20 73 63 68   to read the sch
41c0: 65 6d 61 20 69 66 20 69 74 20 6e 65 65 64 73 20  ema if it needs 
41d0: 74 6f 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20 20  to.  db close.  
41e0: 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e  sqlite3 db test.
41f0: 64 62 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  db.  execsql {. 
4200: 20 20 20 70 72 61 67 6d 61 20 69 6e 64 65 78 5f     pragma index_
4210: 6c 69 73 74 28 74 33 29 3b 0a 20 20 7d 0a 7d 20  list(t3);.  }.} 
4220: 7b 30 20 74 33 69 31 20 30 20 31 20 73 71 6c 69  {0 t3i1 0 1 sqli
4230: 74 65 5f 61 75 74 6f 69 6e 64 65 78 5f 74 33 5f  te_autoindex_t3_
4240: 31 20 31 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61  1 1}.do_test pra
4250: 67 6d 61 2d 37 2e 31 2e 32 20 7b 0a 20 20 65 78  gma-7.1.2 {.  ex
4260: 65 63 73 71 6c 20 7b 0a 20 20 20 20 70 72 61 67  ecsql {.    prag
4270: 6d 61 20 69 6e 64 65 78 5f 6c 69 73 74 28 74 33  ma index_list(t3
4280: 5f 62 6f 67 75 73 29 3b 0a 20 20 7d 0a 7d 20 7b  _bogus);.  }.} {
4290: 7d 0a 7d 20 3b 23 20 69 66 63 61 70 61 62 6c 65  }.} ;# ifcapable
42a0: 20 73 63 68 65 6d 61 5f 70 72 61 67 6d 61 73 0a   schema_pragmas.
42b0: 69 66 63 61 70 61 62 6c 65 20 7b 75 74 66 31 36  ifcapable {utf16
42c0: 7d 20 7b 0a 20 20 69 66 20 7b 5b 70 65 72 6d 75  } {.  if {[permu
42d0: 74 61 74 69 6f 6e 5d 20 3d 3d 20 22 22 7d 20 7b  tation] == ""} {
42e0: 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 70 72 61  .    do_test pra
42f0: 67 6d 61 2d 37 2e 32 20 7b 0a 20 20 20 20 20 20  gma-7.2 {.      
4300: 64 62 20 63 6c 6f 73 65 0a 20 20 20 20 20 20 73  db close.      s
4310: 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64  qlite3 db test.d
4320: 62 0a 20 20 20 20 20 20 63 61 74 63 68 73 71 6c  b.      catchsql
4330: 20 7b 0a 20 20 20 20 20 20 20 20 70 72 61 67 6d   {.        pragm
4340: 61 20 65 6e 63 6f 64 69 6e 67 3d 62 6f 67 75 73  a encoding=bogus
4350: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 20  ;.      }.    } 
4360: 7b 31 20 7b 75 6e 73 75 70 70 6f 72 74 65 64 20  {1 {unsupported 
4370: 65 6e 63 6f 64 69 6e 67 3a 20 62 6f 67 75 73 7d  encoding: bogus}
4380: 7d 0a 20 20 7d 0a 7d 0a 69 66 63 61 70 61 62 6c  }.  }.}.ifcapabl
4390: 65 20 74 65 6d 70 64 62 20 7b 0a 20 20 64 6f 5f  e tempdb {.  do_
43a0: 74 65 73 74 20 70 72 61 67 6d 61 2d 37 2e 33 20  test pragma-7.3 
43b0: 7b 0a 20 20 20 20 64 62 20 63 6c 6f 73 65 0a 20  {.    db close. 
43c0: 20 20 20 73 71 6c 69 74 65 33 20 64 62 20 74 65     sqlite3 db te
43d0: 73 74 2e 64 62 0a 20 20 20 20 65 78 65 63 73 71  st.db.    execsq
43e0: 6c 20 7b 0a 20 20 20 20 20 20 70 72 61 67 6d 61  l {.      pragma
43f0: 20 6c 6f 63 6b 5f 73 74 61 74 75 73 3b 0a 20 20   lock_status;.  
4400: 20 20 7d 0a 20 20 7d 20 7b 6d 61 69 6e 20 75 6e    }.  } {main un
4410: 6c 6f 63 6b 65 64 20 74 65 6d 70 20 63 6c 6f 73  locked temp clos
4420: 65 64 7d 0a 7d 20 65 6c 73 65 20 7b 0a 20 20 64  ed}.} else {.  d
4430: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 37 2e  o_test pragma-7.
4440: 33 20 7b 0a 20 20 20 20 64 62 20 63 6c 6f 73 65  3 {.    db close
4450: 0a 20 20 20 20 73 71 6c 69 74 65 33 20 64 62 20  .    sqlite3 db 
4460: 74 65 73 74 2e 64 62 0a 20 20 20 20 65 78 65 63  test.db.    exec
4470: 73 71 6c 20 7b 0a 20 20 20 20 20 20 70 72 61 67  sql {.      prag
4480: 6d 61 20 6c 6f 63 6b 5f 73 74 61 74 75 73 3b 0a  ma lock_status;.
4490: 20 20 20 20 7d 0a 20 20 7d 20 7b 6d 61 69 6e 20      }.  } {main 
44a0: 75 6e 6c 6f 63 6b 65 64 7d 0a 7d 0a 0a 0a 23 2d  unlocked}.}...#-
44b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
44c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
44d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
44e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
44f0: 2d 2d 2d 2d 2d 0a 23 20 54 65 73 74 20 63 61 73  -----.# Test cas
4500: 65 73 20 70 72 61 67 6d 61 2d 38 2e 2a 20 74 65  es pragma-8.* te
4510: 73 74 20 74 68 65 20 22 50 52 41 47 4d 41 20 73  st the "PRAGMA s
4520: 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 22 20 61  chema_version" a
4530: 6e 64 20 22 50 52 41 47 4d 41 0a 23 20 75 73 65  nd "PRAGMA.# use
4540: 72 5f 76 65 72 73 69 6f 6e 22 20 73 74 61 74 65  r_version" state
4550: 6d 65 6e 74 73 2e 0a 23 0a 23 20 70 72 61 67 6d  ments..#.# pragm
4560: 61 2d 38 2e 31 3a 20 50 52 41 47 4d 41 20 73 63  a-8.1: PRAGMA sc
4570: 68 65 6d 61 5f 76 65 72 73 69 6f 6e 0a 23 20 70  hema_version.# p
4580: 72 61 67 6d 61 2d 38 2e 32 3a 20 50 52 41 47 4d  ragma-8.2: PRAGM
4590: 41 20 75 73 65 72 5f 76 65 72 73 69 6f 6e 0a 23  A user_version.#
45a0: 0a 0a 69 66 63 61 70 61 62 6c 65 20 73 63 68 65  ..ifcapable sche
45b0: 6d 61 5f 76 65 72 73 69 6f 6e 20 7b 0a 0a 23 20  ma_version {..# 
45c0: 46 69 72 73 74 20 63 68 65 63 6b 20 74 68 61 74  First check that
45d0: 20 77 65 20 63 61 6e 20 73 65 74 20 74 68 65 20   we can set the 
45e0: 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 20 61  schema version a
45f0: 6e 64 20 74 68 65 6e 20 72 65 74 72 69 65 76 65  nd then retrieve
4600: 20 74 68 65 0a 23 20 73 61 6d 65 20 76 61 6c 75   the.# same valu
4610: 65 2e 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  e..do_test pragm
4620: 61 2d 38 2e 31 2e 31 20 7b 0a 20 20 65 78 65 63  a-8.1.1 {.  exec
4630: 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41  sql {.    PRAGMA
4640: 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 20   schema_version 
4650: 3d 20 31 30 35 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a  = 105;.  }.} {}.
4660: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38  do_test pragma-8
4670: 2e 31 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c  .1.2 {.  execsql
4680: 32 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 73  2 {.    PRAGMA s
4690: 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 3b 0a 20  chema_version;. 
46a0: 20 7d 0a 7d 20 7b 73 63 68 65 6d 61 5f 76 65 72   }.} {schema_ver
46b0: 73 69 6f 6e 20 31 30 35 7d 0a 64 6f 5f 74 65 73  sion 105}.do_tes
46c0: 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e 33 20 7b  t pragma-8.1.3 {
46d0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
46e0: 20 50 52 41 47 4d 41 20 73 63 68 65 6d 61 5f 76   PRAGMA schema_v
46f0: 65 72 73 69 6f 6e 20 3d 20 31 30 36 3b 0a 20 20  ersion = 106;.  
4700: 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 70  }.} {}.do_test p
4710: 72 61 67 6d 61 2d 38 2e 31 2e 34 20 7b 0a 20 20  ragma-8.1.4 {.  
4720: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52  execsql {.    PR
4730: 41 47 4d 41 20 73 63 68 65 6d 61 5f 76 65 72 73  AGMA schema_vers
4740: 69 6f 6e 3b 0a 20 20 7d 0a 7d 20 31 30 36 0a 0a  ion;.  }.} 106..
4750: 23 20 43 68 65 63 6b 20 74 68 61 74 20 63 72 65  # Check that cre
4760: 61 74 69 6e 67 20 61 20 74 61 62 6c 65 20 6d 6f  ating a table mo
4770: 64 69 66 69 65 73 20 74 68 65 20 73 63 68 65 6d  difies the schem
4780: 61 2d 76 65 72 73 69 6f 6e 20 28 74 68 69 73 20  a-version (this 
4790: 69 73 20 72 65 61 6c 6c 79 0a 23 20 74 6f 20 76  is really.# to v
47a0: 65 72 69 66 79 20 74 68 61 74 20 74 68 65 20 76  erify that the v
47b0: 61 6c 75 65 20 62 65 69 6e 67 20 72 65 61 64 20  alue being read 
47c0: 69 73 20 69 6e 20 66 61 63 74 20 74 68 65 20 73  is in fact the s
47d0: 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 29 2e 0a  chema version)..
47e0: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38  do_test pragma-8
47f0: 2e 31 2e 35 20 7b 0a 20 20 65 78 65 63 73 71 6c  .1.5 {.  execsql
4800: 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41   {.    CREATE TA
4810: 42 4c 45 20 74 34 28 61 2c 20 62 2c 20 63 29 3b  BLE t4(a, b, c);
4820: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
4830: 20 74 34 20 56 41 4c 55 45 53 28 31 2c 20 32 2c   t4 VALUES(1, 2,
4840: 20 33 29 3b 0a 20 20 20 20 53 45 4c 45 43 54 20   3);.    SELECT 
4850: 2a 20 46 52 4f 4d 20 74 34 3b 0a 20 20 7d 0a 7d  * FROM t4;.  }.}
4860: 20 7b 31 20 32 20 33 7d 0a 64 6f 5f 74 65 73 74   {1 2 3}.do_test
4870: 20 70 72 61 67 6d 61 2d 38 2e 31 2e 36 20 7b 0a   pragma-8.1.6 {.
4880: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
4890: 50 52 41 47 4d 41 20 73 63 68 65 6d 61 5f 76 65  PRAGMA schema_ve
48a0: 72 73 69 6f 6e 3b 0a 20 20 7d 0a 7d 20 31 30 37  rsion;.  }.} 107
48b0: 0a 0a 23 20 4e 6f 77 20 6f 70 65 6e 20 61 20 73  ..# Now open a s
48c0: 65 63 6f 6e 64 20 63 6f 6e 6e 65 63 74 69 6f 6e  econd connection
48d0: 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65   to the database
48e0: 2e 20 45 6e 73 75 72 65 20 74 68 61 74 20 63 68  . Ensure that ch
48f0: 61 6e 67 69 6e 67 20 74 68 65 0a 23 20 73 63 68  anging the.# sch
4900: 65 6d 61 2d 76 65 72 73 69 6f 6e 20 75 73 69 6e  ema-version usin
4910: 67 20 74 68 65 20 66 69 72 73 74 20 63 6f 6e 6e  g the first conn
4920: 65 63 74 69 6f 6e 20 66 6f 72 63 65 73 20 74 68  ection forces th
4930: 65 20 73 65 63 6f 6e 64 20 63 6f 6e 6e 65 63 74  e second connect
4940: 69 6f 6e 0a 23 20 74 6f 20 72 65 6c 6f 61 64 20  ion.# to reload 
4950: 74 68 65 20 73 63 68 65 6d 61 2e 20 54 68 69 73  the schema. This
4960: 20 68 61 73 20 74 6f 20 62 65 20 64 6f 6e 65 20   has to be done 
4970: 75 73 69 6e 67 20 74 68 65 20 43 2d 41 50 49 20  using the C-API 
4980: 74 65 73 74 20 66 75 6e 63 74 69 6f 6e 73 2c 0a  test functions,.
4990: 23 20 62 65 63 61 75 73 65 20 74 68 65 20 54 43  # because the TC
49a0: 4c 20 41 50 49 20 61 63 63 6f 75 6e 74 73 20 66  L API accounts f
49b0: 6f 72 20 53 43 48 45 4d 41 5f 45 52 52 4f 52 20  or SCHEMA_ERROR 
49c0: 61 6e 64 20 72 65 74 72 69 65 73 20 74 68 65 20  and retries the 
49d0: 71 75 65 72 79 2e 0a 64 6f 5f 74 65 73 74 20 70  query..do_test p
49e0: 72 61 67 6d 61 2d 38 2e 31 2e 37 20 7b 0a 20 20  ragma-8.1.7 {.  
49f0: 73 71 6c 69 74 65 33 20 64 62 32 20 74 65 73 74  sqlite3 db2 test
4a00: 2e 64 62 3b 20 73 65 74 20 3a 3a 44 42 32 20 5b  .db; set ::DB2 [
4a10: 73 71 6c 69 74 65 33 5f 63 6f 6e 6e 65 63 74 69  sqlite3_connecti
4a20: 6f 6e 5f 70 6f 69 6e 74 65 72 20 64 62 32 5d 0a  on_pointer db2].
4a30: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
4a40: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 34  SELECT * FROM t4
4a50: 3b 0a 20 20 7d 20 64 62 32 0a 7d 20 7b 31 20 32  ;.  } db2.} {1 2
4a60: 20 33 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67   3}.do_test prag
4a70: 6d 61 2d 38 2e 31 2e 38 20 7b 0a 20 20 65 78 65  ma-8.1.8 {.  exe
4a80: 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d  csql {.    PRAGM
4a90: 41 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e  A schema_version
4aa0: 20 3d 20 31 30 38 3b 0a 20 20 7d 0a 7d 20 7b 7d   = 108;.  }.} {}
4ab0: 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d  .do_test pragma-
4ac0: 38 2e 31 2e 39 20 7b 0a 20 20 73 65 74 20 3a 3a  8.1.9 {.  set ::
4ad0: 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72  STMT [sqlite3_pr
4ae0: 65 70 61 72 65 20 24 3a 3a 44 42 32 20 22 53 45  epare $::DB2 "SE
4af0: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 34 22 20  LECT * FROM t4" 
4b00: 2d 31 20 44 55 4d 4d 59 5d 0a 20 20 73 71 6c 69  -1 DUMMY].  sqli
4b10: 74 65 33 5f 73 74 65 70 20 24 3a 3a 53 54 4d 54  te3_step $::STMT
4b20: 0a 7d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 0a  .} SQLITE_ERROR.
4b30: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38  do_test pragma-8
4b40: 2e 31 2e 31 30 20 7b 0a 20 20 73 71 6c 69 74 65  .1.10 {.  sqlite
4b50: 33 5f 66 69 6e 61 6c 69 7a 65 20 24 3a 3a 53 54  3_finalize $::ST
4b60: 4d 54 0a 7d 20 53 51 4c 49 54 45 5f 53 43 48 45  MT.} SQLITE_SCHE
4b70: 4d 41 0a 0a 23 20 4d 61 6b 65 20 73 75 72 65 20  MA..# Make sure 
4b80: 74 68 65 20 73 63 68 65 6d 61 2d 76 65 72 73 69  the schema-versi
4b90: 6f 6e 20 63 61 6e 20 62 65 20 6d 61 6e 69 70 75  on can be manipu
4ba0: 6c 61 74 65 64 20 69 6e 20 61 6e 20 61 74 74 61  lated in an atta
4bb0: 63 68 65 64 20 64 61 74 61 62 61 73 65 2e 0a 66  ched database..f
4bc0: 6f 72 63 65 64 65 6c 65 74 65 20 74 65 73 74 32  orcedelete test2
4bd0: 2e 64 62 0a 66 6f 72 63 65 64 65 6c 65 74 65 20  .db.forcedelete 
4be0: 74 65 73 74 32 2e 64 62 2d 6a 6f 75 72 6e 61 6c  test2.db-journal
4bf0: 0a 69 66 63 61 70 61 62 6c 65 20 61 74 74 61 63  .ifcapable attac
4c00: 68 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 70 72  h {.  do_test pr
4c10: 61 67 6d 61 2d 38 2e 31 2e 31 31 20 7b 0a 20 20  agma-8.1.11 {.  
4c20: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
4c30: 20 20 41 54 54 41 43 48 20 27 74 65 73 74 32 2e    ATTACH 'test2.
4c40: 64 62 27 20 41 53 20 61 75 78 3b 0a 20 20 20 20  db' AS aux;.    
4c50: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 61    CREATE TABLE a
4c60: 75 78 2e 74 31 28 61 2c 20 62 2c 20 63 29 3b 0a  ux.t1(a, b, c);.
4c70: 20 20 20 20 20 20 50 52 41 47 4d 41 20 61 75 78        PRAGMA aux
4c80: 2e 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 20  .schema_version 
4c90: 3d 20 32 30 35 3b 0a 20 20 20 20 7d 0a 20 20 7d  = 205;.    }.  }
4ca0: 20 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72   {}.  do_test pr
4cb0: 61 67 6d 61 2d 38 2e 31 2e 31 32 20 7b 0a 20 20  agma-8.1.12 {.  
4cc0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
4cd0: 20 20 50 52 41 47 4d 41 20 61 75 78 2e 73 63 68    PRAGMA aux.sch
4ce0: 65 6d 61 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 20  ema_version;.   
4cf0: 20 7d 0a 20 20 7d 20 32 30 35 0a 7d 0a 64 6f 5f   }.  } 205.}.do_
4d00: 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e  test pragma-8.1.
4d10: 31 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  13 {.  execsql {
4d20: 0a 20 20 20 20 50 52 41 47 4d 41 20 73 63 68 65  .    PRAGMA sche
4d30: 6d 61 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 7d 0a  ma_version;.  }.
4d40: 7d 20 31 30 38 0a 0a 23 20 41 6e 64 20 63 68 65  } 108..# And che
4d50: 63 6b 20 74 68 61 74 20 6d 6f 64 69 66 79 69 6e  ck that modifyin
4d60: 67 20 74 68 65 20 73 63 68 65 6d 61 2d 76 65 72  g the schema-ver
4d70: 73 69 6f 6e 20 69 6e 20 61 6e 20 61 74 74 61 63  sion in an attac
4d80: 68 65 64 20 64 61 74 61 62 61 73 65 0a 23 20 66  hed database.# f
4d90: 6f 72 63 65 73 20 74 68 65 20 73 65 63 6f 6e 64  orces the second
4da0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 72   connection to r
4db0: 65 6c 6f 61 64 20 74 68 65 20 73 63 68 65 6d 61  eload the schema
4dc0: 2e 0a 69 66 63 61 70 61 62 6c 65 20 61 74 74 61  ..ifcapable atta
4dd0: 63 68 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 70  ch {.  do_test p
4de0: 72 61 67 6d 61 2d 38 2e 31 2e 31 34 20 7b 0a 20  ragma-8.1.14 {. 
4df0: 20 20 20 73 71 6c 69 74 65 33 20 64 62 32 20 74     sqlite3 db2 t
4e00: 65 73 74 2e 64 62 3b 20 73 65 74 20 3a 3a 44 42  est.db; set ::DB
4e10: 32 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6e 6e 65  2 [sqlite3_conne
4e20: 63 74 69 6f 6e 5f 70 6f 69 6e 74 65 72 20 64 62  ction_pointer db
4e30: 32 5d 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b  2].    execsql {
4e40: 0a 20 20 20 20 20 20 41 54 54 41 43 48 20 27 74  .      ATTACH 't
4e50: 65 73 74 32 2e 64 62 27 20 41 53 20 61 75 78 3b  est2.db' AS aux;
4e60: 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20 2a 20  .      SELECT * 
4e70: 46 52 4f 4d 20 61 75 78 2e 74 31 3b 0a 20 20 20  FROM aux.t1;.   
4e80: 20 7d 20 64 62 32 0a 20 20 7d 20 7b 7d 0a 20 20   } db2.  } {}.  
4e90: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38  do_test pragma-8
4ea0: 2e 31 2e 31 35 20 7b 0a 20 20 20 20 65 78 65 63  .1.15 {.    exec
4eb0: 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47  sql {.      PRAG
4ec0: 4d 41 20 61 75 78 2e 73 63 68 65 6d 61 5f 76 65  MA aux.schema_ve
4ed0: 72 73 69 6f 6e 20 3d 20 32 30 36 3b 0a 20 20 20  rsion = 206;.   
4ee0: 20 7d 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74   }.  } {}.  do_t
4ef0: 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e 31  est pragma-8.1.1
4f00: 36 20 7b 0a 20 20 20 20 73 65 74 20 3a 3a 53 54  6 {.    set ::ST
4f10: 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70  MT [sqlite3_prep
4f20: 61 72 65 20 24 3a 3a 44 42 32 20 22 53 45 4c 45  are $::DB2 "SELE
4f30: 43 54 20 2a 20 46 52 4f 4d 20 61 75 78 2e 74 31  CT * FROM aux.t1
4f40: 22 20 2d 31 20 44 55 4d 4d 59 5d 0a 20 20 20 20  " -1 DUMMY].    
4f50: 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 3a 3a  sqlite3_step $::
4f60: 53 54 4d 54 0a 20 20 7d 20 53 51 4c 49 54 45 5f  STMT.  } SQLITE_
4f70: 45 52 52 4f 52 0a 20 20 64 6f 5f 74 65 73 74 20  ERROR.  do_test 
4f80: 70 72 61 67 6d 61 2d 38 2e 31 2e 31 37 20 7b 0a  pragma-8.1.17 {.
4f90: 20 20 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61      sqlite3_fina
4fa0: 6c 69 7a 65 20 24 3a 3a 53 54 4d 54 0a 20 20 7d  lize $::STMT.  }
4fb0: 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 0a 20   SQLITE_SCHEMA. 
4fc0: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
4fd0: 38 2e 31 2e 31 38 20 7b 0a 20 20 20 20 64 62 32  8.1.18 {.    db2
4fe0: 20 63 6c 6f 73 65 0a 20 20 7d 20 7b 7d 0a 7d 0a   close.  } {}.}.
4ff0: 0a 23 20 4e 6f 77 20 74 65 73 74 20 74 68 61 74  .# Now test that
5000: 20 74 68 65 20 75 73 65 72 2d 76 65 72 73 69 6f   the user-versio
5010: 6e 20 63 61 6e 20 62 65 20 72 65 61 64 20 61 6e  n can be read an
5020: 64 20 77 72 69 74 74 65 6e 20 28 61 6e 64 20 74  d written (and t
5030: 68 61 74 20 77 65 20 61 72 65 6e 27 74 0a 23 20  hat we aren't.# 
5040: 61 63 63 69 64 65 6e 74 61 6c 6c 79 20 6d 61 6e  accidentally man
5050: 69 70 75 6c 61 74 69 6e 67 20 74 68 65 20 73 63  ipulating the sc
5060: 68 65 6d 61 2d 76 65 72 73 69 6f 6e 20 69 6e 73  hema-version ins
5070: 74 65 61 64 29 2e 0a 64 6f 5f 74 65 73 74 20 70  tead)..do_test p
5080: 72 61 67 6d 61 2d 38 2e 32 2e 31 20 7b 0a 20 20  ragma-8.2.1 {.  
5090: 65 78 65 63 73 71 6c 32 20 7b 0a 20 20 20 20 50  execsql2 {.    P
50a0: 52 41 47 4d 41 20 75 73 65 72 5f 76 65 72 73 69  RAGMA user_versi
50b0: 6f 6e 3b 0a 20 20 7d 0a 7d 20 7b 75 73 65 72 5f  on;.  }.} {user_
50c0: 76 65 72 73 69 6f 6e 20 30 7d 0a 64 6f 5f 74 65  version 0}.do_te
50d0: 73 74 20 70 72 61 67 6d 61 2d 38 2e 32 2e 32 20  st pragma-8.2.2 
50e0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
50f0: 20 20 50 52 41 47 4d 41 20 75 73 65 72 5f 76 65    PRAGMA user_ve
5100: 72 73 69 6f 6e 20 3d 20 32 3b 0a 20 20 7d 0a 7d  rsion = 2;.  }.}
5110: 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67   {}.do_test prag
5120: 6d 61 2d 38 2e 32 2e 33 2e 31 20 7b 0a 20 20 65  ma-8.2.3.1 {.  e
5130: 78 65 63 73 71 6c 32 20 7b 0a 20 20 20 20 50 52  xecsql2 {.    PR
5140: 41 47 4d 41 20 75 73 65 72 5f 76 65 72 73 69 6f  AGMA user_versio
5150: 6e 3b 0a 20 20 7d 0a 7d 20 7b 75 73 65 72 5f 76  n;.  }.} {user_v
5160: 65 72 73 69 6f 6e 20 32 7d 0a 64 6f 5f 74 65 73  ersion 2}.do_tes
5170: 74 20 70 72 61 67 6d 61 2d 38 2e 32 2e 33 2e 32  t pragma-8.2.3.2
5180: 20 7b 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20 20   {.  db close.  
5190: 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e  sqlite3 db test.
51a0: 64 62 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  db.  execsql {. 
51b0: 20 20 20 50 52 41 47 4d 41 20 75 73 65 72 5f 76     PRAGMA user_v
51c0: 65 72 73 69 6f 6e 3b 0a 20 20 7d 0a 7d 20 7b 32  ersion;.  }.} {2
51d0: 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  }.do_test pragma
51e0: 2d 38 2e 32 2e 34 2e 31 20 7b 0a 20 20 65 78 65  -8.2.4.1 {.  exe
51f0: 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d  csql {.    PRAGM
5200: 41 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e  A schema_version
5210: 3b 0a 20 20 7d 0a 7d 20 7b 31 30 38 7d 0a 69 66  ;.  }.} {108}.if
5220: 63 61 70 61 62 6c 65 20 76 61 63 75 75 6d 20 7b  capable vacuum {
5230: 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .  do_test pragm
5240: 61 2d 38 2e 32 2e 34 2e 32 20 7b 0a 20 20 20 20  a-8.2.4.2 {.    
5250: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
5260: 56 41 43 55 55 4d 3b 0a 20 20 20 20 20 20 50 52  VACUUM;.      PR
5270: 41 47 4d 41 20 75 73 65 72 5f 76 65 72 73 69 6f  AGMA user_versio
5280: 6e 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 32 7d  n;.    }.  } {2}
5290: 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .  do_test pragm
52a0: 61 2d 38 2e 32 2e 34 2e 33 20 7b 0a 20 20 20 20  a-8.2.4.3 {.    
52b0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
52c0: 50 52 41 47 4d 41 20 73 63 68 65 6d 61 5f 76 65  PRAGMA schema_ve
52d0: 72 73 69 6f 6e 3b 0a 20 20 20 20 7d 0a 20 20 7d  rsion;.    }.  }
52e0: 20 7b 31 30 39 7d 0a 7d 0a 0a 69 66 63 61 70 61   {109}.}..ifcapa
52f0: 62 6c 65 20 61 74 74 61 63 68 20 7b 0a 20 20 64  ble attach {.  d
5300: 62 20 65 76 61 6c 20 7b 41 54 54 41 43 48 20 27  b eval {ATTACH '
5310: 74 65 73 74 32 2e 64 62 27 20 41 53 20 61 75 78  test2.db' AS aux
5320: 7d 0a 20 20 0a 20 20 23 20 43 68 65 63 6b 20 74  }.  .  # Check t
5330: 68 61 74 20 74 68 65 20 75 73 65 72 2d 76 65 72  hat the user-ver
5340: 73 69 6f 6e 20 69 6e 20 74 68 65 20 61 75 78 69  sion in the auxi
5350: 6c 61 72 79 20 64 61 74 61 62 61 73 65 20 63 61  lary database ca
5360: 6e 20 62 65 20 6d 61 6e 69 70 75 6c 61 74 65 64  n be manipulated
5370: 20 28 0a 20 20 23 20 61 6e 64 20 74 68 61 74 20   (.  # and that 
5380: 77 65 20 61 72 65 6e 27 74 20 61 63 63 69 64 65  we aren't accide
5390: 6e 74 61 6c 6c 79 20 6d 61 6e 69 70 75 6c 61 74  ntally manipulat
53a0: 69 6e 67 20 74 68 65 20 73 61 6d 65 20 69 6e 20  ing the same in 
53b0: 74 68 65 20 6d 61 69 6e 20 64 62 29 2e 0a 20 20  the main db)..  
53c0: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38  do_test pragma-8
53d0: 2e 32 2e 35 20 7b 0a 20 20 20 20 65 78 65 63 73  .2.5 {.    execs
53e0: 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d  ql {.      PRAGM
53f0: 41 20 61 75 78 2e 75 73 65 72 5f 76 65 72 73 69  A aux.user_versi
5400: 6f 6e 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 30  on;.    }.  } {0
5410: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67  }.  do_test prag
5420: 6d 61 2d 38 2e 32 2e 36 20 7b 0a 20 20 20 20 65  ma-8.2.6 {.    e
5430: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50  xecsql {.      P
5440: 52 41 47 4d 41 20 61 75 78 2e 75 73 65 72 5f 76  RAGMA aux.user_v
5450: 65 72 73 69 6f 6e 20 3d 20 33 3b 0a 20 20 20 20  ersion = 3;.    
5460: 7d 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65  }.  } {}.  do_te
5470: 73 74 20 70 72 61 67 6d 61 2d 38 2e 32 2e 37 20  st pragma-8.2.7 
5480: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a  {.    execsql {.
5490: 20 20 20 20 20 20 50 52 41 47 4d 41 20 61 75 78        PRAGMA aux
54a0: 2e 75 73 65 72 5f 76 65 72 73 69 6f 6e 3b 0a 20  .user_version;. 
54b0: 20 20 20 7d 0a 20 20 7d 20 7b 33 7d 0a 20 20 64     }.  } {3}.  d
54c0: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e  o_test pragma-8.
54d0: 32 2e 38 20 7b 0a 20 20 20 20 65 78 65 63 73 71  2.8 {.    execsq
54e0: 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41  l {.      PRAGMA
54f0: 20 6d 61 69 6e 2e 75 73 65 72 5f 76 65 72 73 69   main.user_versi
5500: 6f 6e 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 32  on;.    }.  } {2
5510: 7d 0a 20 20 0a 20 20 23 20 4e 6f 77 20 63 68 65  }.  .  # Now che
5520: 63 6b 20 74 68 61 74 20 61 20 52 4f 4c 4c 42 41  ck that a ROLLBA
5530: 43 4b 20 72 65 73 65 74 73 20 74 68 65 20 75 73  CK resets the us
5540: 65 72 2d 76 65 72 73 69 6f 6e 20 69 66 20 69 74  er-version if it
5550: 20 68 61 73 20 62 65 65 6e 20 6d 6f 64 69 66 69   has been modifi
5560: 65 64 0a 20 20 23 20 77 69 74 68 69 6e 20 61 20  ed.  # within a 
5570: 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 20 20 64  transaction..  d
5580: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e  o_test pragma-8.
5590: 32 2e 39 20 7b 0a 20 20 20 20 65 78 65 63 73 71  2.9 {.    execsq
55a0: 6c 20 7b 0a 20 20 20 20 20 20 42 45 47 49 4e 3b  l {.      BEGIN;
55b0: 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 61 75  .      PRAGMA au
55c0: 78 2e 75 73 65 72 5f 76 65 72 73 69 6f 6e 20 3d  x.user_version =
55d0: 20 31 30 3b 0a 20 20 20 20 20 20 50 52 41 47 4d   10;.      PRAGM
55e0: 41 20 75 73 65 72 5f 76 65 72 73 69 6f 6e 20 3d  A user_version =
55f0: 20 31 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b   11;.    }.  } {
5600: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67  }.  do_test prag
5610: 6d 61 2d 38 2e 32 2e 31 30 20 7b 0a 20 20 20 20  ma-8.2.10 {.    
5620: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
5630: 50 52 41 47 4d 41 20 61 75 78 2e 75 73 65 72 5f  PRAGMA aux.user_
5640: 76 65 72 73 69 6f 6e 3b 0a 20 20 20 20 7d 0a 20  version;.    }. 
5650: 20 7d 20 7b 31 30 7d 0a 20 20 64 6f 5f 74 65 73   } {10}.  do_tes
5660: 74 20 70 72 61 67 6d 61 2d 38 2e 32 2e 31 31 20  t pragma-8.2.11 
5670: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a  {.    execsql {.
5680: 20 20 20 20 20 20 50 52 41 47 4d 41 20 6d 61 69        PRAGMA mai
5690: 6e 2e 75 73 65 72 5f 76 65 72 73 69 6f 6e 3b 0a  n.user_version;.
56a0: 20 20 20 20 7d 0a 20 20 7d 20 7b 31 31 7d 0a 20      }.  } {11}. 
56b0: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
56c0: 38 2e 32 2e 31 32 20 7b 0a 20 20 20 20 65 78 65  8.2.12 {.    exe
56d0: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 52 4f 4c  csql {.      ROL
56e0: 4c 42 41 43 4b 3b 0a 20 20 20 20 20 20 50 52 41  LBACK;.      PRA
56f0: 47 4d 41 20 61 75 78 2e 75 73 65 72 5f 76 65 72  GMA aux.user_ver
5700: 73 69 6f 6e 3b 0a 20 20 20 20 7d 0a 20 20 7d 20  sion;.    }.  } 
5710: 7b 33 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72  {3}.  do_test pr
5720: 61 67 6d 61 2d 38 2e 32 2e 31 33 20 7b 0a 20 20  agma-8.2.13 {.  
5730: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
5740: 20 20 50 52 41 47 4d 41 20 6d 61 69 6e 2e 75 73    PRAGMA main.us
5750: 65 72 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 20 20  er_version;.    
5760: 7d 0a 20 20 7d 20 7b 32 7d 0a 7d 0a 0a 23 20 54  }.  } {2}.}..# T
5770: 72 79 20 61 20 6e 65 67 61 74 69 76 65 20 76 61  ry a negative va
5780: 6c 75 65 20 66 6f 72 20 74 68 65 20 75 73 65 72  lue for the user
5790: 2d 76 65 72 73 69 6f 6e 0a 64 6f 5f 74 65 73 74  -version.do_test
57a0: 20 70 72 61 67 6d 61 2d 38 2e 32 2e 31 34 20 7b   pragma-8.2.14 {
57b0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
57c0: 20 50 52 41 47 4d 41 20 75 73 65 72 5f 76 65 72   PRAGMA user_ver
57d0: 73 69 6f 6e 20 3d 20 2d 34 35 30 3b 0a 20 20 7d  sion = -450;.  }
57e0: 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 70 72  .} {}.do_test pr
57f0: 61 67 6d 61 2d 38 2e 32 2e 31 35 20 7b 0a 20 20  agma-8.2.15 {.  
5800: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52  execsql {.    PR
5810: 41 47 4d 41 20 75 73 65 72 5f 76 65 72 73 69 6f  AGMA user_versio
5820: 6e 3b 0a 20 20 7d 0a 7d 20 7b 2d 34 35 30 7d 0a  n;.  }.} {-450}.
5830: 7d 20 3b 20 23 20 69 66 63 61 70 61 62 6c 65 20  } ; # ifcapable 
5840: 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 0a 0a  schema_version..
5850: 23 20 43 68 65 63 6b 20 74 6f 20 73 65 65 20 69  # Check to see i
5860: 66 20 54 45 4d 50 5f 53 54 4f 52 45 20 69 73 20  f TEMP_STORE is 
5870: 6d 65 6d 6f 72 79 20 6f 72 20 64 69 73 6b 2e 20  memory or disk. 
5880: 20 52 65 74 75 72 6e 20 73 74 72 69 6e 67 73 0a   Return strings.
5890: 23 20 22 6d 65 6d 6f 72 79 22 20 6f 72 20 22 64  # "memory" or "d
58a0: 69 73 6b 22 20 61 73 20 61 70 70 72 6f 70 72 69  isk" as appropri
58b0: 61 74 65 2e 0a 23 0a 70 72 6f 63 20 63 68 65 63  ate..#.proc chec
58c0: 6b 5f 74 65 6d 70 5f 73 74 6f 72 65 20 7b 7d 20  k_temp_store {} 
58d0: 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 43 52 45  {.  db eval {CRE
58e0: 41 54 45 20 54 45 4d 50 20 54 41 42 4c 45 20 49  ATE TEMP TABLE I
58f0: 46 20 4e 4f 54 20 45 58 49 53 54 53 20 61 28 62  F NOT EXISTS a(b
5900: 29 7d 0a 20 20 64 62 20 65 76 61 6c 20 7b 50 52  )}.  db eval {PR
5910: 41 47 4d 41 20 64 61 74 61 62 61 73 65 5f 6c 69  AGMA database_li
5920: 73 74 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 6e  st} {.    if {$n
5930: 61 6d 65 3d 3d 22 74 65 6d 70 22 7d 20 7b 0a 20  ame=="temp"} {. 
5940: 20 20 20 20 20 73 65 74 20 62 74 20 5b 62 74 72       set bt [btr
5950: 65 65 5f 66 72 6f 6d 5f 64 62 20 64 62 20 31 5d  ee_from_db db 1]
5960: 0a 20 20 20 20 20 20 69 66 20 7b 5b 62 74 72 65  .      if {[btre
5970: 65 5f 69 73 6d 65 6d 64 62 20 24 62 74 5d 7d 20  e_ismemdb $bt]} 
5980: 7b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  {.        return
5990: 20 22 6d 65 6d 6f 72 79 22 0a 20 20 20 20 20 20   "memory".      
59a0: 7d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 22  }.      return "
59b0: 64 69 73 6b 22 0a 20 20 20 20 7d 0a 20 20 7d 0a  disk".    }.  }.
59c0: 20 20 72 65 74 75 72 6e 20 22 75 6e 6b 6e 6f 77    return "unknow
59d0: 6e 22 0a 7d 0a 0a 0a 23 20 54 65 73 74 20 74 65  n".}...# Test te
59e0: 6d 70 5f 73 74 6f 72 65 20 61 6e 64 20 74 65 6d  mp_store and tem
59f0: 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72  p_store_director
5a00: 79 20 70 72 61 67 6d 61 73 0a 23 0a 69 66 63 61  y pragmas.#.ifca
5a10: 70 61 62 6c 65 20 70 61 67 65 72 5f 70 72 61 67  pable pager_prag
5a20: 6d 61 73 20 7b 0a 64 6f 5f 74 65 73 74 20 70 72  mas {.do_test pr
5a30: 61 67 6d 61 2d 39 2e 31 20 7b 0a 20 20 64 62 20  agma-9.1 {.  db 
5a40: 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74 65 33 20  close.  sqlite3 
5a50: 64 62 20 74 65 73 74 2e 64 62 0a 20 20 65 78 65  db test.db.  exe
5a60: 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d  csql {.    PRAGM
5a70: 41 20 74 65 6d 70 5f 73 74 6f 72 65 3b 0a 20 20  A temp_store;.  
5a80: 7d 0a 7d 20 7b 30 7d 0a 69 66 20 7b 24 54 45 4d  }.} {0}.if {$TEM
5a90: 50 5f 53 54 4f 52 45 3c 3d 31 7d 20 7b 0a 20 20  P_STORE<=1} {.  
5aa0: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 39  do_test pragma-9
5ab0: 2e 31 2e 31 20 7b 0a 20 20 20 20 63 68 65 63 6b  .1.1 {.    check
5ac0: 5f 74 65 6d 70 5f 73 74 6f 72 65 0a 20 20 7d 20  _temp_store.  } 
5ad0: 7b 64 69 73 6b 7d 0a 7d 20 65 6c 73 65 20 7b 0a  {disk}.} else {.
5ae0: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
5af0: 2d 39 2e 31 2e 31 20 7b 0a 20 20 20 20 63 68 65  -9.1.1 {.    che
5b00: 63 6b 5f 74 65 6d 70 5f 73 74 6f 72 65 0a 20 20  ck_temp_store.  
5b10: 7d 20 7b 6d 65 6d 6f 72 79 7d 0a 7d 0a 0a 64 6f  } {memory}.}..do
5b20: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 39 2e 32  _test pragma-9.2
5b30: 20 7b 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20 20   {.  db close.  
5b40: 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e  sqlite3 db test.
5b50: 64 62 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  db.  execsql {. 
5b60: 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73     PRAGMA temp_s
5b70: 74 6f 72 65 3d 66 69 6c 65 3b 0a 20 20 20 20 50  tore=file;.    P
5b80: 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65  RAGMA temp_store
5b90: 3b 0a 20 20 7d 0a 7d 20 7b 31 7d 0a 69 66 20 7b  ;.  }.} {1}.if {
5ba0: 24 54 45 4d 50 5f 53 54 4f 52 45 3d 3d 33 7d 20  $TEMP_STORE==3} 
5bb0: 7b 0a 20 20 23 20 57 68 65 6e 20 54 45 4d 50 5f  {.  # When TEMP_
5bc0: 53 54 4f 52 45 20 69 73 20 33 2c 20 61 6c 77 61  STORE is 3, alwa
5bd0: 79 73 20 75 73 65 20 6d 65 6d 6f 72 79 20 72 65  ys use memory re
5be0: 67 61 72 64 6c 65 73 73 20 6f 66 20 70 72 61 67  gardless of prag
5bf0: 6d 61 20 73 65 74 74 69 6e 67 73 2e 0a 20 20 64  ma settings..  d
5c00: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 39 2e  o_test pragma-9.
5c10: 32 2e 31 20 7b 0a 20 20 20 20 63 68 65 63 6b 5f  2.1 {.    check_
5c20: 74 65 6d 70 5f 73 74 6f 72 65 0a 20 20 7d 20 7b  temp_store.  } {
5c30: 6d 65 6d 6f 72 79 7d 0a 7d 20 65 6c 73 65 20 7b  memory}.} else {
5c40: 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .  do_test pragm
5c50: 61 2d 39 2e 32 2e 31 20 7b 0a 20 20 20 20 63 68  a-9.2.1 {.    ch
5c60: 65 63 6b 5f 74 65 6d 70 5f 73 74 6f 72 65 0a 20  eck_temp_store. 
5c70: 20 7d 20 7b 64 69 73 6b 7d 0a 7d 0a 0a 64 6f 5f   } {disk}.}..do_
5c80: 74 65 73 74 20 70 72 61 67 6d 61 2d 39 2e 33 20  test pragma-9.3 
5c90: 7b 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 73  {.  db close.  s
5ca0: 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64  qlite3 db test.d
5cb0: 62 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  b.  execsql {.  
5cc0: 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74    PRAGMA temp_st
5cd0: 6f 72 65 3d 6d 65 6d 6f 72 79 3b 0a 20 20 20 20  ore=memory;.    
5ce0: 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72  PRAGMA temp_stor
5cf0: 65 3b 0a 20 20 7d 0a 7d 20 7b 32 7d 0a 69 66 20  e;.  }.} {2}.if 
5d00: 7b 24 54 45 4d 50 5f 53 54 4f 52 45 3d 3d 30 7d  {$TEMP_STORE==0}
5d10: 20 7b 0a 20 20 23 20 57 68 65 6e 20 54 45 4d 50   {.  # When TEMP
5d20: 5f 53 54 4f 52 45 20 69 73 20 30 2c 20 61 6c 77  _STORE is 0, alw
5d30: 61 79 73 20 75 73 65 20 74 68 65 20 64 69 73 6b  ays use the disk
5d40: 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 70   regardless of p
5d50: 72 61 67 6d 61 20 73 65 74 74 69 6e 67 73 2e 0a  ragma settings..
5d60: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
5d70: 2d 39 2e 33 2e 31 20 7b 0a 20 20 20 20 63 68 65  -9.3.1 {.    che
5d80: 63 6b 5f 74 65 6d 70 5f 73 74 6f 72 65 0a 20 20  ck_temp_store.  
5d90: 7d 20 7b 64 69 73 6b 7d 0a 7d 20 65 6c 73 65 20  } {disk}.} else 
5da0: 7b 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67  {.  do_test prag
5db0: 6d 61 2d 39 2e 33 2e 31 20 7b 0a 20 20 20 20 63  ma-9.3.1 {.    c
5dc0: 68 65 63 6b 5f 74 65 6d 70 5f 73 74 6f 72 65 0a  heck_temp_store.
5dd0: 20 20 7d 20 7b 6d 65 6d 6f 72 79 7d 0a 7d 0a 0a    } {memory}.}..
5de0: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 39  do_test pragma-9
5df0: 2e 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .4 {.  execsql {
5e00: 0a 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70  .    PRAGMA temp
5e10: 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79  _store_directory
5e20: 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 69 66 63 61 70  ;.  }.} {}.ifcap
5e30: 61 62 6c 65 20 77 73 64 20 7b 0a 20 20 64 6f 5f  able wsd {.  do_
5e40: 74 65 73 74 20 70 72 61 67 6d 61 2d 39 2e 35 20  test pragma-9.5 
5e50: 7b 0a 20 20 20 20 73 65 74 20 70 77 64 20 5b 73  {.    set pwd [s
5e60: 74 72 69 6e 67 20 6d 61 70 20 7b 27 20 27 27 7d  tring map {' ''}
5e70: 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d   [file nativenam
5e80: 65 20 5b 67 65 74 5f 70 77 64 5d 5d 5d 0a 20 20  e [get_pwd]]].  
5e90: 20 20 65 78 65 63 73 71 6c 20 22 0a 20 20 20 20    execsql ".    
5ea0: 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74    PRAGMA temp_st
5eb0: 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 3d 27 24  ore_directory='$
5ec0: 70 77 64 27 3b 0a 20 20 20 20 22 0a 20 20 7d 20  pwd';.    ".  } 
5ed0: 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61  {}.  do_test pra
5ee0: 67 6d 61 2d 39 2e 36 20 7b 0a 20 20 20 20 65 78  gma-9.6 {.    ex
5ef0: 65 63 73 71 6c 20 7b 20 0a 20 20 20 20 20 20 50  ecsql { .      P
5f00: 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65  RAGMA temp_store
5f10: 5f 64 69 72 65 63 74 6f 72 79 3b 0a 20 20 20 20  _directory;.    
5f20: 7d 0a 20 20 7d 20 5b 6c 69 73 74 20 5b 66 69 6c  }.  } [list [fil
5f30: 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 67 65  e nativename [ge
5f40: 74 5f 70 77 64 5d 5d 5d 0a 20 20 64 6f 5f 74 65  t_pwd]]].  do_te
5f50: 73 74 20 70 72 61 67 6d 61 2d 39 2e 37 20 7b 0a  st pragma-9.7 {.
5f60: 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b 20 0a      catchsql { .
5f70: 20 20 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d        PRAGMA tem
5f80: 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72  p_store_director
5f90: 79 3d 27 2f 4e 4f 4e 2f 45 58 49 53 54 45 4e 54  y='/NON/EXISTENT
5fa0: 2f 50 41 54 48 2f 46 4f 4f 42 41 52 27 3b 0a 20  /PATH/FOOBAR';. 
5fb0: 20 20 20 7d 0a 20 20 7d 20 7b 31 20 7b 6e 6f 74     }.  } {1 {not
5fc0: 20 61 20 77 72 69 74 61 62 6c 65 20 64 69 72 65   a writable dire
5fd0: 63 74 6f 72 79 7d 7d 0a 20 20 64 6f 5f 74 65 73  ctory}}.  do_tes
5fe0: 74 20 70 72 61 67 6d 61 2d 39 2e 38 20 7b 0a 20  t pragma-9.8 {. 
5ff0: 20 20 20 65 78 65 63 73 71 6c 20 7b 20 0a 20 20     execsql { .  
6000: 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f      PRAGMA temp_
6010: 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 3d  store_directory=
6020: 27 27 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 7d  '';.    }.  } {}
6030: 0a 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78  .  if {![info ex
6040: 69 73 74 73 20 54 45 4d 50 5f 53 54 4f 52 45 5d  ists TEMP_STORE]
6050: 20 7c 7c 20 24 54 45 4d 50 5f 53 54 4f 52 45 3c   || $TEMP_STORE<
6060: 3d 31 7d 20 7b 0a 20 20 20 20 69 66 63 61 70 61  =1} {.    ifcapa
6070: 62 6c 65 20 74 65 6d 70 64 62 20 7b 0a 20 20 20  ble tempdb {.   
6080: 20 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d     do_test pragm
6090: 61 2d 39 2e 39 20 7b 0a 20 20 20 20 20 20 20 20  a-9.9 {.        
60a0: 65 78 65 63 73 71 6c 20 7b 20 0a 20 20 20 20 20  execsql { .     
60b0: 20 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70       PRAGMA temp
60c0: 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79  _store_directory
60d0: 3b 0a 20 20 20 20 20 20 20 20 20 20 50 52 41 47  ;.          PRAG
60e0: 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 3d 46 49  MA temp_store=FI
60f0: 4c 45 3b 0a 20 20 20 20 20 20 20 20 20 20 43 52  LE;.          CR
6100: 45 41 54 45 20 54 45 4d 50 20 54 41 42 4c 45 20  EATE TEMP TABLE 
6110: 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63  temp_store_direc
6120: 74 6f 72 79 5f 74 65 73 74 28 61 20 69 6e 74 65  tory_test(a inte
6130: 67 65 72 29 3b 0a 20 20 20 20 20 20 20 20 20 20  ger);.          
6140: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 65 6d 70  INSERT INTO temp
6150: 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79  _store_directory
6160: 5f 74 65 73 74 20 76 61 6c 75 65 73 20 28 32 29  _test values (2)
6170: 3b 0a 20 20 20 20 20 20 20 20 20 20 53 45 4c 45  ;.          SELE
6180: 43 54 20 2a 20 46 52 4f 4d 20 74 65 6d 70 5f 73  CT * FROM temp_s
6190: 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 5f 74  tore_directory_t
61a0: 65 73 74 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  est;.        }. 
61b0: 20 20 20 20 20 7d 20 7b 32 7d 0a 20 20 20 20 20       } {2}.     
61c0: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
61d0: 39 2e 31 30 20 7b 0a 20 20 20 20 20 20 20 20 63  9.10 {.        c
61e0: 61 74 63 68 73 71 6c 20 22 0a 20 20 20 20 20 20  atchsql ".      
61f0: 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f      PRAGMA temp_
6200: 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 3d  store_directory=
6210: 27 24 70 77 64 27 3b 0a 20 20 20 20 20 20 20 20  '$pwd';.        
6220: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
6230: 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63  temp_store_direc
6240: 74 6f 72 79 5f 74 65 73 74 3b 0a 20 20 20 20 20  tory_test;.     
6250: 20 20 20 22 0a 20 20 20 20 20 20 7d 20 7b 31 20     ".      } {1 
6260: 7b 6e 6f 20 73 75 63 68 20 74 61 62 6c 65 3a 20  {no such table: 
6270: 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63  temp_store_direc
6280: 74 6f 72 79 5f 74 65 73 74 7d 7d 0a 20 20 20 20  tory_test}}.    
6290: 7d 0a 20 20 7d 0a 7d 0a 64 6f 5f 74 65 73 74 20  }.  }.}.do_test 
62a0: 70 72 61 67 6d 61 2d 39 2e 31 31 20 7b 0a 20 20  pragma-9.11 {.  
62b0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52  execsql {.    PR
62c0: 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 20  AGMA temp_store 
62d0: 3d 20 30 3b 0a 20 20 20 20 50 52 41 47 4d 41 20  = 0;.    PRAGMA 
62e0: 74 65 6d 70 5f 73 74 6f 72 65 3b 0a 20 20 7d 0a  temp_store;.  }.
62f0: 7d 20 7b 30 7d 0a 64 6f 5f 74 65 73 74 20 70 72  } {0}.do_test pr
6300: 61 67 6d 61 2d 39 2e 31 32 20 7b 0a 20 20 65 78  agma-9.12 {.  ex
6310: 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47  ecsql {.    PRAG
6320: 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 20 3d 20  MA temp_store = 
6330: 31 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 74 65  1;.    PRAGMA te
6340: 6d 70 5f 73 74 6f 72 65 3b 0a 20 20 7d 0a 7d 20  mp_store;.  }.} 
6350: 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67  {1}.do_test prag
6360: 6d 61 2d 39 2e 31 33 20 7b 0a 20 20 65 78 65 63  ma-9.13 {.  exec
6370: 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41  sql {.    PRAGMA
6380: 20 74 65 6d 70 5f 73 74 6f 72 65 20 3d 20 32 3b   temp_store = 2;
6390: 0a 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70  .    PRAGMA temp
63a0: 5f 73 74 6f 72 65 3b 0a 20 20 7d 0a 7d 20 7b 32  _store;.  }.} {2
63b0: 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  }.do_test pragma
63c0: 2d 39 2e 31 34 20 7b 0a 20 20 65 78 65 63 73 71  -9.14 {.  execsq
63d0: 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 74  l {.    PRAGMA t
63e0: 65 6d 70 5f 73 74 6f 72 65 20 3d 20 33 3b 0a 20  emp_store = 3;. 
63f0: 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73     PRAGMA temp_s
6400: 74 6f 72 65 3b 0a 20 20 7d 0a 7d 20 7b 30 7d 0a  tore;.  }.} {0}.
6410: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 39  do_test pragma-9
6420: 2e 31 35 20 7b 0a 20 20 63 61 74 63 68 73 71 6c  .15 {.  catchsql
6430: 20 7b 0a 20 20 20 20 42 45 47 49 4e 20 45 58 43   {.    BEGIN EXC
6440: 4c 55 53 49 56 45 3b 0a 20 20 20 20 43 52 45 41  LUSIVE;.    CREA
6450: 54 45 20 54 45 4d 50 20 54 41 42 4c 45 20 74 65  TE TEMP TABLE te
6460: 6d 70 5f 74 61 62 6c 65 28 74 29 3b 0a 20 20 20  mp_table(t);.   
6470: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 65 6d   INSERT INTO tem
6480: 70 5f 74 61 62 6c 65 20 56 41 4c 55 45 53 28 27  p_table VALUES('
6490: 76 61 6c 75 61 62 6c 65 20 64 61 74 61 27 29 3b  valuable data');
64a0: 0a 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70  .    PRAGMA temp
64b0: 5f 73 74 6f 72 65 20 3d 20 31 3b 0a 20 20 7d 0a  _store = 1;.  }.
64c0: 7d 20 7b 31 20 7b 74 65 6d 70 6f 72 61 72 79 20  } {1 {temporary 
64d0: 73 74 6f 72 61 67 65 20 63 61 6e 6e 6f 74 20 62  storage cannot b
64e0: 65 20 63 68 61 6e 67 65 64 20 66 72 6f 6d 20 77  e changed from w
64f0: 69 74 68 69 6e 20 61 20 74 72 61 6e 73 61 63 74  ithin a transact
6500: 69 6f 6e 7d 7d 0a 64 6f 5f 74 65 73 74 20 70 72  ion}}.do_test pr
6510: 61 67 6d 61 2d 39 2e 31 36 20 7b 0a 20 20 65 78  agma-9.16 {.  ex
6520: 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45  ecsql {.    SELE
6530: 43 54 20 2a 20 46 52 4f 4d 20 74 65 6d 70 5f 74  CT * FROM temp_t
6540: 61 62 6c 65 3b 0a 20 20 20 20 43 4f 4d 4d 49 54  able;.    COMMIT
6550: 3b 0a 20 20 7d 0a 7d 20 7b 7b 76 61 6c 75 61 62  ;.  }.} {{valuab
6560: 6c 65 20 64 61 74 61 7d 7d 0a 0a 64 6f 5f 74 65  le data}}..do_te
6570: 73 74 20 70 72 61 67 6d 61 2d 39 2e 31 37 20 7b  st pragma-9.17 {
6580: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
6590: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 65 6d   INSERT INTO tem
65a0: 70 5f 74 61 62 6c 65 20 56 41 4c 55 45 53 28 27  p_table VALUES('
65b0: 76 61 6c 75 61 62 6c 65 20 64 61 74 61 20 49 49  valuable data II
65c0: 27 29 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a  ');.    SELECT *
65d0: 20 46 52 4f 4d 20 74 65 6d 70 5f 74 61 62 6c 65   FROM temp_table
65e0: 3b 0a 20 20 7d 0a 7d 20 7b 7b 76 61 6c 75 61 62  ;.  }.} {{valuab
65f0: 6c 65 20 64 61 74 61 7d 20 7b 76 61 6c 75 61 62  le data} {valuab
6600: 6c 65 20 64 61 74 61 20 49 49 7d 7d 0a 0a 64 6f  le data II}}..do
6610: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 39 2e 31  _test pragma-9.1
6620: 38 20 7b 0a 20 20 73 65 74 20 72 63 20 5b 63 61  8 {.  set rc [ca
6630: 74 63 68 20 7b 0a 20 20 20 20 64 62 20 65 76 61  tch {.    db eva
6640: 6c 20 7b 53 45 4c 45 43 54 20 74 20 46 52 4f 4d  l {SELECT t FROM
6650: 20 74 65 6d 70 5f 74 61 62 6c 65 7d 20 7b 0a 20   temp_table} {. 
6660: 20 20 20 20 20 65 78 65 63 73 71 6c 20 7b 70 72       execsql {pr
6670: 61 67 6d 61 20 74 65 6d 70 5f 73 74 6f 72 65 20  agma temp_store 
6680: 3d 20 31 7d 0a 20 20 20 20 7d 0a 20 20 7d 20 6d  = 1}.    }.  } m
6690: 73 67 5d 0a 20 20 6c 69 73 74 20 24 72 63 20 24  sg].  list $rc $
66a0: 6d 73 67 0a 7d 20 7b 31 20 7b 74 65 6d 70 6f 72  msg.} {1 {tempor
66b0: 61 72 79 20 73 74 6f 72 61 67 65 20 63 61 6e 6e  ary storage cann
66c0: 6f 74 20 62 65 20 63 68 61 6e 67 65 64 20 66 72  ot be changed fr
66d0: 6f 6d 20 77 69 74 68 69 6e 20 61 20 74 72 61 6e  om within a tran
66e0: 73 61 63 74 69 6f 6e 7d 7d 0a 0a 7d 20 3b 23 20  saction}}..} ;# 
66f0: 69 66 63 61 70 61 62 6c 65 20 70 61 67 65 72 5f  ifcapable pager_
6700: 70 72 61 67 6d 61 73 0a 0a 69 66 63 61 70 61 62  pragmas..ifcapab
6710: 6c 65 20 74 72 69 67 67 65 72 20 7b 0a 0a 64 6f  le trigger {..do
6720: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 30 2e  _test pragma-10.
6730: 30 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b  0 {.  catchsql {
6740: 0a 20 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20  .    DROP TABLE 
6750: 6d 61 69 6e 2e 74 31 3b 0a 20 20 7d 0a 20 20 65  main.t1;.  }.  e
6760: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41  xecsql {.    PRA
6770: 47 4d 41 20 63 6f 75 6e 74 5f 63 68 61 6e 67 65  GMA count_change
6780: 73 20 3d 20 31 3b 0a 0a 20 20 20 20 43 52 45 41  s = 1;..    CREA
6790: 54 45 20 54 41 42 4c 45 20 74 31 28 61 20 50 52  TE TABLE t1(a PR
67a0: 49 4d 41 52 59 20 4b 45 59 29 3b 0a 20 20 20 20  IMARY KEY);.    
67b0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 5f  CREATE TABLE t1_
67c0: 6d 69 72 72 6f 72 28 61 29 3b 0a 20 20 20 20 43  mirror(a);.    C
67d0: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 5f 6d  REATE TABLE t1_m
67e0: 69 72 72 6f 72 32 28 61 29 3b 0a 20 20 20 20 43  irror2(a);.    C
67f0: 52 45 41 54 45 20 54 52 49 47 47 45 52 20 74 31  REATE TRIGGER t1
6800: 5f 62 69 20 42 45 46 4f 52 45 20 49 4e 53 45 52  _bi BEFORE INSER
6810: 54 20 4f 4e 20 74 31 20 42 45 47 49 4e 20 0a 20  T ON t1 BEGIN . 
6820: 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f       INSERT INTO
6830: 20 74 31 5f 6d 69 72 72 6f 72 20 56 41 4c 55 45   t1_mirror VALUE
6840: 53 28 6e 65 77 2e 61 29 3b 0a 20 20 20 20 45 4e  S(new.a);.    EN
6850: 44 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54 52  D;.    CREATE TR
6860: 49 47 47 45 52 20 74 31 5f 61 69 20 41 46 54 45  IGGER t1_ai AFTE
6870: 52 20 49 4e 53 45 52 54 20 4f 4e 20 74 31 20 42  R INSERT ON t1 B
6880: 45 47 49 4e 20 0a 20 20 20 20 20 20 49 4e 53 45  EGIN .      INSE
6890: 52 54 20 49 4e 54 4f 20 74 31 5f 6d 69 72 72 6f  RT INTO t1_mirro
68a0: 72 32 20 56 41 4c 55 45 53 28 6e 65 77 2e 61 29  r2 VALUES(new.a)
68b0: 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20 20 20 43  ;.    END;.    C
68c0: 52 45 41 54 45 20 54 52 49 47 47 45 52 20 74 31  REATE TRIGGER t1
68d0: 5f 62 75 20 42 45 46 4f 52 45 20 55 50 44 41 54  _bu BEFORE UPDAT
68e0: 45 20 4f 4e 20 74 31 20 42 45 47 49 4e 20 0a 20  E ON t1 BEGIN . 
68f0: 20 20 20 20 20 55 50 44 41 54 45 20 74 31 5f 6d       UPDATE t1_m
6900: 69 72 72 6f 72 20 53 45 54 20 61 20 3d 20 6e 65  irror SET a = ne
6910: 77 2e 61 20 57 48 45 52 45 20 61 20 3d 20 6f 6c  w.a WHERE a = ol
6920: 64 2e 61 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20  d.a;.    END;.  
6930: 20 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52    CREATE TRIGGER
6940: 20 74 31 5f 61 75 20 41 46 54 45 52 20 55 50 44   t1_au AFTER UPD
6950: 41 54 45 20 4f 4e 20 74 31 20 42 45 47 49 4e 20  ATE ON t1 BEGIN 
6960: 0a 20 20 20 20 20 20 55 50 44 41 54 45 20 74 31  .      UPDATE t1
6970: 5f 6d 69 72 72 6f 72 32 20 53 45 54 20 61 20 3d  _mirror2 SET a =
6980: 20 6e 65 77 2e 61 20 57 48 45 52 45 20 61 20 3d   new.a WHERE a =
6990: 20 6f 6c 64 2e 61 3b 0a 20 20 20 20 45 4e 44 3b   old.a;.    END;
69a0: 0a 20 20 20 20 43 52 45 41 54 45 20 54 52 49 47  .    CREATE TRIG
69b0: 47 45 52 20 74 31 5f 62 64 20 42 45 46 4f 52 45  GER t1_bd BEFORE
69c0: 20 44 45 4c 45 54 45 20 4f 4e 20 74 31 20 42 45   DELETE ON t1 BE
69d0: 47 49 4e 20 0a 20 20 20 20 20 20 44 45 4c 45 54  GIN .      DELET
69e0: 45 20 46 52 4f 4d 20 74 31 5f 6d 69 72 72 6f 72  E FROM t1_mirror
69f0: 20 57 48 45 52 45 20 61 20 3d 20 6f 6c 64 2e 61   WHERE a = old.a
6a00: 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20 20 20 43  ;.    END;.    C
6a10: 52 45 41 54 45 20 54 52 49 47 47 45 52 20 74 31  REATE TRIGGER t1
6a20: 5f 61 64 20 41 46 54 45 52 20 44 45 4c 45 54 45  _ad AFTER DELETE
6a30: 20 4f 4e 20 74 31 20 42 45 47 49 4e 20 0a 20 20   ON t1 BEGIN .  
6a40: 20 20 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20      DELETE FROM 
6a50: 74 31 5f 6d 69 72 72 6f 72 32 20 57 48 45 52 45  t1_mirror2 WHERE
6a60: 20 61 20 3d 20 6f 6c 64 2e 61 3b 0a 20 20 20 20   a = old.a;.    
6a70: 45 4e 44 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a 64  END;.  }.} {}..d
6a80: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 30  o_test pragma-10
6a90: 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .1 {.  execsql {
6aa0: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
6ab0: 20 74 31 20 56 41 4c 55 45 53 28 72 61 6e 64 73   t1 VALUES(rands
6ac0: 74 72 28 31 30 2c 31 30 29 29 3b 0a 20 20 7d 0a  tr(10,10));.  }.
6ad0: 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 70 72  } {1}.do_test pr
6ae0: 61 67 6d 61 2d 31 30 2e 32 20 7b 0a 20 20 65 78  agma-10.2 {.  ex
6af0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 55 50 44 41  ecsql {.    UPDA
6b00: 54 45 20 74 31 20 53 45 54 20 61 20 3d 20 72 61  TE t1 SET a = ra
6b10: 6e 64 73 74 72 28 31 30 2c 31 30 29 3b 0a 20 20  ndstr(10,10);.  
6b20: 7d 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20  }.} {1}.do_test 
6b30: 70 72 61 67 6d 61 2d 31 30 2e 33 20 7b 0a 20 20  pragma-10.3 {.  
6b40: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 44 45  execsql {.    DE
6b50: 4c 45 54 45 20 46 52 4f 4d 20 74 31 3b 0a 20 20  LETE FROM t1;.  
6b60: 7d 0a 7d 20 7b 31 7d 0a 0a 7d 20 3b 23 20 69 66  }.} {1}..} ;# if
6b70: 63 61 70 61 62 6c 65 20 74 72 69 67 67 65 72 0a  capable trigger.
6b80: 0a 69 66 63 61 70 61 62 6c 65 20 73 63 68 65 6d  .ifcapable schem
6b90: 61 5f 70 72 61 67 6d 61 73 20 7b 0a 20 20 64 6f  a_pragmas {.  do
6ba0: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 31 2e  _test pragma-11.
6bb0: 31 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 32  1 {.    execsql2
6bc0: 20 7b 0a 20 20 20 20 20 20 70 72 61 67 6d 61 20   {.      pragma 
6bd0: 63 6f 6c 6c 61 74 69 6f 6e 5f 6c 69 73 74 3b 0a  collation_list;.
6be0: 20 20 20 20 7d 0a 20 20 7d 20 7b 73 65 71 20 30      }.  } {seq 0
6bf0: 20 6e 61 6d 65 20 4e 4f 43 41 53 45 20 73 65 71   name NOCASE seq
6c00: 20 31 20 6e 61 6d 65 20 52 54 52 49 4d 20 73 65   1 name RTRIM se
6c10: 71 20 32 20 6e 61 6d 65 20 42 49 4e 41 52 59 7d  q 2 name BINARY}
6c20: 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .  do_test pragm
6c30: 61 2d 31 31 2e 32 20 7b 0a 20 20 20 20 64 62 20  a-11.2 {.    db 
6c40: 63 6f 6c 6c 61 74 65 20 4e 65 77 5f 43 6f 6c 6c  collate New_Coll
6c50: 61 74 69 6f 6e 20 62 6c 61 68 2e 2e 2e 0a 20 20  ation blah....  
6c60: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
6c70: 20 20 70 72 61 67 6d 61 20 63 6f 6c 6c 61 74 69    pragma collati
6c80: 6f 6e 5f 6c 69 73 74 3b 0a 20 20 20 20 7d 0a 20  on_list;.    }. 
6c90: 20 7d 20 7b 30 20 4e 65 77 5f 43 6f 6c 6c 61 74   } {0 New_Collat
6ca0: 69 6f 6e 20 31 20 4e 4f 43 41 53 45 20 32 20 52  ion 1 NOCASE 2 R
6cb0: 54 52 49 4d 20 33 20 42 49 4e 41 52 59 7d 0a 7d  TRIM 3 BINARY}.}
6cc0: 0a 0a 69 66 63 61 70 61 62 6c 65 20 73 63 68 65  ..ifcapable sche
6cd0: 6d 61 5f 70 72 61 67 6d 61 73 26 26 74 65 6d 70  ma_pragmas&&temp
6ce0: 64 62 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 70  db {.  do_test p
6cf0: 72 61 67 6d 61 2d 31 32 2e 31 20 7b 0a 20 20 20  ragma-12.1 {.   
6d00: 20 73 71 6c 69 74 65 33 20 64 62 32 20 74 65 73   sqlite3 db2 tes
6d10: 74 2e 64 62 0a 20 20 20 20 65 78 65 63 73 71 6c  t.db.    execsql
6d20: 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20   {.      PRAGMA 
6d30: 74 65 6d 70 2e 74 61 62 6c 65 5f 69 6e 66 6f 28  temp.table_info(
6d40: 27 61 62 63 27 29 3b 0a 20 20 20 20 7d 20 64 62  'abc');.    } db
6d50: 32 0a 20 20 7d 20 7b 7d 0a 20 20 64 62 32 20 63  2.  } {}.  db2 c
6d60: 6c 6f 73 65 0a 0a 20 20 64 6f 5f 74 65 73 74 20  lose..  do_test 
6d70: 70 72 61 67 6d 61 2d 31 32 2e 32 20 7b 0a 20 20  pragma-12.2 {.  
6d80: 20 20 73 71 6c 69 74 65 33 20 64 62 32 20 74 65    sqlite3 db2 te
6d90: 73 74 2e 64 62 0a 20 20 20 20 65 78 65 63 73 71  st.db.    execsq
6da0: 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41  l {.      PRAGMA
6db0: 20 74 65 6d 70 2e 64 65 66 61 75 6c 74 5f 63 61   temp.default_ca
6dc0: 63 68 65 5f 73 69 7a 65 20 3d 20 32 30 30 3b 0a  che_size = 200;.
6dd0: 20 20 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d        PRAGMA tem
6de0: 70 2e 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f  p.default_cache_
6df0: 73 69 7a 65 3b 0a 20 20 20 20 7d 20 64 62 32 0a  size;.    } db2.
6e00: 20 20 7d 20 7b 32 30 30 7d 0a 20 20 64 62 32 20    } {200}.  db2 
6e10: 63 6c 6f 73 65 0a 0a 20 20 64 6f 5f 74 65 73 74  close..  do_test
6e20: 20 70 72 61 67 6d 61 2d 31 32 2e 33 20 7b 0a 20   pragma-12.3 {. 
6e30: 20 20 20 73 71 6c 69 74 65 33 20 64 62 32 20 74     sqlite3 db2 t
6e40: 65 73 74 2e 64 62 0a 20 20 20 20 65 78 65 63 73  est.db.    execs
6e50: 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d  ql {.      PRAGM
6e60: 41 20 74 65 6d 70 2e 63 61 63 68 65 5f 73 69 7a  A temp.cache_siz
6e70: 65 20 3d 20 34 30 30 3b 0a 20 20 20 20 20 20 50  e = 400;.      P
6e80: 52 41 47 4d 41 20 74 65 6d 70 2e 63 61 63 68 65  RAGMA temp.cache
6e90: 5f 73 69 7a 65 3b 0a 20 20 20 20 7d 20 64 62 32  _size;.    } db2
6ea0: 0a 20 20 7d 20 7b 34 30 30 7d 0a 20 20 64 62 32  .  } {400}.  db2
6eb0: 20 63 6c 6f 73 65 0a 7d 0a 0a 69 66 63 61 70 61   close.}..ifcapa
6ec0: 62 6c 65 20 62 6c 6f 62 6c 69 74 20 7b 0a 0a 64  ble bloblit {..d
6ed0: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 33  o_test pragma-13
6ee0: 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .1 {.  execsql {
6ef0: 0a 20 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20  .    DROP TABLE 
6f00: 49 46 20 45 58 49 53 54 53 20 74 34 3b 0a 20 20  IF EXISTS t4;.  
6f10: 20 20 50 52 41 47 4d 41 20 76 64 62 65 5f 74 72    PRAGMA vdbe_tr
6f20: 61 63 65 3d 6f 6e 3b 0a 20 20 20 20 50 52 41 47  ace=on;.    PRAG
6f30: 4d 41 20 76 64 62 65 5f 6c 69 73 74 69 6e 67 3d  MA vdbe_listing=
6f40: 6f 6e 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 73  on;.    PRAGMA s
6f50: 71 6c 5f 74 72 61 63 65 3d 6f 6e 3b 0a 20 20 20  ql_trace=on;.   
6f60: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 34   CREATE TABLE t4
6f70: 28 61 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41  (a INTEGER PRIMA
6f80: 52 59 20 4b 45 59 2c 62 29 3b 0a 20 20 20 20 49  RY KEY,b);.    I
6f90: 4e 53 45 52 54 20 49 4e 54 4f 20 74 34 28 62 29  NSERT INTO t4(b)
6fa0: 20 56 41 4c 55 45 53 28 78 27 30 31 32 33 34 35   VALUES(x'012345
6fb0: 36 37 38 39 61 62 63 64 65 66 30 31 32 33 34 35  6789abcdef012345
6fc0: 36 37 38 39 61 62 63 64 65 66 30 31 32 33 34 35  6789abcdef012345
6fd0: 36 37 38 39 27 29 3b 0a 20 20 20 20 49 4e 53 45  6789');.    INSE
6fe0: 52 54 20 49 4e 54 4f 20 74 34 28 62 29 20 56 41  RT INTO t4(b) VA
6ff0: 4c 55 45 53 28 72 61 6e 64 73 74 72 28 33 30 2c  LUES(randstr(30,
7000: 33 30 29 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  30));.    INSERT
7010: 20 49 4e 54 4f 20 74 34 28 62 29 20 56 41 4c 55   INTO t4(b) VALU
7020: 45 53 28 31 2e 32 33 34 35 36 29 3b 0a 20 20 20  ES(1.23456);.   
7030: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 34 28   INSERT INTO t4(
7040: 62 29 20 56 41 4c 55 45 53 28 4e 55 4c 4c 29 3b  b) VALUES(NULL);
7050: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
7060: 20 74 34 28 62 29 20 56 41 4c 55 45 53 28 30 29   t4(b) VALUES(0)
7070: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
7080: 4f 20 74 34 28 62 29 20 53 45 4c 45 43 54 20 62  O t4(b) SELECT b
7090: 7c 7c 62 7c 7c 62 7c 7c 62 20 46 52 4f 4d 20 74  ||b||b||b FROM t
70a0: 34 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20  4;.    SELECT * 
70b0: 46 52 4f 4d 20 74 34 3b 0a 20 20 7d 0a 20 20 65  FROM t4;.  }.  e
70c0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41  xecsql {.    PRA
70d0: 47 4d 41 20 76 64 62 65 5f 74 72 61 63 65 3d 6f  GMA vdbe_trace=o
70e0: 66 66 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 76  ff;.    PRAGMA v
70f0: 64 62 65 5f 6c 69 73 74 69 6e 67 3d 6f 66 66 3b  dbe_listing=off;
7100: 0a 20 20 20 20 50 52 41 47 4d 41 20 73 71 6c 5f  .    PRAGMA sql_
7110: 74 72 61 63 65 3d 6f 66 66 3b 0a 20 20 7d 0a 7d  trace=off;.  }.}
7120: 20 7b 7d 0a 0a 7d 20 3b 23 20 69 66 63 61 70 61   {}..} ;# ifcapa
7130: 62 6c 65 20 62 6c 6f 62 6c 69 74 20 0a 0a 69 66  ble bloblit ..if
7140: 63 61 70 61 62 6c 65 20 70 61 67 65 72 5f 70 72  capable pager_pr
7150: 61 67 6d 61 73 20 7b 0a 20 20 64 62 20 63 6c 6f  agmas {.  db clo
7160: 73 65 0a 20 20 66 6f 72 63 65 64 65 6c 65 74 65  se.  forcedelete
7170: 20 74 65 73 74 2e 64 62 0a 20 20 73 71 6c 69 74   test.db.  sqlit
7180: 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a 0a 20  e3 db test.db.. 
7190: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
71a0: 31 34 2e 31 20 7b 0a 20 20 20 20 65 78 65 63 73  14.1 {.    execs
71b0: 71 6c 20 7b 20 70 72 61 67 6d 61 20 61 75 74 6f  ql { pragma auto
71c0: 5f 76 61 63 75 75 6d 20 3d 20 30 20 7d 0a 20 20  _vacuum = 0 }.  
71d0: 20 20 65 78 65 63 73 71 6c 20 7b 20 70 72 61 67    execsql { prag
71e0: 6d 61 20 70 61 67 65 5f 63 6f 75 6e 74 20 7d 0a  ma page_count }.
71f0: 20 20 7d 20 7b 30 7d 0a 0a 20 20 64 6f 5f 74 65    } {0}..  do_te
7200: 73 74 20 70 72 61 67 6d 61 2d 31 34 2e 32 20 7b  st pragma-14.2 {
7210: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 20 0a  .    execsql { .
7220: 20 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42        CREATE TAB
7230: 4c 45 20 61 62 63 28 61 2c 20 62 2c 20 63 29 3b  LE abc(a, b, c);
7240: 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 70 61  .      PRAGMA pa
7250: 67 65 5f 63 6f 75 6e 74 3b 0a 20 20 20 20 7d 0a  ge_count;.    }.
7260: 20 20 7d 20 7b 32 7d 0a 20 20 64 6f 5f 74 65 73    } {2}.  do_tes
7270: 74 20 70 72 61 67 6d 61 2d 31 34 2e 32 75 63 20  t pragma-14.2uc 
7280: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 70  {.    execsql {p
7290: 72 61 67 6d 61 20 50 41 47 45 5f 43 4f 55 4e 54  ragma PAGE_COUNT
72a0: 7d 0a 20 20 7d 20 7b 32 7d 0a 0a 20 20 64 6f 5f  }.  } {2}..  do_
72b0: 74 65 73 74 20 70 72 61 67 6d 61 2d 31 34 2e 33  test pragma-14.3
72c0: 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b   {.    execsql {
72d0: 20 0a 20 20 20 20 20 20 42 45 47 49 4e 3b 0a 20   .      BEGIN;. 
72e0: 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c       CREATE TABL
72f0: 45 20 64 65 66 28 61 2c 20 62 2c 20 63 29 3b 0a  E def(a, b, c);.
7300: 20 20 20 20 20 20 50 52 41 47 4d 41 20 70 61 67        PRAGMA pag
7310: 65 5f 63 6f 75 6e 74 3b 0a 20 20 20 20 7d 0a 20  e_count;.    }. 
7320: 20 7d 20 7b 33 7d 0a 20 20 64 6f 5f 74 65 73 74   } {3}.  do_test
7330: 20 70 72 61 67 6d 61 2d 31 34 2e 33 75 63 20 7b   pragma-14.3uc {
7340: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 70 72  .    execsql {pr
7350: 61 67 6d 61 20 50 41 47 45 5f 43 4f 55 4e 54 7d  agma PAGE_COUNT}
7360: 0a 20 20 7d 20 7b 33 7d 0a 0a 20 20 64 6f 5f 74  .  } {3}..  do_t
7370: 65 73 74 20 70 72 61 67 6d 61 2d 31 34 2e 34 20  est pragma-14.4 
7380: 7b 0a 20 20 20 20 73 65 74 20 70 61 67 65 5f 73  {.    set page_s
7390: 69 7a 65 20 5b 64 62 20 6f 6e 65 20 7b 70 72 61  ize [db one {pra
73a0: 67 6d 61 20 70 61 67 65 5f 73 69 7a 65 7d 5d 0a  gma page_size}].
73b0: 20 20 20 20 6c 69 73 74 20 5b 66 69 6c 65 5f 70      list [file_p
73c0: 61 67 65 5f 63 6f 75 6e 74 20 74 65 73 74 2e 64  age_count test.d
73d0: 62 5d 20 24 70 61 67 65 5f 73 69 7a 65 0a 20 20  b] $page_size.  
73e0: 7d 20 5b 6c 69 73 74 20 32 20 5b 66 69 6c 65 5f  } [list 2 [file_
73f0: 70 61 67 65 5f 73 69 7a 65 20 74 65 73 74 2e 64  page_size test.d
7400: 62 5d 5d 0a 0a 20 20 64 6f 5f 74 65 73 74 20 70  b]]..  do_test p
7410: 72 61 67 6d 61 2d 31 34 2e 35 20 7b 0a 20 20 20  ragma-14.5 {.   
7420: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20   execsql {.     
7430: 20 52 4f 4c 4c 42 41 43 4b 3b 0a 20 20 20 20 20   ROLLBACK;.     
7440: 20 50 52 41 47 4d 41 20 70 61 67 65 5f 63 6f 75   PRAGMA page_cou
7450: 6e 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 32  nt;.    }.  } {2
7460: 7d 0a 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61  }..  do_test pra
7470: 67 6d 61 2d 31 34 2e 36 20 7b 0a 20 20 20 20 66  gma-14.6 {.    f
7480: 6f 72 63 65 64 65 6c 65 74 65 20 74 65 73 74 32  orcedelete test2
7490: 2e 64 62 0a 20 20 20 20 73 71 6c 69 74 65 33 20  .db.    sqlite3 
74a0: 64 62 32 20 74 65 73 74 32 2e 64 62 0a 20 20 20  db2 test2.db.   
74b0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20   execsql {.     
74c0: 20 50 52 41 47 4d 41 20 61 75 74 6f 5f 76 61 63   PRAGMA auto_vac
74d0: 75 75 6d 20 3d 20 30 3b 0a 20 20 20 20 20 20 43  uum = 0;.      C
74e0: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 61  REATE TABLE t1(a
74f0: 2c 20 62 2c 20 63 29 3b 0a 20 20 20 20 20 20 43  , b, c);.      C
7500: 52 45 41 54 45 20 54 41 42 4c 45 20 74 32 28 61  REATE TABLE t2(a
7510: 2c 20 62 2c 20 63 29 3b 0a 20 20 20 20 20 20 43  , b, c);.      C
7520: 52 45 41 54 45 20 54 41 42 4c 45 20 74 33 28 61  REATE TABLE t3(a
7530: 2c 20 62 2c 20 63 29 3b 0a 20 20 20 20 20 20 43  , b, c);.      C
7540: 52 45 41 54 45 20 54 41 42 4c 45 20 74 34 28 61  REATE TABLE t4(a
7550: 2c 20 62 2c 20 63 29 3b 0a 20 20 20 20 7d 20 64  , b, c);.    } d
7560: 62 32 0a 20 20 20 20 64 62 32 20 63 6c 6f 73 65  b2.    db2 close
7570: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
7580: 20 20 20 20 20 41 54 54 41 43 48 20 27 74 65 73       ATTACH 'tes
7590: 74 32 2e 64 62 27 20 41 53 20 61 75 78 3b 0a 20  t2.db' AS aux;. 
75a0: 20 20 20 20 20 50 52 41 47 4d 41 20 61 75 78 2e       PRAGMA aux.
75b0: 70 61 67 65 5f 63 6f 75 6e 74 3b 0a 20 20 20 20  page_count;.    
75c0: 7d 20 0a 20 20 7d 20 7b 35 7d 0a 20 20 64 6f 5f  } .  } {5}.  do_
75d0: 74 65 73 74 20 70 72 61 67 6d 61 2d 31 34 2e 36  test pragma-14.6
75e0: 75 63 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  uc {.    execsql
75f0: 20 7b 70 72 61 67 6d 61 20 41 55 58 2e 50 41 47   {pragma AUX.PAG
7600: 45 5f 43 4f 55 4e 54 7d 0a 20 20 7d 20 7b 35 7d  E_COUNT}.  } {5}
7610: 0a 7d 0a 0a 23 20 54 65 73 74 20 74 68 61 74 20  .}..# Test that 
7620: 74 68 65 20 76 61 6c 75 65 20 73 65 74 20 75 73  the value set us
7630: 69 6e 67 20 74 68 65 20 63 61 63 68 65 5f 73 69  ing the cache_si
7640: 7a 65 20 70 72 61 67 6d 61 20 69 73 20 6e 6f 74  ze pragma is not
7650: 20 72 65 73 65 74 20 77 68 65 6e 20 74 68 65 0a   reset when the.
7660: 23 20 73 63 68 65 6d 61 20 69 73 20 72 65 6c 6f  # schema is relo
7670: 61 64 65 64 2e 0a 23 0a 69 66 63 61 70 61 62 6c  aded..#.ifcapabl
7680: 65 20 70 61 67 65 72 5f 70 72 61 67 6d 61 73 20  e pager_pragmas 
7690: 7b 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 73  {.  db close.  s
76a0: 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64  qlite3 db test.d
76b0: 62 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67  b.  do_test prag
76c0: 6d 61 2d 31 35 2e 31 20 7b 0a 20 20 20 20 65 78  ma-15.1 {.    ex
76d0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52  ecsql {.      PR
76e0: 41 47 4d 41 20 63 61 63 68 65 5f 73 69 7a 65 3d  AGMA cache_size=
76f0: 35 39 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41  59;.      PRAGMA
7700: 20 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20   cache_size;.   
7710: 20 7d 0a 20 20 7d 20 7b 35 39 7d 0a 20 20 64 6f   }.  } {59}.  do
7720: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 35 2e  _test pragma-15.
7730: 32 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 20  2 {.    sqlite3 
7740: 64 62 32 20 74 65 73 74 2e 64 62 0a 20 20 20 20  db2 test.db.    
7750: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
7760: 43 52 45 41 54 45 20 54 41 42 4c 45 20 6e 65 77  CREATE TABLE new
7770: 74 61 62 6c 65 28 61 2c 20 62 2c 20 63 29 3b 0a  table(a, b, c);.
7780: 20 20 20 20 7d 20 64 62 32 0a 20 20 20 20 64 62      } db2.    db
7790: 32 20 63 6c 6f 73 65 0a 20 20 7d 20 7b 7d 0a 20  2 close.  } {}. 
77a0: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
77b0: 31 35 2e 33 20 7b 0a 20 20 20 20 23 20 45 76 61  15.3 {.    # Eva
77c0: 6c 75 61 74 69 6e 67 20 74 68 69 73 20 73 74 61  luating this sta
77d0: 74 65 6d 65 6e 74 20 77 69 6c 6c 20 63 61 75 73  tement will caus
77e0: 65 20 74 68 65 20 73 63 68 65 6d 61 20 74 6f 20  e the schema to 
77f0: 62 65 20 72 65 6c 6f 61 64 65 64 20 28 62 65 63  be reloaded (bec
7800: 61 75 73 65 0a 20 20 20 20 23 20 74 68 65 20 73  ause.    # the s
7810: 63 68 65 6d 61 20 77 61 73 20 63 68 61 6e 67 65  chema was change
7820: 64 20 62 79 20 61 6e 6f 74 68 65 72 20 63 6f 6e  d by another con
7830: 6e 65 63 74 69 6f 6e 20 69 6e 20 70 72 61 67 6d  nection in pragm
7840: 61 2d 31 35 2e 32 29 2e 20 41 74 20 6f 6e 65 0a  a-15.2). At one.
7850: 20 20 20 20 23 20 70 6f 69 6e 74 20 74 68 65 72      # point ther
7860: 65 20 77 61 73 20 61 20 62 75 67 20 74 68 61 74  e was a bug that
7870: 20 72 65 73 65 74 20 74 68 65 20 63 61 63 68 65   reset the cache
7880: 5f 73 69 7a 65 20 74 6f 20 69 74 73 20 64 65 66  _size to its def
7890: 61 75 6c 74 20 76 61 6c 75 65 0a 20 20 20 20 23  ault value.    #
78a0: 20 77 68 65 6e 20 74 68 69 73 20 68 61 70 70 65   when this happe
78b0: 6e 65 64 2e 20 0a 20 20 20 20 65 78 65 63 73 71  ned. .    execsq
78c0: 6c 20 7b 20 53 45 4c 45 43 54 20 2a 20 46 52 4f  l { SELECT * FRO
78d0: 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20  M sqlite_master 
78e0: 7d 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 20  }.    execsql { 
78f0: 50 52 41 47 4d 41 20 63 61 63 68 65 5f 73 69 7a  PRAGMA cache_siz
7900: 65 20 7d 0a 20 20 7d 20 7b 35 39 7d 0a 7d 0a 0a  e }.  } {59}.}..
7910: 23 20 52 65 73 65 74 20 74 68 65 20 73 71 6c 69  # Reset the sqli
7920: 74 65 33 5f 74 65 6d 70 5f 64 69 72 65 63 74 6f  te3_temp_directo
7930: 72 79 20 76 61 72 69 61 62 6c 65 20 66 6f 72 20  ry variable for 
7940: 74 68 65 20 6e 65 78 74 20 72 75 6e 20 6f 66 20  the next run of 
7950: 74 65 73 74 73 3a 0a 73 71 6c 69 74 65 33 20 64  tests:.sqlite3 d
7960: 62 58 20 3a 6d 65 6d 6f 72 79 3a 0a 64 62 58 20  bX :memory:.dbX 
7970: 65 76 61 6c 20 7b 50 52 41 47 4d 41 20 74 65 6d  eval {PRAGMA tem
7980: 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72  p_store_director
7990: 79 20 3d 20 22 22 7d 0a 64 62 58 20 63 6c 6f 73  y = ""}.dbX clos
79a0: 65 0a 0a 69 66 63 61 70 61 62 6c 65 20 6c 6f 63  e..ifcapable loc
79b0: 6b 5f 70 72 6f 78 79 5f 70 72 61 67 6d 61 73 26  k_proxy_pragmas&
79c0: 26 70 72 65 66 65 72 5f 70 72 6f 78 79 5f 6c 6f  &prefer_proxy_lo
79d0: 63 6b 69 6e 67 20 7b 0a 20 20 73 65 74 20 73 71  cking {.  set sq
79e0: 6c 69 74 65 5f 68 6f 73 74 69 64 5f 6e 75 6d 20  lite_hostid_num 
79f0: 31 0a 0a 20 20 73 65 74 20 75 73 69 6e 67 5f 70  1..  set using_p
7a00: 72 6f 78 79 20 30 0a 20 20 66 6f 72 65 61 63 68  roxy 0.  foreach
7a10: 20 7b 6e 61 6d 65 20 76 61 6c 75 65 7d 20 5b 61   {name value} [a
7a20: 72 72 61 79 20 67 65 74 20 65 6e 76 20 53 51 4c  rray get env SQL
7a30: 49 54 45 5f 46 4f 52 43 45 5f 50 52 4f 58 59 5f  ITE_FORCE_PROXY_
7a40: 4c 4f 43 4b 49 4e 47 5d 20 7b 0a 20 20 20 20 73  LOCKING] {.    s
7a50: 65 74 20 75 73 69 6e 67 5f 70 72 6f 78 79 20 24  et using_proxy $
7a60: 76 61 6c 75 65 0a 20 20 7d 0a 0a 20 20 23 20 54  value.  }..  # T
7a70: 65 73 74 20 74 68 65 20 6c 6f 63 6b 5f 70 72 6f  est the lock_pro
7a80: 78 79 5f 66 69 6c 65 20 70 72 61 67 6d 61 73 2e  xy_file pragmas.
7a90: 0a 20 20 23 0a 20 20 64 62 20 63 6c 6f 73 65 0a  .  #.  db close.
7aa0: 20 20 73 65 74 20 65 6e 76 28 53 51 4c 49 54 45    set env(SQLITE
7ab0: 5f 46 4f 52 43 45 5f 50 52 4f 58 59 5f 4c 4f 43  _FORCE_PROXY_LOC
7ac0: 4b 49 4e 47 29 20 22 30 22 0a 0a 20 20 73 71 6c  KING) "0"..  sql
7ad0: 69 74 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a  ite3 db test.db.
7ae0: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
7af0: 2d 31 36 2e 31 20 7b 0a 20 20 20 20 65 78 65 63  -16.1 {.    exec
7b00: 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47  sql {.      PRAG
7b10: 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69  MA lock_proxy_fi
7b20: 6c 65 3d 22 6d 79 6c 69 74 74 6c 65 70 72 6f 78  le="mylittleprox
7b30: 79 22 3b 0a 20 20 20 20 20 20 73 65 6c 65 63 74  y";.      select
7b40: 20 2a 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f 6d   * from sqlite_m
7b50: 61 73 74 65 72 3b 0a 20 20 20 20 7d 0a 20 20 20  aster;.    }.   
7b60: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20   execsql {.     
7b70: 20 50 52 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f   PRAGMA lock_pro
7b80: 78 79 5f 66 69 6c 65 3b 0a 20 20 20 20 7d 20 0a  xy_file;.    } .
7b90: 20 20 7d 20 7b 6d 79 6c 69 74 74 6c 65 70 72 6f    } {mylittlepro
7ba0: 78 79 7d 0a 0a 20 20 64 6f 5f 74 65 73 74 20 70  xy}..  do_test p
7bb0: 72 61 67 6d 61 2d 31 36 2e 32 20 7b 0a 20 20 20  ragma-16.2 {.   
7bc0: 20 73 71 6c 69 74 65 33 20 64 62 32 20 74 65 73   sqlite3 db2 tes
7bd0: 74 2e 64 62 0a 20 20 20 20 65 78 65 63 73 71 6c  t.db.    execsql
7be0: 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20   {.      PRAGMA 
7bf0: 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 3d  lock_proxy_file=
7c00: 22 6d 79 6c 69 74 74 6c 65 70 72 6f 78 79 22 3b  "mylittleproxy";
7c10: 0a 20 20 20 20 7d 20 64 62 32 0a 20 20 7d 20 7b  .    } db2.  } {
7c20: 7d 0a 0a 20 20 64 62 32 20 63 6c 6f 73 65 0a 20  }..  db2 close. 
7c30: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
7c40: 31 36 2e 32 2e 31 20 7b 0a 20 20 20 20 73 71 6c  16.2.1 {.    sql
7c50: 69 74 65 33 20 64 62 32 20 74 65 73 74 2e 64 62  ite3 db2 test.db
7c60: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
7c70: 20 20 20 20 20 50 52 41 47 4d 41 20 6c 6f 63 6b       PRAGMA lock
7c80: 5f 70 72 6f 78 79 5f 66 69 6c 65 3d 22 3a 61 75  _proxy_file=":au
7c90: 74 6f 3a 22 3b 0a 20 20 20 20 20 20 73 65 6c 65  to:";.      sele
7ca0: 63 74 20 2a 20 66 72 6f 6d 20 73 71 6c 69 74 65  ct * from sqlite
7cb0: 5f 6d 61 73 74 65 72 3b 0a 20 20 20 20 7d 20 64  _master;.    } d
7cc0: 62 32 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b  b2.    execsql {
7cd0: 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 6c 6f  .      PRAGMA lo
7ce0: 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 3b 0a 20  ck_proxy_file;. 
7cf0: 20 20 20 7d 20 64 62 32 0a 20 20 7d 20 7b 6d 79     } db2.  } {my
7d00: 6c 69 74 74 6c 65 70 72 6f 78 79 7d 0a 0a 20 20  littleproxy}..  
7d10: 64 62 32 20 63 6c 6f 73 65 0a 20 20 64 6f 5f 74  db2 close.  do_t
7d20: 65 73 74 20 70 72 61 67 6d 61 2d 31 36 2e 33 20  est pragma-16.3 
7d30: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 20 64 62  {.    sqlite3 db
7d40: 32 20 74 65 73 74 2e 64 62 0a 20 20 20 20 65 78  2 test.db.    ex
7d50: 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52  ecsql {.      PR
7d60: 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f  AGMA lock_proxy_
7d70: 66 69 6c 65 3d 22 6d 79 6f 74 68 65 72 70 72 6f  file="myotherpro
7d80: 78 79 22 3b 0a 20 20 20 20 7d 20 64 62 32 0a 20  xy";.    } db2. 
7d90: 20 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20     catchsql {.  
7da0: 20 20 20 20 73 65 6c 65 63 74 20 2a 20 66 72 6f      select * fro
7db0: 6d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 3b  m sqlite_master;
7dc0: 0a 20 20 20 20 7d 20 64 62 32 0a 20 20 7d 20 7b  .    } db2.  } {
7dd0: 31 20 7b 64 61 74 61 62 61 73 65 20 69 73 20 6c  1 {database is l
7de0: 6f 63 6b 65 64 7d 7d 0a 0a 20 20 64 6f 5f 74 65  ocked}}..  do_te
7df0: 73 74 20 70 72 61 67 6d 61 2d 31 36 2e 34 20 7b  st pragma-16.4 {
7e00: 0a 20 20 20 20 64 62 32 20 63 6c 6f 73 65 0a 20  .    db2 close. 
7e10: 20 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 20 20     db close.    
7e20: 73 71 6c 69 74 65 33 20 64 62 32 20 74 65 73 74  sqlite3 db2 test
7e30: 2e 64 62 0a 20 20 20 20 65 78 65 63 73 71 6c 20  .db.    execsql 
7e40: 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 6c  {.      PRAGMA l
7e50: 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 3d 22  ock_proxy_file="
7e60: 6d 79 6f 72 69 67 69 6e 61 6c 70 72 6f 78 79 22  myoriginalproxy"
7e70: 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 6c  ;.      PRAGMA l
7e80: 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 3d 22  ock_proxy_file="
7e90: 6d 79 6f 74 68 65 72 70 72 6f 78 79 22 3b 0a 20  myotherproxy";. 
7ea0: 20 20 20 20 20 50 52 41 47 4d 41 20 6c 6f 63 6b       PRAGMA lock
7eb0: 5f 70 72 6f 78 79 5f 66 69 6c 65 3b 0a 20 20 20  _proxy_file;.   
7ec0: 20 7d 20 64 62 32 0a 20 20 7d 20 7b 6d 79 6f 74   } db2.  } {myot
7ed0: 68 65 72 70 72 6f 78 79 7d 0a 0a 20 20 64 62 32  herproxy}..  db2
7ee0: 20 63 6c 6f 73 65 0a 20 20 73 65 74 20 65 6e 76   close.  set env
7ef0: 28 53 51 4c 49 54 45 5f 46 4f 52 43 45 5f 50 52  (SQLITE_FORCE_PR
7f00: 4f 58 59 5f 4c 4f 43 4b 49 4e 47 29 20 22 31 22  OXY_LOCKING) "1"
7f10: 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .  do_test pragm
7f20: 61 2d 31 36 2e 35 20 7b 0a 20 20 20 20 73 71 6c  a-16.5 {.    sql
7f30: 69 74 65 33 20 64 62 32 20 74 65 73 74 2e 64 62  ite3 db2 test.db
7f40: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
7f50: 20 20 20 20 20 50 52 41 47 4d 41 20 6c 6f 63 6b       PRAGMA lock
7f60: 5f 70 72 6f 78 79 5f 66 69 6c 65 3d 22 3a 61 75  _proxy_file=":au
7f70: 74 6f 3a 22 3b 0a 20 20 20 20 20 20 50 52 41 47  to:";.      PRAG
7f80: 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69  MA lock_proxy_fi
7f90: 6c 65 3b 0a 20 20 20 20 7d 20 64 62 32 0a 20 20  le;.    } db2.  
7fa0: 7d 20 7b 6d 79 6f 74 68 65 72 70 72 6f 78 79 7d  } {myotherproxy}
7fb0: 0a 20 20 0a 20 20 64 6f 5f 74 65 73 74 20 70 72  .  .  do_test pr
7fc0: 61 67 6d 61 2d 31 36 2e 36 20 7b 0a 20 20 20 20  agma-16.6 {.    
7fd0: 64 62 32 20 63 6c 6f 73 65 0a 20 20 20 20 73 71  db2 close.    sq
7fe0: 6c 69 74 65 33 20 64 62 32 20 74 65 73 74 32 2e  lite3 db2 test2.
7ff0: 64 62 0a 20 20 20 20 73 65 74 20 6c 6f 63 6b 70  db.    set lockp
8000: 61 74 68 20 5b 65 78 65 63 73 71 6c 20 7b 0a 20  ath [execsql {. 
8010: 20 20 20 20 20 50 52 41 47 4d 41 20 6c 6f 63 6b       PRAGMA lock
8020: 5f 70 72 6f 78 79 5f 66 69 6c 65 3d 22 3a 61 75  _proxy_file=":au
8030: 74 6f 3a 22 3b 0a 20 20 20 20 20 20 50 52 41 47  to:";.      PRAG
8040: 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69  MA lock_proxy_fi
8050: 6c 65 3b 0a 20 20 20 20 7d 20 64 62 32 5d 0a 20  le;.    } db2]. 
8060: 20 20 20 73 74 72 69 6e 67 20 6d 61 74 63 68 20     string match 
8070: 22 2a 74 65 73 74 32 2e 64 62 3a 61 75 74 6f 3a  "*test2.db:auto:
8080: 22 20 24 6c 6f 63 6b 70 61 74 68 0a 20 20 7d 20  " $lockpath.  } 
8090: 7b 31 7d 0a 20 20 0a 20 20 73 65 74 20 73 71 6c  {1}.  .  set sql
80a0: 69 74 65 5f 68 6f 73 74 69 64 5f 6e 75 6d 20 32  ite_hostid_num 2
80b0: 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .  do_test pragm
80c0: 61 2d 31 36 2e 37 20 7b 0a 20 20 20 20 6c 69 73  a-16.7 {.    lis
80d0: 74 20 5b 63 61 74 63 68 20 7b 0a 20 20 20 20 20  t [catch {.     
80e0: 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74   sqlite3 db test
80f0: 32 2e 64 62 0a 20 20 20 20 20 20 65 78 65 63 73  2.db.      execs
8100: 71 6c 20 7b 20 0a 20 20 20 20 20 20 20 20 50 52  ql { .        PR
8110: 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f  AGMA lock_proxy_
8120: 66 69 6c 65 3d 22 3a 61 75 74 6f 3a 22 3b 0a 20  file=":auto:";. 
8130: 20 20 20 20 20 20 20 73 65 6c 65 63 74 20 2a 20         select * 
8140: 66 72 6f 6d 20 73 71 6c 69 74 65 5f 6d 61 73 74  from sqlite_mast
8150: 65 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  er;.      }.    
8160: 7d 20 6d 73 67 5d 20 24 6d 73 67 0a 20 20 7d 20  } msg] $msg.  } 
8170: 7b 31 20 7b 64 61 74 61 62 61 73 65 20 69 73 20  {1 {database is 
8180: 6c 6f 63 6b 65 64 7d 7d 0a 20 20 64 62 20 63 6c  locked}}.  db cl
8190: 6f 73 65 0a 20 20 0a 20 20 64 6f 5f 74 65 73 74  ose.  .  do_test
81a0: 20 70 72 61 67 6d 61 2d 31 36 2e 38 20 7b 0a 20   pragma-16.8 {. 
81b0: 20 20 20 6c 69 73 74 20 5b 63 61 74 63 68 20 7b     list [catch {
81c0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 20 64  .      sqlite3 d
81d0: 62 20 74 65 73 74 32 2e 64 62 0a 20 20 20 20 20  b test2.db.     
81e0: 20 65 78 65 63 73 71 6c 20 7b 20 73 65 6c 65 63   execsql { selec
81f0: 74 20 2a 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f  t * from sqlite_
8200: 6d 61 73 74 65 72 20 7d 20 0a 20 20 20 20 7d 20  master } .    } 
8210: 6d 73 67 5d 20 24 6d 73 67 0a 20 20 7d 20 7b 31  msg] $msg.  } {1
8220: 20 7b 64 61 74 61 62 61 73 65 20 69 73 20 6c 6f   {database is lo
8230: 63 6b 65 64 7d 7d 0a 0a 20 20 64 62 32 20 63 6c  cked}}..  db2 cl
8240: 6f 73 65 0a 20 20 64 6f 5f 74 65 73 74 20 70 72  ose.  do_test pr
8250: 61 67 6d 61 2d 31 36 2e 38 2e 31 20 7b 0a 20 20  agma-16.8.1 {.  
8260: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
8270: 20 20 50 52 41 47 4d 41 20 6c 6f 63 6b 5f 70 72    PRAGMA lock_pr
8280: 6f 78 79 5f 66 69 6c 65 3d 22 79 65 74 61 6e 6f  oxy_file="yetano
8290: 74 68 65 72 70 72 6f 78 79 22 3b 0a 20 20 20 20  therproxy";.    
82a0: 20 20 50 52 41 47 4d 41 20 6c 6f 63 6b 5f 70 72    PRAGMA lock_pr
82b0: 6f 78 79 5f 66 69 6c 65 3b 0a 20 20 20 20 7d 20  oxy_file;.    } 
82c0: 0a 20 20 7d 20 7b 79 65 74 61 6e 6f 74 68 65 72  .  } {yetanother
82d0: 70 72 6f 78 79 7d 0a 20 20 64 6f 5f 74 65 73 74  proxy}.  do_test
82e0: 20 70 72 61 67 6d 61 2d 31 36 2e 38 2e 32 20 7b   pragma-16.8.2 {
82f0: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
8300: 20 20 20 20 20 63 72 65 61 74 65 20 74 61 62 6c       create tabl
8310: 65 20 6d 69 6e 65 28 78 29 3b 0a 20 20 20 20 7d  e mine(x);.    }
8320: 20 0a 20 20 7d 20 7b 7d 0a 0a 20 20 64 62 20 63   .  } {}..  db c
8330: 6c 6f 73 65 0a 20 20 64 6f 5f 74 65 73 74 20 70  lose.  do_test p
8340: 72 61 67 6d 61 2d 31 36 2e 39 20 7b 0a 20 20 20  ragma-16.9 {.   
8350: 20 73 71 6c 69 74 65 33 20 64 62 20 70 72 6f 78   sqlite3 db prox
8360: 79 74 65 73 74 2e 64 62 0a 20 20 20 20 73 65 74  ytest.db.    set
8370: 20 6c 6f 63 6b 70 61 74 68 32 20 5b 65 78 65 63   lockpath2 [exec
8380: 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47  sql {.      PRAG
8390: 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69  MA lock_proxy_fi
83a0: 6c 65 3d 22 3a 61 75 74 6f 3a 22 3b 0a 20 20 20  le=":auto:";.   
83b0: 20 20 20 50 52 41 47 4d 41 20 6c 6f 63 6b 5f 70     PRAGMA lock_p
83c0: 72 6f 78 79 5f 66 69 6c 65 3b 0a 20 20 20 20 7d  roxy_file;.    }
83d0: 20 64 62 5d 0a 20 20 20 20 73 74 72 69 6e 67 20   db].    string 
83e0: 6d 61 74 63 68 20 22 2a 70 72 6f 78 79 74 65 73  match "*proxytes
83f0: 74 2e 64 62 3a 61 75 74 6f 3a 22 20 24 6c 6f 63  t.db:auto:" $loc
8400: 6b 70 61 74 68 32 0a 20 20 7d 20 7b 31 7d 0a 0a  kpath2.  } {1}..
8410: 20 20 73 65 74 20 65 6e 76 28 53 51 4c 49 54 45    set env(SQLITE
8420: 5f 46 4f 52 43 45 5f 50 52 4f 58 59 5f 4c 4f 43  _FORCE_PROXY_LOC
8430: 4b 49 4e 47 29 20 24 75 73 69 6e 67 5f 70 72 6f  KING) $using_pro
8440: 78 79 0a 20 20 73 65 74 20 73 71 6c 69 74 65 5f  xy.  set sqlite_
8450: 68 6f 73 74 69 64 5f 6e 75 6d 20 30 0a 7d 0a 0a  hostid_num 0.}..
8460: 23 20 50 61 72 73 69 6e 67 20 6f 66 20 61 75 74  # Parsing of aut
8470: 6f 5f 76 61 63 75 75 6d 20 73 65 74 74 69 6e 67  o_vacuum setting
8480: 73 2e 0a 23 0a 66 6f 72 65 61 63 68 20 7b 61 75  s..#.foreach {au
8490: 74 6f 76 61 63 5f 73 65 74 74 69 6e 67 20 76 61  tovac_setting va
84a0: 6c 7d 20 7b 0a 20 20 30 20 30 0a 20 20 31 20 31  l} {.  0 0.  1 1
84b0: 0a 20 20 32 20 32 0a 20 20 33 20 30 0a 20 20 2d  .  2 2.  3 0.  -
84c0: 31 20 30 0a 20 20 6e 6f 6e 65 20 30 0a 20 20 4e  1 0.  none 0.  N
84d0: 4f 4e 45 20 30 0a 20 20 4e 6f 4e 65 20 30 0a 20  ONE 0.  NoNe 0. 
84e0: 20 66 75 6c 6c 20 31 0a 20 20 46 55 4c 4c 20 31   full 1.  FULL 1
84f0: 0a 20 20 69 6e 63 72 65 6d 65 6e 74 61 6c 20 32  .  incremental 2
8500: 0a 20 20 49 4e 43 52 45 4d 45 4e 54 41 4c 20 32  .  INCREMENTAL 2
8510: 0a 20 20 2d 31 32 33 34 20 30 0a 20 20 31 32 33  .  -1234 0.  123
8520: 34 20 30 0a 7d 20 7b 0a 20 20 64 6f 5f 74 65 73  4 0.} {.  do_tes
8530: 74 20 70 72 61 67 6d 61 2d 31 37 2e 31 2e 24 61  t pragma-17.1.$a
8540: 75 74 6f 76 61 63 5f 73 65 74 74 69 6e 67 20 7b  utovac_setting {
8550: 0a 20 20 20 20 63 61 74 63 68 20 7b 64 62 20 63  .    catch {db c
8560: 6c 6f 73 65 7d 0a 20 20 20 20 73 71 6c 69 74 65  lose}.    sqlite
8570: 33 20 64 62 20 3a 6d 65 6d 6f 72 79 3a 0a 20 20  3 db :memory:.  
8580: 20 20 65 78 65 63 73 71 6c 20 22 0a 20 20 20 20    execsql ".    
8590: 20 20 50 52 41 47 4d 41 20 61 75 74 6f 5f 76 61    PRAGMA auto_va
85a0: 63 75 75 6d 3d 24 3a 3a 61 75 74 6f 76 61 63 5f  cuum=$::autovac_
85b0: 73 65 74 74 69 6e 67 3b 0a 20 20 20 20 20 20 50  setting;.      P
85c0: 52 41 47 4d 41 20 61 75 74 6f 5f 76 61 63 75 75  RAGMA auto_vacuu
85d0: 6d 3b 0a 20 20 20 20 22 0a 20 20 7d 20 24 76 61  m;.    ".  } $va
85e0: 6c 0a 7d 0a 0a 23 20 50 61 72 73 69 6e 67 20 6f  l.}..# Parsing o
85f0: 66 20 74 65 6d 70 5f 73 74 6f 72 65 20 73 65 74  f temp_store set
8600: 74 69 6e 67 73 2e 0a 23 0a 66 6f 72 65 61 63 68  tings..#.foreach
8610: 20 7b 74 65 6d 70 5f 73 65 74 74 69 6e 67 20 76   {temp_setting v
8620: 61 6c 7d 20 7b 0a 20 20 30 20 30 0a 20 20 31 20  al} {.  0 0.  1 
8630: 31 0a 20 20 32 20 32 0a 20 20 33 20 30 0a 20 20  1.  2 2.  3 0.  
8640: 2d 31 20 30 0a 20 20 66 69 6c 65 20 31 0a 20 20  -1 0.  file 1.  
8650: 46 49 4c 45 20 31 0a 20 20 66 49 6c 45 20 31 0a  FILE 1.  fIlE 1.
8660: 20 20 6d 65 6d 6f 72 79 20 32 0a 20 20 4d 45 4d    memory 2.  MEM
8670: 4f 52 59 20 32 0a 20 20 4d 65 4d 6f 52 79 20 32  ORY 2.  MeMoRy 2
8680: 0a 7d 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 70  .} {.  do_test p
8690: 72 61 67 6d 61 2d 31 38 2e 31 2e 24 74 65 6d 70  ragma-18.1.$temp
86a0: 5f 73 65 74 74 69 6e 67 20 7b 0a 20 20 20 20 63  _setting {.    c
86b0: 61 74 63 68 20 7b 64 62 20 63 6c 6f 73 65 7d 0a  atch {db close}.
86c0: 20 20 20 20 73 71 6c 69 74 65 33 20 64 62 20 3a      sqlite3 db :
86d0: 6d 65 6d 6f 72 79 3a 0a 20 20 20 20 65 78 65 63  memory:.    exec
86e0: 73 71 6c 20 22 0a 20 20 20 20 20 20 50 52 41 47  sql ".      PRAG
86f0: 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 3d 24 3a  MA temp_store=$:
8700: 3a 74 65 6d 70 5f 73 65 74 74 69 6e 67 3b 0a 20  :temp_setting;. 
8710: 20 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70       PRAGMA temp
8720: 5f 73 74 6f 72 65 3d 24 3a 3a 74 65 6d 70 5f 73  _store=$::temp_s
8730: 65 74 74 69 6e 67 3b 0a 20 20 20 20 20 20 50 52  etting;.      PR
8740: 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 3b  AGMA temp_store;
8750: 0a 20 20 20 20 22 0a 20 20 7d 20 24 76 61 6c 0a  .    ".  } $val.
8760: 7d 0a 0a 23 20 54 68 65 20 53 51 4c 49 54 45 5f  }..# The SQLITE_
8770: 46 43 4e 54 4c 5f 50 52 41 47 4d 41 20 6c 6f 67  FCNTL_PRAGMA log
8780: 69 63 2c 20 77 69 74 68 20 65 72 72 6f 72 20 68  ic, with error h
8790: 61 6e 64 6c 69 6e 67 2e 0a 23 0a 64 62 20 63 6c  andling..#.db cl
87a0: 6f 73 65 0a 74 65 73 74 76 66 73 20 74 76 66 73  ose.testvfs tvfs
87b0: 0a 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74  .sqlite3 db test
87c0: 2e 64 62 20 2d 76 66 73 20 74 76 66 73 0a 64 6f  .db -vfs tvfs.do
87d0: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 39 2e  _test pragma-19.
87e0: 31 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b  1 {.  catchsql {
87f0: 50 52 41 47 4d 41 20 65 72 72 6f 72 7d 0a 7d 20  PRAGMA error}.} 
8800: 7b 31 20 7b 53 51 4c 20 6c 6f 67 69 63 20 65 72  {1 {SQL logic er
8810: 72 6f 72 20 6f 72 20 6d 69 73 73 69 6e 67 20 64  ror or missing d
8820: 61 74 61 62 61 73 65 7d 7d 0a 64 6f 5f 74 65 73  atabase}}.do_tes
8830: 74 20 70 72 61 67 6d 61 2d 31 39 2e 32 20 7b 0a  t pragma-19.2 {.
8840: 20 20 63 61 74 63 68 73 71 6c 20 7b 50 52 41 47    catchsql {PRAG
8850: 4d 41 20 65 72 72 6f 72 3d 27 54 68 69 73 20 69  MA error='This i
8860: 73 20 74 68 65 20 65 72 72 6f 72 20 6d 65 73 73  s the error mess
8870: 61 67 65 27 7d 0a 7d 20 7b 31 20 7b 54 68 69 73  age'}.} {1 {This
8880: 20 69 73 20 74 68 65 20 65 72 72 6f 72 20 6d 65   is the error me
8890: 73 73 61 67 65 7d 7d 0a 64 6f 5f 74 65 73 74 20  ssage}}.do_test 
88a0: 70 72 61 67 6d 61 2d 31 39 2e 33 20 7b 0a 20 20  pragma-19.3 {.  
88b0: 63 61 74 63 68 73 71 6c 20 7b 50 52 41 47 4d 41  catchsql {PRAGMA
88c0: 20 65 72 72 6f 72 3d 27 37 20 54 68 69 73 20 69   error='7 This i
88d0: 73 20 74 68 65 20 65 72 72 6f 72 20 6d 65 73 73  s the error mess
88e0: 61 67 65 27 7d 0a 7d 20 7b 31 20 7b 54 68 69 73  age'}.} {1 {This
88f0: 20 69 73 20 74 68 65 20 65 72 72 6f 72 20 6d 65   is the error me
8900: 73 73 61 67 65 7d 7d 0a 64 6f 5f 74 65 73 74 20  ssage}}.do_test 
8910: 70 72 61 67 6d 61 2d 31 39 2e 34 20 7b 0a 20 20  pragma-19.4 {.  
8920: 63 61 74 63 68 73 71 6c 20 7b 50 52 41 47 4d 41  catchsql {PRAGMA
8930: 20 65 72 72 6f 72 3d 37 7d 0a 7d 20 7b 31 20 7b   error=7}.} {1 {
8940: 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 7d 7d 0a  out of memory}}.
8950: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31  do_test pragma-1
8960: 39 2e 35 20 7b 0a 20 20 66 69 6c 65 20 74 61 69  9.5 {.  file tai
8970: 6c 20 5b 6c 69 6e 64 65 78 20 5b 65 78 65 63 73  l [lindex [execs
8980: 71 6c 20 7b 50 52 41 47 4d 41 20 66 69 6c 65 6e  ql {PRAGMA filen
8990: 61 6d 65 7d 5d 20 30 5d 0a 7d 20 7b 74 65 73 74  ame}] 0].} {test
89a0: 2e 64 62 7d 0a 0a 69 66 20 7b 24 74 63 6c 5f 70  .db}..if {$tcl_p
89b0: 6c 61 74 66 6f 72 6d 28 70 6c 61 74 66 6f 72 6d  latform(platform
89c0: 29 3d 3d 22 77 69 6e 64 6f 77 73 22 7d 20 7b 0a  )=="windows"} {.
89d0: 23 20 54 65 73 74 20 64 61 74 61 5f 73 74 6f 72  # Test data_stor
89e0: 65 5f 64 69 72 65 63 74 6f 72 79 20 70 72 61 67  e_directory prag
89f0: 6d 61 0a 23 0a 64 62 20 63 6c 6f 73 65 0a 73 71  ma.#.db close.sq
8a00: 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64 62  lite3 db test.db
8a10: 0a 66 69 6c 65 20 6d 6b 64 69 72 20 64 61 74 61  .file mkdir data
8a20: 5f 64 69 72 0a 64 6f 5f 74 65 73 74 20 70 72 61  _dir.do_test pra
8a30: 67 6d 61 2d 32 30 2e 31 20 7b 0a 20 20 63 61 74  gma-20.1 {.  cat
8a40: 63 68 73 71 6c 20 7b 50 52 41 47 4d 41 20 64 61  chsql {PRAGMA da
8a50: 74 61 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f  ta_store_directo
8a60: 72 79 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f  ry}.} {0 {}}.do_
8a70: 74 65 73 74 20 70 72 61 67 6d 61 2d 32 30 2e 32  test pragma-20.2
8a80: 20 7b 0a 20 20 73 65 74 20 70 77 64 20 5b 73 74   {.  set pwd [st
8a90: 72 69 6e 67 20 6d 61 70 20 7b 27 20 27 27 7d 20  ring map {' ''} 
8aa0: 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65  [file nativename
8ab0: 20 5b 67 65 74 5f 70 77 64 5d 5d 5d 0a 20 20 63   [get_pwd]]].  c
8ac0: 61 74 63 68 73 71 6c 20 22 50 52 41 47 4d 41 20  atchsql "PRAGMA 
8ad0: 64 61 74 61 5f 73 74 6f 72 65 5f 64 69 72 65 63  data_store_direc
8ae0: 74 6f 72 79 3d 27 24 70 77 64 27 3b 22 0a 7d 20  tory='$pwd';".} 
8af0: 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 70  {0 {}}.do_test p
8b00: 72 61 67 6d 61 2d 32 30 2e 33 20 7b 0a 20 20 63  ragma-20.3 {.  c
8b10: 61 74 63 68 73 71 6c 20 7b 50 52 41 47 4d 41 20  atchsql {PRAGMA 
8b20: 64 61 74 61 5f 73 74 6f 72 65 5f 64 69 72 65 63  data_store_direc
8b30: 74 6f 72 79 7d 0a 7d 20 5b 6c 69 73 74 20 30 20  tory}.} [list 0 
8b40: 5b 6c 69 73 74 20 5b 66 69 6c 65 20 6e 61 74 69  [list [file nati
8b50: 76 65 6e 61 6d 65 20 5b 67 65 74 5f 70 77 64 5d  vename [get_pwd]
8b60: 5d 5d 5d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67  ]]].do_test prag
8b70: 6d 61 2d 32 30 2e 34 20 7b 0a 20 20 73 65 74 20  ma-20.4 {.  set 
8b80: 70 77 64 20 5b 73 74 72 69 6e 67 20 6d 61 70 20  pwd [string map 
8b90: 7b 27 20 27 27 7d 20 5b 66 69 6c 65 20 6e 61 74  {' ''} [file nat
8ba0: 69 76 65 6e 61 6d 65 20 5c 0a 20 20 20 20 5b 66  ivename \.    [f
8bb0: 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 5f 70 77  ile join [get_pw
8bc0: 64 5d 20 64 61 74 61 5f 64 69 72 5d 5d 5d 0a 20  d] data_dir]]]. 
8bd0: 20 63 61 74 63 68 73 71 6c 20 22 50 52 41 47 4d   catchsql "PRAGM
8be0: 41 20 64 61 74 61 5f 73 74 6f 72 65 5f 64 69 72  A data_store_dir
8bf0: 65 63 74 6f 72 79 3d 27 24 70 77 64 27 3b 22 0a  ectory='$pwd';".
8c00: 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  } {0 {}}.do_test
8c10: 20 70 72 61 67 6d 61 2d 32 30 2e 35 20 7b 0a 20   pragma-20.5 {. 
8c20: 20 73 71 6c 69 74 65 33 20 64 62 32 20 74 65 73   sqlite3 db2 tes
8c30: 74 32 2e 64 62 0a 20 20 63 61 74 63 68 73 71 6c  t2.db.  catchsql
8c40: 20 22 50 52 41 47 4d 41 20 64 61 74 61 62 61 73   "PRAGMA databas
8c50: 65 5f 6c 69 73 74 3b 22 20 64 62 32 0a 7d 20 5b  e_list;" db2.} [
8c60: 6c 69 73 74 20 30 20 5b 6c 69 73 74 20 30 20 6d  list 0 [list 0 m
8c70: 61 69 6e 20 5b 66 69 6c 65 20 6e 61 74 69 76 65  ain [file native
8c80: 6e 61 6d 65 20 5c 0a 20 20 20 20 5b 66 69 6c 65  name \.    [file
8c90: 20 6a 6f 69 6e 20 5b 67 65 74 5f 70 77 64 5d 20   join [get_pwd] 
8ca0: 64 61 74 61 5f 64 69 72 20 74 65 73 74 32 2e 64  data_dir test2.d
8cb0: 62 5d 5d 5d 5d 0a 63 61 74 63 68 20 7b 64 62 32  b]]]].catch {db2
8cc0: 20 63 6c 6f 73 65 7d 0a 64 6f 5f 74 65 73 74 20   close}.do_test 
8cd0: 70 72 61 67 6d 61 2d 32 30 2e 36 20 7b 0a 20 20  pragma-20.6 {.  
8ce0: 73 71 6c 69 74 65 33 20 64 62 32 20 5b 66 69 6c  sqlite3 db2 [fil
8cf0: 65 20 6a 6f 69 6e 20 5b 67 65 74 5f 70 77 64 5d  e join [get_pwd]
8d00: 20 74 65 73 74 32 2e 64 62 5d 0a 20 20 63 61 74   test2.db].  cat
8d10: 63 68 73 71 6c 20 22 50 52 41 47 4d 41 20 64 61  chsql "PRAGMA da
8d20: 74 61 62 61 73 65 5f 6c 69 73 74 3b 22 20 64 62  tabase_list;" db
8d30: 32 0a 7d 20 5b 6c 69 73 74 20 30 20 5b 6c 69 73  2.} [list 0 [lis
8d40: 74 20 30 20 6d 61 69 6e 20 5b 66 69 6c 65 20 6e  t 0 main [file n
8d50: 61 74 69 76 65 6e 61 6d 65 20 5c 0a 20 20 20 20  ativename \.    
8d60: 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 5f  [file join [get_
8d70: 70 77 64 5d 20 74 65 73 74 32 2e 64 62 5d 5d 5d  pwd] test2.db]]]
8d80: 5d 0a 63 61 74 63 68 20 7b 64 62 32 20 63 6c 6f  ].catch {db2 clo
8d90: 73 65 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67  se}.do_test prag
8da0: 6d 61 2d 32 30 2e 37 20 7b 0a 20 20 63 61 74 63  ma-20.7 {.  catc
8db0: 68 73 71 6c 20 22 50 52 41 47 4d 41 20 64 61 74  hsql "PRAGMA dat
8dc0: 61 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72  a_store_director
8dd0: 79 3d 27 27 3b 22 0a 7d 20 7b 30 20 7b 7d 7d 0a  y='';".} {0 {}}.
8de0: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 32  do_test pragma-2
8df0: 30 2e 38 20 7b 0a 20 20 63 61 74 63 68 73 71 6c  0.8 {.  catchsql
8e00: 20 7b 50 52 41 47 4d 41 20 64 61 74 61 5f 73 74   {PRAGMA data_st
8e10: 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 7d 0a 7d  ore_directory}.}
8e20: 20 7b 30 20 7b 7d 7d 0a 0a 66 6f 72 63 65 64 65   {0 {}}..forcede
8e30: 6c 65 74 65 20 64 61 74 61 5f 64 69 72 0a 7d 20  lete data_dir.} 
8e40: 3b 23 20 65 6e 64 69 66 20 77 69 6e 64 6f 77 73  ;# endif windows
8e50: 0a 0a 64 6f 5f 74 65 73 74 20 32 31 2e 31 20 7b  ..do_test 21.1 {
8e60: 0a 20 20 23 20 43 72 65 61 74 65 20 61 20 63 6f  .  # Create a co
8e70: 72 72 75 70 74 20 64 61 74 61 62 61 73 65 20 69  rrupt database i
8e80: 6e 20 74 65 73 74 65 72 72 2e 64 62 2e 20 41 6e  n testerr.db. An
8e90: 64 20 61 20 6e 6f 6e 2d 63 6f 72 72 75 70 74 20  d a non-corrupt 
8ea0: 61 74 20 74 65 73 74 2e 64 62 2e 0a 20 20 23 0a  at test.db..  #.
8eb0: 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 66 6f 72    db close.  for
8ec0: 63 65 64 65 6c 65 74 65 20 74 65 73 74 2e 64 62  cedelete test.db
8ed0: 0a 20 20 73 71 6c 69 74 65 33 20 64 62 20 74 65  .  sqlite3 db te
8ee0: 73 74 2e 64 62 0a 20 20 65 78 65 63 73 71 6c 20  st.db.  execsql 
8ef0: 7b 20 0a 20 20 20 20 50 52 41 47 4d 41 20 70 61  { .    PRAGMA pa
8f00: 67 65 5f 73 69 7a 65 20 3d 20 31 30 32 34 3b 0a  ge_size = 1024;.
8f10: 20 20 20 20 50 52 41 47 4d 41 20 61 75 74 6f 5f      PRAGMA auto_
8f20: 76 61 63 75 75 6d 20 3d 20 30 3b 0a 20 20 20 20  vacuum = 0;.    
8f30: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28  CREATE TABLE t1(
8f40: 61 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 62  a PRIMARY KEY, b
8f50: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
8f60: 54 4f 20 74 31 20 56 41 4c 55 45 53 28 31 2c 20  TO t1 VALUES(1, 
8f70: 31 29 3b 0a 20 20 7d 0a 20 20 66 6f 72 20 7b 73  1);.  }.  for {s
8f80: 65 74 20 69 20 30 7d 20 7b 24 69 20 3c 20 31 30  et i 0} {$i < 10
8f90: 7d 20 7b 69 6e 63 72 20 69 7d 20 7b 0a 20 20 20  } {incr i} {.   
8fa0: 20 65 78 65 63 73 71 6c 20 7b 20 49 4e 53 45 52   execsql { INSER
8fb0: 54 20 49 4e 54 4f 20 74 31 20 53 45 4c 45 43 54  T INTO t1 SELECT
8fc0: 20 61 20 2b 20 28 31 20 3c 3c 20 24 69 29 2c 20   a + (1 << $i), 
8fd0: 62 20 2b 20 28 31 20 3c 3c 20 24 69 29 20 46 52  b + (1 << $i) FR
8fe0: 4f 4d 20 74 31 20 7d 0a 20 20 7d 0a 20 20 64 62  OM t1 }.  }.  db
8ff0: 20 63 6c 6f 73 65 0a 20 20 66 6f 72 63 65 63 6f   close.  forceco
9000: 70 79 20 74 65 73 74 2e 64 62 20 74 65 73 74 65  py test.db teste
9010: 72 72 2e 64 62 0a 20 20 68 65 78 69 6f 5f 77 72  rr.db.  hexio_wr
9020: 69 74 65 20 74 65 73 74 65 72 72 2e 64 62 20 31  ite testerr.db 1
9030: 35 30 30 30 20 5b 73 74 72 69 6e 67 20 72 65 70  5000 [string rep
9040: 65 61 74 20 35 35 20 31 30 30 5d 0a 7d 20 7b 31  eat 55 100].} {1
9050: 30 30 7d 0a 0a 73 65 74 20 6d 61 69 6e 65 72 72  00}..set mainerr
9060: 20 7b 2a 2a 2a 20 69 6e 20 64 61 74 61 62 61 73   {*** in databas
9070: 65 20 6d 61 69 6e 20 2a 2a 2a 0a 4d 75 6c 74 69  e main ***.Multi
9080: 70 6c 65 20 75 73 65 73 20 66 6f 72 20 62 79 74  ple uses for byt
9090: 65 20 36 37 32 20 6f 66 20 70 61 67 65 20 31 35  e 672 of page 15
90a0: 7d 0a 73 65 74 20 61 75 78 65 72 72 20 7b 2a 2a  }.set auxerr {**
90b0: 2a 20 69 6e 20 64 61 74 61 62 61 73 65 20 61 75  * in database au
90c0: 78 20 2a 2a 2a 0a 4d 75 6c 74 69 70 6c 65 20 75  x ***.Multiple u
90d0: 73 65 73 20 66 6f 72 20 62 79 74 65 20 36 37 32  ses for byte 672
90e0: 20 6f 66 20 70 61 67 65 20 31 35 7d 0a 0a 64 6f   of page 15}..do
90f0: 5f 74 65 73 74 20 32 32 2e 32 20 7b 0a 20 20 63  _test 22.2 {.  c
9100: 61 74 63 68 20 7b 20 64 62 20 63 6c 6f 73 65 20  atch { db close 
9110: 7d 0a 20 20 73 71 6c 69 74 65 33 20 64 62 20 74  }.  sqlite3 db t
9120: 65 73 74 65 72 72 2e 64 62 0a 20 20 65 78 65 63  esterr.db.  exec
9130: 73 71 6c 20 7b 20 50 52 41 47 4d 41 20 69 6e 74  sql { PRAGMA int
9140: 65 67 72 69 74 79 5f 63 68 65 63 6b 20 7d 0a 7d  egrity_check }.}
9150: 20 5b 6c 69 73 74 20 24 6d 61 69 6e 65 72 72 5d   [list $mainerr]
9160: 0a 0a 64 6f 5f 74 65 73 74 20 32 32 2e 33 2e 31  ..do_test 22.3.1
9170: 20 7b 0a 20 20 63 61 74 63 68 20 7b 20 64 62 20   {.  catch { db 
9180: 63 6c 6f 73 65 20 7d 0a 20 20 73 71 6c 69 74 65  close }.  sqlite
9190: 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20 65  3 db test.db.  e
91a0: 78 65 63 73 71 6c 20 7b 20 0a 20 20 20 20 41 54  xecsql { .    AT
91b0: 54 41 43 48 20 27 74 65 73 74 65 72 72 2e 64 62  TACH 'testerr.db
91c0: 27 20 41 53 20 27 61 75 78 27 3b 0a 20 20 20 20  ' AS 'aux';.    
91d0: 50 52 41 47 4d 41 20 69 6e 74 65 67 72 69 74 79  PRAGMA integrity
91e0: 5f 63 68 65 63 6b 3b 0a 20 20 7d 0a 7d 20 5b 6c  _check;.  }.} [l
91f0: 69 73 74 20 24 61 75 78 65 72 72 5d 0a 64 6f 5f  ist $auxerr].do_
9200: 74 65 73 74 20 32 32 2e 33 2e 32 20 7b 0a 20 20  test 22.3.2 {.  
9210: 65 78 65 63 73 71 6c 20 7b 20 50 52 41 47 4d 41  execsql { PRAGMA
9220: 20 6d 61 69 6e 2e 69 6e 74 65 67 72 69 74 79 5f   main.integrity_
9230: 63 68 65 63 6b 3b 20 7d 0a 7d 20 7b 6f 6b 7d 0a  check; }.} {ok}.
9240: 64 6f 5f 74 65 73 74 20 32 32 2e 33 2e 33 20 7b  do_test 22.3.3 {
9250: 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 50 52 41  .  execsql { PRA
9260: 47 4d 41 20 61 75 78 2e 69 6e 74 65 67 72 69 74  GMA aux.integrit
9270: 79 5f 63 68 65 63 6b 3b 20 7d 0a 7d 20 5b 6c 69  y_check; }.} [li
9280: 73 74 20 24 61 75 78 65 72 72 5d 0a 0a 64 6f 5f  st $auxerr]..do_
9290: 74 65 73 74 20 32 32 2e 34 2e 31 20 7b 0a 20 20  test 22.4.1 {.  
92a0: 63 61 74 63 68 20 7b 20 64 62 20 63 6c 6f 73 65  catch { db close
92b0: 20 7d 0a 20 20 73 71 6c 69 74 65 33 20 64 62 20   }.  sqlite3 db 
92c0: 74 65 73 74 65 72 72 2e 64 62 0a 20 20 65 78 65  testerr.db.  exe
92d0: 63 73 71 6c 20 7b 20 0a 20 20 20 20 41 54 54 41  csql { .    ATTA
92e0: 43 48 20 27 74 65 73 74 2e 64 62 27 20 41 53 20  CH 'test.db' AS 
92f0: 27 61 75 78 27 3b 0a 20 20 20 20 50 52 41 47 4d  'aux';.    PRAGM
9300: 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63  A integrity_chec
9310: 6b 3b 0a 20 20 7d 0a 7d 20 5b 6c 69 73 74 20 24  k;.  }.} [list $
9320: 6d 61 69 6e 65 72 72 5d 0a 64 6f 5f 74 65 73 74  mainerr].do_test
9330: 20 32 32 2e 34 2e 32 20 7b 0a 20 20 65 78 65 63   22.4.2 {.  exec
9340: 73 71 6c 20 7b 20 50 52 41 47 4d 41 20 6d 61 69  sql { PRAGMA mai
9350: 6e 2e 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63  n.integrity_chec
9360: 6b 3b 20 7d 0a 7d 20 5b 6c 69 73 74 20 24 6d 61  k; }.} [list $ma
9370: 69 6e 65 72 72 5d 0a 64 6f 5f 74 65 73 74 20 32  inerr].do_test 2
9380: 32 2e 34 2e 33 20 7b 0a 20 20 65 78 65 63 73 71  2.4.3 {.  execsq
9390: 6c 20 7b 20 50 52 41 47 4d 41 20 61 75 78 2e 69  l { PRAGMA aux.i
93a0: 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 3b 20  ntegrity_check; 
93b0: 7d 0a 7d 20 7b 6f 6b 7d 0a 0a 64 62 20 63 6c 6f  }.} {ok}..db clo
93c0: 73 65 0a 66 6f 72 63 65 64 65 6c 65 74 65 20 74  se.forcedelete t
93d0: 65 73 74 2e 64 62 20 74 65 73 74 2e 64 62 2d 77  est.db test.db-w
93e0: 61 6c 20 74 65 73 74 2e 64 62 2d 6a 6f 75 72 6e  al test.db-journ
93f0: 61 6c 0a 73 71 6c 69 74 65 33 20 64 62 20 74 65  al.sqlite3 db te
9400: 73 74 2e 64 62 0a 73 71 6c 69 74 65 33 20 64 62  st.db.sqlite3 db
9410: 32 20 74 65 73 74 2e 64 62 0a 64 6f 5f 74 65 73  2 test.db.do_tes
9420: 74 20 32 33 2e 31 20 7b 0a 20 20 64 62 20 65 76  t 23.1 {.  db ev
9430: 61 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20  al {.    CREATE 
9440: 54 41 42 4c 45 20 74 31 28 61 20 49 4e 54 45 47  TABLE t1(a INTEG
9450: 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 62  ER PRIMARY KEY,b
9460: 2c 63 2c 64 29 3b 0a 20 20 20 20 43 52 45 41 54  ,c,d);.    CREAT
9470: 45 20 49 4e 44 45 58 20 69 31 20 4f 4e 20 74 31  E INDEX i1 ON t1
9480: 28 62 2c 63 29 3b 0a 20 20 20 20 43 52 45 41 54  (b,c);.    CREAT
9490: 45 20 49 4e 44 45 58 20 69 32 20 4f 4e 20 74 31  E INDEX i2 ON t1
94a0: 28 63 2c 64 29 3b 0a 20 20 20 20 43 52 45 41 54  (c,d);.    CREAT
94b0: 45 20 54 41 42 4c 45 20 74 32 28 78 20 49 4e 54  E TABLE t2(x INT
94c0: 45 47 45 52 20 52 45 46 45 52 45 4e 43 45 53 20  EGER REFERENCES 
94d0: 74 31 29 3b 0a 20 20 7d 0a 20 20 64 62 32 20 65  t1);.  }.  db2 e
94e0: 76 61 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65  val {SELECT name
94f0: 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73   FROM sqlite_mas
9500: 74 65 72 7d 0a 7d 20 7b 74 31 20 69 31 20 69 32  ter}.} {t1 i1 i2
9510: 20 74 32 7d 0a 64 6f 5f 74 65 73 74 20 32 33 2e   t2}.do_test 23.
9520: 32 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a  2 {.  db eval {.
9530: 20 20 20 20 44 52 4f 50 20 49 4e 44 45 58 20 69      DROP INDEX i
9540: 32 3b 0a 20 20 20 20 43 52 45 41 54 45 20 49 4e  2;.    CREATE IN
9550: 44 45 58 20 69 32 20 4f 4e 20 74 31 28 63 2c 64  DEX i2 ON t1(c,d
9560: 2c 62 29 3b 0a 20 20 7d 0a 20 20 64 62 32 20 65  ,b);.  }.  db2 e
9570: 76 61 6c 20 7b 50 52 41 47 4d 41 20 69 6e 64 65  val {PRAGMA inde
9580: 78 5f 69 6e 66 6f 28 69 32 29 7d 0a 7d 20 7b 30  x_info(i2)}.} {0
9590: 20 32 20 63 20 31 20 33 20 64 20 32 20 31 20 62   2 c 1 3 d 2 1 b
95a0: 7d 0a 64 6f 5f 74 65 73 74 20 32 33 2e 33 20 7b  }.do_test 23.3 {
95b0: 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a 20 20 20  .  db eval {.   
95c0: 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 69 33   CREATE INDEX i3
95d0: 20 4f 4e 20 74 31 28 64 2c 62 2c 63 29 3b 0a 20   ON t1(d,b,c);. 
95e0: 20 7d 0a 20 20 64 62 32 20 65 76 61 6c 20 7b 50   }.  db2 eval {P
95f0: 52 41 47 4d 41 20 69 6e 64 65 78 5f 6c 69 73 74  RAGMA index_list
9600: 28 74 31 29 7d 0a 7d 20 7b 30 20 69 33 20 30 20  (t1)}.} {0 i3 0 
9610: 31 20 69 32 20 30 20 32 20 69 31 20 30 7d 0a 64  1 i2 0 2 i1 0}.d
9620: 6f 5f 74 65 73 74 20 32 33 2e 34 20 7b 0a 20 20  o_test 23.4 {.  
9630: 64 62 20 65 76 61 6c 20 7b 0a 20 20 20 20 41 4c  db eval {.    AL
9640: 54 45 52 20 54 41 42 4c 45 20 74 31 20 41 44 44  TER TABLE t1 ADD
9650: 20 43 4f 4c 55 4d 4e 20 65 3b 0a 20 20 7d 0a 20   COLUMN e;.  }. 
9660: 20 64 62 32 20 65 76 61 6c 20 7b 0a 20 20 20 20   db2 eval {.    
9670: 50 52 41 47 4d 41 20 74 61 62 6c 65 5f 69 6e 66  PRAGMA table_inf
9680: 6f 28 74 31 29 3b 0a 20 20 7d 0a 7d 20 7b 2f 34  o(t1);.  }.} {/4
9690: 20 65 20 7b 7d 20 30 20 7b 7d 20 30 2f 7d 0a 64   e {} 0 {} 0/}.d
96a0: 6f 5f 74 65 73 74 20 32 33 2e 35 20 7b 0a 20 20  o_test 23.5 {.  
96b0: 64 62 20 65 76 61 6c 20 7b 0a 20 20 20 20 44 52  db eval {.    DR
96c0: 4f 50 20 54 41 42 4c 45 20 74 32 3b 0a 20 20 20  OP TABLE t2;.   
96d0: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 32   CREATE TABLE t2
96e0: 28 78 2c 20 79 20 49 4e 54 45 47 45 52 20 52 45  (x, y INTEGER RE
96f0: 46 45 52 45 4e 43 45 53 20 74 31 29 3b 0a 20 20  FERENCES t1);.  
9700: 7d 0a 20 20 64 62 32 20 65 76 61 6c 20 7b 0a 20  }.  db2 eval {. 
9710: 20 20 20 50 52 41 47 4d 41 20 66 6f 72 65 69 67     PRAGMA foreig
9720: 6e 5f 6b 65 79 5f 6c 69 73 74 28 74 32 29 3b 0a  n_key_list(t2);.
9730: 20 20 7d 0a 7d 20 7b 30 20 30 20 74 31 20 79 20    }.} {0 0 t1 y 
9740: 7b 7d 20 7b 4e 4f 20 41 43 54 49 4f 4e 7d 20 7b  {} {NO ACTION} {
9750: 4e 4f 20 41 43 54 49 4f 4e 7d 20 4e 4f 4e 45 7d  NO ACTION} NONE}
9760: 0a 0a 66 69 6e 69 73 68 5f 74 65 73 74 0a        ..finish_test.