diff options
author | vvvv <vvvv@ydb.tech> | 2022-08-16 22:52:01 +0300 |
---|---|---|
committer | vvvv <vvvv@ydb.tech> | 2022-08-16 22:52:01 +0300 |
commit | b72f31fabd5527c2c092cffac9385a64bcd6d010 (patch) | |
tree | 310af82430afd2bac8dcc245adbc301684a3e48d | |
parent | a700b8e29dadd7b8cee6b598ce3b6739428f9187 (diff) | |
download | ydb-b72f31fabd5527c2c092cffac9385a64bcd6d010.tar.gz |
fixed presort encoding
-rw-r--r-- | ydb/library/yql/minikql/computation/presort.cpp | 12 | ||||
-rw-r--r-- | ydb/library/yql/parser/pg_wrapper/comp_factory.cpp | 4 |
2 files changed, 13 insertions, 3 deletions
diff --git a/ydb/library/yql/minikql/computation/presort.cpp b/ydb/library/yql/minikql/computation/presort.cpp index efd765b8b7..b5f93d1fea 100644 --- a/ydb/library/yql/minikql/computation/presort.cpp +++ b/ydb/library/yql/minikql/computation/presort.cpp @@ -396,7 +396,12 @@ void EncodeValue(TType* type, const NUdf::TUnboxedValue& value, TVector<ui8>& ou case TType::EKind::Pg: { auto pgType = static_cast<TPgType*>(type); - EncodePresortPGValue(pgType, value, output); + auto hasValue = (bool)value; + EncodeBool<false>(output, hasValue); + if (hasValue) { + EncodePresortPGValue(pgType, value, output); + } + break; } @@ -422,6 +427,11 @@ NUdf::TUnboxedValue DecodeImpl(TType* type, TStringBuf& input, const THolderFact } case TType::EKind::Pg: { auto pgType = static_cast<TPgType*>(type); + auto hasValue = DecodeBool<false>(input); + if (!hasValue) { + return NUdf::TUnboxedValue(); + } + return DecodePresortPGValue(pgType, input, buffer); } diff --git a/ydb/library/yql/parser/pg_wrapper/comp_factory.cpp b/ydb/library/yql/parser/pg_wrapper/comp_factory.cpp index 214f39509b..f688a0b023 100644 --- a/ydb/library/yql/parser/pg_wrapper/comp_factory.cpp +++ b/ydb/library/yql/parser/pg_wrapper/comp_factory.cpp @@ -858,7 +858,7 @@ public: }; bool* nulls = (bool*)MKQLAllocWithSize(nitems); - Y_DEFER{ + Y_DEFER { MKQLFreeWithSize(nulls, nitems); }; @@ -924,7 +924,7 @@ private: NullableDatum argDatum = { datum, false }; if (ConvertArgToCString) { argDatum.value = (Datum)MakeCString(GetVarBuf((const text*)argDatum.value)); - Y_DEFER{ + Y_DEFER { pfree((void*)argDatum.value); }; } |