functions.go 624 B

12345678910111213141516171819202122232425262728293031
  1. package xsql
  2. import (
  3. "math"
  4. "strings"
  5. )
  6. type FunctionValuer struct{}
  7. var _ CallValuer = FunctionValuer{}
  8. func (FunctionValuer) Value(key string) (interface{}, bool) {
  9. return nil, false
  10. }
  11. func (FunctionValuer) Call(name string, args []interface{}) (interface{}, bool) {
  12. lowerName := strings.ToLower(name)
  13. switch lowerName {
  14. case "round":
  15. arg0 := args[0].(float64)
  16. return math.Round(arg0), true
  17. case "abs":
  18. arg0 := args[0].(float64)
  19. return math.Abs(arg0), true
  20. case "pow":
  21. arg0, arg1 := args[0].(float64), args[1].(int64)
  22. return math.Pow(arg0, float64(arg1)), true
  23. default:
  24. return nil, false
  25. }
  26. }