/ Hex Artifact Content
Login

Artifact 64f11ec7f4100e873c67e888a56c33d395cb75d6:


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 64 6f 5f 74 65 73 74 20 70  1 1 b}.do_test p
4760: 72 61 67 6d 61 2d 36 2e 35 2e 32 20 7b 0a 20 20  ragma-6.5.2 {.  
4770: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 70 72  execsql {.    pr
4780: 61 67 6d 61 20 69 6e 64 65 78 5f 69 6e 66 6f 28  agma index_info(
4790: 74 33 69 31 5f 62 6f 67 75 73 29 3b 0a 20 20 7d  t3i1_bogus);.  }
47a0: 0a 7d 20 7b 7d 0a 0a 69 66 63 61 70 61 62 6c 65  .} {}..ifcapable
47b0: 20 74 65 6d 70 64 62 20 7b 0a 20 20 23 20 54 65   tempdb {.  # Te
47c0: 73 74 20 66 6f 72 20 74 69 63 6b 65 74 20 23 33  st for ticket #3
47d0: 33 32 30 2e 20 57 68 65 6e 20 61 20 74 65 6d 70  320. When a temp
47e0: 20 74 61 62 6c 65 20 6f 66 20 74 68 65 20 73 61   table of the sa
47f0: 6d 65 20 6e 61 6d 65 20 65 78 69 73 74 73 2c 20  me name exists, 
4800: 6d 61 6b 65 0a 20 20 23 20 73 75 72 65 20 74 68  make.  # sure th
4810: 65 20 73 63 68 65 6d 61 20 6f 66 20 74 68 65 20  e schema of the 
4820: 6d 61 69 6e 20 74 61 62 6c 65 20 63 61 6e 20 73  main table can s
4830: 74 69 6c 6c 20 62 65 20 71 75 65 72 69 65 64 20  till be queried 
4840: 75 73 69 6e 67 20 0a 20 20 23 20 22 70 72 61 67  using .  # "prag
4850: 6d 61 20 74 61 62 6c 65 5f 69 6e 66 6f 22 3a 0a  ma table_info":.
4860: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
4870: 2d 36 2e 36 2e 31 20 7b 0a 20 20 20 20 65 78 65  -6.6.1 {.    exe
4880: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 43 52 45  csql {.      CRE
4890: 41 54 45 20 54 41 42 4c 45 20 74 72 69 61 6c 28  ATE TABLE trial(
48a0: 63 6f 6c 5f 6d 61 69 6e 29 3b 0a 20 20 20 20 20  col_main);.     
48b0: 20 43 52 45 41 54 45 20 54 45 4d 50 20 54 41 42   CREATE TEMP TAB
48c0: 4c 45 20 74 72 69 61 6c 28 63 6f 6c 5f 74 65 6d  LE trial(col_tem
48d0: 70 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 7d  p);.    }.  } {}
48e0: 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .  do_test pragm
48f0: 61 2d 36 2e 36 2e 32 20 7b 0a 20 20 20 20 65 78  a-6.6.2 {.    ex
4900: 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52  ecsql {.      PR
4910: 41 47 4d 41 20 74 61 62 6c 65 5f 69 6e 66 6f 28  AGMA table_info(
4920: 74 72 69 61 6c 29 3b 0a 20 20 20 20 7d 0a 20 20  trial);.    }.  
4930: 7d 20 7b 30 20 63 6f 6c 5f 74 65 6d 70 20 7b 7d  } {0 col_temp {}
4940: 20 30 20 7b 7d 20 30 7d 0a 20 20 64 6f 5f 74 65   0 {} 0}.  do_te
4950: 73 74 20 70 72 61 67 6d 61 2d 36 2e 36 2e 33 20  st pragma-6.6.3 
4960: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a  {.    execsql {.
4970: 20 20 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d        PRAGMA tem
4980: 70 2e 74 61 62 6c 65 5f 69 6e 66 6f 28 74 72 69  p.table_info(tri
4990: 61 6c 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b  al);.    }.  } {
49a0: 30 20 63 6f 6c 5f 74 65 6d 70 20 7b 7d 20 30 20  0 col_temp {} 0 
49b0: 7b 7d 20 30 7d 0a 20 20 64 6f 5f 74 65 73 74 20  {} 0}.  do_test 
49c0: 70 72 61 67 6d 61 2d 36 2e 36 2e 34 20 7b 0a 20  pragma-6.6.4 {. 
49d0: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
49e0: 20 20 20 50 52 41 47 4d 41 20 6d 61 69 6e 2e 74     PRAGMA main.t
49f0: 61 62 6c 65 5f 69 6e 66 6f 28 74 72 69 61 6c 29  able_info(trial)
4a00: 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 30 20 63  ;.    }.  } {0 c
4a10: 6f 6c 5f 6d 61 69 6e 20 7b 7d 20 30 20 7b 7d 20  ol_main {} 0 {} 
4a20: 30 7d 0a 7d 0a 0a 64 6f 5f 74 65 73 74 20 70 72  0}.}..do_test pr
4a30: 61 67 6d 61 2d 36 2e 37 20 7b 0a 20 20 65 78 65  agma-6.7 {.  exe
4a40: 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54  csql {.    CREAT
4a50: 45 20 54 41 42 4c 45 20 74 65 73 74 5f 74 61 62  E TABLE test_tab
4a60: 6c 65 28 0a 20 20 20 20 20 20 6f 6e 65 20 49 4e  le(.      one IN
4a70: 54 20 4e 4f 54 20 4e 55 4c 4c 20 44 45 46 41 55  T NOT NULL DEFAU
4a80: 4c 54 20 2d 31 2c 20 0a 20 20 20 20 20 20 74 77  LT -1, .      tw
4a90: 6f 20 74 65 78 74 2c 0a 20 20 20 20 20 20 74 68  o text,.      th
4aa0: 72 65 65 20 56 41 52 43 48 41 52 28 34 35 2c 20  ree VARCHAR(45, 
4ab0: 36 35 29 20 44 45 46 41 55 4c 54 20 27 61 62 63  65) DEFAULT 'abc
4ac0: 64 65 27 2c 0a 20 20 20 20 20 20 66 6f 75 72 20  de',.      four 
4ad0: 52 45 41 4c 20 44 45 46 41 55 4c 54 20 58 27 61  REAL DEFAULT X'a
4ae0: 62 63 64 65 66 27 2c 0a 20 20 20 20 20 20 66 69  bcdef',.      fi
4af0: 76 65 20 44 45 46 41 55 4c 54 20 43 55 52 52 45  ve DEFAULT CURRE
4b00: 4e 54 5f 54 49 4d 45 0a 20 20 20 20 29 3b 0a 20  NT_TIME.    );. 
4b10: 20 7d 0a 20 20 63 61 70 74 75 72 65 5f 70 72 61   }.  capture_pra
4b20: 67 6d 61 20 64 62 20 6f 75 74 20 7b 50 52 41 47  gma db out {PRAG
4b30: 4d 41 20 74 61 62 6c 65 5f 69 6e 66 6f 28 74 65  MA table_info(te
4b40: 73 74 5f 74 61 62 6c 65 29 7d 0a 20 20 64 62 20  st_table)}.  db 
4b50: 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 63 69 64  eval {SELECT cid
4b60: 2c 20 22 6e 61 6d 65 22 2c 20 74 79 70 65 2c 20  , "name", type, 
4b70: 22 6e 6f 74 6e 75 6c 6c 22 2c 20 64 66 6c 74 5f  "notnull", dflt_
4b80: 76 61 6c 75 65 2c 20 70 6b 20 46 52 4f 4d 20 6f  value, pk FROM o
4b90: 75 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 4f  ut.            O
4ba0: 52 44 45 52 20 42 59 20 63 69 64 7d 0a 7d 20 5b  RDER BY cid}.} [
4bb0: 63 6f 6e 63 61 74 20 5c 0a 20 20 7b 30 20 6f 6e  concat \.  {0 on
4bc0: 65 20 49 4e 54 20 31 20 2d 31 20 30 7d 20 5c 0a  e INT 1 -1 0} \.
4bd0: 20 20 7b 31 20 74 77 6f 20 74 65 78 74 20 30 20    {1 two text 0 
4be0: 7b 7d 20 30 7d 20 5c 0a 20 20 7b 32 20 74 68 72  {} 0} \.  {2 thr
4bf0: 65 65 20 7b 56 41 52 43 48 41 52 28 34 35 2c 20  ee {VARCHAR(45, 
4c00: 36 35 29 7d 20 30 20 27 61 62 63 64 65 27 20 30  65)} 0 'abcde' 0
4c10: 7d 20 5c 0a 20 20 7b 33 20 66 6f 75 72 20 52 45  } \.  {3 four RE
4c20: 41 4c 20 30 20 58 27 61 62 63 64 65 66 27 20 30  AL 0 X'abcdef' 0
4c30: 7d 20 5c 0a 20 20 7b 34 20 66 69 76 65 20 7b 7d  } \.  {4 five {}
4c40: 20 30 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 20   0 CURRENT_TIME 
4c50: 30 7d 20 5c 0a 5d 0a 7d 20 3b 23 20 69 66 63 61  0} \.].} ;# ifca
4c60: 70 61 62 6c 65 20 73 63 68 65 6d 61 5f 70 72 61  pable schema_pra
4c70: 67 6d 61 73 0a 23 20 4d 69 73 63 65 6c 6c 61 6e  gmas.# Miscellan
4c80: 65 6f 75 73 20 74 65 73 74 73 0a 23 0a 69 66 63  eous tests.#.ifc
4c90: 61 70 61 62 6c 65 20 73 63 68 65 6d 61 5f 70 72  apable schema_pr
4ca0: 61 67 6d 61 73 20 7b 0a 64 6f 5f 74 65 73 74 20  agmas {.do_test 
4cb0: 70 72 61 67 6d 61 2d 37 2e 31 2e 31 20 7b 0a 20  pragma-7.1.1 {. 
4cc0: 20 23 20 4d 61 6b 65 20 73 75 72 65 20 61 20 70   # Make sure a p
4cd0: 72 61 67 6d 61 20 6b 6e 6f 77 73 20 74 6f 20 72  ragma knows to r
4ce0: 65 61 64 20 74 68 65 20 73 63 68 65 6d 61 20 69  ead the schema i
4cf0: 66 20 69 74 20 6e 65 65 64 73 20 74 6f 0a 20 20  f it needs to.  
4d00: 64 62 20 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74  db close.  sqlit
4d10: 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20  e3 db test.db.  
4d20: 63 61 70 74 75 72 65 5f 70 72 61 67 6d 61 20 64  capture_pragma d
4d30: 62 20 6f 75 74 20 22 50 52 41 47 4d 41 20 69 6e  b out "PRAGMA in
4d40: 64 65 78 5f 6c 69 73 74 28 74 33 29 22 0a 20 20  dex_list(t3)".  
4d50: 64 62 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20  db eval {SELECT 
4d60: 6e 61 6d 65 2c 20 22 6f 72 69 67 69 6e 22 20 46  name, "origin" F
4d70: 52 4f 4d 20 6f 75 74 20 4f 52 44 45 52 20 42 59  ROM out ORDER BY
4d80: 20 6e 61 6d 65 20 44 45 53 43 7d 0a 7d 20 7b 74   name DESC}.} {t
4d90: 33 69 31 20 63 20 73 71 6c 69 74 65 5f 61 75 74  3i1 c sqlite_aut
4da0: 6f 69 6e 64 65 78 5f 74 33 5f 31 20 75 7d 0a 64  oindex_t3_1 u}.d
4db0: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 37 2e  o_test pragma-7.
4dc0: 31 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  1.2 {.  execsql 
4dd0: 7b 0a 20 20 20 20 70 72 61 67 6d 61 20 69 6e 64  {.    pragma ind
4de0: 65 78 5f 6c 69 73 74 28 74 33 5f 62 6f 67 75 73  ex_list(t3_bogus
4df0: 29 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 7d 20 3b 23  );.  }.} {}.} ;#
4e00: 20 69 66 63 61 70 61 62 6c 65 20 73 63 68 65 6d   ifcapable schem
4e10: 61 5f 70 72 61 67 6d 61 73 0a 69 66 63 61 70 61  a_pragmas.ifcapa
4e20: 62 6c 65 20 7b 75 74 66 31 36 7d 20 7b 0a 20 20  ble {utf16} {.  
4e30: 69 66 20 7b 5b 70 65 72 6d 75 74 61 74 69 6f 6e  if {[permutation
4e40: 5d 20 3d 3d 20 22 22 7d 20 7b 0a 20 20 20 20 64  ] == ""} {.    d
4e50: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 37 2e  o_test pragma-7.
4e60: 32 20 7b 0a 20 20 20 20 20 20 64 62 20 63 6c 6f  2 {.      db clo
4e70: 73 65 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  se.      sqlite3
4e80: 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20 20 20   db test.db.    
4e90: 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20    catchsql {.   
4ea0: 20 20 20 20 20 70 72 61 67 6d 61 20 65 6e 63 6f       pragma enco
4eb0: 64 69 6e 67 3d 62 6f 67 75 73 3b 0a 20 20 20 20  ding=bogus;.    
4ec0: 20 20 7d 0a 20 20 20 20 7d 20 7b 31 20 7b 75 6e    }.    } {1 {un
4ed0: 73 75 70 70 6f 72 74 65 64 20 65 6e 63 6f 64 69  supported encodi
4ee0: 6e 67 3a 20 62 6f 67 75 73 7d 7d 0a 20 20 7d 0a  ng: bogus}}.  }.
4ef0: 7d 0a 69 66 63 61 70 61 62 6c 65 20 74 65 6d 70  }.ifcapable temp
4f00: 64 62 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 70  db {.  do_test p
4f10: 72 61 67 6d 61 2d 37 2e 33 20 7b 0a 20 20 20 20  ragma-7.3 {.    
4f20: 64 62 20 63 6c 6f 73 65 0a 20 20 20 20 73 71 6c  db close.    sql
4f30: 69 74 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a  ite3 db test.db.
4f40: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20      execsql {.  
4f50: 20 20 20 20 70 72 61 67 6d 61 20 6c 6f 63 6b 5f      pragma lock_
4f60: 73 74 61 74 75 73 3b 0a 20 20 20 20 7d 0a 20 20  status;.    }.  
4f70: 7d 20 7b 6d 61 69 6e 20 75 6e 6c 6f 63 6b 65 64  } {main unlocked
4f80: 20 74 65 6d 70 20 63 6c 6f 73 65 64 7d 0a 7d 20   temp closed}.} 
4f90: 65 6c 73 65 20 7b 0a 20 20 64 6f 5f 74 65 73 74  else {.  do_test
4fa0: 20 70 72 61 67 6d 61 2d 37 2e 33 20 7b 0a 20 20   pragma-7.3 {.  
4fb0: 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 20 20 73    db close.    s
4fc0: 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64  qlite3 db test.d
4fd0: 62 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a  b.    execsql {.
4fe0: 20 20 20 20 20 20 70 72 61 67 6d 61 20 6c 6f 63        pragma loc
4ff0: 6b 5f 73 74 61 74 75 73 3b 0a 20 20 20 20 7d 0a  k_status;.    }.
5000: 20 20 7d 20 7b 6d 61 69 6e 20 75 6e 6c 6f 63 6b    } {main unlock
5010: 65 64 7d 0a 7d 0a 0a 0a 23 2d 2d 2d 2d 2d 2d 2d  ed}.}...#-------
5020: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5030: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5040: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5050: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a  ---------------.
5060: 23 20 54 65 73 74 20 63 61 73 65 73 20 70 72 61  # Test cases pra
5070: 67 6d 61 2d 38 2e 2a 20 74 65 73 74 20 74 68 65  gma-8.* test the
5080: 20 22 50 52 41 47 4d 41 20 73 63 68 65 6d 61 5f   "PRAGMA schema_
5090: 76 65 72 73 69 6f 6e 22 20 61 6e 64 20 22 50 52  version" and "PR
50a0: 41 47 4d 41 0a 23 20 75 73 65 72 5f 76 65 72 73  AGMA.# user_vers
50b0: 69 6f 6e 22 20 73 74 61 74 65 6d 65 6e 74 73 2e  ion" statements.
50c0: 0a 23 0a 23 20 70 72 61 67 6d 61 2d 38 2e 31 3a  .#.# pragma-8.1:
50d0: 20 50 52 41 47 4d 41 20 73 63 68 65 6d 61 5f 76   PRAGMA schema_v
50e0: 65 72 73 69 6f 6e 0a 23 20 70 72 61 67 6d 61 2d  ersion.# pragma-
50f0: 38 2e 32 3a 20 50 52 41 47 4d 41 20 75 73 65 72  8.2: PRAGMA user
5100: 5f 76 65 72 73 69 6f 6e 0a 23 0a 0a 69 66 63 61  _version.#..ifca
5110: 70 61 62 6c 65 20 73 63 68 65 6d 61 5f 76 65 72  pable schema_ver
5120: 73 69 6f 6e 20 7b 0a 0a 23 20 46 69 72 73 74 20  sion {..# First 
5130: 63 68 65 63 6b 20 74 68 61 74 20 77 65 20 63 61  check that we ca
5140: 6e 20 73 65 74 20 74 68 65 20 73 63 68 65 6d 61  n set the schema
5150: 20 76 65 72 73 69 6f 6e 20 61 6e 64 20 74 68 65   version and the
5160: 6e 20 72 65 74 72 69 65 76 65 20 74 68 65 0a 23  n retrieve the.#
5170: 20 73 61 6d 65 20 76 61 6c 75 65 2e 0a 64 6f 5f   same value..do_
5180: 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e  test pragma-8.1.
5190: 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  1 {.  execsql {.
51a0: 20 20 20 20 50 52 41 47 4d 41 20 73 63 68 65 6d      PRAGMA schem
51b0: 61 5f 76 65 72 73 69 6f 6e 20 3d 20 31 30 35 3b  a_version = 105;
51c0: 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73  .  }.} {}.do_tes
51d0: 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e 32 20 7b  t pragma-8.1.2 {
51e0: 0a 20 20 65 78 65 63 73 71 6c 32 20 7b 0a 20 20  .  execsql2 {.  
51f0: 20 20 50 52 41 47 4d 41 20 73 63 68 65 6d 61 5f    PRAGMA schema_
5200: 76 65 72 73 69 6f 6e 3b 0a 20 20 7d 0a 7d 20 7b  version;.  }.} {
5210: 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 20 31  schema_version 1
5220: 30 35 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67  05}.do_test prag
5230: 6d 61 2d 38 2e 31 2e 33 20 7b 0a 20 20 65 78 65  ma-8.1.3 {.  exe
5240: 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d  csql {.    PRAGM
5250: 41 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e  A schema_version
5260: 20 3d 20 31 30 36 3b 0a 20 20 7d 0a 7d 20 7b 7d   = 106;.  }.} {}
5270: 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d  .do_test pragma-
5280: 38 2e 31 2e 34 20 7b 0a 20 20 65 78 65 63 73 71  8.1.4 {.  execsq
5290: 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 73  l {.    PRAGMA s
52a0: 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 3b 0a 20  chema_version;. 
52b0: 20 7d 0a 7d 20 31 30 36 0a 0a 23 20 43 68 65 63   }.} 106..# Chec
52c0: 6b 20 74 68 61 74 20 63 72 65 61 74 69 6e 67 20  k that creating 
52d0: 61 20 74 61 62 6c 65 20 6d 6f 64 69 66 69 65 73  a table modifies
52e0: 20 74 68 65 20 73 63 68 65 6d 61 2d 76 65 72 73   the schema-vers
52f0: 69 6f 6e 20 28 74 68 69 73 20 69 73 20 72 65 61  ion (this is rea
5300: 6c 6c 79 0a 23 20 74 6f 20 76 65 72 69 66 79 20  lly.# to verify 
5310: 74 68 61 74 20 74 68 65 20 76 61 6c 75 65 20 62  that the value b
5320: 65 69 6e 67 20 72 65 61 64 20 69 73 20 69 6e 20  eing read is in 
5330: 66 61 63 74 20 74 68 65 20 73 63 68 65 6d 61 20  fact the schema 
5340: 76 65 72 73 69 6f 6e 29 2e 0a 64 6f 5f 74 65 73  version)..do_tes
5350: 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e 35 20 7b  t pragma-8.1.5 {
5360: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
5370: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 34   CREATE TABLE t4
5380: 28 61 2c 20 62 2c 20 63 29 3b 0a 20 20 20 20 49  (a, b, c);.    I
5390: 4e 53 45 52 54 20 49 4e 54 4f 20 74 34 20 56 41  NSERT INTO t4 VA
53a0: 4c 55 45 53 28 31 2c 20 32 2c 20 33 29 3b 0a 20  LUES(1, 2, 3);. 
53b0: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
53c0: 20 74 34 3b 0a 20 20 7d 0a 7d 20 7b 31 20 32 20   t4;.  }.} {1 2 
53d0: 33 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  3}.do_test pragm
53e0: 61 2d 38 2e 31 2e 36 20 7b 0a 20 20 65 78 65 63  a-8.1.6 {.  exec
53f0: 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41  sql {.    PRAGMA
5400: 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 3b   schema_version;
5410: 0a 20 20 7d 0a 7d 20 31 30 37 0a 0a 23 20 4e 6f  .  }.} 107..# No
5420: 77 20 6f 70 65 6e 20 61 20 73 65 63 6f 6e 64 20  w open a second 
5430: 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 74 68  connection to th
5440: 65 20 64 61 74 61 62 61 73 65 2e 20 45 6e 73 75  e database. Ensu
5450: 72 65 20 74 68 61 74 20 63 68 61 6e 67 69 6e 67  re that changing
5460: 20 74 68 65 0a 23 20 73 63 68 65 6d 61 2d 76 65   the.# schema-ve
5470: 72 73 69 6f 6e 20 75 73 69 6e 67 20 74 68 65 20  rsion using the 
5480: 66 69 72 73 74 20 63 6f 6e 6e 65 63 74 69 6f 6e  first connection
5490: 20 66 6f 72 63 65 73 20 74 68 65 20 73 65 63 6f   forces the seco
54a0: 6e 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 0a 23 20  nd connection.# 
54b0: 74 6f 20 72 65 6c 6f 61 64 20 74 68 65 20 73 63  to reload the sc
54c0: 68 65 6d 61 2e 20 54 68 69 73 20 68 61 73 20 74  hema. This has t
54d0: 6f 20 62 65 20 64 6f 6e 65 20 75 73 69 6e 67 20  o be done using 
54e0: 74 68 65 20 43 2d 41 50 49 20 74 65 73 74 20 66  the C-API test f
54f0: 75 6e 63 74 69 6f 6e 73 2c 0a 23 20 62 65 63 61  unctions,.# beca
5500: 75 73 65 20 74 68 65 20 54 43 4c 20 41 50 49 20  use the TCL API 
5510: 61 63 63 6f 75 6e 74 73 20 66 6f 72 20 53 43 48  accounts for SCH
5520: 45 4d 41 5f 45 52 52 4f 52 20 61 6e 64 20 72 65  EMA_ERROR and re
5530: 74 72 69 65 73 20 74 68 65 20 71 75 65 72 79 2e  tries the query.
5540: 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d  .do_test pragma-
5550: 38 2e 31 2e 37 20 7b 0a 20 20 73 71 6c 69 74 65  8.1.7 {.  sqlite
5560: 33 20 64 62 32 20 74 65 73 74 2e 64 62 3b 20 73  3 db2 test.db; s
5570: 65 74 20 3a 3a 44 42 32 20 5b 73 71 6c 69 74 65  et ::DB2 [sqlite
5580: 33 5f 63 6f 6e 6e 65 63 74 69 6f 6e 5f 70 6f 69  3_connection_poi
5590: 6e 74 65 72 20 64 62 32 5d 0a 20 20 65 78 65 63  nter db2].  exec
55a0: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
55b0: 20 2a 20 46 52 4f 4d 20 74 34 3b 0a 20 20 7d 20   * FROM t4;.  } 
55c0: 64 62 32 0a 7d 20 7b 31 20 32 20 33 7d 0a 64 6f  db2.} {1 2 3}.do
55d0: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 31  _test pragma-8.1
55e0: 2e 38 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .8 {.  execsql {
55f0: 0a 20 20 20 20 50 52 41 47 4d 41 20 73 63 68 65  .    PRAGMA sche
5600: 6d 61 5f 76 65 72 73 69 6f 6e 20 3d 20 31 30 38  ma_version = 108
5610: 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65  ;.  }.} {}.do_te
5620: 73 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e 39 20  st pragma-8.1.9 
5630: 7b 0a 20 20 73 65 74 20 3a 3a 53 54 4d 54 20 5b  {.  set ::STMT [
5640: 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 20  sqlite3_prepare 
5650: 24 3a 3a 44 42 32 20 22 53 45 4c 45 43 54 20 2a  $::DB2 "SELECT *
5660: 20 46 52 4f 4d 20 74 34 22 20 2d 31 20 44 55 4d   FROM t4" -1 DUM
5670: 4d 59 5d 0a 20 20 73 71 6c 69 74 65 33 5f 73 74  MY].  sqlite3_st
5680: 65 70 20 24 3a 3a 53 54 4d 54 0a 7d 20 53 51 4c  ep $::STMT.} SQL
5690: 49 54 45 5f 45 52 52 4f 52 0a 64 6f 5f 74 65 73  ITE_ERROR.do_tes
56a0: 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e 31 30 20  t pragma-8.1.10 
56b0: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61  {.  sqlite3_fina
56c0: 6c 69 7a 65 20 24 3a 3a 53 54 4d 54 0a 7d 20 53  lize $::STMT.} S
56d0: 51 4c 49 54 45 5f 53 43 48 45 4d 41 0a 0a 23 20  QLITE_SCHEMA..# 
56e0: 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20 73 63  Make sure the sc
56f0: 68 65 6d 61 2d 76 65 72 73 69 6f 6e 20 63 61 6e  hema-version can
5700: 20 62 65 20 6d 61 6e 69 70 75 6c 61 74 65 64 20   be manipulated 
5710: 69 6e 20 61 6e 20 61 74 74 61 63 68 65 64 20 64  in an attached d
5720: 61 74 61 62 61 73 65 2e 0a 66 6f 72 63 65 64 65  atabase..forcede
5730: 6c 65 74 65 20 74 65 73 74 32 2e 64 62 0a 66 6f  lete test2.db.fo
5740: 72 63 65 64 65 6c 65 74 65 20 74 65 73 74 32 2e  rcedelete test2.
5750: 64 62 2d 6a 6f 75 72 6e 61 6c 0a 69 66 63 61 70  db-journal.ifcap
5760: 61 62 6c 65 20 61 74 74 61 63 68 20 7b 0a 20 20  able attach {.  
5770: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38  do_test pragma-8
5780: 2e 31 2e 31 31 20 7b 0a 20 20 20 20 65 78 65 63  .1.11 {.    exec
5790: 73 71 6c 20 7b 0a 20 20 20 20 20 20 41 54 54 41  sql {.      ATTA
57a0: 43 48 20 27 74 65 73 74 32 2e 64 62 27 20 41 53  CH 'test2.db' AS
57b0: 20 61 75 78 3b 0a 20 20 20 20 20 20 43 52 45 41   aux;.      CREA
57c0: 54 45 20 54 41 42 4c 45 20 61 75 78 2e 74 31 28  TE TABLE aux.t1(
57d0: 61 2c 20 62 2c 20 63 29 3b 0a 20 20 20 20 20 20  a, b, c);.      
57e0: 50 52 41 47 4d 41 20 61 75 78 2e 73 63 68 65 6d  PRAGMA aux.schem
57f0: 61 5f 76 65 72 73 69 6f 6e 20 3d 20 32 30 35 3b  a_version = 205;
5800: 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 7d 0a 20 20  .    }.  } {}.  
5810: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38  do_test pragma-8
5820: 2e 31 2e 31 32 20 7b 0a 20 20 20 20 65 78 65 63  .1.12 {.    exec
5830: 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47  sql {.      PRAG
5840: 4d 41 20 61 75 78 2e 73 63 68 65 6d 61 5f 76 65  MA aux.schema_ve
5850: 72 73 69 6f 6e 3b 0a 20 20 20 20 7d 0a 20 20 7d  rsion;.    }.  }
5860: 20 32 30 35 0a 7d 0a 64 6f 5f 74 65 73 74 20 70   205.}.do_test p
5870: 72 61 67 6d 61 2d 38 2e 31 2e 31 33 20 7b 0a 20  ragma-8.1.13 {. 
5880: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50   execsql {.    P
5890: 52 41 47 4d 41 20 73 63 68 65 6d 61 5f 76 65 72  RAGMA schema_ver
58a0: 73 69 6f 6e 3b 0a 20 20 7d 0a 7d 20 31 30 38 0a  sion;.  }.} 108.
58b0: 0a 23 20 41 6e 64 20 63 68 65 63 6b 20 74 68 61  .# And check tha
58c0: 74 20 6d 6f 64 69 66 79 69 6e 67 20 74 68 65 20  t modifying the 
58d0: 73 63 68 65 6d 61 2d 76 65 72 73 69 6f 6e 20 69  schema-version i
58e0: 6e 20 61 6e 20 61 74 74 61 63 68 65 64 20 64 61  n an attached da
58f0: 74 61 62 61 73 65 0a 23 20 66 6f 72 63 65 73 20  tabase.# forces 
5900: 74 68 65 20 73 65 63 6f 6e 64 20 63 6f 6e 6e 65  the second conne
5910: 63 74 69 6f 6e 20 74 6f 20 72 65 6c 6f 61 64 20  ction to reload 
5920: 74 68 65 20 73 63 68 65 6d 61 2e 0a 69 66 63 61  the schema..ifca
5930: 70 61 62 6c 65 20 61 74 74 61 63 68 20 7b 0a 20  pable attach {. 
5940: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
5950: 38 2e 31 2e 31 34 20 7b 0a 20 20 20 20 73 71 6c  8.1.14 {.    sql
5960: 69 74 65 33 20 64 62 32 20 74 65 73 74 2e 64 62  ite3 db2 test.db
5970: 3b 20 73 65 74 20 3a 3a 44 42 32 20 5b 73 71 6c  ; set ::DB2 [sql
5980: 69 74 65 33 5f 63 6f 6e 6e 65 63 74 69 6f 6e 5f  ite3_connection_
5990: 70 6f 69 6e 74 65 72 20 64 62 32 5d 0a 20 20 20  pointer db2].   
59a0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20   execsql {.     
59b0: 20 41 54 54 41 43 48 20 27 74 65 73 74 32 2e 64   ATTACH 'test2.d
59c0: 62 27 20 41 53 20 61 75 78 3b 0a 20 20 20 20 20  b' AS aux;.     
59d0: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 61   SELECT * FROM a
59e0: 75 78 2e 74 31 3b 0a 20 20 20 20 7d 20 64 62 32  ux.t1;.    } db2
59f0: 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65 73  .  } {}.  do_tes
5a00: 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e 31 35 20  t pragma-8.1.15 
5a10: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a  {.    execsql {.
5a20: 20 20 20 20 20 20 50 52 41 47 4d 41 20 61 75 78        PRAGMA aux
5a30: 2e 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 20  .schema_version 
5a40: 3d 20 32 30 36 3b 0a 20 20 20 20 7d 0a 20 20 7d  = 206;.    }.  }
5a50: 20 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72   {}.  do_test pr
5a60: 61 67 6d 61 2d 38 2e 31 2e 31 36 20 7b 0a 20 20  agma-8.1.16 {.  
5a70: 20 20 73 65 74 20 3a 3a 53 54 4d 54 20 5b 73 71    set ::STMT [sq
5a80: 6c 69 74 65 33 5f 70 72 65 70 61 72 65 20 24 3a  lite3_prepare $:
5a90: 3a 44 42 32 20 22 53 45 4c 45 43 54 20 2a 20 46  :DB2 "SELECT * F
5aa0: 52 4f 4d 20 61 75 78 2e 74 31 22 20 2d 31 20 44  ROM aux.t1" -1 D
5ab0: 55 4d 4d 59 5d 0a 20 20 20 20 73 71 6c 69 74 65  UMMY].    sqlite
5ac0: 33 5f 73 74 65 70 20 24 3a 3a 53 54 4d 54 0a 20  3_step $::STMT. 
5ad0: 20 7d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 0a   } SQLITE_ERROR.
5ae0: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
5af0: 2d 38 2e 31 2e 31 37 20 7b 0a 20 20 20 20 73 71  -8.1.17 {.    sq
5b00: 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24  lite3_finalize $
5b10: 3a 3a 53 54 4d 54 0a 20 20 7d 20 53 51 4c 49 54  ::STMT.  } SQLIT
5b20: 45 5f 53 43 48 45 4d 41 0a 20 20 64 6f 5f 74 65  E_SCHEMA.  do_te
5b30: 73 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e 31 38  st pragma-8.1.18
5b40: 20 7b 0a 20 20 20 20 64 62 32 20 63 6c 6f 73 65   {.    db2 close
5b50: 0a 20 20 7d 20 7b 7d 0a 7d 0a 0a 23 20 4e 6f 77  .  } {}.}..# Now
5b60: 20 74 65 73 74 20 74 68 61 74 20 74 68 65 20 75   test that the u
5b70: 73 65 72 2d 76 65 72 73 69 6f 6e 20 63 61 6e 20  ser-version can 
5b80: 62 65 20 72 65 61 64 20 61 6e 64 20 77 72 69 74  be read and writ
5b90: 74 65 6e 20 28 61 6e 64 20 74 68 61 74 20 77 65  ten (and that we
5ba0: 20 61 72 65 6e 27 74 0a 23 20 61 63 63 69 64 65   aren't.# accide
5bb0: 6e 74 61 6c 6c 79 20 6d 61 6e 69 70 75 6c 61 74  ntally manipulat
5bc0: 69 6e 67 20 74 68 65 20 73 63 68 65 6d 61 2d 76  ing the schema-v
5bd0: 65 72 73 69 6f 6e 20 69 6e 73 74 65 61 64 29 2e  ersion instead).
5be0: 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d  .do_test pragma-
5bf0: 38 2e 32 2e 31 20 7b 0a 20 20 65 78 65 63 73 71  8.2.1 {.  execsq
5c00: 6c 32 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20  l2 {.    PRAGMA 
5c10: 75 73 65 72 5f 76 65 72 73 69 6f 6e 3b 0a 20 20  user_version;.  
5c20: 7d 0a 7d 20 7b 75 73 65 72 5f 76 65 72 73 69 6f  }.} {user_versio
5c30: 6e 20 30 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61  n 0}.do_test pra
5c40: 67 6d 61 2d 38 2e 32 2e 32 20 7b 0a 20 20 65 78  gma-8.2.2 {.  ex
5c50: 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47  ecsql {.    PRAG
5c60: 4d 41 20 75 73 65 72 5f 76 65 72 73 69 6f 6e 20  MA user_version 
5c70: 3d 20 32 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f  = 2;.  }.} {}.do
5c80: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 32  _test pragma-8.2
5c90: 2e 33 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c  .3.1 {.  execsql
5ca0: 32 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 75  2 {.    PRAGMA u
5cb0: 73 65 72 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 7d  ser_version;.  }
5cc0: 0a 7d 20 7b 75 73 65 72 5f 76 65 72 73 69 6f 6e  .} {user_version
5cd0: 20 32 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67   2}.do_test prag
5ce0: 6d 61 2d 38 2e 32 2e 33 2e 32 20 7b 0a 20 20 64  ma-8.2.3.2 {.  d
5cf0: 62 20 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74 65  b close.  sqlite
5d00: 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20 65  3 db test.db.  e
5d10: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41  xecsql {.    PRA
5d20: 47 4d 41 20 75 73 65 72 5f 76 65 72 73 69 6f 6e  GMA user_version
5d30: 3b 0a 20 20 7d 0a 7d 20 7b 32 7d 0a 64 6f 5f 74  ;.  }.} {2}.do_t
5d40: 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 32 2e 34  est pragma-8.2.4
5d50: 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .1 {.  execsql {
5d60: 0a 20 20 20 20 50 52 41 47 4d 41 20 73 63 68 65  .    PRAGMA sche
5d70: 6d 61 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 7d 0a  ma_version;.  }.
5d80: 7d 20 7b 31 30 38 7d 0a 69 66 63 61 70 61 62 6c  } {108}.ifcapabl
5d90: 65 20 76 61 63 75 75 6d 20 7b 0a 20 20 64 6f 5f  e vacuum {.  do_
5da0: 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 32 2e  test pragma-8.2.
5db0: 34 2e 32 20 7b 0a 20 20 20 20 65 78 65 63 73 71  4.2 {.    execsq
5dc0: 6c 20 7b 0a 20 20 20 20 20 20 56 41 43 55 55 4d  l {.      VACUUM
5dd0: 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 75  ;.      PRAGMA u
5de0: 73 65 72 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 20  ser_version;.   
5df0: 20 7d 0a 20 20 7d 20 7b 32 7d 0a 20 20 64 6f 5f   }.  } {2}.  do_
5e00: 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 32 2e  test pragma-8.2.
5e10: 34 2e 33 20 7b 0a 20 20 20 20 65 78 65 63 73 71  4.3 {.    execsq
5e20: 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41  l {.      PRAGMA
5e30: 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 3b   schema_version;
5e40: 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 31 30 39 7d  .    }.  } {109}
5e50: 0a 7d 0a 0a 69 66 63 61 70 61 62 6c 65 20 61 74  .}..ifcapable at
5e60: 74 61 63 68 20 7b 0a 20 20 64 62 20 65 76 61 6c  tach {.  db eval
5e70: 20 7b 41 54 54 41 43 48 20 27 74 65 73 74 32 2e   {ATTACH 'test2.
5e80: 64 62 27 20 41 53 20 61 75 78 7d 0a 20 20 0a 20  db' AS aux}.  . 
5e90: 20 23 20 43 68 65 63 6b 20 74 68 61 74 20 74 68   # Check that th
5ea0: 65 20 75 73 65 72 2d 76 65 72 73 69 6f 6e 20 69  e user-version i
5eb0: 6e 20 74 68 65 20 61 75 78 69 6c 61 72 79 20 64  n the auxilary d
5ec0: 61 74 61 62 61 73 65 20 63 61 6e 20 62 65 20 6d  atabase can be m
5ed0: 61 6e 69 70 75 6c 61 74 65 64 20 28 0a 20 20 23  anipulated (.  #
5ee0: 20 61 6e 64 20 74 68 61 74 20 77 65 20 61 72 65   and that we are
5ef0: 6e 27 74 20 61 63 63 69 64 65 6e 74 61 6c 6c 79  n't accidentally
5f00: 20 6d 61 6e 69 70 75 6c 61 74 69 6e 67 20 74 68   manipulating th
5f10: 65 20 73 61 6d 65 20 69 6e 20 74 68 65 20 6d 61  e same in the ma
5f20: 69 6e 20 64 62 29 2e 0a 20 20 64 6f 5f 74 65 73  in db)..  do_tes
5f30: 74 20 70 72 61 67 6d 61 2d 38 2e 32 2e 35 20 7b  t pragma-8.2.5 {
5f40: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
5f50: 20 20 20 20 20 50 52 41 47 4d 41 20 61 75 78 2e       PRAGMA aux.
5f60: 75 73 65 72 5f 76 65 72 73 69 6f 6e 3b 0a 20 20  user_version;.  
5f70: 20 20 7d 0a 20 20 7d 20 7b 30 7d 0a 20 20 64 6f    }.  } {0}.  do
5f80: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 32  _test pragma-8.2
5f90: 2e 36 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  .6 {.    execsql
5fa0: 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20   {.      PRAGMA 
5fb0: 61 75 78 2e 75 73 65 72 5f 76 65 72 73 69 6f 6e  aux.user_version
5fc0: 20 3d 20 33 3b 0a 20 20 20 20 7d 0a 20 20 7d 20   = 3;.    }.  } 
5fd0: 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61  {}.  do_test pra
5fe0: 67 6d 61 2d 38 2e 32 2e 37 20 7b 0a 20 20 20 20  gma-8.2.7 {.    
5ff0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
6000: 50 52 41 47 4d 41 20 61 75 78 2e 75 73 65 72 5f  PRAGMA aux.user_
6010: 76 65 72 73 69 6f 6e 3b 0a 20 20 20 20 7d 0a 20  version;.    }. 
6020: 20 7d 20 7b 33 7d 0a 20 20 64 6f 5f 74 65 73 74   } {3}.  do_test
6030: 20 70 72 61 67 6d 61 2d 38 2e 32 2e 38 20 7b 0a   pragma-8.2.8 {.
6040: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20      execsql {.  
6050: 20 20 20 20 50 52 41 47 4d 41 20 6d 61 69 6e 2e      PRAGMA main.
6060: 75 73 65 72 5f 76 65 72 73 69 6f 6e 3b 0a 20 20  user_version;.  
6070: 20 20 7d 0a 20 20 7d 20 7b 32 7d 0a 20 20 0a 20    }.  } {2}.  . 
6080: 20 23 20 4e 6f 77 20 63 68 65 63 6b 20 74 68 61   # Now check tha
6090: 74 20 61 20 52 4f 4c 4c 42 41 43 4b 20 72 65 73  t a ROLLBACK res
60a0: 65 74 73 20 74 68 65 20 75 73 65 72 2d 76 65 72  ets the user-ver
60b0: 73 69 6f 6e 20 69 66 20 69 74 20 68 61 73 20 62  sion if it has b
60c0: 65 65 6e 20 6d 6f 64 69 66 69 65 64 0a 20 20 23  een modified.  #
60d0: 20 77 69 74 68 69 6e 20 61 20 74 72 61 6e 73 61   within a transa
60e0: 63 74 69 6f 6e 2e 0a 20 20 64 6f 5f 74 65 73 74  ction..  do_test
60f0: 20 70 72 61 67 6d 61 2d 38 2e 32 2e 39 20 7b 0a   pragma-8.2.9 {.
6100: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20      execsql {.  
6110: 20 20 20 20 42 45 47 49 4e 3b 0a 20 20 20 20 20      BEGIN;.     
6120: 20 50 52 41 47 4d 41 20 61 75 78 2e 75 73 65 72   PRAGMA aux.user
6130: 5f 76 65 72 73 69 6f 6e 20 3d 20 31 30 3b 0a 20  _version = 10;. 
6140: 20 20 20 20 20 50 52 41 47 4d 41 20 75 73 65 72       PRAGMA user
6150: 5f 76 65 72 73 69 6f 6e 20 3d 20 31 31 3b 0a 20  _version = 11;. 
6160: 20 20 20 7d 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f     }.  } {}.  do
6170: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 32  _test pragma-8.2
6180: 2e 31 30 20 7b 0a 20 20 20 20 65 78 65 63 73 71  .10 {.    execsq
6190: 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41  l {.      PRAGMA
61a0: 20 61 75 78 2e 75 73 65 72 5f 76 65 72 73 69 6f   aux.user_versio
61b0: 6e 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 31 30  n;.    }.  } {10
61c0: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67  }.  do_test prag
61d0: 6d 61 2d 38 2e 32 2e 31 31 20 7b 0a 20 20 20 20  ma-8.2.11 {.    
61e0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
61f0: 50 52 41 47 4d 41 20 6d 61 69 6e 2e 75 73 65 72  PRAGMA main.user
6200: 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 20 20 7d 0a  _version;.    }.
6210: 20 20 7d 20 7b 31 31 7d 0a 20 20 64 6f 5f 74 65    } {11}.  do_te
6220: 73 74 20 70 72 61 67 6d 61 2d 38 2e 32 2e 31 32  st pragma-8.2.12
6230: 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b   {.    execsql {
6240: 0a 20 20 20 20 20 20 52 4f 4c 4c 42 41 43 4b 3b  .      ROLLBACK;
6250: 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 61 75  .      PRAGMA au
6260: 78 2e 75 73 65 72 5f 76 65 72 73 69 6f 6e 3b 0a  x.user_version;.
6270: 20 20 20 20 7d 0a 20 20 7d 20 7b 33 7d 0a 20 20      }.  } {3}.  
6280: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38  do_test pragma-8
6290: 2e 32 2e 31 33 20 7b 0a 20 20 20 20 65 78 65 63  .2.13 {.    exec
62a0: 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47  sql {.      PRAG
62b0: 4d 41 20 6d 61 69 6e 2e 75 73 65 72 5f 76 65 72  MA main.user_ver
62c0: 73 69 6f 6e 3b 0a 20 20 20 20 7d 0a 20 20 7d 20  sion;.    }.  } 
62d0: 7b 32 7d 0a 7d 0a 0a 23 20 54 72 79 20 61 20 6e  {2}.}..# Try a n
62e0: 65 67 61 74 69 76 65 20 76 61 6c 75 65 20 66 6f  egative value fo
62f0: 72 20 74 68 65 20 75 73 65 72 2d 76 65 72 73 69  r the user-versi
6300: 6f 6e 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  on.do_test pragm
6310: 61 2d 38 2e 32 2e 31 34 20 7b 0a 20 20 65 78 65  a-8.2.14 {.  exe
6320: 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d  csql {.    PRAGM
6330: 41 20 75 73 65 72 5f 76 65 72 73 69 6f 6e 20 3d  A user_version =
6340: 20 2d 34 35 30 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a   -450;.  }.} {}.
6350: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38  do_test pragma-8
6360: 2e 32 2e 31 35 20 7b 0a 20 20 65 78 65 63 73 71  .2.15 {.  execsq
6370: 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 75  l {.    PRAGMA u
6380: 73 65 72 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 7d  ser_version;.  }
6390: 0a 7d 20 7b 2d 34 35 30 7d 0a 7d 20 3b 20 23 20  .} {-450}.} ; # 
63a0: 69 66 63 61 70 61 62 6c 65 20 73 63 68 65 6d 61  ifcapable schema
63b0: 5f 76 65 72 73 69 6f 6e 0a 0a 23 20 43 68 65 63  _version..# Chec
63c0: 6b 20 74 6f 20 73 65 65 20 69 66 20 54 45 4d 50  k to see if TEMP
63d0: 5f 53 54 4f 52 45 20 69 73 20 6d 65 6d 6f 72 79  _STORE is memory
63e0: 20 6f 72 20 64 69 73 6b 2e 20 20 52 65 74 75 72   or disk.  Retur
63f0: 6e 20 73 74 72 69 6e 67 73 0a 23 20 22 6d 65 6d  n strings.# "mem
6400: 6f 72 79 22 20 6f 72 20 22 64 69 73 6b 22 20 61  ory" or "disk" a
6410: 73 20 61 70 70 72 6f 70 72 69 61 74 65 2e 0a 23  s appropriate..#
6420: 0a 70 72 6f 63 20 63 68 65 63 6b 5f 74 65 6d 70  .proc check_temp
6430: 5f 73 74 6f 72 65 20 7b 7d 20 7b 0a 20 20 64 62  _store {} {.  db
6440: 20 65 76 61 6c 20 7b 43 52 45 41 54 45 20 54 45   eval {CREATE TE
6450: 4d 50 20 54 41 42 4c 45 20 49 46 20 4e 4f 54 20  MP TABLE IF NOT 
6460: 45 58 49 53 54 53 20 61 28 62 29 7d 0a 20 20 64  EXISTS a(b)}.  d
6470: 62 20 65 76 61 6c 20 7b 50 52 41 47 4d 41 20 64  b eval {PRAGMA d
6480: 61 74 61 62 61 73 65 5f 6c 69 73 74 7d 20 7b 0a  atabase_list} {.
6490: 20 20 20 20 69 66 20 7b 24 6e 61 6d 65 3d 3d 22      if {$name=="
64a0: 74 65 6d 70 22 7d 20 7b 0a 20 20 20 20 20 20 73  temp"} {.      s
64b0: 65 74 20 62 74 20 5b 62 74 72 65 65 5f 66 72 6f  et bt [btree_fro
64c0: 6d 5f 64 62 20 64 62 20 31 5d 0a 20 20 20 20 20  m_db db 1].     
64d0: 20 69 66 20 7b 5b 62 74 72 65 65 5f 69 73 6d 65   if {[btree_isme
64e0: 6d 64 62 20 24 62 74 5d 7d 20 7b 0a 20 20 20 20  mdb $bt]} {.    
64f0: 20 20 20 20 72 65 74 75 72 6e 20 22 6d 65 6d 6f      return "memo
6500: 72 79 22 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ry".      }.    
6510: 20 20 72 65 74 75 72 6e 20 22 64 69 73 6b 22 0a    return "disk".
6520: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75      }.  }.  retu
6530: 72 6e 20 22 75 6e 6b 6e 6f 77 6e 22 0a 7d 0a 0a  rn "unknown".}..
6540: 23 20 41 70 70 6c 69 63 61 74 69 6f 6e 5f 49 44  # Application_ID
6550: 0a 23 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .#.do_test pragm
6560: 61 2d 38 2e 33 2e 31 20 7b 0a 20 20 65 78 65 63  a-8.3.1 {.  exec
6570: 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41  sql {.    PRAGMA
6580: 20 61 70 70 6c 69 63 61 74 69 6f 6e 5f 69 64 3b   application_id;
6590: 0a 20 20 7d 0a 7d 20 7b 30 7d 0a 64 6f 5f 74 65  .  }.} {0}.do_te
65a0: 73 74 20 70 72 61 67 6d 61 2d 38 2e 33 2e 32 20  st pragma-8.3.2 
65b0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 50 52 41  {.  execsql {PRA
65c0: 47 4d 41 20 41 70 70 6c 69 63 61 74 69 6f 6e 5f  GMA Application_
65d0: 49 44 28 31 32 33 34 35 29 3b 20 50 52 41 47 4d  ID(12345); PRAGM
65e0: 41 20 61 70 70 6c 69 63 61 74 69 6f 6e 5f 69 64  A application_id
65f0: 3b 7d 0a 7d 20 7b 31 32 33 34 35 7d 0a 0a 23 20  ;}.} {12345}..# 
6600: 54 65 73 74 20 74 65 6d 70 5f 73 74 6f 72 65 20  Test temp_store 
6610: 61 6e 64 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64  and temp_store_d
6620: 69 72 65 63 74 6f 72 79 20 70 72 61 67 6d 61 73  irectory pragmas
6630: 0a 23 0a 69 66 63 61 70 61 62 6c 65 20 70 61 67  .#.ifcapable pag
6640: 65 72 5f 70 72 61 67 6d 61 73 20 7b 0a 64 6f 5f  er_pragmas {.do_
6650: 74 65 73 74 20 70 72 61 67 6d 61 2d 39 2e 31 20  test pragma-9.1 
6660: 7b 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 73  {.  db close.  s
6670: 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64  qlite3 db test.d
6680: 62 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  b.  execsql {.  
6690: 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74    PRAGMA temp_st
66a0: 6f 72 65 3b 0a 20 20 7d 0a 7d 20 7b 30 7d 0a 69  ore;.  }.} {0}.i
66b0: 66 20 7b 24 54 45 4d 50 5f 53 54 4f 52 45 3c 3d  f {$TEMP_STORE<=
66c0: 31 7d 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 70  1} {.  do_test p
66d0: 72 61 67 6d 61 2d 39 2e 31 2e 31 20 7b 0a 20 20  ragma-9.1.1 {.  
66e0: 20 20 63 68 65 63 6b 5f 74 65 6d 70 5f 73 74 6f    check_temp_sto
66f0: 72 65 0a 20 20 7d 20 7b 64 69 73 6b 7d 0a 7d 20  re.  } {disk}.} 
6700: 65 6c 73 65 20 7b 0a 20 20 64 6f 5f 74 65 73 74  else {.  do_test
6710: 20 70 72 61 67 6d 61 2d 39 2e 31 2e 31 20 7b 0a   pragma-9.1.1 {.
6720: 20 20 20 20 63 68 65 63 6b 5f 74 65 6d 70 5f 73      check_temp_s
6730: 74 6f 72 65 0a 20 20 7d 20 7b 6d 65 6d 6f 72 79  tore.  } {memory
6740: 7d 0a 7d 0a 0a 64 6f 5f 74 65 73 74 20 70 72 61  }.}..do_test pra
6750: 67 6d 61 2d 39 2e 32 20 7b 0a 20 20 64 62 20 63  gma-9.2 {.  db c
6760: 6c 6f 73 65 0a 20 20 73 71 6c 69 74 65 33 20 64  lose.  sqlite3 d
6770: 62 20 74 65 73 74 2e 64 62 0a 20 20 65 78 65 63  b test.db.  exec
6780: 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41  sql {.    PRAGMA
6790: 20 74 65 6d 70 5f 73 74 6f 72 65 3d 66 69 6c 65   temp_store=file
67a0: 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d  ;.    PRAGMA tem
67b0: 70 5f 73 74 6f 72 65 3b 0a 20 20 7d 0a 7d 20 7b  p_store;.  }.} {
67c0: 31 7d 0a 69 66 20 7b 24 54 45 4d 50 5f 53 54 4f  1}.if {$TEMP_STO
67d0: 52 45 3d 3d 33 7d 20 7b 0a 20 20 23 20 57 68 65  RE==3} {.  # Whe
67e0: 6e 20 54 45 4d 50 5f 53 54 4f 52 45 20 69 73 20  n TEMP_STORE is 
67f0: 33 2c 20 61 6c 77 61 79 73 20 75 73 65 20 6d 65  3, always use me
6800: 6d 6f 72 79 20 72 65 67 61 72 64 6c 65 73 73 20  mory regardless 
6810: 6f 66 20 70 72 61 67 6d 61 20 73 65 74 74 69 6e  of pragma settin
6820: 67 73 2e 0a 20 20 64 6f 5f 74 65 73 74 20 70 72  gs..  do_test pr
6830: 61 67 6d 61 2d 39 2e 32 2e 31 20 7b 0a 20 20 20  agma-9.2.1 {.   
6840: 20 63 68 65 63 6b 5f 74 65 6d 70 5f 73 74 6f 72   check_temp_stor
6850: 65 0a 20 20 7d 20 7b 6d 65 6d 6f 72 79 7d 0a 7d  e.  } {memory}.}
6860: 20 65 6c 73 65 20 7b 0a 20 20 64 6f 5f 74 65 73   else {.  do_tes
6870: 74 20 70 72 61 67 6d 61 2d 39 2e 32 2e 31 20 7b  t pragma-9.2.1 {
6880: 0a 20 20 20 20 63 68 65 63 6b 5f 74 65 6d 70 5f  .    check_temp_
6890: 73 74 6f 72 65 0a 20 20 7d 20 7b 64 69 73 6b 7d  store.  } {disk}
68a0: 0a 7d 0a 0a 64 6f 5f 74 65 73 74 20 70 72 61 67  .}..do_test prag
68b0: 6d 61 2d 39 2e 33 20 7b 0a 20 20 64 62 20 63 6c  ma-9.3 {.  db cl
68c0: 6f 73 65 0a 20 20 73 71 6c 69 74 65 33 20 64 62  ose.  sqlite3 db
68d0: 20 74 65 73 74 2e 64 62 0a 20 20 65 78 65 63 73   test.db.  execs
68e0: 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20  ql {.    PRAGMA 
68f0: 74 65 6d 70 5f 73 74 6f 72 65 3d 6d 65 6d 6f 72  temp_store=memor
6900: 79 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 74 65  y;.    PRAGMA te
6910: 6d 70 5f 73 74 6f 72 65 3b 0a 20 20 7d 0a 7d 20  mp_store;.  }.} 
6920: 7b 32 7d 0a 69 66 20 7b 24 54 45 4d 50 5f 53 54  {2}.if {$TEMP_ST
6930: 4f 52 45 3d 3d 30 7d 20 7b 0a 20 20 23 20 57 68  ORE==0} {.  # Wh
6940: 65 6e 20 54 45 4d 50 5f 53 54 4f 52 45 20 69 73  en TEMP_STORE is
6950: 20 30 2c 20 61 6c 77 61 79 73 20 75 73 65 20 74   0, always use t
6960: 68 65 20 64 69 73 6b 20 72 65 67 61 72 64 6c 65  he disk regardle
6970: 73 73 20 6f 66 20 70 72 61 67 6d 61 20 73 65 74  ss of pragma set
6980: 74 69 6e 67 73 2e 0a 20 20 64 6f 5f 74 65 73 74  tings..  do_test
6990: 20 70 72 61 67 6d 61 2d 39 2e 33 2e 31 20 7b 0a   pragma-9.3.1 {.
69a0: 20 20 20 20 63 68 65 63 6b 5f 74 65 6d 70 5f 73      check_temp_s
69b0: 74 6f 72 65 0a 20 20 7d 20 7b 64 69 73 6b 7d 0a  tore.  } {disk}.
69c0: 7d 20 65 6c 73 65 20 7b 0a 20 20 64 6f 5f 74 65  } else {.  do_te
69d0: 73 74 20 70 72 61 67 6d 61 2d 39 2e 33 2e 31 20  st pragma-9.3.1 
69e0: 7b 0a 20 20 20 20 63 68 65 63 6b 5f 74 65 6d 70  {.    check_temp
69f0: 5f 73 74 6f 72 65 0a 20 20 7d 20 7b 6d 65 6d 6f  _store.  } {memo
6a00: 72 79 7d 0a 7d 0a 0a 64 6f 5f 74 65 73 74 20 70  ry}.}..do_test p
6a10: 72 61 67 6d 61 2d 39 2e 34 20 7b 0a 20 20 65 78  ragma-9.4 {.  ex
6a20: 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47  ecsql {.    PRAG
6a30: 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69  MA temp_store_di
6a40: 72 65 63 74 6f 72 79 3b 0a 20 20 7d 0a 7d 20 7b  rectory;.  }.} {
6a50: 7d 0a 69 66 63 61 70 61 62 6c 65 20 77 73 64 20  }.ifcapable wsd 
6a60: 7b 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67  {.  do_test prag
6a70: 6d 61 2d 39 2e 35 20 7b 0a 20 20 20 20 73 65 74  ma-9.5 {.    set
6a80: 20 70 77 64 20 5b 73 74 72 69 6e 67 20 6d 61 70   pwd [string map
6a90: 20 7b 27 20 27 27 7d 20 5b 66 69 6c 65 20 6e 61   {' ''} [file na
6aa0: 74 69 76 65 6e 61 6d 65 20 5b 67 65 74 5f 70 77  tivename [get_pw
6ab0: 64 5d 5d 5d 0a 20 20 20 20 65 78 65 63 73 71 6c  d]]].    execsql
6ac0: 20 22 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20   ".      PRAGMA 
6ad0: 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63  temp_store_direc
6ae0: 74 6f 72 79 3d 27 24 70 77 64 27 3b 0a 20 20 20  tory='$pwd';.   
6af0: 20 22 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74   ".  } {}.  do_t
6b00: 65 73 74 20 70 72 61 67 6d 61 2d 39 2e 36 20 7b  est pragma-9.6 {
6b10: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 20 0a  .    execsql { .
6b20: 20 20 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d        PRAGMA tem
6b30: 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72  p_store_director
6b40: 79 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 5b 6c 69  y;.    }.  } [li
6b50: 73 74 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e  st [file nativen
6b60: 61 6d 65 20 5b 67 65 74 5f 70 77 64 5d 5d 5d 0a  ame [get_pwd]]].
6b70: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
6b80: 2d 39 2e 37 20 7b 0a 20 20 20 20 63 61 74 63 68  -9.7 {.    catch
6b90: 73 71 6c 20 7b 20 0a 20 20 20 20 20 20 50 52 41  sql { .      PRA
6ba0: 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64  GMA temp_store_d
6bb0: 69 72 65 63 74 6f 72 79 3d 27 2f 4e 4f 4e 2f 45  irectory='/NON/E
6bc0: 58 49 53 54 45 4e 54 2f 50 41 54 48 2f 46 4f 4f  XISTENT/PATH/FOO
6bd0: 42 41 52 27 3b 0a 20 20 20 20 7d 0a 20 20 7d 20  BAR';.    }.  } 
6be0: 7b 31 20 7b 6e 6f 74 20 61 20 77 72 69 74 61 62  {1 {not a writab
6bf0: 6c 65 20 64 69 72 65 63 74 6f 72 79 7d 7d 0a 20  le directory}}. 
6c00: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
6c10: 39 2e 38 20 7b 0a 20 20 20 20 65 78 65 63 73 71  9.8 {.    execsq
6c20: 6c 20 7b 20 0a 20 20 20 20 20 20 50 52 41 47 4d  l { .      PRAGM
6c30: 41 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72  A temp_store_dir
6c40: 65 63 74 6f 72 79 3d 27 27 3b 0a 20 20 20 20 7d  ectory='';.    }
6c50: 0a 20 20 7d 20 7b 7d 0a 20 20 69 66 20 7b 21 5b  .  } {}.  if {![
6c60: 69 6e 66 6f 20 65 78 69 73 74 73 20 54 45 4d 50  info exists TEMP
6c70: 5f 53 54 4f 52 45 5d 20 7c 7c 20 24 54 45 4d 50  _STORE] || $TEMP
6c80: 5f 53 54 4f 52 45 3c 3d 31 7d 20 7b 0a 20 20 20  _STORE<=1} {.   
6c90: 20 69 66 63 61 70 61 62 6c 65 20 74 65 6d 70 64   ifcapable tempd
6ca0: 62 20 7b 0a 20 20 20 20 20 20 64 6f 5f 74 65 73  b {.      do_tes
6cb0: 74 20 70 72 61 67 6d 61 2d 39 2e 39 20 7b 0a 20  t pragma-9.9 {. 
6cc0: 20 20 20 20 20 20 20 65 78 65 63 73 71 6c 20 7b         execsql {
6cd0: 20 0a 20 20 20 20 20 20 20 20 20 20 50 52 41 47   .          PRAG
6ce0: 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69  MA temp_store_di
6cf0: 72 65 63 74 6f 72 79 3b 0a 20 20 20 20 20 20 20  rectory;.       
6d00: 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73     PRAGMA temp_s
6d10: 74 6f 72 65 3d 46 49 4c 45 3b 0a 20 20 20 20 20  tore=FILE;.     
6d20: 20 20 20 20 20 43 52 45 41 54 45 20 54 45 4d 50       CREATE TEMP
6d30: 20 54 41 42 4c 45 20 74 65 6d 70 5f 73 74 6f 72   TABLE temp_stor
6d40: 65 5f 64 69 72 65 63 74 6f 72 79 5f 74 65 73 74  e_directory_test
6d50: 28 61 20 69 6e 74 65 67 65 72 29 3b 0a 20 20 20  (a integer);.   
6d60: 20 20 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e         INSERT IN
6d70: 54 4f 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69  TO temp_store_di
6d80: 72 65 63 74 6f 72 79 5f 74 65 73 74 20 76 61 6c  rectory_test val
6d90: 75 65 73 20 28 32 29 3b 0a 20 20 20 20 20 20 20  ues (2);.       
6da0: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
6db0: 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65   temp_store_dire
6dc0: 63 74 6f 72 79 5f 74 65 73 74 3b 0a 20 20 20 20  ctory_test;.    
6dd0: 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 20 7b 32      }.      } {2
6de0: 7d 0a 20 20 20 20 20 20 64 6f 5f 74 65 73 74 20  }.      do_test 
6df0: 70 72 61 67 6d 61 2d 39 2e 31 30 20 7b 0a 20 20  pragma-9.10 {.  
6e00: 20 20 20 20 20 20 63 61 74 63 68 73 71 6c 20 22        catchsql "
6e10: 0a 20 20 20 20 20 20 20 20 20 20 50 52 41 47 4d  .          PRAGM
6e20: 41 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72  A temp_store_dir
6e30: 65 63 74 6f 72 79 3d 27 24 70 77 64 27 3b 0a 20  ectory='$pwd';. 
6e40: 20 20 20 20 20 20 20 20 20 53 45 4c 45 43 54 20           SELECT 
6e50: 2a 20 46 52 4f 4d 20 74 65 6d 70 5f 73 74 6f 72  * FROM temp_stor
6e60: 65 5f 64 69 72 65 63 74 6f 72 79 5f 74 65 73 74  e_directory_test
6e70: 3b 0a 20 20 20 20 20 20 20 20 22 0a 20 20 20 20  ;.        ".    
6e80: 20 20 7d 20 7b 31 20 7b 6e 6f 20 73 75 63 68 20    } {1 {no such 
6e90: 74 61 62 6c 65 3a 20 74 65 6d 70 5f 73 74 6f 72  table: temp_stor
6ea0: 65 5f 64 69 72 65 63 74 6f 72 79 5f 74 65 73 74  e_directory_test
6eb0: 7d 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 64  }}.    }.  }.}.d
6ec0: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 39 2e  o_test pragma-9.
6ed0: 31 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  11 {.  execsql {
6ee0: 0a 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70  .    PRAGMA temp
6ef0: 5f 73 74 6f 72 65 20 3d 20 30 3b 0a 20 20 20 20  _store = 0;.    
6f00: 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72  PRAGMA temp_stor
6f10: 65 3b 0a 20 20 7d 0a 7d 20 7b 30 7d 0a 64 6f 5f  e;.  }.} {0}.do_
6f20: 74 65 73 74 20 70 72 61 67 6d 61 2d 39 2e 31 32  test pragma-9.12
6f30: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
6f40: 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73     PRAGMA temp_s
6f50: 74 6f 72 65 20 3d 20 31 3b 0a 20 20 20 20 50 52  tore = 1;.    PR
6f60: 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 3b  AGMA temp_store;
6f70: 0a 20 20 7d 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65  .  }.} {1}.do_te
6f80: 73 74 20 70 72 61 67 6d 61 2d 39 2e 31 33 20 7b  st pragma-9.13 {
6f90: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
6fa0: 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f   PRAGMA temp_sto
6fb0: 72 65 20 3d 20 32 3b 0a 20 20 20 20 50 52 41 47  re = 2;.    PRAG
6fc0: 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 3b 0a 20  MA temp_store;. 
6fd0: 20 7d 0a 7d 20 7b 32 7d 0a 64 6f 5f 74 65 73 74   }.} {2}.do_test
6fe0: 20 70 72 61 67 6d 61 2d 39 2e 31 34 20 7b 0a 20   pragma-9.14 {. 
6ff0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50   execsql {.    P
7000: 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65  RAGMA temp_store
7010: 20 3d 20 33 3b 0a 20 20 20 20 50 52 41 47 4d 41   = 3;.    PRAGMA
7020: 20 74 65 6d 70 5f 73 74 6f 72 65 3b 0a 20 20 7d   temp_store;.  }
7030: 0a 7d 20 7b 30 7d 0a 64 6f 5f 74 65 73 74 20 70  .} {0}.do_test p
7040: 72 61 67 6d 61 2d 39 2e 31 35 20 7b 0a 20 20 63  ragma-9.15 {.  c
7050: 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 42 45  atchsql {.    BE
7060: 47 49 4e 20 45 58 43 4c 55 53 49 56 45 3b 0a 20  GIN EXCLUSIVE;. 
7070: 20 20 20 43 52 45 41 54 45 20 54 45 4d 50 20 54     CREATE TEMP T
7080: 41 42 4c 45 20 74 65 6d 70 5f 74 61 62 6c 65 28  ABLE temp_table(
7090: 74 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  t);.    INSERT I
70a0: 4e 54 4f 20 74 65 6d 70 5f 74 61 62 6c 65 20 56  NTO temp_table V
70b0: 41 4c 55 45 53 28 27 76 61 6c 75 61 62 6c 65 20  ALUES('valuable 
70c0: 64 61 74 61 27 29 3b 0a 20 20 20 20 50 52 41 47  data');.    PRAG
70d0: 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 20 3d 20  MA temp_store = 
70e0: 31 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b 74 65 6d  1;.  }.} {1 {tem
70f0: 70 6f 72 61 72 79 20 73 74 6f 72 61 67 65 20 63  porary storage c
7100: 61 6e 6e 6f 74 20 62 65 20 63 68 61 6e 67 65 64  annot be changed
7110: 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 20 74   from within a t
7120: 72 61 6e 73 61 63 74 69 6f 6e 7d 7d 0a 64 6f 5f  ransaction}}.do_
7130: 74 65 73 74 20 70 72 61 67 6d 61 2d 39 2e 31 36  test pragma-9.16
7140: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
7150: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
7160: 20 74 65 6d 70 5f 74 61 62 6c 65 3b 0a 20 20 20   temp_table;.   
7170: 20 43 4f 4d 4d 49 54 3b 0a 20 20 7d 0a 7d 20 7b   COMMIT;.  }.} {
7180: 7b 76 61 6c 75 61 62 6c 65 20 64 61 74 61 7d 7d  {valuable data}}
7190: 0a 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  ..do_test pragma
71a0: 2d 39 2e 31 37 20 7b 0a 20 20 65 78 65 63 73 71  -9.17 {.  execsq
71b0: 6c 20 7b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  l {.    INSERT I
71c0: 4e 54 4f 20 74 65 6d 70 5f 74 61 62 6c 65 20 56  NTO temp_table V
71d0: 41 4c 55 45 53 28 27 76 61 6c 75 61 62 6c 65 20  ALUES('valuable 
71e0: 64 61 74 61 20 49 49 27 29 3b 0a 20 20 20 20 53  data II');.    S
71f0: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 65 6d  ELECT * FROM tem
7200: 70 5f 74 61 62 6c 65 3b 0a 20 20 7d 0a 7d 20 7b  p_table;.  }.} {
7210: 7b 76 61 6c 75 61 62 6c 65 20 64 61 74 61 7d 20  {valuable data} 
7220: 7b 76 61 6c 75 61 62 6c 65 20 64 61 74 61 20 49  {valuable data I
7230: 49 7d 7d 0a 0a 64 6f 5f 74 65 73 74 20 70 72 61  I}}..do_test pra
7240: 67 6d 61 2d 39 2e 31 38 20 7b 0a 20 20 73 65 74  gma-9.18 {.  set
7250: 20 72 63 20 5b 63 61 74 63 68 20 7b 0a 20 20 20   rc [catch {.   
7260: 20 64 62 20 65 76 61 6c 20 7b 53 45 4c 45 43 54   db eval {SELECT
7270: 20 74 20 46 52 4f 4d 20 74 65 6d 70 5f 74 61 62   t FROM temp_tab
7280: 6c 65 7d 20 7b 0a 20 20 20 20 20 20 65 78 65 63  le} {.      exec
7290: 73 71 6c 20 7b 70 72 61 67 6d 61 20 74 65 6d 70  sql {pragma temp
72a0: 5f 73 74 6f 72 65 20 3d 20 31 7d 0a 20 20 20 20  _store = 1}.    
72b0: 7d 0a 20 20 7d 20 6d 73 67 5d 0a 20 20 6c 69 73  }.  } msg].  lis
72c0: 74 20 24 72 63 20 24 6d 73 67 0a 7d 20 7b 31 20  t $rc $msg.} {1 
72d0: 7b 74 65 6d 70 6f 72 61 72 79 20 73 74 6f 72 61  {temporary stora
72e0: 67 65 20 63 61 6e 6e 6f 74 20 62 65 20 63 68 61  ge cannot be cha
72f0: 6e 67 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e  nged from within
7300: 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 7d 7d   a transaction}}
7310: 0a 0a 7d 20 3b 23 20 69 66 63 61 70 61 62 6c 65  ..} ;# ifcapable
7320: 20 70 61 67 65 72 5f 70 72 61 67 6d 61 73 0a 0a   pager_pragmas..
7330: 69 66 63 61 70 61 62 6c 65 20 74 72 69 67 67 65  ifcapable trigge
7340: 72 20 7b 0a 0a 64 6f 5f 74 65 73 74 20 70 72 61  r {..do_test pra
7350: 67 6d 61 2d 31 30 2e 30 20 7b 0a 20 20 63 61 74  gma-10.0 {.  cat
7360: 63 68 73 71 6c 20 7b 0a 20 20 20 20 44 52 4f 50  chsql {.    DROP
7370: 20 54 41 42 4c 45 20 6d 61 69 6e 2e 74 31 3b 0a   TABLE main.t1;.
7380: 20 20 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a    }.  execsql {.
7390: 20 20 20 20 50 52 41 47 4d 41 20 63 6f 75 6e 74      PRAGMA count
73a0: 5f 63 68 61 6e 67 65 73 20 3d 20 31 3b 0a 0a 20  _changes = 1;.. 
73b0: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
73c0: 74 31 28 61 20 50 52 49 4d 41 52 59 20 4b 45 59  t1(a PRIMARY KEY
73d0: 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41  );.    CREATE TA
73e0: 42 4c 45 20 74 31 5f 6d 69 72 72 6f 72 28 61 29  BLE t1_mirror(a)
73f0: 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42  ;.    CREATE TAB
7400: 4c 45 20 74 31 5f 6d 69 72 72 6f 72 32 28 61 29  LE t1_mirror2(a)
7410: 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54 52 49  ;.    CREATE TRI
7420: 47 47 45 52 20 74 31 5f 62 69 20 42 45 46 4f 52  GGER t1_bi BEFOR
7430: 45 20 49 4e 53 45 52 54 20 4f 4e 20 74 31 20 42  E INSERT ON t1 B
7440: 45 47 49 4e 20 0a 20 20 20 20 20 20 49 4e 53 45  EGIN .      INSE
7450: 52 54 20 49 4e 54 4f 20 74 31 5f 6d 69 72 72 6f  RT INTO t1_mirro
7460: 72 20 56 41 4c 55 45 53 28 6e 65 77 2e 61 29 3b  r VALUES(new.a);
7470: 0a 20 20 20 20 45 4e 44 3b 0a 20 20 20 20 43 52  .    END;.    CR
7480: 45 41 54 45 20 54 52 49 47 47 45 52 20 74 31 5f  EATE TRIGGER t1_
7490: 61 69 20 41 46 54 45 52 20 49 4e 53 45 52 54 20  ai AFTER INSERT 
74a0: 4f 4e 20 74 31 20 42 45 47 49 4e 20 0a 20 20 20  ON t1 BEGIN .   
74b0: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
74c0: 31 5f 6d 69 72 72 6f 72 32 20 56 41 4c 55 45 53  1_mirror2 VALUES
74d0: 28 6e 65 77 2e 61 29 3b 0a 20 20 20 20 45 4e 44  (new.a);.    END
74e0: 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54 52 49  ;.    CREATE TRI
74f0: 47 47 45 52 20 74 31 5f 62 75 20 42 45 46 4f 52  GGER t1_bu BEFOR
7500: 45 20 55 50 44 41 54 45 20 4f 4e 20 74 31 20 42  E UPDATE ON t1 B
7510: 45 47 49 4e 20 0a 20 20 20 20 20 20 55 50 44 41  EGIN .      UPDA
7520: 54 45 20 74 31 5f 6d 69 72 72 6f 72 20 53 45 54  TE t1_mirror SET
7530: 20 61 20 3d 20 6e 65 77 2e 61 20 57 48 45 52 45   a = new.a WHERE
7540: 20 61 20 3d 20 6f 6c 64 2e 61 3b 0a 20 20 20 20   a = old.a;.    
7550: 45 4e 44 3b 0a 20 20 20 20 43 52 45 41 54 45 20  END;.    CREATE 
7560: 54 52 49 47 47 45 52 20 74 31 5f 61 75 20 41 46  TRIGGER t1_au AF
7570: 54 45 52 20 55 50 44 41 54 45 20 4f 4e 20 74 31  TER UPDATE ON t1
7580: 20 42 45 47 49 4e 20 0a 20 20 20 20 20 20 55 50   BEGIN .      UP
7590: 44 41 54 45 20 74 31 5f 6d 69 72 72 6f 72 32 20  DATE t1_mirror2 
75a0: 53 45 54 20 61 20 3d 20 6e 65 77 2e 61 20 57 48  SET a = new.a WH
75b0: 45 52 45 20 61 20 3d 20 6f 6c 64 2e 61 3b 0a 20  ERE a = old.a;. 
75c0: 20 20 20 45 4e 44 3b 0a 20 20 20 20 43 52 45 41     END;.    CREA
75d0: 54 45 20 54 52 49 47 47 45 52 20 74 31 5f 62 64  TE TRIGGER t1_bd
75e0: 20 42 45 46 4f 52 45 20 44 45 4c 45 54 45 20 4f   BEFORE DELETE O
75f0: 4e 20 74 31 20 42 45 47 49 4e 20 0a 20 20 20 20  N t1 BEGIN .    
7600: 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 31    DELETE FROM t1
7610: 5f 6d 69 72 72 6f 72 20 57 48 45 52 45 20 61 20  _mirror WHERE a 
7620: 3d 20 6f 6c 64 2e 61 3b 0a 20 20 20 20 45 4e 44  = old.a;.    END
7630: 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54 52 49  ;.    CREATE TRI
7640: 47 47 45 52 20 74 31 5f 61 64 20 41 46 54 45 52  GGER t1_ad AFTER
7650: 20 44 45 4c 45 54 45 20 4f 4e 20 74 31 20 42 45   DELETE ON t1 BE
7660: 47 49 4e 20 0a 20 20 20 20 20 20 44 45 4c 45 54  GIN .      DELET
7670: 45 20 46 52 4f 4d 20 74 31 5f 6d 69 72 72 6f 72  E FROM t1_mirror
7680: 32 20 57 48 45 52 45 20 61 20 3d 20 6f 6c 64 2e  2 WHERE a = old.
7690: 61 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20 7d 0a  a;.    END;.  }.
76a0: 7d 20 7b 7d 0a 0a 64 6f 5f 74 65 73 74 20 70 72  } {}..do_test pr
76b0: 61 67 6d 61 2d 31 30 2e 31 20 7b 0a 20 20 65 78  agma-10.1 {.  ex
76c0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 49 4e 53 45  ecsql {.    INSE
76d0: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
76e0: 53 28 72 61 6e 64 73 74 72 28 31 30 2c 31 30 29  S(randstr(10,10)
76f0: 29 3b 0a 20 20 7d 0a 7d 20 7b 31 7d 0a 64 6f 5f  );.  }.} {1}.do_
7700: 74 65 73 74 20 70 72 61 67 6d 61 2d 31 30 2e 32  test pragma-10.2
7710: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
7720: 20 20 20 55 50 44 41 54 45 20 74 31 20 53 45 54     UPDATE t1 SET
7730: 20 61 20 3d 20 72 61 6e 64 73 74 72 28 31 30 2c   a = randstr(10,
7740: 31 30 29 3b 0a 20 20 7d 0a 7d 20 7b 31 7d 0a 64  10);.  }.} {1}.d
7750: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 30  o_test pragma-10
7760: 2e 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .3 {.  execsql {
7770: 0a 20 20 20 20 44 45 4c 45 54 45 20 46 52 4f 4d  .    DELETE FROM
7780: 20 74 31 3b 0a 20 20 7d 0a 7d 20 7b 31 7d 0a 0a   t1;.  }.} {1}..
7790: 7d 20 3b 23 20 69 66 63 61 70 61 62 6c 65 20 74  } ;# ifcapable t
77a0: 72 69 67 67 65 72 0a 0a 69 66 63 61 70 61 62 6c  rigger..ifcapabl
77b0: 65 20 73 63 68 65 6d 61 5f 70 72 61 67 6d 61 73  e schema_pragmas
77c0: 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61   {.  do_test pra
77d0: 67 6d 61 2d 31 31 2e 31 20 7b 0a 20 20 20 20 65  gma-11.1 {.    e
77e0: 78 65 63 73 71 6c 32 20 7b 0a 20 20 20 20 20 20  xecsql2 {.      
77f0: 70 72 61 67 6d 61 20 63 6f 6c 6c 61 74 69 6f 6e  pragma collation
7800: 5f 6c 69 73 74 3b 0a 20 20 20 20 7d 0a 20 20 7d  _list;.    }.  }
7810: 20 7b 73 65 71 20 30 20 6e 61 6d 65 20 52 54 52   {seq 0 name RTR
7820: 49 4d 20 73 65 71 20 31 20 6e 61 6d 65 20 4e 4f  IM seq 1 name NO
7830: 43 41 53 45 20 73 65 71 20 32 20 6e 61 6d 65 20  CASE seq 2 name 
7840: 42 49 4e 41 52 59 7d 0a 20 20 64 6f 5f 74 65 73  BINARY}.  do_tes
7850: 74 20 70 72 61 67 6d 61 2d 31 31 2e 32 20 7b 0a  t pragma-11.2 {.
7860: 20 20 20 20 64 62 20 63 6f 6c 6c 61 74 65 20 4e      db collate N
7870: 65 77 5f 43 6f 6c 6c 61 74 69 6f 6e 20 62 6c 61  ew_Collation bla
7880: 68 2e 2e 2e 0a 20 20 20 20 65 78 65 63 73 71 6c  h....    execsql
7890: 20 7b 0a 20 20 20 20 20 20 70 72 61 67 6d 61 20   {.      pragma 
78a0: 63 6f 6c 6c 61 74 69 6f 6e 5f 6c 69 73 74 3b 0a  collation_list;.
78b0: 20 20 20 20 7d 0a 20 20 7d 20 7b 30 20 4e 65 77      }.  } {0 New
78c0: 5f 43 6f 6c 6c 61 74 69 6f 6e 20 31 20 52 54 52  _Collation 1 RTR
78d0: 49 4d 20 32 20 4e 4f 43 41 53 45 20 33 20 42 49  IM 2 NOCASE 3 BI
78e0: 4e 41 52 59 7d 0a 7d 0a 0a 69 66 63 61 70 61 62  NARY}.}..ifcapab
78f0: 6c 65 20 73 63 68 65 6d 61 5f 70 72 61 67 6d 61  le schema_pragma
7900: 73 26 26 74 65 6d 70 64 62 20 7b 0a 20 20 64 6f  s&&tempdb {.  do
7910: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 32 2e  _test pragma-12.
7920: 31 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 20  1 {.    sqlite3 
7930: 64 62 32 20 74 65 73 74 2e 64 62 0a 20 20 20 20  db2 test.db.    
7940: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
7950: 50 52 41 47 4d 41 20 74 65 6d 70 2e 74 61 62 6c  PRAGMA temp.tabl
7960: 65 5f 69 6e 66 6f 28 27 61 62 63 27 29 3b 0a 20  e_info('abc');. 
7970: 20 20 20 7d 20 64 62 32 0a 20 20 7d 20 7b 7d 0a     } db2.  } {}.
7980: 20 20 64 62 32 20 63 6c 6f 73 65 0a 0a 20 20 64    db2 close..  d
7990: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 32  o_test pragma-12
79a0: 2e 32 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  .2 {.    sqlite3
79b0: 20 64 62 32 20 74 65 73 74 2e 64 62 0a 20 20 20   db2 test.db.   
79c0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20   execsql {.     
79d0: 20 50 52 41 47 4d 41 20 74 65 6d 70 2e 64 65 66   PRAGMA temp.def
79e0: 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65 20  ault_cache_size 
79f0: 3d 20 32 30 30 3b 0a 20 20 20 20 20 20 50 52 41  = 200;.      PRA
7a00: 47 4d 41 20 74 65 6d 70 2e 64 65 66 61 75 6c 74  GMA temp.default
7a10: 5f 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20  _cache_size;.   
7a20: 20 7d 20 64 62 32 0a 20 20 7d 20 7b 32 30 30 7d   } db2.  } {200}
7a30: 0a 20 20 64 62 32 20 63 6c 6f 73 65 0a 0a 20 20  .  db2 close..  
7a40: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31  do_test pragma-1
7a50: 32 2e 33 20 7b 0a 20 20 20 20 73 71 6c 69 74 65  2.3 {.    sqlite
7a60: 33 20 64 62 32 20 74 65 73 74 2e 64 62 0a 20 20  3 db2 test.db.  
7a70: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
7a80: 20 20 50 52 41 47 4d 41 20 74 65 6d 70 2e 63 61    PRAGMA temp.ca
7a90: 63 68 65 5f 73 69 7a 65 20 3d 20 34 30 30 3b 0a  che_size = 400;.
7aa0: 20 20 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d        PRAGMA tem
7ab0: 70 2e 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20  p.cache_size;.  
7ac0: 20 20 7d 20 64 62 32 0a 20 20 7d 20 7b 34 30 30    } db2.  } {400
7ad0: 7d 0a 20 20 64 62 32 20 63 6c 6f 73 65 0a 7d 0a  }.  db2 close.}.
7ae0: 0a 69 66 63 61 70 61 62 6c 65 20 62 6c 6f 62 6c  .ifcapable blobl
7af0: 69 74 20 7b 0a 0a 64 6f 5f 74 65 73 74 20 70 72  it {..do_test pr
7b00: 61 67 6d 61 2d 31 33 2e 31 20 7b 0a 20 20 65 78  agma-13.1 {.  ex
7b10: 65 63 73 71 6c 20 7b 0a 20 20 20 20 44 52 4f 50  ecsql {.    DROP
7b20: 20 54 41 42 4c 45 20 49 46 20 45 58 49 53 54 53   TABLE IF EXISTS
7b30: 20 74 34 3b 0a 20 20 20 20 50 52 41 47 4d 41 20   t4;.    PRAGMA 
7b40: 76 64 62 65 5f 74 72 61 63 65 3d 6f 6e 3b 0a 20  vdbe_trace=on;. 
7b50: 20 20 20 50 52 41 47 4d 41 20 76 64 62 65 5f 6c     PRAGMA vdbe_l
7b60: 69 73 74 69 6e 67 3d 6f 6e 3b 0a 20 20 20 20 50  isting=on;.    P
7b70: 52 41 47 4d 41 20 73 71 6c 5f 74 72 61 63 65 3d  RAGMA sql_trace=
7b80: 6f 6e 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54  on;.    CREATE T
7b90: 41 42 4c 45 20 74 34 28 61 20 49 4e 54 45 47 45  ABLE t4(a INTEGE
7ba0: 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 62 29  R PRIMARY KEY,b)
7bb0: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
7bc0: 4f 20 74 34 28 62 29 20 56 41 4c 55 45 53 28 78  O t4(b) VALUES(x
7bd0: 27 30 31 32 33 34 35 36 37 38 39 61 62 63 64 65  '0123456789abcde
7be0: 66 30 31 32 33 34 35 36 37 38 39 61 62 63 64 65  f0123456789abcde
7bf0: 66 30 31 32 33 34 35 36 37 38 39 27 29 3b 0a 20  f0123456789');. 
7c00: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
7c10: 34 28 62 29 20 56 41 4c 55 45 53 28 72 61 6e 64  4(b) VALUES(rand
7c20: 73 74 72 28 33 30 2c 33 30 29 29 3b 0a 20 20 20  str(30,30));.   
7c30: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 34 28   INSERT INTO t4(
7c40: 62 29 20 56 41 4c 55 45 53 28 31 2e 32 33 34 35  b) VALUES(1.2345
7c50: 36 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  6);.    INSERT I
7c60: 4e 54 4f 20 74 34 28 62 29 20 56 41 4c 55 45 53  NTO t4(b) VALUES
7c70: 28 4e 55 4c 4c 29 3b 0a 20 20 20 20 49 4e 53 45  (NULL);.    INSE
7c80: 52 54 20 49 4e 54 4f 20 74 34 28 62 29 20 56 41  RT INTO t4(b) VA
7c90: 4c 55 45 53 28 30 29 3b 0a 20 20 20 20 49 4e 53  LUES(0);.    INS
7ca0: 45 52 54 20 49 4e 54 4f 20 74 34 28 62 29 20 53  ERT INTO t4(b) S
7cb0: 45 4c 45 43 54 20 62 7c 7c 62 7c 7c 62 7c 7c 62  ELECT b||b||b||b
7cc0: 20 46 52 4f 4d 20 74 34 3b 0a 20 20 20 20 53 45   FROM t4;.    SE
7cd0: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 34 3b 0a  LECT * FROM t4;.
7ce0: 20 20 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a    }.  execsql {.
7cf0: 20 20 20 20 50 52 41 47 4d 41 20 76 64 62 65 5f      PRAGMA vdbe_
7d00: 74 72 61 63 65 3d 6f 66 66 3b 0a 20 20 20 20 50  trace=off;.    P
7d10: 52 41 47 4d 41 20 76 64 62 65 5f 6c 69 73 74 69  RAGMA vdbe_listi
7d20: 6e 67 3d 6f 66 66 3b 0a 20 20 20 20 50 52 41 47  ng=off;.    PRAG
7d30: 4d 41 20 73 71 6c 5f 74 72 61 63 65 3d 6f 66 66  MA sql_trace=off
7d40: 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a 7d 20 3b 23  ;.  }.} {}..} ;#
7d50: 20 69 66 63 61 70 61 62 6c 65 20 62 6c 6f 62 6c   ifcapable blobl
7d60: 69 74 20 0a 0a 69 66 63 61 70 61 62 6c 65 20 70  it ..ifcapable p
7d70: 61 67 65 72 5f 70 72 61 67 6d 61 73 20 7b 0a 20  ager_pragmas {. 
7d80: 20 64 62 20 63 6c 6f 73 65 0a 20 20 66 6f 72 63   db close.  forc
7d90: 65 64 65 6c 65 74 65 20 74 65 73 74 2e 64 62 0a  edelete test.db.
7da0: 20 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73    sqlite3 db tes
7db0: 74 2e 64 62 0a 20 0a 20 20 23 20 45 56 49 44 45  t.db. .  # EVIDE
7dc0: 4e 43 45 2d 4f 46 3a 20 52 2d 31 33 39 30 35 2d  NCE-OF: R-13905-
7dd0: 32 36 33 31 32 20 50 52 41 47 4d 41 20 64 61 74  26312 PRAGMA dat
7de0: 61 62 61 73 65 2e 70 61 67 65 5f 63 6f 75 6e 74  abase.page_count
7df0: 3b 20 52 65 74 75 72 6e 20 74 68 65 0a 20 20 23  ; Return the.  #
7e00: 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66   total number of
7e10: 20 70 61 67 65 73 20 69 6e 20 74 68 65 20 64 61   pages in the da
7e20: 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 20 20 23  tabase file..  #
7e30: 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .  do_test pragm
7e40: 61 2d 31 34 2e 31 20 7b 0a 20 20 20 20 65 78 65  a-14.1 {.    exe
7e50: 63 73 71 6c 20 7b 20 70 72 61 67 6d 61 20 61 75  csql { pragma au
7e60: 74 6f 5f 76 61 63 75 75 6d 20 3d 20 30 20 7d 0a  to_vacuum = 0 }.
7e70: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 20 70 72      execsql { pr
7e80: 61 67 6d 61 20 70 61 67 65 5f 63 6f 75 6e 74 3b  agma page_count;
7e90: 20 70 72 61 67 6d 61 20 6d 61 69 6e 2e 70 61 67   pragma main.pag
7ea0: 65 5f 63 6f 75 6e 74 20 7d 0a 20 20 7d 20 7b 30  e_count }.  } {0
7eb0: 20 30 7d 0a 0a 20 20 64 6f 5f 74 65 73 74 20 70   0}..  do_test p
7ec0: 72 61 67 6d 61 2d 31 34 2e 32 20 7b 0a 20 20 20  ragma-14.2 {.   
7ed0: 20 65 78 65 63 73 71 6c 20 7b 20 0a 20 20 20 20   execsql { .    
7ee0: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 61    CREATE TABLE a
7ef0: 62 63 28 61 2c 20 62 2c 20 63 29 3b 0a 20 20 20  bc(a, b, c);.   
7f00: 20 20 20 50 52 41 47 4d 41 20 70 61 67 65 5f 63     PRAGMA page_c
7f10: 6f 75 6e 74 3b 0a 20 20 20 20 20 20 50 52 41 47  ount;.      PRAG
7f20: 4d 41 20 6d 61 69 6e 2e 70 61 67 65 5f 63 6f 75  MA main.page_cou
7f30: 6e 74 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41  nt;.      PRAGMA
7f40: 20 74 65 6d 70 2e 70 61 67 65 5f 63 6f 75 6e 74   temp.page_count
7f50: 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 32 20 32  ;.    }.  } {2 2
7f60: 20 30 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72   0}.  do_test pr
7f70: 61 67 6d 61 2d 31 34 2e 32 75 63 20 7b 0a 20 20  agma-14.2uc {.  
7f80: 20 20 65 78 65 63 73 71 6c 20 7b 70 72 61 67 6d    execsql {pragm
7f90: 61 20 50 41 47 45 5f 43 4f 55 4e 54 7d 0a 20 20  a PAGE_COUNT}.  
7fa0: 7d 20 7b 32 7d 0a 0a 20 20 64 6f 5f 74 65 73 74  } {2}..  do_test
7fb0: 20 70 72 61 67 6d 61 2d 31 34 2e 33 20 7b 0a 20   pragma-14.3 {. 
7fc0: 20 20 20 65 78 65 63 73 71 6c 20 7b 20 0a 20 20     execsql { .  
7fd0: 20 20 20 20 42 45 47 49 4e 3b 0a 20 20 20 20 20      BEGIN;.     
7fe0: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 64 65   CREATE TABLE de
7ff0: 66 28 61 2c 20 62 2c 20 63 29 3b 0a 20 20 20 20  f(a, b, c);.    
8000: 20 20 50 52 41 47 4d 41 20 70 61 67 65 5f 63 6f    PRAGMA page_co
8010: 75 6e 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b  unt;.    }.  } {
8020: 33 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61  3}.  do_test pra
8030: 67 6d 61 2d 31 34 2e 33 75 63 20 7b 0a 20 20 20  gma-14.3uc {.   
8040: 20 65 78 65 63 73 71 6c 20 7b 70 72 61 67 6d 61   execsql {pragma
8050: 20 50 41 47 45 5f 43 4f 55 4e 54 7d 0a 20 20 7d   PAGE_COUNT}.  }
8060: 20 7b 33 7d 0a 0a 20 20 64 6f 5f 74 65 73 74 20   {3}..  do_test 
8070: 70 72 61 67 6d 61 2d 31 34 2e 34 20 7b 0a 20 20  pragma-14.4 {.  
8080: 20 20 73 65 74 20 70 61 67 65 5f 73 69 7a 65 20    set page_size 
8090: 5b 64 62 20 6f 6e 65 20 7b 70 72 61 67 6d 61 20  [db one {pragma 
80a0: 70 61 67 65 5f 73 69 7a 65 7d 5d 0a 20 20 20 20  page_size}].    
80b0: 65 78 70 72 20 5b 66 69 6c 65 20 73 69 7a 65 20  expr [file size 
80c0: 74 65 73 74 2e 64 62 5d 20 2f 20 24 70 61 67 65  test.db] / $page
80d0: 5f 73 69 7a 65 0a 20 20 7d 20 7b 32 7d 0a 0a 20  _size.  } {2}.. 
80e0: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
80f0: 31 34 2e 35 20 7b 0a 20 20 20 20 65 78 65 63 73  14.5 {.    execs
8100: 71 6c 20 7b 0a 20 20 20 20 20 20 52 4f 4c 4c 42  ql {.      ROLLB
8110: 41 43 4b 3b 0a 20 20 20 20 20 20 50 52 41 47 4d  ACK;.      PRAGM
8120: 41 20 70 61 67 65 5f 63 6f 75 6e 74 3b 0a 20 20  A page_count;.  
8130: 20 20 7d 0a 20 20 7d 20 7b 32 7d 0a 0a 20 20 64    }.  } {2}..  d
8140: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 34  o_test pragma-14
8150: 2e 36 20 7b 0a 20 20 20 20 66 6f 72 63 65 64 65  .6 {.    forcede
8160: 6c 65 74 65 20 74 65 73 74 32 2e 64 62 0a 20 20  lete test2.db.  
8170: 20 20 73 71 6c 69 74 65 33 20 64 62 32 20 74 65    sqlite3 db2 te
8180: 73 74 32 2e 64 62 0a 20 20 20 20 65 78 65 63 73  st2.db.    execs
8190: 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d  ql {.      PRAGM
81a0: 41 20 61 75 74 6f 5f 76 61 63 75 75 6d 20 3d 20  A auto_vacuum = 
81b0: 30 3b 0a 20 20 20 20 20 20 43 52 45 41 54 45 20  0;.      CREATE 
81c0: 54 41 42 4c 45 20 74 31 28 61 2c 20 62 2c 20 63  TABLE t1(a, b, c
81d0: 29 3b 0a 20 20 20 20 20 20 43 52 45 41 54 45 20  );.      CREATE 
81e0: 54 41 42 4c 45 20 74 32 28 61 2c 20 62 2c 20 63  TABLE t2(a, b, c
81f0: 29 3b 0a 20 20 20 20 20 20 43 52 45 41 54 45 20  );.      CREATE 
8200: 54 41 42 4c 45 20 74 33 28 61 2c 20 62 2c 20 63  TABLE t3(a, b, c
8210: 29 3b 0a 20 20 20 20 20 20 43 52 45 41 54 45 20  );.      CREATE 
8220: 54 41 42 4c 45 20 74 34 28 61 2c 20 62 2c 20 63  TABLE t4(a, b, c
8230: 29 3b 0a 20 20 20 20 7d 20 64 62 32 0a 20 20 20  );.    } db2.   
8240: 20 64 62 32 20 63 6c 6f 73 65 0a 20 20 20 20 65   db2 close.    e
8250: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 41  xecsql {.      A
8260: 54 54 41 43 48 20 27 74 65 73 74 32 2e 64 62 27  TTACH 'test2.db'
8270: 20 41 53 20 61 75 78 3b 0a 20 20 20 20 20 20 50   AS aux;.      P
8280: 52 41 47 4d 41 20 61 75 78 2e 70 61 67 65 5f 63  RAGMA aux.page_c
8290: 6f 75 6e 74 3b 0a 20 20 20 20 7d 20 0a 20 20 7d  ount;.    } .  }
82a0: 20 7b 35 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70   {5}.  do_test p
82b0: 72 61 67 6d 61 2d 31 34 2e 36 75 63 20 7b 0a 20  ragma-14.6uc {. 
82c0: 20 20 20 65 78 65 63 73 71 6c 20 7b 70 72 61 67     execsql {prag
82d0: 6d 61 20 41 55 58 2e 50 41 47 45 5f 43 4f 55 4e  ma AUX.PAGE_COUN
82e0: 54 7d 0a 20 20 7d 20 7b 35 7d 0a 7d 0a 0a 23 20  T}.  } {5}.}..# 
82f0: 54 65 73 74 20 74 68 61 74 20 74 68 65 20 76 61  Test that the va
8300: 6c 75 65 20 73 65 74 20 75 73 69 6e 67 20 74 68  lue set using th
8310: 65 20 63 61 63 68 65 5f 73 69 7a 65 20 70 72 61  e cache_size pra
8320: 67 6d 61 20 69 73 20 6e 6f 74 20 72 65 73 65 74  gma is not reset
8330: 20 77 68 65 6e 20 74 68 65 0a 23 20 73 63 68 65   when the.# sche
8340: 6d 61 20 69 73 20 72 65 6c 6f 61 64 65 64 2e 0a  ma is reloaded..
8350: 23 0a 69 66 63 61 70 61 62 6c 65 20 70 61 67 65  #.ifcapable page
8360: 72 5f 70 72 61 67 6d 61 73 20 7b 0a 20 20 64 62  r_pragmas {.  db
8370: 20 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74 65 33   close.  sqlite3
8380: 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20 64 6f   db test.db.  do
8390: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 35 2e  _test pragma-15.
83a0: 31 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  1 {.    execsql 
83b0: 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 63  {.      PRAGMA c
83c0: 61 63 68 65 5f 73 69 7a 65 3d 35 39 3b 0a 20 20  ache_size=59;.  
83d0: 20 20 20 20 50 52 41 47 4d 41 20 63 61 63 68 65      PRAGMA cache
83e0: 5f 73 69 7a 65 3b 0a 20 20 20 20 7d 0a 20 20 7d  _size;.    }.  }
83f0: 20 7b 35 39 7d 0a 20 20 64 6f 5f 74 65 73 74 20   {59}.  do_test 
8400: 70 72 61 67 6d 61 2d 31 35 2e 32 20 7b 0a 20 20  pragma-15.2 {.  
8410: 20 20 73 71 6c 69 74 65 33 20 64 62 32 20 74 65    sqlite3 db2 te
8420: 73 74 2e 64 62 0a 20 20 20 20 65 78 65 63 73 71  st.db.    execsq
8430: 6c 20 7b 0a 20 20 20 20 20 20 43 52 45 41 54 45  l {.      CREATE
8440: 20 54 41 42 4c 45 20 6e 65 77 74 61 62 6c 65 28   TABLE newtable(
8450: 61 2c 20 62 2c 20 63 29 3b 0a 20 20 20 20 7d 20  a, b, c);.    } 
8460: 64 62 32 0a 20 20 20 20 64 62 32 20 63 6c 6f 73  db2.    db2 clos
8470: 65 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65  e.  } {}.  do_te
8480: 73 74 20 70 72 61 67 6d 61 2d 31 35 2e 33 20 7b  st pragma-15.3 {
8490: 0a 20 20 20 20 23 20 45 76 61 6c 75 61 74 69 6e  .    # Evaluatin
84a0: 67 20 74 68 69 73 20 73 74 61 74 65 6d 65 6e 74  g this statement
84b0: 20 77 69 6c 6c 20 63 61 75 73 65 20 74 68 65 20   will cause the 
84c0: 73 63 68 65 6d 61 20 74 6f 20 62 65 20 72 65 6c  schema to be rel
84d0: 6f 61 64 65 64 20 28 62 65 63 61 75 73 65 0a 20  oaded (because. 
84e0: 20 20 20 23 20 74 68 65 20 73 63 68 65 6d 61 20     # the schema 
84f0: 77 61 73 20 63 68 61 6e 67 65 64 20 62 79 20 61  was changed by a
8500: 6e 6f 74 68 65 72 20 63 6f 6e 6e 65 63 74 69 6f  nother connectio
8510: 6e 20 69 6e 20 70 72 61 67 6d 61 2d 31 35 2e 32  n in pragma-15.2
8520: 29 2e 20 41 74 20 6f 6e 65 0a 20 20 20 20 23 20  ). At one.    # 
8530: 70 6f 69 6e 74 20 74 68 65 72 65 20 77 61 73 20  point there was 
8540: 61 20 62 75 67 20 74 68 61 74 20 72 65 73 65 74  a bug that reset
8550: 20 74 68 65 20 63 61 63 68 65 5f 73 69 7a 65 20   the cache_size 
8560: 74 6f 20 69 74 73 20 64 65 66 61 75 6c 74 20 76  to its default v
8570: 61 6c 75 65 0a 20 20 20 20 23 20 77 68 65 6e 20  alue.    # when 
8580: 74 68 69 73 20 68 61 70 70 65 6e 65 64 2e 20 0a  this happened. .
8590: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 20 53 45      execsql { SE
85a0: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 73 71 6c 69  LECT * FROM sqli
85b0: 74 65 5f 6d 61 73 74 65 72 20 7d 0a 20 20 20 20  te_master }.    
85c0: 65 78 65 63 73 71 6c 20 7b 20 50 52 41 47 4d 41  execsql { PRAGMA
85d0: 20 63 61 63 68 65 5f 73 69 7a 65 20 7d 0a 20 20   cache_size }.  
85e0: 7d 20 7b 35 39 7d 0a 7d 0a 0a 23 20 52 65 73 65  } {59}.}..# Rese
85f0: 74 20 74 68 65 20 73 71 6c 69 74 65 33 5f 74 65  t the sqlite3_te
8600: 6d 70 5f 64 69 72 65 63 74 6f 72 79 20 76 61 72  mp_directory var
8610: 69 61 62 6c 65 20 66 6f 72 20 74 68 65 20 6e 65  iable for the ne
8620: 78 74 20 72 75 6e 20 6f 66 20 74 65 73 74 73 3a  xt run of tests:
8630: 0a 73 71 6c 69 74 65 33 20 64 62 58 20 3a 6d 65  .sqlite3 dbX :me
8640: 6d 6f 72 79 3a 0a 64 62 58 20 65 76 61 6c 20 7b  mory:.dbX eval {
8650: 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72  PRAGMA temp_stor
8660: 65 5f 64 69 72 65 63 74 6f 72 79 20 3d 20 22 22  e_directory = ""
8670: 7d 0a 64 62 58 20 63 6c 6f 73 65 0a 0a 69 66 63  }.dbX close..ifc
8680: 61 70 61 62 6c 65 20 6c 6f 63 6b 5f 70 72 6f 78  apable lock_prox
8690: 79 5f 70 72 61 67 6d 61 73 26 26 70 72 65 66 65  y_pragmas&&prefe
86a0: 72 5f 70 72 6f 78 79 5f 6c 6f 63 6b 69 6e 67 20  r_proxy_locking 
86b0: 7b 0a 20 20 73 65 74 20 73 71 6c 69 74 65 5f 68  {.  set sqlite_h
86c0: 6f 73 74 69 64 5f 6e 75 6d 20 31 0a 0a 20 20 73  ostid_num 1..  s
86d0: 65 74 20 75 73 69 6e 67 5f 70 72 6f 78 79 20 30  et using_proxy 0
86e0: 0a 20 20 66 6f 72 65 61 63 68 20 7b 6e 61 6d 65  .  foreach {name
86f0: 20 76 61 6c 75 65 7d 20 5b 61 72 72 61 79 20 67   value} [array g
8700: 65 74 20 65 6e 76 20 53 51 4c 49 54 45 5f 46 4f  et env SQLITE_FO
8710: 52 43 45 5f 50 52 4f 58 59 5f 4c 4f 43 4b 49 4e  RCE_PROXY_LOCKIN
8720: 47 5d 20 7b 0a 20 20 20 20 73 65 74 20 75 73 69  G] {.    set usi
8730: 6e 67 5f 70 72 6f 78 79 20 24 76 61 6c 75 65 0a  ng_proxy $value.
8740: 20 20 7d 0a 0a 20 20 23 20 54 65 73 74 20 74 68    }..  # Test th
8750: 65 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c  e lock_proxy_fil
8760: 65 20 70 72 61 67 6d 61 73 2e 0a 20 20 23 0a 20  e pragmas..  #. 
8770: 20 64 62 20 63 6c 6f 73 65 0a 20 20 73 65 74 20   db close.  set 
8780: 65 6e 76 28 53 51 4c 49 54 45 5f 46 4f 52 43 45  env(SQLITE_FORCE
8790: 5f 50 52 4f 58 59 5f 4c 4f 43 4b 49 4e 47 29 20  _PROXY_LOCKING) 
87a0: 22 30 22 0a 0a 20 20 73 71 6c 69 74 65 33 20 64  "0"..  sqlite3 d
87b0: 62 20 74 65 73 74 2e 64 62 0a 20 20 64 6f 5f 74  b test.db.  do_t
87c0: 65 73 74 20 70 72 61 67 6d 61 2d 31 36 2e 31 20  est pragma-16.1 
87d0: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a  {.    execsql {.
87e0: 20 20 20 20 20 20 50 52 41 47 4d 41 20 6c 6f 63        PRAGMA loc
87f0: 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 3d 22 6d 79  k_proxy_file="my
8800: 6c 69 74 74 6c 65 70 72 6f 78 79 22 3b 0a 20 20  littleproxy";.  
8810: 20 20 20 20 73 65 6c 65 63 74 20 2a 20 66 72 6f      select * fro
8820: 6d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 3b  m sqlite_master;
8830: 0a 20 20 20 20 7d 0a 20 20 20 20 65 78 65 63 73  .    }.    execs
8840: 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d  ql {.      PRAGM
8850: 41 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c  A lock_proxy_fil
8860: 65 3b 0a 20 20 20 20 7d 20 0a 20 20 7d 20 7b 6d  e;.    } .  } {m
8870: 79 6c 69 74 74 6c 65 70 72 6f 78 79 7d 0a 0a 20  ylittleproxy}.. 
8880: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
8890: 31 36 2e 32 20 7b 0a 20 20 20 20 73 71 6c 69 74  16.2 {.    sqlit
88a0: 65 33 20 64 62 32 20 74 65 73 74 2e 64 62 0a 20  e3 db2 test.db. 
88b0: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
88c0: 20 20 20 50 52 41 47 4d 41 20 6c 6f 63 6b 5f 70     PRAGMA lock_p
88d0: 72 6f 78 79 5f 66 69 6c 65 3d 22 6d 79 6c 69 74  roxy_file="mylit
88e0: 74 6c 65 70 72 6f 78 79 22 3b 0a 20 20 20 20 7d  tleproxy";.    }
88f0: 20 64 62 32 0a 20 20 7d 20 7b 7d 0a 0a 20 20 64   db2.  } {}..  d
8900: 62 32 20 63 6c 6f 73 65 0a 20 20 64 6f 5f 74 65  b2 close.  do_te
8910: 73 74 20 70 72 61 67 6d 61 2d 31 36 2e 32 2e 31  st pragma-16.2.1
8920: 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 20 64   {.    sqlite3 d
8930: 62 32 20 74 65 73 74 2e 64 62 0a 20 20 20 20 65  b2 test.db.    e
8940: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50  xecsql {.      P
8950: 52 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78 79  RAGMA lock_proxy
8960: 5f 66 69 6c 65 3d 22 3a 61 75 74 6f 3a 22 3b 0a  _file=":auto:";.
8970: 20 20 20 20 20 20 73 65 6c 65 63 74 20 2a 20 66        select * f
8980: 72 6f 6d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  rom sqlite_maste
8990: 72 3b 0a 20 20 20 20 7d 20 64 62 32 0a 20 20 20  r;.    } db2.   
89a0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20   execsql {.     
89b0: 20 50 52 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f   PRAGMA lock_pro
89c0: 78 79 5f 66 69 6c 65 3b 0a 20 20 20 20 7d 20 64  xy_file;.    } d
89d0: 62 32 0a 20 20 7d 20 7b 6d 79 6c 69 74 74 6c 65  b2.  } {mylittle
89e0: 70 72 6f 78 79 7d 0a 0a 20 20 64 62 32 20 63 6c  proxy}..  db2 cl
89f0: 6f 73 65 0a 20 20 64 6f 5f 74 65 73 74 20 70 72  ose.  do_test pr
8a00: 61 67 6d 61 2d 31 36 2e 33 20 7b 0a 20 20 20 20  agma-16.3 {.    
8a10: 73 71 6c 69 74 65 33 20 64 62 32 20 74 65 73 74  sqlite3 db2 test
8a20: 2e 64 62 0a 20 20 20 20 65 78 65 63 73 71 6c 20  .db.    execsql 
8a30: 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 6c  {.      PRAGMA l
8a40: 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 3d 22  ock_proxy_file="
8a50: 6d 79 6f 74 68 65 72 70 72 6f 78 79 22 3b 0a 20  myotherproxy";. 
8a60: 20 20 20 7d 20 64 62 32 0a 20 20 20 20 63 61 74     } db2.    cat
8a70: 63 68 73 71 6c 20 7b 0a 20 20 20 20 20 20 73 65  chsql {.      se
8a80: 6c 65 63 74 20 2a 20 66 72 6f 6d 20 73 71 6c 69  lect * from sqli
8a90: 74 65 5f 6d 61 73 74 65 72 3b 0a 20 20 20 20 7d  te_master;.    }
8aa0: 20 64 62 32 0a 20 20 7d 20 7b 31 20 7b 64 61 74   db2.  } {1 {dat
8ab0: 61 62 61 73 65 20 69 73 20 6c 6f 63 6b 65 64 7d  abase is locked}
8ac0: 7d 0a 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61  }..  do_test pra
8ad0: 67 6d 61 2d 31 36 2e 34 20 7b 0a 20 20 20 20 64  gma-16.4 {.    d
8ae0: 62 32 20 63 6c 6f 73 65 0a 20 20 20 20 64 62 20  b2 close.    db 
8af0: 63 6c 6f 73 65 0a 20 20 20 20 73 71 6c 69 74 65  close.    sqlite
8b00: 33 20 64 62 32 20 74 65 73 74 2e 64 62 0a 20 20  3 db2 test.db.  
8b10: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
8b20: 20 20 50 52 41 47 4d 41 20 6c 6f 63 6b 5f 70 72    PRAGMA lock_pr
8b30: 6f 78 79 5f 66 69 6c 65 3d 22 6d 79 6f 72 69 67  oxy_file="myorig
8b40: 69 6e 61 6c 70 72 6f 78 79 22 3b 0a 20 20 20 20  inalproxy";.    
8b50: 20 20 50 52 41 47 4d 41 20 6c 6f 63 6b 5f 70 72    PRAGMA lock_pr
8b60: 6f 78 79 5f 66 69 6c 65 3d 22 6d 79 6f 74 68 65  oxy_file="myothe
8b70: 72 70 72 6f 78 79 22 3b 0a 20 20 20 20 20 20 50  rproxy";.      P
8b80: 52 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78 79  RAGMA lock_proxy
8b90: 5f 66 69 6c 65 3b 0a 20 20 20 20 7d 20 64 62 32  _file;.    } db2
8ba0: 0a 20 20 7d 20 7b 6d 79 6f 74 68 65 72 70 72 6f  .  } {myotherpro
8bb0: 78 79 7d 0a 0a 20 20 64 62 32 20 63 6c 6f 73 65  xy}..  db2 close
8bc0: 0a 20 20 73 65 74 20 65 6e 76 28 53 51 4c 49 54  .  set env(SQLIT
8bd0: 45 5f 46 4f 52 43 45 5f 50 52 4f 58 59 5f 4c 4f  E_FORCE_PROXY_LO
8be0: 43 4b 49 4e 47 29 20 22 31 22 0a 20 20 64 6f 5f  CKING) "1".  do_
8bf0: 74 65 73 74 20 70 72 61 67 6d 61 2d 31 36 2e 35  test pragma-16.5
8c00: 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 20 64   {.    sqlite3 d
8c10: 62 32 20 74 65 73 74 2e 64 62 0a 20 20 20 20 65  b2 test.db.    e
8c20: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50  xecsql {.      P
8c30: 52 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78 79  RAGMA lock_proxy
8c40: 5f 66 69 6c 65 3d 22 3a 61 75 74 6f 3a 22 3b 0a  _file=":auto:";.
8c50: 20 20 20 20 20 20 50 52 41 47 4d 41 20 6c 6f 63        PRAGMA loc
8c60: 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 3b 0a 20 20  k_proxy_file;.  
8c70: 20 20 7d 20 64 62 32 0a 20 20 7d 20 7b 6d 79 6f    } db2.  } {myo
8c80: 74 68 65 72 70 72 6f 78 79 7d 0a 20 20 0a 20 20  therproxy}.  .  
8c90: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31  do_test pragma-1
8ca0: 36 2e 36 20 7b 0a 20 20 20 20 64 62 32 20 63 6c  6.6 {.    db2 cl
8cb0: 6f 73 65 0a 20 20 20 20 73 71 6c 69 74 65 33 20  ose.    sqlite3 
8cc0: 64 62 32 20 74 65 73 74 32 2e 64 62 0a 20 20 20  db2 test2.db.   
8cd0: 20 73 65 74 20 6c 6f 63 6b 70 61 74 68 20 5b 65   set lockpath [e
8ce0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50  xecsql {.      P
8cf0: 52 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78 79  RAGMA lock_proxy
8d00: 5f 66 69 6c 65 3d 22 3a 61 75 74 6f 3a 22 3b 0a  _file=":auto:";.
8d10: 20 20 20 20 20 20 50 52 41 47 4d 41 20 6c 6f 63        PRAGMA loc
8d20: 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 3b 0a 20 20  k_proxy_file;.  
8d30: 20 20 7d 20 64 62 32 5d 0a 20 20 20 20 73 74 72    } db2].    str
8d40: 69 6e 67 20 6d 61 74 63 68 20 22 2a 74 65 73 74  ing match "*test
8d50: 32 2e 64 62 3a 61 75 74 6f 3a 22 20 24 6c 6f 63  2.db:auto:" $loc
8d60: 6b 70 61 74 68 0a 20 20 7d 20 7b 31 7d 0a 20 20  kpath.  } {1}.  
8d70: 0a 20 20 73 65 74 20 73 71 6c 69 74 65 5f 68 6f  .  set sqlite_ho
8d80: 73 74 69 64 5f 6e 75 6d 20 32 0a 20 20 64 6f 5f  stid_num 2.  do_
8d90: 74 65 73 74 20 70 72 61 67 6d 61 2d 31 36 2e 37  test pragma-16.7
8da0: 20 7b 0a 20 20 20 20 6c 69 73 74 20 5b 63 61 74   {.    list [cat
8db0: 63 68 20 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  ch {.      sqlit
8dc0: 65 33 20 64 62 20 74 65 73 74 32 2e 64 62 0a 20  e3 db test2.db. 
8dd0: 20 20 20 20 20 65 78 65 63 73 71 6c 20 7b 20 0a       execsql { .
8de0: 20 20 20 20 20 20 20 20 50 52 41 47 4d 41 20 6c          PRAGMA l
8df0: 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 3d 22  ock_proxy_file="
8e00: 3a 61 75 74 6f 3a 22 3b 0a 20 20 20 20 20 20 20  :auto:";.       
8e10: 20 73 65 6c 65 63 74 20 2a 20 66 72 6f 6d 20 73   select * from s
8e20: 71 6c 69 74 65 5f 6d 61 73 74 65 72 3b 0a 20 20  qlite_master;.  
8e30: 20 20 20 20 7d 0a 20 20 20 20 7d 20 6d 73 67 5d      }.    } msg]
8e40: 20 24 6d 73 67 0a 20 20 7d 20 7b 31 20 7b 64 61   $msg.  } {1 {da
8e50: 74 61 62 61 73 65 20 69 73 20 6c 6f 63 6b 65 64  tabase is locked
8e60: 7d 7d 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20 20  }}.  db close.  
8e70: 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .  do_test pragm
8e80: 61 2d 31 36 2e 38 20 7b 0a 20 20 20 20 6c 69 73  a-16.8 {.    lis
8e90: 74 20 5b 63 61 74 63 68 20 7b 0a 20 20 20 20 20  t [catch {.     
8ea0: 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74   sqlite3 db test
8eb0: 32 2e 64 62 0a 20 20 20 20 20 20 65 78 65 63 73  2.db.      execs
8ec0: 71 6c 20 7b 20 73 65 6c 65 63 74 20 2a 20 66 72  ql { select * fr
8ed0: 6f 6d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  om sqlite_master
8ee0: 20 7d 20 0a 20 20 20 20 7d 20 6d 73 67 5d 20 24   } .    } msg] $
8ef0: 6d 73 67 0a 20 20 7d 20 7b 31 20 7b 64 61 74 61  msg.  } {1 {data
8f00: 62 61 73 65 20 69 73 20 6c 6f 63 6b 65 64 7d 7d  base is locked}}
8f10: 0a 0a 20 20 64 62 32 20 63 6c 6f 73 65 0a 20 20  ..  db2 close.  
8f20: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31  do_test pragma-1
8f30: 36 2e 38 2e 31 20 7b 0a 20 20 20 20 65 78 65 63  6.8.1 {.    exec
8f40: 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47  sql {.      PRAG
8f50: 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69  MA lock_proxy_fi
8f60: 6c 65 3d 22 79 65 74 61 6e 6f 74 68 65 72 70 72  le="yetanotherpr
8f70: 6f 78 79 22 3b 0a 20 20 20 20 20 20 50 52 41 47  oxy";.      PRAG
8f80: 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69  MA lock_proxy_fi
8f90: 6c 65 3b 0a 20 20 20 20 7d 20 0a 20 20 7d 20 7b  le;.    } .  } {
8fa0: 79 65 74 61 6e 6f 74 68 65 72 70 72 6f 78 79 7d  yetanotherproxy}
8fb0: 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .  do_test pragm
8fc0: 61 2d 31 36 2e 38 2e 32 20 7b 0a 20 20 20 20 65  a-16.8.2 {.    e
8fd0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 63  xecsql {.      c
8fe0: 72 65 61 74 65 20 74 61 62 6c 65 20 6d 69 6e 65  reate table mine
8ff0: 28 78 29 3b 0a 20 20 20 20 7d 20 0a 20 20 7d 20  (x);.    } .  } 
9000: 7b 7d 0a 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20  {}..  db close. 
9010: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
9020: 31 36 2e 39 20 7b 0a 20 20 20 20 73 71 6c 69 74  16.9 {.    sqlit
9030: 65 33 20 64 62 20 70 72 6f 78 79 74 65 73 74 2e  e3 db proxytest.
9040: 64 62 0a 20 20 20 20 73 65 74 20 6c 6f 63 6b 70  db.    set lockp
9050: 61 74 68 32 20 5b 65 78 65 63 73 71 6c 20 7b 0a  ath2 [execsql {.
9060: 20 20 20 20 20 20 50 52 41 47 4d 41 20 6c 6f 63        PRAGMA loc
9070: 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 3d 22 3a 61  k_proxy_file=":a
9080: 75 74 6f 3a 22 3b 0a 20 20 20 20 20 20 50 52 41  uto:";.      PRA
9090: 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66  GMA lock_proxy_f
90a0: 69 6c 65 3b 0a 20 20 20 20 7d 20 64 62 5d 0a 20  ile;.    } db]. 
90b0: 20 20 20 73 74 72 69 6e 67 20 6d 61 74 63 68 20     string match 
90c0: 22 2a 70 72 6f 78 79 74 65 73 74 2e 64 62 3a 61  "*proxytest.db:a
90d0: 75 74 6f 3a 22 20 24 6c 6f 63 6b 70 61 74 68 32  uto:" $lockpath2
90e0: 0a 20 20 7d 20 7b 31 7d 0a 0a 20 20 73 65 74 20  .  } {1}..  set 
90f0: 65 6e 76 28 53 51 4c 49 54 45 5f 46 4f 52 43 45  env(SQLITE_FORCE
9100: 5f 50 52 4f 58 59 5f 4c 4f 43 4b 49 4e 47 29 20  _PROXY_LOCKING) 
9110: 24 75 73 69 6e 67 5f 70 72 6f 78 79 0a 20 20 73  $using_proxy.  s
9120: 65 74 20 73 71 6c 69 74 65 5f 68 6f 73 74 69 64  et sqlite_hostid
9130: 5f 6e 75 6d 20 30 0a 7d 0a 0a 23 20 50 61 72 73  _num 0.}..# Pars
9140: 69 6e 67 20 6f 66 20 61 75 74 6f 5f 76 61 63 75  ing of auto_vacu
9150: 75 6d 20 73 65 74 74 69 6e 67 73 2e 0a 23 0a 66  um settings..#.f
9160: 6f 72 65 61 63 68 20 7b 61 75 74 6f 76 61 63 5f  oreach {autovac_
9170: 73 65 74 74 69 6e 67 20 76 61 6c 7d 20 7b 0a 20  setting val} {. 
9180: 20 30 20 30 0a 20 20 31 20 31 0a 20 20 32 20 32   0 0.  1 1.  2 2
9190: 0a 20 20 33 20 30 0a 20 20 2d 31 20 30 0a 20 20  .  3 0.  -1 0.  
91a0: 6e 6f 6e 65 20 30 0a 20 20 4e 4f 4e 45 20 30 0a  none 0.  NONE 0.
91b0: 20 20 4e 6f 4e 65 20 30 0a 20 20 66 75 6c 6c 20    NoNe 0.  full 
91c0: 31 0a 20 20 46 55 4c 4c 20 31 0a 20 20 69 6e 63  1.  FULL 1.  inc
91d0: 72 65 6d 65 6e 74 61 6c 20 32 0a 20 20 49 4e 43  remental 2.  INC
91e0: 52 45 4d 45 4e 54 41 4c 20 32 0a 20 20 2d 31 32  REMENTAL 2.  -12
91f0: 33 34 20 30 0a 20 20 31 32 33 34 20 30 0a 7d 20  34 0.  1234 0.} 
9200: 7b 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67  {.  do_test prag
9210: 6d 61 2d 31 37 2e 31 2e 24 61 75 74 6f 76 61 63  ma-17.1.$autovac
9220: 5f 73 65 74 74 69 6e 67 20 7b 0a 20 20 20 20 63  _setting {.    c
9230: 61 74 63 68 20 7b 64 62 20 63 6c 6f 73 65 7d 0a  atch {db close}.
9240: 20 20 20 20 73 71 6c 69 74 65 33 20 64 62 20 3a      sqlite3 db :
9250: 6d 65 6d 6f 72 79 3a 0a 20 20 20 20 65 78 65 63  memory:.    exec
9260: 73 71 6c 20 22 0a 20 20 20 20 20 20 50 52 41 47  sql ".      PRAG
9270: 4d 41 20 61 75 74 6f 5f 76 61 63 75 75 6d 3d 24  MA auto_vacuum=$
9280: 3a 3a 61 75 74 6f 76 61 63 5f 73 65 74 74 69 6e  ::autovac_settin
9290: 67 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20  g;.      PRAGMA 
92a0: 61 75 74 6f 5f 76 61 63 75 75 6d 3b 0a 20 20 20  auto_vacuum;.   
92b0: 20 22 0a 20 20 7d 20 24 76 61 6c 0a 7d 0a 0a 23   ".  } $val.}..#
92c0: 20 50 61 72 73 69 6e 67 20 6f 66 20 74 65 6d 70   Parsing of temp
92d0: 5f 73 74 6f 72 65 20 73 65 74 74 69 6e 67 73 2e  _store settings.
92e0: 0a 23 0a 66 6f 72 65 61 63 68 20 7b 74 65 6d 70  .#.foreach {temp
92f0: 5f 73 65 74 74 69 6e 67 20 76 61 6c 7d 20 7b 0a  _setting val} {.
9300: 20 20 30 20 30 0a 20 20 31 20 31 0a 20 20 32 20    0 0.  1 1.  2 
9310: 32 0a 20 20 33 20 30 0a 20 20 2d 31 20 30 0a 20  2.  3 0.  -1 0. 
9320: 20 66 69 6c 65 20 31 0a 20 20 46 49 4c 45 20 31   file 1.  FILE 1
9330: 0a 20 20 66 49 6c 45 20 31 0a 20 20 6d 65 6d 6f  .  fIlE 1.  memo
9340: 72 79 20 32 0a 20 20 4d 45 4d 4f 52 59 20 32 0a  ry 2.  MEMORY 2.
9350: 20 20 4d 65 4d 6f 52 79 20 32 0a 7d 20 7b 0a 20    MeMoRy 2.} {. 
9360: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
9370: 31 38 2e 31 2e 24 74 65 6d 70 5f 73 65 74 74 69  18.1.$temp_setti
9380: 6e 67 20 7b 0a 20 20 20 20 63 61 74 63 68 20 7b  ng {.    catch {
9390: 64 62 20 63 6c 6f 73 65 7d 0a 20 20 20 20 73 71  db close}.    sq
93a0: 6c 69 74 65 33 20 64 62 20 3a 6d 65 6d 6f 72 79  lite3 db :memory
93b0: 3a 0a 20 20 20 20 65 78 65 63 73 71 6c 20 22 0a  :.    execsql ".
93c0: 20 20 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d        PRAGMA tem
93d0: 70 5f 73 74 6f 72 65 3d 24 3a 3a 74 65 6d 70 5f  p_store=$::temp_
93e0: 73 65 74 74 69 6e 67 3b 0a 20 20 20 20 20 20 50  setting;.      P
93f0: 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65  RAGMA temp_store
9400: 3d 24 3a 3a 74 65 6d 70 5f 73 65 74 74 69 6e 67  =$::temp_setting
9410: 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 74  ;.      PRAGMA t
9420: 65 6d 70 5f 73 74 6f 72 65 3b 0a 20 20 20 20 22  emp_store;.    "
9430: 0a 20 20 7d 20 24 76 61 6c 0a 7d 0a 0a 23 20 54  .  } $val.}..# T
9440: 68 65 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f  he SQLITE_FCNTL_
9450: 50 52 41 47 4d 41 20 6c 6f 67 69 63 2c 20 77 69  PRAGMA logic, wi
9460: 74 68 20 65 72 72 6f 72 20 68 61 6e 64 6c 69 6e  th error handlin
9470: 67 2e 0a 23 0a 64 62 20 63 6c 6f 73 65 0a 74 65  g..#.db close.te
9480: 73 74 76 66 73 20 74 76 66 73 0a 73 71 6c 69 74  stvfs tvfs.sqlit
9490: 65 33 20 64 62 20 74 65 73 74 2e 64 62 20 2d 76  e3 db test.db -v
94a0: 66 73 20 74 76 66 73 0a 64 6f 5f 74 65 73 74 20  fs tvfs.do_test 
94b0: 70 72 61 67 6d 61 2d 31 39 2e 31 20 7b 0a 20 20  pragma-19.1 {.  
94c0: 63 61 74 63 68 73 71 6c 20 7b 50 52 41 47 4d 41  catchsql {PRAGMA
94d0: 20 65 72 72 6f 72 7d 0a 7d 20 7b 31 20 7b 53 51   error}.} {1 {SQ
94e0: 4c 20 6c 6f 67 69 63 20 65 72 72 6f 72 20 6f 72  L logic error or
94f0: 20 6d 69 73 73 69 6e 67 20 64 61 74 61 62 61 73   missing databas
9500: 65 7d 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67  e}}.do_test prag
9510: 6d 61 2d 31 39 2e 32 20 7b 0a 20 20 63 61 74 63  ma-19.2 {.  catc
9520: 68 73 71 6c 20 7b 50 52 41 47 4d 41 20 65 72 72  hsql {PRAGMA err
9530: 6f 72 3d 27 54 68 69 73 20 69 73 20 74 68 65 20  or='This is the 
9540: 65 72 72 6f 72 20 6d 65 73 73 61 67 65 27 7d 0a  error message'}.
9550: 7d 20 7b 31 20 7b 54 68 69 73 20 69 73 20 74 68  } {1 {This is th
9560: 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 7d  e error message}
9570: 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  }.do_test pragma
9580: 2d 31 39 2e 33 20 7b 0a 20 20 63 61 74 63 68 73  -19.3 {.  catchs
9590: 71 6c 20 7b 50 52 41 47 4d 41 20 65 72 72 6f 72  ql {PRAGMA error
95a0: 3d 27 37 20 54 68 69 73 20 69 73 20 74 68 65 20  ='7 This is the 
95b0: 65 72 72 6f 72 20 6d 65 73 73 61 67 65 27 7d 0a  error message'}.
95c0: 7d 20 7b 31 20 7b 54 68 69 73 20 69 73 20 74 68  } {1 {This is th
95d0: 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 7d  e error message}
95e0: 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  }.do_test pragma
95f0: 2d 31 39 2e 34 20 7b 0a 20 20 63 61 74 63 68 73  -19.4 {.  catchs
9600: 71 6c 20 7b 50 52 41 47 4d 41 20 65 72 72 6f 72  ql {PRAGMA error
9610: 3d 37 7d 0a 7d 20 7b 31 20 7b 6f 75 74 20 6f 66  =7}.} {1 {out of
9620: 20 6d 65 6d 6f 72 79 7d 7d 0a 64 6f 5f 74 65 73   memory}}.do_tes
9630: 74 20 70 72 61 67 6d 61 2d 31 39 2e 35 20 7b 0a  t pragma-19.5 {.
9640: 20 20 66 69 6c 65 20 74 61 69 6c 20 5b 6c 69 6e    file tail [lin
9650: 64 65 78 20 5b 65 78 65 63 73 71 6c 20 7b 50 52  dex [execsql {PR
9660: 41 47 4d 41 20 66 69 6c 65 6e 61 6d 65 7d 5d 20  AGMA filename}] 
9670: 30 5d 0a 7d 20 7b 74 65 73 74 2e 64 62 7d 0a 0a  0].} {test.db}..
9680: 69 66 20 7b 24 74 63 6c 5f 70 6c 61 74 66 6f 72  if {$tcl_platfor
9690: 6d 28 70 6c 61 74 66 6f 72 6d 29 3d 3d 22 77 69  m(platform)=="wi
96a0: 6e 64 6f 77 73 22 7d 20 7b 0a 23 20 54 65 73 74  ndows"} {.# Test
96b0: 20 64 61 74 61 5f 73 74 6f 72 65 5f 64 69 72 65   data_store_dire
96c0: 63 74 6f 72 79 20 70 72 61 67 6d 61 0a 23 0a 64  ctory pragma.#.d
96d0: 62 20 63 6c 6f 73 65 0a 73 71 6c 69 74 65 33 20  b close.sqlite3 
96e0: 64 62 20 74 65 73 74 2e 64 62 0a 66 69 6c 65 20  db test.db.file 
96f0: 6d 6b 64 69 72 20 64 61 74 61 5f 64 69 72 0a 64  mkdir data_dir.d
9700: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 32 30  o_test pragma-20
9710: 2e 31 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20  .1 {.  catchsql 
9720: 7b 50 52 41 47 4d 41 20 64 61 74 61 5f 73 74 6f  {PRAGMA data_sto
9730: 72 65 5f 64 69 72 65 63 74 6f 72 79 7d 0a 7d 20  re_directory}.} 
9740: 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 70  {0 {}}.do_test p
9750: 72 61 67 6d 61 2d 32 30 2e 32 20 7b 0a 20 20 73  ragma-20.2 {.  s
9760: 65 74 20 70 77 64 20 5b 73 74 72 69 6e 67 20 6d  et pwd [string m
9770: 61 70 20 7b 27 20 27 27 7d 20 5b 66 69 6c 65 20  ap {' ''} [file 
9780: 6e 61 74 69 76 65 6e 61 6d 65 20 5b 67 65 74 5f  nativename [get_
9790: 70 77 64 5d 5d 5d 0a 20 20 63 61 74 63 68 73 71  pwd]]].  catchsq
97a0: 6c 20 22 50 52 41 47 4d 41 20 64 61 74 61 5f 73  l "PRAGMA data_s
97b0: 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 3d 27  tore_directory='
97c0: 24 70 77 64 27 3b 22 0a 7d 20 7b 30 20 7b 7d 7d  $pwd';".} {0 {}}
97d0: 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d  .do_test pragma-
97e0: 32 30 2e 33 20 7b 0a 20 20 63 61 74 63 68 73 71  20.3 {.  catchsq
97f0: 6c 20 7b 50 52 41 47 4d 41 20 64 61 74 61 5f 73  l {PRAGMA data_s
9800: 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 7d 0a  tore_directory}.
9810: 7d 20 5b 6c 69 73 74 20 30 20 5b 6c 69 73 74 20  } [list 0 [list 
9820: 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65  [file nativename
9830: 20 5b 67 65 74 5f 70 77 64 5d 5d 5d 5d 0a 64 6f   [get_pwd]]]].do
9840: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 32 30 2e  _test pragma-20.
9850: 34 20 7b 0a 20 20 73 65 74 20 70 77 64 20 5b 73  4 {.  set pwd [s
9860: 74 72 69 6e 67 20 6d 61 70 20 7b 27 20 27 27 7d  tring map {' ''}
9870: 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d   [file nativenam
9880: 65 20 5c 0a 20 20 20 20 5b 66 69 6c 65 20 6a 6f  e \.    [file jo
9890: 69 6e 20 5b 67 65 74 5f 70 77 64 5d 20 64 61 74  in [get_pwd] dat
98a0: 61 5f 64 69 72 5d 5d 5d 0a 20 20 63 61 74 63 68  a_dir]]].  catch
98b0: 73 71 6c 20 22 50 52 41 47 4d 41 20 64 61 74 61  sql "PRAGMA data
98c0: 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79  _store_directory
98d0: 3d 27 24 70 77 64 27 3b 22 0a 7d 20 7b 30 20 7b  ='$pwd';".} {0 {
98e0: 7d 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  }}.do_test pragm
98f0: 61 2d 32 30 2e 35 20 7b 0a 20 20 73 71 6c 69 74  a-20.5 {.  sqlit
9900: 65 33 20 64 62 32 20 74 65 73 74 32 2e 64 62 0a  e3 db2 test2.db.
9910: 20 20 63 61 74 63 68 73 71 6c 20 22 50 52 41 47    catchsql "PRAG
9920: 4d 41 20 64 61 74 61 62 61 73 65 5f 6c 69 73 74  MA database_list
9930: 3b 22 20 64 62 32 0a 7d 20 5b 6c 69 73 74 20 30  ;" db2.} [list 0
9940: 20 5b 6c 69 73 74 20 30 20 6d 61 69 6e 20 5b 66   [list 0 main [f
9950: 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5c  ile nativename \
9960: 0a 20 20 20 20 5b 66 69 6c 65 20 6a 6f 69 6e 20  .    [file join 
9970: 5b 67 65 74 5f 70 77 64 5d 20 64 61 74 61 5f 64  [get_pwd] data_d
9980: 69 72 20 74 65 73 74 32 2e 64 62 5d 5d 5d 5d 0a  ir test2.db]]]].
9990: 63 61 74 63 68 20 7b 64 62 32 20 63 6c 6f 73 65  catch {db2 close
99a0: 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  }.do_test pragma
99b0: 2d 32 30 2e 36 20 7b 0a 20 20 73 71 6c 69 74 65  -20.6 {.  sqlite
99c0: 33 20 64 62 32 20 5b 66 69 6c 65 20 6a 6f 69 6e  3 db2 [file join
99d0: 20 5b 67 65 74 5f 70 77 64 5d 20 74 65 73 74 32   [get_pwd] test2
99e0: 2e 64 62 5d 0a 20 20 63 61 74 63 68 73 71 6c 20  .db].  catchsql 
99f0: 22 50 52 41 47 4d 41 20 64 61 74 61 62 61 73 65  "PRAGMA database
9a00: 5f 6c 69 73 74 3b 22 20 64 62 32 0a 7d 20 5b 6c  _list;" db2.} [l
9a10: 69 73 74 20 30 20 5b 6c 69 73 74 20 30 20 6d 61  ist 0 [list 0 ma
9a20: 69 6e 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e  in [file nativen
9a30: 61 6d 65 20 5c 0a 20 20 20 20 5b 66 69 6c 65 20  ame \.    [file 
9a40: 6a 6f 69 6e 20 5b 67 65 74 5f 70 77 64 5d 20 74  join [get_pwd] t
9a50: 65 73 74 32 2e 64 62 5d 5d 5d 5d 0a 63 61 74 63  est2.db]]]].catc
9a60: 68 20 7b 64 62 32 20 63 6c 6f 73 65 7d 0a 64 6f  h {db2 close}.do
9a70: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 32 30 2e  _test pragma-20.
9a80: 37 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 22  7 {.  catchsql "
9a90: 50 52 41 47 4d 41 20 64 61 74 61 5f 73 74 6f 72  PRAGMA data_stor
9aa0: 65 5f 64 69 72 65 63 74 6f 72 79 3d 27 27 3b 22  e_directory='';"
9ab0: 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73  .} {0 {}}.do_tes
9ac0: 74 20 70 72 61 67 6d 61 2d 32 30 2e 38 20 7b 0a  t pragma-20.8 {.
9ad0: 20 20 63 61 74 63 68 73 71 6c 20 7b 50 52 41 47    catchsql {PRAG
9ae0: 4d 41 20 64 61 74 61 5f 73 74 6f 72 65 5f 64 69  MA data_store_di
9af0: 72 65 63 74 6f 72 79 7d 0a 7d 20 7b 30 20 7b 7d  rectory}.} {0 {}
9b00: 7d 0a 0a 66 6f 72 63 65 64 65 6c 65 74 65 20 64  }..forcedelete d
9b10: 61 74 61 5f 64 69 72 0a 7d 20 3b 23 20 65 6e 64  ata_dir.} ;# end
9b20: 69 66 20 77 69 6e 64 6f 77 73 0a 0a 64 61 74 61  if windows..data
9b30: 62 61 73 65 5f 6d 61 79 5f 62 65 5f 63 6f 72 72  base_may_be_corr
9b40: 75 70 74 0a 0a 64 6f 5f 74 65 73 74 20 32 31 2e  upt..do_test 21.
9b50: 31 20 7b 0a 20 20 23 20 43 72 65 61 74 65 20 61  1 {.  # Create a
9b60: 20 63 6f 72 72 75 70 74 20 64 61 74 61 62 61 73   corrupt databas
9b70: 65 20 69 6e 20 74 65 73 74 65 72 72 2e 64 62 2e  e in testerr.db.
9b80: 20 41 6e 64 20 61 20 6e 6f 6e 2d 63 6f 72 72 75   And a non-corru
9b90: 70 74 20 61 74 20 74 65 73 74 2e 64 62 2e 0a 20  pt at test.db.. 
9ba0: 20 23 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20 20   #.  db close.  
9bb0: 66 6f 72 63 65 64 65 6c 65 74 65 20 74 65 73 74  forcedelete test
9bc0: 2e 64 62 0a 20 20 73 71 6c 69 74 65 33 20 64 62  .db.  sqlite3 db
9bd0: 20 74 65 73 74 2e 64 62 0a 20 20 65 78 65 63 73   test.db.  execs
9be0: 71 6c 20 7b 20 0a 20 20 20 20 50 52 41 47 4d 41  ql { .    PRAGMA
9bf0: 20 70 61 67 65 5f 73 69 7a 65 20 3d 20 31 30 32   page_size = 102
9c00: 34 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 61 75  4;.    PRAGMA au
9c10: 74 6f 5f 76 61 63 75 75 6d 20 3d 20 30 3b 0a 20  to_vacuum = 0;. 
9c20: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
9c30: 74 31 28 61 20 50 52 49 4d 41 52 59 20 4b 45 59  t1(a PRIMARY KEY
9c40: 2c 20 62 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  , b);.    INSERT
9c50: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
9c60: 31 2c 20 31 29 3b 0a 20 20 7d 0a 20 20 66 6f 72  1, 1);.  }.  for
9c70: 20 7b 73 65 74 20 69 20 30 7d 20 7b 24 69 20 3c   {set i 0} {$i <
9c80: 20 31 30 7d 20 7b 69 6e 63 72 20 69 7d 20 7b 0a   10} {incr i} {.
9c90: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 20 49 4e      execsql { IN
9ca0: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 53 45 4c  SERT INTO t1 SEL
9cb0: 45 43 54 20 61 20 2b 20 28 31 20 3c 3c 20 24 69  ECT a + (1 << $i
9cc0: 29 2c 20 62 20 2b 20 28 31 20 3c 3c 20 24 69 29  ), b + (1 << $i)
9cd0: 20 46 52 4f 4d 20 74 31 20 7d 0a 20 20 7d 0a 20   FROM t1 }.  }. 
9ce0: 20 64 62 20 63 6c 6f 73 65 0a 20 20 66 6f 72 63   db close.  forc
9cf0: 65 63 6f 70 79 20 74 65 73 74 2e 64 62 20 74 65  ecopy test.db te
9d00: 73 74 65 72 72 2e 64 62 0a 20 20 68 65 78 69 6f  sterr.db.  hexio
9d10: 5f 77 72 69 74 65 20 74 65 73 74 65 72 72 2e 64  _write testerr.d
9d20: 62 20 31 35 30 30 30 20 5b 73 74 72 69 6e 67 20  b 15000 [string 
9d30: 72 65 70 65 61 74 20 35 35 20 31 30 30 5d 0a 7d  repeat 55 100].}
9d40: 20 7b 31 30 30 7d 0a 0a 73 65 74 20 6d 61 69 6e   {100}..set main
9d50: 65 72 72 20 7b 2a 2a 2a 20 69 6e 20 64 61 74 61  err {*** in data
9d60: 62 61 73 65 20 6d 61 69 6e 20 2a 2a 2a 0a 4d 75  base main ***.Mu
9d70: 6c 74 69 70 6c 65 20 75 73 65 73 20 66 6f 72 20  ltiple uses for 
9d80: 62 79 74 65 20 36 37 32 20 6f 66 20 70 61 67 65  byte 672 of page
9d90: 20 31 35 7d 0a 73 65 74 20 61 75 78 65 72 72 20   15}.set auxerr 
9da0: 7b 2a 2a 2a 20 69 6e 20 64 61 74 61 62 61 73 65  {*** in database
9db0: 20 61 75 78 20 2a 2a 2a 0a 4d 75 6c 74 69 70 6c   aux ***.Multipl
9dc0: 65 20 75 73 65 73 20 66 6f 72 20 62 79 74 65 20  e uses for byte 
9dd0: 36 37 32 20 6f 66 20 70 61 67 65 20 31 35 7d 0a  672 of page 15}.
9de0: 0a 73 65 74 20 6d 61 69 6e 65 72 72 20 7b 2f 7b  .set mainerr {/{
9df0: 5c 2a 5c 2a 5c 2a 20 69 6e 20 64 61 74 61 62 61  \*\*\* in databa
9e00: 73 65 20 6d 61 69 6e 20 5c 2a 5c 2a 5c 2a 0a 4d  se main \*\*\*.M
9e10: 75 6c 74 69 70 6c 65 20 75 73 65 73 20 66 6f 72  ultiple uses for
9e20: 20 62 79 74 65 20 36 37 32 20 6f 66 20 70 61 67   byte 672 of pag
9e30: 65 20 31 35 7d 2e 2a 2f 7d 0a 73 65 74 20 61 75  e 15}.*/}.set au
9e40: 78 65 72 72 20 7b 2f 7b 5c 2a 5c 2a 5c 2a 20 69  xerr {/{\*\*\* i
9e50: 6e 20 64 61 74 61 62 61 73 65 20 61 75 78 20 5c  n database aux \
9e60: 2a 5c 2a 5c 2a 0a 4d 75 6c 74 69 70 6c 65 20 75  *\*\*.Multiple u
9e70: 73 65 73 20 66 6f 72 20 62 79 74 65 20 36 37 32  ses for byte 672
9e80: 20 6f 66 20 70 61 67 65 20 31 35 7d 2e 2a 2f 7d   of page 15}.*/}
9e90: 0a 0a 64 6f 5f 74 65 73 74 20 32 32 2e 32 20 7b  ..do_test 22.2 {
9ea0: 0a 20 20 63 61 74 63 68 20 7b 20 64 62 20 63 6c  .  catch { db cl
9eb0: 6f 73 65 20 7d 0a 20 20 73 71 6c 69 74 65 33 20  ose }.  sqlite3 
9ec0: 64 62 20 74 65 73 74 65 72 72 2e 64 62 0a 20 20  db testerr.db.  
9ed0: 65 78 65 63 73 71 6c 20 7b 20 50 52 41 47 4d 41  execsql { PRAGMA
9ee0: 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b   integrity_check
9ef0: 20 7d 0a 7d 20 24 6d 61 69 6e 65 72 72 0a 0a 64   }.} $mainerr..d
9f00: 6f 5f 74 65 73 74 20 32 32 2e 33 2e 31 20 7b 0a  o_test 22.3.1 {.
9f10: 20 20 63 61 74 63 68 20 7b 20 64 62 20 63 6c 6f    catch { db clo
9f20: 73 65 20 7d 0a 20 20 73 71 6c 69 74 65 33 20 64  se }.  sqlite3 d
9f30: 62 20 74 65 73 74 2e 64 62 0a 20 20 65 78 65 63  b test.db.  exec
9f40: 73 71 6c 20 7b 20 0a 20 20 20 20 41 54 54 41 43  sql { .    ATTAC
9f50: 48 20 27 74 65 73 74 65 72 72 2e 64 62 27 20 41  H 'testerr.db' A
9f60: 53 20 27 61 75 78 27 3b 0a 20 20 20 20 50 52 41  S 'aux';.    PRA
9f70: 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68  GMA integrity_ch
9f80: 65 63 6b 3b 0a 20 20 7d 0a 7d 20 24 61 75 78 65  eck;.  }.} $auxe
9f90: 72 72 0a 64 6f 5f 74 65 73 74 20 32 32 2e 33 2e  rr.do_test 22.3.
9fa0: 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 20  2 {.  execsql { 
9fb0: 50 52 41 47 4d 41 20 6d 61 69 6e 2e 69 6e 74 65  PRAGMA main.inte
9fc0: 67 72 69 74 79 5f 63 68 65 63 6b 3b 20 7d 0a 7d  grity_check; }.}
9fd0: 20 7b 6f 6b 7d 0a 64 6f 5f 74 65 73 74 20 32 32   {ok}.do_test 22
9fe0: 2e 33 2e 33 20 7b 0a 20 20 65 78 65 63 73 71 6c  .3.3 {.  execsql
9ff0: 20 7b 20 50 52 41 47 4d 41 20 61 75 78 2e 69 6e   { PRAGMA aux.in
a000: 74 65 67 72 69 74 79 5f 63 68 65 63 6b 3b 20 7d  tegrity_check; }
a010: 0a 7d 20 24 61 75 78 65 72 72 0a 0a 64 6f 5f 74  .} $auxerr..do_t
a020: 65 73 74 20 32 32 2e 34 2e 31 20 7b 0a 20 20 63  est 22.4.1 {.  c
a030: 61 74 63 68 20 7b 20 64 62 20 63 6c 6f 73 65 20  atch { db close 
a040: 7d 0a 20 20 73 71 6c 69 74 65 33 20 64 62 20 74  }.  sqlite3 db t
a050: 65 73 74 65 72 72 2e 64 62 0a 20 20 65 78 65 63  esterr.db.  exec
a060: 73 71 6c 20 7b 20 0a 20 20 20 20 41 54 54 41 43  sql { .    ATTAC
a070: 48 20 27 74 65 73 74 2e 64 62 27 20 41 53 20 27  H 'test.db' AS '
a080: 61 75 78 27 3b 0a 20 20 20 20 50 52 41 47 4d 41  aux';.    PRAGMA
a090: 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b   integrity_check
a0a0: 3b 0a 20 20 7d 0a 7d 20 24 6d 61 69 6e 65 72 72  ;.  }.} $mainerr
a0b0: 0a 64 6f 5f 74 65 73 74 20 32 32 2e 34 2e 32 20  .do_test 22.4.2 
a0c0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 50 52  {.  execsql { PR
a0d0: 41 47 4d 41 20 6d 61 69 6e 2e 69 6e 74 65 67 72  AGMA main.integr
a0e0: 69 74 79 5f 63 68 65 63 6b 3b 20 7d 0a 7d 20 24  ity_check; }.} $
a0f0: 6d 61 69 6e 65 72 72 0a 64 6f 5f 74 65 73 74 20  mainerr.do_test 
a100: 32 32 2e 34 2e 33 20 7b 0a 20 20 65 78 65 63 73  22.4.3 {.  execs
a110: 71 6c 20 7b 20 50 52 41 47 4d 41 20 61 75 78 2e  ql { PRAGMA aux.
a120: 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 3b  integrity_check;
a130: 20 7d 0a 7d 20 7b 6f 6b 7d 0a 0a 64 62 20 63 6c   }.} {ok}..db cl
a140: 6f 73 65 0a 66 6f 72 63 65 64 65 6c 65 74 65 20  ose.forcedelete 
a150: 74 65 73 74 2e 64 62 20 74 65 73 74 2e 64 62 2d  test.db test.db-
a160: 77 61 6c 20 74 65 73 74 2e 64 62 2d 6a 6f 75 72  wal test.db-jour
a170: 6e 61 6c 0a 73 71 6c 69 74 65 33 20 64 62 20 74  nal.sqlite3 db t
a180: 65 73 74 2e 64 62 0a 73 71 6c 69 74 65 33 20 64  est.db.sqlite3 d
a190: 62 32 20 74 65 73 74 2e 64 62 0a 64 6f 5f 74 65  b2 test.db.do_te
a1a0: 73 74 20 32 33 2e 31 20 7b 0a 20 20 64 62 20 65  st 23.1 {.  db e
a1b0: 76 61 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45  val {.    CREATE
a1c0: 20 54 41 42 4c 45 20 74 31 28 61 20 49 4e 54 45   TABLE t1(a INTE
a1d0: 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c  GER PRIMARY KEY,
a1e0: 62 2c 63 2c 64 29 3b 0a 20 20 20 20 43 52 45 41  b,c,d);.    CREA
a1f0: 54 45 20 49 4e 44 45 58 20 69 31 20 4f 4e 20 74  TE INDEX i1 ON t
a200: 31 28 62 2c 63 29 3b 0a 20 20 20 20 43 52 45 41  1(b,c);.    CREA
a210: 54 45 20 49 4e 44 45 58 20 69 32 20 4f 4e 20 74  TE INDEX i2 ON t
a220: 31 28 63 2c 64 29 3b 0a 20 20 20 20 43 52 45 41  1(c,d);.    CREA
a230: 54 45 20 54 41 42 4c 45 20 74 32 28 78 20 49 4e  TE TABLE t2(x IN
a240: 54 45 47 45 52 20 52 45 46 45 52 45 4e 43 45 53  TEGER REFERENCES
a250: 20 74 31 29 3b 0a 20 20 7d 0a 20 20 64 62 32 20   t1);.  }.  db2 
a260: 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d  eval {SELECT nam
a270: 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61  e FROM sqlite_ma
a280: 73 74 65 72 7d 0a 7d 20 7b 74 31 20 69 31 20 69  ster}.} {t1 i1 i
a290: 32 20 74 32 7d 0a 64 6f 5f 74 65 73 74 20 32 33  2 t2}.do_test 23
a2a0: 2e 32 61 20 7b 0a 20 20 64 62 20 65 76 61 6c 20  .2a {.  db eval 
a2b0: 7b 0a 20 20 20 20 44 52 4f 50 20 49 4e 44 45 58  {.    DROP INDEX
a2c0: 20 69 32 3b 0a 20 20 20 20 43 52 45 41 54 45 20   i2;.    CREATE 
a2d0: 49 4e 44 45 58 20 69 32 20 4f 4e 20 74 31 28 63  INDEX i2 ON t1(c
a2e0: 2c 64 2c 62 29 3b 0a 20 20 7d 0a 20 20 63 61 70  ,d,b);.  }.  cap
a2f0: 74 75 72 65 5f 70 72 61 67 6d 61 20 64 62 32 20  ture_pragma db2 
a300: 6f 75 74 20 7b 50 52 41 47 4d 41 20 69 6e 64 65  out {PRAGMA inde
a310: 78 5f 69 6e 66 6f 28 69 32 29 7d 0a 20 20 64 62  x_info(i2)}.  db
a320: 32 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 63  2 eval {SELECT c
a330: 69 64 2c 20 6e 61 6d 65 2c 20 22 64 65 73 63 22  id, name, "desc"
a340: 2c 20 63 6f 6c 6c 2c 20 22 6b 65 79 22 2c 20 27  , coll, "key", '
a350: 7c 27 20 46 52 4f 4d 20 6f 75 74 20 4f 52 44 45  |' FROM out ORDE
a360: 52 20 42 59 20 73 65 71 6e 6f 7d 0a 7d 20 7b 32  R BY seqno}.} {2
a370: 20 63 20 30 20 42 49 4e 41 52 59 20 31 20 7c 20   c 0 BINARY 1 | 
a380: 33 20 64 20 30 20 42 49 4e 41 52 59 20 31 20 7c  3 d 0 BINARY 1 |
a390: 20 31 20 62 20 30 20 42 49 4e 41 52 59 20 31 20   1 b 0 BINARY 1 
a3a0: 7c 7d 0a 64 6f 5f 74 65 73 74 20 32 33 2e 32 62  |}.do_test 23.2b
a3b0: 20 7b 0a 62 72 65 61 6b 70 6f 69 6e 74 3b 0a 20   {.breakpoint;. 
a3c0: 20 63 61 70 74 75 72 65 5f 70 72 61 67 6d 61 20   capture_pragma 
a3d0: 64 62 32 20 6f 75 74 20 7b 50 52 41 47 4d 41 20  db2 out {PRAGMA 
a3e0: 69 6e 64 65 78 5f 78 69 6e 66 6f 28 69 32 29 7d  index_xinfo(i2)}
a3f0: 0a 20 20 64 62 32 20 65 76 61 6c 20 7b 53 45 4c  .  db2 eval {SEL
a400: 45 43 54 20 63 69 64 2c 20 6e 61 6d 65 2c 20 22  ECT cid, name, "
a410: 64 65 73 63 22 2c 20 63 6f 6c 6c 2c 20 22 6b 65  desc", coll, "ke
a420: 79 22 2c 20 27 7c 27 20 46 52 4f 4d 20 6f 75 74  y", '|' FROM out
a430: 20 4f 52 44 45 52 20 42 59 20 73 65 71 6e 6f 7d   ORDER BY seqno}
a440: 0a 7d 20 7b 32 20 63 20 30 20 42 49 4e 41 52 59  .} {2 c 0 BINARY
a450: 20 31 20 7c 20 33 20 64 20 30 20 42 49 4e 41 52   1 | 3 d 0 BINAR
a460: 59 20 31 20 7c 20 31 20 62 20 30 20 42 49 4e 41  Y 1 | 1 b 0 BINA
a470: 52 59 20 31 20 7c 20 2d 31 20 7b 7d 20 30 20 42  RY 1 | -1 {} 0 B
a480: 49 4e 41 52 59 20 30 20 7c 7d 0a 64 6f 5f 74 65  INARY 0 |}.do_te
a490: 73 74 20 32 33 2e 33 20 7b 0a 20 20 64 62 20 65  st 23.3 {.  db e
a4a0: 76 61 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45  val {.    CREATE
a4b0: 20 49 4e 44 45 58 20 69 33 20 4f 4e 20 74 31 28   INDEX i3 ON t1(
a4c0: 64 2c 62 2c 63 29 3b 0a 20 20 7d 0a 20 20 63 61  d,b,c);.  }.  ca
a4d0: 70 74 75 72 65 5f 70 72 61 67 6d 61 20 64 62 32  pture_pragma db2
a4e0: 20 6f 75 74 20 7b 50 52 41 47 4d 41 20 69 6e 64   out {PRAGMA ind
a4f0: 65 78 5f 6c 69 73 74 28 74 31 29 7d 0a 20 20 64  ex_list(t1)}.  d
a500: 62 32 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20  b2 eval {SELECT 
a510: 6e 61 6d 65 2c 20 22 75 6e 69 71 75 65 22 2c 20  name, "unique", 
a520: 6f 72 69 67 69 6e 20 46 52 4f 4d 20 6f 75 74 20  origin FROM out 
a530: 4f 52 44 45 52 20 42 59 20 73 65 71 7d 0a 7d 20  ORDER BY seq}.} 
a540: 7b 69 33 20 30 20 63 20 69 32 20 30 20 63 20 69  {i3 0 c i2 0 c i
a550: 31 20 30 20 63 7d 0a 64 6f 5f 74 65 73 74 20 32  1 0 c}.do_test 2
a560: 33 2e 34 20 7b 0a 20 20 64 62 20 65 76 61 6c 20  3.4 {.  db eval 
a570: 7b 0a 20 20 20 20 41 4c 54 45 52 20 54 41 42 4c  {.    ALTER TABL
a580: 45 20 74 31 20 41 44 44 20 43 4f 4c 55 4d 4e 20  E t1 ADD COLUMN 
a590: 65 3b 0a 20 20 7d 0a 20 20 64 62 32 20 65 76 61  e;.  }.  db2 eva
a5a0: 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 74  l {.    PRAGMA t
a5b0: 61 62 6c 65 5f 69 6e 66 6f 28 74 31 29 3b 0a 20  able_info(t1);. 
a5c0: 20 7d 0a 7d 20 7b 2f 34 20 65 20 7b 7d 20 30 20   }.} {/4 e {} 0 
a5d0: 7b 7d 20 30 2f 7d 0a 64 6f 5f 74 65 73 74 20 32  {} 0/}.do_test 2
a5e0: 33 2e 35 20 7b 0a 20 20 64 62 20 65 76 61 6c 20  3.5 {.  db eval 
a5f0: 7b 0a 20 20 20 20 44 52 4f 50 20 54 41 42 4c 45  {.    DROP TABLE
a600: 20 74 32 3b 0a 20 20 20 20 43 52 45 41 54 45 20   t2;.    CREATE 
a610: 54 41 42 4c 45 20 74 32 28 78 2c 20 79 20 49 4e  TABLE t2(x, y IN
a620: 54 45 47 45 52 20 52 45 46 45 52 45 4e 43 45 53  TEGER REFERENCES
a630: 20 74 31 29 3b 0a 20 20 7d 0a 20 20 64 62 32 20   t1);.  }.  db2 
a640: 65 76 61 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d  eval {.    PRAGM
a650: 41 20 66 6f 72 65 69 67 6e 5f 6b 65 79 5f 6c 69  A foreign_key_li
a660: 73 74 28 74 32 29 3b 0a 20 20 7d 0a 7d 20 7b 30  st(t2);.  }.} {0
a670: 20 30 20 74 31 20 79 20 7b 7d 20 7b 4e 4f 20 41   0 t1 y {} {NO A
a680: 43 54 49 4f 4e 7d 20 7b 4e 4f 20 41 43 54 49 4f  CTION} {NO ACTIO
a690: 4e 7d 20 4e 4f 4e 45 7d 0a 0a 64 61 74 61 62 61  N} NONE}..databa
a6a0: 73 65 5f 6e 65 76 65 72 5f 63 6f 72 72 75 70 74  se_never_corrupt
a6b0: 0a 66 69 6e 69 73 68 5f 74 65 73 74 0a           .finish_test.