wankunde commented on code in PR #40523:
URL: https://github.com/apache/spark/pull/40523#discussion_r1159889577


##########
sql/core/src/main/scala/org/apache/spark/sql/execution/joins/ShuffledHashJoinExec.scala:
##########
@@ -365,9 +365,21 @@ case class ShuffledHashJoinExec(
        """.stripMargin
     val streamedKeyAnyNull = s"${streamedKeyExprCode.value}.anyNull()"
 
+    // Evaluate the variables from the stream side and used in the condition 
but do not clear the
+    // code as they may be used in the following function.

Review Comment:
   Physical plan of UT
   ```
   val joinWithNonEquiDF = df1.select('k1, 'k1.as('k1_2)).join(df2.hint(hint),
           $"k1" === $"k2" % 3 && $"k1" + 3 =!= $"k2", "full_outer")            
$"k1" === $"k2" % 3 && $"k1_2" + 3 =!= $"k2" && $"k1_2" + 5 =!= $"k2",
           "full_outer")
   ```
   is 
   ```
   == Subtree 5 / 5 (maxMethodCodeSize:-1; maxConstantPoolSize:-1; 
numInnerClasses:-1) ==
   *(5) SortMergeJoin [k1#2L], [(k2#6L % 3)], FullOuter, (NOT ((k1_2#35L + 3) = 
k2#6L) AND NOT ((k1_2#35L + 5) = k2#6L))
   :- *(2) Sort [k1#2L ASC NULLS FIRST], false, 0
   :  +- Exchange hashpartitioning(k1#2L, 5), ENSURE_REQUIREMENTS, [plan_id=332]
   :     +- *(1) Project [id#0L AS k1#2L, id#0L AS k1_2#35L]
   :        +- *(1) Range (0, 5, step=1, splits=2)
   +- *(4) Sort [(k2#6L % 3) ASC NULLS FIRST], false, 0
      +- Exchange hashpartitioning((k2#6L % 3), 5), ENSURE_REQUIREMENTS, 
[plan_id=338]
         +- *(3) Project [id#4L AS k2#6L]
            +- *(3) Range (0, 10, step=1, splits=2)
   ```
   Before this PR,  `getJoinCondition(ctx, leftResultVars, left, right, 
Some(rightOutputRow))` will generate code from line 234 to line 273
   ```java
   /* 001 */ public Object generate(Object[] references) {
   /* 002 */   return new GeneratedIteratorForCodegenStage5(references);
   /* 003 */ }
   /* 004 */
   /* 005 */ // codegenStageId=5
   /* 006 */ final class GeneratedIteratorForCodegenStage5 extends 
org.apache.spark.sql.execution.BufferedRowIterator {
   /* 007 */   private Object[] references;
   /* 008 */   private scala.collection.Iterator[] inputs;
   /* 009 */   private scala.collection.Iterator smj_leftInput_0;
   /* 010 */   private scala.collection.Iterator smj_rightInput_0;
   /* 011 */   private InternalRow smj_leftInputRow_0;
   /* 012 */   private InternalRow smj_rightInputRow_0;
   /* 013 */   private long smj_value_4;
   /* 014 */   private InternalRow smj_leftOutputRow_0;
   /* 015 */   private InternalRow smj_rightOutputRow_0;
   /* 016 */   private java.util.ArrayList<InternalRow> smj_leftBuffer_0;
   /* 017 */   private java.util.ArrayList<InternalRow> smj_rightBuffer_0;
   /* 018 */   private org.apache.spark.util.collection.BitSet 
smj_leftMatched_0;
   /* 019 */   private org.apache.spark.util.collection.BitSet 
smj_rightMatched_0;
   /* 020 */   private 
org.apache.spark.sql.catalyst.expressions.codegen.UnsafeRowWriter[] 
smj_mutableStateArray_0 = new 
org.apache.spark.sql.catalyst.expressions.codegen.UnsafeRowWriter[1];
   /* 021 */
   /* 022 */   public GeneratedIteratorForCodegenStage5(Object[] references) {
   /* 023 */     this.references = references;
   /* 024 */   }
   /* 025 */
   /* 026 */   public void init(int index, scala.collection.Iterator[] inputs) {
   /* 027 */     partitionIndex = index;
   /* 028 */     this.inputs = inputs;
   /* 029 */     smj_leftInput_0 = inputs[0];
   /* 030 */     smj_rightInput_0 = inputs[1];
   /* 031 */
   /* 032 */     smj_leftBuffer_0 = new java.util.ArrayList<InternalRow>();
   /* 033 */     smj_rightBuffer_0 = new java.util.ArrayList<InternalRow>();
   /* 034 */     smj_leftMatched_0 = new 
org.apache.spark.util.collection.BitSet(1);
   /* 035 */     smj_rightMatched_0 = new 
org.apache.spark.util.collection.BitSet(1);
   /* 036 */     smj_mutableStateArray_0[0] = new 
org.apache.spark.sql.catalyst.expressions.codegen.UnsafeRowWriter(3, 0);
   /* 037 */
   /* 038 */   }
   /* 039 */
   /* 040 */   private void smj_consumeFullOuterJoinRow_0() throws 
java.io.IOException {
   /* 041 */     ((org.apache.spark.sql.execution.metric.SQLMetric) 
references[0] /* numOutputRows */).add(1);
   /* 042 */
   /* 043 */     boolean smj_isNull_9 = true;
   /* 044 */     long smj_value_10 = -1L;
   /* 045 */     if (smj_leftOutputRow_0 != null) {
   /* 046 */       long smj_value_9 = smj_leftOutputRow_0.getLong(0);
   /* 047 */       smj_isNull_9 = false;
   /* 048 */       smj_value_10 = smj_value_9;
   /* 049 */     }
   /* 050 */     boolean smj_isNull_11 = true;
   /* 051 */     long smj_value_12 = -1L;
   /* 052 */     if (smj_leftOutputRow_0 != null) {
   /* 053 */       long smj_value_11 = smj_leftOutputRow_0.getLong(1);
   /* 054 */       smj_isNull_11 = false;
   /* 055 */       smj_value_12 = smj_value_11;
   /* 056 */     }
   /* 057 */     boolean smj_isNull_13 = true;
   /* 058 */     long smj_value_14 = -1L;
   /* 059 */     if (smj_rightOutputRow_0 != null) {
   /* 060 */       long smj_value_13 = smj_rightOutputRow_0.getLong(0);
   /* 061 */       smj_isNull_13 = false;
   /* 062 */       smj_value_14 = smj_value_13;
   /* 063 */     }
   /* 064 */     smj_mutableStateArray_0[0].reset();
   /* 065 */
   /* 066 */     smj_mutableStateArray_0[0].zeroOutNullBytes();
   /* 067 */
   /* 068 */     if (smj_isNull_9) {
   /* 069 */       smj_mutableStateArray_0[0].setNullAt(0);
   /* 070 */     } else {
   /* 071 */       smj_mutableStateArray_0[0].write(0, smj_value_10);
   /* 072 */     }
   /* 073 */
   /* 074 */     if (smj_isNull_11) {
   /* 075 */       smj_mutableStateArray_0[0].setNullAt(1);
   /* 076 */     } else {
   /* 077 */       smj_mutableStateArray_0[0].write(1, smj_value_12);
   /* 078 */     }
   /* 079 */
   /* 080 */     if (smj_isNull_13) {
   /* 081 */       smj_mutableStateArray_0[0].setNullAt(2);
   /* 082 */     } else {
   /* 083 */       smj_mutableStateArray_0[0].write(2, smj_value_14);
   /* 084 */     }
   /* 085 */     append((smj_mutableStateArray_0[0].getRow()).copy());
   /* 086 */
   /* 087 */   }
         // Method wholestagecodegen_findNextJoinRows_0
   /* 220 */
   /* 221 */   protected void processNext() throws java.io.IOException {
   /* 222 */     while ((smj_leftInputRow_0 != null || 
smj_leftInput_0.hasNext()) &&
   /* 223 */       (smj_rightInputRow_0 != null || smj_rightInput_0.hasNext())) 
{
   /* 224 */       wholestagecodegen_findNextJoinRows_0(smj_leftInput_0, 
smj_rightInput_0);
   /* 225 */
   /* 226 */       int smj_leftIndex_0;
   /* 227 */       int smj_rightIndex_0;
   /* 228 */
   /* 229 */       for (smj_leftIndex_0 = 0; smj_leftIndex_0 < 
smj_leftBuffer_0.size(); smj_leftIndex_0++) {
   /* 230 */         smj_leftOutputRow_0 = (InternalRow) 
smj_leftBuffer_0.get(smj_leftIndex_0);
   /* 231 */         for (smj_rightIndex_0 = 0; smj_rightIndex_0 < 
smj_rightBuffer_0.size(); smj_rightIndex_0++) {
   /* 232 */           smj_rightOutputRow_0 = (InternalRow) 
smj_rightBuffer_0.get(smj_rightIndex_0);
   /* 233 */
         // Codegen conditionCheck start
   /* 234 */           long smj_value_15 = smj_rightOutputRow_0.getLong(0);  // 
Codegen for k2#6L
   /* 235 */
         // Variable k1_2#35L will be evaluate at line 239, 258, 53 for three 
time.
         // CodeGen for expression: NOT ((k1_2#35L + 3) = k2#6L), evaluate 
k1_2#35L first time.
   /* 236 */           boolean smj_isNull_11 = true;
   /* 237 */           long smj_value_12 = -1L;
   /* 238 */           if (smj_leftOutputRow_0 != null) {
   /* 239 */             long smj_value_11 = smj_leftOutputRow_0.getLong(1); // 
Codegen for k1_2#35L
   /* 240 */             smj_isNull_11 = false;
   /* 241 */             smj_value_12 = smj_value_11;
   /* 242 */           }
   /* 243 */
   /* 244 */           long smj_value_19 = -1L;
   /* 245 */
   /* 246 */           smj_value_19 = smj_value_12 + 3L;    // Codegen for 
k1_2#35L + 3
   /* 247 */
   /* 248 */           boolean smj_value_18 = false;
   /* 249 */           smj_value_18 = smj_value_19 == smj_value_15;
   /* 250 */           boolean smj_value_17 = false;
   /* 251 */           smj_value_17 = !(smj_value_18);
   /* 252 */           boolean smj_value_16 = false;
   /* 253 */
         // CodeGen for expression: NOT ((k1_2#35L + 5) = k2#6L), evaluate 
k1_2#35L again, throw "Redefinition of local variable "smj_isNull_11" " 
exception
   /* 254 */           if (smj_value_17) {
   /* 255 */             boolean smj_isNull_11 = true;
   /* 256 */             long smj_value_12 = -1L;
   /* 257 */             if (smj_leftOutputRow_0 != null) {
   /* 258 */               long smj_value_11 = smj_leftOutputRow_0.getLong(1);  
 // Codegen for k1_2#35L
   /* 259 */               smj_isNull_11 = false;
   /* 260 */               smj_value_12 = smj_value_11;
   /* 261 */             }
   /* 262 */
   /* 263 */             long smj_value_25 = -1L;
   /* 264 */
   /* 265 */             smj_value_25 = smj_value_12 + 5L;  // Codegen for 
k1_2#35L + 5
   /* 266 */
   /* 267 */             boolean smj_value_24 = false;
   /* 268 */             smj_value_24 = smj_value_25 == smj_value_15;
   /* 269 */             boolean smj_value_23 = false;
   /* 270 */             smj_value_23 = !(smj_value_24);
   /* 271 */             smj_value_16 = smj_value_23;
   /* 272 */           }
   /* 273 */           if (!(false || !smj_value_16))
         // Codegen conditionCheck end
   /* 274 */           {
   /* 275 */             smj_consumeFullOuterJoinRow_0();
   /* 276 */             smj_leftMatched_0.set(smj_leftIndex_0);
   /* 277 */             smj_rightMatched_0.set(smj_rightIndex_0);
   /* 278 */           }
   /* 279 */         }
   /* 280 */
   /* 281 */         if (!smj_leftMatched_0.get(smj_leftIndex_0)) {
   /* 282 */           smj_rightOutputRow_0 = null;
   /* 283 */           smj_consumeFullOuterJoinRow_0();
   /* 284 */         }
   /* 285 */       }
   /* 286 */
   /* 287 */       smj_leftOutputRow_0 = null;
   /* 288 */       for (smj_rightIndex_0 = 0; smj_rightIndex_0 < 
smj_rightBuffer_0.size(); smj_rightIndex_0++) {
   /* 289 */         if (!smj_rightMatched_0.get(smj_rightIndex_0)) {
   /* 290 */           // The right row has never matched any left row, join it 
with null row
   /* 291 */           smj_rightOutputRow_0 = (InternalRow) 
smj_rightBuffer_0.get(smj_rightIndex_0);
   /* 292 */           smj_consumeFullOuterJoinRow_0();
   /* 293 */         }
   /* 294 */       }
   /* 295 */
   /* 296 */       if (shouldStop()) return;
   /* 297 */     }
   /* 298 */
   /* 299 */     // The right iterator has no more rows, join left row with null
   /* 300 */     while (smj_leftInputRow_0 != null || 
smj_leftInput_0.hasNext()) {
   /* 301 */       if (smj_leftInputRow_0 == null) {
   /* 302 */         smj_leftInputRow_0 = (InternalRow) smj_leftInput_0.next();
   /* 303 */       }
   /* 304 */
   /* 305 */       smj_leftOutputRow_0 = smj_leftInputRow_0;
   /* 306 */       smj_rightOutputRow_0 = null;
   /* 307 */       smj_leftInputRow_0 = null;
   /* 308 */       smj_consumeFullOuterJoinRow_0();
   /* 309 */
   /* 310 */       if (shouldStop()) return;
   /* 311 */     }
   /* 312 */
   /* 313 */     // The left iterator has no more rows, join right row with null
   /* 314 */     while (smj_rightInputRow_0 != null || 
smj_rightInput_0.hasNext()) {
   /* 315 */       if (smj_rightInputRow_0 == null) {
   /* 316 */         smj_rightInputRow_0 = (InternalRow) 
smj_rightInput_0.next();
   /* 317 */       }
   /* 318 */
   /* 319 */       smj_rightOutputRow_0 = smj_rightInputRow_0;
   /* 320 */       smj_leftOutputRow_0 = null;
   /* 321 */       smj_rightInputRow_0 = null;
   /* 322 */       smj_consumeFullOuterJoinRow_0();
   /* 323 */
   /* 324 */       if (shouldStop()) return;
   /* 325 */     }
   /* 326 */   }
   /* 327 */
   /* 328 */ }
   ```
   
   After this PR,  the generate code will be line 233 to line 264
   ```java
   /* 001 */ public Object generate(Object[] references) {
   /* 002 */   return new GeneratedIteratorForCodegenStage5(references);
   /* 003 */ }
   /* 004 */
   /* 005 */ // codegenStageId=5
   /* 006 */ final class GeneratedIteratorForCodegenStage5 extends 
org.apache.spark.sql.execution.BufferedRowIterator {
   /* 007 */   private Object[] references;
   /* 008 */   private scala.collection.Iterator[] inputs;
   /* 009 */   private scala.collection.Iterator smj_leftInput_0;
   /* 010 */   private scala.collection.Iterator smj_rightInput_0;
   /* 011 */   private InternalRow smj_leftInputRow_0;
   /* 012 */   private InternalRow smj_rightInputRow_0;
   /* 013 */   private long smj_value_4;
   /* 014 */   private InternalRow smj_leftOutputRow_0;
   /* 015 */   private InternalRow smj_rightOutputRow_0;
   /* 016 */   private java.util.ArrayList<InternalRow> smj_leftBuffer_0;
   /* 017 */   private java.util.ArrayList<InternalRow> smj_rightBuffer_0;
   /* 018 */   private org.apache.spark.util.collection.BitSet 
smj_leftMatched_0;
   /* 019 */   private org.apache.spark.util.collection.BitSet 
smj_rightMatched_0;
   /* 020 */   private 
org.apache.spark.sql.catalyst.expressions.codegen.UnsafeRowWriter[] 
smj_mutableStateArray_0 = new 
org.apache.spark.sql.catalyst.expressions.codegen.UnsafeRowWriter[1];
   /* 021 */
   /* 022 */   public GeneratedIteratorForCodegenStage5(Object[] references) {
   /* 023 */     this.references = references;
   /* 024 */   }
   /* 025 */
   /* 026 */   public void init(int index, scala.collection.Iterator[] inputs) {
   /* 027 */     partitionIndex = index;
   /* 028 */     this.inputs = inputs;
   /* 029 */     smj_leftInput_0 = inputs[0];
   /* 030 */     smj_rightInput_0 = inputs[1];
   /* 031 */
   /* 032 */     smj_leftBuffer_0 = new java.util.ArrayList<InternalRow>();
   /* 033 */     smj_rightBuffer_0 = new java.util.ArrayList<InternalRow>();
   /* 034 */     smj_leftMatched_0 = new 
org.apache.spark.util.collection.BitSet(1);
   /* 035 */     smj_rightMatched_0 = new 
org.apache.spark.util.collection.BitSet(1);
   /* 036 */     smj_mutableStateArray_0[0] = new 
org.apache.spark.sql.catalyst.expressions.codegen.UnsafeRowWriter(3, 0);
   /* 037 */
   /* 038 */   }
   /* 039 */
   /* 040 */   private void smj_consumeFullOuterJoinRow_0() throws 
java.io.IOException {
   /* 041 */     ((org.apache.spark.sql.execution.metric.SQLMetric) 
references[0] /* numOutputRows */).add(1);
   /* 042 */
   /* 043 */     boolean smj_isNull_9 = true;
   /* 044 */     long smj_value_10 = -1L;
   /* 045 */     if (smj_leftOutputRow_0 != null) {
   /* 046 */       long smj_value_9 = smj_leftOutputRow_0.getLong(0);
   /* 047 */       smj_isNull_9 = false;
   /* 048 */       smj_value_10 = smj_value_9;
   /* 049 */     }
   /* 050 */     boolean smj_isNull_11 = true;
   /* 051 */     long smj_value_12 = -1L;
   /* 052 */     if (smj_leftOutputRow_0 != null) {
   /* 053 */       long smj_value_11 = smj_leftOutputRow_0.getLong(1);
   /* 054 */       smj_isNull_11 = false;
   /* 055 */       smj_value_12 = smj_value_11;
   /* 056 */     }
   /* 057 */     boolean smj_isNull_13 = true;
   /* 058 */     long smj_value_14 = -1L;
   /* 059 */     if (smj_rightOutputRow_0 != null) {
   /* 060 */       long smj_value_13 = smj_rightOutputRow_0.getLong(0);
   /* 061 */       smj_isNull_13 = false;
   /* 062 */       smj_value_14 = smj_value_13;
   /* 063 */     }
   /* 064 */     smj_mutableStateArray_0[0].reset();
   /* 065 */
   /* 066 */     smj_mutableStateArray_0[0].zeroOutNullBytes();
   /* 067 */
   /* 068 */     if (smj_isNull_9) {
   /* 069 */       smj_mutableStateArray_0[0].setNullAt(0);
   /* 070 */     } else {
   /* 071 */       smj_mutableStateArray_0[0].write(0, smj_value_10);
   /* 072 */     }
   /* 073 */
   /* 074 */     if (smj_isNull_11) {
   /* 075 */       smj_mutableStateArray_0[0].setNullAt(1);
   /* 076 */     } else {
   /* 077 */       smj_mutableStateArray_0[0].write(1, smj_value_12);
   /* 078 */     }
   /* 079 */
   /* 080 */     if (smj_isNull_13) {
   /* 081 */       smj_mutableStateArray_0[0].setNullAt(2);
   /* 082 */     } else {
   /* 083 */       smj_mutableStateArray_0[0].write(2, smj_value_14);
   /* 084 */     }
   /* 085 */     append((smj_mutableStateArray_0[0].getRow()).copy());
   /* 086 */
   /* 087 */   }
         // Method wholestagecodegen_findNextJoinRows_0
   /* 220 */
   /* 221 */   protected void processNext() throws java.io.IOException {
   /* 222 */     while ((smj_leftInputRow_0 != null || 
smj_leftInput_0.hasNext()) &&
   /* 223 */       (smj_rightInputRow_0 != null || smj_rightInput_0.hasNext())) 
{
                   // Find next join rows, which will be consumed later.
   /* 224 */       wholestagecodegen_findNextJoinRows_0(smj_leftInput_0, 
smj_rightInput_0);
   /* 225 */
   /* 226 */       int smj_leftIndex_0;
   /* 227 */       int smj_rightIndex_0;
   /* 228 */
   /* 229 */       for (smj_leftIndex_0 = 0; smj_leftIndex_0 < 
smj_leftBuffer_0.size(); smj_leftIndex_0++) {
   /* 230 */         smj_leftOutputRow_0 = (InternalRow) 
smj_leftBuffer_0.get(smj_leftIndex_0);
   /* 231 */         for (smj_rightIndex_0 = 0; smj_rightIndex_0 < 
smj_rightBuffer_0.size(); smj_rightIndex_0++) {
   /* 232 */           smj_rightOutputRow_0 = (InternalRow) 
smj_rightBuffer_0.get(smj_rightIndex_0);
         // Codegen conditionCheck start
         // Begin evaluate the variable k1_2#35L in the left side. 
         // We can not use the tool evaluateVariables method, because variable 
k1_2#35L will be evaluate again in smj_consumeFullOuterJoinRow_0(), see line #53
   /* 233 */           boolean smj_isNull_11 = true;
   /* 234 */           long smj_value_12 = -1L;
   /* 235 */           if (smj_leftOutputRow_0 != null) {
   /* 236 */             long smj_value_11 = smj_leftOutputRow_0.getLong(1);   
// Codegen for k1_2#35L
   /* 237 */             smj_isNull_11 = false;
   /* 238 */             smj_value_12 = smj_value_11;
   /* 239 */           }
         // Spark code: getJoinCondition(ctx, leftResultVars.map(_.copy(code = 
EmptyBlock)), left, right, Some(rightOutputRow))
         // To avoid evaluate the variables again, set the code of the 
variables to EmptyBlock
         // CodeGen for expression: NOT ((k1_2#35L + 3) = k2#6L)
   /* 240 */
   /* 241 */           long smj_value_15 = smj_rightOutputRow_0.getLong(0);    
// Codegen for k2#6L
   /* 242 */
   /* 243 */           long smj_value_19 = -1L;
   /* 244 */
   /* 245 */           smj_value_19 = smj_value_12 + 3L;    // Codegen for 
k1_2#35L + 3
   /* 246 */
   /* 247 */           boolean smj_value_18 = false;
   /* 248 */           smj_value_18 = smj_value_19 == smj_value_15;
   /* 249 */           boolean smj_value_17 = false;
   /* 250 */           smj_value_17 = !(smj_value_18);
   /* 251 */           boolean smj_value_16 = false;
   /* 252 */
         // CodeGen for expression: NOT ((k1_2#35L + 5) = k2#6L)
   /* 253 */           if (smj_value_17) {
   /* 254 */             long smj_value_25 = -1L;
   /* 255 */
   /* 256 */             smj_value_25 = smj_value_12 + 5L;    // Codegen for 
k1_2#35L + 5
   /* 257 */
   /* 258 */             boolean smj_value_24 = false;
   /* 259 */             smj_value_24 = smj_value_25 == smj_value_15;
   /* 260 */             boolean smj_value_23 = false;
   /* 261 */             smj_value_23 = !(smj_value_24);
   /* 262 */             smj_value_16 = smj_value_23;
   /* 263 */           }
   /* 264 */           if (!(false || !smj_value_16))
         // Codegen conditionCheck end
   /* 265 */
   /* 266 */           {
   /* 267 */             smj_consumeFullOuterJoinRow_0();
   /* 268 */             smj_leftMatched_0.set(smj_leftIndex_0);
   /* 269 */             smj_rightMatched_0.set(smj_rightIndex_0);
   /* 270 */           }
   /* 271 */         }
   /* 272 */
   /* 273 */         if (!smj_leftMatched_0.get(smj_leftIndex_0)) {
   /* 274 */           smj_rightOutputRow_0 = null;
   /* 275 */           smj_consumeFullOuterJoinRow_0();
   /* 276 */         }
   /* 277 */       }
   /* 278 */
   /* 279 */       smj_leftOutputRow_0 = null;
   /* 280 */       for (smj_rightIndex_0 = 0; smj_rightIndex_0 < 
smj_rightBuffer_0.size(); smj_rightIndex_0++) {
   /* 281 */         if (!smj_rightMatched_0.get(smj_rightIndex_0)) {
   /* 282 */           // The right row has never matched any left row, join it 
with null row
   /* 283 */           smj_rightOutputRow_0 = (InternalRow) 
smj_rightBuffer_0.get(smj_rightIndex_0);
   /* 284 */           smj_consumeFullOuterJoinRow_0();
   /* 285 */         }
   /* 286 */       }
   /* 287 */
   /* 288 */       if (shouldStop()) return;
   /* 289 */     }
   /* 290 */
   /* 291 */     // The right iterator has no more rows, join left row with null
   /* 292 */     while (smj_leftInputRow_0 != null || 
smj_leftInput_0.hasNext()) {
   /* 293 */       if (smj_leftInputRow_0 == null) {
   /* 294 */         smj_leftInputRow_0 = (InternalRow) smj_leftInput_0.next();
   /* 295 */       }
   /* 296 */
   /* 297 */       smj_leftOutputRow_0 = smj_leftInputRow_0;
   /* 298 */       smj_rightOutputRow_0 = null;
   /* 299 */       smj_leftInputRow_0 = null;
   /* 300 */       smj_consumeFullOuterJoinRow_0();
   /* 301 */
   /* 302 */       if (shouldStop()) return;
   /* 303 */     }
   /* 304 */
   /* 305 */     // The left iterator has no more rows, join right row with null
   /* 306 */     while (smj_rightInputRow_0 != null || 
smj_rightInput_0.hasNext()) {
   /* 307 */       if (smj_rightInputRow_0 == null) {
   /* 308 */         smj_rightInputRow_0 = (InternalRow) 
smj_rightInput_0.next();
   /* 309 */       }
   /* 310 */
   /* 311 */       smj_rightOutputRow_0 = smj_rightInputRow_0;
   /* 312 */       smj_leftOutputRow_0 = null;
   /* 313 */       smj_rightInputRow_0 = null;
   /* 314 */       smj_consumeFullOuterJoinRow_0();
   /* 315 */
   /* 316 */       if (shouldStop()) return;
   /* 317 */     }
   /* 318 */   }
   /* 319 */
   /* 320 */ }
   ```



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to