/ Hex Artifact Content
Login

Artifact 507ac7ef2ea5682241ea0ef041799ca70bb5e0bf:


0000: 23 20 32 30 30 32 20 4d 61 72 63 68 20 36 0a 23  # 2002 March 6.#
0010: 0a 23 20 54 68 65 20 61 75 74 68 6f 72 20 64 69  .# The author di
0020: 73 63 6c 61 69 6d 73 20 63 6f 70 79 72 69 67 68  sclaims copyrigh
0030: 74 20 74 6f 20 74 68 69 73 20 73 6f 75 72 63 65  t to this source
0040: 20 63 6f 64 65 2e 20 20 49 6e 20 70 6c 61 63 65   code.  In place
0050: 20 6f 66 0a 23 20 61 20 6c 65 67 61 6c 20 6e 6f   of.# a legal no
0060: 74 69 63 65 2c 20 68 65 72 65 20 69 73 20 61 20  tice, here is a 
0070: 62 6c 65 73 73 69 6e 67 3a 0a 23 0a 23 20 20 20  blessing:.#.#   
0080: 20 4d 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64   May you do good
0090: 20 61 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 23   and not evil..#
00a0: 20 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64      May you find
00b0: 20 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72   forgiveness for
00c0: 20 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f   yourself and fo
00d0: 72 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 23 20  rgive others..# 
00e0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
00f0: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0100: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0110: 79 6f 75 20 67 69 76 65 2e 0a 23 0a 23 2a 2a 2a  you give..#.#***
0120: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 0a 23 20 54 68 69 73 20 66 69 6c 65  ****.# This file
0170: 20 69 6d 70 6c 65 6d 65 6e 74 73 20 72 65 67 72   implements regr
0180: 65 73 73 69 6f 6e 20 74 65 73 74 73 20 66 6f 72  ession tests for
0190: 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79 2e   SQLite library.
01a0: 0a 23 0a 23 20 54 68 69 73 20 66 69 6c 65 20 69  .#.# This file i
01b0: 6d 70 6c 65 6d 65 6e 74 73 20 74 65 73 74 73 20  mplements tests 
01c0: 66 6f 72 20 74 68 65 20 50 52 41 47 4d 41 20 63  for the PRAGMA c
01d0: 6f 6d 6d 61 6e 64 2e 0a 23 0a 23 20 24 49 64 3a  ommand..#.# $Id:
01e0: 20 70 72 61 67 6d 61 2e 74 65 73 74 2c 76 20 31   pragma.test,v 1
01f0: 2e 37 33 20 32 30 30 39 2f 30 31 2f 31 32 20 31  .73 2009/01/12 1
0200: 34 3a 30 31 3a 34 35 20 64 61 6e 69 65 6c 6b 31  4:01:45 danielk1
0210: 39 37 37 20 45 78 70 20 24 0a 0a 73 65 74 20 74  977 Exp $..set t
0220: 65 73 74 64 69 72 20 5b 66 69 6c 65 20 64 69 72  estdir [file dir
0230: 6e 61 6d 65 20 24 61 72 67 76 30 5d 0a 73 6f 75  name $argv0].sou
0240: 72 63 65 20 24 74 65 73 74 64 69 72 2f 74 65 73  rce $testdir/tes
0250: 74 65 72 2e 74 63 6c 0a 73 65 74 20 74 65 73 74  ter.tcl.set test
0260: 70 72 65 66 69 78 20 70 72 61 67 6d 61 0a 0a 23  prefix pragma..#
0270: 20 44 6f 20 6e 6f 74 20 75 73 65 20 61 20 63 6f   Do not use a co
0280: 64 65 63 20 66 6f 72 20 74 65 73 74 73 20 69 6e  dec for tests in
0290: 20 74 68 69 73 20 66 69 6c 65 2c 20 61 73 20 74   this file, as t
02a0: 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
02b0: 20 69 73 0a 23 20 6d 61 6e 69 70 75 6c 61 74 65   is.# manipulate
02c0: 64 20 64 69 72 65 63 74 6c 79 20 75 73 69 6e 67  d directly using
02d0: 20 74 63 6c 20 73 63 72 69 70 74 73 20 28 75 73   tcl scripts (us
02e0: 69 6e 67 20 74 68 65 20 5b 68 65 78 69 6f 5f 77  ing the [hexio_w
02f0: 72 69 74 65 5d 20 63 6f 6d 6d 61 6e 64 29 2e 0a  rite] command)..
0300: 23 0a 64 6f 5f 6e 6f 74 5f 75 73 65 5f 63 6f 64  #.do_not_use_cod
0310: 65 63 0a 0a 23 20 54 65 73 74 20 6f 72 67 61 6e  ec..# Test organ
0320: 69 7a 61 74 69 6f 6e 3a 0a 23 0a 23 20 70 72 61  ization:.#.# pra
0330: 67 6d 61 2d 31 2e 2a 3a 20 54 65 73 74 20 63 61  gma-1.*: Test ca
0340: 63 68 65 5f 73 69 7a 65 2c 20 64 65 66 61 75 6c  che_size, defaul
0350: 74 5f 63 61 63 68 65 5f 73 69 7a 65 20 61 6e 64  t_cache_size and
0360: 20 73 79 6e 63 68 72 6f 6e 6f 75 73 20 6f 6e 20   synchronous on 
0370: 6d 61 69 6e 20 64 62 2e 0a 23 20 70 72 61 67 6d  main db..# pragm
0380: 61 2d 32 2e 2a 3a 20 54 65 73 74 20 73 79 6e 63  a-2.*: Test sync
0390: 68 72 6f 6e 6f 75 73 20 6f 6e 20 61 74 74 61 63  hronous on attac
03a0: 68 65 64 20 64 62 2e 0a 23 20 70 72 61 67 6d 61  hed db..# pragma
03b0: 2d 33 2e 2a 3a 20 54 65 73 74 20 64 65 74 65 63  -3.*: Test detec
03c0: 74 69 6f 6e 20 6f 66 20 74 61 62 6c 65 2f 69 6e  tion of table/in
03d0: 64 65 78 20 69 6e 63 6f 6e 73 69 73 74 65 6e 63  dex inconsistenc
03e0: 79 20 62 79 20 69 6e 74 65 67 72 69 74 79 5f 63  y by integrity_c
03f0: 68 65 63 6b 2e 0a 23 20 70 72 61 67 6d 61 2d 34  heck..# pragma-4
0400: 2e 2a 3a 20 54 65 73 74 20 63 61 63 68 65 5f 73  .*: Test cache_s
0410: 69 7a 65 20 61 6e 64 20 64 65 66 61 75 6c 74 5f  ize and default_
0420: 63 61 63 68 65 5f 73 69 7a 65 20 6f 6e 20 61 74  cache_size on at
0430: 74 61 63 68 65 64 20 64 62 2e 0a 23 20 70 72 61  tached db..# pra
0440: 67 6d 61 2d 35 2e 2a 3a 20 54 65 73 74 20 74 68  gma-5.*: Test th
0450: 61 74 20 70 72 61 67 6d 61 20 73 79 6e 63 68 72  at pragma synchr
0460: 6f 6e 6f 75 73 20 6d 61 79 20 6e 6f 74 20 62 65  onous may not be
0470: 20 75 73 65 64 20 69 6e 73 69 64 65 20 6f 66 20   used inside of 
0480: 61 0a 23 20 20 20 20 20 20 20 20 20 20 20 20 20  a.#             
0490: 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 23 20 70  transaction..# p
04a0: 72 61 67 6d 61 2d 36 2e 2a 3a 20 54 65 73 74 20  ragma-6.*: Test 
04b0: 73 63 68 65 6d 61 2d 71 75 65 72 79 20 70 72 61  schema-query pra
04c0: 67 6d 61 73 2e 0a 23 20 70 72 61 67 6d 61 2d 37  gmas..# pragma-7
04d0: 2e 2a 3a 20 4d 69 73 63 65 6c 6c 61 6e 65 6f 75  .*: Miscellaneou
04e0: 73 20 74 65 73 74 73 2e 0a 23 20 70 72 61 67 6d  s tests..# pragm
04f0: 61 2d 38 2e 2a 3a 20 54 65 73 74 20 75 73 65 72  a-8.*: Test user
0500: 5f 76 65 72 73 69 6f 6e 20 61 6e 64 20 73 63 68  _version and sch
0510: 65 6d 61 5f 76 65 72 73 69 6f 6e 20 70 72 61 67  ema_version prag
0520: 6d 61 73 2e 0a 23 20 70 72 61 67 6d 61 2d 39 2e  mas..# pragma-9.
0530: 2a 3a 20 54 65 73 74 20 74 65 6d 70 5f 73 74 6f  *: Test temp_sto
0540: 72 65 20 61 6e 64 20 74 65 6d 70 5f 73 74 6f 72  re and temp_stor
0550: 65 5f 64 69 72 65 63 74 6f 72 79 2e 0a 23 20 70  e_directory..# p
0560: 72 61 67 6d 61 2d 31 30 2e 2a 3a 20 54 65 73 74  ragma-10.*: Test
0570: 20 74 68 65 20 63 6f 75 6e 74 5f 63 68 61 6e 67   the count_chang
0580: 65 73 20 70 72 61 67 6d 61 20 69 6e 20 74 68 65  es pragma in the
0590: 20 70 72 65 73 65 6e 63 65 20 6f 66 20 74 72 69   presence of tri
05a0: 67 67 65 72 73 2e 0a 23 20 70 72 61 67 6d 61 2d  ggers..# pragma-
05b0: 31 31 2e 2a 3a 20 54 65 73 74 20 74 68 65 20 63  11.*: Test the c
05c0: 6f 6c 6c 61 74 69 6f 6e 5f 6c 69 73 74 20 70 72  ollation_list pr
05d0: 61 67 6d 61 2e 0a 23 20 70 72 61 67 6d 61 2d 31  agma..# pragma-1
05e0: 34 2e 2a 3a 20 54 65 73 74 20 74 68 65 20 70 61  4.*: Test the pa
05f0: 67 65 5f 63 6f 75 6e 74 20 70 72 61 67 6d 61 2e  ge_count pragma.
0600: 0a 23 20 70 72 61 67 6d 61 2d 31 35 2e 2a 3a 20  .# pragma-15.*: 
0610: 54 65 73 74 20 74 68 61 74 20 74 68 65 20 76 61  Test that the va
0620: 6c 75 65 20 73 65 74 20 75 73 69 6e 67 20 74 68  lue set using th
0630: 65 20 63 61 63 68 65 5f 73 69 7a 65 20 70 72 61  e cache_size pra
0640: 67 6d 61 20 69 73 20 6e 6f 74 0a 23 20 20 20 20  gma is not.#    
0650: 20 20 20 20 20 20 20 20 20 20 72 65 73 65 74 20            reset 
0660: 77 68 65 6e 20 74 68 65 20 73 63 68 65 6d 61 20  when the schema 
0670: 69 73 20 72 65 6c 6f 61 64 65 64 2e 0a 23 20 70  is reloaded..# p
0680: 72 61 67 6d 61 2d 31 36 2e 2a 3a 20 54 65 73 74  ragma-16.*: Test
0690: 20 70 72 6f 78 79 20 6c 6f 63 6b 69 6e 67 0a 23   proxy locking.#
06a0: 20 70 72 61 67 6d 61 2d 32 30 2e 2a 3a 20 54 65   pragma-20.*: Te
06b0: 73 74 20 64 61 74 61 5f 73 74 6f 72 65 5f 64 69  st data_store_di
06c0: 72 65 63 74 6f 72 79 2e 0a 23 20 70 72 61 67 6d  rectory..# pragm
06d0: 61 2d 32 32 2e 2a 3a 20 54 65 73 74 20 74 68 61  a-22.*: Test tha
06e0: 74 20 22 50 52 41 47 4d 41 20 5b 64 62 5d 2e 69  t "PRAGMA [db].i
06f0: 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 22 20  ntegrity_check" 
0700: 72 65 73 70 65 63 74 73 20 74 68 65 20 22 64 62  respects the "db
0710: 22 0a 23 20 20 20 20 20 20 20 20 20 20 20 20 20  ".#             
0720: 20 64 69 72 65 63 74 69 76 65 20 2d 20 69 66 20   directive - if 
0730: 69 74 20 69 73 20 70 72 65 73 65 6e 74 2e 0a 23  it is present..#
0740: 0a 0a 69 66 63 61 70 61 62 6c 65 20 21 70 72 61  ..ifcapable !pra
0750: 67 6d 61 20 7b 0a 20 20 66 69 6e 69 73 68 5f 74  gma {.  finish_t
0760: 65 73 74 0a 20 20 72 65 74 75 72 6e 0a 7d 0a 0a  est.  return.}..
0770: 23 20 43 61 70 74 75 72 65 20 74 68 65 20 6f 75  # Capture the ou
0780: 74 70 75 74 20 6f 66 20 61 20 70 72 61 67 6d 61  tput of a pragma
0790: 20 69 6e 20 61 20 54 45 4d 50 20 74 61 62 6c 65   in a TEMP table
07a0: 2e 0a 23 0a 70 72 6f 63 20 63 61 70 74 75 72 65  ..#.proc capture
07b0: 5f 70 72 61 67 6d 61 20 7b 64 62 20 74 61 62 6e  _pragma {db tabn
07c0: 61 6d 65 20 73 71 6c 7d 20 7b 0a 20 20 24 64 62  ame sql} {.  $db
07d0: 20 65 76 61 6c 20 22 44 52 4f 50 20 54 41 42 4c   eval "DROP TABL
07e0: 45 20 49 46 20 45 58 49 53 54 53 20 74 65 6d 70  E IF EXISTS temp
07f0: 2e 24 74 61 62 6e 61 6d 65 22 0a 20 20 73 65 74  .$tabname".  set
0800: 20 6f 6e 63 65 20 31 0a 20 20 24 64 62 20 65 76   once 1.  $db ev
0810: 61 6c 20 24 73 71 6c 20 78 20 7b 0a 20 20 20 20  al $sql x {.    
0820: 69 66 20 7b 24 6f 6e 63 65 7d 20 7b 0a 20 20 20  if {$once} {.   
0830: 20 20 20 73 65 74 20 6f 6e 63 65 20 30 0a 20 20     set once 0.  
0840: 20 20 20 20 73 65 74 20 69 6e 73 20 22 49 4e 53      set ins "INS
0850: 45 52 54 20 49 4e 54 4f 20 24 74 61 62 6e 61 6d  ERT INTO $tabnam
0860: 65 20 56 41 4c 55 45 53 22 0a 20 20 20 20 20 20  e VALUES".      
0870: 73 65 74 20 63 72 74 61 62 20 22 43 52 45 41 54  set crtab "CREAT
0880: 45 20 54 45 4d 50 20 54 41 42 4c 45 20 24 74 61  E TEMP TABLE $ta
0890: 62 6e 61 6d 65 20 22 0a 20 20 20 20 20 20 73 65  bname ".      se
08a0: 74 20 73 65 70 20 22 28 22 0a 20 20 20 20 20 20  t sep "(".      
08b0: 66 6f 72 65 61 63 68 20 63 6f 6c 20 24 78 28 2a  foreach col $x(*
08c0: 29 20 7b 0a 20 20 20 20 20 20 20 20 61 70 70 65  ) {.        appe
08d0: 6e 64 20 69 6e 73 20 24 7b 73 65 70 7d 5c 24 78  nd ins ${sep}\$x
08e0: 28 24 63 6f 6c 29 0a 20 20 20 20 20 20 20 20 61  ($col).        a
08f0: 70 70 65 6e 64 20 63 72 74 61 62 20 24 7b 73 65  ppend crtab ${se
0900: 70 7d 5c 22 24 63 6f 6c 5c 22 0a 20 20 20 20 20  p}\"$col\".     
0910: 20 20 20 73 65 74 20 73 65 70 20 2c 0a 20 20 20     set sep ,.   
0920: 20 20 20 7d 0a 20 20 20 20 20 20 61 70 70 65 6e     }.      appen
0930: 64 20 69 6e 73 20 29 0a 20 20 20 20 20 20 61 70  d ins ).      ap
0940: 70 65 6e 64 20 63 72 74 61 62 20 29 0a 20 20 20  pend crtab ).   
0950: 20 20 20 24 64 62 20 65 76 61 6c 20 24 63 72 74     $db eval $crt
0960: 61 62 0a 20 20 20 20 7d 0a 20 20 20 20 24 64 62  ab.    }.    $db
0970: 20 65 76 61 6c 20 24 69 6e 73 0a 20 20 7d 0a 7d   eval $ins.  }.}
0980: 0a 0a 23 20 44 65 6c 65 74 65 20 74 68 65 20 70  ..# Delete the p
0990: 72 65 65 78 69 73 74 69 6e 67 20 64 61 74 61 62  reexisting datab
09a0: 61 73 65 20 74 6f 20 61 76 6f 69 64 20 74 68 65  ase to avoid the
09b0: 20 73 70 65 63 69 61 6c 20 73 65 74 75 70 0a 23   special setup.#
09c0: 20 74 68 61 74 20 74 68 65 20 22 61 6c 6c 2e 74   that the "all.t
09d0: 65 73 74 22 20 73 63 72 69 70 74 20 64 6f 65 73  est" script does
09e0: 2e 0a 23 0a 64 62 20 63 6c 6f 73 65 0a 64 65 6c  ..#.db close.del
09f0: 65 74 65 5f 66 69 6c 65 20 74 65 73 74 2e 64 62  ete_file test.db
0a00: 20 74 65 73 74 2e 64 62 2d 6a 6f 75 72 6e 61 6c   test.db-journal
0a10: 0a 64 65 6c 65 74 65 5f 66 69 6c 65 20 74 65 73  .delete_file tes
0a20: 74 33 2e 64 62 20 74 65 73 74 33 2e 64 62 2d 6a  t3.db test3.db-j
0a30: 6f 75 72 6e 61 6c 0a 73 71 6c 69 74 65 33 20 64  ournal.sqlite3 d
0a40: 62 20 74 65 73 74 2e 64 62 3b 20 73 65 74 20 44  b test.db; set D
0a50: 42 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6e 6e 65  B [sqlite3_conne
0a60: 63 74 69 6f 6e 5f 70 6f 69 6e 74 65 72 20 64 62  ction_pointer db
0a70: 5d 0a 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46  ]..# EVIDENCE-OF
0a80: 3a 20 52 2d 31 33 38 36 31 2d 35 36 36 36 35 20  : R-13861-56665 
0a90: 50 52 41 47 4d 41 20 73 63 68 65 6d 61 2e 63 61  PRAGMA schema.ca
0aa0: 63 68 65 5f 73 69 7a 65 3b 20 50 52 41 47 4d 41  che_size; PRAGMA
0ab0: 0a 23 20 73 63 68 65 6d 61 2e 63 61 63 68 65 5f  .# schema.cache_
0ac0: 73 69 7a 65 20 3d 20 70 61 67 65 73 3b 20 50 52  size = pages; PR
0ad0: 41 47 4d 41 20 73 63 68 65 6d 61 2e 63 61 63 68  AGMA schema.cach
0ae0: 65 5f 73 69 7a 65 20 3d 20 2d 6b 69 62 69 62 79  e_size = -kibiby
0af0: 74 65 73 3b 0a 23 20 51 75 65 72 79 20 6f 72 20  tes;.# Query or 
0b00: 63 68 61 6e 67 65 20 74 68 65 20 73 75 67 67 65  change the sugge
0b10: 73 74 65 64 20 6d 61 78 69 6d 75 6d 20 6e 75 6d  sted maximum num
0b20: 62 65 72 20 6f 66 20 64 61 74 61 62 61 73 65 20  ber of database 
0b30: 64 69 73 6b 20 70 61 67 65 73 0a 23 20 74 68 61  disk pages.# tha
0b40: 74 20 53 51 4c 69 74 65 20 77 69 6c 6c 20 68 6f  t SQLite will ho
0b50: 6c 64 20 69 6e 20 6d 65 6d 6f 72 79 20 61 74 20  ld in memory at 
0b60: 6f 6e 63 65 20 70 65 72 20 6f 70 65 6e 20 64 61  once per open da
0b70: 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 23 0a 69  tabase file..#.i
0b80: 66 63 61 70 61 62 6c 65 20 70 61 67 65 72 5f 70  fcapable pager_p
0b90: 72 61 67 6d 61 73 20 7b 0a 73 65 74 20 44 46 4c  ragmas {.set DFL
0ba0: 54 5f 43 41 43 48 45 5f 53 5a 20 5b 64 62 20 6f  T_CACHE_SZ [db o
0bb0: 6e 65 20 7b 50 52 41 47 4d 41 20 64 65 66 61 75  ne {PRAGMA defau
0bc0: 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65 7d 5d 0a  lt_cache_size}].
0bd0: 73 65 74 20 54 45 4d 50 5f 43 41 43 48 45 5f 53  set TEMP_CACHE_S
0be0: 5a 20 5b 64 62 20 6f 6e 65 20 7b 50 52 41 47 4d  Z [db one {PRAGM
0bf0: 41 20 74 65 6d 70 2e 64 65 66 61 75 6c 74 5f 63  A temp.default_c
0c00: 61 63 68 65 5f 73 69 7a 65 7d 5d 0a 64 6f 5f 74  ache_size}].do_t
0c10: 65 73 74 20 70 72 61 67 6d 61 2d 31 2e 31 20 7b  est pragma-1.1 {
0c20: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
0c30: 20 50 52 41 47 4d 41 20 63 61 63 68 65 5f 73 69   PRAGMA cache_si
0c40: 7a 65 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 64  ze;.    PRAGMA d
0c50: 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a  efault_cache_siz
0c60: 65 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 73 79  e;.    PRAGMA sy
0c70: 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20 20 7d 0a 7d  nchronous;.  }.}
0c80: 20 5b 6c 69 73 74 20 24 44 46 4c 54 5f 43 41 43   [list $DFLT_CAC
0c90: 48 45 5f 53 5a 20 24 44 46 4c 54 5f 43 41 43 48  HE_SZ $DFLT_CACH
0ca0: 45 5f 53 5a 20 32 5d 0a 64 6f 5f 74 65 73 74 20  E_SZ 2].do_test 
0cb0: 70 72 61 67 6d 61 2d 31 2e 32 20 7b 0a 20 20 23  pragma-1.2 {.  #
0cc0: 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d   EVIDENCE-OF: R-
0cd0: 34 32 30 35 39 2d 34 37 32 31 31 20 49 66 20 74  42059-47211 If t
0ce0: 68 65 20 61 72 67 75 6d 65 6e 74 20 4e 20 69 73  he argument N is
0cf0: 20 70 6f 73 69 74 69 76 65 20 74 68 65 6e 20 74   positive then t
0d00: 68 65 0a 20 20 23 20 73 75 67 67 65 73 74 65 64  he.  # suggested
0d10: 20 63 61 63 68 65 20 73 69 7a 65 20 69 73 20 73   cache size is s
0d20: 65 74 20 74 6f 20 4e 2e 0a 20 20 65 78 65 63 73  et to N..  execs
0d30: 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20  ql {.    PRAGMA 
0d40: 73 79 6e 63 68 72 6f 6e 6f 75 73 3d 4f 46 46 3b  synchronous=OFF;
0d50: 0a 20 20 20 20 50 52 41 47 4d 41 20 63 61 63 68  .    PRAGMA cach
0d60: 65 5f 73 69 7a 65 3d 31 32 33 34 3b 0a 20 20 20  e_size=1234;.   
0d70: 20 50 52 41 47 4d 41 20 63 61 63 68 65 5f 73 69   PRAGMA cache_si
0d80: 7a 65 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 64  ze;.    PRAGMA d
0d90: 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a  efault_cache_siz
0da0: 65 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 73 79  e;.    PRAGMA sy
0db0: 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20 20 7d 0a 7d  nchronous;.  }.}
0dc0: 20 5b 6c 69 73 74 20 31 32 33 34 20 24 44 46 4c   [list 1234 $DFL
0dd0: 54 5f 43 41 43 48 45 5f 53 5a 20 30 5d 0a 64 6f  T_CACHE_SZ 0].do
0de0: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 2e 33  _test pragma-1.3
0df0: 20 7b 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20 20   {.  db close.  
0e00: 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e  sqlite3 db test.
0e10: 64 62 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  db.  execsql {. 
0e20: 20 20 20 50 52 41 47 4d 41 20 63 61 63 68 65 5f     PRAGMA cache_
0e30: 73 69 7a 65 3b 0a 20 20 20 20 50 52 41 47 4d 41  size;.    PRAGMA
0e40: 20 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73   default_cache_s
0e50: 69 7a 65 3b 0a 20 20 20 20 50 52 41 47 4d 41 20  ize;.    PRAGMA 
0e60: 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20 20 7d  synchronous;.  }
0e70: 0a 7d 20 5b 6c 69 73 74 20 24 44 46 4c 54 5f 43  .} [list $DFLT_C
0e80: 41 43 48 45 5f 53 5a 20 24 44 46 4c 54 5f 43 41  ACHE_SZ $DFLT_CA
0e90: 43 48 45 5f 53 5a 20 32 5d 0a 64 6f 5f 74 65 73  CHE_SZ 2].do_tes
0ea0: 74 20 70 72 61 67 6d 61 2d 31 2e 34 20 7b 0a 20  t pragma-1.4 {. 
0eb0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50   execsql {.    P
0ec0: 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75  RAGMA synchronou
0ed0: 73 3d 4f 46 46 3b 0a 20 20 20 20 50 52 41 47 4d  s=OFF;.    PRAGM
0ee0: 41 20 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20  A cache_size;.  
0ef0: 20 20 50 52 41 47 4d 41 20 64 65 66 61 75 6c 74    PRAGMA default
0f00: 5f 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20  _cache_size;.   
0f10: 20 50 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e   PRAGMA synchron
0f20: 6f 75 73 3b 0a 20 20 7d 0a 7d 20 5b 6c 69 73 74  ous;.  }.} [list
0f30: 20 24 44 46 4c 54 5f 43 41 43 48 45 5f 53 5a 20   $DFLT_CACHE_SZ 
0f40: 24 44 46 4c 54 5f 43 41 43 48 45 5f 53 5a 20 30  $DFLT_CACHE_SZ 0
0f50: 5d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  ].do_test pragma
0f60: 2d 31 2e 35 20 7b 0a 20 20 65 78 65 63 73 71 6c  -1.5 {.  execsql
0f70: 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 63 61   {.    PRAGMA ca
0f80: 63 68 65 5f 73 69 7a 65 3d 2d 34 33 32 31 3b 0a  che_size=-4321;.
0f90: 20 20 20 20 50 52 41 47 4d 41 20 63 61 63 68 65      PRAGMA cache
0fa0: 5f 73 69 7a 65 3b 0a 20 20 20 20 50 52 41 47 4d  _size;.    PRAGM
0fb0: 41 20 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f  A default_cache_
0fc0: 73 69 7a 65 3b 0a 20 20 20 20 50 52 41 47 4d 41  size;.    PRAGMA
0fd0: 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20 20   synchronous;.  
0fe0: 7d 0a 7d 20 5b 6c 69 73 74 20 2d 34 33 32 31 20  }.} [list -4321 
0ff0: 24 44 46 4c 54 5f 43 41 43 48 45 5f 53 5a 20 30  $DFLT_CACHE_SZ 0
1000: 5d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  ].do_test pragma
1010: 2d 31 2e 36 20 7b 0a 20 20 65 78 65 63 73 71 6c  -1.6 {.  execsql
1020: 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 73 79   {.    PRAGMA sy
1030: 6e 63 68 72 6f 6e 6f 75 73 3d 4f 4e 3b 0a 20 20  nchronous=ON;.  
1040: 20 20 50 52 41 47 4d 41 20 63 61 63 68 65 5f 73    PRAGMA cache_s
1050: 69 7a 65 3b 0a 20 20 20 20 50 52 41 47 4d 41 20  ize;.    PRAGMA 
1060: 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69  default_cache_si
1070: 7a 65 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 73  ze;.    PRAGMA s
1080: 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20 20 7d 0a  ynchronous;.  }.
1090: 7d 20 5b 6c 69 73 74 20 2d 34 33 32 31 20 24 44  } [list -4321 $D
10a0: 46 4c 54 5f 43 41 43 48 45 5f 53 5a 20 31 5d 0a  FLT_CACHE_SZ 1].
10b0: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31  do_test pragma-1
10c0: 2e 37 20 7b 0a 20 20 64 62 20 63 6c 6f 73 65 0a  .7 {.  db close.
10d0: 20 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73    sqlite3 db tes
10e0: 74 2e 64 62 0a 20 20 65 78 65 63 73 71 6c 20 7b  t.db.  execsql {
10f0: 0a 20 20 20 20 50 52 41 47 4d 41 20 63 61 63 68  .    PRAGMA cach
1100: 65 5f 73 69 7a 65 3b 0a 20 20 20 20 50 52 41 47  e_size;.    PRAG
1110: 4d 41 20 64 65 66 61 75 6c 74 5f 63 61 63 68 65  MA default_cache
1120: 5f 73 69 7a 65 3b 0a 20 20 20 20 50 52 41 47 4d  _size;.    PRAGM
1130: 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20  A synchronous;. 
1140: 20 7d 0a 7d 20 5b 6c 69 73 74 20 24 44 46 4c 54   }.} [list $DFLT
1150: 5f 43 41 43 48 45 5f 53 5a 20 24 44 46 4c 54 5f  _CACHE_SZ $DFLT_
1160: 43 41 43 48 45 5f 53 5a 20 32 5d 0a 64 6f 5f 74  CACHE_SZ 2].do_t
1170: 65 73 74 20 70 72 61 67 6d 61 2d 31 2e 38 20 7b  est pragma-1.8 {
1180: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
1190: 20 50 52 41 47 4d 41 20 64 65 66 61 75 6c 74 5f   PRAGMA default_
11a0: 63 61 63 68 65 5f 73 69 7a 65 3d 2d 31 32 33 3b  cache_size=-123;
11b0: 0a 20 20 20 20 50 52 41 47 4d 41 20 63 61 63 68  .    PRAGMA cach
11c0: 65 5f 73 69 7a 65 3b 0a 20 20 20 20 50 52 41 47  e_size;.    PRAG
11d0: 4d 41 20 64 65 66 61 75 6c 74 5f 63 61 63 68 65  MA default_cache
11e0: 5f 73 69 7a 65 3b 0a 20 20 20 20 50 52 41 47 4d  _size;.    PRAGM
11f0: 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20  A synchronous;. 
1200: 20 7d 0a 7d 20 7b 31 32 33 20 31 32 33 20 32 7d   }.} {123 123 2}
1210: 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d  .do_test pragma-
1220: 31 2e 39 2e 31 20 7b 0a 20 20 64 62 20 63 6c 6f  1.9.1 {.  db clo
1230: 73 65 0a 20 20 73 71 6c 69 74 65 33 20 64 62 20  se.  sqlite3 db 
1240: 74 65 73 74 2e 64 62 3b 20 73 65 74 20 3a 3a 44  test.db; set ::D
1250: 42 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6e 6e 65  B [sqlite3_conne
1260: 63 74 69 6f 6e 5f 70 6f 69 6e 74 65 72 20 64 62  ction_pointer db
1270: 5d 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  ].  execsql {.  
1280: 20 20 50 52 41 47 4d 41 20 63 61 63 68 65 5f 73    PRAGMA cache_s
1290: 69 7a 65 3b 0a 20 20 20 20 50 52 41 47 4d 41 20  ize;.    PRAGMA 
12a0: 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69  default_cache_si
12b0: 7a 65 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 73  ze;.    PRAGMA s
12c0: 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20 20 7d 0a  ynchronous;.  }.
12d0: 7d 20 7b 31 32 33 20 31 32 33 20 32 7d 0a 69 66  } {123 123 2}.if
12e0: 63 61 70 61 62 6c 65 20 76 61 63 75 75 6d 20 7b  capable vacuum {
12f0: 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .  do_test pragm
1300: 61 2d 31 2e 39 2e 32 20 7b 0a 20 20 20 20 65 78  a-1.9.2 {.    ex
1310: 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 56 41  ecsql {.      VA
1320: 43 55 55 4d 3b 0a 20 20 20 20 20 20 50 52 41 47  CUUM;.      PRAG
1330: 4d 41 20 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20  MA cache_size;. 
1340: 20 20 20 20 20 50 52 41 47 4d 41 20 64 65 66 61       PRAGMA defa
1350: 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65 3b 0a  ult_cache_size;.
1360: 20 20 20 20 20 20 50 52 41 47 4d 41 20 73 79 6e        PRAGMA syn
1370: 63 68 72 6f 6e 6f 75 73 3b 0a 20 20 20 20 7d 0a  chronous;.    }.
1380: 20 20 7d 20 7b 31 32 33 20 31 32 33 20 32 7d 0a    } {123 123 2}.
1390: 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  }.do_test pragma
13a0: 2d 31 2e 31 30 20 7b 0a 20 20 65 78 65 63 73 71  -1.10 {.  execsq
13b0: 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 73  l {.    PRAGMA s
13c0: 79 6e 63 68 72 6f 6e 6f 75 73 3d 4e 4f 52 4d 41  ynchronous=NORMA
13d0: 4c 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 63 61  L;.    PRAGMA ca
13e0: 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 50 52  che_size;.    PR
13f0: 41 47 4d 41 20 64 65 66 61 75 6c 74 5f 63 61 63  AGMA default_cac
1400: 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 50 52 41  he_size;.    PRA
1410: 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3b  GMA synchronous;
1420: 0a 20 20 7d 0a 7d 20 7b 31 32 33 20 31 32 33 20  .  }.} {123 123 
1430: 31 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  1}.do_test pragm
1440: 61 2d 31 2e 31 31 2e 31 20 7b 0a 20 20 65 78 65  a-1.11.1 {.  exe
1450: 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d  csql {.    PRAGM
1460: 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3d 45 58  A synchronous=EX
1470: 54 52 41 3b 0a 20 20 20 20 50 52 41 47 4d 41 20  TRA;.    PRAGMA 
1480: 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20  cache_size;.    
1490: 50 52 41 47 4d 41 20 64 65 66 61 75 6c 74 5f 63  PRAGMA default_c
14a0: 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 50  ache_size;.    P
14b0: 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75  RAGMA synchronou
14c0: 73 3b 0a 20 20 7d 0a 7d 20 7b 31 32 33 20 31 32  s;.  }.} {123 12
14d0: 33 20 33 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61  3 3}.do_test pra
14e0: 67 6d 61 2d 31 2e 31 31 2e 32 20 7b 0a 20 20 65  gma-1.11.2 {.  e
14f0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41  xecsql {.    PRA
1500: 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3d  GMA synchronous=
1510: 46 55 4c 4c 3b 0a 20 20 20 20 50 52 41 47 4d 41  FULL;.    PRAGMA
1520: 20 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20   cache_size;.   
1530: 20 50 52 41 47 4d 41 20 64 65 66 61 75 6c 74 5f   PRAGMA default_
1540: 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20  cache_size;.    
1550: 50 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f  PRAGMA synchrono
1560: 75 73 3b 0a 20 20 7d 0a 7d 20 7b 31 32 33 20 31  us;.  }.} {123 1
1570: 32 33 20 32 7d 0a 64 6f 5f 74 65 73 74 20 70 72  23 2}.do_test pr
1580: 61 67 6d 61 2d 31 2e 31 32 20 7b 0a 20 20 64 62  agma-1.12 {.  db
1590: 20 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74 65 33   close.  sqlite3
15a0: 20 64 62 20 74 65 73 74 2e 64 62 3b 20 73 65 74   db test.db; set
15b0: 20 3a 3a 44 42 20 5b 73 71 6c 69 74 65 33 5f 63   ::DB [sqlite3_c
15c0: 6f 6e 6e 65 63 74 69 6f 6e 5f 70 6f 69 6e 74 65  onnection_pointe
15d0: 72 20 64 62 5d 0a 20 20 65 78 65 63 73 71 6c 20  r db].  execsql 
15e0: 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 63 61 63  {.    PRAGMA cac
15f0: 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 50 52 41  he_size;.    PRA
1600: 47 4d 41 20 64 65 66 61 75 6c 74 5f 63 61 63 68  GMA default_cach
1610: 65 5f 73 69 7a 65 3b 0a 20 20 20 20 50 52 41 47  e_size;.    PRAG
1620: 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a  MA synchronous;.
1630: 20 20 7d 0a 7d 20 7b 31 32 33 20 31 32 33 20 32    }.} {123 123 2
1640: 7d 0a 0a 23 20 4d 61 6b 65 20 73 75 72 65 20 74  }..# Make sure t
1650: 68 65 20 70 72 61 67 6d 61 20 68 61 6e 64 6c 65  he pragma handle
1660: 72 20 75 6e 64 65 72 73 74 61 6e 64 73 20 6e 75  r understands nu
1670: 6d 65 72 69 63 20 76 61 6c 75 65 73 20 69 6e 20  meric values in 
1680: 61 64 64 69 74 69 6f 6e 0a 23 20 74 6f 20 6b 65  addition.# to ke
1690: 79 77 6f 72 64 73 20 6c 69 6b 65 20 22 6f 66 66  ywords like "off
16a0: 22 20 61 6e 64 20 22 66 75 6c 6c 22 2e 0a 23 0a  " and "full"..#.
16b0: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31  do_test pragma-1
16c0: 2e 31 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  .13 {.  execsql 
16d0: 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 73 79 6e  {.    PRAGMA syn
16e0: 63 68 72 6f 6e 6f 75 73 3d 30 3b 0a 20 20 20 20  chronous=0;.    
16f0: 50 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f  PRAGMA synchrono
1700: 75 73 3b 0a 20 20 7d 0a 7d 20 7b 30 7d 0a 64 6f  us;.  }.} {0}.do
1710: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 2e 31  _test pragma-1.1
1720: 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  4 {.  execsql {.
1730: 20 20 20 20 50 52 41 47 4d 41 20 73 79 6e 63 68      PRAGMA synch
1740: 72 6f 6e 6f 75 73 3d 32 3b 0a 20 20 20 20 50 52  ronous=2;.    PR
1750: 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73  AGMA synchronous
1760: 3b 0a 20 20 7d 0a 7d 20 7b 32 7d 0a 64 6f 5f 74  ;.  }.} {2}.do_t
1770: 65 73 74 20 70 72 61 67 6d 61 2d 31 2e 31 34 2e  est pragma-1.14.
1780: 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  1 {.  execsql {.
1790: 20 20 20 20 50 52 41 47 4d 41 20 73 79 6e 63 68      PRAGMA synch
17a0: 72 6f 6e 6f 75 73 3d 34 3b 0a 20 20 20 20 50 52  ronous=4;.    PR
17b0: 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73  AGMA synchronous
17c0: 3b 0a 20 20 7d 0a 7d 20 7b 34 7d 0a 64 6f 5f 74  ;.  }.} {4}.do_t
17d0: 65 73 74 20 70 72 61 67 6d 61 2d 31 2e 31 34 2e  est pragma-1.14.
17e0: 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  2 {.  execsql {.
17f0: 20 20 20 20 50 52 41 47 4d 41 20 73 79 6e 63 68      PRAGMA synch
1800: 72 6f 6e 6f 75 73 3d 33 3b 0a 20 20 20 20 50 52  ronous=3;.    PR
1810: 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73  AGMA synchronous
1820: 3b 0a 20 20 7d 0a 7d 20 7b 33 7d 0a 64 6f 5f 74  ;.  }.} {3}.do_t
1830: 65 73 74 20 70 72 61 67 6d 61 2d 31 2e 31 34 2e  est pragma-1.14.
1840: 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  3 {.  execsql {.
1850: 20 20 20 20 50 52 41 47 4d 41 20 73 79 6e 63 68      PRAGMA synch
1860: 72 6f 6e 6f 75 73 3d 38 3b 0a 20 20 20 20 50 52  ronous=8;.    PR
1870: 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73  AGMA synchronous
1880: 3b 0a 20 20 7d 0a 7d 20 7b 30 7d 0a 64 6f 5f 74  ;.  }.} {0}.do_t
1890: 65 73 74 20 70 72 61 67 6d 61 2d 31 2e 31 34 2e  est pragma-1.14.
18a0: 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  4 {.  execsql {.
18b0: 20 20 20 20 50 52 41 47 4d 41 20 73 79 6e 63 68      PRAGMA synch
18c0: 72 6f 6e 6f 75 73 3d 31 30 3b 0a 20 20 20 20 50  ronous=10;.    P
18d0: 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75  RAGMA synchronou
18e0: 73 3b 0a 20 20 7d 0a 7d 20 7b 32 7d 0a 7d 20 3b  s;.  }.} {2}.} ;
18f0: 23 20 69 66 63 61 70 61 62 6c 65 20 70 61 67 65  # ifcapable page
1900: 72 5f 70 72 61 67 6d 61 73 0a 0a 23 20 54 65 73  r_pragmas..# Tes
1910: 74 20 74 75 72 6e 69 6e 67 20 22 66 6c 61 67 22  t turning "flag"
1920: 20 70 72 61 67 6d 61 73 20 6f 6e 20 61 6e 64 20   pragmas on and 
1930: 6f 66 66 2e 0a 23 0a 69 66 63 61 70 61 62 6c 65  off..#.ifcapable
1940: 20 64 65 62 75 67 20 7b 0a 20 20 23 20 50 72 61   debug {.  # Pra
1950: 67 6d 61 20 22 76 64 62 65 5f 6c 69 73 74 69 6e  gma "vdbe_listin
1960: 67 22 20 69 73 20 6f 6e 6c 79 20 61 76 61 69 6c  g" is only avail
1970: 61 62 6c 65 20 69 66 20 63 6f 6d 70 69 6c 65 64  able if compiled
1980: 20 77 69 74 68 20 53 51 4c 49 54 45 5f 44 45 42   with SQLITE_DEB
1990: 55 47 0a 20 20 23 0a 20 20 64 6f 5f 74 65 73 74  UG.  #.  do_test
19a0: 20 70 72 61 67 6d 61 2d 31 2e 31 35 20 7b 0a 20   pragma-1.15 {. 
19b0: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
19c0: 20 20 20 50 52 41 47 4d 41 20 76 64 62 65 5f 6c     PRAGMA vdbe_l
19d0: 69 73 74 69 6e 67 3d 59 45 53 3b 0a 20 20 20 20  isting=YES;.    
19e0: 20 20 50 52 41 47 4d 41 20 76 64 62 65 5f 6c 69    PRAGMA vdbe_li
19f0: 73 74 69 6e 67 3b 0a 20 20 20 20 7d 0a 20 20 7d  sting;.    }.  }
1a00: 20 7b 31 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70   {1}.  do_test p
1a10: 72 61 67 6d 61 2d 31 2e 31 36 20 7b 0a 20 20 20  ragma-1.16 {.   
1a20: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20   execsql {.     
1a30: 20 50 52 41 47 4d 41 20 76 64 62 65 5f 6c 69 73   PRAGMA vdbe_lis
1a40: 74 69 6e 67 3d 4e 4f 3b 0a 20 20 20 20 20 20 50  ting=NO;.      P
1a50: 52 41 47 4d 41 20 76 64 62 65 5f 6c 69 73 74 69  RAGMA vdbe_listi
1a60: 6e 67 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 30  ng;.    }.  } {0
1a70: 7d 0a 7d 0a 0a 64 6f 5f 74 65 73 74 20 70 72 61  }.}..do_test pra
1a80: 67 6d 61 2d 31 2e 31 37 20 7b 0a 20 20 65 78 65  gma-1.17 {.  exe
1a90: 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d  csql {.    PRAGM
1aa0: 41 20 70 61 72 73 65 72 5f 74 72 61 63 65 3d 4f  A parser_trace=O
1ab0: 4e 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 70 61  N;.    PRAGMA pa
1ac0: 72 73 65 72 5f 74 72 61 63 65 3d 4f 46 46 3b 0a  rser_trace=OFF;.
1ad0: 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74    }.} {}.do_test
1ae0: 20 70 72 61 67 6d 61 2d 31 2e 31 38 20 7b 0a 20   pragma-1.18 {. 
1af0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50   execsql {.    P
1b00: 52 41 47 4d 41 20 62 6f 67 75 73 20 3d 20 2d 31  RAGMA bogus = -1
1b10: 32 33 34 3b 20 20 2d 2d 20 50 61 72 73 69 6e 67  234;  -- Parsing
1b20: 20 6f 66 20 6e 65 67 61 74 69 76 65 20 76 61 6c   of negative val
1b30: 75 65 73 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a 23 20  ues.  }.} {}..# 
1b40: 54 65 73 74 20 6d 6f 64 69 66 79 69 6e 67 20 74  Test modifying t
1b50: 68 65 20 73 61 66 65 74 79 5f 6c 65 76 65 6c 20  he safety_level 
1b60: 6f 66 20 61 6e 20 61 74 74 61 63 68 65 64 20 64  of an attached d
1b70: 61 74 61 62 61 73 65 2e 0a 69 66 63 61 70 61 62  atabase..ifcapab
1b80: 6c 65 20 70 61 67 65 72 5f 70 72 61 67 6d 61 73  le pager_pragmas
1b90: 26 26 61 74 74 61 63 68 20 7b 0a 20 20 64 6f 5f  &&attach {.  do_
1ba0: 74 65 73 74 20 70 72 61 67 6d 61 2d 32 2e 31 20  test pragma-2.1 
1bb0: 7b 0a 20 20 20 20 66 6f 72 63 65 64 65 6c 65 74  {.    forcedelet
1bc0: 65 20 74 65 73 74 32 2e 64 62 0a 20 20 20 20 66  e test2.db.    f
1bd0: 6f 72 63 65 64 65 6c 65 74 65 20 74 65 73 74 32  orcedelete test2
1be0: 2e 64 62 2d 6a 6f 75 72 6e 61 6c 0a 20 20 20 20  .db-journal.    
1bf0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
1c00: 41 54 54 41 43 48 20 27 74 65 73 74 32 2e 64 62  ATTACH 'test2.db
1c10: 27 20 41 53 20 61 75 78 3b 0a 20 20 20 20 7d 20  ' AS aux;.    } 
1c20: 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65 73  .  } {}.  do_tes
1c30: 74 20 70 72 61 67 6d 61 2d 32 2e 32 20 7b 0a 20  t pragma-2.2 {. 
1c40: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
1c50: 20 20 20 70 72 61 67 6d 61 20 61 75 78 2e 73 79     pragma aux.sy
1c60: 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20 20 20 20 7d  nchronous;.    }
1c70: 20 0a 20 20 7d 20 7b 32 7d 0a 20 20 64 6f 5f 74   .  } {2}.  do_t
1c80: 65 73 74 20 70 72 61 67 6d 61 2d 32 2e 33 20 7b  est pragma-2.3 {
1c90: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
1ca0: 20 20 20 20 20 70 72 61 67 6d 61 20 61 75 78 2e       pragma aux.
1cb0: 73 79 6e 63 68 72 6f 6e 6f 75 73 20 3d 20 4f 46  synchronous = OF
1cc0: 46 3b 0a 20 20 20 20 20 20 70 72 61 67 6d 61 20  F;.      pragma 
1cd0: 61 75 78 2e 73 79 6e 63 68 72 6f 6e 6f 75 73 3b  aux.synchronous;
1ce0: 0a 20 20 20 20 20 20 70 72 61 67 6d 61 20 73 79  .      pragma sy
1cf0: 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20 20 20 20 7d  nchronous;.    }
1d00: 20 0a 20 20 7d 20 7b 30 20 32 7d 0a 20 20 64 6f   .  } {0 2}.  do
1d10: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 32 2e 34  _test pragma-2.4
1d20: 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b   {.    execsql {
1d30: 0a 20 20 20 20 20 20 70 72 61 67 6d 61 20 61 75  .      pragma au
1d40: 78 2e 73 79 6e 63 68 72 6f 6e 6f 75 73 20 3d 20  x.synchronous = 
1d50: 4f 4e 3b 0a 20 20 20 20 20 20 70 72 61 67 6d 61  ON;.      pragma
1d60: 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20 20   synchronous;.  
1d70: 20 20 20 20 70 72 61 67 6d 61 20 61 75 78 2e 73      pragma aux.s
1d80: 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20 20 20 20  ynchronous;.    
1d90: 7d 20 0a 20 20 7d 20 7b 32 20 31 7d 0a 7d 20 3b  } .  } {2 1}.} ;
1da0: 23 20 69 66 63 61 70 61 62 6c 65 20 70 61 67 65  # ifcapable page
1db0: 72 5f 70 72 61 67 6d 61 73 0a 0a 23 20 43 6f 6e  r_pragmas..# Con
1dc0: 73 74 72 75 63 74 20 61 20 63 6f 72 72 75 70 74  struct a corrupt
1dd0: 65 64 20 69 6e 64 65 78 20 61 6e 64 20 6d 61 6b  ed index and mak
1de0: 65 20 73 75 72 65 20 74 68 65 20 69 6e 74 65 67  e sure the integ
1df0: 72 69 74 79 5f 63 68 65 63 6b 0a 23 20 70 72 61  rity_check.# pra
1e00: 67 6d 61 20 66 69 6e 64 73 20 69 74 2e 0a 23 0a  gma finds it..#.
1e10: 23 20 54 68 65 73 65 20 74 65 73 74 73 20 77 6f  # These tests wo
1e20: 6e 27 74 20 77 6f 72 6b 20 69 66 20 74 68 65 20  n't work if the 
1e30: 64 61 74 61 62 61 73 65 20 69 73 20 65 6e 63 72  database is encr
1e40: 79 70 74 65 64 0a 23 0a 64 6f 5f 74 65 73 74 20  ypted.#.do_test 
1e50: 70 72 61 67 6d 61 2d 33 2e 31 20 7b 0a 20 20 64  pragma-3.1 {.  d
1e60: 62 20 63 6c 6f 73 65 0a 20 20 66 6f 72 63 65 64  b close.  forced
1e70: 65 6c 65 74 65 20 74 65 73 74 2e 64 62 20 74 65  elete test.db te
1e80: 73 74 2e 64 62 2d 6a 6f 75 72 6e 61 6c 0a 20 20  st.db-journal.  
1e90: 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e  sqlite3 db test.
1ea0: 64 62 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  db.  execsql {. 
1eb0: 20 20 20 50 52 41 47 4d 41 20 61 75 74 6f 5f 76     PRAGMA auto_v
1ec0: 61 63 75 75 6d 3d 4f 46 46 3b 0a 20 20 20 20 42  acuum=OFF;.    B
1ed0: 45 47 49 4e 3b 0a 20 20 20 20 43 52 45 41 54 45  EGIN;.    CREATE
1ee0: 20 54 41 42 4c 45 20 74 32 28 61 2c 62 2c 63 29   TABLE t2(a,b,c)
1ef0: 3b 0a 20 20 20 20 43 52 45 41 54 45 20 49 4e 44  ;.    CREATE IND
1f00: 45 58 20 69 32 20 4f 4e 20 74 32 28 61 29 3b 0a  EX i2 ON t2(a);.
1f10: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
1f20: 74 32 20 56 41 4c 55 45 53 28 31 31 2c 32 2c 33  t2 VALUES(11,2,3
1f30: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
1f40: 54 4f 20 74 32 20 56 41 4c 55 45 53 28 32 32 2c  TO t2 VALUES(22,
1f50: 33 2c 34 29 3b 0a 20 20 20 20 43 4f 4d 4d 49 54  3,4);.    COMMIT
1f60: 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 72 6f 77  ;.    SELECT row
1f70: 69 64 2c 20 2a 20 66 72 6f 6d 20 74 32 3b 0a 20  id, * from t2;. 
1f80: 20 7d 0a 7d 20 7b 31 20 31 31 20 32 20 33 20 32   }.} {1 11 2 3 2
1f90: 20 32 32 20 33 20 34 7d 0a 69 66 63 61 70 61 62   22 3 4}.ifcapab
1fa0: 6c 65 20 61 74 74 61 63 68 20 7b 0a 20 20 69 66  le attach {.  if
1fb0: 20 7b 21 5b 73 71 6c 69 74 65 33 20 2d 68 61 73   {![sqlite3 -has
1fc0: 2d 63 6f 64 65 63 5d 20 26 26 20 24 73 71 6c 69  -codec] && $sqli
1fd0: 74 65 5f 6f 70 74 69 6f 6e 73 28 69 6e 74 65 67  te_options(integ
1fe0: 72 69 74 79 63 6b 29 7d 20 7b 0a 20 20 20 20 64  rityck)} {.    d
1ff0: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 33 2e  o_test pragma-3.
2000: 32 20 7b 0a 20 20 20 20 20 20 64 62 20 65 76 61  2 {.      db eva
2010: 6c 20 7b 53 45 4c 45 43 54 20 72 6f 6f 74 70 61  l {SELECT rootpa
2020: 67 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d  ge FROM sqlite_m
2030: 61 73 74 65 72 20 57 48 45 52 45 20 6e 61 6d 65  aster WHERE name
2040: 3d 27 69 32 27 7d 20 62 72 65 61 6b 0a 20 20 20  ='i2'} break.   
2050: 20 20 20 73 65 74 20 70 67 73 7a 20 5b 64 62 20     set pgsz [db 
2060: 65 76 61 6c 20 7b 50 52 41 47 4d 41 20 70 61 67  eval {PRAGMA pag
2070: 65 5f 73 69 7a 65 7d 5d 0a 20 20 20 20 20 20 23  e_size}].      #
2080: 20 6f 76 65 72 77 72 69 74 65 20 74 68 65 20 68   overwrite the h
2090: 65 61 64 65 72 20 6f 6e 20 74 68 65 20 72 6f 6f  eader on the roo
20a0: 74 70 61 67 65 20 6f 66 20 74 68 65 20 69 6e 64  tpage of the ind
20b0: 65 78 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 20  ex in order to. 
20c0: 20 20 20 20 20 23 20 6d 61 6b 65 20 74 68 65 20       # make the 
20d0: 69 6e 64 65 78 20 61 70 70 65 61 72 20 74 6f 20  index appear to 
20e0: 62 65 20 65 6d 70 74 79 2e 0a 20 20 20 20 20 20  be empty..      
20f0: 23 0a 20 20 20 20 20 20 73 65 74 20 6f 66 66 73  #.      set offs
2100: 65 74 20 5b 65 78 70 72 20 7b 24 70 67 73 7a 2a  et [expr {$pgsz*
2110: 28 24 72 6f 6f 74 70 61 67 65 2d 31 29 7d 5d 0a  ($rootpage-1)}].
2120: 20 20 20 20 20 20 68 65 78 69 6f 5f 77 72 69 74        hexio_writ
2130: 65 20 74 65 73 74 2e 64 62 20 24 6f 66 66 73 65  e test.db $offse
2140: 74 20 30 61 30 30 30 30 30 30 30 30 30 34 30 30  t 0a000000000400
2150: 30 30 30 30 30 30 30 30 0a 20 20 20 20 20 20 64  00000000.      d
2160: 62 20 63 6c 6f 73 65 0a 20 20 20 20 20 20 73 71  b close.      sq
2170: 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64 62  lite3 db test.db
2180: 0a 20 20 20 20 20 20 65 78 65 63 73 71 6c 20 7b  .      execsql {
2190: 50 52 41 47 4d 41 20 69 6e 74 65 67 72 69 74 79  PRAGMA integrity
21a0: 5f 63 68 65 63 6b 7d 0a 20 20 20 20 7d 20 7b 7b  _check}.    } {{
21b0: 72 6f 77 20 31 20 6d 69 73 73 69 6e 67 20 66 72  row 1 missing fr
21c0: 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b 72 6f  om index i2} {ro
21d0: 77 20 32 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d  w 2 missing from
21e0: 20 69 6e 64 65 78 20 69 32 7d 20 7b 77 72 6f 6e   index i2} {wron
21f0: 67 20 23 20 6f 66 20 65 6e 74 72 69 65 73 20 69  g # of entries i
2200: 6e 20 69 6e 64 65 78 20 69 32 7d 7d 0a 20 20 20  n index i2}}.   
2210: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
2220: 33 2e 33 20 7b 0a 20 20 20 20 20 20 65 78 65 63  3.3 {.      exec
2230: 73 71 6c 20 7b 50 52 41 47 4d 41 20 69 6e 74 65  sql {PRAGMA inte
2240: 67 72 69 74 79 5f 63 68 65 63 6b 3d 31 7d 0a 20  grity_check=1}. 
2250: 20 20 20 7d 20 7b 7b 72 6f 77 20 31 20 6d 69 73     } {{row 1 mis
2260: 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20  sing from index 
2270: 69 32 7d 7d 0a 20 20 20 20 64 6f 5f 74 65 73 74  i2}}.    do_test
2280: 20 70 72 61 67 6d 61 2d 33 2e 34 20 7b 0a 20 20   pragma-3.4 {.  
2290: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20      execsql {.  
22a0: 20 20 20 20 20 20 41 54 54 41 43 48 20 44 41 54        ATTACH DAT
22b0: 41 42 41 53 45 20 27 74 65 73 74 2e 64 62 27 20  ABASE 'test.db' 
22c0: 41 53 20 74 32 3b 0a 20 20 20 20 20 20 20 20 50  AS t2;.        P
22d0: 52 41 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f  RAGMA integrity_
22e0: 63 68 65 63 6b 0a 20 20 20 20 20 20 7d 0a 20 20  check.      }.  
22f0: 20 20 7d 20 7b 7b 72 6f 77 20 31 20 6d 69 73 73    } {{row 1 miss
2300: 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69  ing from index i
2310: 32 7d 20 7b 72 6f 77 20 32 20 6d 69 73 73 69 6e  2} {row 2 missin
2320: 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d  g from index i2}
2330: 20 7b 77 72 6f 6e 67 20 23 20 6f 66 20 65 6e 74   {wrong # of ent
2340: 72 69 65 73 20 69 6e 20 69 6e 64 65 78 20 69 32  ries in index i2
2350: 7d 20 7b 72 6f 77 20 31 20 6d 69 73 73 69 6e 67  } {row 1 missing
2360: 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20   from index i2} 
2370: 7b 72 6f 77 20 32 20 6d 69 73 73 69 6e 67 20 66  {row 2 missing f
2380: 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b 77  rom index i2} {w
2390: 72 6f 6e 67 20 23 20 6f 66 20 65 6e 74 72 69 65  rong # of entrie
23a0: 73 20 69 6e 20 69 6e 64 65 78 20 69 32 7d 7d 0a  s in index i2}}.
23b0: 20 20 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67      do_test prag
23c0: 6d 61 2d 33 2e 35 20 7b 0a 20 20 20 20 20 20 65  ma-3.5 {.      e
23d0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 20  xecsql {.       
23e0: 20 50 52 41 47 4d 41 20 69 6e 74 65 67 72 69 74   PRAGMA integrit
23f0: 79 5f 63 68 65 63 6b 3d 34 0a 20 20 20 20 20 20  y_check=4.      
2400: 7d 0a 20 20 20 20 7d 20 7b 7b 72 6f 77 20 31 20  }.    } {{row 1 
2410: 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64  missing from ind
2420: 65 78 20 69 32 7d 20 7b 72 6f 77 20 32 20 6d 69  ex i2} {row 2 mi
2430: 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78  ssing from index
2440: 20 69 32 7d 20 7b 77 72 6f 6e 67 20 23 20 6f 66   i2} {wrong # of
2450: 20 65 6e 74 72 69 65 73 20 69 6e 20 69 6e 64 65   entries in inde
2460: 78 20 69 32 7d 20 7b 72 6f 77 20 31 20 6d 69 73  x i2} {row 1 mis
2470: 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20  sing from index 
2480: 69 32 7d 7d 0a 20 20 20 20 64 6f 5f 74 65 73 74  i2}}.    do_test
2490: 20 70 72 61 67 6d 61 2d 33 2e 36 20 7b 0a 20 20   pragma-3.6 {.  
24a0: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20      execsql {.  
24b0: 20 20 20 20 20 20 50 52 41 47 4d 41 20 69 6e 74        PRAGMA int
24c0: 65 67 72 69 74 79 5f 63 68 65 63 6b 3d 78 79 7a  egrity_check=xyz
24d0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 20 7b  .      }.    } {
24e0: 7b 72 6f 77 20 31 20 6d 69 73 73 69 6e 67 20 66  {row 1 missing f
24f0: 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b 72  rom index i2} {r
2500: 6f 77 20 32 20 6d 69 73 73 69 6e 67 20 66 72 6f  ow 2 missing fro
2510: 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b 77 72 6f  m index i2} {wro
2520: 6e 67 20 23 20 6f 66 20 65 6e 74 72 69 65 73 20  ng # of entries 
2530: 69 6e 20 69 6e 64 65 78 20 69 32 7d 20 7b 72 6f  in index i2} {ro
2540: 77 20 31 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d  w 1 missing from
2550: 20 69 6e 64 65 78 20 69 32 7d 20 7b 72 6f 77 20   index i2} {row 
2560: 32 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69  2 missing from i
2570: 6e 64 65 78 20 69 32 7d 20 7b 77 72 6f 6e 67 20  ndex i2} {wrong 
2580: 23 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20  # of entries in 
2590: 69 6e 64 65 78 20 69 32 7d 7d 0a 20 20 20 20 64  index i2}}.    d
25a0: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 33 2e  o_test pragma-3.
25b0: 37 20 7b 0a 20 20 20 20 20 20 65 78 65 63 73 71  7 {.      execsq
25c0: 6c 20 7b 0a 20 20 20 20 20 20 20 20 50 52 41 47  l {.        PRAG
25d0: 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65  MA integrity_che
25e0: 63 6b 3d 30 0a 20 20 20 20 20 20 7d 0a 20 20 20  ck=0.      }.   
25f0: 20 7d 20 7b 7b 72 6f 77 20 31 20 6d 69 73 73 69   } {{row 1 missi
2600: 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32  ng from index i2
2610: 7d 20 7b 72 6f 77 20 32 20 6d 69 73 73 69 6e 67  } {row 2 missing
2620: 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20   from index i2} 
2630: 7b 77 72 6f 6e 67 20 23 20 6f 66 20 65 6e 74 72  {wrong # of entr
2640: 69 65 73 20 69 6e 20 69 6e 64 65 78 20 69 32 7d  ies in index i2}
2650: 20 7b 72 6f 77 20 31 20 6d 69 73 73 69 6e 67 20   {row 1 missing 
2660: 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b  from index i2} {
2670: 72 6f 77 20 32 20 6d 69 73 73 69 6e 67 20 66 72  row 2 missing fr
2680: 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b 77 72  om index i2} {wr
2690: 6f 6e 67 20 23 20 6f 66 20 65 6e 74 72 69 65 73  ong # of entries
26a0: 20 69 6e 20 69 6e 64 65 78 20 69 32 7d 7d 0a 20   in index i2}}. 
26b0: 20 0a 20 20 20 20 23 20 41 64 64 20 61 64 64 69   .    # Add addi
26c0: 74 69 6f 6e 61 6c 20 63 6f 72 72 75 70 74 69 6f  tional corruptio
26d0: 6e 20 62 79 20 61 70 70 65 6e 64 69 6e 67 20 75  n by appending u
26e0: 6e 75 73 65 64 20 70 61 67 65 73 20 74 6f 20 74  nused pages to t
26f0: 68 65 20 65 6e 64 20 6f 66 0a 20 20 20 20 23 20  he end of.    # 
2700: 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
2710: 65 20 74 65 73 74 65 72 72 2e 64 62 0a 20 20 20  e testerr.db.   
2720: 20 23 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 70   #.    do_test p
2730: 72 61 67 6d 61 2d 33 2e 38 20 7b 0a 20 20 20 20  ragma-3.8 {.    
2740: 20 20 65 78 65 63 73 71 6c 20 7b 44 45 54 41 43    execsql {DETAC
2750: 48 20 74 32 7d 0a 20 20 20 20 20 20 66 6f 72 63  H t2}.      forc
2760: 65 64 65 6c 65 74 65 20 74 65 73 74 65 72 72 2e  edelete testerr.
2770: 64 62 20 74 65 73 74 65 72 72 2e 64 62 2d 6a 6f  db testerr.db-jo
2780: 75 72 6e 61 6c 0a 20 20 20 20 20 20 73 65 74 20  urnal.      set 
2790: 6f 75 74 20 5b 6f 70 65 6e 20 74 65 73 74 65 72  out [open tester
27a0: 72 2e 64 62 20 77 5d 0a 20 20 20 20 20 20 66 63  r.db w].      fc
27b0: 6f 6e 66 69 67 75 72 65 20 24 6f 75 74 20 2d 74  onfigure $out -t
27c0: 72 61 6e 73 6c 61 74 69 6f 6e 20 62 69 6e 61 72  ranslation binar
27d0: 79 0a 20 20 20 20 20 20 73 65 74 20 69 6e 20 5b  y.      set in [
27e0: 6f 70 65 6e 20 74 65 73 74 2e 64 62 20 72 5d 0a  open test.db r].
27f0: 20 20 20 20 20 20 66 63 6f 6e 66 69 67 75 72 65        fconfigure
2800: 20 24 69 6e 20 2d 74 72 61 6e 73 6c 61 74 69 6f   $in -translatio
2810: 6e 20 62 69 6e 61 72 79 0a 20 20 20 20 20 20 70  n binary.      p
2820: 75 74 73 20 2d 6e 6f 6e 65 77 6c 69 6e 65 20 24  uts -nonewline $
2830: 6f 75 74 20 5b 72 65 61 64 20 24 69 6e 5d 0a 20  out [read $in]. 
2840: 20 20 20 20 20 73 65 65 6b 20 24 69 6e 20 30 0a       seek $in 0.
2850: 20 20 20 20 20 20 70 75 74 73 20 2d 6e 6f 6e 65        puts -none
2860: 77 6c 69 6e 65 20 24 6f 75 74 20 5b 72 65 61 64  wline $out [read
2870: 20 24 69 6e 5d 0a 20 20 20 20 20 20 63 6c 6f 73   $in].      clos
2880: 65 20 24 69 6e 0a 20 20 20 20 20 20 63 6c 6f 73  e $in.      clos
2890: 65 20 24 6f 75 74 0a 20 20 20 20 20 20 68 65 78  e $out.      hex
28a0: 69 6f 5f 77 72 69 74 65 20 74 65 73 74 65 72 72  io_write testerr
28b0: 2e 64 62 20 32 38 20 30 30 30 30 30 30 30 30 0a  .db 28 00000000.
28c0: 20 20 20 20 20 20 65 78 65 63 73 71 6c 20 7b 52        execsql {R
28d0: 45 49 4e 44 45 58 20 74 32 7d 0a 20 20 20 20 20  EINDEX t2}.     
28e0: 20 65 78 65 63 73 71 6c 20 7b 50 52 41 47 4d 41   execsql {PRAGMA
28f0: 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b   integrity_check
2900: 7d 0a 20 20 20 20 7d 20 7b 6f 6b 7d 0a 20 20 20  }.    } {ok}.   
2910: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
2920: 33 2e 38 2e 31 20 7b 0a 20 20 20 20 20 20 65 78  3.8.1 {.      ex
2930: 65 63 73 71 6c 20 7b 50 52 41 47 4d 41 20 71 75  ecsql {PRAGMA qu
2940: 69 63 6b 5f 63 68 65 63 6b 7d 0a 20 20 20 20 7d  ick_check}.    }
2950: 20 7b 6f 6b 7d 0a 20 20 20 20 64 6f 5f 74 65 73   {ok}.    do_tes
2960: 74 20 70 72 61 67 6d 61 2d 33 2e 38 2e 32 20 7b  t pragma-3.8.2 {
2970: 0a 20 20 20 20 20 20 65 78 65 63 73 71 6c 20 7b  .      execsql {
2980: 50 52 41 47 4d 41 20 51 55 49 43 4b 5f 43 48 45  PRAGMA QUICK_CHE
2990: 43 4b 7d 0a 20 20 20 20 7d 20 7b 6f 6b 7d 0a 20  CK}.    } {ok}. 
29a0: 20 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d     do_test pragm
29b0: 61 2d 33 2e 39 20 7b 0a 20 20 20 20 20 20 65 78  a-3.9 {.      ex
29c0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 20 20  ecsql {.        
29d0: 41 54 54 41 43 48 20 27 74 65 73 74 65 72 72 2e  ATTACH 'testerr.
29e0: 64 62 27 20 41 53 20 74 32 3b 0a 20 20 20 20 20  db' AS t2;.     
29f0: 20 20 20 50 52 41 47 4d 41 20 69 6e 74 65 67 72     PRAGMA integr
2a00: 69 74 79 5f 63 68 65 63 6b 0a 20 20 20 20 20 20  ity_check.      
2a10: 7d 0a 20 20 20 20 7d 20 7b 7b 2a 2a 2a 20 69 6e  }.    } {{*** in
2a20: 20 64 61 74 61 62 61 73 65 20 74 32 20 2a 2a 2a   database t2 ***
2a30: 0a 50 61 67 65 20 34 20 69 73 20 6e 65 76 65 72  .Page 4 is never
2a40: 20 75 73 65 64 0a 50 61 67 65 20 35 20 69 73 20   used.Page 5 is 
2a50: 6e 65 76 65 72 20 75 73 65 64 0a 50 61 67 65 20  never used.Page 
2a60: 36 20 69 73 20 6e 65 76 65 72 20 75 73 65 64 7d  6 is never used}
2a70: 20 7b 72 6f 77 20 31 20 6d 69 73 73 69 6e 67 20   {row 1 missing 
2a80: 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b  from index i2} {
2a90: 72 6f 77 20 32 20 6d 69 73 73 69 6e 67 20 66 72  row 2 missing fr
2aa0: 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b 77 72  om index i2} {wr
2ab0: 6f 6e 67 20 23 20 6f 66 20 65 6e 74 72 69 65 73  ong # of entries
2ac0: 20 69 6e 20 69 6e 64 65 78 20 69 32 7d 7d 0a 20   in index i2}}. 
2ad0: 20 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d     do_test pragm
2ae0: 61 2d 33 2e 31 30 20 7b 0a 20 20 20 20 20 20 65  a-3.10 {.      e
2af0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 20  xecsql {.       
2b00: 20 50 52 41 47 4d 41 20 69 6e 74 65 67 72 69 74   PRAGMA integrit
2b10: 79 5f 63 68 65 63 6b 3d 31 0a 20 20 20 20 20 20  y_check=1.      
2b20: 7d 0a 20 20 20 20 7d 20 7b 7b 2a 2a 2a 20 69 6e  }.    } {{*** in
2b30: 20 64 61 74 61 62 61 73 65 20 74 32 20 2a 2a 2a   database t2 ***
2b40: 0a 50 61 67 65 20 34 20 69 73 20 6e 65 76 65 72  .Page 4 is never
2b50: 20 75 73 65 64 7d 7d 0a 20 20 20 20 64 6f 5f 74   used}}.    do_t
2b60: 65 73 74 20 70 72 61 67 6d 61 2d 33 2e 31 31 20  est pragma-3.11 
2b70: 7b 0a 20 20 20 20 20 20 65 78 65 63 73 71 6c 20  {.      execsql 
2b80: 7b 0a 20 20 20 20 20 20 20 20 50 52 41 47 4d 41  {.        PRAGMA
2b90: 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b   integrity_check
2ba0: 3d 35 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  =5.      }.    }
2bb0: 20 7b 7b 2a 2a 2a 20 69 6e 20 64 61 74 61 62 61   {{*** in databa
2bc0: 73 65 20 74 32 20 2a 2a 2a 0a 50 61 67 65 20 34  se t2 ***.Page 4
2bd0: 20 69 73 20 6e 65 76 65 72 20 75 73 65 64 0a 50   is never used.P
2be0: 61 67 65 20 35 20 69 73 20 6e 65 76 65 72 20 75  age 5 is never u
2bf0: 73 65 64 0a 50 61 67 65 20 36 20 69 73 20 6e 65  sed.Page 6 is ne
2c00: 76 65 72 20 75 73 65 64 7d 20 7b 72 6f 77 20 31  ver used} {row 1
2c10: 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e   missing from in
2c20: 64 65 78 20 69 32 7d 20 7b 72 6f 77 20 32 20 6d  dex i2} {row 2 m
2c30: 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65  issing from inde
2c40: 78 20 69 32 7d 7d 0a 20 20 20 20 64 6f 5f 74 65  x i2}}.    do_te
2c50: 73 74 20 70 72 61 67 6d 61 2d 33 2e 31 32 20 7b  st pragma-3.12 {
2c60: 0a 20 20 20 20 20 20 65 78 65 63 73 71 6c 20 7b  .      execsql {
2c70: 0a 20 20 20 20 20 20 20 20 50 52 41 47 4d 41 20  .        PRAGMA 
2c80: 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 3d  integrity_check=
2c90: 34 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 20  4.      }.    } 
2ca0: 7b 7b 2a 2a 2a 20 69 6e 20 64 61 74 61 62 61 73  {{*** in databas
2cb0: 65 20 74 32 20 2a 2a 2a 0a 50 61 67 65 20 34 20  e t2 ***.Page 4 
2cc0: 69 73 20 6e 65 76 65 72 20 75 73 65 64 0a 50 61  is never used.Pa
2cd0: 67 65 20 35 20 69 73 20 6e 65 76 65 72 20 75 73  ge 5 is never us
2ce0: 65 64 0a 50 61 67 65 20 36 20 69 73 20 6e 65 76  ed.Page 6 is nev
2cf0: 65 72 20 75 73 65 64 7d 20 7b 72 6f 77 20 31 20  er used} {row 1 
2d00: 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64  missing from ind
2d10: 65 78 20 69 32 7d 7d 0a 20 20 20 20 64 6f 5f 74  ex i2}}.    do_t
2d20: 65 73 74 20 70 72 61 67 6d 61 2d 33 2e 31 33 20  est pragma-3.13 
2d30: 7b 0a 20 20 20 20 20 20 65 78 65 63 73 71 6c 20  {.      execsql 
2d40: 7b 0a 20 20 20 20 20 20 20 20 50 52 41 47 4d 41  {.        PRAGMA
2d50: 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b   integrity_check
2d60: 3d 33 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  =3.      }.    }
2d70: 20 7b 7b 2a 2a 2a 20 69 6e 20 64 61 74 61 62 61   {{*** in databa
2d80: 73 65 20 74 32 20 2a 2a 2a 0a 50 61 67 65 20 34  se t2 ***.Page 4
2d90: 20 69 73 20 6e 65 76 65 72 20 75 73 65 64 0a 50   is never used.P
2da0: 61 67 65 20 35 20 69 73 20 6e 65 76 65 72 20 75  age 5 is never u
2db0: 73 65 64 0a 50 61 67 65 20 36 20 69 73 20 6e 65  sed.Page 6 is ne
2dc0: 76 65 72 20 75 73 65 64 7d 7d 0a 20 20 20 20 64  ver used}}.    d
2dd0: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 33 2e  o_test pragma-3.
2de0: 31 34 20 7b 0a 20 20 20 20 20 20 65 78 65 63 73  14 {.      execs
2df0: 71 6c 20 7b 0a 20 20 20 20 20 20 20 20 50 52 41  ql {.        PRA
2e00: 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68  GMA integrity_ch
2e10: 65 63 6b 28 32 29 0a 20 20 20 20 20 20 7d 0a 20  eck(2).      }. 
2e20: 20 20 20 7d 20 7b 7b 2a 2a 2a 20 69 6e 20 64 61     } {{*** in da
2e30: 74 61 62 61 73 65 20 74 32 20 2a 2a 2a 0a 50 61  tabase t2 ***.Pa
2e40: 67 65 20 34 20 69 73 20 6e 65 76 65 72 20 75 73  ge 4 is never us
2e50: 65 64 0a 50 61 67 65 20 35 20 69 73 20 6e 65 76  ed.Page 5 is nev
2e60: 65 72 20 75 73 65 64 7d 7d 0a 20 20 20 20 64 6f  er used}}.    do
2e70: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 33 2e 31  _test pragma-3.1
2e80: 35 20 7b 0a 20 20 20 20 20 20 65 78 65 63 73 71  5 {.      execsq
2e90: 6c 20 7b 0a 20 20 20 20 20 20 20 20 41 54 54 41  l {.        ATTA
2ea0: 43 48 20 27 74 65 73 74 65 72 72 2e 64 62 27 20  CH 'testerr.db' 
2eb0: 41 53 20 74 33 3b 0a 20 20 20 20 20 20 20 20 50  AS t3;.        P
2ec0: 52 41 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f  RAGMA integrity_
2ed0: 63 68 65 63 6b 0a 20 20 20 20 20 20 7d 0a 20 20  check.      }.  
2ee0: 20 20 7d 20 7b 7b 2a 2a 2a 20 69 6e 20 64 61 74    } {{*** in dat
2ef0: 61 62 61 73 65 20 74 32 20 2a 2a 2a 0a 50 61 67  abase t2 ***.Pag
2f00: 65 20 34 20 69 73 20 6e 65 76 65 72 20 75 73 65  e 4 is never use
2f10: 64 0a 50 61 67 65 20 35 20 69 73 20 6e 65 76 65  d.Page 5 is neve
2f20: 72 20 75 73 65 64 0a 50 61 67 65 20 36 20 69 73  r used.Page 6 is
2f30: 20 6e 65 76 65 72 20 75 73 65 64 7d 20 7b 72 6f   never used} {ro
2f40: 77 20 31 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d  w 1 missing from
2f50: 20 69 6e 64 65 78 20 69 32 7d 20 7b 72 6f 77 20   index i2} {row 
2f60: 32 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69  2 missing from i
2f70: 6e 64 65 78 20 69 32 7d 20 7b 77 72 6f 6e 67 20  ndex i2} {wrong 
2f80: 23 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20  # of entries in 
2f90: 69 6e 64 65 78 20 69 32 7d 20 7b 2a 2a 2a 20 69  index i2} {*** i
2fa0: 6e 20 64 61 74 61 62 61 73 65 20 74 33 20 2a 2a  n database t3 **
2fb0: 2a 0a 50 61 67 65 20 34 20 69 73 20 6e 65 76 65  *.Page 4 is neve
2fc0: 72 20 75 73 65 64 0a 50 61 67 65 20 35 20 69 73  r used.Page 5 is
2fd0: 20 6e 65 76 65 72 20 75 73 65 64 0a 50 61 67 65   never used.Page
2fe0: 20 36 20 69 73 20 6e 65 76 65 72 20 75 73 65 64   6 is never used
2ff0: 7d 20 7b 72 6f 77 20 31 20 6d 69 73 73 69 6e 67  } {row 1 missing
3000: 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20   from index i2} 
3010: 7b 72 6f 77 20 32 20 6d 69 73 73 69 6e 67 20 66  {row 2 missing f
3020: 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b 77  rom index i2} {w
3030: 72 6f 6e 67 20 23 20 6f 66 20 65 6e 74 72 69 65  rong # of entrie
3040: 73 20 69 6e 20 69 6e 64 65 78 20 69 32 7d 7d 0a  s in index i2}}.
3050: 20 20 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67      do_test prag
3060: 6d 61 2d 33 2e 31 36 20 7b 0a 20 20 20 20 20 20  ma-3.16 {.      
3070: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
3080: 20 20 50 52 41 47 4d 41 20 69 6e 74 65 67 72 69    PRAGMA integri
3090: 74 79 5f 63 68 65 63 6b 28 31 30 29 0a 20 20 20  ty_check(10).   
30a0: 20 20 20 7d 0a 20 20 20 20 7d 20 7b 7b 2a 2a 2a     }.    } {{***
30b0: 20 69 6e 20 64 61 74 61 62 61 73 65 20 74 32 20   in database t2 
30c0: 2a 2a 2a 0a 50 61 67 65 20 34 20 69 73 20 6e 65  ***.Page 4 is ne
30d0: 76 65 72 20 75 73 65 64 0a 50 61 67 65 20 35 20  ver used.Page 5 
30e0: 69 73 20 6e 65 76 65 72 20 75 73 65 64 0a 50 61  is never used.Pa
30f0: 67 65 20 36 20 69 73 20 6e 65 76 65 72 20 75 73  ge 6 is never us
3100: 65 64 7d 20 7b 72 6f 77 20 31 20 6d 69 73 73 69  ed} {row 1 missi
3110: 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32  ng from index i2
3120: 7d 20 7b 72 6f 77 20 32 20 6d 69 73 73 69 6e 67  } {row 2 missing
3130: 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20   from index i2} 
3140: 7b 77 72 6f 6e 67 20 23 20 6f 66 20 65 6e 74 72  {wrong # of entr
3150: 69 65 73 20 69 6e 20 69 6e 64 65 78 20 69 32 7d  ies in index i2}
3160: 20 7b 2a 2a 2a 20 69 6e 20 64 61 74 61 62 61 73   {*** in databas
3170: 65 20 74 33 20 2a 2a 2a 0a 50 61 67 65 20 34 20  e t3 ***.Page 4 
3180: 69 73 20 6e 65 76 65 72 20 75 73 65 64 0a 50 61  is never used.Pa
3190: 67 65 20 35 20 69 73 20 6e 65 76 65 72 20 75 73  ge 5 is never us
31a0: 65 64 0a 50 61 67 65 20 36 20 69 73 20 6e 65 76  ed.Page 6 is nev
31b0: 65 72 20 75 73 65 64 7d 20 7b 72 6f 77 20 31 20  er used} {row 1 
31c0: 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64  missing from ind
31d0: 65 78 20 69 32 7d 7d 0a 20 20 20 20 64 6f 5f 74  ex i2}}.    do_t
31e0: 65 73 74 20 70 72 61 67 6d 61 2d 33 2e 31 37 20  est pragma-3.17 
31f0: 7b 0a 20 20 20 20 20 20 65 78 65 63 73 71 6c 20  {.      execsql 
3200: 7b 0a 20 20 20 20 20 20 20 20 50 52 41 47 4d 41  {.        PRAGMA
3210: 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b   integrity_check
3220: 3d 38 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  =8.      }.    }
3230: 20 7b 7b 2a 2a 2a 20 69 6e 20 64 61 74 61 62 61   {{*** in databa
3240: 73 65 20 74 32 20 2a 2a 2a 0a 50 61 67 65 20 34  se t2 ***.Page 4
3250: 20 69 73 20 6e 65 76 65 72 20 75 73 65 64 0a 50   is never used.P
3260: 61 67 65 20 35 20 69 73 20 6e 65 76 65 72 20 75  age 5 is never u
3270: 73 65 64 0a 50 61 67 65 20 36 20 69 73 20 6e 65  sed.Page 6 is ne
3280: 76 65 72 20 75 73 65 64 7d 20 7b 72 6f 77 20 31  ver used} {row 1
3290: 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e   missing from in
32a0: 64 65 78 20 69 32 7d 20 7b 72 6f 77 20 32 20 6d  dex i2} {row 2 m
32b0: 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65  issing from inde
32c0: 78 20 69 32 7d 20 7b 77 72 6f 6e 67 20 23 20 6f  x i2} {wrong # o
32d0: 66 20 65 6e 74 72 69 65 73 20 69 6e 20 69 6e 64  f entries in ind
32e0: 65 78 20 69 32 7d 20 7b 2a 2a 2a 20 69 6e 20 64  ex i2} {*** in d
32f0: 61 74 61 62 61 73 65 20 74 33 20 2a 2a 2a 0a 50  atabase t3 ***.P
3300: 61 67 65 20 34 20 69 73 20 6e 65 76 65 72 20 75  age 4 is never u
3310: 73 65 64 0a 50 61 67 65 20 35 20 69 73 20 6e 65  sed.Page 5 is ne
3320: 76 65 72 20 75 73 65 64 7d 7d 0a 20 20 20 20 64  ver used}}.    d
3330: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 33 2e  o_test pragma-3.
3340: 31 38 20 7b 0a 20 20 20 20 20 20 65 78 65 63 73  18 {.      execs
3350: 71 6c 20 7b 0a 20 20 20 20 20 20 20 20 50 52 41  ql {.        PRA
3360: 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68  GMA integrity_ch
3370: 65 63 6b 3d 34 0a 20 20 20 20 20 20 7d 0a 20 20  eck=4.      }.  
3380: 20 20 7d 20 7b 7b 2a 2a 2a 20 69 6e 20 64 61 74    } {{*** in dat
3390: 61 62 61 73 65 20 74 32 20 2a 2a 2a 0a 50 61 67  abase t2 ***.Pag
33a0: 65 20 34 20 69 73 20 6e 65 76 65 72 20 75 73 65  e 4 is never use
33b0: 64 0a 50 61 67 65 20 35 20 69 73 20 6e 65 76 65  d.Page 5 is neve
33c0: 72 20 75 73 65 64 0a 50 61 67 65 20 36 20 69 73  r used.Page 6 is
33d0: 20 6e 65 76 65 72 20 75 73 65 64 7d 20 7b 72 6f   never used} {ro
33e0: 77 20 31 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d  w 1 missing from
33f0: 20 69 6e 64 65 78 20 69 32 7d 7d 0a 20 20 7d 0a   index i2}}.  }.
3400: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
3410: 2d 33 2e 31 39 20 7b 0a 20 20 20 20 63 61 74 63  -3.19 {.    catc
3420: 68 20 7b 64 62 20 63 6c 6f 73 65 7d 0a 20 20 20  h {db close}.   
3430: 20 66 6f 72 63 65 64 65 6c 65 74 65 20 74 65 73   forcedelete tes
3440: 74 2e 64 62 20 74 65 73 74 2e 64 62 2d 6a 6f 75  t.db test.db-jou
3450: 72 6e 61 6c 0a 20 20 20 20 73 71 6c 69 74 65 33  rnal.    sqlite3
3460: 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20 20 20   db test.db.    
3470: 64 62 20 65 76 61 6c 20 7b 50 52 41 47 4d 41 20  db eval {PRAGMA 
3480: 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 7d  integrity_check}
3490: 0a 20 20 7d 20 7b 6f 6b 7d 0a 7d 0a 0a 23 20 56  .  } {ok}.}..# V
34a0: 65 72 69 66 79 20 74 68 61 74 20 50 52 41 47 4d  erify that PRAGM
34b0: 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63  A integrity_chec
34c0: 6b 20 63 61 74 63 68 65 73 20 55 4e 49 51 55 45  k catches UNIQUE
34d0: 20 61 6e 64 20 4e 4f 54 20 4e 55 4c 4c 0a 23 20   and NOT NULL.# 
34e0: 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
34f0: 74 69 6f 6e 73 2e 0a 23 0a 64 6f 5f 65 78 65 63  tions..#.do_exec
3500: 73 71 6c 5f 74 65 73 74 20 70 72 61 67 6d 61 2d  sql_test pragma-
3510: 33 2e 32 30 20 7b 0a 20 20 43 52 45 41 54 45 20  3.20 {.  CREATE 
3520: 54 41 42 4c 45 20 74 31 28 61 2c 62 29 3b 0a 20  TABLE t1(a,b);. 
3530: 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 74 31   CREATE INDEX t1
3540: 61 20 4f 4e 20 74 31 28 61 29 3b 0a 20 20 49 4e  a ON t1(a);.  IN
3550: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c  SERT INTO t1 VAL
3560: 55 45 53 28 31 2c 31 29 2c 28 32 2c 32 29 2c 28  UES(1,1),(2,2),(
3570: 33 2c 33 29 2c 28 32 2c 34 29 2c 28 4e 55 4c 4c  3,3),(2,4),(NULL
3580: 2c 35 29 2c 28 4e 55 4c 4c 2c 36 29 3b 0a 20 20  ,5),(NULL,6);.  
3590: 50 52 41 47 4d 41 20 77 72 69 74 61 62 6c 65 5f  PRAGMA writable_
35a0: 73 63 68 65 6d 61 3d 4f 4e 3b 0a 20 20 55 50 44  schema=ON;.  UPD
35b0: 41 54 45 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ATE sqlite_maste
35c0: 72 20 53 45 54 20 73 71 6c 3d 27 43 52 45 41 54  r SET sql='CREAT
35d0: 45 20 55 4e 49 51 55 45 20 49 4e 44 45 58 20 74  E UNIQUE INDEX t
35e0: 31 61 20 4f 4e 20 74 31 28 61 29 27 0a 20 20 20  1a ON t1(a)'.   
35f0: 57 48 45 52 45 20 6e 61 6d 65 3d 27 74 31 61 27  WHERE name='t1a'
3600: 3b 0a 20 20 55 50 44 41 54 45 20 73 71 6c 69 74  ;.  UPDATE sqlit
3610: 65 5f 6d 61 73 74 65 72 20 53 45 54 20 73 71 6c  e_master SET sql
3620: 3d 27 43 52 45 41 54 45 20 54 41 42 4c 45 20 74  ='CREATE TABLE t
3630: 31 28 61 20 4e 4f 54 20 4e 55 4c 4c 2c 62 29 27  1(a NOT NULL,b)'
3640: 0a 20 20 20 57 48 45 52 45 20 6e 61 6d 65 3d 27  .   WHERE name='
3650: 74 31 27 3b 0a 20 20 50 52 41 47 4d 41 20 77 72  t1';.  PRAGMA wr
3660: 69 74 61 62 6c 65 5f 73 63 68 65 6d 61 3d 4f 46  itable_schema=OF
3670: 46 3b 0a 20 20 41 4c 54 45 52 20 54 41 42 4c 45  F;.  ALTER TABLE
3680: 20 74 31 20 52 45 4e 41 4d 45 20 54 4f 20 74 31   t1 RENAME TO t1
3690: 78 3b 0a 20 20 50 52 41 47 4d 41 20 69 6e 74 65  x;.  PRAGMA inte
36a0: 67 72 69 74 79 5f 63 68 65 63 6b 3b 0a 7d 20 7b  grity_check;.} {
36b0: 7b 6e 6f 6e 2d 75 6e 69 71 75 65 20 65 6e 74 72  {non-unique entr
36c0: 79 20 69 6e 20 69 6e 64 65 78 20 74 31 61 7d 20  y in index t1a} 
36d0: 7b 4e 55 4c 4c 20 76 61 6c 75 65 20 69 6e 20 74  {NULL value in t
36e0: 31 78 2e 61 7d 20 7b 6e 6f 6e 2d 75 6e 69 71 75  1x.a} {non-uniqu
36f0: 65 20 65 6e 74 72 79 20 69 6e 20 69 6e 64 65 78  e entry in index
3700: 20 74 31 61 7d 20 7b 4e 55 4c 4c 20 76 61 6c 75   t1a} {NULL valu
3710: 65 20 69 6e 20 74 31 78 2e 61 7d 7d 0a 64 6f 5f  e in t1x.a}}.do_
3720: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 70 72 61  execsql_test pra
3730: 67 6d 61 2d 33 2e 32 31 20 7b 0a 20 20 50 52 41  gma-3.21 {.  PRA
3740: 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68  GMA integrity_ch
3750: 65 63 6b 28 33 29 3b 0a 7d 20 7b 7b 6e 6f 6e 2d  eck(3);.} {{non-
3760: 75 6e 69 71 75 65 20 65 6e 74 72 79 20 69 6e 20  unique entry in 
3770: 69 6e 64 65 78 20 74 31 61 7d 20 7b 4e 55 4c 4c  index t1a} {NULL
3780: 20 76 61 6c 75 65 20 69 6e 20 74 31 78 2e 61 7d   value in t1x.a}
3790: 20 7b 6e 6f 6e 2d 75 6e 69 71 75 65 20 65 6e 74   {non-unique ent
37a0: 72 79 20 69 6e 20 69 6e 64 65 78 20 74 31 61 7d  ry in index t1a}
37b0: 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  }.do_execsql_tes
37c0: 74 20 70 72 61 67 6d 61 2d 33 2e 32 32 20 7b 0a  t pragma-3.22 {.
37d0: 20 20 50 52 41 47 4d 41 20 69 6e 74 65 67 72 69    PRAGMA integri
37e0: 74 79 5f 63 68 65 63 6b 28 32 29 3b 0a 7d 20 7b  ty_check(2);.} {
37f0: 7b 6e 6f 6e 2d 75 6e 69 71 75 65 20 65 6e 74 72  {non-unique entr
3800: 79 20 69 6e 20 69 6e 64 65 78 20 74 31 61 7d 20  y in index t1a} 
3810: 7b 4e 55 4c 4c 20 76 61 6c 75 65 20 69 6e 20 74  {NULL value in t
3820: 31 78 2e 61 7d 7d 0a 64 6f 5f 65 78 65 63 73 71  1x.a}}.do_execsq
3830: 6c 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 33 2e  l_test pragma-3.
3840: 32 33 20 7b 0a 20 20 50 52 41 47 4d 41 20 69 6e  23 {.  PRAGMA in
3850: 74 65 67 72 69 74 79 5f 63 68 65 63 6b 28 31 29  tegrity_check(1)
3860: 3b 0a 7d 20 7b 7b 6e 6f 6e 2d 75 6e 69 71 75 65  ;.} {{non-unique
3870: 20 65 6e 74 72 79 20 69 6e 20 69 6e 64 65 78 20   entry in index 
3880: 74 31 61 7d 7d 0a 0a 23 20 50 52 41 47 4d 41 20  t1a}}..# PRAGMA 
3890: 69 6e 74 65 67 72 69 74 79 20 63 68 65 63 6b 20  integrity check 
38a0: 28 6f 72 20 6d 6f 72 65 20 73 70 65 63 69 66 69  (or more specifi
38b0: 63 61 6c 6c 79 20 74 68 65 20 73 71 6c 69 74 65  cally the sqlite
38c0: 33 42 74 72 65 65 43 6f 75 6e 74 28 29 0a 23 20  3BtreeCount().# 
38d0: 69 6e 74 65 72 66 61 63 65 29 20 75 73 65 64 20  interface) used 
38e0: 74 6f 20 6c 65 61 76 65 20 69 6e 64 65 78 20 63  to leave index c
38f0: 75 72 73 6f 72 73 20 69 6e 20 61 6e 20 69 6e 63  ursors in an inc
3900: 6f 6e 73 69 73 74 65 6e 74 20 73 74 61 74 65 0a  onsistent state.
3910: 23 20 77 68 69 63 68 20 63 6f 75 6c 64 20 72 65  # which could re
3920: 73 75 6c 74 20 69 6e 20 61 6e 20 61 73 73 65 72  sult in an asser
3930: 74 69 6f 6e 20 66 61 75 6c 74 20 69 6e 20 73 71  tion fault in sq
3940: 6c 69 74 65 33 42 74 72 65 65 4b 65 79 28 29 0a  lite3BtreeKey().
3950: 23 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20 73 61  # called from sa
3960: 76 65 43 75 72 73 6f 72 50 6f 73 69 74 69 6f 6e  veCursorPosition
3970: 28 29 20 69 66 20 63 6f 6e 74 65 6e 74 20 69 73  () if content is
3980: 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d 20 74 68   removed from th
3990: 65 0a 23 20 69 6e 64 65 78 20 77 68 69 6c 65 20  e.# index while 
39a0: 74 68 65 20 69 6e 74 65 67 72 69 74 79 5f 63 68  the integrity_ch
39b0: 65 63 6b 20 69 73 20 73 74 69 6c 6c 20 72 75 6e  eck is still run
39c0: 6e 69 6e 67 2e 20 20 54 68 69 73 20 74 65 73 74  ning.  This test
39d0: 20 76 65 72 69 66 69 65 73 0a 23 20 74 68 61 74   verifies.# that
39e0: 20 70 72 6f 62 6c 65 6d 20 68 61 73 20 62 65 65   problem has bee
39f0: 6e 20 66 69 78 65 64 2e 0a 23 0a 64 6f 5f 74 65  n fixed..#.do_te
3a00: 73 74 20 70 72 61 67 6d 61 2d 33 2e 33 30 20 7b  st pragma-3.30 {
3a10: 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 64 65  .  db close.  de
3a20: 6c 65 74 65 5f 66 69 6c 65 20 74 65 73 74 2e 64  lete_file test.d
3a30: 62 0a 20 20 73 71 6c 69 74 65 33 20 64 62 20 74  b.  sqlite3 db t
3a40: 65 73 74 2e 64 62 0a 20 20 64 62 20 65 76 61 6c  est.db.  db eval
3a50: 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41   {.    CREATE TA
3a60: 42 4c 45 20 74 31 28 61 2c 62 2c 63 29 3b 0a 20  BLE t1(a,b,c);. 
3a70: 20 20 20 57 49 54 48 20 52 45 43 55 52 53 49 56     WITH RECURSIV
3a80: 45 0a 20 20 20 20 20 20 63 28 69 29 20 41 53 20  E.      c(i) AS 
3a90: 28 56 41 4c 55 45 53 28 31 29 20 55 4e 49 4f 4e  (VALUES(1) UNION
3aa0: 20 41 4c 4c 20 53 45 4c 45 43 54 20 69 2b 31 20   ALL SELECT i+1 
3ab0: 46 52 4f 4d 20 63 20 57 48 45 52 45 20 69 3c 31  FROM c WHERE i<1
3ac0: 30 30 29 0a 20 20 20 20 49 4e 53 45 52 54 20 49  00).    INSERT I
3ad0: 4e 54 4f 20 74 31 28 61 2c 62 2c 63 29 20 53 45  NTO t1(a,b,c) SE
3ae0: 4c 45 43 54 20 69 2c 20 70 72 69 6e 74 66 28 27  LECT i, printf('
3af0: 78 79 7a 25 30 38 78 27 2c 69 29 2c 20 32 30 30  xyz%08x',i), 200
3b00: 30 2d 69 20 46 52 4f 4d 20 63 3b 0a 20 20 20 20  0-i FROM c;.    
3b10: 43 52 45 41 54 45 20 49 4e 44 45 58 20 74 31 61  CREATE INDEX t1a
3b20: 20 4f 4e 20 74 31 28 61 29 3b 0a 20 20 20 20 43   ON t1(a);.    C
3b30: 52 45 41 54 45 20 49 4e 44 45 58 20 74 31 62 63  REATE INDEX t1bc
3b40: 20 4f 4e 20 74 31 28 62 2c 63 29 3b 0a 20 20 7d   ON t1(b,c);.  }
3b50: 0a 20 20 64 62 20 65 76 61 6c 20 7b 50 52 41 47  .  db eval {PRAG
3b60: 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65  MA integrity_che
3b70: 63 6b 7d 20 7b 0a 20 20 20 20 20 64 62 20 65 76  ck} {.     db ev
3b80: 61 6c 20 7b 44 45 4c 45 54 45 20 46 52 4f 4d 20  al {DELETE FROM 
3b90: 74 31 7d 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a 23 20  t1}.  }.} {}..# 
3ba0: 54 65 73 74 20 6d 6f 64 69 66 79 69 6e 67 20 74  Test modifying t
3bb0: 68 65 20 63 61 63 68 65 5f 73 69 7a 65 20 6f 66  he cache_size of
3bc0: 20 61 6e 20 61 74 74 61 63 68 65 64 20 64 61 74   an attached dat
3bd0: 61 62 61 73 65 2e 0a 69 66 63 61 70 61 62 6c 65  abase..ifcapable
3be0: 20 70 61 67 65 72 5f 70 72 61 67 6d 61 73 26 26   pager_pragmas&&
3bf0: 61 74 74 61 63 68 20 7b 0a 64 6f 5f 74 65 73 74  attach {.do_test
3c00: 20 70 72 61 67 6d 61 2d 34 2e 31 20 7b 0a 20 20   pragma-4.1 {.  
3c10: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 41 54  execsql {.    AT
3c20: 54 41 43 48 20 27 74 65 73 74 32 2e 64 62 27 20  TACH 'test2.db' 
3c30: 41 53 20 61 75 78 3b 0a 20 20 20 20 70 72 61 67  AS aux;.    prag
3c40: 6d 61 20 61 75 78 2e 63 61 63 68 65 5f 73 69 7a  ma aux.cache_siz
3c50: 65 3b 0a 20 20 20 20 70 72 61 67 6d 61 20 61 75  e;.    pragma au
3c60: 78 2e 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f  x.default_cache_
3c70: 73 69 7a 65 3b 0a 20 20 7d 20 0a 7d 20 5b 6c 69  size;.  } .} [li
3c80: 73 74 20 24 44 46 4c 54 5f 43 41 43 48 45 5f 53  st $DFLT_CACHE_S
3c90: 5a 20 24 44 46 4c 54 5f 43 41 43 48 45 5f 53 5a  Z $DFLT_CACHE_SZ
3ca0: 5d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  ].do_test pragma
3cb0: 2d 34 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c  -4.2 {.  execsql
3cc0: 20 7b 0a 20 20 20 20 70 72 61 67 6d 61 20 61 75   {.    pragma au
3cd0: 78 2e 63 61 63 68 65 5f 73 69 7a 65 20 3d 20 35  x.cache_size = 5
3ce0: 30 3b 0a 20 20 20 20 70 72 61 67 6d 61 20 61 75  0;.    pragma au
3cf0: 78 2e 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20  x.cache_size;.  
3d00: 20 20 70 72 61 67 6d 61 20 61 75 78 2e 64 65 66    pragma aux.def
3d10: 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65 3b  ault_cache_size;
3d20: 0a 20 20 7d 20 0a 7d 20 5b 6c 69 73 74 20 35 30  .  } .} [list 50
3d30: 20 24 44 46 4c 54 5f 43 41 43 48 45 5f 53 5a 5d   $DFLT_CACHE_SZ]
3d40: 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d  .do_test pragma-
3d50: 34 2e 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  4.3 {.  execsql 
3d60: 7b 0a 20 20 20 20 70 72 61 67 6d 61 20 61 75 78  {.    pragma aux
3d70: 2e 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73  .default_cache_s
3d80: 69 7a 65 20 3d 20 34 35 36 3b 0a 20 20 20 20 70  ize = 456;.    p
3d90: 72 61 67 6d 61 20 61 75 78 2e 63 61 63 68 65 5f  ragma aux.cache_
3da0: 73 69 7a 65 3b 0a 20 20 20 20 70 72 61 67 6d 61  size;.    pragma
3db0: 20 61 75 78 2e 64 65 66 61 75 6c 74 5f 63 61 63   aux.default_cac
3dc0: 68 65 5f 73 69 7a 65 3b 0a 20 20 7d 20 0a 7d 20  he_size;.  } .} 
3dd0: 7b 34 35 36 20 34 35 36 7d 0a 64 6f 5f 74 65 73  {456 456}.do_tes
3de0: 74 20 70 72 61 67 6d 61 2d 34 2e 34 20 7b 0a 20  t pragma-4.4 {. 
3df0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 70   execsql {.    p
3e00: 72 61 67 6d 61 20 63 61 63 68 65 5f 73 69 7a 65  ragma cache_size
3e10: 3b 0a 20 20 20 20 70 72 61 67 6d 61 20 64 65 66  ;.    pragma def
3e20: 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65 3b  ault_cache_size;
3e30: 0a 20 20 7d 20 0a 7d 20 5b 6c 69 73 74 20 24 44  .  } .} [list $D
3e40: 46 4c 54 5f 43 41 43 48 45 5f 53 5a 20 24 44 46  FLT_CACHE_SZ $DF
3e50: 4c 54 5f 43 41 43 48 45 5f 53 5a 5d 0a 64 6f 5f  LT_CACHE_SZ].do_
3e60: 74 65 73 74 20 70 72 61 67 6d 61 2d 34 2e 35 20  test pragma-4.5 
3e70: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
3e80: 20 20 44 45 54 41 43 48 20 61 75 78 3b 0a 20 20    DETACH aux;.  
3e90: 20 20 41 54 54 41 43 48 20 27 74 65 73 74 33 2e    ATTACH 'test3.
3ea0: 64 62 27 20 41 53 20 61 75 78 3b 0a 20 20 20 20  db' AS aux;.    
3eb0: 70 72 61 67 6d 61 20 61 75 78 2e 63 61 63 68 65  pragma aux.cache
3ec0: 5f 73 69 7a 65 3b 0a 20 20 20 20 70 72 61 67 6d  _size;.    pragm
3ed0: 61 20 61 75 78 2e 64 65 66 61 75 6c 74 5f 63 61  a aux.default_ca
3ee0: 63 68 65 5f 73 69 7a 65 3b 0a 20 20 7d 20 0a 7d  che_size;.  } .}
3ef0: 20 5b 6c 69 73 74 20 24 44 46 4c 54 5f 43 41 43   [list $DFLT_CAC
3f00: 48 45 5f 53 5a 20 24 44 46 4c 54 5f 43 41 43 48  HE_SZ $DFLT_CACH
3f10: 45 5f 53 5a 5d 0a 64 6f 5f 74 65 73 74 20 70 72  E_SZ].do_test pr
3f20: 61 67 6d 61 2d 34 2e 36 20 7b 0a 20 20 65 78 65  agma-4.6 {.  exe
3f30: 63 73 71 6c 20 7b 0a 20 20 20 20 44 45 54 41 43  csql {.    DETAC
3f40: 48 20 61 75 78 3b 0a 20 20 20 20 41 54 54 41 43  H aux;.    ATTAC
3f50: 48 20 27 74 65 73 74 32 2e 64 62 27 20 41 53 20  H 'test2.db' AS 
3f60: 61 75 78 3b 0a 20 20 20 20 70 72 61 67 6d 61 20  aux;.    pragma 
3f70: 61 75 78 2e 63 61 63 68 65 5f 73 69 7a 65 3b 0a  aux.cache_size;.
3f80: 20 20 20 20 70 72 61 67 6d 61 20 61 75 78 2e 64      pragma aux.d
3f90: 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a  efault_cache_siz
3fa0: 65 3b 0a 20 20 7d 20 0a 7d 20 7b 34 35 36 20 34  e;.  } .} {456 4
3fb0: 35 36 7d 0a 7d 20 3b 23 20 69 66 63 61 70 61 62  56}.} ;# ifcapab
3fc0: 6c 65 20 70 61 67 65 72 5f 70 72 61 67 6d 61 73  le pager_pragmas
3fd0: 0a 0a 23 20 54 65 73 74 20 74 68 61 74 20 6d 6f  ..# Test that mo
3fe0: 64 69 66 79 69 6e 67 20 74 68 65 20 73 79 6e 63  difying the sync
3ff0: 2d 6c 65 76 65 6c 20 69 6e 20 74 68 65 20 6d 69  -level in the mi
4000: 64 64 6c 65 20 6f 66 20 61 20 74 72 61 6e 73 61  ddle of a transa
4010: 63 74 69 6f 6e 20 69 73 0a 23 20 64 69 73 61 6c  ction is.# disal
4020: 6c 6f 77 65 64 2e 0a 69 66 63 61 70 61 62 6c 65  lowed..ifcapable
4030: 20 70 61 67 65 72 5f 70 72 61 67 6d 61 73 20 7b   pager_pragmas {
4040: 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d  .do_test pragma-
4050: 35 2e 30 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  5.0 {.  execsql 
4060: 7b 0a 20 20 20 20 70 72 61 67 6d 61 20 73 79 6e  {.    pragma syn
4070: 63 68 72 6f 6e 6f 75 73 3b 0a 20 20 7d 20 0a 7d  chronous;.  } .}
4080: 20 7b 32 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61   {2}.do_test pra
4090: 67 6d 61 2d 35 2e 31 20 7b 0a 20 20 63 61 74 63  gma-5.1 {.  catc
40a0: 68 73 71 6c 20 7b 0a 20 20 20 20 42 45 47 49 4e  hsql {.    BEGIN
40b0: 3b 0a 20 20 20 20 70 72 61 67 6d 61 20 73 79 6e  ;.    pragma syn
40c0: 63 68 72 6f 6e 6f 75 73 20 3d 20 4f 46 46 3b 0a  chronous = OFF;.
40d0: 20 20 7d 20 0a 7d 20 7b 31 20 7b 53 61 66 65 74    } .} {1 {Safet
40e0: 79 20 6c 65 76 65 6c 20 6d 61 79 20 6e 6f 74 20  y level may not 
40f0: 62 65 20 63 68 61 6e 67 65 64 20 69 6e 73 69 64  be changed insid
4100: 65 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 7d  e a transaction}
4110: 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  }.do_test pragma
4120: 2d 35 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c  -5.2 {.  execsql
4130: 20 7b 0a 20 20 20 20 70 72 61 67 6d 61 20 73 79   {.    pragma sy
4140: 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20 20 7d 20 0a  nchronous;.  } .
4150: 7d 20 7b 32 7d 0a 63 61 74 63 68 73 71 6c 20 7b  } {2}.catchsql {
4160: 43 4f 4d 4d 49 54 3b 7d 0a 7d 20 3b 23 20 69 66  COMMIT;}.} ;# if
4170: 63 61 70 61 62 6c 65 20 70 61 67 65 72 5f 70 72  capable pager_pr
4180: 61 67 6d 61 73 0a 0a 23 20 54 65 73 74 20 73 63  agmas..# Test sc
4190: 68 65 6d 61 2d 71 75 65 72 79 20 70 72 61 67 6d  hema-query pragm
41a0: 61 73 0a 23 0a 69 66 63 61 70 61 62 6c 65 20 73  as.#.ifcapable s
41b0: 63 68 65 6d 61 5f 70 72 61 67 6d 61 73 20 7b 0a  chema_pragmas {.
41c0: 69 66 63 61 70 61 62 6c 65 20 74 65 6d 70 64 62  ifcapable tempdb
41d0: 26 26 61 74 74 61 63 68 20 7b 0a 20 20 64 6f 5f  &&attach {.  do_
41e0: 74 65 73 74 20 70 72 61 67 6d 61 2d 36 2e 31 20  test pragma-6.1 
41f0: 7b 0a 20 20 20 20 73 65 74 20 72 65 73 20 7b 7d  {.    set res {}
4200: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 53 45  .    execsql {SE
4210: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 73 71 6c 69  LECT * FROM sqli
4220: 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 7d 0a  te_temp_master}.
4230: 20 20 20 20 66 6f 72 65 61 63 68 20 7b 69 64 78      foreach {idx
4240: 20 6e 61 6d 65 20 66 69 6c 65 7d 20 5b 65 78 65   name file} [exe
4250: 63 73 71 6c 20 7b 70 72 61 67 6d 61 20 64 61 74  csql {pragma dat
4260: 61 62 61 73 65 5f 6c 69 73 74 7d 5d 20 7b 0a 20  abase_list}] {. 
4270: 20 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73       lappend res
4280: 20 24 69 64 78 20 24 6e 61 6d 65 0a 20 20 20 20   $idx $name.    
4290: 7d 0a 20 20 20 20 73 65 74 20 72 65 73 0a 20 20  }.    set res.  
42a0: 7d 20 7b 30 20 6d 61 69 6e 20 31 20 74 65 6d 70  } {0 main 1 temp
42b0: 20 32 20 61 75 78 7d 0a 7d 0a 64 6f 5f 74 65 73   2 aux}.}.do_tes
42c0: 74 20 70 72 61 67 6d 61 2d 36 2e 32 20 7b 0a 20  t pragma-6.2 {. 
42d0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43   execsql {.    C
42e0: 52 45 41 54 45 20 54 41 42 4c 45 20 74 32 28 61  REATE TABLE t2(a
42f0: 2c 62 2c 63 29 3b 0a 20 20 20 20 70 72 61 67 6d  ,b,c);.    pragm
4300: 61 20 74 61 62 6c 65 5f 69 6e 66 6f 28 74 32 29  a table_info(t2)
4310: 0a 20 20 7d 0a 7d 20 7b 30 20 61 20 7b 7d 20 30  .  }.} {0 a {} 0
4320: 20 7b 7d 20 30 20 31 20 62 20 7b 7d 20 30 20 7b   {} 0 1 b {} 0 {
4330: 7d 20 30 20 32 20 63 20 7b 7d 20 30 20 7b 7d 20  } 0 2 c {} 0 {} 
4340: 30 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  0}.do_test pragm
4350: 61 2d 36 2e 32 2e 31 20 7b 0a 20 20 65 78 65 63  a-6.2.1 {.  exec
4360: 73 71 6c 20 7b 0a 20 20 20 20 70 72 61 67 6d 61  sql {.    pragma
4370: 20 74 61 62 6c 65 5f 69 6e 66 6f 3b 0a 20 20 7d   table_info;.  }
4380: 0a 7d 20 7b 7d 0a 64 62 20 6e 75 6c 6c 76 61 6c  .} {}.db nullval
4390: 75 65 20 3c 3c 4e 55 4c 4c 3e 3e 0a 64 6f 5f 74  ue <<NULL>>.do_t
43a0: 65 73 74 20 70 72 61 67 6d 61 2d 36 2e 32 2e 32  est pragma-6.2.2
43b0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
43c0: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
43d0: 74 35 28 0a 20 20 20 20 20 20 61 20 54 45 58 54  t5(.      a TEXT
43e0: 20 44 45 46 41 55 4c 54 20 43 55 52 52 45 4e 54   DEFAULT CURRENT
43f0: 5f 54 49 4d 45 53 54 41 4d 50 2c 20 0a 20 20 20  _TIMESTAMP, .   
4400: 20 20 20 62 20 44 45 46 41 55 4c 54 20 28 35 2b     b DEFAULT (5+
4410: 33 29 2c 0a 20 20 20 20 20 20 63 20 54 45 58 54  3),.      c TEXT
4420: 2c 0a 20 20 20 20 20 20 64 20 49 4e 54 45 47 45  ,.      d INTEGE
4430: 52 20 44 45 46 41 55 4c 54 20 4e 55 4c 4c 2c 0a  R DEFAULT NULL,.
4440: 20 20 20 20 20 20 65 20 54 45 58 54 20 44 45 46        e TEXT DEF
4450: 41 55 4c 54 20 27 27 2c 0a 20 20 20 20 20 20 55  AULT '',.      U
4460: 4e 49 51 55 45 28 62 2c 63 2c 64 29 2c 0a 20 20  NIQUE(b,c,d),.  
4470: 20 20 20 20 50 52 49 4d 41 52 59 20 4b 45 59 28      PRIMARY KEY(
4480: 65 2c 62 2c 63 29 0a 20 20 20 20 29 3b 0a 20 20  e,b,c).    );.  
4490: 20 20 50 52 41 47 4d 41 20 74 61 62 6c 65 5f 69    PRAGMA table_i
44a0: 6e 66 6f 28 74 35 29 3b 0a 20 20 7d 0a 7d 20 7b  nfo(t5);.  }.} {
44b0: 30 20 61 20 54 45 58 54 20 30 20 43 55 52 52 45  0 a TEXT 0 CURRE
44c0: 4e 54 5f 54 49 4d 45 53 54 41 4d 50 20 30 20 31  NT_TIMESTAMP 0 1
44d0: 20 62 20 7b 7d 20 30 20 35 2b 33 20 32 20 32 20   b {} 0 5+3 2 2 
44e0: 63 20 54 45 58 54 20 30 20 3c 3c 4e 55 4c 4c 3e  c TEXT 0 <<NULL>
44f0: 3e 20 33 20 33 20 64 20 49 4e 54 45 47 45 52 20  > 3 3 d INTEGER 
4500: 30 20 4e 55 4c 4c 20 30 20 34 20 65 20 54 45 58  0 NULL 0 4 e TEX
4510: 54 20 30 20 27 27 20 31 7d 0a 64 62 20 6e 75 6c  T 0 '' 1}.db nul
4520: 6c 76 61 6c 75 65 20 7b 7d 0a 64 6f 5f 74 65 73  lvalue {}.do_tes
4530: 74 20 70 72 61 67 6d 61 2d 36 2e 32 2e 33 20 7b  t pragma-6.2.3 {
4540: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
4550: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 32   CREATE TABLE t2
4560: 5f 33 28 61 2c 62 20 49 4e 54 45 47 45 52 20 50  _3(a,b INTEGER P
4570: 52 49 4d 41 52 59 20 4b 45 59 2c 63 29 3b 0a 20  RIMARY KEY,c);. 
4580: 20 20 20 70 72 61 67 6d 61 20 74 61 62 6c 65 5f     pragma table_
4590: 69 6e 66 6f 28 74 32 5f 33 29 0a 20 20 7d 0a 7d  info(t2_3).  }.}
45a0: 20 7b 30 20 61 20 7b 7d 20 30 20 7b 7d 20 30 20   {0 a {} 0 {} 0 
45b0: 31 20 62 20 49 4e 54 45 47 45 52 20 30 20 7b 7d  1 b INTEGER 0 {}
45c0: 20 31 20 32 20 63 20 7b 7d 20 30 20 7b 7d 20 30   1 2 c {} 0 {} 0
45d0: 7d 0a 69 66 63 61 70 61 62 6c 65 20 7b 66 6f 72  }.ifcapable {for
45e0: 65 69 67 6e 6b 65 79 7d 20 7b 0a 20 20 64 6f 5f  eignkey} {.  do_
45f0: 74 65 73 74 20 70 72 61 67 6d 61 2d 36 2e 33 2e  test pragma-6.3.
4600: 31 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  1 {.    execsql 
4610: 7b 0a 20 20 20 20 20 20 43 52 45 41 54 45 20 54  {.      CREATE T
4620: 41 42 4c 45 20 74 33 28 61 20 69 6e 74 20 72 65  ABLE t3(a int re
4630: 66 65 72 65 6e 63 65 73 20 74 32 28 62 29 2c 20  ferences t2(b), 
4640: 62 20 55 4e 49 51 55 45 29 3b 0a 20 20 20 20 20  b UNIQUE);.     
4650: 20 70 72 61 67 6d 61 20 66 6f 72 65 69 67 6e 5f   pragma foreign_
4660: 6b 65 79 5f 6c 69 73 74 28 74 33 29 3b 0a 20 20  key_list(t3);.  
4670: 20 20 7d 0a 20 20 7d 20 7b 30 20 30 20 74 32 20    }.  } {0 0 t2 
4680: 61 20 62 20 7b 4e 4f 20 41 43 54 49 4f 4e 7d 20  a b {NO ACTION} 
4690: 7b 4e 4f 20 41 43 54 49 4f 4e 7d 20 4e 4f 4e 45  {NO ACTION} NONE
46a0: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67  }.  do_test prag
46b0: 6d 61 2d 36 2e 33 2e 32 20 7b 0a 20 20 20 20 65  ma-6.3.2 {.    e
46c0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 70  xecsql {.      p
46d0: 72 61 67 6d 61 20 66 6f 72 65 69 67 6e 5f 6b 65  ragma foreign_ke
46e0: 79 5f 6c 69 73 74 3b 0a 20 20 20 20 7d 0a 20 20  y_list;.    }.  
46f0: 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70  } {}.  do_test p
4700: 72 61 67 6d 61 2d 36 2e 33 2e 33 20 7b 0a 20 20  ragma-6.3.3 {.  
4710: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
4720: 20 20 70 72 61 67 6d 61 20 66 6f 72 65 69 67 6e    pragma foreign
4730: 5f 6b 65 79 5f 6c 69 73 74 28 74 33 5f 62 6f 67  _key_list(t3_bog
4740: 75 73 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b  us);.    }.  } {
4750: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67  }.  do_test prag
4760: 6d 61 2d 36 2e 33 2e 34 20 7b 0a 20 20 20 20 65  ma-6.3.4 {.    e
4770: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 70  xecsql {.      p
4780: 72 61 67 6d 61 20 66 6f 72 65 69 67 6e 5f 6b 65  ragma foreign_ke
4790: 79 5f 6c 69 73 74 28 74 35 29 3b 0a 20 20 20 20  y_list(t5);.    
47a0: 7d 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65  }.  } {}.  do_te
47b0: 73 74 20 70 72 61 67 6d 61 2d 36 2e 34 20 7b 0a  st pragma-6.4 {.
47c0: 20 20 20 20 63 61 70 74 75 72 65 5f 70 72 61 67      capture_prag
47d0: 6d 61 20 64 62 20 6f 75 74 20 7b 0a 20 20 20 20  ma db out {.    
47e0: 20 20 70 72 61 67 6d 61 20 69 6e 64 65 78 5f 6c    pragma index_l
47f0: 69 73 74 28 74 33 29 3b 0a 20 20 20 20 7d 0a 20  ist(t3);.    }. 
4800: 20 20 20 64 62 20 65 76 61 6c 20 7b 53 45 4c 45     db eval {SELE
4810: 43 54 20 73 65 71 2c 20 22 6e 61 6d 65 22 2c 20  CT seq, "name", 
4820: 22 75 6e 69 71 75 65 22 20 46 52 4f 4d 20 6f 75  "unique" FROM ou
4830: 74 20 4f 52 44 45 52 20 42 59 20 73 65 71 7d 0a  t ORDER BY seq}.
4840: 20 20 7d 20 7b 30 20 73 71 6c 69 74 65 5f 61 75    } {0 sqlite_au
4850: 74 6f 69 6e 64 65 78 5f 74 33 5f 31 20 31 7d 0a  toindex_t3_1 1}.
4860: 7d 0a 69 66 63 61 70 61 62 6c 65 20 7b 21 66 6f  }.ifcapable {!fo
4870: 72 65 69 67 6e 6b 65 79 7d 20 7b 0a 20 20 65 78  reignkey} {.  ex
4880: 65 63 73 71 6c 20 7b 43 52 45 41 54 45 20 54 41  ecsql {CREATE TA
4890: 42 4c 45 20 74 33 28 61 2c 62 20 55 4e 49 51 55  BLE t3(a,b UNIQU
48a0: 45 29 7d 0a 7d 0a 64 6f 5f 74 65 73 74 20 70 72  E)}.}.do_test pr
48b0: 61 67 6d 61 2d 36 2e 35 2e 31 20 7b 0a 20 20 65  agma-6.5.1 {.  e
48c0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45  xecsql {.    CRE
48d0: 41 54 45 20 49 4e 44 45 58 20 74 33 69 31 20 4f  ATE INDEX t3i1 O
48e0: 4e 20 74 33 28 61 2c 62 29 3b 0a 20 20 7d 0a 20  N t3(a,b);.  }. 
48f0: 20 63 61 70 74 75 72 65 5f 70 72 61 67 6d 61 20   capture_pragma 
4900: 64 62 20 6f 75 74 20 7b 0a 20 20 20 20 70 72 61  db out {.    pra
4910: 67 6d 61 20 69 6e 64 65 78 5f 69 6e 66 6f 28 74  gma index_info(t
4920: 33 69 31 29 3b 0a 20 20 7d 0a 20 20 64 62 20 65  3i1);.  }.  db e
4930: 76 61 6c 20 7b 53 45 4c 45 43 54 20 73 65 71 6e  val {SELECT seqn
4940: 6f 2c 20 63 69 64 2c 20 6e 61 6d 65 20 46 52 4f  o, cid, name FRO
4950: 4d 20 6f 75 74 20 4f 52 44 45 52 20 42 59 20 73  M out ORDER BY s
4960: 65 71 6e 6f 7d 0a 7d 20 7b 30 20 30 20 61 20 31  eqno}.} {0 0 a 1
4970: 20 31 20 62 7d 0a 0a 23 20 45 56 49 44 45 4e 43   1 b}..# EVIDENC
4980: 45 2d 4f 46 3a 20 52 2d 32 33 31 31 34 2d 32 31  E-OF: R-23114-21
4990: 36 39 35 20 54 68 65 20 61 75 78 69 6c 69 61 72  695 The auxiliar
49a0: 79 20 69 6e 64 65 78 2d 63 6f 6c 75 6d 6e 73 20  y index-columns 
49b0: 61 72 65 20 6e 6f 74 20 73 68 6f 77 6e 0a 23 20  are not shown.# 
49c0: 62 79 20 74 68 65 20 69 6e 64 65 78 5f 69 6e 66  by the index_inf
49d0: 6f 20 70 72 61 67 6d 61 2c 20 62 75 74 20 74 68  o pragma, but th
49e0: 65 79 20 61 72 65 20 6c 69 73 74 65 64 20 62 79  ey are listed by
49f0: 20 74 68 65 20 69 6e 64 65 78 5f 78 69 6e 66 6f   the index_xinfo
4a00: 0a 23 20 70 72 61 67 6d 61 2e 0a 23 0a 64 6f 5f  .# pragma..#.do_
4a10: 74 65 73 74 20 70 72 61 67 6d 61 2d 36 2e 35 2e  test pragma-6.5.
4a20: 31 62 20 7b 0a 20 20 63 61 70 74 75 72 65 5f 70  1b {.  capture_p
4a30: 72 61 67 6d 61 20 64 62 20 6f 75 74 20 7b 50 52  ragma db out {PR
4a40: 41 47 4d 41 20 69 6e 64 65 78 5f 78 69 6e 66 6f  AGMA index_xinfo
4a50: 28 74 33 69 31 29 7d 0a 20 20 64 62 20 65 76 61  (t3i1)}.  db eva
4a60: 6c 20 7b 53 45 4c 45 43 54 20 73 65 71 6e 6f 2c  l {SELECT seqno,
4a70: 20 63 69 64 2c 20 6e 61 6d 65 20 46 52 4f 4d 20   cid, name FROM 
4a80: 6f 75 74 20 4f 52 44 45 52 20 42 59 20 73 65 71  out ORDER BY seq
4a90: 6e 6f 7d 0a 7d 20 7b 30 20 30 20 61 20 31 20 31  no}.} {0 0 a 1 1
4aa0: 20 62 20 32 20 2d 31 20 7b 7d 7d 0a 0a 0a 23 20   b 2 -1 {}}...# 
4ab0: 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 32  EVIDENCE-OF: R-2
4ac0: 39 34 34 38 2d 36 30 33 34 36 20 50 52 41 47 4d  9448-60346 PRAGM
4ad0: 41 20 73 63 68 65 6d 61 2e 69 6e 64 65 78 5f 69  A schema.index_i
4ae0: 6e 66 6f 28 69 6e 64 65 78 2d 6e 61 6d 65 29 3b  nfo(index-name);
4af0: 20 54 68 69 73 0a 23 20 70 72 61 67 6d 61 20 72   This.# pragma r
4b00: 65 74 75 72 6e 73 20 6f 6e 65 20 72 6f 77 20 66  eturns one row f
4b10: 6f 72 20 65 61 63 68 20 6b 65 79 20 63 6f 6c 75  or each key colu
4b20: 6d 6e 20 69 6e 20 74 68 65 20 6e 61 6d 65 64 20  mn in the named 
4b30: 69 6e 64 65 78 2e 0a 23 0a 23 20 28 54 68 65 20  index..#.# (The 
4b40: 66 69 72 73 74 20 63 6f 6c 75 6d 6e 20 6f 66 20  first column of 
4b50: 6f 75 74 70 75 74 20 66 72 6f 6d 20 50 52 41 47  output from PRAG
4b60: 4d 41 20 69 6e 64 65 78 5f 69 6e 66 6f 20 69 73  MA index_info is
4b70: 2e 2e 2e 29 0a 23 20 45 56 49 44 45 4e 43 45 2d  ...).# EVIDENCE-
4b80: 4f 46 3a 20 52 2d 33 34 31 38 36 2d 35 32 39 31  OF: R-34186-5291
4b90: 34 20 54 68 65 20 72 61 6e 6b 20 6f 66 20 74 68  4 The rank of th
4ba0: 65 20 63 6f 6c 75 6d 6e 20 77 69 74 68 69 6e 20  e column within 
4bb0: 74 68 65 20 69 6e 64 65 78 2e 20 28 30 0a 23 20  the index. (0.# 
4bc0: 6d 65 61 6e 73 20 6c 65 66 74 2d 6d 6f 73 74 2e  means left-most.
4bd0: 29 0a 23 0a 23 20 28 54 68 65 20 73 65 63 6f 6e  ).#.# (The secon
4be0: 64 20 63 6f 6c 75 6d 6e 20 6f 66 20 6f 75 74 70  d column of outp
4bf0: 75 74 20 66 72 6f 6d 20 50 52 41 47 4d 41 20 69  ut from PRAGMA i
4c00: 6e 64 65 78 5f 69 6e 66 6f 20 69 73 2e 2e 2e 29  ndex_info is...)
4c10: 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20  .# EVIDENCE-OF: 
4c20: 52 2d 36 35 30 31 39 2d 30 38 33 38 33 20 54 68  R-65019-08383 Th
4c30: 65 20 72 61 6e 6b 20 6f 66 20 74 68 65 20 63 6f  e rank of the co
4c40: 6c 75 6d 6e 20 77 69 74 68 69 6e 20 74 68 65 20  lumn within the 
4c50: 74 61 62 6c 65 0a 23 20 62 65 69 6e 67 20 69 6e  table.# being in
4c60: 64 65 78 65 64 2e 0a 23 0a 23 20 28 54 68 65 20  dexed..#.# (The 
4c70: 74 68 69 72 64 20 63 6f 6c 75 6d 6e 20 6f 66 20  third column of 
4c80: 6f 75 74 70 75 74 20 66 72 6f 6d 20 50 52 41 47  output from PRAG
4c90: 4d 41 20 69 6e 64 65 78 5f 69 6e 66 6f 20 69 73  MA index_info is
4ca0: 2e 2e 2e 29 0a 23 20 45 56 49 44 45 4e 43 45 2d  ...).# EVIDENCE-
4cb0: 4f 46 3a 20 52 2d 30 39 37 37 33 2d 33 34 32 36  OF: R-09773-3426
4cc0: 36 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  6 The name of th
4cd0: 65 20 63 6f 6c 75 6d 6e 20 62 65 69 6e 67 20 69  e column being i
4ce0: 6e 64 65 78 65 64 2e 0a 23 0a 64 6f 5f 65 78 65  ndexed..#.do_exe
4cf0: 63 73 71 6c 5f 74 65 73 74 20 70 72 61 67 6d 61  csql_test pragma
4d00: 2d 36 2e 35 2e 31 63 20 7b 0a 20 20 43 52 45 41  -6.5.1c {.  CREA
4d10: 54 45 20 49 4e 44 45 58 20 74 33 69 32 20 4f 4e  TE INDEX t3i2 ON
4d20: 20 74 33 28 62 2c 61 29 3b 0a 20 20 50 52 41 47   t3(b,a);.  PRAG
4d30: 4d 41 20 69 6e 64 65 78 5f 69 6e 66 6f 3d 27 74  MA index_info='t
4d40: 33 69 32 27 3b 0a 20 20 44 52 4f 50 20 49 4e 44  3i2';.  DROP IND
4d50: 45 58 20 74 33 69 32 3b 0a 7d 20 7b 30 20 31 20  EX t3i2;.} {0 1 
4d60: 62 20 31 20 30 20 61 7d 0a 0a 64 6f 5f 74 65 73  b 1 0 a}..do_tes
4d70: 74 20 70 72 61 67 6d 61 2d 36 2e 35 2e 32 20 7b  t pragma-6.5.2 {
4d80: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
4d90: 20 70 72 61 67 6d 61 20 69 6e 64 65 78 5f 69 6e   pragma index_in
4da0: 66 6f 28 74 33 69 31 5f 62 6f 67 75 73 29 3b 0a  fo(t3i1_bogus);.
4db0: 20 20 7d 0a 7d 20 7b 7d 0a 0a 69 66 63 61 70 61    }.} {}..ifcapa
4dc0: 62 6c 65 20 74 65 6d 70 64 62 20 7b 0a 20 20 23  ble tempdb {.  #
4dd0: 20 54 65 73 74 20 66 6f 72 20 74 69 63 6b 65 74   Test for ticket
4de0: 20 23 33 33 32 30 2e 20 57 68 65 6e 20 61 20 74   #3320. When a t
4df0: 65 6d 70 20 74 61 62 6c 65 20 6f 66 20 74 68 65  emp table of the
4e00: 20 73 61 6d 65 20 6e 61 6d 65 20 65 78 69 73 74   same name exist
4e10: 73 2c 20 6d 61 6b 65 0a 20 20 23 20 73 75 72 65  s, make.  # sure
4e20: 20 74 68 65 20 73 63 68 65 6d 61 20 6f 66 20 74   the schema of t
4e30: 68 65 20 6d 61 69 6e 20 74 61 62 6c 65 20 63 61  he main table ca
4e40: 6e 20 73 74 69 6c 6c 20 62 65 20 71 75 65 72 69  n still be queri
4e50: 65 64 20 75 73 69 6e 67 20 0a 20 20 23 20 22 70  ed using .  # "p
4e60: 72 61 67 6d 61 20 74 61 62 6c 65 5f 69 6e 66 6f  ragma table_info
4e70: 22 3a 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61  ":.  do_test pra
4e80: 67 6d 61 2d 36 2e 36 2e 31 20 7b 0a 20 20 20 20  gma-6.6.1 {.    
4e90: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
4ea0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 72 69  CREATE TABLE tri
4eb0: 61 6c 28 63 6f 6c 5f 6d 61 69 6e 29 3b 0a 20 20  al(col_main);.  
4ec0: 20 20 20 20 43 52 45 41 54 45 20 54 45 4d 50 20      CREATE TEMP 
4ed0: 54 41 42 4c 45 20 74 72 69 61 6c 28 63 6f 6c 5f  TABLE trial(col_
4ee0: 74 65 6d 70 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  temp);.    }.  }
4ef0: 20 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72   {}.  do_test pr
4f00: 61 67 6d 61 2d 36 2e 36 2e 32 20 7b 0a 20 20 20  agma-6.6.2 {.   
4f10: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20   execsql {.     
4f20: 20 50 52 41 47 4d 41 20 74 61 62 6c 65 5f 69 6e   PRAGMA table_in
4f30: 66 6f 28 74 72 69 61 6c 29 3b 0a 20 20 20 20 7d  fo(trial);.    }
4f40: 0a 20 20 7d 20 7b 30 20 63 6f 6c 5f 74 65 6d 70  .  } {0 col_temp
4f50: 20 7b 7d 20 30 20 7b 7d 20 30 7d 0a 20 20 64 6f   {} 0 {} 0}.  do
4f60: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 36 2e 36  _test pragma-6.6
4f70: 2e 33 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  .3 {.    execsql
4f80: 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20   {.      PRAGMA 
4f90: 74 65 6d 70 2e 74 61 62 6c 65 5f 69 6e 66 6f 28  temp.table_info(
4fa0: 74 72 69 61 6c 29 3b 0a 20 20 20 20 7d 0a 20 20  trial);.    }.  
4fb0: 7d 20 7b 30 20 63 6f 6c 5f 74 65 6d 70 20 7b 7d  } {0 col_temp {}
4fc0: 20 30 20 7b 7d 20 30 7d 0a 20 20 64 6f 5f 74 65   0 {} 0}.  do_te
4fd0: 73 74 20 70 72 61 67 6d 61 2d 36 2e 36 2e 34 20  st pragma-6.6.4 
4fe0: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a  {.    execsql {.
4ff0: 20 20 20 20 20 20 50 52 41 47 4d 41 20 6d 61 69        PRAGMA mai
5000: 6e 2e 74 61 62 6c 65 5f 69 6e 66 6f 28 74 72 69  n.table_info(tri
5010: 61 6c 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b  al);.    }.  } {
5020: 30 20 63 6f 6c 5f 6d 61 69 6e 20 7b 7d 20 30 20  0 col_main {} 0 
5030: 7b 7d 20 30 7d 0a 7d 0a 0a 64 6f 5f 74 65 73 74  {} 0}.}..do_test
5040: 20 70 72 61 67 6d 61 2d 36 2e 37 20 7b 0a 20 20   pragma-6.7 {.  
5050: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52  execsql {.    CR
5060: 45 41 54 45 20 54 41 42 4c 45 20 74 65 73 74 5f  EATE TABLE test_
5070: 74 61 62 6c 65 28 0a 20 20 20 20 20 20 6f 6e 65  table(.      one
5080: 20 49 4e 54 20 4e 4f 54 20 4e 55 4c 4c 20 44 45   INT NOT NULL DE
5090: 46 41 55 4c 54 20 2d 31 2c 20 0a 20 20 20 20 20  FAULT -1, .     
50a0: 20 74 77 6f 20 74 65 78 74 2c 0a 20 20 20 20 20   two text,.     
50b0: 20 74 68 72 65 65 20 56 41 52 43 48 41 52 28 34   three VARCHAR(4
50c0: 35 2c 20 36 35 29 20 44 45 46 41 55 4c 54 20 27  5, 65) DEFAULT '
50d0: 61 62 63 64 65 27 2c 0a 20 20 20 20 20 20 66 6f  abcde',.      fo
50e0: 75 72 20 52 45 41 4c 20 44 45 46 41 55 4c 54 20  ur REAL DEFAULT 
50f0: 58 27 61 62 63 64 65 66 27 2c 0a 20 20 20 20 20  X'abcdef',.     
5100: 20 66 69 76 65 20 44 45 46 41 55 4c 54 20 43 55   five DEFAULT CU
5110: 52 52 45 4e 54 5f 54 49 4d 45 0a 20 20 20 20 29  RRENT_TIME.    )
5120: 3b 0a 20 20 7d 0a 20 20 63 61 70 74 75 72 65 5f  ;.  }.  capture_
5130: 70 72 61 67 6d 61 20 64 62 20 6f 75 74 20 7b 50  pragma db out {P
5140: 52 41 47 4d 41 20 74 61 62 6c 65 5f 69 6e 66 6f  RAGMA table_info
5150: 28 74 65 73 74 5f 74 61 62 6c 65 29 7d 0a 20 20  (test_table)}.  
5160: 64 62 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20  db eval {SELECT 
5170: 63 69 64 2c 20 22 6e 61 6d 65 22 2c 20 74 79 70  cid, "name", typ
5180: 65 2c 20 22 6e 6f 74 6e 75 6c 6c 22 2c 20 64 66  e, "notnull", df
5190: 6c 74 5f 76 61 6c 75 65 2c 20 70 6b 20 46 52 4f  lt_value, pk FRO
51a0: 4d 20 6f 75 74 0a 20 20 20 20 20 20 20 20 20 20  M out.          
51b0: 20 20 4f 52 44 45 52 20 42 59 20 63 69 64 7d 0a    ORDER BY cid}.
51c0: 7d 20 5b 63 6f 6e 63 61 74 20 5c 0a 20 20 7b 30  } [concat \.  {0
51d0: 20 6f 6e 65 20 49 4e 54 20 31 20 2d 31 20 30 7d   one INT 1 -1 0}
51e0: 20 5c 0a 20 20 7b 31 20 74 77 6f 20 74 65 78 74   \.  {1 two text
51f0: 20 30 20 7b 7d 20 30 7d 20 5c 0a 20 20 7b 32 20   0 {} 0} \.  {2 
5200: 74 68 72 65 65 20 7b 56 41 52 43 48 41 52 28 34  three {VARCHAR(4
5210: 35 2c 20 36 35 29 7d 20 30 20 27 61 62 63 64 65  5, 65)} 0 'abcde
5220: 27 20 30 7d 20 5c 0a 20 20 7b 33 20 66 6f 75 72  ' 0} \.  {3 four
5230: 20 52 45 41 4c 20 30 20 58 27 61 62 63 64 65 66   REAL 0 X'abcdef
5240: 27 20 30 7d 20 5c 0a 20 20 7b 34 20 66 69 76 65  ' 0} \.  {4 five
5250: 20 7b 7d 20 30 20 43 55 52 52 45 4e 54 5f 54 49   {} 0 CURRENT_TI
5260: 4d 45 20 30 7d 20 5c 0a 5d 0a 64 6f 5f 74 65 73  ME 0} \.].do_tes
5270: 74 20 70 72 61 67 6d 61 2d 36 2e 38 20 7b 0a 20  t pragma-6.8 {. 
5280: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43   execsql {.    C
5290: 52 45 41 54 45 20 54 41 42 4c 45 20 74 36 38 28  REATE TABLE t68(
52a0: 61 2c 62 2c 63 2c 50 52 49 4d 41 52 59 20 4b 45  a,b,c,PRIMARY KE
52b0: 59 28 61 2c 62 2c 61 2c 63 29 29 3b 0a 20 20 20  Y(a,b,a,c));.   
52c0: 20 50 52 41 47 4d 41 20 74 61 62 6c 65 5f 69 6e   PRAGMA table_in
52d0: 66 6f 28 74 36 38 29 3b 0a 20 20 7d 0a 7d 20 5b  fo(t68);.  }.} [
52e0: 63 6f 6e 63 61 74 20 5c 0a 20 20 7b 30 20 61 20  concat \.  {0 a 
52f0: 7b 7d 20 30 20 7b 7d 20 31 7d 20 5c 0a 20 20 7b  {} 0 {} 1} \.  {
5300: 31 20 62 20 7b 7d 20 30 20 7b 7d 20 32 7d 20 5c  1 b {} 0 {} 2} \
5310: 0a 20 20 7b 32 20 63 20 7b 7d 20 30 20 7b 7d 20  .  {2 c {} 0 {} 
5320: 34 7d 20 5c 0a 5d 0a 7d 20 3b 23 20 69 66 63 61  4} \.].} ;# ifca
5330: 70 61 62 6c 65 20 73 63 68 65 6d 61 5f 70 72 61  pable schema_pra
5340: 67 6d 61 73 0a 23 20 4d 69 73 63 65 6c 6c 61 6e  gmas.# Miscellan
5350: 65 6f 75 73 20 74 65 73 74 73 0a 23 0a 69 66 63  eous tests.#.ifc
5360: 61 70 61 62 6c 65 20 73 63 68 65 6d 61 5f 70 72  apable schema_pr
5370: 61 67 6d 61 73 20 7b 0a 23 20 45 56 49 44 45 4e  agmas {.# EVIDEN
5380: 43 45 2d 4f 46 3a 20 52 2d 36 34 31 30 33 2d 31  CE-OF: R-64103-1
5390: 37 37 37 36 20 50 52 41 47 4d 41 20 73 63 68 65  7776 PRAGMA sche
53a0: 6d 61 2e 69 6e 64 65 78 5f 6c 69 73 74 28 74 61  ma.index_list(ta
53b0: 62 6c 65 2d 6e 61 6d 65 29 3b 20 54 68 69 73 0a  ble-name); This.
53c0: 23 20 70 72 61 67 6d 61 20 72 65 74 75 72 6e 73  # pragma returns
53d0: 20 6f 6e 65 20 72 6f 77 20 66 6f 72 20 65 61 63   one row for eac
53e0: 68 20 69 6e 64 65 78 20 61 73 73 6f 63 69 61 74  h index associat
53f0: 65 64 20 77 69 74 68 20 74 68 65 20 67 69 76 65  ed with the give
5400: 6e 20 74 61 62 6c 65 2e 0a 23 0a 64 6f 5f 74 65  n table..#.do_te
5410: 73 74 20 70 72 61 67 6d 61 2d 37 2e 31 2e 31 20  st pragma-7.1.1 
5420: 7b 0a 20 20 23 20 4d 61 6b 65 20 73 75 72 65 20  {.  # Make sure 
5430: 61 20 70 72 61 67 6d 61 20 6b 6e 6f 77 73 20 74  a pragma knows t
5440: 6f 20 72 65 61 64 20 74 68 65 20 73 63 68 65 6d  o read the schem
5450: 61 20 69 66 20 69 74 20 6e 65 65 64 73 20 74 6f  a if it needs to
5460: 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 73 71  .  db close.  sq
5470: 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64 62  lite3 db test.db
5480: 0a 20 20 63 61 70 74 75 72 65 5f 70 72 61 67 6d  .  capture_pragm
5490: 61 20 64 62 20 6f 75 74 20 22 50 52 41 47 4d 41  a db out "PRAGMA
54a0: 20 69 6e 64 65 78 5f 6c 69 73 74 28 74 33 29 22   index_list(t3)"
54b0: 0a 20 20 64 62 20 65 76 61 6c 20 7b 53 45 4c 45  .  db eval {SELE
54c0: 43 54 20 6e 61 6d 65 2c 20 22 6f 72 69 67 69 6e  CT name, "origin
54d0: 22 20 46 52 4f 4d 20 6f 75 74 20 4f 52 44 45 52  " FROM out ORDER
54e0: 20 42 59 20 6e 61 6d 65 20 44 45 53 43 7d 0a 7d   BY name DESC}.}
54f0: 20 7b 74 33 69 31 20 63 20 73 71 6c 69 74 65 5f   {t3i1 c sqlite_
5500: 61 75 74 6f 69 6e 64 65 78 5f 74 33 5f 31 20 75  autoindex_t3_1 u
5510: 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  }.do_test pragma
5520: 2d 37 2e 31 2e 32 20 7b 0a 20 20 65 78 65 63 73  -7.1.2 {.  execs
5530: 71 6c 20 7b 0a 20 20 20 20 70 72 61 67 6d 61 20  ql {.    pragma 
5540: 69 6e 64 65 78 5f 6c 69 73 74 28 74 33 5f 62 6f  index_list(t3_bo
5550: 67 75 73 29 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 7d  gus);.  }.} {}.}
5560: 20 3b 23 20 69 66 63 61 70 61 62 6c 65 20 73 63   ;# ifcapable sc
5570: 68 65 6d 61 5f 70 72 61 67 6d 61 73 0a 69 66 63  hema_pragmas.ifc
5580: 61 70 61 62 6c 65 20 7b 75 74 66 31 36 7d 20 7b  apable {utf16} {
5590: 0a 20 20 69 66 20 7b 5b 70 65 72 6d 75 74 61 74  .  if {[permutat
55a0: 69 6f 6e 5d 20 3d 3d 20 22 22 7d 20 7b 0a 20 20  ion] == ""} {.  
55b0: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
55c0: 2d 37 2e 32 20 7b 0a 20 20 20 20 20 20 64 62 20  -7.2 {.      db 
55d0: 63 6c 6f 73 65 0a 20 20 20 20 20 20 73 71 6c 69  close.      sqli
55e0: 74 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20  te3 db test.db. 
55f0: 20 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b 0a       catchsql {.
5600: 20 20 20 20 20 20 20 20 70 72 61 67 6d 61 20 65          pragma e
5610: 6e 63 6f 64 69 6e 67 3d 62 6f 67 75 73 3b 0a 20  ncoding=bogus;. 
5620: 20 20 20 20 20 7d 0a 20 20 20 20 7d 20 7b 31 20       }.    } {1 
5630: 7b 75 6e 73 75 70 70 6f 72 74 65 64 20 65 6e 63  {unsupported enc
5640: 6f 64 69 6e 67 3a 20 62 6f 67 75 73 7d 7d 0a 20  oding: bogus}}. 
5650: 20 7d 0a 7d 0a 69 66 63 61 70 61 62 6c 65 20 74   }.}.ifcapable t
5660: 65 6d 70 64 62 20 7b 0a 20 20 64 6f 5f 74 65 73  empdb {.  do_tes
5670: 74 20 70 72 61 67 6d 61 2d 37 2e 33 20 7b 0a 20  t pragma-7.3 {. 
5680: 20 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 20 20     db close.    
5690: 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e  sqlite3 db test.
56a0: 64 62 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b  db.    execsql {
56b0: 0a 20 20 20 20 20 20 70 72 61 67 6d 61 20 6c 6f  .      pragma lo
56c0: 63 6b 5f 73 74 61 74 75 73 3b 0a 20 20 20 20 7d  ck_status;.    }
56d0: 0a 20 20 7d 20 7b 6d 61 69 6e 20 75 6e 6c 6f 63  .  } {main unloc
56e0: 6b 65 64 20 74 65 6d 70 20 63 6c 6f 73 65 64 7d  ked temp closed}
56f0: 0a 7d 20 65 6c 73 65 20 7b 0a 20 20 64 6f 5f 74  .} else {.  do_t
5700: 65 73 74 20 70 72 61 67 6d 61 2d 37 2e 33 20 7b  est pragma-7.3 {
5710: 0a 20 20 20 20 64 62 20 63 6c 6f 73 65 0a 20 20  .    db close.  
5720: 20 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73    sqlite3 db tes
5730: 74 2e 64 62 0a 20 20 20 20 65 78 65 63 73 71 6c  t.db.    execsql
5740: 20 7b 0a 20 20 20 20 20 20 70 72 61 67 6d 61 20   {.      pragma 
5750: 6c 6f 63 6b 5f 73 74 61 74 75 73 3b 0a 20 20 20  lock_status;.   
5760: 20 7d 0a 20 20 7d 20 7b 6d 61 69 6e 20 75 6e 6c   }.  } {main unl
5770: 6f 63 6b 65 64 7d 0a 7d 0a 0a 0a 23 2d 2d 2d 2d  ocked}.}...#----
5780: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5790: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
57a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
57b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
57c0: 2d 2d 0a 23 20 54 65 73 74 20 63 61 73 65 73 20  --.# Test cases 
57d0: 70 72 61 67 6d 61 2d 38 2e 2a 20 74 65 73 74 20  pragma-8.* test 
57e0: 74 68 65 20 22 50 52 41 47 4d 41 20 73 63 68 65  the "PRAGMA sche
57f0: 6d 61 5f 76 65 72 73 69 6f 6e 22 20 61 6e 64 20  ma_version" and 
5800: 22 50 52 41 47 4d 41 0a 23 20 75 73 65 72 5f 76  "PRAGMA.# user_v
5810: 65 72 73 69 6f 6e 22 20 73 74 61 74 65 6d 65 6e  ersion" statemen
5820: 74 73 2e 0a 23 0a 23 20 70 72 61 67 6d 61 2d 38  ts..#.# pragma-8
5830: 2e 31 3a 20 50 52 41 47 4d 41 20 73 63 68 65 6d  .1: PRAGMA schem
5840: 61 5f 76 65 72 73 69 6f 6e 0a 23 20 70 72 61 67  a_version.# prag
5850: 6d 61 2d 38 2e 32 3a 20 50 52 41 47 4d 41 20 75  ma-8.2: PRAGMA u
5860: 73 65 72 5f 76 65 72 73 69 6f 6e 0a 23 0a 0a 69  ser_version.#..i
5870: 66 63 61 70 61 62 6c 65 20 73 63 68 65 6d 61 5f  fcapable schema_
5880: 76 65 72 73 69 6f 6e 20 7b 0a 0a 23 20 46 69 72  version {..# Fir
5890: 73 74 20 63 68 65 63 6b 20 74 68 61 74 20 77 65  st check that we
58a0: 20 63 61 6e 20 73 65 74 20 74 68 65 20 73 63 68   can set the sch
58b0: 65 6d 61 20 76 65 72 73 69 6f 6e 20 61 6e 64 20  ema version and 
58c0: 74 68 65 6e 20 72 65 74 72 69 65 76 65 20 74 68  then retrieve th
58d0: 65 0a 23 20 73 61 6d 65 20 76 61 6c 75 65 2e 0a  e.# same value..
58e0: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38  do_test pragma-8
58f0: 2e 31 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c  .1.1 {.  execsql
5900: 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 73 63   {.    PRAGMA sc
5910: 68 65 6d 61 5f 76 65 72 73 69 6f 6e 20 3d 20 31  hema_version = 1
5920: 30 35 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f  05;.  }.} {}.do_
5930: 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e  test pragma-8.1.
5940: 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 32 20 7b  2 {.  execsql2 {
5950: 0a 20 20 20 20 50 52 41 47 4d 41 20 73 63 68 65  .    PRAGMA sche
5960: 6d 61 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 7d 0a  ma_version;.  }.
5970: 7d 20 7b 73 63 68 65 6d 61 5f 76 65 72 73 69 6f  } {schema_versio
5980: 6e 20 31 30 35 7d 0a 64 6f 5f 74 65 73 74 20 70  n 105}.do_test p
5990: 72 61 67 6d 61 2d 38 2e 31 2e 33 20 7b 0a 20 20  ragma-8.1.3 {.  
59a0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52  execsql {.    PR
59b0: 41 47 4d 41 20 73 63 68 65 6d 61 5f 76 65 72 73  AGMA schema_vers
59c0: 69 6f 6e 20 3d 20 31 30 36 3b 0a 20 20 7d 0a 7d  ion = 106;.  }.}
59d0: 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67   {}.do_test prag
59e0: 6d 61 2d 38 2e 31 2e 34 20 7b 0a 20 20 65 78 65  ma-8.1.4 {.  exe
59f0: 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d  csql {.    PRAGM
5a00: 41 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e  A schema_version
5a10: 3b 0a 20 20 7d 0a 7d 20 31 30 36 0a 0a 23 20 43  ;.  }.} 106..# C
5a20: 68 65 63 6b 20 74 68 61 74 20 63 72 65 61 74 69  heck that creati
5a30: 6e 67 20 61 20 74 61 62 6c 65 20 6d 6f 64 69 66  ng a table modif
5a40: 69 65 73 20 74 68 65 20 73 63 68 65 6d 61 2d 76  ies the schema-v
5a50: 65 72 73 69 6f 6e 20 28 74 68 69 73 20 69 73 20  ersion (this is 
5a60: 72 65 61 6c 6c 79 0a 23 20 74 6f 20 76 65 72 69  really.# to veri
5a70: 66 79 20 74 68 61 74 20 74 68 65 20 76 61 6c 75  fy that the valu
5a80: 65 20 62 65 69 6e 67 20 72 65 61 64 20 69 73 20  e being read is 
5a90: 69 6e 20 66 61 63 74 20 74 68 65 20 73 63 68 65  in fact the sche
5aa0: 6d 61 20 76 65 72 73 69 6f 6e 29 2e 0a 64 6f 5f  ma version)..do_
5ab0: 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e  test pragma-8.1.
5ac0: 35 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  5 {.  execsql {.
5ad0: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
5ae0: 20 74 34 28 61 2c 20 62 2c 20 63 29 3b 0a 20 20   t4(a, b, c);.  
5af0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 34    INSERT INTO t4
5b00: 20 56 41 4c 55 45 53 28 31 2c 20 32 2c 20 33 29   VALUES(1, 2, 3)
5b10: 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  ;.    SELECT * F
5b20: 52 4f 4d 20 74 34 3b 0a 20 20 7d 0a 7d 20 7b 31  ROM t4;.  }.} {1
5b30: 20 32 20 33 7d 0a 64 6f 5f 74 65 73 74 20 70 72   2 3}.do_test pr
5b40: 61 67 6d 61 2d 38 2e 31 2e 36 20 7b 0a 20 20 65  agma-8.1.6 {.  e
5b50: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41  xecsql {.    PRA
5b60: 47 4d 41 20 73 63 68 65 6d 61 5f 76 65 72 73 69  GMA schema_versi
5b70: 6f 6e 3b 0a 20 20 7d 0a 7d 20 31 30 37 0a 0a 23  on;.  }.} 107..#
5b80: 20 4e 6f 77 20 6f 70 65 6e 20 61 20 73 65 63 6f   Now open a seco
5b90: 6e 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f  nd connection to
5ba0: 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20 45   the database. E
5bb0: 6e 73 75 72 65 20 74 68 61 74 20 63 68 61 6e 67  nsure that chang
5bc0: 69 6e 67 20 74 68 65 0a 23 20 73 63 68 65 6d 61  ing the.# schema
5bd0: 2d 76 65 72 73 69 6f 6e 20 75 73 69 6e 67 20 74  -version using t
5be0: 68 65 20 66 69 72 73 74 20 63 6f 6e 6e 65 63 74  he first connect
5bf0: 69 6f 6e 20 66 6f 72 63 65 73 20 74 68 65 20 73  ion forces the s
5c00: 65 63 6f 6e 64 20 63 6f 6e 6e 65 63 74 69 6f 6e  econd connection
5c10: 0a 23 20 74 6f 20 72 65 6c 6f 61 64 20 74 68 65  .# to reload the
5c20: 20 73 63 68 65 6d 61 2e 20 54 68 69 73 20 68 61   schema. This ha
5c30: 73 20 74 6f 20 62 65 20 64 6f 6e 65 20 75 73 69  s to be done usi
5c40: 6e 67 20 74 68 65 20 43 2d 41 50 49 20 74 65 73  ng the C-API tes
5c50: 74 20 66 75 6e 63 74 69 6f 6e 73 2c 0a 23 20 62  t functions,.# b
5c60: 65 63 61 75 73 65 20 74 68 65 20 54 43 4c 20 41  ecause the TCL A
5c70: 50 49 20 61 63 63 6f 75 6e 74 73 20 66 6f 72 20  PI accounts for 
5c80: 53 43 48 45 4d 41 5f 45 52 52 4f 52 20 61 6e 64  SCHEMA_ERROR and
5c90: 20 72 65 74 72 69 65 73 20 74 68 65 20 71 75 65   retries the que
5ca0: 72 79 2e 0a 64 6f 5f 74 65 73 74 20 70 72 61 67  ry..do_test prag
5cb0: 6d 61 2d 38 2e 31 2e 37 20 7b 0a 20 20 73 71 6c  ma-8.1.7 {.  sql
5cc0: 69 74 65 33 20 64 62 32 20 74 65 73 74 2e 64 62  ite3 db2 test.db
5cd0: 3b 20 73 65 74 20 3a 3a 44 42 32 20 5b 73 71 6c  ; set ::DB2 [sql
5ce0: 69 74 65 33 5f 63 6f 6e 6e 65 63 74 69 6f 6e 5f  ite3_connection_
5cf0: 70 6f 69 6e 74 65 72 20 64 62 32 5d 0a 20 20 65  pointer db2].  e
5d00: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c  xecsql {.    SEL
5d10: 45 43 54 20 2a 20 46 52 4f 4d 20 74 34 3b 0a 20  ECT * FROM t4;. 
5d20: 20 7d 20 64 62 32 0a 7d 20 7b 31 20 32 20 33 7d   } db2.} {1 2 3}
5d30: 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d  .do_test pragma-
5d40: 38 2e 31 2e 38 20 7b 0a 20 20 65 78 65 63 73 71  8.1.8 {.  execsq
5d50: 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 73  l {.    PRAGMA s
5d60: 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 20 3d 20  chema_version = 
5d70: 31 30 38 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f  108;.  }.} {}.do
5d80: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 31  _test pragma-8.1
5d90: 2e 39 20 7b 0a 20 20 73 65 74 20 3a 3a 53 54 4d  .9 {.  set ::STM
5da0: 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61  T [sqlite3_prepa
5db0: 72 65 20 24 3a 3a 44 42 32 20 22 53 45 4c 45 43  re $::DB2 "SELEC
5dc0: 54 20 2a 20 46 52 4f 4d 20 74 34 22 20 2d 31 20  T * FROM t4" -1 
5dd0: 44 55 4d 4d 59 5d 0a 20 20 73 71 6c 69 74 65 33  DUMMY].  sqlite3
5de0: 5f 73 74 65 70 20 24 3a 3a 53 54 4d 54 0a 7d 20  _step $::STMT.} 
5df0: 53 51 4c 49 54 45 5f 45 52 52 4f 52 0a 64 6f 5f  SQLITE_ERROR.do_
5e00: 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e  test pragma-8.1.
5e10: 31 30 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 66  10 {.  sqlite3_f
5e20: 69 6e 61 6c 69 7a 65 20 24 3a 3a 53 54 4d 54 0a  inalize $::STMT.
5e30: 7d 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 0a  } SQLITE_SCHEMA.
5e40: 0a 23 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65  .# Make sure the
5e50: 20 73 63 68 65 6d 61 2d 76 65 72 73 69 6f 6e 20   schema-version 
5e60: 63 61 6e 20 62 65 20 6d 61 6e 69 70 75 6c 61 74  can be manipulat
5e70: 65 64 20 69 6e 20 61 6e 20 61 74 74 61 63 68 65  ed in an attache
5e80: 64 20 64 61 74 61 62 61 73 65 2e 0a 66 6f 72 63  d database..forc
5e90: 65 64 65 6c 65 74 65 20 74 65 73 74 32 2e 64 62  edelete test2.db
5ea0: 0a 66 6f 72 63 65 64 65 6c 65 74 65 20 74 65 73  .forcedelete tes
5eb0: 74 32 2e 64 62 2d 6a 6f 75 72 6e 61 6c 0a 69 66  t2.db-journal.if
5ec0: 63 61 70 61 62 6c 65 20 61 74 74 61 63 68 20 7b  capable attach {
5ed0: 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .  do_test pragm
5ee0: 61 2d 38 2e 31 2e 31 31 20 7b 0a 20 20 20 20 65  a-8.1.11 {.    e
5ef0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 41  xecsql {.      A
5f00: 54 54 41 43 48 20 27 74 65 73 74 32 2e 64 62 27  TTACH 'test2.db'
5f10: 20 41 53 20 61 75 78 3b 0a 20 20 20 20 20 20 43   AS aux;.      C
5f20: 52 45 41 54 45 20 54 41 42 4c 45 20 61 75 78 2e  REATE TABLE aux.
5f30: 74 31 28 61 2c 20 62 2c 20 63 29 3b 0a 20 20 20  t1(a, b, c);.   
5f40: 20 20 20 50 52 41 47 4d 41 20 61 75 78 2e 73 63     PRAGMA aux.sc
5f50: 68 65 6d 61 5f 76 65 72 73 69 6f 6e 20 3d 20 32  hema_version = 2
5f60: 30 35 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 7d  05;.    }.  } {}
5f70: 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .  do_test pragm
5f80: 61 2d 38 2e 31 2e 31 32 20 7b 0a 20 20 20 20 65  a-8.1.12 {.    e
5f90: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50  xecsql {.      P
5fa0: 52 41 47 4d 41 20 61 75 78 2e 73 63 68 65 6d 61  RAGMA aux.schema
5fb0: 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 20 20 7d 0a  _version;.    }.
5fc0: 20 20 7d 20 32 30 35 0a 7d 0a 64 6f 5f 74 65 73    } 205.}.do_tes
5fd0: 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e 31 33 20  t pragma-8.1.13 
5fe0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
5ff0: 20 20 50 52 41 47 4d 41 20 73 63 68 65 6d 61 5f    PRAGMA schema_
6000: 76 65 72 73 69 6f 6e 3b 0a 20 20 7d 0a 7d 20 31  version;.  }.} 1
6010: 30 38 0a 0a 23 20 41 6e 64 20 63 68 65 63 6b 20  08..# And check 
6020: 74 68 61 74 20 6d 6f 64 69 66 79 69 6e 67 20 74  that modifying t
6030: 68 65 20 73 63 68 65 6d 61 2d 76 65 72 73 69 6f  he schema-versio
6040: 6e 20 69 6e 20 61 6e 20 61 74 74 61 63 68 65 64  n in an attached
6050: 20 64 61 74 61 62 61 73 65 0a 23 20 66 6f 72 63   database.# forc
6060: 65 73 20 74 68 65 20 73 65 63 6f 6e 64 20 63 6f  es the second co
6070: 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 72 65 6c 6f  nnection to relo
6080: 61 64 20 74 68 65 20 73 63 68 65 6d 61 2e 0a 69  ad the schema..i
6090: 66 63 61 70 61 62 6c 65 20 61 74 74 61 63 68 20  fcapable attach 
60a0: 7b 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67  {.  do_test prag
60b0: 6d 61 2d 38 2e 31 2e 31 34 20 7b 0a 20 20 20 20  ma-8.1.14 {.    
60c0: 73 71 6c 69 74 65 33 20 64 62 32 20 74 65 73 74  sqlite3 db2 test
60d0: 2e 64 62 3b 20 73 65 74 20 3a 3a 44 42 32 20 5b  .db; set ::DB2 [
60e0: 73 71 6c 69 74 65 33 5f 63 6f 6e 6e 65 63 74 69  sqlite3_connecti
60f0: 6f 6e 5f 70 6f 69 6e 74 65 72 20 64 62 32 5d 0a  on_pointer db2].
6100: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20      execsql {.  
6110: 20 20 20 20 41 54 54 41 43 48 20 27 74 65 73 74      ATTACH 'test
6120: 32 2e 64 62 27 20 41 53 20 61 75 78 3b 0a 20 20  2.db' AS aux;.  
6130: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
6140: 4d 20 61 75 78 2e 74 31 3b 0a 20 20 20 20 7d 20  M aux.t1;.    } 
6150: 64 62 32 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f  db2.  } {}.  do_
6160: 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e  test pragma-8.1.
6170: 31 35 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  15 {.    execsql
6180: 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20   {.      PRAGMA 
6190: 61 75 78 2e 73 63 68 65 6d 61 5f 76 65 72 73 69  aux.schema_versi
61a0: 6f 6e 20 3d 20 32 30 36 3b 0a 20 20 20 20 7d 0a  on = 206;.    }.
61b0: 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65 73 74    } {}.  do_test
61c0: 20 70 72 61 67 6d 61 2d 38 2e 31 2e 31 36 20 7b   pragma-8.1.16 {
61d0: 0a 20 20 20 20 73 65 74 20 3a 3a 53 54 4d 54 20  .    set ::STMT 
61e0: 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65  [sqlite3_prepare
61f0: 20 24 3a 3a 44 42 32 20 22 53 45 4c 45 43 54 20   $::DB2 "SELECT 
6200: 2a 20 46 52 4f 4d 20 61 75 78 2e 74 31 22 20 2d  * FROM aux.t1" -
6210: 31 20 44 55 4d 4d 59 5d 0a 20 20 20 20 73 71 6c  1 DUMMY].    sql
6220: 69 74 65 33 5f 73 74 65 70 20 24 3a 3a 53 54 4d  ite3_step $::STM
6230: 54 0a 20 20 7d 20 53 51 4c 49 54 45 5f 45 52 52  T.  } SQLITE_ERR
6240: 4f 52 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61  OR.  do_test pra
6250: 67 6d 61 2d 38 2e 31 2e 31 37 20 7b 0a 20 20 20  gma-8.1.17 {.   
6260: 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a   sqlite3_finaliz
6270: 65 20 24 3a 3a 53 54 4d 54 0a 20 20 7d 20 53 51  e $::STMT.  } SQ
6280: 4c 49 54 45 5f 53 43 48 45 4d 41 0a 20 20 64 6f  LITE_SCHEMA.  do
6290: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 31  _test pragma-8.1
62a0: 2e 31 38 20 7b 0a 20 20 20 20 64 62 32 20 63 6c  .18 {.    db2 cl
62b0: 6f 73 65 0a 20 20 7d 20 7b 7d 0a 7d 0a 0a 23 20  ose.  } {}.}..# 
62c0: 4e 6f 77 20 74 65 73 74 20 74 68 61 74 20 74 68  Now test that th
62d0: 65 20 75 73 65 72 2d 76 65 72 73 69 6f 6e 20 63  e user-version c
62e0: 61 6e 20 62 65 20 72 65 61 64 20 61 6e 64 20 77  an be read and w
62f0: 72 69 74 74 65 6e 20 28 61 6e 64 20 74 68 61 74  ritten (and that
6300: 20 77 65 20 61 72 65 6e 27 74 0a 23 20 61 63 63   we aren't.# acc
6310: 69 64 65 6e 74 61 6c 6c 79 20 6d 61 6e 69 70 75  identally manipu
6320: 6c 61 74 69 6e 67 20 74 68 65 20 73 63 68 65 6d  lating the schem
6330: 61 2d 76 65 72 73 69 6f 6e 20 69 6e 73 74 65 61  a-version instea
6340: 64 29 2e 0a 64 6f 5f 74 65 73 74 20 70 72 61 67  d)..do_test prag
6350: 6d 61 2d 38 2e 32 2e 31 20 7b 0a 20 20 65 78 65  ma-8.2.1 {.  exe
6360: 63 73 71 6c 32 20 7b 0a 20 20 20 20 50 52 41 47  csql2 {.    PRAG
6370: 4d 41 20 75 73 65 72 5f 76 65 72 73 69 6f 6e 3b  MA user_version;
6380: 0a 20 20 7d 0a 7d 20 7b 75 73 65 72 5f 76 65 72  .  }.} {user_ver
6390: 73 69 6f 6e 20 30 7d 0a 64 6f 5f 74 65 73 74 20  sion 0}.do_test 
63a0: 70 72 61 67 6d 61 2d 38 2e 32 2e 32 20 7b 0a 20  pragma-8.2.2 {. 
63b0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50   execsql {.    P
63c0: 52 41 47 4d 41 20 75 73 65 72 5f 76 65 72 73 69  RAGMA user_versi
63d0: 6f 6e 20 3d 20 32 3b 0a 20 20 7d 0a 7d 20 7b 7d  on = 2;.  }.} {}
63e0: 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d  .do_test pragma-
63f0: 38 2e 32 2e 33 2e 31 20 7b 0a 20 20 65 78 65 63  8.2.3.1 {.  exec
6400: 73 71 6c 32 20 7b 0a 20 20 20 20 50 52 41 47 4d  sql2 {.    PRAGM
6410: 41 20 75 73 65 72 5f 76 65 72 73 69 6f 6e 3b 0a  A user_version;.
6420: 20 20 7d 0a 7d 20 7b 75 73 65 72 5f 76 65 72 73    }.} {user_vers
6430: 69 6f 6e 20 32 7d 0a 64 6f 5f 74 65 73 74 20 70  ion 2}.do_test p
6440: 72 61 67 6d 61 2d 38 2e 32 2e 33 2e 32 20 7b 0a  ragma-8.2.3.2 {.
6450: 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 73 71 6c    db close.  sql
6460: 69 74 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a  ite3 db test.db.
6470: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
6480: 50 52 41 47 4d 41 20 75 73 65 72 5f 76 65 72 73  PRAGMA user_vers
6490: 69 6f 6e 3b 0a 20 20 7d 0a 7d 20 7b 32 7d 0a 64  ion;.  }.} {2}.d
64a0: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e  o_test pragma-8.
64b0: 32 2e 34 2e 31 20 7b 0a 20 20 65 78 65 63 73 71  2.4.1 {.  execsq
64c0: 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 73  l {.    PRAGMA s
64d0: 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 3b 0a 20  chema_version;. 
64e0: 20 7d 0a 7d 20 7b 31 30 38 7d 0a 69 66 63 61 70   }.} {108}.ifcap
64f0: 61 62 6c 65 20 76 61 63 75 75 6d 20 7b 0a 20 20  able vacuum {.  
6500: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38  do_test pragma-8
6510: 2e 32 2e 34 2e 32 20 7b 0a 20 20 20 20 65 78 65  .2.4.2 {.    exe
6520: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 56 41 43  csql {.      VAC
6530: 55 55 4d 3b 0a 20 20 20 20 20 20 50 52 41 47 4d  UUM;.      PRAGM
6540: 41 20 75 73 65 72 5f 76 65 72 73 69 6f 6e 3b 0a  A user_version;.
6550: 20 20 20 20 7d 0a 20 20 7d 20 7b 32 7d 0a 20 20      }.  } {2}.  
6560: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38  do_test pragma-8
6570: 2e 32 2e 34 2e 33 20 7b 0a 20 20 20 20 65 78 65  .2.4.3 {.    exe
6580: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41  csql {.      PRA
6590: 47 4d 41 20 73 63 68 65 6d 61 5f 76 65 72 73 69  GMA schema_versi
65a0: 6f 6e 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 31  on;.    }.  } {1
65b0: 30 39 7d 0a 7d 0a 0a 69 66 63 61 70 61 62 6c 65  09}.}..ifcapable
65c0: 20 61 74 74 61 63 68 20 7b 0a 20 20 64 62 20 65   attach {.  db e
65d0: 76 61 6c 20 7b 41 54 54 41 43 48 20 27 74 65 73  val {ATTACH 'tes
65e0: 74 32 2e 64 62 27 20 41 53 20 61 75 78 7d 0a 20  t2.db' AS aux}. 
65f0: 20 0a 20 20 23 20 43 68 65 63 6b 20 74 68 61 74   .  # Check that
6600: 20 74 68 65 20 75 73 65 72 2d 76 65 72 73 69 6f   the user-versio
6610: 6e 20 69 6e 20 74 68 65 20 61 75 78 69 6c 61 72  n in the auxilar
6620: 79 20 64 61 74 61 62 61 73 65 20 63 61 6e 20 62  y database can b
6630: 65 20 6d 61 6e 69 70 75 6c 61 74 65 64 20 28 0a  e manipulated (.
6640: 20 20 23 20 61 6e 64 20 74 68 61 74 20 77 65 20    # and that we 
6650: 61 72 65 6e 27 74 20 61 63 63 69 64 65 6e 74 61  aren't accidenta
6660: 6c 6c 79 20 6d 61 6e 69 70 75 6c 61 74 69 6e 67  lly manipulating
6670: 20 74 68 65 20 73 61 6d 65 20 69 6e 20 74 68 65   the same in the
6680: 20 6d 61 69 6e 20 64 62 29 2e 0a 20 20 64 6f 5f   main db)..  do_
6690: 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 32 2e  test pragma-8.2.
66a0: 35 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  5 {.    execsql 
66b0: 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 61  {.      PRAGMA a
66c0: 75 78 2e 75 73 65 72 5f 76 65 72 73 69 6f 6e 3b  ux.user_version;
66d0: 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 30 7d 0a 20  .    }.  } {0}. 
66e0: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
66f0: 38 2e 32 2e 36 20 7b 0a 20 20 20 20 65 78 65 63  8.2.6 {.    exec
6700: 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47  sql {.      PRAG
6710: 4d 41 20 61 75 78 2e 75 73 65 72 5f 76 65 72 73  MA aux.user_vers
6720: 69 6f 6e 20 3d 20 33 3b 0a 20 20 20 20 7d 0a 20  ion = 3;.    }. 
6730: 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20   } {}.  do_test 
6740: 70 72 61 67 6d 61 2d 38 2e 32 2e 37 20 7b 0a 20  pragma-8.2.7 {. 
6750: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
6760: 20 20 20 50 52 41 47 4d 41 20 61 75 78 2e 75 73     PRAGMA aux.us
6770: 65 72 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 20 20  er_version;.    
6780: 7d 0a 20 20 7d 20 7b 33 7d 0a 20 20 64 6f 5f 74  }.  } {3}.  do_t
6790: 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 32 2e 38  est pragma-8.2.8
67a0: 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b   {.    execsql {
67b0: 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 6d 61  .      PRAGMA ma
67c0: 69 6e 2e 75 73 65 72 5f 76 65 72 73 69 6f 6e 3b  in.user_version;
67d0: 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 32 7d 0a 20  .    }.  } {2}. 
67e0: 20 0a 20 20 23 20 4e 6f 77 20 63 68 65 63 6b 20   .  # Now check 
67f0: 74 68 61 74 20 61 20 52 4f 4c 4c 42 41 43 4b 20  that a ROLLBACK 
6800: 72 65 73 65 74 73 20 74 68 65 20 75 73 65 72 2d  resets the user-
6810: 76 65 72 73 69 6f 6e 20 69 66 20 69 74 20 68 61  version if it ha
6820: 73 20 62 65 65 6e 20 6d 6f 64 69 66 69 65 64 0a  s been modified.
6830: 20 20 23 20 77 69 74 68 69 6e 20 61 20 74 72 61    # within a tra
6840: 6e 73 61 63 74 69 6f 6e 2e 0a 20 20 64 6f 5f 74  nsaction..  do_t
6850: 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 32 2e 39  est pragma-8.2.9
6860: 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b   {.    execsql {
6870: 0a 20 20 20 20 20 20 42 45 47 49 4e 3b 0a 20 20  .      BEGIN;.  
6880: 20 20 20 20 50 52 41 47 4d 41 20 61 75 78 2e 75      PRAGMA aux.u
6890: 73 65 72 5f 76 65 72 73 69 6f 6e 20 3d 20 31 30  ser_version = 10
68a0: 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 75  ;.      PRAGMA u
68b0: 73 65 72 5f 76 65 72 73 69 6f 6e 20 3d 20 31 31  ser_version = 11
68c0: 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 7d 0a 20  ;.    }.  } {}. 
68d0: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
68e0: 38 2e 32 2e 31 30 20 7b 0a 20 20 20 20 65 78 65  8.2.10 {.    exe
68f0: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41  csql {.      PRA
6900: 47 4d 41 20 61 75 78 2e 75 73 65 72 5f 76 65 72  GMA aux.user_ver
6910: 73 69 6f 6e 3b 0a 20 20 20 20 7d 0a 20 20 7d 20  sion;.    }.  } 
6920: 7b 31 30 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70  {10}.  do_test p
6930: 72 61 67 6d 61 2d 38 2e 32 2e 31 31 20 7b 0a 20  ragma-8.2.11 {. 
6940: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
6950: 20 20 20 50 52 41 47 4d 41 20 6d 61 69 6e 2e 75     PRAGMA main.u
6960: 73 65 72 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 20  ser_version;.   
6970: 20 7d 0a 20 20 7d 20 7b 31 31 7d 0a 20 20 64 6f   }.  } {11}.  do
6980: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 32  _test pragma-8.2
6990: 2e 31 32 20 7b 0a 20 20 20 20 65 78 65 63 73 71  .12 {.    execsq
69a0: 6c 20 7b 0a 20 20 20 20 20 20 52 4f 4c 4c 42 41  l {.      ROLLBA
69b0: 43 4b 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41  CK;.      PRAGMA
69c0: 20 61 75 78 2e 75 73 65 72 5f 76 65 72 73 69 6f   aux.user_versio
69d0: 6e 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 33 7d  n;.    }.  } {3}
69e0: 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .  do_test pragm
69f0: 61 2d 38 2e 32 2e 31 33 20 7b 0a 20 20 20 20 65  a-8.2.13 {.    e
6a00: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50  xecsql {.      P
6a10: 52 41 47 4d 41 20 6d 61 69 6e 2e 75 73 65 72 5f  RAGMA main.user_
6a20: 76 65 72 73 69 6f 6e 3b 0a 20 20 20 20 7d 0a 20  version;.    }. 
6a30: 20 7d 20 7b 32 7d 0a 7d 0a 0a 23 20 54 72 79 20   } {2}.}..# Try 
6a40: 61 20 6e 65 67 61 74 69 76 65 20 76 61 6c 75 65  a negative value
6a50: 20 66 6f 72 20 74 68 65 20 75 73 65 72 2d 76 65   for the user-ve
6a60: 72 73 69 6f 6e 0a 64 6f 5f 74 65 73 74 20 70 72  rsion.do_test pr
6a70: 61 67 6d 61 2d 38 2e 32 2e 31 34 20 7b 0a 20 20  agma-8.2.14 {.  
6a80: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52  execsql {.    PR
6a90: 41 47 4d 41 20 75 73 65 72 5f 76 65 72 73 69 6f  AGMA user_versio
6aa0: 6e 20 3d 20 2d 34 35 30 3b 0a 20 20 7d 0a 7d 20  n = -450;.  }.} 
6ab0: 7b 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  {}.do_test pragm
6ac0: 61 2d 38 2e 32 2e 31 35 20 7b 0a 20 20 65 78 65  a-8.2.15 {.  exe
6ad0: 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d  csql {.    PRAGM
6ae0: 41 20 75 73 65 72 5f 76 65 72 73 69 6f 6e 3b 0a  A user_version;.
6af0: 20 20 7d 0a 7d 20 7b 2d 34 35 30 7d 0a 7d 20 3b    }.} {-450}.} ;
6b00: 20 23 20 69 66 63 61 70 61 62 6c 65 20 73 63 68   # ifcapable sch
6b10: 65 6d 61 5f 76 65 72 73 69 6f 6e 0a 0a 23 20 43  ema_version..# C
6b20: 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 54  heck to see if T
6b30: 45 4d 50 5f 53 54 4f 52 45 20 69 73 20 6d 65 6d  EMP_STORE is mem
6b40: 6f 72 79 20 6f 72 20 64 69 73 6b 2e 20 20 52 65  ory or disk.  Re
6b50: 74 75 72 6e 20 73 74 72 69 6e 67 73 0a 23 20 22  turn strings.# "
6b60: 6d 65 6d 6f 72 79 22 20 6f 72 20 22 64 69 73 6b  memory" or "disk
6b70: 22 20 61 73 20 61 70 70 72 6f 70 72 69 61 74 65  " as appropriate
6b80: 2e 0a 23 0a 70 72 6f 63 20 63 68 65 63 6b 5f 74  ..#.proc check_t
6b90: 65 6d 70 5f 73 74 6f 72 65 20 7b 7d 20 7b 0a 20  emp_store {} {. 
6ba0: 20 64 62 20 65 76 61 6c 20 7b 43 52 45 41 54 45   db eval {CREATE
6bb0: 20 54 45 4d 50 20 54 41 42 4c 45 20 49 46 20 4e   TEMP TABLE IF N
6bc0: 4f 54 20 45 58 49 53 54 53 20 61 28 62 29 7d 0a  OT EXISTS a(b)}.
6bd0: 20 20 64 62 20 65 76 61 6c 20 7b 50 52 41 47 4d    db eval {PRAGM
6be0: 41 20 64 61 74 61 62 61 73 65 5f 6c 69 73 74 7d  A database_list}
6bf0: 20 7b 0a 20 20 20 20 69 66 20 7b 24 6e 61 6d 65   {.    if {$name
6c00: 3d 3d 22 74 65 6d 70 22 7d 20 7b 0a 20 20 20 20  =="temp"} {.    
6c10: 20 20 73 65 74 20 62 74 20 5b 62 74 72 65 65 5f    set bt [btree_
6c20: 66 72 6f 6d 5f 64 62 20 64 62 20 31 5d 0a 20 20  from_db db 1].  
6c30: 20 20 20 20 69 66 20 7b 5b 62 74 72 65 65 5f 69      if {[btree_i
6c40: 73 6d 65 6d 64 62 20 24 62 74 5d 7d 20 7b 0a 20  smemdb $bt]} {. 
6c50: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 22 6d         return "m
6c60: 65 6d 6f 72 79 22 0a 20 20 20 20 20 20 7d 0a 20  emory".      }. 
6c70: 20 20 20 20 20 72 65 74 75 72 6e 20 22 64 69 73       return "dis
6c80: 6b 22 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72  k".    }.  }.  r
6c90: 65 74 75 72 6e 20 22 75 6e 6b 6e 6f 77 6e 22 0a  eturn "unknown".
6ca0: 7d 0a 0a 23 20 41 70 70 6c 69 63 61 74 69 6f 6e  }..# Application
6cb0: 5f 49 44 0a 23 0a 64 6f 5f 74 65 73 74 20 70 72  _ID.#.do_test pr
6cc0: 61 67 6d 61 2d 38 2e 33 2e 31 20 7b 0a 20 20 65  agma-8.3.1 {.  e
6cd0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41  xecsql {.    PRA
6ce0: 47 4d 41 20 61 70 70 6c 69 63 61 74 69 6f 6e 5f  GMA application_
6cf0: 69 64 3b 0a 20 20 7d 0a 7d 20 7b 30 7d 0a 64 6f  id;.  }.} {0}.do
6d00: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 33  _test pragma-8.3
6d10: 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .2 {.  execsql {
6d20: 50 52 41 47 4d 41 20 41 70 70 6c 69 63 61 74 69  PRAGMA Applicati
6d30: 6f 6e 5f 49 44 28 31 32 33 34 35 29 3b 20 50 52  on_ID(12345); PR
6d40: 41 47 4d 41 20 61 70 70 6c 69 63 61 74 69 6f 6e  AGMA application
6d50: 5f 69 64 3b 7d 0a 7d 20 7b 31 32 33 34 35 7d 0a  _id;}.} {12345}.
6d60: 0a 23 20 54 65 73 74 20 74 65 6d 70 5f 73 74 6f  .# Test temp_sto
6d70: 72 65 20 61 6e 64 20 74 65 6d 70 5f 73 74 6f 72  re and temp_stor
6d80: 65 5f 64 69 72 65 63 74 6f 72 79 20 70 72 61 67  e_directory prag
6d90: 6d 61 73 0a 23 0a 69 66 63 61 70 61 62 6c 65 20  mas.#.ifcapable 
6da0: 70 61 67 65 72 5f 70 72 61 67 6d 61 73 20 7b 0a  pager_pragmas {.
6db0: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 39  do_test pragma-9
6dc0: 2e 31 20 7b 0a 20 20 64 62 20 63 6c 6f 73 65 0a  .1 {.  db close.
6dd0: 20 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73    sqlite3 db tes
6de0: 74 2e 64 62 0a 20 20 65 78 65 63 73 71 6c 20 7b  t.db.  execsql {
6df0: 0a 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70  .    PRAGMA temp
6e00: 5f 73 74 6f 72 65 3b 0a 20 20 7d 0a 7d 20 7b 30  _store;.  }.} {0
6e10: 7d 0a 69 66 20 7b 24 54 45 4d 50 5f 53 54 4f 52  }.if {$TEMP_STOR
6e20: 45 3c 3d 31 7d 20 7b 0a 20 20 64 6f 5f 74 65 73  E<=1} {.  do_tes
6e30: 74 20 70 72 61 67 6d 61 2d 39 2e 31 2e 31 20 7b  t pragma-9.1.1 {
6e40: 0a 20 20 20 20 63 68 65 63 6b 5f 74 65 6d 70 5f  .    check_temp_
6e50: 73 74 6f 72 65 0a 20 20 7d 20 7b 64 69 73 6b 7d  store.  } {disk}
6e60: 0a 7d 20 65 6c 73 65 20 7b 0a 20 20 64 6f 5f 74  .} else {.  do_t
6e70: 65 73 74 20 70 72 61 67 6d 61 2d 39 2e 31 2e 31  est pragma-9.1.1
6e80: 20 7b 0a 20 20 20 20 63 68 65 63 6b 5f 74 65 6d   {.    check_tem
6e90: 70 5f 73 74 6f 72 65 0a 20 20 7d 20 7b 6d 65 6d  p_store.  } {mem
6ea0: 6f 72 79 7d 0a 7d 0a 0a 64 6f 5f 74 65 73 74 20  ory}.}..do_test 
6eb0: 70 72 61 67 6d 61 2d 39 2e 32 20 7b 0a 20 20 64  pragma-9.2 {.  d
6ec0: 62 20 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74 65  b close.  sqlite
6ed0: 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20 65  3 db test.db.  e
6ee0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41  xecsql {.    PRA
6ef0: 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 3d 66  GMA temp_store=f
6f00: 69 6c 65 3b 0a 20 20 20 20 50 52 41 47 4d 41 20  ile;.    PRAGMA 
6f10: 74 65 6d 70 5f 73 74 6f 72 65 3b 0a 20 20 7d 0a  temp_store;.  }.
6f20: 7d 20 7b 31 7d 0a 69 66 20 7b 24 54 45 4d 50 5f  } {1}.if {$TEMP_
6f30: 53 54 4f 52 45 3d 3d 33 7d 20 7b 0a 20 20 23 20  STORE==3} {.  # 
6f40: 57 68 65 6e 20 54 45 4d 50 5f 53 54 4f 52 45 20  When TEMP_STORE 
6f50: 69 73 20 33 2c 20 61 6c 77 61 79 73 20 75 73 65  is 3, always use
6f60: 20 6d 65 6d 6f 72 79 20 72 65 67 61 72 64 6c 65   memory regardle
6f70: 73 73 20 6f 66 20 70 72 61 67 6d 61 20 73 65 74  ss of pragma set
6f80: 74 69 6e 67 73 2e 0a 20 20 64 6f 5f 74 65 73 74  tings..  do_test
6f90: 20 70 72 61 67 6d 61 2d 39 2e 32 2e 31 20 7b 0a   pragma-9.2.1 {.
6fa0: 20 20 20 20 63 68 65 63 6b 5f 74 65 6d 70 5f 73      check_temp_s
6fb0: 74 6f 72 65 0a 20 20 7d 20 7b 6d 65 6d 6f 72 79  tore.  } {memory
6fc0: 7d 0a 7d 20 65 6c 73 65 20 7b 0a 20 20 64 6f 5f  }.} else {.  do_
6fd0: 74 65 73 74 20 70 72 61 67 6d 61 2d 39 2e 32 2e  test pragma-9.2.
6fe0: 31 20 7b 0a 20 20 20 20 63 68 65 63 6b 5f 74 65  1 {.    check_te
6ff0: 6d 70 5f 73 74 6f 72 65 0a 20 20 7d 20 7b 64 69  mp_store.  } {di
7000: 73 6b 7d 0a 7d 0a 0a 64 6f 5f 74 65 73 74 20 70  sk}.}..do_test p
7010: 72 61 67 6d 61 2d 39 2e 33 20 7b 0a 20 20 64 62  ragma-9.3 {.  db
7020: 20 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74 65 33   close.  sqlite3
7030: 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20 65 78   db test.db.  ex
7040: 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47  ecsql {.    PRAG
7050: 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 3d 6d 65  MA temp_store=me
7060: 6d 6f 72 79 3b 0a 20 20 20 20 50 52 41 47 4d 41  mory;.    PRAGMA
7070: 20 74 65 6d 70 5f 73 74 6f 72 65 3b 0a 20 20 7d   temp_store;.  }
7080: 0a 7d 20 7b 32 7d 0a 69 66 20 7b 24 54 45 4d 50  .} {2}.if {$TEMP
7090: 5f 53 54 4f 52 45 3d 3d 30 7d 20 7b 0a 20 20 23  _STORE==0} {.  #
70a0: 20 57 68 65 6e 20 54 45 4d 50 5f 53 54 4f 52 45   When TEMP_STORE
70b0: 20 69 73 20 30 2c 20 61 6c 77 61 79 73 20 75 73   is 0, always us
70c0: 65 20 74 68 65 20 64 69 73 6b 20 72 65 67 61 72  e the disk regar
70d0: 64 6c 65 73 73 20 6f 66 20 70 72 61 67 6d 61 20  dless of pragma 
70e0: 73 65 74 74 69 6e 67 73 2e 0a 20 20 64 6f 5f 74  settings..  do_t
70f0: 65 73 74 20 70 72 61 67 6d 61 2d 39 2e 33 2e 31  est pragma-9.3.1
7100: 20 7b 0a 20 20 20 20 63 68 65 63 6b 5f 74 65 6d   {.    check_tem
7110: 70 5f 73 74 6f 72 65 0a 20 20 7d 20 7b 64 69 73  p_store.  } {dis
7120: 6b 7d 0a 7d 20 65 6c 73 65 20 7b 0a 20 20 64 6f  k}.} else {.  do
7130: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 39 2e 33  _test pragma-9.3
7140: 2e 31 20 7b 0a 20 20 20 20 63 68 65 63 6b 5f 74  .1 {.    check_t
7150: 65 6d 70 5f 73 74 6f 72 65 0a 20 20 7d 20 7b 6d  emp_store.  } {m
7160: 65 6d 6f 72 79 7d 0a 7d 0a 0a 64 6f 5f 74 65 73  emory}.}..do_tes
7170: 74 20 70 72 61 67 6d 61 2d 39 2e 34 20 7b 0a 20  t pragma-9.4 {. 
7180: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50   execsql {.    P
7190: 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65  RAGMA temp_store
71a0: 5f 64 69 72 65 63 74 6f 72 79 3b 0a 20 20 7d 0a  _directory;.  }.
71b0: 7d 20 7b 7d 0a 69 66 63 61 70 61 62 6c 65 20 77  } {}.ifcapable w
71c0: 73 64 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 70  sd {.  do_test p
71d0: 72 61 67 6d 61 2d 39 2e 35 20 7b 0a 20 20 20 20  ragma-9.5 {.    
71e0: 73 65 74 20 70 77 64 20 5b 73 74 72 69 6e 67 20  set pwd [string 
71f0: 6d 61 70 20 7b 27 20 27 27 7d 20 5b 66 69 6c 65  map {' ''} [file
7200: 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 67 65 74   nativename [get
7210: 5f 70 77 64 5d 5d 5d 0a 20 20 20 20 65 78 65 63  _pwd]]].    exec
7220: 73 71 6c 20 22 0a 20 20 20 20 20 20 50 52 41 47  sql ".      PRAG
7230: 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69  MA temp_store_di
7240: 72 65 63 74 6f 72 79 3d 27 24 70 77 64 27 3b 0a  rectory='$pwd';.
7250: 20 20 20 20 22 0a 20 20 7d 20 7b 7d 0a 20 20 64      ".  } {}.  d
7260: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 39 2e  o_test pragma-9.
7270: 36 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  6 {.    execsql 
7280: 7b 20 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20  { .      PRAGMA 
7290: 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63  temp_store_direc
72a0: 74 6f 72 79 3b 0a 20 20 20 20 7d 0a 20 20 7d 20  tory;.    }.  } 
72b0: 5b 6c 69 73 74 20 5b 66 69 6c 65 20 6e 61 74 69  [list [file nati
72c0: 76 65 6e 61 6d 65 20 5b 67 65 74 5f 70 77 64 5d  vename [get_pwd]
72d0: 5d 5d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61  ]].  do_test pra
72e0: 67 6d 61 2d 39 2e 37 20 7b 0a 20 20 20 20 63 61  gma-9.7 {.    ca
72f0: 74 63 68 73 71 6c 20 7b 20 0a 20 20 20 20 20 20  tchsql { .      
7300: 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72  PRAGMA temp_stor
7310: 65 5f 64 69 72 65 63 74 6f 72 79 3d 27 2f 4e 4f  e_directory='/NO
7320: 4e 2f 45 58 49 53 54 45 4e 54 2f 50 41 54 48 2f  N/EXISTENT/PATH/
7330: 46 4f 4f 42 41 52 27 3b 0a 20 20 20 20 7d 0a 20  FOOBAR';.    }. 
7340: 20 7d 20 7b 31 20 7b 6e 6f 74 20 61 20 77 72 69   } {1 {not a wri
7350: 74 61 62 6c 65 20 64 69 72 65 63 74 6f 72 79 7d  table directory}
7360: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67  }.  do_test prag
7370: 6d 61 2d 39 2e 38 20 7b 0a 20 20 20 20 65 78 65  ma-9.8 {.    exe
7380: 63 73 71 6c 20 7b 20 0a 20 20 20 20 20 20 50 52  csql { .      PR
7390: 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 5f  AGMA temp_store_
73a0: 64 69 72 65 63 74 6f 72 79 3d 27 27 3b 0a 20 20  directory='';.  
73b0: 20 20 7d 0a 20 20 7d 20 7b 7d 0a 20 20 69 66 20    }.  } {}.  if 
73c0: 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 54  {![info exists T
73d0: 45 4d 50 5f 53 54 4f 52 45 5d 20 7c 7c 20 24 54  EMP_STORE] || $T
73e0: 45 4d 50 5f 53 54 4f 52 45 3c 3d 31 7d 20 7b 0a  EMP_STORE<=1} {.
73f0: 20 20 20 20 69 66 63 61 70 61 62 6c 65 20 74 65      ifcapable te
7400: 6d 70 64 62 20 7b 0a 20 20 20 20 20 20 64 6f 5f  mpdb {.      do_
7410: 74 65 73 74 20 70 72 61 67 6d 61 2d 39 2e 39 20  test pragma-9.9 
7420: 7b 0a 20 20 20 20 20 20 20 20 65 78 65 63 73 71  {.        execsq
7430: 6c 20 7b 20 0a 20 20 20 20 20 20 20 20 20 20 50  l { .          P
7440: 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65  RAGMA temp_store
7450: 5f 64 69 72 65 63 74 6f 72 79 3b 0a 20 20 20 20  _directory;.    
7460: 20 20 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d        PRAGMA tem
7470: 70 5f 73 74 6f 72 65 3d 46 49 4c 45 3b 0a 20 20  p_store=FILE;.  
7480: 20 20 20 20 20 20 20 20 43 52 45 41 54 45 20 54          CREATE T
7490: 45 4d 50 20 54 41 42 4c 45 20 74 65 6d 70 5f 73  EMP TABLE temp_s
74a0: 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 5f 74  tore_directory_t
74b0: 65 73 74 28 61 20 69 6e 74 65 67 65 72 29 3b 0a  est(a integer);.
74c0: 20 20 20 20 20 20 20 20 20 20 49 4e 53 45 52 54            INSERT
74d0: 20 49 4e 54 4f 20 74 65 6d 70 5f 73 74 6f 72 65   INTO temp_store
74e0: 5f 64 69 72 65 63 74 6f 72 79 5f 74 65 73 74 20  _directory_test 
74f0: 76 61 6c 75 65 73 20 28 32 29 3b 0a 20 20 20 20  values (2);.    
7500: 20 20 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46        SELECT * F
7510: 52 4f 4d 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64  ROM temp_store_d
7520: 69 72 65 63 74 6f 72 79 5f 74 65 73 74 3b 0a 20  irectory_test;. 
7530: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
7540: 20 7b 32 7d 0a 20 20 20 20 20 20 64 6f 5f 74 65   {2}.      do_te
7550: 73 74 20 70 72 61 67 6d 61 2d 39 2e 31 30 20 7b  st pragma-9.10 {
7560: 0a 20 20 20 20 20 20 20 20 63 61 74 63 68 73 71  .        catchsq
7570: 6c 20 22 0a 20 20 20 20 20 20 20 20 20 20 50 52  l ".          PR
7580: 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 5f  AGMA temp_store_
7590: 64 69 72 65 63 74 6f 72 79 3d 27 24 70 77 64 27  directory='$pwd'
75a0: 3b 0a 20 20 20 20 20 20 20 20 20 20 53 45 4c 45  ;.          SELE
75b0: 43 54 20 2a 20 46 52 4f 4d 20 74 65 6d 70 5f 73  CT * FROM temp_s
75c0: 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 5f 74  tore_directory_t
75d0: 65 73 74 3b 0a 20 20 20 20 20 20 20 20 22 0a 20  est;.        ". 
75e0: 20 20 20 20 20 7d 20 7b 31 20 7b 6e 6f 20 73 75       } {1 {no su
75f0: 63 68 20 74 61 62 6c 65 3a 20 74 65 6d 70 5f 73  ch table: temp_s
7600: 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 5f 74  tore_directory_t
7610: 65 73 74 7d 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a  est}}.    }.  }.
7620: 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  }.do_test pragma
7630: 2d 39 2e 31 31 20 7b 0a 20 20 65 78 65 63 73 71  -9.11 {.  execsq
7640: 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 74  l {.    PRAGMA t
7650: 65 6d 70 5f 73 74 6f 72 65 20 3d 20 30 3b 0a 20  emp_store = 0;. 
7660: 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73     PRAGMA temp_s
7670: 74 6f 72 65 3b 0a 20 20 7d 0a 7d 20 7b 30 7d 0a  tore;.  }.} {0}.
7680: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 39  do_test pragma-9
7690: 2e 31 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  .12 {.  execsql 
76a0: 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d  {.    PRAGMA tem
76b0: 70 5f 73 74 6f 72 65 20 3d 20 31 3b 0a 20 20 20  p_store = 1;.   
76c0: 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f   PRAGMA temp_sto
76d0: 72 65 3b 0a 20 20 7d 0a 7d 20 7b 31 7d 0a 64 6f  re;.  }.} {1}.do
76e0: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 39 2e 31  _test pragma-9.1
76f0: 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  3 {.  execsql {.
7700: 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f      PRAGMA temp_
7710: 73 74 6f 72 65 20 3d 20 32 3b 0a 20 20 20 20 50  store = 2;.    P
7720: 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65  RAGMA temp_store
7730: 3b 0a 20 20 7d 0a 7d 20 7b 32 7d 0a 64 6f 5f 74  ;.  }.} {2}.do_t
7740: 65 73 74 20 70 72 61 67 6d 61 2d 39 2e 31 34 20  est pragma-9.14 
7750: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
7760: 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74    PRAGMA temp_st
7770: 6f 72 65 20 3d 20 33 3b 0a 20 20 20 20 50 52 41  ore = 3;.    PRA
7780: 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 3b 0a  GMA temp_store;.
7790: 20 20 7d 0a 7d 20 7b 30 7d 0a 64 6f 5f 74 65 73    }.} {0}.do_tes
77a0: 74 20 70 72 61 67 6d 61 2d 39 2e 31 35 20 7b 0a  t pragma-9.15 {.
77b0: 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20    catchsql {.   
77c0: 20 42 45 47 49 4e 20 45 58 43 4c 55 53 49 56 45   BEGIN EXCLUSIVE
77d0: 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54 45 4d  ;.    CREATE TEM
77e0: 50 20 54 41 42 4c 45 20 74 65 6d 70 5f 74 61 62  P TABLE temp_tab
77f0: 6c 65 28 74 29 3b 0a 20 20 20 20 49 4e 53 45 52  le(t);.    INSER
7800: 54 20 49 4e 54 4f 20 74 65 6d 70 5f 74 61 62 6c  T INTO temp_tabl
7810: 65 20 56 41 4c 55 45 53 28 27 76 61 6c 75 61 62  e VALUES('valuab
7820: 6c 65 20 64 61 74 61 27 29 3b 0a 20 20 20 20 50  le data');.    P
7830: 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65  RAGMA temp_store
7840: 20 3d 20 31 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b   = 1;.  }.} {1 {
7850: 74 65 6d 70 6f 72 61 72 79 20 73 74 6f 72 61 67  temporary storag
7860: 65 20 63 61 6e 6e 6f 74 20 62 65 20 63 68 61 6e  e cannot be chan
7870: 67 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20  ged from within 
7880: 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 7d 7d 0a  a transaction}}.
7890: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 39  do_test pragma-9
78a0: 2e 31 36 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  .16 {.  execsql 
78b0: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  {.    SELECT * F
78c0: 52 4f 4d 20 74 65 6d 70 5f 74 61 62 6c 65 3b 0a  ROM temp_table;.
78d0: 20 20 20 20 43 4f 4d 4d 49 54 3b 0a 20 20 7d 0a      COMMIT;.  }.
78e0: 7d 20 7b 7b 76 61 6c 75 61 62 6c 65 20 64 61 74  } {{valuable dat
78f0: 61 7d 7d 0a 0a 64 6f 5f 74 65 73 74 20 70 72 61  a}}..do_test pra
7900: 67 6d 61 2d 39 2e 31 37 20 7b 0a 20 20 65 78 65  gma-9.17 {.  exe
7910: 63 73 71 6c 20 7b 0a 20 20 20 20 49 4e 53 45 52  csql {.    INSER
7920: 54 20 49 4e 54 4f 20 74 65 6d 70 5f 74 61 62 6c  T INTO temp_tabl
7930: 65 20 56 41 4c 55 45 53 28 27 76 61 6c 75 61 62  e VALUES('valuab
7940: 6c 65 20 64 61 74 61 20 49 49 27 29 3b 0a 20 20  le data II');.  
7950: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
7960: 74 65 6d 70 5f 74 61 62 6c 65 3b 0a 20 20 7d 0a  temp_table;.  }.
7970: 7d 20 7b 7b 76 61 6c 75 61 62 6c 65 20 64 61 74  } {{valuable dat
7980: 61 7d 20 7b 76 61 6c 75 61 62 6c 65 20 64 61 74  a} {valuable dat
7990: 61 20 49 49 7d 7d 0a 0a 64 6f 5f 74 65 73 74 20  a II}}..do_test 
79a0: 70 72 61 67 6d 61 2d 39 2e 31 38 20 7b 0a 20 20  pragma-9.18 {.  
79b0: 73 65 74 20 72 63 20 5b 63 61 74 63 68 20 7b 0a  set rc [catch {.
79c0: 20 20 20 20 64 62 20 65 76 61 6c 20 7b 53 45 4c      db eval {SEL
79d0: 45 43 54 20 74 20 46 52 4f 4d 20 74 65 6d 70 5f  ECT t FROM temp_
79e0: 74 61 62 6c 65 7d 20 7b 0a 20 20 20 20 20 20 65  table} {.      e
79f0: 78 65 63 73 71 6c 20 7b 70 72 61 67 6d 61 20 74  xecsql {pragma t
7a00: 65 6d 70 5f 73 74 6f 72 65 20 3d 20 31 7d 0a 20  emp_store = 1}. 
7a10: 20 20 20 7d 0a 20 20 7d 20 6d 73 67 5d 0a 20 20     }.  } msg].  
7a20: 6c 69 73 74 20 24 72 63 20 24 6d 73 67 0a 7d 20  list $rc $msg.} 
7a30: 7b 31 20 7b 74 65 6d 70 6f 72 61 72 79 20 73 74  {1 {temporary st
7a40: 6f 72 61 67 65 20 63 61 6e 6e 6f 74 20 62 65 20  orage cannot be 
7a50: 63 68 61 6e 67 65 64 20 66 72 6f 6d 20 77 69 74  changed from wit
7a60: 68 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f  hin a transactio
7a70: 6e 7d 7d 0a 0a 7d 20 3b 23 20 69 66 63 61 70 61  n}}..} ;# ifcapa
7a80: 62 6c 65 20 70 61 67 65 72 5f 70 72 61 67 6d 61  ble pager_pragma
7a90: 73 0a 0a 69 66 63 61 70 61 62 6c 65 20 74 72 69  s..ifcapable tri
7aa0: 67 67 65 72 20 7b 0a 0a 64 6f 5f 74 65 73 74 20  gger {..do_test 
7ab0: 70 72 61 67 6d 61 2d 31 30 2e 30 20 7b 0a 20 20  pragma-10.0 {.  
7ac0: 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 44  catchsql {.    D
7ad0: 52 4f 50 20 54 41 42 4c 45 20 6d 61 69 6e 2e 74  ROP TABLE main.t
7ae0: 31 3b 0a 20 20 7d 0a 20 20 65 78 65 63 73 71 6c  1;.  }.  execsql
7af0: 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 63 6f   {.    PRAGMA co
7b00: 75 6e 74 5f 63 68 61 6e 67 65 73 20 3d 20 31 3b  unt_changes = 1;
7b10: 0a 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42  ..    CREATE TAB
7b20: 4c 45 20 74 31 28 61 20 50 52 49 4d 41 52 59 20  LE t1(a PRIMARY 
7b30: 4b 45 59 29 3b 0a 20 20 20 20 43 52 45 41 54 45  KEY);.    CREATE
7b40: 20 54 41 42 4c 45 20 74 31 5f 6d 69 72 72 6f 72   TABLE t1_mirror
7b50: 28 61 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20  (a);.    CREATE 
7b60: 54 41 42 4c 45 20 74 31 5f 6d 69 72 72 6f 72 32  TABLE t1_mirror2
7b70: 28 61 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20  (a);.    CREATE 
7b80: 54 52 49 47 47 45 52 20 74 31 5f 62 69 20 42 45  TRIGGER t1_bi BE
7b90: 46 4f 52 45 20 49 4e 53 45 52 54 20 4f 4e 20 74  FORE INSERT ON t
7ba0: 31 20 42 45 47 49 4e 20 0a 20 20 20 20 20 20 49  1 BEGIN .      I
7bb0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 5f 6d 69  NSERT INTO t1_mi
7bc0: 72 72 6f 72 20 56 41 4c 55 45 53 28 6e 65 77 2e  rror VALUES(new.
7bd0: 61 29 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20 20  a);.    END;.   
7be0: 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20   CREATE TRIGGER 
7bf0: 74 31 5f 61 69 20 41 46 54 45 52 20 49 4e 53 45  t1_ai AFTER INSE
7c00: 52 54 20 4f 4e 20 74 31 20 42 45 47 49 4e 20 0a  RT ON t1 BEGIN .
7c10: 20 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54        INSERT INT
7c20: 4f 20 74 31 5f 6d 69 72 72 6f 72 32 20 56 41 4c  O t1_mirror2 VAL
7c30: 55 45 53 28 6e 65 77 2e 61 29 3b 0a 20 20 20 20  UES(new.a);.    
7c40: 45 4e 44 3b 0a 20 20 20 20 43 52 45 41 54 45 20  END;.    CREATE 
7c50: 54 52 49 47 47 45 52 20 74 31 5f 62 75 20 42 45  TRIGGER t1_bu BE
7c60: 46 4f 52 45 20 55 50 44 41 54 45 20 4f 4e 20 74  FORE UPDATE ON t
7c70: 31 20 42 45 47 49 4e 20 0a 20 20 20 20 20 20 55  1 BEGIN .      U
7c80: 50 44 41 54 45 20 74 31 5f 6d 69 72 72 6f 72 20  PDATE t1_mirror 
7c90: 53 45 54 20 61 20 3d 20 6e 65 77 2e 61 20 57 48  SET a = new.a WH
7ca0: 45 52 45 20 61 20 3d 20 6f 6c 64 2e 61 3b 0a 20  ERE a = old.a;. 
7cb0: 20 20 20 45 4e 44 3b 0a 20 20 20 20 43 52 45 41     END;.    CREA
7cc0: 54 45 20 54 52 49 47 47 45 52 20 74 31 5f 61 75  TE TRIGGER t1_au
7cd0: 20 41 46 54 45 52 20 55 50 44 41 54 45 20 4f 4e   AFTER UPDATE ON
7ce0: 20 74 31 20 42 45 47 49 4e 20 0a 20 20 20 20 20   t1 BEGIN .     
7cf0: 20 55 50 44 41 54 45 20 74 31 5f 6d 69 72 72 6f   UPDATE t1_mirro
7d00: 72 32 20 53 45 54 20 61 20 3d 20 6e 65 77 2e 61  r2 SET a = new.a
7d10: 20 57 48 45 52 45 20 61 20 3d 20 6f 6c 64 2e 61   WHERE a = old.a
7d20: 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20 20 20 43  ;.    END;.    C
7d30: 52 45 41 54 45 20 54 52 49 47 47 45 52 20 74 31  REATE TRIGGER t1
7d40: 5f 62 64 20 42 45 46 4f 52 45 20 44 45 4c 45 54  _bd BEFORE DELET
7d50: 45 20 4f 4e 20 74 31 20 42 45 47 49 4e 20 0a 20  E ON t1 BEGIN . 
7d60: 20 20 20 20 20 44 45 4c 45 54 45 20 46 52 4f 4d       DELETE FROM
7d70: 20 74 31 5f 6d 69 72 72 6f 72 20 57 48 45 52 45   t1_mirror WHERE
7d80: 20 61 20 3d 20 6f 6c 64 2e 61 3b 0a 20 20 20 20   a = old.a;.    
7d90: 45 4e 44 3b 0a 20 20 20 20 43 52 45 41 54 45 20  END;.    CREATE 
7da0: 54 52 49 47 47 45 52 20 74 31 5f 61 64 20 41 46  TRIGGER t1_ad AF
7db0: 54 45 52 20 44 45 4c 45 54 45 20 4f 4e 20 74 31  TER DELETE ON t1
7dc0: 20 42 45 47 49 4e 20 0a 20 20 20 20 20 20 44 45   BEGIN .      DE
7dd0: 4c 45 54 45 20 46 52 4f 4d 20 74 31 5f 6d 69 72  LETE FROM t1_mir
7de0: 72 6f 72 32 20 57 48 45 52 45 20 61 20 3d 20 6f  ror2 WHERE a = o
7df0: 6c 64 2e 61 3b 0a 20 20 20 20 45 4e 44 3b 0a 20  ld.a;.    END;. 
7e00: 20 7d 0a 7d 20 7b 7d 0a 0a 64 6f 5f 74 65 73 74   }.} {}..do_test
7e10: 20 70 72 61 67 6d 61 2d 31 30 2e 31 20 7b 0a 20   pragma-10.1 {. 
7e20: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 49   execsql {.    I
7e30: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41  NSERT INTO t1 VA
7e40: 4c 55 45 53 28 72 61 6e 64 73 74 72 28 31 30 2c  LUES(randstr(10,
7e50: 31 30 29 29 3b 0a 20 20 7d 0a 7d 20 7b 31 7d 0a  10));.  }.} {1}.
7e60: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31  do_test pragma-1
7e70: 30 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  0.2 {.  execsql 
7e80: 7b 0a 20 20 20 20 55 50 44 41 54 45 20 74 31 20  {.    UPDATE t1 
7e90: 53 45 54 20 61 20 3d 20 72 61 6e 64 73 74 72 28  SET a = randstr(
7ea0: 31 30 2c 31 30 29 3b 0a 20 20 7d 0a 7d 20 7b 31  10,10);.  }.} {1
7eb0: 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  }.do_test pragma
7ec0: 2d 31 30 2e 33 20 7b 0a 20 20 65 78 65 63 73 71  -10.3 {.  execsq
7ed0: 6c 20 7b 0a 20 20 20 20 44 45 4c 45 54 45 20 46  l {.    DELETE F
7ee0: 52 4f 4d 20 74 31 3b 0a 20 20 7d 0a 7d 20 7b 31  ROM t1;.  }.} {1
7ef0: 7d 0a 0a 7d 20 3b 23 20 69 66 63 61 70 61 62 6c  }..} ;# ifcapabl
7f00: 65 20 74 72 69 67 67 65 72 0a 0a 69 66 63 61 70  e trigger..ifcap
7f10: 61 62 6c 65 20 73 63 68 65 6d 61 5f 70 72 61 67  able schema_prag
7f20: 6d 61 73 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20  mas {.  do_test 
7f30: 70 72 61 67 6d 61 2d 31 31 2e 31 20 7b 0a 20 20  pragma-11.1 {.  
7f40: 20 20 65 78 65 63 73 71 6c 32 20 7b 0a 20 20 20    execsql2 {.   
7f50: 20 20 20 70 72 61 67 6d 61 20 63 6f 6c 6c 61 74     pragma collat
7f60: 69 6f 6e 5f 6c 69 73 74 3b 0a 20 20 20 20 7d 0a  ion_list;.    }.
7f70: 20 20 7d 20 7b 73 65 71 20 30 20 6e 61 6d 65 20    } {seq 0 name 
7f80: 52 54 52 49 4d 20 73 65 71 20 31 20 6e 61 6d 65  RTRIM seq 1 name
7f90: 20 4e 4f 43 41 53 45 20 73 65 71 20 32 20 6e 61   NOCASE seq 2 na
7fa0: 6d 65 20 42 49 4e 41 52 59 7d 0a 20 20 64 6f 5f  me BINARY}.  do_
7fb0: 74 65 73 74 20 70 72 61 67 6d 61 2d 31 31 2e 32  test pragma-11.2
7fc0: 20 7b 0a 20 20 20 20 64 62 20 63 6f 6c 6c 61 74   {.    db collat
7fd0: 65 20 4e 65 77 5f 43 6f 6c 6c 61 74 69 6f 6e 20  e New_Collation 
7fe0: 62 6c 61 68 2e 2e 2e 0a 20 20 20 20 65 78 65 63  blah....    exec
7ff0: 73 71 6c 20 7b 0a 20 20 20 20 20 20 70 72 61 67  sql {.      prag
8000: 6d 61 20 63 6f 6c 6c 61 74 69 6f 6e 5f 6c 69 73  ma collation_lis
8010: 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 30 20  t;.    }.  } {0 
8020: 4e 65 77 5f 43 6f 6c 6c 61 74 69 6f 6e 20 31 20  New_Collation 1 
8030: 52 54 52 49 4d 20 32 20 4e 4f 43 41 53 45 20 33  RTRIM 2 NOCASE 3
8040: 20 42 49 4e 41 52 59 7d 0a 7d 0a 0a 69 66 63 61   BINARY}.}..ifca
8050: 70 61 62 6c 65 20 73 63 68 65 6d 61 5f 70 72 61  pable schema_pra
8060: 67 6d 61 73 26 26 74 65 6d 70 64 62 20 7b 0a 20  gmas&&tempdb {. 
8070: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
8080: 31 32 2e 31 20 7b 0a 20 20 20 20 73 71 6c 69 74  12.1 {.    sqlit
8090: 65 33 20 64 62 32 20 74 65 73 74 2e 64 62 0a 20  e3 db2 test.db. 
80a0: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
80b0: 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 2e 74     PRAGMA temp.t
80c0: 61 62 6c 65 5f 69 6e 66 6f 28 27 61 62 63 27 29  able_info('abc')
80d0: 3b 0a 20 20 20 20 7d 20 64 62 32 0a 20 20 7d 20  ;.    } db2.  } 
80e0: 7b 7d 0a 20 20 64 62 32 20 63 6c 6f 73 65 0a 0a  {}.  db2 close..
80f0: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
8100: 2d 31 32 2e 32 20 7b 0a 20 20 20 20 73 71 6c 69  -12.2 {.    sqli
8110: 74 65 33 20 64 62 32 20 74 65 73 74 2e 64 62 0a  te3 db2 test.db.
8120: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20      execsql {.  
8130: 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 2e      PRAGMA temp.
8140: 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69  default_cache_si
8150: 7a 65 20 3d 20 32 30 30 3b 0a 20 20 20 20 20 20  ze = 200;.      
8160: 50 52 41 47 4d 41 20 74 65 6d 70 2e 64 65 66 61  PRAGMA temp.defa
8170: 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65 3b 0a  ult_cache_size;.
8180: 20 20 20 20 7d 20 64 62 32 0a 20 20 7d 20 7b 32      } db2.  } {2
8190: 30 30 7d 0a 20 20 64 62 32 20 63 6c 6f 73 65 0a  00}.  db2 close.
81a0: 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .  do_test pragm
81b0: 61 2d 31 32 2e 33 20 7b 0a 20 20 20 20 73 71 6c  a-12.3 {.    sql
81c0: 69 74 65 33 20 64 62 32 20 74 65 73 74 2e 64 62  ite3 db2 test.db
81d0: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
81e0: 20 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70       PRAGMA temp
81f0: 2e 63 61 63 68 65 5f 73 69 7a 65 20 3d 20 34 30  .cache_size = 40
8200: 30 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20  0;.      PRAGMA 
8210: 74 65 6d 70 2e 63 61 63 68 65 5f 73 69 7a 65 3b  temp.cache_size;
8220: 0a 20 20 20 20 7d 20 64 62 32 0a 20 20 7d 20 7b  .    } db2.  } {
8230: 34 30 30 7d 0a 20 20 64 62 32 20 63 6c 6f 73 65  400}.  db2 close
8240: 0a 7d 0a 0a 69 66 63 61 70 61 62 6c 65 20 62 6c  .}..ifcapable bl
8250: 6f 62 6c 69 74 20 7b 0a 0a 64 6f 5f 74 65 73 74  oblit {..do_test
8260: 20 70 72 61 67 6d 61 2d 31 33 2e 31 20 7b 0a 20   pragma-13.1 {. 
8270: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 44   execsql {.    D
8280: 52 4f 50 20 54 41 42 4c 45 20 49 46 20 45 58 49  ROP TABLE IF EXI
8290: 53 54 53 20 74 34 3b 0a 20 20 20 20 50 52 41 47  STS t4;.    PRAG
82a0: 4d 41 20 76 64 62 65 5f 74 72 61 63 65 3d 6f 6e  MA vdbe_trace=on
82b0: 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 76 64 62  ;.    PRAGMA vdb
82c0: 65 5f 6c 69 73 74 69 6e 67 3d 6f 6e 3b 0a 20 20  e_listing=on;.  
82d0: 20 20 50 52 41 47 4d 41 20 73 71 6c 5f 74 72 61    PRAGMA sql_tra
82e0: 63 65 3d 6f 6e 3b 0a 20 20 20 20 43 52 45 41 54  ce=on;.    CREAT
82f0: 45 20 54 41 42 4c 45 20 74 34 28 61 20 49 4e 54  E TABLE t4(a INT
8300: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
8310: 2c 62 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20  ,b);.    INSERT 
8320: 49 4e 54 4f 20 74 34 28 62 29 20 56 41 4c 55 45  INTO t4(b) VALUE
8330: 53 28 78 27 30 31 32 33 34 35 36 37 38 39 61 62  S(x'0123456789ab
8340: 63 64 65 66 30 31 32 33 34 35 36 37 38 39 61 62  cdef0123456789ab
8350: 63 64 65 66 30 31 32 33 34 35 36 37 38 39 27 29  cdef0123456789')
8360: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
8370: 4f 20 74 34 28 62 29 20 56 41 4c 55 45 53 28 72  O t4(b) VALUES(r
8380: 61 6e 64 73 74 72 28 33 30 2c 33 30 29 29 3b 0a  andstr(30,30));.
8390: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
83a0: 74 34 28 62 29 20 56 41 4c 55 45 53 28 31 2e 32  t4(b) VALUES(1.2
83b0: 33 34 35 36 29 3b 0a 20 20 20 20 49 4e 53 45 52  3456);.    INSER
83c0: 54 20 49 4e 54 4f 20 74 34 28 62 29 20 56 41 4c  T INTO t4(b) VAL
83d0: 55 45 53 28 4e 55 4c 4c 29 3b 0a 20 20 20 20 49  UES(NULL);.    I
83e0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 34 28 62 29  NSERT INTO t4(b)
83f0: 20 56 41 4c 55 45 53 28 30 29 3b 0a 20 20 20 20   VALUES(0);.    
8400: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 34 28 62  INSERT INTO t4(b
8410: 29 20 53 45 4c 45 43 54 20 62 7c 7c 62 7c 7c 62  ) SELECT b||b||b
8420: 7c 7c 62 20 46 52 4f 4d 20 74 34 3b 0a 20 20 20  ||b FROM t4;.   
8430: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
8440: 34 3b 0a 20 20 7d 0a 20 20 65 78 65 63 73 71 6c  4;.  }.  execsql
8450: 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 76 64   {.    PRAGMA vd
8460: 62 65 5f 74 72 61 63 65 3d 6f 66 66 3b 0a 20 20  be_trace=off;.  
8470: 20 20 50 52 41 47 4d 41 20 76 64 62 65 5f 6c 69    PRAGMA vdbe_li
8480: 73 74 69 6e 67 3d 6f 66 66 3b 0a 20 20 20 20 50  sting=off;.    P
8490: 52 41 47 4d 41 20 73 71 6c 5f 74 72 61 63 65 3d  RAGMA sql_trace=
84a0: 6f 66 66 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a 7d  off;.  }.} {}..}
84b0: 20 3b 23 20 69 66 63 61 70 61 62 6c 65 20 62 6c   ;# ifcapable bl
84c0: 6f 62 6c 69 74 20 0a 0a 69 66 63 61 70 61 62 6c  oblit ..ifcapabl
84d0: 65 20 70 61 67 65 72 5f 70 72 61 67 6d 61 73 20  e pager_pragmas 
84e0: 7b 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 66  {.  db close.  f
84f0: 6f 72 63 65 64 65 6c 65 74 65 20 74 65 73 74 2e  orcedelete test.
8500: 64 62 0a 20 20 73 71 6c 69 74 65 33 20 64 62 20  db.  sqlite3 db 
8510: 74 65 73 74 2e 64 62 0a 20 0a 20 20 23 20 45 56  test.db. .  # EV
8520: 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 31 35 36  IDENCE-OF: R-156
8530: 37 32 2d 33 33 36 31 31 20 50 52 41 47 4d 41 20  72-33611 PRAGMA 
8540: 73 63 68 65 6d 61 2e 70 61 67 65 5f 63 6f 75 6e  schema.page_coun
8550: 74 3b 20 52 65 74 75 72 6e 20 74 68 65 20 74 6f  t; Return the to
8560: 74 61 6c 0a 20 20 23 20 6e 75 6d 62 65 72 20 6f  tal.  # number o
8570: 66 20 70 61 67 65 73 20 69 6e 20 74 68 65 20 64  f pages in the d
8580: 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 20 20  atabase file..  
8590: 23 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67  #.  do_test prag
85a0: 6d 61 2d 31 34 2e 31 20 7b 0a 20 20 20 20 65 78  ma-14.1 {.    ex
85b0: 65 63 73 71 6c 20 7b 20 70 72 61 67 6d 61 20 61  ecsql { pragma a
85c0: 75 74 6f 5f 76 61 63 75 75 6d 20 3d 20 30 20 7d  uto_vacuum = 0 }
85d0: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 20 70  .    execsql { p
85e0: 72 61 67 6d 61 20 70 61 67 65 5f 63 6f 75 6e 74  ragma page_count
85f0: 3b 20 70 72 61 67 6d 61 20 6d 61 69 6e 2e 70 61  ; pragma main.pa
8600: 67 65 5f 63 6f 75 6e 74 20 7d 0a 20 20 7d 20 7b  ge_count }.  } {
8610: 30 20 30 7d 0a 0a 20 20 64 6f 5f 74 65 73 74 20  0 0}..  do_test 
8620: 70 72 61 67 6d 61 2d 31 34 2e 32 20 7b 0a 20 20  pragma-14.2 {.  
8630: 20 20 65 78 65 63 73 71 6c 20 7b 20 0a 20 20 20    execsql { .   
8640: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
8650: 61 62 63 28 61 2c 20 62 2c 20 63 29 3b 0a 20 20  abc(a, b, c);.  
8660: 20 20 20 20 50 52 41 47 4d 41 20 70 61 67 65 5f      PRAGMA page_
8670: 63 6f 75 6e 74 3b 0a 20 20 20 20 20 20 50 52 41  count;.      PRA
8680: 47 4d 41 20 6d 61 69 6e 2e 70 61 67 65 5f 63 6f  GMA main.page_co
8690: 75 6e 74 3b 0a 20 20 20 20 20 20 50 52 41 47 4d  unt;.      PRAGM
86a0: 41 20 74 65 6d 70 2e 70 61 67 65 5f 63 6f 75 6e  A temp.page_coun
86b0: 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 32 20  t;.    }.  } {2 
86c0: 32 20 30 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70  2 0}.  do_test p
86d0: 72 61 67 6d 61 2d 31 34 2e 32 75 63 20 7b 0a 20  ragma-14.2uc {. 
86e0: 20 20 20 65 78 65 63 73 71 6c 20 7b 70 72 61 67     execsql {prag
86f0: 6d 61 20 50 41 47 45 5f 43 4f 55 4e 54 7d 0a 20  ma PAGE_COUNT}. 
8700: 20 7d 20 7b 32 7d 0a 0a 20 20 64 6f 5f 74 65 73   } {2}..  do_tes
8710: 74 20 70 72 61 67 6d 61 2d 31 34 2e 33 20 7b 0a  t pragma-14.3 {.
8720: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 20 0a 20      execsql { . 
8730: 20 20 20 20 20 42 45 47 49 4e 3b 0a 20 20 20 20       BEGIN;.    
8740: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 64    CREATE TABLE d
8750: 65 66 28 61 2c 20 62 2c 20 63 29 3b 0a 20 20 20  ef(a, b, c);.   
8760: 20 20 20 50 52 41 47 4d 41 20 70 61 67 65 5f 63     PRAGMA page_c
8770: 6f 75 6e 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 20  ount;.    }.  } 
8780: 7b 33 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72  {3}.  do_test pr
8790: 61 67 6d 61 2d 31 34 2e 33 75 63 20 7b 0a 20 20  agma-14.3uc {.  
87a0: 20 20 65 78 65 63 73 71 6c 20 7b 70 72 61 67 6d    execsql {pragm
87b0: 61 20 50 41 47 45 5f 43 4f 55 4e 54 7d 0a 20 20  a PAGE_COUNT}.  
87c0: 7d 20 7b 33 7d 0a 0a 20 20 64 6f 5f 74 65 73 74  } {3}..  do_test
87d0: 20 70 72 61 67 6d 61 2d 31 34 2e 34 20 7b 0a 20   pragma-14.4 {. 
87e0: 20 20 20 73 65 74 20 70 61 67 65 5f 73 69 7a 65     set page_size
87f0: 20 5b 64 62 20 6f 6e 65 20 7b 70 72 61 67 6d 61   [db one {pragma
8800: 20 70 61 67 65 5f 73 69 7a 65 7d 5d 0a 20 20 20   page_size}].   
8810: 20 65 78 70 72 20 5b 66 69 6c 65 20 73 69 7a 65   expr [file size
8820: 20 74 65 73 74 2e 64 62 5d 20 2f 20 24 70 61 67   test.db] / $pag
8830: 65 5f 73 69 7a 65 0a 20 20 7d 20 7b 32 7d 0a 0a  e_size.  } {2}..
8840: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
8850: 2d 31 34 2e 35 20 7b 0a 20 20 20 20 65 78 65 63  -14.5 {.    exec
8860: 73 71 6c 20 7b 0a 20 20 20 20 20 20 52 4f 4c 4c  sql {.      ROLL
8870: 42 41 43 4b 3b 0a 20 20 20 20 20 20 50 52 41 47  BACK;.      PRAG
8880: 4d 41 20 70 61 67 65 5f 63 6f 75 6e 74 3b 0a 20  MA page_count;. 
8890: 20 20 20 7d 0a 20 20 7d 20 7b 32 7d 0a 0a 20 20     }.  } {2}..  
88a0: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31  do_test pragma-1
88b0: 34 2e 36 20 7b 0a 20 20 20 20 66 6f 72 63 65 64  4.6 {.    forced
88c0: 65 6c 65 74 65 20 74 65 73 74 32 2e 64 62 0a 20  elete test2.db. 
88d0: 20 20 20 73 71 6c 69 74 65 33 20 64 62 32 20 74     sqlite3 db2 t
88e0: 65 73 74 32 2e 64 62 0a 20 20 20 20 65 78 65 63  est2.db.    exec
88f0: 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47  sql {.      PRAG
8900: 4d 41 20 61 75 74 6f 5f 76 61 63 75 75 6d 20 3d  MA auto_vacuum =
8910: 20 30 3b 0a 20 20 20 20 20 20 43 52 45 41 54 45   0;.      CREATE
8920: 20 54 41 42 4c 45 20 74 31 28 61 2c 20 62 2c 20   TABLE t1(a, b, 
8930: 63 29 3b 0a 20 20 20 20 20 20 43 52 45 41 54 45  c);.      CREATE
8940: 20 54 41 42 4c 45 20 74 32 28 61 2c 20 62 2c 20   TABLE t2(a, b, 
8950: 63 29 3b 0a 20 20 20 20 20 20 43 52 45 41 54 45  c);.      CREATE
8960: 20 54 41 42 4c 45 20 74 33 28 61 2c 20 62 2c 20   TABLE t3(a, b, 
8970: 63 29 3b 0a 20 20 20 20 20 20 43 52 45 41 54 45  c);.      CREATE
8980: 20 54 41 42 4c 45 20 74 34 28 61 2c 20 62 2c 20   TABLE t4(a, b, 
8990: 63 29 3b 0a 20 20 20 20 7d 20 64 62 32 0a 20 20  c);.    } db2.  
89a0: 20 20 64 62 32 20 63 6c 6f 73 65 0a 20 20 20 20    db2 close.    
89b0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
89c0: 41 54 54 41 43 48 20 27 74 65 73 74 32 2e 64 62  ATTACH 'test2.db
89d0: 27 20 41 53 20 61 75 78 3b 0a 20 20 20 20 20 20  ' AS aux;.      
89e0: 50 52 41 47 4d 41 20 61 75 78 2e 70 61 67 65 5f  PRAGMA aux.page_
89f0: 63 6f 75 6e 74 3b 0a 20 20 20 20 7d 20 0a 20 20  count;.    } .  
8a00: 7d 20 7b 35 7d 0a 20 20 64 6f 5f 74 65 73 74 20  } {5}.  do_test 
8a10: 70 72 61 67 6d 61 2d 31 34 2e 36 75 63 20 7b 0a  pragma-14.6uc {.
8a20: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 70 72 61      execsql {pra
8a30: 67 6d 61 20 41 55 58 2e 50 41 47 45 5f 43 4f 55  gma AUX.PAGE_COU
8a40: 4e 54 7d 0a 20 20 7d 20 7b 35 7d 0a 7d 0a 0a 23  NT}.  } {5}.}..#
8a50: 20 54 65 73 74 20 74 68 61 74 20 74 68 65 20 76   Test that the v
8a60: 61 6c 75 65 20 73 65 74 20 75 73 69 6e 67 20 74  alue set using t
8a70: 68 65 20 63 61 63 68 65 5f 73 69 7a 65 20 70 72  he cache_size pr
8a80: 61 67 6d 61 20 69 73 20 6e 6f 74 20 72 65 73 65  agma is not rese
8a90: 74 20 77 68 65 6e 20 74 68 65 0a 23 20 73 63 68  t when the.# sch
8aa0: 65 6d 61 20 69 73 20 72 65 6c 6f 61 64 65 64 2e  ema is reloaded.
8ab0: 0a 23 0a 69 66 63 61 70 61 62 6c 65 20 70 61 67  .#.ifcapable pag
8ac0: 65 72 5f 70 72 61 67 6d 61 73 20 7b 0a 20 20 64  er_pragmas {.  d
8ad0: 62 20 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74 65  b close.  sqlite
8ae0: 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20 64  3 db test.db.  d
8af0: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 35  o_test pragma-15
8b00: 2e 31 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  .1 {.    execsql
8b10: 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20   {.      PRAGMA 
8b20: 63 61 63 68 65 5f 73 69 7a 65 3d 35 39 3b 0a 20  cache_size=59;. 
8b30: 20 20 20 20 20 50 52 41 47 4d 41 20 63 61 63 68       PRAGMA cach
8b40: 65 5f 73 69 7a 65 3b 0a 20 20 20 20 7d 0a 20 20  e_size;.    }.  
8b50: 7d 20 7b 35 39 7d 0a 20 20 64 6f 5f 74 65 73 74  } {59}.  do_test
8b60: 20 70 72 61 67 6d 61 2d 31 35 2e 32 20 7b 0a 20   pragma-15.2 {. 
8b70: 20 20 20 73 71 6c 69 74 65 33 20 64 62 32 20 74     sqlite3 db2 t
8b80: 65 73 74 2e 64 62 0a 20 20 20 20 65 78 65 63 73  est.db.    execs
8b90: 71 6c 20 7b 0a 20 20 20 20 20 20 43 52 45 41 54  ql {.      CREAT
8ba0: 45 20 54 41 42 4c 45 20 6e 65 77 74 61 62 6c 65  E TABLE newtable
8bb0: 28 61 2c 20 62 2c 20 63 29 3b 0a 20 20 20 20 7d  (a, b, c);.    }
8bc0: 20 64 62 32 0a 20 20 20 20 64 62 32 20 63 6c 6f   db2.    db2 clo
8bd0: 73 65 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74  se.  } {}.  do_t
8be0: 65 73 74 20 70 72 61 67 6d 61 2d 31 35 2e 33 20  est pragma-15.3 
8bf0: 7b 0a 20 20 20 20 23 20 45 76 61 6c 75 61 74 69  {.    # Evaluati
8c00: 6e 67 20 74 68 69 73 20 73 74 61 74 65 6d 65 6e  ng this statemen
8c10: 74 20 77 69 6c 6c 20 63 61 75 73 65 20 74 68 65  t will cause the
8c20: 20 73 63 68 65 6d 61 20 74 6f 20 62 65 20 72 65   schema to be re
8c30: 6c 6f 61 64 65 64 20 28 62 65 63 61 75 73 65 0a  loaded (because.
8c40: 20 20 20 20 23 20 74 68 65 20 73 63 68 65 6d 61      # the schema
8c50: 20 77 61 73 20 63 68 61 6e 67 65 64 20 62 79 20   was changed by 
8c60: 61 6e 6f 74 68 65 72 20 63 6f 6e 6e 65 63 74 69  another connecti
8c70: 6f 6e 20 69 6e 20 70 72 61 67 6d 61 2d 31 35 2e  on in pragma-15.
8c80: 32 29 2e 20 41 74 20 6f 6e 65 0a 20 20 20 20 23  2). At one.    #
8c90: 20 70 6f 69 6e 74 20 74 68 65 72 65 20 77 61 73   point there was
8ca0: 20 61 20 62 75 67 20 74 68 61 74 20 72 65 73 65   a bug that rese
8cb0: 74 20 74 68 65 20 63 61 63 68 65 5f 73 69 7a 65  t the cache_size
8cc0: 20 74 6f 20 69 74 73 20 64 65 66 61 75 6c 74 20   to its default 
8cd0: 76 61 6c 75 65 0a 20 20 20 20 23 20 77 68 65 6e  value.    # when
8ce0: 20 74 68 69 73 20 68 61 70 70 65 6e 65 64 2e 20   this happened. 
8cf0: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 20 53  .    execsql { S
8d00: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 73 71 6c  ELECT * FROM sql
8d10: 69 74 65 5f 6d 61 73 74 65 72 20 7d 0a 20 20 20  ite_master }.   
8d20: 20 65 78 65 63 73 71 6c 20 7b 20 50 52 41 47 4d   execsql { PRAGM
8d30: 41 20 63 61 63 68 65 5f 73 69 7a 65 20 7d 0a 20  A cache_size }. 
8d40: 20 7d 20 7b 35 39 7d 0a 7d 0a 0a 23 20 52 65 73   } {59}.}..# Res
8d50: 65 74 20 74 68 65 20 73 71 6c 69 74 65 33 5f 74  et the sqlite3_t
8d60: 65 6d 70 5f 64 69 72 65 63 74 6f 72 79 20 76 61  emp_directory va
8d70: 72 69 61 62 6c 65 20 66 6f 72 20 74 68 65 20 6e  riable for the n
8d80: 65 78 74 20 72 75 6e 20 6f 66 20 74 65 73 74 73  ext run of tests
8d90: 3a 0a 73 71 6c 69 74 65 33 20 64 62 58 20 3a 6d  :.sqlite3 dbX :m
8da0: 65 6d 6f 72 79 3a 0a 64 62 58 20 65 76 61 6c 20  emory:.dbX eval 
8db0: 7b 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f  {PRAGMA temp_sto
8dc0: 72 65 5f 64 69 72 65 63 74 6f 72 79 20 3d 20 22  re_directory = "
8dd0: 22 7d 0a 64 62 58 20 63 6c 6f 73 65 0a 0a 69 66  "}.dbX close..if
8de0: 63 61 70 61 62 6c 65 20 6c 6f 63 6b 5f 70 72 6f  capable lock_pro
8df0: 78 79 5f 70 72 61 67 6d 61 73 26 26 70 72 65 66  xy_pragmas&&pref
8e00: 65 72 5f 70 72 6f 78 79 5f 6c 6f 63 6b 69 6e 67  er_proxy_locking
8e10: 20 7b 0a 20 20 73 65 74 20 73 71 6c 69 74 65 5f   {.  set sqlite_
8e20: 68 6f 73 74 69 64 5f 6e 75 6d 20 31 0a 0a 20 20  hostid_num 1..  
8e30: 73 65 74 20 75 73 69 6e 67 5f 70 72 6f 78 79 20  set using_proxy 
8e40: 30 0a 20 20 66 6f 72 65 61 63 68 20 7b 6e 61 6d  0.  foreach {nam
8e50: 65 20 76 61 6c 75 65 7d 20 5b 61 72 72 61 79 20  e value} [array 
8e60: 67 65 74 20 65 6e 76 20 53 51 4c 49 54 45 5f 46  get env SQLITE_F
8e70: 4f 52 43 45 5f 50 52 4f 58 59 5f 4c 4f 43 4b 49  ORCE_PROXY_LOCKI
8e80: 4e 47 5d 20 7b 0a 20 20 20 20 73 65 74 20 75 73  NG] {.    set us
8e90: 69 6e 67 5f 70 72 6f 78 79 20 24 76 61 6c 75 65  ing_proxy $value
8ea0: 0a 20 20 7d 0a 0a 20 20 23 20 54 65 73 74 20 74  .  }..  # Test t
8eb0: 68 65 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69  he lock_proxy_fi
8ec0: 6c 65 20 70 72 61 67 6d 61 73 2e 0a 20 20 23 0a  le pragmas..  #.
8ed0: 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 73 65 74    db close.  set
8ee0: 20 65 6e 76 28 53 51 4c 49 54 45 5f 46 4f 52 43   env(SQLITE_FORC
8ef0: 45 5f 50 52 4f 58 59 5f 4c 4f 43 4b 49 4e 47 29  E_PROXY_LOCKING)
8f00: 20 22 30 22 0a 0a 20 20 73 71 6c 69 74 65 33 20   "0"..  sqlite3 
8f10: 64 62 20 74 65 73 74 2e 64 62 0a 20 20 64 6f 5f  db test.db.  do_
8f20: 74 65 73 74 20 70 72 61 67 6d 61 2d 31 36 2e 31  test pragma-16.1
8f30: 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b   {.    execsql {
8f40: 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 6c 6f  .      PRAGMA lo
8f50: 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 3d 22 6d  ck_proxy_file="m
8f60: 79 6c 69 74 74 6c 65 70 72 6f 78 79 22 3b 0a 20  ylittleproxy";. 
8f70: 20 20 20 20 20 73 65 6c 65 63 74 20 2a 20 66 72       select * fr
8f80: 6f 6d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  om sqlite_master
8f90: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 65 78 65 63  ;.    }.    exec
8fa0: 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47  sql {.      PRAG
8fb0: 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69  MA lock_proxy_fi
8fc0: 6c 65 3b 0a 20 20 20 20 7d 20 0a 20 20 7d 20 7b  le;.    } .  } {
8fd0: 6d 79 6c 69 74 74 6c 65 70 72 6f 78 79 7d 0a 0a  mylittleproxy}..
8fe0: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
8ff0: 2d 31 36 2e 32 20 7b 0a 20 20 20 20 73 71 6c 69  -16.2 {.    sqli
9000: 74 65 33 20 64 62 32 20 74 65 73 74 2e 64 62 0a  te3 db2 test.db.
9010: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20      execsql {.  
9020: 20 20 20 20 50 52 41 47 4d 41 20 6c 6f 63 6b 5f      PRAGMA lock_
9030: 70 72 6f 78 79 5f 66 69 6c 65 3d 22 6d 79 6c 69  proxy_file="myli
9040: 74 74 6c 65 70 72 6f 78 79 22 3b 0a 20 20 20 20  ttleproxy";.    
9050: 7d 20 64 62 32 0a 20 20 7d 20 7b 7d 0a 0a 20 20  } db2.  } {}..  
9060: 64 62 32 20 63 6c 6f 73 65 0a 20 20 64 6f 5f 74  db2 close.  do_t
9070: 65 73 74 20 70 72 61 67 6d 61 2d 31 36 2e 32 2e  est pragma-16.2.
9080: 31 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 20  1 {.    sqlite3 
9090: 64 62 32 20 74 65 73 74 2e 64 62 0a 20 20 20 20  db2 test.db.    
90a0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
90b0: 50 52 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78  PRAGMA lock_prox
90c0: 79 5f 66 69 6c 65 3d 22 3a 61 75 74 6f 3a 22 3b  y_file=":auto:";
90d0: 0a 20 20 20 20 20 20 73 65 6c 65 63 74 20 2a 20  .      select * 
90e0: 66 72 6f 6d 20 73 71 6c 69 74 65 5f 6d 61 73 74  from sqlite_mast
90f0: 65 72 3b 0a 20 20 20 20 7d 20 64 62 32 0a 20 20  er;.    } db2.  
9100: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
9110: 20 20 50 52 41 47 4d 41 20 6c 6f 63 6b 5f 70 72    PRAGMA lock_pr
9120: 6f 78 79 5f 66 69 6c 65 3b 0a 20 20 20 20 7d 20  oxy_file;.    } 
9130: 64 62 32 0a 20 20 7d 20 7b 6d 79 6c 69 74 74 6c  db2.  } {mylittl
9140: 65 70 72 6f 78 79 7d 0a 0a 20 20 64 62 32 20 63  eproxy}..  db2 c
9150: 6c 6f 73 65 0a 20 20 64 6f 5f 74 65 73 74 20 70  lose.  do_test p
9160: 72 61 67 6d 61 2d 31 36 2e 33 20 7b 0a 20 20 20  ragma-16.3 {.   
9170: 20 73 71 6c 69 74 65 33 20 64 62 32 20 74 65 73   sqlite3 db2 tes
9180: 74 2e 64 62 0a 20 20 20 20 65 78 65 63 73 71 6c  t.db.    execsql
9190: 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20   {.      PRAGMA 
91a0: 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 3d  lock_proxy_file=
91b0: 22 6d 79 6f 74 68 65 72 70 72 6f 78 79 22 3b 0a  "myotherproxy";.
91c0: 20 20 20 20 7d 20 64 62 32 0a 20 20 20 20 63 61      } db2.    ca
91d0: 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 20 20 73  tchsql {.      s
91e0: 65 6c 65 63 74 20 2a 20 66 72 6f 6d 20 73 71 6c  elect * from sql
91f0: 69 74 65 5f 6d 61 73 74 65 72 3b 0a 20 20 20 20  ite_master;.    
9200: 7d 20 64 62 32 0a 20 20 7d 20 7b 31 20 7b 64 61  } db2.  } {1 {da
9210: 74 61 62 61 73 65 20 69 73 20 6c 6f 63 6b 65 64  tabase is locked
9220: 7d 7d 0a 0a 20 20 64 6f 5f 74 65 73 74 20 70 72  }}..  do_test pr
9230: 61 67 6d 61 2d 31 36 2e 34 20 7b 0a 20 20 20 20  agma-16.4 {.    
9240: 64 62 32 20 63 6c 6f 73 65 0a 20 20 20 20 64 62  db2 close.    db
9250: 20 63 6c 6f 73 65 0a 20 20 20 20 73 71 6c 69 74   close.    sqlit
9260: 65 33 20 64 62 32 20 74 65 73 74 2e 64 62 0a 20  e3 db2 test.db. 
9270: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
9280: 20 20 20 50 52 41 47 4d 41 20 6c 6f 63 6b 5f 70     PRAGMA lock_p
9290: 72 6f 78 79 5f 66 69 6c 65 3d 22 6d 79 6f 72 69  roxy_file="myori
92a0: 67 69 6e 61 6c 70 72 6f 78 79 22 3b 0a 20 20 20  ginalproxy";.   
92b0: 20 20 20 50 52 41 47 4d 41 20 6c 6f 63 6b 5f 70     PRAGMA lock_p
92c0: 72 6f 78 79 5f 66 69 6c 65 3d 22 6d 79 6f 74 68  roxy_file="myoth
92d0: 65 72 70 72 6f 78 79 22 3b 0a 20 20 20 20 20 20  erproxy";.      
92e0: 50 52 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78  PRAGMA lock_prox
92f0: 79 5f 66 69 6c 65 3b 0a 20 20 20 20 7d 20 64 62  y_file;.    } db
9300: 32 0a 20 20 7d 20 7b 6d 79 6f 74 68 65 72 70 72  2.  } {myotherpr
9310: 6f 78 79 7d 0a 0a 20 20 64 62 32 20 63 6c 6f 73  oxy}..  db2 clos
9320: 65 0a 20 20 73 65 74 20 65 6e 76 28 53 51 4c 49  e.  set env(SQLI
9330: 54 45 5f 46 4f 52 43 45 5f 50 52 4f 58 59 5f 4c  TE_FORCE_PROXY_L
9340: 4f 43 4b 49 4e 47 29 20 22 31 22 0a 20 20 64 6f  OCKING) "1".  do
9350: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 36 2e  _test pragma-16.
9360: 35 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 20  5 {.    sqlite3 
9370: 64 62 32 20 74 65 73 74 2e 64 62 0a 20 20 20 20  db2 test.db.    
9380: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
9390: 50 52 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78  PRAGMA lock_prox
93a0: 79 5f 66 69 6c 65 3d 22 3a 61 75 74 6f 3a 22 3b  y_file=":auto:";
93b0: 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 6c 6f  .      PRAGMA lo
93c0: 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 3b 0a 20  ck_proxy_file;. 
93d0: 20 20 20 7d 20 64 62 32 0a 20 20 7d 20 7b 6d 79     } db2.  } {my
93e0: 6f 74 68 65 72 70 72 6f 78 79 7d 0a 20 20 0a 20  otherproxy}.  . 
93f0: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
9400: 31 36 2e 36 20 7b 0a 20 20 20 20 64 62 32 20 63  16.6 {.    db2 c
9410: 6c 6f 73 65 0a 20 20 20 20 73 71 6c 69 74 65 33  lose.    sqlite3
9420: 20 64 62 32 20 74 65 73 74 32 2e 64 62 0a 20 20   db2 test2.db.  
9430: 20 20 73 65 74 20 6c 6f 63 6b 70 61 74 68 20 5b    set lockpath [
9440: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
9450: 50 52 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78  PRAGMA lock_prox
9460: 79 5f 66 69 6c 65 3d 22 3a 61 75 74 6f 3a 22 3b  y_file=":auto:";
9470: 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 6c 6f  .      PRAGMA lo
9480: 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 3b 0a 20  ck_proxy_file;. 
9490: 20 20 20 7d 20 64 62 32 5d 0a 20 20 20 20 73 74     } db2].    st
94a0: 72 69 6e 67 20 6d 61 74 63 68 20 22 2a 74 65 73  ring match "*tes
94b0: 74 32 2e 64 62 3a 61 75 74 6f 3a 22 20 24 6c 6f  t2.db:auto:" $lo
94c0: 63 6b 70 61 74 68 0a 20 20 7d 20 7b 31 7d 0a 20  ckpath.  } {1}. 
94d0: 20 0a 20 20 73 65 74 20 73 71 6c 69 74 65 5f 68   .  set sqlite_h
94e0: 6f 73 74 69 64 5f 6e 75 6d 20 32 0a 20 20 64 6f  ostid_num 2.  do
94f0: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 36 2e  _test pragma-16.
9500: 37 20 7b 0a 20 20 20 20 6c 69 73 74 20 5b 63 61  7 {.    list [ca
9510: 74 63 68 20 7b 0a 20 20 20 20 20 20 73 71 6c 69  tch {.      sqli
9520: 74 65 33 20 64 62 20 74 65 73 74 32 2e 64 62 0a  te3 db test2.db.
9530: 20 20 20 20 20 20 65 78 65 63 73 71 6c 20 7b 20        execsql { 
9540: 0a 20 20 20 20 20 20 20 20 50 52 41 47 4d 41 20  .        PRAGMA 
9550: 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 3d  lock_proxy_file=
9560: 22 3a 61 75 74 6f 3a 22 3b 0a 20 20 20 20 20 20  ":auto:";.      
9570: 20 20 73 65 6c 65 63 74 20 2a 20 66 72 6f 6d 20    select * from 
9580: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 3b 0a 20  sqlite_master;. 
9590: 20 20 20 20 20 7d 0a 20 20 20 20 7d 20 6d 73 67       }.    } msg
95a0: 5d 20 24 6d 73 67 0a 20 20 7d 20 7b 31 20 7b 64  ] $msg.  } {1 {d
95b0: 61 74 61 62 61 73 65 20 69 73 20 6c 6f 63 6b 65  atabase is locke
95c0: 64 7d 7d 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20  d}}.  db close. 
95d0: 20 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67   .  do_test prag
95e0: 6d 61 2d 31 36 2e 38 20 7b 0a 20 20 20 20 6c 69  ma-16.8 {.    li
95f0: 73 74 20 5b 63 61 74 63 68 20 7b 0a 20 20 20 20  st [catch {.    
9600: 20 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73    sqlite3 db tes
9610: 74 32 2e 64 62 0a 20 20 20 20 20 20 65 78 65 63  t2.db.      exec
9620: 73 71 6c 20 7b 20 73 65 6c 65 63 74 20 2a 20 66  sql { select * f
9630: 72 6f 6d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  rom sqlite_maste
9640: 72 20 7d 20 0a 20 20 20 20 7d 20 6d 73 67 5d 20  r } .    } msg] 
9650: 24 6d 73 67 0a 20 20 7d 20 7b 31 20 7b 64 61 74  $msg.  } {1 {dat
9660: 61 62 61 73 65 20 69 73 20 6c 6f 63 6b 65 64 7d  abase is locked}
9670: 7d 0a 0a 20 20 64 62 32 20 63 6c 6f 73 65 0a 20  }..  db2 close. 
9680: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
9690: 31 36 2e 38 2e 31 20 7b 0a 20 20 20 20 65 78 65  16.8.1 {.    exe
96a0: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41  csql {.      PRA
96b0: 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66  GMA lock_proxy_f
96c0: 69 6c 65 3d 22 79 65 74 61 6e 6f 74 68 65 72 70  ile="yetanotherp
96d0: 72 6f 78 79 22 3b 0a 20 20 20 20 20 20 50 52 41  roxy";.      PRA
96e0: 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66  GMA lock_proxy_f
96f0: 69 6c 65 3b 0a 20 20 20 20 7d 20 0a 20 20 7d 20  ile;.    } .  } 
9700: 7b 79 65 74 61 6e 6f 74 68 65 72 70 72 6f 78 79  {yetanotherproxy
9710: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67  }.  do_test prag
9720: 6d 61 2d 31 36 2e 38 2e 32 20 7b 0a 20 20 20 20  ma-16.8.2 {.    
9730: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
9740: 63 72 65 61 74 65 20 74 61 62 6c 65 20 6d 69 6e  create table min
9750: 65 28 78 29 3b 0a 20 20 20 20 7d 20 0a 20 20 7d  e(x);.    } .  }
9760: 20 7b 7d 0a 0a 20 20 64 62 20 63 6c 6f 73 65 0a   {}..  db close.
9770: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
9780: 2d 31 36 2e 39 20 7b 0a 20 20 20 20 73 71 6c 69  -16.9 {.    sqli
9790: 74 65 33 20 64 62 20 70 72 6f 78 79 74 65 73 74  te3 db proxytest
97a0: 2e 64 62 0a 20 20 20 20 73 65 74 20 6c 6f 63 6b  .db.    set lock
97b0: 70 61 74 68 32 20 5b 65 78 65 63 73 71 6c 20 7b  path2 [execsql {
97c0: 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 6c 6f  .      PRAGMA lo
97d0: 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 3d 22 3a  ck_proxy_file=":
97e0: 61 75 74 6f 3a 22 3b 0a 20 20 20 20 20 20 50 52  auto:";.      PR
97f0: 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f  AGMA lock_proxy_
9800: 66 69 6c 65 3b 0a 20 20 20 20 7d 20 64 62 5d 0a  file;.    } db].
9810: 20 20 20 20 73 74 72 69 6e 67 20 6d 61 74 63 68      string match
9820: 20 22 2a 70 72 6f 78 79 74 65 73 74 2e 64 62 3a   "*proxytest.db:
9830: 61 75 74 6f 3a 22 20 24 6c 6f 63 6b 70 61 74 68  auto:" $lockpath
9840: 32 0a 20 20 7d 20 7b 31 7d 0a 0a 20 20 73 65 74  2.  } {1}..  set
9850: 20 65 6e 76 28 53 51 4c 49 54 45 5f 46 4f 52 43   env(SQLITE_FORC
9860: 45 5f 50 52 4f 58 59 5f 4c 4f 43 4b 49 4e 47 29  E_PROXY_LOCKING)
9870: 20 24 75 73 69 6e 67 5f 70 72 6f 78 79 0a 20 20   $using_proxy.  
9880: 73 65 74 20 73 71 6c 69 74 65 5f 68 6f 73 74 69  set sqlite_hosti
9890: 64 5f 6e 75 6d 20 30 0a 7d 0a 0a 23 20 50 61 72  d_num 0.}..# Par
98a0: 73 69 6e 67 20 6f 66 20 61 75 74 6f 5f 76 61 63  sing of auto_vac
98b0: 75 75 6d 20 73 65 74 74 69 6e 67 73 2e 0a 23 0a  uum settings..#.
98c0: 66 6f 72 65 61 63 68 20 7b 61 75 74 6f 76 61 63  foreach {autovac
98d0: 5f 73 65 74 74 69 6e 67 20 76 61 6c 7d 20 7b 0a  _setting val} {.
98e0: 20 20 30 20 30 0a 20 20 31 20 31 0a 20 20 32 20    0 0.  1 1.  2 
98f0: 32 0a 20 20 33 20 30 0a 20 20 2d 31 20 30 0a 20  2.  3 0.  -1 0. 
9900: 20 6e 6f 6e 65 20 30 0a 20 20 4e 4f 4e 45 20 30   none 0.  NONE 0
9910: 0a 20 20 4e 6f 4e 65 20 30 0a 20 20 66 75 6c 6c  .  NoNe 0.  full
9920: 20 31 0a 20 20 46 55 4c 4c 20 31 0a 20 20 69 6e   1.  FULL 1.  in
9930: 63 72 65 6d 65 6e 74 61 6c 20 32 0a 20 20 49 4e  cremental 2.  IN
9940: 43 52 45 4d 45 4e 54 41 4c 20 32 0a 20 20 2d 31  CREMENTAL 2.  -1
9950: 32 33 34 20 30 0a 20 20 31 32 33 34 20 30 0a 7d  234 0.  1234 0.}
9960: 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61   {.  do_test pra
9970: 67 6d 61 2d 31 37 2e 31 2e 24 61 75 74 6f 76 61  gma-17.1.$autova
9980: 63 5f 73 65 74 74 69 6e 67 20 7b 0a 20 20 20 20  c_setting {.    
9990: 63 61 74 63 68 20 7b 64 62 20 63 6c 6f 73 65 7d  catch {db close}
99a0: 0a 20 20 20 20 73 71 6c 69 74 65 33 20 64 62 20  .    sqlite3 db 
99b0: 3a 6d 65 6d 6f 72 79 3a 0a 20 20 20 20 65 78 65  :memory:.    exe
99c0: 63 73 71 6c 20 22 0a 20 20 20 20 20 20 50 52 41  csql ".      PRA
99d0: 47 4d 41 20 61 75 74 6f 5f 76 61 63 75 75 6d 3d  GMA auto_vacuum=
99e0: 24 3a 3a 61 75 74 6f 76 61 63 5f 73 65 74 74 69  $::autovac_setti
99f0: 6e 67 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41  ng;.      PRAGMA
9a00: 20 61 75 74 6f 5f 76 61 63 75 75 6d 3b 0a 20 20   auto_vacuum;.  
9a10: 20 20 22 0a 20 20 7d 20 24 76 61 6c 0a 7d 0a 0a    ".  } $val.}..
9a20: 23 20 50 61 72 73 69 6e 67 20 6f 66 20 74 65 6d  # Parsing of tem
9a30: 70 5f 73 74 6f 72 65 20 73 65 74 74 69 6e 67 73  p_store settings
9a40: 2e 0a 23 0a 66 6f 72 65 61 63 68 20 7b 74 65 6d  ..#.foreach {tem
9a50: 70 5f 73 65 74 74 69 6e 67 20 76 61 6c 7d 20 7b  p_setting val} {
9a60: 0a 20 20 30 20 30 0a 20 20 31 20 31 0a 20 20 32  .  0 0.  1 1.  2
9a70: 20 32 0a 20 20 33 20 30 0a 20 20 2d 31 20 30 0a   2.  3 0.  -1 0.
9a80: 20 20 66 69 6c 65 20 31 0a 20 20 46 49 4c 45 20    file 1.  FILE 
9a90: 31 0a 20 20 66 49 6c 45 20 31 0a 20 20 6d 65 6d  1.  fIlE 1.  mem
9aa0: 6f 72 79 20 32 0a 20 20 4d 45 4d 4f 52 59 20 32  ory 2.  MEMORY 2
9ab0: 0a 20 20 4d 65 4d 6f 52 79 20 32 0a 7d 20 7b 0a  .  MeMoRy 2.} {.
9ac0: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
9ad0: 2d 31 38 2e 31 2e 24 74 65 6d 70 5f 73 65 74 74  -18.1.$temp_sett
9ae0: 69 6e 67 20 7b 0a 20 20 20 20 63 61 74 63 68 20  ing {.    catch 
9af0: 7b 64 62 20 63 6c 6f 73 65 7d 0a 20 20 20 20 73  {db close}.    s
9b00: 71 6c 69 74 65 33 20 64 62 20 3a 6d 65 6d 6f 72  qlite3 db :memor
9b10: 79 3a 0a 20 20 20 20 65 78 65 63 73 71 6c 20 22  y:.    execsql "
9b20: 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 74 65  .      PRAGMA te
9b30: 6d 70 5f 73 74 6f 72 65 3d 24 3a 3a 74 65 6d 70  mp_store=$::temp
9b40: 5f 73 65 74 74 69 6e 67 3b 0a 20 20 20 20 20 20  _setting;.      
9b50: 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72  PRAGMA temp_stor
9b60: 65 3d 24 3a 3a 74 65 6d 70 5f 73 65 74 74 69 6e  e=$::temp_settin
9b70: 67 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20  g;.      PRAGMA 
9b80: 74 65 6d 70 5f 73 74 6f 72 65 3b 0a 20 20 20 20  temp_store;.    
9b90: 22 0a 20 20 7d 20 24 76 61 6c 0a 7d 0a 0a 23 20  ".  } $val.}..# 
9ba0: 54 68 65 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c  The SQLITE_FCNTL
9bb0: 5f 50 52 41 47 4d 41 20 6c 6f 67 69 63 2c 20 77  _PRAGMA logic, w
9bc0: 69 74 68 20 65 72 72 6f 72 20 68 61 6e 64 6c 69  ith error handli
9bd0: 6e 67 2e 0a 23 0a 64 62 20 63 6c 6f 73 65 0a 74  ng..#.db close.t
9be0: 65 73 74 76 66 73 20 74 76 66 73 0a 73 71 6c 69  estvfs tvfs.sqli
9bf0: 74 65 33 20 64 62 20 74 65 73 74 2e 64 62 20 2d  te3 db test.db -
9c00: 76 66 73 20 74 76 66 73 0a 64 6f 5f 74 65 73 74  vfs tvfs.do_test
9c10: 20 70 72 61 67 6d 61 2d 31 39 2e 31 20 7b 0a 20   pragma-19.1 {. 
9c20: 20 63 61 74 63 68 73 71 6c 20 7b 50 52 41 47 4d   catchsql {PRAGM
9c30: 41 20 65 72 72 6f 72 7d 0a 7d 20 7b 31 20 7b 53  A error}.} {1 {S
9c40: 51 4c 20 6c 6f 67 69 63 20 65 72 72 6f 72 20 6f  QL logic error o
9c50: 72 20 6d 69 73 73 69 6e 67 20 64 61 74 61 62 61  r missing databa
9c60: 73 65 7d 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61  se}}.do_test pra
9c70: 67 6d 61 2d 31 39 2e 32 20 7b 0a 20 20 63 61 74  gma-19.2 {.  cat
9c80: 63 68 73 71 6c 20 7b 50 52 41 47 4d 41 20 65 72  chsql {PRAGMA er
9c90: 72 6f 72 3d 27 54 68 69 73 20 69 73 20 74 68 65  ror='This is the
9ca0: 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 27 7d   error message'}
9cb0: 0a 7d 20 7b 31 20 7b 54 68 69 73 20 69 73 20 74  .} {1 {This is t
9cc0: 68 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  he error message
9cd0: 7d 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  }}.do_test pragm
9ce0: 61 2d 31 39 2e 33 20 7b 0a 20 20 63 61 74 63 68  a-19.3 {.  catch
9cf0: 73 71 6c 20 7b 50 52 41 47 4d 41 20 65 72 72 6f  sql {PRAGMA erro
9d00: 72 3d 27 37 20 54 68 69 73 20 69 73 20 74 68 65  r='7 This is the
9d10: 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 27 7d   error message'}
9d20: 0a 7d 20 7b 31 20 7b 54 68 69 73 20 69 73 20 74  .} {1 {This is t
9d30: 68 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  he error message
9d40: 7d 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  }}.do_test pragm
9d50: 61 2d 31 39 2e 34 20 7b 0a 20 20 63 61 74 63 68  a-19.4 {.  catch
9d60: 73 71 6c 20 7b 50 52 41 47 4d 41 20 65 72 72 6f  sql {PRAGMA erro
9d70: 72 3d 37 7d 0a 7d 20 7b 31 20 7b 6f 75 74 20 6f  r=7}.} {1 {out o
9d80: 66 20 6d 65 6d 6f 72 79 7d 7d 0a 64 6f 5f 74 65  f memory}}.do_te
9d90: 73 74 20 70 72 61 67 6d 61 2d 31 39 2e 35 20 7b  st pragma-19.5 {
9da0: 0a 20 20 66 69 6c 65 20 74 61 69 6c 20 5b 6c 69  .  file tail [li
9db0: 6e 64 65 78 20 5b 65 78 65 63 73 71 6c 20 7b 50  ndex [execsql {P
9dc0: 52 41 47 4d 41 20 66 69 6c 65 6e 61 6d 65 7d 5d  RAGMA filename}]
9dd0: 20 30 5d 0a 7d 20 7b 74 65 73 74 2e 64 62 7d 0a   0].} {test.db}.
9de0: 0a 69 66 20 7b 24 74 63 6c 5f 70 6c 61 74 66 6f  .if {$tcl_platfo
9df0: 72 6d 28 70 6c 61 74 66 6f 72 6d 29 3d 3d 22 77  rm(platform)=="w
9e00: 69 6e 64 6f 77 73 22 7d 20 7b 0a 23 20 54 65 73  indows"} {.# Tes
9e10: 74 20 64 61 74 61 5f 73 74 6f 72 65 5f 64 69 72  t data_store_dir
9e20: 65 63 74 6f 72 79 20 70 72 61 67 6d 61 0a 23 0a  ectory pragma.#.
9e30: 64 62 20 63 6c 6f 73 65 0a 73 71 6c 69 74 65 33  db close.sqlite3
9e40: 20 64 62 20 74 65 73 74 2e 64 62 0a 66 69 6c 65   db test.db.file
9e50: 20 6d 6b 64 69 72 20 64 61 74 61 5f 64 69 72 0a   mkdir data_dir.
9e60: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 32  do_test pragma-2
9e70: 30 2e 31 20 7b 0a 20 20 63 61 74 63 68 73 71 6c  0.1 {.  catchsql
9e80: 20 7b 50 52 41 47 4d 41 20 64 61 74 61 5f 73 74   {PRAGMA data_st
9e90: 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 7d 0a 7d  ore_directory}.}
9ea0: 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20   {0 {}}.do_test 
9eb0: 70 72 61 67 6d 61 2d 32 30 2e 32 20 7b 0a 20 20  pragma-20.2 {.  
9ec0: 73 65 74 20 70 77 64 20 5b 73 74 72 69 6e 67 20  set pwd [string 
9ed0: 6d 61 70 20 7b 27 20 27 27 7d 20 5b 66 69 6c 65  map {' ''} [file
9ee0: 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 67 65 74   nativename [get
9ef0: 5f 70 77 64 5d 5d 5d 0a 20 20 63 61 74 63 68 73  _pwd]]].  catchs
9f00: 71 6c 20 22 50 52 41 47 4d 41 20 64 61 74 61 5f  ql "PRAGMA data_
9f10: 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 3d  store_directory=
9f20: 27 24 70 77 64 27 3b 22 0a 7d 20 7b 30 20 7b 7d  '$pwd';".} {0 {}
9f30: 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  }.do_test pragma
9f40: 2d 32 30 2e 33 20 7b 0a 20 20 63 61 74 63 68 73  -20.3 {.  catchs
9f50: 71 6c 20 7b 50 52 41 47 4d 41 20 64 61 74 61 5f  ql {PRAGMA data_
9f60: 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 7d  store_directory}
9f70: 0a 7d 20 5b 6c 69 73 74 20 30 20 5b 6c 69 73 74  .} [list 0 [list
9f80: 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d   [file nativenam
9f90: 65 20 5b 67 65 74 5f 70 77 64 5d 5d 5d 5d 0a 64  e [get_pwd]]]].d
9fa0: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 32 30  o_test pragma-20
9fb0: 2e 34 20 7b 0a 20 20 73 65 74 20 70 77 64 20 5b  .4 {.  set pwd [
9fc0: 73 74 72 69 6e 67 20 6d 61 70 20 7b 27 20 27 27  string map {' ''
9fd0: 7d 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61  } [file nativena
9fe0: 6d 65 20 5c 0a 20 20 20 20 5b 66 69 6c 65 20 6a  me \.    [file j
9ff0: 6f 69 6e 20 5b 67 65 74 5f 70 77 64 5d 20 64 61  oin [get_pwd] da
a000: 74 61 5f 64 69 72 5d 5d 5d 0a 20 20 63 61 74 63  ta_dir]]].  catc
a010: 68 73 71 6c 20 22 50 52 41 47 4d 41 20 64 61 74  hsql "PRAGMA dat
a020: 61 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72  a_store_director
a030: 79 3d 27 24 70 77 64 27 3b 22 0a 7d 20 7b 30 20  y='$pwd';".} {0 
a040: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67  {}}.do_test prag
a050: 6d 61 2d 32 30 2e 35 20 7b 0a 20 20 73 71 6c 69  ma-20.5 {.  sqli
a060: 74 65 33 20 64 62 32 20 74 65 73 74 32 2e 64 62  te3 db2 test2.db
a070: 0a 20 20 63 61 74 63 68 73 71 6c 20 22 50 52 41  .  catchsql "PRA
a080: 47 4d 41 20 64 61 74 61 62 61 73 65 5f 6c 69 73  GMA database_lis
a090: 74 3b 22 20 64 62 32 0a 7d 20 5b 6c 69 73 74 20  t;" db2.} [list 
a0a0: 30 20 5b 6c 69 73 74 20 30 20 6d 61 69 6e 20 5b  0 [list 0 main [
a0b0: 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20  file nativename 
a0c0: 5c 0a 20 20 20 20 5b 66 69 6c 65 20 6a 6f 69 6e  \.    [file join
a0d0: 20 5b 67 65 74 5f 70 77 64 5d 20 64 61 74 61 5f   [get_pwd] data_
a0e0: 64 69 72 20 74 65 73 74 32 2e 64 62 5d 5d 5d 5d  dir test2.db]]]]
a0f0: 0a 63 61 74 63 68 20 7b 64 62 32 20 63 6c 6f 73  .catch {db2 clos
a100: 65 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  e}.do_test pragm
a110: 61 2d 32 30 2e 36 20 7b 0a 20 20 73 71 6c 69 74  a-20.6 {.  sqlit
a120: 65 33 20 64 62 32 20 5b 66 69 6c 65 20 6a 6f 69  e3 db2 [file joi
a130: 6e 20 5b 67 65 74 5f 70 77 64 5d 20 74 65 73 74  n [get_pwd] test
a140: 32 2e 64 62 5d 0a 20 20 63 61 74 63 68 73 71 6c  2.db].  catchsql
a150: 20 22 50 52 41 47 4d 41 20 64 61 74 61 62 61 73   "PRAGMA databas
a160: 65 5f 6c 69 73 74 3b 22 20 64 62 32 0a 7d 20 5b  e_list;" db2.} [
a170: 6c 69 73 74 20 30 20 5b 6c 69 73 74 20 30 20 6d  list 0 [list 0 m
a180: 61 69 6e 20 5b 66 69 6c 65 20 6e 61 74 69 76 65  ain [file native
a190: 6e 61 6d 65 20 5c 0a 20 20 20 20 5b 66 69 6c 65  name \.    [file
a1a0: 20 6a 6f 69 6e 20 5b 67 65 74 5f 70 77 64 5d 20   join [get_pwd] 
a1b0: 74 65 73 74 32 2e 64 62 5d 5d 5d 5d 0a 63 61 74  test2.db]]]].cat
a1c0: 63 68 20 7b 64 62 32 20 63 6c 6f 73 65 7d 0a 64  ch {db2 close}.d
a1d0: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 32 30  o_test pragma-20
a1e0: 2e 37 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20  .7 {.  catchsql 
a1f0: 22 50 52 41 47 4d 41 20 64 61 74 61 5f 73 74 6f  "PRAGMA data_sto
a200: 72 65 5f 64 69 72 65 63 74 6f 72 79 3d 27 27 3b  re_directory='';
a210: 22 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65  ".} {0 {}}.do_te
a220: 73 74 20 70 72 61 67 6d 61 2d 32 30 2e 38 20 7b  st pragma-20.8 {
a230: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 50 52 41  .  catchsql {PRA
a240: 47 4d 41 20 64 61 74 61 5f 73 74 6f 72 65 5f 64  GMA data_store_d
a250: 69 72 65 63 74 6f 72 79 7d 0a 7d 20 7b 30 20 7b  irectory}.} {0 {
a260: 7d 7d 0a 0a 66 6f 72 63 65 64 65 6c 65 74 65 20  }}..forcedelete 
a270: 64 61 74 61 5f 64 69 72 0a 7d 20 3b 23 20 65 6e  data_dir.} ;# en
a280: 64 69 66 20 77 69 6e 64 6f 77 73 0a 0a 64 61 74  dif windows..dat
a290: 61 62 61 73 65 5f 6d 61 79 5f 62 65 5f 63 6f 72  abase_may_be_cor
a2a0: 72 75 70 74 0a 0a 64 6f 5f 74 65 73 74 20 32 31  rupt..do_test 21
a2b0: 2e 31 20 7b 0a 20 20 23 20 43 72 65 61 74 65 20  .1 {.  # Create 
a2c0: 61 20 63 6f 72 72 75 70 74 20 64 61 74 61 62 61  a corrupt databa
a2d0: 73 65 20 69 6e 20 74 65 73 74 65 72 72 2e 64 62  se in testerr.db
a2e0: 2e 20 41 6e 64 20 61 20 6e 6f 6e 2d 63 6f 72 72  . And a non-corr
a2f0: 75 70 74 20 61 74 20 74 65 73 74 2e 64 62 2e 0a  upt at test.db..
a300: 20 20 23 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20    #.  db close. 
a310: 20 66 6f 72 63 65 64 65 6c 65 74 65 20 74 65 73   forcedelete tes
a320: 74 2e 64 62 0a 20 20 73 71 6c 69 74 65 33 20 64  t.db.  sqlite3 d
a330: 62 20 74 65 73 74 2e 64 62 0a 20 20 65 78 65 63  b test.db.  exec
a340: 73 71 6c 20 7b 20 0a 20 20 20 20 50 52 41 47 4d  sql { .    PRAGM
a350: 41 20 70 61 67 65 5f 73 69 7a 65 20 3d 20 31 30  A page_size = 10
a360: 32 34 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 61  24;.    PRAGMA a
a370: 75 74 6f 5f 76 61 63 75 75 6d 20 3d 20 30 3b 0a  uto_vacuum = 0;.
a380: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
a390: 20 74 31 28 61 20 50 52 49 4d 41 52 59 20 4b 45   t1(a PRIMARY KE
a3a0: 59 2c 20 62 29 3b 0a 20 20 20 20 49 4e 53 45 52  Y, b);.    INSER
a3b0: 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53  T INTO t1 VALUES
a3c0: 28 31 2c 20 31 29 3b 0a 20 20 7d 0a 20 20 66 6f  (1, 1);.  }.  fo
a3d0: 72 20 7b 73 65 74 20 69 20 30 7d 20 7b 24 69 20  r {set i 0} {$i 
a3e0: 3c 20 31 30 7d 20 7b 69 6e 63 72 20 69 7d 20 7b  < 10} {incr i} {
a3f0: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 20 49  .    execsql { I
a400: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 53 45  NSERT INTO t1 SE
a410: 4c 45 43 54 20 61 20 2b 20 28 31 20 3c 3c 20 24  LECT a + (1 << $
a420: 69 29 2c 20 62 20 2b 20 28 31 20 3c 3c 20 24 69  i), b + (1 << $i
a430: 29 20 46 52 4f 4d 20 74 31 20 7d 0a 20 20 7d 0a  ) FROM t1 }.  }.
a440: 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 66 6f 72    db close.  for
a450: 63 65 63 6f 70 79 20 74 65 73 74 2e 64 62 20 74  cecopy test.db t
a460: 65 73 74 65 72 72 2e 64 62 0a 20 20 68 65 78 69  esterr.db.  hexi
a470: 6f 5f 77 72 69 74 65 20 74 65 73 74 65 72 72 2e  o_write testerr.
a480: 64 62 20 31 35 30 30 30 20 5b 73 74 72 69 6e 67  db 15000 [string
a490: 20 72 65 70 65 61 74 20 35 35 20 31 30 30 5d 0a   repeat 55 100].
a4a0: 7d 20 7b 31 30 30 7d 0a 0a 73 65 74 20 6d 61 69  } {100}..set mai
a4b0: 6e 65 72 72 20 7b 2a 2a 2a 20 69 6e 20 64 61 74  nerr {*** in dat
a4c0: 61 62 61 73 65 20 6d 61 69 6e 20 2a 2a 2a 0a 4d  abase main ***.M
a4d0: 75 6c 74 69 70 6c 65 20 75 73 65 73 20 66 6f 72  ultiple uses for
a4e0: 20 62 79 74 65 20 36 37 32 20 6f 66 20 70 61 67   byte 672 of pag
a4f0: 65 20 31 35 7d 0a 73 65 74 20 61 75 78 65 72 72  e 15}.set auxerr
a500: 20 7b 2a 2a 2a 20 69 6e 20 64 61 74 61 62 61 73   {*** in databas
a510: 65 20 61 75 78 20 2a 2a 2a 0a 4d 75 6c 74 69 70  e aux ***.Multip
a520: 6c 65 20 75 73 65 73 20 66 6f 72 20 62 79 74 65  le uses for byte
a530: 20 36 37 32 20 6f 66 20 70 61 67 65 20 31 35 7d   672 of page 15}
a540: 0a 0a 73 65 74 20 6d 61 69 6e 65 72 72 20 7b 2f  ..set mainerr {/
a550: 7b 5c 2a 5c 2a 5c 2a 20 69 6e 20 64 61 74 61 62  {\*\*\* in datab
a560: 61 73 65 20 6d 61 69 6e 20 5c 2a 5c 2a 5c 2a 0a  ase main \*\*\*.
a570: 4d 75 6c 74 69 70 6c 65 20 75 73 65 73 20 66 6f  Multiple uses fo
a580: 72 20 62 79 74 65 20 36 37 32 20 6f 66 20 70 61  r byte 672 of pa
a590: 67 65 20 31 35 7d 2e 2a 2f 7d 0a 73 65 74 20 61  ge 15}.*/}.set a
a5a0: 75 78 65 72 72 20 7b 2f 7b 5c 2a 5c 2a 5c 2a 20  uxerr {/{\*\*\* 
a5b0: 69 6e 20 64 61 74 61 62 61 73 65 20 61 75 78 20  in database aux 
a5c0: 5c 2a 5c 2a 5c 2a 0a 4d 75 6c 74 69 70 6c 65 20  \*\*\*.Multiple 
a5d0: 75 73 65 73 20 66 6f 72 20 62 79 74 65 20 36 37  uses for byte 67
a5e0: 32 20 6f 66 20 70 61 67 65 20 31 35 7d 2e 2a 2f  2 of page 15}.*/
a5f0: 7d 0a 0a 64 6f 5f 74 65 73 74 20 32 32 2e 32 20  }..do_test 22.2 
a600: 7b 0a 20 20 63 61 74 63 68 20 7b 20 64 62 20 63  {.  catch { db c
a610: 6c 6f 73 65 20 7d 0a 20 20 73 71 6c 69 74 65 33  lose }.  sqlite3
a620: 20 64 62 20 74 65 73 74 65 72 72 2e 64 62 0a 20   db testerr.db. 
a630: 20 65 78 65 63 73 71 6c 20 7b 20 50 52 41 47 4d   execsql { PRAGM
a640: 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63  A integrity_chec
a650: 6b 20 7d 0a 7d 20 24 6d 61 69 6e 65 72 72 0a 0a  k }.} $mainerr..
a660: 64 6f 5f 74 65 73 74 20 32 32 2e 33 2e 31 20 7b  do_test 22.3.1 {
a670: 0a 20 20 63 61 74 63 68 20 7b 20 64 62 20 63 6c  .  catch { db cl
a680: 6f 73 65 20 7d 0a 20 20 73 71 6c 69 74 65 33 20  ose }.  sqlite3 
a690: 64 62 20 74 65 73 74 2e 64 62 0a 20 20 65 78 65  db test.db.  exe
a6a0: 63 73 71 6c 20 7b 20 0a 20 20 20 20 41 54 54 41  csql { .    ATTA
a6b0: 43 48 20 27 74 65 73 74 65 72 72 2e 64 62 27 20  CH 'testerr.db' 
a6c0: 41 53 20 27 61 75 78 27 3b 0a 20 20 20 20 50 52  AS 'aux';.    PR
a6d0: 41 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63  AGMA integrity_c
a6e0: 68 65 63 6b 3b 0a 20 20 7d 0a 7d 20 24 61 75 78  heck;.  }.} $aux
a6f0: 65 72 72 0a 64 6f 5f 74 65 73 74 20 32 32 2e 33  err.do_test 22.3
a700: 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .2 {.  execsql {
a710: 20 50 52 41 47 4d 41 20 6d 61 69 6e 2e 69 6e 74   PRAGMA main.int
a720: 65 67 72 69 74 79 5f 63 68 65 63 6b 3b 20 7d 0a  egrity_check; }.
a730: 7d 20 7b 6f 6b 7d 0a 64 6f 5f 74 65 73 74 20 32  } {ok}.do_test 2
a740: 32 2e 33 2e 33 20 7b 0a 20 20 65 78 65 63 73 71  2.3.3 {.  execsq
a750: 6c 20 7b 20 50 52 41 47 4d 41 20 61 75 78 2e 69  l { PRAGMA aux.i
a760: 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 3b 20  ntegrity_check; 
a770: 7d 0a 7d 20 24 61 75 78 65 72 72 0a 0a 64 6f 5f  }.} $auxerr..do_
a780: 74 65 73 74 20 32 32 2e 34 2e 31 20 7b 0a 20 20  test 22.4.1 {.  
a790: 63 61 74 63 68 20 7b 20 64 62 20 63 6c 6f 73 65  catch { db close
a7a0: 20 7d 0a 20 20 73 71 6c 69 74 65 33 20 64 62 20   }.  sqlite3 db 
a7b0: 74 65 73 74 65 72 72 2e 64 62 0a 20 20 65 78 65  testerr.db.  exe
a7c0: 63 73 71 6c 20 7b 20 0a 20 20 20 20 41 54 54 41  csql { .    ATTA
a7d0: 43 48 20 27 74 65 73 74 2e 64 62 27 20 41 53 20  CH 'test.db' AS 
a7e0: 27 61 75 78 27 3b 0a 20 20 20 20 50 52 41 47 4d  'aux';.    PRAGM
a7f0: 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63  A integrity_chec
a800: 6b 3b 0a 20 20 7d 0a 7d 20 24 6d 61 69 6e 65 72  k;.  }.} $mainer
a810: 72 0a 64 6f 5f 74 65 73 74 20 32 32 2e 34 2e 32  r.do_test 22.4.2
a820: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 50   {.  execsql { P
a830: 52 41 47 4d 41 20 6d 61 69 6e 2e 69 6e 74 65 67  RAGMA main.integ
a840: 72 69 74 79 5f 63 68 65 63 6b 3b 20 7d 0a 7d 20  rity_check; }.} 
a850: 24 6d 61 69 6e 65 72 72 0a 64 6f 5f 74 65 73 74  $mainerr.do_test
a860: 20 32 32 2e 34 2e 33 20 7b 0a 20 20 65 78 65 63   22.4.3 {.  exec
a870: 73 71 6c 20 7b 20 50 52 41 47 4d 41 20 61 75 78  sql { PRAGMA aux
a880: 2e 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b  .integrity_check
a890: 3b 20 7d 0a 7d 20 7b 6f 6b 7d 0a 0a 64 62 20 63  ; }.} {ok}..db c
a8a0: 6c 6f 73 65 0a 66 6f 72 63 65 64 65 6c 65 74 65  lose.forcedelete
a8b0: 20 74 65 73 74 2e 64 62 20 74 65 73 74 2e 64 62   test.db test.db
a8c0: 2d 77 61 6c 20 74 65 73 74 2e 64 62 2d 6a 6f 75  -wal test.db-jou
a8d0: 72 6e 61 6c 0a 73 71 6c 69 74 65 33 20 64 62 20  rnal.sqlite3 db 
a8e0: 74 65 73 74 2e 64 62 0a 73 71 6c 69 74 65 33 20  test.db.sqlite3 
a8f0: 64 62 32 20 74 65 73 74 2e 64 62 0a 64 6f 5f 74  db2 test.db.do_t
a900: 65 73 74 20 32 33 2e 31 20 7b 0a 20 20 64 62 20  est 23.1 {.  db 
a910: 65 76 61 6c 20 7b 0a 20 20 20 20 43 52 45 41 54  eval {.    CREAT
a920: 45 20 54 41 42 4c 45 20 74 31 28 61 20 49 4e 54  E TABLE t1(a INT
a930: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
a940: 2c 62 2c 63 2c 64 29 3b 0a 20 20 20 20 43 52 45  ,b,c,d);.    CRE
a950: 41 54 45 20 49 4e 44 45 58 20 69 31 20 4f 4e 20  ATE INDEX i1 ON 
a960: 74 31 28 62 2c 63 29 3b 0a 20 20 20 20 43 52 45  t1(b,c);.    CRE
a970: 41 54 45 20 49 4e 44 45 58 20 69 32 20 4f 4e 20  ATE INDEX i2 ON 
a980: 74 31 28 63 2c 64 29 3b 0a 20 20 20 20 43 52 45  t1(c,d);.    CRE
a990: 41 54 45 20 49 4e 44 45 58 20 69 32 78 20 4f 4e  ATE INDEX i2x ON
a9a0: 20 74 31 28 64 20 43 4f 4c 4c 41 54 45 20 6e 6f   t1(d COLLATE no
a9b0: 63 61 73 65 2c 20 63 20 44 45 53 43 29 3b 0a 20  case, c DESC);. 
a9c0: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
a9d0: 74 32 28 78 20 49 4e 54 45 47 45 52 20 52 45 46  t2(x INTEGER REF
a9e0: 45 52 45 4e 43 45 53 20 74 31 29 3b 0a 20 20 7d  ERENCES t1);.  }
a9f0: 0a 20 20 64 62 32 20 65 76 61 6c 20 7b 53 45 4c  .  db2 eval {SEL
aa00: 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71  ECT name FROM sq
aa10: 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b  lite_master}.} {
aa20: 74 31 20 69 31 20 69 32 20 69 32 78 20 74 32 7d  t1 i1 i2 i2x t2}
aa30: 0a 64 6f 5f 74 65 73 74 20 32 33 2e 32 61 20 7b  .do_test 23.2a {
aa40: 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a 20 20 20  .  db eval {.   
aa50: 20 44 52 4f 50 20 49 4e 44 45 58 20 69 32 3b 0a   DROP INDEX i2;.
aa60: 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45 58      CREATE INDEX
aa70: 20 69 32 20 4f 4e 20 74 31 28 63 2c 64 2c 62 29   i2 ON t1(c,d,b)
aa80: 3b 0a 20 20 7d 0a 20 20 63 61 70 74 75 72 65 5f  ;.  }.  capture_
aa90: 70 72 61 67 6d 61 20 64 62 32 20 6f 75 74 20 7b  pragma db2 out {
aaa0: 50 52 41 47 4d 41 20 69 6e 64 65 78 5f 69 6e 66  PRAGMA index_inf
aab0: 6f 28 69 32 29 7d 0a 20 20 64 62 32 20 65 76 61  o(i2)}.  db2 eva
aac0: 6c 20 7b 53 45 4c 45 43 54 20 63 69 64 2c 20 6e  l {SELECT cid, n
aad0: 61 6d 65 2c 20 27 7c 27 20 46 52 4f 4d 20 6f 75  ame, '|' FROM ou
aae0: 74 20 4f 52 44 45 52 20 42 59 20 73 65 71 6e 6f  t ORDER BY seqno
aaf0: 7d 0a 7d 20 7b 32 20 63 20 7c 20 33 20 64 20 7c  }.} {2 c | 3 d |
ab00: 20 31 20 62 20 7c 7d 0a 0a 23 20 45 56 49 44 45   1 b |}..# EVIDE
ab10: 4e 43 45 2d 4f 46 3a 20 52 2d 35 36 31 34 33 2d  NCE-OF: R-56143-
ab20: 32 39 33 31 39 20 50 52 41 47 4d 41 20 73 63 68  29319 PRAGMA sch
ab30: 65 6d 61 2e 69 6e 64 65 78 5f 78 69 6e 66 6f 28  ema.index_xinfo(
ab40: 69 6e 64 65 78 2d 6e 61 6d 65 29 3b 20 54 68 69  index-name); Thi
ab50: 73 0a 23 20 70 72 61 67 6d 61 20 72 65 74 75 72  s.# pragma retur
ab60: 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  ns information a
ab70: 62 6f 75 74 20 65 76 65 72 79 20 63 6f 6c 75 6d  bout every colum
ab80: 6e 20 69 6e 20 61 6e 20 69 6e 64 65 78 2e 0a 23  n in an index..#
ab90: 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20  .# EVIDENCE-OF: 
aba0: 52 2d 34 35 39 37 30 2d 33 35 36 31 38 20 55 6e  R-45970-35618 Un
abb0: 6c 69 6b 65 20 74 68 69 73 20 69 6e 64 65 78 5f  like this index_
abc0: 69 6e 66 6f 20 70 72 61 67 6d 61 2c 20 74 68 69  info pragma, thi
abd0: 73 20 70 72 61 67 6d 61 0a 23 20 72 65 74 75 72  s pragma.# retur
abe0: 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  ns information a
abf0: 62 6f 75 74 20 65 76 65 72 79 20 63 6f 6c 75 6d  bout every colum
ac00: 6e 20 69 6e 20 74 68 65 20 69 6e 64 65 78 2c 20  n in the index, 
ac10: 6e 6f 74 20 6a 75 73 74 20 74 68 65 20 6b 65 79  not just the key
ac20: 0a 23 20 63 6f 6c 75 6d 6e 73 2e 0a 23 0a 64 6f  .# columns..#.do
ac30: 5f 74 65 73 74 20 32 33 2e 32 62 20 7b 0a 20 20  _test 23.2b {.  
ac40: 63 61 70 74 75 72 65 5f 70 72 61 67 6d 61 20 64  capture_pragma d
ac50: 62 32 20 6f 75 74 20 7b 50 52 41 47 4d 41 20 69  b2 out {PRAGMA i
ac60: 6e 64 65 78 5f 78 69 6e 66 6f 28 69 32 29 7d 0a  ndex_xinfo(i2)}.
ac70: 20 20 64 62 32 20 65 76 61 6c 20 7b 53 45 4c 45    db2 eval {SELE
ac80: 43 54 20 63 69 64 2c 20 6e 61 6d 65 2c 20 22 64  CT cid, name, "d
ac90: 65 73 63 22 2c 20 63 6f 6c 6c 2c 20 22 6b 65 79  esc", coll, "key
aca0: 22 2c 20 27 7c 27 20 46 52 4f 4d 20 6f 75 74 20  ", '|' FROM out 
acb0: 4f 52 44 45 52 20 42 59 20 73 65 71 6e 6f 7d 0a  ORDER BY seqno}.
acc0: 7d 20 7b 32 20 63 20 30 20 42 49 4e 41 52 59 20  } {2 c 0 BINARY 
acd0: 31 20 7c 20 33 20 64 20 30 20 42 49 4e 41 52 59  1 | 3 d 0 BINARY
ace0: 20 31 20 7c 20 31 20 62 20 30 20 42 49 4e 41 52   1 | 1 b 0 BINAR
acf0: 59 20 31 20 7c 20 2d 31 20 7b 7d 20 30 20 42 49  Y 1 | -1 {} 0 BI
ad00: 4e 41 52 59 20 30 20 7c 7d 0a 0a 23 20 28 54 68  NARY 0 |}..# (Th
ad10: 65 20 66 69 72 73 74 20 63 6f 6c 75 6d 6e 20 6f  e first column o
ad20: 66 20 6f 75 74 70 75 74 20 66 72 6f 6d 20 50 52  f output from PR
ad30: 41 47 4d 41 20 69 6e 64 65 78 5f 78 69 6e 66 6f  AGMA index_xinfo
ad40: 20 69 73 2e 2e 2e 29 0a 23 20 45 56 49 44 45 4e   is...).# EVIDEN
ad50: 43 45 2d 4f 46 3a 20 52 2d 30 30 31 39 37 2d 31  CE-OF: R-00197-1
ad60: 34 32 37 39 20 54 68 65 20 72 61 6e 6b 20 6f 66  4279 The rank of
ad70: 20 74 68 65 20 63 6f 6c 75 6d 6e 20 77 69 74 68   the column with
ad80: 69 6e 20 74 68 65 20 69 6e 64 65 78 2e 20 28 30  in the index. (0
ad90: 0a 23 20 6d 65 61 6e 73 20 6c 65 66 74 2d 6d 6f  .# means left-mo
ada0: 73 74 2e 20 4b 65 79 20 63 6f 6c 75 6d 6e 73 20  st. Key columns 
adb0: 63 6f 6d 65 20 62 65 66 6f 72 65 20 61 75 78 69  come before auxi
adc0: 6c 69 61 72 79 20 63 6f 6c 75 6d 6e 73 2e 29 0a  liary columns.).
add0: 23 0a 23 20 28 54 68 65 20 73 65 63 6f 6e 64 20  #.# (The second 
ade0: 63 6f 6c 75 6d 6e 20 6f 66 20 6f 75 74 70 75 74  column of output
adf0: 20 66 72 6f 6d 20 50 52 41 47 4d 41 20 69 6e 64   from PRAGMA ind
ae00: 65 78 5f 78 69 6e 66 6f 20 69 73 2e 2e 2e 29 0a  ex_xinfo is...).
ae10: 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52  # EVIDENCE-OF: R
ae20: 2d 34 30 38 38 39 2d 30 36 38 33 38 20 54 68 65  -40889-06838 The
ae30: 20 72 61 6e 6b 20 6f 66 20 74 68 65 20 63 6f 6c   rank of the col
ae40: 75 6d 6e 20 77 69 74 68 69 6e 20 74 68 65 20 74  umn within the t
ae50: 61 62 6c 65 0a 23 20 62 65 69 6e 67 20 69 6e 64  able.# being ind
ae60: 65 78 65 64 2c 20 6f 72 20 2d 31 20 69 66 20 74  exed, or -1 if t
ae70: 68 65 20 69 6e 64 65 78 2d 63 6f 6c 75 6d 6e 20  he index-column 
ae80: 69 73 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20  is the rowid of 
ae90: 74 68 65 20 74 61 62 6c 65 0a 23 20 62 65 69 6e  the table.# bein
aea0: 67 20 69 6e 64 65 78 65 64 2e 0a 23 0a 23 20 28  g indexed..#.# (
aeb0: 54 68 65 20 74 68 69 72 64 20 63 6f 6c 75 6d 6e  The third column
aec0: 20 6f 66 20 6f 75 74 70 75 74 20 66 72 6f 6d 20   of output from 
aed0: 50 52 41 47 4d 41 20 69 6e 64 65 78 5f 78 69 6e  PRAGMA index_xin
aee0: 66 6f 20 69 73 2e 2e 2e 29 0a 23 20 45 56 49 44  fo is...).# EVID
aef0: 45 4e 43 45 2d 4f 46 3a 20 52 2d 32 32 37 35 31  ENCE-OF: R-22751
af00: 2d 32 38 39 30 31 20 54 68 65 20 6e 61 6d 65 20  -28901 The name 
af10: 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 62 65  of the column be
af20: 69 6e 67 20 69 6e 64 65 78 65 64 2c 20 6f 72 0a  ing indexed, or.
af30: 23 20 4e 55 4c 4c 20 69 66 20 74 68 65 20 69 6e  # NULL if the in
af40: 64 65 78 2d 63 6f 6c 75 6d 6e 20 69 73 20 74 68  dex-column is th
af50: 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20 74  e rowid of the t
af60: 61 62 6c 65 20 62 65 69 6e 67 20 69 6e 64 65 78  able being index
af70: 65 64 2e 0a 23 0a 23 20 28 54 68 65 20 66 6f 75  ed..#.# (The fou
af80: 72 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 6f 75  rth column of ou
af90: 74 70 75 74 20 66 72 6f 6d 20 50 52 41 47 4d 41  tput from PRAGMA
afa0: 20 69 6e 64 65 78 5f 78 69 6e 66 6f 20 69 73 2e   index_xinfo is.
afb0: 2e 2e 29 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f  ..).# EVIDENCE-O
afc0: 46 3a 20 52 2d 31 31 38 34 37 2d 30 39 31 37 39  F: R-11847-09179
afd0: 20 31 20 69 66 20 74 68 65 20 69 6e 64 65 78 2d   1 if the index-
afe0: 63 6f 6c 75 6d 6e 20 69 73 20 73 6f 72 74 65 64  column is sorted
aff0: 20 69 6e 20 72 65 76 65 72 73 65 0a 23 20 28 44   in reverse.# (D
b000: 45 53 43 29 20 6f 72 64 65 72 20 62 79 20 74 68  ESC) order by th
b010: 65 20 69 6e 64 65 78 20 61 6e 64 20 30 20 6f 74  e index and 0 ot
b020: 68 65 72 77 69 73 65 2e 0a 23 0a 23 20 28 54 68  herwise..#.# (Th
b030: 65 20 66 69 66 74 68 20 63 6f 6c 75 6d 6e 20 6f  e fifth column o
b040: 66 20 6f 75 74 70 75 74 20 66 72 6f 6d 20 50 52  f output from PR
b050: 41 47 4d 41 20 69 6e 64 65 78 5f 78 69 6e 66 6f  AGMA index_xinfo
b060: 20 69 73 2e 2e 2e 29 0a 23 20 45 56 49 44 45 4e   is...).# EVIDEN
b070: 43 45 2d 4f 46 3a 20 52 2d 31 35 33 31 33 2d 31  CE-OF: R-15313-1
b080: 39 35 34 30 20 54 68 65 20 6e 61 6d 65 20 66 6f  9540 The name fo
b090: 72 20 74 68 65 20 63 6f 6c 6c 61 74 69 6e 67 20  r the collating 
b0a0: 73 65 71 75 65 6e 63 65 20 75 73 65 64 20 74 6f  sequence used to
b0b0: 0a 23 20 63 6f 6d 70 61 72 65 20 76 61 6c 75 65  .# compare value
b0c0: 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78 2d 63  s in the index-c
b0d0: 6f 6c 75 6d 6e 2e 0a 23 0a 23 20 28 54 68 65 20  olumn..#.# (The 
b0e0: 73 69 78 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 20  sixth column of 
b0f0: 6f 75 74 70 75 74 20 66 72 6f 6d 20 50 52 41 47  output from PRAG
b100: 4d 41 20 69 6e 64 65 78 5f 78 69 6e 66 6f 20 69  MA index_xinfo i
b110: 73 2e 2e 2e 29 0a 23 20 45 56 49 44 45 4e 43 45  s...).# EVIDENCE
b120: 2d 4f 46 3a 20 52 2d 31 34 33 31 30 2d 36 34 35  -OF: R-14310-645
b130: 35 33 20 31 20 69 66 20 74 68 65 20 69 6e 64 65  53 1 if the inde
b140: 78 2d 63 6f 6c 75 6d 6e 20 69 73 20 61 20 6b 65  x-column is a ke
b150: 79 20 63 6f 6c 75 6d 6e 20 61 6e 64 20 30 0a 23  y column and 0.#
b160: 20 69 66 20 74 68 65 20 69 6e 64 65 78 2d 63 6f   if the index-co
b170: 6c 75 6d 6e 20 69 73 20 61 6e 20 61 75 78 69 6c  lumn is an auxil
b180: 69 61 72 79 20 63 6f 6c 75 6d 6e 2e 0a 23 0a 64  iary column..#.d
b190: 6f 5f 74 65 73 74 20 32 33 2e 32 63 20 7b 0a 20  o_test 23.2c {. 
b1a0: 20 64 62 32 20 65 76 61 6c 20 7b 50 52 41 47 4d   db2 eval {PRAGM
b1b0: 41 20 69 6e 64 65 78 5f 78 69 6e 66 6f 28 69 32  A index_xinfo(i2
b1c0: 29 7d 0a 7d 20 7b 30 20 32 20 63 20 30 20 42 49  )}.} {0 2 c 0 BI
b1d0: 4e 41 52 59 20 31 20 31 20 33 20 64 20 30 20 42  NARY 1 1 3 d 0 B
b1e0: 49 4e 41 52 59 20 31 20 32 20 31 20 62 20 30 20  INARY 1 2 1 b 0 
b1f0: 42 49 4e 41 52 59 20 31 20 33 20 2d 31 20 7b 7d  BINARY 1 3 -1 {}
b200: 20 30 20 42 49 4e 41 52 59 20 30 7d 0a 64 6f 5f   0 BINARY 0}.do_
b210: 74 65 73 74 20 32 33 2e 32 64 20 7b 0a 20 20 64  test 23.2d {.  d
b220: 62 32 20 65 76 61 6c 20 7b 50 52 41 47 4d 41 20  b2 eval {PRAGMA 
b230: 69 6e 64 65 78 5f 78 69 6e 66 6f 28 69 32 78 29  index_xinfo(i2x)
b240: 7d 0a 7d 20 7b 30 20 33 20 64 20 30 20 6e 6f 63  }.} {0 3 d 0 noc
b250: 61 73 65 20 31 20 31 20 32 20 63 20 31 20 42 49  ase 1 1 2 c 1 BI
b260: 4e 41 52 59 20 31 20 32 20 2d 31 20 7b 7d 20 30  NARY 1 2 -1 {} 0
b270: 20 42 49 4e 41 52 59 20 30 7d 0a 0a 23 20 45 56   BINARY 0}..# EV
b280: 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 36 34 31  IDENCE-OF: R-641
b290: 30 33 2d 31 37 37 37 36 20 50 52 41 47 4d 41 20  03-17776 PRAGMA 
b2a0: 73 63 68 65 6d 61 2e 69 6e 64 65 78 5f 6c 69 73  schema.index_lis
b2b0: 74 28 74 61 62 6c 65 2d 6e 61 6d 65 29 3b 20 54  t(table-name); T
b2c0: 68 69 73 0a 23 20 70 72 61 67 6d 61 20 72 65 74  his.# pragma ret
b2d0: 75 72 6e 73 20 6f 6e 65 20 72 6f 77 20 66 6f 72  urns one row for
b2e0: 20 65 61 63 68 20 69 6e 64 65 78 20 61 73 73 6f   each index asso
b2f0: 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20  ciated with the 
b300: 67 69 76 65 6e 20 74 61 62 6c 65 2e 0a 23 0a 23  given table..#.#
b310: 20 28 54 68 65 20 66 69 72 73 74 20 63 6f 6c 75   (The first colu
b320: 6d 6e 20 6f 66 20 6f 75 74 70 75 74 20 66 72 6f  mn of output fro
b330: 6d 20 50 52 41 47 4d 41 20 69 6e 64 65 78 5f 6c  m PRAGMA index_l
b340: 69 73 74 20 69 73 2e 2e 2e 29 0a 23 20 45 56 49  ist is...).# EVI
b350: 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 30 32 37 35  DENCE-OF: R-0275
b360: 33 2d 32 34 37 34 38 20 41 20 73 65 71 75 65 6e  3-24748 A sequen
b370: 63 65 20 6e 75 6d 62 65 72 20 61 73 73 69 67 6e  ce number assign
b380: 65 64 20 74 6f 20 65 61 63 68 20 69 6e 64 65 78  ed to each index
b390: 0a 23 20 66 6f 72 20 69 6e 74 65 72 6e 61 6c 20  .# for internal 
b3a0: 74 72 61 63 6b 69 6e 67 20 70 75 72 70 6f 73 65  tracking purpose
b3b0: 73 2e 0a 23 0a 23 20 28 54 68 65 20 73 65 63 6f  s..#.# (The seco
b3c0: 6e 64 20 63 6f 6c 75 6d 6e 20 6f 66 20 6f 75 74  nd column of out
b3d0: 70 75 74 20 66 72 6f 6d 20 50 52 41 47 4d 41 20  put from PRAGMA 
b3e0: 69 6e 64 65 78 5f 6c 69 73 74 20 69 73 2e 2e 2e  index_list is...
b3f0: 29 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a  ).# EVIDENCE-OF:
b400: 20 52 2d 33 35 34 39 36 2d 30 33 36 33 35 20 54   R-35496-03635 T
b410: 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 69  he name of the i
b420: 6e 64 65 78 2e 0a 23 0a 23 20 28 54 68 65 20 74  ndex..#.# (The t
b430: 68 69 72 64 20 63 6f 6c 75 6d 6e 20 6f 66 20 6f  hird column of o
b440: 75 74 70 75 74 20 66 72 6f 6d 20 50 52 41 47 4d  utput from PRAGM
b450: 41 20 69 6e 64 65 78 5f 6c 69 73 74 20 69 73 2e  A index_list is.
b460: 2e 2e 29 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f  ..).# EVIDENCE-O
b470: 46 3a 20 52 2d 35 37 33 30 31 2d 36 34 35 30 36  F: R-57301-64506
b480: 20 22 31 22 20 69 66 20 74 68 65 20 69 6e 64 65   "1" if the inde
b490: 78 20 69 73 20 55 4e 49 51 55 45 20 61 6e 64 20  x is UNIQUE and 
b4a0: 22 30 22 20 69 66 20 6e 6f 74 2e 0a 23 0a 23 20  "0" if not..#.# 
b4b0: 28 54 68 65 20 66 6f 75 72 74 68 20 63 6f 6c 75  (The fourth colu
b4c0: 6d 6e 20 6f 66 20 6f 75 74 70 75 74 20 66 72 6f  mn of output fro
b4d0: 6d 20 50 52 41 47 4d 41 20 69 6e 64 65 78 5f 6c  m PRAGMA index_l
b4e0: 69 73 74 20 69 73 2e 2e 2e 29 0a 23 20 45 56 49  ist is...).# EVI
b4f0: 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 33 36 36 30  DENCE-OF: R-3660
b500: 39 2d 33 39 35 35 34 20 22 63 22 20 69 66 20 74  9-39554 "c" if t
b510: 68 65 20 69 6e 64 65 78 20 77 61 73 20 63 72 65  he index was cre
b520: 61 74 65 64 20 62 79 20 61 20 43 52 45 41 54 45  ated by a CREATE
b530: 0a 23 20 49 4e 44 45 58 20 73 74 61 74 65 6d 65  .# INDEX stateme
b540: 6e 74 2c 20 22 75 22 20 69 66 20 74 68 65 20 69  nt, "u" if the i
b550: 6e 64 65 78 20 77 61 73 20 63 72 65 61 74 65 64  ndex was created
b560: 20 62 79 20 61 20 55 4e 49 51 55 45 20 63 6f 6e   by a UNIQUE con
b570: 73 74 72 61 69 6e 74 2c 0a 23 20 6f 72 20 22 70  straint,.# or "p
b580: 6b 22 20 69 66 20 74 68 65 20 69 6e 64 65 78 20  k" if the index 
b590: 77 61 73 20 63 72 65 61 74 65 64 20 62 79 20 61  was created by a
b5a0: 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63 6f 6e   PRIMARY KEY con
b5b0: 73 74 72 61 69 6e 74 2e 0a 23 0a 64 6f 5f 74 65  straint..#.do_te
b5c0: 73 74 20 32 33 2e 33 20 7b 0a 20 20 64 62 20 65  st 23.3 {.  db e
b5d0: 76 61 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45  val {.    CREATE
b5e0: 20 49 4e 44 45 58 20 69 33 20 4f 4e 20 74 31 28   INDEX i3 ON t1(
b5f0: 64 2c 62 2c 63 29 3b 0a 20 20 7d 0a 20 20 63 61  d,b,c);.  }.  ca
b600: 70 74 75 72 65 5f 70 72 61 67 6d 61 20 64 62 32  pture_pragma db2
b610: 20 6f 75 74 20 7b 50 52 41 47 4d 41 20 69 6e 64   out {PRAGMA ind
b620: 65 78 5f 6c 69 73 74 28 74 31 29 7d 0a 20 20 64  ex_list(t1)}.  d
b630: 62 32 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20  b2 eval {SELECT 
b640: 73 65 71 2c 20 6e 61 6d 65 2c 20 22 75 6e 69 71  seq, name, "uniq
b650: 75 65 22 2c 20 6f 72 69 67 69 6e 2c 20 27 7c 27  ue", origin, '|'
b660: 20 46 52 4f 4d 20 6f 75 74 20 4f 52 44 45 52 20   FROM out ORDER 
b670: 42 59 20 73 65 71 7d 0a 7d 20 7b 30 20 69 33 20  BY seq}.} {0 i3 
b680: 30 20 63 20 7c 20 31 20 69 32 20 30 20 63 20 7c  0 c | 1 i2 0 c |
b690: 20 32 20 69 32 78 20 30 20 63 20 7c 20 33 20 69   2 i2x 0 c | 3 i
b6a0: 31 20 30 20 63 20 7c 7d 0a 64 6f 5f 74 65 73 74  1 0 c |}.do_test
b6b0: 20 32 33 2e 34 20 7b 0a 20 20 64 62 20 65 76 61   23.4 {.  db eva
b6c0: 6c 20 7b 0a 20 20 20 20 41 4c 54 45 52 20 54 41  l {.    ALTER TA
b6d0: 42 4c 45 20 74 31 20 41 44 44 20 43 4f 4c 55 4d  BLE t1 ADD COLUM
b6e0: 4e 20 65 3b 0a 20 20 7d 0a 20 20 64 62 32 20 65  N e;.  }.  db2 e
b6f0: 76 61 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41  val {.    PRAGMA
b700: 20 74 61 62 6c 65 5f 69 6e 66 6f 28 74 31 29 3b   table_info(t1);
b710: 0a 20 20 7d 0a 7d 20 7b 2f 34 20 65 20 7b 7d 20  .  }.} {/4 e {} 
b720: 30 20 7b 7d 20 30 2f 7d 0a 64 6f 5f 74 65 73 74  0 {} 0/}.do_test
b730: 20 32 33 2e 35 20 7b 0a 20 20 64 62 20 65 76 61   23.5 {.  db eva
b740: 6c 20 7b 0a 20 20 20 20 44 52 4f 50 20 54 41 42  l {.    DROP TAB
b750: 4c 45 20 74 32 3b 0a 20 20 20 20 43 52 45 41 54  LE t2;.    CREAT
b760: 45 20 54 41 42 4c 45 20 74 32 28 78 2c 20 79 20  E TABLE t2(x, y 
b770: 49 4e 54 45 47 45 52 20 52 45 46 45 52 45 4e 43  INTEGER REFERENC
b780: 45 53 20 74 31 29 3b 0a 20 20 7d 0a 20 20 64 62  ES t1);.  }.  db
b790: 32 20 65 76 61 6c 20 7b 0a 20 20 20 20 50 52 41  2 eval {.    PRA
b7a0: 47 4d 41 20 66 6f 72 65 69 67 6e 5f 6b 65 79 5f  GMA foreign_key_
b7b0: 6c 69 73 74 28 74 32 29 3b 0a 20 20 7d 0a 7d 20  list(t2);.  }.} 
b7c0: 7b 30 20 30 20 74 31 20 79 20 7b 7d 20 7b 4e 4f  {0 0 t1 y {} {NO
b7d0: 20 41 43 54 49 4f 4e 7d 20 7b 4e 4f 20 41 43 54   ACTION} {NO ACT
b7e0: 49 4f 4e 7d 20 4e 4f 4e 45 7d 0a 0a 64 61 74 61  ION} NONE}..data
b7f0: 62 61 73 65 5f 6e 65 76 65 72 5f 63 6f 72 72 75  base_never_corru
b800: 70 74 0a 66 69 6e 69 73 68 5f 74 65 73 74 0a     pt.finish_test.