/ Hex Artifact Content
Login
SQLite training in Houston TX on 2019-11-05 (details)
Part of the 2019 Tcl Conference

Artifact effcf2f0dea35223cbaa6bf40c47d0796ba39e40:


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 33 35 20 32 30 30 35 2f 30 33 2f 32 39 20 30  .35 2005/03/29 0
0200: 33 3a 31 31 3a 30 30 20 64 61 6e 69 65 6c 6b 31  3:11:00 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 0a 23 20 54 65 73 74 20  ter.tcl..# Test 
0260: 6f 72 67 61 6e 69 7a 61 74 69 6f 6e 3a 0a 23 0a  organization:.#.
0270: 23 20 70 72 61 67 6d 61 2d 31 2e 2a 3a 20 54 65  # pragma-1.*: Te
0280: 73 74 20 63 61 63 68 65 5f 73 69 7a 65 2c 20 64  st cache_size, d
0290: 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a  efault_cache_siz
02a0: 65 20 61 6e 64 20 73 79 6e 63 68 72 6f 6e 6f 75  e and synchronou
02b0: 73 20 6f 6e 20 6d 61 69 6e 20 64 62 2e 0a 23 20  s on main db..# 
02c0: 70 72 61 67 6d 61 2d 32 2e 2a 3a 20 54 65 73 74  pragma-2.*: Test
02d0: 20 73 79 6e 63 68 72 6f 6e 6f 75 73 20 6f 6e 20   synchronous on 
02e0: 61 74 74 61 63 68 65 64 20 64 62 2e 0a 23 20 70  attached db..# p
02f0: 72 61 67 6d 61 2d 33 2e 2a 3a 20 54 65 73 74 20  ragma-3.*: Test 
0300: 64 65 74 65 63 74 69 6f 6e 20 6f 66 20 74 61 62  detection of tab
0310: 6c 65 2f 69 6e 64 65 78 20 69 6e 63 6f 6e 73 69  le/index inconsi
0320: 73 74 65 6e 63 79 20 62 79 20 69 6e 74 65 67 72  stency by integr
0330: 69 74 79 5f 63 68 65 63 6b 2e 0a 23 20 70 72 61  ity_check..# pra
0340: 67 6d 61 2d 34 2e 2a 3a 20 54 65 73 74 20 63 61  gma-4.*: Test ca
0350: 63 68 65 5f 73 69 7a 65 20 61 6e 64 20 64 65 66  che_size and def
0360: 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65 20  ault_cache_size 
0370: 6f 6e 20 61 74 74 61 63 68 65 64 20 64 62 2e 0a  on attached db..
0380: 23 20 70 72 61 67 6d 61 2d 35 2e 2a 3a 20 54 65  # pragma-5.*: Te
0390: 73 74 20 74 68 61 74 20 70 72 61 67 6d 61 20 73  st that pragma s
03a0: 79 6e 63 68 72 6f 6e 6f 75 73 20 6d 61 79 20 6e  ynchronous may n
03b0: 6f 74 20 62 65 20 75 73 65 64 20 69 6e 73 69 64  ot be used insid
03c0: 65 20 6f 66 20 61 0a 23 20 20 20 20 20 20 20 20  e of a.#        
03d0: 20 20 20 20 20 74 72 61 6e 73 61 63 74 69 6f 6e       transaction
03e0: 2e 0a 23 20 70 72 61 67 6d 61 2d 36 2e 2a 3a 20  ..# pragma-6.*: 
03f0: 54 65 73 74 20 73 63 68 65 6d 61 2d 71 75 65 72  Test schema-quer
0400: 79 20 70 72 61 67 6d 61 73 2e 0a 23 20 70 72 61  y pragmas..# pra
0410: 67 6d 61 2d 37 2e 2a 3a 20 4d 69 73 63 65 6c 6c  gma-7.*: Miscell
0420: 61 6e 65 6f 75 73 20 74 65 73 74 73 2e 0a 23 20  aneous tests..# 
0430: 70 72 61 67 6d 61 2d 38 2e 2a 3a 20 54 65 73 74  pragma-8.*: Test
0440: 20 75 73 65 72 5f 76 65 72 73 69 6f 6e 20 61 6e   user_version an
0450: 64 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e  d schema_version
0460: 20 70 72 61 67 6d 61 73 2e 0a 23 20 70 72 61 67   pragmas..# prag
0470: 6d 61 2d 39 2e 2a 3a 20 54 65 73 74 20 74 65 6d  ma-9.*: Test tem
0480: 70 5f 73 74 6f 72 65 20 61 6e 64 20 74 65 6d 70  p_store and temp
0490: 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79  _store_directory
04a0: 2e 0a 23 20 70 72 61 67 6d 61 2d 31 30 2e 2a 3a  ..# pragma-10.*:
04b0: 20 54 65 73 74 20 74 68 65 20 63 6f 75 6e 74 5f   Test the count_
04c0: 63 68 61 6e 67 65 73 20 70 72 61 67 6d 61 20 69  changes pragma i
04d0: 6e 20 74 68 65 20 70 72 65 73 65 6e 63 65 20 6f  n the presence o
04e0: 66 20 74 72 69 67 67 65 72 73 2e 0a 23 20 70 72  f triggers..# pr
04f0: 61 67 6d 61 2d 31 31 2e 2a 3a 20 54 65 73 74 20  agma-11.*: Test 
0500: 74 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 5f 6c 69  the collation_li
0510: 73 74 20 70 72 61 67 6d 61 2e 0a 23 0a 0a 23 20  st pragma..#..# 
0520: 44 65 6c 65 74 65 20 74 68 65 20 70 72 65 65 78  Delete the preex
0530: 69 73 74 69 6e 67 20 64 61 74 61 62 61 73 65 20  isting database 
0540: 74 6f 20 61 76 6f 69 64 20 74 68 65 20 73 70 65  to avoid the spe
0550: 63 69 61 6c 20 73 65 74 75 70 0a 23 20 74 68 61  cial setup.# tha
0560: 74 20 74 68 65 20 22 61 6c 6c 2e 74 65 73 74 22  t the "all.test"
0570: 20 73 63 72 69 70 74 20 64 6f 65 73 2e 0a 23 0a   script does..#.
0580: 64 62 20 63 6c 6f 73 65 0a 66 69 6c 65 20 64 65  db close.file de
0590: 6c 65 74 65 20 74 65 73 74 2e 64 62 0a 73 65 74  lete test.db.set
05a0: 20 44 42 20 5b 73 71 6c 69 74 65 33 20 64 62 20   DB [sqlite3 db 
05b0: 74 65 73 74 2e 64 62 5d 0a 0a 69 66 63 61 70 61  test.db]..ifcapa
05c0: 62 6c 65 20 70 61 67 65 72 5f 70 72 61 67 6d 61  ble pager_pragma
05d0: 73 20 7b 0a 64 6f 5f 74 65 73 74 20 70 72 61 67  s {.do_test prag
05e0: 6d 61 2d 31 2e 31 20 7b 0a 20 20 65 78 65 63 73  ma-1.1 {.  execs
05f0: 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20  ql {.    PRAGMA 
0600: 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20  cache_size;.    
0610: 50 52 41 47 4d 41 20 64 65 66 61 75 6c 74 5f 63  PRAGMA default_c
0620: 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 50  ache_size;.    P
0630: 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75  RAGMA synchronou
0640: 73 3b 0a 20 20 7d 0a 7d 20 7b 32 30 30 30 20 32  s;.  }.} {2000 2
0650: 30 30 30 20 32 7d 0a 64 6f 5f 74 65 73 74 20 70  000 2}.do_test p
0660: 72 61 67 6d 61 2d 31 2e 32 20 7b 0a 20 20 65 78  ragma-1.2 {.  ex
0670: 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47  ecsql {.    PRAG
0680: 4d 41 20 63 61 63 68 65 5f 73 69 7a 65 3d 31 32  MA cache_size=12
0690: 33 34 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 63  34;.    PRAGMA c
06a0: 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 50  ache_size;.    P
06b0: 52 41 47 4d 41 20 64 65 66 61 75 6c 74 5f 63 61  RAGMA default_ca
06c0: 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 50 52  che_size;.    PR
06d0: 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73  AGMA synchronous
06e0: 3b 0a 20 20 7d 0a 7d 20 7b 31 32 33 34 20 32 30  ;.  }.} {1234 20
06f0: 30 30 20 32 7d 0a 64 6f 5f 74 65 73 74 20 70 72  00 2}.do_test pr
0700: 61 67 6d 61 2d 31 2e 33 20 7b 0a 20 20 64 62 20  agma-1.3 {.  db 
0710: 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74 65 33 20  close.  sqlite3 
0720: 64 62 20 74 65 73 74 2e 64 62 0a 20 20 65 78 65  db test.db.  exe
0730: 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d  csql {.    PRAGM
0740: 41 20 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20  A cache_size;.  
0750: 20 20 50 52 41 47 4d 41 20 64 65 66 61 75 6c 74    PRAGMA default
0760: 5f 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20  _cache_size;.   
0770: 20 50 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e   PRAGMA synchron
0780: 6f 75 73 3b 0a 20 20 7d 0a 7d 20 7b 32 30 30 30  ous;.  }.} {2000
0790: 20 32 30 30 30 20 32 7d 0a 64 6f 5f 74 65 73 74   2000 2}.do_test
07a0: 20 70 72 61 67 6d 61 2d 31 2e 34 20 7b 0a 20 20   pragma-1.4 {.  
07b0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52  execsql {.    PR
07c0: 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73  AGMA synchronous
07d0: 3d 4f 46 46 3b 0a 20 20 20 20 50 52 41 47 4d 41  =OFF;.    PRAGMA
07e0: 20 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20   cache_size;.   
07f0: 20 50 52 41 47 4d 41 20 64 65 66 61 75 6c 74 5f   PRAGMA default_
0800: 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20  cache_size;.    
0810: 50 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f  PRAGMA synchrono
0820: 75 73 3b 0a 20 20 7d 0a 7d 20 7b 32 30 30 30 20  us;.  }.} {2000 
0830: 32 30 30 30 20 30 7d 0a 64 6f 5f 74 65 73 74 20  2000 0}.do_test 
0840: 70 72 61 67 6d 61 2d 31 2e 35 20 7b 0a 20 20 65  pragma-1.5 {.  e
0850: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41  xecsql {.    PRA
0860: 47 4d 41 20 63 61 63 68 65 5f 73 69 7a 65 3d 34  GMA cache_size=4
0870: 33 32 31 3b 0a 20 20 20 20 50 52 41 47 4d 41 20  321;.    PRAGMA 
0880: 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20  cache_size;.    
0890: 50 52 41 47 4d 41 20 64 65 66 61 75 6c 74 5f 63  PRAGMA default_c
08a0: 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 50  ache_size;.    P
08b0: 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75  RAGMA synchronou
08c0: 73 3b 0a 20 20 7d 0a 7d 20 7b 34 33 32 31 20 32  s;.  }.} {4321 2
08d0: 30 30 30 20 30 7d 0a 64 6f 5f 74 65 73 74 20 70  000 0}.do_test p
08e0: 72 61 67 6d 61 2d 31 2e 36 20 7b 0a 20 20 65 78  ragma-1.6 {.  ex
08f0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47  ecsql {.    PRAG
0900: 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3d 4f  MA synchronous=O
0910: 4e 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 63 61  N;.    PRAGMA ca
0920: 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 50 52  che_size;.    PR
0930: 41 47 4d 41 20 64 65 66 61 75 6c 74 5f 63 61 63  AGMA default_cac
0940: 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 50 52 41  he_size;.    PRA
0950: 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3b  GMA synchronous;
0960: 0a 20 20 7d 0a 7d 20 7b 34 33 32 31 20 32 30 30  .  }.} {4321 200
0970: 30 20 31 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61  0 1}.do_test pra
0980: 67 6d 61 2d 31 2e 37 20 7b 0a 20 20 64 62 20 63  gma-1.7 {.  db c
0990: 6c 6f 73 65 0a 20 20 73 71 6c 69 74 65 33 20 64  lose.  sqlite3 d
09a0: 62 20 74 65 73 74 2e 64 62 0a 20 20 65 78 65 63  b test.db.  exec
09b0: 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41  sql {.    PRAGMA
09c0: 20 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20   cache_size;.   
09d0: 20 50 52 41 47 4d 41 20 64 65 66 61 75 6c 74 5f   PRAGMA default_
09e0: 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20  cache_size;.    
09f0: 50 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f  PRAGMA synchrono
0a00: 75 73 3b 0a 20 20 7d 0a 7d 20 7b 32 30 30 30 20  us;.  }.} {2000 
0a10: 32 30 30 30 20 32 7d 0a 64 6f 5f 74 65 73 74 20  2000 2}.do_test 
0a20: 70 72 61 67 6d 61 2d 31 2e 38 20 7b 0a 20 20 65  pragma-1.8 {.  e
0a30: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41  xecsql {.    PRA
0a40: 47 4d 41 20 64 65 66 61 75 6c 74 5f 63 61 63 68  GMA default_cach
0a50: 65 5f 73 69 7a 65 3d 31 32 33 3b 0a 20 20 20 20  e_size=123;.    
0a60: 50 52 41 47 4d 41 20 63 61 63 68 65 5f 73 69 7a  PRAGMA cache_siz
0a70: 65 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 64 65  e;.    PRAGMA de
0a80: 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65  fault_cache_size
0a90: 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 73 79 6e  ;.    PRAGMA syn
0aa0: 63 68 72 6f 6e 6f 75 73 3b 0a 20 20 7d 0a 7d 20  chronous;.  }.} 
0ab0: 7b 31 32 33 20 31 32 33 20 32 7d 0a 64 6f 5f 74  {123 123 2}.do_t
0ac0: 65 73 74 20 70 72 61 67 6d 61 2d 31 2e 39 2e 31  est pragma-1.9.1
0ad0: 20 7b 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20 20   {.  db close.  
0ae0: 73 65 74 20 3a 3a 44 42 20 5b 73 71 6c 69 74 65  set ::DB [sqlite
0af0: 33 20 64 62 20 74 65 73 74 2e 64 62 5d 0a 20 20  3 db test.db].  
0b00: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52  execsql {.    PR
0b10: 41 47 4d 41 20 63 61 63 68 65 5f 73 69 7a 65 3b  AGMA cache_size;
0b20: 0a 20 20 20 20 50 52 41 47 4d 41 20 64 65 66 61  .    PRAGMA defa
0b30: 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65 3b 0a  ult_cache_size;.
0b40: 20 20 20 20 50 52 41 47 4d 41 20 73 79 6e 63 68      PRAGMA synch
0b50: 72 6f 6e 6f 75 73 3b 0a 20 20 7d 0a 7d 20 7b 31  ronous;.  }.} {1
0b60: 32 33 20 31 32 33 20 32 7d 0a 69 66 63 61 70 61  23 123 2}.ifcapa
0b70: 62 6c 65 20 76 61 63 75 75 6d 20 7b 0a 20 20 64  ble vacuum {.  d
0b80: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 2e  o_test pragma-1.
0b90: 39 2e 32 20 7b 0a 20 20 20 20 65 78 65 63 73 71  9.2 {.    execsq
0ba0: 6c 20 7b 0a 20 20 20 20 20 20 56 41 43 55 55 4d  l {.      VACUUM
0bb0: 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 63  ;.      PRAGMA c
0bc0: 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 20  ache_size;.     
0bd0: 20 50 52 41 47 4d 41 20 64 65 66 61 75 6c 74 5f   PRAGMA default_
0be0: 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20  cache_size;.    
0bf0: 20 20 50 52 41 47 4d 41 20 73 79 6e 63 68 72 6f    PRAGMA synchro
0c00: 6e 6f 75 73 3b 0a 20 20 20 20 7d 0a 20 20 7d 20  nous;.    }.  } 
0c10: 7b 31 32 33 20 31 32 33 20 32 7d 0a 7d 0a 64 6f  {123 123 2}.}.do
0c20: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 2e 31  _test pragma-1.1
0c30: 30 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  0 {.  execsql {.
0c40: 20 20 20 20 50 52 41 47 4d 41 20 73 79 6e 63 68      PRAGMA synch
0c50: 72 6f 6e 6f 75 73 3d 4e 4f 52 4d 41 4c 3b 0a 20  ronous=NORMAL;. 
0c60: 20 20 20 50 52 41 47 4d 41 20 63 61 63 68 65 5f     PRAGMA cache_
0c70: 73 69 7a 65 3b 0a 20 20 20 20 50 52 41 47 4d 41  size;.    PRAGMA
0c80: 20 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73   default_cache_s
0c90: 69 7a 65 3b 0a 20 20 20 20 50 52 41 47 4d 41 20  ize;.    PRAGMA 
0ca0: 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20 20 7d  synchronous;.  }
0cb0: 0a 7d 20 7b 31 32 33 20 31 32 33 20 31 7d 0a 64  .} {123 123 1}.d
0cc0: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 2e  o_test pragma-1.
0cd0: 31 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  11 {.  execsql {
0ce0: 0a 20 20 20 20 50 52 41 47 4d 41 20 73 79 6e 63  .    PRAGMA sync
0cf0: 68 72 6f 6e 6f 75 73 3d 46 55 4c 4c 3b 0a 20 20  hronous=FULL;.  
0d00: 20 20 50 52 41 47 4d 41 20 63 61 63 68 65 5f 73    PRAGMA cache_s
0d10: 69 7a 65 3b 0a 20 20 20 20 50 52 41 47 4d 41 20  ize;.    PRAGMA 
0d20: 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69  default_cache_si
0d30: 7a 65 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 73  ze;.    PRAGMA s
0d40: 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20 20 7d 0a  ynchronous;.  }.
0d50: 7d 20 7b 31 32 33 20 31 32 33 20 32 7d 0a 64 6f  } {123 123 2}.do
0d60: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 2e 31  _test pragma-1.1
0d70: 32 20 7b 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20  2 {.  db close. 
0d80: 20 73 65 74 20 3a 3a 44 42 20 5b 73 71 6c 69 74   set ::DB [sqlit
0d90: 65 33 20 64 62 20 74 65 73 74 2e 64 62 5d 0a 20  e3 db test.db]. 
0da0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50   execsql {.    P
0db0: 52 41 47 4d 41 20 63 61 63 68 65 5f 73 69 7a 65  RAGMA cache_size
0dc0: 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 64 65 66  ;.    PRAGMA def
0dd0: 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65 3b  ault_cache_size;
0de0: 0a 20 20 20 20 50 52 41 47 4d 41 20 73 79 6e 63  .    PRAGMA sync
0df0: 68 72 6f 6e 6f 75 73 3b 0a 20 20 7d 0a 7d 20 7b  hronous;.  }.} {
0e00: 31 32 33 20 31 32 33 20 32 7d 0a 0a 23 20 4d 61  123 123 2}..# Ma
0e10: 6b 65 20 73 75 72 65 20 74 68 65 20 70 72 61 67  ke sure the prag
0e20: 6d 61 20 68 61 6e 64 6c 65 72 20 75 6e 64 65 72  ma handler under
0e30: 73 74 61 6e 64 73 20 6e 75 6d 65 72 69 63 20 76  stands numeric v
0e40: 61 6c 75 65 73 20 69 6e 20 61 64 64 69 74 69 6f  alues in additio
0e50: 6e 0a 23 20 74 6f 20 6b 65 79 77 6f 72 64 73 20  n.# to keywords 
0e60: 6c 69 6b 65 20 22 6f 66 66 22 20 61 6e 64 20 22  like "off" and "
0e70: 66 75 6c 6c 22 2e 0a 23 0a 64 6f 5f 74 65 73 74  full"..#.do_test
0e80: 20 70 72 61 67 6d 61 2d 31 2e 31 33 20 7b 0a 20   pragma-1.13 {. 
0e90: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50   execsql {.    P
0ea0: 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75  RAGMA synchronou
0eb0: 73 3d 30 3b 0a 20 20 20 20 50 52 41 47 4d 41 20  s=0;.    PRAGMA 
0ec0: 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20 20 7d  synchronous;.  }
0ed0: 0a 7d 20 7b 30 7d 0a 64 6f 5f 74 65 73 74 20 70  .} {0}.do_test p
0ee0: 72 61 67 6d 61 2d 31 2e 31 34 20 7b 0a 20 20 65  ragma-1.14 {.  e
0ef0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41  xecsql {.    PRA
0f00: 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3d  GMA synchronous=
0f10: 32 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 73 79  2;.    PRAGMA sy
0f20: 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20 20 7d 0a 7d  nchronous;.  }.}
0f30: 20 7b 32 7d 0a 7d 20 3b 23 20 69 66 63 61 70 61   {2}.} ;# ifcapa
0f40: 62 6c 65 20 70 61 67 65 72 5f 70 72 61 67 6d 61  ble pager_pragma
0f50: 73 0a 0a 23 20 54 65 73 74 20 74 75 72 6e 69 6e  s..# Test turnin
0f60: 67 20 22 66 6c 61 67 22 20 70 72 61 67 6d 61 73  g "flag" pragmas
0f70: 20 6f 6e 20 61 6e 64 20 6f 66 66 2e 0a 23 0a 64   on and off..#.d
0f80: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 2e  o_test pragma-1.
0f90: 31 35 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  15 {.  execsql {
0fa0: 0a 20 20 20 20 50 52 41 47 4d 41 20 76 64 62 65  .    PRAGMA vdbe
0fb0: 5f 6c 69 73 74 69 6e 67 3d 59 45 53 3b 0a 20 20  _listing=YES;.  
0fc0: 20 20 50 52 41 47 4d 41 20 76 64 62 65 5f 6c 69    PRAGMA vdbe_li
0fd0: 73 74 69 6e 67 3b 0a 20 20 7d 0a 7d 20 7b 31 7d  sting;.  }.} {1}
0fe0: 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d  .do_test pragma-
0ff0: 31 2e 31 36 20 7b 0a 20 20 65 78 65 63 73 71 6c  1.16 {.  execsql
1000: 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 76 64   {.    PRAGMA vd
1010: 62 65 5f 6c 69 73 74 69 6e 67 3d 4e 4f 3b 0a 20  be_listing=NO;. 
1020: 20 20 20 50 52 41 47 4d 41 20 76 64 62 65 5f 6c     PRAGMA vdbe_l
1030: 69 73 74 69 6e 67 3b 0a 20 20 7d 0a 7d 20 7b 30  isting;.  }.} {0
1040: 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  }.do_test pragma
1050: 2d 31 2e 31 37 20 7b 0a 20 20 65 78 65 63 73 71  -1.17 {.  execsq
1060: 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 70  l {.    PRAGMA p
1070: 61 72 73 65 72 5f 74 72 61 63 65 3d 4f 4e 3b 0a  arser_trace=ON;.
1080: 20 20 20 20 50 52 41 47 4d 41 20 70 61 72 73 65      PRAGMA parse
1090: 72 5f 74 72 61 63 65 3d 4f 46 46 3b 0a 20 20 7d  r_trace=OFF;.  }
10a0: 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 70 72  .} {}.do_test pr
10b0: 61 67 6d 61 2d 31 2e 31 38 20 7b 0a 20 20 65 78  agma-1.18 {.  ex
10c0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47  ecsql {.    PRAG
10d0: 4d 41 20 62 6f 67 75 73 20 3d 20 2d 31 32 33 34  MA bogus = -1234
10e0: 3b 20 20 2d 2d 20 50 61 72 73 69 6e 67 20 6f 66  ;  -- Parsing of
10f0: 20 6e 65 67 61 74 69 76 65 20 76 61 6c 75 65 73   negative values
1100: 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a 23 20 54 65 73  .  }.} {}..# Tes
1110: 74 20 6d 6f 64 69 66 79 69 6e 67 20 74 68 65 20  t modifying the 
1120: 73 61 66 65 74 79 5f 6c 65 76 65 6c 20 6f 66 20  safety_level of 
1130: 61 6e 20 61 74 74 61 63 68 65 64 20 64 61 74 61  an attached data
1140: 62 61 73 65 2e 0a 64 6f 5f 74 65 73 74 20 70 72  base..do_test pr
1150: 61 67 6d 61 2d 32 2e 31 20 7b 0a 20 20 66 69 6c  agma-2.1 {.  fil
1160: 65 20 64 65 6c 65 74 65 20 2d 66 6f 72 63 65 20  e delete -force 
1170: 74 65 73 74 32 2e 64 62 0a 20 20 66 69 6c 65 20  test2.db.  file 
1180: 64 65 6c 65 74 65 20 2d 66 6f 72 63 65 20 74 65  delete -force te
1190: 73 74 32 2e 64 62 2d 6a 6f 75 72 6e 61 6c 0a 20  st2.db-journal. 
11a0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 41   execsql {.    A
11b0: 54 54 41 43 48 20 27 74 65 73 74 32 2e 64 62 27  TTACH 'test2.db'
11c0: 20 41 53 20 61 75 78 3b 0a 20 20 7d 20 0a 7d 20   AS aux;.  } .} 
11d0: 7b 7d 0a 69 66 63 61 70 61 62 6c 65 20 70 61 67  {}.ifcapable pag
11e0: 65 72 5f 70 72 61 67 6d 61 73 20 7b 0a 64 6f 5f  er_pragmas {.do_
11f0: 74 65 73 74 20 70 72 61 67 6d 61 2d 32 2e 32 20  test pragma-2.2 
1200: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
1210: 20 20 70 72 61 67 6d 61 20 61 75 78 2e 73 79 6e    pragma aux.syn
1220: 63 68 72 6f 6e 6f 75 73 3b 0a 20 20 7d 20 0a 7d  chronous;.  } .}
1230: 20 7b 32 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61   {2}.do_test pra
1240: 67 6d 61 2d 32 2e 33 20 7b 0a 20 20 65 78 65 63  gma-2.3 {.  exec
1250: 73 71 6c 20 7b 0a 20 20 20 20 70 72 61 67 6d 61  sql {.    pragma
1260: 20 61 75 78 2e 73 79 6e 63 68 72 6f 6e 6f 75 73   aux.synchronous
1270: 20 3d 20 4f 46 46 3b 0a 20 20 20 20 70 72 61 67   = OFF;.    prag
1280: 6d 61 20 61 75 78 2e 73 79 6e 63 68 72 6f 6e 6f  ma aux.synchrono
1290: 75 73 3b 0a 20 20 20 20 70 72 61 67 6d 61 20 73  us;.    pragma s
12a0: 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20 20 7d 20  ynchronous;.  } 
12b0: 0a 7d 20 7b 30 20 32 7d 0a 64 6f 5f 74 65 73 74  .} {0 2}.do_test
12c0: 20 70 72 61 67 6d 61 2d 32 2e 34 20 7b 0a 20 20   pragma-2.4 {.  
12d0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 70 72  execsql {.    pr
12e0: 61 67 6d 61 20 61 75 78 2e 73 79 6e 63 68 72 6f  agma aux.synchro
12f0: 6e 6f 75 73 20 3d 20 4f 4e 3b 0a 20 20 20 20 70  nous = ON;.    p
1300: 72 61 67 6d 61 20 73 79 6e 63 68 72 6f 6e 6f 75  ragma synchronou
1310: 73 3b 0a 20 20 20 20 70 72 61 67 6d 61 20 61 75  s;.    pragma au
1320: 78 2e 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20  x.synchronous;. 
1330: 20 7d 20 0a 7d 20 7b 32 20 31 7d 0a 7d 20 3b 23   } .} {2 1}.} ;#
1340: 20 69 66 63 61 70 61 62 6c 65 20 70 61 67 65 72   ifcapable pager
1350: 5f 70 72 61 67 6d 61 73 0a 0a 23 20 43 6f 6e 73  _pragmas..# Cons
1360: 74 72 75 63 74 20 61 20 63 6f 72 72 75 70 74 65  truct a corrupte
1370: 64 20 69 6e 64 65 78 20 61 6e 64 20 6d 61 6b 65  d index and make
1380: 20 73 75 72 65 20 74 68 65 20 69 6e 74 65 67 72   sure the integr
1390: 69 74 79 5f 63 68 65 63 6b 0a 23 20 70 72 61 67  ity_check.# prag
13a0: 6d 61 20 66 69 6e 64 73 20 69 74 2e 0a 23 0a 23  ma finds it..#.#
13b0: 20 54 68 65 73 65 20 74 65 73 74 73 20 77 6f 6e   These tests won
13c0: 27 74 20 77 6f 72 6b 20 69 66 20 74 68 65 20 64  't work if the d
13d0: 61 74 61 62 61 73 65 20 69 73 20 65 6e 63 72 79  atabase is encry
13e0: 70 74 65 64 0a 23 0a 64 6f 5f 74 65 73 74 20 70  pted.#.do_test p
13f0: 72 61 67 6d 61 2d 33 2e 31 20 7b 0a 20 20 65 78  ragma-3.1 {.  ex
1400: 65 63 73 71 6c 20 7b 0a 20 20 20 20 42 45 47 49  ecsql {.    BEGI
1410: 4e 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41  N;.    CREATE TA
1420: 42 4c 45 20 74 32 28 61 2c 62 2c 63 29 3b 0a 20  BLE t2(a,b,c);. 
1430: 20 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20     CREATE INDEX 
1440: 69 32 20 4f 4e 20 74 32 28 61 29 3b 0a 20 20 20  i2 ON t2(a);.   
1450: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20   INSERT INTO t2 
1460: 56 41 4c 55 45 53 28 31 31 2c 32 2c 33 29 3b 0a  VALUES(11,2,3);.
1470: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
1480: 74 32 20 56 41 4c 55 45 53 28 32 32 2c 33 2c 34  t2 VALUES(22,3,4
1490: 29 3b 0a 20 20 20 20 43 4f 4d 4d 49 54 3b 0a 20  );.    COMMIT;. 
14a0: 20 20 20 53 45 4c 45 43 54 20 72 6f 77 69 64 2c     SELECT rowid,
14b0: 20 2a 20 66 72 6f 6d 20 74 32 3b 0a 20 20 7d 0a   * from t2;.  }.
14c0: 7d 20 7b 31 20 31 31 20 32 20 33 20 32 20 32 32  } {1 11 2 3 2 22
14d0: 20 33 20 34 7d 0a 69 66 20 7b 21 5b 73 71 6c 69   3 4}.if {![sqli
14e0: 74 65 33 20 2d 68 61 73 2d 63 6f 64 65 63 5d 20  te3 -has-codec] 
14f0: 26 26 20 24 73 71 6c 69 74 65 5f 6f 70 74 69 6f  && $sqlite_optio
1500: 6e 73 28 69 6e 74 65 67 72 69 74 79 63 6b 29 7d  ns(integrityck)}
1510: 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61   {.  do_test pra
1520: 67 6d 61 2d 33 2e 32 20 7b 0a 20 20 20 20 73 65  gma-3.2 {.    se
1530: 74 20 72 6f 6f 74 70 61 67 65 20 5b 65 78 65 63  t rootpage [exec
1540: 73 71 6c 20 7b 53 45 4c 45 43 54 20 72 6f 6f 74  sql {SELECT root
1550: 70 61 67 65 20 46 52 4f 4d 20 73 71 6c 69 74 65  page FROM sqlite
1560: 5f 6d 61 73 74 65 72 20 57 48 45 52 45 20 6e 61  _master WHERE na
1570: 6d 65 3d 27 69 32 27 7d 5d 0a 20 20 20 20 73 65  me='i2'}].    se
1580: 74 20 64 62 20 5b 62 74 72 65 65 5f 6f 70 65 6e  t db [btree_open
1590: 20 74 65 73 74 2e 64 62 20 31 30 30 20 30 5d 0a   test.db 100 0].
15a0: 20 20 20 20 62 74 72 65 65 5f 62 65 67 69 6e 5f      btree_begin_
15b0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 24 64 62 0a  transaction $db.
15c0: 20 20 20 20 73 65 74 20 63 20 5b 62 74 72 65 65      set c [btree
15d0: 5f 63 75 72 73 6f 72 20 24 64 62 20 24 72 6f 6f  _cursor $db $roo
15e0: 74 70 61 67 65 20 31 5d 0a 20 20 20 20 62 74 72  tpage 1].    btr
15f0: 65 65 5f 66 69 72 73 74 20 24 63 0a 20 20 20 20  ee_first $c.    
1600: 62 74 72 65 65 5f 64 65 6c 65 74 65 20 24 63 0a  btree_delete $c.
1610: 20 20 20 20 62 74 72 65 65 5f 63 6f 6d 6d 69 74      btree_commit
1620: 20 24 64 62 0a 20 20 20 20 62 74 72 65 65 5f 63   $db.    btree_c
1630: 6c 6f 73 65 20 24 64 62 0a 20 20 20 20 65 78 65  lose $db.    exe
1640: 63 73 71 6c 20 7b 50 52 41 47 4d 41 20 69 6e 74  csql {PRAGMA int
1650: 65 67 72 69 74 79 5f 63 68 65 63 6b 7d 0a 20 20  egrity_check}.  
1660: 7d 20 7b 7b 72 6f 77 69 64 20 31 20 6d 69 73 73  } {{rowid 1 miss
1670: 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 69  ing from index i
1680: 32 7d 20 7b 77 72 6f 6e 67 20 23 20 6f 66 20 65  2} {wrong # of e
1690: 6e 74 72 69 65 73 20 69 6e 20 69 6e 64 65 78 20  ntries in index 
16a0: 69 32 7d 7d 0a 7d 0a 64 6f 5f 74 65 73 74 20 70  i2}}.}.do_test p
16b0: 72 61 67 6d 61 2d 33 2e 33 20 7b 0a 20 20 65 78  ragma-3.3 {.  ex
16c0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 44 52 4f 50  ecsql {.    DROP
16d0: 20 49 4e 44 45 58 20 69 32 3b 0a 20 20 7d 20 0a   INDEX i2;.  } .
16e0: 7d 20 7b 7d 0a 0a 23 20 54 65 73 74 20 6d 6f 64  } {}..# Test mod
16f0: 69 66 79 69 6e 67 20 74 68 65 20 63 61 63 68 65  ifying the cache
1700: 5f 73 69 7a 65 20 6f 66 20 61 6e 20 61 74 74 61  _size of an atta
1710: 63 68 65 64 20 64 61 74 61 62 61 73 65 2e 0a 69  ched database..i
1720: 66 63 61 70 61 62 6c 65 20 70 61 67 65 72 5f 70  fcapable pager_p
1730: 72 61 67 6d 61 73 20 7b 0a 64 6f 5f 74 65 73 74  ragmas {.do_test
1740: 20 70 72 61 67 6d 61 2d 34 2e 31 20 7b 0a 20 20   pragma-4.1 {.  
1750: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 70 72  execsql {.    pr
1760: 61 67 6d 61 20 61 75 78 2e 63 61 63 68 65 5f 73  agma aux.cache_s
1770: 69 7a 65 3b 0a 20 20 20 20 70 72 61 67 6d 61 20  ize;.    pragma 
1780: 61 75 78 2e 64 65 66 61 75 6c 74 5f 63 61 63 68  aux.default_cach
1790: 65 5f 73 69 7a 65 3b 0a 20 20 7d 20 0a 7d 20 7b  e_size;.  } .} {
17a0: 32 30 30 30 20 32 30 30 30 7d 0a 64 6f 5f 74 65  2000 2000}.do_te
17b0: 73 74 20 70 72 61 67 6d 61 2d 34 2e 32 20 7b 0a  st pragma-4.2 {.
17c0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
17d0: 70 72 61 67 6d 61 20 61 75 78 2e 63 61 63 68 65  pragma aux.cache
17e0: 5f 73 69 7a 65 20 3d 20 35 30 3b 0a 20 20 20 20  _size = 50;.    
17f0: 70 72 61 67 6d 61 20 61 75 78 2e 63 61 63 68 65  pragma aux.cache
1800: 5f 73 69 7a 65 3b 0a 20 20 20 20 70 72 61 67 6d  _size;.    pragm
1810: 61 20 61 75 78 2e 64 65 66 61 75 6c 74 5f 63 61  a aux.default_ca
1820: 63 68 65 5f 73 69 7a 65 3b 0a 20 20 7d 20 0a 7d  che_size;.  } .}
1830: 20 7b 35 30 20 32 30 30 30 7d 0a 64 6f 5f 74 65   {50 2000}.do_te
1840: 73 74 20 70 72 61 67 6d 61 2d 34 2e 33 20 7b 0a  st pragma-4.3 {.
1850: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
1860: 70 72 61 67 6d 61 20 61 75 78 2e 64 65 66 61 75  pragma aux.defau
1870: 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65 20 3d 20  lt_cache_size = 
1880: 34 35 36 3b 0a 20 20 20 20 70 72 61 67 6d 61 20  456;.    pragma 
1890: 61 75 78 2e 63 61 63 68 65 5f 73 69 7a 65 3b 0a  aux.cache_size;.
18a0: 20 20 20 20 70 72 61 67 6d 61 20 61 75 78 2e 64      pragma aux.d
18b0: 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a  efault_cache_siz
18c0: 65 3b 0a 20 20 7d 20 0a 7d 20 7b 34 35 36 20 34  e;.  } .} {456 4
18d0: 35 36 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67  56}.do_test prag
18e0: 6d 61 2d 34 2e 34 20 7b 0a 20 20 65 78 65 63 73  ma-4.4 {.  execs
18f0: 71 6c 20 7b 0a 20 20 20 20 70 72 61 67 6d 61 20  ql {.    pragma 
1900: 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20  cache_size;.    
1910: 70 72 61 67 6d 61 20 64 65 66 61 75 6c 74 5f 63  pragma default_c
1920: 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 7d 20 0a  ache_size;.  } .
1930: 7d 20 7b 31 32 33 20 31 32 33 7d 0a 64 6f 5f 74  } {123 123}.do_t
1940: 65 73 74 20 70 72 61 67 6d 61 2d 34 2e 35 20 7b  est pragma-4.5 {
1950: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
1960: 20 44 45 54 41 43 48 20 61 75 78 3b 0a 20 20 20   DETACH aux;.   
1970: 20 41 54 54 41 43 48 20 27 74 65 73 74 33 2e 64   ATTACH 'test3.d
1980: 62 27 20 41 53 20 61 75 78 3b 0a 20 20 20 20 70  b' AS aux;.    p
1990: 72 61 67 6d 61 20 61 75 78 2e 63 61 63 68 65 5f  ragma aux.cache_
19a0: 73 69 7a 65 3b 0a 20 20 20 20 70 72 61 67 6d 61  size;.    pragma
19b0: 20 61 75 78 2e 64 65 66 61 75 6c 74 5f 63 61 63   aux.default_cac
19c0: 68 65 5f 73 69 7a 65 3b 0a 20 20 7d 20 0a 7d 20  he_size;.  } .} 
19d0: 7b 32 30 30 30 20 32 30 30 30 7d 0a 64 6f 5f 74  {2000 2000}.do_t
19e0: 65 73 74 20 70 72 61 67 6d 61 2d 34 2e 36 20 7b  est pragma-4.6 {
19f0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
1a00: 20 44 45 54 41 43 48 20 61 75 78 3b 0a 20 20 20   DETACH aux;.   
1a10: 20 41 54 54 41 43 48 20 27 74 65 73 74 32 2e 64   ATTACH 'test2.d
1a20: 62 27 20 41 53 20 61 75 78 3b 0a 20 20 20 20 70  b' AS aux;.    p
1a30: 72 61 67 6d 61 20 61 75 78 2e 63 61 63 68 65 5f  ragma aux.cache_
1a40: 73 69 7a 65 3b 0a 20 20 20 20 70 72 61 67 6d 61  size;.    pragma
1a50: 20 61 75 78 2e 64 65 66 61 75 6c 74 5f 63 61 63   aux.default_cac
1a60: 68 65 5f 73 69 7a 65 3b 0a 20 20 7d 20 0a 7d 20  he_size;.  } .} 
1a70: 7b 34 35 36 20 34 35 36 7d 0a 7d 20 3b 23 20 69  {456 456}.} ;# i
1a80: 66 63 61 70 61 62 6c 65 20 70 61 67 65 72 5f 70  fcapable pager_p
1a90: 72 61 67 6d 61 73 0a 0a 23 20 54 65 73 74 20 74  ragmas..# Test t
1aa0: 68 61 74 20 6d 6f 64 69 66 79 69 6e 67 20 74 68  hat modifying th
1ab0: 65 20 73 79 6e 63 2d 6c 65 76 65 6c 20 69 6e 20  e sync-level in 
1ac0: 74 68 65 20 6d 69 64 64 6c 65 20 6f 66 20 61 20  the middle of a 
1ad0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 0a 23  transaction is.#
1ae0: 20 64 69 73 61 6c 6c 6f 77 65 64 2e 0a 69 66 63   disallowed..ifc
1af0: 61 70 61 62 6c 65 20 70 61 67 65 72 5f 70 72 61  apable pager_pra
1b00: 67 6d 61 73 20 7b 0a 64 6f 5f 74 65 73 74 20 70  gmas {.do_test p
1b10: 72 61 67 6d 61 2d 35 2e 30 20 7b 0a 20 20 65 78  ragma-5.0 {.  ex
1b20: 65 63 73 71 6c 20 7b 0a 20 20 20 20 70 72 61 67  ecsql {.    prag
1b30: 6d 61 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a  ma synchronous;.
1b40: 20 20 7d 20 0a 7d 20 7b 32 7d 0a 64 6f 5f 74 65    } .} {2}.do_te
1b50: 73 74 20 70 72 61 67 6d 61 2d 35 2e 31 20 7b 0a  st pragma-5.1 {.
1b60: 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20    catchsql {.   
1b70: 20 42 45 47 49 4e 3b 0a 20 20 20 20 70 72 61 67   BEGIN;.    prag
1b80: 6d 61 20 73 79 6e 63 68 72 6f 6e 6f 75 73 20 3d  ma synchronous =
1b90: 20 4f 46 46 3b 0a 20 20 7d 20 0a 7d 20 7b 31 20   OFF;.  } .} {1 
1ba0: 7b 53 61 66 65 74 79 20 6c 65 76 65 6c 20 6d 61  {Safety level ma
1bb0: 79 20 6e 6f 74 20 62 65 20 63 68 61 6e 67 65 64  y not be changed
1bc0: 20 69 6e 73 69 64 65 20 61 20 74 72 61 6e 73 61   inside a transa
1bd0: 63 74 69 6f 6e 7d 7d 0a 64 6f 5f 74 65 73 74 20  ction}}.do_test 
1be0: 70 72 61 67 6d 61 2d 35 2e 32 20 7b 0a 20 20 65  pragma-5.2 {.  e
1bf0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 70 72 61  xecsql {.    pra
1c00: 67 6d 61 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3b  gma synchronous;
1c10: 0a 20 20 7d 20 0a 7d 20 7b 32 7d 0a 63 61 74 63  .  } .} {2}.catc
1c20: 68 73 71 6c 20 7b 43 4f 4d 4d 49 54 3b 7d 0a 7d  hsql {COMMIT;}.}
1c30: 20 3b 23 20 69 66 63 61 70 61 62 6c 65 20 70 61   ;# ifcapable pa
1c40: 67 65 72 5f 70 72 61 67 6d 61 73 0a 0a 23 20 54  ger_pragmas..# T
1c50: 65 73 74 20 73 63 68 65 6d 61 2d 71 75 65 72 79  est schema-query
1c60: 20 70 72 61 67 6d 61 73 0a 23 0a 69 66 63 61 70   pragmas.#.ifcap
1c70: 61 62 6c 65 20 73 63 68 65 6d 61 5f 70 72 61 67  able schema_prag
1c80: 6d 61 73 20 7b 0a 69 66 63 61 70 61 62 6c 65 20  mas {.ifcapable 
1c90: 74 65 6d 70 64 62 20 7b 0a 20 20 64 6f 5f 74 65  tempdb {.  do_te
1ca0: 73 74 20 70 72 61 67 6d 61 2d 36 2e 31 20 7b 0a  st pragma-6.1 {.
1cb0: 20 20 20 20 73 65 74 20 72 65 73 20 7b 7d 0a 20      set res {}. 
1cc0: 20 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45     execsql {SELE
1cd0: 43 54 20 2a 20 46 52 4f 4d 20 73 71 6c 69 74 65  CT * FROM sqlite
1ce0: 5f 74 65 6d 70 5f 6d 61 73 74 65 72 7d 0a 20 20  _temp_master}.  
1cf0: 20 20 66 6f 72 65 61 63 68 20 7b 69 64 78 20 6e    foreach {idx n
1d00: 61 6d 65 20 66 69 6c 65 7d 20 5b 65 78 65 63 73  ame file} [execs
1d10: 71 6c 20 7b 70 72 61 67 6d 61 20 64 61 74 61 62  ql {pragma datab
1d20: 61 73 65 5f 6c 69 73 74 7d 5d 20 7b 0a 20 20 20  ase_list}] {.   
1d30: 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 20 24     lappend res $
1d40: 69 64 78 20 24 6e 61 6d 65 0a 20 20 20 20 7d 0a  idx $name.    }.
1d50: 20 20 20 20 73 65 74 20 72 65 73 0a 20 20 7d 20      set res.  } 
1d60: 7b 30 20 6d 61 69 6e 20 31 20 74 65 6d 70 20 32  {0 main 1 temp 2
1d70: 20 61 75 78 7d 0a 7d 0a 64 6f 5f 74 65 73 74 20   aux}.}.do_test 
1d80: 70 72 61 67 6d 61 2d 36 2e 32 20 7b 0a 20 20 65  pragma-6.2 {.  e
1d90: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 70 72 61  xecsql {.    pra
1da0: 67 6d 61 20 74 61 62 6c 65 5f 69 6e 66 6f 28 74  gma table_info(t
1db0: 32 29 0a 20 20 7d 0a 7d 20 7b 30 20 61 20 6e 75  2).  }.} {0 a nu
1dc0: 6d 65 72 69 63 20 30 20 7b 7d 20 30 20 31 20 62  meric 0 {} 0 1 b
1dd0: 20 6e 75 6d 65 72 69 63 20 30 20 7b 7d 20 30 20   numeric 0 {} 0 
1de0: 32 20 63 20 6e 75 6d 65 72 69 63 20 30 20 7b 7d  2 c numeric 0 {}
1df0: 20 30 7d 0a 69 66 63 61 70 61 62 6c 65 20 7b 66   0}.ifcapable {f
1e00: 6f 72 65 69 67 6e 6b 65 79 7d 20 7b 0a 20 20 64  oreignkey} {.  d
1e10: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 36 2e  o_test pragma-6.
1e20: 33 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  3 {.    execsql 
1e30: 7b 0a 20 20 20 20 20 20 43 52 45 41 54 45 20 54  {.      CREATE T
1e40: 41 42 4c 45 20 74 33 28 61 20 69 6e 74 20 72 65  ABLE t3(a int re
1e50: 66 65 72 65 6e 63 65 73 20 74 32 28 62 29 2c 20  ferences t2(b), 
1e60: 62 20 55 4e 49 51 55 45 29 3b 0a 20 20 20 20 20  b UNIQUE);.     
1e70: 20 70 72 61 67 6d 61 20 66 6f 72 65 69 67 6e 5f   pragma foreign_
1e80: 6b 65 79 5f 6c 69 73 74 28 74 33 29 3b 0a 20 20  key_list(t3);.  
1e90: 20 20 7d 0a 20 20 7d 20 7b 30 20 30 20 74 32 20    }.  } {0 0 t2 
1ea0: 61 20 62 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70  a b}.  do_test p
1eb0: 72 61 67 6d 61 2d 36 2e 34 20 7b 0a 20 20 20 20  ragma-6.4 {.    
1ec0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
1ed0: 70 72 61 67 6d 61 20 69 6e 64 65 78 5f 6c 69 73  pragma index_lis
1ee0: 74 28 74 33 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  t(t3);.    }.  }
1ef0: 20 7b 30 20 73 71 6c 69 74 65 5f 61 75 74 6f 69   {0 sqlite_autoi
1f00: 6e 64 65 78 5f 74 33 5f 31 20 31 7d 0a 7d 0a 69  ndex_t3_1 1}.}.i
1f10: 66 63 61 70 61 62 6c 65 20 7b 21 66 6f 72 65 69  fcapable {!forei
1f20: 67 6e 6b 65 79 7d 20 7b 0a 20 20 65 78 65 63 73  gnkey} {.  execs
1f30: 71 6c 20 7b 43 52 45 41 54 45 20 54 41 42 4c 45  ql {CREATE TABLE
1f40: 20 74 33 28 61 2c 62 20 55 4e 49 51 55 45 29 7d   t3(a,b UNIQUE)}
1f50: 0a 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .}.do_test pragm
1f60: 61 2d 36 2e 35 20 7b 0a 20 20 65 78 65 63 73 71  a-6.5 {.  execsq
1f70: 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 49  l {.    CREATE I
1f80: 4e 44 45 58 20 74 33 69 31 20 4f 4e 20 74 33 28  NDEX t3i1 ON t3(
1f90: 61 2c 62 29 3b 0a 20 20 20 20 70 72 61 67 6d 61  a,b);.    pragma
1fa0: 20 69 6e 64 65 78 5f 69 6e 66 6f 28 74 33 69 31   index_info(t3i1
1fb0: 29 3b 0a 20 20 7d 0a 7d 20 7b 30 20 30 20 61 20  );.  }.} {0 0 a 
1fc0: 31 20 31 20 62 7d 0a 7d 20 3b 23 20 69 66 63 61  1 1 b}.} ;# ifca
1fd0: 70 61 62 6c 65 20 73 63 68 65 6d 61 5f 70 72 61  pable schema_pra
1fe0: 67 6d 61 73 0a 23 20 4d 69 73 63 65 6c 6c 61 6e  gmas.# Miscellan
1ff0: 65 6f 75 73 20 74 65 73 74 73 0a 23 0a 69 66 63  eous tests.#.ifc
2000: 61 70 61 62 6c 65 20 73 63 68 65 6d 61 5f 70 72  apable schema_pr
2010: 61 67 6d 61 73 20 7b 0a 64 6f 5f 74 65 73 74 20  agmas {.do_test 
2020: 70 72 61 67 6d 61 2d 37 2e 31 20 7b 0a 20 20 23  pragma-7.1 {.  #
2030: 20 4d 61 6b 65 20 73 75 72 65 20 61 20 70 72 61   Make sure a pra
2040: 67 6d 61 20 6b 6e 6f 77 73 20 74 6f 20 72 65 61  gma knows to rea
2050: 64 20 74 68 65 20 73 63 68 65 6d 61 20 69 66 20  d the schema if 
2060: 69 74 20 6e 65 65 64 73 20 74 6f 0a 20 20 64 62  it needs to.  db
2070: 20 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74 65 33   close.  sqlite3
2080: 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20 65 78   db test.db.  ex
2090: 65 63 73 71 6c 20 7b 0a 20 20 20 20 70 72 61 67  ecsql {.    prag
20a0: 6d 61 20 69 6e 64 65 78 5f 6c 69 73 74 28 74 33  ma index_list(t3
20b0: 29 3b 0a 20 20 7d 0a 7d 20 7b 30 20 74 33 69 31  );.  }.} {0 t3i1
20c0: 20 30 20 31 20 73 71 6c 69 74 65 5f 61 75 74 6f   0 1 sqlite_auto
20d0: 69 6e 64 65 78 5f 74 33 5f 31 20 31 7d 0a 7d 20  index_t3_1 1}.} 
20e0: 3b 23 20 69 66 63 61 70 61 62 6c 65 20 73 63 68  ;# ifcapable sch
20f0: 65 6d 61 5f 70 72 61 67 6d 61 73 0a 69 66 63 61  ema_pragmas.ifca
2100: 70 61 62 6c 65 20 7b 75 74 66 31 36 7d 20 7b 0a  pable {utf16} {.
2110: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
2120: 2d 37 2e 32 20 7b 0a 20 20 20 20 64 62 20 63 6c  -7.2 {.    db cl
2130: 6f 73 65 0a 20 20 20 20 73 71 6c 69 74 65 33 20  ose.    sqlite3 
2140: 64 62 20 74 65 73 74 2e 64 62 0a 20 20 20 20 63  db test.db.    c
2150: 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 20 20  atchsql {.      
2160: 70 72 61 67 6d 61 20 65 6e 63 6f 64 69 6e 67 3d  pragma encoding=
2170: 62 6f 67 75 73 3b 0a 20 20 20 20 7d 0a 20 20 7d  bogus;.    }.  }
2180: 20 7b 31 20 7b 75 6e 73 75 70 70 6f 72 74 65 64   {1 {unsupported
2190: 20 65 6e 63 6f 64 69 6e 67 3a 20 62 6f 67 75 73   encoding: bogus
21a0: 7d 7d 0a 7d 0a 69 66 63 61 70 61 62 6c 65 20 74  }}.}.ifcapable t
21b0: 65 6d 70 64 62 20 7b 0a 20 20 64 6f 5f 74 65 73  empdb {.  do_tes
21c0: 74 20 70 72 61 67 6d 61 2d 37 2e 33 20 7b 0a 20  t pragma-7.3 {. 
21d0: 20 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 20 20     db close.    
21e0: 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e  sqlite3 db test.
21f0: 64 62 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b  db.    execsql {
2200: 0a 20 20 20 20 20 20 70 72 61 67 6d 61 20 6c 6f  .      pragma lo
2210: 63 6b 5f 73 74 61 74 75 73 3b 0a 20 20 20 20 7d  ck_status;.    }
2220: 0a 20 20 7d 20 7b 6d 61 69 6e 20 75 6e 6c 6f 63  .  } {main unloc
2230: 6b 65 64 20 74 65 6d 70 20 63 6c 6f 73 65 64 7d  ked temp closed}
2240: 0a 7d 20 65 6c 73 65 20 7b 0a 20 20 64 6f 5f 74  .} else {.  do_t
2250: 65 73 74 20 70 72 61 67 6d 61 2d 37 2e 33 20 7b  est pragma-7.3 {
2260: 0a 20 20 20 20 64 62 20 63 6c 6f 73 65 0a 20 20  .    db close.  
2270: 20 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73    sqlite3 db tes
2280: 74 2e 64 62 0a 20 20 20 20 65 78 65 63 73 71 6c  t.db.    execsql
2290: 20 7b 0a 20 20 20 20 20 20 70 72 61 67 6d 61 20   {.      pragma 
22a0: 6c 6f 63 6b 5f 73 74 61 74 75 73 3b 0a 20 20 20  lock_status;.   
22b0: 20 7d 0a 20 20 7d 20 7b 6d 61 69 6e 20 75 6e 6c   }.  } {main unl
22c0: 6f 63 6b 65 64 7d 0a 7d 0a 0a 0a 23 2d 2d 2d 2d  ocked}.}...#----
22d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
22e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
22f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2300: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2310: 2d 2d 0a 23 20 54 65 73 74 20 63 61 73 65 73 20  --.# Test cases 
2320: 70 72 61 67 6d 61 2d 38 2e 2a 20 74 65 73 74 20  pragma-8.* test 
2330: 74 68 65 20 22 50 52 41 47 4d 41 20 73 63 68 65  the "PRAGMA sche
2340: 6d 61 5f 76 65 72 73 69 6f 6e 22 20 61 6e 64 20  ma_version" and 
2350: 22 50 52 41 47 4d 41 0a 23 20 75 73 65 72 5f 76  "PRAGMA.# user_v
2360: 65 72 73 69 6f 6e 22 20 73 74 61 74 65 6d 65 6e  ersion" statemen
2370: 74 73 2e 0a 23 0a 23 20 70 72 61 67 6d 61 2d 38  ts..#.# pragma-8
2380: 2e 31 3a 20 50 52 41 47 4d 41 20 73 63 68 65 6d  .1: PRAGMA schem
2390: 61 5f 76 65 72 73 69 6f 6e 0a 23 20 70 72 61 67  a_version.# prag
23a0: 6d 61 2d 38 2e 32 3a 20 50 52 41 47 4d 41 20 75  ma-8.2: PRAGMA u
23b0: 73 65 72 5f 76 65 72 73 69 6f 6e 0a 23 0a 0a 69  ser_version.#..i
23c0: 66 63 61 70 61 62 6c 65 20 73 63 68 65 6d 61 5f  fcapable schema_
23d0: 76 65 72 73 69 6f 6e 20 7b 0a 0a 23 20 46 69 72  version {..# Fir
23e0: 73 74 20 63 68 65 63 6b 20 74 68 61 74 20 77 65  st check that we
23f0: 20 63 61 6e 20 73 65 74 20 74 68 65 20 73 63 68   can set the sch
2400: 65 6d 61 20 76 65 72 73 69 6f 6e 20 61 6e 64 20  ema version and 
2410: 74 68 65 6e 20 72 65 74 72 69 65 76 65 20 74 68  then retrieve th
2420: 65 0a 23 20 73 61 6d 65 20 76 61 6c 75 65 2e 0a  e.# same value..
2430: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38  do_test pragma-8
2440: 2e 31 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c  .1.1 {.  execsql
2450: 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 73 63   {.    PRAGMA sc
2460: 68 65 6d 61 5f 76 65 72 73 69 6f 6e 20 3d 20 31  hema_version = 1
2470: 30 35 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f  05;.  }.} {}.do_
2480: 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e  test pragma-8.1.
2490: 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  2 {.  execsql {.
24a0: 20 20 20 20 50 52 41 47 4d 41 20 73 63 68 65 6d      PRAGMA schem
24b0: 61 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 7d 0a 7d  a_version;.  }.}
24c0: 20 31 30 35 0a 64 6f 5f 74 65 73 74 20 70 72 61   105.do_test pra
24d0: 67 6d 61 2d 38 2e 31 2e 33 20 7b 0a 20 20 65 78  gma-8.1.3 {.  ex
24e0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47  ecsql {.    PRAG
24f0: 4d 41 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f  MA schema_versio
2500: 6e 20 3d 20 31 30 36 3b 0a 20 20 7d 0a 7d 20 7b  n = 106;.  }.} {
2510: 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  }.do_test pragma
2520: 2d 38 2e 31 2e 34 20 7b 0a 20 20 65 78 65 63 73  -8.1.4 {.  execs
2530: 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20  ql {.    PRAGMA 
2540: 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 3b 0a  schema_version;.
2550: 20 20 7d 0a 7d 20 31 30 36 0a 0a 23 20 43 68 65    }.} 106..# Che
2560: 63 6b 20 74 68 61 74 20 63 72 65 61 74 69 6e 67  ck that creating
2570: 20 61 20 74 61 62 6c 65 20 6d 6f 64 69 66 69 65   a table modifie
2580: 73 20 74 68 65 20 73 63 68 65 6d 61 2d 76 65 72  s the schema-ver
2590: 73 69 6f 6e 20 28 74 68 69 73 20 69 73 20 72 65  sion (this is re
25a0: 61 6c 6c 79 0a 23 20 74 6f 20 76 65 72 69 66 79  ally.# to verify
25b0: 20 74 68 61 74 20 74 68 65 20 76 61 6c 75 65 20   that the value 
25c0: 62 65 69 6e 67 20 72 65 61 64 20 69 73 20 69 6e  being read is in
25d0: 20 66 61 63 74 20 74 68 65 20 73 63 68 65 6d 61   fact the schema
25e0: 20 76 65 72 73 69 6f 6e 29 2e 0a 64 6f 5f 74 65   version)..do_te
25f0: 73 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e 35 20  st pragma-8.1.5 
2600: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
2610: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
2620: 34 28 61 2c 20 62 2c 20 63 29 3b 0a 20 20 20 20  4(a, b, c);.    
2630: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 34 20 56  INSERT INTO t4 V
2640: 41 4c 55 45 53 28 31 2c 20 32 2c 20 33 29 3b 0a  ALUES(1, 2, 3);.
2650: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
2660: 4d 20 74 34 3b 0a 20 20 7d 0a 7d 20 7b 31 20 32  M t4;.  }.} {1 2
2670: 20 33 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67   3}.do_test prag
2680: 6d 61 2d 38 2e 31 2e 36 20 7b 0a 20 20 65 78 65  ma-8.1.6 {.  exe
2690: 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d  csql {.    PRAGM
26a0: 41 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e  A schema_version
26b0: 3b 0a 20 20 7d 0a 7d 20 31 30 37 0a 0a 23 20 4e  ;.  }.} 107..# N
26c0: 6f 77 20 6f 70 65 6e 20 61 20 73 65 63 6f 6e 64  ow open a second
26d0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 74   connection to t
26e0: 68 65 20 64 61 74 61 62 61 73 65 2e 20 45 6e 73  he database. Ens
26f0: 75 72 65 20 74 68 61 74 20 63 68 61 6e 67 69 6e  ure that changin
2700: 67 20 74 68 65 0a 23 20 73 63 68 65 6d 61 2d 76  g the.# schema-v
2710: 65 72 73 69 6f 6e 20 75 73 69 6e 67 20 74 68 65  ersion using the
2720: 20 66 69 72 73 74 20 63 6f 6e 6e 65 63 74 69 6f   first connectio
2730: 6e 20 66 6f 72 63 65 73 20 74 68 65 20 73 65 63  n forces the sec
2740: 6f 6e 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 0a 23  ond connection.#
2750: 20 74 6f 20 72 65 6c 6f 61 64 20 74 68 65 20 73   to reload the s
2760: 63 68 65 6d 61 2e 20 54 68 69 73 20 68 61 73 20  chema. This has 
2770: 74 6f 20 62 65 20 64 6f 6e 65 20 75 73 69 6e 67  to be done using
2780: 20 74 68 65 20 43 2d 41 50 49 20 74 65 73 74 20   the C-API test 
2790: 66 75 6e 63 74 69 6f 6e 73 2c 0a 23 20 62 65 63  functions,.# bec
27a0: 61 75 73 65 20 74 68 65 20 54 43 4c 20 41 50 49  ause the TCL API
27b0: 20 61 63 63 6f 75 6e 74 73 20 66 6f 72 20 53 43   accounts for SC
27c0: 48 45 4d 41 5f 45 52 52 4f 52 20 61 6e 64 20 72  HEMA_ERROR and r
27d0: 65 74 72 69 65 73 20 74 68 65 20 71 75 65 72 79  etries the query
27e0: 2e 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  ..do_test pragma
27f0: 2d 38 2e 31 2e 37 20 7b 0a 20 20 73 65 74 20 3a  -8.1.7 {.  set :
2800: 3a 44 42 32 20 5b 73 71 6c 69 74 65 33 20 64 62  :DB2 [sqlite3 db
2810: 32 20 74 65 73 74 2e 64 62 5d 0a 20 20 65 78 65  2 test.db].  exe
2820: 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43  csql {.    SELEC
2830: 54 20 2a 20 46 52 4f 4d 20 74 34 3b 0a 20 20 7d  T * FROM t4;.  }
2840: 20 64 62 32 0a 7d 20 7b 31 20 32 20 33 7d 0a 64   db2.} {1 2 3}.d
2850: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e  o_test pragma-8.
2860: 31 2e 38 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  1.8 {.  execsql 
2870: 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 73 63 68  {.    PRAGMA sch
2880: 65 6d 61 5f 76 65 72 73 69 6f 6e 20 3d 20 31 30  ema_version = 10
2890: 38 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74  8;.  }.} {}.do_t
28a0: 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e 39  est pragma-8.1.9
28b0: 20 7b 0a 20 20 73 65 74 20 3a 3a 53 54 4d 54 20   {.  set ::STMT 
28c0: 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65  [sqlite3_prepare
28d0: 20 24 3a 3a 44 42 32 20 22 53 45 4c 45 43 54 20   $::DB2 "SELECT 
28e0: 2a 20 46 52 4f 4d 20 74 34 22 20 2d 31 20 44 55  * FROM t4" -1 DU
28f0: 4d 4d 59 5d 0a 20 20 73 71 6c 69 74 65 33 5f 73  MMY].  sqlite3_s
2900: 74 65 70 20 24 3a 3a 53 54 4d 54 0a 7d 20 53 51  tep $::STMT.} SQ
2910: 4c 49 54 45 5f 45 52 52 4f 52 0a 64 6f 5f 74 65  LITE_ERROR.do_te
2920: 73 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e 31 30  st pragma-8.1.10
2930: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 66 69 6e   {.  sqlite3_fin
2940: 61 6c 69 7a 65 20 24 3a 3a 53 54 4d 54 0a 7d 20  alize $::STMT.} 
2950: 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 0a 0a 23  SQLITE_SCHEMA..#
2960: 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20 73   Make sure the s
2970: 63 68 65 6d 61 2d 76 65 72 73 69 6f 6e 20 63 61  chema-version ca
2980: 6e 20 62 65 20 6d 61 6e 69 70 75 6c 61 74 65 64  n be manipulated
2990: 20 69 6e 20 61 6e 20 61 74 74 61 63 68 65 64 20   in an attached 
29a0: 64 61 74 61 62 61 73 65 2e 0a 66 69 6c 65 20 64  database..file d
29b0: 65 6c 65 74 65 20 2d 66 6f 72 63 65 20 74 65 73  elete -force tes
29c0: 74 32 2e 64 62 0a 66 69 6c 65 20 64 65 6c 65 74  t2.db.file delet
29d0: 65 20 2d 66 6f 72 63 65 20 74 65 73 74 32 2e 64  e -force test2.d
29e0: 62 2d 6a 6f 75 72 6e 61 6c 0a 64 6f 5f 74 65 73  b-journal.do_tes
29f0: 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e 31 31 20  t pragma-8.1.11 
2a00: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
2a10: 20 20 41 54 54 41 43 48 20 27 74 65 73 74 32 2e    ATTACH 'test2.
2a20: 64 62 27 20 41 53 20 61 75 78 3b 0a 20 20 20 20  db' AS aux;.    
2a30: 43 52 45 41 54 45 20 54 41 42 4c 45 20 61 75 78  CREATE TABLE aux
2a40: 2e 74 31 28 61 2c 20 62 2c 20 63 29 3b 0a 20 20  .t1(a, b, c);.  
2a50: 20 20 50 52 41 47 4d 41 20 61 75 78 2e 73 63 68    PRAGMA aux.sch
2a60: 65 6d 61 5f 76 65 72 73 69 6f 6e 20 3d 20 32 30  ema_version = 20
2a70: 35 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74  5;.  }.} {}.do_t
2a80: 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e 31  est pragma-8.1.1
2a90: 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  2 {.  execsql {.
2aa0: 20 20 20 20 50 52 41 47 4d 41 20 61 75 78 2e 73      PRAGMA aux.s
2ab0: 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 3b 0a 20  chema_version;. 
2ac0: 20 7d 0a 7d 20 32 30 35 0a 64 6f 5f 74 65 73 74   }.} 205.do_test
2ad0: 20 70 72 61 67 6d 61 2d 38 2e 31 2e 31 33 20 7b   pragma-8.1.13 {
2ae0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
2af0: 20 50 52 41 47 4d 41 20 73 63 68 65 6d 61 5f 76   PRAGMA schema_v
2b00: 65 72 73 69 6f 6e 3b 0a 20 20 7d 0a 7d 20 31 30  ersion;.  }.} 10
2b10: 38 0a 0a 23 20 41 6e 64 20 63 68 65 63 6b 20 74  8..# And check t
2b20: 68 61 74 20 6d 6f 64 69 66 79 69 6e 67 20 74 68  hat modifying th
2b30: 65 20 73 63 68 65 6d 61 2d 76 65 72 73 69 6f 6e  e schema-version
2b40: 20 69 6e 20 61 6e 20 61 74 74 61 63 68 65 64 20   in an attached 
2b50: 64 61 74 61 62 61 73 65 0a 23 20 66 6f 72 63 65  database.# force
2b60: 73 20 74 68 65 20 73 65 63 6f 6e 64 20 63 6f 6e  s the second con
2b70: 6e 65 63 74 69 6f 6e 20 74 6f 20 72 65 6c 6f 61  nection to reloa
2b80: 64 20 74 68 65 20 73 63 68 65 6d 61 2e 0a 64 6f  d the schema..do
2b90: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 31  _test pragma-8.1
2ba0: 2e 31 34 20 7b 0a 20 20 73 65 74 20 3a 3a 44 42  .14 {.  set ::DB
2bb0: 32 20 5b 73 71 6c 69 74 65 33 20 64 62 32 20 74  2 [sqlite3 db2 t
2bc0: 65 73 74 2e 64 62 5d 0a 20 20 65 78 65 63 73 71  est.db].  execsq
2bd0: 6c 20 7b 0a 20 20 20 20 41 54 54 41 43 48 20 27  l {.    ATTACH '
2be0: 74 65 73 74 32 2e 64 62 27 20 41 53 20 61 75 78  test2.db' AS aux
2bf0: 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  ;.    SELECT * F
2c00: 52 4f 4d 20 61 75 78 2e 74 31 3b 0a 20 20 7d 20  ROM aux.t1;.  } 
2c10: 64 62 32 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74  db2.} {}.do_test
2c20: 20 70 72 61 67 6d 61 2d 38 2e 31 2e 31 35 20 7b   pragma-8.1.15 {
2c30: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
2c40: 20 50 52 41 47 4d 41 20 61 75 78 2e 73 63 68 65   PRAGMA aux.sche
2c50: 6d 61 5f 76 65 72 73 69 6f 6e 20 3d 20 32 30 36  ma_version = 206
2c60: 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65  ;.  }.} {}.do_te
2c70: 73 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e 31 36  st pragma-8.1.16
2c80: 20 7b 0a 20 20 73 65 74 20 3a 3a 53 54 4d 54 20   {.  set ::STMT 
2c90: 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65  [sqlite3_prepare
2ca0: 20 24 3a 3a 44 42 32 20 22 53 45 4c 45 43 54 20   $::DB2 "SELECT 
2cb0: 2a 20 46 52 4f 4d 20 61 75 78 2e 74 31 22 20 2d  * FROM aux.t1" -
2cc0: 31 20 44 55 4d 4d 59 5d 0a 20 20 73 71 6c 69 74  1 DUMMY].  sqlit
2cd0: 65 33 5f 73 74 65 70 20 24 3a 3a 53 54 4d 54 0a  e3_step $::STMT.
2ce0: 7d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 0a 64  } SQLITE_ERROR.d
2cf0: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e  o_test pragma-8.
2d00: 31 2e 31 37 20 7b 0a 20 20 73 71 6c 69 74 65 33  1.17 {.  sqlite3
2d10: 5f 66 69 6e 61 6c 69 7a 65 20 24 3a 3a 53 54 4d  _finalize $::STM
2d20: 54 0a 7d 20 53 51 4c 49 54 45 5f 53 43 48 45 4d  T.} SQLITE_SCHEM
2d30: 41 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  A.do_test pragma
2d40: 2d 38 2e 31 2e 31 38 20 7b 0a 20 20 64 62 32 20  -8.1.18 {.  db2 
2d50: 63 6c 6f 73 65 0a 7d 20 7b 7d 0a 0a 23 20 4e 6f  close.} {}..# No
2d60: 77 20 74 65 73 74 20 74 68 61 74 20 74 68 65 20  w test that the 
2d70: 75 73 65 72 2d 76 65 72 73 69 6f 6e 20 63 61 6e  user-version can
2d80: 20 62 65 20 72 65 61 64 20 61 6e 64 20 77 72 69   be read and wri
2d90: 74 74 65 6e 20 28 61 6e 64 20 74 68 61 74 20 77  tten (and that w
2da0: 65 20 61 72 65 6e 27 74 0a 23 20 61 63 63 69 64  e aren't.# accid
2db0: 65 6e 74 61 6c 6c 79 20 6d 61 6e 69 70 75 6c 61  entally manipula
2dc0: 74 69 6e 67 20 74 68 65 20 73 63 68 65 6d 61 2d  ting the schema-
2dd0: 76 65 72 73 69 6f 6e 20 69 6e 73 74 65 61 64 29  version instead)
2de0: 2e 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  ..do_test pragma
2df0: 2d 38 2e 32 2e 31 20 7b 0a 20 20 65 78 65 63 73  -8.2.1 {.  execs
2e00: 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20  ql {.    PRAGMA 
2e10: 75 73 65 72 5f 76 65 72 73 69 6f 6e 3b 0a 20 20  user_version;.  
2e20: 7d 0a 7d 20 7b 30 7d 0a 64 6f 5f 74 65 73 74 20  }.} {0}.do_test 
2e30: 70 72 61 67 6d 61 2d 38 2e 32 2e 32 20 7b 0a 20  pragma-8.2.2 {. 
2e40: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50   execsql {.    P
2e50: 52 41 47 4d 41 20 75 73 65 72 5f 76 65 72 73 69  RAGMA user_versi
2e60: 6f 6e 20 3d 20 32 3b 0a 20 20 7d 0a 7d 20 7b 7d  on = 2;.  }.} {}
2e70: 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d  .do_test pragma-
2e80: 38 2e 32 2e 33 2e 31 20 7b 0a 20 20 65 78 65 63  8.2.3.1 {.  exec
2e90: 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41  sql {.    PRAGMA
2ea0: 20 75 73 65 72 5f 76 65 72 73 69 6f 6e 3b 0a 20   user_version;. 
2eb0: 20 7d 0a 7d 20 7b 32 7d 0a 64 6f 5f 74 65 73 74   }.} {2}.do_test
2ec0: 20 70 72 61 67 6d 61 2d 38 2e 32 2e 33 2e 32 20   pragma-8.2.3.2 
2ed0: 7b 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 73  {.  db close.  s
2ee0: 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64  qlite3 db test.d
2ef0: 62 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  b.  execsql {.  
2f00: 20 20 50 52 41 47 4d 41 20 75 73 65 72 5f 76 65    PRAGMA user_ve
2f10: 72 73 69 6f 6e 3b 0a 20 20 7d 0a 7d 20 7b 32 7d  rsion;.  }.} {2}
2f20: 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d  .do_test pragma-
2f30: 38 2e 32 2e 34 2e 31 20 7b 0a 20 20 65 78 65 63  8.2.4.1 {.  exec
2f40: 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41  sql {.    PRAGMA
2f50: 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 3b   schema_version;
2f60: 0a 20 20 7d 0a 7d 20 7b 31 30 38 7d 0a 69 66 63  .  }.} {108}.ifc
2f70: 61 70 61 62 6c 65 20 76 61 63 75 75 6d 20 7b 0a  apable vacuum {.
2f80: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
2f90: 2d 38 2e 32 2e 34 2e 32 20 7b 0a 20 20 20 20 65  -8.2.4.2 {.    e
2fa0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 56  xecsql {.      V
2fb0: 41 43 55 55 4d 3b 0a 20 20 20 20 20 20 50 52 41  ACUUM;.      PRA
2fc0: 47 4d 41 20 75 73 65 72 5f 76 65 72 73 69 6f 6e  GMA user_version
2fd0: 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 32 7d 0a  ;.    }.  } {2}.
2fe0: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
2ff0: 2d 38 2e 32 2e 34 2e 33 20 7b 0a 20 20 20 20 65  -8.2.4.3 {.    e
3000: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50  xecsql {.      P
3010: 52 41 47 4d 41 20 73 63 68 65 6d 61 5f 76 65 72  RAGMA schema_ver
3020: 73 69 6f 6e 3b 0a 20 20 20 20 7d 0a 20 20 7d 20  sion;.    }.  } 
3030: 7b 31 30 39 7d 0a 7d 0a 64 62 20 65 76 61 6c 20  {109}.}.db eval 
3040: 7b 41 54 54 41 43 48 20 27 74 65 73 74 32 2e 64  {ATTACH 'test2.d
3050: 62 27 20 41 53 20 61 75 78 7d 0a 0a 23 20 43 68  b' AS aux}..# Ch
3060: 65 63 6b 20 74 68 61 74 20 74 68 65 20 75 73 65  eck that the use
3070: 72 2d 76 65 72 73 69 6f 6e 20 69 6e 20 74 68 65  r-version in the
3080: 20 61 75 78 69 6c 61 72 79 20 64 61 74 61 62 61   auxilary databa
3090: 73 65 20 63 61 6e 20 62 65 20 6d 61 6e 69 70 75  se can be manipu
30a0: 6c 61 74 65 64 20 28 0a 23 20 61 6e 64 20 74 68  lated (.# and th
30b0: 61 74 20 77 65 20 61 72 65 6e 27 74 20 61 63 63  at we aren't acc
30c0: 69 64 65 6e 74 61 6c 6c 79 20 6d 61 6e 69 70 75  identally manipu
30d0: 6c 61 74 69 6e 67 20 74 68 65 20 73 61 6d 65 20  lating the same 
30e0: 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 62 29 2e  in the main db).
30f0: 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d  .do_test pragma-
3100: 38 2e 32 2e 35 20 7b 0a 20 20 65 78 65 63 73 71  8.2.5 {.  execsq
3110: 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 61  l {.    PRAGMA a
3120: 75 78 2e 75 73 65 72 5f 76 65 72 73 69 6f 6e 3b  ux.user_version;
3130: 0a 20 20 7d 0a 7d 20 7b 30 7d 0a 64 6f 5f 74 65  .  }.} {0}.do_te
3140: 73 74 20 70 72 61 67 6d 61 2d 38 2e 32 2e 36 20  st pragma-8.2.6 
3150: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
3160: 20 20 50 52 41 47 4d 41 20 61 75 78 2e 75 73 65    PRAGMA aux.use
3170: 72 5f 76 65 72 73 69 6f 6e 20 3d 20 33 3b 0a 20  r_version = 3;. 
3180: 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20   }.} {}.do_test 
3190: 70 72 61 67 6d 61 2d 38 2e 32 2e 37 20 7b 0a 20  pragma-8.2.7 {. 
31a0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50   execsql {.    P
31b0: 52 41 47 4d 41 20 61 75 78 2e 75 73 65 72 5f 76  RAGMA aux.user_v
31c0: 65 72 73 69 6f 6e 3b 0a 20 20 7d 0a 7d 20 7b 33  ersion;.  }.} {3
31d0: 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  }.do_test pragma
31e0: 2d 38 2e 32 2e 38 20 7b 0a 20 20 65 78 65 63 73  -8.2.8 {.  execs
31f0: 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20  ql {.    PRAGMA 
3200: 6d 61 69 6e 2e 75 73 65 72 5f 76 65 72 73 69 6f  main.user_versio
3210: 6e 3b 0a 20 20 7d 0a 7d 20 7b 32 7d 0a 0a 23 20  n;.  }.} {2}..# 
3220: 4e 6f 77 20 63 68 65 63 6b 20 74 68 61 74 20 61  Now check that a
3230: 20 52 4f 4c 4c 42 41 43 4b 20 72 65 73 65 74 73   ROLLBACK resets
3240: 20 74 68 65 20 75 73 65 72 2d 76 65 72 73 69 6f   the user-versio
3250: 6e 20 69 66 20 69 74 20 68 61 73 20 62 65 65 6e  n if it has been
3260: 20 6d 6f 64 69 66 69 65 64 0a 23 20 77 69 74 68   modified.# with
3270: 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  in a transaction
3280: 2e 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  ..do_test pragma
3290: 2d 38 2e 32 2e 39 20 7b 0a 20 20 65 78 65 63 73  -8.2.9 {.  execs
32a0: 71 6c 20 7b 0a 20 20 20 20 42 45 47 49 4e 3b 0a  ql {.    BEGIN;.
32b0: 20 20 20 20 50 52 41 47 4d 41 20 61 75 78 2e 75      PRAGMA aux.u
32c0: 73 65 72 5f 76 65 72 73 69 6f 6e 20 3d 20 31 30  ser_version = 10
32d0: 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 75 73 65  ;.    PRAGMA use
32e0: 72 5f 76 65 72 73 69 6f 6e 20 3d 20 31 31 3b 0a  r_version = 11;.
32f0: 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74    }.} {}.do_test
3300: 20 70 72 61 67 6d 61 2d 38 2e 32 2e 31 30 20 7b   pragma-8.2.10 {
3310: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
3320: 20 50 52 41 47 4d 41 20 61 75 78 2e 75 73 65 72   PRAGMA aux.user
3330: 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 7d 0a 7d 20  _version;.  }.} 
3340: 7b 31 30 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61  {10}.do_test pra
3350: 67 6d 61 2d 38 2e 32 2e 31 31 20 7b 0a 20 20 65  gma-8.2.11 {.  e
3360: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41  xecsql {.    PRA
3370: 47 4d 41 20 6d 61 69 6e 2e 75 73 65 72 5f 76 65  GMA main.user_ve
3380: 72 73 69 6f 6e 3b 0a 20 20 7d 0a 7d 20 7b 31 31  rsion;.  }.} {11
3390: 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  }.do_test pragma
33a0: 2d 38 2e 32 2e 31 32 20 7b 0a 20 20 65 78 65 63  -8.2.12 {.  exec
33b0: 73 71 6c 20 7b 0a 20 20 20 20 52 4f 4c 4c 42 41  sql {.    ROLLBA
33c0: 43 4b 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 61  CK;.    PRAGMA a
33d0: 75 78 2e 75 73 65 72 5f 76 65 72 73 69 6f 6e 3b  ux.user_version;
33e0: 0a 20 20 7d 0a 7d 20 7b 33 7d 0a 64 6f 5f 74 65  .  }.} {3}.do_te
33f0: 73 74 20 70 72 61 67 6d 61 2d 38 2e 32 2e 31 33  st pragma-8.2.13
3400: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
3410: 20 20 20 50 52 41 47 4d 41 20 6d 61 69 6e 2e 75     PRAGMA main.u
3420: 73 65 72 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 7d  ser_version;.  }
3430: 0a 7d 20 7b 32 7d 0a 0a 23 20 54 72 79 20 61 20  .} {2}..# Try a 
3440: 6e 65 67 61 74 69 76 65 20 76 61 6c 75 65 20 66  negative value f
3450: 6f 72 20 74 68 65 20 75 73 65 72 2d 76 65 72 73  or the user-vers
3460: 69 6f 6e 0a 64 6f 5f 74 65 73 74 20 70 72 61 67  ion.do_test prag
3470: 6d 61 2d 38 2e 32 2e 31 34 20 7b 0a 20 20 65 78  ma-8.2.14 {.  ex
3480: 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47  ecsql {.    PRAG
3490: 4d 41 20 75 73 65 72 5f 76 65 72 73 69 6f 6e 20  MA user_version 
34a0: 3d 20 2d 34 35 30 3b 0a 20 20 7d 0a 7d 20 7b 7d  = -450;.  }.} {}
34b0: 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d  .do_test pragma-
34c0: 38 2e 32 2e 31 35 20 7b 0a 20 20 65 78 65 63 73  8.2.15 {.  execs
34d0: 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20  ql {.    PRAGMA 
34e0: 75 73 65 72 5f 76 65 72 73 69 6f 6e 3b 0a 20 20  user_version;.  
34f0: 7d 0a 7d 20 7b 2d 34 35 30 7d 0a 7d 20 3b 20 23  }.} {-450}.} ; #
3500: 20 69 66 63 61 70 61 62 6c 65 20 73 63 68 65 6d   ifcapable schem
3510: 61 5f 76 65 72 73 69 6f 6e 0a 0a 0a 23 20 54 65  a_version...# Te
3520: 73 74 20 74 65 6d 70 5f 73 74 6f 72 65 20 61 6e  st temp_store an
3530: 64 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72  d temp_store_dir
3540: 65 63 74 6f 72 79 20 70 72 61 67 6d 61 73 0a 23  ectory pragmas.#
3550: 0a 69 66 63 61 70 61 62 6c 65 20 70 61 67 65 72  .ifcapable pager
3560: 5f 70 72 61 67 6d 61 73 20 7b 0a 64 6f 5f 74 65  _pragmas {.do_te
3570: 73 74 20 70 72 61 67 6d 61 2d 39 2e 31 20 7b 0a  st pragma-9.1 {.
3580: 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 73 71 6c    db close.  sql
3590: 69 74 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a  ite3 db test.db.
35a0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
35b0: 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72  PRAGMA temp_stor
35c0: 65 3b 0a 20 20 7d 0a 7d 20 7b 30 7d 0a 64 6f 5f  e;.  }.} {0}.do_
35d0: 74 65 73 74 20 70 72 61 67 6d 61 2d 39 2e 32 20  test pragma-9.2 
35e0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
35f0: 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74    PRAGMA temp_st
3600: 6f 72 65 3d 66 69 6c 65 3b 0a 20 20 20 20 50 52  ore=file;.    PR
3610: 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 3b  AGMA temp_store;
3620: 0a 20 20 7d 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65  .  }.} {1}.do_te
3630: 73 74 20 70 72 61 67 6d 61 2d 39 2e 33 20 7b 0a  st pragma-9.3 {.
3640: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
3650: 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72  PRAGMA temp_stor
3660: 65 3d 6d 65 6d 6f 72 79 3b 0a 20 20 20 20 50 52  e=memory;.    PR
3670: 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 3b  AGMA temp_store;
3680: 0a 20 20 7d 0a 7d 20 7b 32 7d 0a 64 6f 5f 74 65  .  }.} {2}.do_te
3690: 73 74 20 70 72 61 67 6d 61 2d 39 2e 34 20 7b 0a  st pragma-9.4 {.
36a0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
36b0: 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72  PRAGMA temp_stor
36c0: 65 5f 64 69 72 65 63 74 6f 72 79 3b 0a 20 20 7d  e_directory;.  }
36d0: 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 70 72  .} {}.do_test pr
36e0: 61 67 6d 61 2d 39 2e 35 20 7b 0a 20 20 73 65 74  agma-9.5 {.  set
36f0: 20 70 77 64 20 5b 73 74 72 69 6e 67 20 6d 61 70   pwd [string map
3700: 20 7b 27 20 27 27 7d 20 5b 70 77 64 5d 5d 0a 20   {' ''} [pwd]]. 
3710: 20 65 78 65 63 73 71 6c 20 22 0a 20 20 20 20 50   execsql ".    P
3720: 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65  RAGMA temp_store
3730: 5f 64 69 72 65 63 74 6f 72 79 3d 27 24 70 77 64  _directory='$pwd
3740: 27 3b 0a 20 20 22 0a 7d 20 7b 7d 0a 64 6f 5f 74  ';.  ".} {}.do_t
3750: 65 73 74 20 70 72 61 67 6d 61 2d 39 2e 36 20 7b  est pragma-9.6 {
3760: 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 0a 20 20  .  execsql { .  
3770: 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74    PRAGMA temp_st
3780: 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 3b 0a 20  ore_directory;. 
3790: 20 7d 0a 7d 20 5b 70 77 64 5d 0a 64 6f 5f 74 65   }.} [pwd].do_te
37a0: 73 74 20 70 72 61 67 6d 61 2d 39 2e 37 20 7b 0a  st pragma-9.7 {.
37b0: 20 20 63 61 74 63 68 73 71 6c 20 7b 20 0a 20 20    catchsql { .  
37c0: 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74    PRAGMA temp_st
37d0: 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 3d 27 2f  ore_directory='/
37e0: 4e 4f 4e 2f 45 58 49 53 54 45 4e 54 2f 50 41 54  NON/EXISTENT/PAT
37f0: 48 2f 46 4f 4f 42 41 52 27 3b 0a 20 20 7d 0a 7d  H/FOOBAR';.  }.}
3800: 20 7b 31 20 7b 6e 6f 74 20 61 20 77 72 69 74 61   {1 {not a writa
3810: 62 6c 65 20 64 69 72 65 63 74 6f 72 79 7d 7d 0a  ble directory}}.
3820: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 39  do_test pragma-9
3830: 2e 38 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .8 {.  execsql {
3840: 20 0a 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d   .    PRAGMA tem
3850: 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72  p_store_director
3860: 79 3d 27 27 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 69  y='';.  }.} {}.i
3870: 66 63 61 70 61 62 6c 65 20 74 65 6d 70 64 62 20  fcapable tempdb 
3880: 7b 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67  {.  do_test prag
3890: 6d 61 2d 39 2e 39 20 7b 0a 20 20 20 20 65 78 65  ma-9.9 {.    exe
38a0: 63 73 71 6c 20 7b 20 0a 20 20 20 20 20 20 50 52  csql { .      PR
38b0: 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 5f  AGMA temp_store_
38c0: 64 69 72 65 63 74 6f 72 79 3b 0a 20 20 20 20 20  directory;.     
38d0: 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f   PRAGMA temp_sto
38e0: 72 65 3d 46 49 4c 45 3b 0a 20 20 20 20 20 20 43  re=FILE;.      C
38f0: 52 45 41 54 45 20 54 45 4d 50 20 54 41 42 4c 45  REATE TEMP TABLE
3900: 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65   temp_store_dire
3910: 63 74 6f 72 79 5f 74 65 73 74 28 61 20 69 6e 74  ctory_test(a int
3920: 65 67 65 72 29 3b 0a 20 20 20 20 20 20 49 4e 53  eger);.      INS
3930: 45 52 54 20 49 4e 54 4f 20 74 65 6d 70 5f 73 74  ERT INTO temp_st
3940: 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 5f 74 65  ore_directory_te
3950: 73 74 20 76 61 6c 75 65 73 20 28 32 29 3b 0a 20  st values (2);. 
3960: 20 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52       SELECT * FR
3970: 4f 4d 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69  OM temp_store_di
3980: 72 65 63 74 6f 72 79 5f 74 65 73 74 3b 0a 20 20  rectory_test;.  
3990: 20 20 7d 0a 20 20 7d 20 7b 32 7d 0a 7d 0a 64 6f    }.  } {2}.}.do
39a0: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 39 2e 31  _test pragma-9.1
39b0: 30 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 22  0 {.  catchsql "
39c0: 0a 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70  .    PRAGMA temp
39d0: 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79  _store_directory
39e0: 3d 27 24 70 77 64 27 3b 0a 20 20 20 20 53 45 4c  ='$pwd';.    SEL
39f0: 45 43 54 20 2a 20 46 52 4f 4d 20 74 65 6d 70 5f  ECT * FROM temp_
3a00: 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 5f  store_directory_
3a10: 74 65 73 74 3b 0a 20 20 22 0a 7d 20 7b 31 20 7b  test;.  ".} {1 {
3a20: 6e 6f 20 73 75 63 68 20 74 61 62 6c 65 3a 20 74  no such table: t
3a30: 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74  emp_store_direct
3a40: 6f 72 79 5f 74 65 73 74 7d 7d 0a 7d 20 3b 23 20  ory_test}}.} ;# 
3a50: 69 66 63 61 70 61 62 6c 65 20 70 61 67 65 72 5f  ifcapable pager_
3a60: 70 72 61 67 6d 61 73 0a 0a 69 66 63 61 70 61 62  pragmas..ifcapab
3a70: 6c 65 20 74 72 69 67 67 65 72 20 7b 0a 0a 64 6f  le trigger {..do
3a80: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 30 2e  _test pragma-10.
3a90: 30 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b  0 {.  catchsql {
3aa0: 0a 20 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20  .    DROP TABLE 
3ab0: 6d 61 69 6e 2e 74 31 3b 0a 20 20 7d 0a 20 20 65  main.t1;.  }.  e
3ac0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41  xecsql {.    PRA
3ad0: 47 4d 41 20 63 6f 75 6e 74 5f 63 68 61 6e 67 65  GMA count_change
3ae0: 73 20 3d 20 31 3b 0a 0a 20 20 20 20 43 52 45 41  s = 1;..    CREA
3af0: 54 45 20 54 41 42 4c 45 20 74 31 28 61 20 50 52  TE TABLE t1(a PR
3b00: 49 4d 41 52 59 20 4b 45 59 29 3b 0a 20 20 20 20  IMARY KEY);.    
3b10: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 5f  CREATE TABLE t1_
3b20: 6d 69 72 72 6f 72 28 61 29 3b 0a 20 20 20 20 43  mirror(a);.    C
3b30: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 5f 6d  REATE TABLE t1_m
3b40: 69 72 72 6f 72 32 28 61 29 3b 0a 20 20 20 20 43  irror2(a);.    C
3b50: 52 45 41 54 45 20 54 52 49 47 47 45 52 20 74 31  REATE TRIGGER t1
3b60: 5f 62 69 20 42 45 46 4f 52 45 20 49 4e 53 45 52  _bi BEFORE INSER
3b70: 54 20 4f 4e 20 74 31 20 42 45 47 49 4e 20 0a 20  T ON t1 BEGIN . 
3b80: 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f       INSERT INTO
3b90: 20 74 31 5f 6d 69 72 72 6f 72 20 56 41 4c 55 45   t1_mirror VALUE
3ba0: 53 28 6e 65 77 2e 61 29 3b 0a 20 20 20 20 45 4e  S(new.a);.    EN
3bb0: 44 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54 52  D;.    CREATE TR
3bc0: 49 47 47 45 52 20 74 31 5f 61 69 20 41 46 54 45  IGGER t1_ai AFTE
3bd0: 52 20 49 4e 53 45 52 54 20 4f 4e 20 74 31 20 42  R INSERT ON t1 B
3be0: 45 47 49 4e 20 0a 20 20 20 20 20 20 49 4e 53 45  EGIN .      INSE
3bf0: 52 54 20 49 4e 54 4f 20 74 31 5f 6d 69 72 72 6f  RT INTO t1_mirro
3c00: 72 32 20 56 41 4c 55 45 53 28 6e 65 77 2e 61 29  r2 VALUES(new.a)
3c10: 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20 20 20 43  ;.    END;.    C
3c20: 52 45 41 54 45 20 54 52 49 47 47 45 52 20 74 31  REATE TRIGGER t1
3c30: 5f 62 75 20 42 45 46 4f 52 45 20 55 50 44 41 54  _bu BEFORE UPDAT
3c40: 45 20 4f 4e 20 74 31 20 42 45 47 49 4e 20 0a 20  E ON t1 BEGIN . 
3c50: 20 20 20 20 20 55 50 44 41 54 45 20 74 31 5f 6d       UPDATE t1_m
3c60: 69 72 72 6f 72 20 53 45 54 20 61 20 3d 20 6e 65  irror SET a = ne
3c70: 77 2e 61 20 57 48 45 52 45 20 61 20 3d 20 6f 6c  w.a WHERE a = ol
3c80: 64 2e 61 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20  d.a;.    END;.  
3c90: 20 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52    CREATE TRIGGER
3ca0: 20 74 31 5f 61 75 20 41 46 54 45 52 20 55 50 44   t1_au AFTER UPD
3cb0: 41 54 45 20 4f 4e 20 74 31 20 42 45 47 49 4e 20  ATE ON t1 BEGIN 
3cc0: 0a 20 20 20 20 20 20 55 50 44 41 54 45 20 74 31  .      UPDATE t1
3cd0: 5f 6d 69 72 72 6f 72 32 20 53 45 54 20 61 20 3d  _mirror2 SET a =
3ce0: 20 6e 65 77 2e 61 20 57 48 45 52 45 20 61 20 3d   new.a WHERE a =
3cf0: 20 6f 6c 64 2e 61 3b 0a 20 20 20 20 45 4e 44 3b   old.a;.    END;
3d00: 0a 20 20 20 20 43 52 45 41 54 45 20 54 52 49 47  .    CREATE TRIG
3d10: 47 45 52 20 74 31 5f 62 64 20 42 45 46 4f 52 45  GER t1_bd BEFORE
3d20: 20 44 45 4c 45 54 45 20 4f 4e 20 74 31 20 42 45   DELETE ON t1 BE
3d30: 47 49 4e 20 0a 20 20 20 20 20 20 44 45 4c 45 54  GIN .      DELET
3d40: 45 20 46 52 4f 4d 20 74 31 5f 6d 69 72 72 6f 72  E FROM t1_mirror
3d50: 20 57 48 45 52 45 20 61 20 3d 20 6f 6c 64 2e 61   WHERE a = old.a
3d60: 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20 20 20 43  ;.    END;.    C
3d70: 52 45 41 54 45 20 54 52 49 47 47 45 52 20 74 31  REATE TRIGGER t1
3d80: 5f 61 64 20 41 46 54 45 52 20 44 45 4c 45 54 45  _ad AFTER DELETE
3d90: 20 4f 4e 20 74 31 20 42 45 47 49 4e 20 0a 20 20   ON t1 BEGIN .  
3da0: 20 20 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20      DELETE FROM 
3db0: 74 31 5f 6d 69 72 72 6f 72 32 20 57 48 45 52 45  t1_mirror2 WHERE
3dc0: 20 61 20 3d 20 6f 6c 64 2e 61 3b 0a 20 20 20 20   a = old.a;.    
3dd0: 45 4e 44 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a 64  END;.  }.} {}..d
3de0: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 30  o_test pragma-10
3df0: 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .1 {.  execsql {
3e00: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
3e10: 20 74 31 20 56 41 4c 55 45 53 28 72 61 6e 64 73   t1 VALUES(rands
3e20: 74 72 28 31 30 2c 31 30 29 29 3b 0a 20 20 7d 0a  tr(10,10));.  }.
3e30: 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 70 72  } {1}.do_test pr
3e40: 61 67 6d 61 2d 31 30 2e 32 20 7b 0a 20 20 65 78  agma-10.2 {.  ex
3e50: 65 63 73 71 6c 20 7b 0a 20 20 20 20 55 50 44 41  ecsql {.    UPDA
3e60: 54 45 20 74 31 20 53 45 54 20 61 20 3d 20 72 61  TE t1 SET a = ra
3e70: 6e 64 73 74 72 28 31 30 2c 31 30 29 3b 0a 20 20  ndstr(10,10);.  
3e80: 7d 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20  }.} {1}.do_test 
3e90: 70 72 61 67 6d 61 2d 31 30 2e 33 20 7b 0a 20 20  pragma-10.3 {.  
3ea0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 44 45  execsql {.    DE
3eb0: 4c 45 54 45 20 46 52 4f 4d 20 74 31 3b 0a 20 20  LETE FROM t1;.  
3ec0: 7d 0a 7d 20 7b 31 7d 0a 0a 7d 20 3b 23 20 69 66  }.} {1}..} ;# if
3ed0: 63 61 70 61 62 6c 65 20 74 72 69 67 67 65 72 0a  capable trigger.
3ee0: 0a 69 66 63 61 70 61 62 6c 65 20 73 63 68 65 6d  .ifcapable schem
3ef0: 61 5f 70 72 61 67 6d 61 73 20 7b 0a 20 20 64 6f  a_pragmas {.  do
3f00: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 31 2e  _test pragma-11.
3f10: 31 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 32  1 {.    execsql2
3f20: 20 7b 0a 20 20 20 20 20 20 70 72 61 67 6d 61 20   {.      pragma 
3f30: 63 6f 6c 6c 61 74 69 6f 6e 5f 6c 69 73 74 3b 0a  collation_list;.
3f40: 20 20 20 20 7d 0a 20 20 7d 20 7b 73 65 71 20 30      }.  } {seq 0
3f50: 20 6e 61 6d 65 20 4e 4f 43 41 53 45 20 73 65 71   name NOCASE seq
3f60: 20 31 20 6e 61 6d 65 20 42 49 4e 41 52 59 7d 0a   1 name BINARY}.
3f70: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
3f80: 2d 31 31 2e 32 20 7b 0a 20 20 20 20 64 62 20 63  -11.2 {.    db c
3f90: 6f 6c 6c 61 74 65 20 4e 65 77 5f 43 6f 6c 6c 61  ollate New_Colla
3fa0: 74 69 6f 6e 20 62 6c 61 68 2e 2e 2e 0a 20 20 20  tion blah....   
3fb0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20   execsql {.     
3fc0: 20 70 72 61 67 6d 61 20 63 6f 6c 6c 61 74 69 6f   pragma collatio
3fd0: 6e 5f 6c 69 73 74 3b 0a 20 20 20 20 7d 0a 20 20  n_list;.    }.  
3fe0: 7d 20 7b 30 20 4e 65 77 5f 43 6f 6c 6c 61 74 69  } {0 New_Collati
3ff0: 6f 6e 20 31 20 4e 4f 43 41 53 45 20 32 20 42 49  on 1 NOCASE 2 BI
4000: 4e 41 52 59 7d 0a 7d 0a 0a 23 20 52 65 73 65 74  NARY}.}..# Reset
4010: 20 74 68 65 20 73 71 6c 69 74 65 33 5f 74 65 6d   the sqlite3_tem
4020: 70 5f 64 69 72 65 63 74 6f 72 79 20 76 61 72 69  p_directory vari
4030: 61 62 6c 65 20 66 6f 72 20 74 68 65 20 6e 65 78  able for the nex
4040: 74 20 72 75 6e 20 6f 66 20 74 65 73 74 73 3a 0a  t run of tests:.
4050: 73 71 6c 69 74 65 33 20 64 62 58 20 3a 6d 65 6d  sqlite3 dbX :mem
4060: 6f 72 79 3a 0a 64 62 58 20 65 76 61 6c 20 7b 50  ory:.dbX eval {P
4070: 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65  RAGMA temp_store
4080: 5f 64 69 72 65 63 74 6f 72 79 20 3d 20 22 22 7d  _directory = ""}
4090: 0a 64 62 58 20 63 6c 6f 73 65 0a 0a 66 69 6e 69  .dbX close..fini
40a0: 73 68 5f 74 65 73 74 0a                          sh_test.