====
---- QUERY
# join between three tables, extra join predicates, extra scan predicates, nulls in joins
# cols
# (alltypesagg.tinyint_col contains nulls instead of 0s)
select x.smallint_col, x.id, x.tinyint_col, c.id, x.int_col, x.float_col, c.string_col
from (
       select a.smallint_col smallint_col, a.tinyint_col tinyint_col, a.day day,
              a.int_col int_col, a.month month,
              b.float_col float_col, b.id id
       from (
              select *
              from alltypesagg a
              where month=1
            ) a
            join alltypessmall b
            on (a.smallint_col = b.id)
     ) x
join alltypessmall c on (x.tinyint_col = c.id)
where x.day=1
and   x.int_col > 899
and   x.float_col > 4.5
and   c.string_col < '7'
and   x.int_col + x.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
# Same join as above, but subquery on the RHS
select x.smallint_col, x.id, x.tinyint_col, c.id, x.int_col, x.float_col, c.string_col
from alltypessmall c
     join
     (
       select a.smallint_col smallint_col, a.tinyint_col tinyint_col, a.day day,
              a.int_col int_col, a.month month,
              b.float_col float_col, b.id id
       from alltypessmall b
            join
            (
              select *
              from alltypesagg a
              where month=1
            ) a
            on (a.smallint_col = b.id)
     ) x
     on (x.tinyint_col = c.id)
where x.day=1
and   x.int_col > 899
and   x.float_col > 4.5
and   c.string_col < '7'
and   x.int_col + x.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
# aggregate without group by
select *
from (
       select count(*), count(tinyint_col), min(tinyint_col), max(tinyint_col),
              sum(tinyint_col), avg(tinyint_col)
       from (
              select * from alltypesagg
            ) a
     ) b
---- RESULTS
11000,9000,1,9,45000,5
---- TYPES
bigint, bigint, tinyint, tinyint, bigint, double
====
---- QUERY
# aggregate with group-by, having
select *
from (
       select int_col % 7 c1, count(*) c2, avg(int_col) c3
       from (
              select * from alltypesagg where day is not null
            ) a
       group by 1
       having avg(int_col) > 500 or count(*) = 10
     ) b
where c1 is not null
and   c2 > 10
---- RESULTS
4,1430,501
5,1430,502
0,1420,500.5
---- TYPES
int, bigint, double
====
---- QUERY
# subquery with aggregation and order by/limit, as left-hand side of join;
# having clause in subquery is transfered to merge agg step in distrib plan
select *
from (
  select int_col, count(*)
  from alltypessmall
  where month = 1
  group by int_col
  having count(*) > 2
  order by count(*) desc, int_col limit 5
  ) t1
join alltypes t2 on (t1.int_col = t2.id)
where month = 1
---- RESULTS: VERIFY_IS_EQUAL_SORTED
0,3,0,true,0,0,0,0,0,0,'01/01/09','0',2009-01-01 00:00:00,2009,1
1,3,1,false,1,1,1,10,1.100000023841858,10.1,'01/01/09','1',2009-01-01 00:01:00,2009,1
2,3,2,true,2,2,2,20,2.200000047683716,20.2,'01/01/09','2',2009-01-01 00:02:00.100000000,2009,1
3,3,3,false,3,3,3,30,3.299999952316284,30.3,'01/01/09','3',2009-01-01 00:03:00.300000000,2009,1
4,3,4,true,4,4,4,40,4.400000095367432,40.4,'01/01/09','4',2009-01-01 00:04:00.600000000,2009,1
---- DBAPI_RESULTS: VERIFY_IS_EQUAL_SORTED
0,3,0,True,0,0,0,0,0.0,0.0,'01/01/09','0',2009-01-01 00:00:00,2009,1
1,3,1,False,1,1,1,10,1.10000002384,10.1,'01/01/09','1',2009-01-01 00:01:00,2009,1
2,3,2,True,2,2,2,20,2.20000004768,20.2,'01/01/09','2',2009-01-01 00:02:00.100000,2009,1
3,3,3,False,3,3,3,30,3.29999995232,30.3,'01/01/09','3',2009-01-01 00:03:00.300000,2009,1
4,3,4,True,4,4,4,40,4.40000009537,40.4,'01/01/09','4',2009-01-01 00:04:00.600000,2009,1
---- TYPES
int, bigint, int, boolean, tinyint, smallint, int, bigint, float, double, string, string, timestamp, int, int
====
---- QUERY
# subquery with aggregation and order by/limit, as left-hand side of join;
# having clause in subquery is transfered to merge agg step in distrib plan
# Disable the estimation of cardinality for an hdfs table withot stats.
set DISABLE_HDFS_NUM_ROWS_ESTIMATE=1;
select *
from (
  select int_col, count(*)
  from alltypessmall
  where month = 1
  group by int_col
  having count(*) > 2
  order by count(*) desc, int_col limit 5
  ) t1
