From fa6829c8363d129f5ac8bca7337e7e2a1b292255 Mon Sep 17 00:00:00 2001 From: fdonnetTaff Date: Thu, 1 Dec 2022 13:42:35 +0100 Subject: [PATCH 01/48] DbContextBase testing --- .../Dapper-Layers-Generator.Test.csproj | 4 + .../GeneratorContextForBase_Tests.cs | 19 ++ ...ontextForBase_ResultOtherDbContextName.txt | 168 ++++++++++++++++++ ...atorContextForBase_ResultSelectedTable.txt | 147 +++++++++++++++ 4 files changed, 338 insertions(+) create mode 100644 test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorContextForBase_ResultOtherDbContextName.txt create mode 100644 test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorContextForBase_ResultSelectedTable.txt diff --git a/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj b/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj index 08e6f39..d2ff755 100644 --- a/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj +++ b/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj @@ -12,6 +12,8 @@ + + @@ -38,6 +40,8 @@ Always + + diff --git a/test/Dapper-Layers-Generator.Test/Generators/GeneratorContextForBase_Tests.cs b/test/Dapper-Layers-Generator.Test/Generators/GeneratorContextForBase_Tests.cs index 72ea8ad..83fba9d 100644 --- a/test/Dapper-Layers-Generator.Test/Generators/GeneratorContextForBase_Tests.cs +++ b/test/Dapper-Layers-Generator.Test/Generators/GeneratorContextForBase_Tests.cs @@ -41,5 +41,24 @@ public void GenerateStandard_Test() Assert.Equal(expected, result); } + [Fact()] + public void GenerateChangeDbContextName_Test() + { + //Arrange + var transformString = new StringTransformationService(_settings); + var generator = new GeneratorContextForBase(_settings, _mockDbDefinitions.Object, transformString); + _settings.DbContextClassName = "TestOtherDBContext"; + + var expected = ResourceTool.Read("Dapper_Layers_Generator.Test/Results/Generators/GeneratorContextForBase_ResultOtherDbContextName.txt"); + + //Act + var result = generator.Generate(); + + //Assert + Assert.Equal(expected, result); + } + + + } } \ No newline at end of file diff --git a/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorContextForBase_ResultOtherDbContextName.txt b/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorContextForBase_ResultOtherDbContextName.txt new file mode 100644 index 0000000..9d961df --- /dev/null +++ b/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorContextForBase_ResultOtherDbContextName.txt @@ -0,0 +1,168 @@ +using System.Data; +using Microsoft.Extensions.Configuration; +using DapperTest.Repo; + +// ================================================================= +// DBContext implements all repo management + a small context factory +// this file contains interfaces declaration and abstract +// base classes for factory and DB context +// Author: Dapper Generator +// Context name: TestOtherDBContext +// Generated: 2022-12-01 12:46:29 UTC +// WARNING: Never change this file manually (re-generate it) +// ================================================================= + +namespace DapperTest.DbContext +{ + public interface ITestOtherDBContext : IDisposable + { + IDbConnection Connection { get; } + IDbTransaction? Transaction { get; } + + Task OpenTransactionAsync(IsolationLevel? level = null); + void CommitTransaction(bool disposeTrans = true); + void RollbackTransaction(bool disposeTrans = true); + + IStateRepo StateRepo { get; } + IClientRepo ClientRepo { get; } + IRefreshTokenRepo RefreshTokenRepo { get; } + IHistorystateRepo HistorystateRepo { get; } + IRepairerRepo RepairerRepo { get; } + IUserRepo UserRepo { get; } + IDamageRepo DamageRepo { get; } + IDamageFailureRepo DamageFailureRepo { get; } + IFailureRepo FailureRepo { get; } + } + + /// + ///Interface for TestOtherDBContextFactory + /// + public interface ITestOtherDBContextFactory + { + ITestOtherDBContext Create(); + } + + /// + /// Used when the DBcontext itself is not suffisent to manage its lifecycle + /// Very simple implementation + /// + public abstract class TestOtherDBContextFactoryBase : ITestOtherDBContextFactory + { + protected readonly IConfiguration _config; + + public TestOtherDBContextFactoryBase(IConfiguration config) + { + _config = config; + } + + public abstract ITestOtherDBContext Create(); + } + + /// + /// Abstract DBContext base + /// + public abstract class TestOtherDBContextBase : ITestOtherDBContext + { + protected readonly IConfiguration _config; + public abstract IDbConnection Connection {get;init;} + + protected IDbTransaction? _trans = null; + public IDbTransaction? Transaction { + get => _trans; + } + + private bool _disposed = false; + + protected IStateRepo? _stateRepo; + public abstract IStateRepo StateRepo { get; } + protected IClientRepo? _clientRepo; + public abstract IClientRepo ClientRepo { get; } + protected IRefreshTokenRepo? _refreshTokenRepo; + public abstract IRefreshTokenRepo RefreshTokenRepo { get; } + protected IHistorystateRepo? _historystateRepo; + public abstract IHistorystateRepo HistorystateRepo { get; } + protected IRepairerRepo? _repairerRepo; + public abstract IRepairerRepo RepairerRepo { get; } + protected IUserRepo? _userRepo; + public abstract IUserRepo UserRepo { get; } + protected IDamageRepo? _damageRepo; + public abstract IDamageRepo DamageRepo { get; } + protected IDamageFailureRepo? _damageFailureRepo; + public abstract IDamageFailureRepo DamageFailureRepo { get; } + protected IFailureRepo? _failureRepo; + public abstract IFailureRepo FailureRepo { get; } + + /// + /// Main constructor, inject standard config + /// + public TestOtherDBContextBase(IConfiguration config) + { + _config = config; + } + + /// + /// Open a transaction with a specified isolation level + /// + public abstract Task OpenTransactionAsync(IsolationLevel? level); + + /// + /// Commit the current transaction, and optionally dispose all resources related to the transaction. + /// + public void CommitTransaction(bool disposeTrans = true) + { + if (_trans == null) + throw new NullReferenceException("DB Transaction is not present."); + + _trans.Commit(); + + if (disposeTrans) + { + _trans.Dispose(); + _trans = null; + } + } + + /// + /// Rollback the transaction and all the operations linked to it, and optionally dispose all resources related to the transaction. + /// + public void RollbackTransaction(bool disposeTrans = true) + { + if (_trans == null) + throw new NullReferenceException("DB Transaction is not present."); + + _trans.Rollback(); + + if (disposeTrans) + { + _trans.Dispose(); + _trans = null; + } + } + + /// + /// Will be call at the end of the service (ex : transient service in api net core) + /// + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + /// + /// Better way to dispose if someone needs to inherit the DB context and have to dispose unmanaged ressources + /// + private void Dispose(bool disposing) + { + if(! _disposed) + { + if(disposing) + { + _trans?.Dispose(); + Connection.Close(); + Connection.Dispose(); + } + } + _disposed = true; + } + } +} \ No newline at end of file diff --git a/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorContextForBase_ResultSelectedTable.txt b/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorContextForBase_ResultSelectedTable.txt new file mode 100644 index 0000000..90e5152 --- /dev/null +++ b/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorContextForBase_ResultSelectedTable.txt @@ -0,0 +1,147 @@ +using System.Data; +using Microsoft.Extensions.Configuration; +using DapperTest.Repo; + +// ================================================================= +// DBContext implements all repo management + a small context factory +// this file contains interfaces declaration and abstract +// base classes for factory and DB context +// Author: Dapper Generator +// Context name: DbContext +// Generated: 2022-12-01 12:46:29 UTC +// WARNING: Never change this file manually (re-generate it) +// ================================================================= + +namespace DapperTest.DbContext +{ + public interface IDbContext : IDisposable + { + IDbConnection Connection { get; } + IDbTransaction? Transaction { get; } + + Task OpenTransactionAsync(IsolationLevel? level = null); + void CommitTransaction(bool disposeTrans = true); + void RollbackTransaction(bool disposeTrans = true); + + IClientRepo ClientRepo { get; } + IFailureRepo FailureRepo { get; } + } + + /// + ///Interface for DbContextFactory + /// + public interface IDbContextFactory + { + IDbContext Create(); + } + + /// + /// Used when the DBcontext itself is not suffisent to manage its lifecycle + /// Very simple implementation + /// + public abstract class DbContextFactoryBase : IDbContextFactory + { + protected readonly IConfiguration _config; + + public DbContextFactoryBase(IConfiguration config) + { + _config = config; + } + + public abstract IDbContext Create(); + } + + /// + /// Abstract DBContext base + /// + public abstract class DbContextBase : IDbContext + { + protected readonly IConfiguration _config; + public abstract IDbConnection Connection {get;init;} + + protected IDbTransaction? _trans = null; + public IDbTransaction? Transaction { + get => _trans; + } + + private bool _disposed = false; + + protected IClientRepo? _clientRepo; + public abstract IClientRepo ClientRepo { get; } + protected IFailureRepo? _failureRepo; + public abstract IFailureRepo FailureRepo { get; } + + /// + /// Main constructor, inject standard config + /// + public DbContextBase(IConfiguration config) + { + _config = config; + } + + /// + /// Open a transaction with a specified isolation level + /// + public abstract Task OpenTransactionAsync(IsolationLevel? level); + + /// + /// Commit the current transaction, and optionally dispose all resources related to the transaction. + /// + public void CommitTransaction(bool disposeTrans = true) + { + if (_trans == null) + throw new NullReferenceException("DB Transaction is not present."); + + _trans.Commit(); + + if (disposeTrans) + { + _trans.Dispose(); + _trans = null; + } + } + + /// + /// Rollback the transaction and all the operations linked to it, and optionally dispose all resources related to the transaction. + /// + public void RollbackTransaction(bool disposeTrans = true) + { + if (_trans == null) + throw new NullReferenceException("DB Transaction is not present."); + + _trans.Rollback(); + + if (disposeTrans) + { + _trans.Dispose(); + _trans = null; + } + } + + /// + /// Will be call at the end of the service (ex : transient service in api net core) + /// + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + /// + /// Better way to dispose if someone needs to inherit the DB context and have to dispose unmanaged ressources + /// + private void Dispose(bool disposing) + { + if(! _disposed) + { + if(disposing) + { + _trans?.Dispose(); + Connection.Close(); + Connection.Dispose(); + } + } + _disposed = true; + } + } +} \ No newline at end of file From 2db98f0091f16560b91372515ad9d7dbc19992cd Mon Sep 17 00:00:00 2001 From: fdonnetTaff Date: Thu, 1 Dec 2022 14:35:42 +0100 Subject: [PATCH 02/48] Generator context for specific provider (C# 11 string litteral) --- .../Generators/GeneratorContextForProvider.cs | 210 +++++++++--------- 1 file changed, 105 insertions(+), 105 deletions(-) diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorContextForProvider.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorContextForProvider.cs index 27b1420..a76f3df 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorContextForProvider.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorContextForProvider.cs @@ -4,7 +4,7 @@ namespace Dapper_Layers_Generator.Core.Generators { - public abstract class GeneratorContextForProvider : GeneratorContextTemplate + public abstract class GeneratorContextForProvider : GeneratorContextTemplate { protected abstract string UsingDbProviderSpecific { get; init; } protected abstract string DbProviderString { get; init; } @@ -23,45 +23,108 @@ public GeneratorContextForProvider(SettingsGlobal settingsGlobal public override string Generate() { - var builder = new StringBuilder(); - //Header - builder.Append(WriteContextHeaderComment()); - - //Db context class - builder.Append(WriteFullClassContent()); + return + $""" + {WriteUsingStatements()} + {WriteContextHeaderComment()} + {WriteFullClassContent()} + """; + } - return builder.ToString(); + protected override string WriteUsingStatements() + { + return + $""" + using {_settings.TargetNamespaceForRepo}; + using System.Data; + {UsingDbProviderSpecific} + using Dapper; + using Microsoft.Extensions.Configuration; + + """; } protected override string WriteContextHeaderComment() { - return $@"{@WriteUsingStatements()} -// ================================================================= -// DBContext implements all repo management + a small context factory -// Inherits from DbContext base abstract class -// Specific for DB provider {DbProviderString} -// Author: {_settings.AuthorName} -// Context name: {_settings.DbContextClassName} -// Generated: {DateTime.Now} -// WARNING: Never change this file manually (re-generate it) -// ================================================================= - -namespace {_settings.TargetNamespaceForDbContext} -{{"; - + return + $$""" + // ================================================================= + // DBContext implements all repo management + a small context factory + // Inherits from DbContext base abstract class + // Specific for DB provider {{DbProviderString}} + // Author: {{_settings.AuthorName}} + // Context name: {{_settings.DbContextClassName}} + // Generated: {{_settings.GenerationTimestamp}} + // WARNING: Never change this file manually (re-generate it) + // ================================================================= + + namespace {{_settings.TargetNamespaceForDbContext}} + { + """; } - protected override string WriteUsingStatements() + protected override string WriteFullClassContent() { - string output = $@"using {_settings.TargetNamespaceForRepo}; -using System.Data; -{UsingDbProviderSpecific} -using Dapper; -using Microsoft.Extensions.Configuration; - -"; - - return output; + return + $$""" + {{tab}}/// + {{tab}}/// Used when the DBcontext itself is not suffisent to manage its lifecycle + {{tab}}/// Factory specific for the dbprovider {{DbProviderString}} + {{tab}}/// Inherits from factory base + {{tab}}/// + {{tab}}public class {{_settings.DbContextClassName}}{{DbProviderString}}Factory : {{_settings.DbContextClassName}}FactoryBase, {{("I" + _settings.DbContextClassName)}}Factory + {{tab}}{ + {{tab}}{{tab}}public {{_settings.DbContextClassName}}{{DbProviderString}}Factory(IConfiguration config) : base (config) + {{tab}}{{tab}}{ + {{tab}}{{tab}}} + {{tab}}{{tab}} + {{tab}}{{tab}}public override I{{_settings.DbContextClassName}} Create() + {{tab}}{{tab}}{ + {{tab}}{{tab}}{{tab}}return new {{_settings.DbContextClassName}}{{DbProviderString}}(_config); + {{tab}}{{tab}}} + {{tab}}} + + {{tab}}/// + {{tab}}/// Used when the DBcontext + {{tab}}/// Specific for the dbprovider {{DbProviderString}} + {{tab}}/// Inherits from {{_settings.DbContextClassName}}Base + {{tab}}/// + {{tab}}public class {{_settings.DbContextClassName}}{{DbProviderString}} : {{_settings.DbContextClassName}}Base, {{("I" + _settings.DbContextClassName)}} + {{tab}}{ + {{tab}}{{tab}}public override IDbConnection Connection {get;init;} + {{tab}}{{tab}} + {{@WriteClassRepoMembers()}} + + {{tab}}{{tab}}/// + {{tab}}{{tab}}/// Main constructor, inject standard config : Default connection string + {{tab}}{{tab}}/// + {{tab}}{{tab}}public {{_settings.DbContextClassName}}{{DbProviderString}}(IConfiguration config) : base (config) + {{tab}}{{tab}}{ + {{tab}}{{tab}}{{tab}}{{DapperDefaultMapStrat}} + {{tab}}{{tab}}{{tab}}{{DapperCommandTimeOut}} + {{tab}}{{tab}}{{tab}}{{ConnectionStringInject}} + {{tab}}{{tab}}} + + {{tab}}{{tab}}/// + {{tab}}{{tab}}/// Open a transaction with a specified isolation level + {{tab}}{{tab}}/// + {{tab}}{{tab}}public override async Task OpenTransactionAsync(IsolationLevel? level = null) + {{tab}}{{tab}}{ + {{tab}}{{tab}}{{tab}}if(_trans != null) + {{tab}}{{tab}}{{tab}}{{tab}}throw new Exception("A transaction is already open, you need to use a new {{_settings.DbContextClassName}} for parallel job."); + {{tab}}{{tab}}{{tab}} + {{tab}}{{tab}}{{tab}}if (Connection.State == ConnectionState.Closed) + {{tab}}{{tab}}{{tab}}{ + {{tab}}{{tab}}{{tab}}{{tab}}await (({{ConnectionClassName}})Connection).OpenAsync(); + {{tab}}{{tab}}{{tab}}} + {{tab}}{{tab}}{{tab}} + {{tab}}{{tab}}{{tab}}_trans = level == null ? Connection.BeginTransaction() : Connection.BeginTransaction((IsolationLevel)level); + {{tab}}{{tab}}{{tab}} + {{tab}}{{tab}}{{tab}}return _trans; + {{tab}}{{tab}}} + {{tab}}} + } + """; } protected override string WriteClassRepoMembers() { @@ -74,82 +137,19 @@ protected override string WriteClassRepoMembers() var repoClassName = tableName + "Repo"; var repoProtectedFieldName = $"_{_stringTransform.FirstCharToLower(repoClassName)}"; - return $@"{tab}{tab}public override {interfaceName} {repoClassName} -{tab}{tab}{{ -{tab}{tab}{tab}get {{ -{tab}{tab}{tab}{tab}{repoProtectedFieldName} ??= new {repoClassName}{DbProviderString}(this); -{tab}{tab}{tab}{tab}return {repoProtectedFieldName}; -{tab}{tab}{tab}}} -{tab}{tab}}} -"; + return + $$""" + {{tab}}{{tab}}public override {{interfaceName}} {{repoClassName}} + {{tab}}{{tab}}{ + {{tab}}{{tab}}{{tab}}get { + {{tab}}{{tab}}{{tab}}{{tab}}{{repoProtectedFieldName}} ??= new {{repoClassName}}{{DbProviderString}}(this); + {{tab}}{{tab}}{{tab}}{{tab}}return {{repoProtectedFieldName}}; + {{tab}}{{tab}}{{tab}}} + {{tab}}{{tab}}} + """; })); return membersDeclaration; } - - protected override string WriteFullClassContent() - { - return $@" - -{tab}/// -{tab}/// Used when the DBcontext itself is not suffisent to manage its lifecycle -{tab}/// Factory specific for the dbprovider {DbProviderString} -{tab}/// Inherits from factory base -{tab}/// -{tab}public class {_settings.DbContextClassName}{DbProviderString}Factory : {_settings.DbContextClassName}FactoryBase, {("I" + _settings.DbContextClassName)}Factory -{tab}{{ -{tab}{tab}public {_settings.DbContextClassName}{DbProviderString}Factory(IConfiguration config) : base (config) -{tab}{tab}{{ -{tab}{tab}}} -{tab}{tab} -{tab}{tab}public override I{_settings.DbContextClassName} Create() -{tab}{tab}{{ -{tab}{tab}{tab}return new {_settings.DbContextClassName}{DbProviderString}(_config); -{tab}{tab}}} -{tab}}} -{tab} -{tab}/// -{tab}/// Used when the DBcontext -{tab}/// Specific for the dbprovider {DbProviderString} -{tab}/// Inherits from {_settings.DbContextClassName}Base -{tab}/// -{tab}public class {_settings.DbContextClassName}{DbProviderString} : {_settings.DbContextClassName}Base, {("I" + _settings.DbContextClassName)} -{tab}{{ -{tab}{tab}public override IDbConnection Connection {{get;init;}} -{tab}{tab} -{@WriteClassRepoMembers()} -{tab}{tab}/// -{tab}{tab}/// Main constructor, inject standard config : Default connection string -{tab}{tab}/// -{tab}{tab}public {_settings.DbContextClassName}{DbProviderString}(IConfiguration config) : base (config) -{tab}{tab}{{ -{tab}{tab}{tab}{DapperDefaultMapStrat} -{tab}{tab}{tab}{DapperCommandTimeOut} -{tab}{tab}{tab}{ConnectionStringInject} -{tab}{tab}}} -{tab}{tab} -{tab}{tab}/// -{tab}{tab}/// Open a transaction with a specified isolation level -{tab}{tab}/// -{tab}{tab}public override async Task OpenTransactionAsync(IsolationLevel? level = null) -{tab}{tab}{{ -{tab}{tab}{tab}if(_trans != null) -{tab}{tab}{tab}{tab}throw new Exception(""A transaction is already open, you need to use a new {_settings.DbContextClassName} for parallel job.""); -{tab}{tab}{tab} -{tab}{tab}{tab}if (Connection.State == ConnectionState.Closed) -{tab}{tab}{tab}{{ -{tab}{tab}{tab}{tab}await (({ConnectionClassName})Connection).OpenAsync(); -{tab}{tab}{tab}}} -{tab}{tab}{tab} -{tab}{tab}{tab}_trans = level == null ? Connection.BeginTransaction() : Connection.BeginTransaction((IsolationLevel)level); -{tab}{tab}{tab} -{tab}{tab}{tab}return _trans; -{tab}{tab}}} -{tab}}} -}} -"; - - - } } } From 13dad536d665e4e4f80600c908d06e672c4dc580 Mon Sep 17 00:00:00 2001 From: fdonnetTaff Date: Thu, 1 Dec 2022 14:54:41 +0100 Subject: [PATCH 03/48] GeneratorContextForMySql test --- .../Generators/GeneratorContextForProvider.cs | 2 +- .../Dapper-Layers-Generator.Test.csproj | 6 +- .../Generators/GeneratorBaseTest.cs | 34 +++++ .../GeneratorContextForBase_Tests.cs | 17 +-- .../MySql/MySqlGeneratorContext_Tests.cs | 40 +++++ .../MySqlGeneratorContext_ResultStandard.txt | 137 ++++++++++++++++++ 6 files changed, 217 insertions(+), 19 deletions(-) create mode 100644 test/Dapper-Layers-Generator.Test/Generators/GeneratorBaseTest.cs create mode 100644 test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorContext_Tests.cs create mode 100644 test/Dapper-Layers-Generator.Test/Results/Generators/MySql/MySqlGeneratorContext_ResultStandard.txt diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorContextForProvider.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorContextForProvider.cs index a76f3df..3fa102b 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorContextForProvider.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorContextForProvider.cs @@ -54,7 +54,7 @@ protected override string WriteContextHeaderComment() // Specific for DB provider {{DbProviderString}} // Author: {{_settings.AuthorName}} // Context name: {{_settings.DbContextClassName}} - // Generated: {{_settings.GenerationTimestamp}} + // Generated: {{_settings.GenerationTimestamp.ToString("yyyy-MM-dd HH:mm:ss")}} UTC // WARNING: Never change this file manually (re-generate it) // ================================================================= diff --git a/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj b/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj index d2ff755..0b9bccf 100644 --- a/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj +++ b/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj @@ -15,6 +15,7 @@ + @@ -43,10 +44,7 @@ - - - - + diff --git a/test/Dapper-Layers-Generator.Test/Generators/GeneratorBaseTest.cs b/test/Dapper-Layers-Generator.Test/Generators/GeneratorBaseTest.cs new file mode 100644 index 0000000..2e029b5 --- /dev/null +++ b/test/Dapper-Layers-Generator.Test/Generators/GeneratorBaseTest.cs @@ -0,0 +1,34 @@ +using Dapper_Layers_Generator.Core.Settings; +using Dapper_Layers_Generator.Core; +using Moq; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Dapper_Layers_Generator.Test.Config; +using System.Text.Json; +using Dapper_Layers_Generator.Data.POCO; + +namespace Dapper_Layers_Generator.Test.Generators +{ + public class GeneratorBaseTest + { + protected Mock _mockDbDefinitions; + protected SettingsGlobal _settings; + + public GeneratorBaseTest() + { + //Fake DB + var jsonDB = ResourceTool.Read("Dapper_Layers_Generator.Test/Data/schema.json"); + var schemas = JsonSerializer.Deserialize>(jsonDB) ?? throw new NullReferenceException("Cannot test without JSON DB"); + _mockDbDefinitions = new Mock(); + _mockDbDefinitions.Setup(x => x.SchemaDefinitions).Returns(schemas); + + //Standard settings + var settings = ResourceTool.Read("Dapper_Layers_Generator.Test/Data/baseconfig.json"); + _settings = JsonSerializer.Deserialize(settings) ?? throw new NullReferenceException("Cannot test without standard settings"); + } + } +} + diff --git a/test/Dapper-Layers-Generator.Test/Generators/GeneratorContextForBase_Tests.cs b/test/Dapper-Layers-Generator.Test/Generators/GeneratorContextForBase_Tests.cs index 83fba9d..f297644 100644 --- a/test/Dapper-Layers-Generator.Test/Generators/GeneratorContextForBase_Tests.cs +++ b/test/Dapper-Layers-Generator.Test/Generators/GeneratorContextForBase_Tests.cs @@ -4,26 +4,15 @@ using System.Text.Json; using Dapper_Layers_Generator.Data.POCO; using Dapper_Layers_Generator.Core.Converters; +using Dapper_Layers_Generator.Test.Generators; namespace Dapper_Layers_Generator.Core.Generators.Tests { - public class GeneratorContextForBase_Tests + public class GeneratorContextForBase_Tests : GeneratorBaseTest { - - private Mock _mockDbDefinitions; - private SettingsGlobal _settings; - - public GeneratorContextForBase_Tests() + public GeneratorContextForBase_Tests() : base() { - //Fake DB - var jsonDB = ResourceTool.Read("Dapper_Layers_Generator.Test/Data/schema.json"); - var schemas = JsonSerializer.Deserialize>(jsonDB) ?? throw new NullReferenceException("Cannot test without JSON DB"); - _mockDbDefinitions = new Mock(); - _mockDbDefinitions.Setup(x => x.SchemaDefinitions).Returns(schemas); - //Standard settings - var settings = ResourceTool.Read("Dapper_Layers_Generator.Test/Data/baseconfig.json"); - _settings = JsonSerializer.Deserialize(settings) ?? throw new NullReferenceException("Cannot test without standard settings"); } [Fact()] diff --git a/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorContext_Tests.cs b/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorContext_Tests.cs new file mode 100644 index 0000000..179f11a --- /dev/null +++ b/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorContext_Tests.cs @@ -0,0 +1,40 @@ +using Xunit; +using Dapper_Layers_Generator.Core.Generators.MySql; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Dapper_Layers_Generator.Core.Settings; +using Dapper_Layers_Generator.Test.Config; +using Moq; +using System.Text.Json; +using Dapper_Layers_Generator.Data.POCO; +using Dapper_Layers_Generator.Test.Generators; +using Dapper_Layers_Generator.Core.Converters; + +namespace Dapper_Layers_Generator.Core.Generators.MySql.Tests +{ + public class MySqlGeneratorContext_Tests : GeneratorBaseTest + { + public MySqlGeneratorContext_Tests() : base() + { + + } + + [Fact()] + public void GenerateStandard_Test() + { + //Arrange + var transformString = new StringTransformationService(_settings); + var generator = new MySqlGeneratorContext(_settings, _mockDbDefinitions.Object, transformString); + var expected = ResourceTool.Read("Dapper_Layers_Generator.Test/Results/Generators/MySql/MySqlGeneratorContext_ResultStandard.txt"); + + //Act + var result = generator.Generate(); + + //Assert + Assert.Equal(expected, result); + } + } +} \ No newline at end of file diff --git a/test/Dapper-Layers-Generator.Test/Results/Generators/MySql/MySqlGeneratorContext_ResultStandard.txt b/test/Dapper-Layers-Generator.Test/Results/Generators/MySql/MySqlGeneratorContext_ResultStandard.txt new file mode 100644 index 0000000..a62c093 --- /dev/null +++ b/test/Dapper-Layers-Generator.Test/Results/Generators/MySql/MySqlGeneratorContext_ResultStandard.txt @@ -0,0 +1,137 @@ +using DapperTest.Repo; +using System.Data; +using MySqlConnector; +using Dapper; +using Microsoft.Extensions.Configuration; + +// ================================================================= +// DBContext implements all repo management + a small context factory +// Inherits from DbContext base abstract class +// Specific for DB provider MySql +// Author: Dapper Generator +// Context name: DbContext +// Generated: 2022-12-01 12:46:29 UTC +// WARNING: Never change this file manually (re-generate it) +// ================================================================= + +namespace DapperTest.DbContext +{ + /// + /// Used when the DBcontext itself is not suffisent to manage its lifecycle + /// Factory specific for the dbprovider MySql + /// Inherits from factory base + /// + public class DbContextMySqlFactory : DbContextFactoryBase, IDbContextFactory + { + public DbContextMySqlFactory(IConfiguration config) : base (config) + { + } + + public override IDbContext Create() + { + return new DbContextMySql(_config); + } + } + + /// + /// Used when the DBcontext + /// Specific for the dbprovider MySql + /// Inherits from DbContextBase + /// + public class DbContextMySql : DbContextBase, IDbContext + { + public override IDbConnection Connection {get;init;} + + public override IStateRepo StateRepo + { + get { + _stateRepo ??= new StateRepoMySql(this); + return _stateRepo; + } + } + public override IClientRepo ClientRepo + { + get { + _clientRepo ??= new ClientRepoMySql(this); + return _clientRepo; + } + } + public override IRefreshTokenRepo RefreshTokenRepo + { + get { + _refreshTokenRepo ??= new RefreshTokenRepoMySql(this); + return _refreshTokenRepo; + } + } + public override IHistorystateRepo HistorystateRepo + { + get { + _historystateRepo ??= new HistorystateRepoMySql(this); + return _historystateRepo; + } + } + public override IRepairerRepo RepairerRepo + { + get { + _repairerRepo ??= new RepairerRepoMySql(this); + return _repairerRepo; + } + } + public override IUserRepo UserRepo + { + get { + _userRepo ??= new UserRepoMySql(this); + return _userRepo; + } + } + public override IDamageRepo DamageRepo + { + get { + _damageRepo ??= new DamageRepoMySql(this); + return _damageRepo; + } + } + public override IDamageFailureRepo DamageFailureRepo + { + get { + _damageFailureRepo ??= new DamageFailureRepoMySql(this); + return _damageFailureRepo; + } + } + public override IFailureRepo FailureRepo + { + get { + _failureRepo ??= new FailureRepoMySql(this); + return _failureRepo; + } + } + + /// + /// Main constructor, inject standard config : Default connection string + /// + public DbContextMySql(IConfiguration config) : base (config) + { + DefaultTypeMap.MatchNamesWithUnderscores = true; + SqlMapper.Settings.CommandTimeout = 60000; + Connection = new MySqlConnection(_config.GetConnectionString("Default") + ";AllowLoadLocalInfile=True"); + } + + /// + /// Open a transaction with a specified isolation level + /// + public override async Task OpenTransactionAsync(IsolationLevel? level = null) + { + if(_trans != null) + throw new Exception("A transaction is already open, you need to use a new DbContext for parallel job."); + + if (Connection.State == ConnectionState.Closed) + { + await ((MySqlConnection)Connection).OpenAsync(); + } + + _trans = level == null ? Connection.BeginTransaction() : Connection.BeginTransaction((IsolationLevel)level); + + return _trans; + } + } +} \ No newline at end of file From 57c07b7e58df1ebf002624ccbe5fbf8277ba8fdd Mon Sep 17 00:00:00 2001 From: fdonnetTaff Date: Thu, 1 Dec 2022 15:35:20 +0100 Subject: [PATCH 04/48] SetTable (in Abstract table generator tested in POCO generator for NULL table or Column) --- .../Generators/GeneratorFromTable.cs | 22 +++--- .../GeneratorContextForBase_Tests.cs | 5 -- .../Generators/GeneratorPOCO_Tests.cs | 68 +++++++++++++++++++ .../Generators/Generator_Tests.cs | 17 +---- 4 files changed, 82 insertions(+), 30 deletions(-) create mode 100644 test/Dapper-Layers-Generator.Test/Generators/GeneratorPOCO_Tests.cs diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorFromTable.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorFromTable.cs index 3942ff9..f099c4d 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorFromTable.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorFromTable.cs @@ -40,7 +40,7 @@ public GeneratorFromTable(SettingsGlobal settingsGlobal public override abstract string Generate(); - public virtual void SetTable(string tableName) + public void SetTable(string tableName) { var table = _currentSchema.Tables?.Where(t => t.Name == tableName).SingleOrDefault(); @@ -74,17 +74,19 @@ public virtual void SetTable(string tableName) } } - ColumnForGetOperations = Table.Columns != null - ? Table.Columns.Where(c => !TableSettings.IgnoredColumnNames.Split(',').Contains(c.Name) && !TableSettings.IgnoredColumnNamesForGet.Split(',').Contains(c.Name)) - : throw new ArgumentException($"No column available for this table{Table.Name}, genererator crash"); + if(Table.Columns != null) + { + ColumnForGetOperations = Table.Columns.Where(c => !TableSettings.IgnoredColumnNames.Split(',') + .Contains(c.Name) && !TableSettings.IgnoredColumnNamesForGet.Split(',').Contains(c.Name)); - ColumnForInsertOperations = Table.Columns != null - ? Table.Columns.Where(c => !TableSettings.IgnoredColumnNames.Split(',').Contains(c.Name) && !TableSettings.IgnoredColumnNamesForAdd.Split(',').Contains(c.Name)) - : throw new ArgumentException($"No column available for this table{Table.Name}, genererator crash"); + ColumnForInsertOperations = Table.Columns.Where(c => !TableSettings.IgnoredColumnNames.Split(',') + .Contains(c.Name) && !TableSettings.IgnoredColumnNamesForAdd.Split(',').Contains(c.Name)); - ColumnForUpdateOperations = Table.Columns != null - ? Table.Columns.Where(c => !TableSettings.IgnoredColumnNames.Split(',').Contains(c.Name) && !TableSettings.IgnoredColumnNamesForUpdate.Split(',').Contains(c.Name)) - : throw new ArgumentException($"No column available for this table{Table.Name}, genererator crash"); + ColumnForUpdateOperations = Table.Columns.Where(c => !TableSettings.IgnoredColumnNames.Split(',') + .Contains(c.Name) && !TableSettings.IgnoredColumnNamesForUpdate.Split(',').Contains(c.Name)); + } + else + throw new ArgumentException($"No column available for this table{Table.Name}, genererator crash"); } protected string GetPkMemberNamesString() diff --git a/test/Dapper-Layers-Generator.Test/Generators/GeneratorContextForBase_Tests.cs b/test/Dapper-Layers-Generator.Test/Generators/GeneratorContextForBase_Tests.cs index f297644..fc6149f 100644 --- a/test/Dapper-Layers-Generator.Test/Generators/GeneratorContextForBase_Tests.cs +++ b/test/Dapper-Layers-Generator.Test/Generators/GeneratorContextForBase_Tests.cs @@ -10,11 +10,6 @@ namespace Dapper_Layers_Generator.Core.Generators.Tests { public class GeneratorContextForBase_Tests : GeneratorBaseTest { - public GeneratorContextForBase_Tests() : base() - { - - } - [Fact()] public void GenerateStandard_Test() { diff --git a/test/Dapper-Layers-Generator.Test/Generators/GeneratorPOCO_Tests.cs b/test/Dapper-Layers-Generator.Test/Generators/GeneratorPOCO_Tests.cs new file mode 100644 index 0000000..53974c3 --- /dev/null +++ b/test/Dapper-Layers-Generator.Test/Generators/GeneratorPOCO_Tests.cs @@ -0,0 +1,68 @@ +using Xunit; +using Dapper_Layers_Generator.Core.Generators; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Dapper_Layers_Generator.Test.Generators; +using Dapper_Layers_Generator.Core.Converters; +using Dapper_Layers_Generator.Test.Config; +using Dapper_Layers_Generator.Core.Converters.MySql; +using Moq; +using System.Text.Json; +using Dapper_Layers_Generator.Data.POCO; + +namespace Dapper_Layers_Generator.Core.Generators.Tests +{ + public class GeneratorPOCO_Tests : GeneratorBaseTest + { + + [Fact()] + public void SetTableNotFound_Test() + { + //Arrange + var transformString = new StringTransformationService(_settings); + //need to be reviewed if dataconverted will change between db provider + var dataConverter = new MySqlDataTypeConverter(); + var generator = new GeneratorPOCO(_settings, _mockDbDefinitions.Object, transformString, dataConverter); + + //Act + var exception = Record.Exception(() => generator.SetTable("zzzz")); + + //Assert + Assert.NotNull(exception); + Assert.IsType(exception); + } + + + [Fact()] + public void SetTableColumnsNotFound_Test() + { + //Arrange + var transformString = new StringTransformationService(_settings); + //need to be reviewed if dataconverted will change between db provider + var dataConverter = new MySqlDataTypeConverter(); + var jsonDB = ResourceTool.Read("Dapper_Layers_Generator.Test/Data/schema.json"); + var schemas = JsonSerializer.Deserialize>(jsonDB) ?? throw new NullReferenceException("Cannot test without JSON DB"); + schemas[0].Tables!.Where(t => t.Name == "clients").Single().Columns =null; + var mockDbDefinitions = new Mock(); + mockDbDefinitions.Setup(x => x.SchemaDefinitions).Returns(schemas); + + var generator = new GeneratorPOCO(_settings, mockDbDefinitions.Object, transformString, dataConverter); + + //Act + var exception = Record.Exception(() => generator.SetTable("clients")); + + //Assert + Assert.NotNull(exception); + Assert.IsType(exception); + } + + [Fact()] + public void Generate_Test() + { + + } + } +} \ No newline at end of file diff --git a/test/Dapper-Layers-Generator.Test/Generators/Generator_Tests.cs b/test/Dapper-Layers-Generator.Test/Generators/Generator_Tests.cs index d3e8fa6..cc5c3a6 100644 --- a/test/Dapper-Layers-Generator.Test/Generators/Generator_Tests.cs +++ b/test/Dapper-Layers-Generator.Test/Generators/Generator_Tests.cs @@ -7,23 +7,10 @@ using Dapper_Layers_Generator.Core.Generators.MySql; -namespace Dapper_Layers_Generator.Core.Generators.Tests +namespace Dapper_Layers_Generator.Test.Generators { - public class Generator_Tests + public class Generator_Tests : GeneratorBaseTest { - private Mock _mockDbDefinitions; - //No need for a base config - private SettingsGlobal _settings = new(); - - public Generator_Tests() - { - var jsonDB = ResourceTool.Read("Dapper_Layers_Generator.Test/Data/schema.json"); - var schemas = JsonSerializer.Deserialize>(jsonDB) ?? throw new NullReferenceException("Cannot test without JSON DB"); - _mockDbDefinitions = new Mock(); - _mockDbDefinitions.Setup(x => x.SchemaDefinitions).Returns(schemas); - _settings.SelectedSchema = "mobileflow"; - } - [Fact] public void GetSelectedTableNamesWithSelection_Test() { From 5e4fdb356f4b0663a4077ba5186204a1dc357047 Mon Sep 17 00:00:00 2001 From: fdonnetTaff Date: Thu, 1 Dec 2022 16:14:12 +0100 Subject: [PATCH 05/48] refactor Poco generator string litteral + better decorator writing --- .../Generators/GeneratorPOCO.cs | 97 +++++++------------ 1 file changed, 35 insertions(+), 62 deletions(-) diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorPOCO.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorPOCO.cs index 45aed6f..a1cd72f 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorPOCO.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorPOCO.cs @@ -26,49 +26,39 @@ public override string Generate() if (Table == null) throw new NullReferenceException("Cannot use POCO generator without a loaded table (use SetTable)"); - - string output = WritePocoClass(); - - return output; + return WritePocoClass(); } - private string WritePocoHeaderComment() + private string WritePocoClass() { - return $@"#nullable disable warnings -namespace {_settings.TargetNamespaceForPOCO} -{{ -{tab}/// ================================================================= -{tab}/// -{tab}/// Poco class for the table {Table.Name} -{tab}/// Author: {_settings.AuthorName} -{tab}/// Poco: {ClassName} -{tab}/// Generated: {DateTime.Now} -{tab}/// WARNING: Never change this file manually (re-generate it) -{tab}/// -{tab}/// ================================================================="; - + return + $$""" + {{WritePocoHeaderComment()}} + {{tab}}public class {{ClassName}} + {{tab}}{ + {{WritePocoMemberFields()}} + {{tab}}} + } + """; } - private string WritePocoClass() + private string WritePocoHeaderComment() { - var builder = new StringBuilder(); - - builder.Append(@WritePocoHeaderComment()); - - builder.Append(Environment.NewLine); - builder.Append($"{tab}public class {ClassName}"); - builder.Append(Environment.NewLine); - builder.Append($"{tab}{{"); - builder.Append(Environment.NewLine); - - builder.Append(WritePocoMemberFields()); - - builder.Append($"{tab}}}"); - builder.Append(Environment.NewLine); - builder.Append('}'); - - return builder.ToString(); - + return + $$""" + #nullable disable warnings + namespace {{_settings.TargetNamespaceForPOCO}} + { + {{tab}}/// ================================================================= + {{tab}}/// + {{tab}}/// Poco class for the table {{Table.Name}} + {{tab}}/// Author: {{_settings.AuthorName}} + {{tab}}/// Poco: {{ClassName}} + {{tab}}/// Generated: {{_settings.GenerationTimestamp.ToString("yyyy-MM-dd HH:mm:ss")}} UTC + {{tab}}/// WARNING: Never change this file manually (re-generate it) + {{tab}}/// + {{tab}}/// ================================================================= + """; } private string WritePocoMemberFields() @@ -98,22 +88,15 @@ private string WritePocoMemberFields() private string WriteMemberDecorators(SettingsColumn settings, string memberType, Column col) { - var decorators = new StringBuilder(); - var curDecoratorsLength = 0; - - decorators.Append(WriteMemberRequieredDecorator(settings, col)); - SpaceBetweenDecorators(ref decorators, ref curDecoratorsLength); - - decorators.Append(WriteMemberStringDecorator(settings, memberType, col)); - SpaceBetweenDecorators(ref decorators, ref curDecoratorsLength); - - decorators.Append(WriteMemberJsonIgnoreDecorator(col)); - SpaceBetweenDecorators(ref decorators, ref curDecoratorsLength); - - decorators.Append(WriteMemberCustomDecorator(settings)); - SpaceBetweenDecorators(ref decorators, ref curDecoratorsLength); + var decorators = new List + { + WriteMemberRequieredDecorator(settings, col), + WriteMemberStringDecorator(settings, memberType, col), + WriteMemberJsonIgnoreDecorator(col), + WriteMemberCustomDecorator(settings) + }; - return decorators.ToString(); + return String.Join(Environment.NewLine, decorators.Where(d => !string.IsNullOrEmpty(d))) + Environment.NewLine; } private string WriteMemberStringDecorator(SettingsColumn settings, string memberType, Column col) @@ -170,15 +153,5 @@ private string WriteMemberCustomDecorator(SettingsColumn settings) return decorator; } - - private static void SpaceBetweenDecorators(ref StringBuilder decorators, ref int curLength) - { - if (decorators.Length > curLength) - { - decorators.Append(Environment.NewLine); - curLength = decorators.Length; - } - } - } } From 09942cda2441a2999a2be070b8cb861680815e97 Mon Sep 17 00:00:00 2001 From: fdonnetTaff Date: Thu, 1 Dec 2022 16:14:26 +0100 Subject: [PATCH 06/48] poco generator standard test --- .../Dapper-Layers-Generator.Test.csproj | 2 + .../Generators/GeneratorPOCO_Tests.cs | 31 ++++++++---- .../GeneratorPOCO_ResultStandard.txt | 49 +++++++++++++++++++ 3 files changed, 73 insertions(+), 9 deletions(-) create mode 100644 test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorPOCO_ResultStandard.txt diff --git a/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj b/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj index 0b9bccf..317da0e 100644 --- a/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj +++ b/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj @@ -15,6 +15,7 @@ + @@ -44,6 +45,7 @@ + diff --git a/test/Dapper-Layers-Generator.Test/Generators/GeneratorPOCO_Tests.cs b/test/Dapper-Layers-Generator.Test/Generators/GeneratorPOCO_Tests.cs index 53974c3..8e2691b 100644 --- a/test/Dapper-Layers-Generator.Test/Generators/GeneratorPOCO_Tests.cs +++ b/test/Dapper-Layers-Generator.Test/Generators/GeneratorPOCO_Tests.cs @@ -12,20 +12,27 @@ using Moq; using System.Text.Json; using Dapper_Layers_Generator.Data.POCO; +using Dapper_Layers_Generator.Core.Settings; namespace Dapper_Layers_Generator.Core.Generators.Tests { public class GeneratorPOCO_Tests : GeneratorBaseTest { + //need to be reviewed if dataconverted will change between db provider + private MySqlDataTypeConverter _dataConverter; + private StringTransformationService _transformString; + + public GeneratorPOCO_Tests() : base() + { + _dataConverter = new MySqlDataTypeConverter(); + _transformString = new StringTransformationService(_settings); + } [Fact()] public void SetTableNotFound_Test() { //Arrange - var transformString = new StringTransformationService(_settings); - //need to be reviewed if dataconverted will change between db provider - var dataConverter = new MySqlDataTypeConverter(); - var generator = new GeneratorPOCO(_settings, _mockDbDefinitions.Object, transformString, dataConverter); + var generator = new GeneratorPOCO(_settings, _mockDbDefinitions.Object, _transformString, _dataConverter); //Act var exception = Record.Exception(() => generator.SetTable("zzzz")); @@ -40,16 +47,13 @@ public void SetTableNotFound_Test() public void SetTableColumnsNotFound_Test() { //Arrange - var transformString = new StringTransformationService(_settings); - //need to be reviewed if dataconverted will change between db provider - var dataConverter = new MySqlDataTypeConverter(); var jsonDB = ResourceTool.Read("Dapper_Layers_Generator.Test/Data/schema.json"); var schemas = JsonSerializer.Deserialize>(jsonDB) ?? throw new NullReferenceException("Cannot test without JSON DB"); schemas[0].Tables!.Where(t => t.Name == "clients").Single().Columns =null; var mockDbDefinitions = new Mock(); mockDbDefinitions.Setup(x => x.SchemaDefinitions).Returns(schemas); - var generator = new GeneratorPOCO(_settings, mockDbDefinitions.Object, transformString, dataConverter); + var generator = new GeneratorPOCO(_settings, mockDbDefinitions.Object, _transformString, _dataConverter); //Act var exception = Record.Exception(() => generator.SetTable("clients")); @@ -60,9 +64,18 @@ public void SetTableColumnsNotFound_Test() } [Fact()] - public void Generate_Test() + public void GenerateStandard_Test() { + //Arrange + var generator = new GeneratorPOCO(_settings, _mockDbDefinitions.Object, _transformString, _dataConverter); + generator.SetTable("clients"); + var expected = ResourceTool.Read("Dapper_Layers_Generator.Test/Results/Generators/GeneratorPOCO_ResultStandard.txt"); + //Act + var result = generator.Generate(); + + //Assert + Assert.Equal(expected, result); } } } \ No newline at end of file diff --git a/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorPOCO_ResultStandard.txt b/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorPOCO_ResultStandard.txt new file mode 100644 index 0000000..7dbfbb1 --- /dev/null +++ b/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorPOCO_ResultStandard.txt @@ -0,0 +1,49 @@ +#nullable disable warnings +namespace DapperTest.POCO +{ + /// ================================================================= + /// + /// Poco class for the table clients + /// Author: Dapper Generator + /// Poco: Client + /// Generated: 2022-12-01 12:46:29 UTC + /// WARNING: Never change this file manually (re-generate it) + /// + /// ================================================================= + public class Client + { + + public int Id { get; set; } + + [System.ComponentModel.DataAnnotations.Required] + [System.ComponentModel.DataAnnotations.StringLength(255)] + public string Firstname { get; set; } + + [System.ComponentModel.DataAnnotations.Required] + [System.ComponentModel.DataAnnotations.StringLength(255)] + public string Lastname { get; set; } + + [System.ComponentModel.DataAnnotations.Required] + [System.ComponentModel.DataAnnotations.StringLength(255)] + public string Address { get; set; } + + [System.ComponentModel.DataAnnotations.StringLength(255)] + public string? Comment { get; set; } + + [System.ComponentModel.DataAnnotations.Required] + public DateTime CreatedAt { get; set; } + + [System.ComponentModel.DataAnnotations.StringLength(255)] + public string? Postal { get; set; } + + [System.ComponentModel.DataAnnotations.StringLength(255)] + public string? City { get; set; } + + [System.ComponentModel.DataAnnotations.StringLength(255)] + public string? Phone { get; set; } + + [System.ComponentModel.DataAnnotations.StringLength(255)] + public string? Email { get; set; } + + } +} \ No newline at end of file From 72b0c4783897f4842cfc5e4233fe963210eadc76 Mon Sep 17 00:00:00 2001 From: fdonnetTaff Date: Thu, 1 Dec 2022 17:08:48 +0100 Subject: [PATCH 07/48] Poco first version (other tests to cover => custom type, with custom annotation on column) --- .../Generators/GeneratorPOCO.cs | 9 ++- .../Dapper-Layers-Generator.Test.csproj | 4 + .../Generators/GeneratorPOCO_Tests.cs | 81 ++++++++++++++++++- .../GeneratorPOCO_ResultStandard.txt | 2 - ...atorPOCO_ResultWithoutStringLengthDeco.txt | 39 +++++++++ ...CO_ResultWithoutStringLengthDecoOneCol.txt | 46 +++++++++++ 6 files changed, 173 insertions(+), 8 deletions(-) create mode 100644 test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorPOCO_ResultWithoutStringLengthDeco.txt create mode 100644 test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorPOCO_ResultWithoutStringLengthDecoOneCol.txt diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorPOCO.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorPOCO.cs index a1cd72f..3f821f7 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorPOCO.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorPOCO.cs @@ -70,7 +70,7 @@ private string WritePocoMemberFields() ? Table.Columns : Table.Columns.Where(c => !TableSettings.IgnoredColumnNames.Split(',').Contains(c.Name)); - var members = String.Join(Environment.NewLine, columns.Select(col => + var members = String.Join(Environment.NewLine + Environment.NewLine, columns.Select(col => { var memberName = _stringTransform.PascalCase(col.Name); var colSettings = TableSettings.GetColumnSettings(col.Name); @@ -78,8 +78,9 @@ private string WritePocoMemberFields() var decorators = WriteMemberDecorators(colSettings, memberType, col); - return $"{decorators}{tab}{tab}public {memberType} {memberName} {{ get; set; }}" - + Environment.NewLine; + return $"{(string.IsNullOrEmpty(decorators) + ? string.Empty + : decorators + Environment.NewLine)}{tab}{tab}public {memberType} {memberName} {{ get; set; }}"; })); @@ -96,7 +97,7 @@ private string WriteMemberDecorators(SettingsColumn settings, string memberType, WriteMemberCustomDecorator(settings) }; - return String.Join(Environment.NewLine, decorators.Where(d => !string.IsNullOrEmpty(d))) + Environment.NewLine; + return String.Join(Environment.NewLine, decorators.Where(d => !string.IsNullOrEmpty(d))); } private string WriteMemberStringDecorator(SettingsColumn settings, string memberType, Column col) diff --git a/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj b/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj index 317da0e..7a0870d 100644 --- a/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj +++ b/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj @@ -16,6 +16,8 @@ + + @@ -46,6 +48,8 @@ + + diff --git a/test/Dapper-Layers-Generator.Test/Generators/GeneratorPOCO_Tests.cs b/test/Dapper-Layers-Generator.Test/Generators/GeneratorPOCO_Tests.cs index 8e2691b..2441a30 100644 --- a/test/Dapper-Layers-Generator.Test/Generators/GeneratorPOCO_Tests.cs +++ b/test/Dapper-Layers-Generator.Test/Generators/GeneratorPOCO_Tests.cs @@ -22,7 +22,7 @@ public class GeneratorPOCO_Tests : GeneratorBaseTest private MySqlDataTypeConverter _dataConverter; private StringTransformationService _transformString; - public GeneratorPOCO_Tests() : base() + public GeneratorPOCO_Tests() : base() { _dataConverter = new MySqlDataTypeConverter(); _transformString = new StringTransformationService(_settings); @@ -49,7 +49,7 @@ public void SetTableColumnsNotFound_Test() //Arrange var jsonDB = ResourceTool.Read("Dapper_Layers_Generator.Test/Data/schema.json"); var schemas = JsonSerializer.Deserialize>(jsonDB) ?? throw new NullReferenceException("Cannot test without JSON DB"); - schemas[0].Tables!.Where(t => t.Name == "clients").Single().Columns =null; + schemas[0].Tables!.Where(t => t.Name == "clients").Single().Columns = null; var mockDbDefinitions = new Mock(); mockDbDefinitions.Setup(x => x.SchemaDefinitions).Returns(schemas); @@ -77,5 +77,82 @@ public void GenerateStandard_Test() //Assert Assert.Equal(expected, result); } + + [Fact()] + public void GenerateWithoutStringLengthDecoInAllSchema_Test() + { + //Arrange + var generator = new GeneratorPOCO(_settings, _mockDbDefinitions.Object, _transformString, _dataConverter); + generator.SetTable("clients"); + _settings.TableGlobalSettings.ColumnGlobalSettings.StandardStringLengthDecorator = false; + var expected = ResourceTool.Read("Dapper_Layers_Generator.Test/Results/Generators/GeneratorPOCO_ResultWithoutStringLengthDeco.txt"); + + //Act + var result = generator.Generate(); + + //Assert + Assert.Equal(expected, result); + } + + [Fact()] + public void GenerateWithoutStringLengthDecoInTable_Test() + { + //Arrange + var generator = new GeneratorPOCO(_settings, _mockDbDefinitions.Object, _transformString, _dataConverter); + _settings.TableSettings = new Dictionary() + { + { + "clients", + new SettingsTable + { + ColumnGlobalSettings = new SettingsColumn + { + StandardStringLengthDecorator = false + } + } + } + }; + + generator.SetTable("clients"); + + var expected = ResourceTool.Read("Dapper_Layers_Generator.Test/Results/Generators/GeneratorPOCO_ResultWithoutStringLengthDeco.txt"); + + //Act + var result = generator.Generate(); + + //Assert + Assert.Equal(expected, result); + } + + [Fact()] + public void GenerateWithoutStringLengthDecoOnlyOneColumn_Test() + { + //Arrange + var generator = new GeneratorPOCO(_settings, _mockDbDefinitions.Object, _transformString, _dataConverter); + _settings.TableSettings = new Dictionary() + { + { + "clients", + new SettingsTable + { + ColumnSettings = new Dictionary{ + { + "lastname", + new SettingsColumn{StandardStringLengthDecorator= false} + } } + } + } + }; + + generator.SetTable("clients"); + + var expected = ResourceTool.Read("Dapper_Layers_Generator.Test/Results/Generators/GeneratorPOCO_ResultWithoutStringLengthDecoOneCol.txt"); + + //Act + var result = generator.Generate(); + + //Assert + Assert.Equal(expected, result); + } } } \ No newline at end of file diff --git a/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorPOCO_ResultStandard.txt b/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorPOCO_ResultStandard.txt index 7dbfbb1..3b0271d 100644 --- a/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorPOCO_ResultStandard.txt +++ b/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorPOCO_ResultStandard.txt @@ -12,7 +12,6 @@ namespace DapperTest.POCO /// ================================================================= public class Client { - public int Id { get; set; } [System.ComponentModel.DataAnnotations.Required] @@ -44,6 +43,5 @@ namespace DapperTest.POCO [System.ComponentModel.DataAnnotations.StringLength(255)] public string? Email { get; set; } - } } \ No newline at end of file diff --git a/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorPOCO_ResultWithoutStringLengthDeco.txt b/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorPOCO_ResultWithoutStringLengthDeco.txt new file mode 100644 index 0000000..ed75a76 --- /dev/null +++ b/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorPOCO_ResultWithoutStringLengthDeco.txt @@ -0,0 +1,39 @@ +#nullable disable warnings +namespace DapperTest.POCO +{ + /// ================================================================= + /// + /// Poco class for the table clients + /// Author: Dapper Generator + /// Poco: Client + /// Generated: 2022-12-01 12:46:29 UTC + /// WARNING: Never change this file manually (re-generate it) + /// + /// ================================================================= + public class Client + { + public int Id { get; set; } + + [System.ComponentModel.DataAnnotations.Required] + public string Firstname { get; set; } + + [System.ComponentModel.DataAnnotations.Required] + public string Lastname { get; set; } + + [System.ComponentModel.DataAnnotations.Required] + public string Address { get; set; } + + public string? Comment { get; set; } + + [System.ComponentModel.DataAnnotations.Required] + public DateTime CreatedAt { get; set; } + + public string? Postal { get; set; } + + public string? City { get; set; } + + public string? Phone { get; set; } + + public string? Email { get; set; } + } +} \ No newline at end of file diff --git a/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorPOCO_ResultWithoutStringLengthDecoOneCol.txt b/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorPOCO_ResultWithoutStringLengthDecoOneCol.txt new file mode 100644 index 0000000..43bf6a8 --- /dev/null +++ b/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorPOCO_ResultWithoutStringLengthDecoOneCol.txt @@ -0,0 +1,46 @@ +#nullable disable warnings +namespace DapperTest.POCO +{ + /// ================================================================= + /// + /// Poco class for the table clients + /// Author: Dapper Generator + /// Poco: Client + /// Generated: 2022-12-01 12:46:29 UTC + /// WARNING: Never change this file manually (re-generate it) + /// + /// ================================================================= + public class Client + { + public int Id { get; set; } + + [System.ComponentModel.DataAnnotations.Required] + [System.ComponentModel.DataAnnotations.StringLength(255)] + public string Firstname { get; set; } + + [System.ComponentModel.DataAnnotations.Required] + public string Lastname { get; set; } + + [System.ComponentModel.DataAnnotations.Required] + [System.ComponentModel.DataAnnotations.StringLength(255)] + public string Address { get; set; } + + [System.ComponentModel.DataAnnotations.StringLength(255)] + public string? Comment { get; set; } + + [System.ComponentModel.DataAnnotations.Required] + public DateTime CreatedAt { get; set; } + + [System.ComponentModel.DataAnnotations.StringLength(255)] + public string? Postal { get; set; } + + [System.ComponentModel.DataAnnotations.StringLength(255)] + public string? City { get; set; } + + [System.ComponentModel.DataAnnotations.StringLength(255)] + public string? Phone { get; set; } + + [System.ComponentModel.DataAnnotations.StringLength(255)] + public string? Email { get; set; } + } +} \ No newline at end of file From edbd26a01c6873d01b125701357fdc0eb32c6f10 Mon Sep 17 00:00:00 2001 From: fdonnetTaff Date: Thu, 1 Dec 2022 18:34:09 +0100 Subject: [PATCH 08/48] GeneratorForOperations (string litteral) => need to be tested in child generators --- .../Generators/GeneratorForOperations.cs | 239 ++++++++---------- .../Generators/GeneratorRepoAdd.cs | 2 +- 2 files changed, 105 insertions(+), 136 deletions(-) diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorForOperations.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorForOperations.cs index 9e25290..92ef307 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorForOperations.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorForOperations.cs @@ -20,15 +20,12 @@ protected string GetBaseSqlForSelect(string tableIdentifier = "") if (ColumnForGetOperations == null || !ColumnForGetOperations.Any()) throw new ArgumentException($"No column available for select for this table{Table.Name}, genererator crash"); - var output = new StringBuilder(); - - output.Append(@$"{tab}{tab}{tab}var sql = @"" -{tab}{tab}{tab}SELECT {@GetColumnListStringForSelect(tableIdentifier)}"); - output.Append(Environment.NewLine); - output.Append(@$"{tab}{tab}{tab}FROM {ColAndTableIdentifier + Table.Name + ColAndTableIdentifier} {tableIdentifier.Replace(".","")}"); - - return output.ToString(); - + return + $$""" + {{tab}}{{tab}}{{tab}}var sql = @" + {{tab}}{{tab}}{{tab}}SELECT {{@GetColumnListStringForSelect(tableIdentifier)}} + {{tab}}{{tab}}{{tab}}FROM {{ColAndTableIdentifier + Table.Name + ColAndTableIdentifier}} {{tableIdentifier.Replace(".", "")}} + """; } //Can maybe be used for BULK @@ -37,32 +34,25 @@ protected string GetBaseSqlForInsert() if (ColumnForInsertOperations == null || !ColumnForInsertOperations.Any()) throw new ArgumentException($"No column available for insert for this table{Table.Name}, genererator crash"); - var output = new StringBuilder(); - - output.Append(@$"{tab}{tab}{tab}var sql = @"" -{tab}{tab}{tab}INSERT INTO {ColAndTableIdentifier}{Table.Name}{ColAndTableIdentifier} -{tab}{tab}{tab}( -"); - output.Append($"{tab}{tab}{tab}{tab}" + @GetColumnListStringForInsert()); - output.Append($@" -{tab}{tab}{tab})"); - output.Append(Environment.NewLine); - output.Append(@$"{tab}{tab}{tab}VALUES -{tab}{tab}{tab}( -"); - - return output.ToString(); - + return + $$""" + {{tab}}{{tab}}{{tab}}var sql = @" + {{tab}}{{tab}}{{tab}}INSERT INTO {{ColAndTableIdentifier}}{{Table.Name}}{{ColAndTableIdentifier}} + {{tab}}{{tab}}{{tab}}( + {{tab}}{{tab}}{{tab}}{{tab}}{{@GetColumnListStringForInsert()}} + {{tab}}{{tab}}{{tab}}) + {{tab}}{{tab}}{{tab}}VALUES + {{tab}}{{tab}}{{tab}}( + """; } protected virtual string GetBaseSqlForDelete() { - var output = new StringBuilder(); - - output.Append(@$"{tab}{tab}{tab}var sql = @"" -{tab}{tab}{tab}DELETE FROM {ColAndTableIdentifier}{Table.Name}{ColAndTableIdentifier}"); - - return output.ToString(); + return + $$""" + {{tab}}{{tab}}{{tab}}var sql = @" + {{tab}}{{tab}}{{tab}}DELETE FROM {{ColAndTableIdentifier}}{{Table.Name}}{{ColAndTableIdentifier}} + """; } protected virtual string GetValuesToInsert() @@ -76,11 +66,11 @@ protected virtual string GetValuesToInsert() return $@"@{col.Name}"; })); - - output.Append(values); - output.Append(Environment.NewLine); - output.Append($@"{tab}{tab}{tab})"";"); - return output.ToString(); + return + $""" + {tab}{tab}{tab}{tab}{values} + {tab}{tab}{tab})"; + """; } protected string GetBaseSqlForUpdate() @@ -88,15 +78,12 @@ protected string GetBaseSqlForUpdate() if (ColumnForUpdateOperations == null || !ColumnForUpdateOperations.Any()) throw new ArgumentException($"No column available for update for this table{Table.Name}, genererator crash"); - var output = new StringBuilder(); - - output.Append(@$"{tab}{tab}{tab}var sql = @"" -{tab}{tab}{tab}UPDATE {ColAndTableIdentifier}{Table.Name}{ColAndTableIdentifier} -{tab}{tab}{tab}SET "); - output.Append(GetColumnListStringForUpdate()); - output.Append(Environment.NewLine); - - return output.ToString(); + return + $""" + {tab}{tab}{tab}var sql = @" + {tab}{tab}{tab}UPDATE {ColAndTableIdentifier}{Table.Name}{ColAndTableIdentifier} + {tab}{tab}{tab}SET {GetColumnListStringForUpdate()} + """; } private string GetColumnListStringForUpdate() @@ -110,41 +97,35 @@ private string GetColumnListStringForUpdate() protected virtual string GetDapperDynaParamsForPk() { - var output = new StringBuilder(); - output.Append($"{tab}{tab}{tab}var p = new DynamicParameters();"); - output.Append(Environment.NewLine); - var spParams = String.Join(Environment.NewLine, PkColumns.Select(col => { return $@"{tab}{tab}{tab}p.Add(""@{col.Name}"",{_stringTransform.ApplyConfigTransformMember(col.Name)});"; })); - output.Append(spParams); - return output.ToString(); + return + $""" + {tab}{tab}{tab}var p = new DynamicParameters(); + {spParams} + """; } protected virtual string GetDapperDynaParamsForPkList() { - var output = new StringBuilder(); - output.Append($"{tab}{tab}{tab}var p = new DynamicParameters();"); - output.Append(Environment.NewLine); - - output.Append($@"{tab}{tab}{tab}p.Add(""@listOf"",{GetPKMemberNamesStringList()});"); - - return output.ToString(); + return + $""" + {tab}{tab}{tab}var p = new DynamicParameters(); + {tab}{tab}{tab}p.Add("@listOf",{GetPKMemberNamesStringList()}); + """; } - private string GetColumnListStringForSelect(string tableIdentifier = "") { - var output = string.Empty; return String.Join(Environment.NewLine + $"{tab}{tab}{tab}{tab},", ColumnForGetOperations!.OrderBy(c => c.Position).Select(c => $"{tableIdentifier}{ColAndTableIdentifier}{c.Name}{ColAndTableIdentifier}")); } private string GetColumnListStringForInsert() { - var output = string.Empty; var cols = ColumnForInsertOperations!.Where(c => !c.IsAutoIncrement); return String.Join(Environment.NewLine + $"{tab}{tab}{tab}{tab},", @@ -153,99 +134,90 @@ private string GetColumnListStringForInsert() protected virtual string GetSqlWhereClauseForPk() { - var output = new StringBuilder(); - - output.Append($"{tab}{tab}{tab}WHERE "); - var whereClause = String.Join(Environment.NewLine + $"{tab}{tab}{tab}AND ", PkColumns.Select(col => { return $"{ColAndTableIdentifier}{col.Name}{ColAndTableIdentifier} = @{col.Name}"; })); - - output.Append(whereClause + "\";"); - return output.ToString(); - + + return + $""" + {tab}{tab}{tab}WHERE {whereClause}"; + """; } protected virtual string GetSqlPkListWhereClause() { - var output = new StringBuilder(); - - output.Append($"{tab}{tab}{tab}WHERE "); - output.Append($"{ColAndTableIdentifier}{PkColumns.First().Name}{ColAndTableIdentifier} IN @listOf"); - - output.Append("\";"); - return output.ToString(); - + return + $""" + {tab}{tab}{tab}WHERE {ColAndTableIdentifier}{PkColumns.First().Name}{ColAndTableIdentifier} IN @listOf"; + """; } protected virtual string GetOpenTransAndInitBulkMySql() { - - return $@"{tab}{tab}{tab}var isTransAlreadyOpen = _{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.Transaction != null; - -{tab}{tab}{tab}if (!isTransAlreadyOpen) -{tab}{tab}{tab}{tab}await _{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.OpenTransactionAsync(); - -{tab}{tab}{tab}var bulkCopy = new MySqlBulkCopy((MySqlConnection)_{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.Connection -{tab}{tab}{tab}{tab}, (MySqlTransaction?)_{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.Transaction);"; - + return + $""" + {tab}{tab}{tab}var isTransAlreadyOpen = _{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.Transaction != null; + + {tab}{tab}{tab}if (!isTransAlreadyOpen) + {tab}{tab}{tab}{tab}await _{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.OpenTransactionAsync(); + + {tab}{tab}{tab}var bulkCopy = new MySqlBulkCopy((MySqlConnection)_{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.Connection + {tab}{tab}{tab}{tab}, (MySqlTransaction?)_{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.Transaction); + """; } protected virtual string GetCloseTransaction() { - return $@"{tab}{tab}{tab}if (!isTransAlreadyOpen) -{tab}{tab}{tab}{{ -{tab}{tab}{tab}{tab}_dbContext.CommitTransaction(); -{tab}{tab}{tab}{tab}_dbContext.Connection.Close(); -{tab}{tab}{tab}}}"; + return + $$""" + {{tab}}{{tab}}{{tab}}if (!isTransAlreadyOpen) + {{tab}}{{tab}}{{tab}}{ + {{tab}}{{tab}}{{tab}}{{tab}}_dbContext.CommitTransaction(); + {{tab}}{{tab}}{{tab}}{{tab}}_dbContext.Connection.Close(); + {{tab}}{{tab}}{{tab}}} + """; } protected virtual string GetCreateDataTableForPkMySql(string opCode) { var output = new StringBuilder(); - output.Append($"{tab}{tab}{tab}var table = new DataTable();" + Environment.NewLine); - + var rowsAdd = new List(); + var colAdd = new List(); + var indexItem = 1; foreach (var colBulk in PkColumns) { - output.Append($@"{tab}{tab}{tab}table.Columns.Add(""{colBulk.Name}"",typeof({DataConverter.GetDotNetDataType(colBulk.DataType)}));" + Environment.NewLine); + colAdd.Add($@"{tab}{tab}{tab}table.Columns.Add(""{colBulk.Name}"",typeof({DataConverter.GetDotNetDataType(colBulk.DataType)}));"); rowsAdd.Add($@"{tab}{tab}{tab}{tab}r[""{colBulk.Name}""] = identity{(PkColumns.Count() > 1 ? ".Item" + indexItem : string.Empty)};"); indexItem++; } - output.Append(Environment.NewLine); - output.Append($@"{tab}{tab}{tab}bulkCopy.DestinationTableName = ""tmp_bulk{opCode}_{Table.Name}"";"); - output.Append(Environment.NewLine); - output.Append($@"{tab}{tab}{tab}bulkCopy.BulkCopyTimeout = 600;"); - output.Append(Environment.NewLine); - output.Append(Environment.NewLine); - - output.Append(@$"{tab}{tab}{tab}foreach(var identity in listOf{string.Join("And", PkColumns.Select(c => _stringTransform.ApplyConfigTransformClass(c.Name)))}) -{tab}{tab}{tab}{{ -{tab}{tab}{tab}{tab}DataRow r = table.NewRow();"); - - output.Append(Environment.NewLine); - output.Append(String.Join(Environment.NewLine, rowsAdd)); - output.Append(Environment.NewLine); - output.Append($"{tab}{tab}{tab}{tab}table.Rows.Add(r);"); - output.Append(Environment.NewLine); - output.Append($"{tab}{tab}{tab}}}"); - output.Append(Environment.NewLine); - output.Append(Environment.NewLine); - - output.Append($@"{tab}{tab}{tab}List colMappings = new(); -{tab}{tab}{tab}int i = 0; -{tab}{tab}{tab}foreach (DataColumn col in table.Columns) -{tab}{tab}{tab}{{ -{tab}{tab}{tab}{tab}colMappings.Add(new MySqlBulkCopyColumnMapping(i, col.ColumnName)); -{tab}{tab}{tab}{tab}i++; -{tab}{tab}{tab}}} - -{tab}{tab}{tab}bulkCopy.ColumnMappings.AddRange(colMappings);"); - - return output.ToString(); + return + $$""" + {{tab}}{{tab}}{{tab}}var table = new DataTable(); + {{String.Join(Environment.NewLine, colAdd)}} + {{tab}}{{tab}}{{tab}}bulkCopy.DestinationTableName = "tmp_bulk{{opCode}}_{{Table.Name}}" + {{tab}}{{tab}}{{tab}}bulkCopy.BulkCopyTimeout = 600; + + {{tab}}{{tab}}{{tab}}foreach(var identity in listOf{{string.Join("And", PkColumns.Select(c => _stringTransform.ApplyConfigTransformClass(c.Name)))}}) + {{tab}}{{tab}}{{tab}}{ + {{tab}}{{tab}}{{tab}}{{tab}}DataRow r = table.NewRow(); + {{String.Join(Environment.NewLine, rowsAdd)}} + {{tab}}{{tab}}{{tab}}{{tab}}table.Rows.Add(r); + {{tab}}{{tab}}{{tab}}} + + {{tab}}{{tab}}{{tab}}List colMappings = new(); + {{tab}}{{tab}}{{tab}}int i = 0; + {{tab}}{{tab}}{{tab}}foreach (DataColumn col in table.Columns) + {{tab}}{{tab}}{{tab}}{ + {{tab}}{{tab}}{{tab}}{{tab}}colMappings.Add(new MySqlBulkCopyColumnMapping(i, col.ColumnName)); + {{tab}}{{tab}}{{tab}}{{tab}}i++; + {{tab}}{{tab}}{{tab}}} + + {{tab}}{{tab}}{{tab}}bulkCopy.ColumnMappings.AddRange(colMappings); + """; } protected virtual string GetBulkCallMySql() { @@ -254,20 +226,17 @@ protected virtual string GetBulkCallMySql() protected virtual string GetCreateDbTmpTableForPksMySql(string opCode) { - var output = new StringBuilder(); - - output.Append($"{tab}{tab}{tab}var sqltmp = @\"CREATE TEMPORARY TABLE " + - $"{ColAndTableIdentifier}tmp_bulk{opCode}_{Table.Name}{ColAndTableIdentifier} ("); - //build pk columns var createColumns = String.Join(Environment.NewLine + $"{tab}{tab}{tab}{tab}, ", PkColumns.Select(c => c.Name + " " + c.CompleteType)); - output.Append(createColumns + ");\";"); - output.Append(Environment.NewLine); - output.Append($"{tab}{tab}{tab}_ = await _{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.Connection." + - $"ExecuteAsync(sqltmp,transaction:_{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.Transaction);"); - return output.ToString(); + var functionCall = $"{tab}{tab}{tab}_ = await _{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}" + + $".Connection.ExecuteAsync(sqltmp,transaction:_{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.Transaction);"; + return + $""" + {tab}{tab}{tab}var sqltmp = @"CREATE TEMPORARY TABLE {ColAndTableIdentifier}tmp_bulk{opCode}_{Table.Name}{ColAndTableIdentifier} ({createColumns});"; + {functionCall}; + """; } protected abstract string GetMethodDef(); diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoAdd.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoAdd.cs index b7c8b61..c303059 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoAdd.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoAdd.cs @@ -30,7 +30,7 @@ public override string Generate() output.Append(Environment.NewLine); output.Append(Environment.NewLine); output.Append(@GetBaseSqlForInsert()); - output.Append($"{tab}{tab}{tab}{tab}" + @GetValuesToInsert()); + output.Append(@GetValuesToInsert()); output.Append(Environment.NewLine); output.Append(Environment.NewLine); output.Append(GetDapperCall()); From 4a37dbf557cd8dfc654be6987d7506aa9f757b1a Mon Sep 17 00:00:00 2001 From: Fabien Donnet Date: Thu, 1 Dec 2022 21:19:10 +0100 Subject: [PATCH 09/48] GeneratorAdd : refactor string literal and go with c# 11 for target too --- .../ConsoleServiceMain.cs | 2 +- .../Generators/GeneratorForOperations.cs | 30 ++++---- .../Generators/GeneratorRepoAdd.cs | 73 ++++++++----------- .../Generators/GeneratorRepoAddBulk.cs | 12 ++- .../Generators/GeneratorRepoAddMulti.cs | 18 +++-- .../Generators/GeneratorRepoDelete.cs | 14 ++-- .../Generators/GeneratorRepoDeleteBulk.cs | 12 ++- .../Generators/GeneratorRepoDeleteByPkList.cs | 16 ++-- .../Generators/GeneratorRepoGetAll.cs | 13 ++-- .../Generators/GeneratorRepoGetByPk.cs | 16 ++-- .../Generators/GeneratorRepoGetByPkBulk.cs | 12 ++- .../Generators/GeneratorRepoGetByPkList.cs | 16 ++-- .../Generators/GeneratorRepoGetByUk.cs | 17 +++-- .../Generators/GeneratorRepoUpdate.cs | 14 ++-- .../Generators/GeneratorRepoUpdateBulk.cs | 12 ++- .../Generators/GeneratorRepoUpdateMulti.cs | 14 ++-- .../Generators/MySql/MySqlGeneratorRepoAdd.cs | 34 +++++---- .../MySql/MySqlGeneratorRepoAddBulk.cs | 11 ++- .../MySql/MySqlGeneratorRepoDeleteBulk.cs | 10 ++- .../MySql/MySqlGeneratorRepoDeleteByPkList.cs | 16 ++-- .../MySql/MySqlGeneratorRepoGetByPkBulk.cs | 14 ++-- .../MySql/MySqlGeneratorRepoGetByPkList.cs | 12 ++- .../MySql/MySqlGeneratorRepoUpdateBulk.cs | 10 ++- .../MySql/MySqlGeneratorContext_Tests.cs | 5 -- .../MySql/MySqlGeneratorRepoAdd_Test.cs | 39 ++++++++++ 25 files changed, 271 insertions(+), 171 deletions(-) create mode 100644 test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorRepoAdd_Test.cs diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Console/ConsoleServiceMain.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Console/ConsoleServiceMain.cs index a11ba8b..390359b 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Console/ConsoleServiceMain.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Console/ConsoleServiceMain.cs @@ -31,7 +31,7 @@ internal async Task InitAndLoadDbDefinitionsAsync() { AnsiConsole.Clear(); //TMP CODING - //await _settings.LoadFromFile(@"c:\temp\config.json"); + await _settings.LoadFromFile(@"c:\temp\config.json"); await AnsiConsole.Status() .StartAsync( diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorForOperations.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorForOperations.cs index 92ef307..714a3fa 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorForOperations.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorForOperations.cs @@ -29,21 +29,22 @@ protected string GetBaseSqlForSelect(string tableIdentifier = "") } //Can maybe be used for BULK - protected string GetBaseSqlForInsert() + protected string WriteBaseSqlForInsert() { if (ColumnForInsertOperations == null || !ColumnForInsertOperations.Any()) throw new ArgumentException($"No column available for insert for this table{Table.Name}, genererator crash"); return - $$""" - {{tab}}{{tab}}{{tab}}var sql = @" + $$"""" + {{tab}}{{tab}}{{tab}}var sql = + {{tab}}{{tab}}{{tab}}""" {{tab}}{{tab}}{{tab}}INSERT INTO {{ColAndTableIdentifier}}{{Table.Name}}{{ColAndTableIdentifier}} {{tab}}{{tab}}{{tab}}( {{tab}}{{tab}}{{tab}}{{tab}}{{@GetColumnListStringForInsert()}} {{tab}}{{tab}}{{tab}}) {{tab}}{{tab}}{{tab}}VALUES {{tab}}{{tab}}{{tab}}( - """; + """"; } protected virtual string GetBaseSqlForDelete() @@ -55,22 +56,21 @@ protected virtual string GetBaseSqlForDelete() """; } - protected virtual string GetValuesToInsert() + protected virtual string WriteValuesToInsert() { - var output = new StringBuilder(); - var cols = ColumnForInsertOperations!.Where(c => !c.IsAutoIncrement); var values = String.Join(Environment.NewLine + $"{tab}{tab}{tab}{tab},", cols.OrderBy(c => c.Position).Select(col => { - return $@"@{col.Name}"; + return $"""@{col.Name}"""; })); return - $""" + $"""" {tab}{tab}{tab}{tab}{values} - {tab}{tab}{tab})"; - """; + {tab}{tab}{tab}) + {tab}{tab}{tab}"""; + """"; } protected string GetBaseSqlForUpdate() @@ -198,7 +198,7 @@ protected virtual string GetCreateDataTableForPkMySql(string opCode) $$""" {{tab}}{{tab}}{{tab}}var table = new DataTable(); {{String.Join(Environment.NewLine, colAdd)}} - {{tab}}{{tab}}{{tab}}bulkCopy.DestinationTableName = "tmp_bulk{{opCode}}_{{Table.Name}}" + {{tab}}{{tab}}{{tab}}bulkCopy.DestinationTableName = "tmp_bulk{{opCode}}_{{Table.Name}}"; {{tab}}{{tab}}{{tab}}bulkCopy.BulkCopyTimeout = 600; {{tab}}{{tab}}{{tab}}foreach(var identity in listOf{{string.Join("And", PkColumns.Select(c => _stringTransform.ApplyConfigTransformClass(c.Name)))}}) @@ -239,8 +239,8 @@ protected virtual string GetCreateDbTmpTableForPksMySql(string opCode) """; } - protected abstract string GetMethodDef(); - protected abstract string GetDapperCall(); - protected abstract string GetReturnObj(); + protected abstract string WriteMethodDef(); + protected abstract string WriteDapperCall(); + protected abstract string WriteReturnObj(); } } diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoAdd.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoAdd.cs index c303059..ac114a0 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoAdd.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoAdd.cs @@ -21,46 +21,36 @@ public GeneratorRepoAdd(SettingsGlobal settingsGlobal } public override string Generate() { - if (TableSettings.AddGenerator) - { - var output = new StringBuilder(); - output.Append(GetMethodDef()); - output.Append(Environment.NewLine); - output.Append(GetDapperDynaParams()); - output.Append(Environment.NewLine); - output.Append(Environment.NewLine); - output.Append(@GetBaseSqlForInsert()); - output.Append(@GetValuesToInsert()); - output.Append(Environment.NewLine); - output.Append(Environment.NewLine); - output.Append(GetDapperCall()); - output.Append(Environment.NewLine); - output.Append(Environment.NewLine); - output.Append(GetReturnObj()); - output.Append($"{tab}{tab}}}"); - output.Append(Environment.NewLine); + return TableSettings.AddGenerator + ? $$""" + {{WriteMethodDef()}} + {{WriteDapperDynaParams()}} - return output.ToString(); - } + {{WriteBaseSqlForInsert()}} + {{WriteValuesToInsert()}} + + {{WriteDapperCall()}} + {{WriteReturnObj()}} + {{tab}}{{tab}}} - return string.Empty; + """ + : string.Empty; } - protected override string GetMethodDef() + protected override string WriteMethodDef() { - if (PkColumns.Count() == 1 && PkColumns.Where(c => c.IsAutoIncrement).Any()) - return $"{tab}{tab}public {(IsBase ? "virtual" : "override")} async Task<{GetPkMemberTypes()}> AddAsync({ClassName} " + - $"{_stringTransform.ApplyConfigTransformMember(ClassName)})" + - @$" -{tab}{tab}{{"; - else - return $"{tab}{tab}public {(IsBase ? "virtual" : "override")} async Task AddAsync({ClassName} " + - $"{_stringTransform.ApplyConfigTransformMember(ClassName)})" + - @$" -{tab}{tab}{{"; + return PkColumns.Count() == 1 && PkColumns.Where(c => c.IsAutoIncrement).Any() + ? $$""" + {{tab}}{{tab}}public {{(IsBase ? "virtual" : "override")}} async Task<{{GetPkMemberTypes()}}> AddAsync({{ClassName}} {{_stringTransform.ApplyConfigTransformMember(ClassName)}}) + {{tab}}{{tab}}{ + """ + : $$""" + {{tab}}{{tab}}public {{(IsBase ? "virtual" : "override")}} async Task AddAsync({{ClassName}} {{_stringTransform.ApplyConfigTransformMember(ClassName)}}) + {{tab}}{{tab}}{ + """; } - protected override string GetDapperCall() + protected override string WriteDapperCall() { if (PkColumns.Count() == 1 && PkColumns.Where(c => c.IsAutoIncrement).Any()) return $"{tab}{tab}{tab}var identity = " + @@ -73,12 +63,8 @@ protected override string GetDapperCall() } - protected virtual string GetDapperDynaParams() + protected virtual string WriteDapperDynaParams() { - var output = new StringBuilder(); - output.Append($"{tab}{tab}{tab}var p = new DynamicParameters();"); - output.Append(Environment.NewLine); - var cols = ColumnForInsertOperations!.Where(c => !c.IsAutoIncrement); var spParams = String.Join(Environment.NewLine, cols.OrderBy(c => c.Position).Select(col => @@ -86,16 +72,19 @@ protected virtual string GetDapperDynaParams() return $@"{tab}{tab}{tab}p.Add(""@{col.Name}"", {_stringTransform.ApplyConfigTransformMember(ClassName)}.{_stringTransform.PascalCase(col.Name)});"; })); - output.Append(spParams); - return output.ToString(); + return + $""" + {tab}{tab}{tab}var p = new DynamicParameters(); + {spParams} + """; } - protected override string GetReturnObj() + protected override string WriteReturnObj() { //The base implementation is very minimal (no real return from the DB, need to be override by dbprovider specific) if (PkColumns.Count() == 1 && PkColumns.Where(c => c.IsAutoIncrement).Any()) { - return $"{tab}{tab}{tab}return identity;" + Environment.NewLine; + return $"{tab}{tab}{tab}return identity;"; } else { diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoAddBulk.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoAddBulk.cs index 211f642..3217112 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoAddBulk.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoAddBulk.cs @@ -1,6 +1,10 @@ using Dapper_Layers_Generator.Core.Converters; using Dapper_Layers_Generator.Core.Settings; +using System; +using System.Collections.Generic; +using System.Linq; using System.Text; +using System.Threading.Tasks; namespace Dapper_Layers_Generator.Core.Generators { @@ -25,7 +29,7 @@ public override string Generate() if (TableSettings.AddBulkGenerator) { var output = new StringBuilder(); - output.Append(GetMethodDef()); + output.Append(WriteMethodDef()); if (!IsBase) { //Will se if we can use some part of code for multi db providers for the moment the implementation is in MySql only child class @@ -37,7 +41,7 @@ public override string Generate() return string.Empty; } - protected override string GetMethodDef() + protected override string WriteMethodDef() { return $"{tab}{tab}//Please use this bulk by batch depending on the mem available 500 / 1000 / 1500 rows" + Environment.NewLine + $"{tab}{tab}public {(IsBase ? "abstract" : "override async")} Task AddBulkAsync(IEnumerable<{ClassName}> " + @@ -46,13 +50,13 @@ protected override string GetMethodDef() } - protected override string GetDapperCall() + protected override string WriteDapperCall() { return string.Empty; } - protected override string GetReturnObj() + protected override string WriteReturnObj() { return string.Empty; } diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoAddMulti.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoAddMulti.cs index 68548e4..75970ff 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoAddMulti.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoAddMulti.cs @@ -1,6 +1,10 @@ using Dapper_Layers_Generator.Core.Converters; using Dapper_Layers_Generator.Core.Settings; +using System; +using System.Collections.Generic; +using System.Linq; using System.Text; +using System.Threading.Tasks; namespace Dapper_Layers_Generator.Core.Generators { @@ -26,18 +30,18 @@ public override string Generate() if (TableSettings.AddMultiGenerator) { var output = new StringBuilder(); - output.Append(GetMethodDef()); + output.Append(WriteMethodDef()); output.Append(Environment.NewLine); output.Append(GetOpenTransactionAndLoopBegin()); output.Append(Environment.NewLine); output.Append(GetDapperDynaParams()); output.Append(Environment.NewLine); output.Append(Environment.NewLine); - output.Append(@GetBaseSqlForInsert().Replace($"{tab}{tab}{tab}", $"{tab}{tab}{tab}{tab}")); - output.Append($"{tab}{tab}{tab}{tab}{tab}" + @GetValuesToInsert().Replace($"{tab}{tab}{tab}{tab}",$"{tab}{tab}{tab}{tab}{tab}")); + output.Append(WriteBaseSqlForInsert().Replace($"{tab}{tab}{tab}", $"{tab}{tab}{tab}{tab}")); + output.Append($"{tab}{tab}{tab}{tab}{tab}" + WriteValuesToInsert().Replace($"{tab}{tab}{tab}{tab}",$"{tab}{tab}{tab}{tab}{tab}")); output.Append(Environment.NewLine); output.Append(Environment.NewLine); - output.Append(GetDapperCall()); + output.Append(WriteDapperCall()); output.Append(Environment.NewLine); output.Append(Environment.NewLine); output.Append(GetCloseTransaction()); @@ -51,7 +55,7 @@ public override string Generate() return string.Empty; } - protected override string GetMethodDef() + protected override string WriteMethodDef() { return $"{tab}{tab}public {(IsBase ? "virtual" : "override")} async Task AddAsync(IEnumerable<{ClassName}> " + $"{_stringTransform.PluralizeToLower(ClassName)})" + @@ -59,7 +63,7 @@ protected override string GetMethodDef() {tab}{tab}{{"; } - protected override string GetDapperCall() + protected override string WriteDapperCall() { return $"{tab}{tab}{tab}{tab}_ = " + $"await _{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.Connection." + @@ -98,7 +102,7 @@ protected virtual string GetDapperDynaParams() } - protected override string GetReturnObj() + protected override string WriteReturnObj() { return string.Empty; } diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoDelete.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoDelete.cs index 3d2f67a..62440bc 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoDelete.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoDelete.cs @@ -1,6 +1,10 @@ using Dapper_Layers_Generator.Core.Converters; using Dapper_Layers_Generator.Core.Settings; +using System; +using System.Collections.Generic; +using System.Linq; using System.Text; +using System.Threading.Tasks; namespace Dapper_Layers_Generator.Core.Generators { @@ -28,7 +32,7 @@ public override string Generate() throw new ArgumentException($"You cannot run the Get by Pk Generator for table {Table.Name}, no pk defined"); var output = new StringBuilder(); - output.Append(GetMethodDef()); + output.Append(WriteMethodDef()); output.Append(Environment.NewLine); output.Append(@GetDapperDynaParamsForPk()); output.Append(Environment.NewLine); @@ -38,7 +42,7 @@ public override string Generate() output.Append(GetSqlWhereClauseForPk()); output.Append(Environment.NewLine); output.Append(Environment.NewLine); - output.Append(GetDapperCall()); + output.Append(WriteDapperCall()); output.Append(Environment.NewLine); output.Append($"{tab}{tab}}}"); output.Append(Environment.NewLine); @@ -49,20 +53,20 @@ public override string Generate() return string.Empty; } - protected override string GetMethodDef() + protected override string WriteMethodDef() { return $"{tab}{tab}public {(IsBase ? "virtual" : "override")} async Task DeleteAsync({GetPkMemberNamesStringAndType()})" + @$" {tab}{tab}{{"; } - protected override string GetDapperCall() + protected override string WriteDapperCall() { return $"{tab}{tab}{tab}_ = await _{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.Connection." + $"ExecuteAsync(sql,p,transaction:_{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.Transaction);"; } - protected override string GetReturnObj() + protected override string WriteReturnObj() { return string.Empty; } diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoDeleteBulk.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoDeleteBulk.cs index 56ca1e7..9bdce58 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoDeleteBulk.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoDeleteBulk.cs @@ -1,6 +1,10 @@ using Dapper_Layers_Generator.Core.Converters; using Dapper_Layers_Generator.Core.Settings; +using System; +using System.Collections.Generic; +using System.Linq; using System.Text; +using System.Threading.Tasks; namespace Dapper_Layers_Generator.Core.Generators { @@ -25,7 +29,7 @@ public override string Generate() if (TableSettings.DeleteBulkGenerator && !string.IsNullOrEmpty(GetPkMemberNamesString())) { var output = new StringBuilder(); - output.Append(GetMethodDef()); + output.Append(WriteMethodDef()); if (!IsBase) { //Will se if we can use some part of code for multi db providers for the moment the implementation is in MySql only child class @@ -37,7 +41,7 @@ public override string Generate() return string.Empty; } - protected override string GetMethodDef() + protected override string WriteMethodDef() { return $"{tab}{tab}//Please use this bulk by batch depending on the mem available 1000 / 1500 rows" + Environment.NewLine + $"{tab}{tab}public {(IsBase ? "abstract" : "override async")} Task DeleteBulkAsync({GetPkMemberNamesStringAndTypeList()})" + @@ -46,13 +50,13 @@ protected override string GetMethodDef() } - protected override string GetDapperCall() + protected override string WriteDapperCall() { return string.Empty; } - protected override string GetReturnObj() + protected override string WriteReturnObj() { return string.Empty; } diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoDeleteByPkList.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoDeleteByPkList.cs index e277f76..b9150bf 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoDeleteByPkList.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoDeleteByPkList.cs @@ -1,6 +1,10 @@ using Dapper_Layers_Generator.Core.Converters; using Dapper_Layers_Generator.Core.Settings; +using System; +using System.Collections.Generic; +using System.Linq; using System.Text; +using System.Threading.Tasks; namespace Dapper_Layers_Generator.Core.Generators { @@ -27,7 +31,7 @@ public override string Generate() throw new ArgumentException($"You cannot run the Delete by PkList Generator for table {Table.Name}, no pk defined"); var output = new StringBuilder(); - output.Append(GetMethodDef()); + output.Append(WriteMethodDef()); if (PkColumns.Count() == 1 || !IsBase) { @@ -40,8 +44,8 @@ public override string Generate() output.Append(GetSqlPkListWhereClause()); output.Append(Environment.NewLine); output.Append(Environment.NewLine); - output.Append(GetDapperCall()); - output.Append(GetReturnObj()); + output.Append(WriteDapperCall()); + output.Append(WriteReturnObj()); output.Append(Environment.NewLine); output.Append($"{tab}{tab}}}"); } @@ -52,7 +56,7 @@ public override string Generate() return string.Empty; } - protected override string GetMethodDef() + protected override string WriteMethodDef() { return PkColumns.Count() > 1 ? $"{tab}{tab}public {(IsBase ? "abstract" : "override async")} " + @@ -63,13 +67,13 @@ protected override string GetMethodDef() {tab}{tab}{{"; } - protected override string GetDapperCall() + protected override string WriteDapperCall() { return $"{tab}{tab}{tab}_ = await _{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.Connection." + $"ExecuteAsync(sql,p,transaction:_{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.Transaction);"; } - protected override string GetReturnObj() + protected override string WriteReturnObj() { return string.Empty; } diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoGetAll.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoGetAll.cs index 141af29..5db2b2d 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoGetAll.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoGetAll.cs @@ -1,5 +1,6 @@ using Dapper_Layers_Generator.Core.Converters; using Dapper_Layers_Generator.Core.Settings; +using Dapper_Layers_Generator.Data.POCO; using System.Text; namespace Dapper_Layers_Generator.Core.Generators @@ -24,16 +25,16 @@ public override string Generate() if (TableSettings.GetAllGenerator) { var output = new StringBuilder(); - output.Append(GetMethodDef()); + output.Append(WriteMethodDef()); output.Append(Environment.NewLine); output.Append(@GetBaseSqlForSelect()+ @""";"); output.Append(Environment.NewLine); output.Append(Environment.NewLine); - output.Append(GetDapperCall()); + output.Append(WriteDapperCall()); output.Append(Environment.NewLine); output.Append(Environment.NewLine); - output.Append(GetReturnObj()); + output.Append(WriteReturnObj()); output.Append(Environment.NewLine); output.Append($"{tab}{tab}}}"); output.Append(Environment.NewLine); @@ -44,7 +45,7 @@ public override string Generate() return string.Empty; } - protected override string GetMethodDef() + protected override string WriteMethodDef() { return $"{tab}{tab}public {(IsBase?"virtual":"override")} async Task> GetAllAsync()" + @$" @@ -52,14 +53,14 @@ protected override string GetMethodDef() } - protected override string GetDapperCall() + protected override string WriteDapperCall() { return $"{tab}{tab}{tab}var {_stringTransform.PluralizeToLower(ClassName)} = " + $"await _{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.Connection." + $"QueryAsync<{ClassName}>(sql,transaction:_{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.Transaction);"; } - protected override string GetReturnObj() + protected override string WriteReturnObj() { return $"{tab}{tab}{tab}return {_stringTransform.PluralizeToLower(ClassName)};"; } diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoGetByPk.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoGetByPk.cs index e7717b9..dd2be80 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoGetByPk.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoGetByPk.cs @@ -1,6 +1,10 @@ using Dapper_Layers_Generator.Core.Converters; using Dapper_Layers_Generator.Core.Settings; +using System; +using System.Collections.Generic; +using System.Linq; using System.Text; +using System.Threading.Tasks; namespace Dapper_Layers_Generator.Core.Generators { @@ -28,7 +32,7 @@ public override string Generate() throw new ArgumentException($"You cannot run the Get by Pk Generator for table {Table.Name}, no pk defined"); var output = new StringBuilder(); - output.Append(GetMethodDef()); + output.Append(WriteMethodDef()); output.Append(Environment.NewLine); output.Append(GetDapperDynaParamsForPk()); output.Append(Environment.NewLine); @@ -38,10 +42,10 @@ public override string Generate() output.Append(GetSqlWhereClauseForPk()); output.Append(Environment.NewLine); output.Append(Environment.NewLine); - output.Append(GetDapperCall()); + output.Append(WriteDapperCall()); output.Append(Environment.NewLine); output.Append(Environment.NewLine); - output.Append(GetReturnObj()); + output.Append(WriteReturnObj()); output.Append(Environment.NewLine); output.Append($"{tab}{tab}}}"); output.Append(Environment.NewLine); @@ -52,21 +56,21 @@ public override string Generate() return string.Empty; } - protected override string GetMethodDef() + protected override string WriteMethodDef() { return $"{tab}{tab}public {(IsBase ? "virtual" : "override")} async Task<{ClassName}?> GetBy{GetPkMemberNamesString()}Async({GetPkMemberNamesStringAndType()})" + @$" {tab}{tab}{{"; } - protected override string GetDapperCall() + protected override string WriteDapperCall() { return $"{tab}{tab}{tab}var {ClassName.ToLower()} = " + $"await _{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.Connection." + $"QuerySingleOrDefaultAsync<{ClassName}>(sql,p,transaction:_{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.Transaction);"; } - protected override string GetReturnObj() + protected override string WriteReturnObj() { return $"{tab}{tab}{tab}return {ClassName.ToLower()};"; } diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoGetByPkBulk.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoGetByPkBulk.cs index b5d4c59..4445c23 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoGetByPkBulk.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoGetByPkBulk.cs @@ -1,6 +1,10 @@ using Dapper_Layers_Generator.Core.Converters; using Dapper_Layers_Generator.Core.Settings; +using System; +using System.Collections.Generic; +using System.Linq; using System.Text; +using System.Threading.Tasks; namespace Dapper_Layers_Generator.Core.Generators { @@ -25,7 +29,7 @@ public override string Generate() if (TableSettings.GetByPkBulkGenerator && !string.IsNullOrEmpty(GetPkMemberNamesString())) { var output = new StringBuilder(); - output.Append(GetMethodDef()); + output.Append(WriteMethodDef()); if (!IsBase) { //Will se if we can use some part of code for multi db providers for the moment the implementation is in MySql only child class @@ -37,7 +41,7 @@ public override string Generate() return string.Empty; } - protected override string GetMethodDef() + protected override string WriteMethodDef() { return $"{tab}{tab}//Please use this bulk by batch depending on the mem available 1000 / 1500 rows" + Environment.NewLine + $"{tab}{tab}public {(IsBase ? "abstract" : "override async")} Task> GetBy{GetPkMemberNamesString()}BulkAsync({GetPkMemberNamesStringAndTypeList()})" + @@ -46,13 +50,13 @@ protected override string GetMethodDef() } - protected override string GetDapperCall() + protected override string WriteDapperCall() { return string.Empty; } - protected override string GetReturnObj() + protected override string WriteReturnObj() { return string.Empty; } diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoGetByPkList.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoGetByPkList.cs index e3f0150..43ddca9 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoGetByPkList.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoGetByPkList.cs @@ -1,6 +1,10 @@ using Dapper_Layers_Generator.Core.Converters; using Dapper_Layers_Generator.Core.Settings; +using System; +using System.Collections.Generic; +using System.Linq; using System.Text; +using System.Threading.Tasks; namespace Dapper_Layers_Generator.Core.Generators { @@ -23,7 +27,7 @@ public override string Generate() if (TableSettings.GetByPkListGenerator && !string.IsNullOrEmpty(GetPkMemberNamesString())) { var output = new StringBuilder(); - output.Append(GetMethodDef()); + output.Append(WriteMethodDef()); if (PkColumns.Count() == 1 || !IsBase) { @@ -36,10 +40,10 @@ public override string Generate() output.Append(GetSqlPkListWhereClause()); output.Append(Environment.NewLine); output.Append(Environment.NewLine); - output.Append(GetDapperCall()); + output.Append(WriteDapperCall()); output.Append(Environment.NewLine); output.Append(Environment.NewLine); - output.Append(GetReturnObj()); + output.Append(WriteReturnObj()); output.Append(Environment.NewLine); output.Append($"{tab}{tab}}}"); } @@ -51,7 +55,7 @@ public override string Generate() return string.Empty; } - protected override string GetMethodDef() + protected override string WriteMethodDef() { return PkColumns.Count() > 1 ? $"{tab}{tab}public {(IsBase ? "abstract" : "override async")} " + @@ -62,14 +66,14 @@ protected override string GetMethodDef() {tab}{tab}{{"; } - protected override string GetDapperCall() + protected override string WriteDapperCall() { return $"{tab}{tab}{tab}var {_stringTransform.PluralizeToLower(ClassName)} = " + $"await _{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.Connection." + $"QueryAsync<{ClassName}>(sql,p,transaction:_{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.Transaction);"; } - protected override string GetReturnObj() + protected override string WriteReturnObj() { return $"{tab}{tab}{tab}return {_stringTransform.PluralizeToLower(ClassName)};"; } diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoGetByUk.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoGetByUk.cs index 7c97c26..b4f8387 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoGetByUk.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoGetByUk.cs @@ -1,7 +1,12 @@ using Dapper_Layers_Generator.Core.Converters; using Dapper_Layers_Generator.Core.Settings; using Dapper_Layers_Generator.Data.POCO; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; using System.Text; +using System.Threading.Tasks; namespace Dapper_Layers_Generator.Core.Generators { @@ -31,7 +36,7 @@ public override string Generate() foreach (var index in ColumnNamesByIndexNameDic) { _currentIndex = index; - output.Append(GetMethodDef()); + output.Append(WriteMethodDef()); output.Append(Environment.NewLine); output.Append(GetDapperDynaParams()); output.Append(Environment.NewLine); @@ -41,10 +46,10 @@ public override string Generate() output.Append(GetSqlWhereClause()); output.Append(Environment.NewLine); output.Append(Environment.NewLine); - output.Append(GetDapperCall()); + output.Append(WriteDapperCall()); output.Append(Environment.NewLine); output.Append(Environment.NewLine); - output.Append(GetReturnObj()); + output.Append(WriteReturnObj()); output.Append(Environment.NewLine); output.Append($"{tab}{tab}}}"); output.Append(Environment.NewLine); @@ -56,14 +61,14 @@ public override string Generate() return string.Empty; } - protected override string GetMethodDef() + protected override string WriteMethodDef() { return $"{tab}{tab}public {(IsBase ? "virtual" : "override")} async Task<{ClassName}?> GetBy{GetUkMemberNamesString(_currentIndex.Key)}Async({GetUkMemberNamesStringAndType(_currentIndex.Key)})" + @$" {tab}{tab}{{"; } - protected override string GetDapperCall() + protected override string WriteDapperCall() { return $"{tab}{tab}{tab}var {ClassName.ToLower()} = " + $"await _{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.Connection." + @@ -101,7 +106,7 @@ protected virtual string GetDapperDynaParams() return output.ToString(); } - protected override string GetReturnObj() + protected override string WriteReturnObj() { return $"{tab}{tab}{tab}return {ClassName.ToLower()};"; } diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoUpdate.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoUpdate.cs index a235e03..1701b3b 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoUpdate.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoUpdate.cs @@ -1,6 +1,10 @@ using Dapper_Layers_Generator.Core.Converters; using Dapper_Layers_Generator.Core.Settings; +using System; +using System.Collections.Generic; +using System.Linq; using System.Text; +using System.Threading.Tasks; namespace Dapper_Layers_Generator.Core.Generators { @@ -24,7 +28,7 @@ public override string Generate() if (TableSettings.UpdateGenerator && ColumnForUpdateOperations!.Where(c => !c.IsAutoIncrement && !c.IsPrimary).Any()) { var output = new StringBuilder(); - output.Append(GetMethodDef()); + output.Append(WriteMethodDef()); output.Append(Environment.NewLine); output.Append(GetDapperDynaParams()); output.Append(Environment.NewLine); @@ -33,7 +37,7 @@ public override string Generate() output.Append(GetSqlWhereClauseForPk()); output.Append(Environment.NewLine); output.Append(Environment.NewLine); - output.Append(GetDapperCall()); + output.Append(WriteDapperCall()); output.Append(Environment.NewLine); output.Append($"{tab}{tab}}}"); output.Append(Environment.NewLine); @@ -44,7 +48,7 @@ public override string Generate() return string.Empty; } - protected override string GetMethodDef() + protected override string WriteMethodDef() { return $"{tab}{tab}public {(IsBase ? "virtual" : "override")} async Task UpdateAsync({ClassName} " + $"{_stringTransform.ApplyConfigTransformMember(ClassName)})" + @@ -52,7 +56,7 @@ protected override string GetMethodDef() {tab}{tab}{{"; } - protected override string GetDapperCall() + protected override string WriteDapperCall() { return $"{tab}{tab}{tab}_ = await _{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.Connection." + $"ExecuteAsync(sql,p,transaction:_{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.Transaction);"; @@ -75,7 +79,7 @@ protected virtual string GetDapperDynaParams() return output.ToString(); } - protected override string GetReturnObj() + protected override string WriteReturnObj() { return $"{tab}{tab}{tab}return {ClassName.ToLower()};"; } diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoUpdateBulk.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoUpdateBulk.cs index c211943..87e7dc9 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoUpdateBulk.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoUpdateBulk.cs @@ -1,6 +1,10 @@ using Dapper_Layers_Generator.Core.Converters; using Dapper_Layers_Generator.Core.Settings; +using System; +using System.Collections.Generic; +using System.Linq; using System.Text; +using System.Threading.Tasks; namespace Dapper_Layers_Generator.Core.Generators { @@ -26,7 +30,7 @@ public override string Generate() if (TableSettings.UpdateBulkGenerator && ColumnForUpdateOperations!.Where(c => !c.IsAutoIncrement && !c.IsPrimary).Any()) { var output = new StringBuilder(); - output.Append(GetMethodDef()); + output.Append(WriteMethodDef()); if (!IsBase) { //Will se if we can use some part of code for multi db providers for the moment the implementation is in MySql only child class @@ -38,7 +42,7 @@ public override string Generate() return string.Empty; } - protected override string GetMethodDef() + protected override string WriteMethodDef() { return $"{tab}{tab}//Please use this bulk by batch depending on the mem available 500 / 1000 / 1500 rows" + Environment.NewLine + $"{tab}{tab}public {(IsBase ? "abstract" : "override async")} Task UpdateBulkAsync(IEnumerable<{ClassName}> " + @@ -47,13 +51,13 @@ protected override string GetMethodDef() } - protected override string GetDapperCall() + protected override string WriteDapperCall() { return string.Empty; } - protected override string GetReturnObj() + protected override string WriteReturnObj() { return string.Empty; } diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoUpdateMulti.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoUpdateMulti.cs index 6bfb34c..d4500f3 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoUpdateMulti.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoUpdateMulti.cs @@ -1,6 +1,10 @@ using Dapper_Layers_Generator.Core.Converters; using Dapper_Layers_Generator.Core.Settings; +using System; +using System.Collections.Generic; +using System.Linq; using System.Text; +using System.Threading.Tasks; namespace Dapper_Layers_Generator.Core.Generators { @@ -25,7 +29,7 @@ public override string Generate() if (TableSettings.UpdateGenerator && ColumnForUpdateOperations!.Where(c => !c.IsAutoIncrement && !c.IsPrimary).Any()) { var output = new StringBuilder(); - output.Append(GetMethodDef()); + output.Append(WriteMethodDef()); output.Append(Environment.NewLine); output.Append(GetOpenTransactionAndLoopBegin()); output.Append(Environment.NewLine); @@ -36,7 +40,7 @@ public override string Generate() output.Append(GetSqlWhereClauseForPk().Replace($"{tab}{tab}{tab}", $"{tab}{tab}{tab}{tab}")); output.Append(Environment.NewLine); output.Append(Environment.NewLine); - output.Append(GetDapperCall()); + output.Append(WriteDapperCall()); output.Append(Environment.NewLine); output.Append(Environment.NewLine); output.Append(GetCloseTransaction()); @@ -50,7 +54,7 @@ public override string Generate() return string.Empty; } - protected override string GetMethodDef() + protected override string WriteMethodDef() { return $"{tab}{tab}public {(IsBase ? "virtual" : "override")} async Task UpdateAsync(IEnumerable<{ClassName}> " + $"{_stringTransform.PluralizeToLower(ClassName)})" + @@ -58,7 +62,7 @@ protected override string GetMethodDef() {tab}{tab}{{"; } - protected override string GetDapperCall() + protected override string WriteDapperCall() { return $"{tab}{tab}{tab}{tab}_ = " + $"await _{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.Connection." + @@ -95,7 +99,7 @@ protected virtual string GetDapperDynaParams() return output.ToString(); } - protected override string GetReturnObj() + protected override string WriteReturnObj() { return string.Empty; } diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoAdd.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoAdd.cs index 82b79a5..404784e 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoAdd.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoAdd.cs @@ -20,35 +20,37 @@ public MySqlGeneratorRepoAdd(SettingsGlobal settingsGlobal IsBase = false; } - protected override string GetValuesToInsert() + protected override string WriteValuesToInsert() { - var output = new StringBuilder(); var cols = ColumnForInsertOperations!.Where(c => !c.IsAutoIncrement); - var values = String.Join(Environment.NewLine + $"{tab}{tab}{tab}{tab},", cols.OrderBy(c => c.Position).Select(col => { return $@"@{col.Name}"; })); - - output.Append(values); - output.Append(Environment.NewLine); + string identityClause = string.Empty; if(PkColumns.Count() == 1 && PkColumns.Where(c=>c.IsAutoIncrement).Any()) { - //Add return identity clause - output.Append($@"{tab}{tab}{tab});"); - output.Append(Environment.NewLine); - output.Append($"{tab}{tab}{tab}SELECT LAST_INSERT_ID();"); - output.Append($@""";"); + identityClause = + $"""" + {tab}{tab}{tab}); + {tab}{tab}{tab}SELECT LAST_INSERT_ID(); + {tab}{tab}{tab}"""; + """"; } else - { - output.Append($@"{tab}{tab}{tab})"";"); - } - - return output.ToString(); + identityClause = + $"""" + {tab}{tab}{tab}) + {tab}{tab}{tab}"""; + """"; + return + $""" + {tab}{tab}{tab}{tab}{values} + {identityClause} + """; } } } diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoAddBulk.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoAddBulk.cs index acfdd40..820591b 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoAddBulk.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoAddBulk.cs @@ -1,7 +1,12 @@ using Dapper_Layers_Generator.Core.Converters; using Dapper_Layers_Generator.Core.Settings; using Microsoft.Extensions.Primitives; +using MySqlX.XDevAPI.Relational; +using System; +using System.Collections.Generic; +using System.Linq; using System.Text; +using System.Threading.Tasks; namespace Dapper_Layers_Generator.Core.Generators.MySql { @@ -26,7 +31,7 @@ public override string Generate() if (TableSettings.AddBulkGenerator) { var output = new StringBuilder(); - output.Append(GetMethodDef()); + output.Append(WriteMethodDef()); output.Append(Environment.NewLine); output.Append(GetOpenTransAndInitBulkMySql()); output.Append(Environment.NewLine); @@ -34,7 +39,7 @@ public override string Generate() output.Append(@GetCreateDataTable()); output.Append(Environment.NewLine); output.Append(Environment.NewLine); - output.Append(GetDapperCall()); + output.Append(WriteDapperCall()); output.Append(Environment.NewLine); output.Append(Environment.NewLine); output.Append(GetCloseTransaction()); @@ -110,7 +115,7 @@ protected virtual string GetCreateDataTable() return output.ToString(); } - protected override string GetDapperCall() + protected override string WriteDapperCall() { return $"{tab}{tab}{tab}await bulkCopy.WriteToServerAsync(table);"; } diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoDeleteBulk.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoDeleteBulk.cs index 914fbad..1caea37 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoDeleteBulk.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoDeleteBulk.cs @@ -1,7 +1,11 @@ using Dapper_Layers_Generator.Core.Converters; using Dapper_Layers_Generator.Core.Settings; using Microsoft.Extensions.Primitives; +using System; +using System.Collections.Generic; +using System.Linq; using System.Text; +using System.Threading.Tasks; namespace Dapper_Layers_Generator.Core.Generators.MySql { @@ -26,7 +30,7 @@ public override string Generate() if (TableSettings.DeleteBulkGenerator && !string.IsNullOrEmpty(GetPkMemberNamesString())) { var output = new StringBuilder(); - output.Append(GetMethodDef()); + output.Append(WriteMethodDef()); output.Append(Environment.NewLine); output.Append(GetOpenTransAndInitBulkMySql()); output.Append(Environment.NewLine); @@ -43,7 +47,7 @@ public override string Generate() output.Append(GetDeleteFromTmpTable()); output.Append(Environment.NewLine); output.Append(Environment.NewLine); - output.Append(@GetDapperCall()); + output.Append(WriteDapperCall()); output.Append(Environment.NewLine); output.Append(Environment.NewLine); output.Append(GetCloseTransaction()); @@ -59,7 +63,7 @@ public override string Generate() } - protected override string GetDapperCall() + protected override string WriteDapperCall() { var output = new StringBuilder($"{tab}{tab}{tab}_ = await _{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.Connection." + $"ExecuteAsync(sql,transaction:_{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.Transaction);"); diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoDeleteByPkList.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoDeleteByPkList.cs index 282582a..04ec6d9 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoDeleteByPkList.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoDeleteByPkList.cs @@ -1,6 +1,10 @@ using Dapper_Layers_Generator.Core.Converters; using Dapper_Layers_Generator.Core.Settings; +using System; +using System.Collections.Generic; +using System.Linq; using System.Text; +using System.Threading.Tasks; namespace Dapper_Layers_Generator.Core.Generators.MySql { @@ -31,12 +35,12 @@ public override string Generate() throw new ArgumentException($"You cannot run the Delete by PkList Generator for table {Table.Name}, no pk defined"); var output = new StringBuilder(); - output.Append(GetMethodDef()); + output.Append(WriteMethodDef()); output.Append(Environment.NewLine); output.Append(GetDapperDynaParamsForPkList()); output.Append(Environment.NewLine); output.Append(Environment.NewLine); - output.Append(GetReturnObj()); + output.Append(WriteReturnObj()); output.Append(Environment.NewLine); output.Append($"{tab}{tab}}}"); output.Append(Environment.NewLine); @@ -61,16 +65,16 @@ protected override string GetBaseSqlForDelete() return PkColumns.Count() > 1 ? string.Empty : base.GetBaseSqlForDelete(); } - protected override string GetDapperCall() + protected override string WriteDapperCall() { - return PkColumns.Count() > 1 ? string.Empty : base.GetDapperCall(); + return PkColumns.Count() > 1 ? string.Empty : base.WriteDapperCall(); } - protected override string GetReturnObj() + protected override string WriteReturnObj() { return PkColumns.Count() > 1 ? $"{tab}{tab}{tab}await DeleteBulkAsync({GetPKMemberNamesStringList()});" - : base.GetReturnObj(); + : base.WriteReturnObj(); } } diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoGetByPkBulk.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoGetByPkBulk.cs index ee9aa8b..5b49feb 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoGetByPkBulk.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoGetByPkBulk.cs @@ -1,6 +1,10 @@ using Dapper_Layers_Generator.Core.Converters; using Dapper_Layers_Generator.Core.Settings; +using System; +using System.Collections.Generic; +using System.Linq; using System.Text; +using System.Threading.Tasks; namespace Dapper_Layers_Generator.Core.Generators.MySql { @@ -25,7 +29,7 @@ public override string Generate() if (TableSettings.DeleteBulkGenerator && !string.IsNullOrEmpty(GetPkMemberNamesString())) { var output = new StringBuilder(); - output.Append(GetMethodDef()); + output.Append(WriteMethodDef()); output.Append(Environment.NewLine); output.Append(GetOpenTransAndInitBulkMySql()); output.Append(Environment.NewLine); @@ -42,13 +46,13 @@ public override string Generate() output.Append(GetSelectFromTmpTable()); output.Append(Environment.NewLine); output.Append(Environment.NewLine); - output.Append(@GetDapperCall()); + output.Append(WriteDapperCall()); output.Append(Environment.NewLine); output.Append(Environment.NewLine); output.Append(GetCloseTransaction()); output.Append(Environment.NewLine); output.Append(Environment.NewLine); - output.Append(GetReturnObj()); + output.Append(WriteReturnObj()); output.Append(Environment.NewLine); output.Append($"{tab}{tab}}}"); output.Append(Environment.NewLine); @@ -60,7 +64,7 @@ public override string Generate() return string.Empty; } - protected override string GetDapperCall() + protected override string WriteDapperCall() { var output = new StringBuilder($"{tab}{tab}{tab}var {_stringTransform.PluralizeToLower(ClassName)} = await _{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.Connection." + $"QueryAsync<{ClassName}>(sql,transaction:_{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.Transaction);"); @@ -94,7 +98,7 @@ protected virtual string GetSelectFromTmpTable() } - protected override string GetReturnObj() + protected override string WriteReturnObj() { return $"{tab}{tab}{tab}return {_stringTransform.PluralizeToLower(ClassName)};"; } diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoGetByPkList.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoGetByPkList.cs index f465cc6..0965c08 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoGetByPkList.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoGetByPkList.cs @@ -1,6 +1,10 @@ using Dapper_Layers_Generator.Core.Converters; using Dapper_Layers_Generator.Core.Settings; +using System; +using System.Collections.Generic; +using System.Linq; using System.Text; +using System.Threading.Tasks; namespace Dapper_Layers_Generator.Core.Generators.MySql { @@ -31,12 +35,12 @@ public override string Generate() throw new ArgumentException($"You cannot run the Delete by PkList Generator for table {Table.Name}, no pk defined"); var output = new StringBuilder(); - output.Append(GetMethodDef()); + output.Append(WriteMethodDef()); output.Append(Environment.NewLine); output.Append(GetDapperDynaParamsForPkList()); output.Append(Environment.NewLine); output.Append(Environment.NewLine); - output.Append(GetReturnObj()); + output.Append(WriteReturnObj()); output.Append(Environment.NewLine); output.Append($"{tab}{tab}}}"); output.Append(Environment.NewLine); @@ -56,11 +60,11 @@ protected override string GetDapperDynaParamsForPkList() return PkColumns.Count() > 1 ? @$"{tab}{tab}{{/*Call bulk for composite pk*/" : base.GetDapperDynaParamsForPkList(); } - protected override string GetReturnObj() + protected override string WriteReturnObj() { return PkColumns.Count() > 1 ? $"{tab}{tab}{tab}return await GetBy{GetPkMemberNamesString()}BulkAsync({GetPKMemberNamesStringList()});" - : base.GetReturnObj(); + : base.WriteReturnObj(); } } diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoUpdateBulk.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoUpdateBulk.cs index 5e245fa..c1258d0 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoUpdateBulk.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoUpdateBulk.cs @@ -1,6 +1,10 @@ using Dapper_Layers_Generator.Core.Converters; using Dapper_Layers_Generator.Core.Settings; +using System; +using System.Collections.Generic; +using System.Linq; using System.Text; +using System.Threading.Tasks; namespace Dapper_Layers_Generator.Core.Generators.MySql { @@ -26,7 +30,7 @@ public override string Generate() if (TableSettings.UpdateBulkGenerator && ColumnForUpdateOperations!.Where(c => !c.IsAutoIncrement && !c.IsPrimary).Any()) { var output = new StringBuilder(); - output.Append(GetMethodDef()); + output.Append(WriteMethodDef()); output.Append(Environment.NewLine); output.Append(GetOpenTransAndInitBulkMySql()); output.Append(Environment.NewLine); @@ -43,7 +47,7 @@ public override string Generate() output.Append(@GetUpdateFromTmpTable()); output.Append(Environment.NewLine); output.Append(Environment.NewLine); - output.Append(@GetDapperCall()); + output.Append(WriteDapperCall()); output.Append(Environment.NewLine); output.Append(Environment.NewLine); output.Append(GetCloseTransaction()); @@ -133,7 +137,7 @@ protected virtual string GetCreateDbTmpTable() } - protected override string GetDapperCall() + protected override string WriteDapperCall() { var output = new StringBuilder($"{tab}{tab}{tab}_ = await _{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.Connection." + $"ExecuteAsync(sql,transaction:_{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.Transaction);"); diff --git a/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorContext_Tests.cs b/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorContext_Tests.cs index 179f11a..b27ec60 100644 --- a/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorContext_Tests.cs +++ b/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorContext_Tests.cs @@ -17,11 +17,6 @@ namespace Dapper_Layers_Generator.Core.Generators.MySql.Tests { public class MySqlGeneratorContext_Tests : GeneratorBaseTest { - public MySqlGeneratorContext_Tests() : base() - { - - } - [Fact()] public void GenerateStandard_Test() { diff --git a/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorRepoAdd_Test.cs b/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorRepoAdd_Test.cs new file mode 100644 index 0000000..e666e92 --- /dev/null +++ b/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorRepoAdd_Test.cs @@ -0,0 +1,39 @@ +using Dapper_Layers_Generator.Core.Converters; +using Dapper_Layers_Generator.Core.Converters.MySql; +using Dapper_Layers_Generator.Core.Generators.MySql; +using Dapper_Layers_Generator.Test.Config; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Dapper_Layers_Generator.Test.Generators.MySql +{ + public class MySqlGeneratorRepoAdd_Test : GeneratorBaseTest + { + //need to be reviewed if dataconverted will change between db provider + private MySqlDataTypeConverter _dataConverter; + private StringTransformationService _transformString; + + public MySqlGeneratorRepoAdd_Test() : base() + { + _dataConverter = new MySqlDataTypeConverter(); + _transformString = new StringTransformationService(_settings); + } + + [Fact()] + public void GenerateStandard_Test() + { + //Arrange + var generator = new MySqlGeneratorRepoAdd(_settings, _mockDbDefinitions.Object, _transformString, _dataConverter); + var expected = ResourceTool.Read("Dapper_Layers_Generator.Test/Results/Generators/MySql/MySqlGeneratorContext_ResultStandard.txt"); + + //Act + var result = generator.Generate(); + + //Assert + Assert.Equal(expected, result); + } + } +} From acfd25a928d3d43307cb85168b41be8dc8aa1191 Mon Sep 17 00:00:00 2001 From: Fabien Donnet Date: Fri, 2 Dec 2022 08:58:40 +0100 Subject: [PATCH 10/48] RepoAdd Generator (refactor) + standard test --- .../ConsoleServiceMain.cs | 2 +- .../Generators/GeneratorRepoAdd.cs | 9 ++-- .../Dapper-Layers-Generator.Test.csproj | 4 ++ .../Generators/GenertatorRepoAdd_Tests.cs | 41 +++++++++++++++++ .../MySql/MySqlGeneratorRepoAdd_Test.cs | 3 +- .../GeneratorRepoAdd_ResultStandard.txt | 44 ++++++++++++++++++ .../MySqlGeneratorRepoAdd_ResultStandard.txt | 45 +++++++++++++++++++ 7 files changed, 143 insertions(+), 5 deletions(-) create mode 100644 test/Dapper-Layers-Generator.Test/Generators/GenertatorRepoAdd_Tests.cs create mode 100644 test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoAdd_ResultStandard.txt create mode 100644 test/Dapper-Layers-Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoAdd_ResultStandard.txt diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Console/ConsoleServiceMain.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Console/ConsoleServiceMain.cs index 390359b..a11ba8b 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Console/ConsoleServiceMain.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Console/ConsoleServiceMain.cs @@ -31,7 +31,7 @@ internal async Task InitAndLoadDbDefinitionsAsync() { AnsiConsole.Clear(); //TMP CODING - await _settings.LoadFromFile(@"c:\temp\config.json"); + //await _settings.LoadFromFile(@"c:\temp\config.json"); await AnsiConsole.Status() .StartAsync( diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoAdd.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoAdd.cs index ac114a0..bca1da8 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoAdd.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoAdd.cs @@ -29,8 +29,7 @@ public override string Generate() {{WriteBaseSqlForInsert()}} {{WriteValuesToInsert()}} - {{WriteDapperCall()}} - {{WriteReturnObj()}} + {{WriteDapperCall()}}{{WriteReturnObj()}} {{tab}}{{tab}}} """ @@ -84,7 +83,11 @@ protected override string WriteReturnObj() //The base implementation is very minimal (no real return from the DB, need to be override by dbprovider specific) if (PkColumns.Count() == 1 && PkColumns.Where(c => c.IsAutoIncrement).Any()) { - return $"{tab}{tab}{tab}return identity;"; + return + $""" + + {tab}{tab}{tab}return identity; + """; } else { diff --git a/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj b/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj index 7a0870d..45c9ef8 100644 --- a/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj +++ b/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj @@ -18,7 +18,9 @@ + + @@ -50,7 +52,9 @@ + + diff --git a/test/Dapper-Layers-Generator.Test/Generators/GenertatorRepoAdd_Tests.cs b/test/Dapper-Layers-Generator.Test/Generators/GenertatorRepoAdd_Tests.cs new file mode 100644 index 0000000..2bda14a --- /dev/null +++ b/test/Dapper-Layers-Generator.Test/Generators/GenertatorRepoAdd_Tests.cs @@ -0,0 +1,41 @@ +using Dapper_Layers_Generator.Core.Converters.MySql; +using Dapper_Layers_Generator.Core.Converters; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Dapper_Layers_Generator.Core.Generators.MySql; +using Dapper_Layers_Generator.Test.Config; +using Dapper_Layers_Generator.Core.Generators; + +namespace Dapper_Layers_Generator.Test.Generators +{ + public class GenertatorRepoAdd_Tests : GeneratorBaseTest + { + private MySqlDataTypeConverter _dataConverter; + private StringTransformationService _transformString; + + public GenertatorRepoAdd_Tests() : base() + { + _dataConverter = new MySqlDataTypeConverter(); + _transformString = new StringTransformationService(_settings); + } + + [Fact()] + public void GenerateStandard_Test() + { + //Arrange + var generator = new GeneratorRepoAdd(_settings, _mockDbDefinitions.Object, _transformString, _dataConverter); + generator.SetTable("clients"); + var expected = ResourceTool.Read("Dapper_Layers_Generator.Test/Results/Generators/GeneratorRepoAdd_ResultStandard.txt"); + + //Act + var result = generator.Generate(); + + //Assert + Assert.Equal(expected, result); + } + + } +} diff --git a/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorRepoAdd_Test.cs b/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorRepoAdd_Test.cs index e666e92..faacb65 100644 --- a/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorRepoAdd_Test.cs +++ b/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorRepoAdd_Test.cs @@ -27,7 +27,8 @@ public void GenerateStandard_Test() { //Arrange var generator = new MySqlGeneratorRepoAdd(_settings, _mockDbDefinitions.Object, _transformString, _dataConverter); - var expected = ResourceTool.Read("Dapper_Layers_Generator.Test/Results/Generators/MySql/MySqlGeneratorContext_ResultStandard.txt"); + generator.SetTable("clients"); + var expected = ResourceTool.Read("Dapper_Layers_Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoAdd_ResultStandard.txt"); //Act var result = generator.Generate(); diff --git a/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoAdd_ResultStandard.txt b/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoAdd_ResultStandard.txt new file mode 100644 index 0000000..73822a1 --- /dev/null +++ b/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoAdd_ResultStandard.txt @@ -0,0 +1,44 @@ + public virtual async Task AddAsync(Client client) + { + var p = new DynamicParameters(); + p.Add("@firstname", client.Firstname); + p.Add("@lastname", client.Lastname); + p.Add("@address", client.Address); + p.Add("@comment", client.Comment); + p.Add("@created_at", client.CreatedAt); + p.Add("@postal", client.Postal); + p.Add("@city", client.City); + p.Add("@phone", client.Phone); + p.Add("@email", client.Email); + + var sql = + """ + INSERT INTO clients + ( + firstname + ,lastname + ,address + ,comment + ,created_at + ,postal + ,city + ,phone + ,email + ) + VALUES + ( + @firstname + ,@lastname + ,@address + ,@comment + ,@created_at + ,@postal + ,@city + ,@phone + ,@email + ) + """; + + var identity = await _dbContext.Connection.ExecuteScalarAsync(sql,p,transaction:_dbContext.Transaction); + return identity; + } diff --git a/test/Dapper-Layers-Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoAdd_ResultStandard.txt b/test/Dapper-Layers-Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoAdd_ResultStandard.txt new file mode 100644 index 0000000..ddad4cc --- /dev/null +++ b/test/Dapper-Layers-Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoAdd_ResultStandard.txt @@ -0,0 +1,45 @@ + public override async Task AddAsync(Client client) + { + var p = new DynamicParameters(); + p.Add("@firstname", client.Firstname); + p.Add("@lastname", client.Lastname); + p.Add("@address", client.Address); + p.Add("@comment", client.Comment); + p.Add("@created_at", client.CreatedAt); + p.Add("@postal", client.Postal); + p.Add("@city", client.City); + p.Add("@phone", client.Phone); + p.Add("@email", client.Email); + + var sql = + """ + INSERT INTO `clients` + ( + `firstname` + ,`lastname` + ,`address` + ,`comment` + ,`created_at` + ,`postal` + ,`city` + ,`phone` + ,`email` + ) + VALUES + ( + @firstname + ,@lastname + ,@address + ,@comment + ,@created_at + ,@postal + ,@city + ,@phone + ,@email + ); + SELECT LAST_INSERT_ID(); + """; + + var identity = await _dbContext.Connection.ExecuteScalarAsync(sql,p,transaction:_dbContext.Transaction); + return identity; + } From 79e05517d695c62f92447ade05a2cdee2bc2e742 Mon Sep 17 00:00:00 2001 From: Fabien Donnet Date: Fri, 2 Dec 2022 09:09:08 +0100 Subject: [PATCH 11/48] Clean unecessary using --- .../ConsoleServiceMain.cs | 2 +- .../Generators/GeneratorContextForProvider.cs | 1 - .../Generators/GeneratorPOCO.cs | 1 - .../Generators/GeneratorRepoAdd.cs | 1 - .../Generators/GeneratorRepoAddBulk.cs | 5 ----- .../Generators/GeneratorRepoAddMulti.cs | 4 ---- .../Generators/GeneratorRepoDelete.cs | 4 ---- .../Generators/GeneratorRepoDeleteBulk.cs | 4 ---- .../Generators/GeneratorRepoDeleteByPkList.cs | 4 ---- .../Generators/GeneratorRepoGetAll.cs | 1 - .../Generators/GeneratorRepoGetByPk.cs | 4 ---- .../Generators/GeneratorRepoGetByPkBulk.cs | 4 ---- .../Generators/GeneratorRepoGetByPkList.cs | 4 ---- .../Generators/GeneratorRepoGetByUk.cs | 5 ----- .../Generators/GeneratorRepoUpdate.cs | 4 ---- .../Generators/GeneratorRepoUpdateBulk.cs | 4 ---- .../Generators/GeneratorRepoUpdateMulti.cs | 4 ---- .../Generators/MySql/MySqlGeneratorRepoAdd.cs | 1 - .../MySql/MySqlGeneratorRepoAddBulk.cs | 5 ----- .../MySql/MySqlGeneratorRepoDeleteBulk.cs | 5 ----- .../MySql/MySqlGeneratorRepoDeleteByPkList.cs | 4 ---- .../MySql/MySqlGeneratorRepoGetByPkBulk.cs | 4 ---- .../MySql/MySqlGeneratorRepoGetByPkList.cs | 4 ---- .../MySql/MySqlGeneratorRepoUpdateBulk.cs | 4 ---- .../Dapper-Layers-Generator.Test.csproj | 4 ++++ .../Generators/GenertatorRepoAdd_Tests.cs | 15 +++++++++++++ .../MySql/MySqlGeneratorRepoAdd_Test.cs | 16 ++++++++++++++ .../GeneratorRepoAdd_ResultCompositePk.txt | 22 +++++++++++++++++++ ...ySqlGeneratorRepoAdd_ResultCompositePk.txt | 22 +++++++++++++++++++ 29 files changed, 80 insertions(+), 82 deletions(-) create mode 100644 test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoAdd_ResultCompositePk.txt create mode 100644 test/Dapper-Layers-Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoAdd_ResultCompositePk.txt diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Console/ConsoleServiceMain.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Console/ConsoleServiceMain.cs index a11ba8b..390359b 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Console/ConsoleServiceMain.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Console/ConsoleServiceMain.cs @@ -31,7 +31,7 @@ internal async Task InitAndLoadDbDefinitionsAsync() { AnsiConsole.Clear(); //TMP CODING - //await _settings.LoadFromFile(@"c:\temp\config.json"); + await _settings.LoadFromFile(@"c:\temp\config.json"); await AnsiConsole.Status() .StartAsync( diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorContextForProvider.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorContextForProvider.cs index 3fa102b..279b885 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorContextForProvider.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorContextForProvider.cs @@ -1,6 +1,5 @@ using Dapper_Layers_Generator.Core.Converters; using Dapper_Layers_Generator.Core.Settings; -using System.Text; namespace Dapper_Layers_Generator.Core.Generators { diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorPOCO.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorPOCO.cs index 3f821f7..7ff9c6c 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorPOCO.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorPOCO.cs @@ -1,7 +1,6 @@ using Dapper_Layers_Generator.Core.Converters; using Dapper_Layers_Generator.Core.Settings; using Dapper_Layers_Generator.Data.POCO; -using System.Text; namespace Dapper_Layers_Generator.Core.Generators { diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoAdd.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoAdd.cs index bca1da8..af96aea 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoAdd.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoAdd.cs @@ -1,6 +1,5 @@ using Dapper_Layers_Generator.Core.Converters; using Dapper_Layers_Generator.Core.Settings; -using System.Text; namespace Dapper_Layers_Generator.Core.Generators { diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoAddBulk.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoAddBulk.cs index 3217112..397a84f 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoAddBulk.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoAddBulk.cs @@ -1,10 +1,6 @@ using Dapper_Layers_Generator.Core.Converters; using Dapper_Layers_Generator.Core.Settings; -using System; -using System.Collections.Generic; -using System.Linq; using System.Text; -using System.Threading.Tasks; namespace Dapper_Layers_Generator.Core.Generators { @@ -14,7 +10,6 @@ public interface IGeneratorRepoAddBulk : IGeneratorFromTable } public class GeneratorRepoAddBulk : GeneratorForOperations, IGeneratorRepoAddBulk { - public GeneratorRepoAddBulk(SettingsGlobal settingsGlobal , IReaderDBDefinitionService data , StringTransformationService stringTransformationService diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoAddMulti.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoAddMulti.cs index 75970ff..8e2163f 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoAddMulti.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoAddMulti.cs @@ -1,10 +1,6 @@ using Dapper_Layers_Generator.Core.Converters; using Dapper_Layers_Generator.Core.Settings; -using System; -using System.Collections.Generic; -using System.Linq; using System.Text; -using System.Threading.Tasks; namespace Dapper_Layers_Generator.Core.Generators { diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoDelete.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoDelete.cs index 62440bc..3965513 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoDelete.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoDelete.cs @@ -1,10 +1,6 @@ using Dapper_Layers_Generator.Core.Converters; using Dapper_Layers_Generator.Core.Settings; -using System; -using System.Collections.Generic; -using System.Linq; using System.Text; -using System.Threading.Tasks; namespace Dapper_Layers_Generator.Core.Generators { diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoDeleteBulk.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoDeleteBulk.cs index 9bdce58..04db9b9 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoDeleteBulk.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoDeleteBulk.cs @@ -1,10 +1,6 @@ using Dapper_Layers_Generator.Core.Converters; using Dapper_Layers_Generator.Core.Settings; -using System; -using System.Collections.Generic; -using System.Linq; using System.Text; -using System.Threading.Tasks; namespace Dapper_Layers_Generator.Core.Generators { diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoDeleteByPkList.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoDeleteByPkList.cs index b9150bf..3f3d0fa 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoDeleteByPkList.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoDeleteByPkList.cs @@ -1,10 +1,6 @@ using Dapper_Layers_Generator.Core.Converters; using Dapper_Layers_Generator.Core.Settings; -using System; -using System.Collections.Generic; -using System.Linq; using System.Text; -using System.Threading.Tasks; namespace Dapper_Layers_Generator.Core.Generators { diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoGetAll.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoGetAll.cs index 5db2b2d..15d1337 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoGetAll.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoGetAll.cs @@ -1,6 +1,5 @@ using Dapper_Layers_Generator.Core.Converters; using Dapper_Layers_Generator.Core.Settings; -using Dapper_Layers_Generator.Data.POCO; using System.Text; namespace Dapper_Layers_Generator.Core.Generators diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoGetByPk.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoGetByPk.cs index dd2be80..7ec4d5e 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoGetByPk.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoGetByPk.cs @@ -1,10 +1,6 @@ using Dapper_Layers_Generator.Core.Converters; using Dapper_Layers_Generator.Core.Settings; -using System; -using System.Collections.Generic; -using System.Linq; using System.Text; -using System.Threading.Tasks; namespace Dapper_Layers_Generator.Core.Generators { diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoGetByPkBulk.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoGetByPkBulk.cs index 4445c23..3f71561 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoGetByPkBulk.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoGetByPkBulk.cs @@ -1,10 +1,6 @@ using Dapper_Layers_Generator.Core.Converters; using Dapper_Layers_Generator.Core.Settings; -using System; -using System.Collections.Generic; -using System.Linq; using System.Text; -using System.Threading.Tasks; namespace Dapper_Layers_Generator.Core.Generators { diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoGetByPkList.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoGetByPkList.cs index 43ddca9..a2e51ae 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoGetByPkList.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoGetByPkList.cs @@ -1,10 +1,6 @@ using Dapper_Layers_Generator.Core.Converters; using Dapper_Layers_Generator.Core.Settings; -using System; -using System.Collections.Generic; -using System.Linq; using System.Text; -using System.Threading.Tasks; namespace Dapper_Layers_Generator.Core.Generators { diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoGetByUk.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoGetByUk.cs index b4f8387..b7e0b9b 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoGetByUk.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoGetByUk.cs @@ -1,12 +1,7 @@ using Dapper_Layers_Generator.Core.Converters; using Dapper_Layers_Generator.Core.Settings; using Dapper_Layers_Generator.Data.POCO; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Reflection; using System.Text; -using System.Threading.Tasks; namespace Dapper_Layers_Generator.Core.Generators { diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoUpdate.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoUpdate.cs index 1701b3b..183a229 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoUpdate.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoUpdate.cs @@ -1,10 +1,6 @@ using Dapper_Layers_Generator.Core.Converters; using Dapper_Layers_Generator.Core.Settings; -using System; -using System.Collections.Generic; -using System.Linq; using System.Text; -using System.Threading.Tasks; namespace Dapper_Layers_Generator.Core.Generators { diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoUpdateBulk.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoUpdateBulk.cs index 87e7dc9..bc5f5ec 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoUpdateBulk.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoUpdateBulk.cs @@ -1,10 +1,6 @@ using Dapper_Layers_Generator.Core.Converters; using Dapper_Layers_Generator.Core.Settings; -using System; -using System.Collections.Generic; -using System.Linq; using System.Text; -using System.Threading.Tasks; namespace Dapper_Layers_Generator.Core.Generators { diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoUpdateMulti.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoUpdateMulti.cs index d4500f3..834afe4 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoUpdateMulti.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoUpdateMulti.cs @@ -1,10 +1,6 @@ using Dapper_Layers_Generator.Core.Converters; using Dapper_Layers_Generator.Core.Settings; -using System; -using System.Collections.Generic; -using System.Linq; using System.Text; -using System.Threading.Tasks; namespace Dapper_Layers_Generator.Core.Generators { diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoAdd.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoAdd.cs index 404784e..e2855ff 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoAdd.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoAdd.cs @@ -1,6 +1,5 @@ using Dapper_Layers_Generator.Core.Converters; using Dapper_Layers_Generator.Core.Settings; -using System.Text; namespace Dapper_Layers_Generator.Core.Generators.MySql { diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoAddBulk.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoAddBulk.cs index 820591b..8ee5803 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoAddBulk.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoAddBulk.cs @@ -1,12 +1,7 @@ using Dapper_Layers_Generator.Core.Converters; using Dapper_Layers_Generator.Core.Settings; -using Microsoft.Extensions.Primitives; using MySqlX.XDevAPI.Relational; -using System; -using System.Collections.Generic; -using System.Linq; using System.Text; -using System.Threading.Tasks; namespace Dapper_Layers_Generator.Core.Generators.MySql { diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoDeleteBulk.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoDeleteBulk.cs index 1caea37..352f7c4 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoDeleteBulk.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoDeleteBulk.cs @@ -1,11 +1,6 @@ using Dapper_Layers_Generator.Core.Converters; using Dapper_Layers_Generator.Core.Settings; -using Microsoft.Extensions.Primitives; -using System; -using System.Collections.Generic; -using System.Linq; using System.Text; -using System.Threading.Tasks; namespace Dapper_Layers_Generator.Core.Generators.MySql { diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoDeleteByPkList.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoDeleteByPkList.cs index 04ec6d9..b4abaa2 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoDeleteByPkList.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoDeleteByPkList.cs @@ -1,10 +1,6 @@ using Dapper_Layers_Generator.Core.Converters; using Dapper_Layers_Generator.Core.Settings; -using System; -using System.Collections.Generic; -using System.Linq; using System.Text; -using System.Threading.Tasks; namespace Dapper_Layers_Generator.Core.Generators.MySql { diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoGetByPkBulk.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoGetByPkBulk.cs index 5b49feb..3fece31 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoGetByPkBulk.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoGetByPkBulk.cs @@ -1,10 +1,6 @@ using Dapper_Layers_Generator.Core.Converters; using Dapper_Layers_Generator.Core.Settings; -using System; -using System.Collections.Generic; -using System.Linq; using System.Text; -using System.Threading.Tasks; namespace Dapper_Layers_Generator.Core.Generators.MySql { diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoGetByPkList.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoGetByPkList.cs index 0965c08..69e7a34 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoGetByPkList.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoGetByPkList.cs @@ -1,10 +1,6 @@ using Dapper_Layers_Generator.Core.Converters; using Dapper_Layers_Generator.Core.Settings; -using System; -using System.Collections.Generic; -using System.Linq; using System.Text; -using System.Threading.Tasks; namespace Dapper_Layers_Generator.Core.Generators.MySql { diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoUpdateBulk.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoUpdateBulk.cs index c1258d0..6998432 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoUpdateBulk.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoUpdateBulk.cs @@ -1,10 +1,6 @@ using Dapper_Layers_Generator.Core.Converters; using Dapper_Layers_Generator.Core.Settings; -using System; -using System.Collections.Generic; -using System.Linq; using System.Text; -using System.Threading.Tasks; namespace Dapper_Layers_Generator.Core.Generators.MySql { diff --git a/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj b/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj index 45c9ef8..bb5deb0 100644 --- a/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj +++ b/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj @@ -18,8 +18,10 @@ + + @@ -52,8 +54,10 @@ + + diff --git a/test/Dapper-Layers-Generator.Test/Generators/GenertatorRepoAdd_Tests.cs b/test/Dapper-Layers-Generator.Test/Generators/GenertatorRepoAdd_Tests.cs index 2bda14a..047ce45 100644 --- a/test/Dapper-Layers-Generator.Test/Generators/GenertatorRepoAdd_Tests.cs +++ b/test/Dapper-Layers-Generator.Test/Generators/GenertatorRepoAdd_Tests.cs @@ -37,5 +37,20 @@ public void GenerateStandard_Test() Assert.Equal(expected, result); } + [Fact()] + public void GenerateCompositePk_Test() + { + //Arrange + var generator = new GeneratorRepoAdd(_settings, _mockDbDefinitions.Object, _transformString, _dataConverter); + generator.SetTable("damages_failures"); + var expected = ResourceTool.Read("Dapper_Layers_Generator.Test/Results/Generators/GeneratorRepoAdd_ResultCompositePk.txt"); + + //Act + var result = generator.Generate(); + + //Assert + Assert.Equal(expected, result); + } + } } diff --git a/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorRepoAdd_Test.cs b/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorRepoAdd_Test.cs index faacb65..91ac894 100644 --- a/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorRepoAdd_Test.cs +++ b/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorRepoAdd_Test.cs @@ -36,5 +36,21 @@ public void GenerateStandard_Test() //Assert Assert.Equal(expected, result); } + + [Fact()] + public void GenerateCompositePk_Test() + { + //Arrange + var generator = new MySqlGeneratorRepoAdd(_settings, _mockDbDefinitions.Object, _transformString, _dataConverter); + generator.SetTable("damages_failures"); + var expected = ResourceTool.Read("Dapper_Layers_Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoAdd_ResultCompositePk.txt"); + + //Act + var result = generator.Generate(); + + //Assert + Assert.Equal(expected, result); + } + } } diff --git a/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoAdd_ResultCompositePk.txt b/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoAdd_ResultCompositePk.txt new file mode 100644 index 0000000..756f0e1 --- /dev/null +++ b/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoAdd_ResultCompositePk.txt @@ -0,0 +1,22 @@ + public virtual async Task AddAsync(DamageFailure damageFailure) + { + var p = new DynamicParameters(); + p.Add("@damage_id", damageFailure.DamageId); + p.Add("@failure_id", damageFailure.FailureId); + + var sql = + """ + INSERT INTO damages_failures + ( + damage_id + ,failure_id + ) + VALUES + ( + @damage_id + ,@failure_id + ) + """; + + _ = await _dbContext.Connection.ExecuteAsync(sql,p,transaction:_dbContext.Transaction); + } diff --git a/test/Dapper-Layers-Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoAdd_ResultCompositePk.txt b/test/Dapper-Layers-Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoAdd_ResultCompositePk.txt new file mode 100644 index 0000000..bf57b58 --- /dev/null +++ b/test/Dapper-Layers-Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoAdd_ResultCompositePk.txt @@ -0,0 +1,22 @@ + public override async Task AddAsync(DamageFailure damageFailure) + { + var p = new DynamicParameters(); + p.Add("@damage_id", damageFailure.DamageId); + p.Add("@failure_id", damageFailure.FailureId); + + var sql = + """ + INSERT INTO `damages_failures` + ( + `damage_id` + ,`failure_id` + ) + VALUES + ( + @damage_id + ,@failure_id + ) + """; + + _ = await _dbContext.Connection.ExecuteAsync(sql,p,transaction:_dbContext.Transaction); + } From 2088976a5e507995b6fa1f7c0af0919e8cb9c6b8 Mon Sep 17 00:00:00 2001 From: Fabien Donnet Date: Fri, 2 Dec 2022 09:09:25 +0100 Subject: [PATCH 12/48] console not config loading --- .../Dapper-Layers-Generator.Console/ConsoleServiceMain.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Console/ConsoleServiceMain.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Console/ConsoleServiceMain.cs index 390359b..a11ba8b 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Console/ConsoleServiceMain.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Console/ConsoleServiceMain.cs @@ -31,7 +31,7 @@ internal async Task InitAndLoadDbDefinitionsAsync() { AnsiConsole.Clear(); //TMP CODING - await _settings.LoadFromFile(@"c:\temp\config.json"); + //await _settings.LoadFromFile(@"c:\temp\config.json"); await AnsiConsole.Status() .StartAsync( From d78f41e2ed192a96f7fc97e6ba8ec02b92b7459f Mon Sep 17 00:00:00 2001 From: Fabien Donnet Date: Fri, 2 Dec 2022 09:31:25 +0100 Subject: [PATCH 13/48] refactor add bulk string litteral --- .../Generators/GeneratorForOperations.cs | 4 +- .../Generators/GeneratorRepoAddBulk.cs | 18 ++-- .../Generators/GeneratorRepoAddMulti.cs | 2 +- .../Generators/GeneratorRepoUpdateMulti.cs | 2 +- .../MySql/MySqlGeneratorRepoAddBulk.cs | 97 ++++++++----------- .../MySql/MySqlGeneratorRepoDeleteBulk.cs | 4 +- .../MySql/MySqlGeneratorRepoGetByPkBulk.cs | 4 +- .../MySql/MySqlGeneratorRepoUpdateBulk.cs | 4 +- 8 files changed, 62 insertions(+), 73 deletions(-) diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorForOperations.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorForOperations.cs index 714a3fa..7a4f701 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorForOperations.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorForOperations.cs @@ -153,7 +153,7 @@ protected virtual string GetSqlPkListWhereClause() """; } - protected virtual string GetOpenTransAndInitBulkMySql() + protected virtual string WriteOpenTransAndInitBulkMySql() { return $""" @@ -167,7 +167,7 @@ protected virtual string GetOpenTransAndInitBulkMySql() """; } - protected virtual string GetCloseTransaction() + protected virtual string WriteCloseTransaction() { return $$""" diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoAddBulk.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoAddBulk.cs index 397a84f..4c7a65b 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoAddBulk.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoAddBulk.cs @@ -23,14 +23,15 @@ public override string Generate() { if (TableSettings.AddBulkGenerator) { - var output = new StringBuilder(); - output.Append(WriteMethodDef()); if (!IsBase) { //Will se if we can use some part of code for multi db providers for the moment the implementation is in MySql only child class } - return output.ToString(); + return + $""" + {WriteMethodDef()} + """; } return string.Empty; @@ -38,11 +39,12 @@ public override string Generate() protected override string WriteMethodDef() { - return $"{tab}{tab}//Please use this bulk by batch depending on the mem available 500 / 1000 / 1500 rows" + Environment.NewLine + - $"{tab}{tab}public {(IsBase ? "abstract" : "override async")} Task AddBulkAsync(IEnumerable<{ClassName}> " + - $"{_stringTransform.PluralizeToLower(ClassName)}){(IsBase ? ";" : string.Empty)}" + (!IsBase ? @$" -{tab}{tab}{{" : Environment.NewLine); - + return + $""" + {tab}{tab}//Please use this bulk by batch depending on the mem available 500 / 1000 / 1500 rows + {tab}{tab}public {(IsBase ? "abstract" : "override async")} Task AddBulkAsync(IEnumerable<{ClassName}> {_stringTransform.PluralizeToLower(ClassName)}){(IsBase ? ";" : string.Empty)} + {(!IsBase ? @$"{tab}{tab}{{" : string.Empty)} + """; } protected override string WriteDapperCall() diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoAddMulti.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoAddMulti.cs index 8e2163f..6d31749 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoAddMulti.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoAddMulti.cs @@ -40,7 +40,7 @@ public override string Generate() output.Append(WriteDapperCall()); output.Append(Environment.NewLine); output.Append(Environment.NewLine); - output.Append(GetCloseTransaction()); + output.Append(WriteCloseTransaction()); output.Append(Environment.NewLine); output.Append($"{tab}{tab}}}"); output.Append(Environment.NewLine); diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoUpdateMulti.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoUpdateMulti.cs index 834afe4..d12c780 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoUpdateMulti.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoUpdateMulti.cs @@ -39,7 +39,7 @@ public override string Generate() output.Append(WriteDapperCall()); output.Append(Environment.NewLine); output.Append(Environment.NewLine); - output.Append(GetCloseTransaction()); + output.Append(WriteCloseTransaction()); output.Append(Environment.NewLine); output.Append($"{tab}{tab}}}"); output.Append(Environment.NewLine); diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoAddBulk.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoAddBulk.cs index 8ee5803..8b5d06f 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoAddBulk.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoAddBulk.cs @@ -25,35 +25,27 @@ public override string Generate() { if (TableSettings.AddBulkGenerator) { - var output = new StringBuilder(); - output.Append(WriteMethodDef()); - output.Append(Environment.NewLine); - output.Append(GetOpenTransAndInitBulkMySql()); - output.Append(Environment.NewLine); - output.Append(Environment.NewLine); - output.Append(@GetCreateDataTable()); - output.Append(Environment.NewLine); - output.Append(Environment.NewLine); - output.Append(WriteDapperCall()); - output.Append(Environment.NewLine); - output.Append(Environment.NewLine); - output.Append(GetCloseTransaction()); - output.Append(Environment.NewLine); - output.Append($"{tab}{tab}}}"); - output.Append(Environment.NewLine); - output.Append(Environment.NewLine); - - return output.ToString(); + return + $$""" + {{WriteMethodDef()}} + {{WriteOpenTransAndInitBulkMySql()}} + + {{WriteCreateDataTable()}} + + {{WriteDapperCall()}} + + {{WriteCloseTransaction()}} + {{tab}}{{tab}}} + + """; } return string.Empty; } - - protected virtual string GetCreateDataTable() + protected virtual string WriteCreateDataTable() { var output = new StringBuilder(); - output.Append($"{tab}{tab}{tab}var table = new DataTable();" + Environment.NewLine); if (ColumnForInsertOperations == null || !ColumnForInsertOperations.Any()) throw new ArgumentException($"No column defined for insert (bulk), for table {Table.Name}"); @@ -61,12 +53,13 @@ protected virtual string GetCreateDataTable() var columnsForBulk = ColumnForInsertOperations.Where(c => !c.IsAutoIncrement); var rowsAdd = new List(); + var colAdd = new List(); foreach (var colBulk in columnsForBulk) { - output.Append($@"{tab}{tab}{tab}table.Columns.Add(""{colBulk.Name}"",typeof({DataConverter.GetDotNetDataType(colBulk.DataType)}));" + Environment.NewLine); + colAdd.Add($@"{tab}{tab}{tab}table.Columns.Add(""{colBulk.Name}"",typeof({DataConverter.GetDotNetDataType(colBulk.DataType)}));"); if (colBulk.IsNullable) { - output.Append($@"{tab}{tab}{tab}table.Columns[""{colBulk.Name}""]!.AllowDBNull = true;" + Environment.NewLine); + colAdd.Add($@"{tab}{tab}{tab}table.Columns[""{colBulk.Name}""]!.AllowDBNull = true;"); rowsAdd.Add($"{tab}{tab}{tab}{tab}r[\"{colBulk.Name}\"] = {ClassName.ToLower()}.{_stringTransform.PascalCase(colBulk.Name)} == null " + $"? DBNull.Value : {ClassName.ToLower()}.{_stringTransform.PascalCase(colBulk.Name)};"); @@ -77,37 +70,31 @@ protected virtual string GetCreateDataTable() } } - output.Append(Environment.NewLine); - output.Append($@"{tab}{tab}{tab}bulkCopy.DestinationTableName = ""{Table.Name}"";"); - output.Append(Environment.NewLine); - output.Append($@"{tab}{tab}{tab}bulkCopy.BulkCopyTimeout = 600;"); - output.Append(Environment.NewLine); - output.Append(Environment.NewLine); - - output.Append(@$"{tab}{tab}{tab}foreach(var {ClassName.ToLower()} in {_stringTransform.PluralizeToLower(ClassName)}) -{tab}{tab}{tab}{{ -{tab}{tab}{tab}{tab}DataRow r = table.NewRow();"); - - output.Append(Environment.NewLine); - output.Append(String.Join(Environment.NewLine, rowsAdd)); - output.Append(Environment.NewLine); - output.Append($"{tab}{tab}{tab}{tab}table.Rows.Add(r);"); - output.Append(Environment.NewLine); - output.Append($"{tab}{tab}{tab}}}"); - output.Append(Environment.NewLine); - output.Append(Environment.NewLine); - - output.Append($@"{tab}{tab}{tab}List colMappings = new(); -{tab}{tab}{tab}int i = 0; -{tab}{tab}{tab}foreach (DataColumn col in table.Columns) -{tab}{tab}{tab}{{ -{tab}{tab}{tab}{tab}colMappings.Add(new MySqlBulkCopyColumnMapping(i, col.ColumnName)); -{tab}{tab}{tab}{tab}i++; -{tab}{tab}{tab}}} - -{tab}{tab}{tab}bulkCopy.ColumnMappings.AddRange(colMappings);"); - - return output.ToString(); + return + $$""" + {{tab}}{{tab}}{{tab}}var table = new DataTable(); + {{String.Join(Environment.NewLine,colAdd)}} + + {{tab}}{{tab}}{{tab}}bulkCopy.DestinationTableName = "{{Table.Name}}"; + {{tab}}{{tab}}{{tab}}bulkCopy.BulkCopyTimeout = 600; + + {{tab}}{{tab}}{{tab}}foreach(var {{ClassName.ToLower()}} in {{_stringTransform.PluralizeToLower(ClassName)}}) + {{tab}}{{tab}}{{tab}}{ + {{tab}}{{tab}}{{tab}}{{tab}}DataRow r = table.NewRow(); + {{String.Join(Environment.NewLine, rowsAdd)}} + {{tab}}{{tab}}{{tab}}{{tab}}table.Rows.Add(r); + {{tab}}{{tab}}{{tab}}} + + {{tab}}{{tab}}{{tab}}List colMappings = new(); + {{tab}}{{tab}}{{tab}}int i = 0; + {{tab}}{{tab}}{{tab}}foreach (DataColumn col in table.Columns) + {{tab}}{{tab}}{{tab}}{ + {{tab}}{{tab}}{{tab}}{{tab}}colMappings.Add(new MySqlBulkCopyColumnMapping(i, col.ColumnName)); + {{tab}}{{tab}}{{tab}}{{tab}}i++; + {{tab}}{{tab}}{{tab}}} + + {{tab}}{{tab}}{{tab}}bulkCopy.ColumnMappings.AddRange(colMappings); + """; } protected override string WriteDapperCall() diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoDeleteBulk.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoDeleteBulk.cs index 352f7c4..804ffc9 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoDeleteBulk.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoDeleteBulk.cs @@ -27,7 +27,7 @@ public override string Generate() var output = new StringBuilder(); output.Append(WriteMethodDef()); output.Append(Environment.NewLine); - output.Append(GetOpenTransAndInitBulkMySql()); + output.Append(WriteOpenTransAndInitBulkMySql()); output.Append(Environment.NewLine); output.Append(Environment.NewLine); output.Append(GetCreateDbTmpTableForPksMySql("delete")); @@ -45,7 +45,7 @@ public override string Generate() output.Append(WriteDapperCall()); output.Append(Environment.NewLine); output.Append(Environment.NewLine); - output.Append(GetCloseTransaction()); + output.Append(WriteCloseTransaction()); output.Append(Environment.NewLine); output.Append($"{tab}{tab}}}"); output.Append(Environment.NewLine); diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoGetByPkBulk.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoGetByPkBulk.cs index 3fece31..bc18b35 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoGetByPkBulk.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoGetByPkBulk.cs @@ -27,7 +27,7 @@ public override string Generate() var output = new StringBuilder(); output.Append(WriteMethodDef()); output.Append(Environment.NewLine); - output.Append(GetOpenTransAndInitBulkMySql()); + output.Append(WriteOpenTransAndInitBulkMySql()); output.Append(Environment.NewLine); output.Append(Environment.NewLine); output.Append(GetCreateDbTmpTableForPksMySql("get")); @@ -45,7 +45,7 @@ public override string Generate() output.Append(WriteDapperCall()); output.Append(Environment.NewLine); output.Append(Environment.NewLine); - output.Append(GetCloseTransaction()); + output.Append(WriteCloseTransaction()); output.Append(Environment.NewLine); output.Append(Environment.NewLine); output.Append(WriteReturnObj()); diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoUpdateBulk.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoUpdateBulk.cs index 6998432..3b18ec1 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoUpdateBulk.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoUpdateBulk.cs @@ -28,7 +28,7 @@ public override string Generate() var output = new StringBuilder(); output.Append(WriteMethodDef()); output.Append(Environment.NewLine); - output.Append(GetOpenTransAndInitBulkMySql()); + output.Append(WriteOpenTransAndInitBulkMySql()); output.Append(Environment.NewLine); output.Append(Environment.NewLine); output.Append(GetCreateDbTmpTable()); @@ -46,7 +46,7 @@ public override string Generate() output.Append(WriteDapperCall()); output.Append(Environment.NewLine); output.Append(Environment.NewLine); - output.Append(GetCloseTransaction()); + output.Append(WriteCloseTransaction()); output.Append(Environment.NewLine); output.Append($"{tab}{tab}}}"); output.Append(Environment.NewLine); From 37041a989b92cc1eb6e6228a608c33f3ddfc7e4a Mon Sep 17 00:00:00 2001 From: Fabien Donnet Date: Fri, 2 Dec 2022 09:36:37 +0100 Subject: [PATCH 14/48] MySql AddBulk test --- .../Dapper-Layers-Generator.Test.csproj | 2 + .../MySql/MySqlGeneratorRepoAddBulk_Test.cs | 41 ++++++++++++ ...SqlGeneratorRepoAddBulk_ResultStandard.txt | 63 +++++++++++++++++++ 3 files changed, 106 insertions(+) create mode 100644 test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorRepoAddBulk_Test.cs create mode 100644 test/Dapper-Layers-Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoAddBulk_ResultStandard.txt diff --git a/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj b/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj index bb5deb0..0c6150f 100644 --- a/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj +++ b/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj @@ -21,6 +21,7 @@ + @@ -57,6 +58,7 @@ + diff --git a/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorRepoAddBulk_Test.cs b/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorRepoAddBulk_Test.cs new file mode 100644 index 0000000..4f6c712 --- /dev/null +++ b/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorRepoAddBulk_Test.cs @@ -0,0 +1,41 @@ +using Dapper_Layers_Generator.Core.Converters.MySql; +using Dapper_Layers_Generator.Core.Converters; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Dapper_Layers_Generator.Core.Generators.MySql; +using Dapper_Layers_Generator.Test.Config; + +namespace Dapper_Layers_Generator.Test.Generators.MySql +{ + public class MySqlGeneratorRepoAddBulk_Test : GeneratorBaseTest + { + //need to be reviewed if dataconverted will change between db provider + private MySqlDataTypeConverter _dataConverter; + private StringTransformationService _transformString; + + public MySqlGeneratorRepoAddBulk_Test() : base() + { + _dataConverter = new MySqlDataTypeConverter(); + _transformString = new StringTransformationService(_settings); + } + + [Fact()] + public void GenerateStandard_Test() + { + //Arrange + var generator = new MySqlGeneratorRepoAddBulk(_settings, _mockDbDefinitions.Object, _transformString, _dataConverter); + generator.SetTable("clients"); + var expected = ResourceTool.Read("Dapper_Layers_Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoAddBulk_ResultStandard.txt"); + + //Act + var result = generator.Generate(); + + //Assert + Assert.Equal(expected, result); + } + + } +} diff --git a/test/Dapper-Layers-Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoAddBulk_ResultStandard.txt b/test/Dapper-Layers-Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoAddBulk_ResultStandard.txt new file mode 100644 index 0000000..8ef30ba --- /dev/null +++ b/test/Dapper-Layers-Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoAddBulk_ResultStandard.txt @@ -0,0 +1,63 @@ + //Please use this bulk by batch depending on the mem available 500 / 1000 / 1500 rows + public override async Task AddBulkAsync(IEnumerable clients) + { + var isTransAlreadyOpen = _dbContext.Transaction != null; + + if (!isTransAlreadyOpen) + await _dbContext.OpenTransactionAsync(); + + var bulkCopy = new MySqlBulkCopy((MySqlConnection)_dbContext.Connection + , (MySqlTransaction?)_dbContext.Transaction); + + var table = new DataTable(); + table.Columns.Add("firstname",typeof(string)); + table.Columns.Add("lastname",typeof(string)); + table.Columns.Add("address",typeof(string)); + table.Columns.Add("comment",typeof(string)); + table.Columns["comment"]!.AllowDBNull = true; + table.Columns.Add("created_at",typeof(DateTime)); + table.Columns.Add("postal",typeof(string)); + table.Columns["postal"]!.AllowDBNull = true; + table.Columns.Add("city",typeof(string)); + table.Columns["city"]!.AllowDBNull = true; + table.Columns.Add("phone",typeof(string)); + table.Columns["phone"]!.AllowDBNull = true; + table.Columns.Add("email",typeof(string)); + table.Columns["email"]!.AllowDBNull = true; + + bulkCopy.DestinationTableName = "clients"; + bulkCopy.BulkCopyTimeout = 600; + + foreach(var client in clients) + { + DataRow r = table.NewRow(); + r["firstname"] = client.Firstname; + r["lastname"] = client.Lastname; + r["address"] = client.Address; + r["comment"] = client.Comment == null ? DBNull.Value : client.Comment; + r["created_at"] = client.CreatedAt; + r["postal"] = client.Postal == null ? DBNull.Value : client.Postal; + r["city"] = client.City == null ? DBNull.Value : client.City; + r["phone"] = client.Phone == null ? DBNull.Value : client.Phone; + r["email"] = client.Email == null ? DBNull.Value : client.Email; + table.Rows.Add(r); + } + + List colMappings = new(); + int i = 0; + foreach (DataColumn col in table.Columns) + { + colMappings.Add(new MySqlBulkCopyColumnMapping(i, col.ColumnName)); + i++; + } + + bulkCopy.ColumnMappings.AddRange(colMappings); + + await bulkCopy.WriteToServerAsync(table); + + if (!isTransAlreadyOpen) + { + _dbContext.CommitTransaction(); + _dbContext.Connection.Close(); + } + } From 98e5d914069c26bd89fdf846d25762ebdb2adba4 Mon Sep 17 00:00:00 2001 From: Fabien Donnet Date: Fri, 2 Dec 2022 10:19:12 +0100 Subject: [PATCH 15/48] C# 11 string litteral for AddMulti Generator --- .../Generators/GeneratorForOperations.cs | 30 +++++++ .../Generators/GeneratorRepoAdd.cs | 18 +--- .../Generators/GeneratorRepoAddMulti.cs | 85 ++++++------------- .../Generators/GeneratorRepoUpdateMulti.cs | 12 +-- 4 files changed, 59 insertions(+), 86 deletions(-) diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorForOperations.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorForOperations.cs index 7a4f701..62828c7 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorForOperations.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorForOperations.cs @@ -118,6 +118,22 @@ protected virtual string GetDapperDynaParamsForPkList() """; } + protected virtual string WriteDapperDynaParamsForInsert() + { + var cols = ColumnForInsertOperations!.Where(c => !c.IsAutoIncrement); + + var spParams = String.Join(Environment.NewLine, cols.OrderBy(c => c.Position).Select(col => + { + return $@"{tab}{tab}{tab}p.Add(""@{col.Name}"", {_stringTransform.ApplyConfigTransformMember(ClassName)}.{_stringTransform.PascalCase(col.Name)});"; + })); + + return + $""" + {tab}{tab}{tab}var p = new DynamicParameters(); + {spParams} + """; + } + private string GetColumnListStringForSelect(string tableIdentifier = "") { return String.Join(Environment.NewLine + $"{tab}{tab}{tab}{tab},", @@ -167,6 +183,20 @@ protected virtual string WriteOpenTransAndInitBulkMySql() """; } + protected virtual string WriteOpenTransactionAndLoopBegin() + { + return + $$""" + {{tab}}{{tab}}{{tab}}var isTransAlreadyOpen = _{{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}}.Transaction != null; + + {{tab}}{{tab}}{{tab}}if (!isTransAlreadyOpen) + {{tab}}{{tab}}{{tab}}{{tab}}await _{{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}}.OpenTransactionAsync(); + + {{tab}}{{tab}}{{tab}}foreach(var {{_stringTransform.ApplyConfigTransformMember(ClassName)}} in {{_stringTransform.PluralizeToLower(ClassName)}}) + {{tab}}{{tab}}{{tab}}{ + """; + } + protected virtual string WriteCloseTransaction() { return diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoAdd.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoAdd.cs index af96aea..d3671a8 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoAdd.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoAdd.cs @@ -23,7 +23,7 @@ public override string Generate() return TableSettings.AddGenerator ? $$""" {{WriteMethodDef()}} - {{WriteDapperDynaParams()}} + {{WriteDapperDynaParamsForInsert()}} {{WriteBaseSqlForInsert()}} {{WriteValuesToInsert()}} @@ -61,22 +61,6 @@ protected override string WriteDapperCall() } - protected virtual string WriteDapperDynaParams() - { - var cols = ColumnForInsertOperations!.Where(c => !c.IsAutoIncrement); - - var spParams = String.Join(Environment.NewLine, cols.OrderBy(c => c.Position).Select(col => - { - return $@"{tab}{tab}{tab}p.Add(""@{col.Name}"", {_stringTransform.ApplyConfigTransformMember(ClassName)}.{_stringTransform.PascalCase(col.Name)});"; - })); - - return - $""" - {tab}{tab}{tab}var p = new DynamicParameters(); - {spParams} - """; - } - protected override string WriteReturnObj() { //The base implementation is very minimal (no real return from the DB, need to be override by dbprovider specific) diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoAddMulti.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoAddMulti.cs index 6d31749..80f2528 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoAddMulti.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoAddMulti.cs @@ -25,27 +25,21 @@ public override string Generate() { if (TableSettings.AddMultiGenerator) { - var output = new StringBuilder(); - output.Append(WriteMethodDef()); - output.Append(Environment.NewLine); - output.Append(GetOpenTransactionAndLoopBegin()); - output.Append(Environment.NewLine); - output.Append(GetDapperDynaParams()); - output.Append(Environment.NewLine); - output.Append(Environment.NewLine); - output.Append(WriteBaseSqlForInsert().Replace($"{tab}{tab}{tab}", $"{tab}{tab}{tab}{tab}")); - output.Append($"{tab}{tab}{tab}{tab}{tab}" + WriteValuesToInsert().Replace($"{tab}{tab}{tab}{tab}",$"{tab}{tab}{tab}{tab}{tab}")); - output.Append(Environment.NewLine); - output.Append(Environment.NewLine); - output.Append(WriteDapperCall()); - output.Append(Environment.NewLine); - output.Append(Environment.NewLine); - output.Append(WriteCloseTransaction()); - output.Append(Environment.NewLine); - output.Append($"{tab}{tab}}}"); - output.Append(Environment.NewLine); - - return output.ToString(); + return + $$""" + {{WriteMethodDef()}} + {{WriteOpenTransactionAndLoopBegin()}} + {{WriteDapperDynaParamsForInsert().Replace($"{tab}{tab}{tab}", $"{tab}{tab}{tab}{tab}")}} + + {{WriteBaseSqlForInsert().Replace($"{tab}{tab}{tab}", $"{tab}{tab}{tab}{tab}")}} + {{WriteValuesToInsert().Replace($"{tab}{tab}{tab}", $"{tab}{tab}{tab}{tab}")}} + + {{WriteDapperCall()}} + + {{WriteCloseTransaction()}} + {{tab}}{{tab}}} + + """; } return string.Empty; @@ -53,51 +47,26 @@ public override string Generate() protected override string WriteMethodDef() { - return $"{tab}{tab}public {(IsBase ? "virtual" : "override")} async Task AddAsync(IEnumerable<{ClassName}> " + - $"{_stringTransform.PluralizeToLower(ClassName)})" + - @$" -{tab}{tab}{{"; + return + $$""" + {{tab}}{{tab}}public {{(IsBase ? "virtual" : "override")}} async Task AddAsync(IEnumerable<{{ClassName}}> {{_stringTransform.PluralizeToLower(ClassName)}}) + {{tab}}{{tab}}{ + """; } protected override string WriteDapperCall() { - return $"{tab}{tab}{tab}{tab}_ = " + + var methodCall = $"{tab}{tab}{tab}{tab}_ = " + $"await _{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.Connection." + - $"ExecuteAsync(sql,p,transaction:_{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.Transaction);" + - Environment.NewLine + - $"{tab}{tab}{tab}}}"; - - } - - protected virtual string GetOpenTransactionAndLoopBegin() - { - return @$"{tab}{tab}{tab}var isTransAlreadyOpen = _{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.Transaction != null; - -{tab}{tab}{tab}if (!isTransAlreadyOpen) -{tab}{tab}{tab}{tab}await _{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.OpenTransactionAsync(); + $"ExecuteAsync(sql,p,transaction:_{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.Transaction);"; -{tab}{tab}{tab}foreach(var {_stringTransform.ApplyConfigTransformMember(ClassName)} in {_stringTransform.PluralizeToLower(ClassName)}) -{tab}{tab}{tab}{{"; + return + $$""" + {{methodCall}} + {{tab}}{{tab}}{{tab}}} + """; } - protected virtual string GetDapperDynaParams() - { - var output = new StringBuilder(); - output.Append($"{tab}{tab}{tab}{tab}var p = new DynamicParameters();"); - output.Append(Environment.NewLine); - - var cols = ColumnForInsertOperations!.Where(c => !c.IsAutoIncrement); - - var spParams = String.Join(Environment.NewLine, cols.OrderBy(c => c.Position).Select(col => - { - return $@"{tab}{tab}{tab}{tab}p.Add(""@{col.Name}"", {_stringTransform.ApplyConfigTransformMember(ClassName)}.{_stringTransform.PascalCase(col.Name)});"; - })); - - output.Append(spParams); - return output.ToString(); - } - - protected override string WriteReturnObj() { return string.Empty; diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoUpdateMulti.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoUpdateMulti.cs index d12c780..2804040 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoUpdateMulti.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoUpdateMulti.cs @@ -27,7 +27,7 @@ public override string Generate() var output = new StringBuilder(); output.Append(WriteMethodDef()); output.Append(Environment.NewLine); - output.Append(GetOpenTransactionAndLoopBegin()); + output.Append(WriteOpenTransactionAndLoopBegin()); output.Append(Environment.NewLine); output.Append(GetDapperDynaParams()); output.Append(Environment.NewLine); @@ -67,16 +67,6 @@ protected override string WriteDapperCall() $"{tab}{tab}{tab}}}"; } - protected virtual string GetOpenTransactionAndLoopBegin() - { - return @$"{tab}{tab}{tab}var isTransAlreadyOpen = _{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.Transaction != null; - -{tab}{tab}{tab}if (!isTransAlreadyOpen) -{tab}{tab}{tab}{tab}await _{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.OpenTransactionAsync(); - -{tab}{tab}{tab}foreach(var {_stringTransform.ApplyConfigTransformMember(ClassName)} in {_stringTransform.PluralizeToLower(ClassName)}) -{tab}{tab}{tab}{{"; - } protected virtual string GetDapperDynaParams() { From 52190a538300cd9dba0c721ac8d4e61a0a626192 Mon Sep 17 00:00:00 2001 From: Fabien Donnet Date: Fri, 2 Dec 2022 10:38:05 +0100 Subject: [PATCH 16/48] Standard test for add multi --- .../Dapper-Layers-Generator.Test.csproj | 2 + .../GenertatorRepoAddMulti_Tests.cs | 39 +++++++++++++ .../GeneratorRepoAddMulti_ResultStandard.txt | 57 +++++++++++++++++++ 3 files changed, 98 insertions(+) create mode 100644 test/Dapper-Layers-Generator.Test/Generators/GenertatorRepoAddMulti_Tests.cs create mode 100644 test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoAddMulti_ResultStandard.txt diff --git a/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj b/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj index 0c6150f..570605f 100644 --- a/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj +++ b/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj @@ -18,6 +18,7 @@ + @@ -55,6 +56,7 @@ + diff --git a/test/Dapper-Layers-Generator.Test/Generators/GenertatorRepoAddMulti_Tests.cs b/test/Dapper-Layers-Generator.Test/Generators/GenertatorRepoAddMulti_Tests.cs new file mode 100644 index 0000000..cd78091 --- /dev/null +++ b/test/Dapper-Layers-Generator.Test/Generators/GenertatorRepoAddMulti_Tests.cs @@ -0,0 +1,39 @@ +using Dapper_Layers_Generator.Core.Converters.MySql; +using Dapper_Layers_Generator.Core.Converters; +using Dapper_Layers_Generator.Core.Generators; +using Dapper_Layers_Generator.Test.Config; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Dapper_Layers_Generator.Test.Generators +{ + public class GenertatorRepoAddMulti_Tests : GeneratorBaseTest + { + private MySqlDataTypeConverter _dataConverter; + private StringTransformationService _transformString; + + public GenertatorRepoAddMulti_Tests() : base() + { + _dataConverter = new MySqlDataTypeConverter(); + _transformString = new StringTransformationService(_settings); + } + + [Fact()] + public void GenerateStandard_Test() + { + //Arrange + var generator = new GeneratorRepoAddMulti(_settings, _mockDbDefinitions.Object, _transformString, _dataConverter); + generator.SetTable("clients"); + var expected = ResourceTool.Read("Dapper_Layers_Generator.Test/Results/Generators/GeneratorRepoAddMulti_ResultStandard.txt"); + + //Act + var result = generator.Generate(); + + //Assert + Assert.Equal(expected, result); + } + } +} diff --git a/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoAddMulti_ResultStandard.txt b/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoAddMulti_ResultStandard.txt new file mode 100644 index 0000000..bc1d48e --- /dev/null +++ b/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoAddMulti_ResultStandard.txt @@ -0,0 +1,57 @@ + public virtual async Task AddAsync(IEnumerable clients) + { + var isTransAlreadyOpen = _dbContext.Transaction != null; + + if (!isTransAlreadyOpen) + await _dbContext.OpenTransactionAsync(); + + foreach(var client in clients) + { + var p = new DynamicParameters(); + p.Add("@firstname", client.Firstname); + p.Add("@lastname", client.Lastname); + p.Add("@address", client.Address); + p.Add("@comment", client.Comment); + p.Add("@created_at", client.CreatedAt); + p.Add("@postal", client.Postal); + p.Add("@city", client.City); + p.Add("@phone", client.Phone); + p.Add("@email", client.Email); + + var sql = + """ + INSERT INTO clients + ( + firstname + ,lastname + ,address + ,comment + ,created_at + ,postal + ,city + ,phone + ,email + ) + VALUES + ( + @firstname + ,@lastname + ,@address + ,@comment + ,@created_at + ,@postal + ,@city + ,@phone + ,@email + ) + """; + + _ = await _dbContext.Connection.ExecuteAsync(sql,p,transaction:_dbContext.Transaction); + } + + if (!isTransAlreadyOpen) + { + _dbContext.CommitTransaction(); + _dbContext.Connection.Close(); + } + } From 5b609ecd017cd8fde18899d72e45be57f45cfbf0 Mon Sep 17 00:00:00 2001 From: Fabien Donnet Date: Fri, 2 Dec 2022 10:52:27 +0100 Subject: [PATCH 17/48] Change naming from Get to Write --- .../Generators/GeneratorForOperations.cs | 28 +++++++++---------- .../Generators/GeneratorRepoDelete.cs | 6 ++-- .../Generators/GeneratorRepoDeleteByPkList.cs | 6 ++-- .../Generators/GeneratorRepoGetAll.cs | 2 +- .../Generators/GeneratorRepoGetByPk.cs | 6 ++-- .../Generators/GeneratorRepoGetByPkList.cs | 6 ++-- .../Generators/GeneratorRepoGetByUk.cs | 2 +- .../Generators/GeneratorRepoUpdate.cs | 4 +-- .../Generators/GeneratorRepoUpdateMulti.cs | 4 +-- .../MySql/MySqlGeneratorRepoDeleteBulk.cs | 6 ++-- .../MySql/MySqlGeneratorRepoDeleteByPkList.cs | 14 +++++----- .../MySql/MySqlGeneratorRepoGetByPkBulk.cs | 8 +++--- .../MySql/MySqlGeneratorRepoGetByPkList.cs | 10 +++---- .../MySql/MySqlGeneratorRepoUpdateBulk.cs | 2 +- 14 files changed, 52 insertions(+), 52 deletions(-) diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorForOperations.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorForOperations.cs index 62828c7..bfc6384 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorForOperations.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorForOperations.cs @@ -15,7 +15,7 @@ public GeneratorForOperations(SettingsGlobal settingsGlobal } - protected string GetBaseSqlForSelect(string tableIdentifier = "") + protected string WriteBaseSqlForSelect(string tableIdentifier = "") { if (ColumnForGetOperations == null || !ColumnForGetOperations.Any()) throw new ArgumentException($"No column available for select for this table{Table.Name}, genererator crash"); @@ -23,7 +23,7 @@ protected string GetBaseSqlForSelect(string tableIdentifier = "") return $$""" {{tab}}{{tab}}{{tab}}var sql = @" - {{tab}}{{tab}}{{tab}}SELECT {{@GetColumnListStringForSelect(tableIdentifier)}} + {{tab}}{{tab}}{{tab}}SELECT {{WriteColumnListStringForSelect(tableIdentifier)}} {{tab}}{{tab}}{{tab}}FROM {{ColAndTableIdentifier + Table.Name + ColAndTableIdentifier}} {{tableIdentifier.Replace(".", "")}} """; } @@ -47,7 +47,7 @@ protected string WriteBaseSqlForInsert() """"; } - protected virtual string GetBaseSqlForDelete() + protected virtual string WriteBaseSqlForDelete() { return $$""" @@ -73,7 +73,7 @@ protected virtual string WriteValuesToInsert() """"; } - protected string GetBaseSqlForUpdate() + protected string WriteBaseSqlForUpdate() { if (ColumnForUpdateOperations == null || !ColumnForUpdateOperations.Any()) throw new ArgumentException($"No column available for update for this table{Table.Name}, genererator crash"); @@ -82,11 +82,11 @@ protected string GetBaseSqlForUpdate() $""" {tab}{tab}{tab}var sql = @" {tab}{tab}{tab}UPDATE {ColAndTableIdentifier}{Table.Name}{ColAndTableIdentifier} - {tab}{tab}{tab}SET {GetColumnListStringForUpdate()} + {tab}{tab}{tab}SET {WriteColumnListStringForUpdate()} """; } - private string GetColumnListStringForUpdate() + private string WriteColumnListStringForUpdate() { var output = string.Empty; var cols = ColumnForUpdateOperations!.Where(c => !c.IsAutoIncrement && !c.IsPrimary); @@ -95,7 +95,7 @@ private string GetColumnListStringForUpdate() cols!.OrderBy(c => c.Position).Select(c => $"{ColAndTableIdentifier}{c.Name}{ColAndTableIdentifier} = @{c.Name}")); } - protected virtual string GetDapperDynaParamsForPk() + protected virtual string WriteDapperDynaParamsForPk() { var spParams = String.Join(Environment.NewLine, PkColumns.Select(col => { @@ -109,7 +109,7 @@ protected virtual string GetDapperDynaParamsForPk() """; } - protected virtual string GetDapperDynaParamsForPkList() + protected virtual string WriteDapperDynaParamsForPkList() { return $""" @@ -134,7 +134,7 @@ protected virtual string WriteDapperDynaParamsForInsert() """; } - private string GetColumnListStringForSelect(string tableIdentifier = "") + private string WriteColumnListStringForSelect(string tableIdentifier = "") { return String.Join(Environment.NewLine + $"{tab}{tab}{tab}{tab},", ColumnForGetOperations!.OrderBy(c => c.Position).Select(c => $"{tableIdentifier}{ColAndTableIdentifier}{c.Name}{ColAndTableIdentifier}")); @@ -148,7 +148,7 @@ private string GetColumnListStringForInsert() cols!.OrderBy(c => c.Position).Select(c => $"{ColAndTableIdentifier}{c.Name}{ColAndTableIdentifier}")); } - protected virtual string GetSqlWhereClauseForPk() + protected virtual string WriteSqlWhereClauseForPk() { var whereClause = String.Join(Environment.NewLine + $"{tab}{tab}{tab}AND ", PkColumns.Select(col => { @@ -161,7 +161,7 @@ protected virtual string GetSqlWhereClauseForPk() """; } - protected virtual string GetSqlPkListWhereClause() + protected virtual string WriteSqlPkListWhereClause() { return $""" @@ -209,7 +209,7 @@ protected virtual string WriteCloseTransaction() """; } - protected virtual string GetCreateDataTableForPkMySql(string opCode) + protected virtual string WriteCreateDataTableForPkMySql(string opCode) { var output = new StringBuilder(); @@ -249,12 +249,12 @@ protected virtual string GetCreateDataTableForPkMySql(string opCode) {{tab}}{{tab}}{{tab}}bulkCopy.ColumnMappings.AddRange(colMappings); """; } - protected virtual string GetBulkCallMySql() + protected virtual string WriteBulkCallMySql() { return $"{tab}{tab}{tab}await bulkCopy.WriteToServerAsync(table);"; } - protected virtual string GetCreateDbTmpTableForPksMySql(string opCode) + protected virtual string WriteCreateDbTmpTableForPksMySql(string opCode) { //build pk columns var createColumns = String.Join(Environment.NewLine + $"{tab}{tab}{tab}{tab}, ", PkColumns.Select(c => c.Name + " " + c.CompleteType)); diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoDelete.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoDelete.cs index 3965513..3a8c15f 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoDelete.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoDelete.cs @@ -30,12 +30,12 @@ public override string Generate() var output = new StringBuilder(); output.Append(WriteMethodDef()); output.Append(Environment.NewLine); - output.Append(@GetDapperDynaParamsForPk()); + output.Append(WriteDapperDynaParamsForPk()); output.Append(Environment.NewLine); output.Append(Environment.NewLine); - output.Append(GetBaseSqlForDelete()); + output.Append(WriteBaseSqlForDelete()); output.Append(Environment.NewLine); - output.Append(GetSqlWhereClauseForPk()); + output.Append(WriteSqlWhereClauseForPk()); output.Append(Environment.NewLine); output.Append(Environment.NewLine); output.Append(WriteDapperCall()); diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoDeleteByPkList.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoDeleteByPkList.cs index 3f3d0fa..dfeeee0 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoDeleteByPkList.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoDeleteByPkList.cs @@ -32,12 +32,12 @@ public override string Generate() if (PkColumns.Count() == 1 || !IsBase) { output.Append(Environment.NewLine); - output.Append(GetDapperDynaParamsForPkList()); + output.Append(WriteDapperDynaParamsForPkList()); output.Append(Environment.NewLine); output.Append(Environment.NewLine); - output.Append(@GetBaseSqlForDelete()); + output.Append(WriteBaseSqlForDelete()); output.Append(Environment.NewLine); - output.Append(GetSqlPkListWhereClause()); + output.Append(WriteSqlPkListWhereClause()); output.Append(Environment.NewLine); output.Append(Environment.NewLine); output.Append(WriteDapperCall()); diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoGetAll.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoGetAll.cs index 15d1337..4bc4a25 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoGetAll.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoGetAll.cs @@ -26,7 +26,7 @@ public override string Generate() var output = new StringBuilder(); output.Append(WriteMethodDef()); output.Append(Environment.NewLine); - output.Append(@GetBaseSqlForSelect()+ @""";"); + output.Append(WriteBaseSqlForSelect()+ @""";"); output.Append(Environment.NewLine); output.Append(Environment.NewLine); output.Append(WriteDapperCall()); diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoGetByPk.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoGetByPk.cs index 7ec4d5e..97af930 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoGetByPk.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoGetByPk.cs @@ -30,12 +30,12 @@ public override string Generate() var output = new StringBuilder(); output.Append(WriteMethodDef()); output.Append(Environment.NewLine); - output.Append(GetDapperDynaParamsForPk()); + output.Append(WriteDapperDynaParamsForPk()); output.Append(Environment.NewLine); output.Append(Environment.NewLine); - output.Append(@GetBaseSqlForSelect()); + output.Append(WriteBaseSqlForSelect()); output.Append(Environment.NewLine); - output.Append(GetSqlWhereClauseForPk()); + output.Append(WriteSqlWhereClauseForPk()); output.Append(Environment.NewLine); output.Append(Environment.NewLine); output.Append(WriteDapperCall()); diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoGetByPkList.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoGetByPkList.cs index a2e51ae..68799ad 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoGetByPkList.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoGetByPkList.cs @@ -28,12 +28,12 @@ public override string Generate() if (PkColumns.Count() == 1 || !IsBase) { output.Append(Environment.NewLine); - output.Append(GetDapperDynaParamsForPkList()); + output.Append(WriteDapperDynaParamsForPkList()); output.Append(Environment.NewLine); output.Append(Environment.NewLine); - output.Append(@GetBaseSqlForSelect()); + output.Append(WriteBaseSqlForSelect()); output.Append(Environment.NewLine); - output.Append(GetSqlPkListWhereClause()); + output.Append(WriteSqlPkListWhereClause()); output.Append(Environment.NewLine); output.Append(Environment.NewLine); output.Append(WriteDapperCall()); diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoGetByUk.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoGetByUk.cs index b7e0b9b..8e015b1 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoGetByUk.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoGetByUk.cs @@ -36,7 +36,7 @@ public override string Generate() output.Append(GetDapperDynaParams()); output.Append(Environment.NewLine); output.Append(Environment.NewLine); - output.Append(@GetBaseSqlForSelect()); + output.Append(WriteBaseSqlForSelect()); output.Append(Environment.NewLine); output.Append(GetSqlWhereClause()); output.Append(Environment.NewLine); diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoUpdate.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoUpdate.cs index 183a229..b04b201 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoUpdate.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoUpdate.cs @@ -29,8 +29,8 @@ public override string Generate() output.Append(GetDapperDynaParams()); output.Append(Environment.NewLine); output.Append(Environment.NewLine); - output.Append(GetBaseSqlForUpdate()); - output.Append(GetSqlWhereClauseForPk()); + output.Append(WriteBaseSqlForUpdate()); + output.Append(WriteSqlWhereClauseForPk()); output.Append(Environment.NewLine); output.Append(Environment.NewLine); output.Append(WriteDapperCall()); diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoUpdateMulti.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoUpdateMulti.cs index 2804040..9582cf3 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoUpdateMulti.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoUpdateMulti.cs @@ -32,8 +32,8 @@ public override string Generate() output.Append(GetDapperDynaParams()); output.Append(Environment.NewLine); output.Append(Environment.NewLine); - output.Append(GetBaseSqlForUpdate().Replace($"{tab}{tab}{tab}", $"{tab}{tab}{tab}{tab}")); - output.Append(GetSqlWhereClauseForPk().Replace($"{tab}{tab}{tab}", $"{tab}{tab}{tab}{tab}")); + output.Append(WriteBaseSqlForUpdate().Replace($"{tab}{tab}{tab}", $"{tab}{tab}{tab}{tab}")); + output.Append(WriteSqlWhereClauseForPk().Replace($"{tab}{tab}{tab}", $"{tab}{tab}{tab}{tab}")); output.Append(Environment.NewLine); output.Append(Environment.NewLine); output.Append(WriteDapperCall()); diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoDeleteBulk.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoDeleteBulk.cs index 804ffc9..6ffb82d 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoDeleteBulk.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoDeleteBulk.cs @@ -30,13 +30,13 @@ public override string Generate() output.Append(WriteOpenTransAndInitBulkMySql()); output.Append(Environment.NewLine); output.Append(Environment.NewLine); - output.Append(GetCreateDbTmpTableForPksMySql("delete")); + output.Append(WriteCreateDbTmpTableForPksMySql("delete")); output.Append(Environment.NewLine); output.Append(Environment.NewLine); - output.Append(GetCreateDataTableForPkMySql("delete")); + output.Append(WriteCreateDataTableForPkMySql("delete")); output.Append(Environment.NewLine); output.Append(Environment.NewLine); - output.Append(GetBulkCallMySql()); + output.Append(WriteBulkCallMySql()); output.Append(Environment.NewLine); output.Append(Environment.NewLine); output.Append(GetDeleteFromTmpTable()); diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoDeleteByPkList.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoDeleteByPkList.cs index b4abaa2..10f4c2a 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoDeleteByPkList.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoDeleteByPkList.cs @@ -33,7 +33,7 @@ public override string Generate() var output = new StringBuilder(); output.Append(WriteMethodDef()); output.Append(Environment.NewLine); - output.Append(GetDapperDynaParamsForPkList()); + output.Append(WriteDapperDynaParamsForPkList()); output.Append(Environment.NewLine); output.Append(Environment.NewLine); output.Append(WriteReturnObj()); @@ -46,19 +46,19 @@ public override string Generate() return string.Empty; } - protected override string GetSqlPkListWhereClause() + protected override string WriteSqlPkListWhereClause() { - return PkColumns.Count() > 1 ? string.Empty : base.GetSqlPkListWhereClause(); + return PkColumns.Count() > 1 ? string.Empty : base.WriteSqlPkListWhereClause(); } - protected override string GetDapperDynaParamsForPkList() + protected override string WriteDapperDynaParamsForPkList() { - return PkColumns.Count() > 1 ? @$"{tab}{tab}{{/*Call bulk for composite pk*/" : base.GetDapperDynaParamsForPkList(); + return PkColumns.Count() > 1 ? @$"{tab}{tab}{{/*Call bulk for composite pk*/" : base.WriteDapperDynaParamsForPkList(); } - protected override string GetBaseSqlForDelete() + protected override string WriteBaseSqlForDelete() { - return PkColumns.Count() > 1 ? string.Empty : base.GetBaseSqlForDelete(); + return PkColumns.Count() > 1 ? string.Empty : base.WriteBaseSqlForDelete(); } protected override string WriteDapperCall() diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoGetByPkBulk.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoGetByPkBulk.cs index bc18b35..30ddccc 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoGetByPkBulk.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoGetByPkBulk.cs @@ -30,13 +30,13 @@ public override string Generate() output.Append(WriteOpenTransAndInitBulkMySql()); output.Append(Environment.NewLine); output.Append(Environment.NewLine); - output.Append(GetCreateDbTmpTableForPksMySql("get")); + output.Append(WriteCreateDbTmpTableForPksMySql("get")); output.Append(Environment.NewLine); output.Append(Environment.NewLine); - output.Append(GetCreateDataTableForPkMySql("get")); + output.Append(WriteCreateDataTableForPkMySql("get")); output.Append(Environment.NewLine); output.Append(Environment.NewLine); - output.Append(GetBulkCallMySql()); + output.Append(WriteBulkCallMySql()); output.Append(Environment.NewLine); output.Append(Environment.NewLine); output.Append(GetSelectFromTmpTable()); @@ -78,7 +78,7 @@ protected override string WriteDapperCall() protected virtual string GetSelectFromTmpTable() { var output = new StringBuilder(); - output.Append(@GetBaseSqlForSelect("t1.")); + output.Append(WriteBaseSqlForSelect("t1.")); output.Append(Environment.NewLine); output.Append($"{tab}{tab}{tab}INNER JOIN {ColAndTableIdentifier}tmp_bulkget_{Table.Name}{ColAndTableIdentifier} t2 ON " + Environment.NewLine + $"{tab}{tab}{tab}{tab}"); diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoGetByPkList.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoGetByPkList.cs index 69e7a34..add0037 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoGetByPkList.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoGetByPkList.cs @@ -33,7 +33,7 @@ public override string Generate() var output = new StringBuilder(); output.Append(WriteMethodDef()); output.Append(Environment.NewLine); - output.Append(GetDapperDynaParamsForPkList()); + output.Append(WriteDapperDynaParamsForPkList()); output.Append(Environment.NewLine); output.Append(Environment.NewLine); output.Append(WriteReturnObj()); @@ -46,14 +46,14 @@ public override string Generate() return string.Empty; } - protected override string GetSqlPkListWhereClause() + protected override string WriteSqlPkListWhereClause() { - return PkColumns.Count() > 1 ? string.Empty : base.GetSqlPkListWhereClause(); + return PkColumns.Count() > 1 ? string.Empty : base.WriteSqlPkListWhereClause(); } - protected override string GetDapperDynaParamsForPkList() + protected override string WriteDapperDynaParamsForPkList() { - return PkColumns.Count() > 1 ? @$"{tab}{tab}{{/*Call bulk for composite pk*/" : base.GetDapperDynaParamsForPkList(); + return PkColumns.Count() > 1 ? @$"{tab}{tab}{{/*Call bulk for composite pk*/" : base.WriteDapperDynaParamsForPkList(); } protected override string WriteReturnObj() diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoUpdateBulk.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoUpdateBulk.cs index 3b18ec1..7a911fd 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoUpdateBulk.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoUpdateBulk.cs @@ -37,7 +37,7 @@ public override string Generate() output.Append(GetCreateDataTable()); output.Append(Environment.NewLine); output.Append(Environment.NewLine); - output.Append(GetBulkCallMySql()); + output.Append(WriteBulkCallMySql()); output.Append(Environment.NewLine); output.Append(Environment.NewLine); output.Append(@GetUpdateFromTmpTable()); From c81f28b3519fd0a8aa439499e461e4f6d3a67ead Mon Sep 17 00:00:00 2001 From: Fabien Donnet Date: Fri, 2 Dec 2022 11:01:50 +0100 Subject: [PATCH 18/48] C# 11 litteral for DeleteRepo --- .../Generators/GeneratorForOperations.cs | 21 ++++++----- .../Generators/GeneratorRepoDelete.cs | 35 +++++++++---------- 2 files changed, 28 insertions(+), 28 deletions(-) diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorForOperations.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorForOperations.cs index bfc6384..1b997cf 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorForOperations.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorForOperations.cs @@ -50,10 +50,11 @@ protected string WriteBaseSqlForInsert() protected virtual string WriteBaseSqlForDelete() { return - $$""" - {{tab}}{{tab}}{{tab}}var sql = @" + $$"""" + {{tab}}{{tab}}{{tab}}var sql = + {{tab}}{{tab}}{{tab}}$""" {{tab}}{{tab}}{{tab}}DELETE FROM {{ColAndTableIdentifier}}{{Table.Name}}{{ColAndTableIdentifier}} - """; + """"; } protected virtual string WriteValuesToInsert() @@ -156,17 +157,19 @@ protected virtual string WriteSqlWhereClauseForPk() })); return - $""" - {tab}{tab}{tab}WHERE {whereClause}"; - """; + $"""" + {tab}{tab}{tab}WHERE {whereClause} + {tab}{tab}{tab}"""; + """"; } protected virtual string WriteSqlPkListWhereClause() { return - $""" - {tab}{tab}{tab}WHERE {ColAndTableIdentifier}{PkColumns.First().Name}{ColAndTableIdentifier} IN @listOf"; - """; + $"""" + {tab}{tab}{tab}WHERE {ColAndTableIdentifier}{PkColumns.First().Name}{ColAndTableIdentifier} IN @listOf + {tab}{tab}{tab}"""; + """"; } protected virtual string WriteOpenTransAndInitBulkMySql() diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoDelete.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoDelete.cs index 3a8c15f..ce7fde8 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoDelete.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoDelete.cs @@ -27,23 +27,18 @@ public override string Generate() if (!PkColumns.Any()) throw new ArgumentException($"You cannot run the Get by Pk Generator for table {Table.Name}, no pk defined"); - var output = new StringBuilder(); - output.Append(WriteMethodDef()); - output.Append(Environment.NewLine); - output.Append(WriteDapperDynaParamsForPk()); - output.Append(Environment.NewLine); - output.Append(Environment.NewLine); - output.Append(WriteBaseSqlForDelete()); - output.Append(Environment.NewLine); - output.Append(WriteSqlWhereClauseForPk()); - output.Append(Environment.NewLine); - output.Append(Environment.NewLine); - output.Append(WriteDapperCall()); - output.Append(Environment.NewLine); - output.Append($"{tab}{tab}}}"); - output.Append(Environment.NewLine); + return + $$""" + {{WriteMethodDef()}} + {{WriteDapperDynaParamsForPk()}} - return output.ToString(); + {{WriteBaseSqlForDelete()}} + {{WriteSqlWhereClauseForPk()}} + + {{WriteDapperCall()}} + {{tab}}{{tab}}} + + """; } return string.Empty; @@ -51,9 +46,11 @@ public override string Generate() protected override string WriteMethodDef() { - return $"{tab}{tab}public {(IsBase ? "virtual" : "override")} async Task DeleteAsync({GetPkMemberNamesStringAndType()})" + - @$" -{tab}{tab}{{"; + return + $$""" + {{tab}}{{tab}}public {{(IsBase ? "virtual" : "override")}} async Task DeleteAsync({{GetPkMemberNamesStringAndType()}}) + {{tab}}{{tab}}{ + """; } protected override string WriteDapperCall() From a634979994ae5f375ba96da26533ae6ce338e072 Mon Sep 17 00:00:00 2001 From: Fabien Donnet Date: Fri, 2 Dec 2022 11:06:45 +0100 Subject: [PATCH 19/48] Test delete repo standard and composite PK --- .../Dapper-Layers-Generator.Test.csproj | 4 ++ .../Generators/GenertatorRepoDelete_Tests.cs | 55 +++++++++++++++++++ .../GeneratorRepoDelete_ResultCompositePk.txt | 15 +++++ .../GeneratorRepoDelete_ResultStandard.txt | 13 +++++ 4 files changed, 87 insertions(+) create mode 100644 test/Dapper-Layers-Generator.Test/Generators/GenertatorRepoDelete_Tests.cs create mode 100644 test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoDelete_ResultCompositePk.txt create mode 100644 test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoDelete_ResultStandard.txt diff --git a/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj b/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj index 570605f..a1b94f7 100644 --- a/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj +++ b/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj @@ -21,6 +21,8 @@ + + @@ -59,6 +61,8 @@ + + diff --git a/test/Dapper-Layers-Generator.Test/Generators/GenertatorRepoDelete_Tests.cs b/test/Dapper-Layers-Generator.Test/Generators/GenertatorRepoDelete_Tests.cs new file mode 100644 index 0000000..5651d1a --- /dev/null +++ b/test/Dapper-Layers-Generator.Test/Generators/GenertatorRepoDelete_Tests.cs @@ -0,0 +1,55 @@ +using Dapper_Layers_Generator.Core.Converters.MySql; +using Dapper_Layers_Generator.Core.Converters; +using Dapper_Layers_Generator.Core.Generators; +using Dapper_Layers_Generator.Test.Config; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Dapper_Layers_Generator.Test.Generators +{ + public class GenertatorRepoDelete_Tests : GeneratorBaseTest + { + private MySqlDataTypeConverter _dataConverter; + private StringTransformationService _transformString; + + public GenertatorRepoDelete_Tests() : base() + { + _dataConverter = new MySqlDataTypeConverter(); + _transformString = new StringTransformationService(_settings); + } + + [Fact()] + public void GenerateStandard_Test() + { + //Arrange + var generator = new GeneratorRepoDelete(_settings, _mockDbDefinitions.Object, _transformString, _dataConverter); + generator.SetTable("clients"); + var expected = ResourceTool.Read("Dapper_Layers_Generator.Test/Results/Generators/GeneratorRepoDelete_ResultStandard.txt"); + + //Act + var result = generator.Generate(); + + //Assert + Assert.Equal(expected, result); + } + + [Fact()] + public void GenerateCompositePk_Test() + { + //Arrange + var generator = new GeneratorRepoDelete(_settings, _mockDbDefinitions.Object, _transformString, _dataConverter); + generator.SetTable("damages_failures"); + var expected = ResourceTool.Read("Dapper_Layers_Generator.Test/Results/Generators/GeneratorRepoDelete_ResultCompositePk.txt"); + + //Act + var result = generator.Generate(); + + //Assert + Assert.Equal(expected, result); + } + + } +} diff --git a/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoDelete_ResultCompositePk.txt b/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoDelete_ResultCompositePk.txt new file mode 100644 index 0000000..96adf97 --- /dev/null +++ b/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoDelete_ResultCompositePk.txt @@ -0,0 +1,15 @@ + public virtual async Task DeleteAsync(int damageId, int failureId) + { + var p = new DynamicParameters(); + p.Add("@damage_id",damageId); + p.Add("@failure_id",failureId); + + var sql = + $""" + DELETE FROM damages_failures + WHERE damage_id = @damage_id + AND failure_id = @failure_id + """; + + _ = await _dbContext.Connection.ExecuteAsync(sql,p,transaction:_dbContext.Transaction); + } diff --git a/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoDelete_ResultStandard.txt b/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoDelete_ResultStandard.txt new file mode 100644 index 0000000..e7a2256 --- /dev/null +++ b/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoDelete_ResultStandard.txt @@ -0,0 +1,13 @@ + public virtual async Task DeleteAsync(int id) + { + var p = new DynamicParameters(); + p.Add("@id",id); + + var sql = + $""" + DELETE FROM clients + WHERE id = @id + """; + + _ = await _dbContext.Connection.ExecuteAsync(sql,p,transaction:_dbContext.Transaction); + } From 012c4fbb4fa7fb13a581361d136b0c71ad0ae170 Mon Sep 17 00:00:00 2001 From: Fabien Donnet Date: Fri, 2 Dec 2022 11:44:05 +0100 Subject: [PATCH 20/48] c# string litteral on Deletebulk repo generator --- .../Generators/GeneratorForOperations.cs | 15 +++- .../Generators/GeneratorRepoDeleteBulk.cs | 18 ++-- .../MySql/MySqlGeneratorRepoDeleteBulk.cs | 84 ++++++++----------- 3 files changed, 56 insertions(+), 61 deletions(-) diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorForOperations.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorForOperations.cs index 1b997cf..aebb28d 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorForOperations.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorForOperations.cs @@ -248,7 +248,7 @@ protected virtual string WriteCreateDataTableForPkMySql(string opCode) {{tab}}{{tab}}{{tab}}{{tab}}colMappings.Add(new MySqlBulkCopyColumnMapping(i, col.ColumnName)); {{tab}}{{tab}}{{tab}}{{tab}}i++; {{tab}}{{tab}}{{tab}}} - + {{tab}}{{tab}}{{tab}} {{tab}}{{tab}}{{tab}}bulkCopy.ColumnMappings.AddRange(colMappings); """; } @@ -266,10 +266,17 @@ protected virtual string WriteCreateDbTmpTableForPksMySql(string opCode) $".Connection.ExecuteAsync(sqltmp,transaction:_{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.Transaction);"; return - $""" - {tab}{tab}{tab}var sqltmp = @"CREATE TEMPORARY TABLE {ColAndTableIdentifier}tmp_bulk{opCode}_{Table.Name}{ColAndTableIdentifier} ({createColumns});"; + $"""" + {tab}{tab}{tab}var sqltmp = + {tab}{tab}{tab}$""" + {tab}{tab}{tab}CREATE TEMPORARY TABLE {ColAndTableIdentifier}tmp_bulk{opCode}_{Table.Name}{ColAndTableIdentifier} + {tab}{tab}{tab}( + {tab}{tab}{tab}{tab}{createColumns} + {tab}{tab}{tab}); + {tab}{tab}{tab}"""; + {tab}{tab}{tab} {functionCall}; - """; + """"; } protected abstract string WriteMethodDef(); diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoDeleteBulk.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoDeleteBulk.cs index 04db9b9..26132a0 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoDeleteBulk.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoDeleteBulk.cs @@ -24,14 +24,15 @@ public override string Generate() { if (TableSettings.DeleteBulkGenerator && !string.IsNullOrEmpty(GetPkMemberNamesString())) { - var output = new StringBuilder(); - output.Append(WriteMethodDef()); if (!IsBase) { //Will se if we can use some part of code for multi db providers for the moment the implementation is in MySql only child class } - return output.ToString(); + return + $""" + {WriteMethodDef()} + """; } return string.Empty; @@ -39,11 +40,12 @@ public override string Generate() protected override string WriteMethodDef() { - return $"{tab}{tab}//Please use this bulk by batch depending on the mem available 1000 / 1500 rows" + Environment.NewLine + - $"{tab}{tab}public {(IsBase ? "abstract" : "override async")} Task DeleteBulkAsync({GetPkMemberNamesStringAndTypeList()})" + - $"{(IsBase ? ";" : string.Empty)}" + (!IsBase ? @$" -{tab}{tab}{{" : Environment.NewLine); - + return + $$""" + {{tab}}{{tab}}//Please use this bulk by batch depending on the mem available 1000 / 1500 rows + {{tab}}{{tab}}public {{(IsBase ? "abstract" : "override async")}} Task DeleteBulkAsync({{GetPkMemberNamesStringAndTypeList()}}){{(IsBase ? ";" : string.Empty)}} + {{(!IsBase ? @$"{tab}{tab}{{" : string.Empty)}} + """; } protected override string WriteDapperCall() diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoDeleteBulk.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoDeleteBulk.cs index 6ffb82d..ffac222 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoDeleteBulk.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoDeleteBulk.cs @@ -24,71 +24,57 @@ public override string Generate() { if (TableSettings.DeleteBulkGenerator && !string.IsNullOrEmpty(GetPkMemberNamesString())) { - var output = new StringBuilder(); - output.Append(WriteMethodDef()); - output.Append(Environment.NewLine); - output.Append(WriteOpenTransAndInitBulkMySql()); - output.Append(Environment.NewLine); - output.Append(Environment.NewLine); - output.Append(WriteCreateDbTmpTableForPksMySql("delete")); - output.Append(Environment.NewLine); - output.Append(Environment.NewLine); - output.Append(WriteCreateDataTableForPkMySql("delete")); - output.Append(Environment.NewLine); - output.Append(Environment.NewLine); - output.Append(WriteBulkCallMySql()); - output.Append(Environment.NewLine); - output.Append(Environment.NewLine); - output.Append(GetDeleteFromTmpTable()); - output.Append(Environment.NewLine); - output.Append(Environment.NewLine); - output.Append(WriteDapperCall()); - output.Append(Environment.NewLine); - output.Append(Environment.NewLine); - output.Append(WriteCloseTransaction()); - output.Append(Environment.NewLine); - output.Append($"{tab}{tab}}}"); - output.Append(Environment.NewLine); - output.Append(Environment.NewLine); - - return output.ToString(); + return + $$""" + {{WriteMethodDef()}} + {{WriteOpenTransAndInitBulkMySql()}} + + {{WriteCreateDbTmpTableForPksMySql("delete")}} + + {{WriteCreateDataTableForPkMySql("delete")}} + + {{WriteBulkCallMySql()}} + + {{WriteDeleteFromTmpTable()}} + + {{WriteDapperCall()}} + + {{WriteCloseTransaction()}} + {{tab}}{{tab}}} + + """; } return string.Empty; } - protected override string WriteDapperCall() { - var output = new StringBuilder($"{tab}{tab}{tab}_ = await _{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.Connection." + - $"ExecuteAsync(sql,transaction:_{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.Transaction);"); + return + $$""" + {{tab}}{{tab}}{{tab}}_ = await _{{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}}.Connection.ExecuteAsync(sql,transaction:_{{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}}.Transaction); - output.Append(Environment.NewLine); - output.Append(Environment.NewLine); - output.Append($"{tab}{tab}{tab}var sqlDrop = \"DROP TABLE {ColAndTableIdentifier}tmp_bulkdelete_{Table.Name}{ColAndTableIdentifier};\";"); - output.Append(Environment.NewLine); - output.Append($"{tab}{tab}{tab}_ = await _{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.Connection." + - $"ExecuteAsync(sqlDrop,transaction:_{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.Transaction);"); + {{tab}}{{tab}}{{tab}}var sqlDrop = "DROP TABLE {{ColAndTableIdentifier}}tmp_bulkdelete_{{Table.Name}}{{ColAndTableIdentifier}};"; - return output.ToString(); + {{tab}}{{tab}}{{tab}}_ = await _{{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}}.Connection.ExecuteAsync(sqlDrop,transaction:_{{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}}.Transaction); + """; } - protected virtual string GetDeleteFromTmpTable() + protected virtual string WriteDeleteFromTmpTable() { - var output = new StringBuilder(); - output.Append($"{tab}{tab}{tab}var sql = @\"DELETE t1 FROM {ColAndTableIdentifier}{Table.Name}{ColAndTableIdentifier} t1" + Environment.NewLine + - $"{tab}{tab}{tab}{tab}INNER JOIN {ColAndTableIdentifier}tmp_bulkdelete_{Table.Name}{ColAndTableIdentifier} t2 ON " + Environment.NewLine + - $"{tab}{tab}{tab}{tab}"); - //Delete fields var fields = String.Join($" AND ", PkColumns!.Select(c => $"t1.{ColAndTableIdentifier}{c.Name}{ColAndTableIdentifier} = t2.{ColAndTableIdentifier}{c.Name}{ColAndTableIdentifier}")); - output.Append(fields); - output.Append("\";"); - - return output.ToString(); - + return + $$"""" + {{tab}}{{tab}}{{tab}}var sql = + {{tab}}{{tab}}{{tab}}""" + {{tab}}{{tab}}{{tab}}DELETE t1 FROM {{ColAndTableIdentifier}}{{Table.Name}}{{ColAndTableIdentifier}} t1 + {{tab}}{{tab}}{{tab}}INNER JOIN {{ColAndTableIdentifier}}tmp_bulkdelete_{{Table.Name}}{{ColAndTableIdentifier}} t2 ON + {{tab}}{{tab}}{{tab}}{{fields}}; + {{tab}}{{tab}}{{tab}}"""; + """"; } } From 01f81be9b8531a1af7ed1edf8407e38017943993 Mon Sep 17 00:00:00 2001 From: Fabien Donnet Date: Fri, 2 Dec 2022 11:53:14 +0100 Subject: [PATCH 21/48] DeleteBulkRepo simple test standard and composite PK for MySql --- .../Dapper-Layers-Generator.Test.csproj | 4 ++ .../MySqlGenertatorRepoDeleteBulk_Tests.cs | 55 +++++++++++++++ ...eratorRepoDeleteBulk_ResultCompositePk.txt | 67 +++++++++++++++++++ ...GeneratorRepoDeleteBulk_ResultStandard.txt | 64 ++++++++++++++++++ 4 files changed, 190 insertions(+) create mode 100644 test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGenertatorRepoDeleteBulk_Tests.cs create mode 100644 test/Dapper-Layers-Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoDeleteBulk_ResultCompositePk.txt create mode 100644 test/Dapper-Layers-Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoDeleteBulk_ResultStandard.txt diff --git a/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj b/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj index a1b94f7..87bf0fc 100644 --- a/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj +++ b/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj @@ -27,6 +27,8 @@ + + @@ -67,6 +69,8 @@ + + diff --git a/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGenertatorRepoDeleteBulk_Tests.cs b/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGenertatorRepoDeleteBulk_Tests.cs new file mode 100644 index 0000000..e0c3166 --- /dev/null +++ b/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGenertatorRepoDeleteBulk_Tests.cs @@ -0,0 +1,55 @@ +using Dapper_Layers_Generator.Core.Converters.MySql; +using Dapper_Layers_Generator.Core.Converters; +using Dapper_Layers_Generator.Core.Generators; +using Dapper_Layers_Generator.Test.Config; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Dapper_Layers_Generator.Core.Generators.MySql; + +namespace Dapper_Layers_Generator.Test.Generators.MySql +{ + public class MySqlGenertatorRepoDeleteBulk_Tests : GeneratorBaseTest + { + private MySqlDataTypeConverter _dataConverter; + private StringTransformationService _transformString; + + public MySqlGenertatorRepoDeleteBulk_Tests() : base() + { + _dataConverter = new MySqlDataTypeConverter(); + _transformString = new StringTransformationService(_settings); + } + + [Fact()] + public void GenerateStandard_Test() + { + //Arrange + var generator = new MySqlGeneratorRepoDeleteBulk(_settings, _mockDbDefinitions.Object, _transformString, _dataConverter); + generator.SetTable("clients"); + var expected = ResourceTool.Read("Dapper_Layers_Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoDeleteBulk_ResultStandard.txt"); + + //Act + var result = generator.Generate(); + + //Assert + Assert.Equal(expected, result); + } + + [Fact()] + public void GenerateCompositePk_Test() + { + //Arrange + var generator = new MySqlGeneratorRepoDeleteBulk(_settings, _mockDbDefinitions.Object, _transformString, _dataConverter); + generator.SetTable("damages_failures"); + var expected = ResourceTool.Read("Dapper_Layers_Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoDeleteBulk_ResultCompositePk.txt"); + + //Act + var result = generator.Generate(); + + //Assert + Assert.Equal(expected, result); + } + } +} diff --git a/test/Dapper-Layers-Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoDeleteBulk_ResultCompositePk.txt b/test/Dapper-Layers-Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoDeleteBulk_ResultCompositePk.txt new file mode 100644 index 0000000..848c4f5 --- /dev/null +++ b/test/Dapper-Layers-Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoDeleteBulk_ResultCompositePk.txt @@ -0,0 +1,67 @@ + //Please use this bulk by batch depending on the mem available 1000 / 1500 rows + public override async Task DeleteBulkAsync(IEnumerable<(int, int)> listOfDamageIdAndFailureId) + { + var isTransAlreadyOpen = _dbContext.Transaction != null; + + if (!isTransAlreadyOpen) + await _dbContext.OpenTransactionAsync(); + + var bulkCopy = new MySqlBulkCopy((MySqlConnection)_dbContext.Connection + , (MySqlTransaction?)_dbContext.Transaction); + + var sqltmp = + $""" + CREATE TEMPORARY TABLE `tmp_bulkdelete_damages_failures` + ( + damage_id int(11) + , failure_id int(11) + ); + """; + + _ = await _dbContext.Connection.ExecuteAsync(sqltmp,transaction:_dbContext.Transaction);; + + var table = new DataTable(); + table.Columns.Add("damage_id",typeof(int)); + table.Columns.Add("failure_id",typeof(int)); + bulkCopy.DestinationTableName = "tmp_bulkdelete_damages_failures"; + bulkCopy.BulkCopyTimeout = 600; + + foreach(var identity in listOfDamageIdAndFailureId) + { + DataRow r = table.NewRow(); + r["damage_id"] = identity.Item1; + r["failure_id"] = identity.Item2; + table.Rows.Add(r); + } + + List colMappings = new(); + int i = 0; + foreach (DataColumn col in table.Columns) + { + colMappings.Add(new MySqlBulkCopyColumnMapping(i, col.ColumnName)); + i++; + } + + bulkCopy.ColumnMappings.AddRange(colMappings); + + await bulkCopy.WriteToServerAsync(table); + + var sql = + """ + DELETE t1 FROM `damages_failures` t1 + INNER JOIN `tmp_bulkdelete_damages_failures` t2 ON + t1.`damage_id` = t2.`damage_id` AND t1.`failure_id` = t2.`failure_id`; + """; + + _ = await _dbContext.Connection.ExecuteAsync(sql,transaction:_dbContext.Transaction); + + var sqlDrop = "DROP TABLE `tmp_bulkdelete_damages_failures`;"; + + _ = await _dbContext.Connection.ExecuteAsync(sqlDrop,transaction:_dbContext.Transaction); + + if (!isTransAlreadyOpen) + { + _dbContext.CommitTransaction(); + _dbContext.Connection.Close(); + } + } diff --git a/test/Dapper-Layers-Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoDeleteBulk_ResultStandard.txt b/test/Dapper-Layers-Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoDeleteBulk_ResultStandard.txt new file mode 100644 index 0000000..f69a0ff --- /dev/null +++ b/test/Dapper-Layers-Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoDeleteBulk_ResultStandard.txt @@ -0,0 +1,64 @@ + //Please use this bulk by batch depending on the mem available 1000 / 1500 rows + public override async Task DeleteBulkAsync(IEnumerable listOfId) + { + var isTransAlreadyOpen = _dbContext.Transaction != null; + + if (!isTransAlreadyOpen) + await _dbContext.OpenTransactionAsync(); + + var bulkCopy = new MySqlBulkCopy((MySqlConnection)_dbContext.Connection + , (MySqlTransaction?)_dbContext.Transaction); + + var sqltmp = + $""" + CREATE TEMPORARY TABLE `tmp_bulkdelete_clients` + ( + id int(11) + ); + """; + + _ = await _dbContext.Connection.ExecuteAsync(sqltmp,transaction:_dbContext.Transaction);; + + var table = new DataTable(); + table.Columns.Add("id",typeof(int)); + bulkCopy.DestinationTableName = "tmp_bulkdelete_clients"; + bulkCopy.BulkCopyTimeout = 600; + + foreach(var identity in listOfId) + { + DataRow r = table.NewRow(); + r["id"] = identity; + table.Rows.Add(r); + } + + List colMappings = new(); + int i = 0; + foreach (DataColumn col in table.Columns) + { + colMappings.Add(new MySqlBulkCopyColumnMapping(i, col.ColumnName)); + i++; + } + + bulkCopy.ColumnMappings.AddRange(colMappings); + + await bulkCopy.WriteToServerAsync(table); + + var sql = + """ + DELETE t1 FROM `clients` t1 + INNER JOIN `tmp_bulkdelete_clients` t2 ON + t1.`id` = t2.`id`; + """; + + _ = await _dbContext.Connection.ExecuteAsync(sql,transaction:_dbContext.Transaction); + + var sqlDrop = "DROP TABLE `tmp_bulkdelete_clients`;"; + + _ = await _dbContext.Connection.ExecuteAsync(sqlDrop,transaction:_dbContext.Transaction); + + if (!isTransAlreadyOpen) + { + _dbContext.CommitTransaction(); + _dbContext.Connection.Close(); + } + } From 1f4c76e629678047212ea079b89be737c886a365 Mon Sep 17 00:00:00 2001 From: Fabien Donnet Date: Fri, 2 Dec 2022 12:57:54 +0100 Subject: [PATCH 22/48] DeleteByPkList c# string litteral --- .../Generators/GeneratorRepoDeleteByPkList.cs | 53 ++++++++++--------- .../MySql/MySqlGeneratorRepoDeleteByPkList.cs | 20 ++++--- 2 files changed, 37 insertions(+), 36 deletions(-) diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoDeleteByPkList.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoDeleteByPkList.cs index dfeeee0..52b859a 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoDeleteByPkList.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoDeleteByPkList.cs @@ -26,41 +26,44 @@ public override string Generate() if (!PkColumns.Any()) throw new ArgumentException($"You cannot run the Delete by PkList Generator for table {Table.Name}, no pk defined"); - var output = new StringBuilder(); - output.Append(WriteMethodDef()); + var output = string.Empty; if (PkColumns.Count() == 1 || !IsBase) { - output.Append(Environment.NewLine); - output.Append(WriteDapperDynaParamsForPkList()); - output.Append(Environment.NewLine); - output.Append(Environment.NewLine); - output.Append(WriteBaseSqlForDelete()); - output.Append(Environment.NewLine); - output.Append(WriteSqlPkListWhereClause()); - output.Append(Environment.NewLine); - output.Append(Environment.NewLine); - output.Append(WriteDapperCall()); - output.Append(WriteReturnObj()); - output.Append(Environment.NewLine); - output.Append($"{tab}{tab}}}"); + output = + $$""" + {{WriteDapperDynaParamsForPkList()}} + + {{WriteBaseSqlForDelete()}} + {{WriteSqlPkListWhereClause()}} + + {{WriteDapperCall()}} + {{tab}}{{tab}}} + + """; } - output.Append(Environment.NewLine); - return output.ToString(); + return + $$""" + {{WriteMethodDef()}} + {{output}} + """; } - return string.Empty; } protected override string WriteMethodDef() { - return PkColumns.Count() > 1 - ? $"{tab}{tab}public {(IsBase ? "abstract" : "override async")} " + - $"Task DeleteAsync({GetPkMemberNamesStringAndTypeList()}){(IsBase ? ";" : String.Empty)}" - : $"{tab}{tab}public {(IsBase ? "virtual" : "override")} " + - $"async Task DeleteAsync({GetPkMemberNamesStringAndTypeList()})" + - @$" -{tab}{tab}{{"; + if (PkColumns.Count() > 1) + return + $$""" + {{tab}}{{tab}}public {{(IsBase ? "abstract" : "override async")}} Task DeleteAsync({{GetPkMemberNamesStringAndTypeList()}}){{(IsBase ? ";" : String.Empty)}} + """; + else + return + $$""" + {{tab}}{{tab}}public {{(IsBase ? "virtual" : "override")}} async Task DeleteAsync({{GetPkMemberNamesStringAndTypeList()}}) + { + """; } protected override string WriteDapperCall() diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoDeleteByPkList.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoDeleteByPkList.cs index 10f4c2a..b3e9550 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoDeleteByPkList.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoDeleteByPkList.cs @@ -30,17 +30,15 @@ public override string Generate() if (!PkColumns.Any()) throw new ArgumentException($"You cannot run the Delete by PkList Generator for table {Table.Name}, no pk defined"); - var output = new StringBuilder(); - output.Append(WriteMethodDef()); - output.Append(Environment.NewLine); - output.Append(WriteDapperDynaParamsForPkList()); - output.Append(Environment.NewLine); - output.Append(Environment.NewLine); - output.Append(WriteReturnObj()); - output.Append(Environment.NewLine); - output.Append($"{tab}{tab}}}"); - output.Append(Environment.NewLine); - return output.ToString(); + return + $$""" + {{WriteMethodDef()}} + {{WriteDapperDynaParamsForPkList()}} + + {{WriteReturnObj()}} + {{tab}}{{tab}}} + + """; } return string.Empty; From 9c8dc9bbdf6bbfb95cac904253ad7a9baf66db82 Mon Sep 17 00:00:00 2001 From: Fabien Donnet Date: Fri, 2 Dec 2022 13:15:54 +0100 Subject: [PATCH 23/48] DeleteByPkList simple tests --- .../Generators/GeneratorRepoDeleteByPkList.cs | 2 +- .../Dapper-Layers-Generator.Test.csproj | 8 +++ ...ests.cs => GeneratorRepoAddMulti_Tests.cs} | 4 +- ...Add_Tests.cs => GeneratorRepoAdd_Tests.cs} | 4 +- .../GeneratorRepoDeleteByPkList_Test.cs | 56 +++++++++++++++++++ ..._Tests.cs => GeneratorRepoDelete_Tests.cs} | 4 +- ... => MySqlGeneratorRepoDeleteBulk_Tests.cs} | 4 +- .../MySqlGeneratorRepoDeleteByPkList_Tests.cs | 55 ++++++++++++++++++ ...orRepoDeleteByPkList_ResultCompositePk.txt | 1 + ...ratorRepoDeleteByPkList_ResultStandard.txt | 13 +++++ ...orRepoDeleteByPkList_ResultCompositePk.txt | 5 ++ ...ratorRepoDeleteByPkList_ResultStandard.txt | 13 +++++ 12 files changed, 160 insertions(+), 9 deletions(-) rename test/Dapper-Layers-Generator.Test/Generators/{GenertatorRepoAddMulti_Tests.cs => GeneratorRepoAddMulti_Tests.cs} (90%) rename test/Dapper-Layers-Generator.Test/Generators/{GenertatorRepoAdd_Tests.cs => GeneratorRepoAdd_Tests.cs} (94%) create mode 100644 test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoDeleteByPkList_Test.cs rename test/Dapper-Layers-Generator.Test/Generators/{GenertatorRepoDelete_Tests.cs => GeneratorRepoDelete_Tests.cs} (93%) rename test/Dapper-Layers-Generator.Test/Generators/MySql/{MySqlGenertatorRepoDeleteBulk_Tests.cs => MySqlGeneratorRepoDeleteBulk_Tests.cs} (93%) create mode 100644 test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorRepoDeleteByPkList_Tests.cs create mode 100644 test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoDeleteByPkList_ResultCompositePk.txt create mode 100644 test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoDeleteByPkList_ResultStandard.txt create mode 100644 test/Dapper-Layers-Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoDeleteByPkList_ResultCompositePk.txt create mode 100644 test/Dapper-Layers-Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoDeleteByPkList_ResultStandard.txt diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoDeleteByPkList.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoDeleteByPkList.cs index 52b859a..94fe88c 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoDeleteByPkList.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoDeleteByPkList.cs @@ -62,7 +62,7 @@ protected override string WriteMethodDef() return $$""" {{tab}}{{tab}}public {{(IsBase ? "virtual" : "override")}} async Task DeleteAsync({{GetPkMemberNamesStringAndTypeList()}}) - { + {{tab}}{{tab}}{ """; } diff --git a/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj b/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj index 87bf0fc..7a270ad 100644 --- a/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj +++ b/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj @@ -21,6 +21,8 @@ + + @@ -29,6 +31,8 @@ + + @@ -63,6 +67,8 @@ + + @@ -71,6 +77,8 @@ + + diff --git a/test/Dapper-Layers-Generator.Test/Generators/GenertatorRepoAddMulti_Tests.cs b/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoAddMulti_Tests.cs similarity index 90% rename from test/Dapper-Layers-Generator.Test/Generators/GenertatorRepoAddMulti_Tests.cs rename to test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoAddMulti_Tests.cs index cd78091..6d80f3d 100644 --- a/test/Dapper-Layers-Generator.Test/Generators/GenertatorRepoAddMulti_Tests.cs +++ b/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoAddMulti_Tests.cs @@ -10,12 +10,12 @@ namespace Dapper_Layers_Generator.Test.Generators { - public class GenertatorRepoAddMulti_Tests : GeneratorBaseTest + public class GeneratorRepoAddMulti_Tests : GeneratorBaseTest { private MySqlDataTypeConverter _dataConverter; private StringTransformationService _transformString; - public GenertatorRepoAddMulti_Tests() : base() + public GeneratorRepoAddMulti_Tests() : base() { _dataConverter = new MySqlDataTypeConverter(); _transformString = new StringTransformationService(_settings); diff --git a/test/Dapper-Layers-Generator.Test/Generators/GenertatorRepoAdd_Tests.cs b/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoAdd_Tests.cs similarity index 94% rename from test/Dapper-Layers-Generator.Test/Generators/GenertatorRepoAdd_Tests.cs rename to test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoAdd_Tests.cs index 047ce45..ad286c7 100644 --- a/test/Dapper-Layers-Generator.Test/Generators/GenertatorRepoAdd_Tests.cs +++ b/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoAdd_Tests.cs @@ -11,12 +11,12 @@ namespace Dapper_Layers_Generator.Test.Generators { - public class GenertatorRepoAdd_Tests : GeneratorBaseTest + public class GeneratorRepoAdd_Tests : GeneratorBaseTest { private MySqlDataTypeConverter _dataConverter; private StringTransformationService _transformString; - public GenertatorRepoAdd_Tests() : base() + public GeneratorRepoAdd_Tests() : base() { _dataConverter = new MySqlDataTypeConverter(); _transformString = new StringTransformationService(_settings); diff --git a/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoDeleteByPkList_Test.cs b/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoDeleteByPkList_Test.cs new file mode 100644 index 0000000..1c4012f --- /dev/null +++ b/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoDeleteByPkList_Test.cs @@ -0,0 +1,56 @@ +using Dapper_Layers_Generator.Core.Converters.MySql; +using Dapper_Layers_Generator.Core.Converters; +using Dapper_Layers_Generator.Core.Generators.MySql; +using Dapper_Layers_Generator.Test.Config; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Dapper_Layers_Generator.Core.Generators; + +namespace Dapper_Layers_Generator.Test.Generators +{ + public class GeneratorRepoDeleteByPkList_Test : GeneratorBaseTest + { + private MySqlDataTypeConverter _dataConverter; + private StringTransformationService _transformString; + + public GeneratorRepoDeleteByPkList_Test() : base() + { + _dataConverter = new MySqlDataTypeConverter(); + _transformString = new StringTransformationService(_settings); + } + + [Fact()] + public void GenerateStandard_Test() + { + //Arrange + var generator = new GeneratorRepoDeleteByPkList(_settings, _mockDbDefinitions.Object, _transformString, _dataConverter); + generator.SetTable("clients"); + var expected = ResourceTool.Read("Dapper_Layers_Generator.Test/Results/Generators/GeneratorRepoDeleteByPkList_ResultStandard.txt"); + + //Act + var result = generator.Generate(); + + //Assert + Assert.Equal(expected, result); + } + + [Fact()] + public void GenerateCompositePk_Test() + { + //Arrange + var generator = new GeneratorRepoDeleteByPkList(_settings, _mockDbDefinitions.Object, _transformString, _dataConverter); + generator.SetTable("damages_failures"); + var expected = ResourceTool.Read("Dapper_Layers_Generator.Test/Results/Generators/GeneratorRepoDeleteByPkList_ResultCompositePk.txt"); + + //Act + var result = generator.Generate(); + + //Assert + Assert.Equal(expected, result); + } + + } +} diff --git a/test/Dapper-Layers-Generator.Test/Generators/GenertatorRepoDelete_Tests.cs b/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoDelete_Tests.cs similarity index 93% rename from test/Dapper-Layers-Generator.Test/Generators/GenertatorRepoDelete_Tests.cs rename to test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoDelete_Tests.cs index 5651d1a..d4297ed 100644 --- a/test/Dapper-Layers-Generator.Test/Generators/GenertatorRepoDelete_Tests.cs +++ b/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoDelete_Tests.cs @@ -10,12 +10,12 @@ namespace Dapper_Layers_Generator.Test.Generators { - public class GenertatorRepoDelete_Tests : GeneratorBaseTest + public class GeneratorRepoDelete_Tests : GeneratorBaseTest { private MySqlDataTypeConverter _dataConverter; private StringTransformationService _transformString; - public GenertatorRepoDelete_Tests() : base() + public GeneratorRepoDelete_Tests() : base() { _dataConverter = new MySqlDataTypeConverter(); _transformString = new StringTransformationService(_settings); diff --git a/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGenertatorRepoDeleteBulk_Tests.cs b/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorRepoDeleteBulk_Tests.cs similarity index 93% rename from test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGenertatorRepoDeleteBulk_Tests.cs rename to test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorRepoDeleteBulk_Tests.cs index e0c3166..1c5a11e 100644 --- a/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGenertatorRepoDeleteBulk_Tests.cs +++ b/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorRepoDeleteBulk_Tests.cs @@ -11,12 +11,12 @@ namespace Dapper_Layers_Generator.Test.Generators.MySql { - public class MySqlGenertatorRepoDeleteBulk_Tests : GeneratorBaseTest + public class MySqlGeneratorRepoDeleteBulk_Tests : GeneratorBaseTest { private MySqlDataTypeConverter _dataConverter; private StringTransformationService _transformString; - public MySqlGenertatorRepoDeleteBulk_Tests() : base() + public MySqlGeneratorRepoDeleteBulk_Tests() : base() { _dataConverter = new MySqlDataTypeConverter(); _transformString = new StringTransformationService(_settings); diff --git a/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorRepoDeleteByPkList_Tests.cs b/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorRepoDeleteByPkList_Tests.cs new file mode 100644 index 0000000..34ab1b4 --- /dev/null +++ b/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorRepoDeleteByPkList_Tests.cs @@ -0,0 +1,55 @@ +using Dapper_Layers_Generator.Core.Converters.MySql; +using Dapper_Layers_Generator.Core.Converters; +using Dapper_Layers_Generator.Core.Generators; +using Dapper_Layers_Generator.Test.Config; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Dapper_Layers_Generator.Core.Generators.MySql; + +namespace Dapper_Layers_Generator.Test.Generators.MySql +{ + public class MySqlGeneratorRepoDeleteByPkList_Tests : GeneratorBaseTest + { + private MySqlDataTypeConverter _dataConverter; + private StringTransformationService _transformString; + + public MySqlGeneratorRepoDeleteByPkList_Tests() : base() + { + _dataConverter = new MySqlDataTypeConverter(); + _transformString = new StringTransformationService(_settings); + } + + [Fact()] + public void GenerateStandard_Test() + { + //Arrange + var generator = new MySqlGeneratorRepoDeleteByPkList(_settings, _mockDbDefinitions.Object, _transformString, _dataConverter); + generator.SetTable("clients"); + var expected = ResourceTool.Read("Dapper_Layers_Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoDeleteByPkList_ResultStandard.txt"); + + //Act + var result = generator.Generate(); + + //Assert + Assert.Equal(expected, result); + } + + [Fact()] + public void GenerateCompositePk_Test() + { + //Arrange + var generator = new MySqlGeneratorRepoDeleteByPkList(_settings, _mockDbDefinitions.Object, _transformString, _dataConverter); + generator.SetTable("damages_failures"); + var expected = ResourceTool.Read("Dapper_Layers_Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoDeleteByPkList_ResultCompositePk.txt"); + + //Act + var result = generator.Generate(); + + //Assert + Assert.Equal(expected, result); + } + } +} diff --git a/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoDeleteByPkList_ResultCompositePk.txt b/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoDeleteByPkList_ResultCompositePk.txt new file mode 100644 index 0000000..90396b2 --- /dev/null +++ b/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoDeleteByPkList_ResultCompositePk.txt @@ -0,0 +1 @@ + public abstract Task DeleteAsync(IEnumerable<(int, int)> listOfDamageIdAndFailureId); diff --git a/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoDeleteByPkList_ResultStandard.txt b/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoDeleteByPkList_ResultStandard.txt new file mode 100644 index 0000000..ce87063 --- /dev/null +++ b/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoDeleteByPkList_ResultStandard.txt @@ -0,0 +1,13 @@ + public virtual async Task DeleteAsync(IEnumerable listOfId) + { + var p = new DynamicParameters(); + p.Add("@listOf",listOfId); + + var sql = + $""" + DELETE FROM clients + WHERE id IN @listOf + """; + + _ = await _dbContext.Connection.ExecuteAsync(sql,p,transaction:_dbContext.Transaction); + } diff --git a/test/Dapper-Layers-Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoDeleteByPkList_ResultCompositePk.txt b/test/Dapper-Layers-Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoDeleteByPkList_ResultCompositePk.txt new file mode 100644 index 0000000..99faef0 --- /dev/null +++ b/test/Dapper-Layers-Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoDeleteByPkList_ResultCompositePk.txt @@ -0,0 +1,5 @@ + public override async Task DeleteAsync(IEnumerable<(int, int)> listOfDamageIdAndFailureId) + {/*Call bulk for composite pk*/ + + await DeleteBulkAsync(listOfDamageIdAndFailureId); + } diff --git a/test/Dapper-Layers-Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoDeleteByPkList_ResultStandard.txt b/test/Dapper-Layers-Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoDeleteByPkList_ResultStandard.txt new file mode 100644 index 0000000..8b44694 --- /dev/null +++ b/test/Dapper-Layers-Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoDeleteByPkList_ResultStandard.txt @@ -0,0 +1,13 @@ + public override async Task DeleteAsync(IEnumerable listOfId) + { + var p = new DynamicParameters(); + p.Add("@listOf",listOfId); + + var sql = + $""" + DELETE FROM `clients` + WHERE `id` IN @listOf + """; + + _ = await _dbContext.Connection.ExecuteAsync(sql,p,transaction:_dbContext.Transaction); + } From d900b558154a0e0c3451c04b191b7f27191c00cb Mon Sep 17 00:00:00 2001 From: Fabien Donnet Date: Fri, 2 Dec 2022 13:30:58 +0100 Subject: [PATCH 24/48] C# 11 string litteral GetAllRepo generator --- .../Generators/GeneratorForOperations.cs | 7 ++-- .../Generators/GeneratorRepoGetAll.cs | 34 ++++++++----------- 2 files changed, 19 insertions(+), 22 deletions(-) diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorForOperations.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorForOperations.cs index aebb28d..1a68691 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorForOperations.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorForOperations.cs @@ -21,11 +21,12 @@ protected string WriteBaseSqlForSelect(string tableIdentifier = "") throw new ArgumentException($"No column available for select for this table{Table.Name}, genererator crash"); return - $$""" - {{tab}}{{tab}}{{tab}}var sql = @" + $$"""" + {{tab}}{{tab}}{{tab}}var sql = + {{tab}}{{tab}}{{tab}}""" {{tab}}{{tab}}{{tab}}SELECT {{WriteColumnListStringForSelect(tableIdentifier)}} {{tab}}{{tab}}{{tab}}FROM {{ColAndTableIdentifier + Table.Name + ColAndTableIdentifier}} {{tableIdentifier.Replace(".", "")}} - """; + """"; } //Can maybe be used for BULK diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoGetAll.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoGetAll.cs index 4bc4a25..0e357fd 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoGetAll.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoGetAll.cs @@ -23,35 +23,31 @@ public override string Generate() { if (TableSettings.GetAllGenerator) { - var output = new StringBuilder(); - output.Append(WriteMethodDef()); - output.Append(Environment.NewLine); - output.Append(WriteBaseSqlForSelect()+ @""";"); - output.Append(Environment.NewLine); - output.Append(Environment.NewLine); - output.Append(WriteDapperCall()); + return + $$"""" + {{WriteMethodDef()}} + {{WriteBaseSqlForSelect()}} + {{tab}}{{tab}}{{tab}}"""; - output.Append(Environment.NewLine); - output.Append(Environment.NewLine); - output.Append(WriteReturnObj()); - output.Append(Environment.NewLine); - output.Append($"{tab}{tab}}}"); - output.Append(Environment.NewLine); + {{WriteDapperCall()}} - return output.ToString(); - } + {{WriteReturnObj()}} + {{tab}}{{tab}}} + """"; + } return string.Empty; } protected override string WriteMethodDef() { - return $"{tab}{tab}public {(IsBase?"virtual":"override")} async Task> GetAllAsync()" + - @$" -{tab}{tab}{{"; + return + $$""" + {{tab}}{{tab}}public {{(IsBase ? "virtual" : "override")}} async Task> GetAllAsync() + {{tab}}{{tab}}{ + """; } - protected override string WriteDapperCall() { return $"{tab}{tab}{tab}var {_stringTransform.PluralizeToLower(ClassName)} = " + From b6bba481368b07f50410ad2a3216710ad5dbf1c4 Mon Sep 17 00:00:00 2001 From: Fabien Donnet Date: Fri, 2 Dec 2022 13:34:25 +0100 Subject: [PATCH 25/48] Simple test for getall generator --- .../Dapper-Layers-Generator.Test.csproj | 2 + .../Generators/GeneratorRepoGetAll_Tests.cs | 39 +++++++++++++++++++ .../GeneratorRepoGetAll_ResultStandard.txt | 21 ++++++++++ 3 files changed, 62 insertions(+) create mode 100644 test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoGetAll_Tests.cs create mode 100644 test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoGetAll_ResultStandard.txt diff --git a/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj b/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj index 7a270ad..fc927d9 100644 --- a/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj +++ b/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj @@ -25,6 +25,7 @@ + @@ -71,6 +72,7 @@ + diff --git a/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoGetAll_Tests.cs b/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoGetAll_Tests.cs new file mode 100644 index 0000000..0494982 --- /dev/null +++ b/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoGetAll_Tests.cs @@ -0,0 +1,39 @@ +using Dapper_Layers_Generator.Core.Converters.MySql; +using Dapper_Layers_Generator.Core.Converters; +using Dapper_Layers_Generator.Core.Generators; +using Dapper_Layers_Generator.Test.Config; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Dapper_Layers_Generator.Test.Generators +{ + public class GeneratorRepoGetAll_Tests : GeneratorBaseTest + { + private MySqlDataTypeConverter _dataConverter; + private StringTransformationService _transformString; + + public GeneratorRepoGetAll_Tests() : base() + { + _dataConverter = new MySqlDataTypeConverter(); + _transformString = new StringTransformationService(_settings); + } + + [Fact()] + public void GenerateStandard_Test() + { + //Arrange + var generator = new GeneratorRepoGetAll(_settings, _mockDbDefinitions.Object, _transformString, _dataConverter); + generator.SetTable("clients"); + var expected = ResourceTool.Read("Dapper_Layers_Generator.Test/Results/Generators/GeneratorRepoGetAll_ResultStandard.txt"); + + //Act + var result = generator.Generate(); + + //Assert + Assert.Equal(expected, result); + } + } +} diff --git a/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoGetAll_ResultStandard.txt b/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoGetAll_ResultStandard.txt new file mode 100644 index 0000000..eecfb5a --- /dev/null +++ b/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoGetAll_ResultStandard.txt @@ -0,0 +1,21 @@ + public virtual async Task> GetAllAsync() + { + var sql = + """ + SELECT id + ,firstname + ,lastname + ,address + ,comment + ,created_at + ,postal + ,city + ,phone + ,email + FROM clients + """; + + var clients = await _dbContext.Connection.QueryAsync(sql,transaction:_dbContext.Transaction); + + return clients; + } From f67033475aedb48697e5277e991cead2db9ad3d6 Mon Sep 17 00:00:00 2001 From: Fabien Donnet Date: Fri, 2 Dec 2022 13:56:59 +0100 Subject: [PATCH 26/48] C# 11 string literal for GetByPk generator --- .../Generators/GeneratorRepoGetByPk.cs | 41 ++++++++----------- 1 file changed, 18 insertions(+), 23 deletions(-) diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoGetByPk.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoGetByPk.cs index 97af930..61aeb3d 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoGetByPk.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoGetByPk.cs @@ -27,36 +27,31 @@ public override string Generate() if (!PkColumns.Any()) throw new ArgumentException($"You cannot run the Get by Pk Generator for table {Table.Name}, no pk defined"); - var output = new StringBuilder(); - output.Append(WriteMethodDef()); - output.Append(Environment.NewLine); - output.Append(WriteDapperDynaParamsForPk()); - output.Append(Environment.NewLine); - output.Append(Environment.NewLine); - output.Append(WriteBaseSqlForSelect()); - output.Append(Environment.NewLine); - output.Append(WriteSqlWhereClauseForPk()); - output.Append(Environment.NewLine); - output.Append(Environment.NewLine); - output.Append(WriteDapperCall()); - output.Append(Environment.NewLine); - output.Append(Environment.NewLine); - output.Append(WriteReturnObj()); - output.Append(Environment.NewLine); - output.Append($"{tab}{tab}}}"); - output.Append(Environment.NewLine); + return + $$""" + {{WriteMethodDef()}} + {{WriteDapperDynaParamsForPk()}} - return output.ToString(); - } + {{WriteBaseSqlForSelect()}} + {{WriteSqlWhereClauseForPk()}} + + {{WriteDapperCall()}} + {{WriteReturnObj()}} + {{tab}}{{tab}}} + + """; + } return string.Empty; } protected override string WriteMethodDef() { - return $"{tab}{tab}public {(IsBase ? "virtual" : "override")} async Task<{ClassName}?> GetBy{GetPkMemberNamesString()}Async({GetPkMemberNamesStringAndType()})" + - @$" -{tab}{tab}{{"; + return + $$""" + {{tab}}{{tab}}public {{(IsBase ? "virtual" : "override")}} async Task<{{ClassName}}?> GetBy{{GetPkMemberNamesString()}}Async({{GetPkMemberNamesStringAndType()}}) + {{tab}}{{tab}}{ + """; } protected override string WriteDapperCall() From c796f4348c0aa61fe5b43b075781e89c596a3a45 Mon Sep 17 00:00:00 2001 From: Fabien Donnet Date: Fri, 2 Dec 2022 14:01:52 +0100 Subject: [PATCH 27/48] Simple test for generator get by pk + remove unecessary usings --- .../Dapper-Layers-Generator.Test.csproj | 2 ++ .../Generators/GeneratorBaseTest.cs | 5 --- .../GeneratorContextForBase_Tests.cs | 6 +--- .../Generators/GeneratorPOCO_Tests.cs | 9 +---- .../Generators/GeneratorRepoAddMulti_Tests.cs | 5 --- .../Generators/GeneratorRepoAdd_Tests.cs | 6 ---- .../GeneratorRepoDeleteByPkList_Test.cs | 6 ---- .../Generators/GeneratorRepoDelete_Tests.cs | 5 --- .../Generators/GeneratorRepoGetAll_Tests.cs | 5 --- .../Generators/GeneratorRepoGetByPk_Tests.cs | 34 +++++++++++++++++++ .../Generators/Generator_Tests.cs | 6 +--- .../MySql/MySqlGeneratorContext_Tests.cs | 13 +------ .../MySql/MySqlGeneratorRepoAddBulk_Test.cs | 5 --- .../MySql/MySqlGeneratorRepoAdd_Test.cs | 5 --- .../MySqlGeneratorRepoDeleteBulk_Tests.cs | 6 ---- .../MySqlGeneratorRepoDeleteByPkList_Tests.cs | 6 ---- .../GeneratorRepoGetByPk_ResultStandard.txt | 25 ++++++++++++++ 17 files changed, 65 insertions(+), 84 deletions(-) create mode 100644 test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoGetByPk_Tests.cs create mode 100644 test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoGetByPk_ResultStandard.txt diff --git a/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj b/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj index fc927d9..371f987 100644 --- a/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj +++ b/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj @@ -26,6 +26,7 @@ + @@ -73,6 +74,7 @@ + diff --git a/test/Dapper-Layers-Generator.Test/Generators/GeneratorBaseTest.cs b/test/Dapper-Layers-Generator.Test/Generators/GeneratorBaseTest.cs index 2e029b5..c51fb55 100644 --- a/test/Dapper-Layers-Generator.Test/Generators/GeneratorBaseTest.cs +++ b/test/Dapper-Layers-Generator.Test/Generators/GeneratorBaseTest.cs @@ -1,11 +1,6 @@ using Dapper_Layers_Generator.Core.Settings; using Dapper_Layers_Generator.Core; using Moq; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; using Dapper_Layers_Generator.Test.Config; using System.Text.Json; using Dapper_Layers_Generator.Data.POCO; diff --git a/test/Dapper-Layers-Generator.Test/Generators/GeneratorContextForBase_Tests.cs b/test/Dapper-Layers-Generator.Test/Generators/GeneratorContextForBase_Tests.cs index fc6149f..dc3704d 100644 --- a/test/Dapper-Layers-Generator.Test/Generators/GeneratorContextForBase_Tests.cs +++ b/test/Dapper-Layers-Generator.Test/Generators/GeneratorContextForBase_Tests.cs @@ -1,8 +1,4 @@ -using Dapper_Layers_Generator.Core.Settings; -using Dapper_Layers_Generator.Test.Config; -using Moq; -using System.Text.Json; -using Dapper_Layers_Generator.Data.POCO; +using Dapper_Layers_Generator.Test.Config; using Dapper_Layers_Generator.Core.Converters; using Dapper_Layers_Generator.Test.Generators; diff --git a/test/Dapper-Layers-Generator.Test/Generators/GeneratorPOCO_Tests.cs b/test/Dapper-Layers-Generator.Test/Generators/GeneratorPOCO_Tests.cs index 2441a30..2906e3b 100644 --- a/test/Dapper-Layers-Generator.Test/Generators/GeneratorPOCO_Tests.cs +++ b/test/Dapper-Layers-Generator.Test/Generators/GeneratorPOCO_Tests.cs @@ -1,11 +1,4 @@ -using Xunit; -using Dapper_Layers_Generator.Core.Generators; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Dapper_Layers_Generator.Test.Generators; +using Dapper_Layers_Generator.Test.Generators; using Dapper_Layers_Generator.Core.Converters; using Dapper_Layers_Generator.Test.Config; using Dapper_Layers_Generator.Core.Converters.MySql; diff --git a/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoAddMulti_Tests.cs b/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoAddMulti_Tests.cs index 6d80f3d..47a64e1 100644 --- a/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoAddMulti_Tests.cs +++ b/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoAddMulti_Tests.cs @@ -2,11 +2,6 @@ using Dapper_Layers_Generator.Core.Converters; using Dapper_Layers_Generator.Core.Generators; using Dapper_Layers_Generator.Test.Config; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace Dapper_Layers_Generator.Test.Generators { diff --git a/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoAdd_Tests.cs b/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoAdd_Tests.cs index ad286c7..15e6cf0 100644 --- a/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoAdd_Tests.cs +++ b/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoAdd_Tests.cs @@ -1,11 +1,5 @@ using Dapper_Layers_Generator.Core.Converters.MySql; using Dapper_Layers_Generator.Core.Converters; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Dapper_Layers_Generator.Core.Generators.MySql; using Dapper_Layers_Generator.Test.Config; using Dapper_Layers_Generator.Core.Generators; diff --git a/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoDeleteByPkList_Test.cs b/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoDeleteByPkList_Test.cs index 1c4012f..54bc6ee 100644 --- a/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoDeleteByPkList_Test.cs +++ b/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoDeleteByPkList_Test.cs @@ -1,12 +1,6 @@ using Dapper_Layers_Generator.Core.Converters.MySql; using Dapper_Layers_Generator.Core.Converters; -using Dapper_Layers_Generator.Core.Generators.MySql; using Dapper_Layers_Generator.Test.Config; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; using Dapper_Layers_Generator.Core.Generators; namespace Dapper_Layers_Generator.Test.Generators diff --git a/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoDelete_Tests.cs b/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoDelete_Tests.cs index d4297ed..8126a57 100644 --- a/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoDelete_Tests.cs +++ b/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoDelete_Tests.cs @@ -2,11 +2,6 @@ using Dapper_Layers_Generator.Core.Converters; using Dapper_Layers_Generator.Core.Generators; using Dapper_Layers_Generator.Test.Config; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace Dapper_Layers_Generator.Test.Generators { diff --git a/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoGetAll_Tests.cs b/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoGetAll_Tests.cs index 0494982..2a09c5e 100644 --- a/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoGetAll_Tests.cs +++ b/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoGetAll_Tests.cs @@ -2,11 +2,6 @@ using Dapper_Layers_Generator.Core.Converters; using Dapper_Layers_Generator.Core.Generators; using Dapper_Layers_Generator.Test.Config; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace Dapper_Layers_Generator.Test.Generators { diff --git a/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoGetByPk_Tests.cs b/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoGetByPk_Tests.cs new file mode 100644 index 0000000..1396eae --- /dev/null +++ b/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoGetByPk_Tests.cs @@ -0,0 +1,34 @@ +using Dapper_Layers_Generator.Core.Converters.MySql; +using Dapper_Layers_Generator.Core.Converters; +using Dapper_Layers_Generator.Core.Generators; +using Dapper_Layers_Generator.Test.Config; + +namespace Dapper_Layers_Generator.Test.Generators +{ + public class GeneratorRepoGetByPk_Tests : GeneratorBaseTest + { + private MySqlDataTypeConverter _dataConverter; + private StringTransformationService _transformString; + + public GeneratorRepoGetByPk_Tests() : base() + { + _dataConverter = new MySqlDataTypeConverter(); + _transformString = new StringTransformationService(_settings); + } + + [Fact()] + public void GenerateStandard_Test() + { + //Arrange + var generator = new GeneratorRepoGetByPk(_settings, _mockDbDefinitions.Object, _transformString, _dataConverter); + generator.SetTable("clients"); + var expected = ResourceTool.Read("Dapper_Layers_Generator.Test/Results/Generators/GeneratorRepoGetByPk_ResultStandard.txt"); + + //Act + var result = generator.Generate(); + + //Assert + Assert.Equal(expected, result); + } + } +} diff --git a/test/Dapper-Layers-Generator.Test/Generators/Generator_Tests.cs b/test/Dapper-Layers-Generator.Test/Generators/Generator_Tests.cs index cc5c3a6..f5a03d9 100644 --- a/test/Dapper-Layers-Generator.Test/Generators/Generator_Tests.cs +++ b/test/Dapper-Layers-Generator.Test/Generators/Generator_Tests.cs @@ -1,9 +1,5 @@ -using Moq; -using Dapper_Layers_Generator.Data.POCO; -using JsonSerializer = System.Text.Json.JsonSerializer; +using Dapper_Layers_Generator.Data.POCO; using Dapper_Layers_Generator.Core.Converters; -using Dapper_Layers_Generator.Core.Settings; -using Dapper_Layers_Generator.Test.Config; using Dapper_Layers_Generator.Core.Generators.MySql; diff --git a/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorContext_Tests.cs b/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorContext_Tests.cs index b27ec60..3c594d3 100644 --- a/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorContext_Tests.cs +++ b/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorContext_Tests.cs @@ -1,15 +1,4 @@ -using Xunit; -using Dapper_Layers_Generator.Core.Generators.MySql; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Dapper_Layers_Generator.Core.Settings; -using Dapper_Layers_Generator.Test.Config; -using Moq; -using System.Text.Json; -using Dapper_Layers_Generator.Data.POCO; +using Dapper_Layers_Generator.Test.Config; using Dapper_Layers_Generator.Test.Generators; using Dapper_Layers_Generator.Core.Converters; diff --git a/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorRepoAddBulk_Test.cs b/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorRepoAddBulk_Test.cs index 4f6c712..9868920 100644 --- a/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorRepoAddBulk_Test.cs +++ b/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorRepoAddBulk_Test.cs @@ -1,10 +1,5 @@ using Dapper_Layers_Generator.Core.Converters.MySql; using Dapper_Layers_Generator.Core.Converters; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; using Dapper_Layers_Generator.Core.Generators.MySql; using Dapper_Layers_Generator.Test.Config; diff --git a/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorRepoAdd_Test.cs b/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorRepoAdd_Test.cs index 91ac894..edf6617 100644 --- a/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorRepoAdd_Test.cs +++ b/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorRepoAdd_Test.cs @@ -2,11 +2,6 @@ using Dapper_Layers_Generator.Core.Converters.MySql; using Dapper_Layers_Generator.Core.Generators.MySql; using Dapper_Layers_Generator.Test.Config; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace Dapper_Layers_Generator.Test.Generators.MySql { diff --git a/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorRepoDeleteBulk_Tests.cs b/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorRepoDeleteBulk_Tests.cs index 1c5a11e..8538f0c 100644 --- a/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorRepoDeleteBulk_Tests.cs +++ b/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorRepoDeleteBulk_Tests.cs @@ -1,12 +1,6 @@ using Dapper_Layers_Generator.Core.Converters.MySql; using Dapper_Layers_Generator.Core.Converters; -using Dapper_Layers_Generator.Core.Generators; using Dapper_Layers_Generator.Test.Config; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; using Dapper_Layers_Generator.Core.Generators.MySql; namespace Dapper_Layers_Generator.Test.Generators.MySql diff --git a/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorRepoDeleteByPkList_Tests.cs b/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorRepoDeleteByPkList_Tests.cs index 34ab1b4..98923f7 100644 --- a/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorRepoDeleteByPkList_Tests.cs +++ b/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorRepoDeleteByPkList_Tests.cs @@ -1,12 +1,6 @@ using Dapper_Layers_Generator.Core.Converters.MySql; using Dapper_Layers_Generator.Core.Converters; -using Dapper_Layers_Generator.Core.Generators; using Dapper_Layers_Generator.Test.Config; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; using Dapper_Layers_Generator.Core.Generators.MySql; namespace Dapper_Layers_Generator.Test.Generators.MySql diff --git a/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoGetByPk_ResultStandard.txt b/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoGetByPk_ResultStandard.txt new file mode 100644 index 0000000..319731e --- /dev/null +++ b/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoGetByPk_ResultStandard.txt @@ -0,0 +1,25 @@ + public virtual async Task GetByIdAsync(int id) + { + var p = new DynamicParameters(); + p.Add("@id",id); + + var sql = + """ + SELECT id + ,firstname + ,lastname + ,address + ,comment + ,created_at + ,postal + ,city + ,phone + ,email + FROM clients + WHERE id = @id + """; + + var client = await _dbContext.Connection.QuerySingleOrDefaultAsync(sql,p,transaction:_dbContext.Transaction); + + return client; + } From 7da9bc99f74bef63f2c80d461cd3200b351564c9 Mon Sep 17 00:00:00 2001 From: Fabien Donnet Date: Fri, 2 Dec 2022 14:21:48 +0100 Subject: [PATCH 28/48] c# 11 literal for pkbulk generator --- .../Generators/GeneratorRepoGetByPkBulk.cs | 19 ++-- .../MySql/MySqlGeneratorRepoGetByPkBulk.cs | 91 +++++++------------ 2 files changed, 45 insertions(+), 65 deletions(-) diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoGetByPkBulk.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoGetByPkBulk.cs index 3f71561..fb234b1 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoGetByPkBulk.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoGetByPkBulk.cs @@ -24,26 +24,27 @@ public override string Generate() { if (TableSettings.GetByPkBulkGenerator && !string.IsNullOrEmpty(GetPkMemberNamesString())) { - var output = new StringBuilder(); - output.Append(WriteMethodDef()); if (!IsBase) { //Will se if we can use some part of code for multi db providers for the moment the implementation is in MySql only child class } - return output.ToString(); + return + $$""" + {{WriteMethodDef()}} + """; } - return string.Empty; } protected override string WriteMethodDef() { - return $"{tab}{tab}//Please use this bulk by batch depending on the mem available 1000 / 1500 rows" + Environment.NewLine + - $"{tab}{tab}public {(IsBase ? "abstract" : "override async")} Task> GetBy{GetPkMemberNamesString()}BulkAsync({GetPkMemberNamesStringAndTypeList()})" + - $"{(IsBase ? ";" : string.Empty)}" + (!IsBase ? @$" -{tab}{tab}{{" : Environment.NewLine); - + return + $$""" + {{tab}}{{tab}}//Please use this bulk by batch depending on the mem available 1000 / 1500 rows + {{tab}}{{tab}}public {{(IsBase ? "abstract" : "override async")}} Task> GetBy{{GetPkMemberNamesString()}}BulkAsync({{GetPkMemberNamesStringAndTypeList()}}){{(IsBase ? ";" : string.Empty)}} + {{(!IsBase ? $"{tab}{tab}{{" : string.Empty)}} + """; } protected override string WriteDapperCall() diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoGetByPkBulk.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoGetByPkBulk.cs index 30ddccc..503bd79 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoGetByPkBulk.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoGetByPkBulk.cs @@ -22,76 +22,55 @@ public MySqlGeneratorRepoGetByPkBulk(SettingsGlobal settingsGlobal public override string Generate() { - if (TableSettings.DeleteBulkGenerator && !string.IsNullOrEmpty(GetPkMemberNamesString())) + if (TableSettings.GetByPkBulkGenerator && !string.IsNullOrEmpty(GetPkMemberNamesString())) { - var output = new StringBuilder(); - output.Append(WriteMethodDef()); - output.Append(Environment.NewLine); - output.Append(WriteOpenTransAndInitBulkMySql()); - output.Append(Environment.NewLine); - output.Append(Environment.NewLine); - output.Append(WriteCreateDbTmpTableForPksMySql("get")); - output.Append(Environment.NewLine); - output.Append(Environment.NewLine); - output.Append(WriteCreateDataTableForPkMySql("get")); - output.Append(Environment.NewLine); - output.Append(Environment.NewLine); - output.Append(WriteBulkCallMySql()); - output.Append(Environment.NewLine); - output.Append(Environment.NewLine); - output.Append(GetSelectFromTmpTable()); - output.Append(Environment.NewLine); - output.Append(Environment.NewLine); - output.Append(WriteDapperCall()); - output.Append(Environment.NewLine); - output.Append(Environment.NewLine); - output.Append(WriteCloseTransaction()); - output.Append(Environment.NewLine); - output.Append(Environment.NewLine); - output.Append(WriteReturnObj()); - output.Append(Environment.NewLine); - output.Append($"{tab}{tab}}}"); - output.Append(Environment.NewLine); - output.Append(Environment.NewLine); - - return output.ToString(); - } + return + $$""" + {{WriteMethodDef()}} + {{WriteOpenTransAndInitBulkMySql()}} + + {{WriteCreateDbTmpTableForPksMySql("get")}} + + {{WriteCreateDataTableForPkMySql("get")}} + + {{WriteBulkCallMySql()}} + + {{GetSelectFromTmpTable()}} + + {{WriteDapperCall()}} + + {{WriteCloseTransaction()}} + {{WriteReturnObj()}} + {{tab}}{{tab}}} + + """; + } return string.Empty; } protected override string WriteDapperCall() { - var output = new StringBuilder($"{tab}{tab}{tab}var {_stringTransform.PluralizeToLower(ClassName)} = await _{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.Connection." + - $"QueryAsync<{ClassName}>(sql,transaction:_{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.Transaction);"); - - output.Append(Environment.NewLine); - output.Append(Environment.NewLine); - output.Append($"{tab}{tab}{tab}var sqlDrop = \"DROP TABLE {ColAndTableIdentifier}tmp_bulkget_{Table.Name}{ColAndTableIdentifier};\";"); - output.Append(Environment.NewLine); - output.Append($"{tab}{tab}{tab}_ = await _{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.Connection." + - $"ExecuteAsync(sqlDrop,transaction:_{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.Transaction);"); - - return output.ToString(); + return + $$""" + {{tab}}{{tab}}{{tab}}var {{_stringTransform.PluralizeToLower(ClassName)}} = await _{{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}}.Connection.QueryAsync<{{ClassName}}>(sql,transaction:_{{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}}.Transaction); + {{tab}}{{tab}}{{tab}}var sqlDrop = "DROP TABLE {{ColAndTableIdentifier}}tmp_bulkget_{{Table.Name}}{{ColAndTableIdentifier}};"; + {{tab}}{{tab}}{{tab}}_ = await _{{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}}.Connection.ExecuteAsync(sqlDrop,transaction:_{{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}}.Transaction); + """; } protected virtual string GetSelectFromTmpTable() { - var output = new StringBuilder(); - output.Append(WriteBaseSqlForSelect("t1.")); - output.Append(Environment.NewLine); - output.Append($"{tab}{tab}{tab}INNER JOIN {ColAndTableIdentifier}tmp_bulkget_{Table.Name}{ColAndTableIdentifier} t2 ON " + Environment.NewLine + - $"{tab}{tab}{tab}{tab}"); - - //Delete fields var fields = String.Join($" AND ", PkColumns!.Select(c => $"t1.{ColAndTableIdentifier}{c.Name}{ColAndTableIdentifier} = t2.{ColAndTableIdentifier}{c.Name}{ColAndTableIdentifier}")); - output.Append(fields); - output.Append("\";"); - - return output.ToString(); - + return + $$"""" + {{WriteBaseSqlForSelect("t1.")}} + {{tab}}{{tab}}{{tab}}INNER JOIN {{ColAndTableIdentifier}}tmp_bulkget_{{Table.Name}}{{ColAndTableIdentifier}} t2 ON + {{tab}}{{tab}}{{tab}}{{tab}}{{fields}}" + {{tab}}{{tab}}{{tab}}"""; + """"; } protected override string WriteReturnObj() From 17d113e5517ac719258f670809a4709355f80ac2 Mon Sep 17 00:00:00 2001 From: Fabien Donnet Date: Fri, 2 Dec 2022 14:26:54 +0100 Subject: [PATCH 29/48] Simple test for GetByPK bulk (mySql) compositePK test included --- .../Dapper-Layers-Generator.Test.csproj | 4 + .../MySqlGeneratorRepoGetByPkBulk_Tests.cs | 54 ++++++++++++++ ...ratorRepoGetByPkBulk_ResultCompositePk.txt | 69 +++++++++++++++++ ...eneratorRepoGetByPkBulk_ResultStandard.txt | 74 +++++++++++++++++++ 4 files changed, 201 insertions(+) create mode 100644 test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorRepoGetByPkBulk_Tests.cs create mode 100644 test/Dapper-Layers-Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoGetByPkBulk_ResultCompositePk.txt create mode 100644 test/Dapper-Layers-Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoGetByPkBulk_ResultStandard.txt diff --git a/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj b/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj index 371f987..7266279 100644 --- a/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj +++ b/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj @@ -35,6 +35,8 @@ + + @@ -83,6 +85,8 @@ + + diff --git a/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorRepoGetByPkBulk_Tests.cs b/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorRepoGetByPkBulk_Tests.cs new file mode 100644 index 0000000..b2b8cad --- /dev/null +++ b/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorRepoGetByPkBulk_Tests.cs @@ -0,0 +1,54 @@ +using Dapper_Layers_Generator.Core.Converters.MySql; +using Dapper_Layers_Generator.Core.Converters; +using Dapper_Layers_Generator.Core.Generators.MySql; +using Dapper_Layers_Generator.Test.Config; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Dapper_Layers_Generator.Test.Generators.MySql +{ + public class MySqlGeneratorRepoGetByPkBulk_Tests : GeneratorBaseTest + { + private MySqlDataTypeConverter _dataConverter; + private StringTransformationService _transformString; + + public MySqlGeneratorRepoGetByPkBulk_Tests() : base() + { + _dataConverter = new MySqlDataTypeConverter(); + _transformString = new StringTransformationService(_settings); + } + + [Fact()] + public void GenerateStandard_Test() + { + //Arrange + var generator = new MySqlGeneratorRepoGetByPkBulk(_settings, _mockDbDefinitions.Object, _transformString, _dataConverter); + generator.SetTable("clients"); + var expected = ResourceTool.Read("Dapper_Layers_Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoGetByPkBulk_ResultStandard.txt"); + + //Act + var result = generator.Generate(); + + //Assert + Assert.Equal(expected, result); + } + + [Fact()] + public void GenerateCompositePk_Test() + { + //Arrange + var generator = new MySqlGeneratorRepoGetByPkBulk(_settings, _mockDbDefinitions.Object, _transformString, _dataConverter); + generator.SetTable("damages_failures"); + var expected = ResourceTool.Read("Dapper_Layers_Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoGetByPkBulk_ResultCompositePk.txt"); + + //Act + var result = generator.Generate(); + + //Assert + Assert.Equal(expected, result); + } + } +} diff --git a/test/Dapper-Layers-Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoGetByPkBulk_ResultCompositePk.txt b/test/Dapper-Layers-Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoGetByPkBulk_ResultCompositePk.txt new file mode 100644 index 0000000..8ade6a9 --- /dev/null +++ b/test/Dapper-Layers-Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoGetByPkBulk_ResultCompositePk.txt @@ -0,0 +1,69 @@ + //Please use this bulk by batch depending on the mem available 1000 / 1500 rows + public override async Task> GetByDamageIdAndFailureIdBulkAsync(IEnumerable<(int, int)> listOfDamageIdAndFailureId) + { + var isTransAlreadyOpen = _dbContext.Transaction != null; + + if (!isTransAlreadyOpen) + await _dbContext.OpenTransactionAsync(); + + var bulkCopy = new MySqlBulkCopy((MySqlConnection)_dbContext.Connection + , (MySqlTransaction?)_dbContext.Transaction); + + var sqltmp = + $""" + CREATE TEMPORARY TABLE `tmp_bulkget_damages_failures` + ( + damage_id int(11) + , failure_id int(11) + ); + """; + + _ = await _dbContext.Connection.ExecuteAsync(sqltmp,transaction:_dbContext.Transaction);; + + var table = new DataTable(); + table.Columns.Add("damage_id",typeof(int)); + table.Columns.Add("failure_id",typeof(int)); + bulkCopy.DestinationTableName = "tmp_bulkget_damages_failures"; + bulkCopy.BulkCopyTimeout = 600; + + foreach(var identity in listOfDamageIdAndFailureId) + { + DataRow r = table.NewRow(); + r["damage_id"] = identity.Item1; + r["failure_id"] = identity.Item2; + table.Rows.Add(r); + } + + List colMappings = new(); + int i = 0; + foreach (DataColumn col in table.Columns) + { + colMappings.Add(new MySqlBulkCopyColumnMapping(i, col.ColumnName)); + i++; + } + + bulkCopy.ColumnMappings.AddRange(colMappings); + + await bulkCopy.WriteToServerAsync(table); + + var sql = + """ + SELECT t1.`damage_id` + ,t1.`failure_id` + FROM `damages_failures` t1 + INNER JOIN `tmp_bulkget_damages_failures` t2 ON + t1.`damage_id` = t2.`damage_id` AND t1.`failure_id` = t2.`failure_id`" + """; + + var damagefailures = await _dbContext.Connection.QueryAsync(sql,transaction:_dbContext.Transaction); + var sqlDrop = "DROP TABLE `tmp_bulkget_damages_failures`;"; + _ = await _dbContext.Connection.ExecuteAsync(sqlDrop,transaction:_dbContext.Transaction); + + if (!isTransAlreadyOpen) + { + _dbContext.CommitTransaction(); + _dbContext.Connection.Close(); + } + + return damagefailures; + } diff --git a/test/Dapper-Layers-Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoGetByPkBulk_ResultStandard.txt b/test/Dapper-Layers-Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoGetByPkBulk_ResultStandard.txt new file mode 100644 index 0000000..49d9bff --- /dev/null +++ b/test/Dapper-Layers-Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoGetByPkBulk_ResultStandard.txt @@ -0,0 +1,74 @@ + //Please use this bulk by batch depending on the mem available 1000 / 1500 rows + public override async Task> GetByIdBulkAsync(IEnumerable listOfId) + { + var isTransAlreadyOpen = _dbContext.Transaction != null; + + if (!isTransAlreadyOpen) + await _dbContext.OpenTransactionAsync(); + + var bulkCopy = new MySqlBulkCopy((MySqlConnection)_dbContext.Connection + , (MySqlTransaction?)_dbContext.Transaction); + + var sqltmp = + $""" + CREATE TEMPORARY TABLE `tmp_bulkget_clients` + ( + id int(11) + ); + """; + + _ = await _dbContext.Connection.ExecuteAsync(sqltmp,transaction:_dbContext.Transaction);; + + var table = new DataTable(); + table.Columns.Add("id",typeof(int)); + bulkCopy.DestinationTableName = "tmp_bulkget_clients"; + bulkCopy.BulkCopyTimeout = 600; + + foreach(var identity in listOfId) + { + DataRow r = table.NewRow(); + r["id"] = identity; + table.Rows.Add(r); + } + + List colMappings = new(); + int i = 0; + foreach (DataColumn col in table.Columns) + { + colMappings.Add(new MySqlBulkCopyColumnMapping(i, col.ColumnName)); + i++; + } + + bulkCopy.ColumnMappings.AddRange(colMappings); + + await bulkCopy.WriteToServerAsync(table); + + var sql = + """ + SELECT t1.`id` + ,t1.`firstname` + ,t1.`lastname` + ,t1.`address` + ,t1.`comment` + ,t1.`created_at` + ,t1.`postal` + ,t1.`city` + ,t1.`phone` + ,t1.`email` + FROM `clients` t1 + INNER JOIN `tmp_bulkget_clients` t2 ON + t1.`id` = t2.`id`" + """; + + var clients = await _dbContext.Connection.QueryAsync(sql,transaction:_dbContext.Transaction); + var sqlDrop = "DROP TABLE `tmp_bulkget_clients`;"; + _ = await _dbContext.Connection.ExecuteAsync(sqlDrop,transaction:_dbContext.Transaction); + + if (!isTransAlreadyOpen) + { + _dbContext.CommitTransaction(); + _dbContext.Connection.Close(); + } + + return clients; + } From 58553d84a29f786b84a4c83c7a0226b8f66a886d Mon Sep 17 00:00:00 2001 From: Fabien Donnet Date: Fri, 2 Dec 2022 14:47:26 +0100 Subject: [PATCH 30/48] C#11 literal for getbypklist generator --- .../Generators/GeneratorRepoGetByPkList.cs | 56 ++++++++++--------- .../MySql/MySqlGeneratorRepoGetByPkList.cs | 22 +++----- 2 files changed, 38 insertions(+), 40 deletions(-) diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoGetByPkList.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoGetByPkList.cs index 68799ad..26e0bd8 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoGetByPkList.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoGetByPkList.cs @@ -22,44 +22,46 @@ public override string Generate() { if (TableSettings.GetByPkListGenerator && !string.IsNullOrEmpty(GetPkMemberNamesString())) { - var output = new StringBuilder(); - output.Append(WriteMethodDef()); + var output = string.Empty; if (PkColumns.Count() == 1 || !IsBase) { - output.Append(Environment.NewLine); - output.Append(WriteDapperDynaParamsForPkList()); - output.Append(Environment.NewLine); - output.Append(Environment.NewLine); - output.Append(WriteBaseSqlForSelect()); - output.Append(Environment.NewLine); - output.Append(WriteSqlPkListWhereClause()); - output.Append(Environment.NewLine); - output.Append(Environment.NewLine); - output.Append(WriteDapperCall()); - output.Append(Environment.NewLine); - output.Append(Environment.NewLine); - output.Append(WriteReturnObj()); - output.Append(Environment.NewLine); - output.Append($"{tab}{tab}}}"); + output = + $$""" + + {{WriteDapperDynaParamsForPkList()}} + + {{WriteBaseSqlForSelect()}} + {{WriteSqlPkListWhereClause()}} + + {{WriteDapperCall()}} + + {{WriteReturnObj()}} + {{tab}}{{tab}}} + """; } + return + $$""" + {{WriteMethodDef()}}{{output}} - output.Append(Environment.NewLine); - return output.ToString(); + """; } - return string.Empty; } protected override string WriteMethodDef() { - return PkColumns.Count() > 1 - ? $"{tab}{tab}public {(IsBase ? "abstract" : "override async")} " + - $"Task> GetBy{GetPkMemberNamesString()}Async({GetPkMemberNamesStringAndTypeList()}){(IsBase ? ";" : String.Empty)}" - : $"{tab}{tab}public {(IsBase ? "virtual" : "override")} " + - $"async Task> GetBy{GetPkMemberNamesString()}Async({GetPkMemberNamesStringAndTypeList()})" + - @$" -{tab}{tab}{{"; + if (PkColumns.Count() > 1) + return + $$""" + {{tab}}{{tab}}public {{(IsBase ? "abstract" : "override async")}} Task> GetBy{{GetPkMemberNamesString()}}Async({{GetPkMemberNamesStringAndTypeList()}}){{(IsBase ? ";" : String.Empty)}} + """; + else + return + $$""" + {{tab}}{{tab}}public {{(IsBase ? "virtual" : "override")}} async Task> GetBy{{GetPkMemberNamesString()}}Async({{GetPkMemberNamesStringAndTypeList()}}) + {{tab}}{{tab}}{ + """; } protected override string WriteDapperCall() diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoGetByPkList.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoGetByPkList.cs index add0037..b929ce0 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoGetByPkList.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoGetByPkList.cs @@ -30,19 +30,15 @@ public override string Generate() if (!PkColumns.Any()) throw new ArgumentException($"You cannot run the Delete by PkList Generator for table {Table.Name}, no pk defined"); - var output = new StringBuilder(); - output.Append(WriteMethodDef()); - output.Append(Environment.NewLine); - output.Append(WriteDapperDynaParamsForPkList()); - output.Append(Environment.NewLine); - output.Append(Environment.NewLine); - output.Append(WriteReturnObj()); - output.Append(Environment.NewLine); - output.Append($"{tab}{tab}}}"); - output.Append(Environment.NewLine); - return output.ToString(); + return + $$""" + {{WriteMethodDef()}} + {{WriteDapperDynaParamsForPkList()}} + {{WriteReturnObj()}} + {{tab}}{{tab}}} + + """; } - return string.Empty; } @@ -53,7 +49,7 @@ protected override string WriteSqlPkListWhereClause() protected override string WriteDapperDynaParamsForPkList() { - return PkColumns.Count() > 1 ? @$"{tab}{tab}{{/*Call bulk for composite pk*/" : base.WriteDapperDynaParamsForPkList(); + return PkColumns.Count() > 1 ? @$"{tab}{tab}{{" : base.WriteDapperDynaParamsForPkList(); } protected override string WriteReturnObj() From b3be7ce61cb01299d5cf4f40556fb88d35c481c7 Mon Sep 17 00:00:00 2001 From: Fabien Donnet Date: Fri, 2 Dec 2022 14:56:26 +0100 Subject: [PATCH 31/48] GetbyPk list simple tests --- .../Dapper-Layers-Generator.Test.csproj | 11 +++++ .../GeneratorRepoGetByPkList_Test.cs | 49 +++++++++++++++++++ .../MySqlGeneratorRepoGetByPkBulk_Tests.cs | 5 -- .../MySqlGeneratorRepoGetByPkList_Test.cs | 49 +++++++++++++++++++ ...ratorRepoGetByPkList_ResultCompositePK.txt | 1 + ...eneratorRepoGetByPkList_ResultStandard.txt | 25 ++++++++++ ...ratorRepoGetByPkList_ResultCompositePk.txt | 4 ++ ...eneratorRepoGetByPkList_ResultStandard.txt | 25 ++++++++++ 8 files changed, 164 insertions(+), 5 deletions(-) create mode 100644 test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoGetByPkList_Test.cs create mode 100644 test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorRepoGetByPkList_Test.cs create mode 100644 test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoGetByPkList_ResultCompositePK.txt create mode 100644 test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoGetByPkList_ResultStandard.txt create mode 100644 test/Dapper-Layers-Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoGetByPkList_ResultCompositePk.txt create mode 100644 test/Dapper-Layers-Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoGetByPkList_ResultStandard.txt diff --git a/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj b/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj index 7266279..be5ddb7 100644 --- a/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj +++ b/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj @@ -26,6 +26,8 @@ + + @@ -37,6 +39,14 @@ + + + + + + + + @@ -87,6 +97,7 @@ + diff --git a/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoGetByPkList_Test.cs b/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoGetByPkList_Test.cs new file mode 100644 index 0000000..1eb4af4 --- /dev/null +++ b/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoGetByPkList_Test.cs @@ -0,0 +1,49 @@ +using Dapper_Layers_Generator.Core.Converters.MySql; +using Dapper_Layers_Generator.Core.Converters; +using Dapper_Layers_Generator.Test.Config; +using Dapper_Layers_Generator.Core.Generators; + +namespace Dapper_Layers_Generator.Test.Generators +{ + public class GeneratorRepoGetByPkList_Test : GeneratorBaseTest + { + private MySqlDataTypeConverter _dataConverter; + private StringTransformationService _transformString; + + public GeneratorRepoGetByPkList_Test() : base() + { + _dataConverter = new MySqlDataTypeConverter(); + _transformString = new StringTransformationService(_settings); + } + + [Fact()] + public void GenerateStandard_Test() + { + //Arrange + var generator = new GeneratorRepoGetByPkList(_settings, _mockDbDefinitions.Object, _transformString, _dataConverter); + generator.SetTable("clients"); + var expected = ResourceTool.Read("Dapper_Layers_Generator.Test/Results/Generators/GeneratorRepoGetByPkList_ResultStandard.txt"); + + //Act + var result = generator.Generate(); + + //Assert + Assert.Equal(expected, result); + } + + [Fact()] + public void GenerateCompositePk_Test() + { + //Arrange + var generator = new GeneratorRepoGetByPkList(_settings, _mockDbDefinitions.Object, _transformString, _dataConverter); + generator.SetTable("damages_failures"); + var expected = ResourceTool.Read("Dapper_Layers_Generator.Test/Results/Generators/GeneratorRepoGetByPkList_ResultCompositePk.txt"); + + //Act + var result = generator.Generate(); + + //Assert + Assert.Equal(expected, result); + } + } +} diff --git a/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorRepoGetByPkBulk_Tests.cs b/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorRepoGetByPkBulk_Tests.cs index b2b8cad..0a94aef 100644 --- a/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorRepoGetByPkBulk_Tests.cs +++ b/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorRepoGetByPkBulk_Tests.cs @@ -2,11 +2,6 @@ using Dapper_Layers_Generator.Core.Converters; using Dapper_Layers_Generator.Core.Generators.MySql; using Dapper_Layers_Generator.Test.Config; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace Dapper_Layers_Generator.Test.Generators.MySql { diff --git a/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorRepoGetByPkList_Test.cs b/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorRepoGetByPkList_Test.cs new file mode 100644 index 0000000..8a33d00 --- /dev/null +++ b/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorRepoGetByPkList_Test.cs @@ -0,0 +1,49 @@ +using Dapper_Layers_Generator.Core.Converters.MySql; +using Dapper_Layers_Generator.Core.Converters; +using Dapper_Layers_Generator.Core.Generators.MySql; +using Dapper_Layers_Generator.Test.Config; + +namespace Dapper_Layers_Generator.Test.Generators.MySql +{ + public class MySqlGeneratorRepoGetByPkList_Test : GeneratorBaseTest + { + private MySqlDataTypeConverter _dataConverter; + private StringTransformationService _transformString; + + public MySqlGeneratorRepoGetByPkList_Test() : base() + { + _dataConverter = new MySqlDataTypeConverter(); + _transformString = new StringTransformationService(_settings); + } + + [Fact()] + public void GenerateStandard_Test() + { + //Arrange + var generator = new MySqlGeneratorRepoGetByPkList(_settings, _mockDbDefinitions.Object, _transformString, _dataConverter); + generator.SetTable("clients"); + var expected = ResourceTool.Read("Dapper_Layers_Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoGetByPkList_ResultStandard.txt"); + + //Act + var result = generator.Generate(); + + //Assert + Assert.Equal(expected, result); + } + + [Fact()] + public void GenerateCompositePk_Test() + { + //Arrange + var generator = new MySqlGeneratorRepoGetByPkList(_settings, _mockDbDefinitions.Object, _transformString, _dataConverter); + generator.SetTable("damages_failures"); + var expected = ResourceTool.Read("Dapper_Layers_Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoGetByPkList_ResultCompositePk.txt"); + + //Act + var result = generator.Generate(); + + //Assert + Assert.Equal(expected, result); + } + } +} diff --git a/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoGetByPkList_ResultCompositePK.txt b/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoGetByPkList_ResultCompositePK.txt new file mode 100644 index 0000000..aa73aaf --- /dev/null +++ b/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoGetByPkList_ResultCompositePK.txt @@ -0,0 +1 @@ + public abstract Task> GetByDamageIdAndFailureIdAsync(IEnumerable<(int, int)> listOfDamageIdAndFailureId); diff --git a/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoGetByPkList_ResultStandard.txt b/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoGetByPkList_ResultStandard.txt new file mode 100644 index 0000000..2fad721 --- /dev/null +++ b/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoGetByPkList_ResultStandard.txt @@ -0,0 +1,25 @@ + public virtual async Task> GetByIdAsync(IEnumerable listOfId) + { + var p = new DynamicParameters(); + p.Add("@listOf",listOfId); + + var sql = + """ + SELECT id + ,firstname + ,lastname + ,address + ,comment + ,created_at + ,postal + ,city + ,phone + ,email + FROM clients + WHERE id IN @listOf + """; + + var clients = await _dbContext.Connection.QueryAsync(sql,p,transaction:_dbContext.Transaction); + + return clients; + } diff --git a/test/Dapper-Layers-Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoGetByPkList_ResultCompositePk.txt b/test/Dapper-Layers-Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoGetByPkList_ResultCompositePk.txt new file mode 100644 index 0000000..9b5c959 --- /dev/null +++ b/test/Dapper-Layers-Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoGetByPkList_ResultCompositePk.txt @@ -0,0 +1,4 @@ + public override async Task> GetByDamageIdAndFailureIdAsync(IEnumerable<(int, int)> listOfDamageIdAndFailureId) + { + return await GetByDamageIdAndFailureIdBulkAsync(listOfDamageIdAndFailureId); + } diff --git a/test/Dapper-Layers-Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoGetByPkList_ResultStandard.txt b/test/Dapper-Layers-Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoGetByPkList_ResultStandard.txt new file mode 100644 index 0000000..44c14ab --- /dev/null +++ b/test/Dapper-Layers-Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoGetByPkList_ResultStandard.txt @@ -0,0 +1,25 @@ + public override async Task> GetByIdAsync(IEnumerable listOfId) + { + var p = new DynamicParameters(); + p.Add("@listOf",listOfId); + + var sql = + """ + SELECT `id` + ,`firstname` + ,`lastname` + ,`address` + ,`comment` + ,`created_at` + ,`postal` + ,`city` + ,`phone` + ,`email` + FROM `clients` + WHERE `id` IN @listOf + """; + + var clients = await _dbContext.Connection.QueryAsync(sql,p,transaction:_dbContext.Transaction); + + return clients; + } From 1a4cbbbc29bc7b81795955f71e7c575b3567dfe5 Mon Sep 17 00:00:00 2001 From: Fabien Donnet Date: Fri, 2 Dec 2022 15:11:21 +0100 Subject: [PATCH 32/48] C# 11 literal for GetByUk generator --- .../Generators/GeneratorRepoGetByUk.cs | 69 +++++++++---------- 1 file changed, 34 insertions(+), 35 deletions(-) diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoGetByUk.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoGetByUk.cs index 8e015b1..5ba56fb 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoGetByUk.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoGetByUk.cs @@ -31,23 +31,23 @@ public override string Generate() foreach (var index in ColumnNamesByIndexNameDic) { _currentIndex = index; - output.Append(WriteMethodDef()); - output.Append(Environment.NewLine); - output.Append(GetDapperDynaParams()); - output.Append(Environment.NewLine); - output.Append(Environment.NewLine); - output.Append(WriteBaseSqlForSelect()); - output.Append(Environment.NewLine); - output.Append(GetSqlWhereClause()); - output.Append(Environment.NewLine); - output.Append(Environment.NewLine); - output.Append(WriteDapperCall()); - output.Append(Environment.NewLine); - output.Append(Environment.NewLine); - output.Append(WriteReturnObj()); - output.Append(Environment.NewLine); - output.Append($"{tab}{tab}}}"); - output.Append(Environment.NewLine); + + var toBeAdded = + $$""" + {{WriteMethodDef()}} + {{WriteDapperDynaParams()}} + + {{WriteBaseSqlForSelect()}} + {{WriteSqlWhereClause()}} + + {{WriteDapperCall()}} + + {{WriteReturnObj()}} + {{tab}}{{tab}}} + + """; + + output.Append(toBeAdded); } return output.ToString(); @@ -58,9 +58,11 @@ public override string Generate() protected override string WriteMethodDef() { - return $"{tab}{tab}public {(IsBase ? "virtual" : "override")} async Task<{ClassName}?> GetBy{GetUkMemberNamesString(_currentIndex.Key)}Async({GetUkMemberNamesStringAndType(_currentIndex.Key)})" + - @$" -{tab}{tab}{{"; + return + $$""" + {{tab}}{{tab}}public {{(IsBase ? "virtual" : "override")}} async Task<{{ClassName}}?> GetBy{{GetUkMemberNamesString(_currentIndex.Key)}}Async({{GetUkMemberNamesStringAndType(_currentIndex.Key)}}) + {{tab}}{{tab}}{ + """; } protected override string WriteDapperCall() @@ -70,35 +72,32 @@ protected override string WriteDapperCall() $"QuerySingleOrDefaultAsync<{ClassName}>(sql,p,transaction:_{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.Transaction);"; } - protected virtual string GetSqlWhereClause() + protected virtual string WriteSqlWhereClause() { - var output = new StringBuilder(); - - output.Append($"{tab}{tab}{tab}WHERE "); - var whereClause = String.Join(Environment.NewLine + $"{tab}{tab}{tab}AND ", _currentIndex.Value.Select(col => { return $"{ColAndTableIdentifier}{col.Name}{ColAndTableIdentifier} = @{col.Name}"; })); - output.Append(whereClause + "\";"); - return output.ToString(); - + return + $$"""" + {{tab}}{{tab}}{{tab}}WHERE {{whereClause}} + {{tab}}{{tab}}{{tab}}"""; + """"; } - protected virtual string GetDapperDynaParams() + protected virtual string WriteDapperDynaParams() { - var output = new StringBuilder(); - output.Append($"{tab}{tab}{tab}var p = new DynamicParameters();"); - output.Append(Environment.NewLine); - var spParams = String.Join(Environment.NewLine, _currentIndex.Value.Select(col => { return $@"{tab}{tab}{tab}p.Add(""@{col.Name}"",{_stringTransform.ApplyConfigTransformMember(col.Name)});"; })); - output.Append(spParams); - return output.ToString(); + return + $$""" + {{tab}}{{tab}}{{tab}}var p = new DynamicParameters(); + {{spParams}} + """; } protected override string WriteReturnObj() From 9869f48ae2c270269a6eac7336a31090b484b3a8 Mon Sep 17 00:00:00 2001 From: Fabien Donnet Date: Fri, 2 Dec 2022 15:13:50 +0100 Subject: [PATCH 33/48] GetBy Uk standard test --- .../Dapper-Layers-Generator.Test.csproj | 2 ++ .../Generators/GeneratorRepoGetByUk_Tests.cs | 34 +++++++++++++++++++ .../GeneratorRepoGetByUk_ResultStandard.txt | 29 ++++++++++++++++ 3 files changed, 65 insertions(+) create mode 100644 test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoGetByUk_Tests.cs create mode 100644 test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoGetByUk_ResultStandard.txt diff --git a/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj b/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj index be5ddb7..420ccb6 100644 --- a/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj +++ b/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj @@ -29,6 +29,7 @@ + @@ -46,6 +47,7 @@ + diff --git a/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoGetByUk_Tests.cs b/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoGetByUk_Tests.cs new file mode 100644 index 0000000..b5dc893 --- /dev/null +++ b/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoGetByUk_Tests.cs @@ -0,0 +1,34 @@ +using Dapper_Layers_Generator.Core.Converters.MySql; +using Dapper_Layers_Generator.Core.Converters; +using Dapper_Layers_Generator.Core.Generators; +using Dapper_Layers_Generator.Test.Config; + +namespace Dapper_Layers_Generator.Test.Generators +{ + public class GeneratorRepoGetByUk_Tests : GeneratorBaseTest + { + private MySqlDataTypeConverter _dataConverter; + private StringTransformationService _transformString; + + public GeneratorRepoGetByUk_Tests() : base() + { + _dataConverter = new MySqlDataTypeConverter(); + _transformString = new StringTransformationService(_settings); + } + + [Fact()] + public void GenerateStandard_Test() + { + //Arrange + var generator = new GeneratorRepoGetByUk(_settings, _mockDbDefinitions.Object, _transformString, _dataConverter); + generator.SetTable("clients"); + var expected = ResourceTool.Read("Dapper_Layers_Generator.Test/Results/Generators/GeneratorRepoGetByUk_ResultStandard.txt"); + + //Act + var result = generator.Generate(); + + //Assert + Assert.Equal(expected, result); + } + } +} diff --git a/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoGetByUk_ResultStandard.txt b/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoGetByUk_ResultStandard.txt new file mode 100644 index 0000000..61fe334 --- /dev/null +++ b/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoGetByUk_ResultStandard.txt @@ -0,0 +1,29 @@ + public virtual async Task GetByFirstnameAndLastnameAndAddresAsync(string firstname, string lastname, string address) + { + var p = new DynamicParameters(); + p.Add("@firstname",firstname); + p.Add("@lastname",lastname); + p.Add("@address",address); + + var sql = + """ + SELECT id + ,firstname + ,lastname + ,address + ,comment + ,created_at + ,postal + ,city + ,phone + ,email + FROM clients + WHERE firstname = @firstname + AND lastname = @lastname + AND address = @address + """; + + var client = await _dbContext.Connection.QuerySingleOrDefaultAsync(sql,p,transaction:_dbContext.Transaction); + + return client; + } From 44b1d1407b58aced710cadcf274894f0ff9fc0b8 Mon Sep 17 00:00:00 2001 From: Fabien Donnet Date: Fri, 2 Dec 2022 15:37:26 +0100 Subject: [PATCH 34/48] RepoMain c# 11 string literal --- .../Generators/GeneratorRepoMain.cs | 218 ++++++++---------- 1 file changed, 100 insertions(+), 118 deletions(-) diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoMain.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoMain.cs index c6e8419..e567038 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoMain.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoMain.cs @@ -23,86 +23,90 @@ public GeneratorRepoMain(SettingsGlobal settingsGlobal public override string Generate() { - var output = new StringBuilder(); - output.Append(WriteRepoHeaderAndConstructor()); - - if (string.IsNullOrEmpty(DbProviderString)) - output.Append(WriteInterface()); - - output.Append(WriteClass()); - - return output.ToString(); + return string.IsNullOrEmpty(DbProviderString) + ? $$""" + {{WriteUsingStatements()}} + {{WriteRepoHeaderAndConstructor()}} + {{WriteInterface()}} + {{WriteClass()}} + """ + : $$""" + {{WriteUsingStatements()}} + {{WriteRepoHeaderAndConstructor()}} + {{WriteClass()}} + """; } private string WriteRepoHeaderAndConstructor() { return string.IsNullOrEmpty(DbProviderString) - ? $@"{@WriteUsingStatements()} -// ================================================================= -// Repo class for table {Table.Name} -// Base abstract class that can be used with no specific db provider -// You can extend it via other partial files where you know that a -// query can run the same on different db providers -// Author: {_settings.AuthorName} -// Repo name: {ClassName}RepoBase -// Generated: {DateTime.Now} -// WARNING: Never change this file manually (re-generate it) -// ================================================================= - -namespace {_settings.TargetNamespaceForRepo} -{{" - : $@"{@WriteUsingStatements()} -// ================================================================= -// Repo class for table {Table.Name} -// Specific repo implementation for dbprovider : {DbProviderString} -// You can extend it via other partial files where you have specific -// queries for specific dbs (if standard SQL is not sufficent) -// Author: {_settings.AuthorName} -// Repo name: {ClassName}Repo{DbProviderString} -// Generated: {DateTime.Now} -// WARNING: Never change this file manually (re-generate it) -// ================================================================= - -namespace {_settings.TargetNamespaceForRepo} -{{"; - + ? $$""" + // ================================================================= + // Repo class for table {{Table.Name}} + // Base abstract class that can be used with no specific db provider + // You can extend it via other partial files where you know that a + // query can run the same on different db providers + // Author: {{_settings.AuthorName}} + // Repo name: {{ClassName}}RepoBase + // Generated: {{_settings.GenerationTimestamp:yyyy-MM-dd HH:mm:ss}} UTC + // WARNING: Never change this file manually (re-generate it) + // ================================================================= + + namespace {{_settings.TargetNamespaceForRepo}} + { + """ + : $$""" + // ================================================================= + // Repo class for table {{Table.Name}} + // Specific repo implementation for dbprovider : {{DbProviderString}} + // You can extend it via other partial files where you have specific + // queries for specific dbs (if standard SQL is not sufficent) + // Author: {{_settings.AuthorName}} + // Repo name: {{ClassName}}Repo{{DbProviderString}} + // Generated: {{_settings.GenerationTimestamp:yyyy-MM-dd HH:mm:ss}} UTC + // WARNING: Never change this file manually (re-generate it) + // ================================================================= + + namespace {{_settings.TargetNamespaceForRepo}} + { + """; } private string WriteUsingStatements() { - string output = $@"using {_settings.TargetNamespaceForPOCO}; -using Dapper; -using {_settings.TargetNamespaceForDbContext}; -{UsingDbProviderSpecific} - -"; - return output; + return + $$""" + using {{_settings.TargetNamespaceForPOCO}}; + using Dapper; + using {{_settings.TargetNamespaceForDbContext}};{{(string.IsNullOrEmpty(UsingDbProviderSpecific)?string.Empty:Environment.NewLine+ UsingDbProviderSpecific)}} + + """; } private string WriteClass() { - return string.IsNullOrEmpty(DbProviderString) - ? @$" -{tab}public abstract partial class {ClassName}RepoBase : I{ClassName}Repo -{tab}{{ -{tab}{tab}protected readonly I{_settings.DbContextClassName} _{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}; -{tab}{tab} -{tab}{tab}public {ClassName}RepoBase(I{_settings.DbContextClassName} {_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}) -{tab}{tab}{{ -{tab}{tab}{tab}_{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)} = {_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}; -{tab}{tab}}} - -" - : @$" -{tab}public partial class {ClassName}Repo{DbProviderString} : {ClassName}RepoBase, I{ClassName}Repo -{tab}{{ -{tab}{tab}public {ClassName}Repo{DbProviderString}(I{_settings.DbContextClassName} {_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}): base ({_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}) -{tab}{tab}{{ -{tab}{tab}}} - -"; - + ? $$""" + {{tab}}public abstract partial class {{ClassName}}RepoBase : I{{ClassName}}Repo + {{tab}}{ + {{tab}}{{tab}}protected readonly I{{_settings.DbContextClassName}} _{{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}}; + {{tab}}{{tab}} + {{tab}}{{tab}}public {{ClassName}}RepoBase(I{{_settings.DbContextClassName}} {{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}}) + {{tab}}{{tab}}{ + {{tab}}{{tab}}{{tab}}_{{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}} = {{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}}; + {{tab}}{{tab}}} + + + """ + : $$""" + {{tab}}public partial class {{ClassName}}Repo{{DbProviderString}} : {{ClassName}}RepoBase, I{{ClassName}}Repo + {{tab}}{ + {{tab}}{{tab}}public {{ClassName}}Repo{{DbProviderString}}(I{{_settings.DbContextClassName}} {{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}}): base ({{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}}) + {{tab}}{{tab}}{ + {{tab}}{{tab}}} + + + """; } /// @@ -111,47 +115,45 @@ private string WriteClass() /// private string WriteInterface() { - return $@" -{tab}/// ================================================================= -{tab}/// Author: {_settings.AuthorName} -{tab}/// Description: Interface for the repo {ClassName}Repo -{tab}/// You can extend it with partial file -{tab}/// ================================================================= -{tab}public partial interface I{ClassName}Repo -{tab}{{ -{@WriteInterfaceMethods()} -{tab}}}"; - + return + $$""" + {{tab}}/// ================================================================= + {{tab}}/// Author: {{_settings.AuthorName}} + {{tab}}/// Description: Interface for the repo {{ClassName}}Repo + {{tab}}/// You can extend it with partial file + {{tab}}/// ================================================================= + {{tab}}public partial interface I{{ClassName}}Repo + {{tab}}{ + {{@WriteInterfaceMethods()}} + {{tab}}} + + """; } private string WriteInterfaceMethods() { - var output = new StringBuilder(); + var output = new List(); if (TableSettings.GetAllGenerator) { - output.Append($"{tab}{tab}Task> GetAllAsync();"); - output.Append(Environment.NewLine); + output.Add($"{tab}{tab}Task> GetAllAsync();"); } if (TableSettings.GetByPkGenerator && !string.IsNullOrEmpty(GetPkMemberNamesString())) { - output.Append($"{tab}{tab}Task<{ClassName}?> GetBy{GetPkMemberNamesString()}Async({GetPkMemberNamesStringAndType()});"); - output.Append(Environment.NewLine); + output.Add($"{tab}{tab}Task<{ClassName}?> GetBy{GetPkMemberNamesString()}Async({GetPkMemberNamesStringAndType()});"); } //ByPk list if (TableSettings.GetByPkListGenerator && !string.IsNullOrEmpty(GetPkMemberNamesString())) { - output.Append($"{tab}{tab}Task> GetBy{GetPkMemberNamesString()}Async({GetPkMemberNamesStringAndTypeList()});"); - output.Append(Environment.NewLine); + output.Add($"{tab}{tab}Task> GetBy{GetPkMemberNamesString()}Async({GetPkMemberNamesStringAndTypeList()});"); } //By pk bulk if (TableSettings.GetByPkBulkGenerator && !string.IsNullOrEmpty(GetPkMemberNamesString())) { - output.Append($"{tab}{tab}Task> GetBy{GetPkMemberNamesString()}BulkAsync({GetPkMemberNamesStringAndTypeList()});"); - output.Append(Environment.NewLine); + output.Add($"{tab}{tab}Task> GetBy{GetPkMemberNamesString()}BulkAsync({GetPkMemberNamesStringAndTypeList()});"); } //By unique indexes @@ -159,8 +161,7 @@ private string WriteInterfaceMethods() { foreach (var index in ColumnNamesByIndexNameDic) { - output.Append($"{tab}{tab}Task<{ClassName}?> GetBy{GetUkMemberNamesString(index.Key)}Async({GetUkMemberNamesStringAndType(index.Key)});"); - output.Append(Environment.NewLine); + output.Add($"{tab}{tab}Task<{ClassName}?> GetBy{GetUkMemberNamesString(index.Key)}Async({GetUkMemberNamesStringAndType(index.Key)});"); } } @@ -168,86 +169,67 @@ private string WriteInterfaceMethods() if (TableSettings.AddGenerator) { if (PkColumns.Count() == 1 && PkColumns.Where(c => c.IsAutoIncrement).Any()) - output.Append($"{tab}{tab}Task<{GetPkMemberTypes()}> AddAsync({ClassName} " + + output.Add($"{tab}{tab}Task<{GetPkMemberTypes()}> AddAsync({ClassName} " + $"{_stringTransform.ApplyConfigTransformMember(ClassName)});"); else - output.Append($"{tab}{tab}Task AddAsync({ClassName} " + + output.Add($"{tab}{tab}Task AddAsync({ClassName} " + $"{_stringTransform.ApplyConfigTransformMember(ClassName)});"); - - - output.Append(Environment.NewLine); } //Add multi if (TableSettings.AddMultiGenerator) { - output.Append($"{tab}{tab}Task AddAsync(IEnumerable<{ClassName}> " + + output.Add($"{tab}{tab}Task AddAsync(IEnumerable<{ClassName}> " + $"{_stringTransform.PluralizeToLower(ClassName)});"); - - output.Append(Environment.NewLine); } //Add bulk if (TableSettings.AddBulkGenerator) { - output.Append($"{tab}{tab}Task AddBulkAsync(IEnumerable<{ClassName}> " + + output.Add($"{tab}{tab}Task AddBulkAsync(IEnumerable<{ClassName}> " + $"{_stringTransform.PluralizeToLower(ClassName)});"); - - output.Append(Environment.NewLine); } //Update if (TableSettings.UpdateGenerator && ColumnForUpdateOperations!.Where(c => !c.IsAutoIncrement && !c.IsPrimary).Any()) { - output.Append($"{tab}{tab}Task UpdateAsync({ClassName} " + + output.Add($"{tab}{tab}Task UpdateAsync({ClassName} " + $"{_stringTransform.ApplyConfigTransformMember(ClassName)});"); - - output.Append(Environment.NewLine); } //Update multi if (TableSettings.UpdateMultiGenerator && ColumnForUpdateOperations!.Where(c => !c.IsAutoIncrement && !c.IsPrimary).Any()) { - output.Append($"{tab}{tab}Task UpdateAsync(IEnumerable<{ClassName}> " + + output.Add($"{tab}{tab}Task UpdateAsync(IEnumerable<{ClassName}> " + $"{_stringTransform.PluralizeToLower(ClassName)});"); - - output.Append(Environment.NewLine); } //Update bulk if (TableSettings.UpdateBulkGenerator && ColumnForUpdateOperations!.Where(c => !c.IsAutoIncrement && !c.IsPrimary).Any()) { - output.Append($"{tab}{tab}Task UpdateBulkAsync(IEnumerable<{ClassName}> " + + output.Add($"{tab}{tab}Task UpdateBulkAsync(IEnumerable<{ClassName}> " + $"{_stringTransform.PluralizeToLower(ClassName)});"); - - output.Append(Environment.NewLine); } //Delete if (TableSettings.DeleteGenerator && !string.IsNullOrEmpty(GetPkMemberNamesString())) { - output.Append($"{tab}{tab}Task DeleteAsync({GetPkMemberNamesStringAndType()});"); - - output.Append(Environment.NewLine); + output.Add($"{tab}{tab}Task DeleteAsync({GetPkMemberNamesStringAndType()});"); } //Delete by pklist if (TableSettings.DeleteByPkListGenerator && !string.IsNullOrEmpty(GetPkMemberNamesString())) { - output.Append($"{tab}{tab}Task DeleteAsync({GetPkMemberNamesStringAndTypeList()});"); - - output.Append(Environment.NewLine); + output.Add($"{tab}{tab}Task DeleteAsync({GetPkMemberNamesStringAndTypeList()});"); } //Delete bulk if (TableSettings.DeleteBulkGenerator && !string.IsNullOrEmpty(GetPkMemberNamesString())) { - output.Append($"{tab}{tab}Task DeleteBulkAsync({GetPkMemberNamesStringAndTypeList()});"); - - output.Append(Environment.NewLine); + output.Add($"{tab}{tab}Task DeleteBulkAsync({GetPkMemberNamesStringAndTypeList()});"); } - return output.ToString(); + return String.Join(Environment.NewLine,output); } } } From ea93312e6d21812e122bd97567d885d8d22b3785 Mon Sep 17 00:00:00 2001 From: Fabien Donnet Date: Fri, 2 Dec 2022 15:45:02 +0100 Subject: [PATCH 35/48] Simple test for repomain generator --- .../Dapper-Layers-Generator.Test.csproj | 4 ++ .../Generators/GeneratorRepoMain_Tests.cs | 34 +++++++++++++ .../MySql/MySqlGeneratorRepoMain_Tests.cs | 34 +++++++++++++ .../GeneratorRepoMain_ResultStandard.txt | 49 +++++++++++++++++++ .../MySqlGeneratorRepoMain_ResultStandard.txt | 25 ++++++++++ 5 files changed, 146 insertions(+) create mode 100644 test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoMain_Tests.cs create mode 100644 test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorRepoMain_Tests.cs create mode 100644 test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoMain_ResultStandard.txt create mode 100644 test/Dapper-Layers-Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoMain_ResultStandard.txt diff --git a/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj b/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj index 420ccb6..dfc9fe8 100644 --- a/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj +++ b/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj @@ -30,6 +30,7 @@ + @@ -42,13 +43,16 @@ + + + diff --git a/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoMain_Tests.cs b/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoMain_Tests.cs new file mode 100644 index 0000000..b8983ee --- /dev/null +++ b/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoMain_Tests.cs @@ -0,0 +1,34 @@ +using Dapper_Layers_Generator.Core.Converters.MySql; +using Dapper_Layers_Generator.Core.Converters; +using Dapper_Layers_Generator.Core.Generators; +using Dapper_Layers_Generator.Test.Config; + +namespace Dapper_Layers_Generator.Test.Generators +{ + public class GeneratorRepoMain_Tests : GeneratorBaseTest + { + private MySqlDataTypeConverter _dataConverter; + private StringTransformationService _transformString; + + public GeneratorRepoMain_Tests() : base() + { + _dataConverter = new MySqlDataTypeConverter(); + _transformString = new StringTransformationService(_settings); + } + + [Fact()] + public void GenerateStandard_Test() + { + //Arrange + var generator = new GeneratorRepoMain(_settings, _mockDbDefinitions.Object, _transformString, _dataConverter); + generator.SetTable("clients"); + var expected = ResourceTool.Read("Dapper_Layers_Generator.Test/Results/Generators/GeneratorRepoMain_ResultStandard.txt"); + + //Act + var result = generator.Generate(); + + //Assert + Assert.Equal(expected, result); + } + } +} diff --git a/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorRepoMain_Tests.cs b/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorRepoMain_Tests.cs new file mode 100644 index 0000000..8a13408 --- /dev/null +++ b/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorRepoMain_Tests.cs @@ -0,0 +1,34 @@ +using Dapper_Layers_Generator.Core.Converters.MySql; +using Dapper_Layers_Generator.Core.Converters; +using Dapper_Layers_Generator.Core.Generators.MySql; +using Dapper_Layers_Generator.Test.Config; + +namespace Dapper_Layers_Generator.Test.Generators.MySql +{ + public class MySqlGeneratorRepoMain_Tests : GeneratorBaseTest + { + private MySqlDataTypeConverter _dataConverter; + private StringTransformationService _transformString; + + public MySqlGeneratorRepoMain_Tests() : base() + { + _dataConverter = new MySqlDataTypeConverter(); + _transformString = new StringTransformationService(_settings); + } + + [Fact()] + public void GenerateStandard_Test() + { + //Arrange + var generator = new MySqlGeneratorRepoMain(_settings, _mockDbDefinitions.Object, _transformString, _dataConverter); + generator.SetTable("clients"); + var expected = ResourceTool.Read("Dapper_Layers_Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoMain_ResultStandard.txt"); + + //Act + var result = generator.Generate(); + + //Assert + Assert.Equal(expected, result); + } + } +} diff --git a/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoMain_ResultStandard.txt b/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoMain_ResultStandard.txt new file mode 100644 index 0000000..af1ef0a --- /dev/null +++ b/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoMain_ResultStandard.txt @@ -0,0 +1,49 @@ +using DapperTest.POCO; +using Dapper; +using DapperTest.DbContext; + +// ================================================================= +// Repo class for table clients +// Base abstract class that can be used with no specific db provider +// You can extend it via other partial files where you know that a +// query can run the same on different db providers +// Author: Dapper Generator +// Repo name: ClientRepoBase +// Generated: 2022-12-01 12:46:29 UTC +// WARNING: Never change this file manually (re-generate it) +// ================================================================= + +namespace DapperTest.Repo +{ + /// ================================================================= + /// Author: Dapper Generator + /// Description: Interface for the repo ClientRepo + /// You can extend it with partial file + /// ================================================================= + public partial interface IClientRepo + { + Task> GetAllAsync(); + Task GetByIdAsync(int id); + Task> GetByIdAsync(IEnumerable listOfId); + Task> GetByIdBulkAsync(IEnumerable listOfId); + Task GetByFirstnameAndLastnameAndAddresAsync(string firstname, string lastname, string address); + Task AddAsync(Client client); + Task AddAsync(IEnumerable clients); + Task AddBulkAsync(IEnumerable clients); + Task UpdateAsync(Client client); + Task UpdateAsync(IEnumerable clients); + Task UpdateBulkAsync(IEnumerable clients); + Task DeleteAsync(int id); + Task DeleteAsync(IEnumerable listOfId); + Task DeleteBulkAsync(IEnumerable listOfId); + } + + public abstract partial class ClientRepoBase : IClientRepo + { + protected readonly IDbContext _dbContext; + + public ClientRepoBase(IDbContext dbContext) + { + _dbContext = dbContext; + } + diff --git a/test/Dapper-Layers-Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoMain_ResultStandard.txt b/test/Dapper-Layers-Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoMain_ResultStandard.txt new file mode 100644 index 0000000..f247656 --- /dev/null +++ b/test/Dapper-Layers-Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoMain_ResultStandard.txt @@ -0,0 +1,25 @@ +using DapperTest.POCO; +using Dapper; +using DapperTest.DbContext; +using MySqlConnector; +using System.Data; + +// ================================================================= +// Repo class for table clients +// Specific repo implementation for dbprovider : MySql +// You can extend it via other partial files where you have specific +// queries for specific dbs (if standard SQL is not sufficent) +// Author: Dapper Generator +// Repo name: ClientRepoMySql +// Generated: 2022-12-01 12:46:29 UTC +// WARNING: Never change this file manually (re-generate it) +// ================================================================= + +namespace DapperTest.Repo +{ + public partial class ClientRepoMySql : ClientRepoBase, IClientRepo + { + public ClientRepoMySql(IDbContext dbContext): base (dbContext) + { + } + From 9b92def2425fa43f83e0c2283bf72de31aacd5e5 Mon Sep 17 00:00:00 2001 From: Fabien Donnet Date: Fri, 2 Dec 2022 15:53:07 +0100 Subject: [PATCH 36/48] c# update repo string literal --- .../Generators/GeneratorForOperations.cs | 7 +-- .../Generators/GeneratorRepoUpdate.cs | 50 ++++++++----------- 2 files changed, 26 insertions(+), 31 deletions(-) diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorForOperations.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorForOperations.cs index 1a68691..bc9c26b 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorForOperations.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorForOperations.cs @@ -81,11 +81,12 @@ protected string WriteBaseSqlForUpdate() throw new ArgumentException($"No column available for update for this table{Table.Name}, genererator crash"); return - $""" - {tab}{tab}{tab}var sql = @" + $"""" + {tab}{tab}{tab}var sql = + {tab}{tab}{tab}""" {tab}{tab}{tab}UPDATE {ColAndTableIdentifier}{Table.Name}{ColAndTableIdentifier} {tab}{tab}{tab}SET {WriteColumnListStringForUpdate()} - """; + """"; } private string WriteColumnListStringForUpdate() diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoUpdate.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoUpdate.cs index b04b201..18948ab 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoUpdate.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoUpdate.cs @@ -23,22 +23,18 @@ public override string Generate() { if (TableSettings.UpdateGenerator && ColumnForUpdateOperations!.Where(c => !c.IsAutoIncrement && !c.IsPrimary).Any()) { - var output = new StringBuilder(); - output.Append(WriteMethodDef()); - output.Append(Environment.NewLine); - output.Append(GetDapperDynaParams()); - output.Append(Environment.NewLine); - output.Append(Environment.NewLine); - output.Append(WriteBaseSqlForUpdate()); - output.Append(WriteSqlWhereClauseForPk()); - output.Append(Environment.NewLine); - output.Append(Environment.NewLine); - output.Append(WriteDapperCall()); - output.Append(Environment.NewLine); - output.Append($"{tab}{tab}}}"); - output.Append(Environment.NewLine); + return + $$""" + {{WriteMethodDef()}} + {{WriteDapperDynaParams()}} - return output.ToString(); + {{WriteBaseSqlForUpdate()}} + {{WriteSqlWhereClauseForPk()}} + + {{WriteDapperCall()}} + {{tab}}{{tab}}} + + """; } return string.Empty; @@ -46,10 +42,11 @@ public override string Generate() protected override string WriteMethodDef() { - return $"{tab}{tab}public {(IsBase ? "virtual" : "override")} async Task UpdateAsync({ClassName} " + - $"{_stringTransform.ApplyConfigTransformMember(ClassName)})" + - @$" -{tab}{tab}{{"; + return + $$""" + {{tab}}{{tab}}public {{(IsBase ? "virtual" : "override")}} async Task UpdateAsync({{ClassName}} {{_stringTransform.ApplyConfigTransformMember(ClassName)}}) + {{tab}}{{tab}}{ + """; } protected override string WriteDapperCall() @@ -58,12 +55,8 @@ protected override string WriteDapperCall() $"ExecuteAsync(sql,p,transaction:_{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.Transaction);"; } - protected virtual string GetDapperDynaParams() + protected virtual string WriteDapperDynaParams() { - var output = new StringBuilder(); - output.Append($"{tab}{tab}{tab}var p = new DynamicParameters();"); - output.Append(Environment.NewLine); - var cols = ColumnForUpdateOperations!; var spParams = String.Join(Environment.NewLine, cols.OrderBy(c => c.Position).Select(col => @@ -71,15 +64,16 @@ protected virtual string GetDapperDynaParams() return $@"{tab}{tab}{tab}p.Add(""@{col.Name}"", {_stringTransform.ApplyConfigTransformMember(ClassName)}.{_stringTransform.PascalCase(col.Name)});"; })); - output.Append(spParams); - return output.ToString(); + return + $$""" + {{tab}}{{tab}}{{tab}}var p = new DynamicParameters(); + {{spParams}} + """; } protected override string WriteReturnObj() { return $"{tab}{tab}{tab}return {ClassName.ToLower()};"; } - - } } From 1d1f6aa565cc5edace3ed55a2acd8dc89883fb26 Mon Sep 17 00:00:00 2001 From: Fabien Donnet Date: Fri, 2 Dec 2022 15:55:22 +0100 Subject: [PATCH 37/48] Simple test for update repo --- .../Dapper-Layers-Generator.Test.csproj | 2 ++ .../Generators/GeneratorRepoUpdate_Tests.cs | 34 +++++++++++++++++++ .../GeneratorRepoUpdate_ResultStandard.txt | 31 +++++++++++++++++ 3 files changed, 67 insertions(+) create mode 100644 test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoUpdate_Tests.cs create mode 100644 test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoUpdate_ResultStandard.txt diff --git a/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj b/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj index dfc9fe8..a70e072 100644 --- a/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj +++ b/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj @@ -31,6 +31,7 @@ + @@ -51,6 +52,7 @@ + diff --git a/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoUpdate_Tests.cs b/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoUpdate_Tests.cs new file mode 100644 index 0000000..e4b417f --- /dev/null +++ b/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoUpdate_Tests.cs @@ -0,0 +1,34 @@ +using Dapper_Layers_Generator.Core.Converters.MySql; +using Dapper_Layers_Generator.Core.Converters; +using Dapper_Layers_Generator.Core.Generators; +using Dapper_Layers_Generator.Test.Config; + +namespace Dapper_Layers_Generator.Test.Generators +{ + public class GeneratorRepoUpdate_Tests : GeneratorBaseTest + { + private MySqlDataTypeConverter _dataConverter; + private StringTransformationService _transformString; + + public GeneratorRepoUpdate_Tests() : base() + { + _dataConverter = new MySqlDataTypeConverter(); + _transformString = new StringTransformationService(_settings); + } + + [Fact()] + public void GenerateStandard_Test() + { + //Arrange + var generator = new GeneratorRepoUpdate(_settings, _mockDbDefinitions.Object, _transformString, _dataConverter); + generator.SetTable("clients"); + var expected = ResourceTool.Read("Dapper_Layers_Generator.Test/Results/Generators/GeneratorRepoUpdate_ResultStandard.txt"); + + //Act + var result = generator.Generate(); + + //Assert + Assert.Equal(expected, result); + } + } +} diff --git a/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoUpdate_ResultStandard.txt b/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoUpdate_ResultStandard.txt new file mode 100644 index 0000000..12d7d7e --- /dev/null +++ b/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoUpdate_ResultStandard.txt @@ -0,0 +1,31 @@ + public virtual async Task UpdateAsync(Client client) + { + var p = new DynamicParameters(); + p.Add("@id", client.Id); + p.Add("@firstname", client.Firstname); + p.Add("@lastname", client.Lastname); + p.Add("@address", client.Address); + p.Add("@comment", client.Comment); + p.Add("@created_at", client.CreatedAt); + p.Add("@postal", client.Postal); + p.Add("@city", client.City); + p.Add("@phone", client.Phone); + p.Add("@email", client.Email); + + var sql = + """ + UPDATE clients + SET firstname = @firstname + ,lastname = @lastname + ,address = @address + ,comment = @comment + ,created_at = @created_at + ,postal = @postal + ,city = @city + ,phone = @phone + ,email = @email + WHERE id = @id + """; + + _ = await _dbContext.Connection.ExecuteAsync(sql,p,transaction:_dbContext.Transaction); + } From 2eb162665121d1642b030c3291c6793e554b85d5 Mon Sep 17 00:00:00 2001 From: Fabien Donnet Date: Fri, 2 Dec 2022 16:18:29 +0100 Subject: [PATCH 38/48] c# 11 literal for bulkupdate generator --- .../Generators/GeneratorRepoUpdateBulk.cs | 18 +- .../MySql/MySqlGeneratorRepoUpdateBulk.cs | 176 +++++++----------- 2 files changed, 81 insertions(+), 113 deletions(-) diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoUpdateBulk.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoUpdateBulk.cs index bc5f5ec..16ff8d3 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoUpdateBulk.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoUpdateBulk.cs @@ -25,14 +25,15 @@ public override string Generate() { if (TableSettings.UpdateBulkGenerator && ColumnForUpdateOperations!.Where(c => !c.IsAutoIncrement && !c.IsPrimary).Any()) { - var output = new StringBuilder(); - output.Append(WriteMethodDef()); if (!IsBase) { //Will se if we can use some part of code for multi db providers for the moment the implementation is in MySql only child class } - return output.ToString(); + return + $$""" + {{WriteMethodDef()}} + """; } return string.Empty; @@ -40,11 +41,12 @@ public override string Generate() protected override string WriteMethodDef() { - return $"{tab}{tab}//Please use this bulk by batch depending on the mem available 500 / 1000 / 1500 rows" + Environment.NewLine + - $"{tab}{tab}public {(IsBase ? "abstract" : "override async")} Task UpdateBulkAsync(IEnumerable<{ClassName}> " + - $"{_stringTransform.PluralizeToLower(ClassName)}){(IsBase ? ";" : string.Empty)}" + (!IsBase ? @$" -{tab}{tab}{{" : Environment.NewLine); - + return + $$""" + {{tab}}{{tab}}//Please use this bulk by batch depending on the mem available 500 / 1000 / 1500 rows + {{tab}}{{tab}}public {{(IsBase ? "abstract" : "override async")}} Task UpdateBulkAsync(IEnumerable<{{ClassName}}> {{_stringTransform.PluralizeToLower(ClassName)}}){{(IsBase ? ";" : string.Empty)}} + {{(!IsBase ? @$"{tab}{tab}{{" : string.Empty)}} + """; } protected override string WriteDapperCall() diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoUpdateBulk.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoUpdateBulk.cs index 7a911fd..b16ba99 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoUpdateBulk.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoUpdateBulk.cs @@ -23,61 +23,45 @@ public MySqlGeneratorRepoUpdateBulk(SettingsGlobal settingsGlobal public override string Generate() { - if (TableSettings.UpdateBulkGenerator && ColumnForUpdateOperations!.Where(c => !c.IsAutoIncrement && !c.IsPrimary).Any()) - { - var output = new StringBuilder(); - output.Append(WriteMethodDef()); - output.Append(Environment.NewLine); - output.Append(WriteOpenTransAndInitBulkMySql()); - output.Append(Environment.NewLine); - output.Append(Environment.NewLine); - output.Append(GetCreateDbTmpTable()); - output.Append(Environment.NewLine); - output.Append(Environment.NewLine); - output.Append(GetCreateDataTable()); - output.Append(Environment.NewLine); - output.Append(Environment.NewLine); - output.Append(WriteBulkCallMySql()); - output.Append(Environment.NewLine); - output.Append(Environment.NewLine); - output.Append(@GetUpdateFromTmpTable()); - output.Append(Environment.NewLine); - output.Append(Environment.NewLine); - output.Append(WriteDapperCall()); - output.Append(Environment.NewLine); - output.Append(Environment.NewLine); - output.Append(WriteCloseTransaction()); - output.Append(Environment.NewLine); - output.Append($"{tab}{tab}}}"); - output.Append(Environment.NewLine); - output.Append(Environment.NewLine); - - return output.ToString(); - } + return TableSettings.UpdateBulkGenerator && ColumnForUpdateOperations!.Where(c => !c.IsAutoIncrement && !c.IsPrimary).Any() + ? $$""" + {{WriteMethodDef()}} + {{WriteOpenTransAndInitBulkMySql()}} + + {{WriteCreateDbTmpTable()}} + + {{WriteCreateDataTable()}} + + {{WriteBulkCallMySql()}} - return string.Empty; + {{WriteUpdateFromTmpTable()}} + + {{WriteDapperCall()}} + + {{WriteCloseTransaction()}} + {{tab}}{{tab}}} + + """ + : string.Empty; } - protected virtual string GetCreateDataTable() + protected virtual string WriteCreateDataTable() { - var output = new StringBuilder(); - output.Append($"{tab}{tab}{tab}var table = new DataTable();" + Environment.NewLine); - if (ColumnForUpdateOperations == null || !ColumnForUpdateOperations.Any()) throw new ArgumentException($"No column defined for update (bulk), for table {Table.Name}"); var columnsForBulk = ColumnForUpdateOperations; var rowsAdd = new List(); + var colAdd = new List(); foreach (var colBulk in columnsForBulk) { - output.Append($@"{tab}{tab}{tab}table.Columns.Add(""{colBulk.Name}"",typeof({DataConverter.GetDotNetDataType(colBulk.DataType)}));" + Environment.NewLine); + colAdd.Add($@"{tab}{tab}{tab}table.Columns.Add(""{colBulk.Name}"",typeof({DataConverter.GetDotNetDataType(colBulk.DataType)}));"); if (colBulk.IsNullable) { - output.Append($@"{tab}{tab}{tab}table.Columns[""{colBulk.Name}""]!.AllowDBNull = true;" + Environment.NewLine); + colAdd.Add($@"{tab}{tab}{tab}table.Columns[""{colBulk.Name}""]!.AllowDBNull = true;"); rowsAdd.Add($"{tab}{tab}{tab}{tab}r[\"{colBulk.Name}\"] = {ClassName.ToLower()}.{_stringTransform.PascalCase(colBulk.Name)} == null " + $"? DBNull.Value : {ClassName.ToLower()}.{_stringTransform.PascalCase(colBulk.Name)};"); - } else { @@ -85,93 +69,75 @@ protected virtual string GetCreateDataTable() } } - output.Append(Environment.NewLine); - output.Append($@"{tab}{tab}{tab}bulkCopy.DestinationTableName = ""tmp_bulkupd_{Table.Name}"";"); - output.Append(Environment.NewLine); - output.Append($@"{tab}{tab}{tab}bulkCopy.BulkCopyTimeout = 600;"); - output.Append(Environment.NewLine); - output.Append(Environment.NewLine); - - output.Append(@$"{tab}{tab}{tab}foreach(var {ClassName.ToLower()} in {_stringTransform.PluralizeToLower(ClassName)}) -{tab}{tab}{tab}{{ -{tab}{tab}{tab}{tab}DataRow r = table.NewRow();"); - - output.Append(Environment.NewLine); - output.Append(String.Join(Environment.NewLine, rowsAdd)); - output.Append(Environment.NewLine); - output.Append($"{tab}{tab}{tab}{tab}table.Rows.Add(r);"); - output.Append(Environment.NewLine); - output.Append($"{tab}{tab}{tab}}}"); - output.Append(Environment.NewLine); - output.Append(Environment.NewLine); - - output.Append($@"{tab}{tab}{tab}List colMappings = new(); -{tab}{tab}{tab}int i = 0; -{tab}{tab}{tab}foreach (DataColumn col in table.Columns) -{tab}{tab}{tab}{{ -{tab}{tab}{tab}{tab}colMappings.Add(new MySqlBulkCopyColumnMapping(i, col.ColumnName)); -{tab}{tab}{tab}{tab}i++; -{tab}{tab}{tab}}} - -{tab}{tab}{tab}bulkCopy.ColumnMappings.AddRange(colMappings);"); - - return output.ToString(); + return + $$""" + {{tab}}{{tab}}{{tab}}var table = new DataTable(); + {{String.Join(Environment.NewLine, colAdd)}} + + {{tab}}{{tab}}{{tab}}bulkCopy.DestinationTableName = "tmp_bulkupd_{{Table.Name}}"; + {{tab}}{{tab}}{{tab}}bulkCopy.BulkCopyTimeout = 600; + + {{tab}}{{tab}}{{tab}}foreach(var {{ClassName.ToLower()}} in {{_stringTransform.PluralizeToLower(ClassName)}}) + {{tab}}{{tab}}{{tab}}{ + {{tab}}{{tab}}{{tab}}{{tab}}DataRow r = table.NewRow(); + {{String.Join(Environment.NewLine, rowsAdd)}} + {{tab}}{{tab}}{{tab}}{{tab}}table.Rows.Add(r); + {{tab}}{{tab}}{{tab}}} + + {{tab}}{{tab}}{{tab}}List colMappings = new(); + {{tab}}{{tab}}{{tab}}int i = 0; + {{tab}}{{tab}}{{tab}}foreach (DataColumn col in table.Columns) + {{tab}}{{tab}}{{tab}}{ + {{tab}}{{tab}}{{tab}}{{tab}}colMappings.Add(new MySqlBulkCopyColumnMapping(i, col.ColumnName)); + {{tab}}{{tab}}{{tab}}{{tab}}i++; + {{tab}}{{tab}}{{tab}}} + + {{tab}}{{tab}}{{tab}}bulkCopy.ColumnMappings.AddRange(colMappings); + """; } - protected virtual string GetCreateDbTmpTable() + protected virtual string WriteCreateDbTmpTable() { - var output = new StringBuilder(); - - output.Append($"{tab}{tab}{tab}var sqltmp = \"CREATE TEMPORARY TABLE " + - $"{ColAndTableIdentifier}tmp_bulkupd_{Table.Name}{ColAndTableIdentifier} LIKE {ColAndTableIdentifier}{Table.Name}{ColAndTableIdentifier};\";"); - - output.Append(Environment.NewLine); - output.Append($"{tab}{tab}{tab}_ = await _{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.Connection." + - $"ExecuteAsync(sqltmp,transaction:_{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.Transaction);"); - - return output.ToString(); + return + $$"""" + {{tab}}{{tab}}{{tab}}{{tab}}var sqltmp = $"CREATE TEMPORARY TABLE {{ColAndTableIdentifier}}tmp_bulkupd_{{Table.Name}}{{ColAndTableIdentifier}} LIKE {{ColAndTableIdentifier}}{{Table.Name}}{{ColAndTableIdentifier}};"; + {{tab}}{{tab}}{{tab}}_ = await _{{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}}.Connection.ExecuteAsync(sqltmp,transaction:_{{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}}.Transaction); + """"; } protected override string WriteDapperCall() { - var output = new StringBuilder($"{tab}{tab}{tab}_ = await _{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.Connection." + - $"ExecuteAsync(sql,transaction:_{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.Transaction);"); - - output.Append(Environment.NewLine); - output.Append(Environment.NewLine); - output.Append($"{tab}{tab}{tab}var sqlDrop = \"DROP TABLE {ColAndTableIdentifier}tmp_bulkupd_{Table.Name}{ColAndTableIdentifier};\";"); - output.Append(Environment.NewLine); - output.Append($"{tab}{tab}{tab}_ = await _{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.Connection." + - $"ExecuteAsync(sqlDrop,transaction:_{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.Transaction);"); + return + $$""" + {{tab}}{{tab}}{{tab}}_ = await _{{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}}.Connection.ExecuteAsync(sql,transaction:_{{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}}.Transaction); - return output.ToString(); + {{tab}}{{tab}}{{tab}}var sqlDrop = "DROP TABLE {{ColAndTableIdentifier}}tmp_bulkupd_{{Table.Name}}{{ColAndTableIdentifier}};"; + {{tab}}{{tab}}{{tab}}_ = await _{{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}}.Connection.ExecuteAsync(sqlDrop,transaction:_{{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}}.Transaction); + """; } - protected virtual string GetUpdateFromTmpTable() + protected virtual string WriteUpdateFromTmpTable() { - var output = new StringBuilder(); - output.Append($"{tab}{tab}{tab}var sql = @\"UPDATE {ColAndTableIdentifier}{Table.Name}{ColAndTableIdentifier} t1, " + - $"{ColAndTableIdentifier}tmp_bulkupd_{Table.Name}{ColAndTableIdentifier} t2" + Environment.NewLine + - $"{tab}{tab}{tab}{tab}SET" + Environment.NewLine + $"{tab}{tab}{tab}{tab}"); - //Update fields var fields = String.Join(Environment.NewLine + $"{tab}{tab}{tab}{tab}{tab},", ColumnForUpdateOperations!.Where(c=>!c.IsAutoIncrement).Select(c => $"t1.{ColAndTableIdentifier}{c.Name}{ColAndTableIdentifier} = t2.{ColAndTableIdentifier}{c.Name}{ColAndTableIdentifier}")); - output.Append(fields); - output.Append(Environment.NewLine); - output.Append($"{tab}{tab}{tab}{tab}WHERE "); - var whereClause = String.Join(Environment.NewLine + $"{tab}{tab}{tab}{tab}AND ", PkColumns.Select(col => { return $"t1.{ColAndTableIdentifier}{col.Name}{ColAndTableIdentifier} = t2.{ColAndTableIdentifier}{col.Name}{ColAndTableIdentifier}"; })); - output.Append(whereClause + "\";"); - - return output.ToString(); - + return + $$"""" + {{tab}}{{tab}}{{tab}}var sql = + {{tab}}{{tab}}{{tab}}""" + {{tab}}{{tab}}{{tab}}UPDATE {{ColAndTableIdentifier}}{{Table.Name}}{{ColAndTableIdentifier}} t1, {{ColAndTableIdentifier}}tmp_bulkupd_{{Table.Name}}{{ColAndTableIdentifier}} t2 + {{tab}}{{tab}}{{tab}}{{tab}}SET + {{tab}}{{tab}}{{tab}}{{tab}}{{fields}} + {{tab}}{{tab}}{{tab}}{{tab}}WHERE {{whereClause}}; + {{tab}}{{tab}}{{tab}}"""; + """"; } } } From ed6a31fff34960f3b9b6fa39b35d5fc97c41cb4d Mon Sep 17 00:00:00 2001 From: Fabien Donnet Date: Fri, 2 Dec 2022 16:21:00 +0100 Subject: [PATCH 39/48] Simple test for MySqlUpdate bulk generator --- .../Dapper-Layers-Generator.Test.csproj | 2 + .../MySqlGeneratorRepoUpdateBulk_Tests.cs | 34 +++++++ ...GeneratorRepoUpdateBulk_ResultStandard.txt | 90 +++++++++++++++++++ 3 files changed, 126 insertions(+) create mode 100644 test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorRepoUpdateBulk_Tests.cs create mode 100644 test/Dapper-Layers-Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoUpdateBulk_ResultStandard.txt diff --git a/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj b/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj index a70e072..738094e 100644 --- a/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj +++ b/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj @@ -45,6 +45,7 @@ + @@ -55,6 +56,7 @@ + diff --git a/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorRepoUpdateBulk_Tests.cs b/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorRepoUpdateBulk_Tests.cs new file mode 100644 index 0000000..8053e7c --- /dev/null +++ b/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorRepoUpdateBulk_Tests.cs @@ -0,0 +1,34 @@ +using Dapper_Layers_Generator.Core.Converters.MySql; +using Dapper_Layers_Generator.Core.Converters; +using Dapper_Layers_Generator.Core.Generators.MySql; +using Dapper_Layers_Generator.Test.Config; + +namespace Dapper_Layers_Generator.Test.Generators.MySql +{ + public class MySqlGeneratorRepoUpdateBulk_Tests : GeneratorBaseTest + { + private MySqlDataTypeConverter _dataConverter; + private StringTransformationService _transformString; + + public MySqlGeneratorRepoUpdateBulk_Tests() : base() + { + _dataConverter = new MySqlDataTypeConverter(); + _transformString = new StringTransformationService(_settings); + } + + [Fact()] + public void GenerateStandard_Test() + { + //Arrange + var generator = new MySqlGeneratorRepoUpdateBulk(_settings, _mockDbDefinitions.Object, _transformString, _dataConverter); + generator.SetTable("clients"); + var expected = ResourceTool.Read("Dapper_Layers_Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoUpdateBulk_ResultStandard.txt"); + + //Act + var result = generator.Generate(); + + //Assert + Assert.Equal(expected, result); + } + } +} diff --git a/test/Dapper-Layers-Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoUpdateBulk_ResultStandard.txt b/test/Dapper-Layers-Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoUpdateBulk_ResultStandard.txt new file mode 100644 index 0000000..805c8f2 --- /dev/null +++ b/test/Dapper-Layers-Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoUpdateBulk_ResultStandard.txt @@ -0,0 +1,90 @@ + //Please use this bulk by batch depending on the mem available 500 / 1000 / 1500 rows + public override async Task UpdateBulkAsync(IEnumerable clients) + { + var isTransAlreadyOpen = _dbContext.Transaction != null; + + if (!isTransAlreadyOpen) + await _dbContext.OpenTransactionAsync(); + + var bulkCopy = new MySqlBulkCopy((MySqlConnection)_dbContext.Connection + , (MySqlTransaction?)_dbContext.Transaction); + + var sqltmp = $"CREATE TEMPORARY TABLE `tmp_bulkupd_clients` LIKE `clients`;"; + + _ = await _dbContext.Connection.ExecuteAsync(sqltmp,transaction:_dbContext.Transaction); + + var table = new DataTable(); + table.Columns.Add("id",typeof(int)); + table.Columns.Add("firstname",typeof(string)); + table.Columns.Add("lastname",typeof(string)); + table.Columns.Add("address",typeof(string)); + table.Columns.Add("comment",typeof(string)); + table.Columns["comment"]!.AllowDBNull = true; + table.Columns.Add("created_at",typeof(DateTime)); + table.Columns.Add("postal",typeof(string)); + table.Columns["postal"]!.AllowDBNull = true; + table.Columns.Add("city",typeof(string)); + table.Columns["city"]!.AllowDBNull = true; + table.Columns.Add("phone",typeof(string)); + table.Columns["phone"]!.AllowDBNull = true; + table.Columns.Add("email",typeof(string)); + table.Columns["email"]!.AllowDBNull = true; + + bulkCopy.DestinationTableName = "tmp_bulkupd_clients"; + bulkCopy.BulkCopyTimeout = 600; + + foreach(var client in clients) + { + DataRow r = table.NewRow(); + r["id"] = client.Id; + r["firstname"] = client.Firstname; + r["lastname"] = client.Lastname; + r["address"] = client.Address; + r["comment"] = client.Comment == null ? DBNull.Value : client.Comment; + r["created_at"] = client.CreatedAt; + r["postal"] = client.Postal == null ? DBNull.Value : client.Postal; + r["city"] = client.City == null ? DBNull.Value : client.City; + r["phone"] = client.Phone == null ? DBNull.Value : client.Phone; + r["email"] = client.Email == null ? DBNull.Value : client.Email; + table.Rows.Add(r); + } + + List colMappings = new(); + int i = 0; + foreach (DataColumn col in table.Columns) + { + colMappings.Add(new MySqlBulkCopyColumnMapping(i, col.ColumnName)); + i++; + } + + bulkCopy.ColumnMappings.AddRange(colMappings); + + await bulkCopy.WriteToServerAsync(table); + + var sql = + """ + UPDATE `clients` t1, `tmp_bulkupd_clients` t2 + SET + t1.`firstname` = t2.`firstname` + ,t1.`lastname` = t2.`lastname` + ,t1.`address` = t2.`address` + ,t1.`comment` = t2.`comment` + ,t1.`created_at` = t2.`created_at` + ,t1.`postal` = t2.`postal` + ,t1.`city` = t2.`city` + ,t1.`phone` = t2.`phone` + ,t1.`email` = t2.`email` + WHERE t1.`id` = t2.`id`; + """; + + _ = await _dbContext.Connection.ExecuteAsync(sql,transaction:_dbContext.Transaction); + + var sqlDrop = "DROP TABLE `tmp_bulkupd_clients`;"; + _ = await _dbContext.Connection.ExecuteAsync(sqlDrop,transaction:_dbContext.Transaction); + + if (!isTransAlreadyOpen) + { + _dbContext.CommitTransaction(); + _dbContext.Connection.Close(); + } + } From 4aeba48ca6ad01cd7fb127379257095ce316ba87 Mon Sep 17 00:00:00 2001 From: Fabien Donnet Date: Fri, 2 Dec 2022 16:29:23 +0100 Subject: [PATCH 40/48] c#11 literal for bulkmulti --- .../Generators/GeneratorRepoUpdateMulti.cs | 70 ++++++++----------- .../MySql/MySqlGeneratorRepoUpdateBulk.cs | 2 +- ...GeneratorRepoUpdateBulk_ResultStandard.txt | 2 +- 3 files changed, 31 insertions(+), 43 deletions(-) diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoUpdateMulti.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoUpdateMulti.cs index 9582cf3..ba97da6 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoUpdateMulti.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/GeneratorRepoUpdateMulti.cs @@ -22,67 +22,55 @@ public GeneratorRepoUpdateMulti(SettingsGlobal settingsGlobal public override string Generate() { - if (TableSettings.UpdateGenerator && ColumnForUpdateOperations!.Where(c => !c.IsAutoIncrement && !c.IsPrimary).Any()) - { - var output = new StringBuilder(); - output.Append(WriteMethodDef()); - output.Append(Environment.NewLine); - output.Append(WriteOpenTransactionAndLoopBegin()); - output.Append(Environment.NewLine); - output.Append(GetDapperDynaParams()); - output.Append(Environment.NewLine); - output.Append(Environment.NewLine); - output.Append(WriteBaseSqlForUpdate().Replace($"{tab}{tab}{tab}", $"{tab}{tab}{tab}{tab}")); - output.Append(WriteSqlWhereClauseForPk().Replace($"{tab}{tab}{tab}", $"{tab}{tab}{tab}{tab}")); - output.Append(Environment.NewLine); - output.Append(Environment.NewLine); - output.Append(WriteDapperCall()); - output.Append(Environment.NewLine); - output.Append(Environment.NewLine); - output.Append(WriteCloseTransaction()); - output.Append(Environment.NewLine); - output.Append($"{tab}{tab}}}"); - output.Append(Environment.NewLine); + return TableSettings.UpdateGenerator && ColumnForUpdateOperations!.Where(c => !c.IsAutoIncrement && !c.IsPrimary).Any() + ? $$""" + {{WriteMethodDef()}} + {{WriteOpenTransactionAndLoopBegin()}} + {{GetDapperDynaParams()}} - return output.ToString(); - } + {{WriteBaseSqlForUpdate().Replace($"{tab}{tab}{tab}", $"{tab}{tab}{tab}{tab}")}} + {{WriteSqlWhereClauseForPk().Replace($"{tab}{tab}{tab}", $"{tab}{tab}{tab}{tab}")}} - return string.Empty; + {{WriteDapperCall()}} + + {{WriteCloseTransaction()}} + {{tab}}{{tab}}} + + """ + : string.Empty; } protected override string WriteMethodDef() { - return $"{tab}{tab}public {(IsBase ? "virtual" : "override")} async Task UpdateAsync(IEnumerable<{ClassName}> " + - $"{_stringTransform.PluralizeToLower(ClassName)})" + - @$" -{tab}{tab}{{"; + return + $$""" + {{tab}}{{tab}}public {{(IsBase ? "virtual" : "override")}} async Task UpdateAsync(IEnumerable<{{ClassName}}> {{_stringTransform.PluralizeToLower(ClassName)}}) + {{tab}}{{tab}}{ + """; } protected override string WriteDapperCall() { - return $"{tab}{tab}{tab}{tab}_ = " + - $"await _{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.Connection." + - $"ExecuteAsync(sql,p,transaction:_{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.Transaction);" + - Environment.NewLine + - $"{tab}{tab}{tab}}}"; - + return + $$""" + {{tab}}{{tab}}{{tab}}{{tab}}_ = await _{{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}}.Connection.ExecuteAsync(sql,p,transaction:_{{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}}.Transaction); + {{tab}}{{tab}}{{tab}}} + """; } protected virtual string GetDapperDynaParams() { - var output = new StringBuilder(); - output.Append($"{tab}{tab}{tab}{tab}var p = new DynamicParameters();"); - output.Append(Environment.NewLine); - var cols = ColumnForUpdateOperations!; - var spParams = String.Join(Environment.NewLine, cols.OrderBy(c => c.Position).Select(col => { return $@"{tab}{tab}{tab}{tab}p.Add(""@{col.Name}"", {_stringTransform.ApplyConfigTransformMember(ClassName)}.{_stringTransform.PascalCase(col.Name)});"; })); - output.Append(spParams); - return output.ToString(); + return + $$""" + {{tab}}{{tab}}{{tab}}{{tab}}var p = new DynamicParameters(); + {{spParams}} + """; } protected override string WriteReturnObj() diff --git a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoUpdateBulk.cs b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoUpdateBulk.cs index b16ba99..7eefdab 100644 --- a/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoUpdateBulk.cs +++ b/src/Dapper-Layers-Generator/Dapper-Layers-Generator.Core/Generators/MySql/MySqlGeneratorRepoUpdateBulk.cs @@ -100,7 +100,7 @@ protected virtual string WriteCreateDbTmpTable() { return $$"""" - {{tab}}{{tab}}{{tab}}{{tab}}var sqltmp = $"CREATE TEMPORARY TABLE {{ColAndTableIdentifier}}tmp_bulkupd_{{Table.Name}}{{ColAndTableIdentifier}} LIKE {{ColAndTableIdentifier}}{{Table.Name}}{{ColAndTableIdentifier}};"; + {{tab}}{{tab}}{{tab}}var sqltmp = $"CREATE TEMPORARY TABLE {{ColAndTableIdentifier}}tmp_bulkupd_{{Table.Name}}{{ColAndTableIdentifier}} LIKE {{ColAndTableIdentifier}}{{Table.Name}}{{ColAndTableIdentifier}};"; {{tab}}{{tab}}{{tab}}_ = await _{{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}}.Connection.ExecuteAsync(sqltmp,transaction:_{{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}}.Transaction); """"; diff --git a/test/Dapper-Layers-Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoUpdateBulk_ResultStandard.txt b/test/Dapper-Layers-Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoUpdateBulk_ResultStandard.txt index 805c8f2..5e8ddb2 100644 --- a/test/Dapper-Layers-Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoUpdateBulk_ResultStandard.txt +++ b/test/Dapper-Layers-Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoUpdateBulk_ResultStandard.txt @@ -9,7 +9,7 @@ var bulkCopy = new MySqlBulkCopy((MySqlConnection)_dbContext.Connection , (MySqlTransaction?)_dbContext.Transaction); - var sqltmp = $"CREATE TEMPORARY TABLE `tmp_bulkupd_clients` LIKE `clients`;"; + var sqltmp = $"CREATE TEMPORARY TABLE `tmp_bulkupd_clients` LIKE `clients`;"; _ = await _dbContext.Connection.ExecuteAsync(sqltmp,transaction:_dbContext.Transaction); From ba359c4df552545e2aafb63d4dfcd759d460c7a9 Mon Sep 17 00:00:00 2001 From: Fabien Donnet Date: Fri, 2 Dec 2022 16:32:05 +0100 Subject: [PATCH 41/48] Simple test for updatemuli generator --- .../Dapper-Layers-Generator.Test.csproj | 2 + .../GeneratorRepoUpdateMulti_Tests.cs | 34 ++++++++++++++ ...eneratorRepoUpdateMulti_ResultStandard.txt | 45 +++++++++++++++++++ 3 files changed, 81 insertions(+) create mode 100644 test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoUpdateMulti_Tests.cs create mode 100644 test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoUpdateMulti_ResultStandard.txt diff --git a/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj b/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj index 738094e..083be44 100644 --- a/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj +++ b/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj @@ -31,6 +31,7 @@ + @@ -53,6 +54,7 @@ + diff --git a/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoUpdateMulti_Tests.cs b/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoUpdateMulti_Tests.cs new file mode 100644 index 0000000..91dcd31 --- /dev/null +++ b/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoUpdateMulti_Tests.cs @@ -0,0 +1,34 @@ +using Dapper_Layers_Generator.Core.Converters.MySql; +using Dapper_Layers_Generator.Core.Converters; +using Dapper_Layers_Generator.Core.Generators; +using Dapper_Layers_Generator.Test.Config; + +namespace Dapper_Layers_Generator.Test.Generators +{ + public class GeneratorRepoUpdateMulti_Tests : GeneratorBaseTest + { + private MySqlDataTypeConverter _dataConverter; + private StringTransformationService _transformString; + + public GeneratorRepoUpdateMulti_Tests() : base() + { + _dataConverter = new MySqlDataTypeConverter(); + _transformString = new StringTransformationService(_settings); + } + + [Fact()] + public void GenerateStandard_Test() + { + //Arrange + var generator = new GeneratorRepoUpdateMulti(_settings, _mockDbDefinitions.Object, _transformString, _dataConverter); + generator.SetTable("clients"); + var expected = ResourceTool.Read("Dapper_Layers_Generator.Test/Results/Generators/GeneratorRepoUpdateMulti_ResultStandard.txt"); + + //Act + var result = generator.Generate(); + + //Assert + Assert.Equal(expected, result); + } + } +} diff --git a/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoUpdateMulti_ResultStandard.txt b/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoUpdateMulti_ResultStandard.txt new file mode 100644 index 0000000..bcf6371 --- /dev/null +++ b/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoUpdateMulti_ResultStandard.txt @@ -0,0 +1,45 @@ + public virtual async Task UpdateAsync(IEnumerable clients) + { + var isTransAlreadyOpen = _dbContext.Transaction != null; + + if (!isTransAlreadyOpen) + await _dbContext.OpenTransactionAsync(); + + foreach(var client in clients) + { + var p = new DynamicParameters(); + p.Add("@id", client.Id); + p.Add("@firstname", client.Firstname); + p.Add("@lastname", client.Lastname); + p.Add("@address", client.Address); + p.Add("@comment", client.Comment); + p.Add("@created_at", client.CreatedAt); + p.Add("@postal", client.Postal); + p.Add("@city", client.City); + p.Add("@phone", client.Phone); + p.Add("@email", client.Email); + + var sql = + """ + UPDATE clients + SET firstname = @firstname + ,lastname = @lastname + ,address = @address + ,comment = @comment + ,created_at = @created_at + ,postal = @postal + ,city = @city + ,phone = @phone + ,email = @email + WHERE id = @id + """; + + _ = await _dbContext.Connection.ExecuteAsync(sql,p,transaction:_dbContext.Transaction); + } + + if (!isTransAlreadyOpen) + { + _dbContext.CommitTransaction(); + _dbContext.Connection.Close(); + } + } From 153bb9ccfa932637a2fda57e93f02cfb53d1e8a5 Mon Sep 17 00:00:00 2001 From: Fabien Donnet Date: Fri, 2 Dec 2022 16:49:09 +0100 Subject: [PATCH 42/48] rerun ressource --- .../Dapper-Layers-Generator.Test.csproj | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj b/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj index 083be44..4a29c5c 100644 --- a/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj +++ b/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj @@ -50,7 +50,9 @@ - + + Never + From 582121770b63ce246c442706211c87e460977b19 Mon Sep 17 00:00:00 2001 From: Fabien Donnet Date: Fri, 2 Dec 2022 16:56:02 +0100 Subject: [PATCH 43/48] try to retest --- .../Dapper-Layers-Generator.Test.csproj | 4 ---- 1 file changed, 4 deletions(-) diff --git a/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj b/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj index 4a29c5c..5d15735 100644 --- a/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj +++ b/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj @@ -26,7 +26,6 @@ - @@ -50,9 +49,6 @@ - - Never - From 955505b81fb5df2dda632035a67dfbc03c956991 Mon Sep 17 00:00:00 2001 From: Fabien Donnet Date: Fri, 2 Dec 2022 16:58:13 +0100 Subject: [PATCH 44/48] ressrouce prob on ubuntu ? --- .../Dapper-Layers-Generator.Test.csproj | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj b/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj index 5d15735..6ad739c 100644 --- a/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj +++ b/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj @@ -26,6 +26,7 @@ + @@ -49,6 +50,7 @@ + From 0187417ca9e9aac0c295ae2ca0064e296998d955 Mon Sep 17 00:00:00 2001 From: Fabien Donnet Date: Fri, 2 Dec 2022 17:01:10 +0100 Subject: [PATCH 45/48] Not working test i don't know why --- .../GeneratorRepoGetByPkList_Test.cs | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoGetByPkList_Test.cs b/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoGetByPkList_Test.cs index 1eb4af4..0499896 100644 --- a/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoGetByPkList_Test.cs +++ b/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoGetByPkList_Test.cs @@ -31,19 +31,19 @@ public void GenerateStandard_Test() Assert.Equal(expected, result); } - [Fact()] - public void GenerateCompositePk_Test() - { - //Arrange - var generator = new GeneratorRepoGetByPkList(_settings, _mockDbDefinitions.Object, _transformString, _dataConverter); - generator.SetTable("damages_failures"); - var expected = ResourceTool.Read("Dapper_Layers_Generator.Test/Results/Generators/GeneratorRepoGetByPkList_ResultCompositePk.txt"); - - //Act - var result = generator.Generate(); - - //Assert - Assert.Equal(expected, result); - } + //[Fact()] + //public void GenerateCompositePk_Test() + //{ + // //Arrange + // var generator = new GeneratorRepoGetByPkList(_settings, _mockDbDefinitions.Object, _transformString, _dataConverter); + // generator.SetTable("damages_failures"); + // var expected = ResourceTool.Read("Dapper_Layers_Generator.Test/Results/Generators/GeneratorRepoGetByPkList_ResultCompositePk.txt"); + + // //Act + // var result = generator.Generate(); + + // //Assert + // Assert.Equal(expected, result); + //} } } From cdc6feaa6b3da93842c6b790241ec5a4cbe546c7 Mon Sep 17 00:00:00 2001 From: Fabien Donnet Date: Fri, 2 Dec 2022 17:02:56 +0100 Subject: [PATCH 46/48] Remove the test ressource --- .../Dapper-Layers-Generator.Test.csproj | 2 -- 1 file changed, 2 deletions(-) diff --git a/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj b/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj index 6ad739c..5d15735 100644 --- a/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj +++ b/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj @@ -26,7 +26,6 @@ - @@ -50,7 +49,6 @@ - From 2d33e73939655cab4a54e7b63f41e56164939153 Mon Sep 17 00:00:00 2001 From: Fabien Donnet Date: Fri, 2 Dec 2022 17:12:13 +0100 Subject: [PATCH 47/48] Retry to push tests --- .../Dapper-Layers-Generator.Test.csproj | 4 ++- .../GeneratorRepoGetByPkList_Test.cs | 28 +++++++++---------- 2 files changed, 17 insertions(+), 15 deletions(-) diff --git a/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj b/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj index 5d15735..9b65ea7 100644 --- a/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj +++ b/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj @@ -1,4 +1,4 @@ - + net7.0 @@ -26,6 +26,7 @@ + @@ -49,6 +50,7 @@ + diff --git a/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoGetByPkList_Test.cs b/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoGetByPkList_Test.cs index 0499896..1eb4af4 100644 --- a/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoGetByPkList_Test.cs +++ b/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoGetByPkList_Test.cs @@ -31,19 +31,19 @@ public void GenerateStandard_Test() Assert.Equal(expected, result); } - //[Fact()] - //public void GenerateCompositePk_Test() - //{ - // //Arrange - // var generator = new GeneratorRepoGetByPkList(_settings, _mockDbDefinitions.Object, _transformString, _dataConverter); - // generator.SetTable("damages_failures"); - // var expected = ResourceTool.Read("Dapper_Layers_Generator.Test/Results/Generators/GeneratorRepoGetByPkList_ResultCompositePk.txt"); - - // //Act - // var result = generator.Generate(); - - // //Assert - // Assert.Equal(expected, result); - //} + [Fact()] + public void GenerateCompositePk_Test() + { + //Arrange + var generator = new GeneratorRepoGetByPkList(_settings, _mockDbDefinitions.Object, _transformString, _dataConverter); + generator.SetTable("damages_failures"); + var expected = ResourceTool.Read("Dapper_Layers_Generator.Test/Results/Generators/GeneratorRepoGetByPkList_ResultCompositePk.txt"); + + //Act + var result = generator.Generate(); + + //Assert + Assert.Equal(expected, result); + } } } From fc9a5239fd4cdf029680abcfb1cb36cdbe7f7cae Mon Sep 17 00:00:00 2001 From: Fabien Donnet Date: Fri, 2 Dec 2022 17:15:53 +0100 Subject: [PATCH 48/48] try with a new ressource file --- .../Dapper-Layers-Generator.Test.csproj | 4 ++-- .../Generators/GeneratorRepoGetByPkList_Test.cs | 2 +- ...PK.txt => GeneratorRepoGetByPkList_ResultCompositePk2.txt} | 0 3 files changed, 3 insertions(+), 3 deletions(-) rename test/Dapper-Layers-Generator.Test/Results/Generators/{GeneratorRepoGetByPkList_ResultCompositePK.txt => GeneratorRepoGetByPkList_ResultCompositePk2.txt} (100%) diff --git a/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj b/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj index 9b65ea7..5656c88 100644 --- a/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj +++ b/test/Dapper-Layers-Generator.Test/Dapper-Layers-Generator.Test.csproj @@ -26,7 +26,7 @@ - + @@ -50,7 +50,7 @@ - + diff --git a/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoGetByPkList_Test.cs b/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoGetByPkList_Test.cs index 1eb4af4..16794fa 100644 --- a/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoGetByPkList_Test.cs +++ b/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoGetByPkList_Test.cs @@ -37,7 +37,7 @@ public void GenerateCompositePk_Test() //Arrange var generator = new GeneratorRepoGetByPkList(_settings, _mockDbDefinitions.Object, _transformString, _dataConverter); generator.SetTable("damages_failures"); - var expected = ResourceTool.Read("Dapper_Layers_Generator.Test/Results/Generators/GeneratorRepoGetByPkList_ResultCompositePk.txt"); + var expected = ResourceTool.Read("Dapper_Layers_Generator.Test/Results/Generators/GeneratorRepoGetByPkList_ResultCompositePk2.txt"); //Act var result = generator.Generate(); diff --git a/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoGetByPkList_ResultCompositePK.txt b/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoGetByPkList_ResultCompositePk2.txt similarity index 100% rename from test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoGetByPkList_ResultCompositePK.txt rename to test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoGetByPkList_ResultCompositePk2.txt