order_operator.go 712 B

12345678910111213141516171819202122232425262728293031
  1. package plans
  2. import (
  3. "context"
  4. "engine/common"
  5. "engine/xsql"
  6. )
  7. type OrderPlan struct {
  8. SortFields xsql.SortFields
  9. }
  10. /**
  11. * input: *xsql.Tuple from preprocessor | xsql.WindowTuplesSet from windowOp | xsql.JoinTupleSets from joinOp
  12. * output: *xsql.Tuple | xsql.WindowTuplesSet | xsql.JoinTupleSets
  13. */
  14. func (p *OrderPlan) Apply(ctx context.Context, data interface{}) interface{} {
  15. log := common.GetLogger(ctx)
  16. log.Debugf("order plan receive %s", data)
  17. sorter := xsql.OrderedBy(p.SortFields)
  18. switch input := data.(type) {
  19. case xsql.Valuer:
  20. return input
  21. case xsql.SortingData:
  22. sorter.Sort(input)
  23. return input
  24. default:
  25. log.Errorf("Expect xsql.Valuer or its array type.")
  26. return nil
  27. }
  28. }