#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