tank_core/expression/
operand.rs1use crate::{
2 Expression, OpPrecedence, Value,
3 writer::{Context, SqlWriter},
4};
5
6#[derive(Debug)]
7pub enum Operand<'a> {
8 LitBool(bool),
9 LitFloat(f64),
10 LitIdent(&'a str),
11 LitField(&'a [&'a str]),
12 LitInt(i128),
13 LitStr(&'a str),
14 LitArray(&'a [Operand<'a>]),
15 LitTuple(&'a [Operand<'a>]),
16 Null,
17 Type(Value),
18 Variable(Value),
19 Call(&'static str, &'a [&'a dyn Expression]),
20 Asterisk,
21 QuestionMark,
22}
23
24impl OpPrecedence for Operand<'_> {
25 fn precedence(&self, _writer: &dyn SqlWriter) -> i32 {
26 1_000_000
27 }
28}
29
30impl Expression for Operand<'_> {
31 fn write_query(&self, writer: &dyn SqlWriter, context: &mut Context, out: &mut String) {
32 writer.write_expression_operand(context, out, self)
33 }
34}
35
36impl PartialEq for Operand<'_> {
37 fn eq(&self, other: &Self) -> bool {
38 match (self, other) {
39 (Self::LitBool(l), Self::LitBool(r)) => l == r,
40 (Self::LitFloat(l), Self::LitFloat(r)) => l == r,
41 (Self::LitIdent(l), Self::LitIdent(r)) => l == r,
42 (Self::LitField(l), Self::LitField(r)) => l == r,
43 (Self::LitInt(l), Self::LitInt(r)) => l == r,
44 (Self::LitStr(l), Self::LitStr(r)) => l == r,
45 (Self::LitArray(l), Self::LitArray(r)) => l == r,
46 (Self::LitTuple(l), Self::LitTuple(r)) => l == r,
47 (Self::Type(l), Self::Type(r)) => l.same_type(r),
48 (Self::Variable(l), Self::Variable(r)) => l == r,
49 (Self::Asterisk, Self::Asterisk) => true,
50 (Self::QuestionMark, Self::QuestionMark) => true,
51 _ => false,
52 }
53 }
54}