From cb62618c419d58b8ffbc8f9920572dc0a83de07f Mon Sep 17 00:00:00 2001 From: Yoav Cohen Date: Sat, 23 Aug 2025 10:27:12 +0300 Subject: [PATCH] Snowflake: Minus char in stage name --- src/dialect/snowflake.rs | 1 + tests/sqlparser_snowflake.rs | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/dialect/snowflake.rs b/src/dialect/snowflake.rs index 07ef8317..3bb36010 100644 --- a/src/dialect/snowflake.rs +++ b/src/dialect/snowflake.rs @@ -1065,6 +1065,7 @@ pub fn parse_stage_name_identifier(parser: &mut Parser) -> Result ident.push('%'), Token::Div => ident.push('/'), Token::Plus => ident.push('+'), + Token::Minus => 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 0448e0c4..c2bb4fad 100644 --- a/tests/sqlparser_snowflake.rs +++ b/tests/sqlparser_snowflake.rs @@ -2663,7 +2663,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+/20250723_data"; + let sql = "COPY INTO a.b FROM @namespace.stage_name/x@x~x%x+/20250723_data-x"; assert_eq!(snowflake().verified_stmt(sql).to_string(), sql); match snowflake().verified_stmt(sql) { Statement::CopyIntoSnowflake { into, from_obj, .. } => { @@ -2675,7 +2675,7 @@ fn test_snowflake_copy_into() { from_obj, Some(ObjectName::from(vec![ Ident::new("@namespace"), - Ident::new("stage_name/x@x~x%x+/20250723_data") + Ident::new("stage_name/x@x~x%x+/20250723_data-x") ])) ) }