Introduce the NULL and NOT value NULL operator

This commit is contained in:
Clément Renault
2023-03-08 16:57:42 +01:00
parent 43ff236df8
commit 7c0cd7172d
4 changed files with 48 additions and 4 deletions

View File

@ -20,6 +20,7 @@ pub enum Condition<'a> {
GreaterThanOrEqual(Token<'a>),
Equal(Token<'a>),
NotEqual(Token<'a>),
Null,
Exists,
LowerThan(Token<'a>),
LowerThanOrEqual(Token<'a>),
@ -44,6 +45,21 @@ pub fn parse_condition(input: Span) -> IResult<FilterCondition> {
Ok((input, condition))
}
/// null = value "NULL"
pub fn parse_null(input: Span) -> IResult<FilterCondition> {
let (input, key) = terminated(parse_value, tag("NULL"))(input)?;
Ok((input, FilterCondition::Condition { fid: key, op: Null }))
}
/// null = value "NOT" WS+ "NULL"
pub fn parse_not_null(input: Span) -> IResult<FilterCondition> {
let (input, key) = parse_value(input)?;
let (input, _) = tuple((tag("NOT"), multispace1, tag("NULL")))(input)?;
Ok((input, FilterCondition::Not(Box::new(FilterCondition::Condition { fid: key, op: Null }))))
}
/// exist = value "EXISTS"
pub fn parse_exists(input: Span) -> IResult<FilterCondition> {
let (input, key) = terminated(parse_value, tag("EXISTS"))(input)?;