diff options
| author | vvvv <[email protected]> | 2025-09-12 13:56:26 +0300 |
|---|---|---|
| committer | vvvv <[email protected]> | 2025-09-12 14:09:05 +0300 |
| commit | 6b08fb2106419ef0ad526b68814b5613c4597829 (patch) | |
| tree | 271ab60ef54af39ce1041e0a458216c285a9f6ce /yql/essentials/minikql/mkql_program_builder.cpp | |
| parent | ad886835a6c49d39f217c092221eacec88cc0192 (diff) | |
YQL-20339 mkql types & funcs
funcs
init
commit_hash:e51fcff5b11ce252174d946af23ba9b3727f0ec3
Diffstat (limited to 'yql/essentials/minikql/mkql_program_builder.cpp')
| -rw-r--r-- | yql/essentials/minikql/mkql_program_builder.cpp | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/yql/essentials/minikql/mkql_program_builder.cpp b/yql/essentials/minikql/mkql_program_builder.cpp index 284f2222c30..f12b54f3eb2 100644 --- a/yql/essentials/minikql/mkql_program_builder.cpp +++ b/yql/essentials/minikql/mkql_program_builder.cpp @@ -2508,6 +2508,39 @@ TRuntimeNode TProgramBuilder::NewVariant(TRuntimeNode item, const std::string_vi return TRuntimeNode(TVariantLiteral::Create(item, index, type, Env_), true); } +TRuntimeNode TProgramBuilder::ToDynamicLinear(TRuntimeNode item) { + if constexpr (RuntimeVersion < 68U) { + THROW yexception() << "Runtime version (" << RuntimeVersion << ") too old for " << __func__; + } + + auto linType = AS_TYPE(TLinearType, item.GetStaticType()); + MKQL_ENSURE(!linType->IsDynamic(), "Expected static linear type"); + + auto retType = TLinearType::Create(linType->GetItemType(), true, Env_); + + TCallableBuilder callableBuilder(Env_, __func__, retType); + callableBuilder.Add(item); + return TRuntimeNode(callableBuilder.Build(), false); +} + +TRuntimeNode TProgramBuilder::FromDynamicLinear(TRuntimeNode item, const std::string_view& file, ui32 row, ui32 column) { + if constexpr (RuntimeVersion < 68U) { + THROW yexception() << "Runtime version (" << RuntimeVersion << ") too old for " << __func__; + } + + auto linType = AS_TYPE(TLinearType, item.GetStaticType()); + MKQL_ENSURE(linType->IsDynamic(), "Expected dynamic linear type"); + + auto retType = TLinearType::Create(linType->GetItemType(), false, Env_); + + TCallableBuilder callableBuilder(Env_, __func__, retType); + callableBuilder.Add(item); + callableBuilder.Add(NewDataLiteral<NUdf::EDataSlot::String>(file)); + callableBuilder.Add(NewDataLiteral(row)); + callableBuilder.Add(NewDataLiteral(column)); + return TRuntimeNode(callableBuilder.Build(), false); +} + TRuntimeNode TProgramBuilder::Coalesce(TRuntimeNode data, TRuntimeNode defaultData) { bool isOptional = false; const auto dataType = UnpackOptional(data, isOptional); |
