code: func (p *LogicalProjection) tryToGetChildProp(prop *property.PhysicalProperty) (*property.PhysicalProperty, bool) {
  	newProp := &property.PhysicalProperty{TaskTp: property.RootTaskType, ExpectedCnt: prop.ExpectedCnt}
  	newCols := make([]property.Item, 0, len(prop.Items))
  	for _, col := range prop.Items {
  		idx := p.schema.ColumnIndex(col.Col)
  		switch expr := p.Exprs[idx].(type) {
  		case *expression.Column:
  			newCols = append(newCols, property.Item{Col: expr, Desc: col.Desc})
  		case *expression.ScalarFunction:
  			return nil, false
  		}
  	}
  	newProp.Items = newCols
  	return newProp, true
  }
docs: // tryToGetChildProp will check if this sort property can be pushed or not.
  // When a sort column will be replaced by scalar function, we refuse it.
  // When a sort column will be replaced by a constant, we just remove it.