@@ -383,6 +383,25 @@ THashMap<TStringBuf, size_t> GetNameToIndex(const ::google::protobuf::RepeatedPt
383
383
return result;
384
384
}
385
385
386
+ THashMap<TStringBuf, size_t > GetNameToIndex (const NMiniKQL::TStructType* type) {
387
+ THashMap<TStringBuf, size_t > result;
388
+ for (ui32 i = 0 ; i != type->GetMembersCount (); ++i) {
389
+ result[type->GetMemberName (i)] = i;
390
+ }
391
+ return result;
392
+ }
393
+
394
+ TVector<size_t > GetJoinColumnIndexes (const ::google::protobuf::RepeatedPtrField<TProtoStringType>& names, const THashMap<TStringBuf, size_t >& joinColumns) {
395
+ TVector<size_t > result;
396
+ result.reserve (joinColumns.size ());
397
+ for (int i = 0 ; i != names.size (); ++i) {
398
+ if (auto p = joinColumns.FindPtr (names[i])) {
399
+ result.push_back (*p);
400
+ }
401
+ }
402
+ return result;
403
+ }
404
+
386
405
TVector<size_t > GetJoinColumnIndexes (const NMiniKQL::TStructType* type, const THashMap<TStringBuf, size_t >& joinColumns) {
387
406
TVector<size_t > result;
388
407
result.reserve (joinColumns.size ());
@@ -410,14 +429,15 @@ std::pair<IDqComputeActorAsyncInput*, NActors::IActor*> CreateInputTransformStre
410
429
411
430
const auto rightRowType = DeserializeStructType (settings.GetRightSource ().GetSerializedRowType (), args.TypeEnv );
412
431
413
- auto leftJoinColumns = GetNameToIndex (settings. GetLeftJoinKeyNames () );
432
+ auto inputColumns = GetNameToIndex (narrowInputRowType );
414
433
auto rightJoinColumns = GetNameToIndex (settings.GetRightJoinKeyNames ());
415
- Y_ABORT_UNLESS (leftJoinColumns.size () == rightJoinColumns.size ());
416
434
417
- auto leftJoinColumnIndexes = GetJoinColumnIndexes (narrowInputRowType, leftJoinColumns);
418
- Y_ABORT_UNLESS (leftJoinColumnIndexes.size () == leftJoinColumns.size ());
435
+ auto leftJoinColumnIndexes = GetJoinColumnIndexes (
436
+ settings.GetLeftJoinKeyNames (),
437
+ inputColumns);
419
438
auto rightJoinColumnIndexes = GetJoinColumnIndexes (rightRowType, rightJoinColumns);
420
439
Y_ABORT_UNLESS (rightJoinColumnIndexes.size () == rightJoinColumns.size ());
440
+ Y_ABORT_UNLESS (leftJoinColumnIndexes.size () == rightJoinColumnIndexes.size ());
421
441
422
442
const auto & [lookupKeyType, lookupPayloadType] = SplitLookupTableColumns (rightRowType, rightJoinColumns, args.TypeEnv );
423
443
const auto & outputColumnsOrder = CategorizeOutputRowItems (
0 commit comments