Skip to content

Commit

Permalink
fix(dq): add cast for all optional join keys (#2080)
Browse files Browse the repository at this point in the history
  • Loading branch information
ulya-sidorina authored Feb 20, 2024
1 parent fcc71af commit fbdfcec
Show file tree
Hide file tree
Showing 2 changed files with 61 additions and 2 deletions.
59 changes: 59 additions & 0 deletions ydb/core/kqp/ut/join/kqp_join_ut.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1303,6 +1303,65 @@ Y_UNIT_TEST_SUITE(KqpJoin) {
UNIT_ASSERT(explain.GetAst().Contains("GraceJoinCore"));
}

Y_UNIT_TEST(FullOuterJoinNotNullJoinKey) {
TKikimrRunner kikimr;
auto db = kikimr.GetTableClient();
auto session = db.CreateSession().GetValueSync().GetSession();

{ // init tables
AssertSuccessResult(session.ExecuteSchemeQuery(R"(
--!syntax_v1
CREATE TABLE left
(
Key Int64 NOT NULL,
Value Int64,
PRIMARY KEY (Key)
);
CREATE TABLE right
(
Key Int64 NOT NULL,
Value Int64,
PRIMARY KEY (Key)
);
)").GetValueSync());

auto result = session.ExecuteDataQuery(R"(
--!syntax_v1
REPLACE INTO left (Key, Value) VALUES
(1, 10),
(2, 20),
(3, 30);
REPLACE INTO right (Key, Value) VALUES
(1, 10),
(2, 200),
(3, 300),
(4, 40);
)", TTxControl::BeginTx().CommitTx()).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL(result.GetStatus(), EStatus::SUCCESS);
}

{
auto result = session.ExecuteDataQuery(R"(
--!syntax_v1
SELECT l.Key, l.Value, r.Key, r.Value FROM left as l FULL JOIN right as r
ON (l.Value = r.Value AND l.Key = r.Key);
)", TTxControl::BeginTx().CommitTx()).ExtractValueSync();
UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString());
CompareYson(R"([
[[1];[10];[1];[10]];
[[2];[20];#;#];
[[3];[30];#;#];
[#;#;[3];[300]];
[#;#;[4];[40]];
[#;#;[2];[200]]
])", FormatResultSetYson(result.GetResultSet(0)));
}
}
}

} // namespace NKqp
Expand Down
4 changes: 2 additions & 2 deletions ydb/library/yql/dq/opt/dq_opt_peephole.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -484,8 +484,8 @@ NNodes::TExprBase DqPeepholeRewriteJoinDict(const NNodes::TExprBase& node, TExpr
<< "(" << *leftKeyType << ") and " << rightKeys[i]->Content() << "(" << *rightKeyType << ")";
break;
}
castKeyLeft = (!IsSameAnnotation(*leftDryType, *commonType) || optKeyLeft);
castKeyRight = (!IsSameAnnotation(*rightDryType, *commonType) || optKeyRight);
castKeyLeft = castKeyLeft || (!IsSameAnnotation(*leftDryType, *commonType) || optKeyLeft);
castKeyRight = castKeyRight || (!IsSameAnnotation(*rightDryType, *commonType) || optKeyRight);
keyTypeItems.emplace_back(commonType);
}

Expand Down

0 comments on commit fbdfcec

Please sign in to comment.