/ Hex Artifact Content
Login

Artifact ad99d05e411c7687302124be56f3b362204be041:


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 7d 20  us;.  }.} {2}.} 
16d0: 3b 23 20 69 66 63 61 70 61 62 6c 65 20 70 61 67  ;# ifcapable pag
16e0: 65 72 5f 70 72 61 67 6d 61 73 0a 0a 23 20 54 65  er_pragmas..# Te
16f0: 73 74 20 74 75 72 6e 69 6e 67 20 22 66 6c 61 67  st turning "flag
1700: 22 20 70 72 61 67 6d 61 73 20 6f 6e 20 61 6e 64  " pragmas on and
1710: 20 6f 66 66 2e 0a 23 0a 69 66 63 61 70 61 62 6c   off..#.ifcapabl
1720: 65 20 64 65 62 75 67 20 7b 0a 20 20 23 20 50 72  e debug {.  # Pr
1730: 61 67 6d 61 20 22 76 64 62 65 5f 6c 69 73 74 69  agma "vdbe_listi
1740: 6e 67 22 20 69 73 20 6f 6e 6c 79 20 61 76 61 69  ng" is only avai
1750: 6c 61 62 6c 65 20 69 66 20 63 6f 6d 70 69 6c 65  lable if compile
1760: 64 20 77 69 74 68 20 53 51 4c 49 54 45 5f 44 45  d with SQLITE_DE
1770: 42 55 47 0a 20 20 23 0a 20 20 64 6f 5f 74 65 73  BUG.  #.  do_tes
1780: 74 20 70 72 61 67 6d 61 2d 31 2e 31 35 20 7b 0a  t pragma-1.15 {.
1790: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20      execsql {.  
17a0: 20 20 20 20 50 52 41 47 4d 41 20 76 64 62 65 5f      PRAGMA vdbe_
17b0: 6c 69 73 74 69 6e 67 3d 59 45 53 3b 0a 20 20 20  listing=YES;.   
17c0: 20 20 20 50 52 41 47 4d 41 20 76 64 62 65 5f 6c     PRAGMA vdbe_l
17d0: 69 73 74 69 6e 67 3b 0a 20 20 20 20 7d 0a 20 20  isting;.    }.  
17e0: 7d 20 7b 31 7d 0a 20 20 64 6f 5f 74 65 73 74 20  } {1}.  do_test 
17f0: 70 72 61 67 6d 61 2d 31 2e 31 36 20 7b 0a 20 20  pragma-1.16 {.  
1800: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
1810: 20 20 50 52 41 47 4d 41 20 76 64 62 65 5f 6c 69    PRAGMA vdbe_li
1820: 73 74 69 6e 67 3d 4e 4f 3b 0a 20 20 20 20 20 20  sting=NO;.      
1830: 50 52 41 47 4d 41 20 76 64 62 65 5f 6c 69 73 74  PRAGMA vdbe_list
1840: 69 6e 67 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b  ing;.    }.  } {
1850: 30 7d 0a 7d 0a 0a 64 6f 5f 74 65 73 74 20 70 72  0}.}..do_test pr
1860: 61 67 6d 61 2d 31 2e 31 37 20 7b 0a 20 20 65 78  agma-1.17 {.  ex
1870: 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47  ecsql {.    PRAG
1880: 4d 41 20 70 61 72 73 65 72 5f 74 72 61 63 65 3d  MA parser_trace=
1890: 4f 4e 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 70  ON;.    PRAGMA p
18a0: 61 72 73 65 72 5f 74 72 61 63 65 3d 4f 46 46 3b  arser_trace=OFF;
18b0: 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73  .  }.} {}.do_tes
18c0: 74 20 70 72 61 67 6d 61 2d 31 2e 31 38 20 7b 0a  t pragma-1.18 {.
18d0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
18e0: 50 52 41 47 4d 41 20 62 6f 67 75 73 20 3d 20 2d  PRAGMA bogus = -
18f0: 31 32 33 34 3b 20 20 2d 2d 20 50 61 72 73 69 6e  1234;  -- Parsin
1900: 67 20 6f 66 20 6e 65 67 61 74 69 76 65 20 76 61  g of negative va
1910: 6c 75 65 73 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a 23  lues.  }.} {}..#
1920: 20 54 65 73 74 20 6d 6f 64 69 66 79 69 6e 67 20   Test modifying 
1930: 74 68 65 20 73 61 66 65 74 79 5f 6c 65 76 65 6c  the safety_level
1940: 20 6f 66 20 61 6e 20 61 74 74 61 63 68 65 64 20   of an attached 
1950: 64 61 74 61 62 61 73 65 2e 0a 69 66 63 61 70 61  database..ifcapa
1960: 62 6c 65 20 70 61 67 65 72 5f 70 72 61 67 6d 61  ble pager_pragma
1970: 73 26 26 61 74 74 61 63 68 20 7b 0a 20 20 64 6f  s&&attach {.  do
1980: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 32 2e 31  _test pragma-2.1
1990: 20 7b 0a 20 20 20 20 66 6f 72 63 65 64 65 6c 65   {.    forcedele
19a0: 74 65 20 74 65 73 74 32 2e 64 62 0a 20 20 20 20  te test2.db.    
19b0: 66 6f 72 63 65 64 65 6c 65 74 65 20 74 65 73 74  forcedelete test
19c0: 32 2e 64 62 2d 6a 6f 75 72 6e 61 6c 0a 20 20 20  2.db-journal.   
19d0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20   execsql {.     
19e0: 20 41 54 54 41 43 48 20 27 74 65 73 74 32 2e 64   ATTACH 'test2.d
19f0: 62 27 20 41 53 20 61 75 78 3b 0a 20 20 20 20 7d  b' AS aux;.    }
1a00: 20 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65   .  } {}.  do_te
1a10: 73 74 20 70 72 61 67 6d 61 2d 32 2e 32 20 7b 0a  st pragma-2.2 {.
1a20: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20      execsql {.  
1a30: 20 20 20 20 70 72 61 67 6d 61 20 61 75 78 2e 73      pragma aux.s
1a40: 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20 20 20 20  ynchronous;.    
1a50: 7d 20 0a 20 20 7d 20 7b 32 7d 0a 20 20 64 6f 5f  } .  } {2}.  do_
1a60: 74 65 73 74 20 70 72 61 67 6d 61 2d 32 2e 33 20  test pragma-2.3 
1a70: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a  {.    execsql {.
1a80: 20 20 20 20 20 20 70 72 61 67 6d 61 20 61 75 78        pragma aux
1a90: 2e 73 79 6e 63 68 72 6f 6e 6f 75 73 20 3d 20 4f  .synchronous = O
1aa0: 46 46 3b 0a 20 20 20 20 20 20 70 72 61 67 6d 61  FF;.      pragma
1ab0: 20 61 75 78 2e 73 79 6e 63 68 72 6f 6e 6f 75 73   aux.synchronous
1ac0: 3b 0a 20 20 20 20 20 20 70 72 61 67 6d 61 20 73  ;.      pragma s
1ad0: 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20 20 20 20  ynchronous;.    
1ae0: 7d 20 0a 20 20 7d 20 7b 30 20 32 7d 0a 20 20 64  } .  } {0 2}.  d
1af0: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 32 2e  o_test pragma-2.
1b00: 34 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  4 {.    execsql 
1b10: 7b 0a 20 20 20 20 20 20 70 72 61 67 6d 61 20 61  {.      pragma a
1b20: 75 78 2e 73 79 6e 63 68 72 6f 6e 6f 75 73 20 3d  ux.synchronous =
1b30: 20 4f 4e 3b 0a 20 20 20 20 20 20 70 72 61 67 6d   ON;.      pragm
1b40: 61 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20  a synchronous;. 
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 20 31 7d 0a 7d 20   } .  } {2 1}.} 
1b80: 3b 23 20 69 66 63 61 70 61 62 6c 65 20 70 61 67  ;# ifcapable pag
1b90: 65 72 5f 70 72 61 67 6d 61 73 0a 0a 23 20 43 6f  er_pragmas..# Co
1ba0: 6e 73 74 72 75 63 74 20 61 20 63 6f 72 72 75 70  nstruct a corrup
1bb0: 74 65 64 20 69 6e 64 65 78 20 61 6e 64 20 6d 61  ted index and ma
1bc0: 6b 65 20 73 75 72 65 20 74 68 65 20 69 6e 74 65  ke sure the inte
1bd0: 67 72 69 74 79 5f 63 68 65 63 6b 0a 23 20 70 72  grity_check.# pr
1be0: 61 67 6d 61 20 66 69 6e 64 73 20 69 74 2e 0a 23  agma finds it..#
1bf0: 0a 23 20 54 68 65 73 65 20 74 65 73 74 73 20 77  .# These tests w
1c00: 6f 6e 27 74 20 77 6f 72 6b 20 69 66 20 74 68 65  on't work if the
1c10: 20 64 61 74 61 62 61 73 65 20 69 73 20 65 6e 63   database is enc
1c20: 72 79 70 74 65 64 0a 23 0a 64 6f 5f 74 65 73 74  rypted.#.do_test
1c30: 20 70 72 61 67 6d 61 2d 33 2e 31 20 7b 0a 20 20   pragma-3.1 {.  
1c40: 64 62 20 63 6c 6f 73 65 0a 20 20 66 6f 72 63 65  db close.  force
1c50: 64 65 6c 65 74 65 20 74 65 73 74 2e 64 62 20 74  delete test.db t
1c60: 65 73 74 2e 64 62 2d 6a 6f 75 72 6e 61 6c 0a 20  est.db-journal. 
1c70: 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74   sqlite3 db test
1c80: 2e 64 62 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  .db.  execsql {.
1c90: 20 20 20 20 50 52 41 47 4d 41 20 61 75 74 6f 5f      PRAGMA auto_
1ca0: 76 61 63 75 75 6d 3d 4f 46 46 3b 0a 20 20 20 20  vacuum=OFF;.    
1cb0: 42 45 47 49 4e 3b 0a 20 20 20 20 43 52 45 41 54  BEGIN;.    CREAT
1cc0: 45 20 54 41 42 4c 45 20 74 32 28 61 2c 62 2c 63  E TABLE t2(a,b,c
1cd0: 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20 49 4e  );.    CREATE IN
1ce0: 44 45 58 20 69 32 20 4f 4e 20 74 32 28 61 29 3b  DEX i2 ON t2(a);
1cf0: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
1d00: 20 74 32 20 56 41 4c 55 45 53 28 31 31 2c 32 2c   t2 VALUES(11,2,
1d10: 33 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  3);.    INSERT I
1d20: 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28 32 32  NTO t2 VALUES(22
1d30: 2c 33 2c 34 29 3b 0a 20 20 20 20 43 4f 4d 4d 49  ,3,4);.    COMMI
1d40: 54 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 72 6f  T;.    SELECT ro
1d50: 77 69 64 2c 20 2a 20 66 72 6f 6d 20 74 32 3b 0a  wid, * from t2;.
1d60: 20 20 7d 0a 7d 20 7b 31 20 31 31 20 32 20 33 20    }.} {1 11 2 3 
1d70: 32 20 32 32 20 33 20 34 7d 0a 69 66 63 61 70 61  2 22 3 4}.ifcapa
1d80: 62 6c 65 20 61 74 74 61 63 68 20 7b 0a 20 20 69  ble attach {.  i
1d90: 66 20 7b 21 5b 73 71 6c 69 74 65 33 20 2d 68 61  f {![sqlite3 -ha
1da0: 73 2d 63 6f 64 65 63 5d 20 26 26 20 24 73 71 6c  s-codec] && $sql
1db0: 69 74 65 5f 6f 70 74 69 6f 6e 73 28 69 6e 74 65  ite_options(inte
1dc0: 67 72 69 74 79 63 6b 29 7d 20 7b 0a 20 20 20 20  grityck)} {.    
1dd0: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 33  do_test pragma-3
1de0: 2e 32 20 7b 0a 20 20 20 20 20 20 64 62 20 65 76  .2 {.      db ev
1df0: 61 6c 20 7b 53 45 4c 45 43 54 20 72 6f 6f 74 70  al {SELECT rootp
1e00: 61 67 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  age FROM sqlite_
1e10: 6d 61 73 74 65 72 20 57 48 45 52 45 20 6e 61 6d  master WHERE nam
1e20: 65 3d 27 69 32 27 7d 20 62 72 65 61 6b 0a 20 20  e='i2'} break.  
1e30: 20 20 20 20 73 65 74 20 70 67 73 7a 20 5b 64 62      set pgsz [db
1e40: 20 65 76 61 6c 20 7b 50 52 41 47 4d 41 20 70 61   eval {PRAGMA pa
1e50: 67 65 5f 73 69 7a 65 7d 5d 0a 20 20 20 20 20 20  ge_size}].      
1e60: 23 20 6f 76 65 72 77 72 69 74 65 20 74 68 65 20  # overwrite the 
1e70: 68 65 61 64 65 72 20 6f 6e 20 74 68 65 20 72 6f  header on the ro
1e80: 6f 74 70 61 67 65 20 6f 66 20 74 68 65 20 69 6e  otpage of the in
1e90: 64 65 78 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a  dex in order to.
1ea0: 20 20 20 20 20 20 23 20 6d 61 6b 65 20 74 68 65        # make the
1eb0: 20 69 6e 64 65 78 20 61 70 70 65 61 72 20 74 6f   index appear to
1ec0: 20 62 65 20 65 6d 70 74 79 2e 0a 20 20 20 20 20   be empty..     
1ed0: 20 23 0a 20 20 20 20 20 20 73 65 74 20 6f 66 66   #.      set off
1ee0: 73 65 74 20 5b 65 78 70 72 20 7b 24 70 67 73 7a  set [expr {$pgsz
1ef0: 2a 28 24 72 6f 6f 74 70 61 67 65 2d 31 29 7d 5d  *($rootpage-1)}]
1f00: 0a 20 20 20 20 20 20 68 65 78 69 6f 5f 77 72 69  .      hexio_wri
1f10: 74 65 20 74 65 73 74 2e 64 62 20 24 6f 66 66 73  te test.db $offs
1f20: 65 74 20 30 61 30 30 30 30 30 30 30 30 30 34 30  et 0a00000000040
1f30: 30 30 30 30 30 30 30 30 30 0a 20 20 20 20 20 20  000000000.      
1f40: 64 62 20 63 6c 6f 73 65 0a 20 20 20 20 20 20 73  db close.      s
1f50: 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64  qlite3 db test.d
1f60: 62 0a 20 20 20 20 20 20 65 78 65 63 73 71 6c 20  b.      execsql 
1f70: 7b 50 52 41 47 4d 41 20 69 6e 74 65 67 72 69 74  {PRAGMA integrit
1f80: 79 5f 63 68 65 63 6b 7d 0a 20 20 20 20 7d 20 7b  y_check}.    } {
1f90: 7b 72 6f 77 20 31 20 6d 69 73 73 69 6e 67 20 66  {row 1 missing f
1fa0: 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b 72  rom index i2} {r
1fb0: 6f 77 20 32 20 6d 69 73 73 69 6e 67 20 66 72 6f  ow 2 missing fro
1fc0: 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b 77 72 6f  m index i2} {wro
1fd0: 6e 67 20 23 20 6f 66 20 65 6e 74 72 69 65 73 20  ng # of entries 
1fe0: 69 6e 20 69 6e 64 65 78 20 69 32 7d 7d 0a 20 20  in index i2}}.  
1ff0: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
2000: 2d 33 2e 33 20 7b 0a 20 20 20 20 20 20 65 78 65  -3.3 {.      exe
2010: 63 73 71 6c 20 7b 50 52 41 47 4d 41 20 69 6e 74  csql {PRAGMA int
2020: 65 67 72 69 74 79 5f 63 68 65 63 6b 3d 31 7d 0a  egrity_check=1}.
2030: 20 20 20 20 7d 20 7b 7b 72 6f 77 20 31 20 6d 69      } {{row 1 mi
2040: 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78  ssing from index
2050: 20 69 32 7d 7d 0a 20 20 20 20 64 6f 5f 74 65 73   i2}}.    do_tes
2060: 74 20 70 72 61 67 6d 61 2d 33 2e 34 20 7b 0a 20  t pragma-3.4 {. 
2070: 20 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20       execsql {. 
2080: 20 20 20 20 20 20 20 41 54 54 41 43 48 20 44 41         ATTACH DA
2090: 54 41 42 41 53 45 20 27 74 65 73 74 2e 64 62 27  TABASE 'test.db'
20a0: 20 41 53 20 74 32 3b 0a 20 20 20 20 20 20 20 20   AS t2;.        
20b0: 50 52 41 47 4d 41 20 69 6e 74 65 67 72 69 74 79  PRAGMA integrity
20c0: 5f 63 68 65 63 6b 0a 20 20 20 20 20 20 7d 0a 20  _check.      }. 
20d0: 20 20 20 7d 20 7b 7b 72 6f 77 20 31 20 6d 69 73     } {{row 1 mis
20e0: 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20  sing from index 
20f0: 69 32 7d 20 7b 72 6f 77 20 32 20 6d 69 73 73 69  i2} {row 2 missi
2100: 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32  ng from index i2
2110: 7d 20 7b 77 72 6f 6e 67 20 23 20 6f 66 20 65 6e  } {wrong # of en
2120: 74 72 69 65 73 20 69 6e 20 69 6e 64 65 78 20 69  tries in index i
2130: 32 7d 20 7b 72 6f 77 20 31 20 6d 69 73 73 69 6e  2} {row 1 missin
2140: 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d  g from index i2}
2150: 20 7b 72 6f 77 20 32 20 6d 69 73 73 69 6e 67 20   {row 2 missing 
2160: 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b  from index i2} {
2170: 77 72 6f 6e 67 20 23 20 6f 66 20 65 6e 74 72 69  wrong # of entri
2180: 65 73 20 69 6e 20 69 6e 64 65 78 20 69 32 7d 7d  es in index i2}}
2190: 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 70 72 61  .    do_test pra
21a0: 67 6d 61 2d 33 2e 35 20 7b 0a 20 20 20 20 20 20  gma-3.5 {.      
21b0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
21c0: 20 20 50 52 41 47 4d 41 20 69 6e 74 65 67 72 69    PRAGMA integri
21d0: 74 79 5f 63 68 65 63 6b 3d 34 0a 20 20 20 20 20  ty_check=4.     
21e0: 20 7d 0a 20 20 20 20 7d 20 7b 7b 72 6f 77 20 31   }.    } {{row 1
21f0: 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e   missing from in
2200: 64 65 78 20 69 32 7d 20 7b 72 6f 77 20 32 20 6d  dex i2} {row 2 m
2210: 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65  issing from inde
2220: 78 20 69 32 7d 20 7b 77 72 6f 6e 67 20 23 20 6f  x i2} {wrong # o
2230: 66 20 65 6e 74 72 69 65 73 20 69 6e 20 69 6e 64  f entries in ind
2240: 65 78 20 69 32 7d 20 7b 72 6f 77 20 31 20 6d 69  ex i2} {row 1 mi
2250: 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78  ssing from index
2260: 20 69 32 7d 7d 0a 20 20 20 20 64 6f 5f 74 65 73   i2}}.    do_tes
2270: 74 20 70 72 61 67 6d 61 2d 33 2e 36 20 7b 0a 20  t pragma-3.6 {. 
2280: 20 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20       execsql {. 
2290: 20 20 20 20 20 20 20 50 52 41 47 4d 41 20 69 6e         PRAGMA in
22a0: 74 65 67 72 69 74 79 5f 63 68 65 63 6b 3d 78 79  tegrity_check=xy
22b0: 7a 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 20  z.      }.    } 
22c0: 7b 7b 72 6f 77 20 31 20 6d 69 73 73 69 6e 67 20  {{row 1 missing 
22d0: 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b  from index i2} {
22e0: 72 6f 77 20 32 20 6d 69 73 73 69 6e 67 20 66 72  row 2 missing fr
22f0: 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b 77 72  om index i2} {wr
2300: 6f 6e 67 20 23 20 6f 66 20 65 6e 74 72 69 65 73  ong # of entries
2310: 20 69 6e 20 69 6e 64 65 78 20 69 32 7d 20 7b 72   in index i2} {r
2320: 6f 77 20 31 20 6d 69 73 73 69 6e 67 20 66 72 6f  ow 1 missing fro
2330: 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b 72 6f 77  m index i2} {row
2340: 20 32 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20   2 missing from 
2350: 69 6e 64 65 78 20 69 32 7d 20 7b 77 72 6f 6e 67  index i2} {wrong
2360: 20 23 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e   # of entries in
2370: 20 69 6e 64 65 78 20 69 32 7d 7d 0a 20 20 20 20   index i2}}.    
2380: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 33  do_test pragma-3
2390: 2e 37 20 7b 0a 20 20 20 20 20 20 65 78 65 63 73  .7 {.      execs
23a0: 71 6c 20 7b 0a 20 20 20 20 20 20 20 20 50 52 41  ql {.        PRA
23b0: 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68  GMA integrity_ch
23c0: 65 63 6b 3d 30 0a 20 20 20 20 20 20 7d 0a 20 20  eck=0.      }.  
23d0: 20 20 7d 20 7b 7b 72 6f 77 20 31 20 6d 69 73 73    } {{row 1 miss
23e0: 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69  ing from index i
23f0: 32 7d 20 7b 72 6f 77 20 32 20 6d 69 73 73 69 6e  2} {row 2 missin
2400: 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d  g from index i2}
2410: 20 7b 77 72 6f 6e 67 20 23 20 6f 66 20 65 6e 74   {wrong # of ent
2420: 72 69 65 73 20 69 6e 20 69 6e 64 65 78 20 69 32  ries in index i2
2430: 7d 20 7b 72 6f 77 20 31 20 6d 69 73 73 69 6e 67  } {row 1 missing
2440: 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20   from index i2} 
2450: 7b 72 6f 77 20 32 20 6d 69 73 73 69 6e 67 20 66  {row 2 missing f
2460: 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b 77  rom index i2} {w
2470: 72 6f 6e 67 20 23 20 6f 66 20 65 6e 74 72 69 65  rong # of entrie
2480: 73 20 69 6e 20 69 6e 64 65 78 20 69 32 7d 7d 0a  s in index i2}}.
2490: 20 20 0a 20 20 20 20 23 20 41 64 64 20 61 64 64    .    # Add add
24a0: 69 74 69 6f 6e 61 6c 20 63 6f 72 72 75 70 74 69  itional corrupti
24b0: 6f 6e 20 62 79 20 61 70 70 65 6e 64 69 6e 67 20  on by appending 
24c0: 75 6e 75 73 65 64 20 70 61 67 65 73 20 74 6f 20  unused pages to 
24d0: 74 68 65 20 65 6e 64 20 6f 66 0a 20 20 20 20 23  the end of.    #
24e0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
24f0: 6c 65 20 74 65 73 74 65 72 72 2e 64 62 0a 20 20  le testerr.db.  
2500: 20 20 23 0a 20 20 20 20 64 6f 5f 74 65 73 74 20    #.    do_test 
2510: 70 72 61 67 6d 61 2d 33 2e 38 20 7b 0a 20 20 20  pragma-3.8 {.   
2520: 20 20 20 65 78 65 63 73 71 6c 20 7b 44 45 54 41     execsql {DETA
2530: 43 48 20 74 32 7d 0a 20 20 20 20 20 20 66 6f 72  CH t2}.      for
2540: 63 65 64 65 6c 65 74 65 20 74 65 73 74 65 72 72  cedelete testerr
2550: 2e 64 62 20 74 65 73 74 65 72 72 2e 64 62 2d 6a  .db testerr.db-j
2560: 6f 75 72 6e 61 6c 0a 20 20 20 20 20 20 73 65 74  ournal.      set
2570: 20 6f 75 74 20 5b 6f 70 65 6e 20 74 65 73 74 65   out [open teste
2580: 72 72 2e 64 62 20 77 5d 0a 20 20 20 20 20 20 66  rr.db w].      f
2590: 63 6f 6e 66 69 67 75 72 65 20 24 6f 75 74 20 2d  configure $out -
25a0: 74 72 61 6e 73 6c 61 74 69 6f 6e 20 62 69 6e 61  translation bina
25b0: 72 79 0a 20 20 20 20 20 20 73 65 74 20 69 6e 20  ry.      set in 
25c0: 5b 6f 70 65 6e 20 74 65 73 74 2e 64 62 20 72 5d  [open test.db r]
25d0: 0a 20 20 20 20 20 20 66 63 6f 6e 66 69 67 75 72  .      fconfigur
25e0: 65 20 24 69 6e 20 2d 74 72 61 6e 73 6c 61 74 69  e $in -translati
25f0: 6f 6e 20 62 69 6e 61 72 79 0a 20 20 20 20 20 20  on binary.      
2600: 70 75 74 73 20 2d 6e 6f 6e 65 77 6c 69 6e 65 20  puts -nonewline 
2610: 24 6f 75 74 20 5b 72 65 61 64 20 24 69 6e 5d 0a  $out [read $in].
2620: 20 20 20 20 20 20 73 65 65 6b 20 24 69 6e 20 30        seek $in 0
2630: 0a 20 20 20 20 20 20 70 75 74 73 20 2d 6e 6f 6e  .      puts -non
2640: 65 77 6c 69 6e 65 20 24 6f 75 74 20 5b 72 65 61  ewline $out [rea
2650: 64 20 24 69 6e 5d 0a 20 20 20 20 20 20 63 6c 6f  d $in].      clo
2660: 73 65 20 24 69 6e 0a 20 20 20 20 20 20 63 6c 6f  se $in.      clo
2670: 73 65 20 24 6f 75 74 0a 20 20 20 20 20 20 68 65  se $out.      he
2680: 78 69 6f 5f 77 72 69 74 65 20 74 65 73 74 65 72  xio_write tester
2690: 72 2e 64 62 20 32 38 20 30 30 30 30 30 30 30 30  r.db 28 00000000
26a0: 0a 20 20 20 20 20 20 65 78 65 63 73 71 6c 20 7b  .      execsql {
26b0: 52 45 49 4e 44 45 58 20 74 32 7d 0a 20 20 20 20  REINDEX t2}.    
26c0: 20 20 65 78 65 63 73 71 6c 20 7b 50 52 41 47 4d    execsql {PRAGM
26d0: 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63  A integrity_chec
26e0: 6b 7d 0a 20 20 20 20 7d 20 7b 6f 6b 7d 0a 20 20  k}.    } {ok}.  
26f0: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
2700: 2d 33 2e 38 2e 31 20 7b 0a 20 20 20 20 20 20 65  -3.8.1 {.      e
2710: 78 65 63 73 71 6c 20 7b 50 52 41 47 4d 41 20 71  xecsql {PRAGMA q
2720: 75 69 63 6b 5f 63 68 65 63 6b 7d 0a 20 20 20 20  uick_check}.    
2730: 7d 20 7b 6f 6b 7d 0a 20 20 20 20 64 6f 5f 74 65  } {ok}.    do_te
2740: 73 74 20 70 72 61 67 6d 61 2d 33 2e 38 2e 32 20  st pragma-3.8.2 
2750: 7b 0a 20 20 20 20 20 20 65 78 65 63 73 71 6c 20  {.      execsql 
2760: 7b 50 52 41 47 4d 41 20 51 55 49 43 4b 5f 43 48  {PRAGMA QUICK_CH
2770: 45 43 4b 7d 0a 20 20 20 20 7d 20 7b 6f 6b 7d 0a  ECK}.    } {ok}.
2780: 20 20 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67      do_test prag
2790: 6d 61 2d 33 2e 39 20 7b 0a 20 20 20 20 20 20 65  ma-3.9 {.      e
27a0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 20  xecsql {.       
27b0: 20 41 54 54 41 43 48 20 27 74 65 73 74 65 72 72   ATTACH 'testerr
27c0: 2e 64 62 27 20 41 53 20 74 32 3b 0a 20 20 20 20  .db' AS t2;.    
27d0: 20 20 20 20 50 52 41 47 4d 41 20 69 6e 74 65 67      PRAGMA integ
27e0: 72 69 74 79 5f 63 68 65 63 6b 0a 20 20 20 20 20  rity_check.     
27f0: 20 7d 0a 20 20 20 20 7d 20 7b 7b 2a 2a 2a 20 69   }.    } {{*** i
2800: 6e 20 64 61 74 61 62 61 73 65 20 74 32 20 2a 2a  n database t2 **
2810: 2a 0a 50 61 67 65 20 34 20 69 73 20 6e 65 76 65  *.Page 4 is neve
2820: 72 20 75 73 65 64 0a 50 61 67 65 20 35 20 69 73  r used.Page 5 is
2830: 20 6e 65 76 65 72 20 75 73 65 64 0a 50 61 67 65   never used.Page
2840: 20 36 20 69 73 20 6e 65 76 65 72 20 75 73 65 64   6 is never used
2850: 7d 20 7b 72 6f 77 20 31 20 6d 69 73 73 69 6e 67  } {row 1 missing
2860: 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20   from index i2} 
2870: 7b 72 6f 77 20 32 20 6d 69 73 73 69 6e 67 20 66  {row 2 missing f
2880: 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b 77  rom index i2} {w
2890: 72 6f 6e 67 20 23 20 6f 66 20 65 6e 74 72 69 65  rong # of entrie
28a0: 73 20 69 6e 20 69 6e 64 65 78 20 69 32 7d 7d 0a  s in index i2}}.
28b0: 20 20 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67      do_test prag
28c0: 6d 61 2d 33 2e 31 30 20 7b 0a 20 20 20 20 20 20  ma-3.10 {.      
28d0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
28e0: 20 20 50 52 41 47 4d 41 20 69 6e 74 65 67 72 69    PRAGMA integri
28f0: 74 79 5f 63 68 65 63 6b 3d 31 0a 20 20 20 20 20  ty_check=1.     
2900: 20 7d 0a 20 20 20 20 7d 20 7b 7b 2a 2a 2a 20 69   }.    } {{*** i
2910: 6e 20 64 61 74 61 62 61 73 65 20 74 32 20 2a 2a  n database t2 **
2920: 2a 0a 50 61 67 65 20 34 20 69 73 20 6e 65 76 65  *.Page 4 is neve
2930: 72 20 75 73 65 64 7d 7d 0a 20 20 20 20 64 6f 5f  r used}}.    do_
2940: 74 65 73 74 20 70 72 61 67 6d 61 2d 33 2e 31 31  test pragma-3.11
2950: 20 7b 0a 20 20 20 20 20 20 65 78 65 63 73 71 6c   {.      execsql
2960: 20 7b 0a 20 20 20 20 20 20 20 20 50 52 41 47 4d   {.        PRAGM
2970: 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63  A integrity_chec
2980: 6b 3d 35 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  k=5.      }.    
2990: 7d 20 7b 7b 2a 2a 2a 20 69 6e 20 64 61 74 61 62  } {{*** in datab
29a0: 61 73 65 20 74 32 20 2a 2a 2a 0a 50 61 67 65 20  ase t2 ***.Page 
29b0: 34 20 69 73 20 6e 65 76 65 72 20 75 73 65 64 0a  4 is never used.
29c0: 50 61 67 65 20 35 20 69 73 20 6e 65 76 65 72 20  Page 5 is never 
29d0: 75 73 65 64 0a 50 61 67 65 20 36 20 69 73 20 6e  used.Page 6 is n
29e0: 65 76 65 72 20 75 73 65 64 7d 20 7b 72 6f 77 20  ever used} {row 
29f0: 31 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69  1 missing from i
2a00: 6e 64 65 78 20 69 32 7d 20 7b 72 6f 77 20 32 20  ndex i2} {row 2 
2a10: 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64  missing from ind
2a20: 65 78 20 69 32 7d 7d 0a 20 20 20 20 64 6f 5f 74  ex i2}}.    do_t
2a30: 65 73 74 20 70 72 61 67 6d 61 2d 33 2e 31 32 20  est pragma-3.12 
2a40: 7b 0a 20 20 20 20 20 20 65 78 65 63 73 71 6c 20  {.      execsql 
2a50: 7b 0a 20 20 20 20 20 20 20 20 50 52 41 47 4d 41  {.        PRAGMA
2a60: 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b   integrity_check
2a70: 3d 34 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  =4.      }.    }
2a80: 20 7b 7b 2a 2a 2a 20 69 6e 20 64 61 74 61 62 61   {{*** in databa
2a90: 73 65 20 74 32 20 2a 2a 2a 0a 50 61 67 65 20 34  se t2 ***.Page 4
2aa0: 20 69 73 20 6e 65 76 65 72 20 75 73 65 64 0a 50   is never used.P
2ab0: 61 67 65 20 35 20 69 73 20 6e 65 76 65 72 20 75  age 5 is never u
2ac0: 73 65 64 0a 50 61 67 65 20 36 20 69 73 20 6e 65  sed.Page 6 is ne
2ad0: 76 65 72 20 75 73 65 64 7d 20 7b 72 6f 77 20 31  ver used} {row 1
2ae0: 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e   missing from in
2af0: 64 65 78 20 69 32 7d 7d 0a 20 20 20 20 64 6f 5f  dex i2}}.    do_
2b00: 74 65 73 74 20 70 72 61 67 6d 61 2d 33 2e 31 33  test pragma-3.13
2b10: 20 7b 0a 20 20 20 20 20 20 65 78 65 63 73 71 6c   {.      execsql
2b20: 20 7b 0a 20 20 20 20 20 20 20 20 50 52 41 47 4d   {.        PRAGM
2b30: 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63  A integrity_chec
2b40: 6b 3d 33 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  k=3.      }.    
2b50: 7d 20 7b 7b 2a 2a 2a 20 69 6e 20 64 61 74 61 62  } {{*** in datab
2b60: 61 73 65 20 74 32 20 2a 2a 2a 0a 50 61 67 65 20  ase t2 ***.Page 
2b70: 34 20 69 73 20 6e 65 76 65 72 20 75 73 65 64 0a  4 is never used.
2b80: 50 61 67 65 20 35 20 69 73 20 6e 65 76 65 72 20  Page 5 is never 
2b90: 75 73 65 64 0a 50 61 67 65 20 36 20 69 73 20 6e  used.Page 6 is n
2ba0: 65 76 65 72 20 75 73 65 64 7d 7d 0a 20 20 20 20  ever used}}.    
2bb0: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 33  do_test pragma-3
2bc0: 2e 31 34 20 7b 0a 20 20 20 20 20 20 65 78 65 63  .14 {.      exec
2bd0: 73 71 6c 20 7b 0a 20 20 20 20 20 20 20 20 50 52  sql {.        PR
2be0: 41 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63  AGMA integrity_c
2bf0: 68 65 63 6b 28 32 29 0a 20 20 20 20 20 20 7d 0a  heck(2).      }.
2c00: 20 20 20 20 7d 20 7b 7b 2a 2a 2a 20 69 6e 20 64      } {{*** in d
2c10: 61 74 61 62 61 73 65 20 74 32 20 2a 2a 2a 0a 50  atabase t2 ***.P
2c20: 61 67 65 20 34 20 69 73 20 6e 65 76 65 72 20 75  age 4 is never u
2c30: 73 65 64 0a 50 61 67 65 20 35 20 69 73 20 6e 65  sed.Page 5 is ne
2c40: 76 65 72 20 75 73 65 64 7d 7d 0a 20 20 20 20 64  ver used}}.    d
2c50: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 33 2e  o_test pragma-3.
2c60: 31 35 20 7b 0a 20 20 20 20 20 20 65 78 65 63 73  15 {.      execs
2c70: 71 6c 20 7b 0a 20 20 20 20 20 20 20 20 41 54 54  ql {.        ATT
2c80: 41 43 48 20 27 74 65 73 74 65 72 72 2e 64 62 27  ACH 'testerr.db'
2c90: 20 41 53 20 74 33 3b 0a 20 20 20 20 20 20 20 20   AS t3;.        
2ca0: 50 52 41 47 4d 41 20 69 6e 74 65 67 72 69 74 79  PRAGMA integrity
2cb0: 5f 63 68 65 63 6b 0a 20 20 20 20 20 20 7d 0a 20  _check.      }. 
2cc0: 20 20 20 7d 20 7b 7b 2a 2a 2a 20 69 6e 20 64 61     } {{*** in da
2cd0: 74 61 62 61 73 65 20 74 32 20 2a 2a 2a 0a 50 61  tabase t2 ***.Pa
2ce0: 67 65 20 34 20 69 73 20 6e 65 76 65 72 20 75 73  ge 4 is never us
2cf0: 65 64 0a 50 61 67 65 20 35 20 69 73 20 6e 65 76  ed.Page 5 is nev
2d00: 65 72 20 75 73 65 64 0a 50 61 67 65 20 36 20 69  er used.Page 6 i
2d10: 73 20 6e 65 76 65 72 20 75 73 65 64 7d 20 7b 72  s never used} {r
2d20: 6f 77 20 31 20 6d 69 73 73 69 6e 67 20 66 72 6f  ow 1 missing fro
2d30: 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b 72 6f 77  m index i2} {row
2d40: 20 32 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20   2 missing from 
2d50: 69 6e 64 65 78 20 69 32 7d 20 7b 77 72 6f 6e 67  index i2} {wrong
2d60: 20 23 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e   # of entries in
2d70: 20 69 6e 64 65 78 20 69 32 7d 20 7b 2a 2a 2a 20   index i2} {*** 
2d80: 69 6e 20 64 61 74 61 62 61 73 65 20 74 33 20 2a  in database t3 *
2d90: 2a 2a 0a 50 61 67 65 20 34 20 69 73 20 6e 65 76  **.Page 4 is nev
2da0: 65 72 20 75 73 65 64 0a 50 61 67 65 20 35 20 69  er used.Page 5 i
2db0: 73 20 6e 65 76 65 72 20 75 73 65 64 0a 50 61 67  s never used.Pag
2dc0: 65 20 36 20 69 73 20 6e 65 76 65 72 20 75 73 65  e 6 is never use
2dd0: 64 7d 20 7b 72 6f 77 20 31 20 6d 69 73 73 69 6e  d} {row 1 missin
2de0: 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d  g from index i2}
2df0: 20 7b 72 6f 77 20 32 20 6d 69 73 73 69 6e 67 20   {row 2 missing 
2e00: 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b  from index i2} {
2e10: 77 72 6f 6e 67 20 23 20 6f 66 20 65 6e 74 72 69  wrong # of entri
2e20: 65 73 20 69 6e 20 69 6e 64 65 78 20 69 32 7d 7d  es in index i2}}
2e30: 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 70 72 61  .    do_test pra
2e40: 67 6d 61 2d 33 2e 31 36 20 7b 0a 20 20 20 20 20  gma-3.16 {.     
2e50: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20   execsql {.     
2e60: 20 20 20 50 52 41 47 4d 41 20 69 6e 74 65 67 72     PRAGMA integr
2e70: 69 74 79 5f 63 68 65 63 6b 28 31 30 29 0a 20 20  ity_check(10).  
2e80: 20 20 20 20 7d 0a 20 20 20 20 7d 20 7b 7b 2a 2a      }.    } {{**
2e90: 2a 20 69 6e 20 64 61 74 61 62 61 73 65 20 74 32  * in database t2
2ea0: 20 2a 2a 2a 0a 50 61 67 65 20 34 20 69 73 20 6e   ***.Page 4 is n
2eb0: 65 76 65 72 20 75 73 65 64 0a 50 61 67 65 20 35  ever used.Page 5
2ec0: 20 69 73 20 6e 65 76 65 72 20 75 73 65 64 0a 50   is never used.P
2ed0: 61 67 65 20 36 20 69 73 20 6e 65 76 65 72 20 75  age 6 is never u
2ee0: 73 65 64 7d 20 7b 72 6f 77 20 31 20 6d 69 73 73  sed} {row 1 miss
2ef0: 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69  ing from index i
2f00: 32 7d 20 7b 72 6f 77 20 32 20 6d 69 73 73 69 6e  2} {row 2 missin
2f10: 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d  g from index i2}
2f20: 20 7b 77 72 6f 6e 67 20 23 20 6f 66 20 65 6e 74   {wrong # of ent
2f30: 72 69 65 73 20 69 6e 20 69 6e 64 65 78 20 69 32  ries in index i2
2f40: 7d 20 7b 2a 2a 2a 20 69 6e 20 64 61 74 61 62 61  } {*** in databa
2f50: 73 65 20 74 33 20 2a 2a 2a 0a 50 61 67 65 20 34  se t3 ***.Page 4
2f60: 20 69 73 20 6e 65 76 65 72 20 75 73 65 64 0a 50   is never used.P
2f70: 61 67 65 20 35 20 69 73 20 6e 65 76 65 72 20 75  age 5 is never u
2f80: 73 65 64 0a 50 61 67 65 20 36 20 69 73 20 6e 65  sed.Page 6 is ne
2f90: 76 65 72 20 75 73 65 64 7d 20 7b 72 6f 77 20 31  ver used} {row 1
2fa0: 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e   missing from in
2fb0: 64 65 78 20 69 32 7d 7d 0a 20 20 20 20 64 6f 5f  dex i2}}.    do_
2fc0: 74 65 73 74 20 70 72 61 67 6d 61 2d 33 2e 31 37  test pragma-3.17
2fd0: 20 7b 0a 20 20 20 20 20 20 65 78 65 63 73 71 6c   {.      execsql
2fe0: 20 7b 0a 20 20 20 20 20 20 20 20 50 52 41 47 4d   {.        PRAGM
2ff0: 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63  A integrity_chec
3000: 6b 3d 38 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  k=8.      }.    
3010: 7d 20 7b 7b 2a 2a 2a 20 69 6e 20 64 61 74 61 62  } {{*** in datab
3020: 61 73 65 20 74 32 20 2a 2a 2a 0a 50 61 67 65 20  ase t2 ***.Page 
3030: 34 20 69 73 20 6e 65 76 65 72 20 75 73 65 64 0a  4 is never used.
3040: 50 61 67 65 20 35 20 69 73 20 6e 65 76 65 72 20  Page 5 is never 
3050: 75 73 65 64 0a 50 61 67 65 20 36 20 69 73 20 6e  used.Page 6 is n
3060: 65 76 65 72 20 75 73 65 64 7d 20 7b 72 6f 77 20  ever used} {row 
3070: 31 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69  1 missing from i
3080: 6e 64 65 78 20 69 32 7d 20 7b 72 6f 77 20 32 20  ndex i2} {row 2 
3090: 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64  missing from ind
30a0: 65 78 20 69 32 7d 20 7b 77 72 6f 6e 67 20 23 20  ex i2} {wrong # 
30b0: 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 69 6e  of entries in in
30c0: 64 65 78 20 69 32 7d 20 7b 2a 2a 2a 20 69 6e 20  dex i2} {*** in 
30d0: 64 61 74 61 62 61 73 65 20 74 33 20 2a 2a 2a 0a  database t3 ***.
30e0: 50 61 67 65 20 34 20 69 73 20 6e 65 76 65 72 20  Page 4 is never 
30f0: 75 73 65 64 0a 50 61 67 65 20 35 20 69 73 20 6e  used.Page 5 is n
3100: 65 76 65 72 20 75 73 65 64 7d 7d 0a 20 20 20 20  ever used}}.    
3110: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 33  do_test pragma-3
3120: 2e 31 38 20 7b 0a 20 20 20 20 20 20 65 78 65 63  .18 {.      exec
3130: 73 71 6c 20 7b 0a 20 20 20 20 20 20 20 20 50 52  sql {.        PR
3140: 41 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63  AGMA integrity_c
3150: 68 65 63 6b 3d 34 0a 20 20 20 20 20 20 7d 0a 20  heck=4.      }. 
3160: 20 20 20 7d 20 7b 7b 2a 2a 2a 20 69 6e 20 64 61     } {{*** in da
3170: 74 61 62 61 73 65 20 74 32 20 2a 2a 2a 0a 50 61  tabase t2 ***.Pa
3180: 67 65 20 34 20 69 73 20 6e 65 76 65 72 20 75 73  ge 4 is never us
3190: 65 64 0a 50 61 67 65 20 35 20 69 73 20 6e 65 76  ed.Page 5 is nev
31a0: 65 72 20 75 73 65 64 0a 50 61 67 65 20 36 20 69  er used.Page 6 i
31b0: 73 20 6e 65 76 65 72 20 75 73 65 64 7d 20 7b 72  s never used} {r
31c0: 6f 77 20 31 20 6d 69 73 73 69 6e 67 20 66 72 6f  ow 1 missing fro
31d0: 6d 20 69 6e 64 65 78 20 69 32 7d 7d 0a 20 20 7d  m index i2}}.  }
31e0: 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .  do_test pragm
31f0: 61 2d 33 2e 31 39 20 7b 0a 20 20 20 20 63 61 74  a-3.19 {.    cat
3200: 63 68 20 7b 64 62 20 63 6c 6f 73 65 7d 0a 20 20  ch {db close}.  
3210: 20 20 66 6f 72 63 65 64 65 6c 65 74 65 20 74 65    forcedelete te
3220: 73 74 2e 64 62 20 74 65 73 74 2e 64 62 2d 6a 6f  st.db test.db-jo
3230: 75 72 6e 61 6c 0a 20 20 20 20 73 71 6c 69 74 65  urnal.    sqlite
3240: 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20 20  3 db test.db.   
3250: 20 64 62 20 65 76 61 6c 20 7b 50 52 41 47 4d 41   db eval {PRAGMA
3260: 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b   integrity_check
3270: 7d 0a 20 20 7d 20 7b 6f 6b 7d 0a 7d 0a 0a 23 20  }.  } {ok}.}..# 
3280: 56 65 72 69 66 79 20 74 68 61 74 20 50 52 41 47  Verify that PRAG
3290: 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65  MA integrity_che
32a0: 63 6b 20 63 61 74 63 68 65 73 20 55 4e 49 51 55  ck catches UNIQU
32b0: 45 20 61 6e 64 20 4e 4f 54 20 4e 55 4c 4c 0a 23  E and NOT NULL.#
32c0: 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c   constraint viol
32d0: 61 74 69 6f 6e 73 2e 0a 23 0a 64 6f 5f 65 78 65  ations..#.do_exe
32e0: 63 73 71 6c 5f 74 65 73 74 20 70 72 61 67 6d 61  csql_test pragma
32f0: 2d 33 2e 32 30 20 7b 0a 20 20 43 52 45 41 54 45  -3.20 {.  CREATE
3300: 20 54 41 42 4c 45 20 74 31 28 61 2c 62 29 3b 0a   TABLE t1(a,b);.
3310: 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 74    CREATE INDEX t
3320: 31 61 20 4f 4e 20 74 31 28 61 29 3b 0a 20 20 49  1a ON t1(a);.  I
3330: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41  NSERT INTO t1 VA
3340: 4c 55 45 53 28 31 2c 31 29 2c 28 32 2c 32 29 2c  LUES(1,1),(2,2),
3350: 28 33 2c 33 29 2c 28 32 2c 34 29 2c 28 4e 55 4c  (3,3),(2,4),(NUL
3360: 4c 2c 35 29 2c 28 4e 55 4c 4c 2c 36 29 3b 0a 20  L,5),(NULL,6);. 
3370: 20 50 52 41 47 4d 41 20 77 72 69 74 61 62 6c 65   PRAGMA writable
3380: 5f 73 63 68 65 6d 61 3d 4f 4e 3b 0a 20 20 55 50  _schema=ON;.  UP
3390: 44 41 54 45 20 73 71 6c 69 74 65 5f 6d 61 73 74  DATE sqlite_mast
33a0: 65 72 20 53 45 54 20 73 71 6c 3d 27 43 52 45 41  er SET sql='CREA
33b0: 54 45 20 55 4e 49 51 55 45 20 49 4e 44 45 58 20  TE UNIQUE INDEX 
33c0: 74 31 61 20 4f 4e 20 74 31 28 61 29 27 0a 20 20  t1a ON t1(a)'.  
33d0: 20 57 48 45 52 45 20 6e 61 6d 65 3d 27 74 31 61   WHERE name='t1a
33e0: 27 3b 0a 20 20 55 50 44 41 54 45 20 73 71 6c 69  ';.  UPDATE sqli
33f0: 74 65 5f 6d 61 73 74 65 72 20 53 45 54 20 73 71  te_master SET sq
3400: 6c 3d 27 43 52 45 41 54 45 20 54 41 42 4c 45 20  l='CREATE TABLE 
3410: 74 31 28 61 20 4e 4f 54 20 4e 55 4c 4c 2c 62 29  t1(a NOT NULL,b)
3420: 27 0a 20 20 20 57 48 45 52 45 20 6e 61 6d 65 3d  '.   WHERE name=
3430: 27 74 31 27 3b 0a 20 20 50 52 41 47 4d 41 20 77  't1';.  PRAGMA w
3440: 72 69 74 61 62 6c 65 5f 73 63 68 65 6d 61 3d 4f  ritable_schema=O
3450: 46 46 3b 0a 20 20 41 4c 54 45 52 20 54 41 42 4c  FF;.  ALTER TABL
3460: 45 20 74 31 20 52 45 4e 41 4d 45 20 54 4f 20 74  E t1 RENAME TO t
3470: 31 78 3b 0a 20 20 50 52 41 47 4d 41 20 69 6e 74  1x;.  PRAGMA int
3480: 65 67 72 69 74 79 5f 63 68 65 63 6b 3b 0a 7d 20  egrity_check;.} 
3490: 7b 7b 6e 6f 6e 2d 75 6e 69 71 75 65 20 65 6e 74  {{non-unique ent
34a0: 72 79 20 69 6e 20 69 6e 64 65 78 20 74 31 61 7d  ry in index t1a}
34b0: 20 7b 4e 55 4c 4c 20 76 61 6c 75 65 20 69 6e 20   {NULL value in 
34c0: 74 31 78 2e 61 7d 20 7b 6e 6f 6e 2d 75 6e 69 71  t1x.a} {non-uniq
34d0: 75 65 20 65 6e 74 72 79 20 69 6e 20 69 6e 64 65  ue entry in inde
34e0: 78 20 74 31 61 7d 20 7b 4e 55 4c 4c 20 76 61 6c  x t1a} {NULL val
34f0: 75 65 20 69 6e 20 74 31 78 2e 61 7d 7d 0a 64 6f  ue in t1x.a}}.do
3500: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 70 72  _execsql_test pr
3510: 61 67 6d 61 2d 33 2e 32 31 20 7b 0a 20 20 50 52  agma-3.21 {.  PR
3520: 41 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63  AGMA integrity_c
3530: 68 65 63 6b 28 33 29 3b 0a 7d 20 7b 7b 6e 6f 6e  heck(3);.} {{non
3540: 2d 75 6e 69 71 75 65 20 65 6e 74 72 79 20 69 6e  -unique entry in
3550: 20 69 6e 64 65 78 20 74 31 61 7d 20 7b 4e 55 4c   index t1a} {NUL
3560: 4c 20 76 61 6c 75 65 20 69 6e 20 74 31 78 2e 61  L value in t1x.a
3570: 7d 20 7b 6e 6f 6e 2d 75 6e 69 71 75 65 20 65 6e  } {non-unique en
3580: 74 72 79 20 69 6e 20 69 6e 64 65 78 20 74 31 61  try in index t1a
3590: 7d 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  }}.do_execsql_te
35a0: 73 74 20 70 72 61 67 6d 61 2d 33 2e 32 32 20 7b  st pragma-3.22 {
35b0: 0a 20 20 50 52 41 47 4d 41 20 69 6e 74 65 67 72  .  PRAGMA integr
35c0: 69 74 79 5f 63 68 65 63 6b 28 32 29 3b 0a 7d 20  ity_check(2);.} 
35d0: 7b 7b 6e 6f 6e 2d 75 6e 69 71 75 65 20 65 6e 74  {{non-unique ent
35e0: 72 79 20 69 6e 20 69 6e 64 65 78 20 74 31 61 7d  ry in index t1a}
35f0: 20 7b 4e 55 4c 4c 20 76 61 6c 75 65 20 69 6e 20   {NULL value in 
3600: 74 31 78 2e 61 7d 7d 0a 64 6f 5f 65 78 65 63 73  t1x.a}}.do_execs
3610: 71 6c 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 33  ql_test pragma-3
3620: 2e 32 33 20 7b 0a 20 20 50 52 41 47 4d 41 20 69  .23 {.  PRAGMA i
3630: 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 28 31  ntegrity_check(1
3640: 29 3b 0a 7d 20 7b 7b 6e 6f 6e 2d 75 6e 69 71 75  );.} {{non-uniqu
3650: 65 20 65 6e 74 72 79 20 69 6e 20 69 6e 64 65 78  e entry in index
3660: 20 74 31 61 7d 7d 0a 0a 23 20 50 52 41 47 4d 41   t1a}}..# PRAGMA
3670: 20 69 6e 74 65 67 72 69 74 79 20 63 68 65 63 6b   integrity check
3680: 20 28 6f 72 20 6d 6f 72 65 20 73 70 65 63 69 66   (or more specif
3690: 69 63 61 6c 6c 79 20 74 68 65 20 73 71 6c 69 74  ically the sqlit
36a0: 65 33 42 74 72 65 65 43 6f 75 6e 74 28 29 0a 23  e3BtreeCount().#
36b0: 20 69 6e 74 65 72 66 61 63 65 29 20 75 73 65 64   interface) used
36c0: 20 74 6f 20 6c 65 61 76 65 20 69 6e 64 65 78 20   to leave index 
36d0: 63 75 72 73 6f 72 73 20 69 6e 20 61 6e 20 69 6e  cursors in an in
36e0: 63 6f 6e 73 69 73 74 65 6e 74 20 73 74 61 74 65  consistent state
36f0: 0a 23 20 77 68 69 63 68 20 63 6f 75 6c 64 20 72  .# which could r
3700: 65 73 75 6c 74 20 69 6e 20 61 6e 20 61 73 73 65  esult in an asse
3710: 72 74 69 6f 6e 20 66 61 75 6c 74 20 69 6e 20 73  rtion fault in s
3720: 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 28 29  qlite3BtreeKey()
3730: 0a 23 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20 73  .# called from s
3740: 61 76 65 43 75 72 73 6f 72 50 6f 73 69 74 69 6f  aveCursorPositio
3750: 6e 28 29 20 69 66 20 63 6f 6e 74 65 6e 74 20 69  n() if content i
3760: 73 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d 20 74  s removed from t
3770: 68 65 0a 23 20 69 6e 64 65 78 20 77 68 69 6c 65  he.# index while
3780: 20 74 68 65 20 69 6e 74 65 67 72 69 74 79 5f 63   the integrity_c
3790: 68 65 63 6b 20 69 73 20 73 74 69 6c 6c 20 72 75  heck is still ru
37a0: 6e 6e 69 6e 67 2e 20 20 54 68 69 73 20 74 65 73  nning.  This tes
37b0: 74 20 76 65 72 69 66 69 65 73 0a 23 20 74 68 61  t verifies.# tha
37c0: 74 20 70 72 6f 62 6c 65 6d 20 68 61 73 20 62 65  t problem has be
37d0: 65 6e 20 66 69 78 65 64 2e 0a 23 0a 64 6f 5f 74  en fixed..#.do_t
37e0: 65 73 74 20 70 72 61 67 6d 61 2d 33 2e 33 30 20  est pragma-3.30 
37f0: 7b 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 64  {.  db close.  d
3800: 65 6c 65 74 65 5f 66 69 6c 65 20 74 65 73 74 2e  elete_file test.
3810: 64 62 0a 20 20 73 71 6c 69 74 65 33 20 64 62 20  db.  sqlite3 db 
3820: 74 65 73 74 2e 64 62 0a 20 20 64 62 20 65 76 61  test.db.  db eva
3830: 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54  l {.    CREATE T
3840: 41 42 4c 45 20 74 31 28 61 2c 62 2c 63 29 3b 0a  ABLE t1(a,b,c);.
3850: 20 20 20 20 57 49 54 48 20 52 45 43 55 52 53 49      WITH RECURSI
3860: 56 45 0a 20 20 20 20 20 20 63 28 69 29 20 41 53  VE.      c(i) AS
3870: 20 28 56 41 4c 55 45 53 28 31 29 20 55 4e 49 4f   (VALUES(1) UNIO
3880: 4e 20 41 4c 4c 20 53 45 4c 45 43 54 20 69 2b 31  N ALL SELECT i+1
3890: 20 46 52 4f 4d 20 63 20 57 48 45 52 45 20 69 3c   FROM c WHERE i<
38a0: 31 30 30 29 0a 20 20 20 20 49 4e 53 45 52 54 20  100).    INSERT 
38b0: 49 4e 54 4f 20 74 31 28 61 2c 62 2c 63 29 20 53  INTO t1(a,b,c) S
38c0: 45 4c 45 43 54 20 69 2c 20 70 72 69 6e 74 66 28  ELECT i, printf(
38d0: 27 78 79 7a 25 30 38 78 27 2c 69 29 2c 20 32 30  'xyz%08x',i), 20
38e0: 30 30 2d 69 20 46 52 4f 4d 20 63 3b 0a 20 20 20  00-i FROM c;.   
38f0: 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 74 31   CREATE INDEX t1
3900: 61 20 4f 4e 20 74 31 28 61 29 3b 0a 20 20 20 20  a ON t1(a);.    
3910: 43 52 45 41 54 45 20 49 4e 44 45 58 20 74 31 62  CREATE INDEX t1b
3920: 63 20 4f 4e 20 74 31 28 62 2c 63 29 3b 0a 20 20  c ON t1(b,c);.  
3930: 7d 0a 20 20 64 62 20 65 76 61 6c 20 7b 50 52 41  }.  db eval {PRA
3940: 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68  GMA integrity_ch
3950: 65 63 6b 7d 20 7b 0a 20 20 20 20 20 64 62 20 65  eck} {.     db e
3960: 76 61 6c 20 7b 44 45 4c 45 54 45 20 46 52 4f 4d  val {DELETE FROM
3970: 20 74 31 7d 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a 23   t1}.  }.} {}..#
3980: 20 54 65 73 74 20 6d 6f 64 69 66 79 69 6e 67 20   Test modifying 
3990: 74 68 65 20 63 61 63 68 65 5f 73 69 7a 65 20 6f  the cache_size o
39a0: 66 20 61 6e 20 61 74 74 61 63 68 65 64 20 64 61  f an attached da
39b0: 74 61 62 61 73 65 2e 0a 69 66 63 61 70 61 62 6c  tabase..ifcapabl
39c0: 65 20 70 61 67 65 72 5f 70 72 61 67 6d 61 73 26  e pager_pragmas&
39d0: 26 61 74 74 61 63 68 20 7b 0a 64 6f 5f 74 65 73  &attach {.do_tes
39e0: 74 20 70 72 61 67 6d 61 2d 34 2e 31 20 7b 0a 20  t pragma-4.1 {. 
39f0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 41   execsql {.    A
3a00: 54 54 41 43 48 20 27 74 65 73 74 32 2e 64 62 27  TTACH 'test2.db'
3a10: 20 41 53 20 61 75 78 3b 0a 20 20 20 20 70 72 61   AS aux;.    pra
3a20: 67 6d 61 20 61 75 78 2e 63 61 63 68 65 5f 73 69  gma aux.cache_si
3a30: 7a 65 3b 0a 20 20 20 20 70 72 61 67 6d 61 20 61  ze;.    pragma a
3a40: 75 78 2e 64 65 66 61 75 6c 74 5f 63 61 63 68 65  ux.default_cache
3a50: 5f 73 69 7a 65 3b 0a 20 20 7d 20 0a 7d 20 5b 6c  _size;.  } .} [l
3a60: 69 73 74 20 24 44 46 4c 54 5f 43 41 43 48 45 5f  ist $DFLT_CACHE_
3a70: 53 5a 20 24 44 46 4c 54 5f 43 41 43 48 45 5f 53  SZ $DFLT_CACHE_S
3a80: 5a 5d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  Z].do_test pragm
3a90: 61 2d 34 2e 32 20 7b 0a 20 20 65 78 65 63 73 71  a-4.2 {.  execsq
3aa0: 6c 20 7b 0a 20 20 20 20 70 72 61 67 6d 61 20 61  l {.    pragma a
3ab0: 75 78 2e 63 61 63 68 65 5f 73 69 7a 65 20 3d 20  ux.cache_size = 
3ac0: 35 30 3b 0a 20 20 20 20 70 72 61 67 6d 61 20 61  50;.    pragma a
3ad0: 75 78 2e 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20  ux.cache_size;. 
3ae0: 20 20 20 70 72 61 67 6d 61 20 61 75 78 2e 64 65     pragma aux.de
3af0: 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65  fault_cache_size
3b00: 3b 0a 20 20 7d 20 0a 7d 20 5b 6c 69 73 74 20 35  ;.  } .} [list 5
3b10: 30 20 24 44 46 4c 54 5f 43 41 43 48 45 5f 53 5a  0 $DFLT_CACHE_SZ
3b20: 5d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  ].do_test pragma
3b30: 2d 34 2e 33 20 7b 0a 20 20 65 78 65 63 73 71 6c  -4.3 {.  execsql
3b40: 20 7b 0a 20 20 20 20 70 72 61 67 6d 61 20 61 75   {.    pragma au
3b50: 78 2e 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f  x.default_cache_
3b60: 73 69 7a 65 20 3d 20 34 35 36 3b 0a 20 20 20 20  size = 456;.    
3b70: 70 72 61 67 6d 61 20 61 75 78 2e 63 61 63 68 65  pragma aux.cache
3b80: 5f 73 69 7a 65 3b 0a 20 20 20 20 70 72 61 67 6d  _size;.    pragm
3b90: 61 20 61 75 78 2e 64 65 66 61 75 6c 74 5f 63 61  a aux.default_ca
3ba0: 63 68 65 5f 73 69 7a 65 3b 0a 20 20 7d 20 0a 7d  che_size;.  } .}
3bb0: 20 7b 34 35 36 20 34 35 36 7d 0a 64 6f 5f 74 65   {456 456}.do_te
3bc0: 73 74 20 70 72 61 67 6d 61 2d 34 2e 34 20 7b 0a  st pragma-4.4 {.
3bd0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
3be0: 70 72 61 67 6d 61 20 63 61 63 68 65 5f 73 69 7a  pragma cache_siz
3bf0: 65 3b 0a 20 20 20 20 70 72 61 67 6d 61 20 64 65  e;.    pragma de
3c00: 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65  fault_cache_size
3c10: 3b 0a 20 20 7d 20 0a 7d 20 5b 6c 69 73 74 20 24  ;.  } .} [list $
3c20: 44 46 4c 54 5f 43 41 43 48 45 5f 53 5a 20 24 44  DFLT_CACHE_SZ $D
3c30: 46 4c 54 5f 43 41 43 48 45 5f 53 5a 5d 0a 64 6f  FLT_CACHE_SZ].do
3c40: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 34 2e 35  _test pragma-4.5
3c50: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
3c60: 20 20 20 44 45 54 41 43 48 20 61 75 78 3b 0a 20     DETACH aux;. 
3c70: 20 20 20 41 54 54 41 43 48 20 27 74 65 73 74 33     ATTACH 'test3
3c80: 2e 64 62 27 20 41 53 20 61 75 78 3b 0a 20 20 20  .db' AS aux;.   
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 5b 6c 69 73 74 20 24 44 46 4c 54 5f 43 41  } [list $DFLT_CA
3ce0: 43 48 45 5f 53 5a 20 24 44 46 4c 54 5f 43 41 43  CHE_SZ $DFLT_CAC
3cf0: 48 45 5f 53 5a 5d 0a 64 6f 5f 74 65 73 74 20 70  HE_SZ].do_test p
3d00: 72 61 67 6d 61 2d 34 2e 36 20 7b 0a 20 20 65 78  ragma-4.6 {.  ex
3d10: 65 63 73 71 6c 20 7b 0a 20 20 20 20 44 45 54 41  ecsql {.    DETA
3d20: 43 48 20 61 75 78 3b 0a 20 20 20 20 41 54 54 41  CH aux;.    ATTA
3d30: 43 48 20 27 74 65 73 74 32 2e 64 62 27 20 41 53  CH 'test2.db' AS
3d40: 20 61 75 78 3b 0a 20 20 20 20 70 72 61 67 6d 61   aux;.    pragma
3d50: 20 61 75 78 2e 63 61 63 68 65 5f 73 69 7a 65 3b   aux.cache_size;
3d60: 0a 20 20 20 20 70 72 61 67 6d 61 20 61 75 78 2e  .    pragma aux.
3d70: 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69  default_cache_si
3d80: 7a 65 3b 0a 20 20 7d 20 0a 7d 20 7b 34 35 36 20  ze;.  } .} {456 
3d90: 34 35 36 7d 0a 7d 20 3b 23 20 69 66 63 61 70 61  456}.} ;# ifcapa
3da0: 62 6c 65 20 70 61 67 65 72 5f 70 72 61 67 6d 61  ble pager_pragma
3db0: 73 0a 0a 23 20 54 65 73 74 20 74 68 61 74 20 6d  s..# Test that m
3dc0: 6f 64 69 66 79 69 6e 67 20 74 68 65 20 73 79 6e  odifying the syn
3dd0: 63 2d 6c 65 76 65 6c 20 69 6e 20 74 68 65 20 6d  c-level in the m
3de0: 69 64 64 6c 65 20 6f 66 20 61 20 74 72 61 6e 73  iddle of a trans
3df0: 61 63 74 69 6f 6e 20 69 73 0a 23 20 64 69 73 61  action is.# disa
3e00: 6c 6c 6f 77 65 64 2e 0a 69 66 63 61 70 61 62 6c  llowed..ifcapabl
3e10: 65 20 70 61 67 65 72 5f 70 72 61 67 6d 61 73 20  e pager_pragmas 
3e20: 7b 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  {.do_test pragma
3e30: 2d 35 2e 30 20 7b 0a 20 20 65 78 65 63 73 71 6c  -5.0 {.  execsql
3e40: 20 7b 0a 20 20 20 20 70 72 61 67 6d 61 20 73 79   {.    pragma sy
3e50: 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20 20 7d 20 0a  nchronous;.  } .
3e60: 7d 20 7b 32 7d 0a 64 6f 5f 74 65 73 74 20 70 72  } {2}.do_test pr
3e70: 61 67 6d 61 2d 35 2e 31 20 7b 0a 20 20 63 61 74  agma-5.1 {.  cat
3e80: 63 68 73 71 6c 20 7b 0a 20 20 20 20 42 45 47 49  chsql {.    BEGI
3e90: 4e 3b 0a 20 20 20 20 70 72 61 67 6d 61 20 73 79  N;.    pragma sy
3ea0: 6e 63 68 72 6f 6e 6f 75 73 20 3d 20 4f 46 46 3b  nchronous = OFF;
3eb0: 0a 20 20 7d 20 0a 7d 20 7b 31 20 7b 53 61 66 65  .  } .} {1 {Safe
3ec0: 74 79 20 6c 65 76 65 6c 20 6d 61 79 20 6e 6f 74  ty level may not
3ed0: 20 62 65 20 63 68 61 6e 67 65 64 20 69 6e 73 69   be changed insi
3ee0: 64 65 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  de a transaction
3ef0: 7d 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  }}.do_test pragm
3f00: 61 2d 35 2e 32 20 7b 0a 20 20 65 78 65 63 73 71  a-5.2 {.  execsq
3f10: 6c 20 7b 0a 20 20 20 20 70 72 61 67 6d 61 20 73  l {.    pragma s
3f20: 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20 20 7d 20  ynchronous;.  } 
3f30: 0a 7d 20 7b 32 7d 0a 63 61 74 63 68 73 71 6c 20  .} {2}.catchsql 
3f40: 7b 43 4f 4d 4d 49 54 3b 7d 0a 7d 20 3b 23 20 69  {COMMIT;}.} ;# i
3f50: 66 63 61 70 61 62 6c 65 20 70 61 67 65 72 5f 70  fcapable pager_p
3f60: 72 61 67 6d 61 73 0a 0a 23 20 54 65 73 74 20 73  ragmas..# Test s
3f70: 63 68 65 6d 61 2d 71 75 65 72 79 20 70 72 61 67  chema-query prag
3f80: 6d 61 73 0a 23 0a 69 66 63 61 70 61 62 6c 65 20  mas.#.ifcapable 
3f90: 73 63 68 65 6d 61 5f 70 72 61 67 6d 61 73 20 7b  schema_pragmas {
3fa0: 0a 69 66 63 61 70 61 62 6c 65 20 74 65 6d 70 64  .ifcapable tempd
3fb0: 62 26 26 61 74 74 61 63 68 20 7b 0a 20 20 64 6f  b&&attach {.  do
3fc0: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 36 2e 31  _test pragma-6.1
3fd0: 20 7b 0a 20 20 20 20 73 65 74 20 72 65 73 20 7b   {.    set res {
3fe0: 7d 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 53  }.    execsql {S
3ff0: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 73 71 6c  ELECT * FROM sql
4000: 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 7d  ite_temp_master}
4010: 0a 20 20 20 20 66 6f 72 65 61 63 68 20 7b 69 64  .    foreach {id
4020: 78 20 6e 61 6d 65 20 66 69 6c 65 7d 20 5b 65 78  x name file} [ex
4030: 65 63 73 71 6c 20 7b 70 72 61 67 6d 61 20 64 61  ecsql {pragma da
4040: 74 61 62 61 73 65 5f 6c 69 73 74 7d 5d 20 7b 0a  tabase_list}] {.
4050: 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65        lappend re
4060: 73 20 24 69 64 78 20 24 6e 61 6d 65 0a 20 20 20  s $idx $name.   
4070: 20 7d 0a 20 20 20 20 73 65 74 20 72 65 73 0a 20   }.    set res. 
4080: 20 7d 20 7b 30 20 6d 61 69 6e 20 31 20 74 65 6d   } {0 main 1 tem
4090: 70 20 32 20 61 75 78 7d 0a 7d 0a 64 6f 5f 74 65  p 2 aux}.}.do_te
40a0: 73 74 20 70 72 61 67 6d 61 2d 36 2e 32 20 7b 0a  st pragma-6.2 {.
40b0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
40c0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 32 28  CREATE TABLE t2(
40d0: 61 2c 62 2c 63 29 3b 0a 20 20 20 20 70 72 61 67  a,b,c);.    prag
40e0: 6d 61 20 74 61 62 6c 65 5f 69 6e 66 6f 28 74 32  ma table_info(t2
40f0: 29 0a 20 20 7d 0a 7d 20 7b 30 20 61 20 7b 7d 20  ).  }.} {0 a {} 
4100: 30 20 7b 7d 20 30 20 31 20 62 20 7b 7d 20 30 20  0 {} 0 1 b {} 0 
4110: 7b 7d 20 30 20 32 20 63 20 7b 7d 20 30 20 7b 7d  {} 0 2 c {} 0 {}
4120: 20 30 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67   0}.do_test prag
4130: 6d 61 2d 36 2e 32 2e 31 20 7b 0a 20 20 65 78 65  ma-6.2.1 {.  exe
4140: 63 73 71 6c 20 7b 0a 20 20 20 20 70 72 61 67 6d  csql {.    pragm
4150: 61 20 74 61 62 6c 65 5f 69 6e 66 6f 3b 0a 20 20  a table_info;.  
4160: 7d 0a 7d 20 7b 7d 0a 64 62 20 6e 75 6c 6c 76 61  }.} {}.db nullva
4170: 6c 75 65 20 3c 3c 4e 55 4c 4c 3e 3e 0a 64 6f 5f  lue <<NULL>>.do_
4180: 74 65 73 74 20 70 72 61 67 6d 61 2d 36 2e 32 2e  test pragma-6.2.
4190: 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  2 {.  execsql {.
41a0: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
41b0: 20 74 35 28 0a 20 20 20 20 20 20 61 20 54 45 58   t5(.      a TEX
41c0: 54 20 44 45 46 41 55 4c 54 20 43 55 52 52 45 4e  T DEFAULT CURREN
41d0: 54 5f 54 49 4d 45 53 54 41 4d 50 2c 20 0a 20 20  T_TIMESTAMP, .  
41e0: 20 20 20 20 62 20 44 45 46 41 55 4c 54 20 28 35      b DEFAULT (5
41f0: 2b 33 29 2c 0a 20 20 20 20 20 20 63 20 54 45 58  +3),.      c TEX
4200: 54 2c 0a 20 20 20 20 20 20 64 20 49 4e 54 45 47  T,.      d INTEG
4210: 45 52 20 44 45 46 41 55 4c 54 20 4e 55 4c 4c 2c  ER DEFAULT NULL,
4220: 0a 20 20 20 20 20 20 65 20 54 45 58 54 20 44 45  .      e TEXT DE
4230: 46 41 55 4c 54 20 27 27 2c 0a 20 20 20 20 20 20  FAULT '',.      
4240: 55 4e 49 51 55 45 28 62 2c 63 2c 64 29 2c 0a 20  UNIQUE(b,c,d),. 
4250: 20 20 20 20 20 50 52 49 4d 41 52 59 20 4b 45 59       PRIMARY KEY
4260: 28 65 2c 62 2c 63 29 0a 20 20 20 20 29 3b 0a 20  (e,b,c).    );. 
4270: 20 20 20 50 52 41 47 4d 41 20 74 61 62 6c 65 5f     PRAGMA table_
4280: 69 6e 66 6f 28 74 35 29 3b 0a 20 20 7d 0a 7d 20  info(t5);.  }.} 
4290: 7b 30 20 61 20 54 45 58 54 20 30 20 43 55 52 52  {0 a TEXT 0 CURR
42a0: 45 4e 54 5f 54 49 4d 45 53 54 41 4d 50 20 30 20  ENT_TIMESTAMP 0 
42b0: 31 20 62 20 7b 7d 20 30 20 35 2b 33 20 32 20 32  1 b {} 0 5+3 2 2
42c0: 20 63 20 54 45 58 54 20 30 20 3c 3c 4e 55 4c 4c   c TEXT 0 <<NULL
42d0: 3e 3e 20 33 20 33 20 64 20 49 4e 54 45 47 45 52  >> 3 3 d INTEGER
42e0: 20 30 20 4e 55 4c 4c 20 30 20 34 20 65 20 54 45   0 NULL 0 4 e TE
42f0: 58 54 20 30 20 27 27 20 31 7d 0a 64 62 20 6e 75  XT 0 '' 1}.db nu
4300: 6c 6c 76 61 6c 75 65 20 7b 7d 0a 64 6f 5f 74 65  llvalue {}.do_te
4310: 73 74 20 70 72 61 67 6d 61 2d 36 2e 32 2e 33 20  st pragma-6.2.3 
4320: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
4330: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
4340: 32 5f 33 28 61 2c 62 20 49 4e 54 45 47 45 52 20  2_3(a,b INTEGER 
4350: 50 52 49 4d 41 52 59 20 4b 45 59 2c 63 29 3b 0a  PRIMARY KEY,c);.
4360: 20 20 20 20 70 72 61 67 6d 61 20 74 61 62 6c 65      pragma table
4370: 5f 69 6e 66 6f 28 74 32 5f 33 29 0a 20 20 7d 0a  _info(t2_3).  }.
4380: 7d 20 7b 30 20 61 20 7b 7d 20 30 20 7b 7d 20 30  } {0 a {} 0 {} 0
4390: 20 31 20 62 20 49 4e 54 45 47 45 52 20 30 20 7b   1 b INTEGER 0 {
43a0: 7d 20 31 20 32 20 63 20 7b 7d 20 30 20 7b 7d 20  } 1 2 c {} 0 {} 
43b0: 30 7d 0a 69 66 63 61 70 61 62 6c 65 20 7b 66 6f  0}.ifcapable {fo
43c0: 72 65 69 67 6e 6b 65 79 7d 20 7b 0a 20 20 64 6f  reignkey} {.  do
43d0: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 36 2e 33  _test pragma-6.3
43e0: 2e 31 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  .1 {.    execsql
43f0: 20 7b 0a 20 20 20 20 20 20 43 52 45 41 54 45 20   {.      CREATE 
4400: 54 41 42 4c 45 20 74 33 28 61 20 69 6e 74 20 72  TABLE t3(a int r
4410: 65 66 65 72 65 6e 63 65 73 20 74 32 28 62 29 2c  eferences t2(b),
4420: 20 62 20 55 4e 49 51 55 45 29 3b 0a 20 20 20 20   b UNIQUE);.    
4430: 20 20 70 72 61 67 6d 61 20 66 6f 72 65 69 67 6e    pragma foreign
4440: 5f 6b 65 79 5f 6c 69 73 74 28 74 33 29 3b 0a 20  _key_list(t3);. 
4450: 20 20 20 7d 0a 20 20 7d 20 7b 30 20 30 20 74 32     }.  } {0 0 t2
4460: 20 61 20 62 20 7b 4e 4f 20 41 43 54 49 4f 4e 7d   a b {NO ACTION}
4470: 20 7b 4e 4f 20 41 43 54 49 4f 4e 7d 20 4e 4f 4e   {NO ACTION} NON
4480: 45 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61  E}.  do_test pra
4490: 67 6d 61 2d 36 2e 33 2e 32 20 7b 0a 20 20 20 20  gma-6.3.2 {.    
44a0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
44b0: 70 72 61 67 6d 61 20 66 6f 72 65 69 67 6e 5f 6b  pragma foreign_k
44c0: 65 79 5f 6c 69 73 74 3b 0a 20 20 20 20 7d 0a 20  ey_list;.    }. 
44d0: 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20   } {}.  do_test 
44e0: 70 72 61 67 6d 61 2d 36 2e 33 2e 33 20 7b 0a 20  pragma-6.3.3 {. 
44f0: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
4500: 20 20 20 70 72 61 67 6d 61 20 66 6f 72 65 69 67     pragma foreig
4510: 6e 5f 6b 65 79 5f 6c 69 73 74 28 74 33 5f 62 6f  n_key_list(t3_bo
4520: 67 75 73 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 20  gus);.    }.  } 
4530: 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61  {}.  do_test pra
4540: 67 6d 61 2d 36 2e 33 2e 34 20 7b 0a 20 20 20 20  gma-6.3.4 {.    
4550: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
4560: 70 72 61 67 6d 61 20 66 6f 72 65 69 67 6e 5f 6b  pragma foreign_k
4570: 65 79 5f 6c 69 73 74 28 74 35 29 3b 0a 20 20 20  ey_list(t5);.   
4580: 20 7d 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74   }.  } {}.  do_t
4590: 65 73 74 20 70 72 61 67 6d 61 2d 36 2e 34 20 7b  est pragma-6.4 {
45a0: 0a 20 20 20 20 63 61 70 74 75 72 65 5f 70 72 61  .    capture_pra
45b0: 67 6d 61 20 64 62 20 6f 75 74 20 7b 0a 20 20 20  gma db out {.   
45c0: 20 20 20 70 72 61 67 6d 61 20 69 6e 64 65 78 5f     pragma index_
45d0: 6c 69 73 74 28 74 33 29 3b 0a 20 20 20 20 7d 0a  list(t3);.    }.
45e0: 20 20 20 20 64 62 20 65 76 61 6c 20 7b 53 45 4c      db eval {SEL
45f0: 45 43 54 20 73 65 71 2c 20 22 6e 61 6d 65 22 2c  ECT seq, "name",
4600: 20 22 75 6e 69 71 75 65 22 20 46 52 4f 4d 20 6f   "unique" FROM o
4610: 75 74 20 4f 52 44 45 52 20 42 59 20 73 65 71 7d  ut ORDER BY seq}
4620: 0a 20 20 7d 20 7b 30 20 73 71 6c 69 74 65 5f 61  .  } {0 sqlite_a
4630: 75 74 6f 69 6e 64 65 78 5f 74 33 5f 31 20 31 7d  utoindex_t3_1 1}
4640: 0a 7d 0a 69 66 63 61 70 61 62 6c 65 20 7b 21 66  .}.ifcapable {!f
4650: 6f 72 65 69 67 6e 6b 65 79 7d 20 7b 0a 20 20 65  oreignkey} {.  e
4660: 78 65 63 73 71 6c 20 7b 43 52 45 41 54 45 20 54  xecsql {CREATE T
4670: 41 42 4c 45 20 74 33 28 61 2c 62 20 55 4e 49 51  ABLE t3(a,b UNIQ
4680: 55 45 29 7d 0a 7d 0a 64 6f 5f 74 65 73 74 20 70  UE)}.}.do_test p
4690: 72 61 67 6d 61 2d 36 2e 35 2e 31 20 7b 0a 20 20  ragma-6.5.1 {.  
46a0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52  execsql {.    CR
46b0: 45 41 54 45 20 49 4e 44 45 58 20 74 33 69 31 20  EATE INDEX t3i1 
46c0: 4f 4e 20 74 33 28 61 2c 62 29 3b 0a 20 20 7d 0a  ON t3(a,b);.  }.
46d0: 20 20 63 61 70 74 75 72 65 5f 70 72 61 67 6d 61    capture_pragma
46e0: 20 64 62 20 6f 75 74 20 7b 0a 20 20 20 20 70 72   db out {.    pr
46f0: 61 67 6d 61 20 69 6e 64 65 78 5f 69 6e 66 6f 28  agma index_info(
4700: 74 33 69 31 29 3b 0a 20 20 7d 0a 20 20 64 62 20  t3i1);.  }.  db 
4710: 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 73 65 71  eval {SELECT seq
4720: 6e 6f 2c 20 63 69 64 2c 20 6e 61 6d 65 20 46 52  no, cid, name FR
4730: 4f 4d 20 6f 75 74 20 4f 52 44 45 52 20 42 59 20  OM out ORDER BY 
4740: 73 65 71 6e 6f 7d 0a 7d 20 7b 30 20 30 20 61 20  seqno}.} {0 0 a 
4750: 31 20 31 20 62 7d 0a 0a 23 20 45 56 49 44 45 4e  1 1 b}..# EVIDEN
4760: 43 45 2d 4f 46 3a 20 52 2d 32 33 31 31 34 2d 32  CE-OF: R-23114-2
4770: 31 36 39 35 20 54 68 65 20 61 75 78 69 6c 69 61  1695 The auxilia
4780: 72 79 20 69 6e 64 65 78 2d 63 6f 6c 75 6d 6e 73  ry index-columns
4790: 20 61 72 65 20 6e 6f 74 20 73 68 6f 77 6e 0a 23   are not shown.#
47a0: 20 62 79 20 74 68 65 20 69 6e 64 65 78 5f 69 6e   by the index_in
47b0: 66 6f 20 70 72 61 67 6d 61 2c 20 62 75 74 20 74  fo pragma, but t
47c0: 68 65 79 20 61 72 65 20 6c 69 73 74 65 64 20 62  hey are listed b
47d0: 79 20 74 68 65 20 69 6e 64 65 78 5f 78 69 6e 66  y the index_xinf
47e0: 6f 0a 23 20 70 72 61 67 6d 61 2e 0a 23 0a 64 6f  o.# pragma..#.do
47f0: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 36 2e 35  _test pragma-6.5
4800: 2e 31 62 20 7b 0a 20 20 63 61 70 74 75 72 65 5f  .1b {.  capture_
4810: 70 72 61 67 6d 61 20 64 62 20 6f 75 74 20 7b 50  pragma db out {P
4820: 52 41 47 4d 41 20 69 6e 64 65 78 5f 78 69 6e 66  RAGMA index_xinf
4830: 6f 28 74 33 69 31 29 7d 0a 20 20 64 62 20 65 76  o(t3i1)}.  db ev
4840: 61 6c 20 7b 53 45 4c 45 43 54 20 73 65 71 6e 6f  al {SELECT seqno
4850: 2c 20 63 69 64 2c 20 6e 61 6d 65 20 46 52 4f 4d  , cid, name FROM
4860: 20 6f 75 74 20 4f 52 44 45 52 20 42 59 20 73 65   out ORDER BY se
4870: 71 6e 6f 7d 0a 7d 20 7b 30 20 30 20 61 20 31 20  qno}.} {0 0 a 1 
4880: 31 20 62 20 32 20 2d 31 20 7b 7d 7d 0a 0a 0a 23  1 b 2 -1 {}}...#
4890: 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d   EVIDENCE-OF: R-
48a0: 36 32 37 32 35 2d 30 33 33 36 36 20 50 52 41 47  62725-03366 PRAG
48b0: 4d 41 20 64 61 74 61 62 61 73 65 2e 69 6e 64 65  MA database.inde
48c0: 78 5f 69 6e 66 6f 28 69 6e 64 65 78 2d 6e 61 6d  x_info(index-nam
48d0: 65 29 3b 0a 23 20 54 68 69 73 20 70 72 61 67 6d  e);.# This pragm
48e0: 61 20 72 65 74 75 72 6e 73 20 6f 6e 65 20 72 6f  a returns one ro
48f0: 77 20 66 6f 72 20 65 61 63 68 20 6b 65 79 20 63  w for each key c
4900: 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 6e 61 6d  olumn in the nam
4910: 65 64 20 69 6e 64 65 78 2e 0a 23 0a 23 20 28 54  ed index..#.# (T
4920: 68 65 20 66 69 72 73 74 20 63 6f 6c 75 6d 6e 20  he first column 
4930: 6f 66 20 6f 75 74 70 75 74 20 66 72 6f 6d 20 50  of output from P
4940: 52 41 47 4d 41 20 69 6e 64 65 78 5f 69 6e 66 6f  RAGMA index_info
4950: 20 69 73 2e 2e 2e 29 0a 23 20 45 56 49 44 45 4e   is...).# EVIDEN
4960: 43 45 2d 4f 46 3a 20 52 2d 33 34 31 38 36 2d 35  CE-OF: R-34186-5
4970: 32 39 31 34 20 54 68 65 20 72 61 6e 6b 20 6f 66  2914 The rank of
4980: 20 74 68 65 20 63 6f 6c 75 6d 6e 20 77 69 74 68   the column with
4990: 69 6e 20 74 68 65 20 69 6e 64 65 78 2e 20 28 30  in the index. (0
49a0: 0a 23 20 6d 65 61 6e 73 20 6c 65 66 74 2d 6d 6f  .# means left-mo
49b0: 73 74 2e 29 0a 23 0a 23 20 28 54 68 65 20 73 65  st.).#.# (The se
49c0: 63 6f 6e 64 20 63 6f 6c 75 6d 6e 20 6f 66 20 6f  cond column of o
49d0: 75 74 70 75 74 20 66 72 6f 6d 20 50 52 41 47 4d  utput from PRAGM
49e0: 41 20 69 6e 64 65 78 5f 69 6e 66 6f 20 69 73 2e  A index_info is.
49f0: 2e 2e 29 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f  ..).# EVIDENCE-O
4a00: 46 3a 20 52 2d 36 35 30 31 39 2d 30 38 33 38 33  F: R-65019-08383
4a10: 20 54 68 65 20 72 61 6e 6b 20 6f 66 20 74 68 65   The rank of the
4a20: 20 63 6f 6c 75 6d 6e 20 77 69 74 68 69 6e 20 74   column within t
4a30: 68 65 20 74 61 62 6c 65 0a 23 20 62 65 69 6e 67  he table.# being
4a40: 20 69 6e 64 65 78 65 64 2e 0a 23 0a 23 20 28 54   indexed..#.# (T
4a50: 68 65 20 74 68 69 72 64 20 63 6f 6c 75 6d 6e 20  he third column 
4a60: 6f 66 20 6f 75 74 70 75 74 20 66 72 6f 6d 20 50  of output from P
4a70: 52 41 47 4d 41 20 69 6e 64 65 78 5f 69 6e 66 6f  RAGMA index_info
4a80: 20 69 73 2e 2e 2e 29 0a 23 20 45 56 49 44 45 4e   is...).# EVIDEN
4a90: 43 45 2d 4f 46 3a 20 52 2d 30 39 37 37 33 2d 33  CE-OF: R-09773-3
4aa0: 34 32 36 36 20 54 68 65 20 6e 61 6d 65 20 6f 66  4266 The name of
4ab0: 20 74 68 65 20 63 6f 6c 75 6d 6e 20 62 65 69 6e   the column bein
4ac0: 67 20 69 6e 64 65 78 65 64 2e 0a 23 0a 64 6f 5f  g indexed..#.do_
4ad0: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 70 72 61  execsql_test pra
4ae0: 67 6d 61 2d 36 2e 35 2e 31 63 20 7b 0a 20 20 43  gma-6.5.1c {.  C
4af0: 52 45 41 54 45 20 49 4e 44 45 58 20 74 33 69 32  REATE INDEX t3i2
4b00: 20 4f 4e 20 74 33 28 62 2c 61 29 3b 0a 20 20 50   ON t3(b,a);.  P
4b10: 52 41 47 4d 41 20 69 6e 64 65 78 5f 69 6e 66 6f  RAGMA index_info
4b20: 3d 27 74 33 69 32 27 3b 0a 20 20 44 52 4f 50 20  ='t3i2';.  DROP 
4b30: 49 4e 44 45 58 20 74 33 69 32 3b 0a 7d 20 7b 30  INDEX t3i2;.} {0
4b40: 20 31 20 62 20 31 20 30 20 61 7d 0a 0a 64 6f 5f   1 b 1 0 a}..do_
4b50: 74 65 73 74 20 70 72 61 67 6d 61 2d 36 2e 35 2e  test pragma-6.5.
4b60: 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  2 {.  execsql {.
4b70: 20 20 20 20 70 72 61 67 6d 61 20 69 6e 64 65 78      pragma index
4b80: 5f 69 6e 66 6f 28 74 33 69 31 5f 62 6f 67 75 73  _info(t3i1_bogus
4b90: 29 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a 69 66 63  );.  }.} {}..ifc
4ba0: 61 70 61 62 6c 65 20 74 65 6d 70 64 62 20 7b 0a  apable tempdb {.
4bb0: 20 20 23 20 54 65 73 74 20 66 6f 72 20 74 69 63    # Test for tic
4bc0: 6b 65 74 20 23 33 33 32 30 2e 20 57 68 65 6e 20  ket #3320. When 
4bd0: 61 20 74 65 6d 70 20 74 61 62 6c 65 20 6f 66 20  a temp table of 
4be0: 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 65 78  the same name ex
4bf0: 69 73 74 73 2c 20 6d 61 6b 65 0a 20 20 23 20 73  ists, make.  # s
4c00: 75 72 65 20 74 68 65 20 73 63 68 65 6d 61 20 6f  ure the schema o
4c10: 66 20 74 68 65 20 6d 61 69 6e 20 74 61 62 6c 65  f the main table
4c20: 20 63 61 6e 20 73 74 69 6c 6c 20 62 65 20 71 75   can still be qu
4c30: 65 72 69 65 64 20 75 73 69 6e 67 20 0a 20 20 23  eried using .  #
4c40: 20 22 70 72 61 67 6d 61 20 74 61 62 6c 65 5f 69   "pragma table_i
4c50: 6e 66 6f 22 3a 0a 20 20 64 6f 5f 74 65 73 74 20  nfo":.  do_test 
4c60: 70 72 61 67 6d 61 2d 36 2e 36 2e 31 20 7b 0a 20  pragma-6.6.1 {. 
4c70: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
4c80: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
4c90: 74 72 69 61 6c 28 63 6f 6c 5f 6d 61 69 6e 29 3b  trial(col_main);
4ca0: 0a 20 20 20 20 20 20 43 52 45 41 54 45 20 54 45  .      CREATE TE
4cb0: 4d 50 20 54 41 42 4c 45 20 74 72 69 61 6c 28 63  MP TABLE trial(c
4cc0: 6f 6c 5f 74 65 6d 70 29 3b 0a 20 20 20 20 7d 0a  ol_temp);.    }.
4cd0: 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65 73 74    } {}.  do_test
4ce0: 20 70 72 61 67 6d 61 2d 36 2e 36 2e 32 20 7b 0a   pragma-6.6.2 {.
4cf0: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20      execsql {.  
4d00: 20 20 20 20 50 52 41 47 4d 41 20 74 61 62 6c 65      PRAGMA table
4d10: 5f 69 6e 66 6f 28 74 72 69 61 6c 29 3b 0a 20 20  _info(trial);.  
4d20: 20 20 7d 0a 20 20 7d 20 7b 30 20 63 6f 6c 5f 74    }.  } {0 col_t
4d30: 65 6d 70 20 7b 7d 20 30 20 7b 7d 20 30 7d 0a 20  emp {} 0 {} 0}. 
4d40: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
4d50: 36 2e 36 2e 33 20 7b 0a 20 20 20 20 65 78 65 63  6.6.3 {.    exec
4d60: 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47  sql {.      PRAG
4d70: 4d 41 20 74 65 6d 70 2e 74 61 62 6c 65 5f 69 6e  MA temp.table_in
4d80: 66 6f 28 74 72 69 61 6c 29 3b 0a 20 20 20 20 7d  fo(trial);.    }
4d90: 0a 20 20 7d 20 7b 30 20 63 6f 6c 5f 74 65 6d 70  .  } {0 col_temp
4da0: 20 7b 7d 20 30 20 7b 7d 20 30 7d 0a 20 20 64 6f   {} 0 {} 0}.  do
4db0: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 36 2e 36  _test pragma-6.6
4dc0: 2e 34 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  .4 {.    execsql
4dd0: 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20   {.      PRAGMA 
4de0: 6d 61 69 6e 2e 74 61 62 6c 65 5f 69 6e 66 6f 28  main.table_info(
4df0: 74 72 69 61 6c 29 3b 0a 20 20 20 20 7d 0a 20 20  trial);.    }.  
4e00: 7d 20 7b 30 20 63 6f 6c 5f 6d 61 69 6e 20 7b 7d  } {0 col_main {}
4e10: 20 30 20 7b 7d 20 30 7d 0a 7d 0a 0a 64 6f 5f 74   0 {} 0}.}..do_t
4e20: 65 73 74 20 70 72 61 67 6d 61 2d 36 2e 37 20 7b  est pragma-6.7 {
4e30: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
4e40: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 65   CREATE TABLE te
4e50: 73 74 5f 74 61 62 6c 65 28 0a 20 20 20 20 20 20  st_table(.      
4e60: 6f 6e 65 20 49 4e 54 20 4e 4f 54 20 4e 55 4c 4c  one INT NOT NULL
4e70: 20 44 45 46 41 55 4c 54 20 2d 31 2c 20 0a 20 20   DEFAULT -1, .  
4e80: 20 20 20 20 74 77 6f 20 74 65 78 74 2c 0a 20 20      two text,.  
4e90: 20 20 20 20 74 68 72 65 65 20 56 41 52 43 48 41      three VARCHA
4ea0: 52 28 34 35 2c 20 36 35 29 20 44 45 46 41 55 4c  R(45, 65) DEFAUL
4eb0: 54 20 27 61 62 63 64 65 27 2c 0a 20 20 20 20 20  T 'abcde',.     
4ec0: 20 66 6f 75 72 20 52 45 41 4c 20 44 45 46 41 55   four REAL DEFAU
4ed0: 4c 54 20 58 27 61 62 63 64 65 66 27 2c 0a 20 20  LT X'abcdef',.  
4ee0: 20 20 20 20 66 69 76 65 20 44 45 46 41 55 4c 54      five DEFAULT
4ef0: 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 0a 20 20   CURRENT_TIME.  
4f00: 20 20 29 3b 0a 20 20 7d 0a 20 20 63 61 70 74 75    );.  }.  captu
4f10: 72 65 5f 70 72 61 67 6d 61 20 64 62 20 6f 75 74  re_pragma db out
4f20: 20 7b 50 52 41 47 4d 41 20 74 61 62 6c 65 5f 69   {PRAGMA table_i
4f30: 6e 66 6f 28 74 65 73 74 5f 74 61 62 6c 65 29 7d  nfo(test_table)}
4f40: 0a 20 20 64 62 20 65 76 61 6c 20 7b 53 45 4c 45  .  db eval {SELE
4f50: 43 54 20 63 69 64 2c 20 22 6e 61 6d 65 22 2c 20  CT cid, "name", 
4f60: 74 79 70 65 2c 20 22 6e 6f 74 6e 75 6c 6c 22 2c  type, "notnull",
4f70: 20 64 66 6c 74 5f 76 61 6c 75 65 2c 20 70 6b 20   dflt_value, pk 
4f80: 46 52 4f 4d 20 6f 75 74 0a 20 20 20 20 20 20 20  FROM out.       
4f90: 20 20 20 20 20 4f 52 44 45 52 20 42 59 20 63 69       ORDER BY ci
4fa0: 64 7d 0a 7d 20 5b 63 6f 6e 63 61 74 20 5c 0a 20  d}.} [concat \. 
4fb0: 20 7b 30 20 6f 6e 65 20 49 4e 54 20 31 20 2d 31   {0 one INT 1 -1
4fc0: 20 30 7d 20 5c 0a 20 20 7b 31 20 74 77 6f 20 74   0} \.  {1 two t
4fd0: 65 78 74 20 30 20 7b 7d 20 30 7d 20 5c 0a 20 20  ext 0 {} 0} \.  
4fe0: 7b 32 20 74 68 72 65 65 20 7b 56 41 52 43 48 41  {2 three {VARCHA
4ff0: 52 28 34 35 2c 20 36 35 29 7d 20 30 20 27 61 62  R(45, 65)} 0 'ab
5000: 63 64 65 27 20 30 7d 20 5c 0a 20 20 7b 33 20 66  cde' 0} \.  {3 f
5010: 6f 75 72 20 52 45 41 4c 20 30 20 58 27 61 62 63  our REAL 0 X'abc
5020: 64 65 66 27 20 30 7d 20 5c 0a 20 20 7b 34 20 66  def' 0} \.  {4 f
5030: 69 76 65 20 7b 7d 20 30 20 43 55 52 52 45 4e 54  ive {} 0 CURRENT
5040: 5f 54 49 4d 45 20 30 7d 20 5c 0a 5d 0a 7d 20 3b  _TIME 0} \.].} ;
5050: 23 20 69 66 63 61 70 61 62 6c 65 20 73 63 68 65  # ifcapable sche
5060: 6d 61 5f 70 72 61 67 6d 61 73 0a 23 20 4d 69 73  ma_pragmas.# Mis
5070: 63 65 6c 6c 61 6e 65 6f 75 73 20 74 65 73 74 73  cellaneous tests
5080: 0a 23 0a 69 66 63 61 70 61 62 6c 65 20 73 63 68  .#.ifcapable sch
5090: 65 6d 61 5f 70 72 61 67 6d 61 73 20 7b 0a 23 20  ema_pragmas {.# 
50a0: 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 36  EVIDENCE-OF: R-6
50b0: 33 35 30 30 2d 33 32 30 32 34 20 50 52 41 47 4d  3500-32024 PRAGM
50c0: 41 20 64 61 74 61 62 61 73 65 2e 69 6e 64 65 78  A database.index
50d0: 5f 6c 69 73 74 28 74 61 62 6c 65 2d 6e 61 6d 65  _list(table-name
50e0: 29 3b 0a 23 20 54 68 69 73 20 70 72 61 67 6d 61  );.# This pragma
50f0: 20 72 65 74 75 72 6e 73 20 6f 6e 65 20 72 6f 77   returns one row
5100: 20 66 6f 72 20 65 61 63 68 20 69 6e 64 65 78 20   for each index 
5110: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
5120: 74 68 65 20 67 69 76 65 6e 0a 23 20 74 61 62 6c  the given.# tabl
5130: 65 2e 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  e..do_test pragm
5140: 61 2d 37 2e 31 2e 31 20 7b 0a 20 20 23 20 4d 61  a-7.1.1 {.  # Ma
5150: 6b 65 20 73 75 72 65 20 61 20 70 72 61 67 6d 61  ke sure a pragma
5160: 20 6b 6e 6f 77 73 20 74 6f 20 72 65 61 64 20 74   knows to read t
5170: 68 65 20 73 63 68 65 6d 61 20 69 66 20 69 74 20  he schema if it 
5180: 6e 65 65 64 73 20 74 6f 0a 20 20 64 62 20 63 6c  needs to.  db cl
5190: 6f 73 65 0a 20 20 73 71 6c 69 74 65 33 20 64 62  ose.  sqlite3 db
51a0: 20 74 65 73 74 2e 64 62 0a 20 20 63 61 70 74 75   test.db.  captu
51b0: 72 65 5f 70 72 61 67 6d 61 20 64 62 20 6f 75 74  re_pragma db out
51c0: 20 22 50 52 41 47 4d 41 20 69 6e 64 65 78 5f 6c   "PRAGMA index_l
51d0: 69 73 74 28 74 33 29 22 0a 20 20 64 62 20 65 76  ist(t3)".  db ev
51e0: 61 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 2c  al {SELECT name,
51f0: 20 22 6f 72 69 67 69 6e 22 20 46 52 4f 4d 20 6f   "origin" FROM o
5200: 75 74 20 4f 52 44 45 52 20 42 59 20 6e 61 6d 65  ut ORDER BY name
5210: 20 44 45 53 43 7d 0a 7d 20 7b 74 33 69 31 20 63   DESC}.} {t3i1 c
5220: 20 73 71 6c 69 74 65 5f 61 75 74 6f 69 6e 64 65   sqlite_autoinde
5230: 78 5f 74 33 5f 31 20 75 7d 0a 64 6f 5f 74 65 73  x_t3_1 u}.do_tes
5240: 74 20 70 72 61 67 6d 61 2d 37 2e 31 2e 32 20 7b  t pragma-7.1.2 {
5250: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
5260: 20 70 72 61 67 6d 61 20 69 6e 64 65 78 5f 6c 69   pragma index_li
5270: 73 74 28 74 33 5f 62 6f 67 75 73 29 3b 0a 20 20  st(t3_bogus);.  
5280: 7d 0a 7d 20 7b 7d 0a 7d 20 3b 23 20 69 66 63 61  }.} {}.} ;# ifca
5290: 70 61 62 6c 65 20 73 63 68 65 6d 61 5f 70 72 61  pable schema_pra
52a0: 67 6d 61 73 0a 69 66 63 61 70 61 62 6c 65 20 7b  gmas.ifcapable {
52b0: 75 74 66 31 36 7d 20 7b 0a 20 20 69 66 20 7b 5b  utf16} {.  if {[
52c0: 70 65 72 6d 75 74 61 74 69 6f 6e 5d 20 3d 3d 20  permutation] == 
52d0: 22 22 7d 20 7b 0a 20 20 20 20 64 6f 5f 74 65 73  ""} {.    do_tes
52e0: 74 20 70 72 61 67 6d 61 2d 37 2e 32 20 7b 0a 20  t pragma-7.2 {. 
52f0: 20 20 20 20 20 64 62 20 63 6c 6f 73 65 0a 20 20       db close.  
5300: 20 20 20 20 73 71 6c 69 74 65 33 20 64 62 20 74      sqlite3 db t
5310: 65 73 74 2e 64 62 0a 20 20 20 20 20 20 63 61 74  est.db.      cat
5320: 63 68 73 71 6c 20 7b 0a 20 20 20 20 20 20 20 20  chsql {.        
5330: 70 72 61 67 6d 61 20 65 6e 63 6f 64 69 6e 67 3d  pragma encoding=
5340: 62 6f 67 75 73 3b 0a 20 20 20 20 20 20 7d 0a 20  bogus;.      }. 
5350: 20 20 20 7d 20 7b 31 20 7b 75 6e 73 75 70 70 6f     } {1 {unsuppo
5360: 72 74 65 64 20 65 6e 63 6f 64 69 6e 67 3a 20 62  rted encoding: b
5370: 6f 67 75 73 7d 7d 0a 20 20 7d 0a 7d 0a 69 66 63  ogus}}.  }.}.ifc
5380: 61 70 61 62 6c 65 20 74 65 6d 70 64 62 20 7b 0a  apable tempdb {.
5390: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
53a0: 2d 37 2e 33 20 7b 0a 20 20 20 20 64 62 20 63 6c  -7.3 {.    db cl
53b0: 6f 73 65 0a 20 20 20 20 73 71 6c 69 74 65 33 20  ose.    sqlite3 
53c0: 64 62 20 74 65 73 74 2e 64 62 0a 20 20 20 20 65  db test.db.    e
53d0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 70  xecsql {.      p
53e0: 72 61 67 6d 61 20 6c 6f 63 6b 5f 73 74 61 74 75  ragma lock_statu
53f0: 73 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 6d 61  s;.    }.  } {ma
5400: 69 6e 20 75 6e 6c 6f 63 6b 65 64 20 74 65 6d 70  in unlocked temp
5410: 20 63 6c 6f 73 65 64 7d 0a 7d 20 65 6c 73 65 20   closed}.} else 
5420: 7b 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67  {.  do_test prag
5430: 6d 61 2d 37 2e 33 20 7b 0a 20 20 20 20 64 62 20  ma-7.3 {.    db 
5440: 63 6c 6f 73 65 0a 20 20 20 20 73 71 6c 69 74 65  close.    sqlite
5450: 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20 20  3 db test.db.   
5460: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20   execsql {.     
5470: 20 70 72 61 67 6d 61 20 6c 6f 63 6b 5f 73 74 61   pragma lock_sta
5480: 74 75 73 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b  tus;.    }.  } {
5490: 6d 61 69 6e 20 75 6e 6c 6f 63 6b 65 64 7d 0a 7d  main unlocked}.}
54a0: 0a 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ...#------------
54b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
54c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
54d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
54e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 54 65 73  ----------.# Tes
54f0: 74 20 63 61 73 65 73 20 70 72 61 67 6d 61 2d 38  t cases pragma-8
5500: 2e 2a 20 74 65 73 74 20 74 68 65 20 22 50 52 41  .* test the "PRA
5510: 47 4d 41 20 73 63 68 65 6d 61 5f 76 65 72 73 69  GMA schema_versi
5520: 6f 6e 22 20 61 6e 64 20 22 50 52 41 47 4d 41 0a  on" and "PRAGMA.
5530: 23 20 75 73 65 72 5f 76 65 72 73 69 6f 6e 22 20  # user_version" 
5540: 73 74 61 74 65 6d 65 6e 74 73 2e 0a 23 0a 23 20  statements..#.# 
5550: 70 72 61 67 6d 61 2d 38 2e 31 3a 20 50 52 41 47  pragma-8.1: PRAG
5560: 4d 41 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f  MA schema_versio
5570: 6e 0a 23 20 70 72 61 67 6d 61 2d 38 2e 32 3a 20  n.# pragma-8.2: 
5580: 50 52 41 47 4d 41 20 75 73 65 72 5f 76 65 72 73  PRAGMA user_vers
5590: 69 6f 6e 0a 23 0a 0a 69 66 63 61 70 61 62 6c 65  ion.#..ifcapable
55a0: 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 20   schema_version 
55b0: 7b 0a 0a 23 20 46 69 72 73 74 20 63 68 65 63 6b  {..# First check
55c0: 20 74 68 61 74 20 77 65 20 63 61 6e 20 73 65 74   that we can set
55d0: 20 74 68 65 20 73 63 68 65 6d 61 20 76 65 72 73   the schema vers
55e0: 69 6f 6e 20 61 6e 64 20 74 68 65 6e 20 72 65 74  ion and then ret
55f0: 72 69 65 76 65 20 74 68 65 0a 23 20 73 61 6d 65  rieve the.# same
5600: 20 76 61 6c 75 65 2e 0a 64 6f 5f 74 65 73 74 20   value..do_test 
5610: 70 72 61 67 6d 61 2d 38 2e 31 2e 31 20 7b 0a 20  pragma-8.1.1 {. 
5620: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50   execsql {.    P
5630: 52 41 47 4d 41 20 73 63 68 65 6d 61 5f 76 65 72  RAGMA schema_ver
5640: 73 69 6f 6e 20 3d 20 31 30 35 3b 0a 20 20 7d 0a  sion = 105;.  }.
5650: 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61  } {}.do_test pra
5660: 67 6d 61 2d 38 2e 31 2e 32 20 7b 0a 20 20 65 78  gma-8.1.2 {.  ex
5670: 65 63 73 71 6c 32 20 7b 0a 20 20 20 20 50 52 41  ecsql2 {.    PRA
5680: 47 4d 41 20 73 63 68 65 6d 61 5f 76 65 72 73 69  GMA schema_versi
5690: 6f 6e 3b 0a 20 20 7d 0a 7d 20 7b 73 63 68 65 6d  on;.  }.} {schem
56a0: 61 5f 76 65 72 73 69 6f 6e 20 31 30 35 7d 0a 64  a_version 105}.d
56b0: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e  o_test pragma-8.
56c0: 31 2e 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  1.3 {.  execsql 
56d0: 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 73 63 68  {.    PRAGMA sch
56e0: 65 6d 61 5f 76 65 72 73 69 6f 6e 20 3d 20 31 30  ema_version = 10
56f0: 36 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74  6;.  }.} {}.do_t
5700: 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e 34  est pragma-8.1.4
5710: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
5720: 20 20 20 50 52 41 47 4d 41 20 73 63 68 65 6d 61     PRAGMA schema
5730: 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 7d 0a 7d 20  _version;.  }.} 
5740: 31 30 36 0a 0a 23 20 43 68 65 63 6b 20 74 68 61  106..# Check tha
5750: 74 20 63 72 65 61 74 69 6e 67 20 61 20 74 61 62  t creating a tab
5760: 6c 65 20 6d 6f 64 69 66 69 65 73 20 74 68 65 20  le modifies the 
5770: 73 63 68 65 6d 61 2d 76 65 72 73 69 6f 6e 20 28  schema-version (
5780: 74 68 69 73 20 69 73 20 72 65 61 6c 6c 79 0a 23  this is really.#
5790: 20 74 6f 20 76 65 72 69 66 79 20 74 68 61 74 20   to verify that 
57a0: 74 68 65 20 76 61 6c 75 65 20 62 65 69 6e 67 20  the value being 
57b0: 72 65 61 64 20 69 73 20 69 6e 20 66 61 63 74 20  read is in fact 
57c0: 74 68 65 20 73 63 68 65 6d 61 20 76 65 72 73 69  the schema versi
57d0: 6f 6e 29 2e 0a 64 6f 5f 74 65 73 74 20 70 72 61  on)..do_test pra
57e0: 67 6d 61 2d 38 2e 31 2e 35 20 7b 0a 20 20 65 78  gma-8.1.5 {.  ex
57f0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41  ecsql {.    CREA
5800: 54 45 20 54 41 42 4c 45 20 74 34 28 61 2c 20 62  TE TABLE t4(a, b
5810: 2c 20 63 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  , c);.    INSERT
5820: 20 49 4e 54 4f 20 74 34 20 56 41 4c 55 45 53 28   INTO t4 VALUES(
5830: 31 2c 20 32 2c 20 33 29 3b 0a 20 20 20 20 53 45  1, 2, 3);.    SE
5840: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 34 3b 0a  LECT * FROM t4;.
5850: 20 20 7d 0a 7d 20 7b 31 20 32 20 33 7d 0a 64 6f    }.} {1 2 3}.do
5860: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 31  _test pragma-8.1
5870: 2e 36 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .6 {.  execsql {
5880: 0a 20 20 20 20 50 52 41 47 4d 41 20 73 63 68 65  .    PRAGMA sche
5890: 6d 61 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 7d 0a  ma_version;.  }.
58a0: 7d 20 31 30 37 0a 0a 23 20 4e 6f 77 20 6f 70 65  } 107..# Now ope
58b0: 6e 20 61 20 73 65 63 6f 6e 64 20 63 6f 6e 6e 65  n a second conne
58c0: 63 74 69 6f 6e 20 74 6f 20 74 68 65 20 64 61 74  ction to the dat
58d0: 61 62 61 73 65 2e 20 45 6e 73 75 72 65 20 74 68  abase. Ensure th
58e0: 61 74 20 63 68 61 6e 67 69 6e 67 20 74 68 65 0a  at changing the.
58f0: 23 20 73 63 68 65 6d 61 2d 76 65 72 73 69 6f 6e  # schema-version
5900: 20 75 73 69 6e 67 20 74 68 65 20 66 69 72 73 74   using the first
5910: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6f 72 63   connection forc
5920: 65 73 20 74 68 65 20 73 65 63 6f 6e 64 20 63 6f  es the second co
5930: 6e 6e 65 63 74 69 6f 6e 0a 23 20 74 6f 20 72 65  nnection.# to re
5940: 6c 6f 61 64 20 74 68 65 20 73 63 68 65 6d 61 2e  load the schema.
5950: 20 54 68 69 73 20 68 61 73 20 74 6f 20 62 65 20   This has to be 
5960: 64 6f 6e 65 20 75 73 69 6e 67 20 74 68 65 20 43  done using the C
5970: 2d 41 50 49 20 74 65 73 74 20 66 75 6e 63 74 69  -API test functi
5980: 6f 6e 73 2c 0a 23 20 62 65 63 61 75 73 65 20 74  ons,.# because t
5990: 68 65 20 54 43 4c 20 41 50 49 20 61 63 63 6f 75  he TCL API accou
59a0: 6e 74 73 20 66 6f 72 20 53 43 48 45 4d 41 5f 45  nts for SCHEMA_E
59b0: 52 52 4f 52 20 61 6e 64 20 72 65 74 72 69 65 73  RROR and retries
59c0: 20 74 68 65 20 71 75 65 72 79 2e 0a 64 6f 5f 74   the query..do_t
59d0: 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e 37  est pragma-8.1.7
59e0: 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 64 62 32   {.  sqlite3 db2
59f0: 20 74 65 73 74 2e 64 62 3b 20 73 65 74 20 3a 3a   test.db; set ::
5a00: 44 42 32 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6e  DB2 [sqlite3_con
5a10: 6e 65 63 74 69 6f 6e 5f 70 6f 69 6e 74 65 72 20  nection_pointer 
5a20: 64 62 32 5d 0a 20 20 65 78 65 63 73 71 6c 20 7b  db2].  execsql {
5a30: 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52  .    SELECT * FR
5a40: 4f 4d 20 74 34 3b 0a 20 20 7d 20 64 62 32 0a 7d  OM t4;.  } db2.}
5a50: 20 7b 31 20 32 20 33 7d 0a 64 6f 5f 74 65 73 74   {1 2 3}.do_test
5a60: 20 70 72 61 67 6d 61 2d 38 2e 31 2e 38 20 7b 0a   pragma-8.1.8 {.
5a70: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
5a80: 50 52 41 47 4d 41 20 73 63 68 65 6d 61 5f 76 65  PRAGMA schema_ve
5a90: 72 73 69 6f 6e 20 3d 20 31 30 38 3b 0a 20 20 7d  rsion = 108;.  }
5aa0: 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 70 72  .} {}.do_test pr
5ab0: 61 67 6d 61 2d 38 2e 31 2e 39 20 7b 0a 20 20 73  agma-8.1.9 {.  s
5ac0: 65 74 20 3a 3a 53 54 4d 54 20 5b 73 71 6c 69 74  et ::STMT [sqlit
5ad0: 65 33 5f 70 72 65 70 61 72 65 20 24 3a 3a 44 42  e3_prepare $::DB
5ae0: 32 20 22 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  2 "SELECT * FROM
5af0: 20 74 34 22 20 2d 31 20 44 55 4d 4d 59 5d 0a 20   t4" -1 DUMMY]. 
5b00: 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 3a   sqlite3_step $:
5b10: 3a 53 54 4d 54 0a 7d 20 53 51 4c 49 54 45 5f 45  :STMT.} SQLITE_E
5b20: 52 52 4f 52 0a 64 6f 5f 74 65 73 74 20 70 72 61  RROR.do_test pra
5b30: 67 6d 61 2d 38 2e 31 2e 31 30 20 7b 0a 20 20 73  gma-8.1.10 {.  s
5b40: 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20  qlite3_finalize 
5b50: 24 3a 3a 53 54 4d 54 0a 7d 20 53 51 4c 49 54 45  $::STMT.} SQLITE
5b60: 5f 53 43 48 45 4d 41 0a 0a 23 20 4d 61 6b 65 20  _SCHEMA..# Make 
5b70: 73 75 72 65 20 74 68 65 20 73 63 68 65 6d 61 2d  sure the schema-
5b80: 76 65 72 73 69 6f 6e 20 63 61 6e 20 62 65 20 6d  version can be m
5b90: 61 6e 69 70 75 6c 61 74 65 64 20 69 6e 20 61 6e  anipulated in an
5ba0: 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
5bb0: 73 65 2e 0a 66 6f 72 63 65 64 65 6c 65 74 65 20  se..forcedelete 
5bc0: 74 65 73 74 32 2e 64 62 0a 66 6f 72 63 65 64 65  test2.db.forcede
5bd0: 6c 65 74 65 20 74 65 73 74 32 2e 64 62 2d 6a 6f  lete test2.db-jo
5be0: 75 72 6e 61 6c 0a 69 66 63 61 70 61 62 6c 65 20  urnal.ifcapable 
5bf0: 61 74 74 61 63 68 20 7b 0a 20 20 64 6f 5f 74 65  attach {.  do_te
5c00: 73 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e 31 31  st pragma-8.1.11
5c10: 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b   {.    execsql {
5c20: 0a 20 20 20 20 20 20 41 54 54 41 43 48 20 27 74  .      ATTACH 't
5c30: 65 73 74 32 2e 64 62 27 20 41 53 20 61 75 78 3b  est2.db' AS aux;
5c40: 0a 20 20 20 20 20 20 43 52 45 41 54 45 20 54 41  .      CREATE TA
5c50: 42 4c 45 20 61 75 78 2e 74 31 28 61 2c 20 62 2c  BLE aux.t1(a, b,
5c60: 20 63 29 3b 0a 20 20 20 20 20 20 50 52 41 47 4d   c);.      PRAGM
5c70: 41 20 61 75 78 2e 73 63 68 65 6d 61 5f 76 65 72  A aux.schema_ver
5c80: 73 69 6f 6e 20 3d 20 32 30 35 3b 0a 20 20 20 20  sion = 205;.    
5c90: 7d 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65  }.  } {}.  do_te
5ca0: 73 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e 31 32  st pragma-8.1.12
5cb0: 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b   {.    execsql {
5cc0: 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 61 75  .      PRAGMA au
5cd0: 78 2e 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e  x.schema_version
5ce0: 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 32 30 35 0a  ;.    }.  } 205.
5cf0: 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  }.do_test pragma
5d00: 2d 38 2e 31 2e 31 33 20 7b 0a 20 20 65 78 65 63  -8.1.13 {.  exec
5d10: 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41  sql {.    PRAGMA
5d20: 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 3b   schema_version;
5d30: 0a 20 20 7d 0a 7d 20 31 30 38 0a 0a 23 20 41 6e  .  }.} 108..# An
5d40: 64 20 63 68 65 63 6b 20 74 68 61 74 20 6d 6f 64  d check that mod
5d50: 69 66 79 69 6e 67 20 74 68 65 20 73 63 68 65 6d  ifying the schem
5d60: 61 2d 76 65 72 73 69 6f 6e 20 69 6e 20 61 6e 20  a-version in an 
5d70: 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
5d80: 65 0a 23 20 66 6f 72 63 65 73 20 74 68 65 20 73  e.# forces the s
5d90: 65 63 6f 6e 64 20 63 6f 6e 6e 65 63 74 69 6f 6e  econd connection
5da0: 20 74 6f 20 72 65 6c 6f 61 64 20 74 68 65 20 73   to reload the s
5db0: 63 68 65 6d 61 2e 0a 69 66 63 61 70 61 62 6c 65  chema..ifcapable
5dc0: 20 61 74 74 61 63 68 20 7b 0a 20 20 64 6f 5f 74   attach {.  do_t
5dd0: 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e 31  est pragma-8.1.1
5de0: 34 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 20  4 {.    sqlite3 
5df0: 64 62 32 20 74 65 73 74 2e 64 62 3b 20 73 65 74  db2 test.db; set
5e00: 20 3a 3a 44 42 32 20 5b 73 71 6c 69 74 65 33 5f   ::DB2 [sqlite3_
5e10: 63 6f 6e 6e 65 63 74 69 6f 6e 5f 70 6f 69 6e 74  connection_point
5e20: 65 72 20 64 62 32 5d 0a 20 20 20 20 65 78 65 63  er db2].    exec
5e30: 73 71 6c 20 7b 0a 20 20 20 20 20 20 41 54 54 41  sql {.      ATTA
5e40: 43 48 20 27 74 65 73 74 32 2e 64 62 27 20 41 53  CH 'test2.db' AS
5e50: 20 61 75 78 3b 0a 20 20 20 20 20 20 53 45 4c 45   aux;.      SELE
5e60: 43 54 20 2a 20 46 52 4f 4d 20 61 75 78 2e 74 31  CT * FROM aux.t1
5e70: 3b 0a 20 20 20 20 7d 20 64 62 32 0a 20 20 7d 20  ;.    } db2.  } 
5e80: 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61  {}.  do_test pra
5e90: 67 6d 61 2d 38 2e 31 2e 31 35 20 7b 0a 20 20 20  gma-8.1.15 {.   
5ea0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20   execsql {.     
5eb0: 20 50 52 41 47 4d 41 20 61 75 78 2e 73 63 68 65   PRAGMA aux.sche
5ec0: 6d 61 5f 76 65 72 73 69 6f 6e 20 3d 20 32 30 36  ma_version = 206
5ed0: 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 7d 0a 20  ;.    }.  } {}. 
5ee0: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
5ef0: 38 2e 31 2e 31 36 20 7b 0a 20 20 20 20 73 65 74  8.1.16 {.    set
5f00: 20 3a 3a 53 54 4d 54 20 5b 73 71 6c 69 74 65 33   ::STMT [sqlite3
5f10: 5f 70 72 65 70 61 72 65 20 24 3a 3a 44 42 32 20  _prepare $::DB2 
5f20: 22 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 61  "SELECT * FROM a
5f30: 75 78 2e 74 31 22 20 2d 31 20 44 55 4d 4d 59 5d  ux.t1" -1 DUMMY]
5f40: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 74 65  .    sqlite3_ste
5f50: 70 20 24 3a 3a 53 54 4d 54 0a 20 20 7d 20 53 51  p $::STMT.  } SQ
5f60: 4c 49 54 45 5f 45 52 52 4f 52 0a 20 20 64 6f 5f  LITE_ERROR.  do_
5f70: 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e  test pragma-8.1.
5f80: 31 37 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  17 {.    sqlite3
5f90: 5f 66 69 6e 61 6c 69 7a 65 20 24 3a 3a 53 54 4d  _finalize $::STM
5fa0: 54 0a 20 20 7d 20 53 51 4c 49 54 45 5f 53 43 48  T.  } SQLITE_SCH
5fb0: 45 4d 41 0a 20 20 64 6f 5f 74 65 73 74 20 70 72  EMA.  do_test pr
5fc0: 61 67 6d 61 2d 38 2e 31 2e 31 38 20 7b 0a 20 20  agma-8.1.18 {.  
5fd0: 20 20 64 62 32 20 63 6c 6f 73 65 0a 20 20 7d 20    db2 close.  } 
5fe0: 7b 7d 0a 7d 0a 0a 23 20 4e 6f 77 20 74 65 73 74  {}.}..# Now test
5ff0: 20 74 68 61 74 20 74 68 65 20 75 73 65 72 2d 76   that the user-v
6000: 65 72 73 69 6f 6e 20 63 61 6e 20 62 65 20 72 65  ersion can be re
6010: 61 64 20 61 6e 64 20 77 72 69 74 74 65 6e 20 28  ad and written (
6020: 61 6e 64 20 74 68 61 74 20 77 65 20 61 72 65 6e  and that we aren
6030: 27 74 0a 23 20 61 63 63 69 64 65 6e 74 61 6c 6c  't.# accidentall
6040: 79 20 6d 61 6e 69 70 75 6c 61 74 69 6e 67 20 74  y manipulating t
6050: 68 65 20 73 63 68 65 6d 61 2d 76 65 72 73 69 6f  he schema-versio
6060: 6e 20 69 6e 73 74 65 61 64 29 2e 0a 64 6f 5f 74  n instead)..do_t
6070: 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 32 2e 31  est pragma-8.2.1
6080: 20 7b 0a 20 20 65 78 65 63 73 71 6c 32 20 7b 0a   {.  execsql2 {.
6090: 20 20 20 20 50 52 41 47 4d 41 20 75 73 65 72 5f      PRAGMA user_
60a0: 76 65 72 73 69 6f 6e 3b 0a 20 20 7d 0a 7d 20 7b  version;.  }.} {
60b0: 75 73 65 72 5f 76 65 72 73 69 6f 6e 20 30 7d 0a  user_version 0}.
60c0: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38  do_test pragma-8
60d0: 2e 32 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c  .2.2 {.  execsql
60e0: 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 75 73   {.    PRAGMA us
60f0: 65 72 5f 76 65 72 73 69 6f 6e 20 3d 20 32 3b 0a  er_version = 2;.
6100: 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74    }.} {}.do_test
6110: 20 70 72 61 67 6d 61 2d 38 2e 32 2e 33 2e 31 20   pragma-8.2.3.1 
6120: 7b 0a 20 20 65 78 65 63 73 71 6c 32 20 7b 0a 20  {.  execsql2 {. 
6130: 20 20 20 50 52 41 47 4d 41 20 75 73 65 72 5f 76     PRAGMA user_v
6140: 65 72 73 69 6f 6e 3b 0a 20 20 7d 0a 7d 20 7b 75  ersion;.  }.} {u
6150: 73 65 72 5f 76 65 72 73 69 6f 6e 20 32 7d 0a 64  ser_version 2}.d
6160: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e  o_test pragma-8.
6170: 32 2e 33 2e 32 20 7b 0a 20 20 64 62 20 63 6c 6f  2.3.2 {.  db clo
6180: 73 65 0a 20 20 73 71 6c 69 74 65 33 20 64 62 20  se.  sqlite3 db 
6190: 74 65 73 74 2e 64 62 0a 20 20 65 78 65 63 73 71  test.db.  execsq
61a0: 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 75  l {.    PRAGMA u
61b0: 73 65 72 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 7d  ser_version;.  }
61c0: 0a 7d 20 7b 32 7d 0a 64 6f 5f 74 65 73 74 20 70  .} {2}.do_test p
61d0: 72 61 67 6d 61 2d 38 2e 32 2e 34 2e 31 20 7b 0a  ragma-8.2.4.1 {.
61e0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
61f0: 50 52 41 47 4d 41 20 73 63 68 65 6d 61 5f 76 65  PRAGMA schema_ve
6200: 72 73 69 6f 6e 3b 0a 20 20 7d 0a 7d 20 7b 31 30  rsion;.  }.} {10
6210: 38 7d 0a 69 66 63 61 70 61 62 6c 65 20 76 61 63  8}.ifcapable vac
6220: 75 75 6d 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20  uum {.  do_test 
6230: 70 72 61 67 6d 61 2d 38 2e 32 2e 34 2e 32 20 7b  pragma-8.2.4.2 {
6240: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
6250: 20 20 20 20 20 56 41 43 55 55 4d 3b 0a 20 20 20       VACUUM;.   
6260: 20 20 20 50 52 41 47 4d 41 20 75 73 65 72 5f 76     PRAGMA user_v
6270: 65 72 73 69 6f 6e 3b 0a 20 20 20 20 7d 0a 20 20  ersion;.    }.  
6280: 7d 20 7b 32 7d 0a 20 20 64 6f 5f 74 65 73 74 20  } {2}.  do_test 
6290: 70 72 61 67 6d 61 2d 38 2e 32 2e 34 2e 33 20 7b  pragma-8.2.4.3 {
62a0: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
62b0: 20 20 20 20 20 50 52 41 47 4d 41 20 73 63 68 65       PRAGMA sche
62c0: 6d 61 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 20 20  ma_version;.    
62d0: 7d 0a 20 20 7d 20 7b 31 30 39 7d 0a 7d 0a 0a 69  }.  } {109}.}..i
62e0: 66 63 61 70 61 62 6c 65 20 61 74 74 61 63 68 20  fcapable attach 
62f0: 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 41 54 54  {.  db eval {ATT
6300: 41 43 48 20 27 74 65 73 74 32 2e 64 62 27 20 41  ACH 'test2.db' A
6310: 53 20 61 75 78 7d 0a 20 20 0a 20 20 23 20 43 68  S aux}.  .  # Ch
6320: 65 63 6b 20 74 68 61 74 20 74 68 65 20 75 73 65  eck that the use
6330: 72 2d 76 65 72 73 69 6f 6e 20 69 6e 20 74 68 65  r-version in the
6340: 20 61 75 78 69 6c 61 72 79 20 64 61 74 61 62 61   auxilary databa
6350: 73 65 20 63 61 6e 20 62 65 20 6d 61 6e 69 70 75  se can be manipu
6360: 6c 61 74 65 64 20 28 0a 20 20 23 20 61 6e 64 20  lated (.  # and 
6370: 74 68 61 74 20 77 65 20 61 72 65 6e 27 74 20 61  that we aren't a
6380: 63 63 69 64 65 6e 74 61 6c 6c 79 20 6d 61 6e 69  ccidentally mani
6390: 70 75 6c 61 74 69 6e 67 20 74 68 65 20 73 61 6d  pulating the sam
63a0: 65 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 62  e in the main db
63b0: 29 2e 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61  )..  do_test pra
63c0: 67 6d 61 2d 38 2e 32 2e 35 20 7b 0a 20 20 20 20  gma-8.2.5 {.    
63d0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
63e0: 50 52 41 47 4d 41 20 61 75 78 2e 75 73 65 72 5f  PRAGMA aux.user_
63f0: 76 65 72 73 69 6f 6e 3b 0a 20 20 20 20 7d 0a 20  version;.    }. 
6400: 20 7d 20 7b 30 7d 0a 20 20 64 6f 5f 74 65 73 74   } {0}.  do_test
6410: 20 70 72 61 67 6d 61 2d 38 2e 32 2e 36 20 7b 0a   pragma-8.2.6 {.
6420: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20      execsql {.  
6430: 20 20 20 20 50 52 41 47 4d 41 20 61 75 78 2e 75      PRAGMA aux.u
6440: 73 65 72 5f 76 65 72 73 69 6f 6e 20 3d 20 33 3b  ser_version = 3;
6450: 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 7d 0a 20 20  .    }.  } {}.  
6460: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38  do_test pragma-8
6470: 2e 32 2e 37 20 7b 0a 20 20 20 20 65 78 65 63 73  .2.7 {.    execs
6480: 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d  ql {.      PRAGM
6490: 41 20 61 75 78 2e 75 73 65 72 5f 76 65 72 73 69  A aux.user_versi
64a0: 6f 6e 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 33  on;.    }.  } {3
64b0: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67  }.  do_test prag
64c0: 6d 61 2d 38 2e 32 2e 38 20 7b 0a 20 20 20 20 65  ma-8.2.8 {.    e
64d0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50  xecsql {.      P
64e0: 52 41 47 4d 41 20 6d 61 69 6e 2e 75 73 65 72 5f  RAGMA main.user_
64f0: 76 65 72 73 69 6f 6e 3b 0a 20 20 20 20 7d 0a 20  version;.    }. 
6500: 20 7d 20 7b 32 7d 0a 20 20 0a 20 20 23 20 4e 6f   } {2}.  .  # No
6510: 77 20 63 68 65 63 6b 20 74 68 61 74 20 61 20 52  w check that a R
6520: 4f 4c 4c 42 41 43 4b 20 72 65 73 65 74 73 20 74  OLLBACK resets t
6530: 68 65 20 75 73 65 72 2d 76 65 72 73 69 6f 6e 20  he user-version 
6540: 69 66 20 69 74 20 68 61 73 20 62 65 65 6e 20 6d  if it has been m
6550: 6f 64 69 66 69 65 64 0a 20 20 23 20 77 69 74 68  odified.  # with
6560: 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  in a transaction
6570: 2e 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67  ..  do_test prag
6580: 6d 61 2d 38 2e 32 2e 39 20 7b 0a 20 20 20 20 65  ma-8.2.9 {.    e
6590: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 42  xecsql {.      B
65a0: 45 47 49 4e 3b 0a 20 20 20 20 20 20 50 52 41 47  EGIN;.      PRAG
65b0: 4d 41 20 61 75 78 2e 75 73 65 72 5f 76 65 72 73  MA aux.user_vers
65c0: 69 6f 6e 20 3d 20 31 30 3b 0a 20 20 20 20 20 20  ion = 10;.      
65d0: 50 52 41 47 4d 41 20 75 73 65 72 5f 76 65 72 73  PRAGMA user_vers
65e0: 69 6f 6e 20 3d 20 31 31 3b 0a 20 20 20 20 7d 0a  ion = 11;.    }.
65f0: 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65 73 74    } {}.  do_test
6600: 20 70 72 61 67 6d 61 2d 38 2e 32 2e 31 30 20 7b   pragma-8.2.10 {
6610: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
6620: 20 20 20 20 20 50 52 41 47 4d 41 20 61 75 78 2e       PRAGMA aux.
6630: 75 73 65 72 5f 76 65 72 73 69 6f 6e 3b 0a 20 20  user_version;.  
6640: 20 20 7d 0a 20 20 7d 20 7b 31 30 7d 0a 20 20 64    }.  } {10}.  d
6650: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e  o_test pragma-8.
6660: 32 2e 31 31 20 7b 0a 20 20 20 20 65 78 65 63 73  2.11 {.    execs
6670: 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d  ql {.      PRAGM
6680: 41 20 6d 61 69 6e 2e 75 73 65 72 5f 76 65 72 73  A main.user_vers
6690: 69 6f 6e 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b  ion;.    }.  } {
66a0: 31 31 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72  11}.  do_test pr
66b0: 61 67 6d 61 2d 38 2e 32 2e 31 32 20 7b 0a 20 20  agma-8.2.12 {.  
66c0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
66d0: 20 20 52 4f 4c 4c 42 41 43 4b 3b 0a 20 20 20 20    ROLLBACK;.    
66e0: 20 20 50 52 41 47 4d 41 20 61 75 78 2e 75 73 65    PRAGMA aux.use
66f0: 72 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 20 20 7d  r_version;.    }
6700: 0a 20 20 7d 20 7b 33 7d 0a 20 20 64 6f 5f 74 65  .  } {3}.  do_te
6710: 73 74 20 70 72 61 67 6d 61 2d 38 2e 32 2e 31 33  st pragma-8.2.13
6720: 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b   {.    execsql {
6730: 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 6d 61  .      PRAGMA ma
6740: 69 6e 2e 75 73 65 72 5f 76 65 72 73 69 6f 6e 3b  in.user_version;
6750: 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 32 7d 0a 7d  .    }.  } {2}.}
6760: 0a 0a 23 20 54 72 79 20 61 20 6e 65 67 61 74 69  ..# Try a negati
6770: 76 65 20 76 61 6c 75 65 20 66 6f 72 20 74 68 65  ve value for the
6780: 20 75 73 65 72 2d 76 65 72 73 69 6f 6e 0a 64 6f   user-version.do
6790: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 32  _test pragma-8.2
67a0: 2e 31 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  .14 {.  execsql 
67b0: 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 75 73 65  {.    PRAGMA use
67c0: 72 5f 76 65 72 73 69 6f 6e 20 3d 20 2d 34 35 30  r_version = -450
67d0: 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65  ;.  }.} {}.do_te
67e0: 73 74 20 70 72 61 67 6d 61 2d 38 2e 32 2e 31 35  st pragma-8.2.15
67f0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
6800: 20 20 20 50 52 41 47 4d 41 20 75 73 65 72 5f 76     PRAGMA user_v
6810: 65 72 73 69 6f 6e 3b 0a 20 20 7d 0a 7d 20 7b 2d  ersion;.  }.} {-
6820: 34 35 30 7d 0a 7d 20 3b 20 23 20 69 66 63 61 70  450}.} ; # ifcap
6830: 61 62 6c 65 20 73 63 68 65 6d 61 5f 76 65 72 73  able schema_vers
6840: 69 6f 6e 0a 0a 23 20 43 68 65 63 6b 20 74 6f 20  ion..# Check to 
6850: 73 65 65 20 69 66 20 54 45 4d 50 5f 53 54 4f 52  see if TEMP_STOR
6860: 45 20 69 73 20 6d 65 6d 6f 72 79 20 6f 72 20 64  E is memory or d
6870: 69 73 6b 2e 20 20 52 65 74 75 72 6e 20 73 74 72  isk.  Return str
6880: 69 6e 67 73 0a 23 20 22 6d 65 6d 6f 72 79 22 20  ings.# "memory" 
6890: 6f 72 20 22 64 69 73 6b 22 20 61 73 20 61 70 70  or "disk" as app
68a0: 72 6f 70 72 69 61 74 65 2e 0a 23 0a 70 72 6f 63  ropriate..#.proc
68b0: 20 63 68 65 63 6b 5f 74 65 6d 70 5f 73 74 6f 72   check_temp_stor
68c0: 65 20 7b 7d 20 7b 0a 20 20 64 62 20 65 76 61 6c  e {} {.  db eval
68d0: 20 7b 43 52 45 41 54 45 20 54 45 4d 50 20 54 41   {CREATE TEMP TA
68e0: 42 4c 45 20 49 46 20 4e 4f 54 20 45 58 49 53 54  BLE IF NOT EXIST
68f0: 53 20 61 28 62 29 7d 0a 20 20 64 62 20 65 76 61  S a(b)}.  db eva
6900: 6c 20 7b 50 52 41 47 4d 41 20 64 61 74 61 62 61  l {PRAGMA databa
6910: 73 65 5f 6c 69 73 74 7d 20 7b 0a 20 20 20 20 69  se_list} {.    i
6920: 66 20 7b 24 6e 61 6d 65 3d 3d 22 74 65 6d 70 22  f {$name=="temp"
6930: 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20 62 74  } {.      set bt
6940: 20 5b 62 74 72 65 65 5f 66 72 6f 6d 5f 64 62 20   [btree_from_db 
6950: 64 62 20 31 5d 0a 20 20 20 20 20 20 69 66 20 7b  db 1].      if {
6960: 5b 62 74 72 65 65 5f 69 73 6d 65 6d 64 62 20 24  [btree_ismemdb $
6970: 62 74 5d 7d 20 7b 0a 20 20 20 20 20 20 20 20 72  bt]} {.        r
6980: 65 74 75 72 6e 20 22 6d 65 6d 6f 72 79 22 0a 20  eturn "memory". 
6990: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 72 65 74       }.      ret
69a0: 75 72 6e 20 22 64 69 73 6b 22 0a 20 20 20 20 7d  urn "disk".    }
69b0: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 22 75  .  }.  return "u
69c0: 6e 6b 6e 6f 77 6e 22 0a 7d 0a 0a 23 20 41 70 70  nknown".}..# App
69d0: 6c 69 63 61 74 69 6f 6e 5f 49 44 0a 23 0a 64 6f  lication_ID.#.do
69e0: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 33  _test pragma-8.3
69f0: 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .1 {.  execsql {
6a00: 0a 20 20 20 20 50 52 41 47 4d 41 20 61 70 70 6c  .    PRAGMA appl
6a10: 69 63 61 74 69 6f 6e 5f 69 64 3b 0a 20 20 7d 0a  ication_id;.  }.
6a20: 7d 20 7b 30 7d 0a 64 6f 5f 74 65 73 74 20 70 72  } {0}.do_test pr
6a30: 61 67 6d 61 2d 38 2e 33 2e 32 20 7b 0a 20 20 65  agma-8.3.2 {.  e
6a40: 78 65 63 73 71 6c 20 7b 50 52 41 47 4d 41 20 41  xecsql {PRAGMA A
6a50: 70 70 6c 69 63 61 74 69 6f 6e 5f 49 44 28 31 32  pplication_ID(12
6a60: 33 34 35 29 3b 20 50 52 41 47 4d 41 20 61 70 70  345); PRAGMA app
6a70: 6c 69 63 61 74 69 6f 6e 5f 69 64 3b 7d 0a 7d 20  lication_id;}.} 
6a80: 7b 31 32 33 34 35 7d 0a 0a 23 20 54 65 73 74 20  {12345}..# Test 
6a90: 74 65 6d 70 5f 73 74 6f 72 65 20 61 6e 64 20 74  temp_store and t
6aa0: 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74  emp_store_direct
6ab0: 6f 72 79 20 70 72 61 67 6d 61 73 0a 23 0a 69 66  ory pragmas.#.if
6ac0: 63 61 70 61 62 6c 65 20 70 61 67 65 72 5f 70 72  capable pager_pr
6ad0: 61 67 6d 61 73 20 7b 0a 64 6f 5f 74 65 73 74 20  agmas {.do_test 
6ae0: 70 72 61 67 6d 61 2d 39 2e 31 20 7b 0a 20 20 64  pragma-9.1 {.  d
6af0: 62 20 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74 65  b close.  sqlite
6b00: 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20 65  3 db test.db.  e
6b10: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41  xecsql {.    PRA
6b20: 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 3b 0a  GMA temp_store;.
6b30: 20 20 7d 0a 7d 20 7b 30 7d 0a 69 66 20 7b 24 54    }.} {0}.if {$T
6b40: 45 4d 50 5f 53 54 4f 52 45 3c 3d 31 7d 20 7b 0a  EMP_STORE<=1} {.
6b50: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
6b60: 2d 39 2e 31 2e 31 20 7b 0a 20 20 20 20 63 68 65  -9.1.1 {.    che
6b70: 63 6b 5f 74 65 6d 70 5f 73 74 6f 72 65 0a 20 20  ck_temp_store.  
6b80: 7d 20 7b 64 69 73 6b 7d 0a 7d 20 65 6c 73 65 20  } {disk}.} else 
6b90: 7b 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67  {.  do_test prag
6ba0: 6d 61 2d 39 2e 31 2e 31 20 7b 0a 20 20 20 20 63  ma-9.1.1 {.    c
6bb0: 68 65 63 6b 5f 74 65 6d 70 5f 73 74 6f 72 65 0a  heck_temp_store.
6bc0: 20 20 7d 20 7b 6d 65 6d 6f 72 79 7d 0a 7d 0a 0a    } {memory}.}..
6bd0: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 39  do_test pragma-9
6be0: 2e 32 20 7b 0a 20 20 64 62 20 63 6c 6f 73 65 0a  .2 {.  db close.
6bf0: 20 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73    sqlite3 db tes
6c00: 74 2e 64 62 0a 20 20 65 78 65 63 73 71 6c 20 7b  t.db.  execsql {
6c10: 0a 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70  .    PRAGMA temp
6c20: 5f 73 74 6f 72 65 3d 66 69 6c 65 3b 0a 20 20 20  _store=file;.   
6c30: 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f   PRAGMA temp_sto
6c40: 72 65 3b 0a 20 20 7d 0a 7d 20 7b 31 7d 0a 69 66  re;.  }.} {1}.if
6c50: 20 7b 24 54 45 4d 50 5f 53 54 4f 52 45 3d 3d 33   {$TEMP_STORE==3
6c60: 7d 20 7b 0a 20 20 23 20 57 68 65 6e 20 54 45 4d  } {.  # When TEM
6c70: 50 5f 53 54 4f 52 45 20 69 73 20 33 2c 20 61 6c  P_STORE is 3, al
6c80: 77 61 79 73 20 75 73 65 20 6d 65 6d 6f 72 79 20  ways use memory 
6c90: 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 70 72  regardless of pr
6ca0: 61 67 6d 61 20 73 65 74 74 69 6e 67 73 2e 0a 20  agma settings.. 
6cb0: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
6cc0: 39 2e 32 2e 31 20 7b 0a 20 20 20 20 63 68 65 63  9.2.1 {.    chec
6cd0: 6b 5f 74 65 6d 70 5f 73 74 6f 72 65 0a 20 20 7d  k_temp_store.  }
6ce0: 20 7b 6d 65 6d 6f 72 79 7d 0a 7d 20 65 6c 73 65   {memory}.} else
6cf0: 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61   {.  do_test pra
6d00: 67 6d 61 2d 39 2e 32 2e 31 20 7b 0a 20 20 20 20  gma-9.2.1 {.    
6d10: 63 68 65 63 6b 5f 74 65 6d 70 5f 73 74 6f 72 65  check_temp_store
6d20: 0a 20 20 7d 20 7b 64 69 73 6b 7d 0a 7d 0a 0a 64  .  } {disk}.}..d
6d30: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 39 2e  o_test pragma-9.
6d40: 33 20 7b 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20  3 {.  db close. 
6d50: 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74   sqlite3 db test
6d60: 2e 64 62 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  .db.  execsql {.
6d70: 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f      PRAGMA temp_
6d80: 73 74 6f 72 65 3d 6d 65 6d 6f 72 79 3b 0a 20 20  store=memory;.  
6d90: 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74    PRAGMA temp_st
6da0: 6f 72 65 3b 0a 20 20 7d 0a 7d 20 7b 32 7d 0a 69  ore;.  }.} {2}.i
6db0: 66 20 7b 24 54 45 4d 50 5f 53 54 4f 52 45 3d 3d  f {$TEMP_STORE==
6dc0: 30 7d 20 7b 0a 20 20 23 20 57 68 65 6e 20 54 45  0} {.  # When TE
6dd0: 4d 50 5f 53 54 4f 52 45 20 69 73 20 30 2c 20 61  MP_STORE is 0, a
6de0: 6c 77 61 79 73 20 75 73 65 20 74 68 65 20 64 69  lways use the di
6df0: 73 6b 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66  sk regardless of
6e00: 20 70 72 61 67 6d 61 20 73 65 74 74 69 6e 67 73   pragma settings
6e10: 2e 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67  ..  do_test prag
6e20: 6d 61 2d 39 2e 33 2e 31 20 7b 0a 20 20 20 20 63  ma-9.3.1 {.    c
6e30: 68 65 63 6b 5f 74 65 6d 70 5f 73 74 6f 72 65 0a  heck_temp_store.
6e40: 20 20 7d 20 7b 64 69 73 6b 7d 0a 7d 20 65 6c 73    } {disk}.} els
6e50: 65 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 70 72  e {.  do_test pr
6e60: 61 67 6d 61 2d 39 2e 33 2e 31 20 7b 0a 20 20 20  agma-9.3.1 {.   
6e70: 20 63 68 65 63 6b 5f 74 65 6d 70 5f 73 74 6f 72   check_temp_stor
6e80: 65 0a 20 20 7d 20 7b 6d 65 6d 6f 72 79 7d 0a 7d  e.  } {memory}.}
6e90: 0a 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  ..do_test pragma
6ea0: 2d 39 2e 34 20 7b 0a 20 20 65 78 65 63 73 71 6c  -9.4 {.  execsql
6eb0: 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 74 65   {.    PRAGMA te
6ec0: 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f  mp_store_directo
6ed0: 72 79 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 69 66 63  ry;.  }.} {}.ifc
6ee0: 61 70 61 62 6c 65 20 77 73 64 20 7b 0a 20 20 64  apable wsd {.  d
6ef0: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 39 2e  o_test pragma-9.
6f00: 35 20 7b 0a 20 20 20 20 73 65 74 20 70 77 64 20  5 {.    set pwd 
6f10: 5b 73 74 72 69 6e 67 20 6d 61 70 20 7b 27 20 27  [string map {' '
6f20: 27 7d 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e  '} [file nativen
6f30: 61 6d 65 20 5b 67 65 74 5f 70 77 64 5d 5d 5d 0a  ame [get_pwd]]].
6f40: 20 20 20 20 65 78 65 63 73 71 6c 20 22 0a 20 20      execsql ".  
6f50: 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f      PRAGMA temp_
6f60: 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 3d  store_directory=
6f70: 27 24 70 77 64 27 3b 0a 20 20 20 20 22 0a 20 20  '$pwd';.    ".  
6f80: 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70  } {}.  do_test p
6f90: 72 61 67 6d 61 2d 39 2e 36 20 7b 0a 20 20 20 20  ragma-9.6 {.    
6fa0: 65 78 65 63 73 71 6c 20 7b 20 0a 20 20 20 20 20  execsql { .     
6fb0: 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f   PRAGMA temp_sto
6fc0: 72 65 5f 64 69 72 65 63 74 6f 72 79 3b 0a 20 20  re_directory;.  
6fd0: 20 20 7d 0a 20 20 7d 20 5b 6c 69 73 74 20 5b 66    }.  } [list [f
6fe0: 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b  ile nativename [
6ff0: 67 65 74 5f 70 77 64 5d 5d 5d 0a 20 20 64 6f 5f  get_pwd]]].  do_
7000: 74 65 73 74 20 70 72 61 67 6d 61 2d 39 2e 37 20  test pragma-9.7 
7010: 7b 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b  {.    catchsql {
7020: 20 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 74   .      PRAGMA t
7030: 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74  emp_store_direct
7040: 6f 72 79 3d 27 2f 4e 4f 4e 2f 45 58 49 53 54 45  ory='/NON/EXISTE
7050: 4e 54 2f 50 41 54 48 2f 46 4f 4f 42 41 52 27 3b  NT/PATH/FOOBAR';
7060: 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 31 20 7b 6e  .    }.  } {1 {n
7070: 6f 74 20 61 20 77 72 69 74 61 62 6c 65 20 64 69  ot a writable di
7080: 72 65 63 74 6f 72 79 7d 7d 0a 20 20 64 6f 5f 74  rectory}}.  do_t
7090: 65 73 74 20 70 72 61 67 6d 61 2d 39 2e 38 20 7b  est pragma-9.8 {
70a0: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 20 0a  .    execsql { .
70b0: 20 20 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d        PRAGMA tem
70c0: 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72  p_store_director
70d0: 79 3d 27 27 3b 0a 20 20 20 20 7d 0a 20 20 7d 20  y='';.    }.  } 
70e0: 7b 7d 0a 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20  {}.  if {![info 
70f0: 65 78 69 73 74 73 20 54 45 4d 50 5f 53 54 4f 52  exists TEMP_STOR
7100: 45 5d 20 7c 7c 20 24 54 45 4d 50 5f 53 54 4f 52  E] || $TEMP_STOR
7110: 45 3c 3d 31 7d 20 7b 0a 20 20 20 20 69 66 63 61  E<=1} {.    ifca
7120: 70 61 62 6c 65 20 74 65 6d 70 64 62 20 7b 0a 20  pable tempdb {. 
7130: 20 20 20 20 20 64 6f 5f 74 65 73 74 20 70 72 61       do_test pra
7140: 67 6d 61 2d 39 2e 39 20 7b 0a 20 20 20 20 20 20  gma-9.9 {.      
7150: 20 20 65 78 65 63 73 71 6c 20 7b 20 0a 20 20 20    execsql { .   
7160: 20 20 20 20 20 20 20 50 52 41 47 4d 41 20 74 65         PRAGMA te
7170: 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f  mp_store_directo
7180: 72 79 3b 0a 20 20 20 20 20 20 20 20 20 20 50 52  ry;.          PR
7190: 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 3d  AGMA temp_store=
71a0: 46 49 4c 45 3b 0a 20 20 20 20 20 20 20 20 20 20  FILE;.          
71b0: 43 52 45 41 54 45 20 54 45 4d 50 20 54 41 42 4c  CREATE TEMP TABL
71c0: 45 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72  E temp_store_dir
71d0: 65 63 74 6f 72 79 5f 74 65 73 74 28 61 20 69 6e  ectory_test(a in
71e0: 74 65 67 65 72 29 3b 0a 20 20 20 20 20 20 20 20  teger);.        
71f0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 65    INSERT INTO te
7200: 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f  mp_store_directo
7210: 72 79 5f 74 65 73 74 20 76 61 6c 75 65 73 20 28  ry_test values (
7220: 32 29 3b 0a 20 20 20 20 20 20 20 20 20 20 53 45  2);.          SE
7230: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 65 6d 70  LECT * FROM temp
7240: 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79  _store_directory
7250: 5f 74 65 73 74 3b 0a 20 20 20 20 20 20 20 20 7d  _test;.        }
7260: 0a 20 20 20 20 20 20 7d 20 7b 32 7d 0a 20 20 20  .      } {2}.   
7270: 20 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d     do_test pragm
7280: 61 2d 39 2e 31 30 20 7b 0a 20 20 20 20 20 20 20  a-9.10 {.       
7290: 20 63 61 74 63 68 73 71 6c 20 22 0a 20 20 20 20   catchsql ".    
72a0: 20 20 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d        PRAGMA tem
72b0: 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72  p_store_director
72c0: 79 3d 27 24 70 77 64 27 3b 0a 20 20 20 20 20 20  y='$pwd';.      
72d0: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
72e0: 4d 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72  M temp_store_dir
72f0: 65 63 74 6f 72 79 5f 74 65 73 74 3b 0a 20 20 20  ectory_test;.   
7300: 20 20 20 20 20 22 0a 20 20 20 20 20 20 7d 20 7b       ".      } {
7310: 31 20 7b 6e 6f 20 73 75 63 68 20 74 61 62 6c 65  1 {no such table
7320: 3a 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72  : temp_store_dir
7330: 65 63 74 6f 72 79 5f 74 65 73 74 7d 7d 0a 20 20  ectory_test}}.  
7340: 20 20 7d 0a 20 20 7d 0a 7d 0a 64 6f 5f 74 65 73    }.  }.}.do_tes
7350: 74 20 70 72 61 67 6d 61 2d 39 2e 31 31 20 7b 0a  t pragma-9.11 {.
7360: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
7370: 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72  PRAGMA temp_stor
7380: 65 20 3d 20 30 3b 0a 20 20 20 20 50 52 41 47 4d  e = 0;.    PRAGM
7390: 41 20 74 65 6d 70 5f 73 74 6f 72 65 3b 0a 20 20  A temp_store;.  
73a0: 7d 0a 7d 20 7b 30 7d 0a 64 6f 5f 74 65 73 74 20  }.} {0}.do_test 
73b0: 70 72 61 67 6d 61 2d 39 2e 31 32 20 7b 0a 20 20  pragma-9.12 {.  
73c0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52  execsql {.    PR
73d0: 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 20  AGMA temp_store 
73e0: 3d 20 31 3b 0a 20 20 20 20 50 52 41 47 4d 41 20  = 1;.    PRAGMA 
73f0: 74 65 6d 70 5f 73 74 6f 72 65 3b 0a 20 20 7d 0a  temp_store;.  }.
7400: 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 70 72  } {1}.do_test pr
7410: 61 67 6d 61 2d 39 2e 31 33 20 7b 0a 20 20 65 78  agma-9.13 {.  ex
7420: 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47  ecsql {.    PRAG
7430: 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 20 3d 20  MA temp_store = 
7440: 32 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 74 65  2;.    PRAGMA te
7450: 6d 70 5f 73 74 6f 72 65 3b 0a 20 20 7d 0a 7d 20  mp_store;.  }.} 
7460: 7b 32 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67  {2}.do_test prag
7470: 6d 61 2d 39 2e 31 34 20 7b 0a 20 20 65 78 65 63  ma-9.14 {.  exec
7480: 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41  sql {.    PRAGMA
7490: 20 74 65 6d 70 5f 73 74 6f 72 65 20 3d 20 33 3b   temp_store = 3;
74a0: 0a 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70  .    PRAGMA temp
74b0: 5f 73 74 6f 72 65 3b 0a 20 20 7d 0a 7d 20 7b 30  _store;.  }.} {0
74c0: 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  }.do_test pragma
74d0: 2d 39 2e 31 35 20 7b 0a 20 20 63 61 74 63 68 73  -9.15 {.  catchs
74e0: 71 6c 20 7b 0a 20 20 20 20 42 45 47 49 4e 20 45  ql {.    BEGIN E
74f0: 58 43 4c 55 53 49 56 45 3b 0a 20 20 20 20 43 52  XCLUSIVE;.    CR
7500: 45 41 54 45 20 54 45 4d 50 20 54 41 42 4c 45 20  EATE TEMP TABLE 
7510: 74 65 6d 70 5f 74 61 62 6c 65 28 74 29 3b 0a 20  temp_table(t);. 
7520: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
7530: 65 6d 70 5f 74 61 62 6c 65 20 56 41 4c 55 45 53  emp_table VALUES
7540: 28 27 76 61 6c 75 61 62 6c 65 20 64 61 74 61 27  ('valuable data'
7550: 29 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 74 65  );.    PRAGMA te
7560: 6d 70 5f 73 74 6f 72 65 20 3d 20 31 3b 0a 20 20  mp_store = 1;.  
7570: 7d 0a 7d 20 7b 31 20 7b 74 65 6d 70 6f 72 61 72  }.} {1 {temporar
7580: 79 20 73 74 6f 72 61 67 65 20 63 61 6e 6e 6f 74  y storage cannot
7590: 20 62 65 20 63 68 61 6e 67 65 64 20 66 72 6f 6d   be changed from
75a0: 20 77 69 74 68 69 6e 20 61 20 74 72 61 6e 73 61   within a transa
75b0: 63 74 69 6f 6e 7d 7d 0a 64 6f 5f 74 65 73 74 20  ction}}.do_test 
75c0: 70 72 61 67 6d 61 2d 39 2e 31 36 20 7b 0a 20 20  pragma-9.16 {.  
75d0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45  execsql {.    SE
75e0: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 65 6d 70  LECT * FROM temp
75f0: 5f 74 61 62 6c 65 3b 0a 20 20 20 20 43 4f 4d 4d  _table;.    COMM
7600: 49 54 3b 0a 20 20 7d 0a 7d 20 7b 7b 76 61 6c 75  IT;.  }.} {{valu
7610: 61 62 6c 65 20 64 61 74 61 7d 7d 0a 0a 64 6f 5f  able data}}..do_
7620: 74 65 73 74 20 70 72 61 67 6d 61 2d 39 2e 31 37  test pragma-9.17
7630: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
7640: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
7650: 65 6d 70 5f 74 61 62 6c 65 20 56 41 4c 55 45 53  emp_table VALUES
7660: 28 27 76 61 6c 75 61 62 6c 65 20 64 61 74 61 20  ('valuable data 
7670: 49 49 27 29 3b 0a 20 20 20 20 53 45 4c 45 43 54  II');.    SELECT
7680: 20 2a 20 46 52 4f 4d 20 74 65 6d 70 5f 74 61 62   * FROM temp_tab
7690: 6c 65 3b 0a 20 20 7d 0a 7d 20 7b 7b 76 61 6c 75  le;.  }.} {{valu
76a0: 61 62 6c 65 20 64 61 74 61 7d 20 7b 76 61 6c 75  able data} {valu
76b0: 61 62 6c 65 20 64 61 74 61 20 49 49 7d 7d 0a 0a  able data II}}..
76c0: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 39  do_test pragma-9
76d0: 2e 31 38 20 7b 0a 20 20 73 65 74 20 72 63 20 5b  .18 {.  set rc [
76e0: 63 61 74 63 68 20 7b 0a 20 20 20 20 64 62 20 65  catch {.    db e
76f0: 76 61 6c 20 7b 53 45 4c 45 43 54 20 74 20 46 52  val {SELECT t FR
7700: 4f 4d 20 74 65 6d 70 5f 74 61 62 6c 65 7d 20 7b  OM temp_table} {
7710: 0a 20 20 20 20 20 20 65 78 65 63 73 71 6c 20 7b  .      execsql {
7720: 70 72 61 67 6d 61 20 74 65 6d 70 5f 73 74 6f 72  pragma temp_stor
7730: 65 20 3d 20 31 7d 0a 20 20 20 20 7d 0a 20 20 7d  e = 1}.    }.  }
7740: 20 6d 73 67 5d 0a 20 20 6c 69 73 74 20 24 72 63   msg].  list $rc
7750: 20 24 6d 73 67 0a 7d 20 7b 31 20 7b 74 65 6d 70   $msg.} {1 {temp
7760: 6f 72 61 72 79 20 73 74 6f 72 61 67 65 20 63 61  orary storage ca
7770: 6e 6e 6f 74 20 62 65 20 63 68 61 6e 67 65 64 20  nnot be changed 
7780: 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 20 74 72  from within a tr
7790: 61 6e 73 61 63 74 69 6f 6e 7d 7d 0a 0a 7d 20 3b  ansaction}}..} ;
77a0: 23 20 69 66 63 61 70 61 62 6c 65 20 70 61 67 65  # ifcapable page
77b0: 72 5f 70 72 61 67 6d 61 73 0a 0a 69 66 63 61 70  r_pragmas..ifcap
77c0: 61 62 6c 65 20 74 72 69 67 67 65 72 20 7b 0a 0a  able trigger {..
77d0: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31  do_test pragma-1
77e0: 30 2e 30 20 7b 0a 20 20 63 61 74 63 68 73 71 6c  0.0 {.  catchsql
77f0: 20 7b 0a 20 20 20 20 44 52 4f 50 20 54 41 42 4c   {.    DROP TABL
7800: 45 20 6d 61 69 6e 2e 74 31 3b 0a 20 20 7d 0a 20  E main.t1;.  }. 
7810: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50   execsql {.    P
7820: 52 41 47 4d 41 20 63 6f 75 6e 74 5f 63 68 61 6e  RAGMA count_chan
7830: 67 65 73 20 3d 20 31 3b 0a 0a 20 20 20 20 43 52  ges = 1;..    CR
7840: 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 61 20  EATE TABLE t1(a 
7850: 50 52 49 4d 41 52 59 20 4b 45 59 29 3b 0a 20 20  PRIMARY KEY);.  
7860: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
7870: 31 5f 6d 69 72 72 6f 72 28 61 29 3b 0a 20 20 20  1_mirror(a);.   
7880: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31   CREATE TABLE t1
7890: 5f 6d 69 72 72 6f 72 32 28 61 29 3b 0a 20 20 20  _mirror2(a);.   
78a0: 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20   CREATE TRIGGER 
78b0: 74 31 5f 62 69 20 42 45 46 4f 52 45 20 49 4e 53  t1_bi BEFORE INS
78c0: 45 52 54 20 4f 4e 20 74 31 20 42 45 47 49 4e 20  ERT ON t1 BEGIN 
78d0: 0a 20 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e  .      INSERT IN
78e0: 54 4f 20 74 31 5f 6d 69 72 72 6f 72 20 56 41 4c  TO t1_mirror VAL
78f0: 55 45 53 28 6e 65 77 2e 61 29 3b 0a 20 20 20 20  UES(new.a);.    
7900: 45 4e 44 3b 0a 20 20 20 20 43 52 45 41 54 45 20  END;.    CREATE 
7910: 54 52 49 47 47 45 52 20 74 31 5f 61 69 20 41 46  TRIGGER t1_ai AF
7920: 54 45 52 20 49 4e 53 45 52 54 20 4f 4e 20 74 31  TER INSERT ON t1
7930: 20 42 45 47 49 4e 20 0a 20 20 20 20 20 20 49 4e   BEGIN .      IN
7940: 53 45 52 54 20 49 4e 54 4f 20 74 31 5f 6d 69 72  SERT INTO t1_mir
7950: 72 6f 72 32 20 56 41 4c 55 45 53 28 6e 65 77 2e  ror2 VALUES(new.
7960: 61 29 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20 20  a);.    END;.   
7970: 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20   CREATE TRIGGER 
7980: 74 31 5f 62 75 20 42 45 46 4f 52 45 20 55 50 44  t1_bu BEFORE UPD
7990: 41 54 45 20 4f 4e 20 74 31 20 42 45 47 49 4e 20  ATE ON t1 BEGIN 
79a0: 0a 20 20 20 20 20 20 55 50 44 41 54 45 20 74 31  .      UPDATE t1
79b0: 5f 6d 69 72 72 6f 72 20 53 45 54 20 61 20 3d 20  _mirror SET a = 
79c0: 6e 65 77 2e 61 20 57 48 45 52 45 20 61 20 3d 20  new.a WHERE a = 
79d0: 6f 6c 64 2e 61 3b 0a 20 20 20 20 45 4e 44 3b 0a  old.a;.    END;.
79e0: 20 20 20 20 43 52 45 41 54 45 20 54 52 49 47 47      CREATE TRIGG
79f0: 45 52 20 74 31 5f 61 75 20 41 46 54 45 52 20 55  ER t1_au AFTER U
7a00: 50 44 41 54 45 20 4f 4e 20 74 31 20 42 45 47 49  PDATE ON t1 BEGI
7a10: 4e 20 0a 20 20 20 20 20 20 55 50 44 41 54 45 20  N .      UPDATE 
7a20: 74 31 5f 6d 69 72 72 6f 72 32 20 53 45 54 20 61  t1_mirror2 SET a
7a30: 20 3d 20 6e 65 77 2e 61 20 57 48 45 52 45 20 61   = new.a WHERE a
7a40: 20 3d 20 6f 6c 64 2e 61 3b 0a 20 20 20 20 45 4e   = old.a;.    EN
7a50: 44 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54 52  D;.    CREATE TR
7a60: 49 47 47 45 52 20 74 31 5f 62 64 20 42 45 46 4f  IGGER t1_bd BEFO
7a70: 52 45 20 44 45 4c 45 54 45 20 4f 4e 20 74 31 20  RE DELETE ON t1 
7a80: 42 45 47 49 4e 20 0a 20 20 20 20 20 20 44 45 4c  BEGIN .      DEL
7a90: 45 54 45 20 46 52 4f 4d 20 74 31 5f 6d 69 72 72  ETE FROM t1_mirr
7aa0: 6f 72 20 57 48 45 52 45 20 61 20 3d 20 6f 6c 64  or WHERE a = old
7ab0: 2e 61 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20 20  .a;.    END;.   
7ac0: 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20   CREATE TRIGGER 
7ad0: 74 31 5f 61 64 20 41 46 54 45 52 20 44 45 4c 45  t1_ad AFTER DELE
7ae0: 54 45 20 4f 4e 20 74 31 20 42 45 47 49 4e 20 0a  TE ON t1 BEGIN .
7af0: 20 20 20 20 20 20 44 45 4c 45 54 45 20 46 52 4f        DELETE FRO
7b00: 4d 20 74 31 5f 6d 69 72 72 6f 72 32 20 57 48 45  M t1_mirror2 WHE
7b10: 52 45 20 61 20 3d 20 6f 6c 64 2e 61 3b 0a 20 20  RE a = old.a;.  
7b20: 20 20 45 4e 44 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a    END;.  }.} {}.
7b30: 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d  .do_test pragma-
7b40: 31 30 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c  10.1 {.  execsql
7b50: 20 7b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e   {.    INSERT IN
7b60: 54 4f 20 74 31 20 56 41 4c 55 45 53 28 72 61 6e  TO t1 VALUES(ran
7b70: 64 73 74 72 28 31 30 2c 31 30 29 29 3b 0a 20 20  dstr(10,10));.  
7b80: 7d 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20  }.} {1}.do_test 
7b90: 70 72 61 67 6d 61 2d 31 30 2e 32 20 7b 0a 20 20  pragma-10.2 {.  
7ba0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 55 50  execsql {.    UP
7bb0: 44 41 54 45 20 74 31 20 53 45 54 20 61 20 3d 20  DATE t1 SET a = 
7bc0: 72 61 6e 64 73 74 72 28 31 30 2c 31 30 29 3b 0a  randstr(10,10);.
7bd0: 20 20 7d 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73    }.} {1}.do_tes
7be0: 74 20 70 72 61 67 6d 61 2d 31 30 2e 33 20 7b 0a  t pragma-10.3 {.
7bf0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
7c00: 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 31 3b 0a  DELETE FROM t1;.
7c10: 20 20 7d 0a 7d 20 7b 31 7d 0a 0a 7d 20 3b 23 20    }.} {1}..} ;# 
7c20: 69 66 63 61 70 61 62 6c 65 20 74 72 69 67 67 65  ifcapable trigge
7c30: 72 0a 0a 69 66 63 61 70 61 62 6c 65 20 73 63 68  r..ifcapable sch
7c40: 65 6d 61 5f 70 72 61 67 6d 61 73 20 7b 0a 20 20  ema_pragmas {.  
7c50: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31  do_test pragma-1
7c60: 31 2e 31 20 7b 0a 20 20 20 20 65 78 65 63 73 71  1.1 {.    execsq
7c70: 6c 32 20 7b 0a 20 20 20 20 20 20 70 72 61 67 6d  l2 {.      pragm
7c80: 61 20 63 6f 6c 6c 61 74 69 6f 6e 5f 6c 69 73 74  a collation_list
7c90: 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 73 65 71  ;.    }.  } {seq
7ca0: 20 30 20 6e 61 6d 65 20 52 54 52 49 4d 20 73 65   0 name RTRIM se
7cb0: 71 20 31 20 6e 61 6d 65 20 4e 4f 43 41 53 45 20  q 1 name NOCASE 
7cc0: 73 65 71 20 32 20 6e 61 6d 65 20 42 49 4e 41 52  seq 2 name BINAR
7cd0: 59 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61  Y}.  do_test pra
7ce0: 67 6d 61 2d 31 31 2e 32 20 7b 0a 20 20 20 20 64  gma-11.2 {.    d
7cf0: 62 20 63 6f 6c 6c 61 74 65 20 4e 65 77 5f 43 6f  b collate New_Co
7d00: 6c 6c 61 74 69 6f 6e 20 62 6c 61 68 2e 2e 2e 0a  llation blah....
7d10: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20      execsql {.  
7d20: 20 20 20 20 70 72 61 67 6d 61 20 63 6f 6c 6c 61      pragma colla
7d30: 74 69 6f 6e 5f 6c 69 73 74 3b 0a 20 20 20 20 7d  tion_list;.    }
7d40: 0a 20 20 7d 20 7b 30 20 4e 65 77 5f 43 6f 6c 6c  .  } {0 New_Coll
7d50: 61 74 69 6f 6e 20 31 20 52 54 52 49 4d 20 32 20  ation 1 RTRIM 2 
7d60: 4e 4f 43 41 53 45 20 33 20 42 49 4e 41 52 59 7d  NOCASE 3 BINARY}
7d70: 0a 7d 0a 0a 69 66 63 61 70 61 62 6c 65 20 73 63  .}..ifcapable sc
7d80: 68 65 6d 61 5f 70 72 61 67 6d 61 73 26 26 74 65  hema_pragmas&&te
7d90: 6d 70 64 62 20 7b 0a 20 20 64 6f 5f 74 65 73 74  mpdb {.  do_test
7da0: 20 70 72 61 67 6d 61 2d 31 32 2e 31 20 7b 0a 20   pragma-12.1 {. 
7db0: 20 20 20 73 71 6c 69 74 65 33 20 64 62 32 20 74     sqlite3 db2 t
7dc0: 65 73 74 2e 64 62 0a 20 20 20 20 65 78 65 63 73  est.db.    execs
7dd0: 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d  ql {.      PRAGM
7de0: 41 20 74 65 6d 70 2e 74 61 62 6c 65 5f 69 6e 66  A temp.table_inf
7df0: 6f 28 27 61 62 63 27 29 3b 0a 20 20 20 20 7d 20  o('abc');.    } 
7e00: 64 62 32 0a 20 20 7d 20 7b 7d 0a 20 20 64 62 32  db2.  } {}.  db2
7e10: 20 63 6c 6f 73 65 0a 0a 20 20 64 6f 5f 74 65 73   close..  do_tes
7e20: 74 20 70 72 61 67 6d 61 2d 31 32 2e 32 20 7b 0a  t pragma-12.2 {.
7e30: 20 20 20 20 73 71 6c 69 74 65 33 20 64 62 32 20      sqlite3 db2 
7e40: 74 65 73 74 2e 64 62 0a 20 20 20 20 65 78 65 63  test.db.    exec
7e50: 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47  sql {.      PRAG
7e60: 4d 41 20 74 65 6d 70 2e 64 65 66 61 75 6c 74 5f  MA temp.default_
7e70: 63 61 63 68 65 5f 73 69 7a 65 20 3d 20 32 30 30  cache_size = 200
7e80: 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 74  ;.      PRAGMA t
7e90: 65 6d 70 2e 64 65 66 61 75 6c 74 5f 63 61 63 68  emp.default_cach
7ea0: 65 5f 73 69 7a 65 3b 0a 20 20 20 20 7d 20 64 62  e_size;.    } db
7eb0: 32 0a 20 20 7d 20 7b 32 30 30 7d 0a 20 20 64 62  2.  } {200}.  db
7ec0: 32 20 63 6c 6f 73 65 0a 0a 20 20 64 6f 5f 74 65  2 close..  do_te
7ed0: 73 74 20 70 72 61 67 6d 61 2d 31 32 2e 33 20 7b  st pragma-12.3 {
7ee0: 0a 20 20 20 20 73 71 6c 69 74 65 33 20 64 62 32  .    sqlite3 db2
7ef0: 20 74 65 73 74 2e 64 62 0a 20 20 20 20 65 78 65   test.db.    exe
7f00: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41  csql {.      PRA
7f10: 47 4d 41 20 74 65 6d 70 2e 63 61 63 68 65 5f 73  GMA temp.cache_s
7f20: 69 7a 65 20 3d 20 34 30 30 3b 0a 20 20 20 20 20  ize = 400;.     
7f30: 20 50 52 41 47 4d 41 20 74 65 6d 70 2e 63 61 63   PRAGMA temp.cac
7f40: 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 7d 20 64  he_size;.    } d
7f50: 62 32 0a 20 20 7d 20 7b 34 30 30 7d 0a 20 20 64  b2.  } {400}.  d
7f60: 62 32 20 63 6c 6f 73 65 0a 7d 0a 0a 69 66 63 61  b2 close.}..ifca
7f70: 70 61 62 6c 65 20 62 6c 6f 62 6c 69 74 20 7b 0a  pable bloblit {.
7f80: 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d  .do_test pragma-
7f90: 31 33 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c  13.1 {.  execsql
7fa0: 20 7b 0a 20 20 20 20 44 52 4f 50 20 54 41 42 4c   {.    DROP TABL
7fb0: 45 20 49 46 20 45 58 49 53 54 53 20 74 34 3b 0a  E IF EXISTS t4;.
7fc0: 20 20 20 20 50 52 41 47 4d 41 20 76 64 62 65 5f      PRAGMA vdbe_
7fd0: 74 72 61 63 65 3d 6f 6e 3b 0a 20 20 20 20 50 52  trace=on;.    PR
7fe0: 41 47 4d 41 20 76 64 62 65 5f 6c 69 73 74 69 6e  AGMA vdbe_listin
7ff0: 67 3d 6f 6e 3b 0a 20 20 20 20 50 52 41 47 4d 41  g=on;.    PRAGMA
8000: 20 73 71 6c 5f 74 72 61 63 65 3d 6f 6e 3b 0a 20   sql_trace=on;. 
8010: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
8020: 74 34 28 61 20 49 4e 54 45 47 45 52 20 50 52 49  t4(a INTEGER PRI
8030: 4d 41 52 59 20 4b 45 59 2c 62 29 3b 0a 20 20 20  MARY KEY,b);.   
8040: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 34 28   INSERT INTO t4(
8050: 62 29 20 56 41 4c 55 45 53 28 78 27 30 31 32 33  b) VALUES(x'0123
8060: 34 35 36 37 38 39 61 62 63 64 65 66 30 31 32 33  456789abcdef0123
8070: 34 35 36 37 38 39 61 62 63 64 65 66 30 31 32 33  456789abcdef0123
8080: 34 35 36 37 38 39 27 29 3b 0a 20 20 20 20 49 4e  456789');.    IN
8090: 53 45 52 54 20 49 4e 54 4f 20 74 34 28 62 29 20  SERT INTO t4(b) 
80a0: 56 41 4c 55 45 53 28 72 61 6e 64 73 74 72 28 33  VALUES(randstr(3
80b0: 30 2c 33 30 29 29 3b 0a 20 20 20 20 49 4e 53 45  0,30));.    INSE
80c0: 52 54 20 49 4e 54 4f 20 74 34 28 62 29 20 56 41  RT INTO t4(b) VA
80d0: 4c 55 45 53 28 31 2e 32 33 34 35 36 29 3b 0a 20  LUES(1.23456);. 
80e0: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
80f0: 34 28 62 29 20 56 41 4c 55 45 53 28 4e 55 4c 4c  4(b) VALUES(NULL
8100: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
8110: 54 4f 20 74 34 28 62 29 20 56 41 4c 55 45 53 28  TO t4(b) VALUES(
8120: 30 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  0);.    INSERT I
8130: 4e 54 4f 20 74 34 28 62 29 20 53 45 4c 45 43 54  NTO t4(b) SELECT
8140: 20 62 7c 7c 62 7c 7c 62 7c 7c 62 20 46 52 4f 4d   b||b||b||b FROM
8150: 20 74 34 3b 0a 20 20 20 20 53 45 4c 45 43 54 20   t4;.    SELECT 
8160: 2a 20 46 52 4f 4d 20 74 34 3b 0a 20 20 7d 0a 20  * FROM t4;.  }. 
8170: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50   execsql {.    P
8180: 52 41 47 4d 41 20 76 64 62 65 5f 74 72 61 63 65  RAGMA vdbe_trace
8190: 3d 6f 66 66 3b 0a 20 20 20 20 50 52 41 47 4d 41  =off;.    PRAGMA
81a0: 20 76 64 62 65 5f 6c 69 73 74 69 6e 67 3d 6f 66   vdbe_listing=of
81b0: 66 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 73 71  f;.    PRAGMA sq
81c0: 6c 5f 74 72 61 63 65 3d 6f 66 66 3b 0a 20 20 7d  l_trace=off;.  }
81d0: 0a 7d 20 7b 7d 0a 0a 7d 20 3b 23 20 69 66 63 61  .} {}..} ;# ifca
81e0: 70 61 62 6c 65 20 62 6c 6f 62 6c 69 74 20 0a 0a  pable bloblit ..
81f0: 69 66 63 61 70 61 62 6c 65 20 70 61 67 65 72 5f  ifcapable pager_
8200: 70 72 61 67 6d 61 73 20 7b 0a 20 20 64 62 20 63  pragmas {.  db c
8210: 6c 6f 73 65 0a 20 20 66 6f 72 63 65 64 65 6c 65  lose.  forcedele
8220: 74 65 20 74 65 73 74 2e 64 62 0a 20 20 73 71 6c  te test.db.  sql
8230: 69 74 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a  ite3 db test.db.
8240: 20 0a 20 20 23 20 45 56 49 44 45 4e 43 45 2d 4f   .  # EVIDENCE-O
8250: 46 3a 20 52 2d 31 33 39 30 35 2d 32 36 33 31 32  F: R-13905-26312
8260: 20 50 52 41 47 4d 41 20 64 61 74 61 62 61 73 65   PRAGMA database
8270: 2e 70 61 67 65 5f 63 6f 75 6e 74 3b 20 52 65 74  .page_count; Ret
8280: 75 72 6e 20 74 68 65 0a 20 20 23 20 74 6f 74 61  urn the.  # tota
8290: 6c 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65  l number of page
82a0: 73 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  s in the databas
82b0: 65 20 66 69 6c 65 2e 0a 20 20 23 0a 20 20 64 6f  e file..  #.  do
82c0: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 34 2e  _test pragma-14.
82d0: 31 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  1 {.    execsql 
82e0: 7b 20 70 72 61 67 6d 61 20 61 75 74 6f 5f 76 61  { pragma auto_va
82f0: 63 75 75 6d 20 3d 20 30 20 7d 0a 20 20 20 20 65  cuum = 0 }.    e
8300: 78 65 63 73 71 6c 20 7b 20 70 72 61 67 6d 61 20  xecsql { pragma 
8310: 70 61 67 65 5f 63 6f 75 6e 74 3b 20 70 72 61 67  page_count; prag
8320: 6d 61 20 6d 61 69 6e 2e 70 61 67 65 5f 63 6f 75  ma main.page_cou
8330: 6e 74 20 7d 0a 20 20 7d 20 7b 30 20 30 7d 0a 0a  nt }.  } {0 0}..
8340: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
8350: 2d 31 34 2e 32 20 7b 0a 20 20 20 20 65 78 65 63  -14.2 {.    exec
8360: 73 71 6c 20 7b 20 0a 20 20 20 20 20 20 43 52 45  sql { .      CRE
8370: 41 54 45 20 54 41 42 4c 45 20 61 62 63 28 61 2c  ATE TABLE abc(a,
8380: 20 62 2c 20 63 29 3b 0a 20 20 20 20 20 20 50 52   b, c);.      PR
8390: 41 47 4d 41 20 70 61 67 65 5f 63 6f 75 6e 74 3b  AGMA page_count;
83a0: 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 6d 61  .      PRAGMA ma
83b0: 69 6e 2e 70 61 67 65 5f 63 6f 75 6e 74 3b 0a 20  in.page_count;. 
83c0: 20 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70       PRAGMA temp
83d0: 2e 70 61 67 65 5f 63 6f 75 6e 74 3b 0a 20 20 20  .page_count;.   
83e0: 20 7d 0a 20 20 7d 20 7b 32 20 32 20 30 7d 0a 20   }.  } {2 2 0}. 
83f0: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
8400: 31 34 2e 32 75 63 20 7b 0a 20 20 20 20 65 78 65  14.2uc {.    exe
8410: 63 73 71 6c 20 7b 70 72 61 67 6d 61 20 50 41 47  csql {pragma PAG
8420: 45 5f 43 4f 55 4e 54 7d 0a 20 20 7d 20 7b 32 7d  E_COUNT}.  } {2}
8430: 0a 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67  ..  do_test prag
8440: 6d 61 2d 31 34 2e 33 20 7b 0a 20 20 20 20 65 78  ma-14.3 {.    ex
8450: 65 63 73 71 6c 20 7b 20 0a 20 20 20 20 20 20 42  ecsql { .      B
8460: 45 47 49 4e 3b 0a 20 20 20 20 20 20 43 52 45 41  EGIN;.      CREA
8470: 54 45 20 54 41 42 4c 45 20 64 65 66 28 61 2c 20  TE TABLE def(a, 
8480: 62 2c 20 63 29 3b 0a 20 20 20 20 20 20 50 52 41  b, c);.      PRA
8490: 47 4d 41 20 70 61 67 65 5f 63 6f 75 6e 74 3b 0a  GMA page_count;.
84a0: 20 20 20 20 7d 0a 20 20 7d 20 7b 33 7d 0a 20 20      }.  } {3}.  
84b0: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31  do_test pragma-1
84c0: 34 2e 33 75 63 20 7b 0a 20 20 20 20 65 78 65 63  4.3uc {.    exec
84d0: 73 71 6c 20 7b 70 72 61 67 6d 61 20 50 41 47 45  sql {pragma PAGE
84e0: 5f 43 4f 55 4e 54 7d 0a 20 20 7d 20 7b 33 7d 0a  _COUNT}.  } {3}.
84f0: 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .  do_test pragm
8500: 61 2d 31 34 2e 34 20 7b 0a 20 20 20 20 73 65 74  a-14.4 {.    set
8510: 20 70 61 67 65 5f 73 69 7a 65 20 5b 64 62 20 6f   page_size [db o
8520: 6e 65 20 7b 70 72 61 67 6d 61 20 70 61 67 65 5f  ne {pragma page_
8530: 73 69 7a 65 7d 5d 0a 20 20 20 20 65 78 70 72 20  size}].    expr 
8540: 5b 66 69 6c 65 20 73 69 7a 65 20 74 65 73 74 2e  [file size test.
8550: 64 62 5d 20 2f 20 24 70 61 67 65 5f 73 69 7a 65  db] / $page_size
8560: 0a 20 20 7d 20 7b 32 7d 0a 0a 20 20 64 6f 5f 74  .  } {2}..  do_t
8570: 65 73 74 20 70 72 61 67 6d 61 2d 31 34 2e 35 20  est pragma-14.5 
8580: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a  {.    execsql {.
8590: 20 20 20 20 20 20 52 4f 4c 4c 42 41 43 4b 3b 0a        ROLLBACK;.
85a0: 20 20 20 20 20 20 50 52 41 47 4d 41 20 70 61 67        PRAGMA pag
85b0: 65 5f 63 6f 75 6e 74 3b 0a 20 20 20 20 7d 0a 20  e_count;.    }. 
85c0: 20 7d 20 7b 32 7d 0a 0a 20 20 64 6f 5f 74 65 73   } {2}..  do_tes
85d0: 74 20 70 72 61 67 6d 61 2d 31 34 2e 36 20 7b 0a  t pragma-14.6 {.
85e0: 20 20 20 20 66 6f 72 63 65 64 65 6c 65 74 65 20      forcedelete 
85f0: 74 65 73 74 32 2e 64 62 0a 20 20 20 20 73 71 6c  test2.db.    sql
8600: 69 74 65 33 20 64 62 32 20 74 65 73 74 32 2e 64  ite3 db2 test2.d
8610: 62 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a  b.    execsql {.
8620: 20 20 20 20 20 20 50 52 41 47 4d 41 20 61 75 74        PRAGMA aut
8630: 6f 5f 76 61 63 75 75 6d 20 3d 20 30 3b 0a 20 20  o_vacuum = 0;.  
8640: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
8650: 20 74 31 28 61 2c 20 62 2c 20 63 29 3b 0a 20 20   t1(a, b, c);.  
8660: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
8670: 20 74 32 28 61 2c 20 62 2c 20 63 29 3b 0a 20 20   t2(a, b, c);.  
8680: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
8690: 20 74 33 28 61 2c 20 62 2c 20 63 29 3b 0a 20 20   t3(a, b, c);.  
86a0: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
86b0: 20 74 34 28 61 2c 20 62 2c 20 63 29 3b 0a 20 20   t4(a, b, c);.  
86c0: 20 20 7d 20 64 62 32 0a 20 20 20 20 64 62 32 20    } db2.    db2 
86d0: 63 6c 6f 73 65 0a 20 20 20 20 65 78 65 63 73 71  close.    execsq
86e0: 6c 20 7b 0a 20 20 20 20 20 20 41 54 54 41 43 48  l {.      ATTACH
86f0: 20 27 74 65 73 74 32 2e 64 62 27 20 41 53 20 61   'test2.db' AS a
8700: 75 78 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41  ux;.      PRAGMA
8710: 20 61 75 78 2e 70 61 67 65 5f 63 6f 75 6e 74 3b   aux.page_count;
8720: 0a 20 20 20 20 7d 20 0a 20 20 7d 20 7b 35 7d 0a  .    } .  } {5}.
8730: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
8740: 2d 31 34 2e 36 75 63 20 7b 0a 20 20 20 20 65 78  -14.6uc {.    ex
8750: 65 63 73 71 6c 20 7b 70 72 61 67 6d 61 20 41 55  ecsql {pragma AU
8760: 58 2e 50 41 47 45 5f 43 4f 55 4e 54 7d 0a 20 20  X.PAGE_COUNT}.  
8770: 7d 20 7b 35 7d 0a 7d 0a 0a 23 20 54 65 73 74 20  } {5}.}..# Test 
8780: 74 68 61 74 20 74 68 65 20 76 61 6c 75 65 20 73  that the value s
8790: 65 74 20 75 73 69 6e 67 20 74 68 65 20 63 61 63  et using the cac
87a0: 68 65 5f 73 69 7a 65 20 70 72 61 67 6d 61 20 69  he_size pragma i
87b0: 73 20 6e 6f 74 20 72 65 73 65 74 20 77 68 65 6e  s not reset when
87c0: 20 74 68 65 0a 23 20 73 63 68 65 6d 61 20 69 73   the.# schema is
87d0: 20 72 65 6c 6f 61 64 65 64 2e 0a 23 0a 69 66 63   reloaded..#.ifc
87e0: 61 70 61 62 6c 65 20 70 61 67 65 72 5f 70 72 61  apable pager_pra
87f0: 67 6d 61 73 20 7b 0a 20 20 64 62 20 63 6c 6f 73  gmas {.  db clos
8800: 65 0a 20 20 73 71 6c 69 74 65 33 20 64 62 20 74  e.  sqlite3 db t
8810: 65 73 74 2e 64 62 0a 20 20 64 6f 5f 74 65 73 74  est.db.  do_test
8820: 20 70 72 61 67 6d 61 2d 31 35 2e 31 20 7b 0a 20   pragma-15.1 {. 
8830: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
8840: 20 20 20 50 52 41 47 4d 41 20 63 61 63 68 65 5f     PRAGMA cache_
8850: 73 69 7a 65 3d 35 39 3b 0a 20 20 20 20 20 20 50  size=59;.      P
8860: 52 41 47 4d 41 20 63 61 63 68 65 5f 73 69 7a 65  RAGMA cache_size
8870: 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 35 39 7d  ;.    }.  } {59}
8880: 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .  do_test pragm
8890: 61 2d 31 35 2e 32 20 7b 0a 20 20 20 20 73 71 6c  a-15.2 {.    sql
88a0: 69 74 65 33 20 64 62 32 20 74 65 73 74 2e 64 62  ite3 db2 test.db
88b0: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
88c0: 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c       CREATE TABL
88d0: 45 20 6e 65 77 74 61 62 6c 65 28 61 2c 20 62 2c  E newtable(a, b,
88e0: 20 63 29 3b 0a 20 20 20 20 7d 20 64 62 32 0a 20   c);.    } db2. 
88f0: 20 20 20 64 62 32 20 63 6c 6f 73 65 0a 20 20 7d     db2 close.  }
8900: 20 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72   {}.  do_test pr
8910: 61 67 6d 61 2d 31 35 2e 33 20 7b 0a 20 20 20 20  agma-15.3 {.    
8920: 23 20 45 76 61 6c 75 61 74 69 6e 67 20 74 68 69  # Evaluating thi
8930: 73 20 73 74 61 74 65 6d 65 6e 74 20 77 69 6c 6c  s statement will
8940: 20 63 61 75 73 65 20 74 68 65 20 73 63 68 65 6d   cause the schem
8950: 61 20 74 6f 20 62 65 20 72 65 6c 6f 61 64 65 64  a to be reloaded
8960: 20 28 62 65 63 61 75 73 65 0a 20 20 20 20 23 20   (because.    # 
8970: 74 68 65 20 73 63 68 65 6d 61 20 77 61 73 20 63  the schema was c
8980: 68 61 6e 67 65 64 20 62 79 20 61 6e 6f 74 68 65  hanged by anothe
8990: 72 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 6e 20  r connection in 
89a0: 70 72 61 67 6d 61 2d 31 35 2e 32 29 2e 20 41 74  pragma-15.2). At
89b0: 20 6f 6e 65 0a 20 20 20 20 23 20 70 6f 69 6e 74   one.    # point
89c0: 20 74 68 65 72 65 20 77 61 73 20 61 20 62 75 67   there was a bug
89d0: 20 74 68 61 74 20 72 65 73 65 74 20 74 68 65 20   that reset the 
89e0: 63 61 63 68 65 5f 73 69 7a 65 20 74 6f 20 69 74  cache_size to it
89f0: 73 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 0a  s default value.
8a00: 20 20 20 20 23 20 77 68 65 6e 20 74 68 69 73 20      # when this 
8a10: 68 61 70 70 65 6e 65 64 2e 20 0a 20 20 20 20 65  happened. .    e
8a20: 78 65 63 73 71 6c 20 7b 20 53 45 4c 45 43 54 20  xecsql { SELECT 
8a30: 2a 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61  * FROM sqlite_ma
8a40: 73 74 65 72 20 7d 0a 20 20 20 20 65 78 65 63 73  ster }.    execs
8a50: 71 6c 20 7b 20 50 52 41 47 4d 41 20 63 61 63 68  ql { PRAGMA cach
8a60: 65 5f 73 69 7a 65 20 7d 0a 20 20 7d 20 7b 35 39  e_size }.  } {59
8a70: 7d 0a 7d 0a 0a 23 20 52 65 73 65 74 20 74 68 65  }.}..# Reset the
8a80: 20 73 71 6c 69 74 65 33 5f 74 65 6d 70 5f 64 69   sqlite3_temp_di
8a90: 72 65 63 74 6f 72 79 20 76 61 72 69 61 62 6c 65  rectory variable
8aa0: 20 66 6f 72 20 74 68 65 20 6e 65 78 74 20 72 75   for the next ru
8ab0: 6e 20 6f 66 20 74 65 73 74 73 3a 0a 73 71 6c 69  n of tests:.sqli
8ac0: 74 65 33 20 64 62 58 20 3a 6d 65 6d 6f 72 79 3a  te3 dbX :memory:
8ad0: 0a 64 62 58 20 65 76 61 6c 20 7b 50 52 41 47 4d  .dbX eval {PRAGM
8ae0: 41 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72  A temp_store_dir
8af0: 65 63 74 6f 72 79 20 3d 20 22 22 7d 0a 64 62 58  ectory = ""}.dbX
8b00: 20 63 6c 6f 73 65 0a 0a 69 66 63 61 70 61 62 6c   close..ifcapabl
8b10: 65 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 70 72 61  e lock_proxy_pra
8b20: 67 6d 61 73 26 26 70 72 65 66 65 72 5f 70 72 6f  gmas&&prefer_pro
8b30: 78 79 5f 6c 6f 63 6b 69 6e 67 20 7b 0a 20 20 73  xy_locking {.  s
8b40: 65 74 20 73 71 6c 69 74 65 5f 68 6f 73 74 69 64  et sqlite_hostid
8b50: 5f 6e 75 6d 20 31 0a 0a 20 20 73 65 74 20 75 73  _num 1..  set us
8b60: 69 6e 67 5f 70 72 6f 78 79 20 30 0a 20 20 66 6f  ing_proxy 0.  fo
8b70: 72 65 61 63 68 20 7b 6e 61 6d 65 20 76 61 6c 75  reach {name valu
8b80: 65 7d 20 5b 61 72 72 61 79 20 67 65 74 20 65 6e  e} [array get en
8b90: 76 20 53 51 4c 49 54 45 5f 46 4f 52 43 45 5f 50  v SQLITE_FORCE_P
8ba0: 52 4f 58 59 5f 4c 4f 43 4b 49 4e 47 5d 20 7b 0a  ROXY_LOCKING] {.
8bb0: 20 20 20 20 73 65 74 20 75 73 69 6e 67 5f 70 72      set using_pr
8bc0: 6f 78 79 20 24 76 61 6c 75 65 0a 20 20 7d 0a 0a  oxy $value.  }..
8bd0: 20 20 23 20 54 65 73 74 20 74 68 65 20 6c 6f 63    # Test the loc
8be0: 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 20 70 72 61  k_proxy_file pra
8bf0: 67 6d 61 73 2e 0a 20 20 23 0a 20 20 64 62 20 63  gmas..  #.  db c
8c00: 6c 6f 73 65 0a 20 20 73 65 74 20 65 6e 76 28 53  lose.  set env(S
8c10: 51 4c 49 54 45 5f 46 4f 52 43 45 5f 50 52 4f 58  QLITE_FORCE_PROX
8c20: 59 5f 4c 4f 43 4b 49 4e 47 29 20 22 30 22 0a 0a  Y_LOCKING) "0"..
8c30: 20 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73    sqlite3 db tes
8c40: 74 2e 64 62 0a 20 20 64 6f 5f 74 65 73 74 20 70  t.db.  do_test p
8c50: 72 61 67 6d 61 2d 31 36 2e 31 20 7b 0a 20 20 20  ragma-16.1 {.   
8c60: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20   execsql {.     
8c70: 20 50 52 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f   PRAGMA lock_pro
8c80: 78 79 5f 66 69 6c 65 3d 22 6d 79 6c 69 74 74 6c  xy_file="mylittl
8c90: 65 70 72 6f 78 79 22 3b 0a 20 20 20 20 20 20 73  eproxy";.      s
8ca0: 65 6c 65 63 74 20 2a 20 66 72 6f 6d 20 73 71 6c  elect * from sql
8cb0: 69 74 65 5f 6d 61 73 74 65 72 3b 0a 20 20 20 20  ite_master;.    
8cc0: 7d 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a  }.    execsql {.
8cd0: 20 20 20 20 20 20 50 52 41 47 4d 41 20 6c 6f 63        PRAGMA loc
8ce0: 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 3b 0a 20 20  k_proxy_file;.  
8cf0: 20 20 7d 20 0a 20 20 7d 20 7b 6d 79 6c 69 74 74    } .  } {mylitt
8d00: 6c 65 70 72 6f 78 79 7d 0a 0a 20 20 64 6f 5f 74  leproxy}..  do_t
8d10: 65 73 74 20 70 72 61 67 6d 61 2d 31 36 2e 32 20  est pragma-16.2 
8d20: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 20 64 62  {.    sqlite3 db
8d30: 32 20 74 65 73 74 2e 64 62 0a 20 20 20 20 65 78  2 test.db.    ex
8d40: 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52  ecsql {.      PR
8d50: 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f  AGMA lock_proxy_
8d60: 66 69 6c 65 3d 22 6d 79 6c 69 74 74 6c 65 70 72  file="mylittlepr
8d70: 6f 78 79 22 3b 0a 20 20 20 20 7d 20 64 62 32 0a  oxy";.    } db2.
8d80: 20 20 7d 20 7b 7d 0a 0a 20 20 64 62 32 20 63 6c    } {}..  db2 cl
8d90: 6f 73 65 0a 20 20 64 6f 5f 74 65 73 74 20 70 72  ose.  do_test pr
8da0: 61 67 6d 61 2d 31 36 2e 32 2e 31 20 7b 0a 20 20  agma-16.2.1 {.  
8db0: 20 20 73 71 6c 69 74 65 33 20 64 62 32 20 74 65    sqlite3 db2 te
8dc0: 73 74 2e 64 62 0a 20 20 20 20 65 78 65 63 73 71  st.db.    execsq
8dd0: 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41  l {.      PRAGMA
8de0: 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65   lock_proxy_file
8df0: 3d 22 3a 61 75 74 6f 3a 22 3b 0a 20 20 20 20 20  =":auto:";.     
8e00: 20 73 65 6c 65 63 74 20 2a 20 66 72 6f 6d 20 73   select * from s
8e10: 71 6c 69 74 65 5f 6d 61 73 74 65 72 3b 0a 20 20  qlite_master;.  
8e20: 20 20 7d 20 64 62 32 0a 20 20 20 20 65 78 65 63    } db2.    exec
8e30: 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47  sql {.      PRAG
8e40: 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69  MA lock_proxy_fi
8e50: 6c 65 3b 0a 20 20 20 20 7d 20 64 62 32 0a 20 20  le;.    } db2.  
8e60: 7d 20 7b 6d 79 6c 69 74 74 6c 65 70 72 6f 78 79  } {mylittleproxy
8e70: 7d 0a 0a 20 20 64 62 32 20 63 6c 6f 73 65 0a 20  }..  db2 close. 
8e80: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
8e90: 31 36 2e 33 20 7b 0a 20 20 20 20 73 71 6c 69 74  16.3 {.    sqlit
8ea0: 65 33 20 64 62 32 20 74 65 73 74 2e 64 62 0a 20  e3 db2 test.db. 
8eb0: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
8ec0: 20 20 20 50 52 41 47 4d 41 20 6c 6f 63 6b 5f 70     PRAGMA lock_p
8ed0: 72 6f 78 79 5f 66 69 6c 65 3d 22 6d 79 6f 74 68  roxy_file="myoth
8ee0: 65 72 70 72 6f 78 79 22 3b 0a 20 20 20 20 7d 20  erproxy";.    } 
8ef0: 64 62 32 0a 20 20 20 20 63 61 74 63 68 73 71 6c  db2.    catchsql
8f00: 20 7b 0a 20 20 20 20 20 20 73 65 6c 65 63 74 20   {.      select 
8f10: 2a 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f 6d 61  * from sqlite_ma
8f20: 73 74 65 72 3b 0a 20 20 20 20 7d 20 64 62 32 0a  ster;.    } db2.
8f30: 20 20 7d 20 7b 31 20 7b 64 61 74 61 62 61 73 65    } {1 {database
8f40: 20 69 73 20 6c 6f 63 6b 65 64 7d 7d 0a 0a 20 20   is locked}}..  
8f50: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31  do_test pragma-1
8f60: 36 2e 34 20 7b 0a 20 20 20 20 64 62 32 20 63 6c  6.4 {.    db2 cl
8f70: 6f 73 65 0a 20 20 20 20 64 62 20 63 6c 6f 73 65  ose.    db close
8f80: 0a 20 20 20 20 73 71 6c 69 74 65 33 20 64 62 32  .    sqlite3 db2
8f90: 20 74 65 73 74 2e 64 62 0a 20 20 20 20 65 78 65   test.db.    exe
8fa0: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41  csql {.      PRA
8fb0: 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66  GMA lock_proxy_f
8fc0: 69 6c 65 3d 22 6d 79 6f 72 69 67 69 6e 61 6c 70  ile="myoriginalp
8fd0: 72 6f 78 79 22 3b 0a 20 20 20 20 20 20 50 52 41  roxy";.      PRA
8fe0: 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66  GMA lock_proxy_f
8ff0: 69 6c 65 3d 22 6d 79 6f 74 68 65 72 70 72 6f 78  ile="myotherprox
9000: 79 22 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41  y";.      PRAGMA
9010: 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65   lock_proxy_file
9020: 3b 0a 20 20 20 20 7d 20 64 62 32 0a 20 20 7d 20  ;.    } db2.  } 
9030: 7b 6d 79 6f 74 68 65 72 70 72 6f 78 79 7d 0a 0a  {myotherproxy}..
9040: 20 20 64 62 32 20 63 6c 6f 73 65 0a 20 20 73 65    db2 close.  se
9050: 74 20 65 6e 76 28 53 51 4c 49 54 45 5f 46 4f 52  t env(SQLITE_FOR
9060: 43 45 5f 50 52 4f 58 59 5f 4c 4f 43 4b 49 4e 47  CE_PROXY_LOCKING
9070: 29 20 22 31 22 0a 20 20 64 6f 5f 74 65 73 74 20  ) "1".  do_test 
9080: 70 72 61 67 6d 61 2d 31 36 2e 35 20 7b 0a 20 20  pragma-16.5 {.  
9090: 20 20 73 71 6c 69 74 65 33 20 64 62 32 20 74 65    sqlite3 db2 te
90a0: 73 74 2e 64 62 0a 20 20 20 20 65 78 65 63 73 71  st.db.    execsq
90b0: 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41  l {.      PRAGMA
90c0: 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65   lock_proxy_file
90d0: 3d 22 3a 61 75 74 6f 3a 22 3b 0a 20 20 20 20 20  =":auto:";.     
90e0: 20 50 52 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f   PRAGMA lock_pro
90f0: 78 79 5f 66 69 6c 65 3b 0a 20 20 20 20 7d 20 64  xy_file;.    } d
9100: 62 32 0a 20 20 7d 20 7b 6d 79 6f 74 68 65 72 70  b2.  } {myotherp
9110: 72 6f 78 79 7d 0a 20 20 0a 20 20 64 6f 5f 74 65  roxy}.  .  do_te
9120: 73 74 20 70 72 61 67 6d 61 2d 31 36 2e 36 20 7b  st pragma-16.6 {
9130: 0a 20 20 20 20 64 62 32 20 63 6c 6f 73 65 0a 20  .    db2 close. 
9140: 20 20 20 73 71 6c 69 74 65 33 20 64 62 32 20 74     sqlite3 db2 t
9150: 65 73 74 32 2e 64 62 0a 20 20 20 20 73 65 74 20  est2.db.    set 
9160: 6c 6f 63 6b 70 61 74 68 20 5b 65 78 65 63 73 71  lockpath [execsq
9170: 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41  l {.      PRAGMA
9180: 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65   lock_proxy_file
9190: 3d 22 3a 61 75 74 6f 3a 22 3b 0a 20 20 20 20 20  =":auto:";.     
91a0: 20 50 52 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f   PRAGMA lock_pro
91b0: 78 79 5f 66 69 6c 65 3b 0a 20 20 20 20 7d 20 64  xy_file;.    } d
91c0: 62 32 5d 0a 20 20 20 20 73 74 72 69 6e 67 20 6d  b2].    string m
91d0: 61 74 63 68 20 22 2a 74 65 73 74 32 2e 64 62 3a  atch "*test2.db:
91e0: 61 75 74 6f 3a 22 20 24 6c 6f 63 6b 70 61 74 68  auto:" $lockpath
91f0: 0a 20 20 7d 20 7b 31 7d 0a 20 20 0a 20 20 73 65  .  } {1}.  .  se
9200: 74 20 73 71 6c 69 74 65 5f 68 6f 73 74 69 64 5f  t sqlite_hostid_
9210: 6e 75 6d 20 32 0a 20 20 64 6f 5f 74 65 73 74 20  num 2.  do_test 
9220: 70 72 61 67 6d 61 2d 31 36 2e 37 20 7b 0a 20 20  pragma-16.7 {.  
9230: 20 20 6c 69 73 74 20 5b 63 61 74 63 68 20 7b 0a    list [catch {.
9240: 20 20 20 20 20 20 73 71 6c 69 74 65 33 20 64 62        sqlite3 db
9250: 20 74 65 73 74 32 2e 64 62 0a 20 20 20 20 20 20   test2.db.      
9260: 65 78 65 63 73 71 6c 20 7b 20 0a 20 20 20 20 20  execsql { .     
9270: 20 20 20 50 52 41 47 4d 41 20 6c 6f 63 6b 5f 70     PRAGMA lock_p
9280: 72 6f 78 79 5f 66 69 6c 65 3d 22 3a 61 75 74 6f  roxy_file=":auto
9290: 3a 22 3b 0a 20 20 20 20 20 20 20 20 73 65 6c 65  :";.        sele
92a0: 63 74 20 2a 20 66 72 6f 6d 20 73 71 6c 69 74 65  ct * from sqlite
92b0: 5f 6d 61 73 74 65 72 3b 0a 20 20 20 20 20 20 7d  _master;.      }
92c0: 0a 20 20 20 20 7d 20 6d 73 67 5d 20 24 6d 73 67  .    } msg] $msg
92d0: 0a 20 20 7d 20 7b 31 20 7b 64 61 74 61 62 61 73  .  } {1 {databas
92e0: 65 20 69 73 20 6c 6f 63 6b 65 64 7d 7d 0a 20 20  e is locked}}.  
92f0: 64 62 20 63 6c 6f 73 65 0a 20 20 0a 20 20 64 6f  db close.  .  do
9300: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 36 2e  _test pragma-16.
9310: 38 20 7b 0a 20 20 20 20 6c 69 73 74 20 5b 63 61  8 {.    list [ca
9320: 74 63 68 20 7b 0a 20 20 20 20 20 20 73 71 6c 69  tch {.      sqli
9330: 74 65 33 20 64 62 20 74 65 73 74 32 2e 64 62 0a  te3 db test2.db.
9340: 20 20 20 20 20 20 65 78 65 63 73 71 6c 20 7b 20        execsql { 
9350: 73 65 6c 65 63 74 20 2a 20 66 72 6f 6d 20 73 71  select * from sq
9360: 6c 69 74 65 5f 6d 61 73 74 65 72 20 7d 20 0a 20  lite_master } . 
9370: 20 20 20 7d 20 6d 73 67 5d 20 24 6d 73 67 0a 20     } msg] $msg. 
9380: 20 7d 20 7b 31 20 7b 64 61 74 61 62 61 73 65 20   } {1 {database 
9390: 69 73 20 6c 6f 63 6b 65 64 7d 7d 0a 0a 20 20 64  is locked}}..  d
93a0: 62 32 20 63 6c 6f 73 65 0a 20 20 64 6f 5f 74 65  b2 close.  do_te
93b0: 73 74 20 70 72 61 67 6d 61 2d 31 36 2e 38 2e 31  st pragma-16.8.1
93c0: 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b   {.    execsql {
93d0: 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 6c 6f  .      PRAGMA lo
93e0: 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 3d 22 79  ck_proxy_file="y
93f0: 65 74 61 6e 6f 74 68 65 72 70 72 6f 78 79 22 3b  etanotherproxy";
9400: 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 6c 6f  .      PRAGMA lo
9410: 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 3b 0a 20  ck_proxy_file;. 
9420: 20 20 20 7d 20 0a 20 20 7d 20 7b 79 65 74 61 6e     } .  } {yetan
9430: 6f 74 68 65 72 70 72 6f 78 79 7d 0a 20 20 64 6f  otherproxy}.  do
9440: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 36 2e  _test pragma-16.
9450: 38 2e 32 20 7b 0a 20 20 20 20 65 78 65 63 73 71  8.2 {.    execsq
9460: 6c 20 7b 0a 20 20 20 20 20 20 63 72 65 61 74 65  l {.      create
9470: 20 74 61 62 6c 65 20 6d 69 6e 65 28 78 29 3b 0a   table mine(x);.
9480: 20 20 20 20 7d 20 0a 20 20 7d 20 7b 7d 0a 0a 20      } .  } {}.. 
9490: 20 64 62 20 63 6c 6f 73 65 0a 20 20 64 6f 5f 74   db close.  do_t
94a0: 65 73 74 20 70 72 61 67 6d 61 2d 31 36 2e 39 20  est pragma-16.9 
94b0: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 20 64 62  {.    sqlite3 db
94c0: 20 70 72 6f 78 79 74 65 73 74 2e 64 62 0a 20 20   proxytest.db.  
94d0: 20 20 73 65 74 20 6c 6f 63 6b 70 61 74 68 32 20    set lockpath2 
94e0: 5b 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20  [execsql {.     
94f0: 20 50 52 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f   PRAGMA lock_pro
9500: 78 79 5f 66 69 6c 65 3d 22 3a 61 75 74 6f 3a 22  xy_file=":auto:"
9510: 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 6c  ;.      PRAGMA l
9520: 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 3b 0a  ock_proxy_file;.
9530: 20 20 20 20 7d 20 64 62 5d 0a 20 20 20 20 73 74      } db].    st
9540: 72 69 6e 67 20 6d 61 74 63 68 20 22 2a 70 72 6f  ring match "*pro
9550: 78 79 74 65 73 74 2e 64 62 3a 61 75 74 6f 3a 22  xytest.db:auto:"
9560: 20 24 6c 6f 63 6b 70 61 74 68 32 0a 20 20 7d 20   $lockpath2.  } 
9570: 7b 31 7d 0a 0a 20 20 73 65 74 20 65 6e 76 28 53  {1}..  set env(S
9580: 51 4c 49 54 45 5f 46 4f 52 43 45 5f 50 52 4f 58  QLITE_FORCE_PROX
9590: 59 5f 4c 4f 43 4b 49 4e 47 29 20 24 75 73 69 6e  Y_LOCKING) $usin
95a0: 67 5f 70 72 6f 78 79 0a 20 20 73 65 74 20 73 71  g_proxy.  set sq
95b0: 6c 69 74 65 5f 68 6f 73 74 69 64 5f 6e 75 6d 20  lite_hostid_num 
95c0: 30 0a 7d 0a 0a 23 20 50 61 72 73 69 6e 67 20 6f  0.}..# Parsing o
95d0: 66 20 61 75 74 6f 5f 76 61 63 75 75 6d 20 73 65  f auto_vacuum se
95e0: 74 74 69 6e 67 73 2e 0a 23 0a 66 6f 72 65 61 63  ttings..#.foreac
95f0: 68 20 7b 61 75 74 6f 76 61 63 5f 73 65 74 74 69  h {autovac_setti
9600: 6e 67 20 76 61 6c 7d 20 7b 0a 20 20 30 20 30 0a  ng val} {.  0 0.
9610: 20 20 31 20 31 0a 20 20 32 20 32 0a 20 20 33 20    1 1.  2 2.  3 
9620: 30 0a 20 20 2d 31 20 30 0a 20 20 6e 6f 6e 65 20  0.  -1 0.  none 
9630: 30 0a 20 20 4e 4f 4e 45 20 30 0a 20 20 4e 6f 4e  0.  NONE 0.  NoN
9640: 65 20 30 0a 20 20 66 75 6c 6c 20 31 0a 20 20 46  e 0.  full 1.  F
9650: 55 4c 4c 20 31 0a 20 20 69 6e 63 72 65 6d 65 6e  ULL 1.  incremen
9660: 74 61 6c 20 32 0a 20 20 49 4e 43 52 45 4d 45 4e  tal 2.  INCREMEN
9670: 54 41 4c 20 32 0a 20 20 2d 31 32 33 34 20 30 0a  TAL 2.  -1234 0.
9680: 20 20 31 32 33 34 20 30 0a 7d 20 7b 0a 20 20 64    1234 0.} {.  d
9690: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 37  o_test pragma-17
96a0: 2e 31 2e 24 61 75 74 6f 76 61 63 5f 73 65 74 74  .1.$autovac_sett
96b0: 69 6e 67 20 7b 0a 20 20 20 20 63 61 74 63 68 20  ing {.    catch 
96c0: 7b 64 62 20 63 6c 6f 73 65 7d 0a 20 20 20 20 73  {db close}.    s
96d0: 71 6c 69 74 65 33 20 64 62 20 3a 6d 65 6d 6f 72  qlite3 db :memor
96e0: 79 3a 0a 20 20 20 20 65 78 65 63 73 71 6c 20 22  y:.    execsql "
96f0: 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 61 75  .      PRAGMA au
9700: 74 6f 5f 76 61 63 75 75 6d 3d 24 3a 3a 61 75 74  to_vacuum=$::aut
9710: 6f 76 61 63 5f 73 65 74 74 69 6e 67 3b 0a 20 20  ovac_setting;.  
9720: 20 20 20 20 50 52 41 47 4d 41 20 61 75 74 6f 5f      PRAGMA auto_
9730: 76 61 63 75 75 6d 3b 0a 20 20 20 20 22 0a 20 20  vacuum;.    ".  
9740: 7d 20 24 76 61 6c 0a 7d 0a 0a 23 20 50 61 72 73  } $val.}..# Pars
9750: 69 6e 67 20 6f 66 20 74 65 6d 70 5f 73 74 6f 72  ing of temp_stor
9760: 65 20 73 65 74 74 69 6e 67 73 2e 0a 23 0a 66 6f  e settings..#.fo
9770: 72 65 61 63 68 20 7b 74 65 6d 70 5f 73 65 74 74  reach {temp_sett
9780: 69 6e 67 20 76 61 6c 7d 20 7b 0a 20 20 30 20 30  ing val} {.  0 0
9790: 0a 20 20 31 20 31 0a 20 20 32 20 32 0a 20 20 33  .  1 1.  2 2.  3
97a0: 20 30 0a 20 20 2d 31 20 30 0a 20 20 66 69 6c 65   0.  -1 0.  file
97b0: 20 31 0a 20 20 46 49 4c 45 20 31 0a 20 20 66 49   1.  FILE 1.  fI
97c0: 6c 45 20 31 0a 20 20 6d 65 6d 6f 72 79 20 32 0a  lE 1.  memory 2.
97d0: 20 20 4d 45 4d 4f 52 59 20 32 0a 20 20 4d 65 4d    MEMORY 2.  MeM
97e0: 6f 52 79 20 32 0a 7d 20 7b 0a 20 20 64 6f 5f 74  oRy 2.} {.  do_t
97f0: 65 73 74 20 70 72 61 67 6d 61 2d 31 38 2e 31 2e  est pragma-18.1.
9800: 24 74 65 6d 70 5f 73 65 74 74 69 6e 67 20 7b 0a  $temp_setting {.
9810: 20 20 20 20 63 61 74 63 68 20 7b 64 62 20 63 6c      catch {db cl
9820: 6f 73 65 7d 0a 20 20 20 20 73 71 6c 69 74 65 33  ose}.    sqlite3
9830: 20 64 62 20 3a 6d 65 6d 6f 72 79 3a 0a 20 20 20   db :memory:.   
9840: 20 65 78 65 63 73 71 6c 20 22 0a 20 20 20 20 20   execsql ".     
9850: 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f   PRAGMA temp_sto
9860: 72 65 3d 24 3a 3a 74 65 6d 70 5f 73 65 74 74 69  re=$::temp_setti
9870: 6e 67 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41  ng;.      PRAGMA
9880: 20 74 65 6d 70 5f 73 74 6f 72 65 3d 24 3a 3a 74   temp_store=$::t
9890: 65 6d 70 5f 73 65 74 74 69 6e 67 3b 0a 20 20 20  emp_setting;.   
98a0: 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73     PRAGMA temp_s
98b0: 74 6f 72 65 3b 0a 20 20 20 20 22 0a 20 20 7d 20  tore;.    ".  } 
98c0: 24 76 61 6c 0a 7d 0a 0a 23 20 54 68 65 20 53 51  $val.}..# The SQ
98d0: 4c 49 54 45 5f 46 43 4e 54 4c 5f 50 52 41 47 4d  LITE_FCNTL_PRAGM
98e0: 41 20 6c 6f 67 69 63 2c 20 77 69 74 68 20 65 72  A logic, with er
98f0: 72 6f 72 20 68 61 6e 64 6c 69 6e 67 2e 0a 23 0a  ror handling..#.
9900: 64 62 20 63 6c 6f 73 65 0a 74 65 73 74 76 66 73  db close.testvfs
9910: 20 74 76 66 73 0a 73 71 6c 69 74 65 33 20 64 62   tvfs.sqlite3 db
9920: 20 74 65 73 74 2e 64 62 20 2d 76 66 73 20 74 76   test.db -vfs tv
9930: 66 73 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  fs.do_test pragm
9940: 61 2d 31 39 2e 31 20 7b 0a 20 20 63 61 74 63 68  a-19.1 {.  catch
9950: 73 71 6c 20 7b 50 52 41 47 4d 41 20 65 72 72 6f  sql {PRAGMA erro
9960: 72 7d 0a 7d 20 7b 31 20 7b 53 51 4c 20 6c 6f 67  r}.} {1 {SQL log
9970: 69 63 20 65 72 72 6f 72 20 6f 72 20 6d 69 73 73  ic error or miss
9980: 69 6e 67 20 64 61 74 61 62 61 73 65 7d 7d 0a 64  ing database}}.d
9990: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 39  o_test pragma-19
99a0: 2e 32 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20  .2 {.  catchsql 
99b0: 7b 50 52 41 47 4d 41 20 65 72 72 6f 72 3d 27 54  {PRAGMA error='T
99c0: 68 69 73 20 69 73 20 74 68 65 20 65 72 72 6f 72  his is the error
99d0: 20 6d 65 73 73 61 67 65 27 7d 0a 7d 20 7b 31 20   message'}.} {1 
99e0: 7b 54 68 69 73 20 69 73 20 74 68 65 20 65 72 72  {This is the err
99f0: 6f 72 20 6d 65 73 73 61 67 65 7d 7d 0a 64 6f 5f  or message}}.do_
9a00: 74 65 73 74 20 70 72 61 67 6d 61 2d 31 39 2e 33  test pragma-19.3
9a10: 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 50   {.  catchsql {P
9a20: 52 41 47 4d 41 20 65 72 72 6f 72 3d 27 37 20 54  RAGMA error='7 T
9a30: 68 69 73 20 69 73 20 74 68 65 20 65 72 72 6f 72  his is the error
9a40: 20 6d 65 73 73 61 67 65 27 7d 0a 7d 20 7b 31 20   message'}.} {1 
9a50: 7b 54 68 69 73 20 69 73 20 74 68 65 20 65 72 72  {This is the err
9a60: 6f 72 20 6d 65 73 73 61 67 65 7d 7d 0a 64 6f 5f  or message}}.do_
9a70: 74 65 73 74 20 70 72 61 67 6d 61 2d 31 39 2e 34  test pragma-19.4
9a80: 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 50   {.  catchsql {P
9a90: 52 41 47 4d 41 20 65 72 72 6f 72 3d 37 7d 0a 7d  RAGMA error=7}.}
9aa0: 20 7b 31 20 7b 6f 75 74 20 6f 66 20 6d 65 6d 6f   {1 {out of memo
9ab0: 72 79 7d 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61  ry}}.do_test pra
9ac0: 67 6d 61 2d 31 39 2e 35 20 7b 0a 20 20 66 69 6c  gma-19.5 {.  fil
9ad0: 65 20 74 61 69 6c 20 5b 6c 69 6e 64 65 78 20 5b  e tail [lindex [
9ae0: 65 78 65 63 73 71 6c 20 7b 50 52 41 47 4d 41 20  execsql {PRAGMA 
9af0: 66 69 6c 65 6e 61 6d 65 7d 5d 20 30 5d 0a 7d 20  filename}] 0].} 
9b00: 7b 74 65 73 74 2e 64 62 7d 0a 0a 69 66 20 7b 24  {test.db}..if {$
9b10: 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 70 6c 61  tcl_platform(pla
9b20: 74 66 6f 72 6d 29 3d 3d 22 77 69 6e 64 6f 77 73  tform)=="windows
9b30: 22 7d 20 7b 0a 23 20 54 65 73 74 20 64 61 74 61  "} {.# Test data
9b40: 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79  _store_directory
9b50: 20 70 72 61 67 6d 61 0a 23 0a 64 62 20 63 6c 6f   pragma.#.db clo
9b60: 73 65 0a 73 71 6c 69 74 65 33 20 64 62 20 74 65  se.sqlite3 db te
9b70: 73 74 2e 64 62 0a 66 69 6c 65 20 6d 6b 64 69 72  st.db.file mkdir
9b80: 20 64 61 74 61 5f 64 69 72 0a 64 6f 5f 74 65 73   data_dir.do_tes
9b90: 74 20 70 72 61 67 6d 61 2d 32 30 2e 31 20 7b 0a  t pragma-20.1 {.
9ba0: 20 20 63 61 74 63 68 73 71 6c 20 7b 50 52 41 47    catchsql {PRAG
9bb0: 4d 41 20 64 61 74 61 5f 73 74 6f 72 65 5f 64 69  MA data_store_di
9bc0: 72 65 63 74 6f 72 79 7d 0a 7d 20 7b 30 20 7b 7d  rectory}.} {0 {}
9bd0: 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  }.do_test pragma
9be0: 2d 32 30 2e 32 20 7b 0a 20 20 73 65 74 20 70 77  -20.2 {.  set pw
9bf0: 64 20 5b 73 74 72 69 6e 67 20 6d 61 70 20 7b 27  d [string map {'
9c00: 20 27 27 7d 20 5b 66 69 6c 65 20 6e 61 74 69 76   ''} [file nativ
9c10: 65 6e 61 6d 65 20 5b 67 65 74 5f 70 77 64 5d 5d  ename [get_pwd]]
9c20: 5d 0a 20 20 63 61 74 63 68 73 71 6c 20 22 50 52  ].  catchsql "PR
9c30: 41 47 4d 41 20 64 61 74 61 5f 73 74 6f 72 65 5f  AGMA data_store_
9c40: 64 69 72 65 63 74 6f 72 79 3d 27 24 70 77 64 27  directory='$pwd'
9c50: 3b 22 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74  ;".} {0 {}}.do_t
9c60: 65 73 74 20 70 72 61 67 6d 61 2d 32 30 2e 33 20  est pragma-20.3 
9c70: 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 50 52  {.  catchsql {PR
9c80: 41 47 4d 41 20 64 61 74 61 5f 73 74 6f 72 65 5f  AGMA data_store_
9c90: 64 69 72 65 63 74 6f 72 79 7d 0a 7d 20 5b 6c 69  directory}.} [li
9ca0: 73 74 20 30 20 5b 6c 69 73 74 20 5b 66 69 6c 65  st 0 [list [file
9cb0: 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 67 65 74   nativename [get
9cc0: 5f 70 77 64 5d 5d 5d 5d 0a 64 6f 5f 74 65 73 74  _pwd]]]].do_test
9cd0: 20 70 72 61 67 6d 61 2d 32 30 2e 34 20 7b 0a 20   pragma-20.4 {. 
9ce0: 20 73 65 74 20 70 77 64 20 5b 73 74 72 69 6e 67   set pwd [string
9cf0: 20 6d 61 70 20 7b 27 20 27 27 7d 20 5b 66 69 6c   map {' ''} [fil
9d00: 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5c 0a 20  e nativename \. 
9d10: 20 20 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67     [file join [g
9d20: 65 74 5f 70 77 64 5d 20 64 61 74 61 5f 64 69 72  et_pwd] data_dir
9d30: 5d 5d 5d 0a 20 20 63 61 74 63 68 73 71 6c 20 22  ]]].  catchsql "
9d40: 50 52 41 47 4d 41 20 64 61 74 61 5f 73 74 6f 72  PRAGMA data_stor
9d50: 65 5f 64 69 72 65 63 74 6f 72 79 3d 27 24 70 77  e_directory='$pw
9d60: 64 27 3b 22 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f  d';".} {0 {}}.do
9d70: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 32 30 2e  _test pragma-20.
9d80: 35 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 64 62  5 {.  sqlite3 db
9d90: 32 20 74 65 73 74 32 2e 64 62 0a 20 20 63 61 74  2 test2.db.  cat
9da0: 63 68 73 71 6c 20 22 50 52 41 47 4d 41 20 64 61  chsql "PRAGMA da
9db0: 74 61 62 61 73 65 5f 6c 69 73 74 3b 22 20 64 62  tabase_list;" db
9dc0: 32 0a 7d 20 5b 6c 69 73 74 20 30 20 5b 6c 69 73  2.} [list 0 [lis
9dd0: 74 20 30 20 6d 61 69 6e 20 5b 66 69 6c 65 20 6e  t 0 main [file n
9de0: 61 74 69 76 65 6e 61 6d 65 20 5c 0a 20 20 20 20  ativename \.    
9df0: 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 5f  [file join [get_
9e00: 70 77 64 5d 20 64 61 74 61 5f 64 69 72 20 74 65  pwd] data_dir te
9e10: 73 74 32 2e 64 62 5d 5d 5d 5d 0a 63 61 74 63 68  st2.db]]]].catch
9e20: 20 7b 64 62 32 20 63 6c 6f 73 65 7d 0a 64 6f 5f   {db2 close}.do_
9e30: 74 65 73 74 20 70 72 61 67 6d 61 2d 32 30 2e 36  test pragma-20.6
9e40: 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 64 62 32   {.  sqlite3 db2
9e50: 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74   [file join [get
9e60: 5f 70 77 64 5d 20 74 65 73 74 32 2e 64 62 5d 0a  _pwd] test2.db].
9e70: 20 20 63 61 74 63 68 73 71 6c 20 22 50 52 41 47    catchsql "PRAG
9e80: 4d 41 20 64 61 74 61 62 61 73 65 5f 6c 69 73 74  MA database_list
9e90: 3b 22 20 64 62 32 0a 7d 20 5b 6c 69 73 74 20 30  ;" db2.} [list 0
9ea0: 20 5b 6c 69 73 74 20 30 20 6d 61 69 6e 20 5b 66   [list 0 main [f
9eb0: 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5c  ile nativename \
9ec0: 0a 20 20 20 20 5b 66 69 6c 65 20 6a 6f 69 6e 20  .    [file join 
9ed0: 5b 67 65 74 5f 70 77 64 5d 20 74 65 73 74 32 2e  [get_pwd] test2.
9ee0: 64 62 5d 5d 5d 5d 0a 63 61 74 63 68 20 7b 64 62  db]]]].catch {db
9ef0: 32 20 63 6c 6f 73 65 7d 0a 64 6f 5f 74 65 73 74  2 close}.do_test
9f00: 20 70 72 61 67 6d 61 2d 32 30 2e 37 20 7b 0a 20   pragma-20.7 {. 
9f10: 20 63 61 74 63 68 73 71 6c 20 22 50 52 41 47 4d   catchsql "PRAGM
9f20: 41 20 64 61 74 61 5f 73 74 6f 72 65 5f 64 69 72  A data_store_dir
9f30: 65 63 74 6f 72 79 3d 27 27 3b 22 0a 7d 20 7b 30  ectory='';".} {0
9f40: 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61   {}}.do_test pra
9f50: 67 6d 61 2d 32 30 2e 38 20 7b 0a 20 20 63 61 74  gma-20.8 {.  cat
9f60: 63 68 73 71 6c 20 7b 50 52 41 47 4d 41 20 64 61  chsql {PRAGMA da
9f70: 74 61 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f  ta_store_directo
9f80: 72 79 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 0a 66 6f  ry}.} {0 {}}..fo
9f90: 72 63 65 64 65 6c 65 74 65 20 64 61 74 61 5f 64  rcedelete data_d
9fa0: 69 72 0a 7d 20 3b 23 20 65 6e 64 69 66 20 77 69  ir.} ;# endif wi
9fb0: 6e 64 6f 77 73 0a 0a 64 61 74 61 62 61 73 65 5f  ndows..database_
9fc0: 6d 61 79 5f 62 65 5f 63 6f 72 72 75 70 74 0a 0a  may_be_corrupt..
9fd0: 64 6f 5f 74 65 73 74 20 32 31 2e 31 20 7b 0a 20  do_test 21.1 {. 
9fe0: 20 23 20 43 72 65 61 74 65 20 61 20 63 6f 72 72   # Create a corr
9ff0: 75 70 74 20 64 61 74 61 62 61 73 65 20 69 6e 20  upt database in 
a000: 74 65 73 74 65 72 72 2e 64 62 2e 20 41 6e 64 20  testerr.db. And 
a010: 61 20 6e 6f 6e 2d 63 6f 72 72 75 70 74 20 61 74  a non-corrupt at
a020: 20 74 65 73 74 2e 64 62 2e 0a 20 20 23 0a 20 20   test.db..  #.  
a030: 64 62 20 63 6c 6f 73 65 0a 20 20 66 6f 72 63 65  db close.  force
a040: 64 65 6c 65 74 65 20 74 65 73 74 2e 64 62 0a 20  delete test.db. 
a050: 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74   sqlite3 db test
a060: 2e 64 62 0a 20 20 65 78 65 63 73 71 6c 20 7b 20  .db.  execsql { 
a070: 0a 20 20 20 20 50 52 41 47 4d 41 20 70 61 67 65  .    PRAGMA page
a080: 5f 73 69 7a 65 20 3d 20 31 30 32 34 3b 0a 20 20  _size = 1024;.  
a090: 20 20 50 52 41 47 4d 41 20 61 75 74 6f 5f 76 61    PRAGMA auto_va
a0a0: 63 75 75 6d 20 3d 20 30 3b 0a 20 20 20 20 43 52  cuum = 0;.    CR
a0b0: 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 61 20  EATE TABLE t1(a 
a0c0: 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 62 29 3b  PRIMARY KEY, b);
a0d0: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
a0e0: 20 74 31 20 56 41 4c 55 45 53 28 31 2c 20 31 29   t1 VALUES(1, 1)
a0f0: 3b 0a 20 20 7d 0a 20 20 66 6f 72 20 7b 73 65 74  ;.  }.  for {set
a100: 20 69 20 30 7d 20 7b 24 69 20 3c 20 31 30 7d 20   i 0} {$i < 10} 
a110: 7b 69 6e 63 72 20 69 7d 20 7b 0a 20 20 20 20 65  {incr i} {.    e
a120: 78 65 63 73 71 6c 20 7b 20 49 4e 53 45 52 54 20  xecsql { INSERT 
a130: 49 4e 54 4f 20 74 31 20 53 45 4c 45 43 54 20 61  INTO t1 SELECT a
a140: 20 2b 20 28 31 20 3c 3c 20 24 69 29 2c 20 62 20   + (1 << $i), b 
a150: 2b 20 28 31 20 3c 3c 20 24 69 29 20 46 52 4f 4d  + (1 << $i) FROM
a160: 20 74 31 20 7d 0a 20 20 7d 0a 20 20 64 62 20 63   t1 }.  }.  db c
a170: 6c 6f 73 65 0a 20 20 66 6f 72 63 65 63 6f 70 79  lose.  forcecopy
a180: 20 74 65 73 74 2e 64 62 20 74 65 73 74 65 72 72   test.db testerr
a190: 2e 64 62 0a 20 20 68 65 78 69 6f 5f 77 72 69 74  .db.  hexio_writ
a1a0: 65 20 74 65 73 74 65 72 72 2e 64 62 20 31 35 30  e testerr.db 150
a1b0: 30 30 20 5b 73 74 72 69 6e 67 20 72 65 70 65 61  00 [string repea
a1c0: 74 20 35 35 20 31 30 30 5d 0a 7d 20 7b 31 30 30  t 55 100].} {100
a1d0: 7d 0a 0a 73 65 74 20 6d 61 69 6e 65 72 72 20 7b  }..set mainerr {
a1e0: 2a 2a 2a 20 69 6e 20 64 61 74 61 62 61 73 65 20  *** in database 
a1f0: 6d 61 69 6e 20 2a 2a 2a 0a 4d 75 6c 74 69 70 6c  main ***.Multipl
a200: 65 20 75 73 65 73 20 66 6f 72 20 62 79 74 65 20  e uses for byte 
a210: 36 37 32 20 6f 66 20 70 61 67 65 20 31 35 7d 0a  672 of page 15}.
a220: 73 65 74 20 61 75 78 65 72 72 20 7b 2a 2a 2a 20  set auxerr {*** 
a230: 69 6e 20 64 61 74 61 62 61 73 65 20 61 75 78 20  in database aux 
a240: 2a 2a 2a 0a 4d 75 6c 74 69 70 6c 65 20 75 73 65  ***.Multiple use
a250: 73 20 66 6f 72 20 62 79 74 65 20 36 37 32 20 6f  s for byte 672 o
a260: 66 20 70 61 67 65 20 31 35 7d 0a 0a 73 65 74 20  f page 15}..set 
a270: 6d 61 69 6e 65 72 72 20 7b 2f 7b 5c 2a 5c 2a 5c  mainerr {/{\*\*\
a280: 2a 20 69 6e 20 64 61 74 61 62 61 73 65 20 6d 61  * in database ma
a290: 69 6e 20 5c 2a 5c 2a 5c 2a 0a 4d 75 6c 74 69 70  in \*\*\*.Multip
a2a0: 6c 65 20 75 73 65 73 20 66 6f 72 20 62 79 74 65  le uses for byte
a2b0: 20 36 37 32 20 6f 66 20 70 61 67 65 20 31 35 7d   672 of page 15}
a2c0: 2e 2a 2f 7d 0a 73 65 74 20 61 75 78 65 72 72 20  .*/}.set auxerr 
a2d0: 7b 2f 7b 5c 2a 5c 2a 5c 2a 20 69 6e 20 64 61 74  {/{\*\*\* in dat
a2e0: 61 62 61 73 65 20 61 75 78 20 5c 2a 5c 2a 5c 2a  abase aux \*\*\*
a2f0: 0a 4d 75 6c 74 69 70 6c 65 20 75 73 65 73 20 66  .Multiple uses f
a300: 6f 72 20 62 79 74 65 20 36 37 32 20 6f 66 20 70  or byte 672 of p
a310: 61 67 65 20 31 35 7d 2e 2a 2f 7d 0a 0a 64 6f 5f  age 15}.*/}..do_
a320: 74 65 73 74 20 32 32 2e 32 20 7b 0a 20 20 63 61  test 22.2 {.  ca
a330: 74 63 68 20 7b 20 64 62 20 63 6c 6f 73 65 20 7d  tch { db close }
a340: 0a 20 20 73 71 6c 69 74 65 33 20 64 62 20 74 65  .  sqlite3 db te
a350: 73 74 65 72 72 2e 64 62 0a 20 20 65 78 65 63 73  sterr.db.  execs
a360: 71 6c 20 7b 20 50 52 41 47 4d 41 20 69 6e 74 65  ql { PRAGMA inte
a370: 67 72 69 74 79 5f 63 68 65 63 6b 20 7d 0a 7d 20  grity_check }.} 
a380: 24 6d 61 69 6e 65 72 72 0a 0a 64 6f 5f 74 65 73  $mainerr..do_tes
a390: 74 20 32 32 2e 33 2e 31 20 7b 0a 20 20 63 61 74  t 22.3.1 {.  cat
a3a0: 63 68 20 7b 20 64 62 20 63 6c 6f 73 65 20 7d 0a  ch { db close }.
a3b0: 20 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73    sqlite3 db tes
a3c0: 74 2e 64 62 0a 20 20 65 78 65 63 73 71 6c 20 7b  t.db.  execsql {
a3d0: 20 0a 20 20 20 20 41 54 54 41 43 48 20 27 74 65   .    ATTACH 'te
a3e0: 73 74 65 72 72 2e 64 62 27 20 41 53 20 27 61 75  sterr.db' AS 'au
a3f0: 78 27 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 69  x';.    PRAGMA i
a400: 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 3b 0a  ntegrity_check;.
a410: 20 20 7d 0a 7d 20 24 61 75 78 65 72 72 0a 64 6f    }.} $auxerr.do
a420: 5f 74 65 73 74 20 32 32 2e 33 2e 32 20 7b 0a 20  _test 22.3.2 {. 
a430: 20 65 78 65 63 73 71 6c 20 7b 20 50 52 41 47 4d   execsql { PRAGM
a440: 41 20 6d 61 69 6e 2e 69 6e 74 65 67 72 69 74 79  A main.integrity
a450: 5f 63 68 65 63 6b 3b 20 7d 0a 7d 20 7b 6f 6b 7d  _check; }.} {ok}
a460: 0a 64 6f 5f 74 65 73 74 20 32 32 2e 33 2e 33 20  .do_test 22.3.3 
a470: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 50 52  {.  execsql { PR
a480: 41 47 4d 41 20 61 75 78 2e 69 6e 74 65 67 72 69  AGMA aux.integri
a490: 74 79 5f 63 68 65 63 6b 3b 20 7d 0a 7d 20 24 61  ty_check; }.} $a
a4a0: 75 78 65 72 72 0a 0a 64 6f 5f 74 65 73 74 20 32  uxerr..do_test 2
a4b0: 32 2e 34 2e 31 20 7b 0a 20 20 63 61 74 63 68 20  2.4.1 {.  catch 
a4c0: 7b 20 64 62 20 63 6c 6f 73 65 20 7d 0a 20 20 73  { db close }.  s
a4d0: 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 65 72  qlite3 db tester
a4e0: 72 2e 64 62 0a 20 20 65 78 65 63 73 71 6c 20 7b  r.db.  execsql {
a4f0: 20 0a 20 20 20 20 41 54 54 41 43 48 20 27 74 65   .    ATTACH 'te
a500: 73 74 2e 64 62 27 20 41 53 20 27 61 75 78 27 3b  st.db' AS 'aux';
a510: 0a 20 20 20 20 50 52 41 47 4d 41 20 69 6e 74 65  .    PRAGMA inte
a520: 67 72 69 74 79 5f 63 68 65 63 6b 3b 0a 20 20 7d  grity_check;.  }
a530: 0a 7d 20 24 6d 61 69 6e 65 72 72 0a 64 6f 5f 74  .} $mainerr.do_t
a540: 65 73 74 20 32 32 2e 34 2e 32 20 7b 0a 20 20 65  est 22.4.2 {.  e
a550: 78 65 63 73 71 6c 20 7b 20 50 52 41 47 4d 41 20  xecsql { PRAGMA 
a560: 6d 61 69 6e 2e 69 6e 74 65 67 72 69 74 79 5f 63  main.integrity_c
a570: 68 65 63 6b 3b 20 7d 0a 7d 20 24 6d 61 69 6e 65  heck; }.} $maine
a580: 72 72 0a 64 6f 5f 74 65 73 74 20 32 32 2e 34 2e  rr.do_test 22.4.
a590: 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 20  3 {.  execsql { 
a5a0: 50 52 41 47 4d 41 20 61 75 78 2e 69 6e 74 65 67  PRAGMA aux.integ
a5b0: 72 69 74 79 5f 63 68 65 63 6b 3b 20 7d 0a 7d 20  rity_check; }.} 
a5c0: 7b 6f 6b 7d 0a 0a 64 62 20 63 6c 6f 73 65 0a 66  {ok}..db close.f
a5d0: 6f 72 63 65 64 65 6c 65 74 65 20 74 65 73 74 2e  orcedelete test.
a5e0: 64 62 20 74 65 73 74 2e 64 62 2d 77 61 6c 20 74  db test.db-wal t
a5f0: 65 73 74 2e 64 62 2d 6a 6f 75 72 6e 61 6c 0a 73  est.db-journal.s
a600: 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64  qlite3 db test.d
a610: 62 0a 73 71 6c 69 74 65 33 20 64 62 32 20 74 65  b.sqlite3 db2 te
a620: 73 74 2e 64 62 0a 64 6f 5f 74 65 73 74 20 32 33  st.db.do_test 23
a630: 2e 31 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b  .1 {.  db eval {
a640: 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  .    CREATE TABL
a650: 45 20 74 31 28 61 20 49 4e 54 45 47 45 52 20 50  E t1(a INTEGER P
a660: 52 49 4d 41 52 59 20 4b 45 59 2c 62 2c 63 2c 64  RIMARY KEY,b,c,d
a670: 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20 49 4e  );.    CREATE IN
a680: 44 45 58 20 69 31 20 4f 4e 20 74 31 28 62 2c 63  DEX i1 ON t1(b,c
a690: 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20 49 4e  );.    CREATE IN
a6a0: 44 45 58 20 69 32 20 4f 4e 20 74 31 28 63 2c 64  DEX i2 ON t1(c,d
a6b0: 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20 49 4e  );.    CREATE IN
a6c0: 44 45 58 20 69 32 78 20 4f 4e 20 74 31 28 64 20  DEX i2x ON t1(d 
a6d0: 43 4f 4c 4c 41 54 45 20 6e 6f 63 61 73 65 2c 20  COLLATE nocase, 
a6e0: 63 20 44 45 53 43 29 3b 0a 20 20 20 20 43 52 45  c DESC);.    CRE
a6f0: 41 54 45 20 54 41 42 4c 45 20 74 32 28 78 20 49  ATE TABLE t2(x I
a700: 4e 54 45 47 45 52 20 52 45 46 45 52 45 4e 43 45  NTEGER REFERENCE
a710: 53 20 74 31 29 3b 0a 20 20 7d 0a 20 20 64 62 32  S t1);.  }.  db2
a720: 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 6e 61   eval {SELECT na
a730: 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d  me FROM sqlite_m
a740: 61 73 74 65 72 7d 0a 7d 20 7b 74 31 20 69 31 20  aster}.} {t1 i1 
a750: 69 32 20 69 32 78 20 74 32 7d 0a 64 6f 5f 74 65  i2 i2x t2}.do_te
a760: 73 74 20 32 33 2e 32 61 20 7b 0a 20 20 64 62 20  st 23.2a {.  db 
a770: 65 76 61 6c 20 7b 0a 20 20 20 20 44 52 4f 50 20  eval {.    DROP 
a780: 49 4e 44 45 58 20 69 32 3b 0a 20 20 20 20 43 52  INDEX i2;.    CR
a790: 45 41 54 45 20 49 4e 44 45 58 20 69 32 20 4f 4e  EATE INDEX i2 ON
a7a0: 20 74 31 28 63 2c 64 2c 62 29 3b 0a 20 20 7d 0a   t1(c,d,b);.  }.
a7b0: 20 20 63 61 70 74 75 72 65 5f 70 72 61 67 6d 61    capture_pragma
a7c0: 20 64 62 32 20 6f 75 74 20 7b 50 52 41 47 4d 41   db2 out {PRAGMA
a7d0: 20 69 6e 64 65 78 5f 69 6e 66 6f 28 69 32 29 7d   index_info(i2)}
a7e0: 0a 20 20 64 62 32 20 65 76 61 6c 20 7b 53 45 4c  .  db2 eval {SEL
a7f0: 45 43 54 20 63 69 64 2c 20 6e 61 6d 65 2c 20 27  ECT cid, name, '
a800: 7c 27 20 46 52 4f 4d 20 6f 75 74 20 4f 52 44 45  |' FROM out ORDE
a810: 52 20 42 59 20 73 65 71 6e 6f 7d 0a 7d 20 7b 32  R BY seqno}.} {2
a820: 20 63 20 7c 20 33 20 64 20 7c 20 31 20 62 20 7c   c | 3 d | 1 b |
a830: 7d 0a 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46  }..# EVIDENCE-OF
a840: 3a 20 52 2d 34 34 38 37 34 2d 34 36 33 32 35 20  : R-44874-46325 
a850: 50 52 41 47 4d 41 20 64 61 74 61 62 61 73 65 2e  PRAGMA database.
a860: 69 6e 64 65 78 5f 78 69 6e 66 6f 28 69 6e 64 65  index_xinfo(inde
a870: 78 2d 6e 61 6d 65 29 3b 0a 23 20 54 68 69 73 20  x-name);.# This 
a880: 70 72 61 67 6d 61 20 72 65 74 75 72 6e 73 20 69  pragma returns i
a890: 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
a8a0: 20 65 76 65 72 79 20 63 6f 6c 75 6d 6e 20 69 6e   every column in
a8b0: 20 61 6e 20 69 6e 64 65 78 2e 0a 23 0a 23 20 45   an index..#.# E
a8c0: 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 34 35  VIDENCE-OF: R-45
a8d0: 39 37 30 2d 33 35 36 31 38 20 55 6e 6c 69 6b 65  970-35618 Unlike
a8e0: 20 74 68 69 73 20 69 6e 64 65 78 5f 69 6e 66 6f   this index_info
a8f0: 20 70 72 61 67 6d 61 2c 20 74 68 69 73 20 70 72   pragma, this pr
a900: 61 67 6d 61 0a 23 20 72 65 74 75 72 6e 73 20 69  agma.# returns i
a910: 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
a920: 20 65 76 65 72 79 20 63 6f 6c 75 6d 6e 20 69 6e   every column in
a930: 20 74 68 65 20 69 6e 64 65 78 2c 20 6e 6f 74 20   the index, not 
a940: 6a 75 73 74 20 74 68 65 20 6b 65 79 0a 23 20 63  just the key.# c
a950: 6f 6c 75 6d 6e 73 2e 0a 23 0a 64 6f 5f 74 65 73  olumns..#.do_tes
a960: 74 20 32 33 2e 32 62 20 7b 0a 20 20 63 61 70 74  t 23.2b {.  capt
a970: 75 72 65 5f 70 72 61 67 6d 61 20 64 62 32 20 6f  ure_pragma db2 o
a980: 75 74 20 7b 50 52 41 47 4d 41 20 69 6e 64 65 78  ut {PRAGMA index
a990: 5f 78 69 6e 66 6f 28 69 32 29 7d 0a 20 20 64 62  _xinfo(i2)}.  db
a9a0: 32 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 63  2 eval {SELECT c
a9b0: 69 64 2c 20 6e 61 6d 65 2c 20 22 64 65 73 63 22  id, name, "desc"
a9c0: 2c 20 63 6f 6c 6c 2c 20 22 6b 65 79 22 2c 20 27  , coll, "key", '
a9d0: 7c 27 20 46 52 4f 4d 20 6f 75 74 20 4f 52 44 45  |' FROM out ORDE
a9e0: 52 20 42 59 20 73 65 71 6e 6f 7d 0a 7d 20 7b 32  R BY seqno}.} {2
a9f0: 20 63 20 30 20 42 49 4e 41 52 59 20 31 20 7c 20   c 0 BINARY 1 | 
aa00: 33 20 64 20 30 20 42 49 4e 41 52 59 20 31 20 7c  3 d 0 BINARY 1 |
aa10: 20 31 20 62 20 30 20 42 49 4e 41 52 59 20 31 20   1 b 0 BINARY 1 
aa20: 7c 20 2d 31 20 7b 7d 20 30 20 42 49 4e 41 52 59  | -1 {} 0 BINARY
aa30: 20 30 20 7c 7d 0a 0a 23 20 28 54 68 65 20 66 69   0 |}..# (The fi
aa40: 72 73 74 20 63 6f 6c 75 6d 6e 20 6f 66 20 6f 75  rst column of ou
aa50: 74 70 75 74 20 66 72 6f 6d 20 50 52 41 47 4d 41  tput from PRAGMA
aa60: 20 69 6e 64 65 78 5f 78 69 6e 66 6f 20 69 73 2e   index_xinfo is.
aa70: 2e 2e 29 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f  ..).# EVIDENCE-O
aa80: 46 3a 20 52 2d 30 30 31 39 37 2d 31 34 32 37 39  F: R-00197-14279
aa90: 20 54 68 65 20 72 61 6e 6b 20 6f 66 20 74 68 65   The rank of the
aaa0: 20 63 6f 6c 75 6d 6e 20 77 69 74 68 69 6e 20 74   column within t
aab0: 68 65 20 69 6e 64 65 78 2e 20 28 30 0a 23 20 6d  he index. (0.# m
aac0: 65 61 6e 73 20 6c 65 66 74 2d 6d 6f 73 74 2e 20  eans left-most. 
aad0: 4b 65 79 20 63 6f 6c 75 6d 6e 73 20 63 6f 6d 65  Key columns come
aae0: 20 62 65 66 6f 72 65 20 61 75 78 69 6c 69 61 72   before auxiliar
aaf0: 79 20 63 6f 6c 75 6d 6e 73 2e 29 0a 23 0a 23 20  y columns.).#.# 
ab00: 28 54 68 65 20 73 65 63 6f 6e 64 20 63 6f 6c 75  (The second colu
ab10: 6d 6e 20 6f 66 20 6f 75 74 70 75 74 20 66 72 6f  mn of output fro
ab20: 6d 20 50 52 41 47 4d 41 20 69 6e 64 65 78 5f 78  m PRAGMA index_x
ab30: 69 6e 66 6f 20 69 73 2e 2e 2e 29 0a 23 20 45 56  info is...).# EV
ab40: 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 34 30 38  IDENCE-OF: R-408
ab50: 38 39 2d 30 36 38 33 38 20 54 68 65 20 72 61 6e  89-06838 The ran
ab60: 6b 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20  k of the column 
ab70: 77 69 74 68 69 6e 20 74 68 65 20 74 61 62 6c 65  within the table
ab80: 0a 23 20 62 65 69 6e 67 20 69 6e 64 65 78 65 64  .# being indexed
ab90: 2c 20 6f 72 20 2d 31 20 69 66 20 74 68 65 20 69  , or -1 if the i
aba0: 6e 64 65 78 2d 63 6f 6c 75 6d 6e 20 69 73 20 74  ndex-column is t
abb0: 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20  he rowid of the 
abc0: 74 61 62 6c 65 0a 23 20 62 65 69 6e 67 20 69 6e  table.# being in
abd0: 64 65 78 65 64 2e 0a 23 0a 23 20 28 54 68 65 20  dexed..#.# (The 
abe0: 74 68 69 72 64 20 63 6f 6c 75 6d 6e 20 6f 66 20  third column of 
abf0: 6f 75 74 70 75 74 20 66 72 6f 6d 20 50 52 41 47  output from PRAG
ac00: 4d 41 20 69 6e 64 65 78 5f 78 69 6e 66 6f 20 69  MA index_xinfo i
ac10: 73 2e 2e 2e 29 0a 23 20 45 56 49 44 45 4e 43 45  s...).# EVIDENCE
ac20: 2d 4f 46 3a 20 52 2d 32 32 37 35 31 2d 32 38 39  -OF: R-22751-289
ac30: 30 31 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74  01 The name of t
ac40: 68 65 20 63 6f 6c 75 6d 6e 20 62 65 69 6e 67 20  he column being 
ac50: 69 6e 64 65 78 65 64 2c 20 6f 72 0a 23 20 4e 55  indexed, or.# NU
ac60: 4c 4c 20 69 66 20 74 68 65 20 69 6e 64 65 78 2d  LL if the index-
ac70: 63 6f 6c 75 6d 6e 20 69 73 20 74 68 65 20 72 6f  column is the ro
ac80: 77 69 64 20 6f 66 20 74 68 65 20 74 61 62 6c 65  wid of the table
ac90: 20 62 65 69 6e 67 20 69 6e 64 65 78 65 64 2e 0a   being indexed..
aca0: 23 0a 23 20 28 54 68 65 20 66 6f 75 72 74 68 20  #.# (The fourth 
acb0: 63 6f 6c 75 6d 6e 20 6f 66 20 6f 75 74 70 75 74  column of output
acc0: 20 66 72 6f 6d 20 50 52 41 47 4d 41 20 69 6e 64   from PRAGMA ind
acd0: 65 78 5f 78 69 6e 66 6f 20 69 73 2e 2e 2e 29 0a  ex_xinfo is...).
ace0: 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52  # EVIDENCE-OF: R
acf0: 2d 31 31 38 34 37 2d 30 39 31 37 39 20 31 20 69  -11847-09179 1 i
ad00: 66 20 74 68 65 20 69 6e 64 65 78 2d 63 6f 6c 75  f the index-colu
ad10: 6d 6e 20 69 73 20 73 6f 72 74 65 64 20 69 6e 20  mn is sorted in 
ad20: 72 65 76 65 72 73 65 0a 23 20 28 44 45 53 43 29  reverse.# (DESC)
ad30: 20 6f 72 64 65 72 20 62 79 20 74 68 65 20 69 6e   order by the in
ad40: 64 65 78 20 61 6e 64 20 30 20 6f 74 68 65 72 77  dex and 0 otherw
ad50: 69 73 65 2e 0a 23 0a 23 20 28 54 68 65 20 66 69  ise..#.# (The fi
ad60: 66 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 6f 75  fth column of ou
ad70: 74 70 75 74 20 66 72 6f 6d 20 50 52 41 47 4d 41  tput from PRAGMA
ad80: 20 69 6e 64 65 78 5f 78 69 6e 66 6f 20 69 73 2e   index_xinfo is.
ad90: 2e 2e 29 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f  ..).# EVIDENCE-O
ada0: 46 3a 20 52 2d 31 35 33 31 33 2d 31 39 35 34 30  F: R-15313-19540
adb0: 20 54 68 65 20 6e 61 6d 65 20 66 6f 72 20 74 68   The name for th
adc0: 65 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  e collating sequ
add0: 65 6e 63 65 20 75 73 65 64 20 74 6f 0a 23 20 63  ence used to.# c
ade0: 6f 6d 70 61 72 65 20 76 61 6c 75 65 73 20 69 6e  ompare values in
adf0: 20 74 68 65 20 69 6e 64 65 78 2d 63 6f 6c 75 6d   the index-colum
ae00: 6e 2e 0a 23 0a 23 20 28 54 68 65 20 73 69 78 74  n..#.# (The sixt
ae10: 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 6f 75 74 70  h column of outp
ae20: 75 74 20 66 72 6f 6d 20 50 52 41 47 4d 41 20 69  ut from PRAGMA i
ae30: 6e 64 65 78 5f 78 69 6e 66 6f 20 69 73 2e 2e 2e  ndex_xinfo is...
ae40: 29 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a  ).# EVIDENCE-OF:
ae50: 20 52 2d 31 34 33 31 30 2d 36 34 35 35 33 20 31   R-14310-64553 1
ae60: 20 69 66 20 74 68 65 20 69 6e 64 65 78 2d 63 6f   if the index-co
ae70: 6c 75 6d 6e 20 69 73 20 61 20 6b 65 79 20 63 6f  lumn is a key co
ae80: 6c 75 6d 6e 20 61 6e 64 20 30 0a 23 20 69 66 20  lumn and 0.# if 
ae90: 74 68 65 20 69 6e 64 65 78 2d 63 6f 6c 75 6d 6e  the index-column
aea0: 20 69 73 20 61 6e 20 61 75 78 69 6c 69 61 72 79   is an auxiliary
aeb0: 20 63 6f 6c 75 6d 6e 2e 0a 23 0a 64 6f 5f 74 65   column..#.do_te
aec0: 73 74 20 32 33 2e 32 63 20 7b 0a 20 20 64 62 32  st 23.2c {.  db2
aed0: 20 65 76 61 6c 20 7b 50 52 41 47 4d 41 20 69 6e   eval {PRAGMA in
aee0: 64 65 78 5f 78 69 6e 66 6f 28 69 32 29 7d 0a 7d  dex_xinfo(i2)}.}
aef0: 20 7b 30 20 32 20 63 20 30 20 42 49 4e 41 52 59   {0 2 c 0 BINARY
af00: 20 31 20 31 20 33 20 64 20 30 20 42 49 4e 41 52   1 1 3 d 0 BINAR
af10: 59 20 31 20 32 20 31 20 62 20 30 20 42 49 4e 41  Y 1 2 1 b 0 BINA
af20: 52 59 20 31 20 33 20 2d 31 20 7b 7d 20 30 20 42  RY 1 3 -1 {} 0 B
af30: 49 4e 41 52 59 20 30 7d 0a 64 6f 5f 74 65 73 74  INARY 0}.do_test
af40: 20 32 33 2e 32 64 20 7b 0a 20 20 64 62 32 20 65   23.2d {.  db2 e
af50: 76 61 6c 20 7b 50 52 41 47 4d 41 20 69 6e 64 65  val {PRAGMA inde
af60: 78 5f 78 69 6e 66 6f 28 69 32 78 29 7d 0a 7d 20  x_xinfo(i2x)}.} 
af70: 7b 30 20 33 20 64 20 30 20 6e 6f 63 61 73 65 20  {0 3 d 0 nocase 
af80: 31 20 31 20 32 20 63 20 31 20 42 49 4e 41 52 59  1 1 2 c 1 BINARY
af90: 20 31 20 32 20 2d 31 20 7b 7d 20 30 20 42 49 4e   1 2 -1 {} 0 BIN
afa0: 41 52 59 20 30 7d 0a 0a 23 20 45 56 49 44 45 4e  ARY 0}..# EVIDEN
afb0: 43 45 2d 4f 46 3a 20 52 2d 36 33 35 30 30 2d 33  CE-OF: R-63500-3
afc0: 32 30 32 34 20 50 52 41 47 4d 41 20 64 61 74 61  2024 PRAGMA data
afd0: 62 61 73 65 2e 69 6e 64 65 78 5f 6c 69 73 74 28  base.index_list(
afe0: 74 61 62 6c 65 2d 6e 61 6d 65 29 3b 0a 23 20 54  table-name);.# T
aff0: 68 69 73 20 70 72 61 67 6d 61 20 72 65 74 75 72  his pragma retur
b000: 6e 73 20 6f 6e 65 20 72 6f 77 20 66 6f 72 20 65  ns one row for e
b010: 61 63 68 20 69 6e 64 65 78 20 61 73 73 6f 63 69  ach index associ
b020: 61 74 65 64 20 77 69 74 68 20 74 68 65 20 67 69  ated with the gi
b030: 76 65 6e 0a 23 20 74 61 62 6c 65 2e 0a 23 0a 23  ven.# table..#.#
b040: 20 28 54 68 65 20 66 69 72 73 74 20 63 6f 6c 75   (The first colu
b050: 6d 6e 20 6f 66 20 6f 75 74 70 75 74 20 66 72 6f  mn of output fro
b060: 6d 20 50 52 41 47 4d 41 20 69 6e 64 65 78 5f 6c  m PRAGMA index_l
b070: 69 73 74 20 69 73 2e 2e 2e 29 0a 23 20 45 56 49  ist is...).# EVI
b080: 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 30 32 37 35  DENCE-OF: R-0275
b090: 33 2d 32 34 37 34 38 20 41 20 73 65 71 75 65 6e  3-24748 A sequen
b0a0: 63 65 20 6e 75 6d 62 65 72 20 61 73 73 69 67 6e  ce number assign
b0b0: 65 64 20 74 6f 20 65 61 63 68 20 69 6e 64 65 78  ed to each index
b0c0: 0a 23 20 66 6f 72 20 69 6e 74 65 72 6e 61 6c 20  .# for internal 
b0d0: 74 72 61 63 6b 69 6e 67 20 70 75 72 70 6f 73 65  tracking purpose
b0e0: 73 2e 0a 23 0a 23 20 28 54 68 65 20 73 65 63 6f  s..#.# (The seco
b0f0: 6e 64 20 63 6f 6c 75 6d 6e 20 6f 66 20 6f 75 74  nd column of out
b100: 70 75 74 20 66 72 6f 6d 20 50 52 41 47 4d 41 20  put from PRAGMA 
b110: 69 6e 64 65 78 5f 6c 69 73 74 20 69 73 2e 2e 2e  index_list is...
b120: 29 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a  ).# EVIDENCE-OF:
b130: 20 52 2d 33 35 34 39 36 2d 30 33 36 33 35 20 54   R-35496-03635 T
b140: 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 69  he name of the i
b150: 6e 64 65 78 2e 0a 23 0a 23 20 28 54 68 65 20 74  ndex..#.# (The t
b160: 68 69 72 64 20 63 6f 6c 75 6d 6e 20 6f 66 20 6f  hird column of o
b170: 75 74 70 75 74 20 66 72 6f 6d 20 50 52 41 47 4d  utput from PRAGM
b180: 41 20 69 6e 64 65 78 5f 6c 69 73 74 20 69 73 2e  A index_list is.
b190: 2e 2e 29 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f  ..).# EVIDENCE-O
b1a0: 46 3a 20 52 2d 35 37 33 30 31 2d 36 34 35 30 36  F: R-57301-64506
b1b0: 20 22 31 22 20 69 66 20 74 68 65 20 69 6e 64 65   "1" if the inde
b1c0: 78 20 69 73 20 55 4e 49 51 55 45 20 61 6e 64 20  x is UNIQUE and 
b1d0: 22 30 22 20 69 66 20 6e 6f 74 2e 0a 23 0a 23 20  "0" if not..#.# 
b1e0: 28 54 68 65 20 66 6f 75 72 74 68 20 63 6f 6c 75  (The fourth colu
b1f0: 6d 6e 20 6f 66 20 6f 75 74 70 75 74 20 66 72 6f  mn of output fro
b200: 6d 20 50 52 41 47 4d 41 20 69 6e 64 65 78 5f 6c  m PRAGMA index_l
b210: 69 73 74 20 69 73 2e 2e 2e 29 0a 23 20 45 56 49  ist is...).# EVI
b220: 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 33 36 36 30  DENCE-OF: R-3660
b230: 39 2d 33 39 35 35 34 20 22 63 22 20 69 66 20 74  9-39554 "c" if t
b240: 68 65 20 69 6e 64 65 78 20 77 61 73 20 63 72 65  he index was cre
b250: 61 74 65 64 20 62 79 20 61 20 43 52 45 41 54 45  ated by a CREATE
b260: 0a 23 20 49 4e 44 45 58 20 73 74 61 74 65 6d 65  .# INDEX stateme
b270: 6e 74 2c 20 22 75 22 20 69 66 20 74 68 65 20 69  nt, "u" if the i
b280: 6e 64 65 78 20 77 61 73 20 63 72 65 61 74 65 64  ndex was created
b290: 20 62 79 20 61 20 55 4e 49 51 55 45 20 63 6f 6e   by a UNIQUE con
b2a0: 73 74 72 61 69 6e 74 2c 0a 23 20 6f 72 20 22 70  straint,.# or "p
b2b0: 6b 22 20 69 66 20 74 68 65 20 69 6e 64 65 78 20  k" if the index 
b2c0: 77 61 73 20 63 72 65 61 74 65 64 20 62 79 20 61  was created by a
b2d0: 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63 6f 6e   PRIMARY KEY con
b2e0: 73 74 72 61 69 6e 74 2e 0a 23 0a 64 6f 5f 74 65  straint..#.do_te
b2f0: 73 74 20 32 33 2e 33 20 7b 0a 20 20 64 62 20 65  st 23.3 {.  db e
b300: 76 61 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45  val {.    CREATE
b310: 20 49 4e 44 45 58 20 69 33 20 4f 4e 20 74 31 28   INDEX i3 ON t1(
b320: 64 2c 62 2c 63 29 3b 0a 20 20 7d 0a 20 20 63 61  d,b,c);.  }.  ca
b330: 70 74 75 72 65 5f 70 72 61 67 6d 61 20 64 62 32  pture_pragma db2
b340: 20 6f 75 74 20 7b 50 52 41 47 4d 41 20 69 6e 64   out {PRAGMA ind
b350: 65 78 5f 6c 69 73 74 28 74 31 29 7d 0a 20 20 64  ex_list(t1)}.  d
b360: 62 32 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20  b2 eval {SELECT 
b370: 73 65 71 2c 20 6e 61 6d 65 2c 20 22 75 6e 69 71  seq, name, "uniq
b380: 75 65 22 2c 20 6f 72 69 67 69 6e 2c 20 27 7c 27  ue", origin, '|'
b390: 20 46 52 4f 4d 20 6f 75 74 20 4f 52 44 45 52 20   FROM out ORDER 
b3a0: 42 59 20 73 65 71 7d 0a 7d 20 7b 30 20 69 33 20  BY seq}.} {0 i3 
b3b0: 30 20 63 20 7c 20 31 20 69 32 20 30 20 63 20 7c  0 c | 1 i2 0 c |
b3c0: 20 32 20 69 32 78 20 30 20 63 20 7c 20 33 20 69   2 i2x 0 c | 3 i
b3d0: 31 20 30 20 63 20 7c 7d 0a 64 6f 5f 74 65 73 74  1 0 c |}.do_test
b3e0: 20 32 33 2e 34 20 7b 0a 20 20 64 62 20 65 76 61   23.4 {.  db eva
b3f0: 6c 20 7b 0a 20 20 20 20 41 4c 54 45 52 20 54 41  l {.    ALTER TA
b400: 42 4c 45 20 74 31 20 41 44 44 20 43 4f 4c 55 4d  BLE t1 ADD COLUM
b410: 4e 20 65 3b 0a 20 20 7d 0a 20 20 64 62 32 20 65  N e;.  }.  db2 e
b420: 76 61 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41  val {.    PRAGMA
b430: 20 74 61 62 6c 65 5f 69 6e 66 6f 28 74 31 29 3b   table_info(t1);
b440: 0a 20 20 7d 0a 7d 20 7b 2f 34 20 65 20 7b 7d 20  .  }.} {/4 e {} 
b450: 30 20 7b 7d 20 30 2f 7d 0a 64 6f 5f 74 65 73 74  0 {} 0/}.do_test
b460: 20 32 33 2e 35 20 7b 0a 20 20 64 62 20 65 76 61   23.5 {.  db eva
b470: 6c 20 7b 0a 20 20 20 20 44 52 4f 50 20 54 41 42  l {.    DROP TAB
b480: 4c 45 20 74 32 3b 0a 20 20 20 20 43 52 45 41 54  LE t2;.    CREAT
b490: 45 20 54 41 42 4c 45 20 74 32 28 78 2c 20 79 20  E TABLE t2(x, y 
b4a0: 49 4e 54 45 47 45 52 20 52 45 46 45 52 45 4e 43  INTEGER REFERENC
b4b0: 45 53 20 74 31 29 3b 0a 20 20 7d 0a 20 20 64 62  ES t1);.  }.  db
b4c0: 32 20 65 76 61 6c 20 7b 0a 20 20 20 20 50 52 41  2 eval {.    PRA
b4d0: 47 4d 41 20 66 6f 72 65 69 67 6e 5f 6b 65 79 5f  GMA foreign_key_
b4e0: 6c 69 73 74 28 74 32 29 3b 0a 20 20 7d 0a 7d 20  list(t2);.  }.} 
b4f0: 7b 30 20 30 20 74 31 20 79 20 7b 7d 20 7b 4e 4f  {0 0 t1 y {} {NO
b500: 20 41 43 54 49 4f 4e 7d 20 7b 4e 4f 20 41 43 54   ACTION} {NO ACT
b510: 49 4f 4e 7d 20 4e 4f 4e 45 7d 0a 0a 64 61 74 61  ION} NONE}..data
b520: 62 61 73 65 5f 6e 65 76 65 72 5f 63 6f 72 72 75  base_never_corru
b530: 70 74 0a 66 69 6e 69 73 68 5f 74 65 73 74 0a     pt.finish_test.