mirror of
https://github.com/apache/datafusion-sqlparser-rs.git
synced 2025-08-04 06:18:17 +00:00
Fix parse COPY INTO
stage names without parens for SnowFlake (#1187)
Signed-off-by: Maciej Obuchowski <obuchowski.maciej@gmail.com>
This commit is contained in:
parent
20c5754784
commit
17ef71e42b
2 changed files with 47 additions and 1 deletions
|
@ -155,6 +155,10 @@ pub fn parse_stage_name_identifier(parser: &mut Parser) -> Result<Ident, ParserE
|
|||
parser.prev_token();
|
||||
break;
|
||||
}
|
||||
Token::RParen => {
|
||||
parser.prev_token();
|
||||
break;
|
||||
}
|
||||
Token::AtSign => ident.push('@'),
|
||||
Token::Tilde => ident.push('~'),
|
||||
Token::Mod => ident.push('%'),
|
||||
|
@ -219,7 +223,7 @@ pub fn parse_copy_into(parser: &mut Parser) -> Result<Statement, ParserError> {
|
|||
}
|
||||
_ => {
|
||||
parser.prev_token();
|
||||
from_stage = parser.parse_object_name(false)?;
|
||||
from_stage = parse_snowflake_stage_name(parser)?;
|
||||
stage_params = parse_stage_params(parser)?;
|
||||
|
||||
// as
|
||||
|
|
|
@ -1337,6 +1337,48 @@ fn test_snowflake_stage_object_names() {
|
|||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_snowflake_copy_into() {
|
||||
let sql = "COPY INTO a.b FROM @namespace.stage_name";
|
||||
assert_eq!(snowflake().verified_stmt(sql).to_string(), sql);
|
||||
match snowflake().verified_stmt(sql) {
|
||||
Statement::CopyIntoSnowflake {
|
||||
into, from_stage, ..
|
||||
} => {
|
||||
assert_eq!(into, ObjectName(vec![Ident::new("a"), Ident::new("b")]));
|
||||
assert_eq!(
|
||||
from_stage,
|
||||
ObjectName(vec![Ident::new("@namespace"), Ident::new("stage_name")])
|
||||
)
|
||||
}
|
||||
_ => unreachable!(),
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_snowflake_copy_into_stage_name_ends_with_parens() {
|
||||
let sql = "COPY INTO SCHEMA.SOME_MONITORING_SYSTEM FROM (SELECT t.$1:st AS st FROM @schema.general_finished)";
|
||||
assert_eq!(snowflake().verified_stmt(sql).to_string(), sql);
|
||||
match snowflake().verified_stmt(sql) {
|
||||
Statement::CopyIntoSnowflake {
|
||||
into, from_stage, ..
|
||||
} => {
|
||||
assert_eq!(
|
||||
into,
|
||||
ObjectName(vec![
|
||||
Ident::new("SCHEMA"),
|
||||
Ident::new("SOME_MONITORING_SYSTEM")
|
||||
])
|
||||
);
|
||||
assert_eq!(
|
||||
from_stage,
|
||||
ObjectName(vec![Ident::new("@schema"), Ident::new("general_finished")])
|
||||
)
|
||||
}
|
||||
_ => unreachable!(),
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_snowflake_trim() {
|
||||
let real_sql = r#"SELECT customer_id, TRIM(sub_items.value:item_price_id, '"', "a") AS item_price_id FROM models_staging.subscriptions"#;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue