Skip to content

Commit

Permalink
1. Refactor around DB specific methods - adding proper interfaces and…
Browse files Browse the repository at this point in the history
… adjusting downstream code (#75)

2. Change codegen test in CI method - moved the configuration matrix to a bash script, enabling local run
  • Loading branch information
SockworkOrange authored Jul 26, 2024
1 parent da72359 commit 996e5b7
Show file tree
Hide file tree
Showing 17 changed files with 263 additions and 255 deletions.
14 changes: 3 additions & 11 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -102,13 +102,9 @@ jobs:
path: dist/plugin.wasm

codegen-tests:
name: Codegen Test
name: Codegen Tests
runs-on: ubuntu-latest
needs: [build]
strategy:
matrix:
generate-csproj: [ 'true', 'false' ]
target-framework: [ 'net8.0', 'netstandard2.0', 'netstandard2.1' ]

steps:
- uses: actions/checkout@v4
Expand All @@ -129,12 +125,8 @@ jobs:
- name: Updating plugin sha
run: ./scripts/wasm/update_sha.sh ${SQLC_CI_FILE}

- name: Codegen Test
run: ./scripts/tests/run_codegen.sh ${SQLC_CI_FILE} ${{ matrix.generate-csproj }} ${{ matrix.target-framework }}

- uses: actions/setup-dotnet@v4
with:
dotnet-version: ${{ matrix.target-framework == 'net8.0' && '8.0.x' || '3.1.x' }}
- name: Codegen Tests against matrix of configurations
run: ./scripts/tests/run_codegen_matrix.sh ${SQLC_CI_FILE}

end2end-tests:
name: End-to-End Tests
Expand Down
12 changes: 5 additions & 7 deletions CodeGenerator/CodeGenerator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -233,13 +233,11 @@ private MemberDeclarationSyntax AddMethodDeclaration(Query query)

return query.Cmd switch
{
":exec" => DbDriver.ExecDeclare(query.Name, queryTextConstant, argInterface, query),
":one" => DbDriver.OneDeclare(query.Name, queryTextConstant, argInterface, returnInterface, query),
":many" => DbDriver.ManyDeclare(query.Name, queryTextConstant, argInterface, returnInterface, query),
":execlastid" => ((MySqlConnectorDriver)DbDriver)
.ExecLastIdDeclare(query.Name, queryTextConstant, argInterface, query),
":copyfrom" => ((NpgsqlDriver)DbDriver)
.CopyFromDeclare(query.Name, queryTextConstant, argInterface, query),
":exec" => DbDriver.ExecDeclare(queryTextConstant, argInterface, query),
":one" => DbDriver.OneDeclare(queryTextConstant, argInterface, returnInterface, query),
":many" => DbDriver.ManyDeclare(queryTextConstant, argInterface, returnInterface, query),
":execlastid" => ((IExecLastId)DbDriver).ExecLastIdDeclare(queryTextConstant, argInterface, query),
":copyfrom" => ((ICopyFrom)DbDriver).CopyFromDeclare(queryTextConstant, argInterface, query),
_ => throw new InvalidDataException()
};

Expand Down
8 changes: 4 additions & 4 deletions Drivers/DbDriver.cs
Original file line number Diff line number Diff line change
Expand Up @@ -59,17 +59,17 @@ public string GetColumnReader(Column column, int ordinal)

public abstract string TransformQueryText(Query query);

public abstract (string, string) EstablishConnection(bool isCopyCommand = false); // TODO fix codesmell - should act upon the query object
public abstract (string, string) EstablishConnection(Query query);

public abstract string CreateSqlCommand(string sqlTextConstant);

public abstract MemberDeclarationSyntax OneDeclare(string name, string sqlTextConstant, string argInterface,
public abstract MemberDeclarationSyntax OneDeclare(string sqlTextConstant, string argInterface,
string returnInterface, Query query);

public abstract MemberDeclarationSyntax ManyDeclare(string funcName, string sqlTextConstant, string argInterface,
public abstract MemberDeclarationSyntax ManyDeclare(string sqlTextConstant, string argInterface,
string returnInterface, Query query);

public abstract MemberDeclarationSyntax ExecDeclare(string funcName, string text, string argInterface, Query query);
public abstract MemberDeclarationSyntax ExecDeclare(string text, string argInterface, Query query);

public static bool IsCsharpPrimitive(string csharpType)
{
Expand Down
81 changes: 0 additions & 81 deletions Drivers/Generators/CopyFromDeclareGen.cs

This file was deleted.

14 changes: 6 additions & 8 deletions Drivers/Generators/ExecDeclareGen.cs
Original file line number Diff line number Diff line change
@@ -1,29 +1,27 @@
using Microsoft.CodeAnalysis.CSharp.Syntax;
using Plugin;
using System.Collections.Generic;
using static Microsoft.CodeAnalysis.CSharp.SyntaxFactory;

namespace SqlcGenCsharp.Drivers.Generators;

public class ExecDeclareGen(DbDriver dbDriver)
{
public MemberDeclarationSyntax Generate(string funcName, string queryTextConstant, string argInterface,
Query query)
public MemberDeclarationSyntax Generate(string queryTextConstant, string argInterface, Query query)
{
var parametersStr = CommonGen.GetParameterListAsString(argInterface, query.Params);
return ParseMemberDeclaration($$"""
public async Task {{funcName}}({{parametersStr}})
public async Task {{query.Name}}({{parametersStr}})
{
{{GetMethodBody(queryTextConstant, query.Params)}}
{{GetMethodBody(queryTextConstant, query)}}
}
""")!;
}

private string GetMethodBody(string queryTextConstant, IEnumerable<Parameter> parameters)
private string GetMethodBody(string queryTextConstant, Query query)
{
var (establishConnection, connectionOpen) = dbDriver.EstablishConnection();
var (establishConnection, connectionOpen) = dbDriver.EstablishConnection(query);
var createSqlCommand = dbDriver.CreateSqlCommand(queryTextConstant);
var commandParameters = CommonGen.GetCommandParameters(parameters);
var commandParameters = CommonGen.GetCommandParameters(query.Params);
var executeScalar = $"await {Variable.Command.Name()}.ExecuteScalarAsync();";

return dbDriver.DotnetFramework.LatestDotnetSupported()
Expand Down
71 changes: 0 additions & 71 deletions Drivers/Generators/ExecLastIdDeclareGen.cs

This file was deleted.

8 changes: 3 additions & 5 deletions Drivers/Generators/ManyDeclareGen.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
using Microsoft.CodeAnalysis.CSharp.Syntax;
using Plugin;
using System.Collections.Generic;
using static Microsoft.CodeAnalysis.CSharp.SyntaxFactory;


Expand All @@ -10,13 +9,12 @@ public class ManyDeclareGen(DbDriver dbDriver)
{
private CommonGen CommonGen { get; } = new(dbDriver);

public MemberDeclarationSyntax Generate(string funcName, string queryTextConstant, string argInterface,
string returnInterface, Query query)
public MemberDeclarationSyntax Generate(string queryTextConstant, string argInterface, string returnInterface, Query query)
{
var parametersStr = CommonGen.GetParameterListAsString(argInterface, query.Params);
var returnType = $"Task<List<{returnInterface}>>";
return ParseMemberDeclaration($$"""
public async {{returnType}} {{funcName}}({{parametersStr}})
public async {{returnType}} {{query.Name}}({{parametersStr}})
{
{{GetMethodBody(queryTextConstant, returnInterface, query)}}
}
Expand All @@ -25,7 +23,7 @@ public MemberDeclarationSyntax Generate(string funcName, string queryTextConstan

private string GetMethodBody(string queryTextConstant, string returnInterface, Query query)
{
var (establishConnection, connectionOpen) = dbDriver.EstablishConnection();
var (establishConnection, connectionOpen) = dbDriver.EstablishConnection(query);
var createSqlCommand = dbDriver.CreateSqlCommand(queryTextConstant);
var commandParameters = CommonGen.GetCommandParameters(query.Params);
var initDataReader = CommonGen.InitDataReader();
Expand Down
16 changes: 7 additions & 9 deletions Drivers/Generators/OneDeclareGen.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
using Microsoft.CodeAnalysis.CSharp.Syntax;
using Plugin;
using System.Collections.Generic;
using static Microsoft.CodeAnalysis.CSharp.SyntaxFactory;


Expand All @@ -10,28 +9,27 @@ public class OneDeclareGen(DbDriver dbDriver)
{
private CommonGen CommonGen { get; } = new(dbDriver);

public MemberDeclarationSyntax Generate(string funcName, string queryTextConstant, string argInterface,
public MemberDeclarationSyntax Generate(string queryTextConstant, string argInterface,
string returnInterface, Query query)
{
var returnType = $"Task<{dbDriver.AddNullableSuffix(returnInterface, false)}>";
var parametersStr = CommonGen.GetParameterListAsString(argInterface, query.Params);
return ParseMemberDeclaration($$"""
public async {{returnType}} {{funcName}}({{parametersStr}})
public async {{returnType}} {{query.Name}}({{parametersStr}})
{
{{GetMethodBody(queryTextConstant, returnInterface, query.Columns, query.Params)}}
{{GetMethodBody(queryTextConstant, returnInterface, query)}}
}
""")!;
}

private string GetMethodBody(string queryTextConstant, string returnInterface,
IEnumerable<Column> columns, IEnumerable<Parameter> parameters)
private string GetMethodBody(string queryTextConstant, string returnInterface, Query query)
{
var (establishConnection, connectionOpen) = dbDriver.EstablishConnection();
var (establishConnection, connectionOpen) = dbDriver.EstablishConnection(query);
var createSqlCommand = dbDriver.CreateSqlCommand(queryTextConstant);
var commandParameters = CommonGen.GetCommandParameters(parameters);
var commandParameters = CommonGen.GetCommandParameters(query.Params);
var initDataReader = CommonGen.InitDataReader();
var awaitReaderRow = CommonGen.AwaitReaderRow();
var returnDataclass = CommonGen.InstantiateDataclass(columns, returnInterface);
var returnDataclass = CommonGen.InstantiateDataclass(query.Columns, returnInterface);

return dbDriver.DotnetFramework.LatestDotnetSupported()
? GetWithUsingAsStatement()
Expand Down
9 changes: 9 additions & 0 deletions Drivers/ICopyFrom.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
using Microsoft.CodeAnalysis.CSharp.Syntax;
using Plugin;

namespace SqlcGenCsharp.Drivers;

public interface ICopyFrom
{
MemberDeclarationSyntax CopyFromDeclare(string queryTextConstant, string argInterface, Query query);
}
9 changes: 9 additions & 0 deletions Drivers/IExecLastId.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
using Microsoft.CodeAnalysis.CSharp.Syntax;
using Plugin;

namespace SqlcGenCsharp.Drivers;

public interface IExecLastId
{
MemberDeclarationSyntax ExecLastIdDeclare(string queryTextConstant, string argInterface, Query query);
}
Loading

0 comments on commit 996e5b7

Please sign in to comment.