Skip to content

Commit a0b36bd

Browse files
committed
Version bump to 3.2.9 - additional support for models references another model with multiple foreign keys associated with it.
1 parent 99af1c7 commit a0b36bd

File tree

7 files changed

+67
-11
lines changed

7 files changed

+67
-11
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
# Changelog
22

3+
## 3.2.9 - 2023-10-09
4+
5+
- Re: [supabase-csharp#115](https://github.com/supabase-community/supabase-csharp/discussions/115) Additional support for a model referencing another model with multiple foreign keys.
6+
37
## 3.2.8 - 2023-10-08
48

59
- Re: [supabase-csharp#115](https://github.com/supabase-community/supabase-csharp/discussions/115) Adds support for

Postgrest/Attributes/ReferenceAttribute.cs

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -186,9 +186,18 @@ private void ParseRelationships(List<ReferenceAttribute> seenRefs)
186186
seenRefs.Add(refAttr);
187187
refAttr.ParseProperties(seenRefs);
188188

189-
Columns.Add(UseInnerJoin
190-
? $"{refAttr.TableName}!inner({string.Join(",", refAttr.Columns.ToArray())})"
191-
: $"{refAttr.TableName}({string.Join(",", refAttr.Columns.ToArray())})");
189+
if (!string.IsNullOrEmpty(refAttr.ForeignKey))
190+
{
191+
Columns.Add(UseInnerJoin
192+
? $"{refAttr.ColumnName}:{refAttr.ForeignKey}!inner({string.Join(",", refAttr.Columns.ToArray())})"
193+
: $"{refAttr.ColumnName}:{refAttr.ForeignKey}({string.Join(",", refAttr.Columns.ToArray())})");
194+
}
195+
else
196+
{
197+
Columns.Add(UseInnerJoin
198+
? $"{refAttr.TableName}!inner({string.Join(",", refAttr.Columns.ToArray())})"
199+
: $"{refAttr.TableName}({string.Join(",", refAttr.Columns.ToArray())})");
200+
}
192201
}
193202
}
194203
}

Postgrest/Postgrest.csproj

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@
2121
</Description>
2222
<PackageIconUrl>https://avatars.githubusercontent.com/u/54469796?s=200&amp;v=4</PackageIconUrl>
2323
<PackageTags>supabase,postgrest</PackageTags>
24-
<ReleaseVersion>3.2.8</ReleaseVersion>
25-
<PackageVersion>3.2.8</PackageVersion>
24+
<ReleaseVersion>3.2.9</ReleaseVersion>
25+
<PackageVersion>3.2.9</PackageVersion>
2626
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
2727
<PackageIcon>icon.png</PackageIcon>
2828
<PackageReadmeFile>README.md</PackageReadmeFile>
@@ -35,7 +35,7 @@
3535
</PropertyGroup>
3636

3737
<PropertyGroup Condition=" '$(Version)' == '' ">
38-
<VersionPrefix Condition=" '$(VersionPrefix)' == '' ">3.2.8</VersionPrefix>
38+
<VersionPrefix Condition=" '$(VersionPrefix)' == '' ">3.2.9</VersionPrefix>
3939
<VersionSuffix Condition=" '$(VersionSuffix)' == '' ">
4040
</VersionSuffix>
4141
<Version Condition=" '$(VersionSuffix)' != '' ">$(VersionPrefix)-$(VersionSuffix)</Version>
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
using Postgrest.Attributes;
2+
using Postgrest.Models;
3+
4+
namespace PostgrestTests.Models;
5+
6+
[Table("nested_foreign_key_test")]
7+
public class NestedForeignKeyTestModel : BaseModel
8+
{
9+
[PrimaryKey("id")] public int Id { get; set; }
10+
11+
[Reference(typeof(ForeignKeyTestModel))]
12+
public ForeignKeyTestModel FKTestModel { get; set; }
13+
14+
[Reference(typeof(User))] public User User { get; set; }
15+
}

PostgrestTests/ReferenceTests.cs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,5 +108,17 @@ public async Task TestModelCanReferenceSameForeignTableMultipleTimes()
108108
Assert.IsInstanceOfType(response.Model!.MovieFK2, typeof(Movie));
109109
Assert.IsInstanceOfType(response.Model!.RandomPersonFK, typeof(Person));
110110
}
111+
112+
[TestMethod("Reference: Table can reference a nested model with the same foreign table multiple times.")]
113+
public async Task TestModelCanReferenceNestedModelWithSameForeignTableMultipleTimes()
114+
{
115+
var client = new Client(BaseUrl);
116+
117+
var response = await client.Table<NestedForeignKeyTestModel>().Get();
118+
119+
Assert.IsTrue(response.Models.Count > 0);
120+
Assert.IsInstanceOfType(response.Model!.User, typeof(User));
121+
Assert.IsInstanceOfType(response.Model!.FKTestModel, typeof(ForeignKeyTestModel));
122+
}
111123
}
112124
}

PostgrestTests/db/00-schema.sql

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -151,9 +151,9 @@ $$ LANGUAGE SQL IMMUTABLE;
151151

152152
create table public.foreign_key_test
153153
(
154-
"id" serial primary key,
155-
"movie_fk_1" UUID null,
156-
"movie_fk_2" UUID null,
154+
"id" serial primary key,
155+
"movie_fk_1" UUID null,
156+
"movie_fk_2" UUID null,
157157
"random_person_fk" UUID NULL
158158
);
159159

@@ -162,4 +162,16 @@ ALTER TABLE "public"."foreign_key_test"
162162
ALTER TABLE "public"."foreign_key_test"
163163
ADD CONSTRAINT "foreign_key_test_relation_2" FOREIGN KEY ("movie_fk_2") REFERENCES "public"."movie" ("id") ON UPDATE CASCADE ON DELETE CASCADE;
164164
ALTER TABLE "public"."foreign_key_test"
165-
ADD CONSTRAINT "foreign_key_random_person_fk" FOREIGN KEY ("random_person_fk") REFERENCES "public"."person" ("id") ON UPDATE CASCADE ON DELETE CASCADE;
165+
ADD CONSTRAINT "foreign_key_random_person_fk" FOREIGN KEY ("random_person_fk") REFERENCES "public"."person" ("id") ON UPDATE CASCADE ON DELETE CASCADE;
166+
167+
create table "public"."nested_foreign_key_test"
168+
(
169+
"id" serial primary key,
170+
"foreign_key_test_fk" INT null,
171+
"user_fk" varchar(255) null
172+
);
173+
174+
ALTER TABLE "public"."nested_foreign_key_test"
175+
ADD CONSTRAINT "nested_foreign_key_test_relation_1" FOREIGN KEY ("foreign_key_test_fk") REFERENCES "public"."foreign_key_test" ("id") ON UPDATE CASCADE ON DELETE CASCADE;
176+
ALTER TABLE "public"."nested_foreign_key_test"
177+
ADD CONSTRAINT "nested_foreign_key_test_relation_2" FOREIGN KEY ("user_fk") REFERENCES "public"."users" ("username") ON UPDATE CASCADE ON DELETE CASCADE;

PostgrestTests/db/01-dummy-data.sql

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,4 +88,8 @@ insert into "public"."movie_person" ("movie_id", "person_id")
8888
values ('42fd15b1-3bff-431d-9fa5-314289beb246', 'd948ca02-c432-470e-9fe5-738269491762');
8989

9090
insert into "public"."foreign_key_test" ("movie_fk_1", "movie_fk_2", "random_person_fk")
91-
values ('ea07bd86-a507-4c68-9545-b848bfe74c90', 'ea07bd86-a507-4c68-9545-b848bfe74c90', 'd53072eb-5e64-4e9c-8a29-3ed07076fb2f');
91+
values ('ea07bd86-a507-4c68-9545-b848bfe74c90', 'ea07bd86-a507-4c68-9545-b848bfe74c90',
92+
'd53072eb-5e64-4e9c-8a29-3ed07076fb2f');
93+
94+
insert into "public"."nested_foreign_key_test" ("foreign_key_test_fk", "user_fk")
95+
values ('1', 'awailas');

0 commit comments

Comments
 (0)