Skip to content

Commit 053b251

Browse files
fix: pr comments
1 parent 5aa4d9a commit 053b251

3 files changed

Lines changed: 23 additions & 7 deletions

File tree

src/ast/query.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff 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))]
526526
pub struct IlikeSelectItem {
527-
pub pattern: Expr,
527+
pub pattern: String,
528528
}
529529

530530
impl 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
}

src/parser/mod.rs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff 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
};

tests/sqlparser_snowflake.rs

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff 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]
16321650
fn test_select_wildcard_with_ilike_replace() {
16331651
let res = snowflake().parse_sql_statements(r#"SELECT * ILIKE '%id%' EXCLUDE col FROM tbl"#);

0 commit comments

Comments
 (0)