/ Hex Artifact Content
Login

Artifact f06b83657bcf26f9ce805e67450e189e282143b2:


0000: 23 20 32 30 31 35 2d 31 30 2d 30 36 0a 23 0a 23  # 2015-10-06.#.#
0010: 20 54 68 65 20 61 75 74 68 6f 72 20 64 69 73 63   The author disc
0020: 6c 61 69 6d 73 20 63 6f 70 79 72 69 67 68 74 20  laims copyright 
0030: 74 6f 20 74 68 69 73 20 73 6f 75 72 63 65 20 63  to this source c
0040: 6f 64 65 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f  ode.  In place o
0050: 66 0a 23 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69  f.# a legal noti
0060: 63 65 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c  ce, here is a bl
0070: 65 73 73 69 6e 67 3a 0a 23 0a 23 20 20 20 20 4d  essing:.#.#    M
0080: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
0090: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 23 20 20  nd not evil..#  
00a0: 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20 66    May you find f
00b0: 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20 79  orgiveness for y
00c0: 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72 67  ourself and forg
00d0: 69 76 65 20 6f 74 68 65 72 73 2e 0a 23 20 20 20  ive others..#   
00e0: 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65 20 66   May you share f
00f0: 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74 61 6b  reely, never tak
0100: 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20 79 6f  ing more than yo
0110: 75 20 67 69 76 65 2e 0a 23 0a 23 2a 2a 2a 2a 2a  u 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 0a 23 20 0a 23 20 54 68 69 73 20 66 69 6c  **.# .# This fil
0170: 65 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74 65 73  e implements tes
0180: 74 20 63 61 73 65 73 20 66 6f 72 20 74 68 65 20  t cases for the 
0190: 5b 62 36 35 63 62 32 63 38 64 39 31 66 36 36 38  [b65cb2c8d91f668
01a0: 35 38 34 31 64 37 64 31 65 31 33 62 36 5d 0a 23  5841d7d1e13b6].#
01b0: 20 62 75 67 3a 20 20 43 6f 72 72 65 63 74 20 68   bug:  Correct h
01c0: 61 6e 64 6c 69 6e 67 20 6f 66 20 4c 49 4d 49 54  andling of LIMIT
01d0: 20 61 6e 64 20 4f 46 46 53 45 54 20 6f 6e 20 61   and OFFSET on a
01e0: 20 55 4e 49 4f 4e 20 41 4c 4c 20 71 75 65 72 79   UNION ALL query
01f0: 20 77 68 65 72 65 0a 23 20 74 68 65 20 72 69 67   where.# the rig
0200: 68 74 2d 68 61 6e 64 20 53 45 4c 45 43 54 20 63  ht-hand SELECT c
0210: 6f 6e 74 61 69 6e 73 20 61 6e 20 4f 52 44 45 52  ontains an ORDER
0220: 20 42 59 20 69 6e 20 61 20 73 75 62 71 75 65 72   BY in a subquer
0230: 79 2e 0a 23 0a 0a 73 65 74 20 74 65 73 74 64 69  y..#..set testdi
0240: 72 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20  r [file dirname 
0250: 24 61 72 67 76 30 5d 0a 73 6f 75 72 63 65 20 24  $argv0].source $
0260: 74 65 73 74 64 69 72 2f 74 65 73 74 65 72 2e 74  testdir/tester.t
0270: 63 6c 0a 0a 69 66 63 61 70 61 62 6c 65 20 21 63  cl..ifcapable !c
0280: 6f 6d 70 6f 75 6e 64 20 7b 0a 20 20 66 69 6e 69  ompound {.  fini
0290: 73 68 5f 74 65 73 74 0a 20 20 72 65 74 75 72 6e  sh_test.  return
02a0: 0a 7d 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74  .}..do_execsql_t
02b0: 65 73 74 20 6f 66 66 73 65 74 31 2d 31 2e 31 20  est offset1-1.1 
02c0: 7b 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45  {.  CREATE TABLE
02d0: 20 74 31 28 61 2c 62 29 3b 0a 20 20 49 4e 53 45   t1(a,b);.  INSE
02e0: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
02f0: 53 28 31 2c 27 61 27 29 2c 28 32 2c 27 62 27 29  S(1,'a'),(2,'b')
0300: 2c 28 33 2c 27 63 27 29 2c 28 34 2c 27 64 27 29  ,(3,'c'),(4,'d')
0310: 2c 28 35 2c 27 65 27 29 3b 0a 20 20 43 52 45 41  ,(5,'e');.  CREA
0320: 54 45 20 54 41 42 4c 45 20 74 32 28 78 2c 79 29  TE TABLE t2(x,y)
0330: 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  ;.  INSERT INTO 
0340: 74 32 20 56 41 4c 55 45 53 28 38 2c 27 79 27 29  t2 VALUES(8,'y')
0350: 2c 28 39 2c 27 7a 27 29 2c 28 36 2c 27 77 27 29  ,(9,'z'),(6,'w')
0360: 2c 28 37 2c 27 78 27 29 3b 0a 20 20 53 45 4c 45  ,(7,'x');.  SELE
0370: 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d  CT count(*) FROM
0380: 20 74 31 2c 20 74 32 3b 0a 7d 20 7b 32 30 7d 0a   t1, t2;.} {20}.
0390: 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74  .do_execsql_test
03a0: 20 6f 66 66 73 65 74 31 2d 31 2e 32 2e 30 20 7b   offset1-1.2.0 {
03b0: 0a 20 20 53 45 4c 45 43 54 20 61 2c 20 62 20 46  .  SELECT a, b F
03c0: 52 4f 4d 20 74 31 0a 20 20 55 4e 49 4f 4e 20 41  ROM t1.  UNION A
03d0: 4c 4c 0a 20 20 53 45 4c 45 43 54 20 2a 20 46 52  LL.  SELECT * FR
03e0: 4f 4d 20 28 53 45 4c 45 43 54 20 78 2c 20 79 20  OM (SELECT x, y 
03f0: 46 52 4f 4d 20 74 32 20 4f 52 44 45 52 20 42 59  FROM t2 ORDER BY
0400: 20 79 29 0a 20 20 4c 49 4d 49 54 20 33 20 4f 46   y).  LIMIT 3 OF
0410: 46 53 45 54 20 30 3b 0a 7d 20 7b 31 20 61 20 32  FSET 0;.} {1 a 2
0420: 20 62 20 33 20 63 7d 0a 64 6f 5f 65 78 65 63 73   b 3 c}.do_execs
0430: 71 6c 5f 74 65 73 74 20 6f 66 66 73 65 74 31 2d  ql_test offset1-
0440: 31 2e 32 2e 31 20 7b 0a 20 20 53 45 4c 45 43 54  1.2.1 {.  SELECT
0450: 20 61 2c 20 62 20 46 52 4f 4d 20 74 31 0a 20 20   a, b FROM t1.  
0460: 55 4e 49 4f 4e 20 41 4c 4c 0a 20 20 53 45 4c 45  UNION ALL.  SELE
0470: 43 54 20 2a 20 46 52 4f 4d 20 28 53 45 4c 45 43  CT * FROM (SELEC
0480: 54 20 78 2c 20 79 20 46 52 4f 4d 20 74 32 20 4f  T x, y FROM t2 O
0490: 52 44 45 52 20 42 59 20 79 29 0a 20 20 4c 49 4d  RDER BY y).  LIM
04a0: 49 54 20 33 20 4f 46 46 53 45 54 20 31 3b 0a 7d  IT 3 OFFSET 1;.}
04b0: 20 7b 32 20 62 20 33 20 63 20 34 20 64 7d 0a 64   {2 b 3 c 4 d}.d
04c0: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 6f  o_execsql_test o
04d0: 66 66 73 65 74 31 2d 31 2e 32 2e 32 20 7b 0a 20  ffset1-1.2.2 {. 
04e0: 20 53 45 4c 45 43 54 20 61 2c 20 62 20 46 52 4f   SELECT a, b FRO
04f0: 4d 20 74 31 0a 20 20 55 4e 49 4f 4e 20 41 4c 4c  M t1.  UNION ALL
0500: 0a 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  .  SELECT * FROM
0510: 20 28 53 45 4c 45 43 54 20 78 2c 20 79 20 46 52   (SELECT x, y FR
0520: 4f 4d 20 74 32 20 4f 52 44 45 52 20 42 59 20 79  OM t2 ORDER BY y
0530: 29 0a 20 20 4c 49 4d 49 54 20 33 20 4f 46 46 53  ).  LIMIT 3 OFFS
0540: 45 54 20 32 3b 0a 7d 20 7b 33 20 63 20 34 20 64  ET 2;.} {3 c 4 d
0550: 20 35 20 65 7d 0a 64 6f 5f 65 78 65 63 73 71 6c   5 e}.do_execsql
0560: 5f 74 65 73 74 20 6f 66 66 73 65 74 31 2d 31 2e  _test offset1-1.
0570: 32 2e 33 20 7b 0a 20 20 53 45 4c 45 43 54 20 61  2.3 {.  SELECT a
0580: 2c 20 62 20 46 52 4f 4d 20 74 31 0a 20 20 55 4e  , b FROM t1.  UN
0590: 49 4f 4e 20 41 4c 4c 0a 20 20 53 45 4c 45 43 54  ION ALL.  SELECT
05a0: 20 2a 20 46 52 4f 4d 20 28 53 45 4c 45 43 54 20   * FROM (SELECT 
05b0: 78 2c 20 79 20 46 52 4f 4d 20 74 32 20 4f 52 44  x, y FROM t2 ORD
05c0: 45 52 20 42 59 20 79 29 0a 20 20 4c 49 4d 49 54  ER BY y).  LIMIT
05d0: 20 33 20 4f 46 46 53 45 54 20 33 3b 0a 7d 20 7b   3 OFFSET 3;.} {
05e0: 34 20 64 20 35 20 65 20 36 20 77 7d 0a 64 6f 5f  4 d 5 e 6 w}.do_
05f0: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 6f 66 66  execsql_test off
0600: 73 65 74 31 2d 31 2e 32 2e 34 20 7b 0a 20 20 53  set1-1.2.4 {.  S
0610: 45 4c 45 43 54 20 61 2c 20 62 20 46 52 4f 4d 20  ELECT a, b FROM 
0620: 74 31 0a 20 20 55 4e 49 4f 4e 20 41 4c 4c 0a 20  t1.  UNION ALL. 
0630: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 28   SELECT * FROM (
0640: 53 45 4c 45 43 54 20 78 2c 20 79 20 46 52 4f 4d  SELECT x, y FROM
0650: 20 74 32 20 4f 52 44 45 52 20 42 59 20 79 29 0a   t2 ORDER BY y).
0660: 20 20 4c 49 4d 49 54 20 33 20 4f 46 46 53 45 54    LIMIT 3 OFFSET
0670: 20 34 3b 0a 7d 20 7b 35 20 65 20 36 20 77 20 37   4;.} {5 e 6 w 7
0680: 20 78 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74   x}.do_execsql_t
0690: 65 73 74 20 6f 66 66 73 65 74 31 2d 31 2e 32 2e  est offset1-1.2.
06a0: 35 20 7b 0a 20 20 53 45 4c 45 43 54 20 61 2c 20  5 {.  SELECT a, 
06b0: 62 20 46 52 4f 4d 20 74 31 0a 20 20 55 4e 49 4f  b FROM t1.  UNIO
06c0: 4e 20 41 4c 4c 0a 20 20 53 45 4c 45 43 54 20 2a  N ALL.  SELECT *
06d0: 20 46 52 4f 4d 20 28 53 45 4c 45 43 54 20 78 2c   FROM (SELECT x,
06e0: 20 79 20 46 52 4f 4d 20 74 32 20 4f 52 44 45 52   y FROM t2 ORDER
06f0: 20 42 59 20 79 29 0a 20 20 4c 49 4d 49 54 20 33   BY y).  LIMIT 3
0700: 20 4f 46 46 53 45 54 20 35 3b 0a 7d 20 7b 36 20   OFFSET 5;.} {6 
0710: 77 20 37 20 78 20 38 20 79 7d 0a 64 6f 5f 65 78  w 7 x 8 y}.do_ex
0720: 65 63 73 71 6c 5f 74 65 73 74 20 6f 66 66 73 65  ecsql_test offse
0730: 74 31 2d 31 2e 32 2e 36 20 7b 0a 20 20 53 45 4c  t1-1.2.6 {.  SEL
0740: 45 43 54 20 61 2c 20 62 20 46 52 4f 4d 20 74 31  ECT a, b FROM t1
0750: 0a 20 20 55 4e 49 4f 4e 20 41 4c 4c 0a 20 20 53  .  UNION ALL.  S
0760: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 28 53 45  ELECT * FROM (SE
0770: 4c 45 43 54 20 78 2c 20 79 20 46 52 4f 4d 20 74  LECT x, y FROM t
0780: 32 20 4f 52 44 45 52 20 42 59 20 79 29 0a 20 20  2 ORDER BY y).  
0790: 4c 49 4d 49 54 20 33 20 4f 46 46 53 45 54 20 36  LIMIT 3 OFFSET 6
07a0: 3b 0a 7d 20 7b 37 20 78 20 38 20 79 20 39 20 7a  ;.} {7 x 8 y 9 z
07b0: 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  }.do_execsql_tes
07c0: 74 20 6f 66 66 73 65 74 31 2d 31 2e 32 2e 37 20  t offset1-1.2.7 
07d0: 7b 0a 20 20 53 45 4c 45 43 54 20 61 2c 20 62 20  {.  SELECT a, b 
07e0: 46 52 4f 4d 20 74 31 0a 20 20 55 4e 49 4f 4e 20  FROM t1.  UNION 
07f0: 41 4c 4c 0a 20 20 53 45 4c 45 43 54 20 2a 20 46  ALL.  SELECT * F
0800: 52 4f 4d 20 28 53 45 4c 45 43 54 20 78 2c 20 79  ROM (SELECT x, y
0810: 20 46 52 4f 4d 20 74 32 20 4f 52 44 45 52 20 42   FROM t2 ORDER B
0820: 59 20 79 29 0a 20 20 4c 49 4d 49 54 20 33 20 4f  Y y).  LIMIT 3 O
0830: 46 46 53 45 54 20 37 3b 0a 7d 20 7b 38 20 79 20  FFSET 7;.} {8 y 
0840: 39 20 7a 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f  9 z}.do_execsql_
0850: 74 65 73 74 20 6f 66 66 73 65 74 31 2d 31 2e 32  test offset1-1.2
0860: 2e 38 20 7b 0a 20 20 53 45 4c 45 43 54 20 61 2c  .8 {.  SELECT a,
0870: 20 62 20 46 52 4f 4d 20 74 31 0a 20 20 55 4e 49   b FROM t1.  UNI
0880: 4f 4e 20 41 4c 4c 0a 20 20 53 45 4c 45 43 54 20  ON ALL.  SELECT 
0890: 2a 20 46 52 4f 4d 20 28 53 45 4c 45 43 54 20 78  * FROM (SELECT x
08a0: 2c 20 79 20 46 52 4f 4d 20 74 32 20 4f 52 44 45  , y FROM t2 ORDE
08b0: 52 20 42 59 20 79 29 0a 20 20 4c 49 4d 49 54 20  R BY y).  LIMIT 
08c0: 33 20 4f 46 46 53 45 54 20 38 3b 0a 7d 20 7b 39  3 OFFSET 8;.} {9
08d0: 20 7a 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74   z}.do_execsql_t
08e0: 65 73 74 20 6f 66 66 73 65 74 31 2d 31 2e 32 2e  est offset1-1.2.
08f0: 39 20 7b 0a 20 20 53 45 4c 45 43 54 20 61 2c 20  9 {.  SELECT a, 
0900: 62 20 46 52 4f 4d 20 74 31 0a 20 20 55 4e 49 4f  b FROM t1.  UNIO
0910: 4e 20 41 4c 4c 0a 20 20 53 45 4c 45 43 54 20 2a  N ALL.  SELECT *
0920: 20 46 52 4f 4d 20 28 53 45 4c 45 43 54 20 78 2c   FROM (SELECT x,
0930: 20 79 20 46 52 4f 4d 20 74 32 20 4f 52 44 45 52   y FROM t2 ORDER
0940: 20 42 59 20 79 29 0a 20 20 4c 49 4d 49 54 20 33   BY y).  LIMIT 3
0950: 20 4f 46 46 53 45 54 20 39 3b 0a 7d 20 7b 7d 0a   OFFSET 9;.} {}.
0960: 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74  .do_execsql_test
0970: 20 6f 66 66 73 65 74 31 2d 31 2e 33 2e 30 20 7b   offset1-1.3.0 {
0980: 0a 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  .  SELECT * FROM
0990: 20 74 31 20 4c 49 4d 49 54 20 30 3b 0a 7d 20 7b   t1 LIMIT 0;.} {
09a0: 7d 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  }..do_execsql_te
09b0: 73 74 20 6f 66 66 73 65 74 31 2d 31 2e 34 2e 30  st offset1-1.4.0
09c0: 20 7b 0a 20 20 53 45 4c 45 43 54 20 61 2c 20 62   {.  SELECT a, b
09d0: 20 46 52 4f 4d 20 74 31 0a 20 20 55 4e 49 4f 4e   FROM t1.  UNION
09e0: 20 41 4c 4c 0a 20 20 53 45 4c 45 43 54 20 2a 20   ALL.  SELECT * 
09f0: 46 52 4f 4d 20 28 53 45 4c 45 43 54 20 78 2c 20  FROM (SELECT x, 
0a00: 79 20 46 52 4f 4d 20 74 32 20 4f 52 44 45 52 20  y FROM t2 ORDER 
0a10: 42 59 20 79 29 0a 20 20 4c 49 4d 49 54 20 30 20  BY y).  LIMIT 0 
0a20: 4f 46 46 53 45 54 20 31 3b 0a 7d 20 7b 7d 0a 64  OFFSET 1;.} {}.d
0a30: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 6f  o_execsql_test o
0a40: 66 66 73 65 74 31 2d 31 2e 34 2e 31 20 7b 0a 20  ffset1-1.4.1 {. 
0a50: 20 53 45 4c 45 43 54 20 61 2c 20 62 20 46 52 4f   SELECT a, b FRO
0a60: 4d 20 74 31 0a 20 20 55 4e 49 4f 4e 20 41 4c 4c  M t1.  UNION ALL
0a70: 0a 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  .  SELECT * FROM
0a80: 20 28 53 45 4c 45 43 54 20 78 2c 20 79 20 46 52   (SELECT x, y FR
0a90: 4f 4d 20 74 32 20 4f 52 44 45 52 20 42 59 20 79  OM t2 ORDER BY y
0aa0: 29 0a 20 20 4c 49 4d 49 54 20 31 20 4f 46 46 53  ).  LIMIT 1 OFFS
0ab0: 45 54 20 31 3b 0a 7d 20 7b 32 20 62 7d 0a 64 6f  ET 1;.} {2 b}.do
0ac0: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 6f 66  _execsql_test of
0ad0: 66 73 65 74 31 2d 31 2e 34 2e 32 20 7b 0a 20 20  fset1-1.4.2 {.  
0ae0: 53 45 4c 45 43 54 20 61 2c 20 62 20 46 52 4f 4d  SELECT a, b FROM
0af0: 20 74 31 0a 20 20 55 4e 49 4f 4e 20 41 4c 4c 0a   t1.  UNION ALL.
0b00: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
0b10: 28 53 45 4c 45 43 54 20 78 2c 20 79 20 46 52 4f  (SELECT x, y FRO
0b20: 4d 20 74 32 20 4f 52 44 45 52 20 42 59 20 79 29  M t2 ORDER BY y)
0b30: 0a 20 20 4c 49 4d 49 54 20 32 20 4f 46 46 53 45  .  LIMIT 2 OFFSE
0b40: 54 20 31 3b 0a 7d 20 7b 32 20 62 20 33 20 63 7d  T 1;.} {2 b 3 c}
0b50: 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74  .do_execsql_test
0b60: 20 6f 66 66 73 65 74 31 2d 31 2e 34 2e 33 20 7b   offset1-1.4.3 {
0b70: 0a 20 20 53 45 4c 45 43 54 20 61 2c 20 62 20 46  .  SELECT a, b F
0b80: 52 4f 4d 20 74 31 0a 20 20 55 4e 49 4f 4e 20 41  ROM t1.  UNION A
0b90: 4c 4c 0a 20 20 53 45 4c 45 43 54 20 2a 20 46 52  LL.  SELECT * FR
0ba0: 4f 4d 20 28 53 45 4c 45 43 54 20 78 2c 20 79 20  OM (SELECT x, y 
0bb0: 46 52 4f 4d 20 74 32 20 4f 52 44 45 52 20 42 59  FROM t2 ORDER BY
0bc0: 20 79 29 0a 20 20 4c 49 4d 49 54 20 33 20 4f 46   y).  LIMIT 3 OF
0bd0: 46 53 45 54 20 31 3b 0a 7d 20 7b 32 20 62 20 33  FSET 1;.} {2 b 3
0be0: 20 63 20 34 20 64 7d 0a 64 6f 5f 65 78 65 63 73   c 4 d}.do_execs
0bf0: 71 6c 5f 74 65 73 74 20 6f 66 66 73 65 74 31 2d  ql_test offset1-
0c00: 31 2e 34 2e 34 20 7b 0a 20 20 53 45 4c 45 43 54  1.4.4 {.  SELECT
0c10: 20 61 2c 20 62 20 46 52 4f 4d 20 74 31 0a 20 20   a, b FROM t1.  
0c20: 55 4e 49 4f 4e 20 41 4c 4c 0a 20 20 53 45 4c 45  UNION ALL.  SELE
0c30: 43 54 20 2a 20 46 52 4f 4d 20 28 53 45 4c 45 43  CT * FROM (SELEC
0c40: 54 20 78 2c 20 79 20 46 52 4f 4d 20 74 32 20 4f  T x, y FROM t2 O
0c50: 52 44 45 52 20 42 59 20 79 29 0a 20 20 4c 49 4d  RDER BY y).  LIM
0c60: 49 54 20 34 20 4f 46 46 53 45 54 20 31 3b 0a 7d  IT 4 OFFSET 1;.}
0c70: 20 7b 32 20 62 20 33 20 63 20 34 20 64 20 35 20   {2 b 3 c 4 d 5 
0c80: 65 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  e}.do_execsql_te
0c90: 73 74 20 6f 66 66 73 65 74 31 2d 31 2e 34 2e 35  st offset1-1.4.5
0ca0: 20 7b 0a 20 20 53 45 4c 45 43 54 20 61 2c 20 62   {.  SELECT a, b
0cb0: 20 46 52 4f 4d 20 74 31 0a 20 20 55 4e 49 4f 4e   FROM t1.  UNION
0cc0: 20 41 4c 4c 0a 20 20 53 45 4c 45 43 54 20 2a 20   ALL.  SELECT * 
0cd0: 46 52 4f 4d 20 28 53 45 4c 45 43 54 20 78 2c 20  FROM (SELECT x, 
0ce0: 79 20 46 52 4f 4d 20 74 32 20 4f 52 44 45 52 20  y FROM t2 ORDER 
0cf0: 42 59 20 79 29 0a 20 20 4c 49 4d 49 54 20 35 20  BY y).  LIMIT 5 
0d00: 4f 46 46 53 45 54 20 31 3b 0a 7d 20 7b 32 20 62  OFFSET 1;.} {2 b
0d10: 20 33 20 63 20 34 20 64 20 35 20 65 20 36 20 77   3 c 4 d 5 e 6 w
0d20: 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  }.do_execsql_tes
0d30: 74 20 6f 66 66 73 65 74 31 2d 31 2e 34 2e 36 20  t offset1-1.4.6 
0d40: 7b 0a 20 20 53 45 4c 45 43 54 20 61 2c 20 62 20  {.  SELECT a, b 
0d50: 46 52 4f 4d 20 74 31 0a 20 20 55 4e 49 4f 4e 20  FROM t1.  UNION 
0d60: 41 4c 4c 0a 20 20 53 45 4c 45 43 54 20 2a 20 46  ALL.  SELECT * F
0d70: 52 4f 4d 20 28 53 45 4c 45 43 54 20 78 2c 20 79  ROM (SELECT x, y
0d80: 20 46 52 4f 4d 20 74 32 20 4f 52 44 45 52 20 42   FROM t2 ORDER B
0d90: 59 20 79 29 0a 20 20 4c 49 4d 49 54 20 36 20 4f  Y y).  LIMIT 6 O
0da0: 46 46 53 45 54 20 31 3b 0a 7d 20 7b 32 20 62 20  FFSET 1;.} {2 b 
0db0: 33 20 63 20 34 20 64 20 35 20 65 20 36 20 77 20  3 c 4 d 5 e 6 w 
0dc0: 37 20 78 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f  7 x}.do_execsql_
0dd0: 74 65 73 74 20 6f 66 66 73 65 74 31 2d 31 2e 34  test offset1-1.4
0de0: 2e 37 20 7b 0a 20 20 53 45 4c 45 43 54 20 61 2c  .7 {.  SELECT a,
0df0: 20 62 20 46 52 4f 4d 20 74 31 0a 20 20 55 4e 49   b FROM t1.  UNI
0e00: 4f 4e 20 41 4c 4c 0a 20 20 53 45 4c 45 43 54 20  ON ALL.  SELECT 
0e10: 2a 20 46 52 4f 4d 20 28 53 45 4c 45 43 54 20 78  * FROM (SELECT x
0e20: 2c 20 79 20 46 52 4f 4d 20 74 32 20 4f 52 44 45  , y FROM t2 ORDE
0e30: 52 20 42 59 20 79 29 0a 20 20 4c 49 4d 49 54 20  R BY y).  LIMIT 
0e40: 37 20 4f 46 46 53 45 54 20 31 3b 0a 7d 20 7b 32  7 OFFSET 1;.} {2
0e50: 20 62 20 33 20 63 20 34 20 64 20 35 20 65 20 36   b 3 c 4 d 5 e 6
0e60: 20 77 20 37 20 78 20 38 20 79 7d 0a 64 6f 5f 65   w 7 x 8 y}.do_e
0e70: 78 65 63 73 71 6c 5f 74 65 73 74 20 6f 66 66 73  xecsql_test offs
0e80: 65 74 31 2d 31 2e 34 2e 38 20 7b 0a 20 20 53 45  et1-1.4.8 {.  SE
0e90: 4c 45 43 54 20 61 2c 20 62 20 46 52 4f 4d 20 74  LECT a, b FROM t
0ea0: 31 0a 20 20 55 4e 49 4f 4e 20 41 4c 4c 0a 20 20  1.  UNION ALL.  
0eb0: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 28 53  SELECT * FROM (S
0ec0: 45 4c 45 43 54 20 78 2c 20 79 20 46 52 4f 4d 20  ELECT x, y FROM 
0ed0: 74 32 20 4f 52 44 45 52 20 42 59 20 79 29 0a 20  t2 ORDER BY y). 
0ee0: 20 4c 49 4d 49 54 20 38 20 4f 46 46 53 45 54 20   LIMIT 8 OFFSET 
0ef0: 31 3b 0a 7d 20 7b 32 20 62 20 33 20 63 20 34 20  1;.} {2 b 3 c 4 
0f00: 64 20 35 20 65 20 36 20 77 20 37 20 78 20 38 20  d 5 e 6 w 7 x 8 
0f10: 79 20 39 20 7a 7d 0a 64 6f 5f 65 78 65 63 73 71  y 9 z}.do_execsq
0f20: 6c 5f 74 65 73 74 20 6f 66 66 73 65 74 31 2d 31  l_test offset1-1
0f30: 2e 34 2e 39 20 7b 0a 20 20 53 45 4c 45 43 54 20  .4.9 {.  SELECT 
0f40: 61 2c 20 62 20 46 52 4f 4d 20 74 31 0a 20 20 55  a, b FROM t1.  U
0f50: 4e 49 4f 4e 20 41 4c 4c 0a 20 20 53 45 4c 45 43  NION ALL.  SELEC
0f60: 54 20 2a 20 46 52 4f 4d 20 28 53 45 4c 45 43 54  T * FROM (SELECT
0f70: 20 78 2c 20 79 20 46 52 4f 4d 20 74 32 20 4f 52   x, y FROM t2 OR
0f80: 44 45 52 20 42 59 20 79 29 0a 20 20 4c 49 4d 49  DER BY y).  LIMI
0f90: 54 20 39 20 4f 46 46 53 45 54 20 31 3b 0a 7d 20  T 9 OFFSET 1;.} 
0fa0: 7b 32 20 62 20 33 20 63 20 34 20 64 20 35 20 65  {2 b 3 c 4 d 5 e
0fb0: 20 36 20 77 20 37 20 78 20 38 20 79 20 39 20 7a   6 w 7 x 8 y 9 z
0fc0: 7d 0a 0a 0a 0a 66 69 6e 69 73 68 5f 74 65 73 74  }....finish_test
0fd0: 0a                                               .