liutang123 commented on code in PR #69921:
URL: https://github.com/apache/doris/pull/69921#discussion_r4453745650


##########
fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/OrToIn.java:
##########
@@ -241,12 +250,105 @@ private boolean independentConjunct(int idx, 
List<Expression> conjuncts) {
         return true;
     }
 
+    /**
+     * Whether conjuncts.get(idx) may contribute an "X = literal" / "X IN 
(literals)" candidate.
+     *
+     * Replace mode may substitute the inferred In-predicate for the original 
OR, so it keeps the
+     * historical requirement that the candidate does not share input slots 
with sibling conjuncts.
+     *
+     * Extract mode never drops the original OR, it only appends "X IN (union 
of literals)". When X is a
+     * plain slot (deterministic, evaluated once per row), every disjunct 
implies its own top-level
+     * "X = c" / "X IN (...)", so the whole OR implies "X IN (union)" no 
matter whether X is also
+     * referenced by sibling conjuncts. Under three-valued logic "X IN (union) 
AND or" is equivalent to
+     * "or": or=TRUE implies X IN (union)=TRUE, and X IN (union)=FALSE implies 
every disjunct is FALSE.
+     * A typical shape where the independence check blocks a useful pushdown:
+     *   (spm='a' AND ...) OR (... AND spm IN ('c','d') AND ((spm='c' AND ...) 
OR (spm='d' AND ...)))
+     * Here "spm IN ('c','d')" was inferred from the inner OR, which is kept 
and still references spm.
+     *
+     * Config.enable_or_to_in_shared_slot_inference is the rollback switch of 
exactly this relaxation:
+     * when it is false, every conjunct goes through independentConjunct() as 
before.
+     */
+    private boolean isCandidateConjunct(int idx, List<Expression> conjuncts) {
+        if (mode == Mode.extractMode && 
Config.enable_or_to_in_shared_slot_inference
+                && isSlotCompareWithLiterals(conjuncts.get(idx))) {

Review Comment:
   done



-- 
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