Skip to content

Commit 2805cf0

Browse files
pavelvelikhovPavel Velikhov
andauthored
[NEW RBO] Add YqlSelect support (ydb-platform#28901)
Co-authored-by: Pavel Velikhov <[email protected]>
1 parent a007eea commit 2805cf0

20 files changed

+2101
-1028
lines changed

ydb/core/kqp/compile_service/kqp_compile_actor.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -757,6 +757,15 @@ void ApplyServiceConfig(TKikimrConfiguration& kqpConfig, const TTableServiceConf
757757
kqpConfig.DefaultHashShuffleFuncType = NYql::NDq::EHashShuffleFuncType::HashV2;
758758
break;
759759
}
760+
761+
switch(serviceConfig.GetBackportMode()) {
762+
case NKikimrConfig::TTableServiceConfig_EBackportMode_Released:
763+
kqpConfig.BackportMode = NYql::EBackportCompatibleFeaturesMode::Released;
764+
break;
765+
case NKikimrConfig::TTableServiceConfig_EBackportMode_All:
766+
kqpConfig.BackportMode = NYql::EBackportCompatibleFeaturesMode::All;
767+
break;
768+
}
760769
}
761770

762771
IActor* CreateKqpCompileActor(const TActorId& owner, const TKqpSettings::TConstPtr& kqpSettings,

ydb/core/kqp/expr_nodes/kqp_expr_nodes.json

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -900,7 +900,8 @@
900900
"Match" : {"Type": "Callable", "Name": "KqpOpRoot"},
901901
"Children": [
902902
{"Index": 0, "Name": "Input", "Type": "TExprBase"},
903-
{"Index": 1, "Name": "ColumnOrder", "Type": "TCoAtomList"}
903+
{"Index": 1, "Name": "ColumnOrder", "Type": "TCoAtomList"},
904+
{"Index": 2, "Name": "PgSyntax", "Type": "TCoAtom"}
904905
]
905906
},
906907
{
@@ -930,9 +931,9 @@
930931
]
931932
},
932933
{
933-
"Name": "TKqpPgExprSublink",
934+
"Name": "TKqpExprSublink",
934935
"Base": "TExprBase",
935-
"Match" : {"Type": "Callable", "Name": "KqpPgExprSublink"},
936+
"Match" : {"Type": "Callable", "Name": "KqpExprSublink"},
936937
"Children": [
937938
{"Index": 0, "Name": "Expr", "Type": "TExprBase"}
938939
]

ydb/core/kqp/host/kqp_host.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1989,6 +1989,7 @@ class TKqpHost : public IKqpHost {
19891989
const TGatewaysConfig* gatewaysConfig = nullptr; // TODO: can we get real gatewaysConfig here?
19901990
auto allowSettings = [](TStringBuf settingName) {
19911991
return settingName == "OrderedColumns"
1992+
|| settingName == "DeriveColumnOrder"
19921993
|| settingName == "DisableOrderedColumns"
19931994
|| settingName == "Warning"
19941995
|| settingName == "UseBlocks"

ydb/core/kqp/host/kqp_runner.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -372,7 +372,7 @@ class TKqpRunner : public IKqpRunner {
372372
.AddPostTypeAnnotation(/* forSubgraph */ true)
373373
//.AddCommonOptimization()
374374

375-
.Add(CreateKqpPgRewriteTransformer(OptimizeCtx, *typesCtx), "RewritePgSelect")
375+
.Add(CreateKqpRewriteSelectTransformer(OptimizeCtx, *typesCtx), "RewriteSelect")
376376
.Add(CreateKqpNewRBOTransformer(OptimizeCtx, *typesCtx, rboKqpTypeAnnTransformer, kqpTypeAnnTransformer, newRBOPhysicalPeepholeTransformer, funcRegistry), "NewRBOTransformer")
377377
.Add(CreateKqpRBOCleanupTransformer(*typesCtx), "RBOCleanupTransformer")
378378

ydb/core/kqp/host/kqp_translate.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,7 @@ TKqpTranslationSettingsBuilder& TKqpTranslationSettingsBuilder::SetFromConfig(co
187187
// only options that should be specified for all types of queries
188188
// including views and etc..
189189
SetLangVer(config.LangVer);
190+
SetBackportMode(config.BackportMode);
190191
SetIsAmbiguityError(config.Antlr4ParserIsAmbiguityError);
191192
return *this;
192193
}

ydb/core/kqp/host/kqp_translate.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,11 @@ class TKqpTranslationSettingsBuilder {
151151
return *this;
152152
}
153153

154+
TKqpTranslationSettingsBuilder& SetBackportMode(NYql::EBackportCompatibleFeaturesMode backportMode) {
155+
BackportMode = backportMode;
156+
return *this;
157+
}
158+
154159
TKqpTranslationSettingsBuilder& SetIsAmbiguityError(bool isAmbiguityError) {
155160
IsAmbiguityError = isAmbiguityError;
156161
return *this;

ydb/core/kqp/opt/kqp_type_ann.cpp

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2251,8 +2251,8 @@ TStatus AnnotateTableSinkSettings(const TExprNode::TPtr& input, TExprContext& ct
22512251
return TStatus::Ok;
22522252
}
22532253

2254-
TStatus AnnotatePgExprSublink(const TExprNode::TPtr& node, TExprContext& ctx) {
2255-
auto expr = node->Child(TKqpPgExprSublink::idx_Expr);
2254+
TStatus AnnotateExprSublink(const TExprNode::TPtr& node, TExprContext& ctx) {
2255+
auto expr = node->Child(TKqpExprSublink::idx_Expr);
22562256
auto itemType = expr->GetTypeAnn()->Cast<TListExprType>()->GetItemType()->Cast<TStructExprType>();
22572257
auto valueType = itemType->GetItems()[0]->GetItemType();
22582258
if (!valueType->IsOptionalOrNull()) {
@@ -2290,7 +2290,10 @@ TStatus AnnotateOpRead(const TExprNode::TPtr& node, TExprContext& ctx, const TSt
22902290
TVector<const TItemExprType*> structItemTypes = rowType->Cast<TStructExprType>()->GetItems();
22912291
TVector<const TItemExprType*> newItemTypes;
22922292
for (auto t : structItemTypes ) {
2293-
newItemTypes.push_back(ctx.MakeType<TItemExprType>("_alias_" + TString(alias->Content()) + "." + t->GetName(), t->GetItemType()));
2293+
TString aliasName = TString(alias->Content());
2294+
TString columnName = TString(t->GetName());
2295+
TString fullName = aliasName != "" ? ( "_alias_" + aliasName + "." + columnName ) : columnName;
2296+
newItemTypes.push_back(ctx.MakeType<TItemExprType>(fullName, t->GetItemType()));
22942297
}
22952298

22962299
YQL_CLOG(TRACE, CoreDq) << "Row type:" << *rowType;
@@ -2710,8 +2713,8 @@ TAutoPtr<IGraphTransformer> CreateKqpTypeAnnotationTransformer(const TString& cl
27102713
return AnnotateTableSinkSettings(input, ctx);
27112714
}
27122715

2713-
if (TKqpPgExprSublink::Match(input.Get())) {
2714-
return AnnotatePgExprSublink(input, ctx);
2716+
if (TKqpExprSublink::Match(input.Get())) {
2717+
return AnnotateExprSublink(input, ctx);
27152718
}
27162719

27172720
if (TKqpOpRead::Match(input.Get())) {

ydb/core/kqp/opt/rbo/kqp_operator.cpp

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ TExprNode::TPtr AddRenames(TExprNode::TPtr input, TExprContext &ctx, TVector<TIn
2626
for (auto iu : renames) {
2727
// clang-format off
2828
auto tuple = Build<TCoNameValueTuple>(ctx, input->Pos())
29-
.Name().Build("_alias_" + iu.Alias + "." + iu.ColumnName)
29+
.Name().Build(iu.GetFullName())
3030
.Value<TCoMember>()
3131
.Struct(arg)
3232
.Name().Build(iu.ColumnName)
@@ -668,6 +668,19 @@ TVector<TInfoUnit> TOpFilter::GetScalarSubplanIUs(TPlanProps& props) {
668668
return res;
669669
}
670670

671+
bool TestAndExtractEqualityPredicate(TExprNode::TPtr pred, TExprNode::TPtr& leftArg, TExprNode::TPtr& rightArg) {
672+
if (pred->IsCallable("PgResolvedOp") && pred->Child(0)->Content() == "=") {
673+
leftArg = pred->Child(2);
674+
rightArg = pred->Child(3);
675+
return true;
676+
} else if (pred->IsCallable("==")) {
677+
leftArg = pred->Child(0);
678+
rightArg = pred->Child(1);
679+
return true;
680+
}
681+
return false;
682+
}
683+
671684
TConjunctInfo TOpFilter::GetConjunctInfo(TPlanProps& props) const {
672685
TConjunctInfo res;
673686

@@ -686,9 +699,9 @@ TConjunctInfo TOpFilter::GetConjunctInfo(TPlanProps& props) const {
686699
fromPg = true;
687700
}
688701

689-
if (conjObj->IsCallable("PgResolvedOp") && conjObj->Child(0)->Content() == "=") {
690-
auto leftArg = conjObj->Child(2);
691-
auto rightArg = conjObj->Child(3);
702+
TExprNode::TPtr leftArg;
703+
TExprNode::TPtr rightArg;
704+
if (TestAndExtractEqualityPredicate(conjObj, leftArg, rightArg)) {
692705
TVector<TInfoUnit> conjIUs;
693706
GetAllMembers(conj, conjIUs, props);
694707

ydb/core/kqp/opt/rbo/kqp_operator.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -234,6 +234,7 @@ struct TPlanProps {
234234
TStageGraph StageGraph;
235235
int InternalVarIdx = 1;
236236
TScalarSubplans ScalarSubplans;
237+
bool PgSyntax = false;
237238
};
238239

239240

@@ -411,6 +412,8 @@ class TOpFilter : public IUnaryOperator {
411412
TExprNode::TPtr FilterLambda;
412413
};
413414

415+
bool TestAndExtractEqualityPredicate(TExprNode::TPtr pred, TExprNode::TPtr& leftArg, TExprNode::TPtr& rightArg);
416+
414417
class TOpJoin : public IBinaryOperator {
415418
public:
416419
TOpJoin(std::shared_ptr<IOperator> leftArg, std::shared_ptr<IOperator> rightArg, TPositionHandle pos, TString joinKind,

ydb/core/kqp/opt/rbo/kqp_plan_conversion_utils.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ TExprNode::TPtr PlanConverter::RemoveScalarSubplans(TExprNode::TPtr node) {
1212
auto lambda = TCoLambda(node);
1313
auto lambdaBody = lambda.Body().Ptr();
1414

15-
auto exprSublinks = FindNodes(lambdaBody, [](const TExprNode::TPtr& n){return n->IsCallable("KqpPgExprSublink");});
15+
auto exprSublinks = FindNodes(lambdaBody, [](const TExprNode::TPtr& n){return n->IsCallable("KqpExprSublink");});
1616
if (exprSublinks.empty()) {
1717
return node;
1818
}
@@ -26,7 +26,7 @@ TExprNode::TPtr PlanConverter::RemoveScalarSubplans(TExprNode::TPtr node) {
2626
.Name<TCoAtom>().Value(sublinkVar.GetFullName()).Build()
2727
.Done().Ptr();
2828
replaceMap[link.Get()] = member;
29-
auto subplan = ExprNodeToOperator(TKqpPgExprSublink(link).Expr().Ptr());
29+
auto subplan = ExprNodeToOperator(TKqpExprSublink(link).Expr().Ptr());
3030
PlanProps.ScalarSubplans.Add(sublinkVar, subplan);
3131
}
3232

@@ -53,6 +53,7 @@ TOpRoot PlanConverter::ConvertRoot(TExprNode::TPtr node) {
5353
auto res = TOpRoot(rootInput, node->Pos(), columnOrder);
5454
res.Node = node;
5555
res.PlanProps = PlanProps;
56+
res.PlanProps.PgSyntax = std::stoi(opRoot.PgSyntax().StringValue());
5657
return res;
5758
}
5859

0 commit comments

Comments
 (0)