/ Hex Artifact Content
Login

Artifact 61e61469e257df0850df4293d7d4d6c2af301421:


0000: 2f 2a 20 54 65 73 74 20 63 61 73 65 73 20 69 6e  /* Test cases in
0010: 76 6f 6c 76 69 6e 67 20 69 6e 63 6f 6d 70 6c 65  volving incomple
0020: 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 20  te transactions 
0030: 74 68 61 74 20 6d 75 73 74 20 62 65 20 72 6f 6c  that must be rol
0040: 6c 65 64 20 62 61 63 6b 2e 0a 2a 2f 0a 2d 2d 74  led back..*/.--t
0050: 61 73 6b 20 31 0a 20 20 44 52 4f 50 20 54 41 42  ask 1.  DROP TAB
0060: 4c 45 20 49 46 20 45 58 49 53 54 53 20 74 31 3b  LE IF EXISTS t1;
0070: 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  .  CREATE TABLE 
0080: 74 31 28 61 20 49 4e 54 45 47 45 52 20 50 52 49  t1(a INTEGER PRI
0090: 4d 41 52 59 20 4b 45 59 2c 20 62 29 3b 0a 20 20  MARY KEY, b);.  
00a0: 2d 2d 73 6c 65 65 70 20 31 0a 20 20 49 4e 53 45  --sleep 1.  INSE
00b0: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
00c0: 53 28 31 2c 20 72 61 6e 64 6f 6d 62 6c 6f 62 28  S(1, randomblob(
00d0: 32 30 30 30 29 29 3b 0a 20 20 49 4e 53 45 52 54  2000));.  INSERT
00e0: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
00f0: 32 2c 20 72 61 6e 64 6f 6d 62 6c 6f 62 28 31 30  2, randomblob(10
0100: 30 30 29 29 3b 0a 20 20 2d 2d 73 6c 65 65 70 20  00));.  --sleep 
0110: 31 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  1.  INSERT INTO 
0120: 74 31 20 53 45 4c 45 43 54 20 61 2b 32 2c 20 72  t1 SELECT a+2, r
0130: 61 6e 64 6f 6d 62 6c 6f 62 28 31 35 30 30 29 20  andomblob(1500) 
0140: 46 52 4f 4d 20 74 31 3b 0a 20 20 49 4e 53 45 52  FROM t1;.  INSER
0150: 54 20 49 4e 54 4f 20 74 31 20 53 45 4c 45 43 54  T INTO t1 SELECT
0160: 20 61 2b 34 2c 20 72 61 6e 64 6f 6d 62 6c 6f 62   a+4, randomblob
0170: 28 31 35 30 30 29 20 46 52 4f 4d 20 74 31 3b 0a  (1500) FROM t1;.
0180: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
0190: 20 53 45 4c 45 43 54 20 61 2b 38 2c 20 72 61 6e   SELECT a+8, ran
01a0: 64 6f 6d 62 6c 6f 62 28 31 35 30 30 29 20 46 52  domblob(1500) FR
01b0: 4f 4d 20 74 31 3b 0a 20 20 2d 2d 73 6c 65 65 70  OM t1;.  --sleep
01c0: 20 31 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f   1.  INSERT INTO
01d0: 20 74 31 20 53 45 4c 45 43 54 20 61 2b 31 36 2c   t1 SELECT a+16,
01e0: 20 72 61 6e 64 6f 6d 62 6c 6f 62 28 31 35 30 30   randomblob(1500
01f0: 29 20 46 52 4f 4d 20 74 31 3b 0a 20 20 2d 2d 73  ) FROM t1;.  --s
0200: 6c 65 65 70 20 31 0a 20 20 49 4e 53 45 52 54 20  leep 1.  INSERT 
0210: 49 4e 54 4f 20 74 31 20 53 45 4c 45 43 54 20 61  INTO t1 SELECT a
0220: 2b 33 32 2c 20 72 61 6e 64 6f 6d 62 6c 6f 62 28  +32, randomblob(
0230: 31 35 30 30 29 20 46 52 4f 4d 20 74 31 3b 0a 20  1500) FROM t1;. 
0240: 20 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29   SELECT count(*)
0250: 20 46 52 4f 4d 20 74 31 3b 0a 20 20 2d 2d 6d 61   FROM t1;.  --ma
0260: 74 63 68 20 36 34 0a 20 20 53 45 4c 45 43 54 20  tch 64.  SELECT 
0270: 61 76 67 28 6c 65 6e 67 74 68 28 62 29 29 20 46  avg(length(b)) F
0280: 52 4f 4d 20 74 31 3b 0a 20 20 2d 2d 6d 61 74 63  ROM t1;.  --matc
0290: 68 20 31 35 30 30 2e 30 0a 20 20 2d 2d 73 6c 65  h 1500.0.  --sle
02a0: 65 70 20 32 0a 20 20 55 50 44 41 54 45 20 74 31  ep 2.  UPDATE t1
02b0: 20 53 45 54 20 62 3d 27 78 27 7c 7c 61 7c 7c 27   SET b='x'||a||'
02c0: 79 27 3b 0a 20 20 53 45 4c 45 43 54 20 73 75 6d  y';.  SELECT sum
02d0: 28 6c 65 6e 67 74 68 28 62 29 29 20 46 52 4f 4d  (length(b)) FROM
02e0: 20 74 31 3b 0a 20 20 2d 2d 6d 61 74 63 68 20 32   t1;.  --match 2
02f0: 34 37 0a 20 20 53 45 4c 45 43 54 20 61 20 46 52  47.  SELECT a FR
0300: 4f 4d 20 74 31 20 57 48 45 52 45 20 62 3d 27 78  OM t1 WHERE b='x
0310: 31 37 79 27 3b 0a 20 20 2d 2d 6d 61 74 63 68 20  17y';.  --match 
0320: 31 37 0a 20 20 43 52 45 41 54 45 20 49 4e 44 45  17.  CREATE INDE
0330: 58 20 74 31 62 20 4f 4e 20 74 31 28 62 29 3b 0a  X t1b ON t1(b);.
0340: 20 20 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20    SELECT a FROM 
0350: 74 31 20 57 48 45 52 45 20 62 3d 27 78 31 37 79  t1 WHERE b='x17y
0360: 27 3b 0a 20 20 2d 2d 6d 61 74 63 68 20 31 37 0a  ';.  --match 17.
0370: 20 20 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20    SELECT a FROM 
0380: 74 31 20 57 48 45 52 45 20 62 20 47 4c 4f 42 20  t1 WHERE b GLOB 
0390: 27 78 32 3f 79 27 20 4f 52 44 45 52 20 42 59 20  'x2?y' ORDER BY 
03a0: 62 20 44 45 53 43 20 4c 49 4d 49 54 20 35 3b 0a  b DESC LIMIT 5;.
03b0: 20 20 2d 2d 6d 61 74 63 68 20 32 39 20 32 38 20    --match 29 28 
03c0: 32 37 20 32 36 20 32 35 0a 2d 2d 65 6e 64 0a 2d  27 26 25.--end.-
03d0: 2d 77 61 69 74 20 31 0a 2d 2d 74 61 73 6b 20 32  -wait 1.--task 2
03e0: 0a 20 20 44 52 4f 50 20 54 41 42 4c 45 20 49 46  .  DROP TABLE IF
03f0: 20 45 58 49 53 54 53 20 74 32 3b 0a 20 20 43 52   EXISTS t2;.  CR
0400: 45 41 54 45 20 54 41 42 4c 45 20 74 32 28 61 20  EATE TABLE t2(a 
0410: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
0420: 4b 45 59 2c 20 62 29 3b 0a 20 20 49 4e 53 45 52  KEY, b);.  INSER
0430: 54 20 49 4e 54 4f 20 74 32 20 53 45 4c 45 43 54  T INTO t2 SELECT
0440: 20 61 2c 20 62 20 46 52 4f 4d 20 74 31 3b 0a 20   a, b FROM t1;. 
0450: 20 55 50 44 41 54 45 20 74 31 20 53 45 54 20 62   UPDATE t1 SET b
0460: 3d 27 78 27 7c 7c 61 7c 7c 27 79 27 3b 0a 20 20  ='x'||a||'y';.  
0470: 53 45 4c 45 43 54 20 73 75 6d 28 6c 65 6e 67 74  SELECT sum(lengt
0480: 68 28 62 29 29 20 46 52 4f 4d 20 74 32 3b 0a 20  h(b)) FROM t2;. 
0490: 20 2d 2d 6d 61 74 63 68 20 32 34 37 0a 20 20 53   --match 247.  S
04a0: 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 74 32 20  ELECT a FROM t2 
04b0: 57 48 45 52 45 20 62 3d 27 78 31 37 79 27 3b 0a  WHERE b='x17y';.
04c0: 20 20 2d 2d 6d 61 74 63 68 20 31 37 0a 20 20 43    --match 17.  C
04d0: 52 45 41 54 45 20 49 4e 44 45 58 20 74 32 62 20  REATE INDEX t2b 
04e0: 4f 4e 20 74 32 28 62 29 3b 0a 20 20 53 45 4c 45  ON t2(b);.  SELE
04f0: 43 54 20 61 20 46 52 4f 4d 20 74 32 20 57 48 45  CT a FROM t2 WHE
0500: 52 45 20 62 3d 27 78 31 37 79 27 3b 0a 20 20 2d  RE b='x17y';.  -
0510: 2d 6d 61 74 63 68 20 31 37 0a 20 20 53 45 4c 45  -match 17.  SELE
0520: 43 54 20 61 20 46 52 4f 4d 20 74 32 20 57 48 45  CT a FROM t2 WHE
0530: 52 45 20 62 20 47 4c 4f 42 20 27 78 32 3f 79 27  RE b GLOB 'x2?y'
0540: 20 4f 52 44 45 52 20 42 59 20 62 20 44 45 53 43   ORDER BY b DESC
0550: 20 4c 49 4d 49 54 20 35 3b 0a 20 20 2d 2d 6d 61   LIMIT 5;.  --ma
0560: 74 63 68 20 32 39 20 32 38 20 32 37 20 32 36 20  tch 29 28 27 26 
0570: 32 35 0a 2d 2d 65 6e 64 0a 2d 2d 74 61 73 6b 20  25.--end.--task 
0580: 33 0a 20 20 44 52 4f 50 20 54 41 42 4c 45 20 49  3.  DROP TABLE I
0590: 46 20 45 58 49 53 54 53 20 74 33 3b 0a 20 20 43  F EXISTS t3;.  C
05a0: 52 45 41 54 45 20 54 41 42 4c 45 20 74 33 28 61  REATE TABLE t3(a
05b0: 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59   INTEGER PRIMARY
05c0: 20 4b 45 59 2c 20 62 29 3b 0a 20 20 49 4e 53 45   KEY, b);.  INSE
05d0: 52 54 20 49 4e 54 4f 20 74 33 20 53 45 4c 45 43  RT INTO t3 SELEC
05e0: 54 20 61 2c 20 62 20 46 52 4f 4d 20 74 31 3b 0a  T a, b FROM t1;.
05f0: 20 20 55 50 44 41 54 45 20 74 31 20 53 45 54 20    UPDATE t1 SET 
0600: 62 3d 27 78 27 7c 7c 61 7c 7c 27 79 27 3b 0a 20  b='x'||a||'y';. 
0610: 20 53 45 4c 45 43 54 20 73 75 6d 28 6c 65 6e 67   SELECT sum(leng
0620: 74 68 28 62 29 29 20 46 52 4f 4d 20 74 33 3b 0a  th(b)) FROM t3;.
0630: 20 20 2d 2d 6d 61 74 63 68 20 32 34 37 0a 20 20    --match 247.  
0640: 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 74 33  SELECT a FROM t3
0650: 20 57 48 45 52 45 20 62 3d 27 78 31 37 79 27 3b   WHERE b='x17y';
0660: 0a 20 20 2d 2d 6d 61 74 63 68 20 31 37 0a 20 20  .  --match 17.  
0670: 43 52 45 41 54 45 20 49 4e 44 45 58 20 74 33 62  CREATE INDEX t3b
0680: 20 4f 4e 20 74 33 28 62 29 3b 0a 20 20 53 45 4c   ON t3(b);.  SEL
0690: 45 43 54 20 61 20 46 52 4f 4d 20 74 33 20 57 48  ECT a FROM t3 WH
06a0: 45 52 45 20 62 3d 27 78 31 37 79 27 3b 0a 20 20  ERE b='x17y';.  
06b0: 2d 2d 6d 61 74 63 68 20 31 37 0a 20 20 53 45 4c  --match 17.  SEL
06c0: 45 43 54 20 61 20 46 52 4f 4d 20 74 33 20 57 48  ECT a FROM t3 WH
06d0: 45 52 45 20 62 20 47 4c 4f 42 20 27 78 32 3f 79  ERE b GLOB 'x2?y
06e0: 27 20 4f 52 44 45 52 20 42 59 20 62 20 44 45 53  ' ORDER BY b DES
06f0: 43 20 4c 49 4d 49 54 20 35 3b 0a 20 20 2d 2d 6d  C LIMIT 5;.  --m
0700: 61 74 63 68 20 32 39 20 32 38 20 32 37 20 32 36  atch 29 28 27 26
0710: 20 32 35 0a 2d 2d 65 6e 64 0a 2d 2d 74 61 73 6b   25.--end.--task
0720: 20 34 0a 20 20 44 52 4f 50 20 54 41 42 4c 45 20   4.  DROP TABLE 
0730: 49 46 20 45 58 49 53 54 53 20 74 34 3b 0a 20 20  IF EXISTS t4;.  
0740: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 34 28  CREATE TABLE t4(
0750: 61 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52  a INTEGER PRIMAR
0760: 59 20 4b 45 59 2c 20 62 29 3b 0a 20 20 49 4e 53  Y KEY, b);.  INS
0770: 45 52 54 20 49 4e 54 4f 20 74 34 20 53 45 4c 45  ERT INTO t4 SELE
0780: 43 54 20 61 2c 20 62 20 46 52 4f 4d 20 74 31 3b  CT a, b FROM t1;
0790: 0a 20 20 55 50 44 41 54 45 20 74 31 20 53 45 54  .  UPDATE t1 SET
07a0: 20 62 3d 27 78 27 7c 7c 61 7c 7c 27 79 27 3b 0a   b='x'||a||'y';.
07b0: 20 20 53 45 4c 45 43 54 20 73 75 6d 28 6c 65 6e    SELECT sum(len
07c0: 67 74 68 28 62 29 29 20 46 52 4f 4d 20 74 34 3b  gth(b)) FROM t4;
07d0: 0a 20 20 2d 2d 6d 61 74 63 68 20 32 34 37 0a 20  .  --match 247. 
07e0: 20 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 74   SELECT a FROM t
07f0: 34 20 57 48 45 52 45 20 62 3d 27 78 31 37 79 27  4 WHERE b='x17y'
0800: 3b 0a 20 20 2d 2d 6d 61 74 63 68 20 31 37 0a 20  ;.  --match 17. 
0810: 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 74 34   CREATE INDEX t4
0820: 62 20 4f 4e 20 74 34 28 62 29 3b 0a 20 20 53 45  b ON t4(b);.  SE
0830: 4c 45 43 54 20 61 20 46 52 4f 4d 20 74 34 20 57  LECT a FROM t4 W
0840: 48 45 52 45 20 62 3d 27 78 31 37 79 27 3b 0a 20  HERE b='x17y';. 
0850: 20 2d 2d 6d 61 74 63 68 20 31 37 0a 20 20 53 45   --match 17.  SE
0860: 4c 45 43 54 20 61 20 46 52 4f 4d 20 74 34 20 57  LECT a FROM t4 W
0870: 48 45 52 45 20 62 20 47 4c 4f 42 20 27 78 32 3f  HERE b GLOB 'x2?
0880: 79 27 20 4f 52 44 45 52 20 42 59 20 62 20 44 45  y' ORDER BY b DE
0890: 53 43 20 4c 49 4d 49 54 20 35 3b 0a 20 20 2d 2d  SC LIMIT 5;.  --
08a0: 6d 61 74 63 68 20 32 39 20 32 38 20 32 37 20 32  match 29 28 27 2
08b0: 36 20 32 35 0a 2d 2d 65 6e 64 0a 2d 2d 74 61 73  6 25.--end.--tas
08c0: 6b 20 35 0a 20 20 44 52 4f 50 20 54 41 42 4c 45  k 5.  DROP TABLE
08d0: 20 49 46 20 45 58 49 53 54 53 20 74 35 3b 0a 20   IF EXISTS t5;. 
08e0: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 35   CREATE TABLE t5
08f0: 28 61 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41  (a INTEGER PRIMA
0900: 52 59 20 4b 45 59 2c 20 62 29 3b 0a 20 20 49 4e  RY KEY, b);.  IN
0910: 53 45 52 54 20 49 4e 54 4f 20 74 35 20 53 45 4c  SERT INTO t5 SEL
0920: 45 43 54 20 61 2c 20 62 20 46 52 4f 4d 20 74 31  ECT a, b FROM t1
0930: 3b 0a 20 20 55 50 44 41 54 45 20 74 31 20 53 45  ;.  UPDATE t1 SE
0940: 54 20 62 3d 27 78 27 7c 7c 61 7c 7c 27 79 27 3b  T b='x'||a||'y';
0950: 0a 20 20 53 45 4c 45 43 54 20 73 75 6d 28 6c 65  .  SELECT sum(le
0960: 6e 67 74 68 28 62 29 29 20 46 52 4f 4d 20 74 35  ngth(b)) FROM t5
0970: 3b 0a 20 20 2d 2d 6d 61 74 63 68 20 32 34 37 0a  ;.  --match 247.
0980: 20 20 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20    SELECT a FROM 
0990: 74 35 20 57 48 45 52 45 20 62 3d 27 78 31 37 79  t5 WHERE b='x17y
09a0: 27 3b 0a 20 20 2d 2d 6d 61 74 63 68 20 31 37 0a  ';.  --match 17.
09b0: 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 74    CREATE INDEX t
09c0: 35 62 20 4f 4e 20 74 35 28 62 29 3b 0a 20 20 53  5b ON t5(b);.  S
09d0: 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 74 35 20  ELECT a FROM t5 
09e0: 57 48 45 52 45 20 62 3d 27 78 31 37 79 27 3b 0a  WHERE b='x17y';.
09f0: 20 20 2d 2d 6d 61 74 63 68 20 31 37 0a 20 20 53    --match 17.  S
0a00: 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 74 35 20  ELECT a FROM t5 
0a10: 57 48 45 52 45 20 62 20 47 4c 4f 42 20 27 78 32  WHERE b GLOB 'x2
0a20: 3f 79 27 20 4f 52 44 45 52 20 42 59 20 62 20 44  ?y' ORDER BY b D
0a30: 45 53 43 20 4c 49 4d 49 54 20 35 3b 0a 20 20 2d  ESC LIMIT 5;.  -
0a40: 2d 6d 61 74 63 68 20 32 39 20 32 38 20 32 37 20  -match 29 28 27 
0a50: 32 36 20 32 35 0a 2d 2d 65 6e 64 0a 0a 2d 2d 77  26 25.--end..--w
0a60: 61 69 74 20 61 6c 6c 0a 2f 2a 20 41 66 74 65 72  ait all./* After
0a70: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
0a80: 6c 65 20 68 61 73 20 62 65 65 6e 20 73 65 74 20  le has been set 
0a90: 75 70 2c 20 72 75 6e 20 74 68 65 20 63 72 61 73  up, run the cras
0aa0: 68 32 20 73 75 62 73 63 72 69 70 74 0a 2a 2a 20  h2 subscript.** 
0ab0: 6d 75 6c 74 69 70 6c 65 20 74 69 6d 65 73 2e 20  multiple times. 
0ac0: 2a 2f 0a 2d 2d 73 6f 75 72 63 65 20 63 72 61 73  */.--source cras
0ad0: 68 30 32 2e 73 75 62 74 65 73 74 0a 2d 2d 73 6f  h02.subtest.--so
0ae0: 75 72 63 65 20 63 72 61 73 68 30 32 2e 73 75 62  urce crash02.sub
0af0: 74 65 73 74 0a 2d 2d 73 6f 75 72 63 65 20 63 72  test.--source cr
0b00: 61 73 68 30 32 2e 73 75 62 74 65 73 74 0a 2d 2d  ash02.subtest.--
0b10: 73 6f 75 72 63 65 20 63 72 61 73 68 30 32 2e 73  source crash02.s
0b20: 75 62 74 65 73 74 0a 2d 2d 73 6f 75 72 63 65 20  ubtest.--source 
0b30: 63 72 61 73 68 30 32 2e 73 75 62 74 65 73 74 0a  crash02.subtest.
0b40: 2d 2d 73 6f 75 72 63 65 20 63 72 61 73 68 30 32  --source crash02
0b50: 2e 73 75 62 74 65 73 74 0a 2d 2d 73 6f 75 72 63  .subtest.--sourc
0b60: 65 20 63 72 61 73 68 30 32 2e 73 75 62 74 65 73  e crash02.subtes
0b70: 74 0a 2d 2d 73 6f 75 72 63 65 20 63 72 61 73 68  t.--source crash
0b80: 30 32 2e 73 75 62 74 65 73 74 0a 2d 2d 73 6f 75  02.subtest.--sou
0b90: 72 63 65 20 63 72 61 73 68 30 32 2e 73 75 62 74  rce crash02.subt
0ba0: 65 73 74 0a                                      est.