mirror of
https://github.com/apache/impala.git
synced 2026-01-07 00:02:28 -05:00
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
155 lines
3.3 KiB
Plaintext
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
|
|
====
|