Add support for MSSQL's SELECT TOP N syntax (#150)

Add support for MSSQL SELECT TOP (N) [PERCENT] [WITH TIES] syntax.
This commit is contained in:
Alex Kyllo 2020-01-12 20:20:48 -08:00 committed by Nikhil Benesch
parent 4cdd6e2f84
commit 172ba42001
7 changed files with 126 additions and 10 deletions

View file

@ -522,6 +522,7 @@ fn peeking_take_while(
#[cfg(test)]
mod tests {
use super::super::dialect::GenericDialect;
use super::super::dialect::MsSqlDialect;
use super::*;
#[test]
@ -782,6 +783,28 @@ mod tests {
compare(expected, tokens);
}
#[test]
fn tokenize_mssql_top() {
let sql = "SELECT TOP 5 [bar] FROM foo";
let dialect = MsSqlDialect {};
let mut tokenizer = Tokenizer::new(&dialect, sql);
let tokens = tokenizer.tokenize().unwrap();
let expected = vec![
Token::make_keyword("SELECT"),
Token::Whitespace(Whitespace::Space),
Token::make_keyword("TOP"),
Token::Whitespace(Whitespace::Space),
Token::Number(String::from("5")),
Token::Whitespace(Whitespace::Space),
Token::make_word("bar", Some('[')),
Token::Whitespace(Whitespace::Space),
Token::make_keyword("FROM"),
Token::Whitespace(Whitespace::Space),
Token::make_word("foo", None),
];
compare(expected, tokens);
}
fn compare(expected: Vec<Token>, actual: Vec<Token>) {
//println!("------------------------------");
//println!("tokens = {:?}", actual);