Skip to content

Commit 488acbe

Browse files
unify method generation across dotnet core and framework (#175)
1 parent b5b3276 commit 488acbe

File tree

19 files changed

+478
-418
lines changed

19 files changed

+478
-418
lines changed

CodeGenerator/CodeGenerator.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,9 @@ public class CodeGenerator
1818
private static readonly string[] ResharperDisables =
1919
[
2020
"UnusedAutoPropertyAccessor.Global",
21-
"NotAccessedPositionalProperty.Global"
21+
"NotAccessedPositionalProperty.Global",
22+
"ConvertToUsingDeclaration",
23+
"UseAwaitUsing"
2224
];
2325

2426
private string? _namespaceName;

Drivers/Generators/CopyFromDeclareGen.cs

Lines changed: 11 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -24,40 +24,19 @@ private string GetMethodBody(string queryTextConstant, Query query)
2424
var (establishConnection, connectionOpen) = dbDriver.EstablishConnection(query);
2525
var beginBinaryImport = $"{Variable.Connection.AsVarName()}.BeginBinaryImportAsync({queryTextConstant}";
2626
var addRowsToCopyCommand = AddRowsToCopyCommand(query);
27-
28-
if (dbDriver.Options.DotnetFramework.LatestDotnetSupported())
29-
return GetAsLatest();
30-
return GetAsLegacy();
31-
32-
string GetAsLatest()
33-
{
34-
return $"""
35-
await using {establishConnection};
36-
{connectionOpen.AppendSemicolonUnlessEmpty()}
37-
await {Variable.Connection.AsVarName()}.OpenAsync();
38-
await using var {Variable.Writer.AsVarName()} = await {beginBinaryImport});
39-
{addRowsToCopyCommand}
40-
await {Variable.Writer.AsVarName()}.CompleteAsync();
41-
await {Variable.Connection.AsVarName()}.CloseAsync();
42-
""";
43-
}
44-
45-
string GetAsLegacy()
46-
{
47-
return $$"""
48-
using ({{establishConnection}})
27+
return $$"""
28+
using ({{establishConnection}})
29+
{
30+
{{connectionOpen.AppendSemicolonUnlessEmpty()}}
31+
await {{Variable.Connection.AsVarName()}}.OpenAsync();
32+
using (var {{Variable.Writer.AsVarName()}} = await {{beginBinaryImport}}))
4933
{
50-
{{connectionOpen.AppendSemicolonUnlessEmpty()}}
51-
await {{Variable.Connection.AsVarName()}}.OpenAsync();
52-
using (var {{Variable.Writer.AsVarName()}} = await {{beginBinaryImport}}))
53-
{
54-
{{addRowsToCopyCommand}}
55-
await {{Variable.Writer.AsVarName()}}.CompleteAsync();
56-
}
57-
await {{Variable.Connection.AsVarName()}}.CloseAsync();
34+
{{addRowsToCopyCommand}}
35+
await {{Variable.Writer.AsVarName()}}.CompleteAsync();
5836
}
59-
""";
60-
}
37+
await {{Variable.Connection.AsVarName()}}.CloseAsync();
38+
}
39+
""";
6140
}
6241

6342
private string AddRowsToCopyCommand(Query query)

Drivers/Generators/ExecDeclareGen.cs

Lines changed: 2 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,7 @@ private string GetMethodBody(string queryTextConstant, Query query)
2626
var createSqlCommand = dbDriver.CreateSqlCommand(queryTextConstant);
2727
var commandParameters = CommonGen.GetCommandParameters(query.Params);
2828
var executeScalar = $"await {Variable.Command.AsVarName()}.ExecuteScalarAsync();";
29-
30-
if (dbDriver.Options.UseDapper)
31-
return GetAsDapper();
32-
if (dbDriver.Options.DotnetFramework.LatestDotnetSupported())
33-
return GetAsLatest();
34-
return GetAsLegacy();
29+
return dbDriver.Options.UseDapper ? GetAsDapper() : GetAsDriver();
3530

