Skip to content

Commit 6838c54

Browse files
yoavcloudayman-sigma
authored andcommitted
Add support for + char in Snowflake stage names (apache#1935)
1 parent a488e97 commit 6838c54

File tree

2 files changed

+21
-0
lines changed

2 files changed

+21
-0
lines changed

src/dialect/snowflake.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -735,6 +735,7 @@ pub fn parse_stage_name_identifier(parser: &mut Parser) -> Result<Ident, ParserE
735735
Token::Tilde => ident.push('~'),
736736
Token::Mod => ident.push('%'),
737737
Token::Div => ident.push('/'),
738+
Token::Plus => ident.push('+'),
738739
Token::Word(w) => ident.push_str(&w.to_string()),
739740
_ => return parser.expected("stage name identifier", parser.peek_token()),
740741
}

tests/sqlparser_snowflake.rs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2593,6 +2593,26 @@ fn test_snowflake_copy_into() {
25932593
}
25942594
_ => unreachable!(),
25952595
}
2596+
2597+
// Test for non-ident characters in stage names
2598+
let sql = "COPY INTO a.b FROM @namespace.stage_name/x@x~x%x+";
2599+
assert_eq!(snowflake().verified_stmt(sql).to_string(), sql);
2600+
match snowflake().verified_stmt(sql) {
2601+
Statement::CopyIntoSnowflake { into, from_obj, .. } => {
2602+
assert_eq!(
2603+
into,
2604+
ObjectName::from(vec![Ident::new("a"), Ident::new("b")])
2605+
);
2606+
assert_eq!(
2607+
from_obj,
2608+
Some(ObjectName::from(vec![
2609+
Ident::new("@namespace"),
2610+
Ident::new("stage_name/x@x~x%x+")
2611+
]))
2612+
)
2613+
}
2614+
_ => unreachable!(),
2615+
}
25962616
}
25972617

25982618
#[test]

0 commit comments

Comments
 (0)