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 {
76                        sql.push_str(&v.string());
77                        sql.push_str(" ");
78                    }
79                }
80                sql
81            }
82            Value::Array(arr) => {
83                let mut sql = "(".to_string();
84                for x in arr {
85                    if x.is_str() {
86                        sql.push_str("'");
87                        sql.push_str(&x.string());
88                        sql.push_str("'");
89                        sql.push_str(",");
90                    } else {
91                        sql.push_str(&x.string());
92                        sql.push_str(",");
93                    }
94                }
95                if arr.len() != 0 {
96                    sql.pop();
97                    sql.push_str(")");
98                }
99                sql
100            }
101            x => {
102                if x.is_str() {
103                    let mut sql = String::new();
104                    sql.push_str("'");
105                    sql.push_str(&x.clone().string());
106                    sql.push_str("'");
107                    sql
108                } else {
109                    x.string()
110                }
111            }
112        }
113    }
114}
115
116impl IntoSql for &Value {
117    fn sql(&self) -> String {
118        match self {
119            Value::Map(m) => {
120                let mut sql = "".to_string();
121                for (k, v) in m {
122                    let k_str = k.clone().string();
123                    sql.push_str(&k_str);
124                    if v.is_str() {
125                        sql.push_str("'");
126                        sql.push_str(&v.string());
127                        sql.push_str("'");
128                        sql.push_str(" ");
129                    } else {
130                        sql.push_str(&v.string());
131                        sql.push_str(" ");
132                    }
133                }
134                sql
135            }
136            Value::Array(arr) => {
137                let mut sql = "(".to_string();
138                for x in arr {
139                    if x.is_str() {
140                        sql.push_str("'");
141                        sql.push_str(&x.string());
142                        sql.push_str("'");
143                        sql.push_str(",");
144                    } else {
145                        sql.push_str(&x.string());
146                        sql.push_str(",");
147                    }
148                }
149                if arr.len() != 0 {
150                    sql.pop();
151                    sql.push_str(")");
152                }
153                sql
154            }
155            x => {
156                if x.is_str() {
157                    let mut sql = String::new();
158                    sql.push_str("'");
159                    sql.push_str(&(**x).clone().string());
160                    sql.push_str("'");
161                    sql
162                } else {
163                    x.string()
164                }
165            }
166        }
167    }
168}
169
170impl IntoSql for Cow<'_, Value> {
171    fn sql(&self) -> String {
172        self.as_ref().sql()
173    }
174}