diff --git a/datafusion/core/tests/sql/timestamp.rs b/datafusion/core/tests/sql/timestamp.rs index 8e293d035f6f..30d823547261 100644 --- a/datafusion/core/tests/sql/timestamp.rs +++ b/datafusion/core/tests/sql/timestamp.rs @@ -1065,3 +1065,83 @@ async fn cast_to_timestamp_micros_twice() -> Result<()> { Ok(()) } + +#[tokio::test] +async fn to_timestamp_i32() -> Result<()> { + let ctx = SessionContext::new(); + + let sql = "select to_timestamp(cast (1 as int));"; + let results = execute_to_batches(&ctx, sql).await; + + let expected = vec![ + "+--------------------------------------+", + "| totimestamp(CAST(Int64(1) AS Int32)) |", + "+--------------------------------------+", + "| 1970-01-01 00:00:00.000000001 |", + "+--------------------------------------+", + ]; + + assert_batches_eq!(expected, &results); + + Ok(()) +} + +#[tokio::test] +async fn to_timestamp_micros_i32() -> Result<()> { + let ctx = SessionContext::new(); + + let sql = "select to_timestamp_micros(cast (1 as int));"; + let results = execute_to_batches(&ctx, sql).await; + + let expected = vec![ + "+--------------------------------------------+", + "| totimestampmicros(CAST(Int64(1) AS Int32)) |", + "+--------------------------------------------+", + "| 1970-01-01 00:00:00.000001 |", + "+--------------------------------------------+", + ]; + + assert_batches_eq!(expected, &results); + + Ok(()) +} + +#[tokio::test] +async fn to_timestamp_millis_i32() -> Result<()> { + let ctx = SessionContext::new(); + + let sql = "select to_timestamp_millis(cast (1 as int));"; + let results = execute_to_batches(&ctx, sql).await; + + let expected = vec![ + "+--------------------------------------------+", + "| totimestampmillis(CAST(Int64(1) AS Int32)) |", + "+--------------------------------------------+", + "| 1970-01-01 00:00:00.001 |", + "+--------------------------------------------+", + ]; + + assert_batches_eq!(expected, &results); + + Ok(()) +} + +#[tokio::test] +async fn to_timestamp_seconds_i32() -> Result<()> { + let ctx = SessionContext::new(); + + let sql = "select to_timestamp_seconds(cast (1 as int));"; + let results = execute_to_batches(&ctx, sql).await; + + let expected = vec![ + "+---------------------------------------------+", + "| totimestampseconds(CAST(Int64(1) AS Int32)) |", + "+---------------------------------------------+", + "| 1970-01-01 00:00:01 |", + "+---------------------------------------------+", + ]; + + assert_batches_eq!(expected, &results); + + Ok(()) +} diff --git a/datafusion/expr/src/function.rs b/datafusion/expr/src/function.rs index 45cd99d5703e..7b66f97529f2 100644 --- a/datafusion/expr/src/function.rs +++ b/datafusion/expr/src/function.rs @@ -348,48 +348,48 @@ pub fn signature(fun: &BuiltinScalarFunction) -> Signature { BuiltinScalarFunction::ToTimestamp => Signature::uniform( 1, vec![ - DataType::Utf8, DataType::Int64, DataType::Timestamp(TimeUnit::Nanosecond, None), DataType::Timestamp(TimeUnit::Microsecond, None), DataType::Timestamp(TimeUnit::Millisecond, None), DataType::Timestamp(TimeUnit::Second, None), + DataType::Utf8, ], fun.volatility(), ), BuiltinScalarFunction::ToTimestampMillis => Signature::uniform( 1, vec![ - DataType::Utf8, DataType::Int64, DataType::Timestamp(TimeUnit::Nanosecond, None), DataType::Timestamp(TimeUnit::Microsecond, None), DataType::Timestamp(TimeUnit::Millisecond, None), DataType::Timestamp(TimeUnit::Second, None), + DataType::Utf8, ], fun.volatility(), ), BuiltinScalarFunction::ToTimestampMicros => Signature::uniform( 1, vec![ - DataType::Utf8, DataType::Int64, DataType::Timestamp(TimeUnit::Nanosecond, None), DataType::Timestamp(TimeUnit::Microsecond, None), DataType::Timestamp(TimeUnit::Millisecond, None), DataType::Timestamp(TimeUnit::Second, None), + DataType::Utf8, ], fun.volatility(), ), BuiltinScalarFunction::ToTimestampSeconds => Signature::uniform( 1, vec![ - DataType::Utf8, DataType::Int64, DataType::Timestamp(TimeUnit::Nanosecond, None), DataType::Timestamp(TimeUnit::Microsecond, None), DataType::Timestamp(TimeUnit::Millisecond, None), DataType::Timestamp(TimeUnit::Second, None), + DataType::Utf8, ], fun.volatility(), ),