/ Hex Artifact Content
Login

Artifact 6f849ccffeee7e496d2f2b5e74152306c0b8757c:


0000: 23 20 32 30 31 34 2d 31 32 2d 31 39 0a 23 0a 23  # 2014-12-19.#.#
0010: 20 54 68 65 20 61 75 74 68 6f 72 20 64 69 73 63   The author disc
0020: 6c 61 69 6d 73 20 63 6f 70 79 72 69 67 68 74 20  laims copyright 
0030: 74 6f 20 74 68 69 73 20 73 6f 75 72 63 65 20 63  to this source c
0040: 6f 64 65 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f  ode.  In place o
0050: 66 0a 23 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69  f.# a legal noti
0060: 63 65 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c  ce, here is a bl
0070: 65 73 73 69 6e 67 3a 0a 23 0a 23 20 20 20 20 4d  essing:.#.#    M
0080: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
0090: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 23 20 20  nd not evil..#  
00a0: 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20 66    May you find f
00b0: 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20 79  orgiveness for y
00c0: 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72 67  ourself and forg
00d0: 69 76 65 20 6f 74 68 65 72 73 2e 0a 23 20 20 20  ive others..#   
00e0: 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65 20 66   May you share f
00f0: 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74 61 6b  reely, never tak
0100: 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20 79 6f  ing more than yo
0110: 75 20 67 69 76 65 2e 0a 23 0a 23 2a 2a 2a 2a 2a  u 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 0a 23 20 54 68 69 73 20 66 69 6c 65 20 69  **.# This file i
0170: 6d 70 6c 65 6d 65 6e 74 73 20 72 65 67 72 65 73  mplements regres
0180: 73 69 6f 6e 20 74 65 73 74 73 20 66 6f 72 20 53  sion tests for S
0190: 51 4c 69 74 65 20 6c 69 62 72 61 72 79 2e 0a 23  QLite library..#
01a0: 0a 23 20 54 68 69 73 20 66 69 6c 65 20 69 6d 70  .# This file imp
01b0: 6c 65 6d 65 6e 74 73 20 74 65 73 74 73 20 66 6f  lements tests fo
01c0: 72 20 50 52 41 47 4d 41 20 64 61 74 61 5f 76 65  r PRAGMA data_ve
01d0: 72 73 69 6f 6e 20 63 6f 6d 6d 61 6e 64 2e 0a 23  rsion command..#
01e0: 0a 0a 73 65 74 20 74 65 73 74 64 69 72 20 5b 66  ..set testdir [f
01f0: 69 6c 65 20 64 69 72 6e 61 6d 65 20 24 61 72 67  ile dirname $arg
0200: 76 30 5d 0a 73 6f 75 72 63 65 20 24 74 65 73 74  v0].source $test
0210: 64 69 72 2f 74 65 73 74 65 72 2e 74 63 6c 0a 0a  dir/tester.tcl..
0220: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
0230: 70 72 61 67 6d 61 33 2d 31 30 30 20 7b 0a 20 20  pragma3-100 {.  
0240: 50 52 41 47 4d 41 20 64 61 74 61 5f 76 65 72 73  PRAGMA data_vers
0250: 69 6f 6e 3b 0a 7d 20 7b 31 7d 0a 64 6f 5f 65 78  ion;.} {1}.do_ex
0260: 65 63 73 71 6c 5f 74 65 73 74 20 70 72 61 67 6d  ecsql_test pragm
0270: 61 33 2d 31 30 31 20 7b 0a 20 20 50 52 41 47 4d  a3-101 {.  PRAGM
0280: 41 20 74 65 6d 70 2e 64 61 74 61 5f 76 65 72 73  A temp.data_vers
0290: 69 6f 6e 3b 0a 7d 20 7b 31 7d 0a 0a 23 20 57 72  ion;.} {1}..# Wr
02a0: 69 74 69 6e 67 20 74 6f 20 74 68 65 20 70 72 61  iting to the pra
02b0: 67 6d 61 20 69 73 20 61 20 6e 6f 2d 6f 70 20 0a  gma is a no-op .
02c0: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
02d0: 70 72 61 67 6d 61 33 2d 31 30 32 20 7b 0a 20 20  pragma3-102 {.  
02e0: 50 52 41 47 4d 41 20 6d 61 69 6e 2e 64 61 74 61  PRAGMA main.data
02f0: 5f 76 65 72 73 69 6f 6e 3d 31 32 33 34 3b 0a 20  _version=1234;. 
0300: 20 50 52 41 47 4d 41 20 6d 61 69 6e 2e 64 61 74   PRAGMA main.dat
0310: 61 5f 76 65 72 73 69 6f 6e 3b 0a 7d 20 7b 31 20  a_version;.} {1 
0320: 31 7d 0a 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f  1}..# EVIDENCE-O
0330: 46 3a 20 52 2d 32 37 37 32 36 2d 36 30 39 33 34  F: R-27726-60934
0340: 20 54 68 65 20 22 50 52 41 47 4d 41 20 64 61 74   The "PRAGMA dat
0350: 61 5f 76 65 72 73 69 6f 6e 22 20 63 6f 6d 6d 61  a_version" comma
0360: 6e 64 20 70 72 6f 76 69 64 65 73 0a 23 20 61 6e  nd provides.# an
0370: 20 69 6e 64 69 63 61 74 69 6f 6e 20 74 68 61 74   indication that
0380: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
0390: 6c 65 20 68 61 73 20 62 65 65 6e 20 6d 6f 64 69  le has been modi
03a0: 66 69 65 64 2e 0a 23 0a 23 20 45 56 49 44 45 4e  fied..#.# EVIDEN
03b0: 43 45 2d 4f 46 3a 20 52 2d 34 37 35 30 35 2d 35  CE-OF: R-47505-5
03c0: 38 35 36 39 20 54 68 65 20 22 50 52 41 47 4d 41  8569 The "PRAGMA
03d0: 20 64 61 74 61 5f 76 65 72 73 69 6f 6e 22 20 76   data_version" v
03e0: 61 6c 75 65 20 69 73 0a 23 20 75 6e 63 68 61 6e  alue is.# unchan
03f0: 67 65 64 20 66 6f 72 20 63 6f 6d 6d 69 74 73 20  ged for commits 
0400: 6d 61 64 65 20 6f 6e 20 74 68 65 20 73 61 6d 65  made on the same
0410: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
0420: 74 69 6f 6e 2e 0a 23 0a 64 6f 5f 65 78 65 63 73  tion..#.do_execs
0430: 71 6c 5f 74 65 73 74 20 70 72 61 67 6d 61 33 2d  ql_test pragma3-
0440: 31 31 30 20 7b 0a 20 20 50 52 41 47 4d 41 20 64  110 {.  PRAGMA d
0450: 61 74 61 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 42  ata_version;.  B
0460: 45 47 49 4e 20 49 4d 4d 45 44 49 41 54 45 3b 0a  EGIN IMMEDIATE;.
0470: 20 20 50 52 41 47 4d 41 20 64 61 74 61 5f 76 65    PRAGMA data_ve
0480: 72 73 69 6f 6e 3b 0a 20 20 43 52 45 41 54 45 20  rsion;.  CREATE 
0490: 54 41 42 4c 45 20 74 31 28 61 29 3b 0a 20 20 49  TABLE t1(a);.  I
04a0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41  NSERT INTO t1 VA
04b0: 4c 55 45 53 28 31 30 30 29 2c 28 32 30 30 29 2c  LUES(100),(200),
04c0: 28 33 30 30 29 3b 0a 20 20 50 52 41 47 4d 41 20  (300);.  PRAGMA 
04d0: 64 61 74 61 5f 76 65 72 73 69 6f 6e 3b 0a 20 20  data_version;.  
04e0: 43 4f 4d 4d 49 54 3b 0a 20 20 53 45 4c 45 43 54  COMMIT;.  SELECT
04f0: 20 2a 20 46 52 4f 4d 20 74 31 3b 0a 20 20 50 52   * FROM t1;.  PR
0500: 41 47 4d 41 20 64 61 74 61 5f 76 65 72 73 69 6f  AGMA data_versio
0510: 6e 3b 0a 7d 20 7b 31 20 31 20 31 20 31 30 30 20  n;.} {1 1 1 100 
0520: 32 30 30 20 33 30 30 20 31 7d 0a 0a 73 71 6c 69  200 300 1}..sqli
0530: 74 65 33 20 64 62 32 20 74 65 73 74 2e 64 62 0a  te3 db2 test.db.
0540: 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 33 2d  do_test pragma3-
0550: 31 32 30 20 7b 0a 20 20 64 62 32 20 65 76 61 6c  120 {.  db2 eval
0560: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20   {.    SELECT * 
0570: 46 52 4f 4d 20 74 31 3b 0a 20 20 20 20 50 52 41  FROM t1;.    PRA
0580: 47 4d 41 20 64 61 74 61 5f 76 65 72 73 69 6f 6e  GMA data_version
0590: 3b 0a 20 20 7d 0a 7d 20 7b 31 30 30 20 32 30 30  ;.  }.} {100 200
05a0: 20 33 30 30 20 31 7d 0a 0a 64 6f 5f 65 78 65 63   300 1}..do_exec
05b0: 73 71 6c 5f 74 65 73 74 20 70 72 61 67 6d 61 33  sql_test pragma3
05c0: 2d 31 33 30 20 7b 0a 20 20 50 52 41 47 4d 41 20  -130 {.  PRAGMA 
05d0: 64 61 74 61 5f 76 65 72 73 69 6f 6e 3b 0a 20 20  data_version;.  
05e0: 42 45 47 49 4e 20 49 4d 4d 45 44 49 41 54 45 3b  BEGIN IMMEDIATE;
05f0: 0a 20 20 50 52 41 47 4d 41 20 64 61 74 61 5f 76  .  PRAGMA data_v
0600: 65 72 73 69 6f 6e 3b 0a 20 20 49 4e 53 45 52 54  ersion;.  INSERT
0610: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
0620: 34 30 30 29 2c 28 35 30 30 29 3b 0a 20 20 50 52  400),(500);.  PR
0630: 41 47 4d 41 20 64 61 74 61 5f 76 65 72 73 69 6f  AGMA data_versio
0640: 6e 3b 0a 20 20 43 4f 4d 4d 49 54 3b 0a 20 20 53  n;.  COMMIT;.  S
0650: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 3b  ELECT * FROM t1;
0660: 0a 20 20 50 52 41 47 4d 41 20 64 61 74 61 5f 76  .  PRAGMA data_v
0670: 65 72 73 69 6f 6e 3b 0a 20 20 50 52 41 47 4d 41  ersion;.  PRAGMA
0680: 20 73 68 72 69 6e 6b 5f 6d 65 6d 6f 72 79 3b 0a   shrink_memory;.
0690: 7d 20 7b 31 20 31 20 31 20 31 30 30 20 32 30 30  } {1 1 1 100 200
06a0: 20 33 30 30 20 34 30 30 20 35 30 30 20 31 7d 0a   300 400 500 1}.
06b0: 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20  .# EVIDENCE-OF: 
06c0: 52 2d 36 33 30 30 35 2d 34 31 38 31 32 20 54 68  R-63005-41812 Th
06d0: 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 73  e integer values
06e0: 20 72 65 74 75 72 6e 65 64 20 62 79 20 74 77 6f   returned by two
06f0: 0a 23 20 69 6e 76 6f 63 61 74 69 6f 6e 73 20 6f  .# invocations o
0700: 66 20 22 50 52 41 47 4d 41 20 64 61 74 61 5f 76  f "PRAGMA data_v
0710: 65 72 73 69 6f 6e 22 20 66 72 6f 6d 20 74 68 65  ersion" from the
0720: 20 73 61 6d 65 20 63 6f 6e 6e 65 63 74 69 6f 6e   same connection
0730: 20 77 69 6c 6c 20 62 65 0a 23 20 64 69 66 66 65   will be.# diffe
0740: 72 65 6e 74 20 69 66 20 63 68 61 6e 67 65 73 20  rent if changes 
0750: 77 65 72 65 20 63 6f 6d 6d 69 74 74 65 64 20 74  were committed t
0760: 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20 62  o the database b
0770: 79 20 61 6e 79 20 6f 74 68 65 72 0a 23 20 63 6f  y any other.# co
0780: 6e 6e 65 63 74 69 6f 6e 20 69 6e 20 74 68 65 20  nnection in the 
0790: 69 6e 74 65 72 69 6d 2e 0a 23 0a 23 20 56 61 6c  interim..#.# Val
07a0: 75 65 20 77 65 6e 74 20 66 72 6f 6d 20 31 20 69  ue went from 1 i
07b0: 6e 20 70 72 61 67 6d 61 33 2d 31 32 30 20 74 6f  n pragma3-120 to
07c0: 20 32 20 68 65 72 65 2e 0a 23 0a 64 6f 5f 74 65   2 here..#.do_te
07d0: 73 74 20 70 72 61 67 6d 61 33 2d 31 34 30 20 7b  st pragma3-140 {
07e0: 0a 20 20 64 62 32 20 65 76 61 6c 20 7b 0a 20 20  .  db2 eval {.  
07f0: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
0800: 74 31 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 64  t1;.    PRAGMA d
0810: 61 74 61 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 20  ata_version;.   
0820: 20 42 45 47 49 4e 20 49 4d 4d 45 44 49 41 54 45   BEGIN IMMEDIATE
0830: 3b 0a 20 20 20 20 50 52 41 47 4d 41 20 64 61 74  ;.    PRAGMA dat
0840: 61 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 20 20 55  a_version;.    U
0850: 50 44 41 54 45 20 74 31 20 53 45 54 20 61 3d 61  PDATE t1 SET a=a
0860: 2b 31 3b 0a 20 20 20 20 43 4f 4d 4d 49 54 3b 0a  +1;.    COMMIT;.
0870: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
0880: 4d 20 74 31 3b 0a 20 20 20 20 50 52 41 47 4d 41  M t1;.    PRAGMA
0890: 20 64 61 74 61 5f 76 65 72 73 69 6f 6e 3b 0a 20   data_version;. 
08a0: 20 7d 0a 7d 20 7b 31 30 30 20 32 30 30 20 33 30   }.} {100 200 30
08b0: 30 20 34 30 30 20 35 30 30 20 32 20 32 20 31 30  0 400 500 2 2 10
08c0: 31 20 32 30 31 20 33 30 31 20 34 30 31 20 35 30  1 201 301 401 50
08d0: 31 20 32 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f  1 2}.do_execsql_
08e0: 74 65 73 74 20 70 72 61 67 6d 61 33 2d 31 35 30  test pragma3-150
08f0: 20 7b 0a 20 20 53 45 4c 45 43 54 20 2a 20 46 52   {.  SELECT * FR
0900: 4f 4d 20 74 31 3b 0a 20 20 50 52 41 47 4d 41 20  OM t1;.  PRAGMA 
0910: 64 61 74 61 5f 76 65 72 73 69 6f 6e 3b 0a 7d 20  data_version;.} 
0920: 7b 31 30 31 20 32 30 31 20 33 30 31 20 34 30 31  {101 201 301 401
0930: 20 35 30 31 20 32 7d 0a 0a 23 0a 64 6f 5f 74 65   501 2}..#.do_te
0940: 73 74 20 70 72 61 67 6d 61 33 2d 31 36 30 20 7b  st pragma3-160 {
0950: 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a 20 20 20  .  db eval {.   
0960: 20 42 45 47 49 4e 3b 0a 20 20 20 20 50 52 41 47   BEGIN;.    PRAG
0970: 4d 41 20 64 61 74 61 5f 76 65 72 73 69 6f 6e 3b  MA data_version;
0980: 0a 20 20 20 20 55 50 44 41 54 45 20 74 31 20 53  .    UPDATE t1 S
0990: 45 54 20 61 3d 35 35 35 20 57 48 45 52 45 20 61  ET a=555 WHERE a
09a0: 3d 35 30 31 3b 0a 20 20 20 20 50 52 41 47 4d 41  =501;.    PRAGMA
09b0: 20 64 61 74 61 5f 76 65 72 73 69 6f 6e 3b 0a 20   data_version;. 
09c0: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
09d0: 20 74 31 20 4f 52 44 45 52 20 42 59 20 61 3b 0a   t1 ORDER BY a;.
09e0: 20 20 20 20 50 52 41 47 4d 41 20 64 61 74 61 5f      PRAGMA data_
09f0: 76 65 72 73 69 6f 6e 3b 0a 20 20 7d 0a 7d 20 7b  version;.  }.} {
0a00: 32 20 32 20 31 30 31 20 32 30 31 20 33 30 31 20  2 2 101 201 301 
0a10: 34 30 31 20 35 35 35 20 32 7d 0a 64 6f 5f 74 65  401 555 2}.do_te
0a20: 73 74 20 70 72 61 67 6d 61 33 2d 31 37 30 20 7b  st pragma3-170 {
0a30: 0a 20 20 64 62 32 20 65 76 61 6c 20 7b 0a 20 20  .  db2 eval {.  
0a40: 20 20 50 52 41 47 4d 41 20 64 61 74 61 5f 76 65    PRAGMA data_ve
0a50: 72 73 69 6f 6e 3b 0a 20 20 7d 0a 7d 20 7b 32 7d  rsion;.  }.} {2}
0a60: 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 33  .do_test pragma3
0a70: 2d 31 38 30 20 7b 0a 20 20 64 62 20 65 76 61 6c  -180 {.  db eval
0a80: 20 7b 0a 20 20 20 20 43 4f 4d 4d 49 54 3b 0a 20   {.    COMMIT;. 
0a90: 20 20 20 50 52 41 47 4d 41 20 64 61 74 61 5f 76     PRAGMA data_v
0aa0: 65 72 73 69 6f 6e 3b 0a 20 20 7d 0a 7d 20 7b 32  ersion;.  }.} {2
0ab0: 7d 0a 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61  }.do_test pragma
0ac0: 33 2d 31 39 30 20 7b 0a 20 20 64 62 32 20 65 76  3-190 {.  db2 ev
0ad0: 61 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20  al {.    PRAGMA 
0ae0: 64 61 74 61 5f 76 65 72 73 69 6f 6e 3b 0a 20 20  data_version;.  
0af0: 7d 0a 7d 20 7b 33 7d 0a 0a 23 20 45 56 49 44 45  }.} {3}..# EVIDE
0b00: 4e 43 45 2d 4f 46 3a 20 52 2d 31 39 33 32 36 2d  NCE-OF: R-19326-
0b10: 34 34 38 32 35 20 54 68 65 20 22 50 52 41 47 4d  44825 The "PRAGM
0b20: 41 20 64 61 74 61 5f 76 65 72 73 69 6f 6e 22 20  A data_version" 
0b30: 76 61 6c 75 65 20 69 73 20 61 20 6c 6f 63 61 6c  value is a local
0b40: 0a 23 20 70 72 6f 70 65 72 74 79 20 6f 66 20 65  .# property of e
0b50: 61 63 68 20 64 61 74 61 62 61 73 65 20 63 6f 6e  ach database con
0b60: 6e 65 63 74 69 6f 6e 20 61 6e 64 20 73 6f 20 76  nection and so v
0b70: 61 6c 75 65 73 20 72 65 74 75 72 6e 65 64 20 62  alues returned b
0b80: 79 20 74 77 6f 0a 23 20 63 6f 6e 63 75 72 72 65  y two.# concurre
0b90: 6e 74 20 69 6e 76 6f 63 61 74 69 6f 6e 73 20 6f  nt invocations o
0ba0: 66 20 22 50 52 41 47 4d 41 20 64 61 74 61 5f 76  f "PRAGMA data_v
0bb0: 65 72 73 69 6f 6e 22 20 6f 6e 20 73 65 70 61 72  ersion" on separ
0bc0: 61 74 65 20 64 61 74 61 62 61 73 65 0a 23 20 63  ate database.# c
0bd0: 6f 6e 6e 65 63 74 69 6f 6e 73 20 61 72 65 20 6f  onnections are o
0be0: 66 74 65 6e 20 64 69 66 66 65 72 65 6e 74 20 65  ften different e
0bf0: 76 65 6e 20 74 68 6f 75 67 68 20 74 68 65 20 75  ven though the u
0c00: 6e 64 65 72 6c 79 69 6e 67 20 64 61 74 61 62 61  nderlying databa
0c10: 73 65 20 69 73 0a 23 20 69 64 65 6e 74 69 63 61  se is.# identica
0c20: 6c 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 70 72 61  l..#.do_test pra
0c30: 67 6d 61 33 2d 31 39 35 20 7b 0a 20 20 65 78 70  gma3-195 {.  exp
0c40: 72 20 7b 5b 64 62 20 65 76 61 6c 20 7b 50 52 41  r {[db eval {PRA
0c50: 47 4d 41 20 64 61 74 61 5f 76 65 72 73 69 6f 6e  GMA data_version
0c60: 7d 5d 21 3d 5b 64 62 32 20 65 76 61 6c 20 7b 50  }]!=[db2 eval {P
0c70: 52 41 47 4d 41 20 64 61 74 61 5f 76 65 72 73 69  RAGMA data_versi
0c80: 6f 6e 7d 5d 7d 0a 7d 20 7b 31 7d 0a 0a 23 20 45  on}]}.} {1}..# E
0c90: 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 35 34  VIDENCE-OF: R-54
0ca0: 35 36 32 2d 30 36 38 39 32 20 54 68 65 20 62 65  562-06892 The be
0cb0: 68 61 76 69 6f 72 20 6f 66 20 22 50 52 41 47 4d  havior of "PRAGM
0cc0: 41 20 64 61 74 61 5f 76 65 72 73 69 6f 6e 22 20  A data_version" 
0cd0: 69 73 0a 23 20 74 68 65 20 73 61 6d 65 20 66 6f  is.# the same fo
0ce0: 72 20 61 6c 6c 20 64 61 74 61 62 61 73 65 20 63  r all database c
0cf0: 6f 6e 6e 65 63 74 69 6f 6e 73 2c 20 69 6e 63 6c  onnections, incl
0d00: 75 64 69 6e 67 20 64 61 74 61 62 61 73 65 20 63  uding database c
0d10: 6f 6e 6e 65 63 74 69 6f 6e 73 0a 23 20 69 6e 20  onnections.# in 
0d20: 73 65 70 61 72 61 74 65 20 70 72 6f 63 65 73 73  separate process
0d30: 65 73 20 61 6e 64 20 73 68 61 72 65 64 20 63 61  es and shared ca
0d40: 63 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  che database con
0d50: 6e 65 63 74 69 6f 6e 73 2e 0a 23 0a 23 20 54 68  nections..#.# Th
0d60: 65 20 6e 65 78 74 20 62 6c 6f 63 6b 20 63 68 65  e next block che
0d70: 63 6b 73 20 74 68 65 20 62 65 68 61 76 69 6f 72  cks the behavior
0d80: 20 66 6f 72 20 73 65 70 61 72 61 74 65 20 70 72   for separate pr
0d90: 6f 63 65 73 73 65 73 2e 0a 23 0a 64 6f 5f 74 65  ocesses..#.do_te
0da0: 73 74 20 70 72 61 67 6d 61 33 2d 32 30 30 20 7b  st pragma3-200 {
0db0: 0a 20 20 64 62 20 65 76 61 6c 20 7b 50 52 41 47  .  db eval {PRAG
0dc0: 4d 41 20 64 61 74 61 5f 76 65 72 73 69 6f 6e 3b  MA data_version;
0dd0: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
0de0: 31 3b 7d 0a 7d 20 7b 32 20 31 30 31 20 32 30 31  1;}.} {2 101 201
0df0: 20 33 30 31 20 34 30 31 20 35 35 35 7d 0a 64 6f   301 401 555}.do
0e00: 5f 74 65 73 74 20 70 72 61 67 6d 61 33 2d 32 30  _test pragma3-20
0e10: 31 20 7b 0a 20 20 73 65 74 20 66 64 20 5b 6f 70  1 {.  set fd [op
0e20: 65 6e 20 70 72 61 67 6d 61 33 2e 74 78 74 20 77  en pragma3.txt w
0e30: 62 5d 0a 20 20 70 75 74 73 20 24 66 64 20 7b 0a  b].  puts $fd {.
0e40: 20 20 20 20 20 73 71 6c 69 74 65 33 20 64 62 20       sqlite3 db 
0e50: 74 65 73 74 2e 64 62 3b 0a 20 20 20 20 20 64 62  test.db;.     db
0e60: 20 65 76 61 6c 20 7b 44 45 4c 45 54 45 20 46 52   eval {DELETE FR
0e70: 4f 4d 20 74 31 20 57 48 45 52 45 20 61 3e 33 30  OM t1 WHERE a>30
0e80: 30 7d 3b 0a 20 20 20 20 20 64 62 20 63 6c 6f 73  0};.     db clos
0e90: 65 3b 0a 20 20 20 20 20 65 78 69 74 3b 0a 20 20  e;.     exit;.  
0ea0: 7d 0a 20 20 63 6c 6f 73 65 20 24 66 64 0a 20 20  }.  close $fd.  
0eb0: 65 78 65 63 20 5b 69 6e 66 6f 20 6e 61 6d 65 6f  exec [info nameo
0ec0: 66 65 78 65 63 5d 20 70 72 61 67 6d 61 33 2e 74  fexec] pragma3.t
0ed0: 78 74 0a 20 20 66 6f 72 63 65 64 65 6c 65 74 65  xt.  forcedelete
0ee0: 20 70 72 61 67 6d 61 33 2e 74 78 74 0a 20 20 64   pragma3.txt.  d
0ef0: 62 20 65 76 61 6c 20 7b 0a 20 20 20 20 50 52 41  b eval {.    PRA
0f00: 47 4d 41 20 64 61 74 61 5f 76 65 72 73 69 6f 6e  GMA data_version
0f10: 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  ;.    SELECT * F
0f20: 52 4f 4d 20 74 31 3b 0a 20 20 7d 0a 7d 20 7b 33  ROM t1;.  }.} {3
0f30: 20 31 30 31 20 32 30 31 7d 0a 64 62 32 20 63 6c   101 201}.db2 cl
0f40: 6f 73 65 0a 64 62 20 63 6c 6f 73 65 0a 0a 23 20  ose.db close..# 
0f50: 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 35  EVIDENCE-OF: R-5
0f60: 34 35 36 32 2d 30 36 38 39 32 20 54 68 65 20 62  4562-06892 The b
0f70: 65 68 61 76 69 6f 72 20 6f 66 20 22 50 52 41 47  ehavior of "PRAG
0f80: 4d 41 20 64 61 74 61 5f 76 65 72 73 69 6f 6e 22  MA data_version"
0f90: 20 69 73 0a 23 20 74 68 65 20 73 61 6d 65 20 66   is.# the same f
0fa0: 6f 72 20 61 6c 6c 20 64 61 74 61 62 61 73 65 20  or all database 
0fb0: 63 6f 6e 6e 65 63 74 69 6f 6e 73 2c 20 69 6e 63  connections, inc
0fc0: 6c 75 64 69 6e 67 20 64 61 74 61 62 61 73 65 20  luding database 
0fd0: 63 6f 6e 6e 65 63 74 69 6f 6e 73 0a 23 20 69 6e  connections.# in
0fe0: 20 73 65 70 61 72 61 74 65 20 70 72 6f 63 65 73   separate proces
0ff0: 73 65 73 20 61 6e 64 20 73 68 61 72 65 64 20 63  ses and shared c
1000: 61 63 68 65 20 64 61 74 61 62 61 73 65 20 63 6f  ache database co
1010: 6e 6e 65 63 74 69 6f 6e 73 2e 0a 23 0a 23 20 54  nnections..#.# T
1020: 68 65 20 6e 65 78 74 20 62 6c 6f 63 6b 20 63 68  he next block ch
1030: 65 63 6b 73 20 74 68 61 74 20 62 65 68 61 76 69  ecks that behavi
1040: 6f 72 20 69 73 20 74 68 65 20 73 61 6d 65 20 66  or is the same f
1050: 6f 72 20 73 68 61 72 65 64 2d 63 61 63 68 65 2e  or shared-cache.
1060: 0a 23 0a 69 66 63 61 70 61 62 6c 65 20 73 68 61  .#.ifcapable sha
1070: 72 65 64 5f 63 61 63 68 65 20 7b 0a 20 20 73 65  red_cache {.  se
1080: 74 20 3a 3a 65 6e 61 62 6c 65 5f 73 68 61 72 65  t ::enable_share
1090: 64 5f 63 61 63 68 65 20 5b 73 71 6c 69 74 65 33  d_cache [sqlite3
10a0: 5f 65 6e 61 62 6c 65 5f 73 68 61 72 65 64 5f 63  _enable_shared_c
10b0: 61 63 68 65 20 31 5d 0a 20 20 73 71 6c 69 74 65  ache 1].  sqlite
10c0: 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20 73  3 db test.db.  s
10d0: 71 6c 69 74 65 33 20 64 62 32 20 74 65 73 74 2e  qlite3 db2 test.
10e0: 64 62 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61  db.  do_test pra
10f0: 67 6d 61 33 2d 33 30 30 20 7b 0a 20 20 20 20 64  gma3-300 {.    d
1100: 62 20 65 76 61 6c 20 7b 0a 20 20 20 20 20 20 50  b eval {.      P
1110: 52 41 47 4d 41 20 64 61 74 61 5f 76 65 72 73 69  RAGMA data_versi
1120: 6f 6e 3b 0a 20 20 20 20 20 20 42 45 47 49 4e 3b  on;.      BEGIN;
1130: 0a 20 20 20 20 20 20 43 52 45 41 54 45 20 54 41  .      CREATE TA
1140: 42 4c 45 20 74 33 28 61 2c 62 2c 63 29 3b 0a 20  BLE t3(a,b,c);. 
1150: 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c       CREATE TABL
1160: 45 20 74 34 28 78 2c 79 2c 7a 29 3b 0a 20 20 20  E t4(x,y,z);.   
1170: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
1180: 34 20 56 41 4c 55 45 53 28 31 32 33 2c 34 35 36  4 VALUES(123,456
1190: 2c 37 38 39 29 3b 0a 20 20 20 20 20 20 50 52 41  ,789);.      PRA
11a0: 47 4d 41 20 64 61 74 61 5f 76 65 72 73 69 6f 6e  GMA data_version
11b0: 3b 0a 20 20 20 20 20 20 43 4f 4d 4d 49 54 3b 0a  ;.      COMMIT;.
11c0: 20 20 20 20 20 20 50 52 41 47 4d 41 20 64 61 74        PRAGMA dat
11d0: 61 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 20 20 7d  a_version;.    }
11e0: 0a 20 20 7d 20 7b 31 20 31 20 31 7d 0a 20 20 64  .  } {1 1 1}.  d
11f0: 6f 5f 74 65 73 74 20 70 72 61 67 6d 61 33 2d 33  o_test pragma3-3
1200: 31 30 20 7b 0a 20 20 20 20 64 62 32 20 65 76 61  10 {.    db2 eva
1210: 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41  l {.      PRAGMA
1220: 20 64 61 74 61 5f 76 65 72 73 69 6f 6e 3b 0a 20   data_version;. 
1230: 20 20 20 20 20 42 45 47 49 4e 3b 0a 20 20 20 20       BEGIN;.    
1240: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 33    INSERT INTO t3
1250: 28 61 2c 62 2c 63 29 20 56 41 4c 55 45 53 28 27  (a,b,c) VALUES('
1260: 61 62 63 27 2c 27 64 65 66 27 2c 27 67 68 69 27  abc','def','ghi'
1270: 29 3b 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20  );.      SELECT 
1280: 2a 20 46 52 4f 4d 20 74 33 3b 0a 20 20 20 20 20  * FROM t3;.     
1290: 20 50 52 41 47 4d 41 20 64 61 74 61 5f 76 65 72   PRAGMA data_ver
12a0: 73 69 6f 6e 3b 0a 20 20 20 20 7d 0a 20 20 7d 20  sion;.    }.  } 
12b0: 7b 32 20 61 62 63 20 64 65 66 20 67 68 69 20 32  {2 abc def ghi 2
12c0: 7d 0a 20 20 23 20 54 68 65 20 74 72 61 6e 73 61  }.  # The transa
12d0: 63 74 69 6f 6e 20 69 6e 20 64 62 32 20 68 61 73  ction in db2 has
12e0: 20 6e 6f 74 20 79 65 74 20 63 6f 6d 6d 69 74 74   not yet committ
12f0: 65 64 2c 20 73 6f 20 74 68 65 20 64 61 74 61 5f  ed, so the data_
1300: 76 65 72 73 69 6f 6e 20 69 6e 0a 20 20 23 20 64  version in.  # d
1310: 62 20 69 73 20 75 6e 63 68 61 6e 67 65 64 2e 0a  b is unchanged..
1320: 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d 61    do_test pragma
1330: 33 2d 33 32 30 20 7b 0a 20 20 20 20 64 62 20 65  3-320 {.    db e
1340: 76 61 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47  val {.      PRAG
1350: 4d 41 20 64 61 74 61 5f 76 65 72 73 69 6f 6e 3b  MA data_version;
1360: 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20 2a 20  .      SELECT * 
1370: 46 52 4f 4d 20 74 34 3b 0a 20 20 20 20 7d 0a 20  FROM t4;.    }. 
1380: 20 7d 20 7b 31 20 31 32 33 20 34 35 36 20 37 38   } {1 123 456 78
1390: 39 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61  9}.  do_test pra
13a0: 67 6d 61 33 2d 33 33 30 20 7b 0a 20 20 20 20 64  gma3-330 {.    d
13b0: 62 32 20 65 76 61 6c 20 7b 0a 20 20 20 20 20 20  b2 eval {.      
13c0: 43 4f 4d 4d 49 54 3b 0a 20 20 20 20 20 20 50 52  COMMIT;.      PR
13d0: 41 47 4d 41 20 64 61 74 61 5f 76 65 72 73 69 6f  AGMA data_versio
13e0: 6e 3b 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20  n;.      SELECT 
13f0: 2a 20 46 52 4f 4d 20 74 34 3b 0a 20 20 20 20 7d  * FROM t4;.    }
1400: 0a 20 20 7d 20 7b 32 20 31 32 33 20 34 35 36 20  .  } {2 123 456 
1410: 37 38 39 7d 0a 20 20 64 6f 5f 74 65 73 74 20 70  789}.  do_test p
1420: 72 61 67 6d 61 33 2d 33 34 30 20 7b 0a 20 20 20  ragma3-340 {.   
1430: 20 64 62 20 65 76 61 6c 20 7b 0a 20 20 20 20 20   db eval {.     
1440: 20 50 52 41 47 4d 41 20 64 61 74 61 5f 76 65 72   PRAGMA data_ver
1450: 73 69 6f 6e 3b 0a 20 20 20 20 20 20 53 45 4c 45  sion;.      SELE
1460: 43 54 20 2a 20 46 52 4f 4d 20 74 33 3b 0a 20 20  CT * FROM t3;.  
1470: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
1480: 4d 20 74 34 3b 0a 20 20 20 20 7d 0a 20 20 7d 20  M t4;.    }.  } 
1490: 7b 32 20 61 62 63 20 64 65 66 20 67 68 69 20 31  {2 abc def ghi 1
14a0: 32 33 20 34 35 36 20 37 38 39 7d 0a 20 20 64 62  23 456 789}.  db
14b0: 32 20 63 6c 6f 73 65 0a 20 20 64 62 20 63 6c 6f  2 close.  db clo
14c0: 73 65 0a 20 20 73 71 6c 69 74 65 33 5f 65 6e 61  se.  sqlite3_ena
14d0: 62 6c 65 5f 73 68 61 72 65 64 5f 63 61 63 68 65  ble_shared_cache
14e0: 20 24 3a 3a 65 6e 61 62 6c 65 5f 73 68 61 72 65   $::enable_share
14f0: 64 5f 63 61 63 68 65 0a 7d 0a 0a 23 20 4d 61 6b  d_cache.}..# Mak
1500: 65 20 73 75 72 65 20 74 68 69 73 20 61 6c 73 6f  e sure this also
1510: 20 77 6f 72 6b 73 20 69 6e 20 57 41 4c 20 6d 6f   works in WAL mo
1520: 64 65 0a 23 0a 23 20 54 68 69 73 20 77 69 6c 6c  de.#.# This will
1530: 20 6e 6f 74 20 77 6f 72 6b 20 77 69 74 68 20 74   not work with t
1540: 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 6a 6f 75  he in-memory jou
1550: 72 6e 61 6c 20 70 65 72 6d 75 74 61 74 69 6f 6e  rnal permutation
1560: 2c 20 61 73 20 6f 70 65 6e 69 6e 67 0a 23 20 5b  , as opening.# [
1570: 64 62 32 5d 20 73 77 69 74 63 68 65 73 20 74 68  db2] switches th
1580: 65 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 62  e journal mode b
1590: 61 63 6b 20 74 6f 20 22 6d 65 6d 6f 72 79 22 0a  ack to "memory".
15a0: 23 0a 69 66 63 61 70 61 62 6c 65 20 77 61 6c 20  #.ifcapable wal 
15b0: 7b 0a 69 66 20 7b 5b 70 65 72 6d 75 74 61 74 69  {.if {[permutati
15c0: 6f 6e 5d 21 3d 22 69 6e 6d 65 6d 6f 72 79 5f 6a  on]!="inmemory_j
15d0: 6f 75 72 6e 61 6c 22 7d 20 7b 0a 0a 20 20 73 71  ournal"} {..  sq
15e0: 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64 62  lite3 db test.db
15f0: 0a 20 20 64 62 20 65 76 61 6c 20 7b 50 52 41 47  .  db eval {PRAG
1600: 4d 41 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 3d  MA journal_mode=
1610: 57 41 4c 7d 0a 20 20 73 71 6c 69 74 65 33 20 64  WAL}.  sqlite3 d
1620: 62 32 20 74 65 73 74 2e 64 62 0a 20 20 64 6f 5f  b2 test.db.  do_
1630: 74 65 73 74 20 70 72 61 67 6d 61 33 2d 34 30 30  test pragma3-400
1640: 20 7b 0a 20 20 20 20 64 62 20 65 76 61 6c 20 7b   {.    db eval {
1650: 0a 20 20 20 20 20 20 50 52 41 47 4d 41 20 64 61  .      PRAGMA da
1660: 74 61 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 20 20  ta_version;.    
1670: 20 20 50 52 41 47 4d 41 20 6a 6f 75 72 6e 61 6c    PRAGMA journal
1680: 5f 6d 6f 64 65 3b 0a 20 20 20 20 20 20 53 45 4c  _mode;.      SEL
1690: 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 3b 0a 20  ECT * FROM t1;. 
16a0: 20 20 20 7d 0a 20 20 7d 20 7b 32 20 77 61 6c 20     }.  } {2 wal 
16b0: 31 30 31 20 32 30 31 7d 0a 20 20 64 6f 5f 74 65  101 201}.  do_te
16c0: 73 74 20 70 72 61 67 6d 61 33 2d 34 31 30 20 7b  st pragma3-410 {
16d0: 0a 20 20 20 20 64 62 32 20 65 76 61 6c 20 7b 0a  .    db2 eval {.
16e0: 20 20 20 20 20 20 50 52 41 47 4d 41 20 64 61 74        PRAGMA dat
16f0: 61 5f 76 65 72 73 69 6f 6e 3b 0a 20 20 20 20 20  a_version;.     
1700: 20 50 52 41 47 4d 41 20 6a 6f 75 72 6e 61 6c 5f   PRAGMA journal_
1710: 6d 6f 64 65 3b 0a 20 20 20 20 20 20 53 45 4c 45  mode;.      SELE
1720: 43 54 20 2a 20 46 52 4f 4d 20 74 31 3b 0a 20 20  CT * FROM t1;.  
1730: 20 20 7d 0a 20 20 7d 20 7b 32 20 77 61 6c 20 31    }.  } {2 wal 1
1740: 30 31 20 32 30 31 7d 0a 20 20 64 6f 5f 74 65 73  01 201}.  do_tes
1750: 74 20 70 72 61 67 6d 61 33 2d 34 32 30 20 7b 0a  t pragma3-420 {.
1760: 20 20 20 20 64 62 20 65 76 61 6c 20 7b 55 50 44      db eval {UPD
1770: 41 54 45 20 74 31 20 53 45 54 20 61 3d 31 31 31  ATE t1 SET a=111
1780: 2a 28 61 2f 31 30 30 29 3b 20 50 52 41 47 4d 41  *(a/100); PRAGMA
1790: 20 64 61 74 61 5f 76 65 72 73 69 6f 6e 3b 20 53   data_version; S
17a0: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 7d  ELECT * FROM t1}
17b0: 0a 20 20 7d 20 7b 32 20 31 31 31 20 32 32 32 7d  .  } {2 111 222}
17c0: 0a 20 20 64 6f 5f 74 65 73 74 20 70 72 61 67 6d  .  do_test pragm
17d0: 61 33 2d 34 33 30 20 7b 0a 20 20 20 20 64 62 32  a3-430 {.    db2
17e0: 20 65 76 61 6c 20 7b 50 52 41 47 4d 41 20 64 61   eval {PRAGMA da
17f0: 74 61 5f 76 65 72 73 69 6f 6e 3b 20 53 45 4c 45  ta_version; SELE
1800: 43 54 20 2a 20 46 52 4f 4d 20 74 31 3b 7d 0a 20  CT * FROM t1;}. 
1810: 20 7d 20 7b 33 20 31 31 31 20 32 32 32 7d 0a 20   } {3 111 222}. 
1820: 20 64 62 32 20 63 6c 6f 73 65 0a 7d 0a 7d 0a 0a   db2 close.}.}..
1830: 66 69 6e 69 73 68 5f 74 65 73 74 0a              finish_test.