xref: /sqlite-3.40.0/test/selectB.test (revision 4b3ac73c)
1f23329a2Sdanielk1977# 2008 June 24
2f23329a2Sdanielk1977#
3f23329a2Sdanielk1977# The author disclaims copyright to this source code.  In place of
4f23329a2Sdanielk1977# a legal notice, here is a blessing:
5f23329a2Sdanielk1977#
6f23329a2Sdanielk1977#    May you do good and not evil.
7f23329a2Sdanielk1977#    May you find forgiveness for yourself and forgive others.
8f23329a2Sdanielk1977#    May you share freely, never taking more than you give.
9f23329a2Sdanielk1977#
10f23329a2Sdanielk1977#***********************************************************************
11f23329a2Sdanielk1977# This file implements regression tests for SQLite library.
12f23329a2Sdanielk1977#
13e8902a70Sdrh# $Id: selectB.test,v 1.10 2009/04/02 16:59:47 drh Exp $
14f23329a2Sdanielk1977
15f23329a2Sdanielk1977set testdir [file dirname $argv0]
16f23329a2Sdanielk1977source $testdir/tester.tcl
17f23329a2Sdanielk1977
18de3e41e3Sdanielk1977ifcapable !compound {
19de3e41e3Sdanielk1977  finish_test
20de3e41e3Sdanielk1977  return
21de3e41e3Sdanielk1977}
22de3e41e3Sdanielk1977
23f23329a2Sdanielk1977proc test_transform {testname sql1 sql2 results} {
24f23329a2Sdanielk1977  set ::vdbe1 [list]
25f23329a2Sdanielk1977  set ::vdbe2 [list]
26f23329a2Sdanielk1977  db eval "explain $sql1" { lappend ::vdbe1 $opcode }
27f23329a2Sdanielk1977  db eval "explain $sql2" { lappend ::vdbe2 $opcode }
28f23329a2Sdanielk1977
29f23329a2Sdanielk1977  do_test $testname.transform {
30f23329a2Sdanielk1977    set ::vdbe1
31f23329a2Sdanielk1977  } $::vdbe2
32f23329a2Sdanielk1977
33f23329a2Sdanielk1977  set ::sql1 $sql1
34f23329a2Sdanielk1977  do_test $testname.sql1 {
35f23329a2Sdanielk1977    execsql $::sql1
36f23329a2Sdanielk1977  } $results
37f23329a2Sdanielk1977
38f23329a2Sdanielk1977  set ::sql2 $sql2
39f23329a2Sdanielk1977  do_test $testname.sql2 {
40f23329a2Sdanielk1977    execsql $::sql2
41f23329a2Sdanielk1977  } $results
42f23329a2Sdanielk1977}
43f23329a2Sdanielk1977
44f23329a2Sdanielk1977do_test selectB-1.1 {
45f23329a2Sdanielk1977  execsql {
46f23329a2Sdanielk1977    CREATE TABLE t1(a, b, c);
47f23329a2Sdanielk1977    CREATE TABLE t2(d, e, f);
48f23329a2Sdanielk1977
49f23329a2Sdanielk1977    INSERT INTO t1 VALUES( 2,  4,  6);
50f23329a2Sdanielk1977    INSERT INTO t1 VALUES( 8, 10, 12);
51f23329a2Sdanielk1977    INSERT INTO t1 VALUES(14, 16, 18);
52f23329a2Sdanielk1977
53f23329a2Sdanielk1977    INSERT INTO t2 VALUES(3,   6,  9);
54f23329a2Sdanielk1977    INSERT INTO t2 VALUES(12, 15, 18);
55f23329a2Sdanielk1977    INSERT INTO t2 VALUES(21, 24, 27);
56f23329a2Sdanielk1977  }
57f23329a2Sdanielk1977} {}
58f23329a2Sdanielk1977
59eca7e01aSdanielk1977for {set ii 1} {$ii <= 2} {incr ii} {
60eca7e01aSdanielk1977
61eca7e01aSdanielk1977  if {$ii == 2} {
62eca7e01aSdanielk1977    do_test selectB-2.1 {
63eca7e01aSdanielk1977      execsql {
64eca7e01aSdanielk1977        CREATE INDEX i1 ON t1(a);
65eca7e01aSdanielk1977        CREATE INDEX i2 ON t2(d);
66eca7e01aSdanielk1977      }
67eca7e01aSdanielk1977    } {}
68eca7e01aSdanielk1977  }
69eca7e01aSdanielk1977
70eca7e01aSdanielk1977  test_transform selectB-$ii.2 {
71f23329a2Sdanielk1977    SELECT * FROM (SELECT a FROM t1 UNION ALL SELECT d FROM t2)
72f23329a2Sdanielk1977  } {
73f23329a2Sdanielk1977    SELECT a FROM t1 UNION ALL SELECT d FROM t2
74f23329a2Sdanielk1977  } {2 8 14 3 12 21}
75f23329a2Sdanielk1977
76eca7e01aSdanielk1977  test_transform selectB-$ii.3 {
77f23329a2Sdanielk1977    SELECT * FROM (SELECT a FROM t1 UNION ALL SELECT d FROM t2) ORDER BY 1
78f23329a2Sdanielk1977  } {
79f23329a2Sdanielk1977    SELECT a FROM t1 UNION ALL SELECT d FROM t2 ORDER BY 1
80f23329a2Sdanielk1977  } {2 3 8 12 14 21}
81f23329a2Sdanielk1977
82eca7e01aSdanielk1977  test_transform selectB-$ii.4 {
83f23329a2Sdanielk1977    SELECT * FROM
84f23329a2Sdanielk1977      (SELECT a FROM t1 UNION ALL SELECT d FROM t2)
85f23329a2Sdanielk1977    WHERE a>10 ORDER BY 1
86f23329a2Sdanielk1977  } {
87f23329a2Sdanielk1977    SELECT a FROM t1 WHERE a>10 UNION ALL SELECT d FROM t2 WHERE d>10 ORDER BY 1
88f23329a2Sdanielk1977  } {12 14 21}
89f23329a2Sdanielk1977
90eca7e01aSdanielk1977  test_transform selectB-$ii.5 {
91f23329a2Sdanielk1977    SELECT * FROM
92f23329a2Sdanielk1977      (SELECT a FROM t1 UNION ALL SELECT d FROM t2)
93f23329a2Sdanielk1977    WHERE a>10 ORDER BY a
94f23329a2Sdanielk1977  } {
95f23329a2Sdanielk1977    SELECT a FROM t1 WHERE a>10
96f23329a2Sdanielk1977      UNION ALL
97f23329a2Sdanielk1977    SELECT d FROM t2 WHERE d>10
98f23329a2Sdanielk1977    ORDER BY a
99f23329a2Sdanielk1977  } {12 14 21}
100f23329a2Sdanielk1977
101eca7e01aSdanielk1977  test_transform selectB-$ii.6 {
102f23329a2Sdanielk1977    SELECT * FROM
103f23329a2Sdanielk1977      (SELECT a FROM t1 UNION ALL SELECT d FROM t2 WHERE d > 12)
104f23329a2Sdanielk1977    WHERE a>10 ORDER BY a
105f23329a2Sdanielk1977  } {
106f23329a2Sdanielk1977    SELECT a FROM t1 WHERE a>10
107f23329a2Sdanielk1977      UNION ALL
108f23329a2Sdanielk1977    SELECT d FROM t2 WHERE d>12 AND d>10
109f23329a2Sdanielk1977    ORDER BY a
110f23329a2Sdanielk1977  } {14 21}
111f23329a2Sdanielk1977
112eca7e01aSdanielk1977  test_transform selectB-$ii.7 {
113eca7e01aSdanielk1977    SELECT * FROM (SELECT a FROM t1 UNION ALL SELECT d FROM t2) ORDER BY 1
114eca7e01aSdanielk1977    LIMIT 2
1154b86ef1dSdanielk1977  } {
1164b86ef1dSdanielk1977    SELECT a FROM t1 UNION ALL SELECT d FROM t2 ORDER BY 1 LIMIT 2
1174b86ef1dSdanielk1977  } {2 3}
1184b86ef1dSdanielk1977
119eca7e01aSdanielk1977  test_transform selectB-$ii.8 {
1204b86ef1dSdanielk1977    SELECT * FROM (SELECT a FROM t1 UNION ALL SELECT d FROM t2) ORDER BY 1
1214b86ef1dSdanielk1977    LIMIT 2 OFFSET 3
1224b86ef1dSdanielk1977  } {
1234b86ef1dSdanielk1977    SELECT a FROM t1 UNION ALL SELECT d FROM t2 ORDER BY 1 LIMIT 2 OFFSET 3
1244b86ef1dSdanielk1977  } {12 14}
1254b86ef1dSdanielk1977
126eca7e01aSdanielk1977  test_transform selectB-$ii.9 {
127eca7e01aSdanielk1977    SELECT * FROM (
128eca7e01aSdanielk1977      SELECT a FROM t1 UNION ALL SELECT d FROM t2 UNION ALL SELECT c FROM t1
129eca7e01aSdanielk1977    )
130eca7e01aSdanielk1977  } {
131eca7e01aSdanielk1977    SELECT a FROM t1 UNION ALL SELECT d FROM t2 UNION ALL SELECT c FROM t1
132eca7e01aSdanielk1977  } {2 8 14 3 12 21 6 12 18}
133eca7e01aSdanielk1977
134eca7e01aSdanielk1977  test_transform selectB-$ii.10 {
135eca7e01aSdanielk1977    SELECT * FROM (
136eca7e01aSdanielk1977      SELECT a FROM t1 UNION ALL SELECT d FROM t2 UNION ALL SELECT c FROM t1
137eca7e01aSdanielk1977    ) ORDER BY 1
138eca7e01aSdanielk1977  } {
139eca7e01aSdanielk1977    SELECT a FROM t1 UNION ALL SELECT d FROM t2 UNION ALL SELECT c FROM t1
140eca7e01aSdanielk1977    ORDER BY 1
141eca7e01aSdanielk1977  } {2 3 6 8 12 12 14 18 21}
142eca7e01aSdanielk1977
143eca7e01aSdanielk1977  test_transform selectB-$ii.11 {
144eca7e01aSdanielk1977    SELECT * FROM (
145eca7e01aSdanielk1977      SELECT a FROM t1 UNION ALL SELECT d FROM t2 UNION ALL SELECT c FROM t1
146eca7e01aSdanielk1977    ) WHERE a>=10 ORDER BY 1 LIMIT 3
147eca7e01aSdanielk1977  } {
148eca7e01aSdanielk1977    SELECT a FROM t1 WHERE a>=10 UNION ALL SELECT d FROM t2 WHERE d>=10
149eca7e01aSdanielk1977    UNION ALL SELECT c FROM t1 WHERE c>=10
150eca7e01aSdanielk1977    ORDER BY 1 LIMIT 3
151eca7e01aSdanielk1977  } {12 12 14}
1524914cf92Sdanielk1977
1534914cf92Sdanielk1977  test_transform selectB-$ii.12 {
1544914cf92Sdanielk1977    SELECT * FROM (SELECT a FROM t1 UNION ALL SELECT d FROM t2 LIMIT 2)
1554914cf92Sdanielk1977  } {
1564914cf92Sdanielk1977    SELECT a FROM t1 UNION ALL SELECT d FROM t2 LIMIT 2
1574914cf92Sdanielk1977  } {2 8}
1584914cf92Sdanielk1977
159e8902a70Sdrh  # An ORDER BY in a compound subqueries defeats flattening.  Ticket #3773
160e8902a70Sdrh  # test_transform selectB-$ii.13 {
161e8902a70Sdrh  #   SELECT * FROM (SELECT a FROM t1 UNION ALL SELECT d FROM t2 ORDER BY a ASC)
162e8902a70Sdrh  # } {
163e8902a70Sdrh  #   SELECT a FROM t1 UNION ALL SELECT d FROM t2 ORDER BY 1 ASC
164e8902a70Sdrh  # } {2 3 8 12 14 21}
165e8902a70Sdrh  #
166e8902a70Sdrh  # test_transform selectB-$ii.14 {
167e8902a70Sdrh  #  SELECT * FROM (SELECT a FROM t1 UNION ALL SELECT d FROM t2 ORDER BY a DESC)
168e8902a70Sdrh  # } {
169e8902a70Sdrh  #  SELECT a FROM t1 UNION ALL SELECT d FROM t2 ORDER BY 1 DESC
170e8902a70Sdrh  # } {21 14 12 8 3 2}
171e8902a70Sdrh  #
172e8902a70Sdrh  # test_transform selectB-$ii.14 {
173e8902a70Sdrh  #   SELECT * FROM (
174e8902a70Sdrh  #     SELECT a FROM t1 UNION ALL SELECT d FROM t2 ORDER BY a DESC
175e8902a70Sdrh  #   ) LIMIT 2 OFFSET 2
176e8902a70Sdrh  # } {
177e8902a70Sdrh  #   SELECT a FROM t1 UNION ALL SELECT d FROM t2 ORDER BY 1 DESC
178e8902a70Sdrh  #    LIMIT 2 OFFSET 2
179e8902a70Sdrh  # } {12 8}
180e8902a70Sdrh  #
181e8902a70Sdrh  # test_transform selectB-$ii.15 {
182e8902a70Sdrh  #   SELECT * FROM (
183e8902a70Sdrh  #     SELECT a, b FROM t1 UNION ALL SELECT d, e FROM t2 ORDER BY a ASC, e DESC
184e8902a70Sdrh  #  )
185e8902a70Sdrh  # } {
186e8902a70Sdrh  #   SELECT a, b FROM t1 UNION ALL SELECT d, e FROM t2 ORDER BY a ASC, e DESC
187e8902a70Sdrh  # } {2 4 3 6 8 10 12 15 14 16 21 24}
188eca7e01aSdanielk1977}
189eca7e01aSdanielk1977
1905e7ad508Sdanielk1977do_test selectB-3.0 {
1915e7ad508Sdanielk1977  execsql {
1925e7ad508Sdanielk1977    DROP INDEX i1;
1935e7ad508Sdanielk1977    DROP INDEX i2;
1945e7ad508Sdanielk1977  }
1955e7ad508Sdanielk1977} {}
196eca7e01aSdanielk1977
197*4b3ac73cSdrhfor {set ii 3} {$ii <= 6} {incr ii} {
1985e7ad508Sdanielk1977
199*4b3ac73cSdrh  switch $ii {
200*4b3ac73cSdrh    4 {
201*4b3ac73cSdrh      optimization_control db query-flattener off
202*4b3ac73cSdrh    }
203*4b3ac73cSdrh    5 {
204*4b3ac73cSdrh      optimization_control db query-flattener on
205*4b3ac73cSdrh      do_test selectB-5.0 {
2065e7ad508Sdanielk1977        execsql {
2075e7ad508Sdanielk1977          CREATE INDEX i1 ON t1(a);
2085e7ad508Sdanielk1977          CREATE INDEX i2 ON t1(b);
2095e7ad508Sdanielk1977          CREATE INDEX i3 ON t1(c);
2105e7ad508Sdanielk1977          CREATE INDEX i4 ON t2(d);
2115e7ad508Sdanielk1977          CREATE INDEX i5 ON t2(e);
2125e7ad508Sdanielk1977          CREATE INDEX i6 ON t2(f);
2135e7ad508Sdanielk1977        }
2145e7ad508Sdanielk1977      } {}
2155e7ad508Sdanielk1977    }
216*4b3ac73cSdrh    6 {
217*4b3ac73cSdrh      optimization_control db query-flattener off
218*4b3ac73cSdrh    }
219*4b3ac73cSdrh  }
2205e7ad508Sdanielk1977
2215e7ad508Sdanielk1977  do_test selectB-$ii.1 {
222eca7e01aSdanielk1977    execsql {
223eca7e01aSdanielk1977      SELECT DISTINCT * FROM
224eca7e01aSdanielk1977        (SELECT c FROM t1 UNION ALL SELECT e FROM t2)
225eca7e01aSdanielk1977      ORDER BY 1;
226eca7e01aSdanielk1977    }
227eca7e01aSdanielk1977  } {6 12 15 18 24}
228eca7e01aSdanielk1977
2295e7ad508Sdanielk1977  do_test selectB-$ii.2 {
230eca7e01aSdanielk1977    execsql {
231eca7e01aSdanielk1977      SELECT c, count(*) FROM
232eca7e01aSdanielk1977        (SELECT c FROM t1 UNION ALL SELECT e FROM t2)
233eca7e01aSdanielk1977      GROUP BY c ORDER BY 1;
234eca7e01aSdanielk1977    }
235eca7e01aSdanielk1977  } {6 2 12 1 15 1 18 1 24 1}
2365e7ad508Sdanielk1977  do_test selectB-$ii.3 {
237eca7e01aSdanielk1977    execsql {
238eca7e01aSdanielk1977      SELECT c, count(*) FROM
239eca7e01aSdanielk1977        (SELECT c FROM t1 UNION ALL SELECT e FROM t2)
240eca7e01aSdanielk1977      GROUP BY c HAVING count(*)>1;
241eca7e01aSdanielk1977    }
242eca7e01aSdanielk1977  } {6 2}
2435e7ad508Sdanielk1977  do_test selectB-$ii.4 {
244eca7e01aSdanielk1977    execsql {
245eca7e01aSdanielk1977      SELECT t4.c, t3.a FROM
246eca7e01aSdanielk1977        (SELECT c FROM t1 UNION ALL SELECT e FROM t2) AS t4, t1 AS t3
247eca7e01aSdanielk1977      WHERE t3.a=14
248eca7e01aSdanielk1977      ORDER BY 1
249eca7e01aSdanielk1977    }
250eca7e01aSdanielk1977  } {6 14 6 14 12 14 15 14 18 14 24 14}
251eca7e01aSdanielk1977
2525e7ad508Sdanielk1977  do_test selectB-$ii.5 {
253eca7e01aSdanielk1977    execsql {
254eca7e01aSdanielk1977      SELECT d FROM t2
255eca7e01aSdanielk1977      EXCEPT
256eca7e01aSdanielk1977      SELECT a FROM (SELECT a FROM t1 UNION ALL SELECT d FROM t2)
257eca7e01aSdanielk1977    }
258eca7e01aSdanielk1977  } {}
2595e7ad508Sdanielk1977  do_test selectB-$ii.6 {
260eca7e01aSdanielk1977    execsql {
261eca7e01aSdanielk1977      SELECT * FROM (SELECT a FROM t1 UNION ALL SELECT d FROM t2)
262eca7e01aSdanielk1977      EXCEPT
263eca7e01aSdanielk1977      SELECT * FROM (SELECT a FROM t1 UNION ALL SELECT d FROM t2)
264eca7e01aSdanielk1977    }
265eca7e01aSdanielk1977  } {}
2665e7ad508Sdanielk1977  do_test selectB-$ii.7 {
2675e7ad508Sdanielk1977    execsql {
2685e7ad508Sdanielk1977      SELECT c FROM t1
2695e7ad508Sdanielk1977      EXCEPT
2705e7ad508Sdanielk1977      SELECT * FROM (SELECT e FROM t2 UNION ALL SELECT f FROM t2)
2715e7ad508Sdanielk1977    }
2725e7ad508Sdanielk1977  } {12}
2735e7ad508Sdanielk1977  do_test selectB-$ii.8 {
2745e7ad508Sdanielk1977    execsql {
2755e7ad508Sdanielk1977      SELECT * FROM (SELECT e FROM t2 UNION ALL SELECT f FROM t2)
2765e7ad508Sdanielk1977      EXCEPT
2775e7ad508Sdanielk1977      SELECT c FROM t1
2785e7ad508Sdanielk1977    }
2795e7ad508Sdanielk1977  } {9 15 24 27}
2805e7ad508Sdanielk1977  do_test selectB-$ii.9 {
2815e7ad508Sdanielk1977    execsql {
2825e7ad508Sdanielk1977      SELECT * FROM (SELECT e FROM t2 UNION ALL SELECT f FROM t2)
2835e7ad508Sdanielk1977      EXCEPT
2845e7ad508Sdanielk1977      SELECT c FROM t1
2855e7ad508Sdanielk1977      ORDER BY c DESC
2865e7ad508Sdanielk1977    }
2875e7ad508Sdanielk1977  } {27 24 15 9}
2885e7ad508Sdanielk1977
2895e7ad508Sdanielk1977  do_test selectB-$ii.10 {
2905e7ad508Sdanielk1977    execsql {
2915e7ad508Sdanielk1977      SELECT * FROM (SELECT e FROM t2 UNION ALL SELECT f FROM t2)
2925e7ad508Sdanielk1977      UNION
2935e7ad508Sdanielk1977      SELECT c FROM t1
2945e7ad508Sdanielk1977      ORDER BY c DESC
2955e7ad508Sdanielk1977    }
2965e7ad508Sdanielk1977  } {27 24 18 15 12 9 6}
2975e7ad508Sdanielk1977  do_test selectB-$ii.11 {
2985e7ad508Sdanielk1977    execsql {
2995e7ad508Sdanielk1977      SELECT c FROM t1
3005e7ad508Sdanielk1977      UNION
3015e7ad508Sdanielk1977      SELECT * FROM (SELECT e FROM t2 UNION ALL SELECT f FROM t2)
3025e7ad508Sdanielk1977      ORDER BY c
3035e7ad508Sdanielk1977    }
3045e7ad508Sdanielk1977  } {6 9 12 15 18 24 27}
3055e7ad508Sdanielk1977  do_test selectB-$ii.12 {
3065e7ad508Sdanielk1977    execsql {
3075e7ad508Sdanielk1977      SELECT c FROM t1 UNION SELECT e FROM t2 UNION ALL SELECT f FROM t2
3085e7ad508Sdanielk1977      ORDER BY c
3095e7ad508Sdanielk1977    }
3105e7ad508Sdanielk1977  } {6 9 12 15 18 18 24 27}
3115e7ad508Sdanielk1977  do_test selectB-$ii.13 {
3125e7ad508Sdanielk1977    execsql {
3135e7ad508Sdanielk1977      SELECT * FROM (SELECT e FROM t2 UNION ALL SELECT f FROM t2)
3145e7ad508Sdanielk1977      UNION
3155e7ad508Sdanielk1977      SELECT * FROM (SELECT e FROM t2 UNION ALL SELECT f FROM t2)
3165e7ad508Sdanielk1977      ORDER BY 1
3175e7ad508Sdanielk1977    }
3185e7ad508Sdanielk1977  } {6 9 15 18 24 27}
3195e7ad508Sdanielk1977
3205e7ad508Sdanielk1977  do_test selectB-$ii.14 {
3215e7ad508Sdanielk1977    execsql {
3225e7ad508Sdanielk1977      SELECT c FROM t1
3235e7ad508Sdanielk1977      INTERSECT
3245e7ad508Sdanielk1977      SELECT * FROM (SELECT e FROM t2 UNION ALL SELECT f FROM t2)
3255e7ad508Sdanielk1977      ORDER BY 1
3265e7ad508Sdanielk1977    }
3275e7ad508Sdanielk1977  } {6 18}
3285e7ad508Sdanielk1977  do_test selectB-$ii.15 {
3295e7ad508Sdanielk1977    execsql {
3305e7ad508Sdanielk1977      SELECT * FROM (SELECT e FROM t2 UNION ALL SELECT f FROM t2)
3315e7ad508Sdanielk1977      INTERSECT
3325e7ad508Sdanielk1977      SELECT c FROM t1
3335e7ad508Sdanielk1977      ORDER BY 1
3345e7ad508Sdanielk1977    }
3355e7ad508Sdanielk1977  } {6 18}
3365e7ad508Sdanielk1977  do_test selectB-$ii.16 {
3375e7ad508Sdanielk1977    execsql {
3385e7ad508Sdanielk1977      SELECT * FROM (SELECT e FROM t2 UNION ALL SELECT f FROM t2)
3395e7ad508Sdanielk1977      INTERSECT
3405e7ad508Sdanielk1977      SELECT * FROM (SELECT e FROM t2 UNION ALL SELECT f FROM t2)
3415e7ad508Sdanielk1977      ORDER BY 1
3425e7ad508Sdanielk1977    }
3435e7ad508Sdanielk1977  } {6 9 15 18 24 27}
3444914cf92Sdanielk1977
3454914cf92Sdanielk1977  do_test selectB-$ii.17 {
3464914cf92Sdanielk1977    execsql {
3474914cf92Sdanielk1977      SELECT * FROM (
3484914cf92Sdanielk1977        SELECT a FROM t1 UNION ALL SELECT d FROM t2 LIMIT 4
3494914cf92Sdanielk1977      ) LIMIT 2
3504914cf92Sdanielk1977    }
3514914cf92Sdanielk1977  } {2 8}
3524914cf92Sdanielk1977
3534914cf92Sdanielk1977  do_test selectB-$ii.18 {
3544914cf92Sdanielk1977    execsql {
3554914cf92Sdanielk1977      SELECT * FROM (
3564914cf92Sdanielk1977        SELECT a FROM t1 UNION ALL SELECT d FROM t2 LIMIT 4 OFFSET 2
3574914cf92Sdanielk1977      ) LIMIT 2
3584914cf92Sdanielk1977    }
3594914cf92Sdanielk1977  } {14 3}
3604914cf92Sdanielk1977
3614914cf92Sdanielk1977  do_test selectB-$ii.19 {
3624914cf92Sdanielk1977    execsql {
3634914cf92Sdanielk1977      SELECT * FROM (
3644914cf92Sdanielk1977        SELECT DISTINCT (a/10) FROM t1 UNION ALL SELECT DISTINCT(d%2) FROM t2
3654914cf92Sdanielk1977      )
3664914cf92Sdanielk1977    }
36738cc40c2Sdan  } {0 1 1 0}
3684914cf92Sdanielk1977
3694914cf92Sdanielk1977  do_test selectB-$ii.20 {
3704914cf92Sdanielk1977    execsql {
3714914cf92Sdanielk1977      SELECT DISTINCT * FROM (
3724914cf92Sdanielk1977        SELECT DISTINCT (a/10) FROM t1 UNION ALL SELECT DISTINCT(d%2) FROM t2
3734914cf92Sdanielk1977      )
3744914cf92Sdanielk1977    }
3754914cf92Sdanielk1977  } {0 1}
37649fc1f60Sdanielk1977
37749fc1f60Sdanielk1977  do_test selectB-$ii.21 {
37849fc1f60Sdanielk1977    execsql {
37949fc1f60Sdanielk1977      SELECT * FROM (SELECT * FROM t1 UNION ALL SELECT * FROM t2) ORDER BY a+b
38049fc1f60Sdanielk1977    }
38149fc1f60Sdanielk1977  } {2 4 6 3 6 9 8 10 12 12 15 18 14 16 18 21 24 27}
38280b3c548Sdanielk1977
383*4b3ac73cSdrh  do_test selectB-$ii.22 {
38480b3c548Sdanielk1977    execsql {
38580b3c548Sdanielk1977      SELECT * FROM (SELECT 345 UNION ALL SELECT d FROM t2) ORDER BY 1;
38680b3c548Sdanielk1977    }
38780b3c548Sdanielk1977  } {3 12 21 345}
388*4b3ac73cSdrh
389*4b3ac73cSdrh  do_test selectB-$ii.23 {
390*4b3ac73cSdrh    execsql {
391*4b3ac73cSdrh      SELECT x, y FROM (
392*4b3ac73cSdrh        SELECT a AS x, b AS y FROM t1
393*4b3ac73cSdrh        UNION ALL
394*4b3ac73cSdrh        SELECT a*10 + 0.1, f*10 + 0.1 FROM t1 JOIN t2 ON (c=d)
395*4b3ac73cSdrh        UNION ALL
396*4b3ac73cSdrh        SELECT a*100, b*100 FROM t1
397*4b3ac73cSdrh      ) ORDER BY 1;
398*4b3ac73cSdrh    }
399*4b3ac73cSdrh  } {2 4 8 10 14 16 80.1 180.1 200 400 800 1000 1400 1600}
400*4b3ac73cSdrh
401*4b3ac73cSdrh  do_test selectB-$ii.24 {
402*4b3ac73cSdrh    execsql {
403*4b3ac73cSdrh      SELECT x, y FROM (
404*4b3ac73cSdrh        SELECT a AS x, b AS y FROM t1
405*4b3ac73cSdrh        UNION ALL
406*4b3ac73cSdrh        SELECT a*10 + 0.1, f*10 + 0.1 FROM t1 LEFT JOIN t2 ON (c=d)
407*4b3ac73cSdrh        UNION ALL
408*4b3ac73cSdrh        SELECT a*100, b*100 FROM t1
409*4b3ac73cSdrh      ) ORDER BY 1;
410*4b3ac73cSdrh    }
411*4b3ac73cSdrh  } {2 4 8 10 14 16 20.1 {} 80.1 180.1 140.1 {} 200 400 800 1000 1400 1600}
412*4b3ac73cSdrh
413*4b3ac73cSdrh  do_test selectB-$ii.25 {
414*4b3ac73cSdrh    execsql {
415*4b3ac73cSdrh      SELECT x+y FROM (
416*4b3ac73cSdrh        SELECT a AS x, b AS y FROM t1
417*4b3ac73cSdrh        UNION ALL
418*4b3ac73cSdrh        SELECT a*10 + 0.1, f*10 + 0.1 FROM t1 LEFT JOIN t2 ON (c=d)
419*4b3ac73cSdrh        UNION ALL
420*4b3ac73cSdrh        SELECT a*100, b*100 FROM t1
421*4b3ac73cSdrh      ) WHERE y+x NOT NULL ORDER BY 1;
422*4b3ac73cSdrh    }
423*4b3ac73cSdrh  } {6 18 30 260.2 600 1800 3000}
4245e7ad508Sdanielk1977}
425f23329a2Sdanielk1977
426f23329a2Sdanielk1977finish_test
427