/ Hex Artifact Content
Login

Artifact 72825d3febdedcd5593a27989fc05accdbfc2bb4:


0000: 23 20 32 30 31 30 20 4a 75 6e 65 20 31 36 0a 23  # 2010 June 16.#
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: 20 53 70 65 63 69 66 69 63 61 6c 6c 79 2c 0a 23   Specifically,.#
01b0: 20 69 74 20 74 65 73 74 73 20 74 68 61 74 20 74   it tests that t
01c0: 69 63 6b 65 74 20 5b 66 63 36 32 61 66 34 35 32  icket [fc62af452
01d0: 33 5d 20 68 61 73 20 62 65 65 6e 20 72 65 73 6f  3] has been reso
01e0: 6c 76 65 64 2e 0a 23 0a 0a 73 65 74 20 74 65 73  lved..#..set tes
01f0: 74 64 69 72 20 5b 66 69 6c 65 20 64 69 72 6e 61  tdir [file dirna
0200: 6d 65 20 24 61 72 67 76 30 5d 0a 73 6f 75 72 63  me $argv0].sourc
0210: 65 20 24 74 65 73 74 64 69 72 2f 74 65 73 74 65  e $testdir/teste
0220: 72 2e 74 63 6c 0a 73 6f 75 72 63 65 20 24 74 65  r.tcl.source $te
0230: 73 74 64 69 72 2f 6c 6f 63 6b 5f 63 6f 6d 6d 6f  stdir/lock_commo
0240: 6e 2e 74 63 6c 0a 73 6f 75 72 63 65 20 24 74 65  n.tcl.source $te
0250: 73 74 64 69 72 2f 6d 61 6c 6c 6f 63 5f 63 6f 6d  stdir/malloc_com
0260: 6d 6f 6e 2e 74 63 6c 0a 0a 64 6f 5f 74 65 73 74  mon.tcl..do_test
0270: 20 74 6b 74 2d 66 63 36 32 61 66 34 35 32 33 2e   tkt-fc62af4523.
0280: 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  1 {.  execsql {.
0290: 20 20 20 20 50 52 41 47 4d 41 20 63 61 63 68 65      PRAGMA cache
02a0: 5f 73 69 7a 65 20 3d 20 31 30 3b 0a 20 20 20 20  _size = 10;.    
02b0: 50 52 41 47 4d 41 20 6a 6f 75 72 6e 61 6c 5f 6d  PRAGMA journal_m
02c0: 6f 64 65 20 3d 20 70 65 72 73 69 73 74 3b 0a 20  ode = persist;. 
02d0: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
02e0: 74 31 28 61 20 55 4e 49 51 55 45 2c 20 62 20 55  t1(a UNIQUE, b U
02f0: 4e 49 51 55 45 29 3b 0a 20 20 20 20 49 4e 53 45  NIQUE);.    INSE
0300: 52 54 20 49 4e 54 4f 20 74 31 20 53 45 4c 45 43  RT INTO t1 SELEC
0310: 54 20 72 61 6e 64 6f 6d 62 6c 6f 62 28 32 30 30  T randomblob(200
0320: 29 2c 20 72 61 6e 64 6f 6d 62 6c 6f 62 28 33 30  ), randomblob(30
0330: 30 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  0);.    INSERT I
0340: 4e 54 4f 20 74 31 20 53 45 4c 45 43 54 20 72 61  NTO t1 SELECT ra
0350: 6e 64 6f 6d 62 6c 6f 62 28 32 30 30 29 2c 20 72  ndomblob(200), r
0360: 61 6e 64 6f 6d 62 6c 6f 62 28 33 30 30 29 20 46  andomblob(300) F
0370: 52 4f 4d 20 74 31 3b 20 2d 2d 20 20 32 0a 20 20  ROM t1; --  2.  
0380: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
0390: 20 53 45 4c 45 43 54 20 72 61 6e 64 6f 6d 62 6c   SELECT randombl
03a0: 6f 62 28 32 30 30 29 2c 20 72 61 6e 64 6f 6d 62  ob(200), randomb
03b0: 6c 6f 62 28 33 30 30 29 20 46 52 4f 4d 20 74 31  lob(300) FROM t1
03c0: 3b 20 2d 2d 20 20 34 0a 20 20 20 20 49 4e 53 45  ; --  4.    INSE
03d0: 52 54 20 49 4e 54 4f 20 74 31 20 53 45 4c 45 43  RT INTO t1 SELEC
03e0: 54 20 72 61 6e 64 6f 6d 62 6c 6f 62 28 32 30 30  T randomblob(200
03f0: 29 2c 20 72 61 6e 64 6f 6d 62 6c 6f 62 28 33 30  ), randomblob(30
0400: 30 29 20 46 52 4f 4d 20 74 31 3b 20 2d 2d 20 20  0) FROM t1; --  
0410: 38 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  8.    INSERT INT
0420: 4f 20 74 31 20 53 45 4c 45 43 54 20 72 61 6e 64  O t1 SELECT rand
0430: 6f 6d 62 6c 6f 62 28 32 30 30 29 2c 20 72 61 6e  omblob(200), ran
0440: 64 6f 6d 62 6c 6f 62 28 33 30 30 29 20 46 52 4f  domblob(300) FRO
0450: 4d 20 74 31 3b 20 2d 2d 20 31 36 0a 20 20 20 20  M t1; -- 16.    
0460: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 53  INSERT INTO t1 S
0470: 45 4c 45 43 54 20 72 61 6e 64 6f 6d 62 6c 6f 62  ELECT randomblob
0480: 28 32 30 30 29 2c 20 72 61 6e 64 6f 6d 62 6c 6f  (200), randomblo
0490: 62 28 33 30 30 29 20 46 52 4f 4d 20 74 31 3b 20  b(300) FROM t1; 
04a0: 2d 2d 20 33 32 0a 20 20 20 20 49 4e 53 45 52 54  -- 32.    INSERT
04b0: 20 49 4e 54 4f 20 74 31 20 53 45 4c 45 43 54 20   INTO t1 SELECT 
04c0: 72 61 6e 64 6f 6d 62 6c 6f 62 28 32 30 30 29 2c  randomblob(200),
04d0: 20 72 61 6e 64 6f 6d 62 6c 6f 62 28 33 30 30 29   randomblob(300)
04e0: 20 46 52 4f 4d 20 74 31 3b 20 2d 2d 20 36 34 0a   FROM t1; -- 64.
04f0: 20 20 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a    }.  execsql {.
0500: 20 20 20 20 50 52 41 47 4d 41 20 69 6e 74 65 67      PRAGMA integ
0510: 72 69 74 79 5f 63 68 65 63 6b 3b 0a 20 20 20 20  rity_check;.    
0520: 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20  SELECT count(*) 
0530: 46 52 4f 4d 20 74 31 3b 0a 20 20 7d 0a 7d 20 7b  FROM t1;.  }.} {
0540: 6f 6b 20 36 34 7d 0a 0a 23 20 4c 61 75 6e 63 68  ok 64}..# Launch
0550: 20 61 6e 20 65 78 74 65 72 6e 61 6c 20 70 72 6f   an external pro
0560: 63 65 73 73 2e 20 48 61 76 65 20 69 74 20 77 72  cess. Have it wr
0570: 69 74 65 20 28 62 75 74 20 6e 6f 74 20 63 6f 6d  ite (but not com
0580: 6d 69 74 29 20 61 20 6c 61 72 67 65 0a 23 20 74  mit) a large.# t
0590: 72 61 6e 73 61 63 74 69 6f 6e 20 74 6f 20 74 68  ransaction to th
05a0: 65 20 64 61 74 61 62 61 73 65 2e 0a 23 0a 73 65  e database..#.se
05b0: 74 20 3a 3a 63 68 61 6e 20 5b 6c 61 75 6e 63 68  t ::chan [launch
05c0: 5f 74 65 73 74 66 69 78 74 75 72 65 5d 0a 70 72  _testfixture].pr
05d0: 6f 63 20 62 75 64 64 79 20 7b 63 6f 64 65 7d 20  oc buddy {code} 
05e0: 7b 20 74 65 73 74 66 69 78 74 75 72 65 20 24 3a  { testfixture $:
05f0: 3a 63 68 61 6e 20 24 63 6f 64 65 20 7d 0a 64 6f  :chan $code }.do
0600: 5f 74 65 73 74 20 74 6b 74 2d 66 63 36 32 61 66  _test tkt-fc62af
0610: 34 35 32 33 2e 32 20 7b 0a 20 20 74 65 73 74 66  4523.2 {.  testf
0620: 69 78 74 75 72 65 20 24 3a 3a 63 68 61 6e 20 7b  ixture $::chan {
0630: 0a 20 20 20 20 73 71 6c 69 74 65 33 20 64 62 20  .    sqlite3 db 
0640: 74 65 73 74 2e 64 62 0a 20 20 20 20 64 62 20 65  test.db.    db e
0650: 76 61 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47  val {.      PRAG
0660: 4d 41 20 63 61 63 68 65 5f 73 69 7a 65 20 3d 20  MA cache_size = 
0670: 31 30 3b 0a 20 20 20 20 20 20 42 45 47 49 4e 3b  10;.      BEGIN;
0680: 0a 20 20 20 20 20 20 20 20 55 50 44 41 54 45 20  .        UPDATE 
0690: 74 31 20 53 45 54 20 62 20 3d 20 72 61 6e 64 6f  t1 SET b = rando
06a0: 6d 62 6c 6f 62 28 34 30 30 29 3b 0a 20 20 20 20  mblob(400);.    
06b0: 20 20 20 20 55 50 44 41 54 45 20 74 31 20 53 45      UPDATE t1 SE
06c0: 54 20 61 20 3d 20 72 61 6e 64 6f 6d 62 6c 6f 62  T a = randomblob
06d0: 28 32 30 31 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  (201);.    }.  }
06e0: 0a 20 20 66 69 6c 65 20 65 78 69 73 74 73 20 74  .  file exists t
06f0: 65 73 74 2e 64 62 2d 6a 6f 75 72 6e 61 6c 0a 7d  est.db-journal.}
0700: 20 7b 31 7d 0a 0a 23 20 4e 6f 77 20 64 6f 20 22   {1}..# Now do "
0710: 50 52 41 47 4d 41 20 6a 6f 75 72 6e 61 6c 5f 6d  PRAGMA journal_m
0720: 6f 64 65 20 3d 20 44 45 4c 45 54 45 22 20 69 6e  ode = DELETE" in
0730: 20 74 68 69 73 20 70 72 6f 63 65 73 73 2e 20 41   this process. A
0740: 74 20 6f 6e 65 20 70 6f 69 6e 74 0a 23 20 74 68  t one point.# th
0750: 69 73 20 77 61 73 20 63 61 75 73 69 6e 67 20 53  is was causing S
0760: 51 4c 69 74 65 20 74 6f 20 64 65 6c 65 74 65 20  QLite to delete 
0770: 74 68 65 20 6a 6f 75 72 6e 61 6c 20 66 69 6c 65  the journal file
0780: 20 66 72 6f 6d 20 74 68 65 20 66 69 6c 65 2d 73   from the file-s
0790: 79 73 74 65 6d 2c 0a 23 20 65 76 65 6e 20 74 68  ystem,.# even th
07a0: 6f 75 67 68 20 74 68 65 20 65 78 74 65 72 6e 61  ough the externa
07b0: 6c 20 70 72 6f 63 65 73 73 20 69 73 20 63 75 72  l process is cur
07c0: 72 65 6e 74 6c 79 20 75 73 69 6e 67 20 69 74 2e  rently using it.
07d0: 0a 23 0a 64 6f 5f 74 65 73 74 20 74 6b 74 2d 66  .#.do_test tkt-f
07e0: 63 36 32 61 66 34 35 32 33 2e 33 20 7b 20 65 78  c62af4523.3 { ex
07f0: 65 63 73 71 6c 20 7b 20 50 52 41 47 4d 41 20 6a  ecsql { PRAGMA j
0800: 6f 75 72 6e 61 6c 5f 6d 6f 64 65 20 3d 20 44 45  ournal_mode = DE
0810: 4c 45 54 45 20 7d 20 7d 20 7b 64 65 6c 65 74 65  LETE } } {delete
0820: 7d 0a 64 6f 5f 74 65 73 74 20 74 6b 74 2d 66 63  }.do_test tkt-fc
0830: 36 32 61 66 34 35 32 33 2e 34 20 7b 20 66 69 6c  62af4523.4 { fil
0840: 65 20 65 78 69 73 74 73 20 74 65 73 74 2e 64 62  e exists test.db
0850: 2d 6a 6f 75 72 6e 61 6c 20 7d 20 7b 31 7d 0a 0a  -journal } {1}..
0860: 23 20 43 61 75 73 65 20 74 68 65 20 65 78 74 65  # Cause the exte
0870: 72 6e 61 6c 20 70 72 6f 63 65 73 73 20 74 6f 20  rnal process to 
0880: 63 72 61 73 68 2e 20 53 69 6e 63 65 20 69 74 20  crash. Since it 
0890: 68 61 73 20 61 6c 72 65 61 64 79 20 77 72 69 74  has already writ
08a0: 74 65 6e 20 0a 23 20 75 6e 63 6f 6d 6d 69 74 74  ten .# uncommitt
08b0: 65 64 20 64 61 74 61 20 69 6e 74 6f 20 74 68 65  ed data into the
08c0: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2c 20   database file, 
08d0: 74 68 65 20 6e 65 78 74 20 72 65 61 64 65 72 20  the next reader 
08e0: 77 69 6c 6c 20 68 61 76 65 0a 23 20 74 6f 20 64  will have.# to d
08f0: 6f 20 61 20 68 6f 74 2d 6a 6f 75 72 6e 61 6c 20  o a hot-journal 
0900: 72 6f 6c 6c 62 61 63 6b 20 74 6f 20 72 65 63 6f  rollback to reco
0910: 76 65 72 20 74 68 65 20 64 61 74 61 62 61 73 65  ver the database
0920: 2e 0a 23 0a 23 20 4f 72 2c 20 69 66 20 74 68 69  ..#.# Or, if thi
0930: 73 20 74 65 73 74 20 69 73 20 72 75 6e 20 69 6e  s test is run in
0940: 20 61 20 76 65 72 73 69 6f 6e 20 77 69 74 68 20   a version with 
0950: 74 68 65 20 62 75 67 20 70 72 65 73 65 6e 74 2c  the bug present,
0960: 20 74 68 65 20 6a 6f 75 72 6e 61 6c 0a 23 20 66   the journal.# f
0970: 69 6c 65 20 68 61 73 20 61 6c 72 65 61 64 79 20  ile has already 
0980: 62 65 65 6e 20 64 65 6c 65 74 65 64 2e 20 49 6e  been deleted. In
0990: 20 74 68 69 73 20 63 61 73 65 20 77 65 20 61 72   this case we ar
09a0: 65 20 6c 65 66 74 20 77 69 74 68 20 61 20 63 6f  e left with a co
09b0: 72 72 75 70 74 0a 23 20 64 61 74 61 62 61 73 65  rrupt.# database
09c0: 20 66 69 6c 65 20 61 6e 64 20 6e 6f 20 68 6f 74   file and no hot
09d0: 2d 6a 6f 75 72 6e 61 6c 20 74 6f 20 66 69 78 20  -journal to fix 
09e0: 69 74 20 77 69 74 68 2e 0a 23 0a 64 6f 5f 74 65  it with..#.do_te
09f0: 73 74 20 74 6b 74 2d 66 63 36 32 61 66 34 35 32  st tkt-fc62af452
0a00: 33 2e 35 20 7b 0a 20 20 74 65 73 74 66 69 78 74  3.5 {.  testfixt
0a10: 75 72 65 20 24 3a 3a 63 68 61 6e 20 73 71 6c 69  ure $::chan sqli
0a20: 74 65 5f 61 62 6f 72 74 0a 7d 20 7b 45 52 52 4f  te_abort.} {ERRO
0a30: 52 3a 20 43 68 69 6c 64 20 70 72 6f 63 65 73 73  R: Child process
0a40: 20 68 75 6e 67 20 75 70 7d 0a 61 66 74 65 72 20   hung up}.after 
0a50: 32 30 30 0a 64 6f 5f 74 65 73 74 20 74 6b 74 2d  200.do_test tkt-
0a60: 66 63 36 32 61 66 34 35 32 33 2e 36 20 7b 0a 20  fc62af4523.6 {. 
0a70: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50   execsql {.    P
0a80: 52 41 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f  RAGMA integrity_
0a90: 63 68 65 63 6b 3b 0a 20 20 20 20 53 45 4c 45 43  check;.    SELEC
0aa0: 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20  T count(*) FROM 
0ab0: 74 31 3b 0a 20 20 7d 0a 7d 20 7b 6f 6b 20 36 34  t1;.  }.} {ok 64
0ac0: 7d 0a 0a 63 61 74 63 68 20 7b 20 63 6c 6f 73 65  }..catch { close
0ad0: 20 24 3a 3a 63 68 61 6e 20 7d 0a 66 69 6e 69 73   $::chan }.finis
0ae0: 68 5f 74 65 73 74 0a                             h_test.