tank_core/expression/
unary_op.rs

1use crate::{
2    Expression, OpPrecedence,
3    writer::{Context, SqlWriter},
4};
5
6#[derive(Clone, Copy, PartialEq, Debug)]
7pub enum UnaryOpType {
8    Negative,
9    Not,
10}
11impl OpPrecedence for UnaryOpType {
12    fn precedence(&self, writer: &dyn SqlWriter) -> i32 {
13        writer.expression_unary_op_precedence(self)
14    }
15}
16
17#[derive(Debug)]
18pub struct UnaryOp<V: Expression> {
19    pub op: UnaryOpType,
20    pub arg: V,
21}
22
23impl<E: Expression> OpPrecedence for UnaryOp<E> {
24    fn precedence(&self, writer: &dyn SqlWriter) -> i32 {
25        writer.expression_unary_op_precedence(&self.op)
26    }
27}
28
29impl<E: Expression> Expression for UnaryOp<E> {
30    fn write_query(&self, writer: &dyn SqlWriter, context: Context, buff: &mut String) {
31        writer.write_expression_unary_op(
32            context,
33            buff,
34            &UnaryOp {
35                op: self.op,
36                arg: &self.arg,
37            },
38        )
39    }
40}