Closed
Description
This bug rhymes with #1244.
parse_sql
normally doesn't care whether a single statement is terminated by a semicolon or end of string, but when parsing Snowflake syntax COPY INTO
it does.
This deviation seems like a bug.
Discovered on sqlparser v0.51.0, tested on v0.52.0:
use sqlparser::{
dialect::SnowflakeDialect,
parser::{Parser, ParserError},
};
fn main() {
let dialect = SnowflakeDialect {};
// With other SQL, semicolon being there or not does not seem to matter:
{
let no_semicolon = Parser::parse_sql(&dialect, "select 1");
assert!(no_semicolon.is_ok());
}
{
let with_semicolon = Parser::parse_sql(&dialect, "select 1;");
assert!(with_semicolon.is_ok());
}
// With the SnowFlake COPY INTO statement, it does seem to matter.
// Parsing only works when the semicolon is omitted:
{
let no_semicolon = Parser::parse_sql(&dialect, "COPY INTO foo FROM @bar");
println!("no semicolon: {no_semicolon:?}");
assert!(no_semicolon.is_ok());
}
{
// BUG
let with_semicolon = Parser::parse_sql(&dialect, "COPY INTO foo FROM @bar;");
println!("with semicolon: {with_semicolon:?}");
assert_eq!(
with_semicolon,
Err(ParserError::ParserError(
"Expected: stage name identifier, found: EOF".to_string()
))
);
}
}
Metadata
Metadata
Assignees
Labels
No labels