code: func (p *LogicalSelection) PredicatePushDown(predicates []expression.Expression) ([]expression.Expression, LogicalPlan) {
  	canBePushDown, canNotBePushDown := splitSetGetVarFunc(p.Conditions)
  	retConditions, child := p.children[0].PredicatePushDown(append(canBePushDown, predicates...))
  	retConditions = append(retConditions, canNotBePushDown...)
  	if len(retConditions) > 0 {
  		p.Conditions = expression.PropagateConstant(p.ctx, retConditions)
  		// Return table dual when filter is constant false or null.
  		dual := conds2TableDual(p, p.Conditions)
  		if dual != nil {
  			return nil, dual
  		}
  		return nil, p
  	}
  	return nil, child
  }
docs: // PredicatePushDown implements LogicalPlan PredicatePushDown interface.