@@ -99,6 +99,8 @@ pub enum Token {
99
99
LBrace ,
100
100
/// Right brace `}`
101
101
RBrace ,
102
+ /// Right Arrow `=>`
103
+ RArrow ,
102
104
}
103
105
104
106
impl fmt:: Display for Token {
@@ -139,6 +141,7 @@ impl fmt::Display for Token {
139
141
Token :: Pipe => f. write_str ( "|" ) ,
140
142
Token :: LBrace => f. write_str ( "{" ) ,
141
143
Token :: RBrace => f. write_str ( "}" ) ,
144
+ Token :: RArrow => f. write_str ( "=>" ) ,
142
145
}
143
146
}
144
147
}
@@ -323,7 +326,7 @@ impl<'a> Tokenizer<'a> {
323
326
}
324
327
}
325
328
}
326
- // identifier or keyword
329
+ // identifier or Keyword
327
330
ch if self . dialect . is_identifier_start ( ch) => {
328
331
chars. next ( ) ; // consume the first char
329
332
let s = self . tokenize_word ( ch, chars) ;
@@ -400,7 +403,13 @@ impl<'a> Tokenizer<'a> {
400
403
_ => Ok ( Some ( Token :: Pipe ) ) ,
401
404
}
402
405
}
403
- '=' => self . consume_and_return ( chars, Token :: Eq ) ,
406
+ '=' => {
407
+ chars. next ( ) ; // consume
408
+ match chars. peek ( ) {
409
+ Some ( '>' ) => self . consume_and_return ( chars, Token :: RArrow ) ,
410
+ _ => Ok ( Some ( Token :: Eq ) ) ,
411
+ }
412
+ }
404
413
'.' => self . consume_and_return ( chars, Token :: Period ) ,
405
414
'!' => {
406
415
chars. next ( ) ; // consume
@@ -766,6 +775,23 @@ mod tests {
766
775
compare ( expected, tokens) ;
767
776
}
768
777
778
+ #[ test]
779
+ fn tokenize_right_arrow ( ) {
780
+ let sql = String :: from ( "FUNCTION(key=>value)" ) ;
781
+ let dialect = GenericDialect { } ;
782
+ let mut tokenizer = Tokenizer :: new ( & dialect, & sql) ;
783
+ let tokens = tokenizer. tokenize ( ) . unwrap ( ) ;
784
+ let expected = vec ! [
785
+ Token :: make_word( "FUNCTION" , None ) ,
786
+ Token :: LParen ,
787
+ Token :: make_word( "key" , None ) ,
788
+ Token :: RArrow ,
789
+ Token :: make_word( "value" , None ) ,
790
+ Token :: RParen ,
791
+ ] ;
792
+ compare ( expected, tokens) ;
793
+ }
794
+
769
795
#[ test]
770
796
fn tokenize_is_null ( ) {
771
797
let sql = String :: from ( "a IS NULL" ) ;
0 commit comments