From 62e3bd338e828eb058b9bc703e2d74ea1ba73d55 Mon Sep 17 00:00:00 2001 From: minghong Date: Mon, 29 Aug 2022 12:07:08 +0800 Subject: [PATCH] [refactor](BE) return error status when vslot_ref contains invalid slot_id (#12106) In current implementation, we detect invalid slot at execute phase. At execute phase, it is hard to get useful information for further debug. This pr moves error detection ahead to prepare phase, so that we can log related tuple descriptors. --- be/src/vec/exprs/vslot_ref.cpp | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/be/src/vec/exprs/vslot_ref.cpp b/be/src/vec/exprs/vslot_ref.cpp index f53bcf2900..18871ac773 100644 --- a/be/src/vec/exprs/vslot_ref.cpp +++ b/be/src/vec/exprs/vslot_ref.cpp @@ -51,16 +51,15 @@ Status VSlotRef::prepare(doris::RuntimeState* state, const doris::RowDescriptor& return Status::InternalError("couldn't resolve slot descriptor {}", _slot_id); } _column_id = desc.get_column_id(_slot_id); + if (_column_id < 0) { + LOG(INFO) << "VSlotRef - invalid slot id: " << _slot_id << " desc:" << desc.debug_string(); + return Status::InternalError("VSlotRef - invalid slot id {}", _slot_id); + } _column_name = &slot_desc->col_name(); return Status::OK(); } Status VSlotRef::execute(VExprContext* context, Block* block, int* result_column_id) { - // comment DCHECK temporarily to make fuzzy test run smoothly - // DCHECK_GE(_column_id, 0); - if (_column_id < 0) { - return Status::InternalError("invalid column id {}", _column_id); - } *result_column_id = _column_id; return Status::OK(); }