@@ -62,6 +62,8 @@ public static function process(
6262 $left_mappings = dict [];
6363 $right_mappings = dict [];
6464
65+ $dirty_pks = keyset [];
66+
6567 switch ($join_type ) {
6668 case JoinType :: JOIN :
6769 case JoinType :: STRAIGHT :
@@ -77,6 +79,9 @@ public static function process(
7779 $left_mappings [$left_row_id ][] = $insert_id ;
7880 $right_mappings [$right_row_id ] ??= keyset [];
7981 $right_mappings [$right_row_id ][] = $insert_id ;
82+ if (isset ($left_dataset [2 ][$left_row_id ]) || isset ($right_dataset [2 ][$right_row_id ])) {
83+ $dirty_pks [] = $insert_id ;
84+ }
8085 }
8186 }
8287 }
@@ -104,6 +109,9 @@ public static function process(
104109 $right_mappings [$right_row_id ] ??= keyset [];
105110 $right_mappings [$right_row_id ][] = $insert_id ;
106111 $any_match = true ;
112+ if (isset ($left_dataset [2 ][$left_row_id ]) || isset ($right_dataset [2 ][$right_row_id ])) {
113+ $dirty_pks [] = $insert_id ;
114+ }
107115 }
108116 }
109117
@@ -120,6 +128,10 @@ public static function process(
120128 $insert_id = C \count ($out ) - 1 ;
121129 $left_mappings [$left_row_id ] ??= keyset [];
122130 $left_mappings [$left_row_id ][] = $insert_id ;
131+
132+ if (isset ($left_dataset [2 ][$left_row_id ])) {
133+ $dirty_pks [] = $insert_id ;
134+ }
123135 }
124136 }
125137 break ;
@@ -146,6 +158,9 @@ public static function process(
146158 $left_mappings [$left_row_id ][] = $insert_id ;
147159 $right_mappings [$right_row_id ] ??= keyset [];
148160 $right_mappings [$right_row_id ][] = $insert_id ;
161+ if (isset ($left_dataset [2 ][$left_row_id ]) || isset ($right_dataset [2 ][$right_row_id ])) {
162+ $dirty_pks [] = $insert_id ;
163+ }
149164 }
150165 }
151166
@@ -164,6 +179,9 @@ public static function process(
164179 $left_mappings [$left_row_id ][] = $insert_id ;
165180 $right_mappings [$right_row_id ] ??= keyset [];
166181 $right_mappings [$right_row_id ][] = $insert_id ;
182+ if (isset ($left_dataset [2 ][$left_row_id ]) || isset ($right_dataset [2 ][$right_row_id ])) {
183+ $dirty_pks [] = $insert_id ;
184+ }
167185 }
168186 }
169187 break ;
@@ -183,6 +201,9 @@ public static function process(
183201 $left_mappings [$left_row_id ][] = $insert_id ;
184202 $right_mappings [$right_row_id ] ??= keyset [];
185203 $right_mappings [$right_row_id ][] = $insert_id ;
204+ if (isset ($left_dataset [2 ][$left_row_id ]) || isset ($right_dataset [2 ][$right_row_id ])) {
205+ $dirty_pks [] = $insert_id ;
206+ }
186207 }
187208 }
188209 }
@@ -198,7 +219,7 @@ public static function process(
198219 $right_indexes ,
199220 );
200221
201- return tuple (dict ($out ), $index_refs );
222+ return tuple (dict ($out ), $index_refs , $dirty_pks );
202223 }
203224
204225 /**
@@ -308,6 +329,7 @@ private static function processHashJoin(
308329
309330 $left_mappings = dict [];
310331 $right_mappings = dict [];
332+ $dirty_pks = keyset [];
311333
312334 switch ($join_type ) {
313335 case JoinType :: JOIN :
@@ -322,6 +344,9 @@ private static function processHashJoin(
322344 $left_mappings [$left_row_id ][] = $insert_id ;
323345 $right_mappings [$k ] ??= keyset [];
324346 $right_mappings [$k ][] = $insert_id ;
347+ if (isset ($left_dataset [2 ][$left_row_id ]) || isset ($right_dataset [2 ][$k ])) {
348+ $dirty_pks [] = $insert_id ;
349+ }
325350 }
326351 }
327352 break ;
@@ -348,6 +373,9 @@ private static function processHashJoin(
348373 $right_mappings [$k ] ??= keyset [];
349374 $right_mappings [$k ][] = $insert_id ;
350375 $any_match = true ;
376+ if (isset ($left_dataset [2 ][$left_row_id ]) || isset ($right_dataset [2 ][$k ])) {
377+ $dirty_pks [] = $insert_id ;
378+ }
351379 }
352380 }
353381
@@ -364,6 +392,9 @@ private static function processHashJoin(
364392 $insert_id = C \count ($out ) - 1 ;
365393 $left_mappings [$left_row_id ] ??= keyset [];
366394 $left_mappings [$left_row_id ][] = $insert_id ;
395+ if (isset ($left_dataset [2 ][$left_row_id ])) {
396+ $dirty_pks [] = $insert_id ;
397+ }
367398 }
368399 }
369400 break ;
@@ -380,7 +411,7 @@ private static function processHashJoin(
380411 $right_indexes ,
381412 );
382413
383- return tuple (dict ($out ), $index_refs );
414+ return tuple (dict ($out ), $index_refs , $dirty_pks );
384415 }
385416
386417 private static function getIndexRefsFromMappings (
0 commit comments