xref: /sqlite-3.40.0/test/filter2.test (revision 16e12c57)
16ba7ab0dSdan# 2019 July 2
26ba7ab0dSdan#
36ba7ab0dSdan# The author disclaims copyright to this source code.  In place of
46ba7ab0dSdan# a legal notice, here is a blessing:
56ba7ab0dSdan#
66ba7ab0dSdan#    May you do good and not evil.
76ba7ab0dSdan#    May you find forgiveness for yourself and forgive others.
86ba7ab0dSdan#    May you share freely, never taking more than you give.
96ba7ab0dSdan#
106ba7ab0dSdan#***********************************************************************
116ba7ab0dSdan# This file implements regression tests for SQLite library.
126ba7ab0dSdan#
136ba7ab0dSdan
146ba7ab0dSdan####################################################
156ba7ab0dSdan# DO NOT EDIT! THIS FILE IS AUTOMATICALLY GENERATED!
166ba7ab0dSdan####################################################
176ba7ab0dSdan
186ba7ab0dSdanset testdir [file dirname $argv0]
196ba7ab0dSdansource $testdir/tester.tcl
206ba7ab0dSdanset testprefix filter2
216ba7ab0dSdan
226ba7ab0dSdanifcapable !windowfunc { finish_test ; return }
236ba7ab0dSdando_execsql_test 1.0 {
246ba7ab0dSdan  DROP TABLE IF EXISTS t1;
256ba7ab0dSdan  CREATE TABLE t1(a INTEGER PRIMARY KEY, b INTEGER);
266ba7ab0dSdan  INSERT INTO t1 VALUES
276ba7ab0dSdan   (1, 7), (2, 3), (3, 5), (4, 30), (5, 26), (6, 23), (7, 27),
286ba7ab0dSdan   (8, 3), (9, 17), (10, 26), (11, 33), (12, 25), (13, NULL), (14, 47),
296ba7ab0dSdan   (15, 36), (16, 13), (17, 45), (18, 31), (19, 11), (20, 36), (21, 37),
306ba7ab0dSdan   (22, 21), (23, 22), (24, 14), (25, 16), (26, 3), (27, 7), (28, 29),
316ba7ab0dSdan   (29, 50), (30, 38), (31, 3), (32, 36), (33, 12), (34, 4), (35, 46),
326ba7ab0dSdan   (36, 3), (37, 48), (38, 23), (39, NULL), (40, 24), (41, 5), (42, 46),
336ba7ab0dSdan   (43, 11), (44, NULL), (45, 18), (46, 25), (47, 15), (48, 18), (49, 23);
346ba7ab0dSdan} {}
356ba7ab0dSdan
366ba7ab0dSdando_execsql_test 1.1 {
376ba7ab0dSdan  SELECT sum(b) FROM t1
386ba7ab0dSdan} {1041}
396ba7ab0dSdan
406ba7ab0dSdando_execsql_test 1.2 {
416ba7ab0dSdan  SELECT sum(b) FILTER (WHERE a<10) FROM t1
426ba7ab0dSdan} {141}
436ba7ab0dSdan
446ba7ab0dSdando_execsql_test 1.3 {
456ba7ab0dSdan  SELECT count(DISTINCT b) FROM t1
466ba7ab0dSdan} {31}
476ba7ab0dSdan
486ba7ab0dSdando_execsql_test 1.4 {
496ba7ab0dSdan  SELECT count(DISTINCT b) FILTER (WHERE a!=19) FROM t1
506ba7ab0dSdan} {31}
516ba7ab0dSdan
526ba7ab0dSdando_execsql_test 1.5 {
536ba7ab0dSdan  SELECT min(b) FILTER (WHERE a>19),
546ba7ab0dSdan         min(b) FILTER (WHERE a>0),
556ba7ab0dSdan         max(a+b) FILTER (WHERE a>19),
566ba7ab0dSdan         max(b+a) FILTER (WHERE a BETWEEN 10 AND 40)
576ba7ab0dSdan  FROM t1;
586ba7ab0dSdan} {3 3 88 85}
596ba7ab0dSdan
606ba7ab0dSdando_execsql_test 1.6 {
616ba7ab0dSdan  SELECT min(b),
626ba7ab0dSdan         min(b),
636ba7ab0dSdan         max(a+b),
646ba7ab0dSdan         max(b+a)
656ba7ab0dSdan  FROM t1
666ba7ab0dSdan  GROUP BY (a%10)
676ba7ab0dSdan  ORDER BY 1, 2, 3, 4;
686ba7ab0dSdan} {3 3 58 58   3 3 66 66   3 3 71 71   3 3 88 88   4 4 61 61   5 5 54 54
696ba7ab0dSdan  7 7 85 85   11 11 79 79   16 16 81 81   24 24 68 68}
706ba7ab0dSdan
716ba7ab0dSdando_execsql_test 1.7 {
726ba7ab0dSdan  SELECT min(b) FILTER (WHERE a>19),
736ba7ab0dSdan         min(b) FILTER (WHERE a>0),
746ba7ab0dSdan         max(a+b) FILTER (WHERE a>19),
756ba7ab0dSdan         max(b+a) FILTER (WHERE a BETWEEN 10 AND 40)
766ba7ab0dSdan  FROM t1
776ba7ab0dSdan  GROUP BY (a%10)
786ba7ab0dSdan  ORDER BY 1, 2, 3, 4;
796ba7ab0dSdan} {3 3 58 58   3 3 71 39   4 4 38 61   7 7 85 85   11 5 54 45   16 16 81 81
806ba7ab0dSdan  18 3 66 61   21 3 88 68   23 11 79 79   24 24 68 68}
816ba7ab0dSdan
82*16e12c57Sdando_execsql_test 1.8 {
83*16e12c57Sdan  SELECT sum(a+b) FILTER (WHERE a=NULL) FROM t1
84*16e12c57Sdan} {{}}
85*16e12c57Sdan
86*16e12c57Sdando_execsql_test 1.9 {
87*16e12c57Sdan  SELECT (a%5) FROM t1 GROUP BY (a%5)
88*16e12c57Sdan  HAVING sum(b) FILTER (WHERE b<20) > 34
89*16e12c57Sdan  ORDER BY 1
90*16e12c57Sdan} {3   4}
91*16e12c57Sdan
92*16e12c57Sdando_execsql_test 1.10 {
93*16e12c57Sdan  SELECT (a%5), sum(b) FILTER (WHERE b<20) AS bbb
94*16e12c57Sdan  FROM t1
95*16e12c57Sdan  GROUP BY (a%5) HAVING sum(b) FILTER (WHERE b<20) >34
96*16e12c57Sdan  ORDER BY 1
97*16e12c57Sdan} {3 49   4 46}
98*16e12c57Sdan
99*16e12c57Sdando_execsql_test 1.11 {
100*16e12c57Sdan  SELECT (a%5), sum(b) FILTER (WHERE b<20) AS bbb
101*16e12c57Sdan  FROM t1
102*16e12c57Sdan  GROUP BY (a%5) HAVING sum(b) FILTER (WHERE b<20) >34
103*16e12c57Sdan  ORDER BY 2
104*16e12c57Sdan} {4 46   3 49}
105*16e12c57Sdan
106*16e12c57Sdando_execsql_test 1.12 {
107*16e12c57Sdan  SELECT (a%5),
108*16e12c57Sdan    sum(b) FILTER (WHERE b<20) AS bbb,
109*16e12c57Sdan    count(distinct b) FILTER (WHERE b<20 OR a=13) AS ccc
110*16e12c57Sdan  FROM t1 GROUP BY (a%5)
111*16e12c57Sdan  ORDER BY 2
112*16e12c57Sdan} {2 25 3   0 34 2   1 34 4   4 46 4   3 49 5}
113*16e12c57Sdan
114*16e12c57Sdando_execsql_test 1.13 {
115*16e12c57Sdan  SELECT
116*16e12c57Sdan    group_concat(CAST(b AS TEXT), '_') FILTER (WHERE b%2!=0),
117*16e12c57Sdan    group_concat(CAST(b AS TEXT), '_') FILTER (WHERE b%2!=1),
118*16e12c57Sdan    count(*) FILTER (WHERE b%2!=0),
119*16e12c57Sdan    count(*) FILTER (WHERE b%2!=1)
120*16e12c57Sdan  FROM t1;
121*16e12c57Sdan} {7_3_5_23_27_3_17_33_25_47_13_45_31_11_37_21_3_7_29_3_3_23_5_11_25_15_23 30_26_26_36_36_22_14_16_50_38_36_12_4_46_48_24_46_18_18 27 19}
122*16e12c57Sdan
123*16e12c57Sdan
124*16e12c57Sdando_test 1.14 {
125*16e12c57Sdan  set myres {}
126*16e12c57Sdan  foreach r [db eval {SELECT
127*16e12c57Sdan    avg(b) FILTER (WHERE b>a),
128*16e12c57Sdan    avg(b) FILTER (WHERE b<a)
129*16e12c57Sdan  FROM t1 GROUP BY (a%2) ORDER BY 1,2;}] {
130*16e12c57Sdan    lappend myres [format %.4f [set r]]
131*16e12c57Sdan  }
132*16e12c57Sdan  set res2 {30.8333 13.7273 31.4167 13.0000}
133*16e12c57Sdan  set i 0
134*16e12c57Sdan  foreach r [set myres] r2 [set res2] {
135*16e12c57Sdan    if {[set r]<([set r2]-0.0001) || [set r]>([set r2]+0.0001)} {
136*16e12c57Sdan      error "list element [set i] does not match: got=[set r] expected=[set r2]"
137*16e12c57Sdan    }
138*16e12c57Sdan    incr i
139*16e12c57Sdan  }
140*16e12c57Sdan  set {} {}
141*16e12c57Sdan} {}
142*16e12c57Sdan
143*16e12c57Sdando_execsql_test 1.15 {
144*16e12c57Sdan  SELECT
145*16e12c57Sdan    a/5,
146*16e12c57Sdan    sum(b) FILTER (WHERE a%5=0),
147*16e12c57Sdan    sum(b) FILTER (WHERE a%5=1),
148*16e12c57Sdan    sum(b) FILTER (WHERE a%5=2),
149*16e12c57Sdan    sum(b) FILTER (WHERE a%5=3),
150*16e12c57Sdan    sum(b) FILTER (WHERE a%5=4)
151*16e12c57Sdan  FROM t1 GROUP BY (a/5) ORDER BY 1;
152*16e12c57Sdan} {0 {} 7 3 5 30   1 26 23 27 3 17   2 26 33 25 {} 47   3 36 13 45 31 11
153*16e12c57Sdan  4 36 37 21 22 14   5 16 3 7 29 50   6 38 3 36 12 4   7 46 3 48 23 {}
154*16e12c57Sdan  8 24 5 46 11 {}   9 18 25 15 18 23}
155*16e12c57Sdan
1566ba7ab0dSdanfinish_test
157