@@ -1627,6 +1627,7 @@ impl<'a> Tokenizer<'a> {
16271627 chars. next ( ) ;
16281628 match chars. peek ( ) {
16291629 Some ( '>' ) => self . consume_for_binop ( chars, "<=>" , Token :: Spaceship ) ,
1630+ Some ( '-' ) => Ok ( Some ( Token :: LtEq ) ) ,
16301631 _ => self . start_binop ( chars, "<=" , Token :: LtEq ) ,
16311632 }
16321633 }
@@ -1647,12 +1648,11 @@ impl<'a> Tokenizer<'a> {
16471648 }
16481649 Some ( '<' ) => self . consume_for_binop ( chars, "<<" , Token :: ShiftLeft ) ,
16491650 Some ( '-' ) if self . dialect . supports_geometric_types ( ) => {
1650- chars. next ( ) ; // consume
1651- match chars. peek ( ) {
1652- Some ( '>' ) => {
1653- self . consume_for_binop ( chars, "<->" , Token :: TwoWayArrow )
1654- }
1655- _ => self . start_binop_opt ( chars, "<-" , None ) ,
1651+ if chars. peekable . clone ( ) . nth ( 1 ) == Some ( '>' ) {
1652+ chars. next ( ) ; // consume
1653+ self . consume_for_binop ( chars, "<->" , Token :: TwoWayArrow )
1654+ } else {
1655+ Ok ( Some ( Token :: Lt ) )
16561656 }
16571657 }
16581658 Some ( '^' ) if self . dialect . supports_geometric_types ( ) => {
@@ -2628,9 +2628,10 @@ fn take_char_from_hex_digits(
26282628mod tests {
26292629 use super :: * ;
26302630 use crate :: dialect:: {
2631- BigQueryDialect , ClickHouseDialect , HiveDialect , MsSqlDialect , MySqlDialect , SQLiteDialect ,
2631+ BigQueryDialect , ClickHouseDialect , HiveDialect , MsSqlDialect , MySqlDialect ,
2632+ PostgreSqlDialect , SQLiteDialect ,
26322633 } ;
2633- use crate :: test_utils:: { all_dialects_except, all_dialects_where} ;
2634+ use crate :: test_utils:: { all_dialects , all_dialects_except, all_dialects_where} ;
26342635 use core:: fmt:: Debug ;
26352636
26362637 #[ test]
@@ -4420,4 +4421,56 @@ mod tests {
44204421 tokens,
44214422 ) ;
44224423 }
4424+
4425+ #[ test]
4426+ fn tokenize_lt ( ) {
4427+ all_dialects ( ) . tokenizes_to (
4428+ "select a <-50" ,
4429+ vec ! [
4430+ Token :: make_keyword( "select" ) ,
4431+ Token :: Whitespace ( Whitespace :: Space ) ,
4432+ Token :: make_word( "a" , None ) ,
4433+ Token :: Whitespace ( Whitespace :: Space ) ,
4434+ Token :: Lt ,
4435+ Token :: Minus ,
4436+ Token :: Number ( "50" . to_string( ) , false ) ,
4437+ ] ,
4438+ ) ;
4439+ all_dialects ( ) . tokenizes_to (
4440+ "select a <=-50" ,
4441+ vec ! [
4442+ Token :: make_keyword( "select" ) ,
4443+ Token :: Whitespace ( Whitespace :: Space ) ,
4444+ Token :: make_word( "a" , None ) ,
4445+ Token :: Whitespace ( Whitespace :: Space ) ,
4446+ Token :: LtEq ,
4447+ Token :: Minus ,
4448+ Token :: Number ( "50" . to_string( ) , false ) ,
4449+ ] ,
4450+ ) ;
4451+ all_dialects_where ( |d| d. supports_geometric_types ( ) ) . tokenizes_to (
4452+ "select a <->b" ,
4453+ vec ! [
4454+ Token :: make_keyword( "select" ) ,
4455+ Token :: Whitespace ( Whitespace :: Space ) ,
4456+ Token :: make_word( "a" , None ) ,
4457+ Token :: Whitespace ( Whitespace :: Space ) ,
4458+ Token :: TwoWayArrow ,
4459+ Token :: make_word( "b" , None ) ,
4460+ ] ,
4461+ ) ;
4462+
4463+ all_dialects ( ) . tokenizes_to (
4464+ "select a <-b" ,
4465+ vec ! [
4466+ Token :: make_keyword( "select" ) ,
4467+ Token :: Whitespace ( Whitespace :: Space ) ,
4468+ Token :: make_word( "a" , None ) ,
4469+ Token :: Whitespace ( Whitespace :: Space ) ,
4470+ Token :: Lt ,
4471+ Token :: Minus ,
4472+ Token :: make_word( "b" , None ) ,
4473+ ] ,
4474+ ) ;
4475+ }
44234476}
0 commit comments