[fix](nereids) collect all correlated slots from subquery in correct way (#30908)
This commit is contained in:
@ -17,10 +17,8 @@
|
||||
|
||||
package org.apache.doris.nereids.util;
|
||||
|
||||
import org.apache.doris.nereids.exceptions.AnalysisException;
|
||||
import org.apache.doris.nereids.trees.expressions.Cast;
|
||||
import org.apache.doris.nereids.trees.expressions.Expression;
|
||||
import org.apache.doris.nereids.trees.expressions.Not;
|
||||
import org.apache.doris.nereids.trees.expressions.SlotReference;
|
||||
import org.apache.doris.nereids.trees.expressions.shape.BinaryExpression;
|
||||
|
||||
@ -167,23 +165,8 @@ public class Utils {
|
||||
*/
|
||||
public static List<Expression> getCorrelatedSlots(List<Expression> correlatedPredicates,
|
||||
List<Expression> correlatedSlots) {
|
||||
List<Expression> slots = new ArrayList<>();
|
||||
correlatedPredicates.forEach(predicate -> {
|
||||
if (!(predicate instanceof BinaryExpression)
|
||||
&& (!(predicate instanceof Not) || !(predicate.child(0) instanceof BinaryExpression))) {
|
||||
throw new AnalysisException("Unsupported correlated subquery with"
|
||||
+ " non-equals correlated predicate " + predicate.toSql());
|
||||
}
|
||||
|
||||
BinaryExpression binaryExpression;
|
||||
if (predicate instanceof Not) {
|
||||
binaryExpression = (BinaryExpression) ((Not) predicate).child();
|
||||
} else {
|
||||
binaryExpression = (BinaryExpression) predicate;
|
||||
}
|
||||
slots.addAll(collectCorrelatedSlotsFromChildren(binaryExpression, correlatedSlots));
|
||||
});
|
||||
return slots;
|
||||
return ExpressionUtils.getInputSlotSet(correlatedPredicates).stream()
|
||||
.filter(slot -> !correlatedSlots.contains(slot)).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
private static List<Expression> collectCorrelatedSlotsFromChildren(
|
||||
|
||||
Reference in New Issue
Block a user