Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion CodeGenerator/CodeGenerator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,9 @@ public class CodeGenerator
private static readonly string[] ResharperDisables =
[
"UnusedAutoPropertyAccessor.Global",
"NotAccessedPositionalProperty.Global"
"NotAccessedPositionalProperty.Global",
"ConvertToUsingDeclaration",
"UseAwaitUsing"
];

private string? _namespaceName;
Expand Down
43 changes: 11 additions & 32 deletions Drivers/Generators/CopyFromDeclareGen.cs
Original file line number Diff line number Diff line change
Expand Up @@ -24,40 +24,19 @@ private string GetMethodBody(string queryTextConstant, Query query)
var (establishConnection, connectionOpen) = dbDriver.EstablishConnection(query);
var beginBinaryImport = $"{Variable.Connection.AsVarName()}.BeginBinaryImportAsync({queryTextConstant}";
var addRowsToCopyCommand = AddRowsToCopyCommand(query);

if (dbDriver.Options.DotnetFramework.LatestDotnetSupported())
return GetAsLatest();
return GetAsLegacy();

string GetAsLatest()
{
return $"""
await using {establishConnection};
{connectionOpen.AppendSemicolonUnlessEmpty()}
await {Variable.Connection.AsVarName()}.OpenAsync();
await using var {Variable.Writer.AsVarName()} = await {beginBinaryImport});
{addRowsToCopyCommand}
await {Variable.Writer.AsVarName()}.CompleteAsync();
await {Variable.Connection.AsVarName()}.CloseAsync();
""";
}

string GetAsLegacy()
{
return $$"""
using ({{establishConnection}})
return $$"""
using ({{establishConnection}})
{
{{connectionOpen.AppendSemicolonUnlessEmpty()}}
await {{Variable.Connection.AsVarName()}}.OpenAsync();
using (var {{Variable.Writer.AsVarName()}} = await {{beginBinaryImport}}))
{
{{connectionOpen.AppendSemicolonUnlessEmpty()}}
await {{Variable.Connection.AsVarName()}}.OpenAsync();
using (var {{Variable.Writer.AsVarName()}} = await {{beginBinaryImport}}))
{
{{addRowsToCopyCommand}}
await {{Variable.Writer.AsVarName()}}.CompleteAsync();
}
await {{Variable.Connection.AsVarName()}}.CloseAsync();
{{addRowsToCopyCommand}}
await {{Variable.Writer.AsVarName()}}.CompleteAsync();
}
""";
}
await {{Variable.Connection.AsVarName()}}.CloseAsync();
}
""";
}

private string AddRowsToCopyCommand(Query query)
Expand Down
20 changes: 2 additions & 18 deletions Drivers/Generators/ExecDeclareGen.cs
Original file line number Diff line number Diff line change
Expand Up @@ -26,12 +26,7 @@ private string GetMethodBody(string queryTextConstant, Query query)
var createSqlCommand = dbDriver.CreateSqlCommand(queryTextConstant);
var commandParameters = CommonGen.GetCommandParameters(query.Params);
var executeScalar = $"await {Variable.Command.AsVarName()}.ExecuteScalarAsync();";

if (dbDriver.Options.UseDapper)
return GetAsDapper();
if (dbDriver.Options.DotnetFramework.LatestDotnetSupported())
return GetAsLatest();
return GetAsLegacy();
return dbDriver.Options.UseDapper ? GetAsDapper() : GetAsDriver();

