#pragma once #include "node.h" #include #include namespace NSQLTranslationV1 { struct TNamedFunction { TNodePtr Callable; TString Name; }; class TMatchRecognizeBuilder: public TSimpleRefCount { public: TMatchRecognizeBuilder( TPosition pos, TNodePtr partitionKeySelector, TNodePtr partitionColumns, TVector sortSpecs, TVector measures, TNodePtr rowsPerMatch, TNodePtr skipTo, TNodePtr pattern, TNodePtr patternVars, TNodePtr subset, TVector definitions) : Pos_(pos) , PartitionKeySelector_(std::move(partitionKeySelector)) , PartitionColumns_(std::move(partitionColumns)) , SortSpecs_(std::move(sortSpecs)) , Measures_(std::move(measures)) , RowsPerMatch_(std::move(rowsPerMatch)) , SkipTo_(std::move(skipTo)) , Pattern_(std::move(pattern)) , PatternVars_(std::move(patternVars)) , Subset_(std::move(subset)) , Definitions_(std::move(definitions)) {} TNodePtr Build(TContext& ctx, TString label, ISource* source); private: TPosition Pos_; TNodePtr PartitionKeySelector_; TNodePtr PartitionColumns_; TVector SortSpecs_; TVector Measures_; TNodePtr RowsPerMatch_; TNodePtr SkipTo_; TNodePtr Pattern_; TNodePtr PatternVars_; TNodePtr Subset_; TVector Definitions_; }; using TMatchRecognizeBuilderPtr = TIntrusivePtr; TNodePtr BuildMatchRecognizeColumnAccess(TPosition pos, TString var, TString column); TNodePtr BuildMatchRecognizeDefineAggregate(TPosition pos, TString name, TVector args); TNodePtr BuildMatchRecognizeVarAccess(TPosition pos, TNodePtr extractor); } // namespace NSQLTranslationV1