blob: a5267aaba3eca46d77cd2b0652fecae8f2a0a440 [file] [log] [blame]
====
---- QUERY
# Test join on timestamp, hashing was not working properly
select a.timestamp_col from alltypessmall a inner join alltypessmall b on
(a.timestamp_col = b.timestamp_col)
where a.year=2009 and a.month=1 and b.year=2009 and b.month=1
---- RESULTS
2009-01-01 00:00:00
2009-01-01 00:01:00
2009-01-01 00:02:00.100000000
2009-01-01 00:03:00.300000000
2009-01-01 00:04:00.600000000
2009-01-01 00:05:00.100000000
2009-01-01 00:06:00.150000000
2009-01-01 00:07:00.210000000
2009-01-01 00:08:00.280000000
2009-01-01 00:09:00.360000000
2009-01-02 00:10:00.450000000
2009-01-02 00:11:00.450000000
2009-01-02 00:12:00.460000000
2009-01-02 00:13:00.480000000
2009-01-02 00:14:00.510000000
2009-01-02 00:15:00.550000000
2009-01-02 00:16:00.600000000
2009-01-02 00:17:00.660000000
2009-01-02 00:18:00.730000000
2009-01-02 00:19:00.810000000
2009-01-03 00:20:00.900000000
2009-01-03 00:21:00.900000000
2009-01-03 00:22:00.910000000
2009-01-03 00:23:00.930000000
2009-01-03 00:24:00.960000000
---- TYPES
timestamp
====
---- QUERY
# Joins with multiple exprs
select j.*, d.* from JoinTbl j inner join DimTbl d on
(j.test_name = d.name AND j.test_zip = d.zip)
---- RESULTS
1001,'Name1',94611,5000,1001,'Name1',94611
1002,'Name2',94611,5000,1002,'Name2',94611
---- TYPES
bigint, string, int, int, bigint, string, int
====
---- QUERY
select j.*, d.* from JoinTbl j inner join DimTbl d on
(j.test_zip = d.zip AND j.test_name = d.name)
---- RESULTS
1001,'Name1',94611,5000,1001,'Name1',94611
1002,'Name2',94611,5000,1002,'Name2',94611
---- TYPES
bigint, string, int, int, bigint, string, int
====
---- QUERY
# join between three tables, extra join predicates, extra scan predicates, nulls in joins cols
# (alltypesagg.tinyint_col contains nulls instead of 0s)
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
---- RESULTS
15,15,5,5,915,5.5,'5'
16,16,6,6,916,6.599999904632568,'6'
31,31,1,1,931,6.599999904632568,'1'
32,32,2,2,932,7.699999809265137,'2'
33,33,3,3,933,8.800000190734863,'3'
34,34,4,4,934,9.899999618530273,'4'
41,41,1,1,941,6.599999904632568,'1'
42,42,2,2,942,7.699999809265137,'2'
43,43,3,3,943,8.800000190734863,'3'
44,44,4,4,944,9.899999618530273,'4'
5,5,5,5,905,5.5,'5'
55,55,5,5,955,5.5,'5'
56,56,6,6,956,6.599999904632568,'6'
6,6,6,6,906,6.599999904632568,'6'
65,65,5,5,965,5.5,'5'
66,66,6,6,966,6.599999904632568,'6'
81,81,1,1,981,6.599999904632568,'1'
82,82,2,2,982,7.699999809265137,'2'
83,83,3,3,983,8.800000190734863,'3'
84,84,4,4,984,9.899999618530273,'4'
91,91,1,1,991,6.599999904632568,'1'
---- TYPES
smallint, int, tinyint, int, int, float, string
====
---- QUERY
# reversing the order produces the same results
select a.smallint_col, b.id, a.tinyint_col, c.id, a.int_col, b.float_col, c.string_col
from alltypessmall b
join alltypesagg a 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
---- RESULTS
15,15,5,5,915,5.5,'5'
16,16,6,6,916,6.599999904632568,'6'
31,31,1,1,931,6.599999904632568,'1'
32,32,2,2,932,7.699999809265137,'2'
33,33,3,3,933,8.800000190734863,'3'
34,34,4,4,934,9.899999618530273,'4'
41,41,1,1,941,6.599999904632568,'1'
42,42,2,2,942,7.699999809265137,'2'
43,43,3,3,943,8.800000190734863,'3'
44,44,4,4,944,9.899999618530273,'4'
5,5,5,5,905,5.5,'5'
55,55,5,5,955,5.5,'5'
56,56,6,6,956,6.599999904632568,'6'
6,6,6,6,906,6.599999904632568,'6'
65,65,5,5,965,5.5,'5'
66,66,6,6,966,6.599999904632568,'6'
81,81,1,1,981,6.599999904632568,'1'
82,82,2,2,982,7.699999809265137,'2'
83,83,3,3,983,8.800000190734863,'3'
84,84,4,4,984,9.899999618530273,'4'
91,91,1,1,991,6.599999904632568,'1'
---- TYPES
smallint, int, tinyint, int, int, float, string
====
---- QUERY
# joins on empty tables
select * from emptytable t1 join emptytable t2 on (t1.field=t2.field)
---- RESULTS
---- TYPES
string, int, string, int
====
---- QUERY
select * from emptytable t1 join greptiny t2 on (t1.field=t2.field)
---- RESULTS
---- TYPES
string, int, string
====
---- QUERY
select * from greptiny t1 join emptytable t2 on (t1.field=t2.field)
---- RESULTS
---- TYPES
string, string, int
====
---- QUERY
# 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
# cross join with an empty table
select t1.id, e.field from alltypestiny t1 cross join emptytable e
---- RESULTS
---- TYPES
int, string
====
---- QUERY
# check a larger cross join produces the expected number of rows
select count(*) from functional.AllTypesSmall t1 cross join functional.AllTypesSmall t2
---- RESULTS
10000
---- TYPES
bigint
====
---- QUERY
# 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
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
# cross join between two tables, extra where predicates, extra scan predicates, nulls in
# joins cols (alltypesagg.tinyint_col contains nulls instead of 0s)
select a.tinyint_col, b.id, a.string_col
from alltypesagg a cross join alltypessmall b
where a.tinyint_col = b.id
and 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
---- RESULTS
1,1,'91'
1,1,'881'
1,1,'891'
1,1,'901'
1,1,'911'
1,1,'921'
1,1,'931'
1,1,'941'
1,1,'951'
1,1,'961'
1,1,'971'
1,1,'981'
1,1,'991'
---- TYPES
tinyint, int, string
====
---- 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)
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
# FULL OUTER JOIN between two inline views followed by a GROUP BY (IMPALA-964)
select a.x FROM (VALUES(1 x, 1 y)) a FULL OUTER JOIN (VALUES(1 x, 1 y)) b
ON (a.x = b.y) GROUP BY a.x
---- RESULTS
1
---- TYPES
TINYINT
====
---- QUERY
select 1 FROM (VALUES(1 x, 1 y)) a RIGHT OUTER JOIN (VALUES(1 x, 1 y)) b
ON (a.x = b.y) GROUP BY a.x
---- RESULTS
1
---- TYPES
TINYINT
====
---- QUERY
# Test joins with union inputs. One input is a union.
select a.id, b.id, a.string_col, b.string_col
from
(select id, string_col from functional.alltypessmall
where year = 2009 and month = 1
union all
select id, string_col from functional.alltypessmall
where year = 2009 and month = 2
union all
select 0, '1234') a
inner join
functional.alltypestiny b
on a.id = b.id
where b.id < 5
---- RESULTS
0,0,'0','0'
0,0,'1234','0'
1,1,'1','1'
2,2,'2','0'
3,3,'3','1'
4,4,'4','0'
---- TYPES
INT, INT, STRING, STRING
====
---- QUERY
# Test joins with union inputs. One input is a union.
select a.id, b.id, a.string_col, b.string_col
from
functional.alltypestiny b
left outer join
(select id, string_col from functional.alltypessmall
where year = 2009 and month = 1
union all
select id, string_col from functional.alltypessmall
where year = 2009 and month = 2
union all
select 0, '1234') a
on a.id = b.id
where b.id < 5
---- RESULTS
0,0,'0','0'
0,0,'1234','0'
1,1,'1','1'
2,2,'2','0'
3,3,'3','1'
4,4,'4','0'
---- TYPES
INT, INT, STRING, STRING
====
---- QUERY
# Test joins with union inputs. Both inputs are a union.
select a.id, b.id, a.string_col, b.string_col
from
(select id, string_col from functional.alltypessmall
where year = 2009 and month = 1
union all
select id, string_col from functional.alltypessmall
where year = 2009 and month = 2
union all
select 0, '1234') a
full outer join
(select id, string_col from functional.alltypessmall
where year = 2009 and month = 1
union all
select id, string_col from functional.alltypessmall
where year = 2009 and month = 2
union all
select 0, '5678') b
on a.id = b.id
where b.id < 5
---- RESULTS
0,0,'0','0'
0,0,'0','5678'
0,0,'1234','0'
0,0,'1234','5678'
1,1,'1','1'
2,2,'2','2'
3,3,'3','3'
4,4,'4','4'
---- TYPES
INT, INT, STRING, STRING
====
---- QUERY
# Regression test for IMPALA-1123. Tests that hash exchanges feeding the same
# hash-partitioned fragment use type-identical partition exprs.
select straight_join count(*) from
(select tinyint_col from functional.alltypessmall
union distinct
select tinyint_col from functional.alltypessmall) a
inner join [shuffle]
(select smallint_col from functional.alltypessmall
union distinct
select smallint_col from functional.alltypessmall) b
on a.tinyint_col = b.smallint_col
---- RESULTS
10
---- TYPES
BIGINT
====
---- QUERY
# Regression test for IMPALA-1123. The plan below has one big hash-partitioned
# fragment with two joins and a merge agg since their partition exprs are all
# compatible. The single fragment is fed by multiple hash-partitioning senders,
# and we need to ensure that the partition exprs used by the senders are cast
# to identical types because the same value will have different hashes for
# different types. Minimal explain plan:
#
# 15:AGGREGATE [MERGE FINALIZE]
# 14:EXCHANGE [UNPARTITIONED]
# 08:AGGREGATE
# 07:HASH JOIN [INNER JOIN, PARTITIONED]
# |--13:AGGREGATE [MERGE FINALIZE]
# | 12:EXCHANGE [HASH(tinyint_col)]
# | 05:AGGREGATE
# | 04:SCAN HDFS [functional.alltypessmall]
# 06:HASH JOIN [INNER JOIN, PARTITIONED]
# |--03:HASH JOIN [INNER JOIN, PARTITIONED]
# | |--10:EXCHANGE [HASH(t2.smallint_col)]
# | | 02:SCAN HDFS [functional.alltypessmall t2]
# | 09:EXCHANGE [HASH(t1.tinyint_col)]
# | 01:SCAN HDFS [functional.alltypessmall t1]
# 11:EXCHANGE [HASH(a.int_col)]
# 00:SCAN HDFS [functional.alltypessmall a]
#
select straight_join count(*) from
functional.alltypessmall a
inner join [shuffle]
(select straight_join t2.* from
functional.alltypessmall t1
inner join [shuffle]
functional.alltypessmall t2
on t1.tinyint_col = t2.smallint_col) b
on a.int_col = b.smallint_col
inner join [shuffle]
(select distinct tinyint_col
from functional.alltypessmall) c
on a.int_col = c.tinyint_col
---- RESULTS
11200
---- TYPES
BIGINT
====
---- QUERY
# Same query as above with broadcast joins. Results should be identical.
select straight_join count(*) from
functional.alltypessmall a
inner join [broadcast]
(select straight_join t2.* from
functional.alltypessmall t1
inner join [broadcast]
functional.alltypessmall t2
on t1.tinyint_col = t2.smallint_col) b
on a.int_col = b.smallint_col
inner join [broadcast]
(select distinct tinyint_col
from functional.alltypessmall) c
on a.int_col = c.tinyint_col
---- RESULTS
11200
---- TYPES
BIGINT
====
---- QUERY
# Regression test for IMPALA-1329
select COUNT(t1.string_col) AS int_col_1 FROM alltypestiny t1
LEFT JOIN alltypestiny t2 ON t2.date_string_col = t1.string_col
LEFT JOIN alltypesagg t3 ON t3.id = t2.tinyint_col
---- RESULTS
8
---- TYPES
BIGINT
====
---- QUERY
# Regression test for IMPALA-1332
select a.int_col from alltypesagg a
RIGHT OUTER JOIN alltypesagg b
using(int_col)
where a.int_col is NULL limit 1
---- RESULTS
NULL
---- TYPES
INT
====
---- QUERY
# Left outer join with non-equi join predicates
select straight_join count(*) from
alltypestiny a left outer join alltypes b on a.id < b.id
where a.id < 5
---- RESULTS
36485
---- TYPES
BIGINT
====
---- QUERY
# Left semi join with non-equi join predicates
select straight_join count(*) from
alltypesagg a left semi join alltypestiny b on a.id >= b.id or a.int_col != b.int_col
where a.tinyint_col < 10
---- RESULTS
9000
---- TYPES
BIGINT
====
---- QUERY
# Left anti join with non-equi join predicates
select straight_join count(*) from
alltypesagg a left anti join alltypestiny b on a.id < b.id and a.int_col > b.int_col
---- RESULTS
10994
---- TYPES
BIGINT
====
---- QUERY
# Inner and left outer joins with non-equi join predicates
select straight_join count(*) from
alltypesagg a inner join alltypes b on a.id < b.id
left outer join alltypestiny c
on a.int_col != c.int_col or a.tinyint_col > c.tinyint_col
where a.smallint_col < 2
---- RESULTS
2038096
---- TYPES
BIGINT
====
---- QUERY
# Inner, left-semi and left-anti joins with non-equi join predicates
select straight_join count(*) from
alltypestiny a left semi join alltypesagg b on a.id != b.id
left anti join alltypes c on a.int_col < c.int_col
inner join alltypestiny d on a.int_col = d.int_col
where a.tinyint_col < 10
---- RESULTS
0
---- TYPES
BIGINT
====
---- QUERY
# Joins with non-equi join predicates between inline views
select straight_join count(*) from
(select * from alltypestiny where id < 10) v1
inner join
(select * from alltypesagg a left semi join
alltypes b on a.id < b.id) v2
on v1.int_col != v2.tinyint_col
---- RESULTS
49632
---- TYPES
BIGINT
====
---- QUERY
# IMPALA-2319: NLJ with limit
select straight_join t1.id, t2.bool_col
from functional.alltypes t1
cross join functional.alltypes t2 where t1.id = 0 limit 1;
---- RESULTS
0,true
---- TYPES
INT,BOOLEAN
====
---- QUERY
# IMPALA-2147: IS [NOT] DISTINCT FROM and "<=>"
select count(*) > 0
from alltypesagg as a, alltypesagg as b
where (a.tinyint_col IS DISTINCT FROM b.tinyint_col)
and a.tinyint_col is null
---- RESULTS
true
---- TYPES
BOOLEAN
====
---- QUERY
select count(*) > 0
from alltypesagg as a, alltypesagg as b
where (a.tinyint_col IS NOT DISTINCT FROM b.tinyint_col)
and a.tinyint_col is null
---- RESULTS
true
---- TYPES
BOOLEAN
====
---- QUERY
select count(*) > 0
from alltypesagg as a, alltypesagg as b
where (a.tinyint_col <=> b.tinyint_col)
and a.tinyint_col is null
---- RESULTS
true
---- TYPES
BOOLEAN
====
---- QUERY
# left joins with <=> are different from left joins with =
select P.d, Q.d, Q.b, Q.b is null
from nulltable P left join nulltable Q
on P.d = Q.d
---- RESULTS
NULL,NULL,'NULL',true
---- TYPES
INT,INT,STRING,BOOLEAN
====
---- QUERY
select P.d, Q.d, Q.b
from nulltable P left join nulltable Q
on P.d <=> Q.d
---- RESULTS
NULL,NULL,''
---- TYPES
INT,INT,STRING
====
---- QUERY
select count(*)
from nulltable P left anti join nulltable Q
on P.d = Q.d
---- RESULTS
1
---- TYPES
BIGINT
====
---- QUERY
select count(*)
from nulltable P left anti join nulltable Q
on P.d <=> Q.d
---- RESULTS
0
---- TYPES
BIGINT
====
---- QUERY
# Test that 'IS DISTINCT FROM' works in nested loop joins
select count(*) from nulltable t1, nulltable t2 where not(t1.d != t2.d)
---- RESULTS
0
---- TYPES
BIGINT
====
---- QUERY
select t1.d, t2.d from nulltable t1, nulltable t2 where not(t1.d IS DISTINCT FROM t2.d)
---- RESULTS
NULL,NULL
---- TYPES
INT,INT
====
---- QUERY
select count(*) from nulltable t1, nulltable t2
where t1.d != length(t2.a)
---- RESULTS
0
---- TYPES
BIGINT
====
---- QUERY
select t1.d, t2.a from nulltable t1, nulltable t2
where t1.d IS DISTINCT FROM length(t2.a)
---- RESULTS
NULL,'a'
---- TYPES
INT,STRING
====
---- QUERY
select t1.a, t1.b, t2.a, t2.b from
(values
(NULL a, NULL b), (NULL, 0), (NULL, 1),
(0, NULL), (0, 0), (0, 1),
(1, NULL), (1, 0), (1, 1)) as t1,
(values
(NULL a, NULL b), (NULL, 0), (NULL, 1),
(0, NULL), (0, 0), (0, 1),
(1, NULL), (1, 0), (1, 1)) as t2
where t1.a <=> t2.a
and t1.b <=> t2.b
order by t1.a, t1.b, t2.a, t2.b
---- RESULTS
0,0,0,0
0,1,0,1
0,NULL,0,NULL
1,0,1,0
1,1,1,1
1,NULL,1,NULL
NULL,0,NULL,0
NULL,1,NULL,1
NULL,NULL,NULL,NULL
---- TYPES
TINYINT,TINYINT,TINYINT,TINYINT
====
---- QUERY
select t1.a, t1.b, t2.a, t2.b from
(values
(NULL a, NULL b), (NULL, 0), (NULL, 1),
(0, NULL), (0, 0), (0, 1),
(1, NULL), (1, 0), (1, 1)) as t1,
(values
(NULL a, NULL b), (NULL, 0), (NULL, 1),
(0, NULL), (0, 0), (0, 1),
(1, NULL), (1, 0), (1, 1)) as t2
where t1.a <=> t2.a
and t1.b = t2.b
order by t1.a, t1.b, t2.a, t2.b
---- RESULTS
0,0,0,0
0,1,0,1
1,0,1,0
1,1,1,1
NULL,0,NULL,0
NULL,1,NULL,1
---- TYPES
TINYINT,TINYINT,TINYINT,TINYINT
====
---- QUERY
# Regression test for IMPALA-3645. Certain UDFs may do local allocations in Expr::Open().
# Make sure the DCHECK in PartitionedHashJoinNode::ProcessBuildInput() doesn't fire.
select count(*) from functional.alltypesagg t1 join functional.alltypesagg t2
on extract(minute from t1.timestamp_col) = extract(hour from t2.timestamp_col);
---- RESULTS
2042200
---- TYPES
BIGINT
====
---- QUERY
# Regression for IMPALA-3884. Exercise HashTableCtx::AssignNullValue() for
# 128-bit TimestampValue.
select count(*) from functional.alltypes t1 right outer join functional.decimal_tbl t2 on
t1.timestamp_col = cast(t2.d4 as TIMESTAMP);
---- RESULTS
5
---- TYPES
BIGINT
====
---- QUERY
# Exercise HashTableCtx::AssignNullValue() for DateValue.
select count(*) from functional.date_tbl t1 right outer join functional.alltypestiny t2 on
t1.date_col >= DATE '1400-01-01' and t1.date_col = t2.timestamp_col;
---- RESULTS
8
---- TYPES
BIGINT
====
---- QUERY
# IMPALA-5850: Tests that the sender partition exprs of a series of partitioned hash
# joins are cast to compatible types even when the containing fragment is RANDOM
# partitioned due a union. This test borrows ideas from existing tests for IMPALA-1123.
# The test has a union with three branches where each branch contains independent and
# incompatible hash-partitioning exchanges. Two of the union branches contain
# partitioned joins which require the sender partition exprs to be cast to produce
# correct results.
# Breakdown of result count:
# The first union branch is expected to produce 2 rows
# The second union branch is expected to produce 11200 rows (see IMPALA-1123 test)
# The third union branch is expected to produce 10 rows
select count(*) from (
select distinct tinyint_col, smallint_col, int_col
from functional.alltypestiny
union all
select /* +straight_join */ b.id, c.tinyint_col, null
from functional.alltypessmall a
inner join /* +shuffle */
(select /* +straight_join */ t2.id, t2.smallint_col
from functional.alltypessmall t1
inner join /* +shuffle */ functional.alltypessmall t2
on t1.tinyint_col = t2.smallint_col) b
on a.int_col = b.smallint_col
inner join /* +shuffle */
(select distinct tinyint_col
from functional.alltypessmall) c
on a.int_col = c.tinyint_col
union all
select /* +straight_join */ tinyint_col, bigint_col, null from
(select distinct tinyint_col, bigint_col div 10 as bigint_col
from functional.alltypessmall) a
inner join /* +shuffle */
(select distinct int_col, smallint_col
from functional.alltypessmall) b
on a.tinyint_col = b.int_col and a.bigint_col = b.smallint_col) v
---- RESULTS
11212
---- TYPES
BIGINT
====
---- QUERY
# Test that 'nan' != 'nan' when joining.
with x as (select cast('nan' as double) n)
select * from x a, x b where a.n = b.n
---- RESULTS
---- TYPES
DOUBLE,DOUBLE
====
---- QUERY
# Test that 'nan' != 'nan' when joining.
select a.id from functional.alltypestiny a, functional.alltypestiny b
where 1/a.double_col + -1/a.double_col = log10(-b.id)
---- RESULTS
---- TYPES
INT
====
---- QUERY
# Test that 'nan' != 'nan' when joining.
select a.id from functional.alltypestiny a, functional.alltypestiny b
where sqrt(-a.id) = b.float_col / b.double_col
---- RESULTS
---- TYPES
INT
====
---- QUERY
# Test than 'nan' != 'nan' when joining.
with t1 as (select cast(sqrt(0.5-x) as FLOAT) c1, y c2 from
(VALUES((1.6 x, 0 y), (3.2, 1), (5.4,2), (0.5, 3), (0.5, 4), (-0.5, 5))) XX),
t2 as (select * from t1)
select t1.c1,t2.c1 from t1 right outer join t2 on t1.c1 = t2.c1;
---- RESULTS
0,0
0,0
0,0
0,0
1,1
NULL,NaN
NULL,NaN
NULL,NaN
---- TYPES
FLOAT,FLOAT
====
---- QUERY
# Test that NaN <=> NaN in joins
select t1.float_col as v
from functional.alltypessmall t1, functional.alltypessmall t2
where sqrt(0.5-t1.float_col) <=> sqrt(0.5-t2.float_col) and t1.float_col > 0.5
---- RESULTS
---- TYPES
FLOAT
====
---- QUERY
# IMPALA-6660: Test that +0 equals -0 when joining
select * from
(select cast("-0" as float) c1) v1,
(select cast("+0" as float) c2) v2
where v1.c1 = v2.c2;
---- RESULTS
-0, 0
---- TYPES
FLOAT,FLOAT
====