3631
string GetAsDapper()
3732
{
@@ -44,18 +39,7 @@ string GetAsDapper()
4439
""";
4540
}
4641

47-
string GetAsLatest()
48-
{
49-
return $$"""
50-
await using {{establishConnection}};
51-
{{connectionOpen.AppendSemicolonUnlessEmpty()}}
52-
await using {{createSqlCommand}};
53-
{{commandParameters.JoinByNewLine()}}
54-
{{executeScalar}}
55-
""";
56-
}
57-
58-
string GetAsLegacy()
42+
string GetAsDriver()
5943
{
6044
return $$"""
6145
using ({{establishConnection}})

Drivers/Generators/ExecLastIdDeclareGen.cs

Lines changed: 9 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -31,35 +31,16 @@ private string GetMethodBody(string queryTextConstant, Query query)
3131
var createSqlCommand = dbDriver.CreateSqlCommand(queryTextConstant);
3232
var commandParameters = CommonGen.GetCommandParameters(query.Params).JoinByNewLine();
3333
var returnLastId = ((IExecLastId)dbDriver).GetLastIdStatement().JoinByNewLine();
34-
35-
if (dbDriver.Options.DotnetFramework.LatestDotnetSupported())
36-
return GetAsLatest();
37-
return GetAsLegacy();
38-
39-
string GetAsLatest()
40-
{
41-
return $"""
42-
await using {establishConnection};
43-
{connectionOpen}
44-
await using {createSqlCommand};
45-
{commandParameters}
46-
{returnLastId}
47-
""";
48-
}
49-
50-
string GetAsLegacy()
51-
{
52-
return $$"""
53-
using ({{establishConnection}})
34+
return $$"""
35+
using ({{establishConnection}})
36+
{
37+
{{connectionOpen}}
38+
using ({{createSqlCommand}})
5439
{
55-
{{connectionOpen}}
56-
using ({{createSqlCommand}})
57-
{
58-
{{commandParameters}}
59-
{{returnLastId}}
60-
}
40+
{{commandParameters}}
41+
{{returnLastId}}
6142
}
62-
""";
63-
}
43+
}
44+
""";
6445
}
6546
}

Drivers/Generators/ExecRowsDeclareGen.cs

Lines changed: 2 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,7 @@ private string GetMethodBody(string queryTextConstant, Query query)
2828
var createSqlCommand = dbDriver.CreateSqlCommand(queryTextConstant);
2929
var commandParameters = CommonGen.GetCommandParameters(query.Params);
3030
var executeScalarAndReturnCreated = ExecuteScalarAndReturnCreated();
31-
32-
if (dbDriver.Options.UseDapper)
33-
return GetAsDapper();
34-
if (dbDriver.Options.DotnetFramework.LatestDotnetSupported())
35-
return GetAsLatest();
36-
return GetAsLegacy();
31+
return dbDriver.Options.UseDapper ? GetAsDapper() : GetAsDriver();
3732

3833
string GetAsDapper()
3934
{
@@ -46,18 +41,7 @@ string GetAsDapper()
4641
""";
4742
}
4843

49-
string GetAsLatest()
50-
{
51-
return $"""
52-
await using {establishConnection};
53-
{connectionOpen.AppendSemicolonUnlessEmpty()}
54-
await using {createSqlCommand};
55-
{commandParameters.JoinByNewLine()}
56-
{executeScalarAndReturnCreated.JoinByNewLine()}
57-
""";
58-
}
59-
60-
string GetAsLegacy()
44+
string GetAsDriver()
6145
{
6246
return $$"""
6347
using ({{establishConnection}})

Drivers/Generators/ManyDeclareGen.cs

Lines changed: 2 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -36,12 +36,7 @@ private string GetMethodBody(string queryTextConstant, string returnInterface, Q
3636
{{Variable.Result.AsVarName()}}.Add({{dataclassInit}});
3737
}
3838
""";
39-
40-
if (dbDriver.Options.UseDapper)
41-
return GetAsDapper();
42-
if (dbDriver.Options.DotnetFramework.LatestDotnetSupported())
43-
return GetAsLatest();
44-
return GetAsLegacy();
39+
return dbDriver.Options.UseDapper ? GetAsDapper() : GetAsDriver();
4540

4641
string GetAsDapper()
4742
{
@@ -56,21 +51,7 @@ string GetAsDapper()
5651
""";
5752
}
5853

59-
string GetAsLatest()
60-
{
61-
return $$"""
62-
await using {{establishConnection}};
63-
{{connectionOpen.AppendSemicolonUnlessEmpty()}}
64-
await using {{createSqlCommand}};
65-
{{commandParameters.JoinByNewLine()}}
66-
{{initDataReader}};
67-
var {{Variable.Result.AsVarName()}} = new List<{{returnInterface}}>();
68-
{{readWhileExists}}
69-
return {{Variable.Result.AsVarName()}};
70-
""";
71-
}
72-
73-
string GetAsLegacy()
54+
string GetAsDriver()
7455
{
7556
return $$"""
7657
using ({{establishConnection}})

Drivers/Generators/OneDeclareGen.cs

Lines changed: 2 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,7 @@ private string GetMethodBody(string queryTextConstant, string returnInterface, Q
3030
var initDataReader = CommonGen.InitDataReader();
3131
var awaitReaderRow = CommonGen.AwaitReaderRow();
3232
var returnDataclass = CommonGen.InstantiateDataclass(query.Columns, returnInterface);
33-
34-
if (dbDriver.Options.UseDapper)
35-
return GetAsDapper();
36-
if (dbDriver.Options.DotnetFramework.LatestDotnetSupported())
37-
return GetAsLatest();
38-
return GetAsLegacy();
33+
return dbDriver.Options.UseDapper ? GetAsDapper() : GetAsDriver();
3934

4035
string GetAsDapper()
4136
{
@@ -50,23 +45,7 @@ string GetAsDapper()
5045
""";
5146
}
5247

53-
string GetAsLatest()
54-
{
55-
return $$"""
56-
await using {{establishConnection}};
57-
{{connectionOpen.AppendSemicolonUnlessEmpty()}}
58-
await using {{createSqlCommand}};
59-
{{commandParameters.JoinByNewLine()}}
60-
{{initDataReader}};
61-
if ({{awaitReaderRow}})
62-
{
63-
return {{returnDataclass}};
64-
}
65-
return null;
66-
""";
67-
}
68-
69-
string GetAsLegacy()
48+
string GetAsDriver()
7049
{
7150
return $$"""
7251
using ({{establishConnection}})

examples/MySqlConnectorDapperExample/QuerySql.cs

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
// auto-generated by sqlc - do not edit
2+
// ReSharper disable UseAwaitUsing
3+
// ReSharper disable ConvertToUsingDeclaration
24
// ReSharper disable NotAccessedPositionalProperty.Global
35
// ReSharper disable UnusedAutoPropertyAccessor.Global
46
using System;
@@ -70,13 +72,17 @@ public class CreateAuthorReturnIdArgs
7072
};
7173
public async Task<long> CreateAuthorReturnId(CreateAuthorReturnIdArgs args)
7274
{
73-
await using var connection = new MySqlConnection(connectionString);
74-
connection.Open();
75-
await using var command = new MySqlCommand(CreateAuthorReturnIdSql, connection);
76-
command.Parameters.AddWithValue("@name", args.Name);
77-
command.Parameters.AddWithValue("@bio", args.Bio!);
78-
await command.ExecuteNonQueryAsync();
79-
return command.LastInsertedId;
75+
using (var connection = new MySqlConnection(connectionString))
76+
{
77+
connection.Open();
78+
using (var command = new MySqlCommand(CreateAuthorReturnIdSql, connection))
79+
{
80+
command.Parameters.AddWithValue("@name", args.Name);
81+
command.Parameters.AddWithValue("@bio", args.Bio!);
82+
await command.ExecuteNonQueryAsync();
83+
return command.LastInsertedId;
84+
}
85+
}
8086
}
8187

8288
private const string GetAuthorByIdSql = "SELECT id, name, bio, created FROM authors WHERE id = @id LIMIT 1";

examples/MySqlConnectorDapperLegacyExample/QuerySql.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
// auto-generated by sqlc - do not edit
2+
// ReSharper disable UseAwaitUsing
3+
// ReSharper disable ConvertToUsingDeclaration
24
// ReSharper disable NotAccessedPositionalProperty.Global
35
// ReSharper disable UnusedAutoPropertyAccessor.Global
46
namespace MySqlConnectorDapperLegacyExampleGen

0 commit comments

Comments
 (0)