/ Hex Artifact Content
Login

Artifact acc38fca8ee4851467705b1c2cfea64cd26667e5:


0000: 23 20 32 30 30 31 20 53 65 70 74 65 6d 62 65 72  # 2001 September
0010: 20 31 35 0a 23 0a 23 20 54 68 65 20 61 75 74 68   15.#.# The auth
0020: 6f 72 20 64 69 73 63 6c 61 69 6d 73 20 63 6f 70  or disclaims cop
0030: 79 72 69 67 68 74 20 74 6f 20 74 68 69 73 20 73  yright to this s
0040: 6f 75 72 63 65 20 63 6f 64 65 2e 20 20 49 6e 20  ource code.  In 
0050: 70 6c 61 63 65 20 6f 66 0a 23 20 61 20 6c 65 67  place of.# a leg
0060: 61 6c 20 6e 6f 74 69 63 65 2c 20 68 65 72 65 20  al notice, here 
0070: 69 73 20 61 20 62 6c 65 73 73 69 6e 67 3a 0a 23  is a blessing:.#
0080: 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20 64 6f  .#    May you do
0090: 20 67 6f 6f 64 20 61 6e 64 20 6e 6f 74 20 65 76   good and not ev
00a0: 69 6c 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75  il..#    May you
00b0: 20 66 69 6e 64 20 66 6f 72 67 69 76 65 6e 65 73   find forgivenes
00c0: 73 20 66 6f 72 20 79 6f 75 72 73 65 6c 66 20 61  s for yourself a
00d0: 6e 64 20 66 6f 72 67 69 76 65 20 6f 74 68 65 72  nd forgive other
00e0: 73 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20  s..#    May you 
00f0: 73 68 61 72 65 20 66 72 65 65 6c 79 2c 20 6e 65  share freely, ne
0100: 76 65 72 20 74 61 6b 69 6e 67 20 6d 6f 72 65 20  ver taking more 
0110: 74 68 61 6e 20 79 6f 75 20 67 69 76 65 2e 0a 23  than you give..#
0120: 0a 23 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .#**************
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 23 20 54 68 69 73  *********.# This
0170: 20 66 69 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 73   file implements
0180: 20 72 65 67 72 65 73 73 69 6f 6e 20 74 65 73 74   regression test
0190: 73 20 66 6f 72 20 53 51 4c 69 74 65 20 6c 69 62  s for SQLite lib
01a0: 72 61 72 79 2e 20 20 54 68 65 0a 23 20 66 6f 63  rary.  The.# foc
01b0: 75 73 20 6f 66 20 74 68 69 73 20 66 69 6c 65 20  us of this file 
01c0: 69 73 20 74 65 73 74 69 6e 67 20 74 68 65 20 44  is testing the D
01d0: 45 4c 45 54 45 20 46 52 4f 4d 20 73 74 61 74 65  ELETE FROM state
01e0: 6d 65 6e 74 2e 0a 23 0a 23 20 24 49 64 3a 20 64  ment..#.# $Id: d
01f0: 65 6c 65 74 65 2e 74 65 73 74 2c 76 20 31 2e 32  elete.test,v 1.2
0200: 36 20 32 30 30 39 2f 30 36 2f 30 35 20 31 37 3a  6 2009/06/05 17:
0210: 30 39 3a 31 32 20 64 72 68 20 45 78 70 20 24 0a  09:12 drh Exp $.
0220: 0a 73 65 74 20 74 65 73 74 64 69 72 20 5b 66 69  .set testdir [fi
0230: 6c 65 20 64 69 72 6e 61 6d 65 20 24 61 72 67 76  le dirname $argv
0240: 30 5d 0a 73 6f 75 72 63 65 20 24 74 65 73 74 64  0].source $testd
0250: 69 72 2f 74 65 73 74 65 72 2e 74 63 6c 0a 0a 23  ir/tester.tcl..#
0260: 20 54 72 79 20 74 6f 20 64 65 6c 65 74 65 20 66   Try to delete f
0270: 72 6f 6d 20 61 20 6e 6f 6e 2d 65 78 69 73 74 61  rom a non-exista
0280: 6e 74 20 74 61 62 6c 65 2e 0a 23 0a 64 6f 5f 74  nt table..#.do_t
0290: 65 73 74 20 64 65 6c 65 74 65 2d 31 2e 31 20 7b  est delete-1.1 {
02a0: 0a 20 20 73 65 74 20 76 20 5b 63 61 74 63 68 20  .  set v [catch 
02b0: 7b 65 78 65 63 73 71 6c 20 7b 44 45 4c 45 54 45  {execsql {DELETE
02c0: 20 46 52 4f 4d 20 74 65 73 74 31 7d 7d 20 6d 73   FROM test1}} ms
02d0: 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20 76 20 24  g].  lappend v $
02e0: 6d 73 67 0a 7d 20 7b 31 20 7b 6e 6f 20 73 75 63  msg.} {1 {no suc
02f0: 68 20 74 61 62 6c 65 3a 20 74 65 73 74 31 7d 7d  h table: test1}}
0300: 0a 0a 23 20 54 72 79 20 74 6f 20 64 65 6c 65 74  ..# Try to delet
0310: 65 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f 6d 61  e from sqlite_ma
0320: 73 74 65 72 0a 23 0a 64 6f 5f 74 65 73 74 20 64  ster.#.do_test d
0330: 65 6c 65 74 65 2d 32 2e 31 20 7b 0a 20 20 73 65  elete-2.1 {.  se
0340: 74 20 76 20 5b 63 61 74 63 68 20 7b 65 78 65 63  t v [catch {exec
0350: 73 71 6c 20 7b 44 45 4c 45 54 45 20 46 52 4f 4d  sql {DELETE FROM
0360: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 7d   sqlite_master}}
0370: 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20   msg].  lappend 
0380: 76 20 24 6d 73 67 0a 7d 20 7b 31 20 7b 74 61 62  v $msg.} {1 {tab
0390: 6c 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  le sqlite_master
03a0: 20 6d 61 79 20 6e 6f 74 20 62 65 20 6d 6f 64 69   may not be modi
03b0: 66 69 65 64 7d 7d 0a 0a 23 20 44 65 6c 65 74 65  fied}}..# Delete
03c0: 20 73 65 6c 65 63 74 65 64 20 65 6e 74 72 69 65   selected entrie
03d0: 73 20 66 72 6f 6d 20 61 20 74 61 62 6c 65 20 77  s from a table w
03e0: 69 74 68 20 61 6e 64 20 77 69 74 68 6f 75 74 20  ith and without 
03f0: 61 6e 20 69 6e 64 65 78 2e 0a 23 0a 64 6f 5f 74  an index..#.do_t
0400: 65 73 74 20 64 65 6c 65 74 65 2d 33 2e 31 2e 31  est delete-3.1.1
0410: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 43 52   {.  execsql {CR
0420: 45 41 54 45 20 54 41 42 4c 45 20 74 61 62 6c 65  EATE TABLE table
0430: 31 28 66 31 20 69 6e 74 2c 20 66 32 20 69 6e 74  1(f1 int, f2 int
0440: 29 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 49 4e  )}.  execsql {IN
0450: 53 45 52 54 20 49 4e 54 4f 20 74 61 62 6c 65 31  SERT INTO table1
0460: 20 56 41 4c 55 45 53 28 31 2c 32 29 7d 0a 20 20   VALUES(1,2)}.  
0470: 65 78 65 63 73 71 6c 20 7b 49 4e 53 45 52 54 20  execsql {INSERT 
0480: 49 4e 54 4f 20 74 61 62 6c 65 31 20 56 41 4c 55  INTO table1 VALU
0490: 45 53 28 32 2c 34 29 7d 0a 20 20 65 78 65 63 73  ES(2,4)}.  execs
04a0: 71 6c 20 7b 49 4e 53 45 52 54 20 49 4e 54 4f 20  ql {INSERT INTO 
04b0: 74 61 62 6c 65 31 20 56 41 4c 55 45 53 28 33 2c  table1 VALUES(3,
04c0: 38 29 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 49  8)}.  execsql {I
04d0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 61 62 6c 65  NSERT INTO table
04e0: 31 20 56 41 4c 55 45 53 28 34 2c 31 36 29 7d 0a  1 VALUES(4,16)}.
04f0: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
0500: 54 20 2a 20 46 52 4f 4d 20 74 61 62 6c 65 31 20  T * FROM table1 
0510: 4f 52 44 45 52 20 42 59 20 66 31 7d 0a 7d 20 7b  ORDER BY f1}.} {
0520: 31 20 32 20 32 20 34 20 33 20 38 20 34 20 31 36  1 2 2 4 3 8 4 16
0530: 7d 0a 64 6f 5f 74 65 73 74 20 64 65 6c 65 74 65  }.do_test delete
0540: 2d 33 2e 31 2e 32 20 7b 0a 20 20 65 78 65 63 73  -3.1.2 {.  execs
0550: 71 6c 20 7b 44 45 4c 45 54 45 20 46 52 4f 4d 20  ql {DELETE FROM 
0560: 74 61 62 6c 65 31 20 57 48 45 52 45 20 66 31 3d  table1 WHERE f1=
0570: 33 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20  3}.} {}.do_test 
0580: 64 65 6c 65 74 65 2d 33 2e 31 2e 33 20 7b 0a 20  delete-3.1.3 {. 
0590: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
05a0: 20 2a 20 46 52 4f 4d 20 74 61 62 6c 65 31 20 4f   * FROM table1 O
05b0: 52 44 45 52 20 42 59 20 66 31 7d 0a 7d 20 7b 31  RDER BY f1}.} {1
05c0: 20 32 20 32 20 34 20 34 20 31 36 7d 0a 64 6f 5f   2 2 4 4 16}.do_
05d0: 74 65 73 74 20 64 65 6c 65 74 65 2d 33 2e 31 2e  test delete-3.1.
05e0: 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 43  4 {.  execsql {C
05f0: 52 45 41 54 45 20 49 4e 44 45 58 20 69 6e 64 65  REATE INDEX inde
0600: 78 31 20 4f 4e 20 74 61 62 6c 65 31 28 66 31 29  x1 ON table1(f1)
0610: 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 50 52 41  }.  execsql {PRA
0620: 47 4d 41 20 63 6f 75 6e 74 5f 63 68 61 6e 67 65  GMA count_change
0630: 73 3d 6f 6e 7d 0a 20 20 69 66 63 61 70 61 62 6c  s=on}.  ifcapabl
0640: 65 20 65 78 70 6c 61 69 6e 20 7b 0a 20 20 20 20  e explain {.    
0650: 65 78 65 63 73 71 6c 20 7b 45 58 50 4c 41 49 4e  execsql {EXPLAIN
0660: 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 61 62   DELETE FROM tab
0670: 6c 65 31 20 57 48 45 52 45 20 66 31 3d 33 7d 0a  le1 WHERE f1=3}.
0680: 20 20 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 44    }.  execsql {D
0690: 45 4c 45 54 45 20 46 52 4f 4d 20 27 74 61 62 6c  ELETE FROM 'tabl
06a0: 65 31 27 20 57 48 45 52 45 20 66 31 3d 33 7d 0a  e1' WHERE f1=3}.
06b0: 7d 20 7b 30 7d 0a 64 6f 5f 74 65 73 74 20 64 65  } {0}.do_test de
06c0: 6c 65 74 65 2d 33 2e 31 2e 35 20 7b 0a 20 20 65  lete-3.1.5 {.  e
06d0: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a  xecsql {SELECT *
06e0: 20 46 52 4f 4d 20 74 61 62 6c 65 31 20 4f 52 44   FROM table1 ORD
06f0: 45 52 20 42 59 20 66 31 7d 0a 7d 20 7b 31 20 32  ER BY f1}.} {1 2
0700: 20 32 20 34 20 34 20 31 36 7d 0a 64 6f 5f 74 65   2 4 4 16}.do_te
0710: 73 74 20 64 65 6c 65 74 65 2d 33 2e 31 2e 36 2e  st delete-3.1.6.
0720: 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 44  1 {.  execsql {D
0730: 45 4c 45 54 45 20 46 52 4f 4d 20 74 61 62 6c 65  ELETE FROM table
0740: 31 20 57 48 45 52 45 20 66 31 3d 32 7d 0a 7d 20  1 WHERE f1=2}.} 
0750: 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 64 65 6c 65  {1}.do_test dele
0760: 74 65 2d 33 2e 31 2e 36 2e 32 20 7b 0a 20 20 64  te-3.1.6.2 {.  d
0770: 62 20 63 68 61 6e 67 65 73 0a 7d 20 31 0a 64 6f  b changes.} 1.do
0780: 5f 74 65 73 74 20 64 65 6c 65 74 65 2d 33 2e 31  _test delete-3.1
0790: 2e 37 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .7 {.  execsql {
07a0: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 61  SELECT * FROM ta
07b0: 62 6c 65 31 20 4f 52 44 45 52 20 42 59 20 66 31  ble1 ORDER BY f1
07c0: 7d 0a 7d 20 7b 31 20 32 20 34 20 31 36 7d 0a 69  }.} {1 2 4 16}.i
07d0: 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 20 64  ntegrity_check d
07e0: 65 6c 65 74 65 2d 33 2e 32 0a 0a 23 20 53 65 6d  elete-3.2..# Sem
07f0: 61 6e 74 69 63 20 65 72 72 6f 72 73 20 69 6e 20  antic errors in 
0800: 74 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65  the WHERE clause
0810: 0a 23 0a 64 6f 5f 74 65 73 74 20 64 65 6c 65 74  .#.do_test delet
0820: 65 2d 34 2e 31 20 7b 0a 20 20 65 78 65 63 73 71  e-4.1 {.  execsq
0830: 6c 20 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20  l {CREATE TABLE 
0840: 74 61 62 6c 65 32 28 66 31 20 69 6e 74 2c 20 66  table2(f1 int, f
0850: 32 20 69 6e 74 29 7d 0a 20 20 73 65 74 20 76 20  2 int)}.  set v 
0860: 5b 63 61 74 63 68 20 7b 65 78 65 63 73 71 6c 20  [catch {execsql 
0870: 7b 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 61 62  {DELETE FROM tab
0880: 6c 65 32 20 57 48 45 52 45 20 66 33 3d 35 7d 7d  le2 WHERE f3=5}}
0890: 20 6d 73 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20   msg].  lappend 
08a0: 76 20 24 6d 73 67 0a 7d 20 7b 31 20 7b 6e 6f 20  v $msg.} {1 {no 
08b0: 73 75 63 68 20 63 6f 6c 75 6d 6e 3a 20 66 33 7d  such column: f3}
08c0: 7d 0a 0a 64 6f 5f 74 65 73 74 20 64 65 6c 65 74  }..do_test delet
08d0: 65 2d 34 2e 32 20 7b 0a 20 20 73 65 74 20 76 20  e-4.2 {.  set v 
08e0: 5b 63 61 74 63 68 20 7b 65 78 65 63 73 71 6c 20  [catch {execsql 
08f0: 7b 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 61 62  {DELETE FROM tab
0900: 6c 65 32 20 57 48 45 52 45 20 78 79 7a 7a 79 28  le2 WHERE xyzzy(
0910: 66 31 2b 34 29 7d 7d 20 6d 73 67 5d 0a 20 20 6c  f1+4)}} msg].  l
0920: 61 70 70 65 6e 64 20 76 20 24 6d 73 67 0a 7d 20  append v $msg.} 
0930: 7b 31 20 7b 6e 6f 20 73 75 63 68 20 66 75 6e 63  {1 {no such func
0940: 74 69 6f 6e 3a 20 78 79 7a 7a 79 7d 7d 0a 69 6e  tion: xyzzy}}.in
0950: 74 65 67 72 69 74 79 5f 63 68 65 63 6b 20 64 65  tegrity_check de
0960: 6c 65 74 65 2d 34 2e 33 0a 0a 23 20 4c 6f 74 73  lete-4.3..# Lots
0970: 20 6f 66 20 64 65 6c 65 74 65 73 0a 23 0a 64 6f   of deletes.#.do
0980: 5f 74 65 73 74 20 64 65 6c 65 74 65 2d 35 2e 31  _test delete-5.1
0990: 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .1 {.  execsql {
09a0: 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 61 62 6c  DELETE FROM tabl
09b0: 65 31 7d 0a 7d 20 7b 32 7d 0a 64 6f 5f 74 65 73  e1}.} {2}.do_tes
09c0: 74 20 64 65 6c 65 74 65 2d 35 2e 31 2e 32 20 7b  t delete-5.1.2 {
09d0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
09e0: 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d  CT count(*) FROM
09f0: 20 74 61 62 6c 65 31 7d 0a 7d 20 7b 30 7d 0a 64   table1}.} {0}.d
0a00: 6f 5f 74 65 73 74 20 64 65 6c 65 74 65 2d 35 2e  o_test delete-5.
0a10: 32 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  2.1 {.  execsql 
0a20: 7b 42 45 47 49 4e 20 54 52 41 4e 53 41 43 54 49  {BEGIN TRANSACTI
0a30: 4f 4e 7d 0a 20 20 66 6f 72 20 7b 73 65 74 20 69  ON}.  for {set i
0a40: 20 31 7d 20 7b 24 69 3c 3d 32 30 30 7d 20 7b 69   1} {$i<=200} {i
0a50: 6e 63 72 20 69 7d 20 7b 0a 20 20 20 20 20 65 78  ncr i} {.     ex
0a60: 65 63 73 71 6c 20 22 49 4e 53 45 52 54 20 49 4e  ecsql "INSERT IN
0a70: 54 4f 20 74 61 62 6c 65 31 20 56 41 4c 55 45 53  TO table1 VALUES
0a80: 28 24 69 2c 5b 65 78 70 72 20 7b 24 69 2a 24 69  ($i,[expr {$i*$i
0a90: 7d 5d 29 22 0a 20 20 7d 0a 20 20 65 78 65 63 73  }])".  }.  execs
0aa0: 71 6c 20 7b 43 4f 4d 4d 49 54 7d 0a 20 20 65 78  ql {COMMIT}.  ex
0ab0: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 63 6f  ecsql {SELECT co
0ac0: 75 6e 74 28 2a 29 20 46 52 4f 4d 20 74 61 62 6c  unt(*) FROM tabl
0ad0: 65 31 7d 0a 7d 20 7b 32 30 30 7d 0a 64 6f 5f 74  e1}.} {200}.do_t
0ae0: 65 73 74 20 64 65 6c 65 74 65 2d 35 2e 32 2e 32  est delete-5.2.2
0af0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 44 45   {.  execsql {DE
0b00: 4c 45 54 45 20 46 52 4f 4d 20 74 61 62 6c 65 31  LETE FROM table1
0b10: 7d 0a 7d 20 7b 32 30 30 7d 0a 64 6f 5f 74 65 73  }.} {200}.do_tes
0b20: 74 20 64 65 6c 65 74 65 2d 35 2e 32 2e 33 20 7b  t delete-5.2.3 {
0b30: 0a 20 20 65 78 65 63 73 71 6c 20 7b 42 45 47 49  .  execsql {BEGI
0b40: 4e 20 54 52 41 4e 53 41 43 54 49 4f 4e 7d 0a 20  N TRANSACTION}. 
0b50: 20 66 6f 72 20 7b 73 65 74 20 69 20 31 7d 20 7b   for {set i 1} {
0b60: 24 69 3c 3d 32 30 30 7d 20 7b 69 6e 63 72 20 69  $i<=200} {incr i
0b70: 7d 20 7b 0a 20 20 20 20 20 65 78 65 63 73 71 6c  } {.     execsql
0b80: 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 61   "INSERT INTO ta
0b90: 62 6c 65 31 20 56 41 4c 55 45 53 28 24 69 2c 5b  ble1 VALUES($i,[
0ba0: 65 78 70 72 20 7b 24 69 2a 24 69 7d 5d 29 22 0a  expr {$i*$i}])".
0bb0: 20 20 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 43    }.  execsql {C
0bc0: 4f 4d 4d 49 54 7d 0a 20 20 65 78 65 63 73 71 6c  OMMIT}.  execsql
0bd0: 20 7b 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a   {SELECT count(*
0be0: 29 20 46 52 4f 4d 20 74 61 62 6c 65 31 7d 0a 7d  ) FROM table1}.}
0bf0: 20 7b 32 30 30 7d 0a 64 6f 5f 74 65 73 74 20 64   {200}.do_test d
0c00: 65 6c 65 74 65 2d 35 2e 32 2e 34 20 7b 0a 20 20  elete-5.2.4 {.  
0c10: 65 78 65 63 73 71 6c 20 7b 50 52 41 47 4d 41 20  execsql {PRAGMA 
0c20: 63 6f 75 6e 74 5f 63 68 61 6e 67 65 73 3d 6f 66  count_changes=of
0c30: 66 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 44 45  f}.  execsql {DE
0c40: 4c 45 54 45 20 46 52 4f 4d 20 74 61 62 6c 65 31  LETE FROM table1
0c50: 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 64  }.} {}.do_test d
0c60: 65 6c 65 74 65 2d 35 2e 32 2e 35 20 7b 0a 20 20  elete-5.2.5 {.  
0c70: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
0c80: 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20 74 61  count(*) FROM ta
0c90: 62 6c 65 31 7d 0a 7d 20 7b 30 7d 0a 64 6f 5f 74  ble1}.} {0}.do_t
0ca0: 65 73 74 20 64 65 6c 65 74 65 2d 35 2e 32 2e 36  est delete-5.2.6
0cb0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 42 45   {.  execsql {BE
0cc0: 47 49 4e 20 54 52 41 4e 53 41 43 54 49 4f 4e 7d  GIN TRANSACTION}
0cd0: 0a 20 20 66 6f 72 20 7b 73 65 74 20 69 20 31 7d  .  for {set i 1}
0ce0: 20 7b 24 69 3c 3d 32 30 30 7d 20 7b 69 6e 63 72   {$i<=200} {incr
0cf0: 20 69 7d 20 7b 0a 20 20 20 20 20 65 78 65 63 73   i} {.     execs
0d00: 71 6c 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20  ql "INSERT INTO 
0d10: 74 61 62 6c 65 31 20 56 41 4c 55 45 53 28 24 69  table1 VALUES($i
0d20: 2c 5b 65 78 70 72 20 7b 24 69 2a 24 69 7d 5d 29  ,[expr {$i*$i}])
0d30: 22 0a 20 20 7d 0a 20 20 65 78 65 63 73 71 6c 20  ".  }.  execsql 
0d40: 7b 43 4f 4d 4d 49 54 7d 0a 20 20 65 78 65 63 73  {COMMIT}.  execs
0d50: 71 6c 20 7b 53 45 4c 45 43 54 20 63 6f 75 6e 74  ql {SELECT count
0d60: 28 2a 29 20 46 52 4f 4d 20 74 61 62 6c 65 31 7d  (*) FROM table1}
0d70: 0a 7d 20 7b 32 30 30 7d 0a 64 6f 5f 74 65 73 74  .} {200}.do_test
0d80: 20 64 65 6c 65 74 65 2d 35 2e 33 20 7b 0a 20 20   delete-5.3 {.  
0d90: 66 6f 72 20 7b 73 65 74 20 69 20 31 7d 20 7b 24  for {set i 1} {$
0da0: 69 3c 3d 32 30 30 7d 20 7b 69 6e 63 72 20 69 20  i<=200} {incr i 
0db0: 34 7d 20 7b 0a 20 20 20 20 20 65 78 65 63 73 71  4} {.     execsq
0dc0: 6c 20 22 44 45 4c 45 54 45 20 46 52 4f 4d 20 74  l "DELETE FROM t
0dd0: 61 62 6c 65 31 20 57 48 45 52 45 20 66 31 3d 3d  able1 WHERE f1==
0de0: 24 69 22 0a 20 20 7d 0a 20 20 65 78 65 63 73 71  $i".  }.  execsq
0df0: 6c 20 7b 53 45 4c 45 43 54 20 63 6f 75 6e 74 28  l {SELECT count(
0e00: 2a 29 20 46 52 4f 4d 20 74 61 62 6c 65 31 7d 0a  *) FROM table1}.
0e10: 7d 20 7b 31 35 30 7d 0a 64 6f 5f 74 65 73 74 20  } {150}.do_test 
0e20: 64 65 6c 65 74 65 2d 35 2e 34 2e 31 20 7b 0a 20  delete-5.4.1 {. 
0e30: 20 65 78 65 63 73 71 6c 20 22 44 45 4c 45 54 45   execsql "DELETE
0e40: 20 46 52 4f 4d 20 74 61 62 6c 65 31 20 57 48 45   FROM table1 WHE
0e50: 52 45 20 66 31 3e 35 30 22 0a 20 20 64 62 20 63  RE f1>50".  db c
0e60: 68 61 6e 67 65 73 0a 7d 20 5b 64 62 20 6f 6e 65  hanges.} [db one
0e70: 20 7b 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a   {SELECT count(*
0e80: 29 20 46 52 4f 4d 20 74 61 62 6c 65 31 20 57 48  ) FROM table1 WH
0e90: 45 52 45 20 66 31 3e 35 30 7d 5d 0a 64 6f 5f 74  ERE f1>50}].do_t
0ea0: 65 73 74 20 64 65 6c 65 74 65 2d 35 2e 34 2e 32  est delete-5.4.2
0eb0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45   {.  execsql {SE
0ec0: 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52  LECT count(*) FR
0ed0: 4f 4d 20 74 61 62 6c 65 31 7d 0a 7d 20 7b 33 37  OM table1}.} {37
0ee0: 7d 0a 64 6f 5f 74 65 73 74 20 64 65 6c 65 74 65  }.do_test delete
0ef0: 2d 35 2e 35 20 7b 0a 20 20 66 6f 72 20 7b 73 65  -5.5 {.  for {se
0f00: 74 20 69 20 31 7d 20 7b 24 69 3c 3d 37 30 7d 20  t i 1} {$i<=70} 
0f10: 7b 69 6e 63 72 20 69 20 33 7d 20 7b 0a 20 20 20  {incr i 3} {.   
0f20: 20 20 65 78 65 63 73 71 6c 20 22 44 45 4c 45 54    execsql "DELET
0f30: 45 20 46 52 4f 4d 20 74 61 62 6c 65 31 20 57 48  E FROM table1 WH
0f40: 45 52 45 20 66 31 3d 3d 24 69 22 0a 20 20 7d 0a  ERE f1==$i".  }.
0f50: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
0f60: 54 20 66 31 20 46 52 4f 4d 20 74 61 62 6c 65 31  T f1 FROM table1
0f70: 20 4f 52 44 45 52 20 42 59 20 66 31 7d 0a 7d 20   ORDER BY f1}.} 
0f80: 7b 32 20 33 20 36 20 38 20 31 31 20 31 32 20 31  {2 3 6 8 11 12 1
0f90: 34 20 31 35 20 31 38 20 32 30 20 32 33 20 32 34  4 15 18 20 23 24
0fa0: 20 32 36 20 32 37 20 33 30 20 33 32 20 33 35 20   26 27 30 32 35 
0fb0: 33 36 20 33 38 20 33 39 20 34 32 20 34 34 20 34  36 38 39 42 44 4
0fc0: 37 20 34 38 20 35 30 7d 0a 64 6f 5f 74 65 73 74  7 48 50}.do_test
0fd0: 20 64 65 6c 65 74 65 2d 35 2e 36 20 7b 0a 20 20   delete-5.6 {.  
0fe0: 66 6f 72 20 7b 73 65 74 20 69 20 31 7d 20 7b 24  for {set i 1} {$
0ff0: 69 3c 34 30 7d 20 7b 69 6e 63 72 20 69 7d 20 7b  i<40} {incr i} {
1000: 0a 20 20 20 20 20 65 78 65 63 73 71 6c 20 22 44  .     execsql "D
1010: 45 4c 45 54 45 20 46 52 4f 4d 20 74 61 62 6c 65  ELETE FROM table
1020: 31 20 57 48 45 52 45 20 66 31 3d 3d 24 69 22 0a  1 WHERE f1==$i".
1030: 20 20 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 53    }.  execsql {S
1040: 45 4c 45 43 54 20 66 31 20 46 52 4f 4d 20 74 61  ELECT f1 FROM ta
1050: 62 6c 65 31 20 4f 52 44 45 52 20 42 59 20 66 31  ble1 ORDER BY f1
1060: 7d 0a 7d 20 7b 34 32 20 34 34 20 34 37 20 34 38  }.} {42 44 47 48
1070: 20 35 30 7d 0a 64 6f 5f 74 65 73 74 20 64 65 6c   50}.do_test del
1080: 65 74 65 2d 35 2e 37 20 7b 0a 20 20 65 78 65 63  ete-5.7 {.  exec
1090: 73 71 6c 20 22 44 45 4c 45 54 45 20 46 52 4f 4d  sql "DELETE FROM
10a0: 20 74 61 62 6c 65 31 20 57 48 45 52 45 20 66 31   table1 WHERE f1
10b0: 21 3d 34 38 22 0a 20 20 65 78 65 63 73 71 6c 20  !=48".  execsql 
10c0: 7b 53 45 4c 45 43 54 20 66 31 20 46 52 4f 4d 20  {SELECT f1 FROM 
10d0: 74 61 62 6c 65 31 20 4f 52 44 45 52 20 42 59 20  table1 ORDER BY 
10e0: 66 31 7d 0a 7d 20 7b 34 38 7d 0a 69 6e 74 65 67  f1}.} {48}.integ
10f0: 72 69 74 79 5f 63 68 65 63 6b 20 64 65 6c 65 74  rity_check delet
1100: 65 2d 35 2e 38 0a 0a 0a 23 20 44 65 6c 65 74 65  e-5.8...# Delete
1110: 20 6c 61 72 67 65 20 71 75 61 6e 74 69 74 69 65   large quantitie
1120: 73 20 6f 66 20 64 61 74 61 2e 20 20 57 65 20 77  s of data.  We w
1130: 61 6e 74 20 74 6f 20 74 65 73 74 20 74 68 65 20  ant to test the 
1140: 4c 69 73 74 20 6f 76 65 72 66 6c 6f 77 0a 23 20  List overflow.# 
1150: 6d 65 63 68 61 6e 69 73 6d 20 69 6e 20 74 68 65  mechanism in the
1160: 20 76 64 62 65 2e 0a 23 0a 64 6f 5f 74 65 73 74   vdbe..#.do_test
1170: 20 64 65 6c 65 74 65 2d 36 2e 31 20 7b 0a 20 20   delete-6.1 {.  
1180: 65 78 65 63 73 71 6c 20 7b 42 45 47 49 4e 3b 20  execsql {BEGIN; 
1190: 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 61 62 6c  DELETE FROM tabl
11a0: 65 31 7d 0a 20 20 66 6f 72 20 7b 73 65 74 20 69  e1}.  for {set i
11b0: 20 31 7d 20 7b 24 69 3c 3d 33 30 30 30 7d 20 7b   1} {$i<=3000} {
11c0: 69 6e 63 72 20 69 7d 20 7b 0a 20 20 20 20 65 78  incr i} {.    ex
11d0: 65 63 73 71 6c 20 22 49 4e 53 45 52 54 20 49 4e  ecsql "INSERT IN
11e0: 54 4f 20 74 61 62 6c 65 31 20 56 41 4c 55 45 53  TO table1 VALUES
11f0: 28 24 69 2c 5b 65 78 70 72 20 7b 24 69 2a 24 69  ($i,[expr {$i*$i
1200: 7d 5d 29 22 0a 20 20 7d 0a 20 20 65 78 65 63 73  }])".  }.  execs
1210: 71 6c 20 7b 44 45 4c 45 54 45 20 46 52 4f 4d 20  ql {DELETE FROM 
1220: 74 61 62 6c 65 32 7d 0a 20 20 66 6f 72 20 7b 73  table2}.  for {s
1230: 65 74 20 69 20 31 7d 20 7b 24 69 3c 3d 33 30 30  et i 1} {$i<=300
1240: 30 7d 20 7b 69 6e 63 72 20 69 7d 20 7b 0a 20 20  0} {incr i} {.  
1250: 20 20 65 78 65 63 73 71 6c 20 22 49 4e 53 45 52    execsql "INSER
1260: 54 20 49 4e 54 4f 20 74 61 62 6c 65 32 20 56 41  T INTO table2 VA
1270: 4c 55 45 53 28 24 69 2c 5b 65 78 70 72 20 7b 24  LUES($i,[expr {$
1280: 69 2a 24 69 7d 5d 29 22 0a 20 20 7d 0a 20 20 65  i*$i}])".  }.  e
1290: 78 65 63 73 71 6c 20 7b 43 4f 4d 4d 49 54 7d 0a  xecsql {COMMIT}.
12a0: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
12b0: 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20  T count(*) FROM 
12c0: 74 61 62 6c 65 31 7d 0a 7d 20 7b 33 30 30 30 7d  table1}.} {3000}
12d0: 0a 64 6f 5f 74 65 73 74 20 64 65 6c 65 74 65 2d  .do_test delete-
12e0: 36 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  6.2 {.  execsql 
12f0: 7b 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29  {SELECT count(*)
1300: 20 46 52 4f 4d 20 74 61 62 6c 65 32 7d 0a 7d 20   FROM table2}.} 
1310: 7b 33 30 30 30 7d 0a 64 6f 5f 74 65 73 74 20 64  {3000}.do_test d
1320: 65 6c 65 74 65 2d 36 2e 33 20 7b 0a 20 20 65 78  elete-6.3 {.  ex
1330: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 66 31  ecsql {SELECT f1
1340: 20 46 52 4f 4d 20 74 61 62 6c 65 31 20 57 48 45   FROM table1 WHE
1350: 52 45 20 66 31 3c 31 30 20 4f 52 44 45 52 20 42  RE f1<10 ORDER B
1360: 59 20 66 31 7d 0a 7d 20 7b 31 20 32 20 33 20 34  Y f1}.} {1 2 3 4
1370: 20 35 20 36 20 37 20 38 20 39 7d 0a 64 6f 5f 74   5 6 7 8 9}.do_t
1380: 65 73 74 20 64 65 6c 65 74 65 2d 36 2e 34 20 7b  est delete-6.4 {
1390: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
13a0: 43 54 20 66 31 20 46 52 4f 4d 20 74 61 62 6c 65  CT f1 FROM table
13b0: 32 20 57 48 45 52 45 20 66 31 3c 31 30 20 4f 52  2 WHERE f1<10 OR
13c0: 44 45 52 20 42 59 20 66 31 7d 0a 7d 20 7b 31 20  DER BY f1}.} {1 
13d0: 32 20 33 20 34 20 35 20 36 20 37 20 38 20 39 7d  2 3 4 5 6 7 8 9}
13e0: 0a 64 6f 5f 74 65 73 74 20 64 65 6c 65 74 65 2d  .do_test delete-
13f0: 36 2e 35 2e 31 20 7b 0a 20 20 65 78 65 63 73 71  6.5.1 {.  execsq
1400: 6c 20 7b 44 45 4c 45 54 45 20 46 52 4f 4d 20 74  l {DELETE FROM t
1410: 61 62 6c 65 31 20 57 48 45 52 45 20 66 31 3e 37  able1 WHERE f1>7
1420: 7d 0a 20 20 64 62 20 63 68 61 6e 67 65 73 0a 7d  }.  db changes.}
1430: 20 7b 32 39 39 33 7d 0a 64 6f 5f 74 65 73 74 20   {2993}.do_test 
1440: 64 65 6c 65 74 65 2d 36 2e 35 2e 32 20 7b 0a 20  delete-6.5.2 {. 
1450: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
1460: 20 66 31 20 46 52 4f 4d 20 74 61 62 6c 65 31 20   f1 FROM table1 
1470: 4f 52 44 45 52 20 42 59 20 66 31 7d 0a 7d 20 7b  ORDER BY f1}.} {
1480: 31 20 32 20 33 20 34 20 35 20 36 20 37 7d 0a 64  1 2 3 4 5 6 7}.d
1490: 6f 5f 74 65 73 74 20 64 65 6c 65 74 65 2d 36 2e  o_test delete-6.
14a0: 36 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 44  6 {.  execsql {D
14b0: 45 4c 45 54 45 20 46 52 4f 4d 20 74 61 62 6c 65  ELETE FROM table
14c0: 32 20 57 48 45 52 45 20 66 31 3e 37 7d 0a 20 20  2 WHERE f1>7}.  
14d0: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
14e0: 66 31 20 46 52 4f 4d 20 74 61 62 6c 65 32 20 4f  f1 FROM table2 O
14f0: 52 44 45 52 20 42 59 20 66 31 7d 0a 7d 20 7b 31  RDER BY f1}.} {1
1500: 20 32 20 33 20 34 20 35 20 36 20 37 7d 0a 64 6f   2 3 4 5 6 7}.do
1510: 5f 74 65 73 74 20 64 65 6c 65 74 65 2d 36 2e 37  _test delete-6.7
1520: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 44 45   {.  execsql {DE
1530: 4c 45 54 45 20 46 52 4f 4d 20 74 61 62 6c 65 31  LETE FROM table1
1540: 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  }.  execsql {SEL
1550: 45 43 54 20 66 31 20 46 52 4f 4d 20 74 61 62 6c  ECT f1 FROM tabl
1560: 65 31 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74  e1}.} {}.do_test
1570: 20 64 65 6c 65 74 65 2d 36 2e 38 20 7b 0a 20 20   delete-6.8 {.  
1580: 65 78 65 63 73 71 6c 20 7b 49 4e 53 45 52 54 20  execsql {INSERT 
1590: 49 4e 54 4f 20 74 61 62 6c 65 31 20 56 41 4c 55  INTO table1 VALU
15a0: 45 53 28 32 2c 33 29 7d 0a 20 20 65 78 65 63 73  ES(2,3)}.  execs
15b0: 71 6c 20 7b 53 45 4c 45 43 54 20 66 31 20 46 52  ql {SELECT f1 FR
15c0: 4f 4d 20 74 61 62 6c 65 31 7d 0a 7d 20 7b 32 7d  OM table1}.} {2}
15d0: 0a 64 6f 5f 74 65 73 74 20 64 65 6c 65 74 65 2d  .do_test delete-
15e0: 36 2e 39 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  6.9 {.  execsql 
15f0: 7b 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 61 62  {DELETE FROM tab
1600: 6c 65 32 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b  le2}.  execsql {
1610: 53 45 4c 45 43 54 20 66 31 20 46 52 4f 4d 20 74  SELECT f1 FROM t
1620: 61 62 6c 65 32 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74  able2}.} {}.do_t
1630: 65 73 74 20 64 65 6c 65 74 65 2d 36 2e 31 30 20  est delete-6.10 
1640: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 49 4e 53  {.  execsql {INS
1650: 45 52 54 20 49 4e 54 4f 20 74 61 62 6c 65 32 20  ERT INTO table2 
1660: 56 41 4c 55 45 53 28 32 2c 33 29 7d 0a 20 20 65  VALUES(2,3)}.  e
1670: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 66  xecsql {SELECT f
1680: 31 20 46 52 4f 4d 20 74 61 62 6c 65 32 7d 0a 7d  1 FROM table2}.}
1690: 20 7b 32 7d 0a 69 6e 74 65 67 72 69 74 79 5f 63   {2}.integrity_c
16a0: 68 65 63 6b 20 64 65 6c 65 74 65 2d 36 2e 31 31  heck delete-6.11
16b0: 0a 0a 64 6f 5f 74 65 73 74 20 64 65 6c 65 74 65  ..do_test delete
16c0: 2d 37 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c  -7.1 {.  execsql
16d0: 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41   {.    CREATE TA
16e0: 42 4c 45 20 74 33 28 61 29 3b 0a 20 20 20 20 49  BLE t3(a);.    I
16f0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 33 20 56 41  NSERT INTO t3 VA
1700: 4c 55 45 53 28 31 29 3b 0a 20 20 20 20 49 4e 53  LUES(1);.    INS
1710: 45 52 54 20 49 4e 54 4f 20 74 33 20 53 45 4c 45  ERT INTO t3 SELE
1720: 43 54 20 61 2b 31 20 46 52 4f 4d 20 74 33 3b 0a  CT a+1 FROM t3;.
1730: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
1740: 74 33 20 53 45 4c 45 43 54 20 61 2b 32 20 46 52  t3 SELECT a+2 FR
1750: 4f 4d 20 74 33 3b 0a 20 20 20 20 53 45 4c 45 43  OM t3;.    SELEC
1760: 54 20 2a 20 46 52 4f 4d 20 74 33 3b 0a 20 20 7d  T * FROM t3;.  }
1770: 0a 7d 20 7b 31 20 32 20 33 20 34 7d 0a 69 66 63  .} {1 2 3 4}.ifc
1780: 61 70 61 62 6c 65 20 7b 74 72 69 67 67 65 72 7d  apable {trigger}
1790: 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 64 65 6c   {.  do_test del
17a0: 65 74 65 2d 37 2e 32 20 7b 0a 20 20 20 20 65 78  ete-7.2 {.    ex
17b0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 43 52  ecsql {.      CR
17c0: 45 41 54 45 20 54 41 42 4c 45 20 63 6e 74 28 64  EATE TABLE cnt(d
17d0: 65 6c 29 3b 0a 20 20 20 20 20 20 49 4e 53 45 52  el);.      INSER
17e0: 54 20 49 4e 54 4f 20 63 6e 74 20 56 41 4c 55 45  T INTO cnt VALUE
17f0: 53 28 30 29 3b 0a 20 20 20 20 20 20 43 52 45 41  S(0);.      CREA
1800: 54 45 20 54 52 49 47 47 45 52 20 72 31 20 41 46  TE TRIGGER r1 AF
1810: 54 45 52 20 44 45 4c 45 54 45 20 4f 4e 20 74 33  TER DELETE ON t3
1820: 20 46 4f 52 20 45 41 43 48 20 52 4f 57 20 42 45   FOR EACH ROW BE
1830: 47 49 4e 0a 20 20 20 20 20 20 20 20 55 50 44 41  GIN.        UPDA
1840: 54 45 20 63 6e 74 20 53 45 54 20 64 65 6c 3d 64  TE cnt SET del=d
1850: 65 6c 2b 31 3b 0a 20 20 20 20 20 20 45 4e 44 3b  el+1;.      END;
1860: 0a 20 20 20 20 20 20 44 45 4c 45 54 45 20 46 52  .      DELETE FR
1870: 4f 4d 20 74 33 20 57 48 45 52 45 20 61 3c 32 3b  OM t3 WHERE a<2;
1880: 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20 2a 20  .      SELECT * 
1890: 46 52 4f 4d 20 74 33 3b 0a 20 20 20 20 7d 0a 20  FROM t3;.    }. 
18a0: 20 7d 20 7b 32 20 33 20 34 7d 0a 20 20 64 6f 5f   } {2 3 4}.  do_
18b0: 74 65 73 74 20 64 65 6c 65 74 65 2d 37 2e 33 20  test delete-7.3 
18c0: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a  {.    execsql {.
18d0: 20 20 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46        SELECT * F
18e0: 52 4f 4d 20 63 6e 74 3b 0a 20 20 20 20 7d 0a 20  ROM cnt;.    }. 
18f0: 20 7d 20 7b 31 7d 0a 20 20 64 6f 5f 74 65 73 74   } {1}.  do_test
1900: 20 64 65 6c 65 74 65 2d 37 2e 34 20 7b 0a 20 20   delete-7.4 {.  
1910: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
1920: 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 33    DELETE FROM t3
1930: 3b 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20 2a  ;.      SELECT *
1940: 20 46 52 4f 4d 20 74 33 3b 0a 20 20 20 20 7d 0a   FROM t3;.    }.
1950: 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f 74 65 73 74    } {}.  do_test
1960: 20 64 65 6c 65 74 65 2d 37 2e 35 20 7b 0a 20 20   delete-7.5 {.  
1970: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
1980: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
1990: 63 6e 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b  cnt;.    }.  } {
19a0: 34 7d 0a 20 20 64 6f 5f 74 65 73 74 20 64 65 6c  4}.  do_test del
19b0: 65 74 65 2d 37 2e 36 20 7b 0a 20 20 20 20 65 78  ete-7.6 {.    ex
19c0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 49 4e  ecsql {.      IN
19d0: 53 45 52 54 20 49 4e 54 4f 20 74 33 20 56 41 4c  SERT INTO t3 VAL
19e0: 55 45 53 28 31 29 3b 0a 20 20 20 20 20 20 49 4e  UES(1);.      IN
19f0: 53 45 52 54 20 49 4e 54 4f 20 74 33 20 53 45 4c  SERT INTO t3 SEL
1a00: 45 43 54 20 61 2b 31 20 46 52 4f 4d 20 74 33 3b  ECT a+1 FROM t3;
1a10: 0a 20 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e  .      INSERT IN
1a20: 54 4f 20 74 33 20 53 45 4c 45 43 54 20 61 2b 32  TO t3 SELECT a+2
1a30: 20 46 52 4f 4d 20 74 33 3b 0a 20 20 20 20 20 20   FROM t3;.      
1a40: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 34 20  CREATE TABLE t4 
1a50: 41 53 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  AS SELECT * FROM
1a60: 20 74 33 3b 0a 20 20 20 20 20 20 50 52 41 47 4d   t3;.      PRAGM
1a70: 41 20 63 6f 75 6e 74 5f 63 68 61 6e 67 65 73 3d  A count_changes=
1a80: 4f 4e 3b 0a 20 20 20 20 20 20 44 45 4c 45 54 45  ON;.      DELETE
1a90: 20 46 52 4f 4d 20 74 33 3b 0a 20 20 20 20 20 20   FROM t3;.      
1aa0: 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 34 3b 0a  DELETE FROM t4;.
1ab0: 20 20 20 20 7d 0a 20 20 7d 20 7b 34 20 34 7d 0a      }.  } {4 4}.
1ac0: 7d 20 3b 23 20 65 6e 64 69 66 20 74 72 69 67 67  } ;# endif trigg
1ad0: 65 72 0a 69 66 63 61 70 61 62 6c 65 20 7b 21 74  er.ifcapable {!t
1ae0: 72 69 67 67 65 72 7d 20 7b 0a 20 20 65 78 65 63  rigger} {.  exec
1af0: 73 71 6c 20 7b 44 45 4c 45 54 45 20 46 52 4f 4d  sql {DELETE FROM
1b00: 20 74 33 7d 0a 7d 0a 69 6e 74 65 67 72 69 74 79   t3}.}.integrity
1b10: 5f 63 68 65 63 6b 20 64 65 6c 65 74 65 2d 37 2e  _check delete-7.
1b20: 37 0a 0a 23 20 4d 61 6b 65 20 73 75 72 65 20 65  7..# Make sure e
1b30: 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 61 72  rror messages ar
1b40: 65 20 63 6f 6e 73 69 73 74 65 6e 74 20 77 68 65  e consistent whe
1b50: 6e 20 61 74 74 65 6d 70 74 69 6e 67 20 74 6f 20  n attempting to 
1b60: 64 65 6c 65 74 65 0a 23 20 66 72 6f 6d 20 61 20  delete.# from a 
1b70: 72 65 61 64 2d 6f 6e 6c 79 20 64 61 74 61 62 61  read-only databa
1b80: 73 65 2e 20 20 54 69 63 6b 65 74 20 23 33 30 34  se.  Ticket #304
1b90: 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 64 65 6c 65  ..#.do_test dele
1ba0: 74 65 2d 38 2e 30 20 7b 0a 20 20 65 78 65 63 73  te-8.0 {.  execs
1bb0: 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20  ql {.    PRAGMA 
1bc0: 63 6f 75 6e 74 5f 63 68 61 6e 67 65 73 3d 4f 46  count_changes=OF
1bd0: 46 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  F;.    INSERT IN
1be0: 54 4f 20 74 33 20 56 41 4c 55 45 53 28 31 32 33  TO t3 VALUES(123
1bf0: 29 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20  );.    SELECT * 
1c00: 46 52 4f 4d 20 74 33 3b 0a 20 20 7d 0a 7d 20 7b  FROM t3;.  }.} {
1c10: 31 32 33 7d 0a 64 62 20 63 6c 6f 73 65 0a 63 61  123}.db close.ca
1c20: 74 63 68 20 7b 66 6f 72 63 65 64 65 6c 65 74 65  tch {forcedelete
1c30: 20 74 65 73 74 2e 64 62 2d 6a 6f 75 72 6e 61 6c   test.db-journal
1c40: 7d 0a 63 61 74 63 68 20 7b 66 69 6c 65 20 61 74  }.catch {file at
1c50: 74 72 69 62 75 74 65 73 20 74 65 73 74 2e 64 62  tributes test.db
1c60: 20 2d 70 65 72 6d 69 73 73 69 6f 6e 73 20 30 34   -permissions 04
1c70: 34 34 7d 0a 63 61 74 63 68 20 7b 66 69 6c 65 20  44}.catch {file 
1c80: 61 74 74 72 69 62 75 74 65 73 20 74 65 73 74 2e  attributes test.
1c90: 64 62 20 2d 72 65 61 64 6f 6e 6c 79 20 31 7d 0a  db -readonly 1}.
1ca0: 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e  sqlite3 db test.
1cb0: 64 62 0a 73 65 74 20 3a 3a 44 42 20 5b 73 71 6c  db.set ::DB [sql
1cc0: 69 74 65 33 5f 63 6f 6e 6e 65 63 74 69 6f 6e 5f  ite3_connection_
1cd0: 70 6f 69 6e 74 65 72 20 64 62 5d 0a 64 6f 5f 74  pointer db].do_t
1ce0: 65 73 74 20 64 65 6c 65 74 65 2d 38 2e 31 20 7b  est delete-8.1 {
1cf0: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20  .  catchsql {.  
1d00: 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 33    DELETE FROM t3
1d10: 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b 61 74 74 65  ;.  }.} {1 {atte
1d20: 6d 70 74 20 74 6f 20 77 72 69 74 65 20 61 20 72  mpt to write a r
1d30: 65 61 64 6f 6e 6c 79 20 64 61 74 61 62 61 73 65  eadonly database
1d40: 7d 7d 0a 64 6f 5f 74 65 73 74 20 64 65 6c 65 74  }}.do_test delet
1d50: 65 2d 38 2e 32 20 7b 0a 20 20 65 78 65 63 73 71  e-8.2 {.  execsq
1d60: 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  l {SELECT * FROM
1d70: 20 74 33 7d 20 0a 7d 20 7b 31 32 33 7d 0a 64 6f   t3} .} {123}.do
1d80: 5f 74 65 73 74 20 64 65 6c 65 74 65 2d 38 2e 33  _test delete-8.3
1d90: 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a   {.  catchsql {.
1da0: 20 20 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20      DELETE FROM 
1db0: 74 33 20 57 48 45 52 45 20 31 3b 0a 20 20 7d 0a  t3 WHERE 1;.  }.
1dc0: 7d 20 7b 31 20 7b 61 74 74 65 6d 70 74 20 74 6f  } {1 {attempt to
1dd0: 20 77 72 69 74 65 20 61 20 72 65 61 64 6f 6e 6c   write a readonl
1de0: 79 20 64 61 74 61 62 61 73 65 7d 7d 0a 64 6f 5f  y database}}.do_
1df0: 74 65 73 74 20 64 65 6c 65 74 65 2d 38 2e 34 20  test delete-8.4 
1e00: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  {.  execsql {SEL
1e10: 45 43 54 20 2a 20 46 52 4f 4d 20 74 33 7d 20 0a  ECT * FROM t3} .
1e20: 7d 20 7b 31 32 33 7d 0a 0a 23 20 55 70 64 61 74  } {123}..# Updat
1e30: 65 20 66 6f 72 20 76 33 3a 20 49 6e 20 76 32 20  e for v3: In v2 
1e40: 74 68 65 20 44 45 4c 45 54 45 20 73 74 61 74 65  the DELETE state
1e50: 6d 65 6e 74 20 77 6f 75 6c 64 20 73 75 63 63 65  ment would succe
1e60: 65 64 20 62 65 63 61 75 73 65 20 6e 6f 0a 23 20  ed because no.# 
1e70: 64 61 74 61 62 61 73 65 20 77 72 69 74 65 73 20  database writes 
1e80: 61 63 74 75 61 6c 6c 79 20 6f 63 63 75 72 2e 20  actually occur. 
1e90: 56 65 72 73 69 6f 6e 20 33 20 72 65 66 75 73 65  Version 3 refuse
1ea0: 73 20 74 6f 20 6f 70 65 6e 20 61 20 74 72 61 6e  s to open a tran
1eb0: 73 61 63 74 69 6f 6e 0a 23 20 6f 6e 20 61 20 72  saction.# on a r
1ec0: 65 61 64 2d 6f 6e 6c 79 20 66 69 6c 65 2c 20 73  ead-only file, s
1ed0: 6f 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20  o the statement 
1ee0: 66 61 69 6c 73 2e 0a 64 6f 5f 74 65 73 74 20 64  fails..do_test d
1ef0: 65 6c 65 74 65 2d 38 2e 35 20 7b 0a 20 20 63 61  elete-8.5 {.  ca
1f00: 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 44 45 4c  tchsql {.    DEL
1f10: 45 54 45 20 46 52 4f 4d 20 74 33 20 57 48 45 52  ETE FROM t3 WHER
1f20: 45 20 61 3c 31 30 30 3b 0a 20 20 7d 0a 23 20 76  E a<100;.  }.# v
1f30: 32 20 72 65 73 75 6c 74 3a 20 7b 30 20 7b 7d 7d  2 result: {0 {}}
1f40: 0a 7d 20 7b 31 20 7b 61 74 74 65 6d 70 74 20 74  .} {1 {attempt t
1f50: 6f 20 77 72 69 74 65 20 61 20 72 65 61 64 6f 6e  o write a readon
1f60: 6c 79 20 64 61 74 61 62 61 73 65 7d 7d 0a 64 6f  ly database}}.do
1f70: 5f 74 65 73 74 20 64 65 6c 65 74 65 2d 38 2e 36  _test delete-8.6
1f80: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45   {.  execsql {SE
1f90: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 33 7d 0a  LECT * FROM t3}.
1fa0: 7d 20 7b 31 32 33 7d 0a 69 6e 74 65 67 72 69 74  } {123}.integrit
1fb0: 79 5f 63 68 65 63 6b 20 64 65 6c 65 74 65 2d 38  y_check delete-8
1fc0: 2e 37 0a 0a 23 20 4e 65 65 64 20 74 6f 20 64 6f  .7..# Need to do
1fd0: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 66   the following f
1fe0: 6f 72 20 74 63 6c 20 38 2e 35 20 6f 6e 20 6d 61  or tcl 8.5 on ma
1ff0: 63 2e 20 4f 6e 20 74 68 61 74 20 63 6f 6e 66 69  c. On that confi
2000: 67 75 72 61 74 69 6f 6e 2c 20 74 68 65 0a 23 20  guration, the.# 
2010: 2d 72 65 61 64 6f 6e 6c 79 20 66 6c 61 67 20 69  -readonly flag i
2020: 73 20 74 61 6b 65 6e 20 73 6f 20 73 65 72 69 6f  s taken so serio
2030: 75 73 6c 79 20 74 68 61 74 20 61 20 73 75 62 73  usly that a subs
2040: 65 71 75 65 6e 74 20 5b 66 6f 72 63 65 64 65 6c  equent [forcedel
2050: 65 74 65 5d 0a 23 20 28 72 65 71 75 69 72 65 64  ete].# (required
2060: 20 62 65 66 6f 72 65 20 74 68 65 20 6e 65 78 74   before the next
2070: 20 74 65 73 74 20 66 69 6c 65 20 63 61 6e 20 62   test file can b
2080: 65 20 65 78 65 63 75 74 65 64 29 20 77 69 6c 6c  e executed) will
2090: 20 66 61 69 6c 2e 0a 23 0a 63 61 74 63 68 20 7b   fail..#.catch {
20a0: 66 69 6c 65 20 61 74 74 72 69 62 75 74 65 73 20  file attributes 
20b0: 74 65 73 74 2e 64 62 20 2d 72 65 61 64 6f 6e 6c  test.db -readonl
20c0: 79 20 30 7d 0a 64 62 20 63 6c 6f 73 65 0a 66 6f  y 0}.db close.fo
20d0: 72 63 65 64 65 6c 65 74 65 20 74 65 73 74 2e 64  rcedelete test.d
20e0: 62 20 74 65 73 74 2e 64 62 2d 6a 6f 75 72 6e 61  b test.db-journa
20f0: 6c 0a 0a 23 20 54 68 65 20 66 6f 6c 6c 6f 77 69  l..# The followi
2100: 6e 67 20 74 65 73 74 73 20 76 65 72 69 66 79 20  ng tests verify 
2110: 74 68 61 74 20 53 51 4c 69 74 65 20 63 6f 72 72  that SQLite corr
2120: 65 63 74 6c 79 20 68 61 6e 64 6c 65 73 20 74 68  ectly handles th
2130: 65 20 63 61 73 65 0a 23 20 77 68 65 72 65 20 61  e case.# where a
2140: 6e 20 69 6e 64 65 78 20 42 2d 54 72 65 65 20 69  n index B-Tree i
2150: 73 20 62 65 69 6e 67 20 73 63 61 6e 6e 65 64 2c  s being scanned,
2160: 20 74 68 65 20 72 6f 77 69 64 20 63 6f 6c 75 6d   the rowid colum
2170: 6e 20 62 65 69 6e 67 20 72 65 61 64 0a 23 20 66  n being read.# f
2180: 72 6f 6d 20 65 61 63 68 20 69 6e 64 65 78 20 65  rom each index e
2190: 6e 74 72 79 20 61 6e 64 20 61 6e 6f 74 68 65 72  ntry and another
21a0: 20 73 74 61 74 65 6d 65 6e 74 20 64 65 6c 65 74   statement delet
21b0: 65 73 20 73 6f 6d 65 20 72 6f 77 73 20 66 72 6f  es some rows fro
21c0: 6d 0a 23 20 74 68 65 20 69 6e 64 65 78 20 42 2d  m.# the index B-
21d0: 54 72 65 65 2e 20 41 74 20 6f 6e 65 20 70 6f 69  Tree. At one poi
21e0: 6e 74 20 74 68 69 73 20 28 6f 62 73 63 75 72 65  nt this (obscure
21f0: 29 20 73 63 65 6e 61 72 69 6f 20 77 61 73 20 63  ) scenario was c
2200: 61 75 73 69 6e 67 20 0a 23 20 53 51 4c 69 74 65  ausing .# SQLite
2210: 20 74 6f 20 72 65 74 75 72 6e 20 73 70 75 72 69   to return spuri
2220: 6f 75 73 20 53 51 4c 49 54 45 5f 43 4f 52 52 55  ous SQLITE_CORRU
2230: 50 54 20 65 72 72 6f 72 73 20 61 6e 64 20 61 72  PT errors and ar
2240: 67 75 61 62 6c 79 20 69 6e 63 6f 72 72 65 63 74  guably incorrect
2250: 0a 23 20 71 75 65 72 79 20 72 65 73 75 6c 74 73  .# query results
2260: 2e 20 0a 23 0a 64 6f 5f 74 65 73 74 20 64 65 6c  . .#.do_test del
2270: 65 74 65 2d 39 2e 31 20 7b 0a 20 20 73 71 6c 69  ete-9.1 {.  sqli
2280: 74 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20  te3 db test.db. 
2290: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43   execsql {.    C
22a0: 52 45 41 54 45 20 54 41 42 4c 45 20 74 35 28 61  REATE TABLE t5(a
22b0: 2c 20 62 29 3b 0a 20 20 20 20 43 52 45 41 54 45  , b);.    CREATE
22c0: 20 54 41 42 4c 45 20 74 36 28 63 2c 20 64 29 3b   TABLE t6(c, d);
22d0: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
22e0: 20 74 35 20 56 41 4c 55 45 53 28 31 2c 20 32 29   t5 VALUES(1, 2)
22f0: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
2300: 4f 20 74 35 20 56 41 4c 55 45 53 28 33 2c 20 34  O t5 VALUES(3, 4
2310: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
2320: 54 4f 20 74 35 20 56 41 4c 55 45 53 28 35 2c 20  TO t5 VALUES(5, 
2330: 36 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  6);.    INSERT I
2340: 4e 54 4f 20 74 36 20 56 41 4c 55 45 53 28 27 61  NTO t6 VALUES('a
2350: 27 2c 20 27 62 27 29 3b 0a 20 20 20 20 49 4e 53  ', 'b');.    INS
2360: 45 52 54 20 49 4e 54 4f 20 74 36 20 56 41 4c 55  ERT INTO t6 VALU
2370: 45 53 28 27 63 27 2c 20 27 64 27 29 3b 0a 20 20  ES('c', 'd');.  
2380: 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 69    CREATE INDEX i
2390: 35 20 4f 4e 20 74 35 28 61 29 3b 0a 20 20 20 20  5 ON t5(a);.    
23a0: 43 52 45 41 54 45 20 49 4e 44 45 58 20 69 36 20  CREATE INDEX i6 
23b0: 4f 4e 20 74 36 28 63 29 3b 0a 20 20 7d 0a 7d 20  ON t6(c);.  }.} 
23c0: 7b 7d 0a 64 6f 5f 74 65 73 74 20 64 65 6c 65 74  {}.do_test delet
23d0: 65 2d 39 2e 32 20 7b 0a 20 20 73 65 74 20 72 65  e-9.2 {.  set re
23e0: 73 20 5b 6c 69 73 74 5d 0a 20 20 64 62 20 65 76  s [list].  db ev
23f0: 61 6c 20 7b 20 53 45 4c 45 43 54 20 74 35 2e 72  al { SELECT t5.r
2400: 6f 77 69 64 20 41 53 20 72 2c 20 63 2c 20 64 20  owid AS r, c, d 
2410: 46 52 4f 4d 20 74 35 2c 20 74 36 20 4f 52 44 45  FROM t5, t6 ORDE
2420: 52 20 42 59 20 61 20 7d 20 7b 0a 20 20 20 20 69  R BY a } {.    i
2430: 66 20 7b 24 72 3d 3d 32 7d 20 7b 20 64 62 20 65  f {$r==2} { db e
2440: 76 61 6c 20 7b 20 44 45 4c 45 54 45 20 46 52 4f  val { DELETE FRO
2450: 4d 20 74 35 20 7d 20 7d 0a 20 20 20 20 6c 61 70  M t5 } }.    lap
2460: 70 65 6e 64 20 72 65 73 20 24 72 20 24 63 20 24  pend res $r $c $
2470: 64 0a 20 20 7d 0a 20 20 73 65 74 20 72 65 73 0a  d.  }.  set res.
2480: 7d 20 7b 31 20 61 20 62 20 31 20 63 20 64 20 32  } {1 a b 1 c d 2
2490: 20 61 20 62 20 7b 7d 20 63 20 64 7d 0a 64 6f 5f   a b {} c d}.do_
24a0: 74 65 73 74 20 64 65 6c 65 74 65 2d 39 2e 33 20  test delete-9.3 
24b0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
24c0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 35    INSERT INTO t5
24d0: 20 56 41 4c 55 45 53 28 31 2c 20 32 29 3b 0a 20   VALUES(1, 2);. 
24e0: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
24f0: 35 20 56 41 4c 55 45 53 28 33 2c 20 34 29 3b 0a  5 VALUES(3, 4);.
2500: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
2510: 74 35 20 56 41 4c 55 45 53 28 35 2c 20 36 29 3b  t5 VALUES(5, 6);
2520: 0a 20 20 7d 0a 20 20 73 65 74 20 72 65 73 20 5b  .  }.  set res [
2530: 6c 69 73 74 5d 0a 20 20 64 62 20 65 76 61 6c 20  list].  db eval 
2540: 7b 20 53 45 4c 45 43 54 20 74 35 2e 72 6f 77 69  { SELECT t5.rowi
2550: 64 20 41 53 20 72 2c 20 63 2c 20 64 20 46 52 4f  d AS r, c, d FRO
2560: 4d 20 74 35 2c 20 74 36 20 4f 52 44 45 52 20 42  M t5, t6 ORDER B
2570: 59 20 61 20 7d 20 7b 0a 20 20 20 20 69 66 20 7b  Y a } {.    if {
2580: 24 72 3d 3d 32 7d 20 7b 20 64 62 20 65 76 61 6c  $r==2} { db eval
2590: 20 7b 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 74   { DELETE FROM t
25a0: 35 20 57 48 45 52 45 20 72 6f 77 69 64 20 3d 20  5 WHERE rowid = 
25b0: 32 20 7d 20 7d 0a 20 20 20 20 6c 61 70 70 65 6e  2 } }.    lappen
25c0: 64 20 72 65 73 20 24 72 20 24 63 20 24 64 0a 20  d res $r $c $d. 
25d0: 20 7d 0a 20 20 73 65 74 20 72 65 73 0a 7d 20 7b   }.  set res.} {
25e0: 31 20 61 20 62 20 31 20 63 20 64 20 32 20 61 20  1 a b 1 c d 2 a 
25f0: 62 20 7b 7d 20 63 20 64 20 33 20 61 20 62 20 33  b {} c d 3 a b 3
2600: 20 63 20 64 7d 0a 64 6f 5f 74 65 73 74 20 64 65   c d}.do_test de
2610: 6c 65 74 65 2d 39 2e 34 20 7b 0a 20 20 65 78 65  lete-9.4 {.  exe
2620: 63 73 71 6c 20 7b 0a 20 20 20 20 44 45 4c 45 54  csql {.    DELET
2630: 45 20 46 52 4f 4d 20 74 35 3b 0a 20 20 20 20 49  E FROM t5;.    I
2640: 4e 53 45 52 54 20 49 4e 54 4f 20 74 35 20 56 41  NSERT INTO t5 VA
2650: 4c 55 45 53 28 31 2c 20 32 29 3b 0a 20 20 20 20  LUES(1, 2);.    
2660: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 35 20 56  INSERT INTO t5 V
2670: 41 4c 55 45 53 28 33 2c 20 34 29 3b 0a 20 20 20  ALUES(3, 4);.   
2680: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 35 20   INSERT INTO t5 
2690: 56 41 4c 55 45 53 28 35 2c 20 36 29 3b 0a 20 20  VALUES(5, 6);.  
26a0: 7d 0a 20 20 73 65 74 20 72 65 73 20 5b 6c 69 73  }.  set res [lis
26b0: 74 5d 0a 20 20 64 62 20 65 76 61 6c 20 7b 20 53  t].  db eval { S
26c0: 45 4c 45 43 54 20 74 35 2e 72 6f 77 69 64 20 41  ELECT t5.rowid A
26d0: 53 20 72 2c 20 63 2c 20 64 20 46 52 4f 4d 20 74  S r, c, d FROM t
26e0: 35 2c 20 74 36 20 4f 52 44 45 52 20 42 59 20 61  5, t6 ORDER BY a
26f0: 20 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 72 3d   } {.    if {$r=
2700: 3d 32 7d 20 7b 20 64 62 20 65 76 61 6c 20 7b 20  =2} { db eval { 
2710: 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 35 20 57  DELETE FROM t5 W
2720: 48 45 52 45 20 72 6f 77 69 64 20 3d 20 31 20 7d  HERE rowid = 1 }
2730: 20 7d 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 72   }.    lappend r
2740: 65 73 20 24 72 20 24 63 20 24 64 0a 20 20 7d 0a  es $r $c $d.  }.
2750: 20 20 73 65 74 20 72 65 73 0a 7d 20 7b 31 20 61    set res.} {1 a
2760: 20 62 20 31 20 63 20 64 20 32 20 61 20 62 20 32   b 1 c d 2 a b 2
2770: 20 63 20 64 20 33 20 61 20 62 20 33 20 63 20 64   c d 3 a b 3 c d
2780: 7d 0a 64 6f 5f 74 65 73 74 20 64 65 6c 65 74 65  }.do_test delete
2790: 2d 39 2e 35 20 7b 0a 20 20 65 78 65 63 73 71 6c  -9.5 {.  execsql
27a0: 20 7b 0a 20 20 20 20 44 45 4c 45 54 45 20 46 52   {.    DELETE FR
27b0: 4f 4d 20 74 35 3b 0a 20 20 20 20 49 4e 53 45 52  OM t5;.    INSER
27c0: 54 20 49 4e 54 4f 20 74 35 20 56 41 4c 55 45 53  T INTO t5 VALUES
27d0: 28 31 2c 20 32 29 3b 0a 20 20 20 20 49 4e 53 45  (1, 2);.    INSE
27e0: 52 54 20 49 4e 54 4f 20 74 35 20 56 41 4c 55 45  RT INTO t5 VALUE
27f0: 53 28 33 2c 20 34 29 3b 0a 20 20 20 20 49 4e 53  S(3, 4);.    INS
2800: 45 52 54 20 49 4e 54 4f 20 74 35 20 56 41 4c 55  ERT INTO t5 VALU
2810: 45 53 28 35 2c 20 36 29 3b 0a 20 20 7d 0a 20 20  ES(5, 6);.  }.  
2820: 73 65 74 20 72 65 73 20 5b 6c 69 73 74 5d 0a 20  set res [list]. 
2830: 20 64 62 20 65 76 61 6c 20 7b 20 53 45 4c 45 43   db eval { SELEC
2840: 54 20 74 35 2e 72 6f 77 69 64 20 41 53 20 72 2c  T t5.rowid AS r,
2850: 20 63 2c 20 64 20 46 52 4f 4d 20 74 35 2c 20 74   c, d FROM t5, t
2860: 36 20 4f 52 44 45 52 20 42 59 20 61 20 7d 20 7b  6 ORDER BY a } {
2870: 0a 20 20 20 20 69 66 20 7b 24 72 3d 3d 32 7d 20  .    if {$r==2} 
2880: 7b 20 64 62 20 65 76 61 6c 20 7b 20 44 45 4c 45  { db eval { DELE
2890: 54 45 20 46 52 4f 4d 20 74 35 20 57 48 45 52 45  TE FROM t5 WHERE
28a0: 20 72 6f 77 69 64 20 3d 20 33 20 7d 20 7d 0a 20   rowid = 3 } }. 
28b0: 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 20 24     lappend res $
28c0: 72 20 24 63 20 24 64 0a 20 20 7d 0a 20 20 73 65  r $c $d.  }.  se
28d0: 74 20 72 65 73 0a 7d 20 7b 31 20 61 20 62 20 31  t res.} {1 a b 1
28e0: 20 63 20 64 20 32 20 61 20 62 20 32 20 63 20 64   c d 2 a b 2 c d
28f0: 7d 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  }..do_execsql_te
2900: 73 74 20 64 65 6c 65 74 65 2d 31 30 2e 30 20 7b  st delete-10.0 {
2910: 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  .  CREATE TABLE 
2920: 74 31 28 61 20 49 4e 54 20 55 4e 49 51 55 45 2c  t1(a INT UNIQUE,
2930: 20 62 20 49 4e 54 29 3b 0a 20 20 49 4e 53 45 52   b INT);.  INSER
2940: 54 20 49 4e 54 4f 20 74 31 28 61 2c 62 29 20 56  T INTO t1(a,b) V
2950: 41 4c 55 45 53 28 27 31 27 2c 27 32 27 29 3b 0a  ALUES('1','2');.
2960: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
2970: 74 31 20 57 48 45 52 45 20 61 3d 27 31 27 20 41  t1 WHERE a='1' A
2980: 4e 44 20 62 3d 27 32 27 3b 0a 7d 20 7b 31 20 32  ND b='2';.} {1 2
2990: 7d 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  }..do_execsql_te
29a0: 73 74 20 64 65 6c 65 74 65 2d 31 30 2e 31 20 7b  st delete-10.1 {
29b0: 0a 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 74  .  DELETE FROM t
29c0: 31 20 57 48 45 52 45 20 61 3d 27 31 27 20 41 4e  1 WHERE a='1' AN
29d0: 44 20 62 3d 27 32 27 3b 0a 7d 0a 0a 64 6f 5f 65  D b='2';.}..do_e
29e0: 78 65 63 73 71 6c 5f 74 65 73 74 20 64 65 6c 65  xecsql_test dele
29f0: 74 65 2d 31 30 2e 32 20 7b 0a 20 20 53 45 4c 45  te-10.2 {.  SELE
2a00: 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 57 48 45  CT * FROM t1 WHE
2a10: 52 45 20 61 3d 27 31 27 20 41 4e 44 20 62 3d 27  RE a='1' AND b='
2a20: 32 27 3b 0a 7d 0a 0a 0a 66 69 6e 69 73 68 5f 74  2';.}...finish_t
2a30: 65 73 74 0a                                      est.