Files
impala/testdata/workloads/functional-query/queries/QueryTest/empty.test
Tim Armstrong d37bf390a8 IMPALA-2406: avoid rows with no tuples
In some cases the planner generated plans with rows with no
materialized tuples. Recent changes to the backend caused these to
hit a DCHECK. This patch addresses one case in the planner where it
was possible to create such plans: when the planner generated an
empty node from a select subquery with no from clause. The fix is to
create a materialized tuple based on the select list expressions, in
the same way as we handle these selects when the planner cannot
statically determine they have no result rows.

An example query is included as a test.

It also adds additional checks to the frontend and backend to catch
these invalid rows earlier.

Change-Id: I851f2fb5d389471d0bb764cb85f3c49031a075e4
Reviewed-on: http://gerrit.cloudera.org:8080/911
Reviewed-by: Tim Armstrong <tarmstrong@cloudera.com>
Tested-by: Internal Jenkins
2015-09-27 15:13:25 -07:00

155 lines
3.3 KiB
Plaintext

====
---- QUERY
# testtbl is empty
select * from testtbl
---- TYPES
bigint, string, int
---- RESULTS
====
---- QUERY
# month ends at 12
select int_col from alltypessmall where month > 100
---- TYPES
int
---- RESULTS
====
---- QUERY
# Empty partitioned table test
select field from emptytable
---- TYPES
string
---- RESULTS
====
---- QUERY
# Constant conjunct.
select t1.id, t2.id
from functional.alltypestiny t1
left outer join functional.alltypes t2
on t1.id = t2.id
where false
---- TYPES
int, int
---- RESULTS
====
---- QUERY
# Constant conjunct in query block with an aggregation.
select count(int_col), avg(double_col), count(*)
from functional.alltypes
where null
---- TYPES
bigint, double, bigint
---- RESULTS
0,NULL,0
====
---- QUERY
# Constant conjunct in inline view.
select e.id, f.id
from functional.alltypessmall f
inner join
(select t1.id
from functional.alltypestiny t1
left outer join functional.alltypes t2
on t1.id = t2.id
where 1 + 3 > 10) e
on e.id = f.id
---- TYPES
int, int
---- RESULTS
====
---- QUERY
# Limit 0
select t1.id, t2.id
from functional.alltypestiny t1
left outer join functional.alltypes t2
on t1.id = t2.id
limit 0
---- TYPES
int, int
---- RESULTS
====
---- QUERY
# Limit 0 in query block with an aggregation
select count(int_col), avg(double_col), count(*)
from functional.alltypes
limit 0
---- TYPES
bigint, double, bigint
---- RESULTS
====
---- QUERY
# Limit 0 in inline view
select e.id, f.id
from functional.alltypessmall f
inner join
(select t1.id
from functional.alltypestiny t1
left outer join functional.alltypes t2
on t1.id = t2.id
limit 0) e
on e.id = f.id
---- TYPES
int, int
---- RESULTS
====
---- QUERY
# IMPALA-1234: Analytic with constant empty result set failed precondition check in FE
select MIN(int_col) OVER () FROM alltypes limit 0
---- RESULTS
---- TYPES
INT
====
---- QUERY
# IMPALA-1524: Materialize all tuples produced by an EmptySet node.
SELECT
COALESCE(580, MAX(t2.year), 150) AS int_col FROM (
SELECT
t1.bool_col,
COALESCE(LAG(-826, 69) OVER (
ORDER BY t1.bool_col DESC, COALESCE(t2.int_col, t2.smallint_col, t2.id)), 279, -764) AS int_col,
COALESCE(t2.int_col, t2.smallint_col, t2.id) AS int_col_2
FROM functional.alltypestiny t1
INNER JOIN functional.alltypestiny t2
ON ((t2.bigint_col) = (t1.id)) AND ((t2.timestamp_col) = (t1.timestamp_col))) t1
INNER JOIN functional.alltypes t2 ON (t2.year) = (t1.int_col_2)
WHERE (-339.22) IN (-922.68, -254.84)
---- RESULTS
580
---- TYPES
INT
====
---- QUERY
# IMPALA-1960: Exprs in the aggregation that reference slots from an inline view when
# the select stmt has an empty select-project-join portion.
select sum(T.id), count(T.int_col)
from
(select id, int_col, bigint_col from functional.alltypestiny) T
where false
---- RESULTS
NULL,0
---- TYPES
BIGINT, BIGINT
====
---- QUERY
# IMPALA-2088: Test empty union operands with analytic functions.
select lead(-496, 81) over (order by t1.double_col desc, t1.id asc)
from functional.alltypestiny t1 where 5 = 6
union
select 794.67
from functional.alltypes t1 where 5 = 6
union all
select coalesce(10.4, int_col)
from functional.alltypes where false
---- RESULTS
---- TYPES
FLOAT
====
---- QUERY
# IMPALA-2406: condition filters out all rows from subquery during planning.
select *
from (select 10 as i, 2 as j, '2013' as s) as t
where t.i < 10;
---- RESULTS
---- TYPES
TINYINT,TINYINT,STRING
====