/ Hex Artifact Content
Login

Artifact 33011f5741cc4952ff8306ead8a1aeb003fb0786:


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 38 20 32 30 30 34 2f 30 32 2f 31 31 20 30 32  .8 2004/02/11 02
0200: 3a 31 38 3a 30 37 20 64 72 68 20 45 78 70 20 24  :18:07 drh Exp $
0210: 0a 0a 73 65 74 20 74 65 73 74 64 69 72 20 5b 66  ..set testdir [f
0220: 69 6c 65 20 64 69 72 6e 61 6d 65 20 24 61 72 67  ile dirname $arg
0230: 76 30 5d 0a 73 6f 75 72 63 65 20 24 74 65 73 74  v0].source $test
0240: 64 69 72 2f 74 65 73 74 65 72 2e 74 63 6c 0a 0a  dir/tester.tcl..
0250: 23 20 44 65 6c 65 74 65 20 74 68 65 20 70 72 65  # Delete the pre
0260: 65 78 69 73 74 69 6e 67 20 64 61 74 61 62 61 73  existing databas
0270: 65 20 74 6f 20 61 76 6f 69 64 20 74 68 65 20 73  e to avoid the s
0280: 70 65 63 69 61 6c 20 73 65 74 75 70 0a 23 20 74  pecial setup.# t
0290: 68 61 74 20 74 68 65 20 22 61 6c 6c 2e 74 65 73  hat the "all.tes
02a0: 74 22 20 73 63 72 69 70 74 20 64 6f 65 73 2e 0a  t" script does..
02b0: 23 0a 64 62 20 63 6c 6f 73 65 0a 66 69 6c 65 20  #.db close.file 
02c0: 64 65 6c 65 74 65 20 74 65 73 74 2e 64 62 0a 73  delete test.db.s
02d0: 65 74 20 44 42 20 5b 73 71 6c 69 74 65 20 64 62  et DB [sqlite db
02e0: 20 74 65 73 74 2e 64 62 5d 0a 0a 64 6f 5f 74 65   test.db]..do_te
02f0: 73 74 20 70 72 61 67 6d 61 2d 31 2e 31 20 7b 0a  st pragma-1.1 {.
0300: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
0310: 50 52 41 47 4d 41 20 63 61 63 68 65 5f 73 69 7a  PRAGMA cache_siz
0320: 65 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 64 65  e;.    PRAGMA de
0330: 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65  fault_cache_size
0340: 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 73 79 6e  ;.    PRAGMA syn
0350: 63 68 72 6f 6e 6f 75 73 3b 0a 20 20 20 20 50 52  chronous;.    PR
0360: 41 47 4d 41 20 64 65 66 61 75 6c 74 5f 73 79 6e  AGMA default_syn
0370: 63 68 72 6f 6e 6f 75 73 3b 0a 20 20 7d 0a 7d 20  chronous;.  }.} 
0380: 7b 32 30 30 30 20 32 30 30 30 20 31 20 31 7d 0a  {2000 2000 1 1}.
0390: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 31  do_test pragma-1
03a0: 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .2 {.  execsql {
03b0: 0a 20 20 20 20 50 52 41 47 4d 41 20 63 61 63 68  .    PRAGMA cach
03c0: 65 5f 73 69 7a 65 3d 31 32 33 34 3b 0a 20 20 20  e_size=1234;.   
03d0: 20 50 52 41 47 4d 41 20 63 61 63 68 65 5f 73 69   PRAGMA cache_si
03e0: 7a 65 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 64  ze;.    PRAGMA d
03f0: 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a  efault_cache_siz
0400: 65 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 73 79  e;.    PRAGMA sy
0410: 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20 20 20 20 50  nchronous;.    P
0420: 52 41 47 4d 41 20 64 65 66 61 75 6c 74 5f 73 79  RAGMA default_sy
0430: 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20 20 7d 0a 7d  nchronous;.  }.}
0440: 20 7b 31 32 33 34 20 32 30 30 30 20 31 20 31 7d   {1234 2000 1 1}
0450: 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d  .do_test pragma-
0460: 31 2e 33 20 7b 0a 20 20 64 62 20 63 6c 6f 73 65  1.3 {.  db close
0470: 0a 20 20 73 71 6c 69 74 65 20 64 62 20 74 65 73  .  sqlite db tes
0480: 74 2e 64 62 0a 20 20 65 78 65 63 73 71 6c 20 7b  t.db.  execsql {
0490: 0a 20 20 20 20 50 52 41 47 4d 41 20 63 61 63 68  .    PRAGMA cach
04a0: 65 5f 73 69 7a 65 3b 0a 20 20 20 20 50 52 41 47  e_size;.    PRAG
04b0: 4d 41 20 64 65 66 61 75 6c 74 5f 63 61 63 68 65  MA default_cache
04c0: 5f 73 69 7a 65 3b 0a 20 20 20 20 50 52 41 47 4d  _size;.    PRAGM
04d0: 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20  A synchronous;. 
04e0: 20 20 20 50 52 41 47 4d 41 20 64 65 66 61 75 6c     PRAGMA defaul
04f0: 74 5f 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20  t_synchronous;. 
0500: 20 7d 0a 7d 20 7b 32 30 30 30 20 32 30 30 30 20   }.} {2000 2000 
0510: 31 20 31 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61  1 1}.do_test pra
0520: 67 6d 61 2d 31 2e 34 20 7b 0a 20 20 65 78 65 63  gma-1.4 {.  exec
0530: 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41  sql {.    PRAGMA
0540: 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3d 4f 46 46   synchronous=OFF
0550: 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 63 61 63  ;.    PRAGMA cac
0560: 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 50 52 41  he_size;.    PRA
0570: 47 4d 41 20 64 65 66 61 75 6c 74 5f 63 61 63 68  GMA default_cach
0580: 65 5f 73 69 7a 65 3b 0a 20 20 20 20 50 52 41 47  e_size;.    PRAG
0590: 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a  MA synchronous;.
05a0: 20 20 20 20 50 52 41 47 4d 41 20 64 65 66 61 75      PRAGMA defau
05b0: 6c 74 5f 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a  lt_synchronous;.
05c0: 20 20 7d 0a 7d 20 7b 32 30 30 30 20 32 30 30 30    }.} {2000 2000
05d0: 20 30 20 31 7d 0a 64 6f 5f 74 65 73 74 20 70 72   0 1}.do_test pr
05e0: 61 67 6d 61 2d 31 2e 35 20 7b 0a 20 20 65 78 65  agma-1.5 {.  exe
05f0: 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d  csql {.    PRAGM
0600: 41 20 63 61 63 68 65 5f 73 69 7a 65 3d 34 33 32  A cache_size=432
0610: 31 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 63 61  1;.    PRAGMA ca
0620: 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 50 52  che_size;.    PR
0630: 41 47 4d 41 20 64 65 66 61 75 6c 74 5f 63 61 63  AGMA default_cac
0640: 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 50 52 41  he_size;.    PRA
0650: 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3b  GMA synchronous;
0660: 0a 20 20 20 20 50 52 41 47 4d 41 20 64 65 66 61  .    PRAGMA defa
0670: 75 6c 74 5f 73 79 6e 63 68 72 6f 6e 6f 75 73 3b  ult_synchronous;
0680: 0a 20 20 7d 0a 7d 20 7b 34 33 32 31 20 32 30 30  .  }.} {4321 200
0690: 30 20 30 20 31 7d 0a 64 6f 5f 74 65 73 74 20 70  0 0 1}.do_test p
06a0: 72 61 67 6d 61 2d 31 2e 36 20 7b 0a 20 20 65 78  ragma-1.6 {.  ex
06b0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47  ecsql {.    PRAG
06c0: 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3d 4f  MA synchronous=O
06d0: 4e 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 63 61  N;.    PRAGMA ca
06e0: 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 50 52  che_size;.    PR
06f0: 41 47 4d 41 20 64 65 66 61 75 6c 74 5f 63 61 63  AGMA default_cac
0700: 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 50 52 41  he_size;.    PRA
0710: 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3b  GMA synchronous;
0720: 0a 20 20 20 20 50 52 41 47 4d 41 20 64 65 66 61  .    PRAGMA defa
0730: 75 6c 74 5f 73 79 6e 63 68 72 6f 6e 6f 75 73 3b  ult_synchronous;
0740: 0a 20 20 7d 0a 7d 20 7b 34 33 32 31 20 32 30 30  .  }.} {4321 200
0750: 30 20 31 20 31 7d 0a 64 6f 5f 74 65 73 74 20 70  0 1 1}.do_test p
0760: 72 61 67 6d 61 2d 31 2e 37 20 7b 0a 20 20 64 62  ragma-1.7 {.  db
0770: 20 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74 65 20   close.  sqlite 
0780: 64 62 20 74 65 73 74 2e 64 62 0a 20 20 65 78 65  db test.db.  exe
0790: 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d  csql {.    PRAGM
07a0: 41 20 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20  A cache_size;.  
07b0: 20 20 50 52 41 47 4d 41 20 64 65 66 61 75 6c 74    PRAGMA default
07c0: 5f 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20  _cache_size;.   
07d0: 20 50 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e   PRAGMA synchron
07e0: 6f 75 73 3b 0a 20 20 20 20 50 52 41 47 4d 41 20  ous;.    PRAGMA 
07f0: 64 65 66 61 75 6c 74 5f 73 79 6e 63 68 72 6f 6e  default_synchron
0800: 6f 75 73 3b 0a 20 20 7d 0a 7d 20 7b 32 30 30 30  ous;.  }.} {2000
0810: 20 32 30 30 30 20 31 20 31 7d 0a 64 6f 5f 74 65   2000 1 1}.do_te
0820: 73 74 20 70 72 61 67 6d 61 2d 31 2e 38 20 7b 0a  st pragma-1.8 {.
0830: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
0840: 50 52 41 47 4d 41 20 64 65 66 61 75 6c 74 5f 73  PRAGMA default_s
0850: 79 6e 63 68 72 6f 6e 6f 75 73 3d 4f 46 46 3b 0a  ynchronous=OFF;.
0860: 20 20 20 20 50 52 41 47 4d 41 20 63 61 63 68 65      PRAGMA cache
0870: 5f 73 69 7a 65 3b 0a 20 20 20 20 50 52 41 47 4d  _size;.    PRAGM
0880: 41 20 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f  A default_cache_
0890: 73 69 7a 65 3b 0a 20 20 20 20 50 52 41 47 4d 41  size;.    PRAGMA
08a0: 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20 20   synchronous;.  
08b0: 20 20 50 52 41 47 4d 41 20 64 65 66 61 75 6c 74    PRAGMA default
08c0: 5f 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20 20  _synchronous;.  
08d0: 7d 0a 7d 20 7b 32 30 30 30 20 32 30 30 30 20 30  }.} {2000 2000 0
08e0: 20 30 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67   0}.do_test prag
08f0: 6d 61 2d 31 2e 39 20 7b 0a 20 20 65 78 65 63 73  ma-1.9 {.  execs
0900: 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20  ql {.    PRAGMA 
0910: 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69  default_cache_si
0920: 7a 65 3d 31 32 33 3b 0a 20 20 20 20 50 52 41 47  ze=123;.    PRAG
0930: 4d 41 20 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20  MA cache_size;. 
0940: 20 20 20 50 52 41 47 4d 41 20 64 65 66 61 75 6c     PRAGMA defaul
0950: 74 5f 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20  t_cache_size;.  
0960: 20 20 50 52 41 47 4d 41 20 73 79 6e 63 68 72 6f    PRAGMA synchro
0970: 6e 6f 75 73 3b 0a 20 20 20 20 50 52 41 47 4d 41  nous;.    PRAGMA
0980: 20 64 65 66 61 75 6c 74 5f 73 79 6e 63 68 72 6f   default_synchro
0990: 6e 6f 75 73 3b 0a 20 20 7d 0a 7d 20 7b 31 32 33  nous;.  }.} {123
09a0: 20 31 32 33 20 30 20 30 7d 0a 64 6f 5f 74 65 73   123 0 0}.do_tes
09b0: 74 20 70 72 61 67 6d 61 2d 31 2e 31 30 20 7b 0a  t pragma-1.10 {.
09c0: 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 73 65 74    db close.  set
09d0: 20 3a 3a 44 42 20 5b 73 71 6c 69 74 65 20 64 62   ::DB [sqlite db
09e0: 20 74 65 73 74 2e 64 62 5d 0a 20 20 65 78 65 63   test.db].  exec
09f0: 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41  sql {.    PRAGMA
0a00: 20 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20   cache_size;.   
0a10: 20 50 52 41 47 4d 41 20 64 65 66 61 75 6c 74 5f   PRAGMA default_
0a20: 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20  cache_size;.    
0a30: 50 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f  PRAGMA synchrono
0a40: 75 73 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 64  us;.    PRAGMA d
0a50: 65 66 61 75 6c 74 5f 73 79 6e 63 68 72 6f 6e 6f  efault_synchrono
0a60: 75 73 3b 0a 20 20 7d 0a 7d 20 7b 31 32 33 20 31  us;.  }.} {123 1
0a70: 32 33 20 30 20 30 7d 0a 64 6f 5f 74 65 73 74 20  23 0 0}.do_test 
0a80: 70 72 61 67 6d 61 2d 31 2e 31 31 20 7b 0a 20 20  pragma-1.11 {.  
0a90: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52  execsql {.    PR
0aa0: 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73  AGMA synchronous
0ab0: 3d 4e 4f 52 4d 41 4c 3b 0a 20 20 20 20 50 52 41  =NORMAL;.    PRA
0ac0: 47 4d 41 20 63 61 63 68 65 5f 73 69 7a 65 3b 0a  GMA cache_size;.
0ad0: 20 20 20 20 50 52 41 47 4d 41 20 64 65 66 61 75      PRAGMA defau
0ae0: 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20  lt_cache_size;. 
0af0: 20 20 20 50 52 41 47 4d 41 20 73 79 6e 63 68 72     PRAGMA synchr
0b00: 6f 6e 6f 75 73 3b 0a 20 20 20 20 50 52 41 47 4d  onous;.    PRAGM
0b10: 41 20 64 65 66 61 75 6c 74 5f 73 79 6e 63 68 72  A default_synchr
0b20: 6f 6e 6f 75 73 3b 0a 20 20 7d 0a 7d 20 7b 31 32  onous;.  }.} {12
0b30: 33 20 31 32 33 20 31 20 30 7d 0a 64 6f 5f 74 65  3 123 1 0}.do_te
0b40: 73 74 20 70 72 61 67 6d 61 2d 31 2e 31 32 20 7b  st pragma-1.12 {
0b50: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
0b60: 20 50 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e   PRAGMA synchron
0b70: 6f 75 73 3d 46 55 4c 4c 3b 0a 20 20 20 20 50 52  ous=FULL;.    PR
0b80: 41 47 4d 41 20 63 61 63 68 65 5f 73 69 7a 65 3b  AGMA cache_size;
0b90: 0a 20 20 20 20 50 52 41 47 4d 41 20 64 65 66 61  .    PRAGMA defa
0ba0: 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65 3b 0a  ult_cache_size;.
0bb0: 20 20 20 20 50 52 41 47 4d 41 20 73 79 6e 63 68      PRAGMA synch
0bc0: 72 6f 6e 6f 75 73 3b 0a 20 20 20 20 50 52 41 47  ronous;.    PRAG
0bd0: 4d 41 20 64 65 66 61 75 6c 74 5f 73 79 6e 63 68  MA default_synch
0be0: 72 6f 6e 6f 75 73 3b 0a 20 20 7d 0a 7d 20 7b 31  ronous;.  }.} {1
0bf0: 32 33 20 31 32 33 20 32 20 30 7d 0a 64 6f 5f 74  23 123 2 0}.do_t
0c00: 65 73 74 20 70 72 61 67 6d 61 2d 31 2e 31 33 20  est pragma-1.13 
0c10: 7b 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 73  {.  db close.  s
0c20: 65 74 20 3a 3a 44 42 20 5b 73 71 6c 69 74 65 20  et ::DB [sqlite 
0c30: 64 62 20 74 65 73 74 2e 64 62 5d 0a 20 20 65 78  db test.db].  ex
0c40: 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47  ecsql {.    PRAG
0c50: 4d 41 20 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20  MA cache_size;. 
0c60: 20 20 20 50 52 41 47 4d 41 20 64 65 66 61 75 6c     PRAGMA defaul
0c70: 74 5f 63 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20  t_cache_size;.  
0c80: 20 20 50 52 41 47 4d 41 20 73 79 6e 63 68 72 6f    PRAGMA synchro
0c90: 6e 6f 75 73 3b 0a 20 20 20 20 50 52 41 47 4d 41  nous;.    PRAGMA
0ca0: 20 64 65 66 61 75 6c 74 5f 73 79 6e 63 68 72 6f   default_synchro
0cb0: 6e 6f 75 73 3b 0a 20 20 7d 0a 7d 20 7b 31 32 33  nous;.  }.} {123
0cc0: 20 31 32 33 20 30 20 30 7d 0a 64 6f 5f 74 65 73   123 0 0}.do_tes
0cd0: 74 20 70 72 61 67 6d 61 2d 31 2e 31 34 20 7b 0a  t pragma-1.14 {.
0ce0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
0cf0: 50 52 41 47 4d 41 20 64 65 66 61 75 6c 74 5f 73  PRAGMA default_s
0d00: 79 6e 63 68 72 6f 6e 6f 75 73 3d 46 55 4c 4c 3b  ynchronous=FULL;
0d10: 0a 20 20 20 20 50 52 41 47 4d 41 20 63 61 63 68  .    PRAGMA cach
0d20: 65 5f 73 69 7a 65 3b 0a 20 20 20 20 50 52 41 47  e_size;.    PRAG
0d30: 4d 41 20 64 65 66 61 75 6c 74 5f 63 61 63 68 65  MA default_cache
0d40: 5f 73 69 7a 65 3b 0a 20 20 20 20 50 52 41 47 4d  _size;.    PRAGM
0d50: 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20  A synchronous;. 
0d60: 20 20 20 50 52 41 47 4d 41 20 64 65 66 61 75 6c     PRAGMA defaul
0d70: 74 5f 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20  t_synchronous;. 
0d80: 20 7d 0a 7d 20 7b 31 32 33 20 31 32 33 20 32 20   }.} {123 123 2 
0d90: 32 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  2}.do_test pragm
0da0: 61 2d 31 2e 31 35 20 7b 0a 20 20 64 62 20 63 6c  a-1.15 {.  db cl
0db0: 6f 73 65 0a 20 20 73 65 74 20 3a 3a 44 42 20 5b  ose.  set ::DB [
0dc0: 73 71 6c 69 74 65 20 64 62 20 74 65 73 74 2e 64  sqlite db test.d
0dd0: 62 5d 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  b].  execsql {. 
0de0: 20 20 20 50 52 41 47 4d 41 20 63 61 63 68 65 5f     PRAGMA cache_
0df0: 73 69 7a 65 3b 0a 20 20 20 20 50 52 41 47 4d 41  size;.    PRAGMA
0e00: 20 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73   default_cache_s
0e10: 69 7a 65 3b 0a 20 20 20 20 50 52 41 47 4d 41 20  ize;.    PRAGMA 
0e20: 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20 20 20  synchronous;.   
0e30: 20 50 52 41 47 4d 41 20 64 65 66 61 75 6c 74 5f   PRAGMA default_
0e40: 73 79 6e 63 68 72 6f 6e 6f 75 73 3b 0a 20 20 7d  synchronous;.  }
0e50: 0a 7d 20 7b 31 32 33 20 31 32 33 20 32 20 32 7d  .} {123 123 2 2}
0e60: 0a 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  ..do_test pragma
0e70: 2d 32 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c  -2.1 {.  execsql
0e80: 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 73 68   {.    PRAGMA sh
0e90: 6f 77 5f 64 61 74 61 74 79 70 65 73 3d 6f 6e 3b  ow_datatypes=on;
0ea0: 0a 20 20 20 20 50 52 41 47 4d 41 20 65 6d 70 74  .    PRAGMA empt
0eb0: 79 5f 72 65 73 75 6c 74 5f 63 61 6c 6c 62 61 63  y_result_callbac
0ec0: 6b 73 3d 6f 66 66 3b 0a 20 20 7d 0a 20 20 73 71  ks=off;.  }.  sq
0ed0: 6c 69 74 65 5f 64 61 74 61 74 79 70 65 73 20 24  lite_datatypes $
0ee0: 3a 3a 44 42 20 7b 53 45 4c 45 43 54 20 2a 20 46  ::DB {SELECT * F
0ef0: 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
0f00: 72 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20  r}.} {}.do_test 
0f10: 70 72 61 67 6d 61 2d 32 2e 32 20 7b 0a 20 20 65  pragma-2.2 {.  e
0f20: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41  xecsql {.    PRA
0f30: 47 4d 41 20 65 6d 70 74 79 5f 72 65 73 75 6c 74  GMA empty_result
0f40: 5f 63 61 6c 6c 62 61 63 6b 73 3d 6f 6e 3b 0a 20  _callbacks=on;. 
0f50: 20 7d 0a 20 20 73 71 6c 69 74 65 5f 64 61 74 61   }.  sqlite_data
0f60: 74 79 70 65 73 20 24 3a 3a 44 42 20 7b 53 45 4c  types $::DB {SEL
0f70: 45 43 54 20 2a 20 46 52 4f 4d 20 73 71 6c 69 74  ECT * FROM sqlit
0f80: 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 7b 74 65 78  e_master}.} {tex
0f90: 74 20 74 65 78 74 20 74 65 78 74 20 69 6e 74 65  t text text inte
0fa0: 67 65 72 20 74 65 78 74 7d 0a 0a 23 20 4d 61 6b  ger text}..# Mak
0fb0: 65 20 73 75 72 65 20 77 65 20 63 61 6e 20 72 65  e sure we can re
0fc0: 61 64 20 74 68 65 20 73 63 68 65 6d 61 20 77 68  ad the schema wh
0fd0: 65 6e 20 65 6d 70 74 79 5f 72 65 73 75 6c 74 5f  en empty_result_
0fe0: 63 61 6c 6c 62 61 63 6b 73 20 61 72 65 0a 23 20  callbacks are.# 
0ff0: 74 75 72 6e 65 64 20 6f 6e 2e 20 54 69 63 6b 65  turned on. Ticke
1000: 74 20 23 34 30 36 0a 64 6f 5f 74 65 73 74 20 70  t #406.do_test p
1010: 72 61 67 6d 61 2d 32 2e 32 2e 31 20 7b 0a 20 20  ragma-2.2.1 {.  
1020: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 42 45  execsql {.    BE
1030: 47 49 4e 3b 0a 20 20 20 20 43 52 45 41 54 45 20  GIN;.    CREATE 
1040: 54 41 42 4c 45 20 74 61 62 78 28 61 2c 62 2c 63  TABLE tabx(a,b,c
1050: 2c 64 29 3b 0a 20 20 20 20 52 4f 4c 4c 42 41 43  ,d);.    ROLLBAC
1060: 4b 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 63 6f  K;.    SELECT co
1070: 75 6e 74 28 2a 29 20 46 52 4f 4d 20 73 71 6c 69  unt(*) FROM sqli
1080: 74 65 5f 6d 61 73 74 65 72 3b 0a 20 20 7d 0a 7d  te_master;.  }.}
1090: 20 7b 30 7d 0a 0a 64 6f 5f 74 65 73 74 20 70 72   {0}..do_test pr
10a0: 61 67 6d 61 2d 32 2e 33 20 7b 0a 20 20 65 78 65  agma-2.3 {.  exe
10b0: 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54  csql {.    CREAT
10c0: 45 20 54 41 42 4c 45 20 74 31 28 0a 20 20 20 20  E TABLE t1(.    
10d0: 20 20 20 61 20 49 4e 54 45 47 45 52 2c 0a 20 20     a INTEGER,.  
10e0: 20 20 20 20 20 62 20 54 45 58 54 2c 0a 20 20 20       b TEXT,.   
10f0: 20 20 20 20 63 20 57 48 41 54 45 56 45 52 2c 0a      c WHATEVER,.
1100: 20 20 20 20 20 20 20 64 20 43 4c 4f 42 2c 0a 20         d CLOB,. 
1110: 20 20 20 20 20 20 65 20 42 4c 4f 42 2c 0a 20 20        e BLOB,.  
1120: 20 20 20 20 20 66 20 56 41 52 43 48 41 52 28 31       f VARCHAR(1
1130: 32 33 29 2c 0a 20 20 20 20 20 20 20 67 20 6e 56  23),.       g nV
1140: 61 52 63 48 61 52 28 34 33 32 29 0a 20 20 20 20  aRcHaR(432).    
1150: 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 5f  );.  }.  sqlite_
1160: 64 61 74 61 74 79 70 65 73 20 24 3a 3a 44 42 20  datatypes $::DB 
1170: 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74  {SELECT * FROM t
1180: 31 7d 0a 7d 20 7b 49 4e 54 45 47 45 52 20 54 45  1}.} {INTEGER TE
1190: 58 54 20 57 48 41 54 45 56 45 52 20 43 4c 4f 42  XT WHATEVER CLOB
11a0: 20 42 4c 4f 42 20 56 41 52 43 48 41 52 28 31 32   BLOB VARCHAR(12
11b0: 33 29 20 6e 56 61 52 63 48 61 52 28 34 33 32 29  3) nVaRcHaR(432)
11c0: 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  }.do_test pragma
11d0: 2d 32 2e 34 20 7b 0a 20 20 73 71 6c 69 74 65 5f  -2.4 {.  sqlite_
11e0: 64 61 74 61 74 79 70 65 73 20 24 3a 3a 44 42 20  datatypes $::DB 
11f0: 7b 0a 20 20 20 20 20 53 45 4c 45 43 54 20 31 2c  {.     SELECT 1,
1200: 20 27 68 65 6c 6c 6f 27 2c 20 4e 55 4c 4c 0a 20   'hello', NULL. 
1210: 20 7d 0a 7d 20 7b 4e 55 4d 45 52 49 43 20 54 45   }.} {NUMERIC TE
1220: 58 54 20 54 45 58 54 7d 0a 64 6f 5f 74 65 73 74  XT TEXT}.do_test
1230: 20 70 72 61 67 6d 61 2d 32 2e 35 20 7b 0a 20 20   pragma-2.5 {.  
1240: 73 71 6c 69 74 65 5f 64 61 74 61 74 79 70 65 73  sqlite_datatypes
1250: 20 24 3a 3a 44 42 20 7b 0a 20 20 20 20 20 53 45   $::DB {.     SE
1260: 4c 45 43 54 20 31 2b 32 20 41 53 20 58 2c 20 27  LECT 1+2 AS X, '
1270: 68 65 6c 6c 6f 27 20 7c 7c 20 35 20 41 53 20 59  hello' || 5 AS Y
1280: 2c 20 4e 55 4c 4c 20 41 53 20 5a 0a 20 20 7d 0a  , NULL AS Z.  }.
1290: 7d 20 7b 4e 55 4d 45 52 49 43 20 54 45 58 54 20  } {NUMERIC TEXT 
12a0: 54 45 58 54 7d 0a 64 6f 5f 74 65 73 74 20 70 72  TEXT}.do_test pr
12b0: 61 67 6d 61 2d 32 2e 36 20 7b 0a 20 20 65 78 65  agma-2.6 {.  exe
12c0: 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54  csql {.    CREAT
12d0: 45 20 56 49 45 57 20 76 31 20 41 53 20 53 45 4c  E VIEW v1 AS SEL
12e0: 45 43 54 20 61 2b 62 2c 20 62 7c 7c 63 2c 20 2a  ECT a+b, b||c, *
12f0: 20 46 52 4f 4d 20 74 31 3b 0a 20 20 7d 0a 20 20   FROM t1;.  }.  
1300: 73 71 6c 69 74 65 5f 64 61 74 61 74 79 70 65 73  sqlite_datatypes
1310: 20 24 3a 3a 44 42 20 7b 53 45 4c 45 43 54 20 2a   $::DB {SELECT *
1320: 20 46 52 4f 4d 20 76 31 7d 0a 7d 20 7b 4e 55 4d   FROM v1}.} {NUM
1330: 45 52 49 43 20 54 45 58 54 20 49 4e 54 45 47 45  ERIC TEXT INTEGE
1340: 52 20 54 45 58 54 20 57 48 41 54 45 56 45 52 20  R TEXT WHATEVER 
1350: 43 4c 4f 42 20 42 4c 4f 42 20 56 41 52 43 48 41  CLOB BLOB VARCHA
1360: 52 28 31 32 33 29 20 6e 56 61 52 63 48 61 52 28  R(123) nVaRcHaR(
1370: 34 33 32 29 7d 0a 64 6f 5f 74 65 73 74 20 70 72  432)}.do_test pr
1380: 61 67 6d 61 2d 32 2e 37 20 7b 0a 20 20 73 71 6c  agma-2.7 {.  sql
1390: 69 74 65 5f 64 61 74 61 74 79 70 65 73 20 24 3a  ite_datatypes $:
13a0: 3a 44 42 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  :DB {.    SELECT
13b0: 20 64 2c 65 20 46 52 4f 4d 20 74 31 20 55 4e 49   d,e FROM t1 UNI
13c0: 4f 4e 20 53 45 4c 45 43 54 20 61 2c 63 20 46 52  ON SELECT a,c FR
13d0: 4f 4d 20 74 31 0a 20 20 7d 0a 7d 20 7b 49 4e 54  OM t1.  }.} {INT
13e0: 45 47 45 52 20 57 48 41 54 45 56 45 52 7d 0a 64  EGER WHATEVER}.d
13f0: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 32 2e  o_test pragma-2.
1400: 38 20 7b 0a 20 20 73 71 6c 69 74 65 5f 64 61 74  8 {.  sqlite_dat
1410: 61 74 79 70 65 73 20 24 3a 3a 44 42 20 7b 0a 20  atypes $::DB {. 
1420: 20 20 20 53 45 4c 45 43 54 20 64 2c 65 20 46 52     SELECT d,e FR
1430: 4f 4d 20 74 31 20 45 58 43 45 50 54 20 53 45 4c  OM t1 EXCEPT SEL
1440: 45 43 54 20 63 2c 65 20 46 52 4f 4d 20 74 31 0a  ECT c,e FROM t1.
1450: 20 20 7d 0a 7d 20 7b 57 48 41 54 45 56 45 52 20    }.} {WHATEVER 
1460: 42 4c 4f 42 7d 0a 64 6f 5f 74 65 73 74 20 70 72  BLOB}.do_test pr
1470: 61 67 6d 61 2d 32 2e 39 20 7b 0a 20 20 73 71 6c  agma-2.9 {.  sql
1480: 69 74 65 5f 64 61 74 61 74 79 70 65 73 20 24 3a  ite_datatypes $:
1490: 3a 44 42 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  :DB {.    SELECT
14a0: 20 64 2c 65 20 46 52 4f 4d 20 74 31 20 49 4e 54   d,e FROM t1 INT
14b0: 45 52 53 45 43 54 20 53 45 4c 45 43 54 20 63 2c  ERSECT SELECT c,
14c0: 65 20 46 52 4f 4d 20 74 31 0a 20 20 7d 0a 7d 20  e FROM t1.  }.} 
14d0: 7b 57 48 41 54 45 56 45 52 20 42 4c 4f 42 7d 0a  {WHATEVER BLOB}.
14e0: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 2d 32  do_test pragma-2
14f0: 2e 31 30 20 7b 0a 20 20 73 71 6c 69 74 65 5f 64  .10 {.  sqlite_d
1500: 61 74 61 74 79 70 65 73 20 24 3a 3a 44 42 20 7b  atatypes $::DB {
1510: 0a 20 20 20 20 53 45 4c 45 43 54 20 64 2c 65 20  .    SELECT d,e 
1520: 46 52 4f 4d 20 74 31 20 49 4e 54 45 52 53 45 43  FROM t1 INTERSEC
1530: 54 20 53 45 4c 45 43 54 20 63 2c 65 20 46 52 4f  T SELECT c,e FRO
1540: 4d 20 76 31 0a 20 20 7d 0a 7d 20 7b 57 48 41 54  M v1.  }.} {WHAT
1550: 45 56 45 52 20 42 4c 4f 42 7d 0a 0a 23 20 43 6f  EVER BLOB}..# Co
1560: 6e 73 74 72 75 63 74 20 61 20 63 6f 72 72 75 70  nstruct a corrup
1570: 74 65 64 20 69 6e 64 65 78 20 61 6e 64 20 6d 61  ted index and ma
1580: 6b 65 20 73 75 72 65 20 74 68 65 20 69 6e 74 65  ke sure the inte
1590: 67 72 69 74 79 5f 63 68 65 63 6b 0a 23 20 70 72  grity_check.# pr
15a0: 61 67 6d 61 20 66 69 6e 64 73 20 69 74 2e 0a 23  agma finds it..#
15b0: 0a 69 66 20 7b 21 5b 73 71 6c 69 74 65 20 2d 68  .if {![sqlite -h
15c0: 61 73 2d 63 6f 64 65 63 5d 7d 20 7b 0a 64 6f 5f  as-codec]} {.do_
15d0: 74 65 73 74 20 70 72 61 67 6d 61 2d 33 2e 31 20  test pragma-3.1 
15e0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
15f0: 20 20 42 45 47 49 4e 3b 0a 20 20 20 20 43 52 45    BEGIN;.    CRE
1600: 41 54 45 20 54 41 42 4c 45 20 74 32 28 61 2c 62  ATE TABLE t2(a,b
1610: 2c 63 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20  ,c);.    CREATE 
1620: 49 4e 44 45 58 20 69 32 20 4f 4e 20 74 32 28 61  INDEX i2 ON t2(a
1630: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
1640: 54 4f 20 74 32 20 56 41 4c 55 45 53 28 31 31 2c  TO t2 VALUES(11,
1650: 32 2c 33 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  2,3);.    INSERT
1660: 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28   INTO t2 VALUES(
1670: 32 32 2c 33 2c 34 29 3b 0a 20 20 20 20 43 4f 4d  22,3,4);.    COM
1680: 4d 49 54 3b 0a 20 20 20 20 53 45 4c 45 43 54 20  MIT;.    SELECT 
1690: 72 6f 77 69 64 2c 20 2a 20 66 72 6f 6d 20 74 32  rowid, * from t2
16a0: 3b 0a 20 20 7d 0a 7d 20 7b 31 20 31 31 20 32 20  ;.  }.} {1 11 2 
16b0: 33 20 32 20 32 32 20 33 20 34 7d 0a 64 6f 5f 74  3 2 22 3 4}.do_t
16c0: 65 73 74 20 70 72 61 67 6d 61 2d 33 2e 32 20 7b  est pragma-3.2 {
16d0: 0a 20 20 73 65 74 20 72 6f 6f 74 70 61 67 65 20  .  set rootpage 
16e0: 5b 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54  [execsql {SELECT
16f0: 20 72 6f 6f 74 70 61 67 65 20 46 52 4f 4d 20 73   rootpage FROM s
1700: 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 57 48 45  qlite_master WHE
1710: 52 45 20 6e 61 6d 65 3d 27 69 32 27 7d 5d 0a 20  RE name='i2'}]. 
1720: 20 73 65 74 20 64 62 20 5b 62 74 72 65 65 5f 6f   set db [btree_o
1730: 70 65 6e 20 74 65 73 74 2e 64 62 5d 0a 20 20 62  pen test.db].  b
1740: 74 72 65 65 5f 62 65 67 69 6e 5f 74 72 61 6e 73  tree_begin_trans
1750: 61 63 74 69 6f 6e 20 24 64 62 0a 20 20 73 65 74  action $db.  set
1760: 20 63 20 5b 62 74 72 65 65 5f 63 75 72 73 6f 72   c [btree_cursor
1770: 20 24 64 62 20 24 72 6f 6f 74 70 61 67 65 20 31   $db $rootpage 1
1780: 5d 0a 20 20 62 74 72 65 65 5f 66 69 72 73 74 20  ].  btree_first 
1790: 24 63 0a 20 20 62 74 72 65 65 5f 64 65 6c 65 74  $c.  btree_delet
17a0: 65 20 24 63 0a 20 20 62 74 72 65 65 5f 63 6f 6d  e $c.  btree_com
17b0: 6d 69 74 20 24 64 62 0a 20 20 62 74 72 65 65 5f  mit $db.  btree_
17c0: 63 6c 6f 73 65 20 24 64 62 0a 20 20 65 78 65 63  close $db.  exec
17d0: 73 71 6c 20 7b 50 52 41 47 4d 41 20 69 6e 74 65  sql {PRAGMA inte
17e0: 67 72 69 74 79 5f 63 68 65 63 6b 7d 0a 7d 20 7b  grity_check}.} {
17f0: 7b 72 6f 77 69 64 20 31 20 6d 69 73 73 69 6e 67  {rowid 1 missing
1800: 20 66 72 6f 6d 20 69 6e 64 65 78 20 69 32 7d 20   from index i2} 
1810: 7b 77 72 6f 6e 67 20 23 20 6f 66 20 65 6e 74 72  {wrong # of entr
1820: 69 65 73 20 69 6e 20 69 6e 64 65 78 20 69 32 7d  ies in index i2}
1830: 7d 0a 7d 3b 20 23 20 65 6e 64 69 66 20 68 61 73  }.}; # endif has
1840: 2d 63 6f 64 65 63 0a 0a 66 69 6e 69 73 68 5f 74  -codec..finish_t
1850: 65 73 74 0a                                      est.