Skip to content

Commit

Permalink
Add Gandiva functions for datetime (apache#23)
Browse files Browse the repository at this point in the history
  • Loading branch information
zhztheplayer committed Feb 28, 2022
1 parent 3b40a21 commit 5b633c5
Show file tree
Hide file tree
Showing 2 changed files with 65 additions and 0 deletions.
25 changes: 25 additions & 0 deletions cpp/src/gandiva/function_registry_datetime.cc
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,31 @@ std::vector<NativeFunction> GetDateTimeFunctionRegistry() {

NativeFunction("castDATE", {}, DataTypeVector{timestamp()}, date32(),
kResultNullIfNull, "castDATE32_timestamp"),

NativeFunction("unix_date", {}, DataTypeVector{date32()}, int32(),
kResultNullIfNull, "unix_date_date32"),

NativeFunction("unix_seconds", {}, DataTypeVector{timestampusutc()}, int64(),
kResultNullIfNull, "unix_seconds_timestampusutc"),

NativeFunction("unix_millis", {}, DataTypeVector{timestampusutc()}, int64(),
kResultNullIfNull, "unix_millis_timestampusutc"),

NativeFunction("unix_micros", {}, DataTypeVector{timestampusutc()}, int64(),
kResultNullIfNull, "unix_micros_timestampusutc"),

NativeFunction("seconds_to_timestamp", {}, DataTypeVector{int64()}, timestampusutc(),
kResultNullIfNull, "seconds_to_timestamp_int64"),

NativeFunction("millis_to_timestamp", {}, DataTypeVector{int64()}, timestampusutc(),
kResultNullIfNull, "millis_to_timestamp_int64"),

NativeFunction("micros_to_timestamp", {}, DataTypeVector{int64()}, timestampusutc(),
kResultNullIfNull, "micros_to_timestamp_int64"),

NativeFunction("date_diff", {}, DataTypeVector{date32(), date32()}, int32(),
kResultNullIfNull, "micros_to_timestamp_date32_date32"),

DATE_TYPES(LAST_DAY_SAFE_NULL_IF_NULL, last_day, {});

return date_time_fn_registry_;
Expand Down
40 changes: 40 additions & 0 deletions cpp/src/gandiva/precompiled/time.cc
Original file line number Diff line number Diff line change
Expand Up @@ -965,4 +965,44 @@ CAST_NULLABLE_INTERVAL_DAY(int64)
CAST_NULLABLE_INTERVAL_YEAR(int32)
CAST_NULLABLE_INTERVAL_YEAR(int64)

FORCE_INLINE
gdv_int32 unix_date_date32(gdv_date32 in) {
return in;
}

FORCE_INLINE
gdv_int64 unix_seconds_timestampusutc(gdv_timestamp in) {
return in / 1000000;
}

FORCE_INLINE
gdv_int64 unix_millis_timestampusutc(gdv_timestamp in) {
return in / 1000;
}

FORCE_INLINE
gdv_int64 unix_micros_timestampusutc(gdv_timestamp in) {
return in;
}

FORCE_INLINE
gdv_timestamp seconds_to_timestamp_int64(gdv_int64 in) {
return in * 1000000;
}

FORCE_INLINE
gdv_timestamp millis_to_timestamp_int64(gdv_int64 in) {
return in * 1000;
}

FORCE_INLINE
gdv_timestamp micros_to_timestamp_int64(gdv_int64 in) {
return in;
}

FORCE_INLINE
gdv_int32 micros_to_timestamp_date32_date32(gdv_date32 left, gdv_date32 right) {
return left - right;
}

} // extern "C"

0 comments on commit 5b633c5

Please sign in to comment.