code: func (sf *ScalarFunction) Clone() Expression {
  	newArgs := make([]Expression, 0, len(sf.GetArgs()))
  	for _, arg := range sf.GetArgs() {
  		newArgs = append(newArgs, arg.Clone())
  	}
  	switch v := sf.Function.(type) {
  	case *builtinCastSig:
  		return NewCastFunc(v.tp, newArgs[0], sf.GetCtx())
  	case *builtinValuesSig:
  		return NewValuesFunc(v.offset, sf.GetType(), sf.GetCtx())
  	}
  	newFunc, _ := NewFunction(sf.GetCtx(), sf.FuncName.L, sf.RetType, newArgs...)
  	return newFunc
  }
docs: // Clone implements Expression interface.