aboutsummaryrefslogtreecommitdiffstats
path: root/yql/essentials/minikql/computation/mkql_block_impl.cpp
diff options
context:
space:
mode:
authorAlexander Smirnov <alex@ydb.tech>2025-02-11 03:36:29 +0000
committerAlexander Smirnov <alex@ydb.tech>2025-02-11 03:36:29 +0000
commitc166bec95e44baf473bfdd28aaf976a85da110a3 (patch)
tree7adfb406024a2ecd912a7daae4796ab5c68d24a7 /yql/essentials/minikql/computation/mkql_block_impl.cpp
parente86276c064f63bbda07d6ddd5834401eb00a4d30 (diff)
parentf992866ec874491c1e07e4cb4f90c595668e2864 (diff)
downloadydb-c166bec95e44baf473bfdd28aaf976a85da110a3.tar.gz
Merge pull request #14412 from ydb-platform/merge-libs-250211-0050
Diffstat (limited to 'yql/essentials/minikql/computation/mkql_block_impl.cpp')
-rw-r--r--yql/essentials/minikql/computation/mkql_block_impl.cpp10
1 files changed, 8 insertions, 2 deletions
diff --git a/yql/essentials/minikql/computation/mkql_block_impl.cpp b/yql/essentials/minikql/computation/mkql_block_impl.cpp
index 2920a1ac3c..49d52eb0b8 100644
--- a/yql/essentials/minikql/computation/mkql_block_impl.cpp
+++ b/yql/essentials/minikql/computation/mkql_block_impl.cpp
@@ -114,8 +114,14 @@ arrow::Datum DoConvertScalar(TType* type, const T& value, arrow::MemoryPool& poo
const auto& str = value.AsStringRef();
std::shared_ptr<arrow::Buffer> buffer(ARROW_RESULT(arrow::AllocateBuffer(str.Size(), &pool)));
std::memcpy(buffer->mutable_data(), str.Data(), str.Size());
- auto type = (slot == NUdf::EDataSlot::String || slot == NUdf::EDataSlot::Yson || slot == NUdf::EDataSlot::JsonDocument) ? arrow::binary() : arrow::utf8();
- std::shared_ptr<arrow::Scalar> scalar = std::make_shared<arrow::BinaryScalar>(buffer, type);
+ std::shared_ptr<arrow::Scalar> scalar;
+ if (slot == NUdf::EDataSlot::String || slot == NUdf::EDataSlot::Yson || slot == NUdf::EDataSlot::JsonDocument) {
+ scalar = std::make_shared<arrow::BinaryScalar>(buffer, arrow::binary());
+ } else {
+ // NOTE: Do not use |arrow::BinaryScalar| for utf8 and json types directly.
+ // This is necessary so that the type of the scalar is clearly preserved at runtime.
+ scalar = std::make_shared<arrow::StringScalar>(buffer);
+ }
return arrow::Datum(scalar);
}
case NUdf::EDataSlot::TzDate: {