/ Hex Artifact Content
Login

Artifact fc14cf6d1a2b250d2735ef16124b971bce152f14:


0000: 23 20 32 30 31 34 20 4e 6f 76 65 6d 62 65 72 20  # 2014 November 
0010: 31 32 0a 23 0a 23 20 54 68 65 20 61 75 74 68 6f  12.#.# The autho
0020: 72 20 64 69 73 63 6c 61 69 6d 73 20 63 6f 70 79  r disclaims copy
0030: 72 69 67 68 74 20 74 6f 20 74 68 69 73 20 73 6f  right to this so
0040: 75 72 63 65 20 63 6f 64 65 2e 20 20 49 6e 20 70  urce code.  In p
0050: 6c 61 63 65 20 6f 66 0a 23 20 61 20 6c 65 67 61  lace of.# a lega
0060: 6c 20 6e 6f 74 69 63 65 2c 20 68 65 72 65 20 69  l notice, here i
0070: 73 20 61 20 62 6c 65 73 73 69 6e 67 3a 0a 23 0a  s a blessing:.#.
0080: 23 20 20 20 20 4d 61 79 20 79 6f 75 20 64 6f 20  #    May you do 
0090: 67 6f 6f 64 20 61 6e 64 20 6e 6f 74 20 65 76 69  good and not evi
00a0: 6c 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20  l..#    May you 
00b0: 66 69 6e 64 20 66 6f 72 67 69 76 65 6e 65 73 73  find forgiveness
00c0: 20 66 6f 72 20 79 6f 75 72 73 65 6c 66 20 61 6e   for yourself an
00d0: 64 20 66 6f 72 67 69 76 65 20 6f 74 68 65 72 73  d forgive others
00e0: 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20 73  ..#    May you s
00f0: 68 61 72 65 20 66 72 65 65 6c 79 2c 20 6e 65 76  hare freely, nev
0100: 65 72 20 74 61 6b 69 6e 67 20 6d 6f 72 65 20 74  er taking more t
0110: 68 61 6e 20 79 6f 75 20 67 69 76 65 2e 0a 23 0a  han you give..#.
0120: 23 2a 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 0a 23 0a 23 20 54 68 69  ********.#.# Thi
0170: 73 20 66 69 6c 65 20 63 6f 6e 74 61 69 6e 73 74  s file containst
0180: 20 74 65 73 74 73 20 74 6f 20 76 65 72 69 66 79   tests to verify
0190: 20 74 68 61 74 20 52 4f 4c 4c 42 41 43 4b 20 6f   that ROLLBACK o
01a0: 72 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 20 0a 23  r ROLLBACK TO .#
01b0: 20 6f 70 65 72 61 74 69 6f 6e 73 20 69 6e 74 65   operations inte
01c0: 72 61 63 74 20 63 6f 72 72 65 63 74 6c 79 20 77  ract correctly w
01d0: 69 74 68 20 6f 6e 67 6f 69 6e 67 20 53 45 4c 45  ith ongoing SELE
01e0: 43 54 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 23  CT statements..#
01f0: 0a 0a 73 65 74 20 74 65 73 74 64 69 72 20 5b 66  ..set testdir [f
0200: 69 6c 65 20 64 69 72 6e 61 6d 65 20 24 61 72 67  ile dirname $arg
0210: 76 30 5d 0a 73 6f 75 72 63 65 20 24 74 65 73 74  v0].source $test
0220: 64 69 72 2f 74 65 73 74 65 72 2e 74 63 6c 0a 73  dir/tester.tcl.s
0230: 65 74 20 3a 3a 74 65 73 74 70 72 65 66 69 78 20  et ::testprefix 
0240: 72 6f 6c 6c 62 61 63 6b 32 0a 0a 70 72 6f 63 20  rollback2..proc 
0250: 69 6e 74 32 68 65 78 20 7b 69 7d 20 7b 20 66 6f  int2hex {i} { fo
0260: 72 6d 61 74 20 25 2e 32 58 20 24 69 20 7d 0a 64  rmat %.2X $i }.d
0270: 62 20 66 75 6e 63 20 69 6e 74 32 68 65 78 20 69  b func int2hex i
0280: 6e 74 32 68 65 78 0a 64 6f 5f 65 78 65 63 73 71  nt2hex.do_execsq
0290: 6c 5f 74 65 73 74 20 31 2e 30 20 7b 0a 20 20 53  l_test 1.0 {.  S
02a0: 45 4c 45 43 54 20 69 6e 74 32 68 65 78 28 30 29  ELECT int2hex(0)
02b0: 2c 20 69 6e 74 32 68 65 78 28 31 30 30 29 2c 20  , int2hex(100), 
02c0: 69 6e 74 32 68 65 78 28 32 35 35 29 0a 7d 20 7b  int2hex(255).} {
02d0: 30 30 20 36 34 20 46 46 7d 0a 64 6f 5f 65 78 65  00 64 FF}.do_exe
02e0: 63 73 71 6c 5f 74 65 73 74 20 31 2e 31 20 7b 0a  csql_test 1.1 {.
02f0: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
0300: 31 28 69 2c 20 68 29 3b 0a 20 20 43 52 45 41 54  1(i, h);.  CREAT
0310: 45 20 49 4e 44 45 58 20 69 31 20 4f 4e 20 74 31  E INDEX i1 ON t1
0320: 28 68 29 3b 0a 20 20 57 49 54 48 20 64 61 74 61  (h);.  WITH data
0330: 28 61 2c 20 62 29 20 41 53 20 28 0a 20 20 20 20  (a, b) AS (.    
0340: 53 45 4c 45 43 54 20 31 2c 20 69 6e 74 32 68 65  SELECT 1, int2he
0350: 78 28 31 29 0a 20 20 20 20 20 20 55 4e 49 4f 4e  x(1).      UNION
0360: 20 41 4c 4c 0a 20 20 20 20 53 45 4c 45 43 54 20   ALL.    SELECT 
0370: 61 2b 31 2c 20 69 6e 74 32 68 65 78 28 61 2b 31  a+1, int2hex(a+1
0380: 29 20 46 52 4f 4d 20 64 61 74 61 20 57 48 45 52  ) FROM data WHER
0390: 45 20 61 3c 34 30 0a 20 20 29 0a 20 20 49 4e 53  E a<40.  ).  INS
03a0: 45 52 54 20 49 4e 54 4f 20 74 31 20 53 45 4c 45  ERT INTO t1 SELE
03b0: 43 54 20 2a 20 46 52 4f 4d 20 64 61 74 61 3b 0a  CT * FROM data;.
03c0: 7d 20 7b 7d 0a 0a 0a 23 20 64 6f 5f 72 6f 6c 6c  } {}...# do_roll
03d0: 62 61 63 6b 5f 74 65 73 74 20 49 44 20 53 57 49  back_test ID SWI
03e0: 54 43 48 45 53 0a 23 0a 23 20 77 68 65 72 65 20  TCHES.#.# where 
03f0: 53 57 49 54 43 48 45 53 20 61 72 65 3a 0a 23 0a  SWITCHES are:.#.
0400: 23 20 20 20 2d 73 65 74 75 70 20 20 20 20 20 20  #   -setup      
0410: 53 51 4c 20 73 63 72 69 70 74 20 74 6f 20 6f 70  SQL script to op
0420: 65 6e 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61  en transaction a
0430: 6e 64 20 62 65 67 69 6e 20 77 72 69 74 69 6e 67  nd begin writing
0440: 2e 0a 23 20 20 20 2d 73 65 6c 65 63 74 20 20 20  ..#   -select   
0450: 20 20 53 45 4c 45 43 54 20 74 6f 20 65 78 65 63    SELECT to exec
0460: 75 74 65 20 61 66 74 65 72 20 2d 73 65 74 75 70  ute after -setup
0470: 20 73 63 72 69 70 74 0a 23 20 20 20 2d 72 65 73   script.#   -res
0480: 75 6c 74 20 20 20 20 20 45 78 70 65 63 74 65 64  ult     Expected
0490: 20 72 65 73 75 6c 74 20 6f 66 20 2d 73 65 6c 65   result of -sele
04a0: 63 74 20 73 74 61 74 65 6d 65 6e 74 0a 23 20 20  ct statement.#  
04b0: 20 2d 72 6f 6c 6c 62 61 63 6b 20 20 20 55 73 65   -rollback   Use
04c0: 20 74 68 69 73 20 53 51 4c 20 63 6f 6d 6d 61 6e   this SQL comman
04d0: 64 20 28 22 52 4f 4c 4c 42 41 43 4b 22 20 6f 72  d ("ROLLBACK" or
04e0: 20 22 52 4f 4c 4c 42 41 43 4b 20 54 4f 20 2e 2e   "ROLLBACK TO ..
04f0: 2e 22 29 20 74 6f 0a 23 20 20 20 20 20 20 20 20  .") to.#        
0500: 20 20 20 20 20 20 20 72 6f 6c 6c 62 61 63 6b 20         rollback 
0510: 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
0520: 69 6e 20 74 68 65 20 6d 69 64 64 6c 65 20 6f 66  in the middle of
0530: 20 74 68 65 20 2d 73 65 6c 65 63 74 20 73 74 61   the -select sta
0540: 74 6d 65 6e 74 0a 23 20 20 20 20 20 20 20 20 20  tment.#         
0550: 20 20 20 20 20 20 65 78 65 63 75 74 69 6f 6e 2e        execution.
0560: 0a 23 0a 70 72 6f 63 20 64 6f 5f 72 6f 6c 6c 62  .#.proc do_rollb
0570: 61 63 6b 5f 74 65 73 74 20 7b 74 6e 20 61 72 67  ack_test {tn arg
0580: 73 7d 20 7b 0a 20 20 73 65 74 20 41 28 2d 73 65  s} {.  set A(-se
0590: 74 75 70 29 20 20 20 20 22 22 0a 20 20 73 65 74  tup)    "".  set
05a0: 20 41 28 2d 73 65 6c 65 63 74 29 20 20 20 22 22   A(-select)   ""
05b0: 0a 20 20 73 65 74 20 41 28 2d 72 65 73 75 6c 74  .  set A(-result
05c0: 29 20 20 20 22 22 0a 20 20 73 65 74 20 41 28 2d  )   "".  set A(-
05d0: 72 6f 6c 6c 62 61 63 6b 29 20 52 4f 4c 4c 42 41  rollback) ROLLBA
05e0: 43 4b 0a 0a 20 20 61 72 72 61 79 20 73 65 74 20  CK..  array set 
05f0: 4f 20 24 61 72 67 73 0a 20 20 66 6f 72 65 61 63  O $args.  foreac
0600: 68 20 6b 20 5b 61 72 72 61 79 20 6e 61 6d 65 73  h k [array names
0610: 20 4f 5d 20 7b 0a 20 20 20 20 69 66 20 7b 5b 69   O] {.    if {[i
0620: 6e 66 6f 20 65 78 69 73 74 73 20 41 28 24 6b 29  nfo exists A($k)
0630: 5d 3d 3d 30 7d 20 7b 20 65 72 72 6f 72 20 22 75  ]==0} { error "u
0640: 6e 6b 6e 6f 77 6e 20 6f 70 74 69 6f 6e 3a 20 24  nknown option: $
0650: 6b 22 20 7d 0a 20 20 20 20 73 65 74 20 41 28 24  k" }.    set A($
0660: 6b 29 20 24 4f 28 24 6b 29 0a 20 20 7d 0a 0a 20  k) $O($k).  }.. 
0670: 20 66 6f 72 20 7b 73 65 74 20 69 52 6f 6c 6c 62   for {set iRollb
0680: 61 63 6b 20 30 7d 20 31 20 7b 69 6e 63 72 20 69  ack 0} 1 {incr i
0690: 52 6f 6c 6c 62 61 63 6b 7d 20 7b 0a 20 20 20 20  Rollback} {.    
06a0: 63 61 74 63 68 20 7b 20 64 62 20 65 76 61 6c 20  catch { db eval 
06b0: 52 4f 4c 4c 42 41 43 4b 20 7d 0a 20 20 20 20 73  ROLLBACK }.    s
06c0: 65 74 20 72 65 73 20 5b 6c 69 73 74 5d 0a 20 20  et res [list].  
06d0: 20 20 64 62 20 65 76 61 6c 20 24 41 28 2d 73 65    db eval $A(-se
06e0: 74 75 70 29 0a 0a 20 20 20 20 73 65 74 20 69 20  tup)..    set i 
06f0: 30 0a 20 20 20 20 64 62 20 65 76 61 6c 20 24 41  0.    db eval $A
0700: 28 2d 73 65 6c 65 63 74 29 20 78 20 7b 0a 20 20  (-select) x {.  
0710: 20 20 20 20 69 66 20 7b 24 69 3d 3d 24 69 52 6f      if {$i==$iRo
0720: 6c 6c 62 61 63 6b 7d 20 7b 20 64 62 20 65 76 61  llback} { db eva
0730: 6c 20 24 41 28 2d 72 6f 6c 6c 62 61 63 6b 29 20  l $A(-rollback) 
0740: 7d 0a 20 20 20 20 20 20 66 6f 72 65 61 63 68 20  }.      foreach 
0750: 6b 20 24 78 28 2a 29 20 7b 20 6c 61 70 70 65 6e  k $x(*) { lappen
0760: 64 20 72 65 73 20 24 78 28 24 6b 29 20 7d 0a 20  d res $x($k) }. 
0770: 20 20 20 20 20 69 6e 63 72 20 69 0a 20 20 20 20       incr i.    
0780: 7d 0a 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 24  }..    do_test $
0790: 74 6e 2e 24 69 52 6f 6c 6c 62 61 63 6b 20 5b 6c  tn.$iRollback [l
07a0: 69 73 74 20 73 65 74 20 7b 7d 20 24 72 65 73 5d  ist set {} $res]
07b0: 20 5b 6c 69 73 74 20 7b 2a 7d 24 41 28 2d 72 65   [list {*}$A(-re
07c0: 73 75 6c 74 29 5d 0a 20 20 20 20 69 66 20 7b 24  sult)].    if {$
07d0: 69 20 3c 20 24 69 52 6f 6c 6c 62 61 63 6b 7d 20  i < $iRollback} 
07e0: 62 72 65 61 6b 0a 20 20 7d 0a 7d 0a 0a 64 6f 5f  break.  }.}..do_
07f0: 72 6f 6c 6c 62 61 63 6b 5f 74 65 73 74 20 32 2e  rollback_test 2.
0800: 31 20 2d 73 65 74 75 70 20 7b 0a 20 20 42 45 47  1 -setup {.  BEG
0810: 49 4e 3b 0a 20 20 20 20 44 45 4c 45 54 45 20 46  IN;.    DELETE F
0820: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 28 69 25  ROM t1 WHERE (i%
0830: 32 29 3d 3d 31 3b 0a 7d 20 2d 73 65 6c 65 63 74  2)==1;.} -select
0840: 20 7b 0a 20 20 53 45 4c 45 43 54 20 69 20 46 52   {.  SELECT i FR
0850: 4f 4d 20 74 31 20 57 48 45 52 45 20 28 69 25 32  OM t1 WHERE (i%2
0860: 29 3d 3d 30 0a 7d 20 2d 72 65 73 75 6c 74 20 7b  )==0.} -result {
0870: 0a 20 20 32 20 34 20 36 20 38 20 31 30 20 31 32  .  2 4 6 8 10 12
0880: 20 31 34 20 31 36 20 31 38 20 32 30 20 32 32 20   14 16 18 20 22 
0890: 32 34 20 32 36 20 32 38 20 33 30 20 33 32 20 33  24 26 28 30 32 3
08a0: 34 20 33 36 20 33 38 20 34 30 0a 7d 0a 0a 64 6f  4 36 38 40.}..do
08b0: 5f 72 6f 6c 6c 62 61 63 6b 5f 74 65 73 74 20 32  _rollback_test 2
08c0: 2e 32 20 2d 73 65 74 75 70 20 7b 0a 20 20 42 45  .2 -setup {.  BE
08d0: 47 49 4e 3b 0a 20 20 20 20 44 45 4c 45 54 45 20  GIN;.    DELETE 
08e0: 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 28 69  FROM t1 WHERE (i
08f0: 25 34 29 3d 3d 31 3b 0a 20 20 20 20 53 41 56 45  %4)==1;.    SAVE
0900: 50 4f 49 4e 54 20 6f 6e 65 3b 0a 20 20 20 20 20  POINT one;.     
0910: 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 31 20   DELETE FROM t1 
0920: 57 48 45 52 45 20 28 69 25 32 29 3d 3d 31 3b 0a  WHERE (i%2)==1;.
0930: 7d 20 2d 72 6f 6c 6c 62 61 63 6b 20 7b 0a 20 20  } -rollback {.  
0940: 52 4f 4c 4c 42 41 43 4b 20 54 4f 20 6f 6e 65 3b  ROLLBACK TO one;
0950: 0a 7d 20 2d 73 65 6c 65 63 74 20 7b 0a 20 20 53  .} -select {.  S
0960: 45 4c 45 43 54 20 69 20 46 52 4f 4d 20 74 31 20  ELECT i FROM t1 
0970: 57 48 45 52 45 20 28 69 25 32 29 3d 3d 30 0a 7d  WHERE (i%2)==0.}
0980: 20 2d 72 65 73 75 6c 74 20 7b 0a 20 20 32 20 34   -result {.  2 4
0990: 20 36 20 38 20 31 30 20 31 32 20 31 34 20 31 36   6 8 10 12 14 16
09a0: 20 31 38 20 32 30 20 32 32 20 32 34 20 32 36 20   18 20 22 24 26 
09b0: 32 38 20 33 30 20 33 32 20 33 34 20 33 36 20 33  28 30 32 34 36 3
09c0: 38 20 34 30 0a 7d 0a 0a 23 2d 2d 2d 2d 2d 2d 2d  8 40.}..#-------
09d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
09e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
09f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0a00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20  -------------.# 
0a10: 54 72 79 20 77 69 74 68 20 73 6f 6d 65 20 69 6e  Try with some in
0a20: 64 65 78 20 73 63 61 6e 73 0a 23 0a 64 6f 5f 65  dex scans.#.do_e
0a30: 71 70 5f 74 65 73 74 20 33 2e 31 20 7b 0a 20 20  qp_test 3.1 {.  
0a40: 53 45 4c 45 43 54 20 69 20 46 52 4f 4d 20 74 31  SELECT i FROM t1
0a50: 20 57 48 45 52 45 20 28 69 25 32 29 3d 3d 30 20   WHERE (i%2)==0 
0a60: 4f 52 44 45 52 20 42 59 20 68 20 44 45 53 43 3b  ORDER BY h DESC;
0a70: 0a 7d 20 7b 30 20 30 20 30 20 7b 53 43 41 4e 20  .} {0 0 0 {SCAN 
0a80: 54 41 42 4c 45 20 74 31 20 55 53 49 4e 47 20 49  TABLE t1 USING I
0a90: 4e 44 45 58 20 69 31 7d 7d 0a 64 6f 5f 72 6f 6c  NDEX i1}}.do_rol
0aa0: 6c 62 61 63 6b 5f 74 65 73 74 20 33 2e 32 20 2d  lback_test 3.2 -
0ab0: 73 65 74 75 70 20 7b 0a 20 20 42 45 47 49 4e 3b  setup {.  BEGIN;
0ac0: 0a 20 20 20 20 44 45 4c 45 54 45 20 46 52 4f 4d  .    DELETE FROM
0ad0: 20 74 31 20 57 48 45 52 45 20 28 69 25 32 29 3d   t1 WHERE (i%2)=
0ae0: 3d 31 3b 0a 7d 20 2d 73 65 6c 65 63 74 20 7b 0a  =1;.} -select {.
0af0: 20 20 53 45 4c 45 43 54 20 69 20 46 52 4f 4d 20    SELECT i FROM 
0b00: 74 31 20 57 48 45 52 45 20 28 69 25 32 29 3d 3d  t1 WHERE (i%2)==
0b10: 30 20 4f 52 44 45 52 20 42 59 20 68 20 44 45 53  0 ORDER BY h DES
0b20: 43 3b 0a 7d 20 2d 72 65 73 75 6c 74 20 7b 0a 20  C;.} -result {. 
0b30: 20 34 30 20 33 38 20 33 36 20 33 34 20 33 32 20   40 38 36 34 32 
0b40: 33 30 20 32 38 20 32 36 20 32 34 20 32 32 20 32  30 28 26 24 22 2
0b50: 30 20 31 38 20 31 36 20 31 34 20 31 32 20 31 30  0 18 16 14 12 10
0b60: 20 20 38 20 20 36 20 20 34 20 20 32 0a 7d 0a 64    8  6  4  2.}.d
0b70: 6f 5f 72 6f 6c 6c 62 61 63 6b 5f 74 65 73 74 20  o_rollback_test 
0b80: 33 2e 33 20 2d 73 65 74 75 70 20 7b 0a 20 20 42  3.3 -setup {.  B
0b90: 45 47 49 4e 3b 0a 20 20 20 20 44 45 4c 45 54 45  EGIN;.    DELETE
0ba0: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 28   FROM t1 WHERE (
0bb0: 69 25 34 29 3d 3d 31 3b 0a 20 20 20 20 53 41 56  i%4)==1;.    SAV
0bc0: 45 50 4f 49 4e 54 20 6f 6e 65 3b 0a 20 20 20 20  EPOINT one;.    
0bd0: 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 31    DELETE FROM t1
0be0: 20 57 48 45 52 45 20 28 69 25 32 29 3d 3d 31 3b   WHERE (i%2)==1;
0bf0: 0a 7d 20 2d 72 6f 6c 6c 62 61 63 6b 20 7b 0a 20  .} -rollback {. 
0c00: 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 20 6f 6e 65   ROLLBACK TO one
0c10: 3b 0a 7d 20 2d 73 65 6c 65 63 74 20 7b 0a 20 20  ;.} -select {.  
0c20: 53 45 4c 45 43 54 20 69 20 46 52 4f 4d 20 74 31  SELECT i FROM t1
0c30: 20 57 48 45 52 45 20 28 69 25 32 29 3d 3d 30 20   WHERE (i%2)==0 
0c40: 4f 52 44 45 52 20 42 59 20 68 20 44 45 53 43 3b  ORDER BY h DESC;
0c50: 0a 7d 20 2d 72 65 73 75 6c 74 20 7b 0a 20 20 34  .} -result {.  4
0c60: 30 20 33 38 20 33 36 20 33 34 20 33 32 20 33 30  0 38 36 34 32 30
0c70: 20 32 38 20 32 36 20 32 34 20 32 32 20 32 30 20   28 26 24 22 20 
0c80: 31 38 20 31 36 20 31 34 20 31 32 20 31 30 20 20  18 16 14 12 10  
0c90: 38 20 20 36 20 20 34 20 20 32 0a 7d 0a 0a 23 2d  8  6  4  2.}..#-
0ca0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0cb0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0cc0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0cd0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0ce0: 2d 2d 2d 0a 23 20 4e 6f 77 20 77 69 74 68 20 73  ---.# Now with s
0cf0: 6f 6d 65 20 69 6e 64 65 78 20 73 63 61 6e 73 20  ome index scans 
0d00: 74 68 61 74 20 66 65 61 74 75 72 65 20 6f 76 65  that feature ove
0d10: 72 66 6c 6f 77 20 6b 65 79 73 2e 0a 23 0a 73 65  rflow keys..#.se
0d20: 74 20 6c 65 61 64 65 72 20 5b 73 74 72 69 6e 67  t leader [string
0d30: 20 72 65 70 65 61 74 20 22 61 62 63 64 65 66 67   repeat "abcdefg
0d40: 68 69 6a 22 20 37 30 5d 0a 64 6f 5f 65 78 65 63  hij" 70].do_exec
0d50: 73 71 6c 5f 74 65 73 74 20 34 2e 31 20 7b 20 55  sql_test 4.1 { U
0d60: 50 44 41 54 45 20 74 31 20 53 45 54 20 68 20 3d  PDATE t1 SET h =
0d70: 20 24 6c 65 61 64 65 72 20 7c 7c 20 68 3b 20 7d   $leader || h; }
0d80: 0a 0a 64 6f 5f 65 71 70 5f 74 65 73 74 20 34 2e  ..do_eqp_test 4.
0d90: 32 20 7b 0a 20 20 53 45 4c 45 43 54 20 69 20 46  2 {.  SELECT i F
0da0: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 28 69 25  ROM t1 WHERE (i%
0db0: 32 29 3d 3d 30 20 4f 52 44 45 52 20 42 59 20 68  2)==0 ORDER BY h
0dc0: 20 41 53 43 3b 0a 7d 20 7b 30 20 30 20 30 20 7b   ASC;.} {0 0 0 {
0dd0: 53 43 41 4e 20 54 41 42 4c 45 20 74 31 20 55 53  SCAN TABLE t1 US
0de0: 49 4e 47 20 49 4e 44 45 58 20 69 31 7d 7d 0a 64  ING INDEX i1}}.d
0df0: 6f 5f 72 6f 6c 6c 62 61 63 6b 5f 74 65 73 74 20  o_rollback_test 
0e00: 34 2e 33 20 2d 73 65 74 75 70 20 7b 0a 20 20 42  4.3 -setup {.  B
0e10: 45 47 49 4e 3b 0a 20 20 20 20 44 45 4c 45 54 45  EGIN;.    DELETE
0e20: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 28   FROM t1 WHERE (
0e30: 69 25 32 29 3d 3d 31 3b 0a 7d 20 2d 73 65 6c 65  i%2)==1;.} -sele
0e40: 63 74 20 7b 0a 20 20 53 45 4c 45 43 54 20 69 20  ct {.  SELECT i 
0e50: 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 28 69  FROM t1 WHERE (i
0e60: 25 32 29 3d 3d 30 20 4f 52 44 45 52 20 42 59 20  %2)==0 ORDER BY 
0e70: 68 20 41 53 43 3b 0a 7d 20 2d 72 65 73 75 6c 74  h ASC;.} -result
0e80: 20 7b 0a 20 20 32 20 34 20 36 20 38 20 31 30 20   {.  2 4 6 8 10 
0e90: 31 32 20 31 34 20 31 36 20 31 38 20 32 30 20 32  12 14 16 18 20 2
0ea0: 32 20 32 34 20 32 36 20 32 38 20 33 30 20 33 32  2 24 26 28 30 32
0eb0: 20 33 34 20 33 36 20 33 38 20 34 30 0a 7d 0a 64   34 36 38 40.}.d
0ec0: 6f 5f 72 6f 6c 6c 62 61 63 6b 5f 74 65 73 74 20  o_rollback_test 
0ed0: 34 2e 34 20 2d 73 65 74 75 70 20 7b 0a 20 20 42  4.4 -setup {.  B
0ee0: 45 47 49 4e 3b 0a 20 20 20 20 44 45 4c 45 54 45  EGIN;.    DELETE
0ef0: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 28   FROM t1 WHERE (
0f00: 69 25 34 29 3d 3d 31 3b 0a 20 20 20 20 53 41 56  i%4)==1;.    SAV
0f10: 45 50 4f 49 4e 54 20 6f 6e 65 3b 0a 20 20 20 20  EPOINT one;.    
0f20: 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 31    DELETE FROM t1
0f30: 20 57 48 45 52 45 20 28 69 25 32 29 3d 3d 31 3b   WHERE (i%2)==1;
0f40: 0a 7d 20 2d 72 6f 6c 6c 62 61 63 6b 20 7b 0a 20  .} -rollback {. 
0f50: 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 20 6f 6e 65   ROLLBACK TO one
0f60: 3b 0a 7d 20 2d 73 65 6c 65 63 74 20 7b 0a 20 20  ;.} -select {.  
0f70: 53 45 4c 45 43 54 20 69 20 46 52 4f 4d 20 74 31  SELECT i FROM t1
0f80: 20 57 48 45 52 45 20 28 69 25 32 29 3d 3d 30 20   WHERE (i%2)==0 
0f90: 4f 52 44 45 52 20 42 59 20 68 20 41 53 43 3b 0a  ORDER BY h ASC;.
0fa0: 7d 20 2d 72 65 73 75 6c 74 20 7b 0a 20 20 32 20  } -result {.  2 
0fb0: 34 20 36 20 38 20 31 30 20 31 32 20 31 34 20 31  4 6 8 10 12 14 1
0fc0: 36 20 31 38 20 32 30 20 32 32 20 32 34 20 32 36  6 18 20 22 24 26
0fd0: 20 32 38 20 33 30 20 33 32 20 33 34 20 33 36 20   28 30 32 34 36 
0fe0: 33 38 20 34 30 0a 7d 0a 0a 66 69 6e 69 73 68 5f  38 40.}..finish_
0ff0: 74 65 73 74 0a 0a                                test..