mirror of
https://github.com/apache/datafusion-sqlparser-rs.git
synced 2025-08-22 06:54:07 +00:00
Fix identifier starts with $
should be regarded as a placeholder in SQLite (#1402)
This commit is contained in:
parent
7b4ac7ca9f
commit
df86f259ce
2 changed files with 17 additions and 1 deletions
|
@ -20,6 +20,7 @@ mod test_utils;
|
|||
use test_utils::*;
|
||||
|
||||
use sqlparser::ast::SelectItem::UnnamedExpr;
|
||||
use sqlparser::ast::Value::Placeholder;
|
||||
use sqlparser::ast::*;
|
||||
use sqlparser::dialect::{GenericDialect, SQLiteDialect};
|
||||
use sqlparser::parser::{ParserError, ParserOptions};
|
||||
|
@ -470,6 +471,22 @@ fn parse_start_transaction_with_modifier() {
|
|||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_dollar_identifier_as_placeholder() {
|
||||
// This relates to the discussion in issue #291. The `$id` should be treated as a placeholder,
|
||||
// not as an identifier in SQLite dialect.
|
||||
//
|
||||
// Reference: https://www.sqlite.org/lang_expr.html#varparam
|
||||
match sqlite().verified_expr("id = $id") {
|
||||
Expr::BinaryOp { op, left, right } => {
|
||||
assert_eq!(op, BinaryOperator::Eq);
|
||||
assert_eq!(left, Box::new(Expr::Identifier(Ident::new("id"))));
|
||||
assert_eq!(right, Box::new(Expr::Value(Placeholder("$id".to_string()))));
|
||||
}
|
||||
_ => unreachable!(),
|
||||
}
|
||||
}
|
||||
|
||||
fn sqlite() -> TestedDialects {
|
||||
TestedDialects {
|
||||
dialects: vec![Box::new(SQLiteDialect {})],
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue