aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authora-romanov <a-romanov@yandex-team.ru>2022-03-17 22:21:44 +0300
committera-romanov <a-romanov@yandex-team.ru>2022-03-17 22:21:44 +0300
commitc46c11c86ffb8c8301c84e51f32385b0ffebfa04 (patch)
tree07f580f76badf19b52a91eabb4e495d2e79ff7f8
parent25f2dfab966f56fac2d01302af93b0ce7c008246 (diff)
downloadydb-c46c11c86ffb8c8301c84e51f32385b0ffebfa04.tar.gz
Add pad into MakeStringNotFilled.
ref:0b84342c6b9231f0e281637dcd46bfe4d8f0b8f2
-rw-r--r--ydb/library/yql/minikql/mkql_string_util.cpp7
-rw-r--r--ydb/library/yql/minikql/mkql_string_util.h2
-rw-r--r--ydb/library/yql/minikql/mkql_string_util_ut.cpp17
3 files changed, 22 insertions, 4 deletions
diff --git a/ydb/library/yql/minikql/mkql_string_util.cpp b/ydb/library/yql/minikql/mkql_string_util.cpp
index 40aba1c3413..b809d4e004e 100644
--- a/ydb/library/yql/minikql/mkql_string_util.cpp
+++ b/ydb/library/yql/minikql/mkql_string_util.cpp
@@ -146,12 +146,13 @@ NUdf::TUnboxedValuePod MakeString(const NUdf::TStringRef ref)
return NUdf::TUnboxedValuePod(std::move(str));
}
-NUdf::TUnboxedValuePod MakeStringNotFilled(ui32 size)
+NUdf::TUnboxedValuePod MakeStringNotFilled(ui32 size, ui32 pad)
{
- if (size <= NUdf::TUnboxedValuePod::InternalBufferSize)
+ const auto fullSize = size + pad;
+ if (fullSize <= NUdf::TUnboxedValuePod::InternalBufferSize)
return NUdf::TUnboxedValuePod::Embedded(size);
- return NUdf::TUnboxedValuePod(NUdf::TStringValue(size));
+ return NUdf::TUnboxedValuePod(NUdf::TStringValue(fullSize), size);
}
}
diff --git a/ydb/library/yql/minikql/mkql_string_util.h b/ydb/library/yql/minikql/mkql_string_util.h
index 5a59e91ba44..0abd256adf8 100644
--- a/ydb/library/yql/minikql/mkql_string_util.h
+++ b/ydb/library/yql/minikql/mkql_string_util.h
@@ -10,7 +10,7 @@ NUdf::TUnboxedValuePod PrependString(const NUdf::TStringRef ref, const NUdf::TUn
NUdf::TUnboxedValuePod ConcatStrings(const NUdf::TUnboxedValuePod first, const NUdf::TUnboxedValuePod second);
NUdf::TUnboxedValuePod SubString(const NUdf::TUnboxedValuePod value, ui32 offset, ui32 size);
NUdf::TUnboxedValuePod MakeString(const NUdf::TStringRef ref);
-NUdf::TUnboxedValuePod MakeStringNotFilled(ui32 size);
+NUdf::TUnboxedValuePod MakeStringNotFilled(ui32 size, ui32 pad = 0U);
}
}
diff --git a/ydb/library/yql/minikql/mkql_string_util_ut.cpp b/ydb/library/yql/minikql/mkql_string_util_ut.cpp
index f3186c66083..227115f488a 100644
--- a/ydb/library/yql/minikql/mkql_string_util_ut.cpp
+++ b/ydb/library/yql/minikql/mkql_string_util_ut.cpp
@@ -17,5 +17,22 @@ Y_UNIT_TEST_SUITE(TMiniKQLStringUtils) {
UNIT_ASSERT(sub0.AsStringValue().Data() == sub1.AsStringValue().Data());
UNIT_ASSERT(sub1.AsStringValue().Data() != sub2.AsStringValue().Data());
}
+
+ Y_UNIT_TEST(MakeStringWithPad) {
+ TScopedAlloc alloc;
+
+ {
+ const auto buf= MakeStringNotFilled(NUdf::TUnboxedValuePod::InternalBufferSize - 1U, 1U);
+ UNIT_ASSERT(buf.IsEmbedded());
+ UNIT_ASSERT_VALUES_EQUAL(buf.AsStringRef().Size(), NUdf::TUnboxedValuePod::InternalBufferSize - 1U);
+ }
+
+ {
+ const auto buf= MakeStringNotFilled(NUdf::TUnboxedValuePod::InternalBufferSize, 1U);
+ UNIT_ASSERT(buf.IsString());
+ UNIT_ASSERT_VALUES_EQUAL(buf.AsStringRef().Size(), NUdf::TUnboxedValuePod::InternalBufferSize);
+ UNIT_ASSERT_VALUES_EQUAL(buf.AsStringValue().Size(), NUdf::TUnboxedValuePod::InternalBufferSize + 1U);
+ }
+ }
}