diff options
| author | atarasov5 <[email protected]> | 2025-06-17 14:04:57 +0300 |
|---|---|---|
| committer | atarasov5 <[email protected]> | 2025-06-17 14:23:45 +0300 |
| commit | aee3ca6eb1a5a163bad5e7bf90ac8c4d9316fa19 (patch) | |
| tree | 5a6a34b1408139d2bc5d2dde7dd73d29875cff36 /yql/essentials/minikql/computation | |
| parent | 68e9383a92ec7311b939a7969b6a5a5b9c385a20 (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.cpp | 8 |
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)); |
