Skip to content

Commit 3b8e9f7

Browse files
Added support for PG into CBO (#2399)
1 parent 70762d5 commit 3b8e9f7

File tree

57 files changed

+3853
-2310
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

57 files changed

+3853
-2310
lines changed

ydb/core/kqp/opt/kqp_query_plan.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1394,6 +1394,7 @@ class TxPlanSerializer {
13941394

13951395
TOperator op;
13961396
op.Properties["Name"] = name;
1397+
op.Properties["Condition"] = MakeJoinConditionString(join.LeftKeysColumnNames(), join.RightKeysColumnNames());
13971398

13981399
auto operatorId = AddOperator(planNode, name, std::move(op));
13991400

@@ -1409,7 +1410,7 @@ class TxPlanSerializer {
14091410

14101411
TOperator op;
14111412
op.Properties["Name"] = name;
1412-
1413+
op.Properties["Condition"] = MakeJoinConditionString(join.LeftKeysColumnNames(), join.RightKeysColumnNames());
14131414
AddOptimizerEstimates(op, join);
14141415

14151416
return AddOperator(planNode, name, std::move(op));

ydb/core/kqp/opt/logical/kqp_opt_log_join.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,11 @@ bool IsKqlPureExpr(const TExprBase& expr) {
147147
TDqJoin FlipLeftSemiJoin(const TDqJoin& join, TExprContext& ctx) {
148148
Y_DEBUG_ABORT_UNLESS(join.JoinType().Value() == "LeftSemi");
149149

150+
TVector<TCoAtom> leftJoinKeyNames;
151+
leftJoinKeyNames.reserve(join.JoinKeys().Size());
152+
TVector<TCoAtom> rightJoinKeyNames;
153+
rightJoinKeyNames.reserve(join.JoinKeys().Size());
154+
150155
auto joinKeysBuilder = Build<TDqJoinKeyTupleList>(ctx, join.Pos());
151156
for (const auto& keys : join.JoinKeys()) {
152157
joinKeysBuilder.Add<TDqJoinKeyTuple>()
@@ -155,6 +160,8 @@ TDqJoin FlipLeftSemiJoin(const TDqJoin& join, TExprContext& ctx) {
155160
.RightLabel(keys.LeftLabel())
156161
.RightColumn(keys.LeftColumn())
157162
.Build();
163+
leftJoinKeyNames.emplace_back(keys.RightColumn());
164+
rightJoinKeyNames.emplace_back(keys.LeftColumn());
158165
}
159166

160167
return Build<TDqJoin>(ctx, join.Pos())
@@ -164,6 +171,10 @@ TDqJoin FlipLeftSemiJoin(const TDqJoin& join, TExprContext& ctx) {
164171
.RightLabel(join.LeftLabel())
165172
.JoinType().Build("RightSemi")
166173
.JoinKeys(joinKeysBuilder.Done())
174+
.LeftJoinKeyNames()
175+
.Add(leftJoinKeyNames).Build()
176+
.RightJoinKeyNames()
177+
.Add(rightJoinKeyNames).Build()
167178
.Done();
168179
}
169180

@@ -835,6 +846,8 @@ TMaybeNode<TExprBase> KqpJoinToIndexLookupImpl(const TDqJoin& join, TExprContext
835846
.RightLabel(join.RightLabel())
836847
.JoinType(join.JoinType())
837848
.JoinKeys(join.JoinKeys())
849+
.LeftJoinKeyNames(join.LeftJoinKeyNames())
850+
.RightJoinKeyNames(join.RightJoinKeyNames())
838851
.Done();
839852
}
840853

ydb/core/kqp/opt/logical/kqp_opt_log_sqlin_compact.cpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,12 @@ TExprBase KqpRewriteSqlInCompactToJoin(const TExprBase& node, TExprContext& ctx)
120120
.Value(leftLabelStr)
121121
.Done().Ptr();
122122

123+
TVector<TCoAtom> leftJoinKeyNames;
124+
TVector<TCoAtom> rightJoinKeyNames;
125+
126+
leftJoinKeyNames.emplace_back(leftColumn);
127+
rightJoinKeyNames.emplace_back(rightColumn);
128+
123129
auto joinKeys = Build<TDqJoinKeyTupleList>(ctx, node.Pos())
124130
.Add<TDqJoinKeyTuple>()
125131
.LeftLabel(leftLabel)
@@ -149,6 +155,12 @@ TExprBase KqpRewriteSqlInCompactToJoin(const TExprBase& node, TExprContext& ctx)
149155
.Value("LeftSemi")
150156
.Build()
151157
.JoinKeys(joinKeys)
158+
.LeftJoinKeyNames()
159+
.Add(leftJoinKeyNames)
160+
.Build()
161+
.RightJoinKeyNames()
162+
.Add(rightJoinKeyNames)
163+
.Build()
152164
.Done();
153165

154166
// Convert column names back, i.e. leftLabel.ColumnName -> ColumnName

ydb/core/kqp/ut/common/kqp_ut_common.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ SIMPLE_MODULE(TTestUdfsModule, TTestFilter, TTestFilterTerminate, TRandString);
7070
NYql::NUdf::TUniquePtr<NYql::NUdf::IUdfModule> CreateJson2Module();
7171
NYql::NUdf::TUniquePtr<NYql::NUdf::IUdfModule> CreateRe2Module();
7272
NYql::NUdf::TUniquePtr<NYql::NUdf::IUdfModule> CreateStringModule();
73+
NYql::NUdf::TUniquePtr<NYql::NUdf::IUdfModule> CreateDateTime2Module();
7374

7475
NMiniKQL::IFunctionRegistry* UdfFrFactory(const NScheme::TTypeRegistry& typeRegistry) {
7576
Y_UNUSED(typeRegistry);
@@ -78,6 +79,7 @@ NMiniKQL::IFunctionRegistry* UdfFrFactory(const NScheme::TTypeRegistry& typeRegi
7879
funcRegistry->AddModule("", "Json2", CreateJson2Module());
7980
funcRegistry->AddModule("", "Re2", CreateRe2Module());
8081
funcRegistry->AddModule("", "String", CreateStringModule());
82+
funcRegistry->AddModule("", "DateTime", CreateDateTime2Module());
8183
NKikimr::NMiniKQL::FillStaticModules(*funcRegistry);
8284
return funcRegistry.Release();
8385
}

0 commit comments

Comments
 (0)