code: func (p *baseLogicalPlan) PredicatePushDown(predicates []expression.Expression) ([]expression.Expression, LogicalPlan, error) {
  	if len(p.GetChildren()) == 0 {
  		return predicates, p.self, nil
  	}
  	child := p.GetChildByIndex(0).(LogicalPlan)
  	rest, _, err := child.PredicatePushDown(predicates)
  	if err != nil {
  		return nil, nil, errors.Trace(err)
  	}
  	if len(rest) > 0 {
  		err = addSelection(p, child, rest, p.allocator)
  		if err != nil {
  			return nil, nil, errors.Trace(err)
  		}
  	}
  	return nil, p.self, nil
  }
docs: // PredicatePushDown implements LogicalPlan interface.