1#ifndef QUERY_INTERPRETER_H
2#define QUERY_INTERPRETER_H
4#include <vkdb/friendly_builder.h>
18using MetricExprResult = Metric;
24using TableNameExprResult = std::string;
30using TimestampExprResult = Timestamp;
36using ValueExprResult = double;
42using TagKeyExprResult = TagKey;
48using TagValueExprResult = TagValue;
54using TagExprResult = Tag;
60using TagListExprResult = TagTable;
66using TagColumnsExprResult = TagColumns;
72using SelectDataResult = std::vector<DataPoint<double>>;
78using SelectDoubleResult = double;
84using SelectCountResult = uint64_t;
91using SelectResult = std::variant<
101using SelectTypeResult = SelectType;
107using WhereClauseResult = TagListExprResult;
113using AllClauseResult = std::optional<WhereClauseResult>;
121using BetweenClauseResult = std::tuple<
124 std::optional<WhereClauseResult>
132using AtClauseResult = std::pair<
134 std::optional<WhereClauseResult>
142using SelectClauseResult = std::variant<
152using PutResult = void;
158using DeleteResult = void;
164using CreateResult = void;
170using DropResult = void;
176using AddResult = void;
182using RemoveResult = void;
188using TablesResult = std::vector<std::string>;
195using OutputResult = std::variant<SelectResult, TablesResult>;
201using Result = std::optional<OutputResult>;
207using Results = std::vector<Result>;
213static const std::string INTERPRETER_DEFAULT_DATABASE{
"interpreter_default"};
241 [[nodiscard]] std::string
message()
const noexcept;
254 std::string message_;
263 using error_callback = std::function<void(
const RuntimeError&)>;
286 std::ostream& stream = std::cout
296 [[nodiscard]] std::string to_string(
const OutputResult& result)
const;
304 [[nodiscard]] std::string to_string(
const SelectResult& result)
const;
312 [[nodiscard]] std::string to_string(
const TablesResult& result)
const;
321 [[nodiscard]] Results visit(
const Expr& expr)
const;
330 [[nodiscard]] Result visit(
const Query& query)
const;
338 static void add_optional_tag_list(
340 const std::optional<TagListExprResult>& tag_list
353 static SelectResult handle_select_type(
367 [[nodiscard]] SelectResult visit(
const SelectQuery& query)
const;
377 PutResult visit(
const PutQuery& query)
const;
387 DeleteResult visit(
const DeleteQuery& query)
const;
397 CreateResult visit(
const CreateQuery& query)
const;
407 DropResult visit(
const DropQuery& query)
const;
417 AddResult visit(
const AddQuery& query)
const;
427 RemoveResult visit(
const RemoveQuery& query)
const;
438 [[nodiscard]] TablesResult visit(
const TablesQuery& query)
const;
449 [[nodiscard]] AllClauseResult visit(
const AllClause& clause)
const;
460 [[nodiscard]] BetweenClauseResult visit(
const BetweenClause& clause)
const;
471 [[nodiscard]] AtClauseResult visit(
const AtClause& clause)
const;
481 [[nodiscard]] WhereClauseResult visit(
const WhereClause& clause)
const;
489 [[nodiscard]] SelectTypeResult visit(
const SelectType& type)
const noexcept;
497 [[nodiscard]] MetricExprResult visit(
507 [[nodiscard]] TableNameExprResult visit(
517 [[nodiscard]] TagKeyExprResult visit(
527 [[nodiscard]] TagValueExprResult visit(
537 [[nodiscard]] TagExprResult visit(
const TagExpr& tag)
const noexcept;
547 [[nodiscard]] TagListExprResult visit(
const TagListExpr& tag_list)
const;
557 [[nodiscard]] TagColumnsExprResult visit(
569 [[nodiscard]] TimestampExprResult visit(
581 [[nodiscard]] ValueExprResult visit(
const ValueExpr& value)
const;
587 error_callback callback_;
Represents a database in vkdb.
Friendly query builder for querying a Table.
void interpret(const Expr &expr, std::ostream &stream=std::cout) const noexcept
Interpret the expression.
Interpreter(Database &database, error_callback callback=[](const RuntimeError &) {}) noexcept
Construct a new Interpreter object.
Token token() const noexcept
Get the token.
std::string message() const noexcept
Get the message.
RuntimeError(Token token, const std::string &message) noexcept
Construct a new Runtime Error object.