code: func (p *Selection) PredicatePushDown(predicates []expression.Expression) ([]expression.Expression, LogicalPlan, error) {
  	retConditions, child, err := p.GetChildByIndex(0).(LogicalPlan).PredicatePushDown(append(p.Conditions, predicates...))
  	if err != nil {
  		return nil, nil, errors.Trace(err)
  	}
  	if len(retConditions) > 0 {
  		p.Conditions = expression.PropagateConstant(p.ctx, retConditions)
  		return nil, p, nil
  	}
  	err = RemovePlan(p)
  	if err != nil {
  		return nil, nil, errors.Trace(err)
  	}
  	return nil, child, nil
  }
docs: // PredicatePushDown implements LogicalPlan PredicatePushDown interface.