join alltypes t2 on (t1.int_col = t2.id)
where month = 1
---- RESULTS
0,3,0,true,0,0,0,0,0,0,'01/01/09','0',2009-01-01 00:00:00,2009,1
1,3,1,false,1,1,1,10,1.100000023841858,10.1,'01/01/09','1',2009-01-01 00:01:00,2009,1
2,3,2,true,2,2,2,20,2.200000047683716,20.2,'01/01/09','2',2009-01-01 00:02:00.100000000,2009,1
3,3,3,false,3,3,3,30,3.299999952316284,30.3,'01/01/09','3',2009-01-01 00:03:00.300000000,2009,1
4,3,4,true,4,4,4,40,4.400000095367432,40.4,'01/01/09','4',2009-01-01 00:04:00.600000000,2009,1
---- DBAPI_RESULTS
0,3,0,true,0,0,0,0,0,0,'01/01/09','0',2009-01-01 00:00:00,2009,1
1,3,1,false,1,1,1,10,1.100000023841858,10.1,'01/01/09','1',2009-01-01 00:01:00,2009,1
2,3,2,true,2,2,2,20,2.200000047683716,20.2,'01/01/09','2',2009-01-01 00:02:00.100000,2009,1
3,3,3,false,3,3,3,30,3.299999952316284,30.3,'01/01/09','3',2009-01-01 00:03:00.300000,2009,1
4,3,4,true,4,4,4,40,4.400000095367432,40.4,'01/01/09','4',2009-01-01 00:04:00.600000,2009,1
---- TYPES
int, bigint, int, boolean, tinyint, smallint, int, bigint, float, double, string, string, timestamp, int, int
====
---- QUERY
select distinct *
from (
       select bool_col, tinyint_col, count(*)
       from alltypesagg
       group by bool_col, tinyint_col
       having bool_col = true
     ) x
where tinyint_col < 6
---- RESULTS
true,2,1000
true,4,1000
---- TYPES
boolean, tinyint, bigint
====
---- QUERY
# distinct w/ explicit select list
select *
from (
       select distinct bool_col, tinyint_col
       from (
              select * from alltypesagg where tinyint_col < 7
            ) y
     ) x
where bool_col = true
---- RESULTS
true,2
true,4
true,6
---- TYPES
boolean, tinyint
====
---- QUERY
# semi-join on string
select *
from (
       select d.*
       from DimTbl d left semi join JoinTbl j on (j.test_name = d.name)
     ) x
where x.name > 'Name1'
---- RESULTS
1002,'Name2',94611
1003,'Name3',94612
1004,'Name4',94612
1005,'Name5',94613
1006,'Name6',94613
---- TYPES
bigint, string, int
====
---- QUERY
select j.*, d.*
from (
       select *
       from JoinTbl a
     ) j
     left outer join
     (
       select *
       from DimTbl b
     ) d
     on (j.test_name = d.name)
