@@ -598,6 +598,11 @@ TMaybeNode<TExprBase> KqpJoinToIndexLookupImpl(const TDqJoin& join, TExprContext
598598 leftJoinKeys.emplace (leftKey);
599599 }
600600
601+ const bool useStreamIndexLookupJoin = (kqpCtx.IsDataQuery () || kqpCtx.IsGenericQuery ())
602+ && kqpCtx.Config ->EnableKqpDataQueryStreamIdxLookupJoin
603+ && supportedStreamJoinKinds.contains (join.JoinType ().Value ())
604+ && !indexName;
605+
601606 auto leftRowArg = Build<TCoArgument>(ctx, join.Pos ())
602607 .Name (" leftRowArg" )
603608 .Done ();
@@ -677,10 +682,19 @@ TMaybeNode<TExprBase> KqpJoinToIndexLookupImpl(const TDqJoin& join, TExprContext
677682 }
678683 if (canCast) {
679684 DBG (" ------ cast " << leftDataType->GetName () << " to " << rightDataType->GetName ());
680- member = Build<TCoConvert>(ctx, join.Pos ())
681- .Input (member)
682- .Type ().Build (rightDataType->GetName ())
683- .Done ().Ptr ();
685+
686+ if (useStreamIndexLookupJoin) {
687+ // For stream lookup join we should cast keys before join
688+ member = Build<TCoSafeCast>(ctx, join.Pos ())
689+ .Value (member)
690+ .Type (ExpandType (join.Pos (), *rightType, ctx))
691+ .Done ().Ptr ();
692+ } else {
693+ member = Build<TCoConvert>(ctx, join.Pos ())
694+ .Input (member)
695+ .Type ().Build (rightDataType->GetName ())
696+ .Done ().Ptr ();
697+ }
684698 } else {
685699 DBG (" ------ can not cast " << leftDataType->GetName () << " to " << rightDataType->GetName ());
686700 return {};
@@ -704,11 +718,6 @@ TMaybeNode<TExprBase> KqpJoinToIndexLookupImpl(const TDqJoin& join, TExprContext
704718 return {};
705719 }
706720
707- const bool useStreamIndexLookupJoin = (kqpCtx.IsDataQuery () || kqpCtx.IsGenericQuery ())
708- && kqpCtx.Config ->EnableKqpDataQueryStreamIdxLookupJoin
709- && supportedStreamJoinKinds.contains (join.JoinType ().Value ())
710- && !indexName;
711-
712721 bool needPrecomputeLeft = (kqpCtx.IsDataQuery () || kqpCtx.IsGenericQuery ())
713722 && !join.LeftInput ().Maybe <TCoParameter>()
714723 && !IsParameterToListOfStructsRepack (join.LeftInput ())
0 commit comments