Skip to content

Commit

Permalink
WIP add days transform impl
Browse files Browse the repository at this point in the history
  • Loading branch information
ztlpn committed Jan 20, 2025
1 parent 0f7c015 commit 7c4f227
Show file tree
Hide file tree
Showing 4 changed files with 39 additions and 1 deletion.
1 change: 1 addition & 0 deletions src/v/iceberg/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -954,6 +954,7 @@ redpanda_cc_library(
include_prefix = "iceberg",
deps = [
":values",
"@seastar",
],
)

Expand Down
24 changes: 23 additions & 1 deletion src/v/iceberg/time_transform_visitor.cc
Original file line number Diff line number Diff line change
Expand Up @@ -10,15 +10,26 @@

#include "iceberg/values.h"

#include <seastar/util/variant_utils.hh>

namespace iceberg {

namespace {

static constexpr int64_t micros_per_s = 1'000'000;

int32_t micros_to_hr(int64_t micros) {
static constexpr int64_t s_per_hr = 3600;
static constexpr int64_t micros_per_s = 1000000;
static constexpr int64_t micros_per_hr = micros_per_s * s_per_hr;
return static_cast<int32_t>(micros / micros_per_hr);
}

int32_t micros_to_day(int64_t micros) {
static constexpr int64_t s_per_day = 86400;
static constexpr int64_t micros_per_day = micros_per_s * s_per_day;
return static_cast<int32_t>(micros / micros_per_day);
}

} // namespace

int32_t hour_transform_visitor::operator()(const primitive_value& v) {
Expand All @@ -35,4 +46,15 @@ int32_t hour_transform_visitor::operator()(const primitive_value& v) {
fmt::format("hourly_visitor not implemented for primitive value {}", v));
}

int32_t day_transform_visitor::operator()(const primitive_value& v) {
return ss::visit(
v,
[](const timestamp_value& v) { return micros_to_day(v.val); },
[](const timestamptz_value& v) { return micros_to_day(v.val); },
[](const auto& v) -> int32_t {
throw std::invalid_argument(fmt::format(
"day_transform_visitor not implemented for primitive value {}", v));
});
}

} // namespace iceberg
10 changes: 10 additions & 0 deletions src/v/iceberg/time_transform_visitor.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,4 +22,14 @@ struct hour_transform_visitor {
}
};

struct day_transform_visitor {
int32_t operator()(const primitive_value& v);

template<typename T>
int32_t operator()(const T& t) {
throw std::invalid_argument(
fmt::format("day_transform_visitor not implemented for value {}", t));
}
};

} // namespace iceberg
5 changes: 5 additions & 0 deletions src/v/iceberg/transform_utils.cc
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,11 @@ struct transform_applying_visitor {
return v;
}

value operator()(const day_transform&) {
int_value v{std::visit(day_transform_visitor{}, source_val_)};
return v;
}

template<typename T>
value operator()(const T&) {
throw std::invalid_argument(
Expand Down

0 comments on commit 7c4f227

Please sign in to comment.