From 66b20bb0133fb0be9422f31f79a6c831254a6ab0 Mon Sep 17 00:00:00 2001 From: zclllyybb Date: Thu, 9 Nov 2023 23:55:14 +0800 Subject: [PATCH] Revert "[Coverage](BE) Delete vinfo_func in BE (#26562)" This reverts commit 01094fd25ed539a8025066d8823c1e907109048a. --- be/src/vec/exprs/vexpr.cpp | 5 +++ be/src/vec/exprs/vinfo_func.cpp | 71 +++++++++++++++++++++++++++++++++ be/src/vec/exprs/vinfo_func.h | 50 +++++++++++++++++++++++ 3 files changed, 126 insertions(+) create mode 100644 be/src/vec/exprs/vinfo_func.cpp create mode 100644 be/src/vec/exprs/vinfo_func.h diff --git a/be/src/vec/exprs/vexpr.cpp b/be/src/vec/exprs/vexpr.cpp index b06579f7957d25..bcd06cb6640268 100644 --- a/be/src/vec/exprs/vexpr.cpp +++ b/be/src/vec/exprs/vexpr.cpp @@ -41,6 +41,7 @@ #include "vec/exprs/vectorized_fn_call.h" #include "vec/exprs/vexpr_context.h" #include "vec/exprs/vin_predicate.h" +#include "vec/exprs/vinfo_func.h" #include "vec/exprs/vlambda_function_call_expr.h" #include "vec/exprs/vlambda_function_expr.h" #include "vec/exprs/vliteral.h" @@ -302,6 +303,10 @@ Status VExpr::create_expr(const TExprNode& expr_node, VExprSPtr& expr) { expr = VCaseExpr::create_shared(expr_node); break; } + case TExprNodeType::INFO_FUNC: { + expr = VInfoFunc::create_shared(expr_node); + break; + } case TExprNodeType::TUPLE_IS_NULL_PRED: { expr = VTupleIsNullPredicate::create_shared(expr_node); break; diff --git a/be/src/vec/exprs/vinfo_func.cpp b/be/src/vec/exprs/vinfo_func.cpp new file mode 100644 index 00000000000000..c262882b317e90 --- /dev/null +++ b/be/src/vec/exprs/vinfo_func.cpp @@ -0,0 +1,71 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +#include "vec/exprs/vinfo_func.h" + +#include +#include +#include + +#include +#include +#include + +#include "runtime/define_primitive_type.h" +#include "runtime/types.h" +#include "vec/core/block.h" +#include "vec/core/field.h" +#include "vec/core/types.h" +#include "vec/data_types/data_type.h" + +namespace doris { +namespace vectorized { +class VExprContext; +} // namespace vectorized +} // namespace doris + +namespace doris::vectorized { + +VInfoFunc::VInfoFunc(const TExprNode& node) : VExpr(node) { + Field field; + switch (_type.type) { + case TYPE_BIGINT: { + field = Int64(node.info_func.int_value); + break; + } + case TYPE_STRING: + case TYPE_CHAR: + case TYPE_VARCHAR: { + field = node.info_func.str_value; + break; + } + default: { + DCHECK(false) << "Invalid type: " << _type.type; + break; + } + } + this->_column_ptr = _data_type->create_column_const(1, field); +} + +Status VInfoFunc::execute(VExprContext* context, vectorized::Block* block, int* result_column_id) { + // Info function should return least one row, e.g. select current_user(). + size_t row_size = std::max(block->rows(), size_t(1)); + *result_column_id = VExpr::insert_param(block, {_column_ptr, _data_type, _expr_name}, row_size); + return Status::OK(); +} + +} // namespace doris::vectorized diff --git a/be/src/vec/exprs/vinfo_func.h b/be/src/vec/exprs/vinfo_func.h new file mode 100644 index 00000000000000..c21ef6bf07f89d --- /dev/null +++ b/be/src/vec/exprs/vinfo_func.h @@ -0,0 +1,50 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +#pragma once + +#include + +#include "common/object_pool.h" +#include "common/status.h" +#include "vec/data_types/data_type.h" +#include "vec/exprs/vexpr.h" + +namespace doris { +class TExprNode; + +namespace vectorized { +class Block; +class VExprContext; + +class VInfoFunc : public VExpr { + ENABLE_FACTORY_CREATOR(VInfoFunc); + +public: + VInfoFunc(const TExprNode& node); + ~VInfoFunc() override = default; + + const std::string& expr_name() const override { return _expr_name; } + Status execute(VExprContext* context, Block* block, int* result_column_id) override; + +private: + const std::string _expr_name = "vinfofunc expr"; + ColumnPtr _column_ptr; +}; +} // namespace vectorized + +} // namespace doris