/ Hex Artifact Content
Login

Artifact 56043531b5a82d332d0ea37508bf15a2977d088751f83e191ae5ae9e0cf6e93a:


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 0a 64 6f  s;.  }.} {2}..do
18f0: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 31 2e  _execsql_test 1.
1900: 31 35 2e 31 20 7b 0a 20 20 50 52 41 47 4d 41 20  15.1 {.  PRAGMA 
1910: 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69  default_cache_si
1920: 7a 65 20 3d 20 30 3b 0a 7d 0a 64 6f 5f 65 78 65  ze = 0;.}.do_exe
1930: 63 73 71 6c 5f 74 65 73 74 20 31 2e 31 35 2e 32  csql_test 1.15.2
1940: 20 7b 0a 20 20 50 52 41 47 4d 41 20 64 65 66 61   {.  PRAGMA defa
1950: 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65 3b 0a  ult_cache_size;.
1960: 7d 20 24 44 46 4c 54 5f 43 41 43 48 45 5f 53 5a  } $DFLT_CACHE_SZ
1970: 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74  .do_execsql_test
1980: 20 31 2e 31 35 2e 33 20 7b 0a 20 20 50 52 41 47   1.15.3 {.  PRAG
1990: 4d 41 20 64 65 66 61 75 6c 74 5f 63 61 63 68 65  MA default_cache
19a0: 5f 73 69 7a 65 20 3d 20 2d 35 30 30 3b 0a 7d 0a  _size = -500;.}.
19b0: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
19c0: 31 2e 31 35 2e 34 20 7b 0a 20 20 50 52 41 47 4d  1.15.4 {.  PRAGM
19d0: 41 20 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f  A default_cache_
19e0: 73 69 7a 65 3b 0a 7d 20 35 30 30 0a 64 6f 5f 65  size;.} 500.do_e
19f0: 78 65 63 73 71 6c 5f 74 65 73 74 20 31 2e 31 35  xecsql_test 1.15
1a00: 2e 33 20 7b 0a 20 20 50 52 41 47 4d 41 20 64 65  .3 {.  PRAGMA de
1a10: 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65  fault_cache_size
1a20: 20 3d 20 35 30 30 3b 0a 7d 0a 64 6f 5f 65 78 65   = 500;.}.do_exe
1a30: 63 73 71 6c 5f 74 65 73 74 20 31 2e 31 35 2e 34  csql_test 1.15.4
1a40: 20 7b 0a 20 20 50 52 41 47 4d 41 20 64 65 66 61   {.  PRAGMA defa
1a50: 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65 3b 0a  ult_cache_size;.
1a60: 7d 20 35 30 30 0a 64 62 20 63 6c 6f 73 65 0a 68  } 500.db close.h
1a70: 65 78 69 6f 5f 77 72 69 74 65 20 74 65 73 74 2e  exio_write test.
1a80: 64 62 20 34 38 20 46 46 46 46 46 46 30 30 0a 73  db 48 FFFFFF00.s
1a90: 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64  qlite3 db test.d
1aa0: 62 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  b.do_execsql_tes
1ab0: 74 20 31 2e 31 35 2e 34 20 7b 0a 20 20 50 52 41  t 1.15.4 {.  PRA
1ac0: 47 4d 41 20 64 65 66 61 75 6c 74 5f 63 61 63 68  GMA default_cach
1ad0: 65 5f 73 69 7a 65 3b 0a 7d 20 32 35 36 0a 7d 20  e_size;.} 256.} 
1ae0: 3b 23 20 69 66 63 61 70 61 62 6c 65 20 70 61 67  ;# ifcapable pag
1af0: 65 72 5f 70 72 61 67 6d 61 73 0a 0a 23 20 54 65  er_pragmas..# Te
1b00: 73 74 20 74 75 72 6e 69 6e 67 20 22 66 6c 61 67  st turning "flag
1b10: 22 20 70 72 61 67 6d 61 73 20 6f 6e 20 61 6e 64  " pragmas on and
1b20: 20 6f 66 66 2e 0a 23 0a 69 66 63 61 70 61 62 6c   off..#.ifcapabl
1b30: 65 20 64 65 62 75 67 20 7b 0a 20 20 23 20 50 72  e debug {.  # Pr
1b40: 61 67 6d 61 20 22 76 64 62 65 5f 6c 69 73 74 69  agma "vdbe_listi
1b50: 6e 67 22 20 69 73 20 6f 6e 6c 79 20 61 76 61 69  ng" is only avai
1b60: 6c 61 62 6c 65 20 69 66 20 63 6f 6d 70 69 6c 65  lable if compile
1b70: 64 20 77 69 74 68 20 53 51 4c 49 54 45 5f 44 45  d with SQLITE_DE
1b80: 42 55 47 0a 20 20 23 0a 20 20 64 6f 5f 74 65 73  BUG.  #.  do_tes
1b90: 74 20 70 72 61 67 6d 61 2d 31 2e 31 35 20 7b 0a  t pragma-1.15 {.
1ba0: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20      execsql {.  
1bb0: 20 20 20 20 50 52 41 47 4d 41 20 76 64 62 65 5f      PRAGMA vdbe_
1bc0: 6c 69 73 74 69 6e 67 3d 59 45 53 3b 0a 20 20 20  listing=YES;.   
1bd0: 20 20 20 50 52 41 47 4d 41 20 76 64 62 65 5f 6c     PRAGMA vdbe_l
1be0: 69 73 74 69 6e 67 3b 0a 20 20 20 20 7d 0a 20 20  isting;.    }.  
1bf0: 7d 20 7b 31 7d 0a 20 20 64 6f 5f 74 65 73 74 20  } {1}.  do_test 
1c00: 70 72 61 67 6d 61 2d 31 2e 31 36 20 7b 0a 20 20  pragma-1.16 {.  
1c10: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
1c20: 20 20 50 52 41 47 4d 41 20 76 64 62 65 5f 6c 69    PRAGMA vdbe_li
1c30: 73 74 69 6e 67 3d 4e 4f 3b 0a 20 20 20 20 20 20  sting=NO;.      
1c40: 50 52 41 47 4d 41 20 76 64 62 65 5f 6c 69 73 74  PRAGMA vdbe_list
1c50: 69 6e 67 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b  ing;.    }.  } {
1c60: 30 7d 0a 7d 0a 0a 64 6f 5f 74 65 73 74 20 70 72  0}.}..do_test pr
1c70: 61 67 6d 61 2d 31 2e 31 37 20 7b 0a 20 20 65 78  agma-1.17 {.  ex
1c80: 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47  ecsql {.    PRAG
1c90: 4d 41 20 70 61 72 73 65 72 5f 74 72 61 63 65 3d  MA parser_trace=
1ca0: 4f 4e 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 70  ON;.    PRAGMA p
1cb0: 61 72 73 65 72 5f 74 72 61 63 65 3d 4f 46 46 3b  arser_trace=OFF;
1cc0: 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73  .  }.} {}.do_tes
1cd0: 74 20 70 72 61 67 6d 61 2d 31 2e 31 38 20 7b 0a  t pragma-1.18 {.
1ce0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
1cf0: 50 52 41 47 4d 41 20 62 6f 67 75 73 20 3d 20 2d  PRAGMA bogus = -
1d00: 31 32 33 34 3b 20 20 2d 2d 20 50 61 72 73 69 6e  1234;  -- Parsin
1d10: 67 20 6f 66 20 6e 65 67 61 74 69 76 65 20 76 61  g of negative va
1d20: 6c 75 65 73 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a 23  lues.  }.} {}..#
1d30: 20 54 65 73 74 20 6d 6f 64 69 66 79 69 6e 67 20   Test modifying 
1d40: 74 68 65 20 73 61 66 65 74 79 5f 6c 65 76 65 6c  the safety_level
1d50: 20 6f 66 20 61 6e 20 61 74 74 61 63 68 65 64 20   of an attached 
1d60: 64 61 74 61 62 61 73 65 2e 0a 69 66 63 61 70 61  database..ifcapa
1d70: 62 6c 65 20 70 61 67 65 72 5f 70 72 61 67 6d 61  ble pager_pragma
1d80: 73 26 26 61 74 74 61 63 68 20 7b 0a 20 20 64 6f  s&&attach {.  do
1d90: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 32 2e 31  _test pragma-2.1
1da0: 20 7b 0a 20 20 20 20 66 6f 72 63 65 64 65 6c 65   {.    forcedele
1db0: 74 65 20 74 65 73 74 32 2e 64 62 0a 20 20 20 20  te test2.db.    
1dc0: 66 6f 72 63 65 64 65 6c 65 74 65 20 74 65 73 74  forcedelete test
1dd0: 32 2e 64 62 2d 6a 6f 75 72 6e 61 6c 0a 20 20 20  2.db-journal.   
1de0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20   execsql {.     
1df0: 20 41 54 54 41 43 48 20 27 74 65 73 74 32 2e 64   ATTACH 'test2.d
1e00: 62 27 20 41 53 20 61 75 78 3b 0a 20 20 20 20 7d  b' AS aux;.    }
1e10: 20 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65   .  } {}.  do_te
1e20: 73 74 20 70 72 61 67 6d 61 2d 32 2e 32 20 7b 0a  st pragma-2.2 {.
1e30: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20      execsql {.  
1e40: 20 20 20 20 70 72 61 67 6d 61 20 61 75 78 2e 73      pragma aux.s
1e50: 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20 20 20 20  ynchronous;.    
1e60: 7d 20 0a 20 20 7d 20 7b 32 7d 0a 20 20 64 6f 5f  } .  } {2}.  do_
1e70: 74 65 73 74 20 70 72 61 67 6d 61 2d 32 2e 33 20  test pragma-2.3 
1e80: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a  {.    execsql {.
1e90: 20 20 20 20 20 20 70 72 61 67 6d 61 20 61 75 78        pragma aux
1ea0: 2e 73 79 6e 63 68 72 6f 6e 6f 75 73 20 3d 20 4f  .synchronous = O
1eb0: 46 46 3b 0a 20 20 20 20 20 20 70 72 61 67 6d 61  FF;.      pragma
1ec0: 20 61 75 78 2e 73 79 6e 63 68 72 6f 6e 6f 75 73   aux.synchronous
1ed0: 3b 0a 20 20 20 20 20 20 70 72 61 67 6d 61 20 73  ;.      pragma s
1ee0: 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20 20 20 20  ynchronous;.    
1ef0: 7d 20 0a 20 20 7d 20 7b 30 20 32 7d 0a 20 20 64  } .  } {0 2}.  d
1f00: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 32 2e  o_test pragma-2.
1f10: 34 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  4 {.    execsql 
1f20: 7b 0a 20 20 20 20 20 20 70 72 61 67 6d 61 20 61  {.      pragma a
1f30: 75 78 2e 73 79 6e 63 68 72 6f 6e 6f 75 73 20 3d  ux.synchronous =
1f40: 20 4f 4e 3b 0a 20 20 20 20 20 20 70 72 61 67 6d   ON;.      pragm
1f50: 61 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20  a synchronous;. 
1f60: 20 20 20 20 20 70 72 61 67 6d 61 20 61 75 78 2e       pragma aux.
1f70: 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20 20 20  synchronous;.   
1f80: 20 7d 20 0a 20 20 7d 20 7b 32 20 31 7d 0a 7d 20   } .  } {2 1}.} 
1f90: 3b 23 20 69 66 63 61 70 61 62 6c 65 20 70 61 67  ;# ifcapable pag
1fa0: 65 72 5f 70 72 61 67 6d 61 73 0a 0a 23 20 43 6f  er_pragmas..# Co
1fb0: 6e 73 74 72 75 63 74 20 61 20 63 6f 72 72 75 70  nstruct a corrup
1fc0: 74 65 64 20 69 6e 64 65 78 20 61 6e 64 20 6d 61  ted index and ma
1fd0: 6b 65 20 73 75 72 65 20 74 68 65 20 69 6e 74 65  ke sure the inte
1fe0: 67 72 69 74 79 5f 63 68 65 63 6b 0a 23 20 70 72  grity_check.# pr
1ff0: 61 67 6d 61 20 66 69 6e 64 73 20 69 74 2e 0a 23  agma finds it..#
2000: 0a 23 20 54 68 65 73 65 20 74 65 73 74 73 20 77  .# These tests w
2010: 6f 6e 27 74 20 77 6f 72 6b 20 69 66 20 74 68 65  on't work if the
2020: 20 64 61 74 61 62 61 73 65 20 69 73 20 65 6e 63   database is enc
2030: 72 79 70 74 65 64 0a 23 0a 64 6f 5f 74 65 73 74  rypted.#.do_test
2040: 20 70 72 61 67 6d 61 2d 33 2e 31 20 7b 0a 20 20   pragma-3.1 {.  
2050: 64 62 20 63 6c 6f 73 65 0a 20 20 66 6f 72 63 65  db close.  force
2060: 64 65 6c 65 74 65 20 74 65 73 74 2e 64 62 20 74  delete test.db t
2070: 65 73 74 2e 64 62 2d 6a 6f 75 72 6e 61 6c 0a 20  est.db-journal. 
2080: 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74   sqlite3 db test
2090: 2e 64 62 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  .db.  execsql {.
20a0: 20 20 20 20 50 52 41 47 4d 41 20 61 75 74 6f 5f      PRAGMA auto_
20b0: 76 61 63 75 75 6d 3d 4f 46 46 3b 0a 20 20 20 20  vacuum=OFF;.    
20c0: 42 45 47 49 4e 3b 0a 20 20 20 20 43 52 45 41 54  BEGIN;.    CREAT
20d0: 45 20 54 41 42 4c 45 20 74 32 28 61 2c 62 2c 63  E TABLE t2(a,b,c
20e0: 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20 49 4e  );.    CREATE IN
20f0: 44 45 58 20 69 32 20 4f 4e 20 74 32 28 61 29 3b  DEX i2 ON t2(a);
2100: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
2110: 20 74 32 20 56 41 4c 55 45 53 28 31 31 2c 32 2c   t2 VALUES(11,2,
2120: 33 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  3);.    INSERT I
2130: 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28 32 32  NTO t2 VALUES(22
2140: 2c 33 2c 34 29 3b 0a 20 20 20 20 43 4f 4d 4d 49  ,3,4);.    COMMI
2150: 54 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 72 6f  T;.    SELECT ro
2160: 77 69 64 2c 20 2a 20 66 72 6f 6d 20 74 32 3b 0a  wid, * from t2;.
2170: 20 20 7d 0a 7d 20 7b 31 20 31 31 20 32 20 33 20    }.} {1 11 2 3 
2180: 32 20 32 32 20 33 20 34 7d 0a 69 66 63 61 70 61  2 22 3 4}.ifcapa
2190: 62 6c 65 20 61 74 74 61 63 68 20 7b 0a 20 20 69  ble attach {.  i
21a0: 66 20 7b 21 5b 73 71 6c 69 74 65 33 20 2d 68 61  f {![sqlite3 -ha
21b0: 73 2d 63 6f 64 65 63 5d 20 26 26 20 24 73 71 6c  s-codec] && $sql
21c0: 69 74 65 5f 6f 70 74 69 6f 6e 73 28 69 6e 74 65  ite_options(inte
21d0: 67 72 69 74 79 63 6b 29 7d 20 7b 0a 20 20 20 20  grityck)} {.    
21e0: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 33  do_test pragma-3
21f0: 2e 32 20 7b 0a 20 20 20 20 20 20 64 62 20 65 76  .2 {.      db ev
2200: 61 6c 20 7b 53 45 4c 45 43 54 20 72 6f 6f 74 70  al {SELECT rootp
2210: 61 67 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  age FROM sqlite_
2220: 6d 61 73 74 65 72 20 57 48 45 52 45 20 6e 61 6d  master WHERE nam
2230: 65 3d 27 69 32 27 7d 20 62 72 65 61 6b 0a 20 20  e='i2'} break.  
2240: 20 20 20 20 73 65 74 20 70 67 73 7a 20 5b 64 62      set pgsz [db
2250: 20 65 76 61 6c 20 7b 50 52 41 47 4d 41 20 70 61   eval {PRAGMA pa
2260: 67 65 5f 73 69 7a 65 7d 5d 0a 20 20 20 20 20 20  ge_size}].      
2270: 23 20 6f 76 65 72 77 72 69 74 65 20 74 68 65 20  # overwrite the 
2280: 68 65 61 64 65 72 20 6f 6e 20 74 68 65 20 72 6f  header on the ro
2290: 6f 74 70 61 67 65 20 6f 66 20 74 68 65 20 69 6e  otpage of the in
22a0: 64 65 78 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a  dex in order to.
22b0: 20 20 20 20 20 20 23 20 6d 61 6b 65 20 74 68 65        # make the
22c0: 20 69 6e 64 65 78 20 61 70 70 65 61 72 20 74 6f   index appear to
22d0: 20 62 65 20 65 6d 70 74 79 2e 0a 20 20 20 20 20   be empty..     
22e0: 20 23 0a 20 20 20 20 20 20 73 65 74 20 6f 66 66   #.      set off
22f0: 73 65 74 20 5b 65 78 70 72 20 7b 24 70 67 73 7a  set [expr {$pgsz
2300: 2a 28 24 72 6f 6f 74 70 61 67 65 2d 31 29 7d 5d  *($rootpage-1)}]
2310: 0a 20 20 20 20 20 20 68 65 78 69 6f 5f 77 72 69  .      hexio_wri
2320: 74 65 20 74 65 73 74 2e 64 62 20 24 6f 66 66 73  te test.db $offs
2330: 65 74 20 30 61 30 30 30 30 30 30 30 30 30 34 30  et 0a00000000040
2340: 30 30 30 30 30 30 30 30 30 0a 20 20 20 20 20 20  000000000.      
2350: 64 62 20 63 6c 6f 73 65 0a 20 20 20 20 20 20 73  db close.      s
2360: 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64  qlite3 db test.d
2370: 62 0a 20 20 20 20 20 20 65 78 65 63 73 71 6c 20  b.      execsql 
2380: 7b 50 52 41 47 4d 41 20 69 6e 74 65 67 72 69 74  {PRAGMA integrit
2390: 79 5f 63 68 65 63 6b 7d 0a 20 20 20 20 7d 20 7b  y_check}.    } {
23a0: 7b 72 6f 77 20 31 20 6d 69 73 73 69 6e 67 20 66  {row 1 missing f
23b0: 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b 72  rom index i2} {r
23c0: 6f 77 20 32 20 6d 69 73 73 69 6e 67 20 66 72 6f  ow 2 missing fro
23d0: 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b 77 72 6f  m index i2} {wro
23e0: 6e 67 20 23 20 6f 66 20 65 6e 74 72 69 65 73 20  ng # of entries 
23f0: 69 6e 20 69 6e 64 65 78 20 69 32 7d 7d 0a 20 20  in index i2}}.  
2400: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
2410: 2d 33 2e 33 20 7b 0a 20 20 20 20 20 20 65 78 65  -3.3 {.      exe
2420: 63 73 71 6c 20 7b 50 52 41 47 4d 41 20 69 6e 74  csql {PRAGMA int
2430: 65 67 72 69 74 79 5f 63 68 65 63 6b 3d 31 7d 0a  egrity_check=1}.
2440: 20 20 20 20 7d 20 7b 7b 72 6f 77 20 31 20 6d 69      } {{row 1 mi
2450: 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78  ssing from index
2460: 20 69 32 7d 7d 0a 20 20 20 20 64 6f 5f 74 65 73   i2}}.    do_tes
2470: 74 20 70 72 61 67 6d 61 2d 33 2e 34 20 7b 0a 20  t pragma-3.4 {. 
2480: 20 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20       execsql {. 
2490: 20 20 20 20 20 20 20 41 54 54 41 43 48 20 44 41         ATTACH DA
24a0: 54 41 42 41 53 45 20 27 74 65 73 74 2e 64 62 27  TABASE 'test.db'
24b0: 20 41 53 20 74 32 3b 0a 20 20 20 20 20 20 20 20   AS t2;.        
24c0: 50 52 41 47 4d 41 20 69 6e 74 65 67 72 69 74 79  PRAGMA integrity
24d0: 5f 63 68 65 63 6b 0a 20 20 20 20 20 20 7d 0a 20  _check.      }. 
24e0: 20 20 20 7d 20 7b 7b 72 6f 77 20 31 20 6d 69 73     } {{row 1 mis
24f0: 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20  sing from index 
2500: 69 32 7d 20 7b 72 6f 77 20 32 20 6d 69 73 73 69  i2} {row 2 missi
2510: 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32  ng from index i2
2520: 7d 20 7b 77 72 6f 6e 67 20 23 20 6f 66 20 65 6e  } {wrong # of en
2530: 74 72 69 65 73 20 69 6e 20 69 6e 64 65 78 20 69  tries in index i
2540: 32 7d 20 7b 72 6f 77 20 31 20 6d 69 73 73 69 6e  2} {row 1 missin
2550: 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d  g from index i2}
2560: 20 7b 72 6f 77 20 32 20 6d 69 73 73 69 6e 67 20   {row 2 missing 
2570: 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b  from index i2} {
2580: 77 72 6f 6e 67 20 23 20 6f 66 20 65 6e 74 72 69  wrong # of entri
2590: 65 73 20 69 6e 20 69 6e 64 65 78 20 69 32 7d 7d  es in index i2}}
25a0: 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 70 72 61  .    do_test pra
25b0: 67 6d 61 2d 33 2e 35 20 7b 0a 20 20 20 20 20 20  gma-3.5 {.      
25c0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
25d0: 20 20 50 52 41 47 4d 41 20 69 6e 74 65 67 72 69    PRAGMA integri
25e0: 74 79 5f 63 68 65 63 6b 3d 34 0a 20 20 20 20 20  ty_check=4.     
25f0: 20 7d 0a 20 20 20 20 7d 20 7b 7b 72 6f 77 20 31   }.    } {{row 1
2600: 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e   missing from in
2610: 64 65 78 20 69 32 7d 20 7b 72 6f 77 20 32 20 6d  dex i2} {row 2 m
2620: 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65  issing from inde
2630: 78 20 69 32 7d 20 7b 77 72 6f 6e 67 20 23 20 6f  x i2} {wrong # o
2640: 66 20 65 6e 74 72 69 65 73 20 69 6e 20 69 6e 64  f entries in ind
2650: 65 78 20 69 32 7d 20 7b 72 6f 77 20 31 20 6d 69  ex i2} {row 1 mi
2660: 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78  ssing from index
2670: 20 69 32 7d 7d 0a 20 20 20 20 64 6f 5f 74 65 73   i2}}.    do_tes
2680: 74 20 70 72 61 67 6d 61 2d 33 2e 36 20 7b 0a 20  t pragma-3.6 {. 
2690: 20 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20       execsql {. 
26a0: 20 20 20 20 20 20 20 50 52 41 47 4d 41 20 69 6e         PRAGMA in
26b0: 74 65 67 72 69 74 79 5f 63 68 65 63 6b 3d 78 79  tegrity_check=xy
26c0: 7a 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 20  z.      }.    } 
26d0: 7b 7b 72 6f 77 20 31 20 6d 69 73 73 69 6e 67 20  {{row 1 missing 
26e0: 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b  from index i2} {
26f0: 72 6f 77 20 32 20 6d 69 73 73 69 6e 67 20 66 72  row 2 missing fr
2700: 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b 77 72  om index i2} {wr
2710: 6f 6e 67 20 23 20 6f 66 20 65 6e 74 72 69 65 73  ong # of entries
2720: 20 69 6e 20 69 6e 64 65 78 20 69 32 7d 20 7b 72   in index i2} {r
2730: 6f 77 20 31 20 6d 69 73 73 69 6e 67 20 66 72 6f  ow 1 missing fro
2740: 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b 72 6f 77  m index i2} {row
2750: 20 32 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20   2 missing from 
2760: 69 6e 64 65 78 20 69 32 7d 20 7b 77 72 6f 6e 67  index i2} {wrong
2770: 20 23 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e   # of entries in
2780: 20 69 6e 64 65 78 20 69 32 7d 7d 0a 20 20 20 20   index i2}}.    
2790: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 33  do_test pragma-3
27a0: 2e 37 20 7b 0a 20 20 20 20 20 20 65 78 65 63 73  .7 {.      execs
27b0: 71 6c 20 7b 0a 20 20 20 20 20 20 20 20 50 52 41  ql {.        PRA
27c0: 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68  GMA integrity_ch
27d0: 65 63 6b 3d 30 0a 20 20 20 20 20 20 7d 0a 20 20  eck=0.      }.  
27e0: 20 20 7d 20 7b 7b 72 6f 77 20 31 20 6d 69 73 73    } {{row 1 miss
27f0: 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69  ing from index i
2800: 32 7d 20 7b 72 6f 77 20 32 20 6d 69 73 73 69 6e  2} {row 2 missin
2810: 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d  g from index i2}
2820: 20 7b 77 72 6f 6e 67 20 23 20 6f 66 20 65 6e 74   {wrong # of ent
2830: 72 69 65 73 20 69 6e 20 69 6e 64 65 78 20 69 32  ries in index i2
2840: 7d 20 7b 72 6f 77 20 31 20 6d 69 73 73 69 6e 67  } {row 1 missing
2850: 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20   from index i2} 
2860: 7b 72 6f 77 20 32 20 6d 69 73 73 69 6e 67 20 66  {row 2 missing f
2870: 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b 77  rom index i2} {w
2880: 72 6f 6e 67 20 23 20 6f 66 20 65 6e 74 72 69 65  rong # of entrie
2890: 73 20 69 6e 20 69 6e 64 65 78 20 69 32 7d 7d 0a  s in index i2}}.
28a0: 20 20 0a 20 20 20 20 23 20 41 64 64 20 61 64 64    .    # Add add
28b0: 69 74 69 6f 6e 61 6c 20 63 6f 72 72 75 70 74 69  itional corrupti
28c0: 6f 6e 20 62 79 20 61 70 70 65 6e 64 69 6e 67 20  on by appending 
28d0: 75 6e 75 73 65 64 20 70 61 67 65 73 20 74 6f 20  unused pages to 
28e0: 74 68 65 20 65 6e 64 20 6f 66 0a 20 20 20 20 23  the end of.    #
28f0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
2900: 6c 65 20 74 65 73 74 65 72 72 2e 64 62 0a 20 20  le testerr.db.  
2910: 20 20 23 0a 20 20 20 20 64 6f 5f 74 65 73 74 20    #.    do_test 
2920: 70 72 61 67 6d 61 2d 33 2e 38 20 7b 0a 20 20 20  pragma-3.8 {.   
2930: 20 20 20 65 78 65 63 73 71 6c 20 7b 44 45 54 41     execsql {DETA
2940: 43 48 20 74 32 7d 0a 20 20 20 20 20 20 66 6f 72  CH t2}.      for
2950: 63 65 64 65 6c 65 74 65 20 74 65 73 74 65 72 72  cedelete testerr
2960: 2e 64 62 20 74 65 73 74 65 72 72 2e 64 62 2d 6a  .db testerr.db-j
2970: 6f 75 72 6e 61 6c 0a 20 20 20 20 20 20 73 65 74  ournal.      set
2980: 20 6f 75 74 20 5b 6f 70 65 6e 20 74 65 73 74 65   out [open teste
2990: 72 72 2e 64 62 20 77 5d 0a 20 20 20 20 20 20 66  rr.db w].      f
29a0: 63 6f 6e 66 69 67 75 72 65 20 24 6f 75 74 20 2d  configure $out -
29b0: 74 72 61 6e 73 6c 61 74 69 6f 6e 20 62 69 6e 61  translation bina
29c0: 72 79 0a 20 20 20 20 20 20 73 65 74 20 69 6e 20  ry.      set in 
29d0: 5b 6f 70 65 6e 20 74 65 73 74 2e 64 62 20 72 5d  [open test.db r]
29e0: 0a 20 20 20 20 20 20 66 63 6f 6e 66 69 67 75 72  .      fconfigur
29f0: 65 20 24 69 6e 20 2d 74 72 61 6e 73 6c 61 74 69  e $in -translati
2a00: 6f 6e 20 62 69 6e 61 72 79 0a 20 20 20 20 20 20  on binary.      
2a10: 70 75 74 73 20 2d 6e 6f 6e 65 77 6c 69 6e 65 20  puts -nonewline 
2a20: 24 6f 75 74 20 5b 72 65 61 64 20 24 69 6e 5d 0a  $out [read $in].
2a30: 20 20 20 20 20 20 73 65 65 6b 20 24 69 6e 20 30        seek $in 0
2a40: 0a 20 20 20 20 20 20 70 75 74 73 20 2d 6e 6f 6e  .      puts -non
2a50: 65 77 6c 69 6e 65 20 24 6f 75 74 20 5b 72 65 61  ewline $out [rea
2a60: 64 20 24 69 6e 5d 0a 20 20 20 20 20 20 63 6c 6f  d $in].      clo
2a70: 73 65 20 24 69 6e 0a 20 20 20 20 20 20 63 6c 6f  se $in.      clo
2a80: 73 65 20 24 6f 75 74 0a 20 20 20 20 20 20 68 65  se $out.      he
2a90: 78 69 6f 5f 77 72 69 74 65 20 74 65 73 74 65 72  xio_write tester
2aa0: 72 2e 64 62 20 32 38 20 30 30 30 30 30 30 30 30  r.db 28 00000000
2ab0: 0a 20 20 20 20 20 20 65 78 65 63 73 71 6c 20 7b  .      execsql {
2ac0: 52 45 49 4e 44 45 58 20 74 32 7d 0a 20 20 20 20  REINDEX t2}.    
2ad0: 20 20 65 78 65 63 73 71 6c 20 7b 50 52 41 47 4d    execsql {PRAGM
2ae0: 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63  A integrity_chec
2af0: 6b 7d 0a 20 20 20 20 7d 20 7b 6f 6b 7d 0a 20 20  k}.    } {ok}.  
2b00: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
2b10: 2d 33 2e 38 2e 31 20 7b 0a 20 20 20 20 20 20 65  -3.8.1 {.      e
2b20: 78 65 63 73 71 6c 20 7b 50 52 41 47 4d 41 20 71  xecsql {PRAGMA q
2b30: 75 69 63 6b 5f 63 68 65 63 6b 7d 0a 20 20 20 20  uick_check}.    
2b40: 7d 20 7b 6f 6b 7d 0a 20 20 20 20 64 6f 5f 74 65  } {ok}.    do_te
2b50: 73 74 20 70 72 61 67 6d 61 2d 33 2e 38 2e 32 20  st pragma-3.8.2 
2b60: 7b 0a 20 20 20 20 20 20 65 78 65 63 73 71 6c 20  {.      execsql 
2b70: 7b 50 52 41 47 4d 41 20 51 55 49 43 4b 5f 43 48  {PRAGMA QUICK_CH
2b80: 45 43 4b 7d 0a 20 20 20 20 7d 20 7b 6f 6b 7d 0a  ECK}.    } {ok}.
2b90: 20 20 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67      do_test prag
2ba0: 6d 61 2d 33 2e 39 20 7b 0a 20 20 20 20 20 20 65  ma-3.9 {.      e
2bb0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 20  xecsql {.       
2bc0: 20 41 54 54 41 43 48 20 27 74 65 73 74 65 72 72   ATTACH 'testerr
2bd0: 2e 64 62 27 20 41 53 20 74 32 3b 0a 20 20 20 20  .db' AS t2;.    
2be0: 20 20 20 20 50 52 41 47 4d 41 20 69 6e 74 65 67      PRAGMA integ
2bf0: 72 69 74 79 5f 63 68 65 63 6b 0a 20 20 20 20 20  rity_check.     
2c00: 20 7d 0a 20 20 20 20 7d 20 7b 7b 2a 2a 2a 20 69   }.    } {{*** i
2c10: 6e 20 64 61 74 61 62 61 73 65 20 74 32 20 2a 2a  n database t2 **
2c20: 2a 0a 50 61 67 65 20 34 20 69 73 20 6e 65 76 65  *.Page 4 is neve
2c30: 72 20 75 73 65 64 0a 50 61 67 65 20 35 20 69 73  r used.Page 5 is
2c40: 20 6e 65 76 65 72 20 75 73 65 64 0a 50 61 67 65   never used.Page
2c50: 20 36 20 69 73 20 6e 65 76 65 72 20 75 73 65 64   6 is never used
2c60: 7d 20 7b 72 6f 77 20 31 20 6d 69 73 73 69 6e 67  } {row 1 missing
2c70: 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20   from index i2} 
2c80: 7b 72 6f 77 20 32 20 6d 69 73 73 69 6e 67 20 66  {row 2 missing f
2c90: 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b 77  rom index i2} {w
2ca0: 72 6f 6e 67 20 23 20 6f 66 20 65 6e 74 72 69 65  rong # of entrie
2cb0: 73 20 69 6e 20 69 6e 64 65 78 20 69 32 7d 7d 0a  s in index i2}}.
2cc0: 20 20 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67      do_test prag
2cd0: 6d 61 2d 33 2e 31 30 20 7b 0a 20 20 20 20 20 20  ma-3.10 {.      
2ce0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
2cf0: 20 20 50 52 41 47 4d 41 20 69 6e 74 65 67 72 69    PRAGMA integri
2d00: 74 79 5f 63 68 65 63 6b 3d 31 0a 20 20 20 20 20  ty_check=1.     
2d10: 20 7d 0a 20 20 20 20 7d 20 7b 7b 2a 2a 2a 20 69   }.    } {{*** i
2d20: 6e 20 64 61 74 61 62 61 73 65 20 74 32 20 2a 2a  n database t2 **
2d30: 2a 0a 50 61 67 65 20 34 20 69 73 20 6e 65 76 65  *.Page 4 is neve
2d40: 72 20 75 73 65 64 7d 7d 0a 20 20 20 20 64 6f 5f  r used}}.    do_
2d50: 74 65 73 74 20 70 72 61 67 6d 61 2d 33 2e 31 31  test pragma-3.11
2d60: 20 7b 0a 20 20 20 20 20 20 65 78 65 63 73 71 6c   {.      execsql
2d70: 20 7b 0a 20 20 20 20 20 20 20 20 50 52 41 47 4d   {.        PRAGM
2d80: 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63  A integrity_chec
2d90: 6b 3d 35 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  k=5.      }.    
2da0: 7d 20 7b 7b 2a 2a 2a 20 69 6e 20 64 61 74 61 62  } {{*** in datab
2db0: 61 73 65 20 74 32 20 2a 2a 2a 0a 50 61 67 65 20  ase t2 ***.Page 
2dc0: 34 20 69 73 20 6e 65 76 65 72 20 75 73 65 64 0a  4 is never used.
2dd0: 50 61 67 65 20 35 20 69 73 20 6e 65 76 65 72 20  Page 5 is never 
2de0: 75 73 65 64 0a 50 61 67 65 20 36 20 69 73 20 6e  used.Page 6 is n
2df0: 65 76 65 72 20 75 73 65 64 7d 20 7b 72 6f 77 20  ever used} {row 
2e00: 31 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69  1 missing from i
2e10: 6e 64 65 78 20 69 32 7d 20 7b 72 6f 77 20 32 20  ndex i2} {row 2 
2e20: 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64  missing from ind
2e30: 65 78 20 69 32 7d 7d 0a 20 20 20 20 64 6f 5f 74  ex i2}}.    do_t
2e40: 65 73 74 20 70 72 61 67 6d 61 2d 33 2e 31 32 20  est pragma-3.12 
2e50: 7b 0a 20 20 20 20 20 20 65 78 65 63 73 71 6c 20  {.      execsql 
2e60: 7b 0a 20 20 20 20 20 20 20 20 50 52 41 47 4d 41  {.        PRAGMA
2e70: 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b   integrity_check
2e80: 3d 34 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  =4.      }.    }
2e90: 20 7b 7b 2a 2a 2a 20 69 6e 20 64 61 74 61 62 61   {{*** in databa
2ea0: 73 65 20 74 32 20 2a 2a 2a 0a 50 61 67 65 20 34  se t2 ***.Page 4
2eb0: 20 69 73 20 6e 65 76 65 72 20 75 73 65 64 0a 50   is never used.P
2ec0: 61 67 65 20 35 20 69 73 20 6e 65 76 65 72 20 75  age 5 is never u
2ed0: 73 65 64 0a 50 61 67 65 20 36 20 69 73 20 6e 65  sed.Page 6 is ne
2ee0: 76 65 72 20 75 73 65 64 7d 20 7b 72 6f 77 20 31  ver used} {row 1
2ef0: 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e   missing from in
2f00: 64 65 78 20 69 32 7d 7d 0a 20 20 20 20 64 6f 5f  dex i2}}.    do_
2f10: 74 65 73 74 20 70 72 61 67 6d 61 2d 33 2e 31 33  test pragma-3.13
2f20: 20 7b 0a 20 20 20 20 20 20 65 78 65 63 73 71 6c   {.      execsql
2f30: 20 7b 0a 20 20 20 20 20 20 20 20 50 52 41 47 4d   {.        PRAGM
2f40: 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63  A integrity_chec
2f50: 6b 3d 33 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  k=3.      }.    
2f60: 7d 20 7b 7b 2a 2a 2a 20 69 6e 20 64 61 74 61 62  } {{*** in datab
2f70: 61 73 65 20 74 32 20 2a 2a 2a 0a 50 61 67 65 20  ase t2 ***.Page 
2f80: 34 20 69 73 20 6e 65 76 65 72 20 75 73 65 64 0a  4 is never used.
2f90: 50 61 67 65 20 35 20 69 73 20 6e 65 76 65 72 20  Page 5 is never 
2fa0: 75 73 65 64 0a 50 61 67 65 20 36 20 69 73 20 6e  used.Page 6 is n
2fb0: 65 76 65 72 20 75 73 65 64 7d 7d 0a 20 20 20 20  ever used}}.    
2fc0: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 33  do_test pragma-3
2fd0: 2e 31 34 20 7b 0a 20 20 20 20 20 20 65 78 65 63  .14 {.      exec
2fe0: 73 71 6c 20 7b 0a 20 20 20 20 20 20 20 20 50 52  sql {.        PR
2ff0: 41 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63  AGMA integrity_c
3000: 68 65 63 6b 28 32 29 0a 20 20 20 20 20 20 7d 0a  heck(2).      }.
3010: 20 20 20 20 7d 20 7b 7b 2a 2a 2a 20 69 6e 20 64      } {{*** in d
3020: 61 74 61 62 61 73 65 20 74 32 20 2a 2a 2a 0a 50  atabase t2 ***.P
3030: 61 67 65 20 34 20 69 73 20 6e 65 76 65 72 20 75  age 4 is never u
3040: 73 65 64 0a 50 61 67 65 20 35 20 69 73 20 6e 65  sed.Page 5 is ne
3050: 76 65 72 20 75 73 65 64 7d 7d 0a 20 20 20 20 64  ver used}}.    d
3060: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 33 2e  o_test pragma-3.
3070: 31 35 20 7b 0a 20 20 20 20 20 20 65 78 65 63 73  15 {.      execs
3080: 71 6c 20 7b 0a 20 20 20 20 20 20 20 20 41 54 54  ql {.        ATT
3090: 41 43 48 20 27 74 65 73 74 65 72 72 2e 64 62 27  ACH 'testerr.db'
30a0: 20 41 53 20 74 33 3b 0a 20 20 20 20 20 20 20 20   AS t3;.        
30b0: 50 52 41 47 4d 41 20 69 6e 74 65 67 72 69 74 79  PRAGMA integrity
30c0: 5f 63 68 65 63 6b 0a 20 20 20 20 20 20 7d 0a 20  _check.      }. 
30d0: 20 20 20 7d 20 7b 7b 2a 2a 2a 20 69 6e 20 64 61     } {{*** in da
30e0: 74 61 62 61 73 65 20 74 32 20 2a 2a 2a 0a 50 61  tabase t2 ***.Pa
30f0: 67 65 20 34 20 69 73 20 6e 65 76 65 72 20 75 73  ge 4 is never us
3100: 65 64 0a 50 61 67 65 20 35 20 69 73 20 6e 65 76  ed.Page 5 is nev
3110: 65 72 20 75 73 65 64 0a 50 61 67 65 20 36 20 69  er used.Page 6 i
3120: 73 20 6e 65 76 65 72 20 75 73 65 64 7d 20 7b 72  s never used} {r
3130: 6f 77 20 31 20 6d 69 73 73 69 6e 67 20 66 72 6f  ow 1 missing fro
3140: 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b 72 6f 77  m index i2} {row
3150: 20 32 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20   2 missing from 
3160: 69 6e 64 65 78 20 69 32 7d 20 7b 77 72 6f 6e 67  index i2} {wrong
3170: 20 23 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e   # of entries in
3180: 20 69 6e 64 65 78 20 69 32 7d 20 7b 2a 2a 2a 20   index i2} {*** 
3190: 69 6e 20 64 61 74 61 62 61 73 65 20 74 33 20 2a  in database t3 *
31a0: 2a 2a 0a 50 61 67 65 20 34 20 69 73 20 6e 65 76  **.Page 4 is nev
31b0: 65 72 20 75 73 65 64 0a 50 61 67 65 20 35 20 69  er used.Page 5 i
31c0: 73 20 6e 65 76 65 72 20 75 73 65 64 0a 50 61 67  s never used.Pag
31d0: 65 20 36 20 69 73 20 6e 65 76 65 72 20 75 73 65  e 6 is never use
31e0: 64 7d 20 7b 72 6f 77 20 31 20 6d 69 73 73 69 6e  d} {row 1 missin
31f0: 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d  g from index i2}
3200: 20 7b 72 6f 77 20 32 20 6d 69 73 73 69 6e 67 20   {row 2 missing 
3210: 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b  from index i2} {
3220: 77 72 6f 6e 67 20 23 20 6f 66 20 65 6e 74 72 69  wrong # of entri
3230: 65 73 20 69 6e 20 69 6e 64 65 78 20 69 32 7d 7d  es in index i2}}
3240: 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 70 72 61  .    do_test pra
3250: 67 6d 61 2d 33 2e 31 36 20 7b 0a 20 20 20 20 20  gma-3.16 {.     
3260: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20   execsql {.     
3270: 20 20 20 50 52 41 47 4d 41 20 69 6e 74 65 67 72     PRAGMA integr
3280: 69 74 79 5f 63 68 65 63 6b 28 31 30 29 0a 20 20  ity_check(10).  
3290: 20 20 20 20 7d 0a 20 20 20 20 7d 20 7b 7b 2a 2a      }.    } {{**
32a0: 2a 20 69 6e 20 64 61 74 61 62 61 73 65 20 74 32  * in database t2
32b0: 20 2a 2a 2a 0a 50 61 67 65 20 34 20 69 73 20 6e   ***.Page 4 is n
32c0: 65 76 65 72 20 75 73 65 64 0a 50 61 67 65 20 35  ever used.Page 5
32d0: 20 69 73 20 6e 65 76 65 72 20 75 73 65 64 0a 50   is never used.P
32e0: 61 67 65 20 36 20 69 73 20 6e 65 76 65 72 20 75  age 6 is never u
32f0: 73 65 64 7d 20 7b 72 6f 77 20 31 20 6d 69 73 73  sed} {row 1 miss
3300: 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69  ing from index i
3310: 32 7d 20 7b 72 6f 77 20 32 20 6d 69 73 73 69 6e  2} {row 2 missin
3320: 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d  g from index i2}
3330: 20 7b 77 72 6f 6e 67 20 23 20 6f 66 20 65 6e 74   {wrong # of ent
3340: 72 69 65 73 20 69 6e 20 69 6e 64 65 78 20 69 32  ries in index i2
3350: 7d 20 7b 2a 2a 2a 20 69 6e 20 64 61 74 61 62 61  } {*** in databa
3360: 73 65 20 74 33 20 2a 2a 2a 0a 50 61 67 65 20 34  se t3 ***.Page 4
3370: 20 69 73 20 6e 65 76 65 72 20 75 73 65 64 0a 50   is never used.P
3380: 61 67 65 20 35 20 69 73 20 6e 65 76 65 72 20 75  age 5 is never u
3390: 73 65 64 0a 50 61 67 65 20 36 20 69 73 20 6e 65  sed.Page 6 is ne
33a0: 76 65 72 20 75 73 65 64 7d 20 7b 72 6f 77 20 31  ver used} {row 1
33b0: 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e   missing from in
33c0: 64 65 78 20 69 32 7d 7d 0a 20 20 20 20 64 6f 5f  dex i2}}.    do_
33d0: 74 65 73 74 20 70 72 61 67 6d 61 2d 33 2e 31 37  test pragma-3.17
33e0: 20 7b 0a 20 20 20 20 20 20 65 78 65 63 73 71 6c   {.      execsql
33f0: 20 7b 0a 20 20 20 20 20 20 20 20 50 52 41 47 4d   {.        PRAGM
3400: 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63  A integrity_chec
3410: 6b 3d 38 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  k=8.      }.    
3420: 7d 20 7b 7b 2a 2a 2a 20 69 6e 20 64 61 74 61 62  } {{*** in datab
3430: 61 73 65 20 74 32 20 2a 2a 2a 0a 50 61 67 65 20  ase t2 ***.Page 
3440: 34 20 69 73 20 6e 65 76 65 72 20 75 73 65 64 0a  4 is never used.
3450: 50 61 67 65 20 35 20 69 73 20 6e 65 76 65 72 20  Page 5 is never 
3460: 75 73 65 64 0a 50 61 67 65 20 36 20 69 73 20 6e  used.Page 6 is n
3470: 65 76 65 72 20 75 73 65 64 7d 20 7b 72 6f 77 20  ever used} {row 
3480: 31 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69  1 missing from i
3490: 6e 64 65 78 20 69 32 7d 20 7b 72 6f 77 20 32 20  ndex i2} {row 2 
34a0: 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64  missing from ind
34b0: 65 78 20 69 32 7d 20 7b 77 72 6f 6e 67 20 23 20  ex i2} {wrong # 
34c0: 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 69 6e  of entries in in
34d0: 64 65 78 20 69 32 7d 20 7b 2a 2a 2a 20 69 6e 20  dex i2} {*** in 
34e0: 64 61 74 61 62 61 73 65 20 74 33 20 2a 2a 2a 0a  database t3 ***.
34f0: 50 61 67 65 20 34 20 69 73 20 6e 65 76 65 72 20  Page 4 is never 
3500: 75 73 65 64 0a 50 61 67 65 20 35 20 69 73 20 6e  used.Page 5 is n
3510: 65 76 65 72 20 75 73 65 64 7d 7d 0a 20 20 20 20  ever used}}.    
3520: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 33  do_test pragma-3
3530: 2e 31 38 20 7b 0a 20 20 20 20 20 20 65 78 65 63  .18 {.      exec
3540: 73 71 6c 20 7b 0a 20 20 20 20 20 20 20 20 50 52  sql {.        PR
3550: 41 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63  AGMA integrity_c
3560: 68 65 63 6b 3d 34 0a 20 20 20 20 20 20 7d 0a 20  heck=4.      }. 
3570: 20 20 20 7d 20 7b 7b 2a 2a 2a 20 69 6e 20 64 61     } {{*** in da
3580: 74 61 62 61 73 65 20 74 32 20 2a 2a 2a 0a 50 61  tabase t2 ***.Pa
3590: 67 65 20 34 20 69 73 20 6e 65 76 65 72 20 75 73  ge 4 is never us
35a0: 65 64 0a 50 61 67 65 20 35 20 69 73 20 6e 65 76  ed.Page 5 is nev
35b0: 65 72 20 75 73 65 64 0a 50 61 67 65 20 36 20 69  er used.Page 6 i
35c0: 73 20 6e 65 76 65 72 20 75 73 65 64 7d 20 7b 72  s never used} {r
35d0: 6f 77 20 31 20 6d 69 73 73 69 6e 67 20 66 72 6f  ow 1 missing fro
35e0: 6d 20 69 6e 64 65 78 20 69 32 7d 7d 0a 20 20 7d  m index i2}}.  }
35f0: 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .  do_test pragm
3600: 61 2d 33 2e 31 39 20 7b 0a 20 20 20 20 63 61 74  a-3.19 {.    cat
3610: 63 68 20 7b 64 62 20 63 6c 6f 73 65 7d 0a 20 20  ch {db close}.  
3620: 20 20 66 6f 72 63 65 64 65 6c 65 74 65 20 74 65    forcedelete te
3630: 73 74 2e 64 62 20 74 65 73 74 2e 64 62 2d 6a 6f  st.db test.db-jo
3640: 75 72 6e 61 6c 0a 20 20 20 20 73 71 6c 69 74 65  urnal.    sqlite
3650: 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20 20  3 db test.db.   
3660: 20 64 62 20 65 76 61 6c 20 7b 50 52 41 47 4d 41   db eval {PRAGMA
3670: 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b   integrity_check
3680: 7d 0a 20 20 7d 20 7b 6f 6b 7d 0a 7d 0a 0a 23 20  }.  } {ok}.}..# 
3690: 56 65 72 69 66 79 20 74 68 61 74 20 50 52 41 47  Verify that PRAG
36a0: 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65  MA integrity_che
36b0: 63 6b 20 63 61 74 63 68 65 73 20 55 4e 49 51 55  ck catches UNIQU
36c0: 45 20 61 6e 64 20 4e 4f 54 20 4e 55 4c 4c 0a 23  E and NOT NULL.#
36d0: 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c   constraint viol
36e0: 61 74 69 6f 6e 73 2e 0a 23 0a 73 71 6c 69 74 65  ations..#.sqlite
36f0: 33 5f 64 62 5f 63 6f 6e 66 69 67 20 64 62 20 44  3_db_config db D
3700: 45 46 45 4e 53 49 56 45 20 30 0a 64 6f 5f 65 78  EFENSIVE 0.do_ex
3710: 65 63 73 71 6c 5f 74 65 73 74 20 70 72 61 67 6d  ecsql_test pragm
3720: 61 2d 33 2e 32 30 20 7b 0a 20 20 43 52 45 41 54  a-3.20 {.  CREAT
3730: 45 20 54 41 42 4c 45 20 74 31 28 61 2c 62 29 3b  E TABLE t1(a,b);
3740: 0a 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20  .  CREATE INDEX 
3750: 74 31 61 20 4f 4e 20 74 31 28 61 29 3b 0a 20 20  t1a ON t1(a);.  
3760: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56  INSERT INTO t1 V
3770: 41 4c 55 45 53 28 31 2c 31 29 2c 28 32 2c 32 29  ALUES(1,1),(2,2)
3780: 2c 28 33 2c 33 29 2c 28 32 2c 34 29 2c 28 4e 55  ,(3,3),(2,4),(NU
3790: 4c 4c 2c 35 29 2c 28 4e 55 4c 4c 2c 36 29 3b 0a  LL,5),(NULL,6);.
37a0: 20 20 50 52 41 47 4d 41 20 77 72 69 74 61 62 6c    PRAGMA writabl
37b0: 65 5f 73 63 68 65 6d 61 3d 4f 4e 3b 0a 20 20 55  e_schema=ON;.  U
37c0: 50 44 41 54 45 20 73 71 6c 69 74 65 5f 6d 61 73  PDATE sqlite_mas
37d0: 74 65 72 20 53 45 54 20 73 71 6c 3d 27 43 52 45  ter SET sql='CRE
37e0: 41 54 45 20 55 4e 49 51 55 45 20 49 4e 44 45 58  ATE UNIQUE INDEX
37f0: 20 74 31 61 20 4f 4e 20 74 31 28 61 29 27 0a 20   t1a ON t1(a)'. 
3800: 20 20 57 48 45 52 45 20 6e 61 6d 65 3d 27 74 31    WHERE name='t1
3810: 61 27 3b 0a 20 20 55 50 44 41 54 45 20 73 71 6c  a';.  UPDATE sql
3820: 69 74 65 5f 6d 61 73 74 65 72 20 53 45 54 20 73  ite_master SET s
3830: 71 6c 3d 27 43 52 45 41 54 45 20 54 41 42 4c 45  ql='CREATE TABLE
3840: 20 74 31 28 61 20 4e 4f 54 20 4e 55 4c 4c 2c 62   t1(a NOT NULL,b
3850: 29 27 0a 20 20 20 57 48 45 52 45 20 6e 61 6d 65  )'.   WHERE name
3860: 3d 27 74 31 27 3b 0a 20 20 50 52 41 47 4d 41 20  ='t1';.  PRAGMA 
3870: 77 72 69 74 61 62 6c 65 5f 73 63 68 65 6d 61 3d  writable_schema=
3880: 4f 46 46 3b 0a 20 20 41 4c 54 45 52 20 54 41 42  OFF;.  ALTER TAB
3890: 4c 45 20 74 31 20 52 45 4e 41 4d 45 20 54 4f 20  LE t1 RENAME TO 
38a0: 74 31 78 3b 0a 20 20 50 52 41 47 4d 41 20 69 6e  t1x;.  PRAGMA in
38b0: 74 65 67 72 69 74 79 5f 63 68 65 63 6b 3b 0a 7d  tegrity_check;.}
38c0: 20 7b 7b 6e 6f 6e 2d 75 6e 69 71 75 65 20 65 6e   {{non-unique en
38d0: 74 72 79 20 69 6e 20 69 6e 64 65 78 20 74 31 61  try in index t1a
38e0: 7d 20 7b 4e 55 4c 4c 20 76 61 6c 75 65 20 69 6e  } {NULL value in
38f0: 20 74 31 78 2e 61 7d 20 7b 6e 6f 6e 2d 75 6e 69   t1x.a} {non-uni
3900: 71 75 65 20 65 6e 74 72 79 20 69 6e 20 69 6e 64  que entry in ind
3910: 65 78 20 74 31 61 7d 20 7b 4e 55 4c 4c 20 76 61  ex t1a} {NULL va
3920: 6c 75 65 20 69 6e 20 74 31 78 2e 61 7d 7d 0a 64  lue in t1x.a}}.d
3930: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 70  o_execsql_test p
3940: 72 61 67 6d 61 2d 33 2e 32 31 20 7b 0a 20 20 50  ragma-3.21 {.  P
3950: 52 41 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f  RAGMA integrity_
3960: 63 68 65 63 6b 28 33 29 3b 0a 7d 20 7b 7b 6e 6f  check(3);.} {{no
3970: 6e 2d 75 6e 69 71 75 65 20 65 6e 74 72 79 20 69  n-unique entry i
3980: 6e 20 69 6e 64 65 78 20 74 31 61 7d 20 7b 4e 55  n index t1a} {NU
3990: 4c 4c 20 76 61 6c 75 65 20 69 6e 20 74 31 78 2e  LL value in t1x.
39a0: 61 7d 20 7b 6e 6f 6e 2d 75 6e 69 71 75 65 20 65  a} {non-unique e
39b0: 6e 74 72 79 20 69 6e 20 69 6e 64 65 78 20 74 31  ntry in index t1
39c0: 61 7d 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74  a}}.do_execsql_t
39d0: 65 73 74 20 70 72 61 67 6d 61 2d 33 2e 32 32 20  est pragma-3.22 
39e0: 7b 0a 20 20 50 52 41 47 4d 41 20 69 6e 74 65 67  {.  PRAGMA integ
39f0: 72 69 74 79 5f 63 68 65 63 6b 28 32 29 3b 0a 7d  rity_check(2);.}
3a00: 20 7b 7b 6e 6f 6e 2d 75 6e 69 71 75 65 20 65 6e   {{non-unique en
3a10: 74 72 79 20 69 6e 20 69 6e 64 65 78 20 74 31 61  try in index t1a
3a20: 7d 20 7b 4e 55 4c 4c 20 76 61 6c 75 65 20 69 6e  } {NULL value in
3a30: 20 74 31 78 2e 61 7d 7d 0a 64 6f 5f 65 78 65 63   t1x.a}}.do_exec
3a40: 73 71 6c 5f 74 65 73 74 20 70 72 61 67 6d 61 2d  sql_test pragma-
3a50: 33 2e 32 33 20 7b 0a 20 20 50 52 41 47 4d 41 20  3.23 {.  PRAGMA 
3a60: 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 28  integrity_check(
3a70: 31 29 3b 0a 7d 20 7b 7b 6e 6f 6e 2d 75 6e 69 71  1);.} {{non-uniq
3a80: 75 65 20 65 6e 74 72 79 20 69 6e 20 69 6e 64 65  ue entry in inde
3a90: 78 20 74 31 61 7d 7d 0a 0a 23 20 50 52 41 47 4d  x t1a}}..# PRAGM
3aa0: 41 20 69 6e 74 65 67 72 69 74 79 20 63 68 65 63  A integrity chec
3ab0: 6b 20 28 6f 72 20 6d 6f 72 65 20 73 70 65 63 69  k (or more speci
3ac0: 66 69 63 61 6c 6c 79 20 74 68 65 20 73 71 6c 69  fically the sqli
3ad0: 74 65 33 42 74 72 65 65 43 6f 75 6e 74 28 29 0a  te3BtreeCount().
3ae0: 23 20 69 6e 74 65 72 66 61 63 65 29 20 75 73 65  # interface) use
3af0: 64 20 74 6f 20 6c 65 61 76 65 20 69 6e 64 65 78  d to leave index
3b00: 20 63 75 72 73 6f 72 73 20 69 6e 20 61 6e 20 69   cursors in an i
3b10: 6e 63 6f 6e 73 69 73 74 65 6e 74 20 73 74 61 74  nconsistent stat
3b20: 65 0a 23 20 77 68 69 63 68 20 63 6f 75 6c 64 20  e.# which could 
3b30: 72 65 73 75 6c 74 20 69 6e 20 61 6e 20 61 73 73  result in an ass
3b40: 65 72 74 69 6f 6e 20 66 61 75 6c 74 20 69 6e 20  ertion fault in 
3b50: 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 28  sqlite3BtreeKey(
3b60: 29 0a 23 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20  ).# called from 
3b70: 73 61 76 65 43 75 72 73 6f 72 50 6f 73 69 74 69  saveCursorPositi
3b80: 6f 6e 28 29 20 69 66 20 63 6f 6e 74 65 6e 74 20  on() if content 
3b90: 69 73 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d 20  is removed from 
3ba0: 74 68 65 0a 23 20 69 6e 64 65 78 20 77 68 69 6c  the.# index whil
3bb0: 65 20 74 68 65 20 69 6e 74 65 67 72 69 74 79 5f  e the integrity_
3bc0: 63 68 65 63 6b 20 69 73 20 73 74 69 6c 6c 20 72  check is still r
3bd0: 75 6e 6e 69 6e 67 2e 20 20 54 68 69 73 20 74 65  unning.  This te
3be0: 73 74 20 76 65 72 69 66 69 65 73 0a 23 20 74 68  st verifies.# th
3bf0: 61 74 20 70 72 6f 62 6c 65 6d 20 68 61 73 20 62  at problem has b
3c00: 65 65 6e 20 66 69 78 65 64 2e 0a 23 0a 64 6f 5f  een fixed..#.do_
3c10: 74 65 73 74 20 70 72 61 67 6d 61 2d 33 2e 33 30  test pragma-3.30
3c20: 20 7b 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20 20   {.  db close.  
3c30: 64 65 6c 65 74 65 5f 66 69 6c 65 20 74 65 73 74  delete_file test
3c40: 2e 64 62 0a 20 20 73 71 6c 69 74 65 33 20 64 62  .db.  sqlite3 db
3c50: 20 74 65 73 74 2e 64 62 0a 20 20 64 62 20 65 76   test.db.  db ev
3c60: 61 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20  al {.    CREATE 
3c70: 54 41 42 4c 45 20 74 31 28 61 2c 62 2c 63 29 3b  TABLE t1(a,b,c);
3c80: 0a 20 20 20 20 57 49 54 48 20 52 45 43 55 52 53  .    WITH RECURS
3c90: 49 56 45 0a 20 20 20 20 20 20 63 28 69 29 20 41  IVE.      c(i) A
3ca0: 53 20 28 56 41 4c 55 45 53 28 31 29 20 55 4e 49  S (VALUES(1) UNI
3cb0: 4f 4e 20 41 4c 4c 20 53 45 4c 45 43 54 20 69 2b  ON ALL SELECT i+
3cc0: 31 20 46 52 4f 4d 20 63 20 57 48 45 52 45 20 69  1 FROM c WHERE i
3cd0: 3c 31 30 30 29 0a 20 20 20 20 49 4e 53 45 52 54  <100).    INSERT
3ce0: 20 49 4e 54 4f 20 74 31 28 61 2c 62 2c 63 29 20   INTO t1(a,b,c) 
3cf0: 53 45 4c 45 43 54 20 69 2c 20 70 72 69 6e 74 66  SELECT i, printf
3d00: 28 27 78 79 7a 25 30 38 78 27 2c 69 29 2c 20 32  ('xyz%08x',i), 2
3d10: 30 30 30 2d 69 20 46 52 4f 4d 20 63 3b 0a 20 20  000-i FROM c;.  
3d20: 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 74    CREATE INDEX t
3d30: 31 61 20 4f 4e 20 74 31 28 61 29 3b 0a 20 20 20  1a ON t1(a);.   
3d40: 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 74 31   CREATE INDEX t1
3d50: 62 63 20 4f 4e 20 74 31 28 62 2c 63 29 3b 0a 20  bc ON t1(b,c);. 
3d60: 20 7d 0a 20 20 64 62 20 65 76 61 6c 20 7b 50 52   }.  db eval {PR
3d70: 41 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63  AGMA integrity_c
3d80: 68 65 63 6b 7d 20 7b 0a 20 20 20 20 20 64 62 20  heck} {.     db 
3d90: 65 76 61 6c 20 7b 44 45 4c 45 54 45 20 46 52 4f  eval {DELETE FRO
3da0: 4d 20 74 31 7d 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a  M t1}.  }.} {}..
3db0: 23 20 54 65 73 74 20 6d 6f 64 69 66 79 69 6e 67  # Test modifying
3dc0: 20 74 68 65 20 63 61 63 68 65 5f 73 69 7a 65 20   the cache_size 
3dd0: 6f 66 20 61 6e 20 61 74 74 61 63 68 65 64 20 64  of an attached d
3de0: 61 74 61 62 61 73 65 2e 0a 69 66 63 61 70 61 62  atabase..ifcapab
3df0: 6c 65 20 70 61 67 65 72 5f 70 72 61 67 6d 61 73  le pager_pragmas
3e00: 26 26 61 74 74 61 63 68 20 7b 0a 64 6f 5f 74 65  &&attach {.do_te
3e10: 73 74 20 70 72 61 67 6d 61 2d 34 2e 31 20 7b 0a  st pragma-4.1 {.
3e20: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
3e30: 41 54 54 41 43 48 20 27 74 65 73 74 32 2e 64 62  ATTACH 'test2.db
3e40: 27 20 41 53 20 61 75 78 3b 0a 20 20 20 20 70 72  ' AS aux;.    pr
3e50: 61 67 6d 61 20 61 75 78 2e 63 61 63 68 65 5f 73  agma aux.cache_s
3e60: 69 7a 65 3b 0a 20 20 20 20 70 72 61 67 6d 61 20  ize;.    pragma 
3e70: 61 75 78 2e 64 65 66 61 75 6c 74 5f 63 61 63 68  aux.default_cach
3e80: 65 5f 73 69 7a 65 3b 0a 20 20 7d 20 0a 7d 20 5b  e_size;.  } .} [
3e90: 6c 69 73 74 20 24 44 46 4c 54 5f 43 41 43 48 45  list $DFLT_CACHE
3ea0: 5f 53 5a 20 24 44 46 4c 54 5f 43 41 43 48 45 5f  _SZ $DFLT_CACHE_
3eb0: 53 5a 5d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67  SZ].do_test prag
3ec0: 6d 61 2d 34 2e 32 20 7b 0a 20 20 65 78 65 63 73  ma-4.2 {.  execs
3ed0: 71 6c 20 7b 0a 20 20 20 20 70 72 61 67 6d 61 20  ql {.    pragma 
3ee0: 61 75 78 2e 63 61 63 68 65 5f 73 69 7a 65 20 3d  aux.cache_size =
3ef0: 20 35 30 3b 0a 20 20 20 20 70 72 61 67 6d 61 20   50;.    pragma 
3f00: 61 75 78 2e 63 61 63 68 65 5f 73 69 7a 65 3b 0a  aux.cache_size;.
3f10: 20 20 20 20 70 72 61 67 6d 61 20 61 75 78 2e 64      pragma aux.d
3f20: 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a  efault_cache_siz
3f30: 65 3b 0a 20 20 7d 20 0a 7d 20 5b 6c 69 73 74 20  e;.  } .} [list 
3f40: 35 30 20 24 44 46 4c 54 5f 43 41 43 48 45 5f 53  50 $DFLT_CACHE_S
3f50: 5a 5d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  Z].do_test pragm
3f60: 61 2d 34 2e 33 20 7b 0a 20 20 65 78 65 63 73 71  a-4.3 {.  execsq
3f70: 6c 20 7b 0a 20 20 20 20 70 72 61 67 6d 61 20 61  l {.    pragma a
3f80: 75 78 2e 64 65 66 61 75 6c 74 5f 63 61 63 68 65  ux.default_cache
3f90: 5f 73 69 7a 65 20 3d 20 34 35 36 3b 0a 20 20 20  _size = 456;.   
3fa0: 20 70 72 61 67 6d 61 20 61 75 78 2e 63 61 63 68   pragma aux.cach
3fb0: 65 5f 73 69 7a 65 3b 0a 20 20 20 20 70 72 61 67  e_size;.    prag
3fc0: 6d 61 20 61 75 78 2e 64 65 66 61 75 6c 74 5f 63  ma aux.default_c
3fd0: 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 7d 20 0a  ache_size;.  } .
3fe0: 7d 20 7b 34 35 36 20 34 35 36 7d 0a 64 6f 5f 74  } {456 456}.do_t
3ff0: 65 73 74 20 70 72 61 67 6d 61 2d 34 2e 34 20 7b  est pragma-4.4 {
4000: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
4010: 20 70 72 61 67 6d 61 20 63 61 63 68 65 5f 73 69   pragma cache_si
4020: 7a 65 3b 0a 20 20 20 20 70 72 61 67 6d 61 20 64  ze;.    pragma d
4030: 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a  efault_cache_siz
4040: 65 3b 0a 20 20 7d 20 0a 7d 20 5b 6c 69 73 74 20  e;.  } .} [list 
4050: 24 44 46 4c 54 5f 43 41 43 48 45 5f 53 5a 20 24  $DFLT_CACHE_SZ $
4060: 44 46 4c 54 5f 43 41 43 48 45 5f 53 5a 5d 0a 64  DFLT_CACHE_SZ].d
4070: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 34 2e  o_test pragma-4.
4080: 35 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  5 {.  execsql {.
4090: 20 20 20 20 44 45 54 41 43 48 20 61 75 78 3b 0a      DETACH aux;.
40a0: 20 20 20 20 41 54 54 41 43 48 20 27 74 65 73 74      ATTACH 'test
40b0: 33 2e 64 62 27 20 41 53 20 61 75 78 3b 0a 20 20  3.db' AS aux;.  
40c0: 20 20 70 72 61 67 6d 61 20 61 75 78 2e 63 61 63    pragma aux.cac
40d0: 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 70 72 61  he_size;.    pra
40e0: 67 6d 61 20 61 75 78 2e 64 65 66 61 75 6c 74 5f  gma aux.default_
40f0: 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 7d 20  cache_size;.  } 
4100: 0a 7d 20 5b 6c 69 73 74 20 24 44 46 4c 54 5f 43  .} [list $DFLT_C
4110: 41 43 48 45 5f 53 5a 20 24 44 46 4c 54 5f 43 41  ACHE_SZ $DFLT_CA
4120: 43 48 45 5f 53 5a 5d 0a 64 6f 5f 74 65 73 74 20  CHE_SZ].do_test 
4130: 70 72 61 67 6d 61 2d 34 2e 36 20 7b 0a 20 20 65  pragma-4.6 {.  e
4140: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 44 45 54  xecsql {.    DET
4150: 41 43 48 20 61 75 78 3b 0a 20 20 20 20 41 54 54  ACH aux;.    ATT
4160: 41 43 48 20 27 74 65 73 74 32 2e 64 62 27 20 41  ACH 'test2.db' A
4170: 53 20 61 75 78 3b 0a 20 20 20 20 70 72 61 67 6d  S aux;.    pragm
4180: 61 20 61 75 78 2e 63 61 63 68 65 5f 73 69 7a 65  a aux.cache_size
4190: 3b 0a 20 20 20 20 70 72 61 67 6d 61 20 61 75 78  ;.    pragma aux
41a0: 2e 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73  .default_cache_s
41b0: 69 7a 65 3b 0a 20 20 7d 20 0a 7d 20 7b 34 35 36  ize;.  } .} {456
41c0: 20 34 35 36 7d 0a 7d 20 3b 23 20 69 66 63 61 70   456}.} ;# ifcap
41d0: 61 62 6c 65 20 70 61 67 65 72 5f 70 72 61 67 6d  able pager_pragm
41e0: 61 73 0a 0a 23 20 54 65 73 74 20 74 68 61 74 20  as..# Test that 
41f0: 6d 6f 64 69 66 79 69 6e 67 20 74 68 65 20 73 79  modifying the sy
4200: 6e 63 2d 6c 65 76 65 6c 20 69 6e 20 74 68 65 20  nc-level in the 
4210: 6d 69 64 64 6c 65 20 6f 66 20 61 20 74 72 61 6e  middle of a tran
4220: 73 61 63 74 69 6f 6e 20 69 73 0a 23 20 64 69 73  saction is.# dis
4230: 61 6c 6c 6f 77 65 64 2e 0a 69 66 63 61 70 61 62  allowed..ifcapab
4240: 6c 65 20 70 61 67 65 72 5f 70 72 61 67 6d 61 73  le pager_pragmas
4250: 20 7b 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d   {.do_test pragm
4260: 61 2d 35 2e 30 20 7b 0a 20 20 65 78 65 63 73 71  a-5.0 {.  execsq
4270: 6c 20 7b 0a 20 20 20 20 70 72 61 67 6d 61 20 73  l {.    pragma s
4280: 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20 20 7d 20  ynchronous;.  } 
4290: 0a 7d 20 7b 32 7d 0a 64 6f 5f 74 65 73 74 20 70  .} {2}.do_test p
42a0: 72 61 67 6d 61 2d 35 2e 31 20 7b 0a 20 20 63 61  ragma-5.1 {.  ca
42b0: 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 42 45 47  tchsql {.    BEG
42c0: 49 4e 3b 0a 20 20 20 20 70 72 61 67 6d 61 20 73  IN;.    pragma s
42d0: 79 6e 63 68 72 6f 6e 6f 75 73 20 3d 20 4f 46 46  ynchronous = OFF
42e0: 3b 0a 20 20 7d 20 0a 7d 20 7b 31 20 7b 53 61 66  ;.  } .} {1 {Saf
42f0: 65 74 79 20 6c 65 76 65 6c 20 6d 61 79 20 6e 6f  ety level may no
4300: 74 20 62 65 20 63 68 61 6e 67 65 64 20 69 6e 73  t be changed ins
4310: 69 64 65 20 61 20 74 72 61 6e 73 61 63 74 69 6f  ide a transactio
4320: 6e 7d 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67  n}}.do_test prag
4330: 6d 61 2d 35 2e 32 20 7b 0a 20 20 65 78 65 63 73  ma-5.2 {.  execs
4340: 71 6c 20 7b 0a 20 20 20 20 70 72 61 67 6d 61 20  ql {.    pragma 
4350: 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20 20 7d  synchronous;.  }
4360: 20 0a 7d 20 7b 32 7d 0a 63 61 74 63 68 73 71 6c   .} {2}.catchsql
4370: 20 7b 43 4f 4d 4d 49 54 3b 7d 0a 7d 20 3b 23 20   {COMMIT;}.} ;# 
4380: 69 66 63 61 70 61 62 6c 65 20 70 61 67 65 72 5f  ifcapable pager_
4390: 70 72 61 67 6d 61 73 0a 0a 23 20 54 65 73 74 20  pragmas..# Test 
43a0: 73 63 68 65 6d 61 2d 71 75 65 72 79 20 70 72 61  schema-query pra
43b0: 67 6d 61 73 0a 23 0a 69 66 63 61 70 61 62 6c 65  gmas.#.ifcapable
43c0: 20 73 63 68 65 6d 61 5f 70 72 61 67 6d 61 73 20   schema_pragmas 
43d0: 7b 0a 69 66 63 61 70 61 62 6c 65 20 74 65 6d 70  {.ifcapable temp
43e0: 64 62 26 26 61 74 74 61 63 68 20 7b 0a 20 20 64  db&&attach {.  d
43f0: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 36 2e  o_test pragma-6.
4400: 31 20 7b 0a 20 20 20 20 73 65 74 20 72 65 73 20  1 {.    set res 
4410: 7b 7d 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b  {}.    execsql {
4420: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 73 71  SELECT * FROM sq
4430: 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72  lite_temp_master
4440: 7d 0a 20 20 20 20 66 6f 72 65 61 63 68 20 7b 69  }.    foreach {i
4450: 64 78 20 6e 61 6d 65 20 66 69 6c 65 7d 20 5b 65  dx name file} [e
4460: 78 65 63 73 71 6c 20 7b 70 72 61 67 6d 61 20 64  xecsql {pragma d
4470: 61 74 61 62 61 73 65 5f 6c 69 73 74 7d 5d 20 7b  atabase_list}] {
4480: 0a 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 72  .      lappend r
4490: 65 73 20 24 69 64 78 20 24 6e 61 6d 65 0a 20 20  es $idx $name.  
44a0: 20 20 7d 0a 20 20 20 20 73 65 74 20 72 65 73 0a    }.    set res.
44b0: 20 20 7d 20 7b 30 20 6d 61 69 6e 20 31 20 74 65    } {0 main 1 te
44c0: 6d 70 20 32 20 61 75 78 7d 0a 7d 0a 64 6f 5f 74  mp 2 aux}.}.do_t
44d0: 65 73 74 20 70 72 61 67 6d 61 2d 36 2e 32 20 7b  est pragma-6.2 {
44e0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
44f0: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 32   CREATE TABLE t2
4500: 28 61 20 54 59 50 45 5f 58 2c 20 62 20 5b 54 59  (a TYPE_X, b [TY
4510: 50 45 5f 59 5d 2c 20 63 20 22 54 59 50 45 5f 5a  PE_Y], c "TYPE_Z
4520: 22 29 3b 0a 20 20 20 20 70 72 61 67 6d 61 20 74  ");.    pragma t
4530: 61 62 6c 65 5f 69 6e 66 6f 28 74 32 29 0a 20 20  able_info(t2).  
4540: 7d 0a 7d 20 7b 30 20 61 20 54 59 50 45 5f 58 20  }.} {0 a TYPE_X 
4550: 30 20 7b 7d 20 30 20 31 20 62 20 54 59 50 45 5f  0 {} 0 1 b TYPE_
4560: 59 20 30 20 7b 7d 20 30 20 32 20 63 20 54 59 50  Y 0 {} 0 2 c TYP
4570: 45 5f 5a 20 30 20 7b 7d 20 30 7d 0a 64 6f 5f 74  E_Z 0 {} 0}.do_t
4580: 65 73 74 20 70 72 61 67 6d 61 2d 36 2e 32 2e 31  est pragma-6.2.1
4590: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
45a0: 20 20 20 70 72 61 67 6d 61 20 74 61 62 6c 65 5f     pragma table_
45b0: 69 6e 66 6f 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64  info;.  }.} {}.d
45c0: 62 20 6e 75 6c 6c 76 61 6c 75 65 20 3c 3c 4e 55  b nullvalue <<NU
45d0: 4c 4c 3e 3e 0a 64 6f 5f 74 65 73 74 20 70 72 61  LL>>.do_test pra
45e0: 67 6d 61 2d 36 2e 32 2e 32 20 7b 0a 20 20 65 78  gma-6.2.2 {.  ex
45f0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41  ecsql {.    CREA
4600: 54 45 20 54 41 42 4c 45 20 74 35 28 0a 20 20 20  TE TABLE t5(.   
4610: 20 20 20 61 20 54 45 58 54 20 44 45 46 41 55 4c     a TEXT DEFAUL
4620: 54 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 53 54  T CURRENT_TIMEST
4630: 41 4d 50 2c 20 0a 20 20 20 20 20 20 62 20 44 45  AMP, .      b DE
4640: 46 41 55 4c 54 20 28 35 2b 33 29 2c 0a 20 20 20  FAULT (5+3),.   
4650: 20 20 20 63 20 54 45 58 54 2c 0a 20 20 20 20 20     c TEXT,.     
4660: 20 64 20 49 4e 54 45 47 45 52 20 44 45 46 41 55   d INTEGER DEFAU
4670: 4c 54 20 4e 55 4c 4c 2c 0a 20 20 20 20 20 20 65  LT NULL,.      e
4680: 20 54 45 58 54 20 44 45 46 41 55 4c 54 20 27 27   TEXT DEFAULT ''
4690: 2c 0a 20 20 20 20 20 20 55 4e 49 51 55 45 28 62  ,.      UNIQUE(b
46a0: 2c 63 2c 64 29 2c 0a 20 20 20 20 20 20 50 52 49  ,c,d),.      PRI
46b0: 4d 41 52 59 20 4b 45 59 28 65 2c 62 2c 63 29 0a  MARY KEY(e,b,c).
46c0: 20 20 20 20 29 3b 0a 20 20 20 20 50 52 41 47 4d      );.    PRAGM
46d0: 41 20 74 61 62 6c 65 5f 69 6e 66 6f 28 74 35 29  A table_info(t5)
46e0: 3b 0a 20 20 7d 0a 7d 20 7b 30 20 61 20 54 45 58  ;.  }.} {0 a TEX
46f0: 54 20 30 20 43 55 52 52 45 4e 54 5f 54 49 4d 45  T 0 CURRENT_TIME
4700: 53 54 41 4d 50 20 30 20 31 20 62 20 7b 7d 20 30  STAMP 0 1 b {} 0
4710: 20 35 2b 33 20 32 20 32 20 63 20 54 45 58 54 20   5+3 2 2 c TEXT 
4720: 30 20 3c 3c 4e 55 4c 4c 3e 3e 20 33 20 33 20 64  0 <<NULL>> 3 3 d
4730: 20 49 4e 54 45 47 45 52 20 30 20 4e 55 4c 4c 20   INTEGER 0 NULL 
4740: 30 20 34 20 65 20 54 45 58 54 20 30 20 27 27 20  0 4 e TEXT 0 '' 
4750: 31 7d 0a 64 62 20 6e 75 6c 6c 76 61 6c 75 65 20  1}.db nullvalue 
4760: 7b 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  {}.do_test pragm
4770: 61 2d 36 2e 32 2e 33 20 7b 0a 20 20 65 78 65 63  a-6.2.3 {.  exec
4780: 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45  sql {.    CREATE
4790: 20 54 41 42 4c 45 20 74 32 5f 33 28 61 2c 62 20   TABLE t2_3(a,b 
47a0: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
47b0: 4b 45 59 2c 63 29 3b 0a 20 20 20 20 70 72 61 67  KEY,c);.    prag
47c0: 6d 61 20 74 61 62 6c 65 5f 69 6e 66 6f 28 74 32  ma table_info(t2
47d0: 5f 33 29 0a 20 20 7d 0a 7d 20 7b 30 20 61 20 7b  _3).  }.} {0 a {
47e0: 7d 20 30 20 7b 7d 20 30 20 31 20 62 20 49 4e 54  } 0 {} 0 1 b INT
47f0: 45 47 45 52 20 30 20 7b 7d 20 31 20 32 20 63 20  EGER 0 {} 1 2 c 
4800: 7b 7d 20 30 20 7b 7d 20 30 7d 0a 69 66 63 61 70  {} 0 {} 0}.ifcap
4810: 61 62 6c 65 20 7b 66 6f 72 65 69 67 6e 6b 65 79  able {foreignkey
4820: 7d 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 70 72  } {.  do_test pr
4830: 61 67 6d 61 2d 36 2e 33 2e 31 20 7b 0a 20 20 20  agma-6.3.1 {.   
4840: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20   execsql {.     
4850: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 33   CREATE TABLE t3
4860: 28 61 20 69 6e 74 20 72 65 66 65 72 65 6e 63 65  (a int reference
4870: 73 20 74 32 28 62 29 2c 20 62 20 55 4e 49 51 55  s t2(b), b UNIQU
4880: 45 29 3b 0a 20 20 20 20 20 20 70 72 61 67 6d 61  E);.      pragma
4890: 20 66 6f 72 65 69 67 6e 5f 6b 65 79 5f 6c 69 73   foreign_key_lis
48a0: 74 28 74 33 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  t(t3);.    }.  }
48b0: 20 7b 30 20 30 20 74 32 20 61 20 62 20 7b 4e 4f   {0 0 t2 a b {NO
48c0: 20 41 43 54 49 4f 4e 7d 20 7b 4e 4f 20 41 43 54   ACTION} {NO ACT
48d0: 49 4f 4e 7d 20 4e 4f 4e 45 7d 0a 20 20 64 6f 5f  ION} NONE}.  do_
48e0: 74 65 73 74 20 70 72 61 67 6d 61 2d 36 2e 33 2e  test pragma-6.3.
48f0: 32 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  2 {.    execsql 
4900: 7b 0a 20 20 20 20 20 20 70 72 61 67 6d 61 20 66  {.      pragma f
4910: 6f 72 65 69 67 6e 5f 6b 65 79 5f 6c 69 73 74 3b  oreign_key_list;
4920: 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 7d 0a 20 20  .    }.  } {}.  
4930: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 36  do_test pragma-6
4940: 2e 33 2e 33 20 7b 0a 20 20 20 20 65 78 65 63 73  .3.3 {.    execs
4950: 71 6c 20 7b 0a 20 20 20 20 20 20 70 72 61 67 6d  ql {.      pragm
4960: 61 20 66 6f 72 65 69 67 6e 5f 6b 65 79 5f 6c 69  a foreign_key_li
4970: 73 74 28 74 33 5f 62 6f 67 75 73 29 3b 0a 20 20  st(t3_bogus);.  
4980: 20 20 7d 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f    }.  } {}.  do_
4990: 74 65 73 74 20 70 72 61 67 6d 61 2d 36 2e 33 2e  test pragma-6.3.
49a0: 34 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  4 {.    execsql 
49b0: 7b 0a 20 20 20 20 20 20 70 72 61 67 6d 61 20 66  {.      pragma f
49c0: 6f 72 65 69 67 6e 5f 6b 65 79 5f 6c 69 73 74 28  oreign_key_list(
49d0: 74 35 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b  t5);.    }.  } {
49e0: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67  }.  do_test prag
49f0: 6d 61 2d 36 2e 34 20 7b 0a 20 20 20 20 63 61 70  ma-6.4 {.    cap
4a00: 74 75 72 65 5f 70 72 61 67 6d 61 20 64 62 20 6f  ture_pragma db o
4a10: 75 74 20 7b 0a 20 20 20 20 20 20 70 72 61 67 6d  ut {.      pragm
4a20: 61 20 69 6e 64 65 78 5f 6c 69 73 74 28 74 33 29  a index_list(t3)
4a30: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 64 62 20 65  ;.    }.    db e
4a40: 76 61 6c 20 7b 53 45 4c 45 43 54 20 73 65 71 2c  val {SELECT seq,
4a50: 20 22 6e 61 6d 65 22 2c 20 22 75 6e 69 71 75 65   "name", "unique
4a60: 22 20 46 52 4f 4d 20 6f 75 74 20 4f 52 44 45 52  " FROM out ORDER
4a70: 20 42 59 20 73 65 71 7d 0a 20 20 7d 20 7b 30 20   BY seq}.  } {0 
4a80: 73 71 6c 69 74 65 5f 61 75 74 6f 69 6e 64 65 78  sqlite_autoindex
4a90: 5f 74 33 5f 31 20 31 7d 0a 7d 0a 69 66 63 61 70  _t3_1 1}.}.ifcap
4aa0: 61 62 6c 65 20 7b 21 66 6f 72 65 69 67 6e 6b 65  able {!foreignke
4ab0: 79 7d 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  y} {.  execsql {
4ac0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 33 28  CREATE TABLE t3(
4ad0: 61 2c 62 20 55 4e 49 51 55 45 29 7d 0a 7d 0a 64  a,b UNIQUE)}.}.d
4ae0: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 36 2e  o_test pragma-6.
4af0: 35 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  5.1 {.  execsql 
4b00: 7b 0a 20 20 20 20 43 52 45 41 54 45 20 49 4e 44  {.    CREATE IND
4b10: 45 58 20 74 33 69 31 20 4f 4e 20 74 33 28 61 2c  EX t3i1 ON t3(a,
4b20: 62 29 3b 0a 20 20 7d 0a 20 20 63 61 70 74 75 72  b);.  }.  captur
4b30: 65 5f 70 72 61 67 6d 61 20 64 62 20 6f 75 74 20  e_pragma db out 
4b40: 7b 0a 20 20 20 20 70 72 61 67 6d 61 20 69 6e 64  {.    pragma ind
4b50: 65 78 5f 69 6e 66 6f 28 74 33 69 31 29 3b 0a 20  ex_info(t3i1);. 
4b60: 20 7d 0a 20 20 64 62 20 65 76 61 6c 20 7b 53 45   }.  db eval {SE
4b70: 4c 45 43 54 20 73 65 71 6e 6f 2c 20 63 69 64 2c  LECT seqno, cid,
4b80: 20 6e 61 6d 65 20 46 52 4f 4d 20 6f 75 74 20 4f   name FROM out O
4b90: 52 44 45 52 20 42 59 20 73 65 71 6e 6f 7d 0a 7d  RDER BY seqno}.}
4ba0: 20 7b 30 20 30 20 61 20 31 20 31 20 62 7d 0a 0a   {0 0 a 1 1 b}..
4bb0: 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52  # EVIDENCE-OF: R
4bc0: 2d 32 33 31 31 34 2d 32 31 36 39 35 20 54 68 65  -23114-21695 The
4bd0: 20 61 75 78 69 6c 69 61 72 79 20 69 6e 64 65 78   auxiliary index
4be0: 2d 63 6f 6c 75 6d 6e 73 20 61 72 65 20 6e 6f 74  -columns are not
4bf0: 20 73 68 6f 77 6e 0a 23 20 62 79 20 74 68 65 20   shown.# by the 
4c00: 69 6e 64 65 78 5f 69 6e 66 6f 20 70 72 61 67 6d  index_info pragm
4c10: 61 2c 20 62 75 74 20 74 68 65 79 20 61 72 65 20  a, but they are 
4c20: 6c 69 73 74 65 64 20 62 79 20 74 68 65 20 69 6e  listed by the in
4c30: 64 65 78 5f 78 69 6e 66 6f 0a 23 20 70 72 61 67  dex_xinfo.# prag
4c40: 6d 61 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 70 72  ma..#.do_test pr
4c50: 61 67 6d 61 2d 36 2e 35 2e 31 62 20 7b 0a 20 20  agma-6.5.1b {.  
4c60: 63 61 70 74 75 72 65 5f 70 72 61 67 6d 61 20 64  capture_pragma d
4c70: 62 20 6f 75 74 20 7b 50 52 41 47 4d 41 20 69 6e  b out {PRAGMA in
4c80: 64 65 78 5f 78 69 6e 66 6f 28 74 33 69 31 29 7d  dex_xinfo(t3i1)}
4c90: 0a 20 20 64 62 20 65 76 61 6c 20 7b 53 45 4c 45  .  db eval {SELE
4ca0: 43 54 20 73 65 71 6e 6f 2c 20 63 69 64 2c 20 6e  CT seqno, cid, n
4cb0: 61 6d 65 20 46 52 4f 4d 20 6f 75 74 20 4f 52 44  ame FROM out ORD
4cc0: 45 52 20 42 59 20 73 65 71 6e 6f 7d 0a 7d 20 7b  ER BY seqno}.} {
4cd0: 30 20 30 20 61 20 31 20 31 20 62 20 32 20 2d 31  0 0 a 1 1 b 2 -1
4ce0: 20 7b 7d 7d 0a 0a 0a 23 20 45 56 49 44 45 4e 43   {}}...# EVIDENC
4cf0: 45 2d 4f 46 3a 20 52 2d 32 39 34 34 38 2d 36 30  E-OF: R-29448-60
4d00: 33 34 36 20 50 52 41 47 4d 41 20 73 63 68 65 6d  346 PRAGMA schem
4d10: 61 2e 69 6e 64 65 78 5f 69 6e 66 6f 28 69 6e 64  a.index_info(ind
4d20: 65 78 2d 6e 61 6d 65 29 3b 20 54 68 69 73 0a 23  ex-name); This.#
4d30: 20 70 72 61 67 6d 61 20 72 65 74 75 72 6e 73 20   pragma returns 
4d40: 6f 6e 65 20 72 6f 77 20 66 6f 72 20 65 61 63 68  one row for each
4d50: 20 6b 65 79 20 63 6f 6c 75 6d 6e 20 69 6e 20 74   key column in t
4d60: 68 65 20 6e 61 6d 65 64 20 69 6e 64 65 78 2e 0a  he named index..
4d70: 23 0a 23 20 28 54 68 65 20 66 69 72 73 74 20 63  #.# (The first c
4d80: 6f 6c 75 6d 6e 20 6f 66 20 6f 75 74 70 75 74 20  olumn of output 
4d90: 66 72 6f 6d 20 50 52 41 47 4d 41 20 69 6e 64 65  from PRAGMA inde
4da0: 78 5f 69 6e 66 6f 20 69 73 2e 2e 2e 29 0a 23 20  x_info is...).# 
4db0: 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 33  EVIDENCE-OF: R-3
4dc0: 34 31 38 36 2d 35 32 39 31 34 20 54 68 65 20 72  4186-52914 The r
4dd0: 61 6e 6b 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  ank of the colum
4de0: 6e 20 77 69 74 68 69 6e 20 74 68 65 20 69 6e 64  n within the ind
4df0: 65 78 2e 20 28 30 0a 23 20 6d 65 61 6e 73 20 6c  ex. (0.# means l
4e00: 65 66 74 2d 6d 6f 73 74 2e 29 0a 23 0a 23 20 28  eft-most.).#.# (
4e10: 54 68 65 20 73 65 63 6f 6e 64 20 63 6f 6c 75 6d  The second colum
4e20: 6e 20 6f 66 20 6f 75 74 70 75 74 20 66 72 6f 6d  n of output from
4e30: 20 50 52 41 47 4d 41 20 69 6e 64 65 78 5f 69 6e   PRAGMA index_in
4e40: 66 6f 20 69 73 2e 2e 2e 29 0a 23 20 45 56 49 44  fo is...).# EVID
4e50: 45 4e 43 45 2d 4f 46 3a 20 52 2d 36 35 30 31 39  ENCE-OF: R-65019
4e60: 2d 30 38 33 38 33 20 54 68 65 20 72 61 6e 6b 20  -08383 The rank 
4e70: 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 77 69  of the column wi
4e80: 74 68 69 6e 20 74 68 65 20 74 61 62 6c 65 0a 23  thin the table.#
4e90: 20 62 65 69 6e 67 20 69 6e 64 65 78 65 64 2e 0a   being indexed..
4ea0: 23 0a 23 20 28 54 68 65 20 74 68 69 72 64 20 63  #.# (The third c
4eb0: 6f 6c 75 6d 6e 20 6f 66 20 6f 75 74 70 75 74 20  olumn of output 
4ec0: 66 72 6f 6d 20 50 52 41 47 4d 41 20 69 6e 64 65  from PRAGMA inde
4ed0: 78 5f 69 6e 66 6f 20 69 73 2e 2e 2e 29 0a 23 20  x_info is...).# 
4ee0: 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 30  EVIDENCE-OF: R-0
4ef0: 39 37 37 33 2d 33 34 32 36 36 20 54 68 65 20 6e  9773-34266 The n
4f00: 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  ame of the colum
4f10: 6e 20 62 65 69 6e 67 20 69 6e 64 65 78 65 64 2e  n being indexed.
4f20: 0a 23 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  .#.do_execsql_te
4f30: 73 74 20 70 72 61 67 6d 61 2d 36 2e 35 2e 31 63  st pragma-6.5.1c
4f40: 20 7b 0a 20 20 43 52 45 41 54 45 20 49 4e 44 45   {.  CREATE INDE
4f50: 58 20 74 33 69 32 20 4f 4e 20 74 33 28 62 2c 61  X t3i2 ON t3(b,a
4f60: 29 3b 0a 20 20 50 52 41 47 4d 41 20 69 6e 64 65  );.  PRAGMA inde
4f70: 78 5f 69 6e 66 6f 3d 27 74 33 69 32 27 3b 0a 20  x_info='t3i2';. 
4f80: 20 44 52 4f 50 20 49 4e 44 45 58 20 74 33 69 32   DROP INDEX t3i2
4f90: 3b 0a 7d 20 7b 30 20 31 20 62 20 31 20 30 20 61  ;.} {0 1 b 1 0 a
4fa0: 7d 0a 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  }..do_test pragm
4fb0: 61 2d 36 2e 35 2e 32 20 7b 0a 20 20 65 78 65 63  a-6.5.2 {.  exec
4fc0: 73 71 6c 20 7b 0a 20 20 20 20 70 72 61 67 6d 61  sql {.    pragma
4fd0: 20 69 6e 64 65 78 5f 69 6e 66 6f 28 74 33 69 31   index_info(t3i1
4fe0: 5f 62 6f 67 75 73 29 3b 0a 20 20 7d 0a 7d 20 7b  _bogus);.  }.} {
4ff0: 7d 0a 0a 69 66 63 61 70 61 62 6c 65 20 74 65 6d  }..ifcapable tem
5000: 70 64 62 20 7b 0a 20 20 23 20 54 65 73 74 20 66  pdb {.  # Test f
5010: 6f 72 20 74 69 63 6b 65 74 20 23 33 33 32 30 2e  or ticket #3320.
5020: 20 57 68 65 6e 20 61 20 74 65 6d 70 20 74 61 62   When a temp tab
5030: 6c 65 20 6f 66 20 74 68 65 20 73 61 6d 65 20 6e  le of the same n
5040: 61 6d 65 20 65 78 69 73 74 73 2c 20 6d 61 6b 65  ame exists, make
5050: 0a 20 20 23 20 73 75 72 65 20 74 68 65 20 73 63  .  # sure the sc
5060: 68 65 6d 61 20 6f 66 20 74 68 65 20 6d 61 69 6e  hema of the main
5070: 20 74 61 62 6c 65 20 63 61 6e 20 73 74 69 6c 6c   table can still
5080: 20 62 65 20 71 75 65 72 69 65 64 20 75 73 69 6e   be queried usin
5090: 67 20 0a 20 20 23 20 22 70 72 61 67 6d 61 20 74  g .  # "pragma t
50a0: 61 62 6c 65 5f 69 6e 66 6f 22 3a 0a 20 20 64 6f  able_info":.  do
50b0: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 36 2e 36  _test pragma-6.6
50c0: 2e 31 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  .1 {.    execsql
50d0: 20 7b 0a 20 20 20 20 20 20 43 52 45 41 54 45 20   {.      CREATE 
50e0: 54 41 42 4c 45 20 74 72 69 61 6c 28 63 6f 6c 5f  TABLE trial(col_
50f0: 6d 61 69 6e 29 3b 0a 20 20 20 20 20 20 43 52 45  main);.      CRE
5100: 41 54 45 20 54 45 4d 50 20 54 41 42 4c 45 20 74  ATE TEMP TABLE t
5110: 72 69 61 6c 28 63 6f 6c 5f 74 65 6d 70 29 3b 0a  rial(col_temp);.
5120: 20 20 20 20 7d 0a 20 20 7d 20 7b 7d 0a 20 20 64      }.  } {}.  d
5130: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 36 2e  o_test pragma-6.
5140: 36 2e 32 20 7b 0a 20 20 20 20 65 78 65 63 73 71  6.2 {.    execsq
5150: 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41  l {.      PRAGMA
5160: 20 74 61 62 6c 65 5f 69 6e 66 6f 28 74 72 69 61   table_info(tria
5170: 6c 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 30  l);.    }.  } {0
5180: 20 63 6f 6c 5f 74 65 6d 70 20 7b 7d 20 30 20 7b   col_temp {} 0 {
5190: 7d 20 30 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70  } 0}.  do_test p
51a0: 72 61 67 6d 61 2d 36 2e 36 2e 33 20 7b 0a 20 20  ragma-6.6.3 {.  
51b0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
51c0: 20 20 50 52 41 47 4d 41 20 74 65 6d 70 2e 74 61    PRAGMA temp.ta
51d0: 62 6c 65 5f 69 6e 66 6f 28 74 72 69 61 6c 29 3b  ble_info(trial);
51e0: 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 30 20 63 6f  .    }.  } {0 co
51f0: 6c 5f 74 65 6d 70 20 7b 7d 20 30 20 7b 7d 20 30  l_temp {} 0 {} 0
5200: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67  }.  do_test prag
5210: 6d 61 2d 36 2e 36 2e 34 20 7b 0a 20 20 20 20 65  ma-6.6.4 {.    e
5220: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50  xecsql {.      P
5230: 52 41 47 4d 41 20 6d 61 69 6e 2e 74 61 62 6c 65  RAGMA main.table
5240: 5f 69 6e 66 6f 28 74 72 69 61 6c 29 3b 0a 20 20  _info(trial);.  
5250: 20 20 7d 0a 20 20 7d 20 7b 30 20 63 6f 6c 5f 6d    }.  } {0 col_m
5260: 61 69 6e 20 7b 7d 20 30 20 7b 7d 20 30 7d 0a 7d  ain {} 0 {} 0}.}
5270: 0a 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  ..do_test pragma
5280: 2d 36 2e 37 20 7b 0a 20 20 65 78 65 63 73 71 6c  -6.7 {.  execsql
5290: 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41   {.    CREATE TA
52a0: 42 4c 45 20 74 65 73 74 5f 74 61 62 6c 65 28 0a  BLE test_table(.
52b0: 20 20 20 20 20 20 6f 6e 65 20 49 4e 54 20 4e 4f        one INT NO
52c0: 54 20 4e 55 4c 4c 20 44 45 46 41 55 4c 54 20 2d  T NULL DEFAULT -
52d0: 31 2c 20 0a 20 20 20 20 20 20 74 77 6f 20 74 65  1, .      two te
52e0: 78 74 2c 0a 20 20 20 20 20 20 74 68 72 65 65 20  xt,.      three 
52f0: 56 41 52 43 48 41 52 28 34 35 2c 20 36 35 29 20  VARCHAR(45, 65) 
5300: 44 45 46 41 55 4c 54 20 27 61 62 63 64 65 27 2c  DEFAULT 'abcde',
5310: 0a 20 20 20 20 20 20 66 6f 75 72 20 52 45 41 4c  .      four REAL
5320: 20 44 45 46 41 55 4c 54 20 58 27 61 62 63 64 65   DEFAULT X'abcde
5330: 66 27 2c 0a 20 20 20 20 20 20 66 69 76 65 20 44  f',.      five D
5340: 45 46 41 55 4c 54 20 43 55 52 52 45 4e 54 5f 54  EFAULT CURRENT_T
5350: 49 4d 45 0a 20 20 20 20 29 3b 0a 20 20 7d 0a 20  IME.    );.  }. 
5360: 20 63 61 70 74 75 72 65 5f 70 72 61 67 6d 61 20   capture_pragma 
5370: 64 62 20 6f 75 74 20 7b 50 52 41 47 4d 41 20 74  db out {PRAGMA t
5380: 61 62 6c 65 5f 69 6e 66 6f 28 74 65 73 74 5f 74  able_info(test_t
5390: 61 62 6c 65 29 7d 0a 20 20 64 62 20 65 76 61 6c  able)}.  db eval
53a0: 20 7b 53 45 4c 45 43 54 20 63 69 64 2c 20 22 6e   {SELECT cid, "n
53b0: 61 6d 65 22 2c 20 74 79 70 65 2c 20 22 6e 6f 74  ame", type, "not
53c0: 6e 75 6c 6c 22 2c 20 64 66 6c 74 5f 76 61 6c 75  null", dflt_valu
53d0: 65 2c 20 70 6b 20 46 52 4f 4d 20 6f 75 74 0a 20  e, pk FROM out. 
53e0: 20 20 20 20 20 20 20 20 20 20 20 4f 52 44 45 52             ORDER
53f0: 20 42 59 20 63 69 64 7d 0a 7d 20 5b 63 6f 6e 63   BY cid}.} [conc
5400: 61 74 20 5c 0a 20 20 7b 30 20 6f 6e 65 20 49 4e  at \.  {0 one IN
5410: 54 20 31 20 2d 31 20 30 7d 20 5c 0a 20 20 7b 31  T 1 -1 0} \.  {1
5420: 20 74 77 6f 20 74 65 78 74 20 30 20 7b 7d 20 30   two text 0 {} 0
5430: 7d 20 5c 0a 20 20 7b 32 20 74 68 72 65 65 20 7b  } \.  {2 three {
5440: 56 41 52 43 48 41 52 28 34 35 2c 20 36 35 29 7d  VARCHAR(45, 65)}
5450: 20 30 20 27 61 62 63 64 65 27 20 30 7d 20 5c 0a   0 'abcde' 0} \.
5460: 20 20 7b 33 20 66 6f 75 72 20 52 45 41 4c 20 30    {3 four REAL 0
5470: 20 58 27 61 62 63 64 65 66 27 20 30 7d 20 5c 0a   X'abcdef' 0} \.
5480: 20 20 7b 34 20 66 69 76 65 20 7b 7d 20 30 20 43    {4 five {} 0 C
5490: 55 52 52 45 4e 54 5f 54 49 4d 45 20 30 7d 20 5c  URRENT_TIME 0} \
54a0: 0a 5d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .].do_test pragm
54b0: 61 2d 36 2e 38 20 7b 0a 20 20 65 78 65 63 73 71  a-6.8 {.  execsq
54c0: 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54  l {.    CREATE T
54d0: 41 42 4c 45 20 74 36 38 28 61 2c 62 2c 63 2c 50  ABLE t68(a,b,c,P
54e0: 52 49 4d 41 52 59 20 4b 45 59 28 61 2c 62 2c 61  RIMARY KEY(a,b,a
54f0: 2c 63 29 29 3b 0a 20 20 20 20 50 52 41 47 4d 41  ,c));.    PRAGMA
5500: 20 74 61 62 6c 65 5f 69 6e 66 6f 28 74 36 38 29   table_info(t68)
5510: 3b 0a 20 20 7d 0a 7d 20 5b 63 6f 6e 63 61 74 20  ;.  }.} [concat 
5520: 5c 0a 20 20 7b 30 20 61 20 7b 7d 20 30 20 7b 7d  \.  {0 a {} 0 {}
5530: 20 31 7d 20 5c 0a 20 20 7b 31 20 62 20 7b 7d 20   1} \.  {1 b {} 
5540: 30 20 7b 7d 20 32 7d 20 5c 0a 20 20 7b 32 20 63  0 {} 2} \.  {2 c
5550: 20 7b 7d 20 30 20 7b 7d 20 34 7d 20 5c 0a 5d 0a   {} 0 {} 4} \.].
5560: 7d 20 3b 23 20 69 66 63 61 70 61 62 6c 65 20 73  } ;# ifcapable s
5570: 63 68 65 6d 61 5f 70 72 61 67 6d 61 73 0a 23 20  chema_pragmas.# 
5580: 4d 69 73 63 65 6c 6c 61 6e 65 6f 75 73 20 74 65  Miscellaneous te
5590: 73 74 73 0a 23 0a 69 66 63 61 70 61 62 6c 65 20  sts.#.ifcapable 
55a0: 73 63 68 65 6d 61 5f 70 72 61 67 6d 61 73 20 7b  schema_pragmas {
55b0: 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20  .# EVIDENCE-OF: 
55c0: 52 2d 36 34 31 30 33 2d 31 37 37 37 36 20 50 52  R-64103-17776 PR
55d0: 41 47 4d 41 20 73 63 68 65 6d 61 2e 69 6e 64 65  AGMA schema.inde
55e0: 78 5f 6c 69 73 74 28 74 61 62 6c 65 2d 6e 61 6d  x_list(table-nam
55f0: 65 29 3b 20 54 68 69 73 0a 23 20 70 72 61 67 6d  e); This.# pragm
5600: 61 20 72 65 74 75 72 6e 73 20 6f 6e 65 20 72 6f  a returns one ro
5610: 77 20 66 6f 72 20 65 61 63 68 20 69 6e 64 65 78  w for each index
5620: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
5630: 20 74 68 65 20 67 69 76 65 6e 20 74 61 62 6c 65   the given table
5640: 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 70 72 61 67  ..#.do_test prag
5650: 6d 61 2d 37 2e 31 2e 31 20 7b 0a 20 20 23 20 4d  ma-7.1.1 {.  # M
5660: 61 6b 65 20 73 75 72 65 20 61 20 70 72 61 67 6d  ake sure a pragm
5670: 61 20 6b 6e 6f 77 73 20 74 6f 20 72 65 61 64 20  a knows to read 
5680: 74 68 65 20 73 63 68 65 6d 61 20 69 66 20 69 74  the schema if it
5690: 20 6e 65 65 64 73 20 74 6f 0a 20 20 64 62 20 63   needs to.  db c
56a0: 6c 6f 73 65 0a 20 20 73 71 6c 69 74 65 33 20 64  lose.  sqlite3 d
56b0: 62 20 74 65 73 74 2e 64 62 0a 20 20 63 61 70 74  b test.db.  capt
56c0: 75 72 65 5f 70 72 61 67 6d 61 20 64 62 20 6f 75  ure_pragma db ou
56d0: 74 20 22 50 52 41 47 4d 41 20 69 6e 64 65 78 5f  t "PRAGMA index_
56e0: 6c 69 73 74 28 74 33 29 22 0a 20 20 64 62 20 65  list(t3)".  db e
56f0: 76 61 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65  val {SELECT name
5700: 2c 20 22 6f 72 69 67 69 6e 22 20 46 52 4f 4d 20  , "origin" FROM 
5710: 6f 75 74 20 4f 52 44 45 52 20 42 59 20 6e 61 6d  out ORDER BY nam
5720: 65 20 44 45 53 43 7d 0a 7d 20 7b 74 33 69 31 20  e DESC}.} {t3i1 
5730: 63 20 73 71 6c 69 74 65 5f 61 75 74 6f 69 6e 64  c sqlite_autoind
5740: 65 78 5f 74 33 5f 31 20 75 7d 0a 64 6f 5f 74 65  ex_t3_1 u}.do_te
5750: 73 74 20 70 72 61 67 6d 61 2d 37 2e 31 2e 32 20  st pragma-7.1.2 
5760: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
5770: 20 20 70 72 61 67 6d 61 20 69 6e 64 65 78 5f 6c    pragma index_l
5780: 69 73 74 28 74 33 5f 62 6f 67 75 73 29 3b 0a 20  ist(t3_bogus);. 
5790: 20 7d 0a 7d 20 7b 7d 0a 7d 20 3b 23 20 69 66 63   }.} {}.} ;# ifc
57a0: 61 70 61 62 6c 65 20 73 63 68 65 6d 61 5f 70 72  apable schema_pr
57b0: 61 67 6d 61 73 0a 69 66 63 61 70 61 62 6c 65 20  agmas.ifcapable 
57c0: 7b 75 74 66 31 36 7d 20 7b 0a 20 20 69 66 20 7b  {utf16} {.  if {
57d0: 5b 70 65 72 6d 75 74 61 74 69 6f 6e 5d 20 3d 3d  [permutation] ==
57e0: 20 22 22 7d 20 7b 0a 20 20 20 20 64 6f 5f 74 65   ""} {.    do_te
57f0: 73 74 20 70 72 61 67 6d 61 2d 37 2e 32 20 7b 0a  st pragma-7.2 {.
5800: 20 20 20 20 20 20 64 62 20 63 6c 6f 73 65 0a 20        db close. 
5810: 20 20 20 20 20 73 71 6c 69 74 65 33 20 64 62 20       sqlite3 db 
5820: 74 65 73 74 2e 64 62 0a 20 20 20 20 20 20 63 61  test.db.      ca
5830: 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 20 20 20  tchsql {.       
5840: 20 70 72 61 67 6d 61 20 65 6e 63 6f 64 69 6e 67   pragma encoding
5850: 3d 62 6f 67 75 73 3b 0a 20 20 20 20 20 20 7d 0a  =bogus;.      }.
5860: 20 20 20 20 7d 20 7b 31 20 7b 75 6e 73 75 70 70      } {1 {unsupp
5870: 6f 72 74 65 64 20 65 6e 63 6f 64 69 6e 67 3a 20  orted encoding: 
5880: 62 6f 67 75 73 7d 7d 0a 20 20 7d 0a 7d 0a 69 66  bogus}}.  }.}.if
5890: 63 61 70 61 62 6c 65 20 74 65 6d 70 64 62 20 7b  capable tempdb {
58a0: 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .  do_test pragm
58b0: 61 2d 37 2e 33 20 7b 0a 20 20 20 20 64 62 20 63  a-7.3 {.    db c
58c0: 6c 6f 73 65 0a 20 20 20 20 73 71 6c 69 74 65 33  lose.    sqlite3
58d0: 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20 20 20   db test.db.    
58e0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
58f0: 70 72 61 67 6d 61 20 6c 6f 63 6b 5f 73 74 61 74  pragma lock_stat
5900: 75 73 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 6d  us;.    }.  } {m
5910: 61 69 6e 20 75 6e 6c 6f 63 6b 65 64 20 74 65 6d  ain unlocked tem
5920: 70 20 63 6c 6f 73 65 64 7d 0a 7d 20 65 6c 73 65  p closed}.} else
5930: 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61   {.  do_test pra
5940: 67 6d 61 2d 37 2e 33 20 7b 0a 20 20 20 20 64 62  gma-7.3 {.    db
5950: 20 63 6c 6f 73 65 0a 20 20 20 20 73 71 6c 69 74   close.    sqlit
5960: 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20  e3 db test.db.  
5970: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
5980: 20 20 70 72 61 67 6d 61 20 6c 6f 63 6b 5f 73 74    pragma lock_st
5990: 61 74 75 73 3b 0a 20 20 20 20 7d 0a 20 20 7d 20  atus;.    }.  } 
59a0: 7b 6d 61 69 6e 20 75 6e 6c 6f 63 6b 65 64 7d 0a  {main unlocked}.
59b0: 7d 0a 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  }...#-----------
59c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
59d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
59e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
59f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 54 65  -----------.# Te
5a00: 73 74 20 63 61 73 65 73 20 70 72 61 67 6d 61 2d  st cases pragma-
5a10: 38 2e 2a 20 74 65 73 74 20 74 68 65 20 22 50 52  8.* test the "PR
5a20: 41 47 4d 41 20 73 63 68 65 6d 61 5f 76 65 72 73  AGMA schema_vers
5a30: 69 6f 6e 22 20 61 6e 64 20 22 50 52 41 47 4d 41  ion" and "PRAGMA
5a40: 0a 23 20 75 73 65 72 5f 76 65 72 73 69 6f 6e 22  .# user_version"
5a50: 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 23 0a 23   statements..#.#
5a60: 20 70 72 61 67 6d 61 2d 38 2e 31 3a 20 50 52 41   pragma-8.1: PRA
5a70: 47 4d 41 20 73 63 68 65 6d 61 5f 76 65 72 73 69  GMA schema_versi
5a80: 6f 6e 0a 23 20 70 72 61 67 6d 61 2d 38 2e 32 3a  on.# pragma-8.2:
5a90: 20 50 52 41 47 4d 41 20 75 73 65 72 5f 76 65 72   PRAGMA user_ver
5aa0: 73 69 6f 6e 0a 23 0a 0a 69 66 63 61 70 61 62 6c  sion.#..ifcapabl
5ab0: 65 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e  e schema_version
5ac0: 20 7b 0a 0a 23 20 46 69 72 73 74 20 63 68 65 63   {..# First chec
5ad0: 6b 20 74 68 61 74 20 77 65 20 63 61 6e 20 73 65  k that we can se
5ae0: 74 20 74 68 65 20 73 63 68 65 6d 61 20 76 65 72  t the schema ver
5af0: 73 69 6f 6e 20 61 6e 64 20 74 68 65 6e 20 72 65  sion and then re
5b00: 74 72 69 65 76 65 20 74 68 65 0a 23 20 73 61 6d  trieve the.# sam
5b10: 65 20 76 61 6c 75 65 2e 0a 64 6f 5f 74 65 73 74  e value..do_test
5b20: 20 70 72 61 67 6d 61 2d 38 2e 31 2e 31 20 7b 0a   pragma-8.1.1 {.
5b30: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
5b40: 50 52 41 47 4d 41 20 73 63 68 65 6d 61 5f 76 65  PRAGMA schema_ve
5b50: 72 73 69 6f 6e 20 3d 20 31 30 35 3b 0a 20 20 7d  rsion = 105;.  }
5b60: 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 70 72  .} {}.do_test pr
5b70: 61 67 6d 61 2d 38 2e 31 2e 32 20 7b 0a 20 20 65  agma-8.1.2 {.  e
5b80: 78 65 63 73 71 6c 32 20 7b 0a 20 20 20 20 50 52  xecsql2 {.    PR
5b90: 41 47 4d 41 20 73 63 68 65 6d 61 5f 76 65 72 73  AGMA schema_vers
5ba0: 69 6f 6e 3b 0a 20 20 7d 0a 7d 20 7b 73 63 68 65  ion;.  }.} {sche
5bb0: 6d 61 5f 76 65 72 73 69 6f 6e 20 31 30 35 7d 0a  ma_version 105}.
5bc0: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38  do_test pragma-8
5bd0: 2e 31 2e 33 20 7b 0a 20 20 65 78 65 63 73 71 6c  .1.3 {.  execsql
5be0: 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 73 63   {.    PRAGMA sc
5bf0: 68 65 6d 61 5f 76 65 72 73 69 6f 6e 20 3d 20 31  hema_version = 1
5c00: 30 36 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f  06;.  }.} {}.do_
5c10: 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e  test pragma-8.1.
5c20: 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  4 {.  execsql {.
5c30: 20 20 20 20 50 52 41 47 4d 41 20 73 63 68 65 6d      PRAGMA schem
5c40: 61 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 7d 0a 7d  a_version;.  }.}
5c50: 20 31 30 36 0a 0a 23 20 43 68 65 63 6b 20 74 68   106..# Check th
5c60: 61 74 20 63 72 65 61 74 69 6e 67 20 61 20 74 61  at creating a ta
5c70: 62 6c 65 20 6d 6f 64 69 66 69 65 73 20 74 68 65  ble modifies the
5c80: 20 73 63 68 65 6d 61 2d 76 65 72 73 69 6f 6e 20   schema-version 
5c90: 28 74 68 69 73 20 69 73 20 72 65 61 6c 6c 79 0a  (this is really.
5ca0: 23 20 74 6f 20 76 65 72 69 66 79 20 74 68 61 74  # to verify that
5cb0: 20 74 68 65 20 76 61 6c 75 65 20 62 65 69 6e 67   the value being
5cc0: 20 72 65 61 64 20 69 73 20 69 6e 20 66 61 63 74   read is in fact
5cd0: 20 74 68 65 20 73 63 68 65 6d 61 20 76 65 72 73   the schema vers
5ce0: 69 6f 6e 29 2e 0a 64 6f 5f 74 65 73 74 20 70 72  ion)..do_test pr
5cf0: 61 67 6d 61 2d 38 2e 31 2e 35 20 7b 0a 20 20 65  agma-8.1.5 {.  e
5d00: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45  xecsql {.    CRE
5d10: 41 54 45 20 54 41 42 4c 45 20 74 34 28 61 2c 20  ATE TABLE t4(a, 
5d20: 62 2c 20 63 29 3b 0a 20 20 20 20 49 4e 53 45 52  b, c);.    INSER
5d30: 54 20 49 4e 54 4f 20 74 34 20 56 41 4c 55 45 53  T INTO t4 VALUES
5d40: 28 31 2c 20 32 2c 20 33 29 3b 0a 20 20 20 20 53  (1, 2, 3);.    S
5d50: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 34 3b  ELECT * FROM t4;
5d60: 0a 20 20 7d 0a 7d 20 7b 31 20 32 20 33 7d 0a 64  .  }.} {1 2 3}.d
5d70: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e  o_test pragma-8.
5d80: 31 2e 36 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  1.6 {.  execsql 
5d90: 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 73 63 68  {.    PRAGMA sch
5da0: 65 6d 61 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 7d  ema_version;.  }
5db0: 0a 7d 20 31 30 37 0a 0a 23 20 4e 6f 77 20 6f 70  .} 107..# Now op
5dc0: 65 6e 20 61 20 73 65 63 6f 6e 64 20 63 6f 6e 6e  en a second conn
5dd0: 65 63 74 69 6f 6e 20 74 6f 20 74 68 65 20 64 61  ection to the da
5de0: 74 61 62 61 73 65 2e 20 45 6e 73 75 72 65 20 74  tabase. Ensure t
5df0: 68 61 74 20 63 68 61 6e 67 69 6e 67 20 74 68 65  hat changing the
5e00: 0a 23 20 73 63 68 65 6d 61 2d 76 65 72 73 69 6f  .# schema-versio
5e10: 6e 20 75 73 69 6e 67 20 74 68 65 20 66 69 72 73  n using the firs
5e20: 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6f 72  t connection for
5e30: 63 65 73 20 74 68 65 20 73 65 63 6f 6e 64 20 63  ces the second c
5e40: 6f 6e 6e 65 63 74 69 6f 6e 0a 23 20 74 6f 20 72  onnection.# to r
5e50: 65 6c 6f 61 64 20 74 68 65 20 73 63 68 65 6d 61  eload the schema
5e60: 2e 20 54 68 69 73 20 68 61 73 20 74 6f 20 62 65  . This has to be
5e70: 20 64 6f 6e 65 20 75 73 69 6e 67 20 74 68 65 20   done using the 
5e80: 43 2d 41 50 49 20 74 65 73 74 20 66 75 6e 63 74  C-API test funct
5e90: 69 6f 6e 73 2c 0a 23 20 62 65 63 61 75 73 65 20  ions,.# because 
5ea0: 74 68 65 20 54 43 4c 20 41 50 49 20 61 63 63 6f  the TCL API acco
5eb0: 75 6e 74 73 20 66 6f 72 20 53 43 48 45 4d 41 5f  unts for SCHEMA_
5ec0: 45 52 52 4f 52 20 61 6e 64 20 72 65 74 72 69 65  ERROR and retrie
5ed0: 73 20 74 68 65 20 71 75 65 72 79 2e 0a 64 6f 5f  s the query..do_
5ee0: 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e  test pragma-8.1.
5ef0: 37 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 64 62  7 {.  sqlite3 db
5f00: 32 20 74 65 73 74 2e 64 62 3b 20 73 65 74 20 3a  2 test.db; set :
5f10: 3a 44 42 32 20 5b 73 71 6c 69 74 65 33 5f 63 6f  :DB2 [sqlite3_co
5f20: 6e 6e 65 63 74 69 6f 6e 5f 70 6f 69 6e 74 65 72  nnection_pointer
5f30: 20 64 62 32 5d 0a 20 20 65 78 65 63 73 71 6c 20   db2].  execsql 
5f40: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  {.    SELECT * F
5f50: 52 4f 4d 20 74 34 3b 0a 20 20 7d 20 64 62 32 0a  ROM t4;.  } db2.
5f60: 7d 20 7b 31 20 32 20 33 7d 0a 64 6f 5f 74 65 73  } {1 2 3}.do_tes
5f70: 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e 38 20 7b  t pragma-8.1.8 {
5f80: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
5f90: 20 50 52 41 47 4d 41 20 73 63 68 65 6d 61 5f 76   PRAGMA schema_v
5fa0: 65 72 73 69 6f 6e 20 3d 20 31 30 38 3b 0a 20 20  ersion = 108;.  
5fb0: 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 70  }.} {}.do_test p
5fc0: 72 61 67 6d 61 2d 38 2e 31 2e 39 20 7b 0a 20 20  ragma-8.1.9 {.  
5fd0: 73 65 74 20 3a 3a 53 54 4d 54 20 5b 73 71 6c 69  set ::STMT [sqli
5fe0: 74 65 33 5f 70 72 65 70 61 72 65 20 24 3a 3a 44  te3_prepare $::D
5ff0: 42 32 20 22 53 45 4c 45 43 54 20 2a 20 46 52 4f  B2 "SELECT * FRO
6000: 4d 20 74 34 22 20 2d 31 20 44 55 4d 4d 59 5d 0a  M t4" -1 DUMMY].
6010: 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24    sqlite3_step $
6020: 3a 3a 53 54 4d 54 0a 7d 20 53 51 4c 49 54 45 5f  ::STMT.} SQLITE_
6030: 45 52 52 4f 52 0a 64 6f 5f 74 65 73 74 20 70 72  ERROR.do_test pr
6040: 61 67 6d 61 2d 38 2e 31 2e 31 30 20 7b 0a 20 20  agma-8.1.10 {.  
6050: 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65  sqlite3_finalize
6060: 20 24 3a 3a 53 54 4d 54 0a 7d 20 53 51 4c 49 54   $::STMT.} SQLIT
6070: 45 5f 53 43 48 45 4d 41 0a 0a 23 20 4d 61 6b 65  E_SCHEMA..# Make
6080: 20 73 75 72 65 20 74 68 65 20 73 63 68 65 6d 61   sure the schema
6090: 2d 76 65 72 73 69 6f 6e 20 63 61 6e 20 62 65 20  -version can be 
60a0: 6d 61 6e 69 70 75 6c 61 74 65 64 20 69 6e 20 61  manipulated in a
60b0: 6e 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  n attached datab
60c0: 61 73 65 2e 0a 66 6f 72 63 65 64 65 6c 65 74 65  ase..forcedelete
60d0: 20 74 65 73 74 32 2e 64 62 0a 66 6f 72 63 65 64   test2.db.forced
60e0: 65 6c 65 74 65 20 74 65 73 74 32 2e 64 62 2d 6a  elete test2.db-j
60f0: 6f 75 72 6e 61 6c 0a 69 66 63 61 70 61 62 6c 65  ournal.ifcapable
6100: 20 61 74 74 61 63 68 20 7b 0a 20 20 64 6f 5f 74   attach {.  do_t
6110: 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e 31  est pragma-8.1.1
6120: 31 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  1 {.    execsql 
6130: 7b 0a 20 20 20 20 20 20 41 54 54 41 43 48 20 27  {.      ATTACH '
6140: 74 65 73 74 32 2e 64 62 27 20 41 53 20 61 75 78  test2.db' AS aux
6150: 3b 0a 20 20 20 20 20 20 43 52 45 41 54 45 20 54  ;.      CREATE T
6160: 41 42 4c 45 20 61 75 78 2e 74 31 28 61 2c 20 62  ABLE aux.t1(a, b
6170: 2c 20 63 29 3b 0a 20 20 20 20 20 20 50 52 41 47  , c);.      PRAG
6180: 4d 41 20 61 75 78 2e 73 63 68 65 6d 61 5f 76 65  MA aux.schema_ve
6190: 72 73 69 6f 6e 20 3d 20 32 30 35 3b 0a 20 20 20  rsion = 205;.   
61a0: 20 7d 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74   }.  } {}.  do_t
61b0: 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e 31  est pragma-8.1.1
61c0: 32 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  2 {.    execsql 
61d0: 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 61  {.      PRAGMA a
61e0: 75 78 2e 73 63 68 65 6d 61 5f 76 65 72 73 69 6f  ux.schema_versio
61f0: 6e 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 32 30 35  n;.    }.  } 205
6200: 0a 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .}.do_test pragm
6210: 61 2d 38 2e 31 2e 31 33 20 7b 0a 20 20 65 78 65  a-8.1.13 {.  exe
6220: 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d  csql {.    PRAGM
6230: 41 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e  A schema_version
6240: 3b 0a 20 20 7d 0a 7d 20 31 30 38 0a 0a 23 20 41  ;.  }.} 108..# A
6250: 6e 64 20 63 68 65 63 6b 20 74 68 61 74 20 6d 6f  nd check that mo
6260: 64 69 66 79 69 6e 67 20 74 68 65 20 73 63 68 65  difying the sche
6270: 6d 61 2d 76 65 72 73 69 6f 6e 20 69 6e 20 61 6e  ma-version in an
6280: 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
6290: 73 65 0a 23 20 66 6f 72 63 65 73 20 74 68 65 20  se.# forces the 
62a0: 73 65 63 6f 6e 64 20 63 6f 6e 6e 65 63 74 69 6f  second connectio
62b0: 6e 20 74 6f 20 72 65 6c 6f 61 64 20 74 68 65 20  n to reload the 
62c0: 73 63 68 65 6d 61 2e 0a 69 66 63 61 70 61 62 6c  schema..ifcapabl
62d0: 65 20 61 74 74 61 63 68 20 7b 0a 20 20 64 6f 5f  e attach {.  do_
62e0: 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e  test pragma-8.1.
62f0: 31 34 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  14 {.    sqlite3
6300: 20 64 62 32 20 74 65 73 74 2e 64 62 3b 20 73 65   db2 test.db; se
6310: 74 20 3a 3a 44 42 32 20 5b 73 71 6c 69 74 65 33  t ::DB2 [sqlite3
6320: 5f 63 6f 6e 6e 65 63 74 69 6f 6e 5f 70 6f 69 6e  _connection_poin
6330: 74 65 72 20 64 62 32 5d 0a 20 20 20 20 65 78 65  ter db2].    exe
6340: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 41 54 54  csql {.      ATT
6350: 41 43 48 20 27 74 65 73 74 32 2e 64 62 27 20 41  ACH 'test2.db' A
6360: 53 20 61 75 78 3b 0a 20 20 20 20 20 20 53 45 4c  S aux;.      SEL
6370: 45 43 54 20 2a 20 46 52 4f 4d 20 61 75 78 2e 74  ECT * FROM aux.t
6380: 31 3b 0a 20 20 20 20 7d 20 64 62 32 0a 20 20 7d  1;.    } db2.  }
6390: 20 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72   {}.  do_test pr
63a0: 61 67 6d 61 2d 38 2e 31 2e 31 35 20 7b 0a 20 20  agma-8.1.15 {.  
63b0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
63c0: 20 20 50 52 41 47 4d 41 20 61 75 78 2e 73 63 68    PRAGMA aux.sch
63d0: 65 6d 61 5f 76 65 72 73 69 6f 6e 20 3d 20 32 30  ema_version = 20
63e0: 36 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 7d 0a  6;.    }.  } {}.
63f0: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
6400: 2d 38 2e 31 2e 31 36 20 7b 0a 20 20 20 20 73 65  -8.1.16 {.    se
6410: 74 20 3a 3a 53 54 4d 54 20 5b 73 71 6c 69 74 65  t ::STMT [sqlite
6420: 33 5f 70 72 65 70 61 72 65 20 24 3a 3a 44 42 32  3_prepare $::DB2
6430: 20 22 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20   "SELECT * FROM 
6440: 61 75 78 2e 74 31 22 20 2d 31 20 44 55 4d 4d 59  aux.t1" -1 DUMMY
6450: 5d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 74  ].    sqlite3_st
6460: 65 70 20 24 3a 3a 53 54 4d 54 0a 20 20 7d 20 53  ep $::STMT.  } S
6470: 51 4c 49 54 45 5f 45 52 52 4f 52 0a 20 20 64 6f  QLITE_ERROR.  do
6480: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 31  _test pragma-8.1
6490: 2e 31 37 20 7b 0a 20 20 20 20 73 71 6c 69 74 65  .17 {.    sqlite
64a0: 33 5f 66 69 6e 61 6c 69 7a 65 20 24 3a 3a 53 54  3_finalize $::ST
64b0: 4d 54 0a 20 20 7d 20 53 51 4c 49 54 45 5f 53 43  MT.  } SQLITE_SC
64c0: 48 45 4d 41 0a 20 20 64 6f 5f 74 65 73 74 20 70  HEMA.  do_test p
64d0: 72 61 67 6d 61 2d 38 2e 31 2e 31 38 20 7b 0a 20  ragma-8.1.18 {. 
64e0: 20 20 20 64 62 32 20 63 6c 6f 73 65 0a 20 20 7d     db2 close.  }
64f0: 20 7b 7d 0a 7d 0a 0a 23 20 4e 6f 77 20 74 65 73   {}.}..# Now tes
6500: 74 20 74 68 61 74 20 74 68 65 20 75 73 65 72 2d  t that the user-
6510: 76 65 72 73 69 6f 6e 20 63 61 6e 20 62 65 20 72  version can be r
6520: 65 61 64 20 61 6e 64 20 77 72 69 74 74 65 6e 20  ead and written 
6530: 28 61 6e 64 20 74 68 61 74 20 77 65 20 61 72 65  (and that we are
6540: 6e 27 74 0a 23 20 61 63 63 69 64 65 6e 74 61 6c  n't.# accidental
6550: 6c 79 20 6d 61 6e 69 70 75 6c 61 74 69 6e 67 20  ly manipulating 
6560: 74 68 65 20 73 63 68 65 6d 61 2d 76 65 72 73 69  the schema-versi
6570: 6f 6e 20 69 6e 73 74 65 61 64 29 2e 0a 64 6f 5f  on instead)..do_
6580: 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 32 2e  test pragma-8.2.
6590: 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 32 20 7b  1 {.  execsql2 {
65a0: 0a 20 20 20 20 50 52 41 47 4d 41 20 75 73 65 72  .    PRAGMA user
65b0: 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 7d 0a 7d 20  _version;.  }.} 
65c0: 7b 75 73 65 72 5f 76 65 72 73 69 6f 6e 20 30 7d  {user_version 0}
65d0: 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d  .do_test pragma-
65e0: 38 2e 32 2e 32 20 7b 0a 20 20 65 78 65 63 73 71  8.2.2 {.  execsq
65f0: 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 75  l {.    PRAGMA u
6600: 73 65 72 5f 76 65 72 73 69 6f 6e 20 3d 20 32 3b  ser_version = 2;
6610: 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73  .  }.} {}.do_tes
6620: 74 20 70 72 61 67 6d 61 2d 38 2e 32 2e 33 2e 31  t pragma-8.2.3.1
6630: 20 7b 0a 20 20 65 78 65 63 73 71 6c 32 20 7b 0a   {.  execsql2 {.
6640: 20 20 20 20 50 52 41 47 4d 41 20 75 73 65 72 5f      PRAGMA user_
6650: 76 65 72 73 69 6f 6e 3b 0a 20 20 7d 0a 7d 20 7b  version;.  }.} {
6660: 75 73 65 72 5f 76 65 72 73 69 6f 6e 20 32 7d 0a  user_version 2}.
6670: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38  do_test pragma-8
6680: 2e 32 2e 33 2e 32 20 7b 0a 20 20 64 62 20 63 6c  .2.3.2 {.  db cl
6690: 6f 73 65 0a 20 20 73 71 6c 69 74 65 33 20 64 62  ose.  sqlite3 db
66a0: 20 74 65 73 74 2e 64 62 0a 20 20 65 78 65 63 73   test.db.  execs
66b0: 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20  ql {.    PRAGMA 
66c0: 75 73 65 72 5f 76 65 72 73 69 6f 6e 3b 0a 20 20  user_version;.  
66d0: 7d 0a 7d 20 7b 32 7d 0a 64 6f 5f 74 65 73 74 20  }.} {2}.do_test 
66e0: 70 72 61 67 6d 61 2d 38 2e 32 2e 34 2e 31 20 7b  pragma-8.2.4.1 {
66f0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
6700: 20 50 52 41 47 4d 41 20 73 63 68 65 6d 61 5f 76   PRAGMA schema_v
6710: 65 72 73 69 6f 6e 3b 0a 20 20 7d 0a 7d 20 7b 31  ersion;.  }.} {1
6720: 30 38 7d 0a 69 66 63 61 70 61 62 6c 65 20 76 61  08}.ifcapable va
6730: 63 75 75 6d 20 7b 0a 20 20 64 6f 5f 74 65 73 74  cuum {.  do_test
6740: 20 70 72 61 67 6d 61 2d 38 2e 32 2e 34 2e 32 20   pragma-8.2.4.2 
6750: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a  {.    execsql {.
6760: 20 20 20 20 20 20 56 41 43 55 55 4d 3b 0a 20 20        VACUUM;.  
6770: 20 20 20 20 50 52 41 47 4d 41 20 75 73 65 72 5f      PRAGMA user_
6780: 76 65 72 73 69 6f 6e 3b 0a 20 20 20 20 7d 0a 20  version;.    }. 
6790: 20 7d 20 7b 32 7d 0a 20 20 64 6f 5f 74 65 73 74   } {2}.  do_test
67a0: 20 70 72 61 67 6d 61 2d 38 2e 32 2e 34 2e 33 20   pragma-8.2.4.3 
67b0: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a  {.    execsql {.
67c0: 20 20 20 20 20 20 50 52 41 47 4d 41 20 73 63 68        PRAGMA sch
67d0: 65 6d 61 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 20  ema_version;.   
67e0: 20 7d 0a 20 20 7d 20 7b 31 30 39 7d 0a 7d 0a 0a   }.  } {109}.}..
67f0: 69 66 63 61 70 61 62 6c 65 20 61 74 74 61 63 68  ifcapable attach
6800: 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 41 54   {.  db eval {AT
6810: 54 41 43 48 20 27 74 65 73 74 32 2e 64 62 27 20  TACH 'test2.db' 
6820: 41 53 20 61 75 78 7d 0a 20 20 0a 20 20 23 20 43  AS aux}.  .  # C
6830: 68 65 63 6b 20 74 68 61 74 20 74 68 65 20 75 73  heck that the us
6840: 65 72 2d 76 65 72 73 69 6f 6e 20 69 6e 20 74 68  er-version in th
6850: 65 20 61 75 78 69 6c 61 72 79 20 64 61 74 61 62  e auxilary datab
6860: 61 73 65 20 63 61 6e 20 62 65 20 6d 61 6e 69 70  ase can be manip
6870: 75 6c 61 74 65 64 20 28 0a 20 20 23 20 61 6e 64  ulated (.  # and
6880: 20 74 68 61 74 20 77 65 20 61 72 65 6e 27 74 20   that we aren't 
6890: 61 63 63 69 64 65 6e 74 61 6c 6c 79 20 6d 61 6e  accidentally man
68a0: 69 70 75 6c 61 74 69 6e 67 20 74 68 65 20 73 61  ipulating the sa
68b0: 6d 65 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64  me in the main d
68c0: 62 29 2e 0a 20 20 64 6f 5f 74 65 73 74 20 70 72  b)..  do_test pr
68d0: 61 67 6d 61 2d 38 2e 32 2e 35 20 7b 0a 20 20 20  agma-8.2.5 {.   
68e0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20   execsql {.     
68f0: 20 50 52 41 47 4d 41 20 61 75 78 2e 75 73 65 72   PRAGMA aux.user
6900: 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 20 20 7d 0a  _version;.    }.
6910: 20 20 7d 20 7b 30 7d 0a 20 20 64 6f 5f 74 65 73    } {0}.  do_tes
6920: 74 20 70 72 61 67 6d 61 2d 38 2e 32 2e 36 20 7b  t pragma-8.2.6 {
6930: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
6940: 20 20 20 20 20 50 52 41 47 4d 41 20 61 75 78 2e       PRAGMA aux.
6950: 75 73 65 72 5f 76 65 72 73 69 6f 6e 20 3d 20 33  user_version = 3
6960: 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 7d 0a 20  ;.    }.  } {}. 
6970: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
6980: 38 2e 32 2e 37 20 7b 0a 20 20 20 20 65 78 65 63  8.2.7 {.    exec
6990: 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47  sql {.      PRAG
69a0: 4d 41 20 61 75 78 2e 75 73 65 72 5f 76 65 72 73  MA aux.user_vers
69b0: 69 6f 6e 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b  ion;.    }.  } {
69c0: 33 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61  3}.  do_test pra
69d0: 67 6d 61 2d 38 2e 32 2e 38 20 7b 0a 20 20 20 20  gma-8.2.8 {.    
69e0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
69f0: 50 52 41 47 4d 41 20 6d 61 69 6e 2e 75 73 65 72  PRAGMA main.user
6a00: 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 20 20 7d 0a  _version;.    }.
6a10: 20 20 7d 20 7b 32 7d 0a 20 20 0a 20 20 23 20 4e    } {2}.  .  # N
6a20: 6f 77 20 63 68 65 63 6b 20 74 68 61 74 20 61 20  ow check that a 
6a30: 52 4f 4c 4c 42 41 43 4b 20 72 65 73 65 74 73 20  ROLLBACK resets 
6a40: 74 68 65 20 75 73 65 72 2d 76 65 72 73 69 6f 6e  the user-version
6a50: 20 69 66 20 69 74 20 68 61 73 20 62 65 65 6e 20   if it has been 
6a60: 6d 6f 64 69 66 69 65 64 0a 20 20 23 20 77 69 74  modified.  # wit
6a70: 68 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f  hin a transactio
6a80: 6e 2e 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61  n..  do_test pra
6a90: 67 6d 61 2d 38 2e 32 2e 39 20 7b 0a 20 20 20 20  gma-8.2.9 {.    
6aa0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
6ab0: 42 45 47 49 4e 3b 0a 20 20 20 20 20 20 50 52 41  BEGIN;.      PRA
6ac0: 47 4d 41 20 61 75 78 2e 75 73 65 72 5f 76 65 72  GMA aux.user_ver
6ad0: 73 69 6f 6e 20 3d 20 31 30 3b 0a 20 20 20 20 20  sion = 10;.     
6ae0: 20 50 52 41 47 4d 41 20 75 73 65 72 5f 76 65 72   PRAGMA user_ver
6af0: 73 69 6f 6e 20 3d 20 31 31 3b 0a 20 20 20 20 7d  sion = 11;.    }
6b00: 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65 73  .  } {}.  do_tes
6b10: 74 20 70 72 61 67 6d 61 2d 38 2e 32 2e 31 30 20  t pragma-8.2.10 
6b20: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a  {.    execsql {.
6b30: 20 20 20 20 20 20 50 52 41 47 4d 41 20 61 75 78        PRAGMA aux
6b40: 2e 75 73 65 72 5f 76 65 72 73 69 6f 6e 3b 0a 20  .user_version;. 
6b50: 20 20 20 7d 0a 20 20 7d 20 7b 31 30 7d 0a 20 20     }.  } {10}.  
6b60: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38  do_test pragma-8
6b70: 2e 32 2e 31 31 20 7b 0a 20 20 20 20 65 78 65 63  .2.11 {.    exec
6b80: 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47  sql {.      PRAG
6b90: 4d 41 20 6d 61 69 6e 2e 75 73 65 72 5f 76 65 72  MA main.user_ver
6ba0: 73 69 6f 6e 3b 0a 20 20 20 20 7d 0a 20 20 7d 20  sion;.    }.  } 
6bb0: 7b 31 31 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70  {11}.  do_test p
6bc0: 72 61 67 6d 61 2d 38 2e 32 2e 31 32 20 7b 0a 20  ragma-8.2.12 {. 
6bd0: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
6be0: 20 20 20 52 4f 4c 4c 42 41 43 4b 3b 0a 20 20 20     ROLLBACK;.   
6bf0: 20 20 20 50 52 41 47 4d 41 20 61 75 78 2e 75 73     PRAGMA aux.us
6c00: 65 72 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 20 20  er_version;.    
6c10: 7d 0a 20 20 7d 20 7b 33 7d 0a 20 20 64 6f 5f 74  }.  } {3}.  do_t
6c20: 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 32 2e 31  est pragma-8.2.1
6c30: 33 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  3 {.    execsql 
6c40: 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 6d  {.      PRAGMA m
6c50: 61 69 6e 2e 75 73 65 72 5f 76 65 72 73 69 6f 6e  ain.user_version
6c60: 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 32 7d 0a  ;.    }.  } {2}.
6c70: 7d 0a 0a 23 20 54 72 79 20 61 20 6e 65 67 61 74  }..# Try a negat
6c80: 69 76 65 20 76 61 6c 75 65 20 66 6f 72 20 74 68  ive value for th
6c90: 65 20 75 73 65 72 2d 76 65 72 73 69 6f 6e 0a 64  e user-version.d
6ca0: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e  o_test pragma-8.
6cb0: 32 2e 31 34 20 7b 0a 20 20 65 78 65 63 73 71 6c  2.14 {.  execsql
6cc0: 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 75 73   {.    PRAGMA us
6cd0: 65 72 5f 76 65 72 73 69 6f 6e 20 3d 20 2d 34 35  er_version = -45
6ce0: 30 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74  0;.  }.} {}.do_t
6cf0: 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 32 2e 31  est pragma-8.2.1
6d00: 35 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  5 {.  execsql {.
6d10: 20 20 20 20 50 52 41 47 4d 41 20 75 73 65 72 5f      PRAGMA user_
6d20: 76 65 72 73 69 6f 6e 3b 0a 20 20 7d 0a 7d 20 7b  version;.  }.} {
6d30: 2d 34 35 30 7d 0a 7d 20 3b 20 23 20 69 66 63 61  -450}.} ; # ifca
6d40: 70 61 62 6c 65 20 73 63 68 65 6d 61 5f 76 65 72  pable schema_ver
6d50: 73 69 6f 6e 0a 0a 23 20 43 68 65 63 6b 20 74 6f  sion..# Check to
6d60: 20 73 65 65 20 69 66 20 54 45 4d 50 5f 53 54 4f   see if TEMP_STO
6d70: 52 45 20 69 73 20 6d 65 6d 6f 72 79 20 6f 72 20  RE is memory or 
6d80: 64 69 73 6b 2e 20 20 52 65 74 75 72 6e 20 73 74  disk.  Return st
6d90: 72 69 6e 67 73 0a 23 20 22 6d 65 6d 6f 72 79 22  rings.# "memory"
6da0: 20 6f 72 20 22 64 69 73 6b 22 20 61 73 20 61 70   or "disk" as ap
6db0: 70 72 6f 70 72 69 61 74 65 2e 0a 23 0a 70 72 6f  propriate..#.pro
6dc0: 63 20 63 68 65 63 6b 5f 74 65 6d 70 5f 73 74 6f  c check_temp_sto
6dd0: 72 65 20 7b 7d 20 7b 0a 20 20 64 62 20 65 76 61  re {} {.  db eva
6de0: 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 74  l {.    PRAGMA t
6df0: 65 6d 70 2e 63 61 63 68 65 5f 73 69 7a 65 20 3d  emp.cache_size =
6e00: 20 31 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54   1;.    CREATE T
6e10: 45 4d 50 20 54 41 42 4c 45 20 49 46 20 4e 4f 54  EMP TABLE IF NOT
6e20: 20 45 58 49 53 54 53 20 61 28 62 29 3b 0a 20 20   EXISTS a(b);.  
6e30: 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 61 3b    DELETE FROM a;
6e40: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
6e50: 20 61 20 56 41 4c 55 45 53 28 72 61 6e 64 6f 6d   a VALUES(random
6e60: 62 6c 6f 62 28 31 30 30 30 29 29 3b 0a 20 20 20  blob(1000));.   
6e70: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 61 20 53   INSERT INTO a S
6e80: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 61 3b 0a  ELECT * FROM a;.
6e90: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
6ea0: 61 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20  a SELECT * FROM 
6eb0: 61 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  a;.    INSERT IN
6ec0: 54 4f 20 61 20 53 45 4c 45 43 54 20 2a 20 46 52  TO a SELECT * FR
6ed0: 4f 4d 20 61 3b 0a 20 20 20 20 49 4e 53 45 52 54  OM a;.    INSERT
6ee0: 20 49 4e 54 4f 20 61 20 53 45 4c 45 43 54 20 2a   INTO a SELECT *
6ef0: 20 46 52 4f 4d 20 61 3b 0a 20 20 20 20 49 4e 53   FROM a;.    INS
6f00: 45 52 54 20 49 4e 54 4f 20 61 20 53 45 4c 45 43  ERT INTO a SELEC
6f10: 54 20 2a 20 46 52 4f 4d 20 61 3b 0a 20 20 20 20  T * FROM a;.    
6f20: 49 4e 53 45 52 54 20 49 4e 54 4f 20 61 20 53 45  INSERT INTO a SE
6f30: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 61 3b 0a 20  LECT * FROM a;. 
6f40: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 61     INSERT INTO a
6f50: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 61   SELECT * FROM a
6f60: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
6f70: 4f 20 61 20 53 45 4c 45 43 54 20 2a 20 46 52 4f  O a SELECT * FRO
6f80: 4d 20 61 3b 0a 20 20 7d 0a 20 20 64 62 20 65 76  M a;.  }.  db ev
6f90: 61 6c 20 7b 50 52 41 47 4d 41 20 64 61 74 61 62  al {PRAGMA datab
6fa0: 61 73 65 5f 6c 69 73 74 7d 20 7b 0a 20 20 20 20  ase_list} {.    
6fb0: 69 66 20 7b 24 6e 61 6d 65 3d 3d 22 74 65 6d 70  if {$name=="temp
6fc0: 22 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20 62  "} {.      set b
6fd0: 74 20 5b 62 74 72 65 65 5f 66 72 6f 6d 5f 64 62  t [btree_from_db
6fe0: 20 64 62 20 31 5d 0a 20 20 20 20 20 20 69 66 20   db 1].      if 
6ff0: 7b 5b 62 74 72 65 65 5f 69 73 6d 65 6d 64 62 20  {[btree_ismemdb 
7000: 24 62 74 5d 7d 20 7b 0a 20 20 20 20 20 20 20 20  $bt]} {.        
7010: 72 65 74 75 72 6e 20 22 6d 65 6d 6f 72 79 22 0a  return "memory".
7020: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 72 65        }.      re
7030: 74 75 72 6e 20 22 64 69 73 6b 22 0a 20 20 20 20  turn "disk".    
7040: 7d 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 22  }.  }.  return "
7050: 75 6e 6b 6e 6f 77 6e 22 0a 7d 0a 0a 23 20 41 70  unknown".}..# Ap
7060: 70 6c 69 63 61 74 69 6f 6e 5f 49 44 0a 23 0a 64  plication_ID.#.d
7070: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e  o_test pragma-8.
7080: 33 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  3.1 {.  execsql 
7090: 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 61 70 70  {.    PRAGMA app
70a0: 6c 69 63 61 74 69 6f 6e 5f 69 64 3b 0a 20 20 7d  lication_id;.  }
70b0: 0a 7d 20 7b 30 7d 0a 64 6f 5f 74 65 73 74 20 70  .} {0}.do_test p
70c0: 72 61 67 6d 61 2d 38 2e 33 2e 32 20 7b 0a 20 20  ragma-8.3.2 {.  
70d0: 65 78 65 63 73 71 6c 20 7b 50 52 41 47 4d 41 20  execsql {PRAGMA 
70e0: 41 70 70 6c 69 63 61 74 69 6f 6e 5f 49 44 28 31  Application_ID(1
70f0: 32 33 34 35 29 3b 20 50 52 41 47 4d 41 20 61 70  2345); PRAGMA ap
7100: 70 6c 69 63 61 74 69 6f 6e 5f 69 64 3b 7d 0a 7d  plication_id;}.}
7110: 20 7b 31 32 33 34 35 7d 0a 0a 23 20 54 65 73 74   {12345}..# Test
7120: 20 74 65 6d 70 5f 73 74 6f 72 65 20 61 6e 64 20   temp_store and 
7130: 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63  temp_store_direc
7140: 74 6f 72 79 20 70 72 61 67 6d 61 73 0a 23 0a 69  tory pragmas.#.i
7150: 66 63 61 70 61 62 6c 65 20 70 61 67 65 72 5f 70  fcapable pager_p
7160: 72 61 67 6d 61 73 20 7b 0a 64 6f 5f 74 65 73 74  ragmas {.do_test
7170: 20 70 72 61 67 6d 61 2d 39 2e 31 20 7b 0a 20 20   pragma-9.1 {.  
7180: 64 62 20 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74  db close.  sqlit
7190: 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20  e3 db test.db.  
71a0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52  execsql {.    PR
71b0: 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 3b  AGMA temp_store;
71c0: 0a 20 20 7d 0a 7d 20 7b 30 7d 0a 69 66 20 7b 24  .  }.} {0}.if {$
71d0: 54 45 4d 50 5f 53 54 4f 52 45 3c 3d 31 7d 20 7b  TEMP_STORE<=1} {
71e0: 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .  do_test pragm
71f0: 61 2d 39 2e 31 2e 31 20 7b 0a 20 20 20 20 63 68  a-9.1.1 {.    ch
7200: 65 63 6b 5f 74 65 6d 70 5f 73 74 6f 72 65 0a 20  eck_temp_store. 
7210: 20 7d 20 7b 64 69 73 6b 7d 0a 7d 20 65 6c 73 65   } {disk}.} else
7220: 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61   {.  do_test pra
7230: 67 6d 61 2d 39 2e 31 2e 31 20 7b 0a 20 20 20 20  gma-9.1.1 {.    
7240: 63 68 65 63 6b 5f 74 65 6d 70 5f 73 74 6f 72 65  check_temp_store
7250: 0a 20 20 7d 20 7b 6d 65 6d 6f 72 79 7d 0a 7d 0a  .  } {memory}.}.
7260: 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d  .do_test pragma-
7270: 39 2e 32 20 7b 0a 20 20 64 62 20 63 6c 6f 73 65  9.2 {.  db close
7280: 0a 20 20 73 71 6c 69 74 65 33 20 64 62 20 74 65  .  sqlite3 db te
7290: 73 74 2e 64 62 0a 20 20 65 78 65 63 73 71 6c 20  st.db.  execsql 
72a0: 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d  {.    PRAGMA tem
72b0: 70 5f 73 74 6f 72 65 3d 66 69 6c 65 3b 0a 20 20  p_store=file;.  
72c0: 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74    PRAGMA temp_st
72d0: 6f 72 65 3b 0a 20 20 7d 0a 7d 20 7b 31 7d 0a 69  ore;.  }.} {1}.i
72e0: 66 20 7b 24 54 45 4d 50 5f 53 54 4f 52 45 3d 3d  f {$TEMP_STORE==
72f0: 33 7d 20 7b 0a 20 20 23 20 57 68 65 6e 20 54 45  3} {.  # When TE
7300: 4d 50 5f 53 54 4f 52 45 20 69 73 20 33 2c 20 61  MP_STORE is 3, a
7310: 6c 77 61 79 73 20 75 73 65 20 6d 65 6d 6f 72 79  lways use memory
7320: 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 70   regardless of p
7330: 72 61 67 6d 61 20 73 65 74 74 69 6e 67 73 2e 0a  ragma settings..
7340: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
7350: 2d 39 2e 32 2e 31 20 7b 0a 20 20 20 20 63 68 65  -9.2.1 {.    che
7360: 63 6b 5f 74 65 6d 70 5f 73 74 6f 72 65 0a 20 20  ck_temp_store.  
7370: 7d 20 7b 6d 65 6d 6f 72 79 7d 0a 7d 20 65 6c 73  } {memory}.} els
7380: 65 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 70 72  e {.  do_test pr
7390: 61 67 6d 61 2d 39 2e 32 2e 31 20 7b 0a 20 20 20  agma-9.2.1 {.   
73a0: 20 63 68 65 63 6b 5f 74 65 6d 70 5f 73 74 6f 72   check_temp_stor
73b0: 65 0a 20 20 7d 20 7b 64 69 73 6b 7d 0a 7d 0a 0a  e.  } {disk}.}..
73c0: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 39  do_test pragma-9
73d0: 2e 33 20 7b 0a 20 20 64 62 20 63 6c 6f 73 65 0a  .3 {.  db close.
73e0: 20 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73    sqlite3 db tes
73f0: 74 2e 64 62 0a 20 20 65 78 65 63 73 71 6c 20 7b  t.db.  execsql {
7400: 0a 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70  .    PRAGMA temp
7410: 5f 73 74 6f 72 65 3d 6d 65 6d 6f 72 79 3b 0a 20  _store=memory;. 
7420: 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73     PRAGMA temp_s
7430: 74 6f 72 65 3b 0a 20 20 7d 0a 7d 20 7b 32 7d 0a  tore;.  }.} {2}.
7440: 69 66 20 7b 24 54 45 4d 50 5f 53 54 4f 52 45 3d  if {$TEMP_STORE=
7450: 3d 30 7d 20 7b 0a 20 20 23 20 57 68 65 6e 20 54  =0} {.  # When T
7460: 45 4d 50 5f 53 54 4f 52 45 20 69 73 20 30 2c 20  EMP_STORE is 0, 
7470: 61 6c 77 61 79 73 20 75 73 65 20 74 68 65 20 64  always use the d
7480: 69 73 6b 20 72 65 67 61 72 64 6c 65 73 73 20 6f  isk regardless o
7490: 66 20 70 72 61 67 6d 61 20 73 65 74 74 69 6e 67  f pragma setting
74a0: 73 2e 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61  s..  do_test pra
74b0: 67 6d 61 2d 39 2e 33 2e 31 20 7b 0a 20 20 20 20  gma-9.3.1 {.    
74c0: 63 68 65 63 6b 5f 74 65 6d 70 5f 73 74 6f 72 65  check_temp_store
74d0: 0a 20 20 7d 20 7b 64 69 73 6b 7d 0a 7d 20 65 6c  .  } {disk}.} el
74e0: 73 65 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 70  se {.  do_test p
74f0: 72 61 67 6d 61 2d 39 2e 33 2e 31 20 7b 0a 20 20  ragma-9.3.1 {.  
7500: 20 20 63 68 65 63 6b 5f 74 65 6d 70 5f 73 74 6f    check_temp_sto
7510: 72 65 0a 20 20 7d 20 7b 6d 65 6d 6f 72 79 7d 0a  re.  } {memory}.
7520: 7d 0a 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  }..do_test pragm
7530: 61 2d 39 2e 34 20 7b 0a 20 20 65 78 65 63 73 71  a-9.4 {.  execsq
7540: 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 74  l {.    PRAGMA t
7550: 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74  emp_store_direct
7560: 6f 72 79 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 69 66  ory;.  }.} {}.if
7570: 63 61 70 61 62 6c 65 20 77 73 64 20 7b 0a 20 20  capable wsd {.  
7580: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 39  do_test pragma-9
7590: 2e 35 20 7b 0a 20 20 20 20 73 65 74 20 70 77 64  .5 {.    set pwd
75a0: 20 5b 73 74 72 69 6e 67 20 6d 61 70 20 7b 27 20   [string map {' 
75b0: 27 27 7d 20 5b 66 69 6c 65 20 6e 61 74 69 76 65  ''} [file native
75c0: 6e 61 6d 65 20 5b 67 65 74 5f 70 77 64 5d 5d 5d  name [get_pwd]]]
75d0: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 22 0a 20  .    execsql ". 
75e0: 20 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70       PRAGMA temp
75f0: 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79  _store_directory
7600: 3d 27 24 70 77 64 27 3b 0a 20 20 20 20 22 0a 20  ='$pwd';.    ". 
7610: 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20   } {}.  do_test 
7620: 70 72 61 67 6d 61 2d 39 2e 36 20 7b 0a 20 20 20  pragma-9.6 {.   
7630: 20 65 78 65 63 73 71 6c 20 7b 20 0a 20 20 20 20   execsql { .    
7640: 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74    PRAGMA temp_st
7650: 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 3b 0a 20  ore_directory;. 
7660: 20 20 20 7d 0a 20 20 7d 20 5b 6c 69 73 74 20 5b     }.  } [list [
7670: 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20  file nativename 
7680: 5b 67 65 74 5f 70 77 64 5d 5d 5d 0a 20 20 64 6f  [get_pwd]]].  do
7690: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 39 2e 37  _test pragma-9.7
76a0: 20 7b 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20   {.    catchsql 
76b0: 7b 20 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20  { .      PRAGMA 
76c0: 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63  temp_store_direc
76d0: 74 6f 72 79 3d 27 2f 4e 4f 4e 2f 45 58 49 53 54  tory='/NON/EXIST
76e0: 45 4e 54 2f 50 41 54 48 2f 46 4f 4f 42 41 52 27  ENT/PATH/FOOBAR'
76f0: 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 31 20 7b  ;.    }.  } {1 {
7700: 6e 6f 74 20 61 20 77 72 69 74 61 62 6c 65 20 64  not a writable d
7710: 69 72 65 63 74 6f 72 79 7d 7d 0a 20 20 64 6f 5f  irectory}}.  do_
7720: 74 65 73 74 20 70 72 61 67 6d 61 2d 39 2e 38 20  test pragma-9.8 
7730: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 20  {.    execsql { 
7740: 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 74 65  .      PRAGMA te
7750: 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f  mp_store_directo
7760: 72 79 3d 27 27 3b 0a 20 20 20 20 7d 0a 20 20 7d  ry='';.    }.  }
7770: 20 7b 7d 0a 20 20 69 66 20 7b 21 5b 69 6e 66 6f   {}.  if {![info
7780: 20 65 78 69 73 74 73 20 54 45 4d 50 5f 53 54 4f   exists TEMP_STO
7790: 52 45 5d 20 7c 7c 20 24 54 45 4d 50 5f 53 54 4f  RE] || $TEMP_STO
77a0: 52 45 3c 3d 31 7d 20 7b 0a 20 20 20 20 69 66 63  RE<=1} {.    ifc
77b0: 61 70 61 62 6c 65 20 74 65 6d 70 64 62 20 7b 0a  apable tempdb {.
77c0: 20 20 20 20 20 20 64 6f 5f 74 65 73 74 20 70 72        do_test pr
77d0: 61 67 6d 61 2d 39 2e 39 20 7b 0a 20 20 20 20 20  agma-9.9 {.     
77e0: 20 20 20 65 78 65 63 73 71 6c 20 7b 20 0a 20 20     execsql { .  
77f0: 20 20 20 20 20 20 20 20 50 52 41 47 4d 41 20 74          PRAGMA t
7800: 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74  emp_store_direct
7810: 6f 72 79 3b 0a 20 20 20 20 20 20 20 20 20 20 50  ory;.          P
7820: 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65  RAGMA temp_store
7830: 3d 46 49 4c 45 3b 0a 20 20 20 20 20 20 20 20 20  =FILE;.         
7840: 20 43 52 45 41 54 45 20 54 45 4d 50 20 54 41 42   CREATE TEMP TAB
7850: 4c 45 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69  LE temp_store_di
7860: 72 65 63 74 6f 72 79 5f 74 65 73 74 28 61 20 69  rectory_test(a i
7870: 6e 74 65 67 65 72 29 3b 0a 20 20 20 20 20 20 20  nteger);.       
7880: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
7890: 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74  emp_store_direct
78a0: 6f 72 79 5f 74 65 73 74 20 76 61 6c 75 65 73 20  ory_test values 
78b0: 28 32 29 3b 0a 20 20 20 20 20 20 20 20 20 20 53  (2);.          S
78c0: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 65 6d  ELECT * FROM tem
78d0: 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72  p_store_director
78e0: 79 5f 74 65 73 74 3b 0a 20 20 20 20 20 20 20 20  y_test;.        
78f0: 7d 0a 20 20 20 20 20 20 7d 20 7b 32 7d 0a 20 20  }.      } {2}.  
7900: 20 20 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67      do_test prag
7910: 6d 61 2d 39 2e 31 30 20 7b 0a 20 20 20 20 20 20  ma-9.10 {.      
7920: 20 20 63 61 74 63 68 73 71 6c 20 22 0a 20 20 20    catchsql ".   
7930: 20 20 20 20 20 20 20 50 52 41 47 4d 41 20 74 65         PRAGMA te
7940: 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f  mp_store_directo
7950: 72 79 3d 27 24 70 77 64 27 3b 0a 20 20 20 20 20  ry='$pwd';.     
7960: 20 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52       SELECT * FR
7970: 4f 4d 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69  OM temp_store_di
7980: 72 65 63 74 6f 72 79 5f 74 65 73 74 3b 0a 20 20  rectory_test;.  
7990: 20 20 20 20 20 20 22 0a 20 20 20 20 20 20 7d 20        ".      } 
79a0: 7b 31 20 7b 6e 6f 20 73 75 63 68 20 74 61 62 6c  {1 {no such tabl
79b0: 65 3a 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69  e: temp_store_di
79c0: 72 65 63 74 6f 72 79 5f 74 65 73 74 7d 7d 0a 20  rectory_test}}. 
79d0: 20 20 20 7d 0a 20 20 7d 0a 7d 0a 64 6f 5f 74 65     }.  }.}.do_te
79e0: 73 74 20 70 72 61 67 6d 61 2d 39 2e 31 31 20 7b  st pragma-9.11 {
79f0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
7a00: 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f   PRAGMA temp_sto
7a10: 72 65 20 3d 20 30 3b 0a 20 20 20 20 50 52 41 47  re = 0;.    PRAG
7a20: 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 3b 0a 20  MA temp_store;. 
7a30: 20 7d 0a 7d 20 7b 30 7d 0a 64 6f 5f 74 65 73 74   }.} {0}.do_test
7a40: 20 70 72 61 67 6d 61 2d 39 2e 31 32 20 7b 0a 20   pragma-9.12 {. 
7a50: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50   execsql {.    P
7a60: 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65  RAGMA temp_store
7a70: 20 3d 20 31 3b 0a 20 20 20 20 50 52 41 47 4d 41   = 1;.    PRAGMA
7a80: 20 74 65 6d 70 5f 73 74 6f 72 65 3b 0a 20 20 7d   temp_store;.  }
7a90: 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 70  .} {1}.do_test p
7aa0: 72 61 67 6d 61 2d 39 2e 31 33 20 7b 0a 20 20 65  ragma-9.13 {.  e
7ab0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41  xecsql {.    PRA
7ac0: 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 20 3d  GMA temp_store =
7ad0: 20 32 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 74   2;.    PRAGMA t
7ae0: 65 6d 70 5f 73 74 6f 72 65 3b 0a 20 20 7d 0a 7d  emp_store;.  }.}
7af0: 20 7b 32 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61   {2}.do_test pra
7b00: 67 6d 61 2d 39 2e 31 34 20 7b 0a 20 20 65 78 65  gma-9.14 {.  exe
7b10: 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d  csql {.    PRAGM
7b20: 41 20 74 65 6d 70 5f 73 74 6f 72 65 20 3d 20 33  A temp_store = 3
7b30: 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d  ;.    PRAGMA tem
7b40: 70 5f 73 74 6f 72 65 3b 0a 20 20 7d 0a 7d 20 7b  p_store;.  }.} {
7b50: 30 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  0}.do_test pragm
7b60: 61 2d 39 2e 31 35 20 7b 0a 20 20 63 61 74 63 68  a-9.15 {.  catch
7b70: 73 71 6c 20 7b 0a 20 20 20 20 42 45 47 49 4e 20  sql {.    BEGIN 
7b80: 45 58 43 4c 55 53 49 56 45 3b 0a 20 20 20 20 43  EXCLUSIVE;.    C
7b90: 52 45 41 54 45 20 54 45 4d 50 20 54 41 42 4c 45  REATE TEMP TABLE
7ba0: 20 74 65 6d 70 5f 74 61 62 6c 65 28 74 29 3b 0a   temp_table(t);.
7bb0: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
7bc0: 74 65 6d 70 5f 74 61 62 6c 65 20 56 41 4c 55 45  temp_table VALUE
7bd0: 53 28 27 76 61 6c 75 61 62 6c 65 20 64 61 74 61  S('valuable data
7be0: 27 29 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 74  ');.    PRAGMA t
7bf0: 65 6d 70 5f 73 74 6f 72 65 20 3d 20 31 3b 0a 20  emp_store = 1;. 
7c00: 20 7d 0a 7d 20 7b 31 20 7b 74 65 6d 70 6f 72 61   }.} {1 {tempora
7c10: 72 79 20 73 74 6f 72 61 67 65 20 63 61 6e 6e 6f  ry storage canno
7c20: 74 20 62 65 20 63 68 61 6e 67 65 64 20 66 72 6f  t be changed fro
7c30: 6d 20 77 69 74 68 69 6e 20 61 20 74 72 61 6e 73  m within a trans
7c40: 61 63 74 69 6f 6e 7d 7d 0a 64 6f 5f 74 65 73 74  action}}.do_test
7c50: 20 70 72 61 67 6d 61 2d 39 2e 31 36 20 7b 0a 20   pragma-9.16 {. 
7c60: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53   execsql {.    S
7c70: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 65 6d  ELECT * FROM tem
7c80: 70 5f 74 61 62 6c 65 3b 0a 20 20 20 20 43 4f 4d  p_table;.    COM
7c90: 4d 49 54 3b 0a 20 20 7d 0a 7d 20 7b 7b 76 61 6c  MIT;.  }.} {{val
7ca0: 75 61 62 6c 65 20 64 61 74 61 7d 7d 0a 0a 64 6f  uable data}}..do
7cb0: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 39 2e 31  _test pragma-9.1
7cc0: 37 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  7 {.  execsql {.
7cd0: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
7ce0: 74 65 6d 70 5f 74 61 62 6c 65 20 56 41 4c 55 45  temp_table VALUE
7cf0: 53 28 27 76 61 6c 75 61 62 6c 65 20 64 61 74 61  S('valuable data
7d00: 20 49 49 27 29 3b 0a 20 20 20 20 53 45 4c 45 43   II');.    SELEC
7d10: 54 20 2a 20 46 52 4f 4d 20 74 65 6d 70 5f 74 61  T * FROM temp_ta
7d20: 62 6c 65 3b 0a 20 20 7d 0a 7d 20 7b 7b 76 61 6c  ble;.  }.} {{val
7d30: 75 61 62 6c 65 20 64 61 74 61 7d 20 7b 76 61 6c  uable data} {val
7d40: 75 61 62 6c 65 20 64 61 74 61 20 49 49 7d 7d 0a  uable data II}}.
7d50: 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d  .do_test pragma-
7d60: 39 2e 31 38 20 7b 0a 20 20 73 65 74 20 72 63 20  9.18 {.  set rc 
7d70: 5b 63 61 74 63 68 20 7b 0a 20 20 20 20 64 62 20  [catch {.    db 
7d80: 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 74 20 46  eval {SELECT t F
7d90: 52 4f 4d 20 74 65 6d 70 5f 74 61 62 6c 65 7d 20  ROM temp_table} 
7da0: 7b 0a 20 20 20 20 20 20 65 78 65 63 73 71 6c 20  {.      execsql 
7db0: 7b 70 72 61 67 6d 61 20 74 65 6d 70 5f 73 74 6f  {pragma temp_sto
7dc0: 72 65 20 3d 20 31 7d 0a 20 20 20 20 7d 0a 20 20  re = 1}.    }.  
7dd0: 7d 20 6d 73 67 5d 0a 20 20 6c 69 73 74 20 24 72  } msg].  list $r
7de0: 63 20 24 6d 73 67 0a 7d 20 7b 31 20 7b 74 65 6d  c $msg.} {1 {tem
7df0: 70 6f 72 61 72 79 20 73 74 6f 72 61 67 65 20 63  porary storage c
7e00: 61 6e 6e 6f 74 20 62 65 20 63 68 61 6e 67 65 64  annot be changed
7e10: 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 20 74   from within a t
7e20: 72 61 6e 73 61 63 74 69 6f 6e 7d 7d 0a 0a 7d 20  ransaction}}..} 
7e30: 3b 23 20 69 66 63 61 70 61 62 6c 65 20 70 61 67  ;# ifcapable pag
7e40: 65 72 5f 70 72 61 67 6d 61 73 0a 0a 69 66 63 61  er_pragmas..ifca
7e50: 70 61 62 6c 65 20 74 72 69 67 67 65 72 20 7b 0a  pable trigger {.
7e60: 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d  .do_test pragma-
7e70: 31 30 2e 30 20 7b 0a 20 20 63 61 74 63 68 73 71  10.0 {.  catchsq
7e80: 6c 20 7b 0a 20 20 20 20 44 52 4f 50 20 54 41 42  l {.    DROP TAB
7e90: 4c 45 20 6d 61 69 6e 2e 74 31 3b 0a 20 20 7d 0a  LE main.t1;.  }.
7ea0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
7eb0: 50 52 41 47 4d 41 20 63 6f 75 6e 74 5f 63 68 61  PRAGMA count_cha
7ec0: 6e 67 65 73 20 3d 20 31 3b 0a 0a 20 20 20 20 43  nges = 1;..    C
7ed0: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 61  REATE TABLE t1(a
7ee0: 20 50 52 49 4d 41 52 59 20 4b 45 59 29 3b 0a 20   PRIMARY KEY);. 
7ef0: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
7f00: 74 31 5f 6d 69 72 72 6f 72 28 61 29 3b 0a 20 20  t1_mirror(a);.  
7f10: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
7f20: 31 5f 6d 69 72 72 6f 72 32 28 61 29 3b 0a 20 20  1_mirror2(a);.  
7f30: 20 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52    CREATE TRIGGER
7f40: 20 74 31 5f 62 69 20 42 45 46 4f 52 45 20 49 4e   t1_bi BEFORE IN
7f50: 53 45 52 54 20 4f 4e 20 74 31 20 42 45 47 49 4e  SERT ON t1 BEGIN
7f60: 20 0a 20 20 20 20 20 20 49 4e 53 45 52 54 20 49   .      INSERT I
7f70: 4e 54 4f 20 74 31 5f 6d 69 72 72 6f 72 20 56 41  NTO t1_mirror VA
7f80: 4c 55 45 53 28 6e 65 77 2e 61 29 3b 0a 20 20 20  LUES(new.a);.   
7f90: 20 45 4e 44 3b 0a 20 20 20 20 43 52 45 41 54 45   END;.    CREATE
7fa0: 20 54 52 49 47 47 45 52 20 74 31 5f 61 69 20 41   TRIGGER t1_ai A
7fb0: 46 54 45 52 20 49 4e 53 45 52 54 20 4f 4e 20 74  FTER INSERT ON t
7fc0: 31 20 42 45 47 49 4e 20 0a 20 20 20 20 20 20 49  1 BEGIN .      I
7fd0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 5f 6d 69  NSERT INTO t1_mi
7fe0: 72 72 6f 72 32 20 56 41 4c 55 45 53 28 6e 65 77  rror2 VALUES(new
7ff0: 2e 61 29 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20  .a);.    END;.  
8000: 20 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52    CREATE TRIGGER
8010: 20 74 31 5f 62 75 20 42 45 46 4f 52 45 20 55 50   t1_bu BEFORE UP
8020: 44 41 54 45 20 4f 4e 20 74 31 20 42 45 47 49 4e  DATE ON t1 BEGIN
8030: 20 0a 20 20 20 20 20 20 55 50 44 41 54 45 20 74   .      UPDATE t
8040: 31 5f 6d 69 72 72 6f 72 20 53 45 54 20 61 20 3d  1_mirror SET a =
8050: 20 6e 65 77 2e 61 20 57 48 45 52 45 20 61 20 3d   new.a WHERE a =
8060: 20 6f 6c 64 2e 61 3b 0a 20 20 20 20 45 4e 44 3b   old.a;.    END;
8070: 0a 20 20 20 20 43 52 45 41 54 45 20 54 52 49 47  .    CREATE TRIG
8080: 47 45 52 20 74 31 5f 61 75 20 41 46 54 45 52 20  GER t1_au AFTER 
8090: 55 50 44 41 54 45 20 4f 4e 20 74 31 20 42 45 47  UPDATE ON t1 BEG
80a0: 49 4e 20 0a 20 20 20 20 20 20 55 50 44 41 54 45  IN .      UPDATE
80b0: 20 74 31 5f 6d 69 72 72 6f 72 32 20 53 45 54 20   t1_mirror2 SET 
80c0: 61 20 3d 20 6e 65 77 2e 61 20 57 48 45 52 45 20  a = new.a WHERE 
80d0: 61 20 3d 20 6f 6c 64 2e 61 3b 0a 20 20 20 20 45  a = old.a;.    E
80e0: 4e 44 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54  ND;.    CREATE T
80f0: 52 49 47 47 45 52 20 74 31 5f 62 64 20 42 45 46  RIGGER t1_bd BEF
8100: 4f 52 45 20 44 45 4c 45 54 45 20 4f 4e 20 74 31  ORE DELETE ON t1
8110: 20 42 45 47 49 4e 20 0a 20 20 20 20 20 20 44 45   BEGIN .      DE
8120: 4c 45 54 45 20 46 52 4f 4d 20 74 31 5f 6d 69 72  LETE FROM t1_mir
8130: 72 6f 72 20 57 48 45 52 45 20 61 20 3d 20 6f 6c  ror WHERE a = ol
8140: 64 2e 61 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20  d.a;.    END;.  
8150: 20 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52    CREATE TRIGGER
8160: 20 74 31 5f 61 64 20 41 46 54 45 52 20 44 45 4c   t1_ad AFTER DEL
8170: 45 54 45 20 4f 4e 20 74 31 20 42 45 47 49 4e 20  ETE ON t1 BEGIN 
8180: 0a 20 20 20 20 20 20 44 45 4c 45 54 45 20 46 52  .      DELETE FR
8190: 4f 4d 20 74 31 5f 6d 69 72 72 6f 72 32 20 57 48  OM t1_mirror2 WH
81a0: 45 52 45 20 61 20 3d 20 6f 6c 64 2e 61 3b 0a 20  ERE a = old.a;. 
81b0: 20 20 20 45 4e 44 3b 0a 20 20 7d 0a 7d 20 7b 7d     END;.  }.} {}
81c0: 0a 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  ..do_test pragma
81d0: 2d 31 30 2e 31 20 7b 0a 20 20 65 78 65 63 73 71  -10.1 {.  execsq
81e0: 6c 20 7b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  l {.    INSERT I
81f0: 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 72 61  NTO t1 VALUES(ra
8200: 6e 64 73 74 72 28 31 30 2c 31 30 29 29 3b 0a 20  ndstr(10,10));. 
8210: 20 7d 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74   }.} {1}.do_test
8220: 20 70 72 61 67 6d 61 2d 31 30 2e 32 20 7b 0a 20   pragma-10.2 {. 
8230: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 55   execsql {.    U
8240: 50 44 41 54 45 20 74 31 20 53 45 54 20 61 20 3d  PDATE t1 SET a =
8250: 20 72 61 6e 64 73 74 72 28 31 30 2c 31 30 29 3b   randstr(10,10);
8260: 0a 20 20 7d 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65  .  }.} {1}.do_te
8270: 73 74 20 70 72 61 67 6d 61 2d 31 30 2e 33 20 7b  st pragma-10.3 {
8280: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
8290: 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 31 3b   DELETE FROM t1;
82a0: 0a 20 20 7d 0a 7d 20 7b 31 7d 0a 0a 7d 20 3b 23  .  }.} {1}..} ;#
82b0: 20 69 66 63 61 70 61 62 6c 65 20 74 72 69 67 67   ifcapable trigg
82c0: 65 72 0a 0a 69 66 63 61 70 61 62 6c 65 20 73 63  er..ifcapable sc
82d0: 68 65 6d 61 5f 70 72 61 67 6d 61 73 20 7b 0a 20  hema_pragmas {. 
82e0: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
82f0: 31 31 2e 31 20 7b 0a 20 20 20 20 65 78 65 63 73  11.1 {.    execs
8300: 71 6c 32 20 7b 0a 20 20 20 20 20 20 70 72 61 67  ql2 {.      prag
8310: 6d 61 20 63 6f 6c 6c 61 74 69 6f 6e 5f 6c 69 73  ma collation_lis
8320: 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 73 65  t;.    }.  } {se
8330: 71 20 30 20 6e 61 6d 65 20 52 54 52 49 4d 20 73  q 0 name RTRIM s
8340: 65 71 20 31 20 6e 61 6d 65 20 4e 4f 43 41 53 45  eq 1 name NOCASE
8350: 20 73 65 71 20 32 20 6e 61 6d 65 20 42 49 4e 41   seq 2 name BINA
8360: 52 59 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72  RY}.  do_test pr
8370: 61 67 6d 61 2d 31 31 2e 32 20 7b 0a 20 20 20 20  agma-11.2 {.    
8380: 64 62 20 63 6f 6c 6c 61 74 65 20 4e 65 77 5f 43  db collate New_C
8390: 6f 6c 6c 61 74 69 6f 6e 20 62 6c 61 68 2e 2e 2e  ollation blah...
83a0: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
83b0: 20 20 20 20 20 70 72 61 67 6d 61 20 63 6f 6c 6c       pragma coll
83c0: 61 74 69 6f 6e 5f 6c 69 73 74 3b 0a 20 20 20 20  ation_list;.    
83d0: 7d 0a 20 20 7d 20 7b 30 20 4e 65 77 5f 43 6f 6c  }.  } {0 New_Col
83e0: 6c 61 74 69 6f 6e 20 31 20 52 54 52 49 4d 20 32  lation 1 RTRIM 2
83f0: 20 4e 4f 43 41 53 45 20 33 20 42 49 4e 41 52 59   NOCASE 3 BINARY
8400: 7d 0a 7d 0a 0a 69 66 63 61 70 61 62 6c 65 20 73  }.}..ifcapable s
8410: 63 68 65 6d 61 5f 70 72 61 67 6d 61 73 26 26 74  chema_pragmas&&t
8420: 65 6d 70 64 62 20 7b 0a 20 20 64 6f 5f 74 65 73  empdb {.  do_tes
8430: 74 20 70 72 61 67 6d 61 2d 31 32 2e 31 20 7b 0a  t pragma-12.1 {.
8440: 20 20 20 20 73 71 6c 69 74 65 33 20 64 62 32 20      sqlite3 db2 
8450: 74 65 73 74 2e 64 62 0a 20 20 20 20 65 78 65 63  test.db.    exec
8460: 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47  sql {.      PRAG
8470: 4d 41 20 74 65 6d 70 2e 74 61 62 6c 65 5f 69 6e  MA temp.table_in
8480: 66 6f 28 27 61 62 63 27 29 3b 0a 20 20 20 20 7d  fo('abc');.    }
8490: 20 64 62 32 0a 20 20 7d 20 7b 7d 0a 20 20 64 62   db2.  } {}.  db
84a0: 32 20 63 6c 6f 73 65 0a 0a 20 20 64 6f 5f 74 65  2 close..  do_te
84b0: 73 74 20 70 72 61 67 6d 61 2d 31 32 2e 32 20 7b  st pragma-12.2 {
84c0: 0a 20 20 20 20 73 71 6c 69 74 65 33 20 64 62 32  .    sqlite3 db2
84d0: 20 74 65 73 74 2e 64 62 0a 20 20 20 20 65 78 65   test.db.    exe
84e0: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41  csql {.      PRA
84f0: 47 4d 41 20 74 65 6d 70 2e 64 65 66 61 75 6c 74  GMA temp.default
8500: 5f 63 61 63 68 65 5f 73 69 7a 65 20 3d 20 32 30  _cache_size = 20
8510: 30 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20  0;.      PRAGMA 
8520: 74 65 6d 70 2e 64 65 66 61 75 6c 74 5f 63 61 63  temp.default_cac
8530: 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 7d 20 64  he_size;.    } d
8540: 62 32 0a 20 20 7d 20 7b 32 30 30 7d 0a 20 20 64  b2.  } {200}.  d
8550: 62 32 20 63 6c 6f 73 65 0a 0a 20 20 64 6f 5f 74  b2 close..  do_t
8560: 65 73 74 20 70 72 61 67 6d 61 2d 31 32 2e 33 20  est pragma-12.3 
8570: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 20 64 62  {.    sqlite3 db
8580: 32 20 74 65 73 74 2e 64 62 0a 20 20 20 20 65 78  2 test.db.    ex
8590: 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52  ecsql {.      PR
85a0: 41 47 4d 41 20 74 65 6d 70 2e 63 61 63 68 65 5f  AGMA temp.cache_
85b0: 73 69 7a 65 20 3d 20 34 30 30 3b 0a 20 20 20 20  size = 400;.    
85c0: 20 20 50 52 41 47 4d 41 20 74 65 6d 70 2e 63 61    PRAGMA temp.ca
85d0: 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 7d 20  che_size;.    } 
85e0: 64 62 32 0a 20 20 7d 20 7b 34 30 30 7d 0a 20 20  db2.  } {400}.  
85f0: 64 62 32 20 63 6c 6f 73 65 0a 7d 0a 0a 69 66 63  db2 close.}..ifc
8600: 61 70 61 62 6c 65 20 62 6c 6f 62 6c 69 74 20 7b  apable bloblit {
8610: 0a 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  ..do_test pragma
8620: 2d 31 33 2e 31 20 7b 0a 20 20 65 78 65 63 73 71  -13.1 {.  execsq
8630: 6c 20 7b 0a 20 20 20 20 44 52 4f 50 20 54 41 42  l {.    DROP TAB
8640: 4c 45 20 49 46 20 45 58 49 53 54 53 20 74 34 3b  LE IF EXISTS t4;
8650: 0a 20 20 20 20 50 52 41 47 4d 41 20 76 64 62 65  .    PRAGMA vdbe
8660: 5f 74 72 61 63 65 3d 6f 6e 3b 0a 20 20 20 20 50  _trace=on;.    P
8670: 52 41 47 4d 41 20 76 64 62 65 5f 6c 69 73 74 69  RAGMA vdbe_listi
8680: 6e 67 3d 6f 6e 3b 0a 20 20 20 20 50 52 41 47 4d  ng=on;.    PRAGM
8690: 41 20 73 71 6c 5f 74 72 61 63 65 3d 6f 6e 3b 0a  A sql_trace=on;.
86a0: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
86b0: 20 74 34 28 61 20 49 4e 54 45 47 45 52 20 50 52   t4(a INTEGER PR
86c0: 49 4d 41 52 59 20 4b 45 59 2c 62 29 3b 0a 20 20  IMARY KEY,b);.  
86d0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 34    INSERT INTO t4
86e0: 28 62 29 20 56 41 4c 55 45 53 28 78 27 30 31 32  (b) VALUES(x'012
86f0: 33 34 35 36 37 38 39 61 62 63 64 65 66 30 31 32  3456789abcdef012
8700: 33 34 35 36 37 38 39 61 62 63 64 65 66 30 31 32  3456789abcdef012
8710: 33 34 35 36 37 38 39 27 29 3b 0a 20 20 20 20 49  3456789');.    I
8720: 4e 53 45 52 54 20 49 4e 54 4f 20 74 34 28 62 29  NSERT INTO t4(b)
8730: 20 56 41 4c 55 45 53 28 72 61 6e 64 73 74 72 28   VALUES(randstr(
8740: 33 30 2c 33 30 29 29 3b 0a 20 20 20 20 49 4e 53  30,30));.    INS
8750: 45 52 54 20 49 4e 54 4f 20 74 34 28 62 29 20 56  ERT INTO t4(b) V
8760: 41 4c 55 45 53 28 31 2e 32 33 34 35 36 29 3b 0a  ALUES(1.23456);.
8770: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
8780: 74 34 28 62 29 20 56 41 4c 55 45 53 28 4e 55 4c  t4(b) VALUES(NUL
8790: 4c 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  L);.    INSERT I
87a0: 4e 54 4f 20 74 34 28 62 29 20 56 41 4c 55 45 53  NTO t4(b) VALUES
87b0: 28 30 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20  (0);.    INSERT 
87c0: 49 4e 54 4f 20 74 34 28 62 29 20 53 45 4c 45 43  INTO t4(b) SELEC
87d0: 54 20 62 7c 7c 62 7c 7c 62 7c 7c 62 20 46 52 4f  T b||b||b||b FRO
87e0: 4d 20 74 34 3b 0a 20 20 20 20 53 45 4c 45 43 54  M t4;.    SELECT
87f0: 20 2a 20 46 52 4f 4d 20 74 34 3b 0a 20 20 7d 0a   * FROM t4;.  }.
8800: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
8810: 50 52 41 47 4d 41 20 76 64 62 65 5f 74 72 61 63  PRAGMA vdbe_trac
8820: 65 3d 6f 66 66 3b 0a 20 20 20 20 50 52 41 47 4d  e=off;.    PRAGM
8830: 41 20 76 64 62 65 5f 6c 69 73 74 69 6e 67 3d 6f  A vdbe_listing=o
8840: 66 66 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 73  ff;.    PRAGMA s
8850: 71 6c 5f 74 72 61 63 65 3d 6f 66 66 3b 0a 20 20  ql_trace=off;.  
8860: 7d 0a 7d 20 7b 7d 0a 0a 7d 20 3b 23 20 69 66 63  }.} {}..} ;# ifc
8870: 61 70 61 62 6c 65 20 62 6c 6f 62 6c 69 74 20 0a  apable bloblit .
8880: 0a 69 66 63 61 70 61 62 6c 65 20 70 61 67 65 72  .ifcapable pager
8890: 5f 70 72 61 67 6d 61 73 20 7b 0a 20 20 64 62 20  _pragmas {.  db 
88a0: 63 6c 6f 73 65 0a 20 20 66 6f 72 63 65 64 65 6c  close.  forcedel
88b0: 65 74 65 20 74 65 73 74 2e 64 62 0a 20 20 73 71  ete test.db.  sq
88c0: 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64 62  lite3 db test.db
88d0: 0a 20 0a 20 20 23 20 45 56 49 44 45 4e 43 45 2d  . .  # EVIDENCE-
88e0: 4f 46 3a 20 52 2d 31 35 36 37 32 2d 33 33 36 31  OF: R-15672-3361
88f0: 31 20 50 52 41 47 4d 41 20 73 63 68 65 6d 61 2e  1 PRAGMA schema.
8900: 70 61 67 65 5f 63 6f 75 6e 74 3b 20 52 65 74 75  page_count; Retu
8910: 72 6e 20 74 68 65 20 74 6f 74 61 6c 0a 20 20 23  rn the total.  #
8920: 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   number of pages
8930: 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
8940: 20 66 69 6c 65 2e 0a 20 20 23 0a 20 20 64 6f 5f   file..  #.  do_
8950: 74 65 73 74 20 70 72 61 67 6d 61 2d 31 34 2e 31  test pragma-14.1
8960: 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b   {.    execsql {
8970: 20 70 72 61 67 6d 61 20 61 75 74 6f 5f 76 61 63   pragma auto_vac
8980: 75 75 6d 20 3d 20 30 20 7d 0a 20 20 20 20 65 78  uum = 0 }.    ex
8990: 65 63 73 71 6c 20 7b 20 70 72 61 67 6d 61 20 70  ecsql { pragma p
89a0: 61 67 65 5f 63 6f 75 6e 74 3b 20 70 72 61 67 6d  age_count; pragm
89b0: 61 20 6d 61 69 6e 2e 70 61 67 65 5f 63 6f 75 6e  a main.page_coun
89c0: 74 20 7d 0a 20 20 7d 20 7b 30 20 30 7d 0a 0a 20  t }.  } {0 0}.. 
89d0: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
89e0: 31 34 2e 32 20 7b 0a 20 20 20 20 65 78 65 63 73  14.2 {.    execs
89f0: 71 6c 20 7b 20 0a 20 20 20 20 20 20 43 52 45 41  ql { .      CREA
8a00: 54 45 20 54 41 42 4c 45 20 61 62 63 28 61 2c 20  TE TABLE abc(a, 
8a10: 62 2c 20 63 29 3b 0a 20 20 20 20 20 20 50 52 41  b, c);.      PRA
8a20: 47 4d 41 20 70 61 67 65 5f 63 6f 75 6e 74 3b 0a  GMA page_count;.
8a30: 20 20 20 20 20 20 50 52 41 47 4d 41 20 6d 61 69        PRAGMA mai
8a40: 6e 2e 70 61 67 65 5f 63 6f 75 6e 74 3b 0a 20 20  n.page_count;.  
8a50: 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 2e      PRAGMA temp.
8a60: 70 61 67 65 5f 63 6f 75 6e 74 3b 0a 20 20 20 20  page_count;.    
8a70: 7d 0a 20 20 7d 20 7b 32 20 32 20 30 7d 0a 20 20  }.  } {2 2 0}.  
8a80: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31  do_test pragma-1
8a90: 34 2e 32 75 63 20 7b 0a 20 20 20 20 65 78 65 63  4.2uc {.    exec
8aa0: 73 71 6c 20 7b 70 72 61 67 6d 61 20 50 41 47 45  sql {pragma PAGE
8ab0: 5f 43 4f 55 4e 54 7d 0a 20 20 7d 20 7b 32 7d 0a  _COUNT}.  } {2}.
8ac0: 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .  do_test pragm
8ad0: 61 2d 31 34 2e 33 20 7b 0a 20 20 20 20 65 78 65  a-14.3 {.    exe
8ae0: 63 73 71 6c 20 7b 20 0a 20 20 20 20 20 20 42 45  csql { .      BE
8af0: 47 49 4e 3b 0a 20 20 20 20 20 20 43 52 45 41 54  GIN;.      CREAT
8b00: 45 20 54 41 42 4c 45 20 64 65 66 28 61 2c 20 62  E TABLE def(a, b
8b10: 2c 20 63 29 3b 0a 20 20 20 20 20 20 50 52 41 47  , c);.      PRAG
8b20: 4d 41 20 70 61 67 65 5f 63 6f 75 6e 74 3b 0a 20  MA page_count;. 
8b30: 20 20 20 7d 0a 20 20 7d 20 7b 33 7d 0a 20 20 64     }.  } {3}.  d
8b40: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 34  o_test pragma-14
8b50: 2e 33 75 63 20 7b 0a 20 20 20 20 65 78 65 63 73  .3uc {.    execs
8b60: 71 6c 20 7b 70 72 61 67 6d 61 20 50 41 47 45 5f  ql {pragma PAGE_
8b70: 43 4f 55 4e 54 7d 0a 20 20 7d 20 7b 33 7d 0a 0a  COUNT}.  } {3}..
8b80: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
8b90: 2d 31 34 2e 34 20 7b 0a 20 20 20 20 73 65 74 20  -14.4 {.    set 
8ba0: 70 61 67 65 5f 73 69 7a 65 20 5b 64 62 20 6f 6e  page_size [db on
8bb0: 65 20 7b 70 72 61 67 6d 61 20 70 61 67 65 5f 73  e {pragma page_s
8bc0: 69 7a 65 7d 5d 0a 20 20 20 20 65 78 70 72 20 5b  ize}].    expr [
8bd0: 66 69 6c 65 20 73 69 7a 65 20 74 65 73 74 2e 64  file size test.d
8be0: 62 5d 20 2f 20 24 70 61 67 65 5f 73 69 7a 65 0a  b] / $page_size.
8bf0: 20 20 7d 20 7b 32 7d 0a 0a 20 20 64 6f 5f 74 65    } {2}..  do_te
8c00: 73 74 20 70 72 61 67 6d 61 2d 31 34 2e 35 20 7b  st pragma-14.5 {
8c10: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
8c20: 20 20 20 20 20 52 4f 4c 4c 42 41 43 4b 3b 0a 20       ROLLBACK;. 
8c30: 20 20 20 20 20 50 52 41 47 4d 41 20 70 61 67 65       PRAGMA page
8c40: 5f 63 6f 75 6e 74 3b 0a 20 20 20 20 7d 0a 20 20  _count;.    }.  
8c50: 7d 20 7b 32 7d 0a 0a 20 20 64 6f 5f 74 65 73 74  } {2}..  do_test
8c60: 20 70 72 61 67 6d 61 2d 31 34 2e 36 20 7b 0a 20   pragma-14.6 {. 
8c70: 20 20 20 66 6f 72 63 65 64 65 6c 65 74 65 20 74     forcedelete t
8c80: 65 73 74 32 2e 64 62 0a 20 20 20 20 73 71 6c 69  est2.db.    sqli
8c90: 74 65 33 20 64 62 32 20 74 65 73 74 32 2e 64 62  te3 db2 test2.db
8ca0: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
8cb0: 20 20 20 20 20 50 52 41 47 4d 41 20 61 75 74 6f       PRAGMA auto
8cc0: 5f 76 61 63 75 75 6d 20 3d 20 30 3b 0a 20 20 20  _vacuum = 0;.   
8cd0: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
8ce0: 74 31 28 61 2c 20 62 2c 20 63 29 3b 0a 20 20 20  t1(a, b, c);.   
8cf0: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
8d00: 74 32 28 61 2c 20 62 2c 20 63 29 3b 0a 20 20 20  t2(a, b, c);.   
8d10: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
8d20: 74 33 28 61 2c 20 62 2c 20 63 29 3b 0a 20 20 20  t3(a, b, c);.   
8d30: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
8d40: 74 34 28 61 2c 20 62 2c 20 63 29 3b 0a 20 20 20  t4(a, b, c);.   
8d50: 20 7d 20 64 62 32 0a 20 20 20 20 64 62 32 20 63   } db2.    db2 c
8d60: 6c 6f 73 65 0a 20 20 20 20 65 78 65 63 73 71 6c  lose.    execsql
8d70: 20 7b 0a 20 20 20 20 20 20 41 54 54 41 43 48 20   {.      ATTACH 
8d80: 27 74 65 73 74 32 2e 64 62 27 20 41 53 20 61 75  'test2.db' AS au
8d90: 78 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20  x;.      PRAGMA 
8da0: 61 75 78 2e 70 61 67 65 5f 63 6f 75 6e 74 3b 0a  aux.page_count;.
8db0: 20 20 20 20 7d 20 0a 20 20 7d 20 7b 35 7d 0a 20      } .  } {5}. 
8dc0: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
8dd0: 31 34 2e 36 75 63 20 7b 0a 20 20 20 20 65 78 65  14.6uc {.    exe
8de0: 63 73 71 6c 20 7b 70 72 61 67 6d 61 20 41 55 58  csql {pragma AUX
8df0: 2e 50 41 47 45 5f 43 4f 55 4e 54 7d 0a 20 20 7d  .PAGE_COUNT}.  }
8e00: 20 7b 35 7d 0a 7d 0a 0a 23 20 54 65 73 74 20 74   {5}.}..# Test t
8e10: 68 61 74 20 74 68 65 20 76 61 6c 75 65 20 73 65  hat the value se
8e20: 74 20 75 73 69 6e 67 20 74 68 65 20 63 61 63 68  t using the cach
8e30: 65 5f 73 69 7a 65 20 70 72 61 67 6d 61 20 69 73  e_size pragma is
8e40: 20 6e 6f 74 20 72 65 73 65 74 20 77 68 65 6e 20   not reset when 
8e50: 74 68 65 0a 23 20 73 63 68 65 6d 61 20 69 73 20  the.# schema is 
8e60: 72 65 6c 6f 61 64 65 64 2e 0a 23 0a 69 66 63 61  reloaded..#.ifca
8e70: 70 61 62 6c 65 20 70 61 67 65 72 5f 70 72 61 67  pable pager_prag
8e80: 6d 61 73 20 7b 0a 20 20 64 62 20 63 6c 6f 73 65  mas {.  db close
8e90: 0a 20 20 73 71 6c 69 74 65 33 20 64 62 20 74 65  .  sqlite3 db te
8ea0: 73 74 2e 64 62 0a 20 20 64 6f 5f 74 65 73 74 20  st.db.  do_test 
8eb0: 70 72 61 67 6d 61 2d 31 35 2e 31 20 7b 0a 20 20  pragma-15.1 {.  
8ec0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
8ed0: 20 20 50 52 41 47 4d 41 20 63 61 63 68 65 5f 73    PRAGMA cache_s
8ee0: 69 7a 65 3d 35 39 3b 0a 20 20 20 20 20 20 50 52  ize=59;.      PR
8ef0: 41 47 4d 41 20 63 61 63 68 65 5f 73 69 7a 65 3b  AGMA cache_size;
8f00: 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 35 39 7d 0a  .    }.  } {59}.
8f10: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
8f20: 2d 31 35 2e 32 20 7b 0a 20 20 20 20 73 71 6c 69  -15.2 {.    sqli
8f30: 74 65 33 20 64 62 32 20 74 65 73 74 2e 64 62 0a  te3 db2 test.db.
8f40: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20      execsql {.  
8f50: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
8f60: 20 6e 65 77 74 61 62 6c 65 28 61 2c 20 62 2c 20   newtable(a, b, 
8f70: 63 29 3b 0a 20 20 20 20 7d 20 64 62 32 0a 20 20  c);.    } db2.  
8f80: 20 20 64 62 32 20 63 6c 6f 73 65 0a 20 20 7d 20    db2 close.  } 
8f90: 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61  {}.  do_test pra
8fa0: 67 6d 61 2d 31 35 2e 33 20 7b 0a 20 20 20 20 23  gma-15.3 {.    #
8fb0: 20 45 76 61 6c 75 61 74 69 6e 67 20 74 68 69 73   Evaluating this
8fc0: 20 73 74 61 74 65 6d 65 6e 74 20 77 69 6c 6c 20   statement will 
8fd0: 63 61 75 73 65 20 74 68 65 20 73 63 68 65 6d 61  cause the schema
8fe0: 20 74 6f 20 62 65 20 72 65 6c 6f 61 64 65 64 20   to be reloaded 
8ff0: 28 62 65 63 61 75 73 65 0a 20 20 20 20 23 20 74  (because.    # t
9000: 68 65 20 73 63 68 65 6d 61 20 77 61 73 20 63 68  he schema was ch
9010: 61 6e 67 65 64 20 62 79 20 61 6e 6f 74 68 65 72  anged by another
9020: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 6e 20 70   connection in p
9030: 72 61 67 6d 61 2d 31 35 2e 32 29 2e 20 41 74 20  ragma-15.2). At 
9040: 6f 6e 65 0a 20 20 20 20 23 20 70 6f 69 6e 74 20  one.    # point 
9050: 74 68 65 72 65 20 77 61 73 20 61 20 62 75 67 20  there was a bug 
9060: 74 68 61 74 20 72 65 73 65 74 20 74 68 65 20 63  that reset the c
9070: 61 63 68 65 5f 73 69 7a 65 20 74 6f 20 69 74 73  ache_size to its
9080: 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 0a 20   default value. 
9090: 20 20 20 23 20 77 68 65 6e 20 74 68 69 73 20 68     # when this h
90a0: 61 70 70 65 6e 65 64 2e 20 0a 20 20 20 20 65 78  appened. .    ex
90b0: 65 63 73 71 6c 20 7b 20 53 45 4c 45 43 54 20 2a  ecsql { SELECT *
90c0: 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73   FROM sqlite_mas
90d0: 74 65 72 20 7d 0a 20 20 20 20 65 78 65 63 73 71  ter }.    execsq
90e0: 6c 20 7b 20 50 52 41 47 4d 41 20 63 61 63 68 65  l { PRAGMA cache
90f0: 5f 73 69 7a 65 20 7d 0a 20 20 7d 20 7b 35 39 7d  _size }.  } {59}
9100: 0a 7d 0a 0a 23 20 52 65 73 65 74 20 74 68 65 20  .}..# Reset the 
9110: 73 71 6c 69 74 65 33 5f 74 65 6d 70 5f 64 69 72  sqlite3_temp_dir
9120: 65 63 74 6f 72 79 20 76 61 72 69 61 62 6c 65 20  ectory variable 
9130: 66 6f 72 20 74 68 65 20 6e 65 78 74 20 72 75 6e  for the next run
9140: 20 6f 66 20 74 65 73 74 73 3a 0a 73 71 6c 69 74   of tests:.sqlit
9150: 65 33 20 64 62 58 20 3a 6d 65 6d 6f 72 79 3a 0a  e3 dbX :memory:.
9160: 64 62 58 20 65 76 61 6c 20 7b 50 52 41 47 4d 41  dbX eval {PRAGMA
9170: 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65   temp_store_dire
9180: 63 74 6f 72 79 20 3d 20 22 22 7d 0a 64 62 58 20  ctory = ""}.dbX 
9190: 63 6c 6f 73 65 0a 0a 73 65 74 20 73 6b 69 70 5f  close..set skip_
91a0: 6c 6f 63 6b 5f 70 72 6f 78 79 5f 74 65 73 74 73  lock_proxy_tests
91b0: 20 5b 70 61 74 68 5f 69 73 5f 64 6f 73 20 22 2e   [path_is_dos ".
91c0: 22 5d 0a 69 66 63 61 70 61 62 6c 65 20 21 28 6c  "].ifcapable !(l
91d0: 6f 63 6b 5f 70 72 6f 78 79 5f 70 72 61 67 6d 61  ock_proxy_pragma
91e0: 73 26 26 70 72 65 66 65 72 5f 70 72 6f 78 79 5f  s&&prefer_proxy_
91f0: 6c 6f 63 6b 69 6e 67 29 20 7b 0a 20 20 73 65 74  locking) {.  set
9200: 20 73 6b 69 70 5f 6c 6f 63 6b 5f 70 72 6f 78 79   skip_lock_proxy
9210: 5f 74 65 73 74 73 20 31 0a 7d 0a 0a 69 66 20 21  _tests 1.}..if !
9220: 24 73 6b 69 70 5f 6c 6f 63 6b 5f 70 72 6f 78 79  $skip_lock_proxy
9230: 5f 74 65 73 74 73 20 7b 0a 20 20 73 65 74 20 73  _tests {.  set s
9240: 71 6c 69 74 65 5f 68 6f 73 74 69 64 5f 6e 75 6d  qlite_hostid_num
9250: 20 31 0a 0a 20 20 73 65 74 20 75 73 69 6e 67 5f   1..  set using_
9260: 70 72 6f 78 79 20 30 0a 20 20 66 6f 72 65 61 63  proxy 0.  foreac
9270: 68 20 7b 6e 61 6d 65 20 76 61 6c 75 65 7d 20 5b  h {name value} [
9280: 61 72 72 61 79 20 67 65 74 20 65 6e 76 20 53 51  array get env SQ
9290: 4c 49 54 45 5f 46 4f 52 43 45 5f 50 52 4f 58 59  LITE_FORCE_PROXY
92a0: 5f 4c 4f 43 4b 49 4e 47 5d 20 7b 0a 20 20 20 20  _LOCKING] {.    
92b0: 73 65 74 20 75 73 69 6e 67 5f 70 72 6f 78 79 20  set using_proxy 
92c0: 24 76 61 6c 75 65 0a 20 20 7d 0a 0a 20 20 23 20  $value.  }..  # 
92d0: 54 65 73 74 20 74 68 65 20 6c 6f 63 6b 5f 70 72  Test the lock_pr
92e0: 6f 78 79 5f 66 69 6c 65 20 70 72 61 67 6d 61 73  oxy_file pragmas
92f0: 2e 0a 20 20 23 0a 20 20 64 62 20 63 6c 6f 73 65  ..  #.  db close
9300: 0a 20 20 73 65 74 20 65 6e 76 28 53 51 4c 49 54  .  set env(SQLIT
9310: 45 5f 46 4f 52 43 45 5f 50 52 4f 58 59 5f 4c 4f  E_FORCE_PROXY_LO
9320: 43 4b 49 4e 47 29 20 22 30 22 0a 0a 20 20 73 71  CKING) "0"..  sq
9330: 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64 62  lite3 db test.db
9340: 0a 20 20 23 20 73 65 74 20 6c 6f 63 6b 20 70 72  .  # set lock pr
9350: 6f 78 79 20 6e 61 6d 65 20 61 6e 64 20 74 68 65  oxy name and the
9360: 6e 20 71 75 65 72 79 20 69 74 20 76 69 61 20 70  n query it via p
9370: 72 61 67 6d 61 20 69 6e 74 65 72 66 61 63 65 0a  ragma interface.
9380: 20 20 73 65 74 20 6c 70 70 20 5b 65 78 65 63 20    set lpp [exec 
9390: 6d 6b 74 65 6d 70 20 2d 74 20 22 70 72 6f 78 79  mktemp -t "proxy
93a0: 31 22 5d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72  1"].  do_test pr
93b0: 61 67 6d 61 2d 31 36 2e 31 20 7b 0a 20 20 20 20  agma-16.1 {.    
93c0: 65 78 65 63 73 71 6c 20 22 50 52 41 47 4d 41 20  execsql "PRAGMA 
93d0: 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 3d  lock_proxy_file=
93e0: 27 24 6c 70 70 27 22 0a 20 20 20 20 65 78 65 63  '$lpp'".    exec
93f0: 73 71 6c 20 22 73 65 6c 65 63 74 20 2a 20 66 72  sql "select * fr
9400: 6f 6d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  om sqlite_master
9410: 22 0a 20 20 20 20 65 78 65 63 73 71 6c 20 22 50  ".    execsql "P
9420: 52 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78 79  RAGMA lock_proxy
9430: 5f 66 69 6c 65 22 0a 20 20 7d 20 24 6c 70 70 0a  _file".  } $lpp.
9440: 0a 20 20 23 20 32 20 64 61 74 61 62 61 73 65 20  .  # 2 database 
9450: 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 63 61 6e 20  connections can 
9460: 73 68 61 72 65 20 61 20 6c 6f 63 6b 20 70 72 6f  share a lock pro
9470: 78 79 20 66 69 6c 65 0a 20 20 64 6f 5f 74 65 73  xy file.  do_tes
9480: 74 20 70 72 61 67 6d 61 2d 31 36 2e 32 20 7b 0a  t pragma-16.2 {.
9490: 20 20 20 20 73 71 6c 69 74 65 33 20 64 62 32 20      sqlite3 db2 
94a0: 74 65 73 74 2e 64 62 0a 20 20 20 20 65 78 65 63  test.db.    exec
94b0: 73 71 6c 20 22 50 52 41 47 4d 41 20 6c 6f 63 6b  sql "PRAGMA lock
94c0: 5f 70 72 6f 78 79 5f 66 69 6c 65 3d 27 24 6c 70  _proxy_file='$lp
94d0: 70 27 22 20 64 62 32 0a 20 20 7d 20 7b 7d 0a 0a  p'" db2.  } {}..
94e0: 20 20 64 62 32 20 63 6c 6f 73 65 0a 20 20 23 20    db2 close.  # 
94f0: 32 6e 64 20 64 61 74 61 62 61 73 65 20 63 6f 6e  2nd database con
9500: 6e 65 63 74 69 6f 6e 20 73 68 6f 75 6c 64 20 61  nection should a
9510: 75 74 6f 2d 6e 61 6d 65 20 61 6e 20 65 78 69 73  uto-name an exis
9520: 74 69 6e 67 20 6c 6f 63 6b 20 70 72 6f 78 79 20  ting lock proxy 
9530: 66 69 6c 65 0a 20 20 64 6f 5f 74 65 73 74 20 70  file.  do_test p
9540: 72 61 67 6d 61 2d 31 36 2e 32 2e 31 20 7b 0a 20  ragma-16.2.1 {. 
9550: 20 20 20 73 71 6c 69 74 65 33 20 64 62 32 20 74     sqlite3 db2 t
9560: 65 73 74 2e 64 62 0a 20 20 20 20 65 78 65 63 73  est.db.    execs
9570: 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d  ql {.      PRAGM
9580: 41 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c  A lock_proxy_fil
9590: 65 3d 22 3a 61 75 74 6f 3a 22 3b 0a 20 20 20 20  e=":auto:";.    
95a0: 20 20 73 65 6c 65 63 74 20 2a 20 66 72 6f 6d 20    select * from 
95b0: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 3b 0a 20  sqlite_master;. 
95c0: 20 20 20 7d 20 64 62 32 0a 20 20 20 20 65 78 65     } db2.    exe
95d0: 63 73 71 6c 20 22 50 52 41 47 4d 41 20 6c 6f 63  csql "PRAGMA loc
95e0: 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 22 20 64 62  k_proxy_file" db
95f0: 32 0a 20 20 7d 20 24 6c 70 70 0a 0a 20 20 64 62  2.  } $lpp..  db
9600: 32 20 63 6c 6f 73 65 0a 20 20 73 65 74 20 6c 70  2 close.  set lp
9610: 70 32 20 5b 65 78 65 63 20 6d 6b 74 65 6d 70 20  p2 [exec mktemp 
9620: 2d 74 20 22 70 72 6f 78 79 32 22 5d 0a 0a 20 20  -t "proxy2"]..  
9630: 23 20 32 6e 64 20 64 61 74 61 62 61 73 65 20 63  # 2nd database c
9640: 6f 6e 6e 65 63 74 69 6f 6e 20 63 61 6e 6e 6f 74  onnection cannot
9650: 20 6f 76 65 72 72 69 64 65 20 74 68 65 20 6c 6f   override the lo
9660: 63 6b 20 70 72 6f 78 79 20 66 69 6c 65 0a 20 20  ck proxy file.  
9670: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31  do_test pragma-1
9680: 36 2e 33 20 7b 0a 20 20 20 20 73 71 6c 69 74 65  6.3 {.    sqlite
9690: 33 20 64 62 32 20 74 65 73 74 2e 64 62 0a 20 20  3 db2 test.db.  
96a0: 20 20 65 78 65 63 73 71 6c 20 22 50 52 41 47 4d    execsql "PRAGM
96b0: 41 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c  A lock_proxy_fil
96c0: 65 3d 27 24 6c 70 70 32 27 22 20 64 62 32 0a 20  e='$lpp2'" db2. 
96d0: 20 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20     catchsql {.  
96e0: 20 20 20 20 73 65 6c 65 63 74 20 2a 20 66 72 6f      select * fro
96f0: 6d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 3b  m sqlite_master;
9700: 0a 20 20 20 20 7d 20 64 62 32 0a 20 20 7d 20 7b  .    } db2.  } {
9710: 31 20 7b 64 61 74 61 62 61 73 65 20 69 73 20 6c  1 {database is l
9720: 6f 63 6b 65 64 7d 7d 0a 0a 20 20 73 65 74 20 6c  ocked}}..  set l
9730: 70 70 33 20 5b 65 78 65 63 20 6d 6b 74 65 6d 70  pp3 [exec mktemp
9740: 20 2d 74 20 22 70 72 6f 78 79 33 22 5d 0a 0a 20   -t "proxy3"].. 
9750: 20 23 20 6c 6f 63 6b 20 70 72 6f 78 79 20 66 69   # lock proxy fi
9760: 6c 65 20 63 61 6e 20 62 65 20 72 65 6e 61 6d 65  le can be rename
9770: 64 20 69 66 20 6e 6f 20 6f 74 68 65 72 20 63 6f  d if no other co
9780: 6e 6e 65 63 74 69 6f 6e 73 20 61 72 65 20 61 63  nnections are ac
9790: 74 69 76 65 0a 20 20 64 6f 5f 74 65 73 74 20 70  tive.  do_test p
97a0: 72 61 67 6d 61 2d 31 36 2e 34 20 7b 0a 20 20 20  ragma-16.4 {.   
97b0: 20 64 62 32 20 63 6c 6f 73 65 0a 20 20 20 20 64   db2 close.    d
97c0: 62 20 63 6c 6f 73 65 0a 20 20 20 20 73 71 6c 69  b close.    sqli
97d0: 74 65 33 20 64 62 32 20 74 65 73 74 2e 64 62 0a  te3 db2 test.db.
97e0: 20 20 20 20 65 78 65 63 73 71 6c 20 22 50 52 41      execsql "PRA
97f0: 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66  GMA lock_proxy_f
9800: 69 6c 65 3d 27 24 6c 70 70 33 27 22 20 64 62 32  ile='$lpp3'" db2
9810: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 22 50 52  .    execsql "PR
9820: 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f  AGMA lock_proxy_
9830: 66 69 6c 65 3d 27 24 6c 70 70 32 27 22 20 64 62  file='$lpp2'" db
9840: 32 0a 20 20 20 20 65 78 65 63 73 71 6c 20 22 50  2.    execsql "P
9850: 52 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78 79  RAGMA lock_proxy
9860: 5f 66 69 6c 65 22 20 64 62 32 0a 20 20 7d 20 24  _file" db2.  } $
9870: 6c 70 70 32 0a 0a 20 20 64 62 32 20 63 6c 6f 73  lpp2..  db2 clos
9880: 65 0a 20 20 73 65 74 20 65 6e 76 28 53 51 4c 49  e.  set env(SQLI
9890: 54 45 5f 46 4f 52 43 45 5f 50 52 4f 58 59 5f 4c  TE_FORCE_PROXY_L
98a0: 4f 43 4b 49 4e 47 29 20 22 31 22 0a 20 20 23 20  OCKING) "1".  # 
98b0: 61 75 74 6f 2d 6e 61 6d 69 6e 67 20 73 68 6f 75  auto-naming shou
98c0: 6c 64 20 72 65 75 73 65 20 74 68 65 20 6c 61 73  ld reuse the las
98d0: 74 20 70 72 6f 78 79 20 6e 61 6d 65 20 77 68 65  t proxy name whe
98e0: 6e 20 61 76 61 69 6c 61 62 6c 65 0a 20 20 64 6f  n available.  do
98f0: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 36 2e  _test pragma-16.
9900: 35 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 20  5 {.    sqlite3 
9910: 64 62 32 20 74 65 73 74 2e 64 62 0a 20 20 20 20  db2 test.db.    
9920: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
9930: 50 52 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78  PRAGMA lock_prox
9940: 79 5f 66 69 6c 65 3d 22 3a 61 75 74 6f 3a 22 3b  y_file=":auto:";
9950: 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 6c 6f  .      PRAGMA lo
9960: 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 3b 0a 20  ck_proxy_file;. 
9970: 20 20 20 7d 20 64 62 32 0a 20 20 7d 20 24 6c 70     } db2.  } $lp
9980: 70 32 0a 20 20 0a 20 20 23 20 61 75 74 6f 2d 6e  p2.  .  # auto-n
9990: 61 6d 69 6e 67 20 61 20 6e 65 77 20 70 72 6f 78  aming a new prox
99a0: 79 20 73 68 6f 75 6c 64 20 75 73 65 20 61 20 70  y should use a p
99b0: 72 65 64 69 63 74 61 62 6c 65 20 26 20 75 6e 69  redictable & uni
99c0: 71 75 65 20 6e 61 6d 65 0a 20 20 64 6f 5f 74 65  que name.  do_te
99d0: 73 74 20 70 72 61 67 6d 61 2d 31 36 2e 36 20 7b  st pragma-16.6 {
99e0: 0a 20 20 20 20 64 62 32 20 63 6c 6f 73 65 0a 20  .    db2 close. 
99f0: 20 20 20 73 71 6c 69 74 65 33 20 64 62 32 20 74     sqlite3 db2 t
9a00: 65 73 74 32 2e 64 62 0a 20 20 20 20 73 65 74 20  est2.db.    set 
9a10: 6c 6f 63 6b 70 61 74 68 20 5b 65 78 65 63 73 71  lockpath [execsq
9a20: 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41  l {.      PRAGMA
9a30: 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65   lock_proxy_file
9a40: 3d 22 3a 61 75 74 6f 3a 22 3b 0a 20 20 20 20 20  =":auto:";.     
9a50: 20 50 52 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f   PRAGMA lock_pro
9a60: 78 79 5f 66 69 6c 65 3b 0a 20 20 20 20 7d 20 64  xy_file;.    } d
9a70: 62 32 5d 0a 20 20 20 20 73 74 72 69 6e 67 20 6d  b2].    string m
9a80: 61 74 63 68 20 22 2a 74 65 73 74 32 2e 64 62 3a  atch "*test2.db:
9a90: 61 75 74 6f 3a 22 20 24 6c 6f 63 6b 70 61 74 68  auto:" $lockpath
9aa0: 0a 20 20 7d 20 7b 31 7d 0a 20 20 0a 20 20 73 65  .  } {1}.  .  se
9ab0: 74 20 73 71 6c 69 74 65 5f 68 6f 73 74 69 64 5f  t sqlite_hostid_
9ac0: 6e 75 6d 20 32 0a 20 20 23 20 64 62 20 61 63 63  num 2.  # db acc
9ad0: 65 73 73 20 73 68 6f 75 6c 64 20 62 65 20 6c 69  ess should be li
9ae0: 6d 69 74 65 64 20 74 6f 20 6f 6e 65 20 68 6f 73  mited to one hos
9af0: 74 20 61 74 20 61 20 74 69 6d 65 20 28 73 69 6d  t at a time (sim
9b00: 75 6c 61 74 65 20 32 6e 64 20 68 6f 73 74 20 69  ulate 2nd host i
9b10: 64 29 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61  d).  do_test pra
9b20: 67 6d 61 2d 31 36 2e 37 20 7b 0a 20 20 20 20 6c  gma-16.7 {.    l
9b30: 69 73 74 20 5b 63 61 74 63 68 20 7b 0a 20 20 20  ist [catch {.   
9b40: 20 20 20 73 71 6c 69 74 65 33 20 64 62 20 74 65     sqlite3 db te
9b50: 73 74 32 2e 64 62 0a 20 20 20 20 20 20 65 78 65  st2.db.      exe
9b60: 63 73 71 6c 20 7b 20 0a 20 20 20 20 20 20 20 20  csql { .        
9b70: 50 52 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78  PRAGMA lock_prox
9b80: 79 5f 66 69 6c 65 3d 22 3a 61 75 74 6f 3a 22 3b  y_file=":auto:";
9b90: 0a 20 20 20 20 20 20 20 20 73 65 6c 65 63 74 20  .        select 
9ba0: 2a 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f 6d 61  * from sqlite_ma
9bb0: 73 74 65 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20  ster;.      }.  
9bc0: 20 20 7d 20 6d 73 67 5d 20 24 6d 73 67 0a 20 20    } msg] $msg.  
9bd0: 7d 20 7b 31 20 7b 64 61 74 61 62 61 73 65 20 69  } {1 {database i
9be0: 73 20 6c 6f 63 6b 65 64 7d 7d 0a 20 20 64 62 20  s locked}}.  db 
9bf0: 63 6c 6f 73 65 0a 20 20 0a 20 20 23 20 64 65 66  close.  .  # def
9c00: 61 75 6c 74 20 74 6f 20 75 73 69 6e 67 20 70 72  ault to using pr
9c10: 6f 78 79 20 6c 6f 63 6b 69 6e 67 20 28 73 69 6d  oxy locking (sim
9c20: 75 6c 61 74 65 20 6e 65 74 77 6f 72 6b 20 66 69  ulate network fi
9c30: 6c 65 20 73 79 73 74 65 6d 20 64 65 74 65 63 74  le system detect
9c40: 69 6f 6e 29 0a 20 20 64 6f 5f 74 65 73 74 20 70  ion).  do_test p
9c50: 72 61 67 6d 61 2d 31 36 2e 38 20 7b 0a 20 20 20  ragma-16.8 {.   
9c60: 20 6c 69 73 74 20 5b 63 61 74 63 68 20 7b 0a 20   list [catch {. 
9c70: 20 20 20 20 20 73 71 6c 69 74 65 33 20 64 62 20       sqlite3 db 
9c80: 74 65 73 74 32 2e 64 62 0a 20 20 20 20 20 20 65  test2.db.      e
9c90: 78 65 63 73 71 6c 20 7b 20 73 65 6c 65 63 74 20  xecsql { select 
9ca0: 2a 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f 6d 61  * from sqlite_ma
9cb0: 73 74 65 72 20 7d 20 0a 20 20 20 20 7d 20 6d 73  ster } .    } ms
9cc0: 67 5d 20 24 6d 73 67 0a 20 20 7d 20 7b 31 20 7b  g] $msg.  } {1 {
9cd0: 64 61 74 61 62 61 73 65 20 69 73 20 6c 6f 63 6b  database is lock
9ce0: 65 64 7d 7d 0a 0a 20 20 64 62 32 20 63 6c 6f 73  ed}}..  db2 clos
9cf0: 65 0a 20 20 73 65 74 20 6c 70 70 34 20 5b 65 78  e.  set lpp4 [ex
9d00: 65 63 20 6d 6b 74 65 6d 70 20 2d 74 20 22 70 72  ec mktemp -t "pr
9d10: 6f 78 79 34 22 5d 0a 0a 20 20 23 20 63 68 65 63  oxy4"]..  # chec
9d20: 6b 20 74 68 61 74 20 64 62 20 69 73 20 75 6e 6c  k that db is unl
9d30: 6f 63 6b 65 64 20 61 66 74 65 72 20 66 69 72 73  ocked after firs
9d40: 74 20 68 6f 73 74 20 63 6f 6e 6e 65 63 74 69 6f  t host connectio
9d50: 6e 20 63 6c 6f 73 65 73 20 0a 20 20 64 6f 5f 74  n closes .  do_t
9d60: 65 73 74 20 70 72 61 67 6d 61 2d 31 36 2e 38 2e  est pragma-16.8.
9d70: 31 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  1 {.    execsql 
9d80: 22 50 52 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f  "PRAGMA lock_pro
9d90: 78 79 5f 66 69 6c 65 3d 27 24 6c 70 70 34 27 22  xy_file='$lpp4'"
9da0: 20 0a 20 20 20 20 65 78 65 63 73 71 6c 20 22 73   .    execsql "s
9db0: 65 6c 65 63 74 20 2a 20 66 72 6f 6d 20 73 71 6c  elect * from sql
9dc0: 69 74 65 5f 6d 61 73 74 65 72 22 0a 20 20 20 20  ite_master".    
9dd0: 65 78 65 63 73 71 6c 20 22 50 52 41 47 4d 41 20  execsql "PRAGMA 
9de0: 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 22  lock_proxy_file"
9df0: 0a 20 20 7d 20 24 6c 70 70 34 0a 20 20 0a 20 20  .  } $lpp4.  .  
9e00: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31  do_test pragma-1
9e10: 36 2e 38 2e 32 20 7b 0a 20 20 20 20 65 78 65 63  6.8.2 {.    exec
9e20: 73 71 6c 20 7b 0a 20 20 20 20 20 20 63 72 65 61  sql {.      crea
9e30: 74 65 20 74 61 62 6c 65 20 69 66 20 6e 6f 74 20  te table if not 
9e40: 65 78 69 73 74 73 20 6d 69 6e 65 28 78 29 3b 0a  exists mine(x);.
9e50: 20 20 20 20 20 20 69 6e 73 65 72 74 20 69 6e 74        insert int
9e60: 6f 20 6d 69 6e 65 20 76 61 6c 75 65 73 20 28 31  o mine values (1
9e70: 29 3b 0a 20 20 20 20 7d 20 0a 20 20 7d 20 7b 7d  );.    } .  } {}
9e80: 0a 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 66  ..  db close.  f
9e90: 69 6c 65 20 64 65 6c 65 74 65 20 2d 66 6f 72 63  ile delete -forc
9ea0: 65 20 70 72 6f 78 79 74 65 73 74 2e 64 62 0a 20  e proxytest.db. 
9eb0: 20 66 69 6c 65 20 64 65 6c 65 74 65 20 2d 66 6f   file delete -fo
9ec0: 72 63 65 20 2e 70 72 6f 78 79 74 65 73 74 2e 64  rce .proxytest.d
9ed0: 62 2d 63 6f 6e 63 68 0a 20 20 64 6f 5f 74 65 73  b-conch.  do_tes
9ee0: 74 20 70 72 61 67 6d 61 2d 31 36 2e 39 20 7b 0a  t pragma-16.9 {.
9ef0: 20 20 20 20 73 71 6c 69 74 65 33 20 64 62 20 70      sqlite3 db p
9f00: 72 6f 78 79 74 65 73 74 2e 64 62 0a 20 20 20 20  roxytest.db.    
9f10: 73 65 74 20 6c 6f 63 6b 70 61 74 68 32 20 5b 65  set lockpath2 [e
9f20: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50  xecsql {.      P
9f30: 52 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78 79  RAGMA lock_proxy
9f40: 5f 66 69 6c 65 3d 22 3a 61 75 74 6f 3a 22 3b 0a  _file=":auto:";.
9f50: 20 20 20 20 20 20 50 52 41 47 4d 41 20 6c 6f 63        PRAGMA loc
9f60: 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 3b 0a 20 20  k_proxy_file;.  
9f70: 20 20 7d 20 64 62 5d 0a 20 20 20 20 73 74 72 69    } db].    stri
9f80: 6e 67 20 6d 61 74 63 68 20 22 2a 70 72 6f 78 79  ng match "*proxy
9f90: 74 65 73 74 2e 64 62 3a 61 75 74 6f 3a 22 20 24  test.db:auto:" $
9fa0: 6c 6f 63 6b 70 61 74 68 32 0a 20 20 7d 20 7b 31  lockpath2.  } {1
9fb0: 7d 0a 0a 20 20 23 20 65 6e 73 75 72 65 20 63 72  }..  # ensure cr
9fc0: 65 61 74 69 6e 67 20 64 69 72 65 63 74 6f 72 69  eating directori
9fd0: 65 73 20 66 6f 72 20 61 20 6c 6f 63 6b 20 70 72  es for a lock pr
9fe0: 6f 78 79 20 66 69 6c 65 20 77 6f 72 6b 73 0a 20  oxy file works. 
9ff0: 20 73 65 74 20 6c 70 70 35 64 20 5b 65 78 65 63   set lpp5d [exec
a000: 20 6d 6b 74 65 6d 70 20 2d 64 20 2d 74 20 22 70   mktemp -d -t "p
a010: 72 6f 78 79 35 22 5d 0a 20 20 73 65 74 20 6c 70  roxy5"].  set lp
a020: 70 35 20 24 6c 70 70 35 64 2f 73 75 62 2f 64 69  p5 $lpp5d/sub/di
a030: 72 2f 6c 6f 63 6b 0a 20 20 64 62 20 63 6c 6f 73  r/lock.  db clos
a040: 65 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67  e.  do_test prag
a050: 6d 61 2d 31 36 2e 31 30 2e 31 20 7b 0a 20 20 20  ma-16.10.1 {.   
a060: 20 73 71 6c 69 74 65 33 20 64 62 20 70 72 6f 78   sqlite3 db prox
a070: 79 74 65 73 74 2e 64 62 0a 20 20 20 20 65 78 65  ytest.db.    exe
a080: 63 73 71 6c 20 22 50 52 41 47 4d 41 20 6c 6f 63  csql "PRAGMA loc
a090: 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 3d 27 24 6c  k_proxy_file='$l
a0a0: 70 70 35 27 22 20 0a 20 20 20 20 73 65 74 20 6c  pp5'" .    set l
a0b0: 6f 63 6b 70 61 74 68 32 20 5b 65 78 65 63 73 71  ockpath2 [execsq
a0c0: 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41  l {.      PRAGMA
a0d0: 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65   lock_proxy_file
a0e0: 3b 0a 20 20 20 20 7d 20 64 62 5d 0a 20 20 20 20  ;.    } db].    
a0f0: 73 74 72 69 6e 67 20 6d 61 74 63 68 20 22 2a 73  string match "*s
a100: 75 62 2f 64 69 72 2f 6c 6f 63 6b 22 20 24 6c 6f  ub/dir/lock" $lo
a110: 63 6b 70 61 74 68 32 0a 20 20 7d 20 7b 31 7d 0a  ckpath2.  } {1}.
a120: 0a 20 20 23 20 65 6e 73 75 72 65 20 74 68 61 74  .  # ensure that
a130: 20 61 66 74 65 72 20 64 65 6c 65 74 69 6e 67 20   after deleting 
a140: 74 68 65 20 70 61 74 68 2c 20 73 65 74 74 69 6e  the path, settin
a150: 67 20 22 3a 61 75 74 6f 3a 22 20 77 6f 72 6b 73  g ":auto:" works
a160: 20 63 6f 72 72 65 63 74 6c 79 0a 20 20 64 62 20   correctly.  db 
a170: 63 6c 6f 73 65 0a 20 20 66 69 6c 65 20 64 65 6c  close.  file del
a180: 65 74 65 20 2d 66 6f 72 63 65 20 24 6c 70 70 35  ete -force $lpp5
a190: 64 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67  d.  do_test prag
a1a0: 6d 61 2d 31 36 2e 31 30 2e 32 20 7b 0a 20 20 20  ma-16.10.2 {.   
a1b0: 20 73 71 6c 69 74 65 33 20 64 62 20 70 72 6f 78   sqlite3 db prox
a1c0: 79 74 65 73 74 2e 64 62 0a 20 20 20 20 73 65 74  ytest.db.    set
a1d0: 20 6c 6f 63 6b 70 61 74 68 33 20 5b 65 78 65 63   lockpath3 [exec
a1e0: 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47  sql {.      PRAG
a1f0: 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69  MA lock_proxy_fi
a200: 6c 65 3d 22 3a 61 75 74 6f 3a 22 3b 0a 20 20 20  le=":auto:";.   
a210: 20 20 20 63 72 65 61 74 65 20 74 61 62 6c 65 20     create table 
a220: 69 66 20 6e 6f 74 20 65 78 69 73 74 73 20 70 74  if not exists pt
a230: 28 79 29 3b 0a 20 20 20 20 20 20 50 52 41 47 4d  (y);.      PRAGM
a240: 41 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c  A lock_proxy_fil
a250: 65 3b 0a 20 20 20 20 7d 20 64 62 5d 0a 20 20 20  e;.    } db].   
a260: 20 73 74 72 69 6e 67 20 6d 61 74 63 68 20 22 2a   string match "*
a270: 73 75 62 2f 64 69 72 2f 6c 6f 63 6b 22 20 24 6c  sub/dir/lock" $l
a280: 6f 63 6b 70 61 74 68 33 0a 20 20 7d 20 7b 31 7d  ockpath3.  } {1}
a290: 0a 0a 20 20 23 20 65 6e 73 75 72 65 20 74 68 61  ..  # ensure tha
a2a0: 74 20 69 66 20 74 68 65 20 70 61 74 68 20 63 61  t if the path ca
a2b0: 6e 20 6e 6f 74 20 62 65 20 63 72 65 61 74 65 64  n not be created
a2c0: 20 28 66 69 6c 65 20 69 6e 73 74 65 61 64 20 6f   (file instead o
a2d0: 66 20 64 69 72 29 0a 20 20 23 20 73 65 74 74 69  f dir).  # setti
a2e0: 6e 67 20 3a 61 75 74 6f 3a 20 64 65 61 6c 73 20  ng :auto: deals 
a2f0: 77 69 74 68 20 69 74 20 62 79 20 63 72 65 61 74  with it by creat
a300: 69 6e 67 20 61 20 6e 65 77 20 61 75 74 6f 6e 61  ing a new autona
a310: 6d 65 64 20 6c 6f 63 6b 20 66 69 6c 65 0a 20 20  med lock file.  
a320: 64 62 20 63 6c 6f 73 65 0a 20 20 66 69 6c 65 20  db close.  file 
a330: 64 65 6c 65 74 65 20 2d 66 6f 72 63 65 20 24 6c  delete -force $l
a340: 70 70 35 64 0a 20 20 63 6c 6f 73 65 20 5b 6f 70  pp5d.  close [op
a350: 65 6e 20 22 24 6c 70 70 35 64 22 20 61 5d 0a 20  en "$lpp5d" a]. 
a360: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
a370: 31 36 2e 31 30 2e 33 20 7b 0a 20 20 20 20 73 71  16.10.3 {.    sq
a380: 6c 69 74 65 33 20 64 62 20 70 72 6f 78 79 74 65  lite3 db proxyte
a390: 73 74 2e 64 62 0a 20 20 20 20 73 65 74 20 6c 6f  st.db.    set lo
a3a0: 63 6b 70 61 74 68 32 20 5b 65 78 65 63 73 71 6c  ckpath2 [execsql
a3b0: 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20   {.      PRAGMA 
a3c0: 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 3d  lock_proxy_file=
a3d0: 22 3a 61 75 74 6f 3a 22 3b 0a 20 20 20 20 20 20  ":auto:";.      
a3e0: 63 72 65 61 74 65 20 74 61 62 6c 65 20 69 66 20  create table if 
a3f0: 6e 6f 74 20 65 78 69 73 74 73 20 7a 7a 28 79 29  not exists zz(y)
a400: 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 6c  ;.      PRAGMA l
a410: 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 3b 0a  ock_proxy_file;.
a420: 20 20 20 20 7d 20 64 62 5d 0a 20 20 20 20 73 74      } db].    st
a430: 72 69 6e 67 20 6d 61 74 63 68 20 22 2a 70 72 6f  ring match "*pro
a440: 78 79 74 65 73 74 2e 64 62 3a 61 75 74 6f 3a 22  xytest.db:auto:"
a450: 20 24 6c 6f 63 6b 70 61 74 68 32 0a 20 20 7d 20   $lockpath2.  } 
a460: 7b 31 7d 0a 0a 20 20 23 20 6d 61 6b 65 20 73 75  {1}..  # make su
a470: 72 65 20 77 65 20 63 61 6e 20 64 65 61 6c 20 77  re we can deal w
a480: 69 74 68 20 75 67 6c 79 20 66 69 6c 65 20 70 61  ith ugly file pa
a490: 74 68 73 20 63 6f 72 72 65 63 74 6c 79 0a 20 20  ths correctly.  
a4a0: 64 62 20 63 6c 6f 73 65 0a 20 20 66 69 6c 65 20  db close.  file 
a4b0: 64 65 6c 65 74 65 20 2d 66 6f 72 63 65 20 24 6c  delete -force $l
a4c0: 70 70 35 64 0a 20 20 73 65 74 20 6c 70 70 36 20  pp5d.  set lpp6 
a4d0: 5b 65 78 65 63 20 6d 6b 74 65 6d 70 20 2d 64 20  [exec mktemp -d 
a4e0: 2d 74 20 22 70 72 6f 78 79 36 22 5d 2f 2e 2f 2e  -t "proxy6"]/./.
a4f0: 2f 2e 2f 2f 2f 2f 2f 2e 2f 70 72 6f 78 79 74 65  /./////./proxyte
a500: 73 74 2f 2e 2e 2f 70 72 6f 78 79 74 65 73 74 2f  st/../proxytest/
a510: 73 75 62 2f 64 69 72 2f 6c 6f 63 6b 0a 20 20 64  sub/dir/lock.  d
a520: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 36  o_test pragma-16
a530: 2e 31 30 2e 34 20 7b 0a 20 20 20 20 73 71 6c 69  .10.4 {.    sqli
a540: 74 65 33 20 64 62 20 70 72 6f 78 79 74 65 73 74  te3 db proxytest
a550: 2e 64 62 0a 20 20 20 20 65 78 65 63 73 71 6c 20  .db.    execsql 
a560: 22 50 52 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f  "PRAGMA lock_pro
a570: 78 79 5f 66 69 6c 65 3d 27 24 6c 70 70 36 27 22  xy_file='$lpp6'"
a580: 20 0a 20 20 20 20 73 65 74 20 6c 6f 63 6b 70 61   .    set lockpa
a590: 74 68 34 20 5b 65 78 65 63 73 71 6c 20 7b 0a 20  th4 [execsql {. 
a5a0: 20 20 20 20 20 63 72 65 61 74 65 20 74 61 62 6c       create tabl
a5b0: 65 20 69 66 20 6e 6f 74 20 65 78 69 73 74 73 20  e if not exists 
a5c0: 61 61 28 62 62 29 3b 0a 20 20 20 20 20 20 50 52  aa(bb);.      PR
a5d0: 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f  AGMA lock_proxy_
a5e0: 66 69 6c 65 3b 0a 20 20 20 20 7d 20 64 62 5d 0a  file;.    } db].
a5f0: 20 20 20 20 73 74 72 69 6e 67 20 6d 61 74 63 68      string match
a600: 20 22 2a 70 72 6f 78 79 74 65 73 74 2f 73 75 62   "*proxytest/sub
a610: 2f 64 69 72 2f 6c 6f 63 6b 22 20 24 6c 6f 63 6b  /dir/lock" $lock
a620: 70 61 74 68 34 0a 20 20 7d 20 7b 31 7d 0a 0a 20  path4.  } {1}.. 
a630: 20 23 20 65 6e 73 75 72 65 20 74 68 61 74 20 69   # ensure that i
a640: 66 20 74 68 65 20 70 61 74 68 20 63 61 6e 20 6e  f the path can n
a650: 6f 74 20 62 65 20 63 72 65 61 74 65 64 20 28 70  ot be created (p
a660: 65 72 6d 29 2c 20 73 65 74 74 69 6e 67 20 3a 61  erm), setting :a
a670: 75 74 6f 3a 20 64 65 61 6c 73 0a 20 20 64 62 20  uto: deals.  db 
a680: 63 6c 6f 73 65 0a 20 20 66 69 6c 65 20 64 65 6c  close.  file del
a690: 65 74 65 20 2d 66 6f 72 63 65 20 24 6c 70 70 35  ete -force $lpp5
a6a0: 64 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67  d.  do_test prag
a6b0: 6d 61 2d 31 36 2e 31 30 2e 35 20 7b 0a 20 20 20  ma-16.10.5 {.   
a6c0: 20 73 71 6c 69 74 65 33 20 64 62 20 70 72 6f 78   sqlite3 db prox
a6d0: 79 74 65 73 74 2e 64 62 0a 20 20 20 20 65 78 65  ytest.db.    exe
a6e0: 63 73 71 6c 20 22 50 52 41 47 4d 41 20 6c 6f 63  csql "PRAGMA loc
a6f0: 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 3d 27 24 6c  k_proxy_file='$l
a700: 70 70 35 27 22 20 0a 20 20 20 20 65 78 65 63 73  pp5'" .    execs
a710: 71 6c 20 7b 0a 20 20 20 20 20 20 63 72 65 61 74  ql {.      creat
a720: 65 20 74 61 62 6c 65 20 69 66 20 6e 6f 74 20 65  e table if not e
a730: 78 69 73 74 73 20 62 62 28 62 62 29 3b 0a 20 20  xists bb(bb);.  
a740: 20 20 7d 0a 20 20 20 20 64 62 20 63 6c 6f 73 65    }.    db close
a750: 0a 20 20 20 20 66 69 6c 65 20 64 65 6c 65 74 65  .    file delete
a760: 20 2d 66 6f 72 63 65 20 24 6c 70 70 35 64 0a 20   -force $lpp5d. 
a770: 20 20 20 66 69 6c 65 20 6d 6b 64 69 72 20 24 6c     file mkdir $l
a780: 70 70 35 64 0a 20 20 20 20 66 69 6c 65 20 61 74  pp5d.    file at
a790: 74 72 69 62 75 74 65 73 20 24 6c 70 70 35 64 20  tributes $lpp5d 
a7a0: 2d 70 65 72 6d 69 73 73 69 6f 6e 20 30 30 30 30  -permission 0000
a7b0: 0a 20 20 20 20 73 71 6c 69 74 65 33 20 64 62 20  .    sqlite3 db 
a7c0: 70 72 6f 78 79 74 65 73 74 2e 64 62 0a 20 20 20  proxytest.db.   
a7d0: 20 73 65 74 20 6c 6f 63 6b 70 61 74 68 35 20 5b   set lockpath5 [
a7e0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
a7f0: 50 52 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78  PRAGMA lock_prox
a800: 79 5f 66 69 6c 65 3d 22 3a 61 75 74 6f 3a 22 3b  y_file=":auto:";
a810: 0a 20 20 20 20 20 20 63 72 65 61 74 65 20 74 61  .      create ta
a820: 62 6c 65 20 69 66 20 6e 6f 74 20 65 78 69 73 74  ble if not exist
a830: 73 20 63 63 28 62 62 29 3b 0a 20 20 20 20 20 20  s cc(bb);.      
a840: 50 52 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78  PRAGMA lock_prox
a850: 79 5f 66 69 6c 65 3b 0a 20 20 20 20 7d 20 64 62  y_file;.    } db
a860: 5d 0a 20 20 20 20 73 74 72 69 6e 67 20 6d 61 74  ].    string mat
a870: 63 68 20 22 2a 70 72 6f 78 79 74 65 73 74 2e 64  ch "*proxytest.d
a880: 62 3a 61 75 74 6f 3a 22 20 24 6c 6f 63 6b 70 61  b:auto:" $lockpa
a890: 74 68 35 0a 20 20 7d 20 7b 31 7d 0a 0a 20 20 23  th5.  } {1}..  #
a8a0: 20 65 6e 73 75 72 65 20 74 68 61 74 20 69 66 20   ensure that if 
a8b0: 74 68 65 20 70 61 74 68 20 63 61 6e 20 6e 6f 74  the path can not
a8c0: 20 62 65 20 63 72 65 61 74 65 64 2c 20 6c 6f 63   be created, loc
a8d0: 6b 69 6e 67 20 66 61 69 6c 73 0a 20 20 64 62 20  king fails.  db 
a8e0: 63 6c 6f 73 65 0a 20 20 64 6f 5f 74 65 73 74 20  close.  do_test 
a8f0: 70 72 61 67 6d 61 2d 31 36 2e 31 30 2e 36 20 7b  pragma-16.10.6 {
a900: 0a 20 20 20 20 73 71 6c 69 74 65 33 20 64 62 20  .    sqlite3 db 
a910: 70 72 6f 78 79 74 65 73 74 2e 64 62 0a 20 20 20  proxytest.db.   
a920: 20 65 78 65 63 73 71 6c 20 22 50 52 41 47 4d 41   execsql "PRAGMA
a930: 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65   lock_proxy_file
a940: 3d 27 24 6c 70 70 35 27 22 20 0a 20 20 20 20 63  ='$lpp5'" .    c
a950: 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 20 20  atchsql {.      
a960: 63 72 65 61 74 65 20 74 61 62 6c 65 20 69 66 20  create table if 
a970: 6e 6f 74 20 65 78 69 73 74 73 20 66 61 69 6c 79  not exists faily
a980: 28 79 29 3b 0a 20 20 20 20 20 20 50 52 41 47 4d  (y);.      PRAGM
a990: 41 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c  A lock_proxy_fil
a9a0: 65 3b 0a 20 20 20 20 7d 20 64 62 0a 20 20 7d 20  e;.    } db.  } 
a9b0: 7b 31 20 7b 64 61 74 61 62 61 73 65 20 69 73 20  {1 {database is 
a9c0: 6c 6f 63 6b 65 64 7d 7d 0a 20 20 64 62 20 63 6c  locked}}.  db cl
a9d0: 6f 73 65 0a 0a 20 20 66 69 6c 65 20 61 74 74 72  ose..  file attr
a9e0: 69 62 75 74 65 73 20 24 6c 70 70 35 64 20 2d 70  ibutes $lpp5d -p
a9f0: 65 72 6d 69 73 73 69 6f 6e 20 30 37 37 37 0a 20  ermission 0777. 
aa00: 20 66 69 6c 65 20 64 65 6c 65 74 65 20 2d 66 6f   file delete -fo
aa10: 72 63 65 20 24 6c 70 70 35 64 0a 0a 20 20 73 65  rce $lpp5d..  se
aa20: 74 20 65 6e 76 28 53 51 4c 49 54 45 5f 46 4f 52  t env(SQLITE_FOR
aa30: 43 45 5f 50 52 4f 58 59 5f 4c 4f 43 4b 49 4e 47  CE_PROXY_LOCKING
aa40: 29 20 24 75 73 69 6e 67 5f 70 72 6f 78 79 0a 20  ) $using_proxy. 
aa50: 20 73 65 74 20 73 71 6c 69 74 65 5f 68 6f 73 74   set sqlite_host
aa60: 69 64 5f 6e 75 6d 20 30 0a 7d 0a 0a 23 20 50 61  id_num 0.}..# Pa
aa70: 72 73 69 6e 67 20 6f 66 20 61 75 74 6f 5f 76 61  rsing of auto_va
aa80: 63 75 75 6d 20 73 65 74 74 69 6e 67 73 2e 0a 23  cuum settings..#
aa90: 0a 66 6f 72 65 61 63 68 20 7b 61 75 74 6f 76 61  .foreach {autova
aaa0: 63 5f 73 65 74 74 69 6e 67 20 76 61 6c 7d 20 7b  c_setting val} {
aab0: 0a 20 20 30 20 30 0a 20 20 31 20 31 0a 20 20 32  .  0 0.  1 1.  2
aac0: 20 32 0a 20 20 33 20 30 0a 20 20 2d 31 20 30 0a   2.  3 0.  -1 0.
aad0: 20 20 6e 6f 6e 65 20 30 0a 20 20 4e 4f 4e 45 20    none 0.  NONE 
aae0: 30 0a 20 20 4e 6f 4e 65 20 30 0a 20 20 66 75 6c  0.  NoNe 0.  ful
aaf0: 6c 20 31 0a 20 20 46 55 4c 4c 20 31 0a 20 20 69  l 1.  FULL 1.  i
ab00: 6e 63 72 65 6d 65 6e 74 61 6c 20 32 0a 20 20 49  ncremental 2.  I
ab10: 4e 43 52 45 4d 45 4e 54 41 4c 20 32 0a 20 20 2d  NCREMENTAL 2.  -
ab20: 31 32 33 34 20 30 0a 20 20 31 32 33 34 20 30 0a  1234 0.  1234 0.
ab30: 7d 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 70 72  } {.  do_test pr
ab40: 61 67 6d 61 2d 31 37 2e 31 2e 24 61 75 74 6f 76  agma-17.1.$autov
ab50: 61 63 5f 73 65 74 74 69 6e 67 20 7b 0a 20 20 20  ac_setting {.   
ab60: 20 63 61 74 63 68 20 7b 64 62 20 63 6c 6f 73 65   catch {db close
ab70: 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 20 64 62  }.    sqlite3 db
ab80: 20 3a 6d 65 6d 6f 72 79 3a 0a 20 20 20 20 65 78   :memory:.    ex
ab90: 65 63 73 71 6c 20 22 0a 20 20 20 20 20 20 50 52  ecsql ".      PR
aba0: 41 47 4d 41 20 61 75 74 6f 5f 76 61 63 75 75 6d  AGMA auto_vacuum
abb0: 3d 24 3a 3a 61 75 74 6f 76 61 63 5f 73 65 74 74  =$::autovac_sett
abc0: 69 6e 67 3b 0a 20 20 20 20 20 20 50 52 41 47 4d  ing;.      PRAGM
abd0: 41 20 61 75 74 6f 5f 76 61 63 75 75 6d 3b 0a 20  A auto_vacuum;. 
abe0: 20 20 20 22 0a 20 20 7d 20 24 76 61 6c 0a 7d 0a     ".  } $val.}.
abf0: 0a 23 20 50 61 72 73 69 6e 67 20 6f 66 20 74 65  .# Parsing of te
ac00: 6d 70 5f 73 74 6f 72 65 20 73 65 74 74 69 6e 67  mp_store setting
ac10: 73 2e 0a 23 0a 66 6f 72 65 61 63 68 20 7b 74 65  s..#.foreach {te
ac20: 6d 70 5f 73 65 74 74 69 6e 67 20 76 61 6c 7d 20  mp_setting val} 
ac30: 7b 0a 20 20 30 20 30 0a 20 20 31 20 31 0a 20 20  {.  0 0.  1 1.  
ac40: 32 20 32 0a 20 20 33 20 30 0a 20 20 2d 31 20 30  2 2.  3 0.  -1 0
ac50: 0a 20 20 66 69 6c 65 20 31 0a 20 20 46 49 4c 45  .  file 1.  FILE
ac60: 20 31 0a 20 20 66 49 6c 45 20 31 0a 20 20 6d 65   1.  fIlE 1.  me
ac70: 6d 6f 72 79 20 32 0a 20 20 4d 45 4d 4f 52 59 20  mory 2.  MEMORY 
ac80: 32 0a 20 20 4d 65 4d 6f 52 79 20 32 0a 7d 20 7b  2.  MeMoRy 2.} {
ac90: 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .  do_test pragm
aca0: 61 2d 31 38 2e 31 2e 24 74 65 6d 70 5f 73 65 74  a-18.1.$temp_set
acb0: 74 69 6e 67 20 7b 0a 20 20 20 20 63 61 74 63 68  ting {.    catch
acc0: 20 7b 64 62 20 63 6c 6f 73 65 7d 0a 20 20 20 20   {db close}.    
acd0: 73 71 6c 69 74 65 33 20 64 62 20 3a 6d 65 6d 6f  sqlite3 db :memo
ace0: 72 79 3a 0a 20 20 20 20 65 78 65 63 73 71 6c 20  ry:.    execsql 
acf0: 22 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 74  ".      PRAGMA t
ad00: 65 6d 70 5f 73 74 6f 72 65 3d 24 3a 3a 74 65 6d  emp_store=$::tem
ad10: 70 5f 73 65 74 74 69 6e 67 3b 0a 20 20 20 20 20  p_setting;.     
ad20: 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f   PRAGMA temp_sto
ad30: 72 65 3d 24 3a 3a 74 65 6d 70 5f 73 65 74 74 69  re=$::temp_setti
ad40: 6e 67 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41  ng;.      PRAGMA
ad50: 20 74 65 6d 70 5f 73 74 6f 72 65 3b 0a 20 20 20   temp_store;.   
ad60: 20 22 0a 20 20 7d 20 24 76 61 6c 0a 7d 0a 0a 23   ".  } $val.}..#
ad70: 20 54 68 65 20 53 51 4c 49 54 45 5f 46 43 4e 54   The SQLITE_FCNT
ad80: 4c 5f 50 52 41 47 4d 41 20 6c 6f 67 69 63 2c 20  L_PRAGMA logic, 
ad90: 77 69 74 68 20 65 72 72 6f 72 20 68 61 6e 64 6c  with error handl
ada0: 69 6e 67 2e 0a 23 0a 64 62 20 63 6c 6f 73 65 0a  ing..#.db close.
adb0: 74 65 73 74 76 66 73 20 74 76 66 73 0a 73 71 6c  testvfs tvfs.sql
adc0: 69 74 65 33 20 64 62 20 74 65 73 74 2e 64 62 20  ite3 db test.db 
add0: 2d 76 66 73 20 74 76 66 73 0a 64 6f 5f 74 65 73  -vfs tvfs.do_tes
ade0: 74 20 70 72 61 67 6d 61 2d 31 39 2e 31 20 7b 0a  t pragma-19.1 {.
adf0: 20 20 63 61 74 63 68 73 71 6c 20 7b 50 52 41 47    catchsql {PRAG
ae00: 4d 41 20 65 72 72 6f 72 7d 0a 7d 20 7b 31 20 7b  MA error}.} {1 {
ae10: 53 51 4c 20 6c 6f 67 69 63 20 65 72 72 6f 72 7d  SQL logic error}
ae20: 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  }.do_test pragma
ae30: 2d 31 39 2e 32 20 7b 0a 20 20 63 61 74 63 68 73  -19.2 {.  catchs
ae40: 71 6c 20 7b 50 52 41 47 4d 41 20 65 72 72 6f 72  ql {PRAGMA error
ae50: 3d 27 54 68 69 73 20 69 73 20 74 68 65 20 65 72  ='This is the er
ae60: 72 6f 72 20 6d 65 73 73 61 67 65 27 7d 0a 7d 20  ror message'}.} 
ae70: 7b 31 20 7b 54 68 69 73 20 69 73 20 74 68 65 20  {1 {This is the 
ae80: 65 72 72 6f 72 20 6d 65 73 73 61 67 65 7d 7d 0a  error message}}.
ae90: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31  do_test pragma-1
aea0: 39 2e 33 20 7b 0a 20 20 63 61 74 63 68 73 71 6c  9.3 {.  catchsql
aeb0: 20 7b 50 52 41 47 4d 41 20 65 72 72 6f 72 3d 27   {PRAGMA error='
aec0: 37 20 54 68 69 73 20 69 73 20 74 68 65 20 65 72  7 This is the er
aed0: 72 6f 72 20 6d 65 73 73 61 67 65 27 7d 0a 7d 20  ror message'}.} 
aee0: 7b 31 20 7b 54 68 69 73 20 69 73 20 74 68 65 20  {1 {This is the 
aef0: 65 72 72 6f 72 20 6d 65 73 73 61 67 65 7d 7d 0a  error message}}.
af00: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31  do_test pragma-1
af10: 39 2e 34 20 7b 0a 20 20 63 61 74 63 68 73 71 6c  9.4 {.  catchsql
af20: 20 7b 50 52 41 47 4d 41 20 65 72 72 6f 72 3d 37   {PRAGMA error=7
af30: 7d 0a 7d 20 7b 31 20 7b 6f 75 74 20 6f 66 20 6d  }.} {1 {out of m
af40: 65 6d 6f 72 79 7d 7d 0a 64 6f 5f 74 65 73 74 20  emory}}.do_test 
af50: 70 72 61 67 6d 61 2d 31 39 2e 35 20 7b 0a 20 20  pragma-19.5 {.  
af60: 66 69 6c 65 20 74 61 69 6c 20 5b 6c 69 6e 64 65  file tail [linde
af70: 78 20 5b 65 78 65 63 73 71 6c 20 7b 50 52 41 47  x [execsql {PRAG
af80: 4d 41 20 66 69 6c 65 6e 61 6d 65 7d 5d 20 30 5d  MA filename}] 0]
af90: 0a 7d 20 7b 74 65 73 74 2e 64 62 7d 0a 0a 69 66  .} {test.db}..if
afa0: 20 7b 24 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28   {$tcl_platform(
afb0: 70 6c 61 74 66 6f 72 6d 29 3d 3d 22 77 69 6e 64  platform)=="wind
afc0: 6f 77 73 22 7d 20 7b 0a 23 20 54 65 73 74 20 64  ows"} {.# Test d
afd0: 61 74 61 5f 73 74 6f 72 65 5f 64 69 72 65 63 74  ata_store_direct
afe0: 6f 72 79 20 70 72 61 67 6d 61 0a 23 0a 64 62 20  ory pragma.#.db 
aff0: 63 6c 6f 73 65 0a 73 71 6c 69 74 65 33 20 64 62  close.sqlite3 db
b000: 20 74 65 73 74 2e 64 62 0a 66 69 6c 65 20 6d 6b   test.db.file mk
b010: 64 69 72 20 64 61 74 61 5f 64 69 72 0a 64 6f 5f  dir data_dir.do_
b020: 74 65 73 74 20 70 72 61 67 6d 61 2d 32 30 2e 31  test pragma-20.1
b030: 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 50   {.  catchsql {P
b040: 52 41 47 4d 41 20 64 61 74 61 5f 73 74 6f 72 65  RAGMA data_store
b050: 5f 64 69 72 65 63 74 6f 72 79 7d 0a 7d 20 7b 30  _directory}.} {0
b060: 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61   {}}.do_test pra
b070: 67 6d 61 2d 32 30 2e 32 20 7b 0a 20 20 73 65 74  gma-20.2 {.  set
b080: 20 70 77 64 20 5b 73 74 72 69 6e 67 20 6d 61 70   pwd [string map
b090: 20 7b 27 20 27 27 7d 20 5b 66 69 6c 65 20 6e 61   {' ''} [file na
b0a0: 74 69 76 65 6e 61 6d 65 20 5b 67 65 74 5f 70 77  tivename [get_pw
b0b0: 64 5d 5d 5d 0a 20 20 63 61 74 63 68 73 71 6c 20  d]]].  catchsql 
b0c0: 22 50 52 41 47 4d 41 20 64 61 74 61 5f 73 74 6f  "PRAGMA data_sto
b0d0: 72 65 5f 64 69 72 65 63 74 6f 72 79 3d 27 24 70  re_directory='$p
b0e0: 77 64 27 3b 22 0a 7d 20 7b 30 20 7b 7d 7d 0a 64  wd';".} {0 {}}.d
b0f0: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 32 30  o_test pragma-20
b100: 2e 33 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20  .3 {.  catchsql 
b110: 7b 50 52 41 47 4d 41 20 64 61 74 61 5f 73 74 6f  {PRAGMA data_sto
b120: 72 65 5f 64 69 72 65 63 74 6f 72 79 7d 0a 7d 20  re_directory}.} 
b130: 5b 6c 69 73 74 20 30 20 5b 6c 69 73 74 20 5b 66  [list 0 [list [f
b140: 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b  ile nativename [
b150: 67 65 74 5f 70 77 64 5d 5d 5d 5d 0a 64 6f 5f 74  get_pwd]]]].do_t
b160: 65 73 74 20 70 72 61 67 6d 61 2d 32 30 2e 34 20  est pragma-20.4 
b170: 7b 0a 20 20 73 65 74 20 70 77 64 20 5b 73 74 72  {.  set pwd [str
b180: 69 6e 67 20 6d 61 70 20 7b 27 20 27 27 7d 20 5b  ing map {' ''} [
b190: 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20  file nativename 
b1a0: 5c 0a 20 20 20 20 5b 66 69 6c 65 20 6a 6f 69 6e  \.    [file join
b1b0: 20 5b 67 65 74 5f 70 77 64 5d 20 64 61 74 61 5f   [get_pwd] data_
b1c0: 64 69 72 5d 5d 5d 0a 20 20 63 61 74 63 68 73 71  dir]]].  catchsq
b1d0: 6c 20 22 50 52 41 47 4d 41 20 64 61 74 61 5f 73  l "PRAGMA data_s
b1e0: 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 3d 27  tore_directory='
b1f0: 24 70 77 64 27 3b 22 0a 7d 20 7b 30 20 7b 7d 7d  $pwd';".} {0 {}}
b200: 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d  .do_test pragma-
b210: 32 30 2e 35 20 7b 0a 20 20 73 71 6c 69 74 65 33  20.5 {.  sqlite3
b220: 20 64 62 32 20 74 65 73 74 32 2e 64 62 0a 20 20   db2 test2.db.  
b230: 63 61 74 63 68 73 71 6c 20 22 50 52 41 47 4d 41  catchsql "PRAGMA
b240: 20 64 61 74 61 62 61 73 65 5f 6c 69 73 74 3b 22   database_list;"
b250: 20 64 62 32 0a 7d 20 5b 6c 69 73 74 20 30 20 5b   db2.} [list 0 [
b260: 6c 69 73 74 20 30 20 6d 61 69 6e 20 5b 66 69 6c  list 0 main [fil
b270: 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5c 0a 20  e nativename \. 
b280: 20 20 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67     [file join [g
b290: 65 74 5f 70 77 64 5d 20 64 61 74 61 5f 64 69 72  et_pwd] data_dir
b2a0: 20 74 65 73 74 32 2e 64 62 5d 5d 5d 5d 0a 63 61   test2.db]]]].ca
b2b0: 74 63 68 20 7b 64 62 32 20 63 6c 6f 73 65 7d 0a  tch {db2 close}.
b2c0: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 32  do_test pragma-2
b2d0: 30 2e 36 20 7b 0a 20 20 73 71 6c 69 74 65 33 20  0.6 {.  sqlite3 
b2e0: 64 62 32 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b  db2 [file join [
b2f0: 67 65 74 5f 70 77 64 5d 20 74 65 73 74 32 2e 64  get_pwd] test2.d
b300: 62 5d 0a 20 20 63 61 74 63 68 73 71 6c 20 22 50  b].  catchsql "P
b310: 52 41 47 4d 41 20 64 61 74 61 62 61 73 65 5f 6c  RAGMA database_l
b320: 69 73 74 3b 22 20 64 62 32 0a 7d 20 5b 6c 69 73  ist;" db2.} [lis
b330: 74 20 30 20 5b 6c 69 73 74 20 30 20 6d 61 69 6e  t 0 [list 0 main
b340: 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d   [file nativenam
b350: 65 20 5c 0a 20 20 20 20 5b 66 69 6c 65 20 6a 6f  e \.    [file jo
b360: 69 6e 20 5b 67 65 74 5f 70 77 64 5d 20 74 65 73  in [get_pwd] tes
b370: 74 32 2e 64 62 5d 5d 5d 5d 0a 63 61 74 63 68 20  t2.db]]]].catch 
b380: 7b 64 62 32 20 63 6c 6f 73 65 7d 0a 64 6f 5f 74  {db2 close}.do_t
b390: 65 73 74 20 70 72 61 67 6d 61 2d 32 30 2e 37 20  est pragma-20.7 
b3a0: 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 22 50 52  {.  catchsql "PR
b3b0: 41 47 4d 41 20 64 61 74 61 5f 73 74 6f 72 65 5f  AGMA data_store_
b3c0: 64 69 72 65 63 74 6f 72 79 3d 27 27 3b 22 0a 7d  directory='';".}
b3d0: 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20   {0 {}}.do_test 
b3e0: 70 72 61 67 6d 61 2d 32 30 2e 38 20 7b 0a 20 20  pragma-20.8 {.  
b3f0: 63 61 74 63 68 73 71 6c 20 7b 50 52 41 47 4d 41  catchsql {PRAGMA
b400: 20 64 61 74 61 5f 73 74 6f 72 65 5f 64 69 72 65   data_store_dire
b410: 63 74 6f 72 79 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a  ctory}.} {0 {}}.
b420: 0a 66 6f 72 63 65 64 65 6c 65 74 65 20 64 61 74  .forcedelete dat
b430: 61 5f 64 69 72 0a 7d 20 3b 23 20 65 6e 64 69 66  a_dir.} ;# endif
b440: 20 77 69 6e 64 6f 77 73 0a 0a 64 61 74 61 62 61   windows..databa
b450: 73 65 5f 6d 61 79 5f 62 65 5f 63 6f 72 72 75 70  se_may_be_corrup
b460: 74 0a 69 66 20 7b 21 5b 6e 6f 6e 7a 65 72 6f 5f  t.if {![nonzero_
b470: 72 65 73 65 72 76 65 64 5f 62 79 74 65 73 5d 7d  reserved_bytes]}
b480: 20 7b 0a 0a 20 20 64 6f 5f 74 65 73 74 20 32 31   {..  do_test 21
b490: 2e 31 20 7b 0a 20 20 20 20 23 20 43 72 65 61 74  .1 {.    # Creat
b4a0: 65 20 61 20 63 6f 72 72 75 70 74 20 64 61 74 61  e a corrupt data
b4b0: 62 61 73 65 20 69 6e 20 74 65 73 74 65 72 72 2e  base in testerr.
b4c0: 64 62 2e 20 41 6e 64 20 61 20 6e 6f 6e 2d 63 6f  db. And a non-co
b4d0: 72 72 75 70 74 20 61 74 20 74 65 73 74 2e 64 62  rrupt at test.db
b4e0: 2e 0a 20 20 20 20 23 0a 20 20 20 20 64 62 20 63  ..    #.    db c
b4f0: 6c 6f 73 65 0a 20 20 20 20 66 6f 72 63 65 64 65  lose.    forcede
b500: 6c 65 74 65 20 74 65 73 74 2e 64 62 0a 20 20 20  lete test.db.   
b510: 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74   sqlite3 db test
b520: 2e 64 62 0a 20 20 20 20 65 78 65 63 73 71 6c 20  .db.    execsql 
b530: 7b 20 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20  { .      PRAGMA 
b540: 70 61 67 65 5f 73 69 7a 65 20 3d 20 31 30 32 34  page_size = 1024
b550: 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 61  ;.      PRAGMA a
b560: 75 74 6f 5f 76 61 63 75 75 6d 20 3d 20 30 3b 0a  uto_vacuum = 0;.
b570: 20 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42        CREATE TAB
b580: 4c 45 20 74 31 28 61 20 50 52 49 4d 41 52 59 20  LE t1(a PRIMARY 
b590: 4b 45 59 2c 20 62 29 3b 0a 20 20 20 20 20 20 49  KEY, b);.      I
b5a0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41  NSERT INTO t1 VA
b5b0: 4c 55 45 53 28 31 2c 20 31 29 3b 0a 20 20 20 20  LUES(1, 1);.    
b5c0: 7d 0a 20 20 20 20 66 6f 72 20 7b 73 65 74 20 69  }.    for {set i
b5d0: 20 30 7d 20 7b 24 69 20 3c 20 31 30 7d 20 7b 69   0} {$i < 10} {i
b5e0: 6e 63 72 20 69 7d 20 7b 0a 20 20 20 20 20 20 65  ncr i} {.      e
b5f0: 78 65 63 73 71 6c 20 7b 20 49 4e 53 45 52 54 20  xecsql { INSERT 
b600: 49 4e 54 4f 20 74 31 20 53 45 4c 45 43 54 20 61  INTO t1 SELECT a
b610: 20 2b 20 28 31 20 3c 3c 20 24 69 29 2c 20 62 20   + (1 << $i), b 
b620: 2b 20 28 31 20 3c 3c 20 24 69 29 20 46 52 4f 4d  + (1 << $i) FROM
b630: 20 74 31 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20   t1 }.    }.    
b640: 64 62 20 63 6c 6f 73 65 0a 20 20 20 20 66 6f 72  db close.    for
b650: 63 65 63 6f 70 79 20 74 65 73 74 2e 64 62 20 74  cecopy test.db t
b660: 65 73 74 65 72 72 2e 64 62 0a 20 20 20 20 68 65  esterr.db.    he
b670: 78 69 6f 5f 77 72 69 74 65 20 74 65 73 74 65 72  xio_write tester
b680: 72 2e 64 62 20 31 35 30 30 30 20 5b 73 74 72 69  r.db 15000 [stri
b690: 6e 67 20 72 65 70 65 61 74 20 35 35 20 31 30 30  ng repeat 55 100
b6a0: 5d 0a 20 20 7d 20 7b 31 30 30 7d 0a 20 20 0a 20  ].  } {100}.  . 
b6b0: 20 73 65 74 20 6d 61 69 6e 65 72 72 20 7b 2a 2a   set mainerr {**
b6c0: 2a 20 69 6e 20 64 61 74 61 62 61 73 65 20 6d 61  * in database ma
b6d0: 69 6e 20 2a 2a 2a 0a 4d 75 6c 74 69 70 6c 65 20  in ***.Multiple 
b6e0: 75 73 65 73 20 66 6f 72 20 62 79 74 65 20 36 37  uses for byte 67
b6f0: 32 20 6f 66 20 70 61 67 65 20 31 35 7d 0a 20 20  2 of page 15}.  
b700: 73 65 74 20 61 75 78 65 72 72 20 7b 2a 2a 2a 20  set auxerr {*** 
b710: 69 6e 20 64 61 74 61 62 61 73 65 20 61 75 78 20  in database aux 
b720: 2a 2a 2a 0a 4d 75 6c 74 69 70 6c 65 20 75 73 65  ***.Multiple use
b730: 73 20 66 6f 72 20 62 79 74 65 20 36 37 32 20 6f  s for byte 672 o
b740: 66 20 70 61 67 65 20 31 35 7d 0a 20 20 0a 20 20  f page 15}.  .  
b750: 73 65 74 20 6d 61 69 6e 65 72 72 20 7b 2f 7b 5c  set mainerr {/{\
b760: 2a 5c 2a 5c 2a 20 69 6e 20 64 61 74 61 62 61 73  *\*\* in databas
b770: 65 20 6d 61 69 6e 20 5c 2a 5c 2a 5c 2a 0a 4d 75  e main \*\*\*.Mu
b780: 6c 74 69 70 6c 65 20 75 73 65 73 20 66 6f 72 20  ltiple uses for 
b790: 62 79 74 65 20 36 37 32 20 6f 66 20 70 61 67 65  byte 672 of page
b7a0: 20 31 35 7d 2e 2a 2f 7d 0a 20 20 73 65 74 20 61   15}.*/}.  set a
b7b0: 75 78 65 72 72 20 7b 2f 7b 5c 2a 5c 2a 5c 2a 20  uxerr {/{\*\*\* 
b7c0: 69 6e 20 64 61 74 61 62 61 73 65 20 61 75 78 20  in database aux 
b7d0: 5c 2a 5c 2a 5c 2a 0a 4d 75 6c 74 69 70 6c 65 20  \*\*\*.Multiple 
b7e0: 75 73 65 73 20 66 6f 72 20 62 79 74 65 20 36 37  uses for byte 67
b7f0: 32 20 6f 66 20 70 61 67 65 20 31 35 7d 2e 2a 2f  2 of page 15}.*/
b800: 7d 0a 20 20 0a 20 20 64 6f 5f 74 65 73 74 20 32  }.  .  do_test 2
b810: 32 2e 32 20 7b 0a 20 20 20 20 63 61 74 63 68 20  2.2 {.    catch 
b820: 7b 20 64 62 20 63 6c 6f 73 65 20 7d 0a 20 20 20  { db close }.   
b830: 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74   sqlite3 db test
b840: 65 72 72 2e 64 62 0a 20 20 20 20 65 78 65 63 73  err.db.    execs
b850: 71 6c 20 7b 20 50 52 41 47 4d 41 20 69 6e 74 65  ql { PRAGMA inte
b860: 67 72 69 74 79 5f 63 68 65 63 6b 20 7d 0a 20 20  grity_check }.  
b870: 7d 20 24 6d 61 69 6e 65 72 72 0a 20 20 0a 20 20  } $mainerr.  .  
b880: 64 6f 5f 74 65 73 74 20 32 32 2e 33 2e 31 20 7b  do_test 22.3.1 {
b890: 0a 20 20 20 20 63 61 74 63 68 20 7b 20 64 62 20  .    catch { db 
b8a0: 63 6c 6f 73 65 20 7d 0a 20 20 20 20 73 71 6c 69  close }.    sqli
b8b0: 74 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20  te3 db test.db. 
b8c0: 20 20 20 65 78 65 63 73 71 6c 20 7b 20 0a 20 20     execsql { .  
b8d0: 20 20 20 20 41 54 54 41 43 48 20 27 74 65 73 74      ATTACH 'test
b8e0: 65 72 72 2e 64 62 27 20 41 53 20 27 61 75 78 27  err.db' AS 'aux'
b8f0: 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 69  ;.      PRAGMA i
b900: 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 3b 0a  ntegrity_check;.
b910: 20 20 20 20 7d 0a 20 20 7d 20 24 61 75 78 65 72      }.  } $auxer
b920: 72 0a 20 20 64 6f 5f 74 65 73 74 20 32 32 2e 33  r.  do_test 22.3
b930: 2e 32 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  .2 {.    execsql
b940: 20 7b 20 50 52 41 47 4d 41 20 6d 61 69 6e 2e 69   { PRAGMA main.i
b950: 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 3b 20  ntegrity_check; 
b960: 7d 0a 20 20 7d 20 7b 6f 6b 7d 0a 20 20 64 6f 5f  }.  } {ok}.  do_
b970: 74 65 73 74 20 32 32 2e 33 2e 33 20 7b 0a 20 20  test 22.3.3 {.  
b980: 20 20 65 78 65 63 73 71 6c 20 7b 20 50 52 41 47    execsql { PRAG
b990: 4d 41 20 61 75 78 2e 69 6e 74 65 67 72 69 74 79  MA aux.integrity
b9a0: 5f 63 68 65 63 6b 3b 20 7d 0a 20 20 7d 20 24 61  _check; }.  } $a
b9b0: 75 78 65 72 72 0a 20 20 0a 20 20 64 6f 5f 74 65  uxerr.  .  do_te
b9c0: 73 74 20 32 32 2e 34 2e 31 20 7b 0a 20 20 20 20  st 22.4.1 {.    
b9d0: 63 61 74 63 68 20 7b 20 64 62 20 63 6c 6f 73 65  catch { db close
b9e0: 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 20 64   }.    sqlite3 d
b9f0: 62 20 74 65 73 74 65 72 72 2e 64 62 0a 20 20 20  b testerr.db.   
ba00: 20 65 78 65 63 73 71 6c 20 7b 20 0a 20 20 20 20   execsql { .    
ba10: 20 20 41 54 54 41 43 48 20 27 74 65 73 74 2e 64    ATTACH 'test.d
ba20: 62 27 20 41 53 20 27 61 75 78 27 3b 0a 20 20 20  b' AS 'aux';.   
ba30: 20 20 20 50 52 41 47 4d 41 20 69 6e 74 65 67 72     PRAGMA integr
ba40: 69 74 79 5f 63 68 65 63 6b 3b 0a 20 20 20 20 7d  ity_check;.    }
ba50: 0a 20 20 7d 20 24 6d 61 69 6e 65 72 72 0a 20 20  .  } $mainerr.  
ba60: 64 6f 5f 74 65 73 74 20 32 32 2e 34 2e 32 20 7b  do_test 22.4.2 {
ba70: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 20 50  .    execsql { P
ba80: 52 41 47 4d 41 20 6d 61 69 6e 2e 69 6e 74 65 67  RAGMA main.integ
ba90: 72 69 74 79 5f 63 68 65 63 6b 3b 20 7d 0a 20 20  rity_check; }.  
baa0: 7d 20 24 6d 61 69 6e 65 72 72 0a 20 20 64 6f 5f  } $mainerr.  do_
bab0: 74 65 73 74 20 32 32 2e 34 2e 33 20 7b 0a 20 20  test 22.4.3 {.  
bac0: 20 20 65 78 65 63 73 71 6c 20 7b 20 50 52 41 47    execsql { PRAG
bad0: 4d 41 20 61 75 78 2e 69 6e 74 65 67 72 69 74 79  MA aux.integrity
bae0: 5f 63 68 65 63 6b 3b 20 7d 0a 20 20 7d 20 7b 6f  _check; }.  } {o
baf0: 6b 7d 0a 7d 0a 20 20 0a 64 62 20 63 6c 6f 73 65  k}.}.  .db close
bb00: 0a 66 6f 72 63 65 64 65 6c 65 74 65 20 74 65 73  .forcedelete tes
bb10: 74 2e 64 62 20 74 65 73 74 2e 64 62 2d 77 61 6c  t.db test.db-wal
bb20: 20 74 65 73 74 2e 64 62 2d 6a 6f 75 72 6e 61 6c   test.db-journal
bb30: 0a 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74  .sqlite3 db test
bb40: 2e 64 62 0a 73 71 6c 69 74 65 33 20 64 62 32 20  .db.sqlite3 db2 
bb50: 74 65 73 74 2e 64 62 0a 64 6f 5f 74 65 73 74 20  test.db.do_test 
bb60: 32 33 2e 31 20 7b 0a 20 20 64 62 20 65 76 61 6c  23.1 {.  db eval
bb70: 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41   {.    CREATE TA
bb80: 42 4c 45 20 74 31 28 61 20 49 4e 54 45 47 45 52  BLE t1(a INTEGER
bb90: 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 62 2c 63   PRIMARY KEY,b,c
bba0: 2c 64 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20  ,d);.    CREATE 
bbb0: 49 4e 44 45 58 20 69 31 20 4f 4e 20 74 31 28 62  INDEX i1 ON t1(b
bbc0: 2c 63 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20  ,c);.    CREATE 
bbd0: 49 4e 44 45 58 20 69 32 20 4f 4e 20 74 31 28 63  INDEX i2 ON t1(c
bbe0: 2c 64 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20  ,d);.    CREATE 
bbf0: 49 4e 44 45 58 20 69 32 78 20 4f 4e 20 74 31 28  INDEX i2x ON t1(
bc00: 64 20 43 4f 4c 4c 41 54 45 20 6e 6f 63 61 73 65  d COLLATE nocase
bc10: 2c 20 63 20 44 45 53 43 29 3b 0a 20 20 20 20 43  , c DESC);.    C
bc20: 52 45 41 54 45 20 54 41 42 4c 45 20 74 32 28 78  REATE TABLE t2(x
bc30: 20 49 4e 54 45 47 45 52 20 52 45 46 45 52 45 4e   INTEGER REFEREN
bc40: 43 45 53 20 74 31 29 3b 0a 20 20 7d 0a 20 20 64  CES t1);.  }.  d
bc50: 62 32 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20  b2 eval {SELECT 
bc60: 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65  name FROM sqlite
bc70: 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 31 20 69  _master}.} {t1 i
bc80: 31 20 69 32 20 69 32 78 20 74 32 7d 0a 64 6f 5f  1 i2 i2x t2}.do_
bc90: 74 65 73 74 20 32 33 2e 32 61 20 7b 0a 20 20 64  test 23.2a {.  d
bca0: 62 20 65 76 61 6c 20 7b 0a 20 20 20 20 44 52 4f  b eval {.    DRO
bcb0: 50 20 49 4e 44 45 58 20 69 32 3b 0a 20 20 20 20  P INDEX i2;.    
bcc0: 43 52 45 41 54 45 20 49 4e 44 45 58 20 69 32 20  CREATE INDEX i2 
bcd0: 4f 4e 20 74 31 28 63 2c 64 2c 62 29 3b 0a 20 20  ON t1(c,d,b);.  
bce0: 7d 0a 20 20 63 61 70 74 75 72 65 5f 70 72 61 67  }.  capture_prag
bcf0: 6d 61 20 64 62 32 20 6f 75 74 20 7b 50 52 41 47  ma db2 out {PRAG
bd00: 4d 41 20 69 6e 64 65 78 5f 69 6e 66 6f 28 69 32  MA index_info(i2
bd10: 29 7d 0a 20 20 64 62 32 20 65 76 61 6c 20 7b 53  )}.  db2 eval {S
bd20: 45 4c 45 43 54 20 63 69 64 2c 20 6e 61 6d 65 2c  ELECT cid, name,
bd30: 20 27 7c 27 20 46 52 4f 4d 20 6f 75 74 20 4f 52   '|' FROM out OR
bd40: 44 45 52 20 42 59 20 73 65 71 6e 6f 7d 0a 7d 20  DER BY seqno}.} 
bd50: 7b 32 20 63 20 7c 20 33 20 64 20 7c 20 31 20 62  {2 c | 3 d | 1 b
bd60: 20 7c 7d 0a 0a 23 20 45 56 49 44 45 4e 43 45 2d   |}..# EVIDENCE-
bd70: 4f 46 3a 20 52 2d 35 36 31 34 33 2d 32 39 33 31  OF: R-56143-2931
bd80: 39 20 50 52 41 47 4d 41 20 73 63 68 65 6d 61 2e  9 PRAGMA schema.
bd90: 69 6e 64 65 78 5f 78 69 6e 66 6f 28 69 6e 64 65  index_xinfo(inde
bda0: 78 2d 6e 61 6d 65 29 3b 20 54 68 69 73 0a 23 20  x-name); This.# 
bdb0: 70 72 61 67 6d 61 20 72 65 74 75 72 6e 73 20 69  pragma returns i
bdc0: 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
bdd0: 20 65 76 65 72 79 20 63 6f 6c 75 6d 6e 20 69 6e   every column in
bde0: 20 61 6e 20 69 6e 64 65 78 2e 0a 23 0a 23 20 45   an index..#.# E
bdf0: 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 34 35  VIDENCE-OF: R-45
be00: 39 37 30 2d 33 35 36 31 38 20 55 6e 6c 69 6b 65  970-35618 Unlike
be10: 20 74 68 69 73 20 69 6e 64 65 78 5f 69 6e 66 6f   this index_info
be20: 20 70 72 61 67 6d 61 2c 20 74 68 69 73 20 70 72   pragma, this pr
be30: 61 67 6d 61 0a 23 20 72 65 74 75 72 6e 73 20 69  agma.# returns i
be40: 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
be50: 20 65 76 65 72 79 20 63 6f 6c 75 6d 6e 20 69 6e   every column in
be60: 20 74 68 65 20 69 6e 64 65 78 2c 20 6e 6f 74 20   the index, not 
be70: 6a 75 73 74 20 74 68 65 20 6b 65 79 0a 23 20 63  just the key.# c
be80: 6f 6c 75 6d 6e 73 2e 0a 23 0a 64 6f 5f 74 65 73  olumns..#.do_tes
be90: 74 20 32 33 2e 32 62 20 7b 0a 20 20 63 61 70 74  t 23.2b {.  capt
bea0: 75 72 65 5f 70 72 61 67 6d 61 20 64 62 32 20 6f  ure_pragma db2 o
beb0: 75 74 20 7b 50 52 41 47 4d 41 20 69 6e 64 65 78  ut {PRAGMA index
bec0: 5f 78 69 6e 66 6f 28 69 32 29 7d 0a 20 20 64 62  _xinfo(i2)}.  db
bed0: 32 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 63  2 eval {SELECT c
bee0: 69 64 2c 20 6e 61 6d 65 2c 20 22 64 65 73 63 22  id, name, "desc"
bef0: 2c 20 63 6f 6c 6c 2c 20 22 6b 65 79 22 2c 20 27  , coll, "key", '
bf00: 7c 27 20 46 52 4f 4d 20 6f 75 74 20 4f 52 44 45  |' FROM out ORDE
bf10: 52 20 42 59 20 73 65 71 6e 6f 7d 0a 7d 20 7b 32  R BY seqno}.} {2
bf20: 20 63 20 30 20 42 49 4e 41 52 59 20 31 20 7c 20   c 0 BINARY 1 | 
bf30: 33 20 64 20 30 20 42 49 4e 41 52 59 20 31 20 7c  3 d 0 BINARY 1 |
bf40: 20 31 20 62 20 30 20 42 49 4e 41 52 59 20 31 20   1 b 0 BINARY 1 
bf50: 7c 20 2d 31 20 7b 7d 20 30 20 42 49 4e 41 52 59  | -1 {} 0 BINARY
bf60: 20 30 20 7c 7d 0a 0a 23 20 28 54 68 65 20 66 69   0 |}..# (The fi
bf70: 72 73 74 20 63 6f 6c 75 6d 6e 20 6f 66 20 6f 75  rst column of ou
bf80: 74 70 75 74 20 66 72 6f 6d 20 50 52 41 47 4d 41  tput from PRAGMA
bf90: 20 69 6e 64 65 78 5f 78 69 6e 66 6f 20 69 73 2e   index_xinfo is.
bfa0: 2e 2e 29 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f  ..).# EVIDENCE-O
bfb0: 46 3a 20 52 2d 30 30 31 39 37 2d 31 34 32 37 39  F: R-00197-14279
bfc0: 20 54 68 65 20 72 61 6e 6b 20 6f 66 20 74 68 65   The rank of the
bfd0: 20 63 6f 6c 75 6d 6e 20 77 69 74 68 69 6e 20 74   column within t
bfe0: 68 65 20 69 6e 64 65 78 2e 20 28 30 0a 23 20 6d  he index. (0.# m
bff0: 65 61 6e 73 20 6c 65 66 74 2d 6d 6f 73 74 2e 20  eans left-most. 
c000: 4b 65 79 20 63 6f 6c 75 6d 6e 73 20 63 6f 6d 65  Key columns come
c010: 20 62 65 66 6f 72 65 20 61 75 78 69 6c 69 61 72   before auxiliar
c020: 79 20 63 6f 6c 75 6d 6e 73 2e 29 0a 23 0a 23 20  y columns.).#.# 
c030: 28 54 68 65 20 73 65 63 6f 6e 64 20 63 6f 6c 75  (The second colu
c040: 6d 6e 20 6f 66 20 6f 75 74 70 75 74 20 66 72 6f  mn of output fro
c050: 6d 20 50 52 41 47 4d 41 20 69 6e 64 65 78 5f 78  m PRAGMA index_x
c060: 69 6e 66 6f 20 69 73 2e 2e 2e 29 0a 23 20 45 56  info is...).# EV
c070: 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 34 30 38  IDENCE-OF: R-408
c080: 38 39 2d 30 36 38 33 38 20 54 68 65 20 72 61 6e  89-06838 The ran
c090: 6b 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20  k of the column 
c0a0: 77 69 74 68 69 6e 20 74 68 65 20 74 61 62 6c 65  within the table
c0b0: 0a 23 20 62 65 69 6e 67 20 69 6e 64 65 78 65 64  .# being indexed
c0c0: 2c 20 6f 72 20 2d 31 20 69 66 20 74 68 65 20 69  , or -1 if the i
c0d0: 6e 64 65 78 2d 63 6f 6c 75 6d 6e 20 69 73 20 74  ndex-column is t
c0e0: 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20  he rowid of the 
c0f0: 74 61 62 6c 65 0a 23 20 62 65 69 6e 67 20 69 6e  table.# being in
c100: 64 65 78 65 64 2e 0a 23 0a 23 20 28 54 68 65 20  dexed..#.# (The 
c110: 74 68 69 72 64 20 63 6f 6c 75 6d 6e 20 6f 66 20  third column of 
c120: 6f 75 74 70 75 74 20 66 72 6f 6d 20 50 52 41 47  output from PRAG
c130: 4d 41 20 69 6e 64 65 78 5f 78 69 6e 66 6f 20 69  MA index_xinfo i
c140: 73 2e 2e 2e 29 0a 23 20 45 56 49 44 45 4e 43 45  s...).# EVIDENCE
c150: 2d 4f 46 3a 20 52 2d 32 32 37 35 31 2d 32 38 39  -OF: R-22751-289
c160: 30 31 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74  01 The name of t
c170: 68 65 20 63 6f 6c 75 6d 6e 20 62 65 69 6e 67 20  he column being 
c180: 69 6e 64 65 78 65 64 2c 20 6f 72 0a 23 20 4e 55  indexed, or.# NU
c190: 4c 4c 20 69 66 20 74 68 65 20 69 6e 64 65 78 2d  LL if the index-
c1a0: 63 6f 6c 75 6d 6e 20 69 73 20 74 68 65 20 72 6f  column is the ro
c1b0: 77 69 64 20 6f 66 20 74 68 65 20 74 61 62 6c 65  wid of the table
c1c0: 20 62 65 69 6e 67 20 69 6e 64 65 78 65 64 2e 0a   being indexed..
c1d0: 23 0a 23 20 28 54 68 65 20 66 6f 75 72 74 68 20  #.# (The fourth 
c1e0: 63 6f 6c 75 6d 6e 20 6f 66 20 6f 75 74 70 75 74  column of output
c1f0: 20 66 72 6f 6d 20 50 52 41 47 4d 41 20 69 6e 64   from PRAGMA ind
c200: 65 78 5f 78 69 6e 66 6f 20 69 73 2e 2e 2e 29 0a  ex_xinfo is...).
c210: 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52  # EVIDENCE-OF: R
c220: 2d 31 31 38 34 37 2d 30 39 31 37 39 20 31 20 69  -11847-09179 1 i
c230: 66 20 74 68 65 20 69 6e 64 65 78 2d 63 6f 6c 75  f the index-colu
c240: 6d 6e 20 69 73 20 73 6f 72 74 65 64 20 69 6e 20  mn is sorted in 
c250: 72 65 76 65 72 73 65 0a 23 20 28 44 45 53 43 29  reverse.# (DESC)
c260: 20 6f 72 64 65 72 20 62 79 20 74 68 65 20 69 6e   order by the in
c270: 64 65 78 20 61 6e 64 20 30 20 6f 74 68 65 72 77  dex and 0 otherw
c280: 69 73 65 2e 0a 23 0a 23 20 28 54 68 65 20 66 69  ise..#.# (The fi
c290: 66 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 6f 75  fth column of ou
c2a0: 74 70 75 74 20 66 72 6f 6d 20 50 52 41 47 4d 41  tput from PRAGMA
c2b0: 20 69 6e 64 65 78 5f 78 69 6e 66 6f 20 69 73 2e   index_xinfo is.
c2c0: 2e 2e 29 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f  ..).# EVIDENCE-O
c2d0: 46 3a 20 52 2d 31 35 33 31 33 2d 31 39 35 34 30  F: R-15313-19540
c2e0: 20 54 68 65 20 6e 61 6d 65 20 66 6f 72 20 74 68   The name for th
c2f0: 65 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  e collating sequ
c300: 65 6e 63 65 20 75 73 65 64 20 74 6f 0a 23 20 63  ence used to.# c
c310: 6f 6d 70 61 72 65 20 76 61 6c 75 65 73 20 69 6e  ompare values in
c320: 20 74 68 65 20 69 6e 64 65 78 2d 63 6f 6c 75 6d   the index-colum
c330: 6e 2e 0a 23 0a 23 20 28 54 68 65 20 73 69 78 74  n..#.# (The sixt
c340: 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 6f 75 74 70  h column of outp
c350: 75 74 20 66 72 6f 6d 20 50 52 41 47 4d 41 20 69  ut from PRAGMA i
c360: 6e 64 65 78 5f 78 69 6e 66 6f 20 69 73 2e 2e 2e  ndex_xinfo is...
c370: 29 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a  ).# EVIDENCE-OF:
c380: 20 52 2d 31 34 33 31 30 2d 36 34 35 35 33 20 31   R-14310-64553 1
c390: 20 69 66 20 74 68 65 20 69 6e 64 65 78 2d 63 6f   if the index-co
c3a0: 6c 75 6d 6e 20 69 73 20 61 20 6b 65 79 20 63 6f  lumn is a key co
c3b0: 6c 75 6d 6e 20 61 6e 64 20 30 0a 23 20 69 66 20  lumn and 0.# if 
c3c0: 74 68 65 20 69 6e 64 65 78 2d 63 6f 6c 75 6d 6e  the index-column
c3d0: 20 69 73 20 61 6e 20 61 75 78 69 6c 69 61 72 79   is an auxiliary
c3e0: 20 63 6f 6c 75 6d 6e 2e 0a 23 0a 64 6f 5f 74 65   column..#.do_te
c3f0: 73 74 20 32 33 2e 32 63 20 7b 0a 20 20 64 62 32  st 23.2c {.  db2
c400: 20 65 76 61 6c 20 7b 50 52 41 47 4d 41 20 69 6e   eval {PRAGMA in
c410: 64 65 78 5f 78 69 6e 66 6f 28 69 32 29 7d 0a 7d  dex_xinfo(i2)}.}
c420: 20 7b 30 20 32 20 63 20 30 20 42 49 4e 41 52 59   {0 2 c 0 BINARY
c430: 20 31 20 31 20 33 20 64 20 30 20 42 49 4e 41 52   1 1 3 d 0 BINAR
c440: 59 20 31 20 32 20 31 20 62 20 30 20 42 49 4e 41  Y 1 2 1 b 0 BINA
c450: 52 59 20 31 20 33 20 2d 31 20 7b 7d 20 30 20 42  RY 1 3 -1 {} 0 B
c460: 49 4e 41 52 59 20 30 7d 0a 64 6f 5f 74 65 73 74  INARY 0}.do_test
c470: 20 32 33 2e 32 64 20 7b 0a 20 20 64 62 32 20 65   23.2d {.  db2 e
c480: 76 61 6c 20 7b 50 52 41 47 4d 41 20 69 6e 64 65  val {PRAGMA inde
c490: 78 5f 78 69 6e 66 6f 28 69 32 78 29 7d 0a 7d 20  x_xinfo(i2x)}.} 
c4a0: 7b 30 20 33 20 64 20 30 20 6e 6f 63 61 73 65 20  {0 3 d 0 nocase 
c4b0: 31 20 31 20 32 20 63 20 31 20 42 49 4e 41 52 59  1 1 2 c 1 BINARY
c4c0: 20 31 20 32 20 2d 31 20 7b 7d 20 30 20 42 49 4e   1 2 -1 {} 0 BIN
c4d0: 41 52 59 20 30 7d 0a 0a 23 20 45 56 49 44 45 4e  ARY 0}..# EVIDEN
c4e0: 43 45 2d 4f 46 3a 20 52 2d 36 34 31 30 33 2d 31  CE-OF: R-64103-1
c4f0: 37 37 37 36 20 50 52 41 47 4d 41 20 73 63 68 65  7776 PRAGMA sche
c500: 6d 61 2e 69 6e 64 65 78 5f 6c 69 73 74 28 74 61  ma.index_list(ta
c510: 62 6c 65 2d 6e 61 6d 65 29 3b 20 54 68 69 73 0a  ble-name); This.
c520: 23 20 70 72 61 67 6d 61 20 72 65 74 75 72 6e 73  # pragma returns
c530: 20 6f 6e 65 20 72 6f 77 20 66 6f 72 20 65 61 63   one row for eac
c540: 68 20 69 6e 64 65 78 20 61 73 73 6f 63 69 61 74  h index associat
c550: 65 64 20 77 69 74 68 20 74 68 65 20 67 69 76 65  ed with the give
c560: 6e 20 74 61 62 6c 65 2e 0a 23 0a 23 20 28 54 68  n table..#.# (Th
c570: 65 20 66 69 72 73 74 20 63 6f 6c 75 6d 6e 20 6f  e first column o
c580: 66 20 6f 75 74 70 75 74 20 66 72 6f 6d 20 50 52  f output from PR
c590: 41 47 4d 41 20 69 6e 64 65 78 5f 6c 69 73 74 20  AGMA index_list 
c5a0: 69 73 2e 2e 2e 29 0a 23 20 45 56 49 44 45 4e 43  is...).# EVIDENC
c5b0: 45 2d 4f 46 3a 20 52 2d 30 32 37 35 33 2d 32 34  E-OF: R-02753-24
c5c0: 37 34 38 20 41 20 73 65 71 75 65 6e 63 65 20 6e  748 A sequence n
c5d0: 75 6d 62 65 72 20 61 73 73 69 67 6e 65 64 20 74  umber assigned t
c5e0: 6f 20 65 61 63 68 20 69 6e 64 65 78 0a 23 20 66  o each index.# f
c5f0: 6f 72 20 69 6e 74 65 72 6e 61 6c 20 74 72 61 63  or internal trac
c600: 6b 69 6e 67 20 70 75 72 70 6f 73 65 73 2e 0a 23  king purposes..#
c610: 0a 23 20 28 54 68 65 20 73 65 63 6f 6e 64 20 63  .# (The second c
c620: 6f 6c 75 6d 6e 20 6f 66 20 6f 75 74 70 75 74 20  olumn of output 
c630: 66 72 6f 6d 20 50 52 41 47 4d 41 20 69 6e 64 65  from PRAGMA inde
c640: 78 5f 6c 69 73 74 20 69 73 2e 2e 2e 29 0a 23 20  x_list is...).# 
c650: 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 33  EVIDENCE-OF: R-3
c660: 35 34 39 36 2d 30 33 36 33 35 20 54 68 65 20 6e  5496-03635 The n
c670: 61 6d 65 20 6f 66 20 74 68 65 20 69 6e 64 65 78  ame of the index
c680: 2e 0a 23 0a 23 20 28 54 68 65 20 74 68 69 72 64  ..#.# (The third
c690: 20 63 6f 6c 75 6d 6e 20 6f 66 20 6f 75 74 70 75   column of outpu
c6a0: 74 20 66 72 6f 6d 20 50 52 41 47 4d 41 20 69 6e  t from PRAGMA in
c6b0: 64 65 78 5f 6c 69 73 74 20 69 73 2e 2e 2e 29 0a  dex_list is...).
c6c0: 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52  # EVIDENCE-OF: R
c6d0: 2d 35 37 33 30 31 2d 36 34 35 30 36 20 22 31 22  -57301-64506 "1"
c6e0: 20 69 66 20 74 68 65 20 69 6e 64 65 78 20 69 73   if the index is
c6f0: 20 55 4e 49 51 55 45 20 61 6e 64 20 22 30 22 20   UNIQUE and "0" 
c700: 69 66 20 6e 6f 74 2e 0a 23 0a 23 20 28 54 68 65  if not..#.# (The
c710: 20 66 6f 75 72 74 68 20 63 6f 6c 75 6d 6e 20 6f   fourth column o
c720: 66 20 6f 75 74 70 75 74 20 66 72 6f 6d 20 50 52  f output from PR
c730: 41 47 4d 41 20 69 6e 64 65 78 5f 6c 69 73 74 20  AGMA index_list 
c740: 69 73 2e 2e 2e 29 0a 23 20 45 56 49 44 45 4e 43  is...).# EVIDENC
c750: 45 2d 4f 46 3a 20 52 2d 33 36 36 30 39 2d 33 39  E-OF: R-36609-39
c760: 35 35 34 20 22 63 22 20 69 66 20 74 68 65 20 69  554 "c" if the i
c770: 6e 64 65 78 20 77 61 73 20 63 72 65 61 74 65 64  ndex was created
c780: 20 62 79 20 61 20 43 52 45 41 54 45 0a 23 20 49   by a CREATE.# I
c790: 4e 44 45 58 20 73 74 61 74 65 6d 65 6e 74 2c 20  NDEX statement, 
c7a0: 22 75 22 20 69 66 20 74 68 65 20 69 6e 64 65 78  "u" if the index
c7b0: 20 77 61 73 20 63 72 65 61 74 65 64 20 62 79 20   was created by 
c7c0: 61 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61  a UNIQUE constra
c7d0: 69 6e 74 2c 0a 23 20 6f 72 20 22 70 6b 22 20 69  int,.# or "pk" i
c7e0: 66 20 74 68 65 20 69 6e 64 65 78 20 77 61 73 20  f the index was 
c7f0: 63 72 65 61 74 65 64 20 62 79 20 61 20 50 52 49  created by a PRI
c800: 4d 41 52 59 20 4b 45 59 20 63 6f 6e 73 74 72 61  MARY KEY constra
c810: 69 6e 74 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 32  int..#.do_test 2
c820: 33 2e 33 20 7b 0a 20 20 64 62 20 65 76 61 6c 20  3.3 {.  db eval 
c830: 7b 0a 20 20 20 20 43 52 45 41 54 45 20 49 4e 44  {.    CREATE IND
c840: 45 58 20 69 33 20 4f 4e 20 74 31 28 64 2c 62 2c  EX i3 ON t1(d,b,
c850: 63 29 3b 0a 20 20 7d 0a 20 20 63 61 70 74 75 72  c);.  }.  captur
c860: 65 5f 70 72 61 67 6d 61 20 64 62 32 20 6f 75 74  e_pragma db2 out
c870: 20 7b 50 52 41 47 4d 41 20 69 6e 64 65 78 5f 6c   {PRAGMA index_l
c880: 69 73 74 28 74 31 29 7d 0a 20 20 64 62 32 20 65  ist(t1)}.  db2 e
c890: 76 61 6c 20 7b 53 45 4c 45 43 54 20 73 65 71 2c  val {SELECT seq,
c8a0: 20 6e 61 6d 65 2c 20 22 75 6e 69 71 75 65 22 2c   name, "unique",
c8b0: 20 6f 72 69 67 69 6e 2c 20 27 7c 27 20 46 52 4f   origin, '|' FRO
c8c0: 4d 20 6f 75 74 20 4f 52 44 45 52 20 42 59 20 73  M out ORDER BY s
c8d0: 65 71 7d 0a 7d 20 7b 30 20 69 33 20 30 20 63 20  eq}.} {0 i3 0 c 
c8e0: 7c 20 31 20 69 32 20 30 20 63 20 7c 20 32 20 69  | 1 i2 0 c | 2 i
c8f0: 32 78 20 30 20 63 20 7c 20 33 20 69 31 20 30 20  2x 0 c | 3 i1 0 
c900: 63 20 7c 7d 0a 64 6f 5f 74 65 73 74 20 32 33 2e  c |}.do_test 23.
c910: 34 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a  4 {.  db eval {.
c920: 20 20 20 20 41 4c 54 45 52 20 54 41 42 4c 45 20      ALTER TABLE 
c930: 74 31 20 41 44 44 20 43 4f 4c 55 4d 4e 20 65 3b  t1 ADD COLUMN e;
c940: 0a 20 20 7d 0a 20 20 64 62 32 20 65 76 61 6c 20  .  }.  db2 eval 
c950: 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 74 61 62  {.    PRAGMA tab
c960: 6c 65 5f 69 6e 66 6f 28 74 31 29 3b 0a 20 20 7d  le_info(t1);.  }
c970: 0a 7d 20 7b 2f 34 20 65 20 7b 7d 20 30 20 7b 7d  .} {/4 e {} 0 {}
c980: 20 30 2f 7d 0a 64 6f 5f 74 65 73 74 20 32 33 2e   0/}.do_test 23.
c990: 35 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a  5 {.  db eval {.
c9a0: 20 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20 74      DROP TABLE t
c9b0: 32 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41  2;.    CREATE TA
c9c0: 42 4c 45 20 74 32 28 78 2c 20 79 20 49 4e 54 45  BLE t2(x, y INTE
c9d0: 47 45 52 20 52 45 46 45 52 45 4e 43 45 53 20 74  GER REFERENCES t
c9e0: 31 29 3b 0a 20 20 7d 0a 20 20 64 62 32 20 65 76  1);.  }.  db2 ev
c9f0: 61 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20  al {.    PRAGMA 
ca00: 66 6f 72 65 69 67 6e 5f 6b 65 79 5f 6c 69 73 74  foreign_key_list
ca10: 28 74 32 29 3b 0a 20 20 7d 0a 7d 20 7b 30 20 30  (t2);.  }.} {0 0
ca20: 20 74 31 20 79 20 7b 7d 20 7b 4e 4f 20 41 43 54   t1 y {} {NO ACT
ca30: 49 4f 4e 7d 20 7b 4e 4f 20 41 43 54 49 4f 4e 7d  ION} {NO ACTION}
ca40: 20 4e 4f 4e 45 7d 0a 64 62 32 20 63 6c 6f 73 65   NONE}.db2 close
ca50: 0a 0a 69 66 63 61 70 61 62 6c 65 20 21 68 61 73  ..ifcapable !has
ca60: 5f 63 6f 64 65 63 20 7b 0a 20 20 72 65 73 65 74  _codec {.  reset
ca70: 5f 64 62 0a 20 20 64 6f 5f 65 78 65 63 73 71 6c  _db.  do_execsql
ca80: 5f 74 65 73 74 20 32 34 2e 30 20 7b 0a 20 20 20  _test 24.0 {.   
ca90: 20 50 52 41 47 4d 41 20 70 61 67 65 5f 73 69 7a   PRAGMA page_siz
caa0: 65 20 3d 20 31 30 32 34 3b 0a 20 20 20 20 43 52  e = 1024;.    CR
cab0: 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 61 2c  EATE TABLE t1(a,
cac0: 20 62 2c 20 63 29 3b 0a 20 20 20 20 43 52 45 41   b, c);.    CREA
cad0: 54 45 20 49 4e 44 45 58 20 69 31 20 4f 4e 20 74  TE INDEX i1 ON t
cae0: 31 28 62 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  1(b);.    INSERT
caf0: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
cb00: 27 61 27 2c 20 27 62 27 2c 20 27 63 27 29 3b 0a  'a', 'b', 'c');.
cb10: 20 20 20 20 50 52 41 47 4d 41 20 69 6e 74 65 67      PRAGMA integ
cb20: 72 69 74 79 5f 63 68 65 63 6b 3b 0a 20 20 7d 20  rity_check;.  } 
cb30: 7b 6f 6b 7d 0a 20 20 0a 20 20 73 65 74 20 72 20  {ok}.  .  set r 
cb40: 5b 64 62 20 6f 6e 65 20 7b 53 45 4c 45 43 54 20  [db one {SELECT 
cb50: 72 6f 6f 74 70 61 67 65 20 46 52 4f 4d 20 73 71  rootpage FROM sq
cb60: 6c 69 74 65 5f 6d 61 73 74 65 72 20 57 48 45 52  lite_master WHER
cb70: 45 20 6e 61 6d 65 20 3d 20 27 74 31 27 7d 5d 0a  E name = 't1'}].
cb80: 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 68 65 78    db close.  hex
cb90: 69 6f 5f 77 72 69 74 65 20 74 65 73 74 2e 64 62  io_write test.db
cba0: 20 5b 65 78 70 72 20 24 72 2a 31 30 32 34 20 2d   [expr $r*1024 -
cbb0: 20 31 36 5d 20 30 30 30 30 30 30 30 30 30 30 30   16] 00000000000
cbc0: 30 30 30 30 37 30 31 30 34 30 66 30 66 31 66 36  0000701040f0f1f6
cbd0: 31 36 32 36 33 0a 20 20 0a 20 20 73 71 6c 69 74  16263.  .  sqlit
cbe0: 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20  e3 db test.db.  
cbf0: 64 6f 5f 63 61 74 63 68 73 71 6c 5f 74 65 73 74  do_catchsql_test
cc00: 20 32 34 2e 31 20 7b 0a 20 20 20 20 53 45 4c 45   24.1 {.    SELE
cc10: 43 54 20 2a 20 46 52 4f 4d 20 74 31 3b 0a 20 20  CT * FROM t1;.  
cc20: 7d 20 7b 31 20 7b 64 61 74 61 62 61 73 65 20 64  } {1 {database d
cc30: 69 73 6b 20 69 6d 61 67 65 20 69 73 20 6d 61 6c  isk image is mal
cc40: 66 6f 72 6d 65 64 7d 7d 0a 20 20 64 6f 5f 63 61  formed}}.  do_ca
cc50: 74 63 68 73 71 6c 5f 74 65 73 74 20 32 34 2e 32  tchsql_test 24.2
cc60: 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 69 6e   {.    PRAGMA in
cc70: 74 65 67 72 69 74 79 5f 63 68 65 63 6b 3b 0a 20  tegrity_check;. 
cc80: 20 7d 20 7b 30 20 7b 7b 64 61 74 61 62 61 73 65   } {0 {{database
cc90: 20 64 69 73 6b 20 69 6d 61 67 65 20 69 73 20 6d   disk image is m
cca0: 61 6c 66 6f 72 6d 65 64 7d 7d 7d 0a 7d 20 20 0a  alformed}}}.}  .
ccb0: 64 61 74 61 62 61 73 65 5f 6e 65 76 65 72 5f 63  database_never_c
ccc0: 6f 72 72 75 70 74 0a 66 69 6e 69 73 68 5f 74 65  orrupt.finish_te
ccd0: 73 74 0a                                         st.