Skip to content

Commit 95f3a50

Browse files
authored
[yt provider] Add YtMaterialize callable (#10057)
1 parent d4f2a48 commit 95f3a50

File tree

3 files changed

+48
-0
lines changed

3 files changed

+48
-0
lines changed

ydb/library/yql/providers/yt/expr_nodes/yql_yt_expr_nodes.json

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -347,6 +347,15 @@
347347
{"Index": 4, "Name": "Settings", "Type": "TCoNameValueTupleList"}
348348
]
349349
},
350+
{
351+
"Name": "TYtMaterialize",
352+
"Base": "TYtOpBase",
353+
"Match": {"Type": "Callable", "Name": "YtMaterialize!"},
354+
"Children": [
355+
{"Index": 2, "Name": "Input", "Type": "TExprBase"},
356+
{"Index": 3, "Name": "Settings", "Type": "TCoNameValueTupleList"}
357+
]
358+
},
350359
{
351360
"Name": "TYtTouch",
352361
"Base": "TYtOutputOpBase",

ydb/library/yql/providers/yt/provider/yql_yt_datasink_constraints.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ class TYtDataSinkConstraintTransformer : public TVisitorTransformerBase {
4242
AddHandler({TYtStatOut::CallableName()}, Hndl(&TYtDataSinkConstraintTransformer::HandleDefault));
4343
AddHandler({TYtDqProcessWrite ::CallableName()}, Hndl(&TYtDataSinkConstraintTransformer::HandleDqProcessWrite));
4444
AddHandler({TYtTryFirst ::CallableName()}, Hndl(&TYtDataSinkConstraintTransformer::HandleTryFirst));
45+
AddHandler({TYtMaterialize ::CallableName()}, Hndl(&TYtDataSinkConstraintTransformer::HandleMaterialize));
4546
}
4647
private:
4748
static void CopyExcept(TExprNode* dst, const TExprNode& from, const TStringBuf& except) {
@@ -447,6 +448,12 @@ class TYtDataSinkConstraintTransformer : public TVisitorTransformerBase {
447448
input.Ptr()->CopyConstraints(input.Ref().Tail());
448449
return TStatus::Ok;
449450
}
451+
452+
TStatus HandleMaterialize(TExprBase input, TExprContext&) {
453+
input.Ptr()->CopyConstraints(*input.Ref().Child(TYtMaterialize::idx_Input));
454+
return TStatus::Ok;
455+
}
456+
450457
private:
451458
const TYtState::TPtr State_;
452459
const bool SubGraph;

ydb/library/yql/providers/yt/provider/yql_yt_datasink_type_ann.cpp

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@ class TYtDataSinkTypeAnnotationTransformer : public TVisitorTransformerBase {
8686
AddHandler({TYtDqWrite::CallableName()}, Hndl(&TYtDataSinkTypeAnnotationTransformer::HandleDqWrite<false>));
8787
AddHandler({TYtDqWideWrite::CallableName()}, Hndl(&TYtDataSinkTypeAnnotationTransformer::HandleDqWrite<true>));
8888
AddHandler({TYtTryFirst::CallableName()}, Hndl(&TYtDataSinkTypeAnnotationTransformer::HandleTryFirst));
89+
AddHandler({TYtMaterialize::CallableName()}, Hndl(&TYtDataSinkTypeAnnotationTransformer::HandleMaterialize));
8990
}
9091

9192
private:
@@ -2066,6 +2067,37 @@ class TYtDataSinkTypeAnnotationTransformer : public TVisitorTransformerBase {
20662067
input.Ptr()->SetTypeAnn(input.Ref().Head().GetTypeAnn());
20672068
return TStatus::Ok;
20682069
}
2070+
2071+
TStatus HandleMaterialize(TExprBase input, TExprContext& ctx) {
2072+
if (!EnsureArgsCount(input.Ref(), 4, ctx)) {
2073+
return TStatus::Error;
2074+
}
2075+
2076+
if (!ValidateOpBase(input.Ptr(), ctx)) {
2077+
return TStatus::Error;
2078+
}
2079+
2080+
if (!EnsureSeqOrOptionalType(*input.Ref().Child(TYtMaterialize::idx_Input), ctx)) {
2081+
return IGraphTransformer::TStatus::Error;
2082+
}
2083+
const auto& itemType = GetSeqItemType(*input.Ref().Child(TYtMaterialize::idx_Input)->GetTypeAnn());
2084+
if (!EnsurePersistableType(input.Ref().Head().Pos(), itemType, ctx)) {
2085+
return IGraphTransformer::TStatus::Error;
2086+
}
2087+
2088+
// Basic Settings validation
2089+
if (!EnsureTuple(*input.Ref().Child(TYtMaterialize::idx_Settings), ctx)) {
2090+
return TStatus::Error;
2091+
}
2092+
2093+
if (!ValidateSettings(*input.Ref().Child(TYtMaterialize::idx_Settings), EYtSettingTypes{}, ctx)) {
2094+
return TStatus::Error;
2095+
}
2096+
2097+
input.Ptr()->SetTypeAnn(ctx.MakeType<TListExprType>(&itemType));
2098+
return TStatus::Ok;
2099+
}
2100+
20692101
private:
20702102
const TYtState::TPtr State_;
20712103
};

0 commit comments

Comments
 (0)