rbatis_codegen/
into_sql.rs

1use crate::ops::AsProxy;
2use rbs::Value;
3use std::borrow::Cow;
4
5pub trait IntoSql {
6    fn sql(&self) -> String;
7}
8
9impl IntoSql for bool {
10    fn sql(&self) -> String {
11        self.to_string()
12    }
13}
14
15impl IntoSql for String {
16    fn sql(&self) -> String {
17        self.to_string()
18    }
19}
20
21impl IntoSql for &str {
22    fn sql(&self) -> String {
23        self.to_string()
24    }
25}
26impl IntoSql for i32 {
27    fn sql(&self) -> String {
28        self.to_string()
29    }
30}
31
32impl IntoSql for i64 {
33    fn sql(&self) -> String {
34        self.to_string()
35    }
36}
37
38impl IntoSql for f32 {
39    fn sql(&self) -> String {
40        self.to_string()
41    }
42}
43
44impl IntoSql for f64 {
45    fn sql(&self) -> String {
46        self.to_string()
47    }
48}
49
50impl IntoSql for u32 {
51    fn sql(&self) -> String {
52        self.to_string()
53    }
54}
55
56impl IntoSql for u64 {
57    fn sql(&self) -> String {
58        self.to_string()
59    }
60}
61
62impl IntoSql for Value {
63    fn sql(&self) -> String {
64        match self {
65            Value::Map(m) => {
66                let mut sql = "".to_string();
67                for (k, v) in m {
68                    let k_str = k.clone().string();
69                    sql.push_str(&k_str);
70                    if v.is_str() {
71                        sql.push_str("'");
72                        sql.push_str(&v.string());
73                        sql.push_str("'");
74                        sql.push_str(" ");
75                    } else if v.is_array() {
76                        sql.push_str(&v.sql());
77                        sql.push_str(" ");
78                    } else {
79                        sql.push_str(&v.string());
80                        sql.push_str(" ");
81                    }
82                }
83                sql
84            }
85            Value::Array(arr) => {
86                let mut sql = "(".to_string();
87                for x in arr {
88                    if x.is_str() {
89                        sql.push_str("'");
90                        sql.push_str(&x.string());
91                        sql.push_str("'");
92                        sql.push_str(",");
93                    } else {
94                        sql.push_str(&x.string());
95                        sql.push_str(",");
96                    }
97                }
98                if arr.len() != 0 {
99                    sql.pop();
100                }
101                sql.push_str(")");
102                sql
103            }
104            x => {
105                if x.is_str() {
106                    let mut sql = String::new();
107                    sql.push_str("'");
108                    sql.push_str(&x.clone().string());
109                    sql.push_str("'");
110                    sql
111                } else {
112                    x.string()
113                }
114            }
115        }
116    }
117}
118
119impl IntoSql for &Value {
120    fn sql(&self) -> String {
121        match self {
122            Value::Map(m) => {
123                let mut sql = "".to_string();
124                for (k, v) in m {
125                    let k_str = k.clone().string();
126                    sql.push_str(&k_str);
127                    if v.is_str() {
128                        sql.push_str("'");
129                        sql.push_str(&v.string());
130                        sql.push_str("'");
131                        sql.push_str(" ");
132                    } else if v.is_array() {
133                        sql.push_str(&v.sql());
134                        sql.push_str(" ");
135                    } else {
136                        sql.push_str(&v.string());
137                        sql.push_str(" ");
138                    }
139                }
140                sql
141            }
142            Value::Array(arr) => {
143                let mut sql = "(".to_string();
144                for x in arr {
145                    if x.is_str() {
146                        sql.push_str("'");
147                        sql.push_str(&x.string());
148                        sql.push_str("'");
149                        sql.push_str(",");
150                    } else {
151                        sql.push_str(&x.string());
152                        sql.push_str(",");
153                    }
154                }
155                if arr.len() != 0 {
156                    sql.pop();
157                }
158                sql.push_str(")");
159                sql
160            }
161            x => {
162                if x.is_str() {
163                    let mut sql = String::new();
164                    sql.push_str("'");
165                    sql.push_str(&(**x).clone().string());
166                    sql.push_str("'");
167                    sql
168                } else {
169                    x.string()
170                }
171            }
172        }
173    }
174}
175
176impl IntoSql for Cow<'_, Value> {
177    fn sql(&self) -> String {
178        self.as_ref().sql()
179    }
180}