1#include <vkdb/printer.h>
5 for (
const auto& query : expr) {
11void Printer::visit(
const Query& query)
noexcept {
12 std::visit([
this](
auto&& query) {
13 using Q = std::decay_t<
decltype(query)>;
14 if constexpr (std::is_same_v<Q, SelectQuery>) {
16 }
else if constexpr (std::is_same_v<Q, PutQuery>) {
18 }
else if constexpr (std::is_same_v<Q, DeleteQuery>) {
20 }
else if constexpr (std::is_same_v<Q, CreateQuery>) {
22 }
else if constexpr (std::is_same_v<Q, DropQuery>) {
24 }
else if constexpr (std::is_same_v<Q, AddQuery>) {
26 }
else if constexpr (std::is_same_v<Q, RemoveQuery>) {
28 }
else if constexpr (std::is_same_v<Q, TablesQuery>) {
35void Printer::visit(
const SelectQuery& query)
noexcept {
41 visit(query.table_name);
43 std::visit([
this](
auto&& select_clause) {
44 using C = std::decay_t<
decltype(select_clause)>;
45 if constexpr (std::is_same_v<C, AllClause>) {
47 }
else if constexpr (std::is_same_v<C, BetweenClause>) {
49 }
else if constexpr (std::is_same_v<C, AtClause>) {
55void Printer::visit(
const PutQuery& query)
noexcept {
59 visit(query.timestamp);
63 visit(query.table_name);
64 if (query.tag_list.has_value()) {
66 visit(query.tag_list.value());
70void Printer::visit(
const DeleteQuery& query)
noexcept {
74 visit(query.timestamp);
76 visit(query.table_name);
77 if (query.tag_list.has_value()) {
79 visit(query.tag_list.value());
83void Printer::visit(
const CreateQuery& query)
noexcept {
84 output_ <<
"CREATE TABLE ";
85 visit(query.table_name);
86 if (query.tag_columns.has_value()) {
88 visit(query.tag_columns.value());
92void Printer::visit(
const DropQuery& query)
noexcept {
93 output_ <<
"DROP TABLE ";
94 visit(query.table_name);
97void Printer::visit(
const AddQuery& query)
noexcept {
98 output_ <<
"ADD TAGS ";
99 visit(query.tag_columns);
101 visit(query.table_name);
104void Printer::visit(
const RemoveQuery& query)
noexcept {
105 output_ <<
"REMOVE TAGS ";
106 visit(query.tag_columns);
108 visit(query.table_name);
111void Printer::visit(
const TablesQuery& query)
noexcept {
115void Printer::visit(
const AllClause& clause)
noexcept {
117 if (clause.where_clause) {
119 visit(clause.where_clause.value());
123void Printer::visit(
const BetweenClause& clause)
noexcept {
124 output_ <<
"BETWEEN ";
128 if (clause.where_clause) {
130 visit(clause.where_clause.value());
134void Printer::visit(
const AtClause& clause)
noexcept {
136 visit(clause.timestamp);
137 if (clause.where_clause) {
139 visit(clause.where_clause.value());
143void Printer::visit(
const WhereClause& clause)
noexcept {
145 visit(clause.tag_list);
148void Printer::visit(
const SelectType& type)
noexcept {
149 std::visit([
this](
auto&& type) {
150 using T = std::decay_t<
decltype(type)>;
151 if constexpr (std::is_same_v<T, SelectTypeDataExpr>) {
153 }
else if constexpr (std::is_same_v<T, SelectTypeCountExpr>) {
155 }
else if constexpr (std::is_same_v<T, SelectTypeAvgExpr>) {
157 }
else if constexpr (std::is_same_v<T, SelectTypeSumExpr>) {
159 }
else if constexpr (std::is_same_v<T, SelectTypeMinExpr>) {
161 }
else if constexpr (std::is_same_v<T, SelectTypeMaxExpr>) {
167void Printer::visit(
const MetricExpr& metric)
noexcept {
168 output_ << metric.token.lexeme();
171void Printer::visit(
const TableNameExpr& table_name)
noexcept {
172 output_ << table_name.token.lexeme();
175void Printer::visit(
const TagKeyExpr& tag_key)
noexcept {
176 output_ << tag_key.token.lexeme();
179void Printer::visit(
const TagValueExpr& tag_value)
noexcept {
180 output_ << tag_value.token.lexeme();
183void Printer::visit(
const TagExpr& tag)
noexcept {
189void Printer::visit(
const TagListExpr& tag_list)
noexcept {
191 for (
const auto& tag : tag_list.tags) {
200void Printer::visit(
const TagColumnsExpr& tag_columns)
noexcept {
202 for (
const auto& tag_key : tag_columns.keys) {
211void Printer::visit(
const TimestampExpr& timestamp)
noexcept {
212 output_ << timestamp.token.lexeme();
215void Printer::visit(
const ValueExpr& value)
noexcept {
216 output_ << value.token.lexeme();
std::string print(const Expr &expr) noexcept
Prints the given expression.