@@ -793,7 +793,7 @@ fn parse_not_precedence() {
793793 expr: Box :: new( Expr :: Like {
794794 expr: Box :: new( Expr :: Value ( Value :: SingleQuotedString ( "a" . into( ) ) ) ) ,
795795 negated: true ,
796- pattern: Box :: new( Value :: SingleQuotedString ( "b" . into( ) ) ) ,
796+ pattern: Box :: new( Expr :: Value ( Value :: SingleQuotedString ( "b" . into( ) ) ) ) ,
797797 escape_char: None
798798 } ) ,
799799 } ,
@@ -826,7 +826,7 @@ fn parse_like() {
826826 Expr :: Like {
827827 expr: Box :: new( Expr :: Identifier ( Ident :: new( "name" ) ) ) ,
828828 negated,
829- pattern: Box :: new( Value :: SingleQuotedString ( "%a" . to_string( ) ) ) ,
829+ pattern: Box :: new( Expr :: Value ( Value :: SingleQuotedString ( "%a" . to_string( ) ) ) ) ,
830830 escape_char: None
831831 } ,
832832 select. selection. unwrap( )
@@ -842,7 +842,7 @@ fn parse_like() {
842842 Expr :: Like {
843843 expr: Box :: new( Expr :: Identifier ( Ident :: new( "name" ) ) ) ,
844844 negated,
845- pattern: Box :: new( Value :: SingleQuotedString ( "%a" . to_string( ) ) ) ,
845+ pattern: Box :: new( Expr :: Value ( Value :: SingleQuotedString ( "%a" . to_string( ) ) ) ) ,
846846 escape_char: Some ( '\\' )
847847 } ,
848848 select. selection. unwrap( )
@@ -859,7 +859,7 @@ fn parse_like() {
859859 Expr :: IsNull ( Box :: new( Expr :: Like {
860860 expr: Box :: new( Expr :: Identifier ( Ident :: new( "name" ) ) ) ,
861861 negated,
862- pattern: Box :: new( Value :: SingleQuotedString ( "%a" . to_string( ) ) ) ,
862+ pattern: Box :: new( Expr :: Value ( Value :: SingleQuotedString ( "%a" . to_string( ) ) ) ) ,
863863 escape_char: None
864864 } ) ) ,
865865 select. selection. unwrap( )
@@ -869,6 +869,45 @@ fn parse_like() {
869869 chk ( true ) ;
870870}
871871
872+ #[ test]
873+ fn parse_null_like ( ) {
874+ let sql = "SELECT \
875+ column1 LIKE NULL AS col_null, \
876+ NULL LIKE column1 AS null_col \
877+ FROM customers";
878+ let select = verified_only_select ( sql) ;
879+ assert_eq ! (
880+ SelectItem :: ExprWithAlias {
881+ expr: Expr :: Like {
882+ expr: Box :: new( Expr :: Identifier ( Ident :: new( "column1" ) ) ) ,
883+ negated: false ,
884+ pattern: Box :: new( Expr :: Value ( Value :: Null ) ) ,
885+ escape_char: None
886+ } ,
887+ alias: Ident {
888+ value: "col_null" . to_owned( ) ,
889+ quote_style: None
890+ }
891+ } ,
892+ select. projection[ 0 ]
893+ ) ;
894+ assert_eq ! (
895+ SelectItem :: ExprWithAlias {
896+ expr: Expr :: Like {
897+ expr: Box :: new( Expr :: Value ( Value :: Null ) ) ,
898+ negated: false ,
899+ pattern: Box :: new( Expr :: Identifier ( Ident :: new( "column1" ) ) ) ,
900+ escape_char: None
901+ } ,
902+ alias: Ident {
903+ value: "null_col" . to_owned( ) ,
904+ quote_style: None
905+ }
906+ } ,
907+ select. projection[ 1 ]
908+ ) ;
909+ }
910+
872911#[ test]
873912fn parse_ilike ( ) {
874913 fn chk ( negated : bool ) {
@@ -881,7 +920,7 @@ fn parse_ilike() {
881920 Expr :: ILike {
882921 expr: Box :: new( Expr :: Identifier ( Ident :: new( "name" ) ) ) ,
883922 negated,
884- pattern: Box :: new( Value :: SingleQuotedString ( "%a" . to_string( ) ) ) ,
923+ pattern: Box :: new( Expr :: Value ( Value :: SingleQuotedString ( "%a" . to_string( ) ) ) ) ,
885924 escape_char: None
886925 } ,
887926 select. selection. unwrap( )
@@ -897,7 +936,7 @@ fn parse_ilike() {
897936 Expr :: ILike {
898937 expr: Box :: new( Expr :: Identifier ( Ident :: new( "name" ) ) ) ,
899938 negated,
900- pattern: Box :: new( Value :: SingleQuotedString ( "%a" . to_string( ) ) ) ,
939+ pattern: Box :: new( Expr :: Value ( Value :: SingleQuotedString ( "%a" . to_string( ) ) ) ) ,
901940 escape_char: Some ( '^' )
902941 } ,
903942 select. selection. unwrap( )
@@ -914,7 +953,7 @@ fn parse_ilike() {
914953 Expr :: IsNull ( Box :: new( Expr :: ILike {
915954 expr: Box :: new( Expr :: Identifier ( Ident :: new( "name" ) ) ) ,
916955 negated,
917- pattern: Box :: new( Value :: SingleQuotedString ( "%a" . to_string( ) ) ) ,
956+ pattern: Box :: new( Expr :: Value ( Value :: SingleQuotedString ( "%a" . to_string( ) ) ) ) ,
918957 escape_char: None
919958 } ) ) ,
920959 select. selection. unwrap( )
@@ -936,7 +975,7 @@ fn parse_similar_to() {
936975 Expr :: SimilarTo {
937976 expr: Box :: new( Expr :: Identifier ( Ident :: new( "name" ) ) ) ,
938977 negated,
939- pattern: Box :: new( Value :: SingleQuotedString ( "%a" . to_string( ) ) ) ,
978+ pattern: Box :: new( Expr :: Value ( Value :: SingleQuotedString ( "%a" . to_string( ) ) ) ) ,
940979 escape_char: None
941980 } ,
942981 select. selection. unwrap( )
@@ -952,7 +991,7 @@ fn parse_similar_to() {
952991 Expr :: SimilarTo {
953992 expr: Box :: new( Expr :: Identifier ( Ident :: new( "name" ) ) ) ,
954993 negated,
955- pattern: Box :: new( Value :: SingleQuotedString ( "%a" . to_string( ) ) ) ,
994+ pattern: Box :: new( Expr :: Value ( Value :: SingleQuotedString ( "%a" . to_string( ) ) ) ) ,
956995 escape_char: Some ( '\\' )
957996 } ,
958997 select. selection. unwrap( )
@@ -968,7 +1007,7 @@ fn parse_similar_to() {
9681007 Expr :: IsNull ( Box :: new( Expr :: SimilarTo {
9691008 expr: Box :: new( Expr :: Identifier ( Ident :: new( "name" ) ) ) ,
9701009 negated,
971- pattern: Box :: new( Value :: SingleQuotedString ( "%a" . to_string( ) ) ) ,
1010+ pattern: Box :: new( Expr :: Value ( Value :: SingleQuotedString ( "%a" . to_string( ) ) ) ) ,
9721011 escape_char: Some ( '\\' )
9731012 } ) ) ,
9741013 select. selection. unwrap( )
0 commit comments