/ Hex Artifact Content
Login

Artifact 592081800806d297dd7449b1030c863d2883d6d42901837ccd2e5a9bd962edb0:


0000: 23 20 32 30 30 38 20 4f 63 74 6f 62 65 72 20 36  # 2008 October 6
0010: 0a 23 0a 23 20 54 68 65 20 61 75 74 68 6f 72 20  .#.# The author 
0020: 64 69 73 63 6c 61 69 6d 73 20 63 6f 70 79 72 69  disclaims copyri
0030: 67 68 74 20 74 6f 20 74 68 69 73 20 73 6f 75 72  ght to this sour
0040: 63 65 20 63 6f 64 65 2e 20 20 49 6e 20 70 6c 61  ce code.  In pla
0050: 63 65 20 6f 66 0a 23 20 61 20 6c 65 67 61 6c 20  ce of.# a legal 
0060: 6e 6f 74 69 63 65 2c 20 68 65 72 65 20 69 73 20  notice, here is 
0070: 61 20 62 6c 65 73 73 69 6e 67 3a 0a 23 0a 23 20  a blessing:.#.# 
0080: 20 20 20 4d 61 79 20 79 6f 75 20 64 6f 20 67 6f     May you do go
0090: 6f 64 20 61 6e 64 20 6e 6f 74 20 65 76 69 6c 2e  od and not evil.
00a0: 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20 66 69  .#    May you fi
00b0: 6e 64 20 66 6f 72 67 69 76 65 6e 65 73 73 20 66  nd forgiveness f
00c0: 6f 72 20 79 6f 75 72 73 65 6c 66 20 61 6e 64 20  or yourself and 
00d0: 66 6f 72 67 69 76 65 20 6f 74 68 65 72 73 2e 0a  forgive others..
00e0: 23 20 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61  #    May you sha
00f0: 72 65 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72  re freely, never
0100: 20 74 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61   taking more tha
0110: 6e 20 79 6f 75 20 67 69 76 65 2e 0a 23 0a 23 2a  n you give..#.#*
0120: 2a 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 0a 23 20 54 68 69 73 20 66 69  ******.# This fi
0170: 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 73 20 72 65  le implements re
0180: 67 72 65 73 73 69 6f 6e 20 74 65 73 74 73 20 66  gression tests f
0190: 6f 72 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72  or SQLite librar
01a0: 79 2e 20 20 54 68 65 0a 23 20 66 6f 63 75 73 20  y.  The.# focus 
01b0: 6f 66 20 74 68 69 73 20 66 69 6c 65 20 69 73 20  of this file is 
01c0: 74 65 73 74 69 6e 67 20 74 68 65 20 4c 49 4d 49  testing the LIMI
01d0: 54 20 2e 2e 2e 20 4f 46 46 53 45 54 20 2e 2e 2e  T ... OFFSET ...
01e0: 20 63 6c 61 75 73 65 0a 23 20 20 6f 66 20 55 50   clause.#  of UP
01f0: 44 41 54 45 20 61 6e 64 20 44 45 4c 45 54 45 20  DATE and DELETE 
0200: 73 74 61 74 65 6d 65 6e 74 73 2e 0a 23 0a 23 20  statements..#.# 
0210: 24 49 64 3a 20 77 68 65 72 65 6c 69 6d 69 74 2e  $Id: wherelimit.
0220: 74 65 73 74 2c 76 20 31 2e 32 20 32 30 30 38 2f  test,v 1.2 2008/
0230: 31 30 2f 31 30 20 31 38 3a 32 35 3a 34 36 20 73  10/10 18:25:46 s
0240: 68 61 6e 65 20 45 78 70 20 24 0a 0a 73 65 74 20  hane Exp $..set 
0250: 74 65 73 74 64 69 72 20 5b 66 69 6c 65 20 64 69  testdir [file di
0260: 72 6e 61 6d 65 20 24 61 72 67 76 30 5d 0a 73 6f  rname $argv0].so
0270: 75 72 63 65 20 24 74 65 73 74 64 69 72 2f 74 65  urce $testdir/te
0280: 73 74 65 72 2e 74 63 6c 0a 0a 70 72 6f 63 20 63  ster.tcl..proc c
0290: 72 65 61 74 65 5f 74 65 73 74 5f 64 61 74 61 20  reate_test_data 
02a0: 7b 73 69 7a 65 7d 20 7b 0a 20 20 23 20 42 75 69  {size} {.  # Bui
02b0: 6c 64 20 73 6f 6d 65 20 74 65 73 74 20 64 61 74  ld some test dat
02c0: 61 0a 20 20 23 0a 20 20 65 78 65 63 73 71 6c 20  a.  #.  execsql 
02d0: 7b 0a 20 20 20 20 44 52 4f 50 20 54 41 42 4c 45  {.    DROP TABLE
02e0: 20 49 46 20 45 58 49 53 54 53 20 74 31 3b 0a 20   IF EXISTS t1;. 
02f0: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
0300: 74 31 28 78 20 69 6e 74 2c 20 79 20 69 6e 74 29  t1(x int, y int)
0310: 3b 0a 20 20 20 20 42 45 47 49 4e 3b 0a 20 20 7d  ;.    BEGIN;.  }
0320: 0a 20 20 66 6f 72 20 7b 73 65 74 20 69 20 31 7d  .  for {set i 1}
0330: 20 7b 24 69 3c 3d 24 73 69 7a 65 7d 20 7b 69 6e   {$i<=$size} {in
0340: 63 72 20 69 7d 20 7b 0a 20 20 20 20 66 6f 72 20  cr i} {.    for 
0350: 7b 73 65 74 20 6a 20 31 7d 20 7b 24 6a 3c 3d 24  {set j 1} {$j<=$
0360: 73 69 7a 65 7d 20 7b 69 6e 63 72 20 6a 7d 20 7b  size} {incr j} {
0370: 0a 20 20 20 20 20 20 65 78 65 63 73 71 6c 20 22  .      execsql "
0380: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56  INSERT INTO t1 V
0390: 41 4c 55 45 53 28 5b 65 78 70 72 20 7b 24 69 7d  ALUES([expr {$i}
03a0: 5d 2c 5b 65 78 70 72 20 7b 24 6a 7d 5d 29 22 0a  ],[expr {$j}])".
03b0: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 65 78 65 63      }.  }.  exec
03c0: 73 71 6c 20 7b 0a 20 20 20 20 43 4f 4d 4d 49 54  sql {.    COMMIT
03d0: 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 7b  ;.  }.  return {
03e0: 7d 0a 7d 0a 0a 69 66 63 61 70 61 62 6c 65 20 7b  }.}..ifcapable {
03f0: 75 70 64 61 74 65 5f 64 65 6c 65 74 65 5f 6c 69  update_delete_li
0400: 6d 69 74 7d 20 7b 0a 0a 20 20 65 78 65 63 73 71  mit} {..  execsq
0410: 6c 20 7b 20 43 52 45 41 54 45 20 54 41 42 4c 45  l { CREATE TABLE
0420: 20 74 31 28 78 2c 20 79 29 20 7d 0a 0a 20 20 23   t1(x, y) }..  #
0430: 20 63 68 65 63 6b 20 73 79 6e 74 61 78 20 65 72   check syntax er
0440: 72 6f 72 20 73 75 70 70 6f 72 74 0a 20 20 64 6f  ror support.  do
0450: 5f 74 65 73 74 20 77 68 65 72 65 6c 69 6d 69 74  _test wherelimit
0460: 2d 30 2e 31 20 7b 0a 20 20 20 20 63 61 74 63 68  -0.1 {.    catch
0470: 73 71 6c 20 7b 44 45 4c 45 54 45 20 46 52 4f 4d  sql {DELETE FROM
0480: 20 74 31 20 4f 52 44 45 52 20 42 59 20 78 7d 0a   t1 ORDER BY x}.
0490: 20 20 7d 20 7b 31 20 7b 4f 52 44 45 52 20 42 59    } {1 {ORDER BY
04a0: 20 77 69 74 68 6f 75 74 20 4c 49 4d 49 54 20 6f   without LIMIT o
04b0: 6e 20 44 45 4c 45 54 45 7d 7d 0a 20 20 64 6f 5f  n DELETE}}.  do_
04c0: 74 65 73 74 20 77 68 65 72 65 6c 69 6d 69 74 2d  test wherelimit-
04d0: 30 2e 32 20 7b 0a 20 20 20 20 63 61 74 63 68 73  0.2 {.    catchs
04e0: 71 6c 20 7b 44 45 4c 45 54 45 20 46 52 4f 4d 20  ql {DELETE FROM 
04f0: 74 31 20 57 48 45 52 45 20 78 3d 31 20 4f 52 44  t1 WHERE x=1 ORD
0500: 45 52 20 42 59 20 78 7d 0a 20 20 7d 20 7b 31 20  ER BY x}.  } {1 
0510: 7b 4f 52 44 45 52 20 42 59 20 77 69 74 68 6f 75  {ORDER BY withou
0520: 74 20 4c 49 4d 49 54 20 6f 6e 20 44 45 4c 45 54  t LIMIT on DELET
0530: 45 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20 77 68  E}}.  do_test wh
0540: 65 72 65 6c 69 6d 69 74 2d 30 2e 33 20 7b 0a 20  erelimit-0.3 {. 
0550: 20 20 20 63 61 74 63 68 73 71 6c 20 7b 55 50 44     catchsql {UPD
0560: 41 54 45 20 74 31 20 53 45 54 20 79 3d 31 20 57  ATE t1 SET y=1 W
0570: 48 45 52 45 20 78 3d 31 20 4f 52 44 45 52 20 42  HERE x=1 ORDER B
0580: 59 20 78 7d 0a 20 20 7d 20 7b 31 20 7b 4f 52 44  Y x}.  } {1 {ORD
0590: 45 52 20 42 59 20 77 69 74 68 6f 75 74 20 4c 49  ER BY without LI
05a0: 4d 49 54 20 6f 6e 20 55 50 44 41 54 45 7d 7d 0a  MIT on UPDATE}}.
05b0: 0a 20 20 23 20 6e 6f 20 41 53 20 6f 6e 20 74 61  .  # no AS on ta
05c0: 62 6c 65 20 73 6f 75 72 63 65 73 0a 20 20 23 0a  ble sources.  #.
05d0: 20 20 23 20 55 50 44 41 54 45 3a 20 41 73 20 6f    # UPDATE: As o
05e0: 66 20 76 65 72 73 69 6f 6e 20 33 2e 32 34 2c 20  f version 3.24, 
05f0: 41 53 20 63 6c 61 75 73 65 73 20 61 72 65 20 61  AS clauses are a
0600: 6c 6c 6f 77 65 64 20 61 73 20 70 61 72 74 20 6f  llowed as part o
0610: 66 0a 20 20 23 20 55 50 44 41 54 45 20 6f 72 20  f.  # UPDATE or 
0620: 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74  DELETE statement
0630: 73 2e 0a 20 20 64 6f 5f 74 65 73 74 20 77 68 65  s..  do_test whe
0640: 72 65 6c 69 6d 69 74 2d 30 2e 34 20 7b 0a 20 20  relimit-0.4 {.  
0650: 20 20 63 61 74 63 68 73 71 6c 20 7b 44 45 4c 45    catchsql {DELE
0660: 54 45 20 46 52 4f 4d 20 74 31 20 41 53 20 61 20  TE FROM t1 AS a 
0670: 57 48 45 52 45 20 61 2e 78 3d 31 7d 0a 20 20 7d  WHERE a.x=1}.  }
0680: 20 7b 30 20 7b 7d 7d 0a 20 20 64 6f 5f 74 65 73   {0 {}}.  do_tes
0690: 74 20 77 68 65 72 65 6c 69 6d 69 74 2d 30 2e 35  t wherelimit-0.5
06a0: 2e 31 20 7b 0a 20 20 20 20 63 61 74 63 68 73 71  .1 {.    catchsq
06b0: 6c 20 7b 55 50 44 41 54 45 20 74 31 20 41 53 20  l {UPDATE t1 AS 
06c0: 61 20 53 45 54 20 79 3d 31 20 57 48 45 52 45 20  a SET y=1 WHERE 
06d0: 78 3d 31 7d 0a 20 20 7d 20 7b 30 20 7b 7d 7d 0a  x=1}.  } {0 {}}.
06e0: 20 20 64 6f 5f 74 65 73 74 20 77 68 65 72 65 6c    do_test wherel
06f0: 69 6d 69 74 2d 30 2e 35 2e 32 20 7b 0a 20 20 20  imit-0.5.2 {.   
0700: 20 63 61 74 63 68 73 71 6c 20 7b 55 50 44 41 54   catchsql {UPDAT
0710: 45 20 74 31 20 41 53 20 61 20 53 45 54 20 79 3d  E t1 AS a SET y=
0720: 31 20 57 48 45 52 45 20 74 31 2e 78 3d 31 7d 0a  1 WHERE t1.x=1}.
0730: 20 20 7d 20 7b 31 20 7b 6e 6f 20 73 75 63 68 20    } {1 {no such 
0740: 63 6f 6c 75 6d 6e 3a 20 74 31 2e 78 7d 7d 0a 0a  column: t1.x}}..
0750: 20 20 23 20 4f 46 46 53 45 54 20 77 2f 6f 20 4c    # OFFSET w/o L
0760: 49 4d 49 54 0a 20 20 64 6f 5f 74 65 73 74 20 77  IMIT.  do_test w
0770: 68 65 72 65 6c 69 6d 69 74 2d 30 2e 36 20 7b 0a  herelimit-0.6 {.
0780: 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b 44 45      catchsql {DE
0790: 4c 45 54 45 20 46 52 4f 4d 20 74 31 20 57 48 45  LETE FROM t1 WHE
07a0: 52 45 20 78 3d 31 20 4f 46 46 53 45 54 20 32 7d  RE x=1 OFFSET 2}
07b0: 0a 20 20 7d 20 7b 31 20 7b 6e 65 61 72 20 22 4f  .  } {1 {near "O
07c0: 46 46 53 45 54 22 3a 20 73 79 6e 74 61 78 20 65  FFSET": syntax e
07d0: 72 72 6f 72 7d 7d 0a 20 20 64 6f 5f 74 65 73 74  rror}}.  do_test
07e0: 20 77 68 65 72 65 6c 69 6d 69 74 2d 30 2e 37 20   wherelimit-0.7 
07f0: 7b 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b  {.    catchsql {
0800: 55 50 44 41 54 45 20 74 31 20 53 45 54 20 79 3d  UPDATE t1 SET y=
0810: 31 20 57 48 45 52 45 20 78 3d 31 20 4f 46 46 53  1 WHERE x=1 OFFS
0820: 45 54 20 32 7d 0a 20 20 7d 20 7b 31 20 7b 6e 65  ET 2}.  } {1 {ne
0830: 61 72 20 22 4f 46 46 53 45 54 22 3a 20 73 79 6e  ar "OFFSET": syn
0840: 74 61 78 20 65 72 72 6f 72 7d 7d 0a 0a 20 20 65  tax error}}..  e
0850: 78 65 63 73 71 6c 20 7b 20 44 52 4f 50 20 54 41  xecsql { DROP TA
0860: 42 4c 45 20 74 31 20 7d 0a 0a 20 20 23 20 63 68  BLE t1 }..  # ch
0870: 65 63 6b 20 64 65 6c 65 74 65 73 20 77 2f 6f 20  eck deletes w/o 
0880: 77 68 65 72 65 20 63 6c 61 75 73 65 73 20 62 75  where clauses bu
0890: 74 20 77 69 74 68 20 6c 69 6d 69 74 2f 6f 66 66  t with limit/off
08a0: 73 65 74 73 0a 20 20 63 72 65 61 74 65 5f 74 65  sets.  create_te
08b0: 73 74 5f 64 61 74 61 20 35 0a 20 20 64 6f 5f 74  st_data 5.  do_t
08c0: 65 73 74 20 77 68 65 72 65 6c 69 6d 69 74 2d 31  est wherelimit-1
08d0: 2e 30 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  .0 {.    execsql
08e0: 20 7b 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a   {SELECT count(*
08f0: 29 20 46 52 4f 4d 20 74 31 7d 0a 20 20 7d 20 7b  ) FROM t1}.  } {
0900: 32 35 7d 0a 20 20 64 6f 5f 74 65 73 74 20 77 68  25}.  do_test wh
0910: 65 72 65 6c 69 6d 69 74 2d 31 2e 31 20 7b 0a 20  erelimit-1.1 {. 
0920: 20 20 20 65 78 65 63 73 71 6c 20 7b 44 45 4c 45     execsql {DELE
0930: 54 45 20 46 52 4f 4d 20 74 31 7d 0a 20 20 20 20  TE FROM t1}.    
0940: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
0950: 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20 74 31  count(*) FROM t1
0960: 7d 0a 20 20 7d 20 7b 30 7d 0a 20 20 63 72 65 61  }.  } {0}.  crea
0970: 74 65 5f 74 65 73 74 5f 64 61 74 61 20 35 0a 20  te_test_data 5. 
0980: 20 64 6f 5f 74 65 73 74 20 77 68 65 72 65 6c 69   do_test whereli
0990: 6d 69 74 2d 31 2e 32 20 7b 0a 20 20 20 20 65 78  mit-1.2 {.    ex
09a0: 65 63 73 71 6c 20 7b 44 45 4c 45 54 45 20 46 52  ecsql {DELETE FR
09b0: 4f 4d 20 74 31 20 4c 49 4d 49 54 20 35 7d 0a 20  OM t1 LIMIT 5}. 
09c0: 20 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45     execsql {SELE
09d0: 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d  CT count(*) FROM
09e0: 20 74 31 7d 0a 20 20 7d 20 7b 32 30 7d 0a 20 20   t1}.  } {20}.  
09f0: 64 6f 5f 74 65 73 74 20 77 68 65 72 65 6c 69 6d  do_test wherelim
0a00: 69 74 2d 31 2e 33 20 7b 0a 20 20 20 20 23 20 6c  it-1.3 {.    # l
0a10: 69 6d 69 74 20 35 0a 20 20 20 20 65 78 65 63 73  imit 5.    execs
0a20: 71 6c 20 7b 44 45 4c 45 54 45 20 46 52 4f 4d 20  ql {DELETE FROM 
0a30: 74 31 20 4f 52 44 45 52 20 42 59 20 78 20 4c 49  t1 ORDER BY x LI
0a40: 4d 49 54 20 35 7d 0a 20 20 20 20 65 78 65 63 73  MIT 5}.    execs
0a50: 71 6c 20 7b 53 45 4c 45 43 54 20 63 6f 75 6e 74  ql {SELECT count
0a60: 28 2a 29 20 46 52 4f 4d 20 74 31 7d 0a 20 20 7d  (*) FROM t1}.  }
0a70: 20 7b 31 35 7d 0a 20 20 64 6f 5f 74 65 73 74 20   {15}.  do_test 
0a80: 77 68 65 72 65 6c 69 6d 69 74 2d 31 2e 34 20 7b  wherelimit-1.4 {
0a90: 0a 20 20 20 20 23 20 6c 69 6d 69 74 20 35 2c 20  .    # limit 5, 
0aa0: 6f 66 66 73 65 74 20 32 0a 20 20 20 20 65 78 65  offset 2.    exe
0ab0: 63 73 71 6c 20 7b 44 45 4c 45 54 45 20 46 52 4f  csql {DELETE FRO
0ac0: 4d 20 74 31 20 4f 52 44 45 52 20 42 59 20 78 20  M t1 ORDER BY x 
0ad0: 4c 49 4d 49 54 20 35 20 4f 46 46 53 45 54 20 32  LIMIT 5 OFFSET 2
0ae0: 7d 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 53  }.    execsql {S
0af0: 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20 46  ELECT count(*) F
0b00: 52 4f 4d 20 74 31 7d 0a 20 20 7d 20 7b 31 30 7d  ROM t1}.  } {10}
0b10: 0a 20 20 64 6f 5f 74 65 73 74 20 77 68 65 72 65  .  do_test where
0b20: 6c 69 6d 69 74 2d 31 2e 35 20 7b 0a 20 20 20 20  limit-1.5 {.    
0b30: 23 20 6c 69 6d 69 74 20 35 2c 20 6f 66 66 73 65  # limit 5, offse
0b40: 74 20 2d 32 0a 20 20 20 20 65 78 65 63 73 71 6c  t -2.    execsql
0b50: 20 7b 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 31   {DELETE FROM t1
0b60: 20 4f 52 44 45 52 20 42 59 20 78 20 4c 49 4d 49   ORDER BY x LIMI
0b70: 54 20 35 20 4f 46 46 53 45 54 20 2d 32 7d 0a 20  T 5 OFFSET -2}. 
0b80: 20 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45     execsql {SELE
0b90: 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d  CT count(*) FROM
0ba0: 20 74 31 7d 0a 20 20 7d 20 7b 35 7d 0a 20 20 64   t1}.  } {5}.  d
0bb0: 6f 5f 74 65 73 74 20 77 68 65 72 65 6c 69 6d 69  o_test wherelimi
0bc0: 74 2d 31 2e 36 20 7b 0a 20 20 20 20 23 20 6c 69  t-1.6 {.    # li
0bd0: 6d 69 74 20 2d 35 20 28 6e 6f 20 6c 69 6d 69 74  mit -5 (no limit
0be0: 29 2c 20 6f 66 66 73 65 74 20 32 0a 20 20 20 20  ), offset 2.    
0bf0: 65 78 65 63 73 71 6c 20 7b 44 45 4c 45 54 45 20  execsql {DELETE 
0c00: 46 52 4f 4d 20 74 31 20 4f 52 44 45 52 20 42 59  FROM t1 ORDER BY
0c10: 20 78 20 4c 49 4d 49 54 20 32 2c 20 2d 35 7d 0a   x LIMIT 2, -5}.
0c20: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c      execsql {SEL
0c30: 45 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f  ECT count(*) FRO
0c40: 4d 20 74 31 7d 0a 20 20 7d 20 7b 32 7d 0a 20 20  M t1}.  } {2}.  
0c50: 64 6f 5f 74 65 73 74 20 77 68 65 72 65 6c 69 6d  do_test wherelim
0c60: 69 74 2d 31 2e 37 20 7b 0a 20 20 20 20 23 20 6c  it-1.7 {.    # l
0c70: 69 6d 69 74 20 35 2c 20 6f 66 66 73 65 74 20 2d  imit 5, offset -
0c80: 32 20 28 6e 6f 20 6f 66 66 73 65 74 29 0a 20 20  2 (no offset).  
0c90: 20 20 65 78 65 63 73 71 6c 20 7b 44 45 4c 45 54    execsql {DELET
0ca0: 45 20 46 52 4f 4d 20 74 31 20 4f 52 44 45 52 20  E FROM t1 ORDER 
0cb0: 42 59 20 78 20 4c 49 4d 49 54 20 2d 32 2c 20 35  BY x LIMIT -2, 5
0cc0: 7d 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 53  }.    execsql {S
0cd0: 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20 46  ELECT count(*) F
0ce0: 52 4f 4d 20 74 31 7d 0a 20 20 7d 20 7b 30 7d 0a  ROM t1}.  } {0}.
0cf0: 20 20 63 72 65 61 74 65 5f 74 65 73 74 5f 64 61    create_test_da
0d00: 74 61 20 35 0a 20 20 64 6f 5f 74 65 73 74 20 77  ta 5.  do_test w
0d10: 68 65 72 65 6c 69 6d 69 74 2d 31 2e 38 20 7b 0a  herelimit-1.8 {.
0d20: 20 20 20 20 23 20 6c 69 6d 69 74 20 2d 35 20 28      # limit -5 (
0d30: 6e 6f 20 6c 69 6d 69 74 29 2c 20 6f 66 66 73 65  no limit), offse
0d40: 74 20 2d 32 20 28 6e 6f 20 6f 66 66 73 65 74 29  t -2 (no offset)
0d50: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 44 45  .    execsql {DE
0d60: 4c 45 54 45 20 46 52 4f 4d 20 74 31 20 4f 52 44  LETE FROM t1 ORD
0d70: 45 52 20 42 59 20 78 20 4c 49 4d 49 54 20 2d 32  ER BY x LIMIT -2
0d80: 2c 20 2d 35 7d 0a 20 20 20 20 65 78 65 63 73 71  , -5}.    execsq
0d90: 6c 20 7b 53 45 4c 45 43 54 20 63 6f 75 6e 74 28  l {SELECT count(
0da0: 2a 29 20 46 52 4f 4d 20 74 31 7d 0a 20 20 7d 20  *) FROM t1}.  } 
0db0: 7b 30 7d 0a 20 20 63 72 65 61 74 65 5f 74 65 73  {0}.  create_tes
0dc0: 74 5f 64 61 74 61 20 33 0a 20 20 64 6f 5f 74 65  t_data 3.  do_te
0dd0: 73 74 20 77 68 65 72 65 6c 69 6d 69 74 2d 31 2e  st wherelimit-1.
0de0: 39 20 7b 0a 20 20 20 20 23 20 6c 69 6d 69 74 20  9 {.    # limit 
0df0: 35 2c 20 6f 66 66 73 65 74 20 32 0a 20 20 20 20  5, offset 2.    
0e00: 65 78 65 63 73 71 6c 20 7b 44 45 4c 45 54 45 20  execsql {DELETE 
0e10: 46 52 4f 4d 20 74 31 20 4f 52 44 45 52 20 42 59  FROM t1 ORDER BY
0e20: 20 78 20 4c 49 4d 49 54 20 32 2c 20 35 7d 0a 20   x LIMIT 2, 5}. 
0e30: 20 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45     execsql {SELE
0e40: 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d  CT count(*) FROM
0e50: 20 74 31 7d 0a 20 20 7d 20 7b 34 7d 0a 20 20 64   t1}.  } {4}.  d
0e60: 6f 5f 74 65 73 74 20 77 68 65 72 65 6c 69 6d 69  o_test wherelimi
0e70: 74 2d 31 2e 31 30 20 7b 0a 20 20 20 20 23 20 6c  t-1.10 {.    # l
0e80: 69 6d 69 74 20 35 2c 20 6f 66 66 73 65 74 20 35  imit 5, offset 5
0e90: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 44 45  .    execsql {DE
0ea0: 4c 45 54 45 20 46 52 4f 4d 20 74 31 20 4f 52 44  LETE FROM t1 ORD
0eb0: 45 52 20 42 59 20 78 20 4c 49 4d 49 54 20 35 20  ER BY x LIMIT 5 
0ec0: 4f 46 46 53 45 54 20 35 7d 0a 20 20 20 20 65 78  OFFSET 5}.    ex
0ed0: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 63 6f  ecsql {SELECT co
0ee0: 75 6e 74 28 2a 29 20 46 52 4f 4d 20 74 31 7d 0a  unt(*) FROM t1}.
0ef0: 20 20 7d 20 7b 34 7d 0a 20 20 64 6f 5f 74 65 73    } {4}.  do_tes
0f00: 74 20 77 68 65 72 65 6c 69 6d 69 74 2d 31 2e 31  t wherelimit-1.1
0f10: 31 20 7b 0a 20 20 20 20 23 20 6c 69 6d 69 74 20  1 {.    # limit 
0f20: 35 30 2c 20 6f 66 66 73 65 74 20 33 30 0a 20 20  50, offset 30.  
0f30: 20 20 65 78 65 63 73 71 6c 20 7b 44 45 4c 45 54    execsql {DELET
0f40: 45 20 46 52 4f 4d 20 74 31 20 4f 52 44 45 52 20  E FROM t1 ORDER 
0f50: 42 59 20 78 20 4c 49 4d 49 54 20 35 30 20 4f 46  BY x LIMIT 50 OF
0f60: 46 53 45 54 20 33 30 7d 0a 20 20 20 20 65 78 65  FSET 30}.    exe
0f70: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 63 6f 75  csql {SELECT cou
0f80: 6e 74 28 2a 29 20 46 52 4f 4d 20 74 31 7d 0a 20  nt(*) FROM t1}. 
0f90: 20 7d 20 7b 34 7d 0a 20 20 64 6f 5f 74 65 73 74   } {4}.  do_test
0fa0: 20 77 68 65 72 65 6c 69 6d 69 74 2d 31 2e 31 32   wherelimit-1.12
0fb0: 20 7b 0a 20 20 20 20 23 20 6c 69 6d 69 74 20 35   {.    # limit 5
0fc0: 30 2c 20 6f 66 66 73 65 74 20 33 30 0a 20 20 20  0, offset 30.   
0fd0: 20 65 78 65 63 73 71 6c 20 7b 44 45 4c 45 54 45   execsql {DELETE
0fe0: 20 46 52 4f 4d 20 74 31 20 4f 52 44 45 52 20 42   FROM t1 ORDER B
0ff0: 59 20 78 20 4c 49 4d 49 54 20 33 30 2c 20 35 30  Y x LIMIT 30, 50
1000: 7d 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 53  }.    execsql {S
1010: 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20 46  ELECT count(*) F
1020: 52 4f 4d 20 74 31 7d 0a 20 20 7d 20 7b 34 7d 0a  ROM t1}.  } {4}.
1030: 20 20 64 6f 5f 74 65 73 74 20 77 68 65 72 65 6c    do_test wherel
1040: 69 6d 69 74 2d 31 2e 31 33 20 7b 0a 20 20 20 20  imit-1.13 {.    
1050: 65 78 65 63 73 71 6c 20 7b 44 45 4c 45 54 45 20  execsql {DELETE 
1060: 46 52 4f 4d 20 74 31 20 4f 52 44 45 52 20 42 59  FROM t1 ORDER BY
1070: 20 78 20 4c 49 4d 49 54 20 35 30 20 4f 46 46 53   x LIMIT 50 OFFS
1080: 45 54 20 35 30 7d 0a 20 20 20 20 65 78 65 63 73  ET 50}.    execs
1090: 71 6c 20 7b 53 45 4c 45 43 54 20 63 6f 75 6e 74  ql {SELECT count
10a0: 28 2a 29 20 46 52 4f 4d 20 74 31 7d 0a 20 20 7d  (*) FROM t1}.  }
10b0: 20 7b 34 7d 0a 0a 0a 20 20 63 72 65 61 74 65 5f   {4}...  create_
10c0: 74 65 73 74 5f 64 61 74 61 20 36 0a 20 20 64 6f  test_data 6.  do
10d0: 5f 74 65 73 74 20 77 68 65 72 65 6c 69 6d 69 74  _test wherelimit
10e0: 2d 32 2e 30 20 7b 0a 20 20 20 20 65 78 65 63 73  -2.0 {.    execs
10f0: 71 6c 20 7b 53 45 4c 45 43 54 20 63 6f 75 6e 74  ql {SELECT count
1100: 28 2a 29 20 46 52 4f 4d 20 74 31 7d 0a 20 20 7d  (*) FROM t1}.  }
1110: 20 7b 33 36 7d 0a 20 20 64 6f 5f 74 65 73 74 20   {36}.  do_test 
1120: 77 68 65 72 65 6c 69 6d 69 74 2d 32 2e 31 20 7b  wherelimit-2.1 {
1130: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 44 45  .    execsql {DE
1140: 4c 45 54 45 20 46 52 4f 4d 20 74 31 20 57 48 45  LETE FROM t1 WHE
1150: 52 45 20 78 3d 31 7d 0a 20 20 20 20 65 78 65 63  RE x=1}.    exec
1160: 73 71 6c 20 7b 53 45 4c 45 43 54 20 63 6f 75 6e  sql {SELECT coun
1170: 74 28 2a 29 20 46 52 4f 4d 20 74 31 7d 0a 20 20  t(*) FROM t1}.  
1180: 7d 20 7b 33 30 7d 0a 20 20 63 72 65 61 74 65 5f  } {30}.  create_
1190: 74 65 73 74 5f 64 61 74 61 20 36 0a 20 20 64 6f  test_data 6.  do
11a0: 5f 74 65 73 74 20 77 68 65 72 65 6c 69 6d 69 74  _test wherelimit
11b0: 2d 32 2e 32 20 7b 0a 20 20 20 20 65 78 65 63 73  -2.2 {.    execs
11c0: 71 6c 20 7b 44 45 4c 45 54 45 20 46 52 4f 4d 20  ql {DELETE FROM 
11d0: 74 31 20 57 48 45 52 45 20 78 3d 31 20 4c 49 4d  t1 WHERE x=1 LIM
11e0: 49 54 20 35 7d 0a 20 20 20 20 65 78 65 63 73 71  IT 5}.    execsq
11f0: 6c 20 7b 53 45 4c 45 43 54 20 63 6f 75 6e 74 28  l {SELECT count(
1200: 2a 29 20 46 52 4f 4d 20 74 31 7d 0a 20 20 7d 20  *) FROM t1}.  } 
1210: 7b 33 31 7d 0a 20 20 64 6f 5f 74 65 73 74 20 77  {31}.  do_test w
1220: 68 65 72 65 6c 69 6d 69 74 2d 32 2e 33 20 7b 0a  herelimit-2.3 {.
1230: 20 20 20 20 23 20 6c 69 6d 69 74 20 35 0a 20 20      # limit 5.  
1240: 20 20 65 78 65 63 73 71 6c 20 7b 44 45 4c 45 54    execsql {DELET
1250: 45 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  E FROM t1 WHERE 
1260: 78 3d 31 20 4f 52 44 45 52 20 42 59 20 78 20 4c  x=1 ORDER BY x L
1270: 49 4d 49 54 20 35 7d 0a 20 20 20 20 65 78 65 63  IMIT 5}.    exec
1280: 73 71 6c 20 7b 53 45 4c 45 43 54 20 63 6f 75 6e  sql {SELECT coun
1290: 74 28 2a 29 20 46 52 4f 4d 20 74 31 7d 0a 20 20  t(*) FROM t1}.  
12a0: 7d 20 7b 33 30 7d 0a 20 20 64 6f 5f 74 65 73 74  } {30}.  do_test
12b0: 20 77 68 65 72 65 6c 69 6d 69 74 2d 32 2e 34 20   wherelimit-2.4 
12c0: 7b 0a 20 20 20 20 23 20 6c 69 6d 69 74 20 35 2c  {.    # limit 5,
12d0: 20 6f 66 66 73 65 74 20 32 0a 20 20 20 20 65 78   offset 2.    ex
12e0: 65 63 73 71 6c 20 7b 44 45 4c 45 54 45 20 46 52  ecsql {DELETE FR
12f0: 4f 4d 20 74 31 20 57 48 45 52 45 20 78 3d 32 20  OM t1 WHERE x=2 
1300: 4f 52 44 45 52 20 42 59 20 78 20 4c 49 4d 49 54  ORDER BY x LIMIT
1310: 20 35 20 4f 46 46 53 45 54 20 32 7d 0a 20 20 20   5 OFFSET 2}.   
1320: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
1330: 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20 74   count(*) FROM t
1340: 31 7d 0a 20 20 7d 20 7b 32 36 7d 0a 20 20 64 6f  1}.  } {26}.  do
1350: 5f 74 65 73 74 20 77 68 65 72 65 6c 69 6d 69 74  _test wherelimit
1360: 2d 32 2e 35 20 7b 0a 20 20 20 20 23 20 6c 69 6d  -2.5 {.    # lim
1370: 69 74 20 35 2c 20 6f 66 66 73 65 74 20 2d 32 0a  it 5, offset -2.
1380: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 44 45 4c      execsql {DEL
1390: 45 54 45 20 46 52 4f 4d 20 74 31 20 57 48 45 52  ETE FROM t1 WHER
13a0: 45 20 78 3d 32 20 4f 52 44 45 52 20 42 59 20 78  E x=2 ORDER BY x
13b0: 20 4c 49 4d 49 54 20 35 20 4f 46 46 53 45 54 20   LIMIT 5 OFFSET 
13c0: 2d 32 7d 0a 20 20 20 20 65 78 65 63 73 71 6c 20  -2}.    execsql 
13d0: 7b 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29  {SELECT count(*)
13e0: 20 46 52 4f 4d 20 74 31 7d 0a 20 20 7d 20 7b 32   FROM t1}.  } {2
13f0: 34 7d 0a 20 20 64 6f 5f 74 65 73 74 20 77 68 65  4}.  do_test whe
1400: 72 65 6c 69 6d 69 74 2d 32 2e 36 20 7b 0a 20 20  relimit-2.6 {.  
1410: 20 20 23 20 6c 69 6d 69 74 20 2d 35 20 28 6e 6f    # limit -5 (no
1420: 20 6c 69 6d 69 74 29 2c 20 6f 66 66 73 65 74 20   limit), offset 
1430: 32 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 44  2.    execsql {D
1440: 45 4c 45 54 45 20 46 52 4f 4d 20 74 31 20 57 48  ELETE FROM t1 WH
1450: 45 52 45 20 78 3d 33 20 4f 52 44 45 52 20 42 59  ERE x=3 ORDER BY
1460: 20 78 20 4c 49 4d 49 54 20 32 2c 20 2d 35 7d 0a   x LIMIT 2, -5}.
1470: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c      execsql {SEL
1480: 45 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f  ECT count(*) FRO
1490: 4d 20 74 31 7d 0a 20 20 7d 20 7b 32 30 7d 0a 20  M t1}.  } {20}. 
14a0: 20 64 6f 5f 74 65 73 74 20 77 68 65 72 65 6c 69   do_test whereli
14b0: 6d 69 74 2d 32 2e 37 20 7b 0a 20 20 20 20 23 20  mit-2.7 {.    # 
14c0: 6c 69 6d 69 74 20 35 2c 20 6f 66 66 73 65 74 20  limit 5, offset 
14d0: 2d 32 20 28 6e 6f 20 6f 66 66 73 65 74 29 0a 20  -2 (no offset). 
14e0: 20 20 20 65 78 65 63 73 71 6c 20 7b 44 45 4c 45     execsql {DELE
14f0: 54 45 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45  TE FROM t1 WHERE
1500: 20 78 3d 33 20 4f 52 44 45 52 20 42 59 20 78 20   x=3 ORDER BY x 
1510: 4c 49 4d 49 54 20 2d 32 2c 20 35 7d 0a 20 20 20  LIMIT -2, 5}.   
1520: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
1530: 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20 74   count(*) FROM t
1540: 31 7d 0a 20 20 7d 20 7b 31 38 7d 0a 20 20 64 6f  1}.  } {18}.  do
1550: 5f 74 65 73 74 20 77 68 65 72 65 6c 69 6d 69 74  _test wherelimit
1560: 2d 32 2e 38 20 7b 0a 20 20 20 20 23 20 6c 69 6d  -2.8 {.    # lim
1570: 69 74 20 2d 35 20 28 6e 6f 20 6c 69 6d 69 74 29  it -5 (no limit)
1580: 2c 20 6f 66 66 73 65 74 20 2d 32 20 28 6e 6f 20  , offset -2 (no 
1590: 6f 66 66 73 65 74 29 0a 20 20 20 20 65 78 65 63  offset).    exec
15a0: 73 71 6c 20 7b 44 45 4c 45 54 45 20 46 52 4f 4d  sql {DELETE FROM
15b0: 20 74 31 20 57 48 45 52 45 20 78 3d 34 20 4f 52   t1 WHERE x=4 OR
15c0: 44 45 52 20 42 59 20 78 20 4c 49 4d 49 54 20 2d  DER BY x LIMIT -
15d0: 32 2c 20 2d 35 7d 0a 20 20 20 20 65 78 65 63 73  2, -5}.    execs
15e0: 71 6c 20 7b 53 45 4c 45 43 54 20 63 6f 75 6e 74  ql {SELECT count
15f0: 28 2a 29 20 46 52 4f 4d 20 74 31 7d 0a 20 20 7d  (*) FROM t1}.  }
1600: 20 7b 31 32 7d 0a 20 20 63 72 65 61 74 65 5f 74   {12}.  create_t
1610: 65 73 74 5f 64 61 74 61 20 36 0a 20 20 64 6f 5f  est_data 6.  do_
1620: 74 65 73 74 20 77 68 65 72 65 6c 69 6d 69 74 2d  test wherelimit-
1630: 32 2e 39 20 7b 0a 20 20 20 20 23 20 6c 69 6d 69  2.9 {.    # limi
1640: 74 20 35 2c 20 6f 66 66 73 65 74 20 32 0a 20 20  t 5, offset 2.  
1650: 20 20 65 78 65 63 73 71 6c 20 7b 44 45 4c 45 54    execsql {DELET
1660: 45 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  E FROM t1 WHERE 
1670: 78 3d 35 20 4f 52 44 45 52 20 42 59 20 78 20 4c  x=5 ORDER BY x L
1680: 49 4d 49 54 20 32 2c 20 35 7d 0a 20 20 20 20 65  IMIT 2, 5}.    e
1690: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 63  xecsql {SELECT c
16a0: 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20 74 31 7d  ount(*) FROM t1}
16b0: 0a 20 20 7d 20 7b 33 32 7d 0a 20 20 64 6f 5f 74  .  } {32}.  do_t
16c0: 65 73 74 20 77 68 65 72 65 6c 69 6d 69 74 2d 32  est wherelimit-2
16d0: 2e 31 30 20 7b 0a 20 20 20 20 23 20 6c 69 6d 69  .10 {.    # limi
16e0: 74 20 35 2c 20 6f 66 66 73 65 74 20 35 0a 20 20  t 5, offset 5.  
16f0: 20 20 65 78 65 63 73 71 6c 20 7b 44 45 4c 45 54    execsql {DELET
1700: 45 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  E FROM t1 WHERE 
1710: 78 3d 36 20 4f 52 44 45 52 20 42 59 20 78 20 4c  x=6 ORDER BY x L
1720: 49 4d 49 54 20 35 20 4f 46 46 53 45 54 20 35 7d  IMIT 5 OFFSET 5}
1730: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 53 45  .    execsql {SE
1740: 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52  LECT count(*) FR
1750: 4f 4d 20 74 31 7d 0a 20 20 7d 20 7b 33 31 7d 0a  OM t1}.  } {31}.
1760: 20 20 64 6f 5f 74 65 73 74 20 77 68 65 72 65 6c    do_test wherel
1770: 69 6d 69 74 2d 32 2e 31 31 20 7b 0a 20 20 20 20  imit-2.11 {.    
1780: 23 20 6c 69 6d 69 74 20 35 30 2c 20 6f 66 66 73  # limit 50, offs
1790: 65 74 20 33 30 0a 20 20 20 20 65 78 65 63 73 71  et 30.    execsq
17a0: 6c 20 7b 44 45 4c 45 54 45 20 46 52 4f 4d 20 74  l {DELETE FROM t
17b0: 31 20 57 48 45 52 45 20 78 3d 31 20 4f 52 44 45  1 WHERE x=1 ORDE
17c0: 52 20 42 59 20 78 20 4c 49 4d 49 54 20 35 30 20  R BY x LIMIT 50 
17d0: 4f 46 46 53 45 54 20 33 30 7d 0a 20 20 20 20 65  OFFSET 30}.    e
17e0: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 63  xecsql {SELECT c
17f0: 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20 74 31 7d  ount(*) FROM t1}
1800: 0a 20 20 7d 20 7b 33 31 7d 0a 20 20 64 6f 5f 74  .  } {31}.  do_t
1810: 65 73 74 20 77 68 65 72 65 6c 69 6d 69 74 2d 32  est wherelimit-2
1820: 2e 31 32 20 7b 0a 20 20 20 20 23 20 6c 69 6d 69  .12 {.    # limi
1830: 74 20 35 30 2c 20 6f 66 66 73 65 74 20 33 30 0a  t 50, offset 30.
1840: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 44 45 4c      execsql {DEL
1850: 45 54 45 20 46 52 4f 4d 20 74 31 20 57 48 45 52  ETE FROM t1 WHER
1860: 45 20 78 3d 32 20 4f 52 44 45 52 20 42 59 20 78  E x=2 ORDER BY x
1870: 20 4c 49 4d 49 54 20 33 30 2c 20 35 30 7d 0a 20   LIMIT 30, 50}. 
1880: 20 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45     execsql {SELE
1890: 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d  CT count(*) FROM
18a0: 20 74 31 7d 0a 20 20 7d 20 7b 33 31 7d 0a 20 20   t1}.  } {31}.  
18b0: 64 6f 5f 74 65 73 74 20 77 68 65 72 65 6c 69 6d  do_test wherelim
18c0: 69 74 2d 32 2e 31 33 20 7b 0a 20 20 20 20 65 78  it-2.13 {.    ex
18d0: 65 63 73 71 6c 20 7b 44 45 4c 45 54 45 20 46 52  ecsql {DELETE FR
18e0: 4f 4d 20 74 31 20 57 48 45 52 45 20 78 3d 33 20  OM t1 WHERE x=3 
18f0: 4f 52 44 45 52 20 42 59 20 78 20 4c 49 4d 49 54  ORDER BY x LIMIT
1900: 20 35 30 20 4f 46 46 53 45 54 20 35 30 7d 0a 20   50 OFFSET 50}. 
1910: 20 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45     execsql {SELE
1920: 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d  CT count(*) FROM
1930: 20 74 31 7d 0a 20 20 7d 20 7b 33 31 7d 0a 0a 0a   t1}.  } {31}...
1940: 20 20 63 72 65 61 74 65 5f 74 65 73 74 5f 64 61    create_test_da
1950: 74 61 20 36 0a 20 20 64 6f 5f 74 65 73 74 20 77  ta 6.  do_test w
1960: 68 65 72 65 6c 69 6d 69 74 2d 33 2e 30 20 7b 0a  herelimit-3.0 {.
1970: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c      execsql {SEL
1980: 45 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f  ECT count(*) FRO
1990: 4d 20 74 31 7d 0a 20 20 7d 20 7b 33 36 7d 0a 20  M t1}.  } {36}. 
19a0: 20 64 6f 5f 74 65 73 74 20 77 68 65 72 65 6c 69   do_test whereli
19b0: 6d 69 74 2d 33 2e 31 20 7b 0a 20 20 20 20 65 78  mit-3.1 {.    ex
19c0: 65 63 73 71 6c 20 7b 55 50 44 41 54 45 20 74 31  ecsql {UPDATE t1
19d0: 20 53 45 54 20 79 3d 31 20 57 48 45 52 45 20 78   SET y=1 WHERE x
19e0: 3d 31 7d 0a 20 20 20 20 65 78 65 63 73 71 6c 20  =1}.    execsql 
19f0: 7b 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29  {SELECT count(*)
1a00: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 79   FROM t1 WHERE y
1a10: 3d 31 7d 0a 20 20 7d 20 7b 31 31 7d 0a 20 20 63  =1}.  } {11}.  c
1a20: 72 65 61 74 65 5f 74 65 73 74 5f 64 61 74 61 20  reate_test_data 
1a30: 36 0a 20 20 64 6f 5f 74 65 73 74 20 77 68 65 72  6.  do_test wher
1a40: 65 6c 69 6d 69 74 2d 33 2e 32 20 7b 0a 20 20 20  elimit-3.2 {.   
1a50: 20 65 78 65 63 73 71 6c 20 7b 55 50 44 41 54 45   execsql {UPDATE
1a60: 20 74 31 20 53 45 54 20 79 3d 31 20 57 48 45 52   t1 SET y=1 WHER
1a70: 45 20 78 3d 31 20 4c 49 4d 49 54 20 35 7d 0a 20  E x=1 LIMIT 5}. 
1a80: 20 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45     execsql {SELE
1a90: 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d  CT count(*) FROM
1aa0: 20 74 31 20 57 48 45 52 45 20 79 3d 31 7d 0a 20   t1 WHERE y=1}. 
1ab0: 20 7d 20 7b 31 30 7d 0a 20 20 64 6f 5f 74 65 73   } {10}.  do_tes
1ac0: 74 20 77 68 65 72 65 6c 69 6d 69 74 2d 33 2e 33  t wherelimit-3.3
1ad0: 20 7b 0a 20 20 20 20 23 20 6c 69 6d 69 74 20 35   {.    # limit 5
1ae0: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 55 50  .    execsql {UP
1af0: 44 41 54 45 20 74 31 20 53 45 54 20 79 3d 32 20  DATE t1 SET y=2 
1b00: 57 48 45 52 45 20 78 3d 32 20 4f 52 44 45 52 20  WHERE x=2 ORDER 
1b10: 42 59 20 78 20 4c 49 4d 49 54 20 35 7d 0a 20 20  BY x LIMIT 5}.  
1b20: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
1b30: 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20  T count(*) FROM 
1b40: 74 31 20 57 48 45 52 45 20 79 3d 32 7d 0a 20 20  t1 WHERE y=2}.  
1b50: 7d 20 7b 39 7d 0a 20 20 63 72 65 61 74 65 5f 74  } {9}.  create_t
1b60: 65 73 74 5f 64 61 74 61 20 36 0a 20 20 64 6f 5f  est_data 6.  do_
1b70: 74 65 73 74 20 77 68 65 72 65 6c 69 6d 69 74 2d  test wherelimit-
1b80: 33 2e 34 20 7b 0a 20 20 20 20 23 20 6c 69 6d 69  3.4 {.    # limi
1b90: 74 20 35 2c 20 6f 66 66 73 65 74 20 32 0a 20 20  t 5, offset 2.  
1ba0: 20 20 65 78 65 63 73 71 6c 20 7b 55 50 44 41 54    execsql {UPDAT
1bb0: 45 20 74 31 20 53 45 54 20 79 3d 32 20 57 48 45  E t1 SET y=2 WHE
1bc0: 52 45 20 78 3d 32 20 4f 52 44 45 52 20 42 59 20  RE x=2 ORDER BY 
1bd0: 78 20 4c 49 4d 49 54 20 35 20 4f 46 46 53 45 54  x LIMIT 5 OFFSET
1be0: 20 32 7d 0a 20 20 20 20 65 78 65 63 73 71 6c 20   2}.    execsql 
1bf0: 7b 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29  {SELECT count(*)
1c00: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 79   FROM t1 WHERE y
1c10: 3d 31 7d 0a 20 20 7d 20 7b 36 7d 0a 20 20 64 6f  =1}.  } {6}.  do
1c20: 5f 74 65 73 74 20 77 68 65 72 65 6c 69 6d 69 74  _test wherelimit
1c30: 2d 33 2e 35 20 7b 0a 20 20 20 20 23 20 6c 69 6d  -3.5 {.    # lim
1c40: 69 74 20 35 2c 20 6f 66 66 73 65 74 20 2d 32 0a  it 5, offset -2.
1c50: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 55 50 44      execsql {UPD
1c60: 41 54 45 20 74 31 20 53 45 54 20 79 3d 32 20 57  ATE t1 SET y=2 W
1c70: 48 45 52 45 20 78 3d 32 20 4f 52 44 45 52 20 42  HERE x=2 ORDER B
1c80: 59 20 78 20 4c 49 4d 49 54 20 35 20 4f 46 46 53  Y x LIMIT 5 OFFS
1c90: 45 54 20 2d 32 7d 0a 20 20 20 20 65 78 65 63 73  ET -2}.    execs
1ca0: 71 6c 20 7b 53 45 4c 45 43 54 20 63 6f 75 6e 74  ql {SELECT count
1cb0: 28 2a 29 20 46 52 4f 4d 20 74 31 20 57 48 45 52  (*) FROM t1 WHER
1cc0: 45 20 79 3d 31 7d 0a 20 20 7d 20 7b 35 7d 0a 20  E y=1}.  } {5}. 
1cd0: 20 64 6f 5f 74 65 73 74 20 77 68 65 72 65 6c 69   do_test whereli
1ce0: 6d 69 74 2d 33 2e 36 20 7b 0a 20 20 20 20 23 20  mit-3.6 {.    # 
1cf0: 6c 69 6d 69 74 20 2d 35 20 28 6e 6f 20 6c 69 6d  limit -5 (no lim
1d00: 69 74 29 2c 20 6f 66 66 73 65 74 20 32 0a 20 20  it), offset 2.  
1d10: 20 20 65 78 65 63 73 71 6c 20 7b 55 50 44 41 54    execsql {UPDAT
1d20: 45 20 74 31 20 53 45 54 20 79 3d 33 20 57 48 45  E t1 SET y=3 WHE
1d30: 52 45 20 78 3d 33 20 4f 52 44 45 52 20 42 59 20  RE x=3 ORDER BY 
1d40: 78 20 4c 49 4d 49 54 20 32 2c 20 2d 35 7d 0a 20  x LIMIT 2, -5}. 
1d50: 20 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45     execsql {SELE
1d60: 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d  CT count(*) FROM
1d70: 20 74 31 20 57 48 45 52 45 20 79 3d 33 7d 0a 20   t1 WHERE y=3}. 
1d80: 20 7d 20 7b 38 7d 0a 20 20 64 6f 5f 74 65 73 74   } {8}.  do_test
1d90: 20 77 68 65 72 65 6c 69 6d 69 74 2d 33 2e 37 20   wherelimit-3.7 
1da0: 7b 0a 20 20 20 20 23 20 6c 69 6d 69 74 20 35 2c  {.    # limit 5,
1db0: 20 6f 66 66 73 65 74 20 2d 32 20 28 6e 6f 20 6f   offset -2 (no o
1dc0: 66 66 73 65 74 29 0a 20 20 20 20 65 78 65 63 73  ffset).    execs
1dd0: 71 6c 20 7b 55 50 44 41 54 45 20 74 31 20 53 45  ql {UPDATE t1 SE
1de0: 54 20 79 3d 33 20 57 48 45 52 45 20 78 3d 33 20  T y=3 WHERE x=3 
1df0: 4f 52 44 45 52 20 42 59 20 78 20 4c 49 4d 49 54  ORDER BY x LIMIT
1e00: 20 2d 32 2c 20 35 7d 0a 20 20 20 20 65 78 65 63   -2, 5}.    exec
1e10: 73 71 6c 20 7b 53 45 4c 45 43 54 20 63 6f 75 6e  sql {SELECT coun
1e20: 74 28 2a 29 20 46 52 4f 4d 20 74 31 20 57 48 45  t(*) FROM t1 WHE
1e30: 52 45 20 79 3d 33 7d 0a 20 20 7d 20 7b 31 30 7d  RE y=3}.  } {10}
1e40: 0a 0a 20 20 64 6f 5f 74 65 73 74 20 77 68 65 72  ..  do_test wher
1e50: 65 6c 69 6d 69 74 2d 33 2e 38 20 7b 0a 20 20 20  elimit-3.8 {.   
1e60: 20 23 20 6c 69 6d 69 74 20 2d 35 20 28 6e 6f 20   # limit -5 (no 
1e70: 6c 69 6d 69 74 29 2c 20 6f 66 66 73 65 74 20 2d  limit), offset -
1e80: 32 20 28 6e 6f 20 6f 66 66 73 65 74 29 0a 20 20  2 (no offset).  
1e90: 20 20 65 78 65 63 73 71 6c 20 7b 55 50 44 41 54    execsql {UPDAT
1ea0: 45 20 74 31 20 53 45 54 20 79 3d 34 20 57 48 45  E t1 SET y=4 WHE
1eb0: 52 45 20 78 3d 34 20 4f 52 44 45 52 20 42 59 20  RE x=4 ORDER BY 
1ec0: 78 20 4c 49 4d 49 54 20 2d 32 2c 20 2d 35 7d 0a  x LIMIT -2, -5}.
1ed0: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c      execsql {SEL
1ee0: 45 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f  ECT count(*) FRO
1ef0: 4d 20 74 31 20 57 48 45 52 45 20 79 3d 34 7d 0a  M t1 WHERE y=4}.
1f00: 20 20 7d 20 7b 39 7d 0a 20 20 63 72 65 61 74 65    } {9}.  create
1f10: 5f 74 65 73 74 5f 64 61 74 61 20 36 0a 20 20 64  _test_data 6.  d
1f20: 6f 5f 74 65 73 74 20 77 68 65 72 65 6c 69 6d 69  o_test wherelimi
1f30: 74 2d 33 2e 39 20 7b 0a 20 20 20 20 23 20 6c 69  t-3.9 {.    # li
1f40: 6d 69 74 20 35 2c 20 6f 66 66 73 65 74 20 32 0a  mit 5, offset 2.
1f50: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 55 50 44      execsql {UPD
1f60: 41 54 45 20 74 31 20 53 45 54 20 79 3d 34 20 57  ATE t1 SET y=4 W
1f70: 48 45 52 45 20 78 3d 35 20 4f 52 44 45 52 20 42  HERE x=5 ORDER B
1f80: 59 20 78 20 4c 49 4d 49 54 20 32 2c 20 35 7d 0a  Y x LIMIT 2, 5}.
1f90: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c      execsql {SEL
1fa0: 45 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f  ECT count(*) FRO
1fb0: 4d 20 74 31 20 57 48 45 52 45 20 79 3d 34 7d 0a  M t1 WHERE y=4}.
1fc0: 20 20 7d 20 7b 39 7d 0a 20 20 64 6f 5f 74 65 73    } {9}.  do_tes
1fd0: 74 20 77 68 65 72 65 6c 69 6d 69 74 2d 33 2e 31  t wherelimit-3.1
1fe0: 30 20 7b 0a 20 20 20 20 23 20 6c 69 6d 69 74 20  0 {.    # limit 
1ff0: 35 2c 20 6f 66 66 73 65 74 20 35 0a 20 20 20 20  5, offset 5.    
2000: 65 78 65 63 73 71 6c 20 7b 55 50 44 41 54 45 20  execsql {UPDATE 
2010: 74 31 20 53 45 54 20 79 3d 34 20 57 48 45 52 45  t1 SET y=4 WHERE
2020: 20 78 3d 36 20 4f 52 44 45 52 20 42 59 20 78 20   x=6 ORDER BY x 
2030: 4c 49 4d 49 54 20 35 20 4f 46 46 53 45 54 20 35  LIMIT 5 OFFSET 5
2040: 7d 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 53  }.    execsql {S
2050: 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20 46  ELECT count(*) F
2060: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 79 3d 31  ROM t1 WHERE y=1
2070: 7d 0a 20 20 7d 20 7b 36 7d 0a 20 20 64 6f 5f 74  }.  } {6}.  do_t
2080: 65 73 74 20 77 68 65 72 65 6c 69 6d 69 74 2d 33  est wherelimit-3
2090: 2e 31 31 20 7b 0a 20 20 20 20 23 20 6c 69 6d 69  .11 {.    # limi
20a0: 74 20 35 30 2c 20 6f 66 66 73 65 74 20 33 30 0a  t 50, offset 30.
20b0: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 55 50 44      execsql {UPD
20c0: 41 54 45 20 74 31 20 53 45 54 20 79 3d 31 20 57  ATE t1 SET y=1 W
20d0: 48 45 52 45 20 78 3d 31 20 4f 52 44 45 52 20 42  HERE x=1 ORDER B
20e0: 59 20 78 20 4c 49 4d 49 54 20 35 30 20 4f 46 46  Y x LIMIT 50 OFF
20f0: 53 45 54 20 33 30 7d 0a 20 20 20 20 65 78 65 63  SET 30}.    exec
2100: 73 71 6c 20 7b 53 45 4c 45 43 54 20 63 6f 75 6e  sql {SELECT coun
2110: 74 28 2a 29 20 46 52 4f 4d 20 74 31 20 57 48 45  t(*) FROM t1 WHE
2120: 52 45 20 79 3d 31 7d 0a 20 20 7d 20 7b 36 7d 0a  RE y=1}.  } {6}.
2130: 20 20 64 6f 5f 74 65 73 74 20 77 68 65 72 65 6c    do_test wherel
2140: 69 6d 69 74 2d 33 2e 31 32 20 7b 0a 20 20 20 20  imit-3.12 {.    
2150: 23 20 6c 69 6d 69 74 20 35 30 2c 20 6f 66 66 73  # limit 50, offs
2160: 65 74 20 33 30 0a 20 20 20 20 65 78 65 63 73 71  et 30.    execsq
2170: 6c 20 7b 55 50 44 41 54 45 20 74 31 20 53 45 54  l {UPDATE t1 SET
2180: 20 79 3d 31 20 57 48 45 52 45 20 78 3d 32 20 4f   y=1 WHERE x=2 O
2190: 52 44 45 52 20 42 59 20 78 20 4c 49 4d 49 54 20  RDER BY x LIMIT 
21a0: 33 30 2c 20 35 30 7d 0a 20 20 20 20 65 78 65 63  30, 50}.    exec
21b0: 73 71 6c 20 7b 53 45 4c 45 43 54 20 63 6f 75 6e  sql {SELECT coun
21c0: 74 28 2a 29 20 46 52 4f 4d 20 74 31 20 57 48 45  t(*) FROM t1 WHE
21d0: 52 45 20 79 3d 31 7d 0a 20 20 7d 20 7b 36 7d 0a  RE y=1}.  } {6}.
21e0: 20 20 64 6f 5f 74 65 73 74 20 77 68 65 72 65 6c    do_test wherel
21f0: 69 6d 69 74 2d 33 2e 31 33 20 7b 0a 20 20 20 20  imit-3.13 {.    
2200: 65 78 65 63 73 71 6c 20 7b 55 50 44 41 54 45 20  execsql {UPDATE 
2210: 74 31 20 53 45 54 20 79 3d 31 20 57 48 45 52 45  t1 SET y=1 WHERE
2220: 20 78 3d 33 20 4f 52 44 45 52 20 42 59 20 78 20   x=3 ORDER BY x 
2230: 4c 49 4d 49 54 20 35 30 20 4f 46 46 53 45 54 20  LIMIT 50 OFFSET 
2240: 35 30 7d 0a 20 20 20 20 65 78 65 63 73 71 6c 20  50}.    execsql 
2250: 7b 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29  {SELECT count(*)
2260: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 79   FROM t1 WHERE y
2270: 3d 31 7d 0a 20 20 7d 20 7b 36 7d 0a 0a 20 20 23  =1}.  } {6}..  #
2280: 20 43 61 6e 6e 6f 74 20 75 73 65 20 61 20 4c 49   Cannot use a LI
2290: 4d 49 54 20 66 6f 72 20 55 50 44 41 54 45 20 6f  MIT for UPDATE o
22a0: 72 20 44 45 4c 45 54 45 20 61 67 61 69 6e 73 74  r DELETE against
22b0: 20 61 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44   a WITHOUT ROWID
22c0: 20 74 61 62 6c 65 0a 20 20 23 20 6f 72 20 61 20   table.  # or a 
22d0: 56 49 45 57 2e 20 20 28 57 65 20 73 68 6f 75 6c  VIEW.  (We shoul
22e0: 64 20 66 69 78 20 74 68 69 73 20 73 6f 6d 65 64  d fix this somed
22f0: 61 79 29 2e 0a 20 20 23 0a 20 20 64 62 20 63 6c  ay)..  #.  db cl
2300: 6f 73 65 0a 20 20 73 71 6c 69 74 65 33 20 64 62  ose.  sqlite3 db
2310: 20 3a 6d 65 6d 6f 72 79 3a 0a 20 20 64 6f 5f 65   :memory:.  do_e
2320: 78 65 63 73 71 6c 5f 74 65 73 74 20 77 68 65 72  xecsql_test wher
2330: 65 6c 69 6d 69 74 2d 34 2e 31 20 7b 0a 20 20 20  elimit-4.1 {.   
2340: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31   CREATE TABLE t1
2350: 28 61 20 69 6e 74 29 3b 0a 20 20 20 20 49 4e 53  (a int);.    INS
2360: 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55  ERT INTO t1 VALU
2370: 45 53 28 31 29 3b 0a 20 20 20 20 49 4e 53 45 52  ES(1);.    INSER
2380: 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53  T INTO t1 VALUES
2390: 28 32 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20  (2);.    INSERT 
23a0: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 33  INTO t1 VALUES(3
23b0: 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41  );.    CREATE TA
23c0: 42 4c 45 20 74 32 28 61 20 69 6e 74 29 3b 0a 20  BLE t2(a int);. 
23d0: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
23e0: 32 20 53 45 4c 45 43 54 20 61 2b 31 30 30 20 46  2 SELECT a+100 F
23f0: 52 4f 4d 20 74 31 3b 0a 20 20 20 20 43 52 45 41  ROM t1;.    CREA
2400: 54 45 20 56 49 45 57 20 74 76 28 72 2c 61 29 20  TE VIEW tv(r,a) 
2410: 41 53 0a 20 20 20 20 20 20 20 53 45 4c 45 43 54  AS.       SELECT
2420: 20 72 6f 77 69 64 2c 20 61 20 46 52 4f 4d 20 74   rowid, a FROM t
2430: 32 20 55 4e 49 4f 4e 20 41 4c 4c 20 53 45 4c 45  2 UNION ALL SELE
2440: 43 54 20 72 6f 77 69 64 2c 20 61 20 46 52 4f 4d  CT rowid, a FROM
2450: 20 74 31 3b 0a 20 20 20 20 43 52 45 41 54 45 20   t1;.    CREATE 
2460: 54 52 49 47 47 45 52 20 74 76 5f 64 65 6c 20 49  TRIGGER tv_del I
2470: 4e 53 54 45 41 44 20 4f 46 20 44 45 4c 45 54 45  NSTEAD OF DELETE
2480: 20 4f 4e 20 74 76 0a 20 20 20 20 42 45 47 49 4e   ON tv.    BEGIN
2490: 0a 20 20 20 20 20 20 44 45 4c 45 54 45 20 46 52  .      DELETE FR
24a0: 4f 4d 20 74 31 20 57 48 45 52 45 20 72 6f 77 69  OM t1 WHERE rowi
24b0: 64 3d 6f 6c 64 2e 72 3b 0a 20 20 20 20 20 20 44  d=old.r;.      D
24c0: 45 4c 45 54 45 20 46 52 4f 4d 20 74 32 20 57 48  ELETE FROM t2 WH
24d0: 45 52 45 20 72 6f 77 69 64 3d 6f 6c 64 2e 72 3b  ERE rowid=old.r;
24e0: 0a 20 20 20 20 45 4e 44 3b 0a 20 20 7d 20 7b 7d  .    END;.  } {}
24f0: 0a 20 20 64 6f 5f 63 61 74 63 68 73 71 6c 5f 74  .  do_catchsql_t
2500: 65 73 74 20 77 68 65 72 65 6c 69 6d 69 74 2d 34  est wherelimit-4
2510: 2e 32 20 7b 0a 20 20 20 20 44 45 4c 45 54 45 20  .2 {.    DELETE 
2520: 46 52 4f 4d 20 74 76 20 57 48 45 52 45 20 31 20  FROM tv WHERE 1 
2530: 4c 49 4d 49 54 20 32 3b 0a 20 20 7d 20 7b 30 20  LIMIT 2;.  } {0 
2540: 7b 7d 7d 0a 20 20 64 6f 5f 63 61 74 63 68 73 71  {}}.  do_catchsq
2550: 6c 5f 74 65 73 74 20 77 68 65 72 65 6c 69 6d 69  l_test wherelimi
2560: 74 2d 34 2e 33 20 7b 0a 20 20 20 20 44 45 4c 45  t-4.3 {.    DELE
2570: 54 45 20 46 52 4f 4d 20 74 76 20 57 48 45 52 45  TE FROM tv WHERE
2580: 20 31 20 4f 52 44 45 52 20 42 59 20 61 20 4c 49   1 ORDER BY a LI
2590: 4d 49 54 20 32 3b 0a 20 20 7d 20 7b 30 20 7b 7d  MIT 2;.  } {0 {}
25a0: 7d 0a 20 20 64 6f 5f 65 78 65 63 73 71 6c 5f 74  }.  do_execsql_t
25b0: 65 73 74 20 77 68 65 72 65 6c 69 6d 69 74 2d 34  est wherelimit-4
25c0: 2e 31 30 20 7b 0a 20 20 20 20 43 52 45 41 54 45  .10 {.    CREATE
25d0: 20 54 41 42 4c 45 20 74 33 28 61 2c 62 2c 63 2c   TABLE t3(a,b,c,
25e0: 64 20 54 45 58 54 2c 20 50 52 49 4d 41 52 59 20  d TEXT, PRIMARY 
25f0: 4b 45 59 28 61 2c 62 29 29 20 57 49 54 48 4f 55  KEY(a,b)) WITHOU
2600: 54 20 52 4f 57 49 44 3b 0a 20 20 20 20 49 4e 53  T ROWID;.    INS
2610: 45 52 54 20 49 4e 54 4f 20 74 33 28 61 2c 62 2c  ERT INTO t3(a,b,
2620: 63 2c 64 29 20 56 41 4c 55 45 53 28 31 2c 32 2c  c,d) VALUES(1,2,
2630: 33 2c 34 29 2c 28 35 2c 36 2c 37 2c 38 29 2c 28  3,4),(5,6,7,8),(
2640: 39 2c 31 30 2c 31 31 2c 31 32 29 3b 0a 20 20 7d  9,10,11,12);.  }
2650: 20 7b 7d 0a 20 20 64 6f 5f 63 61 74 63 68 73 71   {}.  do_catchsq
2660: 6c 5f 74 65 73 74 20 77 68 65 72 65 6c 69 6d 69  l_test wherelimi
2670: 74 2d 34 2e 31 31 20 7b 0a 20 20 20 20 44 45 4c  t-4.11 {.    DEL
2680: 45 54 45 20 46 52 4f 4d 20 74 33 20 57 48 45 52  ETE FROM t3 WHER
2690: 45 20 61 3d 35 20 4c 49 4d 49 54 20 32 3b 0a 20  E a=5 LIMIT 2;. 
26a0: 20 7d 20 7b 30 20 7b 7d 7d 0a 20 20 64 6f 5f 65   } {0 {}}.  do_e
26b0: 78 65 63 73 71 6c 5f 74 65 73 74 20 77 68 65 72  xecsql_test wher
26c0: 65 6c 69 6d 69 74 2d 34 2e 31 32 20 7b 0a 20 20  elimit-4.12 {.  
26d0: 20 20 53 45 4c 45 43 54 20 61 2c 62 2c 63 2c 64    SELECT a,b,c,d
26e0: 20 46 52 4f 4d 20 74 33 20 4f 52 44 45 52 20 42   FROM t3 ORDER B
26f0: 59 20 31 3b 0a 20 20 7d 20 7b 31 20 32 20 33 20  Y 1;.  } {1 2 3 
2700: 34 20 39 20 31 30 20 31 31 20 31 32 7d 0a 0a 7d  4 9 10 11 12}..}
2710: 0a 0a 66 69 6e 69 73 68 5f 74 65 73 74 0a        ..finish_test.