/ Hex Artifact Content
Login

Artifact be7195f0aa72bdb8a512133e9640ac40f15b57a2:


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 32 34 31 39 37 2d 34 32 37 35 31 20  : R-24197-42751 
0a90: 50 52 41 47 4d 41 20 64 61 74 61 62 61 73 65 2e  PRAGMA database.
0aa0: 63 61 63 68 65 5f 73 69 7a 65 3b 20 50 52 41 47  cache_size; PRAG
0ab0: 4d 41 0a 23 20 64 61 74 61 62 61 73 65 2e 63 61  MA.# database.ca
0ac0: 63 68 65 5f 73 69 7a 65 20 3d 20 70 61 67 65 73  che_size = pages
0ad0: 3b 20 50 52 41 47 4d 41 20 64 61 74 61 62 61 73  ; PRAGMA databas
0ae0: 65 2e 63 61 63 68 65 5f 73 69 7a 65 20 3d 20 2d  e.cache_size = -
0af0: 6b 69 62 69 62 79 74 65 73 3b 0a 23 20 51 75 65  kibibytes;.# Que
0b00: 72 79 20 6f 72 20 63 68 61 6e 67 65 20 74 68 65  ry or change the
0b10: 20 73 75 67 67 65 73 74 65 64 20 6d 61 78 69 6d   suggested maxim
0b20: 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20 64 61 74  um number of dat
0b30: 61 62 61 73 65 20 64 69 73 6b 20 70 61 67 65 73  abase disk pages
0b40: 0a 23 20 74 68 61 74 20 53 51 4c 69 74 65 20 77  .# that SQLite w
0b50: 69 6c 6c 20 68 6f 6c 64 20 69 6e 20 6d 65 6d 6f  ill hold in memo
0b60: 72 79 20 61 74 20 6f 6e 63 65 20 70 65 72 20 6f  ry at once per o
0b70: 70 65 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  pen database fil
0b80: 65 2e 0a 23 0a 69 66 63 61 70 61 62 6c 65 20 70  e..#.ifcapable p
0b90: 61 67 65 72 5f 70 72 61 67 6d 61 73 20 7b 0a 73  ager_pragmas {.s
0ba0: 65 74 20 44 46 4c 54 5f 43 41 43 48 45 5f 53 5a  et DFLT_CACHE_SZ
0bb0: 20 5b 64 62 20 6f 6e 65 20 7b 50 52 41 47 4d 41   [db one {PRAGMA
0bc0: 20 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73   default_cache_s
0bd0: 69 7a 65 7d 5d 0a 73 65 74 20 54 45 4d 50 5f 43  ize}].set TEMP_C
0be0: 41 43 48 45 5f 53 5a 20 5b 64 62 20 6f 6e 65 20  ACHE_SZ [db one 
0bf0: 7b 50 52 41 47 4d 41 20 74 65 6d 70 2e 64 65 66  {PRAGMA temp.def
0c00: 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65 7d  ault_cache_size}
0c10: 5d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  ].do_test pragma
0c20: 2d 31 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c  -1.1 {.  execsql
0c30: 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 63 61   {.    PRAGMA ca
0c40: 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 50 52  che_size;.    PR
0c50: 41 47 4d 41 20 64 65 66 61 75 6c 74 5f 63 61 63  AGMA default_cac
0c60: 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 50 52 41  he_size;.    PRA
0c70: 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3b  GMA synchronous;
0c80: 0a 20 20 7d 0a 7d 20 5b 6c 69 73 74 20 24 44 46  .  }.} [list $DF
0c90: 4c 54 5f 43 41 43 48 45 5f 53 5a 20 24 44 46 4c  LT_CACHE_SZ $DFL
0ca0: 54 5f 43 41 43 48 45 5f 53 5a 20 32 5d 0a 64 6f  T_CACHE_SZ 2].do
0cb0: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 2e 32  _test pragma-1.2
0cc0: 20 7b 0a 20 20 23 20 45 56 49 44 45 4e 43 45 2d   {.  # EVIDENCE-
0cd0: 4f 46 3a 20 52 2d 34 32 30 35 39 2d 34 37 32 31  OF: R-42059-4721
0ce0: 31 20 49 66 20 74 68 65 20 61 72 67 75 6d 65 6e  1 If the argumen
0cf0: 74 20 4e 20 69 73 20 70 6f 73 69 74 69 76 65 20  t N is positive 
0d00: 74 68 65 6e 20 74 68 65 0a 20 20 23 20 73 75 67  then the.  # sug
0d10: 67 65 73 74 65 64 20 63 61 63 68 65 20 73 69 7a  gested cache siz
0d20: 65 20 69 73 20 73 65 74 20 74 6f 20 4e 2e 0a 20  e is set to N.. 
0d30: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50   execsql {.    P
0d40: 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75  RAGMA synchronou
0d50: 73 3d 4f 46 46 3b 0a 20 20 20 20 50 52 41 47 4d  s=OFF;.    PRAGM
0d60: 41 20 63 61 63 68 65 5f 73 69 7a 65 3d 31 32 33  A cache_size=123
0d70: 34 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 63 61  4;.    PRAGMA ca
0d80: 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 50 52  che_size;.    PR
0d90: 41 47 4d 41 20 64 65 66 61 75 6c 74 5f 63 61 63  AGMA default_cac
0da0: 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 50 52 41  he_size;.    PRA
0db0: 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3b  GMA synchronous;
0dc0: 0a 20 20 7d 0a 7d 20 5b 6c 69 73 74 20 31 32 33  .  }.} [list 123
0dd0: 34 20 24 44 46 4c 54 5f 43 41 43 48 45 5f 53 5a  4 $DFLT_CACHE_SZ
0de0: 20 30 5d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67   0].do_test prag
0df0: 6d 61 2d 31 2e 33 20 7b 0a 20 20 64 62 20 63 6c  ma-1.3 {.  db cl
0e00: 6f 73 65 0a 20 20 73 71 6c 69 74 65 33 20 64 62  ose.  sqlite3 db
0e10: 20 74 65 73 74 2e 64 62 0a 20 20 65 78 65 63 73   test.db.  execs
0e20: 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20  ql {.    PRAGMA 
0e30: 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20  cache_size;.    
0e40: 50 52 41 47 4d 41 20 64 65 66 61 75 6c 74 5f 63  PRAGMA default_c
0e50: 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 50  ache_size;.    P
0e60: 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75  RAGMA synchronou
0e70: 73 3b 0a 20 20 7d 0a 7d 20 5b 6c 69 73 74 20 24  s;.  }.} [list $
0e80: 44 46 4c 54 5f 43 41 43 48 45 5f 53 5a 20 24 44  DFLT_CACHE_SZ $D
0e90: 46 4c 54 5f 43 41 43 48 45 5f 53 5a 20 32 5d 0a  FLT_CACHE_SZ 2].
0ea0: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31  do_test pragma-1
0eb0: 2e 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .4 {.  execsql {
0ec0: 0a 20 20 20 20 50 52 41 47 4d 41 20 73 79 6e 63  .    PRAGMA sync
0ed0: 68 72 6f 6e 6f 75 73 3d 4f 46 46 3b 0a 20 20 20  hronous=OFF;.   
0ee0: 20 50 52 41 47 4d 41 20 63 61 63 68 65 5f 73 69   PRAGMA cache_si
0ef0: 7a 65 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 64  ze;.    PRAGMA d
0f00: 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a  efault_cache_siz
0f10: 65 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 73 79  e;.    PRAGMA sy
0f20: 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20 20 7d 0a 7d  nchronous;.  }.}
0f30: 20 5b 6c 69 73 74 20 24 44 46 4c 54 5f 43 41 43   [list $DFLT_CAC
0f40: 48 45 5f 53 5a 20 24 44 46 4c 54 5f 43 41 43 48  HE_SZ $DFLT_CACH
0f50: 45 5f 53 5a 20 30 5d 0a 64 6f 5f 74 65 73 74 20  E_SZ 0].do_test 
0f60: 70 72 61 67 6d 61 2d 31 2e 35 20 7b 0a 20 20 65  pragma-1.5 {.  e
0f70: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41  xecsql {.    PRA
0f80: 47 4d 41 20 63 61 63 68 65 5f 73 69 7a 65 3d 2d  GMA cache_size=-
0f90: 34 33 32 31 3b 0a 20 20 20 20 50 52 41 47 4d 41  4321;.    PRAGMA
0fa0: 20 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20   cache_size;.   
0fb0: 20 50 52 41 47 4d 41 20 64 65 66 61 75 6c 74 5f   PRAGMA default_
0fc0: 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20  cache_size;.    
0fd0: 50 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f  PRAGMA synchrono
0fe0: 75 73 3b 0a 20 20 7d 0a 7d 20 5b 6c 69 73 74 20  us;.  }.} [list 
0ff0: 2d 34 33 32 31 20 24 44 46 4c 54 5f 43 41 43 48  -4321 $DFLT_CACH
1000: 45 5f 53 5a 20 30 5d 0a 64 6f 5f 74 65 73 74 20  E_SZ 0].do_test 
1010: 70 72 61 67 6d 61 2d 31 2e 36 20 7b 0a 20 20 65  pragma-1.6 {.  e
1020: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41  xecsql {.    PRA
1030: 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3d  GMA synchronous=
1040: 4f 4e 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 63  ON;.    PRAGMA c
1050: 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 50  ache_size;.    P
1060: 52 41 47 4d 41 20 64 65 66 61 75 6c 74 5f 63 61  RAGMA default_ca
1070: 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 50 52  che_size;.    PR
1080: 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73  AGMA synchronous
1090: 3b 0a 20 20 7d 0a 7d 20 5b 6c 69 73 74 20 2d 34  ;.  }.} [list -4
10a0: 33 32 31 20 24 44 46 4c 54 5f 43 41 43 48 45 5f  321 $DFLT_CACHE_
10b0: 53 5a 20 31 5d 0a 64 6f 5f 74 65 73 74 20 70 72  SZ 1].do_test pr
10c0: 61 67 6d 61 2d 31 2e 37 20 7b 0a 20 20 64 62 20  agma-1.7 {.  db 
10d0: 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74 65 33 20  close.  sqlite3 
10e0: 64 62 20 74 65 73 74 2e 64 62 0a 20 20 65 78 65  db test.db.  exe
10f0: 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d  csql {.    PRAGM
1100: 41 20 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20  A cache_size;.  
1110: 20 20 50 52 41 47 4d 41 20 64 65 66 61 75 6c 74    PRAGMA default
1120: 5f 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20  _cache_size;.   
1130: 20 50 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e   PRAGMA synchron
1140: 6f 75 73 3b 0a 20 20 7d 0a 7d 20 5b 6c 69 73 74  ous;.  }.} [list
1150: 20 24 44 46 4c 54 5f 43 41 43 48 45 5f 53 5a 20   $DFLT_CACHE_SZ 
1160: 24 44 46 4c 54 5f 43 41 43 48 45 5f 53 5a 20 32  $DFLT_CACHE_SZ 2
1170: 5d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  ].do_test pragma
1180: 2d 31 2e 38 20 7b 0a 20 20 65 78 65 63 73 71 6c  -1.8 {.  execsql
1190: 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 64 65   {.    PRAGMA de
11a0: 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65  fault_cache_size
11b0: 3d 2d 31 32 33 3b 0a 20 20 20 20 50 52 41 47 4d  =-123;.    PRAGM
11c0: 41 20 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20  A cache_size;.  
11d0: 20 20 50 52 41 47 4d 41 20 64 65 66 61 75 6c 74    PRAGMA default
11e0: 5f 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20  _cache_size;.   
11f0: 20 50 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e   PRAGMA synchron
1200: 6f 75 73 3b 0a 20 20 7d 0a 7d 20 7b 31 32 33 20  ous;.  }.} {123 
1210: 31 32 33 20 32 7d 0a 64 6f 5f 74 65 73 74 20 70  123 2}.do_test p
1220: 72 61 67 6d 61 2d 31 2e 39 2e 31 20 7b 0a 20 20  ragma-1.9.1 {.  
1230: 64 62 20 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74  db close.  sqlit
1240: 65 33 20 64 62 20 74 65 73 74 2e 64 62 3b 20 73  e3 db test.db; s
1250: 65 74 20 3a 3a 44 42 20 5b 73 71 6c 69 74 65 33  et ::DB [sqlite3
1260: 5f 63 6f 6e 6e 65 63 74 69 6f 6e 5f 70 6f 69 6e  _connection_poin
1270: 74 65 72 20 64 62 5d 0a 20 20 65 78 65 63 73 71  ter db].  execsq
1280: 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 63  l {.    PRAGMA c
1290: 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 50  ache_size;.    P
12a0: 52 41 47 4d 41 20 64 65 66 61 75 6c 74 5f 63 61  RAGMA default_ca
12b0: 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 50 52  che_size;.    PR
12c0: 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73  AGMA synchronous
12d0: 3b 0a 20 20 7d 0a 7d 20 7b 31 32 33 20 31 32 33  ;.  }.} {123 123
12e0: 20 32 7d 0a 69 66 63 61 70 61 62 6c 65 20 76 61   2}.ifcapable va
12f0: 63 75 75 6d 20 7b 0a 20 20 64 6f 5f 74 65 73 74  cuum {.  do_test
1300: 20 70 72 61 67 6d 61 2d 31 2e 39 2e 32 20 7b 0a   pragma-1.9.2 {.
1310: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20      execsql {.  
1320: 20 20 20 20 56 41 43 55 55 4d 3b 0a 20 20 20 20      VACUUM;.    
1330: 20 20 50 52 41 47 4d 41 20 63 61 63 68 65 5f 73    PRAGMA cache_s
1340: 69 7a 65 3b 0a 20 20 20 20 20 20 50 52 41 47 4d  ize;.      PRAGM
1350: 41 20 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f  A default_cache_
1360: 73 69 7a 65 3b 0a 20 20 20 20 20 20 50 52 41 47  size;.      PRAG
1370: 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a  MA synchronous;.
1380: 20 20 20 20 7d 0a 20 20 7d 20 7b 31 32 33 20 31      }.  } {123 1
1390: 32 33 20 32 7d 0a 7d 0a 64 6f 5f 74 65 73 74 20  23 2}.}.do_test 
13a0: 70 72 61 67 6d 61 2d 31 2e 31 30 20 7b 0a 20 20  pragma-1.10 {.  
13b0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52  execsql {.    PR
13c0: 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73  AGMA synchronous
13d0: 3d 4e 4f 52 4d 41 4c 3b 0a 20 20 20 20 50 52 41  =NORMAL;.    PRA
13e0: 47 4d 41 20 63 61 63 68 65 5f 73 69 7a 65 3b 0a  GMA cache_size;.
13f0: 20 20 20 20 50 52 41 47 4d 41 20 64 65 66 61 75      PRAGMA defau
1400: 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20  lt_cache_size;. 
1410: 20 20 20 50 52 41 47 4d 41 20 73 79 6e 63 68 72     PRAGMA synchr
1420: 6f 6e 6f 75 73 3b 0a 20 20 7d 0a 7d 20 7b 31 32  onous;.  }.} {12
1430: 33 20 31 32 33 20 31 7d 0a 64 6f 5f 74 65 73 74  3 123 1}.do_test
1440: 20 70 72 61 67 6d 61 2d 31 2e 31 31 20 7b 0a 20   pragma-1.11 {. 
1450: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50   execsql {.    P
1460: 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75  RAGMA synchronou
1470: 73 3d 46 55 4c 4c 3b 0a 20 20 20 20 50 52 41 47  s=FULL;.    PRAG
1480: 4d 41 20 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20  MA cache_size;. 
1490: 20 20 20 50 52 41 47 4d 41 20 64 65 66 61 75 6c     PRAGMA defaul
14a0: 74 5f 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20  t_cache_size;.  
14b0: 20 20 50 52 41 47 4d 41 20 73 79 6e 63 68 72 6f    PRAGMA synchro
14c0: 6e 6f 75 73 3b 0a 20 20 7d 0a 7d 20 7b 31 32 33  nous;.  }.} {123
14d0: 20 31 32 33 20 32 7d 0a 64 6f 5f 74 65 73 74 20   123 2}.do_test 
14e0: 70 72 61 67 6d 61 2d 31 2e 31 32 20 7b 0a 20 20  pragma-1.12 {.  
14f0: 64 62 20 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74  db close.  sqlit
1500: 65 33 20 64 62 20 74 65 73 74 2e 64 62 3b 20 73  e3 db test.db; s
1510: 65 74 20 3a 3a 44 42 20 5b 73 71 6c 69 74 65 33  et ::DB [sqlite3
1520: 5f 63 6f 6e 6e 65 63 74 69 6f 6e 5f 70 6f 69 6e  _connection_poin
1530: 74 65 72 20 64 62 5d 0a 20 20 65 78 65 63 73 71  ter db].  execsq
1540: 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 63  l {.    PRAGMA c
1550: 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 50  ache_size;.    P
1560: 52 41 47 4d 41 20 64 65 66 61 75 6c 74 5f 63 61  RAGMA default_ca
1570: 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 50 52  che_size;.    PR
1580: 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73  AGMA synchronous
1590: 3b 0a 20 20 7d 0a 7d 20 7b 31 32 33 20 31 32 33  ;.  }.} {123 123
15a0: 20 32 7d 0a 0a 23 20 4d 61 6b 65 20 73 75 72 65   2}..# Make sure
15b0: 20 74 68 65 20 70 72 61 67 6d 61 20 68 61 6e 64   the pragma hand
15c0: 6c 65 72 20 75 6e 64 65 72 73 74 61 6e 64 73 20  ler understands 
15d0: 6e 75 6d 65 72 69 63 20 76 61 6c 75 65 73 20 69  numeric values i
15e0: 6e 20 61 64 64 69 74 69 6f 6e 0a 23 20 74 6f 20  n addition.# to 
15f0: 6b 65 79 77 6f 72 64 73 20 6c 69 6b 65 20 22 6f  keywords like "o
1600: 66 66 22 20 61 6e 64 20 22 66 75 6c 6c 22 2e 0a  ff" and "full"..
1610: 23 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  #.do_test pragma
1620: 2d 31 2e 31 33 20 7b 0a 20 20 65 78 65 63 73 71  -1.13 {.  execsq
1630: 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 73  l {.    PRAGMA s
1640: 79 6e 63 68 72 6f 6e 6f 75 73 3d 30 3b 0a 20 20  ynchronous=0;.  
1650: 20 20 50 52 41 47 4d 41 20 73 79 6e 63 68 72 6f    PRAGMA synchro
1660: 6e 6f 75 73 3b 0a 20 20 7d 0a 7d 20 7b 30 7d 0a  nous;.  }.} {0}.
1670: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31  do_test pragma-1
1680: 2e 31 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  .14 {.  execsql 
1690: 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 73 79 6e  {.    PRAGMA syn
16a0: 63 68 72 6f 6e 6f 75 73 3d 32 3b 0a 20 20 20 20  chronous=2;.    
16b0: 50 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f  PRAGMA synchrono
16c0: 75 73 3b 0a 20 20 7d 0a 7d 20 7b 32 7d 0a 64 6f  us;.  }.} {2}.do
16d0: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 2e 31  _test pragma-1.1
16e0: 34 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  4.1 {.  execsql 
16f0: 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 73 79 6e  {.    PRAGMA syn
1700: 63 68 72 6f 6e 6f 75 73 3d 34 3b 0a 20 20 20 20  chronous=4;.    
1710: 50 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f  PRAGMA synchrono
1720: 75 73 3b 0a 20 20 7d 0a 7d 20 7b 30 7d 0a 64 6f  us;.  }.} {0}.do
1730: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 2e 31  _test pragma-1.1
1740: 34 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  4.2 {.  execsql 
1750: 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 73 79 6e  {.    PRAGMA syn
1760: 63 68 72 6f 6e 6f 75 73 3d 33 3b 0a 20 20 20 20  chronous=3;.    
1770: 50 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f  PRAGMA synchrono
1780: 75 73 3b 0a 20 20 7d 0a 7d 20 7b 30 7d 0a 64 6f  us;.  }.} {0}.do
1790: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 2e 31  _test pragma-1.1
17a0: 34 2e 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  4.3 {.  execsql 
17b0: 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 73 79 6e  {.    PRAGMA syn
17c0: 63 68 72 6f 6e 6f 75 73 3d 31 30 3b 0a 20 20 20  chronous=10;.   
17d0: 20 50 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e   PRAGMA synchron
17e0: 6f 75 73 3b 0a 20 20 7d 0a 7d 20 7b 32 7d 0a 7d  ous;.  }.} {2}.}
17f0: 20 3b 23 20 69 66 63 61 70 61 62 6c 65 20 70 61   ;# ifcapable pa
1800: 67 65 72 5f 70 72 61 67 6d 61 73 0a 0a 23 20 54  ger_pragmas..# T
1810: 65 73 74 20 74 75 72 6e 69 6e 67 20 22 66 6c 61  est turning "fla
1820: 67 22 20 70 72 61 67 6d 61 73 20 6f 6e 20 61 6e  g" pragmas on an
1830: 64 20 6f 66 66 2e 0a 23 0a 69 66 63 61 70 61 62  d off..#.ifcapab
1840: 6c 65 20 64 65 62 75 67 20 7b 0a 20 20 23 20 50  le debug {.  # P
1850: 72 61 67 6d 61 20 22 76 64 62 65 5f 6c 69 73 74  ragma "vdbe_list
1860: 69 6e 67 22 20 69 73 20 6f 6e 6c 79 20 61 76 61  ing" is only ava
1870: 69 6c 61 62 6c 65 20 69 66 20 63 6f 6d 70 69 6c  ilable if compil
1880: 65 64 20 77 69 74 68 20 53 51 4c 49 54 45 5f 44  ed with SQLITE_D
1890: 45 42 55 47 0a 20 20 23 0a 20 20 64 6f 5f 74 65  EBUG.  #.  do_te
18a0: 73 74 20 70 72 61 67 6d 61 2d 31 2e 31 35 20 7b  st pragma-1.15 {
18b0: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
18c0: 20 20 20 20 20 50 52 41 47 4d 41 20 76 64 62 65       PRAGMA vdbe
18d0: 5f 6c 69 73 74 69 6e 67 3d 59 45 53 3b 0a 20 20  _listing=YES;.  
18e0: 20 20 20 20 50 52 41 47 4d 41 20 76 64 62 65 5f      PRAGMA vdbe_
18f0: 6c 69 73 74 69 6e 67 3b 0a 20 20 20 20 7d 0a 20  listing;.    }. 
1900: 20 7d 20 7b 31 7d 0a 20 20 64 6f 5f 74 65 73 74   } {1}.  do_test
1910: 20 70 72 61 67 6d 61 2d 31 2e 31 36 20 7b 0a 20   pragma-1.16 {. 
1920: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
1930: 20 20 20 50 52 41 47 4d 41 20 76 64 62 65 5f 6c     PRAGMA vdbe_l
1940: 69 73 74 69 6e 67 3d 4e 4f 3b 0a 20 20 20 20 20  isting=NO;.     
1950: 20 50 52 41 47 4d 41 20 76 64 62 65 5f 6c 69 73   PRAGMA vdbe_lis
1960: 74 69 6e 67 3b 0a 20 20 20 20 7d 0a 20 20 7d 20  ting;.    }.  } 
1970: 7b 30 7d 0a 7d 0a 0a 64 6f 5f 74 65 73 74 20 70  {0}.}..do_test p
1980: 72 61 67 6d 61 2d 31 2e 31 37 20 7b 0a 20 20 65  ragma-1.17 {.  e
1990: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41  xecsql {.    PRA
19a0: 47 4d 41 20 70 61 72 73 65 72 5f 74 72 61 63 65  GMA parser_trace
19b0: 3d 4f 4e 3b 0a 20 20 20 20 50 52 41 47 4d 41 20  =ON;.    PRAGMA 
19c0: 70 61 72 73 65 72 5f 74 72 61 63 65 3d 4f 46 46  parser_trace=OFF
19d0: 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65  ;.  }.} {}.do_te
19e0: 73 74 20 70 72 61 67 6d 61 2d 31 2e 31 38 20 7b  st pragma-1.18 {
19f0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
1a00: 20 50 52 41 47 4d 41 20 62 6f 67 75 73 20 3d 20   PRAGMA bogus = 
1a10: 2d 31 32 33 34 3b 20 20 2d 2d 20 50 61 72 73 69  -1234;  -- Parsi
1a20: 6e 67 20 6f 66 20 6e 65 67 61 74 69 76 65 20 76  ng of negative v
1a30: 61 6c 75 65 73 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a  alues.  }.} {}..
1a40: 23 20 54 65 73 74 20 6d 6f 64 69 66 79 69 6e 67  # Test modifying
1a50: 20 74 68 65 20 73 61 66 65 74 79 5f 6c 65 76 65   the safety_leve
1a60: 6c 20 6f 66 20 61 6e 20 61 74 74 61 63 68 65 64  l of an attached
1a70: 20 64 61 74 61 62 61 73 65 2e 0a 69 66 63 61 70   database..ifcap
1a80: 61 62 6c 65 20 70 61 67 65 72 5f 70 72 61 67 6d  able pager_pragm
1a90: 61 73 26 26 61 74 74 61 63 68 20 7b 0a 20 20 64  as&&attach {.  d
1aa0: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 32 2e  o_test pragma-2.
1ab0: 31 20 7b 0a 20 20 20 20 66 6f 72 63 65 64 65 6c  1 {.    forcedel
1ac0: 65 74 65 20 74 65 73 74 32 2e 64 62 0a 20 20 20  ete test2.db.   
1ad0: 20 66 6f 72 63 65 64 65 6c 65 74 65 20 74 65 73   forcedelete tes
1ae0: 74 32 2e 64 62 2d 6a 6f 75 72 6e 61 6c 0a 20 20  t2.db-journal.  
1af0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
1b00: 20 20 41 54 54 41 43 48 20 27 74 65 73 74 32 2e    ATTACH 'test2.
1b10: 64 62 27 20 41 53 20 61 75 78 3b 0a 20 20 20 20  db' AS aux;.    
1b20: 7d 20 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74  } .  } {}.  do_t
1b30: 65 73 74 20 70 72 61 67 6d 61 2d 32 2e 32 20 7b  est pragma-2.2 {
1b40: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
1b50: 20 20 20 20 20 70 72 61 67 6d 61 20 61 75 78 2e       pragma aux.
1b60: 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20 20 20  synchronous;.   
1b70: 20 7d 20 0a 20 20 7d 20 7b 32 7d 0a 20 20 64 6f   } .  } {2}.  do
1b80: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 32 2e 33  _test pragma-2.3
1b90: 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b   {.    execsql {
1ba0: 0a 20 20 20 20 20 20 70 72 61 67 6d 61 20 61 75  .      pragma au
1bb0: 78 2e 73 79 6e 63 68 72 6f 6e 6f 75 73 20 3d 20  x.synchronous = 
1bc0: 4f 46 46 3b 0a 20 20 20 20 20 20 70 72 61 67 6d  OFF;.      pragm
1bd0: 61 20 61 75 78 2e 73 79 6e 63 68 72 6f 6e 6f 75  a aux.synchronou
1be0: 73 3b 0a 20 20 20 20 20 20 70 72 61 67 6d 61 20  s;.      pragma 
1bf0: 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20 20 20  synchronous;.   
1c00: 20 7d 20 0a 20 20 7d 20 7b 30 20 32 7d 0a 20 20   } .  } {0 2}.  
1c10: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 32  do_test pragma-2
1c20: 2e 34 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  .4 {.    execsql
1c30: 20 7b 0a 20 20 20 20 20 20 70 72 61 67 6d 61 20   {.      pragma 
1c40: 61 75 78 2e 73 79 6e 63 68 72 6f 6e 6f 75 73 20  aux.synchronous 
1c50: 3d 20 4f 4e 3b 0a 20 20 20 20 20 20 70 72 61 67  = ON;.      prag
1c60: 6d 61 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a  ma synchronous;.
1c70: 20 20 20 20 20 20 70 72 61 67 6d 61 20 61 75 78        pragma aux
1c80: 2e 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20 20  .synchronous;.  
1c90: 20 20 7d 20 0a 20 20 7d 20 7b 32 20 31 7d 0a 7d    } .  } {2 1}.}
1ca0: 20 3b 23 20 69 66 63 61 70 61 62 6c 65 20 70 61   ;# ifcapable pa
1cb0: 67 65 72 5f 70 72 61 67 6d 61 73 0a 0a 23 20 43  ger_pragmas..# C
1cc0: 6f 6e 73 74 72 75 63 74 20 61 20 63 6f 72 72 75  onstruct a corru
1cd0: 70 74 65 64 20 69 6e 64 65 78 20 61 6e 64 20 6d  pted index and m
1ce0: 61 6b 65 20 73 75 72 65 20 74 68 65 20 69 6e 74  ake sure the int
1cf0: 65 67 72 69 74 79 5f 63 68 65 63 6b 0a 23 20 70  egrity_check.# p
1d00: 72 61 67 6d 61 20 66 69 6e 64 73 20 69 74 2e 0a  ragma finds it..
1d10: 23 0a 23 20 54 68 65 73 65 20 74 65 73 74 73 20  #.# These tests 
1d20: 77 6f 6e 27 74 20 77 6f 72 6b 20 69 66 20 74 68  won't work if th
1d30: 65 20 64 61 74 61 62 61 73 65 20 69 73 20 65 6e  e database is en
1d40: 63 72 79 70 74 65 64 0a 23 0a 64 6f 5f 74 65 73  crypted.#.do_tes
1d50: 74 20 70 72 61 67 6d 61 2d 33 2e 31 20 7b 0a 20  t pragma-3.1 {. 
1d60: 20 64 62 20 63 6c 6f 73 65 0a 20 20 66 6f 72 63   db close.  forc
1d70: 65 64 65 6c 65 74 65 20 74 65 73 74 2e 64 62 20  edelete test.db 
1d80: 74 65 73 74 2e 64 62 2d 6a 6f 75 72 6e 61 6c 0a  test.db-journal.
1d90: 20 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73    sqlite3 db tes
1da0: 74 2e 64 62 0a 20 20 65 78 65 63 73 71 6c 20 7b  t.db.  execsql {
1db0: 0a 20 20 20 20 50 52 41 47 4d 41 20 61 75 74 6f  .    PRAGMA auto
1dc0: 5f 76 61 63 75 75 6d 3d 4f 46 46 3b 0a 20 20 20  _vacuum=OFF;.   
1dd0: 20 42 45 47 49 4e 3b 0a 20 20 20 20 43 52 45 41   BEGIN;.    CREA
1de0: 54 45 20 54 41 42 4c 45 20 74 32 28 61 2c 62 2c  TE TABLE t2(a,b,
1df0: 63 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20 49  c);.    CREATE I
1e00: 4e 44 45 58 20 69 32 20 4f 4e 20 74 32 28 61 29  NDEX i2 ON t2(a)
1e10: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
1e20: 4f 20 74 32 20 56 41 4c 55 45 53 28 31 31 2c 32  O t2 VALUES(11,2
1e30: 2c 33 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20  ,3);.    INSERT 
1e40: 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28 32  INTO t2 VALUES(2
1e50: 32 2c 33 2c 34 29 3b 0a 20 20 20 20 43 4f 4d 4d  2,3,4);.    COMM
1e60: 49 54 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 72  IT;.    SELECT r
1e70: 6f 77 69 64 2c 20 2a 20 66 72 6f 6d 20 74 32 3b  owid, * from t2;
1e80: 0a 20 20 7d 0a 7d 20 7b 31 20 31 31 20 32 20 33  .  }.} {1 11 2 3
1e90: 20 32 20 32 32 20 33 20 34 7d 0a 69 66 63 61 70   2 22 3 4}.ifcap
1ea0: 61 62 6c 65 20 61 74 74 61 63 68 20 7b 0a 20 20  able attach {.  
1eb0: 69 66 20 7b 21 5b 73 71 6c 69 74 65 33 20 2d 68  if {![sqlite3 -h
1ec0: 61 73 2d 63 6f 64 65 63 5d 20 26 26 20 24 73 71  as-codec] && $sq
1ed0: 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 28 69 6e 74  lite_options(int
1ee0: 65 67 72 69 74 79 63 6b 29 7d 20 7b 0a 20 20 20  egrityck)} {.   
1ef0: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
1f00: 33 2e 32 20 7b 0a 20 20 20 20 20 20 64 62 20 65  3.2 {.      db e
1f10: 76 61 6c 20 7b 53 45 4c 45 43 54 20 72 6f 6f 74  val {SELECT root
1f20: 70 61 67 65 20 46 52 4f 4d 20 73 71 6c 69 74 65  page FROM sqlite
1f30: 5f 6d 61 73 74 65 72 20 57 48 45 52 45 20 6e 61  _master WHERE na
1f40: 6d 65 3d 27 69 32 27 7d 20 62 72 65 61 6b 0a 20  me='i2'} break. 
1f50: 20 20 20 20 20 73 65 74 20 70 67 73 7a 20 5b 64       set pgsz [d
1f60: 62 20 65 76 61 6c 20 7b 50 52 41 47 4d 41 20 70  b eval {PRAGMA p
1f70: 61 67 65 5f 73 69 7a 65 7d 5d 0a 20 20 20 20 20  age_size}].     
1f80: 20 23 20 6f 76 65 72 77 72 69 74 65 20 74 68 65   # overwrite the
1f90: 20 68 65 61 64 65 72 20 6f 6e 20 74 68 65 20 72   header on the r
1fa0: 6f 6f 74 70 61 67 65 20 6f 66 20 74 68 65 20 69  ootpage of the i
1fb0: 6e 64 65 78 20 69 6e 20 6f 72 64 65 72 20 74 6f  ndex in order to
1fc0: 0a 20 20 20 20 20 20 23 20 6d 61 6b 65 20 74 68  .      # make th
1fd0: 65 20 69 6e 64 65 78 20 61 70 70 65 61 72 20 74  e index appear t
1fe0: 6f 20 62 65 20 65 6d 70 74 79 2e 0a 20 20 20 20  o be empty..    
1ff0: 20 20 23 0a 20 20 20 20 20 20 73 65 74 20 6f 66    #.      set of
2000: 66 73 65 74 20 5b 65 78 70 72 20 7b 24 70 67 73  fset [expr {$pgs
2010: 7a 2a 28 24 72 6f 6f 74 70 61 67 65 2d 31 29 7d  z*($rootpage-1)}
2020: 5d 0a 20 20 20 20 20 20 68 65 78 69 6f 5f 77 72  ].      hexio_wr
2030: 69 74 65 20 74 65 73 74 2e 64 62 20 24 6f 66 66  ite test.db $off
2040: 73 65 74 20 30 61 30 30 30 30 30 30 30 30 30 34  set 0a0000000004
2050: 30 30 30 30 30 30 30 30 30 30 0a 20 20 20 20 20  0000000000.     
2060: 20 64 62 20 63 6c 6f 73 65 0a 20 20 20 20 20 20   db close.      
2070: 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e  sqlite3 db test.
2080: 64 62 0a 20 20 20 20 20 20 65 78 65 63 73 71 6c  db.      execsql
2090: 20 7b 50 52 41 47 4d 41 20 69 6e 74 65 67 72 69   {PRAGMA integri
20a0: 74 79 5f 63 68 65 63 6b 7d 0a 20 20 20 20 7d 20  ty_check}.    } 
20b0: 7b 7b 72 6f 77 20 31 20 6d 69 73 73 69 6e 67 20  {{row 1 missing 
20c0: 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b  from index i2} {
20d0: 72 6f 77 20 32 20 6d 69 73 73 69 6e 67 20 66 72  row 2 missing fr
20e0: 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b 77 72  om index i2} {wr
20f0: 6f 6e 67 20 23 20 6f 66 20 65 6e 74 72 69 65 73  ong # of entries
2100: 20 69 6e 20 69 6e 64 65 78 20 69 32 7d 7d 0a 20   in index i2}}. 
2110: 20 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d     do_test pragm
2120: 61 2d 33 2e 33 20 7b 0a 20 20 20 20 20 20 65 78  a-3.3 {.      ex
2130: 65 63 73 71 6c 20 7b 50 52 41 47 4d 41 20 69 6e  ecsql {PRAGMA in
2140: 74 65 67 72 69 74 79 5f 63 68 65 63 6b 3d 31 7d  tegrity_check=1}
2150: 0a 20 20 20 20 7d 20 7b 7b 72 6f 77 20 31 20 6d  .    } {{row 1 m
2160: 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65  issing from inde
2170: 78 20 69 32 7d 7d 0a 20 20 20 20 64 6f 5f 74 65  x i2}}.    do_te
2180: 73 74 20 70 72 61 67 6d 61 2d 33 2e 34 20 7b 0a  st pragma-3.4 {.
2190: 20 20 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a        execsql {.
21a0: 20 20 20 20 20 20 20 20 41 54 54 41 43 48 20 44          ATTACH D
21b0: 41 54 41 42 41 53 45 20 27 74 65 73 74 2e 64 62  ATABASE 'test.db
21c0: 27 20 41 53 20 74 32 3b 0a 20 20 20 20 20 20 20  ' AS t2;.       
21d0: 20 50 52 41 47 4d 41 20 69 6e 74 65 67 72 69 74   PRAGMA integrit
21e0: 79 5f 63 68 65 63 6b 0a 20 20 20 20 20 20 7d 0a  y_check.      }.
21f0: 20 20 20 20 7d 20 7b 7b 72 6f 77 20 31 20 6d 69      } {{row 1 mi
2200: 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78  ssing from index
2210: 20 69 32 7d 20 7b 72 6f 77 20 32 20 6d 69 73 73   i2} {row 2 miss
2220: 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69  ing from index i
2230: 32 7d 20 7b 77 72 6f 6e 67 20 23 20 6f 66 20 65  2} {wrong # of e
2240: 6e 74 72 69 65 73 20 69 6e 20 69 6e 64 65 78 20  ntries in index 
2250: 69 32 7d 20 7b 72 6f 77 20 31 20 6d 69 73 73 69  i2} {row 1 missi
2260: 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32  ng from index i2
2270: 7d 20 7b 72 6f 77 20 32 20 6d 69 73 73 69 6e 67  } {row 2 missing
2280: 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20   from index i2} 
2290: 7b 77 72 6f 6e 67 20 23 20 6f 66 20 65 6e 74 72  {wrong # of entr
22a0: 69 65 73 20 69 6e 20 69 6e 64 65 78 20 69 32 7d  ies in index i2}
22b0: 7d 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 70 72  }.    do_test pr
22c0: 61 67 6d 61 2d 33 2e 35 20 7b 0a 20 20 20 20 20  agma-3.5 {.     
22d0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20   execsql {.     
22e0: 20 20 20 50 52 41 47 4d 41 20 69 6e 74 65 67 72     PRAGMA integr
22f0: 69 74 79 5f 63 68 65 63 6b 3d 34 0a 20 20 20 20  ity_check=4.    
2300: 20 20 7d 0a 20 20 20 20 7d 20 7b 7b 72 6f 77 20    }.    } {{row 
2310: 31 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69  1 missing from i
2320: 6e 64 65 78 20 69 32 7d 20 7b 72 6f 77 20 32 20  ndex i2} {row 2 
2330: 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64  missing from ind
2340: 65 78 20 69 32 7d 20 7b 77 72 6f 6e 67 20 23 20  ex i2} {wrong # 
2350: 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 69 6e  of entries in in
2360: 64 65 78 20 69 32 7d 20 7b 72 6f 77 20 31 20 6d  dex i2} {row 1 m
2370: 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65  issing from inde
2380: 78 20 69 32 7d 7d 0a 20 20 20 20 64 6f 5f 74 65  x i2}}.    do_te
2390: 73 74 20 70 72 61 67 6d 61 2d 33 2e 36 20 7b 0a  st pragma-3.6 {.
23a0: 20 20 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a        execsql {.
23b0: 20 20 20 20 20 20 20 20 50 52 41 47 4d 41 20 69          PRAGMA i
23c0: 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 3d 78  ntegrity_check=x
23d0: 79 7a 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  yz.      }.    }
23e0: 20 7b 7b 72 6f 77 20 31 20 6d 69 73 73 69 6e 67   {{row 1 missing
23f0: 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20   from index i2} 
2400: 7b 72 6f 77 20 32 20 6d 69 73 73 69 6e 67 20 66  {row 2 missing f
2410: 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b 77  rom index i2} {w
2420: 72 6f 6e 67 20 23 20 6f 66 20 65 6e 74 72 69 65  rong # of entrie
2430: 73 20 69 6e 20 69 6e 64 65 78 20 69 32 7d 20 7b  s in index i2} {
2440: 72 6f 77 20 31 20 6d 69 73 73 69 6e 67 20 66 72  row 1 missing fr
2450: 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b 72 6f  om index i2} {ro
2460: 77 20 32 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d  w 2 missing from
2470: 20 69 6e 64 65 78 20 69 32 7d 20 7b 77 72 6f 6e   index i2} {wron
2480: 67 20 23 20 6f 66 20 65 6e 74 72 69 65 73 20 69  g # of entries i
2490: 6e 20 69 6e 64 65 78 20 69 32 7d 7d 0a 20 20 20  n index i2}}.   
24a0: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
24b0: 33 2e 37 20 7b 0a 20 20 20 20 20 20 65 78 65 63  3.7 {.      exec
24c0: 73 71 6c 20 7b 0a 20 20 20 20 20 20 20 20 50 52  sql {.        PR
24d0: 41 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63  AGMA integrity_c
24e0: 68 65 63 6b 3d 30 0a 20 20 20 20 20 20 7d 0a 20  heck=0.      }. 
24f0: 20 20 20 7d 20 7b 7b 72 6f 77 20 31 20 6d 69 73     } {{row 1 mis
2500: 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20  sing from index 
2510: 69 32 7d 20 7b 72 6f 77 20 32 20 6d 69 73 73 69  i2} {row 2 missi
2520: 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32  ng from index i2
2530: 7d 20 7b 77 72 6f 6e 67 20 23 20 6f 66 20 65 6e  } {wrong # of en
2540: 74 72 69 65 73 20 69 6e 20 69 6e 64 65 78 20 69  tries in index i
2550: 32 7d 20 7b 72 6f 77 20 31 20 6d 69 73 73 69 6e  2} {row 1 missin
2560: 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d  g from index i2}
2570: 20 7b 72 6f 77 20 32 20 6d 69 73 73 69 6e 67 20   {row 2 missing 
2580: 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b  from index i2} {
2590: 77 72 6f 6e 67 20 23 20 6f 66 20 65 6e 74 72 69  wrong # of entri
25a0: 65 73 20 69 6e 20 69 6e 64 65 78 20 69 32 7d 7d  es in index i2}}
25b0: 0a 20 20 0a 20 20 20 20 23 20 41 64 64 20 61 64  .  .    # Add ad
25c0: 64 69 74 69 6f 6e 61 6c 20 63 6f 72 72 75 70 74  ditional corrupt
25d0: 69 6f 6e 20 62 79 20 61 70 70 65 6e 64 69 6e 67  ion by appending
25e0: 20 75 6e 75 73 65 64 20 70 61 67 65 73 20 74 6f   unused pages to
25f0: 20 74 68 65 20 65 6e 64 20 6f 66 0a 20 20 20 20   the end of.    
2600: 23 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  # the database f
2610: 69 6c 65 20 74 65 73 74 65 72 72 2e 64 62 0a 20  ile testerr.db. 
2620: 20 20 20 23 0a 20 20 20 20 64 6f 5f 74 65 73 74     #.    do_test
2630: 20 70 72 61 67 6d 61 2d 33 2e 38 20 7b 0a 20 20   pragma-3.8 {.  
2640: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 44 45 54      execsql {DET
2650: 41 43 48 20 74 32 7d 0a 20 20 20 20 20 20 66 6f  ACH t2}.      fo
2660: 72 63 65 64 65 6c 65 74 65 20 74 65 73 74 65 72  rcedelete tester
2670: 72 2e 64 62 20 74 65 73 74 65 72 72 2e 64 62 2d  r.db testerr.db-
2680: 6a 6f 75 72 6e 61 6c 0a 20 20 20 20 20 20 73 65  journal.      se
2690: 74 20 6f 75 74 20 5b 6f 70 65 6e 20 74 65 73 74  t out [open test
26a0: 65 72 72 2e 64 62 20 77 5d 0a 20 20 20 20 20 20  err.db w].      
26b0: 66 63 6f 6e 66 69 67 75 72 65 20 24 6f 75 74 20  fconfigure $out 
26c0: 2d 74 72 61 6e 73 6c 61 74 69 6f 6e 20 62 69 6e  -translation bin
26d0: 61 72 79 0a 20 20 20 20 20 20 73 65 74 20 69 6e  ary.      set in
26e0: 20 5b 6f 70 65 6e 20 74 65 73 74 2e 64 62 20 72   [open test.db r
26f0: 5d 0a 20 20 20 20 20 20 66 63 6f 6e 66 69 67 75  ].      fconfigu
2700: 72 65 20 24 69 6e 20 2d 74 72 61 6e 73 6c 61 74  re $in -translat
2710: 69 6f 6e 20 62 69 6e 61 72 79 0a 20 20 20 20 20  ion binary.     
2720: 20 70 75 74 73 20 2d 6e 6f 6e 65 77 6c 69 6e 65   puts -nonewline
2730: 20 24 6f 75 74 20 5b 72 65 61 64 20 24 69 6e 5d   $out [read $in]
2740: 0a 20 20 20 20 20 20 73 65 65 6b 20 24 69 6e 20  .      seek $in 
2750: 30 0a 20 20 20 20 20 20 70 75 74 73 20 2d 6e 6f  0.      puts -no
2760: 6e 65 77 6c 69 6e 65 20 24 6f 75 74 20 5b 72 65  newline $out [re
2770: 61 64 20 24 69 6e 5d 0a 20 20 20 20 20 20 63 6c  ad $in].      cl
2780: 6f 73 65 20 24 69 6e 0a 20 20 20 20 20 20 63 6c  ose $in.      cl
2790: 6f 73 65 20 24 6f 75 74 0a 20 20 20 20 20 20 68  ose $out.      h
27a0: 65 78 69 6f 5f 77 72 69 74 65 20 74 65 73 74 65  exio_write teste
27b0: 72 72 2e 64 62 20 32 38 20 30 30 30 30 30 30 30  rr.db 28 0000000
27c0: 30 0a 20 20 20 20 20 20 65 78 65 63 73 71 6c 20  0.      execsql 
27d0: 7b 52 45 49 4e 44 45 58 20 74 32 7d 0a 20 20 20  {REINDEX t2}.   
27e0: 20 20 20 65 78 65 63 73 71 6c 20 7b 50 52 41 47     execsql {PRAG
27f0: 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65  MA integrity_che
2800: 63 6b 7d 0a 20 20 20 20 7d 20 7b 6f 6b 7d 0a 20  ck}.    } {ok}. 
2810: 20 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d     do_test pragm
2820: 61 2d 33 2e 38 2e 31 20 7b 0a 20 20 20 20 20 20  a-3.8.1 {.      
2830: 65 78 65 63 73 71 6c 20 7b 50 52 41 47 4d 41 20  execsql {PRAGMA 
2840: 71 75 69 63 6b 5f 63 68 65 63 6b 7d 0a 20 20 20  quick_check}.   
2850: 20 7d 20 7b 6f 6b 7d 0a 20 20 20 20 64 6f 5f 74   } {ok}.    do_t
2860: 65 73 74 20 70 72 61 67 6d 61 2d 33 2e 38 2e 32  est pragma-3.8.2
2870: 20 7b 0a 20 20 20 20 20 20 65 78 65 63 73 71 6c   {.      execsql
2880: 20 7b 50 52 41 47 4d 41 20 51 55 49 43 4b 5f 43   {PRAGMA QUICK_C
2890: 48 45 43 4b 7d 0a 20 20 20 20 7d 20 7b 6f 6b 7d  HECK}.    } {ok}
28a0: 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 70 72 61  .    do_test pra
28b0: 67 6d 61 2d 33 2e 39 20 7b 0a 20 20 20 20 20 20  gma-3.9 {.      
28c0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
28d0: 20 20 41 54 54 41 43 48 20 27 74 65 73 74 65 72    ATTACH 'tester
28e0: 72 2e 64 62 27 20 41 53 20 74 32 3b 0a 20 20 20  r.db' AS t2;.   
28f0: 20 20 20 20 20 50 52 41 47 4d 41 20 69 6e 74 65       PRAGMA inte
2900: 67 72 69 74 79 5f 63 68 65 63 6b 0a 20 20 20 20  grity_check.    
2910: 20 20 7d 0a 20 20 20 20 7d 20 7b 7b 2a 2a 2a 20    }.    } {{*** 
2920: 69 6e 20 64 61 74 61 62 61 73 65 20 74 32 20 2a  in database t2 *
2930: 2a 2a 0a 50 61 67 65 20 34 20 69 73 20 6e 65 76  **.Page 4 is nev
2940: 65 72 20 75 73 65 64 0a 50 61 67 65 20 35 20 69  er used.Page 5 i
2950: 73 20 6e 65 76 65 72 20 75 73 65 64 0a 50 61 67  s never used.Pag
2960: 65 20 36 20 69 73 20 6e 65 76 65 72 20 75 73 65  e 6 is never use
2970: 64 7d 20 7b 72 6f 77 20 31 20 6d 69 73 73 69 6e  d} {row 1 missin
2980: 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d  g from index i2}
2990: 20 7b 72 6f 77 20 32 20 6d 69 73 73 69 6e 67 20   {row 2 missing 
29a0: 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b  from index i2} {
29b0: 77 72 6f 6e 67 20 23 20 6f 66 20 65 6e 74 72 69  wrong # of entri
29c0: 65 73 20 69 6e 20 69 6e 64 65 78 20 69 32 7d 7d  es in index i2}}
29d0: 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 70 72 61  .    do_test pra
29e0: 67 6d 61 2d 33 2e 31 30 20 7b 0a 20 20 20 20 20  gma-3.10 {.     
29f0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20   execsql {.     
2a00: 20 20 20 50 52 41 47 4d 41 20 69 6e 74 65 67 72     PRAGMA integr
2a10: 69 74 79 5f 63 68 65 63 6b 3d 31 0a 20 20 20 20  ity_check=1.    
2a20: 20 20 7d 0a 20 20 20 20 7d 20 7b 7b 2a 2a 2a 20    }.    } {{*** 
2a30: 69 6e 20 64 61 74 61 62 61 73 65 20 74 32 20 2a  in database t2 *
2a40: 2a 2a 0a 50 61 67 65 20 34 20 69 73 20 6e 65 76  **.Page 4 is nev
2a50: 65 72 20 75 73 65 64 7d 7d 0a 20 20 20 20 64 6f  er used}}.    do
2a60: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 33 2e 31  _test pragma-3.1
2a70: 31 20 7b 0a 20 20 20 20 20 20 65 78 65 63 73 71  1 {.      execsq
2a80: 6c 20 7b 0a 20 20 20 20 20 20 20 20 50 52 41 47  l {.        PRAG
2a90: 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65  MA integrity_che
2aa0: 63 6b 3d 35 0a 20 20 20 20 20 20 7d 0a 20 20 20  ck=5.      }.   
2ab0: 20 7d 20 7b 7b 2a 2a 2a 20 69 6e 20 64 61 74 61   } {{*** in data
2ac0: 62 61 73 65 20 74 32 20 2a 2a 2a 0a 50 61 67 65  base t2 ***.Page
2ad0: 20 34 20 69 73 20 6e 65 76 65 72 20 75 73 65 64   4 is never used
2ae0: 0a 50 61 67 65 20 35 20 69 73 20 6e 65 76 65 72  .Page 5 is never
2af0: 20 75 73 65 64 0a 50 61 67 65 20 36 20 69 73 20   used.Page 6 is 
2b00: 6e 65 76 65 72 20 75 73 65 64 7d 20 7b 72 6f 77  never used} {row
2b10: 20 31 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20   1 missing from 
2b20: 69 6e 64 65 78 20 69 32 7d 20 7b 72 6f 77 20 32  index i2} {row 2
2b30: 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e   missing from in
2b40: 64 65 78 20 69 32 7d 7d 0a 20 20 20 20 64 6f 5f  dex i2}}.    do_
2b50: 74 65 73 74 20 70 72 61 67 6d 61 2d 33 2e 31 32  test pragma-3.12
2b60: 20 7b 0a 20 20 20 20 20 20 65 78 65 63 73 71 6c   {.      execsql
2b70: 20 7b 0a 20 20 20 20 20 20 20 20 50 52 41 47 4d   {.        PRAGM
2b80: 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63  A integrity_chec
2b90: 6b 3d 34 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  k=4.      }.    
2ba0: 7d 20 7b 7b 2a 2a 2a 20 69 6e 20 64 61 74 61 62  } {{*** in datab
2bb0: 61 73 65 20 74 32 20 2a 2a 2a 0a 50 61 67 65 20  ase t2 ***.Page 
2bc0: 34 20 69 73 20 6e 65 76 65 72 20 75 73 65 64 0a  4 is never used.
2bd0: 50 61 67 65 20 35 20 69 73 20 6e 65 76 65 72 20  Page 5 is never 
2be0: 75 73 65 64 0a 50 61 67 65 20 36 20 69 73 20 6e  used.Page 6 is n
2bf0: 65 76 65 72 20 75 73 65 64 7d 20 7b 72 6f 77 20  ever used} {row 
2c00: 31 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69  1 missing from i
2c10: 6e 64 65 78 20 69 32 7d 7d 0a 20 20 20 20 64 6f  ndex i2}}.    do
2c20: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 33 2e 31  _test pragma-3.1
2c30: 33 20 7b 0a 20 20 20 20 20 20 65 78 65 63 73 71  3 {.      execsq
2c40: 6c 20 7b 0a 20 20 20 20 20 20 20 20 50 52 41 47  l {.        PRAG
2c50: 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65  MA integrity_che
2c60: 63 6b 3d 33 0a 20 20 20 20 20 20 7d 0a 20 20 20  ck=3.      }.   
2c70: 20 7d 20 7b 7b 2a 2a 2a 20 69 6e 20 64 61 74 61   } {{*** in data
2c80: 62 61 73 65 20 74 32 20 2a 2a 2a 0a 50 61 67 65  base t2 ***.Page
2c90: 20 34 20 69 73 20 6e 65 76 65 72 20 75 73 65 64   4 is never used
2ca0: 0a 50 61 67 65 20 35 20 69 73 20 6e 65 76 65 72  .Page 5 is never
2cb0: 20 75 73 65 64 0a 50 61 67 65 20 36 20 69 73 20   used.Page 6 is 
2cc0: 6e 65 76 65 72 20 75 73 65 64 7d 7d 0a 20 20 20  never used}}.   
2cd0: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
2ce0: 33 2e 31 34 20 7b 0a 20 20 20 20 20 20 65 78 65  3.14 {.      exe
2cf0: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 20 20 50  csql {.        P
2d00: 52 41 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f  RAGMA integrity_
2d10: 63 68 65 63 6b 28 32 29 0a 20 20 20 20 20 20 7d  check(2).      }
2d20: 0a 20 20 20 20 7d 20 7b 7b 2a 2a 2a 20 69 6e 20  .    } {{*** in 
2d30: 64 61 74 61 62 61 73 65 20 74 32 20 2a 2a 2a 0a  database t2 ***.
2d40: 50 61 67 65 20 34 20 69 73 20 6e 65 76 65 72 20  Page 4 is never 
2d50: 75 73 65 64 0a 50 61 67 65 20 35 20 69 73 20 6e  used.Page 5 is n
2d60: 65 76 65 72 20 75 73 65 64 7d 7d 0a 20 20 20 20  ever used}}.    
2d70: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 33  do_test pragma-3
2d80: 2e 31 35 20 7b 0a 20 20 20 20 20 20 65 78 65 63  .15 {.      exec
2d90: 73 71 6c 20 7b 0a 20 20 20 20 20 20 20 20 41 54  sql {.        AT
2da0: 54 41 43 48 20 27 74 65 73 74 65 72 72 2e 64 62  TACH 'testerr.db
2db0: 27 20 41 53 20 74 33 3b 0a 20 20 20 20 20 20 20  ' AS t3;.       
2dc0: 20 50 52 41 47 4d 41 20 69 6e 74 65 67 72 69 74   PRAGMA integrit
2dd0: 79 5f 63 68 65 63 6b 0a 20 20 20 20 20 20 7d 0a  y_check.      }.
2de0: 20 20 20 20 7d 20 7b 7b 2a 2a 2a 20 69 6e 20 64      } {{*** in d
2df0: 61 74 61 62 61 73 65 20 74 32 20 2a 2a 2a 0a 50  atabase t2 ***.P
2e00: 61 67 65 20 34 20 69 73 20 6e 65 76 65 72 20 75  age 4 is never u
2e10: 73 65 64 0a 50 61 67 65 20 35 20 69 73 20 6e 65  sed.Page 5 is ne
2e20: 76 65 72 20 75 73 65 64 0a 50 61 67 65 20 36 20  ver used.Page 6 
2e30: 69 73 20 6e 65 76 65 72 20 75 73 65 64 7d 20 7b  is never used} {
2e40: 72 6f 77 20 31 20 6d 69 73 73 69 6e 67 20 66 72  row 1 missing fr
2e50: 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b 72 6f  om index i2} {ro
2e60: 77 20 32 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d  w 2 missing from
2e70: 20 69 6e 64 65 78 20 69 32 7d 20 7b 77 72 6f 6e   index i2} {wron
2e80: 67 20 23 20 6f 66 20 65 6e 74 72 69 65 73 20 69  g # of entries i
2e90: 6e 20 69 6e 64 65 78 20 69 32 7d 20 7b 2a 2a 2a  n index i2} {***
2ea0: 20 69 6e 20 64 61 74 61 62 61 73 65 20 74 33 20   in database t3 
2eb0: 2a 2a 2a 0a 50 61 67 65 20 34 20 69 73 20 6e 65  ***.Page 4 is ne
2ec0: 76 65 72 20 75 73 65 64 0a 50 61 67 65 20 35 20  ver used.Page 5 
2ed0: 69 73 20 6e 65 76 65 72 20 75 73 65 64 0a 50 61  is never used.Pa
2ee0: 67 65 20 36 20 69 73 20 6e 65 76 65 72 20 75 73  ge 6 is never us
2ef0: 65 64 7d 20 7b 72 6f 77 20 31 20 6d 69 73 73 69  ed} {row 1 missi
2f00: 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32  ng from index i2
2f10: 7d 20 7b 72 6f 77 20 32 20 6d 69 73 73 69 6e 67  } {row 2 missing
2f20: 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20   from index i2} 
2f30: 7b 77 72 6f 6e 67 20 23 20 6f 66 20 65 6e 74 72  {wrong # of entr
2f40: 69 65 73 20 69 6e 20 69 6e 64 65 78 20 69 32 7d  ies in index i2}
2f50: 7d 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 70 72  }.    do_test pr
2f60: 61 67 6d 61 2d 33 2e 31 36 20 7b 0a 20 20 20 20  agma-3.16 {.    
2f70: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
2f80: 20 20 20 20 50 52 41 47 4d 41 20 69 6e 74 65 67      PRAGMA integ
2f90: 72 69 74 79 5f 63 68 65 63 6b 28 31 30 29 0a 20  rity_check(10). 
2fa0: 20 20 20 20 20 7d 0a 20 20 20 20 7d 20 7b 7b 2a       }.    } {{*
2fb0: 2a 2a 20 69 6e 20 64 61 74 61 62 61 73 65 20 74  ** in database t
2fc0: 32 20 2a 2a 2a 0a 50 61 67 65 20 34 20 69 73 20  2 ***.Page 4 is 
2fd0: 6e 65 76 65 72 20 75 73 65 64 0a 50 61 67 65 20  never used.Page 
2fe0: 35 20 69 73 20 6e 65 76 65 72 20 75 73 65 64 0a  5 is never used.
2ff0: 50 61 67 65 20 36 20 69 73 20 6e 65 76 65 72 20  Page 6 is never 
3000: 75 73 65 64 7d 20 7b 72 6f 77 20 31 20 6d 69 73  used} {row 1 mis
3010: 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20  sing from index 
3020: 69 32 7d 20 7b 72 6f 77 20 32 20 6d 69 73 73 69  i2} {row 2 missi
3030: 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32  ng from index i2
3040: 7d 20 7b 77 72 6f 6e 67 20 23 20 6f 66 20 65 6e  } {wrong # of en
3050: 74 72 69 65 73 20 69 6e 20 69 6e 64 65 78 20 69  tries in index i
3060: 32 7d 20 7b 2a 2a 2a 20 69 6e 20 64 61 74 61 62  2} {*** in datab
3070: 61 73 65 20 74 33 20 2a 2a 2a 0a 50 61 67 65 20  ase t3 ***.Page 
3080: 34 20 69 73 20 6e 65 76 65 72 20 75 73 65 64 0a  4 is never used.
3090: 50 61 67 65 20 35 20 69 73 20 6e 65 76 65 72 20  Page 5 is never 
30a0: 75 73 65 64 0a 50 61 67 65 20 36 20 69 73 20 6e  used.Page 6 is n
30b0: 65 76 65 72 20 75 73 65 64 7d 20 7b 72 6f 77 20  ever used} {row 
30c0: 31 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69  1 missing from i
30d0: 6e 64 65 78 20 69 32 7d 7d 0a 20 20 20 20 64 6f  ndex i2}}.    do
30e0: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 33 2e 31  _test pragma-3.1
30f0: 37 20 7b 0a 20 20 20 20 20 20 65 78 65 63 73 71  7 {.      execsq
3100: 6c 20 7b 0a 20 20 20 20 20 20 20 20 50 52 41 47  l {.        PRAG
3110: 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65  MA integrity_che
3120: 63 6b 3d 38 0a 20 20 20 20 20 20 7d 0a 20 20 20  ck=8.      }.   
3130: 20 7d 20 7b 7b 2a 2a 2a 20 69 6e 20 64 61 74 61   } {{*** in data
3140: 62 61 73 65 20 74 32 20 2a 2a 2a 0a 50 61 67 65  base t2 ***.Page
3150: 20 34 20 69 73 20 6e 65 76 65 72 20 75 73 65 64   4 is never used
3160: 0a 50 61 67 65 20 35 20 69 73 20 6e 65 76 65 72  .Page 5 is never
3170: 20 75 73 65 64 0a 50 61 67 65 20 36 20 69 73 20   used.Page 6 is 
3180: 6e 65 76 65 72 20 75 73 65 64 7d 20 7b 72 6f 77  never used} {row
3190: 20 31 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20   1 missing from 
31a0: 69 6e 64 65 78 20 69 32 7d 20 7b 72 6f 77 20 32  index i2} {row 2
31b0: 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e   missing from in
31c0: 64 65 78 20 69 32 7d 20 7b 77 72 6f 6e 67 20 23  dex i2} {wrong #
31d0: 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 69   of entries in i
31e0: 6e 64 65 78 20 69 32 7d 20 7b 2a 2a 2a 20 69 6e  ndex i2} {*** in
31f0: 20 64 61 74 61 62 61 73 65 20 74 33 20 2a 2a 2a   database t3 ***
3200: 0a 50 61 67 65 20 34 20 69 73 20 6e 65 76 65 72  .Page 4 is never
3210: 20 75 73 65 64 0a 50 61 67 65 20 35 20 69 73 20   used.Page 5 is 
3220: 6e 65 76 65 72 20 75 73 65 64 7d 7d 0a 20 20 20  never used}}.   
3230: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
3240: 33 2e 31 38 20 7b 0a 20 20 20 20 20 20 65 78 65  3.18 {.      exe
3250: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 20 20 50  csql {.        P
3260: 52 41 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f  RAGMA integrity_
3270: 63 68 65 63 6b 3d 34 0a 20 20 20 20 20 20 7d 0a  check=4.      }.
3280: 20 20 20 20 7d 20 7b 7b 2a 2a 2a 20 69 6e 20 64      } {{*** in d
3290: 61 74 61 62 61 73 65 20 74 32 20 2a 2a 2a 0a 50  atabase t2 ***.P
32a0: 61 67 65 20 34 20 69 73 20 6e 65 76 65 72 20 75  age 4 is never u
32b0: 73 65 64 0a 50 61 67 65 20 35 20 69 73 20 6e 65  sed.Page 5 is ne
32c0: 76 65 72 20 75 73 65 64 0a 50 61 67 65 20 36 20  ver used.Page 6 
32d0: 69 73 20 6e 65 76 65 72 20 75 73 65 64 7d 20 7b  is never used} {
32e0: 72 6f 77 20 31 20 6d 69 73 73 69 6e 67 20 66 72  row 1 missing fr
32f0: 6f 6d 20 69 6e 64 65 78 20 69 32 7d 7d 0a 20 20  om index i2}}.  
3300: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67  }.  do_test prag
3310: 6d 61 2d 33 2e 31 39 20 7b 0a 20 20 20 20 63 61  ma-3.19 {.    ca
3320: 74 63 68 20 7b 64 62 20 63 6c 6f 73 65 7d 0a 20  tch {db close}. 
3330: 20 20 20 66 6f 72 63 65 64 65 6c 65 74 65 20 74     forcedelete t
3340: 65 73 74 2e 64 62 20 74 65 73 74 2e 64 62 2d 6a  est.db test.db-j
3350: 6f 75 72 6e 61 6c 0a 20 20 20 20 73 71 6c 69 74  ournal.    sqlit
3360: 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20  e3 db test.db.  
3370: 20 20 64 62 20 65 76 61 6c 20 7b 50 52 41 47 4d    db eval {PRAGM
3380: 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63  A integrity_chec
3390: 6b 7d 0a 20 20 7d 20 7b 6f 6b 7d 0a 7d 0a 0a 23  k}.  } {ok}.}..#
33a0: 20 56 65 72 69 66 79 20 74 68 61 74 20 50 52 41   Verify that PRA
33b0: 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68  GMA integrity_ch
33c0: 65 63 6b 20 63 61 74 63 68 65 73 20 55 4e 49 51  eck catches UNIQ
33d0: 55 45 20 61 6e 64 20 4e 4f 54 20 4e 55 4c 4c 0a  UE and NOT NULL.
33e0: 23 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f  # constraint vio
33f0: 6c 61 74 69 6f 6e 73 2e 0a 23 0a 64 6f 5f 65 78  lations..#.do_ex
3400: 65 63 73 71 6c 5f 74 65 73 74 20 70 72 61 67 6d  ecsql_test pragm
3410: 61 2d 33 2e 32 30 20 7b 0a 20 20 43 52 45 41 54  a-3.20 {.  CREAT
3420: 45 20 54 41 42 4c 45 20 74 31 28 61 2c 62 29 3b  E TABLE t1(a,b);
3430: 0a 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20  .  CREATE INDEX 
3440: 74 31 61 20 4f 4e 20 74 31 28 61 29 3b 0a 20 20  t1a ON t1(a);.  
3450: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56  INSERT INTO t1 V
3460: 41 4c 55 45 53 28 31 2c 31 29 2c 28 32 2c 32 29  ALUES(1,1),(2,2)
3470: 2c 28 33 2c 33 29 2c 28 32 2c 34 29 2c 28 4e 55  ,(3,3),(2,4),(NU
3480: 4c 4c 2c 35 29 2c 28 4e 55 4c 4c 2c 36 29 3b 0a  LL,5),(NULL,6);.
3490: 20 20 50 52 41 47 4d 41 20 77 72 69 74 61 62 6c    PRAGMA writabl
34a0: 65 5f 73 63 68 65 6d 61 3d 4f 4e 3b 0a 20 20 55  e_schema=ON;.  U
34b0: 50 44 41 54 45 20 73 71 6c 69 74 65 5f 6d 61 73  PDATE sqlite_mas
34c0: 74 65 72 20 53 45 54 20 73 71 6c 3d 27 43 52 45  ter SET sql='CRE
34d0: 41 54 45 20 55 4e 49 51 55 45 20 49 4e 44 45 58  ATE UNIQUE INDEX
34e0: 20 74 31 61 20 4f 4e 20 74 31 28 61 29 27 0a 20   t1a ON t1(a)'. 
34f0: 20 20 57 48 45 52 45 20 6e 61 6d 65 3d 27 74 31    WHERE name='t1
3500: 61 27 3b 0a 20 20 55 50 44 41 54 45 20 73 71 6c  a';.  UPDATE sql
3510: 69 74 65 5f 6d 61 73 74 65 72 20 53 45 54 20 73  ite_master SET s
3520: 71 6c 3d 27 43 52 45 41 54 45 20 54 41 42 4c 45  ql='CREATE TABLE
3530: 20 74 31 28 61 20 4e 4f 54 20 4e 55 4c 4c 2c 62   t1(a NOT NULL,b
3540: 29 27 0a 20 20 20 57 48 45 52 45 20 6e 61 6d 65  )'.   WHERE name
3550: 3d 27 74 31 27 3b 0a 20 20 50 52 41 47 4d 41 20  ='t1';.  PRAGMA 
3560: 77 72 69 74 61 62 6c 65 5f 73 63 68 65 6d 61 3d  writable_schema=
3570: 4f 46 46 3b 0a 20 20 41 4c 54 45 52 20 54 41 42  OFF;.  ALTER TAB
3580: 4c 45 20 74 31 20 52 45 4e 41 4d 45 20 54 4f 20  LE t1 RENAME TO 
3590: 74 31 78 3b 0a 20 20 50 52 41 47 4d 41 20 69 6e  t1x;.  PRAGMA in
35a0: 74 65 67 72 69 74 79 5f 63 68 65 63 6b 3b 0a 7d  tegrity_check;.}
35b0: 20 7b 7b 6e 6f 6e 2d 75 6e 69 71 75 65 20 65 6e   {{non-unique en
35c0: 74 72 79 20 69 6e 20 69 6e 64 65 78 20 74 31 61  try in index t1a
35d0: 7d 20 7b 4e 55 4c 4c 20 76 61 6c 75 65 20 69 6e  } {NULL value in
35e0: 20 74 31 78 2e 61 7d 20 7b 6e 6f 6e 2d 75 6e 69   t1x.a} {non-uni
35f0: 71 75 65 20 65 6e 74 72 79 20 69 6e 20 69 6e 64  que entry in ind
3600: 65 78 20 74 31 61 7d 20 7b 4e 55 4c 4c 20 76 61  ex t1a} {NULL va
3610: 6c 75 65 20 69 6e 20 74 31 78 2e 61 7d 7d 0a 64  lue in t1x.a}}.d
3620: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 70  o_execsql_test p
3630: 72 61 67 6d 61 2d 33 2e 32 31 20 7b 0a 20 20 50  ragma-3.21 {.  P
3640: 52 41 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f  RAGMA integrity_
3650: 63 68 65 63 6b 28 33 29 3b 0a 7d 20 7b 7b 6e 6f  check(3);.} {{no
3660: 6e 2d 75 6e 69 71 75 65 20 65 6e 74 72 79 20 69  n-unique entry i
3670: 6e 20 69 6e 64 65 78 20 74 31 61 7d 20 7b 4e 55  n index t1a} {NU
3680: 4c 4c 20 76 61 6c 75 65 20 69 6e 20 74 31 78 2e  LL value in t1x.
3690: 61 7d 20 7b 6e 6f 6e 2d 75 6e 69 71 75 65 20 65  a} {non-unique e
36a0: 6e 74 72 79 20 69 6e 20 69 6e 64 65 78 20 74 31  ntry in index t1
36b0: 61 7d 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74  a}}.do_execsql_t
36c0: 65 73 74 20 70 72 61 67 6d 61 2d 33 2e 32 32 20  est pragma-3.22 
36d0: 7b 0a 20 20 50 52 41 47 4d 41 20 69 6e 74 65 67  {.  PRAGMA integ
36e0: 72 69 74 79 5f 63 68 65 63 6b 28 32 29 3b 0a 7d  rity_check(2);.}
36f0: 20 7b 7b 6e 6f 6e 2d 75 6e 69 71 75 65 20 65 6e   {{non-unique en
3700: 74 72 79 20 69 6e 20 69 6e 64 65 78 20 74 31 61  try in index t1a
3710: 7d 20 7b 4e 55 4c 4c 20 76 61 6c 75 65 20 69 6e  } {NULL value in
3720: 20 74 31 78 2e 61 7d 7d 0a 64 6f 5f 65 78 65 63   t1x.a}}.do_exec
3730: 73 71 6c 5f 74 65 73 74 20 70 72 61 67 6d 61 2d  sql_test pragma-
3740: 33 2e 32 33 20 7b 0a 20 20 50 52 41 47 4d 41 20  3.23 {.  PRAGMA 
3750: 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 28  integrity_check(
3760: 31 29 3b 0a 7d 20 7b 7b 6e 6f 6e 2d 75 6e 69 71  1);.} {{non-uniq
3770: 75 65 20 65 6e 74 72 79 20 69 6e 20 69 6e 64 65  ue entry in inde
3780: 78 20 74 31 61 7d 7d 0a 0a 23 20 50 52 41 47 4d  x t1a}}..# PRAGM
3790: 41 20 69 6e 74 65 67 72 69 74 79 20 63 68 65 63  A integrity chec
37a0: 6b 20 28 6f 72 20 6d 6f 72 65 20 73 70 65 63 69  k (or more speci
37b0: 66 69 63 61 6c 6c 79 20 74 68 65 20 73 71 6c 69  fically the sqli
37c0: 74 65 33 42 74 72 65 65 43 6f 75 6e 74 28 29 0a  te3BtreeCount().
37d0: 23 20 69 6e 74 65 72 66 61 63 65 29 20 75 73 65  # interface) use
37e0: 64 20 74 6f 20 6c 65 61 76 65 20 69 6e 64 65 78  d to leave index
37f0: 20 63 75 72 73 6f 72 73 20 69 6e 20 61 6e 20 69   cursors in an i
3800: 6e 63 6f 6e 73 69 73 74 65 6e 74 20 73 74 61 74  nconsistent stat
3810: 65 0a 23 20 77 68 69 63 68 20 63 6f 75 6c 64 20  e.# which could 
3820: 72 65 73 75 6c 74 20 69 6e 20 61 6e 20 61 73 73  result in an ass
3830: 65 72 74 69 6f 6e 20 66 61 75 6c 74 20 69 6e 20  ertion fault in 
3840: 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 28  sqlite3BtreeKey(
3850: 29 0a 23 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20  ).# called from 
3860: 73 61 76 65 43 75 72 73 6f 72 50 6f 73 69 74 69  saveCursorPositi
3870: 6f 6e 28 29 20 69 66 20 63 6f 6e 74 65 6e 74 20  on() if content 
3880: 69 73 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d 20  is removed from 
3890: 74 68 65 0a 23 20 69 6e 64 65 78 20 77 68 69 6c  the.# index whil
38a0: 65 20 74 68 65 20 69 6e 74 65 67 72 69 74 79 5f  e the integrity_
38b0: 63 68 65 63 6b 20 69 73 20 73 74 69 6c 6c 20 72  check is still r
38c0: 75 6e 6e 69 6e 67 2e 20 20 54 68 69 73 20 74 65  unning.  This te
38d0: 73 74 20 76 65 72 69 66 69 65 73 0a 23 20 74 68  st verifies.# th
38e0: 61 74 20 70 72 6f 62 6c 65 6d 20 68 61 73 20 62  at problem has b
38f0: 65 65 6e 20 66 69 78 65 64 2e 0a 23 0a 64 6f 5f  een fixed..#.do_
3900: 74 65 73 74 20 70 72 61 67 6d 61 2d 33 2e 33 30  test pragma-3.30
3910: 20 7b 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20 20   {.  db close.  
3920: 64 65 6c 65 74 65 5f 66 69 6c 65 20 74 65 73 74  delete_file test
3930: 2e 64 62 0a 20 20 73 71 6c 69 74 65 33 20 64 62  .db.  sqlite3 db
3940: 20 74 65 73 74 2e 64 62 0a 20 20 64 62 20 65 76   test.db.  db ev
3950: 61 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20  al {.    CREATE 
3960: 54 41 42 4c 45 20 74 31 28 61 2c 62 2c 63 29 3b  TABLE t1(a,b,c);
3970: 0a 20 20 20 20 57 49 54 48 20 52 45 43 55 52 53  .    WITH RECURS
3980: 49 56 45 0a 20 20 20 20 20 20 63 28 69 29 20 41  IVE.      c(i) A
3990: 53 20 28 56 41 4c 55 45 53 28 31 29 20 55 4e 49  S (VALUES(1) UNI
39a0: 4f 4e 20 41 4c 4c 20 53 45 4c 45 43 54 20 69 2b  ON ALL SELECT i+
39b0: 31 20 46 52 4f 4d 20 63 20 57 48 45 52 45 20 69  1 FROM c WHERE i
39c0: 3c 31 30 30 29 0a 20 20 20 20 49 4e 53 45 52 54  <100).    INSERT
39d0: 20 49 4e 54 4f 20 74 31 28 61 2c 62 2c 63 29 20   INTO t1(a,b,c) 
39e0: 53 45 4c 45 43 54 20 69 2c 20 70 72 69 6e 74 66  SELECT i, printf
39f0: 28 27 78 79 7a 25 30 38 78 27 2c 69 29 2c 20 32  ('xyz%08x',i), 2
3a00: 30 30 30 2d 69 20 46 52 4f 4d 20 63 3b 0a 20 20  000-i FROM c;.  
3a10: 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 74    CREATE INDEX t
3a20: 31 61 20 4f 4e 20 74 31 28 61 29 3b 0a 20 20 20  1a ON t1(a);.   
3a30: 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 74 31   CREATE INDEX t1
3a40: 62 63 20 4f 4e 20 74 31 28 62 2c 63 29 3b 0a 20  bc ON t1(b,c);. 
3a50: 20 7d 0a 20 20 64 62 20 65 76 61 6c 20 7b 50 52   }.  db eval {PR
3a60: 41 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63  AGMA integrity_c
3a70: 68 65 63 6b 7d 20 7b 0a 20 20 20 20 20 64 62 20  heck} {.     db 
3a80: 65 76 61 6c 20 7b 44 45 4c 45 54 45 20 46 52 4f  eval {DELETE FRO
3a90: 4d 20 74 31 7d 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a  M t1}.  }.} {}..
3aa0: 23 20 54 65 73 74 20 6d 6f 64 69 66 79 69 6e 67  # Test modifying
3ab0: 20 74 68 65 20 63 61 63 68 65 5f 73 69 7a 65 20   the cache_size 
3ac0: 6f 66 20 61 6e 20 61 74 74 61 63 68 65 64 20 64  of an attached d
3ad0: 61 74 61 62 61 73 65 2e 0a 69 66 63 61 70 61 62  atabase..ifcapab
3ae0: 6c 65 20 70 61 67 65 72 5f 70 72 61 67 6d 61 73  le pager_pragmas
3af0: 26 26 61 74 74 61 63 68 20 7b 0a 64 6f 5f 74 65  &&attach {.do_te
3b00: 73 74 20 70 72 61 67 6d 61 2d 34 2e 31 20 7b 0a  st pragma-4.1 {.
3b10: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
3b20: 41 54 54 41 43 48 20 27 74 65 73 74 32 2e 64 62  ATTACH 'test2.db
3b30: 27 20 41 53 20 61 75 78 3b 0a 20 20 20 20 70 72  ' AS aux;.    pr
3b40: 61 67 6d 61 20 61 75 78 2e 63 61 63 68 65 5f 73  agma aux.cache_s
3b50: 69 7a 65 3b 0a 20 20 20 20 70 72 61 67 6d 61 20  ize;.    pragma 
3b60: 61 75 78 2e 64 65 66 61 75 6c 74 5f 63 61 63 68  aux.default_cach
3b70: 65 5f 73 69 7a 65 3b 0a 20 20 7d 20 0a 7d 20 5b  e_size;.  } .} [
3b80: 6c 69 73 74 20 24 44 46 4c 54 5f 43 41 43 48 45  list $DFLT_CACHE
3b90: 5f 53 5a 20 24 44 46 4c 54 5f 43 41 43 48 45 5f  _SZ $DFLT_CACHE_
3ba0: 53 5a 5d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67  SZ].do_test prag
3bb0: 6d 61 2d 34 2e 32 20 7b 0a 20 20 65 78 65 63 73  ma-4.2 {.  execs
3bc0: 71 6c 20 7b 0a 20 20 20 20 70 72 61 67 6d 61 20  ql {.    pragma 
3bd0: 61 75 78 2e 63 61 63 68 65 5f 73 69 7a 65 20 3d  aux.cache_size =
3be0: 20 35 30 3b 0a 20 20 20 20 70 72 61 67 6d 61 20   50;.    pragma 
3bf0: 61 75 78 2e 63 61 63 68 65 5f 73 69 7a 65 3b 0a  aux.cache_size;.
3c00: 20 20 20 20 70 72 61 67 6d 61 20 61 75 78 2e 64      pragma aux.d
3c10: 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a  efault_cache_siz
3c20: 65 3b 0a 20 20 7d 20 0a 7d 20 5b 6c 69 73 74 20  e;.  } .} [list 
3c30: 35 30 20 24 44 46 4c 54 5f 43 41 43 48 45 5f 53  50 $DFLT_CACHE_S
3c40: 5a 5d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  Z].do_test pragm
3c50: 61 2d 34 2e 33 20 7b 0a 20 20 65 78 65 63 73 71  a-4.3 {.  execsq
3c60: 6c 20 7b 0a 20 20 20 20 70 72 61 67 6d 61 20 61  l {.    pragma a
3c70: 75 78 2e 64 65 66 61 75 6c 74 5f 63 61 63 68 65  ux.default_cache
3c80: 5f 73 69 7a 65 20 3d 20 34 35 36 3b 0a 20 20 20  _size = 456;.   
3c90: 20 70 72 61 67 6d 61 20 61 75 78 2e 63 61 63 68   pragma aux.cach
3ca0: 65 5f 73 69 7a 65 3b 0a 20 20 20 20 70 72 61 67  e_size;.    prag
3cb0: 6d 61 20 61 75 78 2e 64 65 66 61 75 6c 74 5f 63  ma aux.default_c
3cc0: 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 7d 20 0a  ache_size;.  } .
3cd0: 7d 20 7b 34 35 36 20 34 35 36 7d 0a 64 6f 5f 74  } {456 456}.do_t
3ce0: 65 73 74 20 70 72 61 67 6d 61 2d 34 2e 34 20 7b  est pragma-4.4 {
3cf0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
3d00: 20 70 72 61 67 6d 61 20 63 61 63 68 65 5f 73 69   pragma cache_si
3d10: 7a 65 3b 0a 20 20 20 20 70 72 61 67 6d 61 20 64  ze;.    pragma d
3d20: 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a  efault_cache_siz
3d30: 65 3b 0a 20 20 7d 20 0a 7d 20 5b 6c 69 73 74 20  e;.  } .} [list 
3d40: 24 44 46 4c 54 5f 43 41 43 48 45 5f 53 5a 20 24  $DFLT_CACHE_SZ $
3d50: 44 46 4c 54 5f 43 41 43 48 45 5f 53 5a 5d 0a 64  DFLT_CACHE_SZ].d
3d60: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 34 2e  o_test pragma-4.
3d70: 35 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  5 {.  execsql {.
3d80: 20 20 20 20 44 45 54 41 43 48 20 61 75 78 3b 0a      DETACH aux;.
3d90: 20 20 20 20 41 54 54 41 43 48 20 27 74 65 73 74      ATTACH 'test
3da0: 33 2e 64 62 27 20 41 53 20 61 75 78 3b 0a 20 20  3.db' AS aux;.  
3db0: 20 20 70 72 61 67 6d 61 20 61 75 78 2e 63 61 63    pragma aux.cac
3dc0: 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 70 72 61  he_size;.    pra
3dd0: 67 6d 61 20 61 75 78 2e 64 65 66 61 75 6c 74 5f  gma aux.default_
3de0: 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 7d 20  cache_size;.  } 
3df0: 0a 7d 20 5b 6c 69 73 74 20 24 44 46 4c 54 5f 43  .} [list $DFLT_C
3e00: 41 43 48 45 5f 53 5a 20 24 44 46 4c 54 5f 43 41  ACHE_SZ $DFLT_CA
3e10: 43 48 45 5f 53 5a 5d 0a 64 6f 5f 74 65 73 74 20  CHE_SZ].do_test 
3e20: 70 72 61 67 6d 61 2d 34 2e 36 20 7b 0a 20 20 65  pragma-4.6 {.  e
3e30: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 44 45 54  xecsql {.    DET
3e40: 41 43 48 20 61 75 78 3b 0a 20 20 20 20 41 54 54  ACH aux;.    ATT
3e50: 41 43 48 20 27 74 65 73 74 32 2e 64 62 27 20 41  ACH 'test2.db' A
3e60: 53 20 61 75 78 3b 0a 20 20 20 20 70 72 61 67 6d  S aux;.    pragm
3e70: 61 20 61 75 78 2e 63 61 63 68 65 5f 73 69 7a 65  a aux.cache_size
3e80: 3b 0a 20 20 20 20 70 72 61 67 6d 61 20 61 75 78  ;.    pragma aux
3e90: 2e 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73  .default_cache_s
3ea0: 69 7a 65 3b 0a 20 20 7d 20 0a 7d 20 7b 34 35 36  ize;.  } .} {456
3eb0: 20 34 35 36 7d 0a 7d 20 3b 23 20 69 66 63 61 70   456}.} ;# ifcap
3ec0: 61 62 6c 65 20 70 61 67 65 72 5f 70 72 61 67 6d  able pager_pragm
3ed0: 61 73 0a 0a 23 20 54 65 73 74 20 74 68 61 74 20  as..# Test that 
3ee0: 6d 6f 64 69 66 79 69 6e 67 20 74 68 65 20 73 79  modifying the sy
3ef0: 6e 63 2d 6c 65 76 65 6c 20 69 6e 20 74 68 65 20  nc-level in the 
3f00: 6d 69 64 64 6c 65 20 6f 66 20 61 20 74 72 61 6e  middle of a tran
3f10: 73 61 63 74 69 6f 6e 20 69 73 0a 23 20 64 69 73  saction is.# dis
3f20: 61 6c 6c 6f 77 65 64 2e 0a 69 66 63 61 70 61 62  allowed..ifcapab
3f30: 6c 65 20 70 61 67 65 72 5f 70 72 61 67 6d 61 73  le pager_pragmas
3f40: 20 7b 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d   {.do_test pragm
3f50: 61 2d 35 2e 30 20 7b 0a 20 20 65 78 65 63 73 71  a-5.0 {.  execsq
3f60: 6c 20 7b 0a 20 20 20 20 70 72 61 67 6d 61 20 73  l {.    pragma s
3f70: 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20 20 7d 20  ynchronous;.  } 
3f80: 0a 7d 20 7b 32 7d 0a 64 6f 5f 74 65 73 74 20 70  .} {2}.do_test p
3f90: 72 61 67 6d 61 2d 35 2e 31 20 7b 0a 20 20 63 61  ragma-5.1 {.  ca
3fa0: 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 42 45 47  tchsql {.    BEG
3fb0: 49 4e 3b 0a 20 20 20 20 70 72 61 67 6d 61 20 73  IN;.    pragma s
3fc0: 79 6e 63 68 72 6f 6e 6f 75 73 20 3d 20 4f 46 46  ynchronous = OFF
3fd0: 3b 0a 20 20 7d 20 0a 7d 20 7b 31 20 7b 53 61 66  ;.  } .} {1 {Saf
3fe0: 65 74 79 20 6c 65 76 65 6c 20 6d 61 79 20 6e 6f  ety level may no
3ff0: 74 20 62 65 20 63 68 61 6e 67 65 64 20 69 6e 73  t be changed ins
4000: 69 64 65 20 61 20 74 72 61 6e 73 61 63 74 69 6f  ide a transactio
4010: 6e 7d 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67  n}}.do_test prag
4020: 6d 61 2d 35 2e 32 20 7b 0a 20 20 65 78 65 63 73  ma-5.2 {.  execs
4030: 71 6c 20 7b 0a 20 20 20 20 70 72 61 67 6d 61 20  ql {.    pragma 
4040: 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20 20 7d  synchronous;.  }
4050: 20 0a 7d 20 7b 32 7d 0a 63 61 74 63 68 73 71 6c   .} {2}.catchsql
4060: 20 7b 43 4f 4d 4d 49 54 3b 7d 0a 7d 20 3b 23 20   {COMMIT;}.} ;# 
4070: 69 66 63 61 70 61 62 6c 65 20 70 61 67 65 72 5f  ifcapable pager_
4080: 70 72 61 67 6d 61 73 0a 0a 23 20 54 65 73 74 20  pragmas..# Test 
4090: 73 63 68 65 6d 61 2d 71 75 65 72 79 20 70 72 61  schema-query pra
40a0: 67 6d 61 73 0a 23 0a 69 66 63 61 70 61 62 6c 65  gmas.#.ifcapable
40b0: 20 73 63 68 65 6d 61 5f 70 72 61 67 6d 61 73 20   schema_pragmas 
40c0: 7b 0a 69 66 63 61 70 61 62 6c 65 20 74 65 6d 70  {.ifcapable temp
40d0: 64 62 26 26 61 74 74 61 63 68 20 7b 0a 20 20 64  db&&attach {.  d
40e0: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 36 2e  o_test pragma-6.
40f0: 31 20 7b 0a 20 20 20 20 73 65 74 20 72 65 73 20  1 {.    set res 
4100: 7b 7d 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b  {}.    execsql {
4110: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 73 71  SELECT * FROM sq
4120: 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72  lite_temp_master
4130: 7d 0a 20 20 20 20 66 6f 72 65 61 63 68 20 7b 69  }.    foreach {i
4140: 64 78 20 6e 61 6d 65 20 66 69 6c 65 7d 20 5b 65  dx name file} [e
4150: 78 65 63 73 71 6c 20 7b 70 72 61 67 6d 61 20 64  xecsql {pragma d
4160: 61 74 61 62 61 73 65 5f 6c 69 73 74 7d 5d 20 7b  atabase_list}] {
4170: 0a 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 72  .      lappend r
4180: 65 73 20 24 69 64 78 20 24 6e 61 6d 65 0a 20 20  es $idx $name.  
4190: 20 20 7d 0a 20 20 20 20 73 65 74 20 72 65 73 0a    }.    set res.
41a0: 20 20 7d 20 7b 30 20 6d 61 69 6e 20 31 20 74 65    } {0 main 1 te
41b0: 6d 70 20 32 20 61 75 78 7d 0a 7d 0a 64 6f 5f 74  mp 2 aux}.}.do_t
41c0: 65 73 74 20 70 72 61 67 6d 61 2d 36 2e 32 20 7b  est pragma-6.2 {
41d0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
41e0: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 32   CREATE TABLE t2
41f0: 28 61 2c 62 2c 63 29 3b 0a 20 20 20 20 70 72 61  (a,b,c);.    pra
4200: 67 6d 61 20 74 61 62 6c 65 5f 69 6e 66 6f 28 74  gma table_info(t
4210: 32 29 0a 20 20 7d 0a 7d 20 7b 30 20 61 20 7b 7d  2).  }.} {0 a {}
4220: 20 30 20 7b 7d 20 30 20 31 20 62 20 7b 7d 20 30   0 {} 0 1 b {} 0
4230: 20 7b 7d 20 30 20 32 20 63 20 7b 7d 20 30 20 7b   {} 0 2 c {} 0 {
4240: 7d 20 30 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61  } 0}.do_test pra
4250: 67 6d 61 2d 36 2e 32 2e 31 20 7b 0a 20 20 65 78  gma-6.2.1 {.  ex
4260: 65 63 73 71 6c 20 7b 0a 20 20 20 20 70 72 61 67  ecsql {.    prag
4270: 6d 61 20 74 61 62 6c 65 5f 69 6e 66 6f 3b 0a 20  ma table_info;. 
4280: 20 7d 0a 7d 20 7b 7d 0a 64 62 20 6e 75 6c 6c 76   }.} {}.db nullv
4290: 61 6c 75 65 20 3c 3c 4e 55 4c 4c 3e 3e 0a 64 6f  alue <<NULL>>.do
42a0: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 36 2e 32  _test pragma-6.2
42b0: 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .2 {.  execsql {
42c0: 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  .    CREATE TABL
42d0: 45 20 74 35 28 0a 20 20 20 20 20 20 61 20 54 45  E t5(.      a TE
42e0: 58 54 20 44 45 46 41 55 4c 54 20 43 55 52 52 45  XT DEFAULT CURRE
42f0: 4e 54 5f 54 49 4d 45 53 54 41 4d 50 2c 20 0a 20  NT_TIMESTAMP, . 
4300: 20 20 20 20 20 62 20 44 45 46 41 55 4c 54 20 28       b DEFAULT (
4310: 35 2b 33 29 2c 0a 20 20 20 20 20 20 63 20 54 45  5+3),.      c TE
4320: 58 54 2c 0a 20 20 20 20 20 20 64 20 49 4e 54 45  XT,.      d INTE
4330: 47 45 52 20 44 45 46 41 55 4c 54 20 4e 55 4c 4c  GER DEFAULT NULL
4340: 2c 0a 20 20 20 20 20 20 65 20 54 45 58 54 20 44  ,.      e TEXT D
4350: 45 46 41 55 4c 54 20 27 27 2c 0a 20 20 20 20 20  EFAULT '',.     
4360: 20 55 4e 49 51 55 45 28 62 2c 63 2c 64 29 2c 0a   UNIQUE(b,c,d),.
4370: 20 20 20 20 20 20 50 52 49 4d 41 52 59 20 4b 45        PRIMARY KE
4380: 59 28 65 2c 62 2c 63 29 0a 20 20 20 20 29 3b 0a  Y(e,b,c).    );.
4390: 20 20 20 20 50 52 41 47 4d 41 20 74 61 62 6c 65      PRAGMA table
43a0: 5f 69 6e 66 6f 28 74 35 29 3b 0a 20 20 7d 0a 7d  _info(t5);.  }.}
43b0: 20 7b 30 20 61 20 54 45 58 54 20 30 20 43 55 52   {0 a TEXT 0 CUR
43c0: 52 45 4e 54 5f 54 49 4d 45 53 54 41 4d 50 20 30  RENT_TIMESTAMP 0
43d0: 20 31 20 62 20 7b 7d 20 30 20 35 2b 33 20 32 20   1 b {} 0 5+3 2 
43e0: 32 20 63 20 54 45 58 54 20 30 20 3c 3c 4e 55 4c  2 c TEXT 0 <<NUL
43f0: 4c 3e 3e 20 33 20 33 20 64 20 49 4e 54 45 47 45  L>> 3 3 d INTEGE
4400: 52 20 30 20 4e 55 4c 4c 20 30 20 34 20 65 20 54  R 0 NULL 0 4 e T
4410: 45 58 54 20 30 20 27 27 20 31 7d 0a 64 62 20 6e  EXT 0 '' 1}.db n
4420: 75 6c 6c 76 61 6c 75 65 20 7b 7d 0a 64 6f 5f 74  ullvalue {}.do_t
4430: 65 73 74 20 70 72 61 67 6d 61 2d 36 2e 32 2e 33  est pragma-6.2.3
4440: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
4450: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
4460: 74 32 5f 33 28 61 2c 62 20 49 4e 54 45 47 45 52  t2_3(a,b INTEGER
4470: 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 63 29 3b   PRIMARY KEY,c);
4480: 0a 20 20 20 20 70 72 61 67 6d 61 20 74 61 62 6c  .    pragma tabl
4490: 65 5f 69 6e 66 6f 28 74 32 5f 33 29 0a 20 20 7d  e_info(t2_3).  }
44a0: 0a 7d 20 7b 30 20 61 20 7b 7d 20 30 20 7b 7d 20  .} {0 a {} 0 {} 
44b0: 30 20 31 20 62 20 49 4e 54 45 47 45 52 20 30 20  0 1 b INTEGER 0 
44c0: 7b 7d 20 31 20 32 20 63 20 7b 7d 20 30 20 7b 7d  {} 1 2 c {} 0 {}
44d0: 20 30 7d 0a 69 66 63 61 70 61 62 6c 65 20 7b 66   0}.ifcapable {f
44e0: 6f 72 65 69 67 6e 6b 65 79 7d 20 7b 0a 20 20 64  oreignkey} {.  d
44f0: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 36 2e  o_test pragma-6.
4500: 33 2e 31 20 7b 0a 20 20 20 20 65 78 65 63 73 71  3.1 {.    execsq
4510: 6c 20 7b 0a 20 20 20 20 20 20 43 52 45 41 54 45  l {.      CREATE
4520: 20 54 41 42 4c 45 20 74 33 28 61 20 69 6e 74 20   TABLE t3(a int 
4530: 72 65 66 65 72 65 6e 63 65 73 20 74 32 28 62 29  references t2(b)
4540: 2c 20 62 20 55 4e 49 51 55 45 29 3b 0a 20 20 20  , b UNIQUE);.   
4550: 20 20 20 70 72 61 67 6d 61 20 66 6f 72 65 69 67     pragma foreig
4560: 6e 5f 6b 65 79 5f 6c 69 73 74 28 74 33 29 3b 0a  n_key_list(t3);.
4570: 20 20 20 20 7d 0a 20 20 7d 20 7b 30 20 30 20 74      }.  } {0 0 t
4580: 32 20 61 20 62 20 7b 4e 4f 20 41 43 54 49 4f 4e  2 a b {NO ACTION
4590: 7d 20 7b 4e 4f 20 41 43 54 49 4f 4e 7d 20 4e 4f  } {NO ACTION} NO
45a0: 4e 45 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72  NE}.  do_test pr
45b0: 61 67 6d 61 2d 36 2e 33 2e 32 20 7b 0a 20 20 20  agma-6.3.2 {.   
45c0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20   execsql {.     
45d0: 20 70 72 61 67 6d 61 20 66 6f 72 65 69 67 6e 5f   pragma foreign_
45e0: 6b 65 79 5f 6c 69 73 74 3b 0a 20 20 20 20 7d 0a  key_list;.    }.
45f0: 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65 73 74    } {}.  do_test
4600: 20 70 72 61 67 6d 61 2d 36 2e 33 2e 33 20 7b 0a   pragma-6.3.3 {.
4610: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20      execsql {.  
4620: 20 20 20 20 70 72 61 67 6d 61 20 66 6f 72 65 69      pragma forei
4630: 67 6e 5f 6b 65 79 5f 6c 69 73 74 28 74 33 5f 62  gn_key_list(t3_b
4640: 6f 67 75 73 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  ogus);.    }.  }
4650: 20 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72   {}.  do_test pr
4660: 61 67 6d 61 2d 36 2e 33 2e 34 20 7b 0a 20 20 20  agma-6.3.4 {.   
4670: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20   execsql {.     
4680: 20 70 72 61 67 6d 61 20 66 6f 72 65 69 67 6e 5f   pragma foreign_
4690: 6b 65 79 5f 6c 69 73 74 28 74 35 29 3b 0a 20 20  key_list(t5);.  
46a0: 20 20 7d 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f    }.  } {}.  do_
46b0: 74 65 73 74 20 70 72 61 67 6d 61 2d 36 2e 34 20  test pragma-6.4 
46c0: 7b 0a 20 20 20 20 63 61 70 74 75 72 65 5f 70 72  {.    capture_pr
46d0: 61 67 6d 61 20 64 62 20 6f 75 74 20 7b 0a 20 20  agma db out {.  
46e0: 20 20 20 20 70 72 61 67 6d 61 20 69 6e 64 65 78      pragma index
46f0: 5f 6c 69 73 74 28 74 33 29 3b 0a 20 20 20 20 7d  _list(t3);.    }
4700: 0a 20 20 20 20 64 62 20 65 76 61 6c 20 7b 53 45  .    db eval {SE
4710: 4c 45 43 54 20 73 65 71 2c 20 22 6e 61 6d 65 22  LECT seq, "name"
4720: 2c 20 22 75 6e 69 71 75 65 22 20 46 52 4f 4d 20  , "unique" FROM 
4730: 6f 75 74 20 4f 52 44 45 52 20 42 59 20 73 65 71  out ORDER BY seq
4740: 7d 0a 20 20 7d 20 7b 30 20 73 71 6c 69 74 65 5f  }.  } {0 sqlite_
4750: 61 75 74 6f 69 6e 64 65 78 5f 74 33 5f 31 20 31  autoindex_t3_1 1
4760: 7d 0a 7d 0a 69 66 63 61 70 61 62 6c 65 20 7b 21  }.}.ifcapable {!
4770: 66 6f 72 65 69 67 6e 6b 65 79 7d 20 7b 0a 20 20  foreignkey} {.  
4780: 65 78 65 63 73 71 6c 20 7b 43 52 45 41 54 45 20  execsql {CREATE 
4790: 54 41 42 4c 45 20 74 33 28 61 2c 62 20 55 4e 49  TABLE t3(a,b UNI
47a0: 51 55 45 29 7d 0a 7d 0a 64 6f 5f 74 65 73 74 20  QUE)}.}.do_test 
47b0: 70 72 61 67 6d 61 2d 36 2e 35 2e 31 20 7b 0a 20  pragma-6.5.1 {. 
47c0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43   execsql {.    C
47d0: 52 45 41 54 45 20 49 4e 44 45 58 20 74 33 69 31  REATE INDEX t3i1
47e0: 20 4f 4e 20 74 33 28 61 2c 62 29 3b 0a 20 20 7d   ON t3(a,b);.  }
47f0: 0a 20 20 63 61 70 74 75 72 65 5f 70 72 61 67 6d  .  capture_pragm
4800: 61 20 64 62 20 6f 75 74 20 7b 0a 20 20 20 20 70  a db out {.    p
4810: 72 61 67 6d 61 20 69 6e 64 65 78 5f 69 6e 66 6f  ragma index_info
4820: 28 74 33 69 31 29 3b 0a 20 20 7d 0a 20 20 64 62  (t3i1);.  }.  db
4830: 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 73 65   eval {SELECT se
4840: 71 6e 6f 2c 20 63 69 64 2c 20 6e 61 6d 65 20 46  qno, cid, name F
4850: 52 4f 4d 20 6f 75 74 20 4f 52 44 45 52 20 42 59  ROM out ORDER BY
4860: 20 73 65 71 6e 6f 7d 0a 7d 20 7b 30 20 30 20 61   seqno}.} {0 0 a
4870: 20 31 20 31 20 62 7d 0a 0a 23 20 45 56 49 44 45   1 1 b}..# EVIDE
4880: 4e 43 45 2d 4f 46 3a 20 52 2d 32 33 31 31 34 2d  NCE-OF: R-23114-
4890: 32 31 36 39 35 20 54 68 65 20 61 75 78 69 6c 69  21695 The auxili
48a0: 61 72 79 20 69 6e 64 65 78 2d 63 6f 6c 75 6d 6e  ary index-column
48b0: 73 20 61 72 65 20 6e 6f 74 20 73 68 6f 77 6e 0a  s are not shown.
48c0: 23 20 62 79 20 74 68 65 20 69 6e 64 65 78 5f 69  # by the index_i
48d0: 6e 66 6f 20 70 72 61 67 6d 61 2c 20 62 75 74 20  nfo pragma, but 
48e0: 74 68 65 79 20 61 72 65 20 6c 69 73 74 65 64 20  they are listed 
48f0: 62 79 20 74 68 65 20 69 6e 64 65 78 5f 78 69 6e  by the index_xin
4900: 66 6f 0a 23 20 70 72 61 67 6d 61 2e 0a 23 0a 64  fo.# pragma..#.d
4910: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 36 2e  o_test pragma-6.
4920: 35 2e 31 62 20 7b 0a 20 20 63 61 70 74 75 72 65  5.1b {.  capture
4930: 5f 70 72 61 67 6d 61 20 64 62 20 6f 75 74 20 7b  _pragma db out {
4940: 50 52 41 47 4d 41 20 69 6e 64 65 78 5f 78 69 6e  PRAGMA index_xin
4950: 66 6f 28 74 33 69 31 29 7d 0a 20 20 64 62 20 65  fo(t3i1)}.  db e
4960: 76 61 6c 20 7b 53 45 4c 45 43 54 20 73 65 71 6e  val {SELECT seqn
4970: 6f 2c 20 63 69 64 2c 20 6e 61 6d 65 20 46 52 4f  o, cid, name FRO
4980: 4d 20 6f 75 74 20 4f 52 44 45 52 20 42 59 20 73  M out ORDER BY s
4990: 65 71 6e 6f 7d 0a 7d 20 7b 30 20 30 20 61 20 31  eqno}.} {0 0 a 1
49a0: 20 31 20 62 20 32 20 2d 31 20 7b 7d 7d 0a 0a 0a   1 b 2 -1 {}}...
49b0: 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52  # EVIDENCE-OF: R
49c0: 2d 36 32 37 32 35 2d 30 33 33 36 36 20 50 52 41  -62725-03366 PRA
49d0: 47 4d 41 20 64 61 74 61 62 61 73 65 2e 69 6e 64  GMA database.ind
49e0: 65 78 5f 69 6e 66 6f 28 69 6e 64 65 78 2d 6e 61  ex_info(index-na
49f0: 6d 65 29 3b 0a 23 20 54 68 69 73 20 70 72 61 67  me);.# This prag
4a00: 6d 61 20 72 65 74 75 72 6e 73 20 6f 6e 65 20 72  ma returns one r
4a10: 6f 77 20 66 6f 72 20 65 61 63 68 20 6b 65 79 20  ow for each key 
4a20: 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 6e 61  column in the na
4a30: 6d 65 64 20 69 6e 64 65 78 2e 0a 23 0a 23 20 28  med index..#.# (
4a40: 54 68 65 20 66 69 72 73 74 20 63 6f 6c 75 6d 6e  The first column
4a50: 20 6f 66 20 6f 75 74 70 75 74 20 66 72 6f 6d 20   of output from 
4a60: 50 52 41 47 4d 41 20 69 6e 64 65 78 5f 69 6e 66  PRAGMA index_inf
4a70: 6f 20 69 73 2e 2e 2e 29 0a 23 20 45 56 49 44 45  o is...).# EVIDE
4a80: 4e 43 45 2d 4f 46 3a 20 52 2d 33 34 31 38 36 2d  NCE-OF: R-34186-
4a90: 35 32 39 31 34 20 54 68 65 20 72 61 6e 6b 20 6f  52914 The rank o
4aa0: 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 77 69 74  f the column wit
4ab0: 68 69 6e 20 74 68 65 20 69 6e 64 65 78 2e 20 28  hin the index. (
4ac0: 30 0a 23 20 6d 65 61 6e 73 20 6c 65 66 74 2d 6d  0.# means left-m
4ad0: 6f 73 74 2e 29 0a 23 0a 23 20 28 54 68 65 20 73  ost.).#.# (The s
4ae0: 65 63 6f 6e 64 20 63 6f 6c 75 6d 6e 20 6f 66 20  econd column of 
4af0: 6f 75 74 70 75 74 20 66 72 6f 6d 20 50 52 41 47  output from PRAG
4b00: 4d 41 20 69 6e 64 65 78 5f 69 6e 66 6f 20 69 73  MA index_info is
4b10: 2e 2e 2e 29 0a 23 20 45 56 49 44 45 4e 43 45 2d  ...).# EVIDENCE-
4b20: 4f 46 3a 20 52 2d 36 35 30 31 39 2d 30 38 33 38  OF: R-65019-0838
4b30: 33 20 54 68 65 20 72 61 6e 6b 20 6f 66 20 74 68  3 The rank of th
4b40: 65 20 63 6f 6c 75 6d 6e 20 77 69 74 68 69 6e 20  e column within 
4b50: 74 68 65 20 74 61 62 6c 65 0a 23 20 62 65 69 6e  the table.# bein
4b60: 67 20 69 6e 64 65 78 65 64 2e 0a 23 0a 23 20 28  g indexed..#.# (
4b70: 54 68 65 20 74 68 69 72 64 20 63 6f 6c 75 6d 6e  The third column
4b80: 20 6f 66 20 6f 75 74 70 75 74 20 66 72 6f 6d 20   of output from 
4b90: 50 52 41 47 4d 41 20 69 6e 64 65 78 5f 69 6e 66  PRAGMA index_inf
4ba0: 6f 20 69 73 2e 2e 2e 29 0a 23 20 45 56 49 44 45  o is...).# EVIDE
4bb0: 4e 43 45 2d 4f 46 3a 20 52 2d 30 39 37 37 33 2d  NCE-OF: R-09773-
4bc0: 33 34 32 36 36 20 54 68 65 20 6e 61 6d 65 20 6f  34266 The name o
4bd0: 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 62 65 69  f the column bei
4be0: 6e 67 20 69 6e 64 65 78 65 64 2e 0a 23 0a 64 6f  ng indexed..#.do
4bf0: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 70 72  _execsql_test pr
4c00: 61 67 6d 61 2d 36 2e 35 2e 31 63 20 7b 0a 20 20  agma-6.5.1c {.  
4c10: 43 52 45 41 54 45 20 49 4e 44 45 58 20 74 33 69  CREATE INDEX t3i
4c20: 32 20 4f 4e 20 74 33 28 62 2c 61 29 3b 0a 20 20  2 ON t3(b,a);.  
4c30: 50 52 41 47 4d 41 20 69 6e 64 65 78 5f 69 6e 66  PRAGMA index_inf
4c40: 6f 3d 27 74 33 69 32 27 3b 0a 20 20 44 52 4f 50  o='t3i2';.  DROP
4c50: 20 49 4e 44 45 58 20 74 33 69 32 3b 0a 7d 20 7b   INDEX t3i2;.} {
4c60: 30 20 31 20 62 20 31 20 30 20 61 7d 0a 0a 64 6f  0 1 b 1 0 a}..do
4c70: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 36 2e 35  _test pragma-6.5
4c80: 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .2 {.  execsql {
4c90: 0a 20 20 20 20 70 72 61 67 6d 61 20 69 6e 64 65  .    pragma inde
4ca0: 78 5f 69 6e 66 6f 28 74 33 69 31 5f 62 6f 67 75  x_info(t3i1_bogu
4cb0: 73 29 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a 69 66  s);.  }.} {}..if
4cc0: 63 61 70 61 62 6c 65 20 74 65 6d 70 64 62 20 7b  capable tempdb {
4cd0: 0a 20 20 23 20 54 65 73 74 20 66 6f 72 20 74 69  .  # Test for ti
4ce0: 63 6b 65 74 20 23 33 33 32 30 2e 20 57 68 65 6e  cket #3320. When
4cf0: 20 61 20 74 65 6d 70 20 74 61 62 6c 65 20 6f 66   a temp table of
4d00: 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 65   the same name e
4d10: 78 69 73 74 73 2c 20 6d 61 6b 65 0a 20 20 23 20  xists, make.  # 
4d20: 73 75 72 65 20 74 68 65 20 73 63 68 65 6d 61 20  sure the schema 
4d30: 6f 66 20 74 68 65 20 6d 61 69 6e 20 74 61 62 6c  of the main tabl
4d40: 65 20 63 61 6e 20 73 74 69 6c 6c 20 62 65 20 71  e can still be q
4d50: 75 65 72 69 65 64 20 75 73 69 6e 67 20 0a 20 20  ueried using .  
4d60: 23 20 22 70 72 61 67 6d 61 20 74 61 62 6c 65 5f  # "pragma table_
4d70: 69 6e 66 6f 22 3a 0a 20 20 64 6f 5f 74 65 73 74  info":.  do_test
4d80: 20 70 72 61 67 6d 61 2d 36 2e 36 2e 31 20 7b 0a   pragma-6.6.1 {.
4d90: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20      execsql {.  
4da0: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
4db0: 20 74 72 69 61 6c 28 63 6f 6c 5f 6d 61 69 6e 29   trial(col_main)
4dc0: 3b 0a 20 20 20 20 20 20 43 52 45 41 54 45 20 54  ;.      CREATE T
4dd0: 45 4d 50 20 54 41 42 4c 45 20 74 72 69 61 6c 28  EMP TABLE trial(
4de0: 63 6f 6c 5f 74 65 6d 70 29 3b 0a 20 20 20 20 7d  col_temp);.    }
4df0: 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65 73  .  } {}.  do_tes
4e00: 74 20 70 72 61 67 6d 61 2d 36 2e 36 2e 32 20 7b  t pragma-6.6.2 {
4e10: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
4e20: 20 20 20 20 20 50 52 41 47 4d 41 20 74 61 62 6c       PRAGMA tabl
4e30: 65 5f 69 6e 66 6f 28 74 72 69 61 6c 29 3b 0a 20  e_info(trial);. 
4e40: 20 20 20 7d 0a 20 20 7d 20 7b 30 20 63 6f 6c 5f     }.  } {0 col_
4e50: 74 65 6d 70 20 7b 7d 20 30 20 7b 7d 20 30 7d 0a  temp {} 0 {} 0}.
4e60: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
4e70: 2d 36 2e 36 2e 33 20 7b 0a 20 20 20 20 65 78 65  -6.6.3 {.    exe
4e80: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41  csql {.      PRA
4e90: 47 4d 41 20 74 65 6d 70 2e 74 61 62 6c 65 5f 69  GMA temp.table_i
4ea0: 6e 66 6f 28 74 72 69 61 6c 29 3b 0a 20 20 20 20  nfo(trial);.    
4eb0: 7d 0a 20 20 7d 20 7b 30 20 63 6f 6c 5f 74 65 6d  }.  } {0 col_tem
4ec0: 70 20 7b 7d 20 30 20 7b 7d 20 30 7d 0a 20 20 64  p {} 0 {} 0}.  d
4ed0: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 36 2e  o_test pragma-6.
4ee0: 36 2e 34 20 7b 0a 20 20 20 20 65 78 65 63 73 71  6.4 {.    execsq
4ef0: 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41  l {.      PRAGMA
4f00: 20 6d 61 69 6e 2e 74 61 62 6c 65 5f 69 6e 66 6f   main.table_info
4f10: 28 74 72 69 61 6c 29 3b 0a 20 20 20 20 7d 0a 20  (trial);.    }. 
4f20: 20 7d 20 7b 30 20 63 6f 6c 5f 6d 61 69 6e 20 7b   } {0 col_main {
4f30: 7d 20 30 20 7b 7d 20 30 7d 0a 7d 0a 0a 64 6f 5f  } 0 {} 0}.}..do_
4f40: 74 65 73 74 20 70 72 61 67 6d 61 2d 36 2e 37 20  test pragma-6.7 
4f50: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
4f60: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
4f70: 65 73 74 5f 74 61 62 6c 65 28 0a 20 20 20 20 20  est_table(.     
4f80: 20 6f 6e 65 20 49 4e 54 20 4e 4f 54 20 4e 55 4c   one INT NOT NUL
4f90: 4c 20 44 45 46 41 55 4c 54 20 2d 31 2c 20 0a 20  L DEFAULT -1, . 
4fa0: 20 20 20 20 20 74 77 6f 20 74 65 78 74 2c 0a 20       two text,. 
4fb0: 20 20 20 20 20 74 68 72 65 65 20 56 41 52 43 48       three VARCH
4fc0: 41 52 28 34 35 2c 20 36 35 29 20 44 45 46 41 55  AR(45, 65) DEFAU
4fd0: 4c 54 20 27 61 62 63 64 65 27 2c 0a 20 20 20 20  LT 'abcde',.    
4fe0: 20 20 66 6f 75 72 20 52 45 41 4c 20 44 45 46 41    four REAL DEFA
4ff0: 55 4c 54 20 58 27 61 62 63 64 65 66 27 2c 0a 20  ULT X'abcdef',. 
5000: 20 20 20 20 20 66 69 76 65 20 44 45 46 41 55 4c       five DEFAUL
5010: 54 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 0a 20  T CURRENT_TIME. 
5020: 20 20 20 29 3b 0a 20 20 7d 0a 20 20 63 61 70 74     );.  }.  capt
5030: 75 72 65 5f 70 72 61 67 6d 61 20 64 62 20 6f 75  ure_pragma db ou
5040: 74 20 7b 50 52 41 47 4d 41 20 74 61 62 6c 65 5f  t {PRAGMA table_
5050: 69 6e 66 6f 28 74 65 73 74 5f 74 61 62 6c 65 29  info(test_table)
5060: 7d 0a 20 20 64 62 20 65 76 61 6c 20 7b 53 45 4c  }.  db eval {SEL
5070: 45 43 54 20 63 69 64 2c 20 22 6e 61 6d 65 22 2c  ECT cid, "name",
5080: 20 74 79 70 65 2c 20 22 6e 6f 74 6e 75 6c 6c 22   type, "notnull"
5090: 2c 20 64 66 6c 74 5f 76 61 6c 75 65 2c 20 70 6b  , dflt_value, pk
50a0: 20 46 52 4f 4d 20 6f 75 74 0a 20 20 20 20 20 20   FROM out.      
50b0: 20 20 20 20 20 20 4f 52 44 45 52 20 42 59 20 63        ORDER BY c
50c0: 69 64 7d 0a 7d 20 5b 63 6f 6e 63 61 74 20 5c 0a  id}.} [concat \.
50d0: 20 20 7b 30 20 6f 6e 65 20 49 4e 54 20 31 20 2d    {0 one INT 1 -
50e0: 31 20 30 7d 20 5c 0a 20 20 7b 31 20 74 77 6f 20  1 0} \.  {1 two 
50f0: 74 65 78 74 20 30 20 7b 7d 20 30 7d 20 5c 0a 20  text 0 {} 0} \. 
5100: 20 7b 32 20 74 68 72 65 65 20 7b 56 41 52 43 48   {2 three {VARCH
5110: 41 52 28 34 35 2c 20 36 35 29 7d 20 30 20 27 61  AR(45, 65)} 0 'a
5120: 62 63 64 65 27 20 30 7d 20 5c 0a 20 20 7b 33 20  bcde' 0} \.  {3 
5130: 66 6f 75 72 20 52 45 41 4c 20 30 20 58 27 61 62  four REAL 0 X'ab
5140: 63 64 65 66 27 20 30 7d 20 5c 0a 20 20 7b 34 20  cdef' 0} \.  {4 
5150: 66 69 76 65 20 7b 7d 20 30 20 43 55 52 52 45 4e  five {} 0 CURREN
5160: 54 5f 54 49 4d 45 20 30 7d 20 5c 0a 5d 0a 64 6f  T_TIME 0} \.].do
5170: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 36 2e 38  _test pragma-6.8
5180: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
5190: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
51a0: 74 36 38 28 61 2c 62 2c 63 2c 50 52 49 4d 41 52  t68(a,b,c,PRIMAR
51b0: 59 20 4b 45 59 28 61 2c 62 2c 61 2c 63 29 29 3b  Y KEY(a,b,a,c));
51c0: 0a 20 20 20 20 50 52 41 47 4d 41 20 74 61 62 6c  .    PRAGMA tabl
51d0: 65 5f 69 6e 66 6f 28 74 36 38 29 3b 0a 20 20 7d  e_info(t68);.  }
51e0: 0a 7d 20 5b 63 6f 6e 63 61 74 20 5c 0a 20 20 7b  .} [concat \.  {
51f0: 30 20 61 20 7b 7d 20 30 20 7b 7d 20 31 7d 20 5c  0 a {} 0 {} 1} \
5200: 0a 20 20 7b 31 20 62 20 7b 7d 20 30 20 7b 7d 20  .  {1 b {} 0 {} 
5210: 32 7d 20 5c 0a 20 20 7b 32 20 63 20 7b 7d 20 30  2} \.  {2 c {} 0
5220: 20 7b 7d 20 34 7d 20 5c 0a 5d 0a 7d 20 3b 23 20   {} 4} \.].} ;# 
5230: 69 66 63 61 70 61 62 6c 65 20 73 63 68 65 6d 61  ifcapable schema
5240: 5f 70 72 61 67 6d 61 73 0a 23 20 4d 69 73 63 65  _pragmas.# Misce
5250: 6c 6c 61 6e 65 6f 75 73 20 74 65 73 74 73 0a 23  llaneous tests.#
5260: 0a 69 66 63 61 70 61 62 6c 65 20 73 63 68 65 6d  .ifcapable schem
5270: 61 5f 70 72 61 67 6d 61 73 20 7b 0a 23 20 45 56  a_pragmas {.# EV
5280: 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 36 33 35  IDENCE-OF: R-635
5290: 30 30 2d 33 32 30 32 34 20 50 52 41 47 4d 41 20  00-32024 PRAGMA 
52a0: 64 61 74 61 62 61 73 65 2e 69 6e 64 65 78 5f 6c  database.index_l
52b0: 69 73 74 28 74 61 62 6c 65 2d 6e 61 6d 65 29 3b  ist(table-name);
52c0: 0a 23 20 54 68 69 73 20 70 72 61 67 6d 61 20 72  .# This pragma r
52d0: 65 74 75 72 6e 73 20 6f 6e 65 20 72 6f 77 20 66  eturns one row f
52e0: 6f 72 20 65 61 63 68 20 69 6e 64 65 78 20 61 73  or each index as
52f0: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
5300: 65 20 67 69 76 65 6e 0a 23 20 74 61 62 6c 65 2e  e given.# table.
5310: 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d  .do_test pragma-
5320: 37 2e 31 2e 31 20 7b 0a 20 20 23 20 4d 61 6b 65  7.1.1 {.  # Make
5330: 20 73 75 72 65 20 61 20 70 72 61 67 6d 61 20 6b   sure a pragma k
5340: 6e 6f 77 73 20 74 6f 20 72 65 61 64 20 74 68 65  nows to read the
5350: 20 73 63 68 65 6d 61 20 69 66 20 69 74 20 6e 65   schema if it ne
5360: 65 64 73 20 74 6f 0a 20 20 64 62 20 63 6c 6f 73  eds to.  db clos
5370: 65 0a 20 20 73 71 6c 69 74 65 33 20 64 62 20 74  e.  sqlite3 db t
5380: 65 73 74 2e 64 62 0a 20 20 63 61 70 74 75 72 65  est.db.  capture
5390: 5f 70 72 61 67 6d 61 20 64 62 20 6f 75 74 20 22  _pragma db out "
53a0: 50 52 41 47 4d 41 20 69 6e 64 65 78 5f 6c 69 73  PRAGMA index_lis
53b0: 74 28 74 33 29 22 0a 20 20 64 62 20 65 76 61 6c  t(t3)".  db eval
53c0: 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 2c 20 22   {SELECT name, "
53d0: 6f 72 69 67 69 6e 22 20 46 52 4f 4d 20 6f 75 74  origin" FROM out
53e0: 20 4f 52 44 45 52 20 42 59 20 6e 61 6d 65 20 44   ORDER BY name D
53f0: 45 53 43 7d 0a 7d 20 7b 74 33 69 31 20 63 20 73  ESC}.} {t3i1 c s
5400: 71 6c 69 74 65 5f 61 75 74 6f 69 6e 64 65 78 5f  qlite_autoindex_
5410: 74 33 5f 31 20 75 7d 0a 64 6f 5f 74 65 73 74 20  t3_1 u}.do_test 
5420: 70 72 61 67 6d 61 2d 37 2e 31 2e 32 20 7b 0a 20  pragma-7.1.2 {. 
5430: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 70   execsql {.    p
5440: 72 61 67 6d 61 20 69 6e 64 65 78 5f 6c 69 73 74  ragma index_list
5450: 28 74 33 5f 62 6f 67 75 73 29 3b 0a 20 20 7d 0a  (t3_bogus);.  }.
5460: 7d 20 7b 7d 0a 7d 20 3b 23 20 69 66 63 61 70 61  } {}.} ;# ifcapa
5470: 62 6c 65 20 73 63 68 65 6d 61 5f 70 72 61 67 6d  ble schema_pragm
5480: 61 73 0a 69 66 63 61 70 61 62 6c 65 20 7b 75 74  as.ifcapable {ut
5490: 66 31 36 7d 20 7b 0a 20 20 69 66 20 7b 5b 70 65  f16} {.  if {[pe
54a0: 72 6d 75 74 61 74 69 6f 6e 5d 20 3d 3d 20 22 22  rmutation] == ""
54b0: 7d 20 7b 0a 20 20 20 20 64 6f 5f 74 65 73 74 20  } {.    do_test 
54c0: 70 72 61 67 6d 61 2d 37 2e 32 20 7b 0a 20 20 20  pragma-7.2 {.   
54d0: 20 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 20 20     db close.    
54e0: 20 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73    sqlite3 db tes
54f0: 74 2e 64 62 0a 20 20 20 20 20 20 63 61 74 63 68  t.db.      catch
5500: 73 71 6c 20 7b 0a 20 20 20 20 20 20 20 20 70 72  sql {.        pr
5510: 61 67 6d 61 20 65 6e 63 6f 64 69 6e 67 3d 62 6f  agma encoding=bo
5520: 67 75 73 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  gus;.      }.   
5530: 20 7d 20 7b 31 20 7b 75 6e 73 75 70 70 6f 72 74   } {1 {unsupport
5540: 65 64 20 65 6e 63 6f 64 69 6e 67 3a 20 62 6f 67  ed encoding: bog
5550: 75 73 7d 7d 0a 20 20 7d 0a 7d 0a 69 66 63 61 70  us}}.  }.}.ifcap
5560: 61 62 6c 65 20 74 65 6d 70 64 62 20 7b 0a 20 20  able tempdb {.  
5570: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 37  do_test pragma-7
5580: 2e 33 20 7b 0a 20 20 20 20 64 62 20 63 6c 6f 73  .3 {.    db clos
5590: 65 0a 20 20 20 20 73 71 6c 69 74 65 33 20 64 62  e.    sqlite3 db
55a0: 20 74 65 73 74 2e 64 62 0a 20 20 20 20 65 78 65   test.db.    exe
55b0: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 70 72 61  csql {.      pra
55c0: 67 6d 61 20 6c 6f 63 6b 5f 73 74 61 74 75 73 3b  gma lock_status;
55d0: 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 6d 61 69 6e  .    }.  } {main
55e0: 20 75 6e 6c 6f 63 6b 65 64 20 74 65 6d 70 20 63   unlocked temp c
55f0: 6c 6f 73 65 64 7d 0a 7d 20 65 6c 73 65 20 7b 0a  losed}.} else {.
5600: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
5610: 2d 37 2e 33 20 7b 0a 20 20 20 20 64 62 20 63 6c  -7.3 {.    db cl
5620: 6f 73 65 0a 20 20 20 20 73 71 6c 69 74 65 33 20  ose.    sqlite3 
5630: 64 62 20 74 65 73 74 2e 64 62 0a 20 20 20 20 65  db test.db.    e
5640: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 70  xecsql {.      p
5650: 72 61 67 6d 61 20 6c 6f 63 6b 5f 73 74 61 74 75  ragma lock_statu
5660: 73 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 6d 61  s;.    }.  } {ma
5670: 69 6e 20 75 6e 6c 6f 63 6b 65 64 7d 0a 7d 0a 0a  in unlocked}.}..
5680: 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  .#--------------
5690: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
56a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
56b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
56c0: 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 54 65 73 74 20  --------.# Test 
56d0: 63 61 73 65 73 20 70 72 61 67 6d 61 2d 38 2e 2a  cases pragma-8.*
56e0: 20 74 65 73 74 20 74 68 65 20 22 50 52 41 47 4d   test the "PRAGM
56f0: 41 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e  A schema_version
5700: 22 20 61 6e 64 20 22 50 52 41 47 4d 41 0a 23 20  " and "PRAGMA.# 
5710: 75 73 65 72 5f 76 65 72 73 69 6f 6e 22 20 73 74  user_version" st
5720: 61 74 65 6d 65 6e 74 73 2e 0a 23 0a 23 20 70 72  atements..#.# pr
5730: 61 67 6d 61 2d 38 2e 31 3a 20 50 52 41 47 4d 41  agma-8.1: PRAGMA
5740: 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 0a   schema_version.
5750: 23 20 70 72 61 67 6d 61 2d 38 2e 32 3a 20 50 52  # pragma-8.2: PR
5760: 41 47 4d 41 20 75 73 65 72 5f 76 65 72 73 69 6f  AGMA user_versio
5770: 6e 0a 23 0a 0a 69 66 63 61 70 61 62 6c 65 20 73  n.#..ifcapable s
5780: 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 20 7b 0a  chema_version {.
5790: 0a 23 20 46 69 72 73 74 20 63 68 65 63 6b 20 74  .# First check t
57a0: 68 61 74 20 77 65 20 63 61 6e 20 73 65 74 20 74  hat we can set t
57b0: 68 65 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f  he schema versio
57c0: 6e 20 61 6e 64 20 74 68 65 6e 20 72 65 74 72 69  n and then retri
57d0: 65 76 65 20 74 68 65 0a 23 20 73 61 6d 65 20 76  eve the.# same v
57e0: 61 6c 75 65 2e 0a 64 6f 5f 74 65 73 74 20 70 72  alue..do_test pr
57f0: 61 67 6d 61 2d 38 2e 31 2e 31 20 7b 0a 20 20 65  agma-8.1.1 {.  e
5800: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41  xecsql {.    PRA
5810: 47 4d 41 20 73 63 68 65 6d 61 5f 76 65 72 73 69  GMA schema_versi
5820: 6f 6e 20 3d 20 31 30 35 3b 0a 20 20 7d 0a 7d 20  on = 105;.  }.} 
5830: 7b 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  {}.do_test pragm
5840: 61 2d 38 2e 31 2e 32 20 7b 0a 20 20 65 78 65 63  a-8.1.2 {.  exec
5850: 73 71 6c 32 20 7b 0a 20 20 20 20 50 52 41 47 4d  sql2 {.    PRAGM
5860: 41 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e  A schema_version
5870: 3b 0a 20 20 7d 0a 7d 20 7b 73 63 68 65 6d 61 5f  ;.  }.} {schema_
5880: 76 65 72 73 69 6f 6e 20 31 30 35 7d 0a 64 6f 5f  version 105}.do_
5890: 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e  test pragma-8.1.
58a0: 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  3 {.  execsql {.
58b0: 20 20 20 20 50 52 41 47 4d 41 20 73 63 68 65 6d      PRAGMA schem
58c0: 61 5f 76 65 72 73 69 6f 6e 20 3d 20 31 30 36 3b  a_version = 106;
58d0: 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73  .  }.} {}.do_tes
58e0: 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e 34 20 7b  t pragma-8.1.4 {
58f0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
5900: 20 50 52 41 47 4d 41 20 73 63 68 65 6d 61 5f 76   PRAGMA schema_v
5910: 65 72 73 69 6f 6e 3b 0a 20 20 7d 0a 7d 20 31 30  ersion;.  }.} 10
5920: 36 0a 0a 23 20 43 68 65 63 6b 20 74 68 61 74 20  6..# Check that 
5930: 63 72 65 61 74 69 6e 67 20 61 20 74 61 62 6c 65  creating a table
5940: 20 6d 6f 64 69 66 69 65 73 20 74 68 65 20 73 63   modifies the sc
5950: 68 65 6d 61 2d 76 65 72 73 69 6f 6e 20 28 74 68  hema-version (th
5960: 69 73 20 69 73 20 72 65 61 6c 6c 79 0a 23 20 74  is is really.# t
5970: 6f 20 76 65 72 69 66 79 20 74 68 61 74 20 74 68  o verify that th
5980: 65 20 76 61 6c 75 65 20 62 65 69 6e 67 20 72 65  e value being re
5990: 61 64 20 69 73 20 69 6e 20 66 61 63 74 20 74 68  ad is in fact th
59a0: 65 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e  e schema version
59b0: 29 2e 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  )..do_test pragm
59c0: 61 2d 38 2e 31 2e 35 20 7b 0a 20 20 65 78 65 63  a-8.1.5 {.  exec
59d0: 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45  sql {.    CREATE
59e0: 20 54 41 42 4c 45 20 74 34 28 61 2c 20 62 2c 20   TABLE t4(a, b, 
59f0: 63 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  c);.    INSERT I
5a00: 4e 54 4f 20 74 34 20 56 41 4c 55 45 53 28 31 2c  NTO t4 VALUES(1,
5a10: 20 32 2c 20 33 29 3b 0a 20 20 20 20 53 45 4c 45   2, 3);.    SELE
5a20: 43 54 20 2a 20 46 52 4f 4d 20 74 34 3b 0a 20 20  CT * FROM t4;.  
5a30: 7d 0a 7d 20 7b 31 20 32 20 33 7d 0a 64 6f 5f 74  }.} {1 2 3}.do_t
5a40: 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e 36  est pragma-8.1.6
5a50: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
5a60: 20 20 20 50 52 41 47 4d 41 20 73 63 68 65 6d 61     PRAGMA schema
5a70: 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 7d 0a 7d 20  _version;.  }.} 
5a80: 31 30 37 0a 0a 23 20 4e 6f 77 20 6f 70 65 6e 20  107..# Now open 
5a90: 61 20 73 65 63 6f 6e 64 20 63 6f 6e 6e 65 63 74  a second connect
5aa0: 69 6f 6e 20 74 6f 20 74 68 65 20 64 61 74 61 62  ion to the datab
5ab0: 61 73 65 2e 20 45 6e 73 75 72 65 20 74 68 61 74  ase. Ensure that
5ac0: 20 63 68 61 6e 67 69 6e 67 20 74 68 65 0a 23 20   changing the.# 
5ad0: 73 63 68 65 6d 61 2d 76 65 72 73 69 6f 6e 20 75  schema-version u
5ae0: 73 69 6e 67 20 74 68 65 20 66 69 72 73 74 20 63  sing the first c
5af0: 6f 6e 6e 65 63 74 69 6f 6e 20 66 6f 72 63 65 73  onnection forces
5b00: 20 74 68 65 20 73 65 63 6f 6e 64 20 63 6f 6e 6e   the second conn
5b10: 65 63 74 69 6f 6e 0a 23 20 74 6f 20 72 65 6c 6f  ection.# to relo
5b20: 61 64 20 74 68 65 20 73 63 68 65 6d 61 2e 20 54  ad the schema. T
5b30: 68 69 73 20 68 61 73 20 74 6f 20 62 65 20 64 6f  his has to be do
5b40: 6e 65 20 75 73 69 6e 67 20 74 68 65 20 43 2d 41  ne using the C-A
5b50: 50 49 20 74 65 73 74 20 66 75 6e 63 74 69 6f 6e  PI test function
5b60: 73 2c 0a 23 20 62 65 63 61 75 73 65 20 74 68 65  s,.# because the
5b70: 20 54 43 4c 20 41 50 49 20 61 63 63 6f 75 6e 74   TCL API account
5b80: 73 20 66 6f 72 20 53 43 48 45 4d 41 5f 45 52 52  s for SCHEMA_ERR
5b90: 4f 52 20 61 6e 64 20 72 65 74 72 69 65 73 20 74  OR and retries t
5ba0: 68 65 20 71 75 65 72 79 2e 0a 64 6f 5f 74 65 73  he query..do_tes
5bb0: 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e 37 20 7b  t pragma-8.1.7 {
5bc0: 0a 20 20 73 71 6c 69 74 65 33 20 64 62 32 20 74  .  sqlite3 db2 t
5bd0: 65 73 74 2e 64 62 3b 20 73 65 74 20 3a 3a 44 42  est.db; set ::DB
5be0: 32 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6e 6e 65  2 [sqlite3_conne
5bf0: 63 74 69 6f 6e 5f 70 6f 69 6e 74 65 72 20 64 62  ction_pointer db
5c00: 32 5d 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  2].  execsql {. 
5c10: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
5c20: 20 74 34 3b 0a 20 20 7d 20 64 62 32 0a 7d 20 7b   t4;.  } db2.} {
5c30: 31 20 32 20 33 7d 0a 64 6f 5f 74 65 73 74 20 70  1 2 3}.do_test p
5c40: 72 61 67 6d 61 2d 38 2e 31 2e 38 20 7b 0a 20 20  ragma-8.1.8 {.  
5c50: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52  execsql {.    PR
5c60: 41 47 4d 41 20 73 63 68 65 6d 61 5f 76 65 72 73  AGMA schema_vers
5c70: 69 6f 6e 20 3d 20 31 30 38 3b 0a 20 20 7d 0a 7d  ion = 108;.  }.}
5c80: 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67   {}.do_test prag
5c90: 6d 61 2d 38 2e 31 2e 39 20 7b 0a 20 20 73 65 74  ma-8.1.9 {.  set
5ca0: 20 3a 3a 53 54 4d 54 20 5b 73 71 6c 69 74 65 33   ::STMT [sqlite3
5cb0: 5f 70 72 65 70 61 72 65 20 24 3a 3a 44 42 32 20  _prepare $::DB2 
5cc0: 22 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74  "SELECT * FROM t
5cd0: 34 22 20 2d 31 20 44 55 4d 4d 59 5d 0a 20 20 73  4" -1 DUMMY].  s
5ce0: 71 6c 69 74 65 33 5f 73 74 65 70 20 24 3a 3a 53  qlite3_step $::S
5cf0: 54 4d 54 0a 7d 20 53 51 4c 49 54 45 5f 45 52 52  TMT.} SQLITE_ERR
5d00: 4f 52 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  OR.do_test pragm
5d10: 61 2d 38 2e 31 2e 31 30 20 7b 0a 20 20 73 71 6c  a-8.1.10 {.  sql
5d20: 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24 3a  ite3_finalize $:
5d30: 3a 53 54 4d 54 0a 7d 20 53 51 4c 49 54 45 5f 53  :STMT.} SQLITE_S
5d40: 43 48 45 4d 41 0a 0a 23 20 4d 61 6b 65 20 73 75  CHEMA..# Make su
5d50: 72 65 20 74 68 65 20 73 63 68 65 6d 61 2d 76 65  re the schema-ve
5d60: 72 73 69 6f 6e 20 63 61 6e 20 62 65 20 6d 61 6e  rsion can be man
5d70: 69 70 75 6c 61 74 65 64 20 69 6e 20 61 6e 20 61  ipulated in an a
5d80: 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65  ttached database
5d90: 2e 0a 66 6f 72 63 65 64 65 6c 65 74 65 20 74 65  ..forcedelete te
5da0: 73 74 32 2e 64 62 0a 66 6f 72 63 65 64 65 6c 65  st2.db.forcedele
5db0: 74 65 20 74 65 73 74 32 2e 64 62 2d 6a 6f 75 72  te test2.db-jour
5dc0: 6e 61 6c 0a 69 66 63 61 70 61 62 6c 65 20 61 74  nal.ifcapable at
5dd0: 74 61 63 68 20 7b 0a 20 20 64 6f 5f 74 65 73 74  tach {.  do_test
5de0: 20 70 72 61 67 6d 61 2d 38 2e 31 2e 31 31 20 7b   pragma-8.1.11 {
5df0: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
5e00: 20 20 20 20 20 41 54 54 41 43 48 20 27 74 65 73       ATTACH 'tes
5e10: 74 32 2e 64 62 27 20 41 53 20 61 75 78 3b 0a 20  t2.db' AS aux;. 
5e20: 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c       CREATE TABL
5e30: 45 20 61 75 78 2e 74 31 28 61 2c 20 62 2c 20 63  E aux.t1(a, b, c
5e40: 29 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20  );.      PRAGMA 
5e50: 61 75 78 2e 73 63 68 65 6d 61 5f 76 65 72 73 69  aux.schema_versi
5e60: 6f 6e 20 3d 20 32 30 35 3b 0a 20 20 20 20 7d 0a  on = 205;.    }.
5e70: 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65 73 74    } {}.  do_test
5e80: 20 70 72 61 67 6d 61 2d 38 2e 31 2e 31 32 20 7b   pragma-8.1.12 {
5e90: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
5ea0: 20 20 20 20 20 50 52 41 47 4d 41 20 61 75 78 2e       PRAGMA aux.
5eb0: 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 3b 0a  schema_version;.
5ec0: 20 20 20 20 7d 0a 20 20 7d 20 32 30 35 0a 7d 0a      }.  } 205.}.
5ed0: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38  do_test pragma-8
5ee0: 2e 31 2e 31 33 20 7b 0a 20 20 65 78 65 63 73 71  .1.13 {.  execsq
5ef0: 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 73  l {.    PRAGMA s
5f00: 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 3b 0a 20  chema_version;. 
5f10: 20 7d 0a 7d 20 31 30 38 0a 0a 23 20 41 6e 64 20   }.} 108..# And 
5f20: 63 68 65 63 6b 20 74 68 61 74 20 6d 6f 64 69 66  check that modif
5f30: 79 69 6e 67 20 74 68 65 20 73 63 68 65 6d 61 2d  ying the schema-
5f40: 76 65 72 73 69 6f 6e 20 69 6e 20 61 6e 20 61 74  version in an at
5f50: 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 0a  tached database.
5f60: 23 20 66 6f 72 63 65 73 20 74 68 65 20 73 65 63  # forces the sec
5f70: 6f 6e 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 74  ond connection t
5f80: 6f 20 72 65 6c 6f 61 64 20 74 68 65 20 73 63 68  o reload the sch
5f90: 65 6d 61 2e 0a 69 66 63 61 70 61 62 6c 65 20 61  ema..ifcapable a
5fa0: 74 74 61 63 68 20 7b 0a 20 20 64 6f 5f 74 65 73  ttach {.  do_tes
5fb0: 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e 31 34 20  t pragma-8.1.14 
5fc0: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 20 64 62  {.    sqlite3 db
5fd0: 32 20 74 65 73 74 2e 64 62 3b 20 73 65 74 20 3a  2 test.db; set :
5fe0: 3a 44 42 32 20 5b 73 71 6c 69 74 65 33 5f 63 6f  :DB2 [sqlite3_co
5ff0: 6e 6e 65 63 74 69 6f 6e 5f 70 6f 69 6e 74 65 72  nnection_pointer
6000: 20 64 62 32 5d 0a 20 20 20 20 65 78 65 63 73 71   db2].    execsq
6010: 6c 20 7b 0a 20 20 20 20 20 20 41 54 54 41 43 48  l {.      ATTACH
6020: 20 27 74 65 73 74 32 2e 64 62 27 20 41 53 20 61   'test2.db' AS a
6030: 75 78 3b 0a 20 20 20 20 20 20 53 45 4c 45 43 54  ux;.      SELECT
6040: 20 2a 20 46 52 4f 4d 20 61 75 78 2e 74 31 3b 0a   * FROM aux.t1;.
6050: 20 20 20 20 7d 20 64 62 32 0a 20 20 7d 20 7b 7d      } db2.  } {}
6060: 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .  do_test pragm
6070: 61 2d 38 2e 31 2e 31 35 20 7b 0a 20 20 20 20 65  a-8.1.15 {.    e
6080: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50  xecsql {.      P
6090: 52 41 47 4d 41 20 61 75 78 2e 73 63 68 65 6d 61  RAGMA aux.schema
60a0: 5f 76 65 72 73 69 6f 6e 20 3d 20 32 30 36 3b 0a  _version = 206;.
60b0: 20 20 20 20 7d 0a 20 20 7d 20 7b 7d 0a 20 20 64      }.  } {}.  d
60c0: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e  o_test pragma-8.
60d0: 31 2e 31 36 20 7b 0a 20 20 20 20 73 65 74 20 3a  1.16 {.    set :
60e0: 3a 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70  :STMT [sqlite3_p
60f0: 72 65 70 61 72 65 20 24 3a 3a 44 42 32 20 22 53  repare $::DB2 "S
6100: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 61 75 78  ELECT * FROM aux
6110: 2e 74 31 22 20 2d 31 20 44 55 4d 4d 59 5d 0a 20  .t1" -1 DUMMY]. 
6120: 20 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20     sqlite3_step 
6130: 24 3a 3a 53 54 4d 54 0a 20 20 7d 20 53 51 4c 49  $::STMT.  } SQLI
6140: 54 45 5f 45 52 52 4f 52 0a 20 20 64 6f 5f 74 65  TE_ERROR.  do_te
6150: 73 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e 31 37  st pragma-8.1.17
6160: 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66   {.    sqlite3_f
6170: 69 6e 61 6c 69 7a 65 20 24 3a 3a 53 54 4d 54 0a  inalize $::STMT.
6180: 20 20 7d 20 53 51 4c 49 54 45 5f 53 43 48 45 4d    } SQLITE_SCHEM
6190: 41 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67  A.  do_test prag
61a0: 6d 61 2d 38 2e 31 2e 31 38 20 7b 0a 20 20 20 20  ma-8.1.18 {.    
61b0: 64 62 32 20 63 6c 6f 73 65 0a 20 20 7d 20 7b 7d  db2 close.  } {}
61c0: 0a 7d 0a 0a 23 20 4e 6f 77 20 74 65 73 74 20 74  .}..# Now test t
61d0: 68 61 74 20 74 68 65 20 75 73 65 72 2d 76 65 72  hat the user-ver
61e0: 73 69 6f 6e 20 63 61 6e 20 62 65 20 72 65 61 64  sion can be read
61f0: 20 61 6e 64 20 77 72 69 74 74 65 6e 20 28 61 6e   and written (an
6200: 64 20 74 68 61 74 20 77 65 20 61 72 65 6e 27 74  d that we aren't
6210: 0a 23 20 61 63 63 69 64 65 6e 74 61 6c 6c 79 20  .# accidentally 
6220: 6d 61 6e 69 70 75 6c 61 74 69 6e 67 20 74 68 65  manipulating the
6230: 20 73 63 68 65 6d 61 2d 76 65 72 73 69 6f 6e 20   schema-version 
6240: 69 6e 73 74 65 61 64 29 2e 0a 64 6f 5f 74 65 73  instead)..do_tes
6250: 74 20 70 72 61 67 6d 61 2d 38 2e 32 2e 31 20 7b  t pragma-8.2.1 {
6260: 0a 20 20 65 78 65 63 73 71 6c 32 20 7b 0a 20 20  .  execsql2 {.  
6270: 20 20 50 52 41 47 4d 41 20 75 73 65 72 5f 76 65    PRAGMA user_ve
6280: 72 73 69 6f 6e 3b 0a 20 20 7d 0a 7d 20 7b 75 73  rsion;.  }.} {us
6290: 65 72 5f 76 65 72 73 69 6f 6e 20 30 7d 0a 64 6f  er_version 0}.do
62a0: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 32  _test pragma-8.2
62b0: 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .2 {.  execsql {
62c0: 0a 20 20 20 20 50 52 41 47 4d 41 20 75 73 65 72  .    PRAGMA user
62d0: 5f 76 65 72 73 69 6f 6e 20 3d 20 32 3b 0a 20 20  _version = 2;.  
62e0: 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 70  }.} {}.do_test p
62f0: 72 61 67 6d 61 2d 38 2e 32 2e 33 2e 31 20 7b 0a  ragma-8.2.3.1 {.
6300: 20 20 65 78 65 63 73 71 6c 32 20 7b 0a 20 20 20    execsql2 {.   
6310: 20 50 52 41 47 4d 41 20 75 73 65 72 5f 76 65 72   PRAGMA user_ver
6320: 73 69 6f 6e 3b 0a 20 20 7d 0a 7d 20 7b 75 73 65  sion;.  }.} {use
6330: 72 5f 76 65 72 73 69 6f 6e 20 32 7d 0a 64 6f 5f  r_version 2}.do_
6340: 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 32 2e  test pragma-8.2.
6350: 33 2e 32 20 7b 0a 20 20 64 62 20 63 6c 6f 73 65  3.2 {.  db close
6360: 0a 20 20 73 71 6c 69 74 65 33 20 64 62 20 74 65  .  sqlite3 db te
6370: 73 74 2e 64 62 0a 20 20 65 78 65 63 73 71 6c 20  st.db.  execsql 
6380: 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 75 73 65  {.    PRAGMA use
6390: 72 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 7d 0a 7d  r_version;.  }.}
63a0: 20 7b 32 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61   {2}.do_test pra
63b0: 67 6d 61 2d 38 2e 32 2e 34 2e 31 20 7b 0a 20 20  gma-8.2.4.1 {.  
63c0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52  execsql {.    PR
63d0: 41 47 4d 41 20 73 63 68 65 6d 61 5f 76 65 72 73  AGMA schema_vers
63e0: 69 6f 6e 3b 0a 20 20 7d 0a 7d 20 7b 31 30 38 7d  ion;.  }.} {108}
63f0: 0a 69 66 63 61 70 61 62 6c 65 20 76 61 63 75 75  .ifcapable vacuu
6400: 6d 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 70 72  m {.  do_test pr
6410: 61 67 6d 61 2d 38 2e 32 2e 34 2e 32 20 7b 0a 20  agma-8.2.4.2 {. 
6420: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
6430: 20 20 20 56 41 43 55 55 4d 3b 0a 20 20 20 20 20     VACUUM;.     
6440: 20 50 52 41 47 4d 41 20 75 73 65 72 5f 76 65 72   PRAGMA user_ver
6450: 73 69 6f 6e 3b 0a 20 20 20 20 7d 0a 20 20 7d 20  sion;.    }.  } 
6460: 7b 32 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72  {2}.  do_test pr
6470: 61 67 6d 61 2d 38 2e 32 2e 34 2e 33 20 7b 0a 20  agma-8.2.4.3 {. 
6480: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
6490: 20 20 20 50 52 41 47 4d 41 20 73 63 68 65 6d 61     PRAGMA schema
64a0: 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 20 20 7d 0a  _version;.    }.
64b0: 20 20 7d 20 7b 31 30 39 7d 0a 7d 0a 0a 69 66 63    } {109}.}..ifc
64c0: 61 70 61 62 6c 65 20 61 74 74 61 63 68 20 7b 0a  apable attach {.
64d0: 20 20 64 62 20 65 76 61 6c 20 7b 41 54 54 41 43    db eval {ATTAC
64e0: 48 20 27 74 65 73 74 32 2e 64 62 27 20 41 53 20  H 'test2.db' AS 
64f0: 61 75 78 7d 0a 20 20 0a 20 20 23 20 43 68 65 63  aux}.  .  # Chec
6500: 6b 20 74 68 61 74 20 74 68 65 20 75 73 65 72 2d  k that the user-
6510: 76 65 72 73 69 6f 6e 20 69 6e 20 74 68 65 20 61  version in the a
6520: 75 78 69 6c 61 72 79 20 64 61 74 61 62 61 73 65  uxilary database
6530: 20 63 61 6e 20 62 65 20 6d 61 6e 69 70 75 6c 61   can be manipula
6540: 74 65 64 20 28 0a 20 20 23 20 61 6e 64 20 74 68  ted (.  # and th
6550: 61 74 20 77 65 20 61 72 65 6e 27 74 20 61 63 63  at we aren't acc
6560: 69 64 65 6e 74 61 6c 6c 79 20 6d 61 6e 69 70 75  identally manipu
6570: 6c 61 74 69 6e 67 20 74 68 65 20 73 61 6d 65 20  lating the same 
6580: 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 62 29 2e  in the main db).
6590: 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .  do_test pragm
65a0: 61 2d 38 2e 32 2e 35 20 7b 0a 20 20 20 20 65 78  a-8.2.5 {.    ex
65b0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52  ecsql {.      PR
65c0: 41 47 4d 41 20 61 75 78 2e 75 73 65 72 5f 76 65  AGMA aux.user_ve
65d0: 72 73 69 6f 6e 3b 0a 20 20 20 20 7d 0a 20 20 7d  rsion;.    }.  }
65e0: 20 7b 30 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70   {0}.  do_test p
65f0: 72 61 67 6d 61 2d 38 2e 32 2e 36 20 7b 0a 20 20  ragma-8.2.6 {.  
6600: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
6610: 20 20 50 52 41 47 4d 41 20 61 75 78 2e 75 73 65    PRAGMA aux.use
6620: 72 5f 76 65 72 73 69 6f 6e 20 3d 20 33 3b 0a 20  r_version = 3;. 
6630: 20 20 20 7d 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f     }.  } {}.  do
6640: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 32  _test pragma-8.2
6650: 2e 37 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  .7 {.    execsql
6660: 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20   {.      PRAGMA 
6670: 61 75 78 2e 75 73 65 72 5f 76 65 72 73 69 6f 6e  aux.user_version
6680: 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 33 7d 0a  ;.    }.  } {3}.
6690: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
66a0: 2d 38 2e 32 2e 38 20 7b 0a 20 20 20 20 65 78 65  -8.2.8 {.    exe
66b0: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41  csql {.      PRA
66c0: 47 4d 41 20 6d 61 69 6e 2e 75 73 65 72 5f 76 65  GMA main.user_ve
66d0: 72 73 69 6f 6e 3b 0a 20 20 20 20 7d 0a 20 20 7d  rsion;.    }.  }
66e0: 20 7b 32 7d 0a 20 20 0a 20 20 23 20 4e 6f 77 20   {2}.  .  # Now 
66f0: 63 68 65 63 6b 20 74 68 61 74 20 61 20 52 4f 4c  check that a ROL
6700: 4c 42 41 43 4b 20 72 65 73 65 74 73 20 74 68 65  LBACK resets the
6710: 20 75 73 65 72 2d 76 65 72 73 69 6f 6e 20 69 66   user-version if
6720: 20 69 74 20 68 61 73 20 62 65 65 6e 20 6d 6f 64   it has been mod
6730: 69 66 69 65 64 0a 20 20 23 20 77 69 74 68 69 6e  ified.  # within
6740: 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a   a transaction..
6750: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
6760: 2d 38 2e 32 2e 39 20 7b 0a 20 20 20 20 65 78 65  -8.2.9 {.    exe
6770: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 42 45 47  csql {.      BEG
6780: 49 4e 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41  IN;.      PRAGMA
6790: 20 61 75 78 2e 75 73 65 72 5f 76 65 72 73 69 6f   aux.user_versio
67a0: 6e 20 3d 20 31 30 3b 0a 20 20 20 20 20 20 50 52  n = 10;.      PR
67b0: 41 47 4d 41 20 75 73 65 72 5f 76 65 72 73 69 6f  AGMA user_versio
67c0: 6e 20 3d 20 31 31 3b 0a 20 20 20 20 7d 0a 20 20  n = 11;.    }.  
67d0: 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70  } {}.  do_test p
67e0: 72 61 67 6d 61 2d 38 2e 32 2e 31 30 20 7b 0a 20  ragma-8.2.10 {. 
67f0: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
6800: 20 20 20 50 52 41 47 4d 41 20 61 75 78 2e 75 73     PRAGMA aux.us
6810: 65 72 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 20 20  er_version;.    
6820: 7d 0a 20 20 7d 20 7b 31 30 7d 0a 20 20 64 6f 5f  }.  } {10}.  do_
6830: 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 32 2e  test pragma-8.2.
6840: 31 31 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  11 {.    execsql
6850: 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20   {.      PRAGMA 
6860: 6d 61 69 6e 2e 75 73 65 72 5f 76 65 72 73 69 6f  main.user_versio
6870: 6e 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 31 31  n;.    }.  } {11
6880: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67  }.  do_test prag
6890: 6d 61 2d 38 2e 32 2e 31 32 20 7b 0a 20 20 20 20  ma-8.2.12 {.    
68a0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
68b0: 52 4f 4c 4c 42 41 43 4b 3b 0a 20 20 20 20 20 20  ROLLBACK;.      
68c0: 50 52 41 47 4d 41 20 61 75 78 2e 75 73 65 72 5f  PRAGMA aux.user_
68d0: 76 65 72 73 69 6f 6e 3b 0a 20 20 20 20 7d 0a 20  version;.    }. 
68e0: 20 7d 20 7b 33 7d 0a 20 20 64 6f 5f 74 65 73 74   } {3}.  do_test
68f0: 20 70 72 61 67 6d 61 2d 38 2e 32 2e 31 33 20 7b   pragma-8.2.13 {
6900: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
6910: 20 20 20 20 20 50 52 41 47 4d 41 20 6d 61 69 6e       PRAGMA main
6920: 2e 75 73 65 72 5f 76 65 72 73 69 6f 6e 3b 0a 20  .user_version;. 
6930: 20 20 20 7d 0a 20 20 7d 20 7b 32 7d 0a 7d 0a 0a     }.  } {2}.}..
6940: 23 20 54 72 79 20 61 20 6e 65 67 61 74 69 76 65  # Try a negative
6950: 20 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20 75   value for the u
6960: 73 65 72 2d 76 65 72 73 69 6f 6e 0a 64 6f 5f 74  ser-version.do_t
6970: 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 32 2e 31  est pragma-8.2.1
6980: 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  4 {.  execsql {.
6990: 20 20 20 20 50 52 41 47 4d 41 20 75 73 65 72 5f      PRAGMA user_
69a0: 76 65 72 73 69 6f 6e 20 3d 20 2d 34 35 30 3b 0a  version = -450;.
69b0: 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74    }.} {}.do_test
69c0: 20 70 72 61 67 6d 61 2d 38 2e 32 2e 31 35 20 7b   pragma-8.2.15 {
69d0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
69e0: 20 50 52 41 47 4d 41 20 75 73 65 72 5f 76 65 72   PRAGMA user_ver
69f0: 73 69 6f 6e 3b 0a 20 20 7d 0a 7d 20 7b 2d 34 35  sion;.  }.} {-45
6a00: 30 7d 0a 7d 20 3b 20 23 20 69 66 63 61 70 61 62  0}.} ; # ifcapab
6a10: 6c 65 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f  le schema_versio
6a20: 6e 0a 0a 23 20 43 68 65 63 6b 20 74 6f 20 73 65  n..# Check to se
6a30: 65 20 69 66 20 54 45 4d 50 5f 53 54 4f 52 45 20  e if TEMP_STORE 
6a40: 69 73 20 6d 65 6d 6f 72 79 20 6f 72 20 64 69 73  is memory or dis
6a50: 6b 2e 20 20 52 65 74 75 72 6e 20 73 74 72 69 6e  k.  Return strin
6a60: 67 73 0a 23 20 22 6d 65 6d 6f 72 79 22 20 6f 72  gs.# "memory" or
6a70: 20 22 64 69 73 6b 22 20 61 73 20 61 70 70 72 6f   "disk" as appro
6a80: 70 72 69 61 74 65 2e 0a 23 0a 70 72 6f 63 20 63  priate..#.proc c
6a90: 68 65 63 6b 5f 74 65 6d 70 5f 73 74 6f 72 65 20  heck_temp_store 
6aa0: 7b 7d 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b  {} {.  db eval {
6ab0: 43 52 45 41 54 45 20 54 45 4d 50 20 54 41 42 4c  CREATE TEMP TABL
6ac0: 45 20 49 46 20 4e 4f 54 20 45 58 49 53 54 53 20  E IF NOT EXISTS 
6ad0: 61 28 62 29 7d 0a 20 20 64 62 20 65 76 61 6c 20  a(b)}.  db eval 
6ae0: 7b 50 52 41 47 4d 41 20 64 61 74 61 62 61 73 65  {PRAGMA database
6af0: 5f 6c 69 73 74 7d 20 7b 0a 20 20 20 20 69 66 20  _list} {.    if 
6b00: 7b 24 6e 61 6d 65 3d 3d 22 74 65 6d 70 22 7d 20  {$name=="temp"} 
6b10: 7b 0a 20 20 20 20 20 20 73 65 74 20 62 74 20 5b  {.      set bt [
6b20: 62 74 72 65 65 5f 66 72 6f 6d 5f 64 62 20 64 62  btree_from_db db
6b30: 20 31 5d 0a 20 20 20 20 20 20 69 66 20 7b 5b 62   1].      if {[b
6b40: 74 72 65 65 5f 69 73 6d 65 6d 64 62 20 24 62 74  tree_ismemdb $bt
6b50: 5d 7d 20 7b 0a 20 20 20 20 20 20 20 20 72 65 74  ]} {.        ret
6b60: 75 72 6e 20 22 6d 65 6d 6f 72 79 22 0a 20 20 20  urn "memory".   
6b70: 20 20 20 7d 0a 20 20 20 20 20 20 72 65 74 75 72     }.      retur
6b80: 6e 20 22 64 69 73 6b 22 0a 20 20 20 20 7d 0a 20  n "disk".    }. 
6b90: 20 7d 0a 20 20 72 65 74 75 72 6e 20 22 75 6e 6b   }.  return "unk
6ba0: 6e 6f 77 6e 22 0a 7d 0a 0a 23 20 41 70 70 6c 69  nown".}..# Appli
6bb0: 63 61 74 69 6f 6e 5f 49 44 0a 23 0a 64 6f 5f 74  cation_ID.#.do_t
6bc0: 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 33 2e 31  est pragma-8.3.1
6bd0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
6be0: 20 20 20 50 52 41 47 4d 41 20 61 70 70 6c 69 63     PRAGMA applic
6bf0: 61 74 69 6f 6e 5f 69 64 3b 0a 20 20 7d 0a 7d 20  ation_id;.  }.} 
6c00: 7b 30 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67  {0}.do_test prag
6c10: 6d 61 2d 38 2e 33 2e 32 20 7b 0a 20 20 65 78 65  ma-8.3.2 {.  exe
6c20: 63 73 71 6c 20 7b 50 52 41 47 4d 41 20 41 70 70  csql {PRAGMA App
6c30: 6c 69 63 61 74 69 6f 6e 5f 49 44 28 31 32 33 34  lication_ID(1234
6c40: 35 29 3b 20 50 52 41 47 4d 41 20 61 70 70 6c 69  5); PRAGMA appli
6c50: 63 61 74 69 6f 6e 5f 69 64 3b 7d 0a 7d 20 7b 31  cation_id;}.} {1
6c60: 32 33 34 35 7d 0a 0a 23 20 54 65 73 74 20 74 65  2345}..# Test te
6c70: 6d 70 5f 73 74 6f 72 65 20 61 6e 64 20 74 65 6d  mp_store and tem
6c80: 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72  p_store_director
6c90: 79 20 70 72 61 67 6d 61 73 0a 23 0a 69 66 63 61  y pragmas.#.ifca
6ca0: 70 61 62 6c 65 20 70 61 67 65 72 5f 70 72 61 67  pable pager_prag
6cb0: 6d 61 73 20 7b 0a 64 6f 5f 74 65 73 74 20 70 72  mas {.do_test pr
6cc0: 61 67 6d 61 2d 39 2e 31 20 7b 0a 20 20 64 62 20  agma-9.1 {.  db 
6cd0: 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74 65 33 20  close.  sqlite3 
6ce0: 64 62 20 74 65 73 74 2e 64 62 0a 20 20 65 78 65  db test.db.  exe
6cf0: 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d  csql {.    PRAGM
6d00: 41 20 74 65 6d 70 5f 73 74 6f 72 65 3b 0a 20 20  A temp_store;.  
6d10: 7d 0a 7d 20 7b 30 7d 0a 69 66 20 7b 24 54 45 4d  }.} {0}.if {$TEM
6d20: 50 5f 53 54 4f 52 45 3c 3d 31 7d 20 7b 0a 20 20  P_STORE<=1} {.  
6d30: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 39  do_test pragma-9
6d40: 2e 31 2e 31 20 7b 0a 20 20 20 20 63 68 65 63 6b  .1.1 {.    check
6d50: 5f 74 65 6d 70 5f 73 74 6f 72 65 0a 20 20 7d 20  _temp_store.  } 
6d60: 7b 64 69 73 6b 7d 0a 7d 20 65 6c 73 65 20 7b 0a  {disk}.} else {.
6d70: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
6d80: 2d 39 2e 31 2e 31 20 7b 0a 20 20 20 20 63 68 65  -9.1.1 {.    che
6d90: 63 6b 5f 74 65 6d 70 5f 73 74 6f 72 65 0a 20 20  ck_temp_store.  
6da0: 7d 20 7b 6d 65 6d 6f 72 79 7d 0a 7d 0a 0a 64 6f  } {memory}.}..do
6db0: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 39 2e 32  _test pragma-9.2
6dc0: 20 7b 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20 20   {.  db close.  
6dd0: 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e  sqlite3 db test.
6de0: 64 62 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  db.  execsql {. 
6df0: 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73     PRAGMA temp_s
6e00: 74 6f 72 65 3d 66 69 6c 65 3b 0a 20 20 20 20 50  tore=file;.    P
6e10: 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65  RAGMA temp_store
6e20: 3b 0a 20 20 7d 0a 7d 20 7b 31 7d 0a 69 66 20 7b  ;.  }.} {1}.if {
6e30: 24 54 45 4d 50 5f 53 54 4f 52 45 3d 3d 33 7d 20  $TEMP_STORE==3} 
6e40: 7b 0a 20 20 23 20 57 68 65 6e 20 54 45 4d 50 5f  {.  # When TEMP_
6e50: 53 54 4f 52 45 20 69 73 20 33 2c 20 61 6c 77 61  STORE is 3, alwa
6e60: 79 73 20 75 73 65 20 6d 65 6d 6f 72 79 20 72 65  ys use memory re
6e70: 67 61 72 64 6c 65 73 73 20 6f 66 20 70 72 61 67  gardless of prag
6e80: 6d 61 20 73 65 74 74 69 6e 67 73 2e 0a 20 20 64  ma settings..  d
6e90: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 39 2e  o_test pragma-9.
6ea0: 32 2e 31 20 7b 0a 20 20 20 20 63 68 65 63 6b 5f  2.1 {.    check_
6eb0: 74 65 6d 70 5f 73 74 6f 72 65 0a 20 20 7d 20 7b  temp_store.  } {
6ec0: 6d 65 6d 6f 72 79 7d 0a 7d 20 65 6c 73 65 20 7b  memory}.} else {
6ed0: 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .  do_test pragm
6ee0: 61 2d 39 2e 32 2e 31 20 7b 0a 20 20 20 20 63 68  a-9.2.1 {.    ch
6ef0: 65 63 6b 5f 74 65 6d 70 5f 73 74 6f 72 65 0a 20  eck_temp_store. 
6f00: 20 7d 20 7b 64 69 73 6b 7d 0a 7d 0a 0a 64 6f 5f   } {disk}.}..do_
6f10: 74 65 73 74 20 70 72 61 67 6d 61 2d 39 2e 33 20  test pragma-9.3 
6f20: 7b 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 73  {.  db close.  s
6f30: 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64  qlite3 db test.d
6f40: 62 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  b.  execsql {.  
6f50: 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74    PRAGMA temp_st
6f60: 6f 72 65 3d 6d 65 6d 6f 72 79 3b 0a 20 20 20 20  ore=memory;.    
6f70: 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72  PRAGMA temp_stor
6f80: 65 3b 0a 20 20 7d 0a 7d 20 7b 32 7d 0a 69 66 20  e;.  }.} {2}.if 
6f90: 7b 24 54 45 4d 50 5f 53 54 4f 52 45 3d 3d 30 7d  {$TEMP_STORE==0}
6fa0: 20 7b 0a 20 20 23 20 57 68 65 6e 20 54 45 4d 50   {.  # When TEMP
6fb0: 5f 53 54 4f 52 45 20 69 73 20 30 2c 20 61 6c 77  _STORE is 0, alw
6fc0: 61 79 73 20 75 73 65 20 74 68 65 20 64 69 73 6b  ays use the disk
6fd0: 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 70   regardless of p
6fe0: 72 61 67 6d 61 20 73 65 74 74 69 6e 67 73 2e 0a  ragma settings..
6ff0: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
7000: 2d 39 2e 33 2e 31 20 7b 0a 20 20 20 20 63 68 65  -9.3.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 33 2e 31 20 7b 0a 20 20 20 20 63  ma-9.3.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 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .4 {.  execsql {
7090: 0a 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70  .    PRAGMA temp
70a0: 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79  _store_directory
70b0: 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 69 66 63 61 70  ;.  }.} {}.ifcap
70c0: 61 62 6c 65 20 77 73 64 20 7b 0a 20 20 64 6f 5f  able wsd {.  do_
70d0: 74 65 73 74 20 70 72 61 67 6d 61 2d 39 2e 35 20  test pragma-9.5 
70e0: 7b 0a 20 20 20 20 73 65 74 20 70 77 64 20 5b 73  {.    set pwd [s
70f0: 74 72 69 6e 67 20 6d 61 70 20 7b 27 20 27 27 7d  tring map {' ''}
7100: 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d   [file nativenam
7110: 65 20 5b 67 65 74 5f 70 77 64 5d 5d 5d 0a 20 20  e [get_pwd]]].  
7120: 20 20 65 78 65 63 73 71 6c 20 22 0a 20 20 20 20    execsql ".    
7130: 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74    PRAGMA temp_st
7140: 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 3d 27 24  ore_directory='$
7150: 70 77 64 27 3b 0a 20 20 20 20 22 0a 20 20 7d 20  pwd';.    ".  } 
7160: 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61  {}.  do_test pra
7170: 67 6d 61 2d 39 2e 36 20 7b 0a 20 20 20 20 65 78  gma-9.6 {.    ex
7180: 65 63 73 71 6c 20 7b 20 0a 20 20 20 20 20 20 50  ecsql { .      P
7190: 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65  RAGMA temp_store
71a0: 5f 64 69 72 65 63 74 6f 72 79 3b 0a 20 20 20 20  _directory;.    
71b0: 7d 0a 20 20 7d 20 5b 6c 69 73 74 20 5b 66 69 6c  }.  } [list [fil
71c0: 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 67 65  e nativename [ge
71d0: 74 5f 70 77 64 5d 5d 5d 0a 20 20 64 6f 5f 74 65  t_pwd]]].  do_te
71e0: 73 74 20 70 72 61 67 6d 61 2d 39 2e 37 20 7b 0a  st pragma-9.7 {.
71f0: 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b 20 0a      catchsql { .
7200: 20 20 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d        PRAGMA tem
7210: 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72  p_store_director
7220: 79 3d 27 2f 4e 4f 4e 2f 45 58 49 53 54 45 4e 54  y='/NON/EXISTENT
7230: 2f 50 41 54 48 2f 46 4f 4f 42 41 52 27 3b 0a 20  /PATH/FOOBAR';. 
7240: 20 20 20 7d 0a 20 20 7d 20 7b 31 20 7b 6e 6f 74     }.  } {1 {not
7250: 20 61 20 77 72 69 74 61 62 6c 65 20 64 69 72 65   a writable dire
7260: 63 74 6f 72 79 7d 7d 0a 20 20 64 6f 5f 74 65 73  ctory}}.  do_tes
7270: 74 20 70 72 61 67 6d 61 2d 39 2e 38 20 7b 0a 20  t pragma-9.8 {. 
7280: 20 20 20 65 78 65 63 73 71 6c 20 7b 20 0a 20 20     execsql { .  
7290: 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f      PRAGMA temp_
72a0: 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 3d  store_directory=
72b0: 27 27 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 7d  '';.    }.  } {}
72c0: 0a 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78  .  if {![info ex
72d0: 69 73 74 73 20 54 45 4d 50 5f 53 54 4f 52 45 5d  ists TEMP_STORE]
72e0: 20 7c 7c 20 24 54 45 4d 50 5f 53 54 4f 52 45 3c   || $TEMP_STORE<
72f0: 3d 31 7d 20 7b 0a 20 20 20 20 69 66 63 61 70 61  =1} {.    ifcapa
7300: 62 6c 65 20 74 65 6d 70 64 62 20 7b 0a 20 20 20  ble tempdb {.   
7310: 20 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d     do_test pragm
7320: 61 2d 39 2e 39 20 7b 0a 20 20 20 20 20 20 20 20  a-9.9 {.        
7330: 65 78 65 63 73 71 6c 20 7b 20 0a 20 20 20 20 20  execsql { .     
7340: 20 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70       PRAGMA temp
7350: 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79  _store_directory
7360: 3b 0a 20 20 20 20 20 20 20 20 20 20 50 52 41 47  ;.          PRAG
7370: 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 3d 46 49  MA temp_store=FI
7380: 4c 45 3b 0a 20 20 20 20 20 20 20 20 20 20 43 52  LE;.          CR
7390: 45 41 54 45 20 54 45 4d 50 20 54 41 42 4c 45 20  EATE TEMP TABLE 
73a0: 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63  temp_store_direc
73b0: 74 6f 72 79 5f 74 65 73 74 28 61 20 69 6e 74 65  tory_test(a inte
73c0: 67 65 72 29 3b 0a 20 20 20 20 20 20 20 20 20 20  ger);.          
73d0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 65 6d 70  INSERT INTO temp
73e0: 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79  _store_directory
73f0: 5f 74 65 73 74 20 76 61 6c 75 65 73 20 28 32 29  _test values (2)
7400: 3b 0a 20 20 20 20 20 20 20 20 20 20 53 45 4c 45  ;.          SELE
7410: 43 54 20 2a 20 46 52 4f 4d 20 74 65 6d 70 5f 73  CT * FROM temp_s
7420: 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 5f 74  tore_directory_t
7430: 65 73 74 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  est;.        }. 
7440: 20 20 20 20 20 7d 20 7b 32 7d 0a 20 20 20 20 20       } {2}.     
7450: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
7460: 39 2e 31 30 20 7b 0a 20 20 20 20 20 20 20 20 63  9.10 {.        c
7470: 61 74 63 68 73 71 6c 20 22 0a 20 20 20 20 20 20  atchsql ".      
7480: 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f      PRAGMA temp_
7490: 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 3d  store_directory=
74a0: 27 24 70 77 64 27 3b 0a 20 20 20 20 20 20 20 20  '$pwd';.        
74b0: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
74c0: 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63  temp_store_direc
74d0: 74 6f 72 79 5f 74 65 73 74 3b 0a 20 20 20 20 20  tory_test;.     
74e0: 20 20 20 22 0a 20 20 20 20 20 20 7d 20 7b 31 20     ".      } {1 
74f0: 7b 6e 6f 20 73 75 63 68 20 74 61 62 6c 65 3a 20  {no such table: 
7500: 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63  temp_store_direc
7510: 74 6f 72 79 5f 74 65 73 74 7d 7d 0a 20 20 20 20  tory_test}}.    
7520: 7d 0a 20 20 7d 0a 7d 0a 64 6f 5f 74 65 73 74 20  }.  }.}.do_test 
7530: 70 72 61 67 6d 61 2d 39 2e 31 31 20 7b 0a 20 20  pragma-9.11 {.  
7540: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52  execsql {.    PR
7550: 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 20  AGMA temp_store 
7560: 3d 20 30 3b 0a 20 20 20 20 50 52 41 47 4d 41 20  = 0;.    PRAGMA 
7570: 74 65 6d 70 5f 73 74 6f 72 65 3b 0a 20 20 7d 0a  temp_store;.  }.
7580: 7d 20 7b 30 7d 0a 64 6f 5f 74 65 73 74 20 70 72  } {0}.do_test pr
7590: 61 67 6d 61 2d 39 2e 31 32 20 7b 0a 20 20 65 78  agma-9.12 {.  ex
75a0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47  ecsql {.    PRAG
75b0: 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 20 3d 20  MA temp_store = 
75c0: 31 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 74 65  1;.    PRAGMA te
75d0: 6d 70 5f 73 74 6f 72 65 3b 0a 20 20 7d 0a 7d 20  mp_store;.  }.} 
75e0: 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67  {1}.do_test prag
75f0: 6d 61 2d 39 2e 31 33 20 7b 0a 20 20 65 78 65 63  ma-9.13 {.  exec
7600: 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41  sql {.    PRAGMA
7610: 20 74 65 6d 70 5f 73 74 6f 72 65 20 3d 20 32 3b   temp_store = 2;
7620: 0a 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70  .    PRAGMA temp
7630: 5f 73 74 6f 72 65 3b 0a 20 20 7d 0a 7d 20 7b 32  _store;.  }.} {2
7640: 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  }.do_test pragma
7650: 2d 39 2e 31 34 20 7b 0a 20 20 65 78 65 63 73 71  -9.14 {.  execsq
7660: 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 74  l {.    PRAGMA t
7670: 65 6d 70 5f 73 74 6f 72 65 20 3d 20 33 3b 0a 20  emp_store = 3;. 
7680: 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73     PRAGMA temp_s
7690: 74 6f 72 65 3b 0a 20 20 7d 0a 7d 20 7b 30 7d 0a  tore;.  }.} {0}.
76a0: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 39  do_test pragma-9
76b0: 2e 31 35 20 7b 0a 20 20 63 61 74 63 68 73 71 6c  .15 {.  catchsql
76c0: 20 7b 0a 20 20 20 20 42 45 47 49 4e 20 45 58 43   {.    BEGIN EXC
76d0: 4c 55 53 49 56 45 3b 0a 20 20 20 20 43 52 45 41  LUSIVE;.    CREA
76e0: 54 45 20 54 45 4d 50 20 54 41 42 4c 45 20 74 65  TE TEMP TABLE te
76f0: 6d 70 5f 74 61 62 6c 65 28 74 29 3b 0a 20 20 20  mp_table(t);.   
7700: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 65 6d   INSERT INTO tem
7710: 70 5f 74 61 62 6c 65 20 56 41 4c 55 45 53 28 27  p_table VALUES('
7720: 76 61 6c 75 61 62 6c 65 20 64 61 74 61 27 29 3b  valuable data');
7730: 0a 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70  .    PRAGMA temp
7740: 5f 73 74 6f 72 65 20 3d 20 31 3b 0a 20 20 7d 0a  _store = 1;.  }.
7750: 7d 20 7b 31 20 7b 74 65 6d 70 6f 72 61 72 79 20  } {1 {temporary 
7760: 73 74 6f 72 61 67 65 20 63 61 6e 6e 6f 74 20 62  storage cannot b
7770: 65 20 63 68 61 6e 67 65 64 20 66 72 6f 6d 20 77  e changed from w
7780: 69 74 68 69 6e 20 61 20 74 72 61 6e 73 61 63 74  ithin a transact
7790: 69 6f 6e 7d 7d 0a 64 6f 5f 74 65 73 74 20 70 72  ion}}.do_test pr
77a0: 61 67 6d 61 2d 39 2e 31 36 20 7b 0a 20 20 65 78  agma-9.16 {.  ex
77b0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45  ecsql {.    SELE
77c0: 43 54 20 2a 20 46 52 4f 4d 20 74 65 6d 70 5f 74  CT * FROM temp_t
77d0: 61 62 6c 65 3b 0a 20 20 20 20 43 4f 4d 4d 49 54  able;.    COMMIT
77e0: 3b 0a 20 20 7d 0a 7d 20 7b 7b 76 61 6c 75 61 62  ;.  }.} {{valuab
77f0: 6c 65 20 64 61 74 61 7d 7d 0a 0a 64 6f 5f 74 65  le data}}..do_te
7800: 73 74 20 70 72 61 67 6d 61 2d 39 2e 31 37 20 7b  st pragma-9.17 {
7810: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
7820: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 65 6d   INSERT INTO tem
7830: 70 5f 74 61 62 6c 65 20 56 41 4c 55 45 53 28 27  p_table VALUES('
7840: 76 61 6c 75 61 62 6c 65 20 64 61 74 61 20 49 49  valuable data II
7850: 27 29 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a  ');.    SELECT *
7860: 20 46 52 4f 4d 20 74 65 6d 70 5f 74 61 62 6c 65   FROM temp_table
7870: 3b 0a 20 20 7d 0a 7d 20 7b 7b 76 61 6c 75 61 62  ;.  }.} {{valuab
7880: 6c 65 20 64 61 74 61 7d 20 7b 76 61 6c 75 61 62  le data} {valuab
7890: 6c 65 20 64 61 74 61 20 49 49 7d 7d 0a 0a 64 6f  le data II}}..do
78a0: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 39 2e 31  _test pragma-9.1
78b0: 38 20 7b 0a 20 20 73 65 74 20 72 63 20 5b 63 61  8 {.  set rc [ca
78c0: 74 63 68 20 7b 0a 20 20 20 20 64 62 20 65 76 61  tch {.    db eva
78d0: 6c 20 7b 53 45 4c 45 43 54 20 74 20 46 52 4f 4d  l {SELECT t FROM
78e0: 20 74 65 6d 70 5f 74 61 62 6c 65 7d 20 7b 0a 20   temp_table} {. 
78f0: 20 20 20 20 20 65 78 65 63 73 71 6c 20 7b 70 72       execsql {pr
7900: 61 67 6d 61 20 74 65 6d 70 5f 73 74 6f 72 65 20  agma temp_store 
7910: 3d 20 31 7d 0a 20 20 20 20 7d 0a 20 20 7d 20 6d  = 1}.    }.  } m
7920: 73 67 5d 0a 20 20 6c 69 73 74 20 24 72 63 20 24  sg].  list $rc $
7930: 6d 73 67 0a 7d 20 7b 31 20 7b 74 65 6d 70 6f 72  msg.} {1 {tempor
7940: 61 72 79 20 73 74 6f 72 61 67 65 20 63 61 6e 6e  ary storage cann
7950: 6f 74 20 62 65 20 63 68 61 6e 67 65 64 20 66 72  ot be changed fr
7960: 6f 6d 20 77 69 74 68 69 6e 20 61 20 74 72 61 6e  om within a tran
7970: 73 61 63 74 69 6f 6e 7d 7d 0a 0a 7d 20 3b 23 20  saction}}..} ;# 
7980: 69 66 63 61 70 61 62 6c 65 20 70 61 67 65 72 5f  ifcapable pager_
7990: 70 72 61 67 6d 61 73 0a 0a 69 66 63 61 70 61 62  pragmas..ifcapab
79a0: 6c 65 20 74 72 69 67 67 65 72 20 7b 0a 0a 64 6f  le trigger {..do
79b0: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 30 2e  _test pragma-10.
79c0: 30 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b  0 {.  catchsql {
79d0: 0a 20 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20  .    DROP TABLE 
79e0: 6d 61 69 6e 2e 74 31 3b 0a 20 20 7d 0a 20 20 65  main.t1;.  }.  e
79f0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41  xecsql {.    PRA
7a00: 47 4d 41 20 63 6f 75 6e 74 5f 63 68 61 6e 67 65  GMA count_change
7a10: 73 20 3d 20 31 3b 0a 0a 20 20 20 20 43 52 45 41  s = 1;..    CREA
7a20: 54 45 20 54 41 42 4c 45 20 74 31 28 61 20 50 52  TE TABLE t1(a PR
7a30: 49 4d 41 52 59 20 4b 45 59 29 3b 0a 20 20 20 20  IMARY KEY);.    
7a40: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 5f  CREATE TABLE t1_
7a50: 6d 69 72 72 6f 72 28 61 29 3b 0a 20 20 20 20 43  mirror(a);.    C
7a60: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 5f 6d  REATE TABLE t1_m
7a70: 69 72 72 6f 72 32 28 61 29 3b 0a 20 20 20 20 43  irror2(a);.    C
7a80: 52 45 41 54 45 20 54 52 49 47 47 45 52 20 74 31  REATE TRIGGER t1
7a90: 5f 62 69 20 42 45 46 4f 52 45 20 49 4e 53 45 52  _bi BEFORE INSER
7aa0: 54 20 4f 4e 20 74 31 20 42 45 47 49 4e 20 0a 20  T ON t1 BEGIN . 
7ab0: 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f       INSERT INTO
7ac0: 20 74 31 5f 6d 69 72 72 6f 72 20 56 41 4c 55 45   t1_mirror VALUE
7ad0: 53 28 6e 65 77 2e 61 29 3b 0a 20 20 20 20 45 4e  S(new.a);.    EN
7ae0: 44 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54 52  D;.    CREATE TR
7af0: 49 47 47 45 52 20 74 31 5f 61 69 20 41 46 54 45  IGGER t1_ai AFTE
7b00: 52 20 49 4e 53 45 52 54 20 4f 4e 20 74 31 20 42  R INSERT ON t1 B
7b10: 45 47 49 4e 20 0a 20 20 20 20 20 20 49 4e 53 45  EGIN .      INSE
7b20: 52 54 20 49 4e 54 4f 20 74 31 5f 6d 69 72 72 6f  RT INTO t1_mirro
7b30: 72 32 20 56 41 4c 55 45 53 28 6e 65 77 2e 61 29  r2 VALUES(new.a)
7b40: 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20 20 20 43  ;.    END;.    C
7b50: 52 45 41 54 45 20 54 52 49 47 47 45 52 20 74 31  REATE TRIGGER t1
7b60: 5f 62 75 20 42 45 46 4f 52 45 20 55 50 44 41 54  _bu BEFORE UPDAT
7b70: 45 20 4f 4e 20 74 31 20 42 45 47 49 4e 20 0a 20  E ON t1 BEGIN . 
7b80: 20 20 20 20 20 55 50 44 41 54 45 20 74 31 5f 6d       UPDATE t1_m
7b90: 69 72 72 6f 72 20 53 45 54 20 61 20 3d 20 6e 65  irror SET a = ne
7ba0: 77 2e 61 20 57 48 45 52 45 20 61 20 3d 20 6f 6c  w.a WHERE a = ol
7bb0: 64 2e 61 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20  d.a;.    END;.  
7bc0: 20 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52    CREATE TRIGGER
7bd0: 20 74 31 5f 61 75 20 41 46 54 45 52 20 55 50 44   t1_au AFTER UPD
7be0: 41 54 45 20 4f 4e 20 74 31 20 42 45 47 49 4e 20  ATE ON t1 BEGIN 
7bf0: 0a 20 20 20 20 20 20 55 50 44 41 54 45 20 74 31  .      UPDATE t1
7c00: 5f 6d 69 72 72 6f 72 32 20 53 45 54 20 61 20 3d  _mirror2 SET a =
7c10: 20 6e 65 77 2e 61 20 57 48 45 52 45 20 61 20 3d   new.a WHERE a =
7c20: 20 6f 6c 64 2e 61 3b 0a 20 20 20 20 45 4e 44 3b   old.a;.    END;
7c30: 0a 20 20 20 20 43 52 45 41 54 45 20 54 52 49 47  .    CREATE TRIG
7c40: 47 45 52 20 74 31 5f 62 64 20 42 45 46 4f 52 45  GER t1_bd BEFORE
7c50: 20 44 45 4c 45 54 45 20 4f 4e 20 74 31 20 42 45   DELETE ON t1 BE
7c60: 47 49 4e 20 0a 20 20 20 20 20 20 44 45 4c 45 54  GIN .      DELET
7c70: 45 20 46 52 4f 4d 20 74 31 5f 6d 69 72 72 6f 72  E FROM t1_mirror
7c80: 20 57 48 45 52 45 20 61 20 3d 20 6f 6c 64 2e 61   WHERE a = old.a
7c90: 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20 20 20 43  ;.    END;.    C
7ca0: 52 45 41 54 45 20 54 52 49 47 47 45 52 20 74 31  REATE TRIGGER t1
7cb0: 5f 61 64 20 41 46 54 45 52 20 44 45 4c 45 54 45  _ad AFTER DELETE
7cc0: 20 4f 4e 20 74 31 20 42 45 47 49 4e 20 0a 20 20   ON t1 BEGIN .  
7cd0: 20 20 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20      DELETE FROM 
7ce0: 74 31 5f 6d 69 72 72 6f 72 32 20 57 48 45 52 45  t1_mirror2 WHERE
7cf0: 20 61 20 3d 20 6f 6c 64 2e 61 3b 0a 20 20 20 20   a = old.a;.    
7d00: 45 4e 44 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a 64  END;.  }.} {}..d
7d10: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 30  o_test pragma-10
7d20: 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .1 {.  execsql {
7d30: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
7d40: 20 74 31 20 56 41 4c 55 45 53 28 72 61 6e 64 73   t1 VALUES(rands
7d50: 74 72 28 31 30 2c 31 30 29 29 3b 0a 20 20 7d 0a  tr(10,10));.  }.
7d60: 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 70 72  } {1}.do_test pr
7d70: 61 67 6d 61 2d 31 30 2e 32 20 7b 0a 20 20 65 78  agma-10.2 {.  ex
7d80: 65 63 73 71 6c 20 7b 0a 20 20 20 20 55 50 44 41  ecsql {.    UPDA
7d90: 54 45 20 74 31 20 53 45 54 20 61 20 3d 20 72 61  TE t1 SET a = ra
7da0: 6e 64 73 74 72 28 31 30 2c 31 30 29 3b 0a 20 20  ndstr(10,10);.  
7db0: 7d 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20  }.} {1}.do_test 
7dc0: 70 72 61 67 6d 61 2d 31 30 2e 33 20 7b 0a 20 20  pragma-10.3 {.  
7dd0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 44 45  execsql {.    DE
7de0: 4c 45 54 45 20 46 52 4f 4d 20 74 31 3b 0a 20 20  LETE FROM t1;.  
7df0: 7d 0a 7d 20 7b 31 7d 0a 0a 7d 20 3b 23 20 69 66  }.} {1}..} ;# if
7e00: 63 61 70 61 62 6c 65 20 74 72 69 67 67 65 72 0a  capable trigger.
7e10: 0a 69 66 63 61 70 61 62 6c 65 20 73 63 68 65 6d  .ifcapable schem
7e20: 61 5f 70 72 61 67 6d 61 73 20 7b 0a 20 20 64 6f  a_pragmas {.  do
7e30: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 31 2e  _test pragma-11.
7e40: 31 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 32  1 {.    execsql2
7e50: 20 7b 0a 20 20 20 20 20 20 70 72 61 67 6d 61 20   {.      pragma 
7e60: 63 6f 6c 6c 61 74 69 6f 6e 5f 6c 69 73 74 3b 0a  collation_list;.
7e70: 20 20 20 20 7d 0a 20 20 7d 20 7b 73 65 71 20 30      }.  } {seq 0
7e80: 20 6e 61 6d 65 20 52 54 52 49 4d 20 73 65 71 20   name RTRIM seq 
7e90: 31 20 6e 61 6d 65 20 4e 4f 43 41 53 45 20 73 65  1 name NOCASE se
7ea0: 71 20 32 20 6e 61 6d 65 20 42 49 4e 41 52 59 7d  q 2 name BINARY}
7eb0: 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .  do_test pragm
7ec0: 61 2d 31 31 2e 32 20 7b 0a 20 20 20 20 64 62 20  a-11.2 {.    db 
7ed0: 63 6f 6c 6c 61 74 65 20 4e 65 77 5f 43 6f 6c 6c  collate New_Coll
7ee0: 61 74 69 6f 6e 20 62 6c 61 68 2e 2e 2e 0a 20 20  ation blah....  
7ef0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
7f00: 20 20 70 72 61 67 6d 61 20 63 6f 6c 6c 61 74 69    pragma collati
7f10: 6f 6e 5f 6c 69 73 74 3b 0a 20 20 20 20 7d 0a 20  on_list;.    }. 
7f20: 20 7d 20 7b 30 20 4e 65 77 5f 43 6f 6c 6c 61 74   } {0 New_Collat
7f30: 69 6f 6e 20 31 20 52 54 52 49 4d 20 32 20 4e 4f  ion 1 RTRIM 2 NO
7f40: 43 41 53 45 20 33 20 42 49 4e 41 52 59 7d 0a 7d  CASE 3 BINARY}.}
7f50: 0a 0a 69 66 63 61 70 61 62 6c 65 20 73 63 68 65  ..ifcapable sche
7f60: 6d 61 5f 70 72 61 67 6d 61 73 26 26 74 65 6d 70  ma_pragmas&&temp
7f70: 64 62 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 70  db {.  do_test p
7f80: 72 61 67 6d 61 2d 31 32 2e 31 20 7b 0a 20 20 20  ragma-12.1 {.   
7f90: 20 73 71 6c 69 74 65 33 20 64 62 32 20 74 65 73   sqlite3 db2 tes
7fa0: 74 2e 64 62 0a 20 20 20 20 65 78 65 63 73 71 6c  t.db.    execsql
7fb0: 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20   {.      PRAGMA 
7fc0: 74 65 6d 70 2e 74 61 62 6c 65 5f 69 6e 66 6f 28  temp.table_info(
7fd0: 27 61 62 63 27 29 3b 0a 20 20 20 20 7d 20 64 62  'abc');.    } db
7fe0: 32 0a 20 20 7d 20 7b 7d 0a 20 20 64 62 32 20 63  2.  } {}.  db2 c
7ff0: 6c 6f 73 65 0a 0a 20 20 64 6f 5f 74 65 73 74 20  lose..  do_test 
8000: 70 72 61 67 6d 61 2d 31 32 2e 32 20 7b 0a 20 20  pragma-12.2 {.  
8010: 20 20 73 71 6c 69 74 65 33 20 64 62 32 20 74 65    sqlite3 db2 te
8020: 73 74 2e 64 62 0a 20 20 20 20 65 78 65 63 73 71  st.db.    execsq
8030: 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41  l {.      PRAGMA
8040: 20 74 65 6d 70 2e 64 65 66 61 75 6c 74 5f 63 61   temp.default_ca
8050: 63 68 65 5f 73 69 7a 65 20 3d 20 32 30 30 3b 0a  che_size = 200;.
8060: 20 20 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d        PRAGMA tem
8070: 70 2e 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f  p.default_cache_
8080: 73 69 7a 65 3b 0a 20 20 20 20 7d 20 64 62 32 0a  size;.    } db2.
8090: 20 20 7d 20 7b 32 30 30 7d 0a 20 20 64 62 32 20    } {200}.  db2 
80a0: 63 6c 6f 73 65 0a 0a 20 20 64 6f 5f 74 65 73 74  close..  do_test
80b0: 20 70 72 61 67 6d 61 2d 31 32 2e 33 20 7b 0a 20   pragma-12.3 {. 
80c0: 20 20 20 73 71 6c 69 74 65 33 20 64 62 32 20 74     sqlite3 db2 t
80d0: 65 73 74 2e 64 62 0a 20 20 20 20 65 78 65 63 73  est.db.    execs
80e0: 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d  ql {.      PRAGM
80f0: 41 20 74 65 6d 70 2e 63 61 63 68 65 5f 73 69 7a  A temp.cache_siz
8100: 65 20 3d 20 34 30 30 3b 0a 20 20 20 20 20 20 50  e = 400;.      P
8110: 52 41 47 4d 41 20 74 65 6d 70 2e 63 61 63 68 65  RAGMA temp.cache
8120: 5f 73 69 7a 65 3b 0a 20 20 20 20 7d 20 64 62 32  _size;.    } db2
8130: 0a 20 20 7d 20 7b 34 30 30 7d 0a 20 20 64 62 32  .  } {400}.  db2
8140: 20 63 6c 6f 73 65 0a 7d 0a 0a 69 66 63 61 70 61   close.}..ifcapa
8150: 62 6c 65 20 62 6c 6f 62 6c 69 74 20 7b 0a 0a 64  ble bloblit {..d
8160: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 33  o_test pragma-13
8170: 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .1 {.  execsql {
8180: 0a 20 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20  .    DROP TABLE 
8190: 49 46 20 45 58 49 53 54 53 20 74 34 3b 0a 20 20  IF EXISTS t4;.  
81a0: 20 20 50 52 41 47 4d 41 20 76 64 62 65 5f 74 72    PRAGMA vdbe_tr
81b0: 61 63 65 3d 6f 6e 3b 0a 20 20 20 20 50 52 41 47  ace=on;.    PRAG
81c0: 4d 41 20 76 64 62 65 5f 6c 69 73 74 69 6e 67 3d  MA vdbe_listing=
81d0: 6f 6e 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 73  on;.    PRAGMA s
81e0: 71 6c 5f 74 72 61 63 65 3d 6f 6e 3b 0a 20 20 20  ql_trace=on;.   
81f0: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 34   CREATE TABLE t4
8200: 28 61 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41  (a INTEGER PRIMA
8210: 52 59 20 4b 45 59 2c 62 29 3b 0a 20 20 20 20 49  RY KEY,b);.    I
8220: 4e 53 45 52 54 20 49 4e 54 4f 20 74 34 28 62 29  NSERT INTO t4(b)
8230: 20 56 41 4c 55 45 53 28 78 27 30 31 32 33 34 35   VALUES(x'012345
8240: 36 37 38 39 61 62 63 64 65 66 30 31 32 33 34 35  6789abcdef012345
8250: 36 37 38 39 61 62 63 64 65 66 30 31 32 33 34 35  6789abcdef012345
8260: 36 37 38 39 27 29 3b 0a 20 20 20 20 49 4e 53 45  6789');.    INSE
8270: 52 54 20 49 4e 54 4f 20 74 34 28 62 29 20 56 41  RT INTO t4(b) VA
8280: 4c 55 45 53 28 72 61 6e 64 73 74 72 28 33 30 2c  LUES(randstr(30,
8290: 33 30 29 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  30));.    INSERT
82a0: 20 49 4e 54 4f 20 74 34 28 62 29 20 56 41 4c 55   INTO t4(b) VALU
82b0: 45 53 28 31 2e 32 33 34 35 36 29 3b 0a 20 20 20  ES(1.23456);.   
82c0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 34 28   INSERT INTO t4(
82d0: 62 29 20 56 41 4c 55 45 53 28 4e 55 4c 4c 29 3b  b) VALUES(NULL);
82e0: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
82f0: 20 74 34 28 62 29 20 56 41 4c 55 45 53 28 30 29   t4(b) VALUES(0)
8300: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
8310: 4f 20 74 34 28 62 29 20 53 45 4c 45 43 54 20 62  O t4(b) SELECT b
8320: 7c 7c 62 7c 7c 62 7c 7c 62 20 46 52 4f 4d 20 74  ||b||b||b FROM t
8330: 34 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20  4;.    SELECT * 
8340: 46 52 4f 4d 20 74 34 3b 0a 20 20 7d 0a 20 20 65  FROM t4;.  }.  e
8350: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41  xecsql {.    PRA
8360: 47 4d 41 20 76 64 62 65 5f 74 72 61 63 65 3d 6f  GMA vdbe_trace=o
8370: 66 66 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 76  ff;.    PRAGMA v
8380: 64 62 65 5f 6c 69 73 74 69 6e 67 3d 6f 66 66 3b  dbe_listing=off;
8390: 0a 20 20 20 20 50 52 41 47 4d 41 20 73 71 6c 5f  .    PRAGMA sql_
83a0: 74 72 61 63 65 3d 6f 66 66 3b 0a 20 20 7d 0a 7d  trace=off;.  }.}
83b0: 20 7b 7d 0a 0a 7d 20 3b 23 20 69 66 63 61 70 61   {}..} ;# ifcapa
83c0: 62 6c 65 20 62 6c 6f 62 6c 69 74 20 0a 0a 69 66  ble bloblit ..if
83d0: 63 61 70 61 62 6c 65 20 70 61 67 65 72 5f 70 72  capable pager_pr
83e0: 61 67 6d 61 73 20 7b 0a 20 20 64 62 20 63 6c 6f  agmas {.  db clo
83f0: 73 65 0a 20 20 66 6f 72 63 65 64 65 6c 65 74 65  se.  forcedelete
8400: 20 74 65 73 74 2e 64 62 0a 20 20 73 71 6c 69 74   test.db.  sqlit
8410: 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20 0a  e3 db test.db. .
8420: 20 20 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a    # EVIDENCE-OF:
8430: 20 52 2d 31 33 39 30 35 2d 32 36 33 31 32 20 50   R-13905-26312 P
8440: 52 41 47 4d 41 20 64 61 74 61 62 61 73 65 2e 70  RAGMA database.p
8450: 61 67 65 5f 63 6f 75 6e 74 3b 20 52 65 74 75 72  age_count; Retur
8460: 6e 20 74 68 65 0a 20 20 23 20 74 6f 74 61 6c 20  n the.  # total 
8470: 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20  number of pages 
8480: 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
8490: 66 69 6c 65 2e 0a 20 20 23 0a 20 20 64 6f 5f 74  file..  #.  do_t
84a0: 65 73 74 20 70 72 61 67 6d 61 2d 31 34 2e 31 20  est pragma-14.1 
84b0: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 20  {.    execsql { 
84c0: 70 72 61 67 6d 61 20 61 75 74 6f 5f 76 61 63 75  pragma auto_vacu
84d0: 75 6d 20 3d 20 30 20 7d 0a 20 20 20 20 65 78 65  um = 0 }.    exe
84e0: 63 73 71 6c 20 7b 20 70 72 61 67 6d 61 20 70 61  csql { pragma pa
84f0: 67 65 5f 63 6f 75 6e 74 3b 20 70 72 61 67 6d 61  ge_count; pragma
8500: 20 6d 61 69 6e 2e 70 61 67 65 5f 63 6f 75 6e 74   main.page_count
8510: 20 7d 0a 20 20 7d 20 7b 30 20 30 7d 0a 0a 20 20   }.  } {0 0}..  
8520: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31  do_test pragma-1
8530: 34 2e 32 20 7b 0a 20 20 20 20 65 78 65 63 73 71  4.2 {.    execsq
8540: 6c 20 7b 20 0a 20 20 20 20 20 20 43 52 45 41 54  l { .      CREAT
8550: 45 20 54 41 42 4c 45 20 61 62 63 28 61 2c 20 62  E TABLE abc(a, b
8560: 2c 20 63 29 3b 0a 20 20 20 20 20 20 50 52 41 47  , c);.      PRAG
8570: 4d 41 20 70 61 67 65 5f 63 6f 75 6e 74 3b 0a 20  MA page_count;. 
8580: 20 20 20 20 20 50 52 41 47 4d 41 20 6d 61 69 6e       PRAGMA main
8590: 2e 70 61 67 65 5f 63 6f 75 6e 74 3b 0a 20 20 20  .page_count;.   
85a0: 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 2e 70     PRAGMA temp.p
85b0: 61 67 65 5f 63 6f 75 6e 74 3b 0a 20 20 20 20 7d  age_count;.    }
85c0: 0a 20 20 7d 20 7b 32 20 32 20 30 7d 0a 20 20 64  .  } {2 2 0}.  d
85d0: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 34  o_test pragma-14
85e0: 2e 32 75 63 20 7b 0a 20 20 20 20 65 78 65 63 73  .2uc {.    execs
85f0: 71 6c 20 7b 70 72 61 67 6d 61 20 50 41 47 45 5f  ql {pragma PAGE_
8600: 43 4f 55 4e 54 7d 0a 20 20 7d 20 7b 32 7d 0a 0a  COUNT}.  } {2}..
8610: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
8620: 2d 31 34 2e 33 20 7b 0a 20 20 20 20 65 78 65 63  -14.3 {.    exec
8630: 73 71 6c 20 7b 20 0a 20 20 20 20 20 20 42 45 47  sql { .      BEG
8640: 49 4e 3b 0a 20 20 20 20 20 20 43 52 45 41 54 45  IN;.      CREATE
8650: 20 54 41 42 4c 45 20 64 65 66 28 61 2c 20 62 2c   TABLE def(a, b,
8660: 20 63 29 3b 0a 20 20 20 20 20 20 50 52 41 47 4d   c);.      PRAGM
8670: 41 20 70 61 67 65 5f 63 6f 75 6e 74 3b 0a 20 20  A page_count;.  
8680: 20 20 7d 0a 20 20 7d 20 7b 33 7d 0a 20 20 64 6f    }.  } {3}.  do
8690: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 34 2e  _test pragma-14.
86a0: 33 75 63 20 7b 0a 20 20 20 20 65 78 65 63 73 71  3uc {.    execsq
86b0: 6c 20 7b 70 72 61 67 6d 61 20 50 41 47 45 5f 43  l {pragma PAGE_C
86c0: 4f 55 4e 54 7d 0a 20 20 7d 20 7b 33 7d 0a 0a 20  OUNT}.  } {3}.. 
86d0: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
86e0: 31 34 2e 34 20 7b 0a 20 20 20 20 73 65 74 20 70  14.4 {.    set p
86f0: 61 67 65 5f 73 69 7a 65 20 5b 64 62 20 6f 6e 65  age_size [db one
8700: 20 7b 70 72 61 67 6d 61 20 70 61 67 65 5f 73 69   {pragma page_si
8710: 7a 65 7d 5d 0a 20 20 20 20 65 78 70 72 20 5b 66  ze}].    expr [f
8720: 69 6c 65 20 73 69 7a 65 20 74 65 73 74 2e 64 62  ile size test.db
8730: 5d 20 2f 20 24 70 61 67 65 5f 73 69 7a 65 0a 20  ] / $page_size. 
8740: 20 7d 20 7b 32 7d 0a 0a 20 20 64 6f 5f 74 65 73   } {2}..  do_tes
8750: 74 20 70 72 61 67 6d 61 2d 31 34 2e 35 20 7b 0a  t pragma-14.5 {.
8760: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20      execsql {.  
8770: 20 20 20 20 52 4f 4c 4c 42 41 43 4b 3b 0a 20 20      ROLLBACK;.  
8780: 20 20 20 20 50 52 41 47 4d 41 20 70 61 67 65 5f      PRAGMA page_
8790: 63 6f 75 6e 74 3b 0a 20 20 20 20 7d 0a 20 20 7d  count;.    }.  }
87a0: 20 7b 32 7d 0a 0a 20 20 64 6f 5f 74 65 73 74 20   {2}..  do_test 
87b0: 70 72 61 67 6d 61 2d 31 34 2e 36 20 7b 0a 20 20  pragma-14.6 {.  
87c0: 20 20 66 6f 72 63 65 64 65 6c 65 74 65 20 74 65    forcedelete te
87d0: 73 74 32 2e 64 62 0a 20 20 20 20 73 71 6c 69 74  st2.db.    sqlit
87e0: 65 33 20 64 62 32 20 74 65 73 74 32 2e 64 62 0a  e3 db2 test2.db.
87f0: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20      execsql {.  
8800: 20 20 20 20 50 52 41 47 4d 41 20 61 75 74 6f 5f      PRAGMA auto_
8810: 76 61 63 75 75 6d 20 3d 20 30 3b 0a 20 20 20 20  vacuum = 0;.    
8820: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
8830: 31 28 61 2c 20 62 2c 20 63 29 3b 0a 20 20 20 20  1(a, b, c);.    
8840: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
8850: 32 28 61 2c 20 62 2c 20 63 29 3b 0a 20 20 20 20  2(a, b, c);.    
8860: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
8870: 33 28 61 2c 20 62 2c 20 63 29 3b 0a 20 20 20 20  3(a, b, c);.    
8880: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
8890: 34 28 61 2c 20 62 2c 20 63 29 3b 0a 20 20 20 20  4(a, b, c);.    
88a0: 7d 20 64 62 32 0a 20 20 20 20 64 62 32 20 63 6c  } db2.    db2 cl
88b0: 6f 73 65 0a 20 20 20 20 65 78 65 63 73 71 6c 20  ose.    execsql 
88c0: 7b 0a 20 20 20 20 20 20 41 54 54 41 43 48 20 27  {.      ATTACH '
88d0: 74 65 73 74 32 2e 64 62 27 20 41 53 20 61 75 78  test2.db' AS aux
88e0: 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 61  ;.      PRAGMA a
88f0: 75 78 2e 70 61 67 65 5f 63 6f 75 6e 74 3b 0a 20  ux.page_count;. 
8900: 20 20 20 7d 20 0a 20 20 7d 20 7b 35 7d 0a 20 20     } .  } {5}.  
8910: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31  do_test pragma-1
8920: 34 2e 36 75 63 20 7b 0a 20 20 20 20 65 78 65 63  4.6uc {.    exec
8930: 73 71 6c 20 7b 70 72 61 67 6d 61 20 41 55 58 2e  sql {pragma AUX.
8940: 50 41 47 45 5f 43 4f 55 4e 54 7d 0a 20 20 7d 20  PAGE_COUNT}.  } 
8950: 7b 35 7d 0a 7d 0a 0a 23 20 54 65 73 74 20 74 68  {5}.}..# Test th
8960: 61 74 20 74 68 65 20 76 61 6c 75 65 20 73 65 74  at the value set
8970: 20 75 73 69 6e 67 20 74 68 65 20 63 61 63 68 65   using the cache
8980: 5f 73 69 7a 65 20 70 72 61 67 6d 61 20 69 73 20  _size pragma is 
8990: 6e 6f 74 20 72 65 73 65 74 20 77 68 65 6e 20 74  not reset when t
89a0: 68 65 0a 23 20 73 63 68 65 6d 61 20 69 73 20 72  he.# schema is r
89b0: 65 6c 6f 61 64 65 64 2e 0a 23 0a 69 66 63 61 70  eloaded..#.ifcap
89c0: 61 62 6c 65 20 70 61 67 65 72 5f 70 72 61 67 6d  able pager_pragm
89d0: 61 73 20 7b 0a 20 20 64 62 20 63 6c 6f 73 65 0a  as {.  db close.
89e0: 20 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73    sqlite3 db tes
89f0: 74 2e 64 62 0a 20 20 64 6f 5f 74 65 73 74 20 70  t.db.  do_test p
8a00: 72 61 67 6d 61 2d 31 35 2e 31 20 7b 0a 20 20 20  ragma-15.1 {.   
8a10: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20   execsql {.     
8a20: 20 50 52 41 47 4d 41 20 63 61 63 68 65 5f 73 69   PRAGMA cache_si
8a30: 7a 65 3d 35 39 3b 0a 20 20 20 20 20 20 50 52 41  ze=59;.      PRA
8a40: 47 4d 41 20 63 61 63 68 65 5f 73 69 7a 65 3b 0a  GMA cache_size;.
8a50: 20 20 20 20 7d 0a 20 20 7d 20 7b 35 39 7d 0a 20      }.  } {59}. 
8a60: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
8a70: 31 35 2e 32 20 7b 0a 20 20 20 20 73 71 6c 69 74  15.2 {.    sqlit
8a80: 65 33 20 64 62 32 20 74 65 73 74 2e 64 62 0a 20  e3 db2 test.db. 
8a90: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
8aa0: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
8ab0: 6e 65 77 74 61 62 6c 65 28 61 2c 20 62 2c 20 63  newtable(a, b, c
8ac0: 29 3b 0a 20 20 20 20 7d 20 64 62 32 0a 20 20 20  );.    } db2.   
8ad0: 20 64 62 32 20 63 6c 6f 73 65 0a 20 20 7d 20 7b   db2 close.  } {
8ae0: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67  }.  do_test prag
8af0: 6d 61 2d 31 35 2e 33 20 7b 0a 20 20 20 20 23 20  ma-15.3 {.    # 
8b00: 45 76 61 6c 75 61 74 69 6e 67 20 74 68 69 73 20  Evaluating this 
8b10: 73 74 61 74 65 6d 65 6e 74 20 77 69 6c 6c 20 63  statement will c
8b20: 61 75 73 65 20 74 68 65 20 73 63 68 65 6d 61 20  ause the schema 
8b30: 74 6f 20 62 65 20 72 65 6c 6f 61 64 65 64 20 28  to be reloaded (
8b40: 62 65 63 61 75 73 65 0a 20 20 20 20 23 20 74 68  because.    # th
8b50: 65 20 73 63 68 65 6d 61 20 77 61 73 20 63 68 61  e schema was cha
8b60: 6e 67 65 64 20 62 79 20 61 6e 6f 74 68 65 72 20  nged by another 
8b70: 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 6e 20 70 72  connection in pr
8b80: 61 67 6d 61 2d 31 35 2e 32 29 2e 20 41 74 20 6f  agma-15.2). At o
8b90: 6e 65 0a 20 20 20 20 23 20 70 6f 69 6e 74 20 74  ne.    # point t
8ba0: 68 65 72 65 20 77 61 73 20 61 20 62 75 67 20 74  here was a bug t
8bb0: 68 61 74 20 72 65 73 65 74 20 74 68 65 20 63 61  hat reset the ca
8bc0: 63 68 65 5f 73 69 7a 65 20 74 6f 20 69 74 73 20  che_size to its 
8bd0: 64 65 66 61 75 6c 74 20 76 61 6c 75 65 0a 20 20  default value.  
8be0: 20 20 23 20 77 68 65 6e 20 74 68 69 73 20 68 61    # when this ha
8bf0: 70 70 65 6e 65 64 2e 20 0a 20 20 20 20 65 78 65  ppened. .    exe
8c00: 63 73 71 6c 20 7b 20 53 45 4c 45 43 54 20 2a 20  csql { SELECT * 
8c10: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74  FROM sqlite_mast
8c20: 65 72 20 7d 0a 20 20 20 20 65 78 65 63 73 71 6c  er }.    execsql
8c30: 20 7b 20 50 52 41 47 4d 41 20 63 61 63 68 65 5f   { PRAGMA cache_
8c40: 73 69 7a 65 20 7d 0a 20 20 7d 20 7b 35 39 7d 0a  size }.  } {59}.
8c50: 7d 0a 0a 23 20 52 65 73 65 74 20 74 68 65 20 73  }..# Reset the s
8c60: 71 6c 69 74 65 33 5f 74 65 6d 70 5f 64 69 72 65  qlite3_temp_dire
8c70: 63 74 6f 72 79 20 76 61 72 69 61 62 6c 65 20 66  ctory variable f
8c80: 6f 72 20 74 68 65 20 6e 65 78 74 20 72 75 6e 20  or the next run 
8c90: 6f 66 20 74 65 73 74 73 3a 0a 73 71 6c 69 74 65  of tests:.sqlite
8ca0: 33 20 64 62 58 20 3a 6d 65 6d 6f 72 79 3a 0a 64  3 dbX :memory:.d
8cb0: 62 58 20 65 76 61 6c 20 7b 50 52 41 47 4d 41 20  bX eval {PRAGMA 
8cc0: 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63  temp_store_direc
8cd0: 74 6f 72 79 20 3d 20 22 22 7d 0a 64 62 58 20 63  tory = ""}.dbX c
8ce0: 6c 6f 73 65 0a 0a 69 66 63 61 70 61 62 6c 65 20  lose..ifcapable 
8cf0: 6c 6f 63 6b 5f 70 72 6f 78 79 5f 70 72 61 67 6d  lock_proxy_pragm
8d00: 61 73 26 26 70 72 65 66 65 72 5f 70 72 6f 78 79  as&&prefer_proxy
8d10: 5f 6c 6f 63 6b 69 6e 67 20 7b 0a 20 20 73 65 74  _locking {.  set
8d20: 20 73 71 6c 69 74 65 5f 68 6f 73 74 69 64 5f 6e   sqlite_hostid_n
8d30: 75 6d 20 31 0a 0a 20 20 73 65 74 20 75 73 69 6e  um 1..  set usin
8d40: 67 5f 70 72 6f 78 79 20 30 0a 20 20 66 6f 72 65  g_proxy 0.  fore
8d50: 61 63 68 20 7b 6e 61 6d 65 20 76 61 6c 75 65 7d  ach {name value}
8d60: 20 5b 61 72 72 61 79 20 67 65 74 20 65 6e 76 20   [array get env 
8d70: 53 51 4c 49 54 45 5f 46 4f 52 43 45 5f 50 52 4f  SQLITE_FORCE_PRO
8d80: 58 59 5f 4c 4f 43 4b 49 4e 47 5d 20 7b 0a 20 20  XY_LOCKING] {.  
8d90: 20 20 73 65 74 20 75 73 69 6e 67 5f 70 72 6f 78    set using_prox
8da0: 79 20 24 76 61 6c 75 65 0a 20 20 7d 0a 0a 20 20  y $value.  }..  
8db0: 23 20 54 65 73 74 20 74 68 65 20 6c 6f 63 6b 5f  # Test the lock_
8dc0: 70 72 6f 78 79 5f 66 69 6c 65 20 70 72 61 67 6d  proxy_file pragm
8dd0: 61 73 2e 0a 20 20 23 0a 20 20 64 62 20 63 6c 6f  as..  #.  db clo
8de0: 73 65 0a 20 20 73 65 74 20 65 6e 76 28 53 51 4c  se.  set env(SQL
8df0: 49 54 45 5f 46 4f 52 43 45 5f 50 52 4f 58 59 5f  ITE_FORCE_PROXY_
8e00: 4c 4f 43 4b 49 4e 47 29 20 22 30 22 0a 0a 20 20  LOCKING) "0"..  
8e10: 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e  sqlite3 db test.
8e20: 64 62 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61  db.  do_test pra
8e30: 67 6d 61 2d 31 36 2e 31 20 7b 0a 20 20 20 20 65  gma-16.1 {.    e
8e40: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50  xecsql {.      P
8e50: 52 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78 79  RAGMA lock_proxy
8e60: 5f 66 69 6c 65 3d 22 6d 79 6c 69 74 74 6c 65 70  _file="mylittlep
8e70: 72 6f 78 79 22 3b 0a 20 20 20 20 20 20 73 65 6c  roxy";.      sel
8e80: 65 63 74 20 2a 20 66 72 6f 6d 20 73 71 6c 69 74  ect * from sqlit
8e90: 65 5f 6d 61 73 74 65 72 3b 0a 20 20 20 20 7d 0a  e_master;.    }.
8ea0: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20      execsql {.  
8eb0: 20 20 20 20 50 52 41 47 4d 41 20 6c 6f 63 6b 5f      PRAGMA lock_
8ec0: 70 72 6f 78 79 5f 66 69 6c 65 3b 0a 20 20 20 20  proxy_file;.    
8ed0: 7d 20 0a 20 20 7d 20 7b 6d 79 6c 69 74 74 6c 65  } .  } {mylittle
8ee0: 70 72 6f 78 79 7d 0a 0a 20 20 64 6f 5f 74 65 73  proxy}..  do_tes
8ef0: 74 20 70 72 61 67 6d 61 2d 31 36 2e 32 20 7b 0a  t pragma-16.2 {.
8f00: 20 20 20 20 73 71 6c 69 74 65 33 20 64 62 32 20      sqlite3 db2 
8f10: 74 65 73 74 2e 64 62 0a 20 20 20 20 65 78 65 63  test.db.    exec
8f20: 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47  sql {.      PRAG
8f30: 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69  MA lock_proxy_fi
8f40: 6c 65 3d 22 6d 79 6c 69 74 74 6c 65 70 72 6f 78  le="mylittleprox
8f50: 79 22 3b 0a 20 20 20 20 7d 20 64 62 32 0a 20 20  y";.    } db2.  
8f60: 7d 20 7b 7d 0a 0a 20 20 64 62 32 20 63 6c 6f 73  } {}..  db2 clos
8f70: 65 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67  e.  do_test prag
8f80: 6d 61 2d 31 36 2e 32 2e 31 20 7b 0a 20 20 20 20  ma-16.2.1 {.    
8f90: 73 71 6c 69 74 65 33 20 64 62 32 20 74 65 73 74  sqlite3 db2 test
8fa0: 2e 64 62 0a 20 20 20 20 65 78 65 63 73 71 6c 20  .db.    execsql 
8fb0: 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 6c  {.      PRAGMA l
8fc0: 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 3d 22  ock_proxy_file="
8fd0: 3a 61 75 74 6f 3a 22 3b 0a 20 20 20 20 20 20 73  :auto:";.      s
8fe0: 65 6c 65 63 74 20 2a 20 66 72 6f 6d 20 73 71 6c  elect * from sql
8ff0: 69 74 65 5f 6d 61 73 74 65 72 3b 0a 20 20 20 20  ite_master;.    
9000: 7d 20 64 62 32 0a 20 20 20 20 65 78 65 63 73 71  } db2.    execsq
9010: 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41  l {.      PRAGMA
9020: 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65   lock_proxy_file
9030: 3b 0a 20 20 20 20 7d 20 64 62 32 0a 20 20 7d 20  ;.    } db2.  } 
9040: 7b 6d 79 6c 69 74 74 6c 65 70 72 6f 78 79 7d 0a  {mylittleproxy}.
9050: 0a 20 20 64 62 32 20 63 6c 6f 73 65 0a 20 20 64  .  db2 close.  d
9060: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 36  o_test pragma-16
9070: 2e 33 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  .3 {.    sqlite3
9080: 20 64 62 32 20 74 65 73 74 2e 64 62 0a 20 20 20   db2 test.db.   
9090: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20   execsql {.     
90a0: 20 50 52 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f   PRAGMA lock_pro
90b0: 78 79 5f 66 69 6c 65 3d 22 6d 79 6f 74 68 65 72  xy_file="myother
90c0: 70 72 6f 78 79 22 3b 0a 20 20 20 20 7d 20 64 62  proxy";.    } db
90d0: 32 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b  2.    catchsql {
90e0: 0a 20 20 20 20 20 20 73 65 6c 65 63 74 20 2a 20  .      select * 
90f0: 66 72 6f 6d 20 73 71 6c 69 74 65 5f 6d 61 73 74  from sqlite_mast
9100: 65 72 3b 0a 20 20 20 20 7d 20 64 62 32 0a 20 20  er;.    } db2.  
9110: 7d 20 7b 31 20 7b 64 61 74 61 62 61 73 65 20 69  } {1 {database i
9120: 73 20 6c 6f 63 6b 65 64 7d 7d 0a 0a 20 20 64 6f  s locked}}..  do
9130: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 36 2e  _test pragma-16.
9140: 34 20 7b 0a 20 20 20 20 64 62 32 20 63 6c 6f 73  4 {.    db2 clos
9150: 65 0a 20 20 20 20 64 62 20 63 6c 6f 73 65 0a 20  e.    db close. 
9160: 20 20 20 73 71 6c 69 74 65 33 20 64 62 32 20 74     sqlite3 db2 t
9170: 65 73 74 2e 64 62 0a 20 20 20 20 65 78 65 63 73  est.db.    execs
9180: 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d  ql {.      PRAGM
9190: 41 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c  A lock_proxy_fil
91a0: 65 3d 22 6d 79 6f 72 69 67 69 6e 61 6c 70 72 6f  e="myoriginalpro
91b0: 78 79 22 3b 0a 20 20 20 20 20 20 50 52 41 47 4d  xy";.      PRAGM
91c0: 41 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c  A lock_proxy_fil
91d0: 65 3d 22 6d 79 6f 74 68 65 72 70 72 6f 78 79 22  e="myotherproxy"
91e0: 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 6c  ;.      PRAGMA l
91f0: 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 3b 0a  ock_proxy_file;.
9200: 20 20 20 20 7d 20 64 62 32 0a 20 20 7d 20 7b 6d      } db2.  } {m
9210: 79 6f 74 68 65 72 70 72 6f 78 79 7d 0a 0a 20 20  yotherproxy}..  
9220: 64 62 32 20 63 6c 6f 73 65 0a 20 20 73 65 74 20  db2 close.  set 
9230: 65 6e 76 28 53 51 4c 49 54 45 5f 46 4f 52 43 45  env(SQLITE_FORCE
9240: 5f 50 52 4f 58 59 5f 4c 4f 43 4b 49 4e 47 29 20  _PROXY_LOCKING) 
9250: 22 31 22 0a 20 20 64 6f 5f 74 65 73 74 20 70 72  "1".  do_test pr
9260: 61 67 6d 61 2d 31 36 2e 35 20 7b 0a 20 20 20 20  agma-16.5 {.    
9270: 73 71 6c 69 74 65 33 20 64 62 32 20 74 65 73 74  sqlite3 db2 test
9280: 2e 64 62 0a 20 20 20 20 65 78 65 63 73 71 6c 20  .db.    execsql 
9290: 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 6c  {.      PRAGMA l
92a0: 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 3d 22  ock_proxy_file="
92b0: 3a 61 75 74 6f 3a 22 3b 0a 20 20 20 20 20 20 50  :auto:";.      P
92c0: 52 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78 79  RAGMA lock_proxy
92d0: 5f 66 69 6c 65 3b 0a 20 20 20 20 7d 20 64 62 32  _file;.    } db2
92e0: 0a 20 20 7d 20 7b 6d 79 6f 74 68 65 72 70 72 6f  .  } {myotherpro
92f0: 78 79 7d 0a 20 20 0a 20 20 64 6f 5f 74 65 73 74  xy}.  .  do_test
9300: 20 70 72 61 67 6d 61 2d 31 36 2e 36 20 7b 0a 20   pragma-16.6 {. 
9310: 20 20 20 64 62 32 20 63 6c 6f 73 65 0a 20 20 20     db2 close.   
9320: 20 73 71 6c 69 74 65 33 20 64 62 32 20 74 65 73   sqlite3 db2 tes
9330: 74 32 2e 64 62 0a 20 20 20 20 73 65 74 20 6c 6f  t2.db.    set lo
9340: 63 6b 70 61 74 68 20 5b 65 78 65 63 73 71 6c 20  ckpath [execsql 
9350: 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 6c  {.      PRAGMA l
9360: 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 3d 22  ock_proxy_file="
9370: 3a 61 75 74 6f 3a 22 3b 0a 20 20 20 20 20 20 50  :auto:";.      P
9380: 52 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78 79  RAGMA lock_proxy
9390: 5f 66 69 6c 65 3b 0a 20 20 20 20 7d 20 64 62 32  _file;.    } db2
93a0: 5d 0a 20 20 20 20 73 74 72 69 6e 67 20 6d 61 74  ].    string mat
93b0: 63 68 20 22 2a 74 65 73 74 32 2e 64 62 3a 61 75  ch "*test2.db:au
93c0: 74 6f 3a 22 20 24 6c 6f 63 6b 70 61 74 68 0a 20  to:" $lockpath. 
93d0: 20 7d 20 7b 31 7d 0a 20 20 0a 20 20 73 65 74 20   } {1}.  .  set 
93e0: 73 71 6c 69 74 65 5f 68 6f 73 74 69 64 5f 6e 75  sqlite_hostid_nu
93f0: 6d 20 32 0a 20 20 64 6f 5f 74 65 73 74 20 70 72  m 2.  do_test pr
9400: 61 67 6d 61 2d 31 36 2e 37 20 7b 0a 20 20 20 20  agma-16.7 {.    
9410: 6c 69 73 74 20 5b 63 61 74 63 68 20 7b 0a 20 20  list [catch {.  
9420: 20 20 20 20 73 71 6c 69 74 65 33 20 64 62 20 74      sqlite3 db t
9430: 65 73 74 32 2e 64 62 0a 20 20 20 20 20 20 65 78  est2.db.      ex
9440: 65 63 73 71 6c 20 7b 20 0a 20 20 20 20 20 20 20  ecsql { .       
9450: 20 50 52 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f   PRAGMA lock_pro
9460: 78 79 5f 66 69 6c 65 3d 22 3a 61 75 74 6f 3a 22  xy_file=":auto:"
9470: 3b 0a 20 20 20 20 20 20 20 20 73 65 6c 65 63 74  ;.        select
9480: 20 2a 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f 6d   * from sqlite_m
9490: 61 73 74 65 72 3b 0a 20 20 20 20 20 20 7d 0a 20  aster;.      }. 
94a0: 20 20 20 7d 20 6d 73 67 5d 20 24 6d 73 67 0a 20     } msg] $msg. 
94b0: 20 7d 20 7b 31 20 7b 64 61 74 61 62 61 73 65 20   } {1 {database 
94c0: 69 73 20 6c 6f 63 6b 65 64 7d 7d 0a 20 20 64 62  is locked}}.  db
94d0: 20 63 6c 6f 73 65 0a 20 20 0a 20 20 64 6f 5f 74   close.  .  do_t
94e0: 65 73 74 20 70 72 61 67 6d 61 2d 31 36 2e 38 20  est pragma-16.8 
94f0: 7b 0a 20 20 20 20 6c 69 73 74 20 5b 63 61 74 63  {.    list [catc
9500: 68 20 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  h {.      sqlite
9510: 33 20 64 62 20 74 65 73 74 32 2e 64 62 0a 20 20  3 db test2.db.  
9520: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 20 73 65      execsql { se
9530: 6c 65 63 74 20 2a 20 66 72 6f 6d 20 73 71 6c 69  lect * from sqli
9540: 74 65 5f 6d 61 73 74 65 72 20 7d 20 0a 20 20 20  te_master } .   
9550: 20 7d 20 6d 73 67 5d 20 24 6d 73 67 0a 20 20 7d   } msg] $msg.  }
9560: 20 7b 31 20 7b 64 61 74 61 62 61 73 65 20 69 73   {1 {database is
9570: 20 6c 6f 63 6b 65 64 7d 7d 0a 0a 20 20 64 62 32   locked}}..  db2
9580: 20 63 6c 6f 73 65 0a 20 20 64 6f 5f 74 65 73 74   close.  do_test
9590: 20 70 72 61 67 6d 61 2d 31 36 2e 38 2e 31 20 7b   pragma-16.8.1 {
95a0: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
95b0: 20 20 20 20 20 50 52 41 47 4d 41 20 6c 6f 63 6b       PRAGMA lock
95c0: 5f 70 72 6f 78 79 5f 66 69 6c 65 3d 22 79 65 74  _proxy_file="yet
95d0: 61 6e 6f 74 68 65 72 70 72 6f 78 79 22 3b 0a 20  anotherproxy";. 
95e0: 20 20 20 20 20 50 52 41 47 4d 41 20 6c 6f 63 6b       PRAGMA lock
95f0: 5f 70 72 6f 78 79 5f 66 69 6c 65 3b 0a 20 20 20  _proxy_file;.   
9600: 20 7d 20 0a 20 20 7d 20 7b 79 65 74 61 6e 6f 74   } .  } {yetanot
9610: 68 65 72 70 72 6f 78 79 7d 0a 20 20 64 6f 5f 74  herproxy}.  do_t
9620: 65 73 74 20 70 72 61 67 6d 61 2d 31 36 2e 38 2e  est pragma-16.8.
9630: 32 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  2 {.    execsql 
9640: 7b 0a 20 20 20 20 20 20 63 72 65 61 74 65 20 74  {.      create t
9650: 61 62 6c 65 20 6d 69 6e 65 28 78 29 3b 0a 20 20  able mine(x);.  
9660: 20 20 7d 20 0a 20 20 7d 20 7b 7d 0a 0a 20 20 64    } .  } {}..  d
9670: 62 20 63 6c 6f 73 65 0a 20 20 64 6f 5f 74 65 73  b close.  do_tes
9680: 74 20 70 72 61 67 6d 61 2d 31 36 2e 39 20 7b 0a  t pragma-16.9 {.
9690: 20 20 20 20 73 71 6c 69 74 65 33 20 64 62 20 70      sqlite3 db p
96a0: 72 6f 78 79 74 65 73 74 2e 64 62 0a 20 20 20 20  roxytest.db.    
96b0: 73 65 74 20 6c 6f 63 6b 70 61 74 68 32 20 5b 65  set lockpath2 [e
96c0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50  xecsql {.      P
96d0: 52 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78 79  RAGMA lock_proxy
96e0: 5f 66 69 6c 65 3d 22 3a 61 75 74 6f 3a 22 3b 0a  _file=":auto:";.
96f0: 20 20 20 20 20 20 50 52 41 47 4d 41 20 6c 6f 63        PRAGMA loc
9700: 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 3b 0a 20 20  k_proxy_file;.  
9710: 20 20 7d 20 64 62 5d 0a 20 20 20 20 73 74 72 69    } db].    stri
9720: 6e 67 20 6d 61 74 63 68 20 22 2a 70 72 6f 78 79  ng match "*proxy
9730: 74 65 73 74 2e 64 62 3a 61 75 74 6f 3a 22 20 24  test.db:auto:" $
9740: 6c 6f 63 6b 70 61 74 68 32 0a 20 20 7d 20 7b 31  lockpath2.  } {1
9750: 7d 0a 0a 20 20 73 65 74 20 65 6e 76 28 53 51 4c  }..  set env(SQL
9760: 49 54 45 5f 46 4f 52 43 45 5f 50 52 4f 58 59 5f  ITE_FORCE_PROXY_
9770: 4c 4f 43 4b 49 4e 47 29 20 24 75 73 69 6e 67 5f  LOCKING) $using_
9780: 70 72 6f 78 79 0a 20 20 73 65 74 20 73 71 6c 69  proxy.  set sqli
9790: 74 65 5f 68 6f 73 74 69 64 5f 6e 75 6d 20 30 0a  te_hostid_num 0.
97a0: 7d 0a 0a 23 20 50 61 72 73 69 6e 67 20 6f 66 20  }..# Parsing of 
97b0: 61 75 74 6f 5f 76 61 63 75 75 6d 20 73 65 74 74  auto_vacuum sett
97c0: 69 6e 67 73 2e 0a 23 0a 66 6f 72 65 61 63 68 20  ings..#.foreach 
97d0: 7b 61 75 74 6f 76 61 63 5f 73 65 74 74 69 6e 67  {autovac_setting
97e0: 20 76 61 6c 7d 20 7b 0a 20 20 30 20 30 0a 20 20   val} {.  0 0.  
97f0: 31 20 31 0a 20 20 32 20 32 0a 20 20 33 20 30 0a  1 1.  2 2.  3 0.
9800: 20 20 2d 31 20 30 0a 20 20 6e 6f 6e 65 20 30 0a    -1 0.  none 0.
9810: 20 20 4e 4f 4e 45 20 30 0a 20 20 4e 6f 4e 65 20    NONE 0.  NoNe 
9820: 30 0a 20 20 66 75 6c 6c 20 31 0a 20 20 46 55 4c  0.  full 1.  FUL
9830: 4c 20 31 0a 20 20 69 6e 63 72 65 6d 65 6e 74 61  L 1.  incrementa
9840: 6c 20 32 0a 20 20 49 4e 43 52 45 4d 45 4e 54 41  l 2.  INCREMENTA
9850: 4c 20 32 0a 20 20 2d 31 32 33 34 20 30 0a 20 20  L 2.  -1234 0.  
9860: 31 32 33 34 20 30 0a 7d 20 7b 0a 20 20 64 6f 5f  1234 0.} {.  do_
9870: 74 65 73 74 20 70 72 61 67 6d 61 2d 31 37 2e 31  test pragma-17.1
9880: 2e 24 61 75 74 6f 76 61 63 5f 73 65 74 74 69 6e  .$autovac_settin
9890: 67 20 7b 0a 20 20 20 20 63 61 74 63 68 20 7b 64  g {.    catch {d
98a0: 62 20 63 6c 6f 73 65 7d 0a 20 20 20 20 73 71 6c  b close}.    sql
98b0: 69 74 65 33 20 64 62 20 3a 6d 65 6d 6f 72 79 3a  ite3 db :memory:
98c0: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 22 0a 20  .    execsql ". 
98d0: 20 20 20 20 20 50 52 41 47 4d 41 20 61 75 74 6f       PRAGMA auto
98e0: 5f 76 61 63 75 75 6d 3d 24 3a 3a 61 75 74 6f 76  _vacuum=$::autov
98f0: 61 63 5f 73 65 74 74 69 6e 67 3b 0a 20 20 20 20  ac_setting;.    
9900: 20 20 50 52 41 47 4d 41 20 61 75 74 6f 5f 76 61    PRAGMA auto_va
9910: 63 75 75 6d 3b 0a 20 20 20 20 22 0a 20 20 7d 20  cuum;.    ".  } 
9920: 24 76 61 6c 0a 7d 0a 0a 23 20 50 61 72 73 69 6e  $val.}..# Parsin
9930: 67 20 6f 66 20 74 65 6d 70 5f 73 74 6f 72 65 20  g of temp_store 
9940: 73 65 74 74 69 6e 67 73 2e 0a 23 0a 66 6f 72 65  settings..#.fore
9950: 61 63 68 20 7b 74 65 6d 70 5f 73 65 74 74 69 6e  ach {temp_settin
9960: 67 20 76 61 6c 7d 20 7b 0a 20 20 30 20 30 0a 20  g val} {.  0 0. 
9970: 20 31 20 31 0a 20 20 32 20 32 0a 20 20 33 20 30   1 1.  2 2.  3 0
9980: 0a 20 20 2d 31 20 30 0a 20 20 66 69 6c 65 20 31  .  -1 0.  file 1
9990: 0a 20 20 46 49 4c 45 20 31 0a 20 20 66 49 6c 45  .  FILE 1.  fIlE
99a0: 20 31 0a 20 20 6d 65 6d 6f 72 79 20 32 0a 20 20   1.  memory 2.  
99b0: 4d 45 4d 4f 52 59 20 32 0a 20 20 4d 65 4d 6f 52  MEMORY 2.  MeMoR
99c0: 79 20 32 0a 7d 20 7b 0a 20 20 64 6f 5f 74 65 73  y 2.} {.  do_tes
99d0: 74 20 70 72 61 67 6d 61 2d 31 38 2e 31 2e 24 74  t pragma-18.1.$t
99e0: 65 6d 70 5f 73 65 74 74 69 6e 67 20 7b 0a 20 20  emp_setting {.  
99f0: 20 20 63 61 74 63 68 20 7b 64 62 20 63 6c 6f 73    catch {db clos
9a00: 65 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 20 64  e}.    sqlite3 d
9a10: 62 20 3a 6d 65 6d 6f 72 79 3a 0a 20 20 20 20 65  b :memory:.    e
9a20: 78 65 63 73 71 6c 20 22 0a 20 20 20 20 20 20 50  xecsql ".      P
9a30: 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65  RAGMA temp_store
9a40: 3d 24 3a 3a 74 65 6d 70 5f 73 65 74 74 69 6e 67  =$::temp_setting
9a50: 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 74  ;.      PRAGMA t
9a60: 65 6d 70 5f 73 74 6f 72 65 3d 24 3a 3a 74 65 6d  emp_store=$::tem
9a70: 70 5f 73 65 74 74 69 6e 67 3b 0a 20 20 20 20 20  p_setting;.     
9a80: 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f   PRAGMA temp_sto
9a90: 72 65 3b 0a 20 20 20 20 22 0a 20 20 7d 20 24 76  re;.    ".  } $v
9aa0: 61 6c 0a 7d 0a 0a 23 20 54 68 65 20 53 51 4c 49  al.}..# The SQLI
9ab0: 54 45 5f 46 43 4e 54 4c 5f 50 52 41 47 4d 41 20  TE_FCNTL_PRAGMA 
9ac0: 6c 6f 67 69 63 2c 20 77 69 74 68 20 65 72 72 6f  logic, with erro
9ad0: 72 20 68 61 6e 64 6c 69 6e 67 2e 0a 23 0a 64 62  r handling..#.db
9ae0: 20 63 6c 6f 73 65 0a 74 65 73 74 76 66 73 20 74   close.testvfs t
9af0: 76 66 73 0a 73 71 6c 69 74 65 33 20 64 62 20 74  vfs.sqlite3 db t
9b00: 65 73 74 2e 64 62 20 2d 76 66 73 20 74 76 66 73  est.db -vfs tvfs
9b10: 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d  .do_test pragma-
9b20: 31 39 2e 31 20 7b 0a 20 20 63 61 74 63 68 73 71  19.1 {.  catchsq
9b30: 6c 20 7b 50 52 41 47 4d 41 20 65 72 72 6f 72 7d  l {PRAGMA error}
9b40: 0a 7d 20 7b 31 20 7b 53 51 4c 20 6c 6f 67 69 63  .} {1 {SQL logic
9b50: 20 65 72 72 6f 72 20 6f 72 20 6d 69 73 73 69 6e   error or missin
9b60: 67 20 64 61 74 61 62 61 73 65 7d 7d 0a 64 6f 5f  g database}}.do_
9b70: 74 65 73 74 20 70 72 61 67 6d 61 2d 31 39 2e 32  test pragma-19.2
9b80: 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 50   {.  catchsql {P
9b90: 52 41 47 4d 41 20 65 72 72 6f 72 3d 27 54 68 69  RAGMA error='Thi
9ba0: 73 20 69 73 20 74 68 65 20 65 72 72 6f 72 20 6d  s is the error m
9bb0: 65 73 73 61 67 65 27 7d 0a 7d 20 7b 31 20 7b 54  essage'}.} {1 {T
9bc0: 68 69 73 20 69 73 20 74 68 65 20 65 72 72 6f 72  his is the error
9bd0: 20 6d 65 73 73 61 67 65 7d 7d 0a 64 6f 5f 74 65   message}}.do_te
9be0: 73 74 20 70 72 61 67 6d 61 2d 31 39 2e 33 20 7b  st pragma-19.3 {
9bf0: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 50 52 41  .  catchsql {PRA
9c00: 47 4d 41 20 65 72 72 6f 72 3d 27 37 20 54 68 69  GMA error='7 Thi
9c10: 73 20 69 73 20 74 68 65 20 65 72 72 6f 72 20 6d  s is the error m
9c20: 65 73 73 61 67 65 27 7d 0a 7d 20 7b 31 20 7b 54  essage'}.} {1 {T
9c30: 68 69 73 20 69 73 20 74 68 65 20 65 72 72 6f 72  his is the error
9c40: 20 6d 65 73 73 61 67 65 7d 7d 0a 64 6f 5f 74 65   message}}.do_te
9c50: 73 74 20 70 72 61 67 6d 61 2d 31 39 2e 34 20 7b  st pragma-19.4 {
9c60: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 50 52 41  .  catchsql {PRA
9c70: 47 4d 41 20 65 72 72 6f 72 3d 37 7d 0a 7d 20 7b  GMA error=7}.} {
9c80: 31 20 7b 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79  1 {out of memory
9c90: 7d 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  }}.do_test pragm
9ca0: 61 2d 31 39 2e 35 20 7b 0a 20 20 66 69 6c 65 20  a-19.5 {.  file 
9cb0: 74 61 69 6c 20 5b 6c 69 6e 64 65 78 20 5b 65 78  tail [lindex [ex
9cc0: 65 63 73 71 6c 20 7b 50 52 41 47 4d 41 20 66 69  ecsql {PRAGMA fi
9cd0: 6c 65 6e 61 6d 65 7d 5d 20 30 5d 0a 7d 20 7b 74  lename}] 0].} {t
9ce0: 65 73 74 2e 64 62 7d 0a 0a 69 66 20 7b 24 74 63  est.db}..if {$tc
9cf0: 6c 5f 70 6c 61 74 66 6f 72 6d 28 70 6c 61 74 66  l_platform(platf
9d00: 6f 72 6d 29 3d 3d 22 77 69 6e 64 6f 77 73 22 7d  orm)=="windows"}
9d10: 20 7b 0a 23 20 54 65 73 74 20 64 61 74 61 5f 73   {.# Test data_s
9d20: 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 20 70  tore_directory p
9d30: 72 61 67 6d 61 0a 23 0a 64 62 20 63 6c 6f 73 65  ragma.#.db close
9d40: 0a 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74  .sqlite3 db test
9d50: 2e 64 62 0a 66 69 6c 65 20 6d 6b 64 69 72 20 64  .db.file mkdir d
9d60: 61 74 61 5f 64 69 72 0a 64 6f 5f 74 65 73 74 20  ata_dir.do_test 
9d70: 70 72 61 67 6d 61 2d 32 30 2e 31 20 7b 0a 20 20  pragma-20.1 {.  
9d80: 63 61 74 63 68 73 71 6c 20 7b 50 52 41 47 4d 41  catchsql {PRAGMA
9d90: 20 64 61 74 61 5f 73 74 6f 72 65 5f 64 69 72 65   data_store_dire
9da0: 63 74 6f 72 79 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a  ctory}.} {0 {}}.
9db0: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 32  do_test pragma-2
9dc0: 30 2e 32 20 7b 0a 20 20 73 65 74 20 70 77 64 20  0.2 {.  set pwd 
9dd0: 5b 73 74 72 69 6e 67 20 6d 61 70 20 7b 27 20 27  [string map {' '
9de0: 27 7d 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e  '} [file nativen
9df0: 61 6d 65 20 5b 67 65 74 5f 70 77 64 5d 5d 5d 0a  ame [get_pwd]]].
9e00: 20 20 63 61 74 63 68 73 71 6c 20 22 50 52 41 47    catchsql "PRAG
9e10: 4d 41 20 64 61 74 61 5f 73 74 6f 72 65 5f 64 69  MA data_store_di
9e20: 72 65 63 74 6f 72 79 3d 27 24 70 77 64 27 3b 22  rectory='$pwd';"
9e30: 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73  .} {0 {}}.do_tes
9e40: 74 20 70 72 61 67 6d 61 2d 32 30 2e 33 20 7b 0a  t pragma-20.3 {.
9e50: 20 20 63 61 74 63 68 73 71 6c 20 7b 50 52 41 47    catchsql {PRAG
9e60: 4d 41 20 64 61 74 61 5f 73 74 6f 72 65 5f 64 69  MA data_store_di
9e70: 72 65 63 74 6f 72 79 7d 0a 7d 20 5b 6c 69 73 74  rectory}.} [list
9e80: 20 30 20 5b 6c 69 73 74 20 5b 66 69 6c 65 20 6e   0 [list [file n
9e90: 61 74 69 76 65 6e 61 6d 65 20 5b 67 65 74 5f 70  ativename [get_p
9ea0: 77 64 5d 5d 5d 5d 0a 64 6f 5f 74 65 73 74 20 70  wd]]]].do_test p
9eb0: 72 61 67 6d 61 2d 32 30 2e 34 20 7b 0a 20 20 73  ragma-20.4 {.  s
9ec0: 65 74 20 70 77 64 20 5b 73 74 72 69 6e 67 20 6d  et pwd [string m
9ed0: 61 70 20 7b 27 20 27 27 7d 20 5b 66 69 6c 65 20  ap {' ''} [file 
9ee0: 6e 61 74 69 76 65 6e 61 6d 65 20 5c 0a 20 20 20  nativename \.   
9ef0: 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74   [file join [get
9f00: 5f 70 77 64 5d 20 64 61 74 61 5f 64 69 72 5d 5d  _pwd] data_dir]]
9f10: 5d 0a 20 20 63 61 74 63 68 73 71 6c 20 22 50 52  ].  catchsql "PR
9f20: 41 47 4d 41 20 64 61 74 61 5f 73 74 6f 72 65 5f  AGMA data_store_
9f30: 64 69 72 65 63 74 6f 72 79 3d 27 24 70 77 64 27  directory='$pwd'
9f40: 3b 22 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74  ;".} {0 {}}.do_t
9f50: 65 73 74 20 70 72 61 67 6d 61 2d 32 30 2e 35 20  est pragma-20.5 
9f60: 7b 0a 20 20 73 71 6c 69 74 65 33 20 64 62 32 20  {.  sqlite3 db2 
9f70: 74 65 73 74 32 2e 64 62 0a 20 20 63 61 74 63 68  test2.db.  catch
9f80: 73 71 6c 20 22 50 52 41 47 4d 41 20 64 61 74 61  sql "PRAGMA data
9f90: 62 61 73 65 5f 6c 69 73 74 3b 22 20 64 62 32 0a  base_list;" db2.
9fa0: 7d 20 5b 6c 69 73 74 20 30 20 5b 6c 69 73 74 20  } [list 0 [list 
9fb0: 30 20 6d 61 69 6e 20 5b 66 69 6c 65 20 6e 61 74  0 main [file nat
9fc0: 69 76 65 6e 61 6d 65 20 5c 0a 20 20 20 20 5b 66  ivename \.    [f
9fd0: 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 5f 70 77  ile join [get_pw
9fe0: 64 5d 20 64 61 74 61 5f 64 69 72 20 74 65 73 74  d] data_dir test
9ff0: 32 2e 64 62 5d 5d 5d 5d 0a 63 61 74 63 68 20 7b  2.db]]]].catch {
a000: 64 62 32 20 63 6c 6f 73 65 7d 0a 64 6f 5f 74 65  db2 close}.do_te
a010: 73 74 20 70 72 61 67 6d 61 2d 32 30 2e 36 20 7b  st pragma-20.6 {
a020: 0a 20 20 73 71 6c 69 74 65 33 20 64 62 32 20 5b  .  sqlite3 db2 [
a030: 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 5f 70  file join [get_p
a040: 77 64 5d 20 74 65 73 74 32 2e 64 62 5d 0a 20 20  wd] test2.db].  
a050: 63 61 74 63 68 73 71 6c 20 22 50 52 41 47 4d 41  catchsql "PRAGMA
a060: 20 64 61 74 61 62 61 73 65 5f 6c 69 73 74 3b 22   database_list;"
a070: 20 64 62 32 0a 7d 20 5b 6c 69 73 74 20 30 20 5b   db2.} [list 0 [
a080: 6c 69 73 74 20 30 20 6d 61 69 6e 20 5b 66 69 6c  list 0 main [fil
a090: 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5c 0a 20  e nativename \. 
a0a0: 20 20 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67     [file join [g
a0b0: 65 74 5f 70 77 64 5d 20 74 65 73 74 32 2e 64 62  et_pwd] test2.db
a0c0: 5d 5d 5d 5d 0a 63 61 74 63 68 20 7b 64 62 32 20  ]]]].catch {db2 
a0d0: 63 6c 6f 73 65 7d 0a 64 6f 5f 74 65 73 74 20 70  close}.do_test p
a0e0: 72 61 67 6d 61 2d 32 30 2e 37 20 7b 0a 20 20 63  ragma-20.7 {.  c
a0f0: 61 74 63 68 73 71 6c 20 22 50 52 41 47 4d 41 20  atchsql "PRAGMA 
a100: 64 61 74 61 5f 73 74 6f 72 65 5f 64 69 72 65 63  data_store_direc
a110: 74 6f 72 79 3d 27 27 3b 22 0a 7d 20 7b 30 20 7b  tory='';".} {0 {
a120: 7d 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  }}.do_test pragm
a130: 61 2d 32 30 2e 38 20 7b 0a 20 20 63 61 74 63 68  a-20.8 {.  catch
a140: 73 71 6c 20 7b 50 52 41 47 4d 41 20 64 61 74 61  sql {PRAGMA data
a150: 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79  _store_directory
a160: 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 0a 66 6f 72 63  }.} {0 {}}..forc
a170: 65 64 65 6c 65 74 65 20 64 61 74 61 5f 64 69 72  edelete data_dir
a180: 0a 7d 20 3b 23 20 65 6e 64 69 66 20 77 69 6e 64  .} ;# endif wind
a190: 6f 77 73 0a 0a 64 61 74 61 62 61 73 65 5f 6d 61  ows..database_ma
a1a0: 79 5f 62 65 5f 63 6f 72 72 75 70 74 0a 0a 64 6f  y_be_corrupt..do
a1b0: 5f 74 65 73 74 20 32 31 2e 31 20 7b 0a 20 20 23  _test 21.1 {.  #
a1c0: 20 43 72 65 61 74 65 20 61 20 63 6f 72 72 75 70   Create a corrup
a1d0: 74 20 64 61 74 61 62 61 73 65 20 69 6e 20 74 65  t database in te
a1e0: 73 74 65 72 72 2e 64 62 2e 20 41 6e 64 20 61 20  sterr.db. And a 
a1f0: 6e 6f 6e 2d 63 6f 72 72 75 70 74 20 61 74 20 74  non-corrupt at t
a200: 65 73 74 2e 64 62 2e 0a 20 20 23 0a 20 20 64 62  est.db..  #.  db
a210: 20 63 6c 6f 73 65 0a 20 20 66 6f 72 63 65 64 65   close.  forcede
a220: 6c 65 74 65 20 74 65 73 74 2e 64 62 0a 20 20 73  lete test.db.  s
a230: 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64  qlite3 db test.d
a240: 62 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 0a 20  b.  execsql { . 
a250: 20 20 20 50 52 41 47 4d 41 20 70 61 67 65 5f 73     PRAGMA page_s
a260: 69 7a 65 20 3d 20 31 30 32 34 3b 0a 20 20 20 20  ize = 1024;.    
a270: 50 52 41 47 4d 41 20 61 75 74 6f 5f 76 61 63 75  PRAGMA auto_vacu
a280: 75 6d 20 3d 20 30 3b 0a 20 20 20 20 43 52 45 41  um = 0;.    CREA
a290: 54 45 20 54 41 42 4c 45 20 74 31 28 61 20 50 52  TE TABLE t1(a PR
a2a0: 49 4d 41 52 59 20 4b 45 59 2c 20 62 29 3b 0a 20  IMARY KEY, b);. 
a2b0: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
a2c0: 31 20 56 41 4c 55 45 53 28 31 2c 20 31 29 3b 0a  1 VALUES(1, 1);.
a2d0: 20 20 7d 0a 20 20 66 6f 72 20 7b 73 65 74 20 69    }.  for {set i
a2e0: 20 30 7d 20 7b 24 69 20 3c 20 31 30 7d 20 7b 69   0} {$i < 10} {i
a2f0: 6e 63 72 20 69 7d 20 7b 0a 20 20 20 20 65 78 65  ncr i} {.    exe
a300: 63 73 71 6c 20 7b 20 49 4e 53 45 52 54 20 49 4e  csql { INSERT IN
a310: 54 4f 20 74 31 20 53 45 4c 45 43 54 20 61 20 2b  TO t1 SELECT a +
a320: 20 28 31 20 3c 3c 20 24 69 29 2c 20 62 20 2b 20   (1 << $i), b + 
a330: 28 31 20 3c 3c 20 24 69 29 20 46 52 4f 4d 20 74  (1 << $i) FROM t
a340: 31 20 7d 0a 20 20 7d 0a 20 20 64 62 20 63 6c 6f  1 }.  }.  db clo
a350: 73 65 0a 20 20 66 6f 72 63 65 63 6f 70 79 20 74  se.  forcecopy t
a360: 65 73 74 2e 64 62 20 74 65 73 74 65 72 72 2e 64  est.db testerr.d
a370: 62 0a 20 20 68 65 78 69 6f 5f 77 72 69 74 65 20  b.  hexio_write 
a380: 74 65 73 74 65 72 72 2e 64 62 20 31 35 30 30 30  testerr.db 15000
a390: 20 5b 73 74 72 69 6e 67 20 72 65 70 65 61 74 20   [string repeat 
a3a0: 35 35 20 31 30 30 5d 0a 7d 20 7b 31 30 30 7d 0a  55 100].} {100}.
a3b0: 0a 73 65 74 20 6d 61 69 6e 65 72 72 20 7b 2a 2a  .set mainerr {**
a3c0: 2a 20 69 6e 20 64 61 74 61 62 61 73 65 20 6d 61  * in database ma
a3d0: 69 6e 20 2a 2a 2a 0a 4d 75 6c 74 69 70 6c 65 20  in ***.Multiple 
a3e0: 75 73 65 73 20 66 6f 72 20 62 79 74 65 20 36 37  uses for byte 67
a3f0: 32 20 6f 66 20 70 61 67 65 20 31 35 7d 0a 73 65  2 of page 15}.se
a400: 74 20 61 75 78 65 72 72 20 7b 2a 2a 2a 20 69 6e  t auxerr {*** in
a410: 20 64 61 74 61 62 61 73 65 20 61 75 78 20 2a 2a   database aux **
a420: 2a 0a 4d 75 6c 74 69 70 6c 65 20 75 73 65 73 20  *.Multiple uses 
a430: 66 6f 72 20 62 79 74 65 20 36 37 32 20 6f 66 20  for byte 672 of 
a440: 70 61 67 65 20 31 35 7d 0a 0a 73 65 74 20 6d 61  page 15}..set ma
a450: 69 6e 65 72 72 20 7b 2f 7b 5c 2a 5c 2a 5c 2a 20  inerr {/{\*\*\* 
a460: 69 6e 20 64 61 74 61 62 61 73 65 20 6d 61 69 6e  in database main
a470: 20 5c 2a 5c 2a 5c 2a 0a 4d 75 6c 74 69 70 6c 65   \*\*\*.Multiple
a480: 20 75 73 65 73 20 66 6f 72 20 62 79 74 65 20 36   uses for byte 6
a490: 37 32 20 6f 66 20 70 61 67 65 20 31 35 7d 2e 2a  72 of page 15}.*
a4a0: 2f 7d 0a 73 65 74 20 61 75 78 65 72 72 20 7b 2f  /}.set auxerr {/
a4b0: 7b 5c 2a 5c 2a 5c 2a 20 69 6e 20 64 61 74 61 62  {\*\*\* in datab
a4c0: 61 73 65 20 61 75 78 20 5c 2a 5c 2a 5c 2a 0a 4d  ase aux \*\*\*.M
a4d0: 75 6c 74 69 70 6c 65 20 75 73 65 73 20 66 6f 72  ultiple uses for
a4e0: 20 62 79 74 65 20 36 37 32 20 6f 66 20 70 61 67   byte 672 of pag
a4f0: 65 20 31 35 7d 2e 2a 2f 7d 0a 0a 64 6f 5f 74 65  e 15}.*/}..do_te
a500: 73 74 20 32 32 2e 32 20 7b 0a 20 20 63 61 74 63  st 22.2 {.  catc
a510: 68 20 7b 20 64 62 20 63 6c 6f 73 65 20 7d 0a 20  h { db close }. 
a520: 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74   sqlite3 db test
a530: 65 72 72 2e 64 62 0a 20 20 65 78 65 63 73 71 6c  err.db.  execsql
a540: 20 7b 20 50 52 41 47 4d 41 20 69 6e 74 65 67 72   { PRAGMA integr
a550: 69 74 79 5f 63 68 65 63 6b 20 7d 0a 7d 20 24 6d  ity_check }.} $m
a560: 61 69 6e 65 72 72 0a 0a 64 6f 5f 74 65 73 74 20  ainerr..do_test 
a570: 32 32 2e 33 2e 31 20 7b 0a 20 20 63 61 74 63 68  22.3.1 {.  catch
a580: 20 7b 20 64 62 20 63 6c 6f 73 65 20 7d 0a 20 20   { db close }.  
a590: 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e  sqlite3 db test.
a5a0: 64 62 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 0a  db.  execsql { .
a5b0: 20 20 20 20 41 54 54 41 43 48 20 27 74 65 73 74      ATTACH 'test
a5c0: 65 72 72 2e 64 62 27 20 41 53 20 27 61 75 78 27  err.db' AS 'aux'
a5d0: 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 69 6e 74  ;.    PRAGMA int
a5e0: 65 67 72 69 74 79 5f 63 68 65 63 6b 3b 0a 20 20  egrity_check;.  
a5f0: 7d 0a 7d 20 24 61 75 78 65 72 72 0a 64 6f 5f 74  }.} $auxerr.do_t
a600: 65 73 74 20 32 32 2e 33 2e 32 20 7b 0a 20 20 65  est 22.3.2 {.  e
a610: 78 65 63 73 71 6c 20 7b 20 50 52 41 47 4d 41 20  xecsql { PRAGMA 
a620: 6d 61 69 6e 2e 69 6e 74 65 67 72 69 74 79 5f 63  main.integrity_c
a630: 68 65 63 6b 3b 20 7d 0a 7d 20 7b 6f 6b 7d 0a 64  heck; }.} {ok}.d
a640: 6f 5f 74 65 73 74 20 32 32 2e 33 2e 33 20 7b 0a  o_test 22.3.3 {.
a650: 20 20 65 78 65 63 73 71 6c 20 7b 20 50 52 41 47    execsql { PRAG
a660: 4d 41 20 61 75 78 2e 69 6e 74 65 67 72 69 74 79  MA aux.integrity
a670: 5f 63 68 65 63 6b 3b 20 7d 0a 7d 20 24 61 75 78  _check; }.} $aux
a680: 65 72 72 0a 0a 64 6f 5f 74 65 73 74 20 32 32 2e  err..do_test 22.
a690: 34 2e 31 20 7b 0a 20 20 63 61 74 63 68 20 7b 20  4.1 {.  catch { 
a6a0: 64 62 20 63 6c 6f 73 65 20 7d 0a 20 20 73 71 6c  db close }.  sql
a6b0: 69 74 65 33 20 64 62 20 74 65 73 74 65 72 72 2e  ite3 db testerr.
a6c0: 64 62 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 0a  db.  execsql { .
a6d0: 20 20 20 20 41 54 54 41 43 48 20 27 74 65 73 74      ATTACH 'test
a6e0: 2e 64 62 27 20 41 53 20 27 61 75 78 27 3b 0a 20  .db' AS 'aux';. 
a6f0: 20 20 20 50 52 41 47 4d 41 20 69 6e 74 65 67 72     PRAGMA integr
a700: 69 74 79 5f 63 68 65 63 6b 3b 0a 20 20 7d 0a 7d  ity_check;.  }.}
a710: 20 24 6d 61 69 6e 65 72 72 0a 64 6f 5f 74 65 73   $mainerr.do_tes
a720: 74 20 32 32 2e 34 2e 32 20 7b 0a 20 20 65 78 65  t 22.4.2 {.  exe
a730: 63 73 71 6c 20 7b 20 50 52 41 47 4d 41 20 6d 61  csql { PRAGMA ma
a740: 69 6e 2e 69 6e 74 65 67 72 69 74 79 5f 63 68 65  in.integrity_che
a750: 63 6b 3b 20 7d 0a 7d 20 24 6d 61 69 6e 65 72 72  ck; }.} $mainerr
a760: 0a 64 6f 5f 74 65 73 74 20 32 32 2e 34 2e 33 20  .do_test 22.4.3 
a770: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 50 52  {.  execsql { PR
a780: 41 47 4d 41 20 61 75 78 2e 69 6e 74 65 67 72 69  AGMA aux.integri
a790: 74 79 5f 63 68 65 63 6b 3b 20 7d 0a 7d 20 7b 6f  ty_check; }.} {o
a7a0: 6b 7d 0a 0a 64 62 20 63 6c 6f 73 65 0a 66 6f 72  k}..db close.for
a7b0: 63 65 64 65 6c 65 74 65 20 74 65 73 74 2e 64 62  cedelete test.db
a7c0: 20 74 65 73 74 2e 64 62 2d 77 61 6c 20 74 65 73   test.db-wal tes
a7d0: 74 2e 64 62 2d 6a 6f 75 72 6e 61 6c 0a 73 71 6c  t.db-journal.sql
a7e0: 69 74 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a  ite3 db test.db.
a7f0: 73 71 6c 69 74 65 33 20 64 62 32 20 74 65 73 74  sqlite3 db2 test
a800: 2e 64 62 0a 64 6f 5f 74 65 73 74 20 32 33 2e 31  .db.do_test 23.1
a810: 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a 20   {.  db eval {. 
a820: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
a830: 74 31 28 61 20 49 4e 54 45 47 45 52 20 50 52 49  t1(a INTEGER PRI
a840: 4d 41 52 59 20 4b 45 59 2c 62 2c 63 2c 64 29 3b  MARY KEY,b,c,d);
a850: 0a 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45  .    CREATE INDE
a860: 58 20 69 31 20 4f 4e 20 74 31 28 62 2c 63 29 3b  X i1 ON t1(b,c);
a870: 0a 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45  .    CREATE INDE
a880: 58 20 69 32 20 4f 4e 20 74 31 28 63 2c 64 29 3b  X i2 ON t1(c,d);
a890: 0a 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45  .    CREATE INDE
a8a0: 58 20 69 32 78 20 4f 4e 20 74 31 28 64 20 43 4f  X i2x ON t1(d CO
a8b0: 4c 4c 41 54 45 20 6e 6f 63 61 73 65 2c 20 63 20  LLATE nocase, c 
a8c0: 44 45 53 43 29 3b 0a 20 20 20 20 43 52 45 41 54  DESC);.    CREAT
a8d0: 45 20 54 41 42 4c 45 20 74 32 28 78 20 49 4e 54  E TABLE t2(x INT
a8e0: 45 47 45 52 20 52 45 46 45 52 45 4e 43 45 53 20  EGER REFERENCES 
a8f0: 74 31 29 3b 0a 20 20 7d 0a 20 20 64 62 32 20 65  t1);.  }.  db2 e
a900: 76 61 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65  val {SELECT name
a910: 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73   FROM sqlite_mas
a920: 74 65 72 7d 0a 7d 20 7b 74 31 20 69 31 20 69 32  ter}.} {t1 i1 i2
a930: 20 69 32 78 20 74 32 7d 0a 64 6f 5f 74 65 73 74   i2x t2}.do_test
a940: 20 32 33 2e 32 61 20 7b 0a 20 20 64 62 20 65 76   23.2a {.  db ev
a950: 61 6c 20 7b 0a 20 20 20 20 44 52 4f 50 20 49 4e  al {.    DROP IN
a960: 44 45 58 20 69 32 3b 0a 20 20 20 20 43 52 45 41  DEX i2;.    CREA
a970: 54 45 20 49 4e 44 45 58 20 69 32 20 4f 4e 20 74  TE INDEX i2 ON t
a980: 31 28 63 2c 64 2c 62 29 3b 0a 20 20 7d 0a 20 20  1(c,d,b);.  }.  
a990: 63 61 70 74 75 72 65 5f 70 72 61 67 6d 61 20 64  capture_pragma d
a9a0: 62 32 20 6f 75 74 20 7b 50 52 41 47 4d 41 20 69  b2 out {PRAGMA i
a9b0: 6e 64 65 78 5f 69 6e 66 6f 28 69 32 29 7d 0a 20  ndex_info(i2)}. 
a9c0: 20 64 62 32 20 65 76 61 6c 20 7b 53 45 4c 45 43   db2 eval {SELEC
a9d0: 54 20 63 69 64 2c 20 6e 61 6d 65 2c 20 27 7c 27  T cid, name, '|'
a9e0: 20 46 52 4f 4d 20 6f 75 74 20 4f 52 44 45 52 20   FROM out ORDER 
a9f0: 42 59 20 73 65 71 6e 6f 7d 0a 7d 20 7b 32 20 63  BY seqno}.} {2 c
aa00: 20 7c 20 33 20 64 20 7c 20 31 20 62 20 7c 7d 0a   | 3 d | 1 b |}.
aa10: 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20  .# EVIDENCE-OF: 
aa20: 52 2d 34 34 38 37 34 2d 34 36 33 32 35 20 50 52  R-44874-46325 PR
aa30: 41 47 4d 41 20 64 61 74 61 62 61 73 65 2e 69 6e  AGMA database.in
aa40: 64 65 78 5f 78 69 6e 66 6f 28 69 6e 64 65 78 2d  dex_xinfo(index-
aa50: 6e 61 6d 65 29 3b 0a 23 20 54 68 69 73 20 70 72  name);.# This pr
aa60: 61 67 6d 61 20 72 65 74 75 72 6e 73 20 69 6e 66  agma returns inf
aa70: 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 65  ormation about e
aa80: 76 65 72 79 20 63 6f 6c 75 6d 6e 20 69 6e 20 61  very column in a
aa90: 6e 20 69 6e 64 65 78 2e 0a 23 0a 23 20 45 56 49  n index..#.# EVI
aaa0: 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 34 35 39 37  DENCE-OF: R-4597
aab0: 30 2d 33 35 36 31 38 20 55 6e 6c 69 6b 65 20 74  0-35618 Unlike t
aac0: 68 69 73 20 69 6e 64 65 78 5f 69 6e 66 6f 20 70  his index_info p
aad0: 72 61 67 6d 61 2c 20 74 68 69 73 20 70 72 61 67  ragma, this prag
aae0: 6d 61 0a 23 20 72 65 74 75 72 6e 73 20 69 6e 66  ma.# returns inf
aaf0: 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 65  ormation about e
ab00: 76 65 72 79 20 63 6f 6c 75 6d 6e 20 69 6e 20 74  very column in t
ab10: 68 65 20 69 6e 64 65 78 2c 20 6e 6f 74 20 6a 75  he index, not ju
ab20: 73 74 20 74 68 65 20 6b 65 79 0a 23 20 63 6f 6c  st the key.# col
ab30: 75 6d 6e 73 2e 0a 23 0a 64 6f 5f 74 65 73 74 20  umns..#.do_test 
ab40: 32 33 2e 32 62 20 7b 0a 20 20 63 61 70 74 75 72  23.2b {.  captur
ab50: 65 5f 70 72 61 67 6d 61 20 64 62 32 20 6f 75 74  e_pragma db2 out
ab60: 20 7b 50 52 41 47 4d 41 20 69 6e 64 65 78 5f 78   {PRAGMA index_x
ab70: 69 6e 66 6f 28 69 32 29 7d 0a 20 20 64 62 32 20  info(i2)}.  db2 
ab80: 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 63 69 64  eval {SELECT cid
ab90: 2c 20 6e 61 6d 65 2c 20 22 64 65 73 63 22 2c 20  , name, "desc", 
aba0: 63 6f 6c 6c 2c 20 22 6b 65 79 22 2c 20 27 7c 27  coll, "key", '|'
abb0: 20 46 52 4f 4d 20 6f 75 74 20 4f 52 44 45 52 20   FROM out ORDER 
abc0: 42 59 20 73 65 71 6e 6f 7d 0a 7d 20 7b 32 20 63  BY seqno}.} {2 c
abd0: 20 30 20 42 49 4e 41 52 59 20 31 20 7c 20 33 20   0 BINARY 1 | 3 
abe0: 64 20 30 20 42 49 4e 41 52 59 20 31 20 7c 20 31  d 0 BINARY 1 | 1
abf0: 20 62 20 30 20 42 49 4e 41 52 59 20 31 20 7c 20   b 0 BINARY 1 | 
ac00: 2d 31 20 7b 7d 20 30 20 42 49 4e 41 52 59 20 30  -1 {} 0 BINARY 0
ac10: 20 7c 7d 0a 0a 23 20 28 54 68 65 20 66 69 72 73   |}..# (The firs
ac20: 74 20 63 6f 6c 75 6d 6e 20 6f 66 20 6f 75 74 70  t column of outp
ac30: 75 74 20 66 72 6f 6d 20 50 52 41 47 4d 41 20 69  ut from PRAGMA i
ac40: 6e 64 65 78 5f 78 69 6e 66 6f 20 69 73 2e 2e 2e  ndex_xinfo is...
ac50: 29 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a  ).# EVIDENCE-OF:
ac60: 20 52 2d 30 30 31 39 37 2d 31 34 32 37 39 20 54   R-00197-14279 T
ac70: 68 65 20 72 61 6e 6b 20 6f 66 20 74 68 65 20 63  he rank of the c
ac80: 6f 6c 75 6d 6e 20 77 69 74 68 69 6e 20 74 68 65  olumn within the
ac90: 20 69 6e 64 65 78 2e 20 28 30 0a 23 20 6d 65 61   index. (0.# mea
aca0: 6e 73 20 6c 65 66 74 2d 6d 6f 73 74 2e 20 4b 65  ns left-most. Ke
acb0: 79 20 63 6f 6c 75 6d 6e 73 20 63 6f 6d 65 20 62  y columns come b
acc0: 65 66 6f 72 65 20 61 75 78 69 6c 69 61 72 79 20  efore auxiliary 
acd0: 63 6f 6c 75 6d 6e 73 2e 29 0a 23 0a 23 20 28 54  columns.).#.# (T
ace0: 68 65 20 73 65 63 6f 6e 64 20 63 6f 6c 75 6d 6e  he second column
acf0: 20 6f 66 20 6f 75 74 70 75 74 20 66 72 6f 6d 20   of output from 
ad00: 50 52 41 47 4d 41 20 69 6e 64 65 78 5f 78 69 6e  PRAGMA index_xin
ad10: 66 6f 20 69 73 2e 2e 2e 29 0a 23 20 45 56 49 44  fo is...).# EVID
ad20: 45 4e 43 45 2d 4f 46 3a 20 52 2d 34 30 38 38 39  ENCE-OF: R-40889
ad30: 2d 30 36 38 33 38 20 54 68 65 20 72 61 6e 6b 20  -06838 The rank 
ad40: 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 77 69  of the column wi
ad50: 74 68 69 6e 20 74 68 65 20 74 61 62 6c 65 0a 23  thin the table.#
ad60: 20 62 65 69 6e 67 20 69 6e 64 65 78 65 64 2c 20   being indexed, 
ad70: 6f 72 20 2d 31 20 69 66 20 74 68 65 20 69 6e 64  or -1 if the ind
ad80: 65 78 2d 63 6f 6c 75 6d 6e 20 69 73 20 74 68 65  ex-column is the
ad90: 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20 74 61   rowid of the ta
ada0: 62 6c 65 0a 23 20 62 65 69 6e 67 20 69 6e 64 65  ble.# being inde
adb0: 78 65 64 2e 0a 23 0a 23 20 28 54 68 65 20 74 68  xed..#.# (The th
adc0: 69 72 64 20 63 6f 6c 75 6d 6e 20 6f 66 20 6f 75  ird column of ou
add0: 74 70 75 74 20 66 72 6f 6d 20 50 52 41 47 4d 41  tput from PRAGMA
ade0: 20 69 6e 64 65 78 5f 78 69 6e 66 6f 20 69 73 2e   index_xinfo is.
adf0: 2e 2e 29 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f  ..).# EVIDENCE-O
ae00: 46 3a 20 52 2d 32 32 37 35 31 2d 32 38 39 30 31  F: R-22751-28901
ae10: 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   The name of the
ae20: 20 63 6f 6c 75 6d 6e 20 62 65 69 6e 67 20 69 6e   column being in
ae30: 64 65 78 65 64 2c 20 6f 72 0a 23 20 4e 55 4c 4c  dexed, or.# NULL
ae40: 20 69 66 20 74 68 65 20 69 6e 64 65 78 2d 63 6f   if the index-co
ae50: 6c 75 6d 6e 20 69 73 20 74 68 65 20 72 6f 77 69  lumn is the rowi
ae60: 64 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 62  d of the table b
ae70: 65 69 6e 67 20 69 6e 64 65 78 65 64 2e 0a 23 0a  eing indexed..#.
ae80: 23 20 28 54 68 65 20 66 6f 75 72 74 68 20 63 6f  # (The fourth co
ae90: 6c 75 6d 6e 20 6f 66 20 6f 75 74 70 75 74 20 66  lumn of output f
aea0: 72 6f 6d 20 50 52 41 47 4d 41 20 69 6e 64 65 78  rom PRAGMA index
aeb0: 5f 78 69 6e 66 6f 20 69 73 2e 2e 2e 29 0a 23 20  _xinfo is...).# 
aec0: 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 31  EVIDENCE-OF: R-1
aed0: 31 38 34 37 2d 30 39 31 37 39 20 31 20 69 66 20  1847-09179 1 if 
aee0: 74 68 65 20 69 6e 64 65 78 2d 63 6f 6c 75 6d 6e  the index-column
aef0: 20 69 73 20 73 6f 72 74 65 64 20 69 6e 20 72 65   is sorted in re
af00: 76 65 72 73 65 0a 23 20 28 44 45 53 43 29 20 6f  verse.# (DESC) o
af10: 72 64 65 72 20 62 79 20 74 68 65 20 69 6e 64 65  rder by the inde
af20: 78 20 61 6e 64 20 30 20 6f 74 68 65 72 77 69 73  x and 0 otherwis
af30: 65 2e 0a 23 0a 23 20 28 54 68 65 20 66 69 66 74  e..#.# (The fift
af40: 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 6f 75 74 70  h column of outp
af50: 75 74 20 66 72 6f 6d 20 50 52 41 47 4d 41 20 69  ut from PRAGMA i
af60: 6e 64 65 78 5f 78 69 6e 66 6f 20 69 73 2e 2e 2e  ndex_xinfo is...
af70: 29 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a  ).# EVIDENCE-OF:
af80: 20 52 2d 31 35 33 31 33 2d 31 39 35 34 30 20 54   R-15313-19540 T
af90: 68 65 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 20  he name for the 
afa0: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
afb0: 63 65 20 75 73 65 64 20 74 6f 0a 23 20 63 6f 6d  ce used to.# com
afc0: 70 61 72 65 20 76 61 6c 75 65 73 20 69 6e 20 74  pare values in t
afd0: 68 65 20 69 6e 64 65 78 2d 63 6f 6c 75 6d 6e 2e  he index-column.
afe0: 0a 23 0a 23 20 28 54 68 65 20 73 69 78 74 68 20  .#.# (The sixth 
aff0: 63 6f 6c 75 6d 6e 20 6f 66 20 6f 75 74 70 75 74  column of output
b000: 20 66 72 6f 6d 20 50 52 41 47 4d 41 20 69 6e 64   from PRAGMA ind
b010: 65 78 5f 78 69 6e 66 6f 20 69 73 2e 2e 2e 29 0a  ex_xinfo is...).
b020: 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52  # EVIDENCE-OF: R
b030: 2d 31 34 33 31 30 2d 36 34 35 35 33 20 31 20 69  -14310-64553 1 i
b040: 66 20 74 68 65 20 69 6e 64 65 78 2d 63 6f 6c 75  f the index-colu
b050: 6d 6e 20 69 73 20 61 20 6b 65 79 20 63 6f 6c 75  mn is a key colu
b060: 6d 6e 20 61 6e 64 20 30 0a 23 20 69 66 20 74 68  mn and 0.# if th
b070: 65 20 69 6e 64 65 78 2d 63 6f 6c 75 6d 6e 20 69  e index-column i
b080: 73 20 61 6e 20 61 75 78 69 6c 69 61 72 79 20 63  s an auxiliary c
b090: 6f 6c 75 6d 6e 2e 0a 23 0a 64 6f 5f 74 65 73 74  olumn..#.do_test
b0a0: 20 32 33 2e 32 63 20 7b 0a 20 20 64 62 32 20 65   23.2c {.  db2 e
b0b0: 76 61 6c 20 7b 50 52 41 47 4d 41 20 69 6e 64 65  val {PRAGMA inde
b0c0: 78 5f 78 69 6e 66 6f 28 69 32 29 7d 0a 7d 20 7b  x_xinfo(i2)}.} {
b0d0: 30 20 32 20 63 20 30 20 42 49 4e 41 52 59 20 31  0 2 c 0 BINARY 1
b0e0: 20 31 20 33 20 64 20 30 20 42 49 4e 41 52 59 20   1 3 d 0 BINARY 
b0f0: 31 20 32 20 31 20 62 20 30 20 42 49 4e 41 52 59  1 2 1 b 0 BINARY
b100: 20 31 20 33 20 2d 31 20 7b 7d 20 30 20 42 49 4e   1 3 -1 {} 0 BIN
b110: 41 52 59 20 30 7d 0a 64 6f 5f 74 65 73 74 20 32  ARY 0}.do_test 2
b120: 33 2e 32 64 20 7b 0a 20 20 64 62 32 20 65 76 61  3.2d {.  db2 eva
b130: 6c 20 7b 50 52 41 47 4d 41 20 69 6e 64 65 78 5f  l {PRAGMA index_
b140: 78 69 6e 66 6f 28 69 32 78 29 7d 0a 7d 20 7b 30  xinfo(i2x)}.} {0
b150: 20 33 20 64 20 30 20 6e 6f 63 61 73 65 20 31 20   3 d 0 nocase 1 
b160: 31 20 32 20 63 20 31 20 42 49 4e 41 52 59 20 31  1 2 c 1 BINARY 1
b170: 20 32 20 2d 31 20 7b 7d 20 30 20 42 49 4e 41 52   2 -1 {} 0 BINAR
b180: 59 20 30 7d 0a 0a 23 20 45 56 49 44 45 4e 43 45  Y 0}..# EVIDENCE
b190: 2d 4f 46 3a 20 52 2d 36 33 35 30 30 2d 33 32 30  -OF: R-63500-320
b1a0: 32 34 20 50 52 41 47 4d 41 20 64 61 74 61 62 61  24 PRAGMA databa
b1b0: 73 65 2e 69 6e 64 65 78 5f 6c 69 73 74 28 74 61  se.index_list(ta
b1c0: 62 6c 65 2d 6e 61 6d 65 29 3b 0a 23 20 54 68 69  ble-name);.# Thi
b1d0: 73 20 70 72 61 67 6d 61 20 72 65 74 75 72 6e 73  s pragma returns
b1e0: 20 6f 6e 65 20 72 6f 77 20 66 6f 72 20 65 61 63   one row for eac
b1f0: 68 20 69 6e 64 65 78 20 61 73 73 6f 63 69 61 74  h index associat
b200: 65 64 20 77 69 74 68 20 74 68 65 20 67 69 76 65  ed with the give
b210: 6e 0a 23 20 74 61 62 6c 65 2e 0a 23 0a 23 20 28  n.# table..#.# (
b220: 54 68 65 20 66 69 72 73 74 20 63 6f 6c 75 6d 6e  The first column
b230: 20 6f 66 20 6f 75 74 70 75 74 20 66 72 6f 6d 20   of output from 
b240: 50 52 41 47 4d 41 20 69 6e 64 65 78 5f 6c 69 73  PRAGMA index_lis
b250: 74 20 69 73 2e 2e 2e 29 0a 23 20 45 56 49 44 45  t is...).# EVIDE
b260: 4e 43 45 2d 4f 46 3a 20 52 2d 30 32 37 35 33 2d  NCE-OF: R-02753-
b270: 32 34 37 34 38 20 41 20 73 65 71 75 65 6e 63 65  24748 A sequence
b280: 20 6e 75 6d 62 65 72 20 61 73 73 69 67 6e 65 64   number assigned
b290: 20 74 6f 20 65 61 63 68 20 69 6e 64 65 78 0a 23   to each index.#
b2a0: 20 66 6f 72 20 69 6e 74 65 72 6e 61 6c 20 74 72   for internal tr
b2b0: 61 63 6b 69 6e 67 20 70 75 72 70 6f 73 65 73 2e  acking purposes.
b2c0: 0a 23 0a 23 20 28 54 68 65 20 73 65 63 6f 6e 64  .#.# (The second
b2d0: 20 63 6f 6c 75 6d 6e 20 6f 66 20 6f 75 74 70 75   column of outpu
b2e0: 74 20 66 72 6f 6d 20 50 52 41 47 4d 41 20 69 6e  t from PRAGMA in
b2f0: 64 65 78 5f 6c 69 73 74 20 69 73 2e 2e 2e 29 0a  dex_list is...).
b300: 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52  # EVIDENCE-OF: R
b310: 2d 33 35 34 39 36 2d 30 33 36 33 35 20 54 68 65  -35496-03635 The
b320: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 69 6e 64   name of the ind
b330: 65 78 2e 0a 23 0a 23 20 28 54 68 65 20 74 68 69  ex..#.# (The thi
b340: 72 64 20 63 6f 6c 75 6d 6e 20 6f 66 20 6f 75 74  rd column of out
b350: 70 75 74 20 66 72 6f 6d 20 50 52 41 47 4d 41 20  put from PRAGMA 
b360: 69 6e 64 65 78 5f 6c 69 73 74 20 69 73 2e 2e 2e  index_list is...
b370: 29 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a  ).# EVIDENCE-OF:
b380: 20 52 2d 35 37 33 30 31 2d 36 34 35 30 36 20 22   R-57301-64506 "
b390: 31 22 20 69 66 20 74 68 65 20 69 6e 64 65 78 20  1" if the index 
b3a0: 69 73 20 55 4e 49 51 55 45 20 61 6e 64 20 22 30  is UNIQUE and "0
b3b0: 22 20 69 66 20 6e 6f 74 2e 0a 23 0a 23 20 28 54  " if not..#.# (T
b3c0: 68 65 20 66 6f 75 72 74 68 20 63 6f 6c 75 6d 6e  he fourth column
b3d0: 20 6f 66 20 6f 75 74 70 75 74 20 66 72 6f 6d 20   of output from 
b3e0: 50 52 41 47 4d 41 20 69 6e 64 65 78 5f 6c 69 73  PRAGMA index_lis
b3f0: 74 20 69 73 2e 2e 2e 29 0a 23 20 45 56 49 44 45  t is...).# EVIDE
b400: 4e 43 45 2d 4f 46 3a 20 52 2d 33 36 36 30 39 2d  NCE-OF: R-36609-
b410: 33 39 35 35 34 20 22 63 22 20 69 66 20 74 68 65  39554 "c" if the
b420: 20 69 6e 64 65 78 20 77 61 73 20 63 72 65 61 74   index was creat
b430: 65 64 20 62 79 20 61 20 43 52 45 41 54 45 0a 23  ed by a CREATE.#
b440: 20 49 4e 44 45 58 20 73 74 61 74 65 6d 65 6e 74   INDEX statement
b450: 2c 20 22 75 22 20 69 66 20 74 68 65 20 69 6e 64  , "u" if the ind
b460: 65 78 20 77 61 73 20 63 72 65 61 74 65 64 20 62  ex was created b
b470: 79 20 61 20 55 4e 49 51 55 45 20 63 6f 6e 73 74  y a UNIQUE const
b480: 72 61 69 6e 74 2c 0a 23 20 6f 72 20 22 70 6b 22  raint,.# or "pk"
b490: 20 69 66 20 74 68 65 20 69 6e 64 65 78 20 77 61   if the index wa
b4a0: 73 20 63 72 65 61 74 65 64 20 62 79 20 61 20 50  s created by a P
b4b0: 52 49 4d 41 52 59 20 4b 45 59 20 63 6f 6e 73 74  RIMARY KEY const
b4c0: 72 61 69 6e 74 2e 0a 23 0a 64 6f 5f 74 65 73 74  raint..#.do_test
b4d0: 20 32 33 2e 33 20 7b 0a 20 20 64 62 20 65 76 61   23.3 {.  db eva
b4e0: 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 49  l {.    CREATE I
b4f0: 4e 44 45 58 20 69 33 20 4f 4e 20 74 31 28 64 2c  NDEX i3 ON t1(d,
b500: 62 2c 63 29 3b 0a 20 20 7d 0a 20 20 63 61 70 74  b,c);.  }.  capt
b510: 75 72 65 5f 70 72 61 67 6d 61 20 64 62 32 20 6f  ure_pragma db2 o
b520: 75 74 20 7b 50 52 41 47 4d 41 20 69 6e 64 65 78  ut {PRAGMA index
b530: 5f 6c 69 73 74 28 74 31 29 7d 0a 20 20 64 62 32  _list(t1)}.  db2
b540: 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 73 65   eval {SELECT se
b550: 71 2c 20 6e 61 6d 65 2c 20 22 75 6e 69 71 75 65  q, name, "unique
b560: 22 2c 20 6f 72 69 67 69 6e 2c 20 27 7c 27 20 46  ", origin, '|' F
b570: 52 4f 4d 20 6f 75 74 20 4f 52 44 45 52 20 42 59  ROM out ORDER BY
b580: 20 73 65 71 7d 0a 7d 20 7b 30 20 69 33 20 30 20   seq}.} {0 i3 0 
b590: 63 20 7c 20 31 20 69 32 20 30 20 63 20 7c 20 32  c | 1 i2 0 c | 2
b5a0: 20 69 32 78 20 30 20 63 20 7c 20 33 20 69 31 20   i2x 0 c | 3 i1 
b5b0: 30 20 63 20 7c 7d 0a 64 6f 5f 74 65 73 74 20 32  0 c |}.do_test 2
b5c0: 33 2e 34 20 7b 0a 20 20 64 62 20 65 76 61 6c 20  3.4 {.  db eval 
b5d0: 7b 0a 20 20 20 20 41 4c 54 45 52 20 54 41 42 4c  {.    ALTER TABL
b5e0: 45 20 74 31 20 41 44 44 20 43 4f 4c 55 4d 4e 20  E t1 ADD COLUMN 
b5f0: 65 3b 0a 20 20 7d 0a 20 20 64 62 32 20 65 76 61  e;.  }.  db2 eva
b600: 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 74  l {.    PRAGMA t
b610: 61 62 6c 65 5f 69 6e 66 6f 28 74 31 29 3b 0a 20  able_info(t1);. 
b620: 20 7d 0a 7d 20 7b 2f 34 20 65 20 7b 7d 20 30 20   }.} {/4 e {} 0 
b630: 7b 7d 20 30 2f 7d 0a 64 6f 5f 74 65 73 74 20 32  {} 0/}.do_test 2
b640: 33 2e 35 20 7b 0a 20 20 64 62 20 65 76 61 6c 20  3.5 {.  db eval 
b650: 7b 0a 20 20 20 20 44 52 4f 50 20 54 41 42 4c 45  {.    DROP TABLE
b660: 20 74 32 3b 0a 20 20 20 20 43 52 45 41 54 45 20   t2;.    CREATE 
b670: 54 41 42 4c 45 20 74 32 28 78 2c 20 79 20 49 4e  TABLE t2(x, y IN
b680: 54 45 47 45 52 20 52 45 46 45 52 45 4e 43 45 53  TEGER REFERENCES
b690: 20 74 31 29 3b 0a 20 20 7d 0a 20 20 64 62 32 20   t1);.  }.  db2 
b6a0: 65 76 61 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d  eval {.    PRAGM
b6b0: 41 20 66 6f 72 65 69 67 6e 5f 6b 65 79 5f 6c 69  A foreign_key_li
b6c0: 73 74 28 74 32 29 3b 0a 20 20 7d 0a 7d 20 7b 30  st(t2);.  }.} {0
b6d0: 20 30 20 74 31 20 79 20 7b 7d 20 7b 4e 4f 20 41   0 t1 y {} {NO A
b6e0: 43 54 49 4f 4e 7d 20 7b 4e 4f 20 41 43 54 49 4f  CTION} {NO ACTIO
b6f0: 4e 7d 20 4e 4f 4e 45 7d 0a 0a 64 61 74 61 62 61  N} NONE}..databa
b700: 73 65 5f 6e 65 76 65 72 5f 63 6f 72 72 75 70 74  se_never_corrupt
b710: 0a 66 69 6e 69 73 68 5f 74 65 73 74 0a           .finish_test.