summaryrefslogtreecommitdiffstats
path: root/yql/essentials/minikql/mkql_program_builder.cpp
diff options
context:
space:
mode:
authorvvvv <[email protected]>2025-09-12 13:56:26 +0300
committervvvv <[email protected]>2025-09-12 14:09:05 +0300
commit6b08fb2106419ef0ad526b68814b5613c4597829 (patch)
tree271ab60ef54af39ce1041e0a458216c285a9f6ce /yql/essentials/minikql/mkql_program_builder.cpp
parentad886835a6c49d39f217c092221eacec88cc0192 (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.cpp33
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);