1use super::*;
2
3mod rdbms_types {
4 use super::*;
5 use spin::mysql::mysql as mysql3;
6 use spin::postgres3_0_0::postgres as pg3;
7 use spin::postgres4_2_0::postgres as pg4;
8 use v2::mysql as mysql2;
9
10 impl From<v2::rdbms_types::Column> for v1::rdbms_types::Column {
11 fn from(value: v2::rdbms_types::Column) -> Self {
12 v1::rdbms_types::Column {
13 name: value.name,
14 data_type: value.data_type.into(),
15 }
16 }
17 }
18
19 impl From<pg4::Column> for v1::rdbms_types::Column {
20 fn from(value: pg4::Column) -> Self {
21 v1::rdbms_types::Column {
22 name: value.name,
23 data_type: value.data_type.into(),
24 }
25 }
26 }
27
28 impl From<pg4::Column> for v2::rdbms_types::Column {
29 fn from(value: pg4::Column) -> Self {
30 v2::rdbms_types::Column {
31 name: value.name,
32 data_type: value.data_type.into(),
33 }
34 }
35 }
36
37 impl From<pg4::Column> for pg3::Column {
38 fn from(value: pg4::Column) -> Self {
39 pg3::Column {
40 name: value.name,
41 data_type: value.data_type.into(),
42 }
43 }
44 }
45
46 impl From<v2::rdbms_types::DbValue> for v1::rdbms_types::DbValue {
47 fn from(value: v2::rdbms_types::DbValue) -> v1::rdbms_types::DbValue {
48 match value {
49 v2::rdbms_types::DbValue::Boolean(b) => v1::rdbms_types::DbValue::Boolean(b),
50 v2::rdbms_types::DbValue::Int8(i) => v1::rdbms_types::DbValue::Int8(i),
51 v2::rdbms_types::DbValue::Int16(i) => v1::rdbms_types::DbValue::Int16(i),
52 v2::rdbms_types::DbValue::Int32(i) => v1::rdbms_types::DbValue::Int32(i),
53 v2::rdbms_types::DbValue::Int64(i) => v1::rdbms_types::DbValue::Int64(i),
54 v2::rdbms_types::DbValue::Uint8(j) => v1::rdbms_types::DbValue::Uint8(j),
55 v2::rdbms_types::DbValue::Uint16(u) => v1::rdbms_types::DbValue::Uint16(u),
56 v2::rdbms_types::DbValue::Uint32(u) => v1::rdbms_types::DbValue::Uint32(u),
57 v2::rdbms_types::DbValue::Uint64(u) => v1::rdbms_types::DbValue::Uint64(u),
58 v2::rdbms_types::DbValue::Floating32(r) => v1::rdbms_types::DbValue::Floating32(r),
59 v2::rdbms_types::DbValue::Floating64(r) => v1::rdbms_types::DbValue::Floating64(r),
60 v2::rdbms_types::DbValue::Str(s) => v1::rdbms_types::DbValue::Str(s),
61 v2::rdbms_types::DbValue::Binary(b) => v1::rdbms_types::DbValue::Binary(b),
62 v2::rdbms_types::DbValue::DbNull => v1::rdbms_types::DbValue::DbNull,
63 v2::rdbms_types::DbValue::Unsupported => v1::rdbms_types::DbValue::Unsupported,
64 }
65 }
66 }
67
68 impl From<pg4::DbValue> for v1::rdbms_types::DbValue {
69 fn from(value: pg4::DbValue) -> v1::rdbms_types::DbValue {
70 match value {
71 pg4::DbValue::Boolean(b) => v1::rdbms_types::DbValue::Boolean(b),
72 pg4::DbValue::Int8(i) => v1::rdbms_types::DbValue::Int8(i),
73 pg4::DbValue::Int16(i) => v1::rdbms_types::DbValue::Int16(i),
74 pg4::DbValue::Int32(i) => v1::rdbms_types::DbValue::Int32(i),
75 pg4::DbValue::Int64(i) => v1::rdbms_types::DbValue::Int64(i),
76 pg4::DbValue::Floating32(r) => v1::rdbms_types::DbValue::Floating32(r),
77 pg4::DbValue::Floating64(r) => v1::rdbms_types::DbValue::Floating64(r),
78 pg4::DbValue::Str(s) => v1::rdbms_types::DbValue::Str(s),
79 pg4::DbValue::Binary(b) => v1::rdbms_types::DbValue::Binary(b),
80 pg4::DbValue::DbNull => v1::rdbms_types::DbValue::DbNull,
81 pg4::DbValue::Unsupported(_) => v1::rdbms_types::DbValue::Unsupported,
82 _ => v1::rdbms_types::DbValue::Unsupported,
83 }
84 }
85 }
86
87 impl From<pg4::DbValue> for v2::rdbms_types::DbValue {
88 fn from(value: pg4::DbValue) -> v2::rdbms_types::DbValue {
89 match value {
90 pg4::DbValue::Boolean(b) => v2::rdbms_types::DbValue::Boolean(b),
91 pg4::DbValue::Int8(i) => v2::rdbms_types::DbValue::Int8(i),
92 pg4::DbValue::Int16(i) => v2::rdbms_types::DbValue::Int16(i),
93 pg4::DbValue::Int32(i) => v2::rdbms_types::DbValue::Int32(i),
94 pg4::DbValue::Int64(i) => v2::rdbms_types::DbValue::Int64(i),
95 pg4::DbValue::Floating32(r) => v2::rdbms_types::DbValue::Floating32(r),
96 pg4::DbValue::Floating64(r) => v2::rdbms_types::DbValue::Floating64(r),
97 pg4::DbValue::Str(s) => v2::rdbms_types::DbValue::Str(s),
98 pg4::DbValue::Binary(b) => v2::rdbms_types::DbValue::Binary(b),
99 pg4::DbValue::DbNull => v2::rdbms_types::DbValue::DbNull,
100 pg4::DbValue::Unsupported(_) => v2::rdbms_types::DbValue::Unsupported,
101 _ => v2::rdbms_types::DbValue::Unsupported,
102 }
103 }
104 }
105
106 impl From<pg4::DbValue> for pg3::DbValue {
107 fn from(value: pg4::DbValue) -> pg3::DbValue {
108 match value {
109 pg4::DbValue::Boolean(b) => pg3::DbValue::Boolean(b),
110 pg4::DbValue::Int8(i) => pg3::DbValue::Int8(i),
111 pg4::DbValue::Int16(i) => pg3::DbValue::Int16(i),
112 pg4::DbValue::Int32(i) => pg3::DbValue::Int32(i),
113 pg4::DbValue::Int64(i) => pg3::DbValue::Int64(i),
114 pg4::DbValue::Floating32(r) => pg3::DbValue::Floating32(r),
115 pg4::DbValue::Floating64(r) => pg3::DbValue::Floating64(r),
116 pg4::DbValue::Str(s) => pg3::DbValue::Str(s),
117 pg4::DbValue::Binary(b) => pg3::DbValue::Binary(b),
118 pg4::DbValue::Date(d) => pg3::DbValue::Date(d),
119 pg4::DbValue::Datetime(dt) => pg3::DbValue::Datetime(dt),
120 pg4::DbValue::Time(t) => pg3::DbValue::Time(t),
121 pg4::DbValue::Timestamp(t) => pg3::DbValue::Timestamp(t),
122 pg4::DbValue::Uuid(_) => pg3::DbValue::Unsupported,
123 pg4::DbValue::Jsonb(_) => pg3::DbValue::Unsupported,
124 pg4::DbValue::Decimal(_) => pg3::DbValue::Unsupported,
125 pg4::DbValue::RangeInt32(_) => pg3::DbValue::Unsupported,
126 pg4::DbValue::RangeInt64(_) => pg3::DbValue::Unsupported,
127 pg4::DbValue::RangeDecimal(_) => pg3::DbValue::Unsupported,
128 pg4::DbValue::ArrayInt32(_) => pg3::DbValue::Unsupported,
129 pg4::DbValue::ArrayInt64(_) => pg3::DbValue::Unsupported,
130 pg4::DbValue::ArrayDecimal(_) => pg3::DbValue::Unsupported,
131 pg4::DbValue::ArrayStr(_) => pg3::DbValue::Unsupported,
132 pg4::DbValue::Interval(_) => pg3::DbValue::Unsupported,
133 pg4::DbValue::DbNull => pg3::DbValue::DbNull,
134 pg4::DbValue::Unsupported(_) => pg3::DbValue::Unsupported,
135 }
136 }
137 }
138
139 impl From<pg4::DbDataType> for v1::rdbms_types::DbDataType {
140 fn from(value: pg4::DbDataType) -> v1::rdbms_types::DbDataType {
141 match value {
142 pg4::DbDataType::Boolean => v1::rdbms_types::DbDataType::Boolean,
143 pg4::DbDataType::Int8 => v1::rdbms_types::DbDataType::Int8,
144 pg4::DbDataType::Int16 => v1::rdbms_types::DbDataType::Int16,
145 pg4::DbDataType::Int32 => v1::rdbms_types::DbDataType::Int32,
146 pg4::DbDataType::Int64 => v1::rdbms_types::DbDataType::Int64,
147 pg4::DbDataType::Floating32 => v1::rdbms_types::DbDataType::Floating32,
148 pg4::DbDataType::Floating64 => v1::rdbms_types::DbDataType::Floating64,
149 pg4::DbDataType::Str => v1::rdbms_types::DbDataType::Str,
150 pg4::DbDataType::Binary => v1::rdbms_types::DbDataType::Binary,
151 pg4::DbDataType::Other(_) => v1::rdbms_types::DbDataType::Other,
152 _ => v1::rdbms_types::DbDataType::Other,
153 }
154 }
155 }
156
157 impl From<pg4::DbDataType> for v2::rdbms_types::DbDataType {
158 fn from(value: pg4::DbDataType) -> v2::rdbms_types::DbDataType {
159 match value {
160 pg4::DbDataType::Boolean => v2::rdbms_types::DbDataType::Boolean,
161 pg4::DbDataType::Int8 => v2::rdbms_types::DbDataType::Int8,
162 pg4::DbDataType::Int16 => v2::rdbms_types::DbDataType::Int16,
163 pg4::DbDataType::Int32 => v2::rdbms_types::DbDataType::Int32,
164 pg4::DbDataType::Int64 => v2::rdbms_types::DbDataType::Int64,
165 pg4::DbDataType::Floating32 => v2::rdbms_types::DbDataType::Floating32,
166 pg4::DbDataType::Floating64 => v2::rdbms_types::DbDataType::Floating64,
167 pg4::DbDataType::Str => v2::rdbms_types::DbDataType::Str,
168 pg4::DbDataType::Binary => v2::rdbms_types::DbDataType::Binary,
169 pg4::DbDataType::Other(_) => v2::rdbms_types::DbDataType::Other,
170 _ => v2::rdbms_types::DbDataType::Other,
171 }
172 }
173 }
174
175 impl From<pg4::DbDataType> for pg3::DbDataType {
176 fn from(value: pg4::DbDataType) -> pg3::DbDataType {
177 match value {
178 pg4::DbDataType::Boolean => pg3::DbDataType::Boolean,
179 pg4::DbDataType::Int8 => pg3::DbDataType::Int8,
180 pg4::DbDataType::Int16 => pg3::DbDataType::Int16,
181 pg4::DbDataType::Int32 => pg3::DbDataType::Int32,
182 pg4::DbDataType::Int64 => pg3::DbDataType::Int64,
183 pg4::DbDataType::Floating32 => pg3::DbDataType::Floating32,
184 pg4::DbDataType::Floating64 => pg3::DbDataType::Floating64,
185 pg4::DbDataType::Str => pg3::DbDataType::Str,
186 pg4::DbDataType::Binary => pg3::DbDataType::Binary,
187 pg4::DbDataType::Date => pg3::DbDataType::Date,
188 pg4::DbDataType::Datetime => pg3::DbDataType::Datetime,
189 pg4::DbDataType::Time => pg3::DbDataType::Time,
190 pg4::DbDataType::Timestamp => pg3::DbDataType::Timestamp,
191 pg4::DbDataType::Uuid => pg3::DbDataType::Other,
192 pg4::DbDataType::Jsonb => pg3::DbDataType::Other,
193 pg4::DbDataType::Decimal => pg3::DbDataType::Other,
194 pg4::DbDataType::RangeInt32 => pg3::DbDataType::Other,
195 pg4::DbDataType::RangeInt64 => pg3::DbDataType::Other,
196 pg4::DbDataType::RangeDecimal => pg3::DbDataType::Other,
197 pg4::DbDataType::ArrayInt32 => pg3::DbDataType::Other,
198 pg4::DbDataType::ArrayInt64 => pg3::DbDataType::Other,
199 pg4::DbDataType::ArrayDecimal => pg3::DbDataType::Other,
200 pg4::DbDataType::ArrayStr => pg3::DbDataType::Other,
201 pg4::DbDataType::Interval => pg3::DbDataType::Other,
202 pg4::DbDataType::Other(_) => pg3::DbDataType::Other,
203 }
204 }
205 }
206
207 impl From<v2::rdbms_types::DbDataType> for v1::rdbms_types::DbDataType {
208 fn from(value: v2::rdbms_types::DbDataType) -> v1::rdbms_types::DbDataType {
209 match value {
210 v2::rdbms_types::DbDataType::Boolean => v1::rdbms_types::DbDataType::Boolean,
211 v2::rdbms_types::DbDataType::Int8 => v1::rdbms_types::DbDataType::Int8,
212 v2::rdbms_types::DbDataType::Int16 => v1::rdbms_types::DbDataType::Int16,
213 v2::rdbms_types::DbDataType::Int32 => v1::rdbms_types::DbDataType::Int32,
214 v2::rdbms_types::DbDataType::Int64 => v1::rdbms_types::DbDataType::Int64,
215 v2::rdbms_types::DbDataType::Uint8 => v1::rdbms_types::DbDataType::Uint8,
216 v2::rdbms_types::DbDataType::Uint16 => v1::rdbms_types::DbDataType::Uint16,
217 v2::rdbms_types::DbDataType::Uint32 => v1::rdbms_types::DbDataType::Uint32,
218 v2::rdbms_types::DbDataType::Uint64 => v1::rdbms_types::DbDataType::Uint64,
219 v2::rdbms_types::DbDataType::Floating32 => v1::rdbms_types::DbDataType::Floating32,
220 v2::rdbms_types::DbDataType::Floating64 => v1::rdbms_types::DbDataType::Floating64,
221 v2::rdbms_types::DbDataType::Str => v1::rdbms_types::DbDataType::Str,
222 v2::rdbms_types::DbDataType::Binary => v1::rdbms_types::DbDataType::Binary,
223 v2::rdbms_types::DbDataType::Other => v1::rdbms_types::DbDataType::Other,
224 }
225 }
226 }
227
228 impl From<v1::rdbms_types::ParameterValue> for v2::rdbms_types::ParameterValue {
229 fn from(value: v1::rdbms_types::ParameterValue) -> v2::rdbms_types::ParameterValue {
230 match value {
231 v1::rdbms_types::ParameterValue::Boolean(b) => {
232 v2::rdbms_types::ParameterValue::Boolean(b)
233 }
234 v1::rdbms_types::ParameterValue::Int8(i) => {
235 v2::rdbms_types::ParameterValue::Int8(i)
236 }
237 v1::rdbms_types::ParameterValue::Int16(i) => {
238 v2::rdbms_types::ParameterValue::Int16(i)
239 }
240 v1::rdbms_types::ParameterValue::Int32(i) => {
241 v2::rdbms_types::ParameterValue::Int32(i)
242 }
243 v1::rdbms_types::ParameterValue::Int64(i) => {
244 v2::rdbms_types::ParameterValue::Int64(i)
245 }
246 v1::rdbms_types::ParameterValue::Uint8(u) => {
247 v2::rdbms_types::ParameterValue::Uint8(u)
248 }
249 v1::rdbms_types::ParameterValue::Uint16(u) => {
250 v2::rdbms_types::ParameterValue::Uint16(u)
251 }
252 v1::rdbms_types::ParameterValue::Uint32(u) => {
253 v2::rdbms_types::ParameterValue::Uint32(u)
254 }
255 v1::rdbms_types::ParameterValue::Uint64(u) => {
256 v2::rdbms_types::ParameterValue::Uint64(u)
257 }
258 v1::rdbms_types::ParameterValue::Floating32(r) => {
259 v2::rdbms_types::ParameterValue::Floating32(r)
260 }
261 v1::rdbms_types::ParameterValue::Floating64(r) => {
262 v2::rdbms_types::ParameterValue::Floating64(r)
263 }
264 v1::rdbms_types::ParameterValue::Str(s) => v2::rdbms_types::ParameterValue::Str(s),
265 v1::rdbms_types::ParameterValue::Binary(b) => {
266 v2::rdbms_types::ParameterValue::Binary(b)
267 }
268 v1::rdbms_types::ParameterValue::DbNull => v2::rdbms_types::ParameterValue::DbNull,
269 }
270 }
271 }
272
273 impl TryFrom<v1::rdbms_types::ParameterValue> for pg4::ParameterValue {
274 type Error = v1::postgres::PgError;
275
276 fn try_from(
277 value: v1::rdbms_types::ParameterValue,
278 ) -> Result<pg4::ParameterValue, Self::Error> {
279 let converted = match value {
280 v1::rdbms_types::ParameterValue::Boolean(b) => pg4::ParameterValue::Boolean(b),
281 v1::rdbms_types::ParameterValue::Int8(i) => pg4::ParameterValue::Int8(i),
282 v1::rdbms_types::ParameterValue::Int16(i) => pg4::ParameterValue::Int16(i),
283 v1::rdbms_types::ParameterValue::Int32(i) => pg4::ParameterValue::Int32(i),
284 v1::rdbms_types::ParameterValue::Int64(i) => pg4::ParameterValue::Int64(i),
285 v1::rdbms_types::ParameterValue::Uint8(_)
286 | v1::rdbms_types::ParameterValue::Uint16(_)
287 | v1::rdbms_types::ParameterValue::Uint32(_)
288 | v1::rdbms_types::ParameterValue::Uint64(_) => {
289 return Err(v1::postgres::PgError::ValueConversionFailed(
290 "Postgres does not support unsigned integers".to_owned(),
291 ));
292 }
293 v1::rdbms_types::ParameterValue::Floating32(r) => {
294 pg4::ParameterValue::Floating32(r)
295 }
296 v1::rdbms_types::ParameterValue::Floating64(r) => {
297 pg4::ParameterValue::Floating64(r)
298 }
299 v1::rdbms_types::ParameterValue::Str(s) => pg4::ParameterValue::Str(s),
300 v1::rdbms_types::ParameterValue::Binary(b) => pg4::ParameterValue::Binary(b),
301 v1::rdbms_types::ParameterValue::DbNull => pg4::ParameterValue::DbNull,
302 };
303 Ok(converted)
304 }
305 }
306
307 impl TryFrom<v2::rdbms_types::ParameterValue> for pg4::ParameterValue {
308 type Error = v2::rdbms_types::Error;
309
310 fn try_from(
311 value: v2::rdbms_types::ParameterValue,
312 ) -> Result<pg4::ParameterValue, Self::Error> {
313 let converted = match value {
314 v2::rdbms_types::ParameterValue::Boolean(b) => pg4::ParameterValue::Boolean(b),
315 v2::rdbms_types::ParameterValue::Int8(i) => pg4::ParameterValue::Int8(i),
316 v2::rdbms_types::ParameterValue::Int16(i) => pg4::ParameterValue::Int16(i),
317 v2::rdbms_types::ParameterValue::Int32(i) => pg4::ParameterValue::Int32(i),
318 v2::rdbms_types::ParameterValue::Int64(i) => pg4::ParameterValue::Int64(i),
319 v2::rdbms_types::ParameterValue::Uint8(_)
320 | v2::rdbms_types::ParameterValue::Uint16(_)
321 | v2::rdbms_types::ParameterValue::Uint32(_)
322 | v2::rdbms_types::ParameterValue::Uint64(_) => {
323 return Err(v2::rdbms_types::Error::ValueConversionFailed(
324 "Postgres does not support unsigned integers".to_owned(),
325 ));
326 }
327 v2::rdbms_types::ParameterValue::Floating32(r) => {
328 pg4::ParameterValue::Floating32(r)
329 }
330 v2::rdbms_types::ParameterValue::Floating64(r) => {
331 pg4::ParameterValue::Floating64(r)
332 }
333 v2::rdbms_types::ParameterValue::Str(s) => pg4::ParameterValue::Str(s),
334 v2::rdbms_types::ParameterValue::Binary(b) => pg4::ParameterValue::Binary(b),
335 v2::rdbms_types::ParameterValue::DbNull => pg4::ParameterValue::DbNull,
336 };
337 Ok(converted)
338 }
339 }
340
341 impl From<pg3::ParameterValue> for pg4::ParameterValue {
342 fn from(value: pg3::ParameterValue) -> pg4::ParameterValue {
343 match value {
344 pg3::ParameterValue::Boolean(b) => pg4::ParameterValue::Boolean(b),
345 pg3::ParameterValue::Int8(i) => pg4::ParameterValue::Int8(i),
346 pg3::ParameterValue::Int16(i) => pg4::ParameterValue::Int16(i),
347 pg3::ParameterValue::Int32(i) => pg4::ParameterValue::Int32(i),
348 pg3::ParameterValue::Int64(i) => pg4::ParameterValue::Int64(i),
349 pg3::ParameterValue::Floating32(r) => pg4::ParameterValue::Floating32(r),
350 pg3::ParameterValue::Floating64(r) => pg4::ParameterValue::Floating64(r),
351 pg3::ParameterValue::Str(s) => pg4::ParameterValue::Str(s),
352 pg3::ParameterValue::Binary(b) => pg4::ParameterValue::Binary(b),
353 pg3::ParameterValue::Date(d) => pg4::ParameterValue::Date(d),
354 pg3::ParameterValue::Datetime(dt) => pg4::ParameterValue::Datetime(dt),
355 pg3::ParameterValue::Time(t) => pg4::ParameterValue::Time(t),
356 pg3::ParameterValue::Timestamp(t) => pg4::ParameterValue::Timestamp(t),
357 pg3::ParameterValue::DbNull => pg4::ParameterValue::DbNull,
358 }
359 }
360 }
361
362 impl From<v2::rdbms_types::Error> for v1::mysql::MysqlError {
363 fn from(error: v2::rdbms_types::Error) -> v1::mysql::MysqlError {
364 match error {
365 v2::mysql::Error::ConnectionFailed(e) => v1::mysql::MysqlError::ConnectionFailed(e),
366 v2::mysql::Error::BadParameter(e) => v1::mysql::MysqlError::BadParameter(e),
367 v2::mysql::Error::QueryFailed(e) => v1::mysql::MysqlError::QueryFailed(e),
368 v2::mysql::Error::ValueConversionFailed(e) => {
369 v1::mysql::MysqlError::ValueConversionFailed(e)
370 }
371 v2::mysql::Error::Other(e) => v1::mysql::MysqlError::OtherError(e),
372 }
373 }
374 }
375
376 impl From<pg4::Error> for v1::postgres::PgError {
377 fn from(error: pg4::Error) -> v1::postgres::PgError {
378 match error {
379 pg4::Error::ConnectionFailed(e) => v1::postgres::PgError::ConnectionFailed(e),
380 pg4::Error::BadParameter(e) => v1::postgres::PgError::BadParameter(e),
381 pg4::Error::QueryFailed(e) => v1::postgres::PgError::QueryFailed(pg_error_text(e)),
382 pg4::Error::ValueConversionFailed(e) => {
383 v1::postgres::PgError::ValueConversionFailed(e)
384 }
385 pg4::Error::Other(e) => v1::postgres::PgError::OtherError(e),
386 }
387 }
388 }
389
390 impl From<pg4::Error> for v2::rdbms_types::Error {
391 fn from(error: pg4::Error) -> v2::rdbms_types::Error {
392 match error {
393 pg4::Error::ConnectionFailed(e) => v2::rdbms_types::Error::ConnectionFailed(e),
394 pg4::Error::BadParameter(e) => v2::rdbms_types::Error::BadParameter(e),
395 pg4::Error::QueryFailed(e) => v2::rdbms_types::Error::QueryFailed(pg_error_text(e)),
396 pg4::Error::ValueConversionFailed(e) => {
397 v2::rdbms_types::Error::ValueConversionFailed(e)
398 }
399 pg4::Error::Other(e) => v2::rdbms_types::Error::Other(e),
400 }
401 }
402 }
403
404 impl From<pg4::Error> for pg3::Error {
405 fn from(error: pg4::Error) -> pg3::Error {
406 match error {
407 pg4::Error::ConnectionFailed(e) => pg3::Error::ConnectionFailed(e),
408 pg4::Error::BadParameter(e) => pg3::Error::BadParameter(e),
409 pg4::Error::QueryFailed(e) => pg3::Error::QueryFailed(pg_error_text(e)),
410 pg4::Error::ValueConversionFailed(e) => pg3::Error::ValueConversionFailed(e),
411 pg4::Error::Other(e) => pg3::Error::Other(e),
412 }
413 }
414 }
415
416 impl From<v2::rdbms_types::Column> for mysql3::Column {
417 fn from(column: v2::rdbms_types::Column) -> Self {
418 Self {
419 name: column.name,
420 data_type: column.data_type.into(),
421 }
422 }
423 }
424
425 impl From<v2::rdbms_types::DbDataType> for mysql3::DbDataType {
426 fn from(ty: v2::rdbms_types::DbDataType) -> Self {
427 match ty {
428 v2::rdbms_types::DbDataType::Boolean => Self::Boolean,
429 v2::rdbms_types::DbDataType::Int8 => Self::Int8,
430 v2::rdbms_types::DbDataType::Int16 => Self::Int16,
431 v2::rdbms_types::DbDataType::Int32 => Self::Int32,
432 v2::rdbms_types::DbDataType::Int64 => Self::Int64,
433 v2::rdbms_types::DbDataType::Uint8 => Self::Uint8,
434 v2::rdbms_types::DbDataType::Uint16 => Self::Uint16,
435 v2::rdbms_types::DbDataType::Uint32 => Self::Uint32,
436 v2::rdbms_types::DbDataType::Uint64 => Self::Uint64,
437 v2::rdbms_types::DbDataType::Floating32 => Self::Floating32,
438 v2::rdbms_types::DbDataType::Floating64 => Self::Floating64,
439 v2::rdbms_types::DbDataType::Str => Self::Str,
440 v2::rdbms_types::DbDataType::Binary => Self::Binary,
441 v2::rdbms_types::DbDataType::Other => Self::Other,
442 }
443 }
444 }
445
446 impl From<v2::rdbms_types::DbValue> for mysql3::DbValue {
447 fn from(ty: v2::rdbms_types::DbValue) -> Self {
448 match ty {
449 v2::rdbms_types::DbValue::Boolean(v) => Self::Boolean(v),
450 v2::rdbms_types::DbValue::Int8(v) => Self::Int8(v),
451 v2::rdbms_types::DbValue::Int16(v) => Self::Int16(v),
452 v2::rdbms_types::DbValue::Int32(v) => Self::Int32(v),
453 v2::rdbms_types::DbValue::Int64(v) => Self::Int64(v),
454 v2::rdbms_types::DbValue::Uint8(v) => Self::Uint8(v),
455 v2::rdbms_types::DbValue::Uint16(v) => Self::Uint16(v),
456 v2::rdbms_types::DbValue::Uint32(v) => Self::Uint32(v),
457 v2::rdbms_types::DbValue::Uint64(v) => Self::Uint64(v),
458 v2::rdbms_types::DbValue::Floating32(v) => Self::Floating32(v),
459 v2::rdbms_types::DbValue::Floating64(v) => Self::Floating64(v),
460 v2::rdbms_types::DbValue::Str(v) => Self::Str(v),
461 v2::rdbms_types::DbValue::Binary(v) => Self::Binary(v),
462 v2::rdbms_types::DbValue::DbNull => Self::DbNull,
463 v2::rdbms_types::DbValue::Unsupported => Self::Unsupported,
464 }
465 }
466 }
467
468 impl From<mysql2::Error> for mysql3::Error {
469 fn from(error: mysql2::Error) -> Self {
470 match error {
471 mysql2::Error::ConnectionFailed(v) => Self::ConnectionFailed(v),
472 mysql2::Error::BadParameter(v) => Self::BadParameter(v),
473 mysql2::Error::QueryFailed(v) => Self::QueryFailed(v),
474 mysql2::Error::ValueConversionFailed(v) => Self::ValueConversionFailed(v),
475 mysql2::Error::Other(v) => Self::Other(v),
476 }
477 }
478 }
479
480 impl From<mysql3::Error> for mysql2::Error {
481 fn from(error: mysql3::Error) -> Self {
482 match error {
483 mysql3::Error::ConnectionFailed(v) => Self::ConnectionFailed(v),
484 mysql3::Error::BadParameter(v) => Self::BadParameter(v),
485 mysql3::Error::QueryFailed(v) => Self::QueryFailed(v),
486 mysql3::Error::ValueConversionFailed(v) => Self::ValueConversionFailed(v),
487 mysql3::Error::Other(v) => Self::Other(v),
488 }
489 }
490 }
491
492 impl From<mysql3::ParameterValue> for mysql2::ParameterValue {
493 fn from(value: mysql3::ParameterValue) -> Self {
494 match value {
495 mysql3::ParameterValue::Boolean(v) => Self::Boolean(v),
496 mysql3::ParameterValue::Int8(v) => Self::Int8(v),
497 mysql3::ParameterValue::Int16(v) => Self::Int16(v),
498 mysql3::ParameterValue::Int32(v) => Self::Int32(v),
499 mysql3::ParameterValue::Int64(v) => Self::Int64(v),
500 mysql3::ParameterValue::Uint8(v) => Self::Uint8(v),
501 mysql3::ParameterValue::Uint16(v) => Self::Uint16(v),
502 mysql3::ParameterValue::Uint32(v) => Self::Uint32(v),
503 mysql3::ParameterValue::Uint64(v) => Self::Uint64(v),
504 mysql3::ParameterValue::Floating32(v) => Self::Floating32(v),
505 mysql3::ParameterValue::Floating64(v) => Self::Floating64(v),
506 mysql3::ParameterValue::Str(v) => Self::Str(v),
507 mysql3::ParameterValue::Binary(v) => Self::Binary(v),
508 mysql3::ParameterValue::DbNull => Self::DbNull,
509 }
510 }
511 }
512
513 pub fn pg_error_text(error: pg4::QueryError) -> String {
514 match error {
515 pg4::QueryError::Text(text) => text,
516 pg4::QueryError::DbError(e) => e.as_text,
517 }
518 }
519}
520
521mod postgres {
522 use super::*;
523 use spin::postgres3_0_0::postgres as pg3;
524 use spin::postgres4_2_0::postgres as pg4;
525
526 impl From<pg4::RowSet> for v1::postgres::RowSet {
527 fn from(value: pg4::RowSet) -> v1::postgres::RowSet {
528 v1::mysql::RowSet {
529 columns: value.columns.into_iter().map(Into::into).collect(),
530 rows: value
531 .rows
532 .into_iter()
533 .map(|r| r.into_iter().map(Into::into).collect())
534 .collect(),
535 }
536 }
537 }
538
539 impl From<pg4::RowSet> for v2::rdbms_types::RowSet {
540 fn from(value: pg4::RowSet) -> v2::rdbms_types::RowSet {
541 v2::rdbms_types::RowSet {
542 columns: value.columns.into_iter().map(Into::into).collect(),
543 rows: value
544 .rows
545 .into_iter()
546 .map(|r| r.into_iter().map(Into::into).collect())
547 .collect(),
548 }
549 }
550 }
551
552 impl From<pg4::RowSet> for pg3::RowSet {
553 fn from(value: pg4::RowSet) -> pg3::RowSet {
554 pg3::RowSet {
555 columns: value.columns.into_iter().map(Into::into).collect(),
556 rows: value
557 .rows
558 .into_iter()
559 .map(|r| r.into_iter().map(Into::into).collect())
560 .collect(),
561 }
562 }
563 }
564}
565
566mod mysql {
567 use super::*;
568 impl From<v2::mysql::RowSet> for v1::mysql::RowSet {
569 fn from(value: v2::mysql::RowSet) -> v1::mysql::RowSet {
570 v1::mysql::RowSet {
571 columns: value.columns.into_iter().map(Into::into).collect(),
572 rows: value
573 .rows
574 .into_iter()
575 .map(|r| r.into_iter().map(Into::into).collect())
576 .collect(),
577 }
578 }
579 }
580}
581
582mod redis {
583 use super::*;
584 use crate::spin::redis::redis as v3;
585
586 impl From<v1::redis::RedisParameter> for v2::redis::RedisParameter {
587 fn from(value: v1::redis::RedisParameter) -> Self {
588 match value {
589 v1::redis::RedisParameter::Int64(i) => v2::redis::RedisParameter::Int64(i),
590 v1::redis::RedisParameter::Binary(b) => v2::redis::RedisParameter::Binary(b),
591 }
592 }
593 }
594
595 impl From<v2::redis::RedisResult> for v1::redis::RedisResult {
596 fn from(value: v2::redis::RedisResult) -> Self {
597 match value {
598 v2::redis::RedisResult::Nil => v1::redis::RedisResult::Nil,
599 v2::redis::RedisResult::Status(s) => v1::redis::RedisResult::Status(s),
600 v2::redis::RedisResult::Int64(i) => v1::redis::RedisResult::Int64(i),
601 v2::redis::RedisResult::Binary(b) => v1::redis::RedisResult::Binary(b),
602 }
603 }
604 }
605
606 impl From<v3::Error> for v2::redis::Error {
607 fn from(value: v3::Error) -> Self {
608 match value {
609 v3::Error::InvalidAddress => Self::InvalidAddress,
610 v3::Error::TooManyConnections => Self::TooManyConnections,
611 v3::Error::TypeError => Self::TypeError,
612 v3::Error::Other(m) => Self::Other(m),
613 }
614 }
615 }
616}
617
618mod llm {
619 use super::*;
620
621 impl From<v1::llm::InferencingParams> for v2::llm::InferencingParams {
622 fn from(value: v1::llm::InferencingParams) -> Self {
623 Self {
624 max_tokens: value.max_tokens,
625 repeat_penalty: value.repeat_penalty,
626 repeat_penalty_last_n_token_count: value.repeat_penalty_last_n_token_count,
627 temperature: value.temperature,
628 top_k: value.top_k,
629 top_p: value.top_p,
630 }
631 }
632 }
633
634 impl From<v2::llm::InferencingResult> for v1::llm::InferencingResult {
635 fn from(value: v2::llm::InferencingResult) -> Self {
636 Self {
637 text: value.text,
638 usage: v1::llm::InferencingUsage {
639 prompt_token_count: value.usage.prompt_token_count,
640 generated_token_count: value.usage.generated_token_count,
641 },
642 }
643 }
644 }
645
646 impl From<v2::llm::EmbeddingsResult> for v1::llm::EmbeddingsResult {
647 fn from(value: v2::llm::EmbeddingsResult) -> Self {
648 Self {
649 embeddings: value.embeddings,
650 usage: v1::llm::EmbeddingsUsage {
651 prompt_token_count: value.usage.prompt_token_count,
652 },
653 }
654 }
655 }
656
657 impl From<v2::llm::Error> for v1::llm::Error {
658 fn from(value: v2::llm::Error) -> Self {
659 match value {
660 v2::llm::Error::ModelNotSupported => Self::ModelNotSupported,
661 v2::llm::Error::RuntimeError(s) => Self::RuntimeError(s),
662 v2::llm::Error::InvalidInput(s) => Self::InvalidInput(s),
663 }
664 }
665 }
666}
667
668mod mqtt {
669 use crate::fermyon::spin2_0_0::mqtt as v2;
670 use crate::spin::mqtt::mqtt as v3;
671
672 impl From<v3::Error> for v2::Error {
673 fn from(value: v3::Error) -> Self {
674 match value {
675 v3::Error::InvalidAddress => v2::Error::InvalidAddress,
676 v3::Error::TooManyConnections => v2::Error::TooManyConnections,
677 v3::Error::ConnectionFailed(e) => v2::Error::ConnectionFailed(e),
678 v3::Error::Other(e) => v2::Error::Other(e),
679 }
680 }
681 }
682}