mirror of
https://github.com/apache/datafusion-sqlparser-rs.git
synced 2025-08-23 07:24:10 +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
|
@ -41,7 +41,6 @@ impl Dialect for SQLiteDialect {
|
||||||
ch.is_ascii_lowercase()
|
ch.is_ascii_lowercase()
|
||||||
|| ch.is_ascii_uppercase()
|
|| ch.is_ascii_uppercase()
|
||||||
|| ch == '_'
|
|| ch == '_'
|
||||||
|| ch == '$'
|
|
||||||
|| ('\u{007f}'..='\u{ffff}').contains(&ch)
|
|| ('\u{007f}'..='\u{ffff}').contains(&ch)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -20,6 +20,7 @@ mod test_utils;
|
||||||
use test_utils::*;
|
use test_utils::*;
|
||||||
|
|
||||||
use sqlparser::ast::SelectItem::UnnamedExpr;
|
use sqlparser::ast::SelectItem::UnnamedExpr;
|
||||||
|
use sqlparser::ast::Value::Placeholder;
|
||||||
use sqlparser::ast::*;
|
use sqlparser::ast::*;
|
||||||
use sqlparser::dialect::{GenericDialect, SQLiteDialect};
|
use sqlparser::dialect::{GenericDialect, SQLiteDialect};
|
||||||
use sqlparser::parser::{ParserError, ParserOptions};
|
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 {
|
fn sqlite() -> TestedDialects {
|
||||||
TestedDialects {
|
TestedDialects {
|
||||||
dialects: vec![Box::new(SQLiteDialect {})],
|
dialects: vec![Box::new(SQLiteDialect {})],
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue