aboutsummaryrefslogtreecommitdiffstats
path: root/yql/essentials/sql/v1/sql_match_recognize.h
blob: 928ed35b5dbdae9a823f1ee0877fdbe82157f1ae (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#pragma once

#include "match_recognize.h"
#include "node.h"
#include "sql_translation.h"

namespace NSQLTranslationV1 {

class TSqlMatchRecognizeClause final : public TSqlTranslation {
public:
    TSqlMatchRecognizeClause(TContext& ctx, NSQLTranslation::ESqlMode mode);
    TMatchRecognizeBuilderPtr CreateBuilder(const TRule_row_pattern_recognition_clause& node);
    static constexpr size_t MaxPatternNesting = 20;
    static constexpr size_t MaxPermutedItems = 6;

private:
    std::tuple<TNodePtr, TNodePtr> ParsePartitionBy(TPosition pos, const TRule_window_partition_clause* node);
    TMaybe<TVector<TSortSpecificationPtr>> ParseOrderBy(const TRule_order_by_clause* node);
    TNamedFunction ParseOneMeasure(const TRule_row_pattern_measure_definition& node);
    TVector<TNamedFunction> ParseMeasures(const TRule_row_pattern_measure_list* node);
    TNodePtr ParseRowsPerMatch(TPosition pos, const TRule_row_pattern_rows_per_match* node);
    TNodePtr ParseAfterMatchSkipTo(TPosition pos, const TRule_row_pattern_skip_to* node);
    TNodePtr BuildPatternFactor(TPosition pos, TNodePtr primary, std::tuple<ui64, ui64, bool, bool, bool> quantifier);
    TNodePtr ParsePatternFactor(TPosition pos, const TRule_row_pattern_factor& node, size_t nestingLevel, bool output);
    TNodePtr BuildPatternTerm(TPosition pos, std::vector<TNodePtr> term);
    TNodePtr ParsePatternTerm(TPosition pos, const TRule_row_pattern_term& node, size_t nestingLevel, bool output);
    TNodePtr BuildPattern(TPosition pos, std::vector<TNodePtr> pattern);
    TNodePtr ParsePattern(TPosition pos, const TRule_row_pattern& node, size_t nestingLevel, bool output);
    TMaybe<TNodePtr> ParseSubset(TPosition pos, const TRule_row_pattern_subset_clause* node);
    TNamedFunction ParseOneDefinition(const TRule_row_pattern_definition& node);
    TVector<TNamedFunction> ParseDefinitions(const TRule_row_pattern_definition_list& node);

private:
    THashSet<TString> PatternVarNames;
    TNodePtr PatternVars;
};

} // namespace NSQLTranslationV1