/ Hex Artifact Content
Login

Artifact c267bf02742c823a191960895b3d52933cebd7beee26757d1ed694f213fcd867:


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 73 71 6c 69 74 65 33  tions..#.sqlite3
3500: 5f 64 62 5f 63 6f 6e 66 69 67 20 64 62 20 44 45  _db_config db DE
3510: 46 45 4e 53 49 56 45 20 30 0a 64 6f 5f 65 78 65  FENSIVE 0.do_exe
3520: 63 73 71 6c 5f 74 65 73 74 20 70 72 61 67 6d 61  csql_test pragma
3530: 2d 33 2e 32 30 20 7b 0a 20 20 43 52 45 41 54 45  -3.20 {.  CREATE
3540: 20 54 41 42 4c 45 20 74 31 28 61 2c 62 29 3b 0a   TABLE t1(a,b);.
3550: 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 74    CREATE INDEX t
3560: 31 61 20 4f 4e 20 74 31 28 61 29 3b 0a 20 20 49  1a ON t1(a);.  I
3570: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41  NSERT INTO t1 VA
3580: 4c 55 45 53 28 31 2c 31 29 2c 28 32 2c 32 29 2c  LUES(1,1),(2,2),
3590: 28 33 2c 33 29 2c 28 32 2c 34 29 2c 28 4e 55 4c  (3,3),(2,4),(NUL
35a0: 4c 2c 35 29 2c 28 4e 55 4c 4c 2c 36 29 3b 0a 20  L,5),(NULL,6);. 
35b0: 20 50 52 41 47 4d 41 20 77 72 69 74 61 62 6c 65   PRAGMA writable
35c0: 5f 73 63 68 65 6d 61 3d 4f 4e 3b 0a 20 20 55 50  _schema=ON;.  UP
35d0: 44 41 54 45 20 73 71 6c 69 74 65 5f 6d 61 73 74  DATE sqlite_mast
35e0: 65 72 20 53 45 54 20 73 71 6c 3d 27 43 52 45 41  er SET sql='CREA
35f0: 54 45 20 55 4e 49 51 55 45 20 49 4e 44 45 58 20  TE UNIQUE INDEX 
3600: 74 31 61 20 4f 4e 20 74 31 28 61 29 27 0a 20 20  t1a ON t1(a)'.  
3610: 20 57 48 45 52 45 20 6e 61 6d 65 3d 27 74 31 61   WHERE name='t1a
3620: 27 3b 0a 20 20 55 50 44 41 54 45 20 73 71 6c 69  ';.  UPDATE sqli
3630: 74 65 5f 6d 61 73 74 65 72 20 53 45 54 20 73 71  te_master SET sq
3640: 6c 3d 27 43 52 45 41 54 45 20 54 41 42 4c 45 20  l='CREATE TABLE 
3650: 74 31 28 61 20 4e 4f 54 20 4e 55 4c 4c 2c 62 29  t1(a NOT NULL,b)
3660: 27 0a 20 20 20 57 48 45 52 45 20 6e 61 6d 65 3d  '.   WHERE name=
3670: 27 74 31 27 3b 0a 20 20 50 52 41 47 4d 41 20 77  't1';.  PRAGMA w
3680: 72 69 74 61 62 6c 65 5f 73 63 68 65 6d 61 3d 4f  ritable_schema=O
3690: 46 46 3b 0a 20 20 41 4c 54 45 52 20 54 41 42 4c  FF;.  ALTER TABL
36a0: 45 20 74 31 20 52 45 4e 41 4d 45 20 54 4f 20 74  E t1 RENAME TO t
36b0: 31 78 3b 0a 20 20 50 52 41 47 4d 41 20 69 6e 74  1x;.  PRAGMA int
36c0: 65 67 72 69 74 79 5f 63 68 65 63 6b 3b 0a 7d 20  egrity_check;.} 
36d0: 7b 7b 6e 6f 6e 2d 75 6e 69 71 75 65 20 65 6e 74  {{non-unique ent
36e0: 72 79 20 69 6e 20 69 6e 64 65 78 20 74 31 61 7d  ry in index t1a}
36f0: 20 7b 4e 55 4c 4c 20 76 61 6c 75 65 20 69 6e 20   {NULL value in 
3700: 74 31 78 2e 61 7d 20 7b 6e 6f 6e 2d 75 6e 69 71  t1x.a} {non-uniq
3710: 75 65 20 65 6e 74 72 79 20 69 6e 20 69 6e 64 65  ue entry in inde
3720: 78 20 74 31 61 7d 20 7b 4e 55 4c 4c 20 76 61 6c  x t1a} {NULL val
3730: 75 65 20 69 6e 20 74 31 78 2e 61 7d 7d 0a 64 6f  ue in t1x.a}}.do
3740: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 70 72  _execsql_test pr
3750: 61 67 6d 61 2d 33 2e 32 31 20 7b 0a 20 20 50 52  agma-3.21 {.  PR
3760: 41 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63  AGMA integrity_c
3770: 68 65 63 6b 28 33 29 3b 0a 7d 20 7b 7b 6e 6f 6e  heck(3);.} {{non
3780: 2d 75 6e 69 71 75 65 20 65 6e 74 72 79 20 69 6e  -unique entry in
3790: 20 69 6e 64 65 78 20 74 31 61 7d 20 7b 4e 55 4c   index t1a} {NUL
37a0: 4c 20 76 61 6c 75 65 20 69 6e 20 74 31 78 2e 61  L value in t1x.a
37b0: 7d 20 7b 6e 6f 6e 2d 75 6e 69 71 75 65 20 65 6e  } {non-unique en
37c0: 74 72 79 20 69 6e 20 69 6e 64 65 78 20 74 31 61  try in index t1a
37d0: 7d 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  }}.do_execsql_te
37e0: 73 74 20 70 72 61 67 6d 61 2d 33 2e 32 32 20 7b  st pragma-3.22 {
37f0: 0a 20 20 50 52 41 47 4d 41 20 69 6e 74 65 67 72  .  PRAGMA integr
3800: 69 74 79 5f 63 68 65 63 6b 28 32 29 3b 0a 7d 20  ity_check(2);.} 
3810: 7b 7b 6e 6f 6e 2d 75 6e 69 71 75 65 20 65 6e 74  {{non-unique ent
3820: 72 79 20 69 6e 20 69 6e 64 65 78 20 74 31 61 7d  ry in index t1a}
3830: 20 7b 4e 55 4c 4c 20 76 61 6c 75 65 20 69 6e 20   {NULL value in 
3840: 74 31 78 2e 61 7d 7d 0a 64 6f 5f 65 78 65 63 73  t1x.a}}.do_execs
3850: 71 6c 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 33  ql_test pragma-3
3860: 2e 32 33 20 7b 0a 20 20 50 52 41 47 4d 41 20 69  .23 {.  PRAGMA i
3870: 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 28 31  ntegrity_check(1
3880: 29 3b 0a 7d 20 7b 7b 6e 6f 6e 2d 75 6e 69 71 75  );.} {{non-uniqu
3890: 65 20 65 6e 74 72 79 20 69 6e 20 69 6e 64 65 78  e entry in index
38a0: 20 74 31 61 7d 7d 0a 0a 23 20 50 52 41 47 4d 41   t1a}}..# PRAGMA
38b0: 20 69 6e 74 65 67 72 69 74 79 20 63 68 65 63 6b   integrity check
38c0: 20 28 6f 72 20 6d 6f 72 65 20 73 70 65 63 69 66   (or more specif
38d0: 69 63 61 6c 6c 79 20 74 68 65 20 73 71 6c 69 74  ically the sqlit
38e0: 65 33 42 74 72 65 65 43 6f 75 6e 74 28 29 0a 23  e3BtreeCount().#
38f0: 20 69 6e 74 65 72 66 61 63 65 29 20 75 73 65 64   interface) used
3900: 20 74 6f 20 6c 65 61 76 65 20 69 6e 64 65 78 20   to leave index 
3910: 63 75 72 73 6f 72 73 20 69 6e 20 61 6e 20 69 6e  cursors in an in
3920: 63 6f 6e 73 69 73 74 65 6e 74 20 73 74 61 74 65  consistent state
3930: 0a 23 20 77 68 69 63 68 20 63 6f 75 6c 64 20 72  .# which could r
3940: 65 73 75 6c 74 20 69 6e 20 61 6e 20 61 73 73 65  esult in an asse
3950: 72 74 69 6f 6e 20 66 61 75 6c 74 20 69 6e 20 73  rtion fault in s
3960: 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 28 29  qlite3BtreeKey()
3970: 0a 23 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20 73  .# called from s
3980: 61 76 65 43 75 72 73 6f 72 50 6f 73 69 74 69 6f  aveCursorPositio
3990: 6e 28 29 20 69 66 20 63 6f 6e 74 65 6e 74 20 69  n() if content i
39a0: 73 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d 20 74  s removed from t
39b0: 68 65 0a 23 20 69 6e 64 65 78 20 77 68 69 6c 65  he.# index while
39c0: 20 74 68 65 20 69 6e 74 65 67 72 69 74 79 5f 63   the integrity_c
39d0: 68 65 63 6b 20 69 73 20 73 74 69 6c 6c 20 72 75  heck is still ru
39e0: 6e 6e 69 6e 67 2e 20 20 54 68 69 73 20 74 65 73  nning.  This tes
39f0: 74 20 76 65 72 69 66 69 65 73 0a 23 20 74 68 61  t verifies.# tha
3a00: 74 20 70 72 6f 62 6c 65 6d 20 68 61 73 20 62 65  t problem has be
3a10: 65 6e 20 66 69 78 65 64 2e 0a 23 0a 64 6f 5f 74  en fixed..#.do_t
3a20: 65 73 74 20 70 72 61 67 6d 61 2d 33 2e 33 30 20  est pragma-3.30 
3a30: 7b 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 64  {.  db close.  d
3a40: 65 6c 65 74 65 5f 66 69 6c 65 20 74 65 73 74 2e  elete_file test.
3a50: 64 62 0a 20 20 73 71 6c 69 74 65 33 20 64 62 20  db.  sqlite3 db 
3a60: 74 65 73 74 2e 64 62 0a 20 20 64 62 20 65 76 61  test.db.  db eva
3a70: 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54  l {.    CREATE T
3a80: 41 42 4c 45 20 74 31 28 61 2c 62 2c 63 29 3b 0a  ABLE t1(a,b,c);.
3a90: 20 20 20 20 57 49 54 48 20 52 45 43 55 52 53 49      WITH RECURSI
3aa0: 56 45 0a 20 20 20 20 20 20 63 28 69 29 20 41 53  VE.      c(i) AS
3ab0: 20 28 56 41 4c 55 45 53 28 31 29 20 55 4e 49 4f   (VALUES(1) UNIO
3ac0: 4e 20 41 4c 4c 20 53 45 4c 45 43 54 20 69 2b 31  N ALL SELECT i+1
3ad0: 20 46 52 4f 4d 20 63 20 57 48 45 52 45 20 69 3c   FROM c WHERE i<
3ae0: 31 30 30 29 0a 20 20 20 20 49 4e 53 45 52 54 20  100).    INSERT 
3af0: 49 4e 54 4f 20 74 31 28 61 2c 62 2c 63 29 20 53  INTO t1(a,b,c) S
3b00: 45 4c 45 43 54 20 69 2c 20 70 72 69 6e 74 66 28  ELECT i, printf(
3b10: 27 78 79 7a 25 30 38 78 27 2c 69 29 2c 20 32 30  'xyz%08x',i), 20
3b20: 30 30 2d 69 20 46 52 4f 4d 20 63 3b 0a 20 20 20  00-i FROM c;.   
3b30: 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 74 31   CREATE INDEX t1
3b40: 61 20 4f 4e 20 74 31 28 61 29 3b 0a 20 20 20 20  a ON t1(a);.    
3b50: 43 52 45 41 54 45 20 49 4e 44 45 58 20 74 31 62  CREATE INDEX t1b
3b60: 63 20 4f 4e 20 74 31 28 62 2c 63 29 3b 0a 20 20  c ON t1(b,c);.  
3b70: 7d 0a 20 20 64 62 20 65 76 61 6c 20 7b 50 52 41  }.  db eval {PRA
3b80: 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68  GMA integrity_ch
3b90: 65 63 6b 7d 20 7b 0a 20 20 20 20 20 64 62 20 65  eck} {.     db e
3ba0: 76 61 6c 20 7b 44 45 4c 45 54 45 20 46 52 4f 4d  val {DELETE FROM
3bb0: 20 74 31 7d 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a 23   t1}.  }.} {}..#
3bc0: 20 54 65 73 74 20 6d 6f 64 69 66 79 69 6e 67 20   Test modifying 
3bd0: 74 68 65 20 63 61 63 68 65 5f 73 69 7a 65 20 6f  the cache_size o
3be0: 66 20 61 6e 20 61 74 74 61 63 68 65 64 20 64 61  f an attached da
3bf0: 74 61 62 61 73 65 2e 0a 69 66 63 61 70 61 62 6c  tabase..ifcapabl
3c00: 65 20 70 61 67 65 72 5f 70 72 61 67 6d 61 73 26  e pager_pragmas&
3c10: 26 61 74 74 61 63 68 20 7b 0a 64 6f 5f 74 65 73  &attach {.do_tes
3c20: 74 20 70 72 61 67 6d 61 2d 34 2e 31 20 7b 0a 20  t pragma-4.1 {. 
3c30: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 41   execsql {.    A
3c40: 54 54 41 43 48 20 27 74 65 73 74 32 2e 64 62 27  TTACH 'test2.db'
3c50: 20 41 53 20 61 75 78 3b 0a 20 20 20 20 70 72 61   AS aux;.    pra
3c60: 67 6d 61 20 61 75 78 2e 63 61 63 68 65 5f 73 69  gma aux.cache_si
3c70: 7a 65 3b 0a 20 20 20 20 70 72 61 67 6d 61 20 61  ze;.    pragma a
3c80: 75 78 2e 64 65 66 61 75 6c 74 5f 63 61 63 68 65  ux.default_cache
3c90: 5f 73 69 7a 65 3b 0a 20 20 7d 20 0a 7d 20 5b 6c  _size;.  } .} [l
3ca0: 69 73 74 20 24 44 46 4c 54 5f 43 41 43 48 45 5f  ist $DFLT_CACHE_
3cb0: 53 5a 20 24 44 46 4c 54 5f 43 41 43 48 45 5f 53  SZ $DFLT_CACHE_S
3cc0: 5a 5d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  Z].do_test pragm
3cd0: 61 2d 34 2e 32 20 7b 0a 20 20 65 78 65 63 73 71  a-4.2 {.  execsq
3ce0: 6c 20 7b 0a 20 20 20 20 70 72 61 67 6d 61 20 61  l {.    pragma a
3cf0: 75 78 2e 63 61 63 68 65 5f 73 69 7a 65 20 3d 20  ux.cache_size = 
3d00: 35 30 3b 0a 20 20 20 20 70 72 61 67 6d 61 20 61  50;.    pragma a
3d10: 75 78 2e 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20  ux.cache_size;. 
3d20: 20 20 20 70 72 61 67 6d 61 20 61 75 78 2e 64 65     pragma aux.de
3d30: 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65  fault_cache_size
3d40: 3b 0a 20 20 7d 20 0a 7d 20 5b 6c 69 73 74 20 35  ;.  } .} [list 5
3d50: 30 20 24 44 46 4c 54 5f 43 41 43 48 45 5f 53 5a  0 $DFLT_CACHE_SZ
3d60: 5d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  ].do_test pragma
3d70: 2d 34 2e 33 20 7b 0a 20 20 65 78 65 63 73 71 6c  -4.3 {.  execsql
3d80: 20 7b 0a 20 20 20 20 70 72 61 67 6d 61 20 61 75   {.    pragma au
3d90: 78 2e 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f  x.default_cache_
3da0: 73 69 7a 65 20 3d 20 34 35 36 3b 0a 20 20 20 20  size = 456;.    
3db0: 70 72 61 67 6d 61 20 61 75 78 2e 63 61 63 68 65  pragma aux.cache
3dc0: 5f 73 69 7a 65 3b 0a 20 20 20 20 70 72 61 67 6d  _size;.    pragm
3dd0: 61 20 61 75 78 2e 64 65 66 61 75 6c 74 5f 63 61  a aux.default_ca
3de0: 63 68 65 5f 73 69 7a 65 3b 0a 20 20 7d 20 0a 7d  che_size;.  } .}
3df0: 20 7b 34 35 36 20 34 35 36 7d 0a 64 6f 5f 74 65   {456 456}.do_te
3e00: 73 74 20 70 72 61 67 6d 61 2d 34 2e 34 20 7b 0a  st pragma-4.4 {.
3e10: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
3e20: 70 72 61 67 6d 61 20 63 61 63 68 65 5f 73 69 7a  pragma cache_siz
3e30: 65 3b 0a 20 20 20 20 70 72 61 67 6d 61 20 64 65  e;.    pragma de
3e40: 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65  fault_cache_size
3e50: 3b 0a 20 20 7d 20 0a 7d 20 5b 6c 69 73 74 20 24  ;.  } .} [list $
3e60: 44 46 4c 54 5f 43 41 43 48 45 5f 53 5a 20 24 44  DFLT_CACHE_SZ $D
3e70: 46 4c 54 5f 43 41 43 48 45 5f 53 5a 5d 0a 64 6f  FLT_CACHE_SZ].do
3e80: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 34 2e 35  _test pragma-4.5
3e90: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
3ea0: 20 20 20 44 45 54 41 43 48 20 61 75 78 3b 0a 20     DETACH aux;. 
3eb0: 20 20 20 41 54 54 41 43 48 20 27 74 65 73 74 33     ATTACH 'test3
3ec0: 2e 64 62 27 20 41 53 20 61 75 78 3b 0a 20 20 20  .db' AS aux;.   
3ed0: 20 70 72 61 67 6d 61 20 61 75 78 2e 63 61 63 68   pragma aux.cach
3ee0: 65 5f 73 69 7a 65 3b 0a 20 20 20 20 70 72 61 67  e_size;.    prag
3ef0: 6d 61 20 61 75 78 2e 64 65 66 61 75 6c 74 5f 63  ma aux.default_c
3f00: 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 7d 20 0a  ache_size;.  } .
3f10: 7d 20 5b 6c 69 73 74 20 24 44 46 4c 54 5f 43 41  } [list $DFLT_CA
3f20: 43 48 45 5f 53 5a 20 24 44 46 4c 54 5f 43 41 43  CHE_SZ $DFLT_CAC
3f30: 48 45 5f 53 5a 5d 0a 64 6f 5f 74 65 73 74 20 70  HE_SZ].do_test p
3f40: 72 61 67 6d 61 2d 34 2e 36 20 7b 0a 20 20 65 78  ragma-4.6 {.  ex
3f50: 65 63 73 71 6c 20 7b 0a 20 20 20 20 44 45 54 41  ecsql {.    DETA
3f60: 43 48 20 61 75 78 3b 0a 20 20 20 20 41 54 54 41  CH aux;.    ATTA
3f70: 43 48 20 27 74 65 73 74 32 2e 64 62 27 20 41 53  CH 'test2.db' AS
3f80: 20 61 75 78 3b 0a 20 20 20 20 70 72 61 67 6d 61   aux;.    pragma
3f90: 20 61 75 78 2e 63 61 63 68 65 5f 73 69 7a 65 3b   aux.cache_size;
3fa0: 0a 20 20 20 20 70 72 61 67 6d 61 20 61 75 78 2e  .    pragma aux.
3fb0: 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69  default_cache_si
3fc0: 7a 65 3b 0a 20 20 7d 20 0a 7d 20 7b 34 35 36 20  ze;.  } .} {456 
3fd0: 34 35 36 7d 0a 7d 20 3b 23 20 69 66 63 61 70 61  456}.} ;# ifcapa
3fe0: 62 6c 65 20 70 61 67 65 72 5f 70 72 61 67 6d 61  ble pager_pragma
3ff0: 73 0a 0a 23 20 54 65 73 74 20 74 68 61 74 20 6d  s..# Test that m
4000: 6f 64 69 66 79 69 6e 67 20 74 68 65 20 73 79 6e  odifying the syn
4010: 63 2d 6c 65 76 65 6c 20 69 6e 20 74 68 65 20 6d  c-level in the m
4020: 69 64 64 6c 65 20 6f 66 20 61 20 74 72 61 6e 73  iddle of a trans
4030: 61 63 74 69 6f 6e 20 69 73 0a 23 20 64 69 73 61  action is.# disa
4040: 6c 6c 6f 77 65 64 2e 0a 69 66 63 61 70 61 62 6c  llowed..ifcapabl
4050: 65 20 70 61 67 65 72 5f 70 72 61 67 6d 61 73 20  e pager_pragmas 
4060: 7b 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  {.do_test pragma
4070: 2d 35 2e 30 20 7b 0a 20 20 65 78 65 63 73 71 6c  -5.0 {.  execsql
4080: 20 7b 0a 20 20 20 20 70 72 61 67 6d 61 20 73 79   {.    pragma sy
4090: 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20 20 7d 20 0a  nchronous;.  } .
40a0: 7d 20 7b 32 7d 0a 64 6f 5f 74 65 73 74 20 70 72  } {2}.do_test pr
40b0: 61 67 6d 61 2d 35 2e 31 20 7b 0a 20 20 63 61 74  agma-5.1 {.  cat
40c0: 63 68 73 71 6c 20 7b 0a 20 20 20 20 42 45 47 49  chsql {.    BEGI
40d0: 4e 3b 0a 20 20 20 20 70 72 61 67 6d 61 20 73 79  N;.    pragma sy
40e0: 6e 63 68 72 6f 6e 6f 75 73 20 3d 20 4f 46 46 3b  nchronous = OFF;
40f0: 0a 20 20 7d 20 0a 7d 20 7b 31 20 7b 53 61 66 65  .  } .} {1 {Safe
4100: 74 79 20 6c 65 76 65 6c 20 6d 61 79 20 6e 6f 74  ty level may not
4110: 20 62 65 20 63 68 61 6e 67 65 64 20 69 6e 73 69   be changed insi
4120: 64 65 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  de a transaction
4130: 7d 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  }}.do_test pragm
4140: 61 2d 35 2e 32 20 7b 0a 20 20 65 78 65 63 73 71  a-5.2 {.  execsq
4150: 6c 20 7b 0a 20 20 20 20 70 72 61 67 6d 61 20 73  l {.    pragma s
4160: 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20 20 7d 20  ynchronous;.  } 
4170: 0a 7d 20 7b 32 7d 0a 63 61 74 63 68 73 71 6c 20  .} {2}.catchsql 
4180: 7b 43 4f 4d 4d 49 54 3b 7d 0a 7d 20 3b 23 20 69  {COMMIT;}.} ;# i
4190: 66 63 61 70 61 62 6c 65 20 70 61 67 65 72 5f 70  fcapable pager_p
41a0: 72 61 67 6d 61 73 0a 0a 23 20 54 65 73 74 20 73  ragmas..# Test s
41b0: 63 68 65 6d 61 2d 71 75 65 72 79 20 70 72 61 67  chema-query prag
41c0: 6d 61 73 0a 23 0a 69 66 63 61 70 61 62 6c 65 20  mas.#.ifcapable 
41d0: 73 63 68 65 6d 61 5f 70 72 61 67 6d 61 73 20 7b  schema_pragmas {
41e0: 0a 69 66 63 61 70 61 62 6c 65 20 74 65 6d 70 64  .ifcapable tempd
41f0: 62 26 26 61 74 74 61 63 68 20 7b 0a 20 20 64 6f  b&&attach {.  do
4200: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 36 2e 31  _test pragma-6.1
4210: 20 7b 0a 20 20 20 20 73 65 74 20 72 65 73 20 7b   {.    set res {
4220: 7d 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 53  }.    execsql {S
4230: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 73 71 6c  ELECT * FROM sql
4240: 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 7d  ite_temp_master}
4250: 0a 20 20 20 20 66 6f 72 65 61 63 68 20 7b 69 64  .    foreach {id
4260: 78 20 6e 61 6d 65 20 66 69 6c 65 7d 20 5b 65 78  x name file} [ex
4270: 65 63 73 71 6c 20 7b 70 72 61 67 6d 61 20 64 61  ecsql {pragma da
4280: 74 61 62 61 73 65 5f 6c 69 73 74 7d 5d 20 7b 0a  tabase_list}] {.
4290: 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65        lappend re
42a0: 73 20 24 69 64 78 20 24 6e 61 6d 65 0a 20 20 20  s $idx $name.   
42b0: 20 7d 0a 20 20 20 20 73 65 74 20 72 65 73 0a 20   }.    set res. 
42c0: 20 7d 20 7b 30 20 6d 61 69 6e 20 31 20 74 65 6d   } {0 main 1 tem
42d0: 70 20 32 20 61 75 78 7d 0a 7d 0a 64 6f 5f 74 65  p 2 aux}.}.do_te
42e0: 73 74 20 70 72 61 67 6d 61 2d 36 2e 32 20 7b 0a  st pragma-6.2 {.
42f0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
4300: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 32 28  CREATE TABLE t2(
4310: 61 20 54 59 50 45 5f 58 2c 20 62 20 5b 54 59 50  a TYPE_X, b [TYP
4320: 45 5f 59 5d 2c 20 63 20 22 54 59 50 45 5f 5a 22  E_Y], c "TYPE_Z"
4330: 29 3b 0a 20 20 20 20 70 72 61 67 6d 61 20 74 61  );.    pragma ta
4340: 62 6c 65 5f 69 6e 66 6f 28 74 32 29 0a 20 20 7d  ble_info(t2).  }
4350: 0a 7d 20 7b 30 20 61 20 54 59 50 45 5f 58 20 30  .} {0 a TYPE_X 0
4360: 20 7b 7d 20 30 20 31 20 62 20 54 59 50 45 5f 59   {} 0 1 b TYPE_Y
4370: 20 30 20 7b 7d 20 30 20 32 20 63 20 54 59 50 45   0 {} 0 2 c TYPE
4380: 5f 5a 20 30 20 7b 7d 20 30 7d 0a 64 6f 5f 74 65  _Z 0 {} 0}.do_te
4390: 73 74 20 70 72 61 67 6d 61 2d 36 2e 32 2e 31 20  st pragma-6.2.1 
43a0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
43b0: 20 20 70 72 61 67 6d 61 20 74 61 62 6c 65 5f 69    pragma table_i
43c0: 6e 66 6f 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 62  nfo;.  }.} {}.db
43d0: 20 6e 75 6c 6c 76 61 6c 75 65 20 3c 3c 4e 55 4c   nullvalue <<NUL
43e0: 4c 3e 3e 0a 64 6f 5f 74 65 73 74 20 70 72 61 67  L>>.do_test prag
43f0: 6d 61 2d 36 2e 32 2e 32 20 7b 0a 20 20 65 78 65  ma-6.2.2 {.  exe
4400: 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54  csql {.    CREAT
4410: 45 20 54 41 42 4c 45 20 74 35 28 0a 20 20 20 20  E TABLE t5(.    
4420: 20 20 61 20 54 45 58 54 20 44 45 46 41 55 4c 54    a TEXT DEFAULT
4430: 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 53 54 41   CURRENT_TIMESTA
4440: 4d 50 2c 20 0a 20 20 20 20 20 20 62 20 44 45 46  MP, .      b DEF
4450: 41 55 4c 54 20 28 35 2b 33 29 2c 0a 20 20 20 20  AULT (5+3),.    
4460: 20 20 63 20 54 45 58 54 2c 0a 20 20 20 20 20 20    c TEXT,.      
4470: 64 20 49 4e 54 45 47 45 52 20 44 45 46 41 55 4c  d INTEGER DEFAUL
4480: 54 20 4e 55 4c 4c 2c 0a 20 20 20 20 20 20 65 20  T NULL,.      e 
4490: 54 45 58 54 20 44 45 46 41 55 4c 54 20 27 27 2c  TEXT DEFAULT '',
44a0: 0a 20 20 20 20 20 20 55 4e 49 51 55 45 28 62 2c  .      UNIQUE(b,
44b0: 63 2c 64 29 2c 0a 20 20 20 20 20 20 50 52 49 4d  c,d),.      PRIM
44c0: 41 52 59 20 4b 45 59 28 65 2c 62 2c 63 29 0a 20  ARY KEY(e,b,c). 
44d0: 20 20 20 29 3b 0a 20 20 20 20 50 52 41 47 4d 41     );.    PRAGMA
44e0: 20 74 61 62 6c 65 5f 69 6e 66 6f 28 74 35 29 3b   table_info(t5);
44f0: 0a 20 20 7d 0a 7d 20 7b 30 20 61 20 54 45 58 54  .  }.} {0 a TEXT
4500: 20 30 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 53   0 CURRENT_TIMES
4510: 54 41 4d 50 20 30 20 31 20 62 20 7b 7d 20 30 20  TAMP 0 1 b {} 0 
4520: 35 2b 33 20 32 20 32 20 63 20 54 45 58 54 20 30  5+3 2 2 c TEXT 0
4530: 20 3c 3c 4e 55 4c 4c 3e 3e 20 33 20 33 20 64 20   <<NULL>> 3 3 d 
4540: 49 4e 54 45 47 45 52 20 30 20 4e 55 4c 4c 20 30  INTEGER 0 NULL 0
4550: 20 34 20 65 20 54 45 58 54 20 30 20 27 27 20 31   4 e TEXT 0 '' 1
4560: 7d 0a 64 62 20 6e 75 6c 6c 76 61 6c 75 65 20 7b  }.db nullvalue {
4570: 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  }.do_test pragma
4580: 2d 36 2e 32 2e 33 20 7b 0a 20 20 65 78 65 63 73  -6.2.3 {.  execs
4590: 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20  ql {.    CREATE 
45a0: 54 41 42 4c 45 20 74 32 5f 33 28 61 2c 62 20 49  TABLE t2_3(a,b I
45b0: 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
45c0: 45 59 2c 63 29 3b 0a 20 20 20 20 70 72 61 67 6d  EY,c);.    pragm
45d0: 61 20 74 61 62 6c 65 5f 69 6e 66 6f 28 74 32 5f  a table_info(t2_
45e0: 33 29 0a 20 20 7d 0a 7d 20 7b 30 20 61 20 7b 7d  3).  }.} {0 a {}
45f0: 20 30 20 7b 7d 20 30 20 31 20 62 20 49 4e 54 45   0 {} 0 1 b INTE
4600: 47 45 52 20 30 20 7b 7d 20 31 20 32 20 63 20 7b  GER 0 {} 1 2 c {
4610: 7d 20 30 20 7b 7d 20 30 7d 0a 69 66 63 61 70 61  } 0 {} 0}.ifcapa
4620: 62 6c 65 20 7b 66 6f 72 65 69 67 6e 6b 65 79 7d  ble {foreignkey}
4630: 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61   {.  do_test pra
4640: 67 6d 61 2d 36 2e 33 2e 31 20 7b 0a 20 20 20 20  gma-6.3.1 {.    
4650: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
4660: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 33 28  CREATE TABLE t3(
4670: 61 20 69 6e 74 20 72 65 66 65 72 65 6e 63 65 73  a int references
4680: 20 74 32 28 62 29 2c 20 62 20 55 4e 49 51 55 45   t2(b), b UNIQUE
4690: 29 3b 0a 20 20 20 20 20 20 70 72 61 67 6d 61 20  );.      pragma 
46a0: 66 6f 72 65 69 67 6e 5f 6b 65 79 5f 6c 69 73 74  foreign_key_list
46b0: 28 74 33 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 20  (t3);.    }.  } 
46c0: 7b 30 20 30 20 74 32 20 61 20 62 20 7b 4e 4f 20  {0 0 t2 a b {NO 
46d0: 41 43 54 49 4f 4e 7d 20 7b 4e 4f 20 41 43 54 49  ACTION} {NO ACTI
46e0: 4f 4e 7d 20 4e 4f 4e 45 7d 0a 20 20 64 6f 5f 74  ON} NONE}.  do_t
46f0: 65 73 74 20 70 72 61 67 6d 61 2d 36 2e 33 2e 32  est pragma-6.3.2
4700: 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b   {.    execsql {
4710: 0a 20 20 20 20 20 20 70 72 61 67 6d 61 20 66 6f  .      pragma fo
4720: 72 65 69 67 6e 5f 6b 65 79 5f 6c 69 73 74 3b 0a  reign_key_list;.
4730: 20 20 20 20 7d 0a 20 20 7d 20 7b 7d 0a 20 20 64      }.  } {}.  d
4740: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 36 2e  o_test pragma-6.
4750: 33 2e 33 20 7b 0a 20 20 20 20 65 78 65 63 73 71  3.3 {.    execsq
4760: 6c 20 7b 0a 20 20 20 20 20 20 70 72 61 67 6d 61  l {.      pragma
4770: 20 66 6f 72 65 69 67 6e 5f 6b 65 79 5f 6c 69 73   foreign_key_lis
4780: 74 28 74 33 5f 62 6f 67 75 73 29 3b 0a 20 20 20  t(t3_bogus);.   
4790: 20 7d 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74   }.  } {}.  do_t
47a0: 65 73 74 20 70 72 61 67 6d 61 2d 36 2e 33 2e 34  est pragma-6.3.4
47b0: 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b   {.    execsql {
47c0: 0a 20 20 20 20 20 20 70 72 61 67 6d 61 20 66 6f  .      pragma fo
47d0: 72 65 69 67 6e 5f 6b 65 79 5f 6c 69 73 74 28 74  reign_key_list(t
47e0: 35 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 7d  5);.    }.  } {}
47f0: 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .  do_test pragm
4800: 61 2d 36 2e 34 20 7b 0a 20 20 20 20 63 61 70 74  a-6.4 {.    capt
4810: 75 72 65 5f 70 72 61 67 6d 61 20 64 62 20 6f 75  ure_pragma db ou
4820: 74 20 7b 0a 20 20 20 20 20 20 70 72 61 67 6d 61  t {.      pragma
4830: 20 69 6e 64 65 78 5f 6c 69 73 74 28 74 33 29 3b   index_list(t3);
4840: 0a 20 20 20 20 7d 0a 20 20 20 20 64 62 20 65 76  .    }.    db ev
4850: 61 6c 20 7b 53 45 4c 45 43 54 20 73 65 71 2c 20  al {SELECT seq, 
4860: 22 6e 61 6d 65 22 2c 20 22 75 6e 69 71 75 65 22  "name", "unique"
4870: 20 46 52 4f 4d 20 6f 75 74 20 4f 52 44 45 52 20   FROM out ORDER 
4880: 42 59 20 73 65 71 7d 0a 20 20 7d 20 7b 30 20 73  BY seq}.  } {0 s
4890: 71 6c 69 74 65 5f 61 75 74 6f 69 6e 64 65 78 5f  qlite_autoindex_
48a0: 74 33 5f 31 20 31 7d 0a 7d 0a 69 66 63 61 70 61  t3_1 1}.}.ifcapa
48b0: 62 6c 65 20 7b 21 66 6f 72 65 69 67 6e 6b 65 79  ble {!foreignkey
48c0: 7d 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 43  } {.  execsql {C
48d0: 52 45 41 54 45 20 54 41 42 4c 45 20 74 33 28 61  REATE TABLE t3(a
48e0: 2c 62 20 55 4e 49 51 55 45 29 7d 0a 7d 0a 64 6f  ,b UNIQUE)}.}.do
48f0: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 36 2e 35  _test pragma-6.5
4900: 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .1 {.  execsql {
4910: 0a 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45  .    CREATE INDE
4920: 58 20 74 33 69 31 20 4f 4e 20 74 33 28 61 2c 62  X t3i1 ON t3(a,b
4930: 29 3b 0a 20 20 7d 0a 20 20 63 61 70 74 75 72 65  );.  }.  capture
4940: 5f 70 72 61 67 6d 61 20 64 62 20 6f 75 74 20 7b  _pragma db out {
4950: 0a 20 20 20 20 70 72 61 67 6d 61 20 69 6e 64 65  .    pragma inde
4960: 78 5f 69 6e 66 6f 28 74 33 69 31 29 3b 0a 20 20  x_info(t3i1);.  
4970: 7d 0a 20 20 64 62 20 65 76 61 6c 20 7b 53 45 4c  }.  db eval {SEL
4980: 45 43 54 20 73 65 71 6e 6f 2c 20 63 69 64 2c 20  ECT seqno, cid, 
4990: 6e 61 6d 65 20 46 52 4f 4d 20 6f 75 74 20 4f 52  name FROM out OR
49a0: 44 45 52 20 42 59 20 73 65 71 6e 6f 7d 0a 7d 20  DER BY seqno}.} 
49b0: 7b 30 20 30 20 61 20 31 20 31 20 62 7d 0a 0a 23  {0 0 a 1 1 b}..#
49c0: 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d   EVIDENCE-OF: R-
49d0: 32 33 31 31 34 2d 32 31 36 39 35 20 54 68 65 20  23114-21695 The 
49e0: 61 75 78 69 6c 69 61 72 79 20 69 6e 64 65 78 2d  auxiliary index-
49f0: 63 6f 6c 75 6d 6e 73 20 61 72 65 20 6e 6f 74 20  columns are not 
4a00: 73 68 6f 77 6e 0a 23 20 62 79 20 74 68 65 20 69  shown.# by the i
4a10: 6e 64 65 78 5f 69 6e 66 6f 20 70 72 61 67 6d 61  ndex_info pragma
4a20: 2c 20 62 75 74 20 74 68 65 79 20 61 72 65 20 6c  , but they are l
4a30: 69 73 74 65 64 20 62 79 20 74 68 65 20 69 6e 64  isted by the ind
4a40: 65 78 5f 78 69 6e 66 6f 0a 23 20 70 72 61 67 6d  ex_xinfo.# pragm
4a50: 61 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 70 72 61  a..#.do_test pra
4a60: 67 6d 61 2d 36 2e 35 2e 31 62 20 7b 0a 20 20 63  gma-6.5.1b {.  c
4a70: 61 70 74 75 72 65 5f 70 72 61 67 6d 61 20 64 62  apture_pragma db
4a80: 20 6f 75 74 20 7b 50 52 41 47 4d 41 20 69 6e 64   out {PRAGMA ind
4a90: 65 78 5f 78 69 6e 66 6f 28 74 33 69 31 29 7d 0a  ex_xinfo(t3i1)}.
4aa0: 20 20 64 62 20 65 76 61 6c 20 7b 53 45 4c 45 43    db eval {SELEC
4ab0: 54 20 73 65 71 6e 6f 2c 20 63 69 64 2c 20 6e 61  T seqno, cid, na
4ac0: 6d 65 20 46 52 4f 4d 20 6f 75 74 20 4f 52 44 45  me FROM out ORDE
4ad0: 52 20 42 59 20 73 65 71 6e 6f 7d 0a 7d 20 7b 30  R BY seqno}.} {0
4ae0: 20 30 20 61 20 31 20 31 20 62 20 32 20 2d 31 20   0 a 1 1 b 2 -1 
4af0: 7b 7d 7d 0a 0a 0a 23 20 45 56 49 44 45 4e 43 45  {}}...# EVIDENCE
4b00: 2d 4f 46 3a 20 52 2d 32 39 34 34 38 2d 36 30 33  -OF: R-29448-603
4b10: 34 36 20 50 52 41 47 4d 41 20 73 63 68 65 6d 61  46 PRAGMA schema
4b20: 2e 69 6e 64 65 78 5f 69 6e 66 6f 28 69 6e 64 65  .index_info(inde
4b30: 78 2d 6e 61 6d 65 29 3b 20 54 68 69 73 0a 23 20  x-name); This.# 
4b40: 70 72 61 67 6d 61 20 72 65 74 75 72 6e 73 20 6f  pragma returns o
4b50: 6e 65 20 72 6f 77 20 66 6f 72 20 65 61 63 68 20  ne row for each 
4b60: 6b 65 79 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68  key column in th
4b70: 65 20 6e 61 6d 65 64 20 69 6e 64 65 78 2e 0a 23  e named index..#
4b80: 0a 23 20 28 54 68 65 20 66 69 72 73 74 20 63 6f  .# (The first co
4b90: 6c 75 6d 6e 20 6f 66 20 6f 75 74 70 75 74 20 66  lumn of output f
4ba0: 72 6f 6d 20 50 52 41 47 4d 41 20 69 6e 64 65 78  rom PRAGMA index
4bb0: 5f 69 6e 66 6f 20 69 73 2e 2e 2e 29 0a 23 20 45  _info is...).# E
4bc0: 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 33 34  VIDENCE-OF: R-34
4bd0: 31 38 36 2d 35 32 39 31 34 20 54 68 65 20 72 61  186-52914 The ra
4be0: 6e 6b 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  nk of the column
4bf0: 20 77 69 74 68 69 6e 20 74 68 65 20 69 6e 64 65   within the inde
4c00: 78 2e 20 28 30 0a 23 20 6d 65 61 6e 73 20 6c 65  x. (0.# means le
4c10: 66 74 2d 6d 6f 73 74 2e 29 0a 23 0a 23 20 28 54  ft-most.).#.# (T
4c20: 68 65 20 73 65 63 6f 6e 64 20 63 6f 6c 75 6d 6e  he second column
4c30: 20 6f 66 20 6f 75 74 70 75 74 20 66 72 6f 6d 20   of output from 
4c40: 50 52 41 47 4d 41 20 69 6e 64 65 78 5f 69 6e 66  PRAGMA index_inf
4c50: 6f 20 69 73 2e 2e 2e 29 0a 23 20 45 56 49 44 45  o is...).# EVIDE
4c60: 4e 43 45 2d 4f 46 3a 20 52 2d 36 35 30 31 39 2d  NCE-OF: R-65019-
4c70: 30 38 33 38 33 20 54 68 65 20 72 61 6e 6b 20 6f  08383 The rank o
4c80: 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 77 69 74  f the column wit
4c90: 68 69 6e 20 74 68 65 20 74 61 62 6c 65 0a 23 20  hin the table.# 
4ca0: 62 65 69 6e 67 20 69 6e 64 65 78 65 64 2e 0a 23  being indexed..#
4cb0: 0a 23 20 28 54 68 65 20 74 68 69 72 64 20 63 6f  .# (The third co
4cc0: 6c 75 6d 6e 20 6f 66 20 6f 75 74 70 75 74 20 66  lumn of output f
4cd0: 72 6f 6d 20 50 52 41 47 4d 41 20 69 6e 64 65 78  rom PRAGMA index
4ce0: 5f 69 6e 66 6f 20 69 73 2e 2e 2e 29 0a 23 20 45  _info is...).# E
4cf0: 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 30 39  VIDENCE-OF: R-09
4d00: 37 37 33 2d 33 34 32 36 36 20 54 68 65 20 6e 61  773-34266 The na
4d10: 6d 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  me of the column
4d20: 20 62 65 69 6e 67 20 69 6e 64 65 78 65 64 2e 0a   being indexed..
4d30: 23 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  #.do_execsql_tes
4d40: 74 20 70 72 61 67 6d 61 2d 36 2e 35 2e 31 63 20  t pragma-6.5.1c 
4d50: 7b 0a 20 20 43 52 45 41 54 45 20 49 4e 44 45 58  {.  CREATE INDEX
4d60: 20 74 33 69 32 20 4f 4e 20 74 33 28 62 2c 61 29   t3i2 ON t3(b,a)
4d70: 3b 0a 20 20 50 52 41 47 4d 41 20 69 6e 64 65 78  ;.  PRAGMA index
4d80: 5f 69 6e 66 6f 3d 27 74 33 69 32 27 3b 0a 20 20  _info='t3i2';.  
4d90: 44 52 4f 50 20 49 4e 44 45 58 20 74 33 69 32 3b  DROP INDEX t3i2;
4da0: 0a 7d 20 7b 30 20 31 20 62 20 31 20 30 20 61 7d  .} {0 1 b 1 0 a}
4db0: 0a 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  ..do_test pragma
4dc0: 2d 36 2e 35 2e 32 20 7b 0a 20 20 65 78 65 63 73  -6.5.2 {.  execs
4dd0: 71 6c 20 7b 0a 20 20 20 20 70 72 61 67 6d 61 20  ql {.    pragma 
4de0: 69 6e 64 65 78 5f 69 6e 66 6f 28 74 33 69 31 5f  index_info(t3i1_
4df0: 62 6f 67 75 73 29 3b 0a 20 20 7d 0a 7d 20 7b 7d  bogus);.  }.} {}
4e00: 0a 0a 69 66 63 61 70 61 62 6c 65 20 74 65 6d 70  ..ifcapable temp
4e10: 64 62 20 7b 0a 20 20 23 20 54 65 73 74 20 66 6f  db {.  # Test fo
4e20: 72 20 74 69 63 6b 65 74 20 23 33 33 32 30 2e 20  r ticket #3320. 
4e30: 57 68 65 6e 20 61 20 74 65 6d 70 20 74 61 62 6c  When a temp tabl
4e40: 65 20 6f 66 20 74 68 65 20 73 61 6d 65 20 6e 61  e of the same na
4e50: 6d 65 20 65 78 69 73 74 73 2c 20 6d 61 6b 65 0a  me exists, make.
4e60: 20 20 23 20 73 75 72 65 20 74 68 65 20 73 63 68    # sure the sch
4e70: 65 6d 61 20 6f 66 20 74 68 65 20 6d 61 69 6e 20  ema of the main 
4e80: 74 61 62 6c 65 20 63 61 6e 20 73 74 69 6c 6c 20  table can still 
4e90: 62 65 20 71 75 65 72 69 65 64 20 75 73 69 6e 67  be queried using
4ea0: 20 0a 20 20 23 20 22 70 72 61 67 6d 61 20 74 61   .  # "pragma ta
4eb0: 62 6c 65 5f 69 6e 66 6f 22 3a 0a 20 20 64 6f 5f  ble_info":.  do_
4ec0: 74 65 73 74 20 70 72 61 67 6d 61 2d 36 2e 36 2e  test pragma-6.6.
4ed0: 31 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  1 {.    execsql 
4ee0: 7b 0a 20 20 20 20 20 20 43 52 45 41 54 45 20 54  {.      CREATE T
4ef0: 41 42 4c 45 20 74 72 69 61 6c 28 63 6f 6c 5f 6d  ABLE trial(col_m
4f00: 61 69 6e 29 3b 0a 20 20 20 20 20 20 43 52 45 41  ain);.      CREA
4f10: 54 45 20 54 45 4d 50 20 54 41 42 4c 45 20 74 72  TE TEMP TABLE tr
4f20: 69 61 6c 28 63 6f 6c 5f 74 65 6d 70 29 3b 0a 20  ial(col_temp);. 
4f30: 20 20 20 7d 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f     }.  } {}.  do
4f40: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 36 2e 36  _test pragma-6.6
4f50: 2e 32 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  .2 {.    execsql
4f60: 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20   {.      PRAGMA 
4f70: 74 61 62 6c 65 5f 69 6e 66 6f 28 74 72 69 61 6c  table_info(trial
4f80: 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 30 20  );.    }.  } {0 
4f90: 63 6f 6c 5f 74 65 6d 70 20 7b 7d 20 30 20 7b 7d  col_temp {} 0 {}
4fa0: 20 30 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72   0}.  do_test pr
4fb0: 61 67 6d 61 2d 36 2e 36 2e 33 20 7b 0a 20 20 20  agma-6.6.3 {.   
4fc0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20   execsql {.     
4fd0: 20 50 52 41 47 4d 41 20 74 65 6d 70 2e 74 61 62   PRAGMA temp.tab
4fe0: 6c 65 5f 69 6e 66 6f 28 74 72 69 61 6c 29 3b 0a  le_info(trial);.
4ff0: 20 20 20 20 7d 0a 20 20 7d 20 7b 30 20 63 6f 6c      }.  } {0 col
5000: 5f 74 65 6d 70 20 7b 7d 20 30 20 7b 7d 20 30 7d  _temp {} 0 {} 0}
5010: 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .  do_test pragm
5020: 61 2d 36 2e 36 2e 34 20 7b 0a 20 20 20 20 65 78  a-6.6.4 {.    ex
5030: 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52  ecsql {.      PR
5040: 41 47 4d 41 20 6d 61 69 6e 2e 74 61 62 6c 65 5f  AGMA main.table_
5050: 69 6e 66 6f 28 74 72 69 61 6c 29 3b 0a 20 20 20  info(trial);.   
5060: 20 7d 0a 20 20 7d 20 7b 30 20 63 6f 6c 5f 6d 61   }.  } {0 col_ma
5070: 69 6e 20 7b 7d 20 30 20 7b 7d 20 30 7d 0a 7d 0a  in {} 0 {} 0}.}.
5080: 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d  .do_test pragma-
5090: 36 2e 37 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  6.7 {.  execsql 
50a0: 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42  {.    CREATE TAB
50b0: 4c 45 20 74 65 73 74 5f 74 61 62 6c 65 28 0a 20  LE test_table(. 
50c0: 20 20 20 20 20 6f 6e 65 20 49 4e 54 20 4e 4f 54       one INT NOT
50d0: 20 4e 55 4c 4c 20 44 45 46 41 55 4c 54 20 2d 31   NULL DEFAULT -1
50e0: 2c 20 0a 20 20 20 20 20 20 74 77 6f 20 74 65 78  , .      two tex
50f0: 74 2c 0a 20 20 20 20 20 20 74 68 72 65 65 20 56  t,.      three V
5100: 41 52 43 48 41 52 28 34 35 2c 20 36 35 29 20 44  ARCHAR(45, 65) D
5110: 45 46 41 55 4c 54 20 27 61 62 63 64 65 27 2c 0a  EFAULT 'abcde',.
5120: 20 20 20 20 20 20 66 6f 75 72 20 52 45 41 4c 20        four REAL 
5130: 44 45 46 41 55 4c 54 20 58 27 61 62 63 64 65 66  DEFAULT X'abcdef
5140: 27 2c 0a 20 20 20 20 20 20 66 69 76 65 20 44 45  ',.      five DE
5150: 46 41 55 4c 54 20 43 55 52 52 45 4e 54 5f 54 49  FAULT CURRENT_TI
5160: 4d 45 0a 20 20 20 20 29 3b 0a 20 20 7d 0a 20 20  ME.    );.  }.  
5170: 63 61 70 74 75 72 65 5f 70 72 61 67 6d 61 20 64  capture_pragma d
5180: 62 20 6f 75 74 20 7b 50 52 41 47 4d 41 20 74 61  b out {PRAGMA ta
5190: 62 6c 65 5f 69 6e 66 6f 28 74 65 73 74 5f 74 61  ble_info(test_ta
51a0: 62 6c 65 29 7d 0a 20 20 64 62 20 65 76 61 6c 20  ble)}.  db eval 
51b0: 7b 53 45 4c 45 43 54 20 63 69 64 2c 20 22 6e 61  {SELECT cid, "na
51c0: 6d 65 22 2c 20 74 79 70 65 2c 20 22 6e 6f 74 6e  me", type, "notn
51d0: 75 6c 6c 22 2c 20 64 66 6c 74 5f 76 61 6c 75 65  ull", dflt_value
51e0: 2c 20 70 6b 20 46 52 4f 4d 20 6f 75 74 0a 20 20  , pk FROM out.  
51f0: 20 20 20 20 20 20 20 20 20 20 4f 52 44 45 52 20            ORDER 
5200: 42 59 20 63 69 64 7d 0a 7d 20 5b 63 6f 6e 63 61  BY cid}.} [conca
5210: 74 20 5c 0a 20 20 7b 30 20 6f 6e 65 20 49 4e 54  t \.  {0 one INT
5220: 20 31 20 2d 31 20 30 7d 20 5c 0a 20 20 7b 31 20   1 -1 0} \.  {1 
5230: 74 77 6f 20 74 65 78 74 20 30 20 7b 7d 20 30 7d  two text 0 {} 0}
5240: 20 5c 0a 20 20 7b 32 20 74 68 72 65 65 20 7b 56   \.  {2 three {V
5250: 41 52 43 48 41 52 28 34 35 2c 20 36 35 29 7d 20  ARCHAR(45, 65)} 
5260: 30 20 27 61 62 63 64 65 27 20 30 7d 20 5c 0a 20  0 'abcde' 0} \. 
5270: 20 7b 33 20 66 6f 75 72 20 52 45 41 4c 20 30 20   {3 four REAL 0 
5280: 58 27 61 62 63 64 65 66 27 20 30 7d 20 5c 0a 20  X'abcdef' 0} \. 
5290: 20 7b 34 20 66 69 76 65 20 7b 7d 20 30 20 43 55   {4 five {} 0 CU
52a0: 52 52 45 4e 54 5f 54 49 4d 45 20 30 7d 20 5c 0a  RRENT_TIME 0} \.
52b0: 5d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  ].do_test pragma
52c0: 2d 36 2e 38 20 7b 0a 20 20 65 78 65 63 73 71 6c  -6.8 {.  execsql
52d0: 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41   {.    CREATE TA
52e0: 42 4c 45 20 74 36 38 28 61 2c 62 2c 63 2c 50 52  BLE t68(a,b,c,PR
52f0: 49 4d 41 52 59 20 4b 45 59 28 61 2c 62 2c 61 2c  IMARY KEY(a,b,a,
5300: 63 29 29 3b 0a 20 20 20 20 50 52 41 47 4d 41 20  c));.    PRAGMA 
5310: 74 61 62 6c 65 5f 69 6e 66 6f 28 74 36 38 29 3b  table_info(t68);
5320: 0a 20 20 7d 0a 7d 20 5b 63 6f 6e 63 61 74 20 5c  .  }.} [concat \
5330: 0a 20 20 7b 30 20 61 20 7b 7d 20 30 20 7b 7d 20  .  {0 a {} 0 {} 
5340: 31 7d 20 5c 0a 20 20 7b 31 20 62 20 7b 7d 20 30  1} \.  {1 b {} 0
5350: 20 7b 7d 20 32 7d 20 5c 0a 20 20 7b 32 20 63 20   {} 2} \.  {2 c 
5360: 7b 7d 20 30 20 7b 7d 20 34 7d 20 5c 0a 5d 0a 7d  {} 0 {} 4} \.].}
5370: 20 3b 23 20 69 66 63 61 70 61 62 6c 65 20 73 63   ;# ifcapable sc
5380: 68 65 6d 61 5f 70 72 61 67 6d 61 73 0a 23 20 4d  hema_pragmas.# M
5390: 69 73 63 65 6c 6c 61 6e 65 6f 75 73 20 74 65 73  iscellaneous tes
53a0: 74 73 0a 23 0a 69 66 63 61 70 61 62 6c 65 20 73  ts.#.ifcapable s
53b0: 63 68 65 6d 61 5f 70 72 61 67 6d 61 73 20 7b 0a  chema_pragmas {.
53c0: 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52  # EVIDENCE-OF: R
53d0: 2d 36 34 31 30 33 2d 31 37 37 37 36 20 50 52 41  -64103-17776 PRA
53e0: 47 4d 41 20 73 63 68 65 6d 61 2e 69 6e 64 65 78  GMA schema.index
53f0: 5f 6c 69 73 74 28 74 61 62 6c 65 2d 6e 61 6d 65  _list(table-name
5400: 29 3b 20 54 68 69 73 0a 23 20 70 72 61 67 6d 61  ); This.# pragma
5410: 20 72 65 74 75 72 6e 73 20 6f 6e 65 20 72 6f 77   returns one row
5420: 20 66 6f 72 20 65 61 63 68 20 69 6e 64 65 78 20   for each index 
5430: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
5440: 74 68 65 20 67 69 76 65 6e 20 74 61 62 6c 65 2e  the given table.
5450: 0a 23 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .#.do_test pragm
5460: 61 2d 37 2e 31 2e 31 20 7b 0a 20 20 23 20 4d 61  a-7.1.1 {.  # Ma
5470: 6b 65 20 73 75 72 65 20 61 20 70 72 61 67 6d 61  ke sure a pragma
5480: 20 6b 6e 6f 77 73 20 74 6f 20 72 65 61 64 20 74   knows to read t
5490: 68 65 20 73 63 68 65 6d 61 20 69 66 20 69 74 20  he schema if it 
54a0: 6e 65 65 64 73 20 74 6f 0a 20 20 64 62 20 63 6c  needs to.  db cl
54b0: 6f 73 65 0a 20 20 73 71 6c 69 74 65 33 20 64 62  ose.  sqlite3 db
54c0: 20 74 65 73 74 2e 64 62 0a 20 20 63 61 70 74 75   test.db.  captu
54d0: 72 65 5f 70 72 61 67 6d 61 20 64 62 20 6f 75 74  re_pragma db out
54e0: 20 22 50 52 41 47 4d 41 20 69 6e 64 65 78 5f 6c   "PRAGMA index_l
54f0: 69 73 74 28 74 33 29 22 0a 20 20 64 62 20 65 76  ist(t3)".  db ev
5500: 61 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 2c  al {SELECT name,
5510: 20 22 6f 72 69 67 69 6e 22 20 46 52 4f 4d 20 6f   "origin" FROM o
5520: 75 74 20 4f 52 44 45 52 20 42 59 20 6e 61 6d 65  ut ORDER BY name
5530: 20 44 45 53 43 7d 0a 7d 20 7b 74 33 69 31 20 63   DESC}.} {t3i1 c
5540: 20 73 71 6c 69 74 65 5f 61 75 74 6f 69 6e 64 65   sqlite_autoinde
5550: 78 5f 74 33 5f 31 20 75 7d 0a 64 6f 5f 74 65 73  x_t3_1 u}.do_tes
5560: 74 20 70 72 61 67 6d 61 2d 37 2e 31 2e 32 20 7b  t pragma-7.1.2 {
5570: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
5580: 20 70 72 61 67 6d 61 20 69 6e 64 65 78 5f 6c 69   pragma index_li
5590: 73 74 28 74 33 5f 62 6f 67 75 73 29 3b 0a 20 20  st(t3_bogus);.  
55a0: 7d 0a 7d 20 7b 7d 0a 7d 20 3b 23 20 69 66 63 61  }.} {}.} ;# ifca
55b0: 70 61 62 6c 65 20 73 63 68 65 6d 61 5f 70 72 61  pable schema_pra
55c0: 67 6d 61 73 0a 69 66 63 61 70 61 62 6c 65 20 7b  gmas.ifcapable {
55d0: 75 74 66 31 36 7d 20 7b 0a 20 20 69 66 20 7b 5b  utf16} {.  if {[
55e0: 70 65 72 6d 75 74 61 74 69 6f 6e 5d 20 3d 3d 20  permutation] == 
55f0: 22 22 7d 20 7b 0a 20 20 20 20 64 6f 5f 74 65 73  ""} {.    do_tes
5600: 74 20 70 72 61 67 6d 61 2d 37 2e 32 20 7b 0a 20  t pragma-7.2 {. 
5610: 20 20 20 20 20 64 62 20 63 6c 6f 73 65 0a 20 20       db close.  
5620: 20 20 20 20 73 71 6c 69 74 65 33 20 64 62 20 74      sqlite3 db t
5630: 65 73 74 2e 64 62 0a 20 20 20 20 20 20 63 61 74  est.db.      cat
5640: 63 68 73 71 6c 20 7b 0a 20 20 20 20 20 20 20 20  chsql {.        
5650: 70 72 61 67 6d 61 20 65 6e 63 6f 64 69 6e 67 3d  pragma encoding=
5660: 62 6f 67 75 73 3b 0a 20 20 20 20 20 20 7d 0a 20  bogus;.      }. 
5670: 20 20 20 7d 20 7b 31 20 7b 75 6e 73 75 70 70 6f     } {1 {unsuppo
5680: 72 74 65 64 20 65 6e 63 6f 64 69 6e 67 3a 20 62  rted encoding: b
5690: 6f 67 75 73 7d 7d 0a 20 20 7d 0a 7d 0a 69 66 63  ogus}}.  }.}.ifc
56a0: 61 70 61 62 6c 65 20 74 65 6d 70 64 62 20 7b 0a  apable tempdb {.
56b0: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
56c0: 2d 37 2e 33 20 7b 0a 20 20 20 20 64 62 20 63 6c  -7.3 {.    db cl
56d0: 6f 73 65 0a 20 20 20 20 73 71 6c 69 74 65 33 20  ose.    sqlite3 
56e0: 64 62 20 74 65 73 74 2e 64 62 0a 20 20 20 20 65  db test.db.    e
56f0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 70  xecsql {.      p
5700: 72 61 67 6d 61 20 6c 6f 63 6b 5f 73 74 61 74 75  ragma lock_statu
5710: 73 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 6d 61  s;.    }.  } {ma
5720: 69 6e 20 75 6e 6c 6f 63 6b 65 64 20 74 65 6d 70  in unlocked temp
5730: 20 63 6c 6f 73 65 64 7d 0a 7d 20 65 6c 73 65 20   closed}.} else 
5740: 7b 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67  {.  do_test prag
5750: 6d 61 2d 37 2e 33 20 7b 0a 20 20 20 20 64 62 20  ma-7.3 {.    db 
5760: 63 6c 6f 73 65 0a 20 20 20 20 73 71 6c 69 74 65  close.    sqlite
5770: 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20 20  3 db test.db.   
5780: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20   execsql {.     
5790: 20 70 72 61 67 6d 61 20 6c 6f 63 6b 5f 73 74 61   pragma lock_sta
57a0: 74 75 73 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b  tus;.    }.  } {
57b0: 6d 61 69 6e 20 75 6e 6c 6f 63 6b 65 64 7d 0a 7d  main unlocked}.}
57c0: 0a 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ...#------------
57d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
57e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
57f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5800: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 54 65 73  ----------.# Tes
5810: 74 20 63 61 73 65 73 20 70 72 61 67 6d 61 2d 38  t cases pragma-8
5820: 2e 2a 20 74 65 73 74 20 74 68 65 20 22 50 52 41  .* test the "PRA
5830: 47 4d 41 20 73 63 68 65 6d 61 5f 76 65 72 73 69  GMA schema_versi
5840: 6f 6e 22 20 61 6e 64 20 22 50 52 41 47 4d 41 0a  on" and "PRAGMA.
5850: 23 20 75 73 65 72 5f 76 65 72 73 69 6f 6e 22 20  # user_version" 
5860: 73 74 61 74 65 6d 65 6e 74 73 2e 0a 23 0a 23 20  statements..#.# 
5870: 70 72 61 67 6d 61 2d 38 2e 31 3a 20 50 52 41 47  pragma-8.1: PRAG
5880: 4d 41 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f  MA schema_versio
5890: 6e 0a 23 20 70 72 61 67 6d 61 2d 38 2e 32 3a 20  n.# pragma-8.2: 
58a0: 50 52 41 47 4d 41 20 75 73 65 72 5f 76 65 72 73  PRAGMA user_vers
58b0: 69 6f 6e 0a 23 0a 0a 69 66 63 61 70 61 62 6c 65  ion.#..ifcapable
58c0: 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 20   schema_version 
58d0: 7b 0a 0a 23 20 46 69 72 73 74 20 63 68 65 63 6b  {..# First check
58e0: 20 74 68 61 74 20 77 65 20 63 61 6e 20 73 65 74   that we can set
58f0: 20 74 68 65 20 73 63 68 65 6d 61 20 76 65 72 73   the schema vers
5900: 69 6f 6e 20 61 6e 64 20 74 68 65 6e 20 72 65 74  ion and then ret
5910: 72 69 65 76 65 20 74 68 65 0a 23 20 73 61 6d 65  rieve the.# same
5920: 20 76 61 6c 75 65 2e 0a 64 6f 5f 74 65 73 74 20   value..do_test 
5930: 70 72 61 67 6d 61 2d 38 2e 31 2e 31 20 7b 0a 20  pragma-8.1.1 {. 
5940: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50   execsql {.    P
5950: 52 41 47 4d 41 20 73 63 68 65 6d 61 5f 76 65 72  RAGMA schema_ver
5960: 73 69 6f 6e 20 3d 20 31 30 35 3b 0a 20 20 7d 0a  sion = 105;.  }.
5970: 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61  } {}.do_test pra
5980: 67 6d 61 2d 38 2e 31 2e 32 20 7b 0a 20 20 65 78  gma-8.1.2 {.  ex
5990: 65 63 73 71 6c 32 20 7b 0a 20 20 20 20 50 52 41  ecsql2 {.    PRA
59a0: 47 4d 41 20 73 63 68 65 6d 61 5f 76 65 72 73 69  GMA schema_versi
59b0: 6f 6e 3b 0a 20 20 7d 0a 7d 20 7b 73 63 68 65 6d  on;.  }.} {schem
59c0: 61 5f 76 65 72 73 69 6f 6e 20 31 30 35 7d 0a 64  a_version 105}.d
59d0: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e  o_test pragma-8.
59e0: 31 2e 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  1.3 {.  execsql 
59f0: 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 73 63 68  {.    PRAGMA sch
5a00: 65 6d 61 5f 76 65 72 73 69 6f 6e 20 3d 20 31 30  ema_version = 10
5a10: 36 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74  6;.  }.} {}.do_t
5a20: 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e 34  est pragma-8.1.4
5a30: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
5a40: 20 20 20 50 52 41 47 4d 41 20 73 63 68 65 6d 61     PRAGMA schema
5a50: 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 7d 0a 7d 20  _version;.  }.} 
5a60: 31 30 36 0a 0a 23 20 43 68 65 63 6b 20 74 68 61  106..# Check tha
5a70: 74 20 63 72 65 61 74 69 6e 67 20 61 20 74 61 62  t creating a tab
5a80: 6c 65 20 6d 6f 64 69 66 69 65 73 20 74 68 65 20  le modifies the 
5a90: 73 63 68 65 6d 61 2d 76 65 72 73 69 6f 6e 20 28  schema-version (
5aa0: 74 68 69 73 20 69 73 20 72 65 61 6c 6c 79 0a 23  this is really.#
5ab0: 20 74 6f 20 76 65 72 69 66 79 20 74 68 61 74 20   to verify that 
5ac0: 74 68 65 20 76 61 6c 75 65 20 62 65 69 6e 67 20  the value being 
5ad0: 72 65 61 64 20 69 73 20 69 6e 20 66 61 63 74 20  read is in fact 
5ae0: 74 68 65 20 73 63 68 65 6d 61 20 76 65 72 73 69  the schema versi
5af0: 6f 6e 29 2e 0a 64 6f 5f 74 65 73 74 20 70 72 61  on)..do_test pra
5b00: 67 6d 61 2d 38 2e 31 2e 35 20 7b 0a 20 20 65 78  gma-8.1.5 {.  ex
5b10: 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41  ecsql {.    CREA
5b20: 54 45 20 54 41 42 4c 45 20 74 34 28 61 2c 20 62  TE TABLE t4(a, b
5b30: 2c 20 63 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  , c);.    INSERT
5b40: 20 49 4e 54 4f 20 74 34 20 56 41 4c 55 45 53 28   INTO t4 VALUES(
5b50: 31 2c 20 32 2c 20 33 29 3b 0a 20 20 20 20 53 45  1, 2, 3);.    SE
5b60: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 34 3b 0a  LECT * FROM t4;.
5b70: 20 20 7d 0a 7d 20 7b 31 20 32 20 33 7d 0a 64 6f    }.} {1 2 3}.do
5b80: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 31  _test pragma-8.1
5b90: 2e 36 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .6 {.  execsql {
5ba0: 0a 20 20 20 20 50 52 41 47 4d 41 20 73 63 68 65  .    PRAGMA sche
5bb0: 6d 61 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 7d 0a  ma_version;.  }.
5bc0: 7d 20 31 30 37 0a 0a 23 20 4e 6f 77 20 6f 70 65  } 107..# Now ope
5bd0: 6e 20 61 20 73 65 63 6f 6e 64 20 63 6f 6e 6e 65  n a second conne
5be0: 63 74 69 6f 6e 20 74 6f 20 74 68 65 20 64 61 74  ction to the dat
5bf0: 61 62 61 73 65 2e 20 45 6e 73 75 72 65 20 74 68  abase. Ensure th
5c00: 61 74 20 63 68 61 6e 67 69 6e 67 20 74 68 65 0a  at changing the.
5c10: 23 20 73 63 68 65 6d 61 2d 76 65 72 73 69 6f 6e  # schema-version
5c20: 20 75 73 69 6e 67 20 74 68 65 20 66 69 72 73 74   using the first
5c30: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6f 72 63   connection forc
5c40: 65 73 20 74 68 65 20 73 65 63 6f 6e 64 20 63 6f  es the second co
5c50: 6e 6e 65 63 74 69 6f 6e 0a 23 20 74 6f 20 72 65  nnection.# to re
5c60: 6c 6f 61 64 20 74 68 65 20 73 63 68 65 6d 61 2e  load the schema.
5c70: 20 54 68 69 73 20 68 61 73 20 74 6f 20 62 65 20   This has to be 
5c80: 64 6f 6e 65 20 75 73 69 6e 67 20 74 68 65 20 43  done using the C
5c90: 2d 41 50 49 20 74 65 73 74 20 66 75 6e 63 74 69  -API test functi
5ca0: 6f 6e 73 2c 0a 23 20 62 65 63 61 75 73 65 20 74  ons,.# because t
5cb0: 68 65 20 54 43 4c 20 41 50 49 20 61 63 63 6f 75  he TCL API accou
5cc0: 6e 74 73 20 66 6f 72 20 53 43 48 45 4d 41 5f 45  nts for SCHEMA_E
5cd0: 52 52 4f 52 20 61 6e 64 20 72 65 74 72 69 65 73  RROR and retries
5ce0: 20 74 68 65 20 71 75 65 72 79 2e 0a 64 6f 5f 74   the query..do_t
5cf0: 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e 37  est pragma-8.1.7
5d00: 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 64 62 32   {.  sqlite3 db2
5d10: 20 74 65 73 74 2e 64 62 3b 20 73 65 74 20 3a 3a   test.db; set ::
5d20: 44 42 32 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6e  DB2 [sqlite3_con
5d30: 6e 65 63 74 69 6f 6e 5f 70 6f 69 6e 74 65 72 20  nection_pointer 
5d40: 64 62 32 5d 0a 20 20 65 78 65 63 73 71 6c 20 7b  db2].  execsql {
5d50: 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52  .    SELECT * FR
5d60: 4f 4d 20 74 34 3b 0a 20 20 7d 20 64 62 32 0a 7d  OM t4;.  } db2.}
5d70: 20 7b 31 20 32 20 33 7d 0a 64 6f 5f 74 65 73 74   {1 2 3}.do_test
5d80: 20 70 72 61 67 6d 61 2d 38 2e 31 2e 38 20 7b 0a   pragma-8.1.8 {.
5d90: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
5da0: 50 52 41 47 4d 41 20 73 63 68 65 6d 61 5f 76 65  PRAGMA schema_ve
5db0: 72 73 69 6f 6e 20 3d 20 31 30 38 3b 0a 20 20 7d  rsion = 108;.  }
5dc0: 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 70 72  .} {}.do_test pr
5dd0: 61 67 6d 61 2d 38 2e 31 2e 39 20 7b 0a 20 20 73  agma-8.1.9 {.  s
5de0: 65 74 20 3a 3a 53 54 4d 54 20 5b 73 71 6c 69 74  et ::STMT [sqlit
5df0: 65 33 5f 70 72 65 70 61 72 65 20 24 3a 3a 44 42  e3_prepare $::DB
5e00: 32 20 22 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  2 "SELECT * FROM
5e10: 20 74 34 22 20 2d 31 20 44 55 4d 4d 59 5d 0a 20   t4" -1 DUMMY]. 
5e20: 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 3a   sqlite3_step $:
5e30: 3a 53 54 4d 54 0a 7d 20 53 51 4c 49 54 45 5f 45  :STMT.} SQLITE_E
5e40: 52 52 4f 52 0a 64 6f 5f 74 65 73 74 20 70 72 61  RROR.do_test pra
5e50: 67 6d 61 2d 38 2e 31 2e 31 30 20 7b 0a 20 20 73  gma-8.1.10 {.  s
5e60: 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20  qlite3_finalize 
5e70: 24 3a 3a 53 54 4d 54 0a 7d 20 53 51 4c 49 54 45  $::STMT.} SQLITE
5e80: 5f 53 43 48 45 4d 41 0a 0a 23 20 4d 61 6b 65 20  _SCHEMA..# Make 
5e90: 73 75 72 65 20 74 68 65 20 73 63 68 65 6d 61 2d  sure the schema-
5ea0: 76 65 72 73 69 6f 6e 20 63 61 6e 20 62 65 20 6d  version can be m
5eb0: 61 6e 69 70 75 6c 61 74 65 64 20 69 6e 20 61 6e  anipulated in an
5ec0: 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
5ed0: 73 65 2e 0a 66 6f 72 63 65 64 65 6c 65 74 65 20  se..forcedelete 
5ee0: 74 65 73 74 32 2e 64 62 0a 66 6f 72 63 65 64 65  test2.db.forcede
5ef0: 6c 65 74 65 20 74 65 73 74 32 2e 64 62 2d 6a 6f  lete test2.db-jo
5f00: 75 72 6e 61 6c 0a 69 66 63 61 70 61 62 6c 65 20  urnal.ifcapable 
5f10: 61 74 74 61 63 68 20 7b 0a 20 20 64 6f 5f 74 65  attach {.  do_te
5f20: 73 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e 31 31  st pragma-8.1.11
5f30: 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b   {.    execsql {
5f40: 0a 20 20 20 20 20 20 41 54 54 41 43 48 20 27 74  .      ATTACH 't
5f50: 65 73 74 32 2e 64 62 27 20 41 53 20 61 75 78 3b  est2.db' AS aux;
5f60: 0a 20 20 20 20 20 20 43 52 45 41 54 45 20 54 41  .      CREATE TA
5f70: 42 4c 45 20 61 75 78 2e 74 31 28 61 2c 20 62 2c  BLE aux.t1(a, b,
5f80: 20 63 29 3b 0a 20 20 20 20 20 20 50 52 41 47 4d   c);.      PRAGM
5f90: 41 20 61 75 78 2e 73 63 68 65 6d 61 5f 76 65 72  A aux.schema_ver
5fa0: 73 69 6f 6e 20 3d 20 32 30 35 3b 0a 20 20 20 20  sion = 205;.    
5fb0: 7d 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65  }.  } {}.  do_te
5fc0: 73 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e 31 32  st pragma-8.1.12
5fd0: 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b   {.    execsql {
5fe0: 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 61 75  .      PRAGMA au
5ff0: 78 2e 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e  x.schema_version
6000: 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 32 30 35 0a  ;.    }.  } 205.
6010: 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  }.do_test pragma
6020: 2d 38 2e 31 2e 31 33 20 7b 0a 20 20 65 78 65 63  -8.1.13 {.  exec
6030: 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41  sql {.    PRAGMA
6040: 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 3b   schema_version;
6050: 0a 20 20 7d 0a 7d 20 31 30 38 0a 0a 23 20 41 6e  .  }.} 108..# An
6060: 64 20 63 68 65 63 6b 20 74 68 61 74 20 6d 6f 64  d check that mod
6070: 69 66 79 69 6e 67 20 74 68 65 20 73 63 68 65 6d  ifying the schem
6080: 61 2d 76 65 72 73 69 6f 6e 20 69 6e 20 61 6e 20  a-version in an 
6090: 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
60a0: 65 0a 23 20 66 6f 72 63 65 73 20 74 68 65 20 73  e.# forces the s
60b0: 65 63 6f 6e 64 20 63 6f 6e 6e 65 63 74 69 6f 6e  econd connection
60c0: 20 74 6f 20 72 65 6c 6f 61 64 20 74 68 65 20 73   to reload the s
60d0: 63 68 65 6d 61 2e 0a 69 66 63 61 70 61 62 6c 65  chema..ifcapable
60e0: 20 61 74 74 61 63 68 20 7b 0a 20 20 64 6f 5f 74   attach {.  do_t
60f0: 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e 31  est pragma-8.1.1
6100: 34 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 20  4 {.    sqlite3 
6110: 64 62 32 20 74 65 73 74 2e 64 62 3b 20 73 65 74  db2 test.db; set
6120: 20 3a 3a 44 42 32 20 5b 73 71 6c 69 74 65 33 5f   ::DB2 [sqlite3_
6130: 63 6f 6e 6e 65 63 74 69 6f 6e 5f 70 6f 69 6e 74  connection_point
6140: 65 72 20 64 62 32 5d 0a 20 20 20 20 65 78 65 63  er db2].    exec
6150: 73 71 6c 20 7b 0a 20 20 20 20 20 20 41 54 54 41  sql {.      ATTA
6160: 43 48 20 27 74 65 73 74 32 2e 64 62 27 20 41 53  CH 'test2.db' AS
6170: 20 61 75 78 3b 0a 20 20 20 20 20 20 53 45 4c 45   aux;.      SELE
6180: 43 54 20 2a 20 46 52 4f 4d 20 61 75 78 2e 74 31  CT * FROM aux.t1
6190: 3b 0a 20 20 20 20 7d 20 64 62 32 0a 20 20 7d 20  ;.    } db2.  } 
61a0: 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61  {}.  do_test pra
61b0: 67 6d 61 2d 38 2e 31 2e 31 35 20 7b 0a 20 20 20  gma-8.1.15 {.   
61c0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20   execsql {.     
61d0: 20 50 52 41 47 4d 41 20 61 75 78 2e 73 63 68 65   PRAGMA aux.sche
61e0: 6d 61 5f 76 65 72 73 69 6f 6e 20 3d 20 32 30 36  ma_version = 206
61f0: 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 7d 0a 20  ;.    }.  } {}. 
6200: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
6210: 38 2e 31 2e 31 36 20 7b 0a 20 20 20 20 73 65 74  8.1.16 {.    set
6220: 20 3a 3a 53 54 4d 54 20 5b 73 71 6c 69 74 65 33   ::STMT [sqlite3
6230: 5f 70 72 65 70 61 72 65 20 24 3a 3a 44 42 32 20  _prepare $::DB2 
6240: 22 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 61  "SELECT * FROM a
6250: 75 78 2e 74 31 22 20 2d 31 20 44 55 4d 4d 59 5d  ux.t1" -1 DUMMY]
6260: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 74 65  .    sqlite3_ste
6270: 70 20 24 3a 3a 53 54 4d 54 0a 20 20 7d 20 53 51  p $::STMT.  } SQ
6280: 4c 49 54 45 5f 45 52 52 4f 52 0a 20 20 64 6f 5f  LITE_ERROR.  do_
6290: 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e  test pragma-8.1.
62a0: 31 37 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  17 {.    sqlite3
62b0: 5f 66 69 6e 61 6c 69 7a 65 20 24 3a 3a 53 54 4d  _finalize $::STM
62c0: 54 0a 20 20 7d 20 53 51 4c 49 54 45 5f 53 43 48  T.  } SQLITE_SCH
62d0: 45 4d 41 0a 20 20 64 6f 5f 74 65 73 74 20 70 72  EMA.  do_test pr
62e0: 61 67 6d 61 2d 38 2e 31 2e 31 38 20 7b 0a 20 20  agma-8.1.18 {.  
62f0: 20 20 64 62 32 20 63 6c 6f 73 65 0a 20 20 7d 20    db2 close.  } 
6300: 7b 7d 0a 7d 0a 0a 23 20 4e 6f 77 20 74 65 73 74  {}.}..# Now test
6310: 20 74 68 61 74 20 74 68 65 20 75 73 65 72 2d 76   that the user-v
6320: 65 72 73 69 6f 6e 20 63 61 6e 20 62 65 20 72 65  ersion can be re
6330: 61 64 20 61 6e 64 20 77 72 69 74 74 65 6e 20 28  ad and written (
6340: 61 6e 64 20 74 68 61 74 20 77 65 20 61 72 65 6e  and that we aren
6350: 27 74 0a 23 20 61 63 63 69 64 65 6e 74 61 6c 6c  't.# accidentall
6360: 79 20 6d 61 6e 69 70 75 6c 61 74 69 6e 67 20 74  y manipulating t
6370: 68 65 20 73 63 68 65 6d 61 2d 76 65 72 73 69 6f  he schema-versio
6380: 6e 20 69 6e 73 74 65 61 64 29 2e 0a 64 6f 5f 74  n instead)..do_t
6390: 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 32 2e 31  est pragma-8.2.1
63a0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 32 20 7b 0a   {.  execsql2 {.
63b0: 20 20 20 20 50 52 41 47 4d 41 20 75 73 65 72 5f      PRAGMA user_
63c0: 76 65 72 73 69 6f 6e 3b 0a 20 20 7d 0a 7d 20 7b  version;.  }.} {
63d0: 75 73 65 72 5f 76 65 72 73 69 6f 6e 20 30 7d 0a  user_version 0}.
63e0: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38  do_test pragma-8
63f0: 2e 32 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c  .2.2 {.  execsql
6400: 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 75 73   {.    PRAGMA us
6410: 65 72 5f 76 65 72 73 69 6f 6e 20 3d 20 32 3b 0a  er_version = 2;.
6420: 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74    }.} {}.do_test
6430: 20 70 72 61 67 6d 61 2d 38 2e 32 2e 33 2e 31 20   pragma-8.2.3.1 
6440: 7b 0a 20 20 65 78 65 63 73 71 6c 32 20 7b 0a 20  {.  execsql2 {. 
6450: 20 20 20 50 52 41 47 4d 41 20 75 73 65 72 5f 76     PRAGMA user_v
6460: 65 72 73 69 6f 6e 3b 0a 20 20 7d 0a 7d 20 7b 75  ersion;.  }.} {u
6470: 73 65 72 5f 76 65 72 73 69 6f 6e 20 32 7d 0a 64  ser_version 2}.d
6480: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e  o_test pragma-8.
6490: 32 2e 33 2e 32 20 7b 0a 20 20 64 62 20 63 6c 6f  2.3.2 {.  db clo
64a0: 73 65 0a 20 20 73 71 6c 69 74 65 33 20 64 62 20  se.  sqlite3 db 
64b0: 74 65 73 74 2e 64 62 0a 20 20 65 78 65 63 73 71  test.db.  execsq
64c0: 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 75  l {.    PRAGMA u
64d0: 73 65 72 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 7d  ser_version;.  }
64e0: 0a 7d 20 7b 32 7d 0a 64 6f 5f 74 65 73 74 20 70  .} {2}.do_test p
64f0: 72 61 67 6d 61 2d 38 2e 32 2e 34 2e 31 20 7b 0a  ragma-8.2.4.1 {.
6500: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
6510: 50 52 41 47 4d 41 20 73 63 68 65 6d 61 5f 76 65  PRAGMA schema_ve
6520: 72 73 69 6f 6e 3b 0a 20 20 7d 0a 7d 20 7b 31 30  rsion;.  }.} {10
6530: 38 7d 0a 69 66 63 61 70 61 62 6c 65 20 76 61 63  8}.ifcapable vac
6540: 75 75 6d 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20  uum {.  do_test 
6550: 70 72 61 67 6d 61 2d 38 2e 32 2e 34 2e 32 20 7b  pragma-8.2.4.2 {
6560: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
6570: 20 20 20 20 20 56 41 43 55 55 4d 3b 0a 20 20 20       VACUUM;.   
6580: 20 20 20 50 52 41 47 4d 41 20 75 73 65 72 5f 76     PRAGMA user_v
6590: 65 72 73 69 6f 6e 3b 0a 20 20 20 20 7d 0a 20 20  ersion;.    }.  
65a0: 7d 20 7b 32 7d 0a 20 20 64 6f 5f 74 65 73 74 20  } {2}.  do_test 
65b0: 70 72 61 67 6d 61 2d 38 2e 32 2e 34 2e 33 20 7b  pragma-8.2.4.3 {
65c0: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
65d0: 20 20 20 20 20 50 52 41 47 4d 41 20 73 63 68 65       PRAGMA sche
65e0: 6d 61 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 20 20  ma_version;.    
65f0: 7d 0a 20 20 7d 20 7b 31 30 39 7d 0a 7d 0a 0a 69  }.  } {109}.}..i
6600: 66 63 61 70 61 62 6c 65 20 61 74 74 61 63 68 20  fcapable attach 
6610: 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 41 54 54  {.  db eval {ATT
6620: 41 43 48 20 27 74 65 73 74 32 2e 64 62 27 20 41  ACH 'test2.db' A
6630: 53 20 61 75 78 7d 0a 20 20 0a 20 20 23 20 43 68  S aux}.  .  # Ch
6640: 65 63 6b 20 74 68 61 74 20 74 68 65 20 75 73 65  eck that the use
6650: 72 2d 76 65 72 73 69 6f 6e 20 69 6e 20 74 68 65  r-version in the
6660: 20 61 75 78 69 6c 61 72 79 20 64 61 74 61 62 61   auxilary databa
6670: 73 65 20 63 61 6e 20 62 65 20 6d 61 6e 69 70 75  se can be manipu
6680: 6c 61 74 65 64 20 28 0a 20 20 23 20 61 6e 64 20  lated (.  # and 
6690: 74 68 61 74 20 77 65 20 61 72 65 6e 27 74 20 61  that we aren't a
66a0: 63 63 69 64 65 6e 74 61 6c 6c 79 20 6d 61 6e 69  ccidentally mani
66b0: 70 75 6c 61 74 69 6e 67 20 74 68 65 20 73 61 6d  pulating the sam
66c0: 65 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 62  e in the main db
66d0: 29 2e 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61  )..  do_test pra
66e0: 67 6d 61 2d 38 2e 32 2e 35 20 7b 0a 20 20 20 20  gma-8.2.5 {.    
66f0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
6700: 50 52 41 47 4d 41 20 61 75 78 2e 75 73 65 72 5f  PRAGMA aux.user_
6710: 76 65 72 73 69 6f 6e 3b 0a 20 20 20 20 7d 0a 20  version;.    }. 
6720: 20 7d 20 7b 30 7d 0a 20 20 64 6f 5f 74 65 73 74   } {0}.  do_test
6730: 20 70 72 61 67 6d 61 2d 38 2e 32 2e 36 20 7b 0a   pragma-8.2.6 {.
6740: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20      execsql {.  
6750: 20 20 20 20 50 52 41 47 4d 41 20 61 75 78 2e 75      PRAGMA aux.u
6760: 73 65 72 5f 76 65 72 73 69 6f 6e 20 3d 20 33 3b  ser_version = 3;
6770: 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 7d 0a 20 20  .    }.  } {}.  
6780: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38  do_test pragma-8
6790: 2e 32 2e 37 20 7b 0a 20 20 20 20 65 78 65 63 73  .2.7 {.    execs
67a0: 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d  ql {.      PRAGM
67b0: 41 20 61 75 78 2e 75 73 65 72 5f 76 65 72 73 69  A aux.user_versi
67c0: 6f 6e 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 33  on;.    }.  } {3
67d0: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67  }.  do_test prag
67e0: 6d 61 2d 38 2e 32 2e 38 20 7b 0a 20 20 20 20 65  ma-8.2.8 {.    e
67f0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50  xecsql {.      P
6800: 52 41 47 4d 41 20 6d 61 69 6e 2e 75 73 65 72 5f  RAGMA main.user_
6810: 76 65 72 73 69 6f 6e 3b 0a 20 20 20 20 7d 0a 20  version;.    }. 
6820: 20 7d 20 7b 32 7d 0a 20 20 0a 20 20 23 20 4e 6f   } {2}.  .  # No
6830: 77 20 63 68 65 63 6b 20 74 68 61 74 20 61 20 52  w check that a R
6840: 4f 4c 4c 42 41 43 4b 20 72 65 73 65 74 73 20 74  OLLBACK resets t
6850: 68 65 20 75 73 65 72 2d 76 65 72 73 69 6f 6e 20  he user-version 
6860: 69 66 20 69 74 20 68 61 73 20 62 65 65 6e 20 6d  if it has been m
6870: 6f 64 69 66 69 65 64 0a 20 20 23 20 77 69 74 68  odified.  # with
6880: 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  in a transaction
6890: 2e 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67  ..  do_test prag
68a0: 6d 61 2d 38 2e 32 2e 39 20 7b 0a 20 20 20 20 65  ma-8.2.9 {.    e
68b0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 42  xecsql {.      B
68c0: 45 47 49 4e 3b 0a 20 20 20 20 20 20 50 52 41 47  EGIN;.      PRAG
68d0: 4d 41 20 61 75 78 2e 75 73 65 72 5f 76 65 72 73  MA aux.user_vers
68e0: 69 6f 6e 20 3d 20 31 30 3b 0a 20 20 20 20 20 20  ion = 10;.      
68f0: 50 52 41 47 4d 41 20 75 73 65 72 5f 76 65 72 73  PRAGMA user_vers
6900: 69 6f 6e 20 3d 20 31 31 3b 0a 20 20 20 20 7d 0a  ion = 11;.    }.
6910: 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65 73 74    } {}.  do_test
6920: 20 70 72 61 67 6d 61 2d 38 2e 32 2e 31 30 20 7b   pragma-8.2.10 {
6930: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
6940: 20 20 20 20 20 50 52 41 47 4d 41 20 61 75 78 2e       PRAGMA aux.
6950: 75 73 65 72 5f 76 65 72 73 69 6f 6e 3b 0a 20 20  user_version;.  
6960: 20 20 7d 0a 20 20 7d 20 7b 31 30 7d 0a 20 20 64    }.  } {10}.  d
6970: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e  o_test pragma-8.
6980: 32 2e 31 31 20 7b 0a 20 20 20 20 65 78 65 63 73  2.11 {.    execs
6990: 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d  ql {.      PRAGM
69a0: 41 20 6d 61 69 6e 2e 75 73 65 72 5f 76 65 72 73  A main.user_vers
69b0: 69 6f 6e 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b  ion;.    }.  } {
69c0: 31 31 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72  11}.  do_test pr
69d0: 61 67 6d 61 2d 38 2e 32 2e 31 32 20 7b 0a 20 20  agma-8.2.12 {.  
69e0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
69f0: 20 20 52 4f 4c 4c 42 41 43 4b 3b 0a 20 20 20 20    ROLLBACK;.    
6a00: 20 20 50 52 41 47 4d 41 20 61 75 78 2e 75 73 65    PRAGMA aux.use
6a10: 72 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 20 20 7d  r_version;.    }
6a20: 0a 20 20 7d 20 7b 33 7d 0a 20 20 64 6f 5f 74 65  .  } {3}.  do_te
6a30: 73 74 20 70 72 61 67 6d 61 2d 38 2e 32 2e 31 33  st pragma-8.2.13
6a40: 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b   {.    execsql {
6a50: 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 6d 61  .      PRAGMA ma
6a60: 69 6e 2e 75 73 65 72 5f 76 65 72 73 69 6f 6e 3b  in.user_version;
6a70: 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 32 7d 0a 7d  .    }.  } {2}.}
6a80: 0a 0a 23 20 54 72 79 20 61 20 6e 65 67 61 74 69  ..# Try a negati
6a90: 76 65 20 76 61 6c 75 65 20 66 6f 72 20 74 68 65  ve value for the
6aa0: 20 75 73 65 72 2d 76 65 72 73 69 6f 6e 0a 64 6f   user-version.do
6ab0: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 32  _test pragma-8.2
6ac0: 2e 31 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  .14 {.  execsql 
6ad0: 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 75 73 65  {.    PRAGMA use
6ae0: 72 5f 76 65 72 73 69 6f 6e 20 3d 20 2d 34 35 30  r_version = -450
6af0: 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65  ;.  }.} {}.do_te
6b00: 73 74 20 70 72 61 67 6d 61 2d 38 2e 32 2e 31 35  st pragma-8.2.15
6b10: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
6b20: 20 20 20 50 52 41 47 4d 41 20 75 73 65 72 5f 76     PRAGMA user_v
6b30: 65 72 73 69 6f 6e 3b 0a 20 20 7d 0a 7d 20 7b 2d  ersion;.  }.} {-
6b40: 34 35 30 7d 0a 7d 20 3b 20 23 20 69 66 63 61 70  450}.} ; # ifcap
6b50: 61 62 6c 65 20 73 63 68 65 6d 61 5f 76 65 72 73  able schema_vers
6b60: 69 6f 6e 0a 0a 23 20 43 68 65 63 6b 20 74 6f 20  ion..# Check to 
6b70: 73 65 65 20 69 66 20 54 45 4d 50 5f 53 54 4f 52  see if TEMP_STOR
6b80: 45 20 69 73 20 6d 65 6d 6f 72 79 20 6f 72 20 64  E is memory or d
6b90: 69 73 6b 2e 20 20 52 65 74 75 72 6e 20 73 74 72  isk.  Return str
6ba0: 69 6e 67 73 0a 23 20 22 6d 65 6d 6f 72 79 22 20  ings.# "memory" 
6bb0: 6f 72 20 22 64 69 73 6b 22 20 61 73 20 61 70 70  or "disk" as app
6bc0: 72 6f 70 72 69 61 74 65 2e 0a 23 0a 70 72 6f 63  ropriate..#.proc
6bd0: 20 63 68 65 63 6b 5f 74 65 6d 70 5f 73 74 6f 72   check_temp_stor
6be0: 65 20 7b 7d 20 7b 0a 20 20 64 62 20 65 76 61 6c  e {} {.  db eval
6bf0: 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 74 65   {.    PRAGMA te
6c00: 6d 70 2e 63 61 63 68 65 5f 73 69 7a 65 20 3d 20  mp.cache_size = 
6c10: 31 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54 45  1;.    CREATE TE
6c20: 4d 50 20 54 41 42 4c 45 20 49 46 20 4e 4f 54 20  MP TABLE IF NOT 
6c30: 45 58 49 53 54 53 20 61 28 62 29 3b 0a 20 20 20  EXISTS a(b);.   
6c40: 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 61 3b 0a   DELETE FROM a;.
6c50: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
6c60: 61 20 56 41 4c 55 45 53 28 72 61 6e 64 6f 6d 62  a VALUES(randomb
6c70: 6c 6f 62 28 31 30 30 30 29 29 3b 0a 20 20 20 20  lob(1000));.    
6c80: 49 4e 53 45 52 54 20 49 4e 54 4f 20 61 20 53 45  INSERT INTO a SE
6c90: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 61 3b 0a 20  LECT * FROM a;. 
6ca0: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 61     INSERT INTO a
6cb0: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 61   SELECT * FROM a
6cc0: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
6cd0: 4f 20 61 20 53 45 4c 45 43 54 20 2a 20 46 52 4f  O a SELECT * FRO
6ce0: 4d 20 61 3b 0a 20 20 20 20 49 4e 53 45 52 54 20  M a;.    INSERT 
6cf0: 49 4e 54 4f 20 61 20 53 45 4c 45 43 54 20 2a 20  INTO a SELECT * 
6d00: 46 52 4f 4d 20 61 3b 0a 20 20 20 20 49 4e 53 45  FROM a;.    INSE
6d10: 52 54 20 49 4e 54 4f 20 61 20 53 45 4c 45 43 54  RT INTO a SELECT
6d20: 20 2a 20 46 52 4f 4d 20 61 3b 0a 20 20 20 20 49   * FROM a;.    I
6d30: 4e 53 45 52 54 20 49 4e 54 4f 20 61 20 53 45 4c  NSERT INTO a SEL
6d40: 45 43 54 20 2a 20 46 52 4f 4d 20 61 3b 0a 20 20  ECT * FROM a;.  
6d50: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 61 20    INSERT INTO a 
6d60: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 61 3b  SELECT * FROM a;
6d70: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
6d80: 20 61 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d   a SELECT * FROM
6d90: 20 61 3b 0a 20 20 7d 0a 20 20 64 62 20 65 76 61   a;.  }.  db eva
6da0: 6c 20 7b 50 52 41 47 4d 41 20 64 61 74 61 62 61  l {PRAGMA databa
6db0: 73 65 5f 6c 69 73 74 7d 20 7b 0a 20 20 20 20 69  se_list} {.    i
6dc0: 66 20 7b 24 6e 61 6d 65 3d 3d 22 74 65 6d 70 22  f {$name=="temp"
6dd0: 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20 62 74  } {.      set bt
6de0: 20 5b 62 74 72 65 65 5f 66 72 6f 6d 5f 64 62 20   [btree_from_db 
6df0: 64 62 20 31 5d 0a 20 20 20 20 20 20 69 66 20 7b  db 1].      if {
6e00: 5b 62 74 72 65 65 5f 69 73 6d 65 6d 64 62 20 24  [btree_ismemdb $
6e10: 62 74 5d 7d 20 7b 0a 20 20 20 20 20 20 20 20 72  bt]} {.        r
6e20: 65 74 75 72 6e 20 22 6d 65 6d 6f 72 79 22 0a 20  eturn "memory". 
6e30: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 72 65 74       }.      ret
6e40: 75 72 6e 20 22 64 69 73 6b 22 0a 20 20 20 20 7d  urn "disk".    }
6e50: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 22 75  .  }.  return "u
6e60: 6e 6b 6e 6f 77 6e 22 0a 7d 0a 0a 23 20 41 70 70  nknown".}..# App
6e70: 6c 69 63 61 74 69 6f 6e 5f 49 44 0a 23 0a 64 6f  lication_ID.#.do
6e80: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 33  _test pragma-8.3
6e90: 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .1 {.  execsql {
6ea0: 0a 20 20 20 20 50 52 41 47 4d 41 20 61 70 70 6c  .    PRAGMA appl
6eb0: 69 63 61 74 69 6f 6e 5f 69 64 3b 0a 20 20 7d 0a  ication_id;.  }.
6ec0: 7d 20 7b 30 7d 0a 64 6f 5f 74 65 73 74 20 70 72  } {0}.do_test pr
6ed0: 61 67 6d 61 2d 38 2e 33 2e 32 20 7b 0a 20 20 65  agma-8.3.2 {.  e
6ee0: 78 65 63 73 71 6c 20 7b 50 52 41 47 4d 41 20 41  xecsql {PRAGMA A
6ef0: 70 70 6c 69 63 61 74 69 6f 6e 5f 49 44 28 31 32  pplication_ID(12
6f00: 33 34 35 29 3b 20 50 52 41 47 4d 41 20 61 70 70  345); PRAGMA app
6f10: 6c 69 63 61 74 69 6f 6e 5f 69 64 3b 7d 0a 7d 20  lication_id;}.} 
6f20: 7b 31 32 33 34 35 7d 0a 0a 23 20 54 65 73 74 20  {12345}..# Test 
6f30: 74 65 6d 70 5f 73 74 6f 72 65 20 61 6e 64 20 74  temp_store and t
6f40: 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74  emp_store_direct
6f50: 6f 72 79 20 70 72 61 67 6d 61 73 0a 23 0a 69 66  ory pragmas.#.if
6f60: 63 61 70 61 62 6c 65 20 70 61 67 65 72 5f 70 72  capable pager_pr
6f70: 61 67 6d 61 73 20 7b 0a 64 6f 5f 74 65 73 74 20  agmas {.do_test 
6f80: 70 72 61 67 6d 61 2d 39 2e 31 20 7b 0a 20 20 64  pragma-9.1 {.  d
6f90: 62 20 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74 65  b close.  sqlite
6fa0: 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20 65  3 db test.db.  e
6fb0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41  xecsql {.    PRA
6fc0: 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 3b 0a  GMA temp_store;.
6fd0: 20 20 7d 0a 7d 20 7b 30 7d 0a 69 66 20 7b 24 54    }.} {0}.if {$T
6fe0: 45 4d 50 5f 53 54 4f 52 45 3c 3d 31 7d 20 7b 0a  EMP_STORE<=1} {.
6ff0: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
7000: 2d 39 2e 31 2e 31 20 7b 0a 20 20 20 20 63 68 65  -9.1.1 {.    che
7010: 63 6b 5f 74 65 6d 70 5f 73 74 6f 72 65 0a 20 20  ck_temp_store.  
7020: 7d 20 7b 64 69 73 6b 7d 0a 7d 20 65 6c 73 65 20  } {disk}.} else 
7030: 7b 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67  {.  do_test prag
7040: 6d 61 2d 39 2e 31 2e 31 20 7b 0a 20 20 20 20 63  ma-9.1.1 {.    c
7050: 68 65 63 6b 5f 74 65 6d 70 5f 73 74 6f 72 65 0a  heck_temp_store.
7060: 20 20 7d 20 7b 6d 65 6d 6f 72 79 7d 0a 7d 0a 0a    } {memory}.}..
7070: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 39  do_test pragma-9
7080: 2e 32 20 7b 0a 20 20 64 62 20 63 6c 6f 73 65 0a  .2 {.  db close.
7090: 20 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73    sqlite3 db tes
70a0: 74 2e 64 62 0a 20 20 65 78 65 63 73 71 6c 20 7b  t.db.  execsql {
70b0: 0a 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70  .    PRAGMA temp
70c0: 5f 73 74 6f 72 65 3d 66 69 6c 65 3b 0a 20 20 20  _store=file;.   
70d0: 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f   PRAGMA temp_sto
70e0: 72 65 3b 0a 20 20 7d 0a 7d 20 7b 31 7d 0a 69 66  re;.  }.} {1}.if
70f0: 20 7b 24 54 45 4d 50 5f 53 54 4f 52 45 3d 3d 33   {$TEMP_STORE==3
7100: 7d 20 7b 0a 20 20 23 20 57 68 65 6e 20 54 45 4d  } {.  # When TEM
7110: 50 5f 53 54 4f 52 45 20 69 73 20 33 2c 20 61 6c  P_STORE is 3, al
7120: 77 61 79 73 20 75 73 65 20 6d 65 6d 6f 72 79 20  ways use memory 
7130: 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 70 72  regardless of pr
7140: 61 67 6d 61 20 73 65 74 74 69 6e 67 73 2e 0a 20  agma settings.. 
7150: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
7160: 39 2e 32 2e 31 20 7b 0a 20 20 20 20 63 68 65 63  9.2.1 {.    chec
7170: 6b 5f 74 65 6d 70 5f 73 74 6f 72 65 0a 20 20 7d  k_temp_store.  }
7180: 20 7b 6d 65 6d 6f 72 79 7d 0a 7d 20 65 6c 73 65   {memory}.} else
7190: 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61   {.  do_test pra
71a0: 67 6d 61 2d 39 2e 32 2e 31 20 7b 0a 20 20 20 20  gma-9.2.1 {.    
71b0: 63 68 65 63 6b 5f 74 65 6d 70 5f 73 74 6f 72 65  check_temp_store
71c0: 0a 20 20 7d 20 7b 64 69 73 6b 7d 0a 7d 0a 0a 64  .  } {disk}.}..d
71d0: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 39 2e  o_test pragma-9.
71e0: 33 20 7b 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20  3 {.  db close. 
71f0: 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74   sqlite3 db test
7200: 2e 64 62 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  .db.  execsql {.
7210: 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f      PRAGMA temp_
7220: 73 74 6f 72 65 3d 6d 65 6d 6f 72 79 3b 0a 20 20  store=memory;.  
7230: 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74    PRAGMA temp_st
7240: 6f 72 65 3b 0a 20 20 7d 0a 7d 20 7b 32 7d 0a 69  ore;.  }.} {2}.i
7250: 66 20 7b 24 54 45 4d 50 5f 53 54 4f 52 45 3d 3d  f {$TEMP_STORE==
7260: 30 7d 20 7b 0a 20 20 23 20 57 68 65 6e 20 54 45  0} {.  # When TE
7270: 4d 50 5f 53 54 4f 52 45 20 69 73 20 30 2c 20 61  MP_STORE is 0, a
7280: 6c 77 61 79 73 20 75 73 65 20 74 68 65 20 64 69  lways use the di
7290: 73 6b 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66  sk regardless of
72a0: 20 70 72 61 67 6d 61 20 73 65 74 74 69 6e 67 73   pragma settings
72b0: 2e 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67  ..  do_test prag
72c0: 6d 61 2d 39 2e 33 2e 31 20 7b 0a 20 20 20 20 63  ma-9.3.1 {.    c
72d0: 68 65 63 6b 5f 74 65 6d 70 5f 73 74 6f 72 65 0a  heck_temp_store.
72e0: 20 20 7d 20 7b 64 69 73 6b 7d 0a 7d 20 65 6c 73    } {disk}.} els
72f0: 65 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 70 72  e {.  do_test pr
7300: 61 67 6d 61 2d 39 2e 33 2e 31 20 7b 0a 20 20 20  agma-9.3.1 {.   
7310: 20 63 68 65 63 6b 5f 74 65 6d 70 5f 73 74 6f 72   check_temp_stor
7320: 65 0a 20 20 7d 20 7b 6d 65 6d 6f 72 79 7d 0a 7d  e.  } {memory}.}
7330: 0a 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  ..do_test pragma
7340: 2d 39 2e 34 20 7b 0a 20 20 65 78 65 63 73 71 6c  -9.4 {.  execsql
7350: 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 74 65   {.    PRAGMA te
7360: 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f  mp_store_directo
7370: 72 79 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 69 66 63  ry;.  }.} {}.ifc
7380: 61 70 61 62 6c 65 20 77 73 64 20 7b 0a 20 20 64  apable wsd {.  d
7390: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 39 2e  o_test pragma-9.
73a0: 35 20 7b 0a 20 20 20 20 73 65 74 20 70 77 64 20  5 {.    set pwd 
73b0: 5b 73 74 72 69 6e 67 20 6d 61 70 20 7b 27 20 27  [string map {' '
73c0: 27 7d 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e  '} [file nativen
73d0: 61 6d 65 20 5b 67 65 74 5f 70 77 64 5d 5d 5d 0a  ame [get_pwd]]].
73e0: 20 20 20 20 65 78 65 63 73 71 6c 20 22 0a 20 20      execsql ".  
73f0: 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f      PRAGMA temp_
7400: 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 3d  store_directory=
7410: 27 24 70 77 64 27 3b 0a 20 20 20 20 22 0a 20 20  '$pwd';.    ".  
7420: 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70  } {}.  do_test p
7430: 72 61 67 6d 61 2d 39 2e 36 20 7b 0a 20 20 20 20  ragma-9.6 {.    
7440: 65 78 65 63 73 71 6c 20 7b 20 0a 20 20 20 20 20  execsql { .     
7450: 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f   PRAGMA temp_sto
7460: 72 65 5f 64 69 72 65 63 74 6f 72 79 3b 0a 20 20  re_directory;.  
7470: 20 20 7d 0a 20 20 7d 20 5b 6c 69 73 74 20 5b 66    }.  } [list [f
7480: 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b  ile nativename [
7490: 67 65 74 5f 70 77 64 5d 5d 5d 0a 20 20 64 6f 5f  get_pwd]]].  do_
74a0: 74 65 73 74 20 70 72 61 67 6d 61 2d 39 2e 37 20  test pragma-9.7 
74b0: 7b 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b  {.    catchsql {
74c0: 20 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 74   .      PRAGMA t
74d0: 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74  emp_store_direct
74e0: 6f 72 79 3d 27 2f 4e 4f 4e 2f 45 58 49 53 54 45  ory='/NON/EXISTE
74f0: 4e 54 2f 50 41 54 48 2f 46 4f 4f 42 41 52 27 3b  NT/PATH/FOOBAR';
7500: 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 31 20 7b 6e  .    }.  } {1 {n
7510: 6f 74 20 61 20 77 72 69 74 61 62 6c 65 20 64 69  ot a writable di
7520: 72 65 63 74 6f 72 79 7d 7d 0a 20 20 64 6f 5f 74  rectory}}.  do_t
7530: 65 73 74 20 70 72 61 67 6d 61 2d 39 2e 38 20 7b  est pragma-9.8 {
7540: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 20 0a  .    execsql { .
7550: 20 20 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d        PRAGMA tem
7560: 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72  p_store_director
7570: 79 3d 27 27 3b 0a 20 20 20 20 7d 0a 20 20 7d 20  y='';.    }.  } 
7580: 7b 7d 0a 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20  {}.  if {![info 
7590: 65 78 69 73 74 73 20 54 45 4d 50 5f 53 54 4f 52  exists TEMP_STOR
75a0: 45 5d 20 7c 7c 20 24 54 45 4d 50 5f 53 54 4f 52  E] || $TEMP_STOR
75b0: 45 3c 3d 31 7d 20 7b 0a 20 20 20 20 69 66 63 61  E<=1} {.    ifca
75c0: 70 61 62 6c 65 20 74 65 6d 70 64 62 20 7b 0a 20  pable tempdb {. 
75d0: 20 20 20 20 20 64 6f 5f 74 65 73 74 20 70 72 61       do_test pra
75e0: 67 6d 61 2d 39 2e 39 20 7b 0a 20 20 20 20 20 20  gma-9.9 {.      
75f0: 20 20 65 78 65 63 73 71 6c 20 7b 20 0a 20 20 20    execsql { .   
7600: 20 20 20 20 20 20 20 50 52 41 47 4d 41 20 74 65         PRAGMA te
7610: 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f  mp_store_directo
7620: 72 79 3b 0a 20 20 20 20 20 20 20 20 20 20 50 52  ry;.          PR
7630: 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 3d  AGMA temp_store=
7640: 46 49 4c 45 3b 0a 20 20 20 20 20 20 20 20 20 20  FILE;.          
7650: 43 52 45 41 54 45 20 54 45 4d 50 20 54 41 42 4c  CREATE TEMP TABL
7660: 45 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72  E temp_store_dir
7670: 65 63 74 6f 72 79 5f 74 65 73 74 28 61 20 69 6e  ectory_test(a in
7680: 74 65 67 65 72 29 3b 0a 20 20 20 20 20 20 20 20  teger);.        
7690: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 65    INSERT INTO te
76a0: 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f  mp_store_directo
76b0: 72 79 5f 74 65 73 74 20 76 61 6c 75 65 73 20 28  ry_test values (
76c0: 32 29 3b 0a 20 20 20 20 20 20 20 20 20 20 53 45  2);.          SE
76d0: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 65 6d 70  LECT * FROM temp
76e0: 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79  _store_directory
76f0: 5f 74 65 73 74 3b 0a 20 20 20 20 20 20 20 20 7d  _test;.        }
7700: 0a 20 20 20 20 20 20 7d 20 7b 32 7d 0a 20 20 20  .      } {2}.   
7710: 20 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d     do_test pragm
7720: 61 2d 39 2e 31 30 20 7b 0a 20 20 20 20 20 20 20  a-9.10 {.       
7730: 20 63 61 74 63 68 73 71 6c 20 22 0a 20 20 20 20   catchsql ".    
7740: 20 20 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d        PRAGMA tem
7750: 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72  p_store_director
7760: 79 3d 27 24 70 77 64 27 3b 0a 20 20 20 20 20 20  y='$pwd';.      
7770: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
7780: 4d 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72  M temp_store_dir
7790: 65 63 74 6f 72 79 5f 74 65 73 74 3b 0a 20 20 20  ectory_test;.   
77a0: 20 20 20 20 20 22 0a 20 20 20 20 20 20 7d 20 7b       ".      } {
77b0: 31 20 7b 6e 6f 20 73 75 63 68 20 74 61 62 6c 65  1 {no such table
77c0: 3a 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72  : temp_store_dir
77d0: 65 63 74 6f 72 79 5f 74 65 73 74 7d 7d 0a 20 20  ectory_test}}.  
77e0: 20 20 7d 0a 20 20 7d 0a 7d 0a 64 6f 5f 74 65 73    }.  }.}.do_tes
77f0: 74 20 70 72 61 67 6d 61 2d 39 2e 31 31 20 7b 0a  t pragma-9.11 {.
7800: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
7810: 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72  PRAGMA temp_stor
7820: 65 20 3d 20 30 3b 0a 20 20 20 20 50 52 41 47 4d  e = 0;.    PRAGM
7830: 41 20 74 65 6d 70 5f 73 74 6f 72 65 3b 0a 20 20  A temp_store;.  
7840: 7d 0a 7d 20 7b 30 7d 0a 64 6f 5f 74 65 73 74 20  }.} {0}.do_test 
7850: 70 72 61 67 6d 61 2d 39 2e 31 32 20 7b 0a 20 20  pragma-9.12 {.  
7860: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52  execsql {.    PR
7870: 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 20  AGMA temp_store 
7880: 3d 20 31 3b 0a 20 20 20 20 50 52 41 47 4d 41 20  = 1;.    PRAGMA 
7890: 74 65 6d 70 5f 73 74 6f 72 65 3b 0a 20 20 7d 0a  temp_store;.  }.
78a0: 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 70 72  } {1}.do_test pr
78b0: 61 67 6d 61 2d 39 2e 31 33 20 7b 0a 20 20 65 78  agma-9.13 {.  ex
78c0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47  ecsql {.    PRAG
78d0: 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 20 3d 20  MA temp_store = 
78e0: 32 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 74 65  2;.    PRAGMA te
78f0: 6d 70 5f 73 74 6f 72 65 3b 0a 20 20 7d 0a 7d 20  mp_store;.  }.} 
7900: 7b 32 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67  {2}.do_test prag
7910: 6d 61 2d 39 2e 31 34 20 7b 0a 20 20 65 78 65 63  ma-9.14 {.  exec
7920: 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41  sql {.    PRAGMA
7930: 20 74 65 6d 70 5f 73 74 6f 72 65 20 3d 20 33 3b   temp_store = 3;
7940: 0a 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70  .    PRAGMA temp
7950: 5f 73 74 6f 72 65 3b 0a 20 20 7d 0a 7d 20 7b 30  _store;.  }.} {0
7960: 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  }.do_test pragma
7970: 2d 39 2e 31 35 20 7b 0a 20 20 63 61 74 63 68 73  -9.15 {.  catchs
7980: 71 6c 20 7b 0a 20 20 20 20 42 45 47 49 4e 20 45  ql {.    BEGIN E
7990: 58 43 4c 55 53 49 56 45 3b 0a 20 20 20 20 43 52  XCLUSIVE;.    CR
79a0: 45 41 54 45 20 54 45 4d 50 20 54 41 42 4c 45 20  EATE TEMP TABLE 
79b0: 74 65 6d 70 5f 74 61 62 6c 65 28 74 29 3b 0a 20  temp_table(t);. 
79c0: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
79d0: 65 6d 70 5f 74 61 62 6c 65 20 56 41 4c 55 45 53  emp_table VALUES
79e0: 28 27 76 61 6c 75 61 62 6c 65 20 64 61 74 61 27  ('valuable data'
79f0: 29 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 74 65  );.    PRAGMA te
7a00: 6d 70 5f 73 74 6f 72 65 20 3d 20 31 3b 0a 20 20  mp_store = 1;.  
7a10: 7d 0a 7d 20 7b 31 20 7b 74 65 6d 70 6f 72 61 72  }.} {1 {temporar
7a20: 79 20 73 74 6f 72 61 67 65 20 63 61 6e 6e 6f 74  y storage cannot
7a30: 20 62 65 20 63 68 61 6e 67 65 64 20 66 72 6f 6d   be changed from
7a40: 20 77 69 74 68 69 6e 20 61 20 74 72 61 6e 73 61   within a transa
7a50: 63 74 69 6f 6e 7d 7d 0a 64 6f 5f 74 65 73 74 20  ction}}.do_test 
7a60: 70 72 61 67 6d 61 2d 39 2e 31 36 20 7b 0a 20 20  pragma-9.16 {.  
7a70: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45  execsql {.    SE
7a80: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 65 6d 70  LECT * FROM temp
7a90: 5f 74 61 62 6c 65 3b 0a 20 20 20 20 43 4f 4d 4d  _table;.    COMM
7aa0: 49 54 3b 0a 20 20 7d 0a 7d 20 7b 7b 76 61 6c 75  IT;.  }.} {{valu
7ab0: 61 62 6c 65 20 64 61 74 61 7d 7d 0a 0a 64 6f 5f  able data}}..do_
7ac0: 74 65 73 74 20 70 72 61 67 6d 61 2d 39 2e 31 37  test pragma-9.17
7ad0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
7ae0: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
7af0: 65 6d 70 5f 74 61 62 6c 65 20 56 41 4c 55 45 53  emp_table VALUES
7b00: 28 27 76 61 6c 75 61 62 6c 65 20 64 61 74 61 20  ('valuable data 
7b10: 49 49 27 29 3b 0a 20 20 20 20 53 45 4c 45 43 54  II');.    SELECT
7b20: 20 2a 20 46 52 4f 4d 20 74 65 6d 70 5f 74 61 62   * FROM temp_tab
7b30: 6c 65 3b 0a 20 20 7d 0a 7d 20 7b 7b 76 61 6c 75  le;.  }.} {{valu
7b40: 61 62 6c 65 20 64 61 74 61 7d 20 7b 76 61 6c 75  able data} {valu
7b50: 61 62 6c 65 20 64 61 74 61 20 49 49 7d 7d 0a 0a  able data II}}..
7b60: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 39  do_test pragma-9
7b70: 2e 31 38 20 7b 0a 20 20 73 65 74 20 72 63 20 5b  .18 {.  set rc [
7b80: 63 61 74 63 68 20 7b 0a 20 20 20 20 64 62 20 65  catch {.    db e
7b90: 76 61 6c 20 7b 53 45 4c 45 43 54 20 74 20 46 52  val {SELECT t FR
7ba0: 4f 4d 20 74 65 6d 70 5f 74 61 62 6c 65 7d 20 7b  OM temp_table} {
7bb0: 0a 20 20 20 20 20 20 65 78 65 63 73 71 6c 20 7b  .      execsql {
7bc0: 70 72 61 67 6d 61 20 74 65 6d 70 5f 73 74 6f 72  pragma temp_stor
7bd0: 65 20 3d 20 31 7d 0a 20 20 20 20 7d 0a 20 20 7d  e = 1}.    }.  }
7be0: 20 6d 73 67 5d 0a 20 20 6c 69 73 74 20 24 72 63   msg].  list $rc
7bf0: 20 24 6d 73 67 0a 7d 20 7b 31 20 7b 74 65 6d 70   $msg.} {1 {temp
7c00: 6f 72 61 72 79 20 73 74 6f 72 61 67 65 20 63 61  orary storage ca
7c10: 6e 6e 6f 74 20 62 65 20 63 68 61 6e 67 65 64 20  nnot be changed 
7c20: 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 20 74 72  from within a tr
7c30: 61 6e 73 61 63 74 69 6f 6e 7d 7d 0a 0a 7d 20 3b  ansaction}}..} ;
7c40: 23 20 69 66 63 61 70 61 62 6c 65 20 70 61 67 65  # ifcapable page
7c50: 72 5f 70 72 61 67 6d 61 73 0a 0a 69 66 63 61 70  r_pragmas..ifcap
7c60: 61 62 6c 65 20 74 72 69 67 67 65 72 20 7b 0a 0a  able trigger {..
7c70: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31  do_test pragma-1
7c80: 30 2e 30 20 7b 0a 20 20 63 61 74 63 68 73 71 6c  0.0 {.  catchsql
7c90: 20 7b 0a 20 20 20 20 44 52 4f 50 20 54 41 42 4c   {.    DROP TABL
7ca0: 45 20 6d 61 69 6e 2e 74 31 3b 0a 20 20 7d 0a 20  E main.t1;.  }. 
7cb0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50   execsql {.    P
7cc0: 52 41 47 4d 41 20 63 6f 75 6e 74 5f 63 68 61 6e  RAGMA count_chan
7cd0: 67 65 73 20 3d 20 31 3b 0a 0a 20 20 20 20 43 52  ges = 1;..    CR
7ce0: 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 61 20  EATE TABLE t1(a 
7cf0: 50 52 49 4d 41 52 59 20 4b 45 59 29 3b 0a 20 20  PRIMARY KEY);.  
7d00: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
7d10: 31 5f 6d 69 72 72 6f 72 28 61 29 3b 0a 20 20 20  1_mirror(a);.   
7d20: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31   CREATE TABLE t1
7d30: 5f 6d 69 72 72 6f 72 32 28 61 29 3b 0a 20 20 20  _mirror2(a);.   
7d40: 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20   CREATE TRIGGER 
7d50: 74 31 5f 62 69 20 42 45 46 4f 52 45 20 49 4e 53  t1_bi BEFORE INS
7d60: 45 52 54 20 4f 4e 20 74 31 20 42 45 47 49 4e 20  ERT ON t1 BEGIN 
7d70: 0a 20 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e  .      INSERT IN
7d80: 54 4f 20 74 31 5f 6d 69 72 72 6f 72 20 56 41 4c  TO t1_mirror VAL
7d90: 55 45 53 28 6e 65 77 2e 61 29 3b 0a 20 20 20 20  UES(new.a);.    
7da0: 45 4e 44 3b 0a 20 20 20 20 43 52 45 41 54 45 20  END;.    CREATE 
7db0: 54 52 49 47 47 45 52 20 74 31 5f 61 69 20 41 46  TRIGGER t1_ai AF
7dc0: 54 45 52 20 49 4e 53 45 52 54 20 4f 4e 20 74 31  TER INSERT ON t1
7dd0: 20 42 45 47 49 4e 20 0a 20 20 20 20 20 20 49 4e   BEGIN .      IN
7de0: 53 45 52 54 20 49 4e 54 4f 20 74 31 5f 6d 69 72  SERT INTO t1_mir
7df0: 72 6f 72 32 20 56 41 4c 55 45 53 28 6e 65 77 2e  ror2 VALUES(new.
7e00: 61 29 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20 20  a);.    END;.   
7e10: 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20   CREATE TRIGGER 
7e20: 74 31 5f 62 75 20 42 45 46 4f 52 45 20 55 50 44  t1_bu BEFORE UPD
7e30: 41 54 45 20 4f 4e 20 74 31 20 42 45 47 49 4e 20  ATE ON t1 BEGIN 
7e40: 0a 20 20 20 20 20 20 55 50 44 41 54 45 20 74 31  .      UPDATE t1
7e50: 5f 6d 69 72 72 6f 72 20 53 45 54 20 61 20 3d 20  _mirror SET a = 
7e60: 6e 65 77 2e 61 20 57 48 45 52 45 20 61 20 3d 20  new.a WHERE a = 
7e70: 6f 6c 64 2e 61 3b 0a 20 20 20 20 45 4e 44 3b 0a  old.a;.    END;.
7e80: 20 20 20 20 43 52 45 41 54 45 20 54 52 49 47 47      CREATE TRIGG
7e90: 45 52 20 74 31 5f 61 75 20 41 46 54 45 52 20 55  ER t1_au AFTER U
7ea0: 50 44 41 54 45 20 4f 4e 20 74 31 20 42 45 47 49  PDATE ON t1 BEGI
7eb0: 4e 20 0a 20 20 20 20 20 20 55 50 44 41 54 45 20  N .      UPDATE 
7ec0: 74 31 5f 6d 69 72 72 6f 72 32 20 53 45 54 20 61  t1_mirror2 SET a
7ed0: 20 3d 20 6e 65 77 2e 61 20 57 48 45 52 45 20 61   = new.a WHERE a
7ee0: 20 3d 20 6f 6c 64 2e 61 3b 0a 20 20 20 20 45 4e   = old.a;.    EN
7ef0: 44 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54 52  D;.    CREATE TR
7f00: 49 47 47 45 52 20 74 31 5f 62 64 20 42 45 46 4f  IGGER t1_bd BEFO
7f10: 52 45 20 44 45 4c 45 54 45 20 4f 4e 20 74 31 20  RE DELETE ON t1 
7f20: 42 45 47 49 4e 20 0a 20 20 20 20 20 20 44 45 4c  BEGIN .      DEL
7f30: 45 54 45 20 46 52 4f 4d 20 74 31 5f 6d 69 72 72  ETE FROM t1_mirr
7f40: 6f 72 20 57 48 45 52 45 20 61 20 3d 20 6f 6c 64  or WHERE a = old
7f50: 2e 61 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20 20  .a;.    END;.   
7f60: 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20   CREATE TRIGGER 
7f70: 74 31 5f 61 64 20 41 46 54 45 52 20 44 45 4c 45  t1_ad AFTER DELE
7f80: 54 45 20 4f 4e 20 74 31 20 42 45 47 49 4e 20 0a  TE ON t1 BEGIN .
7f90: 20 20 20 20 20 20 44 45 4c 45 54 45 20 46 52 4f        DELETE FRO
7fa0: 4d 20 74 31 5f 6d 69 72 72 6f 72 32 20 57 48 45  M t1_mirror2 WHE
7fb0: 52 45 20 61 20 3d 20 6f 6c 64 2e 61 3b 0a 20 20  RE a = old.a;.  
7fc0: 20 20 45 4e 44 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a    END;.  }.} {}.
7fd0: 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d  .do_test pragma-
7fe0: 31 30 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c  10.1 {.  execsql
7ff0: 20 7b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e   {.    INSERT IN
8000: 54 4f 20 74 31 20 56 41 4c 55 45 53 28 72 61 6e  TO t1 VALUES(ran
8010: 64 73 74 72 28 31 30 2c 31 30 29 29 3b 0a 20 20  dstr(10,10));.  
8020: 7d 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20  }.} {1}.do_test 
8030: 70 72 61 67 6d 61 2d 31 30 2e 32 20 7b 0a 20 20  pragma-10.2 {.  
8040: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 55 50  execsql {.    UP
8050: 44 41 54 45 20 74 31 20 53 45 54 20 61 20 3d 20  DATE t1 SET a = 
8060: 72 61 6e 64 73 74 72 28 31 30 2c 31 30 29 3b 0a  randstr(10,10);.
8070: 20 20 7d 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73    }.} {1}.do_tes
8080: 74 20 70 72 61 67 6d 61 2d 31 30 2e 33 20 7b 0a  t pragma-10.3 {.
8090: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
80a0: 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 31 3b 0a  DELETE FROM t1;.
80b0: 20 20 7d 0a 7d 20 7b 31 7d 0a 0a 7d 20 3b 23 20    }.} {1}..} ;# 
80c0: 69 66 63 61 70 61 62 6c 65 20 74 72 69 67 67 65  ifcapable trigge
80d0: 72 0a 0a 69 66 63 61 70 61 62 6c 65 20 73 63 68  r..ifcapable sch
80e0: 65 6d 61 5f 70 72 61 67 6d 61 73 20 7b 0a 20 20  ema_pragmas {.  
80f0: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31  do_test pragma-1
8100: 31 2e 31 20 7b 0a 20 20 20 20 65 78 65 63 73 71  1.1 {.    execsq
8110: 6c 32 20 7b 0a 20 20 20 20 20 20 70 72 61 67 6d  l2 {.      pragm
8120: 61 20 63 6f 6c 6c 61 74 69 6f 6e 5f 6c 69 73 74  a collation_list
8130: 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 73 65 71  ;.    }.  } {seq
8140: 20 30 20 6e 61 6d 65 20 52 54 52 49 4d 20 73 65   0 name RTRIM se
8150: 71 20 31 20 6e 61 6d 65 20 4e 4f 43 41 53 45 20  q 1 name NOCASE 
8160: 73 65 71 20 32 20 6e 61 6d 65 20 42 49 4e 41 52  seq 2 name BINAR
8170: 59 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61  Y}.  do_test pra
8180: 67 6d 61 2d 31 31 2e 32 20 7b 0a 20 20 20 20 64  gma-11.2 {.    d
8190: 62 20 63 6f 6c 6c 61 74 65 20 4e 65 77 5f 43 6f  b collate New_Co
81a0: 6c 6c 61 74 69 6f 6e 20 62 6c 61 68 2e 2e 2e 0a  llation blah....
81b0: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20      execsql {.  
81c0: 20 20 20 20 70 72 61 67 6d 61 20 63 6f 6c 6c 61      pragma colla
81d0: 74 69 6f 6e 5f 6c 69 73 74 3b 0a 20 20 20 20 7d  tion_list;.    }
81e0: 0a 20 20 7d 20 7b 30 20 4e 65 77 5f 43 6f 6c 6c  .  } {0 New_Coll
81f0: 61 74 69 6f 6e 20 31 20 52 54 52 49 4d 20 32 20  ation 1 RTRIM 2 
8200: 4e 4f 43 41 53 45 20 33 20 42 49 4e 41 52 59 7d  NOCASE 3 BINARY}
8210: 0a 7d 0a 0a 69 66 63 61 70 61 62 6c 65 20 73 63  .}..ifcapable sc
8220: 68 65 6d 61 5f 70 72 61 67 6d 61 73 26 26 74 65  hema_pragmas&&te
8230: 6d 70 64 62 20 7b 0a 20 20 64 6f 5f 74 65 73 74  mpdb {.  do_test
8240: 20 70 72 61 67 6d 61 2d 31 32 2e 31 20 7b 0a 20   pragma-12.1 {. 
8250: 20 20 20 73 71 6c 69 74 65 33 20 64 62 32 20 74     sqlite3 db2 t
8260: 65 73 74 2e 64 62 0a 20 20 20 20 65 78 65 63 73  est.db.    execs
8270: 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d  ql {.      PRAGM
8280: 41 20 74 65 6d 70 2e 74 61 62 6c 65 5f 69 6e 66  A temp.table_inf
8290: 6f 28 27 61 62 63 27 29 3b 0a 20 20 20 20 7d 20  o('abc');.    } 
82a0: 64 62 32 0a 20 20 7d 20 7b 7d 0a 20 20 64 62 32  db2.  } {}.  db2
82b0: 20 63 6c 6f 73 65 0a 0a 20 20 64 6f 5f 74 65 73   close..  do_tes
82c0: 74 20 70 72 61 67 6d 61 2d 31 32 2e 32 20 7b 0a  t pragma-12.2 {.
82d0: 20 20 20 20 73 71 6c 69 74 65 33 20 64 62 32 20      sqlite3 db2 
82e0: 74 65 73 74 2e 64 62 0a 20 20 20 20 65 78 65 63  test.db.    exec
82f0: 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47  sql {.      PRAG
8300: 4d 41 20 74 65 6d 70 2e 64 65 66 61 75 6c 74 5f  MA temp.default_
8310: 63 61 63 68 65 5f 73 69 7a 65 20 3d 20 32 30 30  cache_size = 200
8320: 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 74  ;.      PRAGMA t
8330: 65 6d 70 2e 64 65 66 61 75 6c 74 5f 63 61 63 68  emp.default_cach
8340: 65 5f 73 69 7a 65 3b 0a 20 20 20 20 7d 20 64 62  e_size;.    } db
8350: 32 0a 20 20 7d 20 7b 32 30 30 7d 0a 20 20 64 62  2.  } {200}.  db
8360: 32 20 63 6c 6f 73 65 0a 0a 20 20 64 6f 5f 74 65  2 close..  do_te
8370: 73 74 20 70 72 61 67 6d 61 2d 31 32 2e 33 20 7b  st pragma-12.3 {
8380: 0a 20 20 20 20 73 71 6c 69 74 65 33 20 64 62 32  .    sqlite3 db2
8390: 20 74 65 73 74 2e 64 62 0a 20 20 20 20 65 78 65   test.db.    exe
83a0: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41  csql {.      PRA
83b0: 47 4d 41 20 74 65 6d 70 2e 63 61 63 68 65 5f 73  GMA temp.cache_s
83c0: 69 7a 65 20 3d 20 34 30 30 3b 0a 20 20 20 20 20  ize = 400;.     
83d0: 20 50 52 41 47 4d 41 20 74 65 6d 70 2e 63 61 63   PRAGMA temp.cac
83e0: 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 7d 20 64  he_size;.    } d
83f0: 62 32 0a 20 20 7d 20 7b 34 30 30 7d 0a 20 20 64  b2.  } {400}.  d
8400: 62 32 20 63 6c 6f 73 65 0a 7d 0a 0a 69 66 63 61  b2 close.}..ifca
8410: 70 61 62 6c 65 20 62 6c 6f 62 6c 69 74 20 7b 0a  pable bloblit {.
8420: 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d  .do_test pragma-
8430: 31 33 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c  13.1 {.  execsql
8440: 20 7b 0a 20 20 20 20 44 52 4f 50 20 54 41 42 4c   {.    DROP TABL
8450: 45 20 49 46 20 45 58 49 53 54 53 20 74 34 3b 0a  E IF EXISTS t4;.
8460: 20 20 20 20 50 52 41 47 4d 41 20 76 64 62 65 5f      PRAGMA vdbe_
8470: 74 72 61 63 65 3d 6f 6e 3b 0a 20 20 20 20 50 52  trace=on;.    PR
8480: 41 47 4d 41 20 76 64 62 65 5f 6c 69 73 74 69 6e  AGMA vdbe_listin
8490: 67 3d 6f 6e 3b 0a 20 20 20 20 50 52 41 47 4d 41  g=on;.    PRAGMA
84a0: 20 73 71 6c 5f 74 72 61 63 65 3d 6f 6e 3b 0a 20   sql_trace=on;. 
84b0: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
84c0: 74 34 28 61 20 49 4e 54 45 47 45 52 20 50 52 49  t4(a INTEGER PRI
84d0: 4d 41 52 59 20 4b 45 59 2c 62 29 3b 0a 20 20 20  MARY KEY,b);.   
84e0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 34 28   INSERT INTO t4(
84f0: 62 29 20 56 41 4c 55 45 53 28 78 27 30 31 32 33  b) VALUES(x'0123
8500: 34 35 36 37 38 39 61 62 63 64 65 66 30 31 32 33  456789abcdef0123
8510: 34 35 36 37 38 39 61 62 63 64 65 66 30 31 32 33  456789abcdef0123
8520: 34 35 36 37 38 39 27 29 3b 0a 20 20 20 20 49 4e  456789');.    IN
8530: 53 45 52 54 20 49 4e 54 4f 20 74 34 28 62 29 20  SERT INTO t4(b) 
8540: 56 41 4c 55 45 53 28 72 61 6e 64 73 74 72 28 33  VALUES(randstr(3
8550: 30 2c 33 30 29 29 3b 0a 20 20 20 20 49 4e 53 45  0,30));.    INSE
8560: 52 54 20 49 4e 54 4f 20 74 34 28 62 29 20 56 41  RT INTO t4(b) VA
8570: 4c 55 45 53 28 31 2e 32 33 34 35 36 29 3b 0a 20  LUES(1.23456);. 
8580: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
8590: 34 28 62 29 20 56 41 4c 55 45 53 28 4e 55 4c 4c  4(b) VALUES(NULL
85a0: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
85b0: 54 4f 20 74 34 28 62 29 20 56 41 4c 55 45 53 28  TO t4(b) VALUES(
85c0: 30 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  0);.    INSERT I
85d0: 4e 54 4f 20 74 34 28 62 29 20 53 45 4c 45 43 54  NTO t4(b) SELECT
85e0: 20 62 7c 7c 62 7c 7c 62 7c 7c 62 20 46 52 4f 4d   b||b||b||b FROM
85f0: 20 74 34 3b 0a 20 20 20 20 53 45 4c 45 43 54 20   t4;.    SELECT 
8600: 2a 20 46 52 4f 4d 20 74 34 3b 0a 20 20 7d 0a 20  * FROM t4;.  }. 
8610: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50   execsql {.    P
8620: 52 41 47 4d 41 20 76 64 62 65 5f 74 72 61 63 65  RAGMA vdbe_trace
8630: 3d 6f 66 66 3b 0a 20 20 20 20 50 52 41 47 4d 41  =off;.    PRAGMA
8640: 20 76 64 62 65 5f 6c 69 73 74 69 6e 67 3d 6f 66   vdbe_listing=of
8650: 66 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 73 71  f;.    PRAGMA sq
8660: 6c 5f 74 72 61 63 65 3d 6f 66 66 3b 0a 20 20 7d  l_trace=off;.  }
8670: 0a 7d 20 7b 7d 0a 0a 7d 20 3b 23 20 69 66 63 61  .} {}..} ;# ifca
8680: 70 61 62 6c 65 20 62 6c 6f 62 6c 69 74 20 0a 0a  pable bloblit ..
8690: 69 66 63 61 70 61 62 6c 65 20 70 61 67 65 72 5f  ifcapable pager_
86a0: 70 72 61 67 6d 61 73 20 7b 0a 20 20 64 62 20 63  pragmas {.  db c
86b0: 6c 6f 73 65 0a 20 20 66 6f 72 63 65 64 65 6c 65  lose.  forcedele
86c0: 74 65 20 74 65 73 74 2e 64 62 0a 20 20 73 71 6c  te test.db.  sql
86d0: 69 74 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a  ite3 db test.db.
86e0: 20 0a 20 20 23 20 45 56 49 44 45 4e 43 45 2d 4f   .  # EVIDENCE-O
86f0: 46 3a 20 52 2d 31 35 36 37 32 2d 33 33 36 31 31  F: R-15672-33611
8700: 20 50 52 41 47 4d 41 20 73 63 68 65 6d 61 2e 70   PRAGMA schema.p
8710: 61 67 65 5f 63 6f 75 6e 74 3b 20 52 65 74 75 72  age_count; Retur
8720: 6e 20 74 68 65 20 74 6f 74 61 6c 0a 20 20 23 20  n the total.  # 
8730: 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20  number of pages 
8740: 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
8750: 66 69 6c 65 2e 0a 20 20 23 0a 20 20 64 6f 5f 74  file..  #.  do_t
8760: 65 73 74 20 70 72 61 67 6d 61 2d 31 34 2e 31 20  est pragma-14.1 
8770: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 20  {.    execsql { 
8780: 70 72 61 67 6d 61 20 61 75 74 6f 5f 76 61 63 75  pragma auto_vacu
8790: 75 6d 20 3d 20 30 20 7d 0a 20 20 20 20 65 78 65  um = 0 }.    exe
87a0: 63 73 71 6c 20 7b 20 70 72 61 67 6d 61 20 70 61  csql { pragma pa
87b0: 67 65 5f 63 6f 75 6e 74 3b 20 70 72 61 67 6d 61  ge_count; pragma
87c0: 20 6d 61 69 6e 2e 70 61 67 65 5f 63 6f 75 6e 74   main.page_count
87d0: 20 7d 0a 20 20 7d 20 7b 30 20 30 7d 0a 0a 20 20   }.  } {0 0}..  
87e0: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31  do_test pragma-1
87f0: 34 2e 32 20 7b 0a 20 20 20 20 65 78 65 63 73 71  4.2 {.    execsq
8800: 6c 20 7b 20 0a 20 20 20 20 20 20 43 52 45 41 54  l { .      CREAT
8810: 45 20 54 41 42 4c 45 20 61 62 63 28 61 2c 20 62  E TABLE abc(a, b
8820: 2c 20 63 29 3b 0a 20 20 20 20 20 20 50 52 41 47  , c);.      PRAG
8830: 4d 41 20 70 61 67 65 5f 63 6f 75 6e 74 3b 0a 20  MA page_count;. 
8840: 20 20 20 20 20 50 52 41 47 4d 41 20 6d 61 69 6e       PRAGMA main
8850: 2e 70 61 67 65 5f 63 6f 75 6e 74 3b 0a 20 20 20  .page_count;.   
8860: 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 2e 70     PRAGMA temp.p
8870: 61 67 65 5f 63 6f 75 6e 74 3b 0a 20 20 20 20 7d  age_count;.    }
8880: 0a 20 20 7d 20 7b 32 20 32 20 30 7d 0a 20 20 64  .  } {2 2 0}.  d
8890: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 34  o_test pragma-14
88a0: 2e 32 75 63 20 7b 0a 20 20 20 20 65 78 65 63 73  .2uc {.    execs
88b0: 71 6c 20 7b 70 72 61 67 6d 61 20 50 41 47 45 5f  ql {pragma PAGE_
88c0: 43 4f 55 4e 54 7d 0a 20 20 7d 20 7b 32 7d 0a 0a  COUNT}.  } {2}..
88d0: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
88e0: 2d 31 34 2e 33 20 7b 0a 20 20 20 20 65 78 65 63  -14.3 {.    exec
88f0: 73 71 6c 20 7b 20 0a 20 20 20 20 20 20 42 45 47  sql { .      BEG
8900: 49 4e 3b 0a 20 20 20 20 20 20 43 52 45 41 54 45  IN;.      CREATE
8910: 20 54 41 42 4c 45 20 64 65 66 28 61 2c 20 62 2c   TABLE def(a, b,
8920: 20 63 29 3b 0a 20 20 20 20 20 20 50 52 41 47 4d   c);.      PRAGM
8930: 41 20 70 61 67 65 5f 63 6f 75 6e 74 3b 0a 20 20  A page_count;.  
8940: 20 20 7d 0a 20 20 7d 20 7b 33 7d 0a 20 20 64 6f    }.  } {3}.  do
8950: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 34 2e  _test pragma-14.
8960: 33 75 63 20 7b 0a 20 20 20 20 65 78 65 63 73 71  3uc {.    execsq
8970: 6c 20 7b 70 72 61 67 6d 61 20 50 41 47 45 5f 43  l {pragma PAGE_C
8980: 4f 55 4e 54 7d 0a 20 20 7d 20 7b 33 7d 0a 0a 20  OUNT}.  } {3}.. 
8990: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
89a0: 31 34 2e 34 20 7b 0a 20 20 20 20 73 65 74 20 70  14.4 {.    set p
89b0: 61 67 65 5f 73 69 7a 65 20 5b 64 62 20 6f 6e 65  age_size [db one
89c0: 20 7b 70 72 61 67 6d 61 20 70 61 67 65 5f 73 69   {pragma page_si
89d0: 7a 65 7d 5d 0a 20 20 20 20 65 78 70 72 20 5b 66  ze}].    expr [f
89e0: 69 6c 65 20 73 69 7a 65 20 74 65 73 74 2e 64 62  ile size test.db
89f0: 5d 20 2f 20 24 70 61 67 65 5f 73 69 7a 65 0a 20  ] / $page_size. 
8a00: 20 7d 20 7b 32 7d 0a 0a 20 20 64 6f 5f 74 65 73   } {2}..  do_tes
8a10: 74 20 70 72 61 67 6d 61 2d 31 34 2e 35 20 7b 0a  t pragma-14.5 {.
8a20: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20      execsql {.  
8a30: 20 20 20 20 52 4f 4c 4c 42 41 43 4b 3b 0a 20 20      ROLLBACK;.  
8a40: 20 20 20 20 50 52 41 47 4d 41 20 70 61 67 65 5f      PRAGMA page_
8a50: 63 6f 75 6e 74 3b 0a 20 20 20 20 7d 0a 20 20 7d  count;.    }.  }
8a60: 20 7b 32 7d 0a 0a 20 20 64 6f 5f 74 65 73 74 20   {2}..  do_test 
8a70: 70 72 61 67 6d 61 2d 31 34 2e 36 20 7b 0a 20 20  pragma-14.6 {.  
8a80: 20 20 66 6f 72 63 65 64 65 6c 65 74 65 20 74 65    forcedelete te
8a90: 73 74 32 2e 64 62 0a 20 20 20 20 73 71 6c 69 74  st2.db.    sqlit
8aa0: 65 33 20 64 62 32 20 74 65 73 74 32 2e 64 62 0a  e3 db2 test2.db.
8ab0: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20      execsql {.  
8ac0: 20 20 20 20 50 52 41 47 4d 41 20 61 75 74 6f 5f      PRAGMA auto_
8ad0: 76 61 63 75 75 6d 20 3d 20 30 3b 0a 20 20 20 20  vacuum = 0;.    
8ae0: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
8af0: 31 28 61 2c 20 62 2c 20 63 29 3b 0a 20 20 20 20  1(a, b, c);.    
8b00: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
8b10: 32 28 61 2c 20 62 2c 20 63 29 3b 0a 20 20 20 20  2(a, b, c);.    
8b20: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
8b30: 33 28 61 2c 20 62 2c 20 63 29 3b 0a 20 20 20 20  3(a, b, c);.    
8b40: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
8b50: 34 28 61 2c 20 62 2c 20 63 29 3b 0a 20 20 20 20  4(a, b, c);.    
8b60: 7d 20 64 62 32 0a 20 20 20 20 64 62 32 20 63 6c  } db2.    db2 cl
8b70: 6f 73 65 0a 20 20 20 20 65 78 65 63 73 71 6c 20  ose.    execsql 
8b80: 7b 0a 20 20 20 20 20 20 41 54 54 41 43 48 20 27  {.      ATTACH '
8b90: 74 65 73 74 32 2e 64 62 27 20 41 53 20 61 75 78  test2.db' AS aux
8ba0: 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 61  ;.      PRAGMA a
8bb0: 75 78 2e 70 61 67 65 5f 63 6f 75 6e 74 3b 0a 20  ux.page_count;. 
8bc0: 20 20 20 7d 20 0a 20 20 7d 20 7b 35 7d 0a 20 20     } .  } {5}.  
8bd0: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31  do_test pragma-1
8be0: 34 2e 36 75 63 20 7b 0a 20 20 20 20 65 78 65 63  4.6uc {.    exec
8bf0: 73 71 6c 20 7b 70 72 61 67 6d 61 20 41 55 58 2e  sql {pragma AUX.
8c00: 50 41 47 45 5f 43 4f 55 4e 54 7d 0a 20 20 7d 20  PAGE_COUNT}.  } 
8c10: 7b 35 7d 0a 7d 0a 0a 23 20 54 65 73 74 20 74 68  {5}.}..# Test th
8c20: 61 74 20 74 68 65 20 76 61 6c 75 65 20 73 65 74  at the value set
8c30: 20 75 73 69 6e 67 20 74 68 65 20 63 61 63 68 65   using the cache
8c40: 5f 73 69 7a 65 20 70 72 61 67 6d 61 20 69 73 20  _size pragma is 
8c50: 6e 6f 74 20 72 65 73 65 74 20 77 68 65 6e 20 74  not reset when t
8c60: 68 65 0a 23 20 73 63 68 65 6d 61 20 69 73 20 72  he.# schema is r
8c70: 65 6c 6f 61 64 65 64 2e 0a 23 0a 69 66 63 61 70  eloaded..#.ifcap
8c80: 61 62 6c 65 20 70 61 67 65 72 5f 70 72 61 67 6d  able pager_pragm
8c90: 61 73 20 7b 0a 20 20 64 62 20 63 6c 6f 73 65 0a  as {.  db close.
8ca0: 20 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73    sqlite3 db tes
8cb0: 74 2e 64 62 0a 20 20 64 6f 5f 74 65 73 74 20 70  t.db.  do_test p
8cc0: 72 61 67 6d 61 2d 31 35 2e 31 20 7b 0a 20 20 20  ragma-15.1 {.   
8cd0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20   execsql {.     
8ce0: 20 50 52 41 47 4d 41 20 63 61 63 68 65 5f 73 69   PRAGMA cache_si
8cf0: 7a 65 3d 35 39 3b 0a 20 20 20 20 20 20 50 52 41  ze=59;.      PRA
8d00: 47 4d 41 20 63 61 63 68 65 5f 73 69 7a 65 3b 0a  GMA cache_size;.
8d10: 20 20 20 20 7d 0a 20 20 7d 20 7b 35 39 7d 0a 20      }.  } {59}. 
8d20: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
8d30: 31 35 2e 32 20 7b 0a 20 20 20 20 73 71 6c 69 74  15.2 {.    sqlit
8d40: 65 33 20 64 62 32 20 74 65 73 74 2e 64 62 0a 20  e3 db2 test.db. 
8d50: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
8d60: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
8d70: 6e 65 77 74 61 62 6c 65 28 61 2c 20 62 2c 20 63  newtable(a, b, c
8d80: 29 3b 0a 20 20 20 20 7d 20 64 62 32 0a 20 20 20  );.    } db2.   
8d90: 20 64 62 32 20 63 6c 6f 73 65 0a 20 20 7d 20 7b   db2 close.  } {
8da0: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67  }.  do_test prag
8db0: 6d 61 2d 31 35 2e 33 20 7b 0a 20 20 20 20 23 20  ma-15.3 {.    # 
8dc0: 45 76 61 6c 75 61 74 69 6e 67 20 74 68 69 73 20  Evaluating this 
8dd0: 73 74 61 74 65 6d 65 6e 74 20 77 69 6c 6c 20 63  statement will c
8de0: 61 75 73 65 20 74 68 65 20 73 63 68 65 6d 61 20  ause the schema 
8df0: 74 6f 20 62 65 20 72 65 6c 6f 61 64 65 64 20 28  to be reloaded (
8e00: 62 65 63 61 75 73 65 0a 20 20 20 20 23 20 74 68  because.    # th
8e10: 65 20 73 63 68 65 6d 61 20 77 61 73 20 63 68 61  e schema was cha
8e20: 6e 67 65 64 20 62 79 20 61 6e 6f 74 68 65 72 20  nged by another 
8e30: 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 6e 20 70 72  connection in pr
8e40: 61 67 6d 61 2d 31 35 2e 32 29 2e 20 41 74 20 6f  agma-15.2). At o
8e50: 6e 65 0a 20 20 20 20 23 20 70 6f 69 6e 74 20 74  ne.    # point t
8e60: 68 65 72 65 20 77 61 73 20 61 20 62 75 67 20 74  here was a bug t
8e70: 68 61 74 20 72 65 73 65 74 20 74 68 65 20 63 61  hat reset the ca
8e80: 63 68 65 5f 73 69 7a 65 20 74 6f 20 69 74 73 20  che_size to its 
8e90: 64 65 66 61 75 6c 74 20 76 61 6c 75 65 0a 20 20  default value.  
8ea0: 20 20 23 20 77 68 65 6e 20 74 68 69 73 20 68 61    # when this ha
8eb0: 70 70 65 6e 65 64 2e 20 0a 20 20 20 20 65 78 65  ppened. .    exe
8ec0: 63 73 71 6c 20 7b 20 53 45 4c 45 43 54 20 2a 20  csql { SELECT * 
8ed0: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74  FROM sqlite_mast
8ee0: 65 72 20 7d 0a 20 20 20 20 65 78 65 63 73 71 6c  er }.    execsql
8ef0: 20 7b 20 50 52 41 47 4d 41 20 63 61 63 68 65 5f   { PRAGMA cache_
8f00: 73 69 7a 65 20 7d 0a 20 20 7d 20 7b 35 39 7d 0a  size }.  } {59}.
8f10: 7d 0a 0a 23 20 52 65 73 65 74 20 74 68 65 20 73  }..# Reset the s
8f20: 71 6c 69 74 65 33 5f 74 65 6d 70 5f 64 69 72 65  qlite3_temp_dire
8f30: 63 74 6f 72 79 20 76 61 72 69 61 62 6c 65 20 66  ctory variable f
8f40: 6f 72 20 74 68 65 20 6e 65 78 74 20 72 75 6e 20  or the next run 
8f50: 6f 66 20 74 65 73 74 73 3a 0a 73 71 6c 69 74 65  of tests:.sqlite
8f60: 33 20 64 62 58 20 3a 6d 65 6d 6f 72 79 3a 0a 64  3 dbX :memory:.d
8f70: 62 58 20 65 76 61 6c 20 7b 50 52 41 47 4d 41 20  bX eval {PRAGMA 
8f80: 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63  temp_store_direc
8f90: 74 6f 72 79 20 3d 20 22 22 7d 0a 64 62 58 20 63  tory = ""}.dbX c
8fa0: 6c 6f 73 65 0a 0a 69 66 63 61 70 61 62 6c 65 20  lose..ifcapable 
8fb0: 6c 6f 63 6b 5f 70 72 6f 78 79 5f 70 72 61 67 6d  lock_proxy_pragm
8fc0: 61 73 26 26 70 72 65 66 65 72 5f 70 72 6f 78 79  as&&prefer_proxy
8fd0: 5f 6c 6f 63 6b 69 6e 67 20 7b 0a 20 20 73 65 74  _locking {.  set
8fe0: 20 73 71 6c 69 74 65 5f 68 6f 73 74 69 64 5f 6e   sqlite_hostid_n
8ff0: 75 6d 20 31 0a 0a 20 20 73 65 74 20 75 73 69 6e  um 1..  set usin
9000: 67 5f 70 72 6f 78 79 20 30 0a 20 20 66 6f 72 65  g_proxy 0.  fore
9010: 61 63 68 20 7b 6e 61 6d 65 20 76 61 6c 75 65 7d  ach {name value}
9020: 20 5b 61 72 72 61 79 20 67 65 74 20 65 6e 76 20   [array get env 
9030: 53 51 4c 49 54 45 5f 46 4f 52 43 45 5f 50 52 4f  SQLITE_FORCE_PRO
9040: 58 59 5f 4c 4f 43 4b 49 4e 47 5d 20 7b 0a 20 20  XY_LOCKING] {.  
9050: 20 20 73 65 74 20 75 73 69 6e 67 5f 70 72 6f 78    set using_prox
9060: 79 20 24 76 61 6c 75 65 0a 20 20 7d 0a 0a 20 20  y $value.  }..  
9070: 23 20 54 65 73 74 20 74 68 65 20 6c 6f 63 6b 5f  # Test the lock_
9080: 70 72 6f 78 79 5f 66 69 6c 65 20 70 72 61 67 6d  proxy_file pragm
9090: 61 73 2e 0a 20 20 23 0a 20 20 64 62 20 63 6c 6f  as..  #.  db clo
90a0: 73 65 0a 20 20 73 65 74 20 65 6e 76 28 53 51 4c  se.  set env(SQL
90b0: 49 54 45 5f 46 4f 52 43 45 5f 50 52 4f 58 59 5f  ITE_FORCE_PROXY_
90c0: 4c 4f 43 4b 49 4e 47 29 20 22 30 22 0a 0a 20 20  LOCKING) "0"..  
90d0: 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e  sqlite3 db test.
90e0: 64 62 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61  db.  do_test pra
90f0: 67 6d 61 2d 31 36 2e 31 20 7b 0a 20 20 20 20 65  gma-16.1 {.    e
9100: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50  xecsql {.      P
9110: 52 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78 79  RAGMA lock_proxy
9120: 5f 66 69 6c 65 3d 22 6d 79 6c 69 74 74 6c 65 70  _file="mylittlep
9130: 72 6f 78 79 22 3b 0a 20 20 20 20 20 20 73 65 6c  roxy";.      sel
9140: 65 63 74 20 2a 20 66 72 6f 6d 20 73 71 6c 69 74  ect * from sqlit
9150: 65 5f 6d 61 73 74 65 72 3b 0a 20 20 20 20 7d 0a  e_master;.    }.
9160: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20      execsql {.  
9170: 20 20 20 20 50 52 41 47 4d 41 20 6c 6f 63 6b 5f      PRAGMA lock_
9180: 70 72 6f 78 79 5f 66 69 6c 65 3b 0a 20 20 20 20  proxy_file;.    
9190: 7d 20 0a 20 20 7d 20 7b 6d 79 6c 69 74 74 6c 65  } .  } {mylittle
91a0: 70 72 6f 78 79 7d 0a 0a 20 20 64 6f 5f 74 65 73  proxy}..  do_tes
91b0: 74 20 70 72 61 67 6d 61 2d 31 36 2e 32 20 7b 0a  t pragma-16.2 {.
91c0: 20 20 20 20 73 71 6c 69 74 65 33 20 64 62 32 20      sqlite3 db2 
91d0: 74 65 73 74 2e 64 62 0a 20 20 20 20 65 78 65 63  test.db.    exec
91e0: 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47  sql {.      PRAG
91f0: 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69  MA lock_proxy_fi
9200: 6c 65 3d 22 6d 79 6c 69 74 74 6c 65 70 72 6f 78  le="mylittleprox
9210: 79 22 3b 0a 20 20 20 20 7d 20 64 62 32 0a 20 20  y";.    } db2.  
9220: 7d 20 7b 7d 0a 0a 20 20 64 62 32 20 63 6c 6f 73  } {}..  db2 clos
9230: 65 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67  e.  do_test prag
9240: 6d 61 2d 31 36 2e 32 2e 31 20 7b 0a 20 20 20 20  ma-16.2.1 {.    
9250: 73 71 6c 69 74 65 33 20 64 62 32 20 74 65 73 74  sqlite3 db2 test
9260: 2e 64 62 0a 20 20 20 20 65 78 65 63 73 71 6c 20  .db.    execsql 
9270: 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 6c  {.      PRAGMA l
9280: 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 3d 22  ock_proxy_file="
9290: 3a 61 75 74 6f 3a 22 3b 0a 20 20 20 20 20 20 73  :auto:";.      s
92a0: 65 6c 65 63 74 20 2a 20 66 72 6f 6d 20 73 71 6c  elect * from sql
92b0: 69 74 65 5f 6d 61 73 74 65 72 3b 0a 20 20 20 20  ite_master;.    
92c0: 7d 20 64 62 32 0a 20 20 20 20 65 78 65 63 73 71  } db2.    execsq
92d0: 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41  l {.      PRAGMA
92e0: 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65   lock_proxy_file
92f0: 3b 0a 20 20 20 20 7d 20 64 62 32 0a 20 20 7d 20  ;.    } db2.  } 
9300: 7b 6d 79 6c 69 74 74 6c 65 70 72 6f 78 79 7d 0a  {mylittleproxy}.
9310: 0a 20 20 64 62 32 20 63 6c 6f 73 65 0a 20 20 64  .  db2 close.  d
9320: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 36  o_test pragma-16
9330: 2e 33 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  .3 {.    sqlite3
9340: 20 64 62 32 20 74 65 73 74 2e 64 62 0a 20 20 20   db2 test.db.   
9350: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20   execsql {.     
9360: 20 50 52 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f   PRAGMA lock_pro
9370: 78 79 5f 66 69 6c 65 3d 22 6d 79 6f 74 68 65 72  xy_file="myother
9380: 70 72 6f 78 79 22 3b 0a 20 20 20 20 7d 20 64 62  proxy";.    } db
9390: 32 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b  2.    catchsql {
93a0: 0a 20 20 20 20 20 20 73 65 6c 65 63 74 20 2a 20  .      select * 
93b0: 66 72 6f 6d 20 73 71 6c 69 74 65 5f 6d 61 73 74  from sqlite_mast
93c0: 65 72 3b 0a 20 20 20 20 7d 20 64 62 32 0a 20 20  er;.    } db2.  
93d0: 7d 20 7b 31 20 7b 64 61 74 61 62 61 73 65 20 69  } {1 {database i
93e0: 73 20 6c 6f 63 6b 65 64 7d 7d 0a 0a 20 20 64 6f  s locked}}..  do
93f0: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 36 2e  _test pragma-16.
9400: 34 20 7b 0a 20 20 20 20 64 62 32 20 63 6c 6f 73  4 {.    db2 clos
9410: 65 0a 20 20 20 20 64 62 20 63 6c 6f 73 65 0a 20  e.    db close. 
9420: 20 20 20 73 71 6c 69 74 65 33 20 64 62 32 20 74     sqlite3 db2 t
9430: 65 73 74 2e 64 62 0a 20 20 20 20 65 78 65 63 73  est.db.    execs
9440: 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d  ql {.      PRAGM
9450: 41 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c  A lock_proxy_fil
9460: 65 3d 22 6d 79 6f 72 69 67 69 6e 61 6c 70 72 6f  e="myoriginalpro
9470: 78 79 22 3b 0a 20 20 20 20 20 20 50 52 41 47 4d  xy";.      PRAGM
9480: 41 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c  A lock_proxy_fil
9490: 65 3d 22 6d 79 6f 74 68 65 72 70 72 6f 78 79 22  e="myotherproxy"
94a0: 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 6c  ;.      PRAGMA l
94b0: 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 3b 0a  ock_proxy_file;.
94c0: 20 20 20 20 7d 20 64 62 32 0a 20 20 7d 20 7b 6d      } db2.  } {m
94d0: 79 6f 74 68 65 72 70 72 6f 78 79 7d 0a 0a 20 20  yotherproxy}..  
94e0: 64 62 32 20 63 6c 6f 73 65 0a 20 20 73 65 74 20  db2 close.  set 
94f0: 65 6e 76 28 53 51 4c 49 54 45 5f 46 4f 52 43 45  env(SQLITE_FORCE
9500: 5f 50 52 4f 58 59 5f 4c 4f 43 4b 49 4e 47 29 20  _PROXY_LOCKING) 
9510: 22 31 22 0a 20 20 64 6f 5f 74 65 73 74 20 70 72  "1".  do_test pr
9520: 61 67 6d 61 2d 31 36 2e 35 20 7b 0a 20 20 20 20  agma-16.5 {.    
9530: 73 71 6c 69 74 65 33 20 64 62 32 20 74 65 73 74  sqlite3 db2 test
9540: 2e 64 62 0a 20 20 20 20 65 78 65 63 73 71 6c 20  .db.    execsql 
9550: 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 6c  {.      PRAGMA l
9560: 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 3d 22  ock_proxy_file="
9570: 3a 61 75 74 6f 3a 22 3b 0a 20 20 20 20 20 20 50  :auto:";.      P
9580: 52 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78 79  RAGMA lock_proxy
9590: 5f 66 69 6c 65 3b 0a 20 20 20 20 7d 20 64 62 32  _file;.    } db2
95a0: 0a 20 20 7d 20 7b 6d 79 6f 74 68 65 72 70 72 6f  .  } {myotherpro
95b0: 78 79 7d 0a 20 20 0a 20 20 64 6f 5f 74 65 73 74  xy}.  .  do_test
95c0: 20 70 72 61 67 6d 61 2d 31 36 2e 36 20 7b 0a 20   pragma-16.6 {. 
95d0: 20 20 20 64 62 32 20 63 6c 6f 73 65 0a 20 20 20     db2 close.   
95e0: 20 73 71 6c 69 74 65 33 20 64 62 32 20 74 65 73   sqlite3 db2 tes
95f0: 74 32 2e 64 62 0a 20 20 20 20 73 65 74 20 6c 6f  t2.db.    set lo
9600: 63 6b 70 61 74 68 20 5b 65 78 65 63 73 71 6c 20  ckpath [execsql 
9610: 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 6c  {.      PRAGMA l
9620: 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 3d 22  ock_proxy_file="
9630: 3a 61 75 74 6f 3a 22 3b 0a 20 20 20 20 20 20 50  :auto:";.      P
9640: 52 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78 79  RAGMA lock_proxy
9650: 5f 66 69 6c 65 3b 0a 20 20 20 20 7d 20 64 62 32  _file;.    } db2
9660: 5d 0a 20 20 20 20 73 74 72 69 6e 67 20 6d 61 74  ].    string mat
9670: 63 68 20 22 2a 74 65 73 74 32 2e 64 62 3a 61 75  ch "*test2.db:au
9680: 74 6f 3a 22 20 24 6c 6f 63 6b 70 61 74 68 0a 20  to:" $lockpath. 
9690: 20 7d 20 7b 31 7d 0a 20 20 0a 20 20 73 65 74 20   } {1}.  .  set 
96a0: 73 71 6c 69 74 65 5f 68 6f 73 74 69 64 5f 6e 75  sqlite_hostid_nu
96b0: 6d 20 32 0a 20 20 64 6f 5f 74 65 73 74 20 70 72  m 2.  do_test pr
96c0: 61 67 6d 61 2d 31 36 2e 37 20 7b 0a 20 20 20 20  agma-16.7 {.    
96d0: 6c 69 73 74 20 5b 63 61 74 63 68 20 7b 0a 20 20  list [catch {.  
96e0: 20 20 20 20 73 71 6c 69 74 65 33 20 64 62 20 74      sqlite3 db t
96f0: 65 73 74 32 2e 64 62 0a 20 20 20 20 20 20 65 78  est2.db.      ex
9700: 65 63 73 71 6c 20 7b 20 0a 20 20 20 20 20 20 20  ecsql { .       
9710: 20 50 52 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f   PRAGMA lock_pro
9720: 78 79 5f 66 69 6c 65 3d 22 3a 61 75 74 6f 3a 22  xy_file=":auto:"
9730: 3b 0a 20 20 20 20 20 20 20 20 73 65 6c 65 63 74  ;.        select
9740: 20 2a 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f 6d   * from sqlite_m
9750: 61 73 74 65 72 3b 0a 20 20 20 20 20 20 7d 0a 20  aster;.      }. 
9760: 20 20 20 7d 20 6d 73 67 5d 20 24 6d 73 67 0a 20     } msg] $msg. 
9770: 20 7d 20 7b 31 20 7b 64 61 74 61 62 61 73 65 20   } {1 {database 
9780: 69 73 20 6c 6f 63 6b 65 64 7d 7d 0a 20 20 64 62  is locked}}.  db
9790: 20 63 6c 6f 73 65 0a 20 20 0a 20 20 64 6f 5f 74   close.  .  do_t
97a0: 65 73 74 20 70 72 61 67 6d 61 2d 31 36 2e 38 20  est pragma-16.8 
97b0: 7b 0a 20 20 20 20 6c 69 73 74 20 5b 63 61 74 63  {.    list [catc
97c0: 68 20 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  h {.      sqlite
97d0: 33 20 64 62 20 74 65 73 74 32 2e 64 62 0a 20 20  3 db test2.db.  
97e0: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 20 73 65      execsql { se
97f0: 6c 65 63 74 20 2a 20 66 72 6f 6d 20 73 71 6c 69  lect * from sqli
9800: 74 65 5f 6d 61 73 74 65 72 20 7d 20 0a 20 20 20  te_master } .   
9810: 20 7d 20 6d 73 67 5d 20 24 6d 73 67 0a 20 20 7d   } msg] $msg.  }
9820: 20 7b 31 20 7b 64 61 74 61 62 61 73 65 20 69 73   {1 {database is
9830: 20 6c 6f 63 6b 65 64 7d 7d 0a 0a 20 20 64 62 32   locked}}..  db2
9840: 20 63 6c 6f 73 65 0a 20 20 64 6f 5f 74 65 73 74   close.  do_test
9850: 20 70 72 61 67 6d 61 2d 31 36 2e 38 2e 31 20 7b   pragma-16.8.1 {
9860: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
9870: 20 20 20 20 20 50 52 41 47 4d 41 20 6c 6f 63 6b       PRAGMA lock
9880: 5f 70 72 6f 78 79 5f 66 69 6c 65 3d 22 79 65 74  _proxy_file="yet
9890: 61 6e 6f 74 68 65 72 70 72 6f 78 79 22 3b 0a 20  anotherproxy";. 
98a0: 20 20 20 20 20 50 52 41 47 4d 41 20 6c 6f 63 6b       PRAGMA lock
98b0: 5f 70 72 6f 78 79 5f 66 69 6c 65 3b 0a 20 20 20  _proxy_file;.   
98c0: 20 7d 20 0a 20 20 7d 20 7b 79 65 74 61 6e 6f 74   } .  } {yetanot
98d0: 68 65 72 70 72 6f 78 79 7d 0a 20 20 64 6f 5f 74  herproxy}.  do_t
98e0: 65 73 74 20 70 72 61 67 6d 61 2d 31 36 2e 38 2e  est pragma-16.8.
98f0: 32 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  2 {.    execsql 
9900: 7b 0a 20 20 20 20 20 20 63 72 65 61 74 65 20 74  {.      create t
9910: 61 62 6c 65 20 6d 69 6e 65 28 78 29 3b 0a 20 20  able mine(x);.  
9920: 20 20 7d 20 0a 20 20 7d 20 7b 7d 0a 0a 20 20 64    } .  } {}..  d
9930: 62 20 63 6c 6f 73 65 0a 20 20 64 6f 5f 74 65 73  b close.  do_tes
9940: 74 20 70 72 61 67 6d 61 2d 31 36 2e 39 20 7b 0a  t pragma-16.9 {.
9950: 20 20 20 20 73 71 6c 69 74 65 33 20 64 62 20 70      sqlite3 db p
9960: 72 6f 78 79 74 65 73 74 2e 64 62 0a 20 20 20 20  roxytest.db.    
9970: 73 65 74 20 6c 6f 63 6b 70 61 74 68 32 20 5b 65  set lockpath2 [e
9980: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50  xecsql {.      P
9990: 52 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78 79  RAGMA lock_proxy
99a0: 5f 66 69 6c 65 3d 22 3a 61 75 74 6f 3a 22 3b 0a  _file=":auto:";.
99b0: 20 20 20 20 20 20 50 52 41 47 4d 41 20 6c 6f 63        PRAGMA loc
99c0: 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 3b 0a 20 20  k_proxy_file;.  
99d0: 20 20 7d 20 64 62 5d 0a 20 20 20 20 73 74 72 69    } db].    stri
99e0: 6e 67 20 6d 61 74 63 68 20 22 2a 70 72 6f 78 79  ng match "*proxy
99f0: 74 65 73 74 2e 64 62 3a 61 75 74 6f 3a 22 20 24  test.db:auto:" $
9a00: 6c 6f 63 6b 70 61 74 68 32 0a 20 20 7d 20 7b 31  lockpath2.  } {1
9a10: 7d 0a 0a 20 20 73 65 74 20 65 6e 76 28 53 51 4c  }..  set env(SQL
9a20: 49 54 45 5f 46 4f 52 43 45 5f 50 52 4f 58 59 5f  ITE_FORCE_PROXY_
9a30: 4c 4f 43 4b 49 4e 47 29 20 24 75 73 69 6e 67 5f  LOCKING) $using_
9a40: 70 72 6f 78 79 0a 20 20 73 65 74 20 73 71 6c 69  proxy.  set sqli
9a50: 74 65 5f 68 6f 73 74 69 64 5f 6e 75 6d 20 30 0a  te_hostid_num 0.
9a60: 7d 0a 0a 23 20 50 61 72 73 69 6e 67 20 6f 66 20  }..# Parsing of 
9a70: 61 75 74 6f 5f 76 61 63 75 75 6d 20 73 65 74 74  auto_vacuum sett
9a80: 69 6e 67 73 2e 0a 23 0a 66 6f 72 65 61 63 68 20  ings..#.foreach 
9a90: 7b 61 75 74 6f 76 61 63 5f 73 65 74 74 69 6e 67  {autovac_setting
9aa0: 20 76 61 6c 7d 20 7b 0a 20 20 30 20 30 0a 20 20   val} {.  0 0.  
9ab0: 31 20 31 0a 20 20 32 20 32 0a 20 20 33 20 30 0a  1 1.  2 2.  3 0.
9ac0: 20 20 2d 31 20 30 0a 20 20 6e 6f 6e 65 20 30 0a    -1 0.  none 0.
9ad0: 20 20 4e 4f 4e 45 20 30 0a 20 20 4e 6f 4e 65 20    NONE 0.  NoNe 
9ae0: 30 0a 20 20 66 75 6c 6c 20 31 0a 20 20 46 55 4c  0.  full 1.  FUL
9af0: 4c 20 31 0a 20 20 69 6e 63 72 65 6d 65 6e 74 61  L 1.  incrementa
9b00: 6c 20 32 0a 20 20 49 4e 43 52 45 4d 45 4e 54 41  l 2.  INCREMENTA
9b10: 4c 20 32 0a 20 20 2d 31 32 33 34 20 30 0a 20 20  L 2.  -1234 0.  
9b20: 31 32 33 34 20 30 0a 7d 20 7b 0a 20 20 64 6f 5f  1234 0.} {.  do_
9b30: 74 65 73 74 20 70 72 61 67 6d 61 2d 31 37 2e 31  test pragma-17.1
9b40: 2e 24 61 75 74 6f 76 61 63 5f 73 65 74 74 69 6e  .$autovac_settin
9b50: 67 20 7b 0a 20 20 20 20 63 61 74 63 68 20 7b 64  g {.    catch {d
9b60: 62 20 63 6c 6f 73 65 7d 0a 20 20 20 20 73 71 6c  b close}.    sql
9b70: 69 74 65 33 20 64 62 20 3a 6d 65 6d 6f 72 79 3a  ite3 db :memory:
9b80: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 22 0a 20  .    execsql ". 
9b90: 20 20 20 20 20 50 52 41 47 4d 41 20 61 75 74 6f       PRAGMA auto
9ba0: 5f 76 61 63 75 75 6d 3d 24 3a 3a 61 75 74 6f 76  _vacuum=$::autov
9bb0: 61 63 5f 73 65 74 74 69 6e 67 3b 0a 20 20 20 20  ac_setting;.    
9bc0: 20 20 50 52 41 47 4d 41 20 61 75 74 6f 5f 76 61    PRAGMA auto_va
9bd0: 63 75 75 6d 3b 0a 20 20 20 20 22 0a 20 20 7d 20  cuum;.    ".  } 
9be0: 24 76 61 6c 0a 7d 0a 0a 23 20 50 61 72 73 69 6e  $val.}..# Parsin
9bf0: 67 20 6f 66 20 74 65 6d 70 5f 73 74 6f 72 65 20  g of temp_store 
9c00: 73 65 74 74 69 6e 67 73 2e 0a 23 0a 66 6f 72 65  settings..#.fore
9c10: 61 63 68 20 7b 74 65 6d 70 5f 73 65 74 74 69 6e  ach {temp_settin
9c20: 67 20 76 61 6c 7d 20 7b 0a 20 20 30 20 30 0a 20  g val} {.  0 0. 
9c30: 20 31 20 31 0a 20 20 32 20 32 0a 20 20 33 20 30   1 1.  2 2.  3 0
9c40: 0a 20 20 2d 31 20 30 0a 20 20 66 69 6c 65 20 31  .  -1 0.  file 1
9c50: 0a 20 20 46 49 4c 45 20 31 0a 20 20 66 49 6c 45  .  FILE 1.  fIlE
9c60: 20 31 0a 20 20 6d 65 6d 6f 72 79 20 32 0a 20 20   1.  memory 2.  
9c70: 4d 45 4d 4f 52 59 20 32 0a 20 20 4d 65 4d 6f 52  MEMORY 2.  MeMoR
9c80: 79 20 32 0a 7d 20 7b 0a 20 20 64 6f 5f 74 65 73  y 2.} {.  do_tes
9c90: 74 20 70 72 61 67 6d 61 2d 31 38 2e 31 2e 24 74  t pragma-18.1.$t
9ca0: 65 6d 70 5f 73 65 74 74 69 6e 67 20 7b 0a 20 20  emp_setting {.  
9cb0: 20 20 63 61 74 63 68 20 7b 64 62 20 63 6c 6f 73    catch {db clos
9cc0: 65 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 20 64  e}.    sqlite3 d
9cd0: 62 20 3a 6d 65 6d 6f 72 79 3a 0a 20 20 20 20 65  b :memory:.    e
9ce0: 78 65 63 73 71 6c 20 22 0a 20 20 20 20 20 20 50  xecsql ".      P
9cf0: 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65  RAGMA temp_store
9d00: 3d 24 3a 3a 74 65 6d 70 5f 73 65 74 74 69 6e 67  =$::temp_setting
9d10: 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 74  ;.      PRAGMA t
9d20: 65 6d 70 5f 73 74 6f 72 65 3d 24 3a 3a 74 65 6d  emp_store=$::tem
9d30: 70 5f 73 65 74 74 69 6e 67 3b 0a 20 20 20 20 20  p_setting;.     
9d40: 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f   PRAGMA temp_sto
9d50: 72 65 3b 0a 20 20 20 20 22 0a 20 20 7d 20 24 76  re;.    ".  } $v
9d60: 61 6c 0a 7d 0a 0a 23 20 54 68 65 20 53 51 4c 49  al.}..# The SQLI
9d70: 54 45 5f 46 43 4e 54 4c 5f 50 52 41 47 4d 41 20  TE_FCNTL_PRAGMA 
9d80: 6c 6f 67 69 63 2c 20 77 69 74 68 20 65 72 72 6f  logic, with erro
9d90: 72 20 68 61 6e 64 6c 69 6e 67 2e 0a 23 0a 64 62  r handling..#.db
9da0: 20 63 6c 6f 73 65 0a 74 65 73 74 76 66 73 20 74   close.testvfs t
9db0: 76 66 73 0a 73 71 6c 69 74 65 33 20 64 62 20 74  vfs.sqlite3 db t
9dc0: 65 73 74 2e 64 62 20 2d 76 66 73 20 74 76 66 73  est.db -vfs tvfs
9dd0: 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d  .do_test pragma-
9de0: 31 39 2e 31 20 7b 0a 20 20 63 61 74 63 68 73 71  19.1 {.  catchsq
9df0: 6c 20 7b 50 52 41 47 4d 41 20 65 72 72 6f 72 7d  l {PRAGMA error}
9e00: 0a 7d 20 7b 31 20 7b 53 51 4c 20 6c 6f 67 69 63  .} {1 {SQL logic
9e10: 20 65 72 72 6f 72 7d 7d 0a 64 6f 5f 74 65 73 74   error}}.do_test
9e20: 20 70 72 61 67 6d 61 2d 31 39 2e 32 20 7b 0a 20   pragma-19.2 {. 
9e30: 20 63 61 74 63 68 73 71 6c 20 7b 50 52 41 47 4d   catchsql {PRAGM
9e40: 41 20 65 72 72 6f 72 3d 27 54 68 69 73 20 69 73  A error='This is
9e50: 20 74 68 65 20 65 72 72 6f 72 20 6d 65 73 73 61   the error messa
9e60: 67 65 27 7d 0a 7d 20 7b 31 20 7b 54 68 69 73 20  ge'}.} {1 {This 
9e70: 69 73 20 74 68 65 20 65 72 72 6f 72 20 6d 65 73  is the error mes
9e80: 73 61 67 65 7d 7d 0a 64 6f 5f 74 65 73 74 20 70  sage}}.do_test p
9e90: 72 61 67 6d 61 2d 31 39 2e 33 20 7b 0a 20 20 63  ragma-19.3 {.  c
9ea0: 61 74 63 68 73 71 6c 20 7b 50 52 41 47 4d 41 20  atchsql {PRAGMA 
9eb0: 65 72 72 6f 72 3d 27 37 20 54 68 69 73 20 69 73  error='7 This is
9ec0: 20 74 68 65 20 65 72 72 6f 72 20 6d 65 73 73 61   the error messa
9ed0: 67 65 27 7d 0a 7d 20 7b 31 20 7b 54 68 69 73 20  ge'}.} {1 {This 
9ee0: 69 73 20 74 68 65 20 65 72 72 6f 72 20 6d 65 73  is the error mes
9ef0: 73 61 67 65 7d 7d 0a 64 6f 5f 74 65 73 74 20 70  sage}}.do_test p
9f00: 72 61 67 6d 61 2d 31 39 2e 34 20 7b 0a 20 20 63  ragma-19.4 {.  c
9f10: 61 74 63 68 73 71 6c 20 7b 50 52 41 47 4d 41 20  atchsql {PRAGMA 
9f20: 65 72 72 6f 72 3d 37 7d 0a 7d 20 7b 31 20 7b 6f  error=7}.} {1 {o
9f30: 75 74 20 6f 66 20 6d 65 6d 6f 72 79 7d 7d 0a 64  ut of memory}}.d
9f40: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 39  o_test pragma-19
9f50: 2e 35 20 7b 0a 20 20 66 69 6c 65 20 74 61 69 6c  .5 {.  file tail
9f60: 20 5b 6c 69 6e 64 65 78 20 5b 65 78 65 63 73 71   [lindex [execsq
9f70: 6c 20 7b 50 52 41 47 4d 41 20 66 69 6c 65 6e 61  l {PRAGMA filena
9f80: 6d 65 7d 5d 20 30 5d 0a 7d 20 7b 74 65 73 74 2e  me}] 0].} {test.
9f90: 64 62 7d 0a 0a 69 66 20 7b 24 74 63 6c 5f 70 6c  db}..if {$tcl_pl
9fa0: 61 74 66 6f 72 6d 28 70 6c 61 74 66 6f 72 6d 29  atform(platform)
9fb0: 3d 3d 22 77 69 6e 64 6f 77 73 22 7d 20 7b 0a 23  =="windows"} {.#
9fc0: 20 54 65 73 74 20 64 61 74 61 5f 73 74 6f 72 65   Test data_store
9fd0: 5f 64 69 72 65 63 74 6f 72 79 20 70 72 61 67 6d  _directory pragm
9fe0: 61 0a 23 0a 64 62 20 63 6c 6f 73 65 0a 73 71 6c  a.#.db close.sql
9ff0: 69 74 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a  ite3 db test.db.
a000: 66 69 6c 65 20 6d 6b 64 69 72 20 64 61 74 61 5f  file mkdir data_
a010: 64 69 72 0a 64 6f 5f 74 65 73 74 20 70 72 61 67  dir.do_test prag
a020: 6d 61 2d 32 30 2e 31 20 7b 0a 20 20 63 61 74 63  ma-20.1 {.  catc
a030: 68 73 71 6c 20 7b 50 52 41 47 4d 41 20 64 61 74  hsql {PRAGMA dat
a040: 61 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72  a_store_director
a050: 79 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74  y}.} {0 {}}.do_t
a060: 65 73 74 20 70 72 61 67 6d 61 2d 32 30 2e 32 20  est pragma-20.2 
a070: 7b 0a 20 20 73 65 74 20 70 77 64 20 5b 73 74 72  {.  set pwd [str
a080: 69 6e 67 20 6d 61 70 20 7b 27 20 27 27 7d 20 5b  ing map {' ''} [
a090: 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20  file nativename 
a0a0: 5b 67 65 74 5f 70 77 64 5d 5d 5d 0a 20 20 63 61  [get_pwd]]].  ca
a0b0: 74 63 68 73 71 6c 20 22 50 52 41 47 4d 41 20 64  tchsql "PRAGMA d
a0c0: 61 74 61 5f 73 74 6f 72 65 5f 64 69 72 65 63 74  ata_store_direct
a0d0: 6f 72 79 3d 27 24 70 77 64 27 3b 22 0a 7d 20 7b  ory='$pwd';".} {
a0e0: 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 70 72  0 {}}.do_test pr
a0f0: 61 67 6d 61 2d 32 30 2e 33 20 7b 0a 20 20 63 61  agma-20.3 {.  ca
a100: 74 63 68 73 71 6c 20 7b 50 52 41 47 4d 41 20 64  tchsql {PRAGMA d
a110: 61 74 61 5f 73 74 6f 72 65 5f 64 69 72 65 63 74  ata_store_direct
a120: 6f 72 79 7d 0a 7d 20 5b 6c 69 73 74 20 30 20 5b  ory}.} [list 0 [
a130: 6c 69 73 74 20 5b 66 69 6c 65 20 6e 61 74 69 76  list [file nativ
a140: 65 6e 61 6d 65 20 5b 67 65 74 5f 70 77 64 5d 5d  ename [get_pwd]]
a150: 5d 5d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  ]].do_test pragm
a160: 61 2d 32 30 2e 34 20 7b 0a 20 20 73 65 74 20 70  a-20.4 {.  set p
a170: 77 64 20 5b 73 74 72 69 6e 67 20 6d 61 70 20 7b  wd [string map {
a180: 27 20 27 27 7d 20 5b 66 69 6c 65 20 6e 61 74 69  ' ''} [file nati
a190: 76 65 6e 61 6d 65 20 5c 0a 20 20 20 20 5b 66 69  vename \.    [fi
a1a0: 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 5f 70 77 64  le join [get_pwd
a1b0: 5d 20 64 61 74 61 5f 64 69 72 5d 5d 5d 0a 20 20  ] data_dir]]].  
a1c0: 63 61 74 63 68 73 71 6c 20 22 50 52 41 47 4d 41  catchsql "PRAGMA
a1d0: 20 64 61 74 61 5f 73 74 6f 72 65 5f 64 69 72 65   data_store_dire
a1e0: 63 74 6f 72 79 3d 27 24 70 77 64 27 3b 22 0a 7d  ctory='$pwd';".}
a1f0: 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20   {0 {}}.do_test 
a200: 70 72 61 67 6d 61 2d 32 30 2e 35 20 7b 0a 20 20  pragma-20.5 {.  
a210: 73 71 6c 69 74 65 33 20 64 62 32 20 74 65 73 74  sqlite3 db2 test
a220: 32 2e 64 62 0a 20 20 63 61 74 63 68 73 71 6c 20  2.db.  catchsql 
a230: 22 50 52 41 47 4d 41 20 64 61 74 61 62 61 73 65  "PRAGMA database
a240: 5f 6c 69 73 74 3b 22 20 64 62 32 0a 7d 20 5b 6c  _list;" db2.} [l
a250: 69 73 74 20 30 20 5b 6c 69 73 74 20 30 20 6d 61  ist 0 [list 0 ma
a260: 69 6e 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e  in [file nativen
a270: 61 6d 65 20 5c 0a 20 20 20 20 5b 66 69 6c 65 20  ame \.    [file 
a280: 6a 6f 69 6e 20 5b 67 65 74 5f 70 77 64 5d 20 64  join [get_pwd] d
a290: 61 74 61 5f 64 69 72 20 74 65 73 74 32 2e 64 62  ata_dir test2.db
a2a0: 5d 5d 5d 5d 0a 63 61 74 63 68 20 7b 64 62 32 20  ]]]].catch {db2 
a2b0: 63 6c 6f 73 65 7d 0a 64 6f 5f 74 65 73 74 20 70  close}.do_test p
a2c0: 72 61 67 6d 61 2d 32 30 2e 36 20 7b 0a 20 20 73  ragma-20.6 {.  s
a2d0: 71 6c 69 74 65 33 20 64 62 32 20 5b 66 69 6c 65  qlite3 db2 [file
a2e0: 20 6a 6f 69 6e 20 5b 67 65 74 5f 70 77 64 5d 20   join [get_pwd] 
a2f0: 74 65 73 74 32 2e 64 62 5d 0a 20 20 63 61 74 63  test2.db].  catc
a300: 68 73 71 6c 20 22 50 52 41 47 4d 41 20 64 61 74  hsql "PRAGMA dat
a310: 61 62 61 73 65 5f 6c 69 73 74 3b 22 20 64 62 32  abase_list;" db2
a320: 0a 7d 20 5b 6c 69 73 74 20 30 20 5b 6c 69 73 74  .} [list 0 [list
a330: 20 30 20 6d 61 69 6e 20 5b 66 69 6c 65 20 6e 61   0 main [file na
a340: 74 69 76 65 6e 61 6d 65 20 5c 0a 20 20 20 20 5b  tivename \.    [
a350: 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 5f 70  file join [get_p
a360: 77 64 5d 20 74 65 73 74 32 2e 64 62 5d 5d 5d 5d  wd] test2.db]]]]
a370: 0a 63 61 74 63 68 20 7b 64 62 32 20 63 6c 6f 73  .catch {db2 clos
a380: 65 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  e}.do_test pragm
a390: 61 2d 32 30 2e 37 20 7b 0a 20 20 63 61 74 63 68  a-20.7 {.  catch
a3a0: 73 71 6c 20 22 50 52 41 47 4d 41 20 64 61 74 61  sql "PRAGMA data
a3b0: 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79  _store_directory
a3c0: 3d 27 27 3b 22 0a 7d 20 7b 30 20 7b 7d 7d 0a 64  ='';".} {0 {}}.d
a3d0: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 32 30  o_test pragma-20
a3e0: 2e 38 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20  .8 {.  catchsql 
a3f0: 7b 50 52 41 47 4d 41 20 64 61 74 61 5f 73 74 6f  {PRAGMA data_sto
a400: 72 65 5f 64 69 72 65 63 74 6f 72 79 7d 0a 7d 20  re_directory}.} 
a410: 7b 30 20 7b 7d 7d 0a 0a 66 6f 72 63 65 64 65 6c  {0 {}}..forcedel
a420: 65 74 65 20 64 61 74 61 5f 64 69 72 0a 7d 20 3b  ete data_dir.} ;
a430: 23 20 65 6e 64 69 66 20 77 69 6e 64 6f 77 73 0a  # endif windows.
a440: 0a 64 61 74 61 62 61 73 65 5f 6d 61 79 5f 62 65  .database_may_be
a450: 5f 63 6f 72 72 75 70 74 0a 69 66 20 7b 21 5b 6e  _corrupt.if {![n
a460: 6f 6e 7a 65 72 6f 5f 72 65 73 65 72 76 65 64 5f  onzero_reserved_
a470: 62 79 74 65 73 5d 7d 20 7b 0a 0a 20 20 64 6f 5f  bytes]} {..  do_
a480: 74 65 73 74 20 32 31 2e 31 20 7b 0a 20 20 20 20  test 21.1 {.    
a490: 23 20 43 72 65 61 74 65 20 61 20 63 6f 72 72 75  # Create a corru
a4a0: 70 74 20 64 61 74 61 62 61 73 65 20 69 6e 20 74  pt database in t
a4b0: 65 73 74 65 72 72 2e 64 62 2e 20 41 6e 64 20 61  esterr.db. And a
a4c0: 20 6e 6f 6e 2d 63 6f 72 72 75 70 74 20 61 74 20   non-corrupt at 
a4d0: 74 65 73 74 2e 64 62 2e 0a 20 20 20 20 23 0a 20  test.db..    #. 
a4e0: 20 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 20 20     db close.    
a4f0: 66 6f 72 63 65 64 65 6c 65 74 65 20 74 65 73 74  forcedelete test
a500: 2e 64 62 0a 20 20 20 20 73 71 6c 69 74 65 33 20  .db.    sqlite3 
a510: 64 62 20 74 65 73 74 2e 64 62 0a 20 20 20 20 65  db test.db.    e
a520: 78 65 63 73 71 6c 20 7b 20 0a 20 20 20 20 20 20  xecsql { .      
a530: 50 52 41 47 4d 41 20 70 61 67 65 5f 73 69 7a 65  PRAGMA page_size
a540: 20 3d 20 31 30 32 34 3b 0a 20 20 20 20 20 20 50   = 1024;.      P
a550: 52 41 47 4d 41 20 61 75 74 6f 5f 76 61 63 75 75  RAGMA auto_vacuu
a560: 6d 20 3d 20 30 3b 0a 20 20 20 20 20 20 43 52 45  m = 0;.      CRE
a570: 41 54 45 20 54 41 42 4c 45 20 74 31 28 61 20 50  ATE TABLE t1(a P
a580: 52 49 4d 41 52 59 20 4b 45 59 2c 20 62 29 3b 0a  RIMARY KEY, b);.
a590: 20 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54        INSERT INT
a5a0: 4f 20 74 31 20 56 41 4c 55 45 53 28 31 2c 20 31  O t1 VALUES(1, 1
a5b0: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 66 6f 72  );.    }.    for
a5c0: 20 7b 73 65 74 20 69 20 30 7d 20 7b 24 69 20 3c   {set i 0} {$i <
a5d0: 20 31 30 7d 20 7b 69 6e 63 72 20 69 7d 20 7b 0a   10} {incr i} {.
a5e0: 20 20 20 20 20 20 65 78 65 63 73 71 6c 20 7b 20        execsql { 
a5f0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 53  INSERT INTO t1 S
a600: 45 4c 45 43 54 20 61 20 2b 20 28 31 20 3c 3c 20  ELECT a + (1 << 
a610: 24 69 29 2c 20 62 20 2b 20 28 31 20 3c 3c 20 24  $i), b + (1 << $
a620: 69 29 20 46 52 4f 4d 20 74 31 20 7d 0a 20 20 20  i) FROM t1 }.   
a630: 20 7d 0a 20 20 20 20 64 62 20 63 6c 6f 73 65 0a   }.    db close.
a640: 20 20 20 20 66 6f 72 63 65 63 6f 70 79 20 74 65      forcecopy te
a650: 73 74 2e 64 62 20 74 65 73 74 65 72 72 2e 64 62  st.db testerr.db
a660: 0a 20 20 20 20 68 65 78 69 6f 5f 77 72 69 74 65  .    hexio_write
a670: 20 74 65 73 74 65 72 72 2e 64 62 20 31 35 30 30   testerr.db 1500
a680: 30 20 5b 73 74 72 69 6e 67 20 72 65 70 65 61 74  0 [string repeat
a690: 20 35 35 20 31 30 30 5d 0a 20 20 7d 20 7b 31 30   55 100].  } {10
a6a0: 30 7d 0a 20 20 0a 20 20 73 65 74 20 6d 61 69 6e  0}.  .  set main
a6b0: 65 72 72 20 7b 2a 2a 2a 20 69 6e 20 64 61 74 61  err {*** in data
a6c0: 62 61 73 65 20 6d 61 69 6e 20 2a 2a 2a 0a 4d 75  base main ***.Mu
a6d0: 6c 74 69 70 6c 65 20 75 73 65 73 20 66 6f 72 20  ltiple uses for 
a6e0: 62 79 74 65 20 36 37 32 20 6f 66 20 70 61 67 65  byte 672 of page
a6f0: 20 31 35 7d 0a 20 20 73 65 74 20 61 75 78 65 72   15}.  set auxer
a700: 72 20 7b 2a 2a 2a 20 69 6e 20 64 61 74 61 62 61  r {*** in databa
a710: 73 65 20 61 75 78 20 2a 2a 2a 0a 4d 75 6c 74 69  se aux ***.Multi
a720: 70 6c 65 20 75 73 65 73 20 66 6f 72 20 62 79 74  ple uses for byt
a730: 65 20 36 37 32 20 6f 66 20 70 61 67 65 20 31 35  e 672 of page 15
a740: 7d 0a 20 20 0a 20 20 73 65 74 20 6d 61 69 6e 65  }.  .  set maine
a750: 72 72 20 7b 2f 7b 5c 2a 5c 2a 5c 2a 20 69 6e 20  rr {/{\*\*\* in 
a760: 64 61 74 61 62 61 73 65 20 6d 61 69 6e 20 5c 2a  database main \*
a770: 5c 2a 5c 2a 0a 4d 75 6c 74 69 70 6c 65 20 75 73  \*\*.Multiple us
a780: 65 73 20 66 6f 72 20 62 79 74 65 20 36 37 32 20  es for byte 672 
a790: 6f 66 20 70 61 67 65 20 31 35 7d 2e 2a 2f 7d 0a  of page 15}.*/}.
a7a0: 20 20 73 65 74 20 61 75 78 65 72 72 20 7b 2f 7b    set auxerr {/{
a7b0: 5c 2a 5c 2a 5c 2a 20 69 6e 20 64 61 74 61 62 61  \*\*\* in databa
a7c0: 73 65 20 61 75 78 20 5c 2a 5c 2a 5c 2a 0a 4d 75  se aux \*\*\*.Mu
a7d0: 6c 74 69 70 6c 65 20 75 73 65 73 20 66 6f 72 20  ltiple uses for 
a7e0: 62 79 74 65 20 36 37 32 20 6f 66 20 70 61 67 65  byte 672 of page
a7f0: 20 31 35 7d 2e 2a 2f 7d 0a 20 20 0a 20 20 64 6f   15}.*/}.  .  do
a800: 5f 74 65 73 74 20 32 32 2e 32 20 7b 0a 20 20 20  _test 22.2 {.   
a810: 20 63 61 74 63 68 20 7b 20 64 62 20 63 6c 6f 73   catch { db clos
a820: 65 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 20  e }.    sqlite3 
a830: 64 62 20 74 65 73 74 65 72 72 2e 64 62 0a 20 20  db testerr.db.  
a840: 20 20 65 78 65 63 73 71 6c 20 7b 20 50 52 41 47    execsql { PRAG
a850: 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65  MA integrity_che
a860: 63 6b 20 7d 0a 20 20 7d 20 24 6d 61 69 6e 65 72  ck }.  } $mainer
a870: 72 0a 20 20 0a 20 20 64 6f 5f 74 65 73 74 20 32  r.  .  do_test 2
a880: 32 2e 33 2e 31 20 7b 0a 20 20 20 20 63 61 74 63  2.3.1 {.    catc
a890: 68 20 7b 20 64 62 20 63 6c 6f 73 65 20 7d 0a 20  h { db close }. 
a8a0: 20 20 20 73 71 6c 69 74 65 33 20 64 62 20 74 65     sqlite3 db te
a8b0: 73 74 2e 64 62 0a 20 20 20 20 65 78 65 63 73 71  st.db.    execsq
a8c0: 6c 20 7b 20 0a 20 20 20 20 20 20 41 54 54 41 43  l { .      ATTAC
a8d0: 48 20 27 74 65 73 74 65 72 72 2e 64 62 27 20 41  H 'testerr.db' A
a8e0: 53 20 27 61 75 78 27 3b 0a 20 20 20 20 20 20 50  S 'aux';.      P
a8f0: 52 41 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f  RAGMA integrity_
a900: 63 68 65 63 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d  check;.    }.  }
a910: 20 24 61 75 78 65 72 72 0a 20 20 64 6f 5f 74 65   $auxerr.  do_te
a920: 73 74 20 32 32 2e 33 2e 32 20 7b 0a 20 20 20 20  st 22.3.2 {.    
a930: 65 78 65 63 73 71 6c 20 7b 20 50 52 41 47 4d 41  execsql { PRAGMA
a940: 20 6d 61 69 6e 2e 69 6e 74 65 67 72 69 74 79 5f   main.integrity_
a950: 63 68 65 63 6b 3b 20 7d 0a 20 20 7d 20 7b 6f 6b  check; }.  } {ok
a960: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 32 32 2e 33  }.  do_test 22.3
a970: 2e 33 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  .3 {.    execsql
a980: 20 7b 20 50 52 41 47 4d 41 20 61 75 78 2e 69 6e   { PRAGMA aux.in
a990: 74 65 67 72 69 74 79 5f 63 68 65 63 6b 3b 20 7d  tegrity_check; }
a9a0: 0a 20 20 7d 20 24 61 75 78 65 72 72 0a 20 20 0a  .  } $auxerr.  .
a9b0: 20 20 64 6f 5f 74 65 73 74 20 32 32 2e 34 2e 31    do_test 22.4.1
a9c0: 20 7b 0a 20 20 20 20 63 61 74 63 68 20 7b 20 64   {.    catch { d
a9d0: 62 20 63 6c 6f 73 65 20 7d 0a 20 20 20 20 73 71  b close }.    sq
a9e0: 6c 69 74 65 33 20 64 62 20 74 65 73 74 65 72 72  lite3 db testerr
a9f0: 2e 64 62 0a 20 20 20 20 65 78 65 63 73 71 6c 20  .db.    execsql 
aa00: 7b 20 0a 20 20 20 20 20 20 41 54 54 41 43 48 20  { .      ATTACH 
aa10: 27 74 65 73 74 2e 64 62 27 20 41 53 20 27 61 75  'test.db' AS 'au
aa20: 78 27 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41  x';.      PRAGMA
aa30: 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b   integrity_check
aa40: 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 24 6d 61 69  ;.    }.  } $mai
aa50: 6e 65 72 72 0a 20 20 64 6f 5f 74 65 73 74 20 32  nerr.  do_test 2
aa60: 32 2e 34 2e 32 20 7b 0a 20 20 20 20 65 78 65 63  2.4.2 {.    exec
aa70: 73 71 6c 20 7b 20 50 52 41 47 4d 41 20 6d 61 69  sql { PRAGMA mai
aa80: 6e 2e 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63  n.integrity_chec
aa90: 6b 3b 20 7d 0a 20 20 7d 20 24 6d 61 69 6e 65 72  k; }.  } $mainer
aaa0: 72 0a 20 20 64 6f 5f 74 65 73 74 20 32 32 2e 34  r.  do_test 22.4
aab0: 2e 33 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  .3 {.    execsql
aac0: 20 7b 20 50 52 41 47 4d 41 20 61 75 78 2e 69 6e   { PRAGMA aux.in
aad0: 74 65 67 72 69 74 79 5f 63 68 65 63 6b 3b 20 7d  tegrity_check; }
aae0: 0a 20 20 7d 20 7b 6f 6b 7d 0a 7d 0a 20 20 0a 64  .  } {ok}.}.  .d
aaf0: 62 20 63 6c 6f 73 65 0a 66 6f 72 63 65 64 65 6c  b close.forcedel
ab00: 65 74 65 20 74 65 73 74 2e 64 62 20 74 65 73 74  ete test.db test
ab10: 2e 64 62 2d 77 61 6c 20 74 65 73 74 2e 64 62 2d  .db-wal test.db-
ab20: 6a 6f 75 72 6e 61 6c 0a 73 71 6c 69 74 65 33 20  journal.sqlite3 
ab30: 64 62 20 74 65 73 74 2e 64 62 0a 73 71 6c 69 74  db test.db.sqlit
ab40: 65 33 20 64 62 32 20 74 65 73 74 2e 64 62 0a 64  e3 db2 test.db.d
ab50: 6f 5f 74 65 73 74 20 32 33 2e 31 20 7b 0a 20 20  o_test 23.1 {.  
ab60: 64 62 20 65 76 61 6c 20 7b 0a 20 20 20 20 43 52  db eval {.    CR
ab70: 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 61 20  EATE TABLE t1(a 
ab80: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
ab90: 4b 45 59 2c 62 2c 63 2c 64 29 3b 0a 20 20 20 20  KEY,b,c,d);.    
aba0: 43 52 45 41 54 45 20 49 4e 44 45 58 20 69 31 20  CREATE INDEX i1 
abb0: 4f 4e 20 74 31 28 62 2c 63 29 3b 0a 20 20 20 20  ON t1(b,c);.    
abc0: 43 52 45 41 54 45 20 49 4e 44 45 58 20 69 32 20  CREATE INDEX i2 
abd0: 4f 4e 20 74 31 28 63 2c 64 29 3b 0a 20 20 20 20  ON t1(c,d);.    
abe0: 43 52 45 41 54 45 20 49 4e 44 45 58 20 69 32 78  CREATE INDEX i2x
abf0: 20 4f 4e 20 74 31 28 64 20 43 4f 4c 4c 41 54 45   ON t1(d COLLATE
ac00: 20 6e 6f 63 61 73 65 2c 20 63 20 44 45 53 43 29   nocase, c DESC)
ac10: 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42  ;.    CREATE TAB
ac20: 4c 45 20 74 32 28 78 20 49 4e 54 45 47 45 52 20  LE t2(x INTEGER 
ac30: 52 45 46 45 52 45 4e 43 45 53 20 74 31 29 3b 0a  REFERENCES t1);.
ac40: 20 20 7d 0a 20 20 64 62 32 20 65 76 61 6c 20 7b    }.  db2 eval {
ac50: 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d  SELECT name FROM
ac60: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a   sqlite_master}.
ac70: 7d 20 7b 74 31 20 69 31 20 69 32 20 69 32 78 20  } {t1 i1 i2 i2x 
ac80: 74 32 7d 0a 64 6f 5f 74 65 73 74 20 32 33 2e 32  t2}.do_test 23.2
ac90: 61 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a  a {.  db eval {.
aca0: 20 20 20 20 44 52 4f 50 20 49 4e 44 45 58 20 69      DROP INDEX i
acb0: 32 3b 0a 20 20 20 20 43 52 45 41 54 45 20 49 4e  2;.    CREATE IN
acc0: 44 45 58 20 69 32 20 4f 4e 20 74 31 28 63 2c 64  DEX i2 ON t1(c,d
acd0: 2c 62 29 3b 0a 20 20 7d 0a 20 20 63 61 70 74 75  ,b);.  }.  captu
ace0: 72 65 5f 70 72 61 67 6d 61 20 64 62 32 20 6f 75  re_pragma db2 ou
acf0: 74 20 7b 50 52 41 47 4d 41 20 69 6e 64 65 78 5f  t {PRAGMA index_
ad00: 69 6e 66 6f 28 69 32 29 7d 0a 20 20 64 62 32 20  info(i2)}.  db2 
ad10: 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 63 69 64  eval {SELECT cid
ad20: 2c 20 6e 61 6d 65 2c 20 27 7c 27 20 46 52 4f 4d  , name, '|' FROM
ad30: 20 6f 75 74 20 4f 52 44 45 52 20 42 59 20 73 65   out ORDER BY se
ad40: 71 6e 6f 7d 0a 7d 20 7b 32 20 63 20 7c 20 33 20  qno}.} {2 c | 3 
ad50: 64 20 7c 20 31 20 62 20 7c 7d 0a 0a 23 20 45 56  d | 1 b |}..# EV
ad60: 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 35 36 31  IDENCE-OF: R-561
ad70: 34 33 2d 32 39 33 31 39 20 50 52 41 47 4d 41 20  43-29319 PRAGMA 
ad80: 73 63 68 65 6d 61 2e 69 6e 64 65 78 5f 78 69 6e  schema.index_xin
ad90: 66 6f 28 69 6e 64 65 78 2d 6e 61 6d 65 29 3b 20  fo(index-name); 
ada0: 54 68 69 73 0a 23 20 70 72 61 67 6d 61 20 72 65  This.# pragma re
adb0: 74 75 72 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f  turns informatio
adc0: 6e 20 61 62 6f 75 74 20 65 76 65 72 79 20 63 6f  n about every co
add0: 6c 75 6d 6e 20 69 6e 20 61 6e 20 69 6e 64 65 78  lumn in an index
ade0: 2e 0a 23 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f  ..#.# EVIDENCE-O
adf0: 46 3a 20 52 2d 34 35 39 37 30 2d 33 35 36 31 38  F: R-45970-35618
ae00: 20 55 6e 6c 69 6b 65 20 74 68 69 73 20 69 6e 64   Unlike this ind
ae10: 65 78 5f 69 6e 66 6f 20 70 72 61 67 6d 61 2c 20  ex_info pragma, 
ae20: 74 68 69 73 20 70 72 61 67 6d 61 0a 23 20 72 65  this pragma.# re
ae30: 74 75 72 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f  turns informatio
ae40: 6e 20 61 62 6f 75 74 20 65 76 65 72 79 20 63 6f  n about every co
ae50: 6c 75 6d 6e 20 69 6e 20 74 68 65 20 69 6e 64 65  lumn in the inde
ae60: 78 2c 20 6e 6f 74 20 6a 75 73 74 20 74 68 65 20  x, not just the 
ae70: 6b 65 79 0a 23 20 63 6f 6c 75 6d 6e 73 2e 0a 23  key.# columns..#
ae80: 0a 64 6f 5f 74 65 73 74 20 32 33 2e 32 62 20 7b  .do_test 23.2b {
ae90: 0a 20 20 63 61 70 74 75 72 65 5f 70 72 61 67 6d  .  capture_pragm
aea0: 61 20 64 62 32 20 6f 75 74 20 7b 50 52 41 47 4d  a db2 out {PRAGM
aeb0: 41 20 69 6e 64 65 78 5f 78 69 6e 66 6f 28 69 32  A index_xinfo(i2
aec0: 29 7d 0a 20 20 64 62 32 20 65 76 61 6c 20 7b 53  )}.  db2 eval {S
aed0: 45 4c 45 43 54 20 63 69 64 2c 20 6e 61 6d 65 2c  ELECT cid, name,
aee0: 20 22 64 65 73 63 22 2c 20 63 6f 6c 6c 2c 20 22   "desc", coll, "
aef0: 6b 65 79 22 2c 20 27 7c 27 20 46 52 4f 4d 20 6f  key", '|' FROM o
af00: 75 74 20 4f 52 44 45 52 20 42 59 20 73 65 71 6e  ut ORDER BY seqn
af10: 6f 7d 0a 7d 20 7b 32 20 63 20 30 20 42 49 4e 41  o}.} {2 c 0 BINA
af20: 52 59 20 31 20 7c 20 33 20 64 20 30 20 42 49 4e  RY 1 | 3 d 0 BIN
af30: 41 52 59 20 31 20 7c 20 31 20 62 20 30 20 42 49  ARY 1 | 1 b 0 BI
af40: 4e 41 52 59 20 31 20 7c 20 2d 31 20 7b 7d 20 30  NARY 1 | -1 {} 0
af50: 20 42 49 4e 41 52 59 20 30 20 7c 7d 0a 0a 23 20   BINARY 0 |}..# 
af60: 28 54 68 65 20 66 69 72 73 74 20 63 6f 6c 75 6d  (The first colum
af70: 6e 20 6f 66 20 6f 75 74 70 75 74 20 66 72 6f 6d  n of output from
af80: 20 50 52 41 47 4d 41 20 69 6e 64 65 78 5f 78 69   PRAGMA index_xi
af90: 6e 66 6f 20 69 73 2e 2e 2e 29 0a 23 20 45 56 49  nfo is...).# EVI
afa0: 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 30 30 31 39  DENCE-OF: R-0019
afb0: 37 2d 31 34 32 37 39 20 54 68 65 20 72 61 6e 6b  7-14279 The rank
afc0: 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 77   of the column w
afd0: 69 74 68 69 6e 20 74 68 65 20 69 6e 64 65 78 2e  ithin the index.
afe0: 20 28 30 0a 23 20 6d 65 61 6e 73 20 6c 65 66 74   (0.# means left
aff0: 2d 6d 6f 73 74 2e 20 4b 65 79 20 63 6f 6c 75 6d  -most. Key colum
b000: 6e 73 20 63 6f 6d 65 20 62 65 66 6f 72 65 20 61  ns come before a
b010: 75 78 69 6c 69 61 72 79 20 63 6f 6c 75 6d 6e 73  uxiliary columns
b020: 2e 29 0a 23 0a 23 20 28 54 68 65 20 73 65 63 6f  .).#.# (The seco
b030: 6e 64 20 63 6f 6c 75 6d 6e 20 6f 66 20 6f 75 74  nd column of out
b040: 70 75 74 20 66 72 6f 6d 20 50 52 41 47 4d 41 20  put from PRAGMA 
b050: 69 6e 64 65 78 5f 78 69 6e 66 6f 20 69 73 2e 2e  index_xinfo is..
b060: 2e 29 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46  .).# EVIDENCE-OF
b070: 3a 20 52 2d 34 30 38 38 39 2d 30 36 38 33 38 20  : R-40889-06838 
b080: 54 68 65 20 72 61 6e 6b 20 6f 66 20 74 68 65 20  The rank of the 
b090: 63 6f 6c 75 6d 6e 20 77 69 74 68 69 6e 20 74 68  column within th
b0a0: 65 20 74 61 62 6c 65 0a 23 20 62 65 69 6e 67 20  e table.# being 
b0b0: 69 6e 64 65 78 65 64 2c 20 6f 72 20 2d 31 20 69  indexed, or -1 i
b0c0: 66 20 74 68 65 20 69 6e 64 65 78 2d 63 6f 6c 75  f the index-colu
b0d0: 6d 6e 20 69 73 20 74 68 65 20 72 6f 77 69 64 20  mn is the rowid 
b0e0: 6f 66 20 74 68 65 20 74 61 62 6c 65 0a 23 20 62  of the table.# b
b0f0: 65 69 6e 67 20 69 6e 64 65 78 65 64 2e 0a 23 0a  eing indexed..#.
b100: 23 20 28 54 68 65 20 74 68 69 72 64 20 63 6f 6c  # (The third col
b110: 75 6d 6e 20 6f 66 20 6f 75 74 70 75 74 20 66 72  umn of output fr
b120: 6f 6d 20 50 52 41 47 4d 41 20 69 6e 64 65 78 5f  om PRAGMA index_
b130: 78 69 6e 66 6f 20 69 73 2e 2e 2e 29 0a 23 20 45  xinfo is...).# E
b140: 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 32 32  VIDENCE-OF: R-22
b150: 37 35 31 2d 32 38 39 30 31 20 54 68 65 20 6e 61  751-28901 The na
b160: 6d 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  me of the column
b170: 20 62 65 69 6e 67 20 69 6e 64 65 78 65 64 2c 20   being indexed, 
b180: 6f 72 0a 23 20 4e 55 4c 4c 20 69 66 20 74 68 65  or.# NULL if the
b190: 20 69 6e 64 65 78 2d 63 6f 6c 75 6d 6e 20 69 73   index-column is
b1a0: 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68   the rowid of th
b1b0: 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 69 6e  e table being in
b1c0: 64 65 78 65 64 2e 0a 23 0a 23 20 28 54 68 65 20  dexed..#.# (The 
b1d0: 66 6f 75 72 74 68 20 63 6f 6c 75 6d 6e 20 6f 66  fourth column of
b1e0: 20 6f 75 74 70 75 74 20 66 72 6f 6d 20 50 52 41   output from PRA
b1f0: 47 4d 41 20 69 6e 64 65 78 5f 78 69 6e 66 6f 20  GMA index_xinfo 
b200: 69 73 2e 2e 2e 29 0a 23 20 45 56 49 44 45 4e 43  is...).# EVIDENC
b210: 45 2d 4f 46 3a 20 52 2d 31 31 38 34 37 2d 30 39  E-OF: R-11847-09
b220: 31 37 39 20 31 20 69 66 20 74 68 65 20 69 6e 64  179 1 if the ind
b230: 65 78 2d 63 6f 6c 75 6d 6e 20 69 73 20 73 6f 72  ex-column is sor
b240: 74 65 64 20 69 6e 20 72 65 76 65 72 73 65 0a 23  ted in reverse.#
b250: 20 28 44 45 53 43 29 20 6f 72 64 65 72 20 62 79   (DESC) order by
b260: 20 74 68 65 20 69 6e 64 65 78 20 61 6e 64 20 30   the index and 0
b270: 20 6f 74 68 65 72 77 69 73 65 2e 0a 23 0a 23 20   otherwise..#.# 
b280: 28 54 68 65 20 66 69 66 74 68 20 63 6f 6c 75 6d  (The fifth colum
b290: 6e 20 6f 66 20 6f 75 74 70 75 74 20 66 72 6f 6d  n of output from
b2a0: 20 50 52 41 47 4d 41 20 69 6e 64 65 78 5f 78 69   PRAGMA index_xi
b2b0: 6e 66 6f 20 69 73 2e 2e 2e 29 0a 23 20 45 56 49  nfo is...).# EVI
b2c0: 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 31 35 33 31  DENCE-OF: R-1531
b2d0: 33 2d 31 39 35 34 30 20 54 68 65 20 6e 61 6d 65  3-19540 The name
b2e0: 20 66 6f 72 20 74 68 65 20 63 6f 6c 6c 61 74 69   for the collati
b2f0: 6e 67 20 73 65 71 75 65 6e 63 65 20 75 73 65 64  ng sequence used
b300: 20 74 6f 0a 23 20 63 6f 6d 70 61 72 65 20 76 61   to.# compare va
b310: 6c 75 65 73 20 69 6e 20 74 68 65 20 69 6e 64 65  lues in the inde
b320: 78 2d 63 6f 6c 75 6d 6e 2e 0a 23 0a 23 20 28 54  x-column..#.# (T
b330: 68 65 20 73 69 78 74 68 20 63 6f 6c 75 6d 6e 20  he sixth column 
b340: 6f 66 20 6f 75 74 70 75 74 20 66 72 6f 6d 20 50  of output from P
b350: 52 41 47 4d 41 20 69 6e 64 65 78 5f 78 69 6e 66  RAGMA index_xinf
b360: 6f 20 69 73 2e 2e 2e 29 0a 23 20 45 56 49 44 45  o is...).# EVIDE
b370: 4e 43 45 2d 4f 46 3a 20 52 2d 31 34 33 31 30 2d  NCE-OF: R-14310-
b380: 36 34 35 35 33 20 31 20 69 66 20 74 68 65 20 69  64553 1 if the i
b390: 6e 64 65 78 2d 63 6f 6c 75 6d 6e 20 69 73 20 61  ndex-column is a
b3a0: 20 6b 65 79 20 63 6f 6c 75 6d 6e 20 61 6e 64 20   key column and 
b3b0: 30 0a 23 20 69 66 20 74 68 65 20 69 6e 64 65 78  0.# if the index
b3c0: 2d 63 6f 6c 75 6d 6e 20 69 73 20 61 6e 20 61 75  -column is an au
b3d0: 78 69 6c 69 61 72 79 20 63 6f 6c 75 6d 6e 2e 0a  xiliary column..
b3e0: 23 0a 64 6f 5f 74 65 73 74 20 32 33 2e 32 63 20  #.do_test 23.2c 
b3f0: 7b 0a 20 20 64 62 32 20 65 76 61 6c 20 7b 50 52  {.  db2 eval {PR
b400: 41 47 4d 41 20 69 6e 64 65 78 5f 78 69 6e 66 6f  AGMA index_xinfo
b410: 28 69 32 29 7d 0a 7d 20 7b 30 20 32 20 63 20 30  (i2)}.} {0 2 c 0
b420: 20 42 49 4e 41 52 59 20 31 20 31 20 33 20 64 20   BINARY 1 1 3 d 
b430: 30 20 42 49 4e 41 52 59 20 31 20 32 20 31 20 62  0 BINARY 1 2 1 b
b440: 20 30 20 42 49 4e 41 52 59 20 31 20 33 20 2d 31   0 BINARY 1 3 -1
b450: 20 7b 7d 20 30 20 42 49 4e 41 52 59 20 30 7d 0a   {} 0 BINARY 0}.
b460: 64 6f 5f 74 65 73 74 20 32 33 2e 32 64 20 7b 0a  do_test 23.2d {.
b470: 20 20 64 62 32 20 65 76 61 6c 20 7b 50 52 41 47    db2 eval {PRAG
b480: 4d 41 20 69 6e 64 65 78 5f 78 69 6e 66 6f 28 69  MA index_xinfo(i
b490: 32 78 29 7d 0a 7d 20 7b 30 20 33 20 64 20 30 20  2x)}.} {0 3 d 0 
b4a0: 6e 6f 63 61 73 65 20 31 20 31 20 32 20 63 20 31  nocase 1 1 2 c 1
b4b0: 20 42 49 4e 41 52 59 20 31 20 32 20 2d 31 20 7b   BINARY 1 2 -1 {
b4c0: 7d 20 30 20 42 49 4e 41 52 59 20 30 7d 0a 0a 23  } 0 BINARY 0}..#
b4d0: 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d   EVIDENCE-OF: R-
b4e0: 36 34 31 30 33 2d 31 37 37 37 36 20 50 52 41 47  64103-17776 PRAG
b4f0: 4d 41 20 73 63 68 65 6d 61 2e 69 6e 64 65 78 5f  MA schema.index_
b500: 6c 69 73 74 28 74 61 62 6c 65 2d 6e 61 6d 65 29  list(table-name)
b510: 3b 20 54 68 69 73 0a 23 20 70 72 61 67 6d 61 20  ; This.# pragma 
b520: 72 65 74 75 72 6e 73 20 6f 6e 65 20 72 6f 77 20  returns one row 
b530: 66 6f 72 20 65 61 63 68 20 69 6e 64 65 78 20 61  for each index a
b540: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
b550: 68 65 20 67 69 76 65 6e 20 74 61 62 6c 65 2e 0a  he given table..
b560: 23 0a 23 20 28 54 68 65 20 66 69 72 73 74 20 63  #.# (The first c
b570: 6f 6c 75 6d 6e 20 6f 66 20 6f 75 74 70 75 74 20  olumn of output 
b580: 66 72 6f 6d 20 50 52 41 47 4d 41 20 69 6e 64 65  from PRAGMA inde
b590: 78 5f 6c 69 73 74 20 69 73 2e 2e 2e 29 0a 23 20  x_list is...).# 
b5a0: 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 30  EVIDENCE-OF: R-0
b5b0: 32 37 35 33 2d 32 34 37 34 38 20 41 20 73 65 71  2753-24748 A seq
b5c0: 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 61 73 73  uence number ass
b5d0: 69 67 6e 65 64 20 74 6f 20 65 61 63 68 20 69 6e  igned to each in
b5e0: 64 65 78 0a 23 20 66 6f 72 20 69 6e 74 65 72 6e  dex.# for intern
b5f0: 61 6c 20 74 72 61 63 6b 69 6e 67 20 70 75 72 70  al tracking purp
b600: 6f 73 65 73 2e 0a 23 0a 23 20 28 54 68 65 20 73  oses..#.# (The s
b610: 65 63 6f 6e 64 20 63 6f 6c 75 6d 6e 20 6f 66 20  econd column of 
b620: 6f 75 74 70 75 74 20 66 72 6f 6d 20 50 52 41 47  output from PRAG
b630: 4d 41 20 69 6e 64 65 78 5f 6c 69 73 74 20 69 73  MA index_list is
b640: 2e 2e 2e 29 0a 23 20 45 56 49 44 45 4e 43 45 2d  ...).# EVIDENCE-
b650: 4f 46 3a 20 52 2d 33 35 34 39 36 2d 30 33 36 33  OF: R-35496-0363
b660: 35 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  5 The name of th
b670: 65 20 69 6e 64 65 78 2e 0a 23 0a 23 20 28 54 68  e index..#.# (Th
b680: 65 20 74 68 69 72 64 20 63 6f 6c 75 6d 6e 20 6f  e third column o
b690: 66 20 6f 75 74 70 75 74 20 66 72 6f 6d 20 50 52  f output from PR
b6a0: 41 47 4d 41 20 69 6e 64 65 78 5f 6c 69 73 74 20  AGMA index_list 
b6b0: 69 73 2e 2e 2e 29 0a 23 20 45 56 49 44 45 4e 43  is...).# EVIDENC
b6c0: 45 2d 4f 46 3a 20 52 2d 35 37 33 30 31 2d 36 34  E-OF: R-57301-64
b6d0: 35 30 36 20 22 31 22 20 69 66 20 74 68 65 20 69  506 "1" if the i
b6e0: 6e 64 65 78 20 69 73 20 55 4e 49 51 55 45 20 61  ndex is UNIQUE a
b6f0: 6e 64 20 22 30 22 20 69 66 20 6e 6f 74 2e 0a 23  nd "0" if not..#
b700: 0a 23 20 28 54 68 65 20 66 6f 75 72 74 68 20 63  .# (The fourth c
b710: 6f 6c 75 6d 6e 20 6f 66 20 6f 75 74 70 75 74 20  olumn of output 
b720: 66 72 6f 6d 20 50 52 41 47 4d 41 20 69 6e 64 65  from PRAGMA inde
b730: 78 5f 6c 69 73 74 20 69 73 2e 2e 2e 29 0a 23 20  x_list is...).# 
b740: 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 33  EVIDENCE-OF: R-3
b750: 36 36 30 39 2d 33 39 35 35 34 20 22 63 22 20 69  6609-39554 "c" i
b760: 66 20 74 68 65 20 69 6e 64 65 78 20 77 61 73 20  f the index was 
b770: 63 72 65 61 74 65 64 20 62 79 20 61 20 43 52 45  created by a CRE
b780: 41 54 45 0a 23 20 49 4e 44 45 58 20 73 74 61 74  ATE.# INDEX stat
b790: 65 6d 65 6e 74 2c 20 22 75 22 20 69 66 20 74 68  ement, "u" if th
b7a0: 65 20 69 6e 64 65 78 20 77 61 73 20 63 72 65 61  e index was crea
b7b0: 74 65 64 20 62 79 20 61 20 55 4e 49 51 55 45 20  ted by a UNIQUE 
b7c0: 63 6f 6e 73 74 72 61 69 6e 74 2c 0a 23 20 6f 72  constraint,.# or
b7d0: 20 22 70 6b 22 20 69 66 20 74 68 65 20 69 6e 64   "pk" if the ind
b7e0: 65 78 20 77 61 73 20 63 72 65 61 74 65 64 20 62  ex was created b
b7f0: 79 20 61 20 50 52 49 4d 41 52 59 20 4b 45 59 20  y a PRIMARY KEY 
b800: 63 6f 6e 73 74 72 61 69 6e 74 2e 0a 23 0a 64 6f  constraint..#.do
b810: 5f 74 65 73 74 20 32 33 2e 33 20 7b 0a 20 20 64  _test 23.3 {.  d
b820: 62 20 65 76 61 6c 20 7b 0a 20 20 20 20 43 52 45  b eval {.    CRE
b830: 41 54 45 20 49 4e 44 45 58 20 69 33 20 4f 4e 20  ATE INDEX i3 ON 
b840: 74 31 28 64 2c 62 2c 63 29 3b 0a 20 20 7d 0a 20  t1(d,b,c);.  }. 
b850: 20 63 61 70 74 75 72 65 5f 70 72 61 67 6d 61 20   capture_pragma 
b860: 64 62 32 20 6f 75 74 20 7b 50 52 41 47 4d 41 20  db2 out {PRAGMA 
b870: 69 6e 64 65 78 5f 6c 69 73 74 28 74 31 29 7d 0a  index_list(t1)}.
b880: 20 20 64 62 32 20 65 76 61 6c 20 7b 53 45 4c 45    db2 eval {SELE
b890: 43 54 20 73 65 71 2c 20 6e 61 6d 65 2c 20 22 75  CT seq, name, "u
b8a0: 6e 69 71 75 65 22 2c 20 6f 72 69 67 69 6e 2c 20  nique", origin, 
b8b0: 27 7c 27 20 46 52 4f 4d 20 6f 75 74 20 4f 52 44  '|' FROM out ORD
b8c0: 45 52 20 42 59 20 73 65 71 7d 0a 7d 20 7b 30 20  ER BY seq}.} {0 
b8d0: 69 33 20 30 20 63 20 7c 20 31 20 69 32 20 30 20  i3 0 c | 1 i2 0 
b8e0: 63 20 7c 20 32 20 69 32 78 20 30 20 63 20 7c 20  c | 2 i2x 0 c | 
b8f0: 33 20 69 31 20 30 20 63 20 7c 7d 0a 64 6f 5f 74  3 i1 0 c |}.do_t
b900: 65 73 74 20 32 33 2e 34 20 7b 0a 20 20 64 62 20  est 23.4 {.  db 
b910: 65 76 61 6c 20 7b 0a 20 20 20 20 41 4c 54 45 52  eval {.    ALTER
b920: 20 54 41 42 4c 45 20 74 31 20 41 44 44 20 43 4f   TABLE t1 ADD CO
b930: 4c 55 4d 4e 20 65 3b 0a 20 20 7d 0a 20 20 64 62  LUMN e;.  }.  db
b940: 32 20 65 76 61 6c 20 7b 0a 20 20 20 20 50 52 41  2 eval {.    PRA
b950: 47 4d 41 20 74 61 62 6c 65 5f 69 6e 66 6f 28 74  GMA table_info(t
b960: 31 29 3b 0a 20 20 7d 0a 7d 20 7b 2f 34 20 65 20  1);.  }.} {/4 e 
b970: 7b 7d 20 30 20 7b 7d 20 30 2f 7d 0a 64 6f 5f 74  {} 0 {} 0/}.do_t
b980: 65 73 74 20 32 33 2e 35 20 7b 0a 20 20 64 62 20  est 23.5 {.  db 
b990: 65 76 61 6c 20 7b 0a 20 20 20 20 44 52 4f 50 20  eval {.    DROP 
b9a0: 54 41 42 4c 45 20 74 32 3b 0a 20 20 20 20 43 52  TABLE t2;.    CR
b9b0: 45 41 54 45 20 54 41 42 4c 45 20 74 32 28 78 2c  EATE TABLE t2(x,
b9c0: 20 79 20 49 4e 54 45 47 45 52 20 52 45 46 45 52   y INTEGER REFER
b9d0: 45 4e 43 45 53 20 74 31 29 3b 0a 20 20 7d 0a 20  ENCES t1);.  }. 
b9e0: 20 64 62 32 20 65 76 61 6c 20 7b 0a 20 20 20 20   db2 eval {.    
b9f0: 50 52 41 47 4d 41 20 66 6f 72 65 69 67 6e 5f 6b  PRAGMA foreign_k
ba00: 65 79 5f 6c 69 73 74 28 74 32 29 3b 0a 20 20 7d  ey_list(t2);.  }
ba10: 0a 7d 20 7b 30 20 30 20 74 31 20 79 20 7b 7d 20  .} {0 0 t1 y {} 
ba20: 7b 4e 4f 20 41 43 54 49 4f 4e 7d 20 7b 4e 4f 20  {NO ACTION} {NO 
ba30: 41 43 54 49 4f 4e 7d 20 4e 4f 4e 45 7d 0a 64 62  ACTION} NONE}.db
ba40: 32 20 63 6c 6f 73 65 0a 0a 69 66 63 61 70 61 62  2 close..ifcapab
ba50: 6c 65 20 21 68 61 73 5f 63 6f 64 65 63 20 7b 0a  le !has_codec {.
ba60: 20 20 72 65 73 65 74 5f 64 62 0a 20 20 64 6f 5f    reset_db.  do_
ba70: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 32 34 2e  execsql_test 24.
ba80: 30 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 70  0 {.    PRAGMA p
ba90: 61 67 65 5f 73 69 7a 65 20 3d 20 31 30 32 34 3b  age_size = 1024;
baa0: 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  .    CREATE TABL
bab0: 45 20 74 31 28 61 2c 20 62 2c 20 63 29 3b 0a 20  E t1(a, b, c);. 
bac0: 20 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20     CREATE INDEX 
bad0: 69 31 20 4f 4e 20 74 31 28 62 29 3b 0a 20 20 20  i1 ON t1(b);.   
bae0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20   INSERT INTO t1 
baf0: 56 41 4c 55 45 53 28 27 61 27 2c 20 27 62 27 2c  VALUES('a', 'b',
bb00: 20 27 63 27 29 3b 0a 20 20 20 20 50 52 41 47 4d   'c');.    PRAGM
bb10: 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63  A integrity_chec
bb20: 6b 3b 0a 20 20 7d 20 7b 6f 6b 7d 0a 20 20 0a 20  k;.  } {ok}.  . 
bb30: 20 73 65 74 20 72 20 5b 64 62 20 6f 6e 65 20 7b   set r [db one {
bb40: 53 45 4c 45 43 54 20 72 6f 6f 74 70 61 67 65 20  SELECT rootpage 
bb50: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74  FROM sqlite_mast
bb60: 65 72 20 57 48 45 52 45 20 6e 61 6d 65 20 3d 20  er WHERE name = 
bb70: 27 74 31 27 7d 5d 0a 20 20 64 62 20 63 6c 6f 73  't1'}].  db clos
bb80: 65 0a 20 20 68 65 78 69 6f 5f 77 72 69 74 65 20  e.  hexio_write 
bb90: 74 65 73 74 2e 64 62 20 5b 65 78 70 72 20 24 72  test.db [expr $r
bba0: 2a 31 30 32 34 20 2d 20 31 36 5d 20 30 30 30 30  *1024 - 16] 0000
bbb0: 30 30 30 30 30 30 30 30 30 30 30 37 30 31 30 34  0000000000070104
bbc0: 30 66 30 66 31 66 36 31 36 32 36 33 0a 20 20 0a  0f0f1f616263.  .
bbd0: 20 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73    sqlite3 db tes
bbe0: 74 2e 64 62 0a 20 20 64 6f 5f 63 61 74 63 68 73  t.db.  do_catchs
bbf0: 71 6c 5f 74 65 73 74 20 32 34 2e 31 20 7b 0a 20  ql_test 24.1 {. 
bc00: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
bc10: 20 74 31 3b 0a 20 20 7d 20 7b 31 20 7b 64 61 74   t1;.  } {1 {dat
bc20: 61 62 61 73 65 20 64 69 73 6b 20 69 6d 61 67 65  abase disk image
bc30: 20 69 73 20 6d 61 6c 66 6f 72 6d 65 64 7d 7d 0a   is malformed}}.
bc40: 20 20 64 6f 5f 63 61 74 63 68 73 71 6c 5f 74 65    do_catchsql_te
bc50: 73 74 20 32 34 2e 32 20 7b 0a 20 20 20 20 50 52  st 24.2 {.    PR
bc60: 41 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63  AGMA integrity_c
bc70: 68 65 63 6b 3b 0a 20 20 7d 20 7b 30 20 7b 7b 64  heck;.  } {0 {{d
bc80: 61 74 61 62 61 73 65 20 64 69 73 6b 20 69 6d 61  atabase disk ima
bc90: 67 65 20 69 73 20 6d 61 6c 66 6f 72 6d 65 64 7d  ge is malformed}
bca0: 7d 7d 0a 7d 20 20 0a 64 61 74 61 62 61 73 65 5f  }}.}  .database_
bcb0: 6e 65 76 65 72 5f 63 6f 72 72 75 70 74 0a 66 69  never_corrupt.fi
bcc0: 6e 69 73 68 5f 74 65 73 74 0a                    nish_test.