mirror of
https://github.com/apache/datafusion-sqlparser-rs.git
synced 2025-08-23 15:34:09 +00:00
Support Snowflake - allow number as placeholder (e.g. :1
) (#1001)
This commit is contained in:
parent
7993384686
commit
65317edcb9
2 changed files with 22 additions and 1 deletions
|
@ -4759,7 +4759,14 @@ impl<'a> Parser<'a> {
|
|||
Token::HexStringLiteral(ref s) => Ok(Value::HexStringLiteral(s.to_string())),
|
||||
Token::Placeholder(ref s) => Ok(Value::Placeholder(s.to_string())),
|
||||
tok @ Token::Colon | tok @ Token::AtSign => {
|
||||
let ident = self.parse_identifier()?;
|
||||
// Not calling self.parse_identifier()? because only in placeholder we want to check numbers as idfentifies
|
||||
// This because snowflake allows numbers as placeholders
|
||||
let next_token = self.next_token();
|
||||
let ident = match next_token.token {
|
||||
Token::Word(w) => Ok(w.to_ident()),
|
||||
Token::Number(w, false) => Ok(Ident::new(w)),
|
||||
_ => self.expected("placeholder", next_token),
|
||||
}?;
|
||||
let placeholder = tok.to_string() + &ident.value;
|
||||
Ok(Value::Placeholder(placeholder))
|
||||
}
|
||||
|
|
|
@ -1079,6 +1079,20 @@ fn test_snowflake_trim() {
|
|||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_number_placeholder() {
|
||||
let sql_only_select = "SELECT :1";
|
||||
let select = snowflake().verified_only_select(sql_only_select);
|
||||
assert_eq!(
|
||||
&Expr::Value(Value::Placeholder(":1".into())),
|
||||
expr_from_projection(only(&select.projection))
|
||||
);
|
||||
|
||||
snowflake()
|
||||
.parse_sql_statements("alter role 1 with name = 'foo'")
|
||||
.expect_err("should have failed");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn parse_position_not_function_columns() {
|
||||
snowflake_and_generic()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue