1use core::fmt;
14
15#[cfg(not(feature = "std"))]
16use alloc::{string::String, vec::Vec};
17
18#[cfg(feature = "serde")]
19use serde::{Deserialize, Serialize};
20
21#[cfg(feature = "visitor")]
22use sqlparser_derive::{Visit, VisitMut};
23
24use super::display_separated;
25
26#[derive(Debug, Copy, Clone, PartialEq, PartialOrd, Eq, Ord, Hash)]
28#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
29#[cfg_attr(feature = "visitor", derive(Visit, VisitMut))]
30pub enum UnaryOperator {
31 Plus,
33 Minus,
35 Not,
37 PGBitwiseNot,
39 PGSquareRoot,
41 PGCubeRoot,
43 PGPostfixFactorial,
45 PGPrefixFactorial,
47 PGAbs,
49}
50
51impl fmt::Display for UnaryOperator {
52 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
53 f.write_str(match self {
54 UnaryOperator::Plus => "+",
55 UnaryOperator::Minus => "-",
56 UnaryOperator::Not => "NOT",
57 UnaryOperator::PGBitwiseNot => "~",
58 UnaryOperator::PGSquareRoot => "|/",
59 UnaryOperator::PGCubeRoot => "||/",
60 UnaryOperator::PGPostfixFactorial => "!",
61 UnaryOperator::PGPrefixFactorial => "!!",
62 UnaryOperator::PGAbs => "@",
63 })
64 }
65}
66
67#[derive(Debug, Clone, PartialEq, PartialOrd, Eq, Ord, Hash)]
69#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
70#[cfg_attr(feature = "visitor", derive(Visit, VisitMut))]
71pub enum BinaryOperator {
72 Plus,
74 Minus,
76 Multiply,
78 Divide,
80 Modulo,
82 StringConcat,
84 Gt,
86 Lt,
88 GtEq,
90 LtEq,
92 Spaceship,
94 Eq,
96 NotEq,
98 And,
100 Or,
102 Xor,
104 BitwiseOr,
106 BitwiseAnd,
108 BitwiseXor,
110 DuckIntegerDivide,
112 MyIntegerDivide,
114 Custom(String),
116 PGBitwiseXor,
118 PGBitwiseShiftLeft,
120 PGBitwiseShiftRight,
122 PGExp,
124 PGOverlap,
126 PGRegexMatch,
128 PGRegexIMatch,
130 PGRegexNotMatch,
132 PGRegexNotIMatch,
134 PGCustomBinaryOperator(Vec<String>),
139}
140
141impl fmt::Display for BinaryOperator {
142 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
143 match self {
144 BinaryOperator::Plus => f.write_str("+"),
145 BinaryOperator::Minus => f.write_str("-"),
146 BinaryOperator::Multiply => f.write_str("*"),
147 BinaryOperator::Divide => f.write_str("/"),
148 BinaryOperator::Modulo => f.write_str("%"),
149 BinaryOperator::StringConcat => f.write_str("||"),
150 BinaryOperator::Gt => f.write_str(">"),
151 BinaryOperator::Lt => f.write_str("<"),
152 BinaryOperator::GtEq => f.write_str(">="),
153 BinaryOperator::LtEq => f.write_str("<="),
154 BinaryOperator::Spaceship => f.write_str("<=>"),
155 BinaryOperator::Eq => f.write_str("="),
156 BinaryOperator::NotEq => f.write_str("<>"),
157 BinaryOperator::And => f.write_str("AND"),
158 BinaryOperator::Or => f.write_str("OR"),
159 BinaryOperator::Xor => f.write_str("XOR"),
160 BinaryOperator::BitwiseOr => f.write_str("|"),
161 BinaryOperator::BitwiseAnd => f.write_str("&"),
162 BinaryOperator::BitwiseXor => f.write_str("^"),
163 BinaryOperator::DuckIntegerDivide => f.write_str("//"),
164 BinaryOperator::MyIntegerDivide => f.write_str("DIV"),
165 BinaryOperator::Custom(s) => f.write_str(s),
166 BinaryOperator::PGBitwiseXor => f.write_str("#"),
167 BinaryOperator::PGBitwiseShiftLeft => f.write_str("<<"),
168 BinaryOperator::PGBitwiseShiftRight => f.write_str(">>"),
169 BinaryOperator::PGExp => f.write_str("^"),
170 BinaryOperator::PGOverlap => f.write_str("&&"),
171 BinaryOperator::PGRegexMatch => f.write_str("~"),
172 BinaryOperator::PGRegexIMatch => f.write_str("~*"),
173 BinaryOperator::PGRegexNotMatch => f.write_str("!~"),
174 BinaryOperator::PGRegexNotIMatch => f.write_str("!~*"),
175 BinaryOperator::PGCustomBinaryOperator(idents) => {
176 write!(f, "OPERATOR({})", display_separated(idents, "."))
177 }
178 }
179 }
180}