Files
impala/testdata/workloads/functional-query/queries/QueryTest/top-n.test
Tim Armstrong 6f9434217e IMPALA-3412: fix CHAR codegen crash in tuple comparator
Attempting to codegen a sort where the sort expr has a CHAR type as an
intermediate result fails completely.

The problem is that ScalarFnCall checked whether its input arguments
were CHAR to disable codegen, but didn't check its output.

This patch also replaces some incorrect codegen CHAR logic that should
not be executed with DCHECKs.

Testing:
The test is a minimal reproduction of the issue. The test is executed
both by the sorter and top-n nodes so covers both cases.

Change-Id: I189073d46a10988803d572928a38f4a718690fa3
Reviewed-on: http://gerrit.cloudera.org:8080/2876
Reviewed-by: Tim Armstrong <tarmstrong@cloudera.com>
Tested-by: Internal Jenkins
2016-05-12 14:17:45 -07:00

1262 lines
33 KiB
Plaintext

====
---- QUERY
# Based on Aggregation Queries
select int_col, sum(float_col)
from alltypessmall
where id < 5
group by 1
order by 2
limit 3
---- RESULTS
0,0
1,1.100000023841858
2,2.200000047683716
---- TYPES
INT, DOUBLE
====
---- QUERY
# Run query without order by
select tinyint_col, count(*)
from alltypesagg
group by 1
limit 10
---- RESULTS
3,1000
NULL,2000
2,1000
4,1000
8,1000
1,1000
6,1000
5,1000
7,1000
9,1000
---- TYPES
TINYINT, BIGINT
====
---- QUERY
# Same query order by asc first col
select tinyint_col, count(*)
from alltypesagg
group by 1
order by 1
limit 10
---- RESULTS
1,1000
2,1000
3,1000
4,1000
5,1000
6,1000
7,1000
8,1000
9,1000
NULL,2000
---- TYPES
TINYINT, BIGINT
====
---- QUERY
# Same query order by asc first col, NULL should be last
# because it compares greater.
select tinyint_col, count(*)
from alltypesagg
group by 1
order by 1
limit 10
---- RESULTS
1,1000
2,1000
3,1000
4,1000
5,1000
6,1000
7,1000
8,1000
9,1000
NULL,2000
---- TYPES
TINYINT, BIGINT
====
---- QUERY
# Same query order by asc first col, NULL should be first
select tinyint_col, count(*)
from alltypesagg
group by 1
order by 1 nulls first
limit 10
---- RESULTS
NULL,2000
1,1000
2,1000
3,1000
4,1000
5,1000
6,1000
7,1000
8,1000
9,1000
---- TYPES
TINYINT, BIGINT
====
---- QUERY
# Same query but first col desc.
# NULL should be first because it compares greater
select tinyint_col, count(*)
from alltypesagg
group by 1
order by 1 desc
limit 20
---- RESULTS
NULL,2000
9,1000
8,1000
7,1000
6,1000
5,1000
4,1000
3,1000
2,1000
1,1000
---- TYPES
TINYINT, BIGINT
====
---- QUERY
# Same query as above but NULL should be last
select tinyint_col, count(*)
from alltypesagg
group by 1
order by 1 desc nulls last
limit 20
---- RESULTS
9,1000
8,1000
7,1000
6,1000
5,1000
4,1000
3,1000
2,1000
1,1000
NULL,2000
---- TYPES
TINYINT, BIGINT
====
---- QUERY
select date_string_col,int_col
from alltypesagg
order by date_string_col, int_col desc
limit 10
---- RESULTS
'01/01/10',NULL
'01/01/10',NULL
'01/01/10',999
'01/01/10',998
'01/01/10',997
'01/01/10',996
'01/01/10',995
'01/01/10',994
'01/01/10',993
'01/01/10',992
---- TYPES
STRING, INT
====
---- QUERY
# order by with null tuples in tuple row
select j.*, d.* from JoinTbl j full outer join DimTbl d
on (j.test_id = d.id)
order by j.test_id, j.test_name, j.test_zip, j.alltypes_id, d.name
limit 100
---- RESULTS
1001,'Name1',94611,5000,1001,'Name1',94611
1002,'Name2',94611,5000,1002,'Name2',94611
1003,'Name3',94611,5000,1003,'Name3',94612
1004,'Name4',94611,5000,1004,'Name4',94612
1005,'Name5',94611,5000,1005,'Name5',94613
1006,'Name16',94612,5000,1006,'Name6',94613
1006,'Name16',94612,15000,1006,'Name6',94613
1006,'Name16',94616,5000,1006,'Name6',94613
1006,'Name16',94616,15000,1006,'Name6',94613
1006,'Name6',94616,5000,1006,'Name6',94613
1006,'Name6',94616,15000,1006,'Name6',94613
1106,'Name16',94612,5000,NULL,'NULL',NULL
1106,'Name16',94612,15000,NULL,'NULL',NULL
1106,'Name16',94616,5000,NULL,'NULL',NULL
1106,'Name16',94616,15000,NULL,'NULL',NULL
1106,'Name6',94612,5000,NULL,'NULL',NULL
1106,'Name6',94612,15000,NULL,'NULL',NULL
1106,'Name6',94616,5000,NULL,'NULL',NULL
1106,'Name6',94616,15000,NULL,'NULL',NULL
NULL,'NULL',NULL,NULL,1010,'Name10',94615
NULL,'NULL',NULL,NULL,1007,'Name7',94614
NULL,'NULL',NULL,NULL,1008,'Name8',94614
NULL,'NULL',NULL,NULL,1009,'Name9',94615
---- TYPES
BIGINT, STRING, INT, INT, BIGINT, STRING, INT
====
---- QUERY
# order by multiple cols with nulls
select tinyint_col % 3, smallint_col % 3, count(*)
from alltypesagg
where day = 1
group by 1, 2
order by 1, 2
limit 20
---- RESULTS
0,0,120
0,1,90
0,2,90
1,0,90
1,1,120
1,2,90
2,0,90
2,1,90
2,2,120
NULL,0,30
NULL,1,30
NULL,2,30
NULL,NULL,10
---- TYPES
TINYINT, SMALLINT, BIGINT
====
---- QUERY
select tinyint_col % 3, smallint_col % 3, count(*)
from alltypesagg
where day = 1
group by 1, 2
order by 1, 2 desc
limit 20
---- RESULTS
0,2,90
0,1,90
0,0,120
1,2,90
1,1,120
1,0,90
2,2,120
2,1,90
2,0,90
NULL,NULL,10
NULL,2,30
NULL,1,30
NULL,0,30
---- TYPES
TINYINT, SMALLINT, BIGINT
====
---- QUERY
select tinyint_col % 3, smallint_col % 3, count(*)
from alltypesagg
where day = 1
group by 1, 2
order by 1 desc, 2
limit 20
---- RESULTS
NULL,0,30
NULL,1,30
NULL,2,30
NULL,NULL,10
2,0,90
2,1,90
2,2,120
1,0,90
1,1,120
1,2,90
0,0,120
0,1,90
0,2,90
---- TYPES
TINYINT, SMALLINT, BIGINT
====
---- QUERY
select tinyint_col % 3, smallint_col % 3, count(*)
from alltypesagg
where day = 1
group by 1, 2
order by 1 desc, 2 desc
limit 20
---- RESULTS
NULL,NULL,10
NULL,2,30
NULL,1,30
NULL,0,30
2,2,120
2,1,90
2,0,90
1,2,90
1,1,120
1,0,90
0,2,90
0,1,90
0,0,120
---- TYPES
TINYINT, SMALLINT, BIGINT
====
---- QUERY
# Multiple ordering columns with asc/desc and nulls first/last
select tinyint_col % 3, smallint_col % 3, count(*)
from alltypesagg
where day = 1
group by 1, 2
order by 2 desc nulls last, 1 asc nulls first
limit 20
---- RESULTS
NULL,2,30
0,2,90
1,2,90
2,2,120
NULL,1,30
0,1,90
1,1,120
2,1,90
NULL,0,30
0,0,120
1,0,90
2,0,90
NULL,NULL,10
---- TYPES
TINYINT, SMALLINT, BIGINT
====
---- QUERY
select date_string_col
from alltypessmall
order by date_string_col desc
limit 50
---- RESULTS
'04/03/09'
'04/03/09'
'04/03/09'
'04/03/09'
'04/03/09'
'04/02/09'
'04/02/09'
'04/02/09'
'04/02/09'
'04/02/09'
'04/02/09'
'04/02/09'
'04/02/09'
'04/02/09'
'04/02/09'
'04/01/09'
'04/01/09'
'04/01/09'
'04/01/09'
'04/01/09'
'04/01/09'
'04/01/09'
'04/01/09'
'04/01/09'
'04/01/09'
'03/03/09'
'03/03/09'
'03/03/09'
'03/03/09'
'03/03/09'
'03/02/09'
'03/02/09'
'03/02/09'
'03/02/09'
'03/02/09'
'03/02/09'
'03/02/09'
'03/02/09'
'03/02/09'
'03/02/09'
'03/01/09'
'03/01/09'
'03/01/09'
'03/01/09'
'03/01/09'
'03/01/09'
'03/01/09'
'03/01/09'
'03/01/09'
'03/01/09'
---- TYPES
STRING
====
---- QUERY
# Based on join queries
select a.tinyint_col, b.id, a.string_col
from alltypesagg a join alltypessmall b on (a.tinyint_col = b.id)
where a.month=1
and a.day=1
and a.tinyint_col + b.tinyint_col < 5
and a.string_col > '88'
and b.bool_col = false
order by a.string_col
limit 5
---- RESULTS
1,1,'881'
1,1,'891'
1,1,'901'
1,1,'91'
1,1,'911'
---- TYPES
TINYINT, INT, STRING
====
---- QUERY
select a.tinyint_col, b.id, a.string_col
from alltypesagg a join alltypessmall b on (a.tinyint_col = b.id)
where a.month=1
and a.day=1
and a.tinyint_col + b.tinyint_col < 5
and a.string_col > '88'
and b.bool_col = false
order by a.string_col desc
limit 5
---- RESULTS
1,1,'991'
1,1,'981'
1,1,'971'
1,1,'961'
1,1,'951'
---- TYPES
TINYINT, INT, STRING
====
---- QUERY
select a.smallint_col, b.id, a.tinyint_col, c.id, a.int_col, b.float_col, c.string_col
from alltypesagg a
join alltypessmall b on (a.smallint_col = b.id)
join alltypessmall c on (a.tinyint_col = c.id)
where a.month=1
and a.day=1
and a.int_col > 899
and b.float_col > 4.5
and c.string_col < '7'
and a.int_col + b.float_col + cast(c.string_col as float) < 1000
order by c.string_col desc, a.smallint_col
limit 10
---- RESULTS
6,6,6,6,906,6.599999904632568,'6'
16,16,6,6,916,6.599999904632568,'6'
56,56,6,6,956,6.599999904632568,'6'
66,66,6,6,966,6.599999904632568,'6'
5,5,5,5,905,5.5,'5'
15,15,5,5,915,5.5,'5'
55,55,5,5,955,5.5,'5'
65,65,5,5,965,5.5,'5'
34,34,4,4,934,9.899999618530273,'4'
44,44,4,4,944,9.899999618530273,'4'
---- TYPES
SMALLINT, INT, TINYINT, INT, INT, FLOAT, STRING
====
---- QUERY
# Order by a column that is not in the select list
# Query with ordering column in select list
# Don't include date_string_col, it comes back in random order.
select int_col, tinyint_col
from alltypessmall
order by int_col desc
limit 20
---- RESULTS
9,9
9,9
9,9
9,9
9,9
9,9
9,9
9,9
8,8
8,8
8,8
8,8
8,8
8,8
8,8
8,8
7,7
7,7
7,7
7,7
---- TYPES
INT, TINYINT
====
---- QUERY
# Same query with ordering col not in select list
select tinyint_col
from alltypessmall
order by int_col desc
limit 20
---- RESULTS
9
9
9
9
9
9
9
9
8
8
8
8
8
8
8
8
7
7
7
7
---- TYPES
TINYINT
====
---- QUERY
# Order by many exprs
select year, month, count(*)
from alltypes
group by 1, 2
order by 1, 2
limit 100
---- RESULTS
2009,1,310
2009,2,280
2009,3,310
2009,4,300
2009,5,310
2009,6,300
2009,7,310
2009,8,310
2009,9,300
2009,10,310
2009,11,300
2009,12,310
2010,1,310
2010,2,280
2010,3,310
2010,4,300
2010,5,310
2010,6,300
2010,7,310
2010,8,310
2010,9,300
2010,10,310
2010,11,300
2010,12,310
---- TYPES
INT, INT, BIGINT
====
---- QUERY
# More Complex Ordering Exprs
select int_col % 7, count(*), avg(tinyint_col)
from alltypesagg
group by 1
order by avg(tinyint_col)
limit 10
---- RESULTS
4,1570,4.984496124031008
6,1560,4.9921875
1,1570,4.992248062015504
3,1580,5
5,1570,5.007751937984496
0,1560,5.0078125
2,1570,5.015503875968992
NULL,20,NULL
---- TYPES
INT, BIGINT, DOUBLE
====
---- QUERY
select int_col % 7, count(*), max(int_col)
from alltypesagg
group by 1
order by max(int_col)
limit 10
---- RESULTS
6,1560,993
0,1560,994
1,1570,995
2,1570,996
3,1580,997
4,1570,998
5,1570,999
NULL,20,NULL
---- TYPES
INT, BIGINT, INT
====
---- QUERY
select int_col % 5, count(*), avg(tinyint_col) - avg(float_col)
from alltypesagg
group by 1
order by avg(tinyint_col) - avg(float_col) desc
limit 10
---- RESULTS
NULL,20,NULL
1,2000,-544.8499889141322
2,2000,-544.9500045645237
0,2980,-545
3,2000,-545.0499953591824
4,2000,-545.1500110459327
---- TYPES
INT, BIGINT, DOUBLE
====
---- QUERY
select int_col
from alltypessmall
order by int_col % 5, int_col
limit 100
---- RESULTS
0
0
0
0
0
0
0
0
0
0
0
0
5
5
5
5
5
5
5
5
1
1
1
1
1
1
1
1
1
1
1
1
6
6
6
6
6
6
6
6
2
2
2
2
2
2
2
2
2
2
2
2
7
7
7
7
7
7
7
7
3
3
3
3
3
3
3
3
3
3
3
3
8
8
8
8
8
8
8
8
4
4
4
4
4
4
4
4
4
4
4
4
9
9
9
9
9
9
9
9
---- TYPES
INT
====
---- QUERY
# All select list items have an implicit alias. Test that the order by column ref
# "int_col" is correctly aliased to t1.int_col, and therefore it is not an
# ambiguous reference.
select t1.int_col from alltypessmall t1, alltypessmall t2 where t1.id = t2.id
order by int_col
limit 2
---- RESULTS
0
0
---- TYPES
INT
====
---- QUERY
select date_sub(timestamp_col, id), timestamp_col, id
from alltypessmall order by 1 limit 20
---- RESULTS
2008-12-10 00:24:00.960000000,2009-01-03 00:24:00.960000000,24
2008-12-11 00:23:00.930000000,2009-01-03 00:23:00.930000000,23
2008-12-12 00:22:00.910000000,2009-01-03 00:22:00.910000000,22
2008-12-13 00:21:00.900000000,2009-01-03 00:21:00.900000000,21
2008-12-14 00:19:00.810000000,2009-01-02 00:19:00.810000000,19
2008-12-14 00:20:00.900000000,2009-01-03 00:20:00.900000000,20
2008-12-15 00:18:00.730000000,2009-01-02 00:18:00.730000000,18
2008-12-16 00:17:00.660000000,2009-01-02 00:17:00.660000000,17
2008-12-16 00:24:00.960000000,2009-02-03 00:24:00.960000000,49
2008-12-17 00:16:00.600000000,2009-01-02 00:16:00.600000000,16
2008-12-17 00:23:00.930000000,2009-02-03 00:23:00.930000000,48
2008-12-18 00:15:00.550000000,2009-01-02 00:15:00.550000000,15
2008-12-18 00:22:00.910000000,2009-02-03 00:22:00.910000000,47
2008-12-19 00:14:00.510000000,2009-01-02 00:14:00.510000000,14
2008-12-19 00:21:00.900000000,2009-02-03 00:21:00.900000000,46
2008-12-19 00:24:00.960000000,2009-03-03 00:24:00.960000000,74
2008-12-20 00:13:00.480000000,2009-01-02 00:13:00.480000000,13
2008-12-20 00:19:00.810000000,2009-02-02 00:19:00.810000000,44
2008-12-20 00:20:00.900000000,2009-02-03 00:20:00.900000000,45
2008-12-20 00:23:00.930000000,2009-03-03 00:23:00.930000000,73
---- TYPES
TIMESTAMP, TIMESTAMP, INT
====
---- QUERY
# Test of order by with NULL tuple rows (from an outer join)
select t1.id, t1.int_col, t2.id, t2.int_col
from alltypesagg t1
left outer join alltypessmall t2
on (t1.int_col = t2.int_col)
order by t1.id,t2.id limit 10
---- RESULTS
0,NULL,NULL,NULL
0,NULL,NULL,NULL
1,1,1,1
1,1,11,1
1,1,21,1
1,1,26,1
1,1,36,1
1,1,46,1
1,1,51,1
1,1,61,1
---- TYPES
int,int,int,int
====
---- QUERY
# Test limit 0 from sub query
select sum(a.int_col) from
(select int_col from functional.alltypes order by int_col limit 0) a
---- RESULTS
NULL
---- TYPES
bigint
====
---- QUERY
# Test queries with divide by 0 (cast to string to avoid nan != nan issues)
select cast(if(id % 2 = 0, cast(id/3 as int), -id) / if(id > 4 or id = 0, 0, 1) as string)
from alltypestiny order by
if(id % 2 = 0, cast(id/3 as int), -id) / if(id > 4 or id = 0, 0, 1) desc limit 100;
---- RESULTS
'inf'
'1'
'0'
'-1'
'-3'
'-inf'
'-inf'
'nan'
---- TYPES
STRING
====
---- QUERY
# Test queries with divide by 0 (cast to string to avoid nan != nan issues)
select CAST(if(id % 2 = 0, cast(id/3 as int), -id) / if(id > 4 or id = 0, 0, 1) as STRING)
from alltypestiny order by
if(id % 2 = 0, cast(id/3 as int), -id) / if(id > 4 or id = 0, 0, 1) asc limit 100;
---- RESULTS
'nan'
'-inf'
'-inf'
'-3'
'-1'
'0'
'1'
'inf'
====
---- QUERY
# Taken from limit.test
# With an offset of 0
select * from alltypesagg where day is not null order by id limit 10 offset 0
---- RESULTS
0,true,NULL,NULL,NULL,NULL,NULL,NULL,'01/01/10','0',2010-01-01 00:00:00,2010,1,1
1,false,1,1,1,10,1.100000023841858,10.1,'01/01/10','1',2010-01-01 00:01:00,2010,1,1
2,true,2,2,2,20,2.200000047683716,20.2,'01/01/10','2',2010-01-01 00:02:00.100000000,2010,1,1
3,false,3,3,3,30,3.299999952316284,30.3,'01/01/10','3',2010-01-01 00:03:00.300000000,2010,1,1
4,true,4,4,4,40,4.400000095367432,40.4,'01/01/10','4',2010-01-01 00:04:00.600000000,2010,1,1
5,false,5,5,5,50,5.5,50.5,'01/01/10','5',2010-01-01 00:05:00.100000000,2010,1,1
6,true,6,6,6,60,6.599999904632568,60.59999999999999,'01/01/10','6',2010-01-01 00:06:00.150000000,2010,1,1
7,false,7,7,7,70,7.699999809265137,70.7,'01/01/10','7',2010-01-01 00:07:00.210000000,2010,1,1
8,true,8,8,8,80,8.800000190734863,80.8,'01/01/10','8',2010-01-01 00:08:00.280000000,2010,1,1
9,false,9,9,9,90,9.899999618530273,90.89999999999999,'01/01/10','9',2010-01-01 00:09:00.360000000,2010,1,1
---- TYPES
int, boolean, tinyint, smallint, int, bigint, float, double, string, string, timestamp, int, int, int
====
---- QUERY
# Taken from limit.test
# With a non-zero offset
select * from alltypesagg where day is not null order by id limit 10 offset 5
---- RESULTS
5,false,5,5,5,50,5.5,50.5,'01/01/10','5',2010-01-01 00:05:00.100000000,2010,1,1
6,true,6,6,6,60,6.599999904632568,60.59999999999999,'01/01/10','6',2010-01-01 00:06:00.150000000,2010,1,1
7,false,7,7,7,70,7.699999809265137,70.7,'01/01/10','7',2010-01-01 00:07:00.210000000,2010,1,1
8,true,8,8,8,80,8.800000190734863,80.8,'01/01/10','8',2010-01-01 00:08:00.280000000,2010,1,1
9,false,9,9,9,90,9.899999618530273,90.89999999999999,'01/01/10','9',2010-01-01 00:09:00.360000000,2010,1,1
10,true,NULL,10,10,100,11,101,'01/01/10','10',2010-01-01 00:10:00.450000000,2010,1,1
11,false,1,11,11,110,12.10000038146973,111.1,'01/01/10','11',2010-01-01 00:11:00.550000000,2010,1,1
12,true,2,12,12,120,13.19999980926514,121.2,'01/01/10','12',2010-01-01 00:12:00.660000000,2010,1,1
13,false,3,13,13,130,14.30000019073486,131.3,'01/01/10','13',2010-01-01 00:13:00.780000000,2010,1,1
14,true,4,14,14,140,15.39999961853027,141.4,'01/01/10','14',2010-01-01 00:14:00.910000000,2010,1,1
---- TYPES
int, boolean, tinyint, smallint, int, bigint, float, double, string, string, timestamp, int, int, int
====
---- QUERY
# Taken from limit.test
# With an offset that reduces the result size (limit is much bigger than number of rows)
select id from functional.alltypessmall order by 1 limit 10000 offset 99;
---- RESULTS
99
---- TYPES
int
====
---- QUERY
# Taken from limit.test
# With an offset that is bigger than the number of rows
select id from functional.alltypessmall order by 1 limit 1 offset 1000;
---- RESULTS
---- TYPES
int
====
---- QUERY
# Taken from limit.test
# Offset within a subquery
select x.id from (
select id from alltypesagg order by id limit 5 offset 5) x
order by x.id
limit 100 offset 4;
---- RESULTS
8
---- TYPES
int
====
---- QUERY
# Taken from joins.test
# cross join
select t1.id, t2.id from alltypestiny t1 cross join alltypestiny t2
where (t1.id < 3 and t2.id < 3)
order by t1.id, t2.id limit 100
---- RESULTS
0,0
0,1
0,2
1,0
1,1
1,2
2,0
2,1
2,2
---- TYPES
int, int
====
---- QUERY
# Taken from joins.test
# cross join with nulls and constant table
select id, tinyint_col, t1.c from functional.alltypesagg
cross join (values(NULL c, 1, 2)) as t1
order by tinyint_col nulls first, id, t1.c
limit 6
---- RESULTS
0,NULL,NULL
0,NULL,NULL
10,NULL,NULL
10,NULL,NULL
20,NULL,NULL
20,NULL,NULL
---- TYPES
int, tinyint, null
====
---- QUERY
# check cross joins within a subquery
# Taken from joins.test
select t1.id as t1_id, t2_id, t3_id from alltypestiny t1
cross join (select t2.id as t2_id, t3.id as t3_id from alltypestiny t2
cross join alltypestiny t3) t4
where t1.id < 2 and t2_id < 2 and t3_id < 2
order by t1.id, t2_id, t3_id
limit 10
---- RESULTS
0,0,0
0,0,1
0,1,0
0,1,1
1,0,0
1,0,1
1,1,0
1,1,1
---- TYPES
int, int, int
====
---- QUERY
# join with three tables and then a cross join, extra where predicates, extra scan
# predicates, nulls in joins cols (alltypesagg.tinyint_col contains nulls instead of
# 0s)
# Taken from joins.test
select a.smallint_col, b.id, a.tinyint_col, c.id, a.int_col, b.float_col, c.string_col, d.id
from alltypesagg a
join alltypessmall b on (a.smallint_col = b.id)
join alltypessmall c on (a.tinyint_col = c.id)
cross join alltypestiny d
where a.month=1
and a.day=1
and a.int_col > 899
and b.float_col > 4.5
and c.string_col < '4'
and a.int_col + b.float_col + cast(c.string_col as float) < 1000
and d.id < 2
order by a.id, b.id, c.id, d.id
limit 100
---- RESULTS
31,31,1,1,931,6.599999904632568,'1',0
31,31,1,1,931,6.599999904632568,'1',1
32,32,2,2,932,7.699999809265137,'2',0
32,32,2,2,932,7.699999809265137,'2',1
33,33,3,3,933,8.800000190734863,'3',0
33,33,3,3,933,8.800000190734863,'3',1
41,41,1,1,941,6.599999904632568,'1',0
41,41,1,1,941,6.599999904632568,'1',1
42,42,2,2,942,7.699999809265137,'2',0
42,42,2,2,942,7.699999809265137,'2',1
43,43,3,3,943,8.800000190734863,'3',0
43,43,3,3,943,8.800000190734863,'3',1
81,81,1,1,981,6.599999904632568,'1',0
81,81,1,1,981,6.599999904632568,'1',1
82,82,2,2,982,7.699999809265137,'2',0
82,82,2,2,982,7.699999809265137,'2',1
83,83,3,3,983,8.800000190734863,'3',0
83,83,3,3,983,8.800000190734863,'3',1
91,91,1,1,991,6.599999904632568,'1',0
91,91,1,1,991,6.599999904632568,'1',1
---- TYPES
SMALLINT, INT, TINYINT, INT, INT, FLOAT, STRING, INT
====
---- QUERY
# join against subquery with limit;
# predicate pushdown is prevented in presence of order by/limit clause; variant w/ join
# Taken from subquery-limit.test
select alltypes.id, a.id
from alltypes
join (
select a.id, a.bool_col
from alltypessmall a join alltypessmall using (id)
order by a.id limit 10
) a using (id)
where a.bool_col = true
order by
a.id
limit 5
---- RESULTS
0,0
2,2
4,4
6,6
8,8
---- TYPES
INT, INT
====
---- QUERY
# Mixed UNION ALL/DISTINCT but effectively only UNION DISTINCT, no nested unions,
# with order by and limit
# Taken from union.test
select id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, float_col, double_col, date_string_col, string_col, timestamp_col, year, month from alltypestiny where year=2009 and month=1
union all
select id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, float_col, double_col, date_string_col, string_col, timestamp_col, year, month from alltypestiny where year=2009 and month=1
union all
select id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, float_col, double_col, date_string_col, string_col, timestamp_col, year, month from alltypestiny where year=2009 and month=2
union distinct
(select id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, float_col, double_col, date_string_col, string_col, timestamp_col, year, month from alltypestiny where year=2009 and month=2)
order by 1 limit 3
---- RESULTS
0,true,0,0,0,0,0,0,'01/01/09','0',2009-01-01 00:00:00,2009,1
1,false,1,1,1,10,1.100000023841858,10.1,'01/01/09','1',2009-01-01 00:01:00,2009,1
2,true,0,0,0,0,0,0,'02/01/09','0',2009-02-01 00:00:00,2009,2
---- TYPES
int, boolean, tinyint, smallint, int, bigint, float, double, string, string, timestamp, int, int
====
---- QUERY
# Mixed UNION ALL/DISTINCT, no nested unions, with order by and limit
# Taken from union.test
select id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, float_col, double_col, date_string_col, string_col, timestamp_col, year, month from alltypestiny where year=2009 and month=1
union distinct
select id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, float_col, double_col, date_string_col, string_col, timestamp_col, year, month from alltypestiny where year=2009 and month=1
union all
select id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, float_col, double_col, date_string_col, string_col, timestamp_col, year, month from alltypestiny where year=2009 and month=2
union all
(select id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, float_col, double_col, date_string_col, string_col, timestamp_col, year, month from alltypestiny where year=2009 and month=2)
order by 1,2 limit 3
---- RESULTS
0,true,0,0,0,0,0,0,'01/01/09','0',2009-01-01 00:00:00,2009,1
1,false,1,1,1,10,1.100000023841858,10.1,'01/01/09','1',2009-01-01 00:01:00,2009,1
2,true,0,0,0,0,0,0,'02/01/09','0',2009-02-01 00:00:00,2009,2
---- TYPES
int, boolean, tinyint, smallint, int, bigint, float, double, string, string, timestamp, int, int
====
---- QUERY
# Mixed UNION ALL/DISTINCT, no nested unions, with order by and limit
# Taken from union.test
select id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, float_col, double_col, date_string_col, string_col, timestamp_col, year, month from alltypestiny where year=2009 and month=1
union all
select id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, float_col, double_col, date_string_col, string_col, timestamp_col, year, month from alltypestiny where year=2009 and month=1
union distinct
select id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, float_col, double_col, date_string_col, string_col, timestamp_col, year, month from alltypestiny where year=2009 and month=2
union all
(select id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, float_col, double_col, date_string_col, string_col, timestamp_col, year, month from alltypestiny where year=2009 and month=2)
order by 1,2 limit 4
---- RESULTS
0,true,0,0,0,0,0,0,'01/01/09','0',2009-01-01 00:00:00,2009,1
1,false,1,1,1,10,1.100000023841858,10.1,'01/01/09','1',2009-01-01 00:01:00,2009,1
2,true,0,0,0,0,0,0,'02/01/09','0',2009-02-01 00:00:00,2009,2
2,true,0,0,0,0,0,0,'02/01/09','0',2009-02-01 00:00:00,2009,2
---- TYPES
int, boolean, tinyint, smallint, int, bigint, float, double, string, string, timestamp, int, int
====
---- QUERY
# Complex union unnesting: Partially unnestable up to 2nd level
# Taken from union.test
select id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, float_col, double_col, date_string_col, string_col, timestamp_col, year, month from alltypestiny where year=2009 and month=1
union all
(select id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, float_col, double_col, date_string_col, string_col, timestamp_col, year, month from alltypestiny where year=2009 and month=1
union distinct
(select id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, float_col, double_col, date_string_col, string_col, timestamp_col, year, month from alltypestiny where year=2009 and month=2
union all
(select id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, float_col, double_col, date_string_col, string_col, timestamp_col, year, month from alltypestiny where year=2009 and month=2
union distinct
(select id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, float_col, double_col, date_string_col, string_col, timestamp_col, year, month from alltypestiny where year=2009 and month=3)
order by 1 limit 3)))
order by 12, 13, 1
limit 20
---- RESULTS
0,true,0,0,0,0,0,0,'01/01/09','0',2009-01-01 00:00:00,2009,1
0,true,0,0,0,0,0,0,'01/01/09','0',2009-01-01 00:00:00,2009,1
1,false,1,1,1,10,1.100000023841858,10.1,'01/01/09','1',2009-01-01 00:01:00,2009,1
1,false,1,1,1,10,1.100000023841858,10.1,'01/01/09','1',2009-01-01 00:01:00,2009,1
2,true,0,0,0,0,0,0,'02/01/09','0',2009-02-01 00:00:00,2009,2
3,false,1,1,1,10,1.100000023841858,10.1,'02/01/09','1',2009-02-01 00:01:00,2009,2
4,true,0,0,0,0,0,0,'03/01/09','0',2009-03-01 00:00:00,2009,3
---- TYPES
int, boolean, tinyint, smallint, int, bigint, float, double, string, string, timestamp, int, int
====
---- QUERY
# Complex union unnesting: Partially unnestable up to 1st level
# Taken from union.test
select id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, float_col, double_col, date_string_col, string_col, timestamp_col, year, month from alltypestiny where year=2009 and month=1
union distinct
(select id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, float_col, double_col, date_string_col, string_col, timestamp_col, year, month from alltypestiny where year=2009 and month=1
union distinct
(select id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, float_col, double_col, date_string_col, string_col, timestamp_col, year, month from alltypestiny where year=2009 and month=2
union all
(select id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, float_col, double_col, date_string_col, string_col, timestamp_col, year, month from alltypestiny where year=2009 and month=2
union distinct
(select id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, float_col, double_col, date_string_col, string_col, timestamp_col, year, month from alltypestiny where year=2009 and month=3)
order by 1 limit 3)))
order by 12, 13, 1
limit 20
---- RESULTS
0,true,0,0,0,0,0,0,'01/01/09','0',2009-01-01 00:00:00,2009,1
1,false,1,1,1,10,1.100000023841858,10.1,'01/01/09','1',2009-01-01 00:01:00,2009,1
2,true,0,0,0,0,0,0,'02/01/09','0',2009-02-01 00:00:00,2009,2
3,false,1,1,1,10,1.100000023841858,10.1,'02/01/09','1',2009-02-01 00:01:00,2009,2
4,true,0,0,0,0,0,0,'03/01/09','0',2009-03-01 00:00:00,2009,3
---- TYPES
int, boolean, tinyint, smallint, int, bigint, float, double, string, string, timestamp, int, int
====
---- QUERY
# Complex union unnesting: Multiple nested unions to test all rules in a single query
# Taken from union.test
select id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, float_col, double_col, date_string_col, string_col, timestamp_col, year, month from alltypestiny where year=2009 and month=1
union distinct
(select id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, float_col, double_col, date_string_col, string_col, timestamp_col, year, month from alltypestiny where year=2009 and month=1
union all
select id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, float_col, double_col, date_string_col, string_col, timestamp_col, year, month from alltypestiny where year=2009 and month=2)
union distinct
(select id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, float_col, double_col, date_string_col, string_col, timestamp_col, year, month from alltypestiny where year=2009 and month=2
union all
(select id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, float_col, double_col, date_string_col, string_col, timestamp_col, year, month from alltypestiny where year=2009 and month=3)
order by 1 limit 3)
union all
(select id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, float_col, double_col, date_string_col, string_col, timestamp_col, year, month from alltypestiny where year=2009 and month=3
union all
select id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, float_col, double_col, date_string_col, string_col, timestamp_col, year, month from alltypestiny where year=2009 and month=4)
union all
(select id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, float_col, double_col, date_string_col, string_col, timestamp_col, year, month from alltypestiny where year=2009 and month=4
union all
(select id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, float_col, double_col, date_string_col, string_col, timestamp_col, year, month from alltypestiny where year=2009 and month=5)
order by 1 limit 3)
order by 12, 13, 1
limit 20
---- RESULTS
0,true,0,0,0,0,0,0,'01/01/09','0',2009-01-01 00:00:00,2009,1
1,false,1,1,1,10,1.100000023841858,10.1,'01/01/09','1',2009-01-01 00:01:00,2009,1
2,true,0,0,0,0,0,0,'02/01/09','0',2009-02-01 00:00:00,2009,2
3,false,1,1,1,10,1.100000023841858,10.1,'02/01/09','1',2009-02-01 00:01:00,2009,2
4,true,0,0,0,0,0,0,'03/01/09','0',2009-03-01 00:00:00,2009,3
4,true,0,0,0,0,0,0,'03/01/09','0',2009-03-01 00:00:00,2009,3
5,false,1,1,1,10,1.100000023841858,10.1,'03/01/09','1',2009-03-01 00:01:00,2009,3
6,true,0,0,0,0,0,0,'04/01/09','0',2009-04-01 00:00:00,2009,4
6,true,0,0,0,0,0,0,'04/01/09','0',2009-04-01 00:00:00,2009,4
7,false,1,1,1,10,1.100000023841858,10.1,'04/01/09','1',2009-04-01 00:01:00,2009,4
7,false,1,1,1,10,1.100000023841858,10.1,'04/01/09','1',2009-04-01 00:01:00,2009,4
---- TYPES
int, boolean, tinyint, smallint, int, bigint, float, double, string, string, timestamp, int, int
====
---- QUERY
# UNION ALL in subquery
# Taken from union.test
select x.id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, float_col, double_col, date_string_col, string_col, timestamp_col, year, month from
(select id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, float_col, double_col, date_string_col, string_col, timestamp_col, year, month from alltypestiny where year=2009 and month=1
union all
select id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, float_col, double_col, date_string_col, string_col, timestamp_col, year, month from alltypestiny where year=2009 and month=1) x
union all
(select id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, float_col, double_col, date_string_col, string_col, timestamp_col, year, month from alltypestiny where year=2009 and month=2)
order by 1 limit 5
---- RESULTS
0,true,0,0,0,0,0,0,'01/01/09','0',2009-01-01 00:00:00,2009,1
0,true,0,0,0,0,0,0,'01/01/09','0',2009-01-01 00:00:00,2009,1
1,false,1,1,1,10,1.100000023841858,10.1,'01/01/09','1',2009-01-01 00:01:00,2009,1
1,false,1,1,1,10,1.100000023841858,10.1,'01/01/09','1',2009-01-01 00:01:00,2009,1
2,true,0,0,0,0,0,0,'02/01/09','0',2009-02-01 00:00:00,2009,2
---- TYPES
int, boolean, tinyint, smallint, int, bigint, float, double, string, string, timestamp, int, int
====
---- QUERY
# UNION DISTINCT in subquery
# Taken from union.test
select x.id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, float_col, double_col, date_string_col, string_col, timestamp_col, year, month from
(select id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, float_col, double_col, date_string_col, string_col, timestamp_col, year, month from alltypestiny where year=2009 and month=1
union distinct
select id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, float_col, double_col, date_string_col, string_col, timestamp_col, year, month from alltypestiny where year=2009 and month=1) x
union distinct
(select id, bool_col, tinyint_col, smallint_col, int_col, bigint_col, float_col, double_col, date_string_col, string_col, timestamp_col, year, month from alltypestiny where year=2009 and month=2)
order by 1 limit 3
---- RESULTS
0,true,0,0,0,0,0,0,'01/01/09','0',2009-01-01 00:00:00,2009,1
1,false,1,1,1,10,1.100000023841858,10.1,'01/01/09','1',2009-01-01 00:01:00,2009,1
2,true,0,0,0,0,0,0,'02/01/09','0',2009-02-01 00:00:00,2009,2
---- TYPES
int, boolean, tinyint, smallint, int, bigint, float, double, string, string, timestamp, int, int
====
---- QUERY
values(1+1, 2, 5.0, 'a') order by 1 limit 10
---- RESULTS
2,2,5.0,'a'
---- TYPES
SMALLINT, TINYINT, DECIMAL, STRING
====
---- QUERY
values((1+8, 2, 5.0, 'a'), (2, 3, 6.0, 'b'), (3, 4, 7.0, 'c')) order by 1 desc limit 2
---- RESULTS
9,2,5.0,'a'
3,4,7.0,'c'
---- TYPES
SMALLINT, TINYINT, DECIMAL, STRING
====
---- QUERY
# Basic test with a single with-clause view that references a virtual view.
# Taken from with-clause.test
with t as (select abc x, xyz y from functional.complex_view)
select x, y from t order by y limit 10
---- RESULTS
2,'0'
2,'1'
---- TYPES
BIGINT, STRING
====
---- QUERY
# Multiple views in with-clause. All views are used in a union.
# Taken from with-clause.test
with t1 as (select int_col x, bigint_col y from functional.alltypestiny),
t2 as (select 1 x , 10 y), t3 as (values(2 x , 20 y), (3, 30))
select * from t1 union all select * from t2 union all (select * from t3) order by x limit 20
---- RESULTS
0,0
0,0
0,0
0,0
1,10
1,10
1,10
1,10
1,10
2,20
3,30
---- TYPES
INT, BIGINT
====
---- QUERY
# Self-join of with-clause table to make sure the join op is properly set
# in the cloned inline-view instances.
# Taken from with-clause.test
with t as (select int_col x, bigint_col y from functional.alltypestiny order by id limit 2)
select * from t t1 left outer join t t2 on t1.y = t2.x full outer join t t3 on t2.y = t3.x
order by t1.x limit 10
---- RESULTS
0,0,0,0,0,0
1,10,NULL,NULL,NULL,NULL
NULL,NULL,NULL,NULL,1,10
---- TYPES
INT, BIGINT, INT, BIGINT, INT, BIGINT
====
---- QUERY
select * from functional.alltypestiny order by 2,1 limit 10
---- RESULTS
1,false,1,1,1,10,1.100000023841858,10.1,'01/01/09','1',2009-01-01 00:01:00,2009,1
3,false,1,1,1,10,1.100000023841858,10.1,'02/01/09','1',2009-02-01 00:01:00,2009,2
5,false,1,1,1,10,1.100000023841858,10.1,'03/01/09','1',2009-03-01 00:01:00,2009,3
7,false,1,1,1,10,1.100000023841858,10.1,'04/01/09','1',2009-04-01 00:01:00,2009,4
0,true,0,0,0,0,0,0,'01/01/09','0',2009-01-01 00:00:00,2009,1
2,true,0,0,0,0,0,0,'02/01/09','0',2009-02-01 00:00:00,2009,2
4,true,0,0,0,0,0,0,'03/01/09','0',2009-03-01 00:00:00,2009,3
6,true,0,0,0,0,0,0,'04/01/09','0',2009-04-01 00:00:00,2009,4
---- TYPES
INT, BOOLEAN, TINYINT, SMALLINT, INT, BIGINT, FLOAT, DOUBLE, STRING, STRING, TIMESTAMP, INT, INT
====
---- QUERY
# Test that codegen of ordering expression with intermediate char value doesn't crash.
# The cast expression is evaluated as part of tuple comparison.
select cast(string_col as char(20)) from alltypes order by 1 limit 5
---- RESULTS
'0 '
'0 '
'0 '
'0 '
'0 '
---- TYPES
CHAR
====