summaryrefslogtreecommitdiffstats
path: root/yql/essentials/minikql/computation
diff options
context:
space:
mode:
authoratarasov5 <[email protected]>2025-06-17 14:04:57 +0300
committeratarasov5 <[email protected]>2025-06-17 14:23:45 +0300
commitaee3ca6eb1a5a163bad5e7bf90ac8c4d9316fa19 (patch)
tree5a6a34b1408139d2bc5d2dde7dd73d29875cff36 /yql/essentials/minikql/computation
parent68e9383a92ec7311b939a7969b6a5a5b9c385a20 (diff)
YQL-19536: Block scalar versions of nodes
commit_hash:0f93920592ababed5f28efbe4d25c9651f578c8b
Diffstat (limited to 'yql/essentials/minikql/computation')
-rw-r--r--yql/essentials/minikql/computation/mkql_block_impl.cpp8
1 files changed, 4 insertions, 4 deletions
diff --git a/yql/essentials/minikql/computation/mkql_block_impl.cpp b/yql/essentials/minikql/computation/mkql_block_impl.cpp
index e960e8562e3..0f16206c112 100644
--- a/yql/essentials/minikql/computation/mkql_block_impl.cpp
+++ b/yql/essentials/minikql/computation/mkql_block_impl.cpp
@@ -7,6 +7,7 @@
#include <yql/essentials/minikql/mkql_node_cast.h>
#include <yql/essentials/minikql/arrow/arrow_util.h>
#include <yql/essentials/minikql/arrow/mkql_bit_utils.h>
+#include <yql/essentials/minikql/mkql_type_helper.h>
#include <yql/essentials/public/udf/arrow/args_dechunker.h>
#include <yql/essentials/parser/pg_wrapper/interface/arrow.h>
@@ -33,6 +34,7 @@ namespace NKikimr::NMiniKQL {
namespace {
+// TODO(YQL): This must be rewrited via traits dispatcher.
template<typename T>
arrow::Datum DoConvertScalar(TType* type, const T& value, arrow::MemoryPool& pool) {
std::shared_ptr<arrow::DataType> arrowType;
@@ -40,15 +42,13 @@ arrow::Datum DoConvertScalar(TType* type, const T& value, arrow::MemoryPool& poo
if (!value) {
return arrow::MakeNullScalar(arrowType);
}
+ auto needWrapWithExternalOptional = NeedWrapWithExternalOptional(type);
- bool isOptional = false;
if (type->IsOptional()) {
type = AS_TYPE(TOptionalType, type)->GetItemType();
- isOptional = true;
}
- if (type->IsOptional() || (isOptional && type->IsPg())) {
- // nested optionals
+ if (needWrapWithExternalOptional) {
std::vector<std::shared_ptr<arrow::Scalar>> arrowValue;
arrowValue.emplace_back(DoConvertScalar(type, value.GetOptionalValue(), pool).scalar());
return arrow::Datum(std::make_shared<arrow::StructScalar>(arrowValue, arrowType));