/ Hex Artifact Content
Login

Artifact 3e3673e42c665bf5ec1673961927ff9547a819fc:


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 34 30 20 32 30 30 36 2f 30 32 2f 31 37 20 31  .40 2006/02/17 1
0200: 32 3a 32 35 3a 31 36 20 64 61 6e 69 65 6c 6b 31  2:25:16 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 71 6c  lete test.db.sql
05a0: 69 74 65 33 20 64 62 20 74 65 73 74 2e 64 62 3b  ite3 db test.db;
05b0: 20 73 65 74 20 44 42 20 5b 73 71 6c 69 74 65 33   set DB [sqlite3
05c0: 5f 63 6f 6e 6e 65 63 74 69 6f 6e 5f 70 6f 69 6e  _connection_poin
05d0: 74 65 72 20 64 62 5d 0a 0a 69 66 63 61 70 61 62  ter db]..ifcapab
05e0: 6c 65 20 70 61 67 65 72 5f 70 72 61 67 6d 61 73  le pager_pragmas
05f0: 20 7b 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d   {.do_test pragm
0600: 61 2d 31 2e 31 20 7b 0a 20 20 65 78 65 63 73 71  a-1.1 {.  execsq
0610: 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 63  l {.    PRAGMA 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 64 65 66 61 75 6c 74 5f 63 61  RAGMA default_ca
0640: 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 50 52  che_size;.    PR
0650: 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73  AGMA synchronous
0660: 3b 0a 20 20 7d 0a 7d 20 7b 32 30 30 30 20 32 30  ;.  }.} {2000 20
0670: 30 30 20 32 7d 0a 64 6f 5f 74 65 73 74 20 70 72  00 2}.do_test pr
0680: 61 67 6d 61 2d 31 2e 32 20 7b 0a 20 20 65 78 65  agma-1.2 {.  exe
0690: 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d  csql {.    PRAGM
06a0: 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3d 4f 46  A synchronous=OF
06b0: 46 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 63 61  F;.    PRAGMA ca
06c0: 63 68 65 5f 73 69 7a 65 3d 31 32 33 34 3b 0a 20  che_size=1234;. 
06d0: 20 20 20 50 52 41 47 4d 41 20 63 61 63 68 65 5f     PRAGMA cache_
06e0: 73 69 7a 65 3b 0a 20 20 20 20 50 52 41 47 4d 41  size;.    PRAGMA
06f0: 20 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73   default_cache_s
0700: 69 7a 65 3b 0a 20 20 20 20 50 52 41 47 4d 41 20  ize;.    PRAGMA 
0710: 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20 20 7d  synchronous;.  }
0720: 0a 7d 20 7b 31 32 33 34 20 32 30 30 30 20 30 7d  .} {1234 2000 0}
0730: 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d  .do_test pragma-
0740: 31 2e 33 20 7b 0a 20 20 64 62 20 63 6c 6f 73 65  1.3 {.  db close
0750: 0a 20 20 73 71 6c 69 74 65 33 20 64 62 20 74 65  .  sqlite3 db te
0760: 73 74 2e 64 62 0a 20 20 65 78 65 63 73 71 6c 20  st.db.  execsql 
0770: 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 63 61 63  {.    PRAGMA cac
0780: 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 50 52 41  he_size;.    PRA
0790: 47 4d 41 20 64 65 66 61 75 6c 74 5f 63 61 63 68  GMA default_cach
07a0: 65 5f 73 69 7a 65 3b 0a 20 20 20 20 50 52 41 47  e_size;.    PRAG
07b0: 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a  MA synchronous;.
07c0: 20 20 7d 0a 7d 20 7b 32 30 30 30 20 32 30 30 30    }.} {2000 2000
07d0: 20 32 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67   2}.do_test prag
07e0: 6d 61 2d 31 2e 34 20 7b 0a 20 20 65 78 65 63 73  ma-1.4 {.  execs
07f0: 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20  ql {.    PRAGMA 
0800: 73 79 6e 63 68 72 6f 6e 6f 75 73 3d 4f 46 46 3b  synchronous=OFF;
0810: 0a 20 20 20 20 50 52 41 47 4d 41 20 63 61 63 68  .    PRAGMA cach
0820: 65 5f 73 69 7a 65 3b 0a 20 20 20 20 50 52 41 47  e_size;.    PRAG
0830: 4d 41 20 64 65 66 61 75 6c 74 5f 63 61 63 68 65  MA default_cache
0840: 5f 73 69 7a 65 3b 0a 20 20 20 20 50 52 41 47 4d  _size;.    PRAGM
0850: 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20  A synchronous;. 
0860: 20 7d 0a 7d 20 7b 32 30 30 30 20 32 30 30 30 20   }.} {2000 2000 
0870: 30 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  0}.do_test pragm
0880: 61 2d 31 2e 35 20 7b 0a 20 20 65 78 65 63 73 71  a-1.5 {.  execsq
0890: 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 63  l {.    PRAGMA c
08a0: 61 63 68 65 5f 73 69 7a 65 3d 34 33 32 31 3b 0a  ache_size=4321;.
08b0: 20 20 20 20 50 52 41 47 4d 41 20 63 61 63 68 65      PRAGMA cache
08c0: 5f 73 69 7a 65 3b 0a 20 20 20 20 50 52 41 47 4d  _size;.    PRAGM
08d0: 41 20 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f  A default_cache_
08e0: 73 69 7a 65 3b 0a 20 20 20 20 50 52 41 47 4d 41  size;.    PRAGMA
08f0: 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20 20   synchronous;.  
0900: 7d 0a 7d 20 7b 34 33 32 31 20 32 30 30 30 20 30  }.} {4321 2000 0
0910: 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  }.do_test pragma
0920: 2d 31 2e 36 20 7b 0a 20 20 65 78 65 63 73 71 6c  -1.6 {.  execsql
0930: 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 73 79   {.    PRAGMA sy
0940: 6e 63 68 72 6f 6e 6f 75 73 3d 4f 4e 3b 0a 20 20  nchronous=ON;.  
0950: 20 20 50 52 41 47 4d 41 20 63 61 63 68 65 5f 73    PRAGMA cache_s
0960: 69 7a 65 3b 0a 20 20 20 20 50 52 41 47 4d 41 20  ize;.    PRAGMA 
0970: 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69  default_cache_si
0980: 7a 65 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 73  ze;.    PRAGMA s
0990: 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20 20 7d 0a  ynchronous;.  }.
09a0: 7d 20 7b 34 33 32 31 20 32 30 30 30 20 31 7d 0a  } {4321 2000 1}.
09b0: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31  do_test pragma-1
09c0: 2e 37 20 7b 0a 20 20 64 62 20 63 6c 6f 73 65 0a  .7 {.  db close.
09d0: 20 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73    sqlite3 db tes
09e0: 74 2e 64 62 0a 20 20 65 78 65 63 73 71 6c 20 7b  t.db.  execsql {
09f0: 0a 20 20 20 20 50 52 41 47 4d 41 20 63 61 63 68  .    PRAGMA cach
0a00: 65 5f 73 69 7a 65 3b 0a 20 20 20 20 50 52 41 47  e_size;.    PRAG
0a10: 4d 41 20 64 65 66 61 75 6c 74 5f 63 61 63 68 65  MA default_cache
0a20: 5f 73 69 7a 65 3b 0a 20 20 20 20 50 52 41 47 4d  _size;.    PRAGM
0a30: 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20  A synchronous;. 
0a40: 20 7d 0a 7d 20 7b 32 30 30 30 20 32 30 30 30 20   }.} {2000 2000 
0a50: 32 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  2}.do_test pragm
0a60: 61 2d 31 2e 38 20 7b 0a 20 20 65 78 65 63 73 71  a-1.8 {.  execsq
0a70: 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 64  l {.    PRAGMA d
0a80: 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a  efault_cache_siz
0a90: 65 3d 31 32 33 3b 0a 20 20 20 20 50 52 41 47 4d  e=123;.    PRAGM
0aa0: 41 20 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20  A cache_size;.  
0ab0: 20 20 50 52 41 47 4d 41 20 64 65 66 61 75 6c 74    PRAGMA default
0ac0: 5f 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20  _cache_size;.   
0ad0: 20 50 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e   PRAGMA synchron
0ae0: 6f 75 73 3b 0a 20 20 7d 0a 7d 20 7b 31 32 33 20  ous;.  }.} {123 
0af0: 31 32 33 20 32 7d 0a 64 6f 5f 74 65 73 74 20 70  123 2}.do_test p
0b00: 72 61 67 6d 61 2d 31 2e 39 2e 31 20 7b 0a 20 20  ragma-1.9.1 {.  
0b10: 64 62 20 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74  db close.  sqlit
0b20: 65 33 20 64 62 20 74 65 73 74 2e 64 62 3b 20 73  e3 db test.db; s
0b30: 65 74 20 3a 3a 44 42 20 5b 73 71 6c 69 74 65 33  et ::DB [sqlite3
0b40: 5f 63 6f 6e 6e 65 63 74 69 6f 6e 5f 70 6f 69 6e  _connection_poin
0b50: 74 65 72 20 64 62 5d 0a 20 20 65 78 65 63 73 71  ter db].  execsq
0b60: 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 63  l {.    PRAGMA c
0b70: 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 50  ache_size;.    P
0b80: 52 41 47 4d 41 20 64 65 66 61 75 6c 74 5f 63 61  RAGMA default_ca
0b90: 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 50 52  che_size;.    PR
0ba0: 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73  AGMA synchronous
0bb0: 3b 0a 20 20 7d 0a 7d 20 7b 31 32 33 20 31 32 33  ;.  }.} {123 123
0bc0: 20 32 7d 0a 69 66 63 61 70 61 62 6c 65 20 76 61   2}.ifcapable va
0bd0: 63 75 75 6d 20 7b 0a 20 20 64 6f 5f 74 65 73 74  cuum {.  do_test
0be0: 20 70 72 61 67 6d 61 2d 31 2e 39 2e 32 20 7b 0a   pragma-1.9.2 {.
0bf0: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20      execsql {.  
0c00: 20 20 20 20 56 41 43 55 55 4d 3b 0a 20 20 20 20      VACUUM;.    
0c10: 20 20 50 52 41 47 4d 41 20 63 61 63 68 65 5f 73    PRAGMA cache_s
0c20: 69 7a 65 3b 0a 20 20 20 20 20 20 50 52 41 47 4d  ize;.      PRAGM
0c30: 41 20 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f  A default_cache_
0c40: 73 69 7a 65 3b 0a 20 20 20 20 20 20 50 52 41 47  size;.      PRAG
0c50: 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a  MA synchronous;.
0c60: 20 20 20 20 7d 0a 20 20 7d 20 7b 31 32 33 20 31      }.  } {123 1
0c70: 32 33 20 32 7d 0a 7d 0a 64 6f 5f 74 65 73 74 20  23 2}.}.do_test 
0c80: 70 72 61 67 6d 61 2d 31 2e 31 30 20 7b 0a 20 20  pragma-1.10 {.  
0c90: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52  execsql {.    PR
0ca0: 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73  AGMA synchronous
0cb0: 3d 4e 4f 52 4d 41 4c 3b 0a 20 20 20 20 50 52 41  =NORMAL;.    PRA
0cc0: 47 4d 41 20 63 61 63 68 65 5f 73 69 7a 65 3b 0a  GMA cache_size;.
0cd0: 20 20 20 20 50 52 41 47 4d 41 20 64 65 66 61 75      PRAGMA defau
0ce0: 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20  lt_cache_size;. 
0cf0: 20 20 20 50 52 41 47 4d 41 20 73 79 6e 63 68 72     PRAGMA synchr
0d00: 6f 6e 6f 75 73 3b 0a 20 20 7d 0a 7d 20 7b 31 32  onous;.  }.} {12
0d10: 33 20 31 32 33 20 31 7d 0a 64 6f 5f 74 65 73 74  3 123 1}.do_test
0d20: 20 70 72 61 67 6d 61 2d 31 2e 31 31 20 7b 0a 20   pragma-1.11 {. 
0d30: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50   execsql {.    P
0d40: 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75  RAGMA synchronou
0d50: 73 3d 46 55 4c 4c 3b 0a 20 20 20 20 50 52 41 47  s=FULL;.    PRAG
0d60: 4d 41 20 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20  MA cache_size;. 
0d70: 20 20 20 50 52 41 47 4d 41 20 64 65 66 61 75 6c     PRAGMA defaul
0d80: 74 5f 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20  t_cache_size;.  
0d90: 20 20 50 52 41 47 4d 41 20 73 79 6e 63 68 72 6f    PRAGMA synchro
0da0: 6e 6f 75 73 3b 0a 20 20 7d 0a 7d 20 7b 31 32 33  nous;.  }.} {123
0db0: 20 31 32 33 20 32 7d 0a 64 6f 5f 74 65 73 74 20   123 2}.do_test 
0dc0: 70 72 61 67 6d 61 2d 31 2e 31 32 20 7b 0a 20 20  pragma-1.12 {.  
0dd0: 64 62 20 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74  db close.  sqlit
0de0: 65 33 20 64 62 20 74 65 73 74 2e 64 62 3b 20 73  e3 db test.db; s
0df0: 65 74 20 3a 3a 44 42 20 5b 73 71 6c 69 74 65 33  et ::DB [sqlite3
0e00: 5f 63 6f 6e 6e 65 63 74 69 6f 6e 5f 70 6f 69 6e  _connection_poin
0e10: 74 65 72 20 64 62 5d 0a 20 20 65 78 65 63 73 71  ter db].  execsq
0e20: 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 63  l {.    PRAGMA c
0e30: 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 50  ache_size;.    P
0e40: 52 41 47 4d 41 20 64 65 66 61 75 6c 74 5f 63 61  RAGMA default_ca
0e50: 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 50 52  che_size;.    PR
0e60: 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73  AGMA synchronous
0e70: 3b 0a 20 20 7d 0a 7d 20 7b 31 32 33 20 31 32 33  ;.  }.} {123 123
0e80: 20 32 7d 0a 0a 23 20 4d 61 6b 65 20 73 75 72 65   2}..# Make sure
0e90: 20 74 68 65 20 70 72 61 67 6d 61 20 68 61 6e 64   the pragma hand
0ea0: 6c 65 72 20 75 6e 64 65 72 73 74 61 6e 64 73 20  ler understands 
0eb0: 6e 75 6d 65 72 69 63 20 76 61 6c 75 65 73 20 69  numeric values i
0ec0: 6e 20 61 64 64 69 74 69 6f 6e 0a 23 20 74 6f 20  n addition.# to 
0ed0: 6b 65 79 77 6f 72 64 73 20 6c 69 6b 65 20 22 6f  keywords like "o
0ee0: 66 66 22 20 61 6e 64 20 22 66 75 6c 6c 22 2e 0a  ff" and "full"..
0ef0: 23 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  #.do_test pragma
0f00: 2d 31 2e 31 33 20 7b 0a 20 20 65 78 65 63 73 71  -1.13 {.  execsq
0f10: 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 73  l {.    PRAGMA s
0f20: 79 6e 63 68 72 6f 6e 6f 75 73 3d 30 3b 0a 20 20  ynchronous=0;.  
0f30: 20 20 50 52 41 47 4d 41 20 73 79 6e 63 68 72 6f    PRAGMA synchro
0f40: 6e 6f 75 73 3b 0a 20 20 7d 0a 7d 20 7b 30 7d 0a  nous;.  }.} {0}.
0f50: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31  do_test pragma-1
0f60: 2e 31 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  .14 {.  execsql 
0f70: 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 73 79 6e  {.    PRAGMA syn
0f80: 63 68 72 6f 6e 6f 75 73 3d 32 3b 0a 20 20 20 20  chronous=2;.    
0f90: 50 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f  PRAGMA synchrono
0fa0: 75 73 3b 0a 20 20 7d 0a 7d 20 7b 32 7d 0a 7d 20  us;.  }.} {2}.} 
0fb0: 3b 23 20 69 66 63 61 70 61 62 6c 65 20 70 61 67  ;# ifcapable pag
0fc0: 65 72 5f 70 72 61 67 6d 61 73 0a 0a 23 20 54 65  er_pragmas..# Te
0fd0: 73 74 20 74 75 72 6e 69 6e 67 20 22 66 6c 61 67  st turning "flag
0fe0: 22 20 70 72 61 67 6d 61 73 20 6f 6e 20 61 6e 64  " pragmas on and
0ff0: 20 6f 66 66 2e 0a 23 0a 64 6f 5f 74 65 73 74 20   off..#.do_test 
1000: 70 72 61 67 6d 61 2d 31 2e 31 35 20 7b 0a 20 20  pragma-1.15 {.  
1010: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52  execsql {.    PR
1020: 41 47 4d 41 20 76 64 62 65 5f 6c 69 73 74 69 6e  AGMA vdbe_listin
1030: 67 3d 59 45 53 3b 0a 20 20 20 20 50 52 41 47 4d  g=YES;.    PRAGM
1040: 41 20 76 64 62 65 5f 6c 69 73 74 69 6e 67 3b 0a  A vdbe_listing;.
1050: 20 20 7d 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73    }.} {1}.do_tes
1060: 74 20 70 72 61 67 6d 61 2d 31 2e 31 36 20 7b 0a  t pragma-1.16 {.
1070: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
1080: 50 52 41 47 4d 41 20 76 64 62 65 5f 6c 69 73 74  PRAGMA vdbe_list
1090: 69 6e 67 3d 4e 4f 3b 0a 20 20 20 20 50 52 41 47  ing=NO;.    PRAG
10a0: 4d 41 20 76 64 62 65 5f 6c 69 73 74 69 6e 67 3b  MA vdbe_listing;
10b0: 0a 20 20 7d 0a 7d 20 7b 30 7d 0a 64 6f 5f 74 65  .  }.} {0}.do_te
10c0: 73 74 20 70 72 61 67 6d 61 2d 31 2e 31 37 20 7b  st pragma-1.17 {
10d0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
10e0: 20 50 52 41 47 4d 41 20 70 61 72 73 65 72 5f 74   PRAGMA parser_t
10f0: 72 61 63 65 3d 4f 4e 3b 0a 20 20 20 20 50 52 41  race=ON;.    PRA
1100: 47 4d 41 20 70 61 72 73 65 72 5f 74 72 61 63 65  GMA parser_trace
1110: 3d 4f 46 46 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64  =OFF;.  }.} {}.d
1120: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 2e  o_test pragma-1.
1130: 31 38 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  18 {.  execsql {
1140: 0a 20 20 20 20 50 52 41 47 4d 41 20 62 6f 67 75  .    PRAGMA bogu
1150: 73 20 3d 20 2d 31 32 33 34 3b 20 20 2d 2d 20 50  s = -1234;  -- P
1160: 61 72 73 69 6e 67 20 6f 66 20 6e 65 67 61 74 69  arsing of negati
1170: 76 65 20 76 61 6c 75 65 73 0a 20 20 7d 0a 7d 20  ve values.  }.} 
1180: 7b 7d 0a 0a 23 20 54 65 73 74 20 6d 6f 64 69 66  {}..# Test modif
1190: 79 69 6e 67 20 74 68 65 20 73 61 66 65 74 79 5f  ying the safety_
11a0: 6c 65 76 65 6c 20 6f 66 20 61 6e 20 61 74 74 61  level of an atta
11b0: 63 68 65 64 20 64 61 74 61 62 61 73 65 2e 0a 64  ched database..d
11c0: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 32 2e  o_test pragma-2.
11d0: 31 20 7b 0a 20 20 66 69 6c 65 20 64 65 6c 65 74  1 {.  file delet
11e0: 65 20 2d 66 6f 72 63 65 20 74 65 73 74 32 2e 64  e -force test2.d
11f0: 62 0a 20 20 66 69 6c 65 20 64 65 6c 65 74 65 20  b.  file delete 
1200: 2d 66 6f 72 63 65 20 74 65 73 74 32 2e 64 62 2d  -force test2.db-
1210: 6a 6f 75 72 6e 61 6c 0a 20 20 65 78 65 63 73 71  journal.  execsq
1220: 6c 20 7b 0a 20 20 20 20 41 54 54 41 43 48 20 27  l {.    ATTACH '
1230: 74 65 73 74 32 2e 64 62 27 20 41 53 20 61 75 78  test2.db' AS aux
1240: 3b 0a 20 20 7d 20 0a 7d 20 7b 7d 0a 69 66 63 61  ;.  } .} {}.ifca
1250: 70 61 62 6c 65 20 70 61 67 65 72 5f 70 72 61 67  pable pager_prag
1260: 6d 61 73 20 7b 0a 64 6f 5f 74 65 73 74 20 70 72  mas {.do_test pr
1270: 61 67 6d 61 2d 32 2e 32 20 7b 0a 20 20 65 78 65  agma-2.2 {.  exe
1280: 63 73 71 6c 20 7b 0a 20 20 20 20 70 72 61 67 6d  csql {.    pragm
1290: 61 20 61 75 78 2e 73 79 6e 63 68 72 6f 6e 6f 75  a aux.synchronou
12a0: 73 3b 0a 20 20 7d 20 0a 7d 20 7b 32 7d 0a 64 6f  s;.  } .} {2}.do
12b0: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 32 2e 33  _test pragma-2.3
12c0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
12d0: 20 20 20 70 72 61 67 6d 61 20 61 75 78 2e 73 79     pragma aux.sy
12e0: 6e 63 68 72 6f 6e 6f 75 73 20 3d 20 4f 46 46 3b  nchronous = OFF;
12f0: 0a 20 20 20 20 70 72 61 67 6d 61 20 61 75 78 2e  .    pragma aux.
1300: 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20 20 20  synchronous;.   
1310: 20 70 72 61 67 6d 61 20 73 79 6e 63 68 72 6f 6e   pragma synchron
1320: 6f 75 73 3b 0a 20 20 7d 20 0a 7d 20 7b 30 20 32  ous;.  } .} {0 2
1330: 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  }.do_test pragma
1340: 2d 32 2e 34 20 7b 0a 20 20 65 78 65 63 73 71 6c  -2.4 {.  execsql
1350: 20 7b 0a 20 20 20 20 70 72 61 67 6d 61 20 61 75   {.    pragma au
1360: 78 2e 73 79 6e 63 68 72 6f 6e 6f 75 73 20 3d 20  x.synchronous = 
1370: 4f 4e 3b 0a 20 20 20 20 70 72 61 67 6d 61 20 73  ON;.    pragma s
1380: 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20 20 20 20  ynchronous;.    
1390: 70 72 61 67 6d 61 20 61 75 78 2e 73 79 6e 63 68  pragma aux.synch
13a0: 72 6f 6e 6f 75 73 3b 0a 20 20 7d 20 0a 7d 20 7b  ronous;.  } .} {
13b0: 32 20 31 7d 0a 7d 20 3b 23 20 69 66 63 61 70 61  2 1}.} ;# ifcapa
13c0: 62 6c 65 20 70 61 67 65 72 5f 70 72 61 67 6d 61  ble pager_pragma
13d0: 73 0a 0a 23 20 43 6f 6e 73 74 72 75 63 74 20 61  s..# Construct a
13e0: 20 63 6f 72 72 75 70 74 65 64 20 69 6e 64 65 78   corrupted index
13f0: 20 61 6e 64 20 6d 61 6b 65 20 73 75 72 65 20 74   and make sure t
1400: 68 65 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65  he integrity_che
1410: 63 6b 0a 23 20 70 72 61 67 6d 61 20 66 69 6e 64  ck.# pragma find
1420: 73 20 69 74 2e 0a 23 0a 23 20 54 68 65 73 65 20  s it..#.# These 
1430: 74 65 73 74 73 20 77 6f 6e 27 74 20 77 6f 72 6b  tests won't work
1440: 20 69 66 20 74 68 65 20 64 61 74 61 62 61 73 65   if the database
1450: 20 69 73 20 65 6e 63 72 79 70 74 65 64 0a 23 0a   is encrypted.#.
1460: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 33  do_test pragma-3
1470: 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .1 {.  execsql {
1480: 0a 20 20 20 20 42 45 47 49 4e 3b 0a 20 20 20 20  .    BEGIN;.    
1490: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 32 28  CREATE TABLE t2(
14a0: 61 2c 62 2c 63 29 3b 0a 20 20 20 20 43 52 45 41  a,b,c);.    CREA
14b0: 54 45 20 49 4e 44 45 58 20 69 32 20 4f 4e 20 74  TE INDEX i2 ON t
14c0: 32 28 61 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  2(a);.    INSERT
14d0: 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28   INTO t2 VALUES(
14e0: 31 31 2c 32 2c 33 29 3b 0a 20 20 20 20 49 4e 53  11,2,3);.    INS
14f0: 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55  ERT INTO t2 VALU
1500: 45 53 28 32 32 2c 33 2c 34 29 3b 0a 20 20 20 20  ES(22,3,4);.    
1510: 43 4f 4d 4d 49 54 3b 0a 20 20 20 20 53 45 4c 45  COMMIT;.    SELE
1520: 43 54 20 72 6f 77 69 64 2c 20 2a 20 66 72 6f 6d  CT rowid, * from
1530: 20 74 32 3b 0a 20 20 7d 0a 7d 20 7b 31 20 31 31   t2;.  }.} {1 11
1540: 20 32 20 33 20 32 20 32 32 20 33 20 34 7d 0a 69   2 3 2 22 3 4}.i
1550: 66 20 7b 21 5b 73 71 6c 69 74 65 33 20 2d 68 61  f {![sqlite3 -ha
1560: 73 2d 63 6f 64 65 63 5d 20 26 26 20 24 73 71 6c  s-codec] && $sql
1570: 69 74 65 5f 6f 70 74 69 6f 6e 73 28 69 6e 74 65  ite_options(inte
1580: 67 72 69 74 79 63 6b 29 7d 20 7b 0a 20 20 64 6f  grityck)} {.  do
1590: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 33 2e 32  _test pragma-3.2
15a0: 20 7b 0a 20 20 20 20 73 65 74 20 72 6f 6f 74 70   {.    set rootp
15b0: 61 67 65 20 5b 65 78 65 63 73 71 6c 20 7b 53 45  age [execsql {SE
15c0: 4c 45 43 54 20 72 6f 6f 74 70 61 67 65 20 46 52  LECT rootpage FR
15d0: 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  OM sqlite_master
15e0: 20 57 48 45 52 45 20 6e 61 6d 65 3d 27 69 32 27   WHERE name='i2'
15f0: 7d 5d 0a 20 20 20 20 73 65 74 20 64 62 20 5b 62  }].    set db [b
1600: 74 72 65 65 5f 6f 70 65 6e 20 74 65 73 74 2e 64  tree_open test.d
1610: 62 20 31 30 30 20 30 5d 0a 20 20 20 20 62 74 72  b 100 0].    btr
1620: 65 65 5f 62 65 67 69 6e 5f 74 72 61 6e 73 61 63  ee_begin_transac
1630: 74 69 6f 6e 20 24 64 62 0a 20 20 20 20 73 65 74  tion $db.    set
1640: 20 63 20 5b 62 74 72 65 65 5f 63 75 72 73 6f 72   c [btree_cursor
1650: 20 24 64 62 20 24 72 6f 6f 74 70 61 67 65 20 31   $db $rootpage 1
1660: 5d 0a 20 20 20 20 62 74 72 65 65 5f 66 69 72 73  ].    btree_firs
1670: 74 20 24 63 0a 20 20 20 20 62 74 72 65 65 5f 64  t $c.    btree_d
1680: 65 6c 65 74 65 20 24 63 0a 20 20 20 20 62 74 72  elete $c.    btr
1690: 65 65 5f 63 6f 6d 6d 69 74 20 24 64 62 0a 20 20  ee_commit $db.  
16a0: 20 20 62 74 72 65 65 5f 63 6c 6f 73 65 20 24 64    btree_close $d
16b0: 62 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 50  b.    execsql {P
16c0: 52 41 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f  RAGMA integrity_
16d0: 63 68 65 63 6b 7d 0a 20 20 7d 20 7b 7b 72 6f 77  check}.  } {{row
16e0: 69 64 20 31 20 6d 69 73 73 69 6e 67 20 66 72 6f  id 1 missing fro
16f0: 6d 20 69 6e 64 65 78 20 69 32 7d 20 7b 77 72 6f  m index i2} {wro
1700: 6e 67 20 23 20 6f 66 20 65 6e 74 72 69 65 73 20  ng # of entries 
1710: 69 6e 20 69 6e 64 65 78 20 69 32 7d 7d 0a 7d 0a  in index i2}}.}.
1720: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 33  do_test pragma-3
1730: 2e 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .3 {.  execsql {
1740: 0a 20 20 20 20 44 52 4f 50 20 49 4e 44 45 58 20  .    DROP INDEX 
1750: 69 32 3b 0a 20 20 7d 20 0a 7d 20 7b 7d 0a 0a 23  i2;.  } .} {}..#
1760: 20 54 65 73 74 20 6d 6f 64 69 66 79 69 6e 67 20   Test modifying 
1770: 74 68 65 20 63 61 63 68 65 5f 73 69 7a 65 20 6f  the cache_size o
1780: 66 20 61 6e 20 61 74 74 61 63 68 65 64 20 64 61  f an attached da
1790: 74 61 62 61 73 65 2e 0a 69 66 63 61 70 61 62 6c  tabase..ifcapabl
17a0: 65 20 70 61 67 65 72 5f 70 72 61 67 6d 61 73 20  e pager_pragmas 
17b0: 7b 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  {.do_test pragma
17c0: 2d 34 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c  -4.1 {.  execsql
17d0: 20 7b 0a 20 20 20 20 70 72 61 67 6d 61 20 61 75   {.    pragma au
17e0: 78 2e 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20  x.cache_size;.  
17f0: 20 20 70 72 61 67 6d 61 20 61 75 78 2e 64 65 66    pragma aux.def
1800: 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65 3b  ault_cache_size;
1810: 0a 20 20 7d 20 0a 7d 20 7b 32 30 30 30 20 32 30  .  } .} {2000 20
1820: 30 30 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67  00}.do_test prag
1830: 6d 61 2d 34 2e 32 20 7b 0a 20 20 65 78 65 63 73  ma-4.2 {.  execs
1840: 71 6c 20 7b 0a 20 20 20 20 70 72 61 67 6d 61 20  ql {.    pragma 
1850: 61 75 78 2e 63 61 63 68 65 5f 73 69 7a 65 20 3d  aux.cache_size =
1860: 20 35 30 3b 0a 20 20 20 20 70 72 61 67 6d 61 20   50;.    pragma 
1870: 61 75 78 2e 63 61 63 68 65 5f 73 69 7a 65 3b 0a  aux.cache_size;.
1880: 20 20 20 20 70 72 61 67 6d 61 20 61 75 78 2e 64      pragma aux.d
1890: 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a  efault_cache_siz
18a0: 65 3b 0a 20 20 7d 20 0a 7d 20 7b 35 30 20 32 30  e;.  } .} {50 20
18b0: 30 30 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67  00}.do_test prag
18c0: 6d 61 2d 34 2e 33 20 7b 0a 20 20 65 78 65 63 73  ma-4.3 {.  execs
18d0: 71 6c 20 7b 0a 20 20 20 20 70 72 61 67 6d 61 20  ql {.    pragma 
18e0: 61 75 78 2e 64 65 66 61 75 6c 74 5f 63 61 63 68  aux.default_cach
18f0: 65 5f 73 69 7a 65 20 3d 20 34 35 36 3b 0a 20 20  e_size = 456;.  
1900: 20 20 70 72 61 67 6d 61 20 61 75 78 2e 63 61 63    pragma aux.cac
1910: 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 70 72 61  he_size;.    pra
1920: 67 6d 61 20 61 75 78 2e 64 65 66 61 75 6c 74 5f  gma aux.default_
1930: 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 7d 20  cache_size;.  } 
1940: 0a 7d 20 7b 34 35 36 20 34 35 36 7d 0a 64 6f 5f  .} {456 456}.do_
1950: 74 65 73 74 20 70 72 61 67 6d 61 2d 34 2e 34 20  test pragma-4.4 
1960: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
1970: 20 20 70 72 61 67 6d 61 20 63 61 63 68 65 5f 73    pragma cache_s
1980: 69 7a 65 3b 0a 20 20 20 20 70 72 61 67 6d 61 20  ize;.    pragma 
1990: 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69  default_cache_si
19a0: 7a 65 3b 0a 20 20 7d 20 0a 7d 20 7b 31 32 33 20  ze;.  } .} {123 
19b0: 31 32 33 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61  123}.do_test pra
19c0: 67 6d 61 2d 34 2e 35 20 7b 0a 20 20 65 78 65 63  gma-4.5 {.  exec
19d0: 73 71 6c 20 7b 0a 20 20 20 20 44 45 54 41 43 48  sql {.    DETACH
19e0: 20 61 75 78 3b 0a 20 20 20 20 41 54 54 41 43 48   aux;.    ATTACH
19f0: 20 27 74 65 73 74 33 2e 64 62 27 20 41 53 20 61   'test3.db' AS a
1a00: 75 78 3b 0a 20 20 20 20 70 72 61 67 6d 61 20 61  ux;.    pragma a
1a10: 75 78 2e 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20  ux.cache_size;. 
1a20: 20 20 20 70 72 61 67 6d 61 20 61 75 78 2e 64 65     pragma aux.de
1a30: 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65  fault_cache_size
1a40: 3b 0a 20 20 7d 20 0a 7d 20 7b 32 30 30 30 20 32  ;.  } .} {2000 2
1a50: 30 30 30 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61  000}.do_test pra
1a60: 67 6d 61 2d 34 2e 36 20 7b 0a 20 20 65 78 65 63  gma-4.6 {.  exec
1a70: 73 71 6c 20 7b 0a 20 20 20 20 44 45 54 41 43 48  sql {.    DETACH
1a80: 20 61 75 78 3b 0a 20 20 20 20 41 54 54 41 43 48   aux;.    ATTACH
1a90: 20 27 74 65 73 74 32 2e 64 62 27 20 41 53 20 61   'test2.db' AS a
1aa0: 75 78 3b 0a 20 20 20 20 70 72 61 67 6d 61 20 61  ux;.    pragma a
1ab0: 75 78 2e 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20  ux.cache_size;. 
1ac0: 20 20 20 70 72 61 67 6d 61 20 61 75 78 2e 64 65     pragma aux.de
1ad0: 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65  fault_cache_size
1ae0: 3b 0a 20 20 7d 20 0a 7d 20 7b 34 35 36 20 34 35  ;.  } .} {456 45
1af0: 36 7d 0a 7d 20 3b 23 20 69 66 63 61 70 61 62 6c  6}.} ;# ifcapabl
1b00: 65 20 70 61 67 65 72 5f 70 72 61 67 6d 61 73 0a  e pager_pragmas.
1b10: 0a 23 20 54 65 73 74 20 74 68 61 74 20 6d 6f 64  .# Test that mod
1b20: 69 66 79 69 6e 67 20 74 68 65 20 73 79 6e 63 2d  ifying the sync-
1b30: 6c 65 76 65 6c 20 69 6e 20 74 68 65 20 6d 69 64  level in the mid
1b40: 64 6c 65 20 6f 66 20 61 20 74 72 61 6e 73 61 63  dle of a transac
1b50: 74 69 6f 6e 20 69 73 0a 23 20 64 69 73 61 6c 6c  tion is.# disall
1b60: 6f 77 65 64 2e 0a 69 66 63 61 70 61 62 6c 65 20  owed..ifcapable 
1b70: 70 61 67 65 72 5f 70 72 61 67 6d 61 73 20 7b 0a  pager_pragmas {.
1b80: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 35  do_test pragma-5
1b90: 2e 30 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .0 {.  execsql {
1ba0: 0a 20 20 20 20 70 72 61 67 6d 61 20 73 79 6e 63  .    pragma sync
1bb0: 68 72 6f 6e 6f 75 73 3b 0a 20 20 7d 20 0a 7d 20  hronous;.  } .} 
1bc0: 7b 32 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67  {2}.do_test prag
1bd0: 6d 61 2d 35 2e 31 20 7b 0a 20 20 63 61 74 63 68  ma-5.1 {.  catch
1be0: 73 71 6c 20 7b 0a 20 20 20 20 42 45 47 49 4e 3b  sql {.    BEGIN;
1bf0: 0a 20 20 20 20 70 72 61 67 6d 61 20 73 79 6e 63  .    pragma sync
1c00: 68 72 6f 6e 6f 75 73 20 3d 20 4f 46 46 3b 0a 20  hronous = OFF;. 
1c10: 20 7d 20 0a 7d 20 7b 31 20 7b 53 61 66 65 74 79   } .} {1 {Safety
1c20: 20 6c 65 76 65 6c 20 6d 61 79 20 6e 6f 74 20 62   level may not b
1c30: 65 20 63 68 61 6e 67 65 64 20 69 6e 73 69 64 65  e changed inside
1c40: 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 7d 7d   a transaction}}
1c50: 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d  .do_test pragma-
1c60: 35 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  5.2 {.  execsql 
1c70: 7b 0a 20 20 20 20 70 72 61 67 6d 61 20 73 79 6e  {.    pragma syn
1c80: 63 68 72 6f 6e 6f 75 73 3b 0a 20 20 7d 20 0a 7d  chronous;.  } .}
1c90: 20 7b 32 7d 0a 63 61 74 63 68 73 71 6c 20 7b 43   {2}.catchsql {C
1ca0: 4f 4d 4d 49 54 3b 7d 0a 7d 20 3b 23 20 69 66 63  OMMIT;}.} ;# ifc
1cb0: 61 70 61 62 6c 65 20 70 61 67 65 72 5f 70 72 61  apable pager_pra
1cc0: 67 6d 61 73 0a 0a 23 20 54 65 73 74 20 73 63 68  gmas..# Test sch
1cd0: 65 6d 61 2d 71 75 65 72 79 20 70 72 61 67 6d 61  ema-query pragma
1ce0: 73 0a 23 0a 69 66 63 61 70 61 62 6c 65 20 73 63  s.#.ifcapable sc
1cf0: 68 65 6d 61 5f 70 72 61 67 6d 61 73 20 7b 0a 69  hema_pragmas {.i
1d00: 66 63 61 70 61 62 6c 65 20 74 65 6d 70 64 62 20  fcapable tempdb 
1d10: 7b 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67  {.  do_test prag
1d20: 6d 61 2d 36 2e 31 20 7b 0a 20 20 20 20 73 65 74  ma-6.1 {.    set
1d30: 20 72 65 73 20 7b 7d 0a 20 20 20 20 65 78 65 63   res {}.    exec
1d40: 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52  sql {SELECT * FR
1d50: 4f 4d 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d  OM sqlite_temp_m
1d60: 61 73 74 65 72 7d 0a 20 20 20 20 66 6f 72 65 61  aster}.    forea
1d70: 63 68 20 7b 69 64 78 20 6e 61 6d 65 20 66 69 6c  ch {idx name fil
1d80: 65 7d 20 5b 65 78 65 63 73 71 6c 20 7b 70 72 61  e} [execsql {pra
1d90: 67 6d 61 20 64 61 74 61 62 61 73 65 5f 6c 69 73  gma database_lis
1da0: 74 7d 5d 20 7b 0a 20 20 20 20 20 20 6c 61 70 70  t}] {.      lapp
1db0: 65 6e 64 20 72 65 73 20 24 69 64 78 20 24 6e 61  end res $idx $na
1dc0: 6d 65 0a 20 20 20 20 7d 0a 20 20 20 20 73 65 74  me.    }.    set
1dd0: 20 72 65 73 0a 20 20 7d 20 7b 30 20 6d 61 69 6e   res.  } {0 main
1de0: 20 31 20 74 65 6d 70 20 32 20 61 75 78 7d 0a 7d   1 temp 2 aux}.}
1df0: 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d  .do_test pragma-
1e00: 36 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  6.2 {.  execsql 
1e10: 7b 0a 20 20 20 20 70 72 61 67 6d 61 20 74 61 62  {.    pragma tab
1e20: 6c 65 5f 69 6e 66 6f 28 74 32 29 0a 20 20 7d 0a  le_info(t2).  }.
1e30: 7d 20 7b 30 20 61 20 6e 75 6d 65 72 69 63 20 30  } {0 a numeric 0
1e40: 20 7b 7d 20 30 20 31 20 62 20 6e 75 6d 65 72 69   {} 0 1 b numeri
1e50: 63 20 30 20 7b 7d 20 30 20 32 20 63 20 6e 75 6d  c 0 {} 0 2 c num
1e60: 65 72 69 63 20 30 20 7b 7d 20 30 7d 0a 69 66 63  eric 0 {} 0}.ifc
1e70: 61 70 61 62 6c 65 20 7b 66 6f 72 65 69 67 6e 6b  apable {foreignk
1e80: 65 79 7d 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20  ey} {.  do_test 
1e90: 70 72 61 67 6d 61 2d 36 2e 33 20 7b 0a 20 20 20  pragma-6.3 {.   
1ea0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20   execsql {.     
1eb0: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 33   CREATE TABLE t3
1ec0: 28 61 20 69 6e 74 20 72 65 66 65 72 65 6e 63 65  (a int reference
1ed0: 73 20 74 32 28 62 29 2c 20 62 20 55 4e 49 51 55  s t2(b), b UNIQU
1ee0: 45 29 3b 0a 20 20 20 20 20 20 70 72 61 67 6d 61  E);.      pragma
1ef0: 20 66 6f 72 65 69 67 6e 5f 6b 65 79 5f 6c 69 73   foreign_key_lis
1f00: 74 28 74 33 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  t(t3);.    }.  }
1f10: 20 7b 30 20 30 20 74 32 20 61 20 62 7d 0a 20 20   {0 0 t2 a b}.  
1f20: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 36  do_test pragma-6
1f30: 2e 34 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  .4 {.    execsql
1f40: 20 7b 0a 20 20 20 20 20 20 70 72 61 67 6d 61 20   {.      pragma 
1f50: 69 6e 64 65 78 5f 6c 69 73 74 28 74 33 29 3b 0a  index_list(t3);.
1f60: 20 20 20 20 7d 0a 20 20 7d 20 7b 30 20 73 71 6c      }.  } {0 sql
1f70: 69 74 65 5f 61 75 74 6f 69 6e 64 65 78 5f 74 33  ite_autoindex_t3
1f80: 5f 31 20 31 7d 0a 7d 0a 69 66 63 61 70 61 62 6c  _1 1}.}.ifcapabl
1f90: 65 20 7b 21 66 6f 72 65 69 67 6e 6b 65 79 7d 20  e {!foreignkey} 
1fa0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 43 52 45  {.  execsql {CRE
1fb0: 41 54 45 20 54 41 42 4c 45 20 74 33 28 61 2c 62  ATE TABLE t3(a,b
1fc0: 20 55 4e 49 51 55 45 29 7d 0a 7d 0a 64 6f 5f 74   UNIQUE)}.}.do_t
1fd0: 65 73 74 20 70 72 61 67 6d 61 2d 36 2e 35 20 7b  est pragma-6.5 {
1fe0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
1ff0: 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 74 33   CREATE INDEX t3
2000: 69 31 20 4f 4e 20 74 33 28 61 2c 62 29 3b 0a 20  i1 ON t3(a,b);. 
2010: 20 20 20 70 72 61 67 6d 61 20 69 6e 64 65 78 5f     pragma index_
2020: 69 6e 66 6f 28 74 33 69 31 29 3b 0a 20 20 7d 0a  info(t3i1);.  }.
2030: 7d 20 7b 30 20 30 20 61 20 31 20 31 20 62 7d 0a  } {0 0 a 1 1 b}.
2040: 7d 20 3b 23 20 69 66 63 61 70 61 62 6c 65 20 73  } ;# ifcapable s
2050: 63 68 65 6d 61 5f 70 72 61 67 6d 61 73 0a 23 20  chema_pragmas.# 
2060: 4d 69 73 63 65 6c 6c 61 6e 65 6f 75 73 20 74 65  Miscellaneous te
2070: 73 74 73 0a 23 0a 69 66 63 61 70 61 62 6c 65 20  sts.#.ifcapable 
2080: 73 63 68 65 6d 61 5f 70 72 61 67 6d 61 73 20 7b  schema_pragmas {
2090: 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d  .do_test pragma-
20a0: 37 2e 31 20 7b 0a 20 20 23 20 4d 61 6b 65 20 73  7.1 {.  # Make s
20b0: 75 72 65 20 61 20 70 72 61 67 6d 61 20 6b 6e 6f  ure a pragma kno
20c0: 77 73 20 74 6f 20 72 65 61 64 20 74 68 65 20 73  ws to read the s
20d0: 63 68 65 6d 61 20 69 66 20 69 74 20 6e 65 65 64  chema if it need
20e0: 73 20 74 6f 0a 20 20 64 62 20 63 6c 6f 73 65 0a  s to.  db close.
20f0: 20 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73    sqlite3 db tes
2100: 74 2e 64 62 0a 20 20 65 78 65 63 73 71 6c 20 7b  t.db.  execsql {
2110: 0a 20 20 20 20 70 72 61 67 6d 61 20 69 6e 64 65  .    pragma inde
2120: 78 5f 6c 69 73 74 28 74 33 29 3b 0a 20 20 7d 0a  x_list(t3);.  }.
2130: 7d 20 7b 30 20 74 33 69 31 20 30 20 31 20 73 71  } {0 t3i1 0 1 sq
2140: 6c 69 74 65 5f 61 75 74 6f 69 6e 64 65 78 5f 74  lite_autoindex_t
2150: 33 5f 31 20 31 7d 0a 7d 20 3b 23 20 69 66 63 61  3_1 1}.} ;# ifca
2160: 70 61 62 6c 65 20 73 63 68 65 6d 61 5f 70 72 61  pable schema_pra
2170: 67 6d 61 73 0a 69 66 63 61 70 61 62 6c 65 20 7b  gmas.ifcapable {
2180: 75 74 66 31 36 7d 20 7b 0a 20 20 64 6f 5f 74 65  utf16} {.  do_te
2190: 73 74 20 70 72 61 67 6d 61 2d 37 2e 32 20 7b 0a  st pragma-7.2 {.
21a0: 20 20 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 20      db close.   
21b0: 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74   sqlite3 db test
21c0: 2e 64 62 0a 20 20 20 20 63 61 74 63 68 73 71 6c  .db.    catchsql
21d0: 20 7b 0a 20 20 20 20 20 20 70 72 61 67 6d 61 20   {.      pragma 
21e0: 65 6e 63 6f 64 69 6e 67 3d 62 6f 67 75 73 3b 0a  encoding=bogus;.
21f0: 20 20 20 20 7d 0a 20 20 7d 20 7b 31 20 7b 75 6e      }.  } {1 {un
2200: 73 75 70 70 6f 72 74 65 64 20 65 6e 63 6f 64 69  supported encodi
2210: 6e 67 3a 20 62 6f 67 75 73 7d 7d 0a 7d 0a 69 66  ng: bogus}}.}.if
2220: 63 61 70 61 62 6c 65 20 74 65 6d 70 64 62 20 7b  capable tempdb {
2230: 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .  do_test pragm
2240: 61 2d 37 2e 33 20 7b 0a 20 20 20 20 64 62 20 63  a-7.3 {.    db c
2250: 6c 6f 73 65 0a 20 20 20 20 73 71 6c 69 74 65 33  lose.    sqlite3
2260: 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20 20 20   db test.db.    
2270: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
2280: 70 72 61 67 6d 61 20 6c 6f 63 6b 5f 73 74 61 74  pragma lock_stat
2290: 75 73 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 6d  us;.    }.  } {m
22a0: 61 69 6e 20 75 6e 6c 6f 63 6b 65 64 20 74 65 6d  ain unlocked tem
22b0: 70 20 63 6c 6f 73 65 64 7d 0a 7d 20 65 6c 73 65  p closed}.} else
22c0: 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61   {.  do_test pra
22d0: 67 6d 61 2d 37 2e 33 20 7b 0a 20 20 20 20 64 62  gma-7.3 {.    db
22e0: 20 63 6c 6f 73 65 0a 20 20 20 20 73 71 6c 69 74   close.    sqlit
22f0: 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20  e3 db test.db.  
2300: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
2310: 20 20 70 72 61 67 6d 61 20 6c 6f 63 6b 5f 73 74    pragma lock_st
2320: 61 74 75 73 3b 0a 20 20 20 20 7d 0a 20 20 7d 20  atus;.    }.  } 
2330: 7b 6d 61 69 6e 20 75 6e 6c 6f 63 6b 65 64 7d 0a  {main unlocked}.
2340: 7d 0a 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  }...#-----------
2350: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2360: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2370: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2380: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 54 65  -----------.# Te
2390: 73 74 20 63 61 73 65 73 20 70 72 61 67 6d 61 2d  st cases pragma-
23a0: 38 2e 2a 20 74 65 73 74 20 74 68 65 20 22 50 52  8.* test the "PR
23b0: 41 47 4d 41 20 73 63 68 65 6d 61 5f 76 65 72 73  AGMA schema_vers
23c0: 69 6f 6e 22 20 61 6e 64 20 22 50 52 41 47 4d 41  ion" and "PRAGMA
23d0: 0a 23 20 75 73 65 72 5f 76 65 72 73 69 6f 6e 22  .# user_version"
23e0: 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 23 0a 23   statements..#.#
23f0: 20 70 72 61 67 6d 61 2d 38 2e 31 3a 20 50 52 41   pragma-8.1: PRA
2400: 47 4d 41 20 73 63 68 65 6d 61 5f 76 65 72 73 69  GMA schema_versi
2410: 6f 6e 0a 23 20 70 72 61 67 6d 61 2d 38 2e 32 3a  on.# pragma-8.2:
2420: 20 50 52 41 47 4d 41 20 75 73 65 72 5f 76 65 72   PRAGMA user_ver
2430: 73 69 6f 6e 0a 23 0a 0a 69 66 63 61 70 61 62 6c  sion.#..ifcapabl
2440: 65 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e  e schema_version
2450: 20 7b 0a 0a 23 20 46 69 72 73 74 20 63 68 65 63   {..# First chec
2460: 6b 20 74 68 61 74 20 77 65 20 63 61 6e 20 73 65  k that we can se
2470: 74 20 74 68 65 20 73 63 68 65 6d 61 20 76 65 72  t the schema ver
2480: 73 69 6f 6e 20 61 6e 64 20 74 68 65 6e 20 72 65  sion and then re
2490: 74 72 69 65 76 65 20 74 68 65 0a 23 20 73 61 6d  trieve the.# sam
24a0: 65 20 76 61 6c 75 65 2e 0a 64 6f 5f 74 65 73 74  e value..do_test
24b0: 20 70 72 61 67 6d 61 2d 38 2e 31 2e 31 20 7b 0a   pragma-8.1.1 {.
24c0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
24d0: 50 52 41 47 4d 41 20 73 63 68 65 6d 61 5f 76 65  PRAGMA schema_ve
24e0: 72 73 69 6f 6e 20 3d 20 31 30 35 3b 0a 20 20 7d  rsion = 105;.  }
24f0: 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 70 72  .} {}.do_test pr
2500: 61 67 6d 61 2d 38 2e 31 2e 32 20 7b 0a 20 20 65  agma-8.1.2 {.  e
2510: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41  xecsql {.    PRA
2520: 47 4d 41 20 73 63 68 65 6d 61 5f 76 65 72 73 69  GMA schema_versi
2530: 6f 6e 3b 0a 20 20 7d 0a 7d 20 31 30 35 0a 64 6f  on;.  }.} 105.do
2540: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 31  _test pragma-8.1
2550: 2e 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .3 {.  execsql {
2560: 0a 20 20 20 20 50 52 41 47 4d 41 20 73 63 68 65  .    PRAGMA sche
2570: 6d 61 5f 76 65 72 73 69 6f 6e 20 3d 20 31 30 36  ma_version = 106
2580: 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65  ;.  }.} {}.do_te
2590: 73 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e 34 20  st pragma-8.1.4 
25a0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
25b0: 20 20 50 52 41 47 4d 41 20 73 63 68 65 6d 61 5f    PRAGMA schema_
25c0: 76 65 72 73 69 6f 6e 3b 0a 20 20 7d 0a 7d 20 31  version;.  }.} 1
25d0: 30 36 0a 0a 23 20 43 68 65 63 6b 20 74 68 61 74  06..# Check that
25e0: 20 63 72 65 61 74 69 6e 67 20 61 20 74 61 62 6c   creating a tabl
25f0: 65 20 6d 6f 64 69 66 69 65 73 20 74 68 65 20 73  e modifies the s
2600: 63 68 65 6d 61 2d 76 65 72 73 69 6f 6e 20 28 74  chema-version (t
2610: 68 69 73 20 69 73 20 72 65 61 6c 6c 79 0a 23 20  his is really.# 
2620: 74 6f 20 76 65 72 69 66 79 20 74 68 61 74 20 74  to verify that t
2630: 68 65 20 76 61 6c 75 65 20 62 65 69 6e 67 20 72  he value being r
2640: 65 61 64 20 69 73 20 69 6e 20 66 61 63 74 20 74  ead is in fact t
2650: 68 65 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f  he schema versio
2660: 6e 29 2e 0a 64 6f 5f 74 65 73 74 20 70 72 61 67  n)..do_test prag
2670: 6d 61 2d 38 2e 31 2e 35 20 7b 0a 20 20 65 78 65  ma-8.1.5 {.  exe
2680: 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54  csql {.    CREAT
2690: 45 20 54 41 42 4c 45 20 74 34 28 61 2c 20 62 2c  E TABLE t4(a, b,
26a0: 20 63 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20   c);.    INSERT 
26b0: 49 4e 54 4f 20 74 34 20 56 41 4c 55 45 53 28 31  INTO t4 VALUES(1
26c0: 2c 20 32 2c 20 33 29 3b 0a 20 20 20 20 53 45 4c  , 2, 3);.    SEL
26d0: 45 43 54 20 2a 20 46 52 4f 4d 20 74 34 3b 0a 20  ECT * FROM t4;. 
26e0: 20 7d 0a 7d 20 7b 31 20 32 20 33 7d 0a 64 6f 5f   }.} {1 2 3}.do_
26f0: 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e  test pragma-8.1.
2700: 36 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  6 {.  execsql {.
2710: 20 20 20 20 50 52 41 47 4d 41 20 73 63 68 65 6d      PRAGMA schem
2720: 61 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 7d 0a 7d  a_version;.  }.}
2730: 20 31 30 37 0a 0a 23 20 4e 6f 77 20 6f 70 65 6e   107..# Now open
2740: 20 61 20 73 65 63 6f 6e 64 20 63 6f 6e 6e 65 63   a second connec
2750: 74 69 6f 6e 20 74 6f 20 74 68 65 20 64 61 74 61  tion to the data
2760: 62 61 73 65 2e 20 45 6e 73 75 72 65 20 74 68 61  base. Ensure tha
2770: 74 20 63 68 61 6e 67 69 6e 67 20 74 68 65 0a 23  t changing the.#
2780: 20 73 63 68 65 6d 61 2d 76 65 72 73 69 6f 6e 20   schema-version 
2790: 75 73 69 6e 67 20 74 68 65 20 66 69 72 73 74 20  using the first 
27a0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6f 72 63 65  connection force
27b0: 73 20 74 68 65 20 73 65 63 6f 6e 64 20 63 6f 6e  s the second con
27c0: 6e 65 63 74 69 6f 6e 0a 23 20 74 6f 20 72 65 6c  nection.# to rel
27d0: 6f 61 64 20 74 68 65 20 73 63 68 65 6d 61 2e 20  oad the schema. 
27e0: 54 68 69 73 20 68 61 73 20 74 6f 20 62 65 20 64  This has to be d
27f0: 6f 6e 65 20 75 73 69 6e 67 20 74 68 65 20 43 2d  one using the C-
2800: 41 50 49 20 74 65 73 74 20 66 75 6e 63 74 69 6f  API test functio
2810: 6e 73 2c 0a 23 20 62 65 63 61 75 73 65 20 74 68  ns,.# because th
2820: 65 20 54 43 4c 20 41 50 49 20 61 63 63 6f 75 6e  e TCL API accoun
2830: 74 73 20 66 6f 72 20 53 43 48 45 4d 41 5f 45 52  ts for SCHEMA_ER
2840: 52 4f 52 20 61 6e 64 20 72 65 74 72 69 65 73 20  ROR and retries 
2850: 74 68 65 20 71 75 65 72 79 2e 0a 64 6f 5f 74 65  the query..do_te
2860: 73 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e 37 20  st pragma-8.1.7 
2870: 7b 0a 20 20 73 71 6c 69 74 65 33 20 64 62 32 20  {.  sqlite3 db2 
2880: 74 65 73 74 2e 64 62 3b 20 73 65 74 20 3a 3a 44  test.db; set ::D
2890: 42 32 20 5b 73 71 6c 69 74 65 33 5f 63 6f 6e 6e  B2 [sqlite3_conn
28a0: 65 63 74 69 6f 6e 5f 70 6f 69 6e 74 65 72 20 64  ection_pointer d
28b0: 62 32 5d 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  b2].  execsql {.
28c0: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
28d0: 4d 20 74 34 3b 0a 20 20 7d 20 64 62 32 0a 7d 20  M t4;.  } db2.} 
28e0: 7b 31 20 32 20 33 7d 0a 64 6f 5f 74 65 73 74 20  {1 2 3}.do_test 
28f0: 70 72 61 67 6d 61 2d 38 2e 31 2e 38 20 7b 0a 20  pragma-8.1.8 {. 
2900: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50   execsql {.    P
2910: 52 41 47 4d 41 20 73 63 68 65 6d 61 5f 76 65 72  RAGMA schema_ver
2920: 73 69 6f 6e 20 3d 20 31 30 38 3b 0a 20 20 7d 0a  sion = 108;.  }.
2930: 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61  } {}.do_test pra
2940: 67 6d 61 2d 38 2e 31 2e 39 20 7b 0a 20 20 73 65  gma-8.1.9 {.  se
2950: 74 20 3a 3a 53 54 4d 54 20 5b 73 71 6c 69 74 65  t ::STMT [sqlite
2960: 33 5f 70 72 65 70 61 72 65 20 24 3a 3a 44 42 32  3_prepare $::DB2
2970: 20 22 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20   "SELECT * FROM 
2980: 74 34 22 20 2d 31 20 44 55 4d 4d 59 5d 0a 20 20  t4" -1 DUMMY].  
2990: 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 3a 3a  sqlite3_step $::
29a0: 53 54 4d 54 0a 7d 20 53 51 4c 49 54 45 5f 45 52  STMT.} SQLITE_ER
29b0: 52 4f 52 0a 64 6f 5f 74 65 73 74 20 70 72 61 67  ROR.do_test prag
29c0: 6d 61 2d 38 2e 31 2e 31 30 20 7b 0a 20 20 73 71  ma-8.1.10 {.  sq
29d0: 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24  lite3_finalize $
29e0: 3a 3a 53 54 4d 54 0a 7d 20 53 51 4c 49 54 45 5f  ::STMT.} SQLITE_
29f0: 53 43 48 45 4d 41 0a 0a 23 20 4d 61 6b 65 20 73  SCHEMA..# Make s
2a00: 75 72 65 20 74 68 65 20 73 63 68 65 6d 61 2d 76  ure the schema-v
2a10: 65 72 73 69 6f 6e 20 63 61 6e 20 62 65 20 6d 61  ersion can be ma
2a20: 6e 69 70 75 6c 61 74 65 64 20 69 6e 20 61 6e 20  nipulated in an 
2a30: 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
2a40: 65 2e 0a 66 69 6c 65 20 64 65 6c 65 74 65 20 2d  e..file delete -
2a50: 66 6f 72 63 65 20 74 65 73 74 32 2e 64 62 0a 66  force test2.db.f
2a60: 69 6c 65 20 64 65 6c 65 74 65 20 2d 66 6f 72 63  ile delete -forc
2a70: 65 20 74 65 73 74 32 2e 64 62 2d 6a 6f 75 72 6e  e test2.db-journ
2a80: 61 6c 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  al.do_test pragm
2a90: 61 2d 38 2e 31 2e 31 31 20 7b 0a 20 20 65 78 65  a-8.1.11 {.  exe
2aa0: 63 73 71 6c 20 7b 0a 20 20 20 20 41 54 54 41 43  csql {.    ATTAC
2ab0: 48 20 27 74 65 73 74 32 2e 64 62 27 20 41 53 20  H 'test2.db' AS 
2ac0: 61 75 78 3b 0a 20 20 20 20 43 52 45 41 54 45 20  aux;.    CREATE 
2ad0: 54 41 42 4c 45 20 61 75 78 2e 74 31 28 61 2c 20  TABLE aux.t1(a, 
2ae0: 62 2c 20 63 29 3b 0a 20 20 20 20 50 52 41 47 4d  b, c);.    PRAGM
2af0: 41 20 61 75 78 2e 73 63 68 65 6d 61 5f 76 65 72  A aux.schema_ver
2b00: 73 69 6f 6e 20 3d 20 32 30 35 3b 0a 20 20 7d 0a  sion = 205;.  }.
2b10: 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61  } {}.do_test pra
2b20: 67 6d 61 2d 38 2e 31 2e 31 32 20 7b 0a 20 20 65  gma-8.1.12 {.  e
2b30: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41  xecsql {.    PRA
2b40: 47 4d 41 20 61 75 78 2e 73 63 68 65 6d 61 5f 76  GMA aux.schema_v
2b50: 65 72 73 69 6f 6e 3b 0a 20 20 7d 0a 7d 20 32 30  ersion;.  }.} 20
2b60: 35 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  5.do_test pragma
2b70: 2d 38 2e 31 2e 31 33 20 7b 0a 20 20 65 78 65 63  -8.1.13 {.  exec
2b80: 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41  sql {.    PRAGMA
2b90: 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 3b   schema_version;
2ba0: 0a 20 20 7d 0a 7d 20 31 30 38 0a 0a 23 20 41 6e  .  }.} 108..# An
2bb0: 64 20 63 68 65 63 6b 20 74 68 61 74 20 6d 6f 64  d check that mod
2bc0: 69 66 79 69 6e 67 20 74 68 65 20 73 63 68 65 6d  ifying the schem
2bd0: 61 2d 76 65 72 73 69 6f 6e 20 69 6e 20 61 6e 20  a-version in an 
2be0: 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
2bf0: 65 0a 23 20 66 6f 72 63 65 73 20 74 68 65 20 73  e.# forces the s
2c00: 65 63 6f 6e 64 20 63 6f 6e 6e 65 63 74 69 6f 6e  econd connection
2c10: 20 74 6f 20 72 65 6c 6f 61 64 20 74 68 65 20 73   to reload the s
2c20: 63 68 65 6d 61 2e 0a 64 6f 5f 74 65 73 74 20 70  chema..do_test p
2c30: 72 61 67 6d 61 2d 38 2e 31 2e 31 34 20 7b 0a 20  ragma-8.1.14 {. 
2c40: 20 73 71 6c 69 74 65 33 20 64 62 32 20 74 65 73   sqlite3 db2 tes
2c50: 74 2e 64 62 3b 20 73 65 74 20 3a 3a 44 42 32 20  t.db; set ::DB2 
2c60: 5b 73 71 6c 69 74 65 33 5f 63 6f 6e 6e 65 63 74  [sqlite3_connect
2c70: 69 6f 6e 5f 70 6f 69 6e 74 65 72 20 64 62 32 5d  ion_pointer db2]
2c80: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
2c90: 20 41 54 54 41 43 48 20 27 74 65 73 74 32 2e 64   ATTACH 'test2.d
2ca0: 62 27 20 41 53 20 61 75 78 3b 0a 20 20 20 20 53  b' AS aux;.    S
2cb0: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 61 75 78  ELECT * FROM aux
2cc0: 2e 74 31 3b 0a 20 20 7d 20 64 62 32 0a 7d 20 7b  .t1;.  } db2.} {
2cd0: 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  }.do_test pragma
2ce0: 2d 38 2e 31 2e 31 35 20 7b 0a 20 20 65 78 65 63  -8.1.15 {.  exec
2cf0: 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41  sql {.    PRAGMA
2d00: 20 61 75 78 2e 73 63 68 65 6d 61 5f 76 65 72 73   aux.schema_vers
2d10: 69 6f 6e 20 3d 20 32 30 36 3b 0a 20 20 7d 0a 7d  ion = 206;.  }.}
2d20: 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67   {}.do_test prag
2d30: 6d 61 2d 38 2e 31 2e 31 36 20 7b 0a 20 20 73 65  ma-8.1.16 {.  se
2d40: 74 20 3a 3a 53 54 4d 54 20 5b 73 71 6c 69 74 65  t ::STMT [sqlite
2d50: 33 5f 70 72 65 70 61 72 65 20 24 3a 3a 44 42 32  3_prepare $::DB2
2d60: 20 22 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20   "SELECT * FROM 
2d70: 61 75 78 2e 74 31 22 20 2d 31 20 44 55 4d 4d 59  aux.t1" -1 DUMMY
2d80: 5d 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70  ].  sqlite3_step
2d90: 20 24 3a 3a 53 54 4d 54 0a 7d 20 53 51 4c 49 54   $::STMT.} SQLIT
2da0: 45 5f 45 52 52 4f 52 0a 64 6f 5f 74 65 73 74 20  E_ERROR.do_test 
2db0: 70 72 61 67 6d 61 2d 38 2e 31 2e 31 37 20 7b 0a  pragma-8.1.17 {.
2dc0: 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69    sqlite3_finali
2dd0: 7a 65 20 24 3a 3a 53 54 4d 54 0a 7d 20 53 51 4c  ze $::STMT.} SQL
2de0: 49 54 45 5f 53 43 48 45 4d 41 0a 64 6f 5f 74 65  ITE_SCHEMA.do_te
2df0: 73 74 20 70 72 61 67 6d 61 2d 38 2e 31 2e 31 38  st pragma-8.1.18
2e00: 20 7b 0a 20 20 64 62 32 20 63 6c 6f 73 65 0a 7d   {.  db2 close.}
2e10: 20 7b 7d 0a 0a 23 20 4e 6f 77 20 74 65 73 74 20   {}..# Now test 
2e20: 74 68 61 74 20 74 68 65 20 75 73 65 72 2d 76 65  that the user-ve
2e30: 72 73 69 6f 6e 20 63 61 6e 20 62 65 20 72 65 61  rsion can be rea
2e40: 64 20 61 6e 64 20 77 72 69 74 74 65 6e 20 28 61  d and written (a
2e50: 6e 64 20 74 68 61 74 20 77 65 20 61 72 65 6e 27  nd that we aren'
2e60: 74 0a 23 20 61 63 63 69 64 65 6e 74 61 6c 6c 79  t.# accidentally
2e70: 20 6d 61 6e 69 70 75 6c 61 74 69 6e 67 20 74 68   manipulating th
2e80: 65 20 73 63 68 65 6d 61 2d 76 65 72 73 69 6f 6e  e schema-version
2e90: 20 69 6e 73 74 65 61 64 29 2e 0a 64 6f 5f 74 65   instead)..do_te
2ea0: 73 74 20 70 72 61 67 6d 61 2d 38 2e 32 2e 31 20  st pragma-8.2.1 
2eb0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
2ec0: 20 20 50 52 41 47 4d 41 20 75 73 65 72 5f 76 65    PRAGMA user_ve
2ed0: 72 73 69 6f 6e 3b 0a 20 20 7d 0a 7d 20 7b 30 7d  rsion;.  }.} {0}
2ee0: 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d  .do_test pragma-
2ef0: 38 2e 32 2e 32 20 7b 0a 20 20 65 78 65 63 73 71  8.2.2 {.  execsq
2f00: 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 75  l {.    PRAGMA u
2f10: 73 65 72 5f 76 65 72 73 69 6f 6e 20 3d 20 32 3b  ser_version = 2;
2f20: 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73  .  }.} {}.do_tes
2f30: 74 20 70 72 61 67 6d 61 2d 38 2e 32 2e 33 2e 31  t pragma-8.2.3.1
2f40: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
2f50: 20 20 20 50 52 41 47 4d 41 20 75 73 65 72 5f 76     PRAGMA user_v
2f60: 65 72 73 69 6f 6e 3b 0a 20 20 7d 0a 7d 20 7b 32  ersion;.  }.} {2
2f70: 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  }.do_test pragma
2f80: 2d 38 2e 32 2e 33 2e 32 20 7b 0a 20 20 64 62 20  -8.2.3.2 {.  db 
2f90: 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74 65 33 20  close.  sqlite3 
2fa0: 64 62 20 74 65 73 74 2e 64 62 0a 20 20 65 78 65  db test.db.  exe
2fb0: 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d  csql {.    PRAGM
2fc0: 41 20 75 73 65 72 5f 76 65 72 73 69 6f 6e 3b 0a  A user_version;.
2fd0: 20 20 7d 0a 7d 20 7b 32 7d 0a 64 6f 5f 74 65 73    }.} {2}.do_tes
2fe0: 74 20 70 72 61 67 6d 61 2d 38 2e 32 2e 34 2e 31  t pragma-8.2.4.1
2ff0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
3000: 20 20 20 50 52 41 47 4d 41 20 73 63 68 65 6d 61     PRAGMA schema
3010: 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 7d 0a 7d 20  _version;.  }.} 
3020: 7b 31 30 38 7d 0a 69 66 63 61 70 61 62 6c 65 20  {108}.ifcapable 
3030: 76 61 63 75 75 6d 20 7b 0a 20 20 64 6f 5f 74 65  vacuum {.  do_te
3040: 73 74 20 70 72 61 67 6d 61 2d 38 2e 32 2e 34 2e  st pragma-8.2.4.
3050: 32 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  2 {.    execsql 
3060: 7b 0a 20 20 20 20 20 20 56 41 43 55 55 4d 3b 0a  {.      VACUUM;.
3070: 20 20 20 20 20 20 50 52 41 47 4d 41 20 75 73 65        PRAGMA use
3080: 72 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 20 20 7d  r_version;.    }
3090: 0a 20 20 7d 20 7b 32 7d 0a 20 20 64 6f 5f 74 65  .  } {2}.  do_te
30a0: 73 74 20 70 72 61 67 6d 61 2d 38 2e 32 2e 34 2e  st pragma-8.2.4.
30b0: 33 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  3 {.    execsql 
30c0: 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 73  {.      PRAGMA s
30d0: 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 3b 0a 20  chema_version;. 
30e0: 20 20 20 7d 0a 20 20 7d 20 7b 31 30 39 7d 0a 7d     }.  } {109}.}
30f0: 0a 64 62 20 65 76 61 6c 20 7b 41 54 54 41 43 48  .db eval {ATTACH
3100: 20 27 74 65 73 74 32 2e 64 62 27 20 41 53 20 61   'test2.db' AS a
3110: 75 78 7d 0a 0a 23 20 43 68 65 63 6b 20 74 68 61  ux}..# Check tha
3120: 74 20 74 68 65 20 75 73 65 72 2d 76 65 72 73 69  t the user-versi
3130: 6f 6e 20 69 6e 20 74 68 65 20 61 75 78 69 6c 61  on in the auxila
3140: 72 79 20 64 61 74 61 62 61 73 65 20 63 61 6e 20  ry database can 
3150: 62 65 20 6d 61 6e 69 70 75 6c 61 74 65 64 20 28  be manipulated (
3160: 0a 23 20 61 6e 64 20 74 68 61 74 20 77 65 20 61  .# and that we a
3170: 72 65 6e 27 74 20 61 63 63 69 64 65 6e 74 61 6c  ren't accidental
3180: 6c 79 20 6d 61 6e 69 70 75 6c 61 74 69 6e 67 20  ly manipulating 
3190: 74 68 65 20 73 61 6d 65 20 69 6e 20 74 68 65 20  the same in the 
31a0: 6d 61 69 6e 20 64 62 29 2e 0a 64 6f 5f 74 65 73  main db)..do_tes
31b0: 74 20 70 72 61 67 6d 61 2d 38 2e 32 2e 35 20 7b  t pragma-8.2.5 {
31c0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
31d0: 20 50 52 41 47 4d 41 20 61 75 78 2e 75 73 65 72   PRAGMA aux.user
31e0: 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 7d 0a 7d 20  _version;.  }.} 
31f0: 7b 30 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67  {0}.do_test prag
3200: 6d 61 2d 38 2e 32 2e 36 20 7b 0a 20 20 65 78 65  ma-8.2.6 {.  exe
3210: 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d  csql {.    PRAGM
3220: 41 20 61 75 78 2e 75 73 65 72 5f 76 65 72 73 69  A aux.user_versi
3230: 6f 6e 20 3d 20 33 3b 0a 20 20 7d 0a 7d 20 7b 7d  on = 3;.  }.} {}
3240: 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d  .do_test pragma-
3250: 38 2e 32 2e 37 20 7b 0a 20 20 65 78 65 63 73 71  8.2.7 {.  execsq
3260: 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 61  l {.    PRAGMA a
3270: 75 78 2e 75 73 65 72 5f 76 65 72 73 69 6f 6e 3b  ux.user_version;
3280: 0a 20 20 7d 0a 7d 20 7b 33 7d 0a 64 6f 5f 74 65  .  }.} {3}.do_te
3290: 73 74 20 70 72 61 67 6d 61 2d 38 2e 32 2e 38 20  st pragma-8.2.8 
32a0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
32b0: 20 20 50 52 41 47 4d 41 20 6d 61 69 6e 2e 75 73    PRAGMA main.us
32c0: 65 72 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 7d 0a  er_version;.  }.
32d0: 7d 20 7b 32 7d 0a 0a 23 20 4e 6f 77 20 63 68 65  } {2}..# Now che
32e0: 63 6b 20 74 68 61 74 20 61 20 52 4f 4c 4c 42 41  ck that a ROLLBA
32f0: 43 4b 20 72 65 73 65 74 73 20 74 68 65 20 75 73  CK resets the us
3300: 65 72 2d 76 65 72 73 69 6f 6e 20 69 66 20 69 74  er-version if it
3310: 20 68 61 73 20 62 65 65 6e 20 6d 6f 64 69 66 69   has been modifi
3320: 65 64 0a 23 20 77 69 74 68 69 6e 20 61 20 74 72  ed.# within a tr
3330: 61 6e 73 61 63 74 69 6f 6e 2e 0a 64 6f 5f 74 65  ansaction..do_te
3340: 73 74 20 70 72 61 67 6d 61 2d 38 2e 32 2e 39 20  st pragma-8.2.9 
3350: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
3360: 20 20 42 45 47 49 4e 3b 0a 20 20 20 20 50 52 41    BEGIN;.    PRA
3370: 47 4d 41 20 61 75 78 2e 75 73 65 72 5f 76 65 72  GMA aux.user_ver
3380: 73 69 6f 6e 20 3d 20 31 30 3b 0a 20 20 20 20 50  sion = 10;.    P
3390: 52 41 47 4d 41 20 75 73 65 72 5f 76 65 72 73 69  RAGMA user_versi
33a0: 6f 6e 20 3d 20 31 31 3b 0a 20 20 7d 0a 7d 20 7b  on = 11;.  }.} {
33b0: 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  }.do_test pragma
33c0: 2d 38 2e 32 2e 31 30 20 7b 0a 20 20 65 78 65 63  -8.2.10 {.  exec
33d0: 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41  sql {.    PRAGMA
33e0: 20 61 75 78 2e 75 73 65 72 5f 76 65 72 73 69 6f   aux.user_versio
33f0: 6e 3b 0a 20 20 7d 0a 7d 20 7b 31 30 7d 0a 64 6f  n;.  }.} {10}.do
3400: 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 32  _test pragma-8.2
3410: 2e 31 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  .11 {.  execsql 
3420: 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 6d 61 69  {.    PRAGMA mai
3430: 6e 2e 75 73 65 72 5f 76 65 72 73 69 6f 6e 3b 0a  n.user_version;.
3440: 20 20 7d 0a 7d 20 7b 31 31 7d 0a 64 6f 5f 74 65    }.} {11}.do_te
3450: 73 74 20 70 72 61 67 6d 61 2d 38 2e 32 2e 31 32  st pragma-8.2.12
3460: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
3470: 20 20 20 52 4f 4c 4c 42 41 43 4b 3b 0a 20 20 20     ROLLBACK;.   
3480: 20 50 52 41 47 4d 41 20 61 75 78 2e 75 73 65 72   PRAGMA aux.user
3490: 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 7d 0a 7d 20  _version;.  }.} 
34a0: 7b 33 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67  {3}.do_test prag
34b0: 6d 61 2d 38 2e 32 2e 31 33 20 7b 0a 20 20 65 78  ma-8.2.13 {.  ex
34c0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47  ecsql {.    PRAG
34d0: 4d 41 20 6d 61 69 6e 2e 75 73 65 72 5f 76 65 72  MA main.user_ver
34e0: 73 69 6f 6e 3b 0a 20 20 7d 0a 7d 20 7b 32 7d 0a  sion;.  }.} {2}.
34f0: 0a 23 20 54 72 79 20 61 20 6e 65 67 61 74 69 76  .# Try a negativ
3500: 65 20 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20  e value for the 
3510: 75 73 65 72 2d 76 65 72 73 69 6f 6e 0a 64 6f 5f  user-version.do_
3520: 74 65 73 74 20 70 72 61 67 6d 61 2d 38 2e 32 2e  test pragma-8.2.
3530: 31 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  14 {.  execsql {
3540: 0a 20 20 20 20 50 52 41 47 4d 41 20 75 73 65 72  .    PRAGMA user
3550: 5f 76 65 72 73 69 6f 6e 20 3d 20 2d 34 35 30 3b  _version = -450;
3560: 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73  .  }.} {}.do_tes
3570: 74 20 70 72 61 67 6d 61 2d 38 2e 32 2e 31 35 20  t pragma-8.2.15 
3580: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
3590: 20 20 50 52 41 47 4d 41 20 75 73 65 72 5f 76 65    PRAGMA user_ve
35a0: 72 73 69 6f 6e 3b 0a 20 20 7d 0a 7d 20 7b 2d 34  rsion;.  }.} {-4
35b0: 35 30 7d 0a 7d 20 3b 20 23 20 69 66 63 61 70 61  50}.} ; # ifcapa
35c0: 62 6c 65 20 73 63 68 65 6d 61 5f 76 65 72 73 69  ble schema_versi
35d0: 6f 6e 0a 0a 0a 23 20 54 65 73 74 20 74 65 6d 70  on...# Test temp
35e0: 5f 73 74 6f 72 65 20 61 6e 64 20 74 65 6d 70 5f  _store and temp_
35f0: 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 20  store_directory 
3600: 70 72 61 67 6d 61 73 0a 23 0a 69 66 63 61 70 61  pragmas.#.ifcapa
3610: 62 6c 65 20 70 61 67 65 72 5f 70 72 61 67 6d 61  ble pager_pragma
3620: 73 20 7b 0a 64 6f 5f 74 65 73 74 20 70 72 61 67  s {.do_test prag
3630: 6d 61 2d 39 2e 31 20 7b 0a 20 20 64 62 20 63 6c  ma-9.1 {.  db cl
3640: 6f 73 65 0a 20 20 73 71 6c 69 74 65 33 20 64 62  ose.  sqlite3 db
3650: 20 74 65 73 74 2e 64 62 0a 20 20 65 78 65 63 73   test.db.  execs
3660: 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20  ql {.    PRAGMA 
3670: 74 65 6d 70 5f 73 74 6f 72 65 3b 0a 20 20 7d 0a  temp_store;.  }.
3680: 7d 20 7b 30 7d 0a 64 6f 5f 74 65 73 74 20 70 72  } {0}.do_test pr
3690: 61 67 6d 61 2d 39 2e 32 20 7b 0a 20 20 65 78 65  agma-9.2 {.  exe
36a0: 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d  csql {.    PRAGM
36b0: 41 20 74 65 6d 70 5f 73 74 6f 72 65 3d 66 69 6c  A temp_store=fil
36c0: 65 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 74 65  e;.    PRAGMA te
36d0: 6d 70 5f 73 74 6f 72 65 3b 0a 20 20 7d 0a 7d 20  mp_store;.  }.} 
36e0: 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67  {1}.do_test prag
36f0: 6d 61 2d 39 2e 33 20 7b 0a 20 20 65 78 65 63 73  ma-9.3 {.  execs
3700: 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20  ql {.    PRAGMA 
3710: 74 65 6d 70 5f 73 74 6f 72 65 3d 6d 65 6d 6f 72  temp_store=memor
3720: 79 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 74 65  y;.    PRAGMA te
3730: 6d 70 5f 73 74 6f 72 65 3b 0a 20 20 7d 0a 7d 20  mp_store;.  }.} 
3740: 7b 32 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67  {2}.do_test prag
3750: 6d 61 2d 39 2e 34 20 7b 0a 20 20 65 78 65 63 73  ma-9.4 {.  execs
3760: 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20  ql {.    PRAGMA 
3770: 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63  temp_store_direc
3780: 74 6f 72 79 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64  tory;.  }.} {}.d
3790: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 39 2e  o_test pragma-9.
37a0: 35 20 7b 0a 20 20 73 65 74 20 70 77 64 20 5b 73  5 {.  set pwd [s
37b0: 74 72 69 6e 67 20 6d 61 70 20 7b 27 20 27 27 7d  tring map {' ''}
37c0: 20 5b 70 77 64 5d 5d 0a 20 20 65 78 65 63 73 71   [pwd]].  execsq
37d0: 6c 20 22 0a 20 20 20 20 50 52 41 47 4d 41 20 74  l ".    PRAGMA t
37e0: 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74  emp_store_direct
37f0: 6f 72 79 3d 27 24 70 77 64 27 3b 0a 20 20 22 0a  ory='$pwd';.  ".
3800: 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61  } {}.do_test pra
3810: 67 6d 61 2d 39 2e 36 20 7b 0a 20 20 65 78 65 63  gma-9.6 {.  exec
3820: 73 71 6c 20 7b 20 0a 20 20 20 20 50 52 41 47 4d  sql { .    PRAGM
3830: 41 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72  A temp_store_dir
3840: 65 63 74 6f 72 79 3b 0a 20 20 7d 0a 7d 20 5b 70  ectory;.  }.} [p
3850: 77 64 5d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67  wd].do_test prag
3860: 6d 61 2d 39 2e 37 20 7b 0a 20 20 63 61 74 63 68  ma-9.7 {.  catch
3870: 73 71 6c 20 7b 20 0a 20 20 20 20 50 52 41 47 4d  sql { .    PRAGM
3880: 41 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72  A temp_store_dir
3890: 65 63 74 6f 72 79 3d 27 2f 4e 4f 4e 2f 45 58 49  ectory='/NON/EXI
38a0: 53 54 45 4e 54 2f 50 41 54 48 2f 46 4f 4f 42 41  STENT/PATH/FOOBA
38b0: 52 27 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b 6e 6f  R';.  }.} {1 {no
38c0: 74 20 61 20 77 72 69 74 61 62 6c 65 20 64 69 72  t a writable dir
38d0: 65 63 74 6f 72 79 7d 7d 0a 64 6f 5f 74 65 73 74  ectory}}.do_test
38e0: 20 70 72 61 67 6d 61 2d 39 2e 38 20 7b 0a 20 20   pragma-9.8 {.  
38f0: 65 78 65 63 73 71 6c 20 7b 20 0a 20 20 20 20 50  execsql { .    P
3900: 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65  RAGMA temp_store
3910: 5f 64 69 72 65 63 74 6f 72 79 3d 27 27 3b 0a 20  _directory='';. 
3920: 20 7d 0a 7d 20 7b 7d 0a 69 66 63 61 70 61 62 6c   }.} {}.ifcapabl
3930: 65 20 74 65 6d 70 64 62 20 7b 0a 20 20 64 6f 5f  e tempdb {.  do_
3940: 74 65 73 74 20 70 72 61 67 6d 61 2d 39 2e 39 20  test pragma-9.9 
3950: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 20  {.    execsql { 
3960: 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 74 65  .      PRAGMA te
3970: 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f  mp_store_directo
3980: 72 79 3b 0a 20 20 20 20 20 20 50 52 41 47 4d 41  ry;.      PRAGMA
3990: 20 74 65 6d 70 5f 73 74 6f 72 65 3d 46 49 4c 45   temp_store=FILE
39a0: 3b 0a 20 20 20 20 20 20 43 52 45 41 54 45 20 54  ;.      CREATE T
39b0: 45 4d 50 20 54 41 42 4c 45 20 74 65 6d 70 5f 73  EMP TABLE temp_s
39c0: 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 5f 74  tore_directory_t
39d0: 65 73 74 28 61 20 69 6e 74 65 67 65 72 29 3b 0a  est(a integer);.
39e0: 20 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54        INSERT INT
39f0: 4f 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72  O temp_store_dir
3a00: 65 63 74 6f 72 79 5f 74 65 73 74 20 76 61 6c 75  ectory_test valu
3a10: 65 73 20 28 32 29 3b 0a 20 20 20 20 20 20 53 45  es (2);.      SE
3a20: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 65 6d 70  LECT * FROM temp
3a30: 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79  _store_directory
3a40: 5f 74 65 73 74 3b 0a 20 20 20 20 7d 0a 20 20 7d  _test;.    }.  }
3a50: 20 7b 32 7d 0a 7d 0a 64 6f 5f 74 65 73 74 20 70   {2}.}.do_test p
3a60: 72 61 67 6d 61 2d 39 2e 31 30 20 7b 0a 20 20 63  ragma-9.10 {.  c
3a70: 61 74 63 68 73 71 6c 20 22 0a 20 20 20 20 50 52  atchsql ".    PR
3a80: 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 5f  AGMA temp_store_
3a90: 64 69 72 65 63 74 6f 72 79 3d 27 24 70 77 64 27  directory='$pwd'
3aa0: 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  ;.    SELECT * F
3ab0: 52 4f 4d 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64  ROM temp_store_d
3ac0: 69 72 65 63 74 6f 72 79 5f 74 65 73 74 3b 0a 20  irectory_test;. 
3ad0: 20 22 0a 7d 20 7b 31 20 7b 6e 6f 20 73 75 63 68   ".} {1 {no such
3ae0: 20 74 61 62 6c 65 3a 20 74 65 6d 70 5f 73 74 6f   table: temp_sto
3af0: 72 65 5f 64 69 72 65 63 74 6f 72 79 5f 74 65 73  re_directory_tes
3b00: 74 7d 7d 0a 7d 20 3b 23 20 69 66 63 61 70 61 62  t}}.} ;# ifcapab
3b10: 6c 65 20 70 61 67 65 72 5f 70 72 61 67 6d 61 73  le pager_pragmas
3b20: 0a 0a 69 66 63 61 70 61 62 6c 65 20 74 72 69 67  ..ifcapable trig
3b30: 67 65 72 20 7b 0a 0a 64 6f 5f 74 65 73 74 20 70  ger {..do_test p
3b40: 72 61 67 6d 61 2d 31 30 2e 30 20 7b 0a 20 20 63  ragma-10.0 {.  c
3b50: 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 44 52  atchsql {.    DR
3b60: 4f 50 20 54 41 42 4c 45 20 6d 61 69 6e 2e 74 31  OP TABLE main.t1
3b70: 3b 0a 20 20 7d 0a 20 20 65 78 65 63 73 71 6c 20  ;.  }.  execsql 
3b80: 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 63 6f 75  {.    PRAGMA cou
3b90: 6e 74 5f 63 68 61 6e 67 65 73 20 3d 20 31 3b 0a  nt_changes = 1;.
3ba0: 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  .    CREATE TABL
3bb0: 45 20 74 31 28 61 20 50 52 49 4d 41 52 59 20 4b  E t1(a PRIMARY K
3bc0: 45 59 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20  EY);.    CREATE 
3bd0: 54 41 42 4c 45 20 74 31 5f 6d 69 72 72 6f 72 28  TABLE t1_mirror(
3be0: 61 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54  a);.    CREATE T
3bf0: 41 42 4c 45 20 74 31 5f 6d 69 72 72 6f 72 32 28  ABLE t1_mirror2(
3c00: 61 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54  a);.    CREATE T
3c10: 52 49 47 47 45 52 20 74 31 5f 62 69 20 42 45 46  RIGGER t1_bi BEF
3c20: 4f 52 45 20 49 4e 53 45 52 54 20 4f 4e 20 74 31  ORE INSERT ON t1
3c30: 20 42 45 47 49 4e 20 0a 20 20 20 20 20 20 49 4e   BEGIN .      IN
3c40: 53 45 52 54 20 49 4e 54 4f 20 74 31 5f 6d 69 72  SERT INTO t1_mir
3c50: 72 6f 72 20 56 41 4c 55 45 53 28 6e 65 77 2e 61  ror VALUES(new.a
3c60: 29 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20 20 20  );.    END;.    
3c70: 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20 74  CREATE TRIGGER t
3c80: 31 5f 61 69 20 41 46 54 45 52 20 49 4e 53 45 52  1_ai AFTER INSER
3c90: 54 20 4f 4e 20 74 31 20 42 45 47 49 4e 20 0a 20  T ON t1 BEGIN . 
3ca0: 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f       INSERT INTO
3cb0: 20 74 31 5f 6d 69 72 72 6f 72 32 20 56 41 4c 55   t1_mirror2 VALU
3cc0: 45 53 28 6e 65 77 2e 61 29 3b 0a 20 20 20 20 45  ES(new.a);.    E
3cd0: 4e 44 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54  ND;.    CREATE T
3ce0: 52 49 47 47 45 52 20 74 31 5f 62 75 20 42 45 46  RIGGER t1_bu BEF
3cf0: 4f 52 45 20 55 50 44 41 54 45 20 4f 4e 20 74 31  ORE UPDATE ON t1
3d00: 20 42 45 47 49 4e 20 0a 20 20 20 20 20 20 55 50   BEGIN .      UP
3d10: 44 41 54 45 20 74 31 5f 6d 69 72 72 6f 72 20 53  DATE t1_mirror S
3d20: 45 54 20 61 20 3d 20 6e 65 77 2e 61 20 57 48 45  ET a = new.a WHE
3d30: 52 45 20 61 20 3d 20 6f 6c 64 2e 61 3b 0a 20 20  RE a = old.a;.  
3d40: 20 20 45 4e 44 3b 0a 20 20 20 20 43 52 45 41 54    END;.    CREAT
3d50: 45 20 54 52 49 47 47 45 52 20 74 31 5f 61 75 20  E TRIGGER t1_au 
3d60: 41 46 54 45 52 20 55 50 44 41 54 45 20 4f 4e 20  AFTER UPDATE ON 
3d70: 74 31 20 42 45 47 49 4e 20 0a 20 20 20 20 20 20  t1 BEGIN .      
3d80: 55 50 44 41 54 45 20 74 31 5f 6d 69 72 72 6f 72  UPDATE t1_mirror
3d90: 32 20 53 45 54 20 61 20 3d 20 6e 65 77 2e 61 20  2 SET a = new.a 
3da0: 57 48 45 52 45 20 61 20 3d 20 6f 6c 64 2e 61 3b  WHERE a = old.a;
3db0: 0a 20 20 20 20 45 4e 44 3b 0a 20 20 20 20 43 52  .    END;.    CR
3dc0: 45 41 54 45 20 54 52 49 47 47 45 52 20 74 31 5f  EATE TRIGGER t1_
3dd0: 62 64 20 42 45 46 4f 52 45 20 44 45 4c 45 54 45  bd BEFORE DELETE
3de0: 20 4f 4e 20 74 31 20 42 45 47 49 4e 20 0a 20 20   ON t1 BEGIN .  
3df0: 20 20 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20      DELETE FROM 
3e00: 74 31 5f 6d 69 72 72 6f 72 20 57 48 45 52 45 20  t1_mirror WHERE 
3e10: 61 20 3d 20 6f 6c 64 2e 61 3b 0a 20 20 20 20 45  a = old.a;.    E
3e20: 4e 44 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54  ND;.    CREATE T
3e30: 52 49 47 47 45 52 20 74 31 5f 61 64 20 41 46 54  RIGGER t1_ad AFT
3e40: 45 52 20 44 45 4c 45 54 45 20 4f 4e 20 74 31 20  ER DELETE ON t1 
3e50: 42 45 47 49 4e 20 0a 20 20 20 20 20 20 44 45 4c  BEGIN .      DEL
3e60: 45 54 45 20 46 52 4f 4d 20 74 31 5f 6d 69 72 72  ETE FROM t1_mirr
3e70: 6f 72 32 20 57 48 45 52 45 20 61 20 3d 20 6f 6c  or2 WHERE a = ol
3e80: 64 2e 61 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20  d.a;.    END;.  
3e90: 7d 0a 7d 20 7b 7d 0a 0a 64 6f 5f 74 65 73 74 20  }.} {}..do_test 
3ea0: 70 72 61 67 6d 61 2d 31 30 2e 31 20 7b 0a 20 20  pragma-10.1 {.  
3eb0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 49 4e  execsql {.    IN
3ec0: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c  SERT INTO t1 VAL
3ed0: 55 45 53 28 72 61 6e 64 73 74 72 28 31 30 2c 31  UES(randstr(10,1
3ee0: 30 29 29 3b 0a 20 20 7d 0a 7d 20 7b 31 7d 0a 64  0));.  }.} {1}.d
3ef0: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31 30  o_test pragma-10
3f00: 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .2 {.  execsql {
3f10: 0a 20 20 20 20 55 50 44 41 54 45 20 74 31 20 53  .    UPDATE t1 S
3f20: 45 54 20 61 20 3d 20 72 61 6e 64 73 74 72 28 31  ET a = randstr(1
3f30: 30 2c 31 30 29 3b 0a 20 20 7d 0a 7d 20 7b 31 7d  0,10);.  }.} {1}
3f40: 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d  .do_test pragma-
3f50: 31 30 2e 33 20 7b 0a 20 20 65 78 65 63 73 71 6c  10.3 {.  execsql
3f60: 20 7b 0a 20 20 20 20 44 45 4c 45 54 45 20 46 52   {.    DELETE FR
3f70: 4f 4d 20 74 31 3b 0a 20 20 7d 0a 7d 20 7b 31 7d  OM t1;.  }.} {1}
3f80: 0a 0a 7d 20 3b 23 20 69 66 63 61 70 61 62 6c 65  ..} ;# ifcapable
3f90: 20 74 72 69 67 67 65 72 0a 0a 69 66 63 61 70 61   trigger..ifcapa
3fa0: 62 6c 65 20 73 63 68 65 6d 61 5f 70 72 61 67 6d  ble schema_pragm
3fb0: 61 73 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 70  as {.  do_test p
3fc0: 72 61 67 6d 61 2d 31 31 2e 31 20 7b 0a 20 20 20  ragma-11.1 {.   
3fd0: 20 65 78 65 63 73 71 6c 32 20 7b 0a 20 20 20 20   execsql2 {.    
3fe0: 20 20 70 72 61 67 6d 61 20 63 6f 6c 6c 61 74 69    pragma collati
3ff0: 6f 6e 5f 6c 69 73 74 3b 0a 20 20 20 20 7d 0a 20  on_list;.    }. 
4000: 20 7d 20 7b 73 65 71 20 30 20 6e 61 6d 65 20 4e   } {seq 0 name N
4010: 4f 43 41 53 45 20 73 65 71 20 31 20 6e 61 6d 65  OCASE seq 1 name
4020: 20 42 49 4e 41 52 59 7d 0a 20 20 64 6f 5f 74 65   BINARY}.  do_te
4030: 73 74 20 70 72 61 67 6d 61 2d 31 31 2e 32 20 7b  st pragma-11.2 {
4040: 0a 20 20 20 20 64 62 20 63 6f 6c 6c 61 74 65 20  .    db collate 
4050: 4e 65 77 5f 43 6f 6c 6c 61 74 69 6f 6e 20 62 6c  New_Collation bl
4060: 61 68 2e 2e 2e 0a 20 20 20 20 65 78 65 63 73 71  ah....    execsq
4070: 6c 20 7b 0a 20 20 20 20 20 20 70 72 61 67 6d 61  l {.      pragma
4080: 20 63 6f 6c 6c 61 74 69 6f 6e 5f 6c 69 73 74 3b   collation_list;
4090: 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 30 20 4e 65  .    }.  } {0 Ne
40a0: 77 5f 43 6f 6c 6c 61 74 69 6f 6e 20 31 20 4e 4f  w_Collation 1 NO
40b0: 43 41 53 45 20 32 20 42 49 4e 41 52 59 7d 0a 7d  CASE 2 BINARY}.}
40c0: 0a 0a 69 66 63 61 70 61 62 6c 65 20 73 63 68 65  ..ifcapable sche
40d0: 6d 61 5f 70 72 61 67 6d 61 73 26 26 74 65 6d 70  ma_pragmas&&temp
40e0: 64 62 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 70  db {.  do_test p
40f0: 72 61 67 6d 61 2d 31 32 2e 31 20 7b 0a 20 20 20  ragma-12.1 {.   
4100: 20 73 71 6c 69 74 65 33 20 64 62 32 20 74 65 73   sqlite3 db2 tes
4110: 74 2e 64 62 0a 20 20 20 20 65 78 65 63 73 71 6c  t.db.    execsql
4120: 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20   {.      PRAGMA 
4130: 74 65 6d 70 2e 74 61 62 6c 65 5f 69 6e 66 6f 28  temp.table_info(
4140: 27 61 62 63 27 29 3b 0a 20 20 20 20 7d 20 64 62  'abc');.    } db
4150: 32 0a 20 20 7d 20 7b 7d 0a 20 20 64 62 32 20 63  2.  } {}.  db2 c
4160: 6c 6f 73 65 0a 0a 20 20 64 6f 5f 74 65 73 74 20  lose..  do_test 
4170: 70 72 61 67 6d 61 2d 31 32 2e 32 20 7b 0a 20 20  pragma-12.2 {.  
4180: 20 20 73 71 6c 69 74 65 33 20 64 62 32 20 74 65    sqlite3 db2 te
4190: 73 74 2e 64 62 0a 20 20 20 20 65 78 65 63 73 71  st.db.    execsq
41a0: 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41  l {.      PRAGMA
41b0: 20 74 65 6d 70 2e 64 65 66 61 75 6c 74 5f 63 61   temp.default_ca
41c0: 63 68 65 5f 73 69 7a 65 20 3d 20 32 30 30 3b 0a  che_size = 200;.
41d0: 20 20 20 20 20 20 50 52 41 47 4d 41 20 74 65 6d        PRAGMA tem
41e0: 70 2e 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f  p.default_cache_
41f0: 73 69 7a 65 3b 0a 20 20 20 20 7d 20 64 62 32 0a  size;.    } db2.
4200: 20 20 7d 20 7b 32 30 30 7d 0a 20 20 64 62 32 20    } {200}.  db2 
4210: 63 6c 6f 73 65 0a 0a 20 20 64 6f 5f 74 65 73 74  close..  do_test
4220: 20 70 72 61 67 6d 61 2d 31 32 2e 33 20 7b 0a 20   pragma-12.3 {. 
4230: 20 20 20 73 71 6c 69 74 65 33 20 64 62 32 20 74     sqlite3 db2 t
4240: 65 73 74 2e 64 62 0a 20 20 20 20 65 78 65 63 73  est.db.    execs
4250: 71 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d  ql {.      PRAGM
4260: 41 20 74 65 6d 70 2e 63 61 63 68 65 5f 73 69 7a  A temp.cache_siz
4270: 65 20 3d 20 34 30 30 3b 0a 20 20 20 20 20 20 50  e = 400;.      P
4280: 52 41 47 4d 41 20 74 65 6d 70 2e 63 61 63 68 65  RAGMA temp.cache
4290: 5f 73 69 7a 65 3b 0a 20 20 20 20 7d 20 64 62 32  _size;.    } db2
42a0: 0a 20 20 7d 20 7b 34 30 30 7d 0a 20 20 64 62 32  .  } {400}.  db2
42b0: 20 63 6c 6f 73 65 0a 7d 0a 0a 23 20 52 65 73 65   close.}..# Rese
42c0: 74 20 74 68 65 20 73 71 6c 69 74 65 33 5f 74 65  t the sqlite3_te
42d0: 6d 70 5f 64 69 72 65 63 74 6f 72 79 20 76 61 72  mp_directory var
42e0: 69 61 62 6c 65 20 66 6f 72 20 74 68 65 20 6e 65  iable for the ne
42f0: 78 74 20 72 75 6e 20 6f 66 20 74 65 73 74 73 3a  xt run of tests:
4300: 0a 73 71 6c 69 74 65 33 20 64 62 58 20 3a 6d 65  .sqlite3 dbX :me
4310: 6d 6f 72 79 3a 0a 64 62 58 20 65 76 61 6c 20 7b  mory:.dbX eval {
4320: 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72  PRAGMA temp_stor
4330: 65 5f 64 69 72 65 63 74 6f 72 79 20 3d 20 22 22  e_directory = ""
4340: 7d 0a 64 62 58 20 63 6c 6f 73 65 0a 0a 66 69 6e  }.dbX close..fin
4350: 69 73 68 5f 74 65 73 74 0a                       ish_test.