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 {
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}