JODA  0.13.1 (59b41972)
JSON On-Demand Analysis
Agg.h
Go to the documentation of this file.
1 //
2 // Created by Nico on 21/02/2019.
3 //
4 
5 #ifndef JODA_AGG_H
6 #define JODA_AGG_H
7 #include "../../../../../../../extern/PEGTL/include/tao/pegtl.hpp"
8 #include "Literals.h"
10 
11 /*
12  * Forward Declaration Actions
13  */
14 template <typename Rule>
15 struct aggExpAction : tao::pegtl::nothing<Rule> {};
16 
17 /*
18  * Keywords
19  */
20 #ifndef __CLION_IDE__ // Prevent lag from expanding all macros
21 struct aggKW : TAOCPP_PEGTL_KEYWORD("AGG") {};
22 
23 struct aggKW_MIN : TAOCPP_PEGTL_KEYWORD("MIN") {};
24 struct aggKW_MAX : TAOCPP_PEGTL_KEYWORD("MAX") {};
25 struct aggKW_ATTSTAT : TAOCPP_PEGTL_KEYWORD("ATTSTAT") {};
26 struct aggKW_AVG : TAOCPP_PEGTL_KEYWORD("AVG") {};
27 struct aggKW_COUNT : TAOCPP_PEGTL_KEYWORD("COUNT") {};
28 struct aggKW_SUM : TAOCPP_PEGTL_KEYWORD("SUM") {};
29 struct aggKW_DISTINCT : TAOCPP_PEGTL_KEYWORD("DISTINCT") {};
30 struct aggKW_COLLECT : TAOCPP_PEGTL_KEYWORD("COLLECT") {};
31 struct aggKW_HISTOGRAM : TAOCPP_PEGTL_KEYWORD("HISTOGRAM") {};
32 
33 struct aggKW_GROUP : TAOCPP_PEGTL_KEYWORD("GROUP") {};
34 struct aggKW_BY : TAOCPP_PEGTL_KEYWORD("BY") {};
35 struct aggKW_AS : TAOCPP_PEGTL_KEYWORD("AS") {};
36 #endif
37 
38 // Agg commands
40  : tao::pegtl::sor<aggKW_ATTSTAT, aggKW_AVG, aggKW_COUNT, aggKW_SUM,
41  aggKW_DISTINCT, aggKW_COLLECT, aggKW_MIN, aggKW_MAX, aggKW_HISTOGRAM> {};
42 
43 /*
44  * Aggregate Expresstion
45  */
46 struct aggFromPointer : pointer {};
47 struct aggToPointer : pointer {};
48 struct aggFrom
49  : tao::pegtl::seq<
50  aggKeywords, tao::pegtl::pad<tao::pegtl::one<'('>, tao::pegtl::space>,
51  tao::pegtl::opt<
52  tao::pegtl::list<functionstateaction, tao::pegtl::one<','>,
53  tao::pegtl::space>>,
54  tao::pegtl::pad<tao::pegtl::one<')'>, tao::pegtl::space>> {};
55 
56 /*
57  * Aggregation Group
58  */
59 struct aggByExpr
60  : tao::pegtl::must<
61  tao::pegtl::pad<functionstateaction, tao::pegtl::space>> {};
62 struct aggAsIdent : tao::pegtl::identifier {};
63 struct aggGrouped
64  : tao::pegtl::seq<aggKW_GROUP, tao::pegtl::pad<aggFrom, tao::pegtl::space>,
65  tao::pegtl::opt<tao::pegtl::seq<
66  tao::pegtl::pad<aggKW_AS, tao::pegtl::space>,
67  tao::pegtl::pad<aggAsIdent, tao::pegtl::space>>>,
68  tao::pegtl::pad<aggKW_BY, tao::pegtl::space>,
69  tao::pegtl::pad<aggByExpr, tao::pegtl::space>> {};
70 
72  : tao::pegtl::seq<
73  tao::pegtl::must<tao::pegtl::one<'('>>,
74  tao::pegtl::pad<tao::pegtl::must<aggToPointer>, tao::pegtl::space>,
75  tao::pegtl::must<
76  tao::pegtl::pad<tao::pegtl::one<':'>, tao::pegtl::space>>,
77  tao::pegtl::pad<tao::pegtl::sor<aggGrouped, aggFrom>,
78  tao::pegtl::space>,
79  tao::pegtl::pad<tao::pegtl::must<tao::pegtl::one<')'>>,
80  tao::pegtl::space>> {};
81 struct aggExp : tao::pegtl::action<
82  aggExpAction,
83  tao::pegtl::list_must<aggSingleExp, tao::pegtl::one<','>,
84  tao::pegtl::space>> {};
85 
86 } // namespace joda::queryparsing::grammar
87 
88 #endif // JODA_AGG_H
Definition: Literals.h:27