tank_core/expression/
op_precedence.rs

1use crate::{Expression, Value, writer::SqlWriter};
2
3/// Provides numeric precedence for expressions allowing dialect writers to insert parentheses.
4pub trait OpPrecedence {
5    /// Lower numbers bind weaker; writers parenthesize when child precedence <= operator precedence.
6    fn precedence(&self, writer: &dyn SqlWriter) -> i32;
7}
8
9impl<T: OpPrecedence> OpPrecedence for &T {
10    fn precedence(&self, writer: &dyn SqlWriter) -> i32 {
11        (*self).precedence(writer)
12    }
13}
14
15impl OpPrecedence for &dyn Expression {
16    fn precedence(&self, writer: &dyn SqlWriter) -> i32 {
17        (*self).precedence(writer)
18    }
19}
20
21impl OpPrecedence for () {
22    fn precedence(&self, _writer: &dyn SqlWriter) -> i32 {
23        1_000_000_000
24    }
25}
26
27impl OpPrecedence for bool {
28    fn precedence(&self, _writer: &dyn SqlWriter) -> i32 {
29        0
30    }
31}
32
33impl OpPrecedence for Value {
34    fn precedence(&self, _writer: &dyn SqlWriter) -> i32 {
35        0
36    }
37}