/ Hex Artifact Content
Login

Artifact ae0b9a82d5d34122c3a3108781eb8d078091ccee:


0000: 23 20 32 30 30 31 20 53 65 70 74 65 6d 62 65 72  # 2001 September
0010: 20 31 35 0a 23 0a 23 20 54 68 65 20 61 75 74 68   15.#.# The auth
0020: 6f 72 20 64 69 73 63 6c 61 69 6d 73 20 63 6f 70  or disclaims cop
0030: 79 72 69 67 68 74 20 74 6f 20 74 68 69 73 20 73  yright to this s
0040: 6f 75 72 63 65 20 63 6f 64 65 2e 20 20 49 6e 20  ource code.  In 
0050: 70 6c 61 63 65 20 6f 66 0a 23 20 61 20 6c 65 67  place of.# a leg
0060: 61 6c 20 6e 6f 74 69 63 65 2c 20 68 65 72 65 20  al notice, here 
0070: 69 73 20 61 20 62 6c 65 73 73 69 6e 67 3a 0a 23  is a blessing:.#
0080: 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20 64 6f  .#    May you do
0090: 20 67 6f 6f 64 20 61 6e 64 20 6e 6f 74 20 65 76   good and not ev
00a0: 69 6c 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75  il..#    May you
00b0: 20 66 69 6e 64 20 66 6f 72 67 69 76 65 6e 65 73   find forgivenes
00c0: 73 20 66 6f 72 20 79 6f 75 72 73 65 6c 66 20 61  s for yourself a
00d0: 6e 64 20 66 6f 72 67 69 76 65 20 6f 74 68 65 72  nd forgive other
00e0: 73 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20  s..#    May you 
00f0: 73 68 61 72 65 20 66 72 65 65 6c 79 2c 20 6e 65  share freely, ne
0100: 76 65 72 20 74 61 6b 69 6e 67 20 6d 6f 72 65 20  ver taking more 
0110: 74 68 61 6e 20 79 6f 75 20 67 69 76 65 2e 0a 23  than you give..#
0120: 0a 23 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 2a 2a 2a 2a 2a 0a 23 20 54 68 69 73  *********.# This
0170: 20 66 69 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 73   file implements
0180: 20 72 65 67 72 65 73 73 69 6f 6e 20 74 65 73 74   regression test
0190: 73 20 66 6f 72 20 53 51 4c 69 74 65 20 6c 69 62  s for SQLite lib
01a0: 72 61 72 79 2e 20 20 54 68 65 0a 23 20 66 6f 63  rary.  The.# foc
01b0: 75 73 20 6f 66 20 74 68 69 73 20 73 63 72 69 70  us of this scrip
01c0: 74 20 69 73 20 64 61 74 61 62 61 73 65 20 6c 6f  t is database lo
01d0: 63 6b 73 2e 0a 23 0a 23 20 24 49 64 3a 20 74 72  cks..#.# $Id: tr
01e0: 61 6e 73 2e 74 65 73 74 2c 76 20 31 2e 31 31 20  ans.test,v 1.11 
01f0: 32 30 30 32 2f 30 33 2f 31 31 20 30 32 3a 30 36  2002/03/11 02:06
0200: 3a 31 34 20 64 72 68 20 45 78 70 20 24 0a 0a 0a  :14 drh Exp $...
0210: 73 65 74 20 74 65 73 74 64 69 72 20 5b 66 69 6c  set testdir [fil
0220: 65 20 64 69 72 6e 61 6d 65 20 24 61 72 67 76 30  e dirname $argv0
0230: 5d 0a 73 6f 75 72 63 65 20 24 74 65 73 74 64 69  ].source $testdi
0240: 72 2f 74 65 73 74 65 72 2e 74 63 6c 0a 0a 0a 23  r/tester.tcl...#
0250: 20 43 72 65 61 74 65 20 73 65 76 65 72 61 6c 20   Create several 
0260: 74 61 62 6c 65 73 20 74 6f 20 77 6f 72 6b 20 77  tables to work w
0270: 69 74 68 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 74  ith..#.do_test t
0280: 72 61 6e 73 2d 31 2e 30 20 7b 0a 20 20 65 78 65  rans-1.0 {.  exe
0290: 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54  csql {.    CREAT
02a0: 45 20 54 41 42 4c 45 20 6f 6e 65 28 61 20 69 6e  E TABLE one(a in
02b0: 74 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 62  t PRIMARY KEY, b
02c0: 20 74 65 78 74 29 3b 0a 20 20 20 20 49 4e 53 45   text);.    INSE
02d0: 52 54 20 49 4e 54 4f 20 6f 6e 65 20 56 41 4c 55  RT INTO one VALU
02e0: 45 53 28 31 2c 27 6f 6e 65 27 29 3b 0a 20 20 20  ES(1,'one');.   
02f0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 6f 6e 65   INSERT INTO one
0300: 20 56 41 4c 55 45 53 28 32 2c 27 74 77 6f 27 29   VALUES(2,'two')
0310: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
0320: 4f 20 6f 6e 65 20 56 41 4c 55 45 53 28 33 2c 27  O one VALUES(3,'
0330: 74 68 72 65 65 27 29 3b 0a 20 20 20 20 53 45 4c  three');.    SEL
0340: 45 43 54 20 62 20 46 52 4f 4d 20 6f 6e 65 20 4f  ECT b FROM one O
0350: 52 44 45 52 20 42 59 20 61 3b 0a 20 20 7d 0a 7d  RDER BY a;.  }.}
0360: 20 7b 6f 6e 65 20 74 77 6f 20 74 68 72 65 65 7d   {one two three}
0370: 0a 64 6f 5f 74 65 73 74 20 74 72 61 6e 73 2d 31  .do_test trans-1
0380: 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .1 {.  execsql {
0390: 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  .    CREATE TABL
03a0: 45 20 74 77 6f 28 61 20 69 6e 74 20 50 52 49 4d  E two(a int PRIM
03b0: 41 52 59 20 4b 45 59 2c 20 62 20 74 65 78 74 29  ARY KEY, b text)
03c0: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
03d0: 4f 20 74 77 6f 20 56 41 4c 55 45 53 28 31 2c 27  O two VALUES(1,'
03e0: 49 27 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20  I');.    INSERT 
03f0: 49 4e 54 4f 20 74 77 6f 20 56 41 4c 55 45 53 28  INTO two VALUES(
0400: 35 2c 27 56 27 29 3b 0a 20 20 20 20 49 4e 53 45  5,'V');.    INSE
0410: 52 54 20 49 4e 54 4f 20 74 77 6f 20 56 41 4c 55  RT INTO two VALU
0420: 45 53 28 31 30 2c 27 58 27 29 3b 0a 20 20 20 20  ES(10,'X');.    
0430: 53 45 4c 45 43 54 20 62 20 46 52 4f 4d 20 74 77  SELECT b FROM tw
0440: 6f 20 4f 52 44 45 52 20 42 59 20 61 3b 0a 20 20  o ORDER BY a;.  
0450: 7d 0a 7d 20 7b 49 20 56 20 58 7d 0a 64 6f 5f 74  }.} {I V X}.do_t
0460: 65 73 74 20 74 72 61 6e 73 2d 31 2e 39 20 7b 0a  est trans-1.9 {.
0470: 20 20 73 71 6c 69 74 65 20 61 6c 74 64 62 20 74    sqlite altdb t
0480: 65 73 74 2e 64 62 0a 20 20 65 78 65 63 73 71 6c  est.db.  execsql
0490: 20 7b 53 45 4c 45 43 54 20 62 20 46 52 4f 4d 20   {SELECT b FROM 
04a0: 6f 6e 65 20 4f 52 44 45 52 20 42 59 20 61 7d 20  one ORDER BY a} 
04b0: 61 6c 74 64 62 0a 7d 20 7b 6f 6e 65 20 74 77 6f  altdb.} {one two
04c0: 20 74 68 72 65 65 7d 0a 64 6f 5f 74 65 73 74 20   three}.do_test 
04d0: 74 72 61 6e 73 2d 31 2e 31 30 20 7b 0a 20 20 65  trans-1.10 {.  e
04e0: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 62  xecsql {SELECT b
04f0: 20 46 52 4f 4d 20 74 77 6f 20 4f 52 44 45 52 20   FROM two ORDER 
0500: 42 59 20 61 7d 20 61 6c 74 64 62 0a 7d 20 7b 49  BY a} altdb.} {I
0510: 20 56 20 58 7d 0a 0a 23 20 42 61 73 69 63 20 74   V X}..# Basic t
0520: 72 61 6e 73 61 63 74 69 6f 6e 73 0a 23 0a 64 6f  ransactions.#.do
0530: 5f 74 65 73 74 20 74 72 61 6e 73 2d 32 2e 31 20  _test trans-2.1 
0540: 7b 0a 20 20 73 65 74 20 76 20 5b 63 61 74 63 68  {.  set v [catch
0550: 20 7b 65 78 65 63 73 71 6c 20 7b 42 45 47 49 4e   {execsql {BEGIN
0560: 7d 7d 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e  }} msg].  lappen
0570: 64 20 76 20 24 6d 73 67 0a 7d 20 7b 30 20 7b 7d  d v $msg.} {0 {}
0580: 7d 0a 64 6f 5f 74 65 73 74 20 74 72 61 6e 73 2d  }.do_test trans-
0590: 32 2e 32 20 7b 0a 20 20 73 65 74 20 76 20 5b 63  2.2 {.  set v [c
05a0: 61 74 63 68 20 7b 65 78 65 63 73 71 6c 20 7b 45  atch {execsql {E
05b0: 4e 44 7d 7d 20 6d 73 67 5d 0a 20 20 6c 61 70 70  ND}} msg].  lapp
05c0: 65 6e 64 20 76 20 24 6d 73 67 0a 7d 20 7b 30 20  end v $msg.} {0 
05d0: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 74 72 61 6e  {}}.do_test tran
05e0: 73 2d 32 2e 33 20 7b 0a 20 20 73 65 74 20 76 20  s-2.3 {.  set v 
05f0: 5b 63 61 74 63 68 20 7b 65 78 65 63 73 71 6c 20  [catch {execsql 
0600: 7b 42 45 47 49 4e 20 54 52 41 4e 53 41 43 54 49  {BEGIN TRANSACTI
0610: 4f 4e 7d 7d 20 6d 73 67 5d 0a 20 20 6c 61 70 70  ON}} msg].  lapp
0620: 65 6e 64 20 76 20 24 6d 73 67 0a 7d 20 7b 30 20  end v $msg.} {0 
0630: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 74 72 61 6e  {}}.do_test tran
0640: 73 2d 32 2e 34 20 7b 0a 20 20 73 65 74 20 76 20  s-2.4 {.  set v 
0650: 5b 63 61 74 63 68 20 7b 65 78 65 63 73 71 6c 20  [catch {execsql 
0660: 7b 43 4f 4d 4d 49 54 20 54 52 41 4e 53 41 43 54  {COMMIT TRANSACT
0670: 49 4f 4e 7d 7d 20 6d 73 67 5d 0a 20 20 6c 61 70  ION}} msg].  lap
0680: 70 65 6e 64 20 76 20 24 6d 73 67 0a 7d 20 7b 30  pend v $msg.} {0
0690: 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 74 72 61   {}}.do_test tra
06a0: 6e 73 2d 32 2e 35 20 7b 0a 20 20 73 65 74 20 76  ns-2.5 {.  set v
06b0: 20 5b 63 61 74 63 68 20 7b 65 78 65 63 73 71 6c   [catch {execsql
06c0: 20 7b 42 45 47 49 4e 20 54 52 41 4e 53 41 43 54   {BEGIN TRANSACT
06d0: 49 4f 4e 20 27 66 6f 6f 27 7d 7d 20 6d 73 67 5d  ION 'foo'}} msg]
06e0: 0a 20 20 6c 61 70 70 65 6e 64 20 76 20 24 6d 73  .  lappend v $ms
06f0: 67 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65  g.} {0 {}}.do_te
0700: 73 74 20 74 72 61 6e 73 2d 32 2e 36 20 7b 0a 20  st trans-2.6 {. 
0710: 20 73 65 74 20 76 20 5b 63 61 74 63 68 20 7b 65   set v [catch {e
0720: 78 65 63 73 71 6c 20 7b 52 4f 4c 4c 42 41 43 4b  xecsql {ROLLBACK
0730: 20 54 52 41 4e 53 41 43 54 49 4f 4e 20 27 66 6f   TRANSACTION 'fo
0740: 6f 27 7d 7d 20 6d 73 67 5d 0a 20 20 6c 61 70 70  o'}} msg].  lapp
0750: 65 6e 64 20 76 20 24 6d 73 67 0a 7d 20 7b 30 20  end v $msg.} {0 
0760: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 74 72 61 6e  {}}.do_test tran
0770: 73 2d 32 2e 31 30 20 7b 0a 20 20 65 78 65 63 73  s-2.10 {.  execs
0780: 71 6c 20 7b 0a 20 20 20 20 42 45 47 49 4e 3b 0a  ql {.    BEGIN;.
0790: 20 20 20 20 53 45 4c 45 43 54 20 61 20 46 52 4f      SELECT a FRO
07a0: 4d 20 6f 6e 65 20 4f 52 44 45 52 20 42 59 20 61  M one ORDER BY a
07b0: 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 61 20 46  ;.    SELECT a F
07c0: 52 4f 4d 20 74 77 6f 20 4f 52 44 45 52 20 42 59  ROM two ORDER BY
07d0: 20 61 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20 7d   a;.    END;.  }
07e0: 0a 7d 20 7b 31 20 32 20 33 20 31 20 35 20 31 30  .} {1 2 3 1 5 10
07f0: 7d 0a 0a 23 20 43 68 65 63 6b 20 74 68 65 20 6c  }..# Check the l
0800: 6f 63 6b 69 6e 67 20 62 65 68 61 76 69 6f 72 0a  ocking behavior.
0810: 23 0a 64 6f 5f 74 65 73 74 20 74 72 61 6e 73 2d  #.do_test trans-
0820: 33 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  3.1 {.  execsql 
0830: 7b 0a 20 20 20 20 42 45 47 49 4e 3b 0a 20 20 20  {.    BEGIN;.   
0840: 20 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 6f   SELECT a FROM o
0850: 6e 65 20 4f 52 44 45 52 20 42 59 20 61 3b 0a 20  ne ORDER BY a;. 
0860: 20 7d 0a 7d 20 7b 31 20 32 20 33 7d 0a 64 6f 5f   }.} {1 2 3}.do_
0870: 74 65 73 74 20 74 72 61 6e 73 2d 33 2e 32 20 7b  test trans-3.2 {
0880: 0a 20 20 73 65 74 20 76 20 5b 63 61 74 63 68 20  .  set v [catch 
0890: 7b 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53  {execsql {.    S
08a0: 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 74 77 6f  ELECT a FROM two
08b0: 20 4f 52 44 45 52 20 42 59 20 61 3b 0a 20 20 7d   ORDER BY a;.  }
08c0: 20 61 6c 74 64 62 7d 20 6d 73 67 5d 0a 20 20 6c   altdb} msg].  l
08d0: 61 70 70 65 6e 64 20 76 20 24 6d 73 67 0a 7d 20  append v $msg.} 
08e0: 7b 31 20 7b 64 61 74 61 62 61 73 65 20 69 73 20  {1 {database is 
08f0: 6c 6f 63 6b 65 64 7d 7d 0a 64 6f 5f 74 65 73 74  locked}}.do_test
0900: 20 74 72 61 6e 73 2d 33 2e 33 20 7b 0a 20 20 73   trans-3.3 {.  s
0910: 65 74 20 76 20 5b 63 61 74 63 68 20 7b 65 78 65  et v [catch {exe
0920: 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43  csql {.    SELEC
0930: 54 20 61 20 46 52 4f 4d 20 6f 6e 65 20 4f 52 44  T a FROM one ORD
0940: 45 52 20 42 59 20 61 3b 0a 20 20 7d 20 61 6c 74  ER BY a;.  } alt
0950: 64 62 7d 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65  db} msg].  lappe
0960: 6e 64 20 76 20 24 6d 73 67 0a 7d 20 7b 31 20 7b  nd v $msg.} {1 {
0970: 64 61 74 61 62 61 73 65 20 69 73 20 6c 6f 63 6b  database is lock
0980: 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 74 72 61  ed}}.do_test tra
0990: 6e 73 2d 33 2e 34 20 7b 0a 20 20 73 65 74 20 76  ns-3.4 {.  set v
09a0: 20 5b 63 61 74 63 68 20 7b 65 78 65 63 73 71 6c   [catch {execsql
09b0: 20 7b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e   {.    INSERT IN
09c0: 54 4f 20 6f 6e 65 20 56 41 4c 55 45 53 28 34 2c  TO one VALUES(4,
09d0: 27 66 6f 75 72 27 29 3b 0a 20 20 7d 7d 20 6d 73  'four');.  }} ms
09e0: 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20 76 20 24  g].  lappend v $
09f0: 6d 73 67 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f  msg.} {0 {}}.do_
0a00: 74 65 73 74 20 74 72 61 6e 73 2d 33 2e 35 20 7b  test trans-3.5 {
0a10: 0a 20 20 73 65 74 20 76 20 5b 63 61 74 63 68 20  .  set v [catch 
0a20: 7b 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53  {execsql {.    S
0a30: 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 74 77 6f  ELECT a FROM two
0a40: 20 4f 52 44 45 52 20 42 59 20 61 3b 0a 20 20 7d   ORDER BY a;.  }
0a50: 20 61 6c 74 64 62 7d 20 6d 73 67 5d 0a 20 20 6c   altdb} msg].  l
0a60: 61 70 70 65 6e 64 20 76 20 24 6d 73 67 0a 7d 20  append v $msg.} 
0a70: 7b 31 20 7b 64 61 74 61 62 61 73 65 20 69 73 20  {1 {database is 
0a80: 6c 6f 63 6b 65 64 7d 7d 0a 64 6f 5f 74 65 73 74  locked}}.do_test
0a90: 20 74 72 61 6e 73 2d 33 2e 36 20 7b 0a 20 20 73   trans-3.6 {.  s
0aa0: 65 74 20 76 20 5b 63 61 74 63 68 20 7b 65 78 65  et v [catch {exe
0ab0: 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43  csql {.    SELEC
0ac0: 54 20 61 20 46 52 4f 4d 20 6f 6e 65 20 4f 52 44  T a FROM one ORD
0ad0: 45 52 20 42 59 20 61 3b 0a 20 20 7d 20 61 6c 74  ER BY a;.  } alt
0ae0: 64 62 7d 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65  db} msg].  lappe
0af0: 6e 64 20 76 20 24 6d 73 67 0a 7d 20 7b 31 20 7b  nd v $msg.} {1 {
0b00: 64 61 74 61 62 61 73 65 20 69 73 20 6c 6f 63 6b  database is lock
0b10: 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 74 72 61  ed}}.do_test tra
0b20: 6e 73 2d 33 2e 37 20 7b 0a 20 20 73 65 74 20 76  ns-3.7 {.  set v
0b30: 20 5b 63 61 74 63 68 20 7b 65 78 65 63 73 71 6c   [catch {execsql
0b40: 20 7b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e   {.    INSERT IN
0b50: 54 4f 20 74 77 6f 20 56 41 4c 55 45 53 28 34 2c  TO two VALUES(4,
0b60: 27 49 56 27 29 3b 0a 20 20 7d 7d 20 6d 73 67 5d  'IV');.  }} msg]
0b70: 0a 20 20 6c 61 70 70 65 6e 64 20 76 20 24 6d 73  .  lappend v $ms
0b80: 67 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65  g.} {0 {}}.do_te
0b90: 73 74 20 74 72 61 6e 73 2d 33 2e 38 20 7b 0a 20  st trans-3.8 {. 
0ba0: 20 73 65 74 20 76 20 5b 63 61 74 63 68 20 7b 65   set v [catch {e
0bb0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c  xecsql {.    SEL
0bc0: 45 43 54 20 61 20 46 52 4f 4d 20 74 77 6f 20 4f  ECT a FROM two O
0bd0: 52 44 45 52 20 42 59 20 61 3b 0a 20 20 7d 20 61  RDER BY a;.  } a
0be0: 6c 74 64 62 7d 20 6d 73 67 5d 0a 20 20 6c 61 70  ltdb} msg].  lap
0bf0: 70 65 6e 64 20 76 20 24 6d 73 67 0a 7d 20 7b 31  pend v $msg.} {1
0c00: 20 7b 64 61 74 61 62 61 73 65 20 69 73 20 6c 6f   {database is lo
0c10: 63 6b 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 74  cked}}.do_test t
0c20: 72 61 6e 73 2d 33 2e 39 20 7b 0a 20 20 73 65 74  rans-3.9 {.  set
0c30: 20 76 20 5b 63 61 74 63 68 20 7b 65 78 65 63 73   v [catch {execs
0c40: 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  ql {.    SELECT 
0c50: 61 20 46 52 4f 4d 20 6f 6e 65 20 4f 52 44 45 52  a FROM one ORDER
0c60: 20 42 59 20 61 3b 0a 20 20 7d 20 61 6c 74 64 62   BY a;.  } altdb
0c70: 7d 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64  } msg].  lappend
0c80: 20 76 20 24 6d 73 67 0a 7d 20 7b 31 20 7b 64 61   v $msg.} {1 {da
0c90: 74 61 62 61 73 65 20 69 73 20 6c 6f 63 6b 65 64  tabase is locked
0ca0: 7d 7d 0a 64 6f 5f 74 65 73 74 20 74 72 61 6e 73  }}.do_test trans
0cb0: 2d 33 2e 31 30 20 7b 0a 20 20 65 78 65 63 73 71  -3.10 {.  execsq
0cc0: 6c 20 7b 45 4e 44 20 54 52 41 4e 53 41 43 54 49  l {END TRANSACTI
0cd0: 4f 4e 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74  ON}.} {}.do_test
0ce0: 20 74 72 61 6e 73 2d 33 2e 31 31 20 7b 0a 20 20   trans-3.11 {.  
0cf0: 73 65 74 20 76 20 5b 63 61 74 63 68 20 7b 65 78  set v [catch {ex
0d00: 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45  ecsql {.    SELE
0d10: 43 54 20 61 20 46 52 4f 4d 20 74 77 6f 20 4f 52  CT a FROM two OR
0d20: 44 45 52 20 42 59 20 61 3b 0a 20 20 7d 20 61 6c  DER BY a;.  } al
0d30: 74 64 62 7d 20 6d 73 67 5d 0a 20 20 6c 61 70 70  tdb} msg].  lapp
0d40: 65 6e 64 20 76 20 24 6d 73 67 0a 7d 20 7b 30 20  end v $msg.} {0 
0d50: 7b 31 20 34 20 35 20 31 30 7d 7d 0a 64 6f 5f 74  {1 4 5 10}}.do_t
0d60: 65 73 74 20 74 72 61 6e 73 2d 33 2e 31 32 20 7b  est trans-3.12 {
0d70: 0a 20 20 73 65 74 20 76 20 5b 63 61 74 63 68 20  .  set v [catch 
0d80: 7b 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53  {execsql {.    S
0d90: 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 6f 6e 65  ELECT a FROM one
0da0: 20 4f 52 44 45 52 20 42 59 20 61 3b 0a 20 20 7d   ORDER BY a;.  }
0db0: 20 61 6c 74 64 62 7d 20 6d 73 67 5d 0a 20 20 6c   altdb} msg].  l
0dc0: 61 70 70 65 6e 64 20 76 20 24 6d 73 67 0a 7d 20  append v $msg.} 
0dd0: 7b 30 20 7b 31 20 32 20 33 20 34 7d 7d 0a 64 6f  {0 {1 2 3 4}}.do
0de0: 5f 74 65 73 74 20 74 72 61 6e 73 2d 33 2e 31 33  _test trans-3.13
0df0: 20 7b 0a 20 20 73 65 74 20 76 20 5b 63 61 74 63   {.  set v [catc
0e00: 68 20 7b 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  h {execsql {.   
0e10: 20 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 74   SELECT a FROM t
0e20: 77 6f 20 4f 52 44 45 52 20 42 59 20 61 3b 0a 20  wo ORDER BY a;. 
0e30: 20 7d 20 64 62 7d 20 6d 73 67 5d 0a 20 20 6c 61   } db} msg].  la
0e40: 70 70 65 6e 64 20 76 20 24 6d 73 67 0a 7d 20 7b  ppend v $msg.} {
0e50: 30 20 7b 31 20 34 20 35 20 31 30 7d 7d 0a 64 6f  0 {1 4 5 10}}.do
0e60: 5f 74 65 73 74 20 74 72 61 6e 73 2d 33 2e 31 34  _test trans-3.14
0e70: 20 7b 0a 20 20 73 65 74 20 76 20 5b 63 61 74 63   {.  set v [catc
0e80: 68 20 7b 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  h {execsql {.   
0e90: 20 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 6f   SELECT a FROM o
0ea0: 6e 65 20 4f 52 44 45 52 20 42 59 20 61 3b 0a 20  ne ORDER BY a;. 
0eb0: 20 7d 20 64 62 7d 20 6d 73 67 5d 0a 20 20 6c 61   } db} msg].  la
0ec0: 70 70 65 6e 64 20 76 20 24 6d 73 67 0a 7d 20 7b  ppend v $msg.} {
0ed0: 30 20 7b 31 20 32 20 33 20 34 7d 7d 0a 0a 64 6f  0 {1 2 3 4}}..do
0ee0: 5f 74 65 73 74 20 74 72 61 6e 73 2d 34 2e 31 20  _test trans-4.1 
0ef0: 7b 0a 20 20 73 65 74 20 76 20 5b 63 61 74 63 68  {.  set v [catch
0f00: 20 7b 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20   {execsql {.    
0f10: 43 4f 4d 4d 49 54 3b 0a 20 20 7d 20 64 62 7d 20  COMMIT;.  } db} 
0f20: 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20 76  msg].  lappend v
0f30: 20 24 6d 73 67 0a 7d 20 7b 30 20 7b 7d 7d 0a 64   $msg.} {0 {}}.d
0f40: 6f 5f 74 65 73 74 20 74 72 61 6e 73 2d 34 2e 32  o_test trans-4.2
0f50: 20 7b 0a 20 20 73 65 74 20 76 20 5b 63 61 74 63   {.  set v [catc
0f60: 68 20 7b 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  h {execsql {.   
0f70: 20 52 4f 4c 4c 42 41 43 4b 3b 0a 20 20 7d 20 64   ROLLBACK;.  } d
0f80: 62 7d 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e  b} msg].  lappen
0f90: 64 20 76 20 24 6d 73 67 0a 7d 20 7b 30 20 7b 7d  d v $msg.} {0 {}
0fa0: 7d 0a 64 6f 5f 74 65 73 74 20 74 72 61 6e 73 2d  }.do_test trans-
0fb0: 34 2e 33 20 7b 0a 20 20 73 65 74 20 76 20 5b 63  4.3 {.  set v [c
0fc0: 61 74 63 68 20 7b 65 78 65 63 73 71 6c 20 7b 0a  atch {execsql {.
0fd0: 20 20 20 20 42 45 47 49 4e 20 54 52 41 4e 53 41      BEGIN TRANSA
0fe0: 43 54 49 4f 4e 3b 0a 20 20 20 20 53 45 4c 45 43  CTION;.    SELEC
0ff0: 54 20 61 20 46 52 4f 4d 20 74 77 6f 20 4f 52 44  T a FROM two ORD
1000: 45 52 20 42 59 20 61 3b 0a 20 20 7d 20 64 62 7d  ER BY a;.  } db}
1010: 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20   msg].  lappend 
1020: 76 20 24 6d 73 67 0a 7d 20 7b 30 20 7b 31 20 34  v $msg.} {0 {1 4
1030: 20 35 20 31 30 7d 7d 0a 64 6f 5f 74 65 73 74 20   5 10}}.do_test 
1040: 74 72 61 6e 73 2d 34 2e 34 20 7b 0a 20 20 73 65  trans-4.4 {.  se
1050: 74 20 76 20 5b 63 61 74 63 68 20 7b 65 78 65 63  t v [catch {exec
1060: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
1070: 20 61 20 46 52 4f 4d 20 74 77 6f 20 4f 52 44 45   a FROM two ORDE
1080: 52 20 42 59 20 61 3b 0a 20 20 7d 20 61 6c 74 64  R BY a;.  } altd
1090: 62 7d 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e  b} msg].  lappen
10a0: 64 20 76 20 24 6d 73 67 0a 7d 20 7b 31 20 7b 64  d v $msg.} {1 {d
10b0: 61 74 61 62 61 73 65 20 69 73 20 6c 6f 63 6b 65  atabase is locke
10c0: 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 74 72 61 6e  d}}.do_test tran
10d0: 73 2d 34 2e 35 20 7b 0a 20 20 73 65 74 20 76 20  s-4.5 {.  set v 
10e0: 5b 63 61 74 63 68 20 7b 65 78 65 63 73 71 6c 20  [catch {execsql 
10f0: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 61 20 46  {.    SELECT a F
1100: 52 4f 4d 20 6f 6e 65 20 4f 52 44 45 52 20 42 59  ROM one ORDER BY
1110: 20 61 3b 0a 20 20 7d 20 61 6c 74 64 62 7d 20 6d   a;.  } altdb} m
1120: 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20 76 20  sg].  lappend v 
1130: 24 6d 73 67 0a 7d 20 7b 31 20 7b 64 61 74 61 62  $msg.} {1 {datab
1140: 61 73 65 20 69 73 20 6c 6f 63 6b 65 64 7d 7d 0a  ase is locked}}.
1150: 64 6f 5f 74 65 73 74 20 74 72 61 6e 73 2d 34 2e  do_test trans-4.
1160: 36 20 7b 0a 20 20 73 65 74 20 76 20 5b 63 61 74  6 {.  set v [cat
1170: 63 68 20 7b 65 78 65 63 73 71 6c 20 7b 0a 20 20  ch {execsql {.  
1180: 20 20 42 45 47 49 4e 20 54 52 41 4e 53 41 43 54    BEGIN TRANSACT
1190: 49 4f 4e 3b 0a 20 20 20 20 53 45 4c 45 43 54 20  ION;.    SELECT 
11a0: 61 20 46 52 4f 4d 20 6f 6e 65 20 4f 52 44 45 52  a FROM one ORDER
11b0: 20 42 59 20 61 3b 0a 20 20 7d 20 64 62 7d 20 6d   BY a;.  } db} m
11c0: 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20 76 20  sg].  lappend v 
11d0: 24 6d 73 67 0a 7d 20 7b 30 20 7b 31 20 32 20 33  $msg.} {0 {1 2 3
11e0: 20 34 7d 7d 0a 64 6f 5f 74 65 73 74 20 74 72 61   4}}.do_test tra
11f0: 6e 73 2d 34 2e 37 20 7b 0a 20 20 73 65 74 20 76  ns-4.7 {.  set v
1200: 20 5b 63 61 74 63 68 20 7b 65 78 65 63 73 71 6c   [catch {execsql
1210: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 61 20   {.    SELECT a 
1220: 46 52 4f 4d 20 74 77 6f 20 4f 52 44 45 52 20 42  FROM two ORDER B
1230: 59 20 61 3b 0a 20 20 7d 20 61 6c 74 64 62 7d 20  Y a;.  } altdb} 
1240: 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20 76  msg].  lappend v
1250: 20 24 6d 73 67 0a 7d 20 7b 31 20 7b 64 61 74 61   $msg.} {1 {data
1260: 62 61 73 65 20 69 73 20 6c 6f 63 6b 65 64 7d 7d  base is locked}}
1270: 0a 64 6f 5f 74 65 73 74 20 74 72 61 6e 73 2d 34  .do_test trans-4
1280: 2e 38 20 7b 0a 20 20 73 65 74 20 76 20 5b 63 61  .8 {.  set v [ca
1290: 74 63 68 20 7b 65 78 65 63 73 71 6c 20 7b 0a 20  tch {execsql {. 
12a0: 20 20 20 53 45 4c 45 43 54 20 61 20 46 52 4f 4d     SELECT a FROM
12b0: 20 6f 6e 65 20 4f 52 44 45 52 20 42 59 20 61 3b   one ORDER BY a;
12c0: 0a 20 20 7d 20 61 6c 74 64 62 7d 20 6d 73 67 5d  .  } altdb} msg]
12d0: 0a 20 20 6c 61 70 70 65 6e 64 20 76 20 24 6d 73  .  lappend v $ms
12e0: 67 0a 7d 20 7b 31 20 7b 64 61 74 61 62 61 73 65  g.} {1 {database
12f0: 20 69 73 20 6c 6f 63 6b 65 64 7d 7d 0a 64 6f 5f   is locked}}.do_
1300: 74 65 73 74 20 74 72 61 6e 73 2d 34 2e 39 20 7b  test trans-4.9 {
1310: 0a 20 20 73 65 74 20 76 20 5b 63 61 74 63 68 20  .  set v [catch 
1320: 7b 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 45  {execsql {.    E
1330: 4e 44 20 54 52 41 4e 53 41 43 54 49 4f 4e 3b 0a  ND TRANSACTION;.
1340: 20 20 20 20 53 45 4c 45 43 54 20 61 20 46 52 4f      SELECT a FRO
1350: 4d 20 74 77 6f 20 4f 52 44 45 52 20 42 59 20 61  M two ORDER BY a
1360: 3b 0a 20 20 7d 20 64 62 7d 20 6d 73 67 5d 0a 20  ;.  } db} msg]. 
1370: 20 6c 61 70 70 65 6e 64 20 76 20 24 6d 73 67 0a   lappend v $msg.
1380: 7d 20 7b 30 20 7b 31 20 34 20 35 20 31 30 7d 7d  } {0 {1 4 5 10}}
1390: 0a 64 6f 5f 74 65 73 74 20 74 72 61 6e 73 2d 34  .do_test trans-4
13a0: 2e 31 30 20 7b 0a 20 20 73 65 74 20 76 20 5b 63  .10 {.  set v [c
13b0: 61 74 63 68 20 7b 65 78 65 63 73 71 6c 20 7b 0a  atch {execsql {.
13c0: 20 20 20 20 53 45 4c 45 43 54 20 61 20 46 52 4f      SELECT a FRO
13d0: 4d 20 74 77 6f 20 4f 52 44 45 52 20 42 59 20 61  M two ORDER BY a
13e0: 3b 0a 20 20 7d 20 61 6c 74 64 62 7d 20 6d 73 67  ;.  } altdb} msg
13f0: 5d 0a 20 20 6c 61 70 70 65 6e 64 20 76 20 24 6d  ].  lappend v $m
1400: 73 67 0a 7d 20 7b 30 20 7b 31 20 34 20 35 20 31  sg.} {0 {1 4 5 1
1410: 30 7d 7d 0a 64 6f 5f 74 65 73 74 20 74 72 61 6e  0}}.do_test tran
1420: 73 2d 34 2e 31 31 20 7b 0a 20 20 73 65 74 20 76  s-4.11 {.  set v
1430: 20 5b 63 61 74 63 68 20 7b 65 78 65 63 73 71 6c   [catch {execsql
1440: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 61 20   {.    SELECT a 
1450: 46 52 4f 4d 20 6f 6e 65 20 4f 52 44 45 52 20 42  FROM one ORDER B
1460: 59 20 61 3b 0a 20 20 7d 20 61 6c 74 64 62 7d 20  Y a;.  } altdb} 
1470: 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20 76  msg].  lappend v
1480: 20 24 6d 73 67 0a 7d 20 7b 30 20 7b 31 20 32 20   $msg.} {0 {1 2 
1490: 33 20 34 7d 7d 0a 64 6f 5f 74 65 73 74 20 74 72  3 4}}.do_test tr
14a0: 61 6e 73 2d 34 2e 39 39 20 7b 0a 20 20 61 6c 74  ans-4.99 {.  alt
14b0: 64 62 20 63 6c 6f 73 65 0a 20 20 65 78 65 63 73  db close.  execs
14c0: 71 6c 20 7b 0a 20 20 20 20 44 52 4f 50 20 54 41  ql {.    DROP TA
14d0: 42 4c 45 20 6f 6e 65 3b 0a 20 20 20 20 44 52 4f  BLE one;.    DRO
14e0: 50 20 54 41 42 4c 45 20 74 77 6f 3b 0a 20 20 7d  P TABLE two;.  }
14f0: 0a 7d 20 7b 7d 0a 0a 23 20 43 68 65 63 6b 20 6f  .} {}..# Check o
1500: 75 74 20 74 68 65 20 63 6f 6d 6d 69 74 2f 72 6f  ut the commit/ro
1510: 6c 6c 62 61 63 6b 20 62 65 68 61 76 69 6f 72 20  llback behavior 
1520: 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 0a  of the database.
1530: 23 0a 64 6f 5f 74 65 73 74 20 74 72 61 6e 73 2d  #.do_test trans-
1540: 35 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  5.1 {.  execsql 
1550: 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f  {SELECT name FRO
1560: 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20  M sqlite_master 
1570: 57 48 45 52 45 20 74 79 70 65 3d 27 74 61 62 6c  WHERE type='tabl
1580: 65 27 20 4f 52 44 45 52 20 42 59 20 6e 61 6d 65  e' ORDER BY name
1590: 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 74  }.} {}.do_test t
15a0: 72 61 6e 73 2d 35 2e 32 20 7b 0a 20 20 65 78 65  rans-5.2 {.  exe
15b0: 63 73 71 6c 20 7b 42 45 47 49 4e 20 54 52 41 4e  csql {BEGIN TRAN
15c0: 53 41 43 54 49 4f 4e 7d 0a 20 20 65 78 65 63 73  SACTION}.  execs
15d0: 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20  ql {SELECT name 
15e0: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74  FROM sqlite_mast
15f0: 65 72 20 57 48 45 52 45 20 74 79 70 65 3d 27 74  er WHERE type='t
1600: 61 62 6c 65 27 20 4f 52 44 45 52 20 42 59 20 6e  able' ORDER BY n
1610: 61 6d 65 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73  ame}.} {}.do_tes
1620: 74 20 74 72 61 6e 73 2d 35 2e 33 20 7b 0a 20 20  t trans-5.3 {.  
1630: 65 78 65 63 73 71 6c 20 7b 43 52 45 41 54 45 20  execsql {CREATE 
1640: 54 41 42 4c 45 20 6f 6e 65 28 61 20 74 65 78 74  TABLE one(a text
1650: 2c 20 62 20 69 6e 74 29 7d 0a 20 20 65 78 65 63  , b int)}.  exec
1660: 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65  sql {SELECT name
1670: 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73   FROM sqlite_mas
1680: 74 65 72 20 57 48 45 52 45 20 74 79 70 65 3d 27  ter WHERE type='
1690: 74 61 62 6c 65 27 20 4f 52 44 45 52 20 42 59 20  table' ORDER BY 
16a0: 6e 61 6d 65 7d 0a 7d 20 7b 6f 6e 65 7d 0a 64 6f  name}.} {one}.do
16b0: 5f 74 65 73 74 20 74 72 61 6e 73 2d 35 2e 34 20  _test trans-5.4 
16c0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  {.  execsql {SEL
16d0: 45 43 54 20 61 2c 62 20 46 52 4f 4d 20 6f 6e 65  ECT a,b FROM one
16e0: 20 4f 52 44 45 52 20 42 59 20 62 7d 0a 7d 20 7b   ORDER BY b}.} {
16f0: 7d 0a 64 6f 5f 74 65 73 74 20 74 72 61 6e 73 2d  }.do_test trans-
1700: 35 2e 35 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  5.5 {.  execsql 
1710: 7b 49 4e 53 45 52 54 20 49 4e 54 4f 20 6f 6e 65  {INSERT INTO one
1720: 28 61 2c 62 29 20 56 41 4c 55 45 53 28 27 68 65  (a,b) VALUES('he
1730: 6c 6c 6f 27 2c 20 31 29 7d 0a 20 20 65 78 65 63  llo', 1)}.  exec
1740: 73 71 6c 20 7b 53 45 4c 45 43 54 20 61 2c 62 20  sql {SELECT a,b 
1750: 46 52 4f 4d 20 6f 6e 65 20 4f 52 44 45 52 20 42  FROM one ORDER B
1760: 59 20 62 7d 0a 7d 20 7b 68 65 6c 6c 6f 20 31 7d  Y b}.} {hello 1}
1770: 0a 64 6f 5f 74 65 73 74 20 74 72 61 6e 73 2d 35  .do_test trans-5
1780: 2e 36 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .6 {.  execsql {
1790: 52 4f 4c 4c 42 41 43 4b 7d 0a 20 20 65 78 65 63  ROLLBACK}.  exec
17a0: 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65  sql {SELECT name
17b0: 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73   FROM sqlite_mas
17c0: 74 65 72 20 57 48 45 52 45 20 74 79 70 65 3d 27  ter WHERE type='
17d0: 74 61 62 6c 65 27 20 4f 52 44 45 52 20 42 59 20  table' ORDER BY 
17e0: 6e 61 6d 65 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65  name}.} {}.do_te
17f0: 73 74 20 74 72 61 6e 73 2d 35 2e 37 20 7b 0a 20  st trans-5.7 {. 
1800: 20 73 65 74 20 76 20 5b 63 61 74 63 68 20 7b 0a   set v [catch {.
1810: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c      execsql {SEL
1820: 45 43 54 20 61 2c 62 20 46 52 4f 4d 20 6f 6e 65  ECT a,b FROM one
1830: 20 4f 52 44 45 52 20 42 59 20 62 7d 0a 20 20 7d   ORDER BY b}.  }
1840: 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20   msg].  lappend 
1850: 76 20 24 6d 73 67 0a 7d 20 7b 31 20 7b 6e 6f 20  v $msg.} {1 {no 
1860: 73 75 63 68 20 74 61 62 6c 65 3a 20 6f 6e 65 7d  such table: one}
1870: 7d 0a 0a 23 20 54 65 73 74 20 63 6f 6d 6d 69 74  }..# Test commit
1880: 73 20 61 6e 64 20 72 6f 6c 6c 62 61 63 6b 73 20  s and rollbacks 
1890: 6f 66 20 74 61 62 6c 65 20 43 52 45 41 54 45 20  of table CREATE 
18a0: 54 41 42 4c 45 73 2c 20 43 52 45 41 54 45 20 49  TABLEs, CREATE I
18b0: 4e 44 45 58 73 0a 23 20 44 52 4f 50 20 54 41 42  NDEXs.# DROP TAB
18c0: 4c 45 73 20 61 6e 64 20 44 52 4f 50 20 49 4e 44  LEs and DROP IND
18d0: 45 58 73 0a 23 0a 64 6f 5f 74 65 73 74 20 74 72  EXs.#.do_test tr
18e0: 61 6e 73 2d 35 2e 38 20 7b 0a 20 20 65 78 65 63  ans-5.8 {.  exec
18f0: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
1900: 20 6e 61 6d 65 20 66 52 4f 4d 20 73 71 6c 69 74   name fROM sqlit
1910: 65 5f 6d 61 73 74 65 72 20 0a 20 20 20 20 57 48  e_master .    WH
1920: 45 52 45 20 74 79 70 65 3d 27 74 61 62 6c 65 27  ERE type='table'
1930: 20 4f 52 20 74 79 70 65 3d 27 69 6e 64 65 78 27   OR type='index'
1940: 0a 20 20 20 20 4f 52 44 45 52 20 42 59 20 6e 61  .    ORDER BY na
1950: 6d 65 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74  me.  }.} {}.do_t
1960: 65 73 74 20 74 72 61 6e 73 2d 35 2e 39 20 7b 0a  est trans-5.9 {.
1970: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
1980: 42 45 47 49 4e 20 54 52 41 4e 53 41 43 54 49 4f  BEGIN TRANSACTIO
1990: 4e 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41  N;.    CREATE TA
19a0: 42 4c 45 20 74 31 28 61 20 69 6e 74 2c 20 62 20  BLE t1(a int, b 
19b0: 69 6e 74 2c 20 63 20 69 6e 74 29 3b 0a 20 20 20  int, c int);.   
19c0: 20 53 45 4c 45 43 54 20 6e 61 6d 65 20 66 52 4f   SELECT name fRO
19d0: 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20  M sqlite_master 
19e0: 0a 20 20 20 20 57 48 45 52 45 20 74 79 70 65 3d  .    WHERE type=
19f0: 27 74 61 62 6c 65 27 20 4f 52 20 74 79 70 65 3d  'table' OR type=
1a00: 27 69 6e 64 65 78 27 0a 20 20 20 20 4f 52 44 45  'index'.    ORDE
1a10: 52 20 42 59 20 6e 61 6d 65 3b 0a 20 20 7d 0a 7d  R BY name;.  }.}
1a20: 20 7b 74 31 7d 0a 64 6f 5f 74 65 73 74 20 74 72   {t1}.do_test tr
1a30: 61 6e 73 2d 35 2e 31 30 20 7b 0a 20 20 65 78 65  ans-5.10 {.  exe
1a40: 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54  csql {.    CREAT
1a50: 45 20 49 4e 44 45 58 20 69 31 20 4f 4e 20 74 31  E INDEX i1 ON t1
1a60: 28 61 29 3b 0a 20 20 20 20 53 45 4c 45 43 54 20  (a);.    SELECT 
1a70: 6e 61 6d 65 20 66 52 4f 4d 20 73 71 6c 69 74 65  name fROM sqlite
1a80: 5f 6d 61 73 74 65 72 20 0a 20 20 20 20 57 48 45  _master .    WHE
1a90: 52 45 20 74 79 70 65 3d 27 74 61 62 6c 65 27 20  RE type='table' 
1aa0: 4f 52 20 74 79 70 65 3d 27 69 6e 64 65 78 27 0a  OR type='index'.
1ab0: 20 20 20 20 4f 52 44 45 52 20 42 59 20 6e 61 6d      ORDER BY nam
1ac0: 65 3b 0a 20 20 7d 0a 7d 20 7b 69 31 20 74 31 7d  e;.  }.} {i1 t1}
1ad0: 0a 64 6f 5f 74 65 73 74 20 74 72 61 6e 73 2d 35  .do_test trans-5
1ae0: 2e 31 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  .11 {.  execsql 
1af0: 7b 0a 20 20 20 20 43 4f 4d 4d 49 54 3b 0a 20 20  {.    COMMIT;.  
1b00: 20 20 53 45 4c 45 43 54 20 6e 61 6d 65 20 66 52    SELECT name fR
1b10: 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  OM sqlite_master
1b20: 20 0a 20 20 20 20 57 48 45 52 45 20 74 79 70 65   .    WHERE type
1b30: 3d 27 74 61 62 6c 65 27 20 4f 52 20 74 79 70 65  ='table' OR type
1b40: 3d 27 69 6e 64 65 78 27 0a 20 20 20 20 4f 52 44  ='index'.    ORD
1b50: 45 52 20 42 59 20 6e 61 6d 65 3b 0a 20 20 7d 0a  ER BY name;.  }.
1b60: 7d 20 7b 69 31 20 74 31 7d 0a 64 6f 5f 74 65 73  } {i1 t1}.do_tes
1b70: 74 20 74 72 61 6e 73 2d 35 2e 31 32 20 7b 0a 20  t trans-5.12 {. 
1b80: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 42   execsql {.    B
1b90: 45 47 49 4e 20 54 52 41 4e 53 41 43 54 49 4f 4e  EGIN TRANSACTION
1ba0: 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42  ;.    CREATE TAB
1bb0: 4c 45 20 74 32 28 61 20 69 6e 74 2c 20 62 20 69  LE t2(a int, b i
1bc0: 6e 74 2c 20 63 20 69 6e 74 29 3b 0a 20 20 20 20  nt, c int);.    
1bd0: 43 52 45 41 54 45 20 49 4e 44 45 58 20 69 32 61  CREATE INDEX i2a
1be0: 20 4f 4e 20 74 32 28 61 29 3b 0a 20 20 20 20 43   ON t2(a);.    C
1bf0: 52 45 41 54 45 20 49 4e 44 45 58 20 69 32 62 20  REATE INDEX i2b 
1c00: 4f 4e 20 74 32 28 62 29 3b 0a 20 20 20 20 44 52  ON t2(b);.    DR
1c10: 4f 50 20 54 41 42 4c 45 20 74 31 3b 0a 20 20 20  OP TABLE t1;.   
1c20: 20 53 45 4c 45 43 54 20 6e 61 6d 65 20 66 52 4f   SELECT name fRO
1c30: 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20  M sqlite_master 
1c40: 0a 20 20 20 20 57 48 45 52 45 20 74 79 70 65 3d  .    WHERE type=
1c50: 27 74 61 62 6c 65 27 20 4f 52 20 74 79 70 65 3d  'table' OR type=
1c60: 27 69 6e 64 65 78 27 0a 20 20 20 20 4f 52 44 45  'index'.    ORDE
1c70: 52 20 42 59 20 6e 61 6d 65 3b 0a 20 20 7d 0a 7d  R BY name;.  }.}
1c80: 20 7b 69 32 61 20 69 32 62 20 74 32 7d 0a 64 6f   {i2a i2b t2}.do
1c90: 5f 74 65 73 74 20 74 72 61 6e 73 2d 35 2e 31 33  _test trans-5.13
1ca0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
1cb0: 20 20 20 52 4f 4c 4c 42 41 43 4b 3b 0a 20 20 20     ROLLBACK;.   
1cc0: 20 53 45 4c 45 43 54 20 6e 61 6d 65 20 66 52 4f   SELECT name fRO
1cd0: 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20  M sqlite_master 
1ce0: 0a 20 20 20 20 57 48 45 52 45 20 74 79 70 65 3d  .    WHERE type=
1cf0: 27 74 61 62 6c 65 27 20 4f 52 20 74 79 70 65 3d  'table' OR type=
1d00: 27 69 6e 64 65 78 27 0a 20 20 20 20 4f 52 44 45  'index'.    ORDE
1d10: 52 20 42 59 20 6e 61 6d 65 3b 0a 20 20 7d 0a 7d  R BY name;.  }.}
1d20: 20 7b 69 31 20 74 31 7d 0a 64 6f 5f 74 65 73 74   {i1 t1}.do_test
1d30: 20 74 72 61 6e 73 2d 35 2e 31 34 20 7b 0a 20 20   trans-5.14 {.  
1d40: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 42 45  execsql {.    BE
1d50: 47 49 4e 20 54 52 41 4e 53 41 43 54 49 4f 4e 3b  GIN TRANSACTION;
1d60: 0a 20 20 20 20 44 52 4f 50 20 49 4e 44 45 58 20  .    DROP INDEX 
1d70: 69 31 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 6e  i1;.    SELECT n
1d80: 61 6d 65 20 66 52 4f 4d 20 73 71 6c 69 74 65 5f  ame fROM sqlite_
1d90: 6d 61 73 74 65 72 20 0a 20 20 20 20 57 48 45 52  master .    WHER
1da0: 45 20 74 79 70 65 3d 27 74 61 62 6c 65 27 20 4f  E type='table' O
1db0: 52 20 74 79 70 65 3d 27 69 6e 64 65 78 27 0a 20  R type='index'. 
1dc0: 20 20 20 4f 52 44 45 52 20 42 59 20 6e 61 6d 65     ORDER BY name
1dd0: 3b 0a 20 20 7d 0a 7d 20 7b 74 31 7d 0a 64 6f 5f  ;.  }.} {t1}.do_
1de0: 74 65 73 74 20 74 72 61 6e 73 2d 35 2e 31 35 20  test trans-5.15 
1df0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
1e00: 20 20 52 4f 4c 4c 42 41 43 4b 3b 0a 20 20 20 20    ROLLBACK;.    
1e10: 53 45 4c 45 43 54 20 6e 61 6d 65 20 66 52 4f 4d  SELECT name fROM
1e20: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 0a   sqlite_master .
1e30: 20 20 20 20 57 48 45 52 45 20 74 79 70 65 3d 27      WHERE type='
1e40: 74 61 62 6c 65 27 20 4f 52 20 74 79 70 65 3d 27  table' OR type='
1e50: 69 6e 64 65 78 27 0a 20 20 20 20 4f 52 44 45 52  index'.    ORDER
1e60: 20 42 59 20 6e 61 6d 65 3b 0a 20 20 7d 0a 7d 20   BY name;.  }.} 
1e70: 7b 69 31 20 74 31 7d 0a 64 6f 5f 74 65 73 74 20  {i1 t1}.do_test 
1e80: 74 72 61 6e 73 2d 35 2e 31 36 20 7b 0a 20 20 65  trans-5.16 {.  e
1e90: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 42 45 47  xecsql {.    BEG
1ea0: 49 4e 20 54 52 41 4e 53 41 43 54 49 4f 4e 3b 0a  IN TRANSACTION;.
1eb0: 20 20 20 20 44 52 4f 50 20 49 4e 44 45 58 20 69      DROP INDEX i
1ec0: 31 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41  1;.    CREATE TA
1ed0: 42 4c 45 20 74 32 28 78 20 69 6e 74 2c 20 79 20  BLE t2(x int, y 
1ee0: 69 6e 74 2c 20 7a 20 69 6e 74 29 3b 0a 20 20 20  int, z int);.   
1ef0: 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 69 32   CREATE INDEX i2
1f00: 78 20 4f 4e 20 74 32 28 78 29 3b 0a 20 20 20 20  x ON t2(x);.    
1f10: 43 52 45 41 54 45 20 49 4e 44 45 58 20 69 32 79  CREATE INDEX i2y
1f20: 20 4f 4e 20 74 32 28 79 29 3b 0a 20 20 20 20 49   ON t2(y);.    I
1f30: 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41  NSERT INTO t2 VA
1f40: 4c 55 45 53 28 31 2c 32 2c 33 29 3b 0a 20 20 20  LUES(1,2,3);.   
1f50: 20 53 45 4c 45 43 54 20 6e 61 6d 65 20 66 52 4f   SELECT name fRO
1f60: 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20  M sqlite_master 
1f70: 0a 20 20 20 20 57 48 45 52 45 20 74 79 70 65 3d  .    WHERE type=
1f80: 27 74 61 62 6c 65 27 20 4f 52 20 74 79 70 65 3d  'table' OR type=
1f90: 27 69 6e 64 65 78 27 0a 20 20 20 20 4f 52 44 45  'index'.    ORDE
1fa0: 52 20 42 59 20 6e 61 6d 65 3b 0a 20 20 7d 0a 7d  R BY name;.  }.}
1fb0: 20 7b 69 32 78 20 69 32 79 20 74 31 20 74 32 7d   {i2x i2y t1 t2}
1fc0: 0a 64 6f 5f 74 65 73 74 20 74 72 61 6e 73 2d 35  .do_test trans-5
1fd0: 2e 31 37 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  .17 {.  execsql 
1fe0: 7b 0a 20 20 20 20 43 4f 4d 4d 49 54 3b 0a 20 20  {.    COMMIT;.  
1ff0: 20 20 53 45 4c 45 43 54 20 6e 61 6d 65 20 66 52    SELECT name fR
2000: 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  OM sqlite_master
2010: 20 0a 20 20 20 20 57 48 45 52 45 20 74 79 70 65   .    WHERE type
2020: 3d 27 74 61 62 6c 65 27 20 4f 52 20 74 79 70 65  ='table' OR type
2030: 3d 27 69 6e 64 65 78 27 0a 20 20 20 20 4f 52 44  ='index'.    ORD
2040: 45 52 20 42 59 20 6e 61 6d 65 3b 0a 20 20 7d 0a  ER BY name;.  }.
2050: 7d 20 7b 69 32 78 20 69 32 79 20 74 31 20 74 32  } {i2x i2y t1 t2
2060: 7d 0a 64 6f 5f 74 65 73 74 20 74 72 61 6e 73 2d  }.do_test trans-
2070: 35 2e 31 38 20 7b 0a 20 20 65 78 65 63 73 71 6c  5.18 {.  execsql
2080: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20   {.    SELECT * 
2090: 46 52 4f 4d 20 74 32 3b 0a 20 20 7d 0a 7d 20 7b  FROM t2;.  }.} {
20a0: 31 20 32 20 33 7d 0a 64 6f 5f 74 65 73 74 20 74  1 2 3}.do_test t
20b0: 72 61 6e 73 2d 35 2e 31 39 20 7b 0a 20 20 65 78  rans-5.19 {.  ex
20c0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45  ecsql {.    SELE
20d0: 43 54 20 78 20 46 52 4f 4d 20 74 32 20 57 48 45  CT x FROM t2 WHE
20e0: 52 45 20 79 3d 32 3b 0a 20 20 7d 0a 7d 20 7b 31  RE y=2;.  }.} {1
20f0: 7d 0a 64 6f 5f 74 65 73 74 20 74 72 61 6e 73 2d  }.do_test trans-
2100: 35 2e 32 30 20 7b 0a 20 20 65 78 65 63 73 71 6c  5.20 {.  execsql
2110: 20 7b 0a 20 20 20 20 42 45 47 49 4e 20 54 52 41   {.    BEGIN TRA
2120: 4e 53 41 43 54 49 4f 4e 3b 0a 20 20 20 20 44 52  NSACTION;.    DR
2130: 4f 50 20 54 41 42 4c 45 20 74 31 3b 0a 20 20 20  OP TABLE t1;.   
2140: 20 44 52 4f 50 20 54 41 42 4c 45 20 74 32 3b 0a   DROP TABLE t2;.
2150: 20 20 20 20 53 45 4c 45 43 54 20 6e 61 6d 65 20      SELECT name 
2160: 66 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74  fROM sqlite_mast
2170: 65 72 20 0a 20 20 20 20 57 48 45 52 45 20 74 79  er .    WHERE ty
2180: 70 65 3d 27 74 61 62 6c 65 27 20 4f 52 20 74 79  pe='table' OR ty
2190: 70 65 3d 27 69 6e 64 65 78 27 0a 20 20 20 20 4f  pe='index'.    O
21a0: 52 44 45 52 20 42 59 20 6e 61 6d 65 3b 0a 20 20  RDER BY name;.  
21b0: 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 74  }.} {}.do_test t
21c0: 72 61 6e 73 2d 35 2e 32 31 20 7b 0a 20 20 73 65  rans-5.21 {.  se
21d0: 74 20 72 20 5b 63 61 74 63 68 20 7b 65 78 65 63  t r [catch {exec
21e0: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
21f0: 20 2a 20 46 52 4f 4d 20 74 32 0a 20 20 7d 7d 20   * FROM t2.  }} 
2200: 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20 72  msg].  lappend r
2210: 20 24 6d 73 67 0a 7d 20 7b 31 20 7b 6e 6f 20 73   $msg.} {1 {no s
2220: 75 63 68 20 74 61 62 6c 65 3a 20 74 32 7d 7d 0a  uch table: t2}}.
2230: 64 6f 5f 74 65 73 74 20 74 72 61 6e 73 2d 35 2e  do_test trans-5.
2240: 32 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  22 {.  execsql {
2250: 0a 20 20 20 20 52 4f 4c 4c 42 41 43 4b 3b 0a 20  .    ROLLBACK;. 
2260: 20 20 20 53 45 4c 45 43 54 20 6e 61 6d 65 20 66     SELECT name f
2270: 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
2280: 72 20 0a 20 20 20 20 57 48 45 52 45 20 74 79 70  r .    WHERE typ
2290: 65 3d 27 74 61 62 6c 65 27 20 4f 52 20 74 79 70  e='table' OR typ
22a0: 65 3d 27 69 6e 64 65 78 27 0a 20 20 20 20 4f 52  e='index'.    OR
22b0: 44 45 52 20 42 59 20 6e 61 6d 65 3b 0a 20 20 7d  DER BY name;.  }
22c0: 0a 7d 20 7b 69 32 78 20 69 32 79 20 74 31 20 74  .} {i2x i2y t1 t
22d0: 32 7d 0a 64 6f 5f 74 65 73 74 20 74 72 61 6e 73  2}.do_test trans
22e0: 2d 35 2e 32 33 20 7b 0a 20 20 65 78 65 63 73 71  -5.23 {.  execsq
22f0: 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a  l {.    SELECT *
2300: 20 46 52 4f 4d 20 74 32 3b 0a 20 20 7d 0a 7d 20   FROM t2;.  }.} 
2310: 7b 31 20 32 20 33 7d 0a 0a 23 20 54 72 79 20 74  {1 2 3}..# Try t
2320: 6f 20 44 52 4f 50 20 61 6e 64 20 43 52 45 41 54  o DROP and CREAT
2330: 45 20 74 61 62 6c 65 73 20 61 6e 64 20 69 6e 64  E tables and ind
2340: 69 63 65 73 20 77 69 74 68 20 74 68 65 20 73 61  ices with the sa
2350: 6d 65 20 6e 61 6d 65 0a 23 20 77 69 74 68 69 6e  me name.# within
2360: 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20   a transaction. 
2370: 20 4d 61 6b 65 20 73 75 72 65 20 52 4f 4c 4c 42   Make sure ROLLB
2380: 41 43 4b 20 77 6f 72 6b 73 2e 0a 23 0a 64 6f 5f  ACK works..#.do_
2390: 74 65 73 74 20 74 72 61 6e 73 2d 36 2e 31 20 7b  test trans-6.1 {
23a0: 0a 20 20 65 78 65 63 73 71 6c 32 20 7b 0a 20 20  .  execsql2 {.  
23b0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
23c0: 20 56 41 4c 55 45 53 28 31 2c 32 2c 33 29 3b 0a   VALUES(1,2,3);.
23d0: 20 20 20 20 42 45 47 49 4e 20 54 52 41 4e 53 41      BEGIN TRANSA
23e0: 43 54 49 4f 4e 3b 0a 20 20 20 20 44 52 4f 50 20  CTION;.    DROP 
23f0: 54 41 42 4c 45 20 74 31 3b 0a 20 20 20 20 43 52  TABLE t1;.    CR
2400: 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 70 2c  EATE TABLE t1(p,
2410: 71 2c 72 29 3b 0a 20 20 20 20 52 4f 4c 4c 42 41  q,r);.    ROLLBA
2420: 43 4b 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a  CK;.    SELECT *
2430: 20 46 52 4f 4d 20 74 31 3b 0a 20 20 7d 0a 7d 20   FROM t1;.  }.} 
2440: 7b 61 20 31 20 62 20 32 20 63 20 33 7d 0a 64 6f  {a 1 b 2 c 3}.do
2450: 5f 74 65 73 74 20 74 72 61 6e 73 2d 36 2e 32 20  _test trans-6.2 
2460: 7b 0a 20 20 65 78 65 63 73 71 6c 32 20 7b 0a 20  {.  execsql2 {. 
2470: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
2480: 31 20 56 41 4c 55 45 53 28 31 2c 32 2c 33 29 3b  1 VALUES(1,2,3);
2490: 0a 20 20 20 20 42 45 47 49 4e 20 54 52 41 4e 53  .    BEGIN TRANS
24a0: 41 43 54 49 4f 4e 3b 0a 20 20 20 20 44 52 4f 50  ACTION;.    DROP
24b0: 20 54 41 42 4c 45 20 74 31 3b 0a 20 20 20 20 43   TABLE t1;.    C
24c0: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 70  REATE TABLE t1(p
24d0: 2c 71 2c 72 29 3b 0a 20 20 20 20 43 4f 4d 4d 49  ,q,r);.    COMMI
24e0: 54 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20  T;.    SELECT * 
24f0: 46 52 4f 4d 20 74 31 3b 0a 20 20 7d 0a 7d 20 7b  FROM t1;.  }.} {
2500: 7d 0a 64 6f 5f 74 65 73 74 20 74 72 61 6e 73 2d  }.do_test trans-
2510: 36 2e 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 32  6.3 {.  execsql2
2520: 20 7b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e   {.    INSERT IN
2530: 54 4f 20 74 31 20 56 41 4c 55 45 53 28 31 2c 32  TO t1 VALUES(1,2
2540: 2c 33 29 3b 0a 20 20 20 20 53 45 4c 45 43 54 20  ,3);.    SELECT 
2550: 2a 20 46 52 4f 4d 20 74 31 3b 0a 20 20 7d 0a 7d  * FROM t1;.  }.}
2560: 20 7b 70 20 31 20 71 20 32 20 72 20 33 7d 0a 64   {p 1 q 2 r 3}.d
2570: 6f 5f 74 65 73 74 20 74 72 61 6e 73 2d 36 2e 34  o_test trans-6.4
2580: 20 7b 0a 20 20 65 78 65 63 73 71 6c 32 20 7b 0a   {.  execsql2 {.
2590: 20 20 20 20 42 45 47 49 4e 20 54 52 41 4e 53 41      BEGIN TRANSA
25a0: 43 54 49 4f 4e 3b 0a 20 20 20 20 44 52 4f 50 20  CTION;.    DROP 
25b0: 54 41 42 4c 45 20 74 31 3b 0a 20 20 20 20 43 52  TABLE t1;.    CR
25c0: 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 61 2c  EATE TABLE t1(a,
25d0: 62 2c 63 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  b,c);.    INSERT
25e0: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
25f0: 34 2c 35 2c 36 29 3b 0a 20 20 20 20 53 45 4c 45  4,5,6);.    SELE
2600: 43 54 20 2a 20 46 52 4f 4d 20 74 31 3b 0a 20 20  CT * FROM t1;.  
2610: 20 20 44 52 4f 50 20 54 41 42 4c 45 20 74 31 3b    DROP TABLE t1;
2620: 0a 20 20 7d 0a 7d 20 7b 61 20 34 20 62 20 35 20  .  }.} {a 4 b 5 
2630: 63 20 36 7d 0a 64 6f 5f 74 65 73 74 20 74 72 61  c 6}.do_test tra
2640: 6e 73 2d 36 2e 35 20 7b 0a 20 20 65 78 65 63 73  ns-6.5 {.  execs
2650: 71 6c 32 20 7b 0a 20 20 20 20 52 4f 4c 4c 42 41  ql2 {.    ROLLBA
2660: 43 4b 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a  CK;.    SELECT *
2670: 20 46 52 4f 4d 20 74 31 3b 0a 20 20 7d 0a 7d 20   FROM t1;.  }.} 
2680: 7b 70 20 31 20 71 20 32 20 72 20 33 7d 0a 64 6f  {p 1 q 2 r 3}.do
2690: 5f 74 65 73 74 20 74 72 61 6e 73 2d 36 2e 36 20  _test trans-6.6 
26a0: 7b 0a 20 20 65 78 65 63 73 71 6c 32 20 7b 0a 20  {.  execsql2 {. 
26b0: 20 20 20 42 45 47 49 4e 20 54 52 41 4e 53 41 43     BEGIN TRANSAC
26c0: 54 49 4f 4e 3b 0a 20 20 20 20 44 52 4f 50 20 54  TION;.    DROP T
26d0: 41 42 4c 45 20 74 31 3b 0a 20 20 20 20 43 52 45  ABLE t1;.    CRE
26e0: 41 54 45 20 54 41 42 4c 45 20 74 31 28 61 2c 62  ATE TABLE t1(a,b
26f0: 2c 63 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20  ,c);.    INSERT 
2700: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 34  INTO t1 VALUES(4
2710: 2c 35 2c 36 29 3b 0a 20 20 20 20 53 45 4c 45 43  ,5,6);.    SELEC
2720: 54 20 2a 20 46 52 4f 4d 20 74 31 3b 0a 20 20 20  T * FROM t1;.   
2730: 20 44 52 4f 50 20 54 41 42 4c 45 20 74 31 3b 0a   DROP TABLE t1;.
2740: 20 20 7d 0a 7d 20 7b 61 20 34 20 62 20 35 20 63    }.} {a 4 b 5 c
2750: 20 36 7d 0a 64 6f 5f 74 65 73 74 20 74 72 61 6e   6}.do_test tran
2760: 73 2d 36 2e 37 20 7b 0a 20 20 63 61 74 63 68 73  s-6.7 {.  catchs
2770: 71 6c 20 7b 0a 20 20 20 20 43 4f 4d 4d 49 54 3b  ql {.    COMMIT;
2780: 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52  .    SELECT * FR
2790: 4f 4d 20 74 31 3b 0a 20 20 7d 0a 7d 20 7b 31 20  OM t1;.  }.} {1 
27a0: 7b 6e 6f 20 73 75 63 68 20 74 61 62 6c 65 3a 20  {no such table: 
27b0: 74 31 7d 7d 0a 0a 23 20 52 65 70 65 61 74 20 6f  t1}}..# Repeat o
27c0: 6e 20 61 20 74 61 62 6c 65 20 77 69 74 68 20 61  n a table with a
27d0: 6e 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  n automatically 
27e0: 67 65 6e 65 72 61 74 65 64 20 69 6e 64 65 78 2e  generated index.
27f0: 0a 23 0a 64 6f 5f 74 65 73 74 20 74 72 61 6e 73  .#.do_test trans
2800: 2d 36 2e 31 30 20 7b 0a 20 20 65 78 65 63 73 71  -6.10 {.  execsq
2810: 6c 32 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20  l2 {.    CREATE 
2820: 54 41 42 4c 45 20 74 31 28 61 20 75 6e 69 71 75  TABLE t1(a uniqu
2830: 65 2c 62 2c 63 29 3b 0a 20 20 20 20 49 4e 53 45  e,b,c);.    INSE
2840: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
2850: 53 28 31 2c 32 2c 33 29 3b 0a 20 20 20 20 42 45  S(1,2,3);.    BE
2860: 47 49 4e 20 54 52 41 4e 53 41 43 54 49 4f 4e 3b  GIN TRANSACTION;
2870: 0a 20 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20  .    DROP TABLE 
2880: 74 31 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54  t1;.    CREATE T
2890: 41 42 4c 45 20 74 31 28 70 20 75 6e 69 71 75 65  ABLE t1(p unique
28a0: 2c 71 2c 72 29 3b 0a 20 20 20 20 52 4f 4c 4c 42  ,q,r);.    ROLLB
28b0: 41 43 4b 3b 0a 20 20 20 20 53 45 4c 45 43 54 20  ACK;.    SELECT 
28c0: 2a 20 46 52 4f 4d 20 74 31 3b 0a 20 20 7d 0a 7d  * FROM t1;.  }.}
28d0: 20 7b 61 20 31 20 62 20 32 20 63 20 33 7d 0a 64   {a 1 b 2 c 3}.d
28e0: 6f 5f 74 65 73 74 20 74 72 61 6e 73 2d 36 2e 31  o_test trans-6.1
28f0: 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 32 20 7b  1 {.  execsql2 {
2900: 0a 20 20 20 20 42 45 47 49 4e 20 54 52 41 4e 53  .    BEGIN TRANS
2910: 41 43 54 49 4f 4e 3b 0a 20 20 20 20 44 52 4f 50  ACTION;.    DROP
2920: 20 54 41 42 4c 45 20 74 31 3b 0a 20 20 20 20 43   TABLE t1;.    C
2930: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 70  REATE TABLE t1(p
2940: 20 75 6e 69 71 75 65 2c 71 2c 72 29 3b 0a 20 20   unique,q,r);.  
2950: 20 20 43 4f 4d 4d 49 54 3b 0a 20 20 20 20 53 45    COMMIT;.    SE
2960: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 3b 0a  LECT * FROM t1;.
2970: 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74    }.} {}.do_test
2980: 20 74 72 61 6e 73 2d 36 2e 31 32 20 7b 0a 20 20   trans-6.12 {.  
2990: 65 78 65 63 73 71 6c 32 20 7b 0a 20 20 20 20 49  execsql2 {.    I
29a0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41  NSERT INTO t1 VA
29b0: 4c 55 45 53 28 31 2c 32 2c 33 29 3b 0a 20 20 20  LUES(1,2,3);.   
29c0: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
29d0: 31 3b 0a 20 20 7d 0a 7d 20 7b 70 20 31 20 71 20  1;.  }.} {p 1 q 
29e0: 32 20 72 20 33 7d 0a 64 6f 5f 74 65 73 74 20 74  2 r 3}.do_test t
29f0: 72 61 6e 73 2d 36 2e 31 33 20 7b 0a 20 20 65 78  rans-6.13 {.  ex
2a00: 65 63 73 71 6c 32 20 7b 0a 20 20 20 20 42 45 47  ecsql2 {.    BEG
2a10: 49 4e 20 54 52 41 4e 53 41 43 54 49 4f 4e 3b 0a  IN TRANSACTION;.
2a20: 20 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20 74      DROP TABLE t
2a30: 31 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41  1;.    CREATE TA
2a40: 42 4c 45 20 74 31 28 61 20 75 6e 69 71 75 65 2c  BLE t1(a unique,
2a50: 62 2c 63 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  b,c);.    INSERT
2a60: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
2a70: 34 2c 35 2c 36 29 3b 0a 20 20 20 20 53 45 4c 45  4,5,6);.    SELE
2a80: 43 54 20 2a 20 46 52 4f 4d 20 74 31 3b 0a 20 20  CT * FROM t1;.  
2a90: 20 20 44 52 4f 50 20 54 41 42 4c 45 20 74 31 3b    DROP TABLE t1;
2aa0: 0a 20 20 7d 0a 7d 20 7b 61 20 34 20 62 20 35 20  .  }.} {a 4 b 5 
2ab0: 63 20 36 7d 0a 64 6f 5f 74 65 73 74 20 74 72 61  c 6}.do_test tra
2ac0: 6e 73 2d 36 2e 31 34 20 7b 0a 20 20 65 78 65 63  ns-6.14 {.  exec
2ad0: 73 71 6c 32 20 7b 0a 20 20 20 20 52 4f 4c 4c 42  sql2 {.    ROLLB
2ae0: 41 43 4b 3b 0a 20 20 20 20 53 45 4c 45 43 54 20  ACK;.    SELECT 
2af0: 2a 20 46 52 4f 4d 20 74 31 3b 0a 20 20 7d 0a 7d  * FROM t1;.  }.}
2b00: 20 7b 70 20 31 20 71 20 32 20 72 20 33 7d 0a 64   {p 1 q 2 r 3}.d
2b10: 6f 5f 74 65 73 74 20 74 72 61 6e 73 2d 36 2e 31  o_test trans-6.1
2b20: 35 20 7b 0a 20 20 65 78 65 63 73 71 6c 32 20 7b  5 {.  execsql2 {
2b30: 0a 20 20 20 20 42 45 47 49 4e 20 54 52 41 4e 53  .    BEGIN TRANS
2b40: 41 43 54 49 4f 4e 3b 0a 20 20 20 20 44 52 4f 50  ACTION;.    DROP
2b50: 20 54 41 42 4c 45 20 74 31 3b 0a 20 20 20 20 43   TABLE t1;.    C
2b60: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 61  REATE TABLE t1(a
2b70: 20 75 6e 69 71 75 65 2c 62 2c 63 29 3b 0a 20 20   unique,b,c);.  
2b80: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
2b90: 20 56 41 4c 55 45 53 28 34 2c 35 2c 36 29 3b 0a   VALUES(4,5,6);.
2ba0: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
2bb0: 4d 20 74 31 3b 0a 20 20 20 20 44 52 4f 50 20 54  M t1;.    DROP T
2bc0: 41 42 4c 45 20 74 31 3b 0a 20 20 7d 0a 7d 20 7b  ABLE t1;.  }.} {
2bd0: 61 20 34 20 62 20 35 20 63 20 36 7d 0a 64 6f 5f  a 4 b 5 c 6}.do_
2be0: 74 65 73 74 20 74 72 61 6e 73 2d 36 2e 31 36 20  test trans-6.16 
2bf0: 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20  {.  catchsql {. 
2c00: 20 20 20 43 4f 4d 4d 49 54 3b 0a 20 20 20 20 53     COMMIT;.    S
2c10: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 3b  ELECT * FROM t1;
2c20: 0a 20 20 7d 0a 7d 20 7b 31 20 7b 6e 6f 20 73 75  .  }.} {1 {no su
2c30: 63 68 20 74 61 62 6c 65 3a 20 74 31 7d 7d 0a 0a  ch table: t1}}..
2c40: 64 6f 5f 74 65 73 74 20 74 72 61 6e 73 2d 36 2e  do_test trans-6.
2c50: 32 30 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  20 {.  execsql {
2c60: 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  .    CREATE TABL
2c70: 45 20 74 31 28 61 20 69 6e 74 65 67 65 72 20 70  E t1(a integer p
2c80: 72 69 6d 61 72 79 20 6b 65 79 2c 62 2c 63 29 3b  rimary key,b,c);
2c90: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
2ca0: 20 74 31 20 56 41 4c 55 45 53 28 31 2c 2d 32 2c   t1 VALUES(1,-2,
2cb0: 2d 33 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20  -3);.    INSERT 
2cc0: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 34  INTO t1 VALUES(4
2cd0: 2c 2d 35 2c 2d 36 29 3b 0a 20 20 20 20 53 45 4c  ,-5,-6);.    SEL
2ce0: 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 3b 0a 20  ECT * FROM t1;. 
2cf0: 20 7d 0a 7d 20 7b 31 20 2d 32 20 2d 33 20 34 20   }.} {1 -2 -3 4 
2d00: 2d 35 20 2d 36 7d 0a 64 6f 5f 74 65 73 74 20 74  -5 -6}.do_test t
2d10: 72 61 6e 73 2d 36 2e 32 31 20 7b 0a 20 20 65 78  rans-6.21 {.  ex
2d20: 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41  ecsql {.    CREA
2d30: 54 45 20 49 4e 44 45 58 20 69 31 20 4f 4e 20 74  TE INDEX i1 ON t
2d40: 31 28 62 29 3b 0a 20 20 20 20 53 45 4c 45 43 54  1(b);.    SELECT
2d50: 20 2a 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45   * FROM t1 WHERE
2d60: 20 62 3c 31 3b 0a 20 20 7d 0a 7d 20 7b 34 20 2d   b<1;.  }.} {4 -
2d70: 35 20 2d 36 20 31 20 2d 32 20 2d 33 7d 0a 64 6f  5 -6 1 -2 -3}.do
2d80: 5f 74 65 73 74 20 74 72 61 6e 73 2d 36 2e 32 32  _test trans-6.22
2d90: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
2da0: 20 20 20 42 45 47 49 4e 20 54 52 41 4e 53 41 43     BEGIN TRANSAC
2db0: 54 49 4f 4e 3b 0a 20 20 20 20 44 52 4f 50 20 49  TION;.    DROP I
2dc0: 4e 44 45 58 20 69 31 3b 0a 20 20 20 20 53 45 4c  NDEX i1;.    SEL
2dd0: 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 57 48  ECT * FROM t1 WH
2de0: 45 52 45 20 62 3c 31 3b 0a 20 20 20 20 52 4f 4c  ERE b<1;.    ROL
2df0: 4c 42 41 43 4b 3b 0a 20 20 7d 0a 7d 20 7b 31 20  LBACK;.  }.} {1 
2e00: 2d 32 20 2d 33 20 34 20 2d 35 20 2d 36 7d 0a 64  -2 -3 4 -5 -6}.d
2e10: 6f 5f 74 65 73 74 20 74 72 61 6e 73 2d 36 2e 32  o_test trans-6.2
2e20: 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  3 {.  execsql {.
2e30: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
2e40: 4d 20 74 31 20 57 48 45 52 45 20 62 3c 31 3b 0a  M t1 WHERE b<1;.
2e50: 20 20 7d 0a 7d 20 7b 34 20 2d 35 20 2d 36 20 31    }.} {4 -5 -6 1
2e60: 20 2d 32 20 2d 33 7d 0a 64 6f 5f 74 65 73 74 20   -2 -3}.do_test 
2e70: 74 72 61 6e 73 2d 36 2e 32 34 20 7b 0a 20 20 65  trans-6.24 {.  e
2e80: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 42 45 47  xecsql {.    BEG
2e90: 49 4e 20 54 52 41 4e 53 41 43 54 49 4f 4e 3b 0a  IN TRANSACTION;.
2ea0: 20 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20 74      DROP TABLE t
2eb0: 31 3b 0a 20 20 20 20 52 4f 4c 4c 42 41 43 4b 3b  1;.    ROLLBACK;
2ec0: 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52  .    SELECT * FR
2ed0: 4f 4d 20 74 31 20 57 48 45 52 45 20 62 3c 31 3b  OM t1 WHERE b<1;
2ee0: 0a 20 20 7d 0a 7d 20 7b 34 20 2d 35 20 2d 36 20  .  }.} {4 -5 -6 
2ef0: 31 20 2d 32 20 2d 33 7d 0a 0a 64 6f 5f 74 65 73  1 -2 -3}..do_tes
2f00: 74 20 74 72 61 6e 73 2d 36 2e 32 35 20 7b 0a 20  t trans-6.25 {. 
2f10: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 42   execsql {.    B
2f20: 45 47 49 4e 20 54 52 41 4e 53 41 43 54 49 4f 4e  EGIN TRANSACTION
2f30: 3b 0a 20 20 20 20 44 52 4f 50 20 49 4e 44 45 58  ;.    DROP INDEX
2f40: 20 69 31 3b 0a 20 20 20 20 43 52 45 41 54 45 20   i1;.    CREATE 
2f50: 49 4e 44 45 58 20 69 31 20 4f 4e 20 74 31 28 63  INDEX i1 ON t1(c
2f60: 29 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20  );.    SELECT * 
2f70: 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 62 3c  FROM t1 WHERE b<
2f80: 31 3b 0a 20 20 7d 0a 7d 20 7b 31 20 2d 32 20 2d  1;.  }.} {1 -2 -
2f90: 33 20 34 20 2d 35 20 2d 36 7d 0a 64 6f 5f 74 65  3 4 -5 -6}.do_te
2fa0: 73 74 20 74 72 61 6e 73 2d 36 2e 32 36 20 7b 0a  st trans-6.26 {.
2fb0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
2fc0: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31  SELECT * FROM t1
2fd0: 20 57 48 45 52 45 20 63 3c 31 3b 0a 20 20 7d 0a   WHERE c<1;.  }.
2fe0: 7d 20 7b 34 20 2d 35 20 2d 36 20 31 20 2d 32 20  } {4 -5 -6 1 -2 
2ff0: 2d 33 7d 0a 64 6f 5f 74 65 73 74 20 74 72 61 6e  -3}.do_test tran
3000: 73 2d 36 2e 32 37 20 7b 0a 20 20 65 78 65 63 73  s-6.27 {.  execs
3010: 71 6c 20 7b 0a 20 20 20 20 52 4f 4c 4c 42 41 43  ql {.    ROLLBAC
3020: 4b 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20  K;.    SELECT * 
3030: 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 62 3c  FROM t1 WHERE b<
3040: 31 3b 0a 20 20 7d 0a 7d 20 7b 34 20 2d 35 20 2d  1;.  }.} {4 -5 -
3050: 36 20 31 20 2d 32 20 2d 33 7d 0a 64 6f 5f 74 65  6 1 -2 -3}.do_te
3060: 73 74 20 74 72 61 6e 73 2d 36 2e 32 38 20 7b 0a  st trans-6.28 {.
3070: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
3080: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31  SELECT * FROM t1
3090: 20 57 48 45 52 45 20 63 3c 31 3b 0a 20 20 7d 0a   WHERE c<1;.  }.
30a0: 7d 20 7b 31 20 2d 32 20 2d 33 20 34 20 2d 35 20  } {1 -2 -3 4 -5 
30b0: 2d 36 7d 0a 0a 23 20 54 68 65 20 66 6f 6c 6c 6f  -6}..# The follo
30c0: 77 69 6e 67 20 72 65 70 65 61 74 73 20 73 74 65  wing repeats ste
30d0: 70 73 20 36 2e 32 30 20 74 68 72 6f 75 67 68 20  ps 6.20 through 
30e0: 36 2e 32 38 2c 20 62 75 74 20 70 75 74 73 20 61  6.28, but puts a
30f0: 20 22 75 6e 69 71 75 65 22 0a 23 20 63 6f 6e 73   "unique".# cons
3100: 74 72 61 69 6e 74 20 74 68 65 20 66 69 72 73 74  traint the first
3110: 20 66 69 65 6c 64 20 6f 66 20 74 68 65 20 74 61   field of the ta
3120: 62 6c 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  ble in order to 
3130: 67 65 6e 65 72 61 74 65 20 61 6e 0a 23 20 61 75  generate an.# au
3140: 74 6f 6d 61 74 69 63 20 69 6e 64 65 78 2e 0a 23  tomatic index..#
3150: 0a 64 6f 5f 74 65 73 74 20 74 72 61 6e 73 2d 36  .do_test trans-6
3160: 2e 33 30 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  .30 {.  execsql 
3170: 7b 0a 20 20 20 20 42 45 47 49 4e 20 54 52 41 4e  {.    BEGIN TRAN
3180: 53 41 43 54 49 4f 4e 3b 0a 20 20 20 20 44 52 4f  SACTION;.    DRO
3190: 50 20 54 41 42 4c 45 20 74 31 3b 0a 20 20 20 20  P TABLE t1;.    
31a0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28  CREATE TABLE t1(
31b0: 61 20 69 6e 74 20 75 6e 69 71 75 65 2c 62 2c 63  a int unique,b,c
31c0: 29 3b 0a 20 20 20 20 43 4f 4d 4d 49 54 3b 0a 20  );.    COMMIT;. 
31d0: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
31e0: 31 20 56 41 4c 55 45 53 28 31 2c 2d 32 2c 2d 33  1 VALUES(1,-2,-3
31f0: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
3200: 54 4f 20 74 31 20 56 41 4c 55 45 53 28 34 2c 2d  TO t1 VALUES(4,-
3210: 35 2c 2d 36 29 3b 0a 20 20 20 20 53 45 4c 45 43  5,-6);.    SELEC
3220: 54 20 2a 20 46 52 4f 4d 20 74 31 20 4f 52 44 45  T * FROM t1 ORDE
3230: 52 20 42 59 20 61 3b 0a 20 20 7d 0a 7d 20 7b 31  R BY a;.  }.} {1
3240: 20 2d 32 20 2d 33 20 34 20 2d 35 20 2d 36 7d 0a   -2 -3 4 -5 -6}.
3250: 64 6f 5f 74 65 73 74 20 74 72 61 6e 73 2d 36 2e  do_test trans-6.
3260: 33 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  31 {.  execsql {
3270: 0a 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45  .    CREATE INDE
3280: 58 20 69 31 20 4f 4e 20 74 31 28 62 29 3b 0a 20  X i1 ON t1(b);. 
3290: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
32a0: 20 74 31 20 57 48 45 52 45 20 62 3c 31 3b 0a 20   t1 WHERE b<1;. 
32b0: 20 7d 0a 7d 20 7b 34 20 2d 35 20 2d 36 20 31 20   }.} {4 -5 -6 1 
32c0: 2d 32 20 2d 33 7d 0a 64 6f 5f 74 65 73 74 20 74  -2 -3}.do_test t
32d0: 72 61 6e 73 2d 36 2e 33 32 20 7b 0a 20 20 65 78  rans-6.32 {.  ex
32e0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 42 45 47 49  ecsql {.    BEGI
32f0: 4e 20 54 52 41 4e 53 41 43 54 49 4f 4e 3b 0a 20  N TRANSACTION;. 
3300: 20 20 20 44 52 4f 50 20 49 4e 44 45 58 20 69 31     DROP INDEX i1
3310: 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  ;.    SELECT * F
3320: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 62 3c 31  ROM t1 WHERE b<1
3330: 3b 0a 20 20 20 20 52 4f 4c 4c 42 41 43 4b 3b 0a  ;.    ROLLBACK;.
3340: 20 20 7d 0a 7d 20 7b 31 20 2d 32 20 2d 33 20 34    }.} {1 -2 -3 4
3350: 20 2d 35 20 2d 36 7d 0a 64 6f 5f 74 65 73 74 20   -5 -6}.do_test 
3360: 74 72 61 6e 73 2d 36 2e 33 33 20 7b 0a 20 20 65  trans-6.33 {.  e
3370: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c  xecsql {.    SEL
3380: 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 57 48  ECT * FROM t1 WH
3390: 45 52 45 20 62 3c 31 3b 0a 20 20 7d 0a 7d 20 7b  ERE b<1;.  }.} {
33a0: 34 20 2d 35 20 2d 36 20 31 20 2d 32 20 2d 33 7d  4 -5 -6 1 -2 -3}
33b0: 0a 64 6f 5f 74 65 73 74 20 74 72 61 6e 73 2d 36  .do_test trans-6
33c0: 2e 33 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  .34 {.  execsql 
33d0: 7b 0a 20 20 20 20 42 45 47 49 4e 20 54 52 41 4e  {.    BEGIN TRAN
33e0: 53 41 43 54 49 4f 4e 3b 0a 20 20 20 20 44 52 4f  SACTION;.    DRO
33f0: 50 20 54 41 42 4c 45 20 74 31 3b 0a 20 20 20 20  P TABLE t1;.    
3400: 52 4f 4c 4c 42 41 43 4b 3b 0a 20 20 20 20 53 45  ROLLBACK;.    SE
3410: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 57  LECT * FROM t1 W
3420: 48 45 52 45 20 62 3c 31 3b 0a 20 20 7d 0a 7d 20  HERE b<1;.  }.} 
3430: 7b 34 20 2d 35 20 2d 36 20 31 20 2d 32 20 2d 33  {4 -5 -6 1 -2 -3
3440: 7d 0a 0a 64 6f 5f 74 65 73 74 20 74 72 61 6e 73  }..do_test trans
3450: 2d 36 2e 33 35 20 7b 0a 20 20 65 78 65 63 73 71  -6.35 {.  execsq
3460: 6c 20 7b 0a 20 20 20 20 42 45 47 49 4e 20 54 52  l {.    BEGIN TR
3470: 41 4e 53 41 43 54 49 4f 4e 3b 0a 20 20 20 20 44  ANSACTION;.    D
3480: 52 4f 50 20 49 4e 44 45 58 20 69 31 3b 0a 20 20  ROP INDEX i1;.  
3490: 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 69    CREATE INDEX i
34a0: 31 20 4f 4e 20 74 31 28 63 29 3b 0a 20 20 20 20  1 ON t1(c);.    
34b0: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31  SELECT * FROM t1
34c0: 20 57 48 45 52 45 20 62 3c 31 3b 0a 20 20 7d 0a   WHERE b<1;.  }.
34d0: 7d 20 7b 31 20 2d 32 20 2d 33 20 34 20 2d 35 20  } {1 -2 -3 4 -5 
34e0: 2d 36 7d 0a 64 6f 5f 74 65 73 74 20 74 72 61 6e  -6}.do_test tran
34f0: 73 2d 36 2e 33 36 20 7b 0a 20 20 65 78 65 63 73  s-6.36 {.  execs
3500: 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  ql {.    SELECT 
3510: 2a 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  * FROM t1 WHERE 
3520: 63 3c 31 3b 0a 20 20 7d 0a 7d 20 7b 34 20 2d 35  c<1;.  }.} {4 -5
3530: 20 2d 36 20 31 20 2d 32 20 2d 33 7d 0a 64 6f 5f   -6 1 -2 -3}.do_
3540: 74 65 73 74 20 74 72 61 6e 73 2d 36 2e 33 37 20  test trans-6.37 
3550: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
3560: 20 20 44 52 4f 50 20 49 4e 44 45 58 20 69 31 3b    DROP INDEX i1;
3570: 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52  .    SELECT * FR
3580: 4f 4d 20 74 31 20 57 48 45 52 45 20 63 3c 31 3b  OM t1 WHERE c<1;
3590: 0a 20 20 7d 0a 7d 20 7b 31 20 2d 32 20 2d 33 20  .  }.} {1 -2 -3 
35a0: 34 20 2d 35 20 2d 36 7d 0a 64 6f 5f 74 65 73 74  4 -5 -6}.do_test
35b0: 20 74 72 61 6e 73 2d 36 2e 33 38 20 7b 0a 20 20   trans-6.38 {.  
35c0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 52 4f  execsql {.    RO
35d0: 4c 4c 42 41 43 4b 3b 0a 20 20 20 20 53 45 4c 45  LLBACK;.    SELE
35e0: 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 57 48 45  CT * FROM t1 WHE
35f0: 52 45 20 62 3c 31 3b 0a 20 20 7d 0a 7d 20 7b 34  RE b<1;.  }.} {4
3600: 20 2d 35 20 2d 36 20 31 20 2d 32 20 2d 33 7d 0a   -5 -6 1 -2 -3}.
3610: 64 6f 5f 74 65 73 74 20 74 72 61 6e 73 2d 36 2e  do_test trans-6.
3620: 33 39 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  39 {.  execsql {
3630: 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52  .    SELECT * FR
3640: 4f 4d 20 74 31 20 57 48 45 52 45 20 63 3c 31 3b  OM t1 WHERE c<1;
3650: 0a 20 20 7d 0a 7d 20 7b 31 20 2d 32 20 2d 33 20  .  }.} {1 -2 -3 
3660: 34 20 2d 35 20 2d 36 7d 0a 0a 23 20 54 65 73 74  4 -5 -6}..# Test
3670: 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 72 6f   to make sure ro
3680: 6c 6c 62 61 63 6b 20 72 65 73 74 6f 72 65 73 20  llback restores 
3690: 74 68 65 20 64 61 74 61 62 61 73 65 20 62 61 63  the database bac
36a0: 6b 20 74 6f 20 69 74 73 20 6f 72 69 67 69 6e 61  k to its origina
36b0: 6c 0a 23 20 73 74 61 74 65 2e 0a 23 0a 64 6f 5f  l.# state..#.do_
36c0: 74 65 73 74 20 74 72 61 6e 73 2d 37 2e 31 20 7b  test trans-7.1 {
36d0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 42 45 47 49  .  execsql {BEGI
36e0: 4e 7d 0a 20 20 66 6f 72 20 7b 73 65 74 20 69 20  N}.  for {set i 
36f0: 30 7d 20 7b 24 69 3c 31 30 30 30 7d 20 7b 69 6e  0} {$i<1000} {in
3700: 63 72 20 69 7d 20 7b 0a 20 20 20 20 73 65 74 20  cr i} {.    set 
3710: 72 31 20 5b 65 78 70 72 20 7b 72 61 6e 64 28 29  r1 [expr {rand()
3720: 7d 5d 0a 20 20 20 20 73 65 74 20 72 32 20 5b 65  }].    set r2 [e
3730: 78 70 72 20 7b 72 61 6e 64 28 29 7d 5d 0a 20 20  xpr {rand()}].  
3740: 20 20 73 65 74 20 72 33 20 5b 65 78 70 72 20 7b    set r3 [expr {
3750: 72 61 6e 64 28 29 7d 5d 0a 20 20 20 20 65 78 65  rand()}].    exe
3760: 63 73 71 6c 20 22 49 4e 53 45 52 54 20 49 4e 54  csql "INSERT INT
3770: 4f 20 74 32 20 56 41 4c 55 45 53 28 24 72 31 2c  O t2 VALUES($r1,
3780: 24 72 32 2c 24 72 33 29 22 0a 20 20 7d 0a 20 20  $r2,$r3)".  }.  
3790: 65 78 65 63 73 71 6c 20 7b 43 4f 4d 4d 49 54 7d  execsql {COMMIT}
37a0: 0a 20 20 73 65 74 20 3a 3a 63 68 65 63 6b 73 75  .  set ::checksu
37b0: 6d 20 5b 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  m [execsql {SELE
37c0: 43 54 20 6d 64 35 73 75 6d 28 78 2c 79 2c 7a 29  CT md5sum(x,y,z)
37d0: 20 46 52 4f 4d 20 74 32 7d 5d 0a 20 20 73 65 74   FROM t2}].  set
37e0: 20 3a 3a 63 68 65 63 6b 73 75 6d 32 20 5b 0a 20   ::checksum2 [. 
37f0: 20 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45     execsql {SELE
3800: 43 54 20 6d 64 35 73 75 6d 28 74 79 70 65 2c 6e  CT md5sum(type,n
3810: 61 6d 65 2c 74 62 6c 5f 6e 61 6d 65 2c 72 6f 6f  ame,tbl_name,roo
3820: 74 70 61 67 65 2c 73 71 6c 29 20 46 52 4f 4d 20  tpage,sql) FROM 
3830: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a 20  sqlite_master}. 
3840: 20 5d 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45   ].  execsql {SE
3850: 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52  LECT count(*) FR
3860: 4f 4d 20 74 32 7d 0a 7d 20 7b 31 30 30 31 7d 0a  OM t2}.} {1001}.
3870: 64 6f 5f 74 65 73 74 20 74 72 61 6e 73 2d 37 2e  do_test trans-7.
3880: 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  2 {.  execsql {S
3890: 45 4c 45 43 54 20 6d 64 35 73 75 6d 28 78 2c 79  ELECT md5sum(x,y
38a0: 2c 7a 29 20 46 52 4f 4d 20 74 32 7d 0a 7d 20 24  ,z) FROM t2}.} $
38b0: 63 68 65 63 6b 73 75 6d 0a 64 6f 5f 74 65 73 74  checksum.do_test
38c0: 20 74 72 61 6e 73 2d 37 2e 32 2e 31 20 7b 0a 20   trans-7.2.1 {. 
38d0: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
38e0: 20 6d 64 35 73 75 6d 28 74 79 70 65 2c 6e 61 6d   md5sum(type,nam
38f0: 65 2c 74 62 6c 5f 6e 61 6d 65 2c 72 6f 6f 74 70  e,tbl_name,rootp
3900: 61 67 65 2c 73 71 6c 29 20 46 52 4f 4d 20 73 71  age,sql) FROM sq
3910: 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 24  lite_master}.} $
3920: 63 68 65 63 6b 73 75 6d 32 0a 64 6f 5f 74 65 73  checksum2.do_tes
3930: 74 20 74 72 61 6e 73 2d 37 2e 33 20 7b 0a 20 20  t trans-7.3 {.  
3940: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 42 45  execsql {.    BE
3950: 47 49 4e 3b 0a 20 20 20 20 44 45 4c 45 54 45 20  GIN;.    DELETE 
3960: 46 52 4f 4d 20 74 32 3b 0a 20 20 20 20 52 4f 4c  FROM t2;.    ROL
3970: 4c 42 41 43 4b 3b 0a 20 20 20 20 53 45 4c 45 43  LBACK;.    SELEC
3980: 54 20 6d 64 35 73 75 6d 28 78 2c 79 2c 7a 29 20  T md5sum(x,y,z) 
3990: 46 52 4f 4d 20 74 32 3b 0a 20 20 7d 0a 7d 20 24  FROM t2;.  }.} $
39a0: 63 68 65 63 6b 73 75 6d 0a 64 6f 5f 74 65 73 74  checksum.do_test
39b0: 20 74 72 61 6e 73 2d 37 2e 34 20 7b 0a 20 20 65   trans-7.4 {.  e
39c0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 42 45 47  xecsql {.    BEG
39d0: 49 4e 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  IN;.    INSERT I
39e0: 4e 54 4f 20 74 32 20 53 45 4c 45 43 54 20 2a 20  NTO t2 SELECT * 
39f0: 46 52 4f 4d 20 74 32 3b 0a 20 20 20 20 52 4f 4c  FROM t2;.    ROL
3a00: 4c 42 41 43 4b 3b 0a 20 20 20 20 53 45 4c 45 43  LBACK;.    SELEC
3a10: 54 20 6d 64 35 73 75 6d 28 78 2c 79 2c 7a 29 20  T md5sum(x,y,z) 
3a20: 46 52 4f 4d 20 74 32 3b 0a 20 20 7d 0a 7d 20 24  FROM t2;.  }.} $
3a30: 63 68 65 63 6b 73 75 6d 0a 64 6f 5f 74 65 73 74  checksum.do_test
3a40: 20 74 72 61 6e 73 2d 37 2e 35 20 7b 0a 20 20 65   trans-7.5 {.  e
3a50: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 42 45 47  xecsql {.    BEG
3a60: 49 4e 3b 0a 20 20 20 20 44 45 4c 45 54 45 20 46  IN;.    DELETE F
3a70: 52 4f 4d 20 74 32 3b 0a 20 20 20 20 52 4f 4c 4c  ROM t2;.    ROLL
3a80: 42 41 43 4b 3b 0a 20 20 20 20 53 45 4c 45 43 54  BACK;.    SELECT
3a90: 20 6d 64 35 73 75 6d 28 78 2c 79 2c 7a 29 20 46   md5sum(x,y,z) F
3aa0: 52 4f 4d 20 74 32 3b 0a 20 20 7d 0a 7d 20 24 63  ROM t2;.  }.} $c
3ab0: 68 65 63 6b 73 75 6d 0a 64 6f 5f 74 65 73 74 20  hecksum.do_test 
3ac0: 74 72 61 6e 73 2d 37 2e 36 20 7b 0a 20 20 65 78  trans-7.6 {.  ex
3ad0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 42 45 47 49  ecsql {.    BEGI
3ae0: 4e 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  N;.    INSERT IN
3af0: 54 4f 20 74 32 20 53 45 4c 45 43 54 20 2a 20 46  TO t2 SELECT * F
3b00: 52 4f 4d 20 74 32 3b 0a 20 20 20 20 52 4f 4c 4c  ROM t2;.    ROLL
3b10: 42 41 43 4b 3b 0a 20 20 20 20 53 45 4c 45 43 54  BACK;.    SELECT
3b20: 20 6d 64 35 73 75 6d 28 78 2c 79 2c 7a 29 20 46   md5sum(x,y,z) F
3b30: 52 4f 4d 20 74 32 3b 0a 20 20 7d 0a 7d 20 24 63  ROM t2;.  }.} $c
3b40: 68 65 63 6b 73 75 6d 0a 64 6f 5f 74 65 73 74 20  hecksum.do_test 
3b50: 74 72 61 6e 73 2d 37 2e 37 20 7b 0a 20 20 65 78  trans-7.7 {.  ex
3b60: 65 63 73 71 6c 20 7b 0a 20 20 20 20 42 45 47 49  ecsql {.    BEGI
3b70: 4e 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41  N;.    CREATE TA
3b80: 42 4c 45 20 74 33 20 41 53 20 53 45 4c 45 43 54  BLE t3 AS SELECT
3b90: 20 2a 20 46 52 4f 4d 20 74 32 3b 0a 20 20 20 20   * FROM t2;.    
3ba0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20 53  INSERT INTO t2 S
3bb0: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 33 3b  ELECT * FROM t3;
3bc0: 0a 20 20 20 20 52 4f 4c 4c 42 41 43 4b 3b 0a 20  .    ROLLBACK;. 
3bd0: 20 20 20 53 45 4c 45 43 54 20 6d 64 35 73 75 6d     SELECT md5sum
3be0: 28 78 2c 79 2c 7a 29 20 46 52 4f 4d 20 74 32 3b  (x,y,z) FROM t2;
3bf0: 0a 20 20 7d 0a 7d 20 24 63 68 65 63 6b 73 75 6d  .  }.} $checksum
3c00: 0a 64 6f 5f 74 65 73 74 20 74 72 61 6e 73 2d 37  .do_test trans-7
3c10: 2e 38 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .8 {.  execsql {
3c20: 53 45 4c 45 43 54 20 6d 64 35 73 75 6d 28 74 79  SELECT md5sum(ty
3c30: 70 65 2c 6e 61 6d 65 2c 74 62 6c 5f 6e 61 6d 65  pe,name,tbl_name
3c40: 2c 72 6f 6f 74 70 61 67 65 2c 73 71 6c 29 20 46  ,rootpage,sql) F
3c50: 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
3c60: 72 7d 0a 7d 20 24 63 68 65 63 6b 73 75 6d 32 0a  r}.} $checksum2.
3c70: 64 6f 5f 74 65 73 74 20 74 72 61 6e 73 2d 37 2e  do_test trans-7.
3c80: 39 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  9 {.  execsql {.
3c90: 20 20 20 20 42 45 47 49 4e 3b 0a 20 20 20 20 43      BEGIN;.    C
3ca0: 52 45 41 54 45 20 54 45 4d 50 20 54 41 42 4c 45  REATE TEMP TABLE
3cb0: 20 74 33 20 41 53 20 53 45 4c 45 43 54 20 2a 20   t3 AS SELECT * 
3cc0: 46 52 4f 4d 20 74 32 3b 0a 20 20 20 20 49 4e 53  FROM t2;.    INS
3cd0: 45 52 54 20 49 4e 54 4f 20 74 32 20 53 45 4c 45  ERT INTO t2 SELE
3ce0: 43 54 20 2a 20 46 52 4f 4d 20 74 33 3b 0a 20 20  CT * FROM t3;.  
3cf0: 20 20 52 4f 4c 4c 42 41 43 4b 3b 0a 20 20 20 20    ROLLBACK;.    
3d00: 53 45 4c 45 43 54 20 6d 64 35 73 75 6d 28 78 2c  SELECT md5sum(x,
3d10: 79 2c 7a 29 20 46 52 4f 4d 20 74 32 3b 0a 20 20  y,z) FROM t2;.  
3d20: 7d 0a 7d 20 24 63 68 65 63 6b 73 75 6d 0a 64 6f  }.} $checksum.do
3d30: 5f 74 65 73 74 20 74 72 61 6e 73 2d 37 2e 31 30  _test trans-7.10
3d40: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45   {.  execsql {SE
3d50: 4c 45 43 54 20 6d 64 35 73 75 6d 28 74 79 70 65  LECT md5sum(type
3d60: 2c 6e 61 6d 65 2c 74 62 6c 5f 6e 61 6d 65 2c 72  ,name,tbl_name,r
3d70: 6f 6f 74 70 61 67 65 2c 73 71 6c 29 20 46 52 4f  ootpage,sql) FRO
3d80: 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d  M sqlite_master}
3d90: 0a 7d 20 24 63 68 65 63 6b 73 75 6d 32 0a 64 6f  .} $checksum2.do
3da0: 5f 74 65 73 74 20 74 72 61 6e 73 2d 37 2e 31 31  _test trans-7.11
3db0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
3dc0: 20 20 20 42 45 47 49 4e 3b 0a 20 20 20 20 43 52     BEGIN;.    CR
3dd0: 45 41 54 45 20 54 45 4d 50 20 54 41 42 4c 45 20  EATE TEMP TABLE 
3de0: 74 33 20 41 53 20 53 45 4c 45 43 54 20 2a 20 46  t3 AS SELECT * F
3df0: 52 4f 4d 20 74 32 3b 0a 20 20 20 20 49 4e 53 45  ROM t2;.    INSE
3e00: 52 54 20 49 4e 54 4f 20 74 32 20 53 45 4c 45 43  RT INTO t2 SELEC
3e10: 54 20 2a 20 46 52 4f 4d 20 74 33 3b 0a 20 20 20  T * FROM t3;.   
3e20: 20 44 52 4f 50 20 49 4e 44 45 58 20 69 32 78 3b   DROP INDEX i2x;
3e30: 0a 20 20 20 20 44 52 4f 50 20 49 4e 44 45 58 20  .    DROP INDEX 
3e40: 69 32 79 3b 0a 20 20 20 20 43 52 45 41 54 45 20  i2y;.    CREATE 
3e50: 49 4e 44 45 58 20 69 33 61 20 4f 4e 20 74 33 28  INDEX i3a ON t3(
3e60: 78 29 3b 0a 20 20 20 20 52 4f 4c 4c 42 41 43 4b  x);.    ROLLBACK
3e70: 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 6d 64 35  ;.    SELECT md5
3e80: 73 75 6d 28 78 2c 79 2c 7a 29 20 46 52 4f 4d 20  sum(x,y,z) FROM 
3e90: 74 32 3b 0a 20 20 7d 0a 7d 20 24 63 68 65 63 6b  t2;.  }.} $check
3ea0: 73 75 6d 0a 64 6f 5f 74 65 73 74 20 74 72 61 6e  sum.do_test tran
3eb0: 73 2d 37 2e 31 32 20 7b 0a 20 20 65 78 65 63 73  s-7.12 {.  execs
3ec0: 71 6c 20 7b 53 45 4c 45 43 54 20 6d 64 35 73 75  ql {SELECT md5su
3ed0: 6d 28 74 79 70 65 2c 6e 61 6d 65 2c 74 62 6c 5f  m(type,name,tbl_
3ee0: 6e 61 6d 65 2c 72 6f 6f 74 70 61 67 65 2c 73 71  name,rootpage,sq
3ef0: 6c 29 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d  l) FROM sqlite_m
3f00: 61 73 74 65 72 7d 0a 7d 20 24 63 68 65 63 6b 73  aster}.} $checks
3f10: 75 6d 32 0a 64 6f 5f 74 65 73 74 20 74 72 61 6e  um2.do_test tran
3f20: 73 2d 37 2e 31 33 20 7b 0a 20 20 65 78 65 63 73  s-7.13 {.  execs
3f30: 71 6c 20 7b 0a 20 20 20 20 42 45 47 49 4e 3b 0a  ql {.    BEGIN;.
3f40: 20 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20 74      DROP TABLE t
3f50: 32 3b 0a 20 20 20 20 52 4f 4c 4c 42 41 43 4b 3b  2;.    ROLLBACK;
3f60: 0a 20 20 20 20 53 45 4c 45 43 54 20 6d 64 35 73  .    SELECT md5s
3f70: 75 6d 28 78 2c 79 2c 7a 29 20 46 52 4f 4d 20 74  um(x,y,z) FROM t
3f80: 32 3b 0a 20 20 7d 0a 7d 20 24 63 68 65 63 6b 73  2;.  }.} $checks
3f90: 75 6d 0a 64 6f 5f 74 65 73 74 20 74 72 61 6e 73  um.do_test trans
3fa0: 2d 37 2e 31 34 20 7b 0a 20 20 65 78 65 63 73 71  -7.14 {.  execsq
3fb0: 6c 20 7b 53 45 4c 45 43 54 20 6d 64 35 73 75 6d  l {SELECT md5sum
3fc0: 28 74 79 70 65 2c 6e 61 6d 65 2c 74 62 6c 5f 6e  (type,name,tbl_n
3fd0: 61 6d 65 2c 72 6f 6f 74 70 61 67 65 2c 73 71 6c  ame,rootpage,sql
3fe0: 29 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61  ) FROM sqlite_ma
3ff0: 73 74 65 72 7d 0a 7d 20 24 63 68 65 63 6b 73 75  ster}.} $checksu
4000: 6d 32 0a 0a 23 20 41 72 72 61 6e 67 65 20 66 6f  m2..# Arrange fo
4010: 72 20 61 6e 6f 74 68 65 72 20 70 72 6f 63 65 73  r another proces
4020: 73 20 74 6f 20 62 65 67 69 6e 20 6d 6f 64 69 66  s to begin modif
4030: 79 69 6e 67 20 74 68 65 20 64 61 74 61 62 61 73  ying the databas
4040: 65 20 62 75 74 20 61 62 6f 72 74 0a 23 20 61 6e  e but abort.# an
4050: 64 20 64 69 65 20 69 6e 20 74 68 65 20 6d 69 64  d die in the mid
4060: 64 6c 65 20 6f 66 20 74 68 65 20 6d 6f 64 69 66  dle of the modif
4070: 69 63 61 74 69 6f 6e 2e 20 20 54 68 65 6e 20 68  ication.  Then h
4080: 61 76 65 20 74 68 69 73 20 70 72 6f 63 65 73 73  ave this process
4090: 20 72 65 61 64 0a 23 20 74 68 65 20 64 61 74 61   read.# the data
40a0: 62 61 73 65 2e 20 20 54 68 69 73 20 70 72 6f 63  base.  This proc
40b0: 65 73 73 20 73 68 6f 75 6c 64 20 64 65 74 65 63  ess should detec
40c0: 74 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20 66 69  t the journal fi
40d0: 6c 65 20 61 6e 64 20 72 6f 6c 6c 20 69 74 0a 23  le and roll it.#
40e0: 20 62 61 63 6b 2e 20 20 56 65 72 69 66 79 20 74   back.  Verify t
40f0: 68 61 74 20 74 68 69 73 20 68 61 70 70 65 6e 73  hat this happens
4100: 20 63 6f 72 72 65 63 74 6c 79 2e 0a 23 0a 73 65   correctly..#.se
4110: 74 20 66 64 20 5b 6f 70 65 6e 20 74 65 73 74 2e  t fd [open test.
4120: 74 63 6c 20 77 5d 0a 70 75 74 73 20 24 66 64 20  tcl w].puts $fd 
4130: 7b 0a 20 20 73 71 6c 69 74 65 20 64 62 20 74 65  {.  sqlite db te
4140: 73 74 2e 64 62 0a 20 20 64 62 20 65 76 61 6c 20  st.db.  db eval 
4150: 7b 0a 20 20 20 20 42 45 47 49 4e 3b 0a 20 20 20  {.    BEGIN;.   
4160: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 33   CREATE TABLE t3
4170: 20 41 53 20 53 45 4c 45 43 54 20 2a 20 46 52 4f   AS SELECT * FRO
4180: 4d 20 74 32 3b 0a 20 20 20 20 44 45 4c 45 54 45  M t2;.    DELETE
4190: 20 46 52 4f 4d 20 74 32 3b 0a 20 20 7d 0a 20 20   FROM t2;.  }.  
41a0: 73 71 6c 69 74 65 5f 61 62 6f 72 74 0a 7d 0a 63  sqlite_abort.}.c
41b0: 6c 6f 73 65 20 24 66 64 0a 64 6f 5f 74 65 73 74  lose $fd.do_test
41c0: 20 74 72 61 6e 73 2d 38 2e 31 20 7b 0a 20 20 63   trans-8.1 {.  c
41d0: 61 74 63 68 20 7b 65 78 65 63 20 5b 69 6e 66 6f  atch {exec [info
41e0: 20 6e 61 6d 65 6f 66 65 78 65 63 5d 20 74 65 73   nameofexec] tes
41f0: 74 2e 74 63 6c 7d 0a 20 20 65 78 65 63 73 71 6c  t.tcl}.  execsql
4200: 20 7b 53 45 4c 45 43 54 20 6d 64 35 73 75 6d 28   {SELECT md5sum(
4210: 78 2c 79 2c 7a 29 20 46 52 4f 4d 20 74 32 7d 0a  x,y,z) FROM t2}.
4220: 7d 20 24 63 68 65 63 6b 73 75 6d 0a 64 6f 5f 74  } $checksum.do_t
4230: 65 73 74 20 74 72 61 6e 73 2d 38 2e 32 20 7b 0a  est trans-8.2 {.
4240: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
4250: 54 20 6d 64 35 73 75 6d 28 74 79 70 65 2c 6e 61  T md5sum(type,na
4260: 6d 65 2c 74 62 6c 5f 6e 61 6d 65 2c 72 6f 6f 74  me,tbl_name,root
4270: 70 61 67 65 2c 73 71 6c 29 20 46 52 4f 4d 20 73  page,sql) FROM s
4280: 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20  qlite_master}.} 
4290: 24 63 68 65 63 6b 73 75 6d 32 0a 0a 20 20 20 0a  $checksum2..   .
42a0: 66 69 6e 69 73 68 5f 74 65 73 74 0a              finish_test.