/ Hex Artifact Content
Login

Artifact b7dc25459ecbd86c6fa9c606ee3068f59d81e225118617dcf2bbb6ded2ade89e:


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 20 50 52 41 47 4d 41  execsql { PRAGMA
0310: 20 61 75 74 6f 5f 76 61 63 75 75 6d 3d 66 75 6c   auto_vacuum=ful
0320: 6c 20 7d 0a 20 20 77 61 6c 5f 73 65 74 5f 6a 6f  l }.  wal_set_jo
0330: 75 72 6e 61 6c 5f 6d 6f 64 65 0a 20 20 65 78 65  urnal_mode.  exe
0340: 63 73 71 6c 20 7b 20 0a 20 20 20 20 43 52 45 41  csql { .    CREA
0350: 54 45 20 54 41 42 4c 45 20 6f 6e 65 28 61 20 69  TE TABLE one(a i
0360: 6e 74 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20  nt PRIMARY KEY, 
0370: 62 20 74 65 78 74 29 3b 0a 20 20 20 20 49 4e 53  b text);.    INS
0380: 45 52 54 20 49 4e 54 4f 20 6f 6e 65 20 56 41 4c  ERT INTO one VAL
0390: 55 45 53 28 31 2c 27 6f 6e 65 27 29 3b 0a 20 20  UES(1,'one');.  
03a0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 6f 6e    INSERT INTO on
03b0: 65 20 56 41 4c 55 45 53 28 32 2c 27 74 77 6f 27  e VALUES(2,'two'
03c0: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
03d0: 54 4f 20 6f 6e 65 20 56 41 4c 55 45 53 28 33 2c  TO one VALUES(3,
03e0: 27 74 68 72 65 65 27 29 3b 0a 20 20 20 20 53 45  'three');.    SE
03f0: 4c 45 43 54 20 62 20 46 52 4f 4d 20 6f 6e 65 20  LECT b FROM one 
0400: 4f 52 44 45 52 20 42 59 20 61 3b 0a 20 20 7d 0a  ORDER BY a;.  }.
0410: 7d 20 7b 6f 6e 65 20 74 77 6f 20 74 68 72 65 65  } {one two three
0420: 7d 0a 64 6f 5f 74 65 73 74 20 61 76 74 72 61 6e  }.do_test avtran
0430: 73 2d 31 2e 30 2e 31 20 7b 20 65 78 65 63 73 71  s-1.0.1 { execsq
0440: 6c 20 7b 20 50 52 41 47 4d 41 20 61 75 74 6f 5f  l { PRAGMA auto_
0450: 76 61 63 75 75 6d 20 7d 20 7d 20 31 0a 64 6f 5f  vacuum } } 1.do_
0460: 74 65 73 74 20 61 76 74 72 61 6e 73 2d 31 2e 31  test avtrans-1.1
0470: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
0480: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
0490: 74 77 6f 28 61 20 69 6e 74 20 50 52 49 4d 41 52  two(a int PRIMAR
04a0: 59 20 4b 45 59 2c 20 62 20 74 65 78 74 29 3b 0a  Y KEY, b text);.
04b0: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
04c0: 74 77 6f 20 56 41 4c 55 45 53 28 31 2c 27 49 27  two VALUES(1,'I'
04d0: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
04e0: 54 4f 20 74 77 6f 20 56 41 4c 55 45 53 28 35 2c  TO two VALUES(5,
04f0: 27 56 27 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  'V');.    INSERT
0500: 20 49 4e 54 4f 20 74 77 6f 20 56 41 4c 55 45 53   INTO two VALUES
0510: 28 31 30 2c 27 58 27 29 3b 0a 20 20 20 20 53 45  (10,'X');.    SE
0520: 4c 45 43 54 20 62 20 46 52 4f 4d 20 74 77 6f 20  LECT b FROM two 
0530: 4f 52 44 45 52 20 42 59 20 61 3b 0a 20 20 7d 0a  ORDER BY a;.  }.
0540: 7d 20 7b 49 20 56 20 58 7d 0a 64 6f 5f 74 65 73  } {I V X}.do_tes
0550: 74 20 61 76 74 72 61 6e 73 2d 31 2e 39 20 7b 0a  t avtrans-1.9 {.
0560: 20 20 73 71 6c 69 74 65 33 20 61 6c 74 64 62 20    sqlite3 altdb 
0570: 74 65 73 74 2e 64 62 0a 20 20 65 78 65 63 73 71  test.db.  execsq
0580: 6c 20 7b 53 45 4c 45 43 54 20 62 20 46 52 4f 4d  l {SELECT b FROM
0590: 20 6f 6e 65 20 4f 52 44 45 52 20 42 59 20 61 7d   one ORDER BY a}
05a0: 20 61 6c 74 64 62 0a 7d 20 7b 6f 6e 65 20 74 77   altdb.} {one tw
05b0: 6f 20 74 68 72 65 65 7d 0a 64 6f 5f 74 65 73 74  o three}.do_test
05c0: 20 61 76 74 72 61 6e 73 2d 31 2e 31 30 20 7b 0a   avtrans-1.10 {.
05d0: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
05e0: 54 20 62 20 46 52 4f 4d 20 74 77 6f 20 4f 52 44  T b FROM two ORD
05f0: 45 52 20 42 59 20 61 7d 20 61 6c 74 64 62 0a 7d  ER BY a} altdb.}
0600: 20 7b 49 20 56 20 58 7d 0a 69 6e 74 65 67 72 69   {I V X}.integri
0610: 74 79 5f 63 68 65 63 6b 20 61 76 74 72 61 6e 73  ty_check avtrans
0620: 2d 31 2e 31 31 0a 77 61 6c 5f 63 68 65 63 6b 5f  -1.11.wal_check_
0630: 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 20 61 76 74  journal_mode avt
0640: 72 61 6e 73 2d 31 2e 31 32 0a 0a 23 20 42 61 73  rans-1.12..# Bas
0650: 69 63 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 0a  ic transactions.
0660: 23 0a 64 6f 5f 74 65 73 74 20 61 76 74 72 61 6e  #.do_test avtran
0670: 73 2d 32 2e 31 20 7b 0a 20 20 73 65 74 20 76 20  s-2.1 {.  set v 
0680: 5b 63 61 74 63 68 20 7b 65 78 65 63 73 71 6c 20  [catch {execsql 
0690: 7b 42 45 47 49 4e 7d 7d 20 6d 73 67 5d 0a 20 20  {BEGIN}} msg].  
06a0: 6c 61 70 70 65 6e 64 20 76 20 24 6d 73 67 0a 7d  lappend v $msg.}
06b0: 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20   {0 {}}.do_test 
06c0: 61 76 74 72 61 6e 73 2d 32 2e 32 20 7b 0a 20 20  avtrans-2.2 {.  
06d0: 73 65 74 20 76 20 5b 63 61 74 63 68 20 7b 65 78  set v [catch {ex
06e0: 65 63 73 71 6c 20 7b 45 4e 44 7d 7d 20 6d 73 67  ecsql {END}} msg
06f0: 5d 0a 20 20 6c 61 70 70 65 6e 64 20 76 20 24 6d  ].  lappend v $m
0700: 73 67 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74  sg.} {0 {}}.do_t
0710: 65 73 74 20 61 76 74 72 61 6e 73 2d 32 2e 33 20  est avtrans-2.3 
0720: 7b 0a 20 20 73 65 74 20 76 20 5b 63 61 74 63 68  {.  set v [catch
0730: 20 7b 65 78 65 63 73 71 6c 20 7b 42 45 47 49 4e   {execsql {BEGIN
0740: 20 54 52 41 4e 53 41 43 54 49 4f 4e 7d 7d 20 6d   TRANSACTION}} m
0750: 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20 76 20  sg].  lappend v 
0760: 24 6d 73 67 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f  $msg.} {0 {}}.do
0770: 5f 74 65 73 74 20 61 76 74 72 61 6e 73 2d 32 2e  _test avtrans-2.
0780: 34 20 7b 0a 20 20 73 65 74 20 76 20 5b 63 61 74  4 {.  set v [cat
0790: 63 68 20 7b 65 78 65 63 73 71 6c 20 7b 43 4f 4d  ch {execsql {COM
07a0: 4d 49 54 20 54 52 41 4e 53 41 43 54 49 4f 4e 7d  MIT TRANSACTION}
07b0: 7d 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64  } msg].  lappend
07c0: 20 76 20 24 6d 73 67 0a 7d 20 7b 30 20 7b 7d 7d   v $msg.} {0 {}}
07d0: 0a 64 6f 5f 74 65 73 74 20 61 76 74 72 61 6e 73  .do_test avtrans
07e0: 2d 32 2e 35 20 7b 0a 20 20 73 65 74 20 76 20 5b  -2.5 {.  set v [
07f0: 63 61 74 63 68 20 7b 65 78 65 63 73 71 6c 20 7b  catch {execsql {
0800: 42 45 47 49 4e 20 54 52 41 4e 53 41 43 54 49 4f  BEGIN TRANSACTIO
0810: 4e 20 27 66 6f 6f 27 7d 7d 20 6d 73 67 5d 0a 20  N 'foo'}} msg]. 
0820: 20 6c 61 70 70 65 6e 64 20 76 20 24 6d 73 67 0a   lappend v $msg.
0830: 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  } {0 {}}.do_test
0840: 20 61 76 74 72 61 6e 73 2d 32 2e 36 20 7b 0a 20   avtrans-2.6 {. 
0850: 20 73 65 74 20 76 20 5b 63 61 74 63 68 20 7b 65   set v [catch {e
0860: 78 65 63 73 71 6c 20 7b 52 4f 4c 4c 42 41 43 4b  xecsql {ROLLBACK
0870: 20 54 52 41 4e 53 41 43 54 49 4f 4e 20 27 66 6f   TRANSACTION 'fo
0880: 6f 27 7d 7d 20 6d 73 67 5d 0a 20 20 6c 61 70 70  o'}} msg].  lapp
0890: 65 6e 64 20 76 20 24 6d 73 67 0a 7d 20 7b 30 20  end v $msg.} {0 
08a0: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 76 74 72  {}}.do_test avtr
08b0: 61 6e 73 2d 32 2e 31 30 20 7b 0a 20 20 65 78 65  ans-2.10 {.  exe
08c0: 63 73 71 6c 20 7b 0a 20 20 20 20 42 45 47 49 4e  csql {.    BEGIN
08d0: 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 61 20 46  ;.    SELECT a F
08e0: 52 4f 4d 20 6f 6e 65 20 4f 52 44 45 52 20 42 59  ROM one ORDER BY
08f0: 20 61 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 61   a;.    SELECT a
0900: 20 46 52 4f 4d 20 74 77 6f 20 4f 52 44 45 52 20   FROM two ORDER 
0910: 42 59 20 61 3b 0a 20 20 20 20 45 4e 44 3b 0a 20  BY a;.    END;. 
0920: 20 7d 0a 7d 20 7b 31 20 32 20 33 20 31 20 35 20   }.} {1 2 3 1 5 
0930: 31 30 7d 0a 69 6e 74 65 67 72 69 74 79 5f 63 68  10}.integrity_ch
0940: 65 63 6b 20 61 76 74 72 61 6e 73 2d 32 2e 31 31  eck avtrans-2.11
0950: 0a 77 61 6c 5f 63 68 65 63 6b 5f 6a 6f 75 72 6e  .wal_check_journ
0960: 61 6c 5f 6d 6f 64 65 20 61 76 74 72 61 6e 73 2d  al_mode avtrans-
0970: 32 2e 31 32 0a 0a 23 20 43 68 65 63 6b 20 74 68  2.12..# Check th
0980: 65 20 6c 6f 63 6b 69 6e 67 20 62 65 68 61 76 69  e locking behavi
0990: 6f 72 0a 23 0a 73 71 6c 69 74 65 33 5f 73 6f 66  or.#.sqlite3_sof
09a0: 74 5f 68 65 61 70 5f 6c 69 6d 69 74 20 30 0a 64  t_heap_limit 0.d
09b0: 6f 5f 74 65 73 74 20 61 76 74 72 61 6e 73 2d 33  o_test avtrans-3
09c0: 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .1 {.  execsql {
09d0: 0a 20 20 20 20 42 45 47 49 4e 3b 0a 20 20 20 20  .    BEGIN;.    
09e0: 55 50 44 41 54 45 20 6f 6e 65 20 53 45 54 20 61  UPDATE one SET a
09f0: 20 3d 20 30 20 57 48 45 52 45 20 30 3b 0a 20 20   = 0 WHERE 0;.  
0a00: 20 20 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20    SELECT a FROM 
0a10: 6f 6e 65 20 4f 52 44 45 52 20 42 59 20 61 3b 0a  one ORDER BY a;.
0a20: 20 20 7d 0a 7d 20 7b 31 20 32 20 33 7d 0a 64 6f    }.} {1 2 3}.do
0a30: 5f 74 65 73 74 20 61 76 74 72 61 6e 73 2d 33 2e  _test avtrans-3.
0a40: 32 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b  2 {.  catchsql {
0a50: 0a 20 20 20 20 53 45 4c 45 43 54 20 61 20 46 52  .    SELECT a FR
0a60: 4f 4d 20 74 77 6f 20 4f 52 44 45 52 20 42 59 20  OM two ORDER BY 
0a70: 61 3b 0a 20 20 7d 20 61 6c 74 64 62 0a 7d 20 7b  a;.  } altdb.} {
0a80: 30 20 7b 31 20 35 20 31 30 7d 7d 0a 64 6f 5f 74  0 {1 5 10}}.do_t
0a90: 65 73 74 20 61 76 74 72 61 6e 73 2d 33 2e 33 20  est avtrans-3.3 
0aa0: 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20  {.  catchsql {. 
0ab0: 20 20 20 53 45 4c 45 43 54 20 61 20 46 52 4f 4d     SELECT a FROM
0ac0: 20 6f 6e 65 20 4f 52 44 45 52 20 42 59 20 61 3b   one ORDER BY a;
0ad0: 0a 20 20 7d 20 61 6c 74 64 62 0a 7d 20 7b 30 20  .  } altdb.} {0 
0ae0: 7b 31 20 32 20 33 7d 7d 0a 64 6f 5f 74 65 73 74  {1 2 3}}.do_test
0af0: 20 61 76 74 72 61 6e 73 2d 33 2e 34 20 7b 0a 20   avtrans-3.4 {. 
0b00: 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20   catchsql {.    
0b10: 49 4e 53 45 52 54 20 49 4e 54 4f 20 6f 6e 65 20  INSERT INTO one 
0b20: 56 41 4c 55 45 53 28 34 2c 27 66 6f 75 72 27 29  VALUES(4,'four')
0b30: 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64  ;.  }.} {0 {}}.d
0b40: 6f 5f 74 65 73 74 20 61 76 74 72 61 6e 73 2d 33  o_test avtrans-3
0b50: 2e 35 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20  .5 {.  catchsql 
0b60: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 61 20 46  {.    SELECT a F
0b70: 52 4f 4d 20 74 77 6f 20 4f 52 44 45 52 20 42 59  ROM two ORDER BY
0b80: 20 61 3b 0a 20 20 7d 20 61 6c 74 64 62 0a 7d 20   a;.  } altdb.} 
0b90: 7b 30 20 7b 31 20 35 20 31 30 7d 7d 0a 64 6f 5f  {0 {1 5 10}}.do_
0ba0: 74 65 73 74 20 61 76 74 72 61 6e 73 2d 33 2e 36  test avtrans-3.6
0bb0: 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a   {.  catchsql {.
0bc0: 20 20 20 20 53 45 4c 45 43 54 20 61 20 46 52 4f      SELECT a FRO
0bd0: 4d 20 6f 6e 65 20 4f 52 44 45 52 20 42 59 20 61  M one ORDER BY a
0be0: 3b 0a 20 20 7d 20 61 6c 74 64 62 0a 7d 20 7b 30  ;.  } altdb.} {0
0bf0: 20 7b 31 20 32 20 33 7d 7d 0a 64 6f 5f 74 65 73   {1 2 3}}.do_tes
0c00: 74 20 61 76 74 72 61 6e 73 2d 33 2e 37 20 7b 0a  t avtrans-3.7 {.
0c10: 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20    catchsql {.   
0c20: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 77 6f   INSERT INTO two
0c30: 20 56 41 4c 55 45 53 28 34 2c 27 49 56 27 29 3b   VALUES(4,'IV');
0c40: 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f  .  }.} {0 {}}.do
0c50: 5f 74 65 73 74 20 61 76 74 72 61 6e 73 2d 33 2e  _test avtrans-3.
0c60: 38 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b  8 {.  catchsql {
0c70: 0a 20 20 20 20 53 45 4c 45 43 54 20 61 20 46 52  .    SELECT a FR
0c80: 4f 4d 20 74 77 6f 20 4f 52 44 45 52 20 42 59 20  OM two ORDER BY 
0c90: 61 3b 0a 20 20 7d 20 61 6c 74 64 62 0a 7d 20 7b  a;.  } altdb.} {
0ca0: 30 20 7b 31 20 35 20 31 30 7d 7d 0a 64 6f 5f 74  0 {1 5 10}}.do_t
0cb0: 65 73 74 20 61 76 74 72 61 6e 73 2d 33 2e 39 20  est avtrans-3.9 
0cc0: 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20  {.  catchsql {. 
0cd0: 20 20 20 53 45 4c 45 43 54 20 61 20 46 52 4f 4d     SELECT a FROM
0ce0: 20 6f 6e 65 20 4f 52 44 45 52 20 42 59 20 61 3b   one ORDER BY a;
0cf0: 0a 20 20 7d 20 61 6c 74 64 62 0a 7d 20 7b 30 20  .  } altdb.} {0 
0d00: 7b 31 20 32 20 33 7d 7d 0a 64 6f 5f 74 65 73 74  {1 2 3}}.do_test
0d10: 20 61 76 74 72 61 6e 73 2d 33 2e 31 30 20 7b 0a   avtrans-3.10 {.
0d20: 20 20 65 78 65 63 73 71 6c 20 7b 45 4e 44 20 54    execsql {END T
0d30: 52 41 4e 53 41 43 54 49 4f 4e 7d 0a 7d 20 7b 7d  RANSACTION}.} {}
0d40: 0a 64 6f 5f 74 65 73 74 20 61 76 74 72 61 6e 73  .do_test avtrans
0d50: 2d 33 2e 31 31 20 7b 0a 20 20 73 65 74 20 76 20  -3.11 {.  set v 
0d60: 5b 63 61 74 63 68 20 7b 65 78 65 63 73 71 6c 20  [catch {execsql 
0d70: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 61 20 46  {.    SELECT a F
0d80: 52 4f 4d 20 74 77 6f 20 4f 52 44 45 52 20 42 59  ROM two ORDER BY
0d90: 20 61 3b 0a 20 20 7d 20 61 6c 74 64 62 7d 20 6d   a;.  } altdb} m
0da0: 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20 76 20  sg].  lappend v 
0db0: 24 6d 73 67 0a 7d 20 7b 30 20 7b 31 20 34 20 35  $msg.} {0 {1 4 5
0dc0: 20 31 30 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 76   10}}.do_test av
0dd0: 74 72 61 6e 73 2d 33 2e 31 32 20 7b 0a 20 20 73  trans-3.12 {.  s
0de0: 65 74 20 76 20 5b 63 61 74 63 68 20 7b 65 78 65  et v [catch {exe
0df0: 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43  csql {.    SELEC
0e00: 54 20 61 20 46 52 4f 4d 20 6f 6e 65 20 4f 52 44  T a FROM one ORD
0e10: 45 52 20 42 59 20 61 3b 0a 20 20 7d 20 61 6c 74  ER BY a;.  } alt
0e20: 64 62 7d 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65  db} msg].  lappe
0e30: 6e 64 20 76 20 24 6d 73 67 0a 7d 20 7b 30 20 7b  nd v $msg.} {0 {
0e40: 31 20 32 20 33 20 34 7d 7d 0a 64 6f 5f 74 65 73  1 2 3 4}}.do_tes
0e50: 74 20 61 76 74 72 61 6e 73 2d 33 2e 31 33 20 7b  t avtrans-3.13 {
0e60: 0a 20 20 73 65 74 20 76 20 5b 63 61 74 63 68 20  .  set v [catch 
0e70: 7b 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53  {execsql {.    S
0e80: 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 74 77 6f  ELECT a FROM two
0e90: 20 4f 52 44 45 52 20 42 59 20 61 3b 0a 20 20 7d   ORDER BY a;.  }
0ea0: 20 64 62 7d 20 6d 73 67 5d 0a 20 20 6c 61 70 70   db} msg].  lapp
0eb0: 65 6e 64 20 76 20 24 6d 73 67 0a 7d 20 7b 30 20  end v $msg.} {0 
0ec0: 7b 31 20 34 20 35 20 31 30 7d 7d 0a 64 6f 5f 74  {1 4 5 10}}.do_t
0ed0: 65 73 74 20 61 76 74 72 61 6e 73 2d 33 2e 31 34  est avtrans-3.14
0ee0: 20 7b 0a 20 20 73 65 74 20 76 20 5b 63 61 74 63   {.  set v [catc
0ef0: 68 20 7b 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  h {execsql {.   
0f00: 20 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 6f   SELECT a FROM o
0f10: 6e 65 20 4f 52 44 45 52 20 42 59 20 61 3b 0a 20  ne ORDER BY a;. 
0f20: 20 7d 20 64 62 7d 20 6d 73 67 5d 0a 20 20 6c 61   } db} msg].  la
0f30: 70 70 65 6e 64 20 76 20 24 6d 73 67 0a 7d 20 7b  ppend v $msg.} {
0f40: 30 20 7b 31 20 32 20 33 20 34 7d 7d 0a 73 71 6c  0 {1 2 3 4}}.sql
0f50: 69 74 65 33 5f 73 6f 66 74 5f 68 65 61 70 5f 6c  ite3_soft_heap_l
0f60: 69 6d 69 74 20 24 63 6d 64 6c 69 6e 65 61 72 67  imit $cmdlinearg
0f70: 28 73 6f 66 74 2d 68 65 61 70 2d 6c 69 6d 69 74  (soft-heap-limit
0f80: 29 0a 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63  ).integrity_chec
0f90: 6b 20 61 76 74 72 61 6e 73 2d 33 2e 31 35 0a 0a  k avtrans-3.15..
0fa0: 64 6f 5f 74 65 73 74 20 61 76 74 72 61 6e 73 2d  do_test avtrans-
0fb0: 34 2e 31 20 7b 0a 20 20 73 65 74 20 76 20 5b 63  4.1 {.  set v [c
0fc0: 61 74 63 68 20 7b 65 78 65 63 73 71 6c 20 7b 0a  atch {execsql {.
0fd0: 20 20 20 20 43 4f 4d 4d 49 54 3b 0a 20 20 7d 20      COMMIT;.  } 
0fe0: 64 62 7d 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65  db} msg].  lappe
0ff0: 6e 64 20 76 20 24 6d 73 67 0a 7d 20 7b 31 20 7b  nd v $msg.} {1 {
1000: 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69 74 20 2d 20  cannot commit - 
1010: 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  no transaction i
1020: 73 20 61 63 74 69 76 65 7d 7d 0a 64 6f 5f 74 65  s active}}.do_te
1030: 73 74 20 61 76 74 72 61 6e 73 2d 34 2e 32 20 7b  st avtrans-4.2 {
1040: 0a 20 20 73 65 74 20 76 20 5b 63 61 74 63 68 20  .  set v [catch 
1050: 7b 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 52  {execsql {.    R
1060: 4f 4c 4c 42 41 43 4b 3b 0a 20 20 7d 20 64 62 7d  OLLBACK;.  } db}
1070: 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20   msg].  lappend 
1080: 76 20 24 6d 73 67 0a 7d 20 7b 31 20 7b 63 61 6e  v $msg.} {1 {can
1090: 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 2d 20 6e  not rollback - n
10a0: 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  o transaction is
10b0: 20 61 63 74 69 76 65 7d 7d 0a 64 6f 5f 74 65 73   active}}.do_tes
10c0: 74 20 61 76 74 72 61 6e 73 2d 34 2e 33 20 7b 0a  t avtrans-4.3 {.
10d0: 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20    catchsql {.   
10e0: 20 42 45 47 49 4e 20 54 52 41 4e 53 41 43 54 49   BEGIN TRANSACTI
10f0: 4f 4e 3b 0a 20 20 20 20 55 50 44 41 54 45 20 74  ON;.    UPDATE t
1100: 77 6f 20 53 45 54 20 61 20 3d 20 30 20 57 48 45  wo SET a = 0 WHE
1110: 52 45 20 30 3b 0a 20 20 20 20 53 45 4c 45 43 54  RE 0;.    SELECT
1120: 20 61 20 46 52 4f 4d 20 74 77 6f 20 4f 52 44 45   a FROM two ORDE
1130: 52 20 42 59 20 61 3b 0a 20 20 7d 20 64 62 0a 7d  R BY a;.  } db.}
1140: 20 7b 30 20 7b 31 20 34 20 35 20 31 30 7d 7d 0a   {0 {1 4 5 10}}.
1150: 64 6f 5f 74 65 73 74 20 61 76 74 72 61 6e 73 2d  do_test avtrans-
1160: 34 2e 34 20 7b 0a 20 20 63 61 74 63 68 73 71 6c  4.4 {.  catchsql
1170: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 61 20   {.    SELECT a 
1180: 46 52 4f 4d 20 74 77 6f 20 4f 52 44 45 52 20 42  FROM two ORDER B
1190: 59 20 61 3b 0a 20 20 7d 20 61 6c 74 64 62 0a 7d  Y a;.  } altdb.}
11a0: 20 7b 30 20 7b 31 20 34 20 35 20 31 30 7d 7d 0a   {0 {1 4 5 10}}.
11b0: 64 6f 5f 74 65 73 74 20 61 76 74 72 61 6e 73 2d  do_test avtrans-
11c0: 34 2e 35 20 7b 0a 20 20 63 61 74 63 68 73 71 6c  4.5 {.  catchsql
11d0: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 61 20   {.    SELECT a 
11e0: 46 52 4f 4d 20 6f 6e 65 20 4f 52 44 45 52 20 42  FROM one ORDER B
11f0: 59 20 61 3b 0a 20 20 7d 20 61 6c 74 64 62 0a 7d  Y a;.  } altdb.}
1200: 20 7b 30 20 7b 31 20 32 20 33 20 34 7d 7d 0a 64   {0 {1 2 3 4}}.d
1210: 6f 5f 74 65 73 74 20 61 76 74 72 61 6e 73 2d 34  o_test avtrans-4
1220: 2e 36 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20  .6 {.  catchsql 
1230: 7b 0a 20 20 20 20 42 45 47 49 4e 20 54 52 41 4e  {.    BEGIN TRAN
1240: 53 41 43 54 49 4f 4e 3b 0a 20 20 20 20 53 45 4c  SACTION;.    SEL
1250: 45 43 54 20 61 20 46 52 4f 4d 20 6f 6e 65 20 4f  ECT a FROM one O
1260: 52 44 45 52 20 42 59 20 61 3b 0a 20 20 7d 20 64  RDER BY a;.  } d
1270: 62 0a 7d 20 7b 31 20 7b 63 61 6e 6e 6f 74 20 73  b.} {1 {cannot s
1280: 74 61 72 74 20 61 20 74 72 61 6e 73 61 63 74 69  tart a transacti
1290: 6f 6e 20 77 69 74 68 69 6e 20 61 20 74 72 61 6e  on within a tran
12a0: 73 61 63 74 69 6f 6e 7d 7d 0a 64 6f 5f 74 65 73  saction}}.do_tes
12b0: 74 20 61 76 74 72 61 6e 73 2d 34 2e 37 20 7b 0a  t avtrans-4.7 {.
12c0: 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20    catchsql {.   
12d0: 20 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 74   SELECT a FROM t
12e0: 77 6f 20 4f 52 44 45 52 20 42 59 20 61 3b 0a 20  wo ORDER BY a;. 
12f0: 20 7d 20 61 6c 74 64 62 0a 7d 20 7b 30 20 7b 31   } altdb.} {0 {1
1300: 20 34 20 35 20 31 30 7d 7d 0a 64 6f 5f 74 65 73   4 5 10}}.do_tes
1310: 74 20 61 76 74 72 61 6e 73 2d 34 2e 38 20 7b 0a  t avtrans-4.8 {.
1320: 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20    catchsql {.   
1330: 20 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 6f   SELECT a FROM o
1340: 6e 65 20 4f 52 44 45 52 20 42 59 20 61 3b 0a 20  ne ORDER BY a;. 
1350: 20 7d 20 61 6c 74 64 62 0a 7d 20 7b 30 20 7b 31   } altdb.} {0 {1
1360: 20 32 20 33 20 34 7d 7d 0a 64 6f 5f 74 65 73 74   2 3 4}}.do_test
1370: 20 61 76 74 72 61 6e 73 2d 34 2e 39 20 7b 0a 20   avtrans-4.9 {. 
1380: 20 73 65 74 20 76 20 5b 63 61 74 63 68 20 7b 65   set v [catch {e
1390: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 45 4e 44  xecsql {.    END
13a0: 20 54 52 41 4e 53 41 43 54 49 4f 4e 3b 0a 20 20   TRANSACTION;.  
13b0: 20 20 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20    SELECT a FROM 
13c0: 74 77 6f 20 4f 52 44 45 52 20 42 59 20 61 3b 0a  two ORDER BY a;.
13d0: 20 20 7d 20 64 62 7d 20 6d 73 67 5d 0a 20 20 6c    } db} msg].  l
13e0: 61 70 70 65 6e 64 20 76 20 24 6d 73 67 0a 7d 20  append v $msg.} 
13f0: 7b 30 20 7b 31 20 34 20 35 20 31 30 7d 7d 0a 64  {0 {1 4 5 10}}.d
1400: 6f 5f 74 65 73 74 20 61 76 74 72 61 6e 73 2d 34  o_test avtrans-4
1410: 2e 31 30 20 7b 0a 20 20 73 65 74 20 76 20 5b 63  .10 {.  set v [c
1420: 61 74 63 68 20 7b 65 78 65 63 73 71 6c 20 7b 0a  atch {execsql {.
1430: 20 20 20 20 53 45 4c 45 43 54 20 61 20 46 52 4f      SELECT a FRO
1440: 4d 20 74 77 6f 20 4f 52 44 45 52 20 42 59 20 61  M two ORDER BY a
1450: 3b 0a 20 20 7d 20 61 6c 74 64 62 7d 20 6d 73 67  ;.  } altdb} msg
1460: 5d 0a 20 20 6c 61 70 70 65 6e 64 20 76 20 24 6d  ].  lappend v $m
1470: 73 67 0a 7d 20 7b 30 20 7b 31 20 34 20 35 20 31  sg.} {0 {1 4 5 1
1480: 30 7d 7d 0a 64 6f 5f 74 65 73 74 20 61 76 74 72  0}}.do_test avtr
1490: 61 6e 73 2d 34 2e 31 31 20 7b 0a 20 20 73 65 74  ans-4.11 {.  set
14a0: 20 76 20 5b 63 61 74 63 68 20 7b 65 78 65 63 73   v [catch {execs
14b0: 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  ql {.    SELECT 
14c0: 61 20 46 52 4f 4d 20 6f 6e 65 20 4f 52 44 45 52  a FROM one ORDER
14d0: 20 42 59 20 61 3b 0a 20 20 7d 20 61 6c 74 64 62   BY a;.  } altdb
14e0: 7d 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64  } msg].  lappend
14f0: 20 76 20 24 6d 73 67 0a 7d 20 7b 30 20 7b 31 20   v $msg.} {0 {1 
1500: 32 20 33 20 34 7d 7d 0a 69 6e 74 65 67 72 69 74  2 3 4}}.integrit
1510: 79 5f 63 68 65 63 6b 20 61 76 74 72 61 6e 73 2d  y_check avtrans-
1520: 34 2e 31 32 0a 64 6f 5f 74 65 73 74 20 61 76 74  4.12.do_test avt
1530: 72 61 6e 73 2d 34 2e 39 38 20 7b 0a 20 20 61 6c  rans-4.98 {.  al
1540: 74 64 62 20 63 6c 6f 73 65 0a 20 20 65 78 65 63  tdb close.  exec
1550: 73 71 6c 20 7b 0a 20 20 20 20 44 52 4f 50 20 54  sql {.    DROP T
1560: 41 42 4c 45 20 6f 6e 65 3b 0a 20 20 20 20 44 52  ABLE one;.    DR
1570: 4f 50 20 54 41 42 4c 45 20 74 77 6f 3b 0a 20 20  OP TABLE two;.  
1580: 7d 0a 7d 20 7b 7d 0a 69 6e 74 65 67 72 69 74 79  }.} {}.integrity
1590: 5f 63 68 65 63 6b 20 61 76 74 72 61 6e 73 2d 34  _check avtrans-4
15a0: 2e 39 39 0a 0a 23 20 43 68 65 63 6b 20 6f 75 74  .99..# Check out
15b0: 20 74 68 65 20 63 6f 6d 6d 69 74 2f 72 6f 6c 6c   the commit/roll
15c0: 62 61 63 6b 20 62 65 68 61 76 69 6f 72 20 6f 66  back behavior of
15d0: 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 23 0a   the database.#.
15e0: 64 6f 5f 74 65 73 74 20 61 76 74 72 61 6e 73 2d  do_test avtrans-
15f0: 35 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  5.1 {.  execsql 
1600: 7b 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f  {SELECT name FRO
1610: 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20  M sqlite_master 
1620: 57 48 45 52 45 20 74 79 70 65 3d 27 74 61 62 6c  WHERE type='tabl
1630: 65 27 20 4f 52 44 45 52 20 42 59 20 6e 61 6d 65  e' ORDER BY name
1640: 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 61  }.} {}.do_test a
1650: 76 74 72 61 6e 73 2d 35 2e 32 20 7b 0a 20 20 65  vtrans-5.2 {.  e
1660: 78 65 63 73 71 6c 20 7b 42 45 47 49 4e 20 54 52  xecsql {BEGIN TR
1670: 41 4e 53 41 43 54 49 4f 4e 7d 0a 20 20 65 78 65  ANSACTION}.  exe
1680: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 61 6d  csql {SELECT nam
1690: 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61  e FROM sqlite_ma
16a0: 73 74 65 72 20 57 48 45 52 45 20 74 79 70 65 3d  ster WHERE type=
16b0: 27 74 61 62 6c 65 27 20 4f 52 44 45 52 20 42 59  'table' ORDER BY
16c0: 20 6e 61 6d 65 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74   name}.} {}.do_t
16d0: 65 73 74 20 61 76 74 72 61 6e 73 2d 35 2e 33 20  est avtrans-5.3 
16e0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 43 52 45  {.  execsql {CRE
16f0: 41 54 45 20 54 41 42 4c 45 20 6f 6e 65 28 61 20  ATE TABLE one(a 
1700: 74 65 78 74 2c 20 62 20 69 6e 74 29 7d 0a 20 20  text, b int)}.  
1710: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
1720: 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65  name FROM sqlite
1730: 5f 6d 61 73 74 65 72 20 57 48 45 52 45 20 74 79  _master WHERE ty
1740: 70 65 3d 27 74 61 62 6c 65 27 20 4f 52 44 45 52  pe='table' ORDER
1750: 20 42 59 20 6e 61 6d 65 7d 0a 7d 20 7b 6f 6e 65   BY name}.} {one
1760: 7d 0a 64 6f 5f 74 65 73 74 20 61 76 74 72 61 6e  }.do_test avtran
1770: 73 2d 35 2e 34 20 7b 0a 20 20 65 78 65 63 73 71  s-5.4 {.  execsq
1780: 6c 20 7b 53 45 4c 45 43 54 20 61 2c 62 20 46 52  l {SELECT a,b FR
1790: 4f 4d 20 6f 6e 65 20 4f 52 44 45 52 20 42 59 20  OM one ORDER BY 
17a0: 62 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20  b}.} {}.do_test 
17b0: 61 76 74 72 61 6e 73 2d 35 2e 35 20 7b 0a 20 20  avtrans-5.5 {.  
17c0: 65 78 65 63 73 71 6c 20 7b 49 4e 53 45 52 54 20  execsql {INSERT 
17d0: 49 4e 54 4f 20 6f 6e 65 28 61 2c 62 29 20 56 41  INTO one(a,b) VA
17e0: 4c 55 45 53 28 27 68 65 6c 6c 6f 27 2c 20 31 29  LUES('hello', 1)
17f0: 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  }.  execsql {SEL
1800: 45 43 54 20 61 2c 62 20 46 52 4f 4d 20 6f 6e 65  ECT a,b FROM one
1810: 20 4f 52 44 45 52 20 42 59 20 62 7d 0a 7d 20 7b   ORDER BY b}.} {
1820: 68 65 6c 6c 6f 20 31 7d 0a 64 6f 5f 74 65 73 74  hello 1}.do_test
1830: 20 61 76 74 72 61 6e 73 2d 35 2e 36 20 7b 0a 20   avtrans-5.6 {. 
1840: 20 65 78 65 63 73 71 6c 20 7b 52 4f 4c 4c 42 41   execsql {ROLLBA
1850: 43 4b 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  CK}.  execsql {S
1860: 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20  ELECT name FROM 
1870: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 57 48  sqlite_master WH
1880: 45 52 45 20 74 79 70 65 3d 27 74 61 62 6c 65 27  ERE type='table'
1890: 20 4f 52 44 45 52 20 42 59 20 6e 61 6d 65 7d 0a   ORDER BY name}.
18a0: 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 61 76 74  } {}.do_test avt
18b0: 72 61 6e 73 2d 35 2e 37 20 7b 0a 20 20 73 65 74  rans-5.7 {.  set
18c0: 20 76 20 5b 63 61 74 63 68 20 7b 0a 20 20 20 20   v [catch {.    
18d0: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
18e0: 61 2c 62 20 46 52 4f 4d 20 6f 6e 65 20 4f 52 44  a,b FROM one ORD
18f0: 45 52 20 42 59 20 62 7d 0a 20 20 7d 20 6d 73 67  ER BY b}.  } msg
1900: 5d 0a 20 20 6c 61 70 70 65 6e 64 20 76 20 24 6d  ].  lappend v $m
1910: 73 67 0a 7d 20 7b 31 20 7b 6e 6f 20 73 75 63 68  sg.} {1 {no such
1920: 20 74 61 62 6c 65 3a 20 6f 6e 65 7d 7d 0a 0a 23   table: one}}..#
1930: 20 54 65 73 74 20 63 6f 6d 6d 69 74 73 20 61 6e   Test commits an
1940: 64 20 72 6f 6c 6c 62 61 63 6b 73 20 6f 66 20 74  d rollbacks of t
1950: 61 62 6c 65 20 43 52 45 41 54 45 20 54 41 42 4c  able CREATE TABL
1960: 45 73 2c 20 43 52 45 41 54 45 20 49 4e 44 45 58  Es, CREATE INDEX
1970: 73 0a 23 20 44 52 4f 50 20 54 41 42 4c 45 73 20  s.# DROP TABLEs 
1980: 61 6e 64 20 44 52 4f 50 20 49 4e 44 45 58 73 0a  and DROP INDEXs.
1990: 23 0a 64 6f 5f 74 65 73 74 20 61 76 74 72 61 6e  #.do_test avtran
19a0: 73 2d 35 2e 38 20 7b 0a 20 20 65 78 65 63 73 71  s-5.8 {.  execsq
19b0: 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 6e  l {.    SELECT n
19c0: 61 6d 65 20 66 52 4f 4d 20 73 71 6c 69 74 65 5f  ame fROM sqlite_
19d0: 6d 61 73 74 65 72 20 0a 20 20 20 20 57 48 45 52  master .    WHER
19e0: 45 20 74 79 70 65 3d 27 74 61 62 6c 65 27 20 4f  E type='table' O
19f0: 52 20 74 79 70 65 3d 27 69 6e 64 65 78 27 0a 20  R type='index'. 
1a00: 20 20 20 4f 52 44 45 52 20 42 59 20 6e 61 6d 65     ORDER BY name
1a10: 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73  .  }.} {}.do_tes
1a20: 74 20 61 76 74 72 61 6e 73 2d 35 2e 39 20 7b 0a  t avtrans-5.9 {.
1a30: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
1a40: 42 45 47 49 4e 20 54 52 41 4e 53 41 43 54 49 4f  BEGIN TRANSACTIO
1a50: 4e 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41  N;.    CREATE TA
1a60: 42 4c 45 20 74 31 28 61 20 69 6e 74 2c 20 62 20  BLE t1(a int, b 
1a70: 69 6e 74 2c 20 63 20 69 6e 74 29 3b 0a 20 20 20  int, c int);.   
1a80: 20 53 45 4c 45 43 54 20 6e 61 6d 65 20 66 52 4f   SELECT name fRO
1a90: 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20  M sqlite_master 
1aa0: 0a 20 20 20 20 57 48 45 52 45 20 74 79 70 65 3d  .    WHERE type=
1ab0: 27 74 61 62 6c 65 27 20 4f 52 20 74 79 70 65 3d  'table' OR type=
1ac0: 27 69 6e 64 65 78 27 0a 20 20 20 20 4f 52 44 45  'index'.    ORDE
1ad0: 52 20 42 59 20 6e 61 6d 65 3b 0a 20 20 7d 0a 7d  R BY name;.  }.}
1ae0: 20 7b 74 31 7d 0a 64 6f 5f 74 65 73 74 20 61 76   {t1}.do_test av
1af0: 74 72 61 6e 73 2d 35 2e 31 30 20 7b 0a 20 20 65  trans-5.10 {.  e
1b00: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45  xecsql {.    CRE
1b10: 41 54 45 20 49 4e 44 45 58 20 69 31 20 4f 4e 20  ATE INDEX i1 ON 
1b20: 74 31 28 61 29 3b 0a 20 20 20 20 53 45 4c 45 43  t1(a);.    SELEC
1b30: 54 20 6e 61 6d 65 20 66 52 4f 4d 20 73 71 6c 69  T name fROM sqli
1b40: 74 65 5f 6d 61 73 74 65 72 20 0a 20 20 20 20 57  te_master .    W
1b50: 48 45 52 45 20 74 79 70 65 3d 27 74 61 62 6c 65  HERE type='table
1b60: 27 20 4f 52 20 74 79 70 65 3d 27 69 6e 64 65 78  ' OR type='index
1b70: 27 0a 20 20 20 20 4f 52 44 45 52 20 42 59 20 6e  '.    ORDER BY n
1b80: 61 6d 65 3b 0a 20 20 7d 0a 7d 20 7b 69 31 20 74  ame;.  }.} {i1 t
1b90: 31 7d 0a 64 6f 5f 74 65 73 74 20 61 76 74 72 61  1}.do_test avtra
1ba0: 6e 73 2d 35 2e 31 31 20 7b 0a 20 20 65 78 65 63  ns-5.11 {.  exec
1bb0: 73 71 6c 20 7b 0a 20 20 20 20 43 4f 4d 4d 49 54  sql {.    COMMIT
1bc0: 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 6e 61 6d  ;.    SELECT nam
1bd0: 65 20 66 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61  e fROM sqlite_ma
1be0: 73 74 65 72 20 0a 20 20 20 20 57 48 45 52 45 20  ster .    WHERE 
1bf0: 74 79 70 65 3d 27 74 61 62 6c 65 27 20 4f 52 20  type='table' OR 
1c00: 74 79 70 65 3d 27 69 6e 64 65 78 27 0a 20 20 20  type='index'.   
1c10: 20 4f 52 44 45 52 20 42 59 20 6e 61 6d 65 3b 0a   ORDER BY name;.
1c20: 20 20 7d 0a 7d 20 7b 69 31 20 74 31 7d 0a 64 6f    }.} {i1 t1}.do
1c30: 5f 74 65 73 74 20 61 76 74 72 61 6e 73 2d 35 2e  _test avtrans-5.
1c40: 31 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  12 {.  execsql {
1c50: 0a 20 20 20 20 42 45 47 49 4e 20 54 52 41 4e 53  .    BEGIN TRANS
1c60: 41 43 54 49 4f 4e 3b 0a 20 20 20 20 43 52 45 41  ACTION;.    CREA
1c70: 54 45 20 54 41 42 4c 45 20 74 32 28 61 20 69 6e  TE TABLE t2(a in
1c80: 74 2c 20 62 20 69 6e 74 2c 20 63 20 69 6e 74 29  t, b int, c int)
1c90: 3b 0a 20 20 20 20 43 52 45 41 54 45 20 49 4e 44  ;.    CREATE IND
1ca0: 45 58 20 69 32 61 20 4f 4e 20 74 32 28 61 29 3b  EX i2a ON t2(a);
1cb0: 0a 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45  .    CREATE INDE
1cc0: 58 20 69 32 62 20 4f 4e 20 74 32 28 62 29 3b 0a  X i2b ON t2(b);.
1cd0: 20 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20 74      DROP TABLE t
1ce0: 31 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 6e 61  1;.    SELECT na
1cf0: 6d 65 20 66 52 4f 4d 20 73 71 6c 69 74 65 5f 6d  me fROM sqlite_m
1d00: 61 73 74 65 72 20 0a 20 20 20 20 57 48 45 52 45  aster .    WHERE
1d10: 20 74 79 70 65 3d 27 74 61 62 6c 65 27 20 4f 52   type='table' OR
1d20: 20 74 79 70 65 3d 27 69 6e 64 65 78 27 0a 20 20   type='index'.  
1d30: 20 20 4f 52 44 45 52 20 42 59 20 6e 61 6d 65 3b    ORDER BY name;
1d40: 0a 20 20 7d 0a 7d 20 7b 69 32 61 20 69 32 62 20  .  }.} {i2a i2b 
1d50: 74 32 7d 0a 64 6f 5f 74 65 73 74 20 61 76 74 72  t2}.do_test avtr
1d60: 61 6e 73 2d 35 2e 31 33 20 7b 0a 20 20 65 78 65  ans-5.13 {.  exe
1d70: 63 73 71 6c 20 7b 0a 20 20 20 20 52 4f 4c 4c 42  csql {.    ROLLB
1d80: 41 43 4b 3b 0a 20 20 20 20 53 45 4c 45 43 54 20  ACK;.    SELECT 
1d90: 6e 61 6d 65 20 66 52 4f 4d 20 73 71 6c 69 74 65  name fROM sqlite
1da0: 5f 6d 61 73 74 65 72 20 0a 20 20 20 20 57 48 45  _master .    WHE
1db0: 52 45 20 74 79 70 65 3d 27 74 61 62 6c 65 27 20  RE type='table' 
1dc0: 4f 52 20 74 79 70 65 3d 27 69 6e 64 65 78 27 0a  OR type='index'.
1dd0: 20 20 20 20 4f 52 44 45 52 20 42 59 20 6e 61 6d      ORDER BY nam
1de0: 65 3b 0a 20 20 7d 0a 7d 20 7b 69 31 20 74 31 7d  e;.  }.} {i1 t1}
1df0: 0a 64 6f 5f 74 65 73 74 20 61 76 74 72 61 6e 73  .do_test avtrans
1e00: 2d 35 2e 31 34 20 7b 0a 20 20 65 78 65 63 73 71  -5.14 {.  execsq
1e10: 6c 20 7b 0a 20 20 20 20 42 45 47 49 4e 20 54 52  l {.    BEGIN TR
1e20: 41 4e 53 41 43 54 49 4f 4e 3b 0a 20 20 20 20 44  ANSACTION;.    D
1e30: 52 4f 50 20 49 4e 44 45 58 20 69 31 3b 0a 20 20  ROP INDEX i1;.  
1e40: 20 20 53 45 4c 45 43 54 20 6e 61 6d 65 20 66 52    SELECT name fR
1e50: 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  OM sqlite_master
1e60: 20 0a 20 20 20 20 57 48 45 52 45 20 74 79 70 65   .    WHERE type
1e70: 3d 27 74 61 62 6c 65 27 20 4f 52 20 74 79 70 65  ='table' OR type
1e80: 3d 27 69 6e 64 65 78 27 0a 20 20 20 20 4f 52 44  ='index'.    ORD
1e90: 45 52 20 42 59 20 6e 61 6d 65 3b 0a 20 20 7d 0a  ER BY name;.  }.
1ea0: 7d 20 7b 74 31 7d 0a 64 6f 5f 74 65 73 74 20 61  } {t1}.do_test a
1eb0: 76 74 72 61 6e 73 2d 35 2e 31 35 20 7b 0a 20 20  vtrans-5.15 {.  
1ec0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 52 4f  execsql {.    RO
1ed0: 4c 4c 42 41 43 4b 3b 0a 20 20 20 20 53 45 4c 45  LLBACK;.    SELE
1ee0: 43 54 20 6e 61 6d 65 20 66 52 4f 4d 20 73 71 6c  CT name fROM sql
1ef0: 69 74 65 5f 6d 61 73 74 65 72 20 0a 20 20 20 20  ite_master .    
1f00: 57 48 45 52 45 20 74 79 70 65 3d 27 74 61 62 6c  WHERE type='tabl
1f10: 65 27 20 4f 52 20 74 79 70 65 3d 27 69 6e 64 65  e' OR type='inde
1f20: 78 27 0a 20 20 20 20 4f 52 44 45 52 20 42 59 20  x'.    ORDER BY 
1f30: 6e 61 6d 65 3b 0a 20 20 7d 0a 7d 20 7b 69 31 20  name;.  }.} {i1 
1f40: 74 31 7d 0a 64 6f 5f 74 65 73 74 20 61 76 74 72  t1}.do_test avtr
1f50: 61 6e 73 2d 35 2e 31 36 20 7b 0a 20 20 65 78 65  ans-5.16 {.  exe
1f60: 63 73 71 6c 20 7b 0a 20 20 20 20 42 45 47 49 4e  csql {.    BEGIN
1f70: 20 54 52 41 4e 53 41 43 54 49 4f 4e 3b 0a 20 20   TRANSACTION;.  
1f80: 20 20 44 52 4f 50 20 49 4e 44 45 58 20 69 31 3b    DROP INDEX i1;
1f90: 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  .    CREATE TABL
1fa0: 45 20 74 32 28 78 20 69 6e 74 2c 20 79 20 69 6e  E t2(x int, y in
1fb0: 74 2c 20 7a 20 69 6e 74 29 3b 0a 20 20 20 20 43  t, z int);.    C
1fc0: 52 45 41 54 45 20 49 4e 44 45 58 20 69 32 78 20  REATE INDEX i2x 
1fd0: 4f 4e 20 74 32 28 78 29 3b 0a 20 20 20 20 43 52  ON t2(x);.    CR
1fe0: 45 41 54 45 20 49 4e 44 45 58 20 69 32 79 20 4f  EATE INDEX i2y O
1ff0: 4e 20 74 32 28 79 29 3b 0a 20 20 20 20 49 4e 53  N t2(y);.    INS
2000: 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55  ERT INTO t2 VALU
2010: 45 53 28 31 2c 32 2c 33 29 3b 0a 20 20 20 20 53  ES(1,2,3);.    S
2020: 45 4c 45 43 54 20 6e 61 6d 65 20 66 52 4f 4d 20  ELECT name fROM 
2030: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 0a 20  sqlite_master . 
2040: 20 20 20 57 48 45 52 45 20 74 79 70 65 3d 27 74     WHERE type='t
2050: 61 62 6c 65 27 20 4f 52 20 74 79 70 65 3d 27 69  able' OR type='i
2060: 6e 64 65 78 27 0a 20 20 20 20 4f 52 44 45 52 20  ndex'.    ORDER 
2070: 42 59 20 6e 61 6d 65 3b 0a 20 20 7d 0a 7d 20 7b  BY name;.  }.} {
2080: 69 32 78 20 69 32 79 20 74 31 20 74 32 7d 0a 64  i2x i2y t1 t2}.d
2090: 6f 5f 74 65 73 74 20 61 76 74 72 61 6e 73 2d 35  o_test avtrans-5
20a0: 2e 31 37 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  .17 {.  execsql 
20b0: 7b 0a 20 20 20 20 43 4f 4d 4d 49 54 3b 0a 20 20  {.    COMMIT;.  
20c0: 20 20 53 45 4c 45 43 54 20 6e 61 6d 65 20 66 52    SELECT name fR
20d0: 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  OM sqlite_master
20e0: 20 0a 20 20 20 20 57 48 45 52 45 20 74 79 70 65   .    WHERE type
20f0: 3d 27 74 61 62 6c 65 27 20 4f 52 20 74 79 70 65  ='table' OR type
2100: 3d 27 69 6e 64 65 78 27 0a 20 20 20 20 4f 52 44  ='index'.    ORD
2110: 45 52 20 42 59 20 6e 61 6d 65 3b 0a 20 20 7d 0a  ER BY name;.  }.
2120: 7d 20 7b 69 32 78 20 69 32 79 20 74 31 20 74 32  } {i2x i2y t1 t2
2130: 7d 0a 64 6f 5f 74 65 73 74 20 61 76 74 72 61 6e  }.do_test avtran
2140: 73 2d 35 2e 31 38 20 7b 0a 20 20 65 78 65 63 73  s-5.18 {.  execs
2150: 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  ql {.    SELECT 
2160: 2a 20 46 52 4f 4d 20 74 32 3b 0a 20 20 7d 0a 7d  * FROM t2;.  }.}
2170: 20 7b 31 20 32 20 33 7d 0a 64 6f 5f 74 65 73 74   {1 2 3}.do_test
2180: 20 61 76 74 72 61 6e 73 2d 35 2e 31 39 20 7b 0a   avtrans-5.19 {.
2190: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
21a0: 53 45 4c 45 43 54 20 78 20 46 52 4f 4d 20 74 32  SELECT x FROM t2
21b0: 20 57 48 45 52 45 20 79 3d 32 3b 0a 20 20 7d 0a   WHERE y=2;.  }.
21c0: 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 61 76  } {1}.do_test av
21d0: 74 72 61 6e 73 2d 35 2e 32 30 20 7b 0a 20 20 65  trans-5.20 {.  e
21e0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 42 45 47  xecsql {.    BEG
21f0: 49 4e 20 54 52 41 4e 53 41 43 54 49 4f 4e 3b 0a  IN TRANSACTION;.
2200: 20 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20 74      DROP TABLE t
2210: 31 3b 0a 20 20 20 20 44 52 4f 50 20 54 41 42 4c  1;.    DROP TABL
2220: 45 20 74 32 3b 0a 20 20 20 20 53 45 4c 45 43 54  E t2;.    SELECT
2230: 20 6e 61 6d 65 20 66 52 4f 4d 20 73 71 6c 69 74   name fROM sqlit
2240: 65 5f 6d 61 73 74 65 72 20 0a 20 20 20 20 57 48  e_master .    WH
2250: 45 52 45 20 74 79 70 65 3d 27 74 61 62 6c 65 27  ERE type='table'
2260: 20 4f 52 20 74 79 70 65 3d 27 69 6e 64 65 78 27   OR type='index'
2270: 0a 20 20 20 20 4f 52 44 45 52 20 42 59 20 6e 61  .    ORDER BY na
2280: 6d 65 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f  me;.  }.} {}.do_
2290: 74 65 73 74 20 61 76 74 72 61 6e 73 2d 35 2e 32  test avtrans-5.2
22a0: 31 20 7b 0a 20 20 73 65 74 20 72 20 5b 63 61 74  1 {.  set r [cat
22b0: 63 68 20 7b 65 78 65 63 73 71 6c 20 7b 0a 20 20  ch {execsql {.  
22c0: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
22d0: 74 32 0a 20 20 7d 7d 20 6d 73 67 5d 0a 20 20 6c  t2.  }} msg].  l
22e0: 61 70 70 65 6e 64 20 72 20 24 6d 73 67 0a 7d 20  append r $msg.} 
22f0: 7b 31 20 7b 6e 6f 20 73 75 63 68 20 74 61 62 6c  {1 {no such tabl
2300: 65 3a 20 74 32 7d 7d 0a 64 6f 5f 74 65 73 74 20  e: t2}}.do_test 
2310: 61 76 74 72 61 6e 73 2d 35 2e 32 32 20 7b 0a 20  avtrans-5.22 {. 
2320: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 52   execsql {.    R
2330: 4f 4c 4c 42 41 43 4b 3b 0a 20 20 20 20 53 45 4c  OLLBACK;.    SEL
2340: 45 43 54 20 6e 61 6d 65 20 66 52 4f 4d 20 73 71  ECT name fROM sq
2350: 6c 69 74 65 5f 6d 61 73 74 65 72 20 0a 20 20 20  lite_master .   
2360: 20 57 48 45 52 45 20 74 79 70 65 3d 27 74 61 62   WHERE type='tab
2370: 6c 65 27 20 4f 52 20 74 79 70 65 3d 27 69 6e 64  le' OR type='ind
2380: 65 78 27 0a 20 20 20 20 4f 52 44 45 52 20 42 59  ex'.    ORDER BY
2390: 20 6e 61 6d 65 3b 0a 20 20 7d 0a 7d 20 7b 69 32   name;.  }.} {i2
23a0: 78 20 69 32 79 20 74 31 20 74 32 7d 0a 64 6f 5f  x i2y t1 t2}.do_
23b0: 74 65 73 74 20 61 76 74 72 61 6e 73 2d 35 2e 32  test avtrans-5.2
23c0: 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  3 {.  execsql {.
23d0: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
23e0: 4d 20 74 32 3b 0a 20 20 7d 0a 7d 20 7b 31 20 32  M t2;.  }.} {1 2
23f0: 20 33 7d 0a 69 6e 74 65 67 72 69 74 79 5f 63 68   3}.integrity_ch
2400: 65 63 6b 20 61 76 74 72 61 6e 73 2d 35 2e 32 33  eck avtrans-5.23
2410: 0a 0a 0a 23 20 54 72 79 20 74 6f 20 44 52 4f 50  ...# Try to DROP
2420: 20 61 6e 64 20 43 52 45 41 54 45 20 74 61 62 6c   and CREATE tabl
2430: 65 73 20 61 6e 64 20 69 6e 64 69 63 65 73 20 77  es and indices w
2440: 69 74 68 20 74 68 65 20 73 61 6d 65 20 6e 61 6d  ith the same nam
2450: 65 0a 23 20 77 69 74 68 69 6e 20 61 20 74 72 61  e.# within a tra
2460: 6e 73 61 63 74 69 6f 6e 2e 20 20 4d 61 6b 65 20  nsaction.  Make 
2470: 73 75 72 65 20 52 4f 4c 4c 42 41 43 4b 20 77 6f  sure ROLLBACK wo
2480: 72 6b 73 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 61  rks..#.do_test a
2490: 76 74 72 61 6e 73 2d 36 2e 31 20 7b 0a 20 20 65  vtrans-6.1 {.  e
24a0: 78 65 63 73 71 6c 32 20 7b 0a 20 20 20 20 49 4e  xecsql2 {.    IN
24b0: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c  SERT INTO t1 VAL
24c0: 55 45 53 28 31 2c 32 2c 33 29 3b 0a 20 20 20 20  UES(1,2,3);.    
24d0: 42 45 47 49 4e 20 54 52 41 4e 53 41 43 54 49 4f  BEGIN TRANSACTIO
24e0: 4e 3b 0a 20 20 20 20 44 52 4f 50 20 54 41 42 4c  N;.    DROP TABL
24f0: 45 20 74 31 3b 0a 20 20 20 20 43 52 45 41 54 45  E t1;.    CREATE
2500: 20 54 41 42 4c 45 20 74 31 28 70 2c 71 2c 72 29   TABLE t1(p,q,r)
2510: 3b 0a 20 20 20 20 52 4f 4c 4c 42 41 43 4b 3b 0a  ;.    ROLLBACK;.
2520: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
2530: 4d 20 74 31 3b 0a 20 20 7d 0a 7d 20 7b 61 20 31  M t1;.  }.} {a 1
2540: 20 62 20 32 20 63 20 33 7d 0a 64 6f 5f 74 65 73   b 2 c 3}.do_tes
2550: 74 20 61 76 74 72 61 6e 73 2d 36 2e 32 20 7b 0a  t avtrans-6.2 {.
2560: 20 20 65 78 65 63 73 71 6c 32 20 7b 0a 20 20 20    execsql2 {.   
2570: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20   INSERT INTO t1 
2580: 56 41 4c 55 45 53 28 31 2c 32 2c 33 29 3b 0a 20  VALUES(1,2,3);. 
2590: 20 20 20 42 45 47 49 4e 20 54 52 41 4e 53 41 43     BEGIN TRANSAC
25a0: 54 49 4f 4e 3b 0a 20 20 20 20 44 52 4f 50 20 54  TION;.    DROP T
25b0: 41 42 4c 45 20 74 31 3b 0a 20 20 20 20 43 52 45  ABLE t1;.    CRE
25c0: 41 54 45 20 54 41 42 4c 45 20 74 31 28 70 2c 71  ATE TABLE t1(p,q
25d0: 2c 72 29 3b 0a 20 20 20 20 43 4f 4d 4d 49 54 3b  ,r);.    COMMIT;
25e0: 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52  .    SELECT * FR
25f0: 4f 4d 20 74 31 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a  OM t1;.  }.} {}.
2600: 64 6f 5f 74 65 73 74 20 61 76 74 72 61 6e 73 2d  do_test avtrans-
2610: 36 2e 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 32  6.3 {.  execsql2
2620: 20 7b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e   {.    INSERT IN
2630: 54 4f 20 74 31 20 56 41 4c 55 45 53 28 31 2c 32  TO t1 VALUES(1,2
2640: 2c 33 29 3b 0a 20 20 20 20 53 45 4c 45 43 54 20  ,3);.    SELECT 
2650: 2a 20 46 52 4f 4d 20 74 31 3b 0a 20 20 7d 0a 7d  * FROM t1;.  }.}
2660: 20 7b 70 20 31 20 71 20 32 20 72 20 33 7d 0a 64   {p 1 q 2 r 3}.d
2670: 6f 5f 74 65 73 74 20 61 76 74 72 61 6e 73 2d 36  o_test avtrans-6
2680: 2e 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 32 20  .4 {.  execsql2 
2690: 7b 0a 20 20 20 20 42 45 47 49 4e 20 54 52 41 4e  {.    BEGIN TRAN
26a0: 53 41 43 54 49 4f 4e 3b 0a 20 20 20 20 44 52 4f  SACTION;.    DRO
26b0: 50 20 54 41 42 4c 45 20 74 31 3b 0a 20 20 20 20  P TABLE t1;.    
26c0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28  CREATE TABLE t1(
26d0: 61 2c 62 2c 63 29 3b 0a 20 20 20 20 49 4e 53 45  a,b,c);.    INSE
26e0: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
26f0: 53 28 34 2c 35 2c 36 29 3b 0a 20 20 20 20 53 45  S(4,5,6);.    SE
2700: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 3b 0a  LECT * FROM t1;.
2710: 20 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20 74      DROP TABLE t
2720: 31 3b 0a 20 20 7d 0a 7d 20 7b 61 20 34 20 62 20  1;.  }.} {a 4 b 
2730: 35 20 63 20 36 7d 0a 64 6f 5f 74 65 73 74 20 61  5 c 6}.do_test a
2740: 76 74 72 61 6e 73 2d 36 2e 35 20 7b 0a 20 20 65  vtrans-6.5 {.  e
2750: 78 65 63 73 71 6c 32 20 7b 0a 20 20 20 20 52 4f  xecsql2 {.    RO
2760: 4c 4c 42 41 43 4b 3b 0a 20 20 20 20 53 45 4c 45  LLBACK;.    SELE
2770: 43 54 20 2a 20 46 52 4f 4d 20 74 31 3b 0a 20 20  CT * FROM t1;.  
2780: 7d 0a 7d 20 7b 70 20 31 20 71 20 32 20 72 20 33  }.} {p 1 q 2 r 3
2790: 7d 0a 64 6f 5f 74 65 73 74 20 61 76 74 72 61 6e  }.do_test avtran
27a0: 73 2d 36 2e 36 20 7b 0a 20 20 65 78 65 63 73 71  s-6.6 {.  execsq
27b0: 6c 32 20 7b 0a 20 20 20 20 42 45 47 49 4e 20 54  l2 {.    BEGIN T
27c0: 52 41 4e 53 41 43 54 49 4f 4e 3b 0a 20 20 20 20  RANSACTION;.    
27d0: 44 52 4f 50 20 54 41 42 4c 45 20 74 31 3b 0a 20  DROP TABLE t1;. 
27e0: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
27f0: 74 31 28 61 2c 62 2c 63 29 3b 0a 20 20 20 20 49  t1(a,b,c);.    I
2800: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41  NSERT INTO t1 VA
2810: 4c 55 45 53 28 34 2c 35 2c 36 29 3b 0a 20 20 20  LUES(4,5,6);.   
2820: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
2830: 31 3b 0a 20 20 20 20 44 52 4f 50 20 54 41 42 4c  1;.    DROP TABL
2840: 45 20 74 31 3b 0a 20 20 7d 0a 7d 20 7b 61 20 34  E t1;.  }.} {a 4
2850: 20 62 20 35 20 63 20 36 7d 0a 64 6f 5f 74 65 73   b 5 c 6}.do_tes
2860: 74 20 61 76 74 72 61 6e 73 2d 36 2e 37 20 7b 0a  t avtrans-6.7 {.
2870: 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20    catchsql {.   
2880: 20 43 4f 4d 4d 49 54 3b 0a 20 20 20 20 53 45 4c   COMMIT;.    SEL
2890: 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 3b 0a 20  ECT * FROM t1;. 
28a0: 20 7d 0a 7d 20 7b 31 20 7b 6e 6f 20 73 75 63 68   }.} {1 {no such
28b0: 20 74 61 62 6c 65 3a 20 74 31 7d 7d 0a 0a 23 20   table: t1}}..# 
28c0: 52 65 70 65 61 74 20 6f 6e 20 61 20 74 61 62 6c  Repeat on a tabl
28d0: 65 20 77 69 74 68 20 61 6e 20 61 75 74 6f 6d 61  e with an automa
28e0: 74 69 63 61 6c 6c 79 20 67 65 6e 65 72 61 74 65  tically generate
28f0: 64 20 69 6e 64 65 78 2e 0a 23 0a 64 6f 5f 74 65  d index..#.do_te
2900: 73 74 20 61 76 74 72 61 6e 73 2d 36 2e 31 30 20  st avtrans-6.10 
2910: 7b 0a 20 20 65 78 65 63 73 71 6c 32 20 7b 0a 20  {.  execsql2 {. 
2920: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
2930: 74 31 28 61 20 75 6e 69 71 75 65 2c 62 2c 63 29  t1(a unique,b,c)
2940: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
2950: 4f 20 74 31 20 56 41 4c 55 45 53 28 31 2c 32 2c  O t1 VALUES(1,2,
2960: 33 29 3b 0a 20 20 20 20 42 45 47 49 4e 20 54 52  3);.    BEGIN TR
2970: 41 4e 53 41 43 54 49 4f 4e 3b 0a 20 20 20 20 44  ANSACTION;.    D
2980: 52 4f 50 20 54 41 42 4c 45 20 74 31 3b 0a 20 20  ROP TABLE t1;.  
2990: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
29a0: 31 28 70 20 75 6e 69 71 75 65 2c 71 2c 72 29 3b  1(p unique,q,r);
29b0: 0a 20 20 20 20 52 4f 4c 4c 42 41 43 4b 3b 0a 20  .    ROLLBACK;. 
29c0: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
29d0: 20 74 31 3b 0a 20 20 7d 0a 7d 20 7b 61 20 31 20   t1;.  }.} {a 1 
29e0: 62 20 32 20 63 20 33 7d 0a 64 6f 5f 74 65 73 74  b 2 c 3}.do_test
29f0: 20 61 76 74 72 61 6e 73 2d 36 2e 31 31 20 7b 0a   avtrans-6.11 {.
2a00: 20 20 65 78 65 63 73 71 6c 32 20 7b 0a 20 20 20    execsql2 {.   
2a10: 20 42 45 47 49 4e 20 54 52 41 4e 53 41 43 54 49   BEGIN TRANSACTI
2a20: 4f 4e 3b 0a 20 20 20 20 44 52 4f 50 20 54 41 42  ON;.    DROP TAB
2a30: 4c 45 20 74 31 3b 0a 20 20 20 20 43 52 45 41 54  LE t1;.    CREAT
2a40: 45 20 54 41 42 4c 45 20 74 31 28 70 20 75 6e 69  E TABLE t1(p uni
2a50: 71 75 65 2c 71 2c 72 29 3b 0a 20 20 20 20 43 4f  que,q,r);.    CO
2a60: 4d 4d 49 54 3b 0a 20 20 20 20 53 45 4c 45 43 54  MMIT;.    SELECT
2a70: 20 2a 20 46 52 4f 4d 20 74 31 3b 0a 20 20 7d 0a   * FROM t1;.  }.
2a80: 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 61 76 74  } {}.do_test avt
2a90: 72 61 6e 73 2d 36 2e 31 32 20 7b 0a 20 20 65 78  rans-6.12 {.  ex
2aa0: 65 63 73 71 6c 32 20 7b 0a 20 20 20 20 49 4e 53  ecsql2 {.    INS
2ab0: 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55  ERT INTO t1 VALU
2ac0: 45 53 28 31 2c 32 2c 33 29 3b 0a 20 20 20 20 53  ES(1,2,3);.    S
2ad0: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 3b  ELECT * FROM t1;
2ae0: 0a 20 20 7d 0a 7d 20 7b 70 20 31 20 71 20 32 20  .  }.} {p 1 q 2 
2af0: 72 20 33 7d 0a 64 6f 5f 74 65 73 74 20 61 76 74  r 3}.do_test avt
2b00: 72 61 6e 73 2d 36 2e 31 33 20 7b 0a 20 20 65 78  rans-6.13 {.  ex
2b10: 65 63 73 71 6c 32 20 7b 0a 20 20 20 20 42 45 47  ecsql2 {.    BEG
2b20: 49 4e 20 54 52 41 4e 53 41 43 54 49 4f 4e 3b 0a  IN TRANSACTION;.
2b30: 20 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20 74      DROP TABLE t
2b40: 31 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41  1;.    CREATE TA
2b50: 42 4c 45 20 74 31 28 61 20 75 6e 69 71 75 65 2c  BLE t1(a unique,
2b60: 62 2c 63 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  b,c);.    INSERT
2b70: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
2b80: 34 2c 35 2c 36 29 3b 0a 20 20 20 20 53 45 4c 45  4,5,6);.    SELE
2b90: 43 54 20 2a 20 46 52 4f 4d 20 74 31 3b 0a 20 20  CT * FROM t1;.  
2ba0: 20 20 44 52 4f 50 20 54 41 42 4c 45 20 74 31 3b    DROP TABLE t1;
2bb0: 0a 20 20 7d 0a 7d 20 7b 61 20 34 20 62 20 35 20  .  }.} {a 4 b 5 
2bc0: 63 20 36 7d 0a 64 6f 5f 74 65 73 74 20 61 76 74  c 6}.do_test avt
2bd0: 72 61 6e 73 2d 36 2e 31 34 20 7b 0a 20 20 65 78  rans-6.14 {.  ex
2be0: 65 63 73 71 6c 32 20 7b 0a 20 20 20 20 52 4f 4c  ecsql2 {.    ROL
2bf0: 4c 42 41 43 4b 3b 0a 20 20 20 20 53 45 4c 45 43  LBACK;.    SELEC
2c00: 54 20 2a 20 46 52 4f 4d 20 74 31 3b 0a 20 20 7d  T * FROM t1;.  }
2c10: 0a 7d 20 7b 70 20 31 20 71 20 32 20 72 20 33 7d  .} {p 1 q 2 r 3}
2c20: 0a 64 6f 5f 74 65 73 74 20 61 76 74 72 61 6e 73  .do_test avtrans
2c30: 2d 36 2e 31 35 20 7b 0a 20 20 65 78 65 63 73 71  -6.15 {.  execsq
2c40: 6c 32 20 7b 0a 20 20 20 20 42 45 47 49 4e 20 54  l2 {.    BEGIN T
2c50: 52 41 4e 53 41 43 54 49 4f 4e 3b 0a 20 20 20 20  RANSACTION;.    
2c60: 44 52 4f 50 20 54 41 42 4c 45 20 74 31 3b 0a 20  DROP TABLE t1;. 
2c70: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
2c80: 74 31 28 61 20 75 6e 69 71 75 65 2c 62 2c 63 29  t1(a unique,b,c)
2c90: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
2ca0: 4f 20 74 31 20 56 41 4c 55 45 53 28 34 2c 35 2c  O t1 VALUES(4,5,
2cb0: 36 29 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a  6);.    SELECT *
2cc0: 20 46 52 4f 4d 20 74 31 3b 0a 20 20 20 20 44 52   FROM t1;.    DR
2cd0: 4f 50 20 54 41 42 4c 45 20 74 31 3b 0a 20 20 7d  OP TABLE t1;.  }
2ce0: 0a 7d 20 7b 61 20 34 20 62 20 35 20 63 20 36 7d  .} {a 4 b 5 c 6}
2cf0: 0a 64 6f 5f 74 65 73 74 20 61 76 74 72 61 6e 73  .do_test avtrans
2d00: 2d 36 2e 31 36 20 7b 0a 20 20 63 61 74 63 68 73  -6.16 {.  catchs
2d10: 71 6c 20 7b 0a 20 20 20 20 43 4f 4d 4d 49 54 3b  ql {.    COMMIT;
2d20: 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52  .    SELECT * FR
2d30: 4f 4d 20 74 31 3b 0a 20 20 7d 0a 7d 20 7b 31 20  OM t1;.  }.} {1 
2d40: 7b 6e 6f 20 73 75 63 68 20 74 61 62 6c 65 3a 20  {no such table: 
2d50: 74 31 7d 7d 0a 0a 64 6f 5f 74 65 73 74 20 61 76  t1}}..do_test av
2d60: 74 72 61 6e 73 2d 36 2e 32 30 20 7b 0a 20 20 65  trans-6.20 {.  e
2d70: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45  xecsql {.    CRE
2d80: 41 54 45 20 54 41 42 4c 45 20 74 31 28 61 20 69  ATE TABLE t1(a i
2d90: 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b  nteger primary k
2da0: 65 79 2c 62 2c 63 29 3b 0a 20 20 20 20 49 4e 53  ey,b,c);.    INS
2db0: 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55  ERT INTO t1 VALU
2dc0: 45 53 28 31 2c 2d 32 2c 2d 33 29 3b 0a 20 20 20  ES(1,-2,-3);.   
2dd0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20   INSERT INTO t1 
2de0: 56 41 4c 55 45 53 28 34 2c 2d 35 2c 2d 36 29 3b  VALUES(4,-5,-6);
2df0: 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52  .    SELECT * FR
2e00: 4f 4d 20 74 31 3b 0a 20 20 7d 0a 7d 20 7b 31 20  OM t1;.  }.} {1 
2e10: 2d 32 20 2d 33 20 34 20 2d 35 20 2d 36 7d 0a 64  -2 -3 4 -5 -6}.d
2e20: 6f 5f 74 65 73 74 20 61 76 74 72 61 6e 73 2d 36  o_test avtrans-6
2e30: 2e 32 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  .21 {.  execsql 
2e40: 7b 0a 20 20 20 20 43 52 45 41 54 45 20 49 4e 44  {.    CREATE IND
2e50: 45 58 20 69 31 20 4f 4e 20 74 31 28 62 29 3b 0a  EX i1 ON t1(b);.
2e60: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
2e70: 4d 20 74 31 20 57 48 45 52 45 20 62 3c 31 3b 0a  M t1 WHERE b<1;.
2e80: 20 20 7d 0a 7d 20 7b 34 20 2d 35 20 2d 36 20 31    }.} {4 -5 -6 1
2e90: 20 2d 32 20 2d 33 7d 0a 64 6f 5f 74 65 73 74 20   -2 -3}.do_test 
2ea0: 61 76 74 72 61 6e 73 2d 36 2e 32 32 20 7b 0a 20  avtrans-6.22 {. 
2eb0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 42   execsql {.    B
2ec0: 45 47 49 4e 20 54 52 41 4e 53 41 43 54 49 4f 4e  EGIN TRANSACTION
2ed0: 3b 0a 20 20 20 20 44 52 4f 50 20 49 4e 44 45 58  ;.    DROP INDEX
2ee0: 20 69 31 3b 0a 20 20 20 20 53 45 4c 45 43 54 20   i1;.    SELECT 
2ef0: 2a 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  * FROM t1 WHERE 
2f00: 62 3c 31 3b 0a 20 20 20 20 52 4f 4c 4c 42 41 43  b<1;.    ROLLBAC
2f10: 4b 3b 0a 20 20 7d 0a 7d 20 7b 31 20 2d 32 20 2d  K;.  }.} {1 -2 -
2f20: 33 20 34 20 2d 35 20 2d 36 7d 0a 64 6f 5f 74 65  3 4 -5 -6}.do_te
2f30: 73 74 20 61 76 74 72 61 6e 73 2d 36 2e 32 33 20  st avtrans-6.23 
2f40: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
2f50: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
2f60: 74 31 20 57 48 45 52 45 20 62 3c 31 3b 0a 20 20  t1 WHERE b<1;.  
2f70: 7d 0a 7d 20 7b 34 20 2d 35 20 2d 36 20 31 20 2d  }.} {4 -5 -6 1 -
2f80: 32 20 2d 33 7d 0a 64 6f 5f 74 65 73 74 20 61 76  2 -3}.do_test av
2f90: 74 72 61 6e 73 2d 36 2e 32 34 20 7b 0a 20 20 65  trans-6.24 {.  e
2fa0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 42 45 47  xecsql {.    BEG
2fb0: 49 4e 20 54 52 41 4e 53 41 43 54 49 4f 4e 3b 0a  IN TRANSACTION;.
2fc0: 20 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20 74      DROP TABLE t
2fd0: 31 3b 0a 20 20 20 20 52 4f 4c 4c 42 41 43 4b 3b  1;.    ROLLBACK;
2fe0: 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52  .    SELECT * FR
2ff0: 4f 4d 20 74 31 20 57 48 45 52 45 20 62 3c 31 3b  OM t1 WHERE b<1;
3000: 0a 20 20 7d 0a 7d 20 7b 34 20 2d 35 20 2d 36 20  .  }.} {4 -5 -6 
3010: 31 20 2d 32 20 2d 33 7d 0a 0a 64 6f 5f 74 65 73  1 -2 -3}..do_tes
3020: 74 20 61 76 74 72 61 6e 73 2d 36 2e 32 35 20 7b  t avtrans-6.25 {
3030: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
3040: 20 42 45 47 49 4e 20 54 52 41 4e 53 41 43 54 49   BEGIN TRANSACTI
3050: 4f 4e 3b 0a 20 20 20 20 44 52 4f 50 20 49 4e 44  ON;.    DROP IND
3060: 45 58 20 69 31 3b 0a 20 20 20 20 43 52 45 41 54  EX i1;.    CREAT
3070: 45 20 49 4e 44 45 58 20 69 31 20 4f 4e 20 74 31  E INDEX i1 ON t1
3080: 28 63 29 3b 0a 20 20 20 20 53 45 4c 45 43 54 20  (c);.    SELECT 
3090: 2a 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  * FROM t1 WHERE 
30a0: 62 3c 31 3b 0a 20 20 7d 0a 7d 20 7b 31 20 2d 32  b<1;.  }.} {1 -2
30b0: 20 2d 33 20 34 20 2d 35 20 2d 36 7d 0a 64 6f 5f   -3 4 -5 -6}.do_
30c0: 74 65 73 74 20 61 76 74 72 61 6e 73 2d 36 2e 32  test avtrans-6.2
30d0: 36 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  6 {.  execsql {.
30e0: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
30f0: 4d 20 74 31 20 57 48 45 52 45 20 63 3c 31 3b 0a  M t1 WHERE c<1;.
3100: 20 20 7d 0a 7d 20 7b 34 20 2d 35 20 2d 36 20 31    }.} {4 -5 -6 1
3110: 20 2d 32 20 2d 33 7d 0a 64 6f 5f 74 65 73 74 20   -2 -3}.do_test 
3120: 61 76 74 72 61 6e 73 2d 36 2e 32 37 20 7b 0a 20  avtrans-6.27 {. 
3130: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 52   execsql {.    R
3140: 4f 4c 4c 42 41 43 4b 3b 0a 20 20 20 20 53 45 4c  OLLBACK;.    SEL
3150: 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 57 48  ECT * FROM t1 WH
3160: 45 52 45 20 62 3c 31 3b 0a 20 20 7d 0a 7d 20 7b  ERE b<1;.  }.} {
3170: 34 20 2d 35 20 2d 36 20 31 20 2d 32 20 2d 33 7d  4 -5 -6 1 -2 -3}
3180: 0a 64 6f 5f 74 65 73 74 20 61 76 74 72 61 6e 73  .do_test avtrans
3190: 2d 36 2e 32 38 20 7b 0a 20 20 65 78 65 63 73 71  -6.28 {.  execsq
31a0: 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a  l {.    SELECT *
31b0: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 63   FROM t1 WHERE c
31c0: 3c 31 3b 0a 20 20 7d 0a 7d 20 7b 31 20 2d 32 20  <1;.  }.} {1 -2 
31d0: 2d 33 20 34 20 2d 35 20 2d 36 7d 0a 0a 23 20 54  -3 4 -5 -6}..# T
31e0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 72 65 70  he following rep
31f0: 65 61 74 73 20 73 74 65 70 73 20 36 2e 32 30 20  eats steps 6.20 
3200: 74 68 72 6f 75 67 68 20 36 2e 32 38 2c 20 62 75  through 6.28, bu
3210: 74 20 70 75 74 73 20 61 20 22 75 6e 69 71 75 65  t puts a "unique
3220: 22 0a 23 20 63 6f 6e 73 74 72 61 69 6e 74 20 74  ".# constraint t
3230: 68 65 20 66 69 72 73 74 20 66 69 65 6c 64 20 6f  he first field o
3240: 66 20 74 68 65 20 74 61 62 6c 65 20 69 6e 20 6f  f the table in o
3250: 72 64 65 72 20 74 6f 20 67 65 6e 65 72 61 74 65  rder to generate
3260: 20 61 6e 0a 23 20 61 75 74 6f 6d 61 74 69 63 20   an.# automatic 
3270: 69 6e 64 65 78 2e 0a 23 0a 64 6f 5f 74 65 73 74  index..#.do_test
3280: 20 61 76 74 72 61 6e 73 2d 36 2e 33 30 20 7b 0a   avtrans-6.30 {.
3290: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
32a0: 42 45 47 49 4e 20 54 52 41 4e 53 41 43 54 49 4f  BEGIN TRANSACTIO
32b0: 4e 3b 0a 20 20 20 20 44 52 4f 50 20 54 41 42 4c  N;.    DROP TABL
32c0: 45 20 74 31 3b 0a 20 20 20 20 43 52 45 41 54 45  E t1;.    CREATE
32d0: 20 54 41 42 4c 45 20 74 31 28 61 20 69 6e 74 20   TABLE t1(a int 
32e0: 75 6e 69 71 75 65 2c 62 2c 63 29 3b 0a 20 20 20  unique,b,c);.   
32f0: 20 43 4f 4d 4d 49 54 3b 0a 20 20 20 20 49 4e 53   COMMIT;.    INS
3300: 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55  ERT INTO t1 VALU
3310: 45 53 28 31 2c 2d 32 2c 2d 33 29 3b 0a 20 20 20  ES(1,-2,-3);.   
3320: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20   INSERT INTO t1 
3330: 56 41 4c 55 45 53 28 34 2c 2d 35 2c 2d 36 29 3b  VALUES(4,-5,-6);
3340: 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52  .    SELECT * FR
3350: 4f 4d 20 74 31 20 4f 52 44 45 52 20 42 59 20 61  OM t1 ORDER BY a
3360: 3b 0a 20 20 7d 0a 7d 20 7b 31 20 2d 32 20 2d 33  ;.  }.} {1 -2 -3
3370: 20 34 20 2d 35 20 2d 36 7d 0a 64 6f 5f 74 65 73   4 -5 -6}.do_tes
3380: 74 20 61 76 74 72 61 6e 73 2d 36 2e 33 31 20 7b  t avtrans-6.31 {
3390: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
33a0: 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 69 31   CREATE INDEX i1
33b0: 20 4f 4e 20 74 31 28 62 29 3b 0a 20 20 20 20 53   ON t1(b);.    S
33c0: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20  ELECT * FROM t1 
33d0: 57 48 45 52 45 20 62 3c 31 3b 0a 20 20 7d 0a 7d  WHERE b<1;.  }.}
33e0: 20 7b 34 20 2d 35 20 2d 36 20 31 20 2d 32 20 2d   {4 -5 -6 1 -2 -
33f0: 33 7d 0a 64 6f 5f 74 65 73 74 20 61 76 74 72 61  3}.do_test avtra
3400: 6e 73 2d 36 2e 33 32 20 7b 0a 20 20 65 78 65 63  ns-6.32 {.  exec
3410: 73 71 6c 20 7b 0a 20 20 20 20 42 45 47 49 4e 20  sql {.    BEGIN 
3420: 54 52 41 4e 53 41 43 54 49 4f 4e 3b 0a 20 20 20  TRANSACTION;.   
3430: 20 44 52 4f 50 20 49 4e 44 45 58 20 69 31 3b 0a   DROP INDEX i1;.
3440: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
3450: 4d 20 74 31 20 57 48 45 52 45 20 62 3c 31 3b 0a  M t1 WHERE b<1;.
3460: 20 20 20 20 52 4f 4c 4c 42 41 43 4b 3b 0a 20 20      ROLLBACK;.  
3470: 7d 0a 7d 20 7b 31 20 2d 32 20 2d 33 20 34 20 2d  }.} {1 -2 -3 4 -
3480: 35 20 2d 36 7d 0a 64 6f 5f 74 65 73 74 20 61 76  5 -6}.do_test av
3490: 74 72 61 6e 73 2d 36 2e 33 33 20 7b 0a 20 20 65  trans-6.33 {.  e
34a0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c  xecsql {.    SEL
34b0: 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 57 48  ECT * FROM t1 WH
34c0: 45 52 45 20 62 3c 31 3b 0a 20 20 7d 0a 7d 20 7b  ERE b<1;.  }.} {
34d0: 34 20 2d 35 20 2d 36 20 31 20 2d 32 20 2d 33 7d  4 -5 -6 1 -2 -3}
34e0: 0a 64 6f 5f 74 65 73 74 20 61 76 74 72 61 6e 73  .do_test avtrans
34f0: 2d 36 2e 33 34 20 7b 0a 20 20 65 78 65 63 73 71  -6.34 {.  execsq
3500: 6c 20 7b 0a 20 20 20 20 42 45 47 49 4e 20 54 52  l {.    BEGIN TR
3510: 41 4e 53 41 43 54 49 4f 4e 3b 0a 20 20 20 20 44  ANSACTION;.    D
3520: 52 4f 50 20 54 41 42 4c 45 20 74 31 3b 0a 20 20  ROP TABLE t1;.  
3530: 20 20 52 4f 4c 4c 42 41 43 4b 3b 0a 20 20 20 20    ROLLBACK;.    
3540: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31  SELECT * FROM t1
3550: 20 57 48 45 52 45 20 62 3c 31 3b 0a 20 20 7d 0a   WHERE b<1;.  }.
3560: 7d 20 7b 34 20 2d 35 20 2d 36 20 31 20 2d 32 20  } {4 -5 -6 1 -2 
3570: 2d 33 7d 0a 0a 64 6f 5f 74 65 73 74 20 61 76 74  -3}..do_test avt
3580: 72 61 6e 73 2d 36 2e 33 35 20 7b 0a 20 20 65 78  rans-6.35 {.  ex
3590: 65 63 73 71 6c 20 7b 0a 20 20 20 20 42 45 47 49  ecsql {.    BEGI
35a0: 4e 20 54 52 41 4e 53 41 43 54 49 4f 4e 3b 0a 20  N TRANSACTION;. 
35b0: 20 20 20 44 52 4f 50 20 49 4e 44 45 58 20 69 31     DROP INDEX i1
35c0: 3b 0a 20 20 20 20 43 52 45 41 54 45 20 49 4e 44  ;.    CREATE IND
35d0: 45 58 20 69 31 20 4f 4e 20 74 31 28 63 29 3b 0a  EX i1 ON t1(c);.
35e0: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
35f0: 4d 20 74 31 20 57 48 45 52 45 20 62 3c 31 3b 0a  M t1 WHERE b<1;.
3600: 20 20 7d 0a 7d 20 7b 31 20 2d 32 20 2d 33 20 34    }.} {1 -2 -3 4
3610: 20 2d 35 20 2d 36 7d 0a 64 6f 5f 74 65 73 74 20   -5 -6}.do_test 
3620: 61 76 74 72 61 6e 73 2d 36 2e 33 36 20 7b 0a 20  avtrans-6.36 {. 
3630: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53   execsql {.    S
3640: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20  ELECT * FROM t1 
3650: 57 48 45 52 45 20 63 3c 31 3b 0a 20 20 7d 0a 7d  WHERE c<1;.  }.}
3660: 20 7b 34 20 2d 35 20 2d 36 20 31 20 2d 32 20 2d   {4 -5 -6 1 -2 -
3670: 33 7d 0a 64 6f 5f 74 65 73 74 20 61 76 74 72 61  3}.do_test avtra
3680: 6e 73 2d 36 2e 33 37 20 7b 0a 20 20 65 78 65 63  ns-6.37 {.  exec
3690: 73 71 6c 20 7b 0a 20 20 20 20 44 52 4f 50 20 49  sql {.    DROP I
36a0: 4e 44 45 58 20 69 31 3b 0a 20 20 20 20 53 45 4c  NDEX i1;.    SEL
36b0: 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 57 48  ECT * FROM t1 WH
36c0: 45 52 45 20 63 3c 31 3b 0a 20 20 7d 0a 7d 20 7b  ERE c<1;.  }.} {
36d0: 31 20 2d 32 20 2d 33 20 34 20 2d 35 20 2d 36 7d  1 -2 -3 4 -5 -6}
36e0: 0a 64 6f 5f 74 65 73 74 20 61 76 74 72 61 6e 73  .do_test avtrans
36f0: 2d 36 2e 33 38 20 7b 0a 20 20 65 78 65 63 73 71  -6.38 {.  execsq
3700: 6c 20 7b 0a 20 20 20 20 52 4f 4c 4c 42 41 43 4b  l {.    ROLLBACK
3710: 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  ;.    SELECT * F
3720: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 62 3c 31  ROM t1 WHERE b<1
3730: 3b 0a 20 20 7d 0a 7d 20 7b 34 20 2d 35 20 2d 36  ;.  }.} {4 -5 -6
3740: 20 31 20 2d 32 20 2d 33 7d 0a 64 6f 5f 74 65 73   1 -2 -3}.do_tes
3750: 74 20 61 76 74 72 61 6e 73 2d 36 2e 33 39 20 7b  t avtrans-6.39 {
3760: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
3770: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
3780: 31 20 57 48 45 52 45 20 63 3c 31 3b 0a 20 20 7d  1 WHERE c<1;.  }
3790: 0a 7d 20 7b 31 20 2d 32 20 2d 33 20 34 20 2d 35  .} {1 -2 -3 4 -5
37a0: 20 2d 36 7d 0a 69 6e 74 65 67 72 69 74 79 5f 63   -6}.integrity_c
37b0: 68 65 63 6b 20 61 76 74 72 61 6e 73 2d 36 2e 34  heck avtrans-6.4
37c0: 30 0a 0a 69 66 63 61 70 61 62 6c 65 20 21 66 6c  0..ifcapable !fl
37d0: 6f 61 74 69 6e 67 70 6f 69 6e 74 20 7b 0a 20 20  oatingpoint {.  
37e0: 66 69 6e 69 73 68 5f 74 65 73 74 0a 20 20 72 65  finish_test.  re
37f0: 74 75 72 6e 0a 7d 0a 0a 23 20 54 65 73 74 20 74  turn.}..# Test t
3800: 6f 20 6d 61 6b 65 20 73 75 72 65 20 72 6f 6c 6c  o make sure roll
3810: 62 61 63 6b 20 72 65 73 74 6f 72 65 73 20 74 68  back restores th
3820: 65 20 64 61 74 61 62 61 73 65 20 62 61 63 6b 20  e database back 
3830: 74 6f 20 69 74 73 20 6f 72 69 67 69 6e 61 6c 0a  to its original.
3840: 23 20 73 74 61 74 65 2e 0a 23 0a 64 6f 5f 74 65  # state..#.do_te
3850: 73 74 20 61 76 74 72 61 6e 73 2d 37 2e 31 20 7b  st avtrans-7.1 {
3860: 0a 20 20 65 78 65 63 73 71 6c 20 7b 42 45 47 49  .  execsql {BEGI
3870: 4e 7d 0a 20 20 66 6f 72 20 7b 73 65 74 20 69 20  N}.  for {set i 
3880: 30 7d 20 7b 24 69 3c 31 30 30 30 7d 20 7b 69 6e  0} {$i<1000} {in
3890: 63 72 20 69 7d 20 7b 0a 20 20 20 20 73 65 74 20  cr i} {.    set 
38a0: 72 31 20 5b 65 78 70 72 20 7b 72 61 6e 64 28 29  r1 [expr {rand()
38b0: 7d 5d 0a 20 20 20 20 73 65 74 20 72 32 20 5b 65  }].    set r2 [e
38c0: 78 70 72 20 7b 72 61 6e 64 28 29 7d 5d 0a 20 20  xpr {rand()}].  
38d0: 20 20 73 65 74 20 72 33 20 5b 65 78 70 72 20 7b    set r3 [expr {
38e0: 72 61 6e 64 28 29 7d 5d 0a 20 20 20 20 65 78 65  rand()}].    exe
38f0: 63 73 71 6c 20 22 49 4e 53 45 52 54 20 49 4e 54  csql "INSERT INT
3900: 4f 20 74 32 20 56 41 4c 55 45 53 28 24 72 31 2c  O t2 VALUES($r1,
3910: 24 72 32 2c 24 72 33 29 22 0a 20 20 7d 0a 20 20  $r2,$r3)".  }.  
3920: 65 78 65 63 73 71 6c 20 7b 43 4f 4d 4d 49 54 7d  execsql {COMMIT}
3930: 0a 20 20 73 65 74 20 3a 3a 63 68 65 63 6b 73 75  .  set ::checksu
3940: 6d 20 5b 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  m [execsql {SELE
3950: 43 54 20 6d 64 35 73 75 6d 28 78 2c 79 2c 7a 29  CT md5sum(x,y,z)
3960: 20 46 52 4f 4d 20 74 32 7d 5d 0a 20 20 73 65 74   FROM t2}].  set
3970: 20 3a 3a 63 68 65 63 6b 73 75 6d 32 20 5b 0a 20   ::checksum2 [. 
3980: 20 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45     execsql {SELE
3990: 43 54 20 6d 64 35 73 75 6d 28 74 79 70 65 2c 6e  CT md5sum(type,n
39a0: 61 6d 65 2c 74 62 6c 5f 6e 61 6d 65 2c 72 6f 6f  ame,tbl_name,roo
39b0: 74 70 61 67 65 2c 73 71 6c 29 20 46 52 4f 4d 20  tpage,sql) FROM 
39c0: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 0a 20  sqlite_master}. 
39d0: 20 5d 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45   ].  execsql {SE
39e0: 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52  LECT count(*) FR
39f0: 4f 4d 20 74 32 7d 0a 7d 20 7b 31 30 30 31 7d 0a  OM t2}.} {1001}.
3a00: 64 6f 5f 74 65 73 74 20 61 76 74 72 61 6e 73 2d  do_test avtrans-
3a10: 37 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  7.2 {.  execsql 
3a20: 7b 53 45 4c 45 43 54 20 6d 64 35 73 75 6d 28 78  {SELECT md5sum(x
3a30: 2c 79 2c 7a 29 20 46 52 4f 4d 20 74 32 7d 0a 7d  ,y,z) FROM t2}.}
3a40: 20 24 63 68 65 63 6b 73 75 6d 0a 64 6f 5f 74 65   $checksum.do_te
3a50: 73 74 20 61 76 74 72 61 6e 73 2d 37 2e 32 2e 31  st avtrans-7.2.1
3a60: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45   {.  execsql {SE
3a70: 4c 45 43 54 20 6d 64 35 73 75 6d 28 74 79 70 65  LECT md5sum(type
3a80: 2c 6e 61 6d 65 2c 74 62 6c 5f 6e 61 6d 65 2c 72  ,name,tbl_name,r
3a90: 6f 6f 74 70 61 67 65 2c 73 71 6c 29 20 46 52 4f  ootpage,sql) FRO
3aa0: 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d  M sqlite_master}
3ab0: 0a 7d 20 24 63 68 65 63 6b 73 75 6d 32 0a 64 6f  .} $checksum2.do
3ac0: 5f 74 65 73 74 20 61 76 74 72 61 6e 73 2d 37 2e  _test avtrans-7.
3ad0: 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  3 {.  execsql {.
3ae0: 20 20 20 20 42 45 47 49 4e 3b 0a 20 20 20 20 44      BEGIN;.    D
3af0: 45 4c 45 54 45 20 46 52 4f 4d 20 74 32 3b 0a 20  ELETE FROM t2;. 
3b00: 20 20 20 52 4f 4c 4c 42 41 43 4b 3b 0a 20 20 20     ROLLBACK;.   
3b10: 20 53 45 4c 45 43 54 20 6d 64 35 73 75 6d 28 78   SELECT md5sum(x
3b20: 2c 79 2c 7a 29 20 46 52 4f 4d 20 74 32 3b 0a 20  ,y,z) FROM t2;. 
3b30: 20 7d 0a 7d 20 24 63 68 65 63 6b 73 75 6d 0a 64   }.} $checksum.d
3b40: 6f 5f 74 65 73 74 20 61 76 74 72 61 6e 73 2d 37  o_test avtrans-7
3b50: 2e 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .4 {.  execsql {
3b60: 0a 20 20 20 20 42 45 47 49 4e 3b 0a 20 20 20 20  .    BEGIN;.    
3b70: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20 53  INSERT INTO t2 S
3b80: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 3b  ELECT * FROM t2;
3b90: 0a 20 20 20 20 52 4f 4c 4c 42 41 43 4b 3b 0a 20  .    ROLLBACK;. 
3ba0: 20 20 20 53 45 4c 45 43 54 20 6d 64 35 73 75 6d     SELECT md5sum
3bb0: 28 78 2c 79 2c 7a 29 20 46 52 4f 4d 20 74 32 3b  (x,y,z) FROM t2;
3bc0: 0a 20 20 7d 0a 7d 20 24 63 68 65 63 6b 73 75 6d  .  }.} $checksum
3bd0: 0a 64 6f 5f 74 65 73 74 20 61 76 74 72 61 6e 73  .do_test avtrans
3be0: 2d 37 2e 35 20 7b 0a 20 20 65 78 65 63 73 71 6c  -7.5 {.  execsql
3bf0: 20 7b 0a 20 20 20 20 42 45 47 49 4e 3b 0a 20 20   {.    BEGIN;.  
3c00: 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 32    DELETE FROM t2
3c10: 3b 0a 20 20 20 20 52 4f 4c 4c 42 41 43 4b 3b 0a  ;.    ROLLBACK;.
3c20: 20 20 20 20 53 45 4c 45 43 54 20 6d 64 35 73 75      SELECT md5su
3c30: 6d 28 78 2c 79 2c 7a 29 20 46 52 4f 4d 20 74 32  m(x,y,z) FROM t2
3c40: 3b 0a 20 20 7d 0a 7d 20 24 63 68 65 63 6b 73 75  ;.  }.} $checksu
3c50: 6d 0a 64 6f 5f 74 65 73 74 20 61 76 74 72 61 6e  m.do_test avtran
3c60: 73 2d 37 2e 36 20 7b 0a 20 20 65 78 65 63 73 71  s-7.6 {.  execsq
3c70: 6c 20 7b 0a 20 20 20 20 42 45 47 49 4e 3b 0a 20  l {.    BEGIN;. 
3c80: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
3c90: 32 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20  2 SELECT * FROM 
3ca0: 74 32 3b 0a 20 20 20 20 52 4f 4c 4c 42 41 43 4b  t2;.    ROLLBACK
3cb0: 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 6d 64 35  ;.    SELECT md5
3cc0: 73 75 6d 28 78 2c 79 2c 7a 29 20 46 52 4f 4d 20  sum(x,y,z) FROM 
3cd0: 74 32 3b 0a 20 20 7d 0a 7d 20 24 63 68 65 63 6b  t2;.  }.} $check
3ce0: 73 75 6d 0a 64 6f 5f 74 65 73 74 20 61 76 74 72  sum.do_test avtr
3cf0: 61 6e 73 2d 37 2e 37 20 7b 0a 20 20 65 78 65 63  ans-7.7 {.  exec
3d00: 73 71 6c 20 7b 0a 20 20 20 20 42 45 47 49 4e 3b  sql {.    BEGIN;
3d10: 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  .    CREATE TABL
3d20: 45 20 74 33 20 41 53 20 53 45 4c 45 43 54 20 2a  E t3 AS SELECT *
3d30: 20 46 52 4f 4d 20 74 32 3b 0a 20 20 20 20 49 4e   FROM t2;.    IN
3d40: 53 45 52 54 20 49 4e 54 4f 20 74 32 20 53 45 4c  SERT INTO t2 SEL
3d50: 45 43 54 20 2a 20 46 52 4f 4d 20 74 33 3b 0a 20  ECT * FROM t3;. 
3d60: 20 20 20 52 4f 4c 4c 42 41 43 4b 3b 0a 20 20 20     ROLLBACK;.   
3d70: 20 53 45 4c 45 43 54 20 6d 64 35 73 75 6d 28 78   SELECT md5sum(x
3d80: 2c 79 2c 7a 29 20 46 52 4f 4d 20 74 32 3b 0a 20  ,y,z) FROM t2;. 
3d90: 20 7d 0a 7d 20 24 63 68 65 63 6b 73 75 6d 0a 64   }.} $checksum.d
3da0: 6f 5f 74 65 73 74 20 61 76 74 72 61 6e 73 2d 37  o_test avtrans-7
3db0: 2e 38 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .8 {.  execsql {
3dc0: 53 45 4c 45 43 54 20 6d 64 35 73 75 6d 28 74 79  SELECT md5sum(ty
3dd0: 70 65 2c 6e 61 6d 65 2c 74 62 6c 5f 6e 61 6d 65  pe,name,tbl_name
3de0: 2c 72 6f 6f 74 70 61 67 65 2c 73 71 6c 29 20 46  ,rootpage,sql) F
3df0: 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
3e00: 72 7d 0a 7d 20 24 63 68 65 63 6b 73 75 6d 32 0a  r}.} $checksum2.
3e10: 69 66 63 61 70 61 62 6c 65 20 74 65 6d 70 64 62  ifcapable tempdb
3e20: 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 61 76 74   {.  do_test avt
3e30: 72 61 6e 73 2d 37 2e 39 20 7b 0a 20 20 20 20 65  rans-7.9 {.    e
3e40: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 42  xecsql {.      B
3e50: 45 47 49 4e 3b 0a 20 20 20 20 20 20 43 52 45 41  EGIN;.      CREA
3e60: 54 45 20 54 45 4d 50 20 54 41 42 4c 45 20 74 33  TE TEMP TABLE t3
3e70: 20 41 53 20 53 45 4c 45 43 54 20 2a 20 46 52 4f   AS SELECT * FRO
3e80: 4d 20 74 32 3b 0a 20 20 20 20 20 20 49 4e 53 45  M t2;.      INSE
3e90: 52 54 20 49 4e 54 4f 20 74 32 20 53 45 4c 45 43  RT INTO t2 SELEC
3ea0: 54 20 2a 20 46 52 4f 4d 20 74 33 3b 0a 20 20 20  T * FROM t3;.   
3eb0: 20 20 20 52 4f 4c 4c 42 41 43 4b 3b 0a 20 20 20     ROLLBACK;.   
3ec0: 20 20 20 53 45 4c 45 43 54 20 6d 64 35 73 75 6d     SELECT md5sum
3ed0: 28 78 2c 79 2c 7a 29 20 46 52 4f 4d 20 74 32 3b  (x,y,z) FROM t2;
3ee0: 0a 20 20 20 20 7d 0a 20 20 7d 20 24 63 68 65 63  .    }.  } $chec
3ef0: 6b 73 75 6d 0a 7d 0a 64 6f 5f 74 65 73 74 20 61  ksum.}.do_test a
3f00: 76 74 72 61 6e 73 2d 37 2e 31 30 20 7b 0a 20 20  vtrans-7.10 {.  
3f10: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
3f20: 6d 64 35 73 75 6d 28 74 79 70 65 2c 6e 61 6d 65  md5sum(type,name
3f30: 2c 74 62 6c 5f 6e 61 6d 65 2c 72 6f 6f 74 70 61  ,tbl_name,rootpa
3f40: 67 65 2c 73 71 6c 29 20 46 52 4f 4d 20 73 71 6c  ge,sql) FROM sql
3f50: 69 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 24 63  ite_master}.} $c
3f60: 68 65 63 6b 73 75 6d 32 0a 69 66 63 61 70 61 62  hecksum2.ifcapab
3f70: 6c 65 20 74 65 6d 70 64 62 20 7b 0a 20 20 64 6f  le tempdb {.  do
3f80: 5f 74 65 73 74 20 61 76 74 72 61 6e 73 2d 37 2e  _test avtrans-7.
3f90: 31 31 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  11 {.    execsql
3fa0: 20 7b 0a 20 20 20 20 20 20 42 45 47 49 4e 3b 0a   {.      BEGIN;.
3fb0: 20 20 20 20 20 20 43 52 45 41 54 45 20 54 45 4d        CREATE TEM
3fc0: 50 20 54 41 42 4c 45 20 74 33 20 41 53 20 53 45  P TABLE t3 AS SE
3fd0: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 3b 0a  LECT * FROM t2;.
3fe0: 20 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54        INSERT INT
3ff0: 4f 20 74 32 20 53 45 4c 45 43 54 20 2a 20 46 52  O t2 SELECT * FR
4000: 4f 4d 20 74 33 3b 0a 20 20 20 20 20 20 44 52 4f  OM t3;.      DRO
4010: 50 20 49 4e 44 45 58 20 69 32 78 3b 0a 20 20 20  P INDEX i2x;.   
4020: 20 20 20 44 52 4f 50 20 49 4e 44 45 58 20 69 32     DROP INDEX i2
4030: 79 3b 0a 20 20 20 20 20 20 43 52 45 41 54 45 20  y;.      CREATE 
4040: 49 4e 44 45 58 20 69 33 61 20 4f 4e 20 74 33 28  INDEX i3a ON t3(
4050: 78 29 3b 0a 20 20 20 20 20 20 52 4f 4c 4c 42 41  x);.      ROLLBA
4060: 43 4b 3b 0a 20 20 20 20 20 20 53 45 4c 45 43 54  CK;.      SELECT
4070: 20 6d 64 35 73 75 6d 28 78 2c 79 2c 7a 29 20 46   md5sum(x,y,z) F
4080: 52 4f 4d 20 74 32 3b 0a 20 20 20 20 7d 0a 20 20  ROM t2;.    }.  
4090: 7d 20 24 63 68 65 63 6b 73 75 6d 0a 7d 0a 64 6f  } $checksum.}.do
40a0: 5f 74 65 73 74 20 61 76 74 72 61 6e 73 2d 37 2e  _test avtrans-7.
40b0: 31 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  12 {.  execsql {
40c0: 53 45 4c 45 43 54 20 6d 64 35 73 75 6d 28 74 79  SELECT md5sum(ty
40d0: 70 65 2c 6e 61 6d 65 2c 74 62 6c 5f 6e 61 6d 65  pe,name,tbl_name
40e0: 2c 72 6f 6f 74 70 61 67 65 2c 73 71 6c 29 20 46  ,rootpage,sql) F
40f0: 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
4100: 72 7d 0a 7d 20 24 63 68 65 63 6b 73 75 6d 32 0a  r}.} $checksum2.
4110: 69 66 63 61 70 61 62 6c 65 20 74 65 6d 70 64 62  ifcapable tempdb
4120: 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 61 76 74   {.  do_test avt
4130: 72 61 6e 73 2d 37 2e 31 33 20 7b 0a 20 20 20 20  rans-7.13 {.    
4140: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
4150: 42 45 47 49 4e 3b 0a 20 20 20 20 20 20 44 52 4f  BEGIN;.      DRO
4160: 50 20 54 41 42 4c 45 20 74 32 3b 0a 20 20 20 20  P TABLE t2;.    
4170: 20 20 52 4f 4c 4c 42 41 43 4b 3b 0a 20 20 20 20    ROLLBACK;.    
4180: 20 20 53 45 4c 45 43 54 20 6d 64 35 73 75 6d 28    SELECT md5sum(
4190: 78 2c 79 2c 7a 29 20 46 52 4f 4d 20 74 32 3b 0a  x,y,z) FROM t2;.
41a0: 20 20 20 20 7d 0a 20 20 7d 20 24 63 68 65 63 6b      }.  } $check
41b0: 73 75 6d 0a 7d 0a 64 6f 5f 74 65 73 74 20 61 76  sum.}.do_test av
41c0: 74 72 61 6e 73 2d 37 2e 31 34 20 7b 0a 20 20 65  trans-7.14 {.  e
41d0: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6d  xecsql {SELECT m
41e0: 64 35 73 75 6d 28 74 79 70 65 2c 6e 61 6d 65 2c  d5sum(type,name,
41f0: 74 62 6c 5f 6e 61 6d 65 2c 72 6f 6f 74 70 61 67  tbl_name,rootpag
4200: 65 2c 73 71 6c 29 20 46 52 4f 4d 20 73 71 6c 69  e,sql) FROM sqli
4210: 74 65 5f 6d 61 73 74 65 72 7d 0a 7d 20 24 63 68  te_master}.} $ch
4220: 65 63 6b 73 75 6d 32 0a 69 6e 74 65 67 72 69 74  ecksum2.integrit
4230: 79 5f 63 68 65 63 6b 20 61 76 74 72 61 6e 73 2d  y_check avtrans-
4240: 37 2e 31 35 0a 0a 23 20 41 72 72 61 6e 67 65 20  7.15..# Arrange 
4250: 66 6f 72 20 61 6e 6f 74 68 65 72 20 70 72 6f 63  for another proc
4260: 65 73 73 20 74 6f 20 62 65 67 69 6e 20 6d 6f 64  ess to begin mod
4270: 69 66 79 69 6e 67 20 74 68 65 20 64 61 74 61 62  ifying the datab
4280: 61 73 65 20 62 75 74 20 61 62 6f 72 74 0a 23 20  ase but abort.# 
4290: 61 6e 64 20 64 69 65 20 69 6e 20 74 68 65 20 6d  and die in the m
42a0: 69 64 64 6c 65 20 6f 66 20 74 68 65 20 6d 6f 64  iddle of the mod
42b0: 69 66 69 63 61 74 69 6f 6e 2e 20 20 54 68 65 6e  ification.  Then
42c0: 20 68 61 76 65 20 74 68 69 73 20 70 72 6f 63 65   have this proce
42d0: 73 73 20 72 65 61 64 0a 23 20 74 68 65 20 64 61  ss read.# the da
42e0: 74 61 62 61 73 65 2e 20 20 54 68 69 73 20 70 72  tabase.  This pr
42f0: 6f 63 65 73 73 20 73 68 6f 75 6c 64 20 64 65 74  ocess should det
4300: 65 63 74 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20  ect the journal 
4310: 66 69 6c 65 20 61 6e 64 20 72 6f 6c 6c 20 69 74  file and roll it
4320: 0a 23 20 62 61 63 6b 2e 20 20 56 65 72 69 66 79  .# back.  Verify
4330: 20 74 68 61 74 20 74 68 69 73 20 68 61 70 70 65   that this happe
4340: 6e 73 20 63 6f 72 72 65 63 74 6c 79 2e 0a 23 0a  ns correctly..#.
4350: 73 65 74 20 66 64 20 5b 6f 70 65 6e 20 74 65 73  set fd [open tes
4360: 74 2e 74 63 6c 20 77 5d 0a 70 75 74 73 20 24 66  t.tcl w].puts $f
4370: 64 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 64 62  d {.  sqlite3 db
4380: 20 74 65 73 74 2e 64 62 0a 20 20 64 62 20 65 76   test.db.  db ev
4390: 61 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20  al {.    PRAGMA 
43a0: 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69  default_cache_si
43b0: 7a 65 3d 32 30 3b 0a 20 20 20 20 42 45 47 49 4e  ze=20;.    BEGIN
43c0: 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42  ;.    CREATE TAB
43d0: 4c 45 20 74 33 20 41 53 20 53 45 4c 45 43 54 20  LE t3 AS SELECT 
43e0: 2a 20 46 52 4f 4d 20 74 32 3b 0a 20 20 20 20 44  * FROM t2;.    D
43f0: 45 4c 45 54 45 20 46 52 4f 4d 20 74 32 3b 0a 20  ELETE FROM t2;. 
4400: 20 7d 0a 20 20 73 71 6c 69 74 65 5f 61 62 6f 72   }.  sqlite_abor
4410: 74 0a 7d 0a 63 6c 6f 73 65 20 24 66 64 0a 64 6f  t.}.close $fd.do
4420: 5f 74 65 73 74 20 61 76 74 72 61 6e 73 2d 38 2e  _test avtrans-8.
4430: 31 20 7b 0a 20 20 63 61 74 63 68 20 7b 65 78 65  1 {.  catch {exe
4440: 63 20 5b 69 6e 66 6f 20 6e 61 6d 65 6f 66 65 78  c [info nameofex
4450: 65 63 5d 20 74 65 73 74 2e 74 63 6c 7d 0a 20 20  ec] test.tcl}.  
4460: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
4470: 6d 64 35 73 75 6d 28 78 2c 79 2c 7a 29 20 46 52  md5sum(x,y,z) FR
4480: 4f 4d 20 74 32 7d 0a 7d 20 24 63 68 65 63 6b 73  OM t2}.} $checks
4490: 75 6d 0a 64 6f 5f 74 65 73 74 20 61 76 74 72 61  um.do_test avtra
44a0: 6e 73 2d 38 2e 32 20 7b 0a 20 20 65 78 65 63 73  ns-8.2 {.  execs
44b0: 71 6c 20 7b 53 45 4c 45 43 54 20 6d 64 35 73 75  ql {SELECT md5su
44c0: 6d 28 74 79 70 65 2c 6e 61 6d 65 2c 74 62 6c 5f  m(type,name,tbl_
44d0: 6e 61 6d 65 2c 72 6f 6f 74 70 61 67 65 2c 73 71  name,rootpage,sq
44e0: 6c 29 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d  l) FROM sqlite_m
44f0: 61 73 74 65 72 7d 0a 7d 20 24 63 68 65 63 6b 73  aster}.} $checks
4500: 75 6d 32 0a 69 6e 74 65 67 72 69 74 79 5f 63 68  um2.integrity_ch
4510: 65 63 6b 20 61 76 74 72 61 6e 73 2d 38 2e 33 0a  eck avtrans-8.3.
4520: 0a 23 20 49 6e 20 74 68 65 20 66 6f 6c 6c 6f 77  .# In the follow
4530: 69 6e 67 20 73 65 71 75 65 6e 63 65 20 6f 66 20  ing sequence of 
4540: 74 65 73 74 73 2c 20 63 6f 6d 70 75 74 65 20 74  tests, compute t
4550: 68 65 20 4d 44 35 20 73 75 6d 20 6f 66 20 74 68  he MD5 sum of th
4560: 65 20 63 6f 6e 74 65 6e 74 0a 23 20 6f 66 20 61  e content.# of a
4570: 20 74 61 62 6c 65 2c 20 6d 61 6b 65 20 6c 6f 74   table, make lot
4580: 73 20 6f 66 20 6d 6f 64 69 66 69 63 61 74 69 6f  s of modificatio
4590: 6e 73 20 74 6f 20 74 68 61 74 20 74 61 62 6c 65  ns to that table
45a0: 2c 20 74 68 65 6e 20 64 6f 20 61 20 72 6f 6c 6c  , then do a roll
45b0: 62 61 63 6b 2e 0a 23 20 56 65 72 69 66 79 20 74  back..# Verify t
45c0: 68 61 74 20 61 66 74 65 72 20 74 68 65 20 72 6f  hat after the ro
45d0: 6c 6c 62 61 63 6b 2c 20 74 68 65 20 4d 44 35 20  llback, the MD5 
45e0: 63 68 65 63 6b 73 75 6d 20 69 73 20 75 6e 63 68  checksum is unch
45f0: 61 6e 67 65 64 2e 0a 23 0a 64 6f 5f 74 65 73 74  anged..#.do_test
4600: 20 61 76 74 72 61 6e 73 2d 39 2e 31 20 7b 0a 20   avtrans-9.1 {. 
4610: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50   execsql {.    P
4620: 52 41 47 4d 41 20 64 65 66 61 75 6c 74 5f 63 61  RAGMA default_ca
4630: 63 68 65 5f 73 69 7a 65 3d 31 30 3b 0a 20 20 7d  che_size=10;.  }
4640: 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 73 71  .  db close.  sq
4650: 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64 62  lite3 db test.db
4660: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
4670: 20 42 45 47 49 4e 3b 0a 20 20 20 20 43 52 45 41   BEGIN;.    CREA
4680: 54 45 20 54 41 42 4c 45 20 74 33 28 78 20 54 45  TE TABLE t3(x TE
4690: 58 54 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20  XT);.    INSERT 
46a0: 49 4e 54 4f 20 74 33 20 56 41 4c 55 45 53 28 72  INTO t3 VALUES(r
46b0: 61 6e 64 73 74 72 28 31 30 2c 34 30 30 29 29 3b  andstr(10,400));
46c0: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
46d0: 20 74 33 20 56 41 4c 55 45 53 28 72 61 6e 64 73   t3 VALUES(rands
46e0: 74 72 28 31 30 2c 34 30 30 29 29 3b 0a 20 20 20  tr(10,400));.   
46f0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 33 20   INSERT INTO t3 
4700: 53 45 4c 45 43 54 20 72 61 6e 64 73 74 72 28 31  SELECT randstr(1
4710: 30 2c 34 30 30 29 20 46 52 4f 4d 20 74 33 3b 0a  0,400) FROM t3;.
4720: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
4730: 74 33 20 53 45 4c 45 43 54 20 72 61 6e 64 73 74  t3 SELECT randst
4740: 72 28 31 30 2c 34 30 30 29 20 46 52 4f 4d 20 74  r(10,400) FROM t
4750: 33 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  3;.    INSERT IN
4760: 54 4f 20 74 33 20 53 45 4c 45 43 54 20 72 61 6e  TO t3 SELECT ran
4770: 64 73 74 72 28 31 30 2c 34 30 30 29 20 46 52 4f  dstr(10,400) FRO
4780: 4d 20 74 33 3b 0a 20 20 20 20 49 4e 53 45 52 54  M t3;.    INSERT
4790: 20 49 4e 54 4f 20 74 33 20 53 45 4c 45 43 54 20   INTO t3 SELECT 
47a0: 72 61 6e 64 73 74 72 28 31 30 2c 34 30 30 29 20  randstr(10,400) 
47b0: 46 52 4f 4d 20 74 33 3b 0a 20 20 20 20 49 4e 53  FROM t3;.    INS
47c0: 45 52 54 20 49 4e 54 4f 20 74 33 20 53 45 4c 45  ERT INTO t3 SELE
47d0: 43 54 20 72 61 6e 64 73 74 72 28 31 30 2c 34 30  CT randstr(10,40
47e0: 30 29 20 46 52 4f 4d 20 74 33 3b 0a 20 20 20 20  0) FROM t3;.    
47f0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 33 20 53  INSERT INTO t3 S
4800: 45 4c 45 43 54 20 72 61 6e 64 73 74 72 28 31 30  ELECT randstr(10
4810: 2c 34 30 30 29 20 46 52 4f 4d 20 74 33 3b 0a 20  ,400) FROM t3;. 
4820: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
4830: 33 20 53 45 4c 45 43 54 20 72 61 6e 64 73 74 72  3 SELECT randstr
4840: 28 31 30 2c 34 30 30 29 20 46 52 4f 4d 20 74 33  (10,400) FROM t3
4850: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
4860: 4f 20 74 33 20 53 45 4c 45 43 54 20 72 61 6e 64  O t3 SELECT rand
4870: 73 74 72 28 31 30 2c 34 30 30 29 20 46 52 4f 4d  str(10,400) FROM
4880: 20 74 33 3b 0a 20 20 20 20 49 4e 53 45 52 54 20   t3;.    INSERT 
4890: 49 4e 54 4f 20 74 33 20 53 45 4c 45 43 54 20 72  INTO t3 SELECT r
48a0: 61 6e 64 73 74 72 28 31 30 2c 34 30 30 29 20 46  andstr(10,400) F
48b0: 52 4f 4d 20 74 33 3b 0a 20 20 20 20 43 4f 4d 4d  ROM t3;.    COMM
48c0: 49 54 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 63  IT;.    SELECT c
48d0: 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20 74 33 3b  ount(*) FROM t3;
48e0: 0a 20 20 7d 0a 7d 20 7b 31 30 32 34 7d 0a 0a 23  .  }.} {1024}..#
48f0: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 70   The following p
4900: 72 6f 63 65 64 75 72 65 20 63 6f 6d 70 75 74 65  rocedure compute
4910: 73 20 61 20 22 73 69 67 6e 61 74 75 72 65 22 20  s a "signature" 
4920: 66 6f 72 20 74 61 62 6c 65 20 22 74 33 22 2e 20  for table "t3". 
4930: 20 49 66 0a 23 20 54 33 20 63 68 61 6e 67 65 73   If.# T3 changes
4940: 20 69 6e 20 61 6e 79 20 77 61 79 2c 20 74 68 65   in any way, the
4950: 20 73 69 67 6e 61 74 75 72 65 20 73 68 6f 75 6c   signature shoul
4960: 64 20 63 68 61 6e 67 65 2e 20 20 0a 23 0a 23 20  d change.  .#.# 
4970: 54 68 69 73 20 69 73 20 75 73 65 64 20 74 6f 20  This is used to 
4980: 74 65 73 74 20 52 4f 4c 4c 42 41 43 4b 2e 20 20  test ROLLBACK.  
4990: 57 65 20 67 61 74 68 65 72 20 61 20 73 69 67 6e  We gather a sign
49a0: 61 74 75 72 65 20 66 6f 72 20 74 33 2c 20 74 68  ature for t3, th
49b0: 65 6e 0a 23 20 6d 61 6b 65 20 6c 6f 74 73 20 6f  en.# make lots o
49c0: 66 20 63 68 61 6e 67 65 73 20 74 6f 20 74 33 2c  f changes to t3,
49d0: 20 74 68 65 6e 20 72 6f 6c 6c 62 61 63 6b 20 61   then rollback a
49e0: 6e 64 20 74 61 6b 65 20 61 6e 6f 74 68 65 72 20  nd take another 
49f0: 73 69 67 6e 61 74 75 72 65 2e 0a 23 20 54 68 65  signature..# The
4a00: 20 74 77 6f 20 73 69 67 6e 61 74 75 72 65 73 20   two signatures 
4a10: 73 68 6f 75 6c 64 20 62 65 20 74 68 65 20 73 61  should be the sa
4a20: 6d 65 2e 0a 23 0a 70 72 6f 63 20 73 69 67 6e 61  me..#.proc signa
4a30: 74 75 72 65 20 7b 7d 20 7b 0a 20 20 72 65 74 75  ture {} {.  retu
4a40: 72 6e 20 5b 64 62 20 65 76 61 6c 20 7b 53 45 4c  rn [db eval {SEL
4a50: 45 43 54 20 63 6f 75 6e 74 28 2a 29 2c 20 6d 64  ECT count(*), md
4a60: 35 73 75 6d 28 78 29 20 46 52 4f 4d 20 74 33 7d  5sum(x) FROM t3}
4a70: 5d 0a 7d 0a 0a 23 20 52 65 70 65 61 74 20 74 68  ].}..# Repeat th
4a80: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 67 72 6f 75  e following grou
4a90: 70 20 6f 66 20 74 65 73 74 73 20 32 30 20 74 69  p of tests 20 ti
4aa0: 6d 65 73 20 66 6f 72 20 71 75 69 63 6b 20 74 65  mes for quick te
4ab0: 73 74 69 6e 67 20 61 6e 64 0a 23 20 34 30 20 74  sting and.# 40 t
4ac0: 69 6d 65 73 20 66 6f 72 20 66 75 6c 6c 20 74 65  imes for full te
4ad0: 73 74 69 6e 67 2e 20 20 45 61 63 68 20 69 74 65  sting.  Each ite
4ae0: 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 74 65  ration of the te
4af0: 73 74 20 6d 61 6b 65 73 20 74 61 62 6c 65 0a 23  st makes table.#
4b00: 20 74 33 20 61 20 6c 69 74 74 6c 65 20 6c 61 72   t3 a little lar
4b10: 67 65 72 2c 20 61 6e 64 20 74 68 75 73 20 74 61  ger, and thus ta
4b20: 6b 65 73 20 61 20 6c 69 74 74 6c 65 20 6c 6f 6e  kes a little lon
4b30: 67 65 72 2c 20 73 6f 20 64 6f 69 6e 67 20 34 30  ger, so doing 40
4b40: 20 74 65 73 74 73 0a 23 20 69 73 20 6d 6f 72 65   tests.# is more
4b50: 20 74 68 61 6e 20 32 2e 30 20 74 69 6d 65 73 20   than 2.0 times 
4b60: 73 6c 6f 77 65 72 20 74 68 61 6e 20 64 6f 69 6e  slower than doin
4b70: 67 20 32 30 20 74 65 73 74 73 2e 20 20 43 6f 6e  g 20 tests.  Con
4b80: 73 69 64 65 72 61 62 6c 79 20 6d 6f 72 65 2e 0a  siderably more..
4b90: 23 0a 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73  #.if {[info exis
4ba0: 74 73 20 47 28 69 73 71 75 69 63 6b 29 5d 7d 20  ts G(isquick)]} 
4bb0: 7b 0a 20 20 73 65 74 20 6c 69 6d 69 74 20 32 30  {.  set limit 20
4bc0: 0a 7d 20 65 6c 73 65 20 7b 0a 20 20 73 65 74 20  .} else {.  set 
4bd0: 6c 69 6d 69 74 20 34 30 0a 7d 0a 0a 23 20 44 6f  limit 40.}..# Do
4be0: 20 72 6f 6c 6c 62 61 63 6b 73 2e 20 20 4d 61 6b   rollbacks.  Mak
4bf0: 65 20 73 75 72 65 20 74 68 65 20 73 69 67 6e 61  e sure the signa
4c00: 74 75 72 65 20 64 6f 65 73 20 6e 6f 74 20 63 68  ture does not ch
4c10: 61 6e 67 65 2e 0a 23 0a 66 6f 72 20 7b 73 65 74  ange..#.for {set
4c20: 20 69 20 32 7d 20 7b 24 69 3c 3d 24 6c 69 6d 69   i 2} {$i<=$limi
4c30: 74 7d 20 7b 69 6e 63 72 20 69 7d 20 7b 0a 20 20  t} {incr i} {.  
4c40: 73 65 74 20 3a 3a 73 69 67 20 5b 73 69 67 6e 61  set ::sig [signa
4c50: 74 75 72 65 5d 0a 20 20 73 65 74 20 63 6e 74 20  ture].  set cnt 
4c60: 5b 6c 69 6e 64 65 78 20 24 3a 3a 73 69 67 20 30  [lindex $::sig 0
4c70: 5d 0a 20 20 69 66 20 7b 24 69 25 32 3d 3d 30 7d  ].  if {$i%2==0}
4c80: 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b   {.    execsql {
4c90: 50 52 41 47 4d 41 20 66 75 6c 6c 66 73 79 6e 63  PRAGMA fullfsync
4ca0: 3d 4f 4e 7d 0a 20 20 7d 20 65 6c 73 65 20 7b 0a  =ON}.  } else {.
4cb0: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 50 52 41      execsql {PRA
4cc0: 47 4d 41 20 66 75 6c 6c 66 73 79 6e 63 3d 4f 46  GMA fullfsync=OF
4cd0: 46 7d 0a 20 20 7d 0a 20 20 73 65 74 20 73 71 6c  F}.  }.  set sql
4ce0: 69 74 65 5f 73 79 6e 63 5f 63 6f 75 6e 74 20 30  ite_sync_count 0
4cf0: 0a 20 20 73 65 74 20 73 71 6c 69 74 65 5f 66 75  .  set sqlite_fu
4d00: 6c 6c 73 79 6e 63 5f 63 6f 75 6e 74 20 30 0a 20  llsync_count 0. 
4d10: 20 64 6f 5f 74 65 73 74 20 61 76 74 72 61 6e 73   do_test avtrans
4d20: 2d 39 2e 24 69 2e 31 2d 24 63 6e 74 20 7b 0a 20  -9.$i.1-$cnt {. 
4d30: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20      execsql {.  
4d40: 20 20 20 20 20 42 45 47 49 4e 3b 0a 20 20 20 20       BEGIN;.    
4d50: 20 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 74     DELETE FROM t
4d60: 33 20 57 48 45 52 45 20 72 61 6e 64 6f 6d 28 29  3 WHERE random()
4d70: 25 31 30 21 3d 30 3b 0a 20 20 20 20 20 20 20 49  %10!=0;.       I
4d80: 4e 53 45 52 54 20 49 4e 54 4f 20 74 33 20 53 45  NSERT INTO t3 SE
4d90: 4c 45 43 54 20 72 61 6e 64 73 74 72 28 31 30 2c  LECT randstr(10,
4da0: 31 30 29 7c 7c 78 20 46 52 4f 4d 20 74 33 3b 0a  10)||x FROM t3;.
4db0: 20 20 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e         INSERT IN
4dc0: 54 4f 20 74 33 20 53 45 4c 45 43 54 20 72 61 6e  TO t3 SELECT ran
4dd0: 64 73 74 72 28 31 30 2c 31 30 29 7c 7c 78 20 46  dstr(10,10)||x F
4de0: 52 4f 4d 20 74 33 3b 0a 20 20 20 20 20 20 20 52  ROM t3;.       R
4df0: 4f 4c 4c 42 41 43 4b 3b 0a 20 20 20 20 20 7d 0a  OLLBACK;.     }.
4e00: 20 20 20 20 20 73 69 67 6e 61 74 75 72 65 0a 20       signature. 
4e10: 20 7d 20 24 73 69 67 0a 20 20 64 6f 5f 74 65 73   } $sig.  do_tes
4e20: 74 20 61 76 74 72 61 6e 73 2d 39 2e 24 69 2e 32  t avtrans-9.$i.2
4e30: 2d 24 63 6e 74 20 7b 0a 20 20 20 20 20 65 78 65  -$cnt {.     exe
4e40: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 20 42 45  csql {.       BE
4e50: 47 49 4e 3b 0a 20 20 20 20 20 20 20 44 45 4c 45  GIN;.       DELE
4e60: 54 45 20 46 52 4f 4d 20 74 33 20 57 48 45 52 45  TE FROM t3 WHERE
4e70: 20 72 61 6e 64 6f 6d 28 29 25 31 30 21 3d 30 3b   random()%10!=0;
4e80: 0a 20 20 20 20 20 20 20 49 4e 53 45 52 54 20 49  .       INSERT I
4e90: 4e 54 4f 20 74 33 20 53 45 4c 45 43 54 20 72 61  NTO t3 SELECT ra
4ea0: 6e 64 73 74 72 28 31 30 2c 31 30 29 7c 7c 78 20  ndstr(10,10)||x 
4eb0: 46 52 4f 4d 20 74 33 3b 0a 20 20 20 20 20 20 20  FROM t3;.       
4ec0: 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 33 20 57  DELETE FROM t3 W
4ed0: 48 45 52 45 20 72 61 6e 64 6f 6d 28 29 25 31 30  HERE random()%10
4ee0: 21 3d 30 3b 0a 20 20 20 20 20 20 20 49 4e 53 45  !=0;.       INSE
4ef0: 52 54 20 49 4e 54 4f 20 74 33 20 53 45 4c 45 43  RT INTO t3 SELEC
4f00: 54 20 72 61 6e 64 73 74 72 28 31 30 2c 31 30 29  T randstr(10,10)
4f10: 7c 7c 78 20 46 52 4f 4d 20 74 33 3b 0a 20 20 20  ||x FROM t3;.   
4f20: 20 20 20 20 52 4f 4c 4c 42 41 43 4b 3b 0a 20 20      ROLLBACK;.  
4f30: 20 20 20 7d 0a 20 20 20 20 20 73 69 67 6e 61 74     }.     signat
4f40: 75 72 65 0a 20 20 7d 20 24 73 69 67 0a 20 20 69  ure.  } $sig.  i
4f50: 66 20 7b 24 69 3c 24 6c 69 6d 69 74 7d 20 7b 0a  f {$i<$limit} {.
4f60: 20 20 20 20 64 6f 5f 74 65 73 74 20 61 76 74 72      do_test avtr
4f70: 61 6e 73 2d 39 2e 24 69 2e 33 2d 24 63 6e 74 20  ans-9.$i.3-$cnt 
4f80: 7b 0a 20 20 20 20 20 20 20 65 78 65 63 73 71 6c  {.       execsql
4f90: 20 7b 0a 20 20 20 20 20 20 20 20 20 49 4e 53 45   {.         INSE
4fa0: 52 54 20 49 4e 54 4f 20 74 33 20 53 45 4c 45 43  RT INTO t3 SELEC
4fb0: 54 20 72 61 6e 64 73 74 72 28 31 30 2c 34 30 30  T randstr(10,400
4fc0: 29 20 46 52 4f 4d 20 74 33 20 57 48 45 52 45 20  ) FROM t3 WHERE 
4fd0: 72 61 6e 64 6f 6d 28 29 25 31 30 3d 3d 30 3b 0a  random()%10==0;.
4fe0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 20 7b         }.    } {
4ff0: 7d 0a 20 20 20 20 69 66 20 7b 24 74 63 6c 5f 70  }.    if {$tcl_p
5000: 6c 61 74 66 6f 72 6d 28 70 6c 61 74 66 6f 72 6d  latform(platform
5010: 29 3d 3d 22 75 6e 69 78 22 7d 20 7b 0a 20 20 20  )=="unix"} {.   
5020: 20 20 20 64 6f 5f 74 65 73 74 20 61 76 74 72 61     do_test avtra
5030: 6e 73 2d 39 2e 24 69 2e 34 2d 24 63 6e 74 20 7b  ns-9.$i.4-$cnt {
5040: 0a 20 20 20 20 20 20 20 20 20 65 78 70 72 20 7b  .         expr {
5050: 24 73 71 6c 69 74 65 5f 73 79 6e 63 5f 63 6f 75  $sqlite_sync_cou
5060: 6e 74 3e 30 7d 0a 20 20 20 20 20 20 7d 20 31 0a  nt>0}.      } 1.
5070: 20 20 20 20 20 20 69 66 63 61 70 61 62 6c 65 20        ifcapable 
5080: 70 61 67 65 72 5f 70 72 61 67 6d 61 73 20 7b 0a  pager_pragmas {.
5090: 20 20 20 20 20 20 20 20 64 6f 5f 74 65 73 74 20          do_test 
50a0: 61 76 74 72 61 6e 73 2d 39 2e 24 69 2e 35 2d 24  avtrans-9.$i.5-$
50b0: 63 6e 74 20 7b 0a 20 20 20 20 20 20 20 20 20 20  cnt {.          
50c0: 20 65 78 70 72 20 7b 24 73 71 6c 69 74 65 5f 66   expr {$sqlite_f
50d0: 75 6c 6c 73 79 6e 63 5f 63 6f 75 6e 74 3e 30 7d  ullsync_count>0}
50e0: 0a 20 20 20 20 20 20 20 20 7d 20 5b 65 78 70 72  .        } [expr
50f0: 20 7b 24 69 25 32 3d 3d 30 7d 5d 0a 20 20 20 20   {$i%2==0}].    
5100: 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20    } else {.     
5110: 20 20 20 64 6f 5f 74 65 73 74 20 61 76 74 72 61     do_test avtra
5120: 6e 73 2d 39 2e 24 69 2e 35 2d 24 63 6e 74 20 7b  ns-9.$i.5-$cnt {
5130: 0a 20 20 20 20 20 20 20 20 20 20 20 65 78 70 72  .           expr
5140: 20 7b 24 73 71 6c 69 74 65 5f 66 75 6c 6c 73 79   {$sqlite_fullsy
5150: 6e 63 5f 63 6f 75 6e 74 3d 3d 30 7d 0a 20 20 20  nc_count==0}.   
5160: 20 20 20 20 20 7d 20 7b 31 7d 0a 20 20 20 20 20       } {1}.     
5170: 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 77 61 6c   }.    }.    wal
5180: 5f 63 68 65 63 6b 5f 6a 6f 75 72 6e 61 6c 5f 6d  _check_journal_m
5190: 6f 64 65 20 61 76 74 72 61 6e 73 2d 39 2e 24 69  ode avtrans-9.$i
51a0: 2d 36 2e 24 63 6e 74 0a 20 20 7d 0a 20 20 73 65  -6.$cnt.  }.  se
51b0: 74 20 3a 3a 70 61 67 65 72 5f 6f 6c 64 5f 66 6f  t ::pager_old_fo
51c0: 72 6d 61 74 20 30 0a 7d 0a 69 6e 74 65 67 72 69  rmat 0.}.integri
51d0: 74 79 5f 63 68 65 63 6b 20 61 76 74 72 61 6e 73  ty_check avtrans
51e0: 2d 31 30 2e 31 0a 77 61 6c 5f 63 68 65 63 6b 5f  -10.1.wal_check_
51f0: 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 20 61 76 74  journal_mode avt
5200: 72 61 6e 73 2d 31 30 2e 32 0a 20 20 20 0a 66 69  rans-10.2.   .fi
5210: 6e 69 73 68 5f 74 65 73 74 0a                    nish_test.