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..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,10 +1,9 @@ using Dapper_Layers_Generator.Core.Converters; using Dapper_Layers_Generator.Core.Settings; -using System.Text; 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 +22,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.ToString("yyyy-MM-dd HH:mm:ss")}} UTC + // 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 +136,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}}} -}} -"; - - - } } } 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..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 @@ -15,91 +15,81 @@ 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"); - 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}}""" + {{tab}}{{tab}}{{tab}}SELECT {{WriteColumnListStringForSelect(tableIdentifier)}} + {{tab}}{{tab}}{{tab}}FROM {{ColAndTableIdentifier + Table.Name + ColAndTableIdentifier}} {{tableIdentifier.Replace(".", "")}} + """"; } //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"); - 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}}""" + {{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() + protected virtual string WriteBaseSqlForDelete() { - 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}}$""" + {{tab}}{{tab}}{{tab}}DELETE FROM {{ColAndTableIdentifier}}{{Table.Name}}{{ColAndTableIdentifier}} + """"; } - 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}"""; })); - - output.Append(values); - output.Append(Environment.NewLine); - output.Append($@"{tab}{tab}{tab})"";"); - return output.ToString(); + return + $"""" + {tab}{tab}{tab}{tab}{values} + {tab}{tab}{tab}) + {tab}{tab}{tab}"""; + """"; } - 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"); - 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}""" + {tab}{tab}{tab}UPDATE {ColAndTableIdentifier}{Table.Name}{ColAndTableIdentifier} + {tab}{tab}{tab}SET {WriteColumnListStringForUpdate()} + """"; } - private string GetColumnListStringForUpdate() + private string WriteColumnListStringForUpdate() { var output = string.Empty; var cols = ColumnForUpdateOperations!.Where(c => !c.IsAutoIncrement && !c.IsPrimary); @@ -108,170 +98,191 @@ 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 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() + protected virtual string WriteDapperDynaParamsForPkList() { - var output = new StringBuilder(); - output.Append($"{tab}{tab}{tab}var p = new DynamicParameters();"); - output.Append(Environment.NewLine); + return + $""" + {tab}{tab}{tab}var p = new DynamicParameters(); + {tab}{tab}{tab}p.Add("@listOf",{GetPKMemberNamesStringList()}); + """; + } - output.Append($@"{tab}{tab}{tab}p.Add(""@listOf"",{GetPKMemberNamesStringList()});"); + protected virtual string WriteDapperDynaParamsForInsert() + { + var cols = ColumnForInsertOperations!.Where(c => !c.IsAutoIncrement); - return output.ToString(); - } + 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 = "") + private string WriteColumnListStringForSelect(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},", cols!.OrderBy(c => c.Position).Select(c => $"{ColAndTableIdentifier}{c.Name}{ColAndTableIdentifier}")); } - protected virtual string GetSqlWhereClauseForPk() + protected virtual string WriteSqlWhereClauseForPk() { - 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} + {tab}{tab}{tab}"""; + """"; } - protected virtual string GetSqlPkListWhereClause() + protected virtual string WriteSqlPkListWhereClause() { - 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 + {tab}{tab}{tab}"""; + """"; } - protected virtual string GetOpenTransAndInitBulkMySql() + protected virtual string WriteOpenTransAndInitBulkMySql() { + 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 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 GetCloseTransaction() + protected virtual string WriteCloseTransaction() { - 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) + protected virtual string WriteCreateDataTableForPkMySql(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}} + {{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) { - 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 = + {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 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/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/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..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 { @@ -26,49 +25,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() @@ -80,7 +69,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); @@ -88,8 +77,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; }}"; })); @@ -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))); } 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; - } - } - } } 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..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 @@ -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 { @@ -21,46 +20,35 @@ 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($"{tab}{tab}{tab}{tab}" + @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()}} + {{WriteDapperDynaParamsForInsert()}} - return output.ToString(); - } + {{WriteBaseSqlForInsert()}} + {{WriteValuesToInsert()}} - return string.Empty; + {{WriteDapperCall()}}{{WriteReturnObj()}} + {{tab}}{{tab}}} + + """ + : 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,29 +61,16 @@ protected override string GetDapperCall() } - protected virtual string GetDapperDynaParams() - { - 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 => - { - return $@"{tab}{tab}{tab}p.Add(""@{col.Name}"", {_stringTransform.ApplyConfigTransformMember(ClassName)}.{_stringTransform.PascalCase(col.Name)});"; - })); - - output.Append(spParams); - return output.ToString(); - } - - 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..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 @@ -10,7 +10,6 @@ public interface IGeneratorRepoAddBulk : IGeneratorFromTable } public class GeneratorRepoAddBulk : GeneratorForOperations, IGeneratorRepoAddBulk { - public GeneratorRepoAddBulk(SettingsGlobal settingsGlobal , IReaderDBDefinitionService data , StringTransformationService stringTransformationService @@ -24,35 +23,37 @@ public override string Generate() { if (TableSettings.AddBulkGenerator) { - var output = new StringBuilder(); - output.Append(GetMethodDef()); 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 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}> " + - $"{_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 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..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,80 +25,49 @@ public override string Generate() { if (TableSettings.AddMultiGenerator) { - var output = new StringBuilder(); - output.Append(GetMethodDef()); - 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(Environment.NewLine); - output.Append(Environment.NewLine); - output.Append(GetDapperCall()); - output.Append(Environment.NewLine); - output.Append(Environment.NewLine); - output.Append(GetCloseTransaction()); - 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}")}} - return string.Empty; - } + {{WriteBaseSqlForInsert().Replace($"{tab}{tab}{tab}", $"{tab}{tab}{tab}{tab}")}} + {{WriteValuesToInsert().Replace($"{tab}{tab}{tab}", $"{tab}{tab}{tab}{tab}")}} - protected override string GetMethodDef() - { - return $"{tab}{tab}public {(IsBase ? "virtual" : "override")} async Task AddAsync(IEnumerable<{ClassName}> " + - $"{_stringTransform.PluralizeToLower(ClassName)})" + - @$" -{tab}{tab}{{"; - } + {{WriteDapperCall()}} - protected override string GetDapperCall() - { - 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}}}"; + {{WriteCloseTransaction()}} + {{tab}}{{tab}}} + + """; + } + return string.Empty; } - protected virtual string GetOpenTransactionAndLoopBegin() + protected override string WriteMethodDef() { - 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}{{"; + return + $$""" + {{tab}}{{tab}}public {{(IsBase ? "virtual" : "override")}} async Task AddAsync(IEnumerable<{{ClassName}}> {{_stringTransform.PluralizeToLower(ClassName)}}) + {{tab}}{{tab}}{ + """; } - protected virtual string GetDapperDynaParams() + protected override string WriteDapperCall() { - 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)});"; - })); + var methodCall = $"{tab}{tab}{tab}{tab}_ = " + + $"await _{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.Connection." + + $"ExecuteAsync(sql,p,transaction:_{_stringTransform.ApplyConfigTransformMember(_settings.DbContextClassName)}.Transaction);"; - output.Append(spParams); - return output.ToString(); + return + $$""" + {{methodCall}} + {{tab}}{{tab}}{{tab}}} + """; } - - 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..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,42 +27,39 @@ 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(GetMethodDef()); - output.Append(Environment.NewLine); - output.Append(@GetDapperDynaParamsForPk()); - output.Append(Environment.NewLine); - output.Append(Environment.NewLine); - output.Append(GetBaseSqlForDelete()); - output.Append(Environment.NewLine); - output.Append(GetSqlWhereClauseForPk()); - output.Append(Environment.NewLine); - output.Append(Environment.NewLine); - output.Append(GetDapperCall()); - 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; } - protected override string GetMethodDef() + 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 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..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,35 +24,37 @@ public override string Generate() { if (TableSettings.DeleteBulkGenerator && !string.IsNullOrEmpty(GetPkMemberNamesString())) { - var output = new StringBuilder(); - output.Append(GetMethodDef()); 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 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()})" + - $"{(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 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..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 @@ -26,50 +26,53 @@ 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(GetMethodDef()); + var output = string.Empty; if (PkColumns.Count() == 1 || !IsBase) { - output.Append(Environment.NewLine); - output.Append(GetDapperDynaParamsForPkList()); - output.Append(Environment.NewLine); - output.Append(Environment.NewLine); - output.Append(@GetBaseSqlForDelete()); - output.Append(Environment.NewLine); - output.Append(GetSqlPkListWhereClause()); - output.Append(Environment.NewLine); - output.Append(Environment.NewLine); - output.Append(GetDapperCall()); - output.Append(GetReturnObj()); - 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 GetMethodDef() + 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()}}) + {{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..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,43 +23,39 @@ public override string Generate() { if (TableSettings.GetAllGenerator) { - var output = new StringBuilder(); - output.Append(GetMethodDef()); - output.Append(Environment.NewLine); - output.Append(@GetBaseSqlForSelect()+ @""";"); - output.Append(Environment.NewLine); - output.Append(Environment.NewLine); - output.Append(GetDapperCall()); + return + $$"""" + {{WriteMethodDef()}} + {{WriteBaseSqlForSelect()}} + {{tab}}{{tab}}{{tab}}"""; - output.Append(Environment.NewLine); - output.Append(Environment.NewLine); - output.Append(GetReturnObj()); - 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 GetMethodDef() + 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 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..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,46 +27,41 @@ 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(GetMethodDef()); - output.Append(Environment.NewLine); - output.Append(GetDapperDynaParamsForPk()); - output.Append(Environment.NewLine); - output.Append(Environment.NewLine); - output.Append(@GetBaseSqlForSelect()); - output.Append(Environment.NewLine); - output.Append(GetSqlWhereClauseForPk()); - output.Append(Environment.NewLine); - output.Append(Environment.NewLine); - output.Append(GetDapperCall()); - output.Append(Environment.NewLine); - output.Append(Environment.NewLine); - output.Append(GetReturnObj()); - 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 GetMethodDef() + 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 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..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,35 +24,36 @@ public override string Generate() { if (TableSettings.GetByPkBulkGenerator && !string.IsNullOrEmpty(GetPkMemberNamesString())) { - var output = new StringBuilder(); - output.Append(GetMethodDef()); 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 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()})" + - $"{(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 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..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,54 +22,56 @@ public override string Generate() { if (TableSettings.GetByPkListGenerator && !string.IsNullOrEmpty(GetPkMemberNamesString())) { - var output = new StringBuilder(); - output.Append(GetMethodDef()); + var output = string.Empty; if (PkColumns.Count() == 1 || !IsBase) { - output.Append(Environment.NewLine); - output.Append(GetDapperDynaParamsForPkList()); - output.Append(Environment.NewLine); - output.Append(Environment.NewLine); - output.Append(@GetBaseSqlForSelect()); - output.Append(Environment.NewLine); - output.Append(GetSqlPkListWhereClause()); - output.Append(Environment.NewLine); - output.Append(Environment.NewLine); - output.Append(GetDapperCall()); - output.Append(Environment.NewLine); - output.Append(Environment.NewLine); - output.Append(GetReturnObj()); - 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 GetMethodDef() + 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 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..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(GetMethodDef()); - output.Append(Environment.NewLine); - output.Append(GetDapperDynaParams()); - output.Append(Environment.NewLine); - output.Append(Environment.NewLine); - output.Append(@GetBaseSqlForSelect()); - output.Append(Environment.NewLine); - output.Append(GetSqlWhereClause()); - output.Append(Environment.NewLine); - output.Append(Environment.NewLine); - output.Append(GetDapperCall()); - output.Append(Environment.NewLine); - output.Append(Environment.NewLine); - output.Append(GetReturnObj()); - 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(); @@ -56,52 +56,51 @@ 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}{{"; + 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." + $"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 GetReturnObj() + protected override string WriteReturnObj() { return $"{tab}{tab}{tab}return {ClassName.ToLower()};"; } 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); } } } 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..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,47 +23,40 @@ public override string Generate() { if (TableSettings.UpdateGenerator && ColumnForUpdateOperations!.Where(c => !c.IsAutoIncrement && !c.IsPrimary).Any()) { - var output = new StringBuilder(); - output.Append(GetMethodDef()); - output.Append(Environment.NewLine); - output.Append(GetDapperDynaParams()); - output.Append(Environment.NewLine); - output.Append(Environment.NewLine); - output.Append(GetBaseSqlForUpdate()); - output.Append(GetSqlWhereClauseForPk()); - output.Append(Environment.NewLine); - output.Append(Environment.NewLine); - output.Append(GetDapperCall()); - 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; } - protected override string GetMethodDef() + 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 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 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 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..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,35 +25,37 @@ public override string Generate() { if (TableSettings.UpdateBulkGenerator && ColumnForUpdateOperations!.Where(c => !c.IsAutoIncrement && !c.IsPrimary).Any()) { - var output = new StringBuilder(); - output.Append(GetMethodDef()); 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 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}> " + - $"{_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 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..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,80 +22,58 @@ 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(GetMethodDef()); - output.Append(Environment.NewLine); - output.Append(GetOpenTransactionAndLoopBegin()); - output.Append(Environment.NewLine); - 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(Environment.NewLine); - output.Append(Environment.NewLine); - output.Append(GetDapperCall()); - output.Append(Environment.NewLine); - output.Append(Environment.NewLine); - output.Append(GetCloseTransaction()); - 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()}} - protected override string GetMethodDef() - { - return $"{tab}{tab}public {(IsBase ? "virtual" : "override")} async Task UpdateAsync(IEnumerable<{ClassName}> " + - $"{_stringTransform.PluralizeToLower(ClassName)})" + - @$" -{tab}{tab}{{"; + {{WriteCloseTransaction()}} + {{tab}}{{tab}}} + + """ + : string.Empty; } - protected override string GetDapperCall() + protected override string WriteMethodDef() { - 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}}public {{(IsBase ? "virtual" : "override")}} async Task UpdateAsync(IEnumerable<{{ClassName}}> {{_stringTransform.PluralizeToLower(ClassName)}}) + {{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 override string WriteDapperCall() + { + 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 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..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 { @@ -20,35 +19,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..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 @@ -1,6 +1,6 @@ using Dapper_Layers_Generator.Core.Converters; using Dapper_Layers_Generator.Core.Settings; -using Microsoft.Extensions.Primitives; +using MySqlX.XDevAPI.Relational; using System.Text; namespace Dapper_Layers_Generator.Core.Generators.MySql @@ -25,35 +25,27 @@ public override string Generate() { if (TableSettings.AddBulkGenerator) { - var output = new StringBuilder(); - output.Append(GetMethodDef()); - 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(GetDapperCall()); - 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,40 +70,34 @@ 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 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..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 @@ -1,6 +1,5 @@ using Dapper_Layers_Generator.Core.Converters; using Dapper_Layers_Generator.Core.Settings; -using Microsoft.Extensions.Primitives; using System.Text; namespace Dapper_Layers_Generator.Core.Generators.MySql @@ -25,71 +24,57 @@ public override string Generate() { if (TableSettings.DeleteBulkGenerator && !string.IsNullOrEmpty(GetPkMemberNamesString())) { - var output = new StringBuilder(); - output.Append(GetMethodDef()); - output.Append(Environment.NewLine); - output.Append(GetOpenTransAndInitBulkMySql()); - output.Append(Environment.NewLine); - output.Append(Environment.NewLine); - output.Append(GetCreateDbTmpTableForPksMySql("delete")); - output.Append(Environment.NewLine); - output.Append(Environment.NewLine); - output.Append(GetCreateDataTableForPkMySql("delete")); - output.Append(Environment.NewLine); - output.Append(Environment.NewLine); - output.Append(GetBulkCallMySql()); - output.Append(Environment.NewLine); - output.Append(Environment.NewLine); - output.Append(GetDeleteFromTmpTable()); - output.Append(Environment.NewLine); - output.Append(Environment.NewLine); - output.Append(@GetDapperCall()); - 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()}} + + {{WriteCreateDbTmpTableForPksMySql("delete")}} + + {{WriteCreateDataTableForPkMySql("delete")}} + + {{WriteBulkCallMySql()}} + + {{WriteDeleteFromTmpTable()}} + + {{WriteDapperCall()}} + + {{WriteCloseTransaction()}} + {{tab}}{{tab}}} + + """; } return string.Empty; } - - 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);"); + 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}}"""; + """"; } } 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..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,47 +30,45 @@ 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(GetMethodDef()); - output.Append(Environment.NewLine); - output.Append(GetDapperDynaParamsForPkList()); - output.Append(Environment.NewLine); - output.Append(Environment.NewLine); - output.Append(GetReturnObj()); - output.Append(Environment.NewLine); - output.Append($"{tab}{tab}}}"); - output.Append(Environment.NewLine); - return output.ToString(); + return + $$""" + {{WriteMethodDef()}} + {{WriteDapperDynaParamsForPkList()}} + + {{WriteReturnObj()}} + {{tab}}{{tab}}} + + """; } 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 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..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,79 +22,58 @@ 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(GetMethodDef()); - output.Append(Environment.NewLine); - output.Append(GetOpenTransAndInitBulkMySql()); - output.Append(Environment.NewLine); - output.Append(Environment.NewLine); - output.Append(GetCreateDbTmpTableForPksMySql("get")); - output.Append(Environment.NewLine); - output.Append(Environment.NewLine); - output.Append(GetCreateDataTableForPkMySql("get")); - output.Append(Environment.NewLine); - output.Append(Environment.NewLine); - output.Append(GetBulkCallMySql()); - output.Append(Environment.NewLine); - output.Append(Environment.NewLine); - output.Append(GetSelectFromTmpTable()); - output.Append(Environment.NewLine); - output.Append(Environment.NewLine); - output.Append(@GetDapperCall()); - output.Append(Environment.NewLine); - output.Append(Environment.NewLine); - output.Append(GetCloseTransaction()); - output.Append(Environment.NewLine); - output.Append(Environment.NewLine); - output.Append(GetReturnObj()); - 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 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);"); - - 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(@GetBaseSqlForSelect("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 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..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,37 +30,33 @@ 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(GetMethodDef()); - output.Append(Environment.NewLine); - output.Append(GetDapperDynaParamsForPkList()); - output.Append(Environment.NewLine); - output.Append(Environment.NewLine); - output.Append(GetReturnObj()); - output.Append(Environment.NewLine); - output.Append($"{tab}{tab}}}"); - output.Append(Environment.NewLine); - return output.ToString(); + return + $$""" + {{WriteMethodDef()}} + {{WriteDapperDynaParamsForPkList()}} + {{WriteReturnObj()}} + {{tab}}{{tab}}} + + """; } - 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}{{" : base.WriteDapperDynaParamsForPkList(); } - 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..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 @@ -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(GetMethodDef()); - output.Append(Environment.NewLine); - output.Append(GetOpenTransAndInitBulkMySql()); - 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(GetBulkCallMySql()); - output.Append(Environment.NewLine); - output.Append(Environment.NewLine); - output.Append(@GetUpdateFromTmpTable()); - output.Append(Environment.NewLine); - output.Append(Environment.NewLine); - output.Append(@GetDapperCall()); - 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 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}}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 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);"); - - 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}}"""; + """"; } } } 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..5656c88 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 @@ -12,7 +12,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -38,11 +84,32 @@ Always + + - - - - + + + + + + + + + + + + + + + + + + + + + + + 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..c51fb55 --- /dev/null +++ b/test/Dapper-Layers-Generator.Test/Generators/GeneratorBaseTest.cs @@ -0,0 +1,29 @@ +using Dapper_Layers_Generator.Core.Settings; +using Dapper_Layers_Generator.Core; +using Moq; +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 72ea8ad..dc3704d 100644 --- a/test/Dapper-Layers-Generator.Test/Generators/GeneratorContextForBase_Tests.cs +++ b/test/Dapper-Layers-Generator.Test/Generators/GeneratorContextForBase_Tests.cs @@ -1,38 +1,35 @@ -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; namespace Dapper_Layers_Generator.Core.Generators.Tests { - public class GeneratorContextForBase_Tests + public class GeneratorContextForBase_Tests : GeneratorBaseTest { + [Fact()] + public void GenerateStandard_Test() + { + //Arrange + var transformString = new StringTransformationService(_settings); + var generator = new GeneratorContextForBase(_settings, _mockDbDefinitions.Object, transformString); + var expected = ResourceTool.Read("Dapper_Layers_Generator.Test/Results/Generators/GeneratorContextForBase_ResultStandard.txt"); - private Mock _mockDbDefinitions; - private SettingsGlobal _settings; + //Act + var result = generator.Generate(); - public GeneratorContextForBase_Tests() - { - //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"); + //Assert + Assert.Equal(expected, result); } [Fact()] - public void GenerateStandard_Test() + public void GenerateChangeDbContextName_Test() { //Arrange var transformString = new StringTransformationService(_settings); var generator = new GeneratorContextForBase(_settings, _mockDbDefinitions.Object, transformString); - var expected = ResourceTool.Read("Dapper_Layers_Generator.Test/Results/Generators/GeneratorContextForBase_ResultStandard.txt"); + _settings.DbContextClassName = "TestOtherDBContext"; + + var expected = ResourceTool.Read("Dapper_Layers_Generator.Test/Results/Generators/GeneratorContextForBase_ResultOtherDbContextName.txt"); //Act var result = generator.Generate(); @@ -41,5 +38,7 @@ public void GenerateStandard_Test() Assert.Equal(expected, result); } + + } } \ No newline at end of file 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..2906e3b --- /dev/null +++ b/test/Dapper-Layers-Generator.Test/Generators/GeneratorPOCO_Tests.cs @@ -0,0 +1,151 @@ +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; +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 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 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 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); + } + + [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/Generators/GeneratorRepoAddMulti_Tests.cs b/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoAddMulti_Tests.cs new file mode 100644 index 0000000..47a64e1 --- /dev/null +++ b/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoAddMulti_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 GeneratorRepoAddMulti_Tests : GeneratorBaseTest + { + private MySqlDataTypeConverter _dataConverter; + private StringTransformationService _transformString; + + public GeneratorRepoAddMulti_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/Generators/GeneratorRepoAdd_Tests.cs b/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoAdd_Tests.cs new file mode 100644 index 0000000..15e6cf0 --- /dev/null +++ b/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoAdd_Tests.cs @@ -0,0 +1,50 @@ +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 GeneratorRepoAdd_Tests : GeneratorBaseTest + { + private MySqlDataTypeConverter _dataConverter; + private StringTransformationService _transformString; + + public GeneratorRepoAdd_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); + } + + [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/GeneratorRepoDeleteByPkList_Test.cs b/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoDeleteByPkList_Test.cs new file mode 100644 index 0000000..54bc6ee --- /dev/null +++ b/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoDeleteByPkList_Test.cs @@ -0,0 +1,50 @@ +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 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/GeneratorRepoDelete_Tests.cs b/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoDelete_Tests.cs new file mode 100644 index 0000000..8126a57 --- /dev/null +++ b/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoDelete_Tests.cs @@ -0,0 +1,50 @@ +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 GeneratorRepoDelete_Tests : GeneratorBaseTest + { + private MySqlDataTypeConverter _dataConverter; + private StringTransformationService _transformString; + + public GeneratorRepoDelete_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/Generators/GeneratorRepoGetAll_Tests.cs b/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoGetAll_Tests.cs new file mode 100644 index 0000000..2a09c5e --- /dev/null +++ b/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoGetAll_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 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/Generators/GeneratorRepoGetByPkList_Test.cs b/test/Dapper-Layers-Generator.Test/Generators/GeneratorRepoGetByPkList_Test.cs new file mode 100644 index 0000000..16794fa --- /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_ResultCompositePk2.txt"); + + //Act + var result = generator.Generate(); + + //Assert + Assert.Equal(expected, result); + } + } +} 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/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/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/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/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/Generators/Generator_Tests.cs b/test/Dapper-Layers-Generator.Test/Generators/Generator_Tests.cs index d3e8fa6..f5a03d9 100644 --- a/test/Dapper-Layers-Generator.Test/Generators/Generator_Tests.cs +++ b/test/Dapper-Layers-Generator.Test/Generators/Generator_Tests.cs @@ -1,29 +1,12 @@ -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; -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() { 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..3c594d3 --- /dev/null +++ b/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorContext_Tests.cs @@ -0,0 +1,24 @@ +using Dapper_Layers_Generator.Test.Config; +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 + { + [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/Generators/MySql/MySqlGeneratorRepoAddBulk_Test.cs b/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorRepoAddBulk_Test.cs new file mode 100644 index 0000000..9868920 --- /dev/null +++ b/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorRepoAddBulk_Test.cs @@ -0,0 +1,36 @@ +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 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/Generators/MySql/MySqlGeneratorRepoAdd_Test.cs b/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorRepoAdd_Test.cs new file mode 100644 index 0000000..edf6617 --- /dev/null +++ b/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorRepoAdd_Test.cs @@ -0,0 +1,51 @@ +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; + +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); + generator.SetTable("clients"); + var expected = ResourceTool.Read("Dapper_Layers_Generator.Test/Results/Generators/MySql/MySqlGeneratorRepoAdd_ResultStandard.txt"); + + //Act + var result = generator.Generate(); + + //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/Generators/MySql/MySqlGeneratorRepoDeleteBulk_Tests.cs b/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorRepoDeleteBulk_Tests.cs new file mode 100644 index 0000000..8538f0c --- /dev/null +++ b/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorRepoDeleteBulk_Tests.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.MySql; + +namespace Dapper_Layers_Generator.Test.Generators.MySql +{ + public class MySqlGeneratorRepoDeleteBulk_Tests : GeneratorBaseTest + { + private MySqlDataTypeConverter _dataConverter; + private StringTransformationService _transformString; + + public MySqlGeneratorRepoDeleteBulk_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/Generators/MySql/MySqlGeneratorRepoDeleteByPkList_Tests.cs b/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorRepoDeleteByPkList_Tests.cs new file mode 100644 index 0000000..98923f7 --- /dev/null +++ b/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorRepoDeleteByPkList_Tests.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.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/Generators/MySql/MySqlGeneratorRepoGetByPkBulk_Tests.cs b/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorRepoGetByPkBulk_Tests.cs new file mode 100644 index 0000000..0a94aef --- /dev/null +++ b/test/Dapper-Layers-Generator.Test/Generators/MySql/MySqlGeneratorRepoGetByPkBulk_Tests.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 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/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/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/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/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 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..3b0271d --- /dev/null +++ b/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorPOCO_ResultStandard.txt @@ -0,0 +1,47 @@ +#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 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 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(); + } + } 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/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/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/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); + } 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; + } diff --git a/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoGetByPkList_ResultCompositePk2.txt b/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoGetByPkList_ResultCompositePk2.txt new file mode 100644 index 0000000..aa73aaf --- /dev/null +++ b/test/Dapper-Layers-Generator.Test/Results/Generators/GeneratorRepoGetByPkList_ResultCompositePk2.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/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; + } 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; + } 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/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(); + } + } 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); + } 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 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(); + } + } 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); + } 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; + } 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(); + } + } 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); + } 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; + } 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; + } 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) + { + } + 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..5e8ddb2 --- /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(); + } + }