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 Jun 25, 2021
1 parent 640cf3f commit 46879ca
Show file tree
Hide file tree
Showing 2 changed files with 64 additions and 0 deletions.
24 changes: 24 additions & 0 deletions cpp/src/gandiva/function_registry_datetime.cc
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,30 @@ 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 @@ -896,4 +896,44 @@ gdv_int64 castBIGINT_daytimeinterval(gdv_day_time_interval in) {
extractDay_daytimeinterval(in) * MILLIS_IN_DAY;
}

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 46879ca

Please sign in to comment.