string GetAsDapper()
{
Expand All @@ -44,18 +39,7 @@ string GetAsDapper()
""";
}

string GetAsLatest()
{
return $$"""
await using {{establishConnection}};
{{connectionOpen.AppendSemicolonUnlessEmpty()}}
await using {{createSqlCommand}};
{{commandParameters.JoinByNewLine()}}
{{executeScalar}}
""";
}

string GetAsLegacy()
string GetAsDriver()
{
return $$"""
using ({{establishConnection}})
Expand Down
37 changes: 9 additions & 28 deletions Drivers/Generators/ExecLastIdDeclareGen.cs
Original file line number Diff line number Diff line change
Expand Up @@ -31,35 +31,16 @@ private string GetMethodBody(string queryTextConstant, Query query)
var createSqlCommand = dbDriver.CreateSqlCommand(queryTextConstant);
var commandParameters = CommonGen.GetCommandParameters(query.Params).JoinByNewLine();
var returnLastId = ((IExecLastId)dbDriver).GetLastIdStatement().JoinByNewLine();

if (dbDriver.Options.DotnetFramework.LatestDotnetSupported())
return GetAsLatest();
return GetAsLegacy();

string GetAsLatest()
{
return $"""
await using {establishConnection};
{connectionOpen}
await using {createSqlCommand};
{commandParameters}
{returnLastId}
""";
}

string GetAsLegacy()
{
return $$"""
using ({{establishConnection}})
return $$"""
using ({{establishConnection}})
{
{{connectionOpen}}
using ({{createSqlCommand}})
{
{{connectionOpen}}
using ({{createSqlCommand}})
{
{{commandParameters}}
{{returnLastId}}
}
{{commandParameters}}
{{returnLastId}}
}
""";
}
}
""";
}
}
20 changes: 2 additions & 18 deletions Drivers/Generators/ExecRowsDeclareGen.cs
Original file line number Diff line number Diff line change
Expand Up @@ -28,12 +28,7 @@ private string GetMethodBody(string queryTextConstant, Query query)
var createSqlCommand = dbDriver.CreateSqlCommand(queryTextConstant);
var commandParameters = CommonGen.GetCommandParameters(query.Params);
var executeScalarAndReturnCreated = ExecuteScalarAndReturnCreated();

if (dbDriver.Options.UseDapper)
return GetAsDapper();
if (dbDriver.Options.DotnetFramework.LatestDotnetSupported())
return GetAsLatest();
return GetAsLegacy();
return dbDriver.Options.UseDapper ? GetAsDapper() : GetAsDriver();

string GetAsDapper()
{
Expand All @@ -46,18 +41,7 @@ string GetAsDapper()
""";
}

string GetAsLatest()
{
return $"""
await using {establishConnection};
{connectionOpen.AppendSemicolonUnlessEmpty()}
await using {createSqlCommand};
{commandParameters.JoinByNewLine()}
{executeScalarAndReturnCreated.JoinByNewLine()}
""";
}

string GetAsLegacy()
string GetAsDriver()
{
return $$"""
using ({{establishConnection}})
Expand Down
23 changes: 2 additions & 21 deletions Drivers/Generators/ManyDeclareGen.cs
Original file line number Diff line number Diff line change
Expand Up @@ -36,12 +36,7 @@ private string GetMethodBody(string queryTextConstant, string returnInterface, Q
{{Variable.Result.AsVarName()}}.Add({{dataclassInit}});
}
""";

if (dbDriver.Options.UseDapper)
return GetAsDapper();
if (dbDriver.Options.DotnetFramework.LatestDotnetSupported())
return GetAsLatest();
return GetAsLegacy();
return dbDriver.Options.UseDapper ? GetAsDapper() : GetAsDriver();

string GetAsDapper()
{
Expand All @@ -56,21 +51,7 @@ string GetAsDapper()
""";
}

string GetAsLatest()
{
return $$"""
await using {{establishConnection}};
{{connectionOpen.AppendSemicolonUnlessEmpty()}}
await using {{createSqlCommand}};
{{commandParameters.JoinByNewLine()}}
{{initDataReader}};
var {{Variable.Result.AsVarName()}} = new List<{{returnInterface}}>();
{{readWhileExists}}
return {{Variable.Result.AsVarName()}};
""";
}

string GetAsLegacy()
string GetAsDriver()
{
return $$"""
using ({{establishConnection}})
Expand Down
25 changes: 2 additions & 23 deletions Drivers/Generators/OneDeclareGen.cs
Original file line number Diff line number Diff line change
Expand Up @@ -30,12 +30,7 @@ private string GetMethodBody(string queryTextConstant, string returnInterface, Q
var initDataReader = CommonGen.InitDataReader();
var awaitReaderRow = CommonGen.AwaitReaderRow();
var returnDataclass = CommonGen.InstantiateDataclass(query.Columns, returnInterface);

if (dbDriver.Options.UseDapper)
return GetAsDapper();
if (dbDriver.Options.DotnetFramework.LatestDotnetSupported())
return GetAsLatest();
return GetAsLegacy();
return dbDriver.Options.UseDapper ? GetAsDapper() : GetAsDriver();

string GetAsDapper()
{
Expand All @@ -50,23 +45,7 @@ string GetAsDapper()
""";
}

string GetAsLatest()
{
return $$"""
await using {{establishConnection}};
{{connectionOpen.AppendSemicolonUnlessEmpty()}}
await using {{createSqlCommand}};
{{commandParameters.JoinByNewLine()}}
{{initDataReader}};
if ({{awaitReaderRow}})
{
return {{returnDataclass}};
}
return null;
""";
}

string GetAsLegacy()
string GetAsDriver()
{
return $$"""
using ({{establishConnection}})
Expand Down
20 changes: 13 additions & 7 deletions examples/MySqlConnectorDapperExample/QuerySql.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
// auto-generated by sqlc - do not edit
// ReSharper disable UseAwaitUsing
// ReSharper disable ConvertToUsingDeclaration
// ReSharper disable NotAccessedPositionalProperty.Global
// ReSharper disable UnusedAutoPropertyAccessor.Global
using System;
Expand All @@ -14,7 +16,7 @@
public class GetAuthorRow
{
public long Id { get; set; }
public string Name { get; set; }

Check warning on line 19 in examples/MySqlConnectorDapperExample/QuerySql.cs

View workflow job for this annotation

GitHub Actions / End-to-End Tests

Non-nullable property 'Name' must contain a non-null value when exiting constructor. Consider adding the 'required' modifier or declaring the property as nullable.
public string? Bio { get; set; }
public DateTime Created { get; set; }
};
Expand Down Expand Up @@ -70,13 +72,17 @@
};
public async Task<long> CreateAuthorReturnId(CreateAuthorReturnIdArgs args)
{
await using var connection = new MySqlConnection(connectionString);
connection.Open();
await using var command = new MySqlCommand(CreateAuthorReturnIdSql, connection);
command.Parameters.AddWithValue("@name", args.Name);
command.Parameters.AddWithValue("@bio", args.Bio!);
await command.ExecuteNonQueryAsync();
return command.LastInsertedId;
using (var connection = new MySqlConnection(connectionString))
{
connection.Open();
using (var command = new MySqlCommand(CreateAuthorReturnIdSql, connection))
{
command.Parameters.AddWithValue("@name", args.Name);
command.Parameters.AddWithValue("@bio", args.Bio!);
await command.ExecuteNonQueryAsync();
return command.LastInsertedId;
}
}
}

private const string GetAuthorByIdSql = "SELECT id, name, bio, created FROM authors WHERE id = @id LIMIT 1";
Expand Down
2 changes: 2 additions & 0 deletions examples/MySqlConnectorDapperLegacyExample/QuerySql.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
// auto-generated by sqlc - do not edit
// ReSharper disable UseAwaitUsing
// ReSharper disable ConvertToUsingDeclaration
// ReSharper disable NotAccessedPositionalProperty.Global
// ReSharper disable UnusedAutoPropertyAccessor.Global
namespace MySqlConnectorDapperLegacyExampleGen
Expand Down
Loading
Loading