diff options
| author | atarasov5 <[email protected]> | 2025-07-10 15:30:05 +0300 |
|---|---|---|
| committer | atarasov5 <[email protected]> | 2025-07-10 15:51:42 +0300 |
| commit | 5ce6e1b18f1023a06b261707a585835825e612f9 (patch) | |
| tree | e60cbc5135a27d0b684931015e2fc1e8d588f908 /yql/essentials/minikql/computation/mkql_block_impl.cpp | |
| parent | fb7f6895a3d8244444609433b725d603dca23631 (diff) | |
YQL-20102: Enable debug arrow validation
В данном PR включена поддержка валидации Datum'ов на соответствие `MKQL type <-> arrow type <-> arrow array data structure.`
Выявленные проблемы:
1\. `AllocateResizableBuffer(size_t size)` возвращает массив длины 0 вместо size. Поэтому есть ошибка в работе с датами в некоторых нодах
commit_hash:122f2bd114dec50993131391a3793d9540877cb4
Diffstat (limited to 'yql/essentials/minikql/computation/mkql_block_impl.cpp')
| -rw-r--r-- | yql/essentials/minikql/computation/mkql_block_impl.cpp | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/yql/essentials/minikql/computation/mkql_block_impl.cpp b/yql/essentials/minikql/computation/mkql_block_impl.cpp index 91292a3df81..72b4294761c 100644 --- a/yql/essentials/minikql/computation/mkql_block_impl.cpp +++ b/yql/essentials/minikql/computation/mkql_block_impl.cpp @@ -3,6 +3,7 @@ #include "mkql_block_reader.h" #include <yql/essentials/minikql/arrow/mkql_functions.h> +#include <yql/essentials/minikql/computation/mkql_datum_validate.h> #include <yql/essentials/minikql/mkql_node_builder.h> #include <yql/essentials/minikql/mkql_node_cast.h> #include <yql/essentials/minikql/arrow/arrow_util.h> @@ -247,14 +248,16 @@ NUdf::TUnboxedValuePod MakeBlockCount(const THolderFactory& holderFactory, const return holderFactory.CreateArrowBlock(arrow::Datum(count)); } -TBlockFuncNode::TBlockFuncNode(TComputationMutables& mutables, TStringBuf name, TComputationNodePtrVector&& argsNodes, - const TVector<TType*>& argsTypes, const arrow::compute::ScalarKernel& kernel, - std::shared_ptr<arrow::compute::ScalarKernel> kernelHolder, - const arrow::compute::FunctionOptions* functionOptions) +TBlockFuncNode::TBlockFuncNode(TComputationMutables& mutables, NYql::NUdf::EValidateDatumMode validateDatumMode, TStringBuf name, TComputationNodePtrVector&& argsNodes, + const TVector<TType*>& argsTypes, TType* outputType, const arrow::compute::ScalarKernel& kernel, + std::shared_ptr<arrow::compute::ScalarKernel> kernelHolder, + const arrow::compute::FunctionOptions* functionOptions) : TMutableComputationNode(mutables) + , ValidateDatumMode_(validateDatumMode) , StateIndex_(mutables.CurValueIndex++) , ArgsNodes_(std::move(argsNodes)) , ArgsValuesDescr_(ToValueDescr(argsTypes)) + , OutValueDescr_(ToValueDescr(outputType)) , Kernel_(kernel) , KernelHolder_(std::move(kernelHolder)) , Options_(functionOptions) @@ -270,7 +273,7 @@ NUdf::TUnboxedValuePod TBlockFuncNode::DoCalculate(TComputationContext& ctx) con for (ui32 i = 0; i < ArgsNodes_.size(); ++i) { const auto& value = ArgsNodes_[i]->GetValue(ctx); argDatums.emplace_back(TArrowBlock::From(value).GetDatum()); - ARROW_DEBUG_CHECK_DATUM_TYPES(ArgsValuesDescr_[i], argDatums.back().descr()); + ValidateDatum(argDatums.back(), ArgsValuesDescr_[i], ValidateDatumMode_); } if (ScalarOutput_) { @@ -297,8 +300,9 @@ NUdf::TUnboxedValuePod TBlockFuncNode::DoCalculate(TComputationContext& ctx) con ForEachArrayData(output, [&](const auto& arr) { arrays.push_back(arr); }); } - - return ctx.HolderFactory.CreateArrowBlock(MakeArray(arrays)); + auto resultArray = MakeArray(arrays); + ValidateDatum(resultArray, OutValueDescr_, ValidateDatumMode_); + return ctx.HolderFactory.CreateArrowBlock(std::move(resultArray)); } |
