mirror of
https://github.com/apache/datafusion-sqlparser-rs.git
synced 2025-08-04 06:18:17 +00:00
Support placeholders ($
or ?
) in LIMIT
clause (#494)
* fix: limit $1 * feat: test limit $1 * Update Cargo.toml * cargo fmt Co-authored-by: Andrew Lamb <andrew@nerdnetworks.org>
This commit is contained in:
parent
2c0886d9fe
commit
09bdb6bb8a
1 changed files with 36 additions and 1 deletions
|
@ -2592,6 +2592,7 @@ impl<'a> Parser<'a> {
|
|||
pub fn parse_number_value(&mut self) -> Result<Value, ParserError> {
|
||||
match self.parse_value()? {
|
||||
v @ Value::Number(_, _) => Ok(v),
|
||||
v @ Value::Placeholder(_) => Ok(v),
|
||||
_ => {
|
||||
self.prev_token();
|
||||
self.expected("literal number", self.peek_token())
|
||||
|
@ -4356,7 +4357,7 @@ impl Word {
|
|||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
use crate::test_utils::all_dialects;
|
||||
use crate::test_utils::{all_dialects, TestedDialects};
|
||||
|
||||
#[test]
|
||||
fn test_prev_index() {
|
||||
|
@ -4378,4 +4379,38 @@ mod tests {
|
|||
parser.prev_token();
|
||||
});
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_parse_limit() {
|
||||
let sql = "SELECT * FROM user LIMIT 1";
|
||||
all_dialects().run_parser_method(sql, |parser| {
|
||||
let ast = parser.parse_query().unwrap();
|
||||
assert_eq!(ast.to_string(), sql.to_string());
|
||||
});
|
||||
|
||||
let sql = "SELECT * FROM user LIMIT $1 OFFSET $2";
|
||||
let dialects = TestedDialects {
|
||||
dialects: vec![
|
||||
Box::new(PostgreSqlDialect {}),
|
||||
Box::new(ClickHouseDialect {}),
|
||||
Box::new(GenericDialect {}),
|
||||
Box::new(MsSqlDialect {}),
|
||||
Box::new(SnowflakeDialect {}),
|
||||
],
|
||||
};
|
||||
|
||||
dialects.run_parser_method(sql, |parser| {
|
||||
let ast = parser.parse_query().unwrap();
|
||||
assert_eq!(ast.to_string(), sql.to_string());
|
||||
});
|
||||
|
||||
let sql = "SELECT * FROM user LIMIT ? OFFSET ?";
|
||||
let dialects = TestedDialects {
|
||||
dialects: vec![Box::new(MySqlDialect {})],
|
||||
};
|
||||
dialects.run_parser_method(sql, |parser| {
|
||||
let ast = parser.parse_query().unwrap();
|
||||
assert_eq!(ast.to_string(), sql.to_string());
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue