util.go 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  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 && f.StreamName != "" {
  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. if t.StreamName != "" {
  38. result = append(result, t)
  39. }
  40. case *xsql.Wildcard:
  41. result = append(result, t)
  42. case *xsql.MetaRef:
  43. if t.StreamName != "" {
  44. result = append(result, t)
  45. }
  46. case *xsql.SortField:
  47. result = append(result, t)
  48. }
  49. })
  50. return result
  51. }