1#ifndef QUERY_FRIENDLY_BUILDER_H
2#define QUERY_FRIENDLY_BUILDER_H
4#include <vkdb/builder.h>
12template <ArithmeticNoCVRefQuals TValue>
15 using size_type =
typename QueryBuilder<TValue>::size_type;
17 using result_type = std::vector<value_type>;
34 const TagColumns& tag_columns
44 : query_builder_{
std::move(query_builder)} {}
93 Timestamp timestamp, Metric metric,
94 const TagTable& tag_table
97 std::ignore = query_builder_.point(key);
111 std::ignore = query_builder_.filterByMetric(metric);
125 template <
typename... Metrics>
128 const Metrics&... metrics
130 std::ignore = query_builder_.filterByAnyMetrics(metrics...);
144 const Timestamp& timestamp
146 std::ignore = query_builder_.filterByTimestamp(timestamp);
161 const Timestamp& start,
166 std::ignore = query_builder_.range(start_key, end_key);
180 template <
typename... Timestamps>
183 const Timestamps&... timestamps
185 std::ignore = query_builder_.filterByAnyTimestamps(timestamps...);
199 std::ignore = query_builder_.filterByTag(tag.first, tag.second);
213 template <
typename... Tags>
218 std::ignore = query_builder_.filterByAnyTags(tags...);
232 template <
typename... Tags>
237 std::ignore = query_builder_.filterByAllTags(tags...);
257 const TagTable& tag_table, TValue value
263 throw std::runtime_error{
264 "FriendlyQueryBuilder::get(): Invalid metric '" + metric +
"'."
268 std::ignore = query_builder_.put(key, value);
287 const TagTable& tag_table
290 std::ignore = query_builder_.remove(key);
304 return query_builder_.count();
316 [[nodiscard]] TValue
sum() {
317 return query_builder_.sum();
329 [[nodiscard]]
double avg() {
330 return query_builder_.avg();
342 [[nodiscard]] TValue
min() {
343 return query_builder_.min();
355 [[nodiscard]] TValue
max() {
356 return query_builder_.max();
368 auto result{query_builder_.execute() |
369 std::views::transform([](
const auto& entry) {
371 entry.first.timestamp(),
372 entry.first.metric(),
377 return {result.begin(), result.end()};
Friendly query builder for querying a Table.
FriendlyQueryBuilder(LSMTree< TValue > &lsm_tree, const TagColumns &tag_columns) noexcept
Construct a new FriendlyQueryBuilder object.
FriendlyQueryBuilder & whereMetricIsAnyOf(const Metrics &... metrics)
Configure builder for where metric is any of clause.
double avg()
Calculate the average of the values in the range.
FriendlyQueryBuilder(FriendlyQueryBuilder &&) noexcept=default
Move-construct a FriendlyQueryBuilder object.
FriendlyQueryBuilder & whereTagsContain(const Tag &tag)
Configure builder for where tags contain clause.
FriendlyQueryBuilder(QueryBuilder< TValue > &&query_builder)
Construct a new FriendlyQueryBuilder object.
size_type count()
Count the number of entries in the range.
result_type execute()
Execute the query.
FriendlyQueryBuilder & remove(Timestamp timestamp, Metric metric, const TagTable &tag_table)
Configure builder for remove query.
FriendlyQueryBuilder()=delete
Deleted default constructor.
FriendlyQueryBuilder & whereTimestampBetween(const Timestamp &start, const Timestamp &end)
Configure builder for where timestamp is between clause.
FriendlyQueryBuilder & whereTimestampIs(const Timestamp ×tamp)
Configure builder for where timestamp is clause.
TValue max()
Calculate the maximum value in the range.
FriendlyQueryBuilder & put(Timestamp timestamp, Metric metric, const TagTable &tag_table, TValue value)
Configure builder for put query.
TValue min()
Calculate the minimum value in the range.
FriendlyQueryBuilder & get(Timestamp timestamp, Metric metric, const TagTable &tag_table)
Configure builder for get query.
FriendlyQueryBuilder & whereTimestampIsAnyOf(const Timestamps &... timestamps)
Configure builder for where timestamp is any of clause.
FriendlyQueryBuilder & whereTagsContainAllOf(const Tags &... tags)
Configure builder for where tags contain all of clause.
TValue sum()
Sum the values in the range.
FriendlyQueryBuilder & whereMetricIs(const Metric &metric)
Configure builder for where metric is clause.
FriendlyQueryBuilder & whereTagsContainAnyOf(const Tags &... tags)
Configure builder for where tags contain any of clause.
LSM tree on TimeSeriesKey.
Query builder for querying a Table.
Represents a key in vkdb.
static constexpr auto MAX_METRIC_LENGTH
Metric width.
Concept for types that are all convertible to another and have no cv- or ref-qualifiers.
Represents a datapoint in vkdb.