Repository: incubator-impala Updated Branches: refs/heads/master 54cda7858 -> e0ba5ef6a
IMPALA-5562: Only recomputeMemLayout() if tuple has a layout. For queries where plan generation is terminated early due to LIMIT 0 or similar, some tuples may not have a mem layout because no PlanNode has been generated to materialize them. The fix is to make recomputeMemLayout() a no-op if the tuple does not have an existing mem layout. Testing: - added regression test Change-Id: I08548c6bfa7dbf4655e55636605bebb89d2a2239 Reviewed-on: http://gerrit.cloudera.org:8080/7264 Reviewed-by: Lars Volker <[email protected]> Tested-by: Impala Public Jenkins Project: http://git-wip-us.apache.org/repos/asf/incubator-impala/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-impala/commit/00535ab1 Tree: http://git-wip-us.apache.org/repos/asf/incubator-impala/tree/00535ab1 Diff: http://git-wip-us.apache.org/repos/asf/incubator-impala/diff/00535ab1 Branch: refs/heads/master Commit: 00535ab1709e8aa5149a2609a5c912455e3678f8 Parents: 54cda78 Author: Alex Behm <[email protected]> Authored: Thu Jun 22 11:40:06 2017 -0700 Committer: Impala Public Jenkins <[email protected]> Committed: Fri Jun 23 06:17:14 2017 +0000 ---------------------------------------------------------------------- .../main/java/org/apache/impala/analysis/TupleDescriptor.java | 5 +++-- .../java/org/apache/impala/planner/SingleNodePlanner.java | 2 ++ .../functional-planner/queries/PlannerTest/empty.test | 7 +++++++ 3 files changed, 12 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/00535ab1/fe/src/main/java/org/apache/impala/analysis/TupleDescriptor.java ---------------------------------------------------------------------- diff --git a/fe/src/main/java/org/apache/impala/analysis/TupleDescriptor.java b/fe/src/main/java/org/apache/impala/analysis/TupleDescriptor.java index de9dc98..bc7da2b 100644 --- a/fe/src/main/java/org/apache/impala/analysis/TupleDescriptor.java +++ b/fe/src/main/java/org/apache/impala/analysis/TupleDescriptor.java @@ -233,10 +233,11 @@ public class TupleDescriptor { /** * In some cases changes are made to a tuple after the memory layout has been computed. - * This function allows us to recompute the memory layout. + * This function allows us to recompute the memory layout, if necessary. No-op if this + * tuple does not have an existing mem layout. */ public void recomputeMemLayout() { - Preconditions.checkState(hasMemLayout_); + if (!hasMemLayout_) return; hasMemLayout_ = false; computeMemLayout(); } http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/00535ab1/fe/src/main/java/org/apache/impala/planner/SingleNodePlanner.java ---------------------------------------------------------------------- diff --git a/fe/src/main/java/org/apache/impala/planner/SingleNodePlanner.java b/fe/src/main/java/org/apache/impala/planner/SingleNodePlanner.java index 0de35b4..62c045b 100644 --- a/fe/src/main/java/org/apache/impala/planner/SingleNodePlanner.java +++ b/fe/src/main/java/org/apache/impala/planner/SingleNodePlanner.java @@ -239,6 +239,8 @@ public class SingleNodePlanner { Preconditions.checkState(collExpr instanceof SlotRef); SlotRef collSlotRef = (SlotRef) collExpr; collSlotRef.getDesc().setIsMaterialized(false); + // Re-compute the mem layout if necessary. The tuple may not have a mem layout if + // no plan has been generated for the TableRef (e.g. due to limit 0 or similar). collSlotRef.getDesc().getParent().recomputeMemLayout(); } } http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/00535ab1/testdata/workloads/functional-planner/queries/PlannerTest/empty.test ---------------------------------------------------------------------- diff --git a/testdata/workloads/functional-planner/queries/PlannerTest/empty.test b/testdata/workloads/functional-planner/queries/PlannerTest/empty.test index aa4d313..7ea44e0 100644 --- a/testdata/workloads/functional-planner/queries/PlannerTest/empty.test +++ b/testdata/workloads/functional-planner/queries/PlannerTest/empty.test @@ -543,3 +543,10 @@ PLAN-ROOT SINK | 00:EMPTYSET ==== +# IMPALA-5562: Relative table ref and limit 0. +select * from tpch_nested_parquet.customer c, c.c_orders limit 0 +---- PLAN +PLAN-ROOT SINK +| +00:EMPTYSET +====
