@@ -231,6 +231,9 @@ fn to_sql_parameter(value: &ParameterValue) -> Result<Box<dyn ToSql + Send + Syn
231
231
let r = postgres_range:: Range :: new ( lbound, ubound) ;
232
232
Ok ( Box :: new ( r) )
233
233
}
234
+ ParameterValue :: ArrayInt32 ( vs) => Ok ( Box :: new ( vs. to_owned ( ) ) ) ,
235
+ ParameterValue :: ArrayInt64 ( vs) => Ok ( Box :: new ( vs. to_owned ( ) ) ) ,
236
+ ParameterValue :: ArrayStr ( vs) => Ok ( Box :: new ( vs. to_owned ( ) ) ) ,
234
237
ParameterValue :: DbNull => Ok ( Box :: new ( PgNull ) ) ,
235
238
}
236
239
}
@@ -275,6 +278,9 @@ fn convert_data_type(pg_type: &Type) -> DbDataType {
275
278
Type :: NUMERIC => DbDataType :: Decimal ,
276
279
Type :: INT4_RANGE => DbDataType :: Range32 ,
277
280
Type :: INT8_RANGE => DbDataType :: Range64 ,
281
+ Type :: INT4_ARRAY => DbDataType :: ArrayInt32 ,
282
+ Type :: INT8_ARRAY => DbDataType :: ArrayInt64 ,
283
+ Type :: TEXT_ARRAY | Type :: VARCHAR_ARRAY | Type :: BPCHAR_ARRAY => DbDataType :: ArrayStr ,
278
284
_ => {
279
285
tracing:: debug!( "Couldn't convert Postgres type {} to WIT" , pg_type. name( ) , ) ;
280
286
DbDataType :: Other
@@ -398,7 +404,7 @@ fn convert_entry(row: &Row, index: usize) -> anyhow::Result<DbValue> {
398
404
match value {
399
405
Some ( v) => {
400
406
let lower = v. lower ( ) . map ( tuplify_range_bound) ;
401
- let upper = v. lower ( ) . map ( tuplify_range_bound) ;
407
+ let upper = v. upper ( ) . map ( tuplify_range_bound) ;
402
408
DbValue :: Range32 ( ( lower, upper) )
403
409
}
404
410
None => DbValue :: DbNull ,
@@ -409,12 +415,33 @@ fn convert_entry(row: &Row, index: usize) -> anyhow::Result<DbValue> {
409
415
match value {
410
416
Some ( v) => {
411
417
let lower = v. lower ( ) . map ( tuplify_range_bound) ;
412
- let upper = v. lower ( ) . map ( tuplify_range_bound) ;
418
+ let upper = v. upper ( ) . map ( tuplify_range_bound) ;
413
419
DbValue :: Range64 ( ( lower, upper) )
414
420
}
415
421
None => DbValue :: DbNull ,
416
422
}
417
423
}
424
+ & Type :: INT4_ARRAY => {
425
+ let value: Option < Vec < Option < i32 > > > = row. try_get ( index) ?;
426
+ match value {
427
+ Some ( v) => DbValue :: ArrayInt32 ( v) ,
428
+ None => DbValue :: DbNull ,
429
+ }
430
+ }
431
+ & Type :: INT8_ARRAY => {
432
+ let value: Option < Vec < Option < i64 > > > = row. try_get ( index) ?;
433
+ match value {
434
+ Some ( v) => DbValue :: ArrayInt64 ( v) ,
435
+ None => DbValue :: DbNull ,
436
+ }
437
+ }
438
+ & Type :: TEXT_ARRAY | & Type :: VARCHAR_ARRAY | & Type :: BPCHAR_ARRAY => {
439
+ let value: Option < Vec < Option < String > > > = row. try_get ( index) ?;
440
+ match value {
441
+ Some ( v) => DbValue :: ArrayStr ( v) ,
442
+ None => DbValue :: DbNull ,
443
+ }
444
+ }
418
445
t => {
419
446
tracing:: debug!(
420
447
"Couldn't convert Postgres type {} in column {}" ,
0 commit comments