/ Hex Artifact Content
Login

Artifact fc0c3c0ca53ad82b32c02db7000c1c6ba4449fce:


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 20 7b 0a 20 20 65 78 65 63 73  a-1.11 {.  execs
1450: 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20  ql {.    PRAGMA 
1460: 73 79 6e 63 68 72 6f 6e 6f 75 73 3d 46 55 4c 4c  synchronous=FULL
1470: 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 63 61 63  ;.    PRAGMA cac
1480: 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 50 52 41  he_size;.    PRA
1490: 47 4d 41 20 64 65 66 61 75 6c 74 5f 63 61 63 68  GMA default_cach
14a0: 65 5f 73 69 7a 65 3b 0a 20 20 20 20 50 52 41 47  e_size;.    PRAG
14b0: 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a  MA synchronous;.
14c0: 20 20 7d 0a 7d 20 7b 31 32 33 20 31 32 33 20 32    }.} {123 123 2
14d0: 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  }.do_test pragma
14e0: 2d 31 2e 31 32 20 7b 0a 20 20 64 62 20 63 6c 6f  -1.12 {.  db clo
14f0: 73 65 0a 20 20 73 71 6c 69 74 65 33 20 64 62 20  se.  sqlite3 db 
1500: 74 65 73 74 2e 64 62 3b 20 73 65 74 20 3a 3a 44  test.db; set ::D
1510: 42 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6e 6e 65  B [sqlite3_conne
1520: 63 74 69 6f 6e 5f 70 6f 69 6e 74 65 72 20 64 62  ction_pointer db
1530: 5d 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  ].  execsql {.  
1540: 20 20 50 52 41 47 4d 41 20 63 61 63 68 65 5f 73    PRAGMA cache_s
1550: 69 7a 65 3b 0a 20 20 20 20 50 52 41 47 4d 41 20  ize;.    PRAGMA 
1560: 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69  default_cache_si
1570: 7a 65 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 73  ze;.    PRAGMA s
1580: 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20 20 7d 0a  ynchronous;.  }.
1590: 7d 20 7b 31 32 33 20 31 32 33 20 32 7d 0a 0a 23  } {123 123 2}..#
15a0: 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20 70   Make sure the p
15b0: 72 61 67 6d 61 20 68 61 6e 64 6c 65 72 20 75 6e  ragma handler un
15c0: 64 65 72 73 74 61 6e 64 73 20 6e 75 6d 65 72 69  derstands numeri
15d0: 63 20 76 61 6c 75 65 73 20 69 6e 20 61 64 64 69  c values in addi
15e0: 74 69 6f 6e 0a 23 20 74 6f 20 6b 65 79 77 6f 72  tion.# to keywor
15f0: 64 73 20 6c 69 6b 65 20 22 6f 66 66 22 20 61 6e  ds like "off" an
1600: 64 20 22 66 75 6c 6c 22 2e 0a 23 0a 64 6f 5f 74  d "full"..#.do_t
1610: 65 73 74 20 70 72 61 67 6d 61 2d 31 2e 31 33 20  est pragma-1.13 
1620: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
1630: 20 20 50 52 41 47 4d 41 20 73 79 6e 63 68 72 6f    PRAGMA synchro
1640: 6e 6f 75 73 3d 30 3b 0a 20 20 20 20 50 52 41 47  nous=0;.    PRAG
1650: 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a  MA synchronous;.
1660: 20 20 7d 0a 7d 20 7b 30 7d 0a 64 6f 5f 74 65 73    }.} {0}.do_tes
1670: 74 20 70 72 61 67 6d 61 2d 31 2e 31 34 20 7b 0a  t pragma-1.14 {.
1680: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
1690: 50 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f  PRAGMA synchrono
16a0: 75 73 3d 32 3b 0a 20 20 20 20 50 52 41 47 4d 41  us=2;.    PRAGMA
16b0: 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20 20   synchronous;.  
16c0: 7d 0a 7d 20 7b 32 7d 0a 64 6f 5f 74 65 73 74 20  }.} {2}.do_test 
16d0: 70 72 61 67 6d 61 2d 31 2e 31 34 2e 31 20 7b 0a  pragma-1.14.1 {.
16e0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
16f0: 50 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f  PRAGMA synchrono
1700: 75 73 3d 34 3b 0a 20 20 20 20 50 52 41 47 4d 41  us=4;.    PRAGMA
1710: 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20 20   synchronous;.  
1720: 7d 0a 7d 20 7b 30 7d 0a 64 6f 5f 74 65 73 74 20  }.} {0}.do_test 
1730: 70 72 61 67 6d 61 2d 31 2e 31 34 2e 32 20 7b 0a  pragma-1.14.2 {.
1740: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
1750: 50 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f  PRAGMA synchrono
1760: 75 73 3d 33 3b 0a 20 20 20 20 50 52 41 47 4d 41  us=3;.    PRAGMA
1770: 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20 20   synchronous;.  
1780: 7d 0a 7d 20 7b 30 7d 0a 64 6f 5f 74 65 73 74 20  }.} {0}.do_test 
1790: 70 72 61 67 6d 61 2d 31 2e 31 34 2e 33 20 7b 0a  pragma-1.14.3 {.
17a0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
17b0: 50 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f  PRAGMA synchrono
17c0: 75 73 3d 31 30 3b 0a 20 20 20 20 50 52 41 47 4d  us=10;.    PRAGM
17d0: 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20  A synchronous;. 
17e0: 20 7d 0a 7d 20 7b 32 7d 0a 7d 20 3b 23 20 69 66   }.} {2}.} ;# if
17f0: 63 61 70 61 62 6c 65 20 70 61 67 65 72 5f 70 72  capable pager_pr
1800: 61 67 6d 61 73 0a 0a 23 20 54 65 73 74 20 74 75  agmas..# Test tu
1810: 72 6e 69 6e 67 20 22 66 6c 61 67 22 20 70 72 61  rning "flag" pra
1820: 67 6d 61 73 20 6f 6e 20 61 6e 64 20 6f 66 66 2e  gmas on and off.
1830: 0a 23 0a 69 66 63 61 70 61 62 6c 65 20 64 65 62  .#.ifcapable deb
1840: 75 67 20 7b 0a 20 20 23 20 50 72 61 67 6d 61 20  ug {.  # Pragma 
1850: 22 76 64 62 65 5f 6c 69 73 74 69 6e 67 22 20 69  "vdbe_listing" i
1860: 73 20 6f 6e 6c 79 20 61 76 61 69 6c 61 62 6c 65  s only available
1870: 20 69 66 20 63 6f 6d 70 69 6c 65 64 20 77 69 74   if compiled wit
1880: 68 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  h SQLITE_DEBUG. 
1890: 20 23 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61   #.  do_test pra
18a0: 67 6d 61 2d 31 2e 31 35 20 7b 0a 20 20 20 20 65  gma-1.15 {.    e
18b0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50  xecsql {.      P
18c0: 52 41 47 4d 41 20 76 64 62 65 5f 6c 69 73 74 69  RAGMA vdbe_listi
18d0: 6e 67 3d 59 45 53 3b 0a 20 20 20 20 20 20 50 52  ng=YES;.      PR
18e0: 41 47 4d 41 20 76 64 62 65 5f 6c 69 73 74 69 6e  AGMA vdbe_listin
18f0: 67 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 31 7d  g;.    }.  } {1}
1900: 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .  do_test pragm
1910: 61 2d 31 2e 31 36 20 7b 0a 20 20 20 20 65 78 65  a-1.16 {.    exe
1920: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41  csql {.      PRA
1930: 47 4d 41 20 76 64 62 65 5f 6c 69 73 74 69 6e 67  GMA vdbe_listing
1940: 3d 4e 4f 3b 0a 20 20 20 20 20 20 50 52 41 47 4d  =NO;.      PRAGM
1950: 41 20 76 64 62 65 5f 6c 69 73 74 69 6e 67 3b 0a  A vdbe_listing;.
1960: 20 20 20 20 7d 0a 20 20 7d 20 7b 30 7d 0a 7d 0a      }.  } {0}.}.
1970: 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d  .do_test pragma-
1980: 31 2e 31 37 20 7b 0a 20 20 65 78 65 63 73 71 6c  1.17 {.  execsql
1990: 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 70 61   {.    PRAGMA pa
19a0: 72 73 65 72 5f 74 72 61 63 65 3d 4f 4e 3b 0a 20  rser_trace=ON;. 
19b0: 20 20 20 50 52 41 47 4d 41 20 70 61 72 73 65 72     PRAGMA parser
19c0: 5f 74 72 61 63 65 3d 4f 46 46 3b 0a 20 20 7d 0a  _trace=OFF;.  }.
19d0: 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61  } {}.do_test pra
19e0: 67 6d 61 2d 31 2e 31 38 20 7b 0a 20 20 65 78 65  gma-1.18 {.  exe
19f0: 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d  csql {.    PRAGM
1a00: 41 20 62 6f 67 75 73 20 3d 20 2d 31 32 33 34 3b  A bogus = -1234;
1a10: 20 20 2d 2d 20 50 61 72 73 69 6e 67 20 6f 66 20    -- Parsing of 
1a20: 6e 65 67 61 74 69 76 65 20 76 61 6c 75 65 73 0a  negative values.
1a30: 20 20 7d 0a 7d 20 7b 7d 0a 0a 23 20 54 65 73 74    }.} {}..# Test
1a40: 20 6d 6f 64 69 66 79 69 6e 67 20 74 68 65 20 73   modifying the s
1a50: 61 66 65 74 79 5f 6c 65 76 65 6c 20 6f 66 20 61  afety_level of a
1a60: 6e 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  n attached datab
1a70: 61 73 65 2e 0a 69 66 63 61 70 61 62 6c 65 20 70  ase..ifcapable p
1a80: 61 67 65 72 5f 70 72 61 67 6d 61 73 26 26 61 74  ager_pragmas&&at
1a90: 74 61 63 68 20 7b 0a 20 20 64 6f 5f 74 65 73 74  tach {.  do_test
1aa0: 20 70 72 61 67 6d 61 2d 32 2e 31 20 7b 0a 20 20   pragma-2.1 {.  
1ab0: 20 20 66 6f 72 63 65 64 65 6c 65 74 65 20 74 65    forcedelete te
1ac0: 73 74 32 2e 64 62 0a 20 20 20 20 66 6f 72 63 65  st2.db.    force
1ad0: 64 65 6c 65 74 65 20 74 65 73 74 32 2e 64 62 2d  delete test2.db-
1ae0: 6a 6f 75 72 6e 61 6c 0a 20 20 20 20 65 78 65 63  journal.    exec
1af0: 73 71 6c 20 7b 0a 20 20 20 20 20 20 41 54 54 41  sql {.      ATTA
1b00: 43 48 20 27 74 65 73 74 32 2e 64 62 27 20 41 53  CH 'test2.db' AS
1b10: 20 61 75 78 3b 0a 20 20 20 20 7d 20 0a 20 20 7d   aux;.    } .  }
1b20: 20 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72   {}.  do_test pr
1b30: 61 67 6d 61 2d 32 2e 32 20 7b 0a 20 20 20 20 65  agma-2.2 {.    e
1b40: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 70  xecsql {.      p
1b50: 72 61 67 6d 61 20 61 75 78 2e 73 79 6e 63 68 72  ragma aux.synchr
1b60: 6f 6e 6f 75 73 3b 0a 20 20 20 20 7d 20 0a 20 20  onous;.    } .  
1b70: 7d 20 7b 32 7d 0a 20 20 64 6f 5f 74 65 73 74 20  } {2}.  do_test 
1b80: 70 72 61 67 6d 61 2d 32 2e 33 20 7b 0a 20 20 20  pragma-2.3 {.   
1b90: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20   execsql {.     
1ba0: 20 70 72 61 67 6d 61 20 61 75 78 2e 73 79 6e 63   pragma aux.sync
1bb0: 68 72 6f 6e 6f 75 73 20 3d 20 4f 46 46 3b 0a 20  hronous = OFF;. 
1bc0: 20 20 20 20 20 70 72 61 67 6d 61 20 61 75 78 2e       pragma aux.
1bd0: 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20 20 20  synchronous;.   
1be0: 20 20 20 70 72 61 67 6d 61 20 73 79 6e 63 68 72     pragma synchr
1bf0: 6f 6e 6f 75 73 3b 0a 20 20 20 20 7d 20 0a 20 20  onous;.    } .  
1c00: 7d 20 7b 30 20 32 7d 0a 20 20 64 6f 5f 74 65 73  } {0 2}.  do_tes
1c10: 74 20 70 72 61 67 6d 61 2d 32 2e 34 20 7b 0a 20  t pragma-2.4 {. 
1c20: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
1c30: 20 20 20 70 72 61 67 6d 61 20 61 75 78 2e 73 79     pragma aux.sy
1c40: 6e 63 68 72 6f 6e 6f 75 73 20 3d 20 4f 4e 3b 0a  nchronous = ON;.
1c50: 20 20 20 20 20 20 70 72 61 67 6d 61 20 73 79 6e        pragma syn
1c60: 63 68 72 6f 6e 6f 75 73 3b 0a 20 20 20 20 20 20  chronous;.      
1c70: 70 72 61 67 6d 61 20 61 75 78 2e 73 79 6e 63 68  pragma aux.synch
1c80: 72 6f 6e 6f 75 73 3b 0a 20 20 20 20 7d 20 0a 20  ronous;.    } . 
1c90: 20 7d 20 7b 32 20 31 7d 0a 7d 20 3b 23 20 69 66   } {2 1}.} ;# if
1ca0: 63 61 70 61 62 6c 65 20 70 61 67 65 72 5f 70 72  capable pager_pr
1cb0: 61 67 6d 61 73 0a 0a 23 20 43 6f 6e 73 74 72 75  agmas..# Constru
1cc0: 63 74 20 61 20 63 6f 72 72 75 70 74 65 64 20 69  ct a corrupted i
1cd0: 6e 64 65 78 20 61 6e 64 20 6d 61 6b 65 20 73 75  ndex and make su
1ce0: 72 65 20 74 68 65 20 69 6e 74 65 67 72 69 74 79  re the integrity
1cf0: 5f 63 68 65 63 6b 0a 23 20 70 72 61 67 6d 61 20  _check.# pragma 
1d00: 66 69 6e 64 73 20 69 74 2e 0a 23 0a 23 20 54 68  finds it..#.# Th
1d10: 65 73 65 20 74 65 73 74 73 20 77 6f 6e 27 74 20  ese tests won't 
1d20: 77 6f 72 6b 20 69 66 20 74 68 65 20 64 61 74 61  work if the data
1d30: 62 61 73 65 20 69 73 20 65 6e 63 72 79 70 74 65  base is encrypte
1d40: 64 0a 23 0a 64 6f 5f 74 65 73 74 20 70 72 61 67  d.#.do_test prag
1d50: 6d 61 2d 33 2e 31 20 7b 0a 20 20 64 62 20 63 6c  ma-3.1 {.  db cl
1d60: 6f 73 65 0a 20 20 66 6f 72 63 65 64 65 6c 65 74  ose.  forcedelet
1d70: 65 20 74 65 73 74 2e 64 62 20 74 65 73 74 2e 64  e test.db test.d
1d80: 62 2d 6a 6f 75 72 6e 61 6c 0a 20 20 73 71 6c 69  b-journal.  sqli
1d90: 74 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20  te3 db test.db. 
1da0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50   execsql {.    P
1db0: 52 41 47 4d 41 20 61 75 74 6f 5f 76 61 63 75 75  RAGMA auto_vacuu
1dc0: 6d 3d 4f 46 46 3b 0a 20 20 20 20 42 45 47 49 4e  m=OFF;.    BEGIN
1dd0: 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42  ;.    CREATE TAB
1de0: 4c 45 20 74 32 28 61 2c 62 2c 63 29 3b 0a 20 20  LE t2(a,b,c);.  
1df0: 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 69    CREATE INDEX i
1e00: 32 20 4f 4e 20 74 32 28 61 29 3b 0a 20 20 20 20  2 ON t2(a);.    
1e10: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56  INSERT INTO t2 V
1e20: 41 4c 55 45 53 28 31 31 2c 32 2c 33 29 3b 0a 20  ALUES(11,2,3);. 
1e30: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
1e40: 32 20 56 41 4c 55 45 53 28 32 32 2c 33 2c 34 29  2 VALUES(22,3,4)
1e50: 3b 0a 20 20 20 20 43 4f 4d 4d 49 54 3b 0a 20 20  ;.    COMMIT;.  
1e60: 20 20 53 45 4c 45 43 54 20 72 6f 77 69 64 2c 20    SELECT rowid, 
1e70: 2a 20 66 72 6f 6d 20 74 32 3b 0a 20 20 7d 0a 7d  * from t2;.  }.}
1e80: 20 7b 31 20 31 31 20 32 20 33 20 32 20 32 32 20   {1 11 2 3 2 22 
1e90: 33 20 34 7d 0a 69 66 63 61 70 61 62 6c 65 20 61  3 4}.ifcapable a
1ea0: 74 74 61 63 68 20 7b 0a 20 20 69 66 20 7b 21 5b  ttach {.  if {![
1eb0: 73 71 6c 69 74 65 33 20 2d 68 61 73 2d 63 6f 64  sqlite3 -has-cod
1ec0: 65 63 5d 20 26 26 20 24 73 71 6c 69 74 65 5f 6f  ec] && $sqlite_o
1ed0: 70 74 69 6f 6e 73 28 69 6e 74 65 67 72 69 74 79  ptions(integrity
1ee0: 63 6b 29 7d 20 7b 0a 20 20 20 20 64 6f 5f 74 65  ck)} {.    do_te
1ef0: 73 74 20 70 72 61 67 6d 61 2d 33 2e 32 20 7b 0a  st pragma-3.2 {.
1f00: 20 20 20 20 20 20 64 62 20 65 76 61 6c 20 7b 53        db eval {S
1f10: 45 4c 45 43 54 20 72 6f 6f 74 70 61 67 65 20 46  ELECT rootpage F
1f20: 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
1f30: 72 20 57 48 45 52 45 20 6e 61 6d 65 3d 27 69 32  r WHERE name='i2
1f40: 27 7d 20 62 72 65 61 6b 0a 20 20 20 20 20 20 73  '} break.      s
1f50: 65 74 20 70 67 73 7a 20 5b 64 62 20 65 76 61 6c  et pgsz [db eval
1f60: 20 7b 50 52 41 47 4d 41 20 70 61 67 65 5f 73 69   {PRAGMA page_si
1f70: 7a 65 7d 5d 0a 20 20 20 20 20 20 23 20 6f 76 65  ze}].      # ove
1f80: 72 77 72 69 74 65 20 74 68 65 20 68 65 61 64 65  rwrite the heade
1f90: 72 20 6f 6e 20 74 68 65 20 72 6f 6f 74 70 61 67  r on the rootpag
1fa0: 65 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20 69  e of the index i
1fb0: 6e 20 6f 72 64 65 72 20 74 6f 0a 20 20 20 20 20  n order to.     
1fc0: 20 23 20 6d 61 6b 65 20 74 68 65 20 69 6e 64 65   # make the inde
1fd0: 78 20 61 70 70 65 61 72 20 74 6f 20 62 65 20 65  x appear to be e
1fe0: 6d 70 74 79 2e 0a 20 20 20 20 20 20 23 0a 20 20  mpty..      #.  
1ff0: 20 20 20 20 73 65 74 20 6f 66 66 73 65 74 20 5b      set offset [
2000: 65 78 70 72 20 7b 24 70 67 73 7a 2a 28 24 72 6f  expr {$pgsz*($ro
2010: 6f 74 70 61 67 65 2d 31 29 7d 5d 0a 20 20 20 20  otpage-1)}].    
2020: 20 20 68 65 78 69 6f 5f 77 72 69 74 65 20 74 65    hexio_write te
2030: 73 74 2e 64 62 20 24 6f 66 66 73 65 74 20 30 61  st.db $offset 0a
2040: 30 30 30 30 30 30 30 30 30 34 30 30 30 30 30 30  0000000004000000
2050: 30 30 30 30 0a 20 20 20 20 20 20 64 62 20 63 6c  0000.      db cl
2060: 6f 73 65 0a 20 20 20 20 20 20 73 71 6c 69 74 65  ose.      sqlite
2070: 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20 20  3 db test.db.   
2080: 20 20 20 65 78 65 63 73 71 6c 20 7b 50 52 41 47     execsql {PRAG
2090: 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65  MA integrity_che
20a0: 63 6b 7d 0a 20 20 20 20 7d 20 7b 7b 72 6f 77 20  ck}.    } {{row 
20b0: 31 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69  1 missing from i
20c0: 6e 64 65 78 20 69 32 7d 20 7b 72 6f 77 20 32 20  ndex i2} {row 2 
20d0: 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64  missing from ind
20e0: 65 78 20 69 32 7d 20 7b 77 72 6f 6e 67 20 23 20  ex i2} {wrong # 
20f0: 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 69 6e  of entries in in
2100: 64 65 78 20 69 32 7d 7d 0a 20 20 20 20 64 6f 5f  dex i2}}.    do_
2110: 74 65 73 74 20 70 72 61 67 6d 61 2d 33 2e 33 20  test pragma-3.3 
2120: 7b 0a 20 20 20 20 20 20 65 78 65 63 73 71 6c 20  {.      execsql 
2130: 7b 50 52 41 47 4d 41 20 69 6e 74 65 67 72 69 74  {PRAGMA integrit
2140: 79 5f 63 68 65 63 6b 3d 31 7d 0a 20 20 20 20 7d  y_check=1}.    }
2150: 20 7b 7b 72 6f 77 20 31 20 6d 69 73 73 69 6e 67   {{row 1 missing
2160: 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 7d   from index i2}}
2170: 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 70 72 61  .    do_test pra
2180: 67 6d 61 2d 33 2e 34 20 7b 0a 20 20 20 20 20 20  gma-3.4 {.      
2190: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
21a0: 20 20 41 54 54 41 43 48 20 44 41 54 41 42 41 53    ATTACH DATABAS
21b0: 45 20 27 74 65 73 74 2e 64 62 27 20 41 53 20 74  E 'test.db' AS t
21c0: 32 3b 0a 20 20 20 20 20 20 20 20 50 52 41 47 4d  2;.        PRAGM
21d0: 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63  A integrity_chec
21e0: 6b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 20  k.      }.    } 
21f0: 7b 7b 72 6f 77 20 31 20 6d 69 73 73 69 6e 67 20  {{row 1 missing 
2200: 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b  from index i2} {
2210: 72 6f 77 20 32 20 6d 69 73 73 69 6e 67 20 66 72  row 2 missing fr
2220: 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b 77 72  om index i2} {wr
2230: 6f 6e 67 20 23 20 6f 66 20 65 6e 74 72 69 65 73  ong # of entries
2240: 20 69 6e 20 69 6e 64 65 78 20 69 32 7d 20 7b 72   in index i2} {r
2250: 6f 77 20 31 20 6d 69 73 73 69 6e 67 20 66 72 6f  ow 1 missing fro
2260: 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b 72 6f 77  m index i2} {row
2270: 20 32 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20   2 missing from 
2280: 69 6e 64 65 78 20 69 32 7d 20 7b 77 72 6f 6e 67  index i2} {wrong
2290: 20 23 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e   # of entries in
22a0: 20 69 6e 64 65 78 20 69 32 7d 7d 0a 20 20 20 20   index i2}}.    
22b0: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 33  do_test pragma-3
22c0: 2e 35 20 7b 0a 20 20 20 20 20 20 65 78 65 63 73  .5 {.      execs
22d0: 71 6c 20 7b 0a 20 20 20 20 20 20 20 20 50 52 41  ql {.        PRA
22e0: 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68  GMA integrity_ch
22f0: 65 63 6b 3d 34 0a 20 20 20 20 20 20 7d 0a 20 20  eck=4.      }.  
2300: 20 20 7d 20 7b 7b 72 6f 77 20 31 20 6d 69 73 73    } {{row 1 miss
2310: 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69  ing from index i
2320: 32 7d 20 7b 72 6f 77 20 32 20 6d 69 73 73 69 6e  2} {row 2 missin
2330: 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d  g from index i2}
2340: 20 7b 77 72 6f 6e 67 20 23 20 6f 66 20 65 6e 74   {wrong # of ent
2350: 72 69 65 73 20 69 6e 20 69 6e 64 65 78 20 69 32  ries in index i2
2360: 7d 20 7b 72 6f 77 20 31 20 6d 69 73 73 69 6e 67  } {row 1 missing
2370: 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 7d   from index i2}}
2380: 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 70 72 61  .    do_test pra
2390: 67 6d 61 2d 33 2e 36 20 7b 0a 20 20 20 20 20 20  gma-3.6 {.      
23a0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
23b0: 20 20 50 52 41 47 4d 41 20 69 6e 74 65 67 72 69    PRAGMA integri
23c0: 74 79 5f 63 68 65 63 6b 3d 78 79 7a 0a 20 20 20  ty_check=xyz.   
23d0: 20 20 20 7d 0a 20 20 20 20 7d 20 7b 7b 72 6f 77     }.    } {{row
23e0: 20 31 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20   1 missing from 
23f0: 69 6e 64 65 78 20 69 32 7d 20 7b 72 6f 77 20 32  index i2} {row 2
2400: 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e   missing from in
2410: 64 65 78 20 69 32 7d 20 7b 77 72 6f 6e 67 20 23  dex i2} {wrong #
2420: 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 69   of entries in i
2430: 6e 64 65 78 20 69 32 7d 20 7b 72 6f 77 20 31 20  ndex i2} {row 1 
2440: 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64  missing from ind
2450: 65 78 20 69 32 7d 20 7b 72 6f 77 20 32 20 6d 69  ex i2} {row 2 mi
2460: 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78  ssing from index
2470: 20 69 32 7d 20 7b 77 72 6f 6e 67 20 23 20 6f 66   i2} {wrong # of
2480: 20 65 6e 74 72 69 65 73 20 69 6e 20 69 6e 64 65   entries in inde
2490: 78 20 69 32 7d 7d 0a 20 20 20 20 64 6f 5f 74 65  x i2}}.    do_te
24a0: 73 74 20 70 72 61 67 6d 61 2d 33 2e 37 20 7b 0a  st pragma-3.7 {.
24b0: 20 20 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a        execsql {.
24c0: 20 20 20 20 20 20 20 20 50 52 41 47 4d 41 20 69          PRAGMA i
24d0: 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 3d 30  ntegrity_check=0
24e0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 20 7b  .      }.    } {
24f0: 7b 72 6f 77 20 31 20 6d 69 73 73 69 6e 67 20 66  {row 1 missing f
2500: 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b 72  rom index i2} {r
2510: 6f 77 20 32 20 6d 69 73 73 69 6e 67 20 66 72 6f  ow 2 missing fro
2520: 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b 77 72 6f  m index i2} {wro
2530: 6e 67 20 23 20 6f 66 20 65 6e 74 72 69 65 73 20  ng # of entries 
2540: 69 6e 20 69 6e 64 65 78 20 69 32 7d 20 7b 72 6f  in index i2} {ro
2550: 77 20 31 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d  w 1 missing from
2560: 20 69 6e 64 65 78 20 69 32 7d 20 7b 72 6f 77 20   index i2} {row 
2570: 32 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69  2 missing from i
2580: 6e 64 65 78 20 69 32 7d 20 7b 77 72 6f 6e 67 20  ndex i2} {wrong 
2590: 23 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20  # of entries in 
25a0: 69 6e 64 65 78 20 69 32 7d 7d 0a 20 20 0a 20 20  index i2}}.  .  
25b0: 20 20 23 20 41 64 64 20 61 64 64 69 74 69 6f 6e    # Add addition
25c0: 61 6c 20 63 6f 72 72 75 70 74 69 6f 6e 20 62 79  al corruption by
25d0: 20 61 70 70 65 6e 64 69 6e 67 20 75 6e 75 73 65   appending unuse
25e0: 64 20 70 61 67 65 73 20 74 6f 20 74 68 65 20 65  d pages to the e
25f0: 6e 64 20 6f 66 0a 20 20 20 20 23 20 74 68 65 20  nd of.    # the 
2600: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 74 65  database file te
2610: 73 74 65 72 72 2e 64 62 0a 20 20 20 20 23 0a 20  sterr.db.    #. 
2620: 20 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d     do_test pragm
2630: 61 2d 33 2e 38 20 7b 0a 20 20 20 20 20 20 65 78  a-3.8 {.      ex
2640: 65 63 73 71 6c 20 7b 44 45 54 41 43 48 20 74 32  ecsql {DETACH t2
2650: 7d 0a 20 20 20 20 20 20 66 6f 72 63 65 64 65 6c  }.      forcedel
2660: 65 74 65 20 74 65 73 74 65 72 72 2e 64 62 20 74  ete testerr.db t
2670: 65 73 74 65 72 72 2e 64 62 2d 6a 6f 75 72 6e 61  esterr.db-journa
2680: 6c 0a 20 20 20 20 20 20 73 65 74 20 6f 75 74 20  l.      set out 
2690: 5b 6f 70 65 6e 20 74 65 73 74 65 72 72 2e 64 62  [open testerr.db
26a0: 20 77 5d 0a 20 20 20 20 20 20 66 63 6f 6e 66 69   w].      fconfi
26b0: 67 75 72 65 20 24 6f 75 74 20 2d 74 72 61 6e 73  gure $out -trans
26c0: 6c 61 74 69 6f 6e 20 62 69 6e 61 72 79 0a 20 20  lation binary.  
26d0: 20 20 20 20 73 65 74 20 69 6e 20 5b 6f 70 65 6e      set in [open
26e0: 20 74 65 73 74 2e 64 62 20 72 5d 0a 20 20 20 20   test.db r].    
26f0: 20 20 66 63 6f 6e 66 69 67 75 72 65 20 24 69 6e    fconfigure $in
2700: 20 2d 74 72 61 6e 73 6c 61 74 69 6f 6e 20 62 69   -translation bi
2710: 6e 61 72 79 0a 20 20 20 20 20 20 70 75 74 73 20  nary.      puts 
2720: 2d 6e 6f 6e 65 77 6c 69 6e 65 20 24 6f 75 74 20  -nonewline $out 
2730: 5b 72 65 61 64 20 24 69 6e 5d 0a 20 20 20 20 20  [read $in].     
2740: 20 73 65 65 6b 20 24 69 6e 20 30 0a 20 20 20 20   seek $in 0.    
2750: 20 20 70 75 74 73 20 2d 6e 6f 6e 65 77 6c 69 6e    puts -nonewlin
2760: 65 20 24 6f 75 74 20 5b 72 65 61 64 20 24 69 6e  e $out [read $in
2770: 5d 0a 20 20 20 20 20 20 63 6c 6f 73 65 20 24 69  ].      close $i
2780: 6e 0a 20 20 20 20 20 20 63 6c 6f 73 65 20 24 6f  n.      close $o
2790: 75 74 0a 20 20 20 20 20 20 68 65 78 69 6f 5f 77  ut.      hexio_w
27a0: 72 69 74 65 20 74 65 73 74 65 72 72 2e 64 62 20  rite testerr.db 
27b0: 32 38 20 30 30 30 30 30 30 30 30 0a 20 20 20 20  28 00000000.    
27c0: 20 20 65 78 65 63 73 71 6c 20 7b 52 45 49 4e 44    execsql {REIND
27d0: 45 58 20 74 32 7d 0a 20 20 20 20 20 20 65 78 65  EX t2}.      exe
27e0: 63 73 71 6c 20 7b 50 52 41 47 4d 41 20 69 6e 74  csql {PRAGMA int
27f0: 65 67 72 69 74 79 5f 63 68 65 63 6b 7d 0a 20 20  egrity_check}.  
2800: 20 20 7d 20 7b 6f 6b 7d 0a 20 20 20 20 64 6f 5f    } {ok}.    do_
2810: 74 65 73 74 20 70 72 61 67 6d 61 2d 33 2e 38 2e  test pragma-3.8.
2820: 31 20 7b 0a 20 20 20 20 20 20 65 78 65 63 73 71  1 {.      execsq
2830: 6c 20 7b 50 52 41 47 4d 41 20 71 75 69 63 6b 5f  l {PRAGMA quick_
2840: 63 68 65 63 6b 7d 0a 20 20 20 20 7d 20 7b 6f 6b  check}.    } {ok
2850: 7d 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 70 72  }.    do_test pr
2860: 61 67 6d 61 2d 33 2e 38 2e 32 20 7b 0a 20 20 20  agma-3.8.2 {.   
2870: 20 20 20 65 78 65 63 73 71 6c 20 7b 50 52 41 47     execsql {PRAG
2880: 4d 41 20 51 55 49 43 4b 5f 43 48 45 43 4b 7d 0a  MA QUICK_CHECK}.
2890: 20 20 20 20 7d 20 7b 6f 6b 7d 0a 20 20 20 20 64      } {ok}.    d
28a0: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 33 2e  o_test pragma-3.
28b0: 39 20 7b 0a 20 20 20 20 20 20 65 78 65 63 73 71  9 {.      execsq
28c0: 6c 20 7b 0a 20 20 20 20 20 20 20 20 41 54 54 41  l {.        ATTA
28d0: 43 48 20 27 74 65 73 74 65 72 72 2e 64 62 27 20  CH 'testerr.db' 
28e0: 41 53 20 74 32 3b 0a 20 20 20 20 20 20 20 20 50  AS t2;.        P
28f0: 52 41 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f  RAGMA integrity_
2900: 63 68 65 63 6b 0a 20 20 20 20 20 20 7d 0a 20 20  check.      }.  
2910: 20 20 7d 20 7b 7b 2a 2a 2a 20 69 6e 20 64 61 74    } {{*** in dat
2920: 61 62 61 73 65 20 74 32 20 2a 2a 2a 0a 50 61 67  abase t2 ***.Pag
2930: 65 20 34 20 69 73 20 6e 65 76 65 72 20 75 73 65  e 4 is never use
2940: 64 0a 50 61 67 65 20 35 20 69 73 20 6e 65 76 65  d.Page 5 is neve
2950: 72 20 75 73 65 64 0a 50 61 67 65 20 36 20 69 73  r used.Page 6 is
2960: 20 6e 65 76 65 72 20 75 73 65 64 7d 20 7b 72 6f   never used} {ro
2970: 77 20 31 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d  w 1 missing from
2980: 20 69 6e 64 65 78 20 69 32 7d 20 7b 72 6f 77 20   index i2} {row 
2990: 32 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69  2 missing from i
29a0: 6e 64 65 78 20 69 32 7d 20 7b 77 72 6f 6e 67 20  ndex i2} {wrong 
29b0: 23 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20  # of entries in 
29c0: 69 6e 64 65 78 20 69 32 7d 7d 0a 20 20 20 20 64  index i2}}.    d
29d0: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 33 2e  o_test pragma-3.
29e0: 31 30 20 7b 0a 20 20 20 20 20 20 65 78 65 63 73  10 {.      execs
29f0: 71 6c 20 7b 0a 20 20 20 20 20 20 20 20 50 52 41  ql {.        PRA
2a00: 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68  GMA integrity_ch
2a10: 65 63 6b 3d 31 0a 20 20 20 20 20 20 7d 0a 20 20  eck=1.      }.  
2a20: 20 20 7d 20 7b 7b 2a 2a 2a 20 69 6e 20 64 61 74    } {{*** in dat
2a30: 61 62 61 73 65 20 74 32 20 2a 2a 2a 0a 50 61 67  abase t2 ***.Pag
2a40: 65 20 34 20 69 73 20 6e 65 76 65 72 20 75 73 65  e 4 is never use
2a50: 64 7d 7d 0a 20 20 20 20 64 6f 5f 74 65 73 74 20  d}}.    do_test 
2a60: 70 72 61 67 6d 61 2d 33 2e 31 31 20 7b 0a 20 20  pragma-3.11 {.  
2a70: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20      execsql {.  
2a80: 20 20 20 20 20 20 50 52 41 47 4d 41 20 69 6e 74        PRAGMA int
2a90: 65 67 72 69 74 79 5f 63 68 65 63 6b 3d 35 0a 20  egrity_check=5. 
2aa0: 20 20 20 20 20 7d 0a 20 20 20 20 7d 20 7b 7b 2a       }.    } {{*
2ab0: 2a 2a 20 69 6e 20 64 61 74 61 62 61 73 65 20 74  ** in database t
2ac0: 32 20 2a 2a 2a 0a 50 61 67 65 20 34 20 69 73 20  2 ***.Page 4 is 
2ad0: 6e 65 76 65 72 20 75 73 65 64 0a 50 61 67 65 20  never used.Page 
2ae0: 35 20 69 73 20 6e 65 76 65 72 20 75 73 65 64 0a  5 is never used.
2af0: 50 61 67 65 20 36 20 69 73 20 6e 65 76 65 72 20  Page 6 is never 
2b00: 75 73 65 64 7d 20 7b 72 6f 77 20 31 20 6d 69 73  used} {row 1 mis
2b10: 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20  sing from index 
2b20: 69 32 7d 20 7b 72 6f 77 20 32 20 6d 69 73 73 69  i2} {row 2 missi
2b30: 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32  ng from index i2
2b40: 7d 7d 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 70  }}.    do_test p
2b50: 72 61 67 6d 61 2d 33 2e 31 32 20 7b 0a 20 20 20  ragma-3.12 {.   
2b60: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
2b70: 20 20 20 20 20 50 52 41 47 4d 41 20 69 6e 74 65       PRAGMA inte
2b80: 67 72 69 74 79 5f 63 68 65 63 6b 3d 34 0a 20 20  grity_check=4.  
2b90: 20 20 20 20 7d 0a 20 20 20 20 7d 20 7b 7b 2a 2a      }.    } {{**
2ba0: 2a 20 69 6e 20 64 61 74 61 62 61 73 65 20 74 32  * in database t2
2bb0: 20 2a 2a 2a 0a 50 61 67 65 20 34 20 69 73 20 6e   ***.Page 4 is n
2bc0: 65 76 65 72 20 75 73 65 64 0a 50 61 67 65 20 35  ever used.Page 5
2bd0: 20 69 73 20 6e 65 76 65 72 20 75 73 65 64 0a 50   is never used.P
2be0: 61 67 65 20 36 20 69 73 20 6e 65 76 65 72 20 75  age 6 is never u
2bf0: 73 65 64 7d 20 7b 72 6f 77 20 31 20 6d 69 73 73  sed} {row 1 miss
2c00: 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69  ing from index i
2c10: 32 7d 7d 0a 20 20 20 20 64 6f 5f 74 65 73 74 20  2}}.    do_test 
2c20: 70 72 61 67 6d 61 2d 33 2e 31 33 20 7b 0a 20 20  pragma-3.13 {.  
2c30: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20      execsql {.  
2c40: 20 20 20 20 20 20 50 52 41 47 4d 41 20 69 6e 74        PRAGMA int
2c50: 65 67 72 69 74 79 5f 63 68 65 63 6b 3d 33 0a 20  egrity_check=3. 
2c60: 20 20 20 20 20 7d 0a 20 20 20 20 7d 20 7b 7b 2a       }.    } {{*
2c70: 2a 2a 20 69 6e 20 64 61 74 61 62 61 73 65 20 74  ** in database t
2c80: 32 20 2a 2a 2a 0a 50 61 67 65 20 34 20 69 73 20  2 ***.Page 4 is 
2c90: 6e 65 76 65 72 20 75 73 65 64 0a 50 61 67 65 20  never used.Page 
2ca0: 35 20 69 73 20 6e 65 76 65 72 20 75 73 65 64 0a  5 is never used.
2cb0: 50 61 67 65 20 36 20 69 73 20 6e 65 76 65 72 20  Page 6 is never 
2cc0: 75 73 65 64 7d 7d 0a 20 20 20 20 64 6f 5f 74 65  used}}.    do_te
2cd0: 73 74 20 70 72 61 67 6d 61 2d 33 2e 31 34 20 7b  st pragma-3.14 {
2ce0: 0a 20 20 20 20 20 20 65 78 65 63 73 71 6c 20 7b  .      execsql {
2cf0: 0a 20 20 20 20 20 20 20 20 50 52 41 47 4d 41 20  .        PRAGMA 
2d00: 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 28  integrity_check(
2d10: 32 29 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  2).      }.    }
2d20: 20 7b 7b 2a 2a 2a 20 69 6e 20 64 61 74 61 62 61   {{*** in databa
2d30: 73 65 20 74 32 20 2a 2a 2a 0a 50 61 67 65 20 34  se t2 ***.Page 4
2d40: 20 69 73 20 6e 65 76 65 72 20 75 73 65 64 0a 50   is never used.P
2d50: 61 67 65 20 35 20 69 73 20 6e 65 76 65 72 20 75  age 5 is never u
2d60: 73 65 64 7d 7d 0a 20 20 20 20 64 6f 5f 74 65 73  sed}}.    do_tes
2d70: 74 20 70 72 61 67 6d 61 2d 33 2e 31 35 20 7b 0a  t pragma-3.15 {.
2d80: 20 20 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a        execsql {.
2d90: 20 20 20 20 20 20 20 20 41 54 54 41 43 48 20 27          ATTACH '
2da0: 74 65 73 74 65 72 72 2e 64 62 27 20 41 53 20 74  testerr.db' AS t
2db0: 33 3b 0a 20 20 20 20 20 20 20 20 50 52 41 47 4d  3;.        PRAGM
2dc0: 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63  A integrity_chec
2dd0: 6b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 20  k.      }.    } 
2de0: 7b 7b 2a 2a 2a 20 69 6e 20 64 61 74 61 62 61 73  {{*** in databas
2df0: 65 20 74 32 20 2a 2a 2a 0a 50 61 67 65 20 34 20  e t2 ***.Page 4 
2e00: 69 73 20 6e 65 76 65 72 20 75 73 65 64 0a 50 61  is never used.Pa
2e10: 67 65 20 35 20 69 73 20 6e 65 76 65 72 20 75 73  ge 5 is never us
2e20: 65 64 0a 50 61 67 65 20 36 20 69 73 20 6e 65 76  ed.Page 6 is nev
2e30: 65 72 20 75 73 65 64 7d 20 7b 72 6f 77 20 31 20  er used} {row 1 
2e40: 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64  missing from ind
2e50: 65 78 20 69 32 7d 20 7b 72 6f 77 20 32 20 6d 69  ex i2} {row 2 mi
2e60: 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78  ssing from index
2e70: 20 69 32 7d 20 7b 77 72 6f 6e 67 20 23 20 6f 66   i2} {wrong # of
2e80: 20 65 6e 74 72 69 65 73 20 69 6e 20 69 6e 64 65   entries in inde
2e90: 78 20 69 32 7d 20 7b 2a 2a 2a 20 69 6e 20 64 61  x i2} {*** in da
2ea0: 74 61 62 61 73 65 20 74 33 20 2a 2a 2a 0a 50 61  tabase t3 ***.Pa
2eb0: 67 65 20 34 20 69 73 20 6e 65 76 65 72 20 75 73  ge 4 is never us
2ec0: 65 64 0a 50 61 67 65 20 35 20 69 73 20 6e 65 76  ed.Page 5 is nev
2ed0: 65 72 20 75 73 65 64 0a 50 61 67 65 20 36 20 69  er used.Page 6 i
2ee0: 73 20 6e 65 76 65 72 20 75 73 65 64 7d 20 7b 72  s never used} {r
2ef0: 6f 77 20 31 20 6d 69 73 73 69 6e 67 20 66 72 6f  ow 1 missing fro
2f00: 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b 72 6f 77  m index i2} {row
2f10: 20 32 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20   2 missing from 
2f20: 69 6e 64 65 78 20 69 32 7d 20 7b 77 72 6f 6e 67  index i2} {wrong
2f30: 20 23 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e   # of entries in
2f40: 20 69 6e 64 65 78 20 69 32 7d 7d 0a 20 20 20 20   index i2}}.    
2f50: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 33  do_test pragma-3
2f60: 2e 31 36 20 7b 0a 20 20 20 20 20 20 65 78 65 63  .16 {.      exec
2f70: 73 71 6c 20 7b 0a 20 20 20 20 20 20 20 20 50 52  sql {.        PR
2f80: 41 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63  AGMA integrity_c
2f90: 68 65 63 6b 28 31 30 29 0a 20 20 20 20 20 20 7d  heck(10).      }
2fa0: 0a 20 20 20 20 7d 20 7b 7b 2a 2a 2a 20 69 6e 20  .    } {{*** in 
2fb0: 64 61 74 61 62 61 73 65 20 74 32 20 2a 2a 2a 0a  database t2 ***.
2fc0: 50 61 67 65 20 34 20 69 73 20 6e 65 76 65 72 20  Page 4 is never 
2fd0: 75 73 65 64 0a 50 61 67 65 20 35 20 69 73 20 6e  used.Page 5 is n
2fe0: 65 76 65 72 20 75 73 65 64 0a 50 61 67 65 20 36  ever used.Page 6
2ff0: 20 69 73 20 6e 65 76 65 72 20 75 73 65 64 7d 20   is never used} 
3000: 7b 72 6f 77 20 31 20 6d 69 73 73 69 6e 67 20 66  {row 1 missing f
3010: 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b 72  rom index i2} {r
3020: 6f 77 20 32 20 6d 69 73 73 69 6e 67 20 66 72 6f  ow 2 missing fro
3030: 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b 77 72 6f  m index i2} {wro
3040: 6e 67 20 23 20 6f 66 20 65 6e 74 72 69 65 73 20  ng # of entries 
3050: 69 6e 20 69 6e 64 65 78 20 69 32 7d 20 7b 2a 2a  in index i2} {**
3060: 2a 20 69 6e 20 64 61 74 61 62 61 73 65 20 74 33  * in database t3
3070: 20 2a 2a 2a 0a 50 61 67 65 20 34 20 69 73 20 6e   ***.Page 4 is n
3080: 65 76 65 72 20 75 73 65 64 0a 50 61 67 65 20 35  ever used.Page 5
3090: 20 69 73 20 6e 65 76 65 72 20 75 73 65 64 0a 50   is never used.P
30a0: 61 67 65 20 36 20 69 73 20 6e 65 76 65 72 20 75  age 6 is never u
30b0: 73 65 64 7d 20 7b 72 6f 77 20 31 20 6d 69 73 73  sed} {row 1 miss
30c0: 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69  ing from index i
30d0: 32 7d 7d 0a 20 20 20 20 64 6f 5f 74 65 73 74 20  2}}.    do_test 
30e0: 70 72 61 67 6d 61 2d 33 2e 31 37 20 7b 0a 20 20  pragma-3.17 {.  
30f0: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20      execsql {.  
3100: 20 20 20 20 20 20 50 52 41 47 4d 41 20 69 6e 74        PRAGMA int
3110: 65 67 72 69 74 79 5f 63 68 65 63 6b 3d 38 0a 20  egrity_check=8. 
3120: 20 20 20 20 20 7d 0a 20 20 20 20 7d 20 7b 7b 2a       }.    } {{*
3130: 2a 2a 20 69 6e 20 64 61 74 61 62 61 73 65 20 74  ** in database t
3140: 32 20 2a 2a 2a 0a 50 61 67 65 20 34 20 69 73 20  2 ***.Page 4 is 
3150: 6e 65 76 65 72 20 75 73 65 64 0a 50 61 67 65 20  never used.Page 
3160: 35 20 69 73 20 6e 65 76 65 72 20 75 73 65 64 0a  5 is never used.
3170: 50 61 67 65 20 36 20 69 73 20 6e 65 76 65 72 20  Page 6 is never 
3180: 75 73 65 64 7d 20 7b 72 6f 77 20 31 20 6d 69 73  used} {row 1 mis
3190: 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20  sing from index 
31a0: 69 32 7d 20 7b 72 6f 77 20 32 20 6d 69 73 73 69  i2} {row 2 missi
31b0: 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32  ng from index i2
31c0: 7d 20 7b 77 72 6f 6e 67 20 23 20 6f 66 20 65 6e  } {wrong # of en
31d0: 74 72 69 65 73 20 69 6e 20 69 6e 64 65 78 20 69  tries in index i
31e0: 32 7d 20 7b 2a 2a 2a 20 69 6e 20 64 61 74 61 62  2} {*** in datab
31f0: 61 73 65 20 74 33 20 2a 2a 2a 0a 50 61 67 65 20  ase t3 ***.Page 
3200: 34 20 69 73 20 6e 65 76 65 72 20 75 73 65 64 0a  4 is never used.
3210: 50 61 67 65 20 35 20 69 73 20 6e 65 76 65 72 20  Page 5 is never 
3220: 75 73 65 64 7d 7d 0a 20 20 20 20 64 6f 5f 74 65  used}}.    do_te
3230: 73 74 20 70 72 61 67 6d 61 2d 33 2e 31 38 20 7b  st pragma-3.18 {
3240: 0a 20 20 20 20 20 20 65 78 65 63 73 71 6c 20 7b  .      execsql {
3250: 0a 20 20 20 20 20 20 20 20 50 52 41 47 4d 41 20  .        PRAGMA 
3260: 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 3d  integrity_check=
3270: 34 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 20  4.      }.    } 
3280: 7b 7b 2a 2a 2a 20 69 6e 20 64 61 74 61 62 61 73  {{*** in databas
3290: 65 20 74 32 20 2a 2a 2a 0a 50 61 67 65 20 34 20  e t2 ***.Page 4 
32a0: 69 73 20 6e 65 76 65 72 20 75 73 65 64 0a 50 61  is never used.Pa
32b0: 67 65 20 35 20 69 73 20 6e 65 76 65 72 20 75 73  ge 5 is never us
32c0: 65 64 0a 50 61 67 65 20 36 20 69 73 20 6e 65 76  ed.Page 6 is nev
32d0: 65 72 20 75 73 65 64 7d 20 7b 72 6f 77 20 31 20  er used} {row 1 
32e0: 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64  missing from ind
32f0: 65 78 20 69 32 7d 7d 0a 20 20 7d 0a 20 20 64 6f  ex i2}}.  }.  do
3300: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 33 2e 31  _test pragma-3.1
3310: 39 20 7b 0a 20 20 20 20 63 61 74 63 68 20 7b 64  9 {.    catch {d
3320: 62 20 63 6c 6f 73 65 7d 0a 20 20 20 20 66 6f 72  b close}.    for
3330: 63 65 64 65 6c 65 74 65 20 74 65 73 74 2e 64 62  cedelete test.db
3340: 20 74 65 73 74 2e 64 62 2d 6a 6f 75 72 6e 61 6c   test.db-journal
3350: 0a 20 20 20 20 73 71 6c 69 74 65 33 20 64 62 20  .    sqlite3 db 
3360: 74 65 73 74 2e 64 62 0a 20 20 20 20 64 62 20 65  test.db.    db e
3370: 76 61 6c 20 7b 50 52 41 47 4d 41 20 69 6e 74 65  val {PRAGMA inte
3380: 67 72 69 74 79 5f 63 68 65 63 6b 7d 0a 20 20 7d  grity_check}.  }
3390: 20 7b 6f 6b 7d 0a 7d 0a 0a 23 20 56 65 72 69 66   {ok}.}..# Verif
33a0: 79 20 74 68 61 74 20 50 52 41 47 4d 41 20 69 6e  y that PRAGMA in
33b0: 74 65 67 72 69 74 79 5f 63 68 65 63 6b 20 63 61  tegrity_check ca
33c0: 74 63 68 65 73 20 55 4e 49 51 55 45 20 61 6e 64  tches UNIQUE and
33d0: 20 4e 4f 54 20 4e 55 4c 4c 0a 23 20 63 6f 6e 73   NOT NULL.# cons
33e0: 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
33f0: 73 2e 0a 23 0a 64 6f 5f 65 78 65 63 73 71 6c 5f  s..#.do_execsql_
3400: 74 65 73 74 20 70 72 61 67 6d 61 2d 33 2e 32 30  test pragma-3.20
3410: 20 7b 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c   {.  CREATE TABL
3420: 45 20 74 31 28 61 2c 62 29 3b 0a 20 20 43 52 45  E t1(a,b);.  CRE
3430: 41 54 45 20 49 4e 44 45 58 20 74 31 61 20 4f 4e  ATE INDEX t1a ON
3440: 20 74 31 28 61 29 3b 0a 20 20 49 4e 53 45 52 54   t1(a);.  INSERT
3450: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
3460: 31 2c 31 29 2c 28 32 2c 32 29 2c 28 33 2c 33 29  1,1),(2,2),(3,3)
3470: 2c 28 32 2c 34 29 2c 28 4e 55 4c 4c 2c 35 29 2c  ,(2,4),(NULL,5),
3480: 28 4e 55 4c 4c 2c 36 29 3b 0a 20 20 50 52 41 47  (NULL,6);.  PRAG
3490: 4d 41 20 77 72 69 74 61 62 6c 65 5f 73 63 68 65  MA writable_sche
34a0: 6d 61 3d 4f 4e 3b 0a 20 20 55 50 44 41 54 45 20  ma=ON;.  UPDATE 
34b0: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 53 45  sqlite_master SE
34c0: 54 20 73 71 6c 3d 27 43 52 45 41 54 45 20 55 4e  T sql='CREATE UN
34d0: 49 51 55 45 20 49 4e 44 45 58 20 74 31 61 20 4f  IQUE INDEX t1a O
34e0: 4e 20 74 31 28 61 29 27 0a 20 20 20 57 48 45 52  N t1(a)'.   WHER
34f0: 45 20 6e 61 6d 65 3d 27 74 31 61 27 3b 0a 20 20  E name='t1a';.  
3500: 55 50 44 41 54 45 20 73 71 6c 69 74 65 5f 6d 61  UPDATE sqlite_ma
3510: 73 74 65 72 20 53 45 54 20 73 71 6c 3d 27 43 52  ster SET sql='CR
3520: 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 61 20  EATE TABLE t1(a 
3530: 4e 4f 54 20 4e 55 4c 4c 2c 62 29 27 0a 20 20 20  NOT NULL,b)'.   
3540: 57 48 45 52 45 20 6e 61 6d 65 3d 27 74 31 27 3b  WHERE name='t1';
3550: 0a 20 20 50 52 41 47 4d 41 20 77 72 69 74 61 62  .  PRAGMA writab
3560: 6c 65 5f 73 63 68 65 6d 61 3d 4f 46 46 3b 0a 20  le_schema=OFF;. 
3570: 20 41 4c 54 45 52 20 54 41 42 4c 45 20 74 31 20   ALTER TABLE t1 
3580: 52 45 4e 41 4d 45 20 54 4f 20 74 31 78 3b 0a 20  RENAME TO t1x;. 
3590: 20 50 52 41 47 4d 41 20 69 6e 74 65 67 72 69 74   PRAGMA integrit
35a0: 79 5f 63 68 65 63 6b 3b 0a 7d 20 7b 7b 6e 6f 6e  y_check;.} {{non
35b0: 2d 75 6e 69 71 75 65 20 65 6e 74 72 79 20 69 6e  -unique entry in
35c0: 20 69 6e 64 65 78 20 74 31 61 7d 20 7b 4e 55 4c   index t1a} {NUL
35d0: 4c 20 76 61 6c 75 65 20 69 6e 20 74 31 78 2e 61  L value in t1x.a
35e0: 7d 20 7b 6e 6f 6e 2d 75 6e 69 71 75 65 20 65 6e  } {non-unique en
35f0: 74 72 79 20 69 6e 20 69 6e 64 65 78 20 74 31 61  try in index t1a
3600: 7d 20 7b 4e 55 4c 4c 20 76 61 6c 75 65 20 69 6e  } {NULL value in
3610: 20 74 31 78 2e 61 7d 7d 0a 64 6f 5f 65 78 65 63   t1x.a}}.do_exec
3620: 73 71 6c 5f 74 65 73 74 20 70 72 61 67 6d 61 2d  sql_test pragma-
3630: 33 2e 32 31 20 7b 0a 20 20 50 52 41 47 4d 41 20  3.21 {.  PRAGMA 
3640: 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 28  integrity_check(
3650: 33 29 3b 0a 7d 20 7b 7b 6e 6f 6e 2d 75 6e 69 71  3);.} {{non-uniq
3660: 75 65 20 65 6e 74 72 79 20 69 6e 20 69 6e 64 65  ue entry in inde
3670: 78 20 74 31 61 7d 20 7b 4e 55 4c 4c 20 76 61 6c  x t1a} {NULL val
3680: 75 65 20 69 6e 20 74 31 78 2e 61 7d 20 7b 6e 6f  ue in t1x.a} {no
3690: 6e 2d 75 6e 69 71 75 65 20 65 6e 74 72 79 20 69  n-unique entry i
36a0: 6e 20 69 6e 64 65 78 20 74 31 61 7d 7d 0a 64 6f  n index t1a}}.do
36b0: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 70 72  _execsql_test pr
36c0: 61 67 6d 61 2d 33 2e 32 32 20 7b 0a 20 20 50 52  agma-3.22 {.  PR
36d0: 41 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63  AGMA integrity_c
36e0: 68 65 63 6b 28 32 29 3b 0a 7d 20 7b 7b 6e 6f 6e  heck(2);.} {{non
36f0: 2d 75 6e 69 71 75 65 20 65 6e 74 72 79 20 69 6e  -unique entry in
3700: 20 69 6e 64 65 78 20 74 31 61 7d 20 7b 4e 55 4c   index t1a} {NUL
3710: 4c 20 76 61 6c 75 65 20 69 6e 20 74 31 78 2e 61  L value in t1x.a
3720: 7d 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  }}.do_execsql_te
3730: 73 74 20 70 72 61 67 6d 61 2d 33 2e 32 33 20 7b  st pragma-3.23 {
3740: 0a 20 20 50 52 41 47 4d 41 20 69 6e 74 65 67 72  .  PRAGMA integr
3750: 69 74 79 5f 63 68 65 63 6b 28 31 29 3b 0a 7d 20  ity_check(1);.} 
3760: 7b 7b 6e 6f 6e 2d 75 6e 69 71 75 65 20 65 6e 74  {{non-unique ent
3770: 72 79 20 69 6e 20 69 6e 64 65 78 20 74 31 61 7d  ry in index t1a}
3780: 7d 0a 0a 23 20 50 52 41 47 4d 41 20 69 6e 74 65  }..# PRAGMA inte
3790: 67 72 69 74 79 20 63 68 65 63 6b 20 28 6f 72 20  grity check (or 
37a0: 6d 6f 72 65 20 73 70 65 63 69 66 69 63 61 6c 6c  more specificall
37b0: 79 20 74 68 65 20 73 71 6c 69 74 65 33 42 74 72  y the sqlite3Btr
37c0: 65 65 43 6f 75 6e 74 28 29 0a 23 20 69 6e 74 65  eeCount().# inte
37d0: 72 66 61 63 65 29 20 75 73 65 64 20 74 6f 20 6c  rface) used to l
37e0: 65 61 76 65 20 69 6e 64 65 78 20 63 75 72 73 6f  eave index curso
37f0: 72 73 20 69 6e 20 61 6e 20 69 6e 63 6f 6e 73 69  rs in an inconsi
3800: 73 74 65 6e 74 20 73 74 61 74 65 0a 23 20 77 68  stent state.# wh
3810: 69 63 68 20 63 6f 75 6c 64 20 72 65 73 75 6c 74  ich could result
3820: 20 69 6e 20 61 6e 20 61 73 73 65 72 74 69 6f 6e   in an assertion
3830: 20 66 61 75 6c 74 20 69 6e 20 73 71 6c 69 74 65   fault in sqlite
3840: 33 42 74 72 65 65 4b 65 79 28 29 0a 23 20 63 61  3BtreeKey().# ca
3850: 6c 6c 65 64 20 66 72 6f 6d 20 73 61 76 65 43 75  lled from saveCu
3860: 72 73 6f 72 50 6f 73 69 74 69 6f 6e 28 29 20 69  rsorPosition() i
3870: 66 20 63 6f 6e 74 65 6e 74 20 69 73 20 72 65 6d  f content is rem
3880: 6f 76 65 64 20 66 72 6f 6d 20 74 68 65 0a 23 20  oved from the.# 
3890: 69 6e 64 65 78 20 77 68 69 6c 65 20 74 68 65 20  index while the 
38a0: 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 20  integrity_check 
38b0: 69 73 20 73 74 69 6c 6c 20 72 75 6e 6e 69 6e 67  is still running
38c0: 2e 20 20 54 68 69 73 20 74 65 73 74 20 76 65 72  .  This test ver
38d0: 69 66 69 65 73 0a 23 20 74 68 61 74 20 70 72 6f  ifies.# that pro
38e0: 62 6c 65 6d 20 68 61 73 20 62 65 65 6e 20 66 69  blem has been fi
38f0: 78 65 64 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 70  xed..#.do_test p
3900: 72 61 67 6d 61 2d 33 2e 33 30 20 7b 0a 20 20 64  ragma-3.30 {.  d
3910: 62 20 63 6c 6f 73 65 0a 20 20 64 65 6c 65 74 65  b close.  delete
3920: 5f 66 69 6c 65 20 74 65 73 74 2e 64 62 0a 20 20  _file test.db.  
3930: 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e  sqlite3 db test.
3940: 64 62 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a 20  db.  db eval {. 
3950: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
3960: 74 31 28 61 2c 62 2c 63 29 3b 0a 20 20 20 20 57  t1(a,b,c);.    W
3970: 49 54 48 20 52 45 43 55 52 53 49 56 45 0a 20 20  ITH RECURSIVE.  
3980: 20 20 20 20 63 28 69 29 20 41 53 20 28 56 41 4c      c(i) AS (VAL
3990: 55 45 53 28 31 29 20 55 4e 49 4f 4e 20 41 4c 4c  UES(1) UNION ALL
39a0: 20 53 45 4c 45 43 54 20 69 2b 31 20 46 52 4f 4d   SELECT i+1 FROM
39b0: 20 63 20 57 48 45 52 45 20 69 3c 31 30 30 29 0a   c WHERE i<100).
39c0: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
39d0: 74 31 28 61 2c 62 2c 63 29 20 53 45 4c 45 43 54  t1(a,b,c) SELECT
39e0: 20 69 2c 20 70 72 69 6e 74 66 28 27 78 79 7a 25   i, printf('xyz%
39f0: 30 38 78 27 2c 69 29 2c 20 32 30 30 30 2d 69 20  08x',i), 2000-i 
3a00: 46 52 4f 4d 20 63 3b 0a 20 20 20 20 43 52 45 41  FROM c;.    CREA
3a10: 54 45 20 49 4e 44 45 58 20 74 31 61 20 4f 4e 20  TE INDEX t1a ON 
3a20: 74 31 28 61 29 3b 0a 20 20 20 20 43 52 45 41 54  t1(a);.    CREAT
3a30: 45 20 49 4e 44 45 58 20 74 31 62 63 20 4f 4e 20  E INDEX t1bc ON 
3a40: 74 31 28 62 2c 63 29 3b 0a 20 20 7d 0a 20 20 64  t1(b,c);.  }.  d
3a50: 62 20 65 76 61 6c 20 7b 50 52 41 47 4d 41 20 69  b eval {PRAGMA i
3a60: 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 7d 20  ntegrity_check} 
3a70: 7b 0a 20 20 20 20 20 64 62 20 65 76 61 6c 20 7b  {.     db eval {
3a80: 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 31 7d 0a  DELETE FROM t1}.
3a90: 20 20 7d 0a 7d 20 7b 7d 0a 0a 23 20 54 65 73 74    }.} {}..# Test
3aa0: 20 6d 6f 64 69 66 79 69 6e 67 20 74 68 65 20 63   modifying the c
3ab0: 61 63 68 65 5f 73 69 7a 65 20 6f 66 20 61 6e 20  ache_size of an 
3ac0: 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
3ad0: 65 2e 0a 69 66 63 61 70 61 62 6c 65 20 70 61 67  e..ifcapable pag
3ae0: 65 72 5f 70 72 61 67 6d 61 73 26 26 61 74 74 61  er_pragmas&&atta
3af0: 63 68 20 7b 0a 64 6f 5f 74 65 73 74 20 70 72 61  ch {.do_test pra
3b00: 67 6d 61 2d 34 2e 31 20 7b 0a 20 20 65 78 65 63  gma-4.1 {.  exec
3b10: 73 71 6c 20 7b 0a 20 20 20 20 41 54 54 41 43 48  sql {.    ATTACH
3b20: 20 27 74 65 73 74 32 2e 64 62 27 20 41 53 20 61   'test2.db' AS a
3b30: 75 78 3b 0a 20 20 20 20 70 72 61 67 6d 61 20 61  ux;.    pragma a
3b40: 75 78 2e 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20  ux.cache_size;. 
3b50: 20 20 20 70 72 61 67 6d 61 20 61 75 78 2e 64 65     pragma aux.de
3b60: 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65  fault_cache_size
3b70: 3b 0a 20 20 7d 20 0a 7d 20 5b 6c 69 73 74 20 24  ;.  } .} [list $
3b80: 44 46 4c 54 5f 43 41 43 48 45 5f 53 5a 20 24 44  DFLT_CACHE_SZ $D
3b90: 46 4c 54 5f 43 41 43 48 45 5f 53 5a 5d 0a 64 6f  FLT_CACHE_SZ].do
3ba0: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 34 2e 32  _test pragma-4.2
3bb0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
3bc0: 20 20 20 70 72 61 67 6d 61 20 61 75 78 2e 63 61     pragma aux.ca
3bd0: 63 68 65 5f 73 69 7a 65 20 3d 20 35 30 3b 0a 20  che_size = 50;. 
3be0: 20 20 20 70 72 61 67 6d 61 20 61 75 78 2e 63 61     pragma aux.ca
3bf0: 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 70 72  che_size;.    pr
3c00: 61 67 6d 61 20 61 75 78 2e 64 65 66 61 75 6c 74  agma aux.default
3c10: 5f 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 7d  _cache_size;.  }
3c20: 20 0a 7d 20 5b 6c 69 73 74 20 35 30 20 24 44 46   .} [list 50 $DF
3c30: 4c 54 5f 43 41 43 48 45 5f 53 5a 5d 0a 64 6f 5f  LT_CACHE_SZ].do_
3c40: 74 65 73 74 20 70 72 61 67 6d 61 2d 34 2e 33 20  test pragma-4.3 
3c50: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
3c60: 20 20 70 72 61 67 6d 61 20 61 75 78 2e 64 65 66    pragma aux.def
3c70: 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65 20  ault_cache_size 
3c80: 3d 20 34 35 36 3b 0a 20 20 20 20 70 72 61 67 6d  = 456;.    pragm
3c90: 61 20 61 75 78 2e 63 61 63 68 65 5f 73 69 7a 65  a aux.cache_size
3ca0: 3b 0a 20 20 20 20 70 72 61 67 6d 61 20 61 75 78  ;.    pragma aux
3cb0: 2e 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73  .default_cache_s
3cc0: 69 7a 65 3b 0a 20 20 7d 20 0a 7d 20 7b 34 35 36  ize;.  } .} {456
3cd0: 20 34 35 36 7d 0a 64 6f 5f 74 65 73 74 20 70 72   456}.do_test pr
3ce0: 61 67 6d 61 2d 34 2e 34 20 7b 0a 20 20 65 78 65  agma-4.4 {.  exe
3cf0: 63 73 71 6c 20 7b 0a 20 20 20 20 70 72 61 67 6d  csql {.    pragm
3d00: 61 20 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20  a cache_size;.  
3d10: 20 20 70 72 61 67 6d 61 20 64 65 66 61 75 6c 74    pragma default
3d20: 5f 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 7d  _cache_size;.  }
3d30: 20 0a 7d 20 5b 6c 69 73 74 20 24 44 46 4c 54 5f   .} [list $DFLT_
3d40: 43 41 43 48 45 5f 53 5a 20 24 44 46 4c 54 5f 43  CACHE_SZ $DFLT_C
3d50: 41 43 48 45 5f 53 5a 5d 0a 64 6f 5f 74 65 73 74  ACHE_SZ].do_test
3d60: 20 70 72 61 67 6d 61 2d 34 2e 35 20 7b 0a 20 20   pragma-4.5 {.  
3d70: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 44 45  execsql {.    DE
3d80: 54 41 43 48 20 61 75 78 3b 0a 20 20 20 20 41 54  TACH aux;.    AT
3d90: 54 41 43 48 20 27 74 65 73 74 33 2e 64 62 27 20  TACH 'test3.db' 
3da0: 41 53 20 61 75 78 3b 0a 20 20 20 20 70 72 61 67  AS aux;.    prag
3db0: 6d 61 20 61 75 78 2e 63 61 63 68 65 5f 73 69 7a  ma aux.cache_siz
3dc0: 65 3b 0a 20 20 20 20 70 72 61 67 6d 61 20 61 75  e;.    pragma au
3dd0: 78 2e 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f  x.default_cache_
3de0: 73 69 7a 65 3b 0a 20 20 7d 20 0a 7d 20 5b 6c 69  size;.  } .} [li
3df0: 73 74 20 24 44 46 4c 54 5f 43 41 43 48 45 5f 53  st $DFLT_CACHE_S
3e00: 5a 20 24 44 46 4c 54 5f 43 41 43 48 45 5f 53 5a  Z $DFLT_CACHE_SZ
3e10: 5d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  ].do_test pragma
3e20: 2d 34 2e 36 20 7b 0a 20 20 65 78 65 63 73 71 6c  -4.6 {.  execsql
3e30: 20 7b 0a 20 20 20 20 44 45 54 41 43 48 20 61 75   {.    DETACH au
3e40: 78 3b 0a 20 20 20 20 41 54 54 41 43 48 20 27 74  x;.    ATTACH 't
3e50: 65 73 74 32 2e 64 62 27 20 41 53 20 61 75 78 3b  est2.db' AS aux;
3e60: 0a 20 20 20 20 70 72 61 67 6d 61 20 61 75 78 2e  .    pragma aux.
3e70: 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20  cache_size;.    
3e80: 70 72 61 67 6d 61 20 61 75 78 2e 64 65 66 61 75  pragma aux.defau
3e90: 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20  lt_cache_size;. 
3ea0: 20 7d 20 0a 7d 20 7b 34 35 36 20 34 35 36 7d 0a   } .} {456 456}.
3eb0: 7d 20 3b 23 20 69 66 63 61 70 61 62 6c 65 20 70  } ;# ifcapable p
3ec0: 61 67 65 72 5f 70 72 61 67 6d 61 73 0a 0a 23 20  ager_pragmas..# 
3ed0: 54 65 73 74 20 74 68 61 74 20 6d 6f 64 69 66 79  Test that modify
3ee0: 69 6e 67 20 74 68 65 20 73 79 6e 63 2d 6c 65 76  ing the sync-lev
3ef0: 65 6c 20 69 6e 20 74 68 65 20 6d 69 64 64 6c 65  el in the middle
3f00: 20 6f 66 20 61 20 74 72 61 6e 73 61 63 74 69 6f   of a transactio
3f10: 6e 20 69 73 0a 23 20 64 69 73 61 6c 6c 6f 77 65  n is.# disallowe
3f20: 64 2e 0a 69 66 63 61 70 61 62 6c 65 20 70 61 67  d..ifcapable pag
3f30: 65 72 5f 70 72 61 67 6d 61 73 20 7b 0a 64 6f 5f  er_pragmas {.do_
3f40: 74 65 73 74 20 70 72 61 67 6d 61 2d 35 2e 30 20  test pragma-5.0 
3f50: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
3f60: 20 20 70 72 61 67 6d 61 20 73 79 6e 63 68 72 6f    pragma synchro
3f70: 6e 6f 75 73 3b 0a 20 20 7d 20 0a 7d 20 7b 32 7d  nous;.  } .} {2}
3f80: 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d  .do_test pragma-
3f90: 35 2e 31 20 7b 0a 20 20 63 61 74 63 68 73 71 6c  5.1 {.  catchsql
3fa0: 20 7b 0a 20 20 20 20 42 45 47 49 4e 3b 0a 20 20   {.    BEGIN;.  
3fb0: 20 20 70 72 61 67 6d 61 20 73 79 6e 63 68 72 6f    pragma synchro
3fc0: 6e 6f 75 73 20 3d 20 4f 46 46 3b 0a 20 20 7d 20  nous = OFF;.  } 
3fd0: 0a 7d 20 7b 31 20 7b 53 61 66 65 74 79 20 6c 65  .} {1 {Safety le
3fe0: 76 65 6c 20 6d 61 79 20 6e 6f 74 20 62 65 20 63  vel may not be c
3ff0: 68 61 6e 67 65 64 20 69 6e 73 69 64 65 20 61 20  hanged inside a 
4000: 74 72 61 6e 73 61 63 74 69 6f 6e 7d 7d 0a 64 6f  transaction}}.do
4010: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 35 2e 32  _test pragma-5.2
4020: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
4030: 20 20 20 70 72 61 67 6d 61 20 73 79 6e 63 68 72     pragma synchr
4040: 6f 6e 6f 75 73 3b 0a 20 20 7d 20 0a 7d 20 7b 32  onous;.  } .} {2
4050: 7d 0a 63 61 74 63 68 73 71 6c 20 7b 43 4f 4d 4d  }.catchsql {COMM
4060: 49 54 3b 7d 0a 7d 20 3b 23 20 69 66 63 61 70 61  IT;}.} ;# ifcapa
4070: 62 6c 65 20 70 61 67 65 72 5f 70 72 61 67 6d 61  ble pager_pragma
4080: 73 0a 0a 23 20 54 65 73 74 20 73 63 68 65 6d 61  s..# Test schema
4090: 2d 71 75 65 72 79 20 70 72 61 67 6d 61 73 0a 23  -query pragmas.#
40a0: 0a 69 66 63 61 70 61 62 6c 65 20 73 63 68 65 6d  .ifcapable schem
40b0: 61 5f 70 72 61 67 6d 61 73 20 7b 0a 69 66 63 61  a_pragmas {.ifca
40c0: 70 61 62 6c 65 20 74 65 6d 70 64 62 26 26 61 74  pable tempdb&&at
40d0: 74 61 63 68 20 7b 0a 20 20 64 6f 5f 74 65 73 74  tach {.  do_test
40e0: 20 70 72 61 67 6d 61 2d 36 2e 31 20 7b 0a 20 20   pragma-6.1 {.  
40f0: 20 20 73 65 74 20 72 65 73 20 7b 7d 0a 20 20 20    set res {}.   
4100: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
4110: 20 2a 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 74   * FROM sqlite_t
4120: 65 6d 70 5f 6d 61 73 74 65 72 7d 0a 20 20 20 20  emp_master}.    
4130: 66 6f 72 65 61 63 68 20 7b 69 64 78 20 6e 61 6d  foreach {idx nam
4140: 65 20 66 69 6c 65 7d 20 5b 65 78 65 63 73 71 6c  e file} [execsql
4150: 20 7b 70 72 61 67 6d 61 20 64 61 74 61 62 61 73   {pragma databas
4160: 65 5f 6c 69 73 74 7d 5d 20 7b 0a 20 20 20 20 20  e_list}] {.     
4170: 20 6c 61 70 70 65 6e 64 20 72 65 73 20 24 69 64   lappend res $id
4180: 78 20 24 6e 61 6d 65 0a 20 20 20 20 7d 0a 20 20  x $name.    }.  
4190: 20 20 73 65 74 20 72 65 73 0a 20 20 7d 20 7b 30    set res.  } {0
41a0: 20 6d 61 69 6e 20 31 20 74 65 6d 70 20 32 20 61   main 1 temp 2 a
41b0: 75 78 7d 0a 7d 0a 64 6f 5f 74 65 73 74 20 70 72  ux}.}.do_test pr
41c0: 61 67 6d 61 2d 36 2e 32 20 7b 0a 20 20 65 78 65  agma-6.2 {.  exe
41d0: 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54  csql {.    CREAT
41e0: 45 20 54 41 42 4c 45 20 74 32 28 61 2c 62 2c 63  E TABLE t2(a,b,c
41f0: 29 3b 0a 20 20 20 20 70 72 61 67 6d 61 20 74 61  );.    pragma ta
4200: 62 6c 65 5f 69 6e 66 6f 28 74 32 29 0a 20 20 7d  ble_info(t2).  }
4210: 0a 7d 20 7b 30 20 61 20 7b 7d 20 30 20 7b 7d 20  .} {0 a {} 0 {} 
4220: 30 20 31 20 62 20 7b 7d 20 30 20 7b 7d 20 30 20  0 1 b {} 0 {} 0 
4230: 32 20 63 20 7b 7d 20 30 20 7b 7d 20 30 7d 0a 64  2 c {} 0 {} 0}.d
4240: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 36 2e  o_test pragma-6.
4250: 32 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  2.1 {.  execsql 
4260: 7b 0a 20 20 20 20 70 72 61 67 6d 61 20 74 61 62  {.    pragma tab
4270: 6c 65 5f 69 6e 66 6f 3b 0a 20 20 7d 0a 7d 20 7b  le_info;.  }.} {
4280: 7d 0a 64 62 20 6e 75 6c 6c 76 61 6c 75 65 20 3c  }.db nullvalue <
4290: 3c 4e 55 4c 4c 3e 3e 0a 64 6f 5f 74 65 73 74 20  <NULL>>.do_test 
42a0: 70 72 61 67 6d 61 2d 36 2e 32 2e 32 20 7b 0a 20  pragma-6.2.2 {. 
42b0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43   execsql {.    C
42c0: 52 45 41 54 45 20 54 41 42 4c 45 20 74 35 28 0a  REATE TABLE t5(.
42d0: 20 20 20 20 20 20 61 20 54 45 58 54 20 44 45 46        a TEXT DEF
42e0: 41 55 4c 54 20 43 55 52 52 45 4e 54 5f 54 49 4d  AULT CURRENT_TIM
42f0: 45 53 54 41 4d 50 2c 20 0a 20 20 20 20 20 20 62  ESTAMP, .      b
4300: 20 44 45 46 41 55 4c 54 20 28 35 2b 33 29 2c 0a   DEFAULT (5+3),.
4310: 20 20 20 20 20 20 63 20 54 45 58 54 2c 0a 20 20        c TEXT,.  
4320: 20 20 20 20 64 20 49 4e 54 45 47 45 52 20 44 45      d INTEGER DE
4330: 46 41 55 4c 54 20 4e 55 4c 4c 2c 0a 20 20 20 20  FAULT NULL,.    
4340: 20 20 65 20 54 45 58 54 20 44 45 46 41 55 4c 54    e TEXT DEFAULT
4350: 20 27 27 2c 0a 20 20 20 20 20 20 55 4e 49 51 55   '',.      UNIQU
4360: 45 28 62 2c 63 2c 64 29 2c 0a 20 20 20 20 20 20  E(b,c,d),.      
4370: 50 52 49 4d 41 52 59 20 4b 45 59 28 65 2c 62 2c  PRIMARY KEY(e,b,
4380: 63 29 0a 20 20 20 20 29 3b 0a 20 20 20 20 50 52  c).    );.    PR
4390: 41 47 4d 41 20 74 61 62 6c 65 5f 69 6e 66 6f 28  AGMA table_info(
43a0: 74 35 29 3b 0a 20 20 7d 0a 7d 20 7b 30 20 61 20  t5);.  }.} {0 a 
43b0: 54 45 58 54 20 30 20 43 55 52 52 45 4e 54 5f 54  TEXT 0 CURRENT_T
43c0: 49 4d 45 53 54 41 4d 50 20 30 20 31 20 62 20 7b  IMESTAMP 0 1 b {
43d0: 7d 20 30 20 35 2b 33 20 32 20 32 20 63 20 54 45  } 0 5+3 2 2 c TE
43e0: 58 54 20 30 20 3c 3c 4e 55 4c 4c 3e 3e 20 33 20  XT 0 <<NULL>> 3 
43f0: 33 20 64 20 49 4e 54 45 47 45 52 20 30 20 4e 55  3 d INTEGER 0 NU
4400: 4c 4c 20 30 20 34 20 65 20 54 45 58 54 20 30 20  LL 0 4 e TEXT 0 
4410: 27 27 20 31 7d 0a 64 62 20 6e 75 6c 6c 76 61 6c  '' 1}.db nullval
4420: 75 65 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 70 72  ue {}.do_test pr
4430: 61 67 6d 61 2d 36 2e 32 2e 33 20 7b 0a 20 20 65  agma-6.2.3 {.  e
4440: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45  xecsql {.    CRE
4450: 41 54 45 20 54 41 42 4c 45 20 74 32 5f 33 28 61  ATE TABLE t2_3(a
4460: 2c 62 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41  ,b INTEGER PRIMA
4470: 52 59 20 4b 45 59 2c 63 29 3b 0a 20 20 20 20 70  RY KEY,c);.    p
4480: 72 61 67 6d 61 20 74 61 62 6c 65 5f 69 6e 66 6f  ragma table_info
4490: 28 74 32 5f 33 29 0a 20 20 7d 0a 7d 20 7b 30 20  (t2_3).  }.} {0 
44a0: 61 20 7b 7d 20 30 20 7b 7d 20 30 20 31 20 62 20  a {} 0 {} 0 1 b 
44b0: 49 4e 54 45 47 45 52 20 30 20 7b 7d 20 31 20 32  INTEGER 0 {} 1 2
44c0: 20 63 20 7b 7d 20 30 20 7b 7d 20 30 7d 0a 69 66   c {} 0 {} 0}.if
44d0: 63 61 70 61 62 6c 65 20 7b 66 6f 72 65 69 67 6e  capable {foreign
44e0: 6b 65 79 7d 20 7b 0a 20 20 64 6f 5f 74 65 73 74  key} {.  do_test
44f0: 20 70 72 61 67 6d 61 2d 36 2e 33 2e 31 20 7b 0a   pragma-6.3.1 {.
4500: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20      execsql {.  
4510: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
4520: 20 74 33 28 61 20 69 6e 74 20 72 65 66 65 72 65   t3(a int refere
4530: 6e 63 65 73 20 74 32 28 62 29 2c 20 62 20 55 4e  nces t2(b), b UN
4540: 49 51 55 45 29 3b 0a 20 20 20 20 20 20 70 72 61  IQUE);.      pra
4550: 67 6d 61 20 66 6f 72 65 69 67 6e 5f 6b 65 79 5f  gma foreign_key_
4560: 6c 69 73 74 28 74 33 29 3b 0a 20 20 20 20 7d 0a  list(t3);.    }.
4570: 20 20 7d 20 7b 30 20 30 20 74 32 20 61 20 62 20    } {0 0 t2 a b 
4580: 7b 4e 4f 20 41 43 54 49 4f 4e 7d 20 7b 4e 4f 20  {NO ACTION} {NO 
4590: 41 43 54 49 4f 4e 7d 20 4e 4f 4e 45 7d 0a 20 20  ACTION} NONE}.  
45a0: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 36  do_test pragma-6
45b0: 2e 33 2e 32 20 7b 0a 20 20 20 20 65 78 65 63 73  .3.2 {.    execs
45c0: 71 6c 20 7b 0a 20 20 20 20 20 20 70 72 61 67 6d  ql {.      pragm
45d0: 61 20 66 6f 72 65 69 67 6e 5f 6b 65 79 5f 6c 69  a foreign_key_li
45e0: 73 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 7d  st;.    }.  } {}
45f0: 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .  do_test pragm
4600: 61 2d 36 2e 33 2e 33 20 7b 0a 20 20 20 20 65 78  a-6.3.3 {.    ex
4610: 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 70 72  ecsql {.      pr
4620: 61 67 6d 61 20 66 6f 72 65 69 67 6e 5f 6b 65 79  agma foreign_key
4630: 5f 6c 69 73 74 28 74 33 5f 62 6f 67 75 73 29 3b  _list(t3_bogus);
4640: 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 7d 0a 20 20  .    }.  } {}.  
4650: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 36  do_test pragma-6
4660: 2e 33 2e 34 20 7b 0a 20 20 20 20 65 78 65 63 73  .3.4 {.    execs
4670: 71 6c 20 7b 0a 20 20 20 20 20 20 70 72 61 67 6d  ql {.      pragm
4680: 61 20 66 6f 72 65 69 67 6e 5f 6b 65 79 5f 6c 69  a foreign_key_li
4690: 73 74 28 74 35 29 3b 0a 20 20 20 20 7d 0a 20 20  st(t5);.    }.  
46a0: 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70  } {}.  do_test p
46b0: 72 61 67 6d 61 2d 36 2e 34 20 7b 0a 20 20 20 20  ragma-6.4 {.    
46c0: 63 61 70 74 75 72 65 5f 70 72 61 67 6d 61 20 64  capture_pragma d
46d0: 62 20 6f 75 74 20 7b 0a 20 20 20 20 20 20 70 72  b out {.      pr
46e0: 61 67 6d 61 20 69 6e 64 65 78 5f 6c 69 73 74 28  agma index_list(
46f0: 74 33 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 64  t3);.    }.    d
4700: 62 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 73  b eval {SELECT s
4710: 65 71 2c 20 22 6e 61 6d 65 22 2c 20 22 75 6e 69  eq, "name", "uni
4720: 71 75 65 22 20 46 52 4f 4d 20 6f 75 74 20 4f 52  que" FROM out OR
4730: 44 45 52 20 42 59 20 73 65 71 7d 0a 20 20 7d 20  DER BY seq}.  } 
4740: 7b 30 20 73 71 6c 69 74 65 5f 61 75 74 6f 69 6e  {0 sqlite_autoin
4750: 64 65 78 5f 74 33 5f 31 20 31 7d 0a 7d 0a 69 66  dex_t3_1 1}.}.if
4760: 63 61 70 61 62 6c 65 20 7b 21 66 6f 72 65 69 67  capable {!foreig
4770: 6e 6b 65 79 7d 20 7b 0a 20 20 65 78 65 63 73 71  nkey} {.  execsq
4780: 6c 20 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20  l {CREATE TABLE 
4790: 74 33 28 61 2c 62 20 55 4e 49 51 55 45 29 7d 0a  t3(a,b UNIQUE)}.
47a0: 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  }.do_test pragma
47b0: 2d 36 2e 35 2e 31 20 7b 0a 20 20 65 78 65 63 73  -6.5.1 {.  execs
47c0: 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20  ql {.    CREATE 
47d0: 49 4e 44 45 58 20 74 33 69 31 20 4f 4e 20 74 33  INDEX t3i1 ON t3
47e0: 28 61 2c 62 29 3b 0a 20 20 7d 0a 20 20 63 61 70  (a,b);.  }.  cap
47f0: 74 75 72 65 5f 70 72 61 67 6d 61 20 64 62 20 6f  ture_pragma db o
4800: 75 74 20 7b 0a 20 20 20 20 70 72 61 67 6d 61 20  ut {.    pragma 
4810: 69 6e 64 65 78 5f 69 6e 66 6f 28 74 33 69 31 29  index_info(t3i1)
4820: 3b 0a 20 20 7d 0a 20 20 64 62 20 65 76 61 6c 20  ;.  }.  db eval 
4830: 7b 53 45 4c 45 43 54 20 73 65 71 6e 6f 2c 20 63  {SELECT seqno, c
4840: 69 64 2c 20 6e 61 6d 65 20 46 52 4f 4d 20 6f 75  id, name FROM ou
4850: 74 20 4f 52 44 45 52 20 42 59 20 73 65 71 6e 6f  t ORDER BY seqno
4860: 7d 0a 7d 20 7b 30 20 30 20 61 20 31 20 31 20 62  }.} {0 0 a 1 1 b
4870: 7d 0a 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46  }..# EVIDENCE-OF
4880: 3a 20 52 2d 32 33 31 31 34 2d 32 31 36 39 35 20  : R-23114-21695 
4890: 54 68 65 20 61 75 78 69 6c 69 61 72 79 20 69 6e  The auxiliary in
48a0: 64 65 78 2d 63 6f 6c 75 6d 6e 73 20 61 72 65 20  dex-columns are 
48b0: 6e 6f 74 20 73 68 6f 77 6e 0a 23 20 62 79 20 74  not shown.# by t
48c0: 68 65 20 69 6e 64 65 78 5f 69 6e 66 6f 20 70 72  he index_info pr
48d0: 61 67 6d 61 2c 20 62 75 74 20 74 68 65 79 20 61  agma, but they a
48e0: 72 65 20 6c 69 73 74 65 64 20 62 79 20 74 68 65  re listed by the
48f0: 20 69 6e 64 65 78 5f 78 69 6e 66 6f 0a 23 20 70   index_xinfo.# p
4900: 72 61 67 6d 61 2e 0a 23 0a 64 6f 5f 74 65 73 74  ragma..#.do_test
4910: 20 70 72 61 67 6d 61 2d 36 2e 35 2e 31 62 20 7b   pragma-6.5.1b {
4920: 0a 20 20 63 61 70 74 75 72 65 5f 70 72 61 67 6d  .  capture_pragm
4930: 61 20 64 62 20 6f 75 74 20 7b 50 52 41 47 4d 41  a db out {PRAGMA
4940: 20 69 6e 64 65 78 5f 78 69 6e 66 6f 28 74 33 69   index_xinfo(t3i
4950: 31 29 7d 0a 20 20 64 62 20 65 76 61 6c 20 7b 53  1)}.  db eval {S
4960: 45 4c 45 43 54 20 73 65 71 6e 6f 2c 20 63 69 64  ELECT seqno, cid
4970: 2c 20 6e 61 6d 65 20 46 52 4f 4d 20 6f 75 74 20  , name FROM out 
4980: 4f 52 44 45 52 20 42 59 20 73 65 71 6e 6f 7d 0a  ORDER BY seqno}.
4990: 7d 20 7b 30 20 30 20 61 20 31 20 31 20 62 20 32  } {0 0 a 1 1 b 2
49a0: 20 2d 31 20 7b 7d 7d 0a 0a 0a 23 20 45 56 49 44   -1 {}}...# EVID
49b0: 45 4e 43 45 2d 4f 46 3a 20 52 2d 32 39 34 34 38  ENCE-OF: R-29448
49c0: 2d 36 30 33 34 36 20 50 52 41 47 4d 41 20 73 63  -60346 PRAGMA sc
49d0: 68 65 6d 61 2e 69 6e 64 65 78 5f 69 6e 66 6f 28  hema.index_info(
49e0: 69 6e 64 65 78 2d 6e 61 6d 65 29 3b 20 54 68 69  index-name); Thi
49f0: 73 0a 23 20 70 72 61 67 6d 61 20 72 65 74 75 72  s.# pragma retur
4a00: 6e 73 20 6f 6e 65 20 72 6f 77 20 66 6f 72 20 65  ns one row for e
4a10: 61 63 68 20 6b 65 79 20 63 6f 6c 75 6d 6e 20 69  ach key column i
4a20: 6e 20 74 68 65 20 6e 61 6d 65 64 20 69 6e 64 65  n the named inde
4a30: 78 2e 0a 23 0a 23 20 28 54 68 65 20 66 69 72 73  x..#.# (The firs
4a40: 74 20 63 6f 6c 75 6d 6e 20 6f 66 20 6f 75 74 70  t column of outp
4a50: 75 74 20 66 72 6f 6d 20 50 52 41 47 4d 41 20 69  ut from PRAGMA i
4a60: 6e 64 65 78 5f 69 6e 66 6f 20 69 73 2e 2e 2e 29  ndex_info is...)
4a70: 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20  .# EVIDENCE-OF: 
4a80: 52 2d 33 34 31 38 36 2d 35 32 39 31 34 20 54 68  R-34186-52914 Th
4a90: 65 20 72 61 6e 6b 20 6f 66 20 74 68 65 20 63 6f  e rank of the co
4aa0: 6c 75 6d 6e 20 77 69 74 68 69 6e 20 74 68 65 20  lumn within the 
4ab0: 69 6e 64 65 78 2e 20 28 30 0a 23 20 6d 65 61 6e  index. (0.# mean
4ac0: 73 20 6c 65 66 74 2d 6d 6f 73 74 2e 29 0a 23 0a  s left-most.).#.
4ad0: 23 20 28 54 68 65 20 73 65 63 6f 6e 64 20 63 6f  # (The second co
4ae0: 6c 75 6d 6e 20 6f 66 20 6f 75 74 70 75 74 20 66  lumn of output f
4af0: 72 6f 6d 20 50 52 41 47 4d 41 20 69 6e 64 65 78  rom PRAGMA index
4b00: 5f 69 6e 66 6f 20 69 73 2e 2e 2e 29 0a 23 20 45  _info is...).# E
4b10: 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 36 35  VIDENCE-OF: R-65
4b20: 30 31 39 2d 30 38 33 38 33 20 54 68 65 20 72 61  019-08383 The ra
4b30: 6e 6b 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  nk of the column
4b40: 20 77 69 74 68 69 6e 20 74 68 65 20 74 61 62 6c   within the tabl
4b50: 65 0a 23 20 62 65 69 6e 67 20 69 6e 64 65 78 65  e.# being indexe
4b60: 64 2e 0a 23 0a 23 20 28 54 68 65 20 74 68 69 72  d..#.# (The thir
4b70: 64 20 63 6f 6c 75 6d 6e 20 6f 66 20 6f 75 74 70  d column of outp
4b80: 75 74 20 66 72 6f 6d 20 50 52 41 47 4d 41 20 69  ut from PRAGMA i
4b90: 6e 64 65 78 5f 69 6e 66 6f 20 69 73 2e 2e 2e 29  ndex_info is...)
4ba0: 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20  .# EVIDENCE-OF: 
4bb0: 52 2d 30 39 37 37 33 2d 33 34 32 36 36 20 54 68  R-09773-34266 Th
4bc0: 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f  e name of the co
4bd0: 6c 75 6d 6e 20 62 65 69 6e 67 20 69 6e 64 65 78  lumn being index
4be0: 65 64 2e 0a 23 0a 64 6f 5f 65 78 65 63 73 71 6c  ed..#.do_execsql
4bf0: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 36 2e 35  _test pragma-6.5
4c00: 2e 31 63 20 7b 0a 20 20 43 52 45 41 54 45 20 49  .1c {.  CREATE I
4c10: 4e 44 45 58 20 74 33 69 32 20 4f 4e 20 74 33 28  NDEX t3i2 ON t3(
4c20: 62 2c 61 29 3b 0a 20 20 50 52 41 47 4d 41 20 69  b,a);.  PRAGMA i
4c30: 6e 64 65 78 5f 69 6e 66 6f 3d 27 74 33 69 32 27  ndex_info='t3i2'
4c40: 3b 0a 20 20 44 52 4f 50 20 49 4e 44 45 58 20 74  ;.  DROP INDEX t
4c50: 33 69 32 3b 0a 7d 20 7b 30 20 31 20 62 20 31 20  3i2;.} {0 1 b 1 
4c60: 30 20 61 7d 0a 0a 64 6f 5f 74 65 73 74 20 70 72  0 a}..do_test pr
4c70: 61 67 6d 61 2d 36 2e 35 2e 32 20 7b 0a 20 20 65  agma-6.5.2 {.  e
4c80: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 70 72 61  xecsql {.    pra
4c90: 67 6d 61 20 69 6e 64 65 78 5f 69 6e 66 6f 28 74  gma index_info(t
4ca0: 33 69 31 5f 62 6f 67 75 73 29 3b 0a 20 20 7d 0a  3i1_bogus);.  }.
4cb0: 7d 20 7b 7d 0a 0a 69 66 63 61 70 61 62 6c 65 20  } {}..ifcapable 
4cc0: 74 65 6d 70 64 62 20 7b 0a 20 20 23 20 54 65 73  tempdb {.  # Tes
4cd0: 74 20 66 6f 72 20 74 69 63 6b 65 74 20 23 33 33  t for ticket #33
4ce0: 32 30 2e 20 57 68 65 6e 20 61 20 74 65 6d 70 20  20. When a temp 
4cf0: 74 61 62 6c 65 20 6f 66 20 74 68 65 20 73 61 6d  table of the sam
4d00: 65 20 6e 61 6d 65 20 65 78 69 73 74 73 2c 20 6d  e name exists, m
4d10: 61 6b 65 0a 20 20 23 20 73 75 72 65 20 74 68 65  ake.  # sure the
4d20: 20 73 63 68 65 6d 61 20 6f 66 20 74 68 65 20 6d   schema of the m
4d30: 61 69 6e 20 74 61 62 6c 65 20 63 61 6e 20 73 74  ain table can st
4d40: 69 6c 6c 20 62 65 20 71 75 65 72 69 65 64 20 75  ill be queried u
4d50: 73 69 6e 67 20 0a 20 20 23 20 22 70 72 61 67 6d  sing .  # "pragm
4d60: 61 20 74 61 62 6c 65 5f 69 6e 66 6f 22 3a 0a 20  a table_info":. 
4d70: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
4d80: 36 2e 36 2e 31 20 7b 0a 20 20 20 20 65 78 65 63  6.6.1 {.    exec
4d90: 73 71 6c 20 7b 0a 20 20 20 20 20 20 43 52 45 41  sql {.      CREA
4da0: 54 45 20 54 41 42 4c 45 20 74 72 69 61 6c 28 63  TE TABLE trial(c
4db0: 6f 6c 5f 6d 61 69 6e 29 3b 0a 20 20 20 20 20 20  ol_main);.      
4dc0: 43 52 45 41 54 45 20 54 45 4d 50 20 54 41 42 4c  CREATE TEMP TABL
4dd0: 45 20 74 72 69 61 6c 28 63 6f 6c 5f 74 65 6d 70  E trial(col_temp
4de0: 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 7d 0a  );.    }.  } {}.
4df0: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
4e00: 2d 36 2e 36 2e 32 20 7b 0a 20 20 20 20 65 78 65  -6.6.2 {.    exe
4e10: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41  csql {.      PRA
4e20: 47 4d 41 20 74 61 62 6c 65 5f 69 6e 66 6f 28 74  GMA table_info(t
4e30: 72 69 61 6c 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  rial);.    }.  }
4e40: 20 7b 30 20 63 6f 6c 5f 74 65 6d 70 20 7b 7d 20   {0 col_temp {} 
4e50: 30 20 7b 7d 20 30 7d 0a 20 20 64 6f 5f 74 65 73  0 {} 0}.  do_tes
4e60: 74 20 70 72 61 67 6d 61 2d 36 2e 36 2e 33 20 7b  t pragma-6.6.3 {
4e70: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
4e80: 20 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70       PRAGMA temp
4e90: 2e 74 61 62 6c 65 5f 69 6e 66 6f 28 74 72 69 61  .table_info(tria
4ea0: 6c 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 30  l);.    }.  } {0
4eb0: 20 63 6f 6c 5f 74 65 6d 70 20 7b 7d 20 30 20 7b   col_temp {} 0 {
4ec0: 7d 20 30 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70  } 0}.  do_test p
4ed0: 72 61 67 6d 61 2d 36 2e 36 2e 34 20 7b 0a 20 20  ragma-6.6.4 {.  
4ee0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
4ef0: 20 20 50 52 41 47 4d 41 20 6d 61 69 6e 2e 74 61    PRAGMA main.ta
4f00: 62 6c 65 5f 69 6e 66 6f 28 74 72 69 61 6c 29 3b  ble_info(trial);
4f10: 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 30 20 63 6f  .    }.  } {0 co
4f20: 6c 5f 6d 61 69 6e 20 7b 7d 20 30 20 7b 7d 20 30  l_main {} 0 {} 0
4f30: 7d 0a 7d 0a 0a 64 6f 5f 74 65 73 74 20 70 72 61  }.}..do_test pra
4f40: 67 6d 61 2d 36 2e 37 20 7b 0a 20 20 65 78 65 63  gma-6.7 {.  exec
4f50: 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45  sql {.    CREATE
4f60: 20 54 41 42 4c 45 20 74 65 73 74 5f 74 61 62 6c   TABLE test_tabl
4f70: 65 28 0a 20 20 20 20 20 20 6f 6e 65 20 49 4e 54  e(.      one INT
4f80: 20 4e 4f 54 20 4e 55 4c 4c 20 44 45 46 41 55 4c   NOT NULL DEFAUL
4f90: 54 20 2d 31 2c 20 0a 20 20 20 20 20 20 74 77 6f  T -1, .      two
4fa0: 20 74 65 78 74 2c 0a 20 20 20 20 20 20 74 68 72   text,.      thr
4fb0: 65 65 20 56 41 52 43 48 41 52 28 34 35 2c 20 36  ee VARCHAR(45, 6
4fc0: 35 29 20 44 45 46 41 55 4c 54 20 27 61 62 63 64  5) DEFAULT 'abcd
4fd0: 65 27 2c 0a 20 20 20 20 20 20 66 6f 75 72 20 52  e',.      four R
4fe0: 45 41 4c 20 44 45 46 41 55 4c 54 20 58 27 61 62  EAL DEFAULT X'ab
4ff0: 63 64 65 66 27 2c 0a 20 20 20 20 20 20 66 69 76  cdef',.      fiv
5000: 65 20 44 45 46 41 55 4c 54 20 43 55 52 52 45 4e  e DEFAULT CURREN
5010: 54 5f 54 49 4d 45 0a 20 20 20 20 29 3b 0a 20 20  T_TIME.    );.  
5020: 7d 0a 20 20 63 61 70 74 75 72 65 5f 70 72 61 67  }.  capture_prag
5030: 6d 61 20 64 62 20 6f 75 74 20 7b 50 52 41 47 4d  ma db out {PRAGM
5040: 41 20 74 61 62 6c 65 5f 69 6e 66 6f 28 74 65 73  A table_info(tes
5050: 74 5f 74 61 62 6c 65 29 7d 0a 20 20 64 62 20 65  t_table)}.  db e
5060: 76 61 6c 20 7b 53 45 4c 45 43 54 20 63 69 64 2c  val {SELECT cid,
5070: 20 22 6e 61 6d 65 22 2c 20 74 79 70 65 2c 20 22   "name", type, "
5080: 6e 6f 74 6e 75 6c 6c 22 2c 20 64 66 6c 74 5f 76  notnull", dflt_v
5090: 61 6c 75 65 2c 20 70 6b 20 46 52 4f 4d 20 6f 75  alue, pk FROM ou
50a0: 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 4f 52  t.            OR
50b0: 44 45 52 20 42 59 20 63 69 64 7d 0a 7d 20 5b 63  DER BY cid}.} [c
50c0: 6f 6e 63 61 74 20 5c 0a 20 20 7b 30 20 6f 6e 65  oncat \.  {0 one
50d0: 20 49 4e 54 20 31 20 2d 31 20 30 7d 20 5c 0a 20   INT 1 -1 0} \. 
50e0: 20 7b 31 20 74 77 6f 20 74 65 78 74 20 30 20 7b   {1 two text 0 {
50f0: 7d 20 30 7d 20 5c 0a 20 20 7b 32 20 74 68 72 65  } 0} \.  {2 thre
5100: 65 20 7b 56 41 52 43 48 41 52 28 34 35 2c 20 36  e {VARCHAR(45, 6
5110: 35 29 7d 20 30 20 27 61 62 63 64 65 27 20 30 7d  5)} 0 'abcde' 0}
5120: 20 5c 0a 20 20 7b 33 20 66 6f 75 72 20 52 45 41   \.  {3 four REA
5130: 4c 20 30 20 58 27 61 62 63 64 65 66 27 20 30 7d  L 0 X'abcdef' 0}
5140: 20 5c 0a 20 20 7b 34 20 66 69 76 65 20 7b 7d 20   \.  {4 five {} 
5150: 30 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 20 30  0 CURRENT_TIME 0
5160: 7d 20 5c 0a 5d 0a 64 6f 5f 74 65 73 74 20 70 72  } \.].do_test pr
5170: 61 67 6d 61 2d 36 2e 38 20 7b 0a 20 20 65 78 65  agma-6.8 {.  exe
5180: 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54  csql {.    CREAT
5190: 45 20 54 41 42 4c 45 20 74 36 38 28 61 2c 62 2c  E TABLE t68(a,b,
51a0: 63 2c 50 52 49 4d 41 52 59 20 4b 45 59 28 61 2c  c,PRIMARY KEY(a,
51b0: 62 2c 61 2c 63 29 29 3b 0a 20 20 20 20 50 52 41  b,a,c));.    PRA
51c0: 47 4d 41 20 74 61 62 6c 65 5f 69 6e 66 6f 28 74  GMA table_info(t
51d0: 36 38 29 3b 0a 20 20 7d 0a 7d 20 5b 63 6f 6e 63  68);.  }.} [conc
51e0: 61 74 20 5c 0a 20 20 7b 30 20 61 20 7b 7d 20 30  at \.  {0 a {} 0
51f0: 20 7b 7d 20 31 7d 20 5c 0a 20 20 7b 31 20 62 20   {} 1} \.  {1 b 
5200: 7b 7d 20 30 20 7b 7d 20 32 7d 20 5c 0a 20 20 7b  {} 0 {} 2} \.  {
5210: 32 20 63 20 7b 7d 20 30 20 7b 7d 20 34 7d 20 5c  2 c {} 0 {} 4} \
5220: 0a 5d 0a 7d 20 3b 23 20 69 66 63 61 70 61 62 6c  .].} ;# ifcapabl
5230: 65 20 73 63 68 65 6d 61 5f 70 72 61 67 6d 61 73  e schema_pragmas
5240: 0a 23 20 4d 69 73 63 65 6c 6c 61 6e 65 6f 75 73  .# Miscellaneous
5250: 20 74 65 73 74 73 0a 23 0a 69 66 63 61 70 61 62   tests.#.ifcapab
5260: 6c 65 20 73 63 68 65 6d 61 5f 70 72 61 67 6d 61  le schema_pragma
5270: 73 20 7b 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f  s {.# EVIDENCE-O
5280: 46 3a 20 52 2d 36 34 31 30 33 2d 31 37 37 37 36  F: R-64103-17776
5290: 20 50 52 41 47 4d 41 20 73 63 68 65 6d 61 2e 69   PRAGMA schema.i
52a0: 6e 64 65 78 5f 6c 69 73 74 28 74 61 62 6c 65 2d  ndex_list(table-
52b0: 6e 61 6d 65 29 3b 20 54 68 69 73 0a 23 20 70 72  name); This.# pr
52c0: 61 67 6d 61 20 72 65 74 75 72 6e 73 20 6f 6e 65  agma returns one
52d0: 20 72 6f 77 20 66 6f 72 20 65 61 63 68 20 69 6e   row for each in
52e0: 64 65 78 20 61 73 73 6f 63 69 61 74 65 64 20 77  dex associated w
52f0: 69 74 68 20 74 68 65 20 67 69 76 65 6e 20 74 61  ith the given ta
5300: 62 6c 65 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 70  ble..#.do_test p
5310: 72 61 67 6d 61 2d 37 2e 31 2e 31 20 7b 0a 20 20  ragma-7.1.1 {.  
5320: 23 20 4d 61 6b 65 20 73 75 72 65 20 61 20 70 72  # Make sure a pr
5330: 61 67 6d 61 20 6b 6e 6f 77 73 20 74 6f 20 72 65  agma knows to re
5340: 61 64 20 74 68 65 20 73 63 68 65 6d 61 20 69 66  ad the schema if
5350: 20 69 74 20 6e 65 65 64 73 20 74 6f 0a 20 20 64   it needs to.  d
5360: 62 20 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74 65  b close.  sqlite
5370: 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20 63  3 db test.db.  c
5380: 61 70 74 75 72 65 5f 70 72 61 67 6d 61 20 64 62  apture_pragma db
5390: 20 6f 75 74 20 22 50 52 41 47 4d 41 20 69 6e 64   out "PRAGMA ind
53a0: 65 78 5f 6c 69 73 74 28 74 33 29 22 0a 20 20 64  ex_list(t3)".  d
53b0: 62 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 6e  b eval {SELECT n
53c0: 61 6d 65 2c 20 22 6f 72 69 67 69 6e 22 20 46 52  ame, "origin" FR
53d0: 4f 4d 20 6f 75 74 20 4f 52 44 45 52 20 42 59 20  OM out ORDER BY 
53e0: 6e 61 6d 65 20 44 45 53 43 7d 0a 7d 20 7b 74 33  name DESC}.} {t3
53f0: 69 31 20 63 20 73 71 6c 69 74 65 5f 61 75 74 6f  i1 c sqlite_auto
5400: 69 6e 64 65 78 5f 74 33 5f 31 20 75 7d 0a 64 6f  index_t3_1 u}.do
5410: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 37 2e 31  _test pragma-7.1
5420: 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .2 {.  execsql {
5430: 0a 20 20 20 20 70 72 61 67 6d 61 20 69 6e 64 65  .    pragma inde
5440: 78 5f 6c 69 73 74 28 74 33 5f 62 6f 67 75 73 29  x_list(t3_bogus)
5450: 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 7d 20 3b 23 20  ;.  }.} {}.} ;# 
5460: 69 66 63 61 70 61 62 6c 65 20 73 63 68 65 6d 61  ifcapable schema
5470: 5f 70 72 61 67 6d 61 73 0a 69 66 63 61 70 61 62  _pragmas.ifcapab
5480: 6c 65 20 7b 75 74 66 31 36 7d 20 7b 0a 20 20 69  le {utf16} {.  i
5490: 66 20 7b 5b 70 65 72 6d 75 74 61 74 69 6f 6e 5d  f {[permutation]
54a0: 20 3d 3d 20 22 22 7d 20 7b 0a 20 20 20 20 64 6f   == ""} {.    do
54b0: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 37 2e 32  _test pragma-7.2
54c0: 20 7b 0a 20 20 20 20 20 20 64 62 20 63 6c 6f 73   {.      db clos
54d0: 65 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 20  e.      sqlite3 
54e0: 64 62 20 74 65 73 74 2e 64 62 0a 20 20 20 20 20  db test.db.     
54f0: 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20   catchsql {.    
5500: 20 20 20 20 70 72 61 67 6d 61 20 65 6e 63 6f 64      pragma encod
5510: 69 6e 67 3d 62 6f 67 75 73 3b 0a 20 20 20 20 20  ing=bogus;.     
5520: 20 7d 0a 20 20 20 20 7d 20 7b 31 20 7b 75 6e 73   }.    } {1 {uns
5530: 75 70 70 6f 72 74 65 64 20 65 6e 63 6f 64 69 6e  upported encodin
5540: 67 3a 20 62 6f 67 75 73 7d 7d 0a 20 20 7d 0a 7d  g: bogus}}.  }.}
5550: 0a 69 66 63 61 70 61 62 6c 65 20 74 65 6d 70 64  .ifcapable tempd
5560: 62 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 70 72  b {.  do_test pr
5570: 61 67 6d 61 2d 37 2e 33 20 7b 0a 20 20 20 20 64  agma-7.3 {.    d
5580: 62 20 63 6c 6f 73 65 0a 20 20 20 20 73 71 6c 69  b close.    sqli
5590: 74 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20  te3 db test.db. 
55a0: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
55b0: 20 20 20 70 72 61 67 6d 61 20 6c 6f 63 6b 5f 73     pragma lock_s
55c0: 74 61 74 75 73 3b 0a 20 20 20 20 7d 0a 20 20 7d  tatus;.    }.  }
55d0: 20 7b 6d 61 69 6e 20 75 6e 6c 6f 63 6b 65 64 20   {main unlocked 
55e0: 74 65 6d 70 20 63 6c 6f 73 65 64 7d 0a 7d 20 65  temp closed}.} e
55f0: 6c 73 65 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20  lse {.  do_test 
5600: 70 72 61 67 6d 61 2d 37 2e 33 20 7b 0a 20 20 20  pragma-7.3 {.   
5610: 20 64 62 20 63 6c 6f 73 65 0a 20 20 20 20 73 71   db close.    sq
5620: 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64 62  lite3 db test.db
5630: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
5640: 20 20 20 20 20 70 72 61 67 6d 61 20 6c 6f 63 6b       pragma lock
5650: 5f 73 74 61 74 75 73 3b 0a 20 20 20 20 7d 0a 20  _status;.    }. 
5660: 20 7d 20 7b 6d 61 69 6e 20 75 6e 6c 6f 63 6b 65   } {main unlocke
5670: 64 7d 0a 7d 0a 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d  d}.}...#--------
5680: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5690: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
56a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
56b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23  --------------.#
56c0: 20 54 65 73 74 20 63 61 73 65 73 20 70 72 61 67   Test cases prag
56d0: 6d 61 2d 38 2e 2a 20 74 65 73 74 20 74 68 65 20  ma-8.* test the 
56e0: 22 50 52 41 47 4d 41 20 73 63 68 65 6d 61 5f 76  "PRAGMA schema_v
56f0: 65 72 73 69 6f 6e 22 20 61 6e 64 20 22 50 52 41  ersion" and "PRA
5700: 47 4d 41 0a 23 20 75 73 65 72 5f 76 65 72 73 69  GMA.# user_versi
5710: 6f 6e 22 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a  on" statements..
5720: 23 0a 23 20 70 72 61 67 6d 61 2d 38 2e 31 3a 20  #.# pragma-8.1: 
5730: 50 52 41 47 4d 41 20 73 63 68 65 6d 61 5f 76 65  PRAGMA schema_ve
5740: 72 73 69 6f 6e 0a 23 20 70 72 61 67 6d 61 2d 38  rsion.# pragma-8
5750: 2e 32 3a 20 50 52 41 47 4d 41 20 75 73 65 72 5f  .2: PRAGMA user_
5760: 76 65 72 73 69 6f 6e 0a 23 0a 0a 69 66 63 61 70  version.#..ifcap
5770: 61 62 6c 65 20 73 63 68 65 6d 61 5f 76 65 72 73  able schema_vers
5780: 69 6f 6e 20 7b 0a 0a 23 20 46 69 72 73 74 20 63  ion {..# First c
5790: 68 65 63 6b 20 74 68 61 74 20 77 65 20 63 61 6e  heck that we can
57a0: 20 73 65 74 20 74 68 65 20 73 63 68 65 6d 61 20   set the schema 
57b0: 76 65 72 73 69 6f 6e 20 61 6e 64 20 74 68 65 6e  version and then
57c0: 20 72 65 74 72 69 65 76 65 20 74 68 65 0a 23 20   retrieve the.# 
57d0: 73 61 6d 65 20 76 61 6c 75 65 2e 0a 64 6f 5f 74  same value..do_t
57e0: 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e 31  est pragma-8.1.1
57f0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
5800: 20 20 20 50 52 41 47 4d 41 20 73 63 68 65 6d 61     PRAGMA schema
5810: 5f 76 65 72 73 69 6f 6e 20 3d 20 31 30 35 3b 0a  _version = 105;.
5820: 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74    }.} {}.do_test
5830: 20 70 72 61 67 6d 61 2d 38 2e 31 2e 32 20 7b 0a   pragma-8.1.2 {.
5840: 20 20 65 78 65 63 73 71 6c 32 20 7b 0a 20 20 20    execsql2 {.   
5850: 20 50 52 41 47 4d 41 20 73 63 68 65 6d 61 5f 76   PRAGMA schema_v
5860: 65 72 73 69 6f 6e 3b 0a 20 20 7d 0a 7d 20 7b 73  ersion;.  }.} {s
5870: 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 20 31 30  chema_version 10
5880: 35 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  5}.do_test pragm
5890: 61 2d 38 2e 31 2e 33 20 7b 0a 20 20 65 78 65 63  a-8.1.3 {.  exec
58a0: 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41  sql {.    PRAGMA
58b0: 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 20   schema_version 
58c0: 3d 20 31 30 36 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a  = 106;.  }.} {}.
58d0: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38  do_test pragma-8
58e0: 2e 31 2e 34 20 7b 0a 20 20 65 78 65 63 73 71 6c  .1.4 {.  execsql
58f0: 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 73 63   {.    PRAGMA sc
5900: 68 65 6d 61 5f 76 65 72 73 69 6f 6e 3b 0a 20 20  hema_version;.  
5910: 7d 0a 7d 20 31 30 36 0a 0a 23 20 43 68 65 63 6b  }.} 106..# Check
5920: 20 74 68 61 74 20 63 72 65 61 74 69 6e 67 20 61   that creating a
5930: 20 74 61 62 6c 65 20 6d 6f 64 69 66 69 65 73 20   table modifies 
5940: 74 68 65 20 73 63 68 65 6d 61 2d 76 65 72 73 69  the schema-versi
5950: 6f 6e 20 28 74 68 69 73 20 69 73 20 72 65 61 6c  on (this is real
5960: 6c 79 0a 23 20 74 6f 20 76 65 72 69 66 79 20 74  ly.# to verify t
5970: 68 61 74 20 74 68 65 20 76 61 6c 75 65 20 62 65  hat the value be
5980: 69 6e 67 20 72 65 61 64 20 69 73 20 69 6e 20 66  ing read is in f
5990: 61 63 74 20 74 68 65 20 73 63 68 65 6d 61 20 76  act the schema v
59a0: 65 72 73 69 6f 6e 29 2e 0a 64 6f 5f 74 65 73 74  ersion)..do_test
59b0: 20 70 72 61 67 6d 61 2d 38 2e 31 2e 35 20 7b 0a   pragma-8.1.5 {.
59c0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
59d0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 34 28  CREATE TABLE t4(
59e0: 61 2c 20 62 2c 20 63 29 3b 0a 20 20 20 20 49 4e  a, b, c);.    IN
59f0: 53 45 52 54 20 49 4e 54 4f 20 74 34 20 56 41 4c  SERT INTO t4 VAL
5a00: 55 45 53 28 31 2c 20 32 2c 20 33 29 3b 0a 20 20  UES(1, 2, 3);.  
5a10: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
5a20: 74 34 3b 0a 20 20 7d 0a 7d 20 7b 31 20 32 20 33  t4;.  }.} {1 2 3
5a30: 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  }.do_test pragma
5a40: 2d 38 2e 31 2e 36 20 7b 0a 20 20 65 78 65 63 73  -8.1.6 {.  execs
5a50: 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20  ql {.    PRAGMA 
5a60: 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 3b 0a  schema_version;.
5a70: 20 20 7d 0a 7d 20 31 30 37 0a 0a 23 20 4e 6f 77    }.} 107..# Now
5a80: 20 6f 70 65 6e 20 61 20 73 65 63 6f 6e 64 20 63   open a second c
5a90: 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 74 68 65  onnection to the
5aa0: 20 64 61 74 61 62 61 73 65 2e 20 45 6e 73 75 72   database. Ensur
5ab0: 65 20 74 68 61 74 20 63 68 61 6e 67 69 6e 67 20  e that changing 
5ac0: 74 68 65 0a 23 20 73 63 68 65 6d 61 2d 76 65 72  the.# schema-ver
5ad0: 73 69 6f 6e 20 75 73 69 6e 67 20 74 68 65 20 66  sion using the f
5ae0: 69 72 73 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  irst connection 
5af0: 66 6f 72 63 65 73 20 74 68 65 20 73 65 63 6f 6e  forces the secon
5b00: 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 0a 23 20 74  d connection.# t
5b10: 6f 20 72 65 6c 6f 61 64 20 74 68 65 20 73 63 68  o reload the sch
5b20: 65 6d 61 2e 20 54 68 69 73 20 68 61 73 20 74 6f  ema. This has to
5b30: 20 62 65 20 64 6f 6e 65 20 75 73 69 6e 67 20 74   be done using t
5b40: 68 65 20 43 2d 41 50 49 20 74 65 73 74 20 66 75  he C-API test fu
5b50: 6e 63 74 69 6f 6e 73 2c 0a 23 20 62 65 63 61 75  nctions,.# becau
5b60: 73 65 20 74 68 65 20 54 43 4c 20 41 50 49 20 61  se the TCL API a
5b70: 63 63 6f 75 6e 74 73 20 66 6f 72 20 53 43 48 45  ccounts for SCHE
5b80: 4d 41 5f 45 52 52 4f 52 20 61 6e 64 20 72 65 74  MA_ERROR and ret
5b90: 72 69 65 73 20 74 68 65 20 71 75 65 72 79 2e 0a  ries the query..
5ba0: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38  do_test pragma-8
5bb0: 2e 31 2e 37 20 7b 0a 20 20 73 71 6c 69 74 65 33  .1.7 {.  sqlite3
5bc0: 20 64 62 32 20 74 65 73 74 2e 64 62 3b 20 73 65   db2 test.db; se
5bd0: 74 20 3a 3a 44 42 32 20 5b 73 71 6c 69 74 65 33  t ::DB2 [sqlite3
5be0: 5f 63 6f 6e 6e 65 63 74 69 6f 6e 5f 70 6f 69 6e  _connection_poin
5bf0: 74 65 72 20 64 62 32 5d 0a 20 20 65 78 65 63 73  ter db2].  execs
5c00: 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  ql {.    SELECT 
5c10: 2a 20 46 52 4f 4d 20 74 34 3b 0a 20 20 7d 20 64  * FROM t4;.  } d
5c20: 62 32 0a 7d 20 7b 31 20 32 20 33 7d 0a 64 6f 5f  b2.} {1 2 3}.do_
5c30: 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e  test pragma-8.1.
5c40: 38 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  8 {.  execsql {.
5c50: 20 20 20 20 50 52 41 47 4d 41 20 73 63 68 65 6d      PRAGMA schem
5c60: 61 5f 76 65 72 73 69 6f 6e 20 3d 20 31 30 38 3b  a_version = 108;
5c70: 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73  .  }.} {}.do_tes
5c80: 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e 39 20 7b  t pragma-8.1.9 {
5c90: 0a 20 20 73 65 74 20 3a 3a 53 54 4d 54 20 5b 73  .  set ::STMT [s
5ca0: 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 20 24  qlite3_prepare $
5cb0: 3a 3a 44 42 32 20 22 53 45 4c 45 43 54 20 2a 20  ::DB2 "SELECT * 
5cc0: 46 52 4f 4d 20 74 34 22 20 2d 31 20 44 55 4d 4d  FROM t4" -1 DUMM
5cd0: 59 5d 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65  Y].  sqlite3_ste
5ce0: 70 20 24 3a 3a 53 54 4d 54 0a 7d 20 53 51 4c 49  p $::STMT.} SQLI
5cf0: 54 45 5f 45 52 52 4f 52 0a 64 6f 5f 74 65 73 74  TE_ERROR.do_test
5d00: 20 70 72 61 67 6d 61 2d 38 2e 31 2e 31 30 20 7b   pragma-8.1.10 {
5d10: 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c  .  sqlite3_final
5d20: 69 7a 65 20 24 3a 3a 53 54 4d 54 0a 7d 20 53 51  ize $::STMT.} SQ
5d30: 4c 49 54 45 5f 53 43 48 45 4d 41 0a 0a 23 20 4d  LITE_SCHEMA..# M
5d40: 61 6b 65 20 73 75 72 65 20 74 68 65 20 73 63 68  ake sure the sch
5d50: 65 6d 61 2d 76 65 72 73 69 6f 6e 20 63 61 6e 20  ema-version can 
5d60: 62 65 20 6d 61 6e 69 70 75 6c 61 74 65 64 20 69  be manipulated i
5d70: 6e 20 61 6e 20 61 74 74 61 63 68 65 64 20 64 61  n an attached da
5d80: 74 61 62 61 73 65 2e 0a 66 6f 72 63 65 64 65 6c  tabase..forcedel
5d90: 65 74 65 20 74 65 73 74 32 2e 64 62 0a 66 6f 72  ete test2.db.for
5da0: 63 65 64 65 6c 65 74 65 20 74 65 73 74 32 2e 64  cedelete test2.d
5db0: 62 2d 6a 6f 75 72 6e 61 6c 0a 69 66 63 61 70 61  b-journal.ifcapa
5dc0: 62 6c 65 20 61 74 74 61 63 68 20 7b 0a 20 20 64  ble attach {.  d
5dd0: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e  o_test pragma-8.
5de0: 31 2e 31 31 20 7b 0a 20 20 20 20 65 78 65 63 73  1.11 {.    execs
5df0: 71 6c 20 7b 0a 20 20 20 20 20 20 41 54 54 41 43  ql {.      ATTAC
5e00: 48 20 27 74 65 73 74 32 2e 64 62 27 20 41 53 20  H 'test2.db' AS 
5e10: 61 75 78 3b 0a 20 20 20 20 20 20 43 52 45 41 54  aux;.      CREAT
5e20: 45 20 54 41 42 4c 45 20 61 75 78 2e 74 31 28 61  E TABLE aux.t1(a
5e30: 2c 20 62 2c 20 63 29 3b 0a 20 20 20 20 20 20 50  , b, c);.      P
5e40: 52 41 47 4d 41 20 61 75 78 2e 73 63 68 65 6d 61  RAGMA aux.schema
5e50: 5f 76 65 72 73 69 6f 6e 20 3d 20 32 30 35 3b 0a  _version = 205;.
5e60: 20 20 20 20 7d 0a 20 20 7d 20 7b 7d 0a 20 20 64      }.  } {}.  d
5e70: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e  o_test pragma-8.
5e80: 31 2e 31 32 20 7b 0a 20 20 20 20 65 78 65 63 73  1.12 {.    execs
5e90: 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d  ql {.      PRAGM
5ea0: 41 20 61 75 78 2e 73 63 68 65 6d 61 5f 76 65 72  A aux.schema_ver
5eb0: 73 69 6f 6e 3b 0a 20 20 20 20 7d 0a 20 20 7d 20  sion;.    }.  } 
5ec0: 32 30 35 0a 7d 0a 64 6f 5f 74 65 73 74 20 70 72  205.}.do_test pr
5ed0: 61 67 6d 61 2d 38 2e 31 2e 31 33 20 7b 0a 20 20  agma-8.1.13 {.  
5ee0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52  execsql {.    PR
5ef0: 41 47 4d 41 20 73 63 68 65 6d 61 5f 76 65 72 73  AGMA schema_vers
5f00: 69 6f 6e 3b 0a 20 20 7d 0a 7d 20 31 30 38 0a 0a  ion;.  }.} 108..
5f10: 23 20 41 6e 64 20 63 68 65 63 6b 20 74 68 61 74  # And check that
5f20: 20 6d 6f 64 69 66 79 69 6e 67 20 74 68 65 20 73   modifying the s
5f30: 63 68 65 6d 61 2d 76 65 72 73 69 6f 6e 20 69 6e  chema-version in
5f40: 20 61 6e 20 61 74 74 61 63 68 65 64 20 64 61 74   an attached dat
5f50: 61 62 61 73 65 0a 23 20 66 6f 72 63 65 73 20 74  abase.# forces t
5f60: 68 65 20 73 65 63 6f 6e 64 20 63 6f 6e 6e 65 63  he second connec
5f70: 74 69 6f 6e 20 74 6f 20 72 65 6c 6f 61 64 20 74  tion to reload t
5f80: 68 65 20 73 63 68 65 6d 61 2e 0a 69 66 63 61 70  he schema..ifcap
5f90: 61 62 6c 65 20 61 74 74 61 63 68 20 7b 0a 20 20  able attach {.  
5fa0: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38  do_test pragma-8
5fb0: 2e 31 2e 31 34 20 7b 0a 20 20 20 20 73 71 6c 69  .1.14 {.    sqli
5fc0: 74 65 33 20 64 62 32 20 74 65 73 74 2e 64 62 3b  te3 db2 test.db;
5fd0: 20 73 65 74 20 3a 3a 44 42 32 20 5b 73 71 6c 69   set ::DB2 [sqli
5fe0: 74 65 33 5f 63 6f 6e 6e 65 63 74 69 6f 6e 5f 70  te3_connection_p
5ff0: 6f 69 6e 74 65 72 20 64 62 32 5d 0a 20 20 20 20  ointer db2].    
6000: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
6010: 41 54 54 41 43 48 20 27 74 65 73 74 32 2e 64 62  ATTACH 'test2.db
6020: 27 20 41 53 20 61 75 78 3b 0a 20 20 20 20 20 20  ' AS aux;.      
6030: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 61 75  SELECT * FROM au
6040: 78 2e 74 31 3b 0a 20 20 20 20 7d 20 64 62 32 0a  x.t1;.    } db2.
6050: 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65 73 74    } {}.  do_test
6060: 20 70 72 61 67 6d 61 2d 38 2e 31 2e 31 35 20 7b   pragma-8.1.15 {
6070: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
6080: 20 20 20 20 20 50 52 41 47 4d 41 20 61 75 78 2e       PRAGMA aux.
6090: 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 20 3d  schema_version =
60a0: 20 32 30 36 3b 0a 20 20 20 20 7d 0a 20 20 7d 20   206;.    }.  } 
60b0: 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61  {}.  do_test pra
60c0: 67 6d 61 2d 38 2e 31 2e 31 36 20 7b 0a 20 20 20  gma-8.1.16 {.   
60d0: 20 73 65 74 20 3a 3a 53 54 4d 54 20 5b 73 71 6c   set ::STMT [sql
60e0: 69 74 65 33 5f 70 72 65 70 61 72 65 20 24 3a 3a  ite3_prepare $::
60f0: 44 42 32 20 22 53 45 4c 45 43 54 20 2a 20 46 52  DB2 "SELECT * FR
6100: 4f 4d 20 61 75 78 2e 74 31 22 20 2d 31 20 44 55  OM aux.t1" -1 DU
6110: 4d 4d 59 5d 0a 20 20 20 20 73 71 6c 69 74 65 33  MMY].    sqlite3
6120: 5f 73 74 65 70 20 24 3a 3a 53 54 4d 54 0a 20 20  _step $::STMT.  
6130: 7d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 0a 20  } SQLITE_ERROR. 
6140: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
6150: 38 2e 31 2e 31 37 20 7b 0a 20 20 20 20 73 71 6c  8.1.17 {.    sql
6160: 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24 3a  ite3_finalize $:
6170: 3a 53 54 4d 54 0a 20 20 7d 20 53 51 4c 49 54 45  :STMT.  } SQLITE
6180: 5f 53 43 48 45 4d 41 0a 20 20 64 6f 5f 74 65 73  _SCHEMA.  do_tes
6190: 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e 31 38 20  t pragma-8.1.18 
61a0: 7b 0a 20 20 20 20 64 62 32 20 63 6c 6f 73 65 0a  {.    db2 close.
61b0: 20 20 7d 20 7b 7d 0a 7d 0a 0a 23 20 4e 6f 77 20    } {}.}..# Now 
61c0: 74 65 73 74 20 74 68 61 74 20 74 68 65 20 75 73  test that the us
61d0: 65 72 2d 76 65 72 73 69 6f 6e 20 63 61 6e 20 62  er-version can b
61e0: 65 20 72 65 61 64 20 61 6e 64 20 77 72 69 74 74  e read and writt
61f0: 65 6e 20 28 61 6e 64 20 74 68 61 74 20 77 65 20  en (and that we 
6200: 61 72 65 6e 27 74 0a 23 20 61 63 63 69 64 65 6e  aren't.# acciden
6210: 74 61 6c 6c 79 20 6d 61 6e 69 70 75 6c 61 74 69  tally manipulati
6220: 6e 67 20 74 68 65 20 73 63 68 65 6d 61 2d 76 65  ng the schema-ve
6230: 72 73 69 6f 6e 20 69 6e 73 74 65 61 64 29 2e 0a  rsion instead)..
6240: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38  do_test pragma-8
6250: 2e 32 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c  .2.1 {.  execsql
6260: 32 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 75  2 {.    PRAGMA u
6270: 73 65 72 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 7d  ser_version;.  }
6280: 0a 7d 20 7b 75 73 65 72 5f 76 65 72 73 69 6f 6e  .} {user_version
6290: 20 30 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67   0}.do_test prag
62a0: 6d 61 2d 38 2e 32 2e 32 20 7b 0a 20 20 65 78 65  ma-8.2.2 {.  exe
62b0: 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d  csql {.    PRAGM
62c0: 41 20 75 73 65 72 5f 76 65 72 73 69 6f 6e 20 3d  A user_version =
62d0: 20 32 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f   2;.  }.} {}.do_
62e0: 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 32 2e  test pragma-8.2.
62f0: 33 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 32  3.1 {.  execsql2
6300: 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 75 73   {.    PRAGMA us
6310: 65 72 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 7d 0a  er_version;.  }.
6320: 7d 20 7b 75 73 65 72 5f 76 65 72 73 69 6f 6e 20  } {user_version 
6330: 32 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  2}.do_test pragm
6340: 61 2d 38 2e 32 2e 33 2e 32 20 7b 0a 20 20 64 62  a-8.2.3.2 {.  db
6350: 20 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74 65 33   close.  sqlite3
6360: 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20 65 78   db test.db.  ex
6370: 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47  ecsql {.    PRAG
6380: 4d 41 20 75 73 65 72 5f 76 65 72 73 69 6f 6e 3b  MA user_version;
6390: 0a 20 20 7d 0a 7d 20 7b 32 7d 0a 64 6f 5f 74 65  .  }.} {2}.do_te
63a0: 73 74 20 70 72 61 67 6d 61 2d 38 2e 32 2e 34 2e  st pragma-8.2.4.
63b0: 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  1 {.  execsql {.
63c0: 20 20 20 20 50 52 41 47 4d 41 20 73 63 68 65 6d      PRAGMA schem
63d0: 61 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 7d 0a 7d  a_version;.  }.}
63e0: 20 7b 31 30 38 7d 0a 69 66 63 61 70 61 62 6c 65   {108}.ifcapable
63f0: 20 76 61 63 75 75 6d 20 7b 0a 20 20 64 6f 5f 74   vacuum {.  do_t
6400: 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 32 2e 34  est pragma-8.2.4
6410: 2e 32 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  .2 {.    execsql
6420: 20 7b 0a 20 20 20 20 20 20 56 41 43 55 55 4d 3b   {.      VACUUM;
6430: 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 75 73  .      PRAGMA us
6440: 65 72 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 20 20  er_version;.    
6450: 7d 0a 20 20 7d 20 7b 32 7d 0a 20 20 64 6f 5f 74  }.  } {2}.  do_t
6460: 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 32 2e 34  est pragma-8.2.4
6470: 2e 33 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  .3 {.    execsql
6480: 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20   {.      PRAGMA 
6490: 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 3b 0a  schema_version;.
64a0: 20 20 20 20 7d 0a 20 20 7d 20 7b 31 30 39 7d 0a      }.  } {109}.
64b0: 7d 0a 0a 69 66 63 61 70 61 62 6c 65 20 61 74 74  }..ifcapable att
64c0: 61 63 68 20 7b 0a 20 20 64 62 20 65 76 61 6c 20  ach {.  db eval 
64d0: 7b 41 54 54 41 43 48 20 27 74 65 73 74 32 2e 64  {ATTACH 'test2.d
64e0: 62 27 20 41 53 20 61 75 78 7d 0a 20 20 0a 20 20  b' AS aux}.  .  
64f0: 23 20 43 68 65 63 6b 20 74 68 61 74 20 74 68 65  # Check that the
6500: 20 75 73 65 72 2d 76 65 72 73 69 6f 6e 20 69 6e   user-version in
6510: 20 74 68 65 20 61 75 78 69 6c 61 72 79 20 64 61   the auxilary da
6520: 74 61 62 61 73 65 20 63 61 6e 20 62 65 20 6d 61  tabase can be ma
6530: 6e 69 70 75 6c 61 74 65 64 20 28 0a 20 20 23 20  nipulated (.  # 
6540: 61 6e 64 20 74 68 61 74 20 77 65 20 61 72 65 6e  and that we aren
6550: 27 74 20 61 63 63 69 64 65 6e 74 61 6c 6c 79 20  't accidentally 
6560: 6d 61 6e 69 70 75 6c 61 74 69 6e 67 20 74 68 65  manipulating the
6570: 20 73 61 6d 65 20 69 6e 20 74 68 65 20 6d 61 69   same in the mai
6580: 6e 20 64 62 29 2e 0a 20 20 64 6f 5f 74 65 73 74  n db)..  do_test
6590: 20 70 72 61 67 6d 61 2d 38 2e 32 2e 35 20 7b 0a   pragma-8.2.5 {.
65a0: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20      execsql {.  
65b0: 20 20 20 20 50 52 41 47 4d 41 20 61 75 78 2e 75      PRAGMA aux.u
65c0: 73 65 72 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 20  ser_version;.   
65d0: 20 7d 0a 20 20 7d 20 7b 30 7d 0a 20 20 64 6f 5f   }.  } {0}.  do_
65e0: 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 32 2e  test pragma-8.2.
65f0: 36 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  6 {.    execsql 
6600: 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 61  {.      PRAGMA a
6610: 75 78 2e 75 73 65 72 5f 76 65 72 73 69 6f 6e 20  ux.user_version 
6620: 3d 20 33 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b  = 3;.    }.  } {
6630: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67  }.  do_test prag
6640: 6d 61 2d 38 2e 32 2e 37 20 7b 0a 20 20 20 20 65  ma-8.2.7 {.    e
6650: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50  xecsql {.      P
6660: 52 41 47 4d 41 20 61 75 78 2e 75 73 65 72 5f 76  RAGMA aux.user_v
6670: 65 72 73 69 6f 6e 3b 0a 20 20 20 20 7d 0a 20 20  ersion;.    }.  
6680: 7d 20 7b 33 7d 0a 20 20 64 6f 5f 74 65 73 74 20  } {3}.  do_test 
6690: 70 72 61 67 6d 61 2d 38 2e 32 2e 38 20 7b 0a 20  pragma-8.2.8 {. 
66a0: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
66b0: 20 20 20 50 52 41 47 4d 41 20 6d 61 69 6e 2e 75     PRAGMA main.u
66c0: 73 65 72 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 20  ser_version;.   
66d0: 20 7d 0a 20 20 7d 20 7b 32 7d 0a 20 20 0a 20 20   }.  } {2}.  .  
66e0: 23 20 4e 6f 77 20 63 68 65 63 6b 20 74 68 61 74  # Now check that
66f0: 20 61 20 52 4f 4c 4c 42 41 43 4b 20 72 65 73 65   a ROLLBACK rese
6700: 74 73 20 74 68 65 20 75 73 65 72 2d 76 65 72 73  ts the user-vers
6710: 69 6f 6e 20 69 66 20 69 74 20 68 61 73 20 62 65  ion if it has be
6720: 65 6e 20 6d 6f 64 69 66 69 65 64 0a 20 20 23 20  en modified.  # 
6730: 77 69 74 68 69 6e 20 61 20 74 72 61 6e 73 61 63  within a transac
6740: 74 69 6f 6e 2e 0a 20 20 64 6f 5f 74 65 73 74 20  tion..  do_test 
6750: 70 72 61 67 6d 61 2d 38 2e 32 2e 39 20 7b 0a 20  pragma-8.2.9 {. 
6760: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
6770: 20 20 20 42 45 47 49 4e 3b 0a 20 20 20 20 20 20     BEGIN;.      
6780: 50 52 41 47 4d 41 20 61 75 78 2e 75 73 65 72 5f  PRAGMA aux.user_
6790: 76 65 72 73 69 6f 6e 20 3d 20 31 30 3b 0a 20 20  version = 10;.  
67a0: 20 20 20 20 50 52 41 47 4d 41 20 75 73 65 72 5f      PRAGMA user_
67b0: 76 65 72 73 69 6f 6e 20 3d 20 31 31 3b 0a 20 20  version = 11;.  
67c0: 20 20 7d 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f    }.  } {}.  do_
67d0: 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 32 2e  test pragma-8.2.
67e0: 31 30 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  10 {.    execsql
67f0: 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20   {.      PRAGMA 
6800: 61 75 78 2e 75 73 65 72 5f 76 65 72 73 69 6f 6e  aux.user_version
6810: 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 31 30 7d  ;.    }.  } {10}
6820: 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .  do_test pragm
6830: 61 2d 38 2e 32 2e 31 31 20 7b 0a 20 20 20 20 65  a-8.2.11 {.    e
6840: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50  xecsql {.      P
6850: 52 41 47 4d 41 20 6d 61 69 6e 2e 75 73 65 72 5f  RAGMA main.user_
6860: 76 65 72 73 69 6f 6e 3b 0a 20 20 20 20 7d 0a 20  version;.    }. 
6870: 20 7d 20 7b 31 31 7d 0a 20 20 64 6f 5f 74 65 73   } {11}.  do_tes
6880: 74 20 70 72 61 67 6d 61 2d 38 2e 32 2e 31 32 20  t pragma-8.2.12 
6890: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a  {.    execsql {.
68a0: 20 20 20 20 20 20 52 4f 4c 4c 42 41 43 4b 3b 0a        ROLLBACK;.
68b0: 20 20 20 20 20 20 50 52 41 47 4d 41 20 61 75 78        PRAGMA aux
68c0: 2e 75 73 65 72 5f 76 65 72 73 69 6f 6e 3b 0a 20  .user_version;. 
68d0: 20 20 20 7d 0a 20 20 7d 20 7b 33 7d 0a 20 20 64     }.  } {3}.  d
68e0: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e  o_test pragma-8.
68f0: 32 2e 31 33 20 7b 0a 20 20 20 20 65 78 65 63 73  2.13 {.    execs
6900: 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d  ql {.      PRAGM
6910: 41 20 6d 61 69 6e 2e 75 73 65 72 5f 76 65 72 73  A main.user_vers
6920: 69 6f 6e 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b  ion;.    }.  } {
6930: 32 7d 0a 7d 0a 0a 23 20 54 72 79 20 61 20 6e 65  2}.}..# Try a ne
6940: 67 61 74 69 76 65 20 76 61 6c 75 65 20 66 6f 72  gative value for
6950: 20 74 68 65 20 75 73 65 72 2d 76 65 72 73 69 6f   the user-versio
6960: 6e 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  n.do_test pragma
6970: 2d 38 2e 32 2e 31 34 20 7b 0a 20 20 65 78 65 63  -8.2.14 {.  exec
6980: 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41  sql {.    PRAGMA
6990: 20 75 73 65 72 5f 76 65 72 73 69 6f 6e 20 3d 20   user_version = 
69a0: 2d 34 35 30 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64  -450;.  }.} {}.d
69b0: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e  o_test pragma-8.
69c0: 32 2e 31 35 20 7b 0a 20 20 65 78 65 63 73 71 6c  2.15 {.  execsql
69d0: 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 75 73   {.    PRAGMA us
69e0: 65 72 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 7d 0a  er_version;.  }.
69f0: 7d 20 7b 2d 34 35 30 7d 0a 7d 20 3b 20 23 20 69  } {-450}.} ; # i
6a00: 66 63 61 70 61 62 6c 65 20 73 63 68 65 6d 61 5f  fcapable schema_
6a10: 76 65 72 73 69 6f 6e 0a 0a 23 20 43 68 65 63 6b  version..# Check
6a20: 20 74 6f 20 73 65 65 20 69 66 20 54 45 4d 50 5f   to see if TEMP_
6a30: 53 54 4f 52 45 20 69 73 20 6d 65 6d 6f 72 79 20  STORE is memory 
6a40: 6f 72 20 64 69 73 6b 2e 20 20 52 65 74 75 72 6e  or disk.  Return
6a50: 20 73 74 72 69 6e 67 73 0a 23 20 22 6d 65 6d 6f   strings.# "memo
6a60: 72 79 22 20 6f 72 20 22 64 69 73 6b 22 20 61 73  ry" or "disk" as
6a70: 20 61 70 70 72 6f 70 72 69 61 74 65 2e 0a 23 0a   appropriate..#.
6a80: 70 72 6f 63 20 63 68 65 63 6b 5f 74 65 6d 70 5f  proc check_temp_
6a90: 73 74 6f 72 65 20 7b 7d 20 7b 0a 20 20 64 62 20  store {} {.  db 
6aa0: 65 76 61 6c 20 7b 43 52 45 41 54 45 20 54 45 4d  eval {CREATE TEM
6ab0: 50 20 54 41 42 4c 45 20 49 46 20 4e 4f 54 20 45  P TABLE IF NOT E
6ac0: 58 49 53 54 53 20 61 28 62 29 7d 0a 20 20 64 62  XISTS a(b)}.  db
6ad0: 20 65 76 61 6c 20 7b 50 52 41 47 4d 41 20 64 61   eval {PRAGMA da
6ae0: 74 61 62 61 73 65 5f 6c 69 73 74 7d 20 7b 0a 20  tabase_list} {. 
6af0: 20 20 20 69 66 20 7b 24 6e 61 6d 65 3d 3d 22 74     if {$name=="t
6b00: 65 6d 70 22 7d 20 7b 0a 20 20 20 20 20 20 73 65  emp"} {.      se
6b10: 74 20 62 74 20 5b 62 74 72 65 65 5f 66 72 6f 6d  t bt [btree_from
6b20: 5f 64 62 20 64 62 20 31 5d 0a 20 20 20 20 20 20  _db db 1].      
6b30: 69 66 20 7b 5b 62 74 72 65 65 5f 69 73 6d 65 6d  if {[btree_ismem
6b40: 64 62 20 24 62 74 5d 7d 20 7b 0a 20 20 20 20 20  db $bt]} {.     
6b50: 20 20 20 72 65 74 75 72 6e 20 22 6d 65 6d 6f 72     return "memor
6b60: 79 22 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  y".      }.     
6b70: 20 72 65 74 75 72 6e 20 22 64 69 73 6b 22 0a 20   return "disk". 
6b80: 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75 72     }.  }.  retur
6b90: 6e 20 22 75 6e 6b 6e 6f 77 6e 22 0a 7d 0a 0a 23  n "unknown".}..#
6ba0: 20 41 70 70 6c 69 63 61 74 69 6f 6e 5f 49 44 0a   Application_ID.
6bb0: 23 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  #.do_test pragma
6bc0: 2d 38 2e 33 2e 31 20 7b 0a 20 20 65 78 65 63 73  -8.3.1 {.  execs
6bd0: 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20  ql {.    PRAGMA 
6be0: 61 70 70 6c 69 63 61 74 69 6f 6e 5f 69 64 3b 0a  application_id;.
6bf0: 20 20 7d 0a 7d 20 7b 30 7d 0a 64 6f 5f 74 65 73    }.} {0}.do_tes
6c00: 74 20 70 72 61 67 6d 61 2d 38 2e 33 2e 32 20 7b  t pragma-8.3.2 {
6c10: 0a 20 20 65 78 65 63 73 71 6c 20 7b 50 52 41 47  .  execsql {PRAG
6c20: 4d 41 20 41 70 70 6c 69 63 61 74 69 6f 6e 5f 49  MA Application_I
6c30: 44 28 31 32 33 34 35 29 3b 20 50 52 41 47 4d 41  D(12345); PRAGMA
6c40: 20 61 70 70 6c 69 63 61 74 69 6f 6e 5f 69 64 3b   application_id;
6c50: 7d 0a 7d 20 7b 31 32 33 34 35 7d 0a 0a 23 20 54  }.} {12345}..# T
6c60: 65 73 74 20 74 65 6d 70 5f 73 74 6f 72 65 20 61  est temp_store a
6c70: 6e 64 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69  nd temp_store_di
6c80: 72 65 63 74 6f 72 79 20 70 72 61 67 6d 61 73 0a  rectory pragmas.
6c90: 23 0a 69 66 63 61 70 61 62 6c 65 20 70 61 67 65  #.ifcapable page
6ca0: 72 5f 70 72 61 67 6d 61 73 20 7b 0a 64 6f 5f 74  r_pragmas {.do_t
6cb0: 65 73 74 20 70 72 61 67 6d 61 2d 39 2e 31 20 7b  est pragma-9.1 {
6cc0: 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 73 71  .  db close.  sq
6cd0: 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64 62  lite3 db test.db
6ce0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
6cf0: 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f   PRAGMA temp_sto
6d00: 72 65 3b 0a 20 20 7d 0a 7d 20 7b 30 7d 0a 69 66  re;.  }.} {0}.if
6d10: 20 7b 24 54 45 4d 50 5f 53 54 4f 52 45 3c 3d 31   {$TEMP_STORE<=1
6d20: 7d 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 70 72  } {.  do_test pr
6d30: 61 67 6d 61 2d 39 2e 31 2e 31 20 7b 0a 20 20 20  agma-9.1.1 {.   
6d40: 20 63 68 65 63 6b 5f 74 65 6d 70 5f 73 74 6f 72   check_temp_stor
6d50: 65 0a 20 20 7d 20 7b 64 69 73 6b 7d 0a 7d 20 65  e.  } {disk}.} e
6d60: 6c 73 65 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20  lse {.  do_test 
6d70: 70 72 61 67 6d 61 2d 39 2e 31 2e 31 20 7b 0a 20  pragma-9.1.1 {. 
6d80: 20 20 20 63 68 65 63 6b 5f 74 65 6d 70 5f 73 74     check_temp_st
6d90: 6f 72 65 0a 20 20 7d 20 7b 6d 65 6d 6f 72 79 7d  ore.  } {memory}
6da0: 0a 7d 0a 0a 64 6f 5f 74 65 73 74 20 70 72 61 67  .}..do_test prag
6db0: 6d 61 2d 39 2e 32 20 7b 0a 20 20 64 62 20 63 6c  ma-9.2 {.  db cl
6dc0: 6f 73 65 0a 20 20 73 71 6c 69 74 65 33 20 64 62  ose.  sqlite3 db
6dd0: 20 74 65 73 74 2e 64 62 0a 20 20 65 78 65 63 73   test.db.  execs
6de0: 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20  ql {.    PRAGMA 
6df0: 74 65 6d 70 5f 73 74 6f 72 65 3d 66 69 6c 65 3b  temp_store=file;
6e00: 0a 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70  .    PRAGMA temp
6e10: 5f 73 74 6f 72 65 3b 0a 20 20 7d 0a 7d 20 7b 31  _store;.  }.} {1
6e20: 7d 0a 69 66 20 7b 24 54 45 4d 50 5f 53 54 4f 52  }.if {$TEMP_STOR
6e30: 45 3d 3d 33 7d 20 7b 0a 20 20 23 20 57 68 65 6e  E==3} {.  # When
6e40: 20 54 45 4d 50 5f 53 54 4f 52 45 20 69 73 20 33   TEMP_STORE is 3
6e50: 2c 20 61 6c 77 61 79 73 20 75 73 65 20 6d 65 6d  , always use mem
6e60: 6f 72 79 20 72 65 67 61 72 64 6c 65 73 73 20 6f  ory regardless o
6e70: 66 20 70 72 61 67 6d 61 20 73 65 74 74 69 6e 67  f pragma setting
6e80: 73 2e 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61  s..  do_test pra
6e90: 67 6d 61 2d 39 2e 32 2e 31 20 7b 0a 20 20 20 20  gma-9.2.1 {.    
6ea0: 63 68 65 63 6b 5f 74 65 6d 70 5f 73 74 6f 72 65  check_temp_store
6eb0: 0a 20 20 7d 20 7b 6d 65 6d 6f 72 79 7d 0a 7d 20  .  } {memory}.} 
6ec0: 65 6c 73 65 20 7b 0a 20 20 64 6f 5f 74 65 73 74  else {.  do_test
6ed0: 20 70 72 61 67 6d 61 2d 39 2e 32 2e 31 20 7b 0a   pragma-9.2.1 {.
6ee0: 20 20 20 20 63 68 65 63 6b 5f 74 65 6d 70 5f 73      check_temp_s
6ef0: 74 6f 72 65 0a 20 20 7d 20 7b 64 69 73 6b 7d 0a  tore.  } {disk}.
6f00: 7d 0a 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  }..do_test pragm
6f10: 61 2d 39 2e 33 20 7b 0a 20 20 64 62 20 63 6c 6f  a-9.3 {.  db clo
6f20: 73 65 0a 20 20 73 71 6c 69 74 65 33 20 64 62 20  se.  sqlite3 db 
6f30: 74 65 73 74 2e 64 62 0a 20 20 65 78 65 63 73 71  test.db.  execsq
6f40: 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 74  l {.    PRAGMA t
6f50: 65 6d 70 5f 73 74 6f 72 65 3d 6d 65 6d 6f 72 79  emp_store=memory
6f60: 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d  ;.    PRAGMA tem
6f70: 70 5f 73 74 6f 72 65 3b 0a 20 20 7d 0a 7d 20 7b  p_store;.  }.} {
6f80: 32 7d 0a 69 66 20 7b 24 54 45 4d 50 5f 53 54 4f  2}.if {$TEMP_STO
6f90: 52 45 3d 3d 30 7d 20 7b 0a 20 20 23 20 57 68 65  RE==0} {.  # Whe
6fa0: 6e 20 54 45 4d 50 5f 53 54 4f 52 45 20 69 73 20  n TEMP_STORE is 
6fb0: 30 2c 20 61 6c 77 61 79 73 20 75 73 65 20 74 68  0, always use th
6fc0: 65 20 64 69 73 6b 20 72 65 67 61 72 64 6c 65 73  e disk regardles
6fd0: 73 20 6f 66 20 70 72 61 67 6d 61 20 73 65 74 74  s of pragma sett
6fe0: 69 6e 67 73 2e 0a 20 20 64 6f 5f 74 65 73 74 20  ings..  do_test 
6ff0: 70 72 61 67 6d 61 2d 39 2e 33 2e 31 20 7b 0a 20  pragma-9.3.1 {. 
7000: 20 20 20 63 68 65 63 6b 5f 74 65 6d 70 5f 73 74     check_temp_st
7010: 6f 72 65 0a 20 20 7d 20 7b 64 69 73 6b 7d 0a 7d  ore.  } {disk}.}
7020: 20 65 6c 73 65 20 7b 0a 20 20 64 6f 5f 74 65 73   else {.  do_tes
7030: 74 20 70 72 61 67 6d 61 2d 39 2e 33 2e 31 20 7b  t pragma-9.3.1 {
7040: 0a 20 20 20 20 63 68 65 63 6b 5f 74 65 6d 70 5f  .    check_temp_
7050: 73 74 6f 72 65 0a 20 20 7d 20 7b 6d 65 6d 6f 72  store.  } {memor
7060: 79 7d 0a 7d 0a 0a 64 6f 5f 74 65 73 74 20 70 72  y}.}..do_test pr
7070: 61 67 6d 61 2d 39 2e 34 20 7b 0a 20 20 65 78 65  agma-9.4 {.  exe
7080: 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d  csql {.    PRAGM
7090: 41 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72  A temp_store_dir
70a0: 65 63 74 6f 72 79 3b 0a 20 20 7d 0a 7d 20 7b 7d  ectory;.  }.} {}
70b0: 0a 69 66 63 61 70 61 62 6c 65 20 77 73 64 20 7b  .ifcapable wsd {
70c0: 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .  do_test pragm
70d0: 61 2d 39 2e 35 20 7b 0a 20 20 20 20 73 65 74 20  a-9.5 {.    set 
70e0: 70 77 64 20 5b 73 74 72 69 6e 67 20 6d 61 70 20  pwd [string map 
70f0: 7b 27 20 27 27 7d 20 5b 66 69 6c 65 20 6e 61 74  {' ''} [file nat
7100: 69 76 65 6e 61 6d 65 20 5b 67 65 74 5f 70 77 64  ivename [get_pwd
7110: 5d 5d 5d 0a 20 20 20 20 65 78 65 63 73 71 6c 20  ]]].    execsql 
7120: 22 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 74  ".      PRAGMA t
7130: 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74  emp_store_direct
7140: 6f 72 79 3d 27 24 70 77 64 27 3b 0a 20 20 20 20  ory='$pwd';.    
7150: 22 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65  ".  } {}.  do_te
7160: 73 74 20 70 72 61 67 6d 61 2d 39 2e 36 20 7b 0a  st pragma-9.6 {.
7170: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 20 0a 20      execsql { . 
7180: 20 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70       PRAGMA temp
7190: 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79  _store_directory
71a0: 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 5b 6c 69 73  ;.    }.  } [lis
71b0: 74 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61  t [file nativena
71c0: 6d 65 20 5b 67 65 74 5f 70 77 64 5d 5d 5d 0a 20  me [get_pwd]]]. 
71d0: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
71e0: 39 2e 37 20 7b 0a 20 20 20 20 63 61 74 63 68 73  9.7 {.    catchs
71f0: 71 6c 20 7b 20 0a 20 20 20 20 20 20 50 52 41 47  ql { .      PRAG
7200: 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69  MA temp_store_di
7210: 72 65 63 74 6f 72 79 3d 27 2f 4e 4f 4e 2f 45 58  rectory='/NON/EX
7220: 49 53 54 45 4e 54 2f 50 41 54 48 2f 46 4f 4f 42  ISTENT/PATH/FOOB
7230: 41 52 27 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b  AR';.    }.  } {
7240: 31 20 7b 6e 6f 74 20 61 20 77 72 69 74 61 62 6c  1 {not a writabl
7250: 65 20 64 69 72 65 63 74 6f 72 79 7d 7d 0a 20 20  e directory}}.  
7260: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 39  do_test pragma-9
7270: 2e 38 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  .8 {.    execsql
7280: 20 7b 20 0a 20 20 20 20 20 20 50 52 41 47 4d 41   { .      PRAGMA
7290: 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65   temp_store_dire
72a0: 63 74 6f 72 79 3d 27 27 3b 0a 20 20 20 20 7d 0a  ctory='';.    }.
72b0: 20 20 7d 20 7b 7d 0a 20 20 69 66 20 7b 21 5b 69    } {}.  if {![i
72c0: 6e 66 6f 20 65 78 69 73 74 73 20 54 45 4d 50 5f  nfo exists TEMP_
72d0: 53 54 4f 52 45 5d 20 7c 7c 20 24 54 45 4d 50 5f  STORE] || $TEMP_
72e0: 53 54 4f 52 45 3c 3d 31 7d 20 7b 0a 20 20 20 20  STORE<=1} {.    
72f0: 69 66 63 61 70 61 62 6c 65 20 74 65 6d 70 64 62  ifcapable tempdb
7300: 20 7b 0a 20 20 20 20 20 20 64 6f 5f 74 65 73 74   {.      do_test
7310: 20 70 72 61 67 6d 61 2d 39 2e 39 20 7b 0a 20 20   pragma-9.9 {.  
7320: 20 20 20 20 20 20 65 78 65 63 73 71 6c 20 7b 20        execsql { 
7330: 0a 20 20 20 20 20 20 20 20 20 20 50 52 41 47 4d  .          PRAGM
7340: 41 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72  A temp_store_dir
7350: 65 63 74 6f 72 79 3b 0a 20 20 20 20 20 20 20 20  ectory;.        
7360: 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74    PRAGMA temp_st
7370: 6f 72 65 3d 46 49 4c 45 3b 0a 20 20 20 20 20 20  ore=FILE;.      
7380: 20 20 20 20 43 52 45 41 54 45 20 54 45 4d 50 20      CREATE TEMP 
7390: 54 41 42 4c 45 20 74 65 6d 70 5f 73 74 6f 72 65  TABLE temp_store
73a0: 5f 64 69 72 65 63 74 6f 72 79 5f 74 65 73 74 28  _directory_test(
73b0: 61 20 69 6e 74 65 67 65 72 29 3b 0a 20 20 20 20  a integer);.    
73c0: 20 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54        INSERT INT
73d0: 4f 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72  O temp_store_dir
73e0: 65 63 74 6f 72 79 5f 74 65 73 74 20 76 61 6c 75  ectory_test valu
73f0: 65 73 20 28 32 29 3b 0a 20 20 20 20 20 20 20 20  es (2);.        
7400: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
7410: 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63  temp_store_direc
7420: 74 6f 72 79 5f 74 65 73 74 3b 0a 20 20 20 20 20  tory_test;.     
7430: 20 20 20 7d 0a 20 20 20 20 20 20 7d 20 7b 32 7d     }.      } {2}
7440: 0a 20 20 20 20 20 20 64 6f 5f 74 65 73 74 20 70  .      do_test p
7450: 72 61 67 6d 61 2d 39 2e 31 30 20 7b 0a 20 20 20  ragma-9.10 {.   
7460: 20 20 20 20 20 63 61 74 63 68 73 71 6c 20 22 0a       catchsql ".
7470: 20 20 20 20 20 20 20 20 20 20 50 52 41 47 4d 41            PRAGMA
7480: 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65   temp_store_dire
7490: 63 74 6f 72 79 3d 27 24 70 77 64 27 3b 0a 20 20  ctory='$pwd';.  
74a0: 20 20 20 20 20 20 20 20 53 45 4c 45 43 54 20 2a          SELECT *
74b0: 20 46 52 4f 4d 20 74 65 6d 70 5f 73 74 6f 72 65   FROM temp_store
74c0: 5f 64 69 72 65 63 74 6f 72 79 5f 74 65 73 74 3b  _directory_test;
74d0: 0a 20 20 20 20 20 20 20 20 22 0a 20 20 20 20 20  .        ".     
74e0: 20 7d 20 7b 31 20 7b 6e 6f 20 73 75 63 68 20 74   } {1 {no such t
74f0: 61 62 6c 65 3a 20 74 65 6d 70 5f 73 74 6f 72 65  able: temp_store
7500: 5f 64 69 72 65 63 74 6f 72 79 5f 74 65 73 74 7d  _directory_test}
7510: 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 64 6f  }.    }.  }.}.do
7520: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 39 2e 31  _test pragma-9.1
7530: 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  1 {.  execsql {.
7540: 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f      PRAGMA temp_
7550: 73 74 6f 72 65 20 3d 20 30 3b 0a 20 20 20 20 50  store = 0;.    P
7560: 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65  RAGMA temp_store
7570: 3b 0a 20 20 7d 0a 7d 20 7b 30 7d 0a 64 6f 5f 74  ;.  }.} {0}.do_t
7580: 65 73 74 20 70 72 61 67 6d 61 2d 39 2e 31 32 20  est pragma-9.12 
7590: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
75a0: 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74    PRAGMA temp_st
75b0: 6f 72 65 20 3d 20 31 3b 0a 20 20 20 20 50 52 41  ore = 1;.    PRA
75c0: 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 3b 0a  GMA temp_store;.
75d0: 20 20 7d 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73    }.} {1}.do_tes
75e0: 74 20 70 72 61 67 6d 61 2d 39 2e 31 33 20 7b 0a  t pragma-9.13 {.
75f0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
7600: 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72  PRAGMA temp_stor
7610: 65 20 3d 20 32 3b 0a 20 20 20 20 50 52 41 47 4d  e = 2;.    PRAGM
7620: 41 20 74 65 6d 70 5f 73 74 6f 72 65 3b 0a 20 20  A temp_store;.  
7630: 7d 0a 7d 20 7b 32 7d 0a 64 6f 5f 74 65 73 74 20  }.} {2}.do_test 
7640: 70 72 61 67 6d 61 2d 39 2e 31 34 20 7b 0a 20 20  pragma-9.14 {.  
7650: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52  execsql {.    PR
7660: 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 20  AGMA temp_store 
7670: 3d 20 33 3b 0a 20 20 20 20 50 52 41 47 4d 41 20  = 3;.    PRAGMA 
7680: 74 65 6d 70 5f 73 74 6f 72 65 3b 0a 20 20 7d 0a  temp_store;.  }.
7690: 7d 20 7b 30 7d 0a 64 6f 5f 74 65 73 74 20 70 72  } {0}.do_test pr
76a0: 61 67 6d 61 2d 39 2e 31 35 20 7b 0a 20 20 63 61  agma-9.15 {.  ca
76b0: 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 42 45 47  tchsql {.    BEG
76c0: 49 4e 20 45 58 43 4c 55 53 49 56 45 3b 0a 20 20  IN EXCLUSIVE;.  
76d0: 20 20 43 52 45 41 54 45 20 54 45 4d 50 20 54 41    CREATE TEMP TA
76e0: 42 4c 45 20 74 65 6d 70 5f 74 61 62 6c 65 28 74  BLE temp_table(t
76f0: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
7700: 54 4f 20 74 65 6d 70 5f 74 61 62 6c 65 20 56 41  TO temp_table VA
7710: 4c 55 45 53 28 27 76 61 6c 75 61 62 6c 65 20 64  LUES('valuable d
7720: 61 74 61 27 29 3b 0a 20 20 20 20 50 52 41 47 4d  ata');.    PRAGM
7730: 41 20 74 65 6d 70 5f 73 74 6f 72 65 20 3d 20 31  A temp_store = 1
7740: 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b 74 65 6d 70  ;.  }.} {1 {temp
7750: 6f 72 61 72 79 20 73 74 6f 72 61 67 65 20 63 61  orary storage ca
7760: 6e 6e 6f 74 20 62 65 20 63 68 61 6e 67 65 64 20  nnot be changed 
7770: 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 20 74 72  from within a tr
7780: 61 6e 73 61 63 74 69 6f 6e 7d 7d 0a 64 6f 5f 74  ansaction}}.do_t
7790: 65 73 74 20 70 72 61 67 6d 61 2d 39 2e 31 36 20  est pragma-9.16 
77a0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
77b0: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
77c0: 74 65 6d 70 5f 74 61 62 6c 65 3b 0a 20 20 20 20  temp_table;.    
77d0: 43 4f 4d 4d 49 54 3b 0a 20 20 7d 0a 7d 20 7b 7b  COMMIT;.  }.} {{
77e0: 76 61 6c 75 61 62 6c 65 20 64 61 74 61 7d 7d 0a  valuable data}}.
77f0: 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d  .do_test pragma-
7800: 39 2e 31 37 20 7b 0a 20 20 65 78 65 63 73 71 6c  9.17 {.  execsql
7810: 20 7b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e   {.    INSERT IN
7820: 54 4f 20 74 65 6d 70 5f 74 61 62 6c 65 20 56 41  TO temp_table VA
7830: 4c 55 45 53 28 27 76 61 6c 75 61 62 6c 65 20 64  LUES('valuable d
7840: 61 74 61 20 49 49 27 29 3b 0a 20 20 20 20 53 45  ata II');.    SE
7850: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 65 6d 70  LECT * FROM temp
7860: 5f 74 61 62 6c 65 3b 0a 20 20 7d 0a 7d 20 7b 7b  _table;.  }.} {{
7870: 76 61 6c 75 61 62 6c 65 20 64 61 74 61 7d 20 7b  valuable data} {
7880: 76 61 6c 75 61 62 6c 65 20 64 61 74 61 20 49 49  valuable data II
7890: 7d 7d 0a 0a 64 6f 5f 74 65 73 74 20 70 72 61 67  }}..do_test prag
78a0: 6d 61 2d 39 2e 31 38 20 7b 0a 20 20 73 65 74 20  ma-9.18 {.  set 
78b0: 72 63 20 5b 63 61 74 63 68 20 7b 0a 20 20 20 20  rc [catch {.    
78c0: 64 62 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20  db eval {SELECT 
78d0: 74 20 46 52 4f 4d 20 74 65 6d 70 5f 74 61 62 6c  t FROM temp_tabl
78e0: 65 7d 20 7b 0a 20 20 20 20 20 20 65 78 65 63 73  e} {.      execs
78f0: 71 6c 20 7b 70 72 61 67 6d 61 20 74 65 6d 70 5f  ql {pragma temp_
7900: 73 74 6f 72 65 20 3d 20 31 7d 0a 20 20 20 20 7d  store = 1}.    }
7910: 0a 20 20 7d 20 6d 73 67 5d 0a 20 20 6c 69 73 74  .  } msg].  list
7920: 20 24 72 63 20 24 6d 73 67 0a 7d 20 7b 31 20 7b   $rc $msg.} {1 {
7930: 74 65 6d 70 6f 72 61 72 79 20 73 74 6f 72 61 67  temporary storag
7940: 65 20 63 61 6e 6e 6f 74 20 62 65 20 63 68 61 6e  e cannot be chan
7950: 67 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20  ged from within 
7960: 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 7d 7d 0a  a transaction}}.
7970: 0a 7d 20 3b 23 20 69 66 63 61 70 61 62 6c 65 20  .} ;# ifcapable 
7980: 70 61 67 65 72 5f 70 72 61 67 6d 61 73 0a 0a 69  pager_pragmas..i
7990: 66 63 61 70 61 62 6c 65 20 74 72 69 67 67 65 72  fcapable trigger
79a0: 20 7b 0a 0a 64 6f 5f 74 65 73 74 20 70 72 61 67   {..do_test prag
79b0: 6d 61 2d 31 30 2e 30 20 7b 0a 20 20 63 61 74 63  ma-10.0 {.  catc
79c0: 68 73 71 6c 20 7b 0a 20 20 20 20 44 52 4f 50 20  hsql {.    DROP 
79d0: 54 41 42 4c 45 20 6d 61 69 6e 2e 74 31 3b 0a 20  TABLE main.t1;. 
79e0: 20 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   }.  execsql {. 
79f0: 20 20 20 50 52 41 47 4d 41 20 63 6f 75 6e 74 5f     PRAGMA count_
7a00: 63 68 61 6e 67 65 73 20 3d 20 31 3b 0a 0a 20 20  changes = 1;..  
7a10: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
7a20: 31 28 61 20 50 52 49 4d 41 52 59 20 4b 45 59 29  1(a PRIMARY KEY)
7a30: 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42  ;.    CREATE TAB
7a40: 4c 45 20 74 31 5f 6d 69 72 72 6f 72 28 61 29 3b  LE t1_mirror(a);
7a50: 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  .    CREATE TABL
7a60: 45 20 74 31 5f 6d 69 72 72 6f 72 32 28 61 29 3b  E t1_mirror2(a);
7a70: 0a 20 20 20 20 43 52 45 41 54 45 20 54 52 49 47  .    CREATE TRIG
7a80: 47 45 52 20 74 31 5f 62 69 20 42 45 46 4f 52 45  GER t1_bi BEFORE
7a90: 20 49 4e 53 45 52 54 20 4f 4e 20 74 31 20 42 45   INSERT ON t1 BE
7aa0: 47 49 4e 20 0a 20 20 20 20 20 20 49 4e 53 45 52  GIN .      INSER
7ab0: 54 20 49 4e 54 4f 20 74 31 5f 6d 69 72 72 6f 72  T INTO t1_mirror
7ac0: 20 56 41 4c 55 45 53 28 6e 65 77 2e 61 29 3b 0a   VALUES(new.a);.
7ad0: 20 20 20 20 45 4e 44 3b 0a 20 20 20 20 43 52 45      END;.    CRE
7ae0: 41 54 45 20 54 52 49 47 47 45 52 20 74 31 5f 61  ATE TRIGGER t1_a
7af0: 69 20 41 46 54 45 52 20 49 4e 53 45 52 54 20 4f  i AFTER INSERT O
7b00: 4e 20 74 31 20 42 45 47 49 4e 20 0a 20 20 20 20  N t1 BEGIN .    
7b10: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
7b20: 5f 6d 69 72 72 6f 72 32 20 56 41 4c 55 45 53 28  _mirror2 VALUES(
7b30: 6e 65 77 2e 61 29 3b 0a 20 20 20 20 45 4e 44 3b  new.a);.    END;
7b40: 0a 20 20 20 20 43 52 45 41 54 45 20 54 52 49 47  .    CREATE TRIG
7b50: 47 45 52 20 74 31 5f 62 75 20 42 45 46 4f 52 45  GER t1_bu BEFORE
7b60: 20 55 50 44 41 54 45 20 4f 4e 20 74 31 20 42 45   UPDATE ON t1 BE
7b70: 47 49 4e 20 0a 20 20 20 20 20 20 55 50 44 41 54  GIN .      UPDAT
7b80: 45 20 74 31 5f 6d 69 72 72 6f 72 20 53 45 54 20  E t1_mirror SET 
7b90: 61 20 3d 20 6e 65 77 2e 61 20 57 48 45 52 45 20  a = new.a WHERE 
7ba0: 61 20 3d 20 6f 6c 64 2e 61 3b 0a 20 20 20 20 45  a = old.a;.    E
7bb0: 4e 44 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54  ND;.    CREATE T
7bc0: 52 49 47 47 45 52 20 74 31 5f 61 75 20 41 46 54  RIGGER t1_au AFT
7bd0: 45 52 20 55 50 44 41 54 45 20 4f 4e 20 74 31 20  ER UPDATE ON t1 
7be0: 42 45 47 49 4e 20 0a 20 20 20 20 20 20 55 50 44  BEGIN .      UPD
7bf0: 41 54 45 20 74 31 5f 6d 69 72 72 6f 72 32 20 53  ATE t1_mirror2 S
7c00: 45 54 20 61 20 3d 20 6e 65 77 2e 61 20 57 48 45  ET a = new.a WHE
7c10: 52 45 20 61 20 3d 20 6f 6c 64 2e 61 3b 0a 20 20  RE a = old.a;.  
7c20: 20 20 45 4e 44 3b 0a 20 20 20 20 43 52 45 41 54    END;.    CREAT
7c30: 45 20 54 52 49 47 47 45 52 20 74 31 5f 62 64 20  E TRIGGER t1_bd 
7c40: 42 45 46 4f 52 45 20 44 45 4c 45 54 45 20 4f 4e  BEFORE DELETE ON
7c50: 20 74 31 20 42 45 47 49 4e 20 0a 20 20 20 20 20   t1 BEGIN .     
7c60: 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 31 5f   DELETE FROM t1_
7c70: 6d 69 72 72 6f 72 20 57 48 45 52 45 20 61 20 3d  mirror WHERE a =
7c80: 20 6f 6c 64 2e 61 3b 0a 20 20 20 20 45 4e 44 3b   old.a;.    END;
7c90: 0a 20 20 20 20 43 52 45 41 54 45 20 54 52 49 47  .    CREATE TRIG
7ca0: 47 45 52 20 74 31 5f 61 64 20 41 46 54 45 52 20  GER t1_ad AFTER 
7cb0: 44 45 4c 45 54 45 20 4f 4e 20 74 31 20 42 45 47  DELETE ON t1 BEG
7cc0: 49 4e 20 0a 20 20 20 20 20 20 44 45 4c 45 54 45  IN .      DELETE
7cd0: 20 46 52 4f 4d 20 74 31 5f 6d 69 72 72 6f 72 32   FROM t1_mirror2
7ce0: 20 57 48 45 52 45 20 61 20 3d 20 6f 6c 64 2e 61   WHERE a = old.a
7cf0: 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20 7d 0a 7d  ;.    END;.  }.}
7d00: 20 7b 7d 0a 0a 64 6f 5f 74 65 73 74 20 70 72 61   {}..do_test pra
7d10: 67 6d 61 2d 31 30 2e 31 20 7b 0a 20 20 65 78 65  gma-10.1 {.  exe
7d20: 63 73 71 6c 20 7b 0a 20 20 20 20 49 4e 53 45 52  csql {.    INSER
7d30: 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53  T INTO t1 VALUES
7d40: 28 72 61 6e 64 73 74 72 28 31 30 2c 31 30 29 29  (randstr(10,10))
7d50: 3b 0a 20 20 7d 0a 7d 20 7b 31 7d 0a 64 6f 5f 74  ;.  }.} {1}.do_t
7d60: 65 73 74 20 70 72 61 67 6d 61 2d 31 30 2e 32 20  est pragma-10.2 
7d70: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
7d80: 20 20 55 50 44 41 54 45 20 74 31 20 53 45 54 20    UPDATE t1 SET 
7d90: 61 20 3d 20 72 61 6e 64 73 74 72 28 31 30 2c 31  a = randstr(10,1
7da0: 30 29 3b 0a 20 20 7d 0a 7d 20 7b 31 7d 0a 64 6f  0);.  }.} {1}.do
7db0: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 30 2e  _test pragma-10.
7dc0: 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  3 {.  execsql {.
7dd0: 20 20 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20      DELETE FROM 
7de0: 74 31 3b 0a 20 20 7d 0a 7d 20 7b 31 7d 0a 0a 7d  t1;.  }.} {1}..}
7df0: 20 3b 23 20 69 66 63 61 70 61 62 6c 65 20 74 72   ;# ifcapable tr
7e00: 69 67 67 65 72 0a 0a 69 66 63 61 70 61 62 6c 65  igger..ifcapable
7e10: 20 73 63 68 65 6d 61 5f 70 72 61 67 6d 61 73 20   schema_pragmas 
7e20: 7b 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67  {.  do_test prag
7e30: 6d 61 2d 31 31 2e 31 20 7b 0a 20 20 20 20 65 78  ma-11.1 {.    ex
7e40: 65 63 73 71 6c 32 20 7b 0a 20 20 20 20 20 20 70  ecsql2 {.      p
7e50: 72 61 67 6d 61 20 63 6f 6c 6c 61 74 69 6f 6e 5f  ragma collation_
7e60: 6c 69 73 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 20  list;.    }.  } 
7e70: 7b 73 65 71 20 30 20 6e 61 6d 65 20 52 54 52 49  {seq 0 name RTRI
7e80: 4d 20 73 65 71 20 31 20 6e 61 6d 65 20 4e 4f 43  M seq 1 name NOC
7e90: 41 53 45 20 73 65 71 20 32 20 6e 61 6d 65 20 42  ASE seq 2 name B
7ea0: 49 4e 41 52 59 7d 0a 20 20 64 6f 5f 74 65 73 74  INARY}.  do_test
7eb0: 20 70 72 61 67 6d 61 2d 31 31 2e 32 20 7b 0a 20   pragma-11.2 {. 
7ec0: 20 20 20 64 62 20 63 6f 6c 6c 61 74 65 20 4e 65     db collate Ne
7ed0: 77 5f 43 6f 6c 6c 61 74 69 6f 6e 20 62 6c 61 68  w_Collation blah
7ee0: 2e 2e 2e 0a 20 20 20 20 65 78 65 63 73 71 6c 20  ....    execsql 
7ef0: 7b 0a 20 20 20 20 20 20 70 72 61 67 6d 61 20 63  {.      pragma c
7f00: 6f 6c 6c 61 74 69 6f 6e 5f 6c 69 73 74 3b 0a 20  ollation_list;. 
7f10: 20 20 20 7d 0a 20 20 7d 20 7b 30 20 4e 65 77 5f     }.  } {0 New_
7f20: 43 6f 6c 6c 61 74 69 6f 6e 20 31 20 52 54 52 49  Collation 1 RTRI
7f30: 4d 20 32 20 4e 4f 43 41 53 45 20 33 20 42 49 4e  M 2 NOCASE 3 BIN
7f40: 41 52 59 7d 0a 7d 0a 0a 69 66 63 61 70 61 62 6c  ARY}.}..ifcapabl
7f50: 65 20 73 63 68 65 6d 61 5f 70 72 61 67 6d 61 73  e schema_pragmas
7f60: 26 26 74 65 6d 70 64 62 20 7b 0a 20 20 64 6f 5f  &&tempdb {.  do_
7f70: 74 65 73 74 20 70 72 61 67 6d 61 2d 31 32 2e 31  test pragma-12.1
7f80: 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 20 64   {.    sqlite3 d
7f90: 62 32 20 74 65 73 74 2e 64 62 0a 20 20 20 20 65  b2 test.db.    e
7fa0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50  xecsql {.      P
7fb0: 52 41 47 4d 41 20 74 65 6d 70 2e 74 61 62 6c 65  RAGMA temp.table
7fc0: 5f 69 6e 66 6f 28 27 61 62 63 27 29 3b 0a 20 20  _info('abc');.  
7fd0: 20 20 7d 20 64 62 32 0a 20 20 7d 20 7b 7d 0a 20    } db2.  } {}. 
7fe0: 20 64 62 32 20 63 6c 6f 73 65 0a 0a 20 20 64 6f   db2 close..  do
7ff0: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 32 2e  _test pragma-12.
8000: 32 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 20  2 {.    sqlite3 
8010: 64 62 32 20 74 65 73 74 2e 64 62 0a 20 20 20 20  db2 test.db.    
8020: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
8030: 50 52 41 47 4d 41 20 74 65 6d 70 2e 64 65 66 61  PRAGMA temp.defa
8040: 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65 20 3d  ult_cache_size =
8050: 20 32 30 30 3b 0a 20 20 20 20 20 20 50 52 41 47   200;.      PRAG
8060: 4d 41 20 74 65 6d 70 2e 64 65 66 61 75 6c 74 5f  MA temp.default_
8070: 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20  cache_size;.    
8080: 7d 20 64 62 32 0a 20 20 7d 20 7b 32 30 30 7d 0a  } db2.  } {200}.
8090: 20 20 64 62 32 20 63 6c 6f 73 65 0a 0a 20 20 64    db2 close..  d
80a0: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 32  o_test pragma-12
80b0: 2e 33 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  .3 {.    sqlite3
80c0: 20 64 62 32 20 74 65 73 74 2e 64 62 0a 20 20 20   db2 test.db.   
80d0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20   execsql {.     
80e0: 20 50 52 41 47 4d 41 20 74 65 6d 70 2e 63 61 63   PRAGMA temp.cac
80f0: 68 65 5f 73 69 7a 65 20 3d 20 34 30 30 3b 0a 20  he_size = 400;. 
8100: 20 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70       PRAGMA temp
8110: 2e 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20  .cache_size;.   
8120: 20 7d 20 64 62 32 0a 20 20 7d 20 7b 34 30 30 7d   } db2.  } {400}
8130: 0a 20 20 64 62 32 20 63 6c 6f 73 65 0a 7d 0a 0a  .  db2 close.}..
8140: 69 66 63 61 70 61 62 6c 65 20 62 6c 6f 62 6c 69  ifcapable blobli
8150: 74 20 7b 0a 0a 64 6f 5f 74 65 73 74 20 70 72 61  t {..do_test pra
8160: 67 6d 61 2d 31 33 2e 31 20 7b 0a 20 20 65 78 65  gma-13.1 {.  exe
8170: 63 73 71 6c 20 7b 0a 20 20 20 20 44 52 4f 50 20  csql {.    DROP 
8180: 54 41 42 4c 45 20 49 46 20 45 58 49 53 54 53 20  TABLE IF EXISTS 
8190: 74 34 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 76  t4;.    PRAGMA v
81a0: 64 62 65 5f 74 72 61 63 65 3d 6f 6e 3b 0a 20 20  dbe_trace=on;.  
81b0: 20 20 50 52 41 47 4d 41 20 76 64 62 65 5f 6c 69    PRAGMA vdbe_li
81c0: 73 74 69 6e 67 3d 6f 6e 3b 0a 20 20 20 20 50 52  sting=on;.    PR
81d0: 41 47 4d 41 20 73 71 6c 5f 74 72 61 63 65 3d 6f  AGMA sql_trace=o
81e0: 6e 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41  n;.    CREATE TA
81f0: 42 4c 45 20 74 34 28 61 20 49 4e 54 45 47 45 52  BLE t4(a INTEGER
8200: 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 62 29 3b   PRIMARY KEY,b);
8210: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
8220: 20 74 34 28 62 29 20 56 41 4c 55 45 53 28 78 27   t4(b) VALUES(x'
8230: 30 31 32 33 34 35 36 37 38 39 61 62 63 64 65 66  0123456789abcdef
8240: 30 31 32 33 34 35 36 37 38 39 61 62 63 64 65 66  0123456789abcdef
8250: 30 31 32 33 34 35 36 37 38 39 27 29 3b 0a 20 20  0123456789');.  
8260: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 34    INSERT INTO t4
8270: 28 62 29 20 56 41 4c 55 45 53 28 72 61 6e 64 73  (b) VALUES(rands
8280: 74 72 28 33 30 2c 33 30 29 29 3b 0a 20 20 20 20  tr(30,30));.    
8290: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 34 28 62  INSERT INTO t4(b
82a0: 29 20 56 41 4c 55 45 53 28 31 2e 32 33 34 35 36  ) VALUES(1.23456
82b0: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
82c0: 54 4f 20 74 34 28 62 29 20 56 41 4c 55 45 53 28  TO t4(b) VALUES(
82d0: 4e 55 4c 4c 29 3b 0a 20 20 20 20 49 4e 53 45 52  NULL);.    INSER
82e0: 54 20 49 4e 54 4f 20 74 34 28 62 29 20 56 41 4c  T INTO t4(b) VAL
82f0: 55 45 53 28 30 29 3b 0a 20 20 20 20 49 4e 53 45  UES(0);.    INSE
8300: 52 54 20 49 4e 54 4f 20 74 34 28 62 29 20 53 45  RT INTO t4(b) SE
8310: 4c 45 43 54 20 62 7c 7c 62 7c 7c 62 7c 7c 62 20  LECT b||b||b||b 
8320: 46 52 4f 4d 20 74 34 3b 0a 20 20 20 20 53 45 4c  FROM t4;.    SEL
8330: 45 43 54 20 2a 20 46 52 4f 4d 20 74 34 3b 0a 20  ECT * FROM t4;. 
8340: 20 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   }.  execsql {. 
8350: 20 20 20 50 52 41 47 4d 41 20 76 64 62 65 5f 74     PRAGMA vdbe_t
8360: 72 61 63 65 3d 6f 66 66 3b 0a 20 20 20 20 50 52  race=off;.    PR
8370: 41 47 4d 41 20 76 64 62 65 5f 6c 69 73 74 69 6e  AGMA vdbe_listin
8380: 67 3d 6f 66 66 3b 0a 20 20 20 20 50 52 41 47 4d  g=off;.    PRAGM
8390: 41 20 73 71 6c 5f 74 72 61 63 65 3d 6f 66 66 3b  A sql_trace=off;
83a0: 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a 7d 20 3b 23 20  .  }.} {}..} ;# 
83b0: 69 66 63 61 70 61 62 6c 65 20 62 6c 6f 62 6c 69  ifcapable blobli
83c0: 74 20 0a 0a 69 66 63 61 70 61 62 6c 65 20 70 61  t ..ifcapable pa
83d0: 67 65 72 5f 70 72 61 67 6d 61 73 20 7b 0a 20 20  ger_pragmas {.  
83e0: 64 62 20 63 6c 6f 73 65 0a 20 20 66 6f 72 63 65  db close.  force
83f0: 64 65 6c 65 74 65 20 74 65 73 74 2e 64 62 0a 20  delete test.db. 
8400: 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74   sqlite3 db test
8410: 2e 64 62 0a 20 0a 20 20 23 20 45 56 49 44 45 4e  .db. .  # EVIDEN
8420: 43 45 2d 4f 46 3a 20 52 2d 31 35 36 37 32 2d 33  CE-OF: R-15672-3
8430: 33 36 31 31 20 50 52 41 47 4d 41 20 73 63 68 65  3611 PRAGMA sche
8440: 6d 61 2e 70 61 67 65 5f 63 6f 75 6e 74 3b 20 52  ma.page_count; R
8450: 65 74 75 72 6e 20 74 68 65 20 74 6f 74 61 6c 0a  eturn the total.
8460: 20 20 23 20 6e 75 6d 62 65 72 20 6f 66 20 70 61    # number of pa
8470: 67 65 73 20 69 6e 20 74 68 65 20 64 61 74 61 62  ges in the datab
8480: 61 73 65 20 66 69 6c 65 2e 0a 20 20 23 0a 20 20  ase file..  #.  
8490: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31  do_test pragma-1
84a0: 34 2e 31 20 7b 0a 20 20 20 20 65 78 65 63 73 71  4.1 {.    execsq
84b0: 6c 20 7b 20 70 72 61 67 6d 61 20 61 75 74 6f 5f  l { pragma auto_
84c0: 76 61 63 75 75 6d 20 3d 20 30 20 7d 0a 20 20 20  vacuum = 0 }.   
84d0: 20 65 78 65 63 73 71 6c 20 7b 20 70 72 61 67 6d   execsql { pragm
84e0: 61 20 70 61 67 65 5f 63 6f 75 6e 74 3b 20 70 72  a page_count; pr
84f0: 61 67 6d 61 20 6d 61 69 6e 2e 70 61 67 65 5f 63  agma main.page_c
8500: 6f 75 6e 74 20 7d 0a 20 20 7d 20 7b 30 20 30 7d  ount }.  } {0 0}
8510: 0a 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67  ..  do_test prag
8520: 6d 61 2d 31 34 2e 32 20 7b 0a 20 20 20 20 65 78  ma-14.2 {.    ex
8530: 65 63 73 71 6c 20 7b 20 0a 20 20 20 20 20 20 43  ecsql { .      C
8540: 52 45 41 54 45 20 54 41 42 4c 45 20 61 62 63 28  REATE TABLE abc(
8550: 61 2c 20 62 2c 20 63 29 3b 0a 20 20 20 20 20 20  a, b, c);.      
8560: 50 52 41 47 4d 41 20 70 61 67 65 5f 63 6f 75 6e  PRAGMA page_coun
8570: 74 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20  t;.      PRAGMA 
8580: 6d 61 69 6e 2e 70 61 67 65 5f 63 6f 75 6e 74 3b  main.page_count;
8590: 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 74 65  .      PRAGMA te
85a0: 6d 70 2e 70 61 67 65 5f 63 6f 75 6e 74 3b 0a 20  mp.page_count;. 
85b0: 20 20 20 7d 0a 20 20 7d 20 7b 32 20 32 20 30 7d     }.  } {2 2 0}
85c0: 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .  do_test pragm
85d0: 61 2d 31 34 2e 32 75 63 20 7b 0a 20 20 20 20 65  a-14.2uc {.    e
85e0: 78 65 63 73 71 6c 20 7b 70 72 61 67 6d 61 20 50  xecsql {pragma P
85f0: 41 47 45 5f 43 4f 55 4e 54 7d 0a 20 20 7d 20 7b  AGE_COUNT}.  } {
8600: 32 7d 0a 0a 20 20 64 6f 5f 74 65 73 74 20 70 72  2}..  do_test pr
8610: 61 67 6d 61 2d 31 34 2e 33 20 7b 0a 20 20 20 20  agma-14.3 {.    
8620: 65 78 65 63 73 71 6c 20 7b 20 0a 20 20 20 20 20  execsql { .     
8630: 20 42 45 47 49 4e 3b 0a 20 20 20 20 20 20 43 52   BEGIN;.      CR
8640: 45 41 54 45 20 54 41 42 4c 45 20 64 65 66 28 61  EATE TABLE def(a
8650: 2c 20 62 2c 20 63 29 3b 0a 20 20 20 20 20 20 50  , b, c);.      P
8660: 52 41 47 4d 41 20 70 61 67 65 5f 63 6f 75 6e 74  RAGMA page_count
8670: 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 33 7d 0a  ;.    }.  } {3}.
8680: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
8690: 2d 31 34 2e 33 75 63 20 7b 0a 20 20 20 20 65 78  -14.3uc {.    ex
86a0: 65 63 73 71 6c 20 7b 70 72 61 67 6d 61 20 50 41  ecsql {pragma PA
86b0: 47 45 5f 43 4f 55 4e 54 7d 0a 20 20 7d 20 7b 33  GE_COUNT}.  } {3
86c0: 7d 0a 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61  }..  do_test pra
86d0: 67 6d 61 2d 31 34 2e 34 20 7b 0a 20 20 20 20 73  gma-14.4 {.    s
86e0: 65 74 20 70 61 67 65 5f 73 69 7a 65 20 5b 64 62  et page_size [db
86f0: 20 6f 6e 65 20 7b 70 72 61 67 6d 61 20 70 61 67   one {pragma pag
8700: 65 5f 73 69 7a 65 7d 5d 0a 20 20 20 20 65 78 70  e_size}].    exp
8710: 72 20 5b 66 69 6c 65 20 73 69 7a 65 20 74 65 73  r [file size tes
8720: 74 2e 64 62 5d 20 2f 20 24 70 61 67 65 5f 73 69  t.db] / $page_si
8730: 7a 65 0a 20 20 7d 20 7b 32 7d 0a 0a 20 20 64 6f  ze.  } {2}..  do
8740: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 34 2e  _test pragma-14.
8750: 35 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  5 {.    execsql 
8760: 7b 0a 20 20 20 20 20 20 52 4f 4c 4c 42 41 43 4b  {.      ROLLBACK
8770: 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 70  ;.      PRAGMA p
8780: 61 67 65 5f 63 6f 75 6e 74 3b 0a 20 20 20 20 7d  age_count;.    }
8790: 0a 20 20 7d 20 7b 32 7d 0a 0a 20 20 64 6f 5f 74  .  } {2}..  do_t
87a0: 65 73 74 20 70 72 61 67 6d 61 2d 31 34 2e 36 20  est pragma-14.6 
87b0: 7b 0a 20 20 20 20 66 6f 72 63 65 64 65 6c 65 74  {.    forcedelet
87c0: 65 20 74 65 73 74 32 2e 64 62 0a 20 20 20 20 73  e test2.db.    s
87d0: 71 6c 69 74 65 33 20 64 62 32 20 74 65 73 74 32  qlite3 db2 test2
87e0: 2e 64 62 0a 20 20 20 20 65 78 65 63 73 71 6c 20  .db.    execsql 
87f0: 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 61  {.      PRAGMA a
8800: 75 74 6f 5f 76 61 63 75 75 6d 20 3d 20 30 3b 0a  uto_vacuum = 0;.
8810: 20 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42        CREATE TAB
8820: 4c 45 20 74 31 28 61 2c 20 62 2c 20 63 29 3b 0a  LE t1(a, b, c);.
8830: 20 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42        CREATE TAB
8840: 4c 45 20 74 32 28 61 2c 20 62 2c 20 63 29 3b 0a  LE t2(a, b, c);.
8850: 20 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42        CREATE TAB
8860: 4c 45 20 74 33 28 61 2c 20 62 2c 20 63 29 3b 0a  LE t3(a, b, c);.
8870: 20 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42        CREATE TAB
8880: 4c 45 20 74 34 28 61 2c 20 62 2c 20 63 29 3b 0a  LE t4(a, b, c);.
8890: 20 20 20 20 7d 20 64 62 32 0a 20 20 20 20 64 62      } db2.    db
88a0: 32 20 63 6c 6f 73 65 0a 20 20 20 20 65 78 65 63  2 close.    exec
88b0: 73 71 6c 20 7b 0a 20 20 20 20 20 20 41 54 54 41  sql {.      ATTA
88c0: 43 48 20 27 74 65 73 74 32 2e 64 62 27 20 41 53  CH 'test2.db' AS
88d0: 20 61 75 78 3b 0a 20 20 20 20 20 20 50 52 41 47   aux;.      PRAG
88e0: 4d 41 20 61 75 78 2e 70 61 67 65 5f 63 6f 75 6e  MA aux.page_coun
88f0: 74 3b 0a 20 20 20 20 7d 20 0a 20 20 7d 20 7b 35  t;.    } .  } {5
8900: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67  }.  do_test prag
8910: 6d 61 2d 31 34 2e 36 75 63 20 7b 0a 20 20 20 20  ma-14.6uc {.    
8920: 65 78 65 63 73 71 6c 20 7b 70 72 61 67 6d 61 20  execsql {pragma 
8930: 41 55 58 2e 50 41 47 45 5f 43 4f 55 4e 54 7d 0a  AUX.PAGE_COUNT}.
8940: 20 20 7d 20 7b 35 7d 0a 7d 0a 0a 23 20 54 65 73    } {5}.}..# Tes
8950: 74 20 74 68 61 74 20 74 68 65 20 76 61 6c 75 65  t that the value
8960: 20 73 65 74 20 75 73 69 6e 67 20 74 68 65 20 63   set using the c
8970: 61 63 68 65 5f 73 69 7a 65 20 70 72 61 67 6d 61  ache_size pragma
8980: 20 69 73 20 6e 6f 74 20 72 65 73 65 74 20 77 68   is not reset wh
8990: 65 6e 20 74 68 65 0a 23 20 73 63 68 65 6d 61 20  en the.# schema 
89a0: 69 73 20 72 65 6c 6f 61 64 65 64 2e 0a 23 0a 69  is reloaded..#.i
89b0: 66 63 61 70 61 62 6c 65 20 70 61 67 65 72 5f 70  fcapable pager_p
89c0: 72 61 67 6d 61 73 20 7b 0a 20 20 64 62 20 63 6c  ragmas {.  db cl
89d0: 6f 73 65 0a 20 20 73 71 6c 69 74 65 33 20 64 62  ose.  sqlite3 db
89e0: 20 74 65 73 74 2e 64 62 0a 20 20 64 6f 5f 74 65   test.db.  do_te
89f0: 73 74 20 70 72 61 67 6d 61 2d 31 35 2e 31 20 7b  st pragma-15.1 {
8a00: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
8a10: 20 20 20 20 20 50 52 41 47 4d 41 20 63 61 63 68       PRAGMA cach
8a20: 65 5f 73 69 7a 65 3d 35 39 3b 0a 20 20 20 20 20  e_size=59;.     
8a30: 20 50 52 41 47 4d 41 20 63 61 63 68 65 5f 73 69   PRAGMA cache_si
8a40: 7a 65 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 35  ze;.    }.  } {5
8a50: 39 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61  9}.  do_test pra
8a60: 67 6d 61 2d 31 35 2e 32 20 7b 0a 20 20 20 20 73  gma-15.2 {.    s
8a70: 71 6c 69 74 65 33 20 64 62 32 20 74 65 73 74 2e  qlite3 db2 test.
8a80: 64 62 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b  db.    execsql {
8a90: 0a 20 20 20 20 20 20 43 52 45 41 54 45 20 54 41  .      CREATE TA
8aa0: 42 4c 45 20 6e 65 77 74 61 62 6c 65 28 61 2c 20  BLE newtable(a, 
8ab0: 62 2c 20 63 29 3b 0a 20 20 20 20 7d 20 64 62 32  b, c);.    } db2
8ac0: 0a 20 20 20 20 64 62 32 20 63 6c 6f 73 65 0a 20  .    db2 close. 
8ad0: 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20   } {}.  do_test 
8ae0: 70 72 61 67 6d 61 2d 31 35 2e 33 20 7b 0a 20 20  pragma-15.3 {.  
8af0: 20 20 23 20 45 76 61 6c 75 61 74 69 6e 67 20 74    # Evaluating t
8b00: 68 69 73 20 73 74 61 74 65 6d 65 6e 74 20 77 69  his statement wi
8b10: 6c 6c 20 63 61 75 73 65 20 74 68 65 20 73 63 68  ll cause the sch
8b20: 65 6d 61 20 74 6f 20 62 65 20 72 65 6c 6f 61 64  ema to be reload
8b30: 65 64 20 28 62 65 63 61 75 73 65 0a 20 20 20 20  ed (because.    
8b40: 23 20 74 68 65 20 73 63 68 65 6d 61 20 77 61 73  # the schema was
8b50: 20 63 68 61 6e 67 65 64 20 62 79 20 61 6e 6f 74   changed by anot
8b60: 68 65 72 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69  her connection i
8b70: 6e 20 70 72 61 67 6d 61 2d 31 35 2e 32 29 2e 20  n pragma-15.2). 
8b80: 41 74 20 6f 6e 65 0a 20 20 20 20 23 20 70 6f 69  At one.    # poi
8b90: 6e 74 20 74 68 65 72 65 20 77 61 73 20 61 20 62  nt there was a b
8ba0: 75 67 20 74 68 61 74 20 72 65 73 65 74 20 74 68  ug that reset th
8bb0: 65 20 63 61 63 68 65 5f 73 69 7a 65 20 74 6f 20  e cache_size to 
8bc0: 69 74 73 20 64 65 66 61 75 6c 74 20 76 61 6c 75  its default valu
8bd0: 65 0a 20 20 20 20 23 20 77 68 65 6e 20 74 68 69  e.    # when thi
8be0: 73 20 68 61 70 70 65 6e 65 64 2e 20 0a 20 20 20  s happened. .   
8bf0: 20 65 78 65 63 73 71 6c 20 7b 20 53 45 4c 45 43   execsql { SELEC
8c00: 54 20 2a 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  T * FROM sqlite_
8c10: 6d 61 73 74 65 72 20 7d 0a 20 20 20 20 65 78 65  master }.    exe
8c20: 63 73 71 6c 20 7b 20 50 52 41 47 4d 41 20 63 61  csql { PRAGMA ca
8c30: 63 68 65 5f 73 69 7a 65 20 7d 0a 20 20 7d 20 7b  che_size }.  } {
8c40: 35 39 7d 0a 7d 0a 0a 23 20 52 65 73 65 74 20 74  59}.}..# Reset t
8c50: 68 65 20 73 71 6c 69 74 65 33 5f 74 65 6d 70 5f  he sqlite3_temp_
8c60: 64 69 72 65 63 74 6f 72 79 20 76 61 72 69 61 62  directory variab
8c70: 6c 65 20 66 6f 72 20 74 68 65 20 6e 65 78 74 20  le for the next 
8c80: 72 75 6e 20 6f 66 20 74 65 73 74 73 3a 0a 73 71  run of tests:.sq
8c90: 6c 69 74 65 33 20 64 62 58 20 3a 6d 65 6d 6f 72  lite3 dbX :memor
8ca0: 79 3a 0a 64 62 58 20 65 76 61 6c 20 7b 50 52 41  y:.dbX eval {PRA
8cb0: 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64  GMA temp_store_d
8cc0: 69 72 65 63 74 6f 72 79 20 3d 20 22 22 7d 0a 64  irectory = ""}.d
8cd0: 62 58 20 63 6c 6f 73 65 0a 0a 73 65 74 20 73 6b  bX close..set sk
8ce0: 69 70 5f 6c 6f 63 6b 5f 70 72 6f 78 79 5f 74 65  ip_lock_proxy_te
8cf0: 73 74 73 20 5b 70 61 74 68 5f 69 73 5f 64 6f 73  sts [path_is_dos
8d00: 20 22 2e 22 5d 0a 69 66 63 61 70 61 62 6c 65 20   "."].ifcapable 
8d10: 21 28 6c 6f 63 6b 5f 70 72 6f 78 79 5f 70 72 61  !(lock_proxy_pra
8d20: 67 6d 61 73 26 26 70 72 65 66 65 72 5f 70 72 6f  gmas&&prefer_pro
8d30: 78 79 5f 6c 6f 63 6b 69 6e 67 29 20 7b 0a 20 20  xy_locking) {.  
8d40: 73 65 74 20 73 6b 69 70 5f 6c 6f 63 6b 5f 70 72  set skip_lock_pr
8d50: 6f 78 79 5f 74 65 73 74 73 20 31 0a 7d 0a 0a 69  oxy_tests 1.}..i
8d60: 66 20 21 24 73 6b 69 70 5f 6c 6f 63 6b 5f 70 72  f !$skip_lock_pr
8d70: 6f 78 79 5f 74 65 73 74 73 20 7b 0a 20 20 73 65  oxy_tests {.  se
8d80: 74 20 73 71 6c 69 74 65 5f 68 6f 73 74 69 64 5f  t sqlite_hostid_
8d90: 6e 75 6d 20 31 0a 0a 20 20 73 65 74 20 75 73 69  num 1..  set usi
8da0: 6e 67 5f 70 72 6f 78 79 20 30 0a 20 20 66 6f 72  ng_proxy 0.  for
8db0: 65 61 63 68 20 7b 6e 61 6d 65 20 76 61 6c 75 65  each {name value
8dc0: 7d 20 5b 61 72 72 61 79 20 67 65 74 20 65 6e 76  } [array get env
8dd0: 20 53 51 4c 49 54 45 5f 46 4f 52 43 45 5f 50 52   SQLITE_FORCE_PR
8de0: 4f 58 59 5f 4c 4f 43 4b 49 4e 47 5d 20 7b 0a 20  OXY_LOCKING] {. 
8df0: 20 20 20 73 65 74 20 75 73 69 6e 67 5f 70 72 6f     set using_pro
8e00: 78 79 20 24 76 61 6c 75 65 0a 20 20 7d 0a 0a 20  xy $value.  }.. 
8e10: 20 23 20 54 65 73 74 20 74 68 65 20 6c 6f 63 6b   # Test the lock
8e20: 5f 70 72 6f 78 79 5f 66 69 6c 65 20 70 72 61 67  _proxy_file prag
8e30: 6d 61 73 2e 0a 20 20 23 0a 20 20 64 62 20 63 6c  mas..  #.  db cl
8e40: 6f 73 65 0a 20 20 73 65 74 20 65 6e 76 28 53 51  ose.  set env(SQ
8e50: 4c 49 54 45 5f 46 4f 52 43 45 5f 50 52 4f 58 59  LITE_FORCE_PROXY
8e60: 5f 4c 4f 43 4b 49 4e 47 29 20 22 30 22 0a 0a 20  _LOCKING) "0".. 
8e70: 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74   sqlite3 db test
8e80: 2e 64 62 0a 20 20 23 20 73 65 74 20 6c 6f 63 6b  .db.  # set lock
8e90: 20 70 72 6f 78 79 20 6e 61 6d 65 20 61 6e 64 20   proxy name and 
8ea0: 74 68 65 6e 20 71 75 65 72 79 20 69 74 20 76 69  then query it vi
8eb0: 61 20 70 72 61 67 6d 61 20 69 6e 74 65 72 66 61  a pragma interfa
8ec0: 63 65 0a 20 20 73 65 74 20 6c 70 70 20 5b 65 78  ce.  set lpp [ex
8ed0: 65 63 20 6d 6b 74 65 6d 70 20 2d 74 20 22 70 72  ec mktemp -t "pr
8ee0: 6f 78 79 31 22 5d 0a 20 20 64 6f 5f 74 65 73 74  oxy1"].  do_test
8ef0: 20 70 72 61 67 6d 61 2d 31 36 2e 31 20 7b 0a 20   pragma-16.1 {. 
8f00: 20 20 20 65 78 65 63 73 71 6c 20 22 50 52 41 47     execsql "PRAG
8f10: 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69  MA lock_proxy_fi
8f20: 6c 65 3d 27 24 6c 70 70 27 22 0a 20 20 20 20 65  le='$lpp'".    e
8f30: 78 65 63 73 71 6c 20 22 73 65 6c 65 63 74 20 2a  xecsql "select *
8f40: 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f 6d 61 73   from sqlite_mas
8f50: 74 65 72 22 0a 20 20 20 20 65 78 65 63 73 71 6c  ter".    execsql
8f60: 20 22 50 52 41 47 4d 41 20 6c 6f 63 6b 5f 70 72   "PRAGMA lock_pr
8f70: 6f 78 79 5f 66 69 6c 65 22 0a 20 20 7d 20 24 6c  oxy_file".  } $l
8f80: 70 70 0a 0a 20 20 23 20 32 20 64 61 74 61 62 61  pp..  # 2 databa
8f90: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 63  se connections c
8fa0: 61 6e 20 73 68 61 72 65 20 61 20 6c 6f 63 6b 20  an share a lock 
8fb0: 70 72 6f 78 79 20 66 69 6c 65 0a 20 20 64 6f 5f  proxy file.  do_
8fc0: 74 65 73 74 20 70 72 61 67 6d 61 2d 31 36 2e 32  test pragma-16.2
8fd0: 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 20 64   {.    sqlite3 d
8fe0: 62 32 20 74 65 73 74 2e 64 62 0a 20 20 20 20 65  b2 test.db.    e
8ff0: 78 65 63 73 71 6c 20 22 50 52 41 47 4d 41 20 6c  xecsql "PRAGMA l
9000: 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 3d 27  ock_proxy_file='
9010: 24 6c 70 70 27 22 20 64 62 32 0a 20 20 7d 20 7b  $lpp'" db2.  } {
9020: 7d 0a 0a 20 20 64 62 32 20 63 6c 6f 73 65 0a 20  }..  db2 close. 
9030: 20 23 20 32 6e 64 20 64 61 74 61 62 61 73 65 20   # 2nd database 
9040: 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 68 6f 75 6c  connection shoul
9050: 64 20 61 75 74 6f 2d 6e 61 6d 65 20 61 6e 20 65  d auto-name an e
9060: 78 69 73 74 69 6e 67 20 6c 6f 63 6b 20 70 72 6f  xisting lock pro
9070: 78 79 20 66 69 6c 65 0a 20 20 64 6f 5f 74 65 73  xy file.  do_tes
9080: 74 20 70 72 61 67 6d 61 2d 31 36 2e 32 2e 31 20  t pragma-16.2.1 
9090: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 20 64 62  {.    sqlite3 db
90a0: 32 20 74 65 73 74 2e 64 62 0a 20 20 20 20 65 78  2 test.db.    ex
90b0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52  ecsql {.      PR
90c0: 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f  AGMA lock_proxy_
90d0: 66 69 6c 65 3d 22 3a 61 75 74 6f 3a 22 3b 0a 20  file=":auto:";. 
90e0: 20 20 20 20 20 73 65 6c 65 63 74 20 2a 20 66 72       select * fr
90f0: 6f 6d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  om sqlite_master
9100: 3b 0a 20 20 20 20 7d 20 64 62 32 0a 20 20 20 20  ;.    } db2.    
9110: 65 78 65 63 73 71 6c 20 22 50 52 41 47 4d 41 20  execsql "PRAGMA 
9120: 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 22  lock_proxy_file"
9130: 20 64 62 32 0a 20 20 7d 20 24 6c 70 70 0a 0a 20   db2.  } $lpp.. 
9140: 20 64 62 32 20 63 6c 6f 73 65 0a 20 20 73 65 74   db2 close.  set
9150: 20 6c 70 70 32 20 5b 65 78 65 63 20 6d 6b 74 65   lpp2 [exec mkte
9160: 6d 70 20 2d 74 20 22 70 72 6f 78 79 32 22 5d 0a  mp -t "proxy2"].
9170: 0a 20 20 23 20 32 6e 64 20 64 61 74 61 62 61 73  .  # 2nd databas
9180: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 63 61 6e  e connection can
9190: 6e 6f 74 20 6f 76 65 72 72 69 64 65 20 74 68 65  not override the
91a0: 20 6c 6f 63 6b 20 70 72 6f 78 79 20 66 69 6c 65   lock proxy file
91b0: 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .  do_test pragm
91c0: 61 2d 31 36 2e 33 20 7b 0a 20 20 20 20 73 71 6c  a-16.3 {.    sql
91d0: 69 74 65 33 20 64 62 32 20 74 65 73 74 2e 64 62  ite3 db2 test.db
91e0: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 22 50 52  .    execsql "PR
91f0: 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f  AGMA lock_proxy_
9200: 66 69 6c 65 3d 27 24 6c 70 70 32 27 22 20 64 62  file='$lpp2'" db
9210: 32 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b  2.    catchsql {
9220: 0a 20 20 20 20 20 20 73 65 6c 65 63 74 20 2a 20  .      select * 
9230: 66 72 6f 6d 20 73 71 6c 69 74 65 5f 6d 61 73 74  from sqlite_mast
9240: 65 72 3b 0a 20 20 20 20 7d 20 64 62 32 0a 20 20  er;.    } db2.  
9250: 7d 20 7b 31 20 7b 64 61 74 61 62 61 73 65 20 69  } {1 {database i
9260: 73 20 6c 6f 63 6b 65 64 7d 7d 0a 0a 20 20 73 65  s locked}}..  se
9270: 74 20 6c 70 70 33 20 5b 65 78 65 63 20 6d 6b 74  t lpp3 [exec mkt
9280: 65 6d 70 20 2d 74 20 22 70 72 6f 78 79 33 22 5d  emp -t "proxy3"]
9290: 0a 0a 20 20 23 20 6c 6f 63 6b 20 70 72 6f 78 79  ..  # lock proxy
92a0: 20 66 69 6c 65 20 63 61 6e 20 62 65 20 72 65 6e   file can be ren
92b0: 61 6d 65 64 20 69 66 20 6e 6f 20 6f 74 68 65 72  amed if no other
92c0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 61 72 65   connections are
92d0: 20 61 63 74 69 76 65 0a 20 20 64 6f 5f 74 65 73   active.  do_tes
92e0: 74 20 70 72 61 67 6d 61 2d 31 36 2e 34 20 7b 0a  t pragma-16.4 {.
92f0: 20 20 20 20 64 62 32 20 63 6c 6f 73 65 0a 20 20      db2 close.  
9300: 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 20 20 73    db close.    s
9310: 71 6c 69 74 65 33 20 64 62 32 20 74 65 73 74 2e  qlite3 db2 test.
9320: 64 62 0a 20 20 20 20 65 78 65 63 73 71 6c 20 22  db.    execsql "
9330: 50 52 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78  PRAGMA lock_prox
9340: 79 5f 66 69 6c 65 3d 27 24 6c 70 70 33 27 22 20  y_file='$lpp3'" 
9350: 64 62 32 0a 20 20 20 20 65 78 65 63 73 71 6c 20  db2.    execsql 
9360: 22 50 52 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f  "PRAGMA lock_pro
9370: 78 79 5f 66 69 6c 65 3d 27 24 6c 70 70 32 27 22  xy_file='$lpp2'"
9380: 20 64 62 32 0a 20 20 20 20 65 78 65 63 73 71 6c   db2.    execsql
9390: 20 22 50 52 41 47 4d 41 20 6c 6f 63 6b 5f 70 72   "PRAGMA lock_pr
93a0: 6f 78 79 5f 66 69 6c 65 22 20 64 62 32 0a 20 20  oxy_file" db2.  
93b0: 7d 20 24 6c 70 70 32 0a 0a 20 20 64 62 32 20 63  } $lpp2..  db2 c
93c0: 6c 6f 73 65 0a 20 20 73 65 74 20 65 6e 76 28 53  lose.  set env(S
93d0: 51 4c 49 54 45 5f 46 4f 52 43 45 5f 50 52 4f 58  QLITE_FORCE_PROX
93e0: 59 5f 4c 4f 43 4b 49 4e 47 29 20 22 31 22 0a 20  Y_LOCKING) "1". 
93f0: 20 23 20 61 75 74 6f 2d 6e 61 6d 69 6e 67 20 73   # auto-naming s
9400: 68 6f 75 6c 64 20 72 65 75 73 65 20 74 68 65 20  hould reuse the 
9410: 6c 61 73 74 20 70 72 6f 78 79 20 6e 61 6d 65 20  last proxy name 
9420: 77 68 65 6e 20 61 76 61 69 6c 61 62 6c 65 0a 20  when available. 
9430: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
9440: 31 36 2e 35 20 7b 0a 20 20 20 20 73 71 6c 69 74  16.5 {.    sqlit
9450: 65 33 20 64 62 32 20 74 65 73 74 2e 64 62 0a 20  e3 db2 test.db. 
9460: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
9470: 20 20 20 50 52 41 47 4d 41 20 6c 6f 63 6b 5f 70     PRAGMA lock_p
9480: 72 6f 78 79 5f 66 69 6c 65 3d 22 3a 61 75 74 6f  roxy_file=":auto
9490: 3a 22 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41  :";.      PRAGMA
94a0: 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65   lock_proxy_file
94b0: 3b 0a 20 20 20 20 7d 20 64 62 32 0a 20 20 7d 20  ;.    } db2.  } 
94c0: 24 6c 70 70 32 0a 20 20 0a 20 20 23 20 61 75 74  $lpp2.  .  # aut
94d0: 6f 2d 6e 61 6d 69 6e 67 20 61 20 6e 65 77 20 70  o-naming a new p
94e0: 72 6f 78 79 20 73 68 6f 75 6c 64 20 75 73 65 20  roxy should use 
94f0: 61 20 70 72 65 64 69 63 74 61 62 6c 65 20 26 20  a predictable & 
9500: 75 6e 69 71 75 65 20 6e 61 6d 65 0a 20 20 64 6f  unique name.  do
9510: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 36 2e  _test pragma-16.
9520: 36 20 7b 0a 20 20 20 20 64 62 32 20 63 6c 6f 73  6 {.    db2 clos
9530: 65 0a 20 20 20 20 73 71 6c 69 74 65 33 20 64 62  e.    sqlite3 db
9540: 32 20 74 65 73 74 32 2e 64 62 0a 20 20 20 20 73  2 test2.db.    s
9550: 65 74 20 6c 6f 63 6b 70 61 74 68 20 5b 65 78 65  et lockpath [exe
9560: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41  csql {.      PRA
9570: 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66  GMA lock_proxy_f
9580: 69 6c 65 3d 22 3a 61 75 74 6f 3a 22 3b 0a 20 20  ile=":auto:";.  
9590: 20 20 20 20 50 52 41 47 4d 41 20 6c 6f 63 6b 5f      PRAGMA lock_
95a0: 70 72 6f 78 79 5f 66 69 6c 65 3b 0a 20 20 20 20  proxy_file;.    
95b0: 7d 20 64 62 32 5d 0a 20 20 20 20 73 74 72 69 6e  } db2].    strin
95c0: 67 20 6d 61 74 63 68 20 22 2a 74 65 73 74 32 2e  g match "*test2.
95d0: 64 62 3a 61 75 74 6f 3a 22 20 24 6c 6f 63 6b 70  db:auto:" $lockp
95e0: 61 74 68 0a 20 20 7d 20 7b 31 7d 0a 20 20 0a 20  ath.  } {1}.  . 
95f0: 20 73 65 74 20 73 71 6c 69 74 65 5f 68 6f 73 74   set sqlite_host
9600: 69 64 5f 6e 75 6d 20 32 0a 20 20 23 20 64 62 20  id_num 2.  # db 
9610: 61 63 63 65 73 73 20 73 68 6f 75 6c 64 20 62 65  access should be
9620: 20 6c 69 6d 69 74 65 64 20 74 6f 20 6f 6e 65 20   limited to one 
9630: 68 6f 73 74 20 61 74 20 61 20 74 69 6d 65 20 28  host at a time (
9640: 73 69 6d 75 6c 61 74 65 20 32 6e 64 20 68 6f 73  simulate 2nd hos
9650: 74 20 69 64 29 0a 20 20 64 6f 5f 74 65 73 74 20  t id).  do_test 
9660: 70 72 61 67 6d 61 2d 31 36 2e 37 20 7b 0a 20 20  pragma-16.7 {.  
9670: 20 20 6c 69 73 74 20 5b 63 61 74 63 68 20 7b 0a    list [catch {.
9680: 20 20 20 20 20 20 73 71 6c 69 74 65 33 20 64 62        sqlite3 db
9690: 20 74 65 73 74 32 2e 64 62 0a 20 20 20 20 20 20   test2.db.      
96a0: 65 78 65 63 73 71 6c 20 7b 20 0a 20 20 20 20 20  execsql { .     
96b0: 20 20 20 50 52 41 47 4d 41 20 6c 6f 63 6b 5f 70     PRAGMA lock_p
96c0: 72 6f 78 79 5f 66 69 6c 65 3d 22 3a 61 75 74 6f  roxy_file=":auto
96d0: 3a 22 3b 0a 20 20 20 20 20 20 20 20 73 65 6c 65  :";.        sele
96e0: 63 74 20 2a 20 66 72 6f 6d 20 73 71 6c 69 74 65  ct * from sqlite
96f0: 5f 6d 61 73 74 65 72 3b 0a 20 20 20 20 20 20 7d  _master;.      }
9700: 0a 20 20 20 20 7d 20 6d 73 67 5d 20 24 6d 73 67  .    } msg] $msg
9710: 0a 20 20 7d 20 7b 31 20 7b 64 61 74 61 62 61 73  .  } {1 {databas
9720: 65 20 69 73 20 6c 6f 63 6b 65 64 7d 7d 0a 20 20  e is locked}}.  
9730: 64 62 20 63 6c 6f 73 65 0a 20 20 0a 20 20 23 20  db close.  .  # 
9740: 64 65 66 61 75 6c 74 20 74 6f 20 75 73 69 6e 67  default to using
9750: 20 70 72 6f 78 79 20 6c 6f 63 6b 69 6e 67 20 28   proxy locking (
9760: 73 69 6d 75 6c 61 74 65 20 6e 65 74 77 6f 72 6b  simulate network
9770: 20 66 69 6c 65 20 73 79 73 74 65 6d 20 64 65 74   file system det
9780: 65 63 74 69 6f 6e 29 0a 20 20 64 6f 5f 74 65 73  ection).  do_tes
9790: 74 20 70 72 61 67 6d 61 2d 31 36 2e 38 20 7b 0a  t pragma-16.8 {.
97a0: 20 20 20 20 6c 69 73 74 20 5b 63 61 74 63 68 20      list [catch 
97b0: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 20  {.      sqlite3 
97c0: 64 62 20 74 65 73 74 32 2e 64 62 0a 20 20 20 20  db test2.db.    
97d0: 20 20 65 78 65 63 73 71 6c 20 7b 20 73 65 6c 65    execsql { sele
97e0: 63 74 20 2a 20 66 72 6f 6d 20 73 71 6c 69 74 65  ct * from sqlite
97f0: 5f 6d 61 73 74 65 72 20 7d 20 0a 20 20 20 20 7d  _master } .    }
9800: 20 6d 73 67 5d 20 24 6d 73 67 0a 20 20 7d 20 7b   msg] $msg.  } {
9810: 31 20 7b 64 61 74 61 62 61 73 65 20 69 73 20 6c  1 {database is l
9820: 6f 63 6b 65 64 7d 7d 0a 0a 20 20 64 62 32 20 63  ocked}}..  db2 c
9830: 6c 6f 73 65 0a 20 20 73 65 74 20 6c 70 70 34 20  lose.  set lpp4 
9840: 5b 65 78 65 63 20 6d 6b 74 65 6d 70 20 2d 74 20  [exec mktemp -t 
9850: 22 70 72 6f 78 79 34 22 5d 0a 0a 20 20 23 20 63  "proxy4"]..  # c
9860: 68 65 63 6b 20 74 68 61 74 20 64 62 20 69 73 20  heck that db is 
9870: 75 6e 6c 6f 63 6b 65 64 20 61 66 74 65 72 20 66  unlocked after f
9880: 69 72 73 74 20 68 6f 73 74 20 63 6f 6e 6e 65 63  irst host connec
9890: 74 69 6f 6e 20 63 6c 6f 73 65 73 20 0a 20 20 64  tion closes .  d
98a0: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 36  o_test pragma-16
98b0: 2e 38 2e 31 20 7b 0a 20 20 20 20 65 78 65 63 73  .8.1 {.    execs
98c0: 71 6c 20 22 50 52 41 47 4d 41 20 6c 6f 63 6b 5f  ql "PRAGMA lock_
98d0: 70 72 6f 78 79 5f 66 69 6c 65 3d 27 24 6c 70 70  proxy_file='$lpp
98e0: 34 27 22 20 0a 20 20 20 20 65 78 65 63 73 71 6c  4'" .    execsql
98f0: 20 22 73 65 6c 65 63 74 20 2a 20 66 72 6f 6d 20   "select * from 
9900: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 22 0a 20  sqlite_master". 
9910: 20 20 20 65 78 65 63 73 71 6c 20 22 50 52 41 47     execsql "PRAG
9920: 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69  MA lock_proxy_fi
9930: 6c 65 22 0a 20 20 7d 20 24 6c 70 70 34 0a 20 20  le".  } $lpp4.  
9940: 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .  do_test pragm
9950: 61 2d 31 36 2e 38 2e 32 20 7b 0a 20 20 20 20 65  a-16.8.2 {.    e
9960: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 63  xecsql {.      c
9970: 72 65 61 74 65 20 74 61 62 6c 65 20 69 66 20 6e  reate table if n
9980: 6f 74 20 65 78 69 73 74 73 20 6d 69 6e 65 28 78  ot exists mine(x
9990: 29 3b 0a 20 20 20 20 20 20 69 6e 73 65 72 74 20  );.      insert 
99a0: 69 6e 74 6f 20 6d 69 6e 65 20 76 61 6c 75 65 73  into mine values
99b0: 20 28 31 29 3b 0a 20 20 20 20 7d 20 0a 20 20 7d   (1);.    } .  }
99c0: 20 7b 7d 0a 0a 20 20 64 62 20 63 6c 6f 73 65 0a   {}..  db close.
99d0: 20 20 66 69 6c 65 20 64 65 6c 65 74 65 20 2d 66    file delete -f
99e0: 6f 72 63 65 20 70 72 6f 78 79 74 65 73 74 2e 64  orce proxytest.d
99f0: 62 0a 20 20 66 69 6c 65 20 64 65 6c 65 74 65 20  b.  file delete 
9a00: 2d 66 6f 72 63 65 20 2e 70 72 6f 78 79 74 65 73  -force .proxytes
9a10: 74 2e 64 62 2d 63 6f 6e 63 68 0a 20 20 64 6f 5f  t.db-conch.  do_
9a20: 74 65 73 74 20 70 72 61 67 6d 61 2d 31 36 2e 39  test pragma-16.9
9a30: 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 20 64   {.    sqlite3 d
9a40: 62 20 70 72 6f 78 79 74 65 73 74 2e 64 62 0a 20  b proxytest.db. 
9a50: 20 20 20 73 65 74 20 6c 6f 63 6b 70 61 74 68 32     set lockpath2
9a60: 20 5b 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20   [execsql {.    
9a70: 20 20 50 52 41 47 4d 41 20 6c 6f 63 6b 5f 70 72    PRAGMA lock_pr
9a80: 6f 78 79 5f 66 69 6c 65 3d 22 3a 61 75 74 6f 3a  oxy_file=":auto:
9a90: 22 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20  ";.      PRAGMA 
9aa0: 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 3b  lock_proxy_file;
9ab0: 0a 20 20 20 20 7d 20 64 62 5d 0a 20 20 20 20 73  .    } db].    s
9ac0: 74 72 69 6e 67 20 6d 61 74 63 68 20 22 2a 70 72  tring match "*pr
9ad0: 6f 78 79 74 65 73 74 2e 64 62 3a 61 75 74 6f 3a  oxytest.db:auto:
9ae0: 22 20 24 6c 6f 63 6b 70 61 74 68 32 0a 20 20 7d  " $lockpath2.  }
9af0: 20 7b 31 7d 0a 0a 20 20 23 20 65 6e 73 75 72 65   {1}..  # ensure
9b00: 20 63 72 65 61 74 69 6e 67 20 64 69 72 65 63 74   creating direct
9b10: 6f 72 69 65 73 20 66 6f 72 20 61 20 6c 6f 63 6b  ories for a lock
9b20: 20 70 72 6f 78 79 20 66 69 6c 65 20 77 6f 72 6b   proxy file work
9b30: 73 0a 20 20 73 65 74 20 6c 70 70 35 64 20 5b 65  s.  set lpp5d [e
9b40: 78 65 63 20 6d 6b 74 65 6d 70 20 2d 64 20 2d 74  xec mktemp -d -t
9b50: 20 22 70 72 6f 78 79 35 22 5d 0a 20 20 73 65 74   "proxy5"].  set
9b60: 20 6c 70 70 35 20 24 6c 70 70 35 64 2f 73 75 62   lpp5 $lpp5d/sub
9b70: 2f 64 69 72 2f 6c 6f 63 6b 0a 20 20 64 62 20 63  /dir/lock.  db c
9b80: 6c 6f 73 65 0a 20 20 64 6f 5f 74 65 73 74 20 70  lose.  do_test p
9b90: 72 61 67 6d 61 2d 31 36 2e 31 30 2e 31 20 7b 0a  ragma-16.10.1 {.
9ba0: 20 20 20 20 73 71 6c 69 74 65 33 20 64 62 20 70      sqlite3 db p
9bb0: 72 6f 78 79 74 65 73 74 2e 64 62 0a 20 20 20 20  roxytest.db.    
9bc0: 65 78 65 63 73 71 6c 20 22 50 52 41 47 4d 41 20  execsql "PRAGMA 
9bd0: 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 3d  lock_proxy_file=
9be0: 27 24 6c 70 70 35 27 22 20 0a 20 20 20 20 73 65  '$lpp5'" .    se
9bf0: 74 20 6c 6f 63 6b 70 61 74 68 32 20 5b 65 78 65  t lockpath2 [exe
9c00: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41  csql {.      PRA
9c10: 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66  GMA lock_proxy_f
9c20: 69 6c 65 3b 0a 20 20 20 20 7d 20 64 62 5d 0a 20  ile;.    } db]. 
9c30: 20 20 20 73 74 72 69 6e 67 20 6d 61 74 63 68 20     string match 
9c40: 22 2a 73 75 62 2f 64 69 72 2f 6c 6f 63 6b 22 20  "*sub/dir/lock" 
9c50: 24 6c 6f 63 6b 70 61 74 68 32 0a 20 20 7d 20 7b  $lockpath2.  } {
9c60: 31 7d 0a 0a 20 20 23 20 65 6e 73 75 72 65 20 74  1}..  # ensure t
9c70: 68 61 74 20 61 66 74 65 72 20 64 65 6c 65 74 69  hat after deleti
9c80: 6e 67 20 74 68 65 20 70 61 74 68 2c 20 73 65 74  ng the path, set
9c90: 74 69 6e 67 20 22 3a 61 75 74 6f 3a 22 20 77 6f  ting ":auto:" wo
9ca0: 72 6b 73 20 63 6f 72 72 65 63 74 6c 79 0a 20 20  rks correctly.  
9cb0: 64 62 20 63 6c 6f 73 65 0a 20 20 66 69 6c 65 20  db close.  file 
9cc0: 64 65 6c 65 74 65 20 2d 66 6f 72 63 65 20 24 6c  delete -force $l
9cd0: 70 70 35 64 0a 20 20 64 6f 5f 74 65 73 74 20 70  pp5d.  do_test p
9ce0: 72 61 67 6d 61 2d 31 36 2e 31 30 2e 32 20 7b 0a  ragma-16.10.2 {.
9cf0: 20 20 20 20 73 71 6c 69 74 65 33 20 64 62 20 70      sqlite3 db p
9d00: 72 6f 78 79 74 65 73 74 2e 64 62 0a 20 20 20 20  roxytest.db.    
9d10: 73 65 74 20 6c 6f 63 6b 70 61 74 68 33 20 5b 65  set lockpath3 [e
9d20: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50  xecsql {.      P
9d30: 52 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78 79  RAGMA lock_proxy
9d40: 5f 66 69 6c 65 3d 22 3a 61 75 74 6f 3a 22 3b 0a  _file=":auto:";.
9d50: 20 20 20 20 20 20 63 72 65 61 74 65 20 74 61 62        create tab
9d60: 6c 65 20 69 66 20 6e 6f 74 20 65 78 69 73 74 73  le if not exists
9d70: 20 70 74 28 79 29 3b 0a 20 20 20 20 20 20 50 52   pt(y);.      PR
9d80: 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f  AGMA lock_proxy_
9d90: 66 69 6c 65 3b 0a 20 20 20 20 7d 20 64 62 5d 0a  file;.    } db].
9da0: 20 20 20 20 73 74 72 69 6e 67 20 6d 61 74 63 68      string match
9db0: 20 22 2a 73 75 62 2f 64 69 72 2f 6c 6f 63 6b 22   "*sub/dir/lock"
9dc0: 20 24 6c 6f 63 6b 70 61 74 68 33 0a 20 20 7d 20   $lockpath3.  } 
9dd0: 7b 31 7d 0a 0a 20 20 23 20 65 6e 73 75 72 65 20  {1}..  # ensure 
9de0: 74 68 61 74 20 69 66 20 74 68 65 20 70 61 74 68  that if the path
9df0: 20 63 61 6e 20 6e 6f 74 20 62 65 20 63 72 65 61   can not be crea
9e00: 74 65 64 20 28 66 69 6c 65 20 69 6e 73 74 65 61  ted (file instea
9e10: 64 20 6f 66 20 64 69 72 29 0a 20 20 23 20 73 65  d of dir).  # se
9e20: 74 74 69 6e 67 20 3a 61 75 74 6f 3a 20 64 65 61  tting :auto: dea
9e30: 6c 73 20 77 69 74 68 20 69 74 20 62 79 20 63 72  ls with it by cr
9e40: 65 61 74 69 6e 67 20 61 20 6e 65 77 20 61 75 74  eating a new aut
9e50: 6f 6e 61 6d 65 64 20 6c 6f 63 6b 20 66 69 6c 65  onamed lock file
9e60: 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 66 69  .  db close.  fi
9e70: 6c 65 20 64 65 6c 65 74 65 20 2d 66 6f 72 63 65  le delete -force
9e80: 20 24 6c 70 70 35 64 0a 20 20 63 6c 6f 73 65 20   $lpp5d.  close 
9e90: 5b 6f 70 65 6e 20 22 24 6c 70 70 35 64 22 20 61  [open "$lpp5d" a
9ea0: 5d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67  ].  do_test prag
9eb0: 6d 61 2d 31 36 2e 31 30 2e 33 20 7b 0a 20 20 20  ma-16.10.3 {.   
9ec0: 20 73 71 6c 69 74 65 33 20 64 62 20 70 72 6f 78   sqlite3 db prox
9ed0: 79 74 65 73 74 2e 64 62 0a 20 20 20 20 73 65 74  ytest.db.    set
9ee0: 20 6c 6f 63 6b 70 61 74 68 32 20 5b 65 78 65 63   lockpath2 [exec
9ef0: 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47  sql {.      PRAG
9f00: 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69  MA lock_proxy_fi
9f10: 6c 65 3d 22 3a 61 75 74 6f 3a 22 3b 0a 20 20 20  le=":auto:";.   
9f20: 20 20 20 63 72 65 61 74 65 20 74 61 62 6c 65 20     create table 
9f30: 69 66 20 6e 6f 74 20 65 78 69 73 74 73 20 7a 7a  if not exists zz
9f40: 28 79 29 3b 0a 20 20 20 20 20 20 50 52 41 47 4d  (y);.      PRAGM
9f50: 41 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c  A lock_proxy_fil
9f60: 65 3b 0a 20 20 20 20 7d 20 64 62 5d 0a 20 20 20  e;.    } db].   
9f70: 20 73 74 72 69 6e 67 20 6d 61 74 63 68 20 22 2a   string match "*
9f80: 70 72 6f 78 79 74 65 73 74 2e 64 62 3a 61 75 74  proxytest.db:aut
9f90: 6f 3a 22 20 24 6c 6f 63 6b 70 61 74 68 32 0a 20  o:" $lockpath2. 
9fa0: 20 7d 20 7b 31 7d 0a 0a 20 20 23 20 6d 61 6b 65   } {1}..  # make
9fb0: 20 73 75 72 65 20 77 65 20 63 61 6e 20 64 65 61   sure we can dea
9fc0: 6c 20 77 69 74 68 20 75 67 6c 79 20 66 69 6c 65  l with ugly file
9fd0: 20 70 61 74 68 73 20 63 6f 72 72 65 63 74 6c 79   paths correctly
9fe0: 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 66 69  .  db close.  fi
9ff0: 6c 65 20 64 65 6c 65 74 65 20 2d 66 6f 72 63 65  le delete -force
a000: 20 24 6c 70 70 35 64 0a 20 20 73 65 74 20 6c 70   $lpp5d.  set lp
a010: 70 36 20 5b 65 78 65 63 20 6d 6b 74 65 6d 70 20  p6 [exec mktemp 
a020: 2d 64 20 2d 74 20 22 70 72 6f 78 79 36 22 5d 2f  -d -t "proxy6"]/
a030: 2e 2f 2e 2f 2e 2f 2f 2f 2f 2f 2e 2f 70 72 6f 78  ./././////./prox
a040: 79 74 65 73 74 2f 2e 2e 2f 70 72 6f 78 79 74 65  ytest/../proxyte
a050: 73 74 2f 73 75 62 2f 64 69 72 2f 6c 6f 63 6b 0a  st/sub/dir/lock.
a060: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
a070: 2d 31 36 2e 31 30 2e 34 20 7b 0a 20 20 20 20 73  -16.10.4 {.    s
a080: 71 6c 69 74 65 33 20 64 62 20 70 72 6f 78 79 74  qlite3 db proxyt
a090: 65 73 74 2e 64 62 0a 20 20 20 20 65 78 65 63 73  est.db.    execs
a0a0: 71 6c 20 22 50 52 41 47 4d 41 20 6c 6f 63 6b 5f  ql "PRAGMA lock_
a0b0: 70 72 6f 78 79 5f 66 69 6c 65 3d 27 24 6c 70 70  proxy_file='$lpp
a0c0: 36 27 22 20 0a 20 20 20 20 73 65 74 20 6c 6f 63  6'" .    set loc
a0d0: 6b 70 61 74 68 34 20 5b 65 78 65 63 73 71 6c 20  kpath4 [execsql 
a0e0: 7b 0a 20 20 20 20 20 20 63 72 65 61 74 65 20 74  {.      create t
a0f0: 61 62 6c 65 20 69 66 20 6e 6f 74 20 65 78 69 73  able if not exis
a100: 74 73 20 61 61 28 62 62 29 3b 0a 20 20 20 20 20  ts aa(bb);.     
a110: 20 50 52 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f   PRAGMA lock_pro
a120: 78 79 5f 66 69 6c 65 3b 0a 20 20 20 20 7d 20 64  xy_file;.    } d
a130: 62 5d 0a 20 20 20 20 73 74 72 69 6e 67 20 6d 61  b].    string ma
a140: 74 63 68 20 22 2a 70 72 6f 78 79 74 65 73 74 2f  tch "*proxytest/
a150: 73 75 62 2f 64 69 72 2f 6c 6f 63 6b 22 20 24 6c  sub/dir/lock" $l
a160: 6f 63 6b 70 61 74 68 34 0a 20 20 7d 20 7b 31 7d  ockpath4.  } {1}
a170: 0a 0a 20 20 23 20 65 6e 73 75 72 65 20 74 68 61  ..  # ensure tha
a180: 74 20 69 66 20 74 68 65 20 70 61 74 68 20 63 61  t if the path ca
a190: 6e 20 6e 6f 74 20 62 65 20 63 72 65 61 74 65 64  n not be created
a1a0: 20 28 70 65 72 6d 29 2c 20 73 65 74 74 69 6e 67   (perm), setting
a1b0: 20 3a 61 75 74 6f 3a 20 64 65 61 6c 73 0a 20 20   :auto: deals.  
a1c0: 64 62 20 63 6c 6f 73 65 0a 20 20 66 69 6c 65 20  db close.  file 
a1d0: 64 65 6c 65 74 65 20 2d 66 6f 72 63 65 20 24 6c  delete -force $l
a1e0: 70 70 35 64 0a 20 20 64 6f 5f 74 65 73 74 20 70  pp5d.  do_test p
a1f0: 72 61 67 6d 61 2d 31 36 2e 31 30 2e 35 20 7b 0a  ragma-16.10.5 {.
a200: 20 20 20 20 73 71 6c 69 74 65 33 20 64 62 20 70      sqlite3 db p
a210: 72 6f 78 79 74 65 73 74 2e 64 62 0a 20 20 20 20  roxytest.db.    
a220: 65 78 65 63 73 71 6c 20 22 50 52 41 47 4d 41 20  execsql "PRAGMA 
a230: 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 3d  lock_proxy_file=
a240: 27 24 6c 70 70 35 27 22 20 0a 20 20 20 20 65 78  '$lpp5'" .    ex
a250: 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 63 72  ecsql {.      cr
a260: 65 61 74 65 20 74 61 62 6c 65 20 69 66 20 6e 6f  eate table if no
a270: 74 20 65 78 69 73 74 73 20 62 62 28 62 62 29 3b  t exists bb(bb);
a280: 0a 20 20 20 20 7d 0a 20 20 20 20 64 62 20 63 6c  .    }.    db cl
a290: 6f 73 65 0a 20 20 20 20 66 69 6c 65 20 64 65 6c  ose.    file del
a2a0: 65 74 65 20 2d 66 6f 72 63 65 20 24 6c 70 70 35  ete -force $lpp5
a2b0: 64 0a 20 20 20 20 66 69 6c 65 20 6d 6b 64 69 72  d.    file mkdir
a2c0: 20 24 6c 70 70 35 64 0a 20 20 20 20 66 69 6c 65   $lpp5d.    file
a2d0: 20 61 74 74 72 69 62 75 74 65 73 20 24 6c 70 70   attributes $lpp
a2e0: 35 64 20 2d 70 65 72 6d 69 73 73 69 6f 6e 20 30  5d -permission 0
a2f0: 30 30 30 0a 20 20 20 20 73 71 6c 69 74 65 33 20  000.    sqlite3 
a300: 64 62 20 70 72 6f 78 79 74 65 73 74 2e 64 62 0a  db proxytest.db.
a310: 20 20 20 20 73 65 74 20 6c 6f 63 6b 70 61 74 68      set lockpath
a320: 35 20 5b 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  5 [execsql {.   
a330: 20 20 20 50 52 41 47 4d 41 20 6c 6f 63 6b 5f 70     PRAGMA lock_p
a340: 72 6f 78 79 5f 66 69 6c 65 3d 22 3a 61 75 74 6f  roxy_file=":auto
a350: 3a 22 3b 0a 20 20 20 20 20 20 63 72 65 61 74 65  :";.      create
a360: 20 74 61 62 6c 65 20 69 66 20 6e 6f 74 20 65 78   table if not ex
a370: 69 73 74 73 20 63 63 28 62 62 29 3b 0a 20 20 20  ists cc(bb);.   
a380: 20 20 20 50 52 41 47 4d 41 20 6c 6f 63 6b 5f 70     PRAGMA lock_p
a390: 72 6f 78 79 5f 66 69 6c 65 3b 0a 20 20 20 20 7d  roxy_file;.    }
a3a0: 20 64 62 5d 0a 20 20 20 20 73 74 72 69 6e 67 20   db].    string 
a3b0: 6d 61 74 63 68 20 22 2a 70 72 6f 78 79 74 65 73  match "*proxytes
a3c0: 74 2e 64 62 3a 61 75 74 6f 3a 22 20 24 6c 6f 63  t.db:auto:" $loc
a3d0: 6b 70 61 74 68 35 0a 20 20 7d 20 7b 31 7d 0a 0a  kpath5.  } {1}..
a3e0: 20 20 23 20 65 6e 73 75 72 65 20 74 68 61 74 20    # ensure that 
a3f0: 69 66 20 74 68 65 20 70 61 74 68 20 63 61 6e 20  if the path can 
a400: 6e 6f 74 20 62 65 20 63 72 65 61 74 65 64 2c 20  not be created, 
a410: 6c 6f 63 6b 69 6e 67 20 66 61 69 6c 73 0a 20 20  locking fails.  
a420: 64 62 20 63 6c 6f 73 65 0a 20 20 64 6f 5f 74 65  db close.  do_te
a430: 73 74 20 70 72 61 67 6d 61 2d 31 36 2e 31 30 2e  st pragma-16.10.
a440: 36 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 20  6 {.    sqlite3 
a450: 64 62 20 70 72 6f 78 79 74 65 73 74 2e 64 62 0a  db proxytest.db.
a460: 20 20 20 20 65 78 65 63 73 71 6c 20 22 50 52 41      execsql "PRA
a470: 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66  GMA lock_proxy_f
a480: 69 6c 65 3d 27 24 6c 70 70 35 27 22 20 0a 20 20  ile='$lpp5'" .  
a490: 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20    catchsql {.   
a4a0: 20 20 20 63 72 65 61 74 65 20 74 61 62 6c 65 20     create table 
a4b0: 69 66 20 6e 6f 74 20 65 78 69 73 74 73 20 66 61  if not exists fa
a4c0: 69 6c 79 28 79 29 3b 0a 20 20 20 20 20 20 50 52  ily(y);.      PR
a4d0: 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f  AGMA lock_proxy_
a4e0: 66 69 6c 65 3b 0a 20 20 20 20 7d 20 64 62 0a 20  file;.    } db. 
a4f0: 20 7d 20 7b 31 20 7b 64 61 74 61 62 61 73 65 20   } {1 {database 
a500: 69 73 20 6c 6f 63 6b 65 64 7d 7d 0a 20 20 64 62  is locked}}.  db
a510: 20 63 6c 6f 73 65 0a 0a 20 20 66 69 6c 65 20 61   close..  file a
a520: 74 74 72 69 62 75 74 65 73 20 24 6c 70 70 35 64  ttributes $lpp5d
a530: 20 2d 70 65 72 6d 69 73 73 69 6f 6e 20 30 37 37   -permission 077
a540: 37 0a 20 20 66 69 6c 65 20 64 65 6c 65 74 65 20  7.  file delete 
a550: 2d 66 6f 72 63 65 20 24 6c 70 70 35 64 0a 0a 20  -force $lpp5d.. 
a560: 20 73 65 74 20 65 6e 76 28 53 51 4c 49 54 45 5f   set env(SQLITE_
a570: 46 4f 52 43 45 5f 50 52 4f 58 59 5f 4c 4f 43 4b  FORCE_PROXY_LOCK
a580: 49 4e 47 29 20 24 75 73 69 6e 67 5f 70 72 6f 78  ING) $using_prox
a590: 79 0a 20 20 73 65 74 20 73 71 6c 69 74 65 5f 68  y.  set sqlite_h
a5a0: 6f 73 74 69 64 5f 6e 75 6d 20 30 0a 7d 0a 0a 23  ostid_num 0.}..#
a5b0: 20 50 61 72 73 69 6e 67 20 6f 66 20 61 75 74 6f   Parsing of auto
a5c0: 5f 76 61 63 75 75 6d 20 73 65 74 74 69 6e 67 73  _vacuum settings
a5d0: 2e 0a 23 0a 66 6f 72 65 61 63 68 20 7b 61 75 74  ..#.foreach {aut
a5e0: 6f 76 61 63 5f 73 65 74 74 69 6e 67 20 76 61 6c  ovac_setting val
a5f0: 7d 20 7b 0a 20 20 30 20 30 0a 20 20 31 20 31 0a  } {.  0 0.  1 1.
a600: 20 20 32 20 32 0a 20 20 33 20 30 0a 20 20 2d 31    2 2.  3 0.  -1
a610: 20 30 0a 20 20 6e 6f 6e 65 20 30 0a 20 20 4e 4f   0.  none 0.  NO
a620: 4e 45 20 30 0a 20 20 4e 6f 4e 65 20 30 0a 20 20  NE 0.  NoNe 0.  
a630: 66 75 6c 6c 20 31 0a 20 20 46 55 4c 4c 20 31 0a  full 1.  FULL 1.
a640: 20 20 69 6e 63 72 65 6d 65 6e 74 61 6c 20 32 0a    incremental 2.
a650: 20 20 49 4e 43 52 45 4d 45 4e 54 41 4c 20 32 0a    INCREMENTAL 2.
a660: 20 20 2d 31 32 33 34 20 30 0a 20 20 31 32 33 34    -1234 0.  1234
a670: 20 30 0a 7d 20 7b 0a 20 20 64 6f 5f 74 65 73 74   0.} {.  do_test
a680: 20 70 72 61 67 6d 61 2d 31 37 2e 31 2e 24 61 75   pragma-17.1.$au
a690: 74 6f 76 61 63 5f 73 65 74 74 69 6e 67 20 7b 0a  tovac_setting {.
a6a0: 20 20 20 20 63 61 74 63 68 20 7b 64 62 20 63 6c      catch {db cl
a6b0: 6f 73 65 7d 0a 20 20 20 20 73 71 6c 69 74 65 33  ose}.    sqlite3
a6c0: 20 64 62 20 3a 6d 65 6d 6f 72 79 3a 0a 20 20 20   db :memory:.   
a6d0: 20 65 78 65 63 73 71 6c 20 22 0a 20 20 20 20 20   execsql ".     
a6e0: 20 50 52 41 47 4d 41 20 61 75 74 6f 5f 76 61 63   PRAGMA auto_vac
a6f0: 75 75 6d 3d 24 3a 3a 61 75 74 6f 76 61 63 5f 73  uum=$::autovac_s
a700: 65 74 74 69 6e 67 3b 0a 20 20 20 20 20 20 50 52  etting;.      PR
a710: 41 47 4d 41 20 61 75 74 6f 5f 76 61 63 75 75 6d  AGMA auto_vacuum
a720: 3b 0a 20 20 20 20 22 0a 20 20 7d 20 24 76 61 6c  ;.    ".  } $val
a730: 0a 7d 0a 0a 23 20 50 61 72 73 69 6e 67 20 6f 66  .}..# Parsing of
a740: 20 74 65 6d 70 5f 73 74 6f 72 65 20 73 65 74 74   temp_store sett
a750: 69 6e 67 73 2e 0a 23 0a 66 6f 72 65 61 63 68 20  ings..#.foreach 
a760: 7b 74 65 6d 70 5f 73 65 74 74 69 6e 67 20 76 61  {temp_setting va
a770: 6c 7d 20 7b 0a 20 20 30 20 30 0a 20 20 31 20 31  l} {.  0 0.  1 1
a780: 0a 20 20 32 20 32 0a 20 20 33 20 30 0a 20 20 2d  .  2 2.  3 0.  -
a790: 31 20 30 0a 20 20 66 69 6c 65 20 31 0a 20 20 46  1 0.  file 1.  F
a7a0: 49 4c 45 20 31 0a 20 20 66 49 6c 45 20 31 0a 20  ILE 1.  fIlE 1. 
a7b0: 20 6d 65 6d 6f 72 79 20 32 0a 20 20 4d 45 4d 4f   memory 2.  MEMO
a7c0: 52 59 20 32 0a 20 20 4d 65 4d 6f 52 79 20 32 0a  RY 2.  MeMoRy 2.
a7d0: 7d 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 70 72  } {.  do_test pr
a7e0: 61 67 6d 61 2d 31 38 2e 31 2e 24 74 65 6d 70 5f  agma-18.1.$temp_
a7f0: 73 65 74 74 69 6e 67 20 7b 0a 20 20 20 20 63 61  setting {.    ca
a800: 74 63 68 20 7b 64 62 20 63 6c 6f 73 65 7d 0a 20  tch {db close}. 
a810: 20 20 20 73 71 6c 69 74 65 33 20 64 62 20 3a 6d     sqlite3 db :m
a820: 65 6d 6f 72 79 3a 0a 20 20 20 20 65 78 65 63 73  emory:.    execs
a830: 71 6c 20 22 0a 20 20 20 20 20 20 50 52 41 47 4d  ql ".      PRAGM
a840: 41 20 74 65 6d 70 5f 73 74 6f 72 65 3d 24 3a 3a  A temp_store=$::
a850: 74 65 6d 70 5f 73 65 74 74 69 6e 67 3b 0a 20 20  temp_setting;.  
a860: 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f      PRAGMA temp_
a870: 73 74 6f 72 65 3d 24 3a 3a 74 65 6d 70 5f 73 65  store=$::temp_se
a880: 74 74 69 6e 67 3b 0a 20 20 20 20 20 20 50 52 41  tting;.      PRA
a890: 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 3b 0a  GMA temp_store;.
a8a0: 20 20 20 20 22 0a 20 20 7d 20 24 76 61 6c 0a 7d      ".  } $val.}
a8b0: 0a 0a 23 20 54 68 65 20 53 51 4c 49 54 45 5f 46  ..# The SQLITE_F
a8c0: 43 4e 54 4c 5f 50 52 41 47 4d 41 20 6c 6f 67 69  CNTL_PRAGMA logi
a8d0: 63 2c 20 77 69 74 68 20 65 72 72 6f 72 20 68 61  c, with error ha
a8e0: 6e 64 6c 69 6e 67 2e 0a 23 0a 64 62 20 63 6c 6f  ndling..#.db clo
a8f0: 73 65 0a 74 65 73 74 76 66 73 20 74 76 66 73 0a  se.testvfs tvfs.
a900: 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e  sqlite3 db test.
a910: 64 62 20 2d 76 66 73 20 74 76 66 73 0a 64 6f 5f  db -vfs tvfs.do_
a920: 74 65 73 74 20 70 72 61 67 6d 61 2d 31 39 2e 31  test pragma-19.1
a930: 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 50   {.  catchsql {P
a940: 52 41 47 4d 41 20 65 72 72 6f 72 7d 0a 7d 20 7b  RAGMA error}.} {
a950: 31 20 7b 53 51 4c 20 6c 6f 67 69 63 20 65 72 72  1 {SQL logic err
a960: 6f 72 20 6f 72 20 6d 69 73 73 69 6e 67 20 64 61  or or missing da
a970: 74 61 62 61 73 65 7d 7d 0a 64 6f 5f 74 65 73 74  tabase}}.do_test
a980: 20 70 72 61 67 6d 61 2d 31 39 2e 32 20 7b 0a 20   pragma-19.2 {. 
a990: 20 63 61 74 63 68 73 71 6c 20 7b 50 52 41 47 4d   catchsql {PRAGM
a9a0: 41 20 65 72 72 6f 72 3d 27 54 68 69 73 20 69 73  A error='This is
a9b0: 20 74 68 65 20 65 72 72 6f 72 20 6d 65 73 73 61   the error messa
a9c0: 67 65 27 7d 0a 7d 20 7b 31 20 7b 54 68 69 73 20  ge'}.} {1 {This 
a9d0: 69 73 20 74 68 65 20 65 72 72 6f 72 20 6d 65 73  is the error mes
a9e0: 73 61 67 65 7d 7d 0a 64 6f 5f 74 65 73 74 20 70  sage}}.do_test p
a9f0: 72 61 67 6d 61 2d 31 39 2e 33 20 7b 0a 20 20 63  ragma-19.3 {.  c
aa00: 61 74 63 68 73 71 6c 20 7b 50 52 41 47 4d 41 20  atchsql {PRAGMA 
aa10: 65 72 72 6f 72 3d 27 37 20 54 68 69 73 20 69 73  error='7 This is
aa20: 20 74 68 65 20 65 72 72 6f 72 20 6d 65 73 73 61   the error messa
aa30: 67 65 27 7d 0a 7d 20 7b 31 20 7b 54 68 69 73 20  ge'}.} {1 {This 
aa40: 69 73 20 74 68 65 20 65 72 72 6f 72 20 6d 65 73  is the error mes
aa50: 73 61 67 65 7d 7d 0a 64 6f 5f 74 65 73 74 20 70  sage}}.do_test p
aa60: 72 61 67 6d 61 2d 31 39 2e 34 20 7b 0a 20 20 63  ragma-19.4 {.  c
aa70: 61 74 63 68 73 71 6c 20 7b 50 52 41 47 4d 41 20  atchsql {PRAGMA 
aa80: 65 72 72 6f 72 3d 37 7d 0a 7d 20 7b 31 20 7b 6f  error=7}.} {1 {o
aa90: 75 74 20 6f 66 20 6d 65 6d 6f 72 79 7d 7d 0a 64  ut of memory}}.d
aaa0: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 39  o_test pragma-19
aab0: 2e 35 20 7b 0a 20 20 66 69 6c 65 20 74 61 69 6c  .5 {.  file tail
aac0: 20 5b 6c 69 6e 64 65 78 20 5b 65 78 65 63 73 71   [lindex [execsq
aad0: 6c 20 7b 50 52 41 47 4d 41 20 66 69 6c 65 6e 61  l {PRAGMA filena
aae0: 6d 65 7d 5d 20 30 5d 0a 7d 20 7b 74 65 73 74 2e  me}] 0].} {test.
aaf0: 64 62 7d 0a 0a 69 66 20 7b 24 74 63 6c 5f 70 6c  db}..if {$tcl_pl
ab00: 61 74 66 6f 72 6d 28 70 6c 61 74 66 6f 72 6d 29  atform(platform)
ab10: 3d 3d 22 77 69 6e 64 6f 77 73 22 7d 20 7b 0a 23  =="windows"} {.#
ab20: 20 54 65 73 74 20 64 61 74 61 5f 73 74 6f 72 65   Test data_store
ab30: 5f 64 69 72 65 63 74 6f 72 79 20 70 72 61 67 6d  _directory pragm
ab40: 61 0a 23 0a 64 62 20 63 6c 6f 73 65 0a 73 71 6c  a.#.db close.sql
ab50: 69 74 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a  ite3 db test.db.
ab60: 66 69 6c 65 20 6d 6b 64 69 72 20 64 61 74 61 5f  file mkdir data_
ab70: 64 69 72 0a 64 6f 5f 74 65 73 74 20 70 72 61 67  dir.do_test prag
ab80: 6d 61 2d 32 30 2e 31 20 7b 0a 20 20 63 61 74 63  ma-20.1 {.  catc
ab90: 68 73 71 6c 20 7b 50 52 41 47 4d 41 20 64 61 74  hsql {PRAGMA dat
aba0: 61 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72  a_store_director
abb0: 79 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74  y}.} {0 {}}.do_t
abc0: 65 73 74 20 70 72 61 67 6d 61 2d 32 30 2e 32 20  est pragma-20.2 
abd0: 7b 0a 20 20 73 65 74 20 70 77 64 20 5b 73 74 72  {.  set pwd [str
abe0: 69 6e 67 20 6d 61 70 20 7b 27 20 27 27 7d 20 5b  ing map {' ''} [
abf0: 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20  file nativename 
ac00: 5b 67 65 74 5f 70 77 64 5d 5d 5d 0a 20 20 63 61  [get_pwd]]].  ca
ac10: 74 63 68 73 71 6c 20 22 50 52 41 47 4d 41 20 64  tchsql "PRAGMA d
ac20: 61 74 61 5f 73 74 6f 72 65 5f 64 69 72 65 63 74  ata_store_direct
ac30: 6f 72 79 3d 27 24 70 77 64 27 3b 22 0a 7d 20 7b  ory='$pwd';".} {
ac40: 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 70 72  0 {}}.do_test pr
ac50: 61 67 6d 61 2d 32 30 2e 33 20 7b 0a 20 20 63 61  agma-20.3 {.  ca
ac60: 74 63 68 73 71 6c 20 7b 50 52 41 47 4d 41 20 64  tchsql {PRAGMA d
ac70: 61 74 61 5f 73 74 6f 72 65 5f 64 69 72 65 63 74  ata_store_direct
ac80: 6f 72 79 7d 0a 7d 20 5b 6c 69 73 74 20 30 20 5b  ory}.} [list 0 [
ac90: 6c 69 73 74 20 5b 66 69 6c 65 20 6e 61 74 69 76  list [file nativ
aca0: 65 6e 61 6d 65 20 5b 67 65 74 5f 70 77 64 5d 5d  ename [get_pwd]]
acb0: 5d 5d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  ]].do_test pragm
acc0: 61 2d 32 30 2e 34 20 7b 0a 20 20 73 65 74 20 70  a-20.4 {.  set p
acd0: 77 64 20 5b 73 74 72 69 6e 67 20 6d 61 70 20 7b  wd [string map {
ace0: 27 20 27 27 7d 20 5b 66 69 6c 65 20 6e 61 74 69  ' ''} [file nati
acf0: 76 65 6e 61 6d 65 20 5c 0a 20 20 20 20 5b 66 69  vename \.    [fi
ad00: 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 5f 70 77 64  le join [get_pwd
ad10: 5d 20 64 61 74 61 5f 64 69 72 5d 5d 5d 0a 20 20  ] data_dir]]].  
ad20: 63 61 74 63 68 73 71 6c 20 22 50 52 41 47 4d 41  catchsql "PRAGMA
ad30: 20 64 61 74 61 5f 73 74 6f 72 65 5f 64 69 72 65   data_store_dire
ad40: 63 74 6f 72 79 3d 27 24 70 77 64 27 3b 22 0a 7d  ctory='$pwd';".}
ad50: 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20   {0 {}}.do_test 
ad60: 70 72 61 67 6d 61 2d 32 30 2e 35 20 7b 0a 20 20  pragma-20.5 {.  
ad70: 73 71 6c 69 74 65 33 20 64 62 32 20 74 65 73 74  sqlite3 db2 test
ad80: 32 2e 64 62 0a 20 20 63 61 74 63 68 73 71 6c 20  2.db.  catchsql 
ad90: 22 50 52 41 47 4d 41 20 64 61 74 61 62 61 73 65  "PRAGMA database
ada0: 5f 6c 69 73 74 3b 22 20 64 62 32 0a 7d 20 5b 6c  _list;" db2.} [l
adb0: 69 73 74 20 30 20 5b 6c 69 73 74 20 30 20 6d 61  ist 0 [list 0 ma
adc0: 69 6e 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e  in [file nativen
add0: 61 6d 65 20 5c 0a 20 20 20 20 5b 66 69 6c 65 20  ame \.    [file 
ade0: 6a 6f 69 6e 20 5b 67 65 74 5f 70 77 64 5d 20 64  join [get_pwd] d
adf0: 61 74 61 5f 64 69 72 20 74 65 73 74 32 2e 64 62  ata_dir test2.db
ae00: 5d 5d 5d 5d 0a 63 61 74 63 68 20 7b 64 62 32 20  ]]]].catch {db2 
ae10: 63 6c 6f 73 65 7d 0a 64 6f 5f 74 65 73 74 20 70  close}.do_test p
ae20: 72 61 67 6d 61 2d 32 30 2e 36 20 7b 0a 20 20 73  ragma-20.6 {.  s
ae30: 71 6c 69 74 65 33 20 64 62 32 20 5b 66 69 6c 65  qlite3 db2 [file
ae40: 20 6a 6f 69 6e 20 5b 67 65 74 5f 70 77 64 5d 20   join [get_pwd] 
ae50: 74 65 73 74 32 2e 64 62 5d 0a 20 20 63 61 74 63  test2.db].  catc
ae60: 68 73 71 6c 20 22 50 52 41 47 4d 41 20 64 61 74  hsql "PRAGMA dat
ae70: 61 62 61 73 65 5f 6c 69 73 74 3b 22 20 64 62 32  abase_list;" db2
ae80: 0a 7d 20 5b 6c 69 73 74 20 30 20 5b 6c 69 73 74  .} [list 0 [list
ae90: 20 30 20 6d 61 69 6e 20 5b 66 69 6c 65 20 6e 61   0 main [file na
aea0: 74 69 76 65 6e 61 6d 65 20 5c 0a 20 20 20 20 5b  tivename \.    [
aeb0: 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 5f 70  file join [get_p
aec0: 77 64 5d 20 74 65 73 74 32 2e 64 62 5d 5d 5d 5d  wd] test2.db]]]]
aed0: 0a 63 61 74 63 68 20 7b 64 62 32 20 63 6c 6f 73  .catch {db2 clos
aee0: 65 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  e}.do_test pragm
aef0: 61 2d 32 30 2e 37 20 7b 0a 20 20 63 61 74 63 68  a-20.7 {.  catch
af00: 73 71 6c 20 22 50 52 41 47 4d 41 20 64 61 74 61  sql "PRAGMA data
af10: 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79  _store_directory
af20: 3d 27 27 3b 22 0a 7d 20 7b 30 20 7b 7d 7d 0a 64  ='';".} {0 {}}.d
af30: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 32 30  o_test pragma-20
af40: 2e 38 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20  .8 {.  catchsql 
af50: 7b 50 52 41 47 4d 41 20 64 61 74 61 5f 73 74 6f  {PRAGMA data_sto
af60: 72 65 5f 64 69 72 65 63 74 6f 72 79 7d 0a 7d 20  re_directory}.} 
af70: 7b 30 20 7b 7d 7d 0a 0a 66 6f 72 63 65 64 65 6c  {0 {}}..forcedel
af80: 65 74 65 20 64 61 74 61 5f 64 69 72 0a 7d 20 3b  ete data_dir.} ;
af90: 23 20 65 6e 64 69 66 20 77 69 6e 64 6f 77 73 0a  # endif windows.
afa0: 0a 64 61 74 61 62 61 73 65 5f 6d 61 79 5f 62 65  .database_may_be
afb0: 5f 63 6f 72 72 75 70 74 0a 0a 64 6f 5f 74 65 73  _corrupt..do_tes
afc0: 74 20 32 31 2e 31 20 7b 0a 20 20 23 20 43 72 65  t 21.1 {.  # Cre
afd0: 61 74 65 20 61 20 63 6f 72 72 75 70 74 20 64 61  ate a corrupt da
afe0: 74 61 62 61 73 65 20 69 6e 20 74 65 73 74 65 72  tabase in tester
aff0: 72 2e 64 62 2e 20 41 6e 64 20 61 20 6e 6f 6e 2d  r.db. And a non-
b000: 63 6f 72 72 75 70 74 20 61 74 20 74 65 73 74 2e  corrupt at test.
b010: 64 62 2e 0a 20 20 23 0a 20 20 64 62 20 63 6c 6f  db..  #.  db clo
b020: 73 65 0a 20 20 66 6f 72 63 65 64 65 6c 65 74 65  se.  forcedelete
b030: 20 74 65 73 74 2e 64 62 0a 20 20 73 71 6c 69 74   test.db.  sqlit
b040: 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20  e3 db test.db.  
b050: 65 78 65 63 73 71 6c 20 7b 20 0a 20 20 20 20 50  execsql { .    P
b060: 52 41 47 4d 41 20 70 61 67 65 5f 73 69 7a 65 20  RAGMA page_size 
b070: 3d 20 31 30 32 34 3b 0a 20 20 20 20 50 52 41 47  = 1024;.    PRAG
b080: 4d 41 20 61 75 74 6f 5f 76 61 63 75 75 6d 20 3d  MA auto_vacuum =
b090: 20 30 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54   0;.    CREATE T
b0a0: 41 42 4c 45 20 74 31 28 61 20 50 52 49 4d 41 52  ABLE t1(a PRIMAR
b0b0: 59 20 4b 45 59 2c 20 62 29 3b 0a 20 20 20 20 49  Y KEY, b);.    I
b0c0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41  NSERT INTO t1 VA
b0d0: 4c 55 45 53 28 31 2c 20 31 29 3b 0a 20 20 7d 0a  LUES(1, 1);.  }.
b0e0: 20 20 66 6f 72 20 7b 73 65 74 20 69 20 30 7d 20    for {set i 0} 
b0f0: 7b 24 69 20 3c 20 31 30 7d 20 7b 69 6e 63 72 20  {$i < 10} {incr 
b100: 69 7d 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  i} {.    execsql
b110: 20 7b 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74   { INSERT INTO t
b120: 31 20 53 45 4c 45 43 54 20 61 20 2b 20 28 31 20  1 SELECT a + (1 
b130: 3c 3c 20 24 69 29 2c 20 62 20 2b 20 28 31 20 3c  << $i), b + (1 <
b140: 3c 20 24 69 29 20 46 52 4f 4d 20 74 31 20 7d 0a  < $i) FROM t1 }.
b150: 20 20 7d 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20    }.  db close. 
b160: 20 66 6f 72 63 65 63 6f 70 79 20 74 65 73 74 2e   forcecopy test.
b170: 64 62 20 74 65 73 74 65 72 72 2e 64 62 0a 20 20  db testerr.db.  
b180: 68 65 78 69 6f 5f 77 72 69 74 65 20 74 65 73 74  hexio_write test
b190: 65 72 72 2e 64 62 20 31 35 30 30 30 20 5b 73 74  err.db 15000 [st
b1a0: 72 69 6e 67 20 72 65 70 65 61 74 20 35 35 20 31  ring repeat 55 1
b1b0: 30 30 5d 0a 7d 20 7b 31 30 30 7d 0a 0a 73 65 74  00].} {100}..set
b1c0: 20 6d 61 69 6e 65 72 72 20 7b 2a 2a 2a 20 69 6e   mainerr {*** in
b1d0: 20 64 61 74 61 62 61 73 65 20 6d 61 69 6e 20 2a   database main *
b1e0: 2a 2a 0a 4d 75 6c 74 69 70 6c 65 20 75 73 65 73  **.Multiple uses
b1f0: 20 66 6f 72 20 62 79 74 65 20 36 37 32 20 6f 66   for byte 672 of
b200: 20 70 61 67 65 20 31 35 7d 0a 73 65 74 20 61 75   page 15}.set au
b210: 78 65 72 72 20 7b 2a 2a 2a 20 69 6e 20 64 61 74  xerr {*** in dat
b220: 61 62 61 73 65 20 61 75 78 20 2a 2a 2a 0a 4d 75  abase aux ***.Mu
b230: 6c 74 69 70 6c 65 20 75 73 65 73 20 66 6f 72 20  ltiple uses for 
b240: 62 79 74 65 20 36 37 32 20 6f 66 20 70 61 67 65  byte 672 of page
b250: 20 31 35 7d 0a 0a 73 65 74 20 6d 61 69 6e 65 72   15}..set mainer
b260: 72 20 7b 2f 7b 5c 2a 5c 2a 5c 2a 20 69 6e 20 64  r {/{\*\*\* in d
b270: 61 74 61 62 61 73 65 20 6d 61 69 6e 20 5c 2a 5c  atabase main \*\
b280: 2a 5c 2a 0a 4d 75 6c 74 69 70 6c 65 20 75 73 65  *\*.Multiple use
b290: 73 20 66 6f 72 20 62 79 74 65 20 36 37 32 20 6f  s for byte 672 o
b2a0: 66 20 70 61 67 65 20 31 35 7d 2e 2a 2f 7d 0a 73  f page 15}.*/}.s
b2b0: 65 74 20 61 75 78 65 72 72 20 7b 2f 7b 5c 2a 5c  et auxerr {/{\*\
b2c0: 2a 5c 2a 20 69 6e 20 64 61 74 61 62 61 73 65 20  *\* in database 
b2d0: 61 75 78 20 5c 2a 5c 2a 5c 2a 0a 4d 75 6c 74 69  aux \*\*\*.Multi
b2e0: 70 6c 65 20 75 73 65 73 20 66 6f 72 20 62 79 74  ple uses for byt
b2f0: 65 20 36 37 32 20 6f 66 20 70 61 67 65 20 31 35  e 672 of page 15
b300: 7d 2e 2a 2f 7d 0a 0a 64 6f 5f 74 65 73 74 20 32  }.*/}..do_test 2
b310: 32 2e 32 20 7b 0a 20 20 63 61 74 63 68 20 7b 20  2.2 {.  catch { 
b320: 64 62 20 63 6c 6f 73 65 20 7d 0a 20 20 73 71 6c  db close }.  sql
b330: 69 74 65 33 20 64 62 20 74 65 73 74 65 72 72 2e  ite3 db testerr.
b340: 64 62 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 50  db.  execsql { P
b350: 52 41 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f  RAGMA integrity_
b360: 63 68 65 63 6b 20 7d 0a 7d 20 24 6d 61 69 6e 65  check }.} $maine
b370: 72 72 0a 0a 64 6f 5f 74 65 73 74 20 32 32 2e 33  rr..do_test 22.3
b380: 2e 31 20 7b 0a 20 20 63 61 74 63 68 20 7b 20 64  .1 {.  catch { d
b390: 62 20 63 6c 6f 73 65 20 7d 0a 20 20 73 71 6c 69  b close }.  sqli
b3a0: 74 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20  te3 db test.db. 
b3b0: 20 65 78 65 63 73 71 6c 20 7b 20 0a 20 20 20 20   execsql { .    
b3c0: 41 54 54 41 43 48 20 27 74 65 73 74 65 72 72 2e  ATTACH 'testerr.
b3d0: 64 62 27 20 41 53 20 27 61 75 78 27 3b 0a 20 20  db' AS 'aux';.  
b3e0: 20 20 50 52 41 47 4d 41 20 69 6e 74 65 67 72 69    PRAGMA integri
b3f0: 74 79 5f 63 68 65 63 6b 3b 0a 20 20 7d 0a 7d 20  ty_check;.  }.} 
b400: 24 61 75 78 65 72 72 0a 64 6f 5f 74 65 73 74 20  $auxerr.do_test 
b410: 32 32 2e 33 2e 32 20 7b 0a 20 20 65 78 65 63 73  22.3.2 {.  execs
b420: 71 6c 20 7b 20 50 52 41 47 4d 41 20 6d 61 69 6e  ql { PRAGMA main
b430: 2e 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b  .integrity_check
b440: 3b 20 7d 0a 7d 20 7b 6f 6b 7d 0a 64 6f 5f 74 65  ; }.} {ok}.do_te
b450: 73 74 20 32 32 2e 33 2e 33 20 7b 0a 20 20 65 78  st 22.3.3 {.  ex
b460: 65 63 73 71 6c 20 7b 20 50 52 41 47 4d 41 20 61  ecsql { PRAGMA a
b470: 75 78 2e 69 6e 74 65 67 72 69 74 79 5f 63 68 65  ux.integrity_che
b480: 63 6b 3b 20 7d 0a 7d 20 24 61 75 78 65 72 72 0a  ck; }.} $auxerr.
b490: 0a 64 6f 5f 74 65 73 74 20 32 32 2e 34 2e 31 20  .do_test 22.4.1 
b4a0: 7b 0a 20 20 63 61 74 63 68 20 7b 20 64 62 20 63  {.  catch { db c
b4b0: 6c 6f 73 65 20 7d 0a 20 20 73 71 6c 69 74 65 33  lose }.  sqlite3
b4c0: 20 64 62 20 74 65 73 74 65 72 72 2e 64 62 0a 20   db testerr.db. 
b4d0: 20 65 78 65 63 73 71 6c 20 7b 20 0a 20 20 20 20   execsql { .    
b4e0: 41 54 54 41 43 48 20 27 74 65 73 74 2e 64 62 27  ATTACH 'test.db'
b4f0: 20 41 53 20 27 61 75 78 27 3b 0a 20 20 20 20 50   AS 'aux';.    P
b500: 52 41 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f  RAGMA integrity_
b510: 63 68 65 63 6b 3b 0a 20 20 7d 0a 7d 20 24 6d 61  check;.  }.} $ma
b520: 69 6e 65 72 72 0a 64 6f 5f 74 65 73 74 20 32 32  inerr.do_test 22
b530: 2e 34 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c  .4.2 {.  execsql
b540: 20 7b 20 50 52 41 47 4d 41 20 6d 61 69 6e 2e 69   { PRAGMA main.i
b550: 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 3b 20  ntegrity_check; 
b560: 7d 0a 7d 20 24 6d 61 69 6e 65 72 72 0a 64 6f 5f  }.} $mainerr.do_
b570: 74 65 73 74 20 32 32 2e 34 2e 33 20 7b 0a 20 20  test 22.4.3 {.  
b580: 65 78 65 63 73 71 6c 20 7b 20 50 52 41 47 4d 41  execsql { PRAGMA
b590: 20 61 75 78 2e 69 6e 74 65 67 72 69 74 79 5f 63   aux.integrity_c
b5a0: 68 65 63 6b 3b 20 7d 0a 7d 20 7b 6f 6b 7d 0a 0a  heck; }.} {ok}..
b5b0: 64 62 20 63 6c 6f 73 65 0a 66 6f 72 63 65 64 65  db close.forcede
b5c0: 6c 65 74 65 20 74 65 73 74 2e 64 62 20 74 65 73  lete test.db tes
b5d0: 74 2e 64 62 2d 77 61 6c 20 74 65 73 74 2e 64 62  t.db-wal test.db
b5e0: 2d 6a 6f 75 72 6e 61 6c 0a 73 71 6c 69 74 65 33  -journal.sqlite3
b5f0: 20 64 62 20 74 65 73 74 2e 64 62 0a 73 71 6c 69   db test.db.sqli
b600: 74 65 33 20 64 62 32 20 74 65 73 74 2e 64 62 0a  te3 db2 test.db.
b610: 64 6f 5f 74 65 73 74 20 32 33 2e 31 20 7b 0a 20  do_test 23.1 {. 
b620: 20 64 62 20 65 76 61 6c 20 7b 0a 20 20 20 20 43   db eval {.    C
b630: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 61  REATE TABLE t1(a
b640: 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59   INTEGER PRIMARY
b650: 20 4b 45 59 2c 62 2c 63 2c 64 29 3b 0a 20 20 20   KEY,b,c,d);.   
b660: 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 69 31   CREATE INDEX i1
b670: 20 4f 4e 20 74 31 28 62 2c 63 29 3b 0a 20 20 20   ON t1(b,c);.   
b680: 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 69 32   CREATE INDEX i2
b690: 20 4f 4e 20 74 31 28 63 2c 64 29 3b 0a 20 20 20   ON t1(c,d);.   
b6a0: 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 69 32   CREATE INDEX i2
b6b0: 78 20 4f 4e 20 74 31 28 64 20 43 4f 4c 4c 41 54  x ON t1(d COLLAT
b6c0: 45 20 6e 6f 63 61 73 65 2c 20 63 20 44 45 53 43  E nocase, c DESC
b6d0: 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41  );.    CREATE TA
b6e0: 42 4c 45 20 74 32 28 78 20 49 4e 54 45 47 45 52  BLE t2(x INTEGER
b6f0: 20 52 45 46 45 52 45 4e 43 45 53 20 74 31 29 3b   REFERENCES t1);
b700: 0a 20 20 7d 0a 20 20 64 62 32 20 65 76 61 6c 20  .  }.  db2 eval 
b710: 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f  {SELECT name FRO
b720: 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d  M sqlite_master}
b730: 0a 7d 20 7b 74 31 20 69 31 20 69 32 20 69 32 78  .} {t1 i1 i2 i2x
b740: 20 74 32 7d 0a 64 6f 5f 74 65 73 74 20 32 33 2e   t2}.do_test 23.
b750: 32 61 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b  2a {.  db eval {
b760: 0a 20 20 20 20 44 52 4f 50 20 49 4e 44 45 58 20  .    DROP INDEX 
b770: 69 32 3b 0a 20 20 20 20 43 52 45 41 54 45 20 49  i2;.    CREATE I
b780: 4e 44 45 58 20 69 32 20 4f 4e 20 74 31 28 63 2c  NDEX i2 ON t1(c,
b790: 64 2c 62 29 3b 0a 20 20 7d 0a 20 20 63 61 70 74  d,b);.  }.  capt
b7a0: 75 72 65 5f 70 72 61 67 6d 61 20 64 62 32 20 6f  ure_pragma db2 o
b7b0: 75 74 20 7b 50 52 41 47 4d 41 20 69 6e 64 65 78  ut {PRAGMA index
b7c0: 5f 69 6e 66 6f 28 69 32 29 7d 0a 20 20 64 62 32  _info(i2)}.  db2
b7d0: 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 63 69   eval {SELECT ci
b7e0: 64 2c 20 6e 61 6d 65 2c 20 27 7c 27 20 46 52 4f  d, name, '|' FRO
b7f0: 4d 20 6f 75 74 20 4f 52 44 45 52 20 42 59 20 73  M out ORDER BY s
b800: 65 71 6e 6f 7d 0a 7d 20 7b 32 20 63 20 7c 20 33  eqno}.} {2 c | 3
b810: 20 64 20 7c 20 31 20 62 20 7c 7d 0a 0a 23 20 45   d | 1 b |}..# E
b820: 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 35 36  VIDENCE-OF: R-56
b830: 31 34 33 2d 32 39 33 31 39 20 50 52 41 47 4d 41  143-29319 PRAGMA
b840: 20 73 63 68 65 6d 61 2e 69 6e 64 65 78 5f 78 69   schema.index_xi
b850: 6e 66 6f 28 69 6e 64 65 78 2d 6e 61 6d 65 29 3b  nfo(index-name);
b860: 20 54 68 69 73 0a 23 20 70 72 61 67 6d 61 20 72   This.# pragma r
b870: 65 74 75 72 6e 73 20 69 6e 66 6f 72 6d 61 74 69  eturns informati
b880: 6f 6e 20 61 62 6f 75 74 20 65 76 65 72 79 20 63  on about every c
b890: 6f 6c 75 6d 6e 20 69 6e 20 61 6e 20 69 6e 64 65  olumn in an inde
b8a0: 78 2e 0a 23 0a 23 20 45 56 49 44 45 4e 43 45 2d  x..#.# EVIDENCE-
b8b0: 4f 46 3a 20 52 2d 34 35 39 37 30 2d 33 35 36 31  OF: R-45970-3561
b8c0: 38 20 55 6e 6c 69 6b 65 20 74 68 69 73 20 69 6e  8 Unlike this in
b8d0: 64 65 78 5f 69 6e 66 6f 20 70 72 61 67 6d 61 2c  dex_info pragma,
b8e0: 20 74 68 69 73 20 70 72 61 67 6d 61 0a 23 20 72   this pragma.# r
b8f0: 65 74 75 72 6e 73 20 69 6e 66 6f 72 6d 61 74 69  eturns informati
b900: 6f 6e 20 61 62 6f 75 74 20 65 76 65 72 79 20 63  on about every c
b910: 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 69 6e 64  olumn in the ind
b920: 65 78 2c 20 6e 6f 74 20 6a 75 73 74 20 74 68 65  ex, not just the
b930: 20 6b 65 79 0a 23 20 63 6f 6c 75 6d 6e 73 2e 0a   key.# columns..
b940: 23 0a 64 6f 5f 74 65 73 74 20 32 33 2e 32 62 20  #.do_test 23.2b 
b950: 7b 0a 20 20 63 61 70 74 75 72 65 5f 70 72 61 67  {.  capture_prag
b960: 6d 61 20 64 62 32 20 6f 75 74 20 7b 50 52 41 47  ma db2 out {PRAG
b970: 4d 41 20 69 6e 64 65 78 5f 78 69 6e 66 6f 28 69  MA index_xinfo(i
b980: 32 29 7d 0a 20 20 64 62 32 20 65 76 61 6c 20 7b  2)}.  db2 eval {
b990: 53 45 4c 45 43 54 20 63 69 64 2c 20 6e 61 6d 65  SELECT cid, name
b9a0: 2c 20 22 64 65 73 63 22 2c 20 63 6f 6c 6c 2c 20  , "desc", coll, 
b9b0: 22 6b 65 79 22 2c 20 27 7c 27 20 46 52 4f 4d 20  "key", '|' FROM 
b9c0: 6f 75 74 20 4f 52 44 45 52 20 42 59 20 73 65 71  out ORDER BY seq
b9d0: 6e 6f 7d 0a 7d 20 7b 32 20 63 20 30 20 42 49 4e  no}.} {2 c 0 BIN
b9e0: 41 52 59 20 31 20 7c 20 33 20 64 20 30 20 42 49  ARY 1 | 3 d 0 BI
b9f0: 4e 41 52 59 20 31 20 7c 20 31 20 62 20 30 20 42  NARY 1 | 1 b 0 B
ba00: 49 4e 41 52 59 20 31 20 7c 20 2d 31 20 7b 7d 20  INARY 1 | -1 {} 
ba10: 30 20 42 49 4e 41 52 59 20 30 20 7c 7d 0a 0a 23  0 BINARY 0 |}..#
ba20: 20 28 54 68 65 20 66 69 72 73 74 20 63 6f 6c 75   (The first colu
ba30: 6d 6e 20 6f 66 20 6f 75 74 70 75 74 20 66 72 6f  mn of output fro
ba40: 6d 20 50 52 41 47 4d 41 20 69 6e 64 65 78 5f 78  m PRAGMA index_x
ba50: 69 6e 66 6f 20 69 73 2e 2e 2e 29 0a 23 20 45 56  info is...).# EV
ba60: 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 30 30 31  IDENCE-OF: R-001
ba70: 39 37 2d 31 34 32 37 39 20 54 68 65 20 72 61 6e  97-14279 The ran
ba80: 6b 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20  k of the column 
ba90: 77 69 74 68 69 6e 20 74 68 65 20 69 6e 64 65 78  within the index
baa0: 2e 20 28 30 0a 23 20 6d 65 61 6e 73 20 6c 65 66  . (0.# means lef
bab0: 74 2d 6d 6f 73 74 2e 20 4b 65 79 20 63 6f 6c 75  t-most. Key colu
bac0: 6d 6e 73 20 63 6f 6d 65 20 62 65 66 6f 72 65 20  mns come before 
bad0: 61 75 78 69 6c 69 61 72 79 20 63 6f 6c 75 6d 6e  auxiliary column
bae0: 73 2e 29 0a 23 0a 23 20 28 54 68 65 20 73 65 63  s.).#.# (The sec
baf0: 6f 6e 64 20 63 6f 6c 75 6d 6e 20 6f 66 20 6f 75  ond column of ou
bb00: 74 70 75 74 20 66 72 6f 6d 20 50 52 41 47 4d 41  tput from PRAGMA
bb10: 20 69 6e 64 65 78 5f 78 69 6e 66 6f 20 69 73 2e   index_xinfo is.
bb20: 2e 2e 29 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f  ..).# EVIDENCE-O
bb30: 46 3a 20 52 2d 34 30 38 38 39 2d 30 36 38 33 38  F: R-40889-06838
bb40: 20 54 68 65 20 72 61 6e 6b 20 6f 66 20 74 68 65   The rank of the
bb50: 20 63 6f 6c 75 6d 6e 20 77 69 74 68 69 6e 20 74   column within t
bb60: 68 65 20 74 61 62 6c 65 0a 23 20 62 65 69 6e 67  he table.# being
bb70: 20 69 6e 64 65 78 65 64 2c 20 6f 72 20 2d 31 20   indexed, or -1 
bb80: 69 66 20 74 68 65 20 69 6e 64 65 78 2d 63 6f 6c  if the index-col
bb90: 75 6d 6e 20 69 73 20 74 68 65 20 72 6f 77 69 64  umn is the rowid
bba0: 20 6f 66 20 74 68 65 20 74 61 62 6c 65 0a 23 20   of the table.# 
bbb0: 62 65 69 6e 67 20 69 6e 64 65 78 65 64 2e 0a 23  being indexed..#
bbc0: 0a 23 20 28 54 68 65 20 74 68 69 72 64 20 63 6f  .# (The third co
bbd0: 6c 75 6d 6e 20 6f 66 20 6f 75 74 70 75 74 20 66  lumn of output f
bbe0: 72 6f 6d 20 50 52 41 47 4d 41 20 69 6e 64 65 78  rom PRAGMA index
bbf0: 5f 78 69 6e 66 6f 20 69 73 2e 2e 2e 29 0a 23 20  _xinfo is...).# 
bc00: 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 32  EVIDENCE-OF: R-2
bc10: 32 37 35 31 2d 32 38 39 30 31 20 54 68 65 20 6e  2751-28901 The n
bc20: 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  ame of the colum
bc30: 6e 20 62 65 69 6e 67 20 69 6e 64 65 78 65 64 2c  n being indexed,
bc40: 20 6f 72 0a 23 20 4e 55 4c 4c 20 69 66 20 74 68   or.# NULL if th
bc50: 65 20 69 6e 64 65 78 2d 63 6f 6c 75 6d 6e 20 69  e index-column i
bc60: 73 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74  s the rowid of t
bc70: 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 69  he table being i
bc80: 6e 64 65 78 65 64 2e 0a 23 0a 23 20 28 54 68 65  ndexed..#.# (The
bc90: 20 66 6f 75 72 74 68 20 63 6f 6c 75 6d 6e 20 6f   fourth column o
bca0: 66 20 6f 75 74 70 75 74 20 66 72 6f 6d 20 50 52  f output from PR
bcb0: 41 47 4d 41 20 69 6e 64 65 78 5f 78 69 6e 66 6f  AGMA index_xinfo
bcc0: 20 69 73 2e 2e 2e 29 0a 23 20 45 56 49 44 45 4e   is...).# EVIDEN
bcd0: 43 45 2d 4f 46 3a 20 52 2d 31 31 38 34 37 2d 30  CE-OF: R-11847-0
bce0: 39 31 37 39 20 31 20 69 66 20 74 68 65 20 69 6e  9179 1 if the in
bcf0: 64 65 78 2d 63 6f 6c 75 6d 6e 20 69 73 20 73 6f  dex-column is so
bd00: 72 74 65 64 20 69 6e 20 72 65 76 65 72 73 65 0a  rted in reverse.
bd10: 23 20 28 44 45 53 43 29 20 6f 72 64 65 72 20 62  # (DESC) order b
bd20: 79 20 74 68 65 20 69 6e 64 65 78 20 61 6e 64 20  y the index and 
bd30: 30 20 6f 74 68 65 72 77 69 73 65 2e 0a 23 0a 23  0 otherwise..#.#
bd40: 20 28 54 68 65 20 66 69 66 74 68 20 63 6f 6c 75   (The fifth colu
bd50: 6d 6e 20 6f 66 20 6f 75 74 70 75 74 20 66 72 6f  mn of output fro
bd60: 6d 20 50 52 41 47 4d 41 20 69 6e 64 65 78 5f 78  m PRAGMA index_x
bd70: 69 6e 66 6f 20 69 73 2e 2e 2e 29 0a 23 20 45 56  info is...).# EV
bd80: 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 31 35 33  IDENCE-OF: R-153
bd90: 31 33 2d 31 39 35 34 30 20 54 68 65 20 6e 61 6d  13-19540 The nam
bda0: 65 20 66 6f 72 20 74 68 65 20 63 6f 6c 6c 61 74  e for the collat
bdb0: 69 6e 67 20 73 65 71 75 65 6e 63 65 20 75 73 65  ing sequence use
bdc0: 64 20 74 6f 0a 23 20 63 6f 6d 70 61 72 65 20 76  d to.# compare v
bdd0: 61 6c 75 65 73 20 69 6e 20 74 68 65 20 69 6e 64  alues in the ind
bde0: 65 78 2d 63 6f 6c 75 6d 6e 2e 0a 23 0a 23 20 28  ex-column..#.# (
bdf0: 54 68 65 20 73 69 78 74 68 20 63 6f 6c 75 6d 6e  The sixth column
be00: 20 6f 66 20 6f 75 74 70 75 74 20 66 72 6f 6d 20   of output from 
be10: 50 52 41 47 4d 41 20 69 6e 64 65 78 5f 78 69 6e  PRAGMA index_xin
be20: 66 6f 20 69 73 2e 2e 2e 29 0a 23 20 45 56 49 44  fo is...).# EVID
be30: 45 4e 43 45 2d 4f 46 3a 20 52 2d 31 34 33 31 30  ENCE-OF: R-14310
be40: 2d 36 34 35 35 33 20 31 20 69 66 20 74 68 65 20  -64553 1 if the 
be50: 69 6e 64 65 78 2d 63 6f 6c 75 6d 6e 20 69 73 20  index-column is 
be60: 61 20 6b 65 79 20 63 6f 6c 75 6d 6e 20 61 6e 64  a key column and
be70: 20 30 0a 23 20 69 66 20 74 68 65 20 69 6e 64 65   0.# if the inde
be80: 78 2d 63 6f 6c 75 6d 6e 20 69 73 20 61 6e 20 61  x-column is an a
be90: 75 78 69 6c 69 61 72 79 20 63 6f 6c 75 6d 6e 2e  uxiliary column.
bea0: 0a 23 0a 64 6f 5f 74 65 73 74 20 32 33 2e 32 63  .#.do_test 23.2c
beb0: 20 7b 0a 20 20 64 62 32 20 65 76 61 6c 20 7b 50   {.  db2 eval {P
bec0: 52 41 47 4d 41 20 69 6e 64 65 78 5f 78 69 6e 66  RAGMA index_xinf
bed0: 6f 28 69 32 29 7d 0a 7d 20 7b 30 20 32 20 63 20  o(i2)}.} {0 2 c 
bee0: 30 20 42 49 4e 41 52 59 20 31 20 31 20 33 20 64  0 BINARY 1 1 3 d
bef0: 20 30 20 42 49 4e 41 52 59 20 31 20 32 20 31 20   0 BINARY 1 2 1 
bf00: 62 20 30 20 42 49 4e 41 52 59 20 31 20 33 20 2d  b 0 BINARY 1 3 -
bf10: 31 20 7b 7d 20 30 20 42 49 4e 41 52 59 20 30 7d  1 {} 0 BINARY 0}
bf20: 0a 64 6f 5f 74 65 73 74 20 32 33 2e 32 64 20 7b  .do_test 23.2d {
bf30: 0a 20 20 64 62 32 20 65 76 61 6c 20 7b 50 52 41  .  db2 eval {PRA
bf40: 47 4d 41 20 69 6e 64 65 78 5f 78 69 6e 66 6f 28  GMA index_xinfo(
bf50: 69 32 78 29 7d 0a 7d 20 7b 30 20 33 20 64 20 30  i2x)}.} {0 3 d 0
bf60: 20 6e 6f 63 61 73 65 20 31 20 31 20 32 20 63 20   nocase 1 1 2 c 
bf70: 31 20 42 49 4e 41 52 59 20 31 20 32 20 2d 31 20  1 BINARY 1 2 -1 
bf80: 7b 7d 20 30 20 42 49 4e 41 52 59 20 30 7d 0a 0a  {} 0 BINARY 0}..
bf90: 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52  # EVIDENCE-OF: R
bfa0: 2d 36 34 31 30 33 2d 31 37 37 37 36 20 50 52 41  -64103-17776 PRA
bfb0: 47 4d 41 20 73 63 68 65 6d 61 2e 69 6e 64 65 78  GMA schema.index
bfc0: 5f 6c 69 73 74 28 74 61 62 6c 65 2d 6e 61 6d 65  _list(table-name
bfd0: 29 3b 20 54 68 69 73 0a 23 20 70 72 61 67 6d 61  ); This.# pragma
bfe0: 20 72 65 74 75 72 6e 73 20 6f 6e 65 20 72 6f 77   returns one row
bff0: 20 66 6f 72 20 65 61 63 68 20 69 6e 64 65 78 20   for each index 
c000: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
c010: 74 68 65 20 67 69 76 65 6e 20 74 61 62 6c 65 2e  the given table.
c020: 0a 23 0a 23 20 28 54 68 65 20 66 69 72 73 74 20  .#.# (The first 
c030: 63 6f 6c 75 6d 6e 20 6f 66 20 6f 75 74 70 75 74  column of output
c040: 20 66 72 6f 6d 20 50 52 41 47 4d 41 20 69 6e 64   from PRAGMA ind
c050: 65 78 5f 6c 69 73 74 20 69 73 2e 2e 2e 29 0a 23  ex_list is...).#
c060: 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d   EVIDENCE-OF: R-
c070: 30 32 37 35 33 2d 32 34 37 34 38 20 41 20 73 65  02753-24748 A se
c080: 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 61 73  quence number as
c090: 73 69 67 6e 65 64 20 74 6f 20 65 61 63 68 20 69  signed to each i
c0a0: 6e 64 65 78 0a 23 20 66 6f 72 20 69 6e 74 65 72  ndex.# for inter
c0b0: 6e 61 6c 20 74 72 61 63 6b 69 6e 67 20 70 75 72  nal tracking pur
c0c0: 70 6f 73 65 73 2e 0a 23 0a 23 20 28 54 68 65 20  poses..#.# (The 
c0d0: 73 65 63 6f 6e 64 20 63 6f 6c 75 6d 6e 20 6f 66  second column of
c0e0: 20 6f 75 74 70 75 74 20 66 72 6f 6d 20 50 52 41   output from PRA
c0f0: 47 4d 41 20 69 6e 64 65 78 5f 6c 69 73 74 20 69  GMA index_list i
c100: 73 2e 2e 2e 29 0a 23 20 45 56 49 44 45 4e 43 45  s...).# EVIDENCE
c110: 2d 4f 46 3a 20 52 2d 33 35 34 39 36 2d 30 33 36  -OF: R-35496-036
c120: 33 35 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74  35 The name of t
c130: 68 65 20 69 6e 64 65 78 2e 0a 23 0a 23 20 28 54  he index..#.# (T
c140: 68 65 20 74 68 69 72 64 20 63 6f 6c 75 6d 6e 20  he third column 
c150: 6f 66 20 6f 75 74 70 75 74 20 66 72 6f 6d 20 50  of output from P
c160: 52 41 47 4d 41 20 69 6e 64 65 78 5f 6c 69 73 74  RAGMA index_list
c170: 20 69 73 2e 2e 2e 29 0a 23 20 45 56 49 44 45 4e   is...).# EVIDEN
c180: 43 45 2d 4f 46 3a 20 52 2d 35 37 33 30 31 2d 36  CE-OF: R-57301-6
c190: 34 35 30 36 20 22 31 22 20 69 66 20 74 68 65 20  4506 "1" if the 
c1a0: 69 6e 64 65 78 20 69 73 20 55 4e 49 51 55 45 20  index is UNIQUE 
c1b0: 61 6e 64 20 22 30 22 20 69 66 20 6e 6f 74 2e 0a  and "0" if not..
c1c0: 23 0a 23 20 28 54 68 65 20 66 6f 75 72 74 68 20  #.# (The fourth 
c1d0: 63 6f 6c 75 6d 6e 20 6f 66 20 6f 75 74 70 75 74  column of output
c1e0: 20 66 72 6f 6d 20 50 52 41 47 4d 41 20 69 6e 64   from PRAGMA ind
c1f0: 65 78 5f 6c 69 73 74 20 69 73 2e 2e 2e 29 0a 23  ex_list is...).#
c200: 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d   EVIDENCE-OF: R-
c210: 33 36 36 30 39 2d 33 39 35 35 34 20 22 63 22 20  36609-39554 "c" 
c220: 69 66 20 74 68 65 20 69 6e 64 65 78 20 77 61 73  if the index was
c230: 20 63 72 65 61 74 65 64 20 62 79 20 61 20 43 52   created by a CR
c240: 45 41 54 45 0a 23 20 49 4e 44 45 58 20 73 74 61  EATE.# INDEX sta
c250: 74 65 6d 65 6e 74 2c 20 22 75 22 20 69 66 20 74  tement, "u" if t
c260: 68 65 20 69 6e 64 65 78 20 77 61 73 20 63 72 65  he index was cre
c270: 61 74 65 64 20 62 79 20 61 20 55 4e 49 51 55 45  ated by a UNIQUE
c280: 20 63 6f 6e 73 74 72 61 69 6e 74 2c 0a 23 20 6f   constraint,.# o
c290: 72 20 22 70 6b 22 20 69 66 20 74 68 65 20 69 6e  r "pk" if the in
c2a0: 64 65 78 20 77 61 73 20 63 72 65 61 74 65 64 20  dex was created 
c2b0: 62 79 20 61 20 50 52 49 4d 41 52 59 20 4b 45 59  by a PRIMARY KEY
c2c0: 20 63 6f 6e 73 74 72 61 69 6e 74 2e 0a 23 0a 64   constraint..#.d
c2d0: 6f 5f 74 65 73 74 20 32 33 2e 33 20 7b 0a 20 20  o_test 23.3 {.  
c2e0: 64 62 20 65 76 61 6c 20 7b 0a 20 20 20 20 43 52  db eval {.    CR
c2f0: 45 41 54 45 20 49 4e 44 45 58 20 69 33 20 4f 4e  EATE INDEX i3 ON
c300: 20 74 31 28 64 2c 62 2c 63 29 3b 0a 20 20 7d 0a   t1(d,b,c);.  }.
c310: 20 20 63 61 70 74 75 72 65 5f 70 72 61 67 6d 61    capture_pragma
c320: 20 64 62 32 20 6f 75 74 20 7b 50 52 41 47 4d 41   db2 out {PRAGMA
c330: 20 69 6e 64 65 78 5f 6c 69 73 74 28 74 31 29 7d   index_list(t1)}
c340: 0a 20 20 64 62 32 20 65 76 61 6c 20 7b 53 45 4c  .  db2 eval {SEL
c350: 45 43 54 20 73 65 71 2c 20 6e 61 6d 65 2c 20 22  ECT seq, name, "
c360: 75 6e 69 71 75 65 22 2c 20 6f 72 69 67 69 6e 2c  unique", origin,
c370: 20 27 7c 27 20 46 52 4f 4d 20 6f 75 74 20 4f 52   '|' FROM out OR
c380: 44 45 52 20 42 59 20 73 65 71 7d 0a 7d 20 7b 30  DER BY seq}.} {0
c390: 20 69 33 20 30 20 63 20 7c 20 31 20 69 32 20 30   i3 0 c | 1 i2 0
c3a0: 20 63 20 7c 20 32 20 69 32 78 20 30 20 63 20 7c   c | 2 i2x 0 c |
c3b0: 20 33 20 69 31 20 30 20 63 20 7c 7d 0a 64 6f 5f   3 i1 0 c |}.do_
c3c0: 74 65 73 74 20 32 33 2e 34 20 7b 0a 20 20 64 62  test 23.4 {.  db
c3d0: 20 65 76 61 6c 20 7b 0a 20 20 20 20 41 4c 54 45   eval {.    ALTE
c3e0: 52 20 54 41 42 4c 45 20 74 31 20 41 44 44 20 43  R TABLE t1 ADD C
c3f0: 4f 4c 55 4d 4e 20 65 3b 0a 20 20 7d 0a 20 20 64  OLUMN e;.  }.  d
c400: 62 32 20 65 76 61 6c 20 7b 0a 20 20 20 20 50 52  b2 eval {.    PR
c410: 41 47 4d 41 20 74 61 62 6c 65 5f 69 6e 66 6f 28  AGMA table_info(
c420: 74 31 29 3b 0a 20 20 7d 0a 7d 20 7b 2f 34 20 65  t1);.  }.} {/4 e
c430: 20 7b 7d 20 30 20 7b 7d 20 30 2f 7d 0a 64 6f 5f   {} 0 {} 0/}.do_
c440: 74 65 73 74 20 32 33 2e 35 20 7b 0a 20 20 64 62  test 23.5 {.  db
c450: 20 65 76 61 6c 20 7b 0a 20 20 20 20 44 52 4f 50   eval {.    DROP
c460: 20 54 41 42 4c 45 20 74 32 3b 0a 20 20 20 20 43   TABLE t2;.    C
c470: 52 45 41 54 45 20 54 41 42 4c 45 20 74 32 28 78  REATE TABLE t2(x
c480: 2c 20 79 20 49 4e 54 45 47 45 52 20 52 45 46 45  , y INTEGER REFE
c490: 52 45 4e 43 45 53 20 74 31 29 3b 0a 20 20 7d 0a  RENCES t1);.  }.
c4a0: 20 20 64 62 32 20 65 76 61 6c 20 7b 0a 20 20 20    db2 eval {.   
c4b0: 20 50 52 41 47 4d 41 20 66 6f 72 65 69 67 6e 5f   PRAGMA foreign_
c4c0: 6b 65 79 5f 6c 69 73 74 28 74 32 29 3b 0a 20 20  key_list(t2);.  
c4d0: 7d 0a 7d 20 7b 30 20 30 20 74 31 20 79 20 7b 7d  }.} {0 0 t1 y {}
c4e0: 20 7b 4e 4f 20 41 43 54 49 4f 4e 7d 20 7b 4e 4f   {NO ACTION} {NO
c4f0: 20 41 43 54 49 4f 4e 7d 20 4e 4f 4e 45 7d 0a 0a   ACTION} NONE}..
c500: 64 61 74 61 62 61 73 65 5f 6e 65 76 65 72 5f 63  database_never_c
c510: 6f 72 72 75 70 74 0a 66 69 6e 69 73 68 5f 74 65  orrupt.finish_te
c520: 73 74 0a                                         st.