@@ -500,7 +500,7 @@ pub(crate) fn resolve_name_ref_ptrs(
500500 . map ( |ptr| smallvec ! [ ptr] )
501501 }
502502 }
503- . or_else ( || resolve_current_timestamp_as_now ( binder, name_ref) )
503+ . or_else ( || resolve_special_keyword_as_function ( binder, name_ref) )
504504}
505505
506506fn resolve_table_name_ptr (
@@ -725,22 +725,24 @@ fn resolve_for_kind_with_params(
725725 binder. lookup_with_params ( name, kind, position, schema, params)
726726}
727727
728- /// `current_timestamp` is equivalent to `now()`
729- fn resolve_current_timestamp_as_now (
728+ // some keywords behave as functions
729+ fn resolve_special_keyword_as_function (
730730 binder : & Binder ,
731731 name_ref : & ast:: NameRef ,
732732) -> Option < SmallVec < [ SyntaxNodePtr ; 1 ] > > {
733- if name_ref
733+ let function_name = name_ref
734734 . syntax ( )
735735 . first_child_or_token ( )
736- . is_some_and ( |t| t. kind ( ) == SyntaxKind :: CURRENT_TIMESTAMP_KW )
737- {
738- let now_name = Name :: from_string ( "now" ) ;
739- let position = name_ref. syntax ( ) . text_range ( ) . start ( ) ;
740- return resolve_function ( binder, & now_name, & None , None , position)
741- . map ( |ptr| smallvec ! [ ptr] ) ;
742- }
743- None
736+ . and_then ( |t| match t. kind ( ) {
737+ SyntaxKind :: CURRENT_SCHEMA_KW => Some ( "current_schema" ) ,
738+ SyntaxKind :: CURRENT_TIMESTAMP_KW => Some ( "now" ) ,
739+ SyntaxKind :: CURRENT_USER_KW | SyntaxKind :: USER_KW => Some ( "current_user" ) ,
740+ SyntaxKind :: SESSION_USER_KW => Some ( "session_user" ) ,
741+ _ => None ,
742+ } ) ?;
743+ let function_name = Name :: from_string ( function_name) ;
744+ let position = name_ref. syntax ( ) . text_range ( ) . start ( ) ;
745+ resolve_function ( binder, & function_name, & None , None , position) . map ( |ptr| smallvec ! [ ptr] )
744746}
745747
746748fn resolve_function (
0 commit comments