Change the IS NULL filter syntax to use the IS keyword

This commit is contained in:
Clément Renault
2023-03-14 10:31:04 +01:00
parent c25779afba
commit 030263caa3
3 changed files with 21 additions and 11 deletions

View File

@ -45,18 +45,19 @@ 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)?;
/// null = value "IS" WS+ "NULL"
pub fn parse_is_null(input: Span) -> IResult<FilterCondition> {
let (input, key) = parse_value(input)?;
let (input, _) = tuple((tag("IS"), multispace1, 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> {
/// null = value "IS" WS+ "NOT" WS+ "NULL"
pub fn parse_is_not_null(input: Span) -> IResult<FilterCondition> {
let (input, key) = parse_value(input)?;
let (input, _) = tuple((tag("NOT"), multispace1, tag("NULL")))(input)?;
let (input, _) = tuple((tag("IS"), multispace1, tag("NOT"), multispace1, tag("NULL")))(input)?;
Ok((input, FilterCondition::Not(Box::new(FilterCondition::Condition { fid: key, op: Null }))))
}