countPlusOne.go 641 B

123456789101112131415161718192021222324252627282930
  1. package main
  2. import (
  3. "fmt"
  4. "github.com/emqx/kuiper/xstream/api"
  5. )
  6. type countPlusOneFunc struct {
  7. }
  8. func (f *countPlusOneFunc) Validate(args []interface{}) error {
  9. if len(args) != 1 {
  10. return fmt.Errorf("countPlusOne function only supports 1 parameter but got %d", len(args))
  11. }
  12. return nil
  13. }
  14. func (f *countPlusOneFunc) Exec(args []interface{}, _ api.FunctionContext) (interface{}, bool) {
  15. arg, ok := args[0].([]interface{})
  16. if !ok {
  17. return fmt.Errorf("arg is not a slice, got %v", args[0]), false
  18. }
  19. return len(arg) + 1, true
  20. }
  21. func (f *countPlusOneFunc) IsAggregate() bool {
  22. return true
  23. }
  24. var CountPlusOne countPlusOneFunc