Skip to content

Commit c92f2fa

Browse files
committed
Support $$ as placeholder name in SQLite dialect
1 parent 4fdeb5c commit c92f2fa

File tree

2 files changed

+16
-1
lines changed

2 files changed

+16
-1
lines changed

src/tokenizer.rs

+7-1
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ use sqlparser_derive::{Visit, VisitMut};
4343
use crate::ast::DollarQuotedString;
4444
use crate::dialect::Dialect;
4545
use crate::dialect::{
46-
BigQueryDialect, DuckDbDialect, GenericDialect, MySqlDialect, PostgreSqlDialect,
46+
BigQueryDialect, DuckDbDialect, GenericDialect, MySqlDialect, PostgreSqlDialect, SQLiteDialect,
4747
SnowflakeDialect,
4848
};
4949
use crate::keywords::{Keyword, ALL_KEYWORDS, ALL_KEYWORDS_INDEX};
@@ -1281,6 +1281,12 @@ impl<'a> Tokenizer<'a> {
12811281
if let Some('$') = chars.peek() {
12821282
chars.next();
12831283

1284+
// Treat `$$` as a placeholder for SQLite
1285+
// See https://www.sqlite.org/lang_expr.html#varparam
1286+
if self.dialect.is::<SQLiteDialect>() {
1287+
return Ok(Token::Placeholder("$$".to_string()));
1288+
}
1289+
12841290
let mut is_terminated = false;
12851291
let mut prev: Option<char> = None;
12861292

tests/sqlparser_sqlite.rs

+9
Original file line numberDiff line numberDiff line change
@@ -568,6 +568,15 @@ fn test_dollar_identifier_as_placeholder() {
568568
}
569569
_ => unreachable!(),
570570
}
571+
572+
match sqlite().verified_expr("id = $$") {
573+
Expr::BinaryOp { op, left, right } => {
574+
assert_eq!(op, BinaryOperator::Eq);
575+
assert_eq!(left, Box::new(Expr::Identifier(Ident::new("id"))));
576+
assert_eq!(right, Box::new(Expr::Value(Placeholder("$$".to_string()))));
577+
}
578+
_ => unreachable!(),
579+
}
571580
}
572581

573582
fn sqlite() -> TestedDialects {

0 commit comments

Comments
 (0)