From 113d4104b6283b3aedd4e1c2c53f960f6b0c1312 Mon Sep 17 00:00:00 2001 From: philomathic_life <15947783+zacknewman@users.noreply.github.com> Date: Wed, 20 Nov 2024 03:07:38 +0000 Subject: [PATCH 1/2] fix fromsql for domains --- postgres-derive/src/fromsql.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/postgres-derive/src/fromsql.rs b/postgres-derive/src/fromsql.rs index d3ac47f4f..7017f4bd9 100644 --- a/postgres-derive/src/fromsql.rs +++ b/postgres-derive/src/fromsql.rs @@ -179,7 +179,10 @@ fn domain_accepts_body(name: &str, field: &syn::Field) -> TokenStream { fn domain_body(ident: &Ident, field: &syn::Field) -> TokenStream { let ty = &field.ty; quote! { - <#ty as postgres_types::FromSql>::from_sql(_type, buf).map(#ident) + <#ty as postgres_types::FromSql>::from_sql(match *_type.kind() { + postgres_types::Kind::Domain(ref _type) => _type, + _ => _type + }, buf).map(#ident) } } From cc17f8e1ae312ca8dc884cd75460d3a0393d2cdb Mon Sep 17 00:00:00 2001 From: philomathic_life <15947783+zacknewman@users.noreply.github.com> Date: Fri, 22 Nov 2024 03:29:19 +0000 Subject: [PATCH 2/2] add test for composite in domain in composite --- postgres-derive-test/src/domains.rs | 33 +++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/postgres-derive-test/src/domains.rs b/postgres-derive-test/src/domains.rs index 25674f75e..bee415b62 100644 --- a/postgres-derive-test/src/domains.rs +++ b/postgres-derive-test/src/domains.rs @@ -119,3 +119,36 @@ fn domain_in_composite() { )], ); } + +#[test] +fn composite_in_domain_in_composite() { + #[derive(FromSql, ToSql, Debug, PartialEq)] + #[postgres(name = "leaf_composite")] + struct LeafComposite { + prim: i32, + } + + #[derive(FromSql, ToSql, Debug, PartialEq)] + #[postgres(name = "domain")] + struct Domain(LeafComposite); + + #[derive(FromSql, ToSql, Debug, PartialEq)] + #[postgres(name = "root_composite")] + struct RootComposite { + domain: Domain, + } + + let mut conn = Client::connect("user=postgres host=localhost port=5433", NoTls).unwrap(); + conn.batch_execute("CREATE TYPE leaf_composite AS (prim integer); CREATE DOMAIN domain AS leaf_composite; CREATE TYPE root_composite AS (domain domain);").unwrap(); + + test_type( + &mut conn, + "root_composite", + &[( + RootComposite { + domain: Domain(LeafComposite { prim: 1 }), + }, + "ROW(ROW(1))", + )], + ); +}