File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -524,12 +524,12 @@ impl fmt::Display for WildcardAdditionalOptions {
524524#[ cfg_attr( feature = "serde" , derive( Serialize , Deserialize ) ) ]
525525#[ cfg_attr( feature = "visitor" , derive( Visit , VisitMut ) ) ]
526526pub struct IlikeSelectItem {
527- pub pattern : Expr ,
527+ pub pattern : String ,
528528}
529529
530530impl fmt:: Display for IlikeSelectItem {
531531 fn fmt ( & self , f : & mut fmt:: Formatter ) -> fmt:: Result {
532- write ! ( f, "ILIKE {} " , self . pattern) ?;
532+ write ! ( f, "ILIKE '{}' " , self . pattern) ?;
533533 Ok ( ( ) )
534534 }
535535}
Original file line number Diff line number Diff line change @@ -8818,10 +8818,8 @@ impl<'a> Parser<'a> {
88188818 & mut self ,
88198819 ) -> Result < Option < IlikeSelectItem > , ParserError > {
88208820 let opt_ilike = if self . parse_keyword ( Keyword :: ILIKE ) {
8821- let pattern = self . parse_value ( ) ?;
8822- Some ( IlikeSelectItem {
8823- pattern : Expr :: Value ( pattern) ,
8824- } )
8821+ let pattern = self . parse_literal_string ( ) ?;
8822+ Some ( IlikeSelectItem { pattern } )
88258823 } else {
88268824 None
88278825 } ;
Original file line number Diff line number Diff line change @@ -1621,13 +1621,31 @@ fn test_select_wildcard_with_ilike() {
16211621 let select = snowflake_and_generic ( ) . verified_only_select ( r#"SELECT * ILIKE '%id%' FROM tbl"# ) ;
16221622 let expected = SelectItem :: Wildcard ( WildcardAdditionalOptions {
16231623 opt_ilike : Some ( IlikeSelectItem {
1624- pattern : Expr :: Value ( Value :: SingleQuotedString ( "%id%" . to_owned ( ) ) ) ,
1624+ pattern : "%id%" . to_owned ( ) ,
16251625 } ) ,
16261626 ..Default :: default ( )
16271627 } ) ;
16281628 assert_eq ! ( expected, select. projection[ 0 ] ) ;
16291629}
16301630
1631+ #[ test]
1632+ fn test_select_wildcard_with_ilike_non_literal ( ) {
1633+ let res = snowflake ( ) . parse_sql_statements ( r#"SELECT * ILIKE %id FROM tbl"# ) ;
1634+ assert_eq ! (
1635+ res. unwrap_err( ) . to_string( ) ,
1636+ "sql parser error: Expected literal string, found: %"
1637+ ) ;
1638+ }
1639+
1640+ #[ test]
1641+ fn test_select_wildcard_with_ilike_number ( ) {
1642+ let res = snowflake ( ) . parse_sql_statements ( r#"SELECT * ILIKE 42 FROM tbl"# ) ;
1643+ assert_eq ! (
1644+ res. unwrap_err( ) . to_string( ) ,
1645+ "sql parser error: Expected literal string, found: 42"
1646+ ) ;
1647+ }
1648+
16311649#[ test]
16321650fn test_select_wildcard_with_ilike_replace ( ) {
16331651 let res = snowflake ( ) . parse_sql_statements ( r#"SELECT * ILIKE '%id%' EXCLUDE col FROM tbl"# ) ;
You can’t perform that action at this time.
0 commit comments