sqlparser_mysql/base/
operator.rs

1use std::fmt;
2use std::fmt::Display;
3
4use nom::branch::alt;
5use nom::bytes::complete::tag_no_case;
6use nom::combinator::map;
7use nom::IResult;
8
9use base::error::ParseSQLError;
10
11/// Parse binary comparison operators
12#[derive(Clone, Debug, Eq, Hash, PartialEq, Serialize, Deserialize)]
13pub enum Operator {
14    Not,
15    And,
16    Or,
17    Like,
18    NotLike,
19    Equal,
20    NotEqual,
21    Greater,
22    GreaterOrEqual,
23    Less,
24    LessOrEqual,
25    In,
26    NotIn,
27    Is,
28}
29
30impl Operator {
31    pub fn parse(i: &str) -> IResult<&str, Operator, ParseSQLError<&str>> {
32        alt((
33            map(tag_no_case("NOT_LIKE"), |_| Operator::NotLike),
34            map(tag_no_case("LIKE"), |_| Operator::Like),
35            map(tag_no_case("!="), |_| Operator::NotEqual),
36            map(tag_no_case("<>"), |_| Operator::NotEqual),
37            map(tag_no_case(">="), |_| Operator::GreaterOrEqual),
38            map(tag_no_case("<="), |_| Operator::LessOrEqual),
39            map(tag_no_case("="), |_| Operator::Equal),
40            map(tag_no_case("<"), |_| Operator::Less),
41            map(tag_no_case(">"), |_| Operator::Greater),
42            map(tag_no_case("IN"), |_| Operator::In),
43        ))(i)
44    }
45}
46
47impl Display for Operator {
48    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
49        let op = match *self {
50            Operator::Not => "NOT",
51            Operator::And => "AND",
52            Operator::Or => "OR",
53            Operator::Like => "LIKE",
54            Operator::NotLike => "NOT_LIKE",
55            Operator::Equal => "=",
56            Operator::NotEqual => "!=",
57            Operator::Greater => ">",
58            Operator::GreaterOrEqual => ">=",
59            Operator::Less => "<",
60            Operator::LessOrEqual => "<=",
61            Operator::In => "IN",
62            Operator::NotIn => "NOT IN",
63            Operator::Is => "IS",
64        };
65        write!(f, "{}", op)
66    }
67}