Skip to content

Commit

Permalink
drop idea with null keys and lambda
Browse files Browse the repository at this point in the history
  • Loading branch information
yumkam committed Jan 22, 2025
1 parent 34625a5 commit ce0037d
Showing 1 changed file with 6 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -451,15 +451,15 @@ namespace NYql::NDq {
}

void AddClause(NConnector::NApi::TPredicate::TDisjunction &disjunction,
ui32 columnsCount, auto&& getter) {
ui32 columnsCount, const NUdf::TUnboxedValue& keys) {
NConnector::NApi::TPredicate::TConjunction& conjunction = *disjunction.mutable_operands()->Add()->mutable_conjunction();
for (ui32 c = 0; c != columnsCount; ++c) {
NConnector::NApi::TPredicate::TComparison& eq = *conjunction.mutable_operands()->Add()->mutable_comparison();
eq.set_operation(NConnector::NApi::TPredicate::TComparison::EOperation::TPredicate_TComparison_EOperation_EQ);
eq.mutable_left_value()->set_column(TString(KeyType->GetMemberName(c)));
auto rightTypedValue = eq.mutable_right_value()->mutable_typed_value();
ExportTypeToProto(KeyType->GetMemberType(c), *rightTypedValue->mutable_type());
ExportValueToProto(KeyType->GetMemberType(c), getter(c), *rightTypedValue->mutable_value());
ExportValueToProto(KeyType->GetMemberType(c), keys.GetElement(c), *rightTypedValue->mutable_value());
}
}

Expand All @@ -480,19 +480,15 @@ namespace NYql::NDq {
select.mutable_from()->Settable(LookupSource.table());

NConnector::NApi::TPredicate::TDisjunction disjunction;
for (const auto& [k, _] : *Request) {
for (const auto& [keys, _] : *Request) {
// TODO consider skipping already retrieved keys
// ... but careful, can we end up with zero? TODO
AddClause(disjunction, KeyType->GetMembersCount(), [&k = k](auto c) {
return k.GetElement(c);
});
AddClause(disjunction, KeyType->GetMembersCount(), keys);
}
auto& k = Request->begin()->first; // Request is never empty
auto& keys = Request->begin()->first; // Request is never empty
// Pad query with dummy clauses to improve caching
for (ui32 nRequests = Request->size(); !IsPowerOf2(nRequests) && nRequests < MaxKeysInRequest; ++nRequests) {
AddClause(disjunction, KeyType->GetMembersCount(), [&k = k](auto c) {
return k.GetElement(c);
});
AddClause(disjunction, KeyType->GetMembersCount(), keys);
}
*select.mutable_where()->mutable_filter_typed()->mutable_disjunction() = disjunction;
return {};
Expand Down

0 comments on commit ce0037d

Please sign in to comment.