/ Hex Artifact Content
Login

Artifact adb21a90875bc54a880fa939c4d7c46598905aa0:


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 61 75 74 6f  .    PRAGMA auto
1910: 5f 76 61 63 75 75 6d 3d 4f 46 46 3b 0a 20 20 20  _vacuum=OFF;.   
1920: 20 42 45 47 49 4e 3b 0a 20 20 20 20 43 52 45 41   BEGIN;.    CREA
1930: 54 45 20 54 41 42 4c 45 20 74 32 28 61 2c 62 2c  TE TABLE t2(a,b,
1940: 63 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20 49  c);.    CREATE I
1950: 4e 44 45 58 20 69 32 20 4f 4e 20 74 32 28 61 29  NDEX i2 ON t2(a)
1960: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
1970: 4f 20 74 32 20 56 41 4c 55 45 53 28 31 31 2c 32  O t2 VALUES(11,2
1980: 2c 33 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20  ,3);.    INSERT 
1990: 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28 32  INTO t2 VALUES(2
19a0: 32 2c 33 2c 34 29 3b 0a 20 20 20 20 43 4f 4d 4d  2,3,4);.    COMM
19b0: 49 54 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 72  IT;.    SELECT r
19c0: 6f 77 69 64 2c 20 2a 20 66 72 6f 6d 20 74 32 3b  owid, * from t2;
19d0: 0a 20 20 7d 0a 7d 20 7b 31 20 31 31 20 32 20 33  .  }.} {1 11 2 3
19e0: 20 32 20 32 32 20 33 20 34 7d 0a 69 66 63 61 70   2 22 3 4}.ifcap
19f0: 61 62 6c 65 20 61 74 74 61 63 68 20 7b 0a 20 20  able attach {.  
1a00: 69 66 20 7b 21 5b 73 71 6c 69 74 65 33 20 2d 68  if {![sqlite3 -h
1a10: 61 73 2d 63 6f 64 65 63 5d 20 26 26 20 24 73 71  as-codec] && $sq
1a20: 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 28 69 6e 74  lite_options(int
1a30: 65 67 72 69 74 79 63 6b 29 7d 20 7b 0a 20 20 20  egrityck)} {.   
1a40: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
1a50: 33 2e 32 20 7b 0a 20 20 20 20 20 20 64 62 20 65  3.2 {.      db e
1a60: 76 61 6c 20 7b 53 45 4c 45 43 54 20 72 6f 6f 74  val {SELECT root
1a70: 70 61 67 65 20 46 52 4f 4d 20 73 71 6c 69 74 65  page FROM sqlite
1a80: 5f 6d 61 73 74 65 72 20 57 48 45 52 45 20 6e 61  _master WHERE na
1a90: 6d 65 3d 27 69 32 27 7d 20 62 72 65 61 6b 0a 20  me='i2'} break. 
1aa0: 20 20 20 20 20 73 65 74 20 70 67 73 7a 20 5b 64       set pgsz [d
1ab0: 62 20 65 76 61 6c 20 7b 50 52 41 47 4d 41 20 70  b eval {PRAGMA p
1ac0: 61 67 65 5f 73 69 7a 65 7d 5d 0a 20 20 20 20 20  age_size}].     
1ad0: 20 23 20 6f 76 65 72 77 72 69 74 65 20 74 68 65   # overwrite the
1ae0: 20 68 65 61 64 65 72 20 6f 6e 20 74 68 65 20 72   header on the r
1af0: 6f 6f 74 70 61 67 65 20 6f 66 20 74 68 65 20 69  ootpage of the i
1b00: 6e 64 65 78 20 69 6e 20 6f 72 64 65 72 20 74 6f  ndex in order to
1b10: 0a 20 20 20 20 20 20 23 20 6d 61 6b 65 20 74 68  .      # make th
1b20: 65 20 69 6e 64 65 78 20 61 70 70 65 61 72 20 74  e index appear t
1b30: 6f 20 62 65 20 65 6d 70 74 79 2e 0a 20 20 20 20  o be empty..    
1b40: 20 20 23 0a 20 20 20 20 20 20 73 65 74 20 6f 66    #.      set of
1b50: 66 73 65 74 20 5b 65 78 70 72 20 7b 24 70 67 73  fset [expr {$pgs
1b60: 7a 2a 28 24 72 6f 6f 74 70 61 67 65 2d 31 29 7d  z*($rootpage-1)}
1b70: 5d 0a 20 20 20 20 20 20 68 65 78 69 6f 5f 77 72  ].      hexio_wr
1b80: 69 74 65 20 74 65 73 74 2e 64 62 20 24 6f 66 66  ite test.db $off
1b90: 73 65 74 20 30 61 30 30 30 30 30 30 30 30 30 34  set 0a0000000004
1ba0: 30 30 30 30 30 30 30 30 30 30 0a 20 20 20 20 20  0000000000.     
1bb0: 20 64 62 20 63 6c 6f 73 65 0a 20 20 20 20 20 20   db close.      
1bc0: 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e  sqlite3 db test.
1bd0: 64 62 0a 20 20 20 20 20 20 65 78 65 63 73 71 6c  db.      execsql
1be0: 20 7b 50 52 41 47 4d 41 20 69 6e 74 65 67 72 69   {PRAGMA integri
1bf0: 74 79 5f 63 68 65 63 6b 7d 0a 20 20 20 20 7d 20  ty_check}.    } 
1c00: 7b 7b 72 6f 77 20 31 20 6d 69 73 73 69 6e 67 20  {{row 1 missing 
1c10: 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b  from index i2} {
1c20: 72 6f 77 20 32 20 6d 69 73 73 69 6e 67 20 66 72  row 2 missing fr
1c30: 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b 77 72  om index i2} {wr
1c40: 6f 6e 67 20 23 20 6f 66 20 65 6e 74 72 69 65 73  ong # of entries
1c50: 20 69 6e 20 69 6e 64 65 78 20 69 32 7d 7d 0a 20   in index i2}}. 
1c60: 20 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d     do_test pragm
1c70: 61 2d 33 2e 33 20 7b 0a 20 20 20 20 20 20 65 78  a-3.3 {.      ex
1c80: 65 63 73 71 6c 20 7b 50 52 41 47 4d 41 20 69 6e  ecsql {PRAGMA in
1c90: 74 65 67 72 69 74 79 5f 63 68 65 63 6b 3d 31 7d  tegrity_check=1}
1ca0: 0a 20 20 20 20 7d 20 7b 7b 72 6f 77 20 31 20 6d  .    } {{row 1 m
1cb0: 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65  issing from inde
1cc0: 78 20 69 32 7d 7d 0a 20 20 20 20 64 6f 5f 74 65  x i2}}.    do_te
1cd0: 73 74 20 70 72 61 67 6d 61 2d 33 2e 34 20 7b 0a  st pragma-3.4 {.
1ce0: 20 20 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a        execsql {.
1cf0: 20 20 20 20 20 20 20 20 41 54 54 41 43 48 20 44          ATTACH D
1d00: 41 54 41 42 41 53 45 20 27 74 65 73 74 2e 64 62  ATABASE 'test.db
1d10: 27 20 41 53 20 74 32 3b 0a 20 20 20 20 20 20 20  ' AS t2;.       
1d20: 20 50 52 41 47 4d 41 20 69 6e 74 65 67 72 69 74   PRAGMA integrit
1d30: 79 5f 63 68 65 63 6b 0a 20 20 20 20 20 20 7d 0a  y_check.      }.
1d40: 20 20 20 20 7d 20 7b 7b 72 6f 77 20 31 20 6d 69      } {{row 1 mi
1d50: 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78  ssing from index
1d60: 20 69 32 7d 20 7b 72 6f 77 20 32 20 6d 69 73 73   i2} {row 2 miss
1d70: 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69  ing from index i
1d80: 32 7d 20 7b 77 72 6f 6e 67 20 23 20 6f 66 20 65  2} {wrong # of e
1d90: 6e 74 72 69 65 73 20 69 6e 20 69 6e 64 65 78 20  ntries in index 
1da0: 69 32 7d 20 7b 72 6f 77 20 31 20 6d 69 73 73 69  i2} {row 1 missi
1db0: 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32  ng from index i2
1dc0: 7d 20 7b 72 6f 77 20 32 20 6d 69 73 73 69 6e 67  } {row 2 missing
1dd0: 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20   from index i2} 
1de0: 7b 77 72 6f 6e 67 20 23 20 6f 66 20 65 6e 74 72  {wrong # of entr
1df0: 69 65 73 20 69 6e 20 69 6e 64 65 78 20 69 32 7d  ies in index i2}
1e00: 7d 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 70 72  }.    do_test pr
1e10: 61 67 6d 61 2d 33 2e 35 20 7b 0a 20 20 20 20 20  agma-3.5 {.     
1e20: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20   execsql {.     
1e30: 20 20 20 50 52 41 47 4d 41 20 69 6e 74 65 67 72     PRAGMA integr
1e40: 69 74 79 5f 63 68 65 63 6b 3d 34 0a 20 20 20 20  ity_check=4.    
1e50: 20 20 7d 0a 20 20 20 20 7d 20 7b 7b 72 6f 77 20    }.    } {{row 
1e60: 31 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69  1 missing from i
1e70: 6e 64 65 78 20 69 32 7d 20 7b 72 6f 77 20 32 20  ndex i2} {row 2 
1e80: 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64  missing from ind
1e90: 65 78 20 69 32 7d 20 7b 77 72 6f 6e 67 20 23 20  ex i2} {wrong # 
1ea0: 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 69 6e  of entries in in
1eb0: 64 65 78 20 69 32 7d 20 7b 72 6f 77 20 31 20 6d  dex i2} {row 1 m
1ec0: 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65  issing from inde
1ed0: 78 20 69 32 7d 7d 0a 20 20 20 20 64 6f 5f 74 65  x i2}}.    do_te
1ee0: 73 74 20 70 72 61 67 6d 61 2d 33 2e 36 20 7b 0a  st pragma-3.6 {.
1ef0: 20 20 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a        execsql {.
1f00: 20 20 20 20 20 20 20 20 50 52 41 47 4d 41 20 69          PRAGMA i
1f10: 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 3d 78  ntegrity_check=x
1f20: 79 7a 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  yz.      }.    }
1f30: 20 7b 7b 72 6f 77 20 31 20 6d 69 73 73 69 6e 67   {{row 1 missing
1f40: 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20   from index i2} 
1f50: 7b 72 6f 77 20 32 20 6d 69 73 73 69 6e 67 20 66  {row 2 missing f
1f60: 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b 77  rom index i2} {w
1f70: 72 6f 6e 67 20 23 20 6f 66 20 65 6e 74 72 69 65  rong # of entrie
1f80: 73 20 69 6e 20 69 6e 64 65 78 20 69 32 7d 20 7b  s in index i2} {
1f90: 72 6f 77 20 31 20 6d 69 73 73 69 6e 67 20 66 72  row 1 missing fr
1fa0: 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b 72 6f  om index i2} {ro
1fb0: 77 20 32 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d  w 2 missing from
1fc0: 20 69 6e 64 65 78 20 69 32 7d 20 7b 77 72 6f 6e   index i2} {wron
1fd0: 67 20 23 20 6f 66 20 65 6e 74 72 69 65 73 20 69  g # of entries i
1fe0: 6e 20 69 6e 64 65 78 20 69 32 7d 7d 0a 20 20 20  n index i2}}.   
1ff0: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
2000: 33 2e 37 20 7b 0a 20 20 20 20 20 20 65 78 65 63  3.7 {.      exec
2010: 73 71 6c 20 7b 0a 20 20 20 20 20 20 20 20 50 52  sql {.        PR
2020: 41 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63  AGMA integrity_c
2030: 68 65 63 6b 3d 30 0a 20 20 20 20 20 20 7d 0a 20  heck=0.      }. 
2040: 20 20 20 7d 20 7b 7b 72 6f 77 20 31 20 6d 69 73     } {{row 1 mis
2050: 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20  sing from index 
2060: 69 32 7d 20 7b 72 6f 77 20 32 20 6d 69 73 73 69  i2} {row 2 missi
2070: 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32  ng from index i2
2080: 7d 20 7b 77 72 6f 6e 67 20 23 20 6f 66 20 65 6e  } {wrong # of en
2090: 74 72 69 65 73 20 69 6e 20 69 6e 64 65 78 20 69  tries in index i
20a0: 32 7d 20 7b 72 6f 77 20 31 20 6d 69 73 73 69 6e  2} {row 1 missin
20b0: 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d  g from index i2}
20c0: 20 7b 72 6f 77 20 32 20 6d 69 73 73 69 6e 67 20   {row 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 7d  es in index i2}}
2100: 0a 20 20 0a 20 20 20 20 23 20 41 64 64 20 61 64  .  .    # Add ad
2110: 64 69 74 69 6f 6e 61 6c 20 63 6f 72 72 75 70 74  ditional corrupt
2120: 69 6f 6e 20 62 79 20 61 70 70 65 6e 64 69 6e 67  ion by appending
2130: 20 75 6e 75 73 65 64 20 70 61 67 65 73 20 74 6f   unused pages to
2140: 20 74 68 65 20 65 6e 64 20 6f 66 0a 20 20 20 20   the end of.    
2150: 23 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  # the database f
2160: 69 6c 65 20 74 65 73 74 65 72 72 2e 64 62 0a 20  ile testerr.db. 
2170: 20 20 20 23 0a 20 20 20 20 64 6f 5f 74 65 73 74     #.    do_test
2180: 20 70 72 61 67 6d 61 2d 33 2e 38 20 7b 0a 20 20   pragma-3.8 {.  
2190: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 44 45 54      execsql {DET
21a0: 41 43 48 20 74 32 7d 0a 20 20 20 20 20 20 66 6f  ACH t2}.      fo
21b0: 72 63 65 64 65 6c 65 74 65 20 74 65 73 74 65 72  rcedelete tester
21c0: 72 2e 64 62 20 74 65 73 74 65 72 72 2e 64 62 2d  r.db testerr.db-
21d0: 6a 6f 75 72 6e 61 6c 0a 20 20 20 20 20 20 73 65  journal.      se
21e0: 74 20 6f 75 74 20 5b 6f 70 65 6e 20 74 65 73 74  t out [open test
21f0: 65 72 72 2e 64 62 20 77 5d 0a 20 20 20 20 20 20  err.db w].      
2200: 66 63 6f 6e 66 69 67 75 72 65 20 24 6f 75 74 20  fconfigure $out 
2210: 2d 74 72 61 6e 73 6c 61 74 69 6f 6e 20 62 69 6e  -translation bin
2220: 61 72 79 0a 20 20 20 20 20 20 73 65 74 20 69 6e  ary.      set in
2230: 20 5b 6f 70 65 6e 20 74 65 73 74 2e 64 62 20 72   [open test.db r
2240: 5d 0a 20 20 20 20 20 20 66 63 6f 6e 66 69 67 75  ].      fconfigu
2250: 72 65 20 24 69 6e 20 2d 74 72 61 6e 73 6c 61 74  re $in -translat
2260: 69 6f 6e 20 62 69 6e 61 72 79 0a 20 20 20 20 20  ion binary.     
2270: 20 70 75 74 73 20 2d 6e 6f 6e 65 77 6c 69 6e 65   puts -nonewline
2280: 20 24 6f 75 74 20 5b 72 65 61 64 20 24 69 6e 5d   $out [read $in]
2290: 0a 20 20 20 20 20 20 73 65 65 6b 20 24 69 6e 20  .      seek $in 
22a0: 30 0a 20 20 20 20 20 20 70 75 74 73 20 2d 6e 6f  0.      puts -no
22b0: 6e 65 77 6c 69 6e 65 20 24 6f 75 74 20 5b 72 65  newline $out [re
22c0: 61 64 20 24 69 6e 5d 0a 20 20 20 20 20 20 63 6c  ad $in].      cl
22d0: 6f 73 65 20 24 69 6e 0a 20 20 20 20 20 20 63 6c  ose $in.      cl
22e0: 6f 73 65 20 24 6f 75 74 0a 20 20 20 20 20 20 68  ose $out.      h
22f0: 65 78 69 6f 5f 77 72 69 74 65 20 74 65 73 74 65  exio_write teste
2300: 72 72 2e 64 62 20 32 38 20 30 30 30 30 30 30 30  rr.db 28 0000000
2310: 30 0a 20 20 20 20 20 20 65 78 65 63 73 71 6c 20  0.      execsql 
2320: 7b 52 45 49 4e 44 45 58 20 74 32 7d 0a 20 20 20  {REINDEX t2}.   
2330: 20 20 20 65 78 65 63 73 71 6c 20 7b 50 52 41 47     execsql {PRAG
2340: 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65  MA integrity_che
2350: 63 6b 7d 0a 20 20 20 20 7d 20 7b 6f 6b 7d 0a 20  ck}.    } {ok}. 
2360: 20 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d     do_test pragm
2370: 61 2d 33 2e 38 2e 31 20 7b 0a 20 20 20 20 20 20  a-3.8.1 {.      
2380: 65 78 65 63 73 71 6c 20 7b 50 52 41 47 4d 41 20  execsql {PRAGMA 
2390: 71 75 69 63 6b 5f 63 68 65 63 6b 7d 0a 20 20 20  quick_check}.   
23a0: 20 7d 20 7b 6f 6b 7d 0a 20 20 20 20 64 6f 5f 74   } {ok}.    do_t
23b0: 65 73 74 20 70 72 61 67 6d 61 2d 33 2e 38 2e 32  est pragma-3.8.2
23c0: 20 7b 0a 20 20 20 20 20 20 65 78 65 63 73 71 6c   {.      execsql
23d0: 20 7b 50 52 41 47 4d 41 20 51 55 49 43 4b 5f 43   {PRAGMA QUICK_C
23e0: 48 45 43 4b 7d 0a 20 20 20 20 7d 20 7b 6f 6b 7d  HECK}.    } {ok}
23f0: 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 70 72 61  .    do_test pra
2400: 67 6d 61 2d 33 2e 39 20 7b 0a 20 20 20 20 20 20  gma-3.9 {.      
2410: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
2420: 20 20 41 54 54 41 43 48 20 27 74 65 73 74 65 72    ATTACH 'tester
2430: 72 2e 64 62 27 20 41 53 20 74 32 3b 0a 20 20 20  r.db' AS t2;.   
2440: 20 20 20 20 20 50 52 41 47 4d 41 20 69 6e 74 65       PRAGMA inte
2450: 67 72 69 74 79 5f 63 68 65 63 6b 0a 20 20 20 20  grity_check.    
2460: 20 20 7d 0a 20 20 20 20 7d 20 7b 7b 2a 2a 2a 20    }.    } {{*** 
2470: 69 6e 20 64 61 74 61 62 61 73 65 20 74 32 20 2a  in database t2 *
2480: 2a 2a 0a 50 61 67 65 20 34 20 69 73 20 6e 65 76  **.Page 4 is nev
2490: 65 72 20 75 73 65 64 0a 50 61 67 65 20 35 20 69  er used.Page 5 i
24a0: 73 20 6e 65 76 65 72 20 75 73 65 64 0a 50 61 67  s never used.Pag
24b0: 65 20 36 20 69 73 20 6e 65 76 65 72 20 75 73 65  e 6 is never use
24c0: 64 7d 20 7b 72 6f 77 20 31 20 6d 69 73 73 69 6e  d} {row 1 missin
24d0: 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d  g from index i2}
24e0: 20 7b 72 6f 77 20 32 20 6d 69 73 73 69 6e 67 20   {row 2 missing 
24f0: 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b  from index i2} {
2500: 77 72 6f 6e 67 20 23 20 6f 66 20 65 6e 74 72 69  wrong # of entri
2510: 65 73 20 69 6e 20 69 6e 64 65 78 20 69 32 7d 7d  es in index i2}}
2520: 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 70 72 61  .    do_test pra
2530: 67 6d 61 2d 33 2e 31 30 20 7b 0a 20 20 20 20 20  gma-3.10 {.     
2540: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20   execsql {.     
2550: 20 20 20 50 52 41 47 4d 41 20 69 6e 74 65 67 72     PRAGMA integr
2560: 69 74 79 5f 63 68 65 63 6b 3d 31 0a 20 20 20 20  ity_check=1.    
2570: 20 20 7d 0a 20 20 20 20 7d 20 7b 7b 2a 2a 2a 20    }.    } {{*** 
2580: 69 6e 20 64 61 74 61 62 61 73 65 20 74 32 20 2a  in database t2 *
2590: 2a 2a 0a 50 61 67 65 20 34 20 69 73 20 6e 65 76  **.Page 4 is nev
25a0: 65 72 20 75 73 65 64 7d 7d 0a 20 20 20 20 64 6f  er used}}.    do
25b0: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 33 2e 31  _test pragma-3.1
25c0: 31 20 7b 0a 20 20 20 20 20 20 65 78 65 63 73 71  1 {.      execsq
25d0: 6c 20 7b 0a 20 20 20 20 20 20 20 20 50 52 41 47  l {.        PRAG
25e0: 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65  MA integrity_che
25f0: 63 6b 3d 35 0a 20 20 20 20 20 20 7d 0a 20 20 20  ck=5.      }.   
2600: 20 7d 20 7b 7b 2a 2a 2a 20 69 6e 20 64 61 74 61   } {{*** in data
2610: 62 61 73 65 20 74 32 20 2a 2a 2a 0a 50 61 67 65  base t2 ***.Page
2620: 20 34 20 69 73 20 6e 65 76 65 72 20 75 73 65 64   4 is never used
2630: 0a 50 61 67 65 20 35 20 69 73 20 6e 65 76 65 72  .Page 5 is never
2640: 20 75 73 65 64 0a 50 61 67 65 20 36 20 69 73 20   used.Page 6 is 
2650: 6e 65 76 65 72 20 75 73 65 64 7d 20 7b 72 6f 77  never used} {row
2660: 20 31 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20   1 missing from 
2670: 69 6e 64 65 78 20 69 32 7d 20 7b 72 6f 77 20 32  index i2} {row 2
2680: 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e   missing from in
2690: 64 65 78 20 69 32 7d 7d 0a 20 20 20 20 64 6f 5f  dex i2}}.    do_
26a0: 74 65 73 74 20 70 72 61 67 6d 61 2d 33 2e 31 32  test pragma-3.12
26b0: 20 7b 0a 20 20 20 20 20 20 65 78 65 63 73 71 6c   {.      execsql
26c0: 20 7b 0a 20 20 20 20 20 20 20 20 50 52 41 47 4d   {.        PRAGM
26d0: 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63  A integrity_chec
26e0: 6b 3d 34 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  k=4.      }.    
26f0: 7d 20 7b 7b 2a 2a 2a 20 69 6e 20 64 61 74 61 62  } {{*** in datab
2700: 61 73 65 20 74 32 20 2a 2a 2a 0a 50 61 67 65 20  ase t2 ***.Page 
2710: 34 20 69 73 20 6e 65 76 65 72 20 75 73 65 64 0a  4 is never used.
2720: 50 61 67 65 20 35 20 69 73 20 6e 65 76 65 72 20  Page 5 is never 
2730: 75 73 65 64 0a 50 61 67 65 20 36 20 69 73 20 6e  used.Page 6 is n
2740: 65 76 65 72 20 75 73 65 64 7d 20 7b 72 6f 77 20  ever used} {row 
2750: 31 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69  1 missing from i
2760: 6e 64 65 78 20 69 32 7d 7d 0a 20 20 20 20 64 6f  ndex i2}}.    do
2770: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 33 2e 31  _test pragma-3.1
2780: 33 20 7b 0a 20 20 20 20 20 20 65 78 65 63 73 71  3 {.      execsq
2790: 6c 20 7b 0a 20 20 20 20 20 20 20 20 50 52 41 47  l {.        PRAG
27a0: 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65  MA integrity_che
27b0: 63 6b 3d 33 0a 20 20 20 20 20 20 7d 0a 20 20 20  ck=3.      }.   
27c0: 20 7d 20 7b 7b 2a 2a 2a 20 69 6e 20 64 61 74 61   } {{*** in data
27d0: 62 61 73 65 20 74 32 20 2a 2a 2a 0a 50 61 67 65  base t2 ***.Page
27e0: 20 34 20 69 73 20 6e 65 76 65 72 20 75 73 65 64   4 is never used
27f0: 0a 50 61 67 65 20 35 20 69 73 20 6e 65 76 65 72  .Page 5 is never
2800: 20 75 73 65 64 0a 50 61 67 65 20 36 20 69 73 20   used.Page 6 is 
2810: 6e 65 76 65 72 20 75 73 65 64 7d 7d 0a 20 20 20  never used}}.   
2820: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
2830: 33 2e 31 34 20 7b 0a 20 20 20 20 20 20 65 78 65  3.14 {.      exe
2840: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 20 20 50  csql {.        P
2850: 52 41 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f  RAGMA integrity_
2860: 63 68 65 63 6b 28 32 29 0a 20 20 20 20 20 20 7d  check(2).      }
2870: 0a 20 20 20 20 7d 20 7b 7b 2a 2a 2a 20 69 6e 20  .    } {{*** in 
2880: 64 61 74 61 62 61 73 65 20 74 32 20 2a 2a 2a 0a  database t2 ***.
2890: 50 61 67 65 20 34 20 69 73 20 6e 65 76 65 72 20  Page 4 is never 
28a0: 75 73 65 64 0a 50 61 67 65 20 35 20 69 73 20 6e  used.Page 5 is n
28b0: 65 76 65 72 20 75 73 65 64 7d 7d 0a 20 20 20 20  ever used}}.    
28c0: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 33  do_test pragma-3
28d0: 2e 31 35 20 7b 0a 20 20 20 20 20 20 65 78 65 63  .15 {.      exec
28e0: 73 71 6c 20 7b 0a 20 20 20 20 20 20 20 20 41 54  sql {.        AT
28f0: 54 41 43 48 20 27 74 65 73 74 65 72 72 2e 64 62  TACH 'testerr.db
2900: 27 20 41 53 20 74 33 3b 0a 20 20 20 20 20 20 20  ' AS t3;.       
2910: 20 50 52 41 47 4d 41 20 69 6e 74 65 67 72 69 74   PRAGMA integrit
2920: 79 5f 63 68 65 63 6b 0a 20 20 20 20 20 20 7d 0a  y_check.      }.
2930: 20 20 20 20 7d 20 7b 7b 2a 2a 2a 20 69 6e 20 64      } {{*** in d
2940: 61 74 61 62 61 73 65 20 74 32 20 2a 2a 2a 0a 50  atabase t2 ***.P
2950: 61 67 65 20 34 20 69 73 20 6e 65 76 65 72 20 75  age 4 is never u
2960: 73 65 64 0a 50 61 67 65 20 35 20 69 73 20 6e 65  sed.Page 5 is ne
2970: 76 65 72 20 75 73 65 64 0a 50 61 67 65 20 36 20  ver used.Page 6 
2980: 69 73 20 6e 65 76 65 72 20 75 73 65 64 7d 20 7b  is never used} {
2990: 72 6f 77 20 31 20 6d 69 73 73 69 6e 67 20 66 72  row 1 missing fr
29a0: 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b 72 6f  om index i2} {ro
29b0: 77 20 32 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d  w 2 missing from
29c0: 20 69 6e 64 65 78 20 69 32 7d 20 7b 77 72 6f 6e   index i2} {wron
29d0: 67 20 23 20 6f 66 20 65 6e 74 72 69 65 73 20 69  g # of entries i
29e0: 6e 20 69 6e 64 65 78 20 69 32 7d 20 7b 2a 2a 2a  n index i2} {***
29f0: 20 69 6e 20 64 61 74 61 62 61 73 65 20 74 33 20   in database t3 
2a00: 2a 2a 2a 0a 50 61 67 65 20 34 20 69 73 20 6e 65  ***.Page 4 is ne
2a10: 76 65 72 20 75 73 65 64 0a 50 61 67 65 20 35 20  ver used.Page 5 
2a20: 69 73 20 6e 65 76 65 72 20 75 73 65 64 0a 50 61  is never used.Pa
2a30: 67 65 20 36 20 69 73 20 6e 65 76 65 72 20 75 73  ge 6 is never us
2a40: 65 64 7d 20 7b 72 6f 77 20 31 20 6d 69 73 73 69  ed} {row 1 missi
2a50: 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32  ng from index i2
2a60: 7d 20 7b 72 6f 77 20 32 20 6d 69 73 73 69 6e 67  } {row 2 missing
2a70: 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20   from index i2} 
2a80: 7b 77 72 6f 6e 67 20 23 20 6f 66 20 65 6e 74 72  {wrong # of entr
2a90: 69 65 73 20 69 6e 20 69 6e 64 65 78 20 69 32 7d  ies in index i2}
2aa0: 7d 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 70 72  }.    do_test pr
2ab0: 61 67 6d 61 2d 33 2e 31 36 20 7b 0a 20 20 20 20  agma-3.16 {.    
2ac0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
2ad0: 20 20 20 20 50 52 41 47 4d 41 20 69 6e 74 65 67      PRAGMA integ
2ae0: 72 69 74 79 5f 63 68 65 63 6b 28 31 30 29 0a 20  rity_check(10). 
2af0: 20 20 20 20 20 7d 0a 20 20 20 20 7d 20 7b 7b 2a       }.    } {{*
2b00: 2a 2a 20 69 6e 20 64 61 74 61 62 61 73 65 20 74  ** in database t
2b10: 32 20 2a 2a 2a 0a 50 61 67 65 20 34 20 69 73 20  2 ***.Page 4 is 
2b20: 6e 65 76 65 72 20 75 73 65 64 0a 50 61 67 65 20  never used.Page 
2b30: 35 20 69 73 20 6e 65 76 65 72 20 75 73 65 64 0a  5 is never used.
2b40: 50 61 67 65 20 36 20 69 73 20 6e 65 76 65 72 20  Page 6 is never 
2b50: 75 73 65 64 7d 20 7b 72 6f 77 20 31 20 6d 69 73  used} {row 1 mis
2b60: 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20  sing from index 
2b70: 69 32 7d 20 7b 72 6f 77 20 32 20 6d 69 73 73 69  i2} {row 2 missi
2b80: 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32  ng from index i2
2b90: 7d 20 7b 77 72 6f 6e 67 20 23 20 6f 66 20 65 6e  } {wrong # of en
2ba0: 74 72 69 65 73 20 69 6e 20 69 6e 64 65 78 20 69  tries in index i
2bb0: 32 7d 20 7b 2a 2a 2a 20 69 6e 20 64 61 74 61 62  2} {*** in datab
2bc0: 61 73 65 20 74 33 20 2a 2a 2a 0a 50 61 67 65 20  ase t3 ***.Page 
2bd0: 34 20 69 73 20 6e 65 76 65 72 20 75 73 65 64 0a  4 is never used.
2be0: 50 61 67 65 20 35 20 69 73 20 6e 65 76 65 72 20  Page 5 is never 
2bf0: 75 73 65 64 0a 50 61 67 65 20 36 20 69 73 20 6e  used.Page 6 is n
2c00: 65 76 65 72 20 75 73 65 64 7d 20 7b 72 6f 77 20  ever used} {row 
2c10: 31 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69  1 missing from i
2c20: 6e 64 65 78 20 69 32 7d 7d 0a 20 20 20 20 64 6f  ndex i2}}.    do
2c30: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 33 2e 31  _test pragma-3.1
2c40: 37 20 7b 0a 20 20 20 20 20 20 65 78 65 63 73 71  7 {.      execsq
2c50: 6c 20 7b 0a 20 20 20 20 20 20 20 20 50 52 41 47  l {.        PRAG
2c60: 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65  MA integrity_che
2c70: 63 6b 3d 38 0a 20 20 20 20 20 20 7d 0a 20 20 20  ck=8.      }.   
2c80: 20 7d 20 7b 7b 2a 2a 2a 20 69 6e 20 64 61 74 61   } {{*** in data
2c90: 62 61 73 65 20 74 32 20 2a 2a 2a 0a 50 61 67 65  base t2 ***.Page
2ca0: 20 34 20 69 73 20 6e 65 76 65 72 20 75 73 65 64   4 is never used
2cb0: 0a 50 61 67 65 20 35 20 69 73 20 6e 65 76 65 72  .Page 5 is never
2cc0: 20 75 73 65 64 0a 50 61 67 65 20 36 20 69 73 20   used.Page 6 is 
2cd0: 6e 65 76 65 72 20 75 73 65 64 7d 20 7b 72 6f 77  never used} {row
2ce0: 20 31 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20   1 missing from 
2cf0: 69 6e 64 65 78 20 69 32 7d 20 7b 72 6f 77 20 32  index i2} {row 2
2d00: 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e   missing from in
2d10: 64 65 78 20 69 32 7d 20 7b 77 72 6f 6e 67 20 23  dex i2} {wrong #
2d20: 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 69   of entries in i
2d30: 6e 64 65 78 20 69 32 7d 20 7b 2a 2a 2a 20 69 6e  ndex i2} {*** in
2d40: 20 64 61 74 61 62 61 73 65 20 74 33 20 2a 2a 2a   database t3 ***
2d50: 0a 50 61 67 65 20 34 20 69 73 20 6e 65 76 65 72  .Page 4 is never
2d60: 20 75 73 65 64 0a 50 61 67 65 20 35 20 69 73 20   used.Page 5 is 
2d70: 6e 65 76 65 72 20 75 73 65 64 7d 7d 0a 20 20 20  never used}}.   
2d80: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
2d90: 33 2e 31 38 20 7b 0a 20 20 20 20 20 20 65 78 65  3.18 {.      exe
2da0: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 20 20 50  csql {.        P
2db0: 52 41 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f  RAGMA integrity_
2dc0: 63 68 65 63 6b 3d 34 0a 20 20 20 20 20 20 7d 0a  check=4.      }.
2dd0: 20 20 20 20 7d 20 7b 7b 2a 2a 2a 20 69 6e 20 64      } {{*** in d
2de0: 61 74 61 62 61 73 65 20 74 32 20 2a 2a 2a 0a 50  atabase t2 ***.P
2df0: 61 67 65 20 34 20 69 73 20 6e 65 76 65 72 20 75  age 4 is never u
2e00: 73 65 64 0a 50 61 67 65 20 35 20 69 73 20 6e 65  sed.Page 5 is ne
2e10: 76 65 72 20 75 73 65 64 0a 50 61 67 65 20 36 20  ver used.Page 6 
2e20: 69 73 20 6e 65 76 65 72 20 75 73 65 64 7d 20 7b  is never used} {
2e30: 72 6f 77 20 31 20 6d 69 73 73 69 6e 67 20 66 72  row 1 missing fr
2e40: 6f 6d 20 69 6e 64 65 78 20 69 32 7d 7d 0a 20 20  om index i2}}.  
2e50: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67  }.  do_test prag
2e60: 6d 61 2d 33 2e 31 39 20 7b 0a 20 20 20 20 63 61  ma-3.19 {.    ca
2e70: 74 63 68 20 7b 64 62 20 63 6c 6f 73 65 7d 0a 20  tch {db close}. 
2e80: 20 20 20 66 6f 72 63 65 64 65 6c 65 74 65 20 74     forcedelete t
2e90: 65 73 74 2e 64 62 20 74 65 73 74 2e 64 62 2d 6a  est.db test.db-j
2ea0: 6f 75 72 6e 61 6c 0a 20 20 20 20 73 71 6c 69 74  ournal.    sqlit
2eb0: 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20  e3 db test.db.  
2ec0: 20 20 64 62 20 65 76 61 6c 20 7b 50 52 41 47 4d    db eval {PRAGM
2ed0: 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63  A integrity_chec
2ee0: 6b 7d 0a 20 20 7d 20 7b 6f 6b 7d 0a 7d 0a 23 65  k}.  } {ok}.}.#e
2ef0: 78 69 74 0a 0a 23 20 54 65 73 74 20 6d 6f 64 69  xit..# Test modi
2f00: 66 79 69 6e 67 20 74 68 65 20 63 61 63 68 65 5f  fying the cache_
2f10: 73 69 7a 65 20 6f 66 20 61 6e 20 61 74 74 61 63  size of an attac
2f20: 68 65 64 20 64 61 74 61 62 61 73 65 2e 0a 69 66  hed database..if
2f30: 63 61 70 61 62 6c 65 20 70 61 67 65 72 5f 70 72  capable pager_pr
2f40: 61 67 6d 61 73 26 26 61 74 74 61 63 68 20 7b 0a  agmas&&attach {.
2f50: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 34  do_test pragma-4
2f60: 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .1 {.  execsql {
2f70: 0a 20 20 20 20 41 54 54 41 43 48 20 27 74 65 73  .    ATTACH 'tes
2f80: 74 32 2e 64 62 27 20 41 53 20 61 75 78 3b 0a 20  t2.db' AS aux;. 
2f90: 20 20 20 70 72 61 67 6d 61 20 61 75 78 2e 63 61     pragma aux.ca
2fa0: 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 70 72  che_size;.    pr
2fb0: 61 67 6d 61 20 61 75 78 2e 64 65 66 61 75 6c 74  agma aux.default
2fc0: 5f 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 7d  _cache_size;.  }
2fd0: 20 0a 7d 20 5b 6c 69 73 74 20 24 44 46 4c 54 5f   .} [list $DFLT_
2fe0: 43 41 43 48 45 5f 53 5a 20 24 44 46 4c 54 5f 43  CACHE_SZ $DFLT_C
2ff0: 41 43 48 45 5f 53 5a 5d 0a 64 6f 5f 74 65 73 74  ACHE_SZ].do_test
3000: 20 70 72 61 67 6d 61 2d 34 2e 32 20 7b 0a 20 20   pragma-4.2 {.  
3010: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 70 72  execsql {.    pr
3020: 61 67 6d 61 20 61 75 78 2e 63 61 63 68 65 5f 73  agma aux.cache_s
3030: 69 7a 65 20 3d 20 35 30 3b 0a 20 20 20 20 70 72  ize = 50;.    pr
3040: 61 67 6d 61 20 61 75 78 2e 63 61 63 68 65 5f 73  agma aux.cache_s
3050: 69 7a 65 3b 0a 20 20 20 20 70 72 61 67 6d 61 20  ize;.    pragma 
3060: 61 75 78 2e 64 65 66 61 75 6c 74 5f 63 61 63 68  aux.default_cach
3070: 65 5f 73 69 7a 65 3b 0a 20 20 7d 20 0a 7d 20 5b  e_size;.  } .} [
3080: 6c 69 73 74 20 35 30 20 24 44 46 4c 54 5f 43 41  list 50 $DFLT_CA
3090: 43 48 45 5f 53 5a 5d 0a 64 6f 5f 74 65 73 74 20  CHE_SZ].do_test 
30a0: 70 72 61 67 6d 61 2d 34 2e 33 20 7b 0a 20 20 65  pragma-4.3 {.  e
30b0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 70 72 61  xecsql {.    pra
30c0: 67 6d 61 20 61 75 78 2e 64 65 66 61 75 6c 74 5f  gma aux.default_
30d0: 63 61 63 68 65 5f 73 69 7a 65 20 3d 20 34 35 36  cache_size = 456
30e0: 3b 0a 20 20 20 20 70 72 61 67 6d 61 20 61 75 78  ;.    pragma aux
30f0: 2e 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20  .cache_size;.   
3100: 20 70 72 61 67 6d 61 20 61 75 78 2e 64 65 66 61   pragma aux.defa
3110: 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65 3b 0a  ult_cache_size;.
3120: 20 20 7d 20 0a 7d 20 7b 34 35 36 20 34 35 36 7d    } .} {456 456}
3130: 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d  .do_test pragma-
3140: 34 2e 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  4.4 {.  execsql 
3150: 7b 0a 20 20 20 20 70 72 61 67 6d 61 20 63 61 63  {.    pragma cac
3160: 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 70 72 61  he_size;.    pra
3170: 67 6d 61 20 64 65 66 61 75 6c 74 5f 63 61 63 68  gma default_cach
3180: 65 5f 73 69 7a 65 3b 0a 20 20 7d 20 0a 7d 20 5b  e_size;.  } .} [
3190: 6c 69 73 74 20 24 44 46 4c 54 5f 43 41 43 48 45  list $DFLT_CACHE
31a0: 5f 53 5a 20 24 44 46 4c 54 5f 43 41 43 48 45 5f  _SZ $DFLT_CACHE_
31b0: 53 5a 5d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67  SZ].do_test prag
31c0: 6d 61 2d 34 2e 35 20 7b 0a 20 20 65 78 65 63 73  ma-4.5 {.  execs
31d0: 71 6c 20 7b 0a 20 20 20 20 44 45 54 41 43 48 20  ql {.    DETACH 
31e0: 61 75 78 3b 0a 20 20 20 20 41 54 54 41 43 48 20  aux;.    ATTACH 
31f0: 27 74 65 73 74 33 2e 64 62 27 20 41 53 20 61 75  'test3.db' AS au
3200: 78 3b 0a 20 20 20 20 70 72 61 67 6d 61 20 61 75  x;.    pragma au
3210: 78 2e 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20  x.cache_size;.  
3220: 20 20 70 72 61 67 6d 61 20 61 75 78 2e 64 65 66    pragma aux.def
3230: 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65 3b  ault_cache_size;
3240: 0a 20 20 7d 20 0a 7d 20 5b 6c 69 73 74 20 24 44  .  } .} [list $D
3250: 46 4c 54 5f 43 41 43 48 45 5f 53 5a 20 24 44 46  FLT_CACHE_SZ $DF
3260: 4c 54 5f 43 41 43 48 45 5f 53 5a 5d 0a 64 6f 5f  LT_CACHE_SZ].do_
3270: 74 65 73 74 20 70 72 61 67 6d 61 2d 34 2e 36 20  test pragma-4.6 
3280: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
3290: 20 20 44 45 54 41 43 48 20 61 75 78 3b 0a 20 20    DETACH aux;.  
32a0: 20 20 41 54 54 41 43 48 20 27 74 65 73 74 32 2e    ATTACH 'test2.
32b0: 64 62 27 20 41 53 20 61 75 78 3b 0a 20 20 20 20  db' AS aux;.    
32c0: 70 72 61 67 6d 61 20 61 75 78 2e 63 61 63 68 65  pragma aux.cache
32d0: 5f 73 69 7a 65 3b 0a 20 20 20 20 70 72 61 67 6d  _size;.    pragm
32e0: 61 20 61 75 78 2e 64 65 66 61 75 6c 74 5f 63 61  a aux.default_ca
32f0: 63 68 65 5f 73 69 7a 65 3b 0a 20 20 7d 20 0a 7d  che_size;.  } .}
3300: 20 7b 34 35 36 20 34 35 36 7d 0a 7d 20 3b 23 20   {456 456}.} ;# 
3310: 69 66 63 61 70 61 62 6c 65 20 70 61 67 65 72 5f  ifcapable pager_
3320: 70 72 61 67 6d 61 73 0a 0a 23 20 54 65 73 74 20  pragmas..# Test 
3330: 74 68 61 74 20 6d 6f 64 69 66 79 69 6e 67 20 74  that modifying t
3340: 68 65 20 73 79 6e 63 2d 6c 65 76 65 6c 20 69 6e  he sync-level in
3350: 20 74 68 65 20 6d 69 64 64 6c 65 20 6f 66 20 61   the middle of a
3360: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 0a   transaction is.
3370: 23 20 64 69 73 61 6c 6c 6f 77 65 64 2e 0a 69 66  # disallowed..if
3380: 63 61 70 61 62 6c 65 20 70 61 67 65 72 5f 70 72  capable pager_pr
3390: 61 67 6d 61 73 20 7b 0a 64 6f 5f 74 65 73 74 20  agmas {.do_test 
33a0: 70 72 61 67 6d 61 2d 35 2e 30 20 7b 0a 20 20 65  pragma-5.0 {.  e
33b0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 70 72 61  xecsql {.    pra
33c0: 67 6d 61 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3b  gma synchronous;
33d0: 0a 20 20 7d 20 0a 7d 20 7b 32 7d 0a 64 6f 5f 74  .  } .} {2}.do_t
33e0: 65 73 74 20 70 72 61 67 6d 61 2d 35 2e 31 20 7b  est pragma-5.1 {
33f0: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20  .  catchsql {.  
3400: 20 20 42 45 47 49 4e 3b 0a 20 20 20 20 70 72 61    BEGIN;.    pra
3410: 67 6d 61 20 73 79 6e 63 68 72 6f 6e 6f 75 73 20  gma synchronous 
3420: 3d 20 4f 46 46 3b 0a 20 20 7d 20 0a 7d 20 7b 31  = OFF;.  } .} {1
3430: 20 7b 53 61 66 65 74 79 20 6c 65 76 65 6c 20 6d   {Safety level m
3440: 61 79 20 6e 6f 74 20 62 65 20 63 68 61 6e 67 65  ay not be change
3450: 64 20 69 6e 73 69 64 65 20 61 20 74 72 61 6e 73  d inside a trans
3460: 61 63 74 69 6f 6e 7d 7d 0a 64 6f 5f 74 65 73 74  action}}.do_test
3470: 20 70 72 61 67 6d 61 2d 35 2e 32 20 7b 0a 20 20   pragma-5.2 {.  
3480: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 70 72  execsql {.    pr
3490: 61 67 6d 61 20 73 79 6e 63 68 72 6f 6e 6f 75 73  agma synchronous
34a0: 3b 0a 20 20 7d 20 0a 7d 20 7b 32 7d 0a 63 61 74  ;.  } .} {2}.cat
34b0: 63 68 73 71 6c 20 7b 43 4f 4d 4d 49 54 3b 7d 0a  chsql {COMMIT;}.
34c0: 7d 20 3b 23 20 69 66 63 61 70 61 62 6c 65 20 70  } ;# ifcapable p
34d0: 61 67 65 72 5f 70 72 61 67 6d 61 73 0a 0a 23 20  ager_pragmas..# 
34e0: 54 65 73 74 20 73 63 68 65 6d 61 2d 71 75 65 72  Test schema-quer
34f0: 79 20 70 72 61 67 6d 61 73 0a 23 0a 69 66 63 61  y pragmas.#.ifca
3500: 70 61 62 6c 65 20 73 63 68 65 6d 61 5f 70 72 61  pable schema_pra
3510: 67 6d 61 73 20 7b 0a 69 66 63 61 70 61 62 6c 65  gmas {.ifcapable
3520: 20 74 65 6d 70 64 62 26 26 61 74 74 61 63 68 20   tempdb&&attach 
3530: 7b 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67  {.  do_test prag
3540: 6d 61 2d 36 2e 31 20 7b 0a 20 20 20 20 73 65 74  ma-6.1 {.    set
3550: 20 72 65 73 20 7b 7d 0a 20 20 20 20 65 78 65 63   res {}.    exec
3560: 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52  sql {SELECT * FR
3570: 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d  OM sqlite_temp_m
3580: 61 73 74 65 72 7d 0a 20 20 20 20 66 6f 72 65 61  aster}.    forea
3590: 63 68 20 7b 69 64 78 20 6e 61 6d 65 20 66 69 6c  ch {idx name fil
35a0: 65 7d 20 5b 65 78 65 63 73 71 6c 20 7b 70 72 61  e} [execsql {pra
35b0: 67 6d 61 20 64 61 74 61 62 61 73 65 5f 6c 69 73  gma database_lis
35c0: 74 7d 5d 20 7b 0a 20 20 20 20 20 20 6c 61 70 70  t}] {.      lapp
35d0: 65 6e 64 20 72 65 73 20 24 69 64 78 20 24 6e 61  end res $idx $na
35e0: 6d 65 0a 20 20 20 20 7d 0a 20 20 20 20 73 65 74  me.    }.    set
35f0: 20 72 65 73 0a 20 20 7d 20 7b 30 20 6d 61 69 6e   res.  } {0 main
3600: 20 31 20 74 65 6d 70 20 32 20 61 75 78 7d 0a 7d   1 temp 2 aux}.}
3610: 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d  .do_test pragma-
3620: 36 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  6.2 {.  execsql 
3630: 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42  {.    CREATE TAB
3640: 4c 45 20 74 32 28 61 2c 62 2c 63 29 3b 0a 20 20  LE t2(a,b,c);.  
3650: 20 20 70 72 61 67 6d 61 20 74 61 62 6c 65 5f 69    pragma table_i
3660: 6e 66 6f 28 74 32 29 0a 20 20 7d 0a 7d 20 7b 30  nfo(t2).  }.} {0
3670: 20 61 20 7b 7d 20 30 20 7b 7d 20 30 20 31 20 62   a {} 0 {} 0 1 b
3680: 20 7b 7d 20 30 20 7b 7d 20 30 20 32 20 63 20 7b   {} 0 {} 0 2 c {
3690: 7d 20 30 20 7b 7d 20 30 7d 0a 64 6f 5f 74 65 73  } 0 {} 0}.do_tes
36a0: 74 20 70 72 61 67 6d 61 2d 36 2e 32 2e 31 20 7b  t pragma-6.2.1 {
36b0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
36c0: 20 70 72 61 67 6d 61 20 74 61 62 6c 65 5f 69 6e   pragma table_in
36d0: 66 6f 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 62 20  fo;.  }.} {}.db 
36e0: 6e 75 6c 6c 76 61 6c 75 65 20 3c 3c 4e 55 4c 4c  nullvalue <<NULL
36f0: 3e 3e 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  >>.do_test pragm
3700: 61 2d 36 2e 32 2e 32 20 7b 0a 20 20 65 78 65 63  a-6.2.2 {.  exec
3710: 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45  sql {.    CREATE
3720: 20 54 41 42 4c 45 20 74 35 28 0a 20 20 20 20 20   TABLE t5(.     
3730: 20 61 20 54 45 58 54 20 44 45 46 41 55 4c 54 20   a TEXT DEFAULT 
3740: 43 55 52 52 45 4e 54 5f 54 49 4d 45 53 54 41 4d  CURRENT_TIMESTAM
3750: 50 2c 20 0a 20 20 20 20 20 20 62 20 44 45 46 41  P, .      b DEFA
3760: 55 4c 54 20 28 35 2b 33 29 2c 0a 20 20 20 20 20  ULT (5+3),.     
3770: 20 63 20 54 45 58 54 2c 0a 20 20 20 20 20 20 64   c TEXT,.      d
3780: 20 49 4e 54 45 47 45 52 20 44 45 46 41 55 4c 54   INTEGER DEFAULT
3790: 20 4e 55 4c 4c 2c 0a 20 20 20 20 20 20 65 20 54   NULL,.      e T
37a0: 45 58 54 20 44 45 46 41 55 4c 54 20 27 27 2c 0a  EXT DEFAULT '',.
37b0: 20 20 20 20 20 20 55 4e 49 51 55 45 28 62 2c 63        UNIQUE(b,c
37c0: 2c 64 29 2c 0a 20 20 20 20 20 20 50 52 49 4d 41  ,d),.      PRIMA
37d0: 52 59 20 4b 45 59 28 65 2c 62 2c 63 29 0a 20 20  RY KEY(e,b,c).  
37e0: 20 20 29 3b 0a 20 20 20 20 50 52 41 47 4d 41 20    );.    PRAGMA 
37f0: 74 61 62 6c 65 5f 69 6e 66 6f 28 74 35 29 3b 0a  table_info(t5);.
3800: 20 20 7d 0a 7d 20 7b 30 20 61 20 54 45 58 54 20    }.} {0 a TEXT 
3810: 30 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 53 54  0 CURRENT_TIMEST
3820: 41 4d 50 20 30 20 31 20 62 20 7b 7d 20 30 20 35  AMP 0 1 b {} 0 5
3830: 2b 33 20 32 20 32 20 63 20 54 45 58 54 20 30 20  +3 2 2 c TEXT 0 
3840: 3c 3c 4e 55 4c 4c 3e 3e 20 33 20 33 20 64 20 49  <<NULL>> 3 3 d I
3850: 4e 54 45 47 45 52 20 30 20 4e 55 4c 4c 20 30 20  NTEGER 0 NULL 0 
3860: 34 20 65 20 54 45 58 54 20 30 20 27 27 20 31 7d  4 e TEXT 0 '' 1}
3870: 0a 64 62 20 6e 75 6c 6c 76 61 6c 75 65 20 7b 7d  .db nullvalue {}
3880: 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d  .do_test pragma-
3890: 36 2e 32 2e 33 20 7b 0a 20 20 65 78 65 63 73 71  6.2.3 {.  execsq
38a0: 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54  l {.    CREATE T
38b0: 41 42 4c 45 20 74 32 5f 33 28 61 2c 62 20 49 4e  ABLE t2_3(a,b IN
38c0: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
38d0: 59 2c 63 29 3b 0a 20 20 20 20 70 72 61 67 6d 61  Y,c);.    pragma
38e0: 20 74 61 62 6c 65 5f 69 6e 66 6f 28 74 32 5f 33   table_info(t2_3
38f0: 29 0a 20 20 7d 0a 7d 20 7b 30 20 61 20 7b 7d 20  ).  }.} {0 a {} 
3900: 30 20 7b 7d 20 30 20 31 20 62 20 49 4e 54 45 47  0 {} 0 1 b INTEG
3910: 45 52 20 30 20 7b 7d 20 31 20 32 20 63 20 7b 7d  ER 0 {} 1 2 c {}
3920: 20 30 20 7b 7d 20 30 7d 0a 69 66 63 61 70 61 62   0 {} 0}.ifcapab
3930: 6c 65 20 7b 66 6f 72 65 69 67 6e 6b 65 79 7d 20  le {foreignkey} 
3940: 7b 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67  {.  do_test prag
3950: 6d 61 2d 36 2e 33 2e 31 20 7b 0a 20 20 20 20 65  ma-6.3.1 {.    e
3960: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 43  xecsql {.      C
3970: 52 45 41 54 45 20 54 41 42 4c 45 20 74 33 28 61  REATE TABLE t3(a
3980: 20 69 6e 74 20 72 65 66 65 72 65 6e 63 65 73 20   int references 
3990: 74 32 28 62 29 2c 20 62 20 55 4e 49 51 55 45 29  t2(b), b UNIQUE)
39a0: 3b 0a 20 20 20 20 20 20 70 72 61 67 6d 61 20 66  ;.      pragma f
39b0: 6f 72 65 69 67 6e 5f 6b 65 79 5f 6c 69 73 74 28  oreign_key_list(
39c0: 74 33 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b  t3);.    }.  } {
39d0: 30 20 30 20 74 32 20 61 20 62 20 7b 4e 4f 20 41  0 0 t2 a b {NO A
39e0: 43 54 49 4f 4e 7d 20 7b 4e 4f 20 41 43 54 49 4f  CTION} {NO ACTIO
39f0: 4e 7d 20 4e 4f 4e 45 7d 0a 20 20 64 6f 5f 74 65  N} NONE}.  do_te
3a00: 73 74 20 70 72 61 67 6d 61 2d 36 2e 33 2e 32 20  st pragma-6.3.2 
3a10: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a  {.    execsql {.
3a20: 20 20 20 20 20 20 70 72 61 67 6d 61 20 66 6f 72        pragma for
3a30: 65 69 67 6e 5f 6b 65 79 5f 6c 69 73 74 3b 0a 20  eign_key_list;. 
3a40: 20 20 20 7d 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f     }.  } {}.  do
3a50: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 36 2e 33  _test pragma-6.3
3a60: 2e 33 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  .3 {.    execsql
3a70: 20 7b 0a 20 20 20 20 20 20 70 72 61 67 6d 61 20   {.      pragma 
3a80: 66 6f 72 65 69 67 6e 5f 6b 65 79 5f 6c 69 73 74  foreign_key_list
3a90: 28 74 33 5f 62 6f 67 75 73 29 3b 0a 20 20 20 20  (t3_bogus);.    
3aa0: 7d 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65  }.  } {}.  do_te
3ab0: 73 74 20 70 72 61 67 6d 61 2d 36 2e 33 2e 34 20  st pragma-6.3.4 
3ac0: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a  {.    execsql {.
3ad0: 20 20 20 20 20 20 70 72 61 67 6d 61 20 66 6f 72        pragma for
3ae0: 65 69 67 6e 5f 6b 65 79 5f 6c 69 73 74 28 74 35  eign_key_list(t5
3af0: 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 7d 0a  );.    }.  } {}.
3b00: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
3b10: 2d 36 2e 34 20 7b 0a 20 20 20 20 65 78 65 63 73  -6.4 {.    execs
3b20: 71 6c 20 7b 0a 20 20 20 20 20 20 70 72 61 67 6d  ql {.      pragm
3b30: 61 20 69 6e 64 65 78 5f 6c 69 73 74 28 74 33 29  a index_list(t3)
3b40: 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 30 20 73  ;.    }.  } {0 s
3b50: 71 6c 69 74 65 5f 61 75 74 6f 69 6e 64 65 78 5f  qlite_autoindex_
3b60: 74 33 5f 31 20 31 7d 0a 7d 0a 69 66 63 61 70 61  t3_1 1}.}.ifcapa
3b70: 62 6c 65 20 7b 21 66 6f 72 65 69 67 6e 6b 65 79  ble {!foreignkey
3b80: 7d 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 43  } {.  execsql {C
3b90: 52 45 41 54 45 20 54 41 42 4c 45 20 74 33 28 61  REATE TABLE t3(a
3ba0: 2c 62 20 55 4e 49 51 55 45 29 7d 0a 7d 0a 64 6f  ,b UNIQUE)}.}.do
3bb0: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 36 2e 35  _test pragma-6.5
3bc0: 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .1 {.  execsql {
3bd0: 0a 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45  .    CREATE INDE
3be0: 58 20 74 33 69 31 20 4f 4e 20 74 33 28 61 2c 62  X t3i1 ON t3(a,b
3bf0: 29 3b 0a 20 20 20 20 70 72 61 67 6d 61 20 69 6e  );.    pragma in
3c00: 64 65 78 5f 69 6e 66 6f 28 74 33 69 31 29 3b 0a  dex_info(t3i1);.
3c10: 20 20 7d 0a 7d 20 7b 30 20 30 20 61 20 31 20 31    }.} {0 0 a 1 1
3c20: 20 62 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67   b}.do_test prag
3c30: 6d 61 2d 36 2e 35 2e 32 20 7b 0a 20 20 65 78 65  ma-6.5.2 {.  exe
3c40: 63 73 71 6c 20 7b 0a 20 20 20 20 70 72 61 67 6d  csql {.    pragm
3c50: 61 20 69 6e 64 65 78 5f 69 6e 66 6f 28 74 33 69  a index_info(t3i
3c60: 31 5f 62 6f 67 75 73 29 3b 0a 20 20 7d 0a 7d 20  1_bogus);.  }.} 
3c70: 7b 7d 0a 0a 69 66 63 61 70 61 62 6c 65 20 74 65  {}..ifcapable te
3c80: 6d 70 64 62 20 7b 0a 20 20 23 20 54 65 73 74 20  mpdb {.  # Test 
3c90: 66 6f 72 20 74 69 63 6b 65 74 20 23 33 33 32 30  for ticket #3320
3ca0: 2e 20 57 68 65 6e 20 61 20 74 65 6d 70 20 74 61  . When a temp ta
3cb0: 62 6c 65 20 6f 66 20 74 68 65 20 73 61 6d 65 20  ble of the same 
3cc0: 6e 61 6d 65 20 65 78 69 73 74 73 2c 20 6d 61 6b  name exists, mak
3cd0: 65 0a 20 20 23 20 73 75 72 65 20 74 68 65 20 73  e.  # sure the s
3ce0: 63 68 65 6d 61 20 6f 66 20 74 68 65 20 6d 61 69  chema of the mai
3cf0: 6e 20 74 61 62 6c 65 20 63 61 6e 20 73 74 69 6c  n table can stil
3d00: 6c 20 62 65 20 71 75 65 72 69 65 64 20 75 73 69  l be queried usi
3d10: 6e 67 20 0a 20 20 23 20 22 70 72 61 67 6d 61 20  ng .  # "pragma 
3d20: 74 61 62 6c 65 5f 69 6e 66 6f 22 3a 0a 20 20 64  table_info":.  d
3d30: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 36 2e  o_test pragma-6.
3d40: 36 2e 31 20 7b 0a 20 20 20 20 65 78 65 63 73 71  6.1 {.    execsq
3d50: 6c 20 7b 0a 20 20 20 20 20 20 43 52 45 41 54 45  l {.      CREATE
3d60: 20 54 41 42 4c 45 20 74 72 69 61 6c 28 63 6f 6c   TABLE trial(col
3d70: 5f 6d 61 69 6e 29 3b 0a 20 20 20 20 20 20 43 52  _main);.      CR
3d80: 45 41 54 45 20 54 45 4d 50 20 54 41 42 4c 45 20  EATE TEMP TABLE 
3d90: 74 72 69 61 6c 28 63 6f 6c 5f 74 65 6d 70 29 3b  trial(col_temp);
3da0: 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 7d 0a 20 20  .    }.  } {}.  
3db0: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 36  do_test pragma-6
3dc0: 2e 36 2e 32 20 7b 0a 20 20 20 20 65 78 65 63 73  .6.2 {.    execs
3dd0: 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d  ql {.      PRAGM
3de0: 41 20 74 61 62 6c 65 5f 69 6e 66 6f 28 74 72 69  A table_info(tri
3df0: 61 6c 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b  al);.    }.  } {
3e00: 30 20 63 6f 6c 5f 74 65 6d 70 20 7b 7d 20 30 20  0 col_temp {} 0 
3e10: 7b 7d 20 30 7d 0a 20 20 64 6f 5f 74 65 73 74 20  {} 0}.  do_test 
3e20: 70 72 61 67 6d 61 2d 36 2e 36 2e 33 20 7b 0a 20  pragma-6.6.3 {. 
3e30: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
3e40: 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 2e 74     PRAGMA temp.t
3e50: 61 62 6c 65 5f 69 6e 66 6f 28 74 72 69 61 6c 29  able_info(trial)
3e60: 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 30 20 63  ;.    }.  } {0 c
3e70: 6f 6c 5f 74 65 6d 70 20 7b 7d 20 30 20 7b 7d 20  ol_temp {} 0 {} 
3e80: 30 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61  0}.  do_test pra
3e90: 67 6d 61 2d 36 2e 36 2e 34 20 7b 0a 20 20 20 20  gma-6.6.4 {.    
3ea0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
3eb0: 50 52 41 47 4d 41 20 6d 61 69 6e 2e 74 61 62 6c  PRAGMA main.tabl
3ec0: 65 5f 69 6e 66 6f 28 74 72 69 61 6c 29 3b 0a 20  e_info(trial);. 
3ed0: 20 20 20 7d 0a 20 20 7d 20 7b 30 20 63 6f 6c 5f     }.  } {0 col_
3ee0: 6d 61 69 6e 20 7b 7d 20 30 20 7b 7d 20 30 7d 0a  main {} 0 {} 0}.
3ef0: 7d 0a 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  }..do_test pragm
3f00: 61 2d 36 2e 37 20 7b 0a 20 20 65 78 65 63 73 71  a-6.7 {.  execsq
3f10: 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54  l {.    CREATE T
3f20: 41 42 4c 45 20 74 65 73 74 5f 74 61 62 6c 65 28  ABLE test_table(
3f30: 0a 20 20 20 20 20 20 6f 6e 65 20 49 4e 54 20 4e  .      one INT N
3f40: 4f 54 20 4e 55 4c 4c 20 44 45 46 41 55 4c 54 20  OT NULL DEFAULT 
3f50: 2d 31 2c 20 0a 20 20 20 20 20 20 74 77 6f 20 74  -1, .      two t
3f60: 65 78 74 2c 0a 20 20 20 20 20 20 74 68 72 65 65  ext,.      three
3f70: 20 56 41 52 43 48 41 52 28 34 35 2c 20 36 35 29   VARCHAR(45, 65)
3f80: 20 44 45 46 41 55 4c 54 20 27 61 62 63 64 65 27   DEFAULT 'abcde'
3f90: 2c 0a 20 20 20 20 20 20 66 6f 75 72 20 52 45 41  ,.      four REA
3fa0: 4c 20 44 45 46 41 55 4c 54 20 58 27 61 62 63 64  L DEFAULT X'abcd
3fb0: 65 66 27 2c 0a 20 20 20 20 20 20 66 69 76 65 20  ef',.      five 
3fc0: 44 45 46 41 55 4c 54 20 43 55 52 52 45 4e 54 5f  DEFAULT CURRENT_
3fd0: 54 49 4d 45 0a 20 20 20 20 29 3b 0a 20 20 20 20  TIME.    );.    
3fe0: 50 52 41 47 4d 41 20 74 61 62 6c 65 5f 69 6e 66  PRAGMA table_inf
3ff0: 6f 28 74 65 73 74 5f 74 61 62 6c 65 29 3b 0a 20  o(test_table);. 
4000: 20 7d 0a 7d 20 5b 63 6f 6e 63 61 74 20 5c 0a 20   }.} [concat \. 
4010: 20 7b 30 20 6f 6e 65 20 49 4e 54 20 31 20 2d 31   {0 one INT 1 -1
4020: 20 30 7d 20 5c 0a 20 20 7b 31 20 74 77 6f 20 74   0} \.  {1 two t
4030: 65 78 74 20 30 20 7b 7d 20 30 7d 20 5c 0a 20 20  ext 0 {} 0} \.  
4040: 7b 32 20 74 68 72 65 65 20 7b 56 41 52 43 48 41  {2 three {VARCHA
4050: 52 28 34 35 2c 20 36 35 29 7d 20 30 20 27 61 62  R(45, 65)} 0 'ab
4060: 63 64 65 27 20 30 7d 20 5c 0a 20 20 7b 33 20 66  cde' 0} \.  {3 f
4070: 6f 75 72 20 52 45 41 4c 20 30 20 58 27 61 62 63  our REAL 0 X'abc
4080: 64 65 66 27 20 30 7d 20 5c 0a 20 20 7b 34 20 66  def' 0} \.  {4 f
4090: 69 76 65 20 7b 7d 20 30 20 43 55 52 52 45 4e 54  ive {} 0 CURRENT
40a0: 5f 54 49 4d 45 20 30 7d 20 5c 0a 5d 0a 7d 20 3b  _TIME 0} \.].} ;
40b0: 23 20 69 66 63 61 70 61 62 6c 65 20 73 63 68 65  # ifcapable sche
40c0: 6d 61 5f 70 72 61 67 6d 61 73 0a 23 20 4d 69 73  ma_pragmas.# Mis
40d0: 63 65 6c 6c 61 6e 65 6f 75 73 20 74 65 73 74 73  cellaneous tests
40e0: 0a 23 0a 69 66 63 61 70 61 62 6c 65 20 73 63 68  .#.ifcapable sch
40f0: 65 6d 61 5f 70 72 61 67 6d 61 73 20 7b 0a 64 6f  ema_pragmas {.do
4100: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 37 2e 31  _test pragma-7.1
4110: 2e 31 20 7b 0a 20 20 23 20 4d 61 6b 65 20 73 75  .1 {.  # Make su
4120: 72 65 20 61 20 70 72 61 67 6d 61 20 6b 6e 6f 77  re a pragma know
4130: 73 20 74 6f 20 72 65 61 64 20 74 68 65 20 73 63  s to read the sc
4140: 68 65 6d 61 20 69 66 20 69 74 20 6e 65 65 64 73  hema if it needs
4150: 20 74 6f 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20   to.  db close. 
4160: 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74   sqlite3 db test
4170: 2e 64 62 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  .db.  execsql {.
4180: 20 20 20 20 70 72 61 67 6d 61 20 69 6e 64 65 78      pragma index
4190: 5f 6c 69 73 74 28 74 33 29 3b 0a 20 20 7d 0a 7d  _list(t3);.  }.}
41a0: 20 7b 30 20 74 33 69 31 20 30 20 31 20 73 71 6c   {0 t3i1 0 1 sql
41b0: 69 74 65 5f 61 75 74 6f 69 6e 64 65 78 5f 74 33  ite_autoindex_t3
41c0: 5f 31 20 31 7d 0a 64 6f 5f 74 65 73 74 20 70 72  _1 1}.do_test pr
41d0: 61 67 6d 61 2d 37 2e 31 2e 32 20 7b 0a 20 20 65  agma-7.1.2 {.  e
41e0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 70 72 61  xecsql {.    pra
41f0: 67 6d 61 20 69 6e 64 65 78 5f 6c 69 73 74 28 74  gma index_list(t
4200: 33 5f 62 6f 67 75 73 29 3b 0a 20 20 7d 0a 7d 20  3_bogus);.  }.} 
4210: 7b 7d 0a 7d 20 3b 23 20 69 66 63 61 70 61 62 6c  {}.} ;# ifcapabl
4220: 65 20 73 63 68 65 6d 61 5f 70 72 61 67 6d 61 73  e schema_pragmas
4230: 0a 69 66 63 61 70 61 62 6c 65 20 7b 75 74 66 31  .ifcapable {utf1
4240: 36 7d 20 7b 0a 20 20 69 66 20 7b 5b 70 65 72 6d  6} {.  if {[perm
4250: 75 74 61 74 69 6f 6e 5d 20 3d 3d 20 22 22 7d 20  utation] == ""} 
4260: 7b 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 70 72  {.    do_test pr
4270: 61 67 6d 61 2d 37 2e 32 20 7b 0a 20 20 20 20 20  agma-7.2 {.     
4280: 20 64 62 20 63 6c 6f 73 65 0a 20 20 20 20 20 20   db close.      
4290: 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e  sqlite3 db test.
42a0: 64 62 0a 20 20 20 20 20 20 63 61 74 63 68 73 71  db.      catchsq
42b0: 6c 20 7b 0a 20 20 20 20 20 20 20 20 70 72 61 67  l {.        prag
42c0: 6d 61 20 65 6e 63 6f 64 69 6e 67 3d 62 6f 67 75  ma encoding=bogu
42d0: 73 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  s;.      }.    }
42e0: 20 7b 31 20 7b 75 6e 73 75 70 70 6f 72 74 65 64   {1 {unsupported
42f0: 20 65 6e 63 6f 64 69 6e 67 3a 20 62 6f 67 75 73   encoding: bogus
4300: 7d 7d 0a 20 20 7d 0a 7d 0a 69 66 63 61 70 61 62  }}.  }.}.ifcapab
4310: 6c 65 20 74 65 6d 70 64 62 20 7b 0a 20 20 64 6f  le tempdb {.  do
4320: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 37 2e 33  _test pragma-7.3
4330: 20 7b 0a 20 20 20 20 64 62 20 63 6c 6f 73 65 0a   {.    db close.
4340: 20 20 20 20 73 71 6c 69 74 65 33 20 64 62 20 74      sqlite3 db t
4350: 65 73 74 2e 64 62 0a 20 20 20 20 65 78 65 63 73  est.db.    execs
4360: 71 6c 20 7b 0a 20 20 20 20 20 20 70 72 61 67 6d  ql {.      pragm
4370: 61 20 6c 6f 63 6b 5f 73 74 61 74 75 73 3b 0a 20  a lock_status;. 
4380: 20 20 20 7d 0a 20 20 7d 20 7b 6d 61 69 6e 20 75     }.  } {main u
4390: 6e 6c 6f 63 6b 65 64 20 74 65 6d 70 20 63 6c 6f  nlocked temp clo
43a0: 73 65 64 7d 0a 7d 20 65 6c 73 65 20 7b 0a 20 20  sed}.} else {.  
43b0: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 37  do_test pragma-7
43c0: 2e 33 20 7b 0a 20 20 20 20 64 62 20 63 6c 6f 73  .3 {.    db clos
43d0: 65 0a 20 20 20 20 73 71 6c 69 74 65 33 20 64 62  e.    sqlite3 db
43e0: 20 74 65 73 74 2e 64 62 0a 20 20 20 20 65 78 65   test.db.    exe
43f0: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 70 72 61  csql {.      pra
4400: 67 6d 61 20 6c 6f 63 6b 5f 73 74 61 74 75 73 3b  gma lock_status;
4410: 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 6d 61 69 6e  .    }.  } {main
4420: 20 75 6e 6c 6f 63 6b 65 64 7d 0a 7d 0a 0a 0a 23   unlocked}.}...#
4430: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4440: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4450: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4460: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4470: 2d 2d 2d 2d 2d 2d 0a 23 20 54 65 73 74 20 63 61  ------.# Test ca
4480: 73 65 73 20 70 72 61 67 6d 61 2d 38 2e 2a 20 74  ses pragma-8.* t
4490: 65 73 74 20 74 68 65 20 22 50 52 41 47 4d 41 20  est the "PRAGMA 
44a0: 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 22 20  schema_version" 
44b0: 61 6e 64 20 22 50 52 41 47 4d 41 0a 23 20 75 73  and "PRAGMA.# us
44c0: 65 72 5f 76 65 72 73 69 6f 6e 22 20 73 74 61 74  er_version" stat
44d0: 65 6d 65 6e 74 73 2e 0a 23 0a 23 20 70 72 61 67  ements..#.# prag
44e0: 6d 61 2d 38 2e 31 3a 20 50 52 41 47 4d 41 20 73  ma-8.1: PRAGMA s
44f0: 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 0a 23 20  chema_version.# 
4500: 70 72 61 67 6d 61 2d 38 2e 32 3a 20 50 52 41 47  pragma-8.2: PRAG
4510: 4d 41 20 75 73 65 72 5f 76 65 72 73 69 6f 6e 0a  MA user_version.
4520: 23 0a 0a 69 66 63 61 70 61 62 6c 65 20 73 63 68  #..ifcapable sch
4530: 65 6d 61 5f 76 65 72 73 69 6f 6e 20 7b 0a 0a 23  ema_version {..#
4540: 20 46 69 72 73 74 20 63 68 65 63 6b 20 74 68 61   First check tha
4550: 74 20 77 65 20 63 61 6e 20 73 65 74 20 74 68 65  t we can set the
4560: 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 20   schema version 
4570: 61 6e 64 20 74 68 65 6e 20 72 65 74 72 69 65 76  and then retriev
4580: 65 20 74 68 65 0a 23 20 73 61 6d 65 20 76 61 6c  e the.# same val
4590: 75 65 2e 0a 64 6f 5f 74 65 73 74 20 70 72 61 67  ue..do_test prag
45a0: 6d 61 2d 38 2e 31 2e 31 20 7b 0a 20 20 65 78 65  ma-8.1.1 {.  exe
45b0: 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d  csql {.    PRAGM
45c0: 41 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e  A schema_version
45d0: 20 3d 20 31 30 35 3b 0a 20 20 7d 0a 7d 20 7b 7d   = 105;.  }.} {}
45e0: 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d  .do_test pragma-
45f0: 38 2e 31 2e 32 20 7b 0a 20 20 65 78 65 63 73 71  8.1.2 {.  execsq
4600: 6c 32 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20  l2 {.    PRAGMA 
4610: 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 3b 0a  schema_version;.
4620: 20 20 7d 0a 7d 20 7b 73 63 68 65 6d 61 5f 76 65    }.} {schema_ve
4630: 72 73 69 6f 6e 20 31 30 35 7d 0a 64 6f 5f 74 65  rsion 105}.do_te
4640: 73 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e 33 20  st pragma-8.1.3 
4650: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
4660: 20 20 50 52 41 47 4d 41 20 73 63 68 65 6d 61 5f    PRAGMA schema_
4670: 76 65 72 73 69 6f 6e 20 3d 20 31 30 36 3b 0a 20  version = 106;. 
4680: 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20   }.} {}.do_test 
4690: 70 72 61 67 6d 61 2d 38 2e 31 2e 34 20 7b 0a 20  pragma-8.1.4 {. 
46a0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50   execsql {.    P
46b0: 52 41 47 4d 41 20 73 63 68 65 6d 61 5f 76 65 72  RAGMA schema_ver
46c0: 73 69 6f 6e 3b 0a 20 20 7d 0a 7d 20 31 30 36 0a  sion;.  }.} 106.
46d0: 0a 23 20 43 68 65 63 6b 20 74 68 61 74 20 63 72  .# Check that cr
46e0: 65 61 74 69 6e 67 20 61 20 74 61 62 6c 65 20 6d  eating a table m
46f0: 6f 64 69 66 69 65 73 20 74 68 65 20 73 63 68 65  odifies the sche
4700: 6d 61 2d 76 65 72 73 69 6f 6e 20 28 74 68 69 73  ma-version (this
4710: 20 69 73 20 72 65 61 6c 6c 79 0a 23 20 74 6f 20   is really.# to 
4720: 76 65 72 69 66 79 20 74 68 61 74 20 74 68 65 20  verify that the 
4730: 76 61 6c 75 65 20 62 65 69 6e 67 20 72 65 61 64  value being read
4740: 20 69 73 20 69 6e 20 66 61 63 74 20 74 68 65 20   is in fact the 
4750: 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 29 2e  schema version).
4760: 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d  .do_test pragma-
4770: 38 2e 31 2e 35 20 7b 0a 20 20 65 78 65 63 73 71  8.1.5 {.  execsq
4780: 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54  l {.    CREATE T
4790: 41 42 4c 45 20 74 34 28 61 2c 20 62 2c 20 63 29  ABLE t4(a, b, c)
47a0: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
47b0: 4f 20 74 34 20 56 41 4c 55 45 53 28 31 2c 20 32  O t4 VALUES(1, 2
47c0: 2c 20 33 29 3b 0a 20 20 20 20 53 45 4c 45 43 54  , 3);.    SELECT
47d0: 20 2a 20 46 52 4f 4d 20 74 34 3b 0a 20 20 7d 0a   * FROM t4;.  }.
47e0: 7d 20 7b 31 20 32 20 33 7d 0a 64 6f 5f 74 65 73  } {1 2 3}.do_tes
47f0: 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e 36 20 7b  t pragma-8.1.6 {
4800: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
4810: 20 50 52 41 47 4d 41 20 73 63 68 65 6d 61 5f 76   PRAGMA schema_v
4820: 65 72 73 69 6f 6e 3b 0a 20 20 7d 0a 7d 20 31 30  ersion;.  }.} 10
4830: 37 0a 0a 23 20 4e 6f 77 20 6f 70 65 6e 20 61 20  7..# Now open a 
4840: 73 65 63 6f 6e 64 20 63 6f 6e 6e 65 63 74 69 6f  second connectio
4850: 6e 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73  n to the databas
4860: 65 2e 20 45 6e 73 75 72 65 20 74 68 61 74 20 63  e. Ensure that c
4870: 68 61 6e 67 69 6e 67 20 74 68 65 0a 23 20 73 63  hanging the.# sc
4880: 68 65 6d 61 2d 76 65 72 73 69 6f 6e 20 75 73 69  hema-version usi
4890: 6e 67 20 74 68 65 20 66 69 72 73 74 20 63 6f 6e  ng the first con
48a0: 6e 65 63 74 69 6f 6e 20 66 6f 72 63 65 73 20 74  nection forces t
48b0: 68 65 20 73 65 63 6f 6e 64 20 63 6f 6e 6e 65 63  he second connec
48c0: 74 69 6f 6e 0a 23 20 74 6f 20 72 65 6c 6f 61 64  tion.# to reload
48d0: 20 74 68 65 20 73 63 68 65 6d 61 2e 20 54 68 69   the schema. Thi
48e0: 73 20 68 61 73 20 74 6f 20 62 65 20 64 6f 6e 65  s has to be done
48f0: 20 75 73 69 6e 67 20 74 68 65 20 43 2d 41 50 49   using the C-API
4900: 20 74 65 73 74 20 66 75 6e 63 74 69 6f 6e 73 2c   test functions,
4910: 0a 23 20 62 65 63 61 75 73 65 20 74 68 65 20 54  .# because the T
4920: 43 4c 20 41 50 49 20 61 63 63 6f 75 6e 74 73 20  CL API accounts 
4930: 66 6f 72 20 53 43 48 45 4d 41 5f 45 52 52 4f 52  for SCHEMA_ERROR
4940: 20 61 6e 64 20 72 65 74 72 69 65 73 20 74 68 65   and retries the
4950: 20 71 75 65 72 79 2e 0a 64 6f 5f 74 65 73 74 20   query..do_test 
4960: 70 72 61 67 6d 61 2d 38 2e 31 2e 37 20 7b 0a 20  pragma-8.1.7 {. 
4970: 20 73 71 6c 69 74 65 33 20 64 62 32 20 74 65 73   sqlite3 db2 tes
4980: 74 2e 64 62 3b 20 73 65 74 20 3a 3a 44 42 32 20  t.db; set ::DB2 
4990: 5b 73 71 6c 69 74 65 33 5f 63 6f 6e 6e 65 63 74  [sqlite3_connect
49a0: 69 6f 6e 5f 70 6f 69 6e 74 65 72 20 64 62 32 5d  ion_pointer db2]
49b0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
49c0: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
49d0: 34 3b 0a 20 20 7d 20 64 62 32 0a 7d 20 7b 31 20  4;.  } db2.} {1 
49e0: 32 20 33 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61  2 3}.do_test pra
49f0: 67 6d 61 2d 38 2e 31 2e 38 20 7b 0a 20 20 65 78  gma-8.1.8 {.  ex
4a00: 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47  ecsql {.    PRAG
4a10: 4d 41 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f  MA schema_versio
4a20: 6e 20 3d 20 31 30 38 3b 0a 20 20 7d 0a 7d 20 7b  n = 108;.  }.} {
4a30: 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  }.do_test pragma
4a40: 2d 38 2e 31 2e 39 20 7b 0a 20 20 73 65 74 20 3a  -8.1.9 {.  set :
4a50: 3a 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70  :STMT [sqlite3_p
4a60: 72 65 70 61 72 65 20 24 3a 3a 44 42 32 20 22 53  repare $::DB2 "S
4a70: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 34 22  ELECT * FROM t4"
4a80: 20 2d 31 20 44 55 4d 4d 59 5d 0a 20 20 73 71 6c   -1 DUMMY].  sql
4a90: 69 74 65 33 5f 73 74 65 70 20 24 3a 3a 53 54 4d  ite3_step $::STM
4aa0: 54 0a 7d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  T.} SQLITE_ERROR
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 31 30 20 7b 0a 20 20 73 71 6c 69 74  8.1.10 {.  sqlit
4ad0: 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24 3a 3a 53  e3_finalize $::S
4ae0: 54 4d 54 0a 7d 20 53 51 4c 49 54 45 5f 53 43 48  TMT.} SQLITE_SCH
4af0: 45 4d 41 0a 0a 23 20 4d 61 6b 65 20 73 75 72 65  EMA..# Make sure
4b00: 20 74 68 65 20 73 63 68 65 6d 61 2d 76 65 72 73   the schema-vers
4b10: 69 6f 6e 20 63 61 6e 20 62 65 20 6d 61 6e 69 70  ion can be manip
4b20: 75 6c 61 74 65 64 20 69 6e 20 61 6e 20 61 74 74  ulated in an att
4b30: 61 63 68 65 64 20 64 61 74 61 62 61 73 65 2e 0a  ached database..
4b40: 66 6f 72 63 65 64 65 6c 65 74 65 20 74 65 73 74  forcedelete test
4b50: 32 2e 64 62 0a 66 6f 72 63 65 64 65 6c 65 74 65  2.db.forcedelete
4b60: 20 74 65 73 74 32 2e 64 62 2d 6a 6f 75 72 6e 61   test2.db-journa
4b70: 6c 0a 69 66 63 61 70 61 62 6c 65 20 61 74 74 61  l.ifcapable atta
4b80: 63 68 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 70  ch {.  do_test p
4b90: 72 61 67 6d 61 2d 38 2e 31 2e 31 31 20 7b 0a 20  ragma-8.1.11 {. 
4ba0: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
4bb0: 20 20 20 41 54 54 41 43 48 20 27 74 65 73 74 32     ATTACH 'test2
4bc0: 2e 64 62 27 20 41 53 20 61 75 78 3b 0a 20 20 20  .db' AS aux;.   
4bd0: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
4be0: 61 75 78 2e 74 31 28 61 2c 20 62 2c 20 63 29 3b  aux.t1(a, b, c);
4bf0: 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 61 75  .      PRAGMA au
4c00: 78 2e 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e  x.schema_version
4c10: 20 3d 20 32 30 35 3b 0a 20 20 20 20 7d 0a 20 20   = 205;.    }.  
4c20: 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70  } {}.  do_test p
4c30: 72 61 67 6d 61 2d 38 2e 31 2e 31 32 20 7b 0a 20  ragma-8.1.12 {. 
4c40: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
4c50: 20 20 20 50 52 41 47 4d 41 20 61 75 78 2e 73 63     PRAGMA aux.sc
4c60: 68 65 6d 61 5f 76 65 72 73 69 6f 6e 3b 0a 20 20  hema_version;.  
4c70: 20 20 7d 0a 20 20 7d 20 32 30 35 0a 7d 0a 64 6f    }.  } 205.}.do
4c80: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 31  _test pragma-8.1
4c90: 2e 31 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  .13 {.  execsql 
4ca0: 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 73 63 68  {.    PRAGMA sch
4cb0: 65 6d 61 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 7d  ema_version;.  }
4cc0: 0a 7d 20 31 30 38 0a 0a 23 20 41 6e 64 20 63 68  .} 108..# And ch
4cd0: 65 63 6b 20 74 68 61 74 20 6d 6f 64 69 66 79 69  eck that modifyi
4ce0: 6e 67 20 74 68 65 20 73 63 68 65 6d 61 2d 76 65  ng the schema-ve
4cf0: 72 73 69 6f 6e 20 69 6e 20 61 6e 20 61 74 74 61  rsion in an atta
4d00: 63 68 65 64 20 64 61 74 61 62 61 73 65 0a 23 20  ched database.# 
4d10: 66 6f 72 63 65 73 20 74 68 65 20 73 65 63 6f 6e  forces the secon
4d20: 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20  d connection to 
4d30: 72 65 6c 6f 61 64 20 74 68 65 20 73 63 68 65 6d  reload the schem
4d40: 61 2e 0a 69 66 63 61 70 61 62 6c 65 20 61 74 74  a..ifcapable att
4d50: 61 63 68 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20  ach {.  do_test 
4d60: 70 72 61 67 6d 61 2d 38 2e 31 2e 31 34 20 7b 0a  pragma-8.1.14 {.
4d70: 20 20 20 20 73 71 6c 69 74 65 33 20 64 62 32 20      sqlite3 db2 
4d80: 74 65 73 74 2e 64 62 3b 20 73 65 74 20 3a 3a 44  test.db; set ::D
4d90: 42 32 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6e 6e  B2 [sqlite3_conn
4da0: 65 63 74 69 6f 6e 5f 70 6f 69 6e 74 65 72 20 64  ection_pointer d
4db0: 62 32 5d 0a 20 20 20 20 65 78 65 63 73 71 6c 20  b2].    execsql 
4dc0: 7b 0a 20 20 20 20 20 20 41 54 54 41 43 48 20 27  {.      ATTACH '
4dd0: 74 65 73 74 32 2e 64 62 27 20 41 53 20 61 75 78  test2.db' AS aux
4de0: 3b 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20 2a  ;.      SELECT *
4df0: 20 46 52 4f 4d 20 61 75 78 2e 74 31 3b 0a 20 20   FROM aux.t1;.  
4e00: 20 20 7d 20 64 62 32 0a 20 20 7d 20 7b 7d 0a 20    } db2.  } {}. 
4e10: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
4e20: 38 2e 31 2e 31 35 20 7b 0a 20 20 20 20 65 78 65  8.1.15 {.    exe
4e30: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41  csql {.      PRA
4e40: 47 4d 41 20 61 75 78 2e 73 63 68 65 6d 61 5f 76  GMA aux.schema_v
4e50: 65 72 73 69 6f 6e 20 3d 20 32 30 36 3b 0a 20 20  ersion = 206;.  
4e60: 20 20 7d 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f    }.  } {}.  do_
4e70: 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e  test pragma-8.1.
4e80: 31 36 20 7b 0a 20 20 20 20 73 65 74 20 3a 3a 53  16 {.    set ::S
4e90: 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65  TMT [sqlite3_pre
4ea0: 70 61 72 65 20 24 3a 3a 44 42 32 20 22 53 45 4c  pare $::DB2 "SEL
4eb0: 45 43 54 20 2a 20 46 52 4f 4d 20 61 75 78 2e 74  ECT * FROM aux.t
4ec0: 31 22 20 2d 31 20 44 55 4d 4d 59 5d 0a 20 20 20  1" -1 DUMMY].   
4ed0: 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 3a   sqlite3_step $:
4ee0: 3a 53 54 4d 54 0a 20 20 7d 20 53 51 4c 49 54 45  :STMT.  } SQLITE
4ef0: 5f 45 52 52 4f 52 0a 20 20 64 6f 5f 74 65 73 74  _ERROR.  do_test
4f00: 20 70 72 61 67 6d 61 2d 38 2e 31 2e 31 37 20 7b   pragma-8.1.17 {
4f10: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66 69 6e  .    sqlite3_fin
4f20: 61 6c 69 7a 65 20 24 3a 3a 53 54 4d 54 0a 20 20  alize $::STMT.  
4f30: 7d 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 0a  } SQLITE_SCHEMA.
4f40: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
4f50: 2d 38 2e 31 2e 31 38 20 7b 0a 20 20 20 20 64 62  -8.1.18 {.    db
4f60: 32 20 63 6c 6f 73 65 0a 20 20 7d 20 7b 7d 0a 7d  2 close.  } {}.}
4f70: 0a 0a 23 20 4e 6f 77 20 74 65 73 74 20 74 68 61  ..# Now test tha
4f80: 74 20 74 68 65 20 75 73 65 72 2d 76 65 72 73 69  t the user-versi
4f90: 6f 6e 20 63 61 6e 20 62 65 20 72 65 61 64 20 61  on can be read a
4fa0: 6e 64 20 77 72 69 74 74 65 6e 20 28 61 6e 64 20  nd written (and 
4fb0: 74 68 61 74 20 77 65 20 61 72 65 6e 27 74 0a 23  that we aren't.#
4fc0: 20 61 63 63 69 64 65 6e 74 61 6c 6c 79 20 6d 61   accidentally ma
4fd0: 6e 69 70 75 6c 61 74 69 6e 67 20 74 68 65 20 73  nipulating the s
4fe0: 63 68 65 6d 61 2d 76 65 72 73 69 6f 6e 20 69 6e  chema-version in
4ff0: 73 74 65 61 64 29 2e 0a 64 6f 5f 74 65 73 74 20  stead)..do_test 
5000: 70 72 61 67 6d 61 2d 38 2e 32 2e 31 20 7b 0a 20  pragma-8.2.1 {. 
5010: 20 65 78 65 63 73 71 6c 32 20 7b 0a 20 20 20 20   execsql2 {.    
5020: 50 52 41 47 4d 41 20 75 73 65 72 5f 76 65 72 73  PRAGMA user_vers
5030: 69 6f 6e 3b 0a 20 20 7d 0a 7d 20 7b 75 73 65 72  ion;.  }.} {user
5040: 5f 76 65 72 73 69 6f 6e 20 30 7d 0a 64 6f 5f 74  _version 0}.do_t
5050: 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 32 2e 32  est pragma-8.2.2
5060: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
5070: 20 20 20 50 52 41 47 4d 41 20 75 73 65 72 5f 76     PRAGMA user_v
5080: 65 72 73 69 6f 6e 20 3d 20 32 3b 0a 20 20 7d 0a  ersion = 2;.  }.
5090: 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61  } {}.do_test pra
50a0: 67 6d 61 2d 38 2e 32 2e 33 2e 31 20 7b 0a 20 20  gma-8.2.3.1 {.  
50b0: 65 78 65 63 73 71 6c 32 20 7b 0a 20 20 20 20 50  execsql2 {.    P
50c0: 52 41 47 4d 41 20 75 73 65 72 5f 76 65 72 73 69  RAGMA user_versi
50d0: 6f 6e 3b 0a 20 20 7d 0a 7d 20 7b 75 73 65 72 5f  on;.  }.} {user_
50e0: 76 65 72 73 69 6f 6e 20 32 7d 0a 64 6f 5f 74 65  version 2}.do_te
50f0: 73 74 20 70 72 61 67 6d 61 2d 38 2e 32 2e 33 2e  st pragma-8.2.3.
5100: 32 20 7b 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20  2 {.  db close. 
5110: 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74   sqlite3 db test
5120: 2e 64 62 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  .db.  execsql {.
5130: 20 20 20 20 50 52 41 47 4d 41 20 75 73 65 72 5f      PRAGMA user_
5140: 76 65 72 73 69 6f 6e 3b 0a 20 20 7d 0a 7d 20 7b  version;.  }.} {
5150: 32 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  2}.do_test pragm
5160: 61 2d 38 2e 32 2e 34 2e 31 20 7b 0a 20 20 65 78  a-8.2.4.1 {.  ex
5170: 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47  ecsql {.    PRAG
5180: 4d 41 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f  MA schema_versio
5190: 6e 3b 0a 20 20 7d 0a 7d 20 7b 31 30 38 7d 0a 69  n;.  }.} {108}.i
51a0: 66 63 61 70 61 62 6c 65 20 76 61 63 75 75 6d 20  fcapable vacuum 
51b0: 7b 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67  {.  do_test prag
51c0: 6d 61 2d 38 2e 32 2e 34 2e 32 20 7b 0a 20 20 20  ma-8.2.4.2 {.   
51d0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20   execsql {.     
51e0: 20 56 41 43 55 55 4d 3b 0a 20 20 20 20 20 20 50   VACUUM;.      P
51f0: 52 41 47 4d 41 20 75 73 65 72 5f 76 65 72 73 69  RAGMA user_versi
5200: 6f 6e 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 32  on;.    }.  } {2
5210: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67  }.  do_test prag
5220: 6d 61 2d 38 2e 32 2e 34 2e 33 20 7b 0a 20 20 20  ma-8.2.4.3 {.   
5230: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20   execsql {.     
5240: 20 50 52 41 47 4d 41 20 73 63 68 65 6d 61 5f 76   PRAGMA schema_v
5250: 65 72 73 69 6f 6e 3b 0a 20 20 20 20 7d 0a 20 20  ersion;.    }.  
5260: 7d 20 7b 31 30 39 7d 0a 7d 0a 0a 69 66 63 61 70  } {109}.}..ifcap
5270: 61 62 6c 65 20 61 74 74 61 63 68 20 7b 0a 20 20  able attach {.  
5280: 64 62 20 65 76 61 6c 20 7b 41 54 54 41 43 48 20  db eval {ATTACH 
5290: 27 74 65 73 74 32 2e 64 62 27 20 41 53 20 61 75  'test2.db' AS au
52a0: 78 7d 0a 20 20 0a 20 20 23 20 43 68 65 63 6b 20  x}.  .  # Check 
52b0: 74 68 61 74 20 74 68 65 20 75 73 65 72 2d 76 65  that the user-ve
52c0: 72 73 69 6f 6e 20 69 6e 20 74 68 65 20 61 75 78  rsion in the aux
52d0: 69 6c 61 72 79 20 64 61 74 61 62 61 73 65 20 63  ilary database c
52e0: 61 6e 20 62 65 20 6d 61 6e 69 70 75 6c 61 74 65  an be manipulate
52f0: 64 20 28 0a 20 20 23 20 61 6e 64 20 74 68 61 74  d (.  # and that
5300: 20 77 65 20 61 72 65 6e 27 74 20 61 63 63 69 64   we aren't accid
5310: 65 6e 74 61 6c 6c 79 20 6d 61 6e 69 70 75 6c 61  entally manipula
5320: 74 69 6e 67 20 74 68 65 20 73 61 6d 65 20 69 6e  ting the same in
5330: 20 74 68 65 20 6d 61 69 6e 20 64 62 29 2e 0a 20   the main db).. 
5340: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
5350: 38 2e 32 2e 35 20 7b 0a 20 20 20 20 65 78 65 63  8.2.5 {.    exec
5360: 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47  sql {.      PRAG
5370: 4d 41 20 61 75 78 2e 75 73 65 72 5f 76 65 72 73  MA aux.user_vers
5380: 69 6f 6e 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b  ion;.    }.  } {
5390: 30 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61  0}.  do_test pra
53a0: 67 6d 61 2d 38 2e 32 2e 36 20 7b 0a 20 20 20 20  gma-8.2.6 {.    
53b0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
53c0: 50 52 41 47 4d 41 20 61 75 78 2e 75 73 65 72 5f  PRAGMA aux.user_
53d0: 76 65 72 73 69 6f 6e 20 3d 20 33 3b 0a 20 20 20  version = 3;.   
53e0: 20 7d 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74   }.  } {}.  do_t
53f0: 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 32 2e 37  est pragma-8.2.7
5400: 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b   {.    execsql {
5410: 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 61 75  .      PRAGMA au
5420: 78 2e 75 73 65 72 5f 76 65 72 73 69 6f 6e 3b 0a  x.user_version;.
5430: 20 20 20 20 7d 0a 20 20 7d 20 7b 33 7d 0a 20 20      }.  } {3}.  
5440: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38  do_test pragma-8
5450: 2e 32 2e 38 20 7b 0a 20 20 20 20 65 78 65 63 73  .2.8 {.    execs
5460: 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d  ql {.      PRAGM
5470: 41 20 6d 61 69 6e 2e 75 73 65 72 5f 76 65 72 73  A main.user_vers
5480: 69 6f 6e 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b  ion;.    }.  } {
5490: 32 7d 0a 20 20 0a 20 20 23 20 4e 6f 77 20 63 68  2}.  .  # Now ch
54a0: 65 63 6b 20 74 68 61 74 20 61 20 52 4f 4c 4c 42  eck that a ROLLB
54b0: 41 43 4b 20 72 65 73 65 74 73 20 74 68 65 20 75  ACK resets the u
54c0: 73 65 72 2d 76 65 72 73 69 6f 6e 20 69 66 20 69  ser-version if i
54d0: 74 20 68 61 73 20 62 65 65 6e 20 6d 6f 64 69 66  t has been modif
54e0: 69 65 64 0a 20 20 23 20 77 69 74 68 69 6e 20 61  ied.  # within a
54f0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 20 20   transaction..  
5500: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38  do_test pragma-8
5510: 2e 32 2e 39 20 7b 0a 20 20 20 20 65 78 65 63 73  .2.9 {.    execs
5520: 71 6c 20 7b 0a 20 20 20 20 20 20 42 45 47 49 4e  ql {.      BEGIN
5530: 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 61  ;.      PRAGMA a
5540: 75 78 2e 75 73 65 72 5f 76 65 72 73 69 6f 6e 20  ux.user_version 
5550: 3d 20 31 30 3b 0a 20 20 20 20 20 20 50 52 41 47  = 10;.      PRAG
5560: 4d 41 20 75 73 65 72 5f 76 65 72 73 69 6f 6e 20  MA user_version 
5570: 3d 20 31 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 20  = 11;.    }.  } 
5580: 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61  {}.  do_test pra
5590: 67 6d 61 2d 38 2e 32 2e 31 30 20 7b 0a 20 20 20  gma-8.2.10 {.   
55a0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20   execsql {.     
55b0: 20 50 52 41 47 4d 41 20 61 75 78 2e 75 73 65 72   PRAGMA aux.user
55c0: 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 20 20 7d 0a  _version;.    }.
55d0: 20 20 7d 20 7b 31 30 7d 0a 20 20 64 6f 5f 74 65    } {10}.  do_te
55e0: 73 74 20 70 72 61 67 6d 61 2d 38 2e 32 2e 31 31  st pragma-8.2.11
55f0: 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b   {.    execsql {
5600: 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 6d 61  .      PRAGMA ma
5610: 69 6e 2e 75 73 65 72 5f 76 65 72 73 69 6f 6e 3b  in.user_version;
5620: 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 31 31 7d 0a  .    }.  } {11}.
5630: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
5640: 2d 38 2e 32 2e 31 32 20 7b 0a 20 20 20 20 65 78  -8.2.12 {.    ex
5650: 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 52 4f  ecsql {.      RO
5660: 4c 4c 42 41 43 4b 3b 0a 20 20 20 20 20 20 50 52  LLBACK;.      PR
5670: 41 47 4d 41 20 61 75 78 2e 75 73 65 72 5f 76 65  AGMA aux.user_ve
5680: 72 73 69 6f 6e 3b 0a 20 20 20 20 7d 0a 20 20 7d  rsion;.    }.  }
5690: 20 7b 33 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70   {3}.  do_test p
56a0: 72 61 67 6d 61 2d 38 2e 32 2e 31 33 20 7b 0a 20  ragma-8.2.13 {. 
56b0: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
56c0: 20 20 20 50 52 41 47 4d 41 20 6d 61 69 6e 2e 75     PRAGMA main.u
56d0: 73 65 72 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 20  ser_version;.   
56e0: 20 7d 0a 20 20 7d 20 7b 32 7d 0a 7d 0a 0a 23 20   }.  } {2}.}..# 
56f0: 54 72 79 20 61 20 6e 65 67 61 74 69 76 65 20 76  Try a negative v
5700: 61 6c 75 65 20 66 6f 72 20 74 68 65 20 75 73 65  alue for the use
5710: 72 2d 76 65 72 73 69 6f 6e 0a 64 6f 5f 74 65 73  r-version.do_tes
5720: 74 20 70 72 61 67 6d 61 2d 38 2e 32 2e 31 34 20  t pragma-8.2.14 
5730: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
5740: 20 20 50 52 41 47 4d 41 20 75 73 65 72 5f 76 65    PRAGMA user_ve
5750: 72 73 69 6f 6e 20 3d 20 2d 34 35 30 3b 0a 20 20  rsion = -450;.  
5760: 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 70  }.} {}.do_test p
5770: 72 61 67 6d 61 2d 38 2e 32 2e 31 35 20 7b 0a 20  ragma-8.2.15 {. 
5780: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50   execsql {.    P
5790: 52 41 47 4d 41 20 75 73 65 72 5f 76 65 72 73 69  RAGMA user_versi
57a0: 6f 6e 3b 0a 20 20 7d 0a 7d 20 7b 2d 34 35 30 7d  on;.  }.} {-450}
57b0: 0a 7d 20 3b 20 23 20 69 66 63 61 70 61 62 6c 65  .} ; # ifcapable
57c0: 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 0a   schema_version.
57d0: 0a 23 20 43 68 65 63 6b 20 74 6f 20 73 65 65 20  .# Check to see 
57e0: 69 66 20 54 45 4d 50 5f 53 54 4f 52 45 20 69 73  if TEMP_STORE is
57f0: 20 6d 65 6d 6f 72 79 20 6f 72 20 64 69 73 6b 2e   memory or disk.
5800: 20 20 52 65 74 75 72 6e 20 73 74 72 69 6e 67 73    Return strings
5810: 0a 23 20 22 6d 65 6d 6f 72 79 22 20 6f 72 20 22  .# "memory" or "
5820: 64 69 73 6b 22 20 61 73 20 61 70 70 72 6f 70 72  disk" as appropr
5830: 69 61 74 65 2e 0a 23 0a 70 72 6f 63 20 63 68 65  iate..#.proc che
5840: 63 6b 5f 74 65 6d 70 5f 73 74 6f 72 65 20 7b 7d  ck_temp_store {}
5850: 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 43 52   {.  db eval {CR
5860: 45 41 54 45 20 54 45 4d 50 20 54 41 42 4c 45 20  EATE TEMP TABLE 
5870: 49 46 20 4e 4f 54 20 45 58 49 53 54 53 20 61 28  IF NOT EXISTS a(
5880: 62 29 7d 0a 20 20 64 62 20 65 76 61 6c 20 7b 50  b)}.  db eval {P
5890: 52 41 47 4d 41 20 64 61 74 61 62 61 73 65 5f 6c  RAGMA database_l
58a0: 69 73 74 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24  ist} {.    if {$
58b0: 6e 61 6d 65 3d 3d 22 74 65 6d 70 22 7d 20 7b 0a  name=="temp"} {.
58c0: 20 20 20 20 20 20 73 65 74 20 62 74 20 5b 62 74        set bt [bt
58d0: 72 65 65 5f 66 72 6f 6d 5f 64 62 20 64 62 20 31  ree_from_db db 1
58e0: 5d 0a 20 20 20 20 20 20 69 66 20 7b 5b 62 74 72  ].      if {[btr
58f0: 65 65 5f 69 73 6d 65 6d 64 62 20 24 62 74 5d 7d  ee_ismemdb $bt]}
5900: 20 7b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72   {.        retur
5910: 6e 20 22 6d 65 6d 6f 72 79 22 0a 20 20 20 20 20  n "memory".     
5920: 20 7d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20   }.      return 
5930: 22 64 69 73 6b 22 0a 20 20 20 20 7d 0a 20 20 7d  "disk".    }.  }
5940: 0a 20 20 72 65 74 75 72 6e 20 22 75 6e 6b 6e 6f  .  return "unkno
5950: 77 6e 22 0a 7d 0a 0a 23 20 41 70 70 6c 69 63 61  wn".}..# Applica
5960: 74 69 6f 6e 5f 49 44 0a 23 0a 64 6f 5f 74 65 73  tion_ID.#.do_tes
5970: 74 20 70 72 61 67 6d 61 2d 38 2e 33 2e 31 20 7b  t pragma-8.3.1 {
5980: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
5990: 20 50 52 41 47 4d 41 20 61 70 70 6c 69 63 61 74   PRAGMA applicat
59a0: 69 6f 6e 5f 69 64 3b 0a 20 20 7d 0a 7d 20 7b 30  ion_id;.  }.} {0
59b0: 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  }.do_test pragma
59c0: 2d 38 2e 33 2e 32 20 7b 0a 20 20 65 78 65 63 73  -8.3.2 {.  execs
59d0: 71 6c 20 7b 50 52 41 47 4d 41 20 41 70 70 6c 69  ql {PRAGMA Appli
59e0: 63 61 74 69 6f 6e 5f 49 44 28 31 32 33 34 35 29  cation_ID(12345)
59f0: 3b 20 50 52 41 47 4d 41 20 61 70 70 6c 69 63 61  ; PRAGMA applica
5a00: 74 69 6f 6e 5f 69 64 3b 7d 0a 7d 20 7b 31 32 33  tion_id;}.} {123
5a10: 34 35 7d 0a 0a 23 20 54 65 73 74 20 74 65 6d 70  45}..# Test temp
5a20: 5f 73 74 6f 72 65 20 61 6e 64 20 74 65 6d 70 5f  _store and temp_
5a30: 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 20  store_directory 
5a40: 70 72 61 67 6d 61 73 0a 23 0a 69 66 63 61 70 61  pragmas.#.ifcapa
5a50: 62 6c 65 20 70 61 67 65 72 5f 70 72 61 67 6d 61  ble pager_pragma
5a60: 73 20 7b 0a 64 6f 5f 74 65 73 74 20 70 72 61 67  s {.do_test prag
5a70: 6d 61 2d 39 2e 31 20 7b 0a 20 20 64 62 20 63 6c  ma-9.1 {.  db cl
5a80: 6f 73 65 0a 20 20 73 71 6c 69 74 65 33 20 64 62  ose.  sqlite3 db
5a90: 20 74 65 73 74 2e 64 62 0a 20 20 65 78 65 63 73   test.db.  execs
5aa0: 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20  ql {.    PRAGMA 
5ab0: 74 65 6d 70 5f 73 74 6f 72 65 3b 0a 20 20 7d 0a  temp_store;.  }.
5ac0: 7d 20 7b 30 7d 0a 69 66 20 7b 24 54 45 4d 50 5f  } {0}.if {$TEMP_
5ad0: 53 54 4f 52 45 3c 3d 31 7d 20 7b 0a 20 20 64 6f  STORE<=1} {.  do
5ae0: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 39 2e 31  _test pragma-9.1
5af0: 2e 31 20 7b 0a 20 20 20 20 63 68 65 63 6b 5f 74  .1 {.    check_t
5b00: 65 6d 70 5f 73 74 6f 72 65 0a 20 20 7d 20 7b 64  emp_store.  } {d
5b10: 69 73 6b 7d 0a 7d 20 65 6c 73 65 20 7b 0a 20 20  isk}.} else {.  
5b20: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 39  do_test pragma-9
5b30: 2e 31 2e 31 20 7b 0a 20 20 20 20 63 68 65 63 6b  .1.1 {.    check
5b40: 5f 74 65 6d 70 5f 73 74 6f 72 65 0a 20 20 7d 20  _temp_store.  } 
5b50: 7b 6d 65 6d 6f 72 79 7d 0a 7d 0a 0a 64 6f 5f 74  {memory}.}..do_t
5b60: 65 73 74 20 70 72 61 67 6d 61 2d 39 2e 32 20 7b  est pragma-9.2 {
5b70: 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 73 71  .  db close.  sq
5b80: 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64 62  lite3 db test.db
5b90: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
5ba0: 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f   PRAGMA temp_sto
5bb0: 72 65 3d 66 69 6c 65 3b 0a 20 20 20 20 50 52 41  re=file;.    PRA
5bc0: 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 3b 0a  GMA temp_store;.
5bd0: 20 20 7d 0a 7d 20 7b 31 7d 0a 69 66 20 7b 24 54    }.} {1}.if {$T
5be0: 45 4d 50 5f 53 54 4f 52 45 3d 3d 33 7d 20 7b 0a  EMP_STORE==3} {.
5bf0: 20 20 23 20 57 68 65 6e 20 54 45 4d 50 5f 53 54    # When TEMP_ST
5c00: 4f 52 45 20 69 73 20 33 2c 20 61 6c 77 61 79 73  ORE is 3, always
5c10: 20 75 73 65 20 6d 65 6d 6f 72 79 20 72 65 67 61   use memory rega
5c20: 72 64 6c 65 73 73 20 6f 66 20 70 72 61 67 6d 61  rdless of pragma
5c30: 20 73 65 74 74 69 6e 67 73 2e 0a 20 20 64 6f 5f   settings..  do_
5c40: 74 65 73 74 20 70 72 61 67 6d 61 2d 39 2e 32 2e  test pragma-9.2.
5c50: 31 20 7b 0a 20 20 20 20 63 68 65 63 6b 5f 74 65  1 {.    check_te
5c60: 6d 70 5f 73 74 6f 72 65 0a 20 20 7d 20 7b 6d 65  mp_store.  } {me
5c70: 6d 6f 72 79 7d 0a 7d 20 65 6c 73 65 20 7b 0a 20  mory}.} else {. 
5c80: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
5c90: 39 2e 32 2e 31 20 7b 0a 20 20 20 20 63 68 65 63  9.2.1 {.    chec
5ca0: 6b 5f 74 65 6d 70 5f 73 74 6f 72 65 0a 20 20 7d  k_temp_store.  }
5cb0: 20 7b 64 69 73 6b 7d 0a 7d 0a 0a 64 6f 5f 74 65   {disk}.}..do_te
5cc0: 73 74 20 70 72 61 67 6d 61 2d 39 2e 33 20 7b 0a  st pragma-9.3 {.
5cd0: 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 73 71 6c    db close.  sql
5ce0: 69 74 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a  ite3 db test.db.
5cf0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
5d00: 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72  PRAGMA temp_stor
5d10: 65 3d 6d 65 6d 6f 72 79 3b 0a 20 20 20 20 50 52  e=memory;.    PR
5d20: 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 3b  AGMA temp_store;
5d30: 0a 20 20 7d 0a 7d 20 7b 32 7d 0a 69 66 20 7b 24  .  }.} {2}.if {$
5d40: 54 45 4d 50 5f 53 54 4f 52 45 3d 3d 30 7d 20 7b  TEMP_STORE==0} {
5d50: 0a 20 20 23 20 57 68 65 6e 20 54 45 4d 50 5f 53  .  # When TEMP_S
5d60: 54 4f 52 45 20 69 73 20 30 2c 20 61 6c 77 61 79  TORE is 0, alway
5d70: 73 20 75 73 65 20 74 68 65 20 64 69 73 6b 20 72  s use the disk r
5d80: 65 67 61 72 64 6c 65 73 73 20 6f 66 20 70 72 61  egardless of pra
5d90: 67 6d 61 20 73 65 74 74 69 6e 67 73 2e 0a 20 20  gma settings..  
5da0: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 39  do_test pragma-9
5db0: 2e 33 2e 31 20 7b 0a 20 20 20 20 63 68 65 63 6b  .3.1 {.    check
5dc0: 5f 74 65 6d 70 5f 73 74 6f 72 65 0a 20 20 7d 20  _temp_store.  } 
5dd0: 7b 64 69 73 6b 7d 0a 7d 20 65 6c 73 65 20 7b 0a  {disk}.} else {.
5de0: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
5df0: 2d 39 2e 33 2e 31 20 7b 0a 20 20 20 20 63 68 65  -9.3.1 {.    che
5e00: 63 6b 5f 74 65 6d 70 5f 73 74 6f 72 65 0a 20 20  ck_temp_store.  
5e10: 7d 20 7b 6d 65 6d 6f 72 79 7d 0a 7d 0a 0a 64 6f  } {memory}.}..do
5e20: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 39 2e 34  _test pragma-9.4
5e30: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
5e40: 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73     PRAGMA temp_s
5e50: 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 3b 0a  tore_directory;.
5e60: 20 20 7d 0a 7d 20 7b 7d 0a 69 66 63 61 70 61 62    }.} {}.ifcapab
5e70: 6c 65 20 77 73 64 20 7b 0a 20 20 64 6f 5f 74 65  le wsd {.  do_te
5e80: 73 74 20 70 72 61 67 6d 61 2d 39 2e 35 20 7b 0a  st pragma-9.5 {.
5e90: 20 20 20 20 73 65 74 20 70 77 64 20 5b 73 74 72      set pwd [str
5ea0: 69 6e 67 20 6d 61 70 20 7b 27 20 27 27 7d 20 5b  ing map {' ''} [
5eb0: 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20  file nativename 
5ec0: 5b 67 65 74 5f 70 77 64 5d 5d 5d 0a 20 20 20 20  [get_pwd]]].    
5ed0: 65 78 65 63 73 71 6c 20 22 0a 20 20 20 20 20 20  execsql ".      
5ee0: 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72  PRAGMA temp_stor
5ef0: 65 5f 64 69 72 65 63 74 6f 72 79 3d 27 24 70 77  e_directory='$pw
5f00: 64 27 3b 0a 20 20 20 20 22 0a 20 20 7d 20 7b 7d  d';.    ".  } {}
5f10: 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .  do_test pragm
5f20: 61 2d 39 2e 36 20 7b 0a 20 20 20 20 65 78 65 63  a-9.6 {.    exec
5f30: 73 71 6c 20 7b 20 0a 20 20 20 20 20 20 50 52 41  sql { .      PRA
5f40: 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64  GMA temp_store_d
5f50: 69 72 65 63 74 6f 72 79 3b 0a 20 20 20 20 7d 0a  irectory;.    }.
5f60: 20 20 7d 20 5b 6c 69 73 74 20 5b 66 69 6c 65 20    } [list [file 
5f70: 6e 61 74 69 76 65 6e 61 6d 65 20 5b 67 65 74 5f  nativename [get_
5f80: 70 77 64 5d 5d 5d 0a 20 20 64 6f 5f 74 65 73 74  pwd]]].  do_test
5f90: 20 70 72 61 67 6d 61 2d 39 2e 37 20 7b 0a 20 20   pragma-9.7 {.  
5fa0: 20 20 63 61 74 63 68 73 71 6c 20 7b 20 0a 20 20    catchsql { .  
5fb0: 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f      PRAGMA temp_
5fc0: 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 3d  store_directory=
5fd0: 27 2f 4e 4f 4e 2f 45 58 49 53 54 45 4e 54 2f 50  '/NON/EXISTENT/P
5fe0: 41 54 48 2f 46 4f 4f 42 41 52 27 3b 0a 20 20 20  ATH/FOOBAR';.   
5ff0: 20 7d 0a 20 20 7d 20 7b 31 20 7b 6e 6f 74 20 61   }.  } {1 {not a
6000: 20 77 72 69 74 61 62 6c 65 20 64 69 72 65 63 74   writable direct
6010: 6f 72 79 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20  ory}}.  do_test 
6020: 70 72 61 67 6d 61 2d 39 2e 38 20 7b 0a 20 20 20  pragma-9.8 {.   
6030: 20 65 78 65 63 73 71 6c 20 7b 20 0a 20 20 20 20   execsql { .    
6040: 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74    PRAGMA temp_st
6050: 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 3d 27 27  ore_directory=''
6060: 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 7d 0a 20  ;.    }.  } {}. 
6070: 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73   if {![info exis
6080: 74 73 20 54 45 4d 50 5f 53 54 4f 52 45 5d 20 7c  ts TEMP_STORE] |
6090: 7c 20 24 54 45 4d 50 5f 53 54 4f 52 45 3c 3d 31  | $TEMP_STORE<=1
60a0: 7d 20 7b 0a 20 20 20 20 69 66 63 61 70 61 62 6c  } {.    ifcapabl
60b0: 65 20 74 65 6d 70 64 62 20 7b 0a 20 20 20 20 20  e tempdb {.     
60c0: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
60d0: 39 2e 39 20 7b 0a 20 20 20 20 20 20 20 20 65 78  9.9 {.        ex
60e0: 65 63 73 71 6c 20 7b 20 0a 20 20 20 20 20 20 20  ecsql { .       
60f0: 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73     PRAGMA temp_s
6100: 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 3b 0a  tore_directory;.
6110: 20 20 20 20 20 20 20 20 20 20 50 52 41 47 4d 41            PRAGMA
6120: 20 74 65 6d 70 5f 73 74 6f 72 65 3d 46 49 4c 45   temp_store=FILE
6130: 3b 0a 20 20 20 20 20 20 20 20 20 20 43 52 45 41  ;.          CREA
6140: 54 45 20 54 45 4d 50 20 54 41 42 4c 45 20 74 65  TE TEMP TABLE te
6150: 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f  mp_store_directo
6160: 72 79 5f 74 65 73 74 28 61 20 69 6e 74 65 67 65  ry_test(a intege
6170: 72 29 3b 0a 20 20 20 20 20 20 20 20 20 20 49 4e  r);.          IN
6180: 53 45 52 54 20 49 4e 54 4f 20 74 65 6d 70 5f 73  SERT INTO 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 20 76 61 6c 75 65 73 20 28 32 29 3b 0a  est values (2);.
61b0: 20 20 20 20 20 20 20 20 20 20 53 45 4c 45 43 54            SELECT
61c0: 20 2a 20 46 52 4f 4d 20 74 65 6d 70 5f 73 74 6f   * FROM temp_sto
61d0: 72 65 5f 64 69 72 65 63 74 6f 72 79 5f 74 65 73  re_directory_tes
61e0: 74 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  t;.        }.   
61f0: 20 20 20 7d 20 7b 32 7d 0a 20 20 20 20 20 20 64     } {2}.      d
6200: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 39 2e  o_test pragma-9.
6210: 31 30 20 7b 0a 20 20 20 20 20 20 20 20 63 61 74  10 {.        cat
6220: 63 68 73 71 6c 20 22 0a 20 20 20 20 20 20 20 20  chsql ".        
6230: 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74    PRAGMA temp_st
6240: 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 3d 27 24  ore_directory='$
6250: 70 77 64 27 3b 0a 20 20 20 20 20 20 20 20 20 20  pwd';.          
6260: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 65  SELECT * FROM te
6270: 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f  mp_store_directo
6280: 72 79 5f 74 65 73 74 3b 0a 20 20 20 20 20 20 20  ry_test;.       
6290: 20 22 0a 20 20 20 20 20 20 7d 20 7b 31 20 7b 6e   ".      } {1 {n
62a0: 6f 20 73 75 63 68 20 74 61 62 6c 65 3a 20 74 65  o such table: te
62b0: 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f  mp_store_directo
62c0: 72 79 5f 74 65 73 74 7d 7d 0a 20 20 20 20 7d 0a  ry_test}}.    }.
62d0: 20 20 7d 0a 7d 0a 64 6f 5f 74 65 73 74 20 70 72    }.}.do_test pr
62e0: 61 67 6d 61 2d 39 2e 31 31 20 7b 0a 20 20 65 78  agma-9.11 {.  ex
62f0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47  ecsql {.    PRAG
6300: 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 20 3d 20  MA temp_store = 
6310: 30 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 74 65  0;.    PRAGMA te
6320: 6d 70 5f 73 74 6f 72 65 3b 0a 20 20 7d 0a 7d 20  mp_store;.  }.} 
6330: 7b 30 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67  {0}.do_test prag
6340: 6d 61 2d 39 2e 31 32 20 7b 0a 20 20 65 78 65 63  ma-9.12 {.  exec
6350: 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41  sql {.    PRAGMA
6360: 20 74 65 6d 70 5f 73 74 6f 72 65 20 3d 20 31 3b   temp_store = 1;
6370: 0a 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70  .    PRAGMA temp
6380: 5f 73 74 6f 72 65 3b 0a 20 20 7d 0a 7d 20 7b 31  _store;.  }.} {1
6390: 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  }.do_test pragma
63a0: 2d 39 2e 31 33 20 7b 0a 20 20 65 78 65 63 73 71  -9.13 {.  execsq
63b0: 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 74  l {.    PRAGMA t
63c0: 65 6d 70 5f 73 74 6f 72 65 20 3d 20 32 3b 0a 20  emp_store = 2;. 
63d0: 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73     PRAGMA temp_s
63e0: 74 6f 72 65 3b 0a 20 20 7d 0a 7d 20 7b 32 7d 0a  tore;.  }.} {2}.
63f0: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 39  do_test pragma-9
6400: 2e 31 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  .14 {.  execsql 
6410: 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d  {.    PRAGMA tem
6420: 70 5f 73 74 6f 72 65 20 3d 20 33 3b 0a 20 20 20  p_store = 3;.   
6430: 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f   PRAGMA temp_sto
6440: 72 65 3b 0a 20 20 7d 0a 7d 20 7b 30 7d 0a 64 6f  re;.  }.} {0}.do
6450: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 39 2e 31  _test pragma-9.1
6460: 35 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b  5 {.  catchsql {
6470: 0a 20 20 20 20 42 45 47 49 4e 20 45 58 43 4c 55  .    BEGIN EXCLU
6480: 53 49 56 45 3b 0a 20 20 20 20 43 52 45 41 54 45  SIVE;.    CREATE
6490: 20 54 45 4d 50 20 54 41 42 4c 45 20 74 65 6d 70   TEMP TABLE temp
64a0: 5f 74 61 62 6c 65 28 74 29 3b 0a 20 20 20 20 49  _table(t);.    I
64b0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 65 6d 70 5f  NSERT INTO temp_
64c0: 74 61 62 6c 65 20 56 41 4c 55 45 53 28 27 76 61  table VALUES('va
64d0: 6c 75 61 62 6c 65 20 64 61 74 61 27 29 3b 0a 20  luable data');. 
64e0: 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73     PRAGMA temp_s
64f0: 74 6f 72 65 20 3d 20 31 3b 0a 20 20 7d 0a 7d 20  tore = 1;.  }.} 
6500: 7b 31 20 7b 74 65 6d 70 6f 72 61 72 79 20 73 74  {1 {temporary st
6510: 6f 72 61 67 65 20 63 61 6e 6e 6f 74 20 62 65 20  orage cannot be 
6520: 63 68 61 6e 67 65 64 20 66 72 6f 6d 20 77 69 74  changed from wit
6530: 68 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f  hin a transactio
6540: 6e 7d 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67  n}}.do_test prag
6550: 6d 61 2d 39 2e 31 36 20 7b 0a 20 20 65 78 65 63  ma-9.16 {.  exec
6560: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
6570: 20 2a 20 46 52 4f 4d 20 74 65 6d 70 5f 74 61 62   * FROM temp_tab
6580: 6c 65 3b 0a 20 20 20 20 43 4f 4d 4d 49 54 3b 0a  le;.    COMMIT;.
6590: 20 20 7d 0a 7d 20 7b 7b 76 61 6c 75 61 62 6c 65    }.} {{valuable
65a0: 20 64 61 74 61 7d 7d 0a 0a 64 6f 5f 74 65 73 74   data}}..do_test
65b0: 20 70 72 61 67 6d 61 2d 39 2e 31 37 20 7b 0a 20   pragma-9.17 {. 
65c0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 49   execsql {.    I
65d0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 65 6d 70 5f  NSERT INTO temp_
65e0: 74 61 62 6c 65 20 56 41 4c 55 45 53 28 27 76 61  table VALUES('va
65f0: 6c 75 61 62 6c 65 20 64 61 74 61 20 49 49 27 29  luable data II')
6600: 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  ;.    SELECT * F
6610: 52 4f 4d 20 74 65 6d 70 5f 74 61 62 6c 65 3b 0a  ROM temp_table;.
6620: 20 20 7d 0a 7d 20 7b 7b 76 61 6c 75 61 62 6c 65    }.} {{valuable
6630: 20 64 61 74 61 7d 20 7b 76 61 6c 75 61 62 6c 65   data} {valuable
6640: 20 64 61 74 61 20 49 49 7d 7d 0a 0a 64 6f 5f 74   data II}}..do_t
6650: 65 73 74 20 70 72 61 67 6d 61 2d 39 2e 31 38 20  est pragma-9.18 
6660: 7b 0a 20 20 73 65 74 20 72 63 20 5b 63 61 74 63  {.  set rc [catc
6670: 68 20 7b 0a 20 20 20 20 64 62 20 65 76 61 6c 20  h {.    db eval 
6680: 7b 53 45 4c 45 43 54 20 74 20 46 52 4f 4d 20 74  {SELECT t FROM t
6690: 65 6d 70 5f 74 61 62 6c 65 7d 20 7b 0a 20 20 20  emp_table} {.   
66a0: 20 20 20 65 78 65 63 73 71 6c 20 7b 70 72 61 67     execsql {prag
66b0: 6d 61 20 74 65 6d 70 5f 73 74 6f 72 65 20 3d 20  ma temp_store = 
66c0: 31 7d 0a 20 20 20 20 7d 0a 20 20 7d 20 6d 73 67  1}.    }.  } msg
66d0: 5d 0a 20 20 6c 69 73 74 20 24 72 63 20 24 6d 73  ].  list $rc $ms
66e0: 67 0a 7d 20 7b 31 20 7b 74 65 6d 70 6f 72 61 72  g.} {1 {temporar
66f0: 79 20 73 74 6f 72 61 67 65 20 63 61 6e 6e 6f 74  y storage cannot
6700: 20 62 65 20 63 68 61 6e 67 65 64 20 66 72 6f 6d   be changed from
6710: 20 77 69 74 68 69 6e 20 61 20 74 72 61 6e 73 61   within a transa
6720: 63 74 69 6f 6e 7d 7d 0a 0a 7d 20 3b 23 20 69 66  ction}}..} ;# if
6730: 63 61 70 61 62 6c 65 20 70 61 67 65 72 5f 70 72  capable pager_pr
6740: 61 67 6d 61 73 0a 0a 69 66 63 61 70 61 62 6c 65  agmas..ifcapable
6750: 20 74 72 69 67 67 65 72 20 7b 0a 0a 64 6f 5f 74   trigger {..do_t
6760: 65 73 74 20 70 72 61 67 6d 61 2d 31 30 2e 30 20  est pragma-10.0 
6770: 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20  {.  catchsql {. 
6780: 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20 6d 61     DROP TABLE ma
6790: 69 6e 2e 74 31 3b 0a 20 20 7d 0a 20 20 65 78 65  in.t1;.  }.  exe
67a0: 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d  csql {.    PRAGM
67b0: 41 20 63 6f 75 6e 74 5f 63 68 61 6e 67 65 73 20  A count_changes 
67c0: 3d 20 31 3b 0a 0a 20 20 20 20 43 52 45 41 54 45  = 1;..    CREATE
67d0: 20 54 41 42 4c 45 20 74 31 28 61 20 50 52 49 4d   TABLE t1(a PRIM
67e0: 41 52 59 20 4b 45 59 29 3b 0a 20 20 20 20 43 52  ARY KEY);.    CR
67f0: 45 41 54 45 20 54 41 42 4c 45 20 74 31 5f 6d 69  EATE TABLE t1_mi
6800: 72 72 6f 72 28 61 29 3b 0a 20 20 20 20 43 52 45  rror(a);.    CRE
6810: 41 54 45 20 54 41 42 4c 45 20 74 31 5f 6d 69 72  ATE TABLE t1_mir
6820: 72 6f 72 32 28 61 29 3b 0a 20 20 20 20 43 52 45  ror2(a);.    CRE
6830: 41 54 45 20 54 52 49 47 47 45 52 20 74 31 5f 62  ATE TRIGGER t1_b
6840: 69 20 42 45 46 4f 52 45 20 49 4e 53 45 52 54 20  i BEFORE INSERT 
6850: 4f 4e 20 74 31 20 42 45 47 49 4e 20 0a 20 20 20  ON t1 BEGIN .   
6860: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
6870: 31 5f 6d 69 72 72 6f 72 20 56 41 4c 55 45 53 28  1_mirror VALUES(
6880: 6e 65 77 2e 61 29 3b 0a 20 20 20 20 45 4e 44 3b  new.a);.    END;
6890: 0a 20 20 20 20 43 52 45 41 54 45 20 54 52 49 47  .    CREATE TRIG
68a0: 47 45 52 20 74 31 5f 61 69 20 41 46 54 45 52 20  GER t1_ai AFTER 
68b0: 49 4e 53 45 52 54 20 4f 4e 20 74 31 20 42 45 47  INSERT ON t1 BEG
68c0: 49 4e 20 0a 20 20 20 20 20 20 49 4e 53 45 52 54  IN .      INSERT
68d0: 20 49 4e 54 4f 20 74 31 5f 6d 69 72 72 6f 72 32   INTO t1_mirror2
68e0: 20 56 41 4c 55 45 53 28 6e 65 77 2e 61 29 3b 0a   VALUES(new.a);.
68f0: 20 20 20 20 45 4e 44 3b 0a 20 20 20 20 43 52 45      END;.    CRE
6900: 41 54 45 20 54 52 49 47 47 45 52 20 74 31 5f 62  ATE TRIGGER t1_b
6910: 75 20 42 45 46 4f 52 45 20 55 50 44 41 54 45 20  u BEFORE UPDATE 
6920: 4f 4e 20 74 31 20 42 45 47 49 4e 20 0a 20 20 20  ON t1 BEGIN .   
6930: 20 20 20 55 50 44 41 54 45 20 74 31 5f 6d 69 72     UPDATE t1_mir
6940: 72 6f 72 20 53 45 54 20 61 20 3d 20 6e 65 77 2e  ror SET a = new.
6950: 61 20 57 48 45 52 45 20 61 20 3d 20 6f 6c 64 2e  a WHERE a = old.
6960: 61 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20 20 20  a;.    END;.    
6970: 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20 74  CREATE TRIGGER t
6980: 31 5f 61 75 20 41 46 54 45 52 20 55 50 44 41 54  1_au AFTER UPDAT
6990: 45 20 4f 4e 20 74 31 20 42 45 47 49 4e 20 0a 20  E ON t1 BEGIN . 
69a0: 20 20 20 20 20 55 50 44 41 54 45 20 74 31 5f 6d       UPDATE t1_m
69b0: 69 72 72 6f 72 32 20 53 45 54 20 61 20 3d 20 6e  irror2 SET a = n
69c0: 65 77 2e 61 20 57 48 45 52 45 20 61 20 3d 20 6f  ew.a WHERE a = o
69d0: 6c 64 2e 61 3b 0a 20 20 20 20 45 4e 44 3b 0a 20  ld.a;.    END;. 
69e0: 20 20 20 43 52 45 41 54 45 20 54 52 49 47 47 45     CREATE TRIGGE
69f0: 52 20 74 31 5f 62 64 20 42 45 46 4f 52 45 20 44  R t1_bd BEFORE D
6a00: 45 4c 45 54 45 20 4f 4e 20 74 31 20 42 45 47 49  ELETE ON t1 BEGI
6a10: 4e 20 0a 20 20 20 20 20 20 44 45 4c 45 54 45 20  N .      DELETE 
6a20: 46 52 4f 4d 20 74 31 5f 6d 69 72 72 6f 72 20 57  FROM t1_mirror W
6a30: 48 45 52 45 20 61 20 3d 20 6f 6c 64 2e 61 3b 0a  HERE a = old.a;.
6a40: 20 20 20 20 45 4e 44 3b 0a 20 20 20 20 43 52 45      END;.    CRE
6a50: 41 54 45 20 54 52 49 47 47 45 52 20 74 31 5f 61  ATE TRIGGER t1_a
6a60: 64 20 41 46 54 45 52 20 44 45 4c 45 54 45 20 4f  d AFTER DELETE O
6a70: 4e 20 74 31 20 42 45 47 49 4e 20 0a 20 20 20 20  N t1 BEGIN .    
6a80: 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 31    DELETE FROM t1
6a90: 5f 6d 69 72 72 6f 72 32 20 57 48 45 52 45 20 61  _mirror2 WHERE a
6aa0: 20 3d 20 6f 6c 64 2e 61 3b 0a 20 20 20 20 45 4e   = old.a;.    EN
6ab0: 44 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a 64 6f 5f  D;.  }.} {}..do_
6ac0: 74 65 73 74 20 70 72 61 67 6d 61 2d 31 30 2e 31  test pragma-10.1
6ad0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
6ae0: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
6af0: 31 20 56 41 4c 55 45 53 28 72 61 6e 64 73 74 72  1 VALUES(randstr
6b00: 28 31 30 2c 31 30 29 29 3b 0a 20 20 7d 0a 7d 20  (10,10));.  }.} 
6b10: 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67  {1}.do_test prag
6b20: 6d 61 2d 31 30 2e 32 20 7b 0a 20 20 65 78 65 63  ma-10.2 {.  exec
6b30: 73 71 6c 20 7b 0a 20 20 20 20 55 50 44 41 54 45  sql {.    UPDATE
6b40: 20 74 31 20 53 45 54 20 61 20 3d 20 72 61 6e 64   t1 SET a = rand
6b50: 73 74 72 28 31 30 2c 31 30 29 3b 0a 20 20 7d 0a  str(10,10);.  }.
6b60: 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 70 72  } {1}.do_test pr
6b70: 61 67 6d 61 2d 31 30 2e 33 20 7b 0a 20 20 65 78  agma-10.3 {.  ex
6b80: 65 63 73 71 6c 20 7b 0a 20 20 20 20 44 45 4c 45  ecsql {.    DELE
6b90: 54 45 20 46 52 4f 4d 20 74 31 3b 0a 20 20 7d 0a  TE FROM t1;.  }.
6ba0: 7d 20 7b 31 7d 0a 0a 7d 20 3b 23 20 69 66 63 61  } {1}..} ;# ifca
6bb0: 70 61 62 6c 65 20 74 72 69 67 67 65 72 0a 0a 69  pable trigger..i
6bc0: 66 63 61 70 61 62 6c 65 20 73 63 68 65 6d 61 5f  fcapable schema_
6bd0: 70 72 61 67 6d 61 73 20 7b 0a 20 20 64 6f 5f 74  pragmas {.  do_t
6be0: 65 73 74 20 70 72 61 67 6d 61 2d 31 31 2e 31 20  est pragma-11.1 
6bf0: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 32 20 7b  {.    execsql2 {
6c00: 0a 20 20 20 20 20 20 70 72 61 67 6d 61 20 63 6f  .      pragma co
6c10: 6c 6c 61 74 69 6f 6e 5f 6c 69 73 74 3b 0a 20 20  llation_list;.  
6c20: 20 20 7d 0a 20 20 7d 20 7b 73 65 71 20 30 20 6e    }.  } {seq 0 n
6c30: 61 6d 65 20 4e 4f 43 41 53 45 20 73 65 71 20 31  ame NOCASE seq 1
6c40: 20 6e 61 6d 65 20 52 54 52 49 4d 20 73 65 71 20   name RTRIM seq 
6c50: 32 20 6e 61 6d 65 20 42 49 4e 41 52 59 7d 0a 20  2 name BINARY}. 
6c60: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
6c70: 31 31 2e 32 20 7b 0a 20 20 20 20 64 62 20 63 6f  11.2 {.    db co
6c80: 6c 6c 61 74 65 20 4e 65 77 5f 43 6f 6c 6c 61 74  llate New_Collat
6c90: 69 6f 6e 20 62 6c 61 68 2e 2e 2e 0a 20 20 20 20  ion blah....    
6ca0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
6cb0: 70 72 61 67 6d 61 20 63 6f 6c 6c 61 74 69 6f 6e  pragma collation
6cc0: 5f 6c 69 73 74 3b 0a 20 20 20 20 7d 0a 20 20 7d  _list;.    }.  }
6cd0: 20 7b 30 20 4e 65 77 5f 43 6f 6c 6c 61 74 69 6f   {0 New_Collatio
6ce0: 6e 20 31 20 4e 4f 43 41 53 45 20 32 20 52 54 52  n 1 NOCASE 2 RTR
6cf0: 49 4d 20 33 20 42 49 4e 41 52 59 7d 0a 7d 0a 0a  IM 3 BINARY}.}..
6d00: 69 66 63 61 70 61 62 6c 65 20 73 63 68 65 6d 61  ifcapable schema
6d10: 5f 70 72 61 67 6d 61 73 26 26 74 65 6d 70 64 62  _pragmas&&tempdb
6d20: 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61   {.  do_test pra
6d30: 67 6d 61 2d 31 32 2e 31 20 7b 0a 20 20 20 20 73  gma-12.1 {.    s
6d40: 71 6c 69 74 65 33 20 64 62 32 20 74 65 73 74 2e  qlite3 db2 test.
6d50: 64 62 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b  db.    execsql {
6d60: 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 74 65  .      PRAGMA te
6d70: 6d 70 2e 74 61 62 6c 65 5f 69 6e 66 6f 28 27 61  mp.table_info('a
6d80: 62 63 27 29 3b 0a 20 20 20 20 7d 20 64 62 32 0a  bc');.    } db2.
6d90: 20 20 7d 20 7b 7d 0a 20 20 64 62 32 20 63 6c 6f    } {}.  db2 clo
6da0: 73 65 0a 0a 20 20 64 6f 5f 74 65 73 74 20 70 72  se..  do_test pr
6db0: 61 67 6d 61 2d 31 32 2e 32 20 7b 0a 20 20 20 20  agma-12.2 {.    
6dc0: 73 71 6c 69 74 65 33 20 64 62 32 20 74 65 73 74  sqlite3 db2 test
6dd0: 2e 64 62 0a 20 20 20 20 65 78 65 63 73 71 6c 20  .db.    execsql 
6de0: 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 74  {.      PRAGMA t
6df0: 65 6d 70 2e 64 65 66 61 75 6c 74 5f 63 61 63 68  emp.default_cach
6e00: 65 5f 73 69 7a 65 20 3d 20 32 30 30 3b 0a 20 20  e_size = 200;.  
6e10: 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 2e      PRAGMA temp.
6e20: 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69  default_cache_si
6e30: 7a 65 3b 0a 20 20 20 20 7d 20 64 62 32 0a 20 20  ze;.    } db2.  
6e40: 7d 20 7b 32 30 30 7d 0a 20 20 64 62 32 20 63 6c  } {200}.  db2 cl
6e50: 6f 73 65 0a 0a 20 20 64 6f 5f 74 65 73 74 20 70  ose..  do_test p
6e60: 72 61 67 6d 61 2d 31 32 2e 33 20 7b 0a 20 20 20  ragma-12.3 {.   
6e70: 20 73 71 6c 69 74 65 33 20 64 62 32 20 74 65 73   sqlite3 db2 tes
6e80: 74 2e 64 62 0a 20 20 20 20 65 78 65 63 73 71 6c  t.db.    execsql
6e90: 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20   {.      PRAGMA 
6ea0: 74 65 6d 70 2e 63 61 63 68 65 5f 73 69 7a 65 20  temp.cache_size 
6eb0: 3d 20 34 30 30 3b 0a 20 20 20 20 20 20 50 52 41  = 400;.      PRA
6ec0: 47 4d 41 20 74 65 6d 70 2e 63 61 63 68 65 5f 73  GMA temp.cache_s
6ed0: 69 7a 65 3b 0a 20 20 20 20 7d 20 64 62 32 0a 20  ize;.    } db2. 
6ee0: 20 7d 20 7b 34 30 30 7d 0a 20 20 64 62 32 20 63   } {400}.  db2 c
6ef0: 6c 6f 73 65 0a 7d 0a 0a 69 66 63 61 70 61 62 6c  lose.}..ifcapabl
6f00: 65 20 62 6c 6f 62 6c 69 74 20 7b 0a 0a 64 6f 5f  e bloblit {..do_
6f10: 74 65 73 74 20 70 72 61 67 6d 61 2d 31 33 2e 31  test pragma-13.1
6f20: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
6f30: 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20 49 46     DROP TABLE IF
6f40: 20 45 58 49 53 54 53 20 74 34 3b 0a 20 20 20 20   EXISTS t4;.    
6f50: 50 52 41 47 4d 41 20 76 64 62 65 5f 74 72 61 63  PRAGMA vdbe_trac
6f60: 65 3d 6f 6e 3b 0a 20 20 20 20 50 52 41 47 4d 41  e=on;.    PRAGMA
6f70: 20 76 64 62 65 5f 6c 69 73 74 69 6e 67 3d 6f 6e   vdbe_listing=on
6f80: 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 73 71 6c  ;.    PRAGMA sql
6f90: 5f 74 72 61 63 65 3d 6f 6e 3b 0a 20 20 20 20 43  _trace=on;.    C
6fa0: 52 45 41 54 45 20 54 41 42 4c 45 20 74 34 28 61  REATE TABLE t4(a
6fb0: 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59   INTEGER PRIMARY
6fc0: 20 4b 45 59 2c 62 29 3b 0a 20 20 20 20 49 4e 53   KEY,b);.    INS
6fd0: 45 52 54 20 49 4e 54 4f 20 74 34 28 62 29 20 56  ERT INTO t4(b) V
6fe0: 41 4c 55 45 53 28 78 27 30 31 32 33 34 35 36 37  ALUES(x'01234567
6ff0: 38 39 61 62 63 64 65 66 30 31 32 33 34 35 36 37  89abcdef01234567
7000: 38 39 61 62 63 64 65 66 30 31 32 33 34 35 36 37  89abcdef01234567
7010: 38 39 27 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  89');.    INSERT
7020: 20 49 4e 54 4f 20 74 34 28 62 29 20 56 41 4c 55   INTO t4(b) VALU
7030: 45 53 28 72 61 6e 64 73 74 72 28 33 30 2c 33 30  ES(randstr(30,30
7040: 29 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  ));.    INSERT I
7050: 4e 54 4f 20 74 34 28 62 29 20 56 41 4c 55 45 53  NTO t4(b) VALUES
7060: 28 31 2e 32 33 34 35 36 29 3b 0a 20 20 20 20 49  (1.23456);.    I
7070: 4e 53 45 52 54 20 49 4e 54 4f 20 74 34 28 62 29  NSERT INTO t4(b)
7080: 20 56 41 4c 55 45 53 28 4e 55 4c 4c 29 3b 0a 20   VALUES(NULL);. 
7090: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
70a0: 34 28 62 29 20 56 41 4c 55 45 53 28 30 29 3b 0a  4(b) VALUES(0);.
70b0: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
70c0: 74 34 28 62 29 20 53 45 4c 45 43 54 20 62 7c 7c  t4(b) SELECT b||
70d0: 62 7c 7c 62 7c 7c 62 20 46 52 4f 4d 20 74 34 3b  b||b||b FROM t4;
70e0: 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52  .    SELECT * FR
70f0: 4f 4d 20 74 34 3b 0a 20 20 7d 0a 20 20 65 78 65  OM t4;.  }.  exe
7100: 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d  csql {.    PRAGM
7110: 41 20 76 64 62 65 5f 74 72 61 63 65 3d 6f 66 66  A vdbe_trace=off
7120: 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 76 64 62  ;.    PRAGMA vdb
7130: 65 5f 6c 69 73 74 69 6e 67 3d 6f 66 66 3b 0a 20  e_listing=off;. 
7140: 20 20 20 50 52 41 47 4d 41 20 73 71 6c 5f 74 72     PRAGMA sql_tr
7150: 61 63 65 3d 6f 66 66 3b 0a 20 20 7d 0a 7d 20 7b  ace=off;.  }.} {
7160: 7d 0a 0a 7d 20 3b 23 20 69 66 63 61 70 61 62 6c  }..} ;# ifcapabl
7170: 65 20 62 6c 6f 62 6c 69 74 20 0a 0a 69 66 63 61  e bloblit ..ifca
7180: 70 61 62 6c 65 20 70 61 67 65 72 5f 70 72 61 67  pable pager_prag
7190: 6d 61 73 20 7b 0a 20 20 64 62 20 63 6c 6f 73 65  mas {.  db close
71a0: 0a 20 20 66 6f 72 63 65 64 65 6c 65 74 65 20 74  .  forcedelete t
71b0: 65 73 74 2e 64 62 0a 20 20 73 71 6c 69 74 65 33  est.db.  sqlite3
71c0: 20 64 62 20 74 65 73 74 2e 64 62 0a 0a 20 20 64   db test.db..  d
71d0: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 34  o_test pragma-14
71e0: 2e 31 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  .1 {.    execsql
71f0: 20 7b 20 70 72 61 67 6d 61 20 61 75 74 6f 5f 76   { pragma auto_v
7200: 61 63 75 75 6d 20 3d 20 30 20 7d 0a 20 20 20 20  acuum = 0 }.    
7210: 65 78 65 63 73 71 6c 20 7b 20 70 72 61 67 6d 61  execsql { pragma
7220: 20 70 61 67 65 5f 63 6f 75 6e 74 20 7d 0a 20 20   page_count }.  
7230: 7d 20 7b 30 7d 0a 0a 20 20 64 6f 5f 74 65 73 74  } {0}..  do_test
7240: 20 70 72 61 67 6d 61 2d 31 34 2e 32 20 7b 0a 20   pragma-14.2 {. 
7250: 20 20 20 65 78 65 63 73 71 6c 20 7b 20 0a 20 20     execsql { .  
7260: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
7270: 20 61 62 63 28 61 2c 20 62 2c 20 63 29 3b 0a 20   abc(a, b, c);. 
7280: 20 20 20 20 20 50 52 41 47 4d 41 20 70 61 67 65       PRAGMA page
7290: 5f 63 6f 75 6e 74 3b 0a 20 20 20 20 7d 0a 20 20  _count;.    }.  
72a0: 7d 20 7b 32 7d 0a 20 20 64 6f 5f 74 65 73 74 20  } {2}.  do_test 
72b0: 70 72 61 67 6d 61 2d 31 34 2e 32 75 63 20 7b 0a  pragma-14.2uc {.
72c0: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 70 72 61      execsql {pra
72d0: 67 6d 61 20 50 41 47 45 5f 43 4f 55 4e 54 7d 0a  gma PAGE_COUNT}.
72e0: 20 20 7d 20 7b 32 7d 0a 0a 20 20 64 6f 5f 74 65    } {2}..  do_te
72f0: 73 74 20 70 72 61 67 6d 61 2d 31 34 2e 33 20 7b  st pragma-14.3 {
7300: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 20 0a  .    execsql { .
7310: 20 20 20 20 20 20 42 45 47 49 4e 3b 0a 20 20 20        BEGIN;.   
7320: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
7330: 64 65 66 28 61 2c 20 62 2c 20 63 29 3b 0a 20 20  def(a, b, c);.  
7340: 20 20 20 20 50 52 41 47 4d 41 20 70 61 67 65 5f      PRAGMA page_
7350: 63 6f 75 6e 74 3b 0a 20 20 20 20 7d 0a 20 20 7d  count;.    }.  }
7360: 20 7b 33 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70   {3}.  do_test p
7370: 72 61 67 6d 61 2d 31 34 2e 33 75 63 20 7b 0a 20  ragma-14.3uc {. 
7380: 20 20 20 65 78 65 63 73 71 6c 20 7b 70 72 61 67     execsql {prag
7390: 6d 61 20 50 41 47 45 5f 43 4f 55 4e 54 7d 0a 20  ma PAGE_COUNT}. 
73a0: 20 7d 20 7b 33 7d 0a 0a 20 20 64 6f 5f 74 65 73   } {3}..  do_tes
73b0: 74 20 70 72 61 67 6d 61 2d 31 34 2e 34 20 7b 0a  t pragma-14.4 {.
73c0: 20 20 20 20 73 65 74 20 70 61 67 65 5f 73 69 7a      set page_siz
73d0: 65 20 5b 64 62 20 6f 6e 65 20 7b 70 72 61 67 6d  e [db one {pragm
73e0: 61 20 70 61 67 65 5f 73 69 7a 65 7d 5d 0a 20 20  a page_size}].  
73f0: 20 20 65 78 70 72 20 5b 66 69 6c 65 20 73 69 7a    expr [file siz
7400: 65 20 74 65 73 74 2e 64 62 5d 20 2f 20 24 70 61  e test.db] / $pa
7410: 67 65 5f 73 69 7a 65 0a 20 20 7d 20 7b 32 7d 0a  ge_size.  } {2}.
7420: 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .  do_test pragm
7430: 61 2d 31 34 2e 35 20 7b 0a 20 20 20 20 65 78 65  a-14.5 {.    exe
7440: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 52 4f 4c  csql {.      ROL
7450: 4c 42 41 43 4b 3b 0a 20 20 20 20 20 20 50 52 41  LBACK;.      PRA
7460: 47 4d 41 20 70 61 67 65 5f 63 6f 75 6e 74 3b 0a  GMA page_count;.
7470: 20 20 20 20 7d 0a 20 20 7d 20 7b 32 7d 0a 0a 20      }.  } {2}.. 
7480: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
7490: 31 34 2e 36 20 7b 0a 20 20 20 20 66 6f 72 63 65  14.6 {.    force
74a0: 64 65 6c 65 74 65 20 74 65 73 74 32 2e 64 62 0a  delete test2.db.
74b0: 20 20 20 20 73 71 6c 69 74 65 33 20 64 62 32 20      sqlite3 db2 
74c0: 74 65 73 74 32 2e 64 62 0a 20 20 20 20 65 78 65  test2.db.    exe
74d0: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41  csql {.      PRA
74e0: 47 4d 41 20 61 75 74 6f 5f 76 61 63 75 75 6d 20  GMA auto_vacuum 
74f0: 3d 20 30 3b 0a 20 20 20 20 20 20 43 52 45 41 54  = 0;.      CREAT
7500: 45 20 54 41 42 4c 45 20 74 31 28 61 2c 20 62 2c  E TABLE t1(a, b,
7510: 20 63 29 3b 0a 20 20 20 20 20 20 43 52 45 41 54   c);.      CREAT
7520: 45 20 54 41 42 4c 45 20 74 32 28 61 2c 20 62 2c  E TABLE t2(a, b,
7530: 20 63 29 3b 0a 20 20 20 20 20 20 43 52 45 41 54   c);.      CREAT
7540: 45 20 54 41 42 4c 45 20 74 33 28 61 2c 20 62 2c  E TABLE t3(a, b,
7550: 20 63 29 3b 0a 20 20 20 20 20 20 43 52 45 41 54   c);.      CREAT
7560: 45 20 54 41 42 4c 45 20 74 34 28 61 2c 20 62 2c  E TABLE t4(a, b,
7570: 20 63 29 3b 0a 20 20 20 20 7d 20 64 62 32 0a 20   c);.    } db2. 
7580: 20 20 20 64 62 32 20 63 6c 6f 73 65 0a 20 20 20     db2 close.   
7590: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20   execsql {.     
75a0: 20 41 54 54 41 43 48 20 27 74 65 73 74 32 2e 64   ATTACH 'test2.d
75b0: 62 27 20 41 53 20 61 75 78 3b 0a 20 20 20 20 20  b' AS aux;.     
75c0: 20 50 52 41 47 4d 41 20 61 75 78 2e 70 61 67 65   PRAGMA aux.page
75d0: 5f 63 6f 75 6e 74 3b 0a 20 20 20 20 7d 20 0a 20  _count;.    } . 
75e0: 20 7d 20 7b 35 7d 0a 20 20 64 6f 5f 74 65 73 74   } {5}.  do_test
75f0: 20 70 72 61 67 6d 61 2d 31 34 2e 36 75 63 20 7b   pragma-14.6uc {
7600: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 70 72  .    execsql {pr
7610: 61 67 6d 61 20 41 55 58 2e 50 41 47 45 5f 43 4f  agma AUX.PAGE_CO
7620: 55 4e 54 7d 0a 20 20 7d 20 7b 35 7d 0a 7d 0a 0a  UNT}.  } {5}.}..
7630: 23 20 54 65 73 74 20 74 68 61 74 20 74 68 65 20  # Test that the 
7640: 76 61 6c 75 65 20 73 65 74 20 75 73 69 6e 67 20  value set using 
7650: 74 68 65 20 63 61 63 68 65 5f 73 69 7a 65 20 70  the cache_size p
7660: 72 61 67 6d 61 20 69 73 20 6e 6f 74 20 72 65 73  ragma is not res
7670: 65 74 20 77 68 65 6e 20 74 68 65 0a 23 20 73 63  et when the.# sc
7680: 68 65 6d 61 20 69 73 20 72 65 6c 6f 61 64 65 64  hema is reloaded
7690: 2e 0a 23 0a 69 66 63 61 70 61 62 6c 65 20 70 61  ..#.ifcapable pa
76a0: 67 65 72 5f 70 72 61 67 6d 61 73 20 7b 0a 20 20  ger_pragmas {.  
76b0: 64 62 20 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74  db close.  sqlit
76c0: 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20  e3 db test.db.  
76d0: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31  do_test pragma-1
76e0: 35 2e 31 20 7b 0a 20 20 20 20 65 78 65 63 73 71  5.1 {.    execsq
76f0: 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41  l {.      PRAGMA
7700: 20 63 61 63 68 65 5f 73 69 7a 65 3d 35 39 3b 0a   cache_size=59;.
7710: 20 20 20 20 20 20 50 52 41 47 4d 41 20 63 61 63        PRAGMA cac
7720: 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 7d 0a 20  he_size;.    }. 
7730: 20 7d 20 7b 35 39 7d 0a 20 20 64 6f 5f 74 65 73   } {59}.  do_tes
7740: 74 20 70 72 61 67 6d 61 2d 31 35 2e 32 20 7b 0a  t pragma-15.2 {.
7750: 20 20 20 20 73 71 6c 69 74 65 33 20 64 62 32 20      sqlite3 db2 
7760: 74 65 73 74 2e 64 62 0a 20 20 20 20 65 78 65 63  test.db.    exec
7770: 73 71 6c 20 7b 0a 20 20 20 20 20 20 43 52 45 41  sql {.      CREA
7780: 54 45 20 54 41 42 4c 45 20 6e 65 77 74 61 62 6c  TE TABLE newtabl
7790: 65 28 61 2c 20 62 2c 20 63 29 3b 0a 20 20 20 20  e(a, b, c);.    
77a0: 7d 20 64 62 32 0a 20 20 20 20 64 62 32 20 63 6c  } db2.    db2 cl
77b0: 6f 73 65 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f  ose.  } {}.  do_
77c0: 74 65 73 74 20 70 72 61 67 6d 61 2d 31 35 2e 33  test pragma-15.3
77d0: 20 7b 0a 20 20 20 20 23 20 45 76 61 6c 75 61 74   {.    # Evaluat
77e0: 69 6e 67 20 74 68 69 73 20 73 74 61 74 65 6d 65  ing this stateme
77f0: 6e 74 20 77 69 6c 6c 20 63 61 75 73 65 20 74 68  nt will cause th
7800: 65 20 73 63 68 65 6d 61 20 74 6f 20 62 65 20 72  e schema to be r
7810: 65 6c 6f 61 64 65 64 20 28 62 65 63 61 75 73 65  eloaded (because
7820: 0a 20 20 20 20 23 20 74 68 65 20 73 63 68 65 6d  .    # the schem
7830: 61 20 77 61 73 20 63 68 61 6e 67 65 64 20 62 79  a was changed by
7840: 20 61 6e 6f 74 68 65 72 20 63 6f 6e 6e 65 63 74   another connect
7850: 69 6f 6e 20 69 6e 20 70 72 61 67 6d 61 2d 31 35  ion in pragma-15
7860: 2e 32 29 2e 20 41 74 20 6f 6e 65 0a 20 20 20 20  .2). At one.    
7870: 23 20 70 6f 69 6e 74 20 74 68 65 72 65 20 77 61  # point there wa
7880: 73 20 61 20 62 75 67 20 74 68 61 74 20 72 65 73  s a bug that res
7890: 65 74 20 74 68 65 20 63 61 63 68 65 5f 73 69 7a  et the cache_siz
78a0: 65 20 74 6f 20 69 74 73 20 64 65 66 61 75 6c 74  e to its default
78b0: 20 76 61 6c 75 65 0a 20 20 20 20 23 20 77 68 65   value.    # whe
78c0: 6e 20 74 68 69 73 20 68 61 70 70 65 6e 65 64 2e  n this happened.
78d0: 20 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 20   .    execsql { 
78e0: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 73 71  SELECT * FROM sq
78f0: 6c 69 74 65 5f 6d 61 73 74 65 72 20 7d 0a 20 20  lite_master }.  
7900: 20 20 65 78 65 63 73 71 6c 20 7b 20 50 52 41 47    execsql { PRAG
7910: 4d 41 20 63 61 63 68 65 5f 73 69 7a 65 20 7d 0a  MA cache_size }.
7920: 20 20 7d 20 7b 35 39 7d 0a 7d 0a 0a 23 20 52 65    } {59}.}..# Re
7930: 73 65 74 20 74 68 65 20 73 71 6c 69 74 65 33 5f  set the sqlite3_
7940: 74 65 6d 70 5f 64 69 72 65 63 74 6f 72 79 20 76  temp_directory v
7950: 61 72 69 61 62 6c 65 20 66 6f 72 20 74 68 65 20  ariable for the 
7960: 6e 65 78 74 20 72 75 6e 20 6f 66 20 74 65 73 74  next run of test
7970: 73 3a 0a 73 71 6c 69 74 65 33 20 64 62 58 20 3a  s:.sqlite3 dbX :
7980: 6d 65 6d 6f 72 79 3a 0a 64 62 58 20 65 76 61 6c  memory:.dbX eval
7990: 20 7b 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74   {PRAGMA temp_st
79a0: 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 20 3d 20  ore_directory = 
79b0: 22 22 7d 0a 64 62 58 20 63 6c 6f 73 65 0a 0a 69  ""}.dbX close..i
79c0: 66 63 61 70 61 62 6c 65 20 6c 6f 63 6b 5f 70 72  fcapable lock_pr
79d0: 6f 78 79 5f 70 72 61 67 6d 61 73 26 26 70 72 65  oxy_pragmas&&pre
79e0: 66 65 72 5f 70 72 6f 78 79 5f 6c 6f 63 6b 69 6e  fer_proxy_lockin
79f0: 67 20 7b 0a 20 20 73 65 74 20 73 71 6c 69 74 65  g {.  set sqlite
7a00: 5f 68 6f 73 74 69 64 5f 6e 75 6d 20 31 0a 0a 20  _hostid_num 1.. 
7a10: 20 73 65 74 20 75 73 69 6e 67 5f 70 72 6f 78 79   set using_proxy
7a20: 20 30 0a 20 20 66 6f 72 65 61 63 68 20 7b 6e 61   0.  foreach {na
7a30: 6d 65 20 76 61 6c 75 65 7d 20 5b 61 72 72 61 79  me value} [array
7a40: 20 67 65 74 20 65 6e 76 20 53 51 4c 49 54 45 5f   get env SQLITE_
7a50: 46 4f 52 43 45 5f 50 52 4f 58 59 5f 4c 4f 43 4b  FORCE_PROXY_LOCK
7a60: 49 4e 47 5d 20 7b 0a 20 20 20 20 73 65 74 20 75  ING] {.    set u
7a70: 73 69 6e 67 5f 70 72 6f 78 79 20 24 76 61 6c 75  sing_proxy $valu
7a80: 65 0a 20 20 7d 0a 0a 20 20 23 20 54 65 73 74 20  e.  }..  # Test 
7a90: 74 68 65 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66  the lock_proxy_f
7aa0: 69 6c 65 20 70 72 61 67 6d 61 73 2e 0a 20 20 23  ile pragmas..  #
7ab0: 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 73 65  .  db close.  se
7ac0: 74 20 65 6e 76 28 53 51 4c 49 54 45 5f 46 4f 52  t env(SQLITE_FOR
7ad0: 43 45 5f 50 52 4f 58 59 5f 4c 4f 43 4b 49 4e 47  CE_PROXY_LOCKING
7ae0: 29 20 22 30 22 0a 0a 20 20 73 71 6c 69 74 65 33  ) "0"..  sqlite3
7af0: 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20 64 6f   db test.db.  do
7b00: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 36 2e  _test pragma-16.
7b10: 31 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  1 {.    execsql 
7b20: 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 6c  {.      PRAGMA l
7b30: 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 3d 22  ock_proxy_file="
7b40: 6d 79 6c 69 74 74 6c 65 70 72 6f 78 79 22 3b 0a  mylittleproxy";.
7b50: 20 20 20 20 20 20 73 65 6c 65 63 74 20 2a 20 66        select * f
7b60: 72 6f 6d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  rom sqlite_maste
7b70: 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20 65 78 65  r;.    }.    exe
7b80: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41  csql {.      PRA
7b90: 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66  GMA lock_proxy_f
7ba0: 69 6c 65 3b 0a 20 20 20 20 7d 20 0a 20 20 7d 20  ile;.    } .  } 
7bb0: 7b 6d 79 6c 69 74 74 6c 65 70 72 6f 78 79 7d 0a  {mylittleproxy}.
7bc0: 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .  do_test pragm
7bd0: 61 2d 31 36 2e 32 20 7b 0a 20 20 20 20 73 71 6c  a-16.2 {.    sql
7be0: 69 74 65 33 20 64 62 32 20 74 65 73 74 2e 64 62  ite3 db2 test.db
7bf0: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
7c00: 20 20 20 20 20 50 52 41 47 4d 41 20 6c 6f 63 6b       PRAGMA lock
7c10: 5f 70 72 6f 78 79 5f 66 69 6c 65 3d 22 6d 79 6c  _proxy_file="myl
7c20: 69 74 74 6c 65 70 72 6f 78 79 22 3b 0a 20 20 20  ittleproxy";.   
7c30: 20 7d 20 64 62 32 0a 20 20 7d 20 7b 7d 0a 0a 20   } db2.  } {}.. 
7c40: 20 64 62 32 20 63 6c 6f 73 65 0a 20 20 64 6f 5f   db2 close.  do_
7c50: 74 65 73 74 20 70 72 61 67 6d 61 2d 31 36 2e 32  test pragma-16.2
7c60: 2e 31 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  .1 {.    sqlite3
7c70: 20 64 62 32 20 74 65 73 74 2e 64 62 0a 20 20 20   db2 test.db.   
7c80: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20   execsql {.     
7c90: 20 50 52 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f   PRAGMA lock_pro
7ca0: 78 79 5f 66 69 6c 65 3d 22 3a 61 75 74 6f 3a 22  xy_file=":auto:"
7cb0: 3b 0a 20 20 20 20 20 20 73 65 6c 65 63 74 20 2a  ;.      select *
7cc0: 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f 6d 61 73   from sqlite_mas
7cd0: 74 65 72 3b 0a 20 20 20 20 7d 20 64 62 32 0a 20  ter;.    } db2. 
7ce0: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
7cf0: 20 20 20 50 52 41 47 4d 41 20 6c 6f 63 6b 5f 70     PRAGMA lock_p
7d00: 72 6f 78 79 5f 66 69 6c 65 3b 0a 20 20 20 20 7d  roxy_file;.    }
7d10: 20 64 62 32 0a 20 20 7d 20 7b 6d 79 6c 69 74 74   db2.  } {mylitt
7d20: 6c 65 70 72 6f 78 79 7d 0a 0a 20 20 64 62 32 20  leproxy}..  db2 
7d30: 63 6c 6f 73 65 0a 20 20 64 6f 5f 74 65 73 74 20  close.  do_test 
7d40: 70 72 61 67 6d 61 2d 31 36 2e 33 20 7b 0a 20 20  pragma-16.3 {.  
7d50: 20 20 73 71 6c 69 74 65 33 20 64 62 32 20 74 65    sqlite3 db2 te
7d60: 73 74 2e 64 62 0a 20 20 20 20 65 78 65 63 73 71  st.db.    execsq
7d70: 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41  l {.      PRAGMA
7d80: 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65   lock_proxy_file
7d90: 3d 22 6d 79 6f 74 68 65 72 70 72 6f 78 79 22 3b  ="myotherproxy";
7da0: 0a 20 20 20 20 7d 20 64 62 32 0a 20 20 20 20 63  .    } db2.    c
7db0: 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 20 20  atchsql {.      
7dc0: 73 65 6c 65 63 74 20 2a 20 66 72 6f 6d 20 73 71  select * from sq
7dd0: 6c 69 74 65 5f 6d 61 73 74 65 72 3b 0a 20 20 20  lite_master;.   
7de0: 20 7d 20 64 62 32 0a 20 20 7d 20 7b 31 20 7b 64   } db2.  } {1 {d
7df0: 61 74 61 62 61 73 65 20 69 73 20 6c 6f 63 6b 65  atabase is locke
7e00: 64 7d 7d 0a 0a 20 20 64 6f 5f 74 65 73 74 20 70  d}}..  do_test p
7e10: 72 61 67 6d 61 2d 31 36 2e 34 20 7b 0a 20 20 20  ragma-16.4 {.   
7e20: 20 64 62 32 20 63 6c 6f 73 65 0a 20 20 20 20 64   db2 close.    d
7e30: 62 20 63 6c 6f 73 65 0a 20 20 20 20 73 71 6c 69  b close.    sqli
7e40: 74 65 33 20 64 62 32 20 74 65 73 74 2e 64 62 0a  te3 db2 test.db.
7e50: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20      execsql {.  
7e60: 20 20 20 20 50 52 41 47 4d 41 20 6c 6f 63 6b 5f      PRAGMA lock_
7e70: 70 72 6f 78 79 5f 66 69 6c 65 3d 22 6d 79 6f 72  proxy_file="myor
7e80: 69 67 69 6e 61 6c 70 72 6f 78 79 22 3b 0a 20 20  iginalproxy";.  
7e90: 20 20 20 20 50 52 41 47 4d 41 20 6c 6f 63 6b 5f      PRAGMA lock_
7ea0: 70 72 6f 78 79 5f 66 69 6c 65 3d 22 6d 79 6f 74  proxy_file="myot
7eb0: 68 65 72 70 72 6f 78 79 22 3b 0a 20 20 20 20 20  herproxy";.     
7ec0: 20 50 52 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f   PRAGMA lock_pro
7ed0: 78 79 5f 66 69 6c 65 3b 0a 20 20 20 20 7d 20 64  xy_file;.    } d
7ee0: 62 32 0a 20 20 7d 20 7b 6d 79 6f 74 68 65 72 70  b2.  } {myotherp
7ef0: 72 6f 78 79 7d 0a 0a 20 20 64 62 32 20 63 6c 6f  roxy}..  db2 clo
7f00: 73 65 0a 20 20 73 65 74 20 65 6e 76 28 53 51 4c  se.  set env(SQL
7f10: 49 54 45 5f 46 4f 52 43 45 5f 50 52 4f 58 59 5f  ITE_FORCE_PROXY_
7f20: 4c 4f 43 4b 49 4e 47 29 20 22 31 22 0a 20 20 64  LOCKING) "1".  d
7f30: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 36  o_test pragma-16
7f40: 2e 35 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  .5 {.    sqlite3
7f50: 20 64 62 32 20 74 65 73 74 2e 64 62 0a 20 20 20   db2 test.db.   
7f60: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20   execsql {.     
7f70: 20 50 52 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f   PRAGMA lock_pro
7f80: 78 79 5f 66 69 6c 65 3d 22 3a 61 75 74 6f 3a 22  xy_file=":auto:"
7f90: 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 6c  ;.      PRAGMA l
7fa0: 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 3b 0a  ock_proxy_file;.
7fb0: 20 20 20 20 7d 20 64 62 32 0a 20 20 7d 20 7b 6d      } db2.  } {m
7fc0: 79 6f 74 68 65 72 70 72 6f 78 79 7d 0a 20 20 0a  yotherproxy}.  .
7fd0: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
7fe0: 2d 31 36 2e 36 20 7b 0a 20 20 20 20 64 62 32 20  -16.6 {.    db2 
7ff0: 63 6c 6f 73 65 0a 20 20 20 20 73 71 6c 69 74 65  close.    sqlite
8000: 33 20 64 62 32 20 74 65 73 74 32 2e 64 62 0a 20  3 db2 test2.db. 
8010: 20 20 20 73 65 74 20 6c 6f 63 6b 70 61 74 68 20     set lockpath 
8020: 5b 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20  [execsql {.     
8030: 20 50 52 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f   PRAGMA lock_pro
8040: 78 79 5f 66 69 6c 65 3d 22 3a 61 75 74 6f 3a 22  xy_file=":auto:"
8050: 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 6c  ;.      PRAGMA l
8060: 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 3b 0a  ock_proxy_file;.
8070: 20 20 20 20 7d 20 64 62 32 5d 0a 20 20 20 20 73      } db2].    s
8080: 74 72 69 6e 67 20 6d 61 74 63 68 20 22 2a 74 65  tring match "*te
8090: 73 74 32 2e 64 62 3a 61 75 74 6f 3a 22 20 24 6c  st2.db:auto:" $l
80a0: 6f 63 6b 70 61 74 68 0a 20 20 7d 20 7b 31 7d 0a  ockpath.  } {1}.
80b0: 20 20 0a 20 20 73 65 74 20 73 71 6c 69 74 65 5f    .  set sqlite_
80c0: 68 6f 73 74 69 64 5f 6e 75 6d 20 32 0a 20 20 64  hostid_num 2.  d
80d0: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 36  o_test pragma-16
80e0: 2e 37 20 7b 0a 20 20 20 20 6c 69 73 74 20 5b 63  .7 {.    list [c
80f0: 61 74 63 68 20 7b 0a 20 20 20 20 20 20 73 71 6c  atch {.      sql
8100: 69 74 65 33 20 64 62 20 74 65 73 74 32 2e 64 62  ite3 db test2.db
8110: 0a 20 20 20 20 20 20 65 78 65 63 73 71 6c 20 7b  .      execsql {
8120: 20 0a 20 20 20 20 20 20 20 20 50 52 41 47 4d 41   .        PRAGMA
8130: 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65   lock_proxy_file
8140: 3d 22 3a 61 75 74 6f 3a 22 3b 0a 20 20 20 20 20  =":auto:";.     
8150: 20 20 20 73 65 6c 65 63 74 20 2a 20 66 72 6f 6d     select * from
8160: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 3b 0a   sqlite_master;.
8170: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 20 6d 73        }.    } ms
8180: 67 5d 20 24 6d 73 67 0a 20 20 7d 20 7b 31 20 7b  g] $msg.  } {1 {
8190: 64 61 74 61 62 61 73 65 20 69 73 20 6c 6f 63 6b  database is lock
81a0: 65 64 7d 7d 0a 20 20 64 62 20 63 6c 6f 73 65 0a  ed}}.  db close.
81b0: 20 20 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61    .  do_test pra
81c0: 67 6d 61 2d 31 36 2e 38 20 7b 0a 20 20 20 20 6c  gma-16.8 {.    l
81d0: 69 73 74 20 5b 63 61 74 63 68 20 7b 0a 20 20 20  ist [catch {.   
81e0: 20 20 20 73 71 6c 69 74 65 33 20 64 62 20 74 65     sqlite3 db te
81f0: 73 74 32 2e 64 62 0a 20 20 20 20 20 20 65 78 65  st2.db.      exe
8200: 63 73 71 6c 20 7b 20 73 65 6c 65 63 74 20 2a 20  csql { select * 
8210: 66 72 6f 6d 20 73 71 6c 69 74 65 5f 6d 61 73 74  from sqlite_mast
8220: 65 72 20 7d 20 0a 20 20 20 20 7d 20 6d 73 67 5d  er } .    } msg]
8230: 20 24 6d 73 67 0a 20 20 7d 20 7b 31 20 7b 64 61   $msg.  } {1 {da
8240: 74 61 62 61 73 65 20 69 73 20 6c 6f 63 6b 65 64  tabase is locked
8250: 7d 7d 0a 0a 20 20 64 62 32 20 63 6c 6f 73 65 0a  }}..  db2 close.
8260: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
8270: 2d 31 36 2e 38 2e 31 20 7b 0a 20 20 20 20 65 78  -16.8.1 {.    ex
8280: 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52  ecsql {.      PR
8290: 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f  AGMA lock_proxy_
82a0: 66 69 6c 65 3d 22 79 65 74 61 6e 6f 74 68 65 72  file="yetanother
82b0: 70 72 6f 78 79 22 3b 0a 20 20 20 20 20 20 50 52  proxy";.      PR
82c0: 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f  AGMA lock_proxy_
82d0: 66 69 6c 65 3b 0a 20 20 20 20 7d 20 0a 20 20 7d  file;.    } .  }
82e0: 20 7b 79 65 74 61 6e 6f 74 68 65 72 70 72 6f 78   {yetanotherprox
82f0: 79 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61  y}.  do_test pra
8300: 67 6d 61 2d 31 36 2e 38 2e 32 20 7b 0a 20 20 20  gma-16.8.2 {.   
8310: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20   execsql {.     
8320: 20 63 72 65 61 74 65 20 74 61 62 6c 65 20 6d 69   create table mi
8330: 6e 65 28 78 29 3b 0a 20 20 20 20 7d 20 0a 20 20  ne(x);.    } .  
8340: 7d 20 7b 7d 0a 0a 20 20 64 62 20 63 6c 6f 73 65  } {}..  db close
8350: 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .  do_test pragm
8360: 61 2d 31 36 2e 39 20 7b 0a 20 20 20 20 73 71 6c  a-16.9 {.    sql
8370: 69 74 65 33 20 64 62 20 70 72 6f 78 79 74 65 73  ite3 db proxytes
8380: 74 2e 64 62 0a 20 20 20 20 73 65 74 20 6c 6f 63  t.db.    set loc
8390: 6b 70 61 74 68 32 20 5b 65 78 65 63 73 71 6c 20  kpath2 [execsql 
83a0: 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 6c  {.      PRAGMA l
83b0: 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 3d 22  ock_proxy_file="
83c0: 3a 61 75 74 6f 3a 22 3b 0a 20 20 20 20 20 20 50  :auto:";.      P
83d0: 52 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78 79  RAGMA lock_proxy
83e0: 5f 66 69 6c 65 3b 0a 20 20 20 20 7d 20 64 62 5d  _file;.    } db]
83f0: 0a 20 20 20 20 73 74 72 69 6e 67 20 6d 61 74 63  .    string matc
8400: 68 20 22 2a 70 72 6f 78 79 74 65 73 74 2e 64 62  h "*proxytest.db
8410: 3a 61 75 74 6f 3a 22 20 24 6c 6f 63 6b 70 61 74  :auto:" $lockpat
8420: 68 32 0a 20 20 7d 20 7b 31 7d 0a 0a 20 20 73 65  h2.  } {1}..  se
8430: 74 20 65 6e 76 28 53 51 4c 49 54 45 5f 46 4f 52  t env(SQLITE_FOR
8440: 43 45 5f 50 52 4f 58 59 5f 4c 4f 43 4b 49 4e 47  CE_PROXY_LOCKING
8450: 29 20 24 75 73 69 6e 67 5f 70 72 6f 78 79 0a 20  ) $using_proxy. 
8460: 20 73 65 74 20 73 71 6c 69 74 65 5f 68 6f 73 74   set sqlite_host
8470: 69 64 5f 6e 75 6d 20 30 0a 7d 0a 0a 23 20 50 61  id_num 0.}..# Pa
8480: 72 73 69 6e 67 20 6f 66 20 61 75 74 6f 5f 76 61  rsing of auto_va
8490: 63 75 75 6d 20 73 65 74 74 69 6e 67 73 2e 0a 23  cuum settings..#
84a0: 0a 66 6f 72 65 61 63 68 20 7b 61 75 74 6f 76 61  .foreach {autova
84b0: 63 5f 73 65 74 74 69 6e 67 20 76 61 6c 7d 20 7b  c_setting val} {
84c0: 0a 20 20 30 20 30 0a 20 20 31 20 31 0a 20 20 32  .  0 0.  1 1.  2
84d0: 20 32 0a 20 20 33 20 30 0a 20 20 2d 31 20 30 0a   2.  3 0.  -1 0.
84e0: 20 20 6e 6f 6e 65 20 30 0a 20 20 4e 4f 4e 45 20    none 0.  NONE 
84f0: 30 0a 20 20 4e 6f 4e 65 20 30 0a 20 20 66 75 6c  0.  NoNe 0.  ful
8500: 6c 20 31 0a 20 20 46 55 4c 4c 20 31 0a 20 20 69  l 1.  FULL 1.  i
8510: 6e 63 72 65 6d 65 6e 74 61 6c 20 32 0a 20 20 49  ncremental 2.  I
8520: 4e 43 52 45 4d 45 4e 54 41 4c 20 32 0a 20 20 2d  NCREMENTAL 2.  -
8530: 31 32 33 34 20 30 0a 20 20 31 32 33 34 20 30 0a  1234 0.  1234 0.
8540: 7d 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 70 72  } {.  do_test pr
8550: 61 67 6d 61 2d 31 37 2e 31 2e 24 61 75 74 6f 76  agma-17.1.$autov
8560: 61 63 5f 73 65 74 74 69 6e 67 20 7b 0a 20 20 20  ac_setting {.   
8570: 20 63 61 74 63 68 20 7b 64 62 20 63 6c 6f 73 65   catch {db close
8580: 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 20 64 62  }.    sqlite3 db
8590: 20 3a 6d 65 6d 6f 72 79 3a 0a 20 20 20 20 65 78   :memory:.    ex
85a0: 65 63 73 71 6c 20 22 0a 20 20 20 20 20 20 50 52  ecsql ".      PR
85b0: 41 47 4d 41 20 61 75 74 6f 5f 76 61 63 75 75 6d  AGMA auto_vacuum
85c0: 3d 24 3a 3a 61 75 74 6f 76 61 63 5f 73 65 74 74  =$::autovac_sett
85d0: 69 6e 67 3b 0a 20 20 20 20 20 20 50 52 41 47 4d  ing;.      PRAGM
85e0: 41 20 61 75 74 6f 5f 76 61 63 75 75 6d 3b 0a 20  A auto_vacuum;. 
85f0: 20 20 20 22 0a 20 20 7d 20 24 76 61 6c 0a 7d 0a     ".  } $val.}.
8600: 0a 23 20 50 61 72 73 69 6e 67 20 6f 66 20 74 65  .# Parsing of te
8610: 6d 70 5f 73 74 6f 72 65 20 73 65 74 74 69 6e 67  mp_store setting
8620: 73 2e 0a 23 0a 66 6f 72 65 61 63 68 20 7b 74 65  s..#.foreach {te
8630: 6d 70 5f 73 65 74 74 69 6e 67 20 76 61 6c 7d 20  mp_setting val} 
8640: 7b 0a 20 20 30 20 30 0a 20 20 31 20 31 0a 20 20  {.  0 0.  1 1.  
8650: 32 20 32 0a 20 20 33 20 30 0a 20 20 2d 31 20 30  2 2.  3 0.  -1 0
8660: 0a 20 20 66 69 6c 65 20 31 0a 20 20 46 49 4c 45  .  file 1.  FILE
8670: 20 31 0a 20 20 66 49 6c 45 20 31 0a 20 20 6d 65   1.  fIlE 1.  me
8680: 6d 6f 72 79 20 32 0a 20 20 4d 45 4d 4f 52 59 20  mory 2.  MEMORY 
8690: 32 0a 20 20 4d 65 4d 6f 52 79 20 32 0a 7d 20 7b  2.  MeMoRy 2.} {
86a0: 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .  do_test pragm
86b0: 61 2d 31 38 2e 31 2e 24 74 65 6d 70 5f 73 65 74  a-18.1.$temp_set
86c0: 74 69 6e 67 20 7b 0a 20 20 20 20 63 61 74 63 68  ting {.    catch
86d0: 20 7b 64 62 20 63 6c 6f 73 65 7d 0a 20 20 20 20   {db close}.    
86e0: 73 71 6c 69 74 65 33 20 64 62 20 3a 6d 65 6d 6f  sqlite3 db :memo
86f0: 72 79 3a 0a 20 20 20 20 65 78 65 63 73 71 6c 20  ry:.    execsql 
8700: 22 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 74  ".      PRAGMA t
8710: 65 6d 70 5f 73 74 6f 72 65 3d 24 3a 3a 74 65 6d  emp_store=$::tem
8720: 70 5f 73 65 74 74 69 6e 67 3b 0a 20 20 20 20 20  p_setting;.     
8730: 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f   PRAGMA temp_sto
8740: 72 65 3d 24 3a 3a 74 65 6d 70 5f 73 65 74 74 69  re=$::temp_setti
8750: 6e 67 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41  ng;.      PRAGMA
8760: 20 74 65 6d 70 5f 73 74 6f 72 65 3b 0a 20 20 20   temp_store;.   
8770: 20 22 0a 20 20 7d 20 24 76 61 6c 0a 7d 0a 0a 23   ".  } $val.}..#
8780: 20 54 68 65 20 53 51 4c 49 54 45 5f 46 43 4e 54   The SQLITE_FCNT
8790: 4c 5f 50 52 41 47 4d 41 20 6c 6f 67 69 63 2c 20  L_PRAGMA logic, 
87a0: 77 69 74 68 20 65 72 72 6f 72 20 68 61 6e 64 6c  with error handl
87b0: 69 6e 67 2e 0a 23 0a 64 62 20 63 6c 6f 73 65 0a  ing..#.db close.
87c0: 74 65 73 74 76 66 73 20 74 76 66 73 0a 73 71 6c  testvfs tvfs.sql
87d0: 69 74 65 33 20 64 62 20 74 65 73 74 2e 64 62 20  ite3 db test.db 
87e0: 2d 76 66 73 20 74 76 66 73 0a 64 6f 5f 74 65 73  -vfs tvfs.do_tes
87f0: 74 20 70 72 61 67 6d 61 2d 31 39 2e 31 20 7b 0a  t pragma-19.1 {.
8800: 20 20 63 61 74 63 68 73 71 6c 20 7b 50 52 41 47    catchsql {PRAG
8810: 4d 41 20 65 72 72 6f 72 7d 0a 7d 20 7b 31 20 7b  MA error}.} {1 {
8820: 53 51 4c 20 6c 6f 67 69 63 20 65 72 72 6f 72 20  SQL logic error 
8830: 6f 72 20 6d 69 73 73 69 6e 67 20 64 61 74 61 62  or missing datab
8840: 61 73 65 7d 7d 0a 64 6f 5f 74 65 73 74 20 70 72  ase}}.do_test pr
8850: 61 67 6d 61 2d 31 39 2e 32 20 7b 0a 20 20 63 61  agma-19.2 {.  ca
8860: 74 63 68 73 71 6c 20 7b 50 52 41 47 4d 41 20 65  tchsql {PRAGMA e
8870: 72 72 6f 72 3d 27 54 68 69 73 20 69 73 20 74 68  rror='This is th
8880: 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 27  e error message'
8890: 7d 0a 7d 20 7b 31 20 7b 54 68 69 73 20 69 73 20  }.} {1 {This is 
88a0: 74 68 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67  the error messag
88b0: 65 7d 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67  e}}.do_test prag
88c0: 6d 61 2d 31 39 2e 33 20 7b 0a 20 20 63 61 74 63  ma-19.3 {.  catc
88d0: 68 73 71 6c 20 7b 50 52 41 47 4d 41 20 65 72 72  hsql {PRAGMA err
88e0: 6f 72 3d 27 37 20 54 68 69 73 20 69 73 20 74 68  or='7 This is th
88f0: 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 27  e error message'
8900: 7d 0a 7d 20 7b 31 20 7b 54 68 69 73 20 69 73 20  }.} {1 {This is 
8910: 74 68 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67  the error messag
8920: 65 7d 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67  e}}.do_test prag
8930: 6d 61 2d 31 39 2e 34 20 7b 0a 20 20 63 61 74 63  ma-19.4 {.  catc
8940: 68 73 71 6c 20 7b 50 52 41 47 4d 41 20 65 72 72  hsql {PRAGMA err
8950: 6f 72 3d 37 7d 0a 7d 20 7b 31 20 7b 6f 75 74 20  or=7}.} {1 {out 
8960: 6f 66 20 6d 65 6d 6f 72 79 7d 7d 0a 64 6f 5f 74  of memory}}.do_t
8970: 65 73 74 20 70 72 61 67 6d 61 2d 31 39 2e 35 20  est pragma-19.5 
8980: 7b 0a 20 20 66 69 6c 65 20 74 61 69 6c 20 5b 6c  {.  file tail [l
8990: 69 6e 64 65 78 20 5b 65 78 65 63 73 71 6c 20 7b  index [execsql {
89a0: 50 52 41 47 4d 41 20 66 69 6c 65 6e 61 6d 65 7d  PRAGMA filename}
89b0: 5d 20 30 5d 0a 7d 20 7b 74 65 73 74 2e 64 62 7d  ] 0].} {test.db}
89c0: 0a 0a 69 66 20 7b 24 74 63 6c 5f 70 6c 61 74 66  ..if {$tcl_platf
89d0: 6f 72 6d 28 70 6c 61 74 66 6f 72 6d 29 3d 3d 22  orm(platform)=="
89e0: 77 69 6e 64 6f 77 73 22 7d 20 7b 0a 23 20 54 65  windows"} {.# Te
89f0: 73 74 20 64 61 74 61 5f 73 74 6f 72 65 5f 64 69  st data_store_di
8a00: 72 65 63 74 6f 72 79 20 70 72 61 67 6d 61 0a 23  rectory pragma.#
8a10: 0a 64 62 20 63 6c 6f 73 65 0a 73 71 6c 69 74 65  .db close.sqlite
8a20: 33 20 64 62 20 74 65 73 74 2e 64 62 0a 66 69 6c  3 db test.db.fil
8a30: 65 20 6d 6b 64 69 72 20 64 61 74 61 5f 64 69 72  e mkdir data_dir
8a40: 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d  .do_test pragma-
8a50: 32 30 2e 31 20 7b 0a 20 20 63 61 74 63 68 73 71  20.1 {.  catchsq
8a60: 6c 20 7b 50 52 41 47 4d 41 20 64 61 74 61 5f 73  l {PRAGMA data_s
8a70: 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 7d 0a  tore_directory}.
8a80: 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  } {0 {}}.do_test
8a90: 20 70 72 61 67 6d 61 2d 32 30 2e 32 20 7b 0a 20   pragma-20.2 {. 
8aa0: 20 73 65 74 20 70 77 64 20 5b 73 74 72 69 6e 67   set pwd [string
8ab0: 20 6d 61 70 20 7b 27 20 27 27 7d 20 5b 66 69 6c   map {' ''} [fil
8ac0: 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 67 65  e nativename [ge
8ad0: 74 5f 70 77 64 5d 5d 5d 0a 20 20 63 61 74 63 68  t_pwd]]].  catch
8ae0: 73 71 6c 20 22 50 52 41 47 4d 41 20 64 61 74 61  sql "PRAGMA data
8af0: 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79  _store_directory
8b00: 3d 27 24 70 77 64 27 3b 22 0a 7d 20 7b 30 20 7b  ='$pwd';".} {0 {
8b10: 7d 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  }}.do_test pragm
8b20: 61 2d 32 30 2e 33 20 7b 0a 20 20 63 61 74 63 68  a-20.3 {.  catch
8b30: 73 71 6c 20 7b 50 52 41 47 4d 41 20 64 61 74 61  sql {PRAGMA data
8b40: 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79  _store_directory
8b50: 7d 0a 7d 20 5b 6c 69 73 74 20 30 20 5b 6c 69 73  }.} [list 0 [lis
8b60: 74 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61  t [file nativena
8b70: 6d 65 20 5b 67 65 74 5f 70 77 64 5d 5d 5d 5d 0a  me [get_pwd]]]].
8b80: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 32  do_test pragma-2
8b90: 30 2e 34 20 7b 0a 20 20 73 65 74 20 70 77 64 20  0.4 {.  set pwd 
8ba0: 5b 73 74 72 69 6e 67 20 6d 61 70 20 7b 27 20 27  [string map {' '
8bb0: 27 7d 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e  '} [file nativen
8bc0: 61 6d 65 20 5c 0a 20 20 20 20 5b 66 69 6c 65 20  ame \.    [file 
8bd0: 6a 6f 69 6e 20 5b 67 65 74 5f 70 77 64 5d 20 64  join [get_pwd] d
8be0: 61 74 61 5f 64 69 72 5d 5d 5d 0a 20 20 63 61 74  ata_dir]]].  cat
8bf0: 63 68 73 71 6c 20 22 50 52 41 47 4d 41 20 64 61  chsql "PRAGMA da
8c00: 74 61 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f  ta_store_directo
8c10: 72 79 3d 27 24 70 77 64 27 3b 22 0a 7d 20 7b 30  ry='$pwd';".} {0
8c20: 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61   {}}.do_test pra
8c30: 67 6d 61 2d 32 30 2e 35 20 7b 0a 20 20 73 71 6c  gma-20.5 {.  sql
8c40: 69 74 65 33 20 64 62 32 20 74 65 73 74 32 2e 64  ite3 db2 test2.d
8c50: 62 0a 20 20 63 61 74 63 68 73 71 6c 20 22 50 52  b.  catchsql "PR
8c60: 41 47 4d 41 20 64 61 74 61 62 61 73 65 5f 6c 69  AGMA database_li
8c70: 73 74 3b 22 20 64 62 32 0a 7d 20 5b 6c 69 73 74  st;" db2.} [list
8c80: 20 30 20 5b 6c 69 73 74 20 30 20 6d 61 69 6e 20   0 [list 0 main 
8c90: 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65  [file nativename
8ca0: 20 5c 0a 20 20 20 20 5b 66 69 6c 65 20 6a 6f 69   \.    [file joi
8cb0: 6e 20 5b 67 65 74 5f 70 77 64 5d 20 64 61 74 61  n [get_pwd] data
8cc0: 5f 64 69 72 20 74 65 73 74 32 2e 64 62 5d 5d 5d  _dir test2.db]]]
8cd0: 5d 0a 63 61 74 63 68 20 7b 64 62 32 20 63 6c 6f  ].catch {db2 clo
8ce0: 73 65 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67  se}.do_test prag
8cf0: 6d 61 2d 32 30 2e 36 20 7b 0a 20 20 73 71 6c 69  ma-20.6 {.  sqli
8d00: 74 65 33 20 64 62 32 20 5b 66 69 6c 65 20 6a 6f  te3 db2 [file jo
8d10: 69 6e 20 5b 67 65 74 5f 70 77 64 5d 20 74 65 73  in [get_pwd] tes
8d20: 74 32 2e 64 62 5d 0a 20 20 63 61 74 63 68 73 71  t2.db].  catchsq
8d30: 6c 20 22 50 52 41 47 4d 41 20 64 61 74 61 62 61  l "PRAGMA databa
8d40: 73 65 5f 6c 69 73 74 3b 22 20 64 62 32 0a 7d 20  se_list;" db2.} 
8d50: 5b 6c 69 73 74 20 30 20 5b 6c 69 73 74 20 30 20  [list 0 [list 0 
8d60: 6d 61 69 6e 20 5b 66 69 6c 65 20 6e 61 74 69 76  main [file nativ
8d70: 65 6e 61 6d 65 20 5c 0a 20 20 20 20 5b 66 69 6c  ename \.    [fil
8d80: 65 20 6a 6f 69 6e 20 5b 67 65 74 5f 70 77 64 5d  e join [get_pwd]
8d90: 20 74 65 73 74 32 2e 64 62 5d 5d 5d 5d 0a 63 61   test2.db]]]].ca
8da0: 74 63 68 20 7b 64 62 32 20 63 6c 6f 73 65 7d 0a  tch {db2 close}.
8db0: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 32  do_test pragma-2
8dc0: 30 2e 37 20 7b 0a 20 20 63 61 74 63 68 73 71 6c  0.7 {.  catchsql
8dd0: 20 22 50 52 41 47 4d 41 20 64 61 74 61 5f 73 74   "PRAGMA data_st
8de0: 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 3d 27 27  ore_directory=''
8df0: 3b 22 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74  ;".} {0 {}}.do_t
8e00: 65 73 74 20 70 72 61 67 6d 61 2d 32 30 2e 38 20  est pragma-20.8 
8e10: 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 50 52  {.  catchsql {PR
8e20: 41 47 4d 41 20 64 61 74 61 5f 73 74 6f 72 65 5f  AGMA data_store_
8e30: 64 69 72 65 63 74 6f 72 79 7d 0a 7d 20 7b 30 20  directory}.} {0 
8e40: 7b 7d 7d 0a 0a 66 6f 72 63 65 64 65 6c 65 74 65  {}}..forcedelete
8e50: 20 64 61 74 61 5f 64 69 72 0a 7d 20 3b 23 20 65   data_dir.} ;# e
8e60: 6e 64 69 66 20 77 69 6e 64 6f 77 73 0a 0a 64 61  ndif windows..da
8e70: 74 61 62 61 73 65 5f 6d 61 79 5f 62 65 5f 63 6f  tabase_may_be_co
8e80: 72 72 75 70 74 0a 0a 64 6f 5f 74 65 73 74 20 32  rrupt..do_test 2
8e90: 31 2e 31 20 7b 0a 20 20 23 20 43 72 65 61 74 65  1.1 {.  # Create
8ea0: 20 61 20 63 6f 72 72 75 70 74 20 64 61 74 61 62   a corrupt datab
8eb0: 61 73 65 20 69 6e 20 74 65 73 74 65 72 72 2e 64  ase in testerr.d
8ec0: 62 2e 20 41 6e 64 20 61 20 6e 6f 6e 2d 63 6f 72  b. And a non-cor
8ed0: 72 75 70 74 20 61 74 20 74 65 73 74 2e 64 62 2e  rupt at test.db.
8ee0: 0a 20 20 23 0a 20 20 64 62 20 63 6c 6f 73 65 0a  .  #.  db close.
8ef0: 20 20 66 6f 72 63 65 64 65 6c 65 74 65 20 74 65    forcedelete te
8f00: 73 74 2e 64 62 0a 20 20 73 71 6c 69 74 65 33 20  st.db.  sqlite3 
8f10: 64 62 20 74 65 73 74 2e 64 62 0a 20 20 65 78 65  db test.db.  exe
8f20: 63 73 71 6c 20 7b 20 0a 20 20 20 20 50 52 41 47  csql { .    PRAG
8f30: 4d 41 20 70 61 67 65 5f 73 69 7a 65 20 3d 20 31  MA page_size = 1
8f40: 30 32 34 3b 0a 20 20 20 20 50 52 41 47 4d 41 20  024;.    PRAGMA 
8f50: 61 75 74 6f 5f 76 61 63 75 75 6d 20 3d 20 30 3b  auto_vacuum = 0;
8f60: 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  .    CREATE TABL
8f70: 45 20 74 31 28 61 20 50 52 49 4d 41 52 59 20 4b  E t1(a PRIMARY K
8f80: 45 59 2c 20 62 29 3b 0a 20 20 20 20 49 4e 53 45  EY, b);.    INSE
8f90: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
8fa0: 53 28 31 2c 20 31 29 3b 0a 20 20 7d 0a 20 20 66  S(1, 1);.  }.  f
8fb0: 6f 72 20 7b 73 65 74 20 69 20 30 7d 20 7b 24 69  or {set i 0} {$i
8fc0: 20 3c 20 31 30 7d 20 7b 69 6e 63 72 20 69 7d 20   < 10} {incr i} 
8fd0: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 20  {.    execsql { 
8fe0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 53  INSERT INTO t1 S
8ff0: 45 4c 45 43 54 20 61 20 2b 20 28 31 20 3c 3c 20  ELECT a + (1 << 
9000: 24 69 29 2c 20 62 20 2b 20 28 31 20 3c 3c 20 24  $i), b + (1 << $
9010: 69 29 20 46 52 4f 4d 20 74 31 20 7d 0a 20 20 7d  i) FROM t1 }.  }
9020: 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 66 6f  .  db close.  fo
9030: 72 63 65 63 6f 70 79 20 74 65 73 74 2e 64 62 20  rcecopy test.db 
9040: 74 65 73 74 65 72 72 2e 64 62 0a 20 20 68 65 78  testerr.db.  hex
9050: 69 6f 5f 77 72 69 74 65 20 74 65 73 74 65 72 72  io_write testerr
9060: 2e 64 62 20 31 35 30 30 30 20 5b 73 74 72 69 6e  .db 15000 [strin
9070: 67 20 72 65 70 65 61 74 20 35 35 20 31 30 30 5d  g repeat 55 100]
9080: 0a 7d 20 7b 31 30 30 7d 0a 0a 73 65 74 20 6d 61  .} {100}..set ma
9090: 69 6e 65 72 72 20 7b 2a 2a 2a 20 69 6e 20 64 61  inerr {*** in da
90a0: 74 61 62 61 73 65 20 6d 61 69 6e 20 2a 2a 2a 0a  tabase main ***.
90b0: 4d 75 6c 74 69 70 6c 65 20 75 73 65 73 20 66 6f  Multiple uses fo
90c0: 72 20 62 79 74 65 20 36 37 32 20 6f 66 20 70 61  r byte 672 of pa
90d0: 67 65 20 31 35 7d 0a 73 65 74 20 61 75 78 65 72  ge 15}.set auxer
90e0: 72 20 7b 2a 2a 2a 20 69 6e 20 64 61 74 61 62 61  r {*** in databa
90f0: 73 65 20 61 75 78 20 2a 2a 2a 0a 4d 75 6c 74 69  se aux ***.Multi
9100: 70 6c 65 20 75 73 65 73 20 66 6f 72 20 62 79 74  ple uses for byt
9110: 65 20 36 37 32 20 6f 66 20 70 61 67 65 20 31 35  e 672 of page 15
9120: 7d 0a 0a 73 65 74 20 6d 61 69 6e 65 72 72 20 7b  }..set mainerr {
9130: 2f 7b 5c 2a 5c 2a 5c 2a 20 69 6e 20 64 61 74 61  /{\*\*\* in data
9140: 62 61 73 65 20 6d 61 69 6e 20 5c 2a 5c 2a 5c 2a  base main \*\*\*
9150: 0a 4d 75 6c 74 69 70 6c 65 20 75 73 65 73 20 66  .Multiple uses f
9160: 6f 72 20 62 79 74 65 20 36 37 32 20 6f 66 20 70  or byte 672 of p
9170: 61 67 65 20 31 35 7d 2e 2a 2f 7d 0a 73 65 74 20  age 15}.*/}.set 
9180: 61 75 78 65 72 72 20 7b 2f 7b 5c 2a 5c 2a 5c 2a  auxerr {/{\*\*\*
9190: 20 69 6e 20 64 61 74 61 62 61 73 65 20 61 75 78   in database aux
91a0: 20 5c 2a 5c 2a 5c 2a 0a 4d 75 6c 74 69 70 6c 65   \*\*\*.Multiple
91b0: 20 75 73 65 73 20 66 6f 72 20 62 79 74 65 20 36   uses for byte 6
91c0: 37 32 20 6f 66 20 70 61 67 65 20 31 35 7d 2e 2a  72 of page 15}.*
91d0: 2f 7d 0a 0a 64 6f 5f 74 65 73 74 20 32 32 2e 32  /}..do_test 22.2
91e0: 20 7b 0a 20 20 63 61 74 63 68 20 7b 20 64 62 20   {.  catch { db 
91f0: 63 6c 6f 73 65 20 7d 0a 20 20 73 71 6c 69 74 65  close }.  sqlite
9200: 33 20 64 62 20 74 65 73 74 65 72 72 2e 64 62 0a  3 db testerr.db.
9210: 20 20 65 78 65 63 73 71 6c 20 7b 20 50 52 41 47    execsql { PRAG
9220: 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65  MA integrity_che
9230: 63 6b 20 7d 0a 7d 20 24 6d 61 69 6e 65 72 72 0a  ck }.} $mainerr.
9240: 0a 64 6f 5f 74 65 73 74 20 32 32 2e 33 2e 31 20  .do_test 22.3.1 
9250: 7b 0a 20 20 63 61 74 63 68 20 7b 20 64 62 20 63  {.  catch { db c
9260: 6c 6f 73 65 20 7d 0a 20 20 73 71 6c 69 74 65 33  lose }.  sqlite3
9270: 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20 65 78   db test.db.  ex
9280: 65 63 73 71 6c 20 7b 20 0a 20 20 20 20 41 54 54  ecsql { .    ATT
9290: 41 43 48 20 27 74 65 73 74 65 72 72 2e 64 62 27  ACH 'testerr.db'
92a0: 20 41 53 20 27 61 75 78 27 3b 0a 20 20 20 20 50   AS 'aux';.    P
92b0: 52 41 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f  RAGMA integrity_
92c0: 63 68 65 63 6b 3b 0a 20 20 7d 0a 7d 20 24 61 75  check;.  }.} $au
92d0: 78 65 72 72 0a 64 6f 5f 74 65 73 74 20 32 32 2e  xerr.do_test 22.
92e0: 33 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  3.2 {.  execsql 
92f0: 7b 20 50 52 41 47 4d 41 20 6d 61 69 6e 2e 69 6e  { PRAGMA main.in
9300: 74 65 67 72 69 74 79 5f 63 68 65 63 6b 3b 20 7d  tegrity_check; }
9310: 0a 7d 20 7b 6f 6b 7d 0a 64 6f 5f 74 65 73 74 20  .} {ok}.do_test 
9320: 32 32 2e 33 2e 33 20 7b 0a 20 20 65 78 65 63 73  22.3.3 {.  execs
9330: 71 6c 20 7b 20 50 52 41 47 4d 41 20 61 75 78 2e  ql { PRAGMA aux.
9340: 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 3b  integrity_check;
9350: 20 7d 0a 7d 20 24 61 75 78 65 72 72 0a 0a 64 6f   }.} $auxerr..do
9360: 5f 74 65 73 74 20 32 32 2e 34 2e 31 20 7b 0a 20  _test 22.4.1 {. 
9370: 20 63 61 74 63 68 20 7b 20 64 62 20 63 6c 6f 73   catch { db clos
9380: 65 20 7d 0a 20 20 73 71 6c 69 74 65 33 20 64 62  e }.  sqlite3 db
9390: 20 74 65 73 74 65 72 72 2e 64 62 0a 20 20 65 78   testerr.db.  ex
93a0: 65 63 73 71 6c 20 7b 20 0a 20 20 20 20 41 54 54  ecsql { .    ATT
93b0: 41 43 48 20 27 74 65 73 74 2e 64 62 27 20 41 53  ACH 'test.db' AS
93c0: 20 27 61 75 78 27 3b 0a 20 20 20 20 50 52 41 47   'aux';.    PRAG
93d0: 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65  MA integrity_che
93e0: 63 6b 3b 0a 20 20 7d 0a 7d 20 24 6d 61 69 6e 65  ck;.  }.} $maine
93f0: 72 72 0a 64 6f 5f 74 65 73 74 20 32 32 2e 34 2e  rr.do_test 22.4.
9400: 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 20  2 {.  execsql { 
9410: 50 52 41 47 4d 41 20 6d 61 69 6e 2e 69 6e 74 65  PRAGMA main.inte
9420: 67 72 69 74 79 5f 63 68 65 63 6b 3b 20 7d 0a 7d  grity_check; }.}
9430: 20 24 6d 61 69 6e 65 72 72 0a 64 6f 5f 74 65 73   $mainerr.do_tes
9440: 74 20 32 32 2e 34 2e 33 20 7b 0a 20 20 65 78 65  t 22.4.3 {.  exe
9450: 63 73 71 6c 20 7b 20 50 52 41 47 4d 41 20 61 75  csql { PRAGMA au
9460: 78 2e 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63  x.integrity_chec
9470: 6b 3b 20 7d 0a 7d 20 7b 6f 6b 7d 0a 0a 64 62 20  k; }.} {ok}..db 
9480: 63 6c 6f 73 65 0a 66 6f 72 63 65 64 65 6c 65 74  close.forcedelet
9490: 65 20 74 65 73 74 2e 64 62 20 74 65 73 74 2e 64  e test.db test.d
94a0: 62 2d 77 61 6c 20 74 65 73 74 2e 64 62 2d 6a 6f  b-wal test.db-jo
94b0: 75 72 6e 61 6c 0a 73 71 6c 69 74 65 33 20 64 62  urnal.sqlite3 db
94c0: 20 74 65 73 74 2e 64 62 0a 73 71 6c 69 74 65 33   test.db.sqlite3
94d0: 20 64 62 32 20 74 65 73 74 2e 64 62 0a 64 6f 5f   db2 test.db.do_
94e0: 74 65 73 74 20 32 33 2e 31 20 7b 0a 20 20 64 62  test 23.1 {.  db
94f0: 20 65 76 61 6c 20 7b 0a 20 20 20 20 43 52 45 41   eval {.    CREA
9500: 54 45 20 54 41 42 4c 45 20 74 31 28 61 20 49 4e  TE TABLE t1(a IN
9510: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
9520: 59 2c 62 2c 63 2c 64 29 3b 0a 20 20 20 20 43 52  Y,b,c,d);.    CR
9530: 45 41 54 45 20 49 4e 44 45 58 20 69 31 20 4f 4e  EATE INDEX i1 ON
9540: 20 74 31 28 62 2c 63 29 3b 0a 20 20 20 20 43 52   t1(b,c);.    CR
9550: 45 41 54 45 20 49 4e 44 45 58 20 69 32 20 4f 4e  EATE INDEX i2 ON
9560: 20 74 31 28 63 2c 64 29 3b 0a 20 20 20 20 43 52   t1(c,d);.    CR
9570: 45 41 54 45 20 54 41 42 4c 45 20 74 32 28 78 20  EATE TABLE t2(x 
9580: 49 4e 54 45 47 45 52 20 52 45 46 45 52 45 4e 43  INTEGER REFERENC
9590: 45 53 20 74 31 29 3b 0a 20 20 7d 0a 20 20 64 62  ES t1);.  }.  db
95a0: 32 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 6e  2 eval {SELECT n
95b0: 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  ame FROM sqlite_
95c0: 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 31 20 69 31  master}.} {t1 i1
95d0: 20 69 32 20 74 32 7d 0a 64 6f 5f 74 65 73 74 20   i2 t2}.do_test 
95e0: 32 33 2e 32 20 7b 0a 20 20 64 62 20 65 76 61 6c  23.2 {.  db eval
95f0: 20 7b 0a 20 20 20 20 44 52 4f 50 20 49 4e 44 45   {.    DROP INDE
9600: 58 20 69 32 3b 0a 20 20 20 20 43 52 45 41 54 45  X i2;.    CREATE
9610: 20 49 4e 44 45 58 20 69 32 20 4f 4e 20 74 31 28   INDEX i2 ON t1(
9620: 63 2c 64 2c 62 29 3b 0a 20 20 7d 0a 20 20 64 62  c,d,b);.  }.  db
9630: 32 20 65 76 61 6c 20 7b 50 52 41 47 4d 41 20 69  2 eval {PRAGMA i
9640: 6e 64 65 78 5f 69 6e 66 6f 28 69 32 29 7d 0a 7d  ndex_info(i2)}.}
9650: 20 7b 30 20 32 20 63 20 31 20 33 20 64 20 32 20   {0 2 c 1 3 d 2 
9660: 31 20 62 7d 0a 64 6f 5f 74 65 73 74 20 32 33 2e  1 b}.do_test 23.
9670: 33 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a  3 {.  db eval {.
9680: 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45 58      CREATE INDEX
9690: 20 69 33 20 4f 4e 20 74 31 28 64 2c 62 2c 63 29   i3 ON t1(d,b,c)
96a0: 3b 0a 20 20 7d 0a 20 20 64 62 32 20 65 76 61 6c  ;.  }.  db2 eval
96b0: 20 7b 50 52 41 47 4d 41 20 69 6e 64 65 78 5f 6c   {PRAGMA index_l
96c0: 69 73 74 28 74 31 29 7d 0a 7d 20 7b 30 20 69 33  ist(t1)}.} {0 i3
96d0: 20 30 20 31 20 69 32 20 30 20 32 20 69 31 20 30   0 1 i2 0 2 i1 0
96e0: 7d 0a 64 6f 5f 74 65 73 74 20 32 33 2e 34 20 7b  }.do_test 23.4 {
96f0: 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a 20 20 20  .  db eval {.   
9700: 20 41 4c 54 45 52 20 54 41 42 4c 45 20 74 31 20   ALTER TABLE t1 
9710: 41 44 44 20 43 4f 4c 55 4d 4e 20 65 3b 0a 20 20  ADD COLUMN e;.  
9720: 7d 0a 20 20 64 62 32 20 65 76 61 6c 20 7b 0a 20  }.  db2 eval {. 
9730: 20 20 20 50 52 41 47 4d 41 20 74 61 62 6c 65 5f     PRAGMA table_
9740: 69 6e 66 6f 28 74 31 29 3b 0a 20 20 7d 0a 7d 20  info(t1);.  }.} 
9750: 7b 2f 34 20 65 20 7b 7d 20 30 20 7b 7d 20 30 2f  {/4 e {} 0 {} 0/
9760: 7d 0a 64 6f 5f 74 65 73 74 20 32 33 2e 35 20 7b  }.do_test 23.5 {
9770: 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a 20 20 20  .  db eval {.   
9780: 20 44 52 4f 50 20 54 41 42 4c 45 20 74 32 3b 0a   DROP TABLE t2;.
9790: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
97a0: 20 74 32 28 78 2c 20 79 20 49 4e 54 45 47 45 52   t2(x, y INTEGER
97b0: 20 52 45 46 45 52 45 4e 43 45 53 20 74 31 29 3b   REFERENCES t1);
97c0: 0a 20 20 7d 0a 20 20 64 62 32 20 65 76 61 6c 20  .  }.  db2 eval 
97d0: 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 66 6f 72  {.    PRAGMA for
97e0: 65 69 67 6e 5f 6b 65 79 5f 6c 69 73 74 28 74 32  eign_key_list(t2
97f0: 29 3b 0a 20 20 7d 0a 7d 20 7b 30 20 30 20 74 31  );.  }.} {0 0 t1
9800: 20 79 20 7b 7d 20 7b 4e 4f 20 41 43 54 49 4f 4e   y {} {NO ACTION
9810: 7d 20 7b 4e 4f 20 41 43 54 49 4f 4e 7d 20 4e 4f  } {NO ACTION} NO
9820: 4e 45 7d 0a 0a 64 61 74 61 62 61 73 65 5f 6e 65  NE}..database_ne
9830: 76 65 72 5f 63 6f 72 72 75 70 74 0a 66 69 6e 69  ver_corrupt.fini
9840: 73 68 5f 74 65 73 74 0a                          sh_test.