diff --git a/src/dialect/snowflake.rs b/src/dialect/snowflake.rs index baf99b84b..ddde7d87a 100644 --- a/src/dialect/snowflake.rs +++ b/src/dialect/snowflake.rs @@ -835,6 +835,7 @@ pub fn parse_stage_name_identifier(parser: &mut Parser) -> Result ident.push('%'), Token::Div => ident.push('/'), Token::Plus => ident.push('+'), + Token::Number(n, _) => ident.push_str(n), Token::Word(w) => ident.push_str(&w.to_string()), _ => return parser.expected("stage name identifier", parser.peek_token()), } diff --git a/tests/sqlparser_snowflake.rs b/tests/sqlparser_snowflake.rs index a7a633152..6794d9f3a 100644 --- a/tests/sqlparser_snowflake.rs +++ b/tests/sqlparser_snowflake.rs @@ -2628,7 +2628,7 @@ fn test_snowflake_copy_into() { } // Test for non-ident characters in stage names - let sql = "COPY INTO a.b FROM @namespace.stage_name/x@x~x%x+"; + let sql = "COPY INTO a.b FROM @namespace.stage_name/x@x~x%x+/20250723_data"; assert_eq!(snowflake().verified_stmt(sql).to_string(), sql); match snowflake().verified_stmt(sql) { Statement::CopyIntoSnowflake { into, from_obj, .. } => { @@ -2640,7 +2640,7 @@ fn test_snowflake_copy_into() { from_obj, Some(ObjectName::from(vec![ Ident::new("@namespace"), - Ident::new("stage_name/x@x~x%x+") + Ident::new("stage_name/x@x~x%x+/20250723_data") ])) ) }