taitan_orm_parser/template_parser/structs/atomics/
generic_atomic.rs

1use crate::template::MaybeValue;
2use crate::template_parser::structs::atomics::postgres_atomic::PostgresAtomic;
3use crate::template_parser::structs::bool_value::Bool;
4use crate::template_parser::structs::text::Text;
5use crate::template_parser::to_sql::SqlSegment;
6use crate::{Number, Operator, Sign, ToSqlSegment};
7use crate::template_parser::structs::atomics::mysql_atomic::MySqlAtomic;
8use crate::template_parser::structs::atomics::sqlite_atomic::SqliteAtomic;
9
10#[derive(Debug, Clone, PartialEq)]
11pub enum GenericAtomic {
12    Null,
13    Number(Number),
14    Text(Text),
15    Bool(Bool),
16    Operator(Operator), // 各类操作符+-*/% like in = > < <> !=
17    Maybe(MaybeValue),  // 可能是Number/Text/Bool/Operator
18    Sign(Sign),         // 各种特殊符号,例如括号()[]{}等
19    Keyword(&'static str),
20}
21
22impl From<PostgresAtomic> for GenericAtomic {
23    fn from(pg_atomic: PostgresAtomic) -> Self {
24        match pg_atomic {
25            PostgresAtomic::Null => GenericAtomic::Null,
26            PostgresAtomic::Number(n) => Self::Number(n),
27            PostgresAtomic::Text(t) => Self::Text(t),
28            PostgresAtomic::Bool(b) => Self::Bool(b),
29            PostgresAtomic::Operator(o) => Self::Operator(o),
30            PostgresAtomic::Maybe(m) => Self::Maybe(m),
31            PostgresAtomic::Sign(s) => Self::Sign(s),
32            PostgresAtomic::Keyword(k) => Self::Keyword(k.0),
33        }
34    }
35}
36
37impl From<MySqlAtomic> for GenericAtomic  {
38    fn from(pg_atomic: MySqlAtomic) -> Self {
39        match pg_atomic.into() {
40            MySqlAtomic::Null => GenericAtomic::Null,
41            MySqlAtomic::Number(n) => Self::Number(n),
42            MySqlAtomic::Text(t) => Self::Text(t),
43            MySqlAtomic::Bool(b) => Self::Bool(b),
44            MySqlAtomic::Operator(o) => Self::Operator(o),
45            MySqlAtomic::Maybe(m) => Self::Maybe(m),
46            MySqlAtomic::Sign(s) => Self::Sign(s),
47            MySqlAtomic::Keyword(k) => Self::Keyword(k.0),
48        }
49    }
50}
51
52impl From<SqliteAtomic> for GenericAtomic {
53    fn from(pg_atomic: SqliteAtomic) -> Self {
54        match pg_atomic.into() {
55            SqliteAtomic::Null => GenericAtomic::Null,
56            SqliteAtomic::Number(n) => Self::Number(n),
57            SqliteAtomic::Text(t) => Self::Text(t),
58            SqliteAtomic::Bool(b) => Self::Bool(b),
59            SqliteAtomic::Operator(o) => Self::Operator(o),
60            SqliteAtomic::Maybe(m) => Self::Maybe(m),
61            SqliteAtomic::Sign(s) => Self::Sign(s),
62            SqliteAtomic::Keyword(k) => Self::Keyword(k.0),
63        }
64    }
65}
66impl ToSqlSegment for GenericAtomic {
67    fn gen_sql_segment(&self) -> SqlSegment {
68        match self {
69            GenericAtomic::Null=>SqlSegment::Simple("NULL".to_string()),
70            GenericAtomic::Sign(s) => SqlSegment::Simple(s.to_string()),
71            GenericAtomic::Maybe(m) => SqlSegment::Simple(m.gen_sql_segment().to_sql(false).to_string()),
72            GenericAtomic::Operator(b) => SqlSegment::Simple(b.to_string()),
73            GenericAtomic::Bool(b) => SqlSegment::Simple(b.to_string()),
74            GenericAtomic::Text(t) => SqlSegment::Simple(t.to_string()),
75            GenericAtomic::Number(n) => SqlSegment::Simple(n.to_string()),
76            GenericAtomic::Keyword(k) => SqlSegment::Simple(k.to_string()),
77        }
78    }
79}