@@ -26,7 +26,7 @@ use std::vec;
2626
2727use arrow:: datatypes:: { TimeUnit :: Nanosecond , * } ;
2828use common:: MockContextProvider ;
29- use datafusion_common:: { DataFusionError , Result , assert_contains} ;
29+ use datafusion_common:: { DFSchema , DataFusionError , Result , assert_contains} ;
3030use datafusion_expr:: {
3131 ColumnarValue , CreateIndex , DdlStatement , ScalarFunctionArgs , ScalarUDF ,
3232 ScalarUDFImpl , Signature , Volatility , col, logical_plan:: LogicalPlan ,
@@ -35,7 +35,7 @@ use datafusion_expr::{
3535use datafusion_functions:: { string, unicode} ;
3636use datafusion_sql:: {
3737 parser:: DFParser ,
38- planner:: { NullOrdering , ParserOptions , SqlToRel } ,
38+ planner:: { NullOrdering , ParserOptions , PlannerContext , SqlToRel } ,
3939} ;
4040
4141use crate :: common:: { CustomExprPlanner , CustomTypePlanner , MockSessionState } ;
@@ -52,6 +52,7 @@ use datafusion_functions_window::{rank::rank_udwf, row_number::row_number_udwf};
5252use insta:: { allow_duplicates, assert_snapshot} ;
5353use rstest:: rstest;
5454use sqlparser:: dialect:: { Dialect , GenericDialect , HiveDialect , MySqlDialect } ;
55+ use sqlparser:: parser:: Parser ;
5556
5657mod cases;
5758mod common;
@@ -254,6 +255,25 @@ fn within_group_rejected_for_non_ordered_set_udaf() {
254255 ) ;
255256}
256257
258+ #[ test]
259+ fn typed_literal_without_string_payload_returns_error ( ) {
260+ let sql_expr = Parser :: new ( & GenericDialect { } )
261+ . try_with_sql ( "time 17542368000000000" )
262+ . unwrap ( )
263+ . parse_expr ( )
264+ . unwrap ( ) ;
265+ let context = MockContextProvider {
266+ state : MockSessionState :: default ( ) ,
267+ } ;
268+ let sql_to_rel = SqlToRel :: new ( & context) ;
269+
270+ let err = sql_to_rel
271+ . sql_to_expr ( sql_expr, & DFSchema :: empty ( ) , & mut PlannerContext :: new ( ) )
272+ . expect_err ( "planning invalid typed literals should return an error" ) ;
273+
274+ assert_contains ! ( err. to_string( ) , "Typed literal requires a string payload" ) ;
275+ }
276+
257277#[ test]
258278fn parse_ident_normalization_5 ( ) {
259279 let sql = "SELECT AGE FROM PERSON" ;
0 commit comments