/ Hex Artifact Content
Login

Artifact 1e901d8102706b63534dbd2bdd4d8f16c4082650:


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 69 73 0a 23 20 66 69  rary.  This.# fi
01b0: 6c 65 20 69 73 20 61 20 63 6f 70 79 20 6f 66 20  le is a copy of 
01c0: 22 74 72 61 6e 73 2e 74 65 73 74 22 20 6d 6f 64  "trans.test" mod
01d0: 69 66 69 65 64 20 74 6f 20 72 75 6e 20 75 6e 64  ified to run und
01e0: 65 72 20 61 75 74 6f 76 61 63 75 75 6d 20 6d 6f  er autovacuum mo
01f0: 64 65 2e 0a 23 20 74 68 65 20 70 6f 69 6e 74 20  de..# the point 
0200: 69 73 20 74 6f 20 73 74 72 65 73 73 20 74 68 65  is to stress the
0210: 20 61 75 74 6f 76 61 63 75 75 6d 20 6c 6f 67 69   autovacuum logi
0220: 63 20 61 6e 64 20 74 72 79 20 74 6f 20 67 65 74  c and try to get
0230: 20 69 74 20 74 6f 20 66 61 69 6c 2e 0a 23 0a 23   it to fail..#.#
0240: 20 24 49 64 3a 20 61 76 74 72 61 6e 73 2e 74 65   $Id: avtrans.te
0250: 73 74 2c 76 20 31 2e 36 20 32 30 30 37 2f 30 39  st,v 1.6 2007/09
0260: 2f 31 32 20 31 37 3a 30 31 3a 34 35 20 64 61 6e  /12 17:01:45 dan
0270: 69 65 6c 6b 31 39 37 37 20 45 78 70 20 24 0a 0a  ielk1977 Exp $..
0280: 0a 73 65 74 20 74 65 73 74 64 69 72 20 5b 66 69  .set testdir [fi
0290: 6c 65 20 64 69 72 6e 61 6d 65 20 24 61 72 67 76  le dirname $argv
02a0: 30 5d 0a 73 6f 75 72 63 65 20 24 74 65 73 74 64  0].source $testd
02b0: 69 72 2f 74 65 73 74 65 72 2e 74 63 6c 0a 0a 0a  ir/tester.tcl...
02c0: 23 20 43 72 65 61 74 65 20 73 65 76 65 72 61 6c  # Create several
02d0: 20 74 61 62 6c 65 73 20 74 6f 20 77 6f 72 6b 20   tables to work 
02e0: 77 69 74 68 2e 0a 23 0a 64 6f 5f 74 65 73 74 20  with..#.do_test 
02f0: 61 76 74 72 61 6e 73 2d 31 2e 30 20 7b 0a 20 20  avtrans-1.0 {.  
0300: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52  execsql {.    PR
0310: 41 47 4d 41 20 61 75 74 6f 5f 76 61 63 75 75 6d  AGMA auto_vacuum
0320: 3d 4f 4e 3b 0a 20 20 20 20 43 52 45 41 54 45 20  =ON;.    CREATE 
0330: 54 41 42 4c 45 20 6f 6e 65 28 61 20 69 6e 74 20  TABLE one(a int 
0340: 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 62 20 74  PRIMARY KEY, b t
0350: 65 78 74 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  ext);.    INSERT
0360: 20 49 4e 54 4f 20 6f 6e 65 20 56 41 4c 55 45 53   INTO one VALUES
0370: 28 31 2c 27 6f 6e 65 27 29 3b 0a 20 20 20 20 49  (1,'one');.    I
0380: 4e 53 45 52 54 20 49 4e 54 4f 20 6f 6e 65 20 56  NSERT INTO one V
0390: 41 4c 55 45 53 28 32 2c 27 74 77 6f 27 29 3b 0a  ALUES(2,'two');.
03a0: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
03b0: 6f 6e 65 20 56 41 4c 55 45 53 28 33 2c 27 74 68  one VALUES(3,'th
03c0: 72 65 65 27 29 3b 0a 20 20 20 20 53 45 4c 45 43  ree');.    SELEC
03d0: 54 20 62 20 46 52 4f 4d 20 6f 6e 65 20 4f 52 44  T b FROM one ORD
03e0: 45 52 20 42 59 20 61 3b 0a 20 20 7d 0a 7d 20 7b  ER BY a;.  }.} {
03f0: 6f 6e 65 20 74 77 6f 20 74 68 72 65 65 7d 0a 64  one two three}.d
0400: 6f 5f 74 65 73 74 20 61 76 74 72 61 6e 73 2d 31  o_test avtrans-1
0410: 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .1 {.  execsql {
0420: 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  .    CREATE TABL
0430: 45 20 74 77 6f 28 61 20 69 6e 74 20 50 52 49 4d  E two(a int PRIM
0440: 41 52 59 20 4b 45 59 2c 20 62 20 74 65 78 74 29  ARY KEY, b text)
0450: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
0460: 4f 20 74 77 6f 20 56 41 4c 55 45 53 28 31 2c 27  O two VALUES(1,'
0470: 49 27 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20  I');.    INSERT 
0480: 49 4e 54 4f 20 74 77 6f 20 56 41 4c 55 45 53 28  INTO two VALUES(
0490: 35 2c 27 56 27 29 3b 0a 20 20 20 20 49 4e 53 45  5,'V');.    INSE
04a0: 52 54 20 49 4e 54 4f 20 74 77 6f 20 56 41 4c 55  RT INTO two VALU
04b0: 45 53 28 31 30 2c 27 58 27 29 3b 0a 20 20 20 20  ES(10,'X');.    
04c0: 53 45 4c 45 43 54 20 62 20 46 52 4f 4d 20 74 77  SELECT b FROM tw
04d0: 6f 20 4f 52 44 45 52 20 42 59 20 61 3b 0a 20 20  o ORDER BY a;.  
04e0: 7d 0a 7d 20 7b 49 20 56 20 58 7d 0a 64 6f 5f 74  }.} {I V X}.do_t
04f0: 65 73 74 20 61 76 74 72 61 6e 73 2d 31 2e 39 20  est avtrans-1.9 
0500: 7b 0a 20 20 73 71 6c 69 74 65 33 20 61 6c 74 64  {.  sqlite3 altd
0510: 62 20 74 65 73 74 2e 64 62 0a 20 20 65 78 65 63  b test.db.  exec
0520: 73 71 6c 20 7b 53 45 4c 45 43 54 20 62 20 46 52  sql {SELECT b FR
0530: 4f 4d 20 6f 6e 65 20 4f 52 44 45 52 20 42 59 20  OM one ORDER BY 
0540: 61 7d 20 61 6c 74 64 62 0a 7d 20 7b 6f 6e 65 20  a} altdb.} {one 
0550: 74 77 6f 20 74 68 72 65 65 7d 0a 64 6f 5f 74 65  two three}.do_te
0560: 73 74 20 61 76 74 72 61 6e 73 2d 31 2e 31 30 20  st avtrans-1.10 
0570: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  {.  execsql {SEL
0580: 45 43 54 20 62 20 46 52 4f 4d 20 74 77 6f 20 4f  ECT b FROM two O
0590: 52 44 45 52 20 42 59 20 61 7d 20 61 6c 74 64 62  RDER BY a} altdb
05a0: 0a 7d 20 7b 49 20 56 20 58 7d 0a 69 6e 74 65 67  .} {I V X}.integ
05b0: 72 69 74 79 5f 63 68 65 63 6b 20 61 76 74 72 61  rity_check avtra
05c0: 6e 73 2d 31 2e 31 31 0a 0a 23 20 42 61 73 69 63  ns-1.11..# Basic
05d0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 0a 23 0a   transactions.#.
05e0: 64 6f 5f 74 65 73 74 20 61 76 74 72 61 6e 73 2d  do_test avtrans-
05f0: 32 2e 31 20 7b 0a 20 20 73 65 74 20 76 20 5b 63  2.1 {.  set v [c
0600: 61 74 63 68 20 7b 65 78 65 63 73 71 6c 20 7b 42  atch {execsql {B
0610: 45 47 49 4e 7d 7d 20 6d 73 67 5d 0a 20 20 6c 61  EGIN}} msg].  la
0620: 70 70 65 6e 64 20 76 20 24 6d 73 67 0a 7d 20 7b  ppend v $msg.} {
0630: 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 76  0 {}}.do_test av
0640: 74 72 61 6e 73 2d 32 2e 32 20 7b 0a 20 20 73 65  trans-2.2 {.  se
0650: 74 20 76 20 5b 63 61 74 63 68 20 7b 65 78 65 63  t v [catch {exec
0660: 73 71 6c 20 7b 45 4e 44 7d 7d 20 6d 73 67 5d 0a  sql {END}} msg].
0670: 20 20 6c 61 70 70 65 6e 64 20 76 20 24 6d 73 67    lappend v $msg
0680: 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73  .} {0 {}}.do_tes
0690: 74 20 61 76 74 72 61 6e 73 2d 32 2e 33 20 7b 0a  t avtrans-2.3 {.
06a0: 20 20 73 65 74 20 76 20 5b 63 61 74 63 68 20 7b    set v [catch {
06b0: 65 78 65 63 73 71 6c 20 7b 42 45 47 49 4e 20 54  execsql {BEGIN T
06c0: 52 41 4e 53 41 43 54 49 4f 4e 7d 7d 20 6d 73 67  RANSACTION}} msg
06d0: 5d 0a 20 20 6c 61 70 70 65 6e 64 20 76 20 24 6d  ].  lappend v $m
06e0: 73 67 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74  sg.} {0 {}}.do_t
06f0: 65 73 74 20 61 76 74 72 61 6e 73 2d 32 2e 34 20  est avtrans-2.4 
0700: 7b 0a 20 20 73 65 74 20 76 20 5b 63 61 74 63 68  {.  set v [catch
0710: 20 7b 65 78 65 63 73 71 6c 20 7b 43 4f 4d 4d 49   {execsql {COMMI
0720: 54 20 54 52 41 4e 53 41 43 54 49 4f 4e 7d 7d 20  T TRANSACTION}} 
0730: 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20 76  msg].  lappend v
0740: 20 24 6d 73 67 0a 7d 20 7b 30 20 7b 7d 7d 0a 64   $msg.} {0 {}}.d
0750: 6f 5f 74 65 73 74 20 61 76 74 72 61 6e 73 2d 32  o_test avtrans-2
0760: 2e 35 20 7b 0a 20 20 73 65 74 20 76 20 5b 63 61  .5 {.  set v [ca
0770: 74 63 68 20 7b 65 78 65 63 73 71 6c 20 7b 42 45  tch {execsql {BE
0780: 47 49 4e 20 54 52 41 4e 53 41 43 54 49 4f 4e 20  GIN TRANSACTION 
0790: 27 66 6f 6f 27 7d 7d 20 6d 73 67 5d 0a 20 20 6c  'foo'}} msg].  l
07a0: 61 70 70 65 6e 64 20 76 20 24 6d 73 67 0a 7d 20  append v $msg.} 
07b0: 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61  {0 {}}.do_test a
07c0: 76 74 72 61 6e 73 2d 32 2e 36 20 7b 0a 20 20 73  vtrans-2.6 {.  s
07d0: 65 74 20 76 20 5b 63 61 74 63 68 20 7b 65 78 65  et v [catch {exe
07e0: 63 73 71 6c 20 7b 52 4f 4c 4c 42 41 43 4b 20 54  csql {ROLLBACK T
07f0: 52 41 4e 53 41 43 54 49 4f 4e 20 27 66 6f 6f 27  RANSACTION 'foo'
0800: 7d 7d 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e  }} msg].  lappen
0810: 64 20 76 20 24 6d 73 67 0a 7d 20 7b 30 20 7b 7d  d v $msg.} {0 {}
0820: 7d 0a 64 6f 5f 74 65 73 74 20 61 76 74 72 61 6e  }.do_test avtran
0830: 73 2d 32 2e 31 30 20 7b 0a 20 20 65 78 65 63 73  s-2.10 {.  execs
0840: 71 6c 20 7b 0a 20 20 20 20 42 45 47 49 4e 3b 0a  ql {.    BEGIN;.
0850: 20 20 20 20 53 45 4c 45 43 54 20 61 20 46 52 4f      SELECT a FRO
0860: 4d 20 6f 6e 65 20 4f 52 44 45 52 20 42 59 20 61  M one ORDER BY a
0870: 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 61 20 46  ;.    SELECT a F
0880: 52 4f 4d 20 74 77 6f 20 4f 52 44 45 52 20 42 59  ROM two ORDER BY
0890: 20 61 3b 0a 20 20 20 20 45 4e 44 3b 0a 20 20 7d   a;.    END;.  }
08a0: 0a 7d 20 7b 31 20 32 20 33 20 31 20 35 20 31 30  .} {1 2 3 1 5 10
08b0: 7d 0a 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63  }.integrity_chec
08c0: 6b 20 61 76 74 72 61 6e 73 2d 32 2e 31 31 0a 0a  k avtrans-2.11..
08d0: 23 20 43 68 65 63 6b 20 74 68 65 20 6c 6f 63 6b  # Check the lock
08e0: 69 6e 67 20 62 65 68 61 76 69 6f 72 0a 23 0a 73  ing behavior.#.s
08f0: 71 6c 69 74 65 33 5f 73 6f 66 74 5f 68 65 61 70  qlite3_soft_heap
0900: 5f 6c 69 6d 69 74 20 30 0a 64 6f 5f 74 65 73 74  _limit 0.do_test
0910: 20 61 76 74 72 61 6e 73 2d 33 2e 31 20 7b 0a 20   avtrans-3.1 {. 
0920: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 42   execsql {.    B
0930: 45 47 49 4e 3b 0a 20 20 20 20 55 50 44 41 54 45  EGIN;.    UPDATE
0940: 20 6f 6e 65 20 53 45 54 20 61 20 3d 20 30 20 57   one SET a = 0 W
0950: 48 45 52 45 20 30 3b 0a 20 20 20 20 53 45 4c 45  HERE 0;.    SELE
0960: 43 54 20 61 20 46 52 4f 4d 20 6f 6e 65 20 4f 52  CT a FROM one OR
0970: 44 45 52 20 42 59 20 61 3b 0a 20 20 7d 0a 7d 20  DER BY a;.  }.} 
0980: 7b 31 20 32 20 33 7d 0a 64 6f 5f 74 65 73 74 20  {1 2 3}.do_test 
0990: 61 76 74 72 61 6e 73 2d 33 2e 32 20 7b 0a 20 20  avtrans-3.2 {.  
09a0: 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 53  catchsql {.    S
09b0: 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 74 77 6f  ELECT a FROM two
09c0: 20 4f 52 44 45 52 20 42 59 20 61 3b 0a 20 20 7d   ORDER BY a;.  }
09d0: 20 61 6c 74 64 62 0a 7d 20 7b 30 20 7b 31 20 35   altdb.} {0 {1 5
09e0: 20 31 30 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 76   10}}.do_test av
09f0: 74 72 61 6e 73 2d 33 2e 33 20 7b 0a 20 20 63 61  trans-3.3 {.  ca
0a00: 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c  tchsql {.    SEL
0a10: 45 43 54 20 61 20 46 52 4f 4d 20 6f 6e 65 20 4f  ECT a FROM one O
0a20: 52 44 45 52 20 42 59 20 61 3b 0a 20 20 7d 20 61  RDER BY a;.  } a
0a30: 6c 74 64 62 0a 7d 20 7b 30 20 7b 31 20 32 20 33  ltdb.} {0 {1 2 3
0a40: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 76 74 72 61  }}.do_test avtra
0a50: 6e 73 2d 33 2e 34 20 7b 0a 20 20 63 61 74 63 68  ns-3.4 {.  catch
0a60: 73 71 6c 20 7b 0a 20 20 20 20 49 4e 53 45 52 54  sql {.    INSERT
0a70: 20 49 4e 54 4f 20 6f 6e 65 20 56 41 4c 55 45 53   INTO one VALUES
0a80: 28 34 2c 27 66 6f 75 72 27 29 3b 0a 20 20 7d 0a  (4,'four');.  }.
0a90: 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  } {0 {}}.do_test
0aa0: 20 61 76 74 72 61 6e 73 2d 33 2e 35 20 7b 0a 20   avtrans-3.5 {. 
0ab0: 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20   catchsql {.    
0ac0: 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 74 77  SELECT a FROM tw
0ad0: 6f 20 4f 52 44 45 52 20 42 59 20 61 3b 0a 20 20  o ORDER BY a;.  
0ae0: 7d 20 61 6c 74 64 62 0a 7d 20 7b 30 20 7b 31 20  } altdb.} {0 {1 
0af0: 35 20 31 30 7d 7d 0a 64 6f 5f 74 65 73 74 20 61  5 10}}.do_test a
0b00: 76 74 72 61 6e 73 2d 33 2e 36 20 7b 0a 20 20 63  vtrans-3.6 {.  c
0b10: 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 53 45  atchsql {.    SE
0b20: 4c 45 43 54 20 61 20 46 52 4f 4d 20 6f 6e 65 20  LECT a FROM one 
0b30: 4f 52 44 45 52 20 42 59 20 61 3b 0a 20 20 7d 20  ORDER BY a;.  } 
0b40: 61 6c 74 64 62 0a 7d 20 7b 30 20 7b 31 20 32 20  altdb.} {0 {1 2 
0b50: 33 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 76 74 72  3}}.do_test avtr
0b60: 61 6e 73 2d 33 2e 37 20 7b 0a 20 20 63 61 74 63  ans-3.7 {.  catc
0b70: 68 73 71 6c 20 7b 0a 20 20 20 20 49 4e 53 45 52  hsql {.    INSER
0b80: 54 20 49 4e 54 4f 20 74 77 6f 20 56 41 4c 55 45  T INTO two VALUE
0b90: 53 28 34 2c 27 49 56 27 29 3b 0a 20 20 7d 0a 7d  S(4,'IV');.  }.}
0ba0: 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20   {0 {}}.do_test 
0bb0: 61 76 74 72 61 6e 73 2d 33 2e 38 20 7b 0a 20 20  avtrans-3.8 {.  
0bc0: 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 53  catchsql {.    S
0bd0: 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 74 77 6f  ELECT a FROM two
0be0: 20 4f 52 44 45 52 20 42 59 20 61 3b 0a 20 20 7d   ORDER BY a;.  }
0bf0: 20 61 6c 74 64 62 0a 7d 20 7b 30 20 7b 31 20 35   altdb.} {0 {1 5
0c00: 20 31 30 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 76   10}}.do_test av
0c10: 74 72 61 6e 73 2d 33 2e 39 20 7b 0a 20 20 63 61  trans-3.9 {.  ca
0c20: 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c  tchsql {.    SEL
0c30: 45 43 54 20 61 20 46 52 4f 4d 20 6f 6e 65 20 4f  ECT a FROM one O
0c40: 52 44 45 52 20 42 59 20 61 3b 0a 20 20 7d 20 61  RDER BY a;.  } a
0c50: 6c 74 64 62 0a 7d 20 7b 30 20 7b 31 20 32 20 33  ltdb.} {0 {1 2 3
0c60: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 76 74 72 61  }}.do_test avtra
0c70: 6e 73 2d 33 2e 31 30 20 7b 0a 20 20 65 78 65 63  ns-3.10 {.  exec
0c80: 73 71 6c 20 7b 45 4e 44 20 54 52 41 4e 53 41 43  sql {END TRANSAC
0c90: 54 49 4f 4e 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65  TION}.} {}.do_te
0ca0: 73 74 20 61 76 74 72 61 6e 73 2d 33 2e 31 31 20  st avtrans-3.11 
0cb0: 7b 0a 20 20 73 65 74 20 76 20 5b 63 61 74 63 68  {.  set v [catch
0cc0: 20 7b 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20   {execsql {.    
0cd0: 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 74 77  SELECT a FROM tw
0ce0: 6f 20 4f 52 44 45 52 20 42 59 20 61 3b 0a 20 20  o ORDER BY a;.  
0cf0: 7d 20 61 6c 74 64 62 7d 20 6d 73 67 5d 0a 20 20  } altdb} msg].  
0d00: 6c 61 70 70 65 6e 64 20 76 20 24 6d 73 67 0a 7d  lappend v $msg.}
0d10: 20 7b 30 20 7b 31 20 34 20 35 20 31 30 7d 7d 0a   {0 {1 4 5 10}}.
0d20: 64 6f 5f 74 65 73 74 20 61 76 74 72 61 6e 73 2d  do_test avtrans-
0d30: 33 2e 31 32 20 7b 0a 20 20 73 65 74 20 76 20 5b  3.12 {.  set v [
0d40: 63 61 74 63 68 20 7b 65 78 65 63 73 71 6c 20 7b  catch {execsql {
0d50: 0a 20 20 20 20 53 45 4c 45 43 54 20 61 20 46 52  .    SELECT a FR
0d60: 4f 4d 20 6f 6e 65 20 4f 52 44 45 52 20 42 59 20  OM one ORDER BY 
0d70: 61 3b 0a 20 20 7d 20 61 6c 74 64 62 7d 20 6d 73  a;.  } altdb} ms
0d80: 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20 76 20 24  g].  lappend v $
0d90: 6d 73 67 0a 7d 20 7b 30 20 7b 31 20 32 20 33 20  msg.} {0 {1 2 3 
0da0: 34 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 76 74 72  4}}.do_test avtr
0db0: 61 6e 73 2d 33 2e 31 33 20 7b 0a 20 20 73 65 74  ans-3.13 {.  set
0dc0: 20 76 20 5b 63 61 74 63 68 20 7b 65 78 65 63 73   v [catch {execs
0dd0: 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  ql {.    SELECT 
0de0: 61 20 46 52 4f 4d 20 74 77 6f 20 4f 52 44 45 52  a FROM two ORDER
0df0: 20 42 59 20 61 3b 0a 20 20 7d 20 64 62 7d 20 6d   BY a;.  } db} m
0e00: 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20 76 20  sg].  lappend v 
0e10: 24 6d 73 67 0a 7d 20 7b 30 20 7b 31 20 34 20 35  $msg.} {0 {1 4 5
0e20: 20 31 30 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 76   10}}.do_test av
0e30: 74 72 61 6e 73 2d 33 2e 31 34 20 7b 0a 20 20 73  trans-3.14 {.  s
0e40: 65 74 20 76 20 5b 63 61 74 63 68 20 7b 65 78 65  et v [catch {exe
0e50: 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43  csql {.    SELEC
0e60: 54 20 61 20 46 52 4f 4d 20 6f 6e 65 20 4f 52 44  T a FROM one ORD
0e70: 45 52 20 42 59 20 61 3b 0a 20 20 7d 20 64 62 7d  ER BY a;.  } db}
0e80: 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20   msg].  lappend 
0e90: 76 20 24 6d 73 67 0a 7d 20 7b 30 20 7b 31 20 32  v $msg.} {0 {1 2
0ea0: 20 33 20 34 7d 7d 0a 73 71 6c 69 74 65 33 5f 73   3 4}}.sqlite3_s
0eb0: 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74 20 24  oft_heap_limit $
0ec0: 73 6f 66 74 5f 6c 69 6d 69 74 0a 69 6e 74 65 67  soft_limit.integ
0ed0: 72 69 74 79 5f 63 68 65 63 6b 20 61 76 74 72 61  rity_check avtra
0ee0: 6e 73 2d 33 2e 31 35 0a 0a 64 6f 5f 74 65 73 74  ns-3.15..do_test
0ef0: 20 61 76 74 72 61 6e 73 2d 34 2e 31 20 7b 0a 20   avtrans-4.1 {. 
0f00: 20 73 65 74 20 76 20 5b 63 61 74 63 68 20 7b 65   set v [catch {e
0f10: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 4f 4d  xecsql {.    COM
0f20: 4d 49 54 3b 0a 20 20 7d 20 64 62 7d 20 6d 73 67  MIT;.  } db} msg
0f30: 5d 0a 20 20 6c 61 70 70 65 6e 64 20 76 20 24 6d  ].  lappend v $m
0f40: 73 67 0a 7d 20 7b 31 20 7b 63 61 6e 6e 6f 74 20  sg.} {1 {cannot 
0f50: 63 6f 6d 6d 69 74 20 2d 20 6e 6f 20 74 72 61 6e  commit - no tran
0f60: 73 61 63 74 69 6f 6e 20 69 73 20 61 63 74 69 76  saction is activ
0f70: 65 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 76 74 72  e}}.do_test avtr
0f80: 61 6e 73 2d 34 2e 32 20 7b 0a 20 20 73 65 74 20  ans-4.2 {.  set 
0f90: 76 20 5b 63 61 74 63 68 20 7b 65 78 65 63 73 71  v [catch {execsq
0fa0: 6c 20 7b 0a 20 20 20 20 52 4f 4c 4c 42 41 43 4b  l {.    ROLLBACK
0fb0: 3b 0a 20 20 7d 20 64 62 7d 20 6d 73 67 5d 0a 20  ;.  } db} msg]. 
0fc0: 20 6c 61 70 70 65 6e 64 20 76 20 24 6d 73 67 0a   lappend v $msg.
0fd0: 7d 20 7b 31 20 7b 63 61 6e 6e 6f 74 20 72 6f 6c  } {1 {cannot rol
0fe0: 6c 62 61 63 6b 20 2d 20 6e 6f 20 74 72 61 6e 73  lback - no trans
0ff0: 61 63 74 69 6f 6e 20 69 73 20 61 63 74 69 76 65  action is active
1000: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 76 74 72 61  }}.do_test avtra
1010: 6e 73 2d 34 2e 33 20 7b 0a 20 20 63 61 74 63 68  ns-4.3 {.  catch
1020: 73 71 6c 20 7b 0a 20 20 20 20 42 45 47 49 4e 20  sql {.    BEGIN 
1030: 54 52 41 4e 53 41 43 54 49 4f 4e 3b 0a 20 20 20  TRANSACTION;.   
1040: 20 55 50 44 41 54 45 20 74 77 6f 20 53 45 54 20   UPDATE two SET 
1050: 61 20 3d 20 30 20 57 48 45 52 45 20 30 3b 0a 20  a = 0 WHERE 0;. 
1060: 20 20 20 53 45 4c 45 43 54 20 61 20 46 52 4f 4d     SELECT a FROM
1070: 20 74 77 6f 20 4f 52 44 45 52 20 42 59 20 61 3b   two ORDER BY a;
1080: 0a 20 20 7d 20 64 62 0a 7d 20 7b 30 20 7b 31 20  .  } db.} {0 {1 
1090: 34 20 35 20 31 30 7d 7d 0a 64 6f 5f 74 65 73 74  4 5 10}}.do_test
10a0: 20 61 76 74 72 61 6e 73 2d 34 2e 34 20 7b 0a 20   avtrans-4.4 {. 
10b0: 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20   catchsql {.    
10c0: 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 74 77  SELECT a FROM tw
10d0: 6f 20 4f 52 44 45 52 20 42 59 20 61 3b 0a 20 20  o ORDER BY a;.  
10e0: 7d 20 61 6c 74 64 62 0a 7d 20 7b 30 20 7b 31 20  } altdb.} {0 {1 
10f0: 34 20 35 20 31 30 7d 7d 0a 64 6f 5f 74 65 73 74  4 5 10}}.do_test
1100: 20 61 76 74 72 61 6e 73 2d 34 2e 35 20 7b 0a 20   avtrans-4.5 {. 
1110: 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20   catchsql {.    
1120: 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 6f 6e  SELECT a FROM on
1130: 65 20 4f 52 44 45 52 20 42 59 20 61 3b 0a 20 20  e ORDER BY a;.  
1140: 7d 20 61 6c 74 64 62 0a 7d 20 7b 30 20 7b 31 20  } altdb.} {0 {1 
1150: 32 20 33 20 34 7d 7d 0a 64 6f 5f 74 65 73 74 20  2 3 4}}.do_test 
1160: 61 76 74 72 61 6e 73 2d 34 2e 36 20 7b 0a 20 20  avtrans-4.6 {.  
1170: 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 42  catchsql {.    B
1180: 45 47 49 4e 20 54 52 41 4e 53 41 43 54 49 4f 4e  EGIN TRANSACTION
1190: 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 61 20 46  ;.    SELECT a F
11a0: 52 4f 4d 20 6f 6e 65 20 4f 52 44 45 52 20 42 59  ROM one ORDER BY
11b0: 20 61 3b 0a 20 20 7d 20 64 62 0a 7d 20 7b 31 20   a;.  } db.} {1 
11c0: 7b 63 61 6e 6e 6f 74 20 73 74 61 72 74 20 61 20  {cannot start a 
11d0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 77 69 74 68  transaction with
11e0: 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  in a transaction
11f0: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 76 74 72 61  }}.do_test avtra
1200: 6e 73 2d 34 2e 37 20 7b 0a 20 20 63 61 74 63 68  ns-4.7 {.  catch
1210: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
1220: 20 61 20 46 52 4f 4d 20 74 77 6f 20 4f 52 44 45   a FROM two ORDE
1230: 52 20 42 59 20 61 3b 0a 20 20 7d 20 61 6c 74 64  R BY a;.  } altd
1240: 62 0a 7d 20 7b 30 20 7b 31 20 34 20 35 20 31 30  b.} {0 {1 4 5 10
1250: 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 76 74 72 61  }}.do_test avtra
1260: 6e 73 2d 34 2e 38 20 7b 0a 20 20 63 61 74 63 68  ns-4.8 {.  catch
1270: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
1280: 20 61 20 46 52 4f 4d 20 6f 6e 65 20 4f 52 44 45   a FROM one ORDE
1290: 52 20 42 59 20 61 3b 0a 20 20 7d 20 61 6c 74 64  R BY a;.  } altd
12a0: 62 0a 7d 20 7b 30 20 7b 31 20 32 20 33 20 34 7d  b.} {0 {1 2 3 4}
12b0: 7d 0a 64 6f 5f 74 65 73 74 20 61 76 74 72 61 6e  }.do_test avtran
12c0: 73 2d 34 2e 39 20 7b 0a 20 20 73 65 74 20 76 20  s-4.9 {.  set v 
12d0: 5b 63 61 74 63 68 20 7b 65 78 65 63 73 71 6c 20  [catch {execsql 
12e0: 7b 0a 20 20 20 20 45 4e 44 20 54 52 41 4e 53 41  {.    END TRANSA
12f0: 43 54 49 4f 4e 3b 0a 20 20 20 20 53 45 4c 45 43  CTION;.    SELEC
1300: 54 20 61 20 46 52 4f 4d 20 74 77 6f 20 4f 52 44  T a FROM two ORD
1310: 45 52 20 42 59 20 61 3b 0a 20 20 7d 20 64 62 7d  ER BY a;.  } db}
1320: 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20   msg].  lappend 
1330: 76 20 24 6d 73 67 0a 7d 20 7b 30 20 7b 31 20 34  v $msg.} {0 {1 4
1340: 20 35 20 31 30 7d 7d 0a 64 6f 5f 74 65 73 74 20   5 10}}.do_test 
1350: 61 76 74 72 61 6e 73 2d 34 2e 31 30 20 7b 0a 20  avtrans-4.10 {. 
1360: 20 73 65 74 20 76 20 5b 63 61 74 63 68 20 7b 65   set v [catch {e
1370: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c  xecsql {.    SEL
1380: 45 43 54 20 61 20 46 52 4f 4d 20 74 77 6f 20 4f  ECT a FROM two O
1390: 52 44 45 52 20 42 59 20 61 3b 0a 20 20 7d 20 61  RDER BY a;.  } a
13a0: 6c 74 64 62 7d 20 6d 73 67 5d 0a 20 20 6c 61 70  ltdb} msg].  lap
13b0: 70 65 6e 64 20 76 20 24 6d 73 67 0a 7d 20 7b 30  pend v $msg.} {0
13c0: 20 7b 31 20 34 20 35 20 31 30 7d 7d 0a 64 6f 5f   {1 4 5 10}}.do_
13d0: 74 65 73 74 20 61 76 74 72 61 6e 73 2d 34 2e 31  test avtrans-4.1
13e0: 31 20 7b 0a 20 20 73 65 74 20 76 20 5b 63 61 74  1 {.  set v [cat
13f0: 63 68 20 7b 65 78 65 63 73 71 6c 20 7b 0a 20 20  ch {execsql {.  
1400: 20 20 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20    SELECT a FROM 
1410: 6f 6e 65 20 4f 52 44 45 52 20 42 59 20 61 3b 0a  one ORDER BY a;.
1420: 20 20 7d 20 61 6c 74 64 62 7d 20 6d 73 67 5d 0a    } altdb} msg].
1430: 20 20 6c 61 70 70 65 6e 64 20 76 20 24 6d 73 67    lappend v $msg
1440: 0a 7d 20 7b 30 20 7b 31 20 32 20 33 20 34 7d 7d  .} {0 {1 2 3 4}}
1450: 0a 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b  .integrity_check
1460: 20 61 76 74 72 61 6e 73 2d 34 2e 31 32 0a 64 6f   avtrans-4.12.do
1470: 5f 74 65 73 74 20 61 76 74 72 61 6e 73 2d 34 2e  _test avtrans-4.
1480: 39 38 20 7b 0a 20 20 61 6c 74 64 62 20 63 6c 6f  98 {.  altdb clo
1490: 73 65 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  se.  execsql {. 
14a0: 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20 6f 6e     DROP TABLE on
14b0: 65 3b 0a 20 20 20 20 44 52 4f 50 20 54 41 42 4c  e;.    DROP TABL
14c0: 45 20 74 77 6f 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a  E two;.  }.} {}.
14d0: 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 20  integrity_check 
14e0: 61 76 74 72 61 6e 73 2d 34 2e 39 39 0a 0a 23 20  avtrans-4.99..# 
14f0: 43 68 65 63 6b 20 6f 75 74 20 74 68 65 20 63 6f  Check out the co
1500: 6d 6d 69 74 2f 72 6f 6c 6c 62 61 63 6b 20 62 65  mmit/rollback be
1510: 68 61 76 69 6f 72 20 6f 66 20 74 68 65 20 64 61  havior of the da
1520: 74 61 62 61 73 65 0a 23 0a 64 6f 5f 74 65 73 74  tabase.#.do_test
1530: 20 61 76 74 72 61 6e 73 2d 35 2e 31 20 7b 0a 20   avtrans-5.1 {. 
1540: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
1550: 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74   name FROM sqlit
1560: 65 5f 6d 61 73 74 65 72 20 57 48 45 52 45 20 74  e_master WHERE t
1570: 79 70 65 3d 27 74 61 62 6c 65 27 20 4f 52 44 45  ype='table' ORDE
1580: 52 20 42 59 20 6e 61 6d 65 7d 0a 7d 20 7b 7d 0a  R BY name}.} {}.
1590: 64 6f 5f 74 65 73 74 20 61 76 74 72 61 6e 73 2d  do_test avtrans-
15a0: 35 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  5.2 {.  execsql 
15b0: 7b 42 45 47 49 4e 20 54 52 41 4e 53 41 43 54 49  {BEGIN TRANSACTI
15c0: 4f 4e 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  ON}.  execsql {S
15d0: 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20  ELECT name FROM 
15e0: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 57 48  sqlite_master WH
15f0: 45 52 45 20 74 79 70 65 3d 27 74 61 62 6c 65 27  ERE type='table'
1600: 20 4f 52 44 45 52 20 42 59 20 6e 61 6d 65 7d 0a   ORDER BY name}.
1610: 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 61 76 74  } {}.do_test avt
1620: 72 61 6e 73 2d 35 2e 33 20 7b 0a 20 20 65 78 65  rans-5.3 {.  exe
1630: 63 73 71 6c 20 7b 43 52 45 41 54 45 20 54 41 42  csql {CREATE TAB
1640: 4c 45 20 6f 6e 65 28 61 20 74 65 78 74 2c 20 62  LE one(a text, b
1650: 20 69 6e 74 29 7d 0a 20 20 65 78 65 63 73 71 6c   int)}.  execsql
1660: 20 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52   {SELECT name FR
1670: 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  OM sqlite_master
1680: 20 57 48 45 52 45 20 74 79 70 65 3d 27 74 61 62   WHERE type='tab
1690: 6c 65 27 20 4f 52 44 45 52 20 42 59 20 6e 61 6d  le' ORDER BY nam
16a0: 65 7d 0a 7d 20 7b 6f 6e 65 7d 0a 64 6f 5f 74 65  e}.} {one}.do_te
16b0: 73 74 20 61 76 74 72 61 6e 73 2d 35 2e 34 20 7b  st avtrans-5.4 {
16c0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
16d0: 43 54 20 61 2c 62 20 46 52 4f 4d 20 6f 6e 65 20  CT a,b FROM one 
16e0: 4f 52 44 45 52 20 42 59 20 62 7d 0a 7d 20 7b 7d  ORDER BY b}.} {}
16f0: 0a 64 6f 5f 74 65 73 74 20 61 76 74 72 61 6e 73  .do_test avtrans
1700: 2d 35 2e 35 20 7b 0a 20 20 65 78 65 63 73 71 6c  -5.5 {.  execsql
1710: 20 7b 49 4e 53 45 52 54 20 49 4e 54 4f 20 6f 6e   {INSERT INTO on
1720: 65 28 61 2c 62 29 20 56 41 4c 55 45 53 28 27 68  e(a,b) VALUES('h
1730: 65 6c 6c 6f 27 2c 20 31 29 7d 0a 20 20 65 78 65  ello', 1)}.  exe
1740: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 61 2c 62  csql {SELECT a,b
1750: 20 46 52 4f 4d 20 6f 6e 65 20 4f 52 44 45 52 20   FROM one ORDER 
1760: 42 59 20 62 7d 0a 7d 20 7b 68 65 6c 6c 6f 20 31  BY b}.} {hello 1
1770: 7d 0a 64 6f 5f 74 65 73 74 20 61 76 74 72 61 6e  }.do_test avtran
1780: 73 2d 35 2e 36 20 7b 0a 20 20 65 78 65 63 73 71  s-5.6 {.  execsq
1790: 6c 20 7b 52 4f 4c 4c 42 41 43 4b 7d 0a 20 20 65  l {ROLLBACK}.  e
17a0: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e  xecsql {SELECT n
17b0: 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  ame FROM sqlite_
17c0: 6d 61 73 74 65 72 20 57 48 45 52 45 20 74 79 70  master WHERE typ
17d0: 65 3d 27 74 61 62 6c 65 27 20 4f 52 44 45 52 20  e='table' ORDER 
17e0: 42 59 20 6e 61 6d 65 7d 0a 7d 20 7b 7d 0a 64 6f  BY name}.} {}.do
17f0: 5f 74 65 73 74 20 61 76 74 72 61 6e 73 2d 35 2e  _test avtrans-5.
1800: 37 20 7b 0a 20 20 73 65 74 20 76 20 5b 63 61 74  7 {.  set v [cat
1810: 63 68 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  ch {.    execsql
1820: 20 7b 53 45 4c 45 43 54 20 61 2c 62 20 46 52 4f   {SELECT a,b FRO
1830: 4d 20 6f 6e 65 20 4f 52 44 45 52 20 42 59 20 62  M one ORDER BY b
1840: 7d 0a 20 20 7d 20 6d 73 67 5d 0a 20 20 6c 61 70  }.  } msg].  lap
1850: 70 65 6e 64 20 76 20 24 6d 73 67 0a 7d 20 7b 31  pend v $msg.} {1
1860: 20 7b 6e 6f 20 73 75 63 68 20 74 61 62 6c 65 3a   {no such table:
1870: 20 6f 6e 65 7d 7d 0a 0a 23 20 54 65 73 74 20 63   one}}..# Test c
1880: 6f 6d 6d 69 74 73 20 61 6e 64 20 72 6f 6c 6c 62  ommits and rollb
1890: 61 63 6b 73 20 6f 66 20 74 61 62 6c 65 20 43 52  acks of table CR
18a0: 45 41 54 45 20 54 41 42 4c 45 73 2c 20 43 52 45  EATE TABLEs, CRE
18b0: 41 54 45 20 49 4e 44 45 58 73 0a 23 20 44 52 4f  ATE INDEXs.# DRO
18c0: 50 20 54 41 42 4c 45 73 20 61 6e 64 20 44 52 4f  P TABLEs and DRO
18d0: 50 20 49 4e 44 45 58 73 0a 23 0a 64 6f 5f 74 65  P INDEXs.#.do_te
18e0: 73 74 20 61 76 74 72 61 6e 73 2d 35 2e 38 20 7b  st avtrans-5.8 {
18f0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
1900: 20 53 45 4c 45 43 54 20 6e 61 6d 65 20 66 52 4f   SELECT name fRO
1910: 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20  M sqlite_master 
1920: 0a 20 20 20 20 57 48 45 52 45 20 74 79 70 65 3d  .    WHERE type=
1930: 27 74 61 62 6c 65 27 20 4f 52 20 74 79 70 65 3d  'table' OR type=
1940: 27 69 6e 64 65 78 27 0a 20 20 20 20 4f 52 44 45  'index'.    ORDE
1950: 52 20 42 59 20 6e 61 6d 65 0a 20 20 7d 0a 7d 20  R BY name.  }.} 
1960: 7b 7d 0a 64 6f 5f 74 65 73 74 20 61 76 74 72 61  {}.do_test avtra
1970: 6e 73 2d 35 2e 39 20 7b 0a 20 20 65 78 65 63 73  ns-5.9 {.  execs
1980: 71 6c 20 7b 0a 20 20 20 20 42 45 47 49 4e 20 54  ql {.    BEGIN T
1990: 52 41 4e 53 41 43 54 49 4f 4e 3b 0a 20 20 20 20  RANSACTION;.    
19a0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28  CREATE TABLE t1(
19b0: 61 20 69 6e 74 2c 20 62 20 69 6e 74 2c 20 63 20  a int, b int, c 
19c0: 69 6e 74 29 3b 0a 20 20 20 20 53 45 4c 45 43 54  int);.    SELECT
19d0: 20 6e 61 6d 65 20 66 52 4f 4d 20 73 71 6c 69 74   name fROM sqlit
19e0: 65 5f 6d 61 73 74 65 72 20 0a 20 20 20 20 57 48  e_master .    WH
19f0: 45 52 45 20 74 79 70 65 3d 27 74 61 62 6c 65 27  ERE type='table'
1a00: 20 4f 52 20 74 79 70 65 3d 27 69 6e 64 65 78 27   OR type='index'
1a10: 0a 20 20 20 20 4f 52 44 45 52 20 42 59 20 6e 61  .    ORDER BY na
1a20: 6d 65 3b 0a 20 20 7d 0a 7d 20 7b 74 31 7d 0a 64  me;.  }.} {t1}.d
1a30: 6f 5f 74 65 73 74 20 61 76 74 72 61 6e 73 2d 35  o_test avtrans-5
1a40: 2e 31 30 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  .10 {.  execsql 
1a50: 7b 0a 20 20 20 20 43 52 45 41 54 45 20 49 4e 44  {.    CREATE IND
1a60: 45 58 20 69 31 20 4f 4e 20 74 31 28 61 29 3b 0a  EX i1 ON t1(a);.
1a70: 20 20 20 20 53 45 4c 45 43 54 20 6e 61 6d 65 20      SELECT name 
1a80: 66 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74  fROM sqlite_mast
1a90: 65 72 20 0a 20 20 20 20 57 48 45 52 45 20 74 79  er .    WHERE ty
1aa0: 70 65 3d 27 74 61 62 6c 65 27 20 4f 52 20 74 79  pe='table' OR ty
1ab0: 70 65 3d 27 69 6e 64 65 78 27 0a 20 20 20 20 4f  pe='index'.    O
1ac0: 52 44 45 52 20 42 59 20 6e 61 6d 65 3b 0a 20 20  RDER BY name;.  
1ad0: 7d 0a 7d 20 7b 69 31 20 74 31 7d 0a 64 6f 5f 74  }.} {i1 t1}.do_t
1ae0: 65 73 74 20 61 76 74 72 61 6e 73 2d 35 2e 31 31  est avtrans-5.11
1af0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
1b00: 20 20 20 43 4f 4d 4d 49 54 3b 0a 20 20 20 20 53     COMMIT;.    S
1b10: 45 4c 45 43 54 20 6e 61 6d 65 20 66 52 4f 4d 20  ELECT name fROM 
1b20: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 0a 20  sqlite_master . 
1b30: 20 20 20 57 48 45 52 45 20 74 79 70 65 3d 27 74     WHERE type='t
1b40: 61 62 6c 65 27 20 4f 52 20 74 79 70 65 3d 27 69  able' OR type='i
1b50: 6e 64 65 78 27 0a 20 20 20 20 4f 52 44 45 52 20  ndex'.    ORDER 
1b60: 42 59 20 6e 61 6d 65 3b 0a 20 20 7d 0a 7d 20 7b  BY name;.  }.} {
1b70: 69 31 20 74 31 7d 0a 64 6f 5f 74 65 73 74 20 61  i1 t1}.do_test a
1b80: 76 74 72 61 6e 73 2d 35 2e 31 32 20 7b 0a 20 20  vtrans-5.12 {.  
1b90: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 42 45  execsql {.    BE
1ba0: 47 49 4e 20 54 52 41 4e 53 41 43 54 49 4f 4e 3b  GIN TRANSACTION;
1bb0: 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  .    CREATE TABL
1bc0: 45 20 74 32 28 61 20 69 6e 74 2c 20 62 20 69 6e  E t2(a int, b in
1bd0: 74 2c 20 63 20 69 6e 74 29 3b 0a 20 20 20 20 43  t, c int);.    C
1be0: 52 45 41 54 45 20 49 4e 44 45 58 20 69 32 61 20  REATE INDEX i2a 
1bf0: 4f 4e 20 74 32 28 61 29 3b 0a 20 20 20 20 43 52  ON t2(a);.    CR
1c00: 45 41 54 45 20 49 4e 44 45 58 20 69 32 62 20 4f  EATE INDEX i2b O
1c10: 4e 20 74 32 28 62 29 3b 0a 20 20 20 20 44 52 4f  N t2(b);.    DRO
1c20: 50 20 54 41 42 4c 45 20 74 31 3b 0a 20 20 20 20  P TABLE t1;.    
1c30: 53 45 4c 45 43 54 20 6e 61 6d 65 20 66 52 4f 4d  SELECT name fROM
1c40: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 0a   sqlite_master .
1c50: 20 20 20 20 57 48 45 52 45 20 74 79 70 65 3d 27      WHERE type='
1c60: 74 61 62 6c 65 27 20 4f 52 20 74 79 70 65 3d 27  table' OR type='
1c70: 69 6e 64 65 78 27 0a 20 20 20 20 4f 52 44 45 52  index'.    ORDER
1c80: 20 42 59 20 6e 61 6d 65 3b 0a 20 20 7d 0a 7d 20   BY name;.  }.} 
1c90: 7b 69 32 61 20 69 32 62 20 74 32 7d 0a 64 6f 5f  {i2a i2b t2}.do_
1ca0: 74 65 73 74 20 61 76 74 72 61 6e 73 2d 35 2e 31  test avtrans-5.1
1cb0: 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  3 {.  execsql {.
1cc0: 20 20 20 20 52 4f 4c 4c 42 41 43 4b 3b 0a 20 20      ROLLBACK;.  
1cd0: 20 20 53 45 4c 45 43 54 20 6e 61 6d 65 20 66 52    SELECT name fR
1ce0: 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  OM sqlite_master
1cf0: 20 0a 20 20 20 20 57 48 45 52 45 20 74 79 70 65   .    WHERE type
1d00: 3d 27 74 61 62 6c 65 27 20 4f 52 20 74 79 70 65  ='table' OR type
1d10: 3d 27 69 6e 64 65 78 27 0a 20 20 20 20 4f 52 44  ='index'.    ORD
1d20: 45 52 20 42 59 20 6e 61 6d 65 3b 0a 20 20 7d 0a  ER BY name;.  }.
1d30: 7d 20 7b 69 31 20 74 31 7d 0a 64 6f 5f 74 65 73  } {i1 t1}.do_tes
1d40: 74 20 61 76 74 72 61 6e 73 2d 35 2e 31 34 20 7b  t avtrans-5.14 {
1d50: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
1d60: 20 42 45 47 49 4e 20 54 52 41 4e 53 41 43 54 49   BEGIN TRANSACTI
1d70: 4f 4e 3b 0a 20 20 20 20 44 52 4f 50 20 49 4e 44  ON;.    DROP IND
1d80: 45 58 20 69 31 3b 0a 20 20 20 20 53 45 4c 45 43  EX i1;.    SELEC
1d90: 54 20 6e 61 6d 65 20 66 52 4f 4d 20 73 71 6c 69  T name fROM sqli
1da0: 74 65 5f 6d 61 73 74 65 72 20 0a 20 20 20 20 57  te_master .    W
1db0: 48 45 52 45 20 74 79 70 65 3d 27 74 61 62 6c 65  HERE type='table
1dc0: 27 20 4f 52 20 74 79 70 65 3d 27 69 6e 64 65 78  ' OR type='index
1dd0: 27 0a 20 20 20 20 4f 52 44 45 52 20 42 59 20 6e  '.    ORDER BY n
1de0: 61 6d 65 3b 0a 20 20 7d 0a 7d 20 7b 74 31 7d 0a  ame;.  }.} {t1}.
1df0: 64 6f 5f 74 65 73 74 20 61 76 74 72 61 6e 73 2d  do_test avtrans-
1e00: 35 2e 31 35 20 7b 0a 20 20 65 78 65 63 73 71 6c  5.15 {.  execsql
1e10: 20 7b 0a 20 20 20 20 52 4f 4c 4c 42 41 43 4b 3b   {.    ROLLBACK;
1e20: 0a 20 20 20 20 53 45 4c 45 43 54 20 6e 61 6d 65  .    SELECT name
1e30: 20 66 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73   fROM sqlite_mas
1e40: 74 65 72 20 0a 20 20 20 20 57 48 45 52 45 20 74  ter .    WHERE t
1e50: 79 70 65 3d 27 74 61 62 6c 65 27 20 4f 52 20 74  ype='table' OR t
1e60: 79 70 65 3d 27 69 6e 64 65 78 27 0a 20 20 20 20  ype='index'.    
1e70: 4f 52 44 45 52 20 42 59 20 6e 61 6d 65 3b 0a 20  ORDER BY name;. 
1e80: 20 7d 0a 7d 20 7b 69 31 20 74 31 7d 0a 64 6f 5f   }.} {i1 t1}.do_
1e90: 74 65 73 74 20 61 76 74 72 61 6e 73 2d 35 2e 31  test avtrans-5.1
1ea0: 36 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  6 {.  execsql {.
1eb0: 20 20 20 20 42 45 47 49 4e 20 54 52 41 4e 53 41      BEGIN TRANSA
1ec0: 43 54 49 4f 4e 3b 0a 20 20 20 20 44 52 4f 50 20  CTION;.    DROP 
1ed0: 49 4e 44 45 58 20 69 31 3b 0a 20 20 20 20 43 52  INDEX i1;.    CR
1ee0: 45 41 54 45 20 54 41 42 4c 45 20 74 32 28 78 20  EATE TABLE t2(x 
1ef0: 69 6e 74 2c 20 79 20 69 6e 74 2c 20 7a 20 69 6e  int, y int, z in
1f00: 74 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20 49  t);.    CREATE I
1f10: 4e 44 45 58 20 69 32 78 20 4f 4e 20 74 32 28 78  NDEX i2x ON t2(x
1f20: 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20 49 4e  );.    CREATE IN
1f30: 44 45 58 20 69 32 79 20 4f 4e 20 74 32 28 79 29  DEX i2y ON t2(y)
1f40: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
1f50: 4f 20 74 32 20 56 41 4c 55 45 53 28 31 2c 32 2c  O t2 VALUES(1,2,
1f60: 33 29 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 6e  3);.    SELECT n
1f70: 61 6d 65 20 66 52 4f 4d 20 73 71 6c 69 74 65 5f  ame fROM sqlite_
1f80: 6d 61 73 74 65 72 20 0a 20 20 20 20 57 48 45 52  master .    WHER
1f90: 45 20 74 79 70 65 3d 27 74 61 62 6c 65 27 20 4f  E type='table' O
1fa0: 52 20 74 79 70 65 3d 27 69 6e 64 65 78 27 0a 20  R type='index'. 
1fb0: 20 20 20 4f 52 44 45 52 20 42 59 20 6e 61 6d 65     ORDER BY name
1fc0: 3b 0a 20 20 7d 0a 7d 20 7b 69 32 78 20 69 32 79  ;.  }.} {i2x i2y
1fd0: 20 74 31 20 74 32 7d 0a 64 6f 5f 74 65 73 74 20   t1 t2}.do_test 
1fe0: 61 76 74 72 61 6e 73 2d 35 2e 31 37 20 7b 0a 20  avtrans-5.17 {. 
1ff0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43   execsql {.    C
2000: 4f 4d 4d 49 54 3b 0a 20 20 20 20 53 45 4c 45 43  OMMIT;.    SELEC
2010: 54 20 6e 61 6d 65 20 66 52 4f 4d 20 73 71 6c 69  T name fROM sqli
2020: 74 65 5f 6d 61 73 74 65 72 20 0a 20 20 20 20 57  te_master .    W
2030: 48 45 52 45 20 74 79 70 65 3d 27 74 61 62 6c 65  HERE type='table
2040: 27 20 4f 52 20 74 79 70 65 3d 27 69 6e 64 65 78  ' OR type='index
2050: 27 0a 20 20 20 20 4f 52 44 45 52 20 42 59 20 6e  '.    ORDER BY n
2060: 61 6d 65 3b 0a 20 20 7d 0a 7d 20 7b 69 32 78 20  ame;.  }.} {i2x 
2070: 69 32 79 20 74 31 20 74 32 7d 0a 64 6f 5f 74 65  i2y t1 t2}.do_te
2080: 73 74 20 61 76 74 72 61 6e 73 2d 35 2e 31 38 20  st avtrans-5.18 
2090: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
20a0: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
20b0: 74 32 3b 0a 20 20 7d 0a 7d 20 7b 31 20 32 20 33  t2;.  }.} {1 2 3
20c0: 7d 0a 64 6f 5f 74 65 73 74 20 61 76 74 72 61 6e  }.do_test avtran
20d0: 73 2d 35 2e 31 39 20 7b 0a 20 20 65 78 65 63 73  s-5.19 {.  execs
20e0: 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  ql {.    SELECT 
20f0: 78 20 46 52 4f 4d 20 74 32 20 57 48 45 52 45 20  x FROM t2 WHERE 
2100: 79 3d 32 3b 0a 20 20 7d 0a 7d 20 7b 31 7d 0a 64  y=2;.  }.} {1}.d
2110: 6f 5f 74 65 73 74 20 61 76 74 72 61 6e 73 2d 35  o_test avtrans-5
2120: 2e 32 30 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  .20 {.  execsql 
2130: 7b 0a 20 20 20 20 42 45 47 49 4e 20 54 52 41 4e  {.    BEGIN TRAN
2140: 53 41 43 54 49 4f 4e 3b 0a 20 20 20 20 44 52 4f  SACTION;.    DRO
2150: 50 20 54 41 42 4c 45 20 74 31 3b 0a 20 20 20 20  P TABLE t1;.    
2160: 44 52 4f 50 20 54 41 42 4c 45 20 74 32 3b 0a 20  DROP TABLE t2;. 
2170: 20 20 20 53 45 4c 45 43 54 20 6e 61 6d 65 20 66     SELECT name f
2180: 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
2190: 72 20 0a 20 20 20 20 57 48 45 52 45 20 74 79 70  r .    WHERE typ
21a0: 65 3d 27 74 61 62 6c 65 27 20 4f 52 20 74 79 70  e='table' OR typ
21b0: 65 3d 27 69 6e 64 65 78 27 0a 20 20 20 20 4f 52  e='index'.    OR
21c0: 44 45 52 20 42 59 20 6e 61 6d 65 3b 0a 20 20 7d  DER BY name;.  }
21d0: 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 61 76  .} {}.do_test av
21e0: 74 72 61 6e 73 2d 35 2e 32 31 20 7b 0a 20 20 73  trans-5.21 {.  s
21f0: 65 74 20 72 20 5b 63 61 74 63 68 20 7b 65 78 65  et r [catch {exe
2200: 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43  csql {.    SELEC
2210: 54 20 2a 20 46 52 4f 4d 20 74 32 0a 20 20 7d 7d  T * FROM t2.  }}
2220: 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20   msg].  lappend 
2230: 72 20 24 6d 73 67 0a 7d 20 7b 31 20 7b 6e 6f 20  r $msg.} {1 {no 
2240: 73 75 63 68 20 74 61 62 6c 65 3a 20 74 32 7d 7d  such table: t2}}
2250: 0a 64 6f 5f 74 65 73 74 20 61 76 74 72 61 6e 73  .do_test avtrans
2260: 2d 35 2e 32 32 20 7b 0a 20 20 65 78 65 63 73 71  -5.22 {.  execsq
2270: 6c 20 7b 0a 20 20 20 20 52 4f 4c 4c 42 41 43 4b  l {.    ROLLBACK
2280: 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 6e 61 6d  ;.    SELECT nam
2290: 65 20 66 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61  e fROM sqlite_ma
22a0: 73 74 65 72 20 0a 20 20 20 20 57 48 45 52 45 20  ster .    WHERE 
22b0: 74 79 70 65 3d 27 74 61 62 6c 65 27 20 4f 52 20  type='table' OR 
22c0: 74 79 70 65 3d 27 69 6e 64 65 78 27 0a 20 20 20  type='index'.   
22d0: 20 4f 52 44 45 52 20 42 59 20 6e 61 6d 65 3b 0a   ORDER BY name;.
22e0: 20 20 7d 0a 7d 20 7b 69 32 78 20 69 32 79 20 74    }.} {i2x i2y t
22f0: 31 20 74 32 7d 0a 64 6f 5f 74 65 73 74 20 61 76  1 t2}.do_test av
2300: 74 72 61 6e 73 2d 35 2e 32 33 20 7b 0a 20 20 65  trans-5.23 {.  e
2310: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c  xecsql {.    SEL
2320: 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 3b 0a 20  ECT * FROM t2;. 
2330: 20 7d 0a 7d 20 7b 31 20 32 20 33 7d 0a 69 6e 74   }.} {1 2 3}.int
2340: 65 67 72 69 74 79 5f 63 68 65 63 6b 20 61 76 74  egrity_check avt
2350: 72 61 6e 73 2d 35 2e 32 33 0a 0a 0a 23 20 54 72  rans-5.23...# Tr
2360: 79 20 74 6f 20 44 52 4f 50 20 61 6e 64 20 43 52  y to DROP and CR
2370: 45 41 54 45 20 74 61 62 6c 65 73 20 61 6e 64 20  EATE tables and 
2380: 69 6e 64 69 63 65 73 20 77 69 74 68 20 74 68 65  indices with the
2390: 20 73 61 6d 65 20 6e 61 6d 65 0a 23 20 77 69 74   same name.# wit
23a0: 68 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f  hin a transactio
23b0: 6e 2e 20 20 4d 61 6b 65 20 73 75 72 65 20 52 4f  n.  Make sure RO
23c0: 4c 4c 42 41 43 4b 20 77 6f 72 6b 73 2e 0a 23 0a  LLBACK works..#.
23d0: 64 6f 5f 74 65 73 74 20 61 76 74 72 61 6e 73 2d  do_test avtrans-
23e0: 36 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 32  6.1 {.  execsql2
23f0: 20 7b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e   {.    INSERT IN
2400: 54 4f 20 74 31 20 56 41 4c 55 45 53 28 31 2c 32  TO t1 VALUES(1,2
2410: 2c 33 29 3b 0a 20 20 20 20 42 45 47 49 4e 20 54  ,3);.    BEGIN T
2420: 52 41 4e 53 41 43 54 49 4f 4e 3b 0a 20 20 20 20  RANSACTION;.    
2430: 44 52 4f 50 20 54 41 42 4c 45 20 74 31 3b 0a 20  DROP TABLE t1;. 
2440: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
2450: 74 31 28 70 2c 71 2c 72 29 3b 0a 20 20 20 20 52  t1(p,q,r);.    R
2460: 4f 4c 4c 42 41 43 4b 3b 0a 20 20 20 20 53 45 4c  OLLBACK;.    SEL
2470: 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 3b 0a 20  ECT * FROM t1;. 
2480: 20 7d 0a 7d 20 7b 61 20 31 20 62 20 32 20 63 20   }.} {a 1 b 2 c 
2490: 33 7d 0a 64 6f 5f 74 65 73 74 20 61 76 74 72 61  3}.do_test avtra
24a0: 6e 73 2d 36 2e 32 20 7b 0a 20 20 65 78 65 63 73  ns-6.2 {.  execs
24b0: 71 6c 32 20 7b 0a 20 20 20 20 49 4e 53 45 52 54  ql2 {.    INSERT
24c0: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
24d0: 31 2c 32 2c 33 29 3b 0a 20 20 20 20 42 45 47 49  1,2,3);.    BEGI
24e0: 4e 20 54 52 41 4e 53 41 43 54 49 4f 4e 3b 0a 20  N TRANSACTION;. 
24f0: 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20 74 31     DROP TABLE t1
2500: 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42  ;.    CREATE TAB
2510: 4c 45 20 74 31 28 70 2c 71 2c 72 29 3b 0a 20 20  LE t1(p,q,r);.  
2520: 20 20 43 4f 4d 4d 49 54 3b 0a 20 20 20 20 53 45    COMMIT;.    SE
2530: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 3b 0a  LECT * FROM t1;.
2540: 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74    }.} {}.do_test
2550: 20 61 76 74 72 61 6e 73 2d 36 2e 33 20 7b 0a 20   avtrans-6.3 {. 
2560: 20 65 78 65 63 73 71 6c 32 20 7b 0a 20 20 20 20   execsql2 {.    
2570: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56  INSERT INTO t1 V
2580: 41 4c 55 45 53 28 31 2c 32 2c 33 29 3b 0a 20 20  ALUES(1,2,3);.  
2590: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
25a0: 74 31 3b 0a 20 20 7d 0a 7d 20 7b 70 20 31 20 71  t1;.  }.} {p 1 q
25b0: 20 32 20 72 20 33 7d 0a 64 6f 5f 74 65 73 74 20   2 r 3}.do_test 
25c0: 61 76 74 72 61 6e 73 2d 36 2e 34 20 7b 0a 20 20  avtrans-6.4 {.  
25d0: 65 78 65 63 73 71 6c 32 20 7b 0a 20 20 20 20 42  execsql2 {.    B
25e0: 45 47 49 4e 20 54 52 41 4e 53 41 43 54 49 4f 4e  EGIN TRANSACTION
25f0: 3b 0a 20 20 20 20 44 52 4f 50 20 54 41 42 4c 45  ;.    DROP TABLE
2600: 20 74 31 3b 0a 20 20 20 20 43 52 45 41 54 45 20   t1;.    CREATE 
2610: 54 41 42 4c 45 20 74 31 28 61 2c 62 2c 63 29 3b  TABLE t1(a,b,c);
2620: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
2630: 20 74 31 20 56 41 4c 55 45 53 28 34 2c 35 2c 36   t1 VALUES(4,5,6
2640: 29 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20  );.    SELECT * 
2650: 46 52 4f 4d 20 74 31 3b 0a 20 20 20 20 44 52 4f  FROM t1;.    DRO
2660: 50 20 54 41 42 4c 45 20 74 31 3b 0a 20 20 7d 0a  P TABLE t1;.  }.
2670: 7d 20 7b 61 20 34 20 62 20 35 20 63 20 36 7d 0a  } {a 4 b 5 c 6}.
2680: 64 6f 5f 74 65 73 74 20 61 76 74 72 61 6e 73 2d  do_test avtrans-
2690: 36 2e 35 20 7b 0a 20 20 65 78 65 63 73 71 6c 32  6.5 {.  execsql2
26a0: 20 7b 0a 20 20 20 20 52 4f 4c 4c 42 41 43 4b 3b   {.    ROLLBACK;
26b0: 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52  .    SELECT * FR
26c0: 4f 4d 20 74 31 3b 0a 20 20 7d 0a 7d 20 7b 70 20  OM t1;.  }.} {p 
26d0: 31 20 71 20 32 20 72 20 33 7d 0a 64 6f 5f 74 65  1 q 2 r 3}.do_te
26e0: 73 74 20 61 76 74 72 61 6e 73 2d 36 2e 36 20 7b  st avtrans-6.6 {
26f0: 0a 20 20 65 78 65 63 73 71 6c 32 20 7b 0a 20 20  .  execsql2 {.  
2700: 20 20 42 45 47 49 4e 20 54 52 41 4e 53 41 43 54    BEGIN TRANSACT
2710: 49 4f 4e 3b 0a 20 20 20 20 44 52 4f 50 20 54 41  ION;.    DROP TA
2720: 42 4c 45 20 74 31 3b 0a 20 20 20 20 43 52 45 41  BLE t1;.    CREA
2730: 54 45 20 54 41 42 4c 45 20 74 31 28 61 2c 62 2c  TE TABLE t1(a,b,
2740: 63 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  c);.    INSERT I
2750: 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 34 2c  NTO t1 VALUES(4,
2760: 35 2c 36 29 3b 0a 20 20 20 20 53 45 4c 45 43 54  5,6);.    SELECT
2770: 20 2a 20 46 52 4f 4d 20 74 31 3b 0a 20 20 20 20   * FROM t1;.    
2780: 44 52 4f 50 20 54 41 42 4c 45 20 74 31 3b 0a 20  DROP TABLE t1;. 
2790: 20 7d 0a 7d 20 7b 61 20 34 20 62 20 35 20 63 20   }.} {a 4 b 5 c 
27a0: 36 7d 0a 64 6f 5f 74 65 73 74 20 61 76 74 72 61  6}.do_test avtra
27b0: 6e 73 2d 36 2e 37 20 7b 0a 20 20 63 61 74 63 68  ns-6.7 {.  catch
27c0: 73 71 6c 20 7b 0a 20 20 20 20 43 4f 4d 4d 49 54  sql {.    COMMIT
27d0: 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  ;.    SELECT * F
27e0: 52 4f 4d 20 74 31 3b 0a 20 20 7d 0a 7d 20 7b 31  ROM t1;.  }.} {1
27f0: 20 7b 6e 6f 20 73 75 63 68 20 74 61 62 6c 65 3a   {no such table:
2800: 20 74 31 7d 7d 0a 0a 23 20 52 65 70 65 61 74 20   t1}}..# Repeat 
2810: 6f 6e 20 61 20 74 61 62 6c 65 20 77 69 74 68 20  on a table with 
2820: 61 6e 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  an automatically
2830: 20 67 65 6e 65 72 61 74 65 64 20 69 6e 64 65 78   generated index
2840: 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 61 76 74 72  ..#.do_test avtr
2850: 61 6e 73 2d 36 2e 31 30 20 7b 0a 20 20 65 78 65  ans-6.10 {.  exe
2860: 63 73 71 6c 32 20 7b 0a 20 20 20 20 43 52 45 41  csql2 {.    CREA
2870: 54 45 20 54 41 42 4c 45 20 74 31 28 61 20 75 6e  TE TABLE t1(a un
2880: 69 71 75 65 2c 62 2c 63 29 3b 0a 20 20 20 20 49  ique,b,c);.    I
2890: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41  NSERT INTO t1 VA
28a0: 4c 55 45 53 28 31 2c 32 2c 33 29 3b 0a 20 20 20  LUES(1,2,3);.   
28b0: 20 42 45 47 49 4e 20 54 52 41 4e 53 41 43 54 49   BEGIN TRANSACTI
28c0: 4f 4e 3b 0a 20 20 20 20 44 52 4f 50 20 54 41 42  ON;.    DROP TAB
28d0: 4c 45 20 74 31 3b 0a 20 20 20 20 43 52 45 41 54  LE t1;.    CREAT
28e0: 45 20 54 41 42 4c 45 20 74 31 28 70 20 75 6e 69  E TABLE t1(p uni
28f0: 71 75 65 2c 71 2c 72 29 3b 0a 20 20 20 20 52 4f  que,q,r);.    RO
2900: 4c 4c 42 41 43 4b 3b 0a 20 20 20 20 53 45 4c 45  LLBACK;.    SELE
2910: 43 54 20 2a 20 46 52 4f 4d 20 74 31 3b 0a 20 20  CT * FROM t1;.  
2920: 7d 0a 7d 20 7b 61 20 31 20 62 20 32 20 63 20 33  }.} {a 1 b 2 c 3
2930: 7d 0a 64 6f 5f 74 65 73 74 20 61 76 74 72 61 6e  }.do_test avtran
2940: 73 2d 36 2e 31 31 20 7b 0a 20 20 65 78 65 63 73  s-6.11 {.  execs
2950: 71 6c 32 20 7b 0a 20 20 20 20 42 45 47 49 4e 20  ql2 {.    BEGIN 
2960: 54 52 41 4e 53 41 43 54 49 4f 4e 3b 0a 20 20 20  TRANSACTION;.   
2970: 20 44 52 4f 50 20 54 41 42 4c 45 20 74 31 3b 0a   DROP TABLE t1;.
2980: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
2990: 20 74 31 28 70 20 75 6e 69 71 75 65 2c 71 2c 72   t1(p unique,q,r
29a0: 29 3b 0a 20 20 20 20 43 4f 4d 4d 49 54 3b 0a 20  );.    COMMIT;. 
29b0: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
29c0: 20 74 31 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f   t1;.  }.} {}.do
29d0: 5f 74 65 73 74 20 61 76 74 72 61 6e 73 2d 36 2e  _test avtrans-6.
29e0: 31 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 32 20  12 {.  execsql2 
29f0: 7b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  {.    INSERT INT
2a00: 4f 20 74 31 20 56 41 4c 55 45 53 28 31 2c 32 2c  O t1 VALUES(1,2,
2a10: 33 29 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a  3);.    SELECT *
2a20: 20 46 52 4f 4d 20 74 31 3b 0a 20 20 7d 0a 7d 20   FROM t1;.  }.} 
2a30: 7b 70 20 31 20 71 20 32 20 72 20 33 7d 0a 64 6f  {p 1 q 2 r 3}.do
2a40: 5f 74 65 73 74 20 61 76 74 72 61 6e 73 2d 36 2e  _test avtrans-6.
2a50: 31 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 32 20  13 {.  execsql2 
2a60: 7b 0a 20 20 20 20 42 45 47 49 4e 20 54 52 41 4e  {.    BEGIN TRAN
2a70: 53 41 43 54 49 4f 4e 3b 0a 20 20 20 20 44 52 4f  SACTION;.    DRO
2a80: 50 20 54 41 42 4c 45 20 74 31 3b 0a 20 20 20 20  P TABLE t1;.    
2a90: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28  CREATE TABLE t1(
2aa0: 61 20 75 6e 69 71 75 65 2c 62 2c 63 29 3b 0a 20  a unique,b,c);. 
2ab0: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
2ac0: 31 20 56 41 4c 55 45 53 28 34 2c 35 2c 36 29 3b  1 VALUES(4,5,6);
2ad0: 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52  .    SELECT * FR
2ae0: 4f 4d 20 74 31 3b 0a 20 20 20 20 44 52 4f 50 20  OM t1;.    DROP 
2af0: 54 41 42 4c 45 20 74 31 3b 0a 20 20 7d 0a 7d 20  TABLE t1;.  }.} 
2b00: 7b 61 20 34 20 62 20 35 20 63 20 36 7d 0a 64 6f  {a 4 b 5 c 6}.do
2b10: 5f 74 65 73 74 20 61 76 74 72 61 6e 73 2d 36 2e  _test avtrans-6.
2b20: 31 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 32 20  14 {.  execsql2 
2b30: 7b 0a 20 20 20 20 52 4f 4c 4c 42 41 43 4b 3b 0a  {.    ROLLBACK;.
2b40: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
2b50: 4d 20 74 31 3b 0a 20 20 7d 0a 7d 20 7b 70 20 31  M t1;.  }.} {p 1
2b60: 20 71 20 32 20 72 20 33 7d 0a 64 6f 5f 74 65 73   q 2 r 3}.do_tes
2b70: 74 20 61 76 74 72 61 6e 73 2d 36 2e 31 35 20 7b  t avtrans-6.15 {
2b80: 0a 20 20 65 78 65 63 73 71 6c 32 20 7b 0a 20 20  .  execsql2 {.  
2b90: 20 20 42 45 47 49 4e 20 54 52 41 4e 53 41 43 54    BEGIN TRANSACT
2ba0: 49 4f 4e 3b 0a 20 20 20 20 44 52 4f 50 20 54 41  ION;.    DROP TA
2bb0: 42 4c 45 20 74 31 3b 0a 20 20 20 20 43 52 45 41  BLE t1;.    CREA
2bc0: 54 45 20 54 41 42 4c 45 20 74 31 28 61 20 75 6e  TE TABLE t1(a un
2bd0: 69 71 75 65 2c 62 2c 63 29 3b 0a 20 20 20 20 49  ique,b,c);.    I
2be0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41  NSERT INTO t1 VA
2bf0: 4c 55 45 53 28 34 2c 35 2c 36 29 3b 0a 20 20 20  LUES(4,5,6);.   
2c00: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
2c10: 31 3b 0a 20 20 20 20 44 52 4f 50 20 54 41 42 4c  1;.    DROP TABL
2c20: 45 20 74 31 3b 0a 20 20 7d 0a 7d 20 7b 61 20 34  E t1;.  }.} {a 4
2c30: 20 62 20 35 20 63 20 36 7d 0a 64 6f 5f 74 65 73   b 5 c 6}.do_tes
2c40: 74 20 61 76 74 72 61 6e 73 2d 36 2e 31 36 20 7b  t avtrans-6.16 {
2c50: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20  .  catchsql {.  
2c60: 20 20 43 4f 4d 4d 49 54 3b 0a 20 20 20 20 53 45    COMMIT;.    SE
2c70: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 3b 0a  LECT * FROM t1;.
2c80: 20 20 7d 0a 7d 20 7b 31 20 7b 6e 6f 20 73 75 63    }.} {1 {no suc
2c90: 68 20 74 61 62 6c 65 3a 20 74 31 7d 7d 0a 0a 64  h table: t1}}..d
2ca0: 6f 5f 74 65 73 74 20 61 76 74 72 61 6e 73 2d 36  o_test avtrans-6
2cb0: 2e 32 30 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  .20 {.  execsql 
2cc0: 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42  {.    CREATE TAB
2cd0: 4c 45 20 74 31 28 61 20 69 6e 74 65 67 65 72 20  LE t1(a integer 
2ce0: 70 72 69 6d 61 72 79 20 6b 65 79 2c 62 2c 63 29  primary key,b,c)
2cf0: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
2d00: 4f 20 74 31 20 56 41 4c 55 45 53 28 31 2c 2d 32  O t1 VALUES(1,-2
2d10: 2c 2d 33 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  ,-3);.    INSERT
2d20: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
2d30: 34 2c 2d 35 2c 2d 36 29 3b 0a 20 20 20 20 53 45  4,-5,-6);.    SE
2d40: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 3b 0a  LECT * FROM t1;.
2d50: 20 20 7d 0a 7d 20 7b 31 20 2d 32 20 2d 33 20 34    }.} {1 -2 -3 4
2d60: 20 2d 35 20 2d 36 7d 0a 64 6f 5f 74 65 73 74 20   -5 -6}.do_test 
2d70: 61 76 74 72 61 6e 73 2d 36 2e 32 31 20 7b 0a 20  avtrans-6.21 {. 
2d80: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43   execsql {.    C
2d90: 52 45 41 54 45 20 49 4e 44 45 58 20 69 31 20 4f  REATE INDEX i1 O
2da0: 4e 20 74 31 28 62 29 3b 0a 20 20 20 20 53 45 4c  N t1(b);.    SEL
2db0: 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 57 48  ECT * FROM t1 WH
2dc0: 45 52 45 20 62 3c 31 3b 0a 20 20 7d 0a 7d 20 7b  ERE b<1;.  }.} {
2dd0: 34 20 2d 35 20 2d 36 20 31 20 2d 32 20 2d 33 7d  4 -5 -6 1 -2 -3}
2de0: 0a 64 6f 5f 74 65 73 74 20 61 76 74 72 61 6e 73  .do_test avtrans
2df0: 2d 36 2e 32 32 20 7b 0a 20 20 65 78 65 63 73 71  -6.22 {.  execsq
2e00: 6c 20 7b 0a 20 20 20 20 42 45 47 49 4e 20 54 52  l {.    BEGIN TR
2e10: 41 4e 53 41 43 54 49 4f 4e 3b 0a 20 20 20 20 44  ANSACTION;.    D
2e20: 52 4f 50 20 49 4e 44 45 58 20 69 31 3b 0a 20 20  ROP INDEX i1;.  
2e30: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
2e40: 74 31 20 57 48 45 52 45 20 62 3c 31 3b 0a 20 20  t1 WHERE b<1;.  
2e50: 20 20 52 4f 4c 4c 42 41 43 4b 3b 0a 20 20 7d 0a    ROLLBACK;.  }.
2e60: 7d 20 7b 31 20 2d 32 20 2d 33 20 34 20 2d 35 20  } {1 -2 -3 4 -5 
2e70: 2d 36 7d 0a 64 6f 5f 74 65 73 74 20 61 76 74 72  -6}.do_test avtr
2e80: 61 6e 73 2d 36 2e 32 33 20 7b 0a 20 20 65 78 65  ans-6.23 {.  exe
2e90: 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43  csql {.    SELEC
2ea0: 54 20 2a 20 46 52 4f 4d 20 74 31 20 57 48 45 52  T * FROM t1 WHER
2eb0: 45 20 62 3c 31 3b 0a 20 20 7d 0a 7d 20 7b 34 20  E b<1;.  }.} {4 
2ec0: 2d 35 20 2d 36 20 31 20 2d 32 20 2d 33 7d 0a 64  -5 -6 1 -2 -3}.d
2ed0: 6f 5f 74 65 73 74 20 61 76 74 72 61 6e 73 2d 36  o_test avtrans-6
2ee0: 2e 32 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  .24 {.  execsql 
2ef0: 7b 0a 20 20 20 20 42 45 47 49 4e 20 54 52 41 4e  {.    BEGIN TRAN
2f00: 53 41 43 54 49 4f 4e 3b 0a 20 20 20 20 44 52 4f  SACTION;.    DRO
2f10: 50 20 54 41 42 4c 45 20 74 31 3b 0a 20 20 20 20  P TABLE t1;.    
2f20: 52 4f 4c 4c 42 41 43 4b 3b 0a 20 20 20 20 53 45  ROLLBACK;.    SE
2f30: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 57  LECT * FROM t1 W
2f40: 48 45 52 45 20 62 3c 31 3b 0a 20 20 7d 0a 7d 20  HERE b<1;.  }.} 
2f50: 7b 34 20 2d 35 20 2d 36 20 31 20 2d 32 20 2d 33  {4 -5 -6 1 -2 -3
2f60: 7d 0a 0a 64 6f 5f 74 65 73 74 20 61 76 74 72 61  }..do_test avtra
2f70: 6e 73 2d 36 2e 32 35 20 7b 0a 20 20 65 78 65 63  ns-6.25 {.  exec
2f80: 73 71 6c 20 7b 0a 20 20 20 20 42 45 47 49 4e 20  sql {.    BEGIN 
2f90: 54 52 41 4e 53 41 43 54 49 4f 4e 3b 0a 20 20 20  TRANSACTION;.   
2fa0: 20 44 52 4f 50 20 49 4e 44 45 58 20 69 31 3b 0a   DROP INDEX i1;.
2fb0: 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45 58      CREATE INDEX
2fc0: 20 69 31 20 4f 4e 20 74 31 28 63 29 3b 0a 20 20   i1 ON t1(c);.  
2fd0: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
2fe0: 74 31 20 57 48 45 52 45 20 62 3c 31 3b 0a 20 20  t1 WHERE b<1;.  
2ff0: 7d 0a 7d 20 7b 31 20 2d 32 20 2d 33 20 34 20 2d  }.} {1 -2 -3 4 -
3000: 35 20 2d 36 7d 0a 64 6f 5f 74 65 73 74 20 61 76  5 -6}.do_test av
3010: 74 72 61 6e 73 2d 36 2e 32 36 20 7b 0a 20 20 65  trans-6.26 {.  e
3020: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c  xecsql {.    SEL
3030: 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 57 48  ECT * FROM t1 WH
3040: 45 52 45 20 63 3c 31 3b 0a 20 20 7d 0a 7d 20 7b  ERE c<1;.  }.} {
3050: 34 20 2d 35 20 2d 36 20 31 20 2d 32 20 2d 33 7d  4 -5 -6 1 -2 -3}
3060: 0a 64 6f 5f 74 65 73 74 20 61 76 74 72 61 6e 73  .do_test avtrans
3070: 2d 36 2e 32 37 20 7b 0a 20 20 65 78 65 63 73 71  -6.27 {.  execsq
3080: 6c 20 7b 0a 20 20 20 20 52 4f 4c 4c 42 41 43 4b  l {.    ROLLBACK
3090: 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  ;.    SELECT * F
30a0: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 62 3c 31  ROM t1 WHERE b<1
30b0: 3b 0a 20 20 7d 0a 7d 20 7b 34 20 2d 35 20 2d 36  ;.  }.} {4 -5 -6
30c0: 20 31 20 2d 32 20 2d 33 7d 0a 64 6f 5f 74 65 73   1 -2 -3}.do_tes
30d0: 74 20 61 76 74 72 61 6e 73 2d 36 2e 32 38 20 7b  t avtrans-6.28 {
30e0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
30f0: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
3100: 31 20 57 48 45 52 45 20 63 3c 31 3b 0a 20 20 7d  1 WHERE c<1;.  }
3110: 0a 7d 20 7b 31 20 2d 32 20 2d 33 20 34 20 2d 35  .} {1 -2 -3 4 -5
3120: 20 2d 36 7d 0a 0a 23 20 54 68 65 20 66 6f 6c 6c   -6}..# The foll
3130: 6f 77 69 6e 67 20 72 65 70 65 61 74 73 20 73 74  owing repeats st
3140: 65 70 73 20 36 2e 32 30 20 74 68 72 6f 75 67 68  eps 6.20 through
3150: 20 36 2e 32 38 2c 20 62 75 74 20 70 75 74 73 20   6.28, but puts 
3160: 61 20 22 75 6e 69 71 75 65 22 0a 23 20 63 6f 6e  a "unique".# con
3170: 73 74 72 61 69 6e 74 20 74 68 65 20 66 69 72 73  straint the firs
3180: 74 20 66 69 65 6c 64 20 6f 66 20 74 68 65 20 74  t field of the t
3190: 61 62 6c 65 20 69 6e 20 6f 72 64 65 72 20 74 6f  able in order to
31a0: 20 67 65 6e 65 72 61 74 65 20 61 6e 0a 23 20 61   generate an.# a
31b0: 75 74 6f 6d 61 74 69 63 20 69 6e 64 65 78 2e 0a  utomatic index..
31c0: 23 0a 64 6f 5f 74 65 73 74 20 61 76 74 72 61 6e  #.do_test avtran
31d0: 73 2d 36 2e 33 30 20 7b 0a 20 20 65 78 65 63 73  s-6.30 {.  execs
31e0: 71 6c 20 7b 0a 20 20 20 20 42 45 47 49 4e 20 54  ql {.    BEGIN T
31f0: 52 41 4e 53 41 43 54 49 4f 4e 3b 0a 20 20 20 20  RANSACTION;.    
3200: 44 52 4f 50 20 54 41 42 4c 45 20 74 31 3b 0a 20  DROP TABLE t1;. 
3210: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
3220: 74 31 28 61 20 69 6e 74 20 75 6e 69 71 75 65 2c  t1(a int unique,
3230: 62 2c 63 29 3b 0a 20 20 20 20 43 4f 4d 4d 49 54  b,c);.    COMMIT
3240: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
3250: 4f 20 74 31 20 56 41 4c 55 45 53 28 31 2c 2d 32  O t1 VALUES(1,-2
3260: 2c 2d 33 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  ,-3);.    INSERT
3270: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
3280: 34 2c 2d 35 2c 2d 36 29 3b 0a 20 20 20 20 53 45  4,-5,-6);.    SE
3290: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 4f  LECT * FROM t1 O
32a0: 52 44 45 52 20 42 59 20 61 3b 0a 20 20 7d 0a 7d  RDER BY a;.  }.}
32b0: 20 7b 31 20 2d 32 20 2d 33 20 34 20 2d 35 20 2d   {1 -2 -3 4 -5 -
32c0: 36 7d 0a 64 6f 5f 74 65 73 74 20 61 76 74 72 61  6}.do_test avtra
32d0: 6e 73 2d 36 2e 33 31 20 7b 0a 20 20 65 78 65 63  ns-6.31 {.  exec
32e0: 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45  sql {.    CREATE
32f0: 20 49 4e 44 45 58 20 69 31 20 4f 4e 20 74 31 28   INDEX i1 ON t1(
3300: 62 29 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a  b);.    SELECT *
3310: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 62   FROM t1 WHERE b
3320: 3c 31 3b 0a 20 20 7d 0a 7d 20 7b 34 20 2d 35 20  <1;.  }.} {4 -5 
3330: 2d 36 20 31 20 2d 32 20 2d 33 7d 0a 64 6f 5f 74  -6 1 -2 -3}.do_t
3340: 65 73 74 20 61 76 74 72 61 6e 73 2d 36 2e 33 32  est avtrans-6.32
3350: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
3360: 20 20 20 42 45 47 49 4e 20 54 52 41 4e 53 41 43     BEGIN TRANSAC
3370: 54 49 4f 4e 3b 0a 20 20 20 20 44 52 4f 50 20 49  TION;.    DROP I
3380: 4e 44 45 58 20 69 31 3b 0a 20 20 20 20 53 45 4c  NDEX i1;.    SEL
3390: 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 57 48  ECT * FROM t1 WH
33a0: 45 52 45 20 62 3c 31 3b 0a 20 20 20 20 52 4f 4c  ERE b<1;.    ROL
33b0: 4c 42 41 43 4b 3b 0a 20 20 7d 0a 7d 20 7b 31 20  LBACK;.  }.} {1 
33c0: 2d 32 20 2d 33 20 34 20 2d 35 20 2d 36 7d 0a 64  -2 -3 4 -5 -6}.d
33d0: 6f 5f 74 65 73 74 20 61 76 74 72 61 6e 73 2d 36  o_test avtrans-6
33e0: 2e 33 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  .33 {.  execsql 
33f0: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  {.    SELECT * F
3400: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 62 3c 31  ROM t1 WHERE b<1
3410: 3b 0a 20 20 7d 0a 7d 20 7b 34 20 2d 35 20 2d 36  ;.  }.} {4 -5 -6
3420: 20 31 20 2d 32 20 2d 33 7d 0a 64 6f 5f 74 65 73   1 -2 -3}.do_tes
3430: 74 20 61 76 74 72 61 6e 73 2d 36 2e 33 34 20 7b  t avtrans-6.34 {
3440: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
3450: 20 42 45 47 49 4e 20 54 52 41 4e 53 41 43 54 49   BEGIN TRANSACTI
3460: 4f 4e 3b 0a 20 20 20 20 44 52 4f 50 20 54 41 42  ON;.    DROP TAB
3470: 4c 45 20 74 31 3b 0a 20 20 20 20 52 4f 4c 4c 42  LE t1;.    ROLLB
3480: 41 43 4b 3b 0a 20 20 20 20 53 45 4c 45 43 54 20  ACK;.    SELECT 
3490: 2a 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  * FROM t1 WHERE 
34a0: 62 3c 31 3b 0a 20 20 7d 0a 7d 20 7b 34 20 2d 35  b<1;.  }.} {4 -5
34b0: 20 2d 36 20 31 20 2d 32 20 2d 33 7d 0a 0a 64 6f   -6 1 -2 -3}..do
34c0: 5f 74 65 73 74 20 61 76 74 72 61 6e 73 2d 36 2e  _test avtrans-6.
34d0: 33 35 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  35 {.  execsql {
34e0: 0a 20 20 20 20 42 45 47 49 4e 20 54 52 41 4e 53  .    BEGIN TRANS
34f0: 41 43 54 49 4f 4e 3b 0a 20 20 20 20 44 52 4f 50  ACTION;.    DROP
3500: 20 49 4e 44 45 58 20 69 31 3b 0a 20 20 20 20 43   INDEX i1;.    C
3510: 52 45 41 54 45 20 49 4e 44 45 58 20 69 31 20 4f  REATE INDEX i1 O
3520: 4e 20 74 31 28 63 29 3b 0a 20 20 20 20 53 45 4c  N t1(c);.    SEL
3530: 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 57 48  ECT * FROM t1 WH
3540: 45 52 45 20 62 3c 31 3b 0a 20 20 7d 0a 7d 20 7b  ERE b<1;.  }.} {
3550: 31 20 2d 32 20 2d 33 20 34 20 2d 35 20 2d 36 7d  1 -2 -3 4 -5 -6}
3560: 0a 64 6f 5f 74 65 73 74 20 61 76 74 72 61 6e 73  .do_test avtrans
3570: 2d 36 2e 33 36 20 7b 0a 20 20 65 78 65 63 73 71  -6.36 {.  execsq
3580: 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a  l {.    SELECT *
3590: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 63   FROM t1 WHERE c
35a0: 3c 31 3b 0a 20 20 7d 0a 7d 20 7b 34 20 2d 35 20  <1;.  }.} {4 -5 
35b0: 2d 36 20 31 20 2d 32 20 2d 33 7d 0a 64 6f 5f 74  -6 1 -2 -3}.do_t
35c0: 65 73 74 20 61 76 74 72 61 6e 73 2d 36 2e 33 37  est avtrans-6.37
35d0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
35e0: 20 20 20 44 52 4f 50 20 49 4e 44 45 58 20 69 31     DROP INDEX i1
35f0: 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  ;.    SELECT * F
3600: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 63 3c 31  ROM t1 WHERE c<1
3610: 3b 0a 20 20 7d 0a 7d 20 7b 31 20 2d 32 20 2d 33  ;.  }.} {1 -2 -3
3620: 20 34 20 2d 35 20 2d 36 7d 0a 64 6f 5f 74 65 73   4 -5 -6}.do_tes
3630: 74 20 61 76 74 72 61 6e 73 2d 36 2e 33 38 20 7b  t avtrans-6.38 {
3640: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
3650: 20 52 4f 4c 4c 42 41 43 4b 3b 0a 20 20 20 20 53   ROLLBACK;.    S
3660: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20  ELECT * FROM t1 
3670: 57 48 45 52 45 20 62 3c 31 3b 0a 20 20 7d 0a 7d  WHERE b<1;.  }.}
3680: 20 7b 34 20 2d 35 20 2d 36 20 31 20 2d 32 20 2d   {4 -5 -6 1 -2 -
3690: 33 7d 0a 64 6f 5f 74 65 73 74 20 61 76 74 72 61  3}.do_test avtra
36a0: 6e 73 2d 36 2e 33 39 20 7b 0a 20 20 65 78 65 63  ns-6.39 {.  exec
36b0: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
36c0: 20 2a 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45   * FROM t1 WHERE
36d0: 20 63 3c 31 3b 0a 20 20 7d 0a 7d 20 7b 31 20 2d   c<1;.  }.} {1 -
36e0: 32 20 2d 33 20 34 20 2d 35 20 2d 36 7d 0a 69 6e  2 -3 4 -5 -6}.in
36f0: 74 65 67 72 69 74 79 5f 63 68 65 63 6b 20 61 76  tegrity_check av
3700: 74 72 61 6e 73 2d 36 2e 34 30 0a 0a 69 66 63 61  trans-6.40..ifca
3710: 70 61 62 6c 65 20 21 66 6c 6f 61 74 69 6e 67 70  pable !floatingp
3720: 6f 69 6e 74 20 7b 0a 20 20 66 69 6e 69 73 68 5f  oint {.  finish_
3730: 74 65 73 74 0a 20 20 72 65 74 75 72 6e 0a 7d 0a  test.  return.}.
3740: 0a 23 20 54 65 73 74 20 74 6f 20 6d 61 6b 65 20  .# Test to make 
3750: 73 75 72 65 20 72 6f 6c 6c 62 61 63 6b 20 72 65  sure rollback re
3760: 73 74 6f 72 65 73 20 74 68 65 20 64 61 74 61 62  stores the datab
3770: 61 73 65 20 62 61 63 6b 20 74 6f 20 69 74 73 20  ase back to its 
3780: 6f 72 69 67 69 6e 61 6c 0a 23 20 73 74 61 74 65  original.# state
3790: 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 61 76 74 72  ..#.do_test avtr
37a0: 61 6e 73 2d 37 2e 31 20 7b 0a 20 20 65 78 65 63  ans-7.1 {.  exec
37b0: 73 71 6c 20 7b 42 45 47 49 4e 7d 0a 20 20 66 6f  sql {BEGIN}.  fo
37c0: 72 20 7b 73 65 74 20 69 20 30 7d 20 7b 24 69 3c  r {set i 0} {$i<
37d0: 31 30 30 30 7d 20 7b 69 6e 63 72 20 69 7d 20 7b  1000} {incr i} {
37e0: 0a 20 20 20 20 73 65 74 20 72 31 20 5b 65 78 70  .    set r1 [exp
37f0: 72 20 7b 72 61 6e 64 28 29 7d 5d 0a 20 20 20 20  r {rand()}].    
3800: 73 65 74 20 72 32 20 5b 65 78 70 72 20 7b 72 61  set r2 [expr {ra
3810: 6e 64 28 29 7d 5d 0a 20 20 20 20 73 65 74 20 72  nd()}].    set r
3820: 33 20 5b 65 78 70 72 20 7b 72 61 6e 64 28 29 7d  3 [expr {rand()}
3830: 5d 0a 20 20 20 20 65 78 65 63 73 71 6c 20 22 49  ].    execsql "I
3840: 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41  NSERT INTO t2 VA
3850: 4c 55 45 53 28 24 72 31 2c 24 72 32 2c 24 72 33  LUES($r1,$r2,$r3
3860: 29 22 0a 20 20 7d 0a 20 20 65 78 65 63 73 71 6c  )".  }.  execsql
3870: 20 7b 43 4f 4d 4d 49 54 7d 0a 20 20 73 65 74 20   {COMMIT}.  set 
3880: 3a 3a 63 68 65 63 6b 73 75 6d 20 5b 65 78 65 63  ::checksum [exec
3890: 73 71 6c 20 7b 53 45 4c 45 43 54 20 6d 64 35 73  sql {SELECT md5s
38a0: 75 6d 28 78 2c 79 2c 7a 29 20 46 52 4f 4d 20 74  um(x,y,z) FROM t
38b0: 32 7d 5d 0a 20 20 73 65 74 20 3a 3a 63 68 65 63  2}].  set ::chec
38c0: 6b 73 75 6d 32 20 5b 0a 20 20 20 20 65 78 65 63  ksum2 [.    exec
38d0: 73 71 6c 20 7b 53 45 4c 45 43 54 20 6d 64 35 73  sql {SELECT md5s
38e0: 75 6d 28 74 79 70 65 2c 6e 61 6d 65 2c 74 62 6c  um(type,name,tbl
38f0: 5f 6e 61 6d 65 2c 72 6f 6f 74 70 61 67 65 2c 73  _name,rootpage,s
3900: 71 6c 29 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  ql) FROM sqlite_
3910: 6d 61 73 74 65 72 7d 0a 20 20 5d 0a 20 20 65 78  master}.  ].  ex
3920: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 63 6f  ecsql {SELECT co
3930: 75 6e 74 28 2a 29 20 46 52 4f 4d 20 74 32 7d 0a  unt(*) FROM t2}.
3940: 7d 20 7b 31 30 30 31 7d 0a 64 6f 5f 74 65 73 74  } {1001}.do_test
3950: 20 61 76 74 72 61 6e 73 2d 37 2e 32 20 7b 0a 20   avtrans-7.2 {. 
3960: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
3970: 20 6d 64 35 73 75 6d 28 78 2c 79 2c 7a 29 20 46   md5sum(x,y,z) F
3980: 52 4f 4d 20 74 32 7d 0a 7d 20 24 63 68 65 63 6b  ROM t2}.} $check
3990: 73 75 6d 0a 64 6f 5f 74 65 73 74 20 61 76 74 72  sum.do_test avtr
39a0: 61 6e 73 2d 37 2e 32 2e 31 20 7b 0a 20 20 65 78  ans-7.2.1 {.  ex
39b0: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6d 64  ecsql {SELECT md
39c0: 35 73 75 6d 28 74 79 70 65 2c 6e 61 6d 65 2c 74  5sum(type,name,t
39d0: 62 6c 5f 6e 61 6d 65 2c 72 6f 6f 74 70 61 67 65  bl_name,rootpage
39e0: 2c 73 71 6c 29 20 46 52 4f 4d 20 73 71 6c 69 74  ,sql) FROM sqlit
39f0: 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 24 63 68 65  e_master}.} $che
3a00: 63 6b 73 75 6d 32 0a 64 6f 5f 74 65 73 74 20 61  cksum2.do_test a
3a10: 76 74 72 61 6e 73 2d 37 2e 33 20 7b 0a 20 20 65  vtrans-7.3 {.  e
3a20: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 42 45 47  xecsql {.    BEG
3a30: 49 4e 3b 0a 20 20 20 20 44 45 4c 45 54 45 20 46  IN;.    DELETE F
3a40: 52 4f 4d 20 74 32 3b 0a 20 20 20 20 52 4f 4c 4c  ROM t2;.    ROLL
3a50: 42 41 43 4b 3b 0a 20 20 20 20 53 45 4c 45 43 54  BACK;.    SELECT
3a60: 20 6d 64 35 73 75 6d 28 78 2c 79 2c 7a 29 20 46   md5sum(x,y,z) F
3a70: 52 4f 4d 20 74 32 3b 0a 20 20 7d 0a 7d 20 24 63  ROM t2;.  }.} $c
3a80: 68 65 63 6b 73 75 6d 0a 64 6f 5f 74 65 73 74 20  hecksum.do_test 
3a90: 61 76 74 72 61 6e 73 2d 37 2e 34 20 7b 0a 20 20  avtrans-7.4 {.  
3aa0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 42 45  execsql {.    BE
3ab0: 47 49 4e 3b 0a 20 20 20 20 49 4e 53 45 52 54 20  GIN;.    INSERT 
3ac0: 49 4e 54 4f 20 74 32 20 53 45 4c 45 43 54 20 2a  INTO t2 SELECT *
3ad0: 20 46 52 4f 4d 20 74 32 3b 0a 20 20 20 20 52 4f   FROM t2;.    RO
3ae0: 4c 4c 42 41 43 4b 3b 0a 20 20 20 20 53 45 4c 45  LLBACK;.    SELE
3af0: 43 54 20 6d 64 35 73 75 6d 28 78 2c 79 2c 7a 29  CT md5sum(x,y,z)
3b00: 20 46 52 4f 4d 20 74 32 3b 0a 20 20 7d 0a 7d 20   FROM t2;.  }.} 
3b10: 24 63 68 65 63 6b 73 75 6d 0a 64 6f 5f 74 65 73  $checksum.do_tes
3b20: 74 20 61 76 74 72 61 6e 73 2d 37 2e 35 20 7b 0a  t avtrans-7.5 {.
3b30: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
3b40: 42 45 47 49 4e 3b 0a 20 20 20 20 44 45 4c 45 54  BEGIN;.    DELET
3b50: 45 20 46 52 4f 4d 20 74 32 3b 0a 20 20 20 20 52  E FROM t2;.    R
3b60: 4f 4c 4c 42 41 43 4b 3b 0a 20 20 20 20 53 45 4c  OLLBACK;.    SEL
3b70: 45 43 54 20 6d 64 35 73 75 6d 28 78 2c 79 2c 7a  ECT md5sum(x,y,z
3b80: 29 20 46 52 4f 4d 20 74 32 3b 0a 20 20 7d 0a 7d  ) FROM t2;.  }.}
3b90: 20 24 63 68 65 63 6b 73 75 6d 0a 64 6f 5f 74 65   $checksum.do_te
3ba0: 73 74 20 61 76 74 72 61 6e 73 2d 37 2e 36 20 7b  st avtrans-7.6 {
3bb0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
3bc0: 20 42 45 47 49 4e 3b 0a 20 20 20 20 49 4e 53 45   BEGIN;.    INSE
3bd0: 52 54 20 49 4e 54 4f 20 74 32 20 53 45 4c 45 43  RT INTO t2 SELEC
3be0: 54 20 2a 20 46 52 4f 4d 20 74 32 3b 0a 20 20 20  T * FROM t2;.   
3bf0: 20 52 4f 4c 4c 42 41 43 4b 3b 0a 20 20 20 20 53   ROLLBACK;.    S
3c00: 45 4c 45 43 54 20 6d 64 35 73 75 6d 28 78 2c 79  ELECT md5sum(x,y
3c10: 2c 7a 29 20 46 52 4f 4d 20 74 32 3b 0a 20 20 7d  ,z) FROM t2;.  }
3c20: 0a 7d 20 24 63 68 65 63 6b 73 75 6d 0a 64 6f 5f  .} $checksum.do_
3c30: 74 65 73 74 20 61 76 74 72 61 6e 73 2d 37 2e 37  test avtrans-7.7
3c40: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
3c50: 20 20 20 42 45 47 49 4e 3b 0a 20 20 20 20 43 52     BEGIN;.    CR
3c60: 45 41 54 45 20 54 41 42 4c 45 20 74 33 20 41 53  EATE TABLE t3 AS
3c70: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
3c80: 32 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  2;.    INSERT IN
3c90: 54 4f 20 74 32 20 53 45 4c 45 43 54 20 2a 20 46  TO t2 SELECT * F
3ca0: 52 4f 4d 20 74 33 3b 0a 20 20 20 20 52 4f 4c 4c  ROM t3;.    ROLL
3cb0: 42 41 43 4b 3b 0a 20 20 20 20 53 45 4c 45 43 54  BACK;.    SELECT
3cc0: 20 6d 64 35 73 75 6d 28 78 2c 79 2c 7a 29 20 46   md5sum(x,y,z) F
3cd0: 52 4f 4d 20 74 32 3b 0a 20 20 7d 0a 7d 20 24 63  ROM t2;.  }.} $c
3ce0: 68 65 63 6b 73 75 6d 0a 64 6f 5f 74 65 73 74 20  hecksum.do_test 
3cf0: 61 76 74 72 61 6e 73 2d 37 2e 38 20 7b 0a 20 20  avtrans-7.8 {.  
3d00: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
3d10: 6d 64 35 73 75 6d 28 74 79 70 65 2c 6e 61 6d 65  md5sum(type,name
3d20: 2c 74 62 6c 5f 6e 61 6d 65 2c 72 6f 6f 74 70 61  ,tbl_name,rootpa
3d30: 67 65 2c 73 71 6c 29 20 46 52 4f 4d 20 73 71 6c  ge,sql) FROM sql
3d40: 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 24 63  ite_master}.} $c
3d50: 68 65 63 6b 73 75 6d 32 0a 69 66 63 61 70 61 62  hecksum2.ifcapab
3d60: 6c 65 20 74 65 6d 70 64 62 20 7b 0a 20 20 64 6f  le tempdb {.  do
3d70: 5f 74 65 73 74 20 61 76 74 72 61 6e 73 2d 37 2e  _test avtrans-7.
3d80: 39 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  9 {.    execsql 
3d90: 7b 0a 20 20 20 20 20 20 42 45 47 49 4e 3b 0a 20  {.      BEGIN;. 
3da0: 20 20 20 20 20 43 52 45 41 54 45 20 54 45 4d 50       CREATE TEMP
3db0: 20 54 41 42 4c 45 20 74 33 20 41 53 20 53 45 4c   TABLE t3 AS SEL
3dc0: 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 3b 0a 20  ECT * FROM t2;. 
3dd0: 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f       INSERT INTO
3de0: 20 74 32 20 53 45 4c 45 43 54 20 2a 20 46 52 4f   t2 SELECT * FRO
3df0: 4d 20 74 33 3b 0a 20 20 20 20 20 20 52 4f 4c 4c  M t3;.      ROLL
3e00: 42 41 43 4b 3b 0a 20 20 20 20 20 20 53 45 4c 45  BACK;.      SELE
3e10: 43 54 20 6d 64 35 73 75 6d 28 78 2c 79 2c 7a 29  CT md5sum(x,y,z)
3e20: 20 46 52 4f 4d 20 74 32 3b 0a 20 20 20 20 7d 0a   FROM t2;.    }.
3e30: 20 20 7d 20 24 63 68 65 63 6b 73 75 6d 0a 7d 0a    } $checksum.}.
3e40: 64 6f 5f 74 65 73 74 20 61 76 74 72 61 6e 73 2d  do_test avtrans-
3e50: 37 2e 31 30 20 7b 0a 20 20 65 78 65 63 73 71 6c  7.10 {.  execsql
3e60: 20 7b 53 45 4c 45 43 54 20 6d 64 35 73 75 6d 28   {SELECT md5sum(
3e70: 74 79 70 65 2c 6e 61 6d 65 2c 74 62 6c 5f 6e 61  type,name,tbl_na
3e80: 6d 65 2c 72 6f 6f 74 70 61 67 65 2c 73 71 6c 29  me,rootpage,sql)
3e90: 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73   FROM sqlite_mas
3ea0: 74 65 72 7d 0a 7d 20 24 63 68 65 63 6b 73 75 6d  ter}.} $checksum
3eb0: 32 0a 69 66 63 61 70 61 62 6c 65 20 74 65 6d 70  2.ifcapable temp
3ec0: 64 62 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 61  db {.  do_test a
3ed0: 76 74 72 61 6e 73 2d 37 2e 31 31 20 7b 0a 20 20  vtrans-7.11 {.  
3ee0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
3ef0: 20 20 42 45 47 49 4e 3b 0a 20 20 20 20 20 20 43    BEGIN;.      C
3f00: 52 45 41 54 45 20 54 45 4d 50 20 54 41 42 4c 45  REATE TEMP TABLE
3f10: 20 74 33 20 41 53 20 53 45 4c 45 43 54 20 2a 20   t3 AS SELECT * 
3f20: 46 52 4f 4d 20 74 32 3b 0a 20 20 20 20 20 20 49  FROM t2;.      I
3f30: 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20 53 45  NSERT INTO t2 SE
3f40: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 33 3b 0a  LECT * FROM t3;.
3f50: 20 20 20 20 20 20 44 52 4f 50 20 49 4e 44 45 58        DROP INDEX
3f60: 20 69 32 78 3b 0a 20 20 20 20 20 20 44 52 4f 50   i2x;.      DROP
3f70: 20 49 4e 44 45 58 20 69 32 79 3b 0a 20 20 20 20   INDEX i2y;.    
3f80: 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 69    CREATE INDEX i
3f90: 33 61 20 4f 4e 20 74 33 28 78 29 3b 0a 20 20 20  3a ON t3(x);.   
3fa0: 20 20 20 52 4f 4c 4c 42 41 43 4b 3b 0a 20 20 20     ROLLBACK;.   
3fb0: 20 20 20 53 45 4c 45 43 54 20 6d 64 35 73 75 6d     SELECT md5sum
3fc0: 28 78 2c 79 2c 7a 29 20 46 52 4f 4d 20 74 32 3b  (x,y,z) FROM t2;
3fd0: 0a 20 20 20 20 7d 0a 20 20 7d 20 24 63 68 65 63  .    }.  } $chec
3fe0: 6b 73 75 6d 0a 7d 0a 64 6f 5f 74 65 73 74 20 61  ksum.}.do_test a
3ff0: 76 74 72 61 6e 73 2d 37 2e 31 32 20 7b 0a 20 20  vtrans-7.12 {.  
4000: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
4010: 6d 64 35 73 75 6d 28 74 79 70 65 2c 6e 61 6d 65  md5sum(type,name
4020: 2c 74 62 6c 5f 6e 61 6d 65 2c 72 6f 6f 74 70 61  ,tbl_name,rootpa
4030: 67 65 2c 73 71 6c 29 20 46 52 4f 4d 20 73 71 6c  ge,sql) FROM sql
4040: 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 24 63  ite_master}.} $c
4050: 68 65 63 6b 73 75 6d 32 0a 69 66 63 61 70 61 62  hecksum2.ifcapab
4060: 6c 65 20 74 65 6d 70 64 62 20 7b 0a 20 20 64 6f  le tempdb {.  do
4070: 5f 74 65 73 74 20 61 76 74 72 61 6e 73 2d 37 2e  _test avtrans-7.
4080: 31 33 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  13 {.    execsql
4090: 20 7b 0a 20 20 20 20 20 20 42 45 47 49 4e 3b 0a   {.      BEGIN;.
40a0: 20 20 20 20 20 20 44 52 4f 50 20 54 41 42 4c 45        DROP TABLE
40b0: 20 74 32 3b 0a 20 20 20 20 20 20 52 4f 4c 4c 42   t2;.      ROLLB
40c0: 41 43 4b 3b 0a 20 20 20 20 20 20 53 45 4c 45 43  ACK;.      SELEC
40d0: 54 20 6d 64 35 73 75 6d 28 78 2c 79 2c 7a 29 20  T md5sum(x,y,z) 
40e0: 46 52 4f 4d 20 74 32 3b 0a 20 20 20 20 7d 0a 20  FROM t2;.    }. 
40f0: 20 7d 20 24 63 68 65 63 6b 73 75 6d 0a 7d 0a 64   } $checksum.}.d
4100: 6f 5f 74 65 73 74 20 61 76 74 72 61 6e 73 2d 37  o_test avtrans-7
4110: 2e 31 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  .14 {.  execsql 
4120: 7b 53 45 4c 45 43 54 20 6d 64 35 73 75 6d 28 74  {SELECT md5sum(t
4130: 79 70 65 2c 6e 61 6d 65 2c 74 62 6c 5f 6e 61 6d  ype,name,tbl_nam
4140: 65 2c 72 6f 6f 74 70 61 67 65 2c 73 71 6c 29 20  e,rootpage,sql) 
4150: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74  FROM sqlite_mast
4160: 65 72 7d 0a 7d 20 24 63 68 65 63 6b 73 75 6d 32  er}.} $checksum2
4170: 0a 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b  .integrity_check
4180: 20 61 76 74 72 61 6e 73 2d 37 2e 31 35 0a 0a 23   avtrans-7.15..#
4190: 20 41 72 72 61 6e 67 65 20 66 6f 72 20 61 6e 6f   Arrange for ano
41a0: 74 68 65 72 20 70 72 6f 63 65 73 73 20 74 6f 20  ther process to 
41b0: 62 65 67 69 6e 20 6d 6f 64 69 66 79 69 6e 67 20  begin modifying 
41c0: 74 68 65 20 64 61 74 61 62 61 73 65 20 62 75 74  the database but
41d0: 20 61 62 6f 72 74 0a 23 20 61 6e 64 20 64 69 65   abort.# and die
41e0: 20 69 6e 20 74 68 65 20 6d 69 64 64 6c 65 20 6f   in the middle o
41f0: 66 20 74 68 65 20 6d 6f 64 69 66 69 63 61 74 69  f the modificati
4200: 6f 6e 2e 20 20 54 68 65 6e 20 68 61 76 65 20 74  on.  Then have t
4210: 68 69 73 20 70 72 6f 63 65 73 73 20 72 65 61 64  his process read
4220: 0a 23 20 74 68 65 20 64 61 74 61 62 61 73 65 2e  .# the database.
4230: 20 20 54 68 69 73 20 70 72 6f 63 65 73 73 20 73    This process s
4240: 68 6f 75 6c 64 20 64 65 74 65 63 74 20 74 68 65  hould detect the
4250: 20 6a 6f 75 72 6e 61 6c 20 66 69 6c 65 20 61 6e   journal file an
4260: 64 20 72 6f 6c 6c 20 69 74 0a 23 20 62 61 63 6b  d roll it.# back
4270: 2e 20 20 56 65 72 69 66 79 20 74 68 61 74 20 74  .  Verify that t
4280: 68 69 73 20 68 61 70 70 65 6e 73 20 63 6f 72 72  his happens corr
4290: 65 63 74 6c 79 2e 0a 23 0a 73 65 74 20 66 64 20  ectly..#.set fd 
42a0: 5b 6f 70 65 6e 20 74 65 73 74 2e 74 63 6c 20 77  [open test.tcl w
42b0: 5d 0a 70 75 74 73 20 24 66 64 20 7b 0a 20 20 73  ].puts $fd {.  s
42c0: 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64  qlite3 db test.d
42d0: 62 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a 20 20  b.  db eval {.  
42e0: 20 20 50 52 41 47 4d 41 20 64 65 66 61 75 6c 74    PRAGMA default
42f0: 5f 63 61 63 68 65 5f 73 69 7a 65 3d 32 30 3b 0a  _cache_size=20;.
4300: 20 20 20 20 42 45 47 49 4e 3b 0a 20 20 20 20 43      BEGIN;.    C
4310: 52 45 41 54 45 20 54 41 42 4c 45 20 74 33 20 41  REATE TABLE t3 A
4320: 53 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20  S SELECT * FROM 
4330: 74 32 3b 0a 20 20 20 20 44 45 4c 45 54 45 20 46  t2;.    DELETE F
4340: 52 4f 4d 20 74 32 3b 0a 20 20 7d 0a 20 20 73 71  ROM t2;.  }.  sq
4350: 6c 69 74 65 5f 61 62 6f 72 74 0a 7d 0a 63 6c 6f  lite_abort.}.clo
4360: 73 65 20 24 66 64 0a 64 6f 5f 74 65 73 74 20 61  se $fd.do_test a
4370: 76 74 72 61 6e 73 2d 38 2e 31 20 7b 0a 20 20 63  vtrans-8.1 {.  c
4380: 61 74 63 68 20 7b 65 78 65 63 20 5b 69 6e 66 6f  atch {exec [info
4390: 20 6e 61 6d 65 6f 66 65 78 65 63 5d 20 74 65 73   nameofexec] tes
43a0: 74 2e 74 63 6c 7d 0a 20 20 65 78 65 63 73 71 6c  t.tcl}.  execsql
43b0: 20 7b 53 45 4c 45 43 54 20 6d 64 35 73 75 6d 28   {SELECT md5sum(
43c0: 78 2c 79 2c 7a 29 20 46 52 4f 4d 20 74 32 7d 0a  x,y,z) FROM t2}.
43d0: 7d 20 24 63 68 65 63 6b 73 75 6d 0a 64 6f 5f 74  } $checksum.do_t
43e0: 65 73 74 20 61 76 74 72 61 6e 73 2d 38 2e 32 20  est avtrans-8.2 
43f0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  {.  execsql {SEL
4400: 45 43 54 20 6d 64 35 73 75 6d 28 74 79 70 65 2c  ECT md5sum(type,
4410: 6e 61 6d 65 2c 74 62 6c 5f 6e 61 6d 65 2c 72 6f  name,tbl_name,ro
4420: 6f 74 70 61 67 65 2c 73 71 6c 29 20 46 52 4f 4d  otpage,sql) FROM
4430: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a   sqlite_master}.
4440: 7d 20 24 63 68 65 63 6b 73 75 6d 32 0a 69 6e 74  } $checksum2.int
4450: 65 67 72 69 74 79 5f 63 68 65 63 6b 20 61 76 74  egrity_check avt
4460: 72 61 6e 73 2d 38 2e 33 0a 0a 23 20 49 6e 20 74  rans-8.3..# In t
4470: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 65 71  he following seq
4480: 75 65 6e 63 65 20 6f 66 20 74 65 73 74 73 2c 20  uence of tests, 
4490: 63 6f 6d 70 75 74 65 20 74 68 65 20 4d 44 35 20  compute the MD5 
44a0: 73 75 6d 20 6f 66 20 74 68 65 20 63 6f 6e 74 65  sum of the conte
44b0: 6e 74 0a 23 20 6f 66 20 61 20 74 61 62 6c 65 2c  nt.# of a table,
44c0: 20 6d 61 6b 65 20 6c 6f 74 73 20 6f 66 20 6d 6f   make lots of mo
44d0: 64 69 66 69 63 61 74 69 6f 6e 73 20 74 6f 20 74  difications to t
44e0: 68 61 74 20 74 61 62 6c 65 2c 20 74 68 65 6e 20  hat table, then 
44f0: 64 6f 20 61 20 72 6f 6c 6c 62 61 63 6b 2e 0a 23  do a rollback..#
4500: 20 56 65 72 69 66 79 20 74 68 61 74 20 61 66 74   Verify that aft
4510: 65 72 20 74 68 65 20 72 6f 6c 6c 62 61 63 6b 2c  er the rollback,
4520: 20 74 68 65 20 4d 44 35 20 63 68 65 63 6b 73 75   the MD5 checksu
4530: 6d 20 69 73 20 75 6e 63 68 61 6e 67 65 64 2e 0a  m is unchanged..
4540: 23 0a 64 6f 5f 74 65 73 74 20 61 76 74 72 61 6e  #.do_test avtran
4550: 73 2d 39 2e 31 20 7b 0a 20 20 65 78 65 63 73 71  s-9.1 {.  execsq
4560: 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 64  l {.    PRAGMA d
4570: 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a  efault_cache_siz
4580: 65 3d 31 30 3b 0a 20 20 7d 0a 20 20 64 62 20 63  e=10;.  }.  db c
4590: 6c 6f 73 65 0a 20 20 73 71 6c 69 74 65 33 20 64  lose.  sqlite3 d
45a0: 62 20 74 65 73 74 2e 64 62 0a 20 20 65 78 65 63  b test.db.  exec
45b0: 73 71 6c 20 7b 0a 20 20 20 20 42 45 47 49 4e 3b  sql {.    BEGIN;
45c0: 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  .    CREATE TABL
45d0: 45 20 74 33 28 78 20 54 45 58 54 29 3b 0a 20 20  E t3(x TEXT);.  
45e0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 33    INSERT INTO t3
45f0: 20 56 41 4c 55 45 53 28 72 61 6e 64 73 74 72 28   VALUES(randstr(
4600: 31 30 2c 34 30 30 29 29 3b 0a 20 20 20 20 49 4e  10,400));.    IN
4610: 53 45 52 54 20 49 4e 54 4f 20 74 33 20 56 41 4c  SERT INTO t3 VAL
4620: 55 45 53 28 72 61 6e 64 73 74 72 28 31 30 2c 34  UES(randstr(10,4
4630: 30 30 29 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  00));.    INSERT
4640: 20 49 4e 54 4f 20 74 33 20 53 45 4c 45 43 54 20   INTO t3 SELECT 
4650: 72 61 6e 64 73 74 72 28 31 30 2c 34 30 30 29 20  randstr(10,400) 
4660: 46 52 4f 4d 20 74 33 3b 0a 20 20 20 20 49 4e 53  FROM t3;.    INS
4670: 45 52 54 20 49 4e 54 4f 20 74 33 20 53 45 4c 45  ERT INTO t3 SELE
4680: 43 54 20 72 61 6e 64 73 74 72 28 31 30 2c 34 30  CT randstr(10,40
4690: 30 29 20 46 52 4f 4d 20 74 33 3b 0a 20 20 20 20  0) FROM t3;.    
46a0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 33 20 53  INSERT INTO t3 S
46b0: 45 4c 45 43 54 20 72 61 6e 64 73 74 72 28 31 30  ELECT randstr(10
46c0: 2c 34 30 30 29 20 46 52 4f 4d 20 74 33 3b 0a 20  ,400) FROM t3;. 
46d0: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
46e0: 33 20 53 45 4c 45 43 54 20 72 61 6e 64 73 74 72  3 SELECT randstr
46f0: 28 31 30 2c 34 30 30 29 20 46 52 4f 4d 20 74 33  (10,400) FROM t3
4700: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
4710: 4f 20 74 33 20 53 45 4c 45 43 54 20 72 61 6e 64  O t3 SELECT rand
4720: 73 74 72 28 31 30 2c 34 30 30 29 20 46 52 4f 4d  str(10,400) FROM
4730: 20 74 33 3b 0a 20 20 20 20 49 4e 53 45 52 54 20   t3;.    INSERT 
4740: 49 4e 54 4f 20 74 33 20 53 45 4c 45 43 54 20 72  INTO t3 SELECT r
4750: 61 6e 64 73 74 72 28 31 30 2c 34 30 30 29 20 46  andstr(10,400) F
4760: 52 4f 4d 20 74 33 3b 0a 20 20 20 20 49 4e 53 45  ROM t3;.    INSE
4770: 52 54 20 49 4e 54 4f 20 74 33 20 53 45 4c 45 43  RT INTO t3 SELEC
4780: 54 20 72 61 6e 64 73 74 72 28 31 30 2c 34 30 30  T randstr(10,400
4790: 29 20 46 52 4f 4d 20 74 33 3b 0a 20 20 20 20 49  ) FROM t3;.    I
47a0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 33 20 53 45  NSERT INTO t3 SE
47b0: 4c 45 43 54 20 72 61 6e 64 73 74 72 28 31 30 2c  LECT randstr(10,
47c0: 34 30 30 29 20 46 52 4f 4d 20 74 33 3b 0a 20 20  400) FROM t3;.  
47d0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 33    INSERT INTO t3
47e0: 20 53 45 4c 45 43 54 20 72 61 6e 64 73 74 72 28   SELECT randstr(
47f0: 31 30 2c 34 30 30 29 20 46 52 4f 4d 20 74 33 3b  10,400) FROM t3;
4800: 0a 20 20 20 20 43 4f 4d 4d 49 54 3b 0a 20 20 20  .    COMMIT;.   
4810: 20 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29   SELECT count(*)
4820: 20 46 52 4f 4d 20 74 33 3b 0a 20 20 7d 0a 7d 20   FROM t3;.  }.} 
4830: 7b 31 30 32 34 7d 0a 0a 23 20 54 68 65 20 66 6f  {1024}..# The fo
4840: 6c 6c 6f 77 69 6e 67 20 70 72 6f 63 65 64 75 72  llowing procedur
4850: 65 20 63 6f 6d 70 75 74 65 73 20 61 20 22 73 69  e computes a "si
4860: 67 6e 61 74 75 72 65 22 20 66 6f 72 20 74 61 62  gnature" for tab
4870: 6c 65 20 22 74 33 22 2e 20 20 49 66 0a 23 20 54  le "t3".  If.# T
4880: 33 20 63 68 61 6e 67 65 73 20 69 6e 20 61 6e 79  3 changes in any
4890: 20 77 61 79 2c 20 74 68 65 20 73 69 67 6e 61 74   way, the signat
48a0: 75 72 65 20 73 68 6f 75 6c 64 20 63 68 61 6e 67  ure should chang
48b0: 65 2e 20 20 0a 23 0a 23 20 54 68 69 73 20 69 73  e.  .#.# This is
48c0: 20 75 73 65 64 20 74 6f 20 74 65 73 74 20 52 4f   used to test RO
48d0: 4c 4c 42 41 43 4b 2e 20 20 57 65 20 67 61 74 68  LLBACK.  We gath
48e0: 65 72 20 61 20 73 69 67 6e 61 74 75 72 65 20 66  er a signature f
48f0: 6f 72 20 74 33 2c 20 74 68 65 6e 0a 23 20 6d 61  or t3, then.# ma
4900: 6b 65 20 6c 6f 74 73 20 6f 66 20 63 68 61 6e 67  ke lots of chang
4910: 65 73 20 74 6f 20 74 33 2c 20 74 68 65 6e 20 72  es to t3, then r
4920: 6f 6c 6c 62 61 63 6b 20 61 6e 64 20 74 61 6b 65  ollback and take
4930: 20 61 6e 6f 74 68 65 72 20 73 69 67 6e 61 74 75   another signatu
4940: 72 65 2e 0a 23 20 54 68 65 20 74 77 6f 20 73 69  re..# The two si
4950: 67 6e 61 74 75 72 65 73 20 73 68 6f 75 6c 64 20  gnatures should 
4960: 62 65 20 74 68 65 20 73 61 6d 65 2e 0a 23 0a 70  be the same..#.p
4970: 72 6f 63 20 73 69 67 6e 61 74 75 72 65 20 7b 7d  roc signature {}
4980: 20 7b 0a 20 20 72 65 74 75 72 6e 20 5b 64 62 20   {.  return [db 
4990: 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 63 6f 75  eval {SELECT cou
49a0: 6e 74 28 2a 29 2c 20 6d 64 35 73 75 6d 28 78 29  nt(*), md5sum(x)
49b0: 20 46 52 4f 4d 20 74 33 7d 5d 0a 7d 0a 0a 23 20   FROM t3}].}..# 
49c0: 52 65 70 65 61 74 20 74 68 65 20 66 6f 6c 6c 6f  Repeat the follo
49d0: 77 69 6e 67 20 67 72 6f 75 70 20 6f 66 20 74 65  wing group of te
49e0: 73 74 73 20 32 30 20 74 69 6d 65 73 20 66 6f 72  sts 20 times for
49f0: 20 71 75 69 63 6b 20 74 65 73 74 69 6e 67 20 61   quick testing a
4a00: 6e 64 0a 23 20 34 30 20 74 69 6d 65 73 20 66 6f  nd.# 40 times fo
4a10: 72 20 66 75 6c 6c 20 74 65 73 74 69 6e 67 2e 20  r full testing. 
4a20: 20 45 61 63 68 20 69 74 65 72 61 74 69 6f 6e 20   Each iteration 
4a30: 6f 66 20 74 68 65 20 74 65 73 74 20 6d 61 6b 65  of the test make
4a40: 73 20 74 61 62 6c 65 0a 23 20 74 33 20 61 20 6c  s table.# t3 a l
4a50: 69 74 74 6c 65 20 6c 61 72 67 65 72 2c 20 61 6e  ittle larger, an
4a60: 64 20 74 68 75 73 20 74 61 6b 65 73 20 61 20 6c  d thus takes a l
4a70: 69 74 74 6c 65 20 6c 6f 6e 67 65 72 2c 20 73 6f  ittle longer, so
4a80: 20 64 6f 69 6e 67 20 34 30 20 74 65 73 74 73 0a   doing 40 tests.
4a90: 23 20 69 73 20 6d 6f 72 65 20 74 68 61 6e 20 32  # is more than 2
4aa0: 2e 30 20 74 69 6d 65 73 20 73 6c 6f 77 65 72 20  .0 times slower 
4ab0: 74 68 61 6e 20 64 6f 69 6e 67 20 32 30 20 74 65  than doing 20 te
4ac0: 73 74 73 2e 20 20 43 6f 6e 73 69 64 65 72 61 62  sts.  Considerab
4ad0: 6c 79 20 6d 6f 72 65 2e 0a 23 0a 69 66 20 7b 5b  ly more..#.if {[
4ae0: 69 6e 66 6f 20 65 78 69 73 74 73 20 49 53 51 55  info exists ISQU
4af0: 49 43 4b 5d 7d 20 7b 0a 20 20 73 65 74 20 6c 69  ICK]} {.  set li
4b00: 6d 69 74 20 32 30 0a 7d 20 65 6c 73 65 20 7b 0a  mit 20.} else {.
4b10: 20 20 73 65 74 20 6c 69 6d 69 74 20 34 30 0a 7d    set limit 40.}
4b20: 0a 0a 23 20 44 6f 20 72 6f 6c 6c 62 61 63 6b 73  ..# Do rollbacks
4b30: 2e 20 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65  .  Make sure the
4b40: 20 73 69 67 6e 61 74 75 72 65 20 64 6f 65 73 20   signature does 
4b50: 6e 6f 74 20 63 68 61 6e 67 65 2e 0a 23 0a 66 6f  not change..#.fo
4b60: 72 20 7b 73 65 74 20 69 20 32 7d 20 7b 24 69 3c  r {set i 2} {$i<
4b70: 3d 24 6c 69 6d 69 74 7d 20 7b 69 6e 63 72 20 69  =$limit} {incr i
4b80: 7d 20 7b 0a 20 20 73 65 74 20 3a 3a 73 69 67 20  } {.  set ::sig 
4b90: 5b 73 69 67 6e 61 74 75 72 65 5d 0a 20 20 73 65  [signature].  se
4ba0: 74 20 63 6e 74 20 5b 6c 69 6e 64 65 78 20 24 3a  t cnt [lindex $:
4bb0: 3a 73 69 67 20 30 5d 0a 20 20 69 66 20 7b 24 69  :sig 0].  if {$i
4bc0: 25 32 3d 3d 30 7d 20 7b 0a 20 20 20 20 65 78 65  %2==0} {.    exe
4bd0: 63 73 71 6c 20 7b 50 52 41 47 4d 41 20 66 75 6c  csql {PRAGMA ful
4be0: 6c 66 73 79 6e 63 3d 4f 4e 7d 0a 20 20 7d 20 65  lfsync=ON}.  } e
4bf0: 6c 73 65 20 7b 0a 20 20 20 20 65 78 65 63 73 71  lse {.    execsq
4c00: 6c 20 7b 50 52 41 47 4d 41 20 66 75 6c 6c 66 73  l {PRAGMA fullfs
4c10: 79 6e 63 3d 4f 46 46 7d 0a 20 20 7d 0a 20 20 73  ync=OFF}.  }.  s
4c20: 65 74 20 73 71 6c 69 74 65 5f 73 79 6e 63 5f 63  et sqlite_sync_c
4c30: 6f 75 6e 74 20 30 0a 20 20 73 65 74 20 73 71 6c  ount 0.  set sql
4c40: 69 74 65 5f 66 75 6c 6c 73 79 6e 63 5f 63 6f 75  ite_fullsync_cou
4c50: 6e 74 20 30 0a 20 20 64 6f 5f 74 65 73 74 20 61  nt 0.  do_test a
4c60: 76 74 72 61 6e 73 2d 39 2e 24 69 2e 31 2d 24 63  vtrans-9.$i.1-$c
4c70: 6e 74 20 7b 0a 20 20 20 20 20 65 78 65 63 73 71  nt {.     execsq
4c80: 6c 20 7b 0a 20 20 20 20 20 20 20 42 45 47 49 4e  l {.       BEGIN
4c90: 3b 0a 20 20 20 20 20 20 20 44 45 4c 45 54 45 20  ;.       DELETE 
4ca0: 46 52 4f 4d 20 74 33 20 57 48 45 52 45 20 72 61  FROM t3 WHERE ra
4cb0: 6e 64 6f 6d 28 29 25 31 30 21 3d 30 3b 0a 20 20  ndom()%10!=0;.  
4cc0: 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f       INSERT INTO
4cd0: 20 74 33 20 53 45 4c 45 43 54 20 72 61 6e 64 73   t3 SELECT rands
4ce0: 74 72 28 31 30 2c 31 30 29 7c 7c 78 20 46 52 4f  tr(10,10)||x FRO
4cf0: 4d 20 74 33 3b 0a 20 20 20 20 20 20 20 49 4e 53  M t3;.       INS
4d00: 45 52 54 20 49 4e 54 4f 20 74 33 20 53 45 4c 45  ERT INTO t3 SELE
4d10: 43 54 20 72 61 6e 64 73 74 72 28 31 30 2c 31 30  CT randstr(10,10
4d20: 29 7c 7c 78 20 46 52 4f 4d 20 74 33 3b 0a 20 20  )||x FROM t3;.  
4d30: 20 20 20 20 20 52 4f 4c 4c 42 41 43 4b 3b 0a 20       ROLLBACK;. 
4d40: 20 20 20 20 7d 0a 20 20 20 20 20 73 69 67 6e 61      }.     signa
4d50: 74 75 72 65 0a 20 20 7d 20 24 73 69 67 0a 20 20  ture.  } $sig.  
4d60: 64 6f 5f 74 65 73 74 20 61 76 74 72 61 6e 73 2d  do_test avtrans-
4d70: 39 2e 24 69 2e 32 2d 24 63 6e 74 20 7b 0a 20 20  9.$i.2-$cnt {.  
4d80: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
4d90: 20 20 20 20 42 45 47 49 4e 3b 0a 20 20 20 20 20      BEGIN;.     
4da0: 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 33    DELETE FROM t3
4db0: 20 57 48 45 52 45 20 72 61 6e 64 6f 6d 28 29 25   WHERE random()%
4dc0: 31 30 21 3d 30 3b 0a 20 20 20 20 20 20 20 49 4e  10!=0;.       IN
4dd0: 53 45 52 54 20 49 4e 54 4f 20 74 33 20 53 45 4c  SERT INTO t3 SEL
4de0: 45 43 54 20 72 61 6e 64 73 74 72 28 31 30 2c 31  ECT randstr(10,1
4df0: 30 29 7c 7c 78 20 46 52 4f 4d 20 74 33 3b 0a 20  0)||x FROM t3;. 
4e00: 20 20 20 20 20 20 44 45 4c 45 54 45 20 46 52 4f        DELETE FRO
4e10: 4d 20 74 33 20 57 48 45 52 45 20 72 61 6e 64 6f  M t3 WHERE rando
4e20: 6d 28 29 25 31 30 21 3d 30 3b 0a 20 20 20 20 20  m()%10!=0;.     
4e30: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 33    INSERT INTO t3
4e40: 20 53 45 4c 45 43 54 20 72 61 6e 64 73 74 72 28   SELECT randstr(
4e50: 31 30 2c 31 30 29 7c 7c 78 20 46 52 4f 4d 20 74  10,10)||x FROM t
4e60: 33 3b 0a 20 20 20 20 20 20 20 52 4f 4c 4c 42 41  3;.       ROLLBA
4e70: 43 4b 3b 0a 20 20 20 20 20 7d 0a 20 20 20 20 20  CK;.     }.     
4e80: 73 69 67 6e 61 74 75 72 65 0a 20 20 7d 20 24 73  signature.  } $s
4e90: 69 67 0a 20 20 69 66 20 7b 24 69 3c 24 6c 69 6d  ig.  if {$i<$lim
4ea0: 69 74 7d 20 7b 0a 20 20 20 20 64 6f 5f 74 65 73  it} {.    do_tes
4eb0: 74 20 61 76 74 72 61 6e 73 2d 39 2e 24 69 2e 33  t avtrans-9.$i.3
4ec0: 2d 24 63 6e 74 20 7b 0a 20 20 20 20 20 20 20 65  -$cnt {.       e
4ed0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 20  xecsql {.       
4ee0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 33    INSERT INTO t3
4ef0: 20 53 45 4c 45 43 54 20 72 61 6e 64 73 74 72 28   SELECT randstr(
4f00: 31 30 2c 34 30 30 29 20 46 52 4f 4d 20 74 33 20  10,400) FROM t3 
4f10: 57 48 45 52 45 20 72 61 6e 64 6f 6d 28 29 25 31  WHERE random()%1
4f20: 30 3d 3d 30 3b 0a 20 20 20 20 20 20 20 7d 0a 20  0==0;.       }. 
4f30: 20 20 20 7d 20 7b 7d 0a 20 20 20 20 69 66 20 7b     } {}.    if {
4f40: 24 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 70 6c  $tcl_platform(pl
4f50: 61 74 66 6f 72 6d 29 3d 3d 22 75 6e 69 78 22 7d  atform)=="unix"}
4f60: 20 7b 0a 20 20 20 20 20 20 64 6f 5f 74 65 73 74   {.      do_test
4f70: 20 61 76 74 72 61 6e 73 2d 39 2e 24 69 2e 34 2d   avtrans-9.$i.4-
4f80: 24 63 6e 74 20 7b 0a 20 20 20 20 20 20 20 20 20  $cnt {.         
4f90: 65 78 70 72 20 7b 24 73 71 6c 69 74 65 5f 73 79  expr {$sqlite_sy
4fa0: 6e 63 5f 63 6f 75 6e 74 3e 30 7d 0a 20 20 20 20  nc_count>0}.    
4fb0: 20 20 7d 20 31 0a 20 20 20 20 20 20 69 66 63 61    } 1.      ifca
4fc0: 70 61 62 6c 65 20 70 61 67 65 72 5f 70 72 61 67  pable pager_prag
4fd0: 6d 61 73 20 7b 0a 20 20 20 20 20 20 20 20 64 6f  mas {.        do
4fe0: 5f 74 65 73 74 20 61 76 74 72 61 6e 73 2d 39 2e  _test avtrans-9.
4ff0: 24 69 2e 35 2d 24 63 6e 74 20 7b 0a 20 20 20 20  $i.5-$cnt {.    
5000: 20 20 20 20 20 20 20 65 78 70 72 20 7b 24 73 71         expr {$sq
5010: 6c 69 74 65 5f 66 75 6c 6c 73 79 6e 63 5f 63 6f  lite_fullsync_co
5020: 75 6e 74 3e 30 7d 0a 20 20 20 20 20 20 20 20 7d  unt>0}.        }
5030: 20 5b 65 78 70 72 20 7b 24 69 25 32 3d 3d 30 7d   [expr {$i%2==0}
5040: 5d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b  ].      } else {
5050: 0a 20 20 20 20 20 20 20 20 64 6f 5f 74 65 73 74  .        do_test
5060: 20 61 76 74 72 61 6e 73 2d 39 2e 24 69 2e 35 2d   avtrans-9.$i.5-
5070: 24 63 6e 74 20 7b 0a 20 20 20 20 20 20 20 20 20  $cnt {.         
5080: 20 20 65 78 70 72 20 7b 24 73 71 6c 69 74 65 5f    expr {$sqlite_
5090: 66 75 6c 6c 73 79 6e 63 5f 63 6f 75 6e 74 3d 3d  fullsync_count==
50a0: 30 7d 0a 20 20 20 20 20 20 20 20 7d 20 7b 31 7d  0}.        } {1}
50b0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
50c0: 20 7d 0a 20 20 73 65 74 20 3a 3a 70 61 67 65 72   }.  set ::pager
50d0: 5f 6f 6c 64 5f 66 6f 72 6d 61 74 20 30 0a 7d 0a  _old_format 0.}.
50e0: 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 20  integrity_check 
50f0: 61 76 74 72 61 6e 73 2d 31 30 2e 31 0a 20 20 20  avtrans-10.1.   
5100: 0a 66 69 6e 69 73 68 5f 74 65 73 74 0a           .finish_test.