@@ -312,6 +312,41 @@ TEST_F(DateTimeFunctionsTest, unixTimestampCustomFormat) {
312
312
unixTimestamp (" 2022-12-12 asd 07:45:31" , " yyyy-MM-dd 'asd HH:mm:ss" ));
313
313
}
314
314
315
+ TEST_F (DateTimeFunctionsTest, unixTimestampTimestampInput) {
316
+ const auto unixTimestamp = [&](std::optional<Timestamp> timestamp) {
317
+ return evaluateOnce<int64_t >(" unix_timestamp(c0)" , timestamp);
318
+ };
319
+ EXPECT_EQ (0 , unixTimestamp (Timestamp (0 , 0 )));
320
+ EXPECT_EQ (1 , unixTimestamp (Timestamp (1 , 990 )));
321
+ EXPECT_EQ (61 , unixTimestamp (Timestamp (61 , 0 )));
322
+ EXPECT_EQ (-1 , unixTimestamp (Timestamp (-1 , 0 )));
323
+ EXPECT_EQ (1739933174 , unixTimestamp (Timestamp (1739933174 , 0 )));
324
+ EXPECT_EQ (-1739933174 , unixTimestamp (Timestamp (-1739933174 , 0 )));
325
+ EXPECT_EQ (kMax , unixTimestamp (Timestamp (kMax , 0 )));
326
+ EXPECT_EQ (kMin , unixTimestamp (Timestamp (kMin , 0 )));
327
+ }
328
+
329
+ TEST_F (DateTimeFunctionsTest, unixTimestampDateInput) {
330
+ const auto unixTimestamp = [&](std::optional<int32_t > date) {
331
+ return evaluateOnce<int64_t >(" unix_timestamp(c0)" , {DATE ()}, date);
332
+ };
333
+ EXPECT_EQ (0 , unixTimestamp (parseDate (" 1970-01-01" )));
334
+ EXPECT_EQ (1727740800 , unixTimestamp (parseDate (" 2024-10-01" )));
335
+ EXPECT_EQ (-126065894400 , unixTimestamp (parseDate (" -2025-02-18" )));
336
+ setQueryTimeZone (" America/Los_Angeles" );
337
+ EXPECT_EQ (1727766000 , unixTimestamp (parseDate (" 2024-10-01" )));
338
+ EXPECT_EQ (-126065866022 , unixTimestamp (parseDate (" -2025-02-18" )));
339
+
340
+ // Test invalid inputs.
341
+ VELOX_ASSERT_THROW (
342
+ unixTimestamp (kMax ), " Timepoint is outside of supported year range" );
343
+ VELOX_ASSERT_THROW (
344
+ unixTimestamp (kMin ), " Timepoint is outside of supported year range" );
345
+ VELOX_ASSERT_THROW (
346
+ unixTimestamp (parseDate (" 2045-12-31" )),
347
+ " Unable to convert timezone 'America/Los_Angeles' past 2037-11-01 09:00:00" );
348
+ }
349
+
315
350
// unix_timestamp and to_unix_timestamp are aliases.
316
351
TEST_F (DateTimeFunctionsTest, toUnixTimestamp) {
317
352
std::optional<StringView> dateStr = " 1970-01-01 08:32:11" _sv;
0 commit comments