rbatis_codegen/
into_sql.rs1use 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}