Some small parser bug fixes. (#4282)
This commit is contained in:
parent
735994549a
commit
780348b18f
2 changed files with 41 additions and 7 deletions
|
@ -312,7 +312,8 @@ impl<'a> Lexer<'a> {
|
|||
_ => t!(":"),
|
||||
},
|
||||
b'$' => {
|
||||
if self.reader.peek().map(|x| x.is_ascii_alphabetic()).unwrap_or(false) {
|
||||
if self.reader.peek().map(|x| x.is_ascii_alphabetic() || x == b'_').unwrap_or(false)
|
||||
{
|
||||
return self.lex_param();
|
||||
}
|
||||
t!("$")
|
||||
|
@ -402,13 +403,20 @@ impl<'a> Lexer<'a> {
|
|||
return self.lex_ident_from_next_byte(b'm');
|
||||
}
|
||||
},
|
||||
b's' => {
|
||||
if self.reader.peek().map(|x| x.is_ascii_alphabetic()).unwrap_or(false) {
|
||||
return self.lex_ident_from_next_byte(b's');
|
||||
} else {
|
||||
t!("s")
|
||||
b's' => match self.reader.peek() {
|
||||
Some(b'"') => {
|
||||
self.reader.next();
|
||||
t!("\"")
|
||||
}
|
||||
}
|
||||
Some(b'\'') => {
|
||||
self.reader.next();
|
||||
t!("'")
|
||||
}
|
||||
Some(x) if x.is_ascii_alphabetic() => {
|
||||
return self.lex_ident_from_next_byte(b's');
|
||||
}
|
||||
_ => t!("s"),
|
||||
},
|
||||
b'h' => {
|
||||
if self.reader.peek().map(|x| x.is_ascii_alphabetic()).unwrap_or(false) {
|
||||
return self.lex_ident_from_next_byte(b'h');
|
||||
|
|
|
@ -725,4 +725,30 @@ mod tests {
|
|||
};
|
||||
assert_eq!(regex, r"(?i)test/[a-z]+/\s\d\w{1}.*".parse().unwrap());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn plain_string() {
|
||||
let sql = r#""hello""#;
|
||||
let out = Value::parse(sql);
|
||||
assert_eq!(r#"'hello'"#, format!("{}", out));
|
||||
|
||||
let sql = r#"s"hello""#;
|
||||
let out = Value::parse(sql);
|
||||
assert_eq!(r#"'hello'"#, format!("{}", out));
|
||||
|
||||
let sql = r#"s'hello'"#;
|
||||
let out = Value::parse(sql);
|
||||
assert_eq!(r#"'hello'"#, format!("{}", out));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn params() {
|
||||
let sql = "$hello";
|
||||
let out = Value::parse(sql);
|
||||
assert_eq!("$hello", format!("{}", out));
|
||||
|
||||
let sql = "$__hello";
|
||||
let out = Value::parse(sql);
|
||||
assert_eq!("$__hello", format!("{}", out));
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue