@@ -1627,6 +1627,8 @@ 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 ) ) ,
1631+ Some ( '-' ) => Ok ( Some ( Token :: LtEq ) ) ,
16301632 _ => self . start_binop ( chars, "<=" , Token :: LtEq ) ,
16311633 }
16321634 }
@@ -1646,13 +1648,13 @@ impl<'a> Tokenizer<'a> {
16461648 }
16471649 }
16481650 Some ( '<' ) => self . consume_for_binop ( chars, "<<" , Token :: ShiftLeft ) ,
1651+ Some ( '+' ) => Ok ( Some ( Token :: Lt ) ) ,
16491652 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 ) ,
1653+ if chars. peekable . clone ( ) . nth ( 1 ) == Some ( '>' ) {
1654+ chars. next ( ) ; // consume
1655+ self . consume_for_binop ( chars, "<->" , Token :: TwoWayArrow )
1656+ } else {
1657+ Ok ( Some ( Token :: Lt ) )
16561658 }
16571659 }
16581660 Some ( '^' ) if self . dialect . supports_geometric_types ( ) => {
@@ -2628,9 +2630,10 @@ fn take_char_from_hex_digits(
26282630mod tests {
26292631 use super :: * ;
26302632 use crate :: dialect:: {
2631- BigQueryDialect , ClickHouseDialect , HiveDialect , MsSqlDialect , MySqlDialect , SQLiteDialect ,
2633+ BigQueryDialect , ClickHouseDialect , HiveDialect , MsSqlDialect , MySqlDialect ,
2634+ PostgreSqlDialect , SQLiteDialect ,
26322635 } ;
2633- use crate :: test_utils:: { all_dialects_except, all_dialects_where} ;
2636+ use crate :: test_utils:: { all_dialects , all_dialects_except, all_dialects_where} ;
26342637 use core:: fmt:: Debug ;
26352638
26362639 #[ test]
@@ -4420,4 +4423,92 @@ mod tests {
44204423 tokens,
44214424 ) ;
44224425 }
4426+
4427+ #[ test]
4428+ fn tokenize_lt ( ) {
4429+ all_dialects ( ) . tokenizes_to (
4430+ "select a <-50" ,
4431+ vec ! [
4432+ Token :: make_keyword( "select" ) ,
4433+ Token :: Whitespace ( Whitespace :: Space ) ,
4434+ Token :: make_word( "a" , None ) ,
4435+ Token :: Whitespace ( Whitespace :: Space ) ,
4436+ Token :: Lt ,
4437+ Token :: Minus ,
4438+ Token :: Number ( "50" . to_string( ) , false ) ,
4439+ ] ,
4440+ ) ;
4441+ all_dialects ( ) . tokenizes_to (
4442+ "select a <+50" ,
4443+ vec ! [
4444+ Token :: make_keyword( "select" ) ,
4445+ Token :: Whitespace ( Whitespace :: Space ) ,
4446+ Token :: make_word( "a" , None ) ,
4447+ Token :: Whitespace ( Whitespace :: Space ) ,
4448+ Token :: Lt ,
4449+ Token :: Plus ,
4450+ Token :: Number ( "50" . to_string( ) , false ) ,
4451+ ] ,
4452+ ) ;
4453+ all_dialects ( ) . tokenizes_to (
4454+ "select a <=-50" ,
4455+ vec ! [
4456+ Token :: make_keyword( "select" ) ,
4457+ Token :: Whitespace ( Whitespace :: Space ) ,
4458+ Token :: make_word( "a" , None ) ,
4459+ Token :: Whitespace ( Whitespace :: Space ) ,
4460+ Token :: LtEq ,
4461+ Token :: Minus ,
4462+ Token :: Number ( "50" . to_string( ) , false ) ,
4463+ ] ,
4464+ ) ;
4465+ all_dialects ( ) . tokenizes_to (
4466+ "select a <=+50" ,
4467+ vec ! [
4468+ Token :: make_keyword( "select" ) ,
4469+ Token :: Whitespace ( Whitespace :: Space ) ,
4470+ Token :: make_word( "a" , None ) ,
4471+ Token :: Whitespace ( Whitespace :: Space ) ,
4472+ Token :: LtEq ,
4473+ Token :: Plus ,
4474+ Token :: Number ( "50" . to_string( ) , false ) ,
4475+ ] ,
4476+ ) ;
4477+ all_dialects_where ( |d| d. supports_geometric_types ( ) ) . tokenizes_to (
4478+ "select a <->b" ,
4479+ vec ! [
4480+ Token :: make_keyword( "select" ) ,
4481+ Token :: Whitespace ( Whitespace :: Space ) ,
4482+ Token :: make_word( "a" , None ) ,
4483+ Token :: Whitespace ( Whitespace :: Space ) ,
4484+ Token :: TwoWayArrow ,
4485+ Token :: make_word( "b" , None ) ,
4486+ ] ,
4487+ ) ;
4488+
4489+ all_dialects ( ) . tokenizes_to (
4490+ "select a <-b" ,
4491+ vec ! [
4492+ Token :: make_keyword( "select" ) ,
4493+ Token :: Whitespace ( Whitespace :: Space ) ,
4494+ Token :: make_word( "a" , None ) ,
4495+ Token :: Whitespace ( Whitespace :: Space ) ,
4496+ Token :: Lt ,
4497+ Token :: Minus ,
4498+ Token :: make_word( "b" , None ) ,
4499+ ] ,
4500+ ) ;
4501+ all_dialects ( ) . tokenizes_to (
4502+ "select a <+b" ,
4503+ vec ! [
4504+ Token :: make_keyword( "select" ) ,
4505+ Token :: Whitespace ( Whitespace :: Space ) ,
4506+ Token :: make_word( "a" , None ) ,
4507+ Token :: Whitespace ( Whitespace :: Space ) ,
4508+ Token :: Lt ,
4509+ Token :: Plus ,
4510+ Token :: make_word( "b" , None ) ,
4511+ ] ,
4512+ ) ;
4513+ }
44234514}
0 commit comments