Skip to content

Commit 5ccbb4c

Browse files
authored
[patch] Add test for non null enum type (#315)
* add test for non null enum type * fix tests * move dotnet version to global.json file
1 parent d2f7883 commit 5ccbb4c

27 files changed

Lines changed: 819 additions & 21 deletions

File tree

.github/workflows/build.yml

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ defaults:
66
env:
77
SQLC_VERSION: 1.30.0
88
WASI_SDK_VERSION: 22
9-
DOTNET_VERSION: '8.0.x'
109

1110
on:
1211
push:
@@ -33,7 +32,7 @@ jobs:
3332
- name: Setup Dotnet
3433
uses: actions/setup-dotnet@v4
3534
with:
36-
dotnet-version: ${{ env.DOTNET_VERSION }}
35+
global-json-file: global.json
3736

3837
- name: install Wasi workload
3938
run: dotnet workload install wasi-experimental
@@ -74,7 +73,7 @@ jobs:
7473
- name: Set up .NET
7574
uses: actions/setup-dotnet@v4
7675
with:
77-
dotnet-version: ${{ env.DOTNET_VERSION }}
76+
global-json-file: global.json
7877

7978
- name: .NET Lint
8079
uses: zyactions/dotnet-lint@v1
@@ -101,7 +100,7 @@ jobs:
101100
- name: Setup Dotnet
102101
uses: actions/setup-dotnet@v4
103102
with:
104-
dotnet-version: ${{ env.DOTNET_VERSION }}
103+
global-json-file: global.json
105104

106105
- uses: sqlc-dev/setup-sqlc@v4
107106
with:

end2end/EndToEndScaffold/Config.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ public enum KnownTestType
5656
PostgresJsonDataTypes,
5757
PostgresXmlDataTypes,
5858
PostgresEnumDataType,
59+
PostgresNotNullTypes,
5960

6061
// :copyfrom (Batch)
6162
PostgresStringCopyFrom,
@@ -171,6 +172,7 @@ internal static class Config
171172
KnownTestType.PostgresNetworkDataTypes,
172173
KnownTestType.PostgresXmlDataTypes,
173174
KnownTestType.PostgresEnumDataType,
175+
KnownTestType.PostgresNotNullTypes,
174176
KnownTestType.PostgresFullTextSearchDataTypes,
175177

176178
// :copyfrom (Batch)

end2end/EndToEndScaffold/Templates/PostgresTests.cs

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1192,9 +1192,11 @@ void AssertSingularEquals(QuerySql.GetPostgresNetworkTypesCntRow x, QuerySql.Get
11921192
{
11931193
Impl = $$"""
11941194
[Test]
1195+
[TestCase(CEnum.Small)]
11951196
[TestCase(CEnum.Medium)]
1197+
[TestCase(CEnum.Big)]
11961198
[TestCase(null)]
1197-
public async Task TestPostgresStringTypes(CEnum? cEnum)
1199+
public async Task TestPostgresEnumTypes(CEnum? cEnum)
11981200
{
11991201
await QuerySql.InsertPostgresSpecialTypes(new QuerySql.InsertPostgresSpecialTypesArgs
12001202
{
@@ -1215,6 +1217,32 @@ void AssertSingularEquals(QuerySql.GetPostgresSpecialTypesRow x, QuerySql.GetPos
12151217
}
12161218
"""
12171219
},
1220+
[KnownTestType.PostgresNotNullTypes] = new TestImpl
1221+
{
1222+
Impl = $$"""
1223+
[Test]
1224+
[TestCase(CEnum.Small)]
1225+
public async Task TestPostgresNotNullTypes(CEnum cEnumNotNull)
1226+
{
1227+
await QuerySql.InsertPostgresNotNullTypes(new QuerySql.InsertPostgresNotNullTypesArgs
1228+
{
1229+
CEnumNotNull = cEnumNotNull
1230+
});
1231+
1232+
var expected = new QuerySql.GetPostgresNotNullTypesRow
1233+
{
1234+
CEnumNotNull = cEnumNotNull
1235+
};
1236+
var actual = await QuerySql.GetPostgresNotNullTypes();
1237+
AssertSingularEquals(expected, actual{{Consts.UnknownRecordValuePlaceholder}});
1238+
1239+
void AssertSingularEquals(QuerySql.GetPostgresNotNullTypesRow x, QuerySql.GetPostgresNotNullTypesRow y)
1240+
{
1241+
Assert.That(x.CEnumNotNull, Is.EqualTo(y.CEnumNotNull));
1242+
}
1243+
}
1244+
"""
1245+
},
12181246
[KnownTestType.PostgresFullTextSearchDataTypes] = new TestImpl
12191247
{
12201248
Impl = $$"""

end2end/EndToEndTests/NpgsqlDapperTester.generated.cs

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -729,9 +729,11 @@ void AssertSingularEquals(QuerySql.GetPostgresSpecialTypesRow x, QuerySql.GetPos
729729
}
730730

731731
[Test]
732+
[TestCase(CEnum.Small)]
732733
[TestCase(CEnum.Medium)]
734+
[TestCase(CEnum.Big)]
733735
[TestCase(null)]
734-
public async Task TestPostgresStringTypes(CEnum? cEnum)
736+
public async Task TestPostgresEnumTypes(CEnum? cEnum)
735737
{
736738
await QuerySql.InsertPostgresSpecialTypes(new QuerySql.InsertPostgresSpecialTypesArgs { CEnum = cEnum });
737739
var expected = new QuerySql.GetPostgresSpecialTypesRow
@@ -746,6 +748,23 @@ void AssertSingularEquals(QuerySql.GetPostgresSpecialTypesRow x, QuerySql.GetPos
746748
}
747749
}
748750

751+
[Test]
752+
[TestCase(CEnum.Small)]
753+
public async Task TestPostgresNotNullTypes(CEnum cEnumNotNull)
754+
{
755+
await QuerySql.InsertPostgresNotNullTypes(new QuerySql.InsertPostgresNotNullTypesArgs { CEnumNotNull = cEnumNotNull });
756+
var expected = new QuerySql.GetPostgresNotNullTypesRow
757+
{
758+
CEnumNotNull = cEnumNotNull
759+
};
760+
var actual = await QuerySql.GetPostgresNotNullTypes();
761+
AssertSingularEquals(expected, actual);
762+
void AssertSingularEquals(QuerySql.GetPostgresNotNullTypesRow x, QuerySql.GetPostgresNotNullTypesRow y)
763+
{
764+
Assert.That(x.CEnumNotNull, Is.EqualTo(y.CEnumNotNull));
765+
}
766+
}
767+
749768
[Test]
750769
[TestCase(100, "z", "Sex Pistols", "Anarchy in the U.K", "Yoshimi Battles the Pink Robots", "Never Mind the Bollocks...")]
751770
[TestCase(10, null, null, null, null, null)]

end2end/EndToEndTests/NpgsqlTester.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,5 +21,6 @@ public async Task EmptyTestsTables()
2121
await QuerySql.TruncatePostgresNetworkTypes();
2222
await QuerySql.TruncatePostgresArrayTypes();
2323
await QuerySql.TruncatePostgresSpecialTypes();
24+
await QuerySql.TruncatePostgresNotNullTypes();
2425
}
2526
}

end2end/EndToEndTests/NpgsqlTester.generated.cs

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -729,9 +729,11 @@ void AssertSingularEquals(QuerySql.GetPostgresSpecialTypesRow x, QuerySql.GetPos
729729
}
730730

731731
[Test]
732+
[TestCase(CEnum.Small)]
732733
[TestCase(CEnum.Medium)]
734+
[TestCase(CEnum.Big)]
733735
[TestCase(null)]
734-
public async Task TestPostgresStringTypes(CEnum? cEnum)
736+
public async Task TestPostgresEnumTypes(CEnum? cEnum)
735737
{
736738
await QuerySql.InsertPostgresSpecialTypes(new QuerySql.InsertPostgresSpecialTypesArgs { CEnum = cEnum });
737739
var expected = new QuerySql.GetPostgresSpecialTypesRow
@@ -746,6 +748,23 @@ void AssertSingularEquals(QuerySql.GetPostgresSpecialTypesRow x, QuerySql.GetPos
746748
}
747749
}
748750

751+
[Test]
752+
[TestCase(CEnum.Small)]
753+
public async Task TestPostgresNotNullTypes(CEnum cEnumNotNull)
754+
{
755+
await QuerySql.InsertPostgresNotNullTypes(new QuerySql.InsertPostgresNotNullTypesArgs { CEnumNotNull = cEnumNotNull });
756+
var expected = new QuerySql.GetPostgresNotNullTypesRow
757+
{
758+
CEnumNotNull = cEnumNotNull
759+
};
760+
var actual = await QuerySql.GetPostgresNotNullTypes();
761+
AssertSingularEquals(expected, actual.Value);
762+
void AssertSingularEquals(QuerySql.GetPostgresNotNullTypesRow x, QuerySql.GetPostgresNotNullTypesRow y)
763+
{
764+
Assert.That(x.CEnumNotNull, Is.EqualTo(y.CEnumNotNull));
765+
}
766+
}
767+
749768
[Test]
750769
[TestCase(100, "z", "Sex Pistols", "Anarchy in the U.K", "Yoshimi Battles the Pink Robots", "Never Mind the Bollocks...")]
751770
[TestCase(10, null, null, null, null, null)]

end2end/EndToEndTestsLegacy/NpgsqlDapperTester.generated.cs

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -729,9 +729,11 @@ void AssertSingularEquals(QuerySql.GetPostgresSpecialTypesRow x, QuerySql.GetPos
729729
}
730730

731731
[Test]
732+
[TestCase(CEnum.Small)]
732733
[TestCase(CEnum.Medium)]
734+
[TestCase(CEnum.Big)]
733735
[TestCase(null)]
734-
public async Task TestPostgresStringTypes(CEnum? cEnum)
736+
public async Task TestPostgresEnumTypes(CEnum? cEnum)
735737
{
736738
await QuerySql.InsertPostgresSpecialTypes(new QuerySql.InsertPostgresSpecialTypesArgs { CEnum = cEnum });
737739
var expected = new QuerySql.GetPostgresSpecialTypesRow
@@ -746,6 +748,23 @@ void AssertSingularEquals(QuerySql.GetPostgresSpecialTypesRow x, QuerySql.GetPos
746748
}
747749
}
748750

751+
[Test]
752+
[TestCase(CEnum.Small)]
753+
public async Task TestPostgresNotNullTypes(CEnum cEnumNotNull)
754+
{
755+
await QuerySql.InsertPostgresNotNullTypes(new QuerySql.InsertPostgresNotNullTypesArgs { CEnumNotNull = cEnumNotNull });
756+
var expected = new QuerySql.GetPostgresNotNullTypesRow
757+
{
758+
CEnumNotNull = cEnumNotNull
759+
};
760+
var actual = await QuerySql.GetPostgresNotNullTypes();
761+
AssertSingularEquals(expected, actual);
762+
void AssertSingularEquals(QuerySql.GetPostgresNotNullTypesRow x, QuerySql.GetPostgresNotNullTypesRow y)
763+
{
764+
Assert.That(x.CEnumNotNull, Is.EqualTo(y.CEnumNotNull));
765+
}
766+
}
767+
749768
[Test]
750769
[TestCase(100, "z", "Sex Pistols", "Anarchy in the U.K", "Yoshimi Battles the Pink Robots", "Never Mind the Bollocks...")]
751770
[TestCase(10, null, null, null, null, null)]

end2end/EndToEndTestsLegacy/NpgsqlTester.generated.cs

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -729,9 +729,11 @@ void AssertSingularEquals(QuerySql.GetPostgresSpecialTypesRow x, QuerySql.GetPos
729729
}
730730

731731
[Test]
732+
[TestCase(CEnum.Small)]
732733
[TestCase(CEnum.Medium)]
734+
[TestCase(CEnum.Big)]
733735
[TestCase(null)]
734-
public async Task TestPostgresStringTypes(CEnum? cEnum)
736+
public async Task TestPostgresEnumTypes(CEnum? cEnum)
735737
{
736738
await QuerySql.InsertPostgresSpecialTypes(new QuerySql.InsertPostgresSpecialTypesArgs { CEnum = cEnum });
737739
var expected = new QuerySql.GetPostgresSpecialTypesRow
@@ -746,6 +748,23 @@ void AssertSingularEquals(QuerySql.GetPostgresSpecialTypesRow x, QuerySql.GetPos
746748
}
747749
}
748750

751+
[Test]
752+
[TestCase(CEnum.Small)]
753+
public async Task TestPostgresNotNullTypes(CEnum cEnumNotNull)
754+
{
755+
await QuerySql.InsertPostgresNotNullTypes(new QuerySql.InsertPostgresNotNullTypesArgs { CEnumNotNull = cEnumNotNull });
756+
var expected = new QuerySql.GetPostgresNotNullTypesRow
757+
{
758+
CEnumNotNull = cEnumNotNull
759+
};
760+
var actual = await QuerySql.GetPostgresNotNullTypes();
761+
AssertSingularEquals(expected, actual);
762+
void AssertSingularEquals(QuerySql.GetPostgresNotNullTypesRow x, QuerySql.GetPostgresNotNullTypesRow y)
763+
{
764+
Assert.That(x.CEnumNotNull, Is.EqualTo(y.CEnumNotNull));
765+
}
766+
}
767+
749768
[Test]
750769
[TestCase(100, "z", "Sex Pistols", "Anarchy in the U.K", "Yoshimi Battles the Pink Robots", "Never Mind the Bollocks...")]
751770
[TestCase(10, null, null, null, null, null)]

examples/NpgsqlDapperExample/Models.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,10 @@ public class PostgresSpecialType
8989
public XmlDocument? CXml { get; init; }
9090
public XmlDocument? CXmlStringOverride { get; init; }
9191
};
92+
public class PostgresNotNullType
93+
{
94+
public required CEnum CEnumNotNull { get; init; }
95+
};
9296
public class ExtendedBio
9397
{
9498
public required string AuthorName { get; init; }

examples/NpgsqlDapperExample/QuerySql.cs

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1183,6 +1183,63 @@ public async Task InsertPostgresSpecialTypes(InsertPostgresSpecialTypesArgs args
11831183
await this.Transaction.Connection.ExecuteAsync(InsertPostgresSpecialTypesSql, queryParams, transaction: this.Transaction);
11841184
}
11851185

1186+
private const string InsertPostgresNotNullTypesSql = "INSERT INTO postgres_not_null_types ( c_enum_not_null ) VALUES ( @c_enum_not_null::c_enum )";
1187+
public class InsertPostgresNotNullTypesArgs
1188+
{
1189+
public required CEnum CEnumNotNull { get; init; }
1190+
};
1191+
public async Task InsertPostgresNotNullTypes(InsertPostgresNotNullTypesArgs args)
1192+
{
1193+
var queryParams = new Dictionary<string, object?>();
1194+
queryParams.Add("c_enum_not_null", args.CEnumNotNull.Stringify());
1195+
if (this.Transaction == null)
1196+
{
1197+
using (var connection = new NpgsqlConnection(ConnectionString))
1198+
await connection.ExecuteAsync(InsertPostgresNotNullTypesSql, queryParams);
1199+
return;
1200+
}
1201+
1202+
if (this.Transaction?.Connection == null || this.Transaction?.Connection.State != System.Data.ConnectionState.Open)
1203+
throw new InvalidOperationException("Transaction is provided, but its connection is null.");
1204+
await this.Transaction.Connection.ExecuteAsync(InsertPostgresNotNullTypesSql, queryParams, transaction: this.Transaction);
1205+
}
1206+
1207+
private const string GetPostgresNotNullTypesSql = "SELECT c_enum_not_null FROM postgres_not_null_types LIMIT 1";
1208+
public class GetPostgresNotNullTypesRow
1209+
{
1210+
public required CEnum CEnumNotNull { get; init; }
1211+
};
1212+
public async Task<GetPostgresNotNullTypesRow?> GetPostgresNotNullTypes()
1213+
{
1214+
if (this.Transaction == null)
1215+
{
1216+
using (var connection = new NpgsqlConnection(ConnectionString))
1217+
{
1218+
var result = await connection.QueryFirstOrDefaultAsync<GetPostgresNotNullTypesRow?>(GetPostgresNotNullTypesSql);
1219+
return result;
1220+
}
1221+
}
1222+
1223+
if (this.Transaction?.Connection == null || this.Transaction?.Connection.State != System.Data.ConnectionState.Open)
1224+
throw new InvalidOperationException("Transaction is provided, but its connection is null.");
1225+
return await this.Transaction.Connection.QueryFirstOrDefaultAsync<GetPostgresNotNullTypesRow?>(GetPostgresNotNullTypesSql, transaction: this.Transaction);
1226+
}
1227+
1228+
private const string TruncatePostgresNotNullTypesSql = "TRUNCATE TABLE postgres_not_null_types";
1229+
public async Task TruncatePostgresNotNullTypes()
1230+
{
1231+
if (this.Transaction == null)
1232+
{
1233+
using (var connection = new NpgsqlConnection(ConnectionString))
1234+
await connection.ExecuteAsync(TruncatePostgresNotNullTypesSql);
1235+
return;
1236+
}
1237+
1238+
if (this.Transaction?.Connection == null || this.Transaction?.Connection.State != System.Data.ConnectionState.Open)
1239+
throw new InvalidOperationException("Transaction is provided, but its connection is null.");
1240+
await this.Transaction.Connection.ExecuteAsync(TruncatePostgresNotNullTypesSql, transaction: this.Transaction);
1241+
}
1242+
11861243
private const string GetPostgresSpecialTypesSql = "SELECT c_json, c_json_string_override, c_jsonb, c_jsonpath, c_xml, c_xml_string_override, c_uuid, c_enum FROM postgres_special_types LIMIT 1";
11871244
public class GetPostgresSpecialTypesRow
11881245
{

0 commit comments

Comments
 (0)