where j.test_id <= 1006
---- 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,15000,NULL,'NULL',NULL
1006,'Name16',94612,5000,NULL,'NULL',NULL
1006,'Name16',94616,15000,NULL,'NULL',NULL
1006,'Name16',94616,5000,NULL,'NULL',NULL
1006,'Name6',94616,15000,1006,'Name6',94613
1006,'Name6',94616,5000,1006,'Name6',94613
---- TYPES
bigint, string, int, int, bigint, string, int
====
---- QUERY
# TODO: If we apply predicate on d, the result will be incorrect. This is a general
# predicate evaluation issue.
#
select j.*, d.*
from (
       select *
       from JoinTbl a
     ) j
     left outer join
     (
       select *
       from DimTbl b
     ) d
     on (j.test_name = d.name)
where j.test_id <= 1006
---- 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,15000,NULL,'NULL',NULL
1006,'Name16',94612,5000,NULL,'NULL',NULL
1006,'Name16',94616,15000,NULL,'NULL',NULL
1006,'Name16',94616,5000,NULL,'NULL',NULL
1006,'Name6',94616,15000,1006,'Name6',94613
1006,'Name6',94616,5000,1006,'Name6',94613
---- TYPES
bigint, string, int, int, bigint, string, int
====
---- QUERY
# Constant selects in subqueries
select * from (select 1, 2) x
---- RESULTS
1,2
---- TYPES
tinyint, tinyint
====
---- QUERY
# Constant selects in subqueries
select * from (select y from (select 1 y) a where y < 10) b
---- RESULTS
1
---- TYPES
tinyint
====
---- QUERY
# Constant selects in subqueries
select * from (select 1 union all select 2 union all select * from (select 3) y) x
---- RESULTS
1
2
3
---- TYPES
tinyint
====
---- QUERY
# Join on inline views made up of unions of constant selects
select * from
(select 1 a, 2 b union all select 1 a, 2 b) x
inner join
(select 1 a, 3 b union all select 1 a, 2 b) y on x.a = y.a
inner join
(select 1 a, 3 b union all select 1 a, 3 b) z on z.b = y.b
---- RESULTS
1,2,1,3,1,3
1,2,1,3,1,3
1,2,1,3,1,3
1,2,1,3,1,3
---- TYPES
tinyint, tinyint, tinyint, tinyint, tinyint, tinyint
====
---- QUERY
# Semi and inner join on a table and on inline views made up of constant selects
select x.date_string_col, z.* from functional.alltypessmall x
left semi join
(select 1 a, 3 b union all select 1 a, 3 b) y on y.a = x.id
inner join
(select 1 a, 3 b union all select 1 a, 3 b) z on z.b = x.id + 2
---- RESULTS
'01/01/09',1,3
'01/01/09',1,3
---- TYPES
string, tinyint, tinyint
====
---- QUERY
# Values statement in subqueries
select * from (values(1, 2), (3, 4)) x
---- RESULTS
1,2
3,4
---- TYPES
TINYINT, TINYINT
====
---- QUERY
# Values statement in subqueries
select * from (select y from (values(1 as y), (11)) a where y < 10) b
---- RESULTS
1
---- TYPES
TINYINT
====
---- QUERY
# Values statement in subqueries with union
select * from (values(1), (2) union all select * from (values(3)) y) x
---- RESULTS
1
2
3
---- TYPES
TINYINT
====
---- QUERY
# Join on inline views made up of values statements
select * from
(values(1 a, 2 b), (1, 2)) x
inner join
(values(1 a, 3 b), (1, 2)) y on x.a = y.a
inner join
(values(1 a, 3 b), (1, 3)) z on z.b = y.b
---- RESULTS
1,2,1,3,1,3
1,2,1,3,1,3
1,2,1,3,1,3
1,2,1,3,1,3
---- TYPES
TINYINT, TINYINT, TINYINT, TINYINT, TINYINT, TINYINT
====
---- QUERY
# Semi and inner join on a table and on inline views made up of values statements
select x.date_string_col, z.* from functional.alltypessmall x
left semi join
(values(1 a, 3 b), (1, 3)) y on y.a = x.id
inner join
(values(1 a, 3 b), (1, 3)) z on z.b = x.id + 2
---- RESULTS
'01/01/09',1,3
'01/01/09',1,3
---- TYPES
STRING, TINYINT, TINYINT
====
---- QUERY
# Select constant with unreferenced aggregate in subquery
select 1 from (select count(*) from functional.alltypessmall) x
---- RESULTS
1
---- TYPES
tinyint
====
---- QUERY
# Select constant with unreferenced distinct aggregate in subquery
select 1 from (select count(distinct tinyint_col) from functional.alltypessmall) x
---- RESULTS
1
---- TYPES
tinyint
====
---- QUERY
# Select aggregate from unreferenced aggregate in subquery
select count(*) from (select count(*) from functional.alltypessmall) x
---- RESULTS
1
---- TYPES
bigint
====
---- QUERY
# Select * from aggregate in subquery
select * from (select count(*) from functional.alltypessmall) x
---- RESULTS
100
---- TYPES
bigint
====
---- QUERY
# Select from aliased aggregate in subquery
select c from (select count(*) c from functional.alltypessmall) x
---- RESULTS
100
---- TYPES
bigint
====
---- QUERY
# Select aggregate from aliased aggregate in subquery
select count(c) from (select count(*) c from functional.alltypessmall) x
---- RESULTS
1
---- TYPES
bigint
====
---- QUERY
# Select aggregate from aggregate of basetable column in subquery
select count(1) from (select count(tinyint_col) from functional.alltypessmall) x
---- RESULTS
1
---- TYPES
bigint
====
---- QUERY
# Select aggregate from aggregate in subquery with group by
select count(1) from
(select count(*) from functional.alltypessmall group by tinyint_col) x
---- RESULTS
10
---- TYPES
bigint
====
---- QUERY
# Regression test for IMPALA-812
select bool_col, count(*) from
  (select bool_col FROM ( SELECT bool_col FROM alltypessmall t ) t WHERE bool_col ) t
group by 1
---- RESULTS
true,50
---- TYPES
boolean, bigint
====
---- QUERY
# Test that tuple ids from semi-joined table refs are not added in an
# IsNullPredicate expr; inline view with left semi join between a base table
# and an inline view (IMPALA-1526)
select t1.int_col
from alltypestiny t1 left join
  (select coalesce(t1.year, 384) as int_col
   from alltypesagg t1
   where t1.bigint_col in
     (select day as int_col from alltypesagg where t1.id = day)) t2
on t2.int_col = t1.month
where t1.month is not null
---- RESULTS: VERIFY_IS_EQUAL_SORTED
0
1
0
1
0
1
0
1
---- TYPES
INT
====
---- QUERY
# Test that tuple ids from semi-joined table refs are not added in
# an IsNullPredicate expr; inline view with right semi join between
# two inline views (IMPALA-1526)
select distinct t1.int_col
from alltypestiny t1 left join
  (select coalesce(t3.int_col, 384) as int_col
   from (select int_col from alltypes) t1
   right semi join (select int_col from alltypesagg) t3 on t1.int_col = t3.int_col) t2
on t2.int_col = t1.month
where t1.month is not null
---- RESULTS: VERIFY_IS_EQUAL_SORTED
0
1
---- TYPES
INT
====
---- QUERY
# Regression test for IMPALA-1528
SELECT t2.int_col is NULL FROM alltypesagg t1
LEFT JOIN (SELECT COALESCE(76, -937, -981) AS int_col FROM alltypestiny) t2
ON (t2.int_col) = (t1.year) limit 1
---- RESULTS
true
---- TYPES
boolean
====
---- QUERY
# IMPALA-1987: Equi-join predicates of outer joins contain TupleIsNullPredicate exprs.
select t1.int_col, t2.int_col, t3.id
from alltypestiny t1 left outer join
  (select coalesce(int_col, 384) as int_col from alltypestiny) t2
  on t1.int_col = t2.int_col
left outer join
  (select 0 as id from alltypestiny) t3
  on t1.int_col = t3.id
order by 1 limit 5
---- RESULTS
0,0,0
0,0,0
0,0,0
0,0,0
0,0,0
---- TYPES
INT,INT,TINYINT
====
