Skip to content

Commit 495465d

Browse files
committed
snowflake: ilike
1 parent 5b06853 commit 495465d

3 files changed

Lines changed: 14 additions & 2 deletions

File tree

src/ast/operator.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,8 +69,10 @@ pub enum BinaryOperator {
6969
NotEq,
7070
And,
7171
Or,
72+
Ilike,
7273
Like,
7374
NotLike,
75+
NotIlike,
7476
JsonIndex,
7577
BitwiseOr,
7678
BitwiseAnd,
@@ -98,7 +100,9 @@ impl fmt::Display for BinaryOperator {
98100
BinaryOperator::And => "AND",
99101
BinaryOperator::Or => "OR",
100102
BinaryOperator::Like => "LIKE",
103+
BinaryOperator::Ilike => "ILIKE",
101104
BinaryOperator::NotLike => "NOT LIKE",
105+
BinaryOperator::NotIlike => "NOT ILIKE",
102106
BinaryOperator::JsonIndex => ":",
103107
BinaryOperator::BitwiseOr => "|",
104108
BinaryOperator::BitwiseAnd => "&",

src/dialect/keywords.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -228,6 +228,7 @@ define_keywords!(
228228
HOUR,
229229
IDENTITY,
230230
IF,
231+
ILIKE,
231232
IN,
232233
INDEX,
233234
INDICATOR,

src/parser.rs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -730,9 +730,12 @@ impl<'a> Parser<'a> {
730730
Keyword::AND => Some(BinaryOperator::And),
731731
Keyword::OR => Some(BinaryOperator::Or),
732732
Keyword::LIKE => Some(BinaryOperator::Like),
733+
Keyword::ILIKE => Some(BinaryOperator::Ilike),
733734
Keyword::NOT => {
734735
if self.parse_keyword(Keyword::LIKE) {
735736
Some(BinaryOperator::NotLike)
737+
} else if self.parse_keyword(Keyword::ILIKE) {
738+
Some(BinaryOperator::NotIlike)
736739
} else {
737740
None
738741
}
@@ -850,13 +853,17 @@ impl<'a> Parser<'a> {
850853
// precedence.
851854
Token::Word(w) if w.keyword == Keyword::IN => Ok(Self::BETWEEN_PREC),
852855
Token::Word(w) if w.keyword == Keyword::BETWEEN => Ok(Self::BETWEEN_PREC),
853-
Token::Word(w) if w.keyword == Keyword::LIKE => Ok(Self::BETWEEN_PREC),
856+
Token::Word(w) if w.keyword == Keyword::LIKE || w.keyword == Keyword::ILIKE => {
857+
Ok(Self::BETWEEN_PREC)
858+
}
854859
_ => Ok(0),
855860
},
856861
Token::Word(w) if w.keyword == Keyword::IS => Ok(17),
857862
Token::Word(w) if w.keyword == Keyword::IN => Ok(Self::BETWEEN_PREC),
858863
Token::Word(w) if w.keyword == Keyword::BETWEEN => Ok(Self::BETWEEN_PREC),
859-
Token::Word(w) if w.keyword == Keyword::LIKE => Ok(Self::BETWEEN_PREC),
864+
Token::Word(w) if w.keyword == Keyword::LIKE || w.keyword == Keyword::ILIKE => {
865+
Ok(Self::BETWEEN_PREC)
866+
}
860867
Token::Eq | Token::Lt | Token::LtEq | Token::Neq | Token::Gt | Token::GtEq => Ok(20),
861868
Token::Pipe => Ok(21),
862869
Token::Caret | Token::Sharp | Token::ShiftRight | Token::ShiftLeft => Ok(22),

0 commit comments

Comments
 (0)