summaryrefslogtreecommitdiffstats
path: root/yql/essentials/minikql/computation/mkql_block_impl.cpp
diff options
context:
space:
mode:
authoratarasov5 <[email protected]>2025-07-10 15:30:05 +0300
committeratarasov5 <[email protected]>2025-07-10 15:51:42 +0300
commit5ce6e1b18f1023a06b261707a585835825e612f9 (patch)
treee60cbc5135a27d0b684931015e2fc1e8d588f908 /yql/essentials/minikql/computation/mkql_block_impl.cpp
parentfb7f6895a3d8244444609433b725d603dca23631 (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.cpp18
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));
}