From d8e9b6f118f336949f21c7d85f59e9a14d1f6469 Mon Sep 17 00:00:00 2001 From: itowlson Date: Fri, 18 Oct 2024 10:15:00 +1300 Subject: [PATCH] Now Postgres has its own data types we can get rid of the unsigned ones Signed-off-by: itowlson --- crates/factor-outbound-pg/src/client.rs | 4 -- crates/factor-outbound-pg/src/host.rs | 20 ++++-- crates/world/src/conversions.rs | 78 +++++++++-------------- wit/deps/spin-postgres@3.0.0/postgres.wit | 12 ---- 4 files changed, 44 insertions(+), 70 deletions(-) diff --git a/crates/factor-outbound-pg/src/client.rs b/crates/factor-outbound-pg/src/client.rs index 196817456..a591dd8a1 100644 --- a/crates/factor-outbound-pg/src/client.rs +++ b/crates/factor-outbound-pg/src/client.rs @@ -131,10 +131,6 @@ fn to_sql_parameter(value: &ParameterValue) -> Result Ok(Box::new(*v)), ParameterValue::Floating32(v) => Ok(Box::new(*v)), ParameterValue::Floating64(v) => Ok(Box::new(*v)), - ParameterValue::Uint8(_) - | ParameterValue::Uint16(_) - | ParameterValue::Uint32(_) - | ParameterValue::Uint64(_) => Err(anyhow!("Postgres does not support unsigned integers")), ParameterValue::Str(v) => Ok(Box::new(v.clone())), ParameterValue::Binary(v) => Ok(Box::new(v.clone())), ParameterValue::Date((y, mon, d)) => { diff --git a/crates/factor-outbound-pg/src/host.rs b/crates/factor-outbound-pg/src/host.rs index b5d8c0922..78dff49e2 100644 --- a/crates/factor-outbound-pg/src/host.rs +++ b/crates/factor-outbound-pg/src/host.rs @@ -65,8 +65,10 @@ impl InstanceState { } } -fn v2_params_to_v3(params: Vec) -> Vec { - params.into_iter().map(|p| p.into()).collect() +fn v2_params_to_v3( + params: Vec, +) -> Result, v2::Error> { + params.into_iter().map(|p| p.try_into()).collect() } #[async_trait] @@ -184,7 +186,7 @@ impl v2::HostConnection for InstanceState { Ok(self .get_client(connection) .await? - .execute(statement, v2_params_to_v3(params)) + .execute(statement, v2_params_to_v3(params)?) .await?) } @@ -198,7 +200,7 @@ impl v2::HostConnection for InstanceState { Ok(self .get_client(connection) .await? - .query(statement, v2_params_to_v3(params)) + .query(statement, v2_params_to_v3(params)?) .await? .into()) } @@ -220,7 +222,10 @@ impl v1::Host for InstanceState { delegate!(self.execute( address, statement, - params.into_iter().map(Into::into).collect() + params + .into_iter() + .map(TryInto::try_into) + .collect::, _>>()? )) } @@ -233,7 +238,10 @@ impl v1::Host for InstanceState { delegate!(self.query( address, statement, - params.into_iter().map(Into::into).collect() + params + .into_iter() + .map(TryInto::try_into) + .collect::, _>>()? )) .map(Into::into) } diff --git a/crates/world/src/conversions.rs b/crates/world/src/conversions.rs index 46ff0e49f..cd75d78a2 100644 --- a/crates/world/src/conversions.rs +++ b/crates/world/src/conversions.rs @@ -62,10 +62,6 @@ mod rdbms_types { spin::postgres::postgres::DbValue::Int16(i) => v1::rdbms_types::DbValue::Int16(i), spin::postgres::postgres::DbValue::Int32(i) => v1::rdbms_types::DbValue::Int32(i), spin::postgres::postgres::DbValue::Int64(i) => v1::rdbms_types::DbValue::Int64(i), - spin::postgres::postgres::DbValue::Uint8(j) => v1::rdbms_types::DbValue::Uint8(j), - spin::postgres::postgres::DbValue::Uint16(u) => v1::rdbms_types::DbValue::Uint16(u), - spin::postgres::postgres::DbValue::Uint32(u) => v1::rdbms_types::DbValue::Uint32(u), - spin::postgres::postgres::DbValue::Uint64(u) => v1::rdbms_types::DbValue::Uint64(u), spin::postgres::postgres::DbValue::Floating32(r) => { v1::rdbms_types::DbValue::Floating32(r) } @@ -93,10 +89,6 @@ mod rdbms_types { spin::postgres::postgres::DbValue::Int16(i) => v2::rdbms_types::DbValue::Int16(i), spin::postgres::postgres::DbValue::Int32(i) => v2::rdbms_types::DbValue::Int32(i), spin::postgres::postgres::DbValue::Int64(i) => v2::rdbms_types::DbValue::Int64(i), - spin::postgres::postgres::DbValue::Uint8(j) => v2::rdbms_types::DbValue::Uint8(j), - spin::postgres::postgres::DbValue::Uint16(u) => v2::rdbms_types::DbValue::Uint16(u), - spin::postgres::postgres::DbValue::Uint32(u) => v2::rdbms_types::DbValue::Uint32(u), - spin::postgres::postgres::DbValue::Uint64(u) => v2::rdbms_types::DbValue::Uint64(u), spin::postgres::postgres::DbValue::Floating32(r) => { v2::rdbms_types::DbValue::Floating32(r) } @@ -124,10 +116,6 @@ mod rdbms_types { spin::postgres::postgres::DbDataType::Int16 => v1::rdbms_types::DbDataType::Int16, spin::postgres::postgres::DbDataType::Int32 => v1::rdbms_types::DbDataType::Int32, spin::postgres::postgres::DbDataType::Int64 => v1::rdbms_types::DbDataType::Int64, - spin::postgres::postgres::DbDataType::Uint8 => v1::rdbms_types::DbDataType::Uint8, - spin::postgres::postgres::DbDataType::Uint16 => v1::rdbms_types::DbDataType::Uint16, - spin::postgres::postgres::DbDataType::Uint32 => v1::rdbms_types::DbDataType::Uint32, - spin::postgres::postgres::DbDataType::Uint64 => v1::rdbms_types::DbDataType::Uint64, spin::postgres::postgres::DbDataType::Floating32 => { v1::rdbms_types::DbDataType::Floating32 } @@ -152,10 +140,6 @@ mod rdbms_types { spin::postgres::postgres::DbDataType::Int16 => v2::rdbms_types::DbDataType::Int16, spin::postgres::postgres::DbDataType::Int32 => v2::rdbms_types::DbDataType::Int32, spin::postgres::postgres::DbDataType::Int64 => v2::rdbms_types::DbDataType::Int64, - spin::postgres::postgres::DbDataType::Uint8 => v2::rdbms_types::DbDataType::Uint8, - spin::postgres::postgres::DbDataType::Uint16 => v2::rdbms_types::DbDataType::Uint16, - spin::postgres::postgres::DbDataType::Uint32 => v2::rdbms_types::DbDataType::Uint32, - spin::postgres::postgres::DbDataType::Uint64 => v2::rdbms_types::DbDataType::Uint64, spin::postgres::postgres::DbDataType::Floating32 => { v2::rdbms_types::DbDataType::Floating32 } @@ -236,11 +220,13 @@ mod rdbms_types { } } - impl From for spin::postgres::postgres::ParameterValue { - fn from( + impl TryFrom for spin::postgres::postgres::ParameterValue { + type Error = v1::postgres::PgError; + + fn try_from( value: v1::rdbms_types::ParameterValue, - ) -> spin::postgres::postgres::ParameterValue { - match value { + ) -> Result { + let converted = match value { v1::rdbms_types::ParameterValue::Boolean(b) => { spin::postgres::postgres::ParameterValue::Boolean(b) } @@ -256,17 +242,13 @@ mod rdbms_types { v1::rdbms_types::ParameterValue::Int64(i) => { spin::postgres::postgres::ParameterValue::Int64(i) } - v1::rdbms_types::ParameterValue::Uint8(u) => { - spin::postgres::postgres::ParameterValue::Uint8(u) - } - v1::rdbms_types::ParameterValue::Uint16(u) => { - spin::postgres::postgres::ParameterValue::Uint16(u) - } - v1::rdbms_types::ParameterValue::Uint32(u) => { - spin::postgres::postgres::ParameterValue::Uint32(u) - } - v1::rdbms_types::ParameterValue::Uint64(u) => { - spin::postgres::postgres::ParameterValue::Uint64(u) + v1::rdbms_types::ParameterValue::Uint8(_) + | v1::rdbms_types::ParameterValue::Uint16(_) + | v1::rdbms_types::ParameterValue::Uint32(_) + | v1::rdbms_types::ParameterValue::Uint64(_) => { + return Err(v1::postgres::PgError::ValueConversionFailed( + "Postgres does not support unsigned integers".to_owned(), + )); } v1::rdbms_types::ParameterValue::Floating32(r) => { spin::postgres::postgres::ParameterValue::Floating32(r) @@ -283,15 +265,18 @@ mod rdbms_types { v1::rdbms_types::ParameterValue::DbNull => { spin::postgres::postgres::ParameterValue::DbNull } - } + }; + Ok(converted) } } - impl From for spin::postgres::postgres::ParameterValue { - fn from( + impl TryFrom for spin::postgres::postgres::ParameterValue { + type Error = v2::rdbms_types::Error; + + fn try_from( value: v2::rdbms_types::ParameterValue, - ) -> spin::postgres::postgres::ParameterValue { - match value { + ) -> Result { + let converted = match value { v2::rdbms_types::ParameterValue::Boolean(b) => { spin::postgres::postgres::ParameterValue::Boolean(b) } @@ -307,17 +292,13 @@ mod rdbms_types { v2::rdbms_types::ParameterValue::Int64(i) => { spin::postgres::postgres::ParameterValue::Int64(i) } - v2::rdbms_types::ParameterValue::Uint8(u) => { - spin::postgres::postgres::ParameterValue::Uint8(u) - } - v2::rdbms_types::ParameterValue::Uint16(u) => { - spin::postgres::postgres::ParameterValue::Uint16(u) - } - v2::rdbms_types::ParameterValue::Uint32(u) => { - spin::postgres::postgres::ParameterValue::Uint32(u) - } - v2::rdbms_types::ParameterValue::Uint64(u) => { - spin::postgres::postgres::ParameterValue::Uint64(u) + v2::rdbms_types::ParameterValue::Uint8(_) + | v2::rdbms_types::ParameterValue::Uint16(_) + | v2::rdbms_types::ParameterValue::Uint32(_) + | v2::rdbms_types::ParameterValue::Uint64(_) => { + return Err(v2::rdbms_types::Error::ValueConversionFailed( + "Postgres does not support unsigned integers".to_owned(), + )); } v2::rdbms_types::ParameterValue::Floating32(r) => { spin::postgres::postgres::ParameterValue::Floating32(r) @@ -334,7 +315,8 @@ mod rdbms_types { v2::rdbms_types::ParameterValue::DbNull => { spin::postgres::postgres::ParameterValue::DbNull } - } + }; + Ok(converted) } } diff --git a/wit/deps/spin-postgres@3.0.0/postgres.wit b/wit/deps/spin-postgres@3.0.0/postgres.wit index 35134959e..58aee3a40 100644 --- a/wit/deps/spin-postgres@3.0.0/postgres.wit +++ b/wit/deps/spin-postgres@3.0.0/postgres.wit @@ -17,10 +17,6 @@ interface postgres { int16, int32, int64, - uint8, - uint16, - uint32, - uint64, floating32, floating64, str, @@ -39,10 +35,6 @@ interface postgres { int16(s16), int32(s32), int64(s64), - uint8(u8), - uint16(u16), - uint32(u32), - uint64(u64), floating32(float32), floating64(float64), str(string), @@ -62,10 +54,6 @@ interface postgres { int16(s16), int32(s32), int64(s64), - uint8(u8), - uint16(u16), - uint32(u32), - uint64(u64), floating32(float32), floating64(float64), str(string),