Class PushDistinctFilterBelowFilterRule


  • public class PushDistinctFilterBelowFilterRule
    extends PlannerRule<RecordQueryUnorderedPrimaryKeyDistinctPlan>
    A rule that moves a RecordQueryUnorderedPrimaryKeyDistinctPlan below a RecordQueryFilterPlan. While this doesn't make a difference in terms of plan semantics it ensures that the generated plans have the same form as those produced by the RecordQueryPlanner.
     
         +----------------------------------------------+             +----------------------------------+
         |                                              |             |                                  |
         |  RecordQueryUnorderedPrimaryKeyDistinctPlan  |             |  RecordQueryPredicateFilterPlan  |
         |                                              |             |                           pred'  |
         +---------------------+------------------------+             |                                  |
                               |                                      +---------------+------------------+
                               |                        +----->                       |
                               |                                                      | newQun
               +---------------+------------------+                                   |
               |                                  |             +---------------------+------------------------+
               |  RecordQueryPredicateFilterPlan  |             |                                              |
               |                            pred  |             |  RecordQueryUnorderedPrimaryKeyDistinctPlan  |
               |                                  |             |                                              |
               +---------------+------------------+             +---------------------+------------------------+
                               |                                                    /
                               | qun                                               /
                               |                                                  /
                        +------+------+                                          /
                        |             |                                         /
                        |   any ref   | ---------------------------------------+
                        |             |
                        +-------------+
     
     
    where pred' is rebased along the translation from qun to newQun.