vkdb
A time series database engine in C++.
Loading...
Searching...
No Matches
parser.h
1#ifndef QUERY_PARSER_H
2#define QUERY_PARSER_H
3
4#include <vkdb/expr.h>
5#include <vkdb/token.h>
6#include <vkdb/concepts.h>
7#include <iostream>
8#include <memory>
9#include <vector>
10#include <functional>
11#include <optional>
12
13namespace vkdb {
17class ParseError {};
18
22class Parser {
23public:
24 using size_type = uint64_t;
25 using error_callback = std::function<void(const Token&, const std::string&)>;
26
30 Parser() = delete;
31
39 Parser(
40 const std::vector<Token>& tokens,
41 error_callback callback = [](const Token&, const std::string&) {}
42 ) noexcept;
43
49 [[nodiscard]] std::optional<Expr> parse() noexcept;
50
51private:
59 [[nodiscard]] ParseError error(Token token, const std::string& message);
60
64 void synchronise();
65
71 [[nodiscard]] bool tokens_remaining() const noexcept;
72
80 [[nodiscard]] Token peek_back() const;
81
89 [[nodiscard]] Token peek() const;
90
96 Token advance() noexcept;
97
104 [[nodiscard]] bool check(TokenType type) const noexcept;
105
113 template <AllSameNoCVRefQuals<TokenType>... TokenTypes>
114 [[nodiscard]] bool match(TokenTypes... types) noexcept;
115
125 Token consume(TokenType type, const std::string& message);
126
134 [[nodiscard]] Expr parse_expression();
135
143 [[nodiscard]] Query parse_query();
144
152 [[nodiscard]] SelectQuery parse_select_query();
153
161 [[nodiscard]] PutQuery parse_put_query();
162
170 [[nodiscard]] DeleteQuery parse_delete_query();
171
179 [[nodiscard]] CreateQuery parse_create_query();
180
188 [[nodiscard]] DropQuery parse_drop_query();
189
197 [[nodiscard]] AddQuery parse_add_query();
198
206 [[nodiscard]] RemoveQuery parse_remove_query();
207
215 [[nodiscard]] TablesQuery parse_tables_query();
216
224 [[nodiscard]] SelectType parse_select_type();
225
233 [[nodiscard]] SelectClause parse_select_clause();
241 [[nodiscard]] AllClause parse_all_clause();
242
250 [[nodiscard]] BetweenClause parse_between_clause();
251
259 [[nodiscard]] AtClause parse_at_clause();
260
268 [[nodiscard]] WhereClause parse_where_clause();
269
277 [[nodiscard]] TagListExpr parse_tag_list();
278
286 [[nodiscard]] TagExpr parse_tag();
287
295 [[nodiscard]] TagColumnsExpr parse_tag_columns();
296
304 [[nodiscard]] TagKeyExpr parse_tag_key();
305
313 [[nodiscard]] TagValueExpr parse_tag_value();
314
322 [[nodiscard]] MetricExpr parse_metric();
323
331 [[nodiscard]] TableNameExpr parse_table_name();
332
340 [[nodiscard]] TimestampExpr parse_timestamp();
341
349 [[nodiscard]] ValueExpr parse_value();
350
354 const std::vector<Token> tokens_;
355
359 error_callback callback_;
360
364 size_type position_;
365};
366
367} // namespace vkdb
368
369#endif // QUERY_PARSER_H
Exception class for parse errors.
Definition parser.h:17
Parser for vq.
Definition parser.h:22
Parser()=delete
Deleted default constructor.
std::optional< Expr > parse() noexcept
Parses the tokens into an expression.
Definition parser.cpp:11
Represents a token.
Definition token.h:81
Concept for types that are all the same as another after removing cv- and ref-qualifiers.
Definition concepts.h:57
STL namespace.
Add query.
Definition expr.h:420
All clause.
Definition expr.h:141
At clause.
Definition expr.h:177
Between clause.
Definition expr.h:153
Create query.
Definition expr.h:390
Delete query.
Definition expr.h:360
Drop query.
Definition expr.h:408
Metric expression.
Definition expr.h:15
Put query.
Definition expr.h:324
Remove query.
Definition expr.h:438
Select query.
Definition expr.h:293
Table name expression.
Definition expr.h:27
Tables query.
Definition expr.h:456
Tag columns expression.
Definition expr.h:75
Tag expression.
Definition expr.h:99
Tag key expression.
Definition expr.h:63
Tag list expression.
Definition expr.h:117
Tag value expression.
Definition expr.h:87
Timestamp expression.
Definition expr.h:39
Value expression.
Definition expr.h:51
Where clause.
Definition expr.h:129