/ Hex Artifact Content
Login

Artifact 3ce8294c0f86ef7586e44fdc7be887f0cfeaec01093ad3e24d5736b96fb55984:


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 43 61 70 74 75 72 65 20 74 68 65 20 6f 75  # Capture the ou
0780: 74 70 75 74 20 6f 66 20 61 20 70 72 61 67 6d 61  tput of a pragma
0790: 20 69 6e 20 61 20 54 45 4d 50 20 74 61 62 6c 65   in a TEMP table
07a0: 2e 0a 23 0a 70 72 6f 63 20 63 61 70 74 75 72 65  ..#.proc capture
07b0: 5f 70 72 61 67 6d 61 20 7b 64 62 20 74 61 62 6e  _pragma {db tabn
07c0: 61 6d 65 20 73 71 6c 7d 20 7b 0a 20 20 24 64 62  ame sql} {.  $db
07d0: 20 65 76 61 6c 20 22 44 52 4f 50 20 54 41 42 4c   eval "DROP TABL
07e0: 45 20 49 46 20 45 58 49 53 54 53 20 74 65 6d 70  E IF EXISTS temp
07f0: 2e 24 74 61 62 6e 61 6d 65 22 0a 20 20 73 65 74  .$tabname".  set
0800: 20 6f 6e 63 65 20 31 0a 20 20 24 64 62 20 65 76   once 1.  $db ev
0810: 61 6c 20 24 73 71 6c 20 78 20 7b 0a 20 20 20 20  al $sql x {.    
0820: 69 66 20 7b 24 6f 6e 63 65 7d 20 7b 0a 20 20 20  if {$once} {.   
0830: 20 20 20 73 65 74 20 6f 6e 63 65 20 30 0a 20 20     set once 0.  
0840: 20 20 20 20 73 65 74 20 69 6e 73 20 22 49 4e 53      set ins "INS
0850: 45 52 54 20 49 4e 54 4f 20 24 74 61 62 6e 61 6d  ERT INTO $tabnam
0860: 65 20 56 41 4c 55 45 53 22 0a 20 20 20 20 20 20  e VALUES".      
0870: 73 65 74 20 63 72 74 61 62 20 22 43 52 45 41 54  set crtab "CREAT
0880: 45 20 54 45 4d 50 20 54 41 42 4c 45 20 24 74 61  E TEMP TABLE $ta
0890: 62 6e 61 6d 65 20 22 0a 20 20 20 20 20 20 73 65  bname ".      se
08a0: 74 20 73 65 70 20 22 28 22 0a 20 20 20 20 20 20  t sep "(".      
08b0: 66 6f 72 65 61 63 68 20 63 6f 6c 20 24 78 28 2a  foreach col $x(*
08c0: 29 20 7b 0a 20 20 20 20 20 20 20 20 61 70 70 65  ) {.        appe
08d0: 6e 64 20 69 6e 73 20 24 7b 73 65 70 7d 5c 24 78  nd ins ${sep}\$x
08e0: 28 24 63 6f 6c 29 0a 20 20 20 20 20 20 20 20 61  ($col).        a
08f0: 70 70 65 6e 64 20 63 72 74 61 62 20 24 7b 73 65  ppend crtab ${se
0900: 70 7d 5c 22 24 63 6f 6c 5c 22 0a 20 20 20 20 20  p}\"$col\".     
0910: 20 20 20 73 65 74 20 73 65 70 20 2c 0a 20 20 20     set sep ,.   
0920: 20 20 20 7d 0a 20 20 20 20 20 20 61 70 70 65 6e     }.      appen
0930: 64 20 69 6e 73 20 29 0a 20 20 20 20 20 20 61 70  d ins ).      ap
0940: 70 65 6e 64 20 63 72 74 61 62 20 29 0a 20 20 20  pend crtab ).   
0950: 20 20 20 24 64 62 20 65 76 61 6c 20 24 63 72 74     $db eval $crt
0960: 61 62 0a 20 20 20 20 7d 0a 20 20 20 20 24 64 62  ab.    }.    $db
0970: 20 65 76 61 6c 20 24 69 6e 73 0a 20 20 7d 0a 7d   eval $ins.  }.}
0980: 0a 0a 23 20 44 65 6c 65 74 65 20 74 68 65 20 70  ..# Delete the p
0990: 72 65 65 78 69 73 74 69 6e 67 20 64 61 74 61 62  reexisting datab
09a0: 61 73 65 20 74 6f 20 61 76 6f 69 64 20 74 68 65  ase to avoid the
09b0: 20 73 70 65 63 69 61 6c 20 73 65 74 75 70 0a 23   special setup.#
09c0: 20 74 68 61 74 20 74 68 65 20 22 61 6c 6c 2e 74   that the "all.t
09d0: 65 73 74 22 20 73 63 72 69 70 74 20 64 6f 65 73  est" script does
09e0: 2e 0a 23 0a 64 62 20 63 6c 6f 73 65 0a 64 65 6c  ..#.db close.del
09f0: 65 74 65 5f 66 69 6c 65 20 74 65 73 74 2e 64 62  ete_file test.db
0a00: 20 74 65 73 74 2e 64 62 2d 6a 6f 75 72 6e 61 6c   test.db-journal
0a10: 0a 64 65 6c 65 74 65 5f 66 69 6c 65 20 74 65 73  .delete_file tes
0a20: 74 33 2e 64 62 20 74 65 73 74 33 2e 64 62 2d 6a  t3.db test3.db-j
0a30: 6f 75 72 6e 61 6c 0a 73 71 6c 69 74 65 33 20 64  ournal.sqlite3 d
0a40: 62 20 74 65 73 74 2e 64 62 3b 20 73 65 74 20 44  b test.db; set D
0a50: 42 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6e 6e 65  B [sqlite3_conne
0a60: 63 74 69 6f 6e 5f 70 6f 69 6e 74 65 72 20 64 62  ction_pointer db
0a70: 5d 0a 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46  ]..# EVIDENCE-OF
0a80: 3a 20 52 2d 31 33 38 36 31 2d 35 36 36 36 35 20  : R-13861-56665 
0a90: 50 52 41 47 4d 41 20 73 63 68 65 6d 61 2e 63 61  PRAGMA schema.ca
0aa0: 63 68 65 5f 73 69 7a 65 3b 20 50 52 41 47 4d 41  che_size; PRAGMA
0ab0: 0a 23 20 73 63 68 65 6d 61 2e 63 61 63 68 65 5f  .# schema.cache_
0ac0: 73 69 7a 65 20 3d 20 70 61 67 65 73 3b 20 50 52  size = pages; PR
0ad0: 41 47 4d 41 20 73 63 68 65 6d 61 2e 63 61 63 68  AGMA schema.cach
0ae0: 65 5f 73 69 7a 65 20 3d 20 2d 6b 69 62 69 62 79  e_size = -kibiby
0af0: 74 65 73 3b 0a 23 20 51 75 65 72 79 20 6f 72 20  tes;.# Query or 
0b00: 63 68 61 6e 67 65 20 74 68 65 20 73 75 67 67 65  change the sugge
0b10: 73 74 65 64 20 6d 61 78 69 6d 75 6d 20 6e 75 6d  sted maximum num
0b20: 62 65 72 20 6f 66 20 64 61 74 61 62 61 73 65 20  ber of database 
0b30: 64 69 73 6b 20 70 61 67 65 73 0a 23 20 74 68 61  disk pages.# tha
0b40: 74 20 53 51 4c 69 74 65 20 77 69 6c 6c 20 68 6f  t SQLite will ho
0b50: 6c 64 20 69 6e 20 6d 65 6d 6f 72 79 20 61 74 20  ld in memory at 
0b60: 6f 6e 63 65 20 70 65 72 20 6f 70 65 6e 20 64 61  once per open da
0b70: 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 23 0a 69  tabase file..#.i
0b80: 66 63 61 70 61 62 6c 65 20 70 61 67 65 72 5f 70  fcapable pager_p
0b90: 72 61 67 6d 61 73 20 7b 0a 73 65 74 20 44 46 4c  ragmas {.set DFL
0ba0: 54 5f 43 41 43 48 45 5f 53 5a 20 5b 64 62 20 6f  T_CACHE_SZ [db o
0bb0: 6e 65 20 7b 50 52 41 47 4d 41 20 64 65 66 61 75  ne {PRAGMA defau
0bc0: 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65 7d 5d 0a  lt_cache_size}].
0bd0: 73 65 74 20 54 45 4d 50 5f 43 41 43 48 45 5f 53  set TEMP_CACHE_S
0be0: 5a 20 5b 64 62 20 6f 6e 65 20 7b 50 52 41 47 4d  Z [db one {PRAGM
0bf0: 41 20 74 65 6d 70 2e 64 65 66 61 75 6c 74 5f 63  A temp.default_c
0c00: 61 63 68 65 5f 73 69 7a 65 7d 5d 0a 64 6f 5f 74  ache_size}].do_t
0c10: 65 73 74 20 70 72 61 67 6d 61 2d 31 2e 31 20 7b  est pragma-1.1 {
0c20: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
0c30: 20 50 52 41 47 4d 41 20 63 61 63 68 65 5f 73 69   PRAGMA cache_si
0c40: 7a 65 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 64  ze;.    PRAGMA d
0c50: 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a  efault_cache_siz
0c60: 65 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 73 79  e;.    PRAGMA sy
0c70: 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20 20 7d 0a 7d  nchronous;.  }.}
0c80: 20 5b 6c 69 73 74 20 24 44 46 4c 54 5f 43 41 43   [list $DFLT_CAC
0c90: 48 45 5f 53 5a 20 24 44 46 4c 54 5f 43 41 43 48  HE_SZ $DFLT_CACH
0ca0: 45 5f 53 5a 20 32 5d 0a 64 6f 5f 74 65 73 74 20  E_SZ 2].do_test 
0cb0: 70 72 61 67 6d 61 2d 31 2e 32 20 7b 0a 20 20 23  pragma-1.2 {.  #
0cc0: 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d   EVIDENCE-OF: R-
0cd0: 34 32 30 35 39 2d 34 37 32 31 31 20 49 66 20 74  42059-47211 If t
0ce0: 68 65 20 61 72 67 75 6d 65 6e 74 20 4e 20 69 73  he argument N is
0cf0: 20 70 6f 73 69 74 69 76 65 20 74 68 65 6e 20 74   positive then t
0d00: 68 65 0a 20 20 23 20 73 75 67 67 65 73 74 65 64  he.  # suggested
0d10: 20 63 61 63 68 65 20 73 69 7a 65 20 69 73 20 73   cache size is s
0d20: 65 74 20 74 6f 20 4e 2e 0a 20 20 65 78 65 63 73  et to N..  execs
0d30: 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20  ql {.    PRAGMA 
0d40: 73 79 6e 63 68 72 6f 6e 6f 75 73 3d 4f 46 46 3b  synchronous=OFF;
0d50: 0a 20 20 20 20 50 52 41 47 4d 41 20 63 61 63 68  .    PRAGMA cach
0d60: 65 5f 73 69 7a 65 3d 31 32 33 34 3b 0a 20 20 20  e_size=1234;.   
0d70: 20 50 52 41 47 4d 41 20 63 61 63 68 65 5f 73 69   PRAGMA cache_si
0d80: 7a 65 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 64  ze;.    PRAGMA d
0d90: 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a  efault_cache_siz
0da0: 65 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 73 79  e;.    PRAGMA sy
0db0: 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20 20 7d 0a 7d  nchronous;.  }.}
0dc0: 20 5b 6c 69 73 74 20 31 32 33 34 20 24 44 46 4c   [list 1234 $DFL
0dd0: 54 5f 43 41 43 48 45 5f 53 5a 20 30 5d 0a 64 6f  T_CACHE_SZ 0].do
0de0: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 2e 33  _test pragma-1.3
0df0: 20 7b 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20 20   {.  db close.  
0e00: 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e  sqlite3 db test.
0e10: 64 62 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  db.  execsql {. 
0e20: 20 20 20 50 52 41 47 4d 41 20 63 61 63 68 65 5f     PRAGMA cache_
0e30: 73 69 7a 65 3b 0a 20 20 20 20 50 52 41 47 4d 41  size;.    PRAGMA
0e40: 20 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73   default_cache_s
0e50: 69 7a 65 3b 0a 20 20 20 20 50 52 41 47 4d 41 20  ize;.    PRAGMA 
0e60: 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20 20 7d  synchronous;.  }
0e70: 0a 7d 20 5b 6c 69 73 74 20 24 44 46 4c 54 5f 43  .} [list $DFLT_C
0e80: 41 43 48 45 5f 53 5a 20 24 44 46 4c 54 5f 43 41  ACHE_SZ $DFLT_CA
0e90: 43 48 45 5f 53 5a 20 32 5d 0a 64 6f 5f 74 65 73  CHE_SZ 2].do_tes
0ea0: 74 20 70 72 61 67 6d 61 2d 31 2e 34 20 7b 0a 20  t pragma-1.4 {. 
0eb0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50   execsql {.    P
0ec0: 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75  RAGMA synchronou
0ed0: 73 3d 4f 46 46 3b 0a 20 20 20 20 50 52 41 47 4d  s=OFF;.    PRAGM
0ee0: 41 20 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20  A cache_size;.  
0ef0: 20 20 50 52 41 47 4d 41 20 64 65 66 61 75 6c 74    PRAGMA default
0f00: 5f 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20  _cache_size;.   
0f10: 20 50 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e   PRAGMA synchron
0f20: 6f 75 73 3b 0a 20 20 7d 0a 7d 20 5b 6c 69 73 74  ous;.  }.} [list
0f30: 20 24 44 46 4c 54 5f 43 41 43 48 45 5f 53 5a 20   $DFLT_CACHE_SZ 
0f40: 24 44 46 4c 54 5f 43 41 43 48 45 5f 53 5a 20 30  $DFLT_CACHE_SZ 0
0f50: 5d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  ].do_test pragma
0f60: 2d 31 2e 35 20 7b 0a 20 20 65 78 65 63 73 71 6c  -1.5 {.  execsql
0f70: 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 63 61   {.    PRAGMA ca
0f80: 63 68 65 5f 73 69 7a 65 3d 2d 34 33 32 31 3b 0a  che_size=-4321;.
0f90: 20 20 20 20 50 52 41 47 4d 41 20 63 61 63 68 65      PRAGMA cache
0fa0: 5f 73 69 7a 65 3b 0a 20 20 20 20 50 52 41 47 4d  _size;.    PRAGM
0fb0: 41 20 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f  A default_cache_
0fc0: 73 69 7a 65 3b 0a 20 20 20 20 50 52 41 47 4d 41  size;.    PRAGMA
0fd0: 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20 20   synchronous;.  
0fe0: 7d 0a 7d 20 5b 6c 69 73 74 20 2d 34 33 32 31 20  }.} [list -4321 
0ff0: 24 44 46 4c 54 5f 43 41 43 48 45 5f 53 5a 20 30  $DFLT_CACHE_SZ 0
1000: 5d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  ].do_test pragma
1010: 2d 31 2e 36 20 7b 0a 20 20 65 78 65 63 73 71 6c  -1.6 {.  execsql
1020: 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 73 79   {.    PRAGMA sy
1030: 6e 63 68 72 6f 6e 6f 75 73 3d 4f 4e 3b 0a 20 20  nchronous=ON;.  
1040: 20 20 50 52 41 47 4d 41 20 63 61 63 68 65 5f 73    PRAGMA cache_s
1050: 69 7a 65 3b 0a 20 20 20 20 50 52 41 47 4d 41 20  ize;.    PRAGMA 
1060: 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69  default_cache_si
1070: 7a 65 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 73  ze;.    PRAGMA s
1080: 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20 20 7d 0a  ynchronous;.  }.
1090: 7d 20 5b 6c 69 73 74 20 2d 34 33 32 31 20 24 44  } [list -4321 $D
10a0: 46 4c 54 5f 43 41 43 48 45 5f 53 5a 20 31 5d 0a  FLT_CACHE_SZ 1].
10b0: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31  do_test pragma-1
10c0: 2e 37 20 7b 0a 20 20 64 62 20 63 6c 6f 73 65 0a  .7 {.  db close.
10d0: 20 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73    sqlite3 db tes
10e0: 74 2e 64 62 0a 20 20 65 78 65 63 73 71 6c 20 7b  t.db.  execsql {
10f0: 0a 20 20 20 20 50 52 41 47 4d 41 20 63 61 63 68  .    PRAGMA cach
1100: 65 5f 73 69 7a 65 3b 0a 20 20 20 20 50 52 41 47  e_size;.    PRAG
1110: 4d 41 20 64 65 66 61 75 6c 74 5f 63 61 63 68 65  MA default_cache
1120: 5f 73 69 7a 65 3b 0a 20 20 20 20 50 52 41 47 4d  _size;.    PRAGM
1130: 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20  A synchronous;. 
1140: 20 7d 0a 7d 20 5b 6c 69 73 74 20 24 44 46 4c 54   }.} [list $DFLT
1150: 5f 43 41 43 48 45 5f 53 5a 20 24 44 46 4c 54 5f  _CACHE_SZ $DFLT_
1160: 43 41 43 48 45 5f 53 5a 20 32 5d 0a 64 6f 5f 74  CACHE_SZ 2].do_t
1170: 65 73 74 20 70 72 61 67 6d 61 2d 31 2e 38 20 7b  est pragma-1.8 {
1180: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
1190: 20 50 52 41 47 4d 41 20 64 65 66 61 75 6c 74 5f   PRAGMA default_
11a0: 63 61 63 68 65 5f 73 69 7a 65 3d 2d 31 32 33 3b  cache_size=-123;
11b0: 0a 20 20 20 20 50 52 41 47 4d 41 20 63 61 63 68  .    PRAGMA cach
11c0: 65 5f 73 69 7a 65 3b 0a 20 20 20 20 50 52 41 47  e_size;.    PRAG
11d0: 4d 41 20 64 65 66 61 75 6c 74 5f 63 61 63 68 65  MA default_cache
11e0: 5f 73 69 7a 65 3b 0a 20 20 20 20 50 52 41 47 4d  _size;.    PRAGM
11f0: 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20  A synchronous;. 
1200: 20 7d 0a 7d 20 7b 31 32 33 20 31 32 33 20 32 7d   }.} {123 123 2}
1210: 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d  .do_test pragma-
1220: 31 2e 39 2e 31 20 7b 0a 20 20 64 62 20 63 6c 6f  1.9.1 {.  db clo
1230: 73 65 0a 20 20 73 71 6c 69 74 65 33 20 64 62 20  se.  sqlite3 db 
1240: 74 65 73 74 2e 64 62 3b 20 73 65 74 20 3a 3a 44  test.db; set ::D
1250: 42 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6e 6e 65  B [sqlite3_conne
1260: 63 74 69 6f 6e 5f 70 6f 69 6e 74 65 72 20 64 62  ction_pointer db
1270: 5d 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  ].  execsql {.  
1280: 20 20 50 52 41 47 4d 41 20 63 61 63 68 65 5f 73    PRAGMA cache_s
1290: 69 7a 65 3b 0a 20 20 20 20 50 52 41 47 4d 41 20  ize;.    PRAGMA 
12a0: 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69  default_cache_si
12b0: 7a 65 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 73  ze;.    PRAGMA s
12c0: 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20 20 7d 0a  ynchronous;.  }.
12d0: 7d 20 7b 31 32 33 20 31 32 33 20 32 7d 0a 69 66  } {123 123 2}.if
12e0: 63 61 70 61 62 6c 65 20 76 61 63 75 75 6d 20 7b  capable vacuum {
12f0: 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .  do_test pragm
1300: 61 2d 31 2e 39 2e 32 20 7b 0a 20 20 20 20 65 78  a-1.9.2 {.    ex
1310: 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 56 41  ecsql {.      VA
1320: 43 55 55 4d 3b 0a 20 20 20 20 20 20 50 52 41 47  CUUM;.      PRAG
1330: 4d 41 20 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20  MA cache_size;. 
1340: 20 20 20 20 20 50 52 41 47 4d 41 20 64 65 66 61       PRAGMA defa
1350: 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65 3b 0a  ult_cache_size;.
1360: 20 20 20 20 20 20 50 52 41 47 4d 41 20 73 79 6e        PRAGMA syn
1370: 63 68 72 6f 6e 6f 75 73 3b 0a 20 20 20 20 7d 0a  chronous;.    }.
1380: 20 20 7d 20 7b 31 32 33 20 31 32 33 20 32 7d 0a    } {123 123 2}.
1390: 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  }.do_test pragma
13a0: 2d 31 2e 31 30 20 7b 0a 20 20 65 78 65 63 73 71  -1.10 {.  execsq
13b0: 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 73  l {.    PRAGMA s
13c0: 79 6e 63 68 72 6f 6e 6f 75 73 3d 4e 4f 52 4d 41  ynchronous=NORMA
13d0: 4c 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 63 61  L;.    PRAGMA ca
13e0: 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 50 52  che_size;.    PR
13f0: 41 47 4d 41 20 64 65 66 61 75 6c 74 5f 63 61 63  AGMA default_cac
1400: 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 50 52 41  he_size;.    PRA
1410: 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3b  GMA synchronous;
1420: 0a 20 20 7d 0a 7d 20 7b 31 32 33 20 31 32 33 20  .  }.} {123 123 
1430: 31 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  1}.do_test pragm
1440: 61 2d 31 2e 31 31 2e 31 20 7b 0a 20 20 65 78 65  a-1.11.1 {.  exe
1450: 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d  csql {.    PRAGM
1460: 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3d 45 58  A synchronous=EX
1470: 54 52 41 3b 0a 20 20 20 20 50 52 41 47 4d 41 20  TRA;.    PRAGMA 
1480: 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20  cache_size;.    
1490: 50 52 41 47 4d 41 20 64 65 66 61 75 6c 74 5f 63  PRAGMA default_c
14a0: 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 50  ache_size;.    P
14b0: 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75  RAGMA synchronou
14c0: 73 3b 0a 20 20 7d 0a 7d 20 7b 31 32 33 20 31 32  s;.  }.} {123 12
14d0: 33 20 33 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61  3 3}.do_test pra
14e0: 67 6d 61 2d 31 2e 31 31 2e 32 20 7b 0a 20 20 65  gma-1.11.2 {.  e
14f0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41  xecsql {.    PRA
1500: 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3d  GMA synchronous=
1510: 46 55 4c 4c 3b 0a 20 20 20 20 50 52 41 47 4d 41  FULL;.    PRAGMA
1520: 20 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20   cache_size;.   
1530: 20 50 52 41 47 4d 41 20 64 65 66 61 75 6c 74 5f   PRAGMA default_
1540: 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20  cache_size;.    
1550: 50 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f  PRAGMA synchrono
1560: 75 73 3b 0a 20 20 7d 0a 7d 20 7b 31 32 33 20 31  us;.  }.} {123 1
1570: 32 33 20 32 7d 0a 64 6f 5f 74 65 73 74 20 70 72  23 2}.do_test pr
1580: 61 67 6d 61 2d 31 2e 31 32 20 7b 0a 20 20 64 62  agma-1.12 {.  db
1590: 20 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74 65 33   close.  sqlite3
15a0: 20 64 62 20 74 65 73 74 2e 64 62 3b 20 73 65 74   db test.db; set
15b0: 20 3a 3a 44 42 20 5b 73 71 6c 69 74 65 33 5f 63   ::DB [sqlite3_c
15c0: 6f 6e 6e 65 63 74 69 6f 6e 5f 70 6f 69 6e 74 65  onnection_pointe
15d0: 72 20 64 62 5d 0a 20 20 65 78 65 63 73 71 6c 20  r db].  execsql 
15e0: 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 63 61 63  {.    PRAGMA cac
15f0: 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 50 52 41  he_size;.    PRA
1600: 47 4d 41 20 64 65 66 61 75 6c 74 5f 63 61 63 68  GMA default_cach
1610: 65 5f 73 69 7a 65 3b 0a 20 20 20 20 50 52 41 47  e_size;.    PRAG
1620: 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a  MA synchronous;.
1630: 20 20 7d 0a 7d 20 7b 31 32 33 20 31 32 33 20 32    }.} {123 123 2
1640: 7d 0a 0a 23 20 4d 61 6b 65 20 73 75 72 65 20 74  }..# Make sure t
1650: 68 65 20 70 72 61 67 6d 61 20 68 61 6e 64 6c 65  he pragma handle
1660: 72 20 75 6e 64 65 72 73 74 61 6e 64 73 20 6e 75  r understands nu
1670: 6d 65 72 69 63 20 76 61 6c 75 65 73 20 69 6e 20  meric values in 
1680: 61 64 64 69 74 69 6f 6e 0a 23 20 74 6f 20 6b 65  addition.# to ke
1690: 79 77 6f 72 64 73 20 6c 69 6b 65 20 22 6f 66 66  ywords like "off
16a0: 22 20 61 6e 64 20 22 66 75 6c 6c 22 2e 0a 23 0a  " and "full"..#.
16b0: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31  do_test pragma-1
16c0: 2e 31 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  .13 {.  execsql 
16d0: 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 73 79 6e  {.    PRAGMA syn
16e0: 63 68 72 6f 6e 6f 75 73 3d 30 3b 0a 20 20 20 20  chronous=0;.    
16f0: 50 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f  PRAGMA synchrono
1700: 75 73 3b 0a 20 20 7d 0a 7d 20 7b 30 7d 0a 64 6f  us;.  }.} {0}.do
1710: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 2e 31  _test pragma-1.1
1720: 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  4 {.  execsql {.
1730: 20 20 20 20 50 52 41 47 4d 41 20 73 79 6e 63 68      PRAGMA synch
1740: 72 6f 6e 6f 75 73 3d 32 3b 0a 20 20 20 20 50 52  ronous=2;.    PR
1750: 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73  AGMA synchronous
1760: 3b 0a 20 20 7d 0a 7d 20 7b 32 7d 0a 64 6f 5f 74  ;.  }.} {2}.do_t
1770: 65 73 74 20 70 72 61 67 6d 61 2d 31 2e 31 34 2e  est pragma-1.14.
1780: 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  1 {.  execsql {.
1790: 20 20 20 20 50 52 41 47 4d 41 20 73 79 6e 63 68      PRAGMA synch
17a0: 72 6f 6e 6f 75 73 3d 34 3b 0a 20 20 20 20 50 52  ronous=4;.    PR
17b0: 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73  AGMA synchronous
17c0: 3b 0a 20 20 7d 0a 7d 20 7b 34 7d 0a 64 6f 5f 74  ;.  }.} {4}.do_t
17d0: 65 73 74 20 70 72 61 67 6d 61 2d 31 2e 31 34 2e  est pragma-1.14.
17e0: 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  2 {.  execsql {.
17f0: 20 20 20 20 50 52 41 47 4d 41 20 73 79 6e 63 68      PRAGMA synch
1800: 72 6f 6e 6f 75 73 3d 33 3b 0a 20 20 20 20 50 52  ronous=3;.    PR
1810: 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73  AGMA synchronous
1820: 3b 0a 20 20 7d 0a 7d 20 7b 33 7d 0a 64 6f 5f 74  ;.  }.} {3}.do_t
1830: 65 73 74 20 70 72 61 67 6d 61 2d 31 2e 31 34 2e  est pragma-1.14.
1840: 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  3 {.  execsql {.
1850: 20 20 20 20 50 52 41 47 4d 41 20 73 79 6e 63 68      PRAGMA synch
1860: 72 6f 6e 6f 75 73 3d 38 3b 0a 20 20 20 20 50 52  ronous=8;.    PR
1870: 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73  AGMA synchronous
1880: 3b 0a 20 20 7d 0a 7d 20 7b 30 7d 0a 64 6f 5f 74  ;.  }.} {0}.do_t
1890: 65 73 74 20 70 72 61 67 6d 61 2d 31 2e 31 34 2e  est pragma-1.14.
18a0: 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  4 {.  execsql {.
18b0: 20 20 20 20 50 52 41 47 4d 41 20 73 79 6e 63 68      PRAGMA synch
18c0: 72 6f 6e 6f 75 73 3d 31 30 3b 0a 20 20 20 20 50  ronous=10;.    P
18d0: 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75  RAGMA synchronou
18e0: 73 3b 0a 20 20 7d 0a 7d 20 7b 32 7d 0a 7d 20 3b  s;.  }.} {2}.} ;
18f0: 23 20 69 66 63 61 70 61 62 6c 65 20 70 61 67 65  # ifcapable page
1900: 72 5f 70 72 61 67 6d 61 73 0a 0a 23 20 54 65 73  r_pragmas..# Tes
1910: 74 20 74 75 72 6e 69 6e 67 20 22 66 6c 61 67 22  t turning "flag"
1920: 20 70 72 61 67 6d 61 73 20 6f 6e 20 61 6e 64 20   pragmas on and 
1930: 6f 66 66 2e 0a 23 0a 69 66 63 61 70 61 62 6c 65  off..#.ifcapable
1940: 20 64 65 62 75 67 20 7b 0a 20 20 23 20 50 72 61   debug {.  # Pra
1950: 67 6d 61 20 22 76 64 62 65 5f 6c 69 73 74 69 6e  gma "vdbe_listin
1960: 67 22 20 69 73 20 6f 6e 6c 79 20 61 76 61 69 6c  g" is only avail
1970: 61 62 6c 65 20 69 66 20 63 6f 6d 70 69 6c 65 64  able if compiled
1980: 20 77 69 74 68 20 53 51 4c 49 54 45 5f 44 45 42   with SQLITE_DEB
1990: 55 47 0a 20 20 23 0a 20 20 64 6f 5f 74 65 73 74  UG.  #.  do_test
19a0: 20 70 72 61 67 6d 61 2d 31 2e 31 35 20 7b 0a 20   pragma-1.15 {. 
19b0: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
19c0: 20 20 20 50 52 41 47 4d 41 20 76 64 62 65 5f 6c     PRAGMA vdbe_l
19d0: 69 73 74 69 6e 67 3d 59 45 53 3b 0a 20 20 20 20  isting=YES;.    
19e0: 20 20 50 52 41 47 4d 41 20 76 64 62 65 5f 6c 69    PRAGMA vdbe_li
19f0: 73 74 69 6e 67 3b 0a 20 20 20 20 7d 0a 20 20 7d  sting;.    }.  }
1a00: 20 7b 31 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70   {1}.  do_test p
1a10: 72 61 67 6d 61 2d 31 2e 31 36 20 7b 0a 20 20 20  ragma-1.16 {.   
1a20: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20   execsql {.     
1a30: 20 50 52 41 47 4d 41 20 76 64 62 65 5f 6c 69 73   PRAGMA vdbe_lis
1a40: 74 69 6e 67 3d 4e 4f 3b 0a 20 20 20 20 20 20 50  ting=NO;.      P
1a50: 52 41 47 4d 41 20 76 64 62 65 5f 6c 69 73 74 69  RAGMA vdbe_listi
1a60: 6e 67 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 30  ng;.    }.  } {0
1a70: 7d 0a 7d 0a 0a 64 6f 5f 74 65 73 74 20 70 72 61  }.}..do_test pra
1a80: 67 6d 61 2d 31 2e 31 37 20 7b 0a 20 20 65 78 65  gma-1.17 {.  exe
1a90: 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d  csql {.    PRAGM
1aa0: 41 20 70 61 72 73 65 72 5f 74 72 61 63 65 3d 4f  A parser_trace=O
1ab0: 4e 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 70 61  N;.    PRAGMA pa
1ac0: 72 73 65 72 5f 74 72 61 63 65 3d 4f 46 46 3b 0a  rser_trace=OFF;.
1ad0: 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74    }.} {}.do_test
1ae0: 20 70 72 61 67 6d 61 2d 31 2e 31 38 20 7b 0a 20   pragma-1.18 {. 
1af0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50   execsql {.    P
1b00: 52 41 47 4d 41 20 62 6f 67 75 73 20 3d 20 2d 31  RAGMA bogus = -1
1b10: 32 33 34 3b 20 20 2d 2d 20 50 61 72 73 69 6e 67  234;  -- Parsing
1b20: 20 6f 66 20 6e 65 67 61 74 69 76 65 20 76 61 6c   of negative val
1b30: 75 65 73 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a 23 20  ues.  }.} {}..# 
1b40: 54 65 73 74 20 6d 6f 64 69 66 79 69 6e 67 20 74  Test modifying t
1b50: 68 65 20 73 61 66 65 74 79 5f 6c 65 76 65 6c 20  he safety_level 
1b60: 6f 66 20 61 6e 20 61 74 74 61 63 68 65 64 20 64  of an attached d
1b70: 61 74 61 62 61 73 65 2e 0a 69 66 63 61 70 61 62  atabase..ifcapab
1b80: 6c 65 20 70 61 67 65 72 5f 70 72 61 67 6d 61 73  le pager_pragmas
1b90: 26 26 61 74 74 61 63 68 20 7b 0a 20 20 64 6f 5f  &&attach {.  do_
1ba0: 74 65 73 74 20 70 72 61 67 6d 61 2d 32 2e 31 20  test pragma-2.1 
1bb0: 7b 0a 20 20 20 20 66 6f 72 63 65 64 65 6c 65 74  {.    forcedelet
1bc0: 65 20 74 65 73 74 32 2e 64 62 0a 20 20 20 20 66  e test2.db.    f
1bd0: 6f 72 63 65 64 65 6c 65 74 65 20 74 65 73 74 32  orcedelete test2
1be0: 2e 64 62 2d 6a 6f 75 72 6e 61 6c 0a 20 20 20 20  .db-journal.    
1bf0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
1c00: 41 54 54 41 43 48 20 27 74 65 73 74 32 2e 64 62  ATTACH 'test2.db
1c10: 27 20 41 53 20 61 75 78 3b 0a 20 20 20 20 7d 20  ' AS aux;.    } 
1c20: 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65 73  .  } {}.  do_tes
1c30: 74 20 70 72 61 67 6d 61 2d 32 2e 32 20 7b 0a 20  t pragma-2.2 {. 
1c40: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
1c50: 20 20 20 70 72 61 67 6d 61 20 61 75 78 2e 73 79     pragma aux.sy
1c60: 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20 20 20 20 7d  nchronous;.    }
1c70: 20 0a 20 20 7d 20 7b 32 7d 0a 20 20 64 6f 5f 74   .  } {2}.  do_t
1c80: 65 73 74 20 70 72 61 67 6d 61 2d 32 2e 33 20 7b  est pragma-2.3 {
1c90: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
1ca0: 20 20 20 20 20 70 72 61 67 6d 61 20 61 75 78 2e       pragma aux.
1cb0: 73 79 6e 63 68 72 6f 6e 6f 75 73 20 3d 20 4f 46  synchronous = OF
1cc0: 46 3b 0a 20 20 20 20 20 20 70 72 61 67 6d 61 20  F;.      pragma 
1cd0: 61 75 78 2e 73 79 6e 63 68 72 6f 6e 6f 75 73 3b  aux.synchronous;
1ce0: 0a 20 20 20 20 20 20 70 72 61 67 6d 61 20 73 79  .      pragma sy
1cf0: 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20 20 20 20 7d  nchronous;.    }
1d00: 20 0a 20 20 7d 20 7b 30 20 32 7d 0a 20 20 64 6f   .  } {0 2}.  do
1d10: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 32 2e 34  _test pragma-2.4
1d20: 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b   {.    execsql {
1d30: 0a 20 20 20 20 20 20 70 72 61 67 6d 61 20 61 75  .      pragma au
1d40: 78 2e 73 79 6e 63 68 72 6f 6e 6f 75 73 20 3d 20  x.synchronous = 
1d50: 4f 4e 3b 0a 20 20 20 20 20 20 70 72 61 67 6d 61  ON;.      pragma
1d60: 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20 20   synchronous;.  
1d70: 20 20 20 20 70 72 61 67 6d 61 20 61 75 78 2e 73      pragma aux.s
1d80: 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20 20 20 20  ynchronous;.    
1d90: 7d 20 0a 20 20 7d 20 7b 32 20 31 7d 0a 7d 20 3b  } .  } {2 1}.} ;
1da0: 23 20 69 66 63 61 70 61 62 6c 65 20 70 61 67 65  # ifcapable page
1db0: 72 5f 70 72 61 67 6d 61 73 0a 0a 23 20 43 6f 6e  r_pragmas..# Con
1dc0: 73 74 72 75 63 74 20 61 20 63 6f 72 72 75 70 74  struct a corrupt
1dd0: 65 64 20 69 6e 64 65 78 20 61 6e 64 20 6d 61 6b  ed index and mak
1de0: 65 20 73 75 72 65 20 74 68 65 20 69 6e 74 65 67  e sure the integ
1df0: 72 69 74 79 5f 63 68 65 63 6b 0a 23 20 70 72 61  rity_check.# pra
1e00: 67 6d 61 20 66 69 6e 64 73 20 69 74 2e 0a 23 0a  gma finds it..#.
1e10: 23 20 54 68 65 73 65 20 74 65 73 74 73 20 77 6f  # These tests wo
1e20: 6e 27 74 20 77 6f 72 6b 20 69 66 20 74 68 65 20  n't work if the 
1e30: 64 61 74 61 62 61 73 65 20 69 73 20 65 6e 63 72  database is encr
1e40: 79 70 74 65 64 0a 23 0a 64 6f 5f 74 65 73 74 20  ypted.#.do_test 
1e50: 70 72 61 67 6d 61 2d 33 2e 31 20 7b 0a 20 20 64  pragma-3.1 {.  d
1e60: 62 20 63 6c 6f 73 65 0a 20 20 66 6f 72 63 65 64  b close.  forced
1e70: 65 6c 65 74 65 20 74 65 73 74 2e 64 62 20 74 65  elete test.db te
1e80: 73 74 2e 64 62 2d 6a 6f 75 72 6e 61 6c 0a 20 20  st.db-journal.  
1e90: 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e  sqlite3 db test.
1ea0: 64 62 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  db.  execsql {. 
1eb0: 20 20 20 50 52 41 47 4d 41 20 61 75 74 6f 5f 76     PRAGMA auto_v
1ec0: 61 63 75 75 6d 3d 4f 46 46 3b 0a 20 20 20 20 42  acuum=OFF;.    B
1ed0: 45 47 49 4e 3b 0a 20 20 20 20 43 52 45 41 54 45  EGIN;.    CREATE
1ee0: 20 54 41 42 4c 45 20 74 32 28 61 2c 62 2c 63 29   TABLE t2(a,b,c)
1ef0: 3b 0a 20 20 20 20 43 52 45 41 54 45 20 49 4e 44  ;.    CREATE IND
1f00: 45 58 20 69 32 20 4f 4e 20 74 32 28 61 29 3b 0a  EX i2 ON t2(a);.
1f10: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
1f20: 74 32 20 56 41 4c 55 45 53 28 31 31 2c 32 2c 33  t2 VALUES(11,2,3
1f30: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
1f40: 54 4f 20 74 32 20 56 41 4c 55 45 53 28 32 32 2c  TO t2 VALUES(22,
1f50: 33 2c 34 29 3b 0a 20 20 20 20 43 4f 4d 4d 49 54  3,4);.    COMMIT
1f60: 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 72 6f 77  ;.    SELECT row
1f70: 69 64 2c 20 2a 20 66 72 6f 6d 20 74 32 3b 0a 20  id, * from t2;. 
1f80: 20 7d 0a 7d 20 7b 31 20 31 31 20 32 20 33 20 32   }.} {1 11 2 3 2
1f90: 20 32 32 20 33 20 34 7d 0a 69 66 63 61 70 61 62   22 3 4}.ifcapab
1fa0: 6c 65 20 61 74 74 61 63 68 20 7b 0a 20 20 69 66  le attach {.  if
1fb0: 20 7b 21 5b 73 71 6c 69 74 65 33 20 2d 68 61 73   {![sqlite3 -has
1fc0: 2d 63 6f 64 65 63 5d 20 26 26 20 24 73 71 6c 69  -codec] && $sqli
1fd0: 74 65 5f 6f 70 74 69 6f 6e 73 28 69 6e 74 65 67  te_options(integ
1fe0: 72 69 74 79 63 6b 29 7d 20 7b 0a 20 20 20 20 64  rityck)} {.    d
1ff0: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 33 2e  o_test pragma-3.
2000: 32 20 7b 0a 20 20 20 20 20 20 64 62 20 65 76 61  2 {.      db eva
2010: 6c 20 7b 53 45 4c 45 43 54 20 72 6f 6f 74 70 61  l {SELECT rootpa
2020: 67 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d  ge FROM sqlite_m
2030: 61 73 74 65 72 20 57 48 45 52 45 20 6e 61 6d 65  aster WHERE name
2040: 3d 27 69 32 27 7d 20 62 72 65 61 6b 0a 20 20 20  ='i2'} break.   
2050: 20 20 20 73 65 74 20 70 67 73 7a 20 5b 64 62 20     set pgsz [db 
2060: 65 76 61 6c 20 7b 50 52 41 47 4d 41 20 70 61 67  eval {PRAGMA pag
2070: 65 5f 73 69 7a 65 7d 5d 0a 20 20 20 20 20 20 23  e_size}].      #
2080: 20 6f 76 65 72 77 72 69 74 65 20 74 68 65 20 68   overwrite the h
2090: 65 61 64 65 72 20 6f 6e 20 74 68 65 20 72 6f 6f  eader on the roo
20a0: 74 70 61 67 65 20 6f 66 20 74 68 65 20 69 6e 64  tpage of the ind
20b0: 65 78 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 20  ex in order to. 
20c0: 20 20 20 20 20 23 20 6d 61 6b 65 20 74 68 65 20       # make the 
20d0: 69 6e 64 65 78 20 61 70 70 65 61 72 20 74 6f 20  index appear to 
20e0: 62 65 20 65 6d 70 74 79 2e 0a 20 20 20 20 20 20  be empty..      
20f0: 23 0a 20 20 20 20 20 20 73 65 74 20 6f 66 66 73  #.      set offs
2100: 65 74 20 5b 65 78 70 72 20 7b 24 70 67 73 7a 2a  et [expr {$pgsz*
2110: 28 24 72 6f 6f 74 70 61 67 65 2d 31 29 7d 5d 0a  ($rootpage-1)}].
2120: 20 20 20 20 20 20 68 65 78 69 6f 5f 77 72 69 74        hexio_writ
2130: 65 20 74 65 73 74 2e 64 62 20 24 6f 66 66 73 65  e test.db $offse
2140: 74 20 30 61 30 30 30 30 30 30 30 30 30 34 30 30  t 0a000000000400
2150: 30 30 30 30 30 30 30 30 0a 20 20 20 20 20 20 64  00000000.      d
2160: 62 20 63 6c 6f 73 65 0a 20 20 20 20 20 20 73 71  b close.      sq
2170: 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64 62  lite3 db test.db
2180: 0a 20 20 20 20 20 20 65 78 65 63 73 71 6c 20 7b  .      execsql {
2190: 50 52 41 47 4d 41 20 69 6e 74 65 67 72 69 74 79  PRAGMA integrity
21a0: 5f 63 68 65 63 6b 7d 0a 20 20 20 20 7d 20 7b 7b  _check}.    } {{
21b0: 72 6f 77 20 31 20 6d 69 73 73 69 6e 67 20 66 72  row 1 missing fr
21c0: 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b 72 6f  om index i2} {ro
21d0: 77 20 32 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d  w 2 missing from
21e0: 20 69 6e 64 65 78 20 69 32 7d 20 7b 77 72 6f 6e   index i2} {wron
21f0: 67 20 23 20 6f 66 20 65 6e 74 72 69 65 73 20 69  g # of entries i
2200: 6e 20 69 6e 64 65 78 20 69 32 7d 7d 0a 20 20 20  n index i2}}.   
2210: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
2220: 33 2e 33 20 7b 0a 20 20 20 20 20 20 65 78 65 63  3.3 {.      exec
2230: 73 71 6c 20 7b 50 52 41 47 4d 41 20 69 6e 74 65  sql {PRAGMA inte
2240: 67 72 69 74 79 5f 63 68 65 63 6b 3d 31 7d 0a 20  grity_check=1}. 
2250: 20 20 20 7d 20 7b 7b 72 6f 77 20 31 20 6d 69 73     } {{row 1 mis
2260: 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20  sing from index 
2270: 69 32 7d 7d 0a 20 20 20 20 64 6f 5f 74 65 73 74  i2}}.    do_test
2280: 20 70 72 61 67 6d 61 2d 33 2e 34 20 7b 0a 20 20   pragma-3.4 {.  
2290: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20      execsql {.  
22a0: 20 20 20 20 20 20 41 54 54 41 43 48 20 44 41 54        ATTACH DAT
22b0: 41 42 41 53 45 20 27 74 65 73 74 2e 64 62 27 20  ABASE 'test.db' 
22c0: 41 53 20 74 32 3b 0a 20 20 20 20 20 20 20 20 50  AS t2;.        P
22d0: 52 41 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f  RAGMA integrity_
22e0: 63 68 65 63 6b 0a 20 20 20 20 20 20 7d 0a 20 20  check.      }.  
22f0: 20 20 7d 20 7b 7b 72 6f 77 20 31 20 6d 69 73 73    } {{row 1 miss
2300: 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69  ing from index i
2310: 32 7d 20 7b 72 6f 77 20 32 20 6d 69 73 73 69 6e  2} {row 2 missin
2320: 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d  g from index i2}
2330: 20 7b 77 72 6f 6e 67 20 23 20 6f 66 20 65 6e 74   {wrong # of ent
2340: 72 69 65 73 20 69 6e 20 69 6e 64 65 78 20 69 32  ries in index i2
2350: 7d 20 7b 72 6f 77 20 31 20 6d 69 73 73 69 6e 67  } {row 1 missing
2360: 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20   from index i2} 
2370: 7b 72 6f 77 20 32 20 6d 69 73 73 69 6e 67 20 66  {row 2 missing f
2380: 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b 77  rom index i2} {w
2390: 72 6f 6e 67 20 23 20 6f 66 20 65 6e 74 72 69 65  rong # of entrie
23a0: 73 20 69 6e 20 69 6e 64 65 78 20 69 32 7d 7d 0a  s in index i2}}.
23b0: 20 20 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67      do_test prag
23c0: 6d 61 2d 33 2e 35 20 7b 0a 20 20 20 20 20 20 65  ma-3.5 {.      e
23d0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 20  xecsql {.       
23e0: 20 50 52 41 47 4d 41 20 69 6e 74 65 67 72 69 74   PRAGMA integrit
23f0: 79 5f 63 68 65 63 6b 3d 34 0a 20 20 20 20 20 20  y_check=4.      
2400: 7d 0a 20 20 20 20 7d 20 7b 7b 72 6f 77 20 31 20  }.    } {{row 1 
2410: 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64  missing from ind
2420: 65 78 20 69 32 7d 20 7b 72 6f 77 20 32 20 6d 69  ex i2} {row 2 mi
2430: 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78  ssing from index
2440: 20 69 32 7d 20 7b 77 72 6f 6e 67 20 23 20 6f 66   i2} {wrong # of
2450: 20 65 6e 74 72 69 65 73 20 69 6e 20 69 6e 64 65   entries in inde
2460: 78 20 69 32 7d 20 7b 72 6f 77 20 31 20 6d 69 73  x i2} {row 1 mis
2470: 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20  sing from index 
2480: 69 32 7d 7d 0a 20 20 20 20 64 6f 5f 74 65 73 74  i2}}.    do_test
2490: 20 70 72 61 67 6d 61 2d 33 2e 36 20 7b 0a 20 20   pragma-3.6 {.  
24a0: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20      execsql {.  
24b0: 20 20 20 20 20 20 50 52 41 47 4d 41 20 69 6e 74        PRAGMA int
24c0: 65 67 72 69 74 79 5f 63 68 65 63 6b 3d 78 79 7a  egrity_check=xyz
24d0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 20 7b  .      }.    } {
24e0: 7b 72 6f 77 20 31 20 6d 69 73 73 69 6e 67 20 66  {row 1 missing f
24f0: 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b 72  rom index i2} {r
2500: 6f 77 20 32 20 6d 69 73 73 69 6e 67 20 66 72 6f  ow 2 missing fro
2510: 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b 77 72 6f  m index i2} {wro
2520: 6e 67 20 23 20 6f 66 20 65 6e 74 72 69 65 73 20  ng # of entries 
2530: 69 6e 20 69 6e 64 65 78 20 69 32 7d 20 7b 72 6f  in index i2} {ro
2540: 77 20 31 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d  w 1 missing from
2550: 20 69 6e 64 65 78 20 69 32 7d 20 7b 72 6f 77 20   index i2} {row 
2560: 32 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69  2 missing from i
2570: 6e 64 65 78 20 69 32 7d 20 7b 77 72 6f 6e 67 20  ndex i2} {wrong 
2580: 23 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20  # of entries in 
2590: 69 6e 64 65 78 20 69 32 7d 7d 0a 20 20 20 20 64  index i2}}.    d
25a0: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 33 2e  o_test pragma-3.
25b0: 37 20 7b 0a 20 20 20 20 20 20 65 78 65 63 73 71  7 {.      execsq
25c0: 6c 20 7b 0a 20 20 20 20 20 20 20 20 50 52 41 47  l {.        PRAG
25d0: 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65  MA integrity_che
25e0: 63 6b 3d 30 0a 20 20 20 20 20 20 7d 0a 20 20 20  ck=0.      }.   
25f0: 20 7d 20 7b 7b 72 6f 77 20 31 20 6d 69 73 73 69   } {{row 1 missi
2600: 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32  ng from index i2
2610: 7d 20 7b 72 6f 77 20 32 20 6d 69 73 73 69 6e 67  } {row 2 missing
2620: 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20   from index i2} 
2630: 7b 77 72 6f 6e 67 20 23 20 6f 66 20 65 6e 74 72  {wrong # of entr
2640: 69 65 73 20 69 6e 20 69 6e 64 65 78 20 69 32 7d  ies in index i2}
2650: 20 7b 72 6f 77 20 31 20 6d 69 73 73 69 6e 67 20   {row 1 missing 
2660: 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b  from index i2} {
2670: 72 6f 77 20 32 20 6d 69 73 73 69 6e 67 20 66 72  row 2 missing fr
2680: 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b 77 72  om index i2} {wr
2690: 6f 6e 67 20 23 20 6f 66 20 65 6e 74 72 69 65 73  ong # of entries
26a0: 20 69 6e 20 69 6e 64 65 78 20 69 32 7d 7d 0a 20   in index i2}}. 
26b0: 20 0a 20 20 20 20 23 20 41 64 64 20 61 64 64 69   .    # Add addi
26c0: 74 69 6f 6e 61 6c 20 63 6f 72 72 75 70 74 69 6f  tional corruptio
26d0: 6e 20 62 79 20 61 70 70 65 6e 64 69 6e 67 20 75  n by appending u
26e0: 6e 75 73 65 64 20 70 61 67 65 73 20 74 6f 20 74  nused pages to t
26f0: 68 65 20 65 6e 64 20 6f 66 0a 20 20 20 20 23 20  he end of.    # 
2700: 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
2710: 65 20 74 65 73 74 65 72 72 2e 64 62 0a 20 20 20  e testerr.db.   
2720: 20 23 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 70   #.    do_test p
2730: 72 61 67 6d 61 2d 33 2e 38 20 7b 0a 20 20 20 20  ragma-3.8 {.    
2740: 20 20 65 78 65 63 73 71 6c 20 7b 44 45 54 41 43    execsql {DETAC
2750: 48 20 74 32 7d 0a 20 20 20 20 20 20 66 6f 72 63  H t2}.      forc
2760: 65 64 65 6c 65 74 65 20 74 65 73 74 65 72 72 2e  edelete testerr.
2770: 64 62 20 74 65 73 74 65 72 72 2e 64 62 2d 6a 6f  db testerr.db-jo
2780: 75 72 6e 61 6c 0a 20 20 20 20 20 20 73 65 74 20  urnal.      set 
2790: 6f 75 74 20 5b 6f 70 65 6e 20 74 65 73 74 65 72  out [open tester
27a0: 72 2e 64 62 20 77 5d 0a 20 20 20 20 20 20 66 63  r.db w].      fc
27b0: 6f 6e 66 69 67 75 72 65 20 24 6f 75 74 20 2d 74  onfigure $out -t
27c0: 72 61 6e 73 6c 61 74 69 6f 6e 20 62 69 6e 61 72  ranslation binar
27d0: 79 0a 20 20 20 20 20 20 73 65 74 20 69 6e 20 5b  y.      set in [
27e0: 6f 70 65 6e 20 74 65 73 74 2e 64 62 20 72 5d 0a  open test.db r].
27f0: 20 20 20 20 20 20 66 63 6f 6e 66 69 67 75 72 65        fconfigure
2800: 20 24 69 6e 20 2d 74 72 61 6e 73 6c 61 74 69 6f   $in -translatio
2810: 6e 20 62 69 6e 61 72 79 0a 20 20 20 20 20 20 70  n binary.      p
2820: 75 74 73 20 2d 6e 6f 6e 65 77 6c 69 6e 65 20 24  uts -nonewline $
2830: 6f 75 74 20 5b 72 65 61 64 20 24 69 6e 5d 0a 20  out [read $in]. 
2840: 20 20 20 20 20 73 65 65 6b 20 24 69 6e 20 30 0a       seek $in 0.
2850: 20 20 20 20 20 20 70 75 74 73 20 2d 6e 6f 6e 65        puts -none
2860: 77 6c 69 6e 65 20 24 6f 75 74 20 5b 72 65 61 64  wline $out [read
2870: 20 24 69 6e 5d 0a 20 20 20 20 20 20 63 6c 6f 73   $in].      clos
2880: 65 20 24 69 6e 0a 20 20 20 20 20 20 63 6c 6f 73  e $in.      clos
2890: 65 20 24 6f 75 74 0a 20 20 20 20 20 20 68 65 78  e $out.      hex
28a0: 69 6f 5f 77 72 69 74 65 20 74 65 73 74 65 72 72  io_write testerr
28b0: 2e 64 62 20 32 38 20 30 30 30 30 30 30 30 30 0a  .db 28 00000000.
28c0: 20 20 20 20 20 20 65 78 65 63 73 71 6c 20 7b 52        execsql {R
28d0: 45 49 4e 44 45 58 20 74 32 7d 0a 20 20 20 20 20  EINDEX t2}.     
28e0: 20 65 78 65 63 73 71 6c 20 7b 50 52 41 47 4d 41   execsql {PRAGMA
28f0: 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b   integrity_check
2900: 7d 0a 20 20 20 20 7d 20 7b 6f 6b 7d 0a 20 20 20  }.    } {ok}.   
2910: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
2920: 33 2e 38 2e 31 20 7b 0a 20 20 20 20 20 20 65 78  3.8.1 {.      ex
2930: 65 63 73 71 6c 20 7b 50 52 41 47 4d 41 20 71 75  ecsql {PRAGMA qu
2940: 69 63 6b 5f 63 68 65 63 6b 7d 0a 20 20 20 20 7d  ick_check}.    }
2950: 20 7b 6f 6b 7d 0a 20 20 20 20 64 6f 5f 74 65 73   {ok}.    do_tes
2960: 74 20 70 72 61 67 6d 61 2d 33 2e 38 2e 32 20 7b  t pragma-3.8.2 {
2970: 0a 20 20 20 20 20 20 65 78 65 63 73 71 6c 20 7b  .      execsql {
2980: 50 52 41 47 4d 41 20 51 55 49 43 4b 5f 43 48 45  PRAGMA QUICK_CHE
2990: 43 4b 7d 0a 20 20 20 20 7d 20 7b 6f 6b 7d 0a 20  CK}.    } {ok}. 
29a0: 20 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d     do_test pragm
29b0: 61 2d 33 2e 39 20 7b 0a 20 20 20 20 20 20 65 78  a-3.9 {.      ex
29c0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 20 20  ecsql {.        
29d0: 41 54 54 41 43 48 20 27 74 65 73 74 65 72 72 2e  ATTACH 'testerr.
29e0: 64 62 27 20 41 53 20 74 32 3b 0a 20 20 20 20 20  db' AS t2;.     
29f0: 20 20 20 50 52 41 47 4d 41 20 69 6e 74 65 67 72     PRAGMA integr
2a00: 69 74 79 5f 63 68 65 63 6b 0a 20 20 20 20 20 20  ity_check.      
2a10: 7d 0a 20 20 20 20 7d 20 7b 7b 2a 2a 2a 20 69 6e  }.    } {{*** in
2a20: 20 64 61 74 61 62 61 73 65 20 74 32 20 2a 2a 2a   database t2 ***
2a30: 0a 50 61 67 65 20 34 20 69 73 20 6e 65 76 65 72  .Page 4 is never
2a40: 20 75 73 65 64 0a 50 61 67 65 20 35 20 69 73 20   used.Page 5 is 
2a50: 6e 65 76 65 72 20 75 73 65 64 0a 50 61 67 65 20  never used.Page 
2a60: 36 20 69 73 20 6e 65 76 65 72 20 75 73 65 64 7d  6 is never used}
2a70: 20 7b 72 6f 77 20 31 20 6d 69 73 73 69 6e 67 20   {row 1 missing 
2a80: 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b  from index i2} {
2a90: 72 6f 77 20 32 20 6d 69 73 73 69 6e 67 20 66 72  row 2 missing fr
2aa0: 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b 77 72  om index i2} {wr
2ab0: 6f 6e 67 20 23 20 6f 66 20 65 6e 74 72 69 65 73  ong # of entries
2ac0: 20 69 6e 20 69 6e 64 65 78 20 69 32 7d 7d 0a 20   in index i2}}. 
2ad0: 20 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d     do_test pragm
2ae0: 61 2d 33 2e 31 30 20 7b 0a 20 20 20 20 20 20 65  a-3.10 {.      e
2af0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 20  xecsql {.       
2b00: 20 50 52 41 47 4d 41 20 69 6e 74 65 67 72 69 74   PRAGMA integrit
2b10: 79 5f 63 68 65 63 6b 3d 31 0a 20 20 20 20 20 20  y_check=1.      
2b20: 7d 0a 20 20 20 20 7d 20 7b 7b 2a 2a 2a 20 69 6e  }.    } {{*** in
2b30: 20 64 61 74 61 62 61 73 65 20 74 32 20 2a 2a 2a   database t2 ***
2b40: 0a 50 61 67 65 20 34 20 69 73 20 6e 65 76 65 72  .Page 4 is never
2b50: 20 75 73 65 64 7d 7d 0a 20 20 20 20 64 6f 5f 74   used}}.    do_t
2b60: 65 73 74 20 70 72 61 67 6d 61 2d 33 2e 31 31 20  est pragma-3.11 
2b70: 7b 0a 20 20 20 20 20 20 65 78 65 63 73 71 6c 20  {.      execsql 
2b80: 7b 0a 20 20 20 20 20 20 20 20 50 52 41 47 4d 41  {.        PRAGMA
2b90: 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b   integrity_check
2ba0: 3d 35 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  =5.      }.    }
2bb0: 20 7b 7b 2a 2a 2a 20 69 6e 20 64 61 74 61 62 61   {{*** in databa
2bc0: 73 65 20 74 32 20 2a 2a 2a 0a 50 61 67 65 20 34  se t2 ***.Page 4
2bd0: 20 69 73 20 6e 65 76 65 72 20 75 73 65 64 0a 50   is never used.P
2be0: 61 67 65 20 35 20 69 73 20 6e 65 76 65 72 20 75  age 5 is never u
2bf0: 73 65 64 0a 50 61 67 65 20 36 20 69 73 20 6e 65  sed.Page 6 is ne
2c00: 76 65 72 20 75 73 65 64 7d 20 7b 72 6f 77 20 31  ver used} {row 1
2c10: 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e   missing from in
2c20: 64 65 78 20 69 32 7d 20 7b 72 6f 77 20 32 20 6d  dex i2} {row 2 m
2c30: 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65  issing from inde
2c40: 78 20 69 32 7d 7d 0a 20 20 20 20 64 6f 5f 74 65  x i2}}.    do_te
2c50: 73 74 20 70 72 61 67 6d 61 2d 33 2e 31 32 20 7b  st pragma-3.12 {
2c60: 0a 20 20 20 20 20 20 65 78 65 63 73 71 6c 20 7b  .      execsql {
2c70: 0a 20 20 20 20 20 20 20 20 50 52 41 47 4d 41 20  .        PRAGMA 
2c80: 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 3d  integrity_check=
2c90: 34 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 20  4.      }.    } 
2ca0: 7b 7b 2a 2a 2a 20 69 6e 20 64 61 74 61 62 61 73  {{*** in databas
2cb0: 65 20 74 32 20 2a 2a 2a 0a 50 61 67 65 20 34 20  e t2 ***.Page 4 
2cc0: 69 73 20 6e 65 76 65 72 20 75 73 65 64 0a 50 61  is never used.Pa
2cd0: 67 65 20 35 20 69 73 20 6e 65 76 65 72 20 75 73  ge 5 is never us
2ce0: 65 64 0a 50 61 67 65 20 36 20 69 73 20 6e 65 76  ed.Page 6 is nev
2cf0: 65 72 20 75 73 65 64 7d 20 7b 72 6f 77 20 31 20  er used} {row 1 
2d00: 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64  missing from ind
2d10: 65 78 20 69 32 7d 7d 0a 20 20 20 20 64 6f 5f 74  ex i2}}.    do_t
2d20: 65 73 74 20 70 72 61 67 6d 61 2d 33 2e 31 33 20  est pragma-3.13 
2d30: 7b 0a 20 20 20 20 20 20 65 78 65 63 73 71 6c 20  {.      execsql 
2d40: 7b 0a 20 20 20 20 20 20 20 20 50 52 41 47 4d 41  {.        PRAGMA
2d50: 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b   integrity_check
2d60: 3d 33 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  =3.      }.    }
2d70: 20 7b 7b 2a 2a 2a 20 69 6e 20 64 61 74 61 62 61   {{*** in databa
2d80: 73 65 20 74 32 20 2a 2a 2a 0a 50 61 67 65 20 34  se t2 ***.Page 4
2d90: 20 69 73 20 6e 65 76 65 72 20 75 73 65 64 0a 50   is never used.P
2da0: 61 67 65 20 35 20 69 73 20 6e 65 76 65 72 20 75  age 5 is never u
2db0: 73 65 64 0a 50 61 67 65 20 36 20 69 73 20 6e 65  sed.Page 6 is ne
2dc0: 76 65 72 20 75 73 65 64 7d 7d 0a 20 20 20 20 64  ver used}}.    d
2dd0: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 33 2e  o_test pragma-3.
2de0: 31 34 20 7b 0a 20 20 20 20 20 20 65 78 65 63 73  14 {.      execs
2df0: 71 6c 20 7b 0a 20 20 20 20 20 20 20 20 50 52 41  ql {.        PRA
2e00: 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68  GMA integrity_ch
2e10: 65 63 6b 28 32 29 0a 20 20 20 20 20 20 7d 0a 20  eck(2).      }. 
2e20: 20 20 20 7d 20 7b 7b 2a 2a 2a 20 69 6e 20 64 61     } {{*** in da
2e30: 74 61 62 61 73 65 20 74 32 20 2a 2a 2a 0a 50 61  tabase t2 ***.Pa
2e40: 67 65 20 34 20 69 73 20 6e 65 76 65 72 20 75 73  ge 4 is never us
2e50: 65 64 0a 50 61 67 65 20 35 20 69 73 20 6e 65 76  ed.Page 5 is nev
2e60: 65 72 20 75 73 65 64 7d 7d 0a 20 20 20 20 64 6f  er used}}.    do
2e70: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 33 2e 31  _test pragma-3.1
2e80: 35 20 7b 0a 20 20 20 20 20 20 65 78 65 63 73 71  5 {.      execsq
2e90: 6c 20 7b 0a 20 20 20 20 20 20 20 20 41 54 54 41  l {.        ATTA
2ea0: 43 48 20 27 74 65 73 74 65 72 72 2e 64 62 27 20  CH 'testerr.db' 
2eb0: 41 53 20 74 33 3b 0a 20 20 20 20 20 20 20 20 50  AS t3;.        P
2ec0: 52 41 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f  RAGMA integrity_
2ed0: 63 68 65 63 6b 0a 20 20 20 20 20 20 7d 0a 20 20  check.      }.  
2ee0: 20 20 7d 20 7b 7b 2a 2a 2a 20 69 6e 20 64 61 74    } {{*** in dat
2ef0: 61 62 61 73 65 20 74 32 20 2a 2a 2a 0a 50 61 67  abase t2 ***.Pag
2f00: 65 20 34 20 69 73 20 6e 65 76 65 72 20 75 73 65  e 4 is never use
2f10: 64 0a 50 61 67 65 20 35 20 69 73 20 6e 65 76 65  d.Page 5 is neve
2f20: 72 20 75 73 65 64 0a 50 61 67 65 20 36 20 69 73  r used.Page 6 is
2f30: 20 6e 65 76 65 72 20 75 73 65 64 7d 20 7b 72 6f   never used} {ro
2f40: 77 20 31 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d  w 1 missing from
2f50: 20 69 6e 64 65 78 20 69 32 7d 20 7b 72 6f 77 20   index i2} {row 
2f60: 32 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69  2 missing from i
2f70: 6e 64 65 78 20 69 32 7d 20 7b 77 72 6f 6e 67 20  ndex i2} {wrong 
2f80: 23 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20  # of entries in 
2f90: 69 6e 64 65 78 20 69 32 7d 20 7b 2a 2a 2a 20 69  index i2} {*** i
2fa0: 6e 20 64 61 74 61 62 61 73 65 20 74 33 20 2a 2a  n database t3 **
2fb0: 2a 0a 50 61 67 65 20 34 20 69 73 20 6e 65 76 65  *.Page 4 is neve
2fc0: 72 20 75 73 65 64 0a 50 61 67 65 20 35 20 69 73  r used.Page 5 is
2fd0: 20 6e 65 76 65 72 20 75 73 65 64 0a 50 61 67 65   never used.Page
2fe0: 20 36 20 69 73 20 6e 65 76 65 72 20 75 73 65 64   6 is never used
2ff0: 7d 20 7b 72 6f 77 20 31 20 6d 69 73 73 69 6e 67  } {row 1 missing
3000: 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20   from index i2} 
3010: 7b 72 6f 77 20 32 20 6d 69 73 73 69 6e 67 20 66  {row 2 missing f
3020: 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b 77  rom index i2} {w
3030: 72 6f 6e 67 20 23 20 6f 66 20 65 6e 74 72 69 65  rong # of entrie
3040: 73 20 69 6e 20 69 6e 64 65 78 20 69 32 7d 7d 0a  s in index i2}}.
3050: 20 20 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67      do_test prag
3060: 6d 61 2d 33 2e 31 36 20 7b 0a 20 20 20 20 20 20  ma-3.16 {.      
3070: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
3080: 20 20 50 52 41 47 4d 41 20 69 6e 74 65 67 72 69    PRAGMA integri
3090: 74 79 5f 63 68 65 63 6b 28 31 30 29 0a 20 20 20  ty_check(10).   
30a0: 20 20 20 7d 0a 20 20 20 20 7d 20 7b 7b 2a 2a 2a     }.    } {{***
30b0: 20 69 6e 20 64 61 74 61 62 61 73 65 20 74 32 20   in database t2 
30c0: 2a 2a 2a 0a 50 61 67 65 20 34 20 69 73 20 6e 65  ***.Page 4 is ne
30d0: 76 65 72 20 75 73 65 64 0a 50 61 67 65 20 35 20  ver used.Page 5 
30e0: 69 73 20 6e 65 76 65 72 20 75 73 65 64 0a 50 61  is never used.Pa
30f0: 67 65 20 36 20 69 73 20 6e 65 76 65 72 20 75 73  ge 6 is never us
3100: 65 64 7d 20 7b 72 6f 77 20 31 20 6d 69 73 73 69  ed} {row 1 missi
3110: 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32  ng from index i2
3120: 7d 20 7b 72 6f 77 20 32 20 6d 69 73 73 69 6e 67  } {row 2 missing
3130: 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20   from index i2} 
3140: 7b 77 72 6f 6e 67 20 23 20 6f 66 20 65 6e 74 72  {wrong # of entr
3150: 69 65 73 20 69 6e 20 69 6e 64 65 78 20 69 32 7d  ies in index i2}
3160: 20 7b 2a 2a 2a 20 69 6e 20 64 61 74 61 62 61 73   {*** in databas
3170: 65 20 74 33 20 2a 2a 2a 0a 50 61 67 65 20 34 20  e t3 ***.Page 4 
3180: 69 73 20 6e 65 76 65 72 20 75 73 65 64 0a 50 61  is never used.Pa
3190: 67 65 20 35 20 69 73 20 6e 65 76 65 72 20 75 73  ge 5 is never us
31a0: 65 64 0a 50 61 67 65 20 36 20 69 73 20 6e 65 76  ed.Page 6 is nev
31b0: 65 72 20 75 73 65 64 7d 20 7b 72 6f 77 20 31 20  er used} {row 1 
31c0: 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64  missing from ind
31d0: 65 78 20 69 32 7d 7d 0a 20 20 20 20 64 6f 5f 74  ex i2}}.    do_t
31e0: 65 73 74 20 70 72 61 67 6d 61 2d 33 2e 31 37 20  est pragma-3.17 
31f0: 7b 0a 20 20 20 20 20 20 65 78 65 63 73 71 6c 20  {.      execsql 
3200: 7b 0a 20 20 20 20 20 20 20 20 50 52 41 47 4d 41  {.        PRAGMA
3210: 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b   integrity_check
3220: 3d 38 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  =8.      }.    }
3230: 20 7b 7b 2a 2a 2a 20 69 6e 20 64 61 74 61 62 61   {{*** in databa
3240: 73 65 20 74 32 20 2a 2a 2a 0a 50 61 67 65 20 34  se t2 ***.Page 4
3250: 20 69 73 20 6e 65 76 65 72 20 75 73 65 64 0a 50   is never used.P
3260: 61 67 65 20 35 20 69 73 20 6e 65 76 65 72 20 75  age 5 is never u
3270: 73 65 64 0a 50 61 67 65 20 36 20 69 73 20 6e 65  sed.Page 6 is ne
3280: 76 65 72 20 75 73 65 64 7d 20 7b 72 6f 77 20 31  ver used} {row 1
3290: 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e   missing from in
32a0: 64 65 78 20 69 32 7d 20 7b 72 6f 77 20 32 20 6d  dex i2} {row 2 m
32b0: 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65  issing from inde
32c0: 78 20 69 32 7d 20 7b 77 72 6f 6e 67 20 23 20 6f  x i2} {wrong # o
32d0: 66 20 65 6e 74 72 69 65 73 20 69 6e 20 69 6e 64  f entries in ind
32e0: 65 78 20 69 32 7d 20 7b 2a 2a 2a 20 69 6e 20 64  ex i2} {*** in d
32f0: 61 74 61 62 61 73 65 20 74 33 20 2a 2a 2a 0a 50  atabase t3 ***.P
3300: 61 67 65 20 34 20 69 73 20 6e 65 76 65 72 20 75  age 4 is never u
3310: 73 65 64 0a 50 61 67 65 20 35 20 69 73 20 6e 65  sed.Page 5 is ne
3320: 76 65 72 20 75 73 65 64 7d 7d 0a 20 20 20 20 64  ver used}}.    d
3330: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 33 2e  o_test pragma-3.
3340: 31 38 20 7b 0a 20 20 20 20 20 20 65 78 65 63 73  18 {.      execs
3350: 71 6c 20 7b 0a 20 20 20 20 20 20 20 20 50 52 41  ql {.        PRA
3360: 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68  GMA integrity_ch
3370: 65 63 6b 3d 34 0a 20 20 20 20 20 20 7d 0a 20 20  eck=4.      }.  
3380: 20 20 7d 20 7b 7b 2a 2a 2a 20 69 6e 20 64 61 74    } {{*** in dat
3390: 61 62 61 73 65 20 74 32 20 2a 2a 2a 0a 50 61 67  abase t2 ***.Pag
33a0: 65 20 34 20 69 73 20 6e 65 76 65 72 20 75 73 65  e 4 is never use
33b0: 64 0a 50 61 67 65 20 35 20 69 73 20 6e 65 76 65  d.Page 5 is neve
33c0: 72 20 75 73 65 64 0a 50 61 67 65 20 36 20 69 73  r used.Page 6 is
33d0: 20 6e 65 76 65 72 20 75 73 65 64 7d 20 7b 72 6f   never used} {ro
33e0: 77 20 31 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d  w 1 missing from
33f0: 20 69 6e 64 65 78 20 69 32 7d 7d 0a 20 20 7d 0a   index i2}}.  }.
3400: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
3410: 2d 33 2e 31 39 20 7b 0a 20 20 20 20 63 61 74 63  -3.19 {.    catc
3420: 68 20 7b 64 62 20 63 6c 6f 73 65 7d 0a 20 20 20  h {db close}.   
3430: 20 66 6f 72 63 65 64 65 6c 65 74 65 20 74 65 73   forcedelete tes
3440: 74 2e 64 62 20 74 65 73 74 2e 64 62 2d 6a 6f 75  t.db test.db-jou
3450: 72 6e 61 6c 0a 20 20 20 20 73 71 6c 69 74 65 33  rnal.    sqlite3
3460: 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20 20 20   db test.db.    
3470: 64 62 20 65 76 61 6c 20 7b 50 52 41 47 4d 41 20  db eval {PRAGMA 
3480: 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 7d  integrity_check}
3490: 0a 20 20 7d 20 7b 6f 6b 7d 0a 7d 0a 0a 23 20 56  .  } {ok}.}..# V
34a0: 65 72 69 66 79 20 74 68 61 74 20 50 52 41 47 4d  erify that PRAGM
34b0: 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63  A integrity_chec
34c0: 6b 20 63 61 74 63 68 65 73 20 55 4e 49 51 55 45  k catches UNIQUE
34d0: 20 61 6e 64 20 4e 4f 54 20 4e 55 4c 4c 0a 23 20   and NOT NULL.# 
34e0: 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
34f0: 74 69 6f 6e 73 2e 0a 23 0a 64 6f 5f 65 78 65 63  tions..#.do_exec
3500: 73 71 6c 5f 74 65 73 74 20 70 72 61 67 6d 61 2d  sql_test pragma-
3510: 33 2e 32 30 20 7b 0a 20 20 43 52 45 41 54 45 20  3.20 {.  CREATE 
3520: 54 41 42 4c 45 20 74 31 28 61 2c 62 29 3b 0a 20  TABLE t1(a,b);. 
3530: 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 74 31   CREATE INDEX t1
3540: 61 20 4f 4e 20 74 31 28 61 29 3b 0a 20 20 49 4e  a ON t1(a);.  IN
3550: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c  SERT INTO t1 VAL
3560: 55 45 53 28 31 2c 31 29 2c 28 32 2c 32 29 2c 28  UES(1,1),(2,2),(
3570: 33 2c 33 29 2c 28 32 2c 34 29 2c 28 4e 55 4c 4c  3,3),(2,4),(NULL
3580: 2c 35 29 2c 28 4e 55 4c 4c 2c 36 29 3b 0a 20 20  ,5),(NULL,6);.  
3590: 50 52 41 47 4d 41 20 77 72 69 74 61 62 6c 65 5f  PRAGMA writable_
35a0: 73 63 68 65 6d 61 3d 4f 4e 3b 0a 20 20 55 50 44  schema=ON;.  UPD
35b0: 41 54 45 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ATE sqlite_maste
35c0: 72 20 53 45 54 20 73 71 6c 3d 27 43 52 45 41 54  r SET sql='CREAT
35d0: 45 20 55 4e 49 51 55 45 20 49 4e 44 45 58 20 74  E UNIQUE INDEX t
35e0: 31 61 20 4f 4e 20 74 31 28 61 29 27 0a 20 20 20  1a ON t1(a)'.   
35f0: 57 48 45 52 45 20 6e 61 6d 65 3d 27 74 31 61 27  WHERE name='t1a'
3600: 3b 0a 20 20 55 50 44 41 54 45 20 73 71 6c 69 74  ;.  UPDATE sqlit
3610: 65 5f 6d 61 73 74 65 72 20 53 45 54 20 73 71 6c  e_master SET sql
3620: 3d 27 43 52 45 41 54 45 20 54 41 42 4c 45 20 74  ='CREATE TABLE t
3630: 31 28 61 20 4e 4f 54 20 4e 55 4c 4c 2c 62 29 27  1(a NOT NULL,b)'
3640: 0a 20 20 20 57 48 45 52 45 20 6e 61 6d 65 3d 27  .   WHERE name='
3650: 74 31 27 3b 0a 20 20 50 52 41 47 4d 41 20 77 72  t1';.  PRAGMA wr
3660: 69 74 61 62 6c 65 5f 73 63 68 65 6d 61 3d 4f 46  itable_schema=OF
3670: 46 3b 0a 20 20 41 4c 54 45 52 20 54 41 42 4c 45  F;.  ALTER TABLE
3680: 20 74 31 20 52 45 4e 41 4d 45 20 54 4f 20 74 31   t1 RENAME TO t1
3690: 78 3b 0a 20 20 50 52 41 47 4d 41 20 69 6e 74 65  x;.  PRAGMA inte
36a0: 67 72 69 74 79 5f 63 68 65 63 6b 3b 0a 7d 20 7b  grity_check;.} {
36b0: 7b 6e 6f 6e 2d 75 6e 69 71 75 65 20 65 6e 74 72  {non-unique entr
36c0: 79 20 69 6e 20 69 6e 64 65 78 20 74 31 61 7d 20  y in index t1a} 
36d0: 7b 4e 55 4c 4c 20 76 61 6c 75 65 20 69 6e 20 74  {NULL value in t
36e0: 31 78 2e 61 7d 20 7b 6e 6f 6e 2d 75 6e 69 71 75  1x.a} {non-uniqu
36f0: 65 20 65 6e 74 72 79 20 69 6e 20 69 6e 64 65 78  e entry in index
3700: 20 74 31 61 7d 20 7b 4e 55 4c 4c 20 76 61 6c 75   t1a} {NULL valu
3710: 65 20 69 6e 20 74 31 78 2e 61 7d 7d 0a 64 6f 5f  e in t1x.a}}.do_
3720: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 70 72 61  execsql_test pra
3730: 67 6d 61 2d 33 2e 32 31 20 7b 0a 20 20 50 52 41  gma-3.21 {.  PRA
3740: 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68  GMA integrity_ch
3750: 65 63 6b 28 33 29 3b 0a 7d 20 7b 7b 6e 6f 6e 2d  eck(3);.} {{non-
3760: 75 6e 69 71 75 65 20 65 6e 74 72 79 20 69 6e 20  unique entry in 
3770: 69 6e 64 65 78 20 74 31 61 7d 20 7b 4e 55 4c 4c  index t1a} {NULL
3780: 20 76 61 6c 75 65 20 69 6e 20 74 31 78 2e 61 7d   value in t1x.a}
3790: 20 7b 6e 6f 6e 2d 75 6e 69 71 75 65 20 65 6e 74   {non-unique ent
37a0: 72 79 20 69 6e 20 69 6e 64 65 78 20 74 31 61 7d  ry in index t1a}
37b0: 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  }.do_execsql_tes
37c0: 74 20 70 72 61 67 6d 61 2d 33 2e 32 32 20 7b 0a  t pragma-3.22 {.
37d0: 20 20 50 52 41 47 4d 41 20 69 6e 74 65 67 72 69    PRAGMA integri
37e0: 74 79 5f 63 68 65 63 6b 28 32 29 3b 0a 7d 20 7b  ty_check(2);.} {
37f0: 7b 6e 6f 6e 2d 75 6e 69 71 75 65 20 65 6e 74 72  {non-unique entr
3800: 79 20 69 6e 20 69 6e 64 65 78 20 74 31 61 7d 20  y in index t1a} 
3810: 7b 4e 55 4c 4c 20 76 61 6c 75 65 20 69 6e 20 74  {NULL value in t
3820: 31 78 2e 61 7d 7d 0a 64 6f 5f 65 78 65 63 73 71  1x.a}}.do_execsq
3830: 6c 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 33 2e  l_test pragma-3.
3840: 32 33 20 7b 0a 20 20 50 52 41 47 4d 41 20 69 6e  23 {.  PRAGMA in
3850: 74 65 67 72 69 74 79 5f 63 68 65 63 6b 28 31 29  tegrity_check(1)
3860: 3b 0a 7d 20 7b 7b 6e 6f 6e 2d 75 6e 69 71 75 65  ;.} {{non-unique
3870: 20 65 6e 74 72 79 20 69 6e 20 69 6e 64 65 78 20   entry in index 
3880: 74 31 61 7d 7d 0a 0a 23 20 50 52 41 47 4d 41 20  t1a}}..# PRAGMA 
3890: 69 6e 74 65 67 72 69 74 79 20 63 68 65 63 6b 20  integrity check 
38a0: 28 6f 72 20 6d 6f 72 65 20 73 70 65 63 69 66 69  (or more specifi
38b0: 63 61 6c 6c 79 20 74 68 65 20 73 71 6c 69 74 65  cally the sqlite
38c0: 33 42 74 72 65 65 43 6f 75 6e 74 28 29 0a 23 20  3BtreeCount().# 
38d0: 69 6e 74 65 72 66 61 63 65 29 20 75 73 65 64 20  interface) used 
38e0: 74 6f 20 6c 65 61 76 65 20 69 6e 64 65 78 20 63  to leave index c
38f0: 75 72 73 6f 72 73 20 69 6e 20 61 6e 20 69 6e 63  ursors in an inc
3900: 6f 6e 73 69 73 74 65 6e 74 20 73 74 61 74 65 0a  onsistent state.
3910: 23 20 77 68 69 63 68 20 63 6f 75 6c 64 20 72 65  # which could re
3920: 73 75 6c 74 20 69 6e 20 61 6e 20 61 73 73 65 72  sult in an asser
3930: 74 69 6f 6e 20 66 61 75 6c 74 20 69 6e 20 73 71  tion fault in sq
3940: 6c 69 74 65 33 42 74 72 65 65 4b 65 79 28 29 0a  lite3BtreeKey().
3950: 23 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20 73 61  # called from sa
3960: 76 65 43 75 72 73 6f 72 50 6f 73 69 74 69 6f 6e  veCursorPosition
3970: 28 29 20 69 66 20 63 6f 6e 74 65 6e 74 20 69 73  () if content is
3980: 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d 20 74 68   removed from th
3990: 65 0a 23 20 69 6e 64 65 78 20 77 68 69 6c 65 20  e.# index while 
39a0: 74 68 65 20 69 6e 74 65 67 72 69 74 79 5f 63 68  the integrity_ch
39b0: 65 63 6b 20 69 73 20 73 74 69 6c 6c 20 72 75 6e  eck is still run
39c0: 6e 69 6e 67 2e 20 20 54 68 69 73 20 74 65 73 74  ning.  This test
39d0: 20 76 65 72 69 66 69 65 73 0a 23 20 74 68 61 74   verifies.# that
39e0: 20 70 72 6f 62 6c 65 6d 20 68 61 73 20 62 65 65   problem has bee
39f0: 6e 20 66 69 78 65 64 2e 0a 23 0a 64 6f 5f 74 65  n fixed..#.do_te
3a00: 73 74 20 70 72 61 67 6d 61 2d 33 2e 33 30 20 7b  st pragma-3.30 {
3a10: 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 64 65  .  db close.  de
3a20: 6c 65 74 65 5f 66 69 6c 65 20 74 65 73 74 2e 64  lete_file test.d
3a30: 62 0a 20 20 73 71 6c 69 74 65 33 20 64 62 20 74  b.  sqlite3 db t
3a40: 65 73 74 2e 64 62 0a 20 20 64 62 20 65 76 61 6c  est.db.  db eval
3a50: 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41   {.    CREATE TA
3a60: 42 4c 45 20 74 31 28 61 2c 62 2c 63 29 3b 0a 20  BLE t1(a,b,c);. 
3a70: 20 20 20 57 49 54 48 20 52 45 43 55 52 53 49 56     WITH RECURSIV
3a80: 45 0a 20 20 20 20 20 20 63 28 69 29 20 41 53 20  E.      c(i) AS 
3a90: 28 56 41 4c 55 45 53 28 31 29 20 55 4e 49 4f 4e  (VALUES(1) UNION
3aa0: 20 41 4c 4c 20 53 45 4c 45 43 54 20 69 2b 31 20   ALL SELECT i+1 
3ab0: 46 52 4f 4d 20 63 20 57 48 45 52 45 20 69 3c 31  FROM c WHERE i<1
3ac0: 30 30 29 0a 20 20 20 20 49 4e 53 45 52 54 20 49  00).    INSERT I
3ad0: 4e 54 4f 20 74 31 28 61 2c 62 2c 63 29 20 53 45  NTO t1(a,b,c) SE
3ae0: 4c 45 43 54 20 69 2c 20 70 72 69 6e 74 66 28 27  LECT i, printf('
3af0: 78 79 7a 25 30 38 78 27 2c 69 29 2c 20 32 30 30  xyz%08x',i), 200
3b00: 30 2d 69 20 46 52 4f 4d 20 63 3b 0a 20 20 20 20  0-i FROM c;.    
3b10: 43 52 45 41 54 45 20 49 4e 44 45 58 20 74 31 61  CREATE INDEX t1a
3b20: 20 4f 4e 20 74 31 28 61 29 3b 0a 20 20 20 20 43   ON t1(a);.    C
3b30: 52 45 41 54 45 20 49 4e 44 45 58 20 74 31 62 63  REATE INDEX t1bc
3b40: 20 4f 4e 20 74 31 28 62 2c 63 29 3b 0a 20 20 7d   ON t1(b,c);.  }
3b50: 0a 20 20 64 62 20 65 76 61 6c 20 7b 50 52 41 47  .  db eval {PRAG
3b60: 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65  MA integrity_che
3b70: 63 6b 7d 20 7b 0a 20 20 20 20 20 64 62 20 65 76  ck} {.     db ev
3b80: 61 6c 20 7b 44 45 4c 45 54 45 20 46 52 4f 4d 20  al {DELETE FROM 
3b90: 74 31 7d 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a 23 20  t1}.  }.} {}..# 
3ba0: 54 65 73 74 20 6d 6f 64 69 66 79 69 6e 67 20 74  Test modifying t
3bb0: 68 65 20 63 61 63 68 65 5f 73 69 7a 65 20 6f 66  he cache_size of
3bc0: 20 61 6e 20 61 74 74 61 63 68 65 64 20 64 61 74   an attached dat
3bd0: 61 62 61 73 65 2e 0a 69 66 63 61 70 61 62 6c 65  abase..ifcapable
3be0: 20 70 61 67 65 72 5f 70 72 61 67 6d 61 73 26 26   pager_pragmas&&
3bf0: 61 74 74 61 63 68 20 7b 0a 64 6f 5f 74 65 73 74  attach {.do_test
3c00: 20 70 72 61 67 6d 61 2d 34 2e 31 20 7b 0a 20 20   pragma-4.1 {.  
3c10: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 41 54  execsql {.    AT
3c20: 54 41 43 48 20 27 74 65 73 74 32 2e 64 62 27 20  TACH 'test2.db' 
3c30: 41 53 20 61 75 78 3b 0a 20 20 20 20 70 72 61 67  AS aux;.    prag
3c40: 6d 61 20 61 75 78 2e 63 61 63 68 65 5f 73 69 7a  ma aux.cache_siz
3c50: 65 3b 0a 20 20 20 20 70 72 61 67 6d 61 20 61 75  e;.    pragma au
3c60: 78 2e 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f  x.default_cache_
3c70: 73 69 7a 65 3b 0a 20 20 7d 20 0a 7d 20 5b 6c 69  size;.  } .} [li
3c80: 73 74 20 24 44 46 4c 54 5f 43 41 43 48 45 5f 53  st $DFLT_CACHE_S
3c90: 5a 20 24 44 46 4c 54 5f 43 41 43 48 45 5f 53 5a  Z $DFLT_CACHE_SZ
3ca0: 5d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  ].do_test pragma
3cb0: 2d 34 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c  -4.2 {.  execsql
3cc0: 20 7b 0a 20 20 20 20 70 72 61 67 6d 61 20 61 75   {.    pragma au
3cd0: 78 2e 63 61 63 68 65 5f 73 69 7a 65 20 3d 20 35  x.cache_size = 5
3ce0: 30 3b 0a 20 20 20 20 70 72 61 67 6d 61 20 61 75  0;.    pragma au
3cf0: 78 2e 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20  x.cache_size;.  
3d00: 20 20 70 72 61 67 6d 61 20 61 75 78 2e 64 65 66    pragma aux.def
3d10: 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65 3b  ault_cache_size;
3d20: 0a 20 20 7d 20 0a 7d 20 5b 6c 69 73 74 20 35 30  .  } .} [list 50
3d30: 20 24 44 46 4c 54 5f 43 41 43 48 45 5f 53 5a 5d   $DFLT_CACHE_SZ]
3d40: 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d  .do_test pragma-
3d50: 34 2e 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  4.3 {.  execsql 
3d60: 7b 0a 20 20 20 20 70 72 61 67 6d 61 20 61 75 78  {.    pragma aux
3d70: 2e 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73  .default_cache_s
3d80: 69 7a 65 20 3d 20 34 35 36 3b 0a 20 20 20 20 70  ize = 456;.    p
3d90: 72 61 67 6d 61 20 61 75 78 2e 63 61 63 68 65 5f  ragma aux.cache_
3da0: 73 69 7a 65 3b 0a 20 20 20 20 70 72 61 67 6d 61  size;.    pragma
3db0: 20 61 75 78 2e 64 65 66 61 75 6c 74 5f 63 61 63   aux.default_cac
3dc0: 68 65 5f 73 69 7a 65 3b 0a 20 20 7d 20 0a 7d 20  he_size;.  } .} 
3dd0: 7b 34 35 36 20 34 35 36 7d 0a 64 6f 5f 74 65 73  {456 456}.do_tes
3de0: 74 20 70 72 61 67 6d 61 2d 34 2e 34 20 7b 0a 20  t pragma-4.4 {. 
3df0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 70   execsql {.    p
3e00: 72 61 67 6d 61 20 63 61 63 68 65 5f 73 69 7a 65  ragma cache_size
3e10: 3b 0a 20 20 20 20 70 72 61 67 6d 61 20 64 65 66  ;.    pragma def
3e20: 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65 3b  ault_cache_size;
3e30: 0a 20 20 7d 20 0a 7d 20 5b 6c 69 73 74 20 24 44  .  } .} [list $D
3e40: 46 4c 54 5f 43 41 43 48 45 5f 53 5a 20 24 44 46  FLT_CACHE_SZ $DF
3e50: 4c 54 5f 43 41 43 48 45 5f 53 5a 5d 0a 64 6f 5f  LT_CACHE_SZ].do_
3e60: 74 65 73 74 20 70 72 61 67 6d 61 2d 34 2e 35 20  test pragma-4.5 
3e70: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
3e80: 20 20 44 45 54 41 43 48 20 61 75 78 3b 0a 20 20    DETACH aux;.  
3e90: 20 20 41 54 54 41 43 48 20 27 74 65 73 74 33 2e    ATTACH 'test3.
3ea0: 64 62 27 20 41 53 20 61 75 78 3b 0a 20 20 20 20  db' AS aux;.    
3eb0: 70 72 61 67 6d 61 20 61 75 78 2e 63 61 63 68 65  pragma aux.cache
3ec0: 5f 73 69 7a 65 3b 0a 20 20 20 20 70 72 61 67 6d  _size;.    pragm
3ed0: 61 20 61 75 78 2e 64 65 66 61 75 6c 74 5f 63 61  a aux.default_ca
3ee0: 63 68 65 5f 73 69 7a 65 3b 0a 20 20 7d 20 0a 7d  che_size;.  } .}
3ef0: 20 5b 6c 69 73 74 20 24 44 46 4c 54 5f 43 41 43   [list $DFLT_CAC
3f00: 48 45 5f 53 5a 20 24 44 46 4c 54 5f 43 41 43 48  HE_SZ $DFLT_CACH
3f10: 45 5f 53 5a 5d 0a 64 6f 5f 74 65 73 74 20 70 72  E_SZ].do_test pr
3f20: 61 67 6d 61 2d 34 2e 36 20 7b 0a 20 20 65 78 65  agma-4.6 {.  exe
3f30: 63 73 71 6c 20 7b 0a 20 20 20 20 44 45 54 41 43  csql {.    DETAC
3f40: 48 20 61 75 78 3b 0a 20 20 20 20 41 54 54 41 43  H aux;.    ATTAC
3f50: 48 20 27 74 65 73 74 32 2e 64 62 27 20 41 53 20  H 'test2.db' AS 
3f60: 61 75 78 3b 0a 20 20 20 20 70 72 61 67 6d 61 20  aux;.    pragma 
3f70: 61 75 78 2e 63 61 63 68 65 5f 73 69 7a 65 3b 0a  aux.cache_size;.
3f80: 20 20 20 20 70 72 61 67 6d 61 20 61 75 78 2e 64      pragma aux.d
3f90: 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a  efault_cache_siz
3fa0: 65 3b 0a 20 20 7d 20 0a 7d 20 7b 34 35 36 20 34  e;.  } .} {456 4
3fb0: 35 36 7d 0a 7d 20 3b 23 20 69 66 63 61 70 61 62  56}.} ;# ifcapab
3fc0: 6c 65 20 70 61 67 65 72 5f 70 72 61 67 6d 61 73  le pager_pragmas
3fd0: 0a 0a 23 20 54 65 73 74 20 74 68 61 74 20 6d 6f  ..# Test that mo
3fe0: 64 69 66 79 69 6e 67 20 74 68 65 20 73 79 6e 63  difying the sync
3ff0: 2d 6c 65 76 65 6c 20 69 6e 20 74 68 65 20 6d 69  -level in the mi
4000: 64 64 6c 65 20 6f 66 20 61 20 74 72 61 6e 73 61  ddle of a transa
4010: 63 74 69 6f 6e 20 69 73 0a 23 20 64 69 73 61 6c  ction is.# disal
4020: 6c 6f 77 65 64 2e 0a 69 66 63 61 70 61 62 6c 65  lowed..ifcapable
4030: 20 70 61 67 65 72 5f 70 72 61 67 6d 61 73 20 7b   pager_pragmas {
4040: 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d  .do_test pragma-
4050: 35 2e 30 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  5.0 {.  execsql 
4060: 7b 0a 20 20 20 20 70 72 61 67 6d 61 20 73 79 6e  {.    pragma syn
4070: 63 68 72 6f 6e 6f 75 73 3b 0a 20 20 7d 20 0a 7d  chronous;.  } .}
4080: 20 7b 32 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61   {2}.do_test pra
4090: 67 6d 61 2d 35 2e 31 20 7b 0a 20 20 63 61 74 63  gma-5.1 {.  catc
40a0: 68 73 71 6c 20 7b 0a 20 20 20 20 42 45 47 49 4e  hsql {.    BEGIN
40b0: 3b 0a 20 20 20 20 70 72 61 67 6d 61 20 73 79 6e  ;.    pragma syn
40c0: 63 68 72 6f 6e 6f 75 73 20 3d 20 4f 46 46 3b 0a  chronous = OFF;.
40d0: 20 20 7d 20 0a 7d 20 7b 31 20 7b 53 61 66 65 74    } .} {1 {Safet
40e0: 79 20 6c 65 76 65 6c 20 6d 61 79 20 6e 6f 74 20  y level may not 
40f0: 62 65 20 63 68 61 6e 67 65 64 20 69 6e 73 69 64  be changed insid
4100: 65 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 7d  e a transaction}
4110: 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  }.do_test pragma
4120: 2d 35 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c  -5.2 {.  execsql
4130: 20 7b 0a 20 20 20 20 70 72 61 67 6d 61 20 73 79   {.    pragma sy
4140: 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20 20 7d 20 0a  nchronous;.  } .
4150: 7d 20 7b 32 7d 0a 63 61 74 63 68 73 71 6c 20 7b  } {2}.catchsql {
4160: 43 4f 4d 4d 49 54 3b 7d 0a 7d 20 3b 23 20 69 66  COMMIT;}.} ;# if
4170: 63 61 70 61 62 6c 65 20 70 61 67 65 72 5f 70 72  capable pager_pr
4180: 61 67 6d 61 73 0a 0a 23 20 54 65 73 74 20 73 63  agmas..# Test sc
4190: 68 65 6d 61 2d 71 75 65 72 79 20 70 72 61 67 6d  hema-query pragm
41a0: 61 73 0a 23 0a 69 66 63 61 70 61 62 6c 65 20 73  as.#.ifcapable s
41b0: 63 68 65 6d 61 5f 70 72 61 67 6d 61 73 20 7b 0a  chema_pragmas {.
41c0: 69 66 63 61 70 61 62 6c 65 20 74 65 6d 70 64 62  ifcapable tempdb
41d0: 26 26 61 74 74 61 63 68 20 7b 0a 20 20 64 6f 5f  &&attach {.  do_
41e0: 74 65 73 74 20 70 72 61 67 6d 61 2d 36 2e 31 20  test pragma-6.1 
41f0: 7b 0a 20 20 20 20 73 65 74 20 72 65 73 20 7b 7d  {.    set res {}
4200: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 53 45  .    execsql {SE
4210: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 73 71 6c 69  LECT * FROM sqli
4220: 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 7d 0a  te_temp_master}.
4230: 20 20 20 20 66 6f 72 65 61 63 68 20 7b 69 64 78      foreach {idx
4240: 20 6e 61 6d 65 20 66 69 6c 65 7d 20 5b 65 78 65   name file} [exe
4250: 63 73 71 6c 20 7b 70 72 61 67 6d 61 20 64 61 74  csql {pragma dat
4260: 61 62 61 73 65 5f 6c 69 73 74 7d 5d 20 7b 0a 20  abase_list}] {. 
4270: 20 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73       lappend res
4280: 20 24 69 64 78 20 24 6e 61 6d 65 0a 20 20 20 20   $idx $name.    
4290: 7d 0a 20 20 20 20 73 65 74 20 72 65 73 0a 20 20  }.    set res.  
42a0: 7d 20 7b 30 20 6d 61 69 6e 20 31 20 74 65 6d 70  } {0 main 1 temp
42b0: 20 32 20 61 75 78 7d 0a 7d 0a 64 6f 5f 74 65 73   2 aux}.}.do_tes
42c0: 74 20 70 72 61 67 6d 61 2d 36 2e 32 20 7b 0a 20  t pragma-6.2 {. 
42d0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43   execsql {.    C
42e0: 52 45 41 54 45 20 54 41 42 4c 45 20 74 32 28 61  REATE TABLE t2(a
42f0: 20 54 59 50 45 5f 58 2c 20 62 20 5b 54 59 50 45   TYPE_X, b [TYPE
4300: 5f 59 5d 2c 20 63 20 22 54 59 50 45 5f 5a 22 29  _Y], c "TYPE_Z")
4310: 3b 0a 20 20 20 20 70 72 61 67 6d 61 20 74 61 62  ;.    pragma tab
4320: 6c 65 5f 69 6e 66 6f 28 74 32 29 0a 20 20 7d 0a  le_info(t2).  }.
4330: 7d 20 7b 30 20 61 20 54 59 50 45 5f 58 20 30 20  } {0 a TYPE_X 0 
4340: 7b 7d 20 30 20 31 20 62 20 54 59 50 45 5f 59 20  {} 0 1 b TYPE_Y 
4350: 30 20 7b 7d 20 30 20 32 20 63 20 54 59 50 45 5f  0 {} 0 2 c TYPE_
4360: 5a 20 30 20 7b 7d 20 30 7d 0a 64 6f 5f 74 65 73  Z 0 {} 0}.do_tes
4370: 74 20 70 72 61 67 6d 61 2d 36 2e 32 2e 31 20 7b  t pragma-6.2.1 {
4380: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
4390: 20 70 72 61 67 6d 61 20 74 61 62 6c 65 5f 69 6e   pragma table_in
43a0: 66 6f 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 62 20  fo;.  }.} {}.db 
43b0: 6e 75 6c 6c 76 61 6c 75 65 20 3c 3c 4e 55 4c 4c  nullvalue <<NULL
43c0: 3e 3e 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  >>.do_test pragm
43d0: 61 2d 36 2e 32 2e 32 20 7b 0a 20 20 65 78 65 63  a-6.2.2 {.  exec
43e0: 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45  sql {.    CREATE
43f0: 20 54 41 42 4c 45 20 74 35 28 0a 20 20 20 20 20   TABLE t5(.     
4400: 20 61 20 54 45 58 54 20 44 45 46 41 55 4c 54 20   a TEXT DEFAULT 
4410: 43 55 52 52 45 4e 54 5f 54 49 4d 45 53 54 41 4d  CURRENT_TIMESTAM
4420: 50 2c 20 0a 20 20 20 20 20 20 62 20 44 45 46 41  P, .      b DEFA
4430: 55 4c 54 20 28 35 2b 33 29 2c 0a 20 20 20 20 20  ULT (5+3),.     
4440: 20 63 20 54 45 58 54 2c 0a 20 20 20 20 20 20 64   c TEXT,.      d
4450: 20 49 4e 54 45 47 45 52 20 44 45 46 41 55 4c 54   INTEGER DEFAULT
4460: 20 4e 55 4c 4c 2c 0a 20 20 20 20 20 20 65 20 54   NULL,.      e T
4470: 45 58 54 20 44 45 46 41 55 4c 54 20 27 27 2c 0a  EXT DEFAULT '',.
4480: 20 20 20 20 20 20 55 4e 49 51 55 45 28 62 2c 63        UNIQUE(b,c
4490: 2c 64 29 2c 0a 20 20 20 20 20 20 50 52 49 4d 41  ,d),.      PRIMA
44a0: 52 59 20 4b 45 59 28 65 2c 62 2c 63 29 0a 20 20  RY KEY(e,b,c).  
44b0: 20 20 29 3b 0a 20 20 20 20 50 52 41 47 4d 41 20    );.    PRAGMA 
44c0: 74 61 62 6c 65 5f 69 6e 66 6f 28 74 35 29 3b 0a  table_info(t5);.
44d0: 20 20 7d 0a 7d 20 7b 30 20 61 20 54 45 58 54 20    }.} {0 a TEXT 
44e0: 30 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 53 54  0 CURRENT_TIMEST
44f0: 41 4d 50 20 30 20 31 20 62 20 7b 7d 20 30 20 35  AMP 0 1 b {} 0 5
4500: 2b 33 20 32 20 32 20 63 20 54 45 58 54 20 30 20  +3 2 2 c TEXT 0 
4510: 3c 3c 4e 55 4c 4c 3e 3e 20 33 20 33 20 64 20 49  <<NULL>> 3 3 d I
4520: 4e 54 45 47 45 52 20 30 20 4e 55 4c 4c 20 30 20  NTEGER 0 NULL 0 
4530: 34 20 65 20 54 45 58 54 20 30 20 27 27 20 31 7d  4 e TEXT 0 '' 1}
4540: 0a 64 62 20 6e 75 6c 6c 76 61 6c 75 65 20 7b 7d  .db nullvalue {}
4550: 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d  .do_test pragma-
4560: 36 2e 32 2e 33 20 7b 0a 20 20 65 78 65 63 73 71  6.2.3 {.  execsq
4570: 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54  l {.    CREATE T
4580: 41 42 4c 45 20 74 32 5f 33 28 61 2c 62 20 49 4e  ABLE t2_3(a,b IN
4590: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
45a0: 59 2c 63 29 3b 0a 20 20 20 20 70 72 61 67 6d 61  Y,c);.    pragma
45b0: 20 74 61 62 6c 65 5f 69 6e 66 6f 28 74 32 5f 33   table_info(t2_3
45c0: 29 0a 20 20 7d 0a 7d 20 7b 30 20 61 20 7b 7d 20  ).  }.} {0 a {} 
45d0: 30 20 7b 7d 20 30 20 31 20 62 20 49 4e 54 45 47  0 {} 0 1 b INTEG
45e0: 45 52 20 30 20 7b 7d 20 31 20 32 20 63 20 7b 7d  ER 0 {} 1 2 c {}
45f0: 20 30 20 7b 7d 20 30 7d 0a 69 66 63 61 70 61 62   0 {} 0}.ifcapab
4600: 6c 65 20 7b 66 6f 72 65 69 67 6e 6b 65 79 7d 20  le {foreignkey} 
4610: 7b 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67  {.  do_test prag
4620: 6d 61 2d 36 2e 33 2e 31 20 7b 0a 20 20 20 20 65  ma-6.3.1 {.    e
4630: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 43  xecsql {.      C
4640: 52 45 41 54 45 20 54 41 42 4c 45 20 74 33 28 61  REATE TABLE t3(a
4650: 20 69 6e 74 20 72 65 66 65 72 65 6e 63 65 73 20   int references 
4660: 74 32 28 62 29 2c 20 62 20 55 4e 49 51 55 45 29  t2(b), b UNIQUE)
4670: 3b 0a 20 20 20 20 20 20 70 72 61 67 6d 61 20 66  ;.      pragma f
4680: 6f 72 65 69 67 6e 5f 6b 65 79 5f 6c 69 73 74 28  oreign_key_list(
4690: 74 33 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b  t3);.    }.  } {
46a0: 30 20 30 20 74 32 20 61 20 62 20 7b 4e 4f 20 41  0 0 t2 a b {NO A
46b0: 43 54 49 4f 4e 7d 20 7b 4e 4f 20 41 43 54 49 4f  CTION} {NO ACTIO
46c0: 4e 7d 20 4e 4f 4e 45 7d 0a 20 20 64 6f 5f 74 65  N} NONE}.  do_te
46d0: 73 74 20 70 72 61 67 6d 61 2d 36 2e 33 2e 32 20  st pragma-6.3.2 
46e0: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a  {.    execsql {.
46f0: 20 20 20 20 20 20 70 72 61 67 6d 61 20 66 6f 72        pragma for
4700: 65 69 67 6e 5f 6b 65 79 5f 6c 69 73 74 3b 0a 20  eign_key_list;. 
4710: 20 20 20 7d 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f     }.  } {}.  do
4720: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 36 2e 33  _test pragma-6.3
4730: 2e 33 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  .3 {.    execsql
4740: 20 7b 0a 20 20 20 20 20 20 70 72 61 67 6d 61 20   {.      pragma 
4750: 66 6f 72 65 69 67 6e 5f 6b 65 79 5f 6c 69 73 74  foreign_key_list
4760: 28 74 33 5f 62 6f 67 75 73 29 3b 0a 20 20 20 20  (t3_bogus);.    
4770: 7d 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65  }.  } {}.  do_te
4780: 73 74 20 70 72 61 67 6d 61 2d 36 2e 33 2e 34 20  st pragma-6.3.4 
4790: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a  {.    execsql {.
47a0: 20 20 20 20 20 20 70 72 61 67 6d 61 20 66 6f 72        pragma for
47b0: 65 69 67 6e 5f 6b 65 79 5f 6c 69 73 74 28 74 35  eign_key_list(t5
47c0: 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 7d 0a  );.    }.  } {}.
47d0: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
47e0: 2d 36 2e 34 20 7b 0a 20 20 20 20 63 61 70 74 75  -6.4 {.    captu
47f0: 72 65 5f 70 72 61 67 6d 61 20 64 62 20 6f 75 74  re_pragma db out
4800: 20 7b 0a 20 20 20 20 20 20 70 72 61 67 6d 61 20   {.      pragma 
4810: 69 6e 64 65 78 5f 6c 69 73 74 28 74 33 29 3b 0a  index_list(t3);.
4820: 20 20 20 20 7d 0a 20 20 20 20 64 62 20 65 76 61      }.    db eva
4830: 6c 20 7b 53 45 4c 45 43 54 20 73 65 71 2c 20 22  l {SELECT seq, "
4840: 6e 61 6d 65 22 2c 20 22 75 6e 69 71 75 65 22 20  name", "unique" 
4850: 46 52 4f 4d 20 6f 75 74 20 4f 52 44 45 52 20 42  FROM out ORDER B
4860: 59 20 73 65 71 7d 0a 20 20 7d 20 7b 30 20 73 71  Y seq}.  } {0 sq
4870: 6c 69 74 65 5f 61 75 74 6f 69 6e 64 65 78 5f 74  lite_autoindex_t
4880: 33 5f 31 20 31 7d 0a 7d 0a 69 66 63 61 70 61 62  3_1 1}.}.ifcapab
4890: 6c 65 20 7b 21 66 6f 72 65 69 67 6e 6b 65 79 7d  le {!foreignkey}
48a0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 43 52   {.  execsql {CR
48b0: 45 41 54 45 20 54 41 42 4c 45 20 74 33 28 61 2c  EATE TABLE t3(a,
48c0: 62 20 55 4e 49 51 55 45 29 7d 0a 7d 0a 64 6f 5f  b UNIQUE)}.}.do_
48d0: 74 65 73 74 20 70 72 61 67 6d 61 2d 36 2e 35 2e  test pragma-6.5.
48e0: 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  1 {.  execsql {.
48f0: 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45 58      CREATE INDEX
4900: 20 74 33 69 31 20 4f 4e 20 74 33 28 61 2c 62 29   t3i1 ON t3(a,b)
4910: 3b 0a 20 20 7d 0a 20 20 63 61 70 74 75 72 65 5f  ;.  }.  capture_
4920: 70 72 61 67 6d 61 20 64 62 20 6f 75 74 20 7b 0a  pragma db out {.
4930: 20 20 20 20 70 72 61 67 6d 61 20 69 6e 64 65 78      pragma index
4940: 5f 69 6e 66 6f 28 74 33 69 31 29 3b 0a 20 20 7d  _info(t3i1);.  }
4950: 0a 20 20 64 62 20 65 76 61 6c 20 7b 53 45 4c 45  .  db eval {SELE
4960: 43 54 20 73 65 71 6e 6f 2c 20 63 69 64 2c 20 6e  CT seqno, cid, n
4970: 61 6d 65 20 46 52 4f 4d 20 6f 75 74 20 4f 52 44  ame FROM out ORD
4980: 45 52 20 42 59 20 73 65 71 6e 6f 7d 0a 7d 20 7b  ER BY seqno}.} {
4990: 30 20 30 20 61 20 31 20 31 20 62 7d 0a 0a 23 20  0 0 a 1 1 b}..# 
49a0: 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 32  EVIDENCE-OF: R-2
49b0: 33 31 31 34 2d 32 31 36 39 35 20 54 68 65 20 61  3114-21695 The a
49c0: 75 78 69 6c 69 61 72 79 20 69 6e 64 65 78 2d 63  uxiliary index-c
49d0: 6f 6c 75 6d 6e 73 20 61 72 65 20 6e 6f 74 20 73  olumns are not s
49e0: 68 6f 77 6e 0a 23 20 62 79 20 74 68 65 20 69 6e  hown.# by the in
49f0: 64 65 78 5f 69 6e 66 6f 20 70 72 61 67 6d 61 2c  dex_info pragma,
4a00: 20 62 75 74 20 74 68 65 79 20 61 72 65 20 6c 69   but they are li
4a10: 73 74 65 64 20 62 79 20 74 68 65 20 69 6e 64 65  sted by the inde
4a20: 78 5f 78 69 6e 66 6f 0a 23 20 70 72 61 67 6d 61  x_xinfo.# pragma
4a30: 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 70 72 61 67  ..#.do_test prag
4a40: 6d 61 2d 36 2e 35 2e 31 62 20 7b 0a 20 20 63 61  ma-6.5.1b {.  ca
4a50: 70 74 75 72 65 5f 70 72 61 67 6d 61 20 64 62 20  pture_pragma db 
4a60: 6f 75 74 20 7b 50 52 41 47 4d 41 20 69 6e 64 65  out {PRAGMA inde
4a70: 78 5f 78 69 6e 66 6f 28 74 33 69 31 29 7d 0a 20  x_xinfo(t3i1)}. 
4a80: 20 64 62 20 65 76 61 6c 20 7b 53 45 4c 45 43 54   db eval {SELECT
4a90: 20 73 65 71 6e 6f 2c 20 63 69 64 2c 20 6e 61 6d   seqno, cid, nam
4aa0: 65 20 46 52 4f 4d 20 6f 75 74 20 4f 52 44 45 52  e FROM out ORDER
4ab0: 20 42 59 20 73 65 71 6e 6f 7d 0a 7d 20 7b 30 20   BY seqno}.} {0 
4ac0: 30 20 61 20 31 20 31 20 62 20 32 20 2d 31 20 7b  0 a 1 1 b 2 -1 {
4ad0: 7d 7d 0a 0a 0a 23 20 45 56 49 44 45 4e 43 45 2d  }}...# EVIDENCE-
4ae0: 4f 46 3a 20 52 2d 32 39 34 34 38 2d 36 30 33 34  OF: R-29448-6034
4af0: 36 20 50 52 41 47 4d 41 20 73 63 68 65 6d 61 2e  6 PRAGMA schema.
4b00: 69 6e 64 65 78 5f 69 6e 66 6f 28 69 6e 64 65 78  index_info(index
4b10: 2d 6e 61 6d 65 29 3b 20 54 68 69 73 0a 23 20 70  -name); This.# p
4b20: 72 61 67 6d 61 20 72 65 74 75 72 6e 73 20 6f 6e  ragma returns on
4b30: 65 20 72 6f 77 20 66 6f 72 20 65 61 63 68 20 6b  e row for each k
4b40: 65 79 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65  ey column in the
4b50: 20 6e 61 6d 65 64 20 69 6e 64 65 78 2e 0a 23 0a   named index..#.
4b60: 23 20 28 54 68 65 20 66 69 72 73 74 20 63 6f 6c  # (The first col
4b70: 75 6d 6e 20 6f 66 20 6f 75 74 70 75 74 20 66 72  umn of output fr
4b80: 6f 6d 20 50 52 41 47 4d 41 20 69 6e 64 65 78 5f  om PRAGMA index_
4b90: 69 6e 66 6f 20 69 73 2e 2e 2e 29 0a 23 20 45 56  info is...).# EV
4ba0: 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 33 34 31  IDENCE-OF: R-341
4bb0: 38 36 2d 35 32 39 31 34 20 54 68 65 20 72 61 6e  86-52914 The ran
4bc0: 6b 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20  k of the column 
4bd0: 77 69 74 68 69 6e 20 74 68 65 20 69 6e 64 65 78  within the index
4be0: 2e 20 28 30 0a 23 20 6d 65 61 6e 73 20 6c 65 66  . (0.# means lef
4bf0: 74 2d 6d 6f 73 74 2e 29 0a 23 0a 23 20 28 54 68  t-most.).#.# (Th
4c00: 65 20 73 65 63 6f 6e 64 20 63 6f 6c 75 6d 6e 20  e second column 
4c10: 6f 66 20 6f 75 74 70 75 74 20 66 72 6f 6d 20 50  of output from P
4c20: 52 41 47 4d 41 20 69 6e 64 65 78 5f 69 6e 66 6f  RAGMA index_info
4c30: 20 69 73 2e 2e 2e 29 0a 23 20 45 56 49 44 45 4e   is...).# EVIDEN
4c40: 43 45 2d 4f 46 3a 20 52 2d 36 35 30 31 39 2d 30  CE-OF: R-65019-0
4c50: 38 33 38 33 20 54 68 65 20 72 61 6e 6b 20 6f 66  8383 The rank of
4c60: 20 74 68 65 20 63 6f 6c 75 6d 6e 20 77 69 74 68   the column with
4c70: 69 6e 20 74 68 65 20 74 61 62 6c 65 0a 23 20 62  in the table.# b
4c80: 65 69 6e 67 20 69 6e 64 65 78 65 64 2e 0a 23 0a  eing indexed..#.
4c90: 23 20 28 54 68 65 20 74 68 69 72 64 20 63 6f 6c  # (The third col
4ca0: 75 6d 6e 20 6f 66 20 6f 75 74 70 75 74 20 66 72  umn of output fr
4cb0: 6f 6d 20 50 52 41 47 4d 41 20 69 6e 64 65 78 5f  om PRAGMA index_
4cc0: 69 6e 66 6f 20 69 73 2e 2e 2e 29 0a 23 20 45 56  info is...).# EV
4cd0: 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 30 39 37  IDENCE-OF: R-097
4ce0: 37 33 2d 33 34 32 36 36 20 54 68 65 20 6e 61 6d  73-34266 The nam
4cf0: 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20  e of the column 
4d00: 62 65 69 6e 67 20 69 6e 64 65 78 65 64 2e 0a 23  being indexed..#
4d10: 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74  .do_execsql_test
4d20: 20 70 72 61 67 6d 61 2d 36 2e 35 2e 31 63 20 7b   pragma-6.5.1c {
4d30: 0a 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20  .  CREATE INDEX 
4d40: 74 33 69 32 20 4f 4e 20 74 33 28 62 2c 61 29 3b  t3i2 ON t3(b,a);
4d50: 0a 20 20 50 52 41 47 4d 41 20 69 6e 64 65 78 5f  .  PRAGMA index_
4d60: 69 6e 66 6f 3d 27 74 33 69 32 27 3b 0a 20 20 44  info='t3i2';.  D
4d70: 52 4f 50 20 49 4e 44 45 58 20 74 33 69 32 3b 0a  ROP INDEX t3i2;.
4d80: 7d 20 7b 30 20 31 20 62 20 31 20 30 20 61 7d 0a  } {0 1 b 1 0 a}.
4d90: 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d  .do_test pragma-
4da0: 36 2e 35 2e 32 20 7b 0a 20 20 65 78 65 63 73 71  6.5.2 {.  execsq
4db0: 6c 20 7b 0a 20 20 20 20 70 72 61 67 6d 61 20 69  l {.    pragma i
4dc0: 6e 64 65 78 5f 69 6e 66 6f 28 74 33 69 31 5f 62  ndex_info(t3i1_b
4dd0: 6f 67 75 73 29 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a  ogus);.  }.} {}.
4de0: 0a 69 66 63 61 70 61 62 6c 65 20 74 65 6d 70 64  .ifcapable tempd
4df0: 62 20 7b 0a 20 20 23 20 54 65 73 74 20 66 6f 72  b {.  # Test for
4e00: 20 74 69 63 6b 65 74 20 23 33 33 32 30 2e 20 57   ticket #3320. W
4e10: 68 65 6e 20 61 20 74 65 6d 70 20 74 61 62 6c 65  hen a temp table
4e20: 20 6f 66 20 74 68 65 20 73 61 6d 65 20 6e 61 6d   of the same nam
4e30: 65 20 65 78 69 73 74 73 2c 20 6d 61 6b 65 0a 20  e exists, make. 
4e40: 20 23 20 73 75 72 65 20 74 68 65 20 73 63 68 65   # sure the sche
4e50: 6d 61 20 6f 66 20 74 68 65 20 6d 61 69 6e 20 74  ma of the main t
4e60: 61 62 6c 65 20 63 61 6e 20 73 74 69 6c 6c 20 62  able can still b
4e70: 65 20 71 75 65 72 69 65 64 20 75 73 69 6e 67 20  e queried using 
4e80: 0a 20 20 23 20 22 70 72 61 67 6d 61 20 74 61 62  .  # "pragma tab
4e90: 6c 65 5f 69 6e 66 6f 22 3a 0a 20 20 64 6f 5f 74  le_info":.  do_t
4ea0: 65 73 74 20 70 72 61 67 6d 61 2d 36 2e 36 2e 31  est pragma-6.6.1
4eb0: 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b   {.    execsql {
4ec0: 0a 20 20 20 20 20 20 43 52 45 41 54 45 20 54 41  .      CREATE TA
4ed0: 42 4c 45 20 74 72 69 61 6c 28 63 6f 6c 5f 6d 61  BLE trial(col_ma
4ee0: 69 6e 29 3b 0a 20 20 20 20 20 20 43 52 45 41 54  in);.      CREAT
4ef0: 45 20 54 45 4d 50 20 54 41 42 4c 45 20 74 72 69  E TEMP TABLE tri
4f00: 61 6c 28 63 6f 6c 5f 74 65 6d 70 29 3b 0a 20 20  al(col_temp);.  
4f10: 20 20 7d 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f    }.  } {}.  do_
4f20: 74 65 73 74 20 70 72 61 67 6d 61 2d 36 2e 36 2e  test pragma-6.6.
4f30: 32 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  2 {.    execsql 
4f40: 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 74  {.      PRAGMA t
4f50: 61 62 6c 65 5f 69 6e 66 6f 28 74 72 69 61 6c 29  able_info(trial)
4f60: 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 30 20 63  ;.    }.  } {0 c
4f70: 6f 6c 5f 74 65 6d 70 20 7b 7d 20 30 20 7b 7d 20  ol_temp {} 0 {} 
4f80: 30 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61  0}.  do_test pra
4f90: 67 6d 61 2d 36 2e 36 2e 33 20 7b 0a 20 20 20 20  gma-6.6.3 {.    
4fa0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
4fb0: 50 52 41 47 4d 41 20 74 65 6d 70 2e 74 61 62 6c  PRAGMA temp.tabl
4fc0: 65 5f 69 6e 66 6f 28 74 72 69 61 6c 29 3b 0a 20  e_info(trial);. 
4fd0: 20 20 20 7d 0a 20 20 7d 20 7b 30 20 63 6f 6c 5f     }.  } {0 col_
4fe0: 74 65 6d 70 20 7b 7d 20 30 20 7b 7d 20 30 7d 0a  temp {} 0 {} 0}.
4ff0: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
5000: 2d 36 2e 36 2e 34 20 7b 0a 20 20 20 20 65 78 65  -6.6.4 {.    exe
5010: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41  csql {.      PRA
5020: 47 4d 41 20 6d 61 69 6e 2e 74 61 62 6c 65 5f 69  GMA main.table_i
5030: 6e 66 6f 28 74 72 69 61 6c 29 3b 0a 20 20 20 20  nfo(trial);.    
5040: 7d 0a 20 20 7d 20 7b 30 20 63 6f 6c 5f 6d 61 69  }.  } {0 col_mai
5050: 6e 20 7b 7d 20 30 20 7b 7d 20 30 7d 0a 7d 0a 0a  n {} 0 {} 0}.}..
5060: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 36  do_test pragma-6
5070: 2e 37 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .7 {.  execsql {
5080: 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  .    CREATE TABL
5090: 45 20 74 65 73 74 5f 74 61 62 6c 65 28 0a 20 20  E test_table(.  
50a0: 20 20 20 20 6f 6e 65 20 49 4e 54 20 4e 4f 54 20      one INT NOT 
50b0: 4e 55 4c 4c 20 44 45 46 41 55 4c 54 20 2d 31 2c  NULL DEFAULT -1,
50c0: 20 0a 20 20 20 20 20 20 74 77 6f 20 74 65 78 74   .      two text
50d0: 2c 0a 20 20 20 20 20 20 74 68 72 65 65 20 56 41  ,.      three VA
50e0: 52 43 48 41 52 28 34 35 2c 20 36 35 29 20 44 45  RCHAR(45, 65) DE
50f0: 46 41 55 4c 54 20 27 61 62 63 64 65 27 2c 0a 20  FAULT 'abcde',. 
5100: 20 20 20 20 20 66 6f 75 72 20 52 45 41 4c 20 44       four REAL D
5110: 45 46 41 55 4c 54 20 58 27 61 62 63 64 65 66 27  EFAULT X'abcdef'
5120: 2c 0a 20 20 20 20 20 20 66 69 76 65 20 44 45 46  ,.      five DEF
5130: 41 55 4c 54 20 43 55 52 52 45 4e 54 5f 54 49 4d  AULT CURRENT_TIM
5140: 45 0a 20 20 20 20 29 3b 0a 20 20 7d 0a 20 20 63  E.    );.  }.  c
5150: 61 70 74 75 72 65 5f 70 72 61 67 6d 61 20 64 62  apture_pragma db
5160: 20 6f 75 74 20 7b 50 52 41 47 4d 41 20 74 61 62   out {PRAGMA tab
5170: 6c 65 5f 69 6e 66 6f 28 74 65 73 74 5f 74 61 62  le_info(test_tab
5180: 6c 65 29 7d 0a 20 20 64 62 20 65 76 61 6c 20 7b  le)}.  db eval {
5190: 53 45 4c 45 43 54 20 63 69 64 2c 20 22 6e 61 6d  SELECT cid, "nam
51a0: 65 22 2c 20 74 79 70 65 2c 20 22 6e 6f 74 6e 75  e", type, "notnu
51b0: 6c 6c 22 2c 20 64 66 6c 74 5f 76 61 6c 75 65 2c  ll", dflt_value,
51c0: 20 70 6b 20 46 52 4f 4d 20 6f 75 74 0a 20 20 20   pk FROM out.   
51d0: 20 20 20 20 20 20 20 20 20 4f 52 44 45 52 20 42           ORDER B
51e0: 59 20 63 69 64 7d 0a 7d 20 5b 63 6f 6e 63 61 74  Y cid}.} [concat
51f0: 20 5c 0a 20 20 7b 30 20 6f 6e 65 20 49 4e 54 20   \.  {0 one INT 
5200: 31 20 2d 31 20 30 7d 20 5c 0a 20 20 7b 31 20 74  1 -1 0} \.  {1 t
5210: 77 6f 20 74 65 78 74 20 30 20 7b 7d 20 30 7d 20  wo text 0 {} 0} 
5220: 5c 0a 20 20 7b 32 20 74 68 72 65 65 20 7b 56 41  \.  {2 three {VA
5230: 52 43 48 41 52 28 34 35 2c 20 36 35 29 7d 20 30  RCHAR(45, 65)} 0
5240: 20 27 61 62 63 64 65 27 20 30 7d 20 5c 0a 20 20   'abcde' 0} \.  
5250: 7b 33 20 66 6f 75 72 20 52 45 41 4c 20 30 20 58  {3 four REAL 0 X
5260: 27 61 62 63 64 65 66 27 20 30 7d 20 5c 0a 20 20  'abcdef' 0} \.  
5270: 7b 34 20 66 69 76 65 20 7b 7d 20 30 20 43 55 52  {4 five {} 0 CUR
5280: 52 45 4e 54 5f 54 49 4d 45 20 30 7d 20 5c 0a 5d  RENT_TIME 0} \.]
5290: 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d  .do_test pragma-
52a0: 36 2e 38 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  6.8 {.  execsql 
52b0: 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42  {.    CREATE TAB
52c0: 4c 45 20 74 36 38 28 61 2c 62 2c 63 2c 50 52 49  LE t68(a,b,c,PRI
52d0: 4d 41 52 59 20 4b 45 59 28 61 2c 62 2c 61 2c 63  MARY KEY(a,b,a,c
52e0: 29 29 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 74  ));.    PRAGMA t
52f0: 61 62 6c 65 5f 69 6e 66 6f 28 74 36 38 29 3b 0a  able_info(t68);.
5300: 20 20 7d 0a 7d 20 5b 63 6f 6e 63 61 74 20 5c 0a    }.} [concat \.
5310: 20 20 7b 30 20 61 20 7b 7d 20 30 20 7b 7d 20 31    {0 a {} 0 {} 1
5320: 7d 20 5c 0a 20 20 7b 31 20 62 20 7b 7d 20 30 20  } \.  {1 b {} 0 
5330: 7b 7d 20 32 7d 20 5c 0a 20 20 7b 32 20 63 20 7b  {} 2} \.  {2 c {
5340: 7d 20 30 20 7b 7d 20 34 7d 20 5c 0a 5d 0a 7d 20  } 0 {} 4} \.].} 
5350: 3b 23 20 69 66 63 61 70 61 62 6c 65 20 73 63 68  ;# ifcapable sch
5360: 65 6d 61 5f 70 72 61 67 6d 61 73 0a 23 20 4d 69  ema_pragmas.# Mi
5370: 73 63 65 6c 6c 61 6e 65 6f 75 73 20 74 65 73 74  scellaneous test
5380: 73 0a 23 0a 69 66 63 61 70 61 62 6c 65 20 73 63  s.#.ifcapable sc
5390: 68 65 6d 61 5f 70 72 61 67 6d 61 73 20 7b 0a 23  hema_pragmas {.#
53a0: 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d   EVIDENCE-OF: R-
53b0: 36 34 31 30 33 2d 31 37 37 37 36 20 50 52 41 47  64103-17776 PRAG
53c0: 4d 41 20 73 63 68 65 6d 61 2e 69 6e 64 65 78 5f  MA schema.index_
53d0: 6c 69 73 74 28 74 61 62 6c 65 2d 6e 61 6d 65 29  list(table-name)
53e0: 3b 20 54 68 69 73 0a 23 20 70 72 61 67 6d 61 20  ; This.# pragma 
53f0: 72 65 74 75 72 6e 73 20 6f 6e 65 20 72 6f 77 20  returns one row 
5400: 66 6f 72 20 65 61 63 68 20 69 6e 64 65 78 20 61  for each index a
5410: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
5420: 68 65 20 67 69 76 65 6e 20 74 61 62 6c 65 2e 0a  he given table..
5430: 23 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  #.do_test pragma
5440: 2d 37 2e 31 2e 31 20 7b 0a 20 20 23 20 4d 61 6b  -7.1.1 {.  # Mak
5450: 65 20 73 75 72 65 20 61 20 70 72 61 67 6d 61 20  e sure a pragma 
5460: 6b 6e 6f 77 73 20 74 6f 20 72 65 61 64 20 74 68  knows to read th
5470: 65 20 73 63 68 65 6d 61 20 69 66 20 69 74 20 6e  e schema if it n
5480: 65 65 64 73 20 74 6f 0a 20 20 64 62 20 63 6c 6f  eeds to.  db clo
5490: 73 65 0a 20 20 73 71 6c 69 74 65 33 20 64 62 20  se.  sqlite3 db 
54a0: 74 65 73 74 2e 64 62 0a 20 20 63 61 70 74 75 72  test.db.  captur
54b0: 65 5f 70 72 61 67 6d 61 20 64 62 20 6f 75 74 20  e_pragma db out 
54c0: 22 50 52 41 47 4d 41 20 69 6e 64 65 78 5f 6c 69  "PRAGMA index_li
54d0: 73 74 28 74 33 29 22 0a 20 20 64 62 20 65 76 61  st(t3)".  db eva
54e0: 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 2c 20  l {SELECT name, 
54f0: 22 6f 72 69 67 69 6e 22 20 46 52 4f 4d 20 6f 75  "origin" FROM ou
5500: 74 20 4f 52 44 45 52 20 42 59 20 6e 61 6d 65 20  t ORDER BY name 
5510: 44 45 53 43 7d 0a 7d 20 7b 74 33 69 31 20 63 20  DESC}.} {t3i1 c 
5520: 73 71 6c 69 74 65 5f 61 75 74 6f 69 6e 64 65 78  sqlite_autoindex
5530: 5f 74 33 5f 31 20 75 7d 0a 64 6f 5f 74 65 73 74  _t3_1 u}.do_test
5540: 20 70 72 61 67 6d 61 2d 37 2e 31 2e 32 20 7b 0a   pragma-7.1.2 {.
5550: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
5560: 70 72 61 67 6d 61 20 69 6e 64 65 78 5f 6c 69 73  pragma index_lis
5570: 74 28 74 33 5f 62 6f 67 75 73 29 3b 0a 20 20 7d  t(t3_bogus);.  }
5580: 0a 7d 20 7b 7d 0a 7d 20 3b 23 20 69 66 63 61 70  .} {}.} ;# ifcap
5590: 61 62 6c 65 20 73 63 68 65 6d 61 5f 70 72 61 67  able schema_prag
55a0: 6d 61 73 0a 69 66 63 61 70 61 62 6c 65 20 7b 75  mas.ifcapable {u
55b0: 74 66 31 36 7d 20 7b 0a 20 20 69 66 20 7b 5b 70  tf16} {.  if {[p
55c0: 65 72 6d 75 74 61 74 69 6f 6e 5d 20 3d 3d 20 22  ermutation] == "
55d0: 22 7d 20 7b 0a 20 20 20 20 64 6f 5f 74 65 73 74  "} {.    do_test
55e0: 20 70 72 61 67 6d 61 2d 37 2e 32 20 7b 0a 20 20   pragma-7.2 {.  
55f0: 20 20 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 20      db close.   
5600: 20 20 20 73 71 6c 69 74 65 33 20 64 62 20 74 65     sqlite3 db te
5610: 73 74 2e 64 62 0a 20 20 20 20 20 20 63 61 74 63  st.db.      catc
5620: 68 73 71 6c 20 7b 0a 20 20 20 20 20 20 20 20 70  hsql {.        p
5630: 72 61 67 6d 61 20 65 6e 63 6f 64 69 6e 67 3d 62  ragma encoding=b
5640: 6f 67 75 73 3b 0a 20 20 20 20 20 20 7d 0a 20 20  ogus;.      }.  
5650: 20 20 7d 20 7b 31 20 7b 75 6e 73 75 70 70 6f 72    } {1 {unsuppor
5660: 74 65 64 20 65 6e 63 6f 64 69 6e 67 3a 20 62 6f  ted encoding: bo
5670: 67 75 73 7d 7d 0a 20 20 7d 0a 7d 0a 69 66 63 61  gus}}.  }.}.ifca
5680: 70 61 62 6c 65 20 74 65 6d 70 64 62 20 7b 0a 20  pable tempdb {. 
5690: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
56a0: 37 2e 33 20 7b 0a 20 20 20 20 64 62 20 63 6c 6f  7.3 {.    db clo
56b0: 73 65 0a 20 20 20 20 73 71 6c 69 74 65 33 20 64  se.    sqlite3 d
56c0: 62 20 74 65 73 74 2e 64 62 0a 20 20 20 20 65 78  b test.db.    ex
56d0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 70 72  ecsql {.      pr
56e0: 61 67 6d 61 20 6c 6f 63 6b 5f 73 74 61 74 75 73  agma lock_status
56f0: 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 6d 61 69  ;.    }.  } {mai
5700: 6e 20 75 6e 6c 6f 63 6b 65 64 20 74 65 6d 70 20  n unlocked temp 
5710: 63 6c 6f 73 65 64 7d 0a 7d 20 65 6c 73 65 20 7b  closed}.} else {
5720: 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .  do_test pragm
5730: 61 2d 37 2e 33 20 7b 0a 20 20 20 20 64 62 20 63  a-7.3 {.    db c
5740: 6c 6f 73 65 0a 20 20 20 20 73 71 6c 69 74 65 33  lose.    sqlite3
5750: 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20 20 20   db test.db.    
5760: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
5770: 70 72 61 67 6d 61 20 6c 6f 63 6b 5f 73 74 61 74  pragma lock_stat
5780: 75 73 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 6d  us;.    }.  } {m
5790: 61 69 6e 20 75 6e 6c 6f 63 6b 65 64 7d 0a 7d 0a  ain unlocked}.}.
57a0: 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ..#-------------
57b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
57c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
57d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
57e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 54 65 73 74  ---------.# Test
57f0: 20 63 61 73 65 73 20 70 72 61 67 6d 61 2d 38 2e   cases pragma-8.
5800: 2a 20 74 65 73 74 20 74 68 65 20 22 50 52 41 47  * test the "PRAG
5810: 4d 41 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f  MA schema_versio
5820: 6e 22 20 61 6e 64 20 22 50 52 41 47 4d 41 0a 23  n" and "PRAGMA.#
5830: 20 75 73 65 72 5f 76 65 72 73 69 6f 6e 22 20 73   user_version" s
5840: 74 61 74 65 6d 65 6e 74 73 2e 0a 23 0a 23 20 70  tatements..#.# p
5850: 72 61 67 6d 61 2d 38 2e 31 3a 20 50 52 41 47 4d  ragma-8.1: PRAGM
5860: 41 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e  A schema_version
5870: 0a 23 20 70 72 61 67 6d 61 2d 38 2e 32 3a 20 50  .# pragma-8.2: P
5880: 52 41 47 4d 41 20 75 73 65 72 5f 76 65 72 73 69  RAGMA user_versi
5890: 6f 6e 0a 23 0a 0a 69 66 63 61 70 61 62 6c 65 20  on.#..ifcapable 
58a0: 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 20 7b  schema_version {
58b0: 0a 0a 23 20 46 69 72 73 74 20 63 68 65 63 6b 20  ..# First check 
58c0: 74 68 61 74 20 77 65 20 63 61 6e 20 73 65 74 20  that we can set 
58d0: 74 68 65 20 73 63 68 65 6d 61 20 76 65 72 73 69  the schema versi
58e0: 6f 6e 20 61 6e 64 20 74 68 65 6e 20 72 65 74 72  on and then retr
58f0: 69 65 76 65 20 74 68 65 0a 23 20 73 61 6d 65 20  ieve the.# same 
5900: 76 61 6c 75 65 2e 0a 64 6f 5f 74 65 73 74 20 70  value..do_test p
5910: 72 61 67 6d 61 2d 38 2e 31 2e 31 20 7b 0a 20 20  ragma-8.1.1 {.  
5920: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52  execsql {.    PR
5930: 41 47 4d 41 20 73 63 68 65 6d 61 5f 76 65 72 73  AGMA schema_vers
5940: 69 6f 6e 20 3d 20 31 30 35 3b 0a 20 20 7d 0a 7d  ion = 105;.  }.}
5950: 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67   {}.do_test prag
5960: 6d 61 2d 38 2e 31 2e 32 20 7b 0a 20 20 65 78 65  ma-8.1.2 {.  exe
5970: 63 73 71 6c 32 20 7b 0a 20 20 20 20 50 52 41 47  csql2 {.    PRAG
5980: 4d 41 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f  MA schema_versio
5990: 6e 3b 0a 20 20 7d 0a 7d 20 7b 73 63 68 65 6d 61  n;.  }.} {schema
59a0: 5f 76 65 72 73 69 6f 6e 20 31 30 35 7d 0a 64 6f  _version 105}.do
59b0: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 31  _test pragma-8.1
59c0: 2e 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .3 {.  execsql {
59d0: 0a 20 20 20 20 50 52 41 47 4d 41 20 73 63 68 65  .    PRAGMA sche
59e0: 6d 61 5f 76 65 72 73 69 6f 6e 20 3d 20 31 30 36  ma_version = 106
59f0: 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65  ;.  }.} {}.do_te
5a00: 73 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e 34 20  st pragma-8.1.4 
5a10: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
5a20: 20 20 50 52 41 47 4d 41 20 73 63 68 65 6d 61 5f    PRAGMA schema_
5a30: 76 65 72 73 69 6f 6e 3b 0a 20 20 7d 0a 7d 20 31  version;.  }.} 1
5a40: 30 36 0a 0a 23 20 43 68 65 63 6b 20 74 68 61 74  06..# Check that
5a50: 20 63 72 65 61 74 69 6e 67 20 61 20 74 61 62 6c   creating a tabl
5a60: 65 20 6d 6f 64 69 66 69 65 73 20 74 68 65 20 73  e modifies the s
5a70: 63 68 65 6d 61 2d 76 65 72 73 69 6f 6e 20 28 74  chema-version (t
5a80: 68 69 73 20 69 73 20 72 65 61 6c 6c 79 0a 23 20  his is really.# 
5a90: 74 6f 20 76 65 72 69 66 79 20 74 68 61 74 20 74  to verify that t
5aa0: 68 65 20 76 61 6c 75 65 20 62 65 69 6e 67 20 72  he value being r
5ab0: 65 61 64 20 69 73 20 69 6e 20 66 61 63 74 20 74  ead is in fact t
5ac0: 68 65 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f  he schema versio
5ad0: 6e 29 2e 0a 64 6f 5f 74 65 73 74 20 70 72 61 67  n)..do_test prag
5ae0: 6d 61 2d 38 2e 31 2e 35 20 7b 0a 20 20 65 78 65  ma-8.1.5 {.  exe
5af0: 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54  csql {.    CREAT
5b00: 45 20 54 41 42 4c 45 20 74 34 28 61 2c 20 62 2c  E TABLE t4(a, b,
5b10: 20 63 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20   c);.    INSERT 
5b20: 49 4e 54 4f 20 74 34 20 56 41 4c 55 45 53 28 31  INTO t4 VALUES(1
5b30: 2c 20 32 2c 20 33 29 3b 0a 20 20 20 20 53 45 4c  , 2, 3);.    SEL
5b40: 45 43 54 20 2a 20 46 52 4f 4d 20 74 34 3b 0a 20  ECT * FROM t4;. 
5b50: 20 7d 0a 7d 20 7b 31 20 32 20 33 7d 0a 64 6f 5f   }.} {1 2 3}.do_
5b60: 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e  test pragma-8.1.
5b70: 36 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  6 {.  execsql {.
5b80: 20 20 20 20 50 52 41 47 4d 41 20 73 63 68 65 6d      PRAGMA schem
5b90: 61 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 7d 0a 7d  a_version;.  }.}
5ba0: 20 31 30 37 0a 0a 23 20 4e 6f 77 20 6f 70 65 6e   107..# Now open
5bb0: 20 61 20 73 65 63 6f 6e 64 20 63 6f 6e 6e 65 63   a second connec
5bc0: 74 69 6f 6e 20 74 6f 20 74 68 65 20 64 61 74 61  tion to the data
5bd0: 62 61 73 65 2e 20 45 6e 73 75 72 65 20 74 68 61  base. Ensure tha
5be0: 74 20 63 68 61 6e 67 69 6e 67 20 74 68 65 0a 23  t changing the.#
5bf0: 20 73 63 68 65 6d 61 2d 76 65 72 73 69 6f 6e 20   schema-version 
5c00: 75 73 69 6e 67 20 74 68 65 20 66 69 72 73 74 20  using the first 
5c10: 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6f 72 63 65  connection force
5c20: 73 20 74 68 65 20 73 65 63 6f 6e 64 20 63 6f 6e  s the second con
5c30: 6e 65 63 74 69 6f 6e 0a 23 20 74 6f 20 72 65 6c  nection.# to rel
5c40: 6f 61 64 20 74 68 65 20 73 63 68 65 6d 61 2e 20  oad the schema. 
5c50: 54 68 69 73 20 68 61 73 20 74 6f 20 62 65 20 64  This has to be d
5c60: 6f 6e 65 20 75 73 69 6e 67 20 74 68 65 20 43 2d  one using the C-
5c70: 41 50 49 20 74 65 73 74 20 66 75 6e 63 74 69 6f  API test functio
5c80: 6e 73 2c 0a 23 20 62 65 63 61 75 73 65 20 74 68  ns,.# because th
5c90: 65 20 54 43 4c 20 41 50 49 20 61 63 63 6f 75 6e  e TCL API accoun
5ca0: 74 73 20 66 6f 72 20 53 43 48 45 4d 41 5f 45 52  ts for SCHEMA_ER
5cb0: 52 4f 52 20 61 6e 64 20 72 65 74 72 69 65 73 20  ROR and retries 
5cc0: 74 68 65 20 71 75 65 72 79 2e 0a 64 6f 5f 74 65  the query..do_te
5cd0: 73 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e 37 20  st pragma-8.1.7 
5ce0: 7b 0a 20 20 73 71 6c 69 74 65 33 20 64 62 32 20  {.  sqlite3 db2 
5cf0: 74 65 73 74 2e 64 62 3b 20 73 65 74 20 3a 3a 44  test.db; set ::D
5d00: 42 32 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6e 6e  B2 [sqlite3_conn
5d10: 65 63 74 69 6f 6e 5f 70 6f 69 6e 74 65 72 20 64  ection_pointer d
5d20: 62 32 5d 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  b2].  execsql {.
5d30: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
5d40: 4d 20 74 34 3b 0a 20 20 7d 20 64 62 32 0a 7d 20  M t4;.  } db2.} 
5d50: 7b 31 20 32 20 33 7d 0a 64 6f 5f 74 65 73 74 20  {1 2 3}.do_test 
5d60: 70 72 61 67 6d 61 2d 38 2e 31 2e 38 20 7b 0a 20  pragma-8.1.8 {. 
5d70: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50   execsql {.    P
5d80: 52 41 47 4d 41 20 73 63 68 65 6d 61 5f 76 65 72  RAGMA schema_ver
5d90: 73 69 6f 6e 20 3d 20 31 30 38 3b 0a 20 20 7d 0a  sion = 108;.  }.
5da0: 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61  } {}.do_test pra
5db0: 67 6d 61 2d 38 2e 31 2e 39 20 7b 0a 20 20 73 65  gma-8.1.9 {.  se
5dc0: 74 20 3a 3a 53 54 4d 54 20 5b 73 71 6c 69 74 65  t ::STMT [sqlite
5dd0: 33 5f 70 72 65 70 61 72 65 20 24 3a 3a 44 42 32  3_prepare $::DB2
5de0: 20 22 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20   "SELECT * FROM 
5df0: 74 34 22 20 2d 31 20 44 55 4d 4d 59 5d 0a 20 20  t4" -1 DUMMY].  
5e00: 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 3a 3a  sqlite3_step $::
5e10: 53 54 4d 54 0a 7d 20 53 51 4c 49 54 45 5f 45 52  STMT.} SQLITE_ER
5e20: 52 4f 52 0a 64 6f 5f 74 65 73 74 20 70 72 61 67  ROR.do_test prag
5e30: 6d 61 2d 38 2e 31 2e 31 30 20 7b 0a 20 20 73 71  ma-8.1.10 {.  sq
5e40: 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24  lite3_finalize $
5e50: 3a 3a 53 54 4d 54 0a 7d 20 53 51 4c 49 54 45 5f  ::STMT.} SQLITE_
5e60: 53 43 48 45 4d 41 0a 0a 23 20 4d 61 6b 65 20 73  SCHEMA..# Make s
5e70: 75 72 65 20 74 68 65 20 73 63 68 65 6d 61 2d 76  ure the schema-v
5e80: 65 72 73 69 6f 6e 20 63 61 6e 20 62 65 20 6d 61  ersion can be ma
5e90: 6e 69 70 75 6c 61 74 65 64 20 69 6e 20 61 6e 20  nipulated in an 
5ea0: 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
5eb0: 65 2e 0a 66 6f 72 63 65 64 65 6c 65 74 65 20 74  e..forcedelete t
5ec0: 65 73 74 32 2e 64 62 0a 66 6f 72 63 65 64 65 6c  est2.db.forcedel
5ed0: 65 74 65 20 74 65 73 74 32 2e 64 62 2d 6a 6f 75  ete test2.db-jou
5ee0: 72 6e 61 6c 0a 69 66 63 61 70 61 62 6c 65 20 61  rnal.ifcapable a
5ef0: 74 74 61 63 68 20 7b 0a 20 20 64 6f 5f 74 65 73  ttach {.  do_tes
5f00: 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e 31 31 20  t pragma-8.1.11 
5f10: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a  {.    execsql {.
5f20: 20 20 20 20 20 20 41 54 54 41 43 48 20 27 74 65        ATTACH 'te
5f30: 73 74 32 2e 64 62 27 20 41 53 20 61 75 78 3b 0a  st2.db' AS aux;.
5f40: 20 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42        CREATE TAB
5f50: 4c 45 20 61 75 78 2e 74 31 28 61 2c 20 62 2c 20  LE aux.t1(a, b, 
5f60: 63 29 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41  c);.      PRAGMA
5f70: 20 61 75 78 2e 73 63 68 65 6d 61 5f 76 65 72 73   aux.schema_vers
5f80: 69 6f 6e 20 3d 20 32 30 35 3b 0a 20 20 20 20 7d  ion = 205;.    }
5f90: 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65 73  .  } {}.  do_tes
5fa0: 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e 31 32 20  t pragma-8.1.12 
5fb0: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a  {.    execsql {.
5fc0: 20 20 20 20 20 20 50 52 41 47 4d 41 20 61 75 78        PRAGMA aux
5fd0: 2e 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 3b  .schema_version;
5fe0: 0a 20 20 20 20 7d 0a 20 20 7d 20 32 30 35 0a 7d  .    }.  } 205.}
5ff0: 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d  .do_test pragma-
6000: 38 2e 31 2e 31 33 20 7b 0a 20 20 65 78 65 63 73  8.1.13 {.  execs
6010: 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20  ql {.    PRAGMA 
6020: 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 3b 0a  schema_version;.
6030: 20 20 7d 0a 7d 20 31 30 38 0a 0a 23 20 41 6e 64    }.} 108..# And
6040: 20 63 68 65 63 6b 20 74 68 61 74 20 6d 6f 64 69   check that modi
6050: 66 79 69 6e 67 20 74 68 65 20 73 63 68 65 6d 61  fying the schema
6060: 2d 76 65 72 73 69 6f 6e 20 69 6e 20 61 6e 20 61  -version in an a
6070: 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65  ttached database
6080: 0a 23 20 66 6f 72 63 65 73 20 74 68 65 20 73 65  .# forces the se
6090: 63 6f 6e 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  cond connection 
60a0: 74 6f 20 72 65 6c 6f 61 64 20 74 68 65 20 73 63  to reload the sc
60b0: 68 65 6d 61 2e 0a 69 66 63 61 70 61 62 6c 65 20  hema..ifcapable 
60c0: 61 74 74 61 63 68 20 7b 0a 20 20 64 6f 5f 74 65  attach {.  do_te
60d0: 73 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e 31 34  st pragma-8.1.14
60e0: 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 20 64   {.    sqlite3 d
60f0: 62 32 20 74 65 73 74 2e 64 62 3b 20 73 65 74 20  b2 test.db; set 
6100: 3a 3a 44 42 32 20 5b 73 71 6c 69 74 65 33 5f 63  ::DB2 [sqlite3_c
6110: 6f 6e 6e 65 63 74 69 6f 6e 5f 70 6f 69 6e 74 65  onnection_pointe
6120: 72 20 64 62 32 5d 0a 20 20 20 20 65 78 65 63 73  r db2].    execs
6130: 71 6c 20 7b 0a 20 20 20 20 20 20 41 54 54 41 43  ql {.      ATTAC
6140: 48 20 27 74 65 73 74 32 2e 64 62 27 20 41 53 20  H 'test2.db' AS 
6150: 61 75 78 3b 0a 20 20 20 20 20 20 53 45 4c 45 43  aux;.      SELEC
6160: 54 20 2a 20 46 52 4f 4d 20 61 75 78 2e 74 31 3b  T * FROM aux.t1;
6170: 0a 20 20 20 20 7d 20 64 62 32 0a 20 20 7d 20 7b  .    } db2.  } {
6180: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67  }.  do_test prag
6190: 6d 61 2d 38 2e 31 2e 31 35 20 7b 0a 20 20 20 20  ma-8.1.15 {.    
61a0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
61b0: 50 52 41 47 4d 41 20 61 75 78 2e 73 63 68 65 6d  PRAGMA aux.schem
61c0: 61 5f 76 65 72 73 69 6f 6e 20 3d 20 32 30 36 3b  a_version = 206;
61d0: 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 7d 0a 20 20  .    }.  } {}.  
61e0: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38  do_test pragma-8
61f0: 2e 31 2e 31 36 20 7b 0a 20 20 20 20 73 65 74 20  .1.16 {.    set 
6200: 3a 3a 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f  ::STMT [sqlite3_
6210: 70 72 65 70 61 72 65 20 24 3a 3a 44 42 32 20 22  prepare $::DB2 "
6220: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 61 75  SELECT * FROM au
6230: 78 2e 74 31 22 20 2d 31 20 44 55 4d 4d 59 5d 0a  x.t1" -1 DUMMY].
6240: 20 20 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70      sqlite3_step
6250: 20 24 3a 3a 53 54 4d 54 0a 20 20 7d 20 53 51 4c   $::STMT.  } SQL
6260: 49 54 45 5f 45 52 52 4f 52 0a 20 20 64 6f 5f 74  ITE_ERROR.  do_t
6270: 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e 31  est pragma-8.1.1
6280: 37 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  7 {.    sqlite3_
6290: 66 69 6e 61 6c 69 7a 65 20 24 3a 3a 53 54 4d 54  finalize $::STMT
62a0: 0a 20 20 7d 20 53 51 4c 49 54 45 5f 53 43 48 45  .  } SQLITE_SCHE
62b0: 4d 41 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61  MA.  do_test pra
62c0: 67 6d 61 2d 38 2e 31 2e 31 38 20 7b 0a 20 20 20  gma-8.1.18 {.   
62d0: 20 64 62 32 20 63 6c 6f 73 65 0a 20 20 7d 20 7b   db2 close.  } {
62e0: 7d 0a 7d 0a 0a 23 20 4e 6f 77 20 74 65 73 74 20  }.}..# Now test 
62f0: 74 68 61 74 20 74 68 65 20 75 73 65 72 2d 76 65  that the user-ve
6300: 72 73 69 6f 6e 20 63 61 6e 20 62 65 20 72 65 61  rsion can be rea
6310: 64 20 61 6e 64 20 77 72 69 74 74 65 6e 20 28 61  d and written (a
6320: 6e 64 20 74 68 61 74 20 77 65 20 61 72 65 6e 27  nd that we aren'
6330: 74 0a 23 20 61 63 63 69 64 65 6e 74 61 6c 6c 79  t.# accidentally
6340: 20 6d 61 6e 69 70 75 6c 61 74 69 6e 67 20 74 68   manipulating th
6350: 65 20 73 63 68 65 6d 61 2d 76 65 72 73 69 6f 6e  e schema-version
6360: 20 69 6e 73 74 65 61 64 29 2e 0a 64 6f 5f 74 65   instead)..do_te
6370: 73 74 20 70 72 61 67 6d 61 2d 38 2e 32 2e 31 20  st pragma-8.2.1 
6380: 7b 0a 20 20 65 78 65 63 73 71 6c 32 20 7b 0a 20  {.  execsql2 {. 
6390: 20 20 20 50 52 41 47 4d 41 20 75 73 65 72 5f 76     PRAGMA user_v
63a0: 65 72 73 69 6f 6e 3b 0a 20 20 7d 0a 7d 20 7b 75  ersion;.  }.} {u
63b0: 73 65 72 5f 76 65 72 73 69 6f 6e 20 30 7d 0a 64  ser_version 0}.d
63c0: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e  o_test pragma-8.
63d0: 32 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  2.2 {.  execsql 
63e0: 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 75 73 65  {.    PRAGMA use
63f0: 72 5f 76 65 72 73 69 6f 6e 20 3d 20 32 3b 0a 20  r_version = 2;. 
6400: 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20   }.} {}.do_test 
6410: 70 72 61 67 6d 61 2d 38 2e 32 2e 33 2e 31 20 7b  pragma-8.2.3.1 {
6420: 0a 20 20 65 78 65 63 73 71 6c 32 20 7b 0a 20 20  .  execsql2 {.  
6430: 20 20 50 52 41 47 4d 41 20 75 73 65 72 5f 76 65    PRAGMA user_ve
6440: 72 73 69 6f 6e 3b 0a 20 20 7d 0a 7d 20 7b 75 73  rsion;.  }.} {us
6450: 65 72 5f 76 65 72 73 69 6f 6e 20 32 7d 0a 64 6f  er_version 2}.do
6460: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 32  _test pragma-8.2
6470: 2e 33 2e 32 20 7b 0a 20 20 64 62 20 63 6c 6f 73  .3.2 {.  db clos
6480: 65 0a 20 20 73 71 6c 69 74 65 33 20 64 62 20 74  e.  sqlite3 db t
6490: 65 73 74 2e 64 62 0a 20 20 65 78 65 63 73 71 6c  est.db.  execsql
64a0: 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 75 73   {.    PRAGMA us
64b0: 65 72 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 7d 0a  er_version;.  }.
64c0: 7d 20 7b 32 7d 0a 64 6f 5f 74 65 73 74 20 70 72  } {2}.do_test pr
64d0: 61 67 6d 61 2d 38 2e 32 2e 34 2e 31 20 7b 0a 20  agma-8.2.4.1 {. 
64e0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50   execsql {.    P
64f0: 52 41 47 4d 41 20 73 63 68 65 6d 61 5f 76 65 72  RAGMA schema_ver
6500: 73 69 6f 6e 3b 0a 20 20 7d 0a 7d 20 7b 31 30 38  sion;.  }.} {108
6510: 7d 0a 69 66 63 61 70 61 62 6c 65 20 76 61 63 75  }.ifcapable vacu
6520: 75 6d 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 70  um {.  do_test p
6530: 72 61 67 6d 61 2d 38 2e 32 2e 34 2e 32 20 7b 0a  ragma-8.2.4.2 {.
6540: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20      execsql {.  
6550: 20 20 20 20 56 41 43 55 55 4d 3b 0a 20 20 20 20      VACUUM;.    
6560: 20 20 50 52 41 47 4d 41 20 75 73 65 72 5f 76 65    PRAGMA user_ve
6570: 72 73 69 6f 6e 3b 0a 20 20 20 20 7d 0a 20 20 7d  rsion;.    }.  }
6580: 20 7b 32 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70   {2}.  do_test p
6590: 72 61 67 6d 61 2d 38 2e 32 2e 34 2e 33 20 7b 0a  ragma-8.2.4.3 {.
65a0: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20      execsql {.  
65b0: 20 20 20 20 50 52 41 47 4d 41 20 73 63 68 65 6d      PRAGMA schem
65c0: 61 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 20 20 7d  a_version;.    }
65d0: 0a 20 20 7d 20 7b 31 30 39 7d 0a 7d 0a 0a 69 66  .  } {109}.}..if
65e0: 63 61 70 61 62 6c 65 20 61 74 74 61 63 68 20 7b  capable attach {
65f0: 0a 20 20 64 62 20 65 76 61 6c 20 7b 41 54 54 41  .  db eval {ATTA
6600: 43 48 20 27 74 65 73 74 32 2e 64 62 27 20 41 53  CH 'test2.db' AS
6610: 20 61 75 78 7d 0a 20 20 0a 20 20 23 20 43 68 65   aux}.  .  # Che
6620: 63 6b 20 74 68 61 74 20 74 68 65 20 75 73 65 72  ck that the user
6630: 2d 76 65 72 73 69 6f 6e 20 69 6e 20 74 68 65 20  -version in the 
6640: 61 75 78 69 6c 61 72 79 20 64 61 74 61 62 61 73  auxilary databas
6650: 65 20 63 61 6e 20 62 65 20 6d 61 6e 69 70 75 6c  e can be manipul
6660: 61 74 65 64 20 28 0a 20 20 23 20 61 6e 64 20 74  ated (.  # and t
6670: 68 61 74 20 77 65 20 61 72 65 6e 27 74 20 61 63  hat we aren't ac
6680: 63 69 64 65 6e 74 61 6c 6c 79 20 6d 61 6e 69 70  cidentally manip
6690: 75 6c 61 74 69 6e 67 20 74 68 65 20 73 61 6d 65  ulating the same
66a0: 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 62 29   in the main db)
66b0: 2e 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67  ..  do_test prag
66c0: 6d 61 2d 38 2e 32 2e 35 20 7b 0a 20 20 20 20 65  ma-8.2.5 {.    e
66d0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50  xecsql {.      P
66e0: 52 41 47 4d 41 20 61 75 78 2e 75 73 65 72 5f 76  RAGMA aux.user_v
66f0: 65 72 73 69 6f 6e 3b 0a 20 20 20 20 7d 0a 20 20  ersion;.    }.  
6700: 7d 20 7b 30 7d 0a 20 20 64 6f 5f 74 65 73 74 20  } {0}.  do_test 
6710: 70 72 61 67 6d 61 2d 38 2e 32 2e 36 20 7b 0a 20  pragma-8.2.6 {. 
6720: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
6730: 20 20 20 50 52 41 47 4d 41 20 61 75 78 2e 75 73     PRAGMA aux.us
6740: 65 72 5f 76 65 72 73 69 6f 6e 20 3d 20 33 3b 0a  er_version = 3;.
6750: 20 20 20 20 7d 0a 20 20 7d 20 7b 7d 0a 20 20 64      }.  } {}.  d
6760: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e  o_test pragma-8.
6770: 32 2e 37 20 7b 0a 20 20 20 20 65 78 65 63 73 71  2.7 {.    execsq
6780: 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41  l {.      PRAGMA
6790: 20 61 75 78 2e 75 73 65 72 5f 76 65 72 73 69 6f   aux.user_versio
67a0: 6e 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 33 7d  n;.    }.  } {3}
67b0: 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .  do_test pragm
67c0: 61 2d 38 2e 32 2e 38 20 7b 0a 20 20 20 20 65 78  a-8.2.8 {.    ex
67d0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52  ecsql {.      PR
67e0: 41 47 4d 41 20 6d 61 69 6e 2e 75 73 65 72 5f 76  AGMA main.user_v
67f0: 65 72 73 69 6f 6e 3b 0a 20 20 20 20 7d 0a 20 20  ersion;.    }.  
6800: 7d 20 7b 32 7d 0a 20 20 0a 20 20 23 20 4e 6f 77  } {2}.  .  # Now
6810: 20 63 68 65 63 6b 20 74 68 61 74 20 61 20 52 4f   check that a RO
6820: 4c 4c 42 41 43 4b 20 72 65 73 65 74 73 20 74 68  LLBACK resets th
6830: 65 20 75 73 65 72 2d 76 65 72 73 69 6f 6e 20 69  e user-version i
6840: 66 20 69 74 20 68 61 73 20 62 65 65 6e 20 6d 6f  f it has been mo
6850: 64 69 66 69 65 64 0a 20 20 23 20 77 69 74 68 69  dified.  # withi
6860: 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  n a transaction.
6870: 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .  do_test pragm
6880: 61 2d 38 2e 32 2e 39 20 7b 0a 20 20 20 20 65 78  a-8.2.9 {.    ex
6890: 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 42 45  ecsql {.      BE
68a0: 47 49 4e 3b 0a 20 20 20 20 20 20 50 52 41 47 4d  GIN;.      PRAGM
68b0: 41 20 61 75 78 2e 75 73 65 72 5f 76 65 72 73 69  A aux.user_versi
68c0: 6f 6e 20 3d 20 31 30 3b 0a 20 20 20 20 20 20 50  on = 10;.      P
68d0: 52 41 47 4d 41 20 75 73 65 72 5f 76 65 72 73 69  RAGMA user_versi
68e0: 6f 6e 20 3d 20 31 31 3b 0a 20 20 20 20 7d 0a 20  on = 11;.    }. 
68f0: 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20   } {}.  do_test 
6900: 70 72 61 67 6d 61 2d 38 2e 32 2e 31 30 20 7b 0a  pragma-8.2.10 {.
6910: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20      execsql {.  
6920: 20 20 20 20 50 52 41 47 4d 41 20 61 75 78 2e 75      PRAGMA aux.u
6930: 73 65 72 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 20  ser_version;.   
6940: 20 7d 0a 20 20 7d 20 7b 31 30 7d 0a 20 20 64 6f   }.  } {10}.  do
6950: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 32  _test pragma-8.2
6960: 2e 31 31 20 7b 0a 20 20 20 20 65 78 65 63 73 71  .11 {.    execsq
6970: 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41  l {.      PRAGMA
6980: 20 6d 61 69 6e 2e 75 73 65 72 5f 76 65 72 73 69   main.user_versi
6990: 6f 6e 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 31  on;.    }.  } {1
69a0: 31 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61  1}.  do_test pra
69b0: 67 6d 61 2d 38 2e 32 2e 31 32 20 7b 0a 20 20 20  gma-8.2.12 {.   
69c0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20   execsql {.     
69d0: 20 52 4f 4c 4c 42 41 43 4b 3b 0a 20 20 20 20 20   ROLLBACK;.     
69e0: 20 50 52 41 47 4d 41 20 61 75 78 2e 75 73 65 72   PRAGMA aux.user
69f0: 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 20 20 7d 0a  _version;.    }.
6a00: 20 20 7d 20 7b 33 7d 0a 20 20 64 6f 5f 74 65 73    } {3}.  do_tes
6a10: 74 20 70 72 61 67 6d 61 2d 38 2e 32 2e 31 33 20  t pragma-8.2.13 
6a20: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a  {.    execsql {.
6a30: 20 20 20 20 20 20 50 52 41 47 4d 41 20 6d 61 69        PRAGMA mai
6a40: 6e 2e 75 73 65 72 5f 76 65 72 73 69 6f 6e 3b 0a  n.user_version;.
6a50: 20 20 20 20 7d 0a 20 20 7d 20 7b 32 7d 0a 7d 0a      }.  } {2}.}.
6a60: 0a 23 20 54 72 79 20 61 20 6e 65 67 61 74 69 76  .# Try a negativ
6a70: 65 20 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20  e value for the 
6a80: 75 73 65 72 2d 76 65 72 73 69 6f 6e 0a 64 6f 5f  user-version.do_
6a90: 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 32 2e  test pragma-8.2.
6aa0: 31 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  14 {.  execsql {
6ab0: 0a 20 20 20 20 50 52 41 47 4d 41 20 75 73 65 72  .    PRAGMA user
6ac0: 5f 76 65 72 73 69 6f 6e 20 3d 20 2d 34 35 30 3b  _version = -450;
6ad0: 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73  .  }.} {}.do_tes
6ae0: 74 20 70 72 61 67 6d 61 2d 38 2e 32 2e 31 35 20  t pragma-8.2.15 
6af0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
6b00: 20 20 50 52 41 47 4d 41 20 75 73 65 72 5f 76 65    PRAGMA user_ve
6b10: 72 73 69 6f 6e 3b 0a 20 20 7d 0a 7d 20 7b 2d 34  rsion;.  }.} {-4
6b20: 35 30 7d 0a 7d 20 3b 20 23 20 69 66 63 61 70 61  50}.} ; # ifcapa
6b30: 62 6c 65 20 73 63 68 65 6d 61 5f 76 65 72 73 69  ble schema_versi
6b40: 6f 6e 0a 0a 23 20 43 68 65 63 6b 20 74 6f 20 73  on..# Check to s
6b50: 65 65 20 69 66 20 54 45 4d 50 5f 53 54 4f 52 45  ee if TEMP_STORE
6b60: 20 69 73 20 6d 65 6d 6f 72 79 20 6f 72 20 64 69   is memory or di
6b70: 73 6b 2e 20 20 52 65 74 75 72 6e 20 73 74 72 69  sk.  Return stri
6b80: 6e 67 73 0a 23 20 22 6d 65 6d 6f 72 79 22 20 6f  ngs.# "memory" o
6b90: 72 20 22 64 69 73 6b 22 20 61 73 20 61 70 70 72  r "disk" as appr
6ba0: 6f 70 72 69 61 74 65 2e 0a 23 0a 70 72 6f 63 20  opriate..#.proc 
6bb0: 63 68 65 63 6b 5f 74 65 6d 70 5f 73 74 6f 72 65  check_temp_store
6bc0: 20 7b 7d 20 7b 0a 20 20 64 62 20 65 76 61 6c 20   {} {.  db eval 
6bd0: 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d  {.    PRAGMA tem
6be0: 70 2e 63 61 63 68 65 5f 73 69 7a 65 20 3d 20 31  p.cache_size = 1
6bf0: 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54 45 4d  ;.    CREATE TEM
6c00: 50 20 54 41 42 4c 45 20 49 46 20 4e 4f 54 20 45  P TABLE IF NOT E
6c10: 58 49 53 54 53 20 61 28 62 29 3b 0a 20 20 20 20  XISTS a(b);.    
6c20: 44 45 4c 45 54 45 20 46 52 4f 4d 20 61 3b 0a 20  DELETE FROM a;. 
6c30: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 61     INSERT INTO a
6c40: 20 56 41 4c 55 45 53 28 72 61 6e 64 6f 6d 62 6c   VALUES(randombl
6c50: 6f 62 28 31 30 30 30 29 29 3b 0a 20 20 20 20 49  ob(1000));.    I
6c60: 4e 53 45 52 54 20 49 4e 54 4f 20 61 20 53 45 4c  NSERT INTO a SEL
6c70: 45 43 54 20 2a 20 46 52 4f 4d 20 61 3b 0a 20 20  ECT * FROM a;.  
6c80: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 61 20    INSERT INTO a 
6c90: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 61 3b  SELECT * FROM a;
6ca0: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
6cb0: 20 61 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d   a SELECT * FROM
6cc0: 20 61 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49   a;.    INSERT I
6cd0: 4e 54 4f 20 61 20 53 45 4c 45 43 54 20 2a 20 46  NTO a SELECT * F
6ce0: 52 4f 4d 20 61 3b 0a 20 20 20 20 49 4e 53 45 52  ROM a;.    INSER
6cf0: 54 20 49 4e 54 4f 20 61 20 53 45 4c 45 43 54 20  T INTO a SELECT 
6d00: 2a 20 46 52 4f 4d 20 61 3b 0a 20 20 20 20 49 4e  * FROM a;.    IN
6d10: 53 45 52 54 20 49 4e 54 4f 20 61 20 53 45 4c 45  SERT INTO a SELE
6d20: 43 54 20 2a 20 46 52 4f 4d 20 61 3b 0a 20 20 20  CT * FROM a;.   
6d30: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 61 20 53   INSERT INTO a S
6d40: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 61 3b 0a  ELECT * FROM a;.
6d50: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
6d60: 61 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20  a SELECT * FROM 
6d70: 61 3b 0a 20 20 7d 0a 20 20 64 62 20 65 76 61 6c  a;.  }.  db eval
6d80: 20 7b 50 52 41 47 4d 41 20 64 61 74 61 62 61 73   {PRAGMA databas
6d90: 65 5f 6c 69 73 74 7d 20 7b 0a 20 20 20 20 69 66  e_list} {.    if
6da0: 20 7b 24 6e 61 6d 65 3d 3d 22 74 65 6d 70 22 7d   {$name=="temp"}
6db0: 20 7b 0a 20 20 20 20 20 20 73 65 74 20 62 74 20   {.      set bt 
6dc0: 5b 62 74 72 65 65 5f 66 72 6f 6d 5f 64 62 20 64  [btree_from_db d
6dd0: 62 20 31 5d 0a 20 20 20 20 20 20 69 66 20 7b 5b  b 1].      if {[
6de0: 62 74 72 65 65 5f 69 73 6d 65 6d 64 62 20 24 62  btree_ismemdb $b
6df0: 74 5d 7d 20 7b 0a 20 20 20 20 20 20 20 20 72 65  t]} {.        re
6e00: 74 75 72 6e 20 22 6d 65 6d 6f 72 79 22 0a 20 20  turn "memory".  
6e10: 20 20 20 20 7d 0a 20 20 20 20 20 20 72 65 74 75      }.      retu
6e20: 72 6e 20 22 64 69 73 6b 22 0a 20 20 20 20 7d 0a  rn "disk".    }.
6e30: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 22 75 6e    }.  return "un
6e40: 6b 6e 6f 77 6e 22 0a 7d 0a 0a 23 20 41 70 70 6c  known".}..# Appl
6e50: 69 63 61 74 69 6f 6e 5f 49 44 0a 23 0a 64 6f 5f  ication_ID.#.do_
6e60: 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 33 2e  test pragma-8.3.
6e70: 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  1 {.  execsql {.
6e80: 20 20 20 20 50 52 41 47 4d 41 20 61 70 70 6c 69      PRAGMA appli
6e90: 63 61 74 69 6f 6e 5f 69 64 3b 0a 20 20 7d 0a 7d  cation_id;.  }.}
6ea0: 20 7b 30 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61   {0}.do_test pra
6eb0: 67 6d 61 2d 38 2e 33 2e 32 20 7b 0a 20 20 65 78  gma-8.3.2 {.  ex
6ec0: 65 63 73 71 6c 20 7b 50 52 41 47 4d 41 20 41 70  ecsql {PRAGMA Ap
6ed0: 70 6c 69 63 61 74 69 6f 6e 5f 49 44 28 31 32 33  plication_ID(123
6ee0: 34 35 29 3b 20 50 52 41 47 4d 41 20 61 70 70 6c  45); PRAGMA appl
6ef0: 69 63 61 74 69 6f 6e 5f 69 64 3b 7d 0a 7d 20 7b  ication_id;}.} {
6f00: 31 32 33 34 35 7d 0a 0a 23 20 54 65 73 74 20 74  12345}..# Test t
6f10: 65 6d 70 5f 73 74 6f 72 65 20 61 6e 64 20 74 65  emp_store and te
6f20: 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f  mp_store_directo
6f30: 72 79 20 70 72 61 67 6d 61 73 0a 23 0a 69 66 63  ry pragmas.#.ifc
6f40: 61 70 61 62 6c 65 20 70 61 67 65 72 5f 70 72 61  apable pager_pra
6f50: 67 6d 61 73 20 7b 0a 64 6f 5f 74 65 73 74 20 70  gmas {.do_test p
6f60: 72 61 67 6d 61 2d 39 2e 31 20 7b 0a 20 20 64 62  ragma-9.1 {.  db
6f70: 20 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74 65 33   close.  sqlite3
6f80: 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20 65 78   db test.db.  ex
6f90: 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47  ecsql {.    PRAG
6fa0: 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 3b 0a 20  MA temp_store;. 
6fb0: 20 7d 0a 7d 20 7b 30 7d 0a 69 66 20 7b 24 54 45   }.} {0}.if {$TE
6fc0: 4d 50 5f 53 54 4f 52 45 3c 3d 31 7d 20 7b 0a 20  MP_STORE<=1} {. 
6fd0: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
6fe0: 39 2e 31 2e 31 20 7b 0a 20 20 20 20 63 68 65 63  9.1.1 {.    chec
6ff0: 6b 5f 74 65 6d 70 5f 73 74 6f 72 65 0a 20 20 7d  k_temp_store.  }
7000: 20 7b 64 69 73 6b 7d 0a 7d 20 65 6c 73 65 20 7b   {disk}.} else {
7010: 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .  do_test pragm
7020: 61 2d 39 2e 31 2e 31 20 7b 0a 20 20 20 20 63 68  a-9.1.1 {.    ch
7030: 65 63 6b 5f 74 65 6d 70 5f 73 74 6f 72 65 0a 20  eck_temp_store. 
7040: 20 7d 20 7b 6d 65 6d 6f 72 79 7d 0a 7d 0a 0a 64   } {memory}.}..d
7050: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 39 2e  o_test pragma-9.
7060: 32 20 7b 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20  2 {.  db close. 
7070: 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74   sqlite3 db test
7080: 2e 64 62 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  .db.  execsql {.
7090: 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f      PRAGMA temp_
70a0: 73 74 6f 72 65 3d 66 69 6c 65 3b 0a 20 20 20 20  store=file;.    
70b0: 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72  PRAGMA temp_stor
70c0: 65 3b 0a 20 20 7d 0a 7d 20 7b 31 7d 0a 69 66 20  e;.  }.} {1}.if 
70d0: 7b 24 54 45 4d 50 5f 53 54 4f 52 45 3d 3d 33 7d  {$TEMP_STORE==3}
70e0: 20 7b 0a 20 20 23 20 57 68 65 6e 20 54 45 4d 50   {.  # When TEMP
70f0: 5f 53 54 4f 52 45 20 69 73 20 33 2c 20 61 6c 77  _STORE is 3, alw
7100: 61 79 73 20 75 73 65 20 6d 65 6d 6f 72 79 20 72  ays use memory r
7110: 65 67 61 72 64 6c 65 73 73 20 6f 66 20 70 72 61  egardless of pra
7120: 67 6d 61 20 73 65 74 74 69 6e 67 73 2e 0a 20 20  gma settings..  
7130: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 39  do_test pragma-9
7140: 2e 32 2e 31 20 7b 0a 20 20 20 20 63 68 65 63 6b  .2.1 {.    check
7150: 5f 74 65 6d 70 5f 73 74 6f 72 65 0a 20 20 7d 20  _temp_store.  } 
7160: 7b 6d 65 6d 6f 72 79 7d 0a 7d 20 65 6c 73 65 20  {memory}.} else 
7170: 7b 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67  {.  do_test prag
7180: 6d 61 2d 39 2e 32 2e 31 20 7b 0a 20 20 20 20 63  ma-9.2.1 {.    c
7190: 68 65 63 6b 5f 74 65 6d 70 5f 73 74 6f 72 65 0a  heck_temp_store.
71a0: 20 20 7d 20 7b 64 69 73 6b 7d 0a 7d 0a 0a 64 6f    } {disk}.}..do
71b0: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 39 2e 33  _test pragma-9.3
71c0: 20 7b 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20 20   {.  db close.  
71d0: 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e  sqlite3 db test.
71e0: 64 62 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  db.  execsql {. 
71f0: 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73     PRAGMA temp_s
7200: 74 6f 72 65 3d 6d 65 6d 6f 72 79 3b 0a 20 20 20  tore=memory;.   
7210: 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f   PRAGMA temp_sto
7220: 72 65 3b 0a 20 20 7d 0a 7d 20 7b 32 7d 0a 69 66  re;.  }.} {2}.if
7230: 20 7b 24 54 45 4d 50 5f 53 54 4f 52 45 3d 3d 30   {$TEMP_STORE==0
7240: 7d 20 7b 0a 20 20 23 20 57 68 65 6e 20 54 45 4d  } {.  # When TEM
7250: 50 5f 53 54 4f 52 45 20 69 73 20 30 2c 20 61 6c  P_STORE is 0, al
7260: 77 61 79 73 20 75 73 65 20 74 68 65 20 64 69 73  ways use the dis
7270: 6b 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20  k regardless of 
7280: 70 72 61 67 6d 61 20 73 65 74 74 69 6e 67 73 2e  pragma settings.
7290: 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .  do_test pragm
72a0: 61 2d 39 2e 33 2e 31 20 7b 0a 20 20 20 20 63 68  a-9.3.1 {.    ch
72b0: 65 63 6b 5f 74 65 6d 70 5f 73 74 6f 72 65 0a 20  eck_temp_store. 
72c0: 20 7d 20 7b 64 69 73 6b 7d 0a 7d 20 65 6c 73 65   } {disk}.} else
72d0: 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61   {.  do_test pra
72e0: 67 6d 61 2d 39 2e 33 2e 31 20 7b 0a 20 20 20 20  gma-9.3.1 {.    
72f0: 63 68 65 63 6b 5f 74 65 6d 70 5f 73 74 6f 72 65  check_temp_store
7300: 0a 20 20 7d 20 7b 6d 65 6d 6f 72 79 7d 0a 7d 0a  .  } {memory}.}.
7310: 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d  .do_test pragma-
7320: 39 2e 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  9.4 {.  execsql 
7330: 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d  {.    PRAGMA tem
7340: 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72  p_store_director
7350: 79 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 69 66 63 61  y;.  }.} {}.ifca
7360: 70 61 62 6c 65 20 77 73 64 20 7b 0a 20 20 64 6f  pable wsd {.  do
7370: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 39 2e 35  _test pragma-9.5
7380: 20 7b 0a 20 20 20 20 73 65 74 20 70 77 64 20 5b   {.    set pwd [
7390: 73 74 72 69 6e 67 20 6d 61 70 20 7b 27 20 27 27  string map {' ''
73a0: 7d 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61  } [file nativena
73b0: 6d 65 20 5b 67 65 74 5f 70 77 64 5d 5d 5d 0a 20  me [get_pwd]]]. 
73c0: 20 20 20 65 78 65 63 73 71 6c 20 22 0a 20 20 20     execsql ".   
73d0: 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73     PRAGMA temp_s
73e0: 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 3d 27  tore_directory='
73f0: 24 70 77 64 27 3b 0a 20 20 20 20 22 0a 20 20 7d  $pwd';.    ".  }
7400: 20 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72   {}.  do_test pr
7410: 61 67 6d 61 2d 39 2e 36 20 7b 0a 20 20 20 20 65  agma-9.6 {.    e
7420: 78 65 63 73 71 6c 20 7b 20 0a 20 20 20 20 20 20  xecsql { .      
7430: 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72  PRAGMA temp_stor
7440: 65 5f 64 69 72 65 63 74 6f 72 79 3b 0a 20 20 20  e_directory;.   
7450: 20 7d 0a 20 20 7d 20 5b 6c 69 73 74 20 5b 66 69   }.  } [list [fi
7460: 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 67  le nativename [g
7470: 65 74 5f 70 77 64 5d 5d 5d 0a 20 20 64 6f 5f 74  et_pwd]]].  do_t
7480: 65 73 74 20 70 72 61 67 6d 61 2d 39 2e 37 20 7b  est pragma-9.7 {
7490: 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b 20  .    catchsql { 
74a0: 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 74 65  .      PRAGMA te
74b0: 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f  mp_store_directo
74c0: 72 79 3d 27 2f 4e 4f 4e 2f 45 58 49 53 54 45 4e  ry='/NON/EXISTEN
74d0: 54 2f 50 41 54 48 2f 46 4f 4f 42 41 52 27 3b 0a  T/PATH/FOOBAR';.
74e0: 20 20 20 20 7d 0a 20 20 7d 20 7b 31 20 7b 6e 6f      }.  } {1 {no
74f0: 74 20 61 20 77 72 69 74 61 62 6c 65 20 64 69 72  t a writable dir
7500: 65 63 74 6f 72 79 7d 7d 0a 20 20 64 6f 5f 74 65  ectory}}.  do_te
7510: 73 74 20 70 72 61 67 6d 61 2d 39 2e 38 20 7b 0a  st pragma-9.8 {.
7520: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 20 0a 20      execsql { . 
7530: 20 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70       PRAGMA temp
7540: 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79  _store_directory
7550: 3d 27 27 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b  ='';.    }.  } {
7560: 7d 0a 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65  }.  if {![info e
7570: 78 69 73 74 73 20 54 45 4d 50 5f 53 54 4f 52 45  xists TEMP_STORE
7580: 5d 20 7c 7c 20 24 54 45 4d 50 5f 53 54 4f 52 45  ] || $TEMP_STORE
7590: 3c 3d 31 7d 20 7b 0a 20 20 20 20 69 66 63 61 70  <=1} {.    ifcap
75a0: 61 62 6c 65 20 74 65 6d 70 64 62 20 7b 0a 20 20  able tempdb {.  
75b0: 20 20 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67      do_test prag
75c0: 6d 61 2d 39 2e 39 20 7b 0a 20 20 20 20 20 20 20  ma-9.9 {.       
75d0: 20 65 78 65 63 73 71 6c 20 7b 20 0a 20 20 20 20   execsql { .    
75e0: 20 20 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d        PRAGMA tem
75f0: 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72  p_store_director
7600: 79 3b 0a 20 20 20 20 20 20 20 20 20 20 50 52 41  y;.          PRA
7610: 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 3d 46  GMA temp_store=F
7620: 49 4c 45 3b 0a 20 20 20 20 20 20 20 20 20 20 43  ILE;.          C
7630: 52 45 41 54 45 20 54 45 4d 50 20 54 41 42 4c 45  REATE TEMP TABLE
7640: 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65   temp_store_dire
7650: 63 74 6f 72 79 5f 74 65 73 74 28 61 20 69 6e 74  ctory_test(a int
7660: 65 67 65 72 29 3b 0a 20 20 20 20 20 20 20 20 20  eger);.         
7670: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 65 6d   INSERT INTO tem
7680: 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72  p_store_director
7690: 79 5f 74 65 73 74 20 76 61 6c 75 65 73 20 28 32  y_test values (2
76a0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 53 45 4c  );.          SEL
76b0: 45 43 54 20 2a 20 46 52 4f 4d 20 74 65 6d 70 5f  ECT * FROM temp_
76c0: 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 5f  store_directory_
76d0: 74 65 73 74 3b 0a 20 20 20 20 20 20 20 20 7d 0a  test;.        }.
76e0: 20 20 20 20 20 20 7d 20 7b 32 7d 0a 20 20 20 20        } {2}.    
76f0: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
7700: 2d 39 2e 31 30 20 7b 0a 20 20 20 20 20 20 20 20  -9.10 {.        
7710: 63 61 74 63 68 73 71 6c 20 22 0a 20 20 20 20 20  catchsql ".     
7720: 20 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70       PRAGMA temp
7730: 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79  _store_directory
7740: 3d 27 24 70 77 64 27 3b 0a 20 20 20 20 20 20 20  ='$pwd';.       
7750: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
7760: 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65   temp_store_dire
7770: 63 74 6f 72 79 5f 74 65 73 74 3b 0a 20 20 20 20  ctory_test;.    
7780: 20 20 20 20 22 0a 20 20 20 20 20 20 7d 20 7b 31      ".      } {1
7790: 20 7b 6e 6f 20 73 75 63 68 20 74 61 62 6c 65 3a   {no such table:
77a0: 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65   temp_store_dire
77b0: 63 74 6f 72 79 5f 74 65 73 74 7d 7d 0a 20 20 20  ctory_test}}.   
77c0: 20 7d 0a 20 20 7d 0a 7d 0a 64 6f 5f 74 65 73 74   }.  }.}.do_test
77d0: 20 70 72 61 67 6d 61 2d 39 2e 31 31 20 7b 0a 20   pragma-9.11 {. 
77e0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50   execsql {.    P
77f0: 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65  RAGMA temp_store
7800: 20 3d 20 30 3b 0a 20 20 20 20 50 52 41 47 4d 41   = 0;.    PRAGMA
7810: 20 74 65 6d 70 5f 73 74 6f 72 65 3b 0a 20 20 7d   temp_store;.  }
7820: 0a 7d 20 7b 30 7d 0a 64 6f 5f 74 65 73 74 20 70  .} {0}.do_test p
7830: 72 61 67 6d 61 2d 39 2e 31 32 20 7b 0a 20 20 65  ragma-9.12 {.  e
7840: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41  xecsql {.    PRA
7850: 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 20 3d  GMA temp_store =
7860: 20 31 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 74   1;.    PRAGMA t
7870: 65 6d 70 5f 73 74 6f 72 65 3b 0a 20 20 7d 0a 7d  emp_store;.  }.}
7880: 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61   {1}.do_test pra
7890: 67 6d 61 2d 39 2e 31 33 20 7b 0a 20 20 65 78 65  gma-9.13 {.  exe
78a0: 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d  csql {.    PRAGM
78b0: 41 20 74 65 6d 70 5f 73 74 6f 72 65 20 3d 20 32  A temp_store = 2
78c0: 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d  ;.    PRAGMA tem
78d0: 70 5f 73 74 6f 72 65 3b 0a 20 20 7d 0a 7d 20 7b  p_store;.  }.} {
78e0: 32 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  2}.do_test pragm
78f0: 61 2d 39 2e 31 34 20 7b 0a 20 20 65 78 65 63 73  a-9.14 {.  execs
7900: 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20  ql {.    PRAGMA 
7910: 74 65 6d 70 5f 73 74 6f 72 65 20 3d 20 33 3b 0a  temp_store = 3;.
7920: 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f      PRAGMA temp_
7930: 73 74 6f 72 65 3b 0a 20 20 7d 0a 7d 20 7b 30 7d  store;.  }.} {0}
7940: 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d  .do_test pragma-
7950: 39 2e 31 35 20 7b 0a 20 20 63 61 74 63 68 73 71  9.15 {.  catchsq
7960: 6c 20 7b 0a 20 20 20 20 42 45 47 49 4e 20 45 58  l {.    BEGIN EX
7970: 43 4c 55 53 49 56 45 3b 0a 20 20 20 20 43 52 45  CLUSIVE;.    CRE
7980: 41 54 45 20 54 45 4d 50 20 54 41 42 4c 45 20 74  ATE TEMP TABLE t
7990: 65 6d 70 5f 74 61 62 6c 65 28 74 29 3b 0a 20 20  emp_table(t);.  
79a0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 65    INSERT INTO te
79b0: 6d 70 5f 74 61 62 6c 65 20 56 41 4c 55 45 53 28  mp_table VALUES(
79c0: 27 76 61 6c 75 61 62 6c 65 20 64 61 74 61 27 29  'valuable data')
79d0: 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d  ;.    PRAGMA tem
79e0: 70 5f 73 74 6f 72 65 20 3d 20 31 3b 0a 20 20 7d  p_store = 1;.  }
79f0: 0a 7d 20 7b 31 20 7b 74 65 6d 70 6f 72 61 72 79  .} {1 {temporary
7a00: 20 73 74 6f 72 61 67 65 20 63 61 6e 6e 6f 74 20   storage cannot 
7a10: 62 65 20 63 68 61 6e 67 65 64 20 66 72 6f 6d 20  be changed from 
7a20: 77 69 74 68 69 6e 20 61 20 74 72 61 6e 73 61 63  within a transac
7a30: 74 69 6f 6e 7d 7d 0a 64 6f 5f 74 65 73 74 20 70  tion}}.do_test p
7a40: 72 61 67 6d 61 2d 39 2e 31 36 20 7b 0a 20 20 65  ragma-9.16 {.  e
7a50: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c  xecsql {.    SEL
7a60: 45 43 54 20 2a 20 46 52 4f 4d 20 74 65 6d 70 5f  ECT * FROM temp_
7a70: 74 61 62 6c 65 3b 0a 20 20 20 20 43 4f 4d 4d 49  table;.    COMMI
7a80: 54 3b 0a 20 20 7d 0a 7d 20 7b 7b 76 61 6c 75 61  T;.  }.} {{valua
7a90: 62 6c 65 20 64 61 74 61 7d 7d 0a 0a 64 6f 5f 74  ble data}}..do_t
7aa0: 65 73 74 20 70 72 61 67 6d 61 2d 39 2e 31 37 20  est pragma-9.17 
7ab0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
7ac0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 65    INSERT INTO te
7ad0: 6d 70 5f 74 61 62 6c 65 20 56 41 4c 55 45 53 28  mp_table VALUES(
7ae0: 27 76 61 6c 75 61 62 6c 65 20 64 61 74 61 20 49  'valuable data I
7af0: 49 27 29 3b 0a 20 20 20 20 53 45 4c 45 43 54 20  I');.    SELECT 
7b00: 2a 20 46 52 4f 4d 20 74 65 6d 70 5f 74 61 62 6c  * FROM temp_tabl
7b10: 65 3b 0a 20 20 7d 0a 7d 20 7b 7b 76 61 6c 75 61  e;.  }.} {{valua
7b20: 62 6c 65 20 64 61 74 61 7d 20 7b 76 61 6c 75 61  ble data} {valua
7b30: 62 6c 65 20 64 61 74 61 20 49 49 7d 7d 0a 0a 64  ble data II}}..d
7b40: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 39 2e  o_test pragma-9.
7b50: 31 38 20 7b 0a 20 20 73 65 74 20 72 63 20 5b 63  18 {.  set rc [c
7b60: 61 74 63 68 20 7b 0a 20 20 20 20 64 62 20 65 76  atch {.    db ev
7b70: 61 6c 20 7b 53 45 4c 45 43 54 20 74 20 46 52 4f  al {SELECT t FRO
7b80: 4d 20 74 65 6d 70 5f 74 61 62 6c 65 7d 20 7b 0a  M temp_table} {.
7b90: 20 20 20 20 20 20 65 78 65 63 73 71 6c 20 7b 70        execsql {p
7ba0: 72 61 67 6d 61 20 74 65 6d 70 5f 73 74 6f 72 65  ragma temp_store
7bb0: 20 3d 20 31 7d 0a 20 20 20 20 7d 0a 20 20 7d 20   = 1}.    }.  } 
7bc0: 6d 73 67 5d 0a 20 20 6c 69 73 74 20 24 72 63 20  msg].  list $rc 
7bd0: 24 6d 73 67 0a 7d 20 7b 31 20 7b 74 65 6d 70 6f  $msg.} {1 {tempo
7be0: 72 61 72 79 20 73 74 6f 72 61 67 65 20 63 61 6e  rary storage can
7bf0: 6e 6f 74 20 62 65 20 63 68 61 6e 67 65 64 20 66  not be changed f
7c00: 72 6f 6d 20 77 69 74 68 69 6e 20 61 20 74 72 61  rom within a tra
7c10: 6e 73 61 63 74 69 6f 6e 7d 7d 0a 0a 7d 20 3b 23  nsaction}}..} ;#
7c20: 20 69 66 63 61 70 61 62 6c 65 20 70 61 67 65 72   ifcapable pager
7c30: 5f 70 72 61 67 6d 61 73 0a 0a 69 66 63 61 70 61  _pragmas..ifcapa
7c40: 62 6c 65 20 74 72 69 67 67 65 72 20 7b 0a 0a 64  ble trigger {..d
7c50: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 30  o_test pragma-10
7c60: 2e 30 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20  .0 {.  catchsql 
7c70: 7b 0a 20 20 20 20 44 52 4f 50 20 54 41 42 4c 45  {.    DROP TABLE
7c80: 20 6d 61 69 6e 2e 74 31 3b 0a 20 20 7d 0a 20 20   main.t1;.  }.  
7c90: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52  execsql {.    PR
7ca0: 41 47 4d 41 20 63 6f 75 6e 74 5f 63 68 61 6e 67  AGMA count_chang
7cb0: 65 73 20 3d 20 31 3b 0a 0a 20 20 20 20 43 52 45  es = 1;..    CRE
7cc0: 41 54 45 20 54 41 42 4c 45 20 74 31 28 61 20 50  ATE TABLE t1(a P
7cd0: 52 49 4d 41 52 59 20 4b 45 59 29 3b 0a 20 20 20  RIMARY KEY);.   
7ce0: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31   CREATE TABLE t1
7cf0: 5f 6d 69 72 72 6f 72 28 61 29 3b 0a 20 20 20 20  _mirror(a);.    
7d00: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 5f  CREATE TABLE t1_
7d10: 6d 69 72 72 6f 72 32 28 61 29 3b 0a 20 20 20 20  mirror2(a);.    
7d20: 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20 74  CREATE TRIGGER t
7d30: 31 5f 62 69 20 42 45 46 4f 52 45 20 49 4e 53 45  1_bi BEFORE INSE
7d40: 52 54 20 4f 4e 20 74 31 20 42 45 47 49 4e 20 0a  RT ON t1 BEGIN .
7d50: 20 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54        INSERT INT
7d60: 4f 20 74 31 5f 6d 69 72 72 6f 72 20 56 41 4c 55  O t1_mirror VALU
7d70: 45 53 28 6e 65 77 2e 61 29 3b 0a 20 20 20 20 45  ES(new.a);.    E
7d80: 4e 44 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54  ND;.    CREATE T
7d90: 52 49 47 47 45 52 20 74 31 5f 61 69 20 41 46 54  RIGGER t1_ai AFT
7da0: 45 52 20 49 4e 53 45 52 54 20 4f 4e 20 74 31 20  ER INSERT ON t1 
7db0: 42 45 47 49 4e 20 0a 20 20 20 20 20 20 49 4e 53  BEGIN .      INS
7dc0: 45 52 54 20 49 4e 54 4f 20 74 31 5f 6d 69 72 72  ERT INTO t1_mirr
7dd0: 6f 72 32 20 56 41 4c 55 45 53 28 6e 65 77 2e 61  or2 VALUES(new.a
7de0: 29 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20 20 20  );.    END;.    
7df0: 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20 74  CREATE TRIGGER t
7e00: 31 5f 62 75 20 42 45 46 4f 52 45 20 55 50 44 41  1_bu BEFORE UPDA
7e10: 54 45 20 4f 4e 20 74 31 20 42 45 47 49 4e 20 0a  TE ON t1 BEGIN .
7e20: 20 20 20 20 20 20 55 50 44 41 54 45 20 74 31 5f        UPDATE t1_
7e30: 6d 69 72 72 6f 72 20 53 45 54 20 61 20 3d 20 6e  mirror SET a = n
7e40: 65 77 2e 61 20 57 48 45 52 45 20 61 20 3d 20 6f  ew.a WHERE a = o
7e50: 6c 64 2e 61 3b 0a 20 20 20 20 45 4e 44 3b 0a 20  ld.a;.    END;. 
7e60: 20 20 20 43 52 45 41 54 45 20 54 52 49 47 47 45     CREATE TRIGGE
7e70: 52 20 74 31 5f 61 75 20 41 46 54 45 52 20 55 50  R t1_au AFTER UP
7e80: 44 41 54 45 20 4f 4e 20 74 31 20 42 45 47 49 4e  DATE ON t1 BEGIN
7e90: 20 0a 20 20 20 20 20 20 55 50 44 41 54 45 20 74   .      UPDATE t
7ea0: 31 5f 6d 69 72 72 6f 72 32 20 53 45 54 20 61 20  1_mirror2 SET a 
7eb0: 3d 20 6e 65 77 2e 61 20 57 48 45 52 45 20 61 20  = new.a WHERE a 
7ec0: 3d 20 6f 6c 64 2e 61 3b 0a 20 20 20 20 45 4e 44  = old.a;.    END
7ed0: 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54 52 49  ;.    CREATE TRI
7ee0: 47 47 45 52 20 74 31 5f 62 64 20 42 45 46 4f 52  GGER t1_bd BEFOR
7ef0: 45 20 44 45 4c 45 54 45 20 4f 4e 20 74 31 20 42  E DELETE ON t1 B
7f00: 45 47 49 4e 20 0a 20 20 20 20 20 20 44 45 4c 45  EGIN .      DELE
7f10: 54 45 20 46 52 4f 4d 20 74 31 5f 6d 69 72 72 6f  TE FROM t1_mirro
7f20: 72 20 57 48 45 52 45 20 61 20 3d 20 6f 6c 64 2e  r WHERE a = old.
7f30: 61 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20 20 20  a;.    END;.    
7f40: 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20 74  CREATE TRIGGER t
7f50: 31 5f 61 64 20 41 46 54 45 52 20 44 45 4c 45 54  1_ad AFTER DELET
7f60: 45 20 4f 4e 20 74 31 20 42 45 47 49 4e 20 0a 20  E ON t1 BEGIN . 
7f70: 20 20 20 20 20 44 45 4c 45 54 45 20 46 52 4f 4d       DELETE FROM
7f80: 20 74 31 5f 6d 69 72 72 6f 72 32 20 57 48 45 52   t1_mirror2 WHER
7f90: 45 20 61 20 3d 20 6f 6c 64 2e 61 3b 0a 20 20 20  E a = old.a;.   
7fa0: 20 45 4e 44 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a   END;.  }.} {}..
7fb0: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31  do_test pragma-1
7fc0: 30 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  0.1 {.  execsql 
7fd0: 7b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  {.    INSERT INT
7fe0: 4f 20 74 31 20 56 41 4c 55 45 53 28 72 61 6e 64  O t1 VALUES(rand
7ff0: 73 74 72 28 31 30 2c 31 30 29 29 3b 0a 20 20 7d  str(10,10));.  }
8000: 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 70  .} {1}.do_test p
8010: 72 61 67 6d 61 2d 31 30 2e 32 20 7b 0a 20 20 65  ragma-10.2 {.  e
8020: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 55 50 44  xecsql {.    UPD
8030: 41 54 45 20 74 31 20 53 45 54 20 61 20 3d 20 72  ATE t1 SET a = r
8040: 61 6e 64 73 74 72 28 31 30 2c 31 30 29 3b 0a 20  andstr(10,10);. 
8050: 20 7d 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74   }.} {1}.do_test
8060: 20 70 72 61 67 6d 61 2d 31 30 2e 33 20 7b 0a 20   pragma-10.3 {. 
8070: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 44   execsql {.    D
8080: 45 4c 45 54 45 20 46 52 4f 4d 20 74 31 3b 0a 20  ELETE FROM t1;. 
8090: 20 7d 0a 7d 20 7b 31 7d 0a 0a 7d 20 3b 23 20 69   }.} {1}..} ;# i
80a0: 66 63 61 70 61 62 6c 65 20 74 72 69 67 67 65 72  fcapable trigger
80b0: 0a 0a 69 66 63 61 70 61 62 6c 65 20 73 63 68 65  ..ifcapable sche
80c0: 6d 61 5f 70 72 61 67 6d 61 73 20 7b 0a 20 20 64  ma_pragmas {.  d
80d0: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 31  o_test pragma-11
80e0: 2e 31 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  .1 {.    execsql
80f0: 32 20 7b 0a 20 20 20 20 20 20 70 72 61 67 6d 61  2 {.      pragma
8100: 20 63 6f 6c 6c 61 74 69 6f 6e 5f 6c 69 73 74 3b   collation_list;
8110: 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 73 65 71 20  .    }.  } {seq 
8120: 30 20 6e 61 6d 65 20 52 54 52 49 4d 20 73 65 71  0 name RTRIM seq
8130: 20 31 20 6e 61 6d 65 20 4e 4f 43 41 53 45 20 73   1 name NOCASE s
8140: 65 71 20 32 20 6e 61 6d 65 20 42 49 4e 41 52 59  eq 2 name BINARY
8150: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67  }.  do_test prag
8160: 6d 61 2d 31 31 2e 32 20 7b 0a 20 20 20 20 64 62  ma-11.2 {.    db
8170: 20 63 6f 6c 6c 61 74 65 20 4e 65 77 5f 43 6f 6c   collate New_Col
8180: 6c 61 74 69 6f 6e 20 62 6c 61 68 2e 2e 2e 0a 20  lation blah.... 
8190: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
81a0: 20 20 20 70 72 61 67 6d 61 20 63 6f 6c 6c 61 74     pragma collat
81b0: 69 6f 6e 5f 6c 69 73 74 3b 0a 20 20 20 20 7d 0a  ion_list;.    }.
81c0: 20 20 7d 20 7b 30 20 4e 65 77 5f 43 6f 6c 6c 61    } {0 New_Colla
81d0: 74 69 6f 6e 20 31 20 52 54 52 49 4d 20 32 20 4e  tion 1 RTRIM 2 N
81e0: 4f 43 41 53 45 20 33 20 42 49 4e 41 52 59 7d 0a  OCASE 3 BINARY}.
81f0: 7d 0a 0a 69 66 63 61 70 61 62 6c 65 20 73 63 68  }..ifcapable sch
8200: 65 6d 61 5f 70 72 61 67 6d 61 73 26 26 74 65 6d  ema_pragmas&&tem
8210: 70 64 62 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20  pdb {.  do_test 
8220: 70 72 61 67 6d 61 2d 31 32 2e 31 20 7b 0a 20 20  pragma-12.1 {.  
8230: 20 20 73 71 6c 69 74 65 33 20 64 62 32 20 74 65    sqlite3 db2 te
8240: 73 74 2e 64 62 0a 20 20 20 20 65 78 65 63 73 71  st.db.    execsq
8250: 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41  l {.      PRAGMA
8260: 20 74 65 6d 70 2e 74 61 62 6c 65 5f 69 6e 66 6f   temp.table_info
8270: 28 27 61 62 63 27 29 3b 0a 20 20 20 20 7d 20 64  ('abc');.    } d
8280: 62 32 0a 20 20 7d 20 7b 7d 0a 20 20 64 62 32 20  b2.  } {}.  db2 
8290: 63 6c 6f 73 65 0a 0a 20 20 64 6f 5f 74 65 73 74  close..  do_test
82a0: 20 70 72 61 67 6d 61 2d 31 32 2e 32 20 7b 0a 20   pragma-12.2 {. 
82b0: 20 20 20 73 71 6c 69 74 65 33 20 64 62 32 20 74     sqlite3 db2 t
82c0: 65 73 74 2e 64 62 0a 20 20 20 20 65 78 65 63 73  est.db.    execs
82d0: 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d  ql {.      PRAGM
82e0: 41 20 74 65 6d 70 2e 64 65 66 61 75 6c 74 5f 63  A temp.default_c
82f0: 61 63 68 65 5f 73 69 7a 65 20 3d 20 32 30 30 3b  ache_size = 200;
8300: 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 74 65  .      PRAGMA te
8310: 6d 70 2e 64 65 66 61 75 6c 74 5f 63 61 63 68 65  mp.default_cache
8320: 5f 73 69 7a 65 3b 0a 20 20 20 20 7d 20 64 62 32  _size;.    } db2
8330: 0a 20 20 7d 20 7b 32 30 30 7d 0a 20 20 64 62 32  .  } {200}.  db2
8340: 20 63 6c 6f 73 65 0a 0a 20 20 64 6f 5f 74 65 73   close..  do_tes
8350: 74 20 70 72 61 67 6d 61 2d 31 32 2e 33 20 7b 0a  t pragma-12.3 {.
8360: 20 20 20 20 73 71 6c 69 74 65 33 20 64 62 32 20      sqlite3 db2 
8370: 74 65 73 74 2e 64 62 0a 20 20 20 20 65 78 65 63  test.db.    exec
8380: 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47  sql {.      PRAG
8390: 4d 41 20 74 65 6d 70 2e 63 61 63 68 65 5f 73 69  MA temp.cache_si
83a0: 7a 65 20 3d 20 34 30 30 3b 0a 20 20 20 20 20 20  ze = 400;.      
83b0: 50 52 41 47 4d 41 20 74 65 6d 70 2e 63 61 63 68  PRAGMA temp.cach
83c0: 65 5f 73 69 7a 65 3b 0a 20 20 20 20 7d 20 64 62  e_size;.    } db
83d0: 32 0a 20 20 7d 20 7b 34 30 30 7d 0a 20 20 64 62  2.  } {400}.  db
83e0: 32 20 63 6c 6f 73 65 0a 7d 0a 0a 69 66 63 61 70  2 close.}..ifcap
83f0: 61 62 6c 65 20 62 6c 6f 62 6c 69 74 20 7b 0a 0a  able bloblit {..
8400: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31  do_test pragma-1
8410: 33 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  3.1 {.  execsql 
8420: 7b 0a 20 20 20 20 44 52 4f 50 20 54 41 42 4c 45  {.    DROP TABLE
8430: 20 49 46 20 45 58 49 53 54 53 20 74 34 3b 0a 20   IF EXISTS t4;. 
8440: 20 20 20 50 52 41 47 4d 41 20 76 64 62 65 5f 74     PRAGMA vdbe_t
8450: 72 61 63 65 3d 6f 6e 3b 0a 20 20 20 20 50 52 41  race=on;.    PRA
8460: 47 4d 41 20 76 64 62 65 5f 6c 69 73 74 69 6e 67  GMA vdbe_listing
8470: 3d 6f 6e 3b 0a 20 20 20 20 50 52 41 47 4d 41 20  =on;.    PRAGMA 
8480: 73 71 6c 5f 74 72 61 63 65 3d 6f 6e 3b 0a 20 20  sql_trace=on;.  
8490: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
84a0: 34 28 61 20 49 4e 54 45 47 45 52 20 50 52 49 4d  4(a INTEGER PRIM
84b0: 41 52 59 20 4b 45 59 2c 62 29 3b 0a 20 20 20 20  ARY KEY,b);.    
84c0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 34 28 62  INSERT INTO t4(b
84d0: 29 20 56 41 4c 55 45 53 28 78 27 30 31 32 33 34  ) VALUES(x'01234
84e0: 35 36 37 38 39 61 62 63 64 65 66 30 31 32 33 34  56789abcdef01234
84f0: 35 36 37 38 39 61 62 63 64 65 66 30 31 32 33 34  56789abcdef01234
8500: 35 36 37 38 39 27 29 3b 0a 20 20 20 20 49 4e 53  56789');.    INS
8510: 45 52 54 20 49 4e 54 4f 20 74 34 28 62 29 20 56  ERT INTO t4(b) V
8520: 41 4c 55 45 53 28 72 61 6e 64 73 74 72 28 33 30  ALUES(randstr(30
8530: 2c 33 30 29 29 3b 0a 20 20 20 20 49 4e 53 45 52  ,30));.    INSER
8540: 54 20 49 4e 54 4f 20 74 34 28 62 29 20 56 41 4c  T INTO t4(b) VAL
8550: 55 45 53 28 31 2e 32 33 34 35 36 29 3b 0a 20 20  UES(1.23456);.  
8560: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 34    INSERT INTO t4
8570: 28 62 29 20 56 41 4c 55 45 53 28 4e 55 4c 4c 29  (b) VALUES(NULL)
8580: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
8590: 4f 20 74 34 28 62 29 20 56 41 4c 55 45 53 28 30  O t4(b) VALUES(0
85a0: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
85b0: 54 4f 20 74 34 28 62 29 20 53 45 4c 45 43 54 20  TO t4(b) SELECT 
85c0: 62 7c 7c 62 7c 7c 62 7c 7c 62 20 46 52 4f 4d 20  b||b||b||b FROM 
85d0: 74 34 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a  t4;.    SELECT *
85e0: 20 46 52 4f 4d 20 74 34 3b 0a 20 20 7d 0a 20 20   FROM t4;.  }.  
85f0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52  execsql {.    PR
8600: 41 47 4d 41 20 76 64 62 65 5f 74 72 61 63 65 3d  AGMA vdbe_trace=
8610: 6f 66 66 3b 0a 20 20 20 20 50 52 41 47 4d 41 20  off;.    PRAGMA 
8620: 76 64 62 65 5f 6c 69 73 74 69 6e 67 3d 6f 66 66  vdbe_listing=off
8630: 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 73 71 6c  ;.    PRAGMA sql
8640: 5f 74 72 61 63 65 3d 6f 66 66 3b 0a 20 20 7d 0a  _trace=off;.  }.
8650: 7d 20 7b 7d 0a 0a 7d 20 3b 23 20 69 66 63 61 70  } {}..} ;# ifcap
8660: 61 62 6c 65 20 62 6c 6f 62 6c 69 74 20 0a 0a 69  able bloblit ..i
8670: 66 63 61 70 61 62 6c 65 20 70 61 67 65 72 5f 70  fcapable pager_p
8680: 72 61 67 6d 61 73 20 7b 0a 20 20 64 62 20 63 6c  ragmas {.  db cl
8690: 6f 73 65 0a 20 20 66 6f 72 63 65 64 65 6c 65 74  ose.  forcedelet
86a0: 65 20 74 65 73 74 2e 64 62 0a 20 20 73 71 6c 69  e test.db.  sqli
86b0: 74 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20  te3 db test.db. 
86c0: 0a 20 20 23 20 45 56 49 44 45 4e 43 45 2d 4f 46  .  # EVIDENCE-OF
86d0: 3a 20 52 2d 31 35 36 37 32 2d 33 33 36 31 31 20  : R-15672-33611 
86e0: 50 52 41 47 4d 41 20 73 63 68 65 6d 61 2e 70 61  PRAGMA schema.pa
86f0: 67 65 5f 63 6f 75 6e 74 3b 20 52 65 74 75 72 6e  ge_count; Return
8700: 20 74 68 65 20 74 6f 74 61 6c 0a 20 20 23 20 6e   the total.  # n
8710: 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 69  umber of pages i
8720: 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  n the database f
8730: 69 6c 65 2e 0a 20 20 23 0a 20 20 64 6f 5f 74 65  ile..  #.  do_te
8740: 73 74 20 70 72 61 67 6d 61 2d 31 34 2e 31 20 7b  st pragma-14.1 {
8750: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 20 70  .    execsql { p
8760: 72 61 67 6d 61 20 61 75 74 6f 5f 76 61 63 75 75  ragma auto_vacuu
8770: 6d 20 3d 20 30 20 7d 0a 20 20 20 20 65 78 65 63  m = 0 }.    exec
8780: 73 71 6c 20 7b 20 70 72 61 67 6d 61 20 70 61 67  sql { pragma pag
8790: 65 5f 63 6f 75 6e 74 3b 20 70 72 61 67 6d 61 20  e_count; pragma 
87a0: 6d 61 69 6e 2e 70 61 67 65 5f 63 6f 75 6e 74 20  main.page_count 
87b0: 7d 0a 20 20 7d 20 7b 30 20 30 7d 0a 0a 20 20 64  }.  } {0 0}..  d
87c0: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 34  o_test pragma-14
87d0: 2e 32 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  .2 {.    execsql
87e0: 20 7b 20 0a 20 20 20 20 20 20 43 52 45 41 54 45   { .      CREATE
87f0: 20 54 41 42 4c 45 20 61 62 63 28 61 2c 20 62 2c   TABLE abc(a, b,
8800: 20 63 29 3b 0a 20 20 20 20 20 20 50 52 41 47 4d   c);.      PRAGM
8810: 41 20 70 61 67 65 5f 63 6f 75 6e 74 3b 0a 20 20  A page_count;.  
8820: 20 20 20 20 50 52 41 47 4d 41 20 6d 61 69 6e 2e      PRAGMA main.
8830: 70 61 67 65 5f 63 6f 75 6e 74 3b 0a 20 20 20 20  page_count;.    
8840: 20 20 50 52 41 47 4d 41 20 74 65 6d 70 2e 70 61    PRAGMA temp.pa
8850: 67 65 5f 63 6f 75 6e 74 3b 0a 20 20 20 20 7d 0a  ge_count;.    }.
8860: 20 20 7d 20 7b 32 20 32 20 30 7d 0a 20 20 64 6f    } {2 2 0}.  do
8870: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 34 2e  _test pragma-14.
8880: 32 75 63 20 7b 0a 20 20 20 20 65 78 65 63 73 71  2uc {.    execsq
8890: 6c 20 7b 70 72 61 67 6d 61 20 50 41 47 45 5f 43  l {pragma PAGE_C
88a0: 4f 55 4e 54 7d 0a 20 20 7d 20 7b 32 7d 0a 0a 20  OUNT}.  } {2}.. 
88b0: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
88c0: 31 34 2e 33 20 7b 0a 20 20 20 20 65 78 65 63 73  14.3 {.    execs
88d0: 71 6c 20 7b 20 0a 20 20 20 20 20 20 42 45 47 49  ql { .      BEGI
88e0: 4e 3b 0a 20 20 20 20 20 20 43 52 45 41 54 45 20  N;.      CREATE 
88f0: 54 41 42 4c 45 20 64 65 66 28 61 2c 20 62 2c 20  TABLE def(a, b, 
8900: 63 29 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41  c);.      PRAGMA
8910: 20 70 61 67 65 5f 63 6f 75 6e 74 3b 0a 20 20 20   page_count;.   
8920: 20 7d 0a 20 20 7d 20 7b 33 7d 0a 20 20 64 6f 5f   }.  } {3}.  do_
8930: 74 65 73 74 20 70 72 61 67 6d 61 2d 31 34 2e 33  test pragma-14.3
8940: 75 63 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  uc {.    execsql
8950: 20 7b 70 72 61 67 6d 61 20 50 41 47 45 5f 43 4f   {pragma PAGE_CO
8960: 55 4e 54 7d 0a 20 20 7d 20 7b 33 7d 0a 0a 20 20  UNT}.  } {3}..  
8970: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31  do_test pragma-1
8980: 34 2e 34 20 7b 0a 20 20 20 20 73 65 74 20 70 61  4.4 {.    set pa
8990: 67 65 5f 73 69 7a 65 20 5b 64 62 20 6f 6e 65 20  ge_size [db one 
89a0: 7b 70 72 61 67 6d 61 20 70 61 67 65 5f 73 69 7a  {pragma page_siz
89b0: 65 7d 5d 0a 20 20 20 20 65 78 70 72 20 5b 66 69  e}].    expr [fi
89c0: 6c 65 20 73 69 7a 65 20 74 65 73 74 2e 64 62 5d  le size test.db]
89d0: 20 2f 20 24 70 61 67 65 5f 73 69 7a 65 0a 20 20   / $page_size.  
89e0: 7d 20 7b 32 7d 0a 0a 20 20 64 6f 5f 74 65 73 74  } {2}..  do_test
89f0: 20 70 72 61 67 6d 61 2d 31 34 2e 35 20 7b 0a 20   pragma-14.5 {. 
8a00: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
8a10: 20 20 20 52 4f 4c 4c 42 41 43 4b 3b 0a 20 20 20     ROLLBACK;.   
8a20: 20 20 20 50 52 41 47 4d 41 20 70 61 67 65 5f 63     PRAGMA page_c
8a30: 6f 75 6e 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 20  ount;.    }.  } 
8a40: 7b 32 7d 0a 0a 20 20 64 6f 5f 74 65 73 74 20 70  {2}..  do_test p
8a50: 72 61 67 6d 61 2d 31 34 2e 36 20 7b 0a 20 20 20  ragma-14.6 {.   
8a60: 20 66 6f 72 63 65 64 65 6c 65 74 65 20 74 65 73   forcedelete tes
8a70: 74 32 2e 64 62 0a 20 20 20 20 73 71 6c 69 74 65  t2.db.    sqlite
8a80: 33 20 64 62 32 20 74 65 73 74 32 2e 64 62 0a 20  3 db2 test2.db. 
8a90: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
8aa0: 20 20 20 50 52 41 47 4d 41 20 61 75 74 6f 5f 76     PRAGMA auto_v
8ab0: 61 63 75 75 6d 20 3d 20 30 3b 0a 20 20 20 20 20  acuum = 0;.     
8ac0: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31   CREATE TABLE t1
8ad0: 28 61 2c 20 62 2c 20 63 29 3b 0a 20 20 20 20 20  (a, b, c);.     
8ae0: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 32   CREATE TABLE t2
8af0: 28 61 2c 20 62 2c 20 63 29 3b 0a 20 20 20 20 20  (a, b, c);.     
8b00: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 33   CREATE TABLE t3
8b10: 28 61 2c 20 62 2c 20 63 29 3b 0a 20 20 20 20 20  (a, b, c);.     
8b20: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 34   CREATE TABLE t4
8b30: 28 61 2c 20 62 2c 20 63 29 3b 0a 20 20 20 20 7d  (a, b, c);.    }
8b40: 20 64 62 32 0a 20 20 20 20 64 62 32 20 63 6c 6f   db2.    db2 clo
8b50: 73 65 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b  se.    execsql {
8b60: 0a 20 20 20 20 20 20 41 54 54 41 43 48 20 27 74  .      ATTACH 't
8b70: 65 73 74 32 2e 64 62 27 20 41 53 20 61 75 78 3b  est2.db' AS aux;
8b80: 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 61 75  .      PRAGMA au
8b90: 78 2e 70 61 67 65 5f 63 6f 75 6e 74 3b 0a 20 20  x.page_count;.  
8ba0: 20 20 7d 20 0a 20 20 7d 20 7b 35 7d 0a 20 20 64    } .  } {5}.  d
8bb0: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 34  o_test pragma-14
8bc0: 2e 36 75 63 20 7b 0a 20 20 20 20 65 78 65 63 73  .6uc {.    execs
8bd0: 71 6c 20 7b 70 72 61 67 6d 61 20 41 55 58 2e 50  ql {pragma AUX.P
8be0: 41 47 45 5f 43 4f 55 4e 54 7d 0a 20 20 7d 20 7b  AGE_COUNT}.  } {
8bf0: 35 7d 0a 7d 0a 0a 23 20 54 65 73 74 20 74 68 61  5}.}..# Test tha
8c00: 74 20 74 68 65 20 76 61 6c 75 65 20 73 65 74 20  t the value set 
8c10: 75 73 69 6e 67 20 74 68 65 20 63 61 63 68 65 5f  using the cache_
8c20: 73 69 7a 65 20 70 72 61 67 6d 61 20 69 73 20 6e  size pragma is n
8c30: 6f 74 20 72 65 73 65 74 20 77 68 65 6e 20 74 68  ot reset when th
8c40: 65 0a 23 20 73 63 68 65 6d 61 20 69 73 20 72 65  e.# schema is re
8c50: 6c 6f 61 64 65 64 2e 0a 23 0a 69 66 63 61 70 61  loaded..#.ifcapa
8c60: 62 6c 65 20 70 61 67 65 72 5f 70 72 61 67 6d 61  ble pager_pragma
8c70: 73 20 7b 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20  s {.  db close. 
8c80: 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74   sqlite3 db test
8c90: 2e 64 62 0a 20 20 64 6f 5f 74 65 73 74 20 70 72  .db.  do_test pr
8ca0: 61 67 6d 61 2d 31 35 2e 31 20 7b 0a 20 20 20 20  agma-15.1 {.    
8cb0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
8cc0: 50 52 41 47 4d 41 20 63 61 63 68 65 5f 73 69 7a  PRAGMA cache_siz
8cd0: 65 3d 35 39 3b 0a 20 20 20 20 20 20 50 52 41 47  e=59;.      PRAG
8ce0: 4d 41 20 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20  MA cache_size;. 
8cf0: 20 20 20 7d 0a 20 20 7d 20 7b 35 39 7d 0a 20 20     }.  } {59}.  
8d00: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31  do_test pragma-1
8d10: 35 2e 32 20 7b 0a 20 20 20 20 73 71 6c 69 74 65  5.2 {.    sqlite
8d20: 33 20 64 62 32 20 74 65 73 74 2e 64 62 0a 20 20  3 db2 test.db.  
8d30: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
8d40: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 6e    CREATE TABLE n
8d50: 65 77 74 61 62 6c 65 28 61 2c 20 62 2c 20 63 29  ewtable(a, b, c)
8d60: 3b 0a 20 20 20 20 7d 20 64 62 32 0a 20 20 20 20  ;.    } db2.    
8d70: 64 62 32 20 63 6c 6f 73 65 0a 20 20 7d 20 7b 7d  db2 close.  } {}
8d80: 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .  do_test pragm
8d90: 61 2d 31 35 2e 33 20 7b 0a 20 20 20 20 23 20 45  a-15.3 {.    # E
8da0: 76 61 6c 75 61 74 69 6e 67 20 74 68 69 73 20 73  valuating this s
8db0: 74 61 74 65 6d 65 6e 74 20 77 69 6c 6c 20 63 61  tatement will ca
8dc0: 75 73 65 20 74 68 65 20 73 63 68 65 6d 61 20 74  use the schema t
8dd0: 6f 20 62 65 20 72 65 6c 6f 61 64 65 64 20 28 62  o be reloaded (b
8de0: 65 63 61 75 73 65 0a 20 20 20 20 23 20 74 68 65  ecause.    # the
8df0: 20 73 63 68 65 6d 61 20 77 61 73 20 63 68 61 6e   schema was chan
8e00: 67 65 64 20 62 79 20 61 6e 6f 74 68 65 72 20 63  ged by another c
8e10: 6f 6e 6e 65 63 74 69 6f 6e 20 69 6e 20 70 72 61  onnection in pra
8e20: 67 6d 61 2d 31 35 2e 32 29 2e 20 41 74 20 6f 6e  gma-15.2). At on
8e30: 65 0a 20 20 20 20 23 20 70 6f 69 6e 74 20 74 68  e.    # point th
8e40: 65 72 65 20 77 61 73 20 61 20 62 75 67 20 74 68  ere was a bug th
8e50: 61 74 20 72 65 73 65 74 20 74 68 65 20 63 61 63  at reset the cac
8e60: 68 65 5f 73 69 7a 65 20 74 6f 20 69 74 73 20 64  he_size to its d
8e70: 65 66 61 75 6c 74 20 76 61 6c 75 65 0a 20 20 20  efault value.   
8e80: 20 23 20 77 68 65 6e 20 74 68 69 73 20 68 61 70   # when this hap
8e90: 70 65 6e 65 64 2e 20 0a 20 20 20 20 65 78 65 63  pened. .    exec
8ea0: 73 71 6c 20 7b 20 53 45 4c 45 43 54 20 2a 20 46  sql { SELECT * F
8eb0: 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
8ec0: 72 20 7d 0a 20 20 20 20 65 78 65 63 73 71 6c 20  r }.    execsql 
8ed0: 7b 20 50 52 41 47 4d 41 20 63 61 63 68 65 5f 73  { PRAGMA cache_s
8ee0: 69 7a 65 20 7d 0a 20 20 7d 20 7b 35 39 7d 0a 7d  ize }.  } {59}.}
8ef0: 0a 0a 23 20 52 65 73 65 74 20 74 68 65 20 73 71  ..# Reset the sq
8f00: 6c 69 74 65 33 5f 74 65 6d 70 5f 64 69 72 65 63  lite3_temp_direc
8f10: 74 6f 72 79 20 76 61 72 69 61 62 6c 65 20 66 6f  tory variable fo
8f20: 72 20 74 68 65 20 6e 65 78 74 20 72 75 6e 20 6f  r the next run o
8f30: 66 20 74 65 73 74 73 3a 0a 73 71 6c 69 74 65 33  f tests:.sqlite3
8f40: 20 64 62 58 20 3a 6d 65 6d 6f 72 79 3a 0a 64 62   dbX :memory:.db
8f50: 58 20 65 76 61 6c 20 7b 50 52 41 47 4d 41 20 74  X eval {PRAGMA t
8f60: 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74  emp_store_direct
8f70: 6f 72 79 20 3d 20 22 22 7d 0a 64 62 58 20 63 6c  ory = ""}.dbX cl
8f80: 6f 73 65 0a 0a 73 65 74 20 73 6b 69 70 5f 6c 6f  ose..set skip_lo
8f90: 63 6b 5f 70 72 6f 78 79 5f 74 65 73 74 73 20 5b  ck_proxy_tests [
8fa0: 70 61 74 68 5f 69 73 5f 64 6f 73 20 22 2e 22 5d  path_is_dos "."]
8fb0: 0a 69 66 63 61 70 61 62 6c 65 20 21 28 6c 6f 63  .ifcapable !(loc
8fc0: 6b 5f 70 72 6f 78 79 5f 70 72 61 67 6d 61 73 26  k_proxy_pragmas&
8fd0: 26 70 72 65 66 65 72 5f 70 72 6f 78 79 5f 6c 6f  &prefer_proxy_lo
8fe0: 63 6b 69 6e 67 29 20 7b 0a 20 20 73 65 74 20 73  cking) {.  set s
8ff0: 6b 69 70 5f 6c 6f 63 6b 5f 70 72 6f 78 79 5f 74  kip_lock_proxy_t
9000: 65 73 74 73 20 31 0a 7d 0a 0a 69 66 20 21 24 73  ests 1.}..if !$s
9010: 6b 69 70 5f 6c 6f 63 6b 5f 70 72 6f 78 79 5f 74  kip_lock_proxy_t
9020: 65 73 74 73 20 7b 0a 20 20 73 65 74 20 73 71 6c  ests {.  set sql
9030: 69 74 65 5f 68 6f 73 74 69 64 5f 6e 75 6d 20 31  ite_hostid_num 1
9040: 0a 0a 20 20 73 65 74 20 75 73 69 6e 67 5f 70 72  ..  set using_pr
9050: 6f 78 79 20 30 0a 20 20 66 6f 72 65 61 63 68 20  oxy 0.  foreach 
9060: 7b 6e 61 6d 65 20 76 61 6c 75 65 7d 20 5b 61 72  {name value} [ar
9070: 72 61 79 20 67 65 74 20 65 6e 76 20 53 51 4c 49  ray get env SQLI
9080: 54 45 5f 46 4f 52 43 45 5f 50 52 4f 58 59 5f 4c  TE_FORCE_PROXY_L
9090: 4f 43 4b 49 4e 47 5d 20 7b 0a 20 20 20 20 73 65  OCKING] {.    se
90a0: 74 20 75 73 69 6e 67 5f 70 72 6f 78 79 20 24 76  t using_proxy $v
90b0: 61 6c 75 65 0a 20 20 7d 0a 0a 20 20 23 20 54 65  alue.  }..  # Te
90c0: 73 74 20 74 68 65 20 6c 6f 63 6b 5f 70 72 6f 78  st the lock_prox
90d0: 79 5f 66 69 6c 65 20 70 72 61 67 6d 61 73 2e 0a  y_file pragmas..
90e0: 20 20 23 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20    #.  db close. 
90f0: 20 73 65 74 20 65 6e 76 28 53 51 4c 49 54 45 5f   set env(SQLITE_
9100: 46 4f 52 43 45 5f 50 52 4f 58 59 5f 4c 4f 43 4b  FORCE_PROXY_LOCK
9110: 49 4e 47 29 20 22 30 22 0a 0a 20 20 73 71 6c 69  ING) "0"..  sqli
9120: 74 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20  te3 db test.db. 
9130: 20 23 20 73 65 74 20 6c 6f 63 6b 20 70 72 6f 78   # set lock prox
9140: 79 20 6e 61 6d 65 20 61 6e 64 20 74 68 65 6e 20  y name and then 
9150: 71 75 65 72 79 20 69 74 20 76 69 61 20 70 72 61  query it via pra
9160: 67 6d 61 20 69 6e 74 65 72 66 61 63 65 0a 20 20  gma interface.  
9170: 73 65 74 20 6c 70 70 20 5b 65 78 65 63 20 6d 6b  set lpp [exec mk
9180: 74 65 6d 70 20 2d 74 20 22 70 72 6f 78 79 31 22  temp -t "proxy1"
9190: 5d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67  ].  do_test prag
91a0: 6d 61 2d 31 36 2e 31 20 7b 0a 20 20 20 20 65 78  ma-16.1 {.    ex
91b0: 65 63 73 71 6c 20 22 50 52 41 47 4d 41 20 6c 6f  ecsql "PRAGMA lo
91c0: 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 3d 27 24  ck_proxy_file='$
91d0: 6c 70 70 27 22 0a 20 20 20 20 65 78 65 63 73 71  lpp'".    execsq
91e0: 6c 20 22 73 65 6c 65 63 74 20 2a 20 66 72 6f 6d  l "select * from
91f0: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 22 0a   sqlite_master".
9200: 20 20 20 20 65 78 65 63 73 71 6c 20 22 50 52 41      execsql "PRA
9210: 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66  GMA lock_proxy_f
9220: 69 6c 65 22 0a 20 20 7d 20 24 6c 70 70 0a 0a 20  ile".  } $lpp.. 
9230: 20 23 20 32 20 64 61 74 61 62 61 73 65 20 63 6f   # 2 database co
9240: 6e 6e 65 63 74 69 6f 6e 73 20 63 61 6e 20 73 68  nnections can sh
9250: 61 72 65 20 61 20 6c 6f 63 6b 20 70 72 6f 78 79  are a lock proxy
9260: 20 66 69 6c 65 0a 20 20 64 6f 5f 74 65 73 74 20   file.  do_test 
9270: 70 72 61 67 6d 61 2d 31 36 2e 32 20 7b 0a 20 20  pragma-16.2 {.  
9280: 20 20 73 71 6c 69 74 65 33 20 64 62 32 20 74 65    sqlite3 db2 te
9290: 73 74 2e 64 62 0a 20 20 20 20 65 78 65 63 73 71  st.db.    execsq
92a0: 6c 20 22 50 52 41 47 4d 41 20 6c 6f 63 6b 5f 70  l "PRAGMA lock_p
92b0: 72 6f 78 79 5f 66 69 6c 65 3d 27 24 6c 70 70 27  roxy_file='$lpp'
92c0: 22 20 64 62 32 0a 20 20 7d 20 7b 7d 0a 0a 20 20  " db2.  } {}..  
92d0: 64 62 32 20 63 6c 6f 73 65 0a 20 20 23 20 32 6e  db2 close.  # 2n
92e0: 64 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  d database conne
92f0: 63 74 69 6f 6e 20 73 68 6f 75 6c 64 20 61 75 74  ction should aut
9300: 6f 2d 6e 61 6d 65 20 61 6e 20 65 78 69 73 74 69  o-name an existi
9310: 6e 67 20 6c 6f 63 6b 20 70 72 6f 78 79 20 66 69  ng lock proxy fi
9320: 6c 65 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61  le.  do_test pra
9330: 67 6d 61 2d 31 36 2e 32 2e 31 20 7b 0a 20 20 20  gma-16.2.1 {.   
9340: 20 73 71 6c 69 74 65 33 20 64 62 32 20 74 65 73   sqlite3 db2 tes
9350: 74 2e 64 62 0a 20 20 20 20 65 78 65 63 73 71 6c  t.db.    execsql
9360: 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20   {.      PRAGMA 
9370: 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 3d  lock_proxy_file=
9380: 22 3a 61 75 74 6f 3a 22 3b 0a 20 20 20 20 20 20  ":auto:";.      
9390: 73 65 6c 65 63 74 20 2a 20 66 72 6f 6d 20 73 71  select * from sq
93a0: 6c 69 74 65 5f 6d 61 73 74 65 72 3b 0a 20 20 20  lite_master;.   
93b0: 20 7d 20 64 62 32 0a 20 20 20 20 65 78 65 63 73   } db2.    execs
93c0: 71 6c 20 22 50 52 41 47 4d 41 20 6c 6f 63 6b 5f  ql "PRAGMA lock_
93d0: 70 72 6f 78 79 5f 66 69 6c 65 22 20 64 62 32 0a  proxy_file" db2.
93e0: 20 20 7d 20 24 6c 70 70 0a 0a 20 20 64 62 32 20    } $lpp..  db2 
93f0: 63 6c 6f 73 65 0a 20 20 73 65 74 20 6c 70 70 32  close.  set lpp2
9400: 20 5b 65 78 65 63 20 6d 6b 74 65 6d 70 20 2d 74   [exec mktemp -t
9410: 20 22 70 72 6f 78 79 32 22 5d 0a 0a 20 20 23 20   "proxy2"]..  # 
9420: 32 6e 64 20 64 61 74 61 62 61 73 65 20 63 6f 6e  2nd database con
9430: 6e 65 63 74 69 6f 6e 20 63 61 6e 6e 6f 74 20 6f  nection cannot o
9440: 76 65 72 72 69 64 65 20 74 68 65 20 6c 6f 63 6b  verride the lock
9450: 20 70 72 6f 78 79 20 66 69 6c 65 0a 20 20 64 6f   proxy file.  do
9460: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 36 2e  _test pragma-16.
9470: 33 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 20  3 {.    sqlite3 
9480: 64 62 32 20 74 65 73 74 2e 64 62 0a 20 20 20 20  db2 test.db.    
9490: 65 78 65 63 73 71 6c 20 22 50 52 41 47 4d 41 20  execsql "PRAGMA 
94a0: 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 3d  lock_proxy_file=
94b0: 27 24 6c 70 70 32 27 22 20 64 62 32 0a 20 20 20  '$lpp2'" db2.   
94c0: 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20   catchsql {.    
94d0: 20 20 73 65 6c 65 63 74 20 2a 20 66 72 6f 6d 20    select * from 
94e0: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 3b 0a 20  sqlite_master;. 
94f0: 20 20 20 7d 20 64 62 32 0a 20 20 7d 20 7b 31 20     } db2.  } {1 
9500: 7b 64 61 74 61 62 61 73 65 20 69 73 20 6c 6f 63  {database is loc
9510: 6b 65 64 7d 7d 0a 0a 20 20 73 65 74 20 6c 70 70  ked}}..  set lpp
9520: 33 20 5b 65 78 65 63 20 6d 6b 74 65 6d 70 20 2d  3 [exec mktemp -
9530: 74 20 22 70 72 6f 78 79 33 22 5d 0a 0a 20 20 23  t "proxy3"]..  #
9540: 20 6c 6f 63 6b 20 70 72 6f 78 79 20 66 69 6c 65   lock proxy file
9550: 20 63 61 6e 20 62 65 20 72 65 6e 61 6d 65 64 20   can be renamed 
9560: 69 66 20 6e 6f 20 6f 74 68 65 72 20 63 6f 6e 6e  if no other conn
9570: 65 63 74 69 6f 6e 73 20 61 72 65 20 61 63 74 69  ections are acti
9580: 76 65 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61  ve.  do_test pra
9590: 67 6d 61 2d 31 36 2e 34 20 7b 0a 20 20 20 20 64  gma-16.4 {.    d
95a0: 62 32 20 63 6c 6f 73 65 0a 20 20 20 20 64 62 20  b2 close.    db 
95b0: 63 6c 6f 73 65 0a 20 20 20 20 73 71 6c 69 74 65  close.    sqlite
95c0: 33 20 64 62 32 20 74 65 73 74 2e 64 62 0a 20 20  3 db2 test.db.  
95d0: 20 20 65 78 65 63 73 71 6c 20 22 50 52 41 47 4d    execsql "PRAGM
95e0: 41 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c  A lock_proxy_fil
95f0: 65 3d 27 24 6c 70 70 33 27 22 20 64 62 32 0a 20  e='$lpp3'" db2. 
9600: 20 20 20 65 78 65 63 73 71 6c 20 22 50 52 41 47     execsql "PRAG
9610: 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69  MA lock_proxy_fi
9620: 6c 65 3d 27 24 6c 70 70 32 27 22 20 64 62 32 0a  le='$lpp2'" db2.
9630: 20 20 20 20 65 78 65 63 73 71 6c 20 22 50 52 41      execsql "PRA
9640: 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66  GMA lock_proxy_f
9650: 69 6c 65 22 20 64 62 32 0a 20 20 7d 20 24 6c 70  ile" db2.  } $lp
9660: 70 32 0a 0a 20 20 64 62 32 20 63 6c 6f 73 65 0a  p2..  db2 close.
9670: 20 20 73 65 74 20 65 6e 76 28 53 51 4c 49 54 45    set env(SQLITE
9680: 5f 46 4f 52 43 45 5f 50 52 4f 58 59 5f 4c 4f 43  _FORCE_PROXY_LOC
9690: 4b 49 4e 47 29 20 22 31 22 0a 20 20 23 20 61 75  KING) "1".  # au
96a0: 74 6f 2d 6e 61 6d 69 6e 67 20 73 68 6f 75 6c 64  to-naming should
96b0: 20 72 65 75 73 65 20 74 68 65 20 6c 61 73 74 20   reuse the last 
96c0: 70 72 6f 78 79 20 6e 61 6d 65 20 77 68 65 6e 20  proxy name when 
96d0: 61 76 61 69 6c 61 62 6c 65 0a 20 20 64 6f 5f 74  available.  do_t
96e0: 65 73 74 20 70 72 61 67 6d 61 2d 31 36 2e 35 20  est pragma-16.5 
96f0: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 20 64 62  {.    sqlite3 db
9700: 32 20 74 65 73 74 2e 64 62 0a 20 20 20 20 65 78  2 test.db.    ex
9710: 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52  ecsql {.      PR
9720: 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f  AGMA lock_proxy_
9730: 66 69 6c 65 3d 22 3a 61 75 74 6f 3a 22 3b 0a 20  file=":auto:";. 
9740: 20 20 20 20 20 50 52 41 47 4d 41 20 6c 6f 63 6b       PRAGMA lock
9750: 5f 70 72 6f 78 79 5f 66 69 6c 65 3b 0a 20 20 20  _proxy_file;.   
9760: 20 7d 20 64 62 32 0a 20 20 7d 20 24 6c 70 70 32   } db2.  } $lpp2
9770: 0a 20 20 0a 20 20 23 20 61 75 74 6f 2d 6e 61 6d  .  .  # auto-nam
9780: 69 6e 67 20 61 20 6e 65 77 20 70 72 6f 78 79 20  ing a new proxy 
9790: 73 68 6f 75 6c 64 20 75 73 65 20 61 20 70 72 65  should use a pre
97a0: 64 69 63 74 61 62 6c 65 20 26 20 75 6e 69 71 75  dictable & uniqu
97b0: 65 20 6e 61 6d 65 0a 20 20 64 6f 5f 74 65 73 74  e name.  do_test
97c0: 20 70 72 61 67 6d 61 2d 31 36 2e 36 20 7b 0a 20   pragma-16.6 {. 
97d0: 20 20 20 64 62 32 20 63 6c 6f 73 65 0a 20 20 20     db2 close.   
97e0: 20 73 71 6c 69 74 65 33 20 64 62 32 20 74 65 73   sqlite3 db2 tes
97f0: 74 32 2e 64 62 0a 20 20 20 20 73 65 74 20 6c 6f  t2.db.    set lo
9800: 63 6b 70 61 74 68 20 5b 65 78 65 63 73 71 6c 20  ckpath [execsql 
9810: 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 6c  {.      PRAGMA l
9820: 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 3d 22  ock_proxy_file="
9830: 3a 61 75 74 6f 3a 22 3b 0a 20 20 20 20 20 20 50  :auto:";.      P
9840: 52 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78 79  RAGMA lock_proxy
9850: 5f 66 69 6c 65 3b 0a 20 20 20 20 7d 20 64 62 32  _file;.    } db2
9860: 5d 0a 20 20 20 20 73 74 72 69 6e 67 20 6d 61 74  ].    string mat
9870: 63 68 20 22 2a 74 65 73 74 32 2e 64 62 3a 61 75  ch "*test2.db:au
9880: 74 6f 3a 22 20 24 6c 6f 63 6b 70 61 74 68 0a 20  to:" $lockpath. 
9890: 20 7d 20 7b 31 7d 0a 20 20 0a 20 20 73 65 74 20   } {1}.  .  set 
98a0: 73 71 6c 69 74 65 5f 68 6f 73 74 69 64 5f 6e 75  sqlite_hostid_nu
98b0: 6d 20 32 0a 20 20 23 20 64 62 20 61 63 63 65 73  m 2.  # db acces
98c0: 73 20 73 68 6f 75 6c 64 20 62 65 20 6c 69 6d 69  s should be limi
98d0: 74 65 64 20 74 6f 20 6f 6e 65 20 68 6f 73 74 20  ted to one host 
98e0: 61 74 20 61 20 74 69 6d 65 20 28 73 69 6d 75 6c  at a time (simul
98f0: 61 74 65 20 32 6e 64 20 68 6f 73 74 20 69 64 29  ate 2nd host id)
9900: 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .  do_test pragm
9910: 61 2d 31 36 2e 37 20 7b 0a 20 20 20 20 6c 69 73  a-16.7 {.    lis
9920: 74 20 5b 63 61 74 63 68 20 7b 0a 20 20 20 20 20  t [catch {.     
9930: 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74   sqlite3 db test
9940: 32 2e 64 62 0a 20 20 20 20 20 20 65 78 65 63 73  2.db.      execs
9950: 71 6c 20 7b 20 0a 20 20 20 20 20 20 20 20 50 52  ql { .        PR
9960: 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f  AGMA lock_proxy_
9970: 66 69 6c 65 3d 22 3a 61 75 74 6f 3a 22 3b 0a 20  file=":auto:";. 
9980: 20 20 20 20 20 20 20 73 65 6c 65 63 74 20 2a 20         select * 
9990: 66 72 6f 6d 20 73 71 6c 69 74 65 5f 6d 61 73 74  from sqlite_mast
99a0: 65 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  er;.      }.    
99b0: 7d 20 6d 73 67 5d 20 24 6d 73 67 0a 20 20 7d 20  } msg] $msg.  } 
99c0: 7b 31 20 7b 64 61 74 61 62 61 73 65 20 69 73 20  {1 {database is 
99d0: 6c 6f 63 6b 65 64 7d 7d 0a 20 20 64 62 20 63 6c  locked}}.  db cl
99e0: 6f 73 65 0a 20 20 0a 20 20 23 20 64 65 66 61 75  ose.  .  # defau
99f0: 6c 74 20 74 6f 20 75 73 69 6e 67 20 70 72 6f 78  lt to using prox
9a00: 79 20 6c 6f 63 6b 69 6e 67 20 28 73 69 6d 75 6c  y locking (simul
9a10: 61 74 65 20 6e 65 74 77 6f 72 6b 20 66 69 6c 65  ate network file
9a20: 20 73 79 73 74 65 6d 20 64 65 74 65 63 74 69 6f   system detectio
9a30: 6e 29 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61  n).  do_test pra
9a40: 67 6d 61 2d 31 36 2e 38 20 7b 0a 20 20 20 20 6c  gma-16.8 {.    l
9a50: 69 73 74 20 5b 63 61 74 63 68 20 7b 0a 20 20 20  ist [catch {.   
9a60: 20 20 20 73 71 6c 69 74 65 33 20 64 62 20 74 65     sqlite3 db te
9a70: 73 74 32 2e 64 62 0a 20 20 20 20 20 20 65 78 65  st2.db.      exe
9a80: 63 73 71 6c 20 7b 20 73 65 6c 65 63 74 20 2a 20  csql { select * 
9a90: 66 72 6f 6d 20 73 71 6c 69 74 65 5f 6d 61 73 74  from sqlite_mast
9aa0: 65 72 20 7d 20 0a 20 20 20 20 7d 20 6d 73 67 5d  er } .    } msg]
9ab0: 20 24 6d 73 67 0a 20 20 7d 20 7b 31 20 7b 64 61   $msg.  } {1 {da
9ac0: 74 61 62 61 73 65 20 69 73 20 6c 6f 63 6b 65 64  tabase is locked
9ad0: 7d 7d 0a 0a 20 20 64 62 32 20 63 6c 6f 73 65 0a  }}..  db2 close.
9ae0: 20 20 73 65 74 20 6c 70 70 34 20 5b 65 78 65 63    set lpp4 [exec
9af0: 20 6d 6b 74 65 6d 70 20 2d 74 20 22 70 72 6f 78   mktemp -t "prox
9b00: 79 34 22 5d 0a 0a 20 20 23 20 63 68 65 63 6b 20  y4"]..  # check 
9b10: 74 68 61 74 20 64 62 20 69 73 20 75 6e 6c 6f 63  that db is unloc
9b20: 6b 65 64 20 61 66 74 65 72 20 66 69 72 73 74 20  ked after first 
9b30: 68 6f 73 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  host connection 
9b40: 63 6c 6f 73 65 73 20 0a 20 20 64 6f 5f 74 65 73  closes .  do_tes
9b50: 74 20 70 72 61 67 6d 61 2d 31 36 2e 38 2e 31 20  t pragma-16.8.1 
9b60: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 22 50  {.    execsql "P
9b70: 52 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78 79  RAGMA lock_proxy
9b80: 5f 66 69 6c 65 3d 27 24 6c 70 70 34 27 22 20 0a  _file='$lpp4'" .
9b90: 20 20 20 20 65 78 65 63 73 71 6c 20 22 73 65 6c      execsql "sel
9ba0: 65 63 74 20 2a 20 66 72 6f 6d 20 73 71 6c 69 74  ect * from sqlit
9bb0: 65 5f 6d 61 73 74 65 72 22 0a 20 20 20 20 65 78  e_master".    ex
9bc0: 65 63 73 71 6c 20 22 50 52 41 47 4d 41 20 6c 6f  ecsql "PRAGMA lo
9bd0: 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 22 0a 20  ck_proxy_file". 
9be0: 20 7d 20 24 6c 70 70 34 0a 20 20 0a 20 20 64 6f   } $lpp4.  .  do
9bf0: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 36 2e  _test pragma-16.
9c00: 38 2e 32 20 7b 0a 20 20 20 20 65 78 65 63 73 71  8.2 {.    execsq
9c10: 6c 20 7b 0a 20 20 20 20 20 20 63 72 65 61 74 65  l {.      create
9c20: 20 74 61 62 6c 65 20 69 66 20 6e 6f 74 20 65 78   table if not ex
9c30: 69 73 74 73 20 6d 69 6e 65 28 78 29 3b 0a 20 20  ists mine(x);.  
9c40: 20 20 20 20 69 6e 73 65 72 74 20 69 6e 74 6f 20      insert into 
9c50: 6d 69 6e 65 20 76 61 6c 75 65 73 20 28 31 29 3b  mine values (1);
9c60: 0a 20 20 20 20 7d 20 0a 20 20 7d 20 7b 7d 0a 0a  .    } .  } {}..
9c70: 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 66 69 6c    db close.  fil
9c80: 65 20 64 65 6c 65 74 65 20 2d 66 6f 72 63 65 20  e delete -force 
9c90: 70 72 6f 78 79 74 65 73 74 2e 64 62 0a 20 20 66  proxytest.db.  f
9ca0: 69 6c 65 20 64 65 6c 65 74 65 20 2d 66 6f 72 63  ile delete -forc
9cb0: 65 20 2e 70 72 6f 78 79 74 65 73 74 2e 64 62 2d  e .proxytest.db-
9cc0: 63 6f 6e 63 68 0a 20 20 64 6f 5f 74 65 73 74 20  conch.  do_test 
9cd0: 70 72 61 67 6d 61 2d 31 36 2e 39 20 7b 0a 20 20  pragma-16.9 {.  
9ce0: 20 20 73 71 6c 69 74 65 33 20 64 62 20 70 72 6f    sqlite3 db pro
9cf0: 78 79 74 65 73 74 2e 64 62 0a 20 20 20 20 73 65  xytest.db.    se
9d00: 74 20 6c 6f 63 6b 70 61 74 68 32 20 5b 65 78 65  t lockpath2 [exe
9d10: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41  csql {.      PRA
9d20: 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66  GMA lock_proxy_f
9d30: 69 6c 65 3d 22 3a 61 75 74 6f 3a 22 3b 0a 20 20  ile=":auto:";.  
9d40: 20 20 20 20 50 52 41 47 4d 41 20 6c 6f 63 6b 5f      PRAGMA lock_
9d50: 70 72 6f 78 79 5f 66 69 6c 65 3b 0a 20 20 20 20  proxy_file;.    
9d60: 7d 20 64 62 5d 0a 20 20 20 20 73 74 72 69 6e 67  } db].    string
9d70: 20 6d 61 74 63 68 20 22 2a 70 72 6f 78 79 74 65   match "*proxyte
9d80: 73 74 2e 64 62 3a 61 75 74 6f 3a 22 20 24 6c 6f  st.db:auto:" $lo
9d90: 63 6b 70 61 74 68 32 0a 20 20 7d 20 7b 31 7d 0a  ckpath2.  } {1}.
9da0: 0a 20 20 23 20 65 6e 73 75 72 65 20 63 72 65 61  .  # ensure crea
9db0: 74 69 6e 67 20 64 69 72 65 63 74 6f 72 69 65 73  ting directories
9dc0: 20 66 6f 72 20 61 20 6c 6f 63 6b 20 70 72 6f 78   for a lock prox
9dd0: 79 20 66 69 6c 65 20 77 6f 72 6b 73 0a 20 20 73  y file works.  s
9de0: 65 74 20 6c 70 70 35 64 20 5b 65 78 65 63 20 6d  et lpp5d [exec m
9df0: 6b 74 65 6d 70 20 2d 64 20 2d 74 20 22 70 72 6f  ktemp -d -t "pro
9e00: 78 79 35 22 5d 0a 20 20 73 65 74 20 6c 70 70 35  xy5"].  set lpp5
9e10: 20 24 6c 70 70 35 64 2f 73 75 62 2f 64 69 72 2f   $lpp5d/sub/dir/
9e20: 6c 6f 63 6b 0a 20 20 64 62 20 63 6c 6f 73 65 0a  lock.  db close.
9e30: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
9e40: 2d 31 36 2e 31 30 2e 31 20 7b 0a 20 20 20 20 73  -16.10.1 {.    s
9e50: 71 6c 69 74 65 33 20 64 62 20 70 72 6f 78 79 74  qlite3 db proxyt
9e60: 65 73 74 2e 64 62 0a 20 20 20 20 65 78 65 63 73  est.db.    execs
9e70: 71 6c 20 22 50 52 41 47 4d 41 20 6c 6f 63 6b 5f  ql "PRAGMA lock_
9e80: 70 72 6f 78 79 5f 66 69 6c 65 3d 27 24 6c 70 70  proxy_file='$lpp
9e90: 35 27 22 20 0a 20 20 20 20 73 65 74 20 6c 6f 63  5'" .    set loc
9ea0: 6b 70 61 74 68 32 20 5b 65 78 65 63 73 71 6c 20  kpath2 [execsql 
9eb0: 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 6c  {.      PRAGMA l
9ec0: 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 3b 0a  ock_proxy_file;.
9ed0: 20 20 20 20 7d 20 64 62 5d 0a 20 20 20 20 73 74      } db].    st
9ee0: 72 69 6e 67 20 6d 61 74 63 68 20 22 2a 73 75 62  ring match "*sub
9ef0: 2f 64 69 72 2f 6c 6f 63 6b 22 20 24 6c 6f 63 6b  /dir/lock" $lock
9f00: 70 61 74 68 32 0a 20 20 7d 20 7b 31 7d 0a 0a 20  path2.  } {1}.. 
9f10: 20 23 20 65 6e 73 75 72 65 20 74 68 61 74 20 61   # ensure that a
9f20: 66 74 65 72 20 64 65 6c 65 74 69 6e 67 20 74 68  fter deleting th
9f30: 65 20 70 61 74 68 2c 20 73 65 74 74 69 6e 67 20  e path, setting 
9f40: 22 3a 61 75 74 6f 3a 22 20 77 6f 72 6b 73 20 63  ":auto:" works c
9f50: 6f 72 72 65 63 74 6c 79 0a 20 20 64 62 20 63 6c  orrectly.  db cl
9f60: 6f 73 65 0a 20 20 66 69 6c 65 20 64 65 6c 65 74  ose.  file delet
9f70: 65 20 2d 66 6f 72 63 65 20 24 6c 70 70 35 64 0a  e -force $lpp5d.
9f80: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
9f90: 2d 31 36 2e 31 30 2e 32 20 7b 0a 20 20 20 20 73  -16.10.2 {.    s
9fa0: 71 6c 69 74 65 33 20 64 62 20 70 72 6f 78 79 74  qlite3 db proxyt
9fb0: 65 73 74 2e 64 62 0a 20 20 20 20 73 65 74 20 6c  est.db.    set l
9fc0: 6f 63 6b 70 61 74 68 33 20 5b 65 78 65 63 73 71  ockpath3 [execsq
9fd0: 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41  l {.      PRAGMA
9fe0: 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65   lock_proxy_file
9ff0: 3d 22 3a 61 75 74 6f 3a 22 3b 0a 20 20 20 20 20  =":auto:";.     
a000: 20 63 72 65 61 74 65 20 74 61 62 6c 65 20 69 66   create table if
a010: 20 6e 6f 74 20 65 78 69 73 74 73 20 70 74 28 79   not exists pt(y
a020: 29 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20  );.      PRAGMA 
a030: 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 3b  lock_proxy_file;
a040: 0a 20 20 20 20 7d 20 64 62 5d 0a 20 20 20 20 73  .    } db].    s
a050: 74 72 69 6e 67 20 6d 61 74 63 68 20 22 2a 73 75  tring match "*su
a060: 62 2f 64 69 72 2f 6c 6f 63 6b 22 20 24 6c 6f 63  b/dir/lock" $loc
a070: 6b 70 61 74 68 33 0a 20 20 7d 20 7b 31 7d 0a 0a  kpath3.  } {1}..
a080: 20 20 23 20 65 6e 73 75 72 65 20 74 68 61 74 20    # ensure that 
a090: 69 66 20 74 68 65 20 70 61 74 68 20 63 61 6e 20  if the path can 
a0a0: 6e 6f 74 20 62 65 20 63 72 65 61 74 65 64 20 28  not be created (
a0b0: 66 69 6c 65 20 69 6e 73 74 65 61 64 20 6f 66 20  file instead of 
a0c0: 64 69 72 29 0a 20 20 23 20 73 65 74 74 69 6e 67  dir).  # setting
a0d0: 20 3a 61 75 74 6f 3a 20 64 65 61 6c 73 20 77 69   :auto: deals wi
a0e0: 74 68 20 69 74 20 62 79 20 63 72 65 61 74 69 6e  th it by creatin
a0f0: 67 20 61 20 6e 65 77 20 61 75 74 6f 6e 61 6d 65  g a new autoname
a100: 64 20 6c 6f 63 6b 20 66 69 6c 65 0a 20 20 64 62  d lock file.  db
a110: 20 63 6c 6f 73 65 0a 20 20 66 69 6c 65 20 64 65   close.  file de
a120: 6c 65 74 65 20 2d 66 6f 72 63 65 20 24 6c 70 70  lete -force $lpp
a130: 35 64 0a 20 20 63 6c 6f 73 65 20 5b 6f 70 65 6e  5d.  close [open
a140: 20 22 24 6c 70 70 35 64 22 20 61 5d 0a 20 20 64   "$lpp5d" a].  d
a150: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 36  o_test pragma-16
a160: 2e 31 30 2e 33 20 7b 0a 20 20 20 20 73 71 6c 69  .10.3 {.    sqli
a170: 74 65 33 20 64 62 20 70 72 6f 78 79 74 65 73 74  te3 db proxytest
a180: 2e 64 62 0a 20 20 20 20 73 65 74 20 6c 6f 63 6b  .db.    set lock
a190: 70 61 74 68 32 20 5b 65 78 65 63 73 71 6c 20 7b  path2 [execsql {
a1a0: 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 6c 6f  .      PRAGMA lo
a1b0: 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 3d 22 3a  ck_proxy_file=":
a1c0: 61 75 74 6f 3a 22 3b 0a 20 20 20 20 20 20 63 72  auto:";.      cr
a1d0: 65 61 74 65 20 74 61 62 6c 65 20 69 66 20 6e 6f  eate table if no
a1e0: 74 20 65 78 69 73 74 73 20 7a 7a 28 79 29 3b 0a  t exists zz(y);.
a1f0: 20 20 20 20 20 20 50 52 41 47 4d 41 20 6c 6f 63        PRAGMA loc
a200: 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 3b 0a 20 20  k_proxy_file;.  
a210: 20 20 7d 20 64 62 5d 0a 20 20 20 20 73 74 72 69    } db].    stri
a220: 6e 67 20 6d 61 74 63 68 20 22 2a 70 72 6f 78 79  ng match "*proxy
a230: 74 65 73 74 2e 64 62 3a 61 75 74 6f 3a 22 20 24  test.db:auto:" $
a240: 6c 6f 63 6b 70 61 74 68 32 0a 20 20 7d 20 7b 31  lockpath2.  } {1
a250: 7d 0a 0a 20 20 23 20 6d 61 6b 65 20 73 75 72 65  }..  # make sure
a260: 20 77 65 20 63 61 6e 20 64 65 61 6c 20 77 69 74   we can deal wit
a270: 68 20 75 67 6c 79 20 66 69 6c 65 20 70 61 74 68  h ugly file path
a280: 73 20 63 6f 72 72 65 63 74 6c 79 0a 20 20 64 62  s correctly.  db
a290: 20 63 6c 6f 73 65 0a 20 20 66 69 6c 65 20 64 65   close.  file de
a2a0: 6c 65 74 65 20 2d 66 6f 72 63 65 20 24 6c 70 70  lete -force $lpp
a2b0: 35 64 0a 20 20 73 65 74 20 6c 70 70 36 20 5b 65  5d.  set lpp6 [e
a2c0: 78 65 63 20 6d 6b 74 65 6d 70 20 2d 64 20 2d 74  xec mktemp -d -t
a2d0: 20 22 70 72 6f 78 79 36 22 5d 2f 2e 2f 2e 2f 2e   "proxy6"]/././.
a2e0: 2f 2f 2f 2f 2f 2e 2f 70 72 6f 78 79 74 65 73 74  /////./proxytest
a2f0: 2f 2e 2e 2f 70 72 6f 78 79 74 65 73 74 2f 73 75  /../proxytest/su
a300: 62 2f 64 69 72 2f 6c 6f 63 6b 0a 20 20 64 6f 5f  b/dir/lock.  do_
a310: 74 65 73 74 20 70 72 61 67 6d 61 2d 31 36 2e 31  test pragma-16.1
a320: 30 2e 34 20 7b 0a 20 20 20 20 73 71 6c 69 74 65  0.4 {.    sqlite
a330: 33 20 64 62 20 70 72 6f 78 79 74 65 73 74 2e 64  3 db proxytest.d
a340: 62 0a 20 20 20 20 65 78 65 63 73 71 6c 20 22 50  b.    execsql "P
a350: 52 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78 79  RAGMA lock_proxy
a360: 5f 66 69 6c 65 3d 27 24 6c 70 70 36 27 22 20 0a  _file='$lpp6'" .
a370: 20 20 20 20 73 65 74 20 6c 6f 63 6b 70 61 74 68      set lockpath
a380: 34 20 5b 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  4 [execsql {.   
a390: 20 20 20 63 72 65 61 74 65 20 74 61 62 6c 65 20     create table 
a3a0: 69 66 20 6e 6f 74 20 65 78 69 73 74 73 20 61 61  if not exists aa
a3b0: 28 62 62 29 3b 0a 20 20 20 20 20 20 50 52 41 47  (bb);.      PRAG
a3c0: 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69  MA lock_proxy_fi
a3d0: 6c 65 3b 0a 20 20 20 20 7d 20 64 62 5d 0a 20 20  le;.    } db].  
a3e0: 20 20 73 74 72 69 6e 67 20 6d 61 74 63 68 20 22    string match "
a3f0: 2a 70 72 6f 78 79 74 65 73 74 2f 73 75 62 2f 64  *proxytest/sub/d
a400: 69 72 2f 6c 6f 63 6b 22 20 24 6c 6f 63 6b 70 61  ir/lock" $lockpa
a410: 74 68 34 0a 20 20 7d 20 7b 31 7d 0a 0a 20 20 23  th4.  } {1}..  #
a420: 20 65 6e 73 75 72 65 20 74 68 61 74 20 69 66 20   ensure that if 
a430: 74 68 65 20 70 61 74 68 20 63 61 6e 20 6e 6f 74  the path can not
a440: 20 62 65 20 63 72 65 61 74 65 64 20 28 70 65 72   be created (per
a450: 6d 29 2c 20 73 65 74 74 69 6e 67 20 3a 61 75 74  m), setting :aut
a460: 6f 3a 20 64 65 61 6c 73 0a 20 20 64 62 20 63 6c  o: deals.  db cl
a470: 6f 73 65 0a 20 20 66 69 6c 65 20 64 65 6c 65 74  ose.  file delet
a480: 65 20 2d 66 6f 72 63 65 20 24 6c 70 70 35 64 0a  e -force $lpp5d.
a490: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
a4a0: 2d 31 36 2e 31 30 2e 35 20 7b 0a 20 20 20 20 73  -16.10.5 {.    s
a4b0: 71 6c 69 74 65 33 20 64 62 20 70 72 6f 78 79 74  qlite3 db proxyt
a4c0: 65 73 74 2e 64 62 0a 20 20 20 20 65 78 65 63 73  est.db.    execs
a4d0: 71 6c 20 22 50 52 41 47 4d 41 20 6c 6f 63 6b 5f  ql "PRAGMA lock_
a4e0: 70 72 6f 78 79 5f 66 69 6c 65 3d 27 24 6c 70 70  proxy_file='$lpp
a4f0: 35 27 22 20 0a 20 20 20 20 65 78 65 63 73 71 6c  5'" .    execsql
a500: 20 7b 0a 20 20 20 20 20 20 63 72 65 61 74 65 20   {.      create 
a510: 74 61 62 6c 65 20 69 66 20 6e 6f 74 20 65 78 69  table if not exi
a520: 73 74 73 20 62 62 28 62 62 29 3b 0a 20 20 20 20  sts bb(bb);.    
a530: 7d 0a 20 20 20 20 64 62 20 63 6c 6f 73 65 0a 20  }.    db close. 
a540: 20 20 20 66 69 6c 65 20 64 65 6c 65 74 65 20 2d     file delete -
a550: 66 6f 72 63 65 20 24 6c 70 70 35 64 0a 20 20 20  force $lpp5d.   
a560: 20 66 69 6c 65 20 6d 6b 64 69 72 20 24 6c 70 70   file mkdir $lpp
a570: 35 64 0a 20 20 20 20 66 69 6c 65 20 61 74 74 72  5d.    file attr
a580: 69 62 75 74 65 73 20 24 6c 70 70 35 64 20 2d 70  ibutes $lpp5d -p
a590: 65 72 6d 69 73 73 69 6f 6e 20 30 30 30 30 0a 20  ermission 0000. 
a5a0: 20 20 20 73 71 6c 69 74 65 33 20 64 62 20 70 72     sqlite3 db pr
a5b0: 6f 78 79 74 65 73 74 2e 64 62 0a 20 20 20 20 73  oxytest.db.    s
a5c0: 65 74 20 6c 6f 63 6b 70 61 74 68 35 20 5b 65 78  et lockpath5 [ex
a5d0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52  ecsql {.      PR
a5e0: 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f  AGMA lock_proxy_
a5f0: 66 69 6c 65 3d 22 3a 61 75 74 6f 3a 22 3b 0a 20  file=":auto:";. 
a600: 20 20 20 20 20 63 72 65 61 74 65 20 74 61 62 6c       create tabl
a610: 65 20 69 66 20 6e 6f 74 20 65 78 69 73 74 73 20  e if not exists 
a620: 63 63 28 62 62 29 3b 0a 20 20 20 20 20 20 50 52  cc(bb);.      PR
a630: 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f  AGMA lock_proxy_
a640: 66 69 6c 65 3b 0a 20 20 20 20 7d 20 64 62 5d 0a  file;.    } db].
a650: 20 20 20 20 73 74 72 69 6e 67 20 6d 61 74 63 68      string match
a660: 20 22 2a 70 72 6f 78 79 74 65 73 74 2e 64 62 3a   "*proxytest.db:
a670: 61 75 74 6f 3a 22 20 24 6c 6f 63 6b 70 61 74 68  auto:" $lockpath
a680: 35 0a 20 20 7d 20 7b 31 7d 0a 0a 20 20 23 20 65  5.  } {1}..  # e
a690: 6e 73 75 72 65 20 74 68 61 74 20 69 66 20 74 68  nsure that if th
a6a0: 65 20 70 61 74 68 20 63 61 6e 20 6e 6f 74 20 62  e path can not b
a6b0: 65 20 63 72 65 61 74 65 64 2c 20 6c 6f 63 6b 69  e created, locki
a6c0: 6e 67 20 66 61 69 6c 73 0a 20 20 64 62 20 63 6c  ng fails.  db cl
a6d0: 6f 73 65 0a 20 20 64 6f 5f 74 65 73 74 20 70 72  ose.  do_test pr
a6e0: 61 67 6d 61 2d 31 36 2e 31 30 2e 36 20 7b 0a 20  agma-16.10.6 {. 
a6f0: 20 20 20 73 71 6c 69 74 65 33 20 64 62 20 70 72     sqlite3 db pr
a700: 6f 78 79 74 65 73 74 2e 64 62 0a 20 20 20 20 65  oxytest.db.    e
a710: 78 65 63 73 71 6c 20 22 50 52 41 47 4d 41 20 6c  xecsql "PRAGMA l
a720: 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 3d 27  ock_proxy_file='
a730: 24 6c 70 70 35 27 22 20 0a 20 20 20 20 63 61 74  $lpp5'" .    cat
a740: 63 68 73 71 6c 20 7b 0a 20 20 20 20 20 20 63 72  chsql {.      cr
a750: 65 61 74 65 20 74 61 62 6c 65 20 69 66 20 6e 6f  eate table if no
a760: 74 20 65 78 69 73 74 73 20 66 61 69 6c 79 28 79  t exists faily(y
a770: 29 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20  );.      PRAGMA 
a780: 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 3b  lock_proxy_file;
a790: 0a 20 20 20 20 7d 20 64 62 0a 20 20 7d 20 7b 31  .    } db.  } {1
a7a0: 20 7b 64 61 74 61 62 61 73 65 20 69 73 20 6c 6f   {database is lo
a7b0: 63 6b 65 64 7d 7d 0a 20 20 64 62 20 63 6c 6f 73  cked}}.  db clos
a7c0: 65 0a 0a 20 20 66 69 6c 65 20 61 74 74 72 69 62  e..  file attrib
a7d0: 75 74 65 73 20 24 6c 70 70 35 64 20 2d 70 65 72  utes $lpp5d -per
a7e0: 6d 69 73 73 69 6f 6e 20 30 37 37 37 0a 20 20 66  mission 0777.  f
a7f0: 69 6c 65 20 64 65 6c 65 74 65 20 2d 66 6f 72 63  ile delete -forc
a800: 65 20 24 6c 70 70 35 64 0a 0a 20 20 73 65 74 20  e $lpp5d..  set 
a810: 65 6e 76 28 53 51 4c 49 54 45 5f 46 4f 52 43 45  env(SQLITE_FORCE
a820: 5f 50 52 4f 58 59 5f 4c 4f 43 4b 49 4e 47 29 20  _PROXY_LOCKING) 
a830: 24 75 73 69 6e 67 5f 70 72 6f 78 79 0a 20 20 73  $using_proxy.  s
a840: 65 74 20 73 71 6c 69 74 65 5f 68 6f 73 74 69 64  et sqlite_hostid
a850: 5f 6e 75 6d 20 30 0a 7d 0a 0a 23 20 50 61 72 73  _num 0.}..# Pars
a860: 69 6e 67 20 6f 66 20 61 75 74 6f 5f 76 61 63 75  ing of auto_vacu
a870: 75 6d 20 73 65 74 74 69 6e 67 73 2e 0a 23 0a 66  um settings..#.f
a880: 6f 72 65 61 63 68 20 7b 61 75 74 6f 76 61 63 5f  oreach {autovac_
a890: 73 65 74 74 69 6e 67 20 76 61 6c 7d 20 7b 0a 20  setting val} {. 
a8a0: 20 30 20 30 0a 20 20 31 20 31 0a 20 20 32 20 32   0 0.  1 1.  2 2
a8b0: 0a 20 20 33 20 30 0a 20 20 2d 31 20 30 0a 20 20  .  3 0.  -1 0.  
a8c0: 6e 6f 6e 65 20 30 0a 20 20 4e 4f 4e 45 20 30 0a  none 0.  NONE 0.
a8d0: 20 20 4e 6f 4e 65 20 30 0a 20 20 66 75 6c 6c 20    NoNe 0.  full 
a8e0: 31 0a 20 20 46 55 4c 4c 20 31 0a 20 20 69 6e 63  1.  FULL 1.  inc
a8f0: 72 65 6d 65 6e 74 61 6c 20 32 0a 20 20 49 4e 43  remental 2.  INC
a900: 52 45 4d 45 4e 54 41 4c 20 32 0a 20 20 2d 31 32  REMENTAL 2.  -12
a910: 33 34 20 30 0a 20 20 31 32 33 34 20 30 0a 7d 20  34 0.  1234 0.} 
a920: 7b 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67  {.  do_test prag
a930: 6d 61 2d 31 37 2e 31 2e 24 61 75 74 6f 76 61 63  ma-17.1.$autovac
a940: 5f 73 65 74 74 69 6e 67 20 7b 0a 20 20 20 20 63  _setting {.    c
a950: 61 74 63 68 20 7b 64 62 20 63 6c 6f 73 65 7d 0a  atch {db close}.
a960: 20 20 20 20 73 71 6c 69 74 65 33 20 64 62 20 3a      sqlite3 db :
a970: 6d 65 6d 6f 72 79 3a 0a 20 20 20 20 65 78 65 63  memory:.    exec
a980: 73 71 6c 20 22 0a 20 20 20 20 20 20 50 52 41 47  sql ".      PRAG
a990: 4d 41 20 61 75 74 6f 5f 76 61 63 75 75 6d 3d 24  MA auto_vacuum=$
a9a0: 3a 3a 61 75 74 6f 76 61 63 5f 73 65 74 74 69 6e  ::autovac_settin
a9b0: 67 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20  g;.      PRAGMA 
a9c0: 61 75 74 6f 5f 76 61 63 75 75 6d 3b 0a 20 20 20  auto_vacuum;.   
a9d0: 20 22 0a 20 20 7d 20 24 76 61 6c 0a 7d 0a 0a 23   ".  } $val.}..#
a9e0: 20 50 61 72 73 69 6e 67 20 6f 66 20 74 65 6d 70   Parsing of temp
a9f0: 5f 73 74 6f 72 65 20 73 65 74 74 69 6e 67 73 2e  _store settings.
aa00: 0a 23 0a 66 6f 72 65 61 63 68 20 7b 74 65 6d 70  .#.foreach {temp
aa10: 5f 73 65 74 74 69 6e 67 20 76 61 6c 7d 20 7b 0a  _setting val} {.
aa20: 20 20 30 20 30 0a 20 20 31 20 31 0a 20 20 32 20    0 0.  1 1.  2 
aa30: 32 0a 20 20 33 20 30 0a 20 20 2d 31 20 30 0a 20  2.  3 0.  -1 0. 
aa40: 20 66 69 6c 65 20 31 0a 20 20 46 49 4c 45 20 31   file 1.  FILE 1
aa50: 0a 20 20 66 49 6c 45 20 31 0a 20 20 6d 65 6d 6f  .  fIlE 1.  memo
aa60: 72 79 20 32 0a 20 20 4d 45 4d 4f 52 59 20 32 0a  ry 2.  MEMORY 2.
aa70: 20 20 4d 65 4d 6f 52 79 20 32 0a 7d 20 7b 0a 20    MeMoRy 2.} {. 
aa80: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
aa90: 31 38 2e 31 2e 24 74 65 6d 70 5f 73 65 74 74 69  18.1.$temp_setti
aaa0: 6e 67 20 7b 0a 20 20 20 20 63 61 74 63 68 20 7b  ng {.    catch {
aab0: 64 62 20 63 6c 6f 73 65 7d 0a 20 20 20 20 73 71  db close}.    sq
aac0: 6c 69 74 65 33 20 64 62 20 3a 6d 65 6d 6f 72 79  lite3 db :memory
aad0: 3a 0a 20 20 20 20 65 78 65 63 73 71 6c 20 22 0a  :.    execsql ".
aae0: 20 20 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d        PRAGMA tem
aaf0: 70 5f 73 74 6f 72 65 3d 24 3a 3a 74 65 6d 70 5f  p_store=$::temp_
ab00: 73 65 74 74 69 6e 67 3b 0a 20 20 20 20 20 20 50  setting;.      P
ab10: 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65  RAGMA temp_store
ab20: 3d 24 3a 3a 74 65 6d 70 5f 73 65 74 74 69 6e 67  =$::temp_setting
ab30: 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 74  ;.      PRAGMA t
ab40: 65 6d 70 5f 73 74 6f 72 65 3b 0a 20 20 20 20 22  emp_store;.    "
ab50: 0a 20 20 7d 20 24 76 61 6c 0a 7d 0a 0a 23 20 54  .  } $val.}..# T
ab60: 68 65 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f  he SQLITE_FCNTL_
ab70: 50 52 41 47 4d 41 20 6c 6f 67 69 63 2c 20 77 69  PRAGMA logic, wi
ab80: 74 68 20 65 72 72 6f 72 20 68 61 6e 64 6c 69 6e  th error handlin
ab90: 67 2e 0a 23 0a 64 62 20 63 6c 6f 73 65 0a 74 65  g..#.db close.te
aba0: 73 74 76 66 73 20 74 76 66 73 0a 73 71 6c 69 74  stvfs tvfs.sqlit
abb0: 65 33 20 64 62 20 74 65 73 74 2e 64 62 20 2d 76  e3 db test.db -v
abc0: 66 73 20 74 76 66 73 0a 64 6f 5f 74 65 73 74 20  fs tvfs.do_test 
abd0: 70 72 61 67 6d 61 2d 31 39 2e 31 20 7b 0a 20 20  pragma-19.1 {.  
abe0: 63 61 74 63 68 73 71 6c 20 7b 50 52 41 47 4d 41  catchsql {PRAGMA
abf0: 20 65 72 72 6f 72 7d 0a 7d 20 7b 31 20 7b 53 51   error}.} {1 {SQ
ac00: 4c 20 6c 6f 67 69 63 20 65 72 72 6f 72 7d 7d 0a  L logic error}}.
ac10: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31  do_test pragma-1
ac20: 39 2e 32 20 7b 0a 20 20 63 61 74 63 68 73 71 6c  9.2 {.  catchsql
ac30: 20 7b 50 52 41 47 4d 41 20 65 72 72 6f 72 3d 27   {PRAGMA error='
ac40: 54 68 69 73 20 69 73 20 74 68 65 20 65 72 72 6f  This is the erro
ac50: 72 20 6d 65 73 73 61 67 65 27 7d 0a 7d 20 7b 31  r message'}.} {1
ac60: 20 7b 54 68 69 73 20 69 73 20 74 68 65 20 65 72   {This is the er
ac70: 72 6f 72 20 6d 65 73 73 61 67 65 7d 7d 0a 64 6f  ror message}}.do
ac80: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 39 2e  _test pragma-19.
ac90: 33 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b  3 {.  catchsql {
aca0: 50 52 41 47 4d 41 20 65 72 72 6f 72 3d 27 37 20  PRAGMA error='7 
acb0: 54 68 69 73 20 69 73 20 74 68 65 20 65 72 72 6f  This is the erro
acc0: 72 20 6d 65 73 73 61 67 65 27 7d 0a 7d 20 7b 31  r message'}.} {1
acd0: 20 7b 54 68 69 73 20 69 73 20 74 68 65 20 65 72   {This is the er
ace0: 72 6f 72 20 6d 65 73 73 61 67 65 7d 7d 0a 64 6f  ror message}}.do
acf0: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 39 2e  _test pragma-19.
ad00: 34 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b  4 {.  catchsql {
ad10: 50 52 41 47 4d 41 20 65 72 72 6f 72 3d 37 7d 0a  PRAGMA error=7}.
ad20: 7d 20 7b 31 20 7b 6f 75 74 20 6f 66 20 6d 65 6d  } {1 {out of mem
ad30: 6f 72 79 7d 7d 0a 64 6f 5f 74 65 73 74 20 70 72  ory}}.do_test pr
ad40: 61 67 6d 61 2d 31 39 2e 35 20 7b 0a 20 20 66 69  agma-19.5 {.  fi
ad50: 6c 65 20 74 61 69 6c 20 5b 6c 69 6e 64 65 78 20  le tail [lindex 
ad60: 5b 65 78 65 63 73 71 6c 20 7b 50 52 41 47 4d 41  [execsql {PRAGMA
ad70: 20 66 69 6c 65 6e 61 6d 65 7d 5d 20 30 5d 0a 7d   filename}] 0].}
ad80: 20 7b 74 65 73 74 2e 64 62 7d 0a 0a 69 66 20 7b   {test.db}..if {
ad90: 24 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 70 6c  $tcl_platform(pl
ada0: 61 74 66 6f 72 6d 29 3d 3d 22 77 69 6e 64 6f 77  atform)=="window
adb0: 73 22 7d 20 7b 0a 23 20 54 65 73 74 20 64 61 74  s"} {.# Test dat
adc0: 61 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72  a_store_director
add0: 79 20 70 72 61 67 6d 61 0a 23 0a 64 62 20 63 6c  y pragma.#.db cl
ade0: 6f 73 65 0a 73 71 6c 69 74 65 33 20 64 62 20 74  ose.sqlite3 db t
adf0: 65 73 74 2e 64 62 0a 66 69 6c 65 20 6d 6b 64 69  est.db.file mkdi
ae00: 72 20 64 61 74 61 5f 64 69 72 0a 64 6f 5f 74 65  r data_dir.do_te
ae10: 73 74 20 70 72 61 67 6d 61 2d 32 30 2e 31 20 7b  st pragma-20.1 {
ae20: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 50 52 41  .  catchsql {PRA
ae30: 47 4d 41 20 64 61 74 61 5f 73 74 6f 72 65 5f 64  GMA data_store_d
ae40: 69 72 65 63 74 6f 72 79 7d 0a 7d 20 7b 30 20 7b  irectory}.} {0 {
ae50: 7d 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  }}.do_test pragm
ae60: 61 2d 32 30 2e 32 20 7b 0a 20 20 73 65 74 20 70  a-20.2 {.  set p
ae70: 77 64 20 5b 73 74 72 69 6e 67 20 6d 61 70 20 7b  wd [string map {
ae80: 27 20 27 27 7d 20 5b 66 69 6c 65 20 6e 61 74 69  ' ''} [file nati
ae90: 76 65 6e 61 6d 65 20 5b 67 65 74 5f 70 77 64 5d  vename [get_pwd]
aea0: 5d 5d 0a 20 20 63 61 74 63 68 73 71 6c 20 22 50  ]].  catchsql "P
aeb0: 52 41 47 4d 41 20 64 61 74 61 5f 73 74 6f 72 65  RAGMA data_store
aec0: 5f 64 69 72 65 63 74 6f 72 79 3d 27 24 70 77 64  _directory='$pwd
aed0: 27 3b 22 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f  ';".} {0 {}}.do_
aee0: 74 65 73 74 20 70 72 61 67 6d 61 2d 32 30 2e 33  test pragma-20.3
aef0: 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 50   {.  catchsql {P
af00: 52 41 47 4d 41 20 64 61 74 61 5f 73 74 6f 72 65  RAGMA data_store
af10: 5f 64 69 72 65 63 74 6f 72 79 7d 0a 7d 20 5b 6c  _directory}.} [l
af20: 69 73 74 20 30 20 5b 6c 69 73 74 20 5b 66 69 6c  ist 0 [list [fil
af30: 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 67 65  e nativename [ge
af40: 74 5f 70 77 64 5d 5d 5d 5d 0a 64 6f 5f 74 65 73  t_pwd]]]].do_tes
af50: 74 20 70 72 61 67 6d 61 2d 32 30 2e 34 20 7b 0a  t pragma-20.4 {.
af60: 20 20 73 65 74 20 70 77 64 20 5b 73 74 72 69 6e    set pwd [strin
af70: 67 20 6d 61 70 20 7b 27 20 27 27 7d 20 5b 66 69  g map {' ''} [fi
af80: 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5c 0a  le nativename \.
af90: 20 20 20 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b      [file join [
afa0: 67 65 74 5f 70 77 64 5d 20 64 61 74 61 5f 64 69  get_pwd] data_di
afb0: 72 5d 5d 5d 0a 20 20 63 61 74 63 68 73 71 6c 20  r]]].  catchsql 
afc0: 22 50 52 41 47 4d 41 20 64 61 74 61 5f 73 74 6f  "PRAGMA data_sto
afd0: 72 65 5f 64 69 72 65 63 74 6f 72 79 3d 27 24 70  re_directory='$p
afe0: 77 64 27 3b 22 0a 7d 20 7b 30 20 7b 7d 7d 0a 64  wd';".} {0 {}}.d
aff0: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 32 30  o_test pragma-20
b000: 2e 35 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 64  .5 {.  sqlite3 d
b010: 62 32 20 74 65 73 74 32 2e 64 62 0a 20 20 63 61  b2 test2.db.  ca
b020: 74 63 68 73 71 6c 20 22 50 52 41 47 4d 41 20 64  tchsql "PRAGMA d
b030: 61 74 61 62 61 73 65 5f 6c 69 73 74 3b 22 20 64  atabase_list;" d
b040: 62 32 0a 7d 20 5b 6c 69 73 74 20 30 20 5b 6c 69  b2.} [list 0 [li
b050: 73 74 20 30 20 6d 61 69 6e 20 5b 66 69 6c 65 20  st 0 main [file 
b060: 6e 61 74 69 76 65 6e 61 6d 65 20 5c 0a 20 20 20  nativename \.   
b070: 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74   [file join [get
b080: 5f 70 77 64 5d 20 64 61 74 61 5f 64 69 72 20 74  _pwd] data_dir t
b090: 65 73 74 32 2e 64 62 5d 5d 5d 5d 0a 63 61 74 63  est2.db]]]].catc
b0a0: 68 20 7b 64 62 32 20 63 6c 6f 73 65 7d 0a 64 6f  h {db2 close}.do
b0b0: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 32 30 2e  _test pragma-20.
b0c0: 36 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 64 62  6 {.  sqlite3 db
b0d0: 32 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65  2 [file join [ge
b0e0: 74 5f 70 77 64 5d 20 74 65 73 74 32 2e 64 62 5d  t_pwd] test2.db]
b0f0: 0a 20 20 63 61 74 63 68 73 71 6c 20 22 50 52 41  .  catchsql "PRA
b100: 47 4d 41 20 64 61 74 61 62 61 73 65 5f 6c 69 73  GMA database_lis
b110: 74 3b 22 20 64 62 32 0a 7d 20 5b 6c 69 73 74 20  t;" db2.} [list 
b120: 30 20 5b 6c 69 73 74 20 30 20 6d 61 69 6e 20 5b  0 [list 0 main [
b130: 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20  file nativename 
b140: 5c 0a 20 20 20 20 5b 66 69 6c 65 20 6a 6f 69 6e  \.    [file join
b150: 20 5b 67 65 74 5f 70 77 64 5d 20 74 65 73 74 32   [get_pwd] test2
b160: 2e 64 62 5d 5d 5d 5d 0a 63 61 74 63 68 20 7b 64  .db]]]].catch {d
b170: 62 32 20 63 6c 6f 73 65 7d 0a 64 6f 5f 74 65 73  b2 close}.do_tes
b180: 74 20 70 72 61 67 6d 61 2d 32 30 2e 37 20 7b 0a  t pragma-20.7 {.
b190: 20 20 63 61 74 63 68 73 71 6c 20 22 50 52 41 47    catchsql "PRAG
b1a0: 4d 41 20 64 61 74 61 5f 73 74 6f 72 65 5f 64 69  MA data_store_di
b1b0: 72 65 63 74 6f 72 79 3d 27 27 3b 22 0a 7d 20 7b  rectory='';".} {
b1c0: 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 70 72  0 {}}.do_test pr
b1d0: 61 67 6d 61 2d 32 30 2e 38 20 7b 0a 20 20 63 61  agma-20.8 {.  ca
b1e0: 74 63 68 73 71 6c 20 7b 50 52 41 47 4d 41 20 64  tchsql {PRAGMA d
b1f0: 61 74 61 5f 73 74 6f 72 65 5f 64 69 72 65 63 74  ata_store_direct
b200: 6f 72 79 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 0a 66  ory}.} {0 {}}..f
b210: 6f 72 63 65 64 65 6c 65 74 65 20 64 61 74 61 5f  orcedelete data_
b220: 64 69 72 0a 7d 20 3b 23 20 65 6e 64 69 66 20 77  dir.} ;# endif w
b230: 69 6e 64 6f 77 73 0a 0a 64 61 74 61 62 61 73 65  indows..database
b240: 5f 6d 61 79 5f 62 65 5f 63 6f 72 72 75 70 74 0a  _may_be_corrupt.
b250: 69 66 20 7b 21 5b 6e 6f 6e 7a 65 72 6f 5f 72 65  if {![nonzero_re
b260: 73 65 72 76 65 64 5f 62 79 74 65 73 5d 7d 20 7b  served_bytes]} {
b270: 0a 0a 20 20 64 6f 5f 74 65 73 74 20 32 31 2e 31  ..  do_test 21.1
b280: 20 7b 0a 20 20 20 20 23 20 43 72 65 61 74 65 20   {.    # Create 
b290: 61 20 63 6f 72 72 75 70 74 20 64 61 74 61 62 61  a corrupt databa
b2a0: 73 65 20 69 6e 20 74 65 73 74 65 72 72 2e 64 62  se in testerr.db
b2b0: 2e 20 41 6e 64 20 61 20 6e 6f 6e 2d 63 6f 72 72  . And a non-corr
b2c0: 75 70 74 20 61 74 20 74 65 73 74 2e 64 62 2e 0a  upt at test.db..
b2d0: 20 20 20 20 23 0a 20 20 20 20 64 62 20 63 6c 6f      #.    db clo
b2e0: 73 65 0a 20 20 20 20 66 6f 72 63 65 64 65 6c 65  se.    forcedele
b2f0: 74 65 20 74 65 73 74 2e 64 62 0a 20 20 20 20 73  te test.db.    s
b300: 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64  qlite3 db test.d
b310: 62 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 20  b.    execsql { 
b320: 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 70 61  .      PRAGMA pa
b330: 67 65 5f 73 69 7a 65 20 3d 20 31 30 32 34 3b 0a  ge_size = 1024;.
b340: 20 20 20 20 20 20 50 52 41 47 4d 41 20 61 75 74        PRAGMA aut
b350: 6f 5f 76 61 63 75 75 6d 20 3d 20 30 3b 0a 20 20  o_vacuum = 0;.  
b360: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
b370: 20 74 31 28 61 20 50 52 49 4d 41 52 59 20 4b 45   t1(a PRIMARY KE
b380: 59 2c 20 62 29 3b 0a 20 20 20 20 20 20 49 4e 53  Y, b);.      INS
b390: 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55  ERT INTO t1 VALU
b3a0: 45 53 28 31 2c 20 31 29 3b 0a 20 20 20 20 7d 0a  ES(1, 1);.    }.
b3b0: 20 20 20 20 66 6f 72 20 7b 73 65 74 20 69 20 30      for {set i 0
b3c0: 7d 20 7b 24 69 20 3c 20 31 30 7d 20 7b 69 6e 63  } {$i < 10} {inc
b3d0: 72 20 69 7d 20 7b 0a 20 20 20 20 20 20 65 78 65  r i} {.      exe
b3e0: 63 73 71 6c 20 7b 20 49 4e 53 45 52 54 20 49 4e  csql { INSERT IN
b3f0: 54 4f 20 74 31 20 53 45 4c 45 43 54 20 61 20 2b  TO t1 SELECT a +
b400: 20 28 31 20 3c 3c 20 24 69 29 2c 20 62 20 2b 20   (1 << $i), b + 
b410: 28 31 20 3c 3c 20 24 69 29 20 46 52 4f 4d 20 74  (1 << $i) FROM t
b420: 31 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 64 62  1 }.    }.    db
b430: 20 63 6c 6f 73 65 0a 20 20 20 20 66 6f 72 63 65   close.    force
b440: 63 6f 70 79 20 74 65 73 74 2e 64 62 20 74 65 73  copy test.db tes
b450: 74 65 72 72 2e 64 62 0a 20 20 20 20 68 65 78 69  terr.db.    hexi
b460: 6f 5f 77 72 69 74 65 20 74 65 73 74 65 72 72 2e  o_write testerr.
b470: 64 62 20 31 35 30 30 30 20 5b 73 74 72 69 6e 67  db 15000 [string
b480: 20 72 65 70 65 61 74 20 35 35 20 31 30 30 5d 0a   repeat 55 100].
b490: 20 20 7d 20 7b 31 30 30 7d 0a 20 20 0a 20 20 73    } {100}.  .  s
b4a0: 65 74 20 6d 61 69 6e 65 72 72 20 7b 2a 2a 2a 20  et mainerr {*** 
b4b0: 69 6e 20 64 61 74 61 62 61 73 65 20 6d 61 69 6e  in database main
b4c0: 20 2a 2a 2a 0a 4d 75 6c 74 69 70 6c 65 20 75 73   ***.Multiple us
b4d0: 65 73 20 66 6f 72 20 62 79 74 65 20 36 37 32 20  es for byte 672 
b4e0: 6f 66 20 70 61 67 65 20 31 35 7d 0a 20 20 73 65  of page 15}.  se
b4f0: 74 20 61 75 78 65 72 72 20 7b 2a 2a 2a 20 69 6e  t auxerr {*** in
b500: 20 64 61 74 61 62 61 73 65 20 61 75 78 20 2a 2a   database aux **
b510: 2a 0a 4d 75 6c 74 69 70 6c 65 20 75 73 65 73 20  *.Multiple uses 
b520: 66 6f 72 20 62 79 74 65 20 36 37 32 20 6f 66 20  for byte 672 of 
b530: 70 61 67 65 20 31 35 7d 0a 20 20 0a 20 20 73 65  page 15}.  .  se
b540: 74 20 6d 61 69 6e 65 72 72 20 7b 2f 7b 5c 2a 5c  t mainerr {/{\*\
b550: 2a 5c 2a 20 69 6e 20 64 61 74 61 62 61 73 65 20  *\* in database 
b560: 6d 61 69 6e 20 5c 2a 5c 2a 5c 2a 0a 4d 75 6c 74  main \*\*\*.Mult
b570: 69 70 6c 65 20 75 73 65 73 20 66 6f 72 20 62 79  iple uses for by
b580: 74 65 20 36 37 32 20 6f 66 20 70 61 67 65 20 31  te 672 of page 1
b590: 35 7d 2e 2a 2f 7d 0a 20 20 73 65 74 20 61 75 78  5}.*/}.  set aux
b5a0: 65 72 72 20 7b 2f 7b 5c 2a 5c 2a 5c 2a 20 69 6e  err {/{\*\*\* in
b5b0: 20 64 61 74 61 62 61 73 65 20 61 75 78 20 5c 2a   database aux \*
b5c0: 5c 2a 5c 2a 0a 4d 75 6c 74 69 70 6c 65 20 75 73  \*\*.Multiple us
b5d0: 65 73 20 66 6f 72 20 62 79 74 65 20 36 37 32 20  es for byte 672 
b5e0: 6f 66 20 70 61 67 65 20 31 35 7d 2e 2a 2f 7d 0a  of page 15}.*/}.
b5f0: 20 20 0a 20 20 64 6f 5f 74 65 73 74 20 32 32 2e    .  do_test 22.
b600: 32 20 7b 0a 20 20 20 20 63 61 74 63 68 20 7b 20  2 {.    catch { 
b610: 64 62 20 63 6c 6f 73 65 20 7d 0a 20 20 20 20 73  db close }.    s
b620: 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 65 72  qlite3 db tester
b630: 72 2e 64 62 0a 20 20 20 20 65 78 65 63 73 71 6c  r.db.    execsql
b640: 20 7b 20 50 52 41 47 4d 41 20 69 6e 74 65 67 72   { PRAGMA integr
b650: 69 74 79 5f 63 68 65 63 6b 20 7d 0a 20 20 7d 20  ity_check }.  } 
b660: 24 6d 61 69 6e 65 72 72 0a 20 20 0a 20 20 64 6f  $mainerr.  .  do
b670: 5f 74 65 73 74 20 32 32 2e 33 2e 31 20 7b 0a 20  _test 22.3.1 {. 
b680: 20 20 20 63 61 74 63 68 20 7b 20 64 62 20 63 6c     catch { db cl
b690: 6f 73 65 20 7d 0a 20 20 20 20 73 71 6c 69 74 65  ose }.    sqlite
b6a0: 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20 20  3 db test.db.   
b6b0: 20 65 78 65 63 73 71 6c 20 7b 20 0a 20 20 20 20   execsql { .    
b6c0: 20 20 41 54 54 41 43 48 20 27 74 65 73 74 65 72    ATTACH 'tester
b6d0: 72 2e 64 62 27 20 41 53 20 27 61 75 78 27 3b 0a  r.db' AS 'aux';.
b6e0: 20 20 20 20 20 20 50 52 41 47 4d 41 20 69 6e 74        PRAGMA int
b6f0: 65 67 72 69 74 79 5f 63 68 65 63 6b 3b 0a 20 20  egrity_check;.  
b700: 20 20 7d 0a 20 20 7d 20 24 61 75 78 65 72 72 0a    }.  } $auxerr.
b710: 20 20 64 6f 5f 74 65 73 74 20 32 32 2e 33 2e 32    do_test 22.3.2
b720: 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b   {.    execsql {
b730: 20 50 52 41 47 4d 41 20 6d 61 69 6e 2e 69 6e 74   PRAGMA main.int
b740: 65 67 72 69 74 79 5f 63 68 65 63 6b 3b 20 7d 0a  egrity_check; }.
b750: 20 20 7d 20 7b 6f 6b 7d 0a 20 20 64 6f 5f 74 65    } {ok}.  do_te
b760: 73 74 20 32 32 2e 33 2e 33 20 7b 0a 20 20 20 20  st 22.3.3 {.    
b770: 65 78 65 63 73 71 6c 20 7b 20 50 52 41 47 4d 41  execsql { PRAGMA
b780: 20 61 75 78 2e 69 6e 74 65 67 72 69 74 79 5f 63   aux.integrity_c
b790: 68 65 63 6b 3b 20 7d 0a 20 20 7d 20 24 61 75 78  heck; }.  } $aux
b7a0: 65 72 72 0a 20 20 0a 20 20 64 6f 5f 74 65 73 74  err.  .  do_test
b7b0: 20 32 32 2e 34 2e 31 20 7b 0a 20 20 20 20 63 61   22.4.1 {.    ca
b7c0: 74 63 68 20 7b 20 64 62 20 63 6c 6f 73 65 20 7d  tch { db close }
b7d0: 0a 20 20 20 20 73 71 6c 69 74 65 33 20 64 62 20  .    sqlite3 db 
b7e0: 74 65 73 74 65 72 72 2e 64 62 0a 20 20 20 20 65  testerr.db.    e
b7f0: 78 65 63 73 71 6c 20 7b 20 0a 20 20 20 20 20 20  xecsql { .      
b800: 41 54 54 41 43 48 20 27 74 65 73 74 2e 64 62 27  ATTACH 'test.db'
b810: 20 41 53 20 27 61 75 78 27 3b 0a 20 20 20 20 20   AS 'aux';.     
b820: 20 50 52 41 47 4d 41 20 69 6e 74 65 67 72 69 74   PRAGMA integrit
b830: 79 5f 63 68 65 63 6b 3b 0a 20 20 20 20 7d 0a 20  y_check;.    }. 
b840: 20 7d 20 24 6d 61 69 6e 65 72 72 0a 20 20 64 6f   } $mainerr.  do
b850: 5f 74 65 73 74 20 32 32 2e 34 2e 32 20 7b 0a 20  _test 22.4.2 {. 
b860: 20 20 20 65 78 65 63 73 71 6c 20 7b 20 50 52 41     execsql { PRA
b870: 47 4d 41 20 6d 61 69 6e 2e 69 6e 74 65 67 72 69  GMA main.integri
b880: 74 79 5f 63 68 65 63 6b 3b 20 7d 0a 20 20 7d 20  ty_check; }.  } 
b890: 24 6d 61 69 6e 65 72 72 0a 20 20 64 6f 5f 74 65  $mainerr.  do_te
b8a0: 73 74 20 32 32 2e 34 2e 33 20 7b 0a 20 20 20 20  st 22.4.3 {.    
b8b0: 65 78 65 63 73 71 6c 20 7b 20 50 52 41 47 4d 41  execsql { PRAGMA
b8c0: 20 61 75 78 2e 69 6e 74 65 67 72 69 74 79 5f 63   aux.integrity_c
b8d0: 68 65 63 6b 3b 20 7d 0a 20 20 7d 20 7b 6f 6b 7d  heck; }.  } {ok}
b8e0: 0a 7d 0a 20 20 0a 64 62 20 63 6c 6f 73 65 0a 66  .}.  .db close.f
b8f0: 6f 72 63 65 64 65 6c 65 74 65 20 74 65 73 74 2e  orcedelete test.
b900: 64 62 20 74 65 73 74 2e 64 62 2d 77 61 6c 20 74  db test.db-wal t
b910: 65 73 74 2e 64 62 2d 6a 6f 75 72 6e 61 6c 0a 73  est.db-journal.s
b920: 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64  qlite3 db test.d
b930: 62 0a 73 71 6c 69 74 65 33 20 64 62 32 20 74 65  b.sqlite3 db2 te
b940: 73 74 2e 64 62 0a 64 6f 5f 74 65 73 74 20 32 33  st.db.do_test 23
b950: 2e 31 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b  .1 {.  db eval {
b960: 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  .    CREATE TABL
b970: 45 20 74 31 28 61 20 49 4e 54 45 47 45 52 20 50  E t1(a INTEGER P
b980: 52 49 4d 41 52 59 20 4b 45 59 2c 62 2c 63 2c 64  RIMARY KEY,b,c,d
b990: 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20 49 4e  );.    CREATE IN
b9a0: 44 45 58 20 69 31 20 4f 4e 20 74 31 28 62 2c 63  DEX i1 ON t1(b,c
b9b0: 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20 49 4e  );.    CREATE IN
b9c0: 44 45 58 20 69 32 20 4f 4e 20 74 31 28 63 2c 64  DEX i2 ON t1(c,d
b9d0: 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20 49 4e  );.    CREATE IN
b9e0: 44 45 58 20 69 32 78 20 4f 4e 20 74 31 28 64 20  DEX i2x ON t1(d 
b9f0: 43 4f 4c 4c 41 54 45 20 6e 6f 63 61 73 65 2c 20  COLLATE nocase, 
ba00: 63 20 44 45 53 43 29 3b 0a 20 20 20 20 43 52 45  c DESC);.    CRE
ba10: 41 54 45 20 54 41 42 4c 45 20 74 32 28 78 20 49  ATE TABLE t2(x I
ba20: 4e 54 45 47 45 52 20 52 45 46 45 52 45 4e 43 45  NTEGER REFERENCE
ba30: 53 20 74 31 29 3b 0a 20 20 7d 0a 20 20 64 62 32  S t1);.  }.  db2
ba40: 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 6e 61   eval {SELECT na
ba50: 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d  me FROM sqlite_m
ba60: 61 73 74 65 72 7d 0a 7d 20 7b 74 31 20 69 31 20  aster}.} {t1 i1 
ba70: 69 32 20 69 32 78 20 74 32 7d 0a 64 6f 5f 74 65  i2 i2x t2}.do_te
ba80: 73 74 20 32 33 2e 32 61 20 7b 0a 20 20 64 62 20  st 23.2a {.  db 
ba90: 65 76 61 6c 20 7b 0a 20 20 20 20 44 52 4f 50 20  eval {.    DROP 
baa0: 49 4e 44 45 58 20 69 32 3b 0a 20 20 20 20 43 52  INDEX i2;.    CR
bab0: 45 41 54 45 20 49 4e 44 45 58 20 69 32 20 4f 4e  EATE INDEX i2 ON
bac0: 20 74 31 28 63 2c 64 2c 62 29 3b 0a 20 20 7d 0a   t1(c,d,b);.  }.
bad0: 20 20 63 61 70 74 75 72 65 5f 70 72 61 67 6d 61    capture_pragma
bae0: 20 64 62 32 20 6f 75 74 20 7b 50 52 41 47 4d 41   db2 out {PRAGMA
baf0: 20 69 6e 64 65 78 5f 69 6e 66 6f 28 69 32 29 7d   index_info(i2)}
bb00: 0a 20 20 64 62 32 20 65 76 61 6c 20 7b 53 45 4c  .  db2 eval {SEL
bb10: 45 43 54 20 63 69 64 2c 20 6e 61 6d 65 2c 20 27  ECT cid, name, '
bb20: 7c 27 20 46 52 4f 4d 20 6f 75 74 20 4f 52 44 45  |' FROM out ORDE
bb30: 52 20 42 59 20 73 65 71 6e 6f 7d 0a 7d 20 7b 32  R BY seqno}.} {2
bb40: 20 63 20 7c 20 33 20 64 20 7c 20 31 20 62 20 7c   c | 3 d | 1 b |
bb50: 7d 0a 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46  }..# EVIDENCE-OF
bb60: 3a 20 52 2d 35 36 31 34 33 2d 32 39 33 31 39 20  : R-56143-29319 
bb70: 50 52 41 47 4d 41 20 73 63 68 65 6d 61 2e 69 6e  PRAGMA schema.in
bb80: 64 65 78 5f 78 69 6e 66 6f 28 69 6e 64 65 78 2d  dex_xinfo(index-
bb90: 6e 61 6d 65 29 3b 20 54 68 69 73 0a 23 20 70 72  name); This.# pr
bba0: 61 67 6d 61 20 72 65 74 75 72 6e 73 20 69 6e 66  agma returns inf
bbb0: 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 65  ormation about e
bbc0: 76 65 72 79 20 63 6f 6c 75 6d 6e 20 69 6e 20 61  very column in a
bbd0: 6e 20 69 6e 64 65 78 2e 0a 23 0a 23 20 45 56 49  n index..#.# EVI
bbe0: 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 34 35 39 37  DENCE-OF: R-4597
bbf0: 30 2d 33 35 36 31 38 20 55 6e 6c 69 6b 65 20 74  0-35618 Unlike t
bc00: 68 69 73 20 69 6e 64 65 78 5f 69 6e 66 6f 20 70  his index_info p
bc10: 72 61 67 6d 61 2c 20 74 68 69 73 20 70 72 61 67  ragma, this prag
bc20: 6d 61 0a 23 20 72 65 74 75 72 6e 73 20 69 6e 66  ma.# returns inf
bc30: 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 65  ormation about e
bc40: 76 65 72 79 20 63 6f 6c 75 6d 6e 20 69 6e 20 74  very column in t
bc50: 68 65 20 69 6e 64 65 78 2c 20 6e 6f 74 20 6a 75  he index, not ju
bc60: 73 74 20 74 68 65 20 6b 65 79 0a 23 20 63 6f 6c  st the key.# col
bc70: 75 6d 6e 73 2e 0a 23 0a 64 6f 5f 74 65 73 74 20  umns..#.do_test 
bc80: 32 33 2e 32 62 20 7b 0a 20 20 63 61 70 74 75 72  23.2b {.  captur
bc90: 65 5f 70 72 61 67 6d 61 20 64 62 32 20 6f 75 74  e_pragma db2 out
bca0: 20 7b 50 52 41 47 4d 41 20 69 6e 64 65 78 5f 78   {PRAGMA index_x
bcb0: 69 6e 66 6f 28 69 32 29 7d 0a 20 20 64 62 32 20  info(i2)}.  db2 
bcc0: 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 63 69 64  eval {SELECT cid
bcd0: 2c 20 6e 61 6d 65 2c 20 22 64 65 73 63 22 2c 20  , name, "desc", 
bce0: 63 6f 6c 6c 2c 20 22 6b 65 79 22 2c 20 27 7c 27  coll, "key", '|'
bcf0: 20 46 52 4f 4d 20 6f 75 74 20 4f 52 44 45 52 20   FROM out ORDER 
bd00: 42 59 20 73 65 71 6e 6f 7d 0a 7d 20 7b 32 20 63  BY seqno}.} {2 c
bd10: 20 30 20 42 49 4e 41 52 59 20 31 20 7c 20 33 20   0 BINARY 1 | 3 
bd20: 64 20 30 20 42 49 4e 41 52 59 20 31 20 7c 20 31  d 0 BINARY 1 | 1
bd30: 20 62 20 30 20 42 49 4e 41 52 59 20 31 20 7c 20   b 0 BINARY 1 | 
bd40: 2d 31 20 7b 7d 20 30 20 42 49 4e 41 52 59 20 30  -1 {} 0 BINARY 0
bd50: 20 7c 7d 0a 0a 23 20 28 54 68 65 20 66 69 72 73   |}..# (The firs
bd60: 74 20 63 6f 6c 75 6d 6e 20 6f 66 20 6f 75 74 70  t column of outp
bd70: 75 74 20 66 72 6f 6d 20 50 52 41 47 4d 41 20 69  ut from PRAGMA i
bd80: 6e 64 65 78 5f 78 69 6e 66 6f 20 69 73 2e 2e 2e  ndex_xinfo is...
bd90: 29 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a  ).# EVIDENCE-OF:
bda0: 20 52 2d 30 30 31 39 37 2d 31 34 32 37 39 20 54   R-00197-14279 T
bdb0: 68 65 20 72 61 6e 6b 20 6f 66 20 74 68 65 20 63  he rank of the c
bdc0: 6f 6c 75 6d 6e 20 77 69 74 68 69 6e 20 74 68 65  olumn within the
bdd0: 20 69 6e 64 65 78 2e 20 28 30 0a 23 20 6d 65 61   index. (0.# mea
bde0: 6e 73 20 6c 65 66 74 2d 6d 6f 73 74 2e 20 4b 65  ns left-most. Ke
bdf0: 79 20 63 6f 6c 75 6d 6e 73 20 63 6f 6d 65 20 62  y columns come b
be00: 65 66 6f 72 65 20 61 75 78 69 6c 69 61 72 79 20  efore auxiliary 
be10: 63 6f 6c 75 6d 6e 73 2e 29 0a 23 0a 23 20 28 54  columns.).#.# (T
be20: 68 65 20 73 65 63 6f 6e 64 20 63 6f 6c 75 6d 6e  he second column
be30: 20 6f 66 20 6f 75 74 70 75 74 20 66 72 6f 6d 20   of output from 
be40: 50 52 41 47 4d 41 20 69 6e 64 65 78 5f 78 69 6e  PRAGMA index_xin
be50: 66 6f 20 69 73 2e 2e 2e 29 0a 23 20 45 56 49 44  fo is...).# EVID
be60: 45 4e 43 45 2d 4f 46 3a 20 52 2d 34 30 38 38 39  ENCE-OF: R-40889
be70: 2d 30 36 38 33 38 20 54 68 65 20 72 61 6e 6b 20  -06838 The rank 
be80: 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 77 69  of the column wi
be90: 74 68 69 6e 20 74 68 65 20 74 61 62 6c 65 0a 23  thin the table.#
bea0: 20 62 65 69 6e 67 20 69 6e 64 65 78 65 64 2c 20   being indexed, 
beb0: 6f 72 20 2d 31 20 69 66 20 74 68 65 20 69 6e 64  or -1 if the ind
bec0: 65 78 2d 63 6f 6c 75 6d 6e 20 69 73 20 74 68 65  ex-column is the
bed0: 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20 74 61   rowid of the ta
bee0: 62 6c 65 0a 23 20 62 65 69 6e 67 20 69 6e 64 65  ble.# being inde
bef0: 78 65 64 2e 0a 23 0a 23 20 28 54 68 65 20 74 68  xed..#.# (The th
bf00: 69 72 64 20 63 6f 6c 75 6d 6e 20 6f 66 20 6f 75  ird column of ou
bf10: 74 70 75 74 20 66 72 6f 6d 20 50 52 41 47 4d 41  tput from PRAGMA
bf20: 20 69 6e 64 65 78 5f 78 69 6e 66 6f 20 69 73 2e   index_xinfo is.
bf30: 2e 2e 29 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f  ..).# EVIDENCE-O
bf40: 46 3a 20 52 2d 32 32 37 35 31 2d 32 38 39 30 31  F: R-22751-28901
bf50: 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   The name of the
bf60: 20 63 6f 6c 75 6d 6e 20 62 65 69 6e 67 20 69 6e   column being in
bf70: 64 65 78 65 64 2c 20 6f 72 0a 23 20 4e 55 4c 4c  dexed, or.# NULL
bf80: 20 69 66 20 74 68 65 20 69 6e 64 65 78 2d 63 6f   if the index-co
bf90: 6c 75 6d 6e 20 69 73 20 74 68 65 20 72 6f 77 69  lumn is the rowi
bfa0: 64 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 62  d of the table b
bfb0: 65 69 6e 67 20 69 6e 64 65 78 65 64 2e 0a 23 0a  eing indexed..#.
bfc0: 23 20 28 54 68 65 20 66 6f 75 72 74 68 20 63 6f  # (The fourth co
bfd0: 6c 75 6d 6e 20 6f 66 20 6f 75 74 70 75 74 20 66  lumn of output f
bfe0: 72 6f 6d 20 50 52 41 47 4d 41 20 69 6e 64 65 78  rom PRAGMA index
bff0: 5f 78 69 6e 66 6f 20 69 73 2e 2e 2e 29 0a 23 20  _xinfo is...).# 
c000: 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 31  EVIDENCE-OF: R-1
c010: 31 38 34 37 2d 30 39 31 37 39 20 31 20 69 66 20  1847-09179 1 if 
c020: 74 68 65 20 69 6e 64 65 78 2d 63 6f 6c 75 6d 6e  the index-column
c030: 20 69 73 20 73 6f 72 74 65 64 20 69 6e 20 72 65   is sorted in re
c040: 76 65 72 73 65 0a 23 20 28 44 45 53 43 29 20 6f  verse.# (DESC) o
c050: 72 64 65 72 20 62 79 20 74 68 65 20 69 6e 64 65  rder by the inde
c060: 78 20 61 6e 64 20 30 20 6f 74 68 65 72 77 69 73  x and 0 otherwis
c070: 65 2e 0a 23 0a 23 20 28 54 68 65 20 66 69 66 74  e..#.# (The fift
c080: 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 6f 75 74 70  h column of outp
c090: 75 74 20 66 72 6f 6d 20 50 52 41 47 4d 41 20 69  ut from PRAGMA i
c0a0: 6e 64 65 78 5f 78 69 6e 66 6f 20 69 73 2e 2e 2e  ndex_xinfo is...
c0b0: 29 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a  ).# EVIDENCE-OF:
c0c0: 20 52 2d 31 35 33 31 33 2d 31 39 35 34 30 20 54   R-15313-19540 T
c0d0: 68 65 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 20  he name for the 
c0e0: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
c0f0: 63 65 20 75 73 65 64 20 74 6f 0a 23 20 63 6f 6d  ce used to.# com
c100: 70 61 72 65 20 76 61 6c 75 65 73 20 69 6e 20 74  pare values in t
c110: 68 65 20 69 6e 64 65 78 2d 63 6f 6c 75 6d 6e 2e  he index-column.
c120: 0a 23 0a 23 20 28 54 68 65 20 73 69 78 74 68 20  .#.# (The sixth 
c130: 63 6f 6c 75 6d 6e 20 6f 66 20 6f 75 74 70 75 74  column of output
c140: 20 66 72 6f 6d 20 50 52 41 47 4d 41 20 69 6e 64   from PRAGMA ind
c150: 65 78 5f 78 69 6e 66 6f 20 69 73 2e 2e 2e 29 0a  ex_xinfo is...).
c160: 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52  # EVIDENCE-OF: R
c170: 2d 31 34 33 31 30 2d 36 34 35 35 33 20 31 20 69  -14310-64553 1 i
c180: 66 20 74 68 65 20 69 6e 64 65 78 2d 63 6f 6c 75  f the index-colu
c190: 6d 6e 20 69 73 20 61 20 6b 65 79 20 63 6f 6c 75  mn is a key colu
c1a0: 6d 6e 20 61 6e 64 20 30 0a 23 20 69 66 20 74 68  mn and 0.# if th
c1b0: 65 20 69 6e 64 65 78 2d 63 6f 6c 75 6d 6e 20 69  e index-column i
c1c0: 73 20 61 6e 20 61 75 78 69 6c 69 61 72 79 20 63  s an auxiliary c
c1d0: 6f 6c 75 6d 6e 2e 0a 23 0a 64 6f 5f 74 65 73 74  olumn..#.do_test
c1e0: 20 32 33 2e 32 63 20 7b 0a 20 20 64 62 32 20 65   23.2c {.  db2 e
c1f0: 76 61 6c 20 7b 50 52 41 47 4d 41 20 69 6e 64 65  val {PRAGMA inde
c200: 78 5f 78 69 6e 66 6f 28 69 32 29 7d 0a 7d 20 7b  x_xinfo(i2)}.} {
c210: 30 20 32 20 63 20 30 20 42 49 4e 41 52 59 20 31  0 2 c 0 BINARY 1
c220: 20 31 20 33 20 64 20 30 20 42 49 4e 41 52 59 20   1 3 d 0 BINARY 
c230: 31 20 32 20 31 20 62 20 30 20 42 49 4e 41 52 59  1 2 1 b 0 BINARY
c240: 20 31 20 33 20 2d 31 20 7b 7d 20 30 20 42 49 4e   1 3 -1 {} 0 BIN
c250: 41 52 59 20 30 7d 0a 64 6f 5f 74 65 73 74 20 32  ARY 0}.do_test 2
c260: 33 2e 32 64 20 7b 0a 20 20 64 62 32 20 65 76 61  3.2d {.  db2 eva
c270: 6c 20 7b 50 52 41 47 4d 41 20 69 6e 64 65 78 5f  l {PRAGMA index_
c280: 78 69 6e 66 6f 28 69 32 78 29 7d 0a 7d 20 7b 30  xinfo(i2x)}.} {0
c290: 20 33 20 64 20 30 20 6e 6f 63 61 73 65 20 31 20   3 d 0 nocase 1 
c2a0: 31 20 32 20 63 20 31 20 42 49 4e 41 52 59 20 31  1 2 c 1 BINARY 1
c2b0: 20 32 20 2d 31 20 7b 7d 20 30 20 42 49 4e 41 52   2 -1 {} 0 BINAR
c2c0: 59 20 30 7d 0a 0a 23 20 45 56 49 44 45 4e 43 45  Y 0}..# EVIDENCE
c2d0: 2d 4f 46 3a 20 52 2d 36 34 31 30 33 2d 31 37 37  -OF: R-64103-177
c2e0: 37 36 20 50 52 41 47 4d 41 20 73 63 68 65 6d 61  76 PRAGMA schema
c2f0: 2e 69 6e 64 65 78 5f 6c 69 73 74 28 74 61 62 6c  .index_list(tabl
c300: 65 2d 6e 61 6d 65 29 3b 20 54 68 69 73 0a 23 20  e-name); This.# 
c310: 70 72 61 67 6d 61 20 72 65 74 75 72 6e 73 20 6f  pragma returns o
c320: 6e 65 20 72 6f 77 20 66 6f 72 20 65 61 63 68 20  ne row for each 
c330: 69 6e 64 65 78 20 61 73 73 6f 63 69 61 74 65 64  index associated
c340: 20 77 69 74 68 20 74 68 65 20 67 69 76 65 6e 20   with the given 
c350: 74 61 62 6c 65 2e 0a 23 0a 23 20 28 54 68 65 20  table..#.# (The 
c360: 66 69 72 73 74 20 63 6f 6c 75 6d 6e 20 6f 66 20  first column of 
c370: 6f 75 74 70 75 74 20 66 72 6f 6d 20 50 52 41 47  output from PRAG
c380: 4d 41 20 69 6e 64 65 78 5f 6c 69 73 74 20 69 73  MA index_list is
c390: 2e 2e 2e 29 0a 23 20 45 56 49 44 45 4e 43 45 2d  ...).# EVIDENCE-
c3a0: 4f 46 3a 20 52 2d 30 32 37 35 33 2d 32 34 37 34  OF: R-02753-2474
c3b0: 38 20 41 20 73 65 71 75 65 6e 63 65 20 6e 75 6d  8 A sequence num
c3c0: 62 65 72 20 61 73 73 69 67 6e 65 64 20 74 6f 20  ber assigned to 
c3d0: 65 61 63 68 20 69 6e 64 65 78 0a 23 20 66 6f 72  each index.# for
c3e0: 20 69 6e 74 65 72 6e 61 6c 20 74 72 61 63 6b 69   internal tracki
c3f0: 6e 67 20 70 75 72 70 6f 73 65 73 2e 0a 23 0a 23  ng purposes..#.#
c400: 20 28 54 68 65 20 73 65 63 6f 6e 64 20 63 6f 6c   (The second col
c410: 75 6d 6e 20 6f 66 20 6f 75 74 70 75 74 20 66 72  umn of output fr
c420: 6f 6d 20 50 52 41 47 4d 41 20 69 6e 64 65 78 5f  om PRAGMA index_
c430: 6c 69 73 74 20 69 73 2e 2e 2e 29 0a 23 20 45 56  list is...).# EV
c440: 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 33 35 34  IDENCE-OF: R-354
c450: 39 36 2d 30 33 36 33 35 20 54 68 65 20 6e 61 6d  96-03635 The nam
c460: 65 20 6f 66 20 74 68 65 20 69 6e 64 65 78 2e 0a  e of the index..
c470: 23 0a 23 20 28 54 68 65 20 74 68 69 72 64 20 63  #.# (The third c
c480: 6f 6c 75 6d 6e 20 6f 66 20 6f 75 74 70 75 74 20  olumn of output 
c490: 66 72 6f 6d 20 50 52 41 47 4d 41 20 69 6e 64 65  from PRAGMA inde
c4a0: 78 5f 6c 69 73 74 20 69 73 2e 2e 2e 29 0a 23 20  x_list is...).# 
c4b0: 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 35  EVIDENCE-OF: R-5
c4c0: 37 33 30 31 2d 36 34 35 30 36 20 22 31 22 20 69  7301-64506 "1" i
c4d0: 66 20 74 68 65 20 69 6e 64 65 78 20 69 73 20 55  f the index is U
c4e0: 4e 49 51 55 45 20 61 6e 64 20 22 30 22 20 69 66  NIQUE and "0" if
c4f0: 20 6e 6f 74 2e 0a 23 0a 23 20 28 54 68 65 20 66   not..#.# (The f
c500: 6f 75 72 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 20  ourth column of 
c510: 6f 75 74 70 75 74 20 66 72 6f 6d 20 50 52 41 47  output from PRAG
c520: 4d 41 20 69 6e 64 65 78 5f 6c 69 73 74 20 69 73  MA index_list is
c530: 2e 2e 2e 29 0a 23 20 45 56 49 44 45 4e 43 45 2d  ...).# EVIDENCE-
c540: 4f 46 3a 20 52 2d 33 36 36 30 39 2d 33 39 35 35  OF: R-36609-3955
c550: 34 20 22 63 22 20 69 66 20 74 68 65 20 69 6e 64  4 "c" if the ind
c560: 65 78 20 77 61 73 20 63 72 65 61 74 65 64 20 62  ex was created b
c570: 79 20 61 20 43 52 45 41 54 45 0a 23 20 49 4e 44  y a CREATE.# IND
c580: 45 58 20 73 74 61 74 65 6d 65 6e 74 2c 20 22 75  EX statement, "u
c590: 22 20 69 66 20 74 68 65 20 69 6e 64 65 78 20 77  " if the index w
c5a0: 61 73 20 63 72 65 61 74 65 64 20 62 79 20 61 20  as created by a 
c5b0: 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e  UNIQUE constrain
c5c0: 74 2c 0a 23 20 6f 72 20 22 70 6b 22 20 69 66 20  t,.# or "pk" if 
c5d0: 74 68 65 20 69 6e 64 65 78 20 77 61 73 20 63 72  the index was cr
c5e0: 65 61 74 65 64 20 62 79 20 61 20 50 52 49 4d 41  eated by a PRIMA
c5f0: 52 59 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e  RY KEY constrain
c600: 74 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 32 33 2e  t..#.do_test 23.
c610: 33 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a  3 {.  db eval {.
c620: 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45 58      CREATE INDEX
c630: 20 69 33 20 4f 4e 20 74 31 28 64 2c 62 2c 63 29   i3 ON t1(d,b,c)
c640: 3b 0a 20 20 7d 0a 20 20 63 61 70 74 75 72 65 5f  ;.  }.  capture_
c650: 70 72 61 67 6d 61 20 64 62 32 20 6f 75 74 20 7b  pragma db2 out {
c660: 50 52 41 47 4d 41 20 69 6e 64 65 78 5f 6c 69 73  PRAGMA index_lis
c670: 74 28 74 31 29 7d 0a 20 20 64 62 32 20 65 76 61  t(t1)}.  db2 eva
c680: 6c 20 7b 53 45 4c 45 43 54 20 73 65 71 2c 20 6e  l {SELECT seq, n
c690: 61 6d 65 2c 20 22 75 6e 69 71 75 65 22 2c 20 6f  ame, "unique", o
c6a0: 72 69 67 69 6e 2c 20 27 7c 27 20 46 52 4f 4d 20  rigin, '|' FROM 
c6b0: 6f 75 74 20 4f 52 44 45 52 20 42 59 20 73 65 71  out ORDER BY seq
c6c0: 7d 0a 7d 20 7b 30 20 69 33 20 30 20 63 20 7c 20  }.} {0 i3 0 c | 
c6d0: 31 20 69 32 20 30 20 63 20 7c 20 32 20 69 32 78  1 i2 0 c | 2 i2x
c6e0: 20 30 20 63 20 7c 20 33 20 69 31 20 30 20 63 20   0 c | 3 i1 0 c 
c6f0: 7c 7d 0a 64 6f 5f 74 65 73 74 20 32 33 2e 34 20  |}.do_test 23.4 
c700: 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a 20 20  {.  db eval {.  
c710: 20 20 41 4c 54 45 52 20 54 41 42 4c 45 20 74 31    ALTER TABLE t1
c720: 20 41 44 44 20 43 4f 4c 55 4d 4e 20 65 3b 0a 20   ADD COLUMN e;. 
c730: 20 7d 0a 20 20 64 62 32 20 65 76 61 6c 20 7b 0a   }.  db2 eval {.
c740: 20 20 20 20 50 52 41 47 4d 41 20 74 61 62 6c 65      PRAGMA table
c750: 5f 69 6e 66 6f 28 74 31 29 3b 0a 20 20 7d 0a 7d  _info(t1);.  }.}
c760: 20 7b 2f 34 20 65 20 7b 7d 20 30 20 7b 7d 20 30   {/4 e {} 0 {} 0
c770: 2f 7d 0a 64 6f 5f 74 65 73 74 20 32 33 2e 35 20  /}.do_test 23.5 
c780: 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a 20 20  {.  db eval {.  
c790: 20 20 44 52 4f 50 20 54 41 42 4c 45 20 74 32 3b    DROP TABLE t2;
c7a0: 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  .    CREATE TABL
c7b0: 45 20 74 32 28 78 2c 20 79 20 49 4e 54 45 47 45  E t2(x, y INTEGE
c7c0: 52 20 52 45 46 45 52 45 4e 43 45 53 20 74 31 29  R REFERENCES t1)
c7d0: 3b 0a 20 20 7d 0a 20 20 64 62 32 20 65 76 61 6c  ;.  }.  db2 eval
c7e0: 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 66 6f   {.    PRAGMA fo
c7f0: 72 65 69 67 6e 5f 6b 65 79 5f 6c 69 73 74 28 74  reign_key_list(t
c800: 32 29 3b 0a 20 20 7d 0a 7d 20 7b 30 20 30 20 74  2);.  }.} {0 0 t
c810: 31 20 79 20 7b 7d 20 7b 4e 4f 20 41 43 54 49 4f  1 y {} {NO ACTIO
c820: 4e 7d 20 7b 4e 4f 20 41 43 54 49 4f 4e 7d 20 4e  N} {NO ACTION} N
c830: 4f 4e 45 7d 0a 64 62 32 20 63 6c 6f 73 65 0a 0a  ONE}.db2 close..
c840: 69 66 63 61 70 61 62 6c 65 20 21 68 61 73 5f 63  ifcapable !has_c
c850: 6f 64 65 63 20 7b 0a 20 20 72 65 73 65 74 5f 64  odec {.  reset_d
c860: 62 0a 20 20 64 6f 5f 65 78 65 63 73 71 6c 5f 74  b.  do_execsql_t
c870: 65 73 74 20 32 34 2e 30 20 7b 0a 20 20 20 20 50  est 24.0 {.    P
c880: 52 41 47 4d 41 20 70 61 67 65 5f 73 69 7a 65 20  RAGMA page_size 
c890: 3d 20 31 30 32 34 3b 0a 20 20 20 20 43 52 45 41  = 1024;.    CREA
c8a0: 54 45 20 54 41 42 4c 45 20 74 31 28 61 2c 20 62  TE TABLE t1(a, b
c8b0: 2c 20 63 29 3b 0a 20 20 20 20 43 52 45 41 54 45  , c);.    CREATE
c8c0: 20 49 4e 44 45 58 20 69 31 20 4f 4e 20 74 31 28   INDEX i1 ON t1(
c8d0: 62 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  b);.    INSERT I
c8e0: 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 27 61  NTO t1 VALUES('a
c8f0: 27 2c 20 27 62 27 2c 20 27 63 27 29 3b 0a 20 20  ', 'b', 'c');.  
c900: 20 20 50 52 41 47 4d 41 20 69 6e 74 65 67 72 69    PRAGMA integri
c910: 74 79 5f 63 68 65 63 6b 3b 0a 20 20 7d 20 7b 6f  ty_check;.  } {o
c920: 6b 7d 0a 20 20 0a 20 20 73 65 74 20 72 20 5b 64  k}.  .  set r [d
c930: 62 20 6f 6e 65 20 7b 53 45 4c 45 43 54 20 72 6f  b one {SELECT ro
c940: 6f 74 70 61 67 65 20 46 52 4f 4d 20 73 71 6c 69  otpage FROM sqli
c950: 74 65 5f 6d 61 73 74 65 72 20 57 48 45 52 45 20  te_master WHERE 
c960: 6e 61 6d 65 20 3d 20 27 74 31 27 7d 5d 0a 20 20  name = 't1'}].  
c970: 64 62 20 63 6c 6f 73 65 0a 20 20 68 65 78 69 6f  db close.  hexio
c980: 5f 77 72 69 74 65 20 74 65 73 74 2e 64 62 20 5b  _write test.db [
c990: 65 78 70 72 20 24 72 2a 31 30 32 34 20 2d 20 31  expr $r*1024 - 1
c9a0: 36 5d 20 30 30 30 30 30 30 30 30 30 30 30 30 30  6] 0000000000000
c9b0: 30 30 37 30 31 30 34 30 66 30 66 31 66 36 31 36  00701040f0f1f616
c9c0: 32 36 33 0a 20 20 0a 20 20 73 71 6c 69 74 65 33  263.  .  sqlite3
c9d0: 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20 64 6f   db test.db.  do
c9e0: 5f 63 61 74 63 68 73 71 6c 5f 74 65 73 74 20 32  _catchsql_test 2
c9f0: 34 2e 31 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  4.1 {.    SELECT
ca00: 20 2a 20 46 52 4f 4d 20 74 31 3b 0a 20 20 7d 20   * FROM t1;.  } 
ca10: 7b 31 20 7b 64 61 74 61 62 61 73 65 20 64 69 73  {1 {database dis
ca20: 6b 20 69 6d 61 67 65 20 69 73 20 6d 61 6c 66 6f  k image is malfo
ca30: 72 6d 65 64 7d 7d 0a 20 20 64 6f 5f 63 61 74 63  rmed}}.  do_catc
ca40: 68 73 71 6c 5f 74 65 73 74 20 32 34 2e 32 20 7b  hsql_test 24.2 {
ca50: 0a 20 20 20 20 50 52 41 47 4d 41 20 69 6e 74 65  .    PRAGMA inte
ca60: 67 72 69 74 79 5f 63 68 65 63 6b 3b 0a 20 20 7d  grity_check;.  }
ca70: 20 7b 30 20 7b 7b 64 61 74 61 62 61 73 65 20 64   {0 {{database d
ca80: 69 73 6b 20 69 6d 61 67 65 20 69 73 20 6d 61 6c  isk image is mal
ca90: 66 6f 72 6d 65 64 7d 7d 7d 0a 7d 20 20 0a 64 61  formed}}}.}  .da
caa0: 74 61 62 61 73 65 5f 6e 65 76 65 72 5f 63 6f 72  tabase_never_cor
cab0: 72 75 70 74 0a 66 69 6e 69 73 68 5f 74 65 73 74  rupt.finish_test
cac0: 0a                                               .