/ Hex Artifact Content
Login

Artifact a5f31998ed48de8267d6620e8af107ec148e5f12:


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 74 6f 74  y';.  SELECT tot
02d0: 61 6c 28 6c 65 6e 67 74 68 28 62 29 29 20 46 52  al(length(b)) FR
02e0: 4f 4d 20 74 31 3b 0a 20 20 2d 2d 6d 61 74 63 68  OM t1;.  --match
02f0: 20 32 34 37 0a 20 20 53 45 4c 45 43 54 20 61 20   247.  SELECT a 
0300: 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 62 3d  FROM t1 WHERE b=
0310: 27 78 31 37 79 27 3b 0a 20 20 2d 2d 6d 61 74 63  'x17y';.  --matc
0320: 68 20 31 37 0a 20 20 43 52 45 41 54 45 20 49 4e  h 17.  CREATE IN
0330: 44 45 58 20 74 31 62 20 4f 4e 20 74 31 28 62 29  DEX t1b ON t1(b)
0340: 3b 0a 20 20 53 45 4c 45 43 54 20 61 20 46 52 4f  ;.  SELECT a FRO
0350: 4d 20 74 31 20 57 48 45 52 45 20 62 3d 27 78 31  M t1 WHERE b='x1
0360: 37 79 27 3b 0a 20 20 2d 2d 6d 61 74 63 68 20 31  7y';.  --match 1
0370: 37 0a 20 20 53 45 4c 45 43 54 20 61 20 46 52 4f  7.  SELECT a FRO
0380: 4d 20 74 31 20 57 48 45 52 45 20 62 20 47 4c 4f  M t1 WHERE b GLO
0390: 42 20 27 78 32 3f 79 27 20 4f 52 44 45 52 20 42  B 'x2?y' ORDER B
03a0: 59 20 62 20 44 45 53 43 20 4c 49 4d 49 54 20 35  Y b DESC LIMIT 5
03b0: 3b 0a 20 20 2d 2d 6d 61 74 63 68 20 32 39 20 32  ;.  --match 29 2
03c0: 38 20 32 37 20 32 36 20 32 35 0a 2d 2d 65 6e 64  8 27 26 25.--end
03d0: 0a 2d 2d 77 61 69 74 20 31 0a 2d 2d 74 61 73 6b  .--wait 1.--task
03e0: 20 32 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c   2.  CREATE TABL
03f0: 45 20 74 32 28 61 20 49 4e 54 45 47 45 52 20 50  E t2(a INTEGER P
0400: 52 49 4d 41 52 59 20 4b 45 59 2c 20 62 29 3b 0a  RIMARY KEY, b);.
0410: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32    INSERT INTO t2
0420: 20 53 45 4c 45 43 54 20 61 2c 20 62 20 46 52 4f   SELECT a, b FRO
0430: 4d 20 74 31 3b 0a 20 20 55 50 44 41 54 45 20 74  M t1;.  UPDATE t
0440: 31 20 53 45 54 20 62 3d 27 78 27 7c 7c 61 7c 7c  1 SET b='x'||a||
0450: 27 79 27 3b 0a 20 20 53 45 4c 45 43 54 20 74 6f  'y';.  SELECT to
0460: 74 61 6c 28 6c 65 6e 67 74 68 28 62 29 29 20 46  tal(length(b)) F
0470: 52 4f 4d 20 74 32 3b 0a 20 20 2d 2d 6d 61 74 63  ROM t2;.  --matc
0480: 68 20 32 34 37 0a 20 20 53 45 4c 45 43 54 20 61  h 247.  SELECT a
0490: 20 46 52 4f 4d 20 74 32 20 57 48 45 52 45 20 62   FROM t2 WHERE b
04a0: 3d 27 78 31 37 79 27 3b 0a 20 20 2d 2d 6d 61 74  ='x17y';.  --mat
04b0: 63 68 20 31 37 0a 20 20 43 52 45 41 54 45 20 49  ch 17.  CREATE I
04c0: 4e 44 45 58 20 74 32 62 20 4f 4e 20 74 32 28 62  NDEX t2b ON t2(b
04d0: 29 3b 0a 20 20 53 45 4c 45 43 54 20 61 20 46 52  );.  SELECT a FR
04e0: 4f 4d 20 74 32 20 57 48 45 52 45 20 62 3d 27 78  OM t2 WHERE b='x
04f0: 31 37 79 27 3b 0a 20 20 2d 2d 6d 61 74 63 68 20  17y';.  --match 
0500: 31 37 0a 20 20 53 45 4c 45 43 54 20 61 20 46 52  17.  SELECT a FR
0510: 4f 4d 20 74 32 20 57 48 45 52 45 20 62 20 47 4c  OM t2 WHERE b GL
0520: 4f 42 20 27 78 32 3f 79 27 20 4f 52 44 45 52 20  OB 'x2?y' ORDER 
0530: 42 59 20 62 20 44 45 53 43 20 4c 49 4d 49 54 20  BY b DESC LIMIT 
0540: 35 3b 0a 20 20 2d 2d 6d 61 74 63 68 20 32 39 20  5;.  --match 29 
0550: 32 38 20 32 37 20 32 36 20 32 35 0a 2d 2d 65 6e  28 27 26 25.--en
0560: 64 0a 2d 2d 74 61 73 6b 20 33 0a 20 20 43 52 45  d.--task 3.  CRE
0570: 41 54 45 20 54 41 42 4c 45 20 74 33 28 61 20 49  ATE TABLE t3(a I
0580: 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
0590: 45 59 2c 20 62 29 3b 0a 20 20 49 4e 53 45 52 54  EY, b);.  INSERT
05a0: 20 49 4e 54 4f 20 74 33 20 53 45 4c 45 43 54 20   INTO t3 SELECT 
05b0: 61 2c 20 62 20 46 52 4f 4d 20 74 31 3b 0a 20 20  a, b FROM t1;.  
05c0: 55 50 44 41 54 45 20 74 31 20 53 45 54 20 62 3d  UPDATE t1 SET b=
05d0: 27 78 27 7c 7c 61 7c 7c 27 79 27 3b 0a 20 20 53  'x'||a||'y';.  S
05e0: 45 4c 45 43 54 20 74 6f 74 61 6c 28 6c 65 6e 67  ELECT total(leng
05f0: 74 68 28 62 29 29 20 46 52 4f 4d 20 74 33 3b 0a  th(b)) FROM t3;.
0600: 20 20 2d 2d 6d 61 74 63 68 20 32 34 37 0a 20 20    --match 247.  
0610: 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 74 33  SELECT a FROM t3
0620: 20 57 48 45 52 45 20 62 3d 27 78 31 37 79 27 3b   WHERE b='x17y';
0630: 0a 20 20 2d 2d 6d 61 74 63 68 20 31 37 0a 20 20  .  --match 17.  
0640: 43 52 45 41 54 45 20 49 4e 44 45 58 20 74 33 62  CREATE INDEX t3b
0650: 20 4f 4e 20 74 33 28 62 29 3b 0a 20 20 53 45 4c   ON t3(b);.  SEL
0660: 45 43 54 20 61 20 46 52 4f 4d 20 74 33 20 57 48  ECT a FROM t3 WH
0670: 45 52 45 20 62 3d 27 78 31 37 79 27 3b 0a 20 20  ERE b='x17y';.  
0680: 2d 2d 6d 61 74 63 68 20 31 37 0a 20 20 53 45 4c  --match 17.  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 20 47 4c 4f 42 20 27 78 32 3f 79  ERE b GLOB 'x2?y
06b0: 27 20 4f 52 44 45 52 20 42 59 20 62 20 44 45 53  ' ORDER BY b DES
06c0: 43 20 4c 49 4d 49 54 20 35 3b 0a 20 20 2d 2d 6d  C LIMIT 5;.  --m
06d0: 61 74 63 68 20 32 39 20 32 38 20 32 37 20 32 36  atch 29 28 27 26
06e0: 20 32 35 0a 2d 2d 65 6e 64 0a 2d 2d 74 61 73 6b   25.--end.--task
06f0: 20 34 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c   4.  CREATE TABL
0700: 45 20 74 34 28 61 20 49 4e 54 45 47 45 52 20 50  E t4(a INTEGER P
0710: 52 49 4d 41 52 59 20 4b 45 59 2c 20 62 29 3b 0a  RIMARY KEY, b);.
0720: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 34    INSERT INTO t4
0730: 20 53 45 4c 45 43 54 20 61 2c 20 62 20 46 52 4f   SELECT a, b FRO
0740: 4d 20 74 31 3b 0a 20 20 55 50 44 41 54 45 20 74  M t1;.  UPDATE t
0750: 31 20 53 45 54 20 62 3d 27 78 27 7c 7c 61 7c 7c  1 SET b='x'||a||
0760: 27 79 27 3b 0a 20 20 53 45 4c 45 43 54 20 74 6f  'y';.  SELECT to
0770: 74 61 6c 28 6c 65 6e 67 74 68 28 62 29 29 20 46  tal(length(b)) F
0780: 52 4f 4d 20 74 34 3b 0a 20 20 2d 2d 6d 61 74 63  ROM t4;.  --matc
0790: 68 20 32 34 37 0a 20 20 53 45 4c 45 43 54 20 61  h 247.  SELECT a
07a0: 20 46 52 4f 4d 20 74 34 20 57 48 45 52 45 20 62   FROM t4 WHERE b
07b0: 3d 27 78 31 37 79 27 3b 0a 20 20 2d 2d 6d 61 74  ='x17y';.  --mat
07c0: 63 68 20 31 37 0a 20 20 43 52 45 41 54 45 20 49  ch 17.  CREATE I
07d0: 4e 44 45 58 20 74 34 62 20 4f 4e 20 74 34 28 62  NDEX t4b ON t4(b
07e0: 29 3b 0a 20 20 53 45 4c 45 43 54 20 61 20 46 52  );.  SELECT a FR
07f0: 4f 4d 20 74 34 20 57 48 45 52 45 20 62 3d 27 78  OM t4 WHERE b='x
0800: 31 37 79 27 3b 0a 20 20 2d 2d 6d 61 74 63 68 20  17y';.  --match 
0810: 31 37 0a 20 20 53 45 4c 45 43 54 20 61 20 46 52  17.  SELECT a FR
0820: 4f 4d 20 74 34 20 57 48 45 52 45 20 62 20 47 4c  OM t4 WHERE b GL
0830: 4f 42 20 27 78 32 3f 79 27 20 4f 52 44 45 52 20  OB 'x2?y' ORDER 
0840: 42 59 20 62 20 44 45 53 43 20 4c 49 4d 49 54 20  BY b DESC LIMIT 
0850: 35 3b 0a 20 20 2d 2d 6d 61 74 63 68 20 32 39 20  5;.  --match 29 
0860: 32 38 20 32 37 20 32 36 20 32 35 0a 2d 2d 65 6e  28 27 26 25.--en
0870: 64 0a 2d 2d 74 61 73 6b 20 35 0a 20 20 43 52 45  d.--task 5.  CRE
0880: 41 54 45 20 54 41 42 4c 45 20 74 35 28 61 20 49  ATE TABLE t5(a I
0890: 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
08a0: 45 59 2c 20 62 29 3b 0a 20 20 49 4e 53 45 52 54  EY, b);.  INSERT
08b0: 20 49 4e 54 4f 20 74 35 20 53 45 4c 45 43 54 20   INTO t5 SELECT 
08c0: 61 2c 20 62 20 46 52 4f 4d 20 74 31 3b 0a 20 20  a, b FROM t1;.  
08d0: 55 50 44 41 54 45 20 74 31 20 53 45 54 20 62 3d  UPDATE t1 SET b=
08e0: 27 78 27 7c 7c 61 7c 7c 27 79 27 3b 0a 20 20 53  'x'||a||'y';.  S
08f0: 45 4c 45 43 54 20 74 6f 74 61 6c 28 6c 65 6e 67  ELECT total(leng
0900: 74 68 28 62 29 29 20 46 52 4f 4d 20 74 35 3b 0a  th(b)) FROM t5;.
0910: 20 20 2d 2d 6d 61 74 63 68 20 32 34 37 0a 20 20    --match 247.  
0920: 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 74 35  SELECT a FROM t5
0930: 20 57 48 45 52 45 20 62 3d 27 78 31 37 79 27 3b   WHERE b='x17y';
0940: 0a 20 20 2d 2d 6d 61 74 63 68 20 31 37 0a 20 20  .  --match 17.  
0950: 43 52 45 41 54 45 20 49 4e 44 45 58 20 74 35 62  CREATE INDEX t5b
0960: 20 4f 4e 20 74 35 28 62 29 3b 0a 20 20 53 45 4c   ON t5(b);.  SEL
0970: 45 43 54 20 61 20 46 52 4f 4d 20 74 35 20 57 48  ECT a FROM t5 WH
0980: 45 52 45 20 62 3d 27 78 31 37 79 27 3b 0a 20 20  ERE b='x17y';.  
0990: 2d 2d 6d 61 74 63 68 20 31 37 0a 20 20 53 45 4c  --match 17.  SEL
09a0: 45 43 54 20 61 20 46 52 4f 4d 20 74 35 20 57 48  ECT a FROM t5 WH
09b0: 45 52 45 20 62 20 47 4c 4f 42 20 27 78 32 3f 79  ERE b GLOB 'x2?y
09c0: 27 20 4f 52 44 45 52 20 42 59 20 62 20 44 45 53  ' ORDER BY b DES
09d0: 43 20 4c 49 4d 49 54 20 35 3b 0a 20 20 2d 2d 6d  C LIMIT 5;.  --m
09e0: 61 74 63 68 20 32 39 20 32 38 20 32 37 20 32 36  atch 29 28 27 26
09f0: 20 32 35 0a 2d 2d 65 6e 64 0a 0a 2d 2d 77 61 69   25.--end..--wai
0a00: 74 20 61 6c 6c 0a 2f 2a 20 41 66 74 65 72 20 74  t all./* After t
0a10: 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
0a20: 20 68 61 73 20 62 65 65 6e 20 73 65 74 20 75 70   has been set up
0a30: 2c 20 72 75 6e 20 74 68 65 20 63 72 61 73 68 32  , run the crash2
0a40: 20 73 75 62 73 63 72 69 70 74 0a 2a 2a 20 6d 75   subscript.** mu
0a50: 6c 74 69 70 6c 65 20 74 69 6d 65 73 2e 20 2a 2f  ltiple times. */
0a60: 0a 2d 2d 73 6f 75 72 63 65 20 63 72 61 73 68 30  .--source crash0
0a70: 32 2e 73 75 62 74 65 73 74 0a 2d 2d 73 6f 75 72  2.subtest.--sour
0a80: 63 65 20 63 72 61 73 68 30 32 2e 73 75 62 74 65  ce crash02.subte
0a90: 73 74 0a 2d 2d 73 6f 75 72 63 65 20 63 72 61 73  st.--source cras
0aa0: 68 30 32 2e 73 75 62 74 65 73 74 0a 2d 2d 73 6f  h02.subtest.--so
0ab0: 75 72 63 65 20 63 72 61 73 68 30 32 2e 73 75 62  urce crash02.sub
0ac0: 74 65 73 74 0a 2d 2d 73 6f 75 72 63 65 20 63 72  test.--source cr
0ad0: 61 73 68 30 32 2e 73 75 62 74 65 73 74 0a 2d 2d  ash02.subtest.--
0ae0: 73 6f 75 72 63 65 20 63 72 61 73 68 30 32 2e 73  source crash02.s
0af0: 75 62 74 65 73 74 0a 2d 2d 73 6f 75 72 63 65 20  ubtest.--source 
0b00: 63 72 61 73 68 30 32 2e 73 75 62 74 65 73 74 0a  crash02.subtest.
0b10: 2d 2d 73 6f 75 72 63 65 20 63 72 61 73 68 30 32  --source crash02
0b20: 2e 73 75 62 74 65 73 74 0a 2d 2d 73 6f 75 72 63  .subtest.--sourc
0b30: 65 20 63 72 61 73 68 30 32 2e 73 75 62 74 65 73  e crash02.subtes
0b40: 74 0a                                            t.