match_recognize.h 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. #pragma once
  2. #include "node.h"
  3. #include <yql/essentials/core/sql_types/match_recognize.h>
  4. #include <util/generic/ptr.h>
  5. namespace NSQLTranslationV1 {
  6. struct TNamedFunction {
  7. TNodePtr Callable;
  8. TString Name;
  9. };
  10. class TMatchRecognizeBuilder: public TSimpleRefCount<TMatchRecognizeBuilder> {
  11. public:
  12. TMatchRecognizeBuilder(
  13. TPosition pos,
  14. TNodePtr partitionKeySelector,
  15. TNodePtr partitionColumns,
  16. TVector<TSortSpecificationPtr> sortSpecs,
  17. TVector<TNamedFunction> measures,
  18. TNodePtr rowsPerMatch,
  19. TNodePtr skipTo,
  20. TNodePtr pattern,
  21. TNodePtr patternVars,
  22. TNodePtr subset,
  23. TVector<TNamedFunction> definitions)
  24. : Pos(pos)
  25. , PartitionKeySelector(std::move(partitionKeySelector))
  26. , PartitionColumns(std::move(partitionColumns))
  27. , SortSpecs(std::move(sortSpecs))
  28. , Measures(std::move(measures))
  29. , RowsPerMatch(std::move(rowsPerMatch))
  30. , SkipTo(std::move(skipTo))
  31. , Pattern(std::move(pattern))
  32. , PatternVars(std::move(patternVars))
  33. , Subset(std::move(subset))
  34. , Definitions(std::move(definitions))
  35. {}
  36. TNodePtr Build(TContext& ctx, TString label, ISource* source);
  37. private:
  38. TPosition Pos;
  39. TNodePtr PartitionKeySelector;
  40. TNodePtr PartitionColumns;
  41. TVector<TSortSpecificationPtr> SortSpecs;
  42. TVector<TNamedFunction> Measures;
  43. TNodePtr RowsPerMatch;
  44. TNodePtr SkipTo;
  45. TNodePtr Pattern;
  46. TNodePtr PatternVars;
  47. TNodePtr Subset;
  48. TVector<TNamedFunction> Definitions;
  49. };
  50. using TMatchRecognizeBuilderPtr = TIntrusivePtr<TMatchRecognizeBuilder>;
  51. TNodePtr BuildMatchRecognizeColumnAccess(TPosition pos, TString var, TString column);
  52. TNodePtr BuildMatchRecognizeDefineAggregate(TPosition pos, TString name, TVector<TNodePtr> args);
  53. TNodePtr BuildMatchRecognizeVarAccess(TPosition pos, TNodePtr extractor);
  54. } // namespace NSQLTranslationV1