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))",
+        )],
+    );
+}