/ Hex Artifact Content
Login

Artifact 5e9fd41e79bb2b2d588ed999d641d9c965619b31:


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 23 20 63 68 65 63  mit} {..  # chec
0410: 6b 20 73 79 6e 74 61 78 20 65 72 72 6f 72 20 73  k syntax error s
0420: 75 70 70 6f 72 74 0a 20 20 64 6f 5f 74 65 73 74  upport.  do_test
0430: 20 77 68 65 72 65 6c 69 6d 69 74 2d 30 2e 31 20   wherelimit-0.1 
0440: 7b 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b  {.    catchsql {
0450: 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 31 20 4f  DELETE FROM t1 O
0460: 52 44 45 52 20 42 59 20 78 7d 0a 20 20 7d 20 7b  RDER BY x}.  } {
0470: 31 20 7b 4f 52 44 45 52 20 42 59 20 77 69 74 68  1 {ORDER BY with
0480: 6f 75 74 20 4c 49 4d 49 54 20 6f 6e 20 44 45 4c  out LIMIT on DEL
0490: 45 54 45 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20  ETE}}.  do_test 
04a0: 77 68 65 72 65 6c 69 6d 69 74 2d 30 2e 32 20 7b  wherelimit-0.2 {
04b0: 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b 44  .    catchsql {D
04c0: 45 4c 45 54 45 20 46 52 4f 4d 20 74 31 20 57 48  ELETE FROM t1 WH
04d0: 45 52 45 20 78 3d 31 20 4f 52 44 45 52 20 42 59  ERE x=1 ORDER BY
04e0: 20 78 7d 0a 20 20 7d 20 7b 31 20 7b 4f 52 44 45   x}.  } {1 {ORDE
04f0: 52 20 42 59 20 77 69 74 68 6f 75 74 20 4c 49 4d  R BY without LIM
0500: 49 54 20 6f 6e 20 44 45 4c 45 54 45 7d 7d 0a 20  IT on DELETE}}. 
0510: 20 64 6f 5f 74 65 73 74 20 77 68 65 72 65 6c 69   do_test whereli
0520: 6d 69 74 2d 30 2e 33 20 7b 0a 20 20 20 20 63 61  mit-0.3 {.    ca
0530: 74 63 68 73 71 6c 20 7b 55 50 44 41 54 45 20 74  tchsql {UPDATE t
0540: 31 20 53 45 54 20 79 3d 31 20 57 48 45 52 45 20  1 SET y=1 WHERE 
0550: 78 3d 31 20 4f 52 44 45 52 20 42 59 20 78 7d 0a  x=1 ORDER BY x}.
0560: 20 20 7d 20 7b 31 20 7b 4f 52 44 45 52 20 42 59    } {1 {ORDER BY
0570: 20 77 69 74 68 6f 75 74 20 4c 49 4d 49 54 20 6f   without LIMIT o
0580: 6e 20 55 50 44 41 54 45 7d 7d 0a 0a 20 20 23 20  n UPDATE}}..  # 
0590: 6e 6f 20 41 53 20 6f 6e 20 74 61 62 6c 65 20 73  no AS on table s
05a0: 6f 75 72 63 65 73 0a 20 20 64 6f 5f 74 65 73 74  ources.  do_test
05b0: 20 77 68 65 72 65 6c 69 6d 69 74 2d 30 2e 34 20   wherelimit-0.4 
05c0: 7b 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b  {.    catchsql {
05d0: 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 31 20 41  DELETE FROM t1 A
05e0: 53 20 61 20 57 48 45 52 45 20 78 3d 31 7d 0a 20  S a WHERE x=1}. 
05f0: 20 7d 20 7b 31 20 7b 6e 65 61 72 20 22 41 53 22   } {1 {near "AS"
0600: 3a 20 73 79 6e 74 61 78 20 65 72 72 6f 72 7d 7d  : syntax error}}
0610: 0a 20 20 64 6f 5f 74 65 73 74 20 77 68 65 72 65  .  do_test where
0620: 6c 69 6d 69 74 2d 30 2e 35 20 7b 0a 20 20 20 20  limit-0.5 {.    
0630: 63 61 74 63 68 73 71 6c 20 7b 55 50 44 41 54 45  catchsql {UPDATE
0640: 20 74 31 20 41 53 20 61 20 53 45 54 20 79 3d 31   t1 AS a SET y=1
0650: 20 57 48 45 52 45 20 78 3d 31 7d 0a 20 20 7d 20   WHERE x=1}.  } 
0660: 7b 31 20 7b 6e 65 61 72 20 22 41 53 22 3a 20 73  {1 {near "AS": s
0670: 79 6e 74 61 78 20 65 72 72 6f 72 7d 7d 0a 0a 20  yntax error}}.. 
0680: 20 23 20 4f 46 46 53 45 54 20 77 2f 6f 20 4c 49   # OFFSET w/o LI
0690: 4d 49 54 0a 20 20 64 6f 5f 74 65 73 74 20 77 68  MIT.  do_test wh
06a0: 65 72 65 6c 69 6d 69 74 2d 30 2e 36 20 7b 0a 20  erelimit-0.6 {. 
06b0: 20 20 20 63 61 74 63 68 73 71 6c 20 7b 44 45 4c     catchsql {DEL
06c0: 45 54 45 20 46 52 4f 4d 20 74 31 20 57 48 45 52  ETE FROM t1 WHER
06d0: 45 20 78 3d 31 20 4f 46 46 53 45 54 20 32 7d 0a  E x=1 OFFSET 2}.
06e0: 20 20 7d 20 7b 31 20 7b 6e 65 61 72 20 22 4f 46    } {1 {near "OF
06f0: 46 53 45 54 22 3a 20 73 79 6e 74 61 78 20 65 72  FSET": syntax er
0700: 72 6f 72 7d 7d 0a 20 20 64 6f 5f 74 65 73 74 20  ror}}.  do_test 
0710: 77 68 65 72 65 6c 69 6d 69 74 2d 30 2e 37 20 7b  wherelimit-0.7 {
0720: 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b 55  .    catchsql {U
0730: 50 44 41 54 45 20 74 31 20 53 45 54 20 79 3d 31  PDATE t1 SET y=1
0740: 20 57 48 45 52 45 20 78 3d 31 20 4f 46 46 53 45   WHERE x=1 OFFSE
0750: 54 20 32 7d 0a 20 20 7d 20 7b 31 20 7b 6e 65 61  T 2}.  } {1 {nea
0760: 72 20 22 4f 46 46 53 45 54 22 3a 20 73 79 6e 74  r "OFFSET": synt
0770: 61 78 20 65 72 72 6f 72 7d 7d 0a 0a 0a 20 20 23  ax error}}...  #
0780: 20 63 68 65 63 6b 20 64 65 6c 65 74 65 73 20 77   check deletes w
0790: 2f 6f 20 77 68 65 72 65 20 63 6c 61 75 73 65 73  /o where clauses
07a0: 20 62 75 74 20 77 69 74 68 20 6c 69 6d 69 74 2f   but with limit/
07b0: 6f 66 66 73 65 74 73 0a 20 20 63 72 65 61 74 65  offsets.  create
07c0: 5f 74 65 73 74 5f 64 61 74 61 20 35 0a 20 20 64  _test_data 5.  d
07d0: 6f 5f 74 65 73 74 20 77 68 65 72 65 6c 69 6d 69  o_test wherelimi
07e0: 74 2d 31 2e 30 20 7b 0a 20 20 20 20 65 78 65 63  t-1.0 {.    exec
07f0: 73 71 6c 20 7b 53 45 4c 45 43 54 20 63 6f 75 6e  sql {SELECT coun
0800: 74 28 2a 29 20 46 52 4f 4d 20 74 31 7d 0a 20 20  t(*) FROM t1}.  
0810: 7d 20 7b 32 35 7d 0a 20 20 64 6f 5f 74 65 73 74  } {25}.  do_test
0820: 20 77 68 65 72 65 6c 69 6d 69 74 2d 31 2e 31 20   wherelimit-1.1 
0830: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 44  {.    execsql {D
0840: 45 4c 45 54 45 20 46 52 4f 4d 20 74 31 7d 0a 20  ELETE FROM t1}. 
0850: 20 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45     execsql {SELE
0860: 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d  CT count(*) FROM
0870: 20 74 31 7d 0a 20 20 7d 20 7b 30 7d 0a 20 20 63   t1}.  } {0}.  c
0880: 72 65 61 74 65 5f 74 65 73 74 5f 64 61 74 61 20  reate_test_data 
0890: 35 0a 20 20 64 6f 5f 74 65 73 74 20 77 68 65 72  5.  do_test wher
08a0: 65 6c 69 6d 69 74 2d 31 2e 32 20 7b 0a 20 20 20  elimit-1.2 {.   
08b0: 20 65 78 65 63 73 71 6c 20 7b 44 45 4c 45 54 45   execsql {DELETE
08c0: 20 46 52 4f 4d 20 74 31 20 4c 49 4d 49 54 20 35   FROM t1 LIMIT 5
08d0: 7d 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 53  }.    execsql {S
08e0: 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20 46  ELECT count(*) F
08f0: 52 4f 4d 20 74 31 7d 0a 20 20 7d 20 7b 32 30 7d  ROM t1}.  } {20}
0900: 0a 20 20 64 6f 5f 74 65 73 74 20 77 68 65 72 65  .  do_test where
0910: 6c 69 6d 69 74 2d 31 2e 33 20 7b 0a 20 20 20 20  limit-1.3 {.    
0920: 23 20 6c 69 6d 69 74 20 35 0a 20 20 20 20 65 78  # limit 5.    ex
0930: 65 63 73 71 6c 20 7b 44 45 4c 45 54 45 20 46 52  ecsql {DELETE FR
0940: 4f 4d 20 74 31 20 4f 52 44 45 52 20 42 59 20 78  OM t1 ORDER BY x
0950: 20 4c 49 4d 49 54 20 35 7d 0a 20 20 20 20 65 78   LIMIT 5}.    ex
0960: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 63 6f  ecsql {SELECT co
0970: 75 6e 74 28 2a 29 20 46 52 4f 4d 20 74 31 7d 0a  unt(*) FROM t1}.
0980: 20 20 7d 20 7b 31 35 7d 0a 20 20 64 6f 5f 74 65    } {15}.  do_te
0990: 73 74 20 77 68 65 72 65 6c 69 6d 69 74 2d 31 2e  st wherelimit-1.
09a0: 34 20 7b 0a 20 20 20 20 23 20 6c 69 6d 69 74 20  4 {.    # limit 
09b0: 35 2c 20 6f 66 66 73 65 74 20 32 0a 20 20 20 20  5, offset 2.    
09c0: 65 78 65 63 73 71 6c 20 7b 44 45 4c 45 54 45 20  execsql {DELETE 
09d0: 46 52 4f 4d 20 74 31 20 4f 52 44 45 52 20 42 59  FROM t1 ORDER BY
09e0: 20 78 20 4c 49 4d 49 54 20 35 20 4f 46 46 53 45   x LIMIT 5 OFFSE
09f0: 54 20 32 7d 0a 20 20 20 20 65 78 65 63 73 71 6c  T 2}.    execsql
0a00: 20 7b 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a   {SELECT count(*
0a10: 29 20 46 52 4f 4d 20 74 31 7d 0a 20 20 7d 20 7b  ) FROM t1}.  } {
0a20: 31 30 7d 0a 20 20 64 6f 5f 74 65 73 74 20 77 68  10}.  do_test wh
0a30: 65 72 65 6c 69 6d 69 74 2d 31 2e 35 20 7b 0a 20  erelimit-1.5 {. 
0a40: 20 20 20 23 20 6c 69 6d 69 74 20 35 2c 20 6f 66     # limit 5, of
0a50: 66 73 65 74 20 2d 32 0a 20 20 20 20 65 78 65 63  fset -2.    exec
0a60: 73 71 6c 20 7b 44 45 4c 45 54 45 20 46 52 4f 4d  sql {DELETE FROM
0a70: 20 74 31 20 4f 52 44 45 52 20 42 59 20 78 20 4c   t1 ORDER BY x L
0a80: 49 4d 49 54 20 35 20 4f 46 46 53 45 54 20 2d 32  IMIT 5 OFFSET -2
0a90: 7d 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 53  }.    execsql {S
0aa0: 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20 46  ELECT count(*) F
0ab0: 52 4f 4d 20 74 31 7d 0a 20 20 7d 20 7b 35 7d 0a  ROM t1}.  } {5}.
0ac0: 20 20 64 6f 5f 74 65 73 74 20 77 68 65 72 65 6c    do_test wherel
0ad0: 69 6d 69 74 2d 31 2e 36 20 7b 0a 20 20 20 20 23  imit-1.6 {.    #
0ae0: 20 6c 69 6d 69 74 20 2d 35 20 28 6e 6f 20 6c 69   limit -5 (no li
0af0: 6d 69 74 29 2c 20 6f 66 66 73 65 74 20 32 0a 20  mit), offset 2. 
0b00: 20 20 20 65 78 65 63 73 71 6c 20 7b 44 45 4c 45     execsql {DELE
0b10: 54 45 20 46 52 4f 4d 20 74 31 20 4f 52 44 45 52  TE FROM t1 ORDER
0b20: 20 42 59 20 78 20 4c 49 4d 49 54 20 32 2c 20 2d   BY x LIMIT 2, -
0b30: 35 7d 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b  5}.    execsql {
0b40: 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20  SELECT count(*) 
0b50: 46 52 4f 4d 20 74 31 7d 0a 20 20 7d 20 7b 32 7d  FROM t1}.  } {2}
0b60: 0a 20 20 64 6f 5f 74 65 73 74 20 77 68 65 72 65  .  do_test where
0b70: 6c 69 6d 69 74 2d 31 2e 37 20 7b 0a 20 20 20 20  limit-1.7 {.    
0b80: 23 20 6c 69 6d 69 74 20 35 2c 20 6f 66 66 73 65  # limit 5, offse
0b90: 74 20 2d 32 20 28 6e 6f 20 6f 66 66 73 65 74 29  t -2 (no offset)
0ba0: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 44 45  .    execsql {DE
0bb0: 4c 45 54 45 20 46 52 4f 4d 20 74 31 20 4f 52 44  LETE FROM t1 ORD
0bc0: 45 52 20 42 59 20 78 20 4c 49 4d 49 54 20 2d 32  ER BY x LIMIT -2
0bd0: 2c 20 35 7d 0a 20 20 20 20 65 78 65 63 73 71 6c  , 5}.    execsql
0be0: 20 7b 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a   {SELECT count(*
0bf0: 29 20 46 52 4f 4d 20 74 31 7d 0a 20 20 7d 20 7b  ) FROM t1}.  } {
0c00: 30 7d 0a 20 20 63 72 65 61 74 65 5f 74 65 73 74  0}.  create_test
0c10: 5f 64 61 74 61 20 35 0a 20 20 64 6f 5f 74 65 73  _data 5.  do_tes
0c20: 74 20 77 68 65 72 65 6c 69 6d 69 74 2d 31 2e 38  t wherelimit-1.8
0c30: 20 7b 0a 20 20 20 20 23 20 6c 69 6d 69 74 20 2d   {.    # limit -
0c40: 35 20 28 6e 6f 20 6c 69 6d 69 74 29 2c 20 6f 66  5 (no limit), of
0c50: 66 73 65 74 20 2d 32 20 28 6e 6f 20 6f 66 66 73  fset -2 (no offs
0c60: 65 74 29 0a 20 20 20 20 65 78 65 63 73 71 6c 20  et).    execsql 
0c70: 7b 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 31 20  {DELETE FROM t1 
0c80: 4f 52 44 45 52 20 42 59 20 78 20 4c 49 4d 49 54  ORDER BY x LIMIT
0c90: 20 2d 32 2c 20 2d 35 7d 0a 20 20 20 20 65 78 65   -2, -5}.    exe
0ca0: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 63 6f 75  csql {SELECT cou
0cb0: 6e 74 28 2a 29 20 46 52 4f 4d 20 74 31 7d 0a 20  nt(*) FROM t1}. 
0cc0: 20 7d 20 7b 30 7d 0a 20 20 63 72 65 61 74 65 5f   } {0}.  create_
0cd0: 74 65 73 74 5f 64 61 74 61 20 33 0a 20 20 64 6f  test_data 3.  do
0ce0: 5f 74 65 73 74 20 77 68 65 72 65 6c 69 6d 69 74  _test wherelimit
0cf0: 2d 31 2e 39 20 7b 0a 20 20 20 20 23 20 6c 69 6d  -1.9 {.    # lim
0d00: 69 74 20 35 2c 20 6f 66 66 73 65 74 20 32 0a 20  it 5, offset 2. 
0d10: 20 20 20 65 78 65 63 73 71 6c 20 7b 44 45 4c 45     execsql {DELE
0d20: 54 45 20 46 52 4f 4d 20 74 31 20 4f 52 44 45 52  TE FROM t1 ORDER
0d30: 20 42 59 20 78 20 4c 49 4d 49 54 20 32 2c 20 35   BY x LIMIT 2, 5
0d40: 7d 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 53  }.    execsql {S
0d50: 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20 46  ELECT count(*) F
0d60: 52 4f 4d 20 74 31 7d 0a 20 20 7d 20 7b 34 7d 0a  ROM t1}.  } {4}.
0d70: 20 20 64 6f 5f 74 65 73 74 20 77 68 65 72 65 6c    do_test wherel
0d80: 69 6d 69 74 2d 31 2e 31 30 20 7b 0a 20 20 20 20  imit-1.10 {.    
0d90: 23 20 6c 69 6d 69 74 20 35 2c 20 6f 66 66 73 65  # limit 5, offse
0da0: 74 20 35 0a 20 20 20 20 65 78 65 63 73 71 6c 20  t 5.    execsql 
0db0: 7b 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 31 20  {DELETE FROM t1 
0dc0: 4f 52 44 45 52 20 42 59 20 78 20 4c 49 4d 49 54  ORDER BY x LIMIT
0dd0: 20 35 20 4f 46 46 53 45 54 20 35 7d 0a 20 20 20   5 OFFSET 5}.   
0de0: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
0df0: 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20 74   count(*) FROM t
0e00: 31 7d 0a 20 20 7d 20 7b 34 7d 0a 20 20 64 6f 5f  1}.  } {4}.  do_
0e10: 74 65 73 74 20 77 68 65 72 65 6c 69 6d 69 74 2d  test wherelimit-
0e20: 31 2e 31 31 20 7b 0a 20 20 20 20 23 20 6c 69 6d  1.11 {.    # lim
0e30: 69 74 20 35 30 2c 20 6f 66 66 73 65 74 20 33 30  it 50, offset 30
0e40: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 44 45  .    execsql {DE
0e50: 4c 45 54 45 20 46 52 4f 4d 20 74 31 20 4f 52 44  LETE FROM t1 ORD
0e60: 45 52 20 42 59 20 78 20 4c 49 4d 49 54 20 35 30  ER BY x LIMIT 50
0e70: 20 4f 46 46 53 45 54 20 33 30 7d 0a 20 20 20 20   OFFSET 30}.    
0e80: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
0e90: 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20 74 31  count(*) FROM t1
0ea0: 7d 0a 20 20 7d 20 7b 34 7d 0a 20 20 64 6f 5f 74  }.  } {4}.  do_t
0eb0: 65 73 74 20 77 68 65 72 65 6c 69 6d 69 74 2d 31  est wherelimit-1
0ec0: 2e 31 32 20 7b 0a 20 20 20 20 23 20 6c 69 6d 69  .12 {.    # limi
0ed0: 74 20 35 30 2c 20 6f 66 66 73 65 74 20 33 30 0a  t 50, offset 30.
0ee0: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 44 45 4c      execsql {DEL
0ef0: 45 54 45 20 46 52 4f 4d 20 74 31 20 4f 52 44 45  ETE FROM t1 ORDE
0f00: 52 20 42 59 20 78 20 4c 49 4d 49 54 20 33 30 2c  R BY x LIMIT 30,
0f10: 20 35 30 7d 0a 20 20 20 20 65 78 65 63 73 71 6c   50}.    execsql
0f20: 20 7b 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a   {SELECT count(*
0f30: 29 20 46 52 4f 4d 20 74 31 7d 0a 20 20 7d 20 7b  ) FROM t1}.  } {
0f40: 34 7d 0a 20 20 64 6f 5f 74 65 73 74 20 77 68 65  4}.  do_test whe
0f50: 72 65 6c 69 6d 69 74 2d 31 2e 31 33 20 7b 0a 20  relimit-1.13 {. 
0f60: 20 20 20 65 78 65 63 73 71 6c 20 7b 44 45 4c 45     execsql {DELE
0f70: 54 45 20 46 52 4f 4d 20 74 31 20 4f 52 44 45 52  TE FROM t1 ORDER
0f80: 20 42 59 20 78 20 4c 49 4d 49 54 20 35 30 20 4f   BY x LIMIT 50 O
0f90: 46 46 53 45 54 20 35 30 7d 0a 20 20 20 20 65 78  FFSET 50}.    ex
0fa0: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 63 6f  ecsql {SELECT co
0fb0: 75 6e 74 28 2a 29 20 46 52 4f 4d 20 74 31 7d 0a  unt(*) FROM t1}.
0fc0: 20 20 7d 20 7b 34 7d 0a 0a 0a 20 20 63 72 65 61    } {4}...  crea
0fd0: 74 65 5f 74 65 73 74 5f 64 61 74 61 20 36 0a 20  te_test_data 6. 
0fe0: 20 64 6f 5f 74 65 73 74 20 77 68 65 72 65 6c 69   do_test whereli
0ff0: 6d 69 74 2d 32 2e 30 20 7b 0a 20 20 20 20 65 78  mit-2.0 {.    ex
1000: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 63 6f  ecsql {SELECT co
1010: 75 6e 74 28 2a 29 20 46 52 4f 4d 20 74 31 7d 0a  unt(*) FROM t1}.
1020: 20 20 7d 20 7b 33 36 7d 0a 20 20 64 6f 5f 74 65    } {36}.  do_te
1030: 73 74 20 77 68 65 72 65 6c 69 6d 69 74 2d 32 2e  st wherelimit-2.
1040: 31 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  1 {.    execsql 
1050: 7b 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 31 20  {DELETE FROM t1 
1060: 57 48 45 52 45 20 78 3d 31 7d 0a 20 20 20 20 65  WHERE x=1}.    e
1070: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 63  xecsql {SELECT c
1080: 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20 74 31 7d  ount(*) FROM t1}
1090: 0a 20 20 7d 20 7b 33 30 7d 0a 20 20 63 72 65 61  .  } {30}.  crea
10a0: 74 65 5f 74 65 73 74 5f 64 61 74 61 20 36 0a 20  te_test_data 6. 
10b0: 20 64 6f 5f 74 65 73 74 20 77 68 65 72 65 6c 69   do_test whereli
10c0: 6d 69 74 2d 32 2e 32 20 7b 0a 20 20 20 20 65 78  mit-2.2 {.    ex
10d0: 65 63 73 71 6c 20 7b 44 45 4c 45 54 45 20 46 52  ecsql {DELETE FR
10e0: 4f 4d 20 74 31 20 57 48 45 52 45 20 78 3d 31 20  OM t1 WHERE x=1 
10f0: 4c 49 4d 49 54 20 35 7d 0a 20 20 20 20 65 78 65  LIMIT 5}.    exe
1100: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 63 6f 75  csql {SELECT cou
1110: 6e 74 28 2a 29 20 46 52 4f 4d 20 74 31 7d 0a 20  nt(*) FROM t1}. 
1120: 20 7d 20 7b 33 31 7d 0a 20 20 64 6f 5f 74 65 73   } {31}.  do_tes
1130: 74 20 77 68 65 72 65 6c 69 6d 69 74 2d 32 2e 33  t wherelimit-2.3
1140: 20 7b 0a 20 20 20 20 23 20 6c 69 6d 69 74 20 35   {.    # limit 5
1150: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 44 45  .    execsql {DE
1160: 4c 45 54 45 20 46 52 4f 4d 20 74 31 20 57 48 45  LETE FROM t1 WHE
1170: 52 45 20 78 3d 31 20 4f 52 44 45 52 20 42 59 20  RE x=1 ORDER BY 
1180: 78 20 4c 49 4d 49 54 20 35 7d 0a 20 20 20 20 65  x LIMIT 5}.    e
1190: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 63  xecsql {SELECT c
11a0: 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20 74 31 7d  ount(*) FROM t1}
11b0: 0a 20 20 7d 20 7b 33 30 7d 0a 20 20 64 6f 5f 74  .  } {30}.  do_t
11c0: 65 73 74 20 77 68 65 72 65 6c 69 6d 69 74 2d 32  est wherelimit-2
11d0: 2e 34 20 7b 0a 20 20 20 20 23 20 6c 69 6d 69 74  .4 {.    # limit
11e0: 20 35 2c 20 6f 66 66 73 65 74 20 32 0a 20 20 20   5, offset 2.   
11f0: 20 65 78 65 63 73 71 6c 20 7b 44 45 4c 45 54 45   execsql {DELETE
1200: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 78   FROM t1 WHERE x
1210: 3d 32 20 4f 52 44 45 52 20 42 59 20 78 20 4c 49  =2 ORDER BY x LI
1220: 4d 49 54 20 35 20 4f 46 46 53 45 54 20 32 7d 0a  MIT 5 OFFSET 2}.
1230: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c      execsql {SEL
1240: 45 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f  ECT count(*) FRO
1250: 4d 20 74 31 7d 0a 20 20 7d 20 7b 32 36 7d 0a 20  M t1}.  } {26}. 
1260: 20 64 6f 5f 74 65 73 74 20 77 68 65 72 65 6c 69   do_test whereli
1270: 6d 69 74 2d 32 2e 35 20 7b 0a 20 20 20 20 23 20  mit-2.5 {.    # 
1280: 6c 69 6d 69 74 20 35 2c 20 6f 66 66 73 65 74 20  limit 5, offset 
1290: 2d 32 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b  -2.    execsql {
12a0: 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 31 20 57  DELETE FROM t1 W
12b0: 48 45 52 45 20 78 3d 32 20 4f 52 44 45 52 20 42  HERE x=2 ORDER B
12c0: 59 20 78 20 4c 49 4d 49 54 20 35 20 4f 46 46 53  Y x LIMIT 5 OFFS
12d0: 45 54 20 2d 32 7d 0a 20 20 20 20 65 78 65 63 73  ET -2}.    execs
12e0: 71 6c 20 7b 53 45 4c 45 43 54 20 63 6f 75 6e 74  ql {SELECT count
12f0: 28 2a 29 20 46 52 4f 4d 20 74 31 7d 0a 20 20 7d  (*) FROM t1}.  }
1300: 20 7b 32 34 7d 0a 20 20 64 6f 5f 74 65 73 74 20   {24}.  do_test 
1310: 77 68 65 72 65 6c 69 6d 69 74 2d 32 2e 36 20 7b  wherelimit-2.6 {
1320: 0a 20 20 20 20 23 20 6c 69 6d 69 74 20 2d 35 20  .    # limit -5 
1330: 28 6e 6f 20 6c 69 6d 69 74 29 2c 20 6f 66 66 73  (no limit), offs
1340: 65 74 20 32 0a 20 20 20 20 65 78 65 63 73 71 6c  et 2.    execsql
1350: 20 7b 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 31   {DELETE FROM t1
1360: 20 57 48 45 52 45 20 78 3d 33 20 4f 52 44 45 52   WHERE x=3 ORDER
1370: 20 42 59 20 78 20 4c 49 4d 49 54 20 32 2c 20 2d   BY x LIMIT 2, -
1380: 35 7d 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b  5}.    execsql {
1390: 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20  SELECT count(*) 
13a0: 46 52 4f 4d 20 74 31 7d 0a 20 20 7d 20 7b 32 30  FROM t1}.  } {20
13b0: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 77 68 65 72  }.  do_test wher
13c0: 65 6c 69 6d 69 74 2d 32 2e 37 20 7b 0a 20 20 20  elimit-2.7 {.   
13d0: 20 23 20 6c 69 6d 69 74 20 35 2c 20 6f 66 66 73   # limit 5, offs
13e0: 65 74 20 2d 32 20 28 6e 6f 20 6f 66 66 73 65 74  et -2 (no offset
13f0: 29 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 44  ).    execsql {D
1400: 45 4c 45 54 45 20 46 52 4f 4d 20 74 31 20 57 48  ELETE FROM t1 WH
1410: 45 52 45 20 78 3d 33 20 4f 52 44 45 52 20 42 59  ERE x=3 ORDER BY
1420: 20 78 20 4c 49 4d 49 54 20 2d 32 2c 20 35 7d 0a   x LIMIT -2, 5}.
1430: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c      execsql {SEL
1440: 45 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f  ECT count(*) FRO
1450: 4d 20 74 31 7d 0a 20 20 7d 20 7b 31 38 7d 0a 20  M t1}.  } {18}. 
1460: 20 64 6f 5f 74 65 73 74 20 77 68 65 72 65 6c 69   do_test whereli
1470: 6d 69 74 2d 32 2e 38 20 7b 0a 20 20 20 20 23 20  mit-2.8 {.    # 
1480: 6c 69 6d 69 74 20 2d 35 20 28 6e 6f 20 6c 69 6d  limit -5 (no lim
1490: 69 74 29 2c 20 6f 66 66 73 65 74 20 2d 32 20 28  it), offset -2 (
14a0: 6e 6f 20 6f 66 66 73 65 74 29 0a 20 20 20 20 65  no offset).    e
14b0: 78 65 63 73 71 6c 20 7b 44 45 4c 45 54 45 20 46  xecsql {DELETE F
14c0: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 78 3d 34  ROM t1 WHERE x=4
14d0: 20 4f 52 44 45 52 20 42 59 20 78 20 4c 49 4d 49   ORDER BY x LIMI
14e0: 54 20 2d 32 2c 20 2d 35 7d 0a 20 20 20 20 65 78  T -2, -5}.    ex
14f0: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 63 6f  ecsql {SELECT co
1500: 75 6e 74 28 2a 29 20 46 52 4f 4d 20 74 31 7d 0a  unt(*) FROM t1}.
1510: 20 20 7d 20 7b 31 32 7d 0a 20 20 63 72 65 61 74    } {12}.  creat
1520: 65 5f 74 65 73 74 5f 64 61 74 61 20 36 0a 20 20  e_test_data 6.  
1530: 64 6f 5f 74 65 73 74 20 77 68 65 72 65 6c 69 6d  do_test wherelim
1540: 69 74 2d 32 2e 39 20 7b 0a 20 20 20 20 23 20 6c  it-2.9 {.    # l
1550: 69 6d 69 74 20 35 2c 20 6f 66 66 73 65 74 20 32  imit 5, offset 2
1560: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 44 45  .    execsql {DE
1570: 4c 45 54 45 20 46 52 4f 4d 20 74 31 20 57 48 45  LETE FROM t1 WHE
1580: 52 45 20 78 3d 35 20 4f 52 44 45 52 20 42 59 20  RE x=5 ORDER BY 
1590: 78 20 4c 49 4d 49 54 20 32 2c 20 35 7d 0a 20 20  x LIMIT 2, 5}.  
15a0: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
15b0: 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20  T count(*) FROM 
15c0: 74 31 7d 0a 20 20 7d 20 7b 33 32 7d 0a 20 20 64  t1}.  } {32}.  d
15d0: 6f 5f 74 65 73 74 20 77 68 65 72 65 6c 69 6d 69  o_test wherelimi
15e0: 74 2d 32 2e 31 30 20 7b 0a 20 20 20 20 23 20 6c  t-2.10 {.    # l
15f0: 69 6d 69 74 20 35 2c 20 6f 66 66 73 65 74 20 35  imit 5, offset 5
1600: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 44 45  .    execsql {DE
1610: 4c 45 54 45 20 46 52 4f 4d 20 74 31 20 57 48 45  LETE FROM t1 WHE
1620: 52 45 20 78 3d 36 20 4f 52 44 45 52 20 42 59 20  RE x=6 ORDER BY 
1630: 78 20 4c 49 4d 49 54 20 35 20 4f 46 46 53 45 54  x LIMIT 5 OFFSET
1640: 20 35 7d 0a 20 20 20 20 65 78 65 63 73 71 6c 20   5}.    execsql 
1650: 7b 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29  {SELECT count(*)
1660: 20 46 52 4f 4d 20 74 31 7d 0a 20 20 7d 20 7b 33   FROM t1}.  } {3
1670: 31 7d 0a 20 20 64 6f 5f 74 65 73 74 20 77 68 65  1}.  do_test whe
1680: 72 65 6c 69 6d 69 74 2d 32 2e 31 31 20 7b 0a 20  relimit-2.11 {. 
1690: 20 20 20 23 20 6c 69 6d 69 74 20 35 30 2c 20 6f     # limit 50, o
16a0: 66 66 73 65 74 20 33 30 0a 20 20 20 20 65 78 65  ffset 30.    exe
16b0: 63 73 71 6c 20 7b 44 45 4c 45 54 45 20 46 52 4f  csql {DELETE FRO
16c0: 4d 20 74 31 20 57 48 45 52 45 20 78 3d 31 20 4f  M t1 WHERE x=1 O
16d0: 52 44 45 52 20 42 59 20 78 20 4c 49 4d 49 54 20  RDER BY x LIMIT 
16e0: 35 30 20 4f 46 46 53 45 54 20 33 30 7d 0a 20 20  50 OFFSET 30}.  
16f0: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
1700: 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20  T count(*) FROM 
1710: 74 31 7d 0a 20 20 7d 20 7b 33 31 7d 0a 20 20 64  t1}.  } {31}.  d
1720: 6f 5f 74 65 73 74 20 77 68 65 72 65 6c 69 6d 69  o_test wherelimi
1730: 74 2d 32 2e 31 32 20 7b 0a 20 20 20 20 23 20 6c  t-2.12 {.    # l
1740: 69 6d 69 74 20 35 30 2c 20 6f 66 66 73 65 74 20  imit 50, offset 
1750: 33 30 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b  30.    execsql {
1760: 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 31 20 57  DELETE FROM t1 W
1770: 48 45 52 45 20 78 3d 32 20 4f 52 44 45 52 20 42  HERE x=2 ORDER B
1780: 59 20 78 20 4c 49 4d 49 54 20 33 30 2c 20 35 30  Y x LIMIT 30, 50
1790: 7d 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 53  }.    execsql {S
17a0: 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20 46  ELECT count(*) F
17b0: 52 4f 4d 20 74 31 7d 0a 20 20 7d 20 7b 33 31 7d  ROM t1}.  } {31}
17c0: 0a 20 20 64 6f 5f 74 65 73 74 20 77 68 65 72 65  .  do_test where
17d0: 6c 69 6d 69 74 2d 32 2e 31 33 20 7b 0a 20 20 20  limit-2.13 {.   
17e0: 20 65 78 65 63 73 71 6c 20 7b 44 45 4c 45 54 45   execsql {DELETE
17f0: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 78   FROM t1 WHERE x
1800: 3d 33 20 4f 52 44 45 52 20 42 59 20 78 20 4c 49  =3 ORDER BY x LI
1810: 4d 49 54 20 35 30 20 4f 46 46 53 45 54 20 35 30  MIT 50 OFFSET 50
1820: 7d 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 53  }.    execsql {S
1830: 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20 46  ELECT count(*) F
1840: 52 4f 4d 20 74 31 7d 0a 20 20 7d 20 7b 33 31 7d  ROM t1}.  } {31}
1850: 0a 0a 0a 20 20 63 72 65 61 74 65 5f 74 65 73 74  ...  create_test
1860: 5f 64 61 74 61 20 36 0a 20 20 64 6f 5f 74 65 73  _data 6.  do_tes
1870: 74 20 77 68 65 72 65 6c 69 6d 69 74 2d 33 2e 30  t wherelimit-3.0
1880: 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b   {.    execsql {
1890: 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20  SELECT count(*) 
18a0: 46 52 4f 4d 20 74 31 7d 0a 20 20 7d 20 7b 33 36  FROM t1}.  } {36
18b0: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 77 68 65 72  }.  do_test wher
18c0: 65 6c 69 6d 69 74 2d 33 2e 31 20 7b 0a 20 20 20  elimit-3.1 {.   
18d0: 20 65 78 65 63 73 71 6c 20 7b 55 50 44 41 54 45   execsql {UPDATE
18e0: 20 74 31 20 53 45 54 20 79 3d 31 20 57 48 45 52   t1 SET y=1 WHER
18f0: 45 20 78 3d 31 7d 0a 20 20 20 20 65 78 65 63 73  E x=1}.    execs
1900: 71 6c 20 7b 53 45 4c 45 43 54 20 63 6f 75 6e 74  ql {SELECT count
1910: 28 2a 29 20 46 52 4f 4d 20 74 31 20 57 48 45 52  (*) FROM t1 WHER
1920: 45 20 79 3d 31 7d 0a 20 20 7d 20 7b 31 31 7d 0a  E y=1}.  } {11}.
1930: 20 20 63 72 65 61 74 65 5f 74 65 73 74 5f 64 61    create_test_da
1940: 74 61 20 36 0a 20 20 64 6f 5f 74 65 73 74 20 77  ta 6.  do_test w
1950: 68 65 72 65 6c 69 6d 69 74 2d 33 2e 32 20 7b 0a  herelimit-3.2 {.
1960: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 55 50 44      execsql {UPD
1970: 41 54 45 20 74 31 20 53 45 54 20 79 3d 31 20 57  ATE t1 SET y=1 W
1980: 48 45 52 45 20 78 3d 31 20 4c 49 4d 49 54 20 35  HERE x=1 LIMIT 5
1990: 7d 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 53  }.    execsql {S
19a0: 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20 46  ELECT count(*) F
19b0: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 79 3d 31  ROM t1 WHERE y=1
19c0: 7d 0a 20 20 7d 20 7b 31 30 7d 0a 20 20 64 6f 5f  }.  } {10}.  do_
19d0: 74 65 73 74 20 77 68 65 72 65 6c 69 6d 69 74 2d  test wherelimit-
19e0: 33 2e 33 20 7b 0a 20 20 20 20 23 20 6c 69 6d 69  3.3 {.    # limi
19f0: 74 20 35 0a 20 20 20 20 65 78 65 63 73 71 6c 20  t 5.    execsql 
1a00: 7b 55 50 44 41 54 45 20 74 31 20 53 45 54 20 79  {UPDATE t1 SET y
1a10: 3d 32 20 57 48 45 52 45 20 78 3d 32 20 4f 52 44  =2 WHERE x=2 ORD
1a20: 45 52 20 42 59 20 78 20 4c 49 4d 49 54 20 35 7d  ER BY x LIMIT 5}
1a30: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 53 45  .    execsql {SE
1a40: 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52  LECT count(*) FR
1a50: 4f 4d 20 74 31 20 57 48 45 52 45 20 79 3d 32 7d  OM t1 WHERE y=2}
1a60: 0a 20 20 7d 20 7b 39 7d 0a 20 20 63 72 65 61 74  .  } {9}.  creat
1a70: 65 5f 74 65 73 74 5f 64 61 74 61 20 36 0a 20 20  e_test_data 6.  
1a80: 64 6f 5f 74 65 73 74 20 77 68 65 72 65 6c 69 6d  do_test wherelim
1a90: 69 74 2d 33 2e 34 20 7b 0a 20 20 20 20 23 20 6c  it-3.4 {.    # l
1aa0: 69 6d 69 74 20 35 2c 20 6f 66 66 73 65 74 20 32  imit 5, offset 2
1ab0: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 55 50  .    execsql {UP
1ac0: 44 41 54 45 20 74 31 20 53 45 54 20 79 3d 32 20  DATE t1 SET y=2 
1ad0: 57 48 45 52 45 20 78 3d 32 20 4f 52 44 45 52 20  WHERE x=2 ORDER 
1ae0: 42 59 20 78 20 4c 49 4d 49 54 20 35 20 4f 46 46  BY x LIMIT 5 OFF
1af0: 53 45 54 20 32 7d 0a 20 20 20 20 65 78 65 63 73  SET 2}.    execs
1b00: 71 6c 20 7b 53 45 4c 45 43 54 20 63 6f 75 6e 74  ql {SELECT count
1b10: 28 2a 29 20 46 52 4f 4d 20 74 31 20 57 48 45 52  (*) FROM t1 WHER
1b20: 45 20 79 3d 31 7d 0a 20 20 7d 20 7b 36 7d 0a 20  E y=1}.  } {6}. 
1b30: 20 64 6f 5f 74 65 73 74 20 77 68 65 72 65 6c 69   do_test whereli
1b40: 6d 69 74 2d 33 2e 35 20 7b 0a 20 20 20 20 23 20  mit-3.5 {.    # 
1b50: 6c 69 6d 69 74 20 35 2c 20 6f 66 66 73 65 74 20  limit 5, offset 
1b60: 2d 32 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b  -2.    execsql {
1b70: 55 50 44 41 54 45 20 74 31 20 53 45 54 20 79 3d  UPDATE t1 SET y=
1b80: 32 20 57 48 45 52 45 20 78 3d 32 20 4f 52 44 45  2 WHERE x=2 ORDE
1b90: 52 20 42 59 20 78 20 4c 49 4d 49 54 20 35 20 4f  R BY x LIMIT 5 O
1ba0: 46 46 53 45 54 20 2d 32 7d 0a 20 20 20 20 65 78  FFSET -2}.    ex
1bb0: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 63 6f  ecsql {SELECT co
1bc0: 75 6e 74 28 2a 29 20 46 52 4f 4d 20 74 31 20 57  unt(*) FROM t1 W
1bd0: 48 45 52 45 20 79 3d 31 7d 0a 20 20 7d 20 7b 35  HERE y=1}.  } {5
1be0: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 77 68 65 72  }.  do_test wher
1bf0: 65 6c 69 6d 69 74 2d 33 2e 36 20 7b 0a 20 20 20  elimit-3.6 {.   
1c00: 20 23 20 6c 69 6d 69 74 20 2d 35 20 28 6e 6f 20   # limit -5 (no 
1c10: 6c 69 6d 69 74 29 2c 20 6f 66 66 73 65 74 20 32  limit), offset 2
1c20: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 55 50  .    execsql {UP
1c30: 44 41 54 45 20 74 31 20 53 45 54 20 79 3d 33 20  DATE t1 SET y=3 
1c40: 57 48 45 52 45 20 78 3d 33 20 4f 52 44 45 52 20  WHERE x=3 ORDER 
1c50: 42 59 20 78 20 4c 49 4d 49 54 20 32 2c 20 2d 35  BY x LIMIT 2, -5
1c60: 7d 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 53  }.    execsql {S
1c70: 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20 46  ELECT count(*) F
1c80: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 79 3d 33  ROM t1 WHERE y=3
1c90: 7d 0a 20 20 7d 20 7b 38 7d 0a 20 20 64 6f 5f 74  }.  } {8}.  do_t
1ca0: 65 73 74 20 77 68 65 72 65 6c 69 6d 69 74 2d 33  est wherelimit-3
1cb0: 2e 37 20 7b 0a 20 20 20 20 23 20 6c 69 6d 69 74  .7 {.    # limit
1cc0: 20 35 2c 20 6f 66 66 73 65 74 20 2d 32 20 28 6e   5, offset -2 (n
1cd0: 6f 20 6f 66 66 73 65 74 29 0a 20 20 20 20 65 78  o offset).    ex
1ce0: 65 63 73 71 6c 20 7b 55 50 44 41 54 45 20 74 31  ecsql {UPDATE t1
1cf0: 20 53 45 54 20 79 3d 33 20 57 48 45 52 45 20 78   SET y=3 WHERE x
1d00: 3d 33 20 4f 52 44 45 52 20 42 59 20 78 20 4c 49  =3 ORDER BY x LI
1d10: 4d 49 54 20 2d 32 2c 20 35 7d 0a 20 20 20 20 65  MIT -2, 5}.    e
1d20: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 63  xecsql {SELECT c
1d30: 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20 74 31 20  ount(*) FROM t1 
1d40: 57 48 45 52 45 20 79 3d 33 7d 0a 20 20 7d 20 7b  WHERE y=3}.  } {
1d50: 31 30 7d 0a 0a 20 20 64 6f 5f 74 65 73 74 20 77  10}..  do_test w
1d60: 68 65 72 65 6c 69 6d 69 74 2d 33 2e 38 20 7b 0a  herelimit-3.8 {.
1d70: 20 20 20 20 23 20 6c 69 6d 69 74 20 2d 35 20 28      # limit -5 (
1d80: 6e 6f 20 6c 69 6d 69 74 29 2c 20 6f 66 66 73 65  no limit), offse
1d90: 74 20 2d 32 20 28 6e 6f 20 6f 66 66 73 65 74 29  t -2 (no offset)
1da0: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 55 50  .    execsql {UP
1db0: 44 41 54 45 20 74 31 20 53 45 54 20 79 3d 34 20  DATE t1 SET y=4 
1dc0: 57 48 45 52 45 20 78 3d 34 20 4f 52 44 45 52 20  WHERE x=4 ORDER 
1dd0: 42 59 20 78 20 4c 49 4d 49 54 20 2d 32 2c 20 2d  BY x LIMIT -2, -
1de0: 35 7d 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b  5}.    execsql {
1df0: 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20  SELECT count(*) 
1e00: 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 79 3d  FROM t1 WHERE y=
1e10: 34 7d 0a 20 20 7d 20 7b 39 7d 0a 20 20 63 72 65  4}.  } {9}.  cre
1e20: 61 74 65 5f 74 65 73 74 5f 64 61 74 61 20 36 0a  ate_test_data 6.
1e30: 20 20 64 6f 5f 74 65 73 74 20 77 68 65 72 65 6c    do_test wherel
1e40: 69 6d 69 74 2d 33 2e 39 20 7b 0a 20 20 20 20 23  imit-3.9 {.    #
1e50: 20 6c 69 6d 69 74 20 35 2c 20 6f 66 66 73 65 74   limit 5, offset
1e60: 20 32 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b   2.    execsql {
1e70: 55 50 44 41 54 45 20 74 31 20 53 45 54 20 79 3d  UPDATE t1 SET y=
1e80: 34 20 57 48 45 52 45 20 78 3d 35 20 4f 52 44 45  4 WHERE x=5 ORDE
1e90: 52 20 42 59 20 78 20 4c 49 4d 49 54 20 32 2c 20  R BY x LIMIT 2, 
1ea0: 35 7d 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b  5}.    execsql {
1eb0: 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20  SELECT count(*) 
1ec0: 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 79 3d  FROM t1 WHERE y=
1ed0: 34 7d 0a 20 20 7d 20 7b 39 7d 0a 20 20 64 6f 5f  4}.  } {9}.  do_
1ee0: 74 65 73 74 20 77 68 65 72 65 6c 69 6d 69 74 2d  test wherelimit-
1ef0: 33 2e 31 30 20 7b 0a 20 20 20 20 23 20 6c 69 6d  3.10 {.    # lim
1f00: 69 74 20 35 2c 20 6f 66 66 73 65 74 20 35 0a 20  it 5, offset 5. 
1f10: 20 20 20 65 78 65 63 73 71 6c 20 7b 55 50 44 41     execsql {UPDA
1f20: 54 45 20 74 31 20 53 45 54 20 79 3d 34 20 57 48  TE t1 SET y=4 WH
1f30: 45 52 45 20 78 3d 36 20 4f 52 44 45 52 20 42 59  ERE x=6 ORDER BY
1f40: 20 78 20 4c 49 4d 49 54 20 35 20 4f 46 46 53 45   x LIMIT 5 OFFSE
1f50: 54 20 35 7d 0a 20 20 20 20 65 78 65 63 73 71 6c  T 5}.    execsql
1f60: 20 7b 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a   {SELECT count(*
1f70: 29 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  ) FROM t1 WHERE 
1f80: 79 3d 31 7d 0a 20 20 7d 20 7b 36 7d 0a 20 20 64  y=1}.  } {6}.  d
1f90: 6f 5f 74 65 73 74 20 77 68 65 72 65 6c 69 6d 69  o_test wherelimi
1fa0: 74 2d 33 2e 31 31 20 7b 0a 20 20 20 20 23 20 6c  t-3.11 {.    # l
1fb0: 69 6d 69 74 20 35 30 2c 20 6f 66 66 73 65 74 20  imit 50, offset 
1fc0: 33 30 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b  30.    execsql {
1fd0: 55 50 44 41 54 45 20 74 31 20 53 45 54 20 79 3d  UPDATE t1 SET y=
1fe0: 31 20 57 48 45 52 45 20 78 3d 31 20 4f 52 44 45  1 WHERE x=1 ORDE
1ff0: 52 20 42 59 20 78 20 4c 49 4d 49 54 20 35 30 20  R BY x LIMIT 50 
2000: 4f 46 46 53 45 54 20 33 30 7d 0a 20 20 20 20 65  OFFSET 30}.    e
2010: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 63  xecsql {SELECT c
2020: 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20 74 31 20  ount(*) FROM t1 
2030: 57 48 45 52 45 20 79 3d 31 7d 0a 20 20 7d 20 7b  WHERE y=1}.  } {
2040: 36 7d 0a 20 20 64 6f 5f 74 65 73 74 20 77 68 65  6}.  do_test whe
2050: 72 65 6c 69 6d 69 74 2d 33 2e 31 32 20 7b 0a 20  relimit-3.12 {. 
2060: 20 20 20 23 20 6c 69 6d 69 74 20 35 30 2c 20 6f     # limit 50, o
2070: 66 66 73 65 74 20 33 30 0a 20 20 20 20 65 78 65  ffset 30.    exe
2080: 63 73 71 6c 20 7b 55 50 44 41 54 45 20 74 31 20  csql {UPDATE t1 
2090: 53 45 54 20 79 3d 31 20 57 48 45 52 45 20 78 3d  SET y=1 WHERE x=
20a0: 32 20 4f 52 44 45 52 20 42 59 20 78 20 4c 49 4d  2 ORDER BY x LIM
20b0: 49 54 20 33 30 2c 20 35 30 7d 0a 20 20 20 20 65  IT 30, 50}.    e
20c0: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 63  xecsql {SELECT c
20d0: 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20 74 31 20  ount(*) FROM t1 
20e0: 57 48 45 52 45 20 79 3d 31 7d 0a 20 20 7d 20 7b  WHERE y=1}.  } {
20f0: 36 7d 0a 20 20 64 6f 5f 74 65 73 74 20 77 68 65  6}.  do_test whe
2100: 72 65 6c 69 6d 69 74 2d 33 2e 31 33 20 7b 0a 20  relimit-3.13 {. 
2110: 20 20 20 65 78 65 63 73 71 6c 20 7b 55 50 44 41     execsql {UPDA
2120: 54 45 20 74 31 20 53 45 54 20 79 3d 31 20 57 48  TE t1 SET y=1 WH
2130: 45 52 45 20 78 3d 33 20 4f 52 44 45 52 20 42 59  ERE x=3 ORDER BY
2140: 20 78 20 4c 49 4d 49 54 20 35 30 20 4f 46 46 53   x LIMIT 50 OFFS
2150: 45 54 20 35 30 7d 0a 20 20 20 20 65 78 65 63 73  ET 50}.    execs
2160: 71 6c 20 7b 53 45 4c 45 43 54 20 63 6f 75 6e 74  ql {SELECT count
2170: 28 2a 29 20 46 52 4f 4d 20 74 31 20 57 48 45 52  (*) FROM t1 WHER
2180: 45 20 79 3d 31 7d 0a 20 20 7d 20 7b 36 7d 0a 0a  E y=1}.  } {6}..
2190: 7d 0a 0a 66 69 6e 69 73 68 5f 74 65 73 74 0a     }..finish_test.