@@ -192,6 +192,9 @@ fn to_sql_parameter(value: &ParameterValue) -> Result<Box<dyn ToSql + Send + Syn
192192 let r = postgres_range:: Range :: new ( lbound, ubound) ;
193193 Ok ( Box :: new ( r) )
194194 }
195+ ParameterValue :: ArrayInt32 ( vs) => Ok ( Box :: new ( vs. to_owned ( ) ) ) ,
196+ ParameterValue :: ArrayInt64 ( vs) => Ok ( Box :: new ( vs. to_owned ( ) ) ) ,
197+ ParameterValue :: ArrayStr ( vs) => Ok ( Box :: new ( vs. to_owned ( ) ) ) ,
195198 ParameterValue :: DbNull => Ok ( Box :: new ( PgNull ) ) ,
196199 }
197200}
@@ -236,6 +239,9 @@ fn convert_data_type(pg_type: &Type) -> DbDataType {
236239 Type :: NUMERIC => DbDataType :: Decimal ,
237240 Type :: INT4_RANGE => DbDataType :: Range32 ,
238241 Type :: INT8_RANGE => DbDataType :: Range64 ,
242+ Type :: INT4_ARRAY => DbDataType :: ArrayInt32 ,
243+ Type :: INT8_ARRAY => DbDataType :: ArrayInt64 ,
244+ Type :: TEXT_ARRAY | Type :: VARCHAR_ARRAY | Type :: BPCHAR_ARRAY => DbDataType :: ArrayStr ,
239245 _ => {
240246 tracing:: debug!( "Couldn't convert Postgres type {} to WIT" , pg_type. name( ) , ) ;
241247 DbDataType :: Other
@@ -359,7 +365,7 @@ fn convert_entry(row: &Row, index: usize) -> anyhow::Result<DbValue> {
359365 match value {
360366 Some ( v) => {
361367 let lower = v. lower ( ) . map ( tuplify_range_bound) ;
362- let upper = v. lower ( ) . map ( tuplify_range_bound) ;
368+ let upper = v. upper ( ) . map ( tuplify_range_bound) ;
363369 DbValue :: Range32 ( ( lower, upper) )
364370 }
365371 None => DbValue :: DbNull ,
@@ -370,12 +376,33 @@ fn convert_entry(row: &Row, index: usize) -> anyhow::Result<DbValue> {
370376 match value {
371377 Some ( v) => {
372378 let lower = v. lower ( ) . map ( tuplify_range_bound) ;
373- let upper = v. lower ( ) . map ( tuplify_range_bound) ;
379+ let upper = v. upper ( ) . map ( tuplify_range_bound) ;
374380 DbValue :: Range64 ( ( lower, upper) )
375381 }
376382 None => DbValue :: DbNull ,
377383 }
378384 }
385+ & Type :: INT4_ARRAY => {
386+ let value: Option < Vec < Option < i32 > > > = row. try_get ( index) ?;
387+ match value {
388+ Some ( v) => DbValue :: ArrayInt32 ( v) ,
389+ None => DbValue :: DbNull ,
390+ }
391+ }
392+ & Type :: INT8_ARRAY => {
393+ let value: Option < Vec < Option < i64 > > > = row. try_get ( index) ?;
394+ match value {
395+ Some ( v) => DbValue :: ArrayInt64 ( v) ,
396+ None => DbValue :: DbNull ,
397+ }
398+ }
399+ & Type :: TEXT_ARRAY | & Type :: VARCHAR_ARRAY | & Type :: BPCHAR_ARRAY => {
400+ let value: Option < Vec < Option < String > > > = row. try_get ( index) ?;
401+ match value {
402+ Some ( v) => DbValue :: ArrayStr ( v) ,
403+ None => DbValue :: DbNull ,
404+ }
405+ }
379406 t => {
380407 tracing:: debug!(
381408 "Couldn't convert Postgres type {} in column {}" ,
0 commit comments