Implement heuristic CE for FilterNode that contains a Boolean path expression of comparison operations. Boolean expressions inside a FilterNode are expressed via PathComposeM (AND), and PathComposeA (OR) nodes. This task should implement a transport that walks such path expression trees, and:
- given an atomic comparison predicate uses Heuristic CE,
- given a conjunction/disjunction applies exponential backoff estimation via bottom-up recursion.
This one example of a disjunction:
Query: {$or: [{a0: {$gt:44}}, {a0: {$lt: 9}}]} Root [] | | projections: | | scan_0 | RefBlock: | Variable [scan_0] Filter [] | EvalFilter [] | | Variable [scan_0] | PathComposeA [] | | PathGet [a0] | | PathTraverse [] | | PathComposeM [] | | | PathCompare [Gte] | | | Const [nan] | | PathCompare [Lt] | | Const [9] | PathGet [a0] | PathTraverse [] | PathComposeM [] | | PathCompare [Lt] | | Const [""] | PathCompare [Gt] | Const [44] Scan [test] BindBlock: [scan_0] Source []
This an example of more complex conjunction:
Query: {$and : [{$or : [ {a0 : {$gt : 11}}, {a0 : {$lt : 44}} ]},{$or : [ {a0 : {$gt : 77}}, {a0 : {$eq : 51}} ]}]} Initial ABT: Root [] | | projections: | | scan_0 | RefBlock: | Variable [scan_0] Filter [] | EvalFilter [] | | Variable [scan_0] | PathComposeA [] | | PathGet [a0] | | PathTraverse [] | | PathCompare [Eq] | | Const [51] | PathGet [a0] | PathTraverse [] | PathComposeM [] | | PathCompare [Lt] | | Const [""] | PathCompare [Gt] | Const [77] Filter [] | EvalFilter [] | | Variable [scan_0] | PathComposeA [] | | PathGet [a0] | | PathTraverse [] | | PathComposeM [] | | | PathCompare [Gte] | | | Const [nan] | | PathCompare [Lt] | | Const [44] | PathGet [a0] | PathTraverse [] | PathComposeM [] | | PathCompare [Lt] | | Const [""] | PathCompare [Gt] | Const [11] Scan [test] BindBlock: [scan_0] Source []
- is duplicated by
-
SERVER-67774 Heuristic CE for FilterNode with a single comparison predicate
-
- Closed
-