/ Hex Artifact Content
Login

Artifact 6cf0f0ce4618e841457aa42745afda55ddbc95fe:


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 0a 69 66 63 61 70 61 62 6c 65 20 70 61  ]...ifcapable pa
0a80: 67 65 72 5f 70 72 61 67 6d 61 73 20 7b 0a 73 65  ger_pragmas {.se
0a90: 74 20 44 46 4c 54 5f 43 41 43 48 45 5f 53 5a 20  t DFLT_CACHE_SZ 
0aa0: 5b 64 62 20 6f 6e 65 20 7b 50 52 41 47 4d 41 20  [db one {PRAGMA 
0ab0: 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69  default_cache_si
0ac0: 7a 65 7d 5d 0a 73 65 74 20 54 45 4d 50 5f 43 41  ze}].set TEMP_CA
0ad0: 43 48 45 5f 53 5a 20 5b 64 62 20 6f 6e 65 20 7b  CHE_SZ [db one {
0ae0: 50 52 41 47 4d 41 20 74 65 6d 70 2e 64 65 66 61  PRAGMA temp.defa
0af0: 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65 7d 5d  ult_cache_size}]
0b00: 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d  .do_test pragma-
0b10: 31 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  1.1 {.  execsql 
0b20: 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 63 61 63  {.    PRAGMA cac
0b30: 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 50 52 41  he_size;.    PRA
0b40: 47 4d 41 20 64 65 66 61 75 6c 74 5f 63 61 63 68  GMA default_cach
0b50: 65 5f 73 69 7a 65 3b 0a 20 20 20 20 50 52 41 47  e_size;.    PRAG
0b60: 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a  MA synchronous;.
0b70: 20 20 7d 0a 7d 20 5b 6c 69 73 74 20 24 44 46 4c    }.} [list $DFL
0b80: 54 5f 43 41 43 48 45 5f 53 5a 20 24 44 46 4c 54  T_CACHE_SZ $DFLT
0b90: 5f 43 41 43 48 45 5f 53 5a 20 32 5d 0a 64 6f 5f  _CACHE_SZ 2].do_
0ba0: 74 65 73 74 20 70 72 61 67 6d 61 2d 31 2e 32 20  test pragma-1.2 
0bb0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
0bc0: 20 20 50 52 41 47 4d 41 20 73 79 6e 63 68 72 6f    PRAGMA synchro
0bd0: 6e 6f 75 73 3d 4f 46 46 3b 0a 20 20 20 20 50 52  nous=OFF;.    PR
0be0: 41 47 4d 41 20 63 61 63 68 65 5f 73 69 7a 65 3d  AGMA cache_size=
0bf0: 31 32 33 34 3b 0a 20 20 20 20 50 52 41 47 4d 41  1234;.    PRAGMA
0c00: 20 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20   cache_size;.   
0c10: 20 50 52 41 47 4d 41 20 64 65 66 61 75 6c 74 5f   PRAGMA default_
0c20: 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20  cache_size;.    
0c30: 50 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f  PRAGMA synchrono
0c40: 75 73 3b 0a 20 20 7d 0a 7d 20 5b 6c 69 73 74 20  us;.  }.} [list 
0c50: 31 32 33 34 20 24 44 46 4c 54 5f 43 41 43 48 45  1234 $DFLT_CACHE
0c60: 5f 53 5a 20 30 5d 0a 64 6f 5f 74 65 73 74 20 70  _SZ 0].do_test p
0c70: 72 61 67 6d 61 2d 31 2e 33 20 7b 0a 20 20 64 62  ragma-1.3 {.  db
0c80: 20 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74 65 33   close.  sqlite3
0c90: 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20 65 78   db test.db.  ex
0ca0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47  ecsql {.    PRAG
0cb0: 4d 41 20 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20  MA cache_size;. 
0cc0: 20 20 20 50 52 41 47 4d 41 20 64 65 66 61 75 6c     PRAGMA defaul
0cd0: 74 5f 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20  t_cache_size;.  
0ce0: 20 20 50 52 41 47 4d 41 20 73 79 6e 63 68 72 6f    PRAGMA synchro
0cf0: 6e 6f 75 73 3b 0a 20 20 7d 0a 7d 20 5b 6c 69 73  nous;.  }.} [lis
0d00: 74 20 24 44 46 4c 54 5f 43 41 43 48 45 5f 53 5a  t $DFLT_CACHE_SZ
0d10: 20 24 44 46 4c 54 5f 43 41 43 48 45 5f 53 5a 20   $DFLT_CACHE_SZ 
0d20: 32 5d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  2].do_test pragm
0d30: 61 2d 31 2e 34 20 7b 0a 20 20 65 78 65 63 73 71  a-1.4 {.  execsq
0d40: 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 73  l {.    PRAGMA s
0d50: 79 6e 63 68 72 6f 6e 6f 75 73 3d 4f 46 46 3b 0a  ynchronous=OFF;.
0d60: 20 20 20 20 50 52 41 47 4d 41 20 63 61 63 68 65      PRAGMA cache
0d70: 5f 73 69 7a 65 3b 0a 20 20 20 20 50 52 41 47 4d  _size;.    PRAGM
0d80: 41 20 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f  A default_cache_
0d90: 73 69 7a 65 3b 0a 20 20 20 20 50 52 41 47 4d 41  size;.    PRAGMA
0da0: 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20 20   synchronous;.  
0db0: 7d 0a 7d 20 5b 6c 69 73 74 20 24 44 46 4c 54 5f  }.} [list $DFLT_
0dc0: 43 41 43 48 45 5f 53 5a 20 24 44 46 4c 54 5f 43  CACHE_SZ $DFLT_C
0dd0: 41 43 48 45 5f 53 5a 20 30 5d 0a 64 6f 5f 74 65  ACHE_SZ 0].do_te
0de0: 73 74 20 70 72 61 67 6d 61 2d 31 2e 35 20 7b 0a  st pragma-1.5 {.
0df0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
0e00: 50 52 41 47 4d 41 20 63 61 63 68 65 5f 73 69 7a  PRAGMA cache_siz
0e10: 65 3d 2d 34 33 32 31 3b 0a 20 20 20 20 50 52 41  e=-4321;.    PRA
0e20: 47 4d 41 20 63 61 63 68 65 5f 73 69 7a 65 3b 0a  GMA cache_size;.
0e30: 20 20 20 20 50 52 41 47 4d 41 20 64 65 66 61 75      PRAGMA defau
0e40: 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20  lt_cache_size;. 
0e50: 20 20 20 50 52 41 47 4d 41 20 73 79 6e 63 68 72     PRAGMA synchr
0e60: 6f 6e 6f 75 73 3b 0a 20 20 7d 0a 7d 20 5b 6c 69  onous;.  }.} [li
0e70: 73 74 20 2d 34 33 32 31 20 24 44 46 4c 54 5f 43  st -4321 $DFLT_C
0e80: 41 43 48 45 5f 53 5a 20 30 5d 0a 64 6f 5f 74 65  ACHE_SZ 0].do_te
0e90: 73 74 20 70 72 61 67 6d 61 2d 31 2e 36 20 7b 0a  st pragma-1.6 {.
0ea0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
0eb0: 50 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f  PRAGMA synchrono
0ec0: 75 73 3d 4f 4e 3b 0a 20 20 20 20 50 52 41 47 4d  us=ON;.    PRAGM
0ed0: 41 20 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20  A cache_size;.  
0ee0: 20 20 50 52 41 47 4d 41 20 64 65 66 61 75 6c 74    PRAGMA default
0ef0: 5f 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20  _cache_size;.   
0f00: 20 50 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e   PRAGMA synchron
0f10: 6f 75 73 3b 0a 20 20 7d 0a 7d 20 5b 6c 69 73 74  ous;.  }.} [list
0f20: 20 2d 34 33 32 31 20 24 44 46 4c 54 5f 43 41 43   -4321 $DFLT_CAC
0f30: 48 45 5f 53 5a 20 31 5d 0a 64 6f 5f 74 65 73 74  HE_SZ 1].do_test
0f40: 20 70 72 61 67 6d 61 2d 31 2e 37 20 7b 0a 20 20   pragma-1.7 {.  
0f50: 64 62 20 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74  db close.  sqlit
0f60: 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20  e3 db test.db.  
0f70: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52  execsql {.    PR
0f80: 41 47 4d 41 20 63 61 63 68 65 5f 73 69 7a 65 3b  AGMA cache_size;
0f90: 0a 20 20 20 20 50 52 41 47 4d 41 20 64 65 66 61  .    PRAGMA defa
0fa0: 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65 3b 0a  ult_cache_size;.
0fb0: 20 20 20 20 50 52 41 47 4d 41 20 73 79 6e 63 68      PRAGMA synch
0fc0: 72 6f 6e 6f 75 73 3b 0a 20 20 7d 0a 7d 20 5b 6c  ronous;.  }.} [l
0fd0: 69 73 74 20 24 44 46 4c 54 5f 43 41 43 48 45 5f  ist $DFLT_CACHE_
0fe0: 53 5a 20 24 44 46 4c 54 5f 43 41 43 48 45 5f 53  SZ $DFLT_CACHE_S
0ff0: 5a 20 32 5d 0a 64 6f 5f 74 65 73 74 20 70 72 61  Z 2].do_test pra
1000: 67 6d 61 2d 31 2e 38 20 7b 0a 20 20 65 78 65 63  gma-1.8 {.  exec
1010: 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41  sql {.    PRAGMA
1020: 20 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73   default_cache_s
1030: 69 7a 65 3d 2d 31 32 33 3b 0a 20 20 20 20 50 52  ize=-123;.    PR
1040: 41 47 4d 41 20 63 61 63 68 65 5f 73 69 7a 65 3b  AGMA cache_size;
1050: 0a 20 20 20 20 50 52 41 47 4d 41 20 64 65 66 61  .    PRAGMA defa
1060: 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65 3b 0a  ult_cache_size;.
1070: 20 20 20 20 50 52 41 47 4d 41 20 73 79 6e 63 68      PRAGMA synch
1080: 72 6f 6e 6f 75 73 3b 0a 20 20 7d 0a 7d 20 7b 31  ronous;.  }.} {1
1090: 32 33 20 31 32 33 20 32 7d 0a 64 6f 5f 74 65 73  23 123 2}.do_tes
10a0: 74 20 70 72 61 67 6d 61 2d 31 2e 39 2e 31 20 7b  t pragma-1.9.1 {
10b0: 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 73 71  .  db close.  sq
10c0: 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64 62  lite3 db test.db
10d0: 3b 20 73 65 74 20 3a 3a 44 42 20 5b 73 71 6c 69  ; set ::DB [sqli
10e0: 74 65 33 5f 63 6f 6e 6e 65 63 74 69 6f 6e 5f 70  te3_connection_p
10f0: 6f 69 6e 74 65 72 20 64 62 5d 0a 20 20 65 78 65  ointer db].  exe
1100: 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d  csql {.    PRAGM
1110: 41 20 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20  A cache_size;.  
1120: 20 20 50 52 41 47 4d 41 20 64 65 66 61 75 6c 74    PRAGMA default
1130: 5f 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20  _cache_size;.   
1140: 20 50 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e   PRAGMA synchron
1150: 6f 75 73 3b 0a 20 20 7d 0a 7d 20 7b 31 32 33 20  ous;.  }.} {123 
1160: 31 32 33 20 32 7d 0a 69 66 63 61 70 61 62 6c 65  123 2}.ifcapable
1170: 20 76 61 63 75 75 6d 20 7b 0a 20 20 64 6f 5f 74   vacuum {.  do_t
1180: 65 73 74 20 70 72 61 67 6d 61 2d 31 2e 39 2e 32  est pragma-1.9.2
1190: 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b   {.    execsql {
11a0: 0a 20 20 20 20 20 20 56 41 43 55 55 4d 3b 0a 20  .      VACUUM;. 
11b0: 20 20 20 20 20 50 52 41 47 4d 41 20 63 61 63 68       PRAGMA cach
11c0: 65 5f 73 69 7a 65 3b 0a 20 20 20 20 20 20 50 52  e_size;.      PR
11d0: 41 47 4d 41 20 64 65 66 61 75 6c 74 5f 63 61 63  AGMA default_cac
11e0: 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 20 20 50  he_size;.      P
11f0: 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75  RAGMA synchronou
1200: 73 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 31 32  s;.    }.  } {12
1210: 33 20 31 32 33 20 32 7d 0a 7d 0a 64 6f 5f 74 65  3 123 2}.}.do_te
1220: 73 74 20 70 72 61 67 6d 61 2d 31 2e 31 30 20 7b  st pragma-1.10 {
1230: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
1240: 20 50 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e   PRAGMA synchron
1250: 6f 75 73 3d 4e 4f 52 4d 41 4c 3b 0a 20 20 20 20  ous=NORMAL;.    
1260: 50 52 41 47 4d 41 20 63 61 63 68 65 5f 73 69 7a  PRAGMA cache_siz
1270: 65 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 64 65  e;.    PRAGMA de
1280: 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65  fault_cache_size
1290: 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 73 79 6e  ;.    PRAGMA syn
12a0: 63 68 72 6f 6e 6f 75 73 3b 0a 20 20 7d 0a 7d 20  chronous;.  }.} 
12b0: 7b 31 32 33 20 31 32 33 20 31 7d 0a 64 6f 5f 74  {123 123 1}.do_t
12c0: 65 73 74 20 70 72 61 67 6d 61 2d 31 2e 31 31 20  est pragma-1.11 
12d0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
12e0: 20 20 50 52 41 47 4d 41 20 73 79 6e 63 68 72 6f    PRAGMA synchro
12f0: 6e 6f 75 73 3d 46 55 4c 4c 3b 0a 20 20 20 20 50  nous=FULL;.    P
1300: 52 41 47 4d 41 20 63 61 63 68 65 5f 73 69 7a 65  RAGMA cache_size
1310: 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 64 65 66  ;.    PRAGMA def
1320: 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65 3b  ault_cache_size;
1330: 0a 20 20 20 20 50 52 41 47 4d 41 20 73 79 6e 63  .    PRAGMA sync
1340: 68 72 6f 6e 6f 75 73 3b 0a 20 20 7d 0a 7d 20 7b  hronous;.  }.} {
1350: 31 32 33 20 31 32 33 20 32 7d 0a 64 6f 5f 74 65  123 123 2}.do_te
1360: 73 74 20 70 72 61 67 6d 61 2d 31 2e 31 32 20 7b  st pragma-1.12 {
1370: 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 73 71  .  db close.  sq
1380: 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64 62  lite3 db test.db
1390: 3b 20 73 65 74 20 3a 3a 44 42 20 5b 73 71 6c 69  ; set ::DB [sqli
13a0: 74 65 33 5f 63 6f 6e 6e 65 63 74 69 6f 6e 5f 70  te3_connection_p
13b0: 6f 69 6e 74 65 72 20 64 62 5d 0a 20 20 65 78 65  ointer db].  exe
13c0: 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d  csql {.    PRAGM
13d0: 41 20 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20  A cache_size;.  
13e0: 20 20 50 52 41 47 4d 41 20 64 65 66 61 75 6c 74    PRAGMA default
13f0: 5f 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20  _cache_size;.   
1400: 20 50 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e   PRAGMA synchron
1410: 6f 75 73 3b 0a 20 20 7d 0a 7d 20 7b 31 32 33 20  ous;.  }.} {123 
1420: 31 32 33 20 32 7d 0a 0a 23 20 4d 61 6b 65 20 73  123 2}..# Make s
1430: 75 72 65 20 74 68 65 20 70 72 61 67 6d 61 20 68  ure the pragma h
1440: 61 6e 64 6c 65 72 20 75 6e 64 65 72 73 74 61 6e  andler understan
1450: 64 73 20 6e 75 6d 65 72 69 63 20 76 61 6c 75 65  ds numeric value
1460: 73 20 69 6e 20 61 64 64 69 74 69 6f 6e 0a 23 20  s in addition.# 
1470: 74 6f 20 6b 65 79 77 6f 72 64 73 20 6c 69 6b 65  to keywords like
1480: 20 22 6f 66 66 22 20 61 6e 64 20 22 66 75 6c 6c   "off" and "full
1490: 22 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 70 72 61  "..#.do_test pra
14a0: 67 6d 61 2d 31 2e 31 33 20 7b 0a 20 20 65 78 65  gma-1.13 {.  exe
14b0: 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d  csql {.    PRAGM
14c0: 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3d 30 3b  A synchronous=0;
14d0: 0a 20 20 20 20 50 52 41 47 4d 41 20 73 79 6e 63  .    PRAGMA sync
14e0: 68 72 6f 6e 6f 75 73 3b 0a 20 20 7d 0a 7d 20 7b  hronous;.  }.} {
14f0: 30 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  0}.do_test pragm
1500: 61 2d 31 2e 31 34 20 7b 0a 20 20 65 78 65 63 73  a-1.14 {.  execs
1510: 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20  ql {.    PRAGMA 
1520: 73 79 6e 63 68 72 6f 6e 6f 75 73 3d 32 3b 0a 20  synchronous=2;. 
1530: 20 20 20 50 52 41 47 4d 41 20 73 79 6e 63 68 72     PRAGMA synchr
1540: 6f 6e 6f 75 73 3b 0a 20 20 7d 0a 7d 20 7b 32 7d  onous;.  }.} {2}
1550: 0a 7d 20 3b 23 20 69 66 63 61 70 61 62 6c 65 20  .} ;# ifcapable 
1560: 70 61 67 65 72 5f 70 72 61 67 6d 61 73 0a 0a 23  pager_pragmas..#
1570: 20 54 65 73 74 20 74 75 72 6e 69 6e 67 20 22 66   Test turning "f
1580: 6c 61 67 22 20 70 72 61 67 6d 61 73 20 6f 6e 20  lag" pragmas on 
1590: 61 6e 64 20 6f 66 66 2e 0a 23 0a 69 66 63 61 70  and off..#.ifcap
15a0: 61 62 6c 65 20 64 65 62 75 67 20 7b 0a 20 20 23  able debug {.  #
15b0: 20 50 72 61 67 6d 61 20 22 76 64 62 65 5f 6c 69   Pragma "vdbe_li
15c0: 73 74 69 6e 67 22 20 69 73 20 6f 6e 6c 79 20 61  sting" is only a
15d0: 76 61 69 6c 61 62 6c 65 20 69 66 20 63 6f 6d 70  vailable if comp
15e0: 69 6c 65 64 20 77 69 74 68 20 53 51 4c 49 54 45  iled with SQLITE
15f0: 5f 44 45 42 55 47 0a 20 20 23 0a 20 20 64 6f 5f  _DEBUG.  #.  do_
1600: 74 65 73 74 20 70 72 61 67 6d 61 2d 31 2e 31 35  test pragma-1.15
1610: 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b   {.    execsql {
1620: 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 76 64  .      PRAGMA vd
1630: 62 65 5f 6c 69 73 74 69 6e 67 3d 59 45 53 3b 0a  be_listing=YES;.
1640: 20 20 20 20 20 20 50 52 41 47 4d 41 20 76 64 62        PRAGMA vdb
1650: 65 5f 6c 69 73 74 69 6e 67 3b 0a 20 20 20 20 7d  e_listing;.    }
1660: 0a 20 20 7d 20 7b 31 7d 0a 20 20 64 6f 5f 74 65  .  } {1}.  do_te
1670: 73 74 20 70 72 61 67 6d 61 2d 31 2e 31 36 20 7b  st pragma-1.16 {
1680: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
1690: 20 20 20 20 20 50 52 41 47 4d 41 20 76 64 62 65       PRAGMA vdbe
16a0: 5f 6c 69 73 74 69 6e 67 3d 4e 4f 3b 0a 20 20 20  _listing=NO;.   
16b0: 20 20 20 50 52 41 47 4d 41 20 76 64 62 65 5f 6c     PRAGMA vdbe_l
16c0: 69 73 74 69 6e 67 3b 0a 20 20 20 20 7d 0a 20 20  isting;.    }.  
16d0: 7d 20 7b 30 7d 0a 7d 0a 0a 64 6f 5f 74 65 73 74  } {0}.}..do_test
16e0: 20 70 72 61 67 6d 61 2d 31 2e 31 37 20 7b 0a 20   pragma-1.17 {. 
16f0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50   execsql {.    P
1700: 52 41 47 4d 41 20 70 61 72 73 65 72 5f 74 72 61  RAGMA parser_tra
1710: 63 65 3d 4f 4e 3b 0a 20 20 20 20 50 52 41 47 4d  ce=ON;.    PRAGM
1720: 41 20 70 61 72 73 65 72 5f 74 72 61 63 65 3d 4f  A parser_trace=O
1730: 46 46 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f  FF;.  }.} {}.do_
1740: 74 65 73 74 20 70 72 61 67 6d 61 2d 31 2e 31 38  test pragma-1.18
1750: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
1760: 20 20 20 50 52 41 47 4d 41 20 62 6f 67 75 73 20     PRAGMA bogus 
1770: 3d 20 2d 31 32 33 34 3b 20 20 2d 2d 20 50 61 72  = -1234;  -- Par
1780: 73 69 6e 67 20 6f 66 20 6e 65 67 61 74 69 76 65  sing of negative
1790: 20 76 61 6c 75 65 73 0a 20 20 7d 0a 7d 20 7b 7d   values.  }.} {}
17a0: 0a 0a 23 20 54 65 73 74 20 6d 6f 64 69 66 79 69  ..# Test modifyi
17b0: 6e 67 20 74 68 65 20 73 61 66 65 74 79 5f 6c 65  ng the safety_le
17c0: 76 65 6c 20 6f 66 20 61 6e 20 61 74 74 61 63 68  vel of an attach
17d0: 65 64 20 64 61 74 61 62 61 73 65 2e 0a 69 66 63  ed database..ifc
17e0: 61 70 61 62 6c 65 20 70 61 67 65 72 5f 70 72 61  apable pager_pra
17f0: 67 6d 61 73 26 26 61 74 74 61 63 68 20 7b 0a 20  gmas&&attach {. 
1800: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
1810: 32 2e 31 20 7b 0a 20 20 20 20 66 6f 72 63 65 64  2.1 {.    forced
1820: 65 6c 65 74 65 20 74 65 73 74 32 2e 64 62 0a 20  elete test2.db. 
1830: 20 20 20 66 6f 72 63 65 64 65 6c 65 74 65 20 74     forcedelete t
1840: 65 73 74 32 2e 64 62 2d 6a 6f 75 72 6e 61 6c 0a  est2.db-journal.
1850: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20      execsql {.  
1860: 20 20 20 20 41 54 54 41 43 48 20 27 74 65 73 74      ATTACH 'test
1870: 32 2e 64 62 27 20 41 53 20 61 75 78 3b 0a 20 20  2.db' AS aux;.  
1880: 20 20 7d 20 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f    } .  } {}.  do
1890: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 32 2e 32  _test pragma-2.2
18a0: 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b   {.    execsql {
18b0: 0a 20 20 20 20 20 20 70 72 61 67 6d 61 20 61 75  .      pragma au
18c0: 78 2e 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20  x.synchronous;. 
18d0: 20 20 20 7d 20 0a 20 20 7d 20 7b 32 7d 0a 20 20     } .  } {2}.  
18e0: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 32  do_test pragma-2
18f0: 2e 33 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  .3 {.    execsql
1900: 20 7b 0a 20 20 20 20 20 20 70 72 61 67 6d 61 20   {.      pragma 
1910: 61 75 78 2e 73 79 6e 63 68 72 6f 6e 6f 75 73 20  aux.synchronous 
1920: 3d 20 4f 46 46 3b 0a 20 20 20 20 20 20 70 72 61  = OFF;.      pra
1930: 67 6d 61 20 61 75 78 2e 73 79 6e 63 68 72 6f 6e  gma aux.synchron
1940: 6f 75 73 3b 0a 20 20 20 20 20 20 70 72 61 67 6d  ous;.      pragm
1950: 61 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20  a synchronous;. 
1960: 20 20 20 7d 20 0a 20 20 7d 20 7b 30 20 32 7d 0a     } .  } {0 2}.
1970: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
1980: 2d 32 2e 34 20 7b 0a 20 20 20 20 65 78 65 63 73  -2.4 {.    execs
1990: 71 6c 20 7b 0a 20 20 20 20 20 20 70 72 61 67 6d  ql {.      pragm
19a0: 61 20 61 75 78 2e 73 79 6e 63 68 72 6f 6e 6f 75  a aux.synchronou
19b0: 73 20 3d 20 4f 4e 3b 0a 20 20 20 20 20 20 70 72  s = ON;.      pr
19c0: 61 67 6d 61 20 73 79 6e 63 68 72 6f 6e 6f 75 73  agma synchronous
19d0: 3b 0a 20 20 20 20 20 20 70 72 61 67 6d 61 20 61  ;.      pragma a
19e0: 75 78 2e 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a  ux.synchronous;.
19f0: 20 20 20 20 7d 20 0a 20 20 7d 20 7b 32 20 31 7d      } .  } {2 1}
1a00: 0a 7d 20 3b 23 20 69 66 63 61 70 61 62 6c 65 20  .} ;# ifcapable 
1a10: 70 61 67 65 72 5f 70 72 61 67 6d 61 73 0a 0a 23  pager_pragmas..#
1a20: 20 43 6f 6e 73 74 72 75 63 74 20 61 20 63 6f 72   Construct a cor
1a30: 72 75 70 74 65 64 20 69 6e 64 65 78 20 61 6e 64  rupted index and
1a40: 20 6d 61 6b 65 20 73 75 72 65 20 74 68 65 20 69   make sure the i
1a50: 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 0a 23  ntegrity_check.#
1a60: 20 70 72 61 67 6d 61 20 66 69 6e 64 73 20 69 74   pragma finds it
1a70: 2e 0a 23 0a 23 20 54 68 65 73 65 20 74 65 73 74  ..#.# These test
1a80: 73 20 77 6f 6e 27 74 20 77 6f 72 6b 20 69 66 20  s won't work if 
1a90: 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73 20  the database is 
1aa0: 65 6e 63 72 79 70 74 65 64 0a 23 0a 64 6f 5f 74  encrypted.#.do_t
1ab0: 65 73 74 20 70 72 61 67 6d 61 2d 33 2e 31 20 7b  est pragma-3.1 {
1ac0: 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 66 6f  .  db close.  fo
1ad0: 72 63 65 64 65 6c 65 74 65 20 74 65 73 74 2e 64  rcedelete test.d
1ae0: 62 20 74 65 73 74 2e 64 62 2d 6a 6f 75 72 6e 61  b test.db-journa
1af0: 6c 0a 20 20 73 71 6c 69 74 65 33 20 64 62 20 74  l.  sqlite3 db t
1b00: 65 73 74 2e 64 62 0a 20 20 65 78 65 63 73 71 6c  est.db.  execsql
1b10: 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 61 75   {.    PRAGMA au
1b20: 74 6f 5f 76 61 63 75 75 6d 3d 4f 46 46 3b 0a 20  to_vacuum=OFF;. 
1b30: 20 20 20 42 45 47 49 4e 3b 0a 20 20 20 20 43 52     BEGIN;.    CR
1b40: 45 41 54 45 20 54 41 42 4c 45 20 74 32 28 61 2c  EATE TABLE t2(a,
1b50: 62 2c 63 29 3b 0a 20 20 20 20 43 52 45 41 54 45  b,c);.    CREATE
1b60: 20 49 4e 44 45 58 20 69 32 20 4f 4e 20 74 32 28   INDEX i2 ON t2(
1b70: 61 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  a);.    INSERT I
1b80: 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28 31 31  NTO t2 VALUES(11
1b90: 2c 32 2c 33 29 3b 0a 20 20 20 20 49 4e 53 45 52  ,2,3);.    INSER
1ba0: 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53  T INTO t2 VALUES
1bb0: 28 32 32 2c 33 2c 34 29 3b 0a 20 20 20 20 43 4f  (22,3,4);.    CO
1bc0: 4d 4d 49 54 3b 0a 20 20 20 20 53 45 4c 45 43 54  MMIT;.    SELECT
1bd0: 20 72 6f 77 69 64 2c 20 2a 20 66 72 6f 6d 20 74   rowid, * from t
1be0: 32 3b 0a 20 20 7d 0a 7d 20 7b 31 20 31 31 20 32  2;.  }.} {1 11 2
1bf0: 20 33 20 32 20 32 32 20 33 20 34 7d 0a 69 66 63   3 2 22 3 4}.ifc
1c00: 61 70 61 62 6c 65 20 61 74 74 61 63 68 20 7b 0a  apable attach {.
1c10: 20 20 69 66 20 7b 21 5b 73 71 6c 69 74 65 33 20    if {![sqlite3 
1c20: 2d 68 61 73 2d 63 6f 64 65 63 5d 20 26 26 20 24  -has-codec] && $
1c30: 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 28 69  sqlite_options(i
1c40: 6e 74 65 67 72 69 74 79 63 6b 29 7d 20 7b 0a 20  ntegrityck)} {. 
1c50: 20 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d     do_test pragm
1c60: 61 2d 33 2e 32 20 7b 0a 20 20 20 20 20 20 64 62  a-3.2 {.      db
1c70: 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 72 6f   eval {SELECT ro
1c80: 6f 74 70 61 67 65 20 46 52 4f 4d 20 73 71 6c 69  otpage FROM sqli
1c90: 74 65 5f 6d 61 73 74 65 72 20 57 48 45 52 45 20  te_master WHERE 
1ca0: 6e 61 6d 65 3d 27 69 32 27 7d 20 62 72 65 61 6b  name='i2'} break
1cb0: 0a 20 20 20 20 20 20 73 65 74 20 70 67 73 7a 20  .      set pgsz 
1cc0: 5b 64 62 20 65 76 61 6c 20 7b 50 52 41 47 4d 41  [db eval {PRAGMA
1cd0: 20 70 61 67 65 5f 73 69 7a 65 7d 5d 0a 20 20 20   page_size}].   
1ce0: 20 20 20 23 20 6f 76 65 72 77 72 69 74 65 20 74     # overwrite t
1cf0: 68 65 20 68 65 61 64 65 72 20 6f 6e 20 74 68 65  he header on the
1d00: 20 72 6f 6f 74 70 61 67 65 20 6f 66 20 74 68 65   rootpage of the
1d10: 20 69 6e 64 65 78 20 69 6e 20 6f 72 64 65 72 20   index in order 
1d20: 74 6f 0a 20 20 20 20 20 20 23 20 6d 61 6b 65 20  to.      # make 
1d30: 74 68 65 20 69 6e 64 65 78 20 61 70 70 65 61 72  the index appear
1d40: 20 74 6f 20 62 65 20 65 6d 70 74 79 2e 0a 20 20   to be empty..  
1d50: 20 20 20 20 23 0a 20 20 20 20 20 20 73 65 74 20      #.      set 
1d60: 6f 66 66 73 65 74 20 5b 65 78 70 72 20 7b 24 70  offset [expr {$p
1d70: 67 73 7a 2a 28 24 72 6f 6f 74 70 61 67 65 2d 31  gsz*($rootpage-1
1d80: 29 7d 5d 0a 20 20 20 20 20 20 68 65 78 69 6f 5f  )}].      hexio_
1d90: 77 72 69 74 65 20 74 65 73 74 2e 64 62 20 24 6f  write test.db $o
1da0: 66 66 73 65 74 20 30 61 30 30 30 30 30 30 30 30  ffset 0a00000000
1db0: 30 34 30 30 30 30 30 30 30 30 30 30 0a 20 20 20  040000000000.   
1dc0: 20 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 20 20     db close.    
1dd0: 20 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73    sqlite3 db tes
1de0: 74 2e 64 62 0a 20 20 20 20 20 20 65 78 65 63 73  t.db.      execs
1df0: 71 6c 20 7b 50 52 41 47 4d 41 20 69 6e 74 65 67  ql {PRAGMA integ
1e00: 72 69 74 79 5f 63 68 65 63 6b 7d 0a 20 20 20 20  rity_check}.    
1e10: 7d 20 7b 7b 72 6f 77 20 31 20 6d 69 73 73 69 6e  } {{row 1 missin
1e20: 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d  g from index i2}
1e30: 20 7b 72 6f 77 20 32 20 6d 69 73 73 69 6e 67 20   {row 2 missing 
1e40: 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b  from index i2} {
1e50: 77 72 6f 6e 67 20 23 20 6f 66 20 65 6e 74 72 69  wrong # of entri
1e60: 65 73 20 69 6e 20 69 6e 64 65 78 20 69 32 7d 7d  es in index i2}}
1e70: 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 70 72 61  .    do_test pra
1e80: 67 6d 61 2d 33 2e 33 20 7b 0a 20 20 20 20 20 20  gma-3.3 {.      
1e90: 65 78 65 63 73 71 6c 20 7b 50 52 41 47 4d 41 20  execsql {PRAGMA 
1ea0: 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 3d  integrity_check=
1eb0: 31 7d 0a 20 20 20 20 7d 20 7b 7b 72 6f 77 20 31  1}.    } {{row 1
1ec0: 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e   missing from in
1ed0: 64 65 78 20 69 32 7d 7d 0a 20 20 20 20 64 6f 5f  dex i2}}.    do_
1ee0: 74 65 73 74 20 70 72 61 67 6d 61 2d 33 2e 34 20  test pragma-3.4 
1ef0: 7b 0a 20 20 20 20 20 20 65 78 65 63 73 71 6c 20  {.      execsql 
1f00: 7b 0a 20 20 20 20 20 20 20 20 41 54 54 41 43 48  {.        ATTACH
1f10: 20 44 41 54 41 42 41 53 45 20 27 74 65 73 74 2e   DATABASE 'test.
1f20: 64 62 27 20 41 53 20 74 32 3b 0a 20 20 20 20 20  db' AS t2;.     
1f30: 20 20 20 50 52 41 47 4d 41 20 69 6e 74 65 67 72     PRAGMA integr
1f40: 69 74 79 5f 63 68 65 63 6b 0a 20 20 20 20 20 20  ity_check.      
1f50: 7d 0a 20 20 20 20 7d 20 7b 7b 72 6f 77 20 31 20  }.    } {{row 1 
1f60: 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64  missing from ind
1f70: 65 78 20 69 32 7d 20 7b 72 6f 77 20 32 20 6d 69  ex i2} {row 2 mi
1f80: 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78  ssing from index
1f90: 20 69 32 7d 20 7b 77 72 6f 6e 67 20 23 20 6f 66   i2} {wrong # of
1fa0: 20 65 6e 74 72 69 65 73 20 69 6e 20 69 6e 64 65   entries in inde
1fb0: 78 20 69 32 7d 20 7b 72 6f 77 20 31 20 6d 69 73  x i2} {row 1 mis
1fc0: 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20  sing from index 
1fd0: 69 32 7d 20 7b 72 6f 77 20 32 20 6d 69 73 73 69  i2} {row 2 missi
1fe0: 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32  ng from index i2
1ff0: 7d 20 7b 77 72 6f 6e 67 20 23 20 6f 66 20 65 6e  } {wrong # of en
2000: 74 72 69 65 73 20 69 6e 20 69 6e 64 65 78 20 69  tries in index i
2010: 32 7d 7d 0a 20 20 20 20 64 6f 5f 74 65 73 74 20  2}}.    do_test 
2020: 70 72 61 67 6d 61 2d 33 2e 35 20 7b 0a 20 20 20  pragma-3.5 {.   
2030: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
2040: 20 20 20 20 20 50 52 41 47 4d 41 20 69 6e 74 65       PRAGMA inte
2050: 67 72 69 74 79 5f 63 68 65 63 6b 3d 34 0a 20 20  grity_check=4.  
2060: 20 20 20 20 7d 0a 20 20 20 20 7d 20 7b 7b 72 6f      }.    } {{ro
2070: 77 20 31 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d  w 1 missing from
2080: 20 69 6e 64 65 78 20 69 32 7d 20 7b 72 6f 77 20   index i2} {row 
2090: 32 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69  2 missing from i
20a0: 6e 64 65 78 20 69 32 7d 20 7b 77 72 6f 6e 67 20  ndex i2} {wrong 
20b0: 23 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20  # of entries in 
20c0: 69 6e 64 65 78 20 69 32 7d 20 7b 72 6f 77 20 31  index i2} {row 1
20d0: 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e   missing from in
20e0: 64 65 78 20 69 32 7d 7d 0a 20 20 20 20 64 6f 5f  dex i2}}.    do_
20f0: 74 65 73 74 20 70 72 61 67 6d 61 2d 33 2e 36 20  test pragma-3.6 
2100: 7b 0a 20 20 20 20 20 20 65 78 65 63 73 71 6c 20  {.      execsql 
2110: 7b 0a 20 20 20 20 20 20 20 20 50 52 41 47 4d 41  {.        PRAGMA
2120: 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b   integrity_check
2130: 3d 78 79 7a 0a 20 20 20 20 20 20 7d 0a 20 20 20  =xyz.      }.   
2140: 20 7d 20 7b 7b 72 6f 77 20 31 20 6d 69 73 73 69   } {{row 1 missi
2150: 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32  ng from index i2
2160: 7d 20 7b 72 6f 77 20 32 20 6d 69 73 73 69 6e 67  } {row 2 missing
2170: 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20   from index i2} 
2180: 7b 77 72 6f 6e 67 20 23 20 6f 66 20 65 6e 74 72  {wrong # of entr
2190: 69 65 73 20 69 6e 20 69 6e 64 65 78 20 69 32 7d  ies in index i2}
21a0: 20 7b 72 6f 77 20 31 20 6d 69 73 73 69 6e 67 20   {row 1 missing 
21b0: 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b  from index i2} {
21c0: 72 6f 77 20 32 20 6d 69 73 73 69 6e 67 20 66 72  row 2 missing fr
21d0: 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b 77 72  om index i2} {wr
21e0: 6f 6e 67 20 23 20 6f 66 20 65 6e 74 72 69 65 73  ong # of entries
21f0: 20 69 6e 20 69 6e 64 65 78 20 69 32 7d 7d 0a 20   in index i2}}. 
2200: 20 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d     do_test pragm
2210: 61 2d 33 2e 37 20 7b 0a 20 20 20 20 20 20 65 78  a-3.7 {.      ex
2220: 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 20 20  ecsql {.        
2230: 50 52 41 47 4d 41 20 69 6e 74 65 67 72 69 74 79  PRAGMA integrity
2240: 5f 63 68 65 63 6b 3d 30 0a 20 20 20 20 20 20 7d  _check=0.      }
2250: 0a 20 20 20 20 7d 20 7b 7b 72 6f 77 20 31 20 6d  .    } {{row 1 m
2260: 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65  issing from inde
2270: 78 20 69 32 7d 20 7b 72 6f 77 20 32 20 6d 69 73  x i2} {row 2 mis
2280: 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20  sing from index 
2290: 69 32 7d 20 7b 77 72 6f 6e 67 20 23 20 6f 66 20  i2} {wrong # of 
22a0: 65 6e 74 72 69 65 73 20 69 6e 20 69 6e 64 65 78  entries in index
22b0: 20 69 32 7d 20 7b 72 6f 77 20 31 20 6d 69 73 73   i2} {row 1 miss
22c0: 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69  ing from index i
22d0: 32 7d 20 7b 72 6f 77 20 32 20 6d 69 73 73 69 6e  2} {row 2 missin
22e0: 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d  g from index i2}
22f0: 20 7b 77 72 6f 6e 67 20 23 20 6f 66 20 65 6e 74   {wrong # of ent
2300: 72 69 65 73 20 69 6e 20 69 6e 64 65 78 20 69 32  ries in index i2
2310: 7d 7d 0a 20 20 0a 20 20 20 20 23 20 41 64 64 20  }}.  .    # Add 
2320: 61 64 64 69 74 69 6f 6e 61 6c 20 63 6f 72 72 75  additional corru
2330: 70 74 69 6f 6e 20 62 79 20 61 70 70 65 6e 64 69  ption by appendi
2340: 6e 67 20 75 6e 75 73 65 64 20 70 61 67 65 73 20  ng unused pages 
2350: 74 6f 20 74 68 65 20 65 6e 64 20 6f 66 0a 20 20  to the end of.  
2360: 20 20 23 20 74 68 65 20 64 61 74 61 62 61 73 65    # the database
2370: 20 66 69 6c 65 20 74 65 73 74 65 72 72 2e 64 62   file testerr.db
2380: 0a 20 20 20 20 23 0a 20 20 20 20 64 6f 5f 74 65  .    #.    do_te
2390: 73 74 20 70 72 61 67 6d 61 2d 33 2e 38 20 7b 0a  st pragma-3.8 {.
23a0: 20 20 20 20 20 20 65 78 65 63 73 71 6c 20 7b 44        execsql {D
23b0: 45 54 41 43 48 20 74 32 7d 0a 20 20 20 20 20 20  ETACH t2}.      
23c0: 66 6f 72 63 65 64 65 6c 65 74 65 20 74 65 73 74  forcedelete test
23d0: 65 72 72 2e 64 62 20 74 65 73 74 65 72 72 2e 64  err.db testerr.d
23e0: 62 2d 6a 6f 75 72 6e 61 6c 0a 20 20 20 20 20 20  b-journal.      
23f0: 73 65 74 20 6f 75 74 20 5b 6f 70 65 6e 20 74 65  set out [open te
2400: 73 74 65 72 72 2e 64 62 20 77 5d 0a 20 20 20 20  sterr.db w].    
2410: 20 20 66 63 6f 6e 66 69 67 75 72 65 20 24 6f 75    fconfigure $ou
2420: 74 20 2d 74 72 61 6e 73 6c 61 74 69 6f 6e 20 62  t -translation b
2430: 69 6e 61 72 79 0a 20 20 20 20 20 20 73 65 74 20  inary.      set 
2440: 69 6e 20 5b 6f 70 65 6e 20 74 65 73 74 2e 64 62  in [open test.db
2450: 20 72 5d 0a 20 20 20 20 20 20 66 63 6f 6e 66 69   r].      fconfi
2460: 67 75 72 65 20 24 69 6e 20 2d 74 72 61 6e 73 6c  gure $in -transl
2470: 61 74 69 6f 6e 20 62 69 6e 61 72 79 0a 20 20 20  ation binary.   
2480: 20 20 20 70 75 74 73 20 2d 6e 6f 6e 65 77 6c 69     puts -nonewli
2490: 6e 65 20 24 6f 75 74 20 5b 72 65 61 64 20 24 69  ne $out [read $i
24a0: 6e 5d 0a 20 20 20 20 20 20 73 65 65 6b 20 24 69  n].      seek $i
24b0: 6e 20 30 0a 20 20 20 20 20 20 70 75 74 73 20 2d  n 0.      puts -
24c0: 6e 6f 6e 65 77 6c 69 6e 65 20 24 6f 75 74 20 5b  nonewline $out [
24d0: 72 65 61 64 20 24 69 6e 5d 0a 20 20 20 20 20 20  read $in].      
24e0: 63 6c 6f 73 65 20 24 69 6e 0a 20 20 20 20 20 20  close $in.      
24f0: 63 6c 6f 73 65 20 24 6f 75 74 0a 20 20 20 20 20  close $out.     
2500: 20 68 65 78 69 6f 5f 77 72 69 74 65 20 74 65 73   hexio_write tes
2510: 74 65 72 72 2e 64 62 20 32 38 20 30 30 30 30 30  terr.db 28 00000
2520: 30 30 30 0a 20 20 20 20 20 20 65 78 65 63 73 71  000.      execsq
2530: 6c 20 7b 52 45 49 4e 44 45 58 20 74 32 7d 0a 20  l {REINDEX t2}. 
2540: 20 20 20 20 20 65 78 65 63 73 71 6c 20 7b 50 52       execsql {PR
2550: 41 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63  AGMA integrity_c
2560: 68 65 63 6b 7d 0a 20 20 20 20 7d 20 7b 6f 6b 7d  heck}.    } {ok}
2570: 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 70 72 61  .    do_test pra
2580: 67 6d 61 2d 33 2e 38 2e 31 20 7b 0a 20 20 20 20  gma-3.8.1 {.    
2590: 20 20 65 78 65 63 73 71 6c 20 7b 50 52 41 47 4d    execsql {PRAGM
25a0: 41 20 71 75 69 63 6b 5f 63 68 65 63 6b 7d 0a 20  A quick_check}. 
25b0: 20 20 20 7d 20 7b 6f 6b 7d 0a 20 20 20 20 64 6f     } {ok}.    do
25c0: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 33 2e 38  _test pragma-3.8
25d0: 2e 32 20 7b 0a 20 20 20 20 20 20 65 78 65 63 73  .2 {.      execs
25e0: 71 6c 20 7b 50 52 41 47 4d 41 20 51 55 49 43 4b  ql {PRAGMA QUICK
25f0: 5f 43 48 45 43 4b 7d 0a 20 20 20 20 7d 20 7b 6f  _CHECK}.    } {o
2600: 6b 7d 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 70  k}.    do_test p
2610: 72 61 67 6d 61 2d 33 2e 39 20 7b 0a 20 20 20 20  ragma-3.9 {.    
2620: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
2630: 20 20 20 20 41 54 54 41 43 48 20 27 74 65 73 74      ATTACH 'test
2640: 65 72 72 2e 64 62 27 20 41 53 20 74 32 3b 0a 20  err.db' AS t2;. 
2650: 20 20 20 20 20 20 20 50 52 41 47 4d 41 20 69 6e         PRAGMA in
2660: 74 65 67 72 69 74 79 5f 63 68 65 63 6b 0a 20 20  tegrity_check.  
2670: 20 20 20 20 7d 0a 20 20 20 20 7d 20 7b 7b 2a 2a      }.    } {{**
2680: 2a 20 69 6e 20 64 61 74 61 62 61 73 65 20 74 32  * in database t2
2690: 20 2a 2a 2a 0a 50 61 67 65 20 34 20 69 73 20 6e   ***.Page 4 is n
26a0: 65 76 65 72 20 75 73 65 64 0a 50 61 67 65 20 35  ever used.Page 5
26b0: 20 69 73 20 6e 65 76 65 72 20 75 73 65 64 0a 50   is never used.P
26c0: 61 67 65 20 36 20 69 73 20 6e 65 76 65 72 20 75  age 6 is never u
26d0: 73 65 64 7d 20 7b 72 6f 77 20 31 20 6d 69 73 73  sed} {row 1 miss
26e0: 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69  ing from index i
26f0: 32 7d 20 7b 72 6f 77 20 32 20 6d 69 73 73 69 6e  2} {row 2 missin
2700: 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d  g from index i2}
2710: 20 7b 77 72 6f 6e 67 20 23 20 6f 66 20 65 6e 74   {wrong # of ent
2720: 72 69 65 73 20 69 6e 20 69 6e 64 65 78 20 69 32  ries in index i2
2730: 7d 7d 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 70  }}.    do_test p
2740: 72 61 67 6d 61 2d 33 2e 31 30 20 7b 0a 20 20 20  ragma-3.10 {.   
2750: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
2760: 20 20 20 20 20 50 52 41 47 4d 41 20 69 6e 74 65       PRAGMA inte
2770: 67 72 69 74 79 5f 63 68 65 63 6b 3d 31 0a 20 20  grity_check=1.  
2780: 20 20 20 20 7d 0a 20 20 20 20 7d 20 7b 7b 2a 2a      }.    } {{**
2790: 2a 20 69 6e 20 64 61 74 61 62 61 73 65 20 74 32  * in database t2
27a0: 20 2a 2a 2a 0a 50 61 67 65 20 34 20 69 73 20 6e   ***.Page 4 is n
27b0: 65 76 65 72 20 75 73 65 64 7d 7d 0a 20 20 20 20  ever used}}.    
27c0: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 33  do_test pragma-3
27d0: 2e 31 31 20 7b 0a 20 20 20 20 20 20 65 78 65 63  .11 {.      exec
27e0: 73 71 6c 20 7b 0a 20 20 20 20 20 20 20 20 50 52  sql {.        PR
27f0: 41 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63  AGMA integrity_c
2800: 68 65 63 6b 3d 35 0a 20 20 20 20 20 20 7d 0a 20  heck=5.      }. 
2810: 20 20 20 7d 20 7b 7b 2a 2a 2a 20 69 6e 20 64 61     } {{*** in da
2820: 74 61 62 61 73 65 20 74 32 20 2a 2a 2a 0a 50 61  tabase t2 ***.Pa
2830: 67 65 20 34 20 69 73 20 6e 65 76 65 72 20 75 73  ge 4 is never us
2840: 65 64 0a 50 61 67 65 20 35 20 69 73 20 6e 65 76  ed.Page 5 is nev
2850: 65 72 20 75 73 65 64 0a 50 61 67 65 20 36 20 69  er used.Page 6 i
2860: 73 20 6e 65 76 65 72 20 75 73 65 64 7d 20 7b 72  s never used} {r
2870: 6f 77 20 31 20 6d 69 73 73 69 6e 67 20 66 72 6f  ow 1 missing fro
2880: 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b 72 6f 77  m index i2} {row
2890: 20 32 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20   2 missing from 
28a0: 69 6e 64 65 78 20 69 32 7d 7d 0a 20 20 20 20 64  index i2}}.    d
28b0: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 33 2e  o_test pragma-3.
28c0: 31 32 20 7b 0a 20 20 20 20 20 20 65 78 65 63 73  12 {.      execs
28d0: 71 6c 20 7b 0a 20 20 20 20 20 20 20 20 50 52 41  ql {.        PRA
28e0: 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68  GMA integrity_ch
28f0: 65 63 6b 3d 34 0a 20 20 20 20 20 20 7d 0a 20 20  eck=4.      }.  
2900: 20 20 7d 20 7b 7b 2a 2a 2a 20 69 6e 20 64 61 74    } {{*** in dat
2910: 61 62 61 73 65 20 74 32 20 2a 2a 2a 0a 50 61 67  abase t2 ***.Pag
2920: 65 20 34 20 69 73 20 6e 65 76 65 72 20 75 73 65  e 4 is never use
2930: 64 0a 50 61 67 65 20 35 20 69 73 20 6e 65 76 65  d.Page 5 is neve
2940: 72 20 75 73 65 64 0a 50 61 67 65 20 36 20 69 73  r used.Page 6 is
2950: 20 6e 65 76 65 72 20 75 73 65 64 7d 20 7b 72 6f   never used} {ro
2960: 77 20 31 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d  w 1 missing from
2970: 20 69 6e 64 65 78 20 69 32 7d 7d 0a 20 20 20 20   index i2}}.    
2980: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 33  do_test pragma-3
2990: 2e 31 33 20 7b 0a 20 20 20 20 20 20 65 78 65 63  .13 {.      exec
29a0: 73 71 6c 20 7b 0a 20 20 20 20 20 20 20 20 50 52  sql {.        PR
29b0: 41 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63  AGMA integrity_c
29c0: 68 65 63 6b 3d 33 0a 20 20 20 20 20 20 7d 0a 20  heck=3.      }. 
29d0: 20 20 20 7d 20 7b 7b 2a 2a 2a 20 69 6e 20 64 61     } {{*** in da
29e0: 74 61 62 61 73 65 20 74 32 20 2a 2a 2a 0a 50 61  tabase t2 ***.Pa
29f0: 67 65 20 34 20 69 73 20 6e 65 76 65 72 20 75 73  ge 4 is never us
2a00: 65 64 0a 50 61 67 65 20 35 20 69 73 20 6e 65 76  ed.Page 5 is nev
2a10: 65 72 20 75 73 65 64 0a 50 61 67 65 20 36 20 69  er used.Page 6 i
2a20: 73 20 6e 65 76 65 72 20 75 73 65 64 7d 7d 0a 20  s never used}}. 
2a30: 20 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d     do_test pragm
2a40: 61 2d 33 2e 31 34 20 7b 0a 20 20 20 20 20 20 65  a-3.14 {.      e
2a50: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 20  xecsql {.       
2a60: 20 50 52 41 47 4d 41 20 69 6e 74 65 67 72 69 74   PRAGMA integrit
2a70: 79 5f 63 68 65 63 6b 28 32 29 0a 20 20 20 20 20  y_check(2).     
2a80: 20 7d 0a 20 20 20 20 7d 20 7b 7b 2a 2a 2a 20 69   }.    } {{*** i
2a90: 6e 20 64 61 74 61 62 61 73 65 20 74 32 20 2a 2a  n database t2 **
2aa0: 2a 0a 50 61 67 65 20 34 20 69 73 20 6e 65 76 65  *.Page 4 is neve
2ab0: 72 20 75 73 65 64 0a 50 61 67 65 20 35 20 69 73  r used.Page 5 is
2ac0: 20 6e 65 76 65 72 20 75 73 65 64 7d 7d 0a 20 20   never used}}.  
2ad0: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
2ae0: 2d 33 2e 31 35 20 7b 0a 20 20 20 20 20 20 65 78  -3.15 {.      ex
2af0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 20 20  ecsql {.        
2b00: 41 54 54 41 43 48 20 27 74 65 73 74 65 72 72 2e  ATTACH 'testerr.
2b10: 64 62 27 20 41 53 20 74 33 3b 0a 20 20 20 20 20  db' AS t3;.     
2b20: 20 20 20 50 52 41 47 4d 41 20 69 6e 74 65 67 72     PRAGMA integr
2b30: 69 74 79 5f 63 68 65 63 6b 0a 20 20 20 20 20 20  ity_check.      
2b40: 7d 0a 20 20 20 20 7d 20 7b 7b 2a 2a 2a 20 69 6e  }.    } {{*** in
2b50: 20 64 61 74 61 62 61 73 65 20 74 32 20 2a 2a 2a   database t2 ***
2b60: 0a 50 61 67 65 20 34 20 69 73 20 6e 65 76 65 72  .Page 4 is never
2b70: 20 75 73 65 64 0a 50 61 67 65 20 35 20 69 73 20   used.Page 5 is 
2b80: 6e 65 76 65 72 20 75 73 65 64 0a 50 61 67 65 20  never used.Page 
2b90: 36 20 69 73 20 6e 65 76 65 72 20 75 73 65 64 7d  6 is never used}
2ba0: 20 7b 72 6f 77 20 31 20 6d 69 73 73 69 6e 67 20   {row 1 missing 
2bb0: 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b  from index i2} {
2bc0: 72 6f 77 20 32 20 6d 69 73 73 69 6e 67 20 66 72  row 2 missing fr
2bd0: 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b 77 72  om index i2} {wr
2be0: 6f 6e 67 20 23 20 6f 66 20 65 6e 74 72 69 65 73  ong # of entries
2bf0: 20 69 6e 20 69 6e 64 65 78 20 69 32 7d 20 7b 2a   in index i2} {*
2c00: 2a 2a 20 69 6e 20 64 61 74 61 62 61 73 65 20 74  ** in database t
2c10: 33 20 2a 2a 2a 0a 50 61 67 65 20 34 20 69 73 20  3 ***.Page 4 is 
2c20: 6e 65 76 65 72 20 75 73 65 64 0a 50 61 67 65 20  never used.Page 
2c30: 35 20 69 73 20 6e 65 76 65 72 20 75 73 65 64 0a  5 is never used.
2c40: 50 61 67 65 20 36 20 69 73 20 6e 65 76 65 72 20  Page 6 is never 
2c50: 75 73 65 64 7d 20 7b 72 6f 77 20 31 20 6d 69 73  used} {row 1 mis
2c60: 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20  sing from index 
2c70: 69 32 7d 20 7b 72 6f 77 20 32 20 6d 69 73 73 69  i2} {row 2 missi
2c80: 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32  ng from index i2
2c90: 7d 20 7b 77 72 6f 6e 67 20 23 20 6f 66 20 65 6e  } {wrong # of en
2ca0: 74 72 69 65 73 20 69 6e 20 69 6e 64 65 78 20 69  tries in index i
2cb0: 32 7d 7d 0a 20 20 20 20 64 6f 5f 74 65 73 74 20  2}}.    do_test 
2cc0: 70 72 61 67 6d 61 2d 33 2e 31 36 20 7b 0a 20 20  pragma-3.16 {.  
2cd0: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20      execsql {.  
2ce0: 20 20 20 20 20 20 50 52 41 47 4d 41 20 69 6e 74        PRAGMA int
2cf0: 65 67 72 69 74 79 5f 63 68 65 63 6b 28 31 30 29  egrity_check(10)
2d00: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 20 7b  .      }.    } {
2d10: 7b 2a 2a 2a 20 69 6e 20 64 61 74 61 62 61 73 65  {*** in database
2d20: 20 74 32 20 2a 2a 2a 0a 50 61 67 65 20 34 20 69   t2 ***.Page 4 i
2d30: 73 20 6e 65 76 65 72 20 75 73 65 64 0a 50 61 67  s never used.Pag
2d40: 65 20 35 20 69 73 20 6e 65 76 65 72 20 75 73 65  e 5 is never use
2d50: 64 0a 50 61 67 65 20 36 20 69 73 20 6e 65 76 65  d.Page 6 is neve
2d60: 72 20 75 73 65 64 7d 20 7b 72 6f 77 20 31 20 6d  r used} {row 1 m
2d70: 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65  issing from inde
2d80: 78 20 69 32 7d 20 7b 72 6f 77 20 32 20 6d 69 73  x i2} {row 2 mis
2d90: 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20  sing from index 
2da0: 69 32 7d 20 7b 77 72 6f 6e 67 20 23 20 6f 66 20  i2} {wrong # of 
2db0: 65 6e 74 72 69 65 73 20 69 6e 20 69 6e 64 65 78  entries in index
2dc0: 20 69 32 7d 20 7b 2a 2a 2a 20 69 6e 20 64 61 74   i2} {*** in dat
2dd0: 61 62 61 73 65 20 74 33 20 2a 2a 2a 0a 50 61 67  abase t3 ***.Pag
2de0: 65 20 34 20 69 73 20 6e 65 76 65 72 20 75 73 65  e 4 is never use
2df0: 64 0a 50 61 67 65 20 35 20 69 73 20 6e 65 76 65  d.Page 5 is neve
2e00: 72 20 75 73 65 64 0a 50 61 67 65 20 36 20 69 73  r used.Page 6 is
2e10: 20 6e 65 76 65 72 20 75 73 65 64 7d 20 7b 72 6f   never used} {ro
2e20: 77 20 31 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d  w 1 missing from
2e30: 20 69 6e 64 65 78 20 69 32 7d 7d 0a 20 20 20 20   index i2}}.    
2e40: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 33  do_test pragma-3
2e50: 2e 31 37 20 7b 0a 20 20 20 20 20 20 65 78 65 63  .17 {.      exec
2e60: 73 71 6c 20 7b 0a 20 20 20 20 20 20 20 20 50 52  sql {.        PR
2e70: 41 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63  AGMA integrity_c
2e80: 68 65 63 6b 3d 38 0a 20 20 20 20 20 20 7d 0a 20  heck=8.      }. 
2e90: 20 20 20 7d 20 7b 7b 2a 2a 2a 20 69 6e 20 64 61     } {{*** in da
2ea0: 74 61 62 61 73 65 20 74 32 20 2a 2a 2a 0a 50 61  tabase t2 ***.Pa
2eb0: 67 65 20 34 20 69 73 20 6e 65 76 65 72 20 75 73  ge 4 is never us
2ec0: 65 64 0a 50 61 67 65 20 35 20 69 73 20 6e 65 76  ed.Page 5 is nev
2ed0: 65 72 20 75 73 65 64 0a 50 61 67 65 20 36 20 69  er used.Page 6 i
2ee0: 73 20 6e 65 76 65 72 20 75 73 65 64 7d 20 7b 72  s never used} {r
2ef0: 6f 77 20 31 20 6d 69 73 73 69 6e 67 20 66 72 6f  ow 1 missing fro
2f00: 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b 72 6f 77  m index i2} {row
2f10: 20 32 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20   2 missing from 
2f20: 69 6e 64 65 78 20 69 32 7d 20 7b 77 72 6f 6e 67  index i2} {wrong
2f30: 20 23 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e   # of entries in
2f40: 20 69 6e 64 65 78 20 69 32 7d 20 7b 2a 2a 2a 20   index i2} {*** 
2f50: 69 6e 20 64 61 74 61 62 61 73 65 20 74 33 20 2a  in database t3 *
2f60: 2a 2a 0a 50 61 67 65 20 34 20 69 73 20 6e 65 76  **.Page 4 is nev
2f70: 65 72 20 75 73 65 64 0a 50 61 67 65 20 35 20 69  er used.Page 5 i
2f80: 73 20 6e 65 76 65 72 20 75 73 65 64 7d 7d 0a 20  s never used}}. 
2f90: 20 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d     do_test pragm
2fa0: 61 2d 33 2e 31 38 20 7b 0a 20 20 20 20 20 20 65  a-3.18 {.      e
2fb0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 20  xecsql {.       
2fc0: 20 50 52 41 47 4d 41 20 69 6e 74 65 67 72 69 74   PRAGMA integrit
2fd0: 79 5f 63 68 65 63 6b 3d 34 0a 20 20 20 20 20 20  y_check=4.      
2fe0: 7d 0a 20 20 20 20 7d 20 7b 7b 2a 2a 2a 20 69 6e  }.    } {{*** in
2ff0: 20 64 61 74 61 62 61 73 65 20 74 32 20 2a 2a 2a   database t2 ***
3000: 0a 50 61 67 65 20 34 20 69 73 20 6e 65 76 65 72  .Page 4 is never
3010: 20 75 73 65 64 0a 50 61 67 65 20 35 20 69 73 20   used.Page 5 is 
3020: 6e 65 76 65 72 20 75 73 65 64 0a 50 61 67 65 20  never used.Page 
3030: 36 20 69 73 20 6e 65 76 65 72 20 75 73 65 64 7d  6 is never used}
3040: 20 7b 72 6f 77 20 31 20 6d 69 73 73 69 6e 67 20   {row 1 missing 
3050: 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 7d 0a  from index i2}}.
3060: 20 20 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72    }.  do_test pr
3070: 61 67 6d 61 2d 33 2e 31 39 20 7b 0a 20 20 20 20  agma-3.19 {.    
3080: 63 61 74 63 68 20 7b 64 62 20 63 6c 6f 73 65 7d  catch {db close}
3090: 0a 20 20 20 20 66 6f 72 63 65 64 65 6c 65 74 65  .    forcedelete
30a0: 20 74 65 73 74 2e 64 62 20 74 65 73 74 2e 64 62   test.db test.db
30b0: 2d 6a 6f 75 72 6e 61 6c 0a 20 20 20 20 73 71 6c  -journal.    sql
30c0: 69 74 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a  ite3 db test.db.
30d0: 20 20 20 20 64 62 20 65 76 61 6c 20 7b 50 52 41      db eval {PRA
30e0: 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68  GMA integrity_ch
30f0: 65 63 6b 7d 0a 20 20 7d 20 7b 6f 6b 7d 0a 7d 0a  eck}.  } {ok}.}.
3100: 0a 23 20 56 65 72 69 66 79 20 74 68 61 74 20 50  .# Verify that P
3110: 52 41 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f  RAGMA integrity_
3120: 63 68 65 63 6b 20 63 61 74 63 68 65 73 20 55 4e  check catches UN
3130: 49 51 55 45 20 61 6e 64 20 4e 4f 54 20 4e 55 4c  IQUE and NOT NUL
3140: 4c 0a 23 20 63 6f 6e 73 74 72 61 69 6e 74 20 76  L.# constraint v
3150: 69 6f 6c 61 74 69 6f 6e 73 2e 0a 23 0a 64 6f 5f  iolations..#.do_
3160: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 70 72 61  execsql_test pra
3170: 67 6d 61 2d 33 2e 32 30 20 7b 0a 20 20 43 52 45  gma-3.20 {.  CRE
3180: 41 54 45 20 54 41 42 4c 45 20 74 31 28 61 2c 62  ATE TABLE t1(a,b
3190: 29 3b 0a 20 20 43 52 45 41 54 45 20 49 4e 44 45  );.  CREATE INDE
31a0: 58 20 74 31 61 20 4f 4e 20 74 31 28 61 29 3b 0a  X t1a ON t1(a);.
31b0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
31c0: 20 56 41 4c 55 45 53 28 31 2c 31 29 2c 28 32 2c   VALUES(1,1),(2,
31d0: 32 29 2c 28 33 2c 33 29 2c 28 32 2c 34 29 2c 28  2),(3,3),(2,4),(
31e0: 4e 55 4c 4c 2c 35 29 2c 28 4e 55 4c 4c 2c 36 29  NULL,5),(NULL,6)
31f0: 3b 0a 20 20 50 52 41 47 4d 41 20 77 72 69 74 61  ;.  PRAGMA writa
3200: 62 6c 65 5f 73 63 68 65 6d 61 3d 4f 4e 3b 0a 20  ble_schema=ON;. 
3210: 20 55 50 44 41 54 45 20 73 71 6c 69 74 65 5f 6d   UPDATE sqlite_m
3220: 61 73 74 65 72 20 53 45 54 20 73 71 6c 3d 27 43  aster SET sql='C
3230: 52 45 41 54 45 20 55 4e 49 51 55 45 20 49 4e 44  REATE UNIQUE IND
3240: 45 58 20 74 31 61 20 4f 4e 20 74 31 28 61 29 27  EX t1a ON t1(a)'
3250: 0a 20 20 20 57 48 45 52 45 20 6e 61 6d 65 3d 27  .   WHERE name='
3260: 74 31 61 27 3b 0a 20 20 55 50 44 41 54 45 20 73  t1a';.  UPDATE s
3270: 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 53 45 54  qlite_master SET
3280: 20 73 71 6c 3d 27 43 52 45 41 54 45 20 54 41 42   sql='CREATE TAB
3290: 4c 45 20 74 31 28 61 20 4e 4f 54 20 4e 55 4c 4c  LE t1(a NOT NULL
32a0: 2c 62 29 27 0a 20 20 20 57 48 45 52 45 20 6e 61  ,b)'.   WHERE na
32b0: 6d 65 3d 27 74 31 27 3b 0a 20 20 50 52 41 47 4d  me='t1';.  PRAGM
32c0: 41 20 77 72 69 74 61 62 6c 65 5f 73 63 68 65 6d  A writable_schem
32d0: 61 3d 4f 46 46 3b 0a 20 20 41 4c 54 45 52 20 54  a=OFF;.  ALTER T
32e0: 41 42 4c 45 20 74 31 20 52 45 4e 41 4d 45 20 54  ABLE t1 RENAME T
32f0: 4f 20 74 31 78 3b 0a 20 20 50 52 41 47 4d 41 20  O t1x;.  PRAGMA 
3300: 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 3b  integrity_check;
3310: 0a 7d 20 7b 7b 6e 6f 6e 2d 75 6e 69 71 75 65 20  .} {{non-unique 
3320: 65 6e 74 72 79 20 69 6e 20 69 6e 64 65 78 20 74  entry in index t
3330: 31 61 7d 20 7b 4e 55 4c 4c 20 76 61 6c 75 65 20  1a} {NULL value 
3340: 69 6e 20 74 31 78 2e 61 7d 20 7b 6e 6f 6e 2d 75  in t1x.a} {non-u
3350: 6e 69 71 75 65 20 65 6e 74 72 79 20 69 6e 20 69  nique entry in i
3360: 6e 64 65 78 20 74 31 61 7d 20 7b 4e 55 4c 4c 20  ndex t1a} {NULL 
3370: 76 61 6c 75 65 20 69 6e 20 74 31 78 2e 61 7d 7d  value in t1x.a}}
3380: 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74  .do_execsql_test
3390: 20 70 72 61 67 6d 61 2d 33 2e 32 31 20 7b 0a 20   pragma-3.21 {. 
33a0: 20 50 52 41 47 4d 41 20 69 6e 74 65 67 72 69 74   PRAGMA integrit
33b0: 79 5f 63 68 65 63 6b 28 33 29 3b 0a 7d 20 7b 7b  y_check(3);.} {{
33c0: 6e 6f 6e 2d 75 6e 69 71 75 65 20 65 6e 74 72 79  non-unique entry
33d0: 20 69 6e 20 69 6e 64 65 78 20 74 31 61 7d 20 7b   in index t1a} {
33e0: 4e 55 4c 4c 20 76 61 6c 75 65 20 69 6e 20 74 31  NULL value in t1
33f0: 78 2e 61 7d 20 7b 6e 6f 6e 2d 75 6e 69 71 75 65  x.a} {non-unique
3400: 20 65 6e 74 72 79 20 69 6e 20 69 6e 64 65 78 20   entry in index 
3410: 74 31 61 7d 7d 0a 64 6f 5f 65 78 65 63 73 71 6c  t1a}}.do_execsql
3420: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 33 2e 32  _test pragma-3.2
3430: 32 20 7b 0a 20 20 50 52 41 47 4d 41 20 69 6e 74  2 {.  PRAGMA int
3440: 65 67 72 69 74 79 5f 63 68 65 63 6b 28 32 29 3b  egrity_check(2);
3450: 0a 7d 20 7b 7b 6e 6f 6e 2d 75 6e 69 71 75 65 20  .} {{non-unique 
3460: 65 6e 74 72 79 20 69 6e 20 69 6e 64 65 78 20 74  entry in index t
3470: 31 61 7d 20 7b 4e 55 4c 4c 20 76 61 6c 75 65 20  1a} {NULL value 
3480: 69 6e 20 74 31 78 2e 61 7d 7d 0a 64 6f 5f 65 78  in t1x.a}}.do_ex
3490: 65 63 73 71 6c 5f 74 65 73 74 20 70 72 61 67 6d  ecsql_test pragm
34a0: 61 2d 33 2e 32 33 20 7b 0a 20 20 50 52 41 47 4d  a-3.23 {.  PRAGM
34b0: 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63  A integrity_chec
34c0: 6b 28 31 29 3b 0a 7d 20 7b 7b 6e 6f 6e 2d 75 6e  k(1);.} {{non-un
34d0: 69 71 75 65 20 65 6e 74 72 79 20 69 6e 20 69 6e  ique entry in in
34e0: 64 65 78 20 74 31 61 7d 7d 0a 0a 23 20 50 52 41  dex t1a}}..# PRA
34f0: 47 4d 41 20 69 6e 74 65 67 72 69 74 79 20 63 68  GMA integrity ch
3500: 65 63 6b 20 28 6f 72 20 6d 6f 72 65 20 73 70 65  eck (or more spe
3510: 63 69 66 69 63 61 6c 6c 79 20 74 68 65 20 73 71  cifically the sq
3520: 6c 69 74 65 33 42 74 72 65 65 43 6f 75 6e 74 28  lite3BtreeCount(
3530: 29 0a 23 20 69 6e 74 65 72 66 61 63 65 29 20 75  ).# interface) u
3540: 73 65 64 20 74 6f 20 6c 65 61 76 65 20 69 6e 64  sed to leave ind
3550: 65 78 20 63 75 72 73 6f 72 73 20 69 6e 20 61 6e  ex cursors in an
3560: 20 69 6e 63 6f 6e 73 69 73 74 65 6e 74 20 73 74   inconsistent st
3570: 61 74 65 0a 23 20 77 68 69 63 68 20 63 6f 75 6c  ate.# which coul
3580: 64 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 20 61  d result in an a
3590: 73 73 65 72 74 69 6f 6e 20 66 61 75 6c 74 20 69  ssertion fault i
35a0: 6e 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65  n sqlite3BtreeKe
35b0: 79 28 29 0a 23 20 63 61 6c 6c 65 64 20 66 72 6f  y().# called fro
35c0: 6d 20 73 61 76 65 43 75 72 73 6f 72 50 6f 73 69  m saveCursorPosi
35d0: 74 69 6f 6e 28 29 20 69 66 20 63 6f 6e 74 65 6e  tion() if conten
35e0: 74 20 69 73 20 72 65 6d 6f 76 65 64 20 66 72 6f  t is removed fro
35f0: 6d 20 74 68 65 0a 23 20 69 6e 64 65 78 20 77 68  m the.# index wh
3600: 69 6c 65 20 74 68 65 20 69 6e 74 65 67 72 69 74  ile the integrit
3610: 79 5f 63 68 65 63 6b 20 69 73 20 73 74 69 6c 6c  y_check is still
3620: 20 72 75 6e 6e 69 6e 67 2e 20 20 54 68 69 73 20   running.  This 
3630: 74 65 73 74 20 76 65 72 69 66 69 65 73 0a 23 20  test verifies.# 
3640: 74 68 61 74 20 70 72 6f 62 6c 65 6d 20 68 61 73  that problem has
3650: 20 62 65 65 6e 20 66 69 78 65 64 2e 0a 23 0a 64   been fixed..#.d
3660: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 33 2e  o_test pragma-3.
3670: 33 30 20 7b 0a 20 20 64 62 20 63 6c 6f 73 65 0a  30 {.  db close.
3680: 20 20 64 65 6c 65 74 65 5f 66 69 6c 65 20 74 65    delete_file te
3690: 73 74 2e 64 62 0a 20 20 73 71 6c 69 74 65 33 20  st.db.  sqlite3 
36a0: 64 62 20 74 65 73 74 2e 64 62 0a 20 20 64 62 20  db test.db.  db 
36b0: 65 76 61 6c 20 7b 0a 20 20 20 20 43 52 45 41 54  eval {.    CREAT
36c0: 45 20 54 41 42 4c 45 20 74 31 28 61 2c 62 2c 63  E TABLE t1(a,b,c
36d0: 29 3b 0a 20 20 20 20 57 49 54 48 20 52 45 43 55  );.    WITH RECU
36e0: 52 53 49 56 45 0a 20 20 20 20 20 20 63 28 69 29  RSIVE.      c(i)
36f0: 20 41 53 20 28 56 41 4c 55 45 53 28 31 29 20 55   AS (VALUES(1) U
3700: 4e 49 4f 4e 20 41 4c 4c 20 53 45 4c 45 43 54 20  NION ALL SELECT 
3710: 69 2b 31 20 46 52 4f 4d 20 63 20 57 48 45 52 45  i+1 FROM c WHERE
3720: 20 69 3c 31 30 30 29 0a 20 20 20 20 49 4e 53 45   i<100).    INSE
3730: 52 54 20 49 4e 54 4f 20 74 31 28 61 2c 62 2c 63  RT INTO t1(a,b,c
3740: 29 20 53 45 4c 45 43 54 20 69 2c 20 70 72 69 6e  ) SELECT i, prin
3750: 74 66 28 27 78 79 7a 25 30 38 78 27 2c 69 29 2c  tf('xyz%08x',i),
3760: 20 32 30 30 30 2d 69 20 46 52 4f 4d 20 63 3b 0a   2000-i FROM c;.
3770: 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45 58      CREATE INDEX
3780: 20 74 31 61 20 4f 4e 20 74 31 28 61 29 3b 0a 20   t1a ON t1(a);. 
3790: 20 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20     CREATE INDEX 
37a0: 74 31 62 63 20 4f 4e 20 74 31 28 62 2c 63 29 3b  t1bc ON t1(b,c);
37b0: 0a 20 20 7d 0a 20 20 64 62 20 65 76 61 6c 20 7b  .  }.  db eval {
37c0: 50 52 41 47 4d 41 20 69 6e 74 65 67 72 69 74 79  PRAGMA integrity
37d0: 5f 63 68 65 63 6b 7d 20 7b 0a 20 20 20 20 20 64  _check} {.     d
37e0: 62 20 65 76 61 6c 20 7b 44 45 4c 45 54 45 20 46  b eval {DELETE F
37f0: 52 4f 4d 20 74 31 7d 0a 20 20 7d 0a 7d 20 7b 7d  ROM t1}.  }.} {}
3800: 0a 0a 23 20 54 65 73 74 20 6d 6f 64 69 66 79 69  ..# Test modifyi
3810: 6e 67 20 74 68 65 20 63 61 63 68 65 5f 73 69 7a  ng the cache_siz
3820: 65 20 6f 66 20 61 6e 20 61 74 74 61 63 68 65 64  e of an attached
3830: 20 64 61 74 61 62 61 73 65 2e 0a 69 66 63 61 70   database..ifcap
3840: 61 62 6c 65 20 70 61 67 65 72 5f 70 72 61 67 6d  able pager_pragm
3850: 61 73 26 26 61 74 74 61 63 68 20 7b 0a 64 6f 5f  as&&attach {.do_
3860: 74 65 73 74 20 70 72 61 67 6d 61 2d 34 2e 31 20  test pragma-4.1 
3870: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
3880: 20 20 41 54 54 41 43 48 20 27 74 65 73 74 32 2e    ATTACH 'test2.
3890: 64 62 27 20 41 53 20 61 75 78 3b 0a 20 20 20 20  db' AS aux;.    
38a0: 70 72 61 67 6d 61 20 61 75 78 2e 63 61 63 68 65  pragma aux.cache
38b0: 5f 73 69 7a 65 3b 0a 20 20 20 20 70 72 61 67 6d  _size;.    pragm
38c0: 61 20 61 75 78 2e 64 65 66 61 75 6c 74 5f 63 61  a aux.default_ca
38d0: 63 68 65 5f 73 69 7a 65 3b 0a 20 20 7d 20 0a 7d  che_size;.  } .}
38e0: 20 5b 6c 69 73 74 20 24 44 46 4c 54 5f 43 41 43   [list $DFLT_CAC
38f0: 48 45 5f 53 5a 20 24 44 46 4c 54 5f 43 41 43 48  HE_SZ $DFLT_CACH
3900: 45 5f 53 5a 5d 0a 64 6f 5f 74 65 73 74 20 70 72  E_SZ].do_test pr
3910: 61 67 6d 61 2d 34 2e 32 20 7b 0a 20 20 65 78 65  agma-4.2 {.  exe
3920: 63 73 71 6c 20 7b 0a 20 20 20 20 70 72 61 67 6d  csql {.    pragm
3930: 61 20 61 75 78 2e 63 61 63 68 65 5f 73 69 7a 65  a aux.cache_size
3940: 20 3d 20 35 30 3b 0a 20 20 20 20 70 72 61 67 6d   = 50;.    pragm
3950: 61 20 61 75 78 2e 63 61 63 68 65 5f 73 69 7a 65  a aux.cache_size
3960: 3b 0a 20 20 20 20 70 72 61 67 6d 61 20 61 75 78  ;.    pragma aux
3970: 2e 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73  .default_cache_s
3980: 69 7a 65 3b 0a 20 20 7d 20 0a 7d 20 5b 6c 69 73  ize;.  } .} [lis
3990: 74 20 35 30 20 24 44 46 4c 54 5f 43 41 43 48 45  t 50 $DFLT_CACHE
39a0: 5f 53 5a 5d 0a 64 6f 5f 74 65 73 74 20 70 72 61  _SZ].do_test pra
39b0: 67 6d 61 2d 34 2e 33 20 7b 0a 20 20 65 78 65 63  gma-4.3 {.  exec
39c0: 73 71 6c 20 7b 0a 20 20 20 20 70 72 61 67 6d 61  sql {.    pragma
39d0: 20 61 75 78 2e 64 65 66 61 75 6c 74 5f 63 61 63   aux.default_cac
39e0: 68 65 5f 73 69 7a 65 20 3d 20 34 35 36 3b 0a 20  he_size = 456;. 
39f0: 20 20 20 70 72 61 67 6d 61 20 61 75 78 2e 63 61     pragma aux.ca
3a00: 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 70 72  che_size;.    pr
3a10: 61 67 6d 61 20 61 75 78 2e 64 65 66 61 75 6c 74  agma aux.default
3a20: 5f 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 7d  _cache_size;.  }
3a30: 20 0a 7d 20 7b 34 35 36 20 34 35 36 7d 0a 64 6f   .} {456 456}.do
3a40: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 34 2e 34  _test pragma-4.4
3a50: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
3a60: 20 20 20 70 72 61 67 6d 61 20 63 61 63 68 65 5f     pragma cache_
3a70: 73 69 7a 65 3b 0a 20 20 20 20 70 72 61 67 6d 61  size;.    pragma
3a80: 20 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73   default_cache_s
3a90: 69 7a 65 3b 0a 20 20 7d 20 0a 7d 20 5b 6c 69 73  ize;.  } .} [lis
3aa0: 74 20 24 44 46 4c 54 5f 43 41 43 48 45 5f 53 5a  t $DFLT_CACHE_SZ
3ab0: 20 24 44 46 4c 54 5f 43 41 43 48 45 5f 53 5a 5d   $DFLT_CACHE_SZ]
3ac0: 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d  .do_test pragma-
3ad0: 34 2e 35 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  4.5 {.  execsql 
3ae0: 7b 0a 20 20 20 20 44 45 54 41 43 48 20 61 75 78  {.    DETACH aux
3af0: 3b 0a 20 20 20 20 41 54 54 41 43 48 20 27 74 65  ;.    ATTACH 'te
3b00: 73 74 33 2e 64 62 27 20 41 53 20 61 75 78 3b 0a  st3.db' AS aux;.
3b10: 20 20 20 20 70 72 61 67 6d 61 20 61 75 78 2e 63      pragma aux.c
3b20: 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 70  ache_size;.    p
3b30: 72 61 67 6d 61 20 61 75 78 2e 64 65 66 61 75 6c  ragma aux.defaul
3b40: 74 5f 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20  t_cache_size;.  
3b50: 7d 20 0a 7d 20 5b 6c 69 73 74 20 24 44 46 4c 54  } .} [list $DFLT
3b60: 5f 43 41 43 48 45 5f 53 5a 20 24 44 46 4c 54 5f  _CACHE_SZ $DFLT_
3b70: 43 41 43 48 45 5f 53 5a 5d 0a 64 6f 5f 74 65 73  CACHE_SZ].do_tes
3b80: 74 20 70 72 61 67 6d 61 2d 34 2e 36 20 7b 0a 20  t pragma-4.6 {. 
3b90: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 44   execsql {.    D
3ba0: 45 54 41 43 48 20 61 75 78 3b 0a 20 20 20 20 41  ETACH aux;.    A
3bb0: 54 54 41 43 48 20 27 74 65 73 74 32 2e 64 62 27  TTACH 'test2.db'
3bc0: 20 41 53 20 61 75 78 3b 0a 20 20 20 20 70 72 61   AS aux;.    pra
3bd0: 67 6d 61 20 61 75 78 2e 63 61 63 68 65 5f 73 69  gma aux.cache_si
3be0: 7a 65 3b 0a 20 20 20 20 70 72 61 67 6d 61 20 61  ze;.    pragma a
3bf0: 75 78 2e 64 65 66 61 75 6c 74 5f 63 61 63 68 65  ux.default_cache
3c00: 5f 73 69 7a 65 3b 0a 20 20 7d 20 0a 7d 20 7b 34  _size;.  } .} {4
3c10: 35 36 20 34 35 36 7d 0a 7d 20 3b 23 20 69 66 63  56 456}.} ;# ifc
3c20: 61 70 61 62 6c 65 20 70 61 67 65 72 5f 70 72 61  apable pager_pra
3c30: 67 6d 61 73 0a 0a 23 20 54 65 73 74 20 74 68 61  gmas..# Test tha
3c40: 74 20 6d 6f 64 69 66 79 69 6e 67 20 74 68 65 20  t modifying the 
3c50: 73 79 6e 63 2d 6c 65 76 65 6c 20 69 6e 20 74 68  sync-level in th
3c60: 65 20 6d 69 64 64 6c 65 20 6f 66 20 61 20 74 72  e middle of a tr
3c70: 61 6e 73 61 63 74 69 6f 6e 20 69 73 0a 23 20 64  ansaction is.# d
3c80: 69 73 61 6c 6c 6f 77 65 64 2e 0a 69 66 63 61 70  isallowed..ifcap
3c90: 61 62 6c 65 20 70 61 67 65 72 5f 70 72 61 67 6d  able pager_pragm
3ca0: 61 73 20 7b 0a 64 6f 5f 74 65 73 74 20 70 72 61  as {.do_test pra
3cb0: 67 6d 61 2d 35 2e 30 20 7b 0a 20 20 65 78 65 63  gma-5.0 {.  exec
3cc0: 73 71 6c 20 7b 0a 20 20 20 20 70 72 61 67 6d 61  sql {.    pragma
3cd0: 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20 20   synchronous;.  
3ce0: 7d 20 0a 7d 20 7b 32 7d 0a 64 6f 5f 74 65 73 74  } .} {2}.do_test
3cf0: 20 70 72 61 67 6d 61 2d 35 2e 31 20 7b 0a 20 20   pragma-5.1 {.  
3d00: 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 42  catchsql {.    B
3d10: 45 47 49 4e 3b 0a 20 20 20 20 70 72 61 67 6d 61  EGIN;.    pragma
3d20: 20 73 79 6e 63 68 72 6f 6e 6f 75 73 20 3d 20 4f   synchronous = O
3d30: 46 46 3b 0a 20 20 7d 20 0a 7d 20 7b 31 20 7b 53  FF;.  } .} {1 {S
3d40: 61 66 65 74 79 20 6c 65 76 65 6c 20 6d 61 79 20  afety level may 
3d50: 6e 6f 74 20 62 65 20 63 68 61 6e 67 65 64 20 69  not be changed i
3d60: 6e 73 69 64 65 20 61 20 74 72 61 6e 73 61 63 74  nside a transact
3d70: 69 6f 6e 7d 7d 0a 64 6f 5f 74 65 73 74 20 70 72  ion}}.do_test pr
3d80: 61 67 6d 61 2d 35 2e 32 20 7b 0a 20 20 65 78 65  agma-5.2 {.  exe
3d90: 63 73 71 6c 20 7b 0a 20 20 20 20 70 72 61 67 6d  csql {.    pragm
3da0: 61 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20  a synchronous;. 
3db0: 20 7d 20 0a 7d 20 7b 32 7d 0a 63 61 74 63 68 73   } .} {2}.catchs
3dc0: 71 6c 20 7b 43 4f 4d 4d 49 54 3b 7d 0a 7d 20 3b  ql {COMMIT;}.} ;
3dd0: 23 20 69 66 63 61 70 61 62 6c 65 20 70 61 67 65  # ifcapable page
3de0: 72 5f 70 72 61 67 6d 61 73 0a 0a 23 20 54 65 73  r_pragmas..# Tes
3df0: 74 20 73 63 68 65 6d 61 2d 71 75 65 72 79 20 70  t schema-query p
3e00: 72 61 67 6d 61 73 0a 23 0a 69 66 63 61 70 61 62  ragmas.#.ifcapab
3e10: 6c 65 20 73 63 68 65 6d 61 5f 70 72 61 67 6d 61  le schema_pragma
3e20: 73 20 7b 0a 69 66 63 61 70 61 62 6c 65 20 74 65  s {.ifcapable te
3e30: 6d 70 64 62 26 26 61 74 74 61 63 68 20 7b 0a 20  mpdb&&attach {. 
3e40: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
3e50: 36 2e 31 20 7b 0a 20 20 20 20 73 65 74 20 72 65  6.1 {.    set re
3e60: 73 20 7b 7d 0a 20 20 20 20 65 78 65 63 73 71 6c  s {}.    execsql
3e70: 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20   {SELECT * FROM 
3e80: 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74  sqlite_temp_mast
3e90: 65 72 7d 0a 20 20 20 20 66 6f 72 65 61 63 68 20  er}.    foreach 
3ea0: 7b 69 64 78 20 6e 61 6d 65 20 66 69 6c 65 7d 20  {idx name file} 
3eb0: 5b 65 78 65 63 73 71 6c 20 7b 70 72 61 67 6d 61  [execsql {pragma
3ec0: 20 64 61 74 61 62 61 73 65 5f 6c 69 73 74 7d 5d   database_list}]
3ed0: 20 7b 0a 20 20 20 20 20 20 6c 61 70 70 65 6e 64   {.      lappend
3ee0: 20 72 65 73 20 24 69 64 78 20 24 6e 61 6d 65 0a   res $idx $name.
3ef0: 20 20 20 20 7d 0a 20 20 20 20 73 65 74 20 72 65      }.    set re
3f00: 73 0a 20 20 7d 20 7b 30 20 6d 61 69 6e 20 31 20  s.  } {0 main 1 
3f10: 74 65 6d 70 20 32 20 61 75 78 7d 0a 7d 0a 64 6f  temp 2 aux}.}.do
3f20: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 36 2e 32  _test pragma-6.2
3f30: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
3f40: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
3f50: 74 32 28 61 2c 62 2c 63 29 3b 0a 20 20 20 20 70  t2(a,b,c);.    p
3f60: 72 61 67 6d 61 20 74 61 62 6c 65 5f 69 6e 66 6f  ragma table_info
3f70: 28 74 32 29 0a 20 20 7d 0a 7d 20 7b 30 20 61 20  (t2).  }.} {0 a 
3f80: 7b 7d 20 30 20 7b 7d 20 30 20 31 20 62 20 7b 7d  {} 0 {} 0 1 b {}
3f90: 20 30 20 7b 7d 20 30 20 32 20 63 20 7b 7d 20 30   0 {} 0 2 c {} 0
3fa0: 20 7b 7d 20 30 7d 0a 64 6f 5f 74 65 73 74 20 70   {} 0}.do_test p
3fb0: 72 61 67 6d 61 2d 36 2e 32 2e 31 20 7b 0a 20 20  ragma-6.2.1 {.  
3fc0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 70 72  execsql {.    pr
3fd0: 61 67 6d 61 20 74 61 62 6c 65 5f 69 6e 66 6f 3b  agma table_info;
3fe0: 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 62 20 6e 75 6c  .  }.} {}.db nul
3ff0: 6c 76 61 6c 75 65 20 3c 3c 4e 55 4c 4c 3e 3e 0a  lvalue <<NULL>>.
4000: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 36  do_test pragma-6
4010: 2e 32 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c  .2.2 {.  execsql
4020: 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41   {.    CREATE TA
4030: 42 4c 45 20 74 35 28 0a 20 20 20 20 20 20 61 20  BLE t5(.      a 
4040: 54 45 58 54 20 44 45 46 41 55 4c 54 20 43 55 52  TEXT DEFAULT CUR
4050: 52 45 4e 54 5f 54 49 4d 45 53 54 41 4d 50 2c 20  RENT_TIMESTAMP, 
4060: 0a 20 20 20 20 20 20 62 20 44 45 46 41 55 4c 54  .      b DEFAULT
4070: 20 28 35 2b 33 29 2c 0a 20 20 20 20 20 20 63 20   (5+3),.      c 
4080: 54 45 58 54 2c 0a 20 20 20 20 20 20 64 20 49 4e  TEXT,.      d IN
4090: 54 45 47 45 52 20 44 45 46 41 55 4c 54 20 4e 55  TEGER DEFAULT NU
40a0: 4c 4c 2c 0a 20 20 20 20 20 20 65 20 54 45 58 54  LL,.      e TEXT
40b0: 20 44 45 46 41 55 4c 54 20 27 27 2c 0a 20 20 20   DEFAULT '',.   
40c0: 20 20 20 55 4e 49 51 55 45 28 62 2c 63 2c 64 29     UNIQUE(b,c,d)
40d0: 2c 0a 20 20 20 20 20 20 50 52 49 4d 41 52 59 20  ,.      PRIMARY 
40e0: 4b 45 59 28 65 2c 62 2c 63 29 0a 20 20 20 20 29  KEY(e,b,c).    )
40f0: 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 74 61 62  ;.    PRAGMA tab
4100: 6c 65 5f 69 6e 66 6f 28 74 35 29 3b 0a 20 20 7d  le_info(t5);.  }
4110: 0a 7d 20 7b 30 20 61 20 54 45 58 54 20 30 20 43  .} {0 a TEXT 0 C
4120: 55 52 52 45 4e 54 5f 54 49 4d 45 53 54 41 4d 50  URRENT_TIMESTAMP
4130: 20 30 20 31 20 62 20 7b 7d 20 30 20 35 2b 33 20   0 1 b {} 0 5+3 
4140: 32 20 32 20 63 20 54 45 58 54 20 30 20 3c 3c 4e  2 2 c TEXT 0 <<N
4150: 55 4c 4c 3e 3e 20 33 20 33 20 64 20 49 4e 54 45  ULL>> 3 3 d INTE
4160: 47 45 52 20 30 20 4e 55 4c 4c 20 30 20 34 20 65  GER 0 NULL 0 4 e
4170: 20 54 45 58 54 20 30 20 27 27 20 31 7d 0a 64 62   TEXT 0 '' 1}.db
4180: 20 6e 75 6c 6c 76 61 6c 75 65 20 7b 7d 0a 64 6f   nullvalue {}.do
4190: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 36 2e 32  _test pragma-6.2
41a0: 2e 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .3 {.  execsql {
41b0: 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  .    CREATE TABL
41c0: 45 20 74 32 5f 33 28 61 2c 62 20 49 4e 54 45 47  E t2_3(a,b INTEG
41d0: 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 63  ER PRIMARY KEY,c
41e0: 29 3b 0a 20 20 20 20 70 72 61 67 6d 61 20 74 61  );.    pragma ta
41f0: 62 6c 65 5f 69 6e 66 6f 28 74 32 5f 33 29 0a 20  ble_info(t2_3). 
4200: 20 7d 0a 7d 20 7b 30 20 61 20 7b 7d 20 30 20 7b   }.} {0 a {} 0 {
4210: 7d 20 30 20 31 20 62 20 49 4e 54 45 47 45 52 20  } 0 1 b INTEGER 
4220: 30 20 7b 7d 20 31 20 32 20 63 20 7b 7d 20 30 20  0 {} 1 2 c {} 0 
4230: 7b 7d 20 30 7d 0a 69 66 63 61 70 61 62 6c 65 20  {} 0}.ifcapable 
4240: 7b 66 6f 72 65 69 67 6e 6b 65 79 7d 20 7b 0a 20  {foreignkey} {. 
4250: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
4260: 36 2e 33 2e 31 20 7b 0a 20 20 20 20 65 78 65 63  6.3.1 {.    exec
4270: 73 71 6c 20 7b 0a 20 20 20 20 20 20 43 52 45 41  sql {.      CREA
4280: 54 45 20 54 41 42 4c 45 20 74 33 28 61 20 69 6e  TE TABLE t3(a in
4290: 74 20 72 65 66 65 72 65 6e 63 65 73 20 74 32 28  t references t2(
42a0: 62 29 2c 20 62 20 55 4e 49 51 55 45 29 3b 0a 20  b), b UNIQUE);. 
42b0: 20 20 20 20 20 70 72 61 67 6d 61 20 66 6f 72 65       pragma fore
42c0: 69 67 6e 5f 6b 65 79 5f 6c 69 73 74 28 74 33 29  ign_key_list(t3)
42d0: 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 30 20 30  ;.    }.  } {0 0
42e0: 20 74 32 20 61 20 62 20 7b 4e 4f 20 41 43 54 49   t2 a b {NO ACTI
42f0: 4f 4e 7d 20 7b 4e 4f 20 41 43 54 49 4f 4e 7d 20  ON} {NO ACTION} 
4300: 4e 4f 4e 45 7d 0a 20 20 64 6f 5f 74 65 73 74 20  NONE}.  do_test 
4310: 70 72 61 67 6d 61 2d 36 2e 33 2e 32 20 7b 0a 20  pragma-6.3.2 {. 
4320: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
4330: 20 20 20 70 72 61 67 6d 61 20 66 6f 72 65 69 67     pragma foreig
4340: 6e 5f 6b 65 79 5f 6c 69 73 74 3b 0a 20 20 20 20  n_key_list;.    
4350: 7d 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65  }.  } {}.  do_te
4360: 73 74 20 70 72 61 67 6d 61 2d 36 2e 33 2e 33 20  st pragma-6.3.3 
4370: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a  {.    execsql {.
4380: 20 20 20 20 20 20 70 72 61 67 6d 61 20 66 6f 72        pragma for
4390: 65 69 67 6e 5f 6b 65 79 5f 6c 69 73 74 28 74 33  eign_key_list(t3
43a0: 5f 62 6f 67 75 73 29 3b 0a 20 20 20 20 7d 0a 20  _bogus);.    }. 
43b0: 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20   } {}.  do_test 
43c0: 70 72 61 67 6d 61 2d 36 2e 33 2e 34 20 7b 0a 20  pragma-6.3.4 {. 
43d0: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
43e0: 20 20 20 70 72 61 67 6d 61 20 66 6f 72 65 69 67     pragma foreig
43f0: 6e 5f 6b 65 79 5f 6c 69 73 74 28 74 35 29 3b 0a  n_key_list(t5);.
4400: 20 20 20 20 7d 0a 20 20 7d 20 7b 7d 0a 20 20 64      }.  } {}.  d
4410: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 36 2e  o_test pragma-6.
4420: 34 20 7b 0a 20 20 20 20 63 61 70 74 75 72 65 5f  4 {.    capture_
4430: 70 72 61 67 6d 61 20 64 62 20 6f 75 74 20 7b 0a  pragma db out {.
4440: 20 20 20 20 20 20 70 72 61 67 6d 61 20 69 6e 64        pragma ind
4450: 65 78 5f 6c 69 73 74 28 74 33 29 3b 0a 20 20 20  ex_list(t3);.   
4460: 20 7d 0a 20 20 20 20 64 62 20 65 76 61 6c 20 7b   }.    db eval {
4470: 53 45 4c 45 43 54 20 73 65 71 2c 20 22 6e 61 6d  SELECT seq, "nam
4480: 65 22 2c 20 22 75 6e 69 71 75 65 22 20 46 52 4f  e", "unique" FRO
4490: 4d 20 6f 75 74 20 4f 52 44 45 52 20 42 59 20 73  M out ORDER BY s
44a0: 65 71 7d 0a 20 20 7d 20 7b 30 20 73 71 6c 69 74  eq}.  } {0 sqlit
44b0: 65 5f 61 75 74 6f 69 6e 64 65 78 5f 74 33 5f 31  e_autoindex_t3_1
44c0: 20 31 7d 0a 7d 0a 69 66 63 61 70 61 62 6c 65 20   1}.}.ifcapable 
44d0: 7b 21 66 6f 72 65 69 67 6e 6b 65 79 7d 20 7b 0a  {!foreignkey} {.
44e0: 20 20 65 78 65 63 73 71 6c 20 7b 43 52 45 41 54    execsql {CREAT
44f0: 45 20 54 41 42 4c 45 20 74 33 28 61 2c 62 20 55  E TABLE t3(a,b U
4500: 4e 49 51 55 45 29 7d 0a 7d 0a 64 6f 5f 74 65 73  NIQUE)}.}.do_tes
4510: 74 20 70 72 61 67 6d 61 2d 36 2e 35 2e 31 20 7b  t pragma-6.5.1 {
4520: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
4530: 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 74 33   CREATE INDEX t3
4540: 69 31 20 4f 4e 20 74 33 28 61 2c 62 29 3b 0a 20  i1 ON t3(a,b);. 
4550: 20 7d 0a 20 20 63 61 70 74 75 72 65 5f 70 72 61   }.  capture_pra
4560: 67 6d 61 20 64 62 20 6f 75 74 20 7b 0a 20 20 20  gma db out {.   
4570: 20 70 72 61 67 6d 61 20 69 6e 64 65 78 5f 69 6e   pragma index_in
4580: 66 6f 28 74 33 69 31 29 3b 0a 20 20 7d 0a 20 20  fo(t3i1);.  }.  
4590: 64 62 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20  db eval {SELECT 
45a0: 73 65 71 6e 6f 2c 20 63 69 64 2c 20 6e 61 6d 65  seqno, cid, name
45b0: 20 46 52 4f 4d 20 6f 75 74 20 4f 52 44 45 52 20   FROM out ORDER 
45c0: 42 59 20 73 65 71 6e 6f 7d 0a 7d 20 7b 30 20 30  BY seqno}.} {0 0
45d0: 20 61 20 31 20 31 20 62 7d 0a 64 6f 5f 74 65 73   a 1 1 b}.do_tes
45e0: 74 20 70 72 61 67 6d 61 2d 36 2e 35 2e 32 20 7b  t pragma-6.5.2 {
45f0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
4600: 20 70 72 61 67 6d 61 20 69 6e 64 65 78 5f 69 6e   pragma index_in
4610: 66 6f 28 74 33 69 31 5f 62 6f 67 75 73 29 3b 0a  fo(t3i1_bogus);.
4620: 20 20 7d 0a 7d 20 7b 7d 0a 0a 69 66 63 61 70 61    }.} {}..ifcapa
4630: 62 6c 65 20 74 65 6d 70 64 62 20 7b 0a 20 20 23  ble tempdb {.  #
4640: 20 54 65 73 74 20 66 6f 72 20 74 69 63 6b 65 74   Test for ticket
4650: 20 23 33 33 32 30 2e 20 57 68 65 6e 20 61 20 74   #3320. When a t
4660: 65 6d 70 20 74 61 62 6c 65 20 6f 66 20 74 68 65  emp table of the
4670: 20 73 61 6d 65 20 6e 61 6d 65 20 65 78 69 73 74   same name exist
4680: 73 2c 20 6d 61 6b 65 0a 20 20 23 20 73 75 72 65  s, make.  # sure
4690: 20 74 68 65 20 73 63 68 65 6d 61 20 6f 66 20 74   the schema of t
46a0: 68 65 20 6d 61 69 6e 20 74 61 62 6c 65 20 63 61  he main table ca
46b0: 6e 20 73 74 69 6c 6c 20 62 65 20 71 75 65 72 69  n still be queri
46c0: 65 64 20 75 73 69 6e 67 20 0a 20 20 23 20 22 70  ed using .  # "p
46d0: 72 61 67 6d 61 20 74 61 62 6c 65 5f 69 6e 66 6f  ragma table_info
46e0: 22 3a 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61  ":.  do_test pra
46f0: 67 6d 61 2d 36 2e 36 2e 31 20 7b 0a 20 20 20 20  gma-6.6.1 {.    
4700: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
4710: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 72 69  CREATE TABLE tri
4720: 61 6c 28 63 6f 6c 5f 6d 61 69 6e 29 3b 0a 20 20  al(col_main);.  
4730: 20 20 20 20 43 52 45 41 54 45 20 54 45 4d 50 20      CREATE TEMP 
4740: 54 41 42 4c 45 20 74 72 69 61 6c 28 63 6f 6c 5f  TABLE trial(col_
4750: 74 65 6d 70 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  temp);.    }.  }
4760: 20 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72   {}.  do_test pr
4770: 61 67 6d 61 2d 36 2e 36 2e 32 20 7b 0a 20 20 20  agma-6.6.2 {.   
4780: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20   execsql {.     
4790: 20 50 52 41 47 4d 41 20 74 61 62 6c 65 5f 69 6e   PRAGMA table_in
47a0: 66 6f 28 74 72 69 61 6c 29 3b 0a 20 20 20 20 7d  fo(trial);.    }
47b0: 0a 20 20 7d 20 7b 30 20 63 6f 6c 5f 74 65 6d 70  .  } {0 col_temp
47c0: 20 7b 7d 20 30 20 7b 7d 20 30 7d 0a 20 20 64 6f   {} 0 {} 0}.  do
47d0: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 36 2e 36  _test pragma-6.6
47e0: 2e 33 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  .3 {.    execsql
47f0: 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20   {.      PRAGMA 
4800: 74 65 6d 70 2e 74 61 62 6c 65 5f 69 6e 66 6f 28  temp.table_info(
4810: 74 72 69 61 6c 29 3b 0a 20 20 20 20 7d 0a 20 20  trial);.    }.  
4820: 7d 20 7b 30 20 63 6f 6c 5f 74 65 6d 70 20 7b 7d  } {0 col_temp {}
4830: 20 30 20 7b 7d 20 30 7d 0a 20 20 64 6f 5f 74 65   0 {} 0}.  do_te
4840: 73 74 20 70 72 61 67 6d 61 2d 36 2e 36 2e 34 20  st pragma-6.6.4 
4850: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a  {.    execsql {.
4860: 20 20 20 20 20 20 50 52 41 47 4d 41 20 6d 61 69        PRAGMA mai
4870: 6e 2e 74 61 62 6c 65 5f 69 6e 66 6f 28 74 72 69  n.table_info(tri
4880: 61 6c 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b  al);.    }.  } {
4890: 30 20 63 6f 6c 5f 6d 61 69 6e 20 7b 7d 20 30 20  0 col_main {} 0 
48a0: 7b 7d 20 30 7d 0a 7d 0a 0a 64 6f 5f 74 65 73 74  {} 0}.}..do_test
48b0: 20 70 72 61 67 6d 61 2d 36 2e 37 20 7b 0a 20 20   pragma-6.7 {.  
48c0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52  execsql {.    CR
48d0: 45 41 54 45 20 54 41 42 4c 45 20 74 65 73 74 5f  EATE TABLE test_
48e0: 74 61 62 6c 65 28 0a 20 20 20 20 20 20 6f 6e 65  table(.      one
48f0: 20 49 4e 54 20 4e 4f 54 20 4e 55 4c 4c 20 44 45   INT NOT NULL DE
4900: 46 41 55 4c 54 20 2d 31 2c 20 0a 20 20 20 20 20  FAULT -1, .     
4910: 20 74 77 6f 20 74 65 78 74 2c 0a 20 20 20 20 20   two text,.     
4920: 20 74 68 72 65 65 20 56 41 52 43 48 41 52 28 34   three VARCHAR(4
4930: 35 2c 20 36 35 29 20 44 45 46 41 55 4c 54 20 27  5, 65) DEFAULT '
4940: 61 62 63 64 65 27 2c 0a 20 20 20 20 20 20 66 6f  abcde',.      fo
4950: 75 72 20 52 45 41 4c 20 44 45 46 41 55 4c 54 20  ur REAL DEFAULT 
4960: 58 27 61 62 63 64 65 66 27 2c 0a 20 20 20 20 20  X'abcdef',.     
4970: 20 66 69 76 65 20 44 45 46 41 55 4c 54 20 43 55   five DEFAULT CU
4980: 52 52 45 4e 54 5f 54 49 4d 45 0a 20 20 20 20 29  RRENT_TIME.    )
4990: 3b 0a 20 20 7d 0a 20 20 63 61 70 74 75 72 65 5f  ;.  }.  capture_
49a0: 70 72 61 67 6d 61 20 64 62 20 6f 75 74 20 7b 50  pragma db out {P
49b0: 52 41 47 4d 41 20 74 61 62 6c 65 5f 69 6e 66 6f  RAGMA table_info
49c0: 28 74 65 73 74 5f 74 61 62 6c 65 29 7d 0a 20 20  (test_table)}.  
49d0: 64 62 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20  db eval {SELECT 
49e0: 63 69 64 2c 20 22 6e 61 6d 65 22 2c 20 74 79 70  cid, "name", typ
49f0: 65 2c 20 22 6e 6f 74 6e 75 6c 6c 22 2c 20 64 66  e, "notnull", df
4a00: 6c 74 5f 76 61 6c 75 65 2c 20 70 6b 20 46 52 4f  lt_value, pk FRO
4a10: 4d 20 6f 75 74 0a 20 20 20 20 20 20 20 20 20 20  M out.          
4a20: 20 20 4f 52 44 45 52 20 42 59 20 63 69 64 7d 0a    ORDER BY cid}.
4a30: 7d 20 5b 63 6f 6e 63 61 74 20 5c 0a 20 20 7b 30  } [concat \.  {0
4a40: 20 6f 6e 65 20 49 4e 54 20 31 20 2d 31 20 30 7d   one INT 1 -1 0}
4a50: 20 5c 0a 20 20 7b 31 20 74 77 6f 20 74 65 78 74   \.  {1 two text
4a60: 20 30 20 7b 7d 20 30 7d 20 5c 0a 20 20 7b 32 20   0 {} 0} \.  {2 
4a70: 74 68 72 65 65 20 7b 56 41 52 43 48 41 52 28 34  three {VARCHAR(4
4a80: 35 2c 20 36 35 29 7d 20 30 20 27 61 62 63 64 65  5, 65)} 0 'abcde
4a90: 27 20 30 7d 20 5c 0a 20 20 7b 33 20 66 6f 75 72  ' 0} \.  {3 four
4aa0: 20 52 45 41 4c 20 30 20 58 27 61 62 63 64 65 66   REAL 0 X'abcdef
4ab0: 27 20 30 7d 20 5c 0a 20 20 7b 34 20 66 69 76 65  ' 0} \.  {4 five
4ac0: 20 7b 7d 20 30 20 43 55 52 52 45 4e 54 5f 54 49   {} 0 CURRENT_TI
4ad0: 4d 45 20 30 7d 20 5c 0a 5d 0a 7d 20 3b 23 20 69  ME 0} \.].} ;# i
4ae0: 66 63 61 70 61 62 6c 65 20 73 63 68 65 6d 61 5f  fcapable schema_
4af0: 70 72 61 67 6d 61 73 0a 23 20 4d 69 73 63 65 6c  pragmas.# Miscel
4b00: 6c 61 6e 65 6f 75 73 20 74 65 73 74 73 0a 23 0a  laneous tests.#.
4b10: 69 66 63 61 70 61 62 6c 65 20 73 63 68 65 6d 61  ifcapable schema
4b20: 5f 70 72 61 67 6d 61 73 20 7b 0a 64 6f 5f 74 65  _pragmas {.do_te
4b30: 73 74 20 70 72 61 67 6d 61 2d 37 2e 31 2e 31 20  st pragma-7.1.1 
4b40: 7b 0a 20 20 23 20 4d 61 6b 65 20 73 75 72 65 20  {.  # Make sure 
4b50: 61 20 70 72 61 67 6d 61 20 6b 6e 6f 77 73 20 74  a pragma knows t
4b60: 6f 20 72 65 61 64 20 74 68 65 20 73 63 68 65 6d  o read the schem
4b70: 61 20 69 66 20 69 74 20 6e 65 65 64 73 20 74 6f  a if it needs to
4b80: 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 73 71  .  db close.  sq
4b90: 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64 62  lite3 db test.db
4ba0: 0a 20 20 63 61 70 74 75 72 65 5f 70 72 61 67 6d  .  capture_pragm
4bb0: 61 20 64 62 20 6f 75 74 20 22 50 52 41 47 4d 41  a db out "PRAGMA
4bc0: 20 69 6e 64 65 78 5f 6c 69 73 74 28 74 33 29 22   index_list(t3)"
4bd0: 0a 20 20 64 62 20 65 76 61 6c 20 7b 53 45 4c 45  .  db eval {SELE
4be0: 43 54 20 6e 61 6d 65 2c 20 22 6f 72 69 67 69 6e  CT name, "origin
4bf0: 22 20 46 52 4f 4d 20 6f 75 74 20 4f 52 44 45 52  " FROM out ORDER
4c00: 20 42 59 20 6e 61 6d 65 20 44 45 53 43 7d 0a 7d   BY name DESC}.}
4c10: 20 7b 74 33 69 31 20 63 20 73 71 6c 69 74 65 5f   {t3i1 c sqlite_
4c20: 61 75 74 6f 69 6e 64 65 78 5f 74 33 5f 31 20 75  autoindex_t3_1 u
4c30: 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  }.do_test pragma
4c40: 2d 37 2e 31 2e 32 20 7b 0a 20 20 65 78 65 63 73  -7.1.2 {.  execs
4c50: 71 6c 20 7b 0a 20 20 20 20 70 72 61 67 6d 61 20  ql {.    pragma 
4c60: 69 6e 64 65 78 5f 6c 69 73 74 28 74 33 5f 62 6f  index_list(t3_bo
4c70: 67 75 73 29 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 7d  gus);.  }.} {}.}
4c80: 20 3b 23 20 69 66 63 61 70 61 62 6c 65 20 73 63   ;# ifcapable sc
4c90: 68 65 6d 61 5f 70 72 61 67 6d 61 73 0a 69 66 63  hema_pragmas.ifc
4ca0: 61 70 61 62 6c 65 20 7b 75 74 66 31 36 7d 20 7b  apable {utf16} {
4cb0: 0a 20 20 69 66 20 7b 5b 70 65 72 6d 75 74 61 74  .  if {[permutat
4cc0: 69 6f 6e 5d 20 3d 3d 20 22 22 7d 20 7b 0a 20 20  ion] == ""} {.  
4cd0: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
4ce0: 2d 37 2e 32 20 7b 0a 20 20 20 20 20 20 64 62 20  -7.2 {.      db 
4cf0: 63 6c 6f 73 65 0a 20 20 20 20 20 20 73 71 6c 69  close.      sqli
4d00: 74 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20  te3 db test.db. 
4d10: 20 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b 0a       catchsql {.
4d20: 20 20 20 20 20 20 20 20 70 72 61 67 6d 61 20 65          pragma e
4d30: 6e 63 6f 64 69 6e 67 3d 62 6f 67 75 73 3b 0a 20  ncoding=bogus;. 
4d40: 20 20 20 20 20 7d 0a 20 20 20 20 7d 20 7b 31 20       }.    } {1 
4d50: 7b 75 6e 73 75 70 70 6f 72 74 65 64 20 65 6e 63  {unsupported enc
4d60: 6f 64 69 6e 67 3a 20 62 6f 67 75 73 7d 7d 0a 20  oding: bogus}}. 
4d70: 20 7d 0a 7d 0a 69 66 63 61 70 61 62 6c 65 20 74   }.}.ifcapable t
4d80: 65 6d 70 64 62 20 7b 0a 20 20 64 6f 5f 74 65 73  empdb {.  do_tes
4d90: 74 20 70 72 61 67 6d 61 2d 37 2e 33 20 7b 0a 20  t pragma-7.3 {. 
4da0: 20 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 20 20     db close.    
4db0: 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e  sqlite3 db test.
4dc0: 64 62 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b  db.    execsql {
4dd0: 0a 20 20 20 20 20 20 70 72 61 67 6d 61 20 6c 6f  .      pragma lo
4de0: 63 6b 5f 73 74 61 74 75 73 3b 0a 20 20 20 20 7d  ck_status;.    }
4df0: 0a 20 20 7d 20 7b 6d 61 69 6e 20 75 6e 6c 6f 63  .  } {main unloc
4e00: 6b 65 64 20 74 65 6d 70 20 63 6c 6f 73 65 64 7d  ked temp closed}
4e10: 0a 7d 20 65 6c 73 65 20 7b 0a 20 20 64 6f 5f 74  .} else {.  do_t
4e20: 65 73 74 20 70 72 61 67 6d 61 2d 37 2e 33 20 7b  est pragma-7.3 {
4e30: 0a 20 20 20 20 64 62 20 63 6c 6f 73 65 0a 20 20  .    db close.  
4e40: 20 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73    sqlite3 db tes
4e50: 74 2e 64 62 0a 20 20 20 20 65 78 65 63 73 71 6c  t.db.    execsql
4e60: 20 7b 0a 20 20 20 20 20 20 70 72 61 67 6d 61 20   {.      pragma 
4e70: 6c 6f 63 6b 5f 73 74 61 74 75 73 3b 0a 20 20 20  lock_status;.   
4e80: 20 7d 0a 20 20 7d 20 7b 6d 61 69 6e 20 75 6e 6c   }.  } {main unl
4e90: 6f 63 6b 65 64 7d 0a 7d 0a 0a 0a 23 2d 2d 2d 2d  ocked}.}...#----
4ea0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4eb0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4ec0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4ed0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4ee0: 2d 2d 0a 23 20 54 65 73 74 20 63 61 73 65 73 20  --.# Test cases 
4ef0: 70 72 61 67 6d 61 2d 38 2e 2a 20 74 65 73 74 20  pragma-8.* test 
4f00: 74 68 65 20 22 50 52 41 47 4d 41 20 73 63 68 65  the "PRAGMA sche
4f10: 6d 61 5f 76 65 72 73 69 6f 6e 22 20 61 6e 64 20  ma_version" and 
4f20: 22 50 52 41 47 4d 41 0a 23 20 75 73 65 72 5f 76  "PRAGMA.# user_v
4f30: 65 72 73 69 6f 6e 22 20 73 74 61 74 65 6d 65 6e  ersion" statemen
4f40: 74 73 2e 0a 23 0a 23 20 70 72 61 67 6d 61 2d 38  ts..#.# pragma-8
4f50: 2e 31 3a 20 50 52 41 47 4d 41 20 73 63 68 65 6d  .1: PRAGMA schem
4f60: 61 5f 76 65 72 73 69 6f 6e 0a 23 20 70 72 61 67  a_version.# prag
4f70: 6d 61 2d 38 2e 32 3a 20 50 52 41 47 4d 41 20 75  ma-8.2: PRAGMA u
4f80: 73 65 72 5f 76 65 72 73 69 6f 6e 0a 23 0a 0a 69  ser_version.#..i
4f90: 66 63 61 70 61 62 6c 65 20 73 63 68 65 6d 61 5f  fcapable schema_
4fa0: 76 65 72 73 69 6f 6e 20 7b 0a 0a 23 20 46 69 72  version {..# Fir
4fb0: 73 74 20 63 68 65 63 6b 20 74 68 61 74 20 77 65  st check that we
4fc0: 20 63 61 6e 20 73 65 74 20 74 68 65 20 73 63 68   can set the sch
4fd0: 65 6d 61 20 76 65 72 73 69 6f 6e 20 61 6e 64 20  ema version and 
4fe0: 74 68 65 6e 20 72 65 74 72 69 65 76 65 20 74 68  then retrieve th
4ff0: 65 0a 23 20 73 61 6d 65 20 76 61 6c 75 65 2e 0a  e.# same value..
5000: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38  do_test pragma-8
5010: 2e 31 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c  .1.1 {.  execsql
5020: 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 73 63   {.    PRAGMA sc
5030: 68 65 6d 61 5f 76 65 72 73 69 6f 6e 20 3d 20 31  hema_version = 1
5040: 30 35 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f  05;.  }.} {}.do_
5050: 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e  test pragma-8.1.
5060: 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 32 20 7b  2 {.  execsql2 {
5070: 0a 20 20 20 20 50 52 41 47 4d 41 20 73 63 68 65  .    PRAGMA sche
5080: 6d 61 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 7d 0a  ma_version;.  }.
5090: 7d 20 7b 73 63 68 65 6d 61 5f 76 65 72 73 69 6f  } {schema_versio
50a0: 6e 20 31 30 35 7d 0a 64 6f 5f 74 65 73 74 20 70  n 105}.do_test p
50b0: 72 61 67 6d 61 2d 38 2e 31 2e 33 20 7b 0a 20 20  ragma-8.1.3 {.  
50c0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52  execsql {.    PR
50d0: 41 47 4d 41 20 73 63 68 65 6d 61 5f 76 65 72 73  AGMA schema_vers
50e0: 69 6f 6e 20 3d 20 31 30 36 3b 0a 20 20 7d 0a 7d  ion = 106;.  }.}
50f0: 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67   {}.do_test prag
5100: 6d 61 2d 38 2e 31 2e 34 20 7b 0a 20 20 65 78 65  ma-8.1.4 {.  exe
5110: 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d  csql {.    PRAGM
5120: 41 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e  A schema_version
5130: 3b 0a 20 20 7d 0a 7d 20 31 30 36 0a 0a 23 20 43  ;.  }.} 106..# C
5140: 68 65 63 6b 20 74 68 61 74 20 63 72 65 61 74 69  heck that creati
5150: 6e 67 20 61 20 74 61 62 6c 65 20 6d 6f 64 69 66  ng a table modif
5160: 69 65 73 20 74 68 65 20 73 63 68 65 6d 61 2d 76  ies the schema-v
5170: 65 72 73 69 6f 6e 20 28 74 68 69 73 20 69 73 20  ersion (this is 
5180: 72 65 61 6c 6c 79 0a 23 20 74 6f 20 76 65 72 69  really.# to veri
5190: 66 79 20 74 68 61 74 20 74 68 65 20 76 61 6c 75  fy that the valu
51a0: 65 20 62 65 69 6e 67 20 72 65 61 64 20 69 73 20  e being read is 
51b0: 69 6e 20 66 61 63 74 20 74 68 65 20 73 63 68 65  in fact the sche
51c0: 6d 61 20 76 65 72 73 69 6f 6e 29 2e 0a 64 6f 5f  ma version)..do_
51d0: 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e  test pragma-8.1.
51e0: 35 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  5 {.  execsql {.
51f0: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
5200: 20 74 34 28 61 2c 20 62 2c 20 63 29 3b 0a 20 20   t4(a, b, c);.  
5210: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 34    INSERT INTO t4
5220: 20 56 41 4c 55 45 53 28 31 2c 20 32 2c 20 33 29   VALUES(1, 2, 3)
5230: 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  ;.    SELECT * F
5240: 52 4f 4d 20 74 34 3b 0a 20 20 7d 0a 7d 20 7b 31  ROM t4;.  }.} {1
5250: 20 32 20 33 7d 0a 64 6f 5f 74 65 73 74 20 70 72   2 3}.do_test pr
5260: 61 67 6d 61 2d 38 2e 31 2e 36 20 7b 0a 20 20 65  agma-8.1.6 {.  e
5270: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41  xecsql {.    PRA
5280: 47 4d 41 20 73 63 68 65 6d 61 5f 76 65 72 73 69  GMA schema_versi
5290: 6f 6e 3b 0a 20 20 7d 0a 7d 20 31 30 37 0a 0a 23  on;.  }.} 107..#
52a0: 20 4e 6f 77 20 6f 70 65 6e 20 61 20 73 65 63 6f   Now open a seco
52b0: 6e 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f  nd connection to
52c0: 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20 45   the database. E
52d0: 6e 73 75 72 65 20 74 68 61 74 20 63 68 61 6e 67  nsure that chang
52e0: 69 6e 67 20 74 68 65 0a 23 20 73 63 68 65 6d 61  ing the.# schema
52f0: 2d 76 65 72 73 69 6f 6e 20 75 73 69 6e 67 20 74  -version using t
5300: 68 65 20 66 69 72 73 74 20 63 6f 6e 6e 65 63 74  he first connect
5310: 69 6f 6e 20 66 6f 72 63 65 73 20 74 68 65 20 73  ion forces the s
5320: 65 63 6f 6e 64 20 63 6f 6e 6e 65 63 74 69 6f 6e  econd connection
5330: 0a 23 20 74 6f 20 72 65 6c 6f 61 64 20 74 68 65  .# to reload the
5340: 20 73 63 68 65 6d 61 2e 20 54 68 69 73 20 68 61   schema. This ha
5350: 73 20 74 6f 20 62 65 20 64 6f 6e 65 20 75 73 69  s to be done usi
5360: 6e 67 20 74 68 65 20 43 2d 41 50 49 20 74 65 73  ng the C-API tes
5370: 74 20 66 75 6e 63 74 69 6f 6e 73 2c 0a 23 20 62  t functions,.# b
5380: 65 63 61 75 73 65 20 74 68 65 20 54 43 4c 20 41  ecause the TCL A
5390: 50 49 20 61 63 63 6f 75 6e 74 73 20 66 6f 72 20  PI accounts for 
53a0: 53 43 48 45 4d 41 5f 45 52 52 4f 52 20 61 6e 64  SCHEMA_ERROR and
53b0: 20 72 65 74 72 69 65 73 20 74 68 65 20 71 75 65   retries the que
53c0: 72 79 2e 0a 64 6f 5f 74 65 73 74 20 70 72 61 67  ry..do_test prag
53d0: 6d 61 2d 38 2e 31 2e 37 20 7b 0a 20 20 73 71 6c  ma-8.1.7 {.  sql
53e0: 69 74 65 33 20 64 62 32 20 74 65 73 74 2e 64 62  ite3 db2 test.db
53f0: 3b 20 73 65 74 20 3a 3a 44 42 32 20 5b 73 71 6c  ; set ::DB2 [sql
5400: 69 74 65 33 5f 63 6f 6e 6e 65 63 74 69 6f 6e 5f  ite3_connection_
5410: 70 6f 69 6e 74 65 72 20 64 62 32 5d 0a 20 20 65  pointer db2].  e
5420: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c  xecsql {.    SEL
5430: 45 43 54 20 2a 20 46 52 4f 4d 20 74 34 3b 0a 20  ECT * FROM t4;. 
5440: 20 7d 20 64 62 32 0a 7d 20 7b 31 20 32 20 33 7d   } db2.} {1 2 3}
5450: 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d  .do_test pragma-
5460: 38 2e 31 2e 38 20 7b 0a 20 20 65 78 65 63 73 71  8.1.8 {.  execsq
5470: 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 73  l {.    PRAGMA s
5480: 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 20 3d 20  chema_version = 
5490: 31 30 38 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f  108;.  }.} {}.do
54a0: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 31  _test pragma-8.1
54b0: 2e 39 20 7b 0a 20 20 73 65 74 20 3a 3a 53 54 4d  .9 {.  set ::STM
54c0: 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61  T [sqlite3_prepa
54d0: 72 65 20 24 3a 3a 44 42 32 20 22 53 45 4c 45 43  re $::DB2 "SELEC
54e0: 54 20 2a 20 46 52 4f 4d 20 74 34 22 20 2d 31 20  T * FROM t4" -1 
54f0: 44 55 4d 4d 59 5d 0a 20 20 73 71 6c 69 74 65 33  DUMMY].  sqlite3
5500: 5f 73 74 65 70 20 24 3a 3a 53 54 4d 54 0a 7d 20  _step $::STMT.} 
5510: 53 51 4c 49 54 45 5f 45 52 52 4f 52 0a 64 6f 5f  SQLITE_ERROR.do_
5520: 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e  test pragma-8.1.
5530: 31 30 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 66  10 {.  sqlite3_f
5540: 69 6e 61 6c 69 7a 65 20 24 3a 3a 53 54 4d 54 0a  inalize $::STMT.
5550: 7d 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 0a  } SQLITE_SCHEMA.
5560: 0a 23 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65  .# Make sure the
5570: 20 73 63 68 65 6d 61 2d 76 65 72 73 69 6f 6e 20   schema-version 
5580: 63 61 6e 20 62 65 20 6d 61 6e 69 70 75 6c 61 74  can be manipulat
5590: 65 64 20 69 6e 20 61 6e 20 61 74 74 61 63 68 65  ed in an attache
55a0: 64 20 64 61 74 61 62 61 73 65 2e 0a 66 6f 72 63  d database..forc
55b0: 65 64 65 6c 65 74 65 20 74 65 73 74 32 2e 64 62  edelete test2.db
55c0: 0a 66 6f 72 63 65 64 65 6c 65 74 65 20 74 65 73  .forcedelete tes
55d0: 74 32 2e 64 62 2d 6a 6f 75 72 6e 61 6c 0a 69 66  t2.db-journal.if
55e0: 63 61 70 61 62 6c 65 20 61 74 74 61 63 68 20 7b  capable attach {
55f0: 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .  do_test pragm
5600: 61 2d 38 2e 31 2e 31 31 20 7b 0a 20 20 20 20 65  a-8.1.11 {.    e
5610: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 41  xecsql {.      A
5620: 54 54 41 43 48 20 27 74 65 73 74 32 2e 64 62 27  TTACH 'test2.db'
5630: 20 41 53 20 61 75 78 3b 0a 20 20 20 20 20 20 43   AS aux;.      C
5640: 52 45 41 54 45 20 54 41 42 4c 45 20 61 75 78 2e  REATE TABLE aux.
5650: 74 31 28 61 2c 20 62 2c 20 63 29 3b 0a 20 20 20  t1(a, b, c);.   
5660: 20 20 20 50 52 41 47 4d 41 20 61 75 78 2e 73 63     PRAGMA aux.sc
5670: 68 65 6d 61 5f 76 65 72 73 69 6f 6e 20 3d 20 32  hema_version = 2
5680: 30 35 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 7d  05;.    }.  } {}
5690: 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .  do_test pragm
56a0: 61 2d 38 2e 31 2e 31 32 20 7b 0a 20 20 20 20 65  a-8.1.12 {.    e
56b0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50  xecsql {.      P
56c0: 52 41 47 4d 41 20 61 75 78 2e 73 63 68 65 6d 61  RAGMA aux.schema
56d0: 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 20 20 7d 0a  _version;.    }.
56e0: 20 20 7d 20 32 30 35 0a 7d 0a 64 6f 5f 74 65 73    } 205.}.do_tes
56f0: 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e 31 33 20  t pragma-8.1.13 
5700: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
5710: 20 20 50 52 41 47 4d 41 20 73 63 68 65 6d 61 5f    PRAGMA schema_
5720: 76 65 72 73 69 6f 6e 3b 0a 20 20 7d 0a 7d 20 31  version;.  }.} 1
5730: 30 38 0a 0a 23 20 41 6e 64 20 63 68 65 63 6b 20  08..# And check 
5740: 74 68 61 74 20 6d 6f 64 69 66 79 69 6e 67 20 74  that modifying t
5750: 68 65 20 73 63 68 65 6d 61 2d 76 65 72 73 69 6f  he schema-versio
5760: 6e 20 69 6e 20 61 6e 20 61 74 74 61 63 68 65 64  n in an attached
5770: 20 64 61 74 61 62 61 73 65 0a 23 20 66 6f 72 63   database.# forc
5780: 65 73 20 74 68 65 20 73 65 63 6f 6e 64 20 63 6f  es the second co
5790: 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 72 65 6c 6f  nnection to relo
57a0: 61 64 20 74 68 65 20 73 63 68 65 6d 61 2e 0a 69  ad the schema..i
57b0: 66 63 61 70 61 62 6c 65 20 61 74 74 61 63 68 20  fcapable attach 
57c0: 7b 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67  {.  do_test prag
57d0: 6d 61 2d 38 2e 31 2e 31 34 20 7b 0a 20 20 20 20  ma-8.1.14 {.    
57e0: 73 71 6c 69 74 65 33 20 64 62 32 20 74 65 73 74  sqlite3 db2 test
57f0: 2e 64 62 3b 20 73 65 74 20 3a 3a 44 42 32 20 5b  .db; set ::DB2 [
5800: 73 71 6c 69 74 65 33 5f 63 6f 6e 6e 65 63 74 69  sqlite3_connecti
5810: 6f 6e 5f 70 6f 69 6e 74 65 72 20 64 62 32 5d 0a  on_pointer db2].
5820: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20      execsql {.  
5830: 20 20 20 20 41 54 54 41 43 48 20 27 74 65 73 74      ATTACH 'test
5840: 32 2e 64 62 27 20 41 53 20 61 75 78 3b 0a 20 20  2.db' AS aux;.  
5850: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
5860: 4d 20 61 75 78 2e 74 31 3b 0a 20 20 20 20 7d 20  M aux.t1;.    } 
5870: 64 62 32 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f  db2.  } {}.  do_
5880: 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e  test pragma-8.1.
5890: 31 35 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  15 {.    execsql
58a0: 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20   {.      PRAGMA 
58b0: 61 75 78 2e 73 63 68 65 6d 61 5f 76 65 72 73 69  aux.schema_versi
58c0: 6f 6e 20 3d 20 32 30 36 3b 0a 20 20 20 20 7d 0a  on = 206;.    }.
58d0: 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65 73 74    } {}.  do_test
58e0: 20 70 72 61 67 6d 61 2d 38 2e 31 2e 31 36 20 7b   pragma-8.1.16 {
58f0: 0a 20 20 20 20 73 65 74 20 3a 3a 53 54 4d 54 20  .    set ::STMT 
5900: 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65  [sqlite3_prepare
5910: 20 24 3a 3a 44 42 32 20 22 53 45 4c 45 43 54 20   $::DB2 "SELECT 
5920: 2a 20 46 52 4f 4d 20 61 75 78 2e 74 31 22 20 2d  * FROM aux.t1" -
5930: 31 20 44 55 4d 4d 59 5d 0a 20 20 20 20 73 71 6c  1 DUMMY].    sql
5940: 69 74 65 33 5f 73 74 65 70 20 24 3a 3a 53 54 4d  ite3_step $::STM
5950: 54 0a 20 20 7d 20 53 51 4c 49 54 45 5f 45 52 52  T.  } SQLITE_ERR
5960: 4f 52 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61  OR.  do_test pra
5970: 67 6d 61 2d 38 2e 31 2e 31 37 20 7b 0a 20 20 20  gma-8.1.17 {.   
5980: 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a   sqlite3_finaliz
5990: 65 20 24 3a 3a 53 54 4d 54 0a 20 20 7d 20 53 51  e $::STMT.  } SQ
59a0: 4c 49 54 45 5f 53 43 48 45 4d 41 0a 20 20 64 6f  LITE_SCHEMA.  do
59b0: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 31  _test pragma-8.1
59c0: 2e 31 38 20 7b 0a 20 20 20 20 64 62 32 20 63 6c  .18 {.    db2 cl
59d0: 6f 73 65 0a 20 20 7d 20 7b 7d 0a 7d 0a 0a 23 20  ose.  } {}.}..# 
59e0: 4e 6f 77 20 74 65 73 74 20 74 68 61 74 20 74 68  Now test that th
59f0: 65 20 75 73 65 72 2d 76 65 72 73 69 6f 6e 20 63  e user-version c
5a00: 61 6e 20 62 65 20 72 65 61 64 20 61 6e 64 20 77  an be read and w
5a10: 72 69 74 74 65 6e 20 28 61 6e 64 20 74 68 61 74  ritten (and that
5a20: 20 77 65 20 61 72 65 6e 27 74 0a 23 20 61 63 63   we aren't.# acc
5a30: 69 64 65 6e 74 61 6c 6c 79 20 6d 61 6e 69 70 75  identally manipu
5a40: 6c 61 74 69 6e 67 20 74 68 65 20 73 63 68 65 6d  lating the schem
5a50: 61 2d 76 65 72 73 69 6f 6e 20 69 6e 73 74 65 61  a-version instea
5a60: 64 29 2e 0a 64 6f 5f 74 65 73 74 20 70 72 61 67  d)..do_test prag
5a70: 6d 61 2d 38 2e 32 2e 31 20 7b 0a 20 20 65 78 65  ma-8.2.1 {.  exe
5a80: 63 73 71 6c 32 20 7b 0a 20 20 20 20 50 52 41 47  csql2 {.    PRAG
5a90: 4d 41 20 75 73 65 72 5f 76 65 72 73 69 6f 6e 3b  MA user_version;
5aa0: 0a 20 20 7d 0a 7d 20 7b 75 73 65 72 5f 76 65 72  .  }.} {user_ver
5ab0: 73 69 6f 6e 20 30 7d 0a 64 6f 5f 74 65 73 74 20  sion 0}.do_test 
5ac0: 70 72 61 67 6d 61 2d 38 2e 32 2e 32 20 7b 0a 20  pragma-8.2.2 {. 
5ad0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50   execsql {.    P
5ae0: 52 41 47 4d 41 20 75 73 65 72 5f 76 65 72 73 69  RAGMA user_versi
5af0: 6f 6e 20 3d 20 32 3b 0a 20 20 7d 0a 7d 20 7b 7d  on = 2;.  }.} {}
5b00: 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d  .do_test pragma-
5b10: 38 2e 32 2e 33 2e 31 20 7b 0a 20 20 65 78 65 63  8.2.3.1 {.  exec
5b20: 73 71 6c 32 20 7b 0a 20 20 20 20 50 52 41 47 4d  sql2 {.    PRAGM
5b30: 41 20 75 73 65 72 5f 76 65 72 73 69 6f 6e 3b 0a  A user_version;.
5b40: 20 20 7d 0a 7d 20 7b 75 73 65 72 5f 76 65 72 73    }.} {user_vers
5b50: 69 6f 6e 20 32 7d 0a 64 6f 5f 74 65 73 74 20 70  ion 2}.do_test p
5b60: 72 61 67 6d 61 2d 38 2e 32 2e 33 2e 32 20 7b 0a  ragma-8.2.3.2 {.
5b70: 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 73 71 6c    db close.  sql
5b80: 69 74 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a  ite3 db test.db.
5b90: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
5ba0: 50 52 41 47 4d 41 20 75 73 65 72 5f 76 65 72 73  PRAGMA user_vers
5bb0: 69 6f 6e 3b 0a 20 20 7d 0a 7d 20 7b 32 7d 0a 64  ion;.  }.} {2}.d
5bc0: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e  o_test pragma-8.
5bd0: 32 2e 34 2e 31 20 7b 0a 20 20 65 78 65 63 73 71  2.4.1 {.  execsq
5be0: 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 73  l {.    PRAGMA s
5bf0: 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 3b 0a 20  chema_version;. 
5c00: 20 7d 0a 7d 20 7b 31 30 38 7d 0a 69 66 63 61 70   }.} {108}.ifcap
5c10: 61 62 6c 65 20 76 61 63 75 75 6d 20 7b 0a 20 20  able vacuum {.  
5c20: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38  do_test pragma-8
5c30: 2e 32 2e 34 2e 32 20 7b 0a 20 20 20 20 65 78 65  .2.4.2 {.    exe
5c40: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 56 41 43  csql {.      VAC
5c50: 55 55 4d 3b 0a 20 20 20 20 20 20 50 52 41 47 4d  UUM;.      PRAGM
5c60: 41 20 75 73 65 72 5f 76 65 72 73 69 6f 6e 3b 0a  A user_version;.
5c70: 20 20 20 20 7d 0a 20 20 7d 20 7b 32 7d 0a 20 20      }.  } {2}.  
5c80: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38  do_test pragma-8
5c90: 2e 32 2e 34 2e 33 20 7b 0a 20 20 20 20 65 78 65  .2.4.3 {.    exe
5ca0: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41  csql {.      PRA
5cb0: 47 4d 41 20 73 63 68 65 6d 61 5f 76 65 72 73 69  GMA schema_versi
5cc0: 6f 6e 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 31  on;.    }.  } {1
5cd0: 30 39 7d 0a 7d 0a 0a 69 66 63 61 70 61 62 6c 65  09}.}..ifcapable
5ce0: 20 61 74 74 61 63 68 20 7b 0a 20 20 64 62 20 65   attach {.  db e
5cf0: 76 61 6c 20 7b 41 54 54 41 43 48 20 27 74 65 73  val {ATTACH 'tes
5d00: 74 32 2e 64 62 27 20 41 53 20 61 75 78 7d 0a 20  t2.db' AS aux}. 
5d10: 20 0a 20 20 23 20 43 68 65 63 6b 20 74 68 61 74   .  # Check that
5d20: 20 74 68 65 20 75 73 65 72 2d 76 65 72 73 69 6f   the user-versio
5d30: 6e 20 69 6e 20 74 68 65 20 61 75 78 69 6c 61 72  n in the auxilar
5d40: 79 20 64 61 74 61 62 61 73 65 20 63 61 6e 20 62  y database can b
5d50: 65 20 6d 61 6e 69 70 75 6c 61 74 65 64 20 28 0a  e manipulated (.
5d60: 20 20 23 20 61 6e 64 20 74 68 61 74 20 77 65 20    # and that we 
5d70: 61 72 65 6e 27 74 20 61 63 63 69 64 65 6e 74 61  aren't accidenta
5d80: 6c 6c 79 20 6d 61 6e 69 70 75 6c 61 74 69 6e 67  lly manipulating
5d90: 20 74 68 65 20 73 61 6d 65 20 69 6e 20 74 68 65   the same in the
5da0: 20 6d 61 69 6e 20 64 62 29 2e 0a 20 20 64 6f 5f   main db)..  do_
5db0: 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 32 2e  test pragma-8.2.
5dc0: 35 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  5 {.    execsql 
5dd0: 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 61  {.      PRAGMA a
5de0: 75 78 2e 75 73 65 72 5f 76 65 72 73 69 6f 6e 3b  ux.user_version;
5df0: 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 30 7d 0a 20  .    }.  } {0}. 
5e00: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
5e10: 38 2e 32 2e 36 20 7b 0a 20 20 20 20 65 78 65 63  8.2.6 {.    exec
5e20: 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47  sql {.      PRAG
5e30: 4d 41 20 61 75 78 2e 75 73 65 72 5f 76 65 72 73  MA aux.user_vers
5e40: 69 6f 6e 20 3d 20 33 3b 0a 20 20 20 20 7d 0a 20  ion = 3;.    }. 
5e50: 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65 73 74 20   } {}.  do_test 
5e60: 70 72 61 67 6d 61 2d 38 2e 32 2e 37 20 7b 0a 20  pragma-8.2.7 {. 
5e70: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
5e80: 20 20 20 50 52 41 47 4d 41 20 61 75 78 2e 75 73     PRAGMA aux.us
5e90: 65 72 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 20 20  er_version;.    
5ea0: 7d 0a 20 20 7d 20 7b 33 7d 0a 20 20 64 6f 5f 74  }.  } {3}.  do_t
5eb0: 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 32 2e 38  est pragma-8.2.8
5ec0: 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b   {.    execsql {
5ed0: 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 6d 61  .      PRAGMA ma
5ee0: 69 6e 2e 75 73 65 72 5f 76 65 72 73 69 6f 6e 3b  in.user_version;
5ef0: 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 32 7d 0a 20  .    }.  } {2}. 
5f00: 20 0a 20 20 23 20 4e 6f 77 20 63 68 65 63 6b 20   .  # Now check 
5f10: 74 68 61 74 20 61 20 52 4f 4c 4c 42 41 43 4b 20  that a ROLLBACK 
5f20: 72 65 73 65 74 73 20 74 68 65 20 75 73 65 72 2d  resets the user-
5f30: 76 65 72 73 69 6f 6e 20 69 66 20 69 74 20 68 61  version if it ha
5f40: 73 20 62 65 65 6e 20 6d 6f 64 69 66 69 65 64 0a  s been modified.
5f50: 20 20 23 20 77 69 74 68 69 6e 20 61 20 74 72 61    # within a tra
5f60: 6e 73 61 63 74 69 6f 6e 2e 0a 20 20 64 6f 5f 74  nsaction..  do_t
5f70: 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 32 2e 39  est pragma-8.2.9
5f80: 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b   {.    execsql {
5f90: 0a 20 20 20 20 20 20 42 45 47 49 4e 3b 0a 20 20  .      BEGIN;.  
5fa0: 20 20 20 20 50 52 41 47 4d 41 20 61 75 78 2e 75      PRAGMA aux.u
5fb0: 73 65 72 5f 76 65 72 73 69 6f 6e 20 3d 20 31 30  ser_version = 10
5fc0: 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 75  ;.      PRAGMA u
5fd0: 73 65 72 5f 76 65 72 73 69 6f 6e 20 3d 20 31 31  ser_version = 11
5fe0: 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 7d 0a 20  ;.    }.  } {}. 
5ff0: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
6000: 38 2e 32 2e 31 30 20 7b 0a 20 20 20 20 65 78 65  8.2.10 {.    exe
6010: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41  csql {.      PRA
6020: 47 4d 41 20 61 75 78 2e 75 73 65 72 5f 76 65 72  GMA aux.user_ver
6030: 73 69 6f 6e 3b 0a 20 20 20 20 7d 0a 20 20 7d 20  sion;.    }.  } 
6040: 7b 31 30 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70  {10}.  do_test p
6050: 72 61 67 6d 61 2d 38 2e 32 2e 31 31 20 7b 0a 20  ragma-8.2.11 {. 
6060: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
6070: 20 20 20 50 52 41 47 4d 41 20 6d 61 69 6e 2e 75     PRAGMA main.u
6080: 73 65 72 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 20  ser_version;.   
6090: 20 7d 0a 20 20 7d 20 7b 31 31 7d 0a 20 20 64 6f   }.  } {11}.  do
60a0: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 32  _test pragma-8.2
60b0: 2e 31 32 20 7b 0a 20 20 20 20 65 78 65 63 73 71  .12 {.    execsq
60c0: 6c 20 7b 0a 20 20 20 20 20 20 52 4f 4c 4c 42 41  l {.      ROLLBA
60d0: 43 4b 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41  CK;.      PRAGMA
60e0: 20 61 75 78 2e 75 73 65 72 5f 76 65 72 73 69 6f   aux.user_versio
60f0: 6e 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 33 7d  n;.    }.  } {3}
6100: 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .  do_test pragm
6110: 61 2d 38 2e 32 2e 31 33 20 7b 0a 20 20 20 20 65  a-8.2.13 {.    e
6120: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50  xecsql {.      P
6130: 52 41 47 4d 41 20 6d 61 69 6e 2e 75 73 65 72 5f  RAGMA main.user_
6140: 76 65 72 73 69 6f 6e 3b 0a 20 20 20 20 7d 0a 20  version;.    }. 
6150: 20 7d 20 7b 32 7d 0a 7d 0a 0a 23 20 54 72 79 20   } {2}.}..# Try 
6160: 61 20 6e 65 67 61 74 69 76 65 20 76 61 6c 75 65  a negative value
6170: 20 66 6f 72 20 74 68 65 20 75 73 65 72 2d 76 65   for the user-ve
6180: 72 73 69 6f 6e 0a 64 6f 5f 74 65 73 74 20 70 72  rsion.do_test pr
6190: 61 67 6d 61 2d 38 2e 32 2e 31 34 20 7b 0a 20 20  agma-8.2.14 {.  
61a0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52  execsql {.    PR
61b0: 41 47 4d 41 20 75 73 65 72 5f 76 65 72 73 69 6f  AGMA user_versio
61c0: 6e 20 3d 20 2d 34 35 30 3b 0a 20 20 7d 0a 7d 20  n = -450;.  }.} 
61d0: 7b 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  {}.do_test pragm
61e0: 61 2d 38 2e 32 2e 31 35 20 7b 0a 20 20 65 78 65  a-8.2.15 {.  exe
61f0: 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d  csql {.    PRAGM
6200: 41 20 75 73 65 72 5f 76 65 72 73 69 6f 6e 3b 0a  A user_version;.
6210: 20 20 7d 0a 7d 20 7b 2d 34 35 30 7d 0a 7d 20 3b    }.} {-450}.} ;
6220: 20 23 20 69 66 63 61 70 61 62 6c 65 20 73 63 68   # ifcapable sch
6230: 65 6d 61 5f 76 65 72 73 69 6f 6e 0a 0a 23 20 43  ema_version..# C
6240: 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 54  heck to see if T
6250: 45 4d 50 5f 53 54 4f 52 45 20 69 73 20 6d 65 6d  EMP_STORE is mem
6260: 6f 72 79 20 6f 72 20 64 69 73 6b 2e 20 20 52 65  ory or disk.  Re
6270: 74 75 72 6e 20 73 74 72 69 6e 67 73 0a 23 20 22  turn strings.# "
6280: 6d 65 6d 6f 72 79 22 20 6f 72 20 22 64 69 73 6b  memory" or "disk
6290: 22 20 61 73 20 61 70 70 72 6f 70 72 69 61 74 65  " as appropriate
62a0: 2e 0a 23 0a 70 72 6f 63 20 63 68 65 63 6b 5f 74  ..#.proc check_t
62b0: 65 6d 70 5f 73 74 6f 72 65 20 7b 7d 20 7b 0a 20  emp_store {} {. 
62c0: 20 64 62 20 65 76 61 6c 20 7b 43 52 45 41 54 45   db eval {CREATE
62d0: 20 54 45 4d 50 20 54 41 42 4c 45 20 49 46 20 4e   TEMP TABLE IF N
62e0: 4f 54 20 45 58 49 53 54 53 20 61 28 62 29 7d 0a  OT EXISTS a(b)}.
62f0: 20 20 64 62 20 65 76 61 6c 20 7b 50 52 41 47 4d    db eval {PRAGM
6300: 41 20 64 61 74 61 62 61 73 65 5f 6c 69 73 74 7d  A database_list}
6310: 20 7b 0a 20 20 20 20 69 66 20 7b 24 6e 61 6d 65   {.    if {$name
6320: 3d 3d 22 74 65 6d 70 22 7d 20 7b 0a 20 20 20 20  =="temp"} {.    
6330: 20 20 73 65 74 20 62 74 20 5b 62 74 72 65 65 5f    set bt [btree_
6340: 66 72 6f 6d 5f 64 62 20 64 62 20 31 5d 0a 20 20  from_db db 1].  
6350: 20 20 20 20 69 66 20 7b 5b 62 74 72 65 65 5f 69      if {[btree_i
6360: 73 6d 65 6d 64 62 20 24 62 74 5d 7d 20 7b 0a 20  smemdb $bt]} {. 
6370: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 22 6d         return "m
6380: 65 6d 6f 72 79 22 0a 20 20 20 20 20 20 7d 0a 20  emory".      }. 
6390: 20 20 20 20 20 72 65 74 75 72 6e 20 22 64 69 73       return "dis
63a0: 6b 22 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72  k".    }.  }.  r
63b0: 65 74 75 72 6e 20 22 75 6e 6b 6e 6f 77 6e 22 0a  eturn "unknown".
63c0: 7d 0a 0a 23 20 41 70 70 6c 69 63 61 74 69 6f 6e  }..# Application
63d0: 5f 49 44 0a 23 0a 64 6f 5f 74 65 73 74 20 70 72  _ID.#.do_test pr
63e0: 61 67 6d 61 2d 38 2e 33 2e 31 20 7b 0a 20 20 65  agma-8.3.1 {.  e
63f0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41  xecsql {.    PRA
6400: 47 4d 41 20 61 70 70 6c 69 63 61 74 69 6f 6e 5f  GMA application_
6410: 69 64 3b 0a 20 20 7d 0a 7d 20 7b 30 7d 0a 64 6f  id;.  }.} {0}.do
6420: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 33  _test pragma-8.3
6430: 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .2 {.  execsql {
6440: 50 52 41 47 4d 41 20 41 70 70 6c 69 63 61 74 69  PRAGMA Applicati
6450: 6f 6e 5f 49 44 28 31 32 33 34 35 29 3b 20 50 52  on_ID(12345); PR
6460: 41 47 4d 41 20 61 70 70 6c 69 63 61 74 69 6f 6e  AGMA application
6470: 5f 69 64 3b 7d 0a 7d 20 7b 31 32 33 34 35 7d 0a  _id;}.} {12345}.
6480: 0a 23 20 54 65 73 74 20 74 65 6d 70 5f 73 74 6f  .# Test temp_sto
6490: 72 65 20 61 6e 64 20 74 65 6d 70 5f 73 74 6f 72  re and temp_stor
64a0: 65 5f 64 69 72 65 63 74 6f 72 79 20 70 72 61 67  e_directory prag
64b0: 6d 61 73 0a 23 0a 69 66 63 61 70 61 62 6c 65 20  mas.#.ifcapable 
64c0: 70 61 67 65 72 5f 70 72 61 67 6d 61 73 20 7b 0a  pager_pragmas {.
64d0: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 39  do_test pragma-9
64e0: 2e 31 20 7b 0a 20 20 64 62 20 63 6c 6f 73 65 0a  .1 {.  db close.
64f0: 20 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73    sqlite3 db tes
6500: 74 2e 64 62 0a 20 20 65 78 65 63 73 71 6c 20 7b  t.db.  execsql {
6510: 0a 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70  .    PRAGMA temp
6520: 5f 73 74 6f 72 65 3b 0a 20 20 7d 0a 7d 20 7b 30  _store;.  }.} {0
6530: 7d 0a 69 66 20 7b 24 54 45 4d 50 5f 53 54 4f 52  }.if {$TEMP_STOR
6540: 45 3c 3d 31 7d 20 7b 0a 20 20 64 6f 5f 74 65 73  E<=1} {.  do_tes
6550: 74 20 70 72 61 67 6d 61 2d 39 2e 31 2e 31 20 7b  t pragma-9.1.1 {
6560: 0a 20 20 20 20 63 68 65 63 6b 5f 74 65 6d 70 5f  .    check_temp_
6570: 73 74 6f 72 65 0a 20 20 7d 20 7b 64 69 73 6b 7d  store.  } {disk}
6580: 0a 7d 20 65 6c 73 65 20 7b 0a 20 20 64 6f 5f 74  .} else {.  do_t
6590: 65 73 74 20 70 72 61 67 6d 61 2d 39 2e 31 2e 31  est pragma-9.1.1
65a0: 20 7b 0a 20 20 20 20 63 68 65 63 6b 5f 74 65 6d   {.    check_tem
65b0: 70 5f 73 74 6f 72 65 0a 20 20 7d 20 7b 6d 65 6d  p_store.  } {mem
65c0: 6f 72 79 7d 0a 7d 0a 0a 64 6f 5f 74 65 73 74 20  ory}.}..do_test 
65d0: 70 72 61 67 6d 61 2d 39 2e 32 20 7b 0a 20 20 64  pragma-9.2 {.  d
65e0: 62 20 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74 65  b close.  sqlite
65f0: 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20 65  3 db test.db.  e
6600: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41  xecsql {.    PRA
6610: 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 3d 66  GMA temp_store=f
6620: 69 6c 65 3b 0a 20 20 20 20 50 52 41 47 4d 41 20  ile;.    PRAGMA 
6630: 74 65 6d 70 5f 73 74 6f 72 65 3b 0a 20 20 7d 0a  temp_store;.  }.
6640: 7d 20 7b 31 7d 0a 69 66 20 7b 24 54 45 4d 50 5f  } {1}.if {$TEMP_
6650: 53 54 4f 52 45 3d 3d 33 7d 20 7b 0a 20 20 23 20  STORE==3} {.  # 
6660: 57 68 65 6e 20 54 45 4d 50 5f 53 54 4f 52 45 20  When TEMP_STORE 
6670: 69 73 20 33 2c 20 61 6c 77 61 79 73 20 75 73 65  is 3, always use
6680: 20 6d 65 6d 6f 72 79 20 72 65 67 61 72 64 6c 65   memory regardle
6690: 73 73 20 6f 66 20 70 72 61 67 6d 61 20 73 65 74  ss of pragma set
66a0: 74 69 6e 67 73 2e 0a 20 20 64 6f 5f 74 65 73 74  tings..  do_test
66b0: 20 70 72 61 67 6d 61 2d 39 2e 32 2e 31 20 7b 0a   pragma-9.2.1 {.
66c0: 20 20 20 20 63 68 65 63 6b 5f 74 65 6d 70 5f 73      check_temp_s
66d0: 74 6f 72 65 0a 20 20 7d 20 7b 6d 65 6d 6f 72 79  tore.  } {memory
66e0: 7d 0a 7d 20 65 6c 73 65 20 7b 0a 20 20 64 6f 5f  }.} else {.  do_
66f0: 74 65 73 74 20 70 72 61 67 6d 61 2d 39 2e 32 2e  test pragma-9.2.
6700: 31 20 7b 0a 20 20 20 20 63 68 65 63 6b 5f 74 65  1 {.    check_te
6710: 6d 70 5f 73 74 6f 72 65 0a 20 20 7d 20 7b 64 69  mp_store.  } {di
6720: 73 6b 7d 0a 7d 0a 0a 64 6f 5f 74 65 73 74 20 70  sk}.}..do_test p
6730: 72 61 67 6d 61 2d 39 2e 33 20 7b 0a 20 20 64 62  ragma-9.3 {.  db
6740: 20 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74 65 33   close.  sqlite3
6750: 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20 65 78   db test.db.  ex
6760: 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47  ecsql {.    PRAG
6770: 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 3d 6d 65  MA temp_store=me
6780: 6d 6f 72 79 3b 0a 20 20 20 20 50 52 41 47 4d 41  mory;.    PRAGMA
6790: 20 74 65 6d 70 5f 73 74 6f 72 65 3b 0a 20 20 7d   temp_store;.  }
67a0: 0a 7d 20 7b 32 7d 0a 69 66 20 7b 24 54 45 4d 50  .} {2}.if {$TEMP
67b0: 5f 53 54 4f 52 45 3d 3d 30 7d 20 7b 0a 20 20 23  _STORE==0} {.  #
67c0: 20 57 68 65 6e 20 54 45 4d 50 5f 53 54 4f 52 45   When TEMP_STORE
67d0: 20 69 73 20 30 2c 20 61 6c 77 61 79 73 20 75 73   is 0, always us
67e0: 65 20 74 68 65 20 64 69 73 6b 20 72 65 67 61 72  e the disk regar
67f0: 64 6c 65 73 73 20 6f 66 20 70 72 61 67 6d 61 20  dless of pragma 
6800: 73 65 74 74 69 6e 67 73 2e 0a 20 20 64 6f 5f 74  settings..  do_t
6810: 65 73 74 20 70 72 61 67 6d 61 2d 39 2e 33 2e 31  est pragma-9.3.1
6820: 20 7b 0a 20 20 20 20 63 68 65 63 6b 5f 74 65 6d   {.    check_tem
6830: 70 5f 73 74 6f 72 65 0a 20 20 7d 20 7b 64 69 73  p_store.  } {dis
6840: 6b 7d 0a 7d 20 65 6c 73 65 20 7b 0a 20 20 64 6f  k}.} else {.  do
6850: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 39 2e 33  _test pragma-9.3
6860: 2e 31 20 7b 0a 20 20 20 20 63 68 65 63 6b 5f 74  .1 {.    check_t
6870: 65 6d 70 5f 73 74 6f 72 65 0a 20 20 7d 20 7b 6d  emp_store.  } {m
6880: 65 6d 6f 72 79 7d 0a 7d 0a 0a 64 6f 5f 74 65 73  emory}.}..do_tes
6890: 74 20 70 72 61 67 6d 61 2d 39 2e 34 20 7b 0a 20  t pragma-9.4 {. 
68a0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50   execsql {.    P
68b0: 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65  RAGMA temp_store
68c0: 5f 64 69 72 65 63 74 6f 72 79 3b 0a 20 20 7d 0a  _directory;.  }.
68d0: 7d 20 7b 7d 0a 69 66 63 61 70 61 62 6c 65 20 77  } {}.ifcapable w
68e0: 73 64 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 70  sd {.  do_test p
68f0: 72 61 67 6d 61 2d 39 2e 35 20 7b 0a 20 20 20 20  ragma-9.5 {.    
6900: 73 65 74 20 70 77 64 20 5b 73 74 72 69 6e 67 20  set pwd [string 
6910: 6d 61 70 20 7b 27 20 27 27 7d 20 5b 66 69 6c 65  map {' ''} [file
6920: 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 67 65 74   nativename [get
6930: 5f 70 77 64 5d 5d 5d 0a 20 20 20 20 65 78 65 63  _pwd]]].    exec
6940: 73 71 6c 20 22 0a 20 20 20 20 20 20 50 52 41 47  sql ".      PRAG
6950: 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69  MA temp_store_di
6960: 72 65 63 74 6f 72 79 3d 27 24 70 77 64 27 3b 0a  rectory='$pwd';.
6970: 20 20 20 20 22 0a 20 20 7d 20 7b 7d 0a 20 20 64      ".  } {}.  d
6980: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 39 2e  o_test pragma-9.
6990: 36 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  6 {.    execsql 
69a0: 7b 20 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20  { .      PRAGMA 
69b0: 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63  temp_store_direc
69c0: 74 6f 72 79 3b 0a 20 20 20 20 7d 0a 20 20 7d 20  tory;.    }.  } 
69d0: 5b 6c 69 73 74 20 5b 66 69 6c 65 20 6e 61 74 69  [list [file nati
69e0: 76 65 6e 61 6d 65 20 5b 67 65 74 5f 70 77 64 5d  vename [get_pwd]
69f0: 5d 5d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61  ]].  do_test pra
6a00: 67 6d 61 2d 39 2e 37 20 7b 0a 20 20 20 20 63 61  gma-9.7 {.    ca
6a10: 74 63 68 73 71 6c 20 7b 20 0a 20 20 20 20 20 20  tchsql { .      
6a20: 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72  PRAGMA temp_stor
6a30: 65 5f 64 69 72 65 63 74 6f 72 79 3d 27 2f 4e 4f  e_directory='/NO
6a40: 4e 2f 45 58 49 53 54 45 4e 54 2f 50 41 54 48 2f  N/EXISTENT/PATH/
6a50: 46 4f 4f 42 41 52 27 3b 0a 20 20 20 20 7d 0a 20  FOOBAR';.    }. 
6a60: 20 7d 20 7b 31 20 7b 6e 6f 74 20 61 20 77 72 69   } {1 {not a wri
6a70: 74 61 62 6c 65 20 64 69 72 65 63 74 6f 72 79 7d  table directory}
6a80: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67  }.  do_test prag
6a90: 6d 61 2d 39 2e 38 20 7b 0a 20 20 20 20 65 78 65  ma-9.8 {.    exe
6aa0: 63 73 71 6c 20 7b 20 0a 20 20 20 20 20 20 50 52  csql { .      PR
6ab0: 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 5f  AGMA temp_store_
6ac0: 64 69 72 65 63 74 6f 72 79 3d 27 27 3b 0a 20 20  directory='';.  
6ad0: 20 20 7d 0a 20 20 7d 20 7b 7d 0a 20 20 69 66 20    }.  } {}.  if 
6ae0: 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 54  {![info exists T
6af0: 45 4d 50 5f 53 54 4f 52 45 5d 20 7c 7c 20 24 54  EMP_STORE] || $T
6b00: 45 4d 50 5f 53 54 4f 52 45 3c 3d 31 7d 20 7b 0a  EMP_STORE<=1} {.
6b10: 20 20 20 20 69 66 63 61 70 61 62 6c 65 20 74 65      ifcapable te
6b20: 6d 70 64 62 20 7b 0a 20 20 20 20 20 20 64 6f 5f  mpdb {.      do_
6b30: 74 65 73 74 20 70 72 61 67 6d 61 2d 39 2e 39 20  test pragma-9.9 
6b40: 7b 0a 20 20 20 20 20 20 20 20 65 78 65 63 73 71  {.        execsq
6b50: 6c 20 7b 20 0a 20 20 20 20 20 20 20 20 20 20 50  l { .          P
6b60: 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65  RAGMA temp_store
6b70: 5f 64 69 72 65 63 74 6f 72 79 3b 0a 20 20 20 20  _directory;.    
6b80: 20 20 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d        PRAGMA tem
6b90: 70 5f 73 74 6f 72 65 3d 46 49 4c 45 3b 0a 20 20  p_store=FILE;.  
6ba0: 20 20 20 20 20 20 20 20 43 52 45 41 54 45 20 54          CREATE T
6bb0: 45 4d 50 20 54 41 42 4c 45 20 74 65 6d 70 5f 73  EMP TABLE temp_s
6bc0: 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 5f 74  tore_directory_t
6bd0: 65 73 74 28 61 20 69 6e 74 65 67 65 72 29 3b 0a  est(a integer);.
6be0: 20 20 20 20 20 20 20 20 20 20 49 4e 53 45 52 54            INSERT
6bf0: 20 49 4e 54 4f 20 74 65 6d 70 5f 73 74 6f 72 65   INTO temp_store
6c00: 5f 64 69 72 65 63 74 6f 72 79 5f 74 65 73 74 20  _directory_test 
6c10: 76 61 6c 75 65 73 20 28 32 29 3b 0a 20 20 20 20  values (2);.    
6c20: 20 20 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46        SELECT * F
6c30: 52 4f 4d 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64  ROM temp_store_d
6c40: 69 72 65 63 74 6f 72 79 5f 74 65 73 74 3b 0a 20  irectory_test;. 
6c50: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
6c60: 20 7b 32 7d 0a 20 20 20 20 20 20 64 6f 5f 74 65   {2}.      do_te
6c70: 73 74 20 70 72 61 67 6d 61 2d 39 2e 31 30 20 7b  st pragma-9.10 {
6c80: 0a 20 20 20 20 20 20 20 20 63 61 74 63 68 73 71  .        catchsq
6c90: 6c 20 22 0a 20 20 20 20 20 20 20 20 20 20 50 52  l ".          PR
6ca0: 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 5f  AGMA temp_store_
6cb0: 64 69 72 65 63 74 6f 72 79 3d 27 24 70 77 64 27  directory='$pwd'
6cc0: 3b 0a 20 20 20 20 20 20 20 20 20 20 53 45 4c 45  ;.          SELE
6cd0: 43 54 20 2a 20 46 52 4f 4d 20 74 65 6d 70 5f 73  CT * FROM temp_s
6ce0: 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 5f 74  tore_directory_t
6cf0: 65 73 74 3b 0a 20 20 20 20 20 20 20 20 22 0a 20  est;.        ". 
6d00: 20 20 20 20 20 7d 20 7b 31 20 7b 6e 6f 20 73 75       } {1 {no su
6d10: 63 68 20 74 61 62 6c 65 3a 20 74 65 6d 70 5f 73  ch table: temp_s
6d20: 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 5f 74  tore_directory_t
6d30: 65 73 74 7d 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a  est}}.    }.  }.
6d40: 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  }.do_test pragma
6d50: 2d 39 2e 31 31 20 7b 0a 20 20 65 78 65 63 73 71  -9.11 {.  execsq
6d60: 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 74  l {.    PRAGMA t
6d70: 65 6d 70 5f 73 74 6f 72 65 20 3d 20 30 3b 0a 20  emp_store = 0;. 
6d80: 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73     PRAGMA temp_s
6d90: 74 6f 72 65 3b 0a 20 20 7d 0a 7d 20 7b 30 7d 0a  tore;.  }.} {0}.
6da0: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 39  do_test pragma-9
6db0: 2e 31 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  .12 {.  execsql 
6dc0: 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d  {.    PRAGMA tem
6dd0: 70 5f 73 74 6f 72 65 20 3d 20 31 3b 0a 20 20 20  p_store = 1;.   
6de0: 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f   PRAGMA temp_sto
6df0: 72 65 3b 0a 20 20 7d 0a 7d 20 7b 31 7d 0a 64 6f  re;.  }.} {1}.do
6e00: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 39 2e 31  _test pragma-9.1
6e10: 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  3 {.  execsql {.
6e20: 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f      PRAGMA temp_
6e30: 73 74 6f 72 65 20 3d 20 32 3b 0a 20 20 20 20 50  store = 2;.    P
6e40: 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65  RAGMA temp_store
6e50: 3b 0a 20 20 7d 0a 7d 20 7b 32 7d 0a 64 6f 5f 74  ;.  }.} {2}.do_t
6e60: 65 73 74 20 70 72 61 67 6d 61 2d 39 2e 31 34 20  est pragma-9.14 
6e70: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
6e80: 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74    PRAGMA temp_st
6e90: 6f 72 65 20 3d 20 33 3b 0a 20 20 20 20 50 52 41  ore = 3;.    PRA
6ea0: 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 3b 0a  GMA temp_store;.
6eb0: 20 20 7d 0a 7d 20 7b 30 7d 0a 64 6f 5f 74 65 73    }.} {0}.do_tes
6ec0: 74 20 70 72 61 67 6d 61 2d 39 2e 31 35 20 7b 0a  t pragma-9.15 {.
6ed0: 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20    catchsql {.   
6ee0: 20 42 45 47 49 4e 20 45 58 43 4c 55 53 49 56 45   BEGIN EXCLUSIVE
6ef0: 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54 45 4d  ;.    CREATE TEM
6f00: 50 20 54 41 42 4c 45 20 74 65 6d 70 5f 74 61 62  P TABLE temp_tab
6f10: 6c 65 28 74 29 3b 0a 20 20 20 20 49 4e 53 45 52  le(t);.    INSER
6f20: 54 20 49 4e 54 4f 20 74 65 6d 70 5f 74 61 62 6c  T INTO temp_tabl
6f30: 65 20 56 41 4c 55 45 53 28 27 76 61 6c 75 61 62  e VALUES('valuab
6f40: 6c 65 20 64 61 74 61 27 29 3b 0a 20 20 20 20 50  le data');.    P
6f50: 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65  RAGMA temp_store
6f60: 20 3d 20 31 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b   = 1;.  }.} {1 {
6f70: 74 65 6d 70 6f 72 61 72 79 20 73 74 6f 72 61 67  temporary storag
6f80: 65 20 63 61 6e 6e 6f 74 20 62 65 20 63 68 61 6e  e cannot be chan
6f90: 67 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20  ged from within 
6fa0: 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 7d 7d 0a  a transaction}}.
6fb0: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 39  do_test pragma-9
6fc0: 2e 31 36 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  .16 {.  execsql 
6fd0: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  {.    SELECT * F
6fe0: 52 4f 4d 20 74 65 6d 70 5f 74 61 62 6c 65 3b 0a  ROM temp_table;.
6ff0: 20 20 20 20 43 4f 4d 4d 49 54 3b 0a 20 20 7d 0a      COMMIT;.  }.
7000: 7d 20 7b 7b 76 61 6c 75 61 62 6c 65 20 64 61 74  } {{valuable dat
7010: 61 7d 7d 0a 0a 64 6f 5f 74 65 73 74 20 70 72 61  a}}..do_test pra
7020: 67 6d 61 2d 39 2e 31 37 20 7b 0a 20 20 65 78 65  gma-9.17 {.  exe
7030: 63 73 71 6c 20 7b 0a 20 20 20 20 49 4e 53 45 52  csql {.    INSER
7040: 54 20 49 4e 54 4f 20 74 65 6d 70 5f 74 61 62 6c  T INTO temp_tabl
7050: 65 20 56 41 4c 55 45 53 28 27 76 61 6c 75 61 62  e VALUES('valuab
7060: 6c 65 20 64 61 74 61 20 49 49 27 29 3b 0a 20 20  le data II');.  
7070: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
7080: 74 65 6d 70 5f 74 61 62 6c 65 3b 0a 20 20 7d 0a  temp_table;.  }.
7090: 7d 20 7b 7b 76 61 6c 75 61 62 6c 65 20 64 61 74  } {{valuable dat
70a0: 61 7d 20 7b 76 61 6c 75 61 62 6c 65 20 64 61 74  a} {valuable dat
70b0: 61 20 49 49 7d 7d 0a 0a 64 6f 5f 74 65 73 74 20  a II}}..do_test 
70c0: 70 72 61 67 6d 61 2d 39 2e 31 38 20 7b 0a 20 20  pragma-9.18 {.  
70d0: 73 65 74 20 72 63 20 5b 63 61 74 63 68 20 7b 0a  set rc [catch {.
70e0: 20 20 20 20 64 62 20 65 76 61 6c 20 7b 53 45 4c      db eval {SEL
70f0: 45 43 54 20 74 20 46 52 4f 4d 20 74 65 6d 70 5f  ECT t FROM temp_
7100: 74 61 62 6c 65 7d 20 7b 0a 20 20 20 20 20 20 65  table} {.      e
7110: 78 65 63 73 71 6c 20 7b 70 72 61 67 6d 61 20 74  xecsql {pragma t
7120: 65 6d 70 5f 73 74 6f 72 65 20 3d 20 31 7d 0a 20  emp_store = 1}. 
7130: 20 20 20 7d 0a 20 20 7d 20 6d 73 67 5d 0a 20 20     }.  } msg].  
7140: 6c 69 73 74 20 24 72 63 20 24 6d 73 67 0a 7d 20  list $rc $msg.} 
7150: 7b 31 20 7b 74 65 6d 70 6f 72 61 72 79 20 73 74  {1 {temporary st
7160: 6f 72 61 67 65 20 63 61 6e 6e 6f 74 20 62 65 20  orage cannot be 
7170: 63 68 61 6e 67 65 64 20 66 72 6f 6d 20 77 69 74  changed from wit
7180: 68 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f  hin a transactio
7190: 6e 7d 7d 0a 0a 7d 20 3b 23 20 69 66 63 61 70 61  n}}..} ;# ifcapa
71a0: 62 6c 65 20 70 61 67 65 72 5f 70 72 61 67 6d 61  ble pager_pragma
71b0: 73 0a 0a 69 66 63 61 70 61 62 6c 65 20 74 72 69  s..ifcapable tri
71c0: 67 67 65 72 20 7b 0a 0a 64 6f 5f 74 65 73 74 20  gger {..do_test 
71d0: 70 72 61 67 6d 61 2d 31 30 2e 30 20 7b 0a 20 20  pragma-10.0 {.  
71e0: 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 44  catchsql {.    D
71f0: 52 4f 50 20 54 41 42 4c 45 20 6d 61 69 6e 2e 74  ROP TABLE main.t
7200: 31 3b 0a 20 20 7d 0a 20 20 65 78 65 63 73 71 6c  1;.  }.  execsql
7210: 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 63 6f   {.    PRAGMA co
7220: 75 6e 74 5f 63 68 61 6e 67 65 73 20 3d 20 31 3b  unt_changes = 1;
7230: 0a 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42  ..    CREATE TAB
7240: 4c 45 20 74 31 28 61 20 50 52 49 4d 41 52 59 20  LE t1(a PRIMARY 
7250: 4b 45 59 29 3b 0a 20 20 20 20 43 52 45 41 54 45  KEY);.    CREATE
7260: 20 54 41 42 4c 45 20 74 31 5f 6d 69 72 72 6f 72   TABLE t1_mirror
7270: 28 61 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20  (a);.    CREATE 
7280: 54 41 42 4c 45 20 74 31 5f 6d 69 72 72 6f 72 32  TABLE t1_mirror2
7290: 28 61 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20  (a);.    CREATE 
72a0: 54 52 49 47 47 45 52 20 74 31 5f 62 69 20 42 45  TRIGGER t1_bi BE
72b0: 46 4f 52 45 20 49 4e 53 45 52 54 20 4f 4e 20 74  FORE INSERT ON t
72c0: 31 20 42 45 47 49 4e 20 0a 20 20 20 20 20 20 49  1 BEGIN .      I
72d0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 5f 6d 69  NSERT INTO t1_mi
72e0: 72 72 6f 72 20 56 41 4c 55 45 53 28 6e 65 77 2e  rror VALUES(new.
72f0: 61 29 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20 20  a);.    END;.   
7300: 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20   CREATE TRIGGER 
7310: 74 31 5f 61 69 20 41 46 54 45 52 20 49 4e 53 45  t1_ai AFTER INSE
7320: 52 54 20 4f 4e 20 74 31 20 42 45 47 49 4e 20 0a  RT ON t1 BEGIN .
7330: 20 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54        INSERT INT
7340: 4f 20 74 31 5f 6d 69 72 72 6f 72 32 20 56 41 4c  O t1_mirror2 VAL
7350: 55 45 53 28 6e 65 77 2e 61 29 3b 0a 20 20 20 20  UES(new.a);.    
7360: 45 4e 44 3b 0a 20 20 20 20 43 52 45 41 54 45 20  END;.    CREATE 
7370: 54 52 49 47 47 45 52 20 74 31 5f 62 75 20 42 45  TRIGGER t1_bu BE
7380: 46 4f 52 45 20 55 50 44 41 54 45 20 4f 4e 20 74  FORE UPDATE ON t
7390: 31 20 42 45 47 49 4e 20 0a 20 20 20 20 20 20 55  1 BEGIN .      U
73a0: 50 44 41 54 45 20 74 31 5f 6d 69 72 72 6f 72 20  PDATE t1_mirror 
73b0: 53 45 54 20 61 20 3d 20 6e 65 77 2e 61 20 57 48  SET a = new.a WH
73c0: 45 52 45 20 61 20 3d 20 6f 6c 64 2e 61 3b 0a 20  ERE a = old.a;. 
73d0: 20 20 20 45 4e 44 3b 0a 20 20 20 20 43 52 45 41     END;.    CREA
73e0: 54 45 20 54 52 49 47 47 45 52 20 74 31 5f 61 75  TE TRIGGER t1_au
73f0: 20 41 46 54 45 52 20 55 50 44 41 54 45 20 4f 4e   AFTER UPDATE ON
7400: 20 74 31 20 42 45 47 49 4e 20 0a 20 20 20 20 20   t1 BEGIN .     
7410: 20 55 50 44 41 54 45 20 74 31 5f 6d 69 72 72 6f   UPDATE t1_mirro
7420: 72 32 20 53 45 54 20 61 20 3d 20 6e 65 77 2e 61  r2 SET a = new.a
7430: 20 57 48 45 52 45 20 61 20 3d 20 6f 6c 64 2e 61   WHERE a = old.a
7440: 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20 20 20 43  ;.    END;.    C
7450: 52 45 41 54 45 20 54 52 49 47 47 45 52 20 74 31  REATE TRIGGER t1
7460: 5f 62 64 20 42 45 46 4f 52 45 20 44 45 4c 45 54  _bd BEFORE DELET
7470: 45 20 4f 4e 20 74 31 20 42 45 47 49 4e 20 0a 20  E ON t1 BEGIN . 
7480: 20 20 20 20 20 44 45 4c 45 54 45 20 46 52 4f 4d       DELETE FROM
7490: 20 74 31 5f 6d 69 72 72 6f 72 20 57 48 45 52 45   t1_mirror WHERE
74a0: 20 61 20 3d 20 6f 6c 64 2e 61 3b 0a 20 20 20 20   a = old.a;.    
74b0: 45 4e 44 3b 0a 20 20 20 20 43 52 45 41 54 45 20  END;.    CREATE 
74c0: 54 52 49 47 47 45 52 20 74 31 5f 61 64 20 41 46  TRIGGER t1_ad AF
74d0: 54 45 52 20 44 45 4c 45 54 45 20 4f 4e 20 74 31  TER DELETE ON t1
74e0: 20 42 45 47 49 4e 20 0a 20 20 20 20 20 20 44 45   BEGIN .      DE
74f0: 4c 45 54 45 20 46 52 4f 4d 20 74 31 5f 6d 69 72  LETE FROM t1_mir
7500: 72 6f 72 32 20 57 48 45 52 45 20 61 20 3d 20 6f  ror2 WHERE a = o
7510: 6c 64 2e 61 3b 0a 20 20 20 20 45 4e 44 3b 0a 20  ld.a;.    END;. 
7520: 20 7d 0a 7d 20 7b 7d 0a 0a 64 6f 5f 74 65 73 74   }.} {}..do_test
7530: 20 70 72 61 67 6d 61 2d 31 30 2e 31 20 7b 0a 20   pragma-10.1 {. 
7540: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 49   execsql {.    I
7550: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41  NSERT INTO t1 VA
7560: 4c 55 45 53 28 72 61 6e 64 73 74 72 28 31 30 2c  LUES(randstr(10,
7570: 31 30 29 29 3b 0a 20 20 7d 0a 7d 20 7b 31 7d 0a  10));.  }.} {1}.
7580: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31  do_test pragma-1
7590: 30 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  0.2 {.  execsql 
75a0: 7b 0a 20 20 20 20 55 50 44 41 54 45 20 74 31 20  {.    UPDATE t1 
75b0: 53 45 54 20 61 20 3d 20 72 61 6e 64 73 74 72 28  SET a = randstr(
75c0: 31 30 2c 31 30 29 3b 0a 20 20 7d 0a 7d 20 7b 31  10,10);.  }.} {1
75d0: 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  }.do_test pragma
75e0: 2d 31 30 2e 33 20 7b 0a 20 20 65 78 65 63 73 71  -10.3 {.  execsq
75f0: 6c 20 7b 0a 20 20 20 20 44 45 4c 45 54 45 20 46  l {.    DELETE F
7600: 52 4f 4d 20 74 31 3b 0a 20 20 7d 0a 7d 20 7b 31  ROM t1;.  }.} {1
7610: 7d 0a 0a 7d 20 3b 23 20 69 66 63 61 70 61 62 6c  }..} ;# ifcapabl
7620: 65 20 74 72 69 67 67 65 72 0a 0a 69 66 63 61 70  e trigger..ifcap
7630: 61 62 6c 65 20 73 63 68 65 6d 61 5f 70 72 61 67  able schema_prag
7640: 6d 61 73 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20  mas {.  do_test 
7650: 70 72 61 67 6d 61 2d 31 31 2e 31 20 7b 0a 20 20  pragma-11.1 {.  
7660: 20 20 65 78 65 63 73 71 6c 32 20 7b 0a 20 20 20    execsql2 {.   
7670: 20 20 20 70 72 61 67 6d 61 20 63 6f 6c 6c 61 74     pragma collat
7680: 69 6f 6e 5f 6c 69 73 74 3b 0a 20 20 20 20 7d 0a  ion_list;.    }.
7690: 20 20 7d 20 7b 73 65 71 20 30 20 6e 61 6d 65 20    } {seq 0 name 
76a0: 52 54 52 49 4d 20 73 65 71 20 31 20 6e 61 6d 65  RTRIM seq 1 name
76b0: 20 4e 4f 43 41 53 45 20 73 65 71 20 32 20 6e 61   NOCASE seq 2 na
76c0: 6d 65 20 42 49 4e 41 52 59 7d 0a 20 20 64 6f 5f  me BINARY}.  do_
76d0: 74 65 73 74 20 70 72 61 67 6d 61 2d 31 31 2e 32  test pragma-11.2
76e0: 20 7b 0a 20 20 20 20 64 62 20 63 6f 6c 6c 61 74   {.    db collat
76f0: 65 20 4e 65 77 5f 43 6f 6c 6c 61 74 69 6f 6e 20  e New_Collation 
7700: 62 6c 61 68 2e 2e 2e 0a 20 20 20 20 65 78 65 63  blah....    exec
7710: 73 71 6c 20 7b 0a 20 20 20 20 20 20 70 72 61 67  sql {.      prag
7720: 6d 61 20 63 6f 6c 6c 61 74 69 6f 6e 5f 6c 69 73  ma collation_lis
7730: 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 30 20  t;.    }.  } {0 
7740: 4e 65 77 5f 43 6f 6c 6c 61 74 69 6f 6e 20 31 20  New_Collation 1 
7750: 52 54 52 49 4d 20 32 20 4e 4f 43 41 53 45 20 33  RTRIM 2 NOCASE 3
7760: 20 42 49 4e 41 52 59 7d 0a 7d 0a 0a 69 66 63 61   BINARY}.}..ifca
7770: 70 61 62 6c 65 20 73 63 68 65 6d 61 5f 70 72 61  pable schema_pra
7780: 67 6d 61 73 26 26 74 65 6d 70 64 62 20 7b 0a 20  gmas&&tempdb {. 
7790: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
77a0: 31 32 2e 31 20 7b 0a 20 20 20 20 73 71 6c 69 74  12.1 {.    sqlit
77b0: 65 33 20 64 62 32 20 74 65 73 74 2e 64 62 0a 20  e3 db2 test.db. 
77c0: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
77d0: 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 2e 74     PRAGMA temp.t
77e0: 61 62 6c 65 5f 69 6e 66 6f 28 27 61 62 63 27 29  able_info('abc')
77f0: 3b 0a 20 20 20 20 7d 20 64 62 32 0a 20 20 7d 20  ;.    } db2.  } 
7800: 7b 7d 0a 20 20 64 62 32 20 63 6c 6f 73 65 0a 0a  {}.  db2 close..
7810: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
7820: 2d 31 32 2e 32 20 7b 0a 20 20 20 20 73 71 6c 69  -12.2 {.    sqli
7830: 74 65 33 20 64 62 32 20 74 65 73 74 2e 64 62 0a  te3 db2 test.db.
7840: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20      execsql {.  
7850: 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 2e      PRAGMA temp.
7860: 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69  default_cache_si
7870: 7a 65 20 3d 20 32 30 30 3b 0a 20 20 20 20 20 20  ze = 200;.      
7880: 50 52 41 47 4d 41 20 74 65 6d 70 2e 64 65 66 61  PRAGMA temp.defa
7890: 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65 3b 0a  ult_cache_size;.
78a0: 20 20 20 20 7d 20 64 62 32 0a 20 20 7d 20 7b 32      } db2.  } {2
78b0: 30 30 7d 0a 20 20 64 62 32 20 63 6c 6f 73 65 0a  00}.  db2 close.
78c0: 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .  do_test pragm
78d0: 61 2d 31 32 2e 33 20 7b 0a 20 20 20 20 73 71 6c  a-12.3 {.    sql
78e0: 69 74 65 33 20 64 62 32 20 74 65 73 74 2e 64 62  ite3 db2 test.db
78f0: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
7900: 20 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70       PRAGMA temp
7910: 2e 63 61 63 68 65 5f 73 69 7a 65 20 3d 20 34 30  .cache_size = 40
7920: 30 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20  0;.      PRAGMA 
7930: 74 65 6d 70 2e 63 61 63 68 65 5f 73 69 7a 65 3b  temp.cache_size;
7940: 0a 20 20 20 20 7d 20 64 62 32 0a 20 20 7d 20 7b  .    } db2.  } {
7950: 34 30 30 7d 0a 20 20 64 62 32 20 63 6c 6f 73 65  400}.  db2 close
7960: 0a 7d 0a 0a 69 66 63 61 70 61 62 6c 65 20 62 6c  .}..ifcapable bl
7970: 6f 62 6c 69 74 20 7b 0a 0a 64 6f 5f 74 65 73 74  oblit {..do_test
7980: 20 70 72 61 67 6d 61 2d 31 33 2e 31 20 7b 0a 20   pragma-13.1 {. 
7990: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 44   execsql {.    D
79a0: 52 4f 50 20 54 41 42 4c 45 20 49 46 20 45 58 49  ROP TABLE IF EXI
79b0: 53 54 53 20 74 34 3b 0a 20 20 20 20 50 52 41 47  STS t4;.    PRAG
79c0: 4d 41 20 76 64 62 65 5f 74 72 61 63 65 3d 6f 6e  MA vdbe_trace=on
79d0: 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 76 64 62  ;.    PRAGMA vdb
79e0: 65 5f 6c 69 73 74 69 6e 67 3d 6f 6e 3b 0a 20 20  e_listing=on;.  
79f0: 20 20 50 52 41 47 4d 41 20 73 71 6c 5f 74 72 61    PRAGMA sql_tra
7a00: 63 65 3d 6f 6e 3b 0a 20 20 20 20 43 52 45 41 54  ce=on;.    CREAT
7a10: 45 20 54 41 42 4c 45 20 74 34 28 61 20 49 4e 54  E TABLE t4(a INT
7a20: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
7a30: 2c 62 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20  ,b);.    INSERT 
7a40: 49 4e 54 4f 20 74 34 28 62 29 20 56 41 4c 55 45  INTO t4(b) VALUE
7a50: 53 28 78 27 30 31 32 33 34 35 36 37 38 39 61 62  S(x'0123456789ab
7a60: 63 64 65 66 30 31 32 33 34 35 36 37 38 39 61 62  cdef0123456789ab
7a70: 63 64 65 66 30 31 32 33 34 35 36 37 38 39 27 29  cdef0123456789')
7a80: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
7a90: 4f 20 74 34 28 62 29 20 56 41 4c 55 45 53 28 72  O t4(b) VALUES(r
7aa0: 61 6e 64 73 74 72 28 33 30 2c 33 30 29 29 3b 0a  andstr(30,30));.
7ab0: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
7ac0: 74 34 28 62 29 20 56 41 4c 55 45 53 28 31 2e 32  t4(b) VALUES(1.2
7ad0: 33 34 35 36 29 3b 0a 20 20 20 20 49 4e 53 45 52  3456);.    INSER
7ae0: 54 20 49 4e 54 4f 20 74 34 28 62 29 20 56 41 4c  T INTO t4(b) VAL
7af0: 55 45 53 28 4e 55 4c 4c 29 3b 0a 20 20 20 20 49  UES(NULL);.    I
7b00: 4e 53 45 52 54 20 49 4e 54 4f 20 74 34 28 62 29  NSERT INTO t4(b)
7b10: 20 56 41 4c 55 45 53 28 30 29 3b 0a 20 20 20 20   VALUES(0);.    
7b20: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 34 28 62  INSERT INTO t4(b
7b30: 29 20 53 45 4c 45 43 54 20 62 7c 7c 62 7c 7c 62  ) SELECT b||b||b
7b40: 7c 7c 62 20 46 52 4f 4d 20 74 34 3b 0a 20 20 20  ||b FROM t4;.   
7b50: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
7b60: 34 3b 0a 20 20 7d 0a 20 20 65 78 65 63 73 71 6c  4;.  }.  execsql
7b70: 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 76 64   {.    PRAGMA vd
7b80: 62 65 5f 74 72 61 63 65 3d 6f 66 66 3b 0a 20 20  be_trace=off;.  
7b90: 20 20 50 52 41 47 4d 41 20 76 64 62 65 5f 6c 69    PRAGMA vdbe_li
7ba0: 73 74 69 6e 67 3d 6f 66 66 3b 0a 20 20 20 20 50  sting=off;.    P
7bb0: 52 41 47 4d 41 20 73 71 6c 5f 74 72 61 63 65 3d  RAGMA sql_trace=
7bc0: 6f 66 66 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a 7d  off;.  }.} {}..}
7bd0: 20 3b 23 20 69 66 63 61 70 61 62 6c 65 20 62 6c   ;# ifcapable bl
7be0: 6f 62 6c 69 74 20 0a 0a 69 66 63 61 70 61 62 6c  oblit ..ifcapabl
7bf0: 65 20 70 61 67 65 72 5f 70 72 61 67 6d 61 73 20  e pager_pragmas 
7c00: 7b 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 66  {.  db close.  f
7c10: 6f 72 63 65 64 65 6c 65 74 65 20 74 65 73 74 2e  orcedelete test.
7c20: 64 62 0a 20 20 73 71 6c 69 74 65 33 20 64 62 20  db.  sqlite3 db 
7c30: 74 65 73 74 2e 64 62 0a 0a 20 20 64 6f 5f 74 65  test.db..  do_te
7c40: 73 74 20 70 72 61 67 6d 61 2d 31 34 2e 31 20 7b  st pragma-14.1 {
7c50: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 20 70  .    execsql { p
7c60: 72 61 67 6d 61 20 61 75 74 6f 5f 76 61 63 75 75  ragma auto_vacuu
7c70: 6d 20 3d 20 30 20 7d 0a 20 20 20 20 65 78 65 63  m = 0 }.    exec
7c80: 73 71 6c 20 7b 20 70 72 61 67 6d 61 20 70 61 67  sql { pragma pag
7c90: 65 5f 63 6f 75 6e 74 20 7d 0a 20 20 7d 20 7b 30  e_count }.  } {0
7ca0: 7d 0a 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61  }..  do_test pra
7cb0: 67 6d 61 2d 31 34 2e 32 20 7b 0a 20 20 20 20 65  gma-14.2 {.    e
7cc0: 78 65 63 73 71 6c 20 7b 20 0a 20 20 20 20 20 20  xecsql { .      
7cd0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 61 62 63  CREATE TABLE abc
7ce0: 28 61 2c 20 62 2c 20 63 29 3b 0a 20 20 20 20 20  (a, b, c);.     
7cf0: 20 50 52 41 47 4d 41 20 70 61 67 65 5f 63 6f 75   PRAGMA page_cou
7d00: 6e 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 32  nt;.    }.  } {2
7d10: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67  }.  do_test prag
7d20: 6d 61 2d 31 34 2e 32 75 63 20 7b 0a 20 20 20 20  ma-14.2uc {.    
7d30: 65 78 65 63 73 71 6c 20 7b 70 72 61 67 6d 61 20  execsql {pragma 
7d40: 50 41 47 45 5f 43 4f 55 4e 54 7d 0a 20 20 7d 20  PAGE_COUNT}.  } 
7d50: 7b 32 7d 0a 0a 20 20 64 6f 5f 74 65 73 74 20 70  {2}..  do_test p
7d60: 72 61 67 6d 61 2d 31 34 2e 33 20 7b 0a 20 20 20  ragma-14.3 {.   
7d70: 20 65 78 65 63 73 71 6c 20 7b 20 0a 20 20 20 20   execsql { .    
7d80: 20 20 42 45 47 49 4e 3b 0a 20 20 20 20 20 20 43    BEGIN;.      C
7d90: 52 45 41 54 45 20 54 41 42 4c 45 20 64 65 66 28  REATE TABLE def(
7da0: 61 2c 20 62 2c 20 63 29 3b 0a 20 20 20 20 20 20  a, b, c);.      
7db0: 50 52 41 47 4d 41 20 70 61 67 65 5f 63 6f 75 6e  PRAGMA page_coun
7dc0: 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 33 7d  t;.    }.  } {3}
7dd0: 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .  do_test pragm
7de0: 61 2d 31 34 2e 33 75 63 20 7b 0a 20 20 20 20 65  a-14.3uc {.    e
7df0: 78 65 63 73 71 6c 20 7b 70 72 61 67 6d 61 20 50  xecsql {pragma P
7e00: 41 47 45 5f 43 4f 55 4e 54 7d 0a 20 20 7d 20 7b  AGE_COUNT}.  } {
7e10: 33 7d 0a 0a 20 20 64 6f 5f 74 65 73 74 20 70 72  3}..  do_test pr
7e20: 61 67 6d 61 2d 31 34 2e 34 20 7b 0a 20 20 20 20  agma-14.4 {.    
7e30: 73 65 74 20 70 61 67 65 5f 73 69 7a 65 20 5b 64  set page_size [d
7e40: 62 20 6f 6e 65 20 7b 70 72 61 67 6d 61 20 70 61  b one {pragma pa
7e50: 67 65 5f 73 69 7a 65 7d 5d 0a 20 20 20 20 65 78  ge_size}].    ex
7e60: 70 72 20 5b 66 69 6c 65 20 73 69 7a 65 20 74 65  pr [file size te
7e70: 73 74 2e 64 62 5d 20 2f 20 24 70 61 67 65 5f 73  st.db] / $page_s
7e80: 69 7a 65 0a 20 20 7d 20 7b 32 7d 0a 0a 20 20 64  ize.  } {2}..  d
7e90: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 34  o_test pragma-14
7ea0: 2e 35 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  .5 {.    execsql
7eb0: 20 7b 0a 20 20 20 20 20 20 52 4f 4c 4c 42 41 43   {.      ROLLBAC
7ec0: 4b 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20  K;.      PRAGMA 
7ed0: 70 61 67 65 5f 63 6f 75 6e 74 3b 0a 20 20 20 20  page_count;.    
7ee0: 7d 0a 20 20 7d 20 7b 32 7d 0a 0a 20 20 64 6f 5f  }.  } {2}..  do_
7ef0: 74 65 73 74 20 70 72 61 67 6d 61 2d 31 34 2e 36  test pragma-14.6
7f00: 20 7b 0a 20 20 20 20 66 6f 72 63 65 64 65 6c 65   {.    forcedele
7f10: 74 65 20 74 65 73 74 32 2e 64 62 0a 20 20 20 20  te test2.db.    
7f20: 73 71 6c 69 74 65 33 20 64 62 32 20 74 65 73 74  sqlite3 db2 test
7f30: 32 2e 64 62 0a 20 20 20 20 65 78 65 63 73 71 6c  2.db.    execsql
7f40: 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20   {.      PRAGMA 
7f50: 61 75 74 6f 5f 76 61 63 75 75 6d 20 3d 20 30 3b  auto_vacuum = 0;
7f60: 0a 20 20 20 20 20 20 43 52 45 41 54 45 20 54 41  .      CREATE TA
7f70: 42 4c 45 20 74 31 28 61 2c 20 62 2c 20 63 29 3b  BLE t1(a, b, c);
7f80: 0a 20 20 20 20 20 20 43 52 45 41 54 45 20 54 41  .      CREATE TA
7f90: 42 4c 45 20 74 32 28 61 2c 20 62 2c 20 63 29 3b  BLE t2(a, b, c);
7fa0: 0a 20 20 20 20 20 20 43 52 45 41 54 45 20 54 41  .      CREATE TA
7fb0: 42 4c 45 20 74 33 28 61 2c 20 62 2c 20 63 29 3b  BLE t3(a, b, c);
7fc0: 0a 20 20 20 20 20 20 43 52 45 41 54 45 20 54 41  .      CREATE TA
7fd0: 42 4c 45 20 74 34 28 61 2c 20 62 2c 20 63 29 3b  BLE t4(a, b, c);
7fe0: 0a 20 20 20 20 7d 20 64 62 32 0a 20 20 20 20 64  .    } db2.    d
7ff0: 62 32 20 63 6c 6f 73 65 0a 20 20 20 20 65 78 65  b2 close.    exe
8000: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 41 54 54  csql {.      ATT
8010: 41 43 48 20 27 74 65 73 74 32 2e 64 62 27 20 41  ACH 'test2.db' A
8020: 53 20 61 75 78 3b 0a 20 20 20 20 20 20 50 52 41  S aux;.      PRA
8030: 47 4d 41 20 61 75 78 2e 70 61 67 65 5f 63 6f 75  GMA aux.page_cou
8040: 6e 74 3b 0a 20 20 20 20 7d 20 0a 20 20 7d 20 7b  nt;.    } .  } {
8050: 35 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61  5}.  do_test pra
8060: 67 6d 61 2d 31 34 2e 36 75 63 20 7b 0a 20 20 20  gma-14.6uc {.   
8070: 20 65 78 65 63 73 71 6c 20 7b 70 72 61 67 6d 61   execsql {pragma
8080: 20 41 55 58 2e 50 41 47 45 5f 43 4f 55 4e 54 7d   AUX.PAGE_COUNT}
8090: 0a 20 20 7d 20 7b 35 7d 0a 7d 0a 0a 23 20 54 65  .  } {5}.}..# Te
80a0: 73 74 20 74 68 61 74 20 74 68 65 20 76 61 6c 75  st that the valu
80b0: 65 20 73 65 74 20 75 73 69 6e 67 20 74 68 65 20  e set using the 
80c0: 63 61 63 68 65 5f 73 69 7a 65 20 70 72 61 67 6d  cache_size pragm
80d0: 61 20 69 73 20 6e 6f 74 20 72 65 73 65 74 20 77  a is not reset w
80e0: 68 65 6e 20 74 68 65 0a 23 20 73 63 68 65 6d 61  hen the.# schema
80f0: 20 69 73 20 72 65 6c 6f 61 64 65 64 2e 0a 23 0a   is reloaded..#.
8100: 69 66 63 61 70 61 62 6c 65 20 70 61 67 65 72 5f  ifcapable pager_
8110: 70 72 61 67 6d 61 73 20 7b 0a 20 20 64 62 20 63  pragmas {.  db c
8120: 6c 6f 73 65 0a 20 20 73 71 6c 69 74 65 33 20 64  lose.  sqlite3 d
8130: 62 20 74 65 73 74 2e 64 62 0a 20 20 64 6f 5f 74  b test.db.  do_t
8140: 65 73 74 20 70 72 61 67 6d 61 2d 31 35 2e 31 20  est pragma-15.1 
8150: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a  {.    execsql {.
8160: 20 20 20 20 20 20 50 52 41 47 4d 41 20 63 61 63        PRAGMA cac
8170: 68 65 5f 73 69 7a 65 3d 35 39 3b 0a 20 20 20 20  he_size=59;.    
8180: 20 20 50 52 41 47 4d 41 20 63 61 63 68 65 5f 73    PRAGMA cache_s
8190: 69 7a 65 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b  ize;.    }.  } {
81a0: 35 39 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72  59}.  do_test pr
81b0: 61 67 6d 61 2d 31 35 2e 32 20 7b 0a 20 20 20 20  agma-15.2 {.    
81c0: 73 71 6c 69 74 65 33 20 64 62 32 20 74 65 73 74  sqlite3 db2 test
81d0: 2e 64 62 0a 20 20 20 20 65 78 65 63 73 71 6c 20  .db.    execsql 
81e0: 7b 0a 20 20 20 20 20 20 43 52 45 41 54 45 20 54  {.      CREATE T
81f0: 41 42 4c 45 20 6e 65 77 74 61 62 6c 65 28 61 2c  ABLE newtable(a,
8200: 20 62 2c 20 63 29 3b 0a 20 20 20 20 7d 20 64 62   b, c);.    } db
8210: 32 0a 20 20 20 20 64 62 32 20 63 6c 6f 73 65 0a  2.    db2 close.
8220: 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65 73 74    } {}.  do_test
8230: 20 70 72 61 67 6d 61 2d 31 35 2e 33 20 7b 0a 20   pragma-15.3 {. 
8240: 20 20 20 23 20 45 76 61 6c 75 61 74 69 6e 67 20     # Evaluating 
8250: 74 68 69 73 20 73 74 61 74 65 6d 65 6e 74 20 77  this statement w
8260: 69 6c 6c 20 63 61 75 73 65 20 74 68 65 20 73 63  ill cause the sc
8270: 68 65 6d 61 20 74 6f 20 62 65 20 72 65 6c 6f 61  hema to be reloa
8280: 64 65 64 20 28 62 65 63 61 75 73 65 0a 20 20 20  ded (because.   
8290: 20 23 20 74 68 65 20 73 63 68 65 6d 61 20 77 61   # the schema wa
82a0: 73 20 63 68 61 6e 67 65 64 20 62 79 20 61 6e 6f  s changed by ano
82b0: 74 68 65 72 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  ther connection 
82c0: 69 6e 20 70 72 61 67 6d 61 2d 31 35 2e 32 29 2e  in pragma-15.2).
82d0: 20 41 74 20 6f 6e 65 0a 20 20 20 20 23 20 70 6f   At one.    # po
82e0: 69 6e 74 20 74 68 65 72 65 20 77 61 73 20 61 20  int there was a 
82f0: 62 75 67 20 74 68 61 74 20 72 65 73 65 74 20 74  bug that reset t
8300: 68 65 20 63 61 63 68 65 5f 73 69 7a 65 20 74 6f  he cache_size to
8310: 20 69 74 73 20 64 65 66 61 75 6c 74 20 76 61 6c   its default val
8320: 75 65 0a 20 20 20 20 23 20 77 68 65 6e 20 74 68  ue.    # when th
8330: 69 73 20 68 61 70 70 65 6e 65 64 2e 20 0a 20 20  is happened. .  
8340: 20 20 65 78 65 63 73 71 6c 20 7b 20 53 45 4c 45    execsql { SELE
8350: 43 54 20 2a 20 46 52 4f 4d 20 73 71 6c 69 74 65  CT * FROM sqlite
8360: 5f 6d 61 73 74 65 72 20 7d 0a 20 20 20 20 65 78  _master }.    ex
8370: 65 63 73 71 6c 20 7b 20 50 52 41 47 4d 41 20 63  ecsql { PRAGMA c
8380: 61 63 68 65 5f 73 69 7a 65 20 7d 0a 20 20 7d 20  ache_size }.  } 
8390: 7b 35 39 7d 0a 7d 0a 0a 23 20 52 65 73 65 74 20  {59}.}..# Reset 
83a0: 74 68 65 20 73 71 6c 69 74 65 33 5f 74 65 6d 70  the sqlite3_temp
83b0: 5f 64 69 72 65 63 74 6f 72 79 20 76 61 72 69 61  _directory varia
83c0: 62 6c 65 20 66 6f 72 20 74 68 65 20 6e 65 78 74  ble for the next
83d0: 20 72 75 6e 20 6f 66 20 74 65 73 74 73 3a 0a 73   run of tests:.s
83e0: 71 6c 69 74 65 33 20 64 62 58 20 3a 6d 65 6d 6f  qlite3 dbX :memo
83f0: 72 79 3a 0a 64 62 58 20 65 76 61 6c 20 7b 50 52  ry:.dbX eval {PR
8400: 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 5f  AGMA temp_store_
8410: 64 69 72 65 63 74 6f 72 79 20 3d 20 22 22 7d 0a  directory = ""}.
8420: 64 62 58 20 63 6c 6f 73 65 0a 0a 69 66 63 61 70  dbX close..ifcap
8430: 61 62 6c 65 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f  able lock_proxy_
8440: 70 72 61 67 6d 61 73 26 26 70 72 65 66 65 72 5f  pragmas&&prefer_
8450: 70 72 6f 78 79 5f 6c 6f 63 6b 69 6e 67 20 7b 0a  proxy_locking {.
8460: 20 20 73 65 74 20 73 71 6c 69 74 65 5f 68 6f 73    set sqlite_hos
8470: 74 69 64 5f 6e 75 6d 20 31 0a 0a 20 20 73 65 74  tid_num 1..  set
8480: 20 75 73 69 6e 67 5f 70 72 6f 78 79 20 30 0a 20   using_proxy 0. 
8490: 20 66 6f 72 65 61 63 68 20 7b 6e 61 6d 65 20 76   foreach {name v
84a0: 61 6c 75 65 7d 20 5b 61 72 72 61 79 20 67 65 74  alue} [array get
84b0: 20 65 6e 76 20 53 51 4c 49 54 45 5f 46 4f 52 43   env SQLITE_FORC
84c0: 45 5f 50 52 4f 58 59 5f 4c 4f 43 4b 49 4e 47 5d  E_PROXY_LOCKING]
84d0: 20 7b 0a 20 20 20 20 73 65 74 20 75 73 69 6e 67   {.    set using
84e0: 5f 70 72 6f 78 79 20 24 76 61 6c 75 65 0a 20 20  _proxy $value.  
84f0: 7d 0a 0a 20 20 23 20 54 65 73 74 20 74 68 65 20  }..  # Test the 
8500: 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 20  lock_proxy_file 
8510: 70 72 61 67 6d 61 73 2e 0a 20 20 23 0a 20 20 64  pragmas..  #.  d
8520: 62 20 63 6c 6f 73 65 0a 20 20 73 65 74 20 65 6e  b close.  set en
8530: 76 28 53 51 4c 49 54 45 5f 46 4f 52 43 45 5f 50  v(SQLITE_FORCE_P
8540: 52 4f 58 59 5f 4c 4f 43 4b 49 4e 47 29 20 22 30  ROXY_LOCKING) "0
8550: 22 0a 0a 20 20 73 71 6c 69 74 65 33 20 64 62 20  "..  sqlite3 db 
8560: 74 65 73 74 2e 64 62 0a 20 20 64 6f 5f 74 65 73  test.db.  do_tes
8570: 74 20 70 72 61 67 6d 61 2d 31 36 2e 31 20 7b 0a  t pragma-16.1 {.
8580: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20      execsql {.  
8590: 20 20 20 20 50 52 41 47 4d 41 20 6c 6f 63 6b 5f      PRAGMA lock_
85a0: 70 72 6f 78 79 5f 66 69 6c 65 3d 22 6d 79 6c 69  proxy_file="myli
85b0: 74 74 6c 65 70 72 6f 78 79 22 3b 0a 20 20 20 20  ttleproxy";.    
85c0: 20 20 73 65 6c 65 63 74 20 2a 20 66 72 6f 6d 20    select * from 
85d0: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 3b 0a 20  sqlite_master;. 
85e0: 20 20 20 7d 0a 20 20 20 20 65 78 65 63 73 71 6c     }.    execsql
85f0: 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20   {.      PRAGMA 
8600: 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 3b  lock_proxy_file;
8610: 0a 20 20 20 20 7d 20 0a 20 20 7d 20 7b 6d 79 6c  .    } .  } {myl
8620: 69 74 74 6c 65 70 72 6f 78 79 7d 0a 0a 20 20 64  ittleproxy}..  d
8630: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 36  o_test pragma-16
8640: 2e 32 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  .2 {.    sqlite3
8650: 20 64 62 32 20 74 65 73 74 2e 64 62 0a 20 20 20   db2 test.db.   
8660: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20   execsql {.     
8670: 20 50 52 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f   PRAGMA lock_pro
8680: 78 79 5f 66 69 6c 65 3d 22 6d 79 6c 69 74 74 6c  xy_file="mylittl
8690: 65 70 72 6f 78 79 22 3b 0a 20 20 20 20 7d 20 64  eproxy";.    } d
86a0: 62 32 0a 20 20 7d 20 7b 7d 0a 0a 20 20 64 62 32  b2.  } {}..  db2
86b0: 20 63 6c 6f 73 65 0a 20 20 64 6f 5f 74 65 73 74   close.  do_test
86c0: 20 70 72 61 67 6d 61 2d 31 36 2e 32 2e 31 20 7b   pragma-16.2.1 {
86d0: 0a 20 20 20 20 73 71 6c 69 74 65 33 20 64 62 32  .    sqlite3 db2
86e0: 20 74 65 73 74 2e 64 62 0a 20 20 20 20 65 78 65   test.db.    exe
86f0: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41  csql {.      PRA
8700: 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66  GMA lock_proxy_f
8710: 69 6c 65 3d 22 3a 61 75 74 6f 3a 22 3b 0a 20 20  ile=":auto:";.  
8720: 20 20 20 20 73 65 6c 65 63 74 20 2a 20 66 72 6f      select * fro
8730: 6d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 3b  m sqlite_master;
8740: 0a 20 20 20 20 7d 20 64 62 32 0a 20 20 20 20 65  .    } db2.    e
8750: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50  xecsql {.      P
8760: 52 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78 79  RAGMA lock_proxy
8770: 5f 66 69 6c 65 3b 0a 20 20 20 20 7d 20 64 62 32  _file;.    } db2
8780: 0a 20 20 7d 20 7b 6d 79 6c 69 74 74 6c 65 70 72  .  } {mylittlepr
8790: 6f 78 79 7d 0a 0a 20 20 64 62 32 20 63 6c 6f 73  oxy}..  db2 clos
87a0: 65 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67  e.  do_test prag
87b0: 6d 61 2d 31 36 2e 33 20 7b 0a 20 20 20 20 73 71  ma-16.3 {.    sq
87c0: 6c 69 74 65 33 20 64 62 32 20 74 65 73 74 2e 64  lite3 db2 test.d
87d0: 62 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a  b.    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: 6f 74 68 65 72 70 72 6f 78 79 22 3b 0a 20 20 20  otherproxy";.   
8810: 20 7d 20 64 62 32 0a 20 20 20 20 63 61 74 63 68   } db2.    catch
8820: 73 71 6c 20 7b 0a 20 20 20 20 20 20 73 65 6c 65  sql {.      sele
8830: 63 74 20 2a 20 66 72 6f 6d 20 73 71 6c 69 74 65  ct * from sqlite
8840: 5f 6d 61 73 74 65 72 3b 0a 20 20 20 20 7d 20 64  _master;.    } d
8850: 62 32 0a 20 20 7d 20 7b 31 20 7b 64 61 74 61 62  b2.  } {1 {datab
8860: 61 73 65 20 69 73 20 6c 6f 63 6b 65 64 7d 7d 0a  ase is locked}}.
8870: 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .  do_test pragm
8880: 61 2d 31 36 2e 34 20 7b 0a 20 20 20 20 64 62 32  a-16.4 {.    db2
8890: 20 63 6c 6f 73 65 0a 20 20 20 20 64 62 20 63 6c   close.    db cl
88a0: 6f 73 65 0a 20 20 20 20 73 71 6c 69 74 65 33 20  ose.    sqlite3 
88b0: 64 62 32 20 74 65 73 74 2e 64 62 0a 20 20 20 20  db2 test.db.    
88c0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
88d0: 50 52 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78  PRAGMA lock_prox
88e0: 79 5f 66 69 6c 65 3d 22 6d 79 6f 72 69 67 69 6e  y_file="myorigin
88f0: 61 6c 70 72 6f 78 79 22 3b 0a 20 20 20 20 20 20  alproxy";.      
8900: 50 52 41 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78  PRAGMA lock_prox
8910: 79 5f 66 69 6c 65 3d 22 6d 79 6f 74 68 65 72 70  y_file="myotherp
8920: 72 6f 78 79 22 3b 0a 20 20 20 20 20 20 50 52 41  roxy";.      PRA
8930: 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66  GMA lock_proxy_f
8940: 69 6c 65 3b 0a 20 20 20 20 7d 20 64 62 32 0a 20  ile;.    } db2. 
8950: 20 7d 20 7b 6d 79 6f 74 68 65 72 70 72 6f 78 79   } {myotherproxy
8960: 7d 0a 0a 20 20 64 62 32 20 63 6c 6f 73 65 0a 20  }..  db2 close. 
8970: 20 73 65 74 20 65 6e 76 28 53 51 4c 49 54 45 5f   set env(SQLITE_
8980: 46 4f 52 43 45 5f 50 52 4f 58 59 5f 4c 4f 43 4b  FORCE_PROXY_LOCK
8990: 49 4e 47 29 20 22 31 22 0a 20 20 64 6f 5f 74 65  ING) "1".  do_te
89a0: 73 74 20 70 72 61 67 6d 61 2d 31 36 2e 35 20 7b  st pragma-16.5 {
89b0: 0a 20 20 20 20 73 71 6c 69 74 65 33 20 64 62 32  .    sqlite3 db2
89c0: 20 74 65 73 74 2e 64 62 0a 20 20 20 20 65 78 65   test.db.    exe
89d0: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41  csql {.      PRA
89e0: 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66  GMA lock_proxy_f
89f0: 69 6c 65 3d 22 3a 61 75 74 6f 3a 22 3b 0a 20 20  ile=":auto:";.  
8a00: 20 20 20 20 50 52 41 47 4d 41 20 6c 6f 63 6b 5f      PRAGMA lock_
8a10: 70 72 6f 78 79 5f 66 69 6c 65 3b 0a 20 20 20 20  proxy_file;.    
8a20: 7d 20 64 62 32 0a 20 20 7d 20 7b 6d 79 6f 74 68  } db2.  } {myoth
8a30: 65 72 70 72 6f 78 79 7d 0a 20 20 0a 20 20 64 6f  erproxy}.  .  do
8a40: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 36 2e  _test pragma-16.
8a50: 36 20 7b 0a 20 20 20 20 64 62 32 20 63 6c 6f 73  6 {.    db2 clos
8a60: 65 0a 20 20 20 20 73 71 6c 69 74 65 33 20 64 62  e.    sqlite3 db
8a70: 32 20 74 65 73 74 32 2e 64 62 0a 20 20 20 20 73  2 test2.db.    s
8a80: 65 74 20 6c 6f 63 6b 70 61 74 68 20 5b 65 78 65  et lockpath [exe
8a90: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41  csql {.      PRA
8aa0: 47 4d 41 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66  GMA lock_proxy_f
8ab0: 69 6c 65 3d 22 3a 61 75 74 6f 3a 22 3b 0a 20 20  ile=":auto:";.  
8ac0: 20 20 20 20 50 52 41 47 4d 41 20 6c 6f 63 6b 5f      PRAGMA lock_
8ad0: 70 72 6f 78 79 5f 66 69 6c 65 3b 0a 20 20 20 20  proxy_file;.    
8ae0: 7d 20 64 62 32 5d 0a 20 20 20 20 73 74 72 69 6e  } db2].    strin
8af0: 67 20 6d 61 74 63 68 20 22 2a 74 65 73 74 32 2e  g match "*test2.
8b00: 64 62 3a 61 75 74 6f 3a 22 20 24 6c 6f 63 6b 70  db:auto:" $lockp
8b10: 61 74 68 0a 20 20 7d 20 7b 31 7d 0a 20 20 0a 20  ath.  } {1}.  . 
8b20: 20 73 65 74 20 73 71 6c 69 74 65 5f 68 6f 73 74   set sqlite_host
8b30: 69 64 5f 6e 75 6d 20 32 0a 20 20 64 6f 5f 74 65  id_num 2.  do_te
8b40: 73 74 20 70 72 61 67 6d 61 2d 31 36 2e 37 20 7b  st pragma-16.7 {
8b50: 0a 20 20 20 20 6c 69 73 74 20 5b 63 61 74 63 68  .    list [catch
8b60: 20 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33   {.      sqlite3
8b70: 20 64 62 20 74 65 73 74 32 2e 64 62 0a 20 20 20   db test2.db.   
8b80: 20 20 20 65 78 65 63 73 71 6c 20 7b 20 0a 20 20     execsql { .  
8b90: 20 20 20 20 20 20 50 52 41 47 4d 41 20 6c 6f 63        PRAGMA loc
8ba0: 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 3d 22 3a 61  k_proxy_file=":a
8bb0: 75 74 6f 3a 22 3b 0a 20 20 20 20 20 20 20 20 73  uto:";.        s
8bc0: 65 6c 65 63 74 20 2a 20 66 72 6f 6d 20 73 71 6c  elect * from sql
8bd0: 69 74 65 5f 6d 61 73 74 65 72 3b 0a 20 20 20 20  ite_master;.    
8be0: 20 20 7d 0a 20 20 20 20 7d 20 6d 73 67 5d 20 24    }.    } msg] $
8bf0: 6d 73 67 0a 20 20 7d 20 7b 31 20 7b 64 61 74 61  msg.  } {1 {data
8c00: 62 61 73 65 20 69 73 20 6c 6f 63 6b 65 64 7d 7d  base is locked}}
8c10: 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 0a 20  .  db close.  . 
8c20: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
8c30: 31 36 2e 38 20 7b 0a 20 20 20 20 6c 69 73 74 20  16.8 {.    list 
8c40: 5b 63 61 74 63 68 20 7b 0a 20 20 20 20 20 20 73  [catch {.      s
8c50: 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 32 2e  qlite3 db test2.
8c60: 64 62 0a 20 20 20 20 20 20 65 78 65 63 73 71 6c  db.      execsql
8c70: 20 7b 20 73 65 6c 65 63 74 20 2a 20 66 72 6f 6d   { select * from
8c80: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 7d   sqlite_master }
8c90: 20 0a 20 20 20 20 7d 20 6d 73 67 5d 20 24 6d 73   .    } msg] $ms
8ca0: 67 0a 20 20 7d 20 7b 31 20 7b 64 61 74 61 62 61  g.  } {1 {databa
8cb0: 73 65 20 69 73 20 6c 6f 63 6b 65 64 7d 7d 0a 0a  se is locked}}..
8cc0: 20 20 64 62 32 20 63 6c 6f 73 65 0a 20 20 64 6f    db2 close.  do
8cd0: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 36 2e  _test pragma-16.
8ce0: 38 2e 31 20 7b 0a 20 20 20 20 65 78 65 63 73 71  8.1 {.    execsq
8cf0: 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41  l {.      PRAGMA
8d00: 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65   lock_proxy_file
8d10: 3d 22 79 65 74 61 6e 6f 74 68 65 72 70 72 6f 78  ="yetanotherprox
8d20: 79 22 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41  y";.      PRAGMA
8d30: 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65   lock_proxy_file
8d40: 3b 0a 20 20 20 20 7d 20 0a 20 20 7d 20 7b 79 65  ;.    } .  } {ye
8d50: 74 61 6e 6f 74 68 65 72 70 72 6f 78 79 7d 0a 20  tanotherproxy}. 
8d60: 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d   do_test pragma-
8d70: 31 36 2e 38 2e 32 20 7b 0a 20 20 20 20 65 78 65  16.8.2 {.    exe
8d80: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 63 72 65  csql {.      cre
8d90: 61 74 65 20 74 61 62 6c 65 20 6d 69 6e 65 28 78  ate table mine(x
8da0: 29 3b 0a 20 20 20 20 7d 20 0a 20 20 7d 20 7b 7d  );.    } .  } {}
8db0: 0a 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 64  ..  db close.  d
8dc0: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 36  o_test pragma-16
8dd0: 2e 39 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  .9 {.    sqlite3
8de0: 20 64 62 20 70 72 6f 78 79 74 65 73 74 2e 64 62   db proxytest.db
8df0: 0a 20 20 20 20 73 65 74 20 6c 6f 63 6b 70 61 74  .    set lockpat
8e00: 68 32 20 5b 65 78 65 63 73 71 6c 20 7b 0a 20 20  h2 [execsql {.  
8e10: 20 20 20 20 50 52 41 47 4d 41 20 6c 6f 63 6b 5f      PRAGMA lock_
8e20: 70 72 6f 78 79 5f 66 69 6c 65 3d 22 3a 61 75 74  proxy_file=":aut
8e30: 6f 3a 22 3b 0a 20 20 20 20 20 20 50 52 41 47 4d  o:";.      PRAGM
8e40: 41 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c  A lock_proxy_fil
8e50: 65 3b 0a 20 20 20 20 7d 20 64 62 5d 0a 20 20 20  e;.    } db].   
8e60: 20 73 74 72 69 6e 67 20 6d 61 74 63 68 20 22 2a   string match "*
8e70: 70 72 6f 78 79 74 65 73 74 2e 64 62 3a 61 75 74  proxytest.db:aut
8e80: 6f 3a 22 20 24 6c 6f 63 6b 70 61 74 68 32 0a 20  o:" $lockpath2. 
8e90: 20 7d 20 7b 31 7d 0a 0a 20 20 73 65 74 20 65 6e   } {1}..  set en
8ea0: 76 28 53 51 4c 49 54 45 5f 46 4f 52 43 45 5f 50  v(SQLITE_FORCE_P
8eb0: 52 4f 58 59 5f 4c 4f 43 4b 49 4e 47 29 20 24 75  ROXY_LOCKING) $u
8ec0: 73 69 6e 67 5f 70 72 6f 78 79 0a 20 20 73 65 74  sing_proxy.  set
8ed0: 20 73 71 6c 69 74 65 5f 68 6f 73 74 69 64 5f 6e   sqlite_hostid_n
8ee0: 75 6d 20 30 0a 7d 0a 0a 23 20 50 61 72 73 69 6e  um 0.}..# Parsin
8ef0: 67 20 6f 66 20 61 75 74 6f 5f 76 61 63 75 75 6d  g of auto_vacuum
8f00: 20 73 65 74 74 69 6e 67 73 2e 0a 23 0a 66 6f 72   settings..#.for
8f10: 65 61 63 68 20 7b 61 75 74 6f 76 61 63 5f 73 65  each {autovac_se
8f20: 74 74 69 6e 67 20 76 61 6c 7d 20 7b 0a 20 20 30  tting val} {.  0
8f30: 20 30 0a 20 20 31 20 31 0a 20 20 32 20 32 0a 20   0.  1 1.  2 2. 
8f40: 20 33 20 30 0a 20 20 2d 31 20 30 0a 20 20 6e 6f   3 0.  -1 0.  no
8f50: 6e 65 20 30 0a 20 20 4e 4f 4e 45 20 30 0a 20 20  ne 0.  NONE 0.  
8f60: 4e 6f 4e 65 20 30 0a 20 20 66 75 6c 6c 20 31 0a  NoNe 0.  full 1.
8f70: 20 20 46 55 4c 4c 20 31 0a 20 20 69 6e 63 72 65    FULL 1.  incre
8f80: 6d 65 6e 74 61 6c 20 32 0a 20 20 49 4e 43 52 45  mental 2.  INCRE
8f90: 4d 45 4e 54 41 4c 20 32 0a 20 20 2d 31 32 33 34  MENTAL 2.  -1234
8fa0: 20 30 0a 20 20 31 32 33 34 20 30 0a 7d 20 7b 0a   0.  1234 0.} {.
8fb0: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
8fc0: 2d 31 37 2e 31 2e 24 61 75 74 6f 76 61 63 5f 73  -17.1.$autovac_s
8fd0: 65 74 74 69 6e 67 20 7b 0a 20 20 20 20 63 61 74  etting {.    cat
8fe0: 63 68 20 7b 64 62 20 63 6c 6f 73 65 7d 0a 20 20  ch {db close}.  
8ff0: 20 20 73 71 6c 69 74 65 33 20 64 62 20 3a 6d 65    sqlite3 db :me
9000: 6d 6f 72 79 3a 0a 20 20 20 20 65 78 65 63 73 71  mory:.    execsq
9010: 6c 20 22 0a 20 20 20 20 20 20 50 52 41 47 4d 41  l ".      PRAGMA
9020: 20 61 75 74 6f 5f 76 61 63 75 75 6d 3d 24 3a 3a   auto_vacuum=$::
9030: 61 75 74 6f 76 61 63 5f 73 65 74 74 69 6e 67 3b  autovac_setting;
9040: 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 61 75  .      PRAGMA au
9050: 74 6f 5f 76 61 63 75 75 6d 3b 0a 20 20 20 20 22  to_vacuum;.    "
9060: 0a 20 20 7d 20 24 76 61 6c 0a 7d 0a 0a 23 20 50  .  } $val.}..# P
9070: 61 72 73 69 6e 67 20 6f 66 20 74 65 6d 70 5f 73  arsing of temp_s
9080: 74 6f 72 65 20 73 65 74 74 69 6e 67 73 2e 0a 23  tore settings..#
9090: 0a 66 6f 72 65 61 63 68 20 7b 74 65 6d 70 5f 73  .foreach {temp_s
90a0: 65 74 74 69 6e 67 20 76 61 6c 7d 20 7b 0a 20 20  etting val} {.  
90b0: 30 20 30 0a 20 20 31 20 31 0a 20 20 32 20 32 0a  0 0.  1 1.  2 2.
90c0: 20 20 33 20 30 0a 20 20 2d 31 20 30 0a 20 20 66    3 0.  -1 0.  f
90d0: 69 6c 65 20 31 0a 20 20 46 49 4c 45 20 31 0a 20  ile 1.  FILE 1. 
90e0: 20 66 49 6c 45 20 31 0a 20 20 6d 65 6d 6f 72 79   fIlE 1.  memory
90f0: 20 32 0a 20 20 4d 45 4d 4f 52 59 20 32 0a 20 20   2.  MEMORY 2.  
9100: 4d 65 4d 6f 52 79 20 32 0a 7d 20 7b 0a 20 20 64  MeMoRy 2.} {.  d
9110: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 38  o_test pragma-18
9120: 2e 31 2e 24 74 65 6d 70 5f 73 65 74 74 69 6e 67  .1.$temp_setting
9130: 20 7b 0a 20 20 20 20 63 61 74 63 68 20 7b 64 62   {.    catch {db
9140: 20 63 6c 6f 73 65 7d 0a 20 20 20 20 73 71 6c 69   close}.    sqli
9150: 74 65 33 20 64 62 20 3a 6d 65 6d 6f 72 79 3a 0a  te3 db :memory:.
9160: 20 20 20 20 65 78 65 63 73 71 6c 20 22 0a 20 20      execsql ".  
9170: 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f      PRAGMA temp_
9180: 73 74 6f 72 65 3d 24 3a 3a 74 65 6d 70 5f 73 65  store=$::temp_se
9190: 74 74 69 6e 67 3b 0a 20 20 20 20 20 20 50 52 41  tting;.      PRA
91a0: 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 3d 24  GMA temp_store=$
91b0: 3a 3a 74 65 6d 70 5f 73 65 74 74 69 6e 67 3b 0a  ::temp_setting;.
91c0: 20 20 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d        PRAGMA tem
91d0: 70 5f 73 74 6f 72 65 3b 0a 20 20 20 20 22 0a 20  p_store;.    ". 
91e0: 20 7d 20 24 76 61 6c 0a 7d 0a 0a 23 20 54 68 65   } $val.}..# The
91f0: 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 50 52   SQLITE_FCNTL_PR
9200: 41 47 4d 41 20 6c 6f 67 69 63 2c 20 77 69 74 68  AGMA logic, with
9210: 20 65 72 72 6f 72 20 68 61 6e 64 6c 69 6e 67 2e   error handling.
9220: 0a 23 0a 64 62 20 63 6c 6f 73 65 0a 74 65 73 74  .#.db close.test
9230: 76 66 73 20 74 76 66 73 0a 73 71 6c 69 74 65 33  vfs tvfs.sqlite3
9240: 20 64 62 20 74 65 73 74 2e 64 62 20 2d 76 66 73   db test.db -vfs
9250: 20 74 76 66 73 0a 64 6f 5f 74 65 73 74 20 70 72   tvfs.do_test pr
9260: 61 67 6d 61 2d 31 39 2e 31 20 7b 0a 20 20 63 61  agma-19.1 {.  ca
9270: 74 63 68 73 71 6c 20 7b 50 52 41 47 4d 41 20 65  tchsql {PRAGMA e
9280: 72 72 6f 72 7d 0a 7d 20 7b 31 20 7b 53 51 4c 20  rror}.} {1 {SQL 
9290: 6c 6f 67 69 63 20 65 72 72 6f 72 20 6f 72 20 6d  logic error or m
92a0: 69 73 73 69 6e 67 20 64 61 74 61 62 61 73 65 7d  issing database}
92b0: 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  }.do_test pragma
92c0: 2d 31 39 2e 32 20 7b 0a 20 20 63 61 74 63 68 73  -19.2 {.  catchs
92d0: 71 6c 20 7b 50 52 41 47 4d 41 20 65 72 72 6f 72  ql {PRAGMA error
92e0: 3d 27 54 68 69 73 20 69 73 20 74 68 65 20 65 72  ='This is the er
92f0: 72 6f 72 20 6d 65 73 73 61 67 65 27 7d 0a 7d 20  ror message'}.} 
9300: 7b 31 20 7b 54 68 69 73 20 69 73 20 74 68 65 20  {1 {This is the 
9310: 65 72 72 6f 72 20 6d 65 73 73 61 67 65 7d 7d 0a  error message}}.
9320: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31  do_test pragma-1
9330: 39 2e 33 20 7b 0a 20 20 63 61 74 63 68 73 71 6c  9.3 {.  catchsql
9340: 20 7b 50 52 41 47 4d 41 20 65 72 72 6f 72 3d 27   {PRAGMA error='
9350: 37 20 54 68 69 73 20 69 73 20 74 68 65 20 65 72  7 This is the er
9360: 72 6f 72 20 6d 65 73 73 61 67 65 27 7d 0a 7d 20  ror message'}.} 
9370: 7b 31 20 7b 54 68 69 73 20 69 73 20 74 68 65 20  {1 {This is the 
9380: 65 72 72 6f 72 20 6d 65 73 73 61 67 65 7d 7d 0a  error message}}.
9390: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31  do_test pragma-1
93a0: 39 2e 34 20 7b 0a 20 20 63 61 74 63 68 73 71 6c  9.4 {.  catchsql
93b0: 20 7b 50 52 41 47 4d 41 20 65 72 72 6f 72 3d 37   {PRAGMA error=7
93c0: 7d 0a 7d 20 7b 31 20 7b 6f 75 74 20 6f 66 20 6d  }.} {1 {out of m
93d0: 65 6d 6f 72 79 7d 7d 0a 64 6f 5f 74 65 73 74 20  emory}}.do_test 
93e0: 70 72 61 67 6d 61 2d 31 39 2e 35 20 7b 0a 20 20  pragma-19.5 {.  
93f0: 66 69 6c 65 20 74 61 69 6c 20 5b 6c 69 6e 64 65  file tail [linde
9400: 78 20 5b 65 78 65 63 73 71 6c 20 7b 50 52 41 47  x [execsql {PRAG
9410: 4d 41 20 66 69 6c 65 6e 61 6d 65 7d 5d 20 30 5d  MA filename}] 0]
9420: 0a 7d 20 7b 74 65 73 74 2e 64 62 7d 0a 0a 69 66  .} {test.db}..if
9430: 20 7b 24 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28   {$tcl_platform(
9440: 70 6c 61 74 66 6f 72 6d 29 3d 3d 22 77 69 6e 64  platform)=="wind
9450: 6f 77 73 22 7d 20 7b 0a 23 20 54 65 73 74 20 64  ows"} {.# Test d
9460: 61 74 61 5f 73 74 6f 72 65 5f 64 69 72 65 63 74  ata_store_direct
9470: 6f 72 79 20 70 72 61 67 6d 61 0a 23 0a 64 62 20  ory pragma.#.db 
9480: 63 6c 6f 73 65 0a 73 71 6c 69 74 65 33 20 64 62  close.sqlite3 db
9490: 20 74 65 73 74 2e 64 62 0a 66 69 6c 65 20 6d 6b   test.db.file mk
94a0: 64 69 72 20 64 61 74 61 5f 64 69 72 0a 64 6f 5f  dir data_dir.do_
94b0: 74 65 73 74 20 70 72 61 67 6d 61 2d 32 30 2e 31  test pragma-20.1
94c0: 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 50   {.  catchsql {P
94d0: 52 41 47 4d 41 20 64 61 74 61 5f 73 74 6f 72 65  RAGMA data_store
94e0: 5f 64 69 72 65 63 74 6f 72 79 7d 0a 7d 20 7b 30  _directory}.} {0
94f0: 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61   {}}.do_test pra
9500: 67 6d 61 2d 32 30 2e 32 20 7b 0a 20 20 73 65 74  gma-20.2 {.  set
9510: 20 70 77 64 20 5b 73 74 72 69 6e 67 20 6d 61 70   pwd [string map
9520: 20 7b 27 20 27 27 7d 20 5b 66 69 6c 65 20 6e 61   {' ''} [file na
9530: 74 69 76 65 6e 61 6d 65 20 5b 67 65 74 5f 70 77  tivename [get_pw
9540: 64 5d 5d 5d 0a 20 20 63 61 74 63 68 73 71 6c 20  d]]].  catchsql 
9550: 22 50 52 41 47 4d 41 20 64 61 74 61 5f 73 74 6f  "PRAGMA data_sto
9560: 72 65 5f 64 69 72 65 63 74 6f 72 79 3d 27 24 70  re_directory='$p
9570: 77 64 27 3b 22 0a 7d 20 7b 30 20 7b 7d 7d 0a 64  wd';".} {0 {}}.d
9580: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 32 30  o_test pragma-20
9590: 2e 33 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20  .3 {.  catchsql 
95a0: 7b 50 52 41 47 4d 41 20 64 61 74 61 5f 73 74 6f  {PRAGMA data_sto
95b0: 72 65 5f 64 69 72 65 63 74 6f 72 79 7d 0a 7d 20  re_directory}.} 
95c0: 5b 6c 69 73 74 20 30 20 5b 6c 69 73 74 20 5b 66  [list 0 [list [f
95d0: 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b  ile nativename [
95e0: 67 65 74 5f 70 77 64 5d 5d 5d 5d 0a 64 6f 5f 74  get_pwd]]]].do_t
95f0: 65 73 74 20 70 72 61 67 6d 61 2d 32 30 2e 34 20  est pragma-20.4 
9600: 7b 0a 20 20 73 65 74 20 70 77 64 20 5b 73 74 72  {.  set pwd [str
9610: 69 6e 67 20 6d 61 70 20 7b 27 20 27 27 7d 20 5b  ing map {' ''} [
9620: 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20  file nativename 
9630: 5c 0a 20 20 20 20 5b 66 69 6c 65 20 6a 6f 69 6e  \.    [file join
9640: 20 5b 67 65 74 5f 70 77 64 5d 20 64 61 74 61 5f   [get_pwd] data_
9650: 64 69 72 5d 5d 5d 0a 20 20 63 61 74 63 68 73 71  dir]]].  catchsq
9660: 6c 20 22 50 52 41 47 4d 41 20 64 61 74 61 5f 73  l "PRAGMA data_s
9670: 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 3d 27  tore_directory='
9680: 24 70 77 64 27 3b 22 0a 7d 20 7b 30 20 7b 7d 7d  $pwd';".} {0 {}}
9690: 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d  .do_test pragma-
96a0: 32 30 2e 35 20 7b 0a 20 20 73 71 6c 69 74 65 33  20.5 {.  sqlite3
96b0: 20 64 62 32 20 74 65 73 74 32 2e 64 62 0a 20 20   db2 test2.db.  
96c0: 63 61 74 63 68 73 71 6c 20 22 50 52 41 47 4d 41  catchsql "PRAGMA
96d0: 20 64 61 74 61 62 61 73 65 5f 6c 69 73 74 3b 22   database_list;"
96e0: 20 64 62 32 0a 7d 20 5b 6c 69 73 74 20 30 20 5b   db2.} [list 0 [
96f0: 6c 69 73 74 20 30 20 6d 61 69 6e 20 5b 66 69 6c  list 0 main [fil
9700: 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5c 0a 20  e nativename \. 
9710: 20 20 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67     [file join [g
9720: 65 74 5f 70 77 64 5d 20 64 61 74 61 5f 64 69 72  et_pwd] data_dir
9730: 20 74 65 73 74 32 2e 64 62 5d 5d 5d 5d 0a 63 61   test2.db]]]].ca
9740: 74 63 68 20 7b 64 62 32 20 63 6c 6f 73 65 7d 0a  tch {db2 close}.
9750: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 32  do_test pragma-2
9760: 30 2e 36 20 7b 0a 20 20 73 71 6c 69 74 65 33 20  0.6 {.  sqlite3 
9770: 64 62 32 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b  db2 [file join [
9780: 67 65 74 5f 70 77 64 5d 20 74 65 73 74 32 2e 64  get_pwd] test2.d
9790: 62 5d 0a 20 20 63 61 74 63 68 73 71 6c 20 22 50  b].  catchsql "P
97a0: 52 41 47 4d 41 20 64 61 74 61 62 61 73 65 5f 6c  RAGMA database_l
97b0: 69 73 74 3b 22 20 64 62 32 0a 7d 20 5b 6c 69 73  ist;" db2.} [lis
97c0: 74 20 30 20 5b 6c 69 73 74 20 30 20 6d 61 69 6e  t 0 [list 0 main
97d0: 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d   [file nativenam
97e0: 65 20 5c 0a 20 20 20 20 5b 66 69 6c 65 20 6a 6f  e \.    [file jo
97f0: 69 6e 20 5b 67 65 74 5f 70 77 64 5d 20 74 65 73  in [get_pwd] tes
9800: 74 32 2e 64 62 5d 5d 5d 5d 0a 63 61 74 63 68 20  t2.db]]]].catch 
9810: 7b 64 62 32 20 63 6c 6f 73 65 7d 0a 64 6f 5f 74  {db2 close}.do_t
9820: 65 73 74 20 70 72 61 67 6d 61 2d 32 30 2e 37 20  est pragma-20.7 
9830: 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 22 50 52  {.  catchsql "PR
9840: 41 47 4d 41 20 64 61 74 61 5f 73 74 6f 72 65 5f  AGMA data_store_
9850: 64 69 72 65 63 74 6f 72 79 3d 27 27 3b 22 0a 7d  directory='';".}
9860: 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20   {0 {}}.do_test 
9870: 70 72 61 67 6d 61 2d 32 30 2e 38 20 7b 0a 20 20  pragma-20.8 {.  
9880: 63 61 74 63 68 73 71 6c 20 7b 50 52 41 47 4d 41  catchsql {PRAGMA
9890: 20 64 61 74 61 5f 73 74 6f 72 65 5f 64 69 72 65   data_store_dire
98a0: 63 74 6f 72 79 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a  ctory}.} {0 {}}.
98b0: 0a 66 6f 72 63 65 64 65 6c 65 74 65 20 64 61 74  .forcedelete dat
98c0: 61 5f 64 69 72 0a 7d 20 3b 23 20 65 6e 64 69 66  a_dir.} ;# endif
98d0: 20 77 69 6e 64 6f 77 73 0a 0a 64 61 74 61 62 61   windows..databa
98e0: 73 65 5f 6d 61 79 5f 62 65 5f 63 6f 72 72 75 70  se_may_be_corrup
98f0: 74 0a 0a 64 6f 5f 74 65 73 74 20 32 31 2e 31 20  t..do_test 21.1 
9900: 7b 0a 20 20 23 20 43 72 65 61 74 65 20 61 20 63  {.  # Create a c
9910: 6f 72 72 75 70 74 20 64 61 74 61 62 61 73 65 20  orrupt database 
9920: 69 6e 20 74 65 73 74 65 72 72 2e 64 62 2e 20 41  in testerr.db. A
9930: 6e 64 20 61 20 6e 6f 6e 2d 63 6f 72 72 75 70 74  nd a non-corrupt
9940: 20 61 74 20 74 65 73 74 2e 64 62 2e 0a 20 20 23   at test.db..  #
9950: 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 66 6f  .  db close.  fo
9960: 72 63 65 64 65 6c 65 74 65 20 74 65 73 74 2e 64  rcedelete test.d
9970: 62 0a 20 20 73 71 6c 69 74 65 33 20 64 62 20 74  b.  sqlite3 db t
9980: 65 73 74 2e 64 62 0a 20 20 65 78 65 63 73 71 6c  est.db.  execsql
9990: 20 7b 20 0a 20 20 20 20 50 52 41 47 4d 41 20 70   { .    PRAGMA p
99a0: 61 67 65 5f 73 69 7a 65 20 3d 20 31 30 32 34 3b  age_size = 1024;
99b0: 0a 20 20 20 20 50 52 41 47 4d 41 20 61 75 74 6f  .    PRAGMA auto
99c0: 5f 76 61 63 75 75 6d 20 3d 20 30 3b 0a 20 20 20  _vacuum = 0;.   
99d0: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31   CREATE TABLE t1
99e0: 28 61 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20  (a PRIMARY KEY, 
99f0: 62 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  b);.    INSERT I
9a00: 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 31 2c  NTO t1 VALUES(1,
9a10: 20 31 29 3b 0a 20 20 7d 0a 20 20 66 6f 72 20 7b   1);.  }.  for {
9a20: 73 65 74 20 69 20 30 7d 20 7b 24 69 20 3c 20 31  set i 0} {$i < 1
9a30: 30 7d 20 7b 69 6e 63 72 20 69 7d 20 7b 0a 20 20  0} {incr i} {.  
9a40: 20 20 65 78 65 63 73 71 6c 20 7b 20 49 4e 53 45    execsql { INSE
9a50: 52 54 20 49 4e 54 4f 20 74 31 20 53 45 4c 45 43  RT INTO t1 SELEC
9a60: 54 20 61 20 2b 20 28 31 20 3c 3c 20 24 69 29 2c  T a + (1 << $i),
9a70: 20 62 20 2b 20 28 31 20 3c 3c 20 24 69 29 20 46   b + (1 << $i) F
9a80: 52 4f 4d 20 74 31 20 7d 0a 20 20 7d 0a 20 20 64  ROM t1 }.  }.  d
9a90: 62 20 63 6c 6f 73 65 0a 20 20 66 6f 72 63 65 63  b close.  forcec
9aa0: 6f 70 79 20 74 65 73 74 2e 64 62 20 74 65 73 74  opy test.db test
9ab0: 65 72 72 2e 64 62 0a 20 20 68 65 78 69 6f 5f 77  err.db.  hexio_w
9ac0: 72 69 74 65 20 74 65 73 74 65 72 72 2e 64 62 20  rite testerr.db 
9ad0: 31 35 30 30 30 20 5b 73 74 72 69 6e 67 20 72 65  15000 [string re
9ae0: 70 65 61 74 20 35 35 20 31 30 30 5d 0a 7d 20 7b  peat 55 100].} {
9af0: 31 30 30 7d 0a 0a 73 65 74 20 6d 61 69 6e 65 72  100}..set mainer
9b00: 72 20 7b 2a 2a 2a 20 69 6e 20 64 61 74 61 62 61  r {*** in databa
9b10: 73 65 20 6d 61 69 6e 20 2a 2a 2a 0a 4d 75 6c 74  se main ***.Mult
9b20: 69 70 6c 65 20 75 73 65 73 20 66 6f 72 20 62 79  iple uses for by
9b30: 74 65 20 36 37 32 20 6f 66 20 70 61 67 65 20 31  te 672 of page 1
9b40: 35 7d 0a 73 65 74 20 61 75 78 65 72 72 20 7b 2a  5}.set auxerr {*
9b50: 2a 2a 20 69 6e 20 64 61 74 61 62 61 73 65 20 61  ** in database a
9b60: 75 78 20 2a 2a 2a 0a 4d 75 6c 74 69 70 6c 65 20  ux ***.Multiple 
9b70: 75 73 65 73 20 66 6f 72 20 62 79 74 65 20 36 37  uses for byte 67
9b80: 32 20 6f 66 20 70 61 67 65 20 31 35 7d 0a 0a 73  2 of page 15}..s
9b90: 65 74 20 6d 61 69 6e 65 72 72 20 7b 2f 7b 5c 2a  et mainerr {/{\*
9ba0: 5c 2a 5c 2a 20 69 6e 20 64 61 74 61 62 61 73 65  \*\* in database
9bb0: 20 6d 61 69 6e 20 5c 2a 5c 2a 5c 2a 0a 4d 75 6c   main \*\*\*.Mul
9bc0: 74 69 70 6c 65 20 75 73 65 73 20 66 6f 72 20 62  tiple uses for b
9bd0: 79 74 65 20 36 37 32 20 6f 66 20 70 61 67 65 20  yte 672 of page 
9be0: 31 35 7d 2e 2a 2f 7d 0a 73 65 74 20 61 75 78 65  15}.*/}.set auxe
9bf0: 72 72 20 7b 2f 7b 5c 2a 5c 2a 5c 2a 20 69 6e 20  rr {/{\*\*\* in 
9c00: 64 61 74 61 62 61 73 65 20 61 75 78 20 5c 2a 5c  database aux \*\
9c10: 2a 5c 2a 0a 4d 75 6c 74 69 70 6c 65 20 75 73 65  *\*.Multiple use
9c20: 73 20 66 6f 72 20 62 79 74 65 20 36 37 32 20 6f  s for byte 672 o
9c30: 66 20 70 61 67 65 20 31 35 7d 2e 2a 2f 7d 0a 0a  f page 15}.*/}..
9c40: 64 6f 5f 74 65 73 74 20 32 32 2e 32 20 7b 0a 20  do_test 22.2 {. 
9c50: 20 63 61 74 63 68 20 7b 20 64 62 20 63 6c 6f 73   catch { db clos
9c60: 65 20 7d 0a 20 20 73 71 6c 69 74 65 33 20 64 62  e }.  sqlite3 db
9c70: 20 74 65 73 74 65 72 72 2e 64 62 0a 20 20 65 78   testerr.db.  ex
9c80: 65 63 73 71 6c 20 7b 20 50 52 41 47 4d 41 20 69  ecsql { PRAGMA i
9c90: 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 20 7d  ntegrity_check }
9ca0: 0a 7d 20 24 6d 61 69 6e 65 72 72 0a 0a 64 6f 5f  .} $mainerr..do_
9cb0: 74 65 73 74 20 32 32 2e 33 2e 31 20 7b 0a 20 20  test 22.3.1 {.  
9cc0: 63 61 74 63 68 20 7b 20 64 62 20 63 6c 6f 73 65  catch { db close
9cd0: 20 7d 0a 20 20 73 71 6c 69 74 65 33 20 64 62 20   }.  sqlite3 db 
9ce0: 74 65 73 74 2e 64 62 0a 20 20 65 78 65 63 73 71  test.db.  execsq
9cf0: 6c 20 7b 20 0a 20 20 20 20 41 54 54 41 43 48 20  l { .    ATTACH 
9d00: 27 74 65 73 74 65 72 72 2e 64 62 27 20 41 53 20  'testerr.db' AS 
9d10: 27 61 75 78 27 3b 0a 20 20 20 20 50 52 41 47 4d  'aux';.    PRAGM
9d20: 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63  A integrity_chec
9d30: 6b 3b 0a 20 20 7d 0a 7d 20 24 61 75 78 65 72 72  k;.  }.} $auxerr
9d40: 0a 64 6f 5f 74 65 73 74 20 32 32 2e 33 2e 32 20  .do_test 22.3.2 
9d50: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 50 52  {.  execsql { PR
9d60: 41 47 4d 41 20 6d 61 69 6e 2e 69 6e 74 65 67 72  AGMA main.integr
9d70: 69 74 79 5f 63 68 65 63 6b 3b 20 7d 0a 7d 20 7b  ity_check; }.} {
9d80: 6f 6b 7d 0a 64 6f 5f 74 65 73 74 20 32 32 2e 33  ok}.do_test 22.3
9d90: 2e 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .3 {.  execsql {
9da0: 20 50 52 41 47 4d 41 20 61 75 78 2e 69 6e 74 65   PRAGMA aux.inte
9db0: 67 72 69 74 79 5f 63 68 65 63 6b 3b 20 7d 0a 7d  grity_check; }.}
9dc0: 20 24 61 75 78 65 72 72 0a 0a 64 6f 5f 74 65 73   $auxerr..do_tes
9dd0: 74 20 32 32 2e 34 2e 31 20 7b 0a 20 20 63 61 74  t 22.4.1 {.  cat
9de0: 63 68 20 7b 20 64 62 20 63 6c 6f 73 65 20 7d 0a  ch { db close }.
9df0: 20 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73    sqlite3 db tes
9e00: 74 65 72 72 2e 64 62 0a 20 20 65 78 65 63 73 71  terr.db.  execsq
9e10: 6c 20 7b 20 0a 20 20 20 20 41 54 54 41 43 48 20  l { .    ATTACH 
9e20: 27 74 65 73 74 2e 64 62 27 20 41 53 20 27 61 75  'test.db' AS 'au
9e30: 78 27 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 69  x';.    PRAGMA i
9e40: 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 3b 0a  ntegrity_check;.
9e50: 20 20 7d 0a 7d 20 24 6d 61 69 6e 65 72 72 0a 64    }.} $mainerr.d
9e60: 6f 5f 74 65 73 74 20 32 32 2e 34 2e 32 20 7b 0a  o_test 22.4.2 {.
9e70: 20 20 65 78 65 63 73 71 6c 20 7b 20 50 52 41 47    execsql { PRAG
9e80: 4d 41 20 6d 61 69 6e 2e 69 6e 74 65 67 72 69 74  MA main.integrit
9e90: 79 5f 63 68 65 63 6b 3b 20 7d 0a 7d 20 24 6d 61  y_check; }.} $ma
9ea0: 69 6e 65 72 72 0a 64 6f 5f 74 65 73 74 20 32 32  inerr.do_test 22
9eb0: 2e 34 2e 33 20 7b 0a 20 20 65 78 65 63 73 71 6c  .4.3 {.  execsql
9ec0: 20 7b 20 50 52 41 47 4d 41 20 61 75 78 2e 69 6e   { PRAGMA aux.in
9ed0: 74 65 67 72 69 74 79 5f 63 68 65 63 6b 3b 20 7d  tegrity_check; }
9ee0: 0a 7d 20 7b 6f 6b 7d 0a 0a 64 62 20 63 6c 6f 73  .} {ok}..db clos
9ef0: 65 0a 66 6f 72 63 65 64 65 6c 65 74 65 20 74 65  e.forcedelete te
9f00: 73 74 2e 64 62 20 74 65 73 74 2e 64 62 2d 77 61  st.db test.db-wa
9f10: 6c 20 74 65 73 74 2e 64 62 2d 6a 6f 75 72 6e 61  l test.db-journa
9f20: 6c 0a 73 71 6c 69 74 65 33 20 64 62 20 74 65 73  l.sqlite3 db tes
9f30: 74 2e 64 62 0a 73 71 6c 69 74 65 33 20 64 62 32  t.db.sqlite3 db2
9f40: 20 74 65 73 74 2e 64 62 0a 64 6f 5f 74 65 73 74   test.db.do_test
9f50: 20 32 33 2e 31 20 7b 0a 20 20 64 62 20 65 76 61   23.1 {.  db eva
9f60: 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54  l {.    CREATE T
9f70: 41 42 4c 45 20 74 31 28 61 20 49 4e 54 45 47 45  ABLE t1(a INTEGE
9f80: 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 62 2c  R PRIMARY KEY,b,
9f90: 63 2c 64 29 3b 0a 20 20 20 20 43 52 45 41 54 45  c,d);.    CREATE
9fa0: 20 49 4e 44 45 58 20 69 31 20 4f 4e 20 74 31 28   INDEX i1 ON t1(
9fb0: 62 2c 63 29 3b 0a 20 20 20 20 43 52 45 41 54 45  b,c);.    CREATE
9fc0: 20 49 4e 44 45 58 20 69 32 20 4f 4e 20 74 31 28   INDEX i2 ON t1(
9fd0: 63 2c 64 29 3b 0a 20 20 20 20 43 52 45 41 54 45  c,d);.    CREATE
9fe0: 20 54 41 42 4c 45 20 74 32 28 78 20 49 4e 54 45   TABLE t2(x INTE
9ff0: 47 45 52 20 52 45 46 45 52 45 4e 43 45 53 20 74  GER REFERENCES t
a000: 31 29 3b 0a 20 20 7d 0a 20 20 64 62 32 20 65 76  1);.  }.  db2 ev
a010: 61 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20  al {SELECT name 
a020: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74  FROM sqlite_mast
a030: 65 72 7d 0a 7d 20 7b 74 31 20 69 31 20 69 32 20  er}.} {t1 i1 i2 
a040: 74 32 7d 0a 64 6f 5f 74 65 73 74 20 32 33 2e 32  t2}.do_test 23.2
a050: 61 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a  a {.  db eval {.
a060: 20 20 20 20 44 52 4f 50 20 49 4e 44 45 58 20 69      DROP INDEX i
a070: 32 3b 0a 20 20 20 20 43 52 45 41 54 45 20 49 4e  2;.    CREATE IN
a080: 44 45 58 20 69 32 20 4f 4e 20 74 31 28 63 2c 64  DEX i2 ON t1(c,d
a090: 2c 62 29 3b 0a 20 20 7d 0a 20 20 63 61 70 74 75  ,b);.  }.  captu
a0a0: 72 65 5f 70 72 61 67 6d 61 20 64 62 32 20 6f 75  re_pragma db2 ou
a0b0: 74 20 7b 50 52 41 47 4d 41 20 69 6e 64 65 78 5f  t {PRAGMA index_
a0c0: 69 6e 66 6f 28 69 32 29 7d 0a 20 20 64 62 32 20  info(i2)}.  db2 
a0d0: 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 63 69 64  eval {SELECT cid
a0e0: 2c 20 6e 61 6d 65 2c 20 22 64 65 73 63 22 2c 20  , name, "desc", 
a0f0: 63 6f 6c 6c 2c 20 22 6b 65 79 22 2c 20 27 7c 27  coll, "key", '|'
a100: 20 46 52 4f 4d 20 6f 75 74 20 4f 52 44 45 52 20   FROM out ORDER 
a110: 42 59 20 73 65 71 6e 6f 7d 0a 7d 20 7b 32 20 63  BY seqno}.} {2 c
a120: 20 30 20 42 49 4e 41 52 59 20 31 20 7c 20 33 20   0 BINARY 1 | 3 
a130: 64 20 30 20 42 49 4e 41 52 59 20 31 20 7c 20 31  d 0 BINARY 1 | 1
a140: 20 62 20 30 20 42 49 4e 41 52 59 20 31 20 7c 7d   b 0 BINARY 1 |}
a150: 0a 64 6f 5f 74 65 73 74 20 32 33 2e 32 62 20 7b  .do_test 23.2b {
a160: 0a 62 72 65 61 6b 70 6f 69 6e 74 3b 0a 20 20 63  .breakpoint;.  c
a170: 61 70 74 75 72 65 5f 70 72 61 67 6d 61 20 64 62  apture_pragma db
a180: 32 20 6f 75 74 20 7b 50 52 41 47 4d 41 20 69 6e  2 out {PRAGMA in
a190: 64 65 78 5f 78 69 6e 66 6f 28 69 32 29 7d 0a 20  dex_xinfo(i2)}. 
a1a0: 20 64 62 32 20 65 76 61 6c 20 7b 53 45 4c 45 43   db2 eval {SELEC
a1b0: 54 20 63 69 64 2c 20 6e 61 6d 65 2c 20 22 64 65  T cid, name, "de
a1c0: 73 63 22 2c 20 63 6f 6c 6c 2c 20 22 6b 65 79 22  sc", coll, "key"
a1d0: 2c 20 27 7c 27 20 46 52 4f 4d 20 6f 75 74 20 4f  , '|' FROM out O
a1e0: 52 44 45 52 20 42 59 20 73 65 71 6e 6f 7d 0a 7d  RDER BY seqno}.}
a1f0: 20 7b 32 20 63 20 30 20 42 49 4e 41 52 59 20 31   {2 c 0 BINARY 1
a200: 20 7c 20 33 20 64 20 30 20 42 49 4e 41 52 59 20   | 3 d 0 BINARY 
a210: 31 20 7c 20 31 20 62 20 30 20 42 49 4e 41 52 59  1 | 1 b 0 BINARY
a220: 20 31 20 7c 20 2d 31 20 7b 7d 20 30 20 42 49 4e   1 | -1 {} 0 BIN
a230: 41 52 59 20 30 20 7c 7d 0a 64 6f 5f 74 65 73 74  ARY 0 |}.do_test
a240: 20 32 33 2e 33 20 7b 0a 20 20 64 62 20 65 76 61   23.3 {.  db eva
a250: 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 49  l {.    CREATE I
a260: 4e 44 45 58 20 69 33 20 4f 4e 20 74 31 28 64 2c  NDEX i3 ON t1(d,
a270: 62 2c 63 29 3b 0a 20 20 7d 0a 20 20 63 61 70 74  b,c);.  }.  capt
a280: 75 72 65 5f 70 72 61 67 6d 61 20 64 62 32 20 6f  ure_pragma db2 o
a290: 75 74 20 7b 50 52 41 47 4d 41 20 69 6e 64 65 78  ut {PRAGMA index
a2a0: 5f 6c 69 73 74 28 74 31 29 7d 0a 20 20 64 62 32  _list(t1)}.  db2
a2b0: 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 6e 61   eval {SELECT na
a2c0: 6d 65 2c 20 22 75 6e 69 71 75 65 22 2c 20 6f 72  me, "unique", or
a2d0: 69 67 69 6e 20 46 52 4f 4d 20 6f 75 74 20 4f 52  igin FROM out OR
a2e0: 44 45 52 20 42 59 20 73 65 71 7d 0a 7d 20 7b 69  DER BY seq}.} {i
a2f0: 33 20 30 20 63 20 69 32 20 30 20 63 20 69 31 20  3 0 c i2 0 c i1 
a300: 30 20 63 7d 0a 64 6f 5f 74 65 73 74 20 32 33 2e  0 c}.do_test 23.
a310: 34 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a  4 {.  db eval {.
a320: 20 20 20 20 41 4c 54 45 52 20 54 41 42 4c 45 20      ALTER TABLE 
a330: 74 31 20 41 44 44 20 43 4f 4c 55 4d 4e 20 65 3b  t1 ADD COLUMN e;
a340: 0a 20 20 7d 0a 20 20 64 62 32 20 65 76 61 6c 20  .  }.  db2 eval 
a350: 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 74 61 62  {.    PRAGMA tab
a360: 6c 65 5f 69 6e 66 6f 28 74 31 29 3b 0a 20 20 7d  le_info(t1);.  }
a370: 0a 7d 20 7b 2f 34 20 65 20 7b 7d 20 30 20 7b 7d  .} {/4 e {} 0 {}
a380: 20 30 2f 7d 0a 64 6f 5f 74 65 73 74 20 32 33 2e   0/}.do_test 23.
a390: 35 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a  5 {.  db eval {.
a3a0: 20 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20 74      DROP TABLE t
a3b0: 32 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41  2;.    CREATE TA
a3c0: 42 4c 45 20 74 32 28 78 2c 20 79 20 49 4e 54 45  BLE t2(x, y INTE
a3d0: 47 45 52 20 52 45 46 45 52 45 4e 43 45 53 20 74  GER REFERENCES t
a3e0: 31 29 3b 0a 20 20 7d 0a 20 20 64 62 32 20 65 76  1);.  }.  db2 ev
a3f0: 61 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20  al {.    PRAGMA 
a400: 66 6f 72 65 69 67 6e 5f 6b 65 79 5f 6c 69 73 74  foreign_key_list
a410: 28 74 32 29 3b 0a 20 20 7d 0a 7d 20 7b 30 20 30  (t2);.  }.} {0 0
a420: 20 74 31 20 79 20 7b 7d 20 7b 4e 4f 20 41 43 54   t1 y {} {NO ACT
a430: 49 4f 4e 7d 20 7b 4e 4f 20 41 43 54 49 4f 4e 7d  ION} {NO ACTION}
a440: 20 4e 4f 4e 45 7d 0a 0a 64 61 74 61 62 61 73 65   NONE}..database
a450: 5f 6e 65 76 65 72 5f 63 6f 72 72 75 70 74 0a 66  _never_corrupt.f
a460: 69 6e 69 73 68 5f 74 65 73 74 0a                 inish_test.