Skip to content

Commit

Permalink
Fixed minor problems with plan represtation (#889)
Browse files Browse the repository at this point in the history
* Fixed minor issues with plan representations

* Fixed minor bug, cannonized testsd

* Added more canonized tests

* Fixed minor issues reported by Yulia
  • Loading branch information
pavelvelikhov authored Jan 10, 2024
1 parent 192598f commit 319d074
Show file tree
Hide file tree
Showing 65 changed files with 324 additions and 268 deletions.
39 changes: 36 additions & 3 deletions ydb/core/kqp/opt/kqp_query_plan.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -345,6 +345,7 @@ class TxPlanSerializer {
else {
TArgContext c = std::get<TArgContext>(input);
writer.BeginObject();

auto input = LambdaInputs.find(c);
if (input != LambdaInputs.end()){
if (std::holds_alternative<ui32>(input->second)) {
Expand Down Expand Up @@ -1056,15 +1057,17 @@ class TxPlanSerializer {
TVector<std::variant<ui32, TArgContext>> Visit(const TCoFlatMapBase& flatMap, TQueryPlanNode& planNode) {
auto flatMapInputs = Visit(flatMap.Input().Ptr(), planNode);

if (flatMapInputs.size() == 1) {
if (flatMapInputs.size() >= 1) {
auto input = flatMapInputs[0];
auto newContext = CurrentArgContext.AddArg(flatMap.Lambda().Args().Arg(0).Ptr().Get());

if (std::holds_alternative<ui32>(input)) {
LambdaInputs[newContext] = std::get<ui32>(input);
} else {
auto content = std::get<TArgContext>(input);
LambdaInputs[newContext] = LambdaInputs.at(std::get<TArgContext>(input));
auto context = std::get<TArgContext>(input);
if (LambdaInputs.contains(context)){
LambdaInputs[newContext] = LambdaInputs.at(context);
}
}
}

Expand Down Expand Up @@ -1234,11 +1237,35 @@ class TxPlanSerializer {
return AddOperator(planNode, "Delete", std::move(op));
}

TString MakeJoinConditionString(const TCoAtomList& leftKeys, const TCoAtomList& rightKeys) {
TString result = "";

for (size_t i = 0; i < leftKeys.Size(); i++) {
result += leftKeys.Item(i).StringValue();
if (i != leftKeys.Size() - 1) {
result += ",";
}
}

result += " = ";

for (size_t i = 0; i < rightKeys.Size(); i++) {
result += rightKeys.Item(i).StringValue();
if (i != rightKeys.Size() - 1) {
result += ",";
}
}

return result;

}

std::variant<ui32, TArgContext> Visit(const TCoFlatMapBase& flatMap, const TCoMapJoinCore& join, TQueryPlanNode& planNode) {
const auto name = TStringBuilder() << join.JoinKind().Value() << "Join (MapJoin)";

TOperator op;
op.Properties["Name"] = name;
op.Properties["Condition"] = MakeJoinConditionString(join.LeftKeysColumns(), join.RightKeysColumns());

AddOptimizerEstimates(op, join);

Expand All @@ -1254,6 +1281,8 @@ class TxPlanSerializer {

TOperator op;
op.Properties["Name"] = name;
op.Properties["Condition"] = MakeJoinConditionString(join.LeftKeysColumns(), join.RightKeysColumns());


AddOptimizerEstimates(op, join);

Expand Down Expand Up @@ -1291,6 +1320,8 @@ class TxPlanSerializer {

TOperator op;
op.Properties["Name"] = name;
op.Properties["Condition"] = MakeJoinConditionString(join.LeftKeysColumns(), join.RightKeysColumns());

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

AddOptimizerEstimates(op, join);
Expand All @@ -1305,6 +1336,8 @@ class TxPlanSerializer {

TOperator op;
op.Properties["Name"] = name;
op.Properties["Condition"] = MakeJoinConditionString(join.LeftKeysColumns(), join.RightKeysColumns());


AddOptimizerEstimates(op, join);

Expand Down
Loading

0 comments on commit 319d074

Please sign in to comment.