Skip to content

Commit fc71719

Browse files
authored
add unknown, is not true/false/unknown (#583)
1 parent 50aafa8 commit fc71719

File tree

2 files changed

+20
-0
lines changed

2 files changed

+20
-0
lines changed

src/ast/mod.rs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -227,12 +227,20 @@ pub enum Expr {
227227
CompositeAccess { expr: Box<Expr>, key: Ident },
228228
/// `IS FALSE` operator
229229
IsFalse(Box<Expr>),
230+
/// `IS NOT FALSE` operator
231+
IsNotFalse(Box<Expr>),
230232
/// `IS TRUE` operator
231233
IsTrue(Box<Expr>),
234+
/// `IS NOT TRUE` operator
235+
IsNotTrue(Box<Expr>),
232236
/// `IS NULL` operator
233237
IsNull(Box<Expr>),
234238
/// `IS NOT NULL` operator
235239
IsNotNull(Box<Expr>),
240+
/// `IS UNKNOWN` operator
241+
IsUnknown(Box<Expr>),
242+
/// `IS NOT UNKNOWN` operator
243+
IsNotUnknown(Box<Expr>),
236244
/// `IS DISTINCT FROM` operator
237245
IsDistinctFrom(Box<Expr>, Box<Expr>),
238246
/// `IS NOT DISTINCT FROM` operator
@@ -412,9 +420,13 @@ impl fmt::Display for Expr {
412420
}
413421
Expr::CompoundIdentifier(s) => write!(f, "{}", display_separated(s, ".")),
414422
Expr::IsTrue(ast) => write!(f, "{} IS TRUE", ast),
423+
Expr::IsNotTrue(ast) => write!(f, "{} IS NOT TRUE", ast),
415424
Expr::IsFalse(ast) => write!(f, "{} IS FALSE", ast),
425+
Expr::IsNotFalse(ast) => write!(f, "{} IS NOT FALSE", ast),
416426
Expr::IsNull(ast) => write!(f, "{} IS NULL", ast),
417427
Expr::IsNotNull(ast) => write!(f, "{} IS NOT NULL", ast),
428+
Expr::IsUnknown(ast) => write!(f, "{} IS UNKNOWN", ast),
429+
Expr::IsNotUnknown(ast) => write!(f, "{} IS NOT UNKNOWN", ast),
418430
Expr::InList {
419431
expr,
420432
list,

src/parser.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1255,8 +1255,16 @@ impl<'a> Parser<'a> {
12551255
Ok(Expr::IsNotNull(Box::new(expr)))
12561256
} else if self.parse_keywords(&[Keyword::TRUE]) {
12571257
Ok(Expr::IsTrue(Box::new(expr)))
1258+
} else if self.parse_keywords(&[Keyword::NOT, Keyword::TRUE]) {
1259+
Ok(Expr::IsNotTrue(Box::new(expr)))
12581260
} else if self.parse_keywords(&[Keyword::FALSE]) {
12591261
Ok(Expr::IsFalse(Box::new(expr)))
1262+
} else if self.parse_keywords(&[Keyword::NOT, Keyword::FALSE]) {
1263+
Ok(Expr::IsNotFalse(Box::new(expr)))
1264+
} else if self.parse_keywords(&[Keyword::UNKNOWN]) {
1265+
Ok(Expr::IsUnknown(Box::new(expr)))
1266+
} else if self.parse_keywords(&[Keyword::NOT, Keyword::UNKNOWN]) {
1267+
Ok(Expr::IsNotUnknown(Box::new(expr)))
12601268
} else if self.parse_keywords(&[Keyword::DISTINCT, Keyword::FROM]) {
12611269
let expr2 = self.parse_expr()?;
12621270
Ok(Expr::IsDistinctFrom(Box::new(expr), Box::new(expr2)))

0 commit comments

Comments
 (0)