@@ -231,6 +231,9 @@ fn to_sql_parameter(value: &ParameterValue) -> Result<Box<dyn ToSql + Send + Syn
231231 let r = postgres_range:: Range :: new ( lbound, ubound) ;
232232 Ok ( Box :: new ( r) )
233233 }
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 ( ) ) ) ,
234237 ParameterValue :: DbNull => Ok ( Box :: new ( PgNull ) ) ,
235238 }
236239}
@@ -275,6 +278,9 @@ fn convert_data_type(pg_type: &Type) -> DbDataType {
275278 Type :: NUMERIC => DbDataType :: Decimal ,
276279 Type :: INT4_RANGE => DbDataType :: Range32 ,
277280 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 ,
278284 _ => {
279285 tracing:: debug!( "Couldn't convert Postgres type {} to WIT" , pg_type. name( ) , ) ;
280286 DbDataType :: Other
@@ -398,7 +404,7 @@ fn convert_entry(row: &Row, index: usize) -> anyhow::Result<DbValue> {
398404 match value {
399405 Some ( v) => {
400406 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) ;
402408 DbValue :: Range32 ( ( lower, upper) )
403409 }
404410 None => DbValue :: DbNull ,
@@ -409,12 +415,33 @@ fn convert_entry(row: &Row, index: usize) -> anyhow::Result<DbValue> {
409415 match value {
410416 Some ( v) => {
411417 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) ;
413419 DbValue :: Range64 ( ( lower, upper) )
414420 }
415421 None => DbValue :: DbNull ,
416422 }
417423 }
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+ }
418445 t => {
419446 tracing:: debug!(
420447 "Couldn't convert Postgres type {} in column {}" ,
0 commit comments