/ Hex Artifact Content
Login

Artifact de128f0253ee42a1edf6c80f21813babfb19bd3b:


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 69 64 20 31 20 6d 69 73 73 69 6e  {{rowid 1 missin
1c10: 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d  g from index i2}
1c20: 20 7b 72 6f 77 69 64 20 32 20 6d 69 73 73 69 6e   {rowid 2 missin
1c30: 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d  g from index i2}
1c40: 20 7b 77 72 6f 6e 67 20 23 20 6f 66 20 65 6e 74   {wrong # of ent
1c50: 72 69 65 73 20 69 6e 20 69 6e 64 65 78 20 69 32  ries in index i2
1c60: 7d 7d 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 70  }}.    do_test p
1c70: 72 61 67 6d 61 2d 33 2e 33 20 7b 0a 20 20 20 20  ragma-3.3 {.    
1c80: 20 20 65 78 65 63 73 71 6c 20 7b 50 52 41 47 4d    execsql {PRAGM
1c90: 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63  A integrity_chec
1ca0: 6b 3d 31 7d 0a 20 20 20 20 7d 20 7b 7b 72 6f 77  k=1}.    } {{row
1cb0: 69 64 20 31 20 6d 69 73 73 69 6e 67 20 66 72 6f  id 1 missing fro
1cc0: 6d 20 69 6e 64 65 78 20 69 32 7d 7d 0a 20 20 20  m index i2}}.   
1cd0: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
1ce0: 33 2e 34 20 7b 0a 20 20 20 20 20 20 65 78 65 63  3.4 {.      exec
1cf0: 73 71 6c 20 7b 0a 20 20 20 20 20 20 20 20 41 54  sql {.        AT
1d00: 54 41 43 48 20 44 41 54 41 42 41 53 45 20 27 74  TACH DATABASE 't
1d10: 65 73 74 2e 64 62 27 20 41 53 20 74 32 3b 0a 20  est.db' AS t2;. 
1d20: 20 20 20 20 20 20 20 50 52 41 47 4d 41 20 69 6e         PRAGMA in
1d30: 74 65 67 72 69 74 79 5f 63 68 65 63 6b 0a 20 20  tegrity_check.  
1d40: 20 20 20 20 7d 0a 20 20 20 20 7d 20 7b 7b 72 6f      }.    } {{ro
1d50: 77 69 64 20 31 20 6d 69 73 73 69 6e 67 20 66 72  wid 1 missing fr
1d60: 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b 72 6f  om index i2} {ro
1d70: 77 69 64 20 32 20 6d 69 73 73 69 6e 67 20 66 72  wid 2 missing fr
1d80: 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b 77 72  om index i2} {wr
1d90: 6f 6e 67 20 23 20 6f 66 20 65 6e 74 72 69 65 73  ong # of entries
1da0: 20 69 6e 20 69 6e 64 65 78 20 69 32 7d 20 7b 72   in index i2} {r
1db0: 6f 77 69 64 20 31 20 6d 69 73 73 69 6e 67 20 66  owid 1 missing f
1dc0: 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b 72  rom index i2} {r
1dd0: 6f 77 69 64 20 32 20 6d 69 73 73 69 6e 67 20 66  owid 2 missing f
1de0: 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b 77  rom index i2} {w
1df0: 72 6f 6e 67 20 23 20 6f 66 20 65 6e 74 72 69 65  rong # of entrie
1e00: 73 20 69 6e 20 69 6e 64 65 78 20 69 32 7d 7d 0a  s in index i2}}.
1e10: 20 20 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67      do_test prag
1e20: 6d 61 2d 33 2e 35 20 7b 0a 20 20 20 20 20 20 65  ma-3.5 {.      e
1e30: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 20  xecsql {.       
1e40: 20 50 52 41 47 4d 41 20 69 6e 74 65 67 72 69 74   PRAGMA integrit
1e50: 79 5f 63 68 65 63 6b 3d 34 0a 20 20 20 20 20 20  y_check=4.      
1e60: 7d 0a 20 20 20 20 7d 20 7b 7b 72 6f 77 69 64 20  }.    } {{rowid 
1e70: 31 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69  1 missing from i
1e80: 6e 64 65 78 20 69 32 7d 20 7b 72 6f 77 69 64 20  ndex i2} {rowid 
1e90: 32 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69  2 missing from i
1ea0: 6e 64 65 78 20 69 32 7d 20 7b 77 72 6f 6e 67 20  ndex i2} {wrong 
1eb0: 23 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20  # of entries in 
1ec0: 69 6e 64 65 78 20 69 32 7d 20 7b 72 6f 77 69 64  index i2} {rowid
1ed0: 20 31 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20   1 missing from 
1ee0: 69 6e 64 65 78 20 69 32 7d 7d 0a 20 20 20 20 64  index i2}}.    d
1ef0: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 33 2e  o_test pragma-3.
1f00: 36 20 7b 0a 20 20 20 20 20 20 65 78 65 63 73 71  6 {.      execsq
1f10: 6c 20 7b 0a 20 20 20 20 20 20 20 20 50 52 41 47  l {.        PRAG
1f20: 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65  MA integrity_che
1f30: 63 6b 3d 78 79 7a 0a 20 20 20 20 20 20 7d 0a 20  ck=xyz.      }. 
1f40: 20 20 20 7d 20 7b 7b 72 6f 77 69 64 20 31 20 6d     } {{rowid 1 m
1f50: 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65  issing from inde
1f60: 78 20 69 32 7d 20 7b 72 6f 77 69 64 20 32 20 6d  x i2} {rowid 2 m
1f70: 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65  issing from inde
1f80: 78 20 69 32 7d 20 7b 77 72 6f 6e 67 20 23 20 6f  x i2} {wrong # o
1f90: 66 20 65 6e 74 72 69 65 73 20 69 6e 20 69 6e 64  f entries in ind
1fa0: 65 78 20 69 32 7d 20 7b 72 6f 77 69 64 20 31 20  ex i2} {rowid 1 
1fb0: 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64  missing from ind
1fc0: 65 78 20 69 32 7d 20 7b 72 6f 77 69 64 20 32 20  ex i2} {rowid 2 
1fd0: 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64  missing from ind
1fe0: 65 78 20 69 32 7d 20 7b 77 72 6f 6e 67 20 23 20  ex i2} {wrong # 
1ff0: 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 69 6e  of entries in in
2000: 64 65 78 20 69 32 7d 7d 0a 20 20 20 20 64 6f 5f  dex i2}}.    do_
2010: 74 65 73 74 20 70 72 61 67 6d 61 2d 33 2e 37 20  test pragma-3.7 
2020: 7b 0a 20 20 20 20 20 20 65 78 65 63 73 71 6c 20  {.      execsql 
2030: 7b 0a 20 20 20 20 20 20 20 20 50 52 41 47 4d 41  {.        PRAGMA
2040: 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b   integrity_check
2050: 3d 30 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  =0.      }.    }
2060: 20 7b 7b 72 6f 77 69 64 20 31 20 6d 69 73 73 69   {{rowid 1 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 72 6f 77 69 64 20 32 20 6d 69 73 73 69  } {rowid 2 missi
2090: 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32  ng from index i2
20a0: 7d 20 7b 77 72 6f 6e 67 20 23 20 6f 66 20 65 6e  } {wrong # of en
20b0: 74 72 69 65 73 20 69 6e 20 69 6e 64 65 78 20 69  tries in index i
20c0: 32 7d 20 7b 72 6f 77 69 64 20 31 20 6d 69 73 73  2} {rowid 1 miss
20d0: 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69  ing from index i
20e0: 32 7d 20 7b 72 6f 77 69 64 20 32 20 6d 69 73 73  2} {rowid 2 miss
20f0: 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69  ing from index i
2100: 32 7d 20 7b 77 72 6f 6e 67 20 23 20 6f 66 20 65  2} {wrong # of e
2110: 6e 74 72 69 65 73 20 69 6e 20 69 6e 64 65 78 20  ntries in index 
2120: 69 32 7d 7d 0a 20 20 0a 20 20 20 20 23 20 41 64  i2}}.  .    # Ad
2130: 64 20 61 64 64 69 74 69 6f 6e 61 6c 20 63 6f 72  d additional cor
2140: 72 75 70 74 69 6f 6e 20 62 79 20 61 70 70 65 6e  ruption by appen
2150: 64 69 6e 67 20 75 6e 75 73 65 64 20 70 61 67 65  ding unused page
2160: 73 20 74 6f 20 74 68 65 20 65 6e 64 20 6f 66 0a  s to the end of.
2170: 20 20 20 20 23 20 74 68 65 20 64 61 74 61 62 61      # the databa
2180: 73 65 20 66 69 6c 65 20 74 65 73 74 65 72 72 2e  se file testerr.
2190: 64 62 0a 20 20 20 20 23 0a 20 20 20 20 64 6f 5f  db.    #.    do_
21a0: 74 65 73 74 20 70 72 61 67 6d 61 2d 33 2e 38 20  test pragma-3.8 
21b0: 7b 0a 20 20 20 20 20 20 65 78 65 63 73 71 6c 20  {.      execsql 
21c0: 7b 44 45 54 41 43 48 20 74 32 7d 0a 20 20 20 20  {DETACH t2}.    
21d0: 20 20 66 6f 72 63 65 64 65 6c 65 74 65 20 74 65    forcedelete te
21e0: 73 74 65 72 72 2e 64 62 20 74 65 73 74 65 72 72  sterr.db testerr
21f0: 2e 64 62 2d 6a 6f 75 72 6e 61 6c 0a 20 20 20 20  .db-journal.    
2200: 20 20 73 65 74 20 6f 75 74 20 5b 6f 70 65 6e 20    set out [open 
2210: 74 65 73 74 65 72 72 2e 64 62 20 77 5d 0a 20 20  testerr.db w].  
2220: 20 20 20 20 66 63 6f 6e 66 69 67 75 72 65 20 24      fconfigure $
2230: 6f 75 74 20 2d 74 72 61 6e 73 6c 61 74 69 6f 6e  out -translation
2240: 20 62 69 6e 61 72 79 0a 20 20 20 20 20 20 73 65   binary.      se
2250: 74 20 69 6e 20 5b 6f 70 65 6e 20 74 65 73 74 2e  t in [open test.
2260: 64 62 20 72 5d 0a 20 20 20 20 20 20 66 63 6f 6e  db r].      fcon
2270: 66 69 67 75 72 65 20 24 69 6e 20 2d 74 72 61 6e  figure $in -tran
2280: 73 6c 61 74 69 6f 6e 20 62 69 6e 61 72 79 0a 20  slation binary. 
2290: 20 20 20 20 20 70 75 74 73 20 2d 6e 6f 6e 65 77       puts -nonew
22a0: 6c 69 6e 65 20 24 6f 75 74 20 5b 72 65 61 64 20  line $out [read 
22b0: 24 69 6e 5d 0a 20 20 20 20 20 20 73 65 65 6b 20  $in].      seek 
22c0: 24 69 6e 20 30 0a 20 20 20 20 20 20 70 75 74 73  $in 0.      puts
22d0: 20 2d 6e 6f 6e 65 77 6c 69 6e 65 20 24 6f 75 74   -nonewline $out
22e0: 20 5b 72 65 61 64 20 24 69 6e 5d 0a 20 20 20 20   [read $in].    
22f0: 20 20 63 6c 6f 73 65 20 24 69 6e 0a 20 20 20 20    close $in.    
2300: 20 20 63 6c 6f 73 65 20 24 6f 75 74 0a 20 20 20    close $out.   
2310: 20 20 20 68 65 78 69 6f 5f 77 72 69 74 65 20 74     hexio_write t
2320: 65 73 74 65 72 72 2e 64 62 20 32 38 20 30 30 30  esterr.db 28 000
2330: 30 30 30 30 30 0a 20 20 20 20 20 20 65 78 65 63  00000.      exec
2340: 73 71 6c 20 7b 52 45 49 4e 44 45 58 20 74 32 7d  sql {REINDEX t2}
2350: 0a 20 20 20 20 20 20 65 78 65 63 73 71 6c 20 7b  .      execsql {
2360: 50 52 41 47 4d 41 20 69 6e 74 65 67 72 69 74 79  PRAGMA integrity
2370: 5f 63 68 65 63 6b 7d 0a 20 20 20 20 7d 20 7b 6f  _check}.    } {o
2380: 6b 7d 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 70  k}.    do_test p
2390: 72 61 67 6d 61 2d 33 2e 38 2e 31 20 7b 0a 20 20  ragma-3.8.1 {.  
23a0: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 50 52 41      execsql {PRA
23b0: 47 4d 41 20 71 75 69 63 6b 5f 63 68 65 63 6b 7d  GMA quick_check}
23c0: 0a 20 20 20 20 7d 20 7b 6f 6b 7d 0a 20 20 20 20  .    } {ok}.    
23d0: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 33  do_test pragma-3
23e0: 2e 38 2e 32 20 7b 0a 20 20 20 20 20 20 65 78 65  .8.2 {.      exe
23f0: 63 73 71 6c 20 7b 50 52 41 47 4d 41 20 51 55 49  csql {PRAGMA QUI
2400: 43 4b 5f 43 48 45 43 4b 7d 0a 20 20 20 20 7d 20  CK_CHECK}.    } 
2410: 7b 6f 6b 7d 0a 20 20 20 20 64 6f 5f 74 65 73 74  {ok}.    do_test
2420: 20 70 72 61 67 6d 61 2d 33 2e 39 20 7b 0a 20 20   pragma-3.9 {.  
2430: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20      execsql {.  
2440: 20 20 20 20 20 20 41 54 54 41 43 48 20 27 74 65        ATTACH 'te
2450: 73 74 65 72 72 2e 64 62 27 20 41 53 20 74 32 3b  sterr.db' AS t2;
2460: 0a 20 20 20 20 20 20 20 20 50 52 41 47 4d 41 20  .        PRAGMA 
2470: 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 0a  integrity_check.
2480: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 20 7b 7b        }.    } {{
2490: 2a 2a 2a 20 69 6e 20 64 61 74 61 62 61 73 65 20  *** in database 
24a0: 74 32 20 2a 2a 2a 0a 50 61 67 65 20 34 20 69 73  t2 ***.Page 4 is
24b0: 20 6e 65 76 65 72 20 75 73 65 64 0a 50 61 67 65   never used.Page
24c0: 20 35 20 69 73 20 6e 65 76 65 72 20 75 73 65 64   5 is never used
24d0: 0a 50 61 67 65 20 36 20 69 73 20 6e 65 76 65 72  .Page 6 is never
24e0: 20 75 73 65 64 7d 20 7b 72 6f 77 69 64 20 31 20   used} {rowid 1 
24f0: 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64  missing from ind
2500: 65 78 20 69 32 7d 20 7b 72 6f 77 69 64 20 32 20  ex i2} {rowid 2 
2510: 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64  missing from ind
2520: 65 78 20 69 32 7d 20 7b 77 72 6f 6e 67 20 23 20  ex i2} {wrong # 
2530: 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 69 6e  of entries in in
2540: 64 65 78 20 69 32 7d 7d 0a 20 20 20 20 64 6f 5f  dex i2}}.    do_
2550: 74 65 73 74 20 70 72 61 67 6d 61 2d 33 2e 31 30  test pragma-3.10
2560: 20 7b 0a 20 20 20 20 20 20 65 78 65 63 73 71 6c   {.      execsql
2570: 20 7b 0a 20 20 20 20 20 20 20 20 50 52 41 47 4d   {.        PRAGM
2580: 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63  A integrity_chec
2590: 6b 3d 31 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  k=1.      }.    
25a0: 7d 20 7b 7b 2a 2a 2a 20 69 6e 20 64 61 74 61 62  } {{*** in datab
25b0: 61 73 65 20 74 32 20 2a 2a 2a 0a 50 61 67 65 20  ase t2 ***.Page 
25c0: 34 20 69 73 20 6e 65 76 65 72 20 75 73 65 64 7d  4 is never used}
25d0: 7d 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 70 72  }.    do_test pr
25e0: 61 67 6d 61 2d 33 2e 31 31 20 7b 0a 20 20 20 20  agma-3.11 {.    
25f0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
2600: 20 20 20 20 50 52 41 47 4d 41 20 69 6e 74 65 67      PRAGMA integ
2610: 72 69 74 79 5f 63 68 65 63 6b 3d 35 0a 20 20 20  rity_check=5.   
2620: 20 20 20 7d 0a 20 20 20 20 7d 20 7b 7b 2a 2a 2a     }.    } {{***
2630: 20 69 6e 20 64 61 74 61 62 61 73 65 20 74 32 20   in database t2 
2640: 2a 2a 2a 0a 50 61 67 65 20 34 20 69 73 20 6e 65  ***.Page 4 is ne
2650: 76 65 72 20 75 73 65 64 0a 50 61 67 65 20 35 20  ver used.Page 5 
2660: 69 73 20 6e 65 76 65 72 20 75 73 65 64 0a 50 61  is never used.Pa
2670: 67 65 20 36 20 69 73 20 6e 65 76 65 72 20 75 73  ge 6 is never us
2680: 65 64 7d 20 7b 72 6f 77 69 64 20 31 20 6d 69 73  ed} {rowid 1 mis
2690: 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20  sing from index 
26a0: 69 32 7d 20 7b 72 6f 77 69 64 20 32 20 6d 69 73  i2} {rowid 2 mis
26b0: 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20  sing from index 
26c0: 69 32 7d 7d 0a 20 20 20 20 64 6f 5f 74 65 73 74  i2}}.    do_test
26d0: 20 70 72 61 67 6d 61 2d 33 2e 31 32 20 7b 0a 20   pragma-3.12 {. 
26e0: 20 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20       execsql {. 
26f0: 20 20 20 20 20 20 20 50 52 41 47 4d 41 20 69 6e         PRAGMA in
2700: 74 65 67 72 69 74 79 5f 63 68 65 63 6b 3d 34 0a  tegrity_check=4.
2710: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 20 7b 7b        }.    } {{
2720: 2a 2a 2a 20 69 6e 20 64 61 74 61 62 61 73 65 20  *** in database 
2730: 74 32 20 2a 2a 2a 0a 50 61 67 65 20 34 20 69 73  t2 ***.Page 4 is
2740: 20 6e 65 76 65 72 20 75 73 65 64 0a 50 61 67 65   never used.Page
2750: 20 35 20 69 73 20 6e 65 76 65 72 20 75 73 65 64   5 is never used
2760: 0a 50 61 67 65 20 36 20 69 73 20 6e 65 76 65 72  .Page 6 is never
2770: 20 75 73 65 64 7d 20 7b 72 6f 77 69 64 20 31 20   used} {rowid 1 
2780: 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64  missing from ind
2790: 65 78 20 69 32 7d 7d 0a 20 20 20 20 64 6f 5f 74  ex i2}}.    do_t
27a0: 65 73 74 20 70 72 61 67 6d 61 2d 33 2e 31 33 20  est pragma-3.13 
27b0: 7b 0a 20 20 20 20 20 20 65 78 65 63 73 71 6c 20  {.      execsql 
27c0: 7b 0a 20 20 20 20 20 20 20 20 50 52 41 47 4d 41  {.        PRAGMA
27d0: 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b   integrity_check
27e0: 3d 33 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  =3.      }.    }
27f0: 20 7b 7b 2a 2a 2a 20 69 6e 20 64 61 74 61 62 61   {{*** in databa
2800: 73 65 20 74 32 20 2a 2a 2a 0a 50 61 67 65 20 34  se t2 ***.Page 4
2810: 20 69 73 20 6e 65 76 65 72 20 75 73 65 64 0a 50   is never used.P
2820: 61 67 65 20 35 20 69 73 20 6e 65 76 65 72 20 75  age 5 is never u
2830: 73 65 64 0a 50 61 67 65 20 36 20 69 73 20 6e 65  sed.Page 6 is ne
2840: 76 65 72 20 75 73 65 64 7d 7d 0a 20 20 20 20 64  ver used}}.    d
2850: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 33 2e  o_test pragma-3.
2860: 31 34 20 7b 0a 20 20 20 20 20 20 65 78 65 63 73  14 {.      execs
2870: 71 6c 20 7b 0a 20 20 20 20 20 20 20 20 50 52 41  ql {.        PRA
2880: 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68  GMA integrity_ch
2890: 65 63 6b 28 32 29 0a 20 20 20 20 20 20 7d 0a 20  eck(2).      }. 
28a0: 20 20 20 7d 20 7b 7b 2a 2a 2a 20 69 6e 20 64 61     } {{*** in da
28b0: 74 61 62 61 73 65 20 74 32 20 2a 2a 2a 0a 50 61  tabase t2 ***.Pa
28c0: 67 65 20 34 20 69 73 20 6e 65 76 65 72 20 75 73  ge 4 is never us
28d0: 65 64 0a 50 61 67 65 20 35 20 69 73 20 6e 65 76  ed.Page 5 is nev
28e0: 65 72 20 75 73 65 64 7d 7d 0a 20 20 20 20 64 6f  er used}}.    do
28f0: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 33 2e 31  _test pragma-3.1
2900: 35 20 7b 0a 20 20 20 20 20 20 65 78 65 63 73 71  5 {.      execsq
2910: 6c 20 7b 0a 20 20 20 20 20 20 20 20 41 54 54 41  l {.        ATTA
2920: 43 48 20 27 74 65 73 74 65 72 72 2e 64 62 27 20  CH 'testerr.db' 
2930: 41 53 20 74 33 3b 0a 20 20 20 20 20 20 20 20 50  AS t3;.        P
2940: 52 41 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f  RAGMA integrity_
2950: 63 68 65 63 6b 0a 20 20 20 20 20 20 7d 0a 20 20  check.      }.  
2960: 20 20 7d 20 7b 7b 2a 2a 2a 20 69 6e 20 64 61 74    } {{*** in dat
2970: 61 62 61 73 65 20 74 32 20 2a 2a 2a 0a 50 61 67  abase t2 ***.Pag
2980: 65 20 34 20 69 73 20 6e 65 76 65 72 20 75 73 65  e 4 is never use
2990: 64 0a 50 61 67 65 20 35 20 69 73 20 6e 65 76 65  d.Page 5 is neve
29a0: 72 20 75 73 65 64 0a 50 61 67 65 20 36 20 69 73  r used.Page 6 is
29b0: 20 6e 65 76 65 72 20 75 73 65 64 7d 20 7b 72 6f   never used} {ro
29c0: 77 69 64 20 31 20 6d 69 73 73 69 6e 67 20 66 72  wid 1 missing fr
29d0: 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b 72 6f  om index i2} {ro
29e0: 77 69 64 20 32 20 6d 69 73 73 69 6e 67 20 66 72  wid 2 missing fr
29f0: 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b 77 72  om index i2} {wr
2a00: 6f 6e 67 20 23 20 6f 66 20 65 6e 74 72 69 65 73  ong # of entries
2a10: 20 69 6e 20 69 6e 64 65 78 20 69 32 7d 20 7b 2a   in index i2} {*
2a20: 2a 2a 20 69 6e 20 64 61 74 61 62 61 73 65 20 74  ** in database t
2a30: 33 20 2a 2a 2a 0a 50 61 67 65 20 34 20 69 73 20  3 ***.Page 4 is 
2a40: 6e 65 76 65 72 20 75 73 65 64 0a 50 61 67 65 20  never used.Page 
2a50: 35 20 69 73 20 6e 65 76 65 72 20 75 73 65 64 0a  5 is never used.
2a60: 50 61 67 65 20 36 20 69 73 20 6e 65 76 65 72 20  Page 6 is never 
2a70: 75 73 65 64 7d 20 7b 72 6f 77 69 64 20 31 20 6d  used} {rowid 1 m
2a80: 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65  issing from inde
2a90: 78 20 69 32 7d 20 7b 72 6f 77 69 64 20 32 20 6d  x i2} {rowid 2 m
2aa0: 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65  issing from inde
2ab0: 78 20 69 32 7d 20 7b 77 72 6f 6e 67 20 23 20 6f  x i2} {wrong # o
2ac0: 66 20 65 6e 74 72 69 65 73 20 69 6e 20 69 6e 64  f entries in ind
2ad0: 65 78 20 69 32 7d 7d 0a 20 20 20 20 64 6f 5f 74  ex i2}}.    do_t
2ae0: 65 73 74 20 70 72 61 67 6d 61 2d 33 2e 31 36 20  est pragma-3.16 
2af0: 7b 0a 20 20 20 20 20 20 65 78 65 63 73 71 6c 20  {.      execsql 
2b00: 7b 0a 20 20 20 20 20 20 20 20 50 52 41 47 4d 41  {.        PRAGMA
2b10: 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b   integrity_check
2b20: 28 31 30 29 0a 20 20 20 20 20 20 7d 0a 20 20 20  (10).      }.   
2b30: 20 7d 20 7b 7b 2a 2a 2a 20 69 6e 20 64 61 74 61   } {{*** in data
2b40: 62 61 73 65 20 74 32 20 2a 2a 2a 0a 50 61 67 65  base t2 ***.Page
2b50: 20 34 20 69 73 20 6e 65 76 65 72 20 75 73 65 64   4 is never used
2b60: 0a 50 61 67 65 20 35 20 69 73 20 6e 65 76 65 72  .Page 5 is never
2b70: 20 75 73 65 64 0a 50 61 67 65 20 36 20 69 73 20   used.Page 6 is 
2b80: 6e 65 76 65 72 20 75 73 65 64 7d 20 7b 72 6f 77  never used} {row
2b90: 69 64 20 31 20 6d 69 73 73 69 6e 67 20 66 72 6f  id 1 missing fro
2ba0: 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b 72 6f 77  m index i2} {row
2bb0: 69 64 20 32 20 6d 69 73 73 69 6e 67 20 66 72 6f  id 2 missing fro
2bc0: 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b 77 72 6f  m index i2} {wro
2bd0: 6e 67 20 23 20 6f 66 20 65 6e 74 72 69 65 73 20  ng # of entries 
2be0: 69 6e 20 69 6e 64 65 78 20 69 32 7d 20 7b 2a 2a  in index i2} {**
2bf0: 2a 20 69 6e 20 64 61 74 61 62 61 73 65 20 74 33  * in database t3
2c00: 20 2a 2a 2a 0a 50 61 67 65 20 34 20 69 73 20 6e   ***.Page 4 is n
2c10: 65 76 65 72 20 75 73 65 64 0a 50 61 67 65 20 35  ever used.Page 5
2c20: 20 69 73 20 6e 65 76 65 72 20 75 73 65 64 0a 50   is never used.P
2c30: 61 67 65 20 36 20 69 73 20 6e 65 76 65 72 20 75  age 6 is never u
2c40: 73 65 64 7d 20 7b 72 6f 77 69 64 20 31 20 6d 69  sed} {rowid 1 mi
2c50: 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78  ssing from index
2c60: 20 69 32 7d 7d 0a 20 20 20 20 64 6f 5f 74 65 73   i2}}.    do_tes
2c70: 74 20 70 72 61 67 6d 61 2d 33 2e 31 37 20 7b 0a  t pragma-3.17 {.
2c80: 20 20 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a        execsql {.
2c90: 20 20 20 20 20 20 20 20 50 52 41 47 4d 41 20 69          PRAGMA i
2ca0: 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 3d 38  ntegrity_check=8
2cb0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 20 7b  .      }.    } {
2cc0: 7b 2a 2a 2a 20 69 6e 20 64 61 74 61 62 61 73 65  {*** in database
2cd0: 20 74 32 20 2a 2a 2a 0a 50 61 67 65 20 34 20 69   t2 ***.Page 4 i
2ce0: 73 20 6e 65 76 65 72 20 75 73 65 64 0a 50 61 67  s never used.Pag
2cf0: 65 20 35 20 69 73 20 6e 65 76 65 72 20 75 73 65  e 5 is never use
2d00: 64 0a 50 61 67 65 20 36 20 69 73 20 6e 65 76 65  d.Page 6 is neve
2d10: 72 20 75 73 65 64 7d 20 7b 72 6f 77 69 64 20 31  r used} {rowid 1
2d20: 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e   missing from in
2d30: 64 65 78 20 69 32 7d 20 7b 72 6f 77 69 64 20 32  dex i2} {rowid 2
2d40: 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e   missing from in
2d50: 64 65 78 20 69 32 7d 20 7b 77 72 6f 6e 67 20 23  dex i2} {wrong #
2d60: 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 69   of entries in i
2d70: 6e 64 65 78 20 69 32 7d 20 7b 2a 2a 2a 20 69 6e  ndex i2} {*** in
2d80: 20 64 61 74 61 62 61 73 65 20 74 33 20 2a 2a 2a   database t3 ***
2d90: 0a 50 61 67 65 20 34 20 69 73 20 6e 65 76 65 72  .Page 4 is never
2da0: 20 75 73 65 64 0a 50 61 67 65 20 35 20 69 73 20   used.Page 5 is 
2db0: 6e 65 76 65 72 20 75 73 65 64 7d 7d 0a 20 20 20  never used}}.   
2dc0: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
2dd0: 33 2e 31 38 20 7b 0a 20 20 20 20 20 20 65 78 65  3.18 {.      exe
2de0: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 20 20 50  csql {.        P
2df0: 52 41 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f  RAGMA integrity_
2e00: 63 68 65 63 6b 3d 34 0a 20 20 20 20 20 20 7d 0a  check=4.      }.
2e10: 20 20 20 20 7d 20 7b 7b 2a 2a 2a 20 69 6e 20 64      } {{*** in d
2e20: 61 74 61 62 61 73 65 20 74 32 20 2a 2a 2a 0a 50  atabase t2 ***.P
2e30: 61 67 65 20 34 20 69 73 20 6e 65 76 65 72 20 75  age 4 is never u
2e40: 73 65 64 0a 50 61 67 65 20 35 20 69 73 20 6e 65  sed.Page 5 is ne
2e50: 76 65 72 20 75 73 65 64 0a 50 61 67 65 20 36 20  ver used.Page 6 
2e60: 69 73 20 6e 65 76 65 72 20 75 73 65 64 7d 20 7b  is never used} {
2e70: 72 6f 77 69 64 20 31 20 6d 69 73 73 69 6e 67 20  rowid 1 missing 
2e80: 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 7d 0a  from index i2}}.
2e90: 20 20 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72    }.  do_test pr
2ea0: 61 67 6d 61 2d 33 2e 31 39 20 7b 0a 20 20 20 20  agma-3.19 {.    
2eb0: 63 61 74 63 68 20 7b 64 62 20 63 6c 6f 73 65 7d  catch {db close}
2ec0: 0a 20 20 20 20 66 6f 72 63 65 64 65 6c 65 74 65  .    forcedelete
2ed0: 20 74 65 73 74 2e 64 62 20 74 65 73 74 2e 64 62   test.db test.db
2ee0: 2d 6a 6f 75 72 6e 61 6c 0a 20 20 20 20 73 71 6c  -journal.    sql
2ef0: 69 74 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a  ite3 db test.db.
2f00: 20 20 20 20 64 62 20 65 76 61 6c 20 7b 50 52 41      db eval {PRA
2f10: 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68  GMA integrity_ch
2f20: 65 63 6b 7d 0a 20 20 7d 20 7b 6f 6b 7d 0a 7d 0a  eck}.  } {ok}.}.
2f30: 23 65 78 69 74 0a 0a 23 20 54 65 73 74 20 6d 6f  #exit..# Test mo
2f40: 64 69 66 79 69 6e 67 20 74 68 65 20 63 61 63 68  difying the cach
2f50: 65 5f 73 69 7a 65 20 6f 66 20 61 6e 20 61 74 74  e_size of an att
2f60: 61 63 68 65 64 20 64 61 74 61 62 61 73 65 2e 0a  ached database..
2f70: 69 66 63 61 70 61 62 6c 65 20 70 61 67 65 72 5f  ifcapable pager_
2f80: 70 72 61 67 6d 61 73 26 26 61 74 74 61 63 68 20  pragmas&&attach 
2f90: 7b 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  {.do_test pragma
2fa0: 2d 34 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c  -4.1 {.  execsql
2fb0: 20 7b 0a 20 20 20 20 41 54 54 41 43 48 20 27 74   {.    ATTACH 't
2fc0: 65 73 74 32 2e 64 62 27 20 41 53 20 61 75 78 3b  est2.db' AS aux;
2fd0: 0a 20 20 20 20 70 72 61 67 6d 61 20 61 75 78 2e  .    pragma aux.
2fe0: 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20  cache_size;.    
2ff0: 70 72 61 67 6d 61 20 61 75 78 2e 64 65 66 61 75  pragma aux.defau
3000: 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20  lt_cache_size;. 
3010: 20 7d 20 0a 7d 20 5b 6c 69 73 74 20 24 44 46 4c   } .} [list $DFL
3020: 54 5f 43 41 43 48 45 5f 53 5a 20 24 44 46 4c 54  T_CACHE_SZ $DFLT
3030: 5f 43 41 43 48 45 5f 53 5a 5d 0a 64 6f 5f 74 65  _CACHE_SZ].do_te
3040: 73 74 20 70 72 61 67 6d 61 2d 34 2e 32 20 7b 0a  st pragma-4.2 {.
3050: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
3060: 70 72 61 67 6d 61 20 61 75 78 2e 63 61 63 68 65  pragma aux.cache
3070: 5f 73 69 7a 65 20 3d 20 35 30 3b 0a 20 20 20 20  _size = 50;.    
3080: 70 72 61 67 6d 61 20 61 75 78 2e 63 61 63 68 65  pragma aux.cache
3090: 5f 73 69 7a 65 3b 0a 20 20 20 20 70 72 61 67 6d  _size;.    pragm
30a0: 61 20 61 75 78 2e 64 65 66 61 75 6c 74 5f 63 61  a aux.default_ca
30b0: 63 68 65 5f 73 69 7a 65 3b 0a 20 20 7d 20 0a 7d  che_size;.  } .}
30c0: 20 5b 6c 69 73 74 20 35 30 20 24 44 46 4c 54 5f   [list 50 $DFLT_
30d0: 43 41 43 48 45 5f 53 5a 5d 0a 64 6f 5f 74 65 73  CACHE_SZ].do_tes
30e0: 74 20 70 72 61 67 6d 61 2d 34 2e 33 20 7b 0a 20  t pragma-4.3 {. 
30f0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 70   execsql {.    p
3100: 72 61 67 6d 61 20 61 75 78 2e 64 65 66 61 75 6c  ragma aux.defaul
3110: 74 5f 63 61 63 68 65 5f 73 69 7a 65 20 3d 20 34  t_cache_size = 4
3120: 35 36 3b 0a 20 20 20 20 70 72 61 67 6d 61 20 61  56;.    pragma a
3130: 75 78 2e 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20  ux.cache_size;. 
3140: 20 20 20 70 72 61 67 6d 61 20 61 75 78 2e 64 65     pragma aux.de
3150: 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65  fault_cache_size
3160: 3b 0a 20 20 7d 20 0a 7d 20 7b 34 35 36 20 34 35  ;.  } .} {456 45
3170: 36 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  6}.do_test pragm
3180: 61 2d 34 2e 34 20 7b 0a 20 20 65 78 65 63 73 71  a-4.4 {.  execsq
3190: 6c 20 7b 0a 20 20 20 20 70 72 61 67 6d 61 20 63  l {.    pragma c
31a0: 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 70  ache_size;.    p
31b0: 72 61 67 6d 61 20 64 65 66 61 75 6c 74 5f 63 61  ragma default_ca
31c0: 63 68 65 5f 73 69 7a 65 3b 0a 20 20 7d 20 0a 7d  che_size;.  } .}
31d0: 20 5b 6c 69 73 74 20 24 44 46 4c 54 5f 43 41 43   [list $DFLT_CAC
31e0: 48 45 5f 53 5a 20 24 44 46 4c 54 5f 43 41 43 48  HE_SZ $DFLT_CACH
31f0: 45 5f 53 5a 5d 0a 64 6f 5f 74 65 73 74 20 70 72  E_SZ].do_test pr
3200: 61 67 6d 61 2d 34 2e 35 20 7b 0a 20 20 65 78 65  agma-4.5 {.  exe
3210: 63 73 71 6c 20 7b 0a 20 20 20 20 44 45 54 41 43  csql {.    DETAC
3220: 48 20 61 75 78 3b 0a 20 20 20 20 41 54 54 41 43  H aux;.    ATTAC
3230: 48 20 27 74 65 73 74 33 2e 64 62 27 20 41 53 20  H 'test3.db' AS 
3240: 61 75 78 3b 0a 20 20 20 20 70 72 61 67 6d 61 20  aux;.    pragma 
3250: 61 75 78 2e 63 61 63 68 65 5f 73 69 7a 65 3b 0a  aux.cache_size;.
3260: 20 20 20 20 70 72 61 67 6d 61 20 61 75 78 2e 64      pragma aux.d
3270: 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a  efault_cache_siz
3280: 65 3b 0a 20 20 7d 20 0a 7d 20 5b 6c 69 73 74 20  e;.  } .} [list 
3290: 24 44 46 4c 54 5f 43 41 43 48 45 5f 53 5a 20 24  $DFLT_CACHE_SZ $
32a0: 44 46 4c 54 5f 43 41 43 48 45 5f 53 5a 5d 0a 64  DFLT_CACHE_SZ].d
32b0: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 34 2e  o_test pragma-4.
32c0: 36 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  6 {.  execsql {.
32d0: 20 20 20 20 44 45 54 41 43 48 20 61 75 78 3b 0a      DETACH aux;.
32e0: 20 20 20 20 41 54 54 41 43 48 20 27 74 65 73 74      ATTACH 'test
32f0: 32 2e 64 62 27 20 41 53 20 61 75 78 3b 0a 20 20  2.db' AS aux;.  
3300: 20 20 70 72 61 67 6d 61 20 61 75 78 2e 63 61 63    pragma aux.cac
3310: 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 70 72 61  he_size;.    pra
3320: 67 6d 61 20 61 75 78 2e 64 65 66 61 75 6c 74 5f  gma aux.default_
3330: 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 7d 20  cache_size;.  } 
3340: 0a 7d 20 7b 34 35 36 20 34 35 36 7d 0a 7d 20 3b  .} {456 456}.} ;
3350: 23 20 69 66 63 61 70 61 62 6c 65 20 70 61 67 65  # ifcapable page
3360: 72 5f 70 72 61 67 6d 61 73 0a 0a 23 20 54 65 73  r_pragmas..# Tes
3370: 74 20 74 68 61 74 20 6d 6f 64 69 66 79 69 6e 67  t that modifying
3380: 20 74 68 65 20 73 79 6e 63 2d 6c 65 76 65 6c 20   the sync-level 
3390: 69 6e 20 74 68 65 20 6d 69 64 64 6c 65 20 6f 66  in the middle of
33a0: 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69   a transaction i
33b0: 73 0a 23 20 64 69 73 61 6c 6c 6f 77 65 64 2e 0a  s.# disallowed..
33c0: 69 66 63 61 70 61 62 6c 65 20 70 61 67 65 72 5f  ifcapable pager_
33d0: 70 72 61 67 6d 61 73 20 7b 0a 64 6f 5f 74 65 73  pragmas {.do_tes
33e0: 74 20 70 72 61 67 6d 61 2d 35 2e 30 20 7b 0a 20  t pragma-5.0 {. 
33f0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 70   execsql {.    p
3400: 72 61 67 6d 61 20 73 79 6e 63 68 72 6f 6e 6f 75  ragma synchronou
3410: 73 3b 0a 20 20 7d 20 0a 7d 20 7b 32 7d 0a 64 6f  s;.  } .} {2}.do
3420: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 35 2e 31  _test pragma-5.1
3430: 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a   {.  catchsql {.
3440: 20 20 20 20 42 45 47 49 4e 3b 0a 20 20 20 20 70      BEGIN;.    p
3450: 72 61 67 6d 61 20 73 79 6e 63 68 72 6f 6e 6f 75  ragma synchronou
3460: 73 20 3d 20 4f 46 46 3b 0a 20 20 7d 20 0a 7d 20  s = OFF;.  } .} 
3470: 7b 31 20 7b 53 61 66 65 74 79 20 6c 65 76 65 6c  {1 {Safety level
3480: 20 6d 61 79 20 6e 6f 74 20 62 65 20 63 68 61 6e   may not be chan
3490: 67 65 64 20 69 6e 73 69 64 65 20 61 20 74 72 61  ged inside a tra
34a0: 6e 73 61 63 74 69 6f 6e 7d 7d 0a 64 6f 5f 74 65  nsaction}}.do_te
34b0: 73 74 20 70 72 61 67 6d 61 2d 35 2e 32 20 7b 0a  st pragma-5.2 {.
34c0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
34d0: 70 72 61 67 6d 61 20 73 79 6e 63 68 72 6f 6e 6f  pragma synchrono
34e0: 75 73 3b 0a 20 20 7d 20 0a 7d 20 7b 32 7d 0a 63  us;.  } .} {2}.c
34f0: 61 74 63 68 73 71 6c 20 7b 43 4f 4d 4d 49 54 3b  atchsql {COMMIT;
3500: 7d 0a 7d 20 3b 23 20 69 66 63 61 70 61 62 6c 65  }.} ;# ifcapable
3510: 20 70 61 67 65 72 5f 70 72 61 67 6d 61 73 0a 0a   pager_pragmas..
3520: 23 20 54 65 73 74 20 73 63 68 65 6d 61 2d 71 75  # Test schema-qu
3530: 65 72 79 20 70 72 61 67 6d 61 73 0a 23 0a 69 66  ery pragmas.#.if
3540: 63 61 70 61 62 6c 65 20 73 63 68 65 6d 61 5f 70  capable schema_p
3550: 72 61 67 6d 61 73 20 7b 0a 69 66 63 61 70 61 62  ragmas {.ifcapab
3560: 6c 65 20 74 65 6d 70 64 62 26 26 61 74 74 61 63  le tempdb&&attac
3570: 68 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 70 72  h {.  do_test pr
3580: 61 67 6d 61 2d 36 2e 31 20 7b 0a 20 20 20 20 73  agma-6.1 {.    s
3590: 65 74 20 72 65 73 20 7b 7d 0a 20 20 20 20 65 78  et res {}.    ex
35a0: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20  ecsql {SELECT * 
35b0: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70  FROM sqlite_temp
35c0: 5f 6d 61 73 74 65 72 7d 0a 20 20 20 20 66 6f 72  _master}.    for
35d0: 65 61 63 68 20 7b 69 64 78 20 6e 61 6d 65 20 66  each {idx name f
35e0: 69 6c 65 7d 20 5b 65 78 65 63 73 71 6c 20 7b 70  ile} [execsql {p
35f0: 72 61 67 6d 61 20 64 61 74 61 62 61 73 65 5f 6c  ragma database_l
3600: 69 73 74 7d 5d 20 7b 0a 20 20 20 20 20 20 6c 61  ist}] {.      la
3610: 70 70 65 6e 64 20 72 65 73 20 24 69 64 78 20 24  ppend res $idx $
3620: 6e 61 6d 65 0a 20 20 20 20 7d 0a 20 20 20 20 73  name.    }.    s
3630: 65 74 20 72 65 73 0a 20 20 7d 20 7b 30 20 6d 61  et res.  } {0 ma
3640: 69 6e 20 31 20 74 65 6d 70 20 32 20 61 75 78 7d  in 1 temp 2 aux}
3650: 0a 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .}.do_test pragm
3660: 61 2d 36 2e 32 20 7b 0a 20 20 65 78 65 63 73 71  a-6.2 {.  execsq
3670: 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54  l {.    CREATE T
3680: 41 42 4c 45 20 74 32 28 61 2c 62 2c 63 29 3b 0a  ABLE t2(a,b,c);.
3690: 20 20 20 20 70 72 61 67 6d 61 20 74 61 62 6c 65      pragma table
36a0: 5f 69 6e 66 6f 28 74 32 29 0a 20 20 7d 0a 7d 20  _info(t2).  }.} 
36b0: 7b 30 20 61 20 7b 7d 20 30 20 7b 7d 20 30 20 31  {0 a {} 0 {} 0 1
36c0: 20 62 20 7b 7d 20 30 20 7b 7d 20 30 20 32 20 63   b {} 0 {} 0 2 c
36d0: 20 7b 7d 20 30 20 7b 7d 20 30 7d 0a 64 6f 5f 74   {} 0 {} 0}.do_t
36e0: 65 73 74 20 70 72 61 67 6d 61 2d 36 2e 32 2e 31  est pragma-6.2.1
36f0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
3700: 20 20 20 70 72 61 67 6d 61 20 74 61 62 6c 65 5f     pragma table_
3710: 69 6e 66 6f 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64  info;.  }.} {}.d
3720: 62 20 6e 75 6c 6c 76 61 6c 75 65 20 3c 3c 4e 55  b nullvalue <<NU
3730: 4c 4c 3e 3e 0a 64 6f 5f 74 65 73 74 20 70 72 61  LL>>.do_test pra
3740: 67 6d 61 2d 36 2e 32 2e 32 20 7b 0a 20 20 65 78  gma-6.2.2 {.  ex
3750: 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41  ecsql {.    CREA
3760: 54 45 20 54 41 42 4c 45 20 74 35 28 0a 20 20 20  TE TABLE t5(.   
3770: 20 20 20 61 20 54 45 58 54 20 44 45 46 41 55 4c     a TEXT DEFAUL
3780: 54 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 53 54  T CURRENT_TIMEST
3790: 41 4d 50 2c 20 0a 20 20 20 20 20 20 62 20 44 45  AMP, .      b DE
37a0: 46 41 55 4c 54 20 28 35 2b 33 29 2c 0a 20 20 20  FAULT (5+3),.   
37b0: 20 20 20 63 20 54 45 58 54 2c 0a 20 20 20 20 20     c TEXT,.     
37c0: 20 64 20 49 4e 54 45 47 45 52 20 44 45 46 41 55   d INTEGER DEFAU
37d0: 4c 54 20 4e 55 4c 4c 2c 0a 20 20 20 20 20 20 65  LT NULL,.      e
37e0: 20 54 45 58 54 20 44 45 46 41 55 4c 54 20 27 27   TEXT DEFAULT ''
37f0: 2c 0a 20 20 20 20 20 20 55 4e 49 51 55 45 28 62  ,.      UNIQUE(b
3800: 2c 63 2c 64 29 2c 0a 20 20 20 20 20 20 50 52 49  ,c,d),.      PRI
3810: 4d 41 52 59 20 4b 45 59 28 65 2c 62 2c 63 29 0a  MARY KEY(e,b,c).
3820: 20 20 20 20 29 3b 0a 20 20 20 20 50 52 41 47 4d      );.    PRAGM
3830: 41 20 74 61 62 6c 65 5f 69 6e 66 6f 28 74 35 29  A table_info(t5)
3840: 3b 0a 20 20 7d 0a 7d 20 7b 30 20 61 20 54 45 58  ;.  }.} {0 a TEX
3850: 54 20 30 20 43 55 52 52 45 4e 54 5f 54 49 4d 45  T 0 CURRENT_TIME
3860: 53 54 41 4d 50 20 30 20 31 20 62 20 7b 7d 20 30  STAMP 0 1 b {} 0
3870: 20 35 2b 33 20 32 20 32 20 63 20 54 45 58 54 20   5+3 2 2 c TEXT 
3880: 30 20 3c 3c 4e 55 4c 4c 3e 3e 20 33 20 33 20 64  0 <<NULL>> 3 3 d
3890: 20 49 4e 54 45 47 45 52 20 30 20 4e 55 4c 4c 20   INTEGER 0 NULL 
38a0: 30 20 34 20 65 20 54 45 58 54 20 30 20 27 27 20  0 4 e TEXT 0 '' 
38b0: 31 7d 0a 64 62 20 6e 75 6c 6c 76 61 6c 75 65 20  1}.db nullvalue 
38c0: 7b 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  {}.do_test pragm
38d0: 61 2d 36 2e 32 2e 33 20 7b 0a 20 20 65 78 65 63  a-6.2.3 {.  exec
38e0: 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45  sql {.    CREATE
38f0: 20 54 41 42 4c 45 20 74 32 5f 33 28 61 2c 62 20   TABLE t2_3(a,b 
3900: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
3910: 4b 45 59 2c 63 29 3b 0a 20 20 20 20 70 72 61 67  KEY,c);.    prag
3920: 6d 61 20 74 61 62 6c 65 5f 69 6e 66 6f 28 74 32  ma table_info(t2
3930: 5f 33 29 0a 20 20 7d 0a 7d 20 7b 30 20 61 20 7b  _3).  }.} {0 a {
3940: 7d 20 30 20 7b 7d 20 30 20 31 20 62 20 49 4e 54  } 0 {} 0 1 b INT
3950: 45 47 45 52 20 30 20 7b 7d 20 31 20 32 20 63 20  EGER 0 {} 1 2 c 
3960: 7b 7d 20 30 20 7b 7d 20 30 7d 0a 69 66 63 61 70  {} 0 {} 0}.ifcap
3970: 61 62 6c 65 20 7b 66 6f 72 65 69 67 6e 6b 65 79  able {foreignkey
3980: 7d 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 70 72  } {.  do_test pr
3990: 61 67 6d 61 2d 36 2e 33 2e 31 20 7b 0a 20 20 20  agma-6.3.1 {.   
39a0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20   execsql {.     
39b0: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 33   CREATE TABLE t3
39c0: 28 61 20 69 6e 74 20 72 65 66 65 72 65 6e 63 65  (a int reference
39d0: 73 20 74 32 28 62 29 2c 20 62 20 55 4e 49 51 55  s t2(b), b UNIQU
39e0: 45 29 3b 0a 20 20 20 20 20 20 70 72 61 67 6d 61  E);.      pragma
39f0: 20 66 6f 72 65 69 67 6e 5f 6b 65 79 5f 6c 69 73   foreign_key_lis
3a00: 74 28 74 33 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  t(t3);.    }.  }
3a10: 20 7b 30 20 30 20 74 32 20 61 20 62 20 7b 4e 4f   {0 0 t2 a b {NO
3a20: 20 41 43 54 49 4f 4e 7d 20 7b 4e 4f 20 41 43 54   ACTION} {NO ACT
3a30: 49 4f 4e 7d 20 4e 4f 4e 45 7d 0a 20 20 64 6f 5f  ION} NONE}.  do_
3a40: 74 65 73 74 20 70 72 61 67 6d 61 2d 36 2e 33 2e  test pragma-6.3.
3a50: 32 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  2 {.    execsql 
3a60: 7b 0a 20 20 20 20 20 20 70 72 61 67 6d 61 20 66  {.      pragma f
3a70: 6f 72 65 69 67 6e 5f 6b 65 79 5f 6c 69 73 74 3b  oreign_key_list;
3a80: 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 7d 0a 20 20  .    }.  } {}.  
3a90: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 36  do_test pragma-6
3aa0: 2e 33 2e 33 20 7b 0a 20 20 20 20 65 78 65 63 73  .3.3 {.    execs
3ab0: 71 6c 20 7b 0a 20 20 20 20 20 20 70 72 61 67 6d  ql {.      pragm
3ac0: 61 20 66 6f 72 65 69 67 6e 5f 6b 65 79 5f 6c 69  a foreign_key_li
3ad0: 73 74 28 74 33 5f 62 6f 67 75 73 29 3b 0a 20 20  st(t3_bogus);.  
3ae0: 20 20 7d 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f    }.  } {}.  do_
3af0: 74 65 73 74 20 70 72 61 67 6d 61 2d 36 2e 33 2e  test pragma-6.3.
3b00: 34 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  4 {.    execsql 
3b10: 7b 0a 20 20 20 20 20 20 70 72 61 67 6d 61 20 66  {.      pragma f
3b20: 6f 72 65 69 67 6e 5f 6b 65 79 5f 6c 69 73 74 28  oreign_key_list(
3b30: 74 35 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b  t5);.    }.  } {
3b40: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67  }.  do_test prag
3b50: 6d 61 2d 36 2e 34 20 7b 0a 20 20 20 20 65 78 65  ma-6.4 {.    exe
3b60: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 70 72 61  csql {.      pra
3b70: 67 6d 61 20 69 6e 64 65 78 5f 6c 69 73 74 28 74  gma index_list(t
3b80: 33 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 2f  3);.    }.  } {/
3b90: 30 20 73 71 6c 69 74 65 5f 61 75 74 6f 69 6e 64  0 sqlite_autoind
3ba0: 65 78 5f 74 33 5f 31 20 31 20 5c 64 2b 2f 7d 0a  ex_t3_1 1 \d+/}.
3bb0: 7d 0a 69 66 63 61 70 61 62 6c 65 20 7b 21 66 6f  }.ifcapable {!fo
3bc0: 72 65 69 67 6e 6b 65 79 7d 20 7b 0a 20 20 65 78  reignkey} {.  ex
3bd0: 65 63 73 71 6c 20 7b 43 52 45 41 54 45 20 54 41  ecsql {CREATE TA
3be0: 42 4c 45 20 74 33 28 61 2c 62 20 55 4e 49 51 55  BLE t3(a,b UNIQU
3bf0: 45 29 7d 0a 7d 0a 64 6f 5f 74 65 73 74 20 70 72  E)}.}.do_test pr
3c00: 61 67 6d 61 2d 36 2e 35 2e 31 20 7b 0a 20 20 65  agma-6.5.1 {.  e
3c10: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45  xecsql {.    CRE
3c20: 41 54 45 20 49 4e 44 45 58 20 74 33 69 31 20 4f  ATE INDEX t3i1 O
3c30: 4e 20 74 33 28 61 2c 62 29 3b 0a 20 20 20 20 70  N t3(a,b);.    p
3c40: 72 61 67 6d 61 20 69 6e 64 65 78 5f 69 6e 66 6f  ragma index_info
3c50: 28 74 33 69 31 29 3b 0a 20 20 7d 0a 7d 20 7b 30  (t3i1);.  }.} {0
3c60: 20 30 20 61 20 31 20 31 20 62 7d 0a 64 6f 5f 74   0 a 1 1 b}.do_t
3c70: 65 73 74 20 70 72 61 67 6d 61 2d 36 2e 35 2e 32  est pragma-6.5.2
3c80: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
3c90: 20 20 20 70 72 61 67 6d 61 20 69 6e 64 65 78 5f     pragma index_
3ca0: 69 6e 66 6f 28 74 33 69 31 5f 62 6f 67 75 73 29  info(t3i1_bogus)
3cb0: 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a 69 66 63 61  ;.  }.} {}..ifca
3cc0: 70 61 62 6c 65 20 74 65 6d 70 64 62 20 7b 0a 20  pable tempdb {. 
3cd0: 20 23 20 54 65 73 74 20 66 6f 72 20 74 69 63 6b   # Test for tick
3ce0: 65 74 20 23 33 33 32 30 2e 20 57 68 65 6e 20 61  et #3320. When a
3cf0: 20 74 65 6d 70 20 74 61 62 6c 65 20 6f 66 20 74   temp table of t
3d00: 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 65 78 69  he same name exi
3d10: 73 74 73 2c 20 6d 61 6b 65 0a 20 20 23 20 73 75  sts, make.  # su
3d20: 72 65 20 74 68 65 20 73 63 68 65 6d 61 20 6f 66  re the schema of
3d30: 20 74 68 65 20 6d 61 69 6e 20 74 61 62 6c 65 20   the main table 
3d40: 63 61 6e 20 73 74 69 6c 6c 20 62 65 20 71 75 65  can still be que
3d50: 72 69 65 64 20 75 73 69 6e 67 20 0a 20 20 23 20  ried using .  # 
3d60: 22 70 72 61 67 6d 61 20 74 61 62 6c 65 5f 69 6e  "pragma table_in
3d70: 66 6f 22 3a 0a 20 20 64 6f 5f 74 65 73 74 20 70  fo":.  do_test p
3d80: 72 61 67 6d 61 2d 36 2e 36 2e 31 20 7b 0a 20 20  ragma-6.6.1 {.  
3d90: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
3da0: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
3db0: 72 69 61 6c 28 63 6f 6c 5f 6d 61 69 6e 29 3b 0a  rial(col_main);.
3dc0: 20 20 20 20 20 20 43 52 45 41 54 45 20 54 45 4d        CREATE TEM
3dd0: 50 20 54 41 42 4c 45 20 74 72 69 61 6c 28 63 6f  P TABLE trial(co
3de0: 6c 5f 74 65 6d 70 29 3b 0a 20 20 20 20 7d 0a 20  l_temp);.    }. 
3df0: 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20   } {}.  do_test 
3e00: 70 72 61 67 6d 61 2d 36 2e 36 2e 32 20 7b 0a 20  pragma-6.6.2 {. 
3e10: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
3e20: 20 20 20 50 52 41 47 4d 41 20 74 61 62 6c 65 5f     PRAGMA table_
3e30: 69 6e 66 6f 28 74 72 69 61 6c 29 3b 0a 20 20 20  info(trial);.   
3e40: 20 7d 0a 20 20 7d 20 7b 30 20 63 6f 6c 5f 74 65   }.  } {0 col_te
3e50: 6d 70 20 7b 7d 20 30 20 7b 7d 20 30 7d 0a 20 20  mp {} 0 {} 0}.  
3e60: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 36  do_test pragma-6
3e70: 2e 36 2e 33 20 7b 0a 20 20 20 20 65 78 65 63 73  .6.3 {.    execs
3e80: 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d  ql {.      PRAGM
3e90: 41 20 74 65 6d 70 2e 74 61 62 6c 65 5f 69 6e 66  A temp.table_inf
3ea0: 6f 28 74 72 69 61 6c 29 3b 0a 20 20 20 20 7d 0a  o(trial);.    }.
3eb0: 20 20 7d 20 7b 30 20 63 6f 6c 5f 74 65 6d 70 20    } {0 col_temp 
3ec0: 7b 7d 20 30 20 7b 7d 20 30 7d 0a 20 20 64 6f 5f  {} 0 {} 0}.  do_
3ed0: 74 65 73 74 20 70 72 61 67 6d 61 2d 36 2e 36 2e  test pragma-6.6.
3ee0: 34 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  4 {.    execsql 
3ef0: 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 6d  {.      PRAGMA m
3f00: 61 69 6e 2e 74 61 62 6c 65 5f 69 6e 66 6f 28 74  ain.table_info(t
3f10: 72 69 61 6c 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  rial);.    }.  }
3f20: 20 7b 30 20 63 6f 6c 5f 6d 61 69 6e 20 7b 7d 20   {0 col_main {} 
3f30: 30 20 7b 7d 20 30 7d 0a 7d 0a 0a 64 6f 5f 74 65  0 {} 0}.}..do_te
3f40: 73 74 20 70 72 61 67 6d 61 2d 36 2e 37 20 7b 0a  st pragma-6.7 {.
3f50: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
3f60: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 65 73  CREATE TABLE tes
3f70: 74 5f 74 61 62 6c 65 28 0a 20 20 20 20 20 20 6f  t_table(.      o
3f80: 6e 65 20 49 4e 54 20 4e 4f 54 20 4e 55 4c 4c 20  ne INT NOT NULL 
3f90: 44 45 46 41 55 4c 54 20 2d 31 2c 20 0a 20 20 20  DEFAULT -1, .   
3fa0: 20 20 20 74 77 6f 20 74 65 78 74 2c 0a 20 20 20     two text,.   
3fb0: 20 20 20 74 68 72 65 65 20 56 41 52 43 48 41 52     three VARCHAR
3fc0: 28 34 35 2c 20 36 35 29 20 44 45 46 41 55 4c 54  (45, 65) DEFAULT
3fd0: 20 27 61 62 63 64 65 27 2c 0a 20 20 20 20 20 20   'abcde',.      
3fe0: 66 6f 75 72 20 52 45 41 4c 20 44 45 46 41 55 4c  four REAL DEFAUL
3ff0: 54 20 58 27 61 62 63 64 65 66 27 2c 0a 20 20 20  T X'abcdef',.   
4000: 20 20 20 66 69 76 65 20 44 45 46 41 55 4c 54 20     five DEFAULT 
4010: 43 55 52 52 45 4e 54 5f 54 49 4d 45 0a 20 20 20  CURRENT_TIME.   
4020: 20 29 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 74   );.    PRAGMA t
4030: 61 62 6c 65 5f 69 6e 66 6f 28 74 65 73 74 5f 74  able_info(test_t
4040: 61 62 6c 65 29 3b 0a 20 20 7d 0a 7d 20 5b 63 6f  able);.  }.} [co
4050: 6e 63 61 74 20 5c 0a 20 20 7b 30 20 6f 6e 65 20  ncat \.  {0 one 
4060: 49 4e 54 20 31 20 2d 31 20 30 7d 20 5c 0a 20 20  INT 1 -1 0} \.  
4070: 7b 31 20 74 77 6f 20 74 65 78 74 20 30 20 7b 7d  {1 two text 0 {}
4080: 20 30 7d 20 5c 0a 20 20 7b 32 20 74 68 72 65 65   0} \.  {2 three
4090: 20 7b 56 41 52 43 48 41 52 28 34 35 2c 20 36 35   {VARCHAR(45, 65
40a0: 29 7d 20 30 20 27 61 62 63 64 65 27 20 30 7d 20  )} 0 'abcde' 0} 
40b0: 5c 0a 20 20 7b 33 20 66 6f 75 72 20 52 45 41 4c  \.  {3 four REAL
40c0: 20 30 20 58 27 61 62 63 64 65 66 27 20 30 7d 20   0 X'abcdef' 0} 
40d0: 5c 0a 20 20 7b 34 20 66 69 76 65 20 7b 7d 20 30  \.  {4 five {} 0
40e0: 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 20 30 7d   CURRENT_TIME 0}
40f0: 20 5c 0a 5d 0a 7d 20 3b 23 20 69 66 63 61 70 61   \.].} ;# ifcapa
4100: 62 6c 65 20 73 63 68 65 6d 61 5f 70 72 61 67 6d  ble schema_pragm
4110: 61 73 0a 23 20 4d 69 73 63 65 6c 6c 61 6e 65 6f  as.# Miscellaneo
4120: 75 73 20 74 65 73 74 73 0a 23 0a 69 66 63 61 70  us tests.#.ifcap
4130: 61 62 6c 65 20 73 63 68 65 6d 61 5f 70 72 61 67  able schema_prag
4140: 6d 61 73 20 7b 0a 64 6f 5f 74 65 73 74 20 70 72  mas {.do_test pr
4150: 61 67 6d 61 2d 37 2e 31 2e 31 20 7b 0a 20 20 23  agma-7.1.1 {.  #
4160: 20 4d 61 6b 65 20 73 75 72 65 20 61 20 70 72 61   Make sure a pra
4170: 67 6d 61 20 6b 6e 6f 77 73 20 74 6f 20 72 65 61  gma knows to rea
4180: 64 20 74 68 65 20 73 63 68 65 6d 61 20 69 66 20  d the schema if 
4190: 69 74 20 6e 65 65 64 73 20 74 6f 0a 20 20 64 62  it needs to.  db
41a0: 20 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74 65 33   close.  sqlite3
41b0: 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20 65 78   db test.db.  ex
41c0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 70 72 61 67  ecsql {.    prag
41d0: 6d 61 20 69 6e 64 65 78 5f 6c 69 73 74 28 74 33  ma index_list(t3
41e0: 29 3b 0a 20 20 7d 0a 7d 20 7b 2f 30 20 74 33 69  );.  }.} {/0 t3i
41f0: 31 20 30 20 5c 64 2b 20 31 20 73 71 6c 69 74 65  1 0 \d+ 1 sqlite
4200: 5f 61 75 74 6f 69 6e 64 65 78 5f 74 33 5f 31 20  _autoindex_t3_1 
4210: 31 20 5c 64 2b 2f 7d 0a 64 6f 5f 74 65 73 74 20  1 \d+/}.do_test 
4220: 70 72 61 67 6d 61 2d 37 2e 31 2e 32 20 7b 0a 20  pragma-7.1.2 {. 
4230: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 70   execsql {.    p
4240: 72 61 67 6d 61 20 69 6e 64 65 78 5f 6c 69 73 74  ragma index_list
4250: 28 74 33 5f 62 6f 67 75 73 29 3b 0a 20 20 7d 0a  (t3_bogus);.  }.
4260: 7d 20 7b 7d 0a 7d 20 3b 23 20 69 66 63 61 70 61  } {}.} ;# ifcapa
4270: 62 6c 65 20 73 63 68 65 6d 61 5f 70 72 61 67 6d  ble schema_pragm
4280: 61 73 0a 69 66 63 61 70 61 62 6c 65 20 7b 75 74  as.ifcapable {ut
4290: 66 31 36 7d 20 7b 0a 20 20 69 66 20 7b 5b 70 65  f16} {.  if {[pe
42a0: 72 6d 75 74 61 74 69 6f 6e 5d 20 3d 3d 20 22 22  rmutation] == ""
42b0: 7d 20 7b 0a 20 20 20 20 64 6f 5f 74 65 73 74 20  } {.    do_test 
42c0: 70 72 61 67 6d 61 2d 37 2e 32 20 7b 0a 20 20 20  pragma-7.2 {.   
42d0: 20 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 20 20     db close.    
42e0: 20 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73    sqlite3 db tes
42f0: 74 2e 64 62 0a 20 20 20 20 20 20 63 61 74 63 68  t.db.      catch
4300: 73 71 6c 20 7b 0a 20 20 20 20 20 20 20 20 70 72  sql {.        pr
4310: 61 67 6d 61 20 65 6e 63 6f 64 69 6e 67 3d 62 6f  agma encoding=bo
4320: 67 75 73 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  gus;.      }.   
4330: 20 7d 20 7b 31 20 7b 75 6e 73 75 70 70 6f 72 74   } {1 {unsupport
4340: 65 64 20 65 6e 63 6f 64 69 6e 67 3a 20 62 6f 67  ed encoding: bog
4350: 75 73 7d 7d 0a 20 20 7d 0a 7d 0a 69 66 63 61 70  us}}.  }.}.ifcap
4360: 61 62 6c 65 20 74 65 6d 70 64 62 20 7b 0a 20 20  able tempdb {.  
4370: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 37  do_test pragma-7
4380: 2e 33 20 7b 0a 20 20 20 20 64 62 20 63 6c 6f 73  .3 {.    db clos
4390: 65 0a 20 20 20 20 73 71 6c 69 74 65 33 20 64 62  e.    sqlite3 db
43a0: 20 74 65 73 74 2e 64 62 0a 20 20 20 20 65 78 65   test.db.    exe
43b0: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 70 72 61  csql {.      pra
43c0: 67 6d 61 20 6c 6f 63 6b 5f 73 74 61 74 75 73 3b  gma lock_status;
43d0: 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 6d 61 69 6e  .    }.  } {main
43e0: 20 75 6e 6c 6f 63 6b 65 64 20 74 65 6d 70 20 63   unlocked temp c
43f0: 6c 6f 73 65 64 7d 0a 7d 20 65 6c 73 65 20 7b 0a  losed}.} else {.
4400: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
4410: 2d 37 2e 33 20 7b 0a 20 20 20 20 64 62 20 63 6c  -7.3 {.    db cl
4420: 6f 73 65 0a 20 20 20 20 73 71 6c 69 74 65 33 20  ose.    sqlite3 
4430: 64 62 20 74 65 73 74 2e 64 62 0a 20 20 20 20 65  db test.db.    e
4440: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 70  xecsql {.      p
4450: 72 61 67 6d 61 20 6c 6f 63 6b 5f 73 74 61 74 75  ragma lock_statu
4460: 73 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 6d 61  s;.    }.  } {ma
4470: 69 6e 20 75 6e 6c 6f 63 6b 65 64 7d 0a 7d 0a 0a  in unlocked}.}..
4480: 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  .#--------------
4490: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
44a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
44b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
44c0: 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 54 65 73 74 20  --------.# Test 
44d0: 63 61 73 65 73 20 70 72 61 67 6d 61 2d 38 2e 2a  cases pragma-8.*
44e0: 20 74 65 73 74 20 74 68 65 20 22 50 52 41 47 4d   test the "PRAGM
44f0: 41 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e  A schema_version
4500: 22 20 61 6e 64 20 22 50 52 41 47 4d 41 0a 23 20  " and "PRAGMA.# 
4510: 75 73 65 72 5f 76 65 72 73 69 6f 6e 22 20 73 74  user_version" st
4520: 61 74 65 6d 65 6e 74 73 2e 0a 23 0a 23 20 70 72  atements..#.# pr
4530: 61 67 6d 61 2d 38 2e 31 3a 20 50 52 41 47 4d 41  agma-8.1: PRAGMA
4540: 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 0a   schema_version.
4550: 23 20 70 72 61 67 6d 61 2d 38 2e 32 3a 20 50 52  # pragma-8.2: PR
4560: 41 47 4d 41 20 75 73 65 72 5f 76 65 72 73 69 6f  AGMA user_versio
4570: 6e 0a 23 0a 0a 69 66 63 61 70 61 62 6c 65 20 73  n.#..ifcapable s
4580: 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 20 7b 0a  chema_version {.
4590: 0a 23 20 46 69 72 73 74 20 63 68 65 63 6b 20 74  .# First check t
45a0: 68 61 74 20 77 65 20 63 61 6e 20 73 65 74 20 74  hat we can set t
45b0: 68 65 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f  he schema versio
45c0: 6e 20 61 6e 64 20 74 68 65 6e 20 72 65 74 72 69  n and then retri
45d0: 65 76 65 20 74 68 65 0a 23 20 73 61 6d 65 20 76  eve the.# same v
45e0: 61 6c 75 65 2e 0a 64 6f 5f 74 65 73 74 20 70 72  alue..do_test pr
45f0: 61 67 6d 61 2d 38 2e 31 2e 31 20 7b 0a 20 20 65  agma-8.1.1 {.  e
4600: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41  xecsql {.    PRA
4610: 47 4d 41 20 73 63 68 65 6d 61 5f 76 65 72 73 69  GMA schema_versi
4620: 6f 6e 20 3d 20 31 30 35 3b 0a 20 20 7d 0a 7d 20  on = 105;.  }.} 
4630: 7b 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  {}.do_test pragm
4640: 61 2d 38 2e 31 2e 32 20 7b 0a 20 20 65 78 65 63  a-8.1.2 {.  exec
4650: 73 71 6c 32 20 7b 0a 20 20 20 20 50 52 41 47 4d  sql2 {.    PRAGM
4660: 41 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e  A schema_version
4670: 3b 0a 20 20 7d 0a 7d 20 7b 73 63 68 65 6d 61 5f  ;.  }.} {schema_
4680: 76 65 72 73 69 6f 6e 20 31 30 35 7d 0a 64 6f 5f  version 105}.do_
4690: 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e  test pragma-8.1.
46a0: 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  3 {.  execsql {.
46b0: 20 20 20 20 50 52 41 47 4d 41 20 73 63 68 65 6d      PRAGMA schem
46c0: 61 5f 76 65 72 73 69 6f 6e 20 3d 20 31 30 36 3b  a_version = 106;
46d0: 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73  .  }.} {}.do_tes
46e0: 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e 34 20 7b  t pragma-8.1.4 {
46f0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
4700: 20 50 52 41 47 4d 41 20 73 63 68 65 6d 61 5f 76   PRAGMA schema_v
4710: 65 72 73 69 6f 6e 3b 0a 20 20 7d 0a 7d 20 31 30  ersion;.  }.} 10
4720: 36 0a 0a 23 20 43 68 65 63 6b 20 74 68 61 74 20  6..# Check that 
4730: 63 72 65 61 74 69 6e 67 20 61 20 74 61 62 6c 65  creating a table
4740: 20 6d 6f 64 69 66 69 65 73 20 74 68 65 20 73 63   modifies the sc
4750: 68 65 6d 61 2d 76 65 72 73 69 6f 6e 20 28 74 68  hema-version (th
4760: 69 73 20 69 73 20 72 65 61 6c 6c 79 0a 23 20 74  is is really.# t
4770: 6f 20 76 65 72 69 66 79 20 74 68 61 74 20 74 68  o verify that th
4780: 65 20 76 61 6c 75 65 20 62 65 69 6e 67 20 72 65  e value being re
4790: 61 64 20 69 73 20 69 6e 20 66 61 63 74 20 74 68  ad is in fact th
47a0: 65 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e  e schema version
47b0: 29 2e 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  )..do_test pragm
47c0: 61 2d 38 2e 31 2e 35 20 7b 0a 20 20 65 78 65 63  a-8.1.5 {.  exec
47d0: 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45  sql {.    CREATE
47e0: 20 54 41 42 4c 45 20 74 34 28 61 2c 20 62 2c 20   TABLE t4(a, b, 
47f0: 63 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  c);.    INSERT I
4800: 4e 54 4f 20 74 34 20 56 41 4c 55 45 53 28 31 2c  NTO t4 VALUES(1,
4810: 20 32 2c 20 33 29 3b 0a 20 20 20 20 53 45 4c 45   2, 3);.    SELE
4820: 43 54 20 2a 20 46 52 4f 4d 20 74 34 3b 0a 20 20  CT * FROM t4;.  
4830: 7d 0a 7d 20 7b 31 20 32 20 33 7d 0a 64 6f 5f 74  }.} {1 2 3}.do_t
4840: 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e 36  est pragma-8.1.6
4850: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
4860: 20 20 20 50 52 41 47 4d 41 20 73 63 68 65 6d 61     PRAGMA schema
4870: 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 7d 0a 7d 20  _version;.  }.} 
4880: 31 30 37 0a 0a 23 20 4e 6f 77 20 6f 70 65 6e 20  107..# Now open 
4890: 61 20 73 65 63 6f 6e 64 20 63 6f 6e 6e 65 63 74  a second connect
48a0: 69 6f 6e 20 74 6f 20 74 68 65 20 64 61 74 61 62  ion to the datab
48b0: 61 73 65 2e 20 45 6e 73 75 72 65 20 74 68 61 74  ase. Ensure that
48c0: 20 63 68 61 6e 67 69 6e 67 20 74 68 65 0a 23 20   changing the.# 
48d0: 73 63 68 65 6d 61 2d 76 65 72 73 69 6f 6e 20 75  schema-version u
48e0: 73 69 6e 67 20 74 68 65 20 66 69 72 73 74 20 63  sing the first c
48f0: 6f 6e 6e 65 63 74 69 6f 6e 20 66 6f 72 63 65 73  onnection forces
4900: 20 74 68 65 20 73 65 63 6f 6e 64 20 63 6f 6e 6e   the second conn
4910: 65 63 74 69 6f 6e 0a 23 20 74 6f 20 72 65 6c 6f  ection.# to relo
4920: 61 64 20 74 68 65 20 73 63 68 65 6d 61 2e 20 54  ad the schema. T
4930: 68 69 73 20 68 61 73 20 74 6f 20 62 65 20 64 6f  his has to be do
4940: 6e 65 20 75 73 69 6e 67 20 74 68 65 20 43 2d 41  ne using the C-A
4950: 50 49 20 74 65 73 74 20 66 75 6e 63 74 69 6f 6e  PI test function
4960: 73 2c 0a 23 20 62 65 63 61 75 73 65 20 74 68 65  s,.# because the
4970: 20 54 43 4c 20 41 50 49 20 61 63 63 6f 75 6e 74   TCL API account
4980: 73 20 66 6f 72 20 53 43 48 45 4d 41 5f 45 52 52  s for SCHEMA_ERR
4990: 4f 52 20 61 6e 64 20 72 65 74 72 69 65 73 20 74  OR and retries t
49a0: 68 65 20 71 75 65 72 79 2e 0a 64 6f 5f 74 65 73  he query..do_tes
49b0: 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e 37 20 7b  t pragma-8.1.7 {
49c0: 0a 20 20 73 71 6c 69 74 65 33 20 64 62 32 20 74  .  sqlite3 db2 t
49d0: 65 73 74 2e 64 62 3b 20 73 65 74 20 3a 3a 44 42  est.db; set ::DB
49e0: 32 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6e 6e 65  2 [sqlite3_conne
49f0: 63 74 69 6f 6e 5f 70 6f 69 6e 74 65 72 20 64 62  ction_pointer db
4a00: 32 5d 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  2].  execsql {. 
4a10: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
4a20: 20 74 34 3b 0a 20 20 7d 20 64 62 32 0a 7d 20 7b   t4;.  } db2.} {
4a30: 31 20 32 20 33 7d 0a 64 6f 5f 74 65 73 74 20 70  1 2 3}.do_test p
4a40: 72 61 67 6d 61 2d 38 2e 31 2e 38 20 7b 0a 20 20  ragma-8.1.8 {.  
4a50: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52  execsql {.    PR
4a60: 41 47 4d 41 20 73 63 68 65 6d 61 5f 76 65 72 73  AGMA schema_vers
4a70: 69 6f 6e 20 3d 20 31 30 38 3b 0a 20 20 7d 0a 7d  ion = 108;.  }.}
4a80: 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67   {}.do_test prag
4a90: 6d 61 2d 38 2e 31 2e 39 20 7b 0a 20 20 73 65 74  ma-8.1.9 {.  set
4aa0: 20 3a 3a 53 54 4d 54 20 5b 73 71 6c 69 74 65 33   ::STMT [sqlite3
4ab0: 5f 70 72 65 70 61 72 65 20 24 3a 3a 44 42 32 20  _prepare $::DB2 
4ac0: 22 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74  "SELECT * FROM t
4ad0: 34 22 20 2d 31 20 44 55 4d 4d 59 5d 0a 20 20 73  4" -1 DUMMY].  s
4ae0: 71 6c 69 74 65 33 5f 73 74 65 70 20 24 3a 3a 53  qlite3_step $::S
4af0: 54 4d 54 0a 7d 20 53 51 4c 49 54 45 5f 45 52 52  TMT.} SQLITE_ERR
4b00: 4f 52 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  OR.do_test pragm
4b10: 61 2d 38 2e 31 2e 31 30 20 7b 0a 20 20 73 71 6c  a-8.1.10 {.  sql
4b20: 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24 3a  ite3_finalize $:
4b30: 3a 53 54 4d 54 0a 7d 20 53 51 4c 49 54 45 5f 53  :STMT.} SQLITE_S
4b40: 43 48 45 4d 41 0a 0a 23 20 4d 61 6b 65 20 73 75  CHEMA..# Make su
4b50: 72 65 20 74 68 65 20 73 63 68 65 6d 61 2d 76 65  re the schema-ve
4b60: 72 73 69 6f 6e 20 63 61 6e 20 62 65 20 6d 61 6e  rsion can be man
4b70: 69 70 75 6c 61 74 65 64 20 69 6e 20 61 6e 20 61  ipulated in an a
4b80: 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65  ttached database
4b90: 2e 0a 66 6f 72 63 65 64 65 6c 65 74 65 20 74 65  ..forcedelete te
4ba0: 73 74 32 2e 64 62 0a 66 6f 72 63 65 64 65 6c 65  st2.db.forcedele
4bb0: 74 65 20 74 65 73 74 32 2e 64 62 2d 6a 6f 75 72  te test2.db-jour
4bc0: 6e 61 6c 0a 69 66 63 61 70 61 62 6c 65 20 61 74  nal.ifcapable at
4bd0: 74 61 63 68 20 7b 0a 20 20 64 6f 5f 74 65 73 74  tach {.  do_test
4be0: 20 70 72 61 67 6d 61 2d 38 2e 31 2e 31 31 20 7b   pragma-8.1.11 {
4bf0: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
4c00: 20 20 20 20 20 41 54 54 41 43 48 20 27 74 65 73       ATTACH 'tes
4c10: 74 32 2e 64 62 27 20 41 53 20 61 75 78 3b 0a 20  t2.db' AS aux;. 
4c20: 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c       CREATE TABL
4c30: 45 20 61 75 78 2e 74 31 28 61 2c 20 62 2c 20 63  E aux.t1(a, b, c
4c40: 29 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20  );.      PRAGMA 
4c50: 61 75 78 2e 73 63 68 65 6d 61 5f 76 65 72 73 69  aux.schema_versi
4c60: 6f 6e 20 3d 20 32 30 35 3b 0a 20 20 20 20 7d 0a  on = 205;.    }.
4c70: 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65 73 74    } {}.  do_test
4c80: 20 70 72 61 67 6d 61 2d 38 2e 31 2e 31 32 20 7b   pragma-8.1.12 {
4c90: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
4ca0: 20 20 20 20 20 50 52 41 47 4d 41 20 61 75 78 2e       PRAGMA aux.
4cb0: 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 3b 0a  schema_version;.
4cc0: 20 20 20 20 7d 0a 20 20 7d 20 32 30 35 0a 7d 0a      }.  } 205.}.
4cd0: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38  do_test pragma-8
4ce0: 2e 31 2e 31 33 20 7b 0a 20 20 65 78 65 63 73 71  .1.13 {.  execsq
4cf0: 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 73  l {.    PRAGMA s
4d00: 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 3b 0a 20  chema_version;. 
4d10: 20 7d 0a 7d 20 31 30 38 0a 0a 23 20 41 6e 64 20   }.} 108..# And 
4d20: 63 68 65 63 6b 20 74 68 61 74 20 6d 6f 64 69 66  check that modif
4d30: 79 69 6e 67 20 74 68 65 20 73 63 68 65 6d 61 2d  ying the schema-
4d40: 76 65 72 73 69 6f 6e 20 69 6e 20 61 6e 20 61 74  version in an at
4d50: 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 0a  tached database.
4d60: 23 20 66 6f 72 63 65 73 20 74 68 65 20 73 65 63  # forces the sec
4d70: 6f 6e 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 74  ond connection t
4d80: 6f 20 72 65 6c 6f 61 64 20 74 68 65 20 73 63 68  o reload the sch
4d90: 65 6d 61 2e 0a 69 66 63 61 70 61 62 6c 65 20 61  ema..ifcapable a
4da0: 74 74 61 63 68 20 7b 0a 20 20 64 6f 5f 74 65 73  ttach {.  do_tes
4db0: 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e 31 34 20  t pragma-8.1.14 
4dc0: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 20 64 62  {.    sqlite3 db
4dd0: 32 20 74 65 73 74 2e 64 62 3b 20 73 65 74 20 3a  2 test.db; set :
4de0: 3a 44 42 32 20 5b 73 71 6c 69 74 65 33 5f 63 6f  :DB2 [sqlite3_co
4df0: 6e 6e 65 63 74 69 6f 6e 5f 70 6f 69 6e 74 65 72  nnection_pointer
4e00: 20 64 62 32 5d 0a 20 20 20 20 65 78 65 63 73 71   db2].    execsq
4e10: 6c 20 7b 0a 20 20 20 20 20 20 41 54 54 41 43 48  l {.      ATTACH
4e20: 20 27 74 65 73 74 32 2e 64 62 27 20 41 53 20 61   'test2.db' AS a
4e30: 75 78 3b 0a 20 20 20 20 20 20 53 45 4c 45 43 54  ux;.      SELECT
4e40: 20 2a 20 46 52 4f 4d 20 61 75 78 2e 74 31 3b 0a   * FROM aux.t1;.
4e50: 20 20 20 20 7d 20 64 62 32 0a 20 20 7d 20 7b 7d      } db2.  } {}
4e60: 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .  do_test pragm
4e70: 61 2d 38 2e 31 2e 31 35 20 7b 0a 20 20 20 20 65  a-8.1.15 {.    e
4e80: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50  xecsql {.      P
4e90: 52 41 47 4d 41 20 61 75 78 2e 73 63 68 65 6d 61  RAGMA aux.schema
4ea0: 5f 76 65 72 73 69 6f 6e 20 3d 20 32 30 36 3b 0a  _version = 206;.
4eb0: 20 20 20 20 7d 0a 20 20 7d 20 7b 7d 0a 20 20 64      }.  } {}.  d
4ec0: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e  o_test pragma-8.
4ed0: 31 2e 31 36 20 7b 0a 20 20 20 20 73 65 74 20 3a  1.16 {.    set :
4ee0: 3a 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70  :STMT [sqlite3_p
4ef0: 72 65 70 61 72 65 20 24 3a 3a 44 42 32 20 22 53  repare $::DB2 "S
4f00: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 61 75 78  ELECT * FROM aux
4f10: 2e 74 31 22 20 2d 31 20 44 55 4d 4d 59 5d 0a 20  .t1" -1 DUMMY]. 
4f20: 20 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20     sqlite3_step 
4f30: 24 3a 3a 53 54 4d 54 0a 20 20 7d 20 53 51 4c 49  $::STMT.  } SQLI
4f40: 54 45 5f 45 52 52 4f 52 0a 20 20 64 6f 5f 74 65  TE_ERROR.  do_te
4f50: 73 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e 31 37  st pragma-8.1.17
4f60: 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66   {.    sqlite3_f
4f70: 69 6e 61 6c 69 7a 65 20 24 3a 3a 53 54 4d 54 0a  inalize $::STMT.
4f80: 20 20 7d 20 53 51 4c 49 54 45 5f 53 43 48 45 4d    } SQLITE_SCHEM
4f90: 41 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67  A.  do_test prag
4fa0: 6d 61 2d 38 2e 31 2e 31 38 20 7b 0a 20 20 20 20  ma-8.1.18 {.    
4fb0: 64 62 32 20 63 6c 6f 73 65 0a 20 20 7d 20 7b 7d  db2 close.  } {}
4fc0: 0a 7d 0a 0a 23 20 4e 6f 77 20 74 65 73 74 20 74  .}..# Now test t
4fd0: 68 61 74 20 74 68 65 20 75 73 65 72 2d 76 65 72  hat the user-ver
4fe0: 73 69 6f 6e 20 63 61 6e 20 62 65 20 72 65 61 64  sion can be read
4ff0: 20 61 6e 64 20 77 72 69 74 74 65 6e 20 28 61 6e   and written (an
5000: 64 20 74 68 61 74 20 77 65 20 61 72 65 6e 27 74  d that we aren't
5010: 0a 23 20 61 63 63 69 64 65 6e 74 61 6c 6c 79 20  .# accidentally 
5020: 6d 61 6e 69 70 75 6c 61 74 69 6e 67 20 74 68 65  manipulating the
5030: 20 73 63 68 65 6d 61 2d 76 65 72 73 69 6f 6e 20   schema-version 
5040: 69 6e 73 74 65 61 64 29 2e 0a 64 6f 5f 74 65 73  instead)..do_tes
5050: 74 20 70 72 61 67 6d 61 2d 38 2e 32 2e 31 20 7b  t pragma-8.2.1 {
5060: 0a 20 20 65 78 65 63 73 71 6c 32 20 7b 0a 20 20  .  execsql2 {.  
5070: 20 20 50 52 41 47 4d 41 20 75 73 65 72 5f 76 65    PRAGMA user_ve
5080: 72 73 69 6f 6e 3b 0a 20 20 7d 0a 7d 20 7b 75 73  rsion;.  }.} {us
5090: 65 72 5f 76 65 72 73 69 6f 6e 20 30 7d 0a 64 6f  er_version 0}.do
50a0: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 32  _test pragma-8.2
50b0: 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .2 {.  execsql {
50c0: 0a 20 20 20 20 50 52 41 47 4d 41 20 75 73 65 72  .    PRAGMA user
50d0: 5f 76 65 72 73 69 6f 6e 20 3d 20 32 3b 0a 20 20  _version = 2;.  
50e0: 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 70  }.} {}.do_test p
50f0: 72 61 67 6d 61 2d 38 2e 32 2e 33 2e 31 20 7b 0a  ragma-8.2.3.1 {.
5100: 20 20 65 78 65 63 73 71 6c 32 20 7b 0a 20 20 20    execsql2 {.   
5110: 20 50 52 41 47 4d 41 20 75 73 65 72 5f 76 65 72   PRAGMA user_ver
5120: 73 69 6f 6e 3b 0a 20 20 7d 0a 7d 20 7b 75 73 65  sion;.  }.} {use
5130: 72 5f 76 65 72 73 69 6f 6e 20 32 7d 0a 64 6f 5f  r_version 2}.do_
5140: 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 32 2e  test pragma-8.2.
5150: 33 2e 32 20 7b 0a 20 20 64 62 20 63 6c 6f 73 65  3.2 {.  db close
5160: 0a 20 20 73 71 6c 69 74 65 33 20 64 62 20 74 65  .  sqlite3 db te
5170: 73 74 2e 64 62 0a 20 20 65 78 65 63 73 71 6c 20  st.db.  execsql 
5180: 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 75 73 65  {.    PRAGMA use
5190: 72 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 7d 0a 7d  r_version;.  }.}
51a0: 20 7b 32 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61   {2}.do_test pra
51b0: 67 6d 61 2d 38 2e 32 2e 34 2e 31 20 7b 0a 20 20  gma-8.2.4.1 {.  
51c0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52  execsql {.    PR
51d0: 41 47 4d 41 20 73 63 68 65 6d 61 5f 76 65 72 73  AGMA schema_vers
51e0: 69 6f 6e 3b 0a 20 20 7d 0a 7d 20 7b 31 30 38 7d  ion;.  }.} {108}
51f0: 0a 69 66 63 61 70 61 62 6c 65 20 76 61 63 75 75  .ifcapable vacuu
5200: 6d 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 70 72  m {.  do_test pr
5210: 61 67 6d 61 2d 38 2e 32 2e 34 2e 32 20 7b 0a 20  agma-8.2.4.2 {. 
5220: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
5230: 20 20 20 56 41 43 55 55 4d 3b 0a 20 20 20 20 20     VACUUM;.     
5240: 20 50 52 41 47 4d 41 20 75 73 65 72 5f 76 65 72   PRAGMA user_ver
5250: 73 69 6f 6e 3b 0a 20 20 20 20 7d 0a 20 20 7d 20  sion;.    }.  } 
5260: 7b 32 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72  {2}.  do_test pr
5270: 61 67 6d 61 2d 38 2e 32 2e 34 2e 33 20 7b 0a 20  agma-8.2.4.3 {. 
5280: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
5290: 20 20 20 50 52 41 47 4d 41 20 73 63 68 65 6d 61     PRAGMA schema
52a0: 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 20 20 7d 0a  _version;.    }.
52b0: 20 20 7d 20 7b 31 30 39 7d 0a 7d 0a 0a 69 66 63    } {109}.}..ifc
52c0: 61 70 61 62 6c 65 20 61 74 74 61 63 68 20 7b 0a  apable attach {.
52d0: 20 20 64 62 20 65 76 61 6c 20 7b 41 54 54 41 43    db eval {ATTAC
52e0: 48 20 27 74 65 73 74 32 2e 64 62 27 20 41 53 20  H 'test2.db' AS 
52f0: 61 75 78 7d 0a 20 20 0a 20 20 23 20 43 68 65 63  aux}.  .  # Chec
5300: 6b 20 74 68 61 74 20 74 68 65 20 75 73 65 72 2d  k that the user-
5310: 76 65 72 73 69 6f 6e 20 69 6e 20 74 68 65 20 61  version in the a
5320: 75 78 69 6c 61 72 79 20 64 61 74 61 62 61 73 65  uxilary database
5330: 20 63 61 6e 20 62 65 20 6d 61 6e 69 70 75 6c 61   can be manipula
5340: 74 65 64 20 28 0a 20 20 23 20 61 6e 64 20 74 68  ted (.  # and th
5350: 61 74 20 77 65 20 61 72 65 6e 27 74 20 61 63 63  at we aren't acc
5360: 69 64 65 6e 74 61 6c 6c 79 20 6d 61 6e 69 70 75  identally manipu
5370: 6c 61 74 69 6e 67 20 74 68 65 20 73 61 6d 65 20  lating the same 
5380: 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 62 29 2e  in the main db).
5390: 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .  do_test pragm
53a0: 61 2d 38 2e 32 2e 35 20 7b 0a 20 20 20 20 65 78  a-8.2.5 {.    ex
53b0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52  ecsql {.      PR
53c0: 41 47 4d 41 20 61 75 78 2e 75 73 65 72 5f 76 65  AGMA aux.user_ve
53d0: 72 73 69 6f 6e 3b 0a 20 20 20 20 7d 0a 20 20 7d  rsion;.    }.  }
53e0: 20 7b 30 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70   {0}.  do_test p
53f0: 72 61 67 6d 61 2d 38 2e 32 2e 36 20 7b 0a 20 20  ragma-8.2.6 {.  
5400: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
5410: 20 20 50 52 41 47 4d 41 20 61 75 78 2e 75 73 65    PRAGMA aux.use
5420: 72 5f 76 65 72 73 69 6f 6e 20 3d 20 33 3b 0a 20  r_version = 3;. 
5430: 20 20 20 7d 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f     }.  } {}.  do
5440: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 32  _test pragma-8.2
5450: 2e 37 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  .7 {.    execsql
5460: 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20   {.      PRAGMA 
5470: 61 75 78 2e 75 73 65 72 5f 76 65 72 73 69 6f 6e  aux.user_version
5480: 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 33 7d 0a  ;.    }.  } {3}.
5490: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
54a0: 2d 38 2e 32 2e 38 20 7b 0a 20 20 20 20 65 78 65  -8.2.8 {.    exe
54b0: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41  csql {.      PRA
54c0: 47 4d 41 20 6d 61 69 6e 2e 75 73 65 72 5f 76 65  GMA main.user_ve
54d0: 72 73 69 6f 6e 3b 0a 20 20 20 20 7d 0a 20 20 7d  rsion;.    }.  }
54e0: 20 7b 32 7d 0a 20 20 0a 20 20 23 20 4e 6f 77 20   {2}.  .  # Now 
54f0: 63 68 65 63 6b 20 74 68 61 74 20 61 20 52 4f 4c  check that a ROL
5500: 4c 42 41 43 4b 20 72 65 73 65 74 73 20 74 68 65  LBACK resets the
5510: 20 75 73 65 72 2d 76 65 72 73 69 6f 6e 20 69 66   user-version if
5520: 20 69 74 20 68 61 73 20 62 65 65 6e 20 6d 6f 64   it has been mod
5530: 69 66 69 65 64 0a 20 20 23 20 77 69 74 68 69 6e  ified.  # within
5540: 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a   a transaction..
5550: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
5560: 2d 38 2e 32 2e 39 20 7b 0a 20 20 20 20 65 78 65  -8.2.9 {.    exe
5570: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 42 45 47  csql {.      BEG
5580: 49 4e 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41  IN;.      PRAGMA
5590: 20 61 75 78 2e 75 73 65 72 5f 76 65 72 73 69 6f   aux.user_versio
55a0: 6e 20 3d 20 31 30 3b 0a 20 20 20 20 20 20 50 52  n = 10;.      PR
55b0: 41 47 4d 41 20 75 73 65 72 5f 76 65 72 73 69 6f  AGMA user_versio
55c0: 6e 20 3d 20 31 31 3b 0a 20 20 20 20 7d 0a 20 20  n = 11;.    }.  
55d0: 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70  } {}.  do_test p
55e0: 72 61 67 6d 61 2d 38 2e 32 2e 31 30 20 7b 0a 20  ragma-8.2.10 {. 
55f0: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
5600: 20 20 20 50 52 41 47 4d 41 20 61 75 78 2e 75 73     PRAGMA aux.us
5610: 65 72 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 20 20  er_version;.    
5620: 7d 0a 20 20 7d 20 7b 31 30 7d 0a 20 20 64 6f 5f  }.  } {10}.  do_
5630: 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 32 2e  test pragma-8.2.
5640: 31 31 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  11 {.    execsql
5650: 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20   {.      PRAGMA 
5660: 6d 61 69 6e 2e 75 73 65 72 5f 76 65 72 73 69 6f  main.user_versio
5670: 6e 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 31 31  n;.    }.  } {11
5680: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67  }.  do_test prag
5690: 6d 61 2d 38 2e 32 2e 31 32 20 7b 0a 20 20 20 20  ma-8.2.12 {.    
56a0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
56b0: 52 4f 4c 4c 42 41 43 4b 3b 0a 20 20 20 20 20 20  ROLLBACK;.      
56c0: 50 52 41 47 4d 41 20 61 75 78 2e 75 73 65 72 5f  PRAGMA aux.user_
56d0: 76 65 72 73 69 6f 6e 3b 0a 20 20 20 20 7d 0a 20  version;.    }. 
56e0: 20 7d 20 7b 33 7d 0a 20 20 64 6f 5f 74 65 73 74   } {3}.  do_test
56f0: 20 70 72 61 67 6d 61 2d 38 2e 32 2e 31 33 20 7b   pragma-8.2.13 {
5700: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
5710: 20 20 20 20 20 50 52 41 47 4d 41 20 6d 61 69 6e       PRAGMA main
5720: 2e 75 73 65 72 5f 76 65 72 73 69 6f 6e 3b 0a 20  .user_version;. 
5730: 20 20 20 7d 0a 20 20 7d 20 7b 32 7d 0a 7d 0a 0a     }.  } {2}.}..
5740: 23 20 54 72 79 20 61 20 6e 65 67 61 74 69 76 65  # Try a negative
5750: 20 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20 75   value for the u
5760: 73 65 72 2d 76 65 72 73 69 6f 6e 0a 64 6f 5f 74  ser-version.do_t
5770: 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 32 2e 31  est pragma-8.2.1
5780: 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  4 {.  execsql {.
5790: 20 20 20 20 50 52 41 47 4d 41 20 75 73 65 72 5f      PRAGMA user_
57a0: 76 65 72 73 69 6f 6e 20 3d 20 2d 34 35 30 3b 0a  version = -450;.
57b0: 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74    }.} {}.do_test
57c0: 20 70 72 61 67 6d 61 2d 38 2e 32 2e 31 35 20 7b   pragma-8.2.15 {
57d0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
57e0: 20 50 52 41 47 4d 41 20 75 73 65 72 5f 76 65 72   PRAGMA user_ver
57f0: 73 69 6f 6e 3b 0a 20 20 7d 0a 7d 20 7b 2d 34 35  sion;.  }.} {-45
5800: 30 7d 0a 7d 20 3b 20 23 20 69 66 63 61 70 61 62  0}.} ; # ifcapab
5810: 6c 65 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f  le schema_versio
5820: 6e 0a 0a 23 20 43 68 65 63 6b 20 74 6f 20 73 65  n..# Check to se
5830: 65 20 69 66 20 54 45 4d 50 5f 53 54 4f 52 45 20  e if TEMP_STORE 
5840: 69 73 20 6d 65 6d 6f 72 79 20 6f 72 20 64 69 73  is memory or dis
5850: 6b 2e 20 20 52 65 74 75 72 6e 20 73 74 72 69 6e  k.  Return strin
5860: 67 73 0a 23 20 22 6d 65 6d 6f 72 79 22 20 6f 72  gs.# "memory" or
5870: 20 22 64 69 73 6b 22 20 61 73 20 61 70 70 72 6f   "disk" as appro
5880: 70 72 69 61 74 65 2e 0a 23 0a 70 72 6f 63 20 63  priate..#.proc c
5890: 68 65 63 6b 5f 74 65 6d 70 5f 73 74 6f 72 65 20  heck_temp_store 
58a0: 7b 7d 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b  {} {.  db eval {
58b0: 43 52 45 41 54 45 20 54 45 4d 50 20 54 41 42 4c  CREATE TEMP TABL
58c0: 45 20 49 46 20 4e 4f 54 20 45 58 49 53 54 53 20  E IF NOT EXISTS 
58d0: 61 28 62 29 7d 0a 20 20 64 62 20 65 76 61 6c 20  a(b)}.  db eval 
58e0: 7b 50 52 41 47 4d 41 20 64 61 74 61 62 61 73 65  {PRAGMA database
58f0: 5f 6c 69 73 74 7d 20 7b 0a 20 20 20 20 69 66 20  _list} {.    if 
5900: 7b 24 6e 61 6d 65 3d 3d 22 74 65 6d 70 22 7d 20  {$name=="temp"} 
5910: 7b 0a 20 20 20 20 20 20 73 65 74 20 62 74 20 5b  {.      set bt [
5920: 62 74 72 65 65 5f 66 72 6f 6d 5f 64 62 20 64 62  btree_from_db db
5930: 20 31 5d 0a 20 20 20 20 20 20 69 66 20 7b 5b 62   1].      if {[b
5940: 74 72 65 65 5f 69 73 6d 65 6d 64 62 20 24 62 74  tree_ismemdb $bt
5950: 5d 7d 20 7b 0a 20 20 20 20 20 20 20 20 72 65 74  ]} {.        ret
5960: 75 72 6e 20 22 6d 65 6d 6f 72 79 22 0a 20 20 20  urn "memory".   
5970: 20 20 20 7d 0a 20 20 20 20 20 20 72 65 74 75 72     }.      retur
5980: 6e 20 22 64 69 73 6b 22 0a 20 20 20 20 7d 0a 20  n "disk".    }. 
5990: 20 7d 0a 20 20 72 65 74 75 72 6e 20 22 75 6e 6b   }.  return "unk
59a0: 6e 6f 77 6e 22 0a 7d 0a 0a 23 20 41 70 70 6c 69  nown".}..# Appli
59b0: 63 61 74 69 6f 6e 5f 49 44 0a 23 0a 64 6f 5f 74  cation_ID.#.do_t
59c0: 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 33 2e 31  est pragma-8.3.1
59d0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
59e0: 20 20 20 50 52 41 47 4d 41 20 61 70 70 6c 69 63     PRAGMA applic
59f0: 61 74 69 6f 6e 5f 69 64 3b 0a 20 20 7d 0a 7d 20  ation_id;.  }.} 
5a00: 7b 30 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67  {0}.do_test prag
5a10: 6d 61 2d 38 2e 33 2e 32 20 7b 0a 20 20 65 78 65  ma-8.3.2 {.  exe
5a20: 63 73 71 6c 20 7b 50 52 41 47 4d 41 20 41 70 70  csql {PRAGMA App
5a30: 6c 69 63 61 74 69 6f 6e 5f 49 44 28 31 32 33 34  lication_ID(1234
5a40: 35 29 3b 20 50 52 41 47 4d 41 20 61 70 70 6c 69  5); PRAGMA appli
5a50: 63 61 74 69 6f 6e 5f 69 64 3b 7d 0a 7d 20 7b 31  cation_id;}.} {1
5a60: 32 33 34 35 7d 0a 0a 23 20 54 65 73 74 20 74 65  2345}..# Test te
5a70: 6d 70 5f 73 74 6f 72 65 20 61 6e 64 20 74 65 6d  mp_store and tem
5a80: 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72  p_store_director
5a90: 79 20 70 72 61 67 6d 61 73 0a 23 0a 69 66 63 61  y pragmas.#.ifca
5aa0: 70 61 62 6c 65 20 70 61 67 65 72 5f 70 72 61 67  pable pager_prag
5ab0: 6d 61 73 20 7b 0a 64 6f 5f 74 65 73 74 20 70 72  mas {.do_test pr
5ac0: 61 67 6d 61 2d 39 2e 31 20 7b 0a 20 20 64 62 20  agma-9.1 {.  db 
5ad0: 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74 65 33 20  close.  sqlite3 
5ae0: 64 62 20 74 65 73 74 2e 64 62 0a 20 20 65 78 65  db test.db.  exe
5af0: 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d  csql {.    PRAGM
5b00: 41 20 74 65 6d 70 5f 73 74 6f 72 65 3b 0a 20 20  A temp_store;.  
5b10: 7d 0a 7d 20 7b 30 7d 0a 69 66 20 7b 24 54 45 4d  }.} {0}.if {$TEM
5b20: 50 5f 53 54 4f 52 45 3c 3d 31 7d 20 7b 0a 20 20  P_STORE<=1} {.  
5b30: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 39  do_test pragma-9
5b40: 2e 31 2e 31 20 7b 0a 20 20 20 20 63 68 65 63 6b  .1.1 {.    check
5b50: 5f 74 65 6d 70 5f 73 74 6f 72 65 0a 20 20 7d 20  _temp_store.  } 
5b60: 7b 64 69 73 6b 7d 0a 7d 20 65 6c 73 65 20 7b 0a  {disk}.} else {.
5b70: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
5b80: 2d 39 2e 31 2e 31 20 7b 0a 20 20 20 20 63 68 65  -9.1.1 {.    che
5b90: 63 6b 5f 74 65 6d 70 5f 73 74 6f 72 65 0a 20 20  ck_temp_store.  
5ba0: 7d 20 7b 6d 65 6d 6f 72 79 7d 0a 7d 0a 0a 64 6f  } {memory}.}..do
5bb0: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 39 2e 32  _test pragma-9.2
5bc0: 20 7b 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20 20   {.  db close.  
5bd0: 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e  sqlite3 db test.
5be0: 64 62 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  db.  execsql {. 
5bf0: 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73     PRAGMA temp_s
5c00: 74 6f 72 65 3d 66 69 6c 65 3b 0a 20 20 20 20 50  tore=file;.    P
5c10: 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65  RAGMA temp_store
5c20: 3b 0a 20 20 7d 0a 7d 20 7b 31 7d 0a 69 66 20 7b  ;.  }.} {1}.if {
5c30: 24 54 45 4d 50 5f 53 54 4f 52 45 3d 3d 33 7d 20  $TEMP_STORE==3} 
5c40: 7b 0a 20 20 23 20 57 68 65 6e 20 54 45 4d 50 5f  {.  # When TEMP_
5c50: 53 54 4f 52 45 20 69 73 20 33 2c 20 61 6c 77 61  STORE is 3, alwa
5c60: 79 73 20 75 73 65 20 6d 65 6d 6f 72 79 20 72 65  ys use memory re
5c70: 67 61 72 64 6c 65 73 73 20 6f 66 20 70 72 61 67  gardless of prag
5c80: 6d 61 20 73 65 74 74 69 6e 67 73 2e 0a 20 20 64  ma settings..  d
5c90: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 39 2e  o_test pragma-9.
5ca0: 32 2e 31 20 7b 0a 20 20 20 20 63 68 65 63 6b 5f  2.1 {.    check_
5cb0: 74 65 6d 70 5f 73 74 6f 72 65 0a 20 20 7d 20 7b  temp_store.  } {
5cc0: 6d 65 6d 6f 72 79 7d 0a 7d 20 65 6c 73 65 20 7b  memory}.} else {
5cd0: 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .  do_test pragm
5ce0: 61 2d 39 2e 32 2e 31 20 7b 0a 20 20 20 20 63 68  a-9.2.1 {.    ch
5cf0: 65 63 6b 5f 74 65 6d 70 5f 73 74 6f 72 65 0a 20  eck_temp_store. 
5d00: 20 7d 20 7b 64 69 73 6b 7d 0a 7d 0a 0a 64 6f 5f   } {disk}.}..do_
5d10: 74 65 73 74 20 70 72 61 67 6d 61 2d 39 2e 33 20  test pragma-9.3 
5d20: 7b 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 73  {.  db close.  s
5d30: 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64  qlite3 db test.d
5d40: 62 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  b.  execsql {.  
5d50: 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74    PRAGMA temp_st
5d60: 6f 72 65 3d 6d 65 6d 6f 72 79 3b 0a 20 20 20 20  ore=memory;.    
5d70: 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72  PRAGMA temp_stor
5d80: 65 3b 0a 20 20 7d 0a 7d 20 7b 32 7d 0a 69 66 20  e;.  }.} {2}.if 
5d90: 7b 24 54 45 4d 50 5f 53 54 4f 52 45 3d 3d 30 7d  {$TEMP_STORE==0}
5da0: 20 7b 0a 20 20 23 20 57 68 65 6e 20 54 45 4d 50   {.  # When TEMP
5db0: 5f 53 54 4f 52 45 20 69 73 20 30 2c 20 61 6c 77  _STORE is 0, alw
5dc0: 61 79 73 20 75 73 65 20 74 68 65 20 64 69 73 6b  ays use the disk
5dd0: 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 70   regardless of p
5de0: 72 61 67 6d 61 20 73 65 74 74 69 6e 67 73 2e 0a  ragma settings..
5df0: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
5e00: 2d 39 2e 33 2e 31 20 7b 0a 20 20 20 20 63 68 65  -9.3.1 {.    che
5e10: 63 6b 5f 74 65 6d 70 5f 73 74 6f 72 65 0a 20 20  ck_temp_store.  
5e20: 7d 20 7b 64 69 73 6b 7d 0a 7d 20 65 6c 73 65 20  } {disk}.} else 
5e30: 7b 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67  {.  do_test prag
5e40: 6d 61 2d 39 2e 33 2e 31 20 7b 0a 20 20 20 20 63  ma-9.3.1 {.    c
5e50: 68 65 63 6b 5f 74 65 6d 70 5f 73 74 6f 72 65 0a  heck_temp_store.
5e60: 20 20 7d 20 7b 6d 65 6d 6f 72 79 7d 0a 7d 0a 0a    } {memory}.}..
5e70: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 39  do_test pragma-9
5e80: 2e 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .4 {.  execsql {
5e90: 0a 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70  .    PRAGMA temp
5ea0: 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79  _store_directory
5eb0: 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 69 66 63 61 70  ;.  }.} {}.ifcap
5ec0: 61 62 6c 65 20 77 73 64 20 7b 0a 20 20 64 6f 5f  able wsd {.  do_
5ed0: 74 65 73 74 20 70 72 61 67 6d 61 2d 39 2e 35 20  test pragma-9.5 
5ee0: 7b 0a 20 20 20 20 73 65 74 20 70 77 64 20 5b 73  {.    set pwd [s
5ef0: 74 72 69 6e 67 20 6d 61 70 20 7b 27 20 27 27 7d  tring map {' ''}
5f00: 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d   [file nativenam
5f10: 65 20 5b 67 65 74 5f 70 77 64 5d 5d 5d 0a 20 20  e [get_pwd]]].  
5f20: 20 20 65 78 65 63 73 71 6c 20 22 0a 20 20 20 20    execsql ".    
5f30: 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74    PRAGMA temp_st
5f40: 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 3d 27 24  ore_directory='$
5f50: 70 77 64 27 3b 0a 20 20 20 20 22 0a 20 20 7d 20  pwd';.    ".  } 
5f60: 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61  {}.  do_test pra
5f70: 67 6d 61 2d 39 2e 36 20 7b 0a 20 20 20 20 65 78  gma-9.6 {.    ex
5f80: 65 63 73 71 6c 20 7b 20 0a 20 20 20 20 20 20 50  ecsql { .      P
5f90: 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65  RAGMA temp_store
5fa0: 5f 64 69 72 65 63 74 6f 72 79 3b 0a 20 20 20 20  _directory;.    
5fb0: 7d 0a 20 20 7d 20 5b 6c 69 73 74 20 5b 66 69 6c  }.  } [list [fil
5fc0: 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 67 65  e nativename [ge
5fd0: 74 5f 70 77 64 5d 5d 5d 0a 20 20 64 6f 5f 74 65  t_pwd]]].  do_te
5fe0: 73 74 20 70 72 61 67 6d 61 2d 39 2e 37 20 7b 0a  st pragma-9.7 {.
5ff0: 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b 20 0a      catchsql { .
6000: 20 20 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d        PRAGMA tem
6010: 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72  p_store_director
6020: 79 3d 27 2f 4e 4f 4e 2f 45 58 49 53 54 45 4e 54  y='/NON/EXISTENT
6030: 2f 50 41 54 48 2f 46 4f 4f 42 41 52 27 3b 0a 20  /PATH/FOOBAR';. 
6040: 20 20 20 7d 0a 20 20 7d 20 7b 31 20 7b 6e 6f 74     }.  } {1 {not
6050: 20 61 20 77 72 69 74 61 62 6c 65 20 64 69 72 65   a writable dire
6060: 63 74 6f 72 79 7d 7d 0a 20 20 64 6f 5f 74 65 73  ctory}}.  do_tes
6070: 74 20 70 72 61 67 6d 61 2d 39 2e 38 20 7b 0a 20  t pragma-9.8 {. 
6080: 20 20 20 65 78 65 63 73 71 6c 20 7b 20 0a 20 20     execsql { .  
6090: 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f      PRAGMA temp_
60a0: 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 3d  store_directory=
60b0: 27 27 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 7d  '';.    }.  } {}
60c0: 0a 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78  .  if {![info ex
60d0: 69 73 74 73 20 54 45 4d 50 5f 53 54 4f 52 45 5d  ists TEMP_STORE]
60e0: 20 7c 7c 20 24 54 45 4d 50 5f 53 54 4f 52 45 3c   || $TEMP_STORE<
60f0: 3d 31 7d 20 7b 0a 20 20 20 20 69 66 63 61 70 61  =1} {.    ifcapa
6100: 62 6c 65 20 74 65 6d 70 64 62 20 7b 0a 20 20 20  ble tempdb {.   
6110: 20 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d     do_test pragm
6120: 61 2d 39 2e 39 20 7b 0a 20 20 20 20 20 20 20 20  a-9.9 {.        
6130: 65 78 65 63 73 71 6c 20 7b 20 0a 20 20 20 20 20  execsql { .     
6140: 20 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70       PRAGMA temp
6150: 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79  _store_directory
6160: 3b 0a 20 20 20 20 20 20 20 20 20 20 50 52 41 47  ;.          PRAG
6170: 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 3d 46 49  MA temp_store=FI
6180: 4c 45 3b 0a 20 20 20 20 20 20 20 20 20 20 43 52  LE;.          CR
6190: 45 41 54 45 20 54 45 4d 50 20 54 41 42 4c 45 20  EATE TEMP TABLE 
61a0: 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63  temp_store_direc
61b0: 74 6f 72 79 5f 74 65 73 74 28 61 20 69 6e 74 65  tory_test(a inte
61c0: 67 65 72 29 3b 0a 20 20 20 20 20 20 20 20 20 20  ger);.          
61d0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 65 6d 70  INSERT INTO temp
61e0: 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79  _store_directory
61f0: 5f 74 65 73 74 20 76 61 6c 75 65 73 20 28 32 29  _test values (2)
6200: 3b 0a 20 20 20 20 20 20 20 20 20 20 53 45 4c 45  ;.          SELE
6210: 43 54 20 2a 20 46 52 4f 4d 20 74 65 6d 70 5f 73  CT * FROM temp_s
6220: 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 5f 74  tore_directory_t
6230: 65 73 74 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  est;.        }. 
6240: 20 20 20 20 20 7d 20 7b 32 7d 0a 20 20 20 20 20       } {2}.     
6250: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
6260: 39 2e 31 30 20 7b 0a 20 20 20 20 20 20 20 20 63  9.10 {.        c
6270: 61 74 63 68 73 71 6c 20 22 0a 20 20 20 20 20 20  atchsql ".      
6280: 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f      PRAGMA temp_
6290: 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 3d  store_directory=
62a0: 27 24 70 77 64 27 3b 0a 20 20 20 20 20 20 20 20  '$pwd';.        
62b0: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
62c0: 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63  temp_store_direc
62d0: 74 6f 72 79 5f 74 65 73 74 3b 0a 20 20 20 20 20  tory_test;.     
62e0: 20 20 20 22 0a 20 20 20 20 20 20 7d 20 7b 31 20     ".      } {1 
62f0: 7b 6e 6f 20 73 75 63 68 20 74 61 62 6c 65 3a 20  {no such table: 
6300: 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63  temp_store_direc
6310: 74 6f 72 79 5f 74 65 73 74 7d 7d 0a 20 20 20 20  tory_test}}.    
6320: 7d 0a 20 20 7d 0a 7d 0a 64 6f 5f 74 65 73 74 20  }.  }.}.do_test 
6330: 70 72 61 67 6d 61 2d 39 2e 31 31 20 7b 0a 20 20  pragma-9.11 {.  
6340: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52  execsql {.    PR
6350: 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 20  AGMA temp_store 
6360: 3d 20 30 3b 0a 20 20 20 20 50 52 41 47 4d 41 20  = 0;.    PRAGMA 
6370: 74 65 6d 70 5f 73 74 6f 72 65 3b 0a 20 20 7d 0a  temp_store;.  }.
6380: 7d 20 7b 30 7d 0a 64 6f 5f 74 65 73 74 20 70 72  } {0}.do_test pr
6390: 61 67 6d 61 2d 39 2e 31 32 20 7b 0a 20 20 65 78  agma-9.12 {.  ex
63a0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47  ecsql {.    PRAG
63b0: 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 20 3d 20  MA temp_store = 
63c0: 31 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 74 65  1;.    PRAGMA te
63d0: 6d 70 5f 73 74 6f 72 65 3b 0a 20 20 7d 0a 7d 20  mp_store;.  }.} 
63e0: 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67  {1}.do_test prag
63f0: 6d 61 2d 39 2e 31 33 20 7b 0a 20 20 65 78 65 63  ma-9.13 {.  exec
6400: 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41  sql {.    PRAGMA
6410: 20 74 65 6d 70 5f 73 74 6f 72 65 20 3d 20 32 3b   temp_store = 2;
6420: 0a 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70  .    PRAGMA temp
6430: 5f 73 74 6f 72 65 3b 0a 20 20 7d 0a 7d 20 7b 32  _store;.  }.} {2
6440: 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  }.do_test pragma
6450: 2d 39 2e 31 34 20 7b 0a 20 20 65 78 65 63 73 71  -9.14 {.  execsq
6460: 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 74  l {.    PRAGMA t
6470: 65 6d 70 5f 73 74 6f 72 65 20 3d 20 33 3b 0a 20  emp_store = 3;. 
6480: 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73     PRAGMA temp_s
6490: 74 6f 72 65 3b 0a 20 20 7d 0a 7d 20 7b 30 7d 0a  tore;.  }.} {0}.
64a0: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 39  do_test pragma-9
64b0: 2e 31 35 20 7b 0a 20 20 63 61 74 63 68 73 71 6c  .15 {.  catchsql
64c0: 20 7b 0a 20 20 20 20 42 45 47 49 4e 20 45 58 43   {.    BEGIN EXC
64d0: 4c 55 53 49 56 45 3b 0a 20 20 20 20 43 52 45 41  LUSIVE;.    CREA
64e0: 54 45 20 54 45 4d 50 20 54 41 42 4c 45 20 74 65  TE TEMP TABLE te
64f0: 6d 70 5f 74 61 62 6c 65 28 74 29 3b 0a 20 20 20  mp_table(t);.   
6500: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 65 6d   INSERT INTO tem
6510: 70 5f 74 61 62 6c 65 20 56 41 4c 55 45 53 28 27  p_table VALUES('
6520: 76 61 6c 75 61 62 6c 65 20 64 61 74 61 27 29 3b  valuable data');
6530: 0a 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70  .    PRAGMA temp
6540: 5f 73 74 6f 72 65 20 3d 20 31 3b 0a 20 20 7d 0a  _store = 1;.  }.
6550: 7d 20 7b 31 20 7b 74 65 6d 70 6f 72 61 72 79 20  } {1 {temporary 
6560: 73 74 6f 72 61 67 65 20 63 61 6e 6e 6f 74 20 62  storage cannot b
6570: 65 20 63 68 61 6e 67 65 64 20 66 72 6f 6d 20 77  e changed from w
6580: 69 74 68 69 6e 20 61 20 74 72 61 6e 73 61 63 74  ithin a transact
6590: 69 6f 6e 7d 7d 0a 64 6f 5f 74 65 73 74 20 70 72  ion}}.do_test pr
65a0: 61 67 6d 61 2d 39 2e 31 36 20 7b 0a 20 20 65 78  agma-9.16 {.  ex
65b0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45  ecsql {.    SELE
65c0: 43 54 20 2a 20 46 52 4f 4d 20 74 65 6d 70 5f 74  CT * FROM temp_t
65d0: 61 62 6c 65 3b 0a 20 20 20 20 43 4f 4d 4d 49 54  able;.    COMMIT
65e0: 3b 0a 20 20 7d 0a 7d 20 7b 7b 76 61 6c 75 61 62  ;.  }.} {{valuab
65f0: 6c 65 20 64 61 74 61 7d 7d 0a 0a 64 6f 5f 74 65  le data}}..do_te
6600: 73 74 20 70 72 61 67 6d 61 2d 39 2e 31 37 20 7b  st pragma-9.17 {
6610: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
6620: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 65 6d   INSERT INTO tem
6630: 70 5f 74 61 62 6c 65 20 56 41 4c 55 45 53 28 27  p_table VALUES('
6640: 76 61 6c 75 61 62 6c 65 20 64 61 74 61 20 49 49  valuable data II
6650: 27 29 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a  ');.    SELECT *
6660: 20 46 52 4f 4d 20 74 65 6d 70 5f 74 61 62 6c 65   FROM temp_table
6670: 3b 0a 20 20 7d 0a 7d 20 7b 7b 76 61 6c 75 61 62  ;.  }.} {{valuab
6680: 6c 65 20 64 61 74 61 7d 20 7b 76 61 6c 75 61 62  le data} {valuab
6690: 6c 65 20 64 61 74 61 20 49 49 7d 7d 0a 0a 64 6f  le data II}}..do
66a0: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 39 2e 31  _test pragma-9.1
66b0: 38 20 7b 0a 20 20 73 65 74 20 72 63 20 5b 63 61  8 {.  set rc [ca
66c0: 74 63 68 20 7b 0a 20 20 20 20 64 62 20 65 76 61  tch {.    db eva
66d0: 6c 20 7b 53 45 4c 45 43 54 20 74 20 46 52 4f 4d  l {SELECT t FROM
66e0: 20 74 65 6d 70 5f 74 61 62 6c 65 7d 20 7b 0a 20   temp_table} {. 
66f0: 20 20 20 20 20 65 78 65 63 73 71 6c 20 7b 70 72       execsql {pr
6700: 61 67 6d 61 20 74 65 6d 70 5f 73 74 6f 72 65 20  agma temp_store 
6710: 3d 20 31 7d 0a 20 20 20 20 7d 0a 20 20 7d 20 6d  = 1}.    }.  } m
6720: 73 67 5d 0a 20 20 6c 69 73 74 20 24 72 63 20 24  sg].  list $rc $
6730: 6d 73 67 0a 7d 20 7b 31 20 7b 74 65 6d 70 6f 72  msg.} {1 {tempor
6740: 61 72 79 20 73 74 6f 72 61 67 65 20 63 61 6e 6e  ary storage cann
6750: 6f 74 20 62 65 20 63 68 61 6e 67 65 64 20 66 72  ot be changed fr
6760: 6f 6d 20 77 69 74 68 69 6e 20 61 20 74 72 61 6e  om within a tran
6770: 73 61 63 74 69 6f 6e 7d 7d 0a 0a 7d 20 3b 23 20  saction}}..} ;# 
6780: 69 66 63 61 70 61 62 6c 65 20 70 61 67 65 72 5f  ifcapable pager_
6790: 70 72 61 67 6d 61 73 0a 0a 69 66 63 61 70 61 62  pragmas..ifcapab
67a0: 6c 65 20 74 72 69 67 67 65 72 20 7b 0a 0a 64 6f  le trigger {..do
67b0: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 30 2e  _test pragma-10.
67c0: 30 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b  0 {.  catchsql {
67d0: 0a 20 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20  .    DROP TABLE 
67e0: 6d 61 69 6e 2e 74 31 3b 0a 20 20 7d 0a 20 20 65  main.t1;.  }.  e
67f0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41  xecsql {.    PRA
6800: 47 4d 41 20 63 6f 75 6e 74 5f 63 68 61 6e 67 65  GMA count_change
6810: 73 20 3d 20 31 3b 0a 0a 20 20 20 20 43 52 45 41  s = 1;..    CREA
6820: 54 45 20 54 41 42 4c 45 20 74 31 28 61 20 50 52  TE TABLE t1(a PR
6830: 49 4d 41 52 59 20 4b 45 59 29 3b 0a 20 20 20 20  IMARY KEY);.    
6840: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 5f  CREATE TABLE t1_
6850: 6d 69 72 72 6f 72 28 61 29 3b 0a 20 20 20 20 43  mirror(a);.    C
6860: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 5f 6d  REATE TABLE t1_m
6870: 69 72 72 6f 72 32 28 61 29 3b 0a 20 20 20 20 43  irror2(a);.    C
6880: 52 45 41 54 45 20 54 52 49 47 47 45 52 20 74 31  REATE TRIGGER t1
6890: 5f 62 69 20 42 45 46 4f 52 45 20 49 4e 53 45 52  _bi BEFORE INSER
68a0: 54 20 4f 4e 20 74 31 20 42 45 47 49 4e 20 0a 20  T ON t1 BEGIN . 
68b0: 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f       INSERT INTO
68c0: 20 74 31 5f 6d 69 72 72 6f 72 20 56 41 4c 55 45   t1_mirror VALUE
68d0: 53 28 6e 65 77 2e 61 29 3b 0a 20 20 20 20 45 4e  S(new.a);.    EN
68e0: 44 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54 52  D;.    CREATE TR
68f0: 49 47 47 45 52 20 74 31 5f 61 69 20 41 46 54 45  IGGER t1_ai AFTE
6900: 52 20 49 4e 53 45 52 54 20 4f 4e 20 74 31 20 42  R INSERT ON t1 B
6910: 45 47 49 4e 20 0a 20 20 20 20 20 20 49 4e 53 45  EGIN .      INSE
6920: 52 54 20 49 4e 54 4f 20 74 31 5f 6d 69 72 72 6f  RT INTO t1_mirro
6930: 72 32 20 56 41 4c 55 45 53 28 6e 65 77 2e 61 29  r2 VALUES(new.a)
6940: 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20 20 20 43  ;.    END;.    C
6950: 52 45 41 54 45 20 54 52 49 47 47 45 52 20 74 31  REATE TRIGGER t1
6960: 5f 62 75 20 42 45 46 4f 52 45 20 55 50 44 41 54  _bu BEFORE UPDAT
6970: 45 20 4f 4e 20 74 31 20 42 45 47 49 4e 20 0a 20  E ON t1 BEGIN . 
6980: 20 20 20 20 20 55 50 44 41 54 45 20 74 31 5f 6d       UPDATE t1_m
6990: 69 72 72 6f 72 20 53 45 54 20 61 20 3d 20 6e 65  irror SET a = ne
69a0: 77 2e 61 20 57 48 45 52 45 20 61 20 3d 20 6f 6c  w.a WHERE a = ol
69b0: 64 2e 61 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20  d.a;.    END;.  
69c0: 20 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52    CREATE TRIGGER
69d0: 20 74 31 5f 61 75 20 41 46 54 45 52 20 55 50 44   t1_au AFTER UPD
69e0: 41 54 45 20 4f 4e 20 74 31 20 42 45 47 49 4e 20  ATE ON t1 BEGIN 
69f0: 0a 20 20 20 20 20 20 55 50 44 41 54 45 20 74 31  .      UPDATE t1
6a00: 5f 6d 69 72 72 6f 72 32 20 53 45 54 20 61 20 3d  _mirror2 SET a =
6a10: 20 6e 65 77 2e 61 20 57 48 45 52 45 20 61 20 3d   new.a WHERE a =
6a20: 20 6f 6c 64 2e 61 3b 0a 20 20 20 20 45 4e 44 3b   old.a;.    END;
6a30: 0a 20 20 20 20 43 52 45 41 54 45 20 54 52 49 47  .    CREATE TRIG
6a40: 47 45 52 20 74 31 5f 62 64 20 42 45 46 4f 52 45  GER t1_bd BEFORE
6a50: 20 44 45 4c 45 54 45 20 4f 4e 20 74 31 20 42 45   DELETE ON t1 BE
6a60: 47 49 4e 20 0a 20 20 20 20 20 20 44 45 4c 45 54  GIN .      DELET
6a70: 45 20 46 52 4f 4d 20 74 31 5f 6d 69 72 72 6f 72  E FROM t1_mirror
6a80: 20 57 48 45 52 45 20 61 20 3d 20 6f 6c 64 2e 61   WHERE a = old.a
6a90: 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20 20 20 43  ;.    END;.    C
6aa0: 52 45 41 54 45 20 54 52 49 47 47 45 52 20 74 31  REATE TRIGGER t1
6ab0: 5f 61 64 20 41 46 54 45 52 20 44 45 4c 45 54 45  _ad AFTER DELETE
6ac0: 20 4f 4e 20 74 31 20 42 45 47 49 4e 20 0a 20 20   ON t1 BEGIN .  
6ad0: 20 20 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20      DELETE FROM 
6ae0: 74 31 5f 6d 69 72 72 6f 72 32 20 57 48 45 52 45  t1_mirror2 WHERE
6af0: 20 61 20 3d 20 6f 6c 64 2e 61 3b 0a 20 20 20 20   a = old.a;.    
6b00: 45 4e 44 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a 64  END;.  }.} {}..d
6b10: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 30  o_test pragma-10
6b20: 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .1 {.  execsql {
6b30: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
6b40: 20 74 31 20 56 41 4c 55 45 53 28 72 61 6e 64 73   t1 VALUES(rands
6b50: 74 72 28 31 30 2c 31 30 29 29 3b 0a 20 20 7d 0a  tr(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 32 20 7b 0a 20 20 65 78  agma-10.2 {.  ex
6b80: 65 63 73 71 6c 20 7b 0a 20 20 20 20 55 50 44 41  ecsql {.    UPDA
6b90: 54 45 20 74 31 20 53 45 54 20 61 20 3d 20 72 61  TE t1 SET a = ra
6ba0: 6e 64 73 74 72 28 31 30 2c 31 30 29 3b 0a 20 20  ndstr(10,10);.  
6bb0: 7d 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20  }.} {1}.do_test 
6bc0: 70 72 61 67 6d 61 2d 31 30 2e 33 20 7b 0a 20 20  pragma-10.3 {.  
6bd0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 44 45  execsql {.    DE
6be0: 4c 45 54 45 20 46 52 4f 4d 20 74 31 3b 0a 20 20  LETE FROM t1;.  
6bf0: 7d 0a 7d 20 7b 31 7d 0a 0a 7d 20 3b 23 20 69 66  }.} {1}..} ;# if
6c00: 63 61 70 61 62 6c 65 20 74 72 69 67 67 65 72 0a  capable trigger.
6c10: 0a 69 66 63 61 70 61 62 6c 65 20 73 63 68 65 6d  .ifcapable schem
6c20: 61 5f 70 72 61 67 6d 61 73 20 7b 0a 20 20 64 6f  a_pragmas {.  do
6c30: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 31 2e  _test pragma-11.
6c40: 31 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 32  1 {.    execsql2
6c50: 20 7b 0a 20 20 20 20 20 20 70 72 61 67 6d 61 20   {.      pragma 
6c60: 63 6f 6c 6c 61 74 69 6f 6e 5f 6c 69 73 74 3b 0a  collation_list;.
6c70: 20 20 20 20 7d 0a 20 20 7d 20 7b 73 65 71 20 30      }.  } {seq 0
6c80: 20 6e 61 6d 65 20 4e 4f 43 41 53 45 20 73 65 71   name NOCASE seq
6c90: 20 31 20 6e 61 6d 65 20 52 54 52 49 4d 20 73 65   1 name RTRIM se
6ca0: 71 20 32 20 6e 61 6d 65 20 42 49 4e 41 52 59 7d  q 2 name BINARY}
6cb0: 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .  do_test pragm
6cc0: 61 2d 31 31 2e 32 20 7b 0a 20 20 20 20 64 62 20  a-11.2 {.    db 
6cd0: 63 6f 6c 6c 61 74 65 20 4e 65 77 5f 43 6f 6c 6c  collate New_Coll
6ce0: 61 74 69 6f 6e 20 62 6c 61 68 2e 2e 2e 0a 20 20  ation blah....  
6cf0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
6d00: 20 20 70 72 61 67 6d 61 20 63 6f 6c 6c 61 74 69    pragma collati
6d10: 6f 6e 5f 6c 69 73 74 3b 0a 20 20 20 20 7d 0a 20  on_list;.    }. 
6d20: 20 7d 20 7b 30 20 4e 65 77 5f 43 6f 6c 6c 61 74   } {0 New_Collat
6d30: 69 6f 6e 20 31 20 4e 4f 43 41 53 45 20 32 20 52  ion 1 NOCASE 2 R
6d40: 54 52 49 4d 20 33 20 42 49 4e 41 52 59 7d 0a 7d  TRIM 3 BINARY}.}
6d50: 0a 0a 69 66 63 61 70 61 62 6c 65 20 73 63 68 65  ..ifcapable sche
6d60: 6d 61 5f 70 72 61 67 6d 61 73 26 26 74 65 6d 70  ma_pragmas&&temp
6d70: 64 62 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 70  db {.  do_test p
6d80: 72 61 67 6d 61 2d 31 32 2e 31 20 7b 0a 20 20 20  ragma-12.1 {.   
6d90: 20 73 71 6c 69 74 65 33 20 64 62 32 20 74 65 73   sqlite3 db2 tes
6da0: 74 2e 64 62 0a 20 20 20 20 65 78 65 63 73 71 6c  t.db.    execsql
6db0: 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20   {.      PRAGMA 
6dc0: 74 65 6d 70 2e 74 61 62 6c 65 5f 69 6e 66 6f 28  temp.table_info(
6dd0: 27 61 62 63 27 29 3b 0a 20 20 20 20 7d 20 64 62  'abc');.    } db
6de0: 32 0a 20 20 7d 20 7b 7d 0a 20 20 64 62 32 20 63  2.  } {}.  db2 c
6df0: 6c 6f 73 65 0a 0a 20 20 64 6f 5f 74 65 73 74 20  lose..  do_test 
6e00: 70 72 61 67 6d 61 2d 31 32 2e 32 20 7b 0a 20 20  pragma-12.2 {.  
6e10: 20 20 73 71 6c 69 74 65 33 20 64 62 32 20 74 65    sqlite3 db2 te
6e20: 73 74 2e 64 62 0a 20 20 20 20 65 78 65 63 73 71  st.db.    execsq
6e30: 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41  l {.      PRAGMA
6e40: 20 74 65 6d 70 2e 64 65 66 61 75 6c 74 5f 63 61   temp.default_ca
6e50: 63 68 65 5f 73 69 7a 65 20 3d 20 32 30 30 3b 0a  che_size = 200;.
6e60: 20 20 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d        PRAGMA tem
6e70: 70 2e 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f  p.default_cache_
6e80: 73 69 7a 65 3b 0a 20 20 20 20 7d 20 64 62 32 0a  size;.    } db2.
6e90: 20 20 7d 20 7b 32 30 30 7d 0a 20 20 64 62 32 20    } {200}.  db2 
6ea0: 63 6c 6f 73 65 0a 0a 20 20 64 6f 5f 74 65 73 74  close..  do_test
6eb0: 20 70 72 61 67 6d 61 2d 31 32 2e 33 20 7b 0a 20   pragma-12.3 {. 
6ec0: 20 20 20 73 71 6c 69 74 65 33 20 64 62 32 20 74     sqlite3 db2 t
6ed0: 65 73 74 2e 64 62 0a 20 20 20 20 65 78 65 63 73  est.db.    execs
6ee0: 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d  ql {.      PRAGM
6ef0: 41 20 74 65 6d 70 2e 63 61 63 68 65 5f 73 69 7a  A temp.cache_siz
6f00: 65 20 3d 20 34 30 30 3b 0a 20 20 20 20 20 20 50  e = 400;.      P
6f10: 52 41 47 4d 41 20 74 65 6d 70 2e 63 61 63 68 65  RAGMA temp.cache
6f20: 5f 73 69 7a 65 3b 0a 20 20 20 20 7d 20 64 62 32  _size;.    } db2
6f30: 0a 20 20 7d 20 7b 34 30 30 7d 0a 20 20 64 62 32  .  } {400}.  db2
6f40: 20 63 6c 6f 73 65 0a 7d 0a 0a 69 66 63 61 70 61   close.}..ifcapa
6f50: 62 6c 65 20 62 6c 6f 62 6c 69 74 20 7b 0a 0a 64  ble bloblit {..d
6f60: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 33  o_test pragma-13
6f70: 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .1 {.  execsql {
6f80: 0a 20 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20  .    DROP TABLE 
6f90: 49 46 20 45 58 49 53 54 53 20 74 34 3b 0a 20 20  IF EXISTS t4;.  
6fa0: 20 20 50 52 41 47 4d 41 20 76 64 62 65 5f 74 72    PRAGMA vdbe_tr
6fb0: 61 63 65 3d 6f 6e 3b 0a 20 20 20 20 50 52 41 47  ace=on;.    PRAG
6fc0: 4d 41 20 76 64 62 65 5f 6c 69 73 74 69 6e 67 3d  MA vdbe_listing=
6fd0: 6f 6e 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 73  on;.    PRAGMA s
6fe0: 71 6c 5f 74 72 61 63 65 3d 6f 6e 3b 0a 20 20 20  ql_trace=on;.   
6ff0: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 34   CREATE TABLE t4
7000: 28 61 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41  (a INTEGER PRIMA
7010: 52 59 20 4b 45 59 2c 62 29 3b 0a 20 20 20 20 49  RY KEY,b);.    I
7020: 4e 53 45 52 54 20 49 4e 54 4f 20 74 34 28 62 29  NSERT INTO t4(b)
7030: 20 56 41 4c 55 45 53 28 78 27 30 31 32 33 34 35   VALUES(x'012345
7040: 36 37 38 39 61 62 63 64 65 66 30 31 32 33 34 35  6789abcdef012345
7050: 36 37 38 39 61 62 63 64 65 66 30 31 32 33 34 35  6789abcdef012345
7060: 36 37 38 39 27 29 3b 0a 20 20 20 20 49 4e 53 45  6789');.    INSE
7070: 52 54 20 49 4e 54 4f 20 74 34 28 62 29 20 56 41  RT INTO t4(b) VA
7080: 4c 55 45 53 28 72 61 6e 64 73 74 72 28 33 30 2c  LUES(randstr(30,
7090: 33 30 29 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  30));.    INSERT
70a0: 20 49 4e 54 4f 20 74 34 28 62 29 20 56 41 4c 55   INTO t4(b) VALU
70b0: 45 53 28 31 2e 32 33 34 35 36 29 3b 0a 20 20 20  ES(1.23456);.   
70c0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 34 28   INSERT INTO t4(
70d0: 62 29 20 56 41 4c 55 45 53 28 4e 55 4c 4c 29 3b  b) VALUES(NULL);
70e0: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
70f0: 20 74 34 28 62 29 20 56 41 4c 55 45 53 28 30 29   t4(b) VALUES(0)
7100: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
7110: 4f 20 74 34 28 62 29 20 53 45 4c 45 43 54 20 62  O t4(b) SELECT b
7120: 7c 7c 62 7c 7c 62 7c 7c 62 20 46 52 4f 4d 20 74  ||b||b||b FROM t
7130: 34 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20  4;.    SELECT * 
7140: 46 52 4f 4d 20 74 34 3b 0a 20 20 7d 0a 20 20 65  FROM t4;.  }.  e
7150: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41  xecsql {.    PRA
7160: 47 4d 41 20 76 64 62 65 5f 74 72 61 63 65 3d 6f  GMA vdbe_trace=o
7170: 66 66 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 76  ff;.    PRAGMA v
7180: 64 62 65 5f 6c 69 73 74 69 6e 67 3d 6f 66 66 3b  dbe_listing=off;
7190: 0a 20 20 20 20 50 52 41 47 4d 41 20 73 71 6c 5f  .    PRAGMA sql_
71a0: 74 72 61 63 65 3d 6f 66 66 3b 0a 20 20 7d 0a 7d  trace=off;.  }.}
71b0: 20 7b 7d 0a 0a 7d 20 3b 23 20 69 66 63 61 70 61   {}..} ;# ifcapa
71c0: 62 6c 65 20 62 6c 6f 62 6c 69 74 20 0a 0a 69 66  ble bloblit ..if
71d0: 63 61 70 61 62 6c 65 20 70 61 67 65 72 5f 70 72  capable pager_pr
71e0: 61 67 6d 61 73 20 7b 0a 20 20 64 62 20 63 6c 6f  agmas {.  db clo
71f0: 73 65 0a 20 20 66 6f 72 63 65 64 65 6c 65 74 65  se.  forcedelete
7200: 20 74 65 73 74 2e 64 62 0a 20 20 73 71 6c 69 74   test.db.  sqlit
7210: 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a 0a 20  e3 db test.db.. 
7220: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
7230: 31 34 2e 31 20 7b 0a 20 20 20 20 65 78 65 63 73  14.1 {.    execs
7240: 71 6c 20 7b 20 70 72 61 67 6d 61 20 61 75 74 6f  ql { pragma auto
7250: 5f 76 61 63 75 75 6d 20 3d 20 30 20 7d 0a 20 20  _vacuum = 0 }.  
7260: 20 20 65 78 65 63 73 71 6c 20 7b 20 70 72 61 67    execsql { prag
7270: 6d 61 20 70 61 67 65 5f 63 6f 75 6e 74 20 7d 0a  ma page_count }.
7280: 20 20 7d 20 7b 30 7d 0a 0a 20 20 64 6f 5f 74 65    } {0}..  do_te
7290: 73 74 20 70 72 61 67 6d 61 2d 31 34 2e 32 20 7b  st pragma-14.2 {
72a0: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 20 0a  .    execsql { .
72b0: 20 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42        CREATE TAB
72c0: 4c 45 20 61 62 63 28 61 2c 20 62 2c 20 63 29 3b  LE abc(a, b, c);
72d0: 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 70 61  .      PRAGMA pa
72e0: 67 65 5f 63 6f 75 6e 74 3b 0a 20 20 20 20 7d 0a  ge_count;.    }.
72f0: 20 20 7d 20 7b 32 7d 0a 20 20 64 6f 5f 74 65 73    } {2}.  do_tes
7300: 74 20 70 72 61 67 6d 61 2d 31 34 2e 32 75 63 20  t pragma-14.2uc 
7310: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 70  {.    execsql {p
7320: 72 61 67 6d 61 20 50 41 47 45 5f 43 4f 55 4e 54  ragma PAGE_COUNT
7330: 7d 0a 20 20 7d 20 7b 32 7d 0a 0a 20 20 64 6f 5f  }.  } {2}..  do_
7340: 74 65 73 74 20 70 72 61 67 6d 61 2d 31 34 2e 33  test pragma-14.3
7350: 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b   {.    execsql {
7360: 20 0a 20 20 20 20 20 20 42 45 47 49 4e 3b 0a 20   .      BEGIN;. 
7370: 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c       CREATE TABL
7380: 45 20 64 65 66 28 61 2c 20 62 2c 20 63 29 3b 0a  E def(a, b, c);.
7390: 20 20 20 20 20 20 50 52 41 47 4d 41 20 70 61 67        PRAGMA pag
73a0: 65 5f 63 6f 75 6e 74 3b 0a 20 20 20 20 7d 0a 20  e_count;.    }. 
73b0: 20 7d 20 7b 33 7d 0a 20 20 64 6f 5f 74 65 73 74   } {3}.  do_test
73c0: 20 70 72 61 67 6d 61 2d 31 34 2e 33 75 63 20 7b   pragma-14.3uc {
73d0: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 70 72  .    execsql {pr
73e0: 61 67 6d 61 20 50 41 47 45 5f 43 4f 55 4e 54 7d  agma PAGE_COUNT}
73f0: 0a 20 20 7d 20 7b 33 7d 0a 0a 20 20 64 6f 5f 74  .  } {3}..  do_t
7400: 65 73 74 20 70 72 61 67 6d 61 2d 31 34 2e 34 20  est pragma-14.4 
7410: 7b 0a 20 20 20 20 73 65 74 20 70 61 67 65 5f 73  {.    set page_s
7420: 69 7a 65 20 5b 64 62 20 6f 6e 65 20 7b 70 72 61  ize [db one {pra
7430: 67 6d 61 20 70 61 67 65 5f 73 69 7a 65 7d 5d 0a  gma page_size}].
7440: 20 20 20 20 65 78 70 72 20 5b 66 69 6c 65 20 73      expr [file s
7450: 69 7a 65 20 74 65 73 74 2e 64 62 5d 20 2f 20 24  ize test.db] / $
7460: 70 61 67 65 5f 73 69 7a 65 0a 20 20 7d 20 7b 32  page_size.  } {2
7470: 7d 0a 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61  }..  do_test pra
7480: 67 6d 61 2d 31 34 2e 35 20 7b 0a 20 20 20 20 65  gma-14.5 {.    e
7490: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 52  xecsql {.      R
74a0: 4f 4c 4c 42 41 43 4b 3b 0a 20 20 20 20 20 20 50  OLLBACK;.      P
74b0: 52 41 47 4d 41 20 70 61 67 65 5f 63 6f 75 6e 74  RAGMA page_count
74c0: 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 32 7d 0a  ;.    }.  } {2}.
74d0: 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .  do_test pragm
74e0: 61 2d 31 34 2e 36 20 7b 0a 20 20 20 20 66 6f 72  a-14.6 {.    for
74f0: 63 65 64 65 6c 65 74 65 20 74 65 73 74 32 2e 64  cedelete test2.d
7500: 62 0a 20 20 20 20 73 71 6c 69 74 65 33 20 64 62  b.    sqlite3 db
7510: 32 20 74 65 73 74 32 2e 64 62 0a 20 20 20 20 65  2 test2.db.    e
7520: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50  xecsql {.      P
7530: 52 41 47 4d 41 20 61 75 74 6f 5f 76 61 63 75 75  RAGMA auto_vacuu
7540: 6d 20 3d 20 30 3b 0a 20 20 20 20 20 20 43 52 45  m = 0;.      CRE
7550: 41 54 45 20 54 41 42 4c 45 20 74 31 28 61 2c 20  ATE TABLE t1(a, 
7560: 62 2c 20 63 29 3b 0a 20 20 20 20 20 20 43 52 45  b, c);.      CRE
7570: 41 54 45 20 54 41 42 4c 45 20 74 32 28 61 2c 20  ATE TABLE t2(a, 
7580: 62 2c 20 63 29 3b 0a 20 20 20 20 20 20 43 52 45  b, c);.      CRE
7590: 41 54 45 20 54 41 42 4c 45 20 74 33 28 61 2c 20  ATE TABLE t3(a, 
75a0: 62 2c 20 63 29 3b 0a 20 20 20 20 20 20 43 52 45  b, c);.      CRE
75b0: 41 54 45 20 54 41 42 4c 45 20 74 34 28 61 2c 20  ATE TABLE t4(a, 
75c0: 62 2c 20 63 29 3b 0a 20 20 20 20 7d 20 64 62 32  b, c);.    } db2
75d0: 0a 20 20 20 20 64 62 32 20 63 6c 6f 73 65 0a 20  .    db2 close. 
75e0: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
75f0: 20 20 20 41 54 54 41 43 48 20 27 74 65 73 74 32     ATTACH 'test2
7600: 2e 64 62 27 20 41 53 20 61 75 78 3b 0a 20 20 20  .db' AS aux;.   
7610: 20 20 20 50 52 41 47 4d 41 20 61 75 78 2e 70 61     PRAGMA aux.pa
7620: 67 65 5f 63 6f 75 6e 74 3b 0a 20 20 20 20 7d 20  ge_count;.    } 
7630: 0a 20 20 7d 20 7b 35 7d 0a 20 20 64 6f 5f 74 65  .  } {5}.  do_te
7640: 73 74 20 70 72 61 67 6d 61 2d 31 34 2e 36 75 63  st pragma-14.6uc
7650: 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b   {.    execsql {
7660: 70 72 61 67 6d 61 20 41 55 58 2e 50 41 47 45 5f  pragma AUX.PAGE_
7670: 43 4f 55 4e 54 7d 0a 20 20 7d 20 7b 35 7d 0a 7d  COUNT}.  } {5}.}
7680: 0a 0a 23 20 54 65 73 74 20 74 68 61 74 20 74 68  ..# Test that th
7690: 65 20 76 61 6c 75 65 20 73 65 74 20 75 73 69 6e  e value set usin
76a0: 67 20 74 68 65 20 63 61 63 68 65 5f 73 69 7a 65  g the cache_size
76b0: 20 70 72 61 67 6d 61 20 69 73 20 6e 6f 74 20 72   pragma is not r
76c0: 65 73 65 74 20 77 68 65 6e 20 74 68 65 0a 23 20  eset when the.# 
76d0: 73 63 68 65 6d 61 20 69 73 20 72 65 6c 6f 61 64  schema is reload
76e0: 65 64 2e 0a 23 0a 69 66 63 61 70 61 62 6c 65 20  ed..#.ifcapable 
76f0: 70 61 67 65 72 5f 70 72 61 67 6d 61 73 20 7b 0a  pager_pragmas {.
7700: 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 73 71 6c    db close.  sql
7710: 69 74 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a  ite3 db test.db.
7720: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
7730: 2d 31 35 2e 31 20 7b 0a 20 20 20 20 65 78 65 63  -15.1 {.    exec
7740: 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47  sql {.      PRAG
7750: 4d 41 20 63 61 63 68 65 5f 73 69 7a 65 3d 35 39  MA cache_size=59
7760: 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 63  ;.      PRAGMA c
7770: 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 7d  ache_size;.    }
7780: 0a 20 20 7d 20 7b 35 39 7d 0a 20 20 64 6f 5f 74  .  } {59}.  do_t
7790: 65 73 74 20 70 72 61 67 6d 61 2d 31 35 2e 32 20  est pragma-15.2 
77a0: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 20 64 62  {.    sqlite3 db
77b0: 32 20 74 65 73 74 2e 64 62 0a 20 20 20 20 65 78  2 test.db.    ex
77c0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 43 52  ecsql {.      CR
77d0: 45 41 54 45 20 54 41 42 4c 45 20 6e 65 77 74 61  EATE TABLE newta
77e0: 62 6c 65 28 61 2c 20 62 2c 20 63 29 3b 0a 20 20  ble(a, b, c);.  
77f0: 20 20 7d 20 64 62 32 0a 20 20 20 20 64 62 32 20    } db2.    db2 
7800: 63 6c 6f 73 65 0a 20 20 7d 20 7b 7d 0a 20 20 64  close.  } {}.  d
7810: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 35  o_test pragma-15
7820: 2e 33 20 7b 0a 20 20 20 20 23 20 45 76 61 6c 75  .3 {.    # Evalu
7830: 61 74 69 6e 67 20 74 68 69 73 20 73 74 61 74 65  ating this state
7840: 6d 65 6e 74 20 77 69 6c 6c 20 63 61 75 73 65 20  ment will cause 
7850: 74 68 65 20 73 63 68 65 6d 61 20 74 6f 20 62 65  the schema to be
7860: 20 72 65 6c 6f 61 64 65 64 20 28 62 65 63 61 75   reloaded (becau
7870: 73 65 0a 20 20 20 20 23 20 74 68 65 20 73 63 68  se.    # the sch
7880: 65 6d 61 20 77 61 73 20 63 68 61 6e 67 65 64 20  ema was changed 
7890: 62 79 20 61 6e 6f 74 68 65 72 20 63 6f 6e 6e 65  by another conne
78a0: 63 74 69 6f 6e 20 69 6e 20 70 72 61 67 6d 61 2d  ction in pragma-
78b0: 31 35 2e 32 29 2e 20 41 74 20 6f 6e 65 0a 20 20  15.2). At one.  
78c0: 20 20 23 20 70 6f 69 6e 74 20 74 68 65 72 65 20    # point there 
78d0: 77 61 73 20 61 20 62 75 67 20 74 68 61 74 20 72  was a bug that r
78e0: 65 73 65 74 20 74 68 65 20 63 61 63 68 65 5f 73  eset the cache_s
78f0: 69 7a 65 20 74 6f 20 69 74 73 20 64 65 66 61 75  ize to its defau
7900: 6c 74 20 76 61 6c 75 65 0a 20 20 20 20 23 20 77  lt value.    # w
7910: 68 65 6e 20 74 68 69 73 20 68 61 70 70 65 6e 65  hen this happene
7920: 64 2e 20 0a 20 20 20 20 65 78 65 63 73 71 6c 20  d. .    execsql 
7930: 7b 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20  { SELECT * FROM 
7940: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 7d 0a  sqlite_master }.
7950: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 20 50 52      execsql { PR
7960: 41 47 4d 41 20 63 61 63 68 65 5f 73 69 7a 65 20  AGMA cache_size 
7970: 7d 0a 20 20 7d 20 7b 35 39 7d 0a 7d 0a 0a 23 20  }.  } {59}.}..# 
7980: 52 65 73 65 74 20 74 68 65 20 73 71 6c 69 74 65  Reset the sqlite
7990: 33 5f 74 65 6d 70 5f 64 69 72 65 63 74 6f 72 79  3_temp_directory
79a0: 20 76 61 72 69 61 62 6c 65 20 66 6f 72 20 74 68   variable for th
79b0: 65 20 6e 65 78 74 20 72 75 6e 20 6f 66 20 74 65  e next run of te
79c0: 73 74 73 3a 0a 73 71 6c 69 74 65 33 20 64 62 58  sts:.sqlite3 dbX
79d0: 20 3a 6d 65 6d 6f 72 79 3a 0a 64 62 58 20 65 76   :memory:.dbX ev
79e0: 61 6c 20 7b 50 52 41 47 4d 41 20 74 65 6d 70 5f  al {PRAGMA temp_
79f0: 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 20  store_directory 
7a00: 3d 20 22 22 7d 0a 64 62 58 20 63 6c 6f 73 65 0a  = ""}.dbX close.
7a10: 0a 69 66 63 61 70 61 62 6c 65 20 6c 6f 63 6b 5f  .ifcapable lock_
7a20: 70 72 6f 78 79 5f 70 72 61 67 6d 61 73 26 26 70  proxy_pragmas&&p
7a30: 72 65 66 65 72 5f 70 72 6f 78 79 5f 6c 6f 63 6b  refer_proxy_lock
7a40: 69 6e 67 20 7b 0a 20 20 73 65 74 20 73 71 6c 69  ing {.  set sqli
7a50: 74 65 5f 68 6f 73 74 69 64 5f 6e 75 6d 20 31 0a  te_hostid_num 1.
7a60: 0a 20 20 73 65 74 20 75 73 69 6e 67 5f 70 72 6f  .  set using_pro
7a70: 78 79 20 30 0a 20 20 66 6f 72 65 61 63 68 20 7b  xy 0.  foreach {
7a80: 6e 61 6d 65 20 76 61 6c 75 65 7d 20 5b 61 72 72  name value} [arr
7a90: 61 79 20 67 65 74 20 65 6e 76 20 53 51 4c 49 54  ay get env SQLIT
7aa0: 45 5f 46 4f 52 43 45 5f 50 52 4f 58 59 5f 4c 4f  E_FORCE_PROXY_LO
7ab0: 43 4b 49 4e 47 5d 20 7b 0a 20 20 20 20 73 65 74  CKING] {.    set
7ac0: 20 75 73 69 6e 67 5f 70 72 6f 78 79 20 24 76 61   using_proxy $va
7ad0: 6c 75 65 0a 20 20 7d 0a 0a 20 20 23 20 54 65 73  lue.  }..  # Tes
7ae0: 74 20 74 68 65 20 6c 6f 63 6b 5f 70 72 6f 78 79  t the lock_proxy
7af0: 5f 66 69 6c 65 20 70 72 61 67 6d 61 73 2e 0a 20  _file pragmas.. 
7b00: 20 23 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20 20   #.  db close.  
7b10: 73 65 74 20 65 6e 76 28 53 51 4c 49 54 45 5f 46  set env(SQLITE_F
7b20: 4f 52 43 45 5f 50 52 4f 58 59 5f 4c 4f 43 4b 49  ORCE_PROXY_LOCKI
7b30: 4e 47 29 20 22 30 22 0a 0a 20 20 73 71 6c 69 74  NG) "0"..  sqlit
7b40: 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20  e3 db test.db.  
7b50: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31  do_test pragma-1
7b60: 36 2e 31 20 7b 0a 20 20 20 20 65 78 65 63 73 71  6.1 {.    execsq
7b70: 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41  l {.      PRAGMA
7b80: 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65   lock_proxy_file
7b90: 3d 22 6d 79 6c 69 74 74 6c 65 70 72 6f 78 79 22  ="mylittleproxy"
7ba0: 3b 0a 20 20 20 20 20 20 73 65 6c 65 63 74 20 2a  ;.      select *
7bb0: 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f 6d 61 73   from sqlite_mas
7bc0: 74 65 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20 65  ter;.    }.    e
7bd0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50  xecsql {.      P
7be0: 52 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78 79  RAGMA lock_proxy
7bf0: 5f 66 69 6c 65 3b 0a 20 20 20 20 7d 20 0a 20 20  _file;.    } .  
7c00: 7d 20 7b 6d 79 6c 69 74 74 6c 65 70 72 6f 78 79  } {mylittleproxy
7c10: 7d 0a 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61  }..  do_test pra
7c20: 67 6d 61 2d 31 36 2e 32 20 7b 0a 20 20 20 20 73  gma-16.2 {.    s
7c30: 71 6c 69 74 65 33 20 64 62 32 20 74 65 73 74 2e  qlite3 db2 test.
7c40: 64 62 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b  db.    execsql {
7c50: 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 6c 6f  .      PRAGMA lo
7c60: 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 3d 22 6d  ck_proxy_file="m
7c70: 79 6c 69 74 74 6c 65 70 72 6f 78 79 22 3b 0a 20  ylittleproxy";. 
7c80: 20 20 20 7d 20 64 62 32 0a 20 20 7d 20 7b 7d 0a     } db2.  } {}.
7c90: 0a 20 20 64 62 32 20 63 6c 6f 73 65 0a 20 20 64  .  db2 close.  d
7ca0: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 36  o_test pragma-16
7cb0: 2e 32 2e 31 20 7b 0a 20 20 20 20 73 71 6c 69 74  .2.1 {.    sqlit
7cc0: 65 33 20 64 62 32 20 74 65 73 74 2e 64 62 0a 20  e3 db2 test.db. 
7cd0: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
7ce0: 20 20 20 50 52 41 47 4d 41 20 6c 6f 63 6b 5f 70     PRAGMA lock_p
7cf0: 72 6f 78 79 5f 66 69 6c 65 3d 22 3a 61 75 74 6f  roxy_file=":auto
7d00: 3a 22 3b 0a 20 20 20 20 20 20 73 65 6c 65 63 74  :";.      select
7d10: 20 2a 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f 6d   * from sqlite_m
7d20: 61 73 74 65 72 3b 0a 20 20 20 20 7d 20 64 62 32  aster;.    } db2
7d30: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
7d40: 20 20 20 20 20 50 52 41 47 4d 41 20 6c 6f 63 6b       PRAGMA lock
7d50: 5f 70 72 6f 78 79 5f 66 69 6c 65 3b 0a 20 20 20  _proxy_file;.   
7d60: 20 7d 20 64 62 32 0a 20 20 7d 20 7b 6d 79 6c 69   } db2.  } {myli
7d70: 74 74 6c 65 70 72 6f 78 79 7d 0a 0a 20 20 64 62  ttleproxy}..  db
7d80: 32 20 63 6c 6f 73 65 0a 20 20 64 6f 5f 74 65 73  2 close.  do_tes
7d90: 74 20 70 72 61 67 6d 61 2d 31 36 2e 33 20 7b 0a  t pragma-16.3 {.
7da0: 20 20 20 20 73 71 6c 69 74 65 33 20 64 62 32 20      sqlite3 db2 
7db0: 74 65 73 74 2e 64 62 0a 20 20 20 20 65 78 65 63  test.db.    exec
7dc0: 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47  sql {.      PRAG
7dd0: 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69  MA lock_proxy_fi
7de0: 6c 65 3d 22 6d 79 6f 74 68 65 72 70 72 6f 78 79  le="myotherproxy
7df0: 22 3b 0a 20 20 20 20 7d 20 64 62 32 0a 20 20 20  ";.    } db2.   
7e00: 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20   catchsql {.    
7e10: 20 20 73 65 6c 65 63 74 20 2a 20 66 72 6f 6d 20    select * from 
7e20: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 3b 0a 20  sqlite_master;. 
7e30: 20 20 20 7d 20 64 62 32 0a 20 20 7d 20 7b 31 20     } db2.  } {1 
7e40: 7b 64 61 74 61 62 61 73 65 20 69 73 20 6c 6f 63  {database is loc
7e50: 6b 65 64 7d 7d 0a 0a 20 20 64 6f 5f 74 65 73 74  ked}}..  do_test
7e60: 20 70 72 61 67 6d 61 2d 31 36 2e 34 20 7b 0a 20   pragma-16.4 {. 
7e70: 20 20 20 64 62 32 20 63 6c 6f 73 65 0a 20 20 20     db2 close.   
7e80: 20 64 62 20 63 6c 6f 73 65 0a 20 20 20 20 73 71   db close.    sq
7e90: 6c 69 74 65 33 20 64 62 32 20 74 65 73 74 2e 64  lite3 db2 test.d
7ea0: 62 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a  b.    execsql {.
7eb0: 20 20 20 20 20 20 50 52 41 47 4d 41 20 6c 6f 63        PRAGMA loc
7ec0: 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 3d 22 6d 79  k_proxy_file="my
7ed0: 6f 72 69 67 69 6e 61 6c 70 72 6f 78 79 22 3b 0a  originalproxy";.
7ee0: 20 20 20 20 20 20 50 52 41 47 4d 41 20 6c 6f 63        PRAGMA loc
7ef0: 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 3d 22 6d 79  k_proxy_file="my
7f00: 6f 74 68 65 72 70 72 6f 78 79 22 3b 0a 20 20 20  otherproxy";.   
7f10: 20 20 20 50 52 41 47 4d 41 20 6c 6f 63 6b 5f 70     PRAGMA lock_p
7f20: 72 6f 78 79 5f 66 69 6c 65 3b 0a 20 20 20 20 7d  roxy_file;.    }
7f30: 20 64 62 32 0a 20 20 7d 20 7b 6d 79 6f 74 68 65   db2.  } {myothe
7f40: 72 70 72 6f 78 79 7d 0a 0a 20 20 64 62 32 20 63  rproxy}..  db2 c
7f50: 6c 6f 73 65 0a 20 20 73 65 74 20 65 6e 76 28 53  lose.  set env(S
7f60: 51 4c 49 54 45 5f 46 4f 52 43 45 5f 50 52 4f 58  QLITE_FORCE_PROX
7f70: 59 5f 4c 4f 43 4b 49 4e 47 29 20 22 31 22 0a 20  Y_LOCKING) "1". 
7f80: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
7f90: 31 36 2e 35 20 7b 0a 20 20 20 20 73 71 6c 69 74  16.5 {.    sqlit
7fa0: 65 33 20 64 62 32 20 74 65 73 74 2e 64 62 0a 20  e3 db2 test.db. 
7fb0: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
7fc0: 20 20 20 50 52 41 47 4d 41 20 6c 6f 63 6b 5f 70     PRAGMA lock_p
7fd0: 72 6f 78 79 5f 66 69 6c 65 3d 22 3a 61 75 74 6f  roxy_file=":auto
7fe0: 3a 22 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41  :";.      PRAGMA
7ff0: 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65   lock_proxy_file
8000: 3b 0a 20 20 20 20 7d 20 64 62 32 0a 20 20 7d 20  ;.    } db2.  } 
8010: 7b 6d 79 6f 74 68 65 72 70 72 6f 78 79 7d 0a 20  {myotherproxy}. 
8020: 20 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67   .  do_test prag
8030: 6d 61 2d 31 36 2e 36 20 7b 0a 20 20 20 20 64 62  ma-16.6 {.    db
8040: 32 20 63 6c 6f 73 65 0a 20 20 20 20 73 71 6c 69  2 close.    sqli
8050: 74 65 33 20 64 62 32 20 74 65 73 74 32 2e 64 62  te3 db2 test2.db
8060: 0a 20 20 20 20 73 65 74 20 6c 6f 63 6b 70 61 74  .    set lockpat
8070: 68 20 5b 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  h [execsql {.   
8080: 20 20 20 50 52 41 47 4d 41 20 6c 6f 63 6b 5f 70     PRAGMA lock_p
8090: 72 6f 78 79 5f 66 69 6c 65 3d 22 3a 61 75 74 6f  roxy_file=":auto
80a0: 3a 22 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41  :";.      PRAGMA
80b0: 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65   lock_proxy_file
80c0: 3b 0a 20 20 20 20 7d 20 64 62 32 5d 0a 20 20 20  ;.    } db2].   
80d0: 20 73 74 72 69 6e 67 20 6d 61 74 63 68 20 22 2a   string match "*
80e0: 74 65 73 74 32 2e 64 62 3a 61 75 74 6f 3a 22 20  test2.db:auto:" 
80f0: 24 6c 6f 63 6b 70 61 74 68 0a 20 20 7d 20 7b 31  $lockpath.  } {1
8100: 7d 0a 20 20 0a 20 20 73 65 74 20 73 71 6c 69 74  }.  .  set sqlit
8110: 65 5f 68 6f 73 74 69 64 5f 6e 75 6d 20 32 0a 20  e_hostid_num 2. 
8120: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
8130: 31 36 2e 37 20 7b 0a 20 20 20 20 6c 69 73 74 20  16.7 {.    list 
8140: 5b 63 61 74 63 68 20 7b 0a 20 20 20 20 20 20 73  [catch {.      s
8150: 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 32 2e  qlite3 db test2.
8160: 64 62 0a 20 20 20 20 20 20 65 78 65 63 73 71 6c  db.      execsql
8170: 20 7b 20 0a 20 20 20 20 20 20 20 20 50 52 41 47   { .        PRAG
8180: 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69  MA lock_proxy_fi
8190: 6c 65 3d 22 3a 61 75 74 6f 3a 22 3b 0a 20 20 20  le=":auto:";.   
81a0: 20 20 20 20 20 73 65 6c 65 63 74 20 2a 20 66 72       select * fr
81b0: 6f 6d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  om sqlite_master
81c0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 20  ;.      }.    } 
81d0: 6d 73 67 5d 20 24 6d 73 67 0a 20 20 7d 20 7b 31  msg] $msg.  } {1
81e0: 20 7b 64 61 74 61 62 61 73 65 20 69 73 20 6c 6f   {database is lo
81f0: 63 6b 65 64 7d 7d 0a 20 20 64 62 20 63 6c 6f 73  cked}}.  db clos
8200: 65 0a 20 20 0a 20 20 64 6f 5f 74 65 73 74 20 70  e.  .  do_test p
8210: 72 61 67 6d 61 2d 31 36 2e 38 20 7b 0a 20 20 20  ragma-16.8 {.   
8220: 20 6c 69 73 74 20 5b 63 61 74 63 68 20 7b 0a 20   list [catch {. 
8230: 20 20 20 20 20 73 71 6c 69 74 65 33 20 64 62 20       sqlite3 db 
8240: 74 65 73 74 32 2e 64 62 0a 20 20 20 20 20 20 65  test2.db.      e
8250: 78 65 63 73 71 6c 20 7b 20 73 65 6c 65 63 74 20  xecsql { select 
8260: 2a 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f 6d 61  * from sqlite_ma
8270: 73 74 65 72 20 7d 20 0a 20 20 20 20 7d 20 6d 73  ster } .    } ms
8280: 67 5d 20 24 6d 73 67 0a 20 20 7d 20 7b 31 20 7b  g] $msg.  } {1 {
8290: 64 61 74 61 62 61 73 65 20 69 73 20 6c 6f 63 6b  database is lock
82a0: 65 64 7d 7d 0a 0a 20 20 64 62 32 20 63 6c 6f 73  ed}}..  db2 clos
82b0: 65 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67  e.  do_test prag
82c0: 6d 61 2d 31 36 2e 38 2e 31 20 7b 0a 20 20 20 20  ma-16.8.1 {.    
82d0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
82e0: 50 52 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78  PRAGMA lock_prox
82f0: 79 5f 66 69 6c 65 3d 22 79 65 74 61 6e 6f 74 68  y_file="yetanoth
8300: 65 72 70 72 6f 78 79 22 3b 0a 20 20 20 20 20 20  erproxy";.      
8310: 50 52 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78  PRAGMA lock_prox
8320: 79 5f 66 69 6c 65 3b 0a 20 20 20 20 7d 20 0a 20  y_file;.    } . 
8330: 20 7d 20 7b 79 65 74 61 6e 6f 74 68 65 72 70 72   } {yetanotherpr
8340: 6f 78 79 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70  oxy}.  do_test p
8350: 72 61 67 6d 61 2d 31 36 2e 38 2e 32 20 7b 0a 20  ragma-16.8.2 {. 
8360: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
8370: 20 20 20 63 72 65 61 74 65 20 74 61 62 6c 65 20     create table 
8380: 6d 69 6e 65 28 78 29 3b 0a 20 20 20 20 7d 20 0a  mine(x);.    } .
8390: 20 20 7d 20 7b 7d 0a 0a 20 20 64 62 20 63 6c 6f    } {}..  db clo
83a0: 73 65 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61  se.  do_test pra
83b0: 67 6d 61 2d 31 36 2e 39 20 7b 0a 20 20 20 20 73  gma-16.9 {.    s
83c0: 71 6c 69 74 65 33 20 64 62 20 70 72 6f 78 79 74  qlite3 db proxyt
83d0: 65 73 74 2e 64 62 0a 20 20 20 20 73 65 74 20 6c  est.db.    set l
83e0: 6f 63 6b 70 61 74 68 32 20 5b 65 78 65 63 73 71  ockpath2 [execsq
83f0: 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41  l {.      PRAGMA
8400: 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65   lock_proxy_file
8410: 3d 22 3a 61 75 74 6f 3a 22 3b 0a 20 20 20 20 20  =":auto:";.     
8420: 20 50 52 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f   PRAGMA lock_pro
8430: 78 79 5f 66 69 6c 65 3b 0a 20 20 20 20 7d 20 64  xy_file;.    } d
8440: 62 5d 0a 20 20 20 20 73 74 72 69 6e 67 20 6d 61  b].    string ma
8450: 74 63 68 20 22 2a 70 72 6f 78 79 74 65 73 74 2e  tch "*proxytest.
8460: 64 62 3a 61 75 74 6f 3a 22 20 24 6c 6f 63 6b 70  db:auto:" $lockp
8470: 61 74 68 32 0a 20 20 7d 20 7b 31 7d 0a 0a 20 20  ath2.  } {1}..  
8480: 73 65 74 20 65 6e 76 28 53 51 4c 49 54 45 5f 46  set env(SQLITE_F
8490: 4f 52 43 45 5f 50 52 4f 58 59 5f 4c 4f 43 4b 49  ORCE_PROXY_LOCKI
84a0: 4e 47 29 20 24 75 73 69 6e 67 5f 70 72 6f 78 79  NG) $using_proxy
84b0: 0a 20 20 73 65 74 20 73 71 6c 69 74 65 5f 68 6f  .  set sqlite_ho
84c0: 73 74 69 64 5f 6e 75 6d 20 30 0a 7d 0a 0a 23 20  stid_num 0.}..# 
84d0: 50 61 72 73 69 6e 67 20 6f 66 20 61 75 74 6f 5f  Parsing of auto_
84e0: 76 61 63 75 75 6d 20 73 65 74 74 69 6e 67 73 2e  vacuum settings.
84f0: 0a 23 0a 66 6f 72 65 61 63 68 20 7b 61 75 74 6f  .#.foreach {auto
8500: 76 61 63 5f 73 65 74 74 69 6e 67 20 76 61 6c 7d  vac_setting val}
8510: 20 7b 0a 20 20 30 20 30 0a 20 20 31 20 31 0a 20   {.  0 0.  1 1. 
8520: 20 32 20 32 0a 20 20 33 20 30 0a 20 20 2d 31 20   2 2.  3 0.  -1 
8530: 30 0a 20 20 6e 6f 6e 65 20 30 0a 20 20 4e 4f 4e  0.  none 0.  NON
8540: 45 20 30 0a 20 20 4e 6f 4e 65 20 30 0a 20 20 66  E 0.  NoNe 0.  f
8550: 75 6c 6c 20 31 0a 20 20 46 55 4c 4c 20 31 0a 20  ull 1.  FULL 1. 
8560: 20 69 6e 63 72 65 6d 65 6e 74 61 6c 20 32 0a 20   incremental 2. 
8570: 20 49 4e 43 52 45 4d 45 4e 54 41 4c 20 32 0a 20   INCREMENTAL 2. 
8580: 20 2d 31 32 33 34 20 30 0a 20 20 31 32 33 34 20   -1234 0.  1234 
8590: 30 0a 7d 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20  0.} {.  do_test 
85a0: 70 72 61 67 6d 61 2d 31 37 2e 31 2e 24 61 75 74  pragma-17.1.$aut
85b0: 6f 76 61 63 5f 73 65 74 74 69 6e 67 20 7b 0a 20  ovac_setting {. 
85c0: 20 20 20 63 61 74 63 68 20 7b 64 62 20 63 6c 6f     catch {db clo
85d0: 73 65 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 20  se}.    sqlite3 
85e0: 64 62 20 3a 6d 65 6d 6f 72 79 3a 0a 20 20 20 20  db :memory:.    
85f0: 65 78 65 63 73 71 6c 20 22 0a 20 20 20 20 20 20  execsql ".      
8600: 50 52 41 47 4d 41 20 61 75 74 6f 5f 76 61 63 75  PRAGMA auto_vacu
8610: 75 6d 3d 24 3a 3a 61 75 74 6f 76 61 63 5f 73 65  um=$::autovac_se
8620: 74 74 69 6e 67 3b 0a 20 20 20 20 20 20 50 52 41  tting;.      PRA
8630: 47 4d 41 20 61 75 74 6f 5f 76 61 63 75 75 6d 3b  GMA auto_vacuum;
8640: 0a 20 20 20 20 22 0a 20 20 7d 20 24 76 61 6c 0a  .    ".  } $val.
8650: 7d 0a 0a 23 20 50 61 72 73 69 6e 67 20 6f 66 20  }..# Parsing of 
8660: 74 65 6d 70 5f 73 74 6f 72 65 20 73 65 74 74 69  temp_store setti
8670: 6e 67 73 2e 0a 23 0a 66 6f 72 65 61 63 68 20 7b  ngs..#.foreach {
8680: 74 65 6d 70 5f 73 65 74 74 69 6e 67 20 76 61 6c  temp_setting val
8690: 7d 20 7b 0a 20 20 30 20 30 0a 20 20 31 20 31 0a  } {.  0 0.  1 1.
86a0: 20 20 32 20 32 0a 20 20 33 20 30 0a 20 20 2d 31    2 2.  3 0.  -1
86b0: 20 30 0a 20 20 66 69 6c 65 20 31 0a 20 20 46 49   0.  file 1.  FI
86c0: 4c 45 20 31 0a 20 20 66 49 6c 45 20 31 0a 20 20  LE 1.  fIlE 1.  
86d0: 6d 65 6d 6f 72 79 20 32 0a 20 20 4d 45 4d 4f 52  memory 2.  MEMOR
86e0: 59 20 32 0a 20 20 4d 65 4d 6f 52 79 20 32 0a 7d  Y 2.  MeMoRy 2.}
86f0: 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61   {.  do_test pra
8700: 67 6d 61 2d 31 38 2e 31 2e 24 74 65 6d 70 5f 73  gma-18.1.$temp_s
8710: 65 74 74 69 6e 67 20 7b 0a 20 20 20 20 63 61 74  etting {.    cat
8720: 63 68 20 7b 64 62 20 63 6c 6f 73 65 7d 0a 20 20  ch {db close}.  
8730: 20 20 73 71 6c 69 74 65 33 20 64 62 20 3a 6d 65    sqlite3 db :me
8740: 6d 6f 72 79 3a 0a 20 20 20 20 65 78 65 63 73 71  mory:.    execsq
8750: 6c 20 22 0a 20 20 20 20 20 20 50 52 41 47 4d 41  l ".      PRAGMA
8760: 20 74 65 6d 70 5f 73 74 6f 72 65 3d 24 3a 3a 74   temp_store=$::t
8770: 65 6d 70 5f 73 65 74 74 69 6e 67 3b 0a 20 20 20  emp_setting;.   
8780: 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73     PRAGMA temp_s
8790: 74 6f 72 65 3d 24 3a 3a 74 65 6d 70 5f 73 65 74  tore=$::temp_set
87a0: 74 69 6e 67 3b 0a 20 20 20 20 20 20 50 52 41 47  ting;.      PRAG
87b0: 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 3b 0a 20  MA temp_store;. 
87c0: 20 20 20 22 0a 20 20 7d 20 24 76 61 6c 0a 7d 0a     ".  } $val.}.
87d0: 0a 23 20 54 68 65 20 53 51 4c 49 54 45 5f 46 43  .# The SQLITE_FC
87e0: 4e 54 4c 5f 50 52 41 47 4d 41 20 6c 6f 67 69 63  NTL_PRAGMA logic
87f0: 2c 20 77 69 74 68 20 65 72 72 6f 72 20 68 61 6e  , with error han
8800: 64 6c 69 6e 67 2e 0a 23 0a 64 62 20 63 6c 6f 73  dling..#.db clos
8810: 65 0a 74 65 73 74 76 66 73 20 74 76 66 73 0a 73  e.testvfs tvfs.s
8820: 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64  qlite3 db test.d
8830: 62 20 2d 76 66 73 20 74 76 66 73 0a 64 6f 5f 74  b -vfs tvfs.do_t
8840: 65 73 74 20 70 72 61 67 6d 61 2d 31 39 2e 31 20  est pragma-19.1 
8850: 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 50 52  {.  catchsql {PR
8860: 41 47 4d 41 20 65 72 72 6f 72 7d 0a 7d 20 7b 31  AGMA error}.} {1
8870: 20 7b 53 51 4c 20 6c 6f 67 69 63 20 65 72 72 6f   {SQL logic erro
8880: 72 20 6f 72 20 6d 69 73 73 69 6e 67 20 64 61 74  r or missing dat
8890: 61 62 61 73 65 7d 7d 0a 64 6f 5f 74 65 73 74 20  abase}}.do_test 
88a0: 70 72 61 67 6d 61 2d 31 39 2e 32 20 7b 0a 20 20  pragma-19.2 {.  
88b0: 63 61 74 63 68 73 71 6c 20 7b 50 52 41 47 4d 41  catchsql {PRAGMA
88c0: 20 65 72 72 6f 72 3d 27 54 68 69 73 20 69 73 20   error='This is 
88d0: 74 68 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67  the error messag
88e0: 65 27 7d 0a 7d 20 7b 31 20 7b 54 68 69 73 20 69  e'}.} {1 {This i
88f0: 73 20 74 68 65 20 65 72 72 6f 72 20 6d 65 73 73  s the error mess
8900: 61 67 65 7d 7d 0a 64 6f 5f 74 65 73 74 20 70 72  age}}.do_test pr
8910: 61 67 6d 61 2d 31 39 2e 33 20 7b 0a 20 20 63 61  agma-19.3 {.  ca
8920: 74 63 68 73 71 6c 20 7b 50 52 41 47 4d 41 20 65  tchsql {PRAGMA e
8930: 72 72 6f 72 3d 27 37 20 54 68 69 73 20 69 73 20  rror='7 This is 
8940: 74 68 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67  the error messag
8950: 65 27 7d 0a 7d 20 7b 31 20 7b 54 68 69 73 20 69  e'}.} {1 {This i
8960: 73 20 74 68 65 20 65 72 72 6f 72 20 6d 65 73 73  s the error mess
8970: 61 67 65 7d 7d 0a 64 6f 5f 74 65 73 74 20 70 72  age}}.do_test pr
8980: 61 67 6d 61 2d 31 39 2e 34 20 7b 0a 20 20 63 61  agma-19.4 {.  ca
8990: 74 63 68 73 71 6c 20 7b 50 52 41 47 4d 41 20 65  tchsql {PRAGMA e
89a0: 72 72 6f 72 3d 37 7d 0a 7d 20 7b 31 20 7b 6f 75  rror=7}.} {1 {ou
89b0: 74 20 6f 66 20 6d 65 6d 6f 72 79 7d 7d 0a 64 6f  t of memory}}.do
89c0: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 39 2e  _test pragma-19.
89d0: 35 20 7b 0a 20 20 66 69 6c 65 20 74 61 69 6c 20  5 {.  file tail 
89e0: 5b 6c 69 6e 64 65 78 20 5b 65 78 65 63 73 71 6c  [lindex [execsql
89f0: 20 7b 50 52 41 47 4d 41 20 66 69 6c 65 6e 61 6d   {PRAGMA filenam
8a00: 65 7d 5d 20 30 5d 0a 7d 20 7b 74 65 73 74 2e 64  e}] 0].} {test.d
8a10: 62 7d 0a 0a 69 66 20 7b 24 74 63 6c 5f 70 6c 61  b}..if {$tcl_pla
8a20: 74 66 6f 72 6d 28 70 6c 61 74 66 6f 72 6d 29 3d  tform(platform)=
8a30: 3d 22 77 69 6e 64 6f 77 73 22 7d 20 7b 0a 23 20  ="windows"} {.# 
8a40: 54 65 73 74 20 64 61 74 61 5f 73 74 6f 72 65 5f  Test data_store_
8a50: 64 69 72 65 63 74 6f 72 79 20 70 72 61 67 6d 61  directory pragma
8a60: 0a 23 0a 64 62 20 63 6c 6f 73 65 0a 73 71 6c 69  .#.db close.sqli
8a70: 74 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a 66  te3 db test.db.f
8a80: 69 6c 65 20 6d 6b 64 69 72 20 64 61 74 61 5f 64  ile mkdir data_d
8a90: 69 72 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  ir.do_test pragm
8aa0: 61 2d 32 30 2e 31 20 7b 0a 20 20 63 61 74 63 68  a-20.1 {.  catch
8ab0: 73 71 6c 20 7b 50 52 41 47 4d 41 20 64 61 74 61  sql {PRAGMA data
8ac0: 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79  _store_directory
8ad0: 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65  }.} {0 {}}.do_te
8ae0: 73 74 20 70 72 61 67 6d 61 2d 32 30 2e 32 20 7b  st pragma-20.2 {
8af0: 0a 20 20 73 65 74 20 70 77 64 20 5b 73 74 72 69  .  set pwd [stri
8b00: 6e 67 20 6d 61 70 20 7b 27 20 27 27 7d 20 5b 66  ng map {' ''} [f
8b10: 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b  ile nativename [
8b20: 67 65 74 5f 70 77 64 5d 5d 5d 0a 20 20 63 61 74  get_pwd]]].  cat
8b30: 63 68 73 71 6c 20 22 50 52 41 47 4d 41 20 64 61  chsql "PRAGMA da
8b40: 74 61 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f  ta_store_directo
8b50: 72 79 3d 27 24 70 77 64 27 3b 22 0a 7d 20 7b 30  ry='$pwd';".} {0
8b60: 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61   {}}.do_test pra
8b70: 67 6d 61 2d 32 30 2e 33 20 7b 0a 20 20 63 61 74  gma-20.3 {.  cat
8b80: 63 68 73 71 6c 20 7b 50 52 41 47 4d 41 20 64 61  chsql {PRAGMA da
8b90: 74 61 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f  ta_store_directo
8ba0: 72 79 7d 0a 7d 20 5b 6c 69 73 74 20 30 20 5b 6c  ry}.} [list 0 [l
8bb0: 69 73 74 20 5b 66 69 6c 65 20 6e 61 74 69 76 65  ist [file native
8bc0: 6e 61 6d 65 20 5b 67 65 74 5f 70 77 64 5d 5d 5d  name [get_pwd]]]
8bd0: 5d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  ].do_test pragma
8be0: 2d 32 30 2e 34 20 7b 0a 20 20 73 65 74 20 70 77  -20.4 {.  set pw
8bf0: 64 20 5b 73 74 72 69 6e 67 20 6d 61 70 20 7b 27  d [string map {'
8c00: 20 27 27 7d 20 5b 66 69 6c 65 20 6e 61 74 69 76   ''} [file nativ
8c10: 65 6e 61 6d 65 20 5c 0a 20 20 20 20 5b 66 69 6c  ename \.    [fil
8c20: 65 20 6a 6f 69 6e 20 5b 67 65 74 5f 70 77 64 5d  e join [get_pwd]
8c30: 20 64 61 74 61 5f 64 69 72 5d 5d 5d 0a 20 20 63   data_dir]]].  c
8c40: 61 74 63 68 73 71 6c 20 22 50 52 41 47 4d 41 20  atchsql "PRAGMA 
8c50: 64 61 74 61 5f 73 74 6f 72 65 5f 64 69 72 65 63  data_store_direc
8c60: 74 6f 72 79 3d 27 24 70 77 64 27 3b 22 0a 7d 20  tory='$pwd';".} 
8c70: 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 70  {0 {}}.do_test p
8c80: 72 61 67 6d 61 2d 32 30 2e 35 20 7b 0a 20 20 73  ragma-20.5 {.  s
8c90: 71 6c 69 74 65 33 20 64 62 32 20 74 65 73 74 32  qlite3 db2 test2
8ca0: 2e 64 62 0a 20 20 63 61 74 63 68 73 71 6c 20 22  .db.  catchsql "
8cb0: 50 52 41 47 4d 41 20 64 61 74 61 62 61 73 65 5f  PRAGMA database_
8cc0: 6c 69 73 74 3b 22 20 64 62 32 0a 7d 20 5b 6c 69  list;" db2.} [li
8cd0: 73 74 20 30 20 5b 6c 69 73 74 20 30 20 6d 61 69  st 0 [list 0 mai
8ce0: 6e 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61  n [file nativena
8cf0: 6d 65 20 5c 0a 20 20 20 20 5b 66 69 6c 65 20 6a  me \.    [file j
8d00: 6f 69 6e 20 5b 67 65 74 5f 70 77 64 5d 20 64 61  oin [get_pwd] da
8d10: 74 61 5f 64 69 72 20 74 65 73 74 32 2e 64 62 5d  ta_dir test2.db]
8d20: 5d 5d 5d 0a 63 61 74 63 68 20 7b 64 62 32 20 63  ]]].catch {db2 c
8d30: 6c 6f 73 65 7d 0a 64 6f 5f 74 65 73 74 20 70 72  lose}.do_test pr
8d40: 61 67 6d 61 2d 32 30 2e 36 20 7b 0a 20 20 73 71  agma-20.6 {.  sq
8d50: 6c 69 74 65 33 20 64 62 32 20 5b 66 69 6c 65 20  lite3 db2 [file 
8d60: 6a 6f 69 6e 20 5b 67 65 74 5f 70 77 64 5d 20 74  join [get_pwd] t
8d70: 65 73 74 32 2e 64 62 5d 0a 20 20 63 61 74 63 68  est2.db].  catch
8d80: 73 71 6c 20 22 50 52 41 47 4d 41 20 64 61 74 61  sql "PRAGMA data
8d90: 62 61 73 65 5f 6c 69 73 74 3b 22 20 64 62 32 0a  base_list;" db2.
8da0: 7d 20 5b 6c 69 73 74 20 30 20 5b 6c 69 73 74 20  } [list 0 [list 
8db0: 30 20 6d 61 69 6e 20 5b 66 69 6c 65 20 6e 61 74  0 main [file nat
8dc0: 69 76 65 6e 61 6d 65 20 5c 0a 20 20 20 20 5b 66  ivename \.    [f
8dd0: 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 5f 70 77  ile join [get_pw
8de0: 64 5d 20 74 65 73 74 32 2e 64 62 5d 5d 5d 5d 0a  d] test2.db]]]].
8df0: 63 61 74 63 68 20 7b 64 62 32 20 63 6c 6f 73 65  catch {db2 close
8e00: 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  }.do_test pragma
8e10: 2d 32 30 2e 37 20 7b 0a 20 20 63 61 74 63 68 73  -20.7 {.  catchs
8e20: 71 6c 20 22 50 52 41 47 4d 41 20 64 61 74 61 5f  ql "PRAGMA data_
8e30: 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 3d  store_directory=
8e40: 27 27 3b 22 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f  '';".} {0 {}}.do
8e50: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 32 30 2e  _test pragma-20.
8e60: 38 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b  8 {.  catchsql {
8e70: 50 52 41 47 4d 41 20 64 61 74 61 5f 73 74 6f 72  PRAGMA data_stor
8e80: 65 5f 64 69 72 65 63 74 6f 72 79 7d 0a 7d 20 7b  e_directory}.} {
8e90: 30 20 7b 7d 7d 0a 0a 66 6f 72 63 65 64 65 6c 65  0 {}}..forcedele
8ea0: 74 65 20 64 61 74 61 5f 64 69 72 0a 7d 20 3b 23  te data_dir.} ;#
8eb0: 20 65 6e 64 69 66 20 77 69 6e 64 6f 77 73 0a 0a   endif windows..
8ec0: 64 6f 5f 74 65 73 74 20 32 31 2e 31 20 7b 0a 20  do_test 21.1 {. 
8ed0: 20 23 20 43 72 65 61 74 65 20 61 20 63 6f 72 72   # Create a corr
8ee0: 75 70 74 20 64 61 74 61 62 61 73 65 20 69 6e 20  upt database in 
8ef0: 74 65 73 74 65 72 72 2e 64 62 2e 20 41 6e 64 20  testerr.db. And 
8f00: 61 20 6e 6f 6e 2d 63 6f 72 72 75 70 74 20 61 74  a non-corrupt at
8f10: 20 74 65 73 74 2e 64 62 2e 0a 20 20 23 0a 20 20   test.db..  #.  
8f20: 64 62 20 63 6c 6f 73 65 0a 20 20 66 6f 72 63 65  db close.  force
8f30: 64 65 6c 65 74 65 20 74 65 73 74 2e 64 62 0a 20  delete test.db. 
8f40: 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74   sqlite3 db test
8f50: 2e 64 62 0a 20 20 65 78 65 63 73 71 6c 20 7b 20  .db.  execsql { 
8f60: 0a 20 20 20 20 50 52 41 47 4d 41 20 70 61 67 65  .    PRAGMA page
8f70: 5f 73 69 7a 65 20 3d 20 31 30 32 34 3b 0a 20 20  _size = 1024;.  
8f80: 20 20 50 52 41 47 4d 41 20 61 75 74 6f 5f 76 61    PRAGMA auto_va
8f90: 63 75 75 6d 20 3d 20 30 3b 0a 20 20 20 20 43 52  cuum = 0;.    CR
8fa0: 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 61 20  EATE TABLE t1(a 
8fb0: 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 62 29 3b  PRIMARY KEY, b);
8fc0: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
8fd0: 20 74 31 20 56 41 4c 55 45 53 28 31 2c 20 31 29   t1 VALUES(1, 1)
8fe0: 3b 0a 20 20 7d 0a 20 20 66 6f 72 20 7b 73 65 74  ;.  }.  for {set
8ff0: 20 69 20 30 7d 20 7b 24 69 20 3c 20 31 30 7d 20   i 0} {$i < 10} 
9000: 7b 69 6e 63 72 20 69 7d 20 7b 0a 20 20 20 20 65  {incr i} {.    e
9010: 78 65 63 73 71 6c 20 7b 20 49 4e 53 45 52 54 20  xecsql { INSERT 
9020: 49 4e 54 4f 20 74 31 20 53 45 4c 45 43 54 20 61  INTO t1 SELECT a
9030: 20 2b 20 28 31 20 3c 3c 20 24 69 29 2c 20 62 20   + (1 << $i), b 
9040: 2b 20 28 31 20 3c 3c 20 24 69 29 20 46 52 4f 4d  + (1 << $i) FROM
9050: 20 74 31 20 7d 0a 20 20 7d 0a 20 20 64 62 20 63   t1 }.  }.  db c
9060: 6c 6f 73 65 0a 20 20 66 6f 72 63 65 63 6f 70 79  lose.  forcecopy
9070: 20 74 65 73 74 2e 64 62 20 74 65 73 74 65 72 72   test.db testerr
9080: 2e 64 62 0a 20 20 68 65 78 69 6f 5f 77 72 69 74  .db.  hexio_writ
9090: 65 20 74 65 73 74 65 72 72 2e 64 62 20 31 35 30  e testerr.db 150
90a0: 30 30 20 5b 73 74 72 69 6e 67 20 72 65 70 65 61  00 [string repea
90b0: 74 20 35 35 20 31 30 30 5d 0a 7d 20 7b 31 30 30  t 55 100].} {100
90c0: 7d 0a 0a 73 65 74 20 6d 61 69 6e 65 72 72 20 7b  }..set mainerr {
90d0: 2a 2a 2a 20 69 6e 20 64 61 74 61 62 61 73 65 20  *** in database 
90e0: 6d 61 69 6e 20 2a 2a 2a 0a 4d 75 6c 74 69 70 6c  main ***.Multipl
90f0: 65 20 75 73 65 73 20 66 6f 72 20 62 79 74 65 20  e uses for byte 
9100: 36 37 32 20 6f 66 20 70 61 67 65 20 31 35 7d 0a  672 of page 15}.
9110: 73 65 74 20 61 75 78 65 72 72 20 7b 2a 2a 2a 20  set auxerr {*** 
9120: 69 6e 20 64 61 74 61 62 61 73 65 20 61 75 78 20  in database aux 
9130: 2a 2a 2a 0a 4d 75 6c 74 69 70 6c 65 20 75 73 65  ***.Multiple use
9140: 73 20 66 6f 72 20 62 79 74 65 20 36 37 32 20 6f  s for byte 672 o
9150: 66 20 70 61 67 65 20 31 35 7d 0a 0a 64 6f 5f 74  f page 15}..do_t
9160: 65 73 74 20 32 32 2e 32 20 7b 0a 20 20 63 61 74  est 22.2 {.  cat
9170: 63 68 20 7b 20 64 62 20 63 6c 6f 73 65 20 7d 0a  ch { db close }.
9180: 20 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73    sqlite3 db tes
9190: 74 65 72 72 2e 64 62 0a 20 20 65 78 65 63 73 71  terr.db.  execsq
91a0: 6c 20 7b 20 50 52 41 47 4d 41 20 69 6e 74 65 67  l { PRAGMA integ
91b0: 72 69 74 79 5f 63 68 65 63 6b 20 7d 0a 7d 20 5b  rity_check }.} [
91c0: 6c 69 73 74 20 24 6d 61 69 6e 65 72 72 5d 0a 0a  list $mainerr]..
91d0: 64 6f 5f 74 65 73 74 20 32 32 2e 33 2e 31 20 7b  do_test 22.3.1 {
91e0: 0a 20 20 63 61 74 63 68 20 7b 20 64 62 20 63 6c  .  catch { db cl
91f0: 6f 73 65 20 7d 0a 20 20 73 71 6c 69 74 65 33 20  ose }.  sqlite3 
9200: 64 62 20 74 65 73 74 2e 64 62 0a 20 20 65 78 65  db test.db.  exe
9210: 63 73 71 6c 20 7b 20 0a 20 20 20 20 41 54 54 41  csql { .    ATTA
9220: 43 48 20 27 74 65 73 74 65 72 72 2e 64 62 27 20  CH 'testerr.db' 
9230: 41 53 20 27 61 75 78 27 3b 0a 20 20 20 20 50 52  AS 'aux';.    PR
9240: 41 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63  AGMA integrity_c
9250: 68 65 63 6b 3b 0a 20 20 7d 0a 7d 20 5b 6c 69 73  heck;.  }.} [lis
9260: 74 20 24 61 75 78 65 72 72 5d 0a 64 6f 5f 74 65  t $auxerr].do_te
9270: 73 74 20 32 32 2e 33 2e 32 20 7b 0a 20 20 65 78  st 22.3.2 {.  ex
9280: 65 63 73 71 6c 20 7b 20 50 52 41 47 4d 41 20 6d  ecsql { PRAGMA m
9290: 61 69 6e 2e 69 6e 74 65 67 72 69 74 79 5f 63 68  ain.integrity_ch
92a0: 65 63 6b 3b 20 7d 0a 7d 20 7b 6f 6b 7d 0a 64 6f  eck; }.} {ok}.do
92b0: 5f 74 65 73 74 20 32 32 2e 33 2e 33 20 7b 0a 20  _test 22.3.3 {. 
92c0: 20 65 78 65 63 73 71 6c 20 7b 20 50 52 41 47 4d   execsql { PRAGM
92d0: 41 20 61 75 78 2e 69 6e 74 65 67 72 69 74 79 5f  A aux.integrity_
92e0: 63 68 65 63 6b 3b 20 7d 0a 7d 20 5b 6c 69 73 74  check; }.} [list
92f0: 20 24 61 75 78 65 72 72 5d 0a 0a 64 6f 5f 74 65   $auxerr]..do_te
9300: 73 74 20 32 32 2e 34 2e 31 20 7b 0a 20 20 63 61  st 22.4.1 {.  ca
9310: 74 63 68 20 7b 20 64 62 20 63 6c 6f 73 65 20 7d  tch { db close }
9320: 0a 20 20 73 71 6c 69 74 65 33 20 64 62 20 74 65  .  sqlite3 db te
9330: 73 74 65 72 72 2e 64 62 0a 20 20 65 78 65 63 73  sterr.db.  execs
9340: 71 6c 20 7b 20 0a 20 20 20 20 41 54 54 41 43 48  ql { .    ATTACH
9350: 20 27 74 65 73 74 2e 64 62 27 20 41 53 20 27 61   'test.db' AS 'a
9360: 75 78 27 3b 0a 20 20 20 20 50 52 41 47 4d 41 20  ux';.    PRAGMA 
9370: 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 3b  integrity_check;
9380: 0a 20 20 7d 0a 7d 20 5b 6c 69 73 74 20 24 6d 61  .  }.} [list $ma
9390: 69 6e 65 72 72 5d 0a 64 6f 5f 74 65 73 74 20 32  inerr].do_test 2
93a0: 32 2e 34 2e 32 20 7b 0a 20 20 65 78 65 63 73 71  2.4.2 {.  execsq
93b0: 6c 20 7b 20 50 52 41 47 4d 41 20 6d 61 69 6e 2e  l { PRAGMA main.
93c0: 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 3b  integrity_check;
93d0: 20 7d 0a 7d 20 5b 6c 69 73 74 20 24 6d 61 69 6e   }.} [list $main
93e0: 65 72 72 5d 0a 64 6f 5f 74 65 73 74 20 32 32 2e  err].do_test 22.
93f0: 34 2e 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  4.3 {.  execsql 
9400: 7b 20 50 52 41 47 4d 41 20 61 75 78 2e 69 6e 74  { PRAGMA aux.int
9410: 65 67 72 69 74 79 5f 63 68 65 63 6b 3b 20 7d 0a  egrity_check; }.
9420: 7d 20 7b 6f 6b 7d 0a 0a 64 62 20 63 6c 6f 73 65  } {ok}..db close
9430: 0a 66 6f 72 63 65 64 65 6c 65 74 65 20 74 65 73  .forcedelete tes
9440: 74 2e 64 62 20 74 65 73 74 2e 64 62 2d 77 61 6c  t.db test.db-wal
9450: 20 74 65 73 74 2e 64 62 2d 6a 6f 75 72 6e 61 6c   test.db-journal
9460: 0a 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74  .sqlite3 db test
9470: 2e 64 62 0a 73 71 6c 69 74 65 33 20 64 62 32 20  .db.sqlite3 db2 
9480: 74 65 73 74 2e 64 62 0a 64 6f 5f 74 65 73 74 20  test.db.do_test 
9490: 32 33 2e 31 20 7b 0a 20 20 64 62 20 65 76 61 6c  23.1 {.  db eval
94a0: 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41   {.    CREATE TA
94b0: 42 4c 45 20 74 31 28 61 20 49 4e 54 45 47 45 52  BLE t1(a INTEGER
94c0: 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 62 2c 63   PRIMARY KEY,b,c
94d0: 2c 64 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20  ,d);.    CREATE 
94e0: 49 4e 44 45 58 20 69 31 20 4f 4e 20 74 31 28 62  INDEX i1 ON t1(b
94f0: 2c 63 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20  ,c);.    CREATE 
9500: 49 4e 44 45 58 20 69 32 20 4f 4e 20 74 31 28 63  INDEX i2 ON t1(c
9510: 2c 64 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20  ,d);.    CREATE 
9520: 54 41 42 4c 45 20 74 32 28 78 20 49 4e 54 45 47  TABLE t2(x INTEG
9530: 45 52 20 52 45 46 45 52 45 4e 43 45 53 20 74 31  ER REFERENCES t1
9540: 29 3b 0a 20 20 7d 0a 20 20 64 62 32 20 65 76 61  );.  }.  db2 eva
9550: 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46  l {SELECT name F
9560: 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
9570: 72 7d 0a 7d 20 7b 74 31 20 69 31 20 69 32 20 74  r}.} {t1 i1 i2 t
9580: 32 7d 0a 64 6f 5f 74 65 73 74 20 32 33 2e 32 20  2}.do_test 23.2 
9590: 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a 20 20  {.  db eval {.  
95a0: 20 20 44 52 4f 50 20 49 4e 44 45 58 20 69 32 3b    DROP INDEX i2;
95b0: 0a 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45  .    CREATE INDE
95c0: 58 20 69 32 20 4f 4e 20 74 31 28 63 2c 64 2c 62  X i2 ON t1(c,d,b
95d0: 29 3b 0a 20 20 7d 0a 20 20 64 62 32 20 65 76 61  );.  }.  db2 eva
95e0: 6c 20 7b 50 52 41 47 4d 41 20 69 6e 64 65 78 5f  l {PRAGMA index_
95f0: 69 6e 66 6f 28 69 32 29 7d 0a 7d 20 7b 30 20 32  info(i2)}.} {0 2
9600: 20 63 20 31 20 33 20 64 20 32 20 31 20 62 7d 0a   c 1 3 d 2 1 b}.
9610: 64 6f 5f 74 65 73 74 20 32 33 2e 33 20 7b 0a 20  do_test 23.3 {. 
9620: 20 64 62 20 65 76 61 6c 20 7b 0a 20 20 20 20 43   db eval {.    C
9630: 52 45 41 54 45 20 49 4e 44 45 58 20 69 33 20 4f  REATE INDEX i3 O
9640: 4e 20 74 31 28 64 2c 62 2c 63 29 3b 0a 20 20 7d  N t1(d,b,c);.  }
9650: 0a 20 20 64 62 32 20 65 76 61 6c 20 7b 50 52 41  .  db2 eval {PRA
9660: 47 4d 41 20 69 6e 64 65 78 5f 6c 69 73 74 28 74  GMA index_list(t
9670: 31 29 7d 0a 7d 20 7b 2f 30 20 69 33 20 30 20 5c  1)}.} {/0 i3 0 \
9680: 64 2b 20 31 20 69 32 20 30 20 5c 64 2b 20 32 20  d+ 1 i2 0 \d+ 2 
9690: 69 31 20 30 20 5c 64 2b 2f 7d 0a 64 6f 5f 74 65  i1 0 \d+/}.do_te
96a0: 73 74 20 32 33 2e 34 20 7b 0a 20 20 64 62 20 65  st 23.4 {.  db e
96b0: 76 61 6c 20 7b 0a 20 20 20 20 41 4c 54 45 52 20  val {.    ALTER 
96c0: 54 41 42 4c 45 20 74 31 20 41 44 44 20 43 4f 4c  TABLE t1 ADD COL
96d0: 55 4d 4e 20 65 3b 0a 20 20 7d 0a 20 20 64 62 32  UMN e;.  }.  db2
96e0: 20 65 76 61 6c 20 7b 0a 20 20 20 20 50 52 41 47   eval {.    PRAG
96f0: 4d 41 20 74 61 62 6c 65 5f 69 6e 66 6f 28 74 31  MA table_info(t1
9700: 29 3b 0a 20 20 7d 0a 7d 20 7b 2f 34 20 65 20 7b  );.  }.} {/4 e {
9710: 7d 20 30 20 7b 7d 20 30 2f 7d 0a 64 6f 5f 74 65  } 0 {} 0/}.do_te
9720: 73 74 20 32 33 2e 35 20 7b 0a 20 20 64 62 20 65  st 23.5 {.  db e
9730: 76 61 6c 20 7b 0a 20 20 20 20 44 52 4f 50 20 54  val {.    DROP T
9740: 41 42 4c 45 20 74 32 3b 0a 20 20 20 20 43 52 45  ABLE t2;.    CRE
9750: 41 54 45 20 54 41 42 4c 45 20 74 32 28 78 2c 20  ATE TABLE t2(x, 
9760: 79 20 49 4e 54 45 47 45 52 20 52 45 46 45 52 45  y INTEGER REFERE
9770: 4e 43 45 53 20 74 31 29 3b 0a 20 20 7d 0a 20 20  NCES t1);.  }.  
9780: 64 62 32 20 65 76 61 6c 20 7b 0a 20 20 20 20 50  db2 eval {.    P
9790: 52 41 47 4d 41 20 66 6f 72 65 69 67 6e 5f 6b 65  RAGMA foreign_ke
97a0: 79 5f 6c 69 73 74 28 74 32 29 3b 0a 20 20 7d 0a  y_list(t2);.  }.
97b0: 7d 20 7b 30 20 30 20 74 31 20 79 20 7b 7d 20 7b  } {0 0 t1 y {} {
97c0: 4e 4f 20 41 43 54 49 4f 4e 7d 20 7b 4e 4f 20 41  NO ACTION} {NO A
97d0: 43 54 49 4f 4e 7d 20 4e 4f 4e 45 7d 0a 0a 66 69  CTION} NONE}..fi
97e0: 6e 69 73 68 5f 74 65 73 74 0a                    nish_test.