File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 2727#include " iceberg/util/checked_cast.h"
2828#include " iceberg/util/conversions.h"
2929#include " iceberg/util/macros.h"
30+ #include " iceberg/util/temporal_util.h"
3031
3132namespace iceberg {
3233
@@ -209,8 +210,10 @@ Result<Literal> LiteralCaster::CastFromTimestamp(
209210 auto timestamp_val = std::get<int64_t >(literal.value_ );
210211
211212 switch (target_type->type_id ()) {
212- case TypeId::kDate :
213- return NotImplemented (" Cast from Timestamp to Date is not implemented yet" );
213+ case TypeId::kDate : {
214+ ICEBERG_ASSIGN_OR_RAISE (auto days, TemporalUtils::ExtractDay (literal));
215+ return Literal::Date (std::get<int32_t >(days.value ()));
216+ }
214217 case TypeId::kTimestampTz :
215218 return Literal::TimestampTz (timestamp_val);
216219 default :
@@ -224,8 +227,10 @@ Result<Literal> LiteralCaster::CastFromTimestampTz(
224227 auto micros = std::get<int64_t >(literal.value_ );
225228
226229 switch (target_type->type_id ()) {
227- case TypeId::kDate :
228- return NotImplemented (" Cast from TimestampTz to Date is not implemented yet" );
230+ case TypeId::kDate : {
231+ ICEBERG_ASSIGN_OR_RAISE (auto days, TemporalUtils::ExtractDay (literal));
232+ return Literal::Date (std::get<int32_t >(days.value ()));
233+ }
229234 case TypeId::kTimestamp :
230235 return Literal::Timestamp (micros);
231236 default :
Original file line number Diff line number Diff line change @@ -689,6 +689,14 @@ INSTANTIATE_TEST_SUITE_P(
689689 .source_literal = Literal::Long (42L ),
690690 .target_type = timestamp_tz (),
691691 .expected_literal = Literal::TimestampTz (42L )},
692+ CastLiteralTestParam{.test_name = " TimestampToDate" ,
693+ .source_literal = Literal::Timestamp (1622547800000000 ),
694+ .target_type = date (),
695+ .expected_literal = Literal::Date (18779 )},
696+ CastLiteralTestParam{.test_name = " TimestampTzToDate" ,
697+ .source_literal = Literal::TimestampTz (1622547800000000 ),
698+ .target_type = date (),
699+ .expected_literal = Literal::Date (18779 )},
692700 // Float cast tests
693701 CastLiteralTestParam{.test_name = " FloatToDouble" ,
694702 .source_literal = Literal::Float (2 .0f ),
You can’t perform that action at this time.
0 commit comments