util.go 994 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. package planner
  2. import "github.com/emqx/kuiper/xsql"
  3. func getRefSources(node xsql.Node) []string {
  4. result := make(map[string]bool)
  5. keys := make([]string, 0, len(result))
  6. if node == nil {
  7. return keys
  8. }
  9. xsql.WalkFunc(node, func(n xsql.Node) {
  10. if f, ok := n.(*xsql.FieldRef); ok {
  11. result[string(f.StreamName)] = true
  12. }
  13. })
  14. for k := range result {
  15. keys = append(keys, k)
  16. }
  17. return keys
  18. }
  19. func combine(l xsql.Expr, r xsql.Expr) xsql.Expr {
  20. if l != nil && r != nil {
  21. return &xsql.BinaryExpr{
  22. OP: xsql.AND,
  23. LHS: l,
  24. RHS: r,
  25. }
  26. } else if l != nil {
  27. return l
  28. } else {
  29. return r
  30. }
  31. }
  32. func getFields(node xsql.Node) []xsql.Expr {
  33. result := make([]xsql.Expr, 0)
  34. xsql.WalkFunc(node, func(n xsql.Node) {
  35. switch t := n.(type) {
  36. case *xsql.FieldRef:
  37. result = append(result, t)
  38. case *xsql.Wildcard:
  39. result = append(result, t)
  40. case *xsql.MetaRef:
  41. result = append(result, t)
  42. case *xsql.SortField:
  43. result = append(result, t)
  44. }
  45. })
  46. return result
  47. }