From bac383679b17e9534a143e1ce6b24be1f6b0b9ee Mon Sep 17 00:00:00 2001 From: Ahoo Wang Date: Tue, 4 Dec 2018 23:22:53 +0800 Subject: [PATCH 001/127] update README.md --- README-EN.md | 19 +++++++++++++------ README.md | 19 +++++++++++++------ 2 files changed, 26 insertions(+), 12 deletions(-) diff --git a/README-EN.md b/README-EN.md index d8317d6..5db0bd0 100644 --- a/README-EN.md +++ b/README-EN.md @@ -45,7 +45,9 @@ DataSource: DbProvider: SqlServer ConnectionString: Data Source=.;Initial Catalog=SmartSqlDB;Integrated Security=True Language: CSharp -TemplateEngine: Razor +TemplateEngine: + Name: Razor + Root: CSharp Output: Type: File Path: 'E://SmartSql-Starter' @@ -88,7 +90,8 @@ Build: Entity: Type: Table Module: Entity - Template: Entity.cshtml + TemplateEngine: + Path: Entity.cshtml Output: Path: '{{Project.Module}}.{{Build.Module}}' Name: '{{Items.CurrentTable.ConvertedName}}' @@ -122,7 +125,8 @@ Build: Repository: Type: Table Module: Repository - Template: Repository.cshtml + TemplateEngine: + Path: Repository.cshtml IgnoreNoPKTable: true IgnoreView: true Output: @@ -142,7 +146,8 @@ Build: Service: Type: Table Module: Service - Template: Service.cshtml + TemplateEngine: + Path: Service.cshtml IgnoreNoPKTable: true IgnoreView: true Output: @@ -162,7 +167,8 @@ Build: APIController: Type: Table Module: API - Template: API/APIController.cshtml + TemplateEngine: + Path: API/APIController.cshtml IgnoreNoPKTable: true IgnoreView: true Output: @@ -181,7 +187,8 @@ Build: SqlMap: Type: Table - Template: SqlMap.cshtml + TemplateEngine: + Path: SqlMap.cshtml Output: Path: '{{Project.Module}}.API/Maps' Name: '{{Items.CurrentTable.ConvertedName}}' diff --git a/README.md b/README.md index 2b57cad..f3e80a5 100644 --- a/README.md +++ b/README.md @@ -45,7 +45,9 @@ DataSource: DbProvider: SqlServer ConnectionString: Data Source=.;Initial Catalog=SmartSqlDB;Integrated Security=True Language: CSharp -TemplateEngine: Razor +TemplateEngine: + Name: Razor + Root: CSharp Output: Type: File Path: 'E://SmartSql-Starter' @@ -88,7 +90,8 @@ Build: Entity: Type: Table Module: Entity - Template: Entity.cshtml + TemplateEngine: + Path: Entity.cshtml Output: Path: '{{Project.Module}}.{{Build.Module}}' Name: '{{Items.CurrentTable.ConvertedName}}' @@ -122,7 +125,8 @@ Build: Repository: Type: Table Module: Repository - Template: Repository.cshtml + TemplateEngine: + Path: Repository.cshtml IgnoreNoPKTable: true IgnoreView: true Output: @@ -142,7 +146,8 @@ Build: Service: Type: Table Module: Service - Template: Service.cshtml + TemplateEngine: + Path: Service.cshtml IgnoreNoPKTable: true IgnoreView: true Output: @@ -162,7 +167,8 @@ Build: APIController: Type: Table Module: API - Template: API/APIController.cshtml + TemplateEngine: + Path: API/APIController.cshtml IgnoreNoPKTable: true IgnoreView: true Output: @@ -181,7 +187,8 @@ Build: SqlMap: Type: Table - Template: SqlMap.cshtml + TemplateEngine: + Path: SqlMap.cshtml Output: Path: '{{Project.Module}}.API/Maps' Name: '{{Items.CurrentTable.ConvertedName}}' From b908f4069c795163ba116cafeea4aaf0ab7faf2a Mon Sep 17 00:00:00 2001 From: Ahoo Wang Date: Wed, 5 Dec 2018 21:42:47 +0800 Subject: [PATCH 002/127] update SqlMap-Partials template --- .../SqlMap-Partials/CURD/SqlMap-Query.cshtml | 4 +- .../CURD/SqlMap-QueryByPage.cshtml | 4 +- .../SqlMap-Partials/CURD/SqlMap-Update.cshtml | 6 +-- .../SqlMap-Partials/SqlMap-MySql.cshtml | 4 +- .../SqlMap-Partials/SqlMap-Oracle.cshtml | 6 +-- .../SqlMap-Partials/SqlMap-PostgreSql.cshtml | 4 +- .../SqlMap-Partials/SqlMap-SQLite.cshtml | 4 +- .../SqlMap-Partials/SqlMap-SqlServer.cshtml | 44 +++++++++---------- .../SqlMap-Partials/_SqlMapLayout.cshtml | 7 +++ 9 files changed, 45 insertions(+), 38 deletions(-) diff --git a/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/CURD/SqlMap-Query.cshtml b/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/CURD/SqlMap-Query.cshtml index 57b3239..fd6158e 100644 --- a/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/CURD/SqlMap-Query.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/CURD/SqlMap-Query.cshtml @@ -11,7 +11,7 @@ throw new SmartCodeException($"{table.Name} can not find PKColumn!"); } var autoIncrement = table.AutoIncrement; - var prefix = dbSource.DbProvider.ParameterPrefix; + var dbPrefix = dbSource.DbProvider.ParameterPrefix; var notEqCols = table.Columns.Where(m => m.ConvertedName != m.Name); var resultMapName = $"{table.ConvertedName}ResultMap"; var queryStatementResultMap = table.HasColNameNotEqConvertedName ? $"ResultMap=\"{resultMapName}\"" : ""; @@ -26,5 +26,5 @@ T.@pkCol.Name Desc - @(prefix)Taken + @(dbPrefix)Taken \ No newline at end of file diff --git a/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/CURD/SqlMap-QueryByPage.cshtml b/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/CURD/SqlMap-QueryByPage.cshtml index 3c09b82..06755db 100644 --- a/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/CURD/SqlMap-QueryByPage.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/CURD/SqlMap-QueryByPage.cshtml @@ -12,7 +12,7 @@ } var primaryKeyType = pkCol?.LanguageType ?? "int"; var autoIncrement = table.AutoIncrement; - var prefix = dbSource.DbProvider.ParameterPrefix; + var dbPrefix = dbSource.DbProvider.ParameterPrefix; var notEqCols = table.Columns.Where(m => m.ConvertedName != m.Name); var resultMapName = $"{table.ConvertedName}ResultMap"; var queryStatementResultMap = table.HasColNameNotEqConvertedName ? $"ResultMap=\"{resultMapName}\"" : ""; @@ -29,6 +29,6 @@ T.@pkCol.Name Desc - Limit @("@PageSize") Offset @("@Offset") + Limit @(dbPrefix)PageSize Offset @(dbPrefix)Offset } \ No newline at end of file diff --git a/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/CURD/SqlMap-Update.cshtml b/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/CURD/SqlMap-Update.cshtml index e1383fa..025f542 100644 --- a/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/CURD/SqlMap-Update.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/CURD/SqlMap-Update.cshtml @@ -11,7 +11,7 @@ throw new SmartCodeException($"{table.Name} can not find PKColumn!"); } var autoIncrement = table.AutoIncrement; - var prefix = dbSource.DbProvider.ParameterPrefix; + var dbPrefix = dbSource.DbProvider.ParameterPrefix; } @@ -23,10 +23,10 @@ if (!col.IsPrimaryKey) { - @col.Name = @($"{prefix}{col.ConvertedName}") + @col.Name = @($"{dbPrefix}{col.ConvertedName}") } } - Where @pkCol.Name=@prefix@pkCol.ConvertedName + Where @pkCol.Name=@dbPrefix@pkCol.ConvertedName \ No newline at end of file diff --git a/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/SqlMap-MySql.cshtml b/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/SqlMap-MySql.cshtml index 75a0597..7c1c67f 100644 --- a/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/SqlMap-MySql.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/SqlMap-MySql.cshtml @@ -14,7 +14,7 @@ } var primaryKeyType = pkCol?.LanguageType ?? "int"; var autoIncrement = table.AutoIncrement; - var prefix = dbSource.DbProvider.ParameterPrefix; + var dbPrefix = dbSource.DbProvider.ParameterPrefix; var notEqCols = table.Columns.Where(m => m.ConvertedName != m.Name); var resultMapName = $"{table.ConvertedName}ResultMap"; var queryStatementResultMap = table.HasColNameNotEqConvertedName ? $"ResultMap=\"{resultMapName}\"" : ""; @@ -30,7 +30,7 @@ T.@pkCol.Name Desc - Limit ?Offset,?PageSize + Limit @(dbPrefix)Offset,@(dbPrefix)PageSize } diff --git a/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/SqlMap-Oracle.cshtml b/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/SqlMap-Oracle.cshtml index 737242d..b64dc82 100644 --- a/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/SqlMap-Oracle.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/SqlMap-Oracle.cshtml @@ -14,7 +14,7 @@ } var primaryKeyType = pkCol?.LanguageType ?? "int"; var autoIncrement = table.AutoIncrement; - var prefix = dbSource.DbProvider.ParameterPrefix; + var dbPrefix = dbSource.DbProvider.ParameterPrefix; var notEqCols = table.Columns.Where(m => m.ConvertedName != m.Name); var resultMapName = $"{table.ConvertedName}ResultMap"; var queryStatementResultMap = table.HasColNameNotEqConvertedName ? $"ResultMap=\"{resultMapName}\"" : ""; @@ -38,7 +38,7 @@ ROWNUM = 1 - T.@pkCol.Name=@prefix@pkCol.ConvertedName + T.@pkCol.Name=@dbPrefix@pkCol.ConvertedName @@ -50,7 +50,7 @@ SELECT - (@(prefix)Taken) + (@(dbPrefix)Taken) T.* From @table.Name T diff --git a/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/SqlMap-PostgreSql.cshtml b/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/SqlMap-PostgreSql.cshtml index c0549d6..1565c8f 100644 --- a/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/SqlMap-PostgreSql.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/SqlMap-PostgreSql.cshtml @@ -15,7 +15,7 @@ } var primaryKeyType = pkCol?.LanguageType ?? "int"; var autoIncrement = table.AutoIncrement; - var prefix = dbSource.DbProvider.ParameterPrefix; + var dbPrefix = dbSource.DbProvider.ParameterPrefix; var notEqCols = table.Columns.Where(m => m.ConvertedName != m.Name); var resultMapName = $"{table.ConvertedName}ResultMap"; var queryStatementResultMap = table.HasColNameNotEqConvertedName ? $"ResultMap=\"{resultMapName}\"" : ""; @@ -32,7 +32,7 @@ T.@pkCol.Name Desc - Limit @("@PageSize") Offset @("@Offset") + Limit @(dbPrefix)PageSize Offset @(dbPrefix)Offset } diff --git a/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/SqlMap-SQLite.cshtml b/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/SqlMap-SQLite.cshtml index 67cb7df..24bb52b 100644 --- a/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/SqlMap-SQLite.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/SqlMap-SQLite.cshtml @@ -14,7 +14,7 @@ } var primaryKeyType = pkCol?.LanguageType ?? "int"; var autoIncrement = table.AutoIncrement; - var prefix = dbSource.DbProvider.ParameterPrefix; + var dbPrefix = dbSource.DbProvider.ParameterPrefix; var notEqCols = table.Columns.Where(m => m.ConvertedName != m.Name); var resultMapName = $"{table.ConvertedName}ResultMap"; var queryStatementResultMap = table.HasColNameNotEqConvertedName ? $"ResultMap=\"{resultMapName}\"" : ""; @@ -30,6 +30,6 @@ T.@pkCol.Name Desc - Limit @("@PageSize") Offset @("@Offset") + Limit @(dbPrefix)PageSize Offset @(dbPrefix)Offset } \ No newline at end of file diff --git a/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/SqlMap-SqlServer.cshtml b/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/SqlMap-SqlServer.cshtml index 3905ece..70fbcc6 100644 --- a/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/SqlMap-SqlServer.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/SqlMap-SqlServer.cshtml @@ -23,7 +23,7 @@ } var primaryKeyType = pkCol?.LanguageType ?? "int"; var autoIncrement = table.AutoIncrement; - var prefix = dbSource.DbProvider.ParameterPrefix; + var dbPrefix = dbSource.DbProvider.ParameterPrefix; var notEqCols = table.Columns.Where(m => m.ConvertedName != m.Name); var resultMapName = $"{table.ConvertedName}ResultMap"; var queryStatementResultMap = table.HasColNameNotEqConvertedName ? $"ResultMap=\"{resultMapName}\"" : ""; @@ -32,25 +32,25 @@ @section QueryByPage { - - @if (versionNo > 2012) - { - - Select T.* From @table.Name T With(NoLock) - Order By T.@pkCol.Name Desc - Offset ((@@PageIndex-1)*@@PageSize) Rows Fetch Next @@PageSize Rows Only; - - } - else - { - - Select TT.* From - (Select ROW_NUMBER() Over(Order By T.@pkCol.Name Desc) Row_Index,T.* From @table.Name T With(NoLock) - ) TT - Where TT.Row_Index Between ((@@PageIndex-1)*@@PageSize+1) And (@@PageIndex*@@PageSize); - - } - + + @if (versionNo > 2012) + { + + Select T.* From @table.Name T With(NoLock) + Order By T.@pkCol.Name Desc + Offset ((@(dbPrefix)PageIndex-1)*@(dbPrefix)PageSize) Rows Fetch Next @(dbPrefix)PageSize Rows Only; + + } + else + { + + Select TT.* From + (Select ROW_NUMBER() Over(Order By T.@pkCol.Name Desc) Row_Index,T.* From @table.Name T With(NoLock) + ) TT + Where TT.Row_Index Between ((@(dbPrefix)PageIndex-1)*@(dbPrefix)PageSize+1) And (@(dbPrefix)PageIndex*@(dbPrefix)PageSize); + + } + } @section GetEntity { @@ -59,7 +59,7 @@ Select Top 1 T.* From @table.Name T With(NoLock) - T.@pkCol.Name=@prefix@pkCol.ConvertedName + T.@pkCol.Name=@dbPrefix@pkCol.ConvertedName @@ -71,7 +71,7 @@ SELECT - (@(prefix)Taken) + (@(dbPrefix)Taken) T.* From @table.Name T diff --git a/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/_SqlMapLayout.cshtml b/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/_SqlMapLayout.cshtml index 50bc26b..52569c9 100644 --- a/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/_SqlMapLayout.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/_SqlMapLayout.cshtml @@ -4,6 +4,7 @@ @{ var project = Model.Project; var dbSource = Model.GetDataSource(); + var dbPrefix = dbSource.DbProvider.ParameterPrefix; var buildTask = Model.Build; var table = Model.GetCurrentTable(); var pkCol = table.PKColumn; @@ -18,6 +19,12 @@ + @foreach (var col in table.Columns) + { + + T.@col.Name = @dbPrefix@col.ConvertedName + + } From 86beb2604ed0d5ea4048e253c24d00aca2be3500 Mon Sep 17 00:00:00 2001 From: Ahoo Date: Fri, 14 Dec 2018 18:55:29 +0800 Subject: [PATCH 003/127] add ETL.LoadToESBuildTask.cs --- SmartCode.sln | 7 + doc/SmartCode-ETL-ES.yml | 31 ++++ src/SmartCode.CLI/SmartCode.CLI.csproj | 4 +- src/SmartCode.CLI/appsettings.json | 4 + src/SmartCode.ETL.LoadToES/ESOptions.cs | 17 ++ .../LoadToESBuildTask.cs | 169 ++++++++++++++++++ .../SmartCode.ETL.LoadToES.csproj | 15 ++ src/SmartCode.ETL/Entity/ETLLoad.cs | 1 + .../SqlMap-Partials/SqlMap-SqlServer.cshtml | 1 + 9 files changed, 248 insertions(+), 1 deletion(-) create mode 100644 doc/SmartCode-ETL-ES.yml create mode 100644 src/SmartCode.ETL.LoadToES/ESOptions.cs create mode 100644 src/SmartCode.ETL.LoadToES/LoadToESBuildTask.cs create mode 100644 src/SmartCode.ETL.LoadToES/SmartCode.ETL.LoadToES.csproj diff --git a/SmartCode.sln b/SmartCode.sln index c5ffd19..385115c 100644 --- a/SmartCode.sln +++ b/SmartCode.sln @@ -27,6 +27,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SmartCode.ETL.PostgreSql", EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SmartCode.ETL.SQLite", "src\SmartCode.ETL.SQLite\SmartCode.ETL.SQLite.csproj", "{BB00F470-7D25-4F82-A410-1DB8BD458A5E}" EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SmartCode.ETL.LoadToES", "src\SmartCode.ETL.LoadToES\SmartCode.ETL.LoadToES.csproj", "{DADD6996-91C4-496D-AE97-D8EA5E33716A}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -73,6 +75,10 @@ Global {BB00F470-7D25-4F82-A410-1DB8BD458A5E}.Debug|Any CPU.Build.0 = Debug|Any CPU {BB00F470-7D25-4F82-A410-1DB8BD458A5E}.Release|Any CPU.ActiveCfg = Release|Any CPU {BB00F470-7D25-4F82-A410-1DB8BD458A5E}.Release|Any CPU.Build.0 = Release|Any CPU + {DADD6996-91C4-496D-AE97-D8EA5E33716A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DADD6996-91C4-496D-AE97-D8EA5E33716A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DADD6996-91C4-496D-AE97-D8EA5E33716A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DADD6996-91C4-496D-AE97-D8EA5E33716A}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -82,6 +88,7 @@ Global {95071030-0C10-4771-B093-4F2626A39F9F} = {EE2194B6-5B23-42C0-AF6A-EC86331E3E08} {60B49703-2352-477B-8F18-98CC229EEFDA} = {EE2194B6-5B23-42C0-AF6A-EC86331E3E08} {BB00F470-7D25-4F82-A410-1DB8BD458A5E} = {EE2194B6-5B23-42C0-AF6A-EC86331E3E08} + {DADD6996-91C4-496D-AE97-D8EA5E33716A} = {EE2194B6-5B23-42C0-AF6A-EC86331E3E08} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {9A45CDB0-E532-4F55-84C6-B82C98BE5F38} diff --git a/doc/SmartCode-ETL-ES.yml b/doc/SmartCode-ETL-ES.yml new file mode 100644 index 0000000..6a9d7c5 --- /dev/null +++ b/doc/SmartCode-ETL-ES.yml @@ -0,0 +1,31 @@ +Author: Ahoo Wang +DataSource: + Name: Extract + Paramters: + DbProvider: PostgreSql + ConnectionString: '' + Query: + PKColumn: id + AutoIncrement: true + ModifyTime: max_motify_time + +Paramters: + ETLCode: SmartCode.ETL.Test + ETLRepository: SQLite + +Build: + + Transform: + Type: Transform + Paramters: + Script: + + LoadToES: + Type: LoadToES + Paramters: + Host: http://es.smartsql.net/ + Index: smartsql + Type: smartsql + BaseAuth: + UserName: smartsql + Password: smartsql \ No newline at end of file diff --git a/src/SmartCode.CLI/SmartCode.CLI.csproj b/src/SmartCode.CLI/SmartCode.CLI.csproj index 32dd61d..62e967c 100644 --- a/src/SmartCode.CLI/SmartCode.CLI.csproj +++ b/src/SmartCode.CLI/SmartCode.CLI.csproj @@ -20,7 +20,7 @@ Github SmartCode SmartSql true - 1.20.0 + 2.0.0 https://raw.githubusercontent.com/Ahoo-Wang/SmartCode/master/doc/Logo.png @@ -34,6 +34,7 @@ + @@ -47,6 +48,7 @@ PreserveNewest + Always diff --git a/src/SmartCode.CLI/appsettings.json b/src/SmartCode.CLI/appsettings.json index b08e088..11c8c8b 100644 --- a/src/SmartCode.CLI/appsettings.json +++ b/src/SmartCode.CLI/appsettings.json @@ -78,6 +78,10 @@ "Type": "SmartCode.IBuildTask,SmartCode", "ImplType": "SmartCode.ETL.BuildTasks.LoadBuildTask,SmartCode.ETL" }, + { + "Type": "SmartCode.IBuildTask,SmartCode", + "ImplType": "SmartCode.ETL.LoadToES.LoadToESBuildTask,SmartCode.ETL.LoadToES" + }, { "Type": "SmartCode.ETL.IETLTaskRepository,SmartCode.ETL", "ImplType": "SmartCode.ETL.NoneETLTaskRepository,SmartCode.ETL" diff --git a/src/SmartCode.ETL.LoadToES/ESOptions.cs b/src/SmartCode.ETL.LoadToES/ESOptions.cs new file mode 100644 index 0000000..50be3ad --- /dev/null +++ b/src/SmartCode.ETL.LoadToES/ESOptions.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace SmartCode.ETL.LoadToES +{ + public class ESOptions + { + public String Host { get; set; } + public String Index { get; set; } + public String TypeName { get; set; } + public String Cert { get; set; } + public String UserName { get; set; } + public String Password { get; set; } + } + +} diff --git a/src/SmartCode.ETL.LoadToES/LoadToESBuildTask.cs b/src/SmartCode.ETL.LoadToES/LoadToESBuildTask.cs new file mode 100644 index 0000000..cc5ce6f --- /dev/null +++ b/src/SmartCode.ETL.LoadToES/LoadToESBuildTask.cs @@ -0,0 +1,169 @@ +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using Nest; +using Elasticsearch.Net; +using System.Linq; +using Microsoft.Extensions.Logging; +using SmartCode.Configuration; +using System.Diagnostics; +using System.Collections; +using SmartSql.Batch; + +namespace SmartCode.ETL.LoadToES +{ + public class LoadToESBuildTask : IBuildTask + { + private const string COLUMN_MAPPING = "ColumnMapping"; + private const string HOST = "Host"; + private const string INDEX_NAME = "Index"; + private const string TYPE_NAME = "Type"; + private const string BASE_AUTH = "BaseAuth"; + private const string CERT_PATH = "Cert"; + private readonly Project _project; + private readonly IPluginManager _pluginManager; + private readonly ILogger _logger; + + public bool Initialized => true; + + public string Name => "LoadToES"; + public LoadToESBuildTask(Project project + , IPluginManager pluginManager + , ILogger logger) + { + _project = project; + _pluginManager = pluginManager; + _logger = logger; + } + public async Task Build(BuildContext context) + { + ESOptions esOptions = InitOptions(context); + var etlRepository = _pluginManager.Resolve(_project.GetETLRepository()); + var dataSource = context.GetDataSource(); + var loadEntity = new Entity.ETLLoad + { + Size = 0, + Paramters = new Dictionary + { + { "Task","LoadToES"}, + { "Index",esOptions.Index}, + { "Type",esOptions.TypeName} + } + }; + if (dataSource.TransformData.Rows.Count == 0) + { + await etlRepository.Load(_project.GetETKTaskId(), loadEntity); + return; + } + Stopwatch stopwatch = Stopwatch.StartNew(); + #region InitColumnMapping + var colMappings = InitColumnMapping(context); + if (colMappings != null) + { + foreach (var colMapping in colMappings) + { + if (dataSource.TransformData.Columns.ContainsKey(colMapping.Column)) + { + dataSource.TransformData.Columns[colMapping.Column].Name = colMapping.Mapping; + } + } + } + #endregion + #region BatchInsert + var esClient = GetElasticClient(esOptions); + var list = new List>(); + foreach (var row in dataSource.TransformData.Rows) + { + var item = new Dictionary(); + foreach (var cellKV in row.Cells) + { + var cellVal = cellKV.Value; + item.Add(cellVal.Column.Name, cellVal.Value); + } + list.Add(item); + } + var indexExResp = await esClient.IndexExistsAsync(esOptions.Index); + if (!indexExResp.Exists) + { + var createIndexResp = await esClient.CreateIndexAsync(esOptions.Index); + } + var esSyncResp = await esClient.BulkAsync((bulkRequest) => + bulkRequest + .Index(esOptions.Index) + .Type(esOptions.TypeName) + .IndexMany(list)); + if (esSyncResp.Errors) + { + _logger.LogError($"ES.ERRORS:{esSyncResp.DebugInformation}"); + throw new SmartCodeException($"ES.ERRORS:{esSyncResp.DebugInformation}"); + } + stopwatch.Stop(); + loadEntity.Size = dataSource.TransformData.Rows.Count; + loadEntity.Taken = stopwatch.ElapsedMilliseconds; + #endregion + await etlRepository.Load(_project.GetETKTaskId(), loadEntity); + } + + private static ESOptions InitOptions(BuildContext context) + { + context.Build.Paramters.EnsureValue(HOST, out string host); + context.Build.Paramters.EnsureValue(INDEX_NAME, out string index_name); + context.Build.Paramters.EnsureValue(TYPE_NAME, out string type_name); + context.Build.Paramters.Value(BASE_AUTH, out IDictionary baseAuth); + baseAuth.Value("UserName", out string user_name); + baseAuth.Value("Password", out string password); + context.Build.Paramters.Value(CERT_PATH, out string cert); + + return new ESOptions + { + Host = host, + Index = index_name, + TypeName = type_name, + Cert = cert, + UserName = user_name, + Password = password + }; + } + private IEnumerable InitColumnMapping(BuildContext context) + { + if (context.Build.Paramters.Value(COLUMN_MAPPING, out IEnumerable colMapps)) + { + foreach (IDictionary colMappingKV in colMapps) + { + colMappingKV.EnsureValue("Column", out string colName); + colMappingKV.EnsureValue("Mapping", out string mapping); + colMappingKV.Value("DataTypeName", out string dataTypeName); + yield return new ColumnMapping + { + Column = colName, + Mapping = mapping, + DataTypeName = dataTypeName + }; + } + } + } + private IElasticClient GetElasticClient(ESOptions esOptions) + { + Uri node = new Uri(esOptions.Host); + ConnectionSettings settings = new ConnectionSettings(node); + settings.DefaultIndex(esOptions.Index); + settings.DefaultTypeName(esOptions.TypeName); + #region Auth + if (!String.IsNullOrEmpty(esOptions.UserName)) + { + settings.BasicAuthentication(esOptions.UserName, esOptions.Password); + } + if (!String.IsNullOrEmpty(esOptions.Cert)) + { + settings.ClientCertificate(esOptions.Cert); + } + #endregion + return new ElasticClient(settings); + } + + public void Initialize(IDictionary paramters) + { + + } + } +} diff --git a/src/SmartCode.ETL.LoadToES/SmartCode.ETL.LoadToES.csproj b/src/SmartCode.ETL.LoadToES/SmartCode.ETL.LoadToES.csproj new file mode 100644 index 0000000..568dfbd --- /dev/null +++ b/src/SmartCode.ETL.LoadToES/SmartCode.ETL.LoadToES.csproj @@ -0,0 +1,15 @@ + + + + netstandard2.0 + + + + + + + + + + + diff --git a/src/SmartCode.ETL/Entity/ETLLoad.cs b/src/SmartCode.ETL/Entity/ETLLoad.cs index 27c86b8..b35ece0 100644 --- a/src/SmartCode.ETL/Entity/ETLLoad.cs +++ b/src/SmartCode.ETL/Entity/ETLLoad.cs @@ -11,5 +11,6 @@ public class ETLLoad public int Size { get; set; } public long Taken { get; set; } public string Table { get; set; } + public IDictionary Paramters { get; set; } } } diff --git a/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/SqlMap-SqlServer.cshtml b/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/SqlMap-SqlServer.cshtml index 70fbcc6..097566b 100644 --- a/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/SqlMap-SqlServer.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/SqlMap-SqlServer.cshtml @@ -37,6 +37,7 @@ { Select T.* From @table.Name T With(NoLock) + Order By T.@pkCol.Name Desc Offset ((@(dbPrefix)PageIndex-1)*@(dbPrefix)PageSize) Rows Fetch Next @(dbPrefix)PageSize Rows Only; From dc9e28c84a15f2c157bc4c45f51da6fe632c376d Mon Sep 17 00:00:00 2001 From: Ahoo Wang Date: Fri, 14 Dec 2018 23:00:37 +0800 Subject: [PATCH 004/127] add SmartCode.ETL.LoadToES --- doc/SmartCode-ETL-ES.yml | 10 +++++----- src/SmartCode.CLI/SmartCode.CLI.csproj | 4 +--- src/SmartCode.ETL.LoadToES/LoadToESBuildTask.cs | 5 +++-- 3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/doc/SmartCode-ETL-ES.yml b/doc/SmartCode-ETL-ES.yml index 6a9d7c5..09cadf8 100644 --- a/doc/SmartCode-ETL-ES.yml +++ b/doc/SmartCode-ETL-ES.yml @@ -3,14 +3,14 @@ DataSource: Name: Extract Paramters: DbProvider: PostgreSql - ConnectionString: '' - Query: + ConnectionString: 'Server=localhost;Port=5432;User Id=report;Password=SmartCode; Database=report;' + Query: select * from es_sync_product where max_motify_time>@LastMaxModifyTime PKColumn: id AutoIncrement: true ModifyTime: max_motify_time Paramters: - ETLCode: SmartCode.ETL.Test + ETLCode: SmartCode.ETL.LoadToES ETLRepository: SQLite Build: @@ -25,7 +25,7 @@ Build: Paramters: Host: http://es.smartsql.net/ Index: smartsql - Type: smartsql + Type: product BaseAuth: UserName: smartsql - Password: smartsql \ No newline at end of file + Password: https://github.com/Ahoo-Wang/SmartCode \ No newline at end of file diff --git a/src/SmartCode.CLI/SmartCode.CLI.csproj b/src/SmartCode.CLI/SmartCode.CLI.csproj index 62e967c..40b92ef 100644 --- a/src/SmartCode.CLI/SmartCode.CLI.csproj +++ b/src/SmartCode.CLI/SmartCode.CLI.csproj @@ -22,9 +22,7 @@ true 2.0.0 https://raw.githubusercontent.com/Ahoo-Wang/SmartCode/master/doc/Logo.png - - - + add SmartCode.ETL.LoadToES diff --git a/src/SmartCode.ETL.LoadToES/LoadToESBuildTask.cs b/src/SmartCode.ETL.LoadToES/LoadToESBuildTask.cs index cc5ce6f..4c1032d 100644 --- a/src/SmartCode.ETL.LoadToES/LoadToESBuildTask.cs +++ b/src/SmartCode.ETL.LoadToES/LoadToESBuildTask.cs @@ -87,11 +87,12 @@ public async Task Build(BuildContext context) { var createIndexResp = await esClient.CreateIndexAsync(esOptions.Index); } - var esSyncResp = await esClient.BulkAsync((bulkRequest) => + var esSyncResp = await esClient.BulkAsync(bulkRequest => bulkRequest .Index(esOptions.Index) .Type(esOptions.TypeName) - .IndexMany(list)); + .IndexMany(list) + ); if (esSyncResp.Errors) { _logger.LogError($"ES.ERRORS:{esSyncResp.DebugInformation}"); From b576305e56d10890977a8f4862b74c42d26b125e Mon Sep 17 00:00:00 2001 From: Ahoo Wang Date: Fri, 14 Dec 2018 23:10:07 +0800 Subject: [PATCH 005/127] u dependent lib version --- src/SmartCode.Db/SmartCode.Db.csproj | 6 +++--- src/SmartCode.ETL.LoadToES/SmartCode.ETL.LoadToES.csproj | 2 +- src/SmartCode.ETL/SmartCode.ETL.csproj | 2 +- .../RazorTemplates/CSharp/Proj-Repository.cshtml | 2 +- src/SmartCode/SmartCode.csproj | 4 ++-- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/SmartCode.Db/SmartCode.Db.csproj b/src/SmartCode.Db/SmartCode.Db.csproj index c10a09b..ee10297 100644 --- a/src/SmartCode.Db/SmartCode.Db.csproj +++ b/src/SmartCode.Db/SmartCode.Db.csproj @@ -9,12 +9,12 @@ - + - + - + diff --git a/src/SmartCode.ETL.LoadToES/SmartCode.ETL.LoadToES.csproj b/src/SmartCode.ETL.LoadToES/SmartCode.ETL.LoadToES.csproj index 568dfbd..db96e9a 100644 --- a/src/SmartCode.ETL.LoadToES/SmartCode.ETL.LoadToES.csproj +++ b/src/SmartCode.ETL.LoadToES/SmartCode.ETL.LoadToES.csproj @@ -5,7 +5,7 @@ - + diff --git a/src/SmartCode.ETL/SmartCode.ETL.csproj b/src/SmartCode.ETL/SmartCode.ETL.csproj index c9af451..104e138 100644 --- a/src/SmartCode.ETL/SmartCode.ETL.csproj +++ b/src/SmartCode.ETL/SmartCode.ETL.csproj @@ -6,7 +6,7 @@ - + diff --git a/src/SmartCode.Generator/RazorTemplates/CSharp/Proj-Repository.cshtml b/src/SmartCode.Generator/RazorTemplates/CSharp/Proj-Repository.cshtml index fae13c9..9e39a56 100644 --- a/src/SmartCode.Generator/RazorTemplates/CSharp/Proj-Repository.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/CSharp/Proj-Repository.cshtml @@ -10,7 +10,7 @@ netstandard2.0 - + diff --git a/src/SmartCode/SmartCode.csproj b/src/SmartCode/SmartCode.csproj index bf63679..d4e4aeb 100644 --- a/src/SmartCode/SmartCode.csproj +++ b/src/SmartCode/SmartCode.csproj @@ -21,8 +21,8 @@ - - + + From b444aafefa32c17d2b8b49397e23af3eb09c7839 Mon Sep 17 00:00:00 2001 From: Ahoo Wang Date: Sat, 15 Dec 2018 00:40:38 +0800 Subject: [PATCH 006/127] fix ES sync error log --- src/SmartCode.ETL.LoadToES/LoadToESBuildTask.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/SmartCode.ETL.LoadToES/LoadToESBuildTask.cs b/src/SmartCode.ETL.LoadToES/LoadToESBuildTask.cs index 4c1032d..b5326a0 100644 --- a/src/SmartCode.ETL.LoadToES/LoadToESBuildTask.cs +++ b/src/SmartCode.ETL.LoadToES/LoadToESBuildTask.cs @@ -93,7 +93,7 @@ public async Task Build(BuildContext context) .Type(esOptions.TypeName) .IndexMany(list) ); - if (esSyncResp.Errors) + if (esSyncResp.Errors || !esSyncResp.IsValid) { _logger.LogError($"ES.ERRORS:{esSyncResp.DebugInformation}"); throw new SmartCodeException($"ES.ERRORS:{esSyncResp.DebugInformation}"); From fd5da99b45a9723462a6395f6a44fc3c8cb3f5ca Mon Sep 17 00:00:00 2001 From: Ahoo Wang Date: Sat, 15 Dec 2018 00:41:10 +0800 Subject: [PATCH 007/127] u version --- src/SmartCode.CLI/SmartCode.CLI.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/SmartCode.CLI/SmartCode.CLI.csproj b/src/SmartCode.CLI/SmartCode.CLI.csproj index 40b92ef..e270059 100644 --- a/src/SmartCode.CLI/SmartCode.CLI.csproj +++ b/src/SmartCode.CLI/SmartCode.CLI.csproj @@ -20,7 +20,7 @@ Github SmartCode SmartSql true - 2.0.0 + 2.0.2 https://raw.githubusercontent.com/Ahoo-Wang/SmartCode/master/doc/Logo.png add SmartCode.ETL.LoadToES From ceb894b4b746a3b5209515c4630c09f0413a1b12 Mon Sep 17 00:00:00 2001 From: Ahoo Date: Mon, 17 Dec 2018 17:28:25 +0800 Subject: [PATCH 008/127] add SmartCode.ETL.LoadToES support ES_ID_Mapping --- src/SmartCode.CLI/SmartCode.CLI.csproj | 4 ++-- src/SmartCode.Db/SmartCode.Db.csproj | 2 +- .../LoadToESBuildTask.cs | 22 ++++++++++++++----- src/SmartCode.ETL/SmartCode.ETL.csproj | 2 +- 4 files changed, 21 insertions(+), 9 deletions(-) diff --git a/src/SmartCode.CLI/SmartCode.CLI.csproj b/src/SmartCode.CLI/SmartCode.CLI.csproj index e270059..154db4e 100644 --- a/src/SmartCode.CLI/SmartCode.CLI.csproj +++ b/src/SmartCode.CLI/SmartCode.CLI.csproj @@ -20,9 +20,9 @@ Github SmartCode SmartSql true - 2.0.2 + 2.0.4 https://raw.githubusercontent.com/Ahoo-Wang/SmartCode/master/doc/Logo.png - add SmartCode.ETL.LoadToES + add SmartCode.ETL.LoadToES support ES_ID_Mapping diff --git a/src/SmartCode.Db/SmartCode.Db.csproj b/src/SmartCode.Db/SmartCode.Db.csproj index ee10297..2452610 100644 --- a/src/SmartCode.Db/SmartCode.Db.csproj +++ b/src/SmartCode.Db/SmartCode.Db.csproj @@ -14,7 +14,7 @@ - + diff --git a/src/SmartCode.ETL.LoadToES/LoadToESBuildTask.cs b/src/SmartCode.ETL.LoadToES/LoadToESBuildTask.cs index b5326a0..e2839c7 100644 --- a/src/SmartCode.ETL.LoadToES/LoadToESBuildTask.cs +++ b/src/SmartCode.ETL.LoadToES/LoadToESBuildTask.cs @@ -15,6 +15,7 @@ namespace SmartCode.ETL.LoadToES public class LoadToESBuildTask : IBuildTask { private const string COLUMN_MAPPING = "ColumnMapping"; + private const string ID_MAPPING = "Id"; private const string HOST = "Host"; private const string INDEX_NAME = "Index"; private const string TYPE_NAME = "Type"; @@ -87,11 +88,22 @@ public async Task Build(BuildContext context) { var createIndexResp = await esClient.CreateIndexAsync(esOptions.Index); } - var esSyncResp = await esClient.BulkAsync(bulkRequest => - bulkRequest - .Index(esOptions.Index) - .Type(esOptions.TypeName) - .IndexMany(list) + var esSyncResp = await esClient.BulkAsync((bulkRequest) => + { + var bulkReqDesc = bulkRequest + .Index(esOptions.Index) + .Type(esOptions.TypeName); + if (context.Build.Paramters.Value(ID_MAPPING, out string es_id)) + { + return bulkReqDesc.IndexMany(list, (bulkIdxDesc, item) => + { + var idVal = item[es_id].ToString(); + return bulkIdxDesc.Id(idVal); + } + ); + } + return bulkReqDesc.IndexMany(list); + } ); if (esSyncResp.Errors || !esSyncResp.IsValid) { diff --git a/src/SmartCode.ETL/SmartCode.ETL.csproj b/src/SmartCode.ETL/SmartCode.ETL.csproj index 104e138..7f4e83a 100644 --- a/src/SmartCode.ETL/SmartCode.ETL.csproj +++ b/src/SmartCode.ETL/SmartCode.ETL.csproj @@ -6,7 +6,7 @@ - + From c7549dad3f132f0677c9a6fdbe2c7a0cc0bf05b1 Mon Sep 17 00:00:00 2001 From: Ahoo Date: Thu, 27 Dec 2018 11:53:27 +0800 Subject: [PATCH 009/127] add nuget package info --- README-EN.md | 8 +++++++- README.md | 8 +++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/README-EN.md b/README-EN.md index 5db0bd0..4357ed0 100644 --- a/README-EN.md +++ b/README-EN.md @@ -10,6 +10,12 @@ ![SmartCode](./doc/SmartCode-EN.png) +## Nuget Packages + +| Package | NuGet Stable | Downloads | +| ------- | -------- | ------- | +| [SmartCode.CLI](https://www.nuget.org/packages/SmartCode.CLI/) | [![SmartCode.CLI](https://img.shields.io/nuget/v/SmartCode.CLI.svg)](https://www.nuget.org/packages/SmartCode.CLI/) | [![SmartCode.CLI](https://img.shields.io/nuget/dt/SmartCode.CLI.svg)](https://www.nuget.org/packages/SmartCode.CLI/) | + ## SmartCode.Generator (Code generator) ### Demo @@ -21,7 +27,7 @@ 1. Install from .NET Core Global Tool ``` shell - dotnet tool install --global SmartCode.CLI + dotnet tool install --global SmartCode.CLI ``` 2. edit build configuration file (default: SmartCode.yml) diff --git a/README.md b/README.md index f3e80a5..2d677bc 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,12 @@ ![SmartCode](./doc/SmartCode.png) +## Nuget Packages + +| Package | NuGet Stable | Downloads | +| ------- | -------- | ------- | +| [SmartCode.CLI](https://www.nuget.org/packages/SmartCode.CLI/) | [![SmartCode.CLI](https://img.shields.io/nuget/v/SmartCode.CLI.svg)](https://www.nuget.org/packages/SmartCode.CLI/) | [![SmartCode.CLI](https://img.shields.io/nuget/dt/SmartCode.CLI.svg)](https://www.nuget.org/packages/SmartCode.CLI/) | + ## SmartCode.Generator (代码生成器) ### Demo @@ -18,7 +24,7 @@ ### Getting Started -1. Install from .NET Core Global Tool +1. Install from .NET Core Global Tool ``` shell dotnet tool install --global SmartCode.CLI From 744e7b51ed00124a89de8a49dae71c623fc6ad9e Mon Sep 17 00:00:00 2001 From: Ahoo Date: Wed, 9 Jan 2019 11:25:48 +0800 Subject: [PATCH 010/127] fix SqlServer2012 -> New QueryByPage Syntax --- .../CSharp/SqlMap-Partials/SqlMap-SqlServer.cshtml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/SqlMap-SqlServer.cshtml b/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/SqlMap-SqlServer.cshtml index 097566b..804c4ed 100644 --- a/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/SqlMap-SqlServer.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/SqlMap-SqlServer.cshtml @@ -33,7 +33,7 @@ { - @if (versionNo > 2012) + @if (versionNo >= 2012) { Select T.* From @table.Name T With(NoLock) From 21ad1390f7fa5c2f1446d0301345c5a2d98b3293 Mon Sep 17 00:00:00 2001 From: Ahoo Date: Wed, 9 Jan 2019 11:28:45 +0800 Subject: [PATCH 011/127] u README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 2d677bc..67c7ed1 100644 --- a/README.md +++ b/README.md @@ -299,7 +299,7 @@ DbSource.Paramters 接受以下三个参数: >为了让更多人参与到SmartCode模板建设中来,故有以下模板规范: -1. 模板作者在 src/SmartCode.Generator/RazorTemplates 中新建目录,并以作者英文名为目录名称 +1. 模板作者在 src/SmartCode.Generator/RazorTemplates/Contributions 中新建目录,并以作者英文名为目录名称 2. 把模板放置到作者目录 3. 作者目录下必须包括 README.md 文件,以说明模板的用途场景以及使用方式 4. 提交PR From 76f8f5131035edc2c367d0d7b87228bc8848f51e Mon Sep 17 00:00:00 2001 From: Bingfeng Liu Date: Wed, 16 Jan 2019 04:13:59 -0500 Subject: [PATCH 012/127] fix CamelCaseConverter not work --- src/SmartCode/WordsConverter/CamelCaseConverter.cs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/SmartCode/WordsConverter/CamelCaseConverter.cs b/src/SmartCode/WordsConverter/CamelCaseConverter.cs index a949c06..3481446 100644 --- a/src/SmartCode/WordsConverter/CamelCaseConverter.cs +++ b/src/SmartCode/WordsConverter/CamelCaseConverter.cs @@ -17,7 +17,11 @@ public String Convert(IEnumerable words) foreach (var word in words) { string firstChar = word.Substring(0, 1).ToUpper(); - if (isFirstWord) { firstChar = firstChar.ToLower(); } + if (isFirstWord) + { + firstChar = firstChar.ToLower(); + isFirstWord = false; + } stringBuilder.Append(firstChar); string leftChar = word.Substring(1).ToLower(); stringBuilder.Append(leftChar); From 760db24aaafefcd3ee715efae038709e29f48289 Mon Sep 17 00:00:00 2001 From: Ahoo Wang Date: Sun, 20 Jan 2019 11:14:23 +0800 Subject: [PATCH 013/127] fix SmartCode-Gen-ETL.yml --- doc/SmartCode-Gen-ETL.yml | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/doc/SmartCode-Gen-ETL.yml b/doc/SmartCode-Gen-ETL.yml index 4cd8fa7..4cfef19 100644 --- a/doc/SmartCode-Gen-ETL.yml +++ b/doc/SmartCode-Gen-ETL.yml @@ -8,7 +8,9 @@ DataSource: DbProvider: SqlServer ConnectionString: Data Source=localhost;database=SqlServerDB;uid=SmartSql;pwd=SmartSql Language: PostgreSql -TemplateEngine: Razor +TemplateEngine: + Name: Razor + Root: . Paramters: ExtractMode: QueryTime ModifyTime: ModifyTime @@ -30,7 +32,8 @@ Build: DbToPGSql: Type: Single Module: SmartCode - Template: Sql/DbToPGSql.cshtml + TemplateEngine: + Path: Sql/DbToPGSql.cshtml IgnoreNoPKTable: true Output: Path: '.' @@ -66,7 +69,8 @@ Build: ToPGBuild: Type: Table Module: SmartCode - Template: ETL/ToPGBuild.cshtml + TemplateEngine: + Path: ETL/ToPGBuild.cshtml IgnoreNoPKTable: true Output: Path: '.' From 847e1164710ac4cce32fbea20c42475189d2907d Mon Sep 17 00:00:00 2001 From: Ahoo Wang Date: Wed, 27 Feb 2019 10:53:31 +0800 Subject: [PATCH 014/127] 1. u lib version --- Directory.Build.props | 24 ++++++++++++++++ SmartCode.sln | 6 ++++ build/version.props | 8 ++++++ doc/SmartCode.yml | 4 +-- src/SmartCode.App/SmartCode.App.csproj | 4 +-- src/SmartCode.CLI/Program.cs | 2 +- src/SmartCode.CLI/SmartCode.CLI.csproj | 28 ++++++------------- src/SmartCode.CLI/appsettings.json | 2 +- src/SmartCode.Db/SmartCode.Db.csproj | 3 +- src/SmartCode.ETL/SmartCode.ETL.csproj | 1 - .../CSharp/Proj-Repository.cshtml | 2 +- .../SmartCode.TemplateEngine.csproj | 5 ++-- src/SmartCode.Tests/SmartCode.Tests.csproj | 11 +++++--- src/SmartCode/SmartCode.csproj | 17 ++--------- 14 files changed, 65 insertions(+), 52 deletions(-) create mode 100644 Directory.Build.props create mode 100644 build/version.props diff --git a/Directory.Build.props b/Directory.Build.props new file mode 100644 index 0000000..1cedce2 --- /dev/null +++ b/Directory.Build.props @@ -0,0 +1,24 @@ + + + + + + SmartCode + 2019 SmartCode, Inc. + $(AssemblyName) + Ahoo Wang + ahoowang@qq.com + latest + https://github.com/Smart-Kit/SmartCode + git + $(MSBuildThisFileDirectory) + https://raw.githubusercontent.com/Smart-Kit/SmartCode/master/doc/Logo.png + https://github.com/Smart-Kit/SmartCode + True + Apache-2.0 + SmartCode SmartSql + + SmartCode = IDataSource -> IBuildTask -> IOutput => Build Everything!!! + + + \ No newline at end of file diff --git a/SmartCode.sln b/SmartCode.sln index 385115c..5120ba6 100644 --- a/SmartCode.sln +++ b/SmartCode.sln @@ -29,6 +29,12 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SmartCode.ETL.SQLite", "src EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SmartCode.ETL.LoadToES", "src\SmartCode.ETL.LoadToES\SmartCode.ETL.LoadToES.csproj", "{DADD6996-91C4-496D-AE97-D8EA5E33716A}" EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Build", "Build", "{B0F696A9-339D-4348-9032-F8DFC775ABD4}" + ProjectSection(SolutionItems) = preProject + Directory.Build.props = Directory.Build.props + build\version.props = build\version.props + EndProjectSection +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU diff --git a/build/version.props b/build/version.props new file mode 100644 index 0000000..5223b80 --- /dev/null +++ b/build/version.props @@ -0,0 +1,8 @@ + + + 2 + 0 + 5 + $(VersionMajor).$(VersionMinor).$(VersionPatch) + + diff --git a/doc/SmartCode.yml b/doc/SmartCode.yml index 67861ab..4937493 100644 --- a/doc/SmartCode.yml +++ b/doc/SmartCode.yml @@ -3,9 +3,9 @@ Author: Ahoo Wang DataSource: Name: DbTable Paramters: - DbName: SmartSqlDB + DbName: SmartSqlTestDB DbProvider: SqlServer - ConnectionString: Data Source=.;Initial Catalog=SmartSqlDB;Integrated Security=True + ConnectionString: Data Source=.;Initial Catalog=SmartSqlTestDB;Integrated Security=True Language: CSharp TemplateEngine: Name: Razor diff --git a/src/SmartCode.App/SmartCode.App.csproj b/src/SmartCode.App/SmartCode.App.csproj index 95cae97..e06175f 100644 --- a/src/SmartCode.App/SmartCode.App.csproj +++ b/src/SmartCode.App/SmartCode.App.csproj @@ -2,12 +2,10 @@ netstandard2.0 - 7.1 - 1.2.0 - + diff --git a/src/SmartCode.CLI/Program.cs b/src/SmartCode.CLI/Program.cs index 59c0667..fa35886 100644 --- a/src/SmartCode.CLI/Program.cs +++ b/src/SmartCode.CLI/Program.cs @@ -28,7 +28,7 @@ static async Task Main(string[] args) if (String.IsNullOrEmpty(configPath)) { Console.ForegroundColor = ConsoleColor.White; - Console.WriteLine("Pleace Please enter the path to build configuration file:"); + Console.WriteLine("Please enter the path to build configuration file:"); configPath = Console.ReadLine(); if (String.IsNullOrEmpty(configPath)) { diff --git a/src/SmartCode.CLI/SmartCode.CLI.csproj b/src/SmartCode.CLI/SmartCode.CLI.csproj index 154db4e..5e51341 100644 --- a/src/SmartCode.CLI/SmartCode.CLI.csproj +++ b/src/SmartCode.CLI/SmartCode.CLI.csproj @@ -2,33 +2,23 @@ Exe - netcoreapp2.1 + netcoreapp2.2 true - latest + true SmartCode ./nupkg SmartCode.CLI - - SmartCode = IDataSource -> IBuildTask -> IOutput => Build Everything!!! - Ahoo Wang - Ahoo Wang - https://raw.githubusercontent.com/Ahoo-Wang/SmartCode/master/LICENSE - https://github.com/Ahoo-Wang/SmartCode - https://github.com/Ahoo-Wang/SmartCode - Github - SmartCode SmartSql - true - 2.0.4 - https://raw.githubusercontent.com/Ahoo-Wang/SmartCode/master/doc/Logo.png - add SmartCode.ETL.LoadToES support ES_ID_Mapping + + 1. fix CamelCaseConverter not work + - - - - + + + + diff --git a/src/SmartCode.CLI/appsettings.json b/src/SmartCode.CLI/appsettings.json index 11c8c8b..069f685 100644 --- a/src/SmartCode.CLI/appsettings.json +++ b/src/SmartCode.CLI/appsettings.json @@ -8,7 +8,7 @@ } }, "SmartCode": { - "Version": "v1.18.2", + "Version": "v2.0.5", "Plugins": [ { "Type": "SmartCode.IDataSource,SmartCode", diff --git a/src/SmartCode.Db/SmartCode.Db.csproj b/src/SmartCode.Db/SmartCode.Db.csproj index 2452610..c2fd9ee 100644 --- a/src/SmartCode.Db/SmartCode.Db.csproj +++ b/src/SmartCode.Db/SmartCode.Db.csproj @@ -2,7 +2,6 @@ netstandard2.0 - 1.8.0 @@ -11,7 +10,7 @@ - + diff --git a/src/SmartCode.ETL/SmartCode.ETL.csproj b/src/SmartCode.ETL/SmartCode.ETL.csproj index 7f4e83a..750eff5 100644 --- a/src/SmartCode.ETL/SmartCode.ETL.csproj +++ b/src/SmartCode.ETL/SmartCode.ETL.csproj @@ -2,7 +2,6 @@ netstandard2.0 - 7.1 diff --git a/src/SmartCode.Generator/RazorTemplates/CSharp/Proj-Repository.cshtml b/src/SmartCode.Generator/RazorTemplates/CSharp/Proj-Repository.cshtml index 9e39a56..0d16229 100644 --- a/src/SmartCode.Generator/RazorTemplates/CSharp/Proj-Repository.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/CSharp/Proj-Repository.cshtml @@ -10,7 +10,7 @@ netstandard2.0 - + diff --git a/src/SmartCode.TemplateEngine/SmartCode.TemplateEngine.csproj b/src/SmartCode.TemplateEngine/SmartCode.TemplateEngine.csproj index ac32f8a..ce6939e 100644 --- a/src/SmartCode.TemplateEngine/SmartCode.TemplateEngine.csproj +++ b/src/SmartCode.TemplateEngine/SmartCode.TemplateEngine.csproj @@ -2,12 +2,11 @@ netstandard2.0 - 1.5.0 - - + + diff --git a/src/SmartCode.Tests/SmartCode.Tests.csproj b/src/SmartCode.Tests/SmartCode.Tests.csproj index d24f7b0..54c0bb6 100644 --- a/src/SmartCode.Tests/SmartCode.Tests.csproj +++ b/src/SmartCode.Tests/SmartCode.Tests.csproj @@ -1,15 +1,18 @@  - netcoreapp2.1 + netcoreapp2.2 false - - - + + + + all + runtime; build; native; contentfiles; analyzers + diff --git a/src/SmartCode/SmartCode.csproj b/src/SmartCode/SmartCode.csproj index d4e4aeb..6a72e78 100644 --- a/src/SmartCode/SmartCode.csproj +++ b/src/SmartCode/SmartCode.csproj @@ -3,26 +3,13 @@ netstandard2.0 true - latest SmartCode - - SmartCode = IDataSource -> IBuildTask -> IOutput => Build Everything!!! - - Ahoo Wang - Ahoo Wang - https://raw.githubusercontent.com/Ahoo-Wang/SmartCode/master/LICENSE - https://github.com/Ahoo-Wang/SmartCode - Github - SmartCode - true - https://github.com/Ahoo-Wang/SmartCode - 1.2.0 - + - + From cce7f2b925441fb8ef841a8e3d82a63f6c2e0317 Mon Sep 17 00:00:00 2001 From: Ahoo Wang Date: Fri, 22 Mar 2019 12:01:33 +0800 Subject: [PATCH 015/127] add support SmartSql-V4 --- build/version.props | 4 +-- src/SmartCode.CLI/SmartCode.CLI.csproj | 2 +- src/SmartCode.Db/SmartCode.Db.csproj | 6 ++--- .../SmartCode.ETL.SQLite.csproj | 2 +- .../DbTypeConverter/DbTypeMap.xml | 4 +-- .../RazorTemplates/CSharp/API/Startup.cshtml | 5 ++-- .../RazorTemplates/CSharp/Copyright.cshtml | 1 - .../RazorTemplates/CSharp/Entity.cshtml | 1 - .../RazorTemplates/CSharp/Proj-API.cshtml | 13 +++++----- .../CSharp/Proj-Repository.cshtml | 2 +- .../RazorTemplates/CSharp/Repository.cshtml | 1 - .../CURD/SqlMap-GetEntity.cshtml | 2 +- .../SqlMap-Partials/SqlMap-SqlServer.cshtml | 2 +- .../SqlMap-Partials/_SqlMapLayout.cshtml | 2 +- .../RazorTemplates/CSharp/SqlMapConfig.cshtml | 25 ++++++++----------- src/SmartCode/SmartCode.csproj | 2 +- 16 files changed, 34 insertions(+), 40 deletions(-) diff --git a/build/version.props b/build/version.props index 5223b80..4eb1045 100644 --- a/build/version.props +++ b/build/version.props @@ -1,8 +1,8 @@ 2 - 0 - 5 + 1 + 0 $(VersionMajor).$(VersionMinor).$(VersionPatch) diff --git a/src/SmartCode.CLI/SmartCode.CLI.csproj b/src/SmartCode.CLI/SmartCode.CLI.csproj index 5e51341..de93142 100644 --- a/src/SmartCode.CLI/SmartCode.CLI.csproj +++ b/src/SmartCode.CLI/SmartCode.CLI.csproj @@ -11,7 +11,7 @@ SmartCode.CLI Ahoo Wang - 1. fix CamelCaseConverter not work + 1. add support SmartSql-V4 diff --git a/src/SmartCode.Db/SmartCode.Db.csproj b/src/SmartCode.Db/SmartCode.Db.csproj index c2fd9ee..9fb3e46 100644 --- a/src/SmartCode.Db/SmartCode.Db.csproj +++ b/src/SmartCode.Db/SmartCode.Db.csproj @@ -9,10 +9,10 @@ - + - - + + diff --git a/src/SmartCode.ETL.SQLite/SmartCode.ETL.SQLite.csproj b/src/SmartCode.ETL.SQLite/SmartCode.ETL.SQLite.csproj index a570080..e9a6302 100644 --- a/src/SmartCode.ETL.SQLite/SmartCode.ETL.SQLite.csproj +++ b/src/SmartCode.ETL.SQLite/SmartCode.ETL.SQLite.csproj @@ -5,7 +5,7 @@ - + diff --git a/src/SmartCode.Generator/DbTypeConverter/DbTypeMap.xml b/src/SmartCode.Generator/DbTypeConverter/DbTypeMap.xml index 799f3f2..2fb3da4 100644 --- a/src/SmartCode.Generator/DbTypeConverter/DbTypeMap.xml +++ b/src/SmartCode.Generator/DbTypeConverter/DbTypeMap.xml @@ -29,14 +29,14 @@ - + - + diff --git a/src/SmartCode.Generator/RazorTemplates/CSharp/API/Startup.cshtml b/src/SmartCode.Generator/RazorTemplates/CSharp/API/Startup.cshtml index f51ba11..5ed503a 100644 --- a/src/SmartCode.Generator/RazorTemplates/CSharp/API/Startup.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/CSharp/API/Startup.cshtml @@ -43,7 +43,8 @@ namespace @(project.Module).API } private void RegisterRepository(IServiceCollection services) { - services.AddSmartSqlRepositoryFromAssembly((options) => + services.AddSmartSql() + .AddRepositoryFromAssembly(options => { options.AssemblyString = "@(project.Module).Repository"; }); @@ -65,7 +66,7 @@ namespace @(project.Module).API { Title = SERVICE_NAME, Version = "v1", - Description = "https://github.com/Ahoo-Wang/SmartCode" + Description = "https://github.com/Smart-Kit/SmartCode" }); c.CustomSchemaIds((type) => type.FullName); var filePath = Path.Combine(AppContext.BaseDirectory, $"{SERVICE_NAME}.xml"); diff --git a/src/SmartCode.Generator/RazorTemplates/CSharp/Copyright.cshtml b/src/SmartCode.Generator/RazorTemplates/CSharp/Copyright.cshtml index 259b9a3..3e2f8ac 100644 --- a/src/SmartCode.Generator/RazorTemplates/CSharp/Copyright.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/CSharp/Copyright.cshtml @@ -1,5 +1,4 @@ @using SmartCode -@using SmartCode.CLI @model BuildContext @{ var project = Model.Project; diff --git a/src/SmartCode.Generator/RazorTemplates/CSharp/Entity.cshtml b/src/SmartCode.Generator/RazorTemplates/CSharp/Entity.cshtml index df8f80d..5232c20 100644 --- a/src/SmartCode.Generator/RazorTemplates/CSharp/Entity.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/CSharp/Entity.cshtml @@ -1,5 +1,4 @@ @using SmartCode -@using SmartCode.Db @model BuildContext @{ Layout = "_CSharpLayout.cshtml"; diff --git a/src/SmartCode.Generator/RazorTemplates/CSharp/Proj-API.cshtml b/src/SmartCode.Generator/RazorTemplates/CSharp/Proj-API.cshtml index 0a3abdb..213fdb0 100644 --- a/src/SmartCode.Generator/RazorTemplates/CSharp/Proj-API.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/CSharp/Proj-API.cshtml @@ -11,7 +11,7 @@ } - netcoreapp2.1 + netcoreapp2.2 @@ -21,20 +21,19 @@ } @if (dbSource.DbRepository.DbProvider == DbProvider.PostgreSql) { - + } else { - + } - - - + + + - diff --git a/src/SmartCode.Generator/RazorTemplates/CSharp/Proj-Repository.cshtml b/src/SmartCode.Generator/RazorTemplates/CSharp/Proj-Repository.cshtml index 0d16229..4b1d80f 100644 --- a/src/SmartCode.Generator/RazorTemplates/CSharp/Proj-Repository.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/CSharp/Proj-Repository.cshtml @@ -10,7 +10,7 @@ netstandard2.0 - + diff --git a/src/SmartCode.Generator/RazorTemplates/CSharp/Repository.cshtml b/src/SmartCode.Generator/RazorTemplates/CSharp/Repository.cshtml index 2b29186..61c2489 100644 --- a/src/SmartCode.Generator/RazorTemplates/CSharp/Repository.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/CSharp/Repository.cshtml @@ -15,7 +15,6 @@ using System; using System.Collections.Generic; using System.Data; using System.Text; -using SmartSql.Abstractions; using SmartSql.DyRepository; using @(project.Module).Entity; diff --git a/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/CURD/SqlMap-GetEntity.cshtml b/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/CURD/SqlMap-GetEntity.cshtml index 9f7fd22..f0e01c1 100644 --- a/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/CURD/SqlMap-GetEntity.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/CURD/SqlMap-GetEntity.cshtml @@ -15,7 +15,7 @@ Select T.* From @table.Name As T - + T.@pkCol.Name= @($"{prefix}{pkCol.ConvertedName}") diff --git a/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/SqlMap-SqlServer.cshtml b/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/SqlMap-SqlServer.cshtml index 804c4ed..c58e149 100644 --- a/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/SqlMap-SqlServer.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/SqlMap-SqlServer.cshtml @@ -58,7 +58,7 @@ Select Top 1 T.* From @table.Name T With(NoLock) - + T.@pkCol.Name=@dbPrefix@pkCol.ConvertedName diff --git a/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/_SqlMapLayout.cshtml b/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/_SqlMapLayout.cshtml index 52569c9..8a2d260 100644 --- a/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/_SqlMapLayout.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/_SqlMapLayout.cshtml @@ -14,7 +14,7 @@ } } - + @{ await Html.RenderPartialAsync("SqlMap-ResultMaps.cshtml", Model); } diff --git a/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMapConfig.cshtml b/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMapConfig.cshtml index 5251dfd..7be4a8b 100644 --- a/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMapConfig.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMapConfig.cshtml @@ -11,26 +11,23 @@ - - - - - - - - - + + + + @if (dbSource.DbRepository.DbProvider == DbProvider.PostgreSql) { - - + } else { - - + } - + + + + + diff --git a/src/SmartCode/SmartCode.csproj b/src/SmartCode/SmartCode.csproj index 6a72e78..090789c 100644 --- a/src/SmartCode/SmartCode.csproj +++ b/src/SmartCode/SmartCode.csproj @@ -9,7 +9,7 @@ - + From a2897a00e2f46bd49b6c350fa178fdfac58abaa0 Mon Sep 17 00:00:00 2001 From: Ahoo Wang Date: Fri, 22 Mar 2019 12:06:40 +0800 Subject: [PATCH 016/127] add Set.Tag Attribute.Required=true --- build/version.props | 2 +- .../CSharp/SqlMap-Partials/CURD/SqlMap-Update.cshtml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/build/version.props b/build/version.props index 4eb1045..f35f0d0 100644 --- a/build/version.props +++ b/build/version.props @@ -2,7 +2,7 @@ 2 1 - 0 + 1 $(VersionMajor).$(VersionMinor).$(VersionPatch) diff --git a/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/CURD/SqlMap-Update.cshtml b/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/CURD/SqlMap-Update.cshtml index 025f542..bce078d 100644 --- a/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/CURD/SqlMap-Update.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/CURD/SqlMap-Update.cshtml @@ -17,7 +17,7 @@ UPDATE @table.Name - + @foreach (var col in table.Columns) { if (!col.IsPrimaryKey) From ae3cbf0b0363414cecfaa1b270bb5590f6aeb5c9 Mon Sep 17 00:00:00 2001 From: Ahoo Wang Date: Fri, 22 Mar 2019 12:18:34 +0800 Subject: [PATCH 017/127] 1. add ScriptBuilder to SqlMapConfig.cshtml 2. add SnowflakeId-Config to SqlMapConfig.cshtml --- .../RazorTemplates/CSharp/Proj-API.cshtml | 1 + .../RazorTemplates/CSharp/SqlMapConfig.cshtml | 11 +++++++++++ 2 files changed, 12 insertions(+) diff --git a/src/SmartCode.Generator/RazorTemplates/CSharp/Proj-API.cshtml b/src/SmartCode.Generator/RazorTemplates/CSharp/Proj-API.cshtml index 213fdb0..021aa5f 100644 --- a/src/SmartCode.Generator/RazorTemplates/CSharp/Proj-API.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/CSharp/Proj-API.cshtml @@ -27,6 +27,7 @@ { } + diff --git a/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMapConfig.cshtml b/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMapConfig.cshtml index 7be4a8b..dd1edb5 100644 --- a/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMapConfig.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMapConfig.cshtml @@ -15,6 +15,7 @@ + @if (dbSource.DbRepository.DbProvider == DbProvider.PostgreSql) { @@ -28,6 +29,16 @@ + + + + + + + + + + From 3663c9be1bc02117d250d859cf46535fba723ab0 Mon Sep 17 00:00:00 2001 From: Ahoo Wang Date: Mon, 25 Mar 2019 16:03:25 +0800 Subject: [PATCH 018/127] update template to support SmartSql-4.0.0-rc95 --- build/version.props | 2 +- src/SmartCode.CLI/SmartCode.CLI.csproj | 3 +++ .../RazorTemplates/CSharp/Proj-API.cshtml | 10 +++++----- .../RazorTemplates/CSharp/Proj-Repository.cshtml | 2 +- .../CSharp/SqlMap-Partials/_SqlMapLayout.cshtml | 2 +- .../RazorTemplates/CSharp/SqlMapConfig.cshtml | 2 +- 6 files changed, 12 insertions(+), 9 deletions(-) diff --git a/build/version.props b/build/version.props index f35f0d0..3f2e2e5 100644 --- a/build/version.props +++ b/build/version.props @@ -2,7 +2,7 @@ 2 1 - 1 + 2 $(VersionMajor).$(VersionMinor).$(VersionPatch) diff --git a/src/SmartCode.CLI/SmartCode.CLI.csproj b/src/SmartCode.CLI/SmartCode.CLI.csproj index de93142..77a7946 100644 --- a/src/SmartCode.CLI/SmartCode.CLI.csproj +++ b/src/SmartCode.CLI/SmartCode.CLI.csproj @@ -12,6 +12,9 @@ Ahoo Wang 1. add support SmartSql-V4 + 2. add Set.Tag Attribute.Required=true + 3. add ScriptBuilder to SqlMapConfig.cshtml + 4. add SnowflakeId-Config to SqlMapConfig.cshtml diff --git a/src/SmartCode.Generator/RazorTemplates/CSharp/Proj-API.cshtml b/src/SmartCode.Generator/RazorTemplates/CSharp/Proj-API.cshtml index 021aa5f..573e0c4 100644 --- a/src/SmartCode.Generator/RazorTemplates/CSharp/Proj-API.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/CSharp/Proj-API.cshtml @@ -21,15 +21,15 @@ } @if (dbSource.DbRepository.DbProvider == DbProvider.PostgreSql) { - + } else { - + } - - - + + + diff --git a/src/SmartCode.Generator/RazorTemplates/CSharp/Proj-Repository.cshtml b/src/SmartCode.Generator/RazorTemplates/CSharp/Proj-Repository.cshtml index 4b1d80f..40efb5f 100644 --- a/src/SmartCode.Generator/RazorTemplates/CSharp/Proj-Repository.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/CSharp/Proj-Repository.cshtml @@ -10,7 +10,7 @@ netstandard2.0 - + diff --git a/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/_SqlMapLayout.cshtml b/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/_SqlMapLayout.cshtml index 8a2d260..52569c9 100644 --- a/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/_SqlMapLayout.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/_SqlMapLayout.cshtml @@ -14,7 +14,7 @@ } } - + @{ await Html.RenderPartialAsync("SqlMap-ResultMaps.cshtml", Model); } diff --git a/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMapConfig.cshtml b/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMapConfig.cshtml index dd1edb5..9916087 100644 --- a/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMapConfig.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMapConfig.cshtml @@ -11,7 +11,7 @@ - + From 53fa1c40e88ca3cfead16990c50c09de91da5e68 Mon Sep 17 00:00:00 2001 From: Ahoo Wang Date: Fri, 29 Mar 2019 19:04:12 +0800 Subject: [PATCH 019/127] update template to SmartSql-rc996 --- build/version.props | 2 +- .../RazorTemplates/CSharp/Proj-API.cshtml | 10 +++++----- .../RazorTemplates/CSharp/Proj-Repository.cshtml | 2 +- .../RazorTemplates/CSharp/Repository.cshtml | 1 + .../SqlMap-Partials/CURD/SqlMap-GetEntity.cshtml | 2 +- .../CSharp/SqlMap-Partials/SqlMap-Oracle.cshtml | 2 +- .../CSharp/SqlMap-Partials/SqlMap-SqlServer.cshtml | 2 +- 7 files changed, 11 insertions(+), 10 deletions(-) diff --git a/build/version.props b/build/version.props index 3f2e2e5..768ced0 100644 --- a/build/version.props +++ b/build/version.props @@ -2,7 +2,7 @@ 2 1 - 2 + 3 $(VersionMajor).$(VersionMinor).$(VersionPatch) diff --git a/src/SmartCode.Generator/RazorTemplates/CSharp/Proj-API.cshtml b/src/SmartCode.Generator/RazorTemplates/CSharp/Proj-API.cshtml index 573e0c4..8813820 100644 --- a/src/SmartCode.Generator/RazorTemplates/CSharp/Proj-API.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/CSharp/Proj-API.cshtml @@ -21,15 +21,15 @@ } @if (dbSource.DbRepository.DbProvider == DbProvider.PostgreSql) { - + } else { - + } - - - + + + diff --git a/src/SmartCode.Generator/RazorTemplates/CSharp/Proj-Repository.cshtml b/src/SmartCode.Generator/RazorTemplates/CSharp/Proj-Repository.cshtml index 40efb5f..e0061a6 100644 --- a/src/SmartCode.Generator/RazorTemplates/CSharp/Proj-Repository.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/CSharp/Proj-Repository.cshtml @@ -10,7 +10,7 @@ netstandard2.0 - + diff --git a/src/SmartCode.Generator/RazorTemplates/CSharp/Repository.cshtml b/src/SmartCode.Generator/RazorTemplates/CSharp/Repository.cshtml index 61c2489..a6ec756 100644 --- a/src/SmartCode.Generator/RazorTemplates/CSharp/Repository.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/CSharp/Repository.cshtml @@ -16,6 +16,7 @@ using System.Collections.Generic; using System.Data; using System.Text; using SmartSql.DyRepository; +using SmartSql.DyRepository.Annotations; using @(project.Module).Entity; namespace @(project.Module).@buildTask.Module diff --git a/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/CURD/SqlMap-GetEntity.cshtml b/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/CURD/SqlMap-GetEntity.cshtml index f0e01c1..fa1cd1c 100644 --- a/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/CURD/SqlMap-GetEntity.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/CURD/SqlMap-GetEntity.cshtml @@ -15,7 +15,7 @@ Select T.* From @table.Name As T - + T.@pkCol.Name= @($"{prefix}{pkCol.ConvertedName}") diff --git a/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/SqlMap-Oracle.cshtml b/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/SqlMap-Oracle.cshtml index b64dc82..0338d15 100644 --- a/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/SqlMap-Oracle.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/SqlMap-Oracle.cshtml @@ -35,7 +35,7 @@ Select T.* From @table.Name T - + ROWNUM = 1 T.@pkCol.Name=@dbPrefix@pkCol.ConvertedName diff --git a/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/SqlMap-SqlServer.cshtml b/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/SqlMap-SqlServer.cshtml index c58e149..c9b67ae 100644 --- a/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/SqlMap-SqlServer.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/SqlMap-SqlServer.cshtml @@ -58,7 +58,7 @@ Select Top 1 T.* From @table.Name T With(NoLock) - + T.@pkCol.Name=@dbPrefix@pkCol.ConvertedName From 99783101c502e0dfd49517280124ca36cdc227ce Mon Sep 17 00:00:00 2001 From: Ahoo Wang Date: Fri, 29 Mar 2019 19:18:14 +0800 Subject: [PATCH 020/127] remove Set-Required Attribute --- .../CSharp/SqlMap-Partials/CURD/SqlMap-Update.cshtml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/CURD/SqlMap-Update.cshtml b/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/CURD/SqlMap-Update.cshtml index bce078d..025f542 100644 --- a/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/CURD/SqlMap-Update.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/CURD/SqlMap-Update.cshtml @@ -17,7 +17,7 @@ UPDATE @table.Name - + @foreach (var col in table.Columns) { if (!col.IsPrimaryKey) From 7eb80e495ec4621f2bf59b286c39755250006ef1 Mon Sep 17 00:00:00 2001 From: Ahoo Wang Date: Mon, 1 Apr 2019 13:28:38 +0800 Subject: [PATCH 021/127] update Template to SmartSql-v4 --- build/version.props | 2 +- src/SmartCode.Db/Maps/Database-Oracle.xml | 40 ------------------- .../RazorTemplates/CSharp/Proj-API.cshtml | 10 ++--- .../CSharp/Proj-Repository.cshtml | 2 +- 4 files changed, 7 insertions(+), 47 deletions(-) delete mode 100644 src/SmartCode.Db/Maps/Database-Oracle.xml diff --git a/build/version.props b/build/version.props index 768ced0..0475425 100644 --- a/build/version.props +++ b/build/version.props @@ -2,7 +2,7 @@ 2 1 - 3 + 5 $(VersionMajor).$(VersionMinor).$(VersionPatch) diff --git a/src/SmartCode.Db/Maps/Database-Oracle.xml b/src/SmartCode.Db/Maps/Database-Oracle.xml deleted file mode 100644 index cccf293..0000000 --- a/src/SmartCode.Db/Maps/Database-Oracle.xml +++ /dev/null @@ -1,40 +0,0 @@ - - - - - SELECT - T.TABLE_NAME AS "Name", - 'T' AS TypeName, - NVL(C.COMMENTS,T.TABLE_NAME) AS "Description" - FROM USER_TABLES T - LEFT JOIN USER_TAB_COMMENTS C ON T.TABLE_NAME = C.TABLE_NAME - UNION ALL - SELECT - T.VIEW_NAME AS "Name", - 'V' AS "TypeName", - NVL(C.COMMENTS,T.VIEW_NAME) AS "Description" - FROM USER_VIEWS T - LEFT JOIN USER_TAB_COMMENTS C ON T.VIEW_NAME = C.TABLE_NAME - - - SELECT - C.COLUMN_ID AS "Id", - C.TABLE_NAME AS "TableId", - C.COLUMN_NAME AS "Name", - C.DATA_TYPE AS "DbType", - C.DATA_LENGTH AS "DataLength", - NVL(CC.COMMENTS,C.COLUMN_NAME) AS "Description", - (CASE C.NULLABLE WHEN 'N' THEN 1 ELSE 0 END) AS "IsNullable", - 0 AS "AutoIncrement", - (CASE P.COLUMN_NAME WHEN 'P' THEN 1 ELSE 0 END) AS "IsPrimaryKey" - FROM USER_TAB_COLUMNS C - LEFT JOIN USER_COL_COMMENTS CC ON C.TABLE_NAME = CC.TABLE_NAME AND C.COLUMN_NAME = CC.COLUMN_NAME - LEFT JOIN ( - SELECT CU.COLUMN_NAME FROM USER_CONS_COLUMNS CU - LEFT JOIN USER_CONSTRAINTS AU ON CU.CONSTRAINT_NAME = AU.CONSTRAINT_NAME - WHERE CU.TABLE_NAME = :TableName AND AU.CONSTRAINT_TYPE='P' - )P ON C.COLUMN_NAME = P.COLUMN_NAME - WHERE C.TABLE_NAME = :TableName ORDER BY C.COLUMN_ID - - - diff --git a/src/SmartCode.Generator/RazorTemplates/CSharp/Proj-API.cshtml b/src/SmartCode.Generator/RazorTemplates/CSharp/Proj-API.cshtml index 8813820..cf6db43 100644 --- a/src/SmartCode.Generator/RazorTemplates/CSharp/Proj-API.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/CSharp/Proj-API.cshtml @@ -21,15 +21,15 @@ } @if (dbSource.DbRepository.DbProvider == DbProvider.PostgreSql) { - + } else { - + } - - - + + + diff --git a/src/SmartCode.Generator/RazorTemplates/CSharp/Proj-Repository.cshtml b/src/SmartCode.Generator/RazorTemplates/CSharp/Proj-Repository.cshtml index e0061a6..7327687 100644 --- a/src/SmartCode.Generator/RazorTemplates/CSharp/Proj-Repository.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/CSharp/Proj-Repository.cshtml @@ -10,7 +10,7 @@ netstandard2.0 - + From 1959161da8b44bcc1687eb1d87e47340baff0e16 Mon Sep 17 00:00:00 2001 From: Ahoo Wang Date: Wed, 10 Apr 2019 14:18:06 +0800 Subject: [PATCH 022/127] 1. update SmartSql version 2. refactor Maps directory structure 3. Ignore DbProvider name case --- build/version.props | 2 +- doc/SmartCode.yml | 5 +-- src/SmartCode.CLI/SmartCode.CLI.csproj | 8 ++--- src/SmartCode.Db/DbProviders.cs | 4 ++- .../RazorTemplates/CSharp/Proj-API.cshtml | 31 ++--------------- .../CSharp/Proj-Repository.cshtml | 34 +++++++++++++++++-- 6 files changed, 44 insertions(+), 40 deletions(-) diff --git a/build/version.props b/build/version.props index 0475425..253e8e7 100644 --- a/build/version.props +++ b/build/version.props @@ -2,7 +2,7 @@ 2 1 - 5 + 8 $(VersionMajor).$(VersionMinor).$(VersionPatch) diff --git a/doc/SmartCode.yml b/doc/SmartCode.yml index 4937493..a404688 100644 --- a/doc/SmartCode.yml +++ b/doc/SmartCode.yml @@ -46,7 +46,8 @@ Build: {Key: "API/QueryResponse.cshtml",Output: {Path: '{{Project.Module}}.API/Messages',Name: 'QueryResponse',Extension: '.cs'}}, {Key: "API/QueryByPageResponse.cshtml",Output: {Path: '{{Project.Module}}.API/Messages',Name: 'QueryByPageResponse',Extension: '.cs'}}, {Key: "API/ResponseMessage.cshtml",Output: {Path: '{{Project.Module}}.API/Messages',Name: 'ResponseMessage',Extension: '.cs'}}, - {Key: "SqlMapConfig.cshtml",Output: {Path: '{{Project.Module}}.API',Name: 'SmartSqlMapConfig',Extension: '.xml'}} + {Key: "SqlMapConfig.cshtml",Output: {Path: '{{Project.Module}}.Repository',Name: 'SmartSqlMapConfig',Extension: '.xml'}}, + {Key: "SqlMapConfig.cshtml",Output: {Path: '{{Project.Module}}.Repository',Name: 'SmartSqlMapConfig.Development',Extension: '.xml'}} ] Entity: @@ -152,7 +153,7 @@ Build: TemplateEngine: Path: SqlMap.cshtml Output: - Path: '{{Project.Module}}.API/Maps' + Path: '{{Project.Module}}.Repository/Maps' Name: '{{Items.CurrentTable.ConvertedName}}' Extension: .xml IgnoreNoPKTable: true diff --git a/src/SmartCode.CLI/SmartCode.CLI.csproj b/src/SmartCode.CLI/SmartCode.CLI.csproj index 77a7946..3e9a164 100644 --- a/src/SmartCode.CLI/SmartCode.CLI.csproj +++ b/src/SmartCode.CLI/SmartCode.CLI.csproj @@ -4,17 +4,15 @@ Exe netcoreapp2.2 true - true SmartCode ./nupkg SmartCode.CLI Ahoo Wang - 1. add support SmartSql-V4 - 2. add Set.Tag Attribute.Required=true - 3. add ScriptBuilder to SqlMapConfig.cshtml - 4. add SnowflakeId-Config to SqlMapConfig.cshtml + 1. update SmartSql version + 2. refactor Maps directory structure + 3. Ignore DbProvider name case diff --git a/src/SmartCode.Db/DbProviders.cs b/src/SmartCode.Db/DbProviders.cs index 488f193..693687b 100644 --- a/src/SmartCode.Db/DbProviders.cs +++ b/src/SmartCode.Db/DbProviders.cs @@ -7,11 +7,13 @@ namespace SmartCode.Db { public class DbProviders { + private static readonly IDictionary _dbProviders; + static DbProviders() { + _dbProviders = new Dictionary(StringComparer.CurrentCultureIgnoreCase); InitDbProviders(); } - private static readonly IDictionary _dbProviders = new Dictionary(); private static void InitDbProviders() { _dbProviders.Add("MySql", new SmartSql.Configuration.DbProvider diff --git a/src/SmartCode.Generator/RazorTemplates/CSharp/Proj-API.cshtml b/src/SmartCode.Generator/RazorTemplates/CSharp/Proj-API.cshtml index cf6db43..f9da7b5 100644 --- a/src/SmartCode.Generator/RazorTemplates/CSharp/Proj-API.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/CSharp/Proj-API.cshtml @@ -1,13 +1,7 @@ @using SmartCode -@using SmartCode.Db; @model BuildContext @{ var project = Model.Project; - var dbSource = Model.GetDataSource(); - var dbFactory = dbSource.Database.DbProvider.Factory; - var dbProviderAssNames = dbFactory.GetType().Assembly.FullName.Split(','); - var dbProviderName = dbProviderAssNames[0]; - var dbProviderVersion = dbProviderAssNames[1].Split('=')[1]; } @@ -15,21 +9,7 @@ - @if (dbSource.DbRepository.DbProvider != DbProvider.SqlServer) - { - - } - @if (dbSource.DbRepository.DbProvider == DbProvider.PostgreSql) - { - - } - else - { - - } - - - + @@ -41,12 +21,5 @@ - - - Always - - - Always - - + diff --git a/src/SmartCode.Generator/RazorTemplates/CSharp/Proj-Repository.cshtml b/src/SmartCode.Generator/RazorTemplates/CSharp/Proj-Repository.cshtml index 7327687..688e75c 100644 --- a/src/SmartCode.Generator/RazorTemplates/CSharp/Proj-Repository.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/CSharp/Proj-Repository.cshtml @@ -1,8 +1,13 @@ @using SmartCode +@using SmartCode.Db @model BuildContext @{ - var project = Model.Project; + var dbSource = Model.GetDataSource(); + var dbFactory = dbSource.Database.DbProvider.Factory; + var dbProviderAssNames = dbFactory.GetType().Assembly.FullName.Split(','); + var dbProviderName = dbProviderAssNames[0]; + var dbProviderVersion = dbProviderAssNames[1].Split('=')[1]; } @@ -10,10 +15,35 @@ netstandard2.0 - + @if (dbSource.DbRepository.DbProvider != DbProvider.SqlServer) + { + + } + @if (dbSource.DbRepository.DbProvider == DbProvider.PostgreSql) + { + + } + else + { + + } + + + + + + Always + + + Always + + + Always + + From 29d7e77f777f69f7974781242b85063875e0cc90 Mon Sep 17 00:00:00 2001 From: Ahoo Wang Date: Thu, 11 Apr 2019 19:21:10 +0800 Subject: [PATCH 023/127] 1. change sln directory structure --- build/version.props | 2 +- doc/SmartCode.yml | 58 +++++++++---------- src/SmartCode.App/Outputs/FileOutput.cs | 5 +- src/SmartCode.CLI/SmartCode.CLI.csproj | 4 +- .../RazorTemplates/CSharp/Sln.cshtml | 8 +-- 5 files changed, 37 insertions(+), 40 deletions(-) diff --git a/build/version.props b/build/version.props index 253e8e7..2a24afb 100644 --- a/build/version.props +++ b/build/version.props @@ -2,7 +2,7 @@ 2 1 - 8 + 9 $(VersionMajor).$(VersionMinor).$(VersionPatch) diff --git a/doc/SmartCode.yml b/doc/SmartCode.yml index a404688..5b72d65 100644 --- a/doc/SmartCode.yml +++ b/doc/SmartCode.yml @@ -17,10 +17,10 @@ Output: # 构建任务 Build: - ClearDir: - Type: Clear - Paramters: - Dirs: '.' +# ClearDir: +# Type: Clear +# Paramters: +# Dirs: '.' Scaffolding: Type: MultiTemplate @@ -28,26 +28,26 @@ Build: Path: '.' Paramters: Templates: [{Key: 'Sln.cshtml',Output: {Name: '{{Project.Module}}',Extension: '.sln'}}, - {Key: "Proj-Entity.cshtml",Output: {Path: '{{Project.Module}}.Entity',Name: '{{Project.Module}}.Entity',Extension: '.csproj'}}, - {Key: "Proj-Repository.cshtml",Output: {Path: '{{Project.Module}}.Repository',Name: '{{Project.Module}}.Repository',Extension: '.csproj'}}, - {Key: "Proj-Service.cshtml",Output: {Path: '{{Project.Module}}.Service',Name: '{{Project.Module}}.Service',Extension: '.csproj'}}, - {Key: "Proj-API.cshtml",Output: {Path: '{{Project.Module}}.API',Name: '{{Project.Module}}.API',Extension: '.csproj'}}, - {Key: "API/LaunchSettings.cshtml",Output: {Path: '{{Project.Module}}.API/Properties',Name: 'launchSettings',Extension: '.json'}}, - {Key: "API/AppSettings.cshtml",Output: {Path: '{{Project.Module}}.API',Name: 'appsettings',Extension: '.json'}}, - {Key: "API/AppSettings-Development.cshtml",Output: {Path: '{{Project.Module}}.API',Name: 'appsettings.Development',Extension: '.json'}}, - {Key: "API/Program.cshtml",Output: {Path: '{{Project.Module}}.API',Name: 'Program',Extension: '.cs'}}, - {Key: "API/Startup.cshtml",Output: {Path: '{{Project.Module}}.API',Name: 'Startup',Extension: '.cs'}}, - {Key: "API/APIException.cshtml",Output: {Path: '{{Project.Module}}.API/Exceptions',Name: 'APIException',Extension: '.cs'}}, - {Key: "API/GlobalExceptionFilter.cshtml",Output: {Path: '{{Project.Module}}.API/Filters',Name: 'GlobalExceptionFilter',Extension: '.cs'}}, - {Key: "API/GlobalValidateModelFilter.cshtml",Output: {Path: '{{Project.Module}}.API/Filters',Name: 'GlobalValidateModelFilter',Extension: '.cs'}}, - {Key: "API/QueryRequest.cshtml",Output: {Path: '{{Project.Module}}.API/Messages',Name: 'QueryRequest',Extension: '.cs'}}, - {Key: "API/QueryByPageRequest.cshtml",Output: {Path: '{{Project.Module}}.API/Messages',Name: 'QueryByPageRequest',Extension: '.cs'}}, - {Key: "API/ResponseMessage.cshtml",Output: {Path: '{{Project.Module}}.API/Messages',Name: 'ResponseMessage',Extension: '.cs'}}, - {Key: "API/QueryResponse.cshtml",Output: {Path: '{{Project.Module}}.API/Messages',Name: 'QueryResponse',Extension: '.cs'}}, - {Key: "API/QueryByPageResponse.cshtml",Output: {Path: '{{Project.Module}}.API/Messages',Name: 'QueryByPageResponse',Extension: '.cs'}}, - {Key: "API/ResponseMessage.cshtml",Output: {Path: '{{Project.Module}}.API/Messages',Name: 'ResponseMessage',Extension: '.cs'}}, - {Key: "SqlMapConfig.cshtml",Output: {Path: '{{Project.Module}}.Repository',Name: 'SmartSqlMapConfig',Extension: '.xml'}}, - {Key: "SqlMapConfig.cshtml",Output: {Path: '{{Project.Module}}.Repository',Name: 'SmartSqlMapConfig.Development',Extension: '.xml'}} + {Key: "Proj-Entity.cshtml",Output: {Path: 'src/{{Project.Module}}.Entity',Name: '{{Project.Module}}.Entity',Extension: '.csproj'}}, + {Key: "Proj-Repository.cshtml",Output: {Path: 'src/{{Project.Module}}.Repository',Name: '{{Project.Module}}.Repository',Extension: '.csproj'}}, + {Key: "Proj-Service.cshtml",Output: {Path: 'src/{{Project.Module}}.Service',Name: '{{Project.Module}}.Service',Extension: '.csproj'}}, + {Key: "Proj-API.cshtml",Output: {Path: 'src/{{Project.Module}}.API',Name: '{{Project.Module}}.API',Extension: '.csproj'}}, + {Key: "API/LaunchSettings.cshtml",Output: {Path: 'src/{{Project.Module}}.API/Properties',Name: 'launchSettings',Extension: '.json'}}, + {Key: "API/AppSettings.cshtml",Output: {Path: 'src/{{Project.Module}}.API',Name: 'appsettings',Extension: '.json'}}, + {Key: "API/AppSettings-Development.cshtml",Output: {Path: 'src/{{Project.Module}}.API',Name: 'appsettings.Development',Extension: '.json'}}, + {Key: "API/Program.cshtml",Output: {Path: 'src/{{Project.Module}}.API',Name: 'Program',Extension: '.cs'}}, + {Key: "API/Startup.cshtml",Output: {Path: 'src/{{Project.Module}}.API',Name: 'Startup',Extension: '.cs'}}, + {Key: "API/APIException.cshtml",Output: {Path: 'src/{{Project.Module}}.API/Exceptions',Name: 'APIException',Extension: '.cs'}}, + {Key: "API/GlobalExceptionFilter.cshtml",Output: {Path: 'src/{{Project.Module}}.API/Filters',Name: 'GlobalExceptionFilter',Extension: '.cs'}}, + {Key: "API/GlobalValidateModelFilter.cshtml",Output: {Path: 'src/{{Project.Module}}.API/Filters',Name: 'GlobalValidateModelFilter',Extension: '.cs'}}, + {Key: "API/QueryRequest.cshtml",Output: {Path: 'src/{{Project.Module}}.API/Messages',Name: 'QueryRequest',Extension: '.cs'}}, + {Key: "API/QueryByPageRequest.cshtml",Output: {Path: 'src/{{Project.Module}}.API/Messages',Name: 'QueryByPageRequest',Extension: '.cs'}}, + {Key: "API/ResponseMessage.cshtml",Output: {Path: 'src/{{Project.Module}}.API/Messages',Name: 'ResponseMessage',Extension: '.cs'}}, + {Key: "API/QueryResponse.cshtml",Output: {Path: 'src/{{Project.Module}}.API/Messages',Name: 'QueryResponse',Extension: '.cs'}}, + {Key: "API/QueryByPageResponse.cshtml",Output: {Path: 'src/{{Project.Module}}.API/Messages',Name: 'QueryByPageResponse',Extension: '.cs'}}, + {Key: "API/ResponseMessage.cshtml",Output: {Path: 'src/{{Project.Module}}.API/Messages',Name: 'ResponseMessage',Extension: '.cs'}}, + {Key: "SqlMapConfig.cshtml",Output: {Path: 'src/{{Project.Module}}.Repository',Name: 'SmartSqlMapConfig',Extension: '.xml'}}, + {Key: "SqlMapConfig.cshtml",Output: {Path: 'src/{{Project.Module}}.Repository',Name: 'SmartSqlMapConfig.Development',Extension: '.xml'}} ] Entity: @@ -56,7 +56,7 @@ Build: TemplateEngine: Path: Entity.cshtml Output: - Path: '{{Project.Module}}.{{Build.Module}}' + Path: 'src/{{Project.Module}}.{{Build.Module}}' Name: '{{Items.CurrentTable.ConvertedName}}' Extension: '.cs' NamingConverter: @@ -93,7 +93,7 @@ Build: IgnoreNoPKTable: true IgnoreView: true Output: - Path: '{{Project.Module}}.{{Build.Module}}' + Path: 'src/{{Project.Module}}.{{Build.Module}}' Name: 'I{{Items.CurrentTable.ConvertedName}}Repository' Extension: .cs NamingConverter: @@ -114,7 +114,7 @@ Build: IgnoreNoPKTable: true IgnoreView: true Output: - Path: '{{Project.Module}}.{{Build.Module}}' + Path: 'src/{{Project.Module}}.{{Build.Module}}' Name: '{{Items.CurrentTable.ConvertedName}}Service' Extension: .cs NamingConverter: @@ -135,7 +135,7 @@ Build: IgnoreNoPKTable: true IgnoreView: true Output: - Path: '{{Project.Module}}.{{Build.Module}}/Controllers' + Path: 'src/{{Project.Module}}.{{Build.Module}}/Controllers' Name: '{{Items.CurrentTable.ConvertedName}}Controller' Extension: .cs NamingConverter: @@ -153,7 +153,7 @@ Build: TemplateEngine: Path: SqlMap.cshtml Output: - Path: '{{Project.Module}}.Repository/Maps' + Path: 'src/{{Project.Module}}.Repository/Maps' Name: '{{Items.CurrentTable.ConvertedName}}' Extension: .xml IgnoreNoPKTable: true diff --git a/src/SmartCode.App/Outputs/FileOutput.cs b/src/SmartCode.App/Outputs/FileOutput.cs index 957ae1a..bf70b0e 100644 --- a/src/SmartCode.App/Outputs/FileOutput.cs +++ b/src/SmartCode.App/Outputs/FileOutput.cs @@ -35,7 +35,7 @@ public async Task Output(BuildContext context) { var output = context.Output; _logger.LogInformation($"------ Mode:{output.Mode},Build:{context.BuildKey} Start! ------"); - + var outputPath = Handlebars.Compile(output.Path)(context); outputPath = Path.Combine(context.Project.OutputPath, outputPath); if (!Directory.Exists(outputPath)) @@ -50,6 +50,7 @@ public async Task Output(BuildContext context) { switch (output.Mode) { + case Configuration.CreateMode.None: case Configuration.CreateMode.Incre: { _logger.LogWarning($"------ Mode:{output.Mode},Build:{context.BuildKey},FilePath:{filePath} Exists ignore output End! ------"); @@ -69,7 +70,5 @@ public async Task Output(BuildContext context) } _logger.LogInformation($"------ Mode:{output.Mode},Build:{context.BuildKey} -> {filePath} End! ------"); } - - } } diff --git a/src/SmartCode.CLI/SmartCode.CLI.csproj b/src/SmartCode.CLI/SmartCode.CLI.csproj index 3e9a164..8212430 100644 --- a/src/SmartCode.CLI/SmartCode.CLI.csproj +++ b/src/SmartCode.CLI/SmartCode.CLI.csproj @@ -10,9 +10,7 @@ SmartCode.CLI Ahoo Wang - 1. update SmartSql version - 2. refactor Maps directory structure - 3. Ignore DbProvider name case + 1. change sln directory structure diff --git a/src/SmartCode.Generator/RazorTemplates/CSharp/Sln.cshtml b/src/SmartCode.Generator/RazorTemplates/CSharp/Sln.cshtml index 376afea..a745d1b 100644 --- a/src/SmartCode.Generator/RazorTemplates/CSharp/Sln.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/CSharp/Sln.cshtml @@ -8,13 +8,13 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 15 VisualStudioVersion = 15.0.27428.2037 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "@(project.Module).Entity", "@(project.Module).Entity\@(project.Module).Entity.csproj", "{88A185DB-0242-4843-9284-334850FF611C}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "@(project.Module).Entity", "src\@(project.Module).Entity\@(project.Module).Entity.csproj", "{88A185DB-0242-4843-9284-334850FF611C}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "@(project.Module).Repository", "@(project.Module).Repository\@(project.Module).Repository.csproj", "{6A7E8C9E-6A9F-49FD-AD48-F297E515EB10}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "@(project.Module).Repository", "src\@(project.Module).Repository\@(project.Module).Repository.csproj", "{6A7E8C9E-6A9F-49FD-AD48-F297E515EB10}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "@(project.Module).Service", "@(project.Module).Service\@(project.Module).Service.csproj", "{D274EF03-E956-40EF-B874-58A5FBE83A00}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "@(project.Module).Service", "src\@(project.Module).Service\@(project.Module).Service.csproj", "{D274EF03-E956-40EF-B874-58A5FBE83A00}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "@(project.Module).API", "@(project.Module).API\@(project.Module).API.csproj", "{CEA52B07-9E7F-4A4D-AF6D-4C43E7255D0E}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "@(project.Module).API", "src\@(project.Module).API\@(project.Module).API.csproj", "{CEA52B07-9E7F-4A4D-AF6D-4C43E7255D0E}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "API", "API", "{20C12BB6-7202-46F4-9A92-3528FFC2B91B}" EndProject From f0c2cd07b57bbb2c7f6f046f6c7825b33465e21f Mon Sep 17 00:00:00 2001 From: Ahoo Wang Date: Thu, 11 Apr 2019 19:27:05 +0800 Subject: [PATCH 024/127] update README.md --- README-EN.md | 6 +++--- README.md | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/README-EN.md b/README-EN.md index 4357ed0..9ef6d7c 100644 --- a/README-EN.md +++ b/README-EN.md @@ -240,11 +240,11 @@ Build: | Output | Output | | Build | Task Build | -#### DataSource Data Source, Name: Db +#### DataSource Data Source, Name: DbTable -> Property Name: Db, using the DbSource plugin as a data source +> Property Name: DbTable, using the DbTableSource plugin as a data source -DbSource.Paramters accepts the following three parameters: +DbTableSource.Paramters accepts the following three parameters: | Parameter Name | Description | | :--------- | --------:| diff --git a/README.md b/README.md index 67c7ed1..45afb27 100644 --- a/README.md +++ b/README.md @@ -240,11 +240,11 @@ Build: | Output | 输出 | | Build | 任务构建s | -#### DataSource 数据源,Name:Db +#### DataSource 数据源,Name:DbTable -> 属性 Name:Db,使用DbSource插件作为数据源 +> 属性 Name:DbTable,使用 DbTableSource 插件作为数据源 -DbSource.Paramters 接受以下三个参数: +DbTableSource.Paramters 接受以下三个参数: | 参数名 | 说明 | | :--------- | --------:| From 5a1e2256ca3cb5353300ce3d8a3c54dc7a786700 Mon Sep 17 00:00:00 2001 From: Ahoo Wang Date: Tue, 16 Apr 2019 11:42:06 +0800 Subject: [PATCH 025/127] 1. update SmartSql-version 2. optimize template --- README-EN.md | 81 ++++++++++++------- README.md | 81 ++++++++++++------- SmartCode.sln | 22 +++++ build/version.props | 2 +- doc/SmartCode.yml | 24 +++++- .../BuildTasks/ProcessBuildTask.cs | 34 ++++++-- src/SmartCode.CLI/SmartCode.CLI.csproj | 3 +- .../RazorTemplates/CSharp/Proj-API.cshtml | 2 +- .../CSharp/Proj-Repository.cshtml | 8 +- 9 files changed, 180 insertions(+), 77 deletions(-) diff --git a/README-EN.md b/README-EN.md index 9ef6d7c..e9f174f 100644 --- a/README-EN.md +++ b/README-EN.md @@ -47,24 +47,37 @@ Author: Ahoo Wang DataSource: Name: DbTable Paramters: - DbName: SmartSqlDB + DbName: SmartSqlTestDB DbProvider: SqlServer - ConnectionString: Data Source=.;Initial Catalog=SmartSqlDB;Integrated Security=True + ConnectionString: Data Source=.;Initial Catalog=SmartSqlTestDB;Integrated Security=True Language: CSharp TemplateEngine: Name: Razor Root: CSharp Output: Type: File - Path: 'E://SmartSql-Starter' + Path: 'E:\SmartSql-Starter' +Paramters: + DocDir: 'E:\SmartSql-Starter\doc' # 构建任务 Build: - ClearDir: - Type: Clear +# ClearDir: +# Type: Clear +# Paramters: +# Dirs: '.' + + MakeDic-Doc: + Type: Process Paramters: - Dirs: '.' + FileName: powershell + Args: mkdir '{{Project.Paramters.DocDir}}' + Copy: + Type: Process + Paramters: + FileName: powershell + Args: cp '{{Project.ConfigPath}}' '{{Project.Paramters.DocDir}}' Scaffolding: Type: MultiTemplate @@ -72,25 +85,26 @@ Build: Path: '.' Paramters: Templates: [{Key: 'Sln.cshtml',Output: {Name: '{{Project.Module}}',Extension: '.sln'}}, - {Key: "Proj-Entity.cshtml",Output: {Path: '{{Project.Module}}.Entity',Name: '{{Project.Module}}.Entity',Extension: '.csproj'}}, - {Key: "Proj-Repository.cshtml",Output: {Path: '{{Project.Module}}.Repository',Name: '{{Project.Module}}.Repository',Extension: '.csproj'}}, - {Key: "Proj-Service.cshtml",Output: {Path: '{{Project.Module}}.Service',Name: '{{Project.Module}}.Service',Extension: '.csproj'}}, - {Key: "Proj-API.cshtml",Output: {Path: '{{Project.Module}}.API',Name: '{{Project.Module}}.API',Extension: '.csproj'}}, - {Key: "API/LaunchSettings.cshtml",Output: {Path: '{{Project.Module}}.API/Properties',Name: 'launchSettings',Extension: '.json'}}, - {Key: "API/AppSettings.cshtml",Output: {Path: '{{Project.Module}}.API',Name: 'appsettings',Extension: '.json'}}, - {Key: "API/AppSettings-Development.cshtml",Output: {Path: '{{Project.Module}}.API',Name: 'appsettings.Development',Extension: '.json'}}, - {Key: "API/Program.cshtml",Output: {Path: '{{Project.Module}}.API',Name: 'Program',Extension: '.cs'}}, - {Key: "API/Startup.cshtml",Output: {Path: '{{Project.Module}}.API',Name: 'Startup',Extension: '.cs'}}, - {Key: "API/APIException.cshtml",Output: {Path: '{{Project.Module}}.API/Exceptions',Name: 'APIException',Extension: '.cs'}}, - {Key: "API/GlobalExceptionFilter.cshtml",Output: {Path: '{{Project.Module}}.API/Filters',Name: 'GlobalExceptionFilter',Extension: '.cs'}}, - {Key: "API/GlobalValidateModelFilter.cshtml",Output: {Path: '{{Project.Module}}.API/Filters',Name: 'GlobalValidateModelFilter',Extension: '.cs'}}, - {Key: "API/QueryRequest.cshtml",Output: {Path: '{{Project.Module}}.API/Messages',Name: 'QueryRequest',Extension: '.cs'}}, - {Key: "API/QueryByPageRequest.cshtml",Output: {Path: '{{Project.Module}}.API/Messages',Name: 'QueryByPageRequest',Extension: '.cs'}}, - {Key: "API/ResponseMessage.cshtml",Output: {Path: '{{Project.Module}}.API/Messages',Name: 'ResponseMessage',Extension: '.cs'}}, - {Key: "API/QueryResponse.cshtml",Output: {Path: '{{Project.Module}}.API/Messages',Name: 'QueryResponse',Extension: '.cs'}}, - {Key: "API/QueryByPageResponse.cshtml",Output: {Path: '{{Project.Module}}.API/Messages',Name: 'QueryByPageResponse',Extension: '.cs'}}, - {Key: "API/ResponseMessage.cshtml",Output: {Path: '{{Project.Module}}.API/Messages',Name: 'ResponseMessage',Extension: '.cs'}}, - {Key: "SqlMapConfig.cshtml",Output: {Path: '{{Project.Module}}.API',Name: 'SmartSqlMapConfig',Extension: '.xml'}} + {Key: "Proj-Entity.cshtml",Output: {Path: 'src/{{Project.Module}}.Entity',Name: '{{Project.Module}}.Entity',Extension: '.csproj'}}, + {Key: "Proj-Repository.cshtml",Output: {Path: 'src/{{Project.Module}}.Repository',Name: '{{Project.Module}}.Repository',Extension: '.csproj'}}, + {Key: "Proj-Service.cshtml",Output: {Path: 'src/{{Project.Module}}.Service',Name: '{{Project.Module}}.Service',Extension: '.csproj'}}, + {Key: "Proj-API.cshtml",Output: {Path: 'src/{{Project.Module}}.API',Name: '{{Project.Module}}.API',Extension: '.csproj'}}, + {Key: "API/LaunchSettings.cshtml",Output: {Path: 'src/{{Project.Module}}.API/Properties',Name: 'launchSettings',Extension: '.json'}}, + {Key: "API/AppSettings.cshtml",Output: {Path: 'src/{{Project.Module}}.API',Name: 'appsettings',Extension: '.json'}}, + {Key: "API/AppSettings-Development.cshtml",Output: {Path: 'src/{{Project.Module}}.API',Name: 'appsettings.Development',Extension: '.json'}}, + {Key: "API/Program.cshtml",Output: {Path: 'src/{{Project.Module}}.API',Name: 'Program',Extension: '.cs'}}, + {Key: "API/Startup.cshtml",Output: {Path: 'src/{{Project.Module}}.API',Name: 'Startup',Extension: '.cs'}}, + {Key: "API/APIException.cshtml",Output: {Path: 'src/{{Project.Module}}.API/Exceptions',Name: 'APIException',Extension: '.cs'}}, + {Key: "API/GlobalExceptionFilter.cshtml",Output: {Path: 'src/{{Project.Module}}.API/Filters',Name: 'GlobalExceptionFilter',Extension: '.cs'}}, + {Key: "API/GlobalValidateModelFilter.cshtml",Output: {Path: 'src/{{Project.Module}}.API/Filters',Name: 'GlobalValidateModelFilter',Extension: '.cs'}}, + {Key: "API/QueryRequest.cshtml",Output: {Path: 'src/{{Project.Module}}.API/Messages',Name: 'QueryRequest',Extension: '.cs'}}, + {Key: "API/QueryByPageRequest.cshtml",Output: {Path: 'src/{{Project.Module}}.API/Messages',Name: 'QueryByPageRequest',Extension: '.cs'}}, + {Key: "API/ResponseMessage.cshtml",Output: {Path: 'src/{{Project.Module}}.API/Messages',Name: 'ResponseMessage',Extension: '.cs'}}, + {Key: "API/QueryResponse.cshtml",Output: {Path: 'src/{{Project.Module}}.API/Messages',Name: 'QueryResponse',Extension: '.cs'}}, + {Key: "API/QueryByPageResponse.cshtml",Output: {Path: 'src/{{Project.Module}}.API/Messages',Name: 'QueryByPageResponse',Extension: '.cs'}}, + {Key: "API/ResponseMessage.cshtml",Output: {Path: 'src/{{Project.Module}}.API/Messages',Name: 'ResponseMessage',Extension: '.cs'}}, + {Key: "SqlMapConfig.cshtml",Output: {Path: 'src/{{Project.Module}}.Repository',Name: 'SmartSqlMapConfig',Extension: '.xml'}}, + {Key: "SqlMapConfig.cshtml",Output: {Path: 'src/{{Project.Module}}.Repository',Name: 'SmartSqlMapConfig.Development',Extension: '.xml'}} ] Entity: @@ -99,7 +113,7 @@ Build: TemplateEngine: Path: Entity.cshtml Output: - Path: '{{Project.Module}}.{{Build.Module}}' + Path: 'src/{{Project.Module}}.{{Build.Module}}' Name: '{{Items.CurrentTable.ConvertedName}}' Extension: '.cs' NamingConverter: @@ -136,7 +150,7 @@ Build: IgnoreNoPKTable: true IgnoreView: true Output: - Path: '{{Project.Module}}.{{Build.Module}}' + Path: 'src/{{Project.Module}}.{{Build.Module}}' Name: 'I{{Items.CurrentTable.ConvertedName}}Repository' Extension: .cs NamingConverter: @@ -157,7 +171,7 @@ Build: IgnoreNoPKTable: true IgnoreView: true Output: - Path: '{{Project.Module}}.{{Build.Module}}' + Path: 'src/{{Project.Module}}.{{Build.Module}}' Name: '{{Items.CurrentTable.ConvertedName}}Service' Extension: .cs NamingConverter: @@ -178,7 +192,7 @@ Build: IgnoreNoPKTable: true IgnoreView: true Output: - Path: '{{Project.Module}}.{{Build.Module}}/Controllers' + Path: 'src/{{Project.Module}}.{{Build.Module}}/Controllers' Name: '{{Items.CurrentTable.ConvertedName}}Controller' Extension: .cs NamingConverter: @@ -196,7 +210,7 @@ Build: TemplateEngine: Path: SqlMap.cshtml Output: - Path: '{{Project.Module}}.API/Maps' + Path: 'src/{{Project.Module}}.Repository/Maps' Name: '{{Items.CurrentTable.ConvertedName}}' Extension: .xml IgnoreNoPKTable: true @@ -226,6 +240,13 @@ Build: Delimiter: '_' Converter: Type: Pascal + + ReStore: + Type: Process + Paramters: + FileName: powershell + WorkingDirectory: '{{Project.Output.Path}}' + Args: dotnet restore ``` ### Build file parameter overview diff --git a/README.md b/README.md index 45afb27..cd31c3c 100644 --- a/README.md +++ b/README.md @@ -47,24 +47,37 @@ Author: Ahoo Wang DataSource: Name: DbTable Paramters: - DbName: SmartSqlDB + DbName: SmartSqlTestDB DbProvider: SqlServer - ConnectionString: Data Source=.;Initial Catalog=SmartSqlDB;Integrated Security=True + ConnectionString: Data Source=.;Initial Catalog=SmartSqlTestDB;Integrated Security=True Language: CSharp TemplateEngine: Name: Razor Root: CSharp Output: Type: File - Path: 'E://SmartSql-Starter' + Path: 'E:\SmartSql-Starter' +Paramters: + DocDir: 'E:\SmartSql-Starter\doc' # 构建任务 Build: - ClearDir: - Type: Clear +# ClearDir: +# Type: Clear +# Paramters: +# Dirs: '.' + + MakeDic-Doc: + Type: Process Paramters: - Dirs: '.' + FileName: powershell + Args: mkdir '{{Project.Paramters.DocDir}}' + Copy: + Type: Process + Paramters: + FileName: powershell + Args: cp '{{Project.ConfigPath}}' '{{Project.Paramters.DocDir}}' Scaffolding: Type: MultiTemplate @@ -72,25 +85,26 @@ Build: Path: '.' Paramters: Templates: [{Key: 'Sln.cshtml',Output: {Name: '{{Project.Module}}',Extension: '.sln'}}, - {Key: "Proj-Entity.cshtml",Output: {Path: '{{Project.Module}}.Entity',Name: '{{Project.Module}}.Entity',Extension: '.csproj'}}, - {Key: "Proj-Repository.cshtml",Output: {Path: '{{Project.Module}}.Repository',Name: '{{Project.Module}}.Repository',Extension: '.csproj'}}, - {Key: "Proj-Service.cshtml",Output: {Path: '{{Project.Module}}.Service',Name: '{{Project.Module}}.Service',Extension: '.csproj'}}, - {Key: "Proj-API.cshtml",Output: {Path: '{{Project.Module}}.API',Name: '{{Project.Module}}.API',Extension: '.csproj'}}, - {Key: "API/LaunchSettings.cshtml",Output: {Path: '{{Project.Module}}.API/Properties',Name: 'launchSettings',Extension: '.json'}}, - {Key: "API/AppSettings.cshtml",Output: {Path: '{{Project.Module}}.API',Name: 'appsettings',Extension: '.json'}}, - {Key: "API/AppSettings-Development.cshtml",Output: {Path: '{{Project.Module}}.API',Name: 'appsettings.Development',Extension: '.json'}}, - {Key: "API/Program.cshtml",Output: {Path: '{{Project.Module}}.API',Name: 'Program',Extension: '.cs'}}, - {Key: "API/Startup.cshtml",Output: {Path: '{{Project.Module}}.API',Name: 'Startup',Extension: '.cs'}}, - {Key: "API/APIException.cshtml",Output: {Path: '{{Project.Module}}.API/Exceptions',Name: 'APIException',Extension: '.cs'}}, - {Key: "API/GlobalExceptionFilter.cshtml",Output: {Path: '{{Project.Module}}.API/Filters',Name: 'GlobalExceptionFilter',Extension: '.cs'}}, - {Key: "API/GlobalValidateModelFilter.cshtml",Output: {Path: '{{Project.Module}}.API/Filters',Name: 'GlobalValidateModelFilter',Extension: '.cs'}}, - {Key: "API/QueryRequest.cshtml",Output: {Path: '{{Project.Module}}.API/Messages',Name: 'QueryRequest',Extension: '.cs'}}, - {Key: "API/QueryByPageRequest.cshtml",Output: {Path: '{{Project.Module}}.API/Messages',Name: 'QueryByPageRequest',Extension: '.cs'}}, - {Key: "API/ResponseMessage.cshtml",Output: {Path: '{{Project.Module}}.API/Messages',Name: 'ResponseMessage',Extension: '.cs'}}, - {Key: "API/QueryResponse.cshtml",Output: {Path: '{{Project.Module}}.API/Messages',Name: 'QueryResponse',Extension: '.cs'}}, - {Key: "API/QueryByPageResponse.cshtml",Output: {Path: '{{Project.Module}}.API/Messages',Name: 'QueryByPageResponse',Extension: '.cs'}}, - {Key: "API/ResponseMessage.cshtml",Output: {Path: '{{Project.Module}}.API/Messages',Name: 'ResponseMessage',Extension: '.cs'}}, - {Key: "SqlMapConfig.cshtml",Output: {Path: '{{Project.Module}}.API',Name: 'SmartSqlMapConfig',Extension: '.xml'}} + {Key: "Proj-Entity.cshtml",Output: {Path: 'src/{{Project.Module}}.Entity',Name: '{{Project.Module}}.Entity',Extension: '.csproj'}}, + {Key: "Proj-Repository.cshtml",Output: {Path: 'src/{{Project.Module}}.Repository',Name: '{{Project.Module}}.Repository',Extension: '.csproj'}}, + {Key: "Proj-Service.cshtml",Output: {Path: 'src/{{Project.Module}}.Service',Name: '{{Project.Module}}.Service',Extension: '.csproj'}}, + {Key: "Proj-API.cshtml",Output: {Path: 'src/{{Project.Module}}.API',Name: '{{Project.Module}}.API',Extension: '.csproj'}}, + {Key: "API/LaunchSettings.cshtml",Output: {Path: 'src/{{Project.Module}}.API/Properties',Name: 'launchSettings',Extension: '.json'}}, + {Key: "API/AppSettings.cshtml",Output: {Path: 'src/{{Project.Module}}.API',Name: 'appsettings',Extension: '.json'}}, + {Key: "API/AppSettings-Development.cshtml",Output: {Path: 'src/{{Project.Module}}.API',Name: 'appsettings.Development',Extension: '.json'}}, + {Key: "API/Program.cshtml",Output: {Path: 'src/{{Project.Module}}.API',Name: 'Program',Extension: '.cs'}}, + {Key: "API/Startup.cshtml",Output: {Path: 'src/{{Project.Module}}.API',Name: 'Startup',Extension: '.cs'}}, + {Key: "API/APIException.cshtml",Output: {Path: 'src/{{Project.Module}}.API/Exceptions',Name: 'APIException',Extension: '.cs'}}, + {Key: "API/GlobalExceptionFilter.cshtml",Output: {Path: 'src/{{Project.Module}}.API/Filters',Name: 'GlobalExceptionFilter',Extension: '.cs'}}, + {Key: "API/GlobalValidateModelFilter.cshtml",Output: {Path: 'src/{{Project.Module}}.API/Filters',Name: 'GlobalValidateModelFilter',Extension: '.cs'}}, + {Key: "API/QueryRequest.cshtml",Output: {Path: 'src/{{Project.Module}}.API/Messages',Name: 'QueryRequest',Extension: '.cs'}}, + {Key: "API/QueryByPageRequest.cshtml",Output: {Path: 'src/{{Project.Module}}.API/Messages',Name: 'QueryByPageRequest',Extension: '.cs'}}, + {Key: "API/ResponseMessage.cshtml",Output: {Path: 'src/{{Project.Module}}.API/Messages',Name: 'ResponseMessage',Extension: '.cs'}}, + {Key: "API/QueryResponse.cshtml",Output: {Path: 'src/{{Project.Module}}.API/Messages',Name: 'QueryResponse',Extension: '.cs'}}, + {Key: "API/QueryByPageResponse.cshtml",Output: {Path: 'src/{{Project.Module}}.API/Messages',Name: 'QueryByPageResponse',Extension: '.cs'}}, + {Key: "API/ResponseMessage.cshtml",Output: {Path: 'src/{{Project.Module}}.API/Messages',Name: 'ResponseMessage',Extension: '.cs'}}, + {Key: "SqlMapConfig.cshtml",Output: {Path: 'src/{{Project.Module}}.Repository',Name: 'SmartSqlMapConfig',Extension: '.xml'}}, + {Key: "SqlMapConfig.cshtml",Output: {Path: 'src/{{Project.Module}}.Repository',Name: 'SmartSqlMapConfig.Development',Extension: '.xml'}} ] Entity: @@ -99,7 +113,7 @@ Build: TemplateEngine: Path: Entity.cshtml Output: - Path: '{{Project.Module}}.{{Build.Module}}' + Path: 'src/{{Project.Module}}.{{Build.Module}}' Name: '{{Items.CurrentTable.ConvertedName}}' Extension: '.cs' NamingConverter: @@ -136,7 +150,7 @@ Build: IgnoreNoPKTable: true IgnoreView: true Output: - Path: '{{Project.Module}}.{{Build.Module}}' + Path: 'src/{{Project.Module}}.{{Build.Module}}' Name: 'I{{Items.CurrentTable.ConvertedName}}Repository' Extension: .cs NamingConverter: @@ -157,7 +171,7 @@ Build: IgnoreNoPKTable: true IgnoreView: true Output: - Path: '{{Project.Module}}.{{Build.Module}}' + Path: 'src/{{Project.Module}}.{{Build.Module}}' Name: '{{Items.CurrentTable.ConvertedName}}Service' Extension: .cs NamingConverter: @@ -178,7 +192,7 @@ Build: IgnoreNoPKTable: true IgnoreView: true Output: - Path: '{{Project.Module}}.{{Build.Module}}/Controllers' + Path: 'src/{{Project.Module}}.{{Build.Module}}/Controllers' Name: '{{Items.CurrentTable.ConvertedName}}Controller' Extension: .cs NamingConverter: @@ -196,7 +210,7 @@ Build: TemplateEngine: Path: SqlMap.cshtml Output: - Path: '{{Project.Module}}.API/Maps' + Path: 'src/{{Project.Module}}.Repository/Maps' Name: '{{Items.CurrentTable.ConvertedName}}' Extension: .xml IgnoreNoPKTable: true @@ -226,6 +240,13 @@ Build: Delimiter: '_' Converter: Type: Pascal + + ReStore: + Type: Process + Paramters: + FileName: powershell + WorkingDirectory: '{{Project.Output.Path}}' + Args: dotnet restore ``` ### 构建文件参数概览 diff --git a/SmartCode.sln b/SmartCode.sln index 5120ba6..cacd50e 100644 --- a/SmartCode.sln +++ b/SmartCode.sln @@ -35,6 +35,27 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Build", "Build", "{B0F696A9 build\version.props = build\version.props EndProjectSection EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{55E0A4D0-F749-4C33-837C-30F881AA293F}" + ProjectSection(SolutionItems) = preProject + Directory.Build.props = Directory.Build.props + LICENSE = LICENSE + README-EN.md = README-EN.md + README.md = README.md + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "doc", "doc", "{B3766EC2-4AD1-4610-B141-5C8D267BF70A}" + ProjectSection(SolutionItems) = preProject + doc\common-problem.md = doc\common-problem.md + doc\SmartCode-ETL-ES.yml = doc\SmartCode-ETL-ES.yml + doc\SmartCode-ETL.yml = doc\SmartCode-ETL.yml + doc\SmartCode-Gen-ETL.yml = doc\SmartCode-Gen-ETL.yml + doc\SmartCode-Spring-Boot.yml = doc\SmartCode-Spring-Boot.yml + doc\SmartCode.ETL-EN.md = doc\SmartCode.ETL-EN.md + doc\SmartCode.ETL.md = doc\SmartCode.ETL.md + doc\SmartCode.json = doc\SmartCode.json + doc\SmartCode.yml = doc\SmartCode.yml + EndProjectSection +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -95,6 +116,7 @@ Global {60B49703-2352-477B-8F18-98CC229EEFDA} = {EE2194B6-5B23-42C0-AF6A-EC86331E3E08} {BB00F470-7D25-4F82-A410-1DB8BD458A5E} = {EE2194B6-5B23-42C0-AF6A-EC86331E3E08} {DADD6996-91C4-496D-AE97-D8EA5E33716A} = {EE2194B6-5B23-42C0-AF6A-EC86331E3E08} + {B3766EC2-4AD1-4610-B141-5C8D267BF70A} = {55E0A4D0-F749-4C33-837C-30F881AA293F} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {9A45CDB0-E532-4F55-84C6-B82C98BE5F38} diff --git a/build/version.props b/build/version.props index 2a24afb..7d92bfb 100644 --- a/build/version.props +++ b/build/version.props @@ -2,7 +2,7 @@ 2 1 - 9 + 10 $(VersionMajor).$(VersionMinor).$(VersionPatch) diff --git a/doc/SmartCode.yml b/doc/SmartCode.yml index 5b72d65..db3630f 100644 --- a/doc/SmartCode.yml +++ b/doc/SmartCode.yml @@ -12,7 +12,9 @@ TemplateEngine: Root: CSharp Output: Type: File - Path: 'E://SmartSql-Starter' + Path: 'E:\SmartSql-Starter' +Paramters: + DocDir: 'E:\SmartSql-Starter\doc' # 构建任务 Build: @@ -22,6 +24,17 @@ Build: # Paramters: # Dirs: '.' + MakeDic-Doc: + Type: Process + Paramters: + FileName: powershell + Args: mkdir '{{Project.Paramters.DocDir}}' + Copy: + Type: Process + Paramters: + FileName: powershell + Args: cp '{{Project.ConfigPath}}' '{{Project.Paramters.DocDir}}' + Scaffolding: Type: MultiTemplate Output: @@ -182,4 +195,11 @@ Build: IgnorePrefix: 'T_' Delimiter: '_' Converter: - Type: Pascal \ No newline at end of file + Type: Pascal + + ReStore: + Type: Process + Paramters: + FileName: powershell + WorkingDirectory: '{{Project.Output.Path}}' + Args: dotnet restore \ No newline at end of file diff --git a/src/SmartCode.App/BuildTasks/ProcessBuildTask.cs b/src/SmartCode.App/BuildTasks/ProcessBuildTask.cs index ff8cf96..2650c93 100644 --- a/src/SmartCode.App/BuildTasks/ProcessBuildTask.cs +++ b/src/SmartCode.App/BuildTasks/ProcessBuildTask.cs @@ -4,6 +4,7 @@ using System.Diagnostics; using System.Text; using System.Threading.Tasks; +using HandlebarsDotNet; namespace SmartCode.App.BuildTasks { @@ -25,24 +26,27 @@ public ProcessBuildTask(ILogger logger) _logger = logger; } - public Task Build(BuildContext context) + public async Task Build(BuildContext context) { if (!context.Build.Paramters.Value(FILE_NAME, out string fileName)) { - throw new SmartCodeException($"Build:{context.BuildKey},Can not find Paramter:{FILE_NAME}!"); + throw new SmartCodeException($"Build:{context.BuildKey},Can not find Parameter:{FILE_NAME}!"); } if (!context.Build.Paramters.Value(ARGS, out string args)) { - throw new SmartCodeException($"Build:{context.BuildKey},Can not find Paramter:{ARGS}!"); + throw new SmartCodeException($"Build:{context.BuildKey},Can not find Parameter:{ARGS}!"); } var process = new Process(); var startInfo = process.StartInfo; + startInfo.UseShellExecute = false; + startInfo.RedirectStandardOutput = true; + startInfo.RedirectStandardError = true; startInfo.CreateNoWindow = DEFAULT_CREATE_NO_WINDOW; startInfo.FileName = fileName; - startInfo.Arguments = args; + startInfo.Arguments = Handlebars.Compile(args)(context); if (context.Build.Paramters.Value(WORKING_DIRECTORY, out string workingDic)) { - startInfo.WorkingDirectory = workingDic; + startInfo.WorkingDirectory = Handlebars.Compile(workingDic)(context); } if (context.Build.Paramters.Value(CREATE_NO_WINDOW, out bool createNoWin)) { @@ -60,13 +64,27 @@ public Task Build(BuildContext context) timeOut = _timeout; } process.WaitForExit(timeOut); - _logger.LogDebug($"--------Process.FileName:{startInfo.FileName},Args:{startInfo.Arguments} End--------"); + + var standardOutput = await process.StandardOutput.ReadToEndAsync(); + if (!String.IsNullOrEmpty(standardOutput)) + { + _logger.LogDebug("StandardOutput start"); + _logger.LogDebug(standardOutput); + _logger.LogDebug("StandardOutput end"); + } + var standardError = await process.StandardError.ReadToEndAsync(); + if (!String.IsNullOrEmpty(standardError)) + { + _logger.LogDebug("StandardError start"); + _logger.LogDebug(standardError); + _logger.LogDebug("StandardError end"); + } + _logger.LogDebug($"--------Process.FileName:{startInfo.FileName},Args:{startInfo.Arguments},Taken:{process.TotalProcessorTime.TotalMilliseconds} End--------"); } finally { process.Dispose(); } - return Task.CompletedTask; } private void Process_OutputDataReceived(object sender, DataReceivedEventArgs e) @@ -79,7 +97,7 @@ private void Process_ErrorDataReceived(object sender, DataReceivedEventArgs e) _logger.LogDebug(e.Data); } - public void Initialize(IDictionary paramters) + public void Initialize(IDictionary parameters) { } diff --git a/src/SmartCode.CLI/SmartCode.CLI.csproj b/src/SmartCode.CLI/SmartCode.CLI.csproj index 8212430..571a499 100644 --- a/src/SmartCode.CLI/SmartCode.CLI.csproj +++ b/src/SmartCode.CLI/SmartCode.CLI.csproj @@ -10,7 +10,8 @@ SmartCode.CLI Ahoo Wang - 1. change sln directory structure + 1. update SmartSql-version + 2. optimize template diff --git a/src/SmartCode.Generator/RazorTemplates/CSharp/Proj-API.cshtml b/src/SmartCode.Generator/RazorTemplates/CSharp/Proj-API.cshtml index f9da7b5..e287f2a 100644 --- a/src/SmartCode.Generator/RazorTemplates/CSharp/Proj-API.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/CSharp/Proj-API.cshtml @@ -9,7 +9,7 @@ - + diff --git a/src/SmartCode.Generator/RazorTemplates/CSharp/Proj-Repository.cshtml b/src/SmartCode.Generator/RazorTemplates/CSharp/Proj-Repository.cshtml index 688e75c..a57a7b5 100644 --- a/src/SmartCode.Generator/RazorTemplates/CSharp/Proj-Repository.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/CSharp/Proj-Repository.cshtml @@ -21,15 +21,15 @@ } @if (dbSource.DbRepository.DbProvider == DbProvider.PostgreSql) { - + } else { - + } - - + + From 0ed84ae5e3a4fad44b243f1069c62d7a294606c7 Mon Sep 17 00:00:00 2001 From: Ahoo Wang Date: Wed, 17 Apr 2019 01:06:15 +0800 Subject: [PATCH 026/127] 1. refactor ProcessBuildTask 2. change Paramters -> Parameters (Broken change) --- README-EN.md | 63 ++++-- README.md | 63 ++++-- build/version.props | 4 +- doc/SmartCode-ETL-ES.yml | 8 +- doc/SmartCode-ETL.yml | 8 +- doc/SmartCode-Gen-ETL.yml | 22 +-- doc/SmartCode-Spring-Boot.yml | 12 +- doc/SmartCode.ETL-EN.md | 18 +- doc/SmartCode.ETL.md | 18 +- doc/SmartCode.json | 180 +++++++++--------- doc/SmartCode.yml | 65 +++++-- .../BuildTasks/AbstractBuildTask.cs | 2 +- .../BuildTasks/ClearBuildTask.cs | 10 +- .../BuildTasks/MultiTemplateBuildTask.cs | 4 +- .../BuildTasks/ProcessBuildTask.cs | 106 ++++++----- src/SmartCode.App/Outputs/FileOutput.cs | 6 +- src/SmartCode.App/PluginManager.cs | 2 +- src/SmartCode.App/SmartCodeApp.cs | 6 +- .../DefaultSmartCodeAppBuilder.cs | 2 +- src/SmartCode.CLI/Program.cs | 1 + src/SmartCode.CLI/SmartCode.CLI.csproj | 4 +- src/SmartCode.CLI/appsettings.json | 4 +- src/SmartCode.Db/DbRepository.cs | 12 +- src/SmartCode.Db/DbSource.cs | 16 +- .../LoadToESBuildTask.cs | 16 +- src/SmartCode.ETL/BuildTasks/LoadBuildTask.cs | 20 +- .../BuildTasks/TransformBuildTask.cs | 2 +- src/SmartCode.ETL/Entity/ETLDbCommand.cs | 2 +- src/SmartCode.ETL/Entity/ETLLoad.cs | 2 +- src/SmartCode.ETL/Entity/Monitor.cs | 2 +- src/SmartCode.ETL/ExtractDataSource.cs | 18 +- src/SmartCode.ETL/NoneETLTaskRepository.cs | 2 +- src/SmartCode.ETL/ProjectExtensions.cs | 20 +- .../TransformEngine/RazorTransformEngine.cs | 10 +- .../BuildTasks/AbstractDbBuildTask.cs | 6 +- .../BuildTasks/SingleBuildTask.cs | 2 +- .../BuildTasks/TableBuildTask.cs | 4 +- .../DbTypeConverter/DefaultDbTypeConverter.cs | 6 +- .../RazorTemplates/ETL/ToPGBuild.cshtml | 24 +-- .../Impl/HandlebarsTemplateEngine.cs | 8 +- .../Impl/OfficialRazorTemplateEngine.cs | 8 +- src/SmartCode/AbstractPlugin.cs | 6 +- src/SmartCode/BuildContext.cs | 2 +- src/SmartCode/Configuration/Build.cs | 2 +- .../ConfigBuilders/ConfigBuilder.cs | 2 +- src/SmartCode/Configuration/DataSource.cs | 2 +- .../Configuration/NamingConverter.cs | 14 +- src/SmartCode/Configuration/Project.cs | 4 +- src/SmartCode/Configuration/TemplateEngine.cs | 2 +- src/SmartCode/IInitialize.cs | 2 +- src/SmartCode/NoneDataSource.cs | 2 +- src/SmartCode/PluginConfig.cs | 10 +- src/SmartCode/TokenizerFactory.cs | 2 +- .../Utilities/IDictionaryExtensions.cs | 2 +- .../WordsConverter/CamelCaseConverter.cs | 2 +- .../WordsConverter/DefaultTokenizer.cs | 10 +- .../WordsConverter/DelimiterConverter.cs | 10 +- src/SmartCode/WordsConverter/NoneConverter.cs | 2 +- .../WordsConverter/PascalCaseConverter.cs | 2 +- src/SmartCode/WordsConverterFactory.cs | 2 +- 60 files changed, 479 insertions(+), 389 deletions(-) diff --git a/README-EN.md b/README-EN.md index e9f174f..2b2c01f 100644 --- a/README-EN.md +++ b/README-EN.md @@ -46,7 +46,7 @@ Module: SmartSql.Starter Author: Ahoo Wang DataSource: Name: DbTable - Paramters: + Parameters: DbName: SmartSqlTestDB DbProvider: SqlServer ConnectionString: Data Source=.;Initial Catalog=SmartSqlTestDB;Integrated Security=True @@ -57,7 +57,7 @@ TemplateEngine: Output: Type: File Path: 'E:\SmartSql-Starter' -Paramters: +Parameters: DocDir: 'E:\SmartSql-Starter\doc' # 构建任务 @@ -65,25 +65,25 @@ Build: # ClearDir: # Type: Clear -# Paramters: +# Parameters: # Dirs: '.' MakeDic-Doc: Type: Process - Paramters: + Parameters: FileName: powershell - Args: mkdir '{{Project.Paramters.DocDir}}' + Args: mkdir '{{Project.Parameters.DocDir}}' Copy: Type: Process - Paramters: + Parameters: FileName: powershell - Args: cp '{{Project.ConfigPath}}' '{{Project.Paramters.DocDir}}' + Args: cp '{{Project.ConfigPath}}' '{{Project.Parameters.DocDir}}' Scaffolding: Type: MultiTemplate Output: Path: '.' - Paramters: + Parameters: Templates: [{Key: 'Sln.cshtml',Output: {Name: '{{Project.Module}}',Extension: '.sln'}}, {Key: "Proj-Entity.cshtml",Output: {Path: 'src/{{Project.Module}}.Entity',Name: '{{Project.Module}}.Entity',Extension: '.csproj'}}, {Key: "Proj-Repository.cshtml",Output: {Path: 'src/{{Project.Module}}.Repository',Name: '{{Project.Module}}.Repository',Extension: '.csproj'}}, @@ -120,16 +120,16 @@ Build: Table: Tokenizer: Type: Default - Paramters: + Parameters: IgnorePrefix: 'T_' Delimiter: '_' Converter: Type: Pascal - Paramters: { } + Parameters: { } View: Tokenizer: Type: Default - Paramters: + Parameters: IgnorePrefix: 'V_' Delimiter: '_' Converter: @@ -137,7 +137,7 @@ Build: Column: Tokenizer: Type: Default - Paramters: + Parameters: Delimiter: '_' Converter: Type: Pascal @@ -157,7 +157,7 @@ Build: Table: Tokenizer: Type: Default - Paramters: + Parameters: IgnorePrefix: 'T_' Delimiter: '_' Converter: @@ -178,7 +178,7 @@ Build: Table: Tokenizer: Type: Default - Paramters: + Parameters: IgnorePrefix: 'T_' Delimiter: '_' Converter: @@ -199,7 +199,7 @@ Build: Table: Tokenizer: Type: Default - Paramters: + Parameters: IgnorePrefix: 'T_' Delimiter: '_' Converter: @@ -219,7 +219,7 @@ Build: Table: Tokenizer: Type: Default - Paramters: + Parameters: IgnorePrefix: 'T_' Delimiter: '_' Converter: @@ -227,7 +227,7 @@ Build: View: Tokenizer: Type: Default - Paramters: + Parameters: IgnorePrefix: 'V_' Delimiter: '_' Converter: @@ -235,7 +235,7 @@ Build: Column: Tokenizer: Type: Default - Paramters: + Parameters: IgnorePrefix: 'T_' Delimiter: '_' Converter: @@ -243,10 +243,35 @@ Build: ReStore: Type: Process - Paramters: + Parameters: FileName: powershell WorkingDirectory: '{{Project.Output.Path}}' Args: dotnet restore + +# Publish: +# Type: Process +# Parameters: +# FileName: powershell +# WorkingDirectory: '{{Project.Output.Path}}' +# Args: dotnet publish -c Release -o '{{Project.Output.Path}}\publish' + +# Run: +# Type: Process +# Parameters: +# FileName: powershell +# WorkingDirectory: '{{Project.Output.Path}}\publish' +# CreateNoWindow: false +# RedirectStandardOutput: false +# RedirectStandardError: false +# WaitForExit: false +# WriteLines: ['dotnet {{Project.Module}}.API.dll'] + +# RunChrome: +# Type: Process +# Parameters: +# FileName: C:\Program Files (x86)\Google\Chrome\Application\chrome.exe +# CreateNoWindow: false +# Args: http://localhost:5000/swagger ``` ### Build file parameter overview diff --git a/README.md b/README.md index cd31c3c..46d3cd2 100644 --- a/README.md +++ b/README.md @@ -46,7 +46,7 @@ Module: SmartSql.Starter Author: Ahoo Wang DataSource: Name: DbTable - Paramters: + Parameters: DbName: SmartSqlTestDB DbProvider: SqlServer ConnectionString: Data Source=.;Initial Catalog=SmartSqlTestDB;Integrated Security=True @@ -57,7 +57,7 @@ TemplateEngine: Output: Type: File Path: 'E:\SmartSql-Starter' -Paramters: +Parameters: DocDir: 'E:\SmartSql-Starter\doc' # 构建任务 @@ -65,25 +65,25 @@ Build: # ClearDir: # Type: Clear -# Paramters: +# Parameters: # Dirs: '.' MakeDic-Doc: Type: Process - Paramters: + Parameters: FileName: powershell - Args: mkdir '{{Project.Paramters.DocDir}}' + Args: mkdir '{{Project.Parameters.DocDir}}' Copy: Type: Process - Paramters: + Parameters: FileName: powershell - Args: cp '{{Project.ConfigPath}}' '{{Project.Paramters.DocDir}}' + Args: cp '{{Project.ConfigPath}}' '{{Project.Parameters.DocDir}}' Scaffolding: Type: MultiTemplate Output: Path: '.' - Paramters: + Parameters: Templates: [{Key: 'Sln.cshtml',Output: {Name: '{{Project.Module}}',Extension: '.sln'}}, {Key: "Proj-Entity.cshtml",Output: {Path: 'src/{{Project.Module}}.Entity',Name: '{{Project.Module}}.Entity',Extension: '.csproj'}}, {Key: "Proj-Repository.cshtml",Output: {Path: 'src/{{Project.Module}}.Repository',Name: '{{Project.Module}}.Repository',Extension: '.csproj'}}, @@ -120,16 +120,16 @@ Build: Table: Tokenizer: Type: Default - Paramters: + Parameters: IgnorePrefix: 'T_' Delimiter: '_' Converter: Type: Pascal - Paramters: { } + Parameters: { } View: Tokenizer: Type: Default - Paramters: + Parameters: IgnorePrefix: 'V_' Delimiter: '_' Converter: @@ -137,7 +137,7 @@ Build: Column: Tokenizer: Type: Default - Paramters: + Parameters: Delimiter: '_' Converter: Type: Pascal @@ -157,7 +157,7 @@ Build: Table: Tokenizer: Type: Default - Paramters: + Parameters: IgnorePrefix: 'T_' Delimiter: '_' Converter: @@ -178,7 +178,7 @@ Build: Table: Tokenizer: Type: Default - Paramters: + Parameters: IgnorePrefix: 'T_' Delimiter: '_' Converter: @@ -199,7 +199,7 @@ Build: Table: Tokenizer: Type: Default - Paramters: + Parameters: IgnorePrefix: 'T_' Delimiter: '_' Converter: @@ -219,7 +219,7 @@ Build: Table: Tokenizer: Type: Default - Paramters: + Parameters: IgnorePrefix: 'T_' Delimiter: '_' Converter: @@ -227,7 +227,7 @@ Build: View: Tokenizer: Type: Default - Paramters: + Parameters: IgnorePrefix: 'V_' Delimiter: '_' Converter: @@ -235,7 +235,7 @@ Build: Column: Tokenizer: Type: Default - Paramters: + Parameters: IgnorePrefix: 'T_' Delimiter: '_' Converter: @@ -243,10 +243,35 @@ Build: ReStore: Type: Process - Paramters: + Parameters: FileName: powershell WorkingDirectory: '{{Project.Output.Path}}' Args: dotnet restore + +# Publish: +# Type: Process +# Parameters: +# FileName: powershell +# WorkingDirectory: '{{Project.Output.Path}}' +# Args: dotnet publish -c Release -o '{{Project.Output.Path}}\publish' + +# Run: +# Type: Process +# Parameters: +# FileName: powershell +# WorkingDirectory: '{{Project.Output.Path}}\publish' +# CreateNoWindow: false +# RedirectStandardOutput: false +# RedirectStandardError: false +# WaitForExit: false +# WriteLines: ['dotnet {{Project.Module}}.API.dll'] + +# RunChrome: +# Type: Process +# Parameters: +# FileName: C:\Program Files (x86)\Google\Chrome\Application\chrome.exe +# CreateNoWindow: false +# Args: http://localhost:5000/swagger ``` ### 构建文件参数概览 diff --git a/build/version.props b/build/version.props index 7d92bfb..9f4c801 100644 --- a/build/version.props +++ b/build/version.props @@ -1,8 +1,8 @@ 2 - 1 - 10 + 2 + 0 $(VersionMajor).$(VersionMinor).$(VersionPatch) diff --git a/doc/SmartCode-ETL-ES.yml b/doc/SmartCode-ETL-ES.yml index 09cadf8..30f26d6 100644 --- a/doc/SmartCode-ETL-ES.yml +++ b/doc/SmartCode-ETL-ES.yml @@ -1,7 +1,7 @@ Author: Ahoo Wang DataSource: Name: Extract - Paramters: + Parameters: DbProvider: PostgreSql ConnectionString: 'Server=localhost;Port=5432;User Id=report;Password=SmartCode; Database=report;' Query: select * from es_sync_product where max_motify_time>@LastMaxModifyTime @@ -9,7 +9,7 @@ DataSource: AutoIncrement: true ModifyTime: max_motify_time -Paramters: +Parameters: ETLCode: SmartCode.ETL.LoadToES ETLRepository: SQLite @@ -17,12 +17,12 @@ Build: Transform: Type: Transform - Paramters: + Parameters: Script: LoadToES: Type: LoadToES - Paramters: + Parameters: Host: http://es.smartsql.net/ Index: smartsql Type: product diff --git a/doc/SmartCode-ETL.yml b/doc/SmartCode-ETL.yml index d9ac2ce..2a8948d 100644 --- a/doc/SmartCode-ETL.yml +++ b/doc/SmartCode-ETL.yml @@ -1,7 +1,7 @@ Author: Ahoo Wang DataSource: Name: Extract - Paramters: + Parameters: DbProvider: SqlServer ConnectionString: Data Source=.;Initial Catalog=SmartSqlDB;Integrated Security=True Query: SELECT [Id],[UserName],[Pwd],[Status],[LastLoginTime],[CreationTime],[Deleted] FROM [T_User] Where Id>@LastMaxId And CreationTime>@LastQueryTime @@ -9,7 +9,7 @@ DataSource: AutoIncrement: true ModifyTime: CreationTime -Paramters: +Parameters: ETLCode: SmartCode.ETL.Test ETLRepository: SQLite @@ -17,12 +17,12 @@ Build: Transform: Type: Transform - Paramters: + Parameters: Script: Load2PostgreSql: Type: Load - Paramters: + Parameters: DbProvider: PostgreSql ConnectionString: Server=localhost;Port=5432;User Id=postgres;Password=SmartSql; Database=smartsql_db; Table: t_user diff --git a/doc/SmartCode-Gen-ETL.yml b/doc/SmartCode-Gen-ETL.yml index 4cfef19..49e8a99 100644 --- a/doc/SmartCode-Gen-ETL.yml +++ b/doc/SmartCode-Gen-ETL.yml @@ -3,7 +3,7 @@ Module: SqlServer2PG Author: Ahoo Wang DataSource: Name: DbTable - Paramters: + Parameters: DbName: SqlServerDB DbProvider: SqlServer ConnectionString: Data Source=localhost;database=SqlServerDB;uid=SmartSql;pwd=SmartSql @@ -11,7 +11,7 @@ Language: PostgreSql TemplateEngine: Name: Razor Root: . -Paramters: +Parameters: ExtractMode: QueryTime ModifyTime: ModifyTime ExtractConnectionString: Data Source=localhost;database=SqlServerDB;uid=SmartSql;pwd=SmartSql @@ -26,7 +26,7 @@ Build: ClearDir: Type: Clear - Paramters: + Parameters: Dirs: '.' # 生成迁移SQL DbToPGSql: @@ -43,13 +43,13 @@ Build: Table: Tokenizer: Type: Default - Paramters: + Parameters: IgnorePrefix: 'T_' Delimiter: '_' UppercaseSplit: true Converter: Type: Delimiter - Paramters: + Parameters: Delimiter: '_' Mode: AllLower Prefix: smartcode_ @@ -57,12 +57,12 @@ Build: Column: Tokenizer: Type: Default - Paramters: + Parameters: Delimiter: '_' UppercaseSplit: true Converter: Type: Delimiter - Paramters: + Parameters: Delimiter: '_' Mode: AllLower # 生成 SmartCode.ETL 数据迁移构建配置 @@ -80,24 +80,24 @@ Build: Table: Tokenizer: Type: Default - Paramters: + Parameters: IgnorePrefix: 'T_' Delimiter: '_' UppercaseSplit: true Converter: Type: Delimiter - Paramters: + Parameters: Delimiter: '_' Mode: AllLower Prefix: smartcode_ Column: Tokenizer: Type: Default - Paramters: + Parameters: Delimiter: '_' UppercaseSplit: true Converter: Type: Delimiter - Paramters: + Parameters: Delimiter: '_' Mode: AllLower \ No newline at end of file diff --git a/doc/SmartCode-Spring-Boot.yml b/doc/SmartCode-Spring-Boot.yml index c170347..6a75eac 100644 --- a/doc/SmartCode-Spring-Boot.yml +++ b/doc/SmartCode-Spring-Boot.yml @@ -2,7 +2,7 @@ Module: smartcode.starter Author: Ahoo Wang DataSource: Name: DbTable - Paramters: + Parameters: DbName: SmartSqlDB DbProvider: SqlServer ConnectionString: Data Source=.;Initial Catalog=SmartSqlDB;Integrated Security=True @@ -19,7 +19,7 @@ Build: ClearDir: Type: Clear - Paramters: + Parameters: Dirs: '.' @@ -36,16 +36,16 @@ Build: Table: Tokenizer: Type: Default - Paramters: + Parameters: IgnorePrefix: 'T_' Delimiter: '_' Converter: Type: Pascal - Paramters: { } + Parameters: { } View: Tokenizer: Type: Default - Paramters: + Parameters: IgnorePrefix: 'V_' Delimiter: '_' Converter: @@ -53,7 +53,7 @@ Build: Column: Tokenizer: Type: Default - Paramters: + Parameters: Delimiter: '_' Converter: Type: Camel \ No newline at end of file diff --git a/doc/SmartCode.ETL-EN.md b/doc/SmartCode.ETL-EN.md index f139588..587751a 100644 --- a/doc/SmartCode.ETL-EN.md +++ b/doc/SmartCode.ETL-EN.md @@ -117,7 +117,7 @@ I believe that many students who have already landed the microservices architect { "Type": "SmartCode.ETL.IETLRepository,SmartCode.ETL", "ImplType": "SmartCode.ETL.PostgreSql.PGETLRepository,SmartCode.ETL.PostgreSql", - "Paramters": { + "Parameters": { "ConnectionString": "Server=localhost;Port=5432;User Id=postgres;Password=SmartSql; Database=smartcode_etl;" } } @@ -133,24 +133,24 @@ I believe that many students who have already landed the microservices architect Author: Ahoo Wang DataSource: Name: Extract - Paramters: + Parameters: DbProvider: SqlServer ConnectionString: Data Source=.;Initial Catalog=SmartSqlDB;Integrated Security=True Query: SELECT [Id],[UserName],[Status],[LastLoginTime],[CreationTime],[ModifyTime],[Deleted] FROM [T_User] With(NoLock) Where ModifyTime>@LastMaxModifyTime PKColumn: Id AutoIncrement: true ModifyTime: ModifyTime -Paramters: +Parameters: ETLCode: SmartCode.ETL.Test ETLRepository: PG Build: Transform: Type: Transform - Paramters: + Parameters: Script: Load2PostgreSql: Type: Load - Paramters: + Parameters: DbProvider: PostgreSql ConnectionString: Server=localhost;Port=5432;User Id=postgres;Password=SmartSql; Database=smartsql_db; Table: t_user__temp @@ -168,7 +168,7 @@ Build: ,{Column: Deleted,Mapping: deleted}] ``` -### Root Paramters +### Root Parameters | Parameter Name | Description | | :------------ | -----------------------------: | @@ -179,7 +179,7 @@ Build: > Attribute Name:Extract, using the ExtractDataSource plugin as a data source -#### ExtractDataSource.Paramters +#### ExtractDataSource.Parameters | Parameter Name | Description | | :--------------- | -------------------------------- | @@ -194,7 +194,7 @@ AutoIncrement | Whether to auto-increment the primary key, true automatically ca > Attribute Type:Load, using the LoadBuildTask plugin as a build task -#### Build.Load.Paramters +#### Build.Load.Parameters | Parameter Name | Description | | :--------------- | -------------------------------- | @@ -247,7 +247,7 @@ The following is the data extraction performance, the number of extraction is 14 "QueryCommand": { "Taken": 41267, "Command": "Select * From T_ProductSearchLog With(NoLock) Where Id>@LastMaxId", - "Paramters": { + "Parameters": { "LastMaxId": -1, "LastQueryTime": "1970-01-01T08:00:00" } diff --git a/doc/SmartCode.ETL.md b/doc/SmartCode.ETL.md index 04b3e6d..22475c5 100644 --- a/doc/SmartCode.ETL.md +++ b/doc/SmartCode.ETL.md @@ -117,7 +117,7 @@ { "Type": "SmartCode.ETL.IETLRepository,SmartCode.ETL", "ImplType": "SmartCode.ETL.PostgreSql.PGETLRepository,SmartCode.ETL.PostgreSql", - "Paramters": { + "Parameters": { "ConnectionString": "Server=localhost;Port=5432;User Id=postgres;Password=SmartSql; Database=smartcode_etl;" } } @@ -133,24 +133,24 @@ Author: Ahoo Wang DataSource: Name: Extract - Paramters: + Parameters: DbProvider: SqlServer ConnectionString: Data Source=.;Initial Catalog=SmartSqlDB;Integrated Security=True Query: SELECT [Id],[UserName],[Status],[LastLoginTime],[CreationTime],[ModifyTime],[Deleted] FROM [T_User] With(NoLock) Where ModifyTime>@LastMaxModifyTime PKColumn: Id AutoIncrement: true ModifyTime: ModifyTime -Paramters: +Parameters: ETLCode: SmartCode.ETL.Test ETLRepository: PG Build: Transform: Type: Transform - Paramters: + Parameters: Script: Load2PostgreSql: Type: Load - Paramters: + Parameters: DbProvider: PostgreSql ConnectionString: Server=localhost;Port=5432;User Id=postgres;Password=SmartSql; Database=smartsql_db; Table: t_user__temp @@ -168,7 +168,7 @@ Build: ,{Column: Deleted,Mapping: deleted}] ``` -### 根 Paramters +### 根 Parameters | 参数名 | 说明 | | :------------ | -----------------------------: | @@ -179,7 +179,7 @@ Build: > 属性 Name:Extract,使用 ExtractDataSource 插件作为数据源 -#### ExtractDataSource.Paramters +#### ExtractDataSource.Parameters | 参数名 | 说明 | | :--------------- | ------------------------------------------------------------------------------------------------------: | @@ -194,7 +194,7 @@ Build: > 属性 Type:Load,使用 LoadBuildTask 插件作为构建任务 -#### Build.Load.Paramters +#### Build.Load.Parameters | 参数名 | 说明 | | :--------------- | --------------------------------------------------------------: | @@ -247,7 +247,7 @@ LastMaxModifyTime 即上一次抽取的数据最大ModifyTime值(第一次抽取 "QueryCommand": { "Taken": 41267, "Command": "Select * From T_ProductSearchLog With(NoLock) Where Id>@LastMaxId", - "Paramters": { + "Parameters": { "LastMaxId": -1, "LastQueryTime": "1970-01-01T08:00:00", "LastMaxModifyTime": "1970-01-01T08:00:00" diff --git a/doc/SmartCode.json b/doc/SmartCode.json index 217b9bb..fe82b1b 100644 --- a/doc/SmartCode.json +++ b/doc/SmartCode.json @@ -3,7 +3,7 @@ "Author": "Ahoo Wang", "DataSource": { "Name": "Db", - "Paramters": { + "Parameters": { "DbName": "SmartSqlStarterDB", "DbProvider": "SqlServer", "ConnectionString": "Data Source=.;Initial Catalog=SmartSqlStarterDB;Integrated Security=True" @@ -17,7 +17,7 @@ "Name": null, "Extension": null }, - "Paramters": null, + "Parameters": null, "BuildTasks": { "ClearDir": { "Type": "Clear", @@ -30,36 +30,36 @@ "NamingConverter": { "Table": { "Tokenizer": { - "Type": "Defalut", - "Paramters": {} + "Type": "Default", + "Parameters": {} }, "Converter": { - "Type": "Defalut", - "Paramters": {} + "Type": "Default", + "Parameters": {} } }, "View": { "Tokenizer": { - "Type": "Defalut", - "Paramters": {} + "Type": "Default", + "Parameters": {} }, "Converter": { - "Type": "Defalut", - "Paramters": {} + "Type": "Default", + "Parameters": {} } }, "Column": { "Tokenizer": { - "Type": "Defalut", - "Paramters": {} + "Type": "Default", + "Parameters": {} }, "Converter": { - "Type": "Defalut", - "Paramters": {} + "Type": "Default", + "Parameters": {} } } }, - "Paramters": { + "Parameters": { "Dirs": "." } }, @@ -79,36 +79,36 @@ "NamingConverter": { "Table": { "Tokenizer": { - "Type": "Defalut", - "Paramters": {} + "Type": "Default", + "Parameters": {} }, "Converter": { - "Type": "Defalut", - "Paramters": {} + "Type": "Default", + "Parameters": {} } }, "View": { "Tokenizer": { - "Type": "Defalut", - "Paramters": {} + "Type": "Default", + "Parameters": {} }, "Converter": { - "Type": "Defalut", - "Paramters": {} + "Type": "Default", + "Parameters": {} } }, "Column": { "Tokenizer": { - "Type": "Defalut", - "Paramters": {} + "Type": "Default", + "Parameters": {} }, "Converter": { - "Type": "Defalut", - "Paramters": {} + "Type": "Default", + "Parameters": {} } } }, - "Paramters": null + "Parameters": null }, "SmartSqlConfig": { "Type": "Project", @@ -126,36 +126,36 @@ "NamingConverter": { "Table": { "Tokenizer": { - "Type": "Defalut", - "Paramters": {} + "Type": "Default", + "Parameters": {} }, "Converter": { - "Type": "Defalut", - "Paramters": {} + "Type": "Default", + "Parameters": {} } }, "View": { "Tokenizer": { - "Type": "Defalut", - "Paramters": {} + "Type": "Default", + "Parameters": {} }, "Converter": { - "Type": "Defalut", - "Paramters": {} + "Type": "Default", + "Parameters": {} } }, "Column": { "Tokenizer": { - "Type": "Defalut", - "Paramters": {} + "Type": "Default", + "Parameters": {} }, "Converter": { - "Type": "Defalut", - "Paramters": {} + "Type": "Default", + "Parameters": {} } } }, - "Paramters": null + "Parameters": null }, "Entity_Project": { "Type": "Project", @@ -173,36 +173,36 @@ "NamingConverter": { "Table": { "Tokenizer": { - "Type": "Defalut", - "Paramters": {} + "Type": "Default", + "Parameters": {} }, "Converter": { - "Type": "Defalut", - "Paramters": {} + "Type": "Default", + "Parameters": {} } }, "View": { "Tokenizer": { - "Type": "Defalut", - "Paramters": {} + "Type": "Default", + "Parameters": {} }, "Converter": { - "Type": "Defalut", - "Paramters": {} + "Type": "Default", + "Parameters": {} } }, "Column": { "Tokenizer": { - "Type": "Defalut", - "Paramters": {} + "Type": "Default", + "Parameters": {} }, "Converter": { - "Type": "Defalut", - "Paramters": {} + "Type": "Default", + "Parameters": {} } } }, - "Paramters": null + "Parameters": null }, "Entity": { "Type": "Table", @@ -221,43 +221,43 @@ "Table": { "Tokenizer": { "Type": "Default", - "Paramters": { + "Parameters": { "IgnorePrefix": "T_", "Delimiter": "_" } }, "Converter": { "Type": "Default", - "Paramters": {} + "Parameters": {} } }, "View": { "Tokenizer": { "Type": "Default", - "Paramters": { + "Parameters": { "IgnorePrefix": "V_", "Delimiter": "_" } }, "Converter": { "Type": "Pascal", - "Paramters": null + "Parameters": null } }, "Column": { "Tokenizer": { "Type": "Default", - "Paramters": { + "Parameters": { "Delimiter": "_" } }, "Converter": { "Type": "Pascal", - "Paramters": null + "Parameters": null } } }, - "Paramters": null + "Parameters": null }, "Repository_Project": { "Type": "Project", @@ -275,36 +275,36 @@ "NamingConverter": { "Table": { "Tokenizer": { - "Type": "Defalut", - "Paramters": {} + "Type": "Default", + "Parameters": {} }, "Converter": { - "Type": "Defalut", - "Paramters": {} + "Type": "Default", + "Parameters": {} } }, "View": { "Tokenizer": { - "Type": "Defalut", - "Paramters": {} + "Type": "Default", + "Parameters": {} }, "Converter": { - "Type": "Defalut", - "Paramters": {} + "Type": "Default", + "Parameters": {} } }, "Column": { "Tokenizer": { - "Type": "Defalut", - "Paramters": {} + "Type": "Default", + "Parameters": {} }, "Converter": { - "Type": "Defalut", - "Paramters": {} + "Type": "Default", + "Parameters": {} } } }, - "Paramters": null + "Parameters": null }, "Repository": { "Type": "Table", @@ -323,41 +323,41 @@ "Table": { "Tokenizer": { "Type": "Default", - "Paramters": { + "Parameters": { "IgnorePrefix": "T_", "Delimiter": "_" } }, "Converter": { "Type": "Default", - "Paramters": null + "Parameters": null } }, "View": { "Tokenizer": { "Type": "Default", - "Paramters": { + "Parameters": { "IgnorePrefix": "V_", "Delimiter": "_" } }, "Converter": { "Type": "Default", - "Paramters": null + "Parameters": null } }, "Column": { "Tokenizer": { - "Type": "Defalut", - "Paramters": {} + "Type": "Default", + "Parameters": {} }, "Converter": { - "Type": "Defalut", - "Paramters": {} + "Type": "Default", + "Parameters": {} } } }, - "Paramters": null + "Parameters": null }, "SqlMap": { "Type": "Table", @@ -376,44 +376,44 @@ "Table": { "Tokenizer": { "Type": "Default", - "Paramters": { + "Parameters": { "IgnorePrefix": "T_", "Delimiter": "_" } }, "Converter": { "Type": "Default", - "Paramters": null + "Parameters": null } }, "View": { "Tokenizer": { "Type": "Default", - "Paramters": { + "Parameters": { "IgnorePrefix": "V_", "Delimiter": "_" } }, "Converter": { "Type": "Default", - "Paramters": null + "Parameters": null } }, "Column": { "Tokenizer": { "Type": "Default", - "Paramters": { + "Parameters": { "IgnorePrefix": "T_", "Delimiter": "_" } }, "Converter": { "Type": "Default", - "Paramters": null + "Parameters": null } } }, - "Paramters": null + "Parameters": null } }, "OutputPath": "E://SmartSql-Starter" diff --git a/doc/SmartCode.yml b/doc/SmartCode.yml index db3630f..1d21623 100644 --- a/doc/SmartCode.yml +++ b/doc/SmartCode.yml @@ -2,7 +2,7 @@ Module: SmartSql.Starter Author: Ahoo Wang DataSource: Name: DbTable - Paramters: + Parameters: DbName: SmartSqlTestDB DbProvider: SqlServer ConnectionString: Data Source=.;Initial Catalog=SmartSqlTestDB;Integrated Security=True @@ -13,7 +13,7 @@ TemplateEngine: Output: Type: File Path: 'E:\SmartSql-Starter' -Paramters: +Parameters: DocDir: 'E:\SmartSql-Starter\doc' # 构建任务 @@ -21,25 +21,25 @@ Build: # ClearDir: # Type: Clear -# Paramters: +# Parameters: # Dirs: '.' MakeDic-Doc: Type: Process - Paramters: + Parameters: FileName: powershell - Args: mkdir '{{Project.Paramters.DocDir}}' + Args: mkdir '{{Project.Parameters.DocDir}}' Copy: Type: Process - Paramters: + Parameters: FileName: powershell - Args: cp '{{Project.ConfigPath}}' '{{Project.Paramters.DocDir}}' + Args: cp '{{Project.ConfigPath}}' '{{Project.Parameters.DocDir}}' Scaffolding: Type: MultiTemplate Output: Path: '.' - Paramters: + Parameters: Templates: [{Key: 'Sln.cshtml',Output: {Name: '{{Project.Module}}',Extension: '.sln'}}, {Key: "Proj-Entity.cshtml",Output: {Path: 'src/{{Project.Module}}.Entity',Name: '{{Project.Module}}.Entity',Extension: '.csproj'}}, {Key: "Proj-Repository.cshtml",Output: {Path: 'src/{{Project.Module}}.Repository',Name: '{{Project.Module}}.Repository',Extension: '.csproj'}}, @@ -76,16 +76,16 @@ Build: Table: Tokenizer: Type: Default - Paramters: + Parameters: IgnorePrefix: 'T_' Delimiter: '_' Converter: Type: Pascal - Paramters: { } + Parameters: { } View: Tokenizer: Type: Default - Paramters: + Parameters: IgnorePrefix: 'V_' Delimiter: '_' Converter: @@ -93,7 +93,7 @@ Build: Column: Tokenizer: Type: Default - Paramters: + Parameters: Delimiter: '_' Converter: Type: Pascal @@ -113,7 +113,7 @@ Build: Table: Tokenizer: Type: Default - Paramters: + Parameters: IgnorePrefix: 'T_' Delimiter: '_' Converter: @@ -134,7 +134,7 @@ Build: Table: Tokenizer: Type: Default - Paramters: + Parameters: IgnorePrefix: 'T_' Delimiter: '_' Converter: @@ -155,7 +155,7 @@ Build: Table: Tokenizer: Type: Default - Paramters: + Parameters: IgnorePrefix: 'T_' Delimiter: '_' Converter: @@ -175,7 +175,7 @@ Build: Table: Tokenizer: Type: Default - Paramters: + Parameters: IgnorePrefix: 'T_' Delimiter: '_' Converter: @@ -183,7 +183,7 @@ Build: View: Tokenizer: Type: Default - Paramters: + Parameters: IgnorePrefix: 'V_' Delimiter: '_' Converter: @@ -191,7 +191,7 @@ Build: Column: Tokenizer: Type: Default - Paramters: + Parameters: IgnorePrefix: 'T_' Delimiter: '_' Converter: @@ -199,7 +199,32 @@ Build: ReStore: Type: Process - Paramters: + Parameters: FileName: powershell WorkingDirectory: '{{Project.Output.Path}}' - Args: dotnet restore \ No newline at end of file + Args: dotnet restore + +# Publish: +# Type: Process +# Parameters: +# FileName: powershell +# WorkingDirectory: '{{Project.Output.Path}}' +# Args: dotnet publish -c Release -o '{{Project.Output.Path}}\publish' + +# Run: +# Type: Process +# Parameters: +# FileName: powershell +# WorkingDirectory: '{{Project.Output.Path}}\publish' +# CreateNoWindow: false +# RedirectStandardOutput: false +# RedirectStandardError: false +# WaitForExit: false +# WriteLines: ['dotnet {{Project.Module}}.API.dll'] + +# RunChrome: +# Type: Process +# Parameters: +# FileName: C:\Program Files (x86)\Google\Chrome\Application\chrome.exe +# CreateNoWindow: false +# Args: http://localhost:5000/swagger \ No newline at end of file diff --git a/src/SmartCode.App/BuildTasks/AbstractBuildTask.cs b/src/SmartCode.App/BuildTasks/AbstractBuildTask.cs index 14c43d4..32415f6 100644 --- a/src/SmartCode.App/BuildTasks/AbstractBuildTask.cs +++ b/src/SmartCode.App/BuildTasks/AbstractBuildTask.cs @@ -22,7 +22,7 @@ public AbstractBuildTask(string name, ILogger logger) public abstract Task Build(BuildContext context); - public virtual void Initialize(IDictionary paramters) + public virtual void Initialize(IDictionary parameters) { Initialized = true; } diff --git a/src/SmartCode.App/BuildTasks/ClearBuildTask.cs b/src/SmartCode.App/BuildTasks/ClearBuildTask.cs index f8c9aa6..87a7d9f 100644 --- a/src/SmartCode.App/BuildTasks/ClearBuildTask.cs +++ b/src/SmartCode.App/BuildTasks/ClearBuildTask.cs @@ -20,9 +20,9 @@ public ClearBuildTask(ILogger logger) public Task Build(BuildContext context) { - var paramters = context.Build.Paramters; - if (paramters == null) { return Task.CompletedTask; ; } - if (paramters.Value("Dirs", out string clearDirs)) + var parameters = context.Build.Parameters; + if (parameters == null) { return Task.CompletedTask; ; } + if (parameters.Value("Dirs", out string clearDirs)) { var _clearDirs = clearDirs.Split(','); foreach (var dir in _clearDirs) @@ -36,7 +36,7 @@ public Task Build(BuildContext context) _logger.LogInformation($"ClearBuildTask Delete directory:{fullDir} End!"); } } - if (paramters.Value("Files", out string clearFiles)) + if (parameters.Value("Files", out string clearFiles)) { var _clearFiles = clearFiles.Split(','); foreach (var file in _clearFiles) @@ -54,7 +54,7 @@ public Task Build(BuildContext context) } private readonly ILogger _logger; - public void Initialize(IDictionary paramters) + public void Initialize(IDictionary parameters) { } diff --git a/src/SmartCode.App/BuildTasks/MultiTemplateBuildTask.cs b/src/SmartCode.App/BuildTasks/MultiTemplateBuildTask.cs index 436b567..d6eaf96 100644 --- a/src/SmartCode.App/BuildTasks/MultiTemplateBuildTask.cs +++ b/src/SmartCode.App/BuildTasks/MultiTemplateBuildTask.cs @@ -32,7 +32,7 @@ public MultiTemplateBuildTask(IPluginManager pluginManager } public async Task Build(BuildContext context) { - if (context.Build.Paramters.Value(TEMPLATES_KEY, out IEnumerable templates)) + if (context.Build.Parameters.Value(TEMPLATES_KEY, out IEnumerable templates)) { foreach (var templateKVs in templates) { @@ -80,7 +80,7 @@ public async Task Build(BuildContext context) } } - public void Initialize(IDictionary paramters) + public void Initialize(IDictionary parameters) { } diff --git a/src/SmartCode.App/BuildTasks/ProcessBuildTask.cs b/src/SmartCode.App/BuildTasks/ProcessBuildTask.cs index 2650c93..bbd34d9 100644 --- a/src/SmartCode.App/BuildTasks/ProcessBuildTask.cs +++ b/src/SmartCode.App/BuildTasks/ProcessBuildTask.cs @@ -1,5 +1,6 @@ using Microsoft.Extensions.Logging; using System; +using System.Buffers.Binary; using System.Collections.Generic; using System.Diagnostics; using System.Text; @@ -12,6 +13,7 @@ public class ProcessBuildTask : IBuildTask { const string CREATE_NO_WINDOW = "CreateNoWindow"; const string WORKING_DIRECTORY = "WorkingDirectory"; + const string WRITE_LINES = "WriteLines"; const string FILE_NAME = "FileName"; const string ARGS = "Args"; const string TIMEOUT = "Timeout"; @@ -28,73 +30,85 @@ public ProcessBuildTask(ILogger logger) public async Task Build(BuildContext context) { - if (!context.Build.Paramters.Value(FILE_NAME, out string fileName)) + if (!context.Build.Parameters.Value(FILE_NAME, out string fileName)) { throw new SmartCodeException($"Build:{context.BuildKey},Can not find Parameter:{FILE_NAME}!"); } - if (!context.Build.Paramters.Value(ARGS, out string args)) + var startInfo = new ProcessStartInfo(fileName) { - throw new SmartCodeException($"Build:{context.BuildKey},Can not find Parameter:{ARGS}!"); + UseShellExecute = false, + RedirectStandardInput = true, + RedirectStandardOutput = true, + RedirectStandardError = true, + CreateNoWindow = DEFAULT_CREATE_NO_WINDOW + }; + if (context.Build.Parameters.Value(nameof(ProcessStartInfo.RedirectStandardInput), out bool redirectStandardInput)) + { + startInfo.RedirectStandardInput = redirectStandardInput; + } + if (context.Build.Parameters.Value(nameof(ProcessStartInfo.RedirectStandardOutput), out bool redirectStandardOutput)) + { + startInfo.RedirectStandardOutput = redirectStandardOutput; + } + if (context.Build.Parameters.Value(nameof(ProcessStartInfo.RedirectStandardError), out bool redirectStandardError)) + { + startInfo.RedirectStandardError = redirectStandardError; } - var process = new Process(); - var startInfo = process.StartInfo; - startInfo.UseShellExecute = false; - startInfo.RedirectStandardOutput = true; - startInfo.RedirectStandardError = true; - startInfo.CreateNoWindow = DEFAULT_CREATE_NO_WINDOW; - startInfo.FileName = fileName; - startInfo.Arguments = Handlebars.Compile(args)(context); - if (context.Build.Paramters.Value(WORKING_DIRECTORY, out string workingDic)) + if (context.Build.Parameters.Value(ARGS, out string args)) + { + startInfo.Arguments = Handlebars.Compile(args)(context); + } + if (context.Build.Parameters.Value(WORKING_DIRECTORY, out string workingDic)) { startInfo.WorkingDirectory = Handlebars.Compile(workingDic)(context); } - if (context.Build.Paramters.Value(CREATE_NO_WINDOW, out bool createNoWin)) + if (context.Build.Parameters.Value(CREATE_NO_WINDOW, out bool createNoWin)) { startInfo.CreateNoWindow = createNoWin; } _logger.LogDebug($"--------Process.FileName:{startInfo.FileName},Args:{startInfo.Arguments} Start--------"); - process.ErrorDataReceived += Process_ErrorDataReceived; - process.OutputDataReceived += Process_OutputDataReceived; - try + using (var process = Process.Start(startInfo)) { - process.Start(); - var timeOut = DEFAULT_TIME_OUT; - if (context.Build.Paramters.Value(TIMEOUT, out int _timeout)) + if (context.Build.Parameters.Value(WRITE_LINES, out IEnumerable lines)) { - timeOut = _timeout; + foreach (var line in lines) + { + var lineCommand = Handlebars.Compile(line.ToString())(context); + _logger.LogDebug($"StandardInput.WriteLine: [{lineCommand}]."); + process.StandardInput.WriteLine(lineCommand); + } } - process.WaitForExit(timeOut); - - var standardOutput = await process.StandardOutput.ReadToEndAsync(); - if (!String.IsNullOrEmpty(standardOutput)) + if (startInfo.RedirectStandardOutput) + { + var standardOutput = await process.StandardOutput.ReadToEndAsync(); + if (!String.IsNullOrEmpty(standardOutput)) + { + _logger.LogDebug("StandardOutput start"); + _logger.LogDebug(standardOutput); + _logger.LogDebug("StandardOutput end"); + } + } + if (startInfo.RedirectStandardError) { - _logger.LogDebug("StandardOutput start"); - _logger.LogDebug(standardOutput); - _logger.LogDebug("StandardOutput end"); + var standardError = await process.StandardError.ReadToEndAsync(); + if (!String.IsNullOrEmpty(standardError)) + { + _logger.LogDebug("StandardError start"); + _logger.LogDebug(standardError); + _logger.LogDebug("StandardError end"); + } } - var standardError = await process.StandardError.ReadToEndAsync(); - if (!String.IsNullOrEmpty(standardError)) + if (!(context.Build.Parameters.Value(nameof(Process.WaitForExit), out bool waitForExit) && !waitForExit)) { - _logger.LogDebug("StandardError start"); - _logger.LogDebug(standardError); - _logger.LogDebug("StandardError end"); + var timeOut = DEFAULT_TIME_OUT; + if (context.Build.Parameters.Value(TIMEOUT, out int _timeout)) + { + timeOut = _timeout; + } + process.WaitForExit(timeOut); } _logger.LogDebug($"--------Process.FileName:{startInfo.FileName},Args:{startInfo.Arguments},Taken:{process.TotalProcessorTime.TotalMilliseconds} End--------"); } - finally - { - process.Dispose(); - } - } - - private void Process_OutputDataReceived(object sender, DataReceivedEventArgs e) - { - _logger.LogDebug(e.Data); - } - - private void Process_ErrorDataReceived(object sender, DataReceivedEventArgs e) - { - _logger.LogDebug(e.Data); } public void Initialize(IDictionary parameters) diff --git a/src/SmartCode.App/Outputs/FileOutput.cs b/src/SmartCode.App/Outputs/FileOutput.cs index bf70b0e..27e2b07 100644 --- a/src/SmartCode.App/Outputs/FileOutput.cs +++ b/src/SmartCode.App/Outputs/FileOutput.cs @@ -21,10 +21,10 @@ public FileOutput(ILogger logger) public string Name { get; private set; } = "File"; - public void Initialize(IDictionary paramters) + public void Initialize(IDictionary parameters) { - if (paramters == null) { return; } - if (paramters.Value("Name", out string name)) + if (parameters == null) { return; } + if (parameters.Value("Name", out string name)) { Name = name; } diff --git a/src/SmartCode.App/PluginManager.cs b/src/SmartCode.App/PluginManager.cs index f211e45..c0128a6 100644 --- a/src/SmartCode.App/PluginManager.cs +++ b/src/SmartCode.App/PluginManager.cs @@ -65,7 +65,7 @@ private IEnumerable ResolvePlugins() where TPlugin : IPlugin var pluginConfig = _smartCodeOptions .Plugins .FirstOrDefault(m => m.ImplAssemblyName == assName && m.ImplTypeName == typeName); - plugin.Initialize(pluginConfig.Paramters); + plugin.Initialize(pluginConfig.Parameters); } } return plugins; diff --git a/src/SmartCode.App/SmartCodeApp.cs b/src/SmartCode.App/SmartCodeApp.cs index c3a2e46..06d2488 100644 --- a/src/SmartCode.App/SmartCodeApp.cs +++ b/src/SmartCode.App/SmartCodeApp.cs @@ -13,12 +13,12 @@ namespace SmartCode.App public class SmartCodeApp { public SmartCodeOptions SmartCodeOptions { get; } - public String AppDirectory { get { return AppDomain.CurrentDomain.BaseDirectory; } } + public String AppDirectory => AppDomain.CurrentDomain.BaseDirectory; public IConfigBuilder ConfigBuilder { get; private set; } - public IServiceCollection Services { get { return SmartCodeOptions.Services; } } + public IServiceCollection Services => SmartCodeOptions.Services; public IServiceProvider ServiceProvider { get; private set; } public Project Project { get; private set; } - public string ConfigPath { get { return SmartCodeOptions.ConfigPath; } } + public string ConfigPath => SmartCodeOptions.ConfigPath; public ILogger Logger { get; private set; } public SmartCodeApp(SmartCodeOptions smartCodeOptions) { diff --git a/src/SmartCode.CLI/DefaultSmartCodeAppBuilder.cs b/src/SmartCode.CLI/DefaultSmartCodeAppBuilder.cs index e74925c..5634a0e 100644 --- a/src/SmartCode.CLI/DefaultSmartCodeAppBuilder.cs +++ b/src/SmartCode.CLI/DefaultSmartCodeAppBuilder.cs @@ -12,7 +12,7 @@ public class DefaultSmartCodeAppBuilder { const string APP_SETTINGS_PATH = "appsettings.json"; const string SMARTCODE_KEY = "SmartCode"; - public String AppDirectory { get { return AppDomain.CurrentDomain.BaseDirectory; } } + public String AppDirectory => AppDomain.CurrentDomain.BaseDirectory; public SmartCodeApp Build(string configPath) { diff --git a/src/SmartCode.CLI/Program.cs b/src/SmartCode.CLI/Program.cs index fa35886..7ff05d0 100644 --- a/src/SmartCode.CLI/Program.cs +++ b/src/SmartCode.CLI/Program.cs @@ -1,4 +1,5 @@ using System; +using System.Diagnostics; using System.Threading.Tasks; using SmartCode.Utilities; using SmartCode.App; diff --git a/src/SmartCode.CLI/SmartCode.CLI.csproj b/src/SmartCode.CLI/SmartCode.CLI.csproj index 571a499..4517d7e 100644 --- a/src/SmartCode.CLI/SmartCode.CLI.csproj +++ b/src/SmartCode.CLI/SmartCode.CLI.csproj @@ -10,8 +10,8 @@ SmartCode.CLI Ahoo Wang - 1. update SmartSql-version - 2. optimize template + 1. refactor ProcessBuildTask + 2. change Paramters -> Parameters (Broken change) diff --git a/src/SmartCode.CLI/appsettings.json b/src/SmartCode.CLI/appsettings.json index 069f685..b8065b7 100644 --- a/src/SmartCode.CLI/appsettings.json +++ b/src/SmartCode.CLI/appsettings.json @@ -89,14 +89,14 @@ { "Type": "SmartCode.ETL.IETLTaskRepository,SmartCode.ETL", "ImplType": "SmartCode.ETL.PostgreSql.PGETLTaskRepository,SmartCode.ETL.PostgreSql", - "Paramters": { + "Parameters": { "ConnectionString": "Server=localhost;Port=5432;User Id=postgres;Password=SmartSql; Database=smartcode_etl;" } }, { "Type": "SmartCode.ETL.IETLTaskRepository,SmartCode.ETL", "ImplType": "SmartCode.ETL.SQLite.SQLiteETLTaskRepository,SmartCode.ETL.SQLite", - "Paramters": { + "Parameters": { //"ConnectionString": "Data Source=YOUR_DB_DIR\smartcode-etl.db;Version=3;" } } diff --git a/src/SmartCode.Db/DbRepository.cs b/src/SmartCode.Db/DbRepository.cs index 0ef3b6b..ed75af3 100644 --- a/src/SmartCode.Db/DbRepository.cs +++ b/src/SmartCode.Db/DbRepository.cs @@ -17,7 +17,7 @@ public class DbRepository : IDbRepository public ISmartSqlMapper SqlMapper { get; private set; } public string DbProviderName { get; private set; } - public DbProvider DbProvider { get { return (DbProvider)Enum.Parse(typeof(DbProvider), DbProviderName); } } + public DbProvider DbProvider => (DbProvider)Enum.Parse(typeof(DbProvider), DbProviderName); public string DbName { get; private set; } public string DbSchema { get; protected set; } public string ConnectionString { get; private set; } @@ -35,17 +35,17 @@ DataSource dataSource private void InitDataSource() { var dataSource = _dataSource; - dataSource.Paramters.EnsureValue("DbProvider", out string dbProvider); + dataSource.Parameters.EnsureValue("DbProvider", out string dbProvider); DbProviderName = dbProvider; - dataSource.Paramters.EnsureValue("DbName", out string dbName); + dataSource.Parameters.EnsureValue("DbName", out string dbName); DbName = dbName; - dataSource.Paramters.EnsureValue("ConnectionString", out string connectionString); + dataSource.Parameters.EnsureValue("ConnectionString", out string connectionString); ConnectionString = connectionString; - if (dataSource.Paramters.Value("DbSchema", out string dbSchema)) + if (dataSource.Parameters.Value("DbSchema", out string dbSchema)) { DbSchema = dbSchema; } - if (dataSource.Paramters.Value("SqlMapPath", out string mapPath)) + if (dataSource.Parameters.Value("SqlMapPath", out string mapPath)) { SqlMapPath = mapPath; } diff --git a/src/SmartCode.Db/DbSource.cs b/src/SmartCode.Db/DbSource.cs index ab6f296..2383f92 100644 --- a/src/SmartCode.Db/DbSource.cs +++ b/src/SmartCode.Db/DbSource.cs @@ -24,21 +24,21 @@ Project project public virtual string Name { get; private set; } = "Db"; public DbRepository DbRepository { get; protected set; } - public SmartSql.SmartSqlOptions SmartSqlOptions { get { return DbRepository.SqlMapper.SmartSqlOptions; } } - public SmartSql.SmartSqlContext SmartSqlContext { get { return SmartSqlOptions.SmartSqlContext; } } - public SmartSql.Configuration.Database Database { get { return SmartSqlContext.Database; } } - public SmartSql.Configuration.DbProvider DbProvider { get { return Database.DbProvider; } } - public SmartSql.Configuration.WriteDataSource WriteDataSource { get { return Database.WriteDataSource; } } + public SmartSql.SmartSqlOptions SmartSqlOptions => DbRepository.SqlMapper.SmartSqlOptions; + public SmartSql.SmartSqlContext SmartSqlContext => SmartSqlOptions.SmartSqlContext; + public SmartSql.Configuration.Database Database => SmartSqlContext.Database; + public SmartSql.Configuration.DbProvider DbProvider => Database.DbProvider; + public SmartSql.Configuration.WriteDataSource WriteDataSource => Database.WriteDataSource; public Project Project { get; } public ILoggerFactory LoggerFactory { get; } public IPluginManager PluginManager { get; } - public void Initialize(IDictionary paramters) + public void Initialize(IDictionary parameters) { - if (paramters != null) + if (parameters != null) { - if (paramters.Value("Name", out string name)) + if (parameters.Value("Name", out string name)) { Name = name; } diff --git a/src/SmartCode.ETL.LoadToES/LoadToESBuildTask.cs b/src/SmartCode.ETL.LoadToES/LoadToESBuildTask.cs index e2839c7..924b8e1 100644 --- a/src/SmartCode.ETL.LoadToES/LoadToESBuildTask.cs +++ b/src/SmartCode.ETL.LoadToES/LoadToESBuildTask.cs @@ -44,7 +44,7 @@ public async Task Build(BuildContext context) var loadEntity = new Entity.ETLLoad { Size = 0, - Paramters = new Dictionary + Parameters = new Dictionary { { "Task","LoadToES"}, { "Index",esOptions.Index}, @@ -93,7 +93,7 @@ public async Task Build(BuildContext context) var bulkReqDesc = bulkRequest .Index(esOptions.Index) .Type(esOptions.TypeName); - if (context.Build.Paramters.Value(ID_MAPPING, out string es_id)) + if (context.Build.Parameters.Value(ID_MAPPING, out string es_id)) { return bulkReqDesc.IndexMany(list, (bulkIdxDesc, item) => { @@ -119,13 +119,13 @@ public async Task Build(BuildContext context) private static ESOptions InitOptions(BuildContext context) { - context.Build.Paramters.EnsureValue(HOST, out string host); - context.Build.Paramters.EnsureValue(INDEX_NAME, out string index_name); - context.Build.Paramters.EnsureValue(TYPE_NAME, out string type_name); - context.Build.Paramters.Value(BASE_AUTH, out IDictionary baseAuth); + context.Build.Parameters.EnsureValue(HOST, out string host); + context.Build.Parameters.EnsureValue(INDEX_NAME, out string index_name); + context.Build.Parameters.EnsureValue(TYPE_NAME, out string type_name); + context.Build.Parameters.Value(BASE_AUTH, out IDictionary baseAuth); baseAuth.Value("UserName", out string user_name); baseAuth.Value("Password", out string password); - context.Build.Paramters.Value(CERT_PATH, out string cert); + context.Build.Parameters.Value(CERT_PATH, out string cert); return new ESOptions { @@ -139,7 +139,7 @@ private static ESOptions InitOptions(BuildContext context) } private IEnumerable InitColumnMapping(BuildContext context) { - if (context.Build.Paramters.Value(COLUMN_MAPPING, out IEnumerable colMapps)) + if (context.Build.Parameters.Value(COLUMN_MAPPING, out IEnumerable colMapps)) { foreach (IDictionary colMappingKV in colMapps) { diff --git a/src/SmartCode.ETL/BuildTasks/LoadBuildTask.cs b/src/SmartCode.ETL/BuildTasks/LoadBuildTask.cs index 182ece6..80b6429 100644 --- a/src/SmartCode.ETL/BuildTasks/LoadBuildTask.cs +++ b/src/SmartCode.ETL/BuildTasks/LoadBuildTask.cs @@ -40,8 +40,8 @@ public LoadBuildTask(ILoggerFactory loggerFacotry public async Task Build(BuildContext context) { - context.Build.Paramters.EnsureValue(TABLE_NAME, out string tableName); - context.Build.Paramters.EnsureValue(DB_PROVIDER, out DbProvider dbProvider); + context.Build.Parameters.EnsureValue(TABLE_NAME, out string tableName); + context.Build.Parameters.EnsureValue(DB_PROVIDER, out DbProvider dbProvider); var etlRepository = _pluginManager.Resolve(_project.GetETLRepository()); var dataSource = context.GetDataSource(); if (dataSource.TransformData.Rows.Count == 0) @@ -56,7 +56,7 @@ public async Task Build(BuildContext context) var batchTable = dataSource.TransformData; batchTable.Name = tableName; var sqlMapper = GetSqlMapper(context); - context.Build.Paramters.Value(PRE_COMMAND, out string preCmd); + context.Build.Parameters.Value(PRE_COMMAND, out string preCmd); var lastExtract = _project.GetETLLastExtract(); var queryParams = new Dictionary { @@ -85,7 +85,7 @@ await sqlMapper.ExecuteAsync(new RequestContext loadEntity.PreCommand = new Entity.ETLDbCommand { Command = preCmd, - Paramters = queryParams, + Parameters = queryParams, Taken = stopwatch.ElapsedMilliseconds }; } @@ -102,7 +102,7 @@ await sqlMapper.ExecuteAsync(new RequestContext _logger.LogWarning($"Build:{context.BuildKey},BatchInsert.Size:{loadEntity.Size},Taken:{loadEntity.Taken}ms!"); #endregion #region PostCmd - if (context.Build.Paramters.Value(POST_COMMAND, out string postCmd) && !String.IsNullOrEmpty(postCmd)) + if (context.Build.Parameters.Value(POST_COMMAND, out string postCmd) && !String.IsNullOrEmpty(postCmd)) { stopwatch.Restart(); await sqlMapper.ExecuteAsync(new RequestContext @@ -114,7 +114,7 @@ await sqlMapper.ExecuteAsync(new RequestContext loadEntity.PostCommand = new Entity.ETLDbCommand { Command = postCmd, - Paramters = queryParams, + Parameters = queryParams, Taken = stopwatch.ElapsedMilliseconds }; } @@ -127,14 +127,14 @@ await sqlMapper.ExecuteAsync(new RequestContext } } - public void Initialize(IDictionary paramters) + public void Initialize(IDictionary parameters) { } private void InitColumnMapping(IBatchInsert batchInsert, BuildContext context) { - if (context.Build.Paramters.Value(COLUMN_MAPPING, out IEnumerable colMapps)) + if (context.Build.Parameters.Value(COLUMN_MAPPING, out IEnumerable colMapps)) { foreach (IDictionary colMappingKV in colMapps) { @@ -158,8 +158,8 @@ private ISmartSqlMapper GetSqlMapper(BuildContext context) } private CreateSmartSqlMapperOptions InitCreateSmartSqlMapperOptions(BuildContext context) { - context.Build.Paramters.EnsureValue(DB_PROVIDER, out string dbProvider); - context.Build.Paramters.EnsureValue("ConnectionString", out string connString); + context.Build.Parameters.EnsureValue(DB_PROVIDER, out string dbProvider); + context.Build.Parameters.EnsureValue("ConnectionString", out string connString); var alias_name = $"{Name}_{context.BuildKey}"; return new CreateSmartSqlMapperOptions { diff --git a/src/SmartCode.ETL/BuildTasks/TransformBuildTask.cs b/src/SmartCode.ETL/BuildTasks/TransformBuildTask.cs index cb41a09..82c18ac 100644 --- a/src/SmartCode.ETL/BuildTasks/TransformBuildTask.cs +++ b/src/SmartCode.ETL/BuildTasks/TransformBuildTask.cs @@ -40,7 +40,7 @@ public async Task Build(BuildContext context) }); } - public void Initialize(IDictionary paramters) + public void Initialize(IDictionary parameters) { } diff --git a/src/SmartCode.ETL/Entity/ETLDbCommand.cs b/src/SmartCode.ETL/Entity/ETLDbCommand.cs index f2cfd06..b3e7ae3 100644 --- a/src/SmartCode.ETL/Entity/ETLDbCommand.cs +++ b/src/SmartCode.ETL/Entity/ETLDbCommand.cs @@ -7,7 +7,7 @@ namespace SmartCode.ETL.Entity public class ETLDbCommand { public string Command { get; set; } - public IDictionary Paramters { get; set; } + public IDictionary Parameters { get; set; } public long Taken { get; set; } } } diff --git a/src/SmartCode.ETL/Entity/ETLLoad.cs b/src/SmartCode.ETL/Entity/ETLLoad.cs index b35ece0..41ee63e 100644 --- a/src/SmartCode.ETL/Entity/ETLLoad.cs +++ b/src/SmartCode.ETL/Entity/ETLLoad.cs @@ -11,6 +11,6 @@ public class ETLLoad public int Size { get; set; } public long Taken { get; set; } public string Table { get; set; } - public IDictionary Paramters { get; set; } + public IDictionary Parameters { get; set; } } } diff --git a/src/SmartCode.ETL/Entity/Monitor.cs b/src/SmartCode.ETL/Entity/Monitor.cs index d3ec5e3..f7b674b 100644 --- a/src/SmartCode.ETL/Entity/Monitor.cs +++ b/src/SmartCode.ETL/Entity/Monitor.cs @@ -6,7 +6,7 @@ namespace SmartCode.ETL.Entity { public class Monitor { - public string BuidKey { get; set; } + public string BuildKey { get; set; } public string MachineName { get; } diff --git a/src/SmartCode.ETL/ExtractDataSource.cs b/src/SmartCode.ETL/ExtractDataSource.cs index 21ef8d3..37853eb 100644 --- a/src/SmartCode.ETL/ExtractDataSource.cs +++ b/src/SmartCode.ETL/ExtractDataSource.cs @@ -67,11 +67,11 @@ private async Task _projectBuilder_OnFailed(object sender, OnProjectBuildFailedE public async Task InitData() { var dataSource = _project.DataSource; - dataSource.Paramters.EnsureValue("DbProvider", out string dbProvider); - dataSource.Paramters.EnsureValue("ConnectionString", out string connString); - dataSource.Paramters.Value("PKColumn", out string pkColumn); - dataSource.Paramters.Value("ModifyTime", out string modifyTime); - dataSource.Paramters.EnsureValue("Query", out string queryCmd); + dataSource.Parameters.EnsureValue("DbProvider", out string dbProvider); + dataSource.Parameters.EnsureValue("ConnectionString", out string connString); + dataSource.Parameters.Value("PKColumn", out string pkColumn); + dataSource.Parameters.Value("ModifyTime", out string modifyTime); + dataSource.Parameters.EnsureValue("Query", out string queryCmd); #region CreateSqlMapper var smartSqlOptions = new CreateSmartSqlMapperOptions { @@ -101,7 +101,7 @@ public async Task InitData() QueryCommand = new ETLDbCommand { Command = queryCmd, - Paramters = queryParams + Parameters = queryParams }, QuerySize = -1, MaxId = -1 @@ -114,8 +114,8 @@ public async Task InitData() extractEntity.QueryCommand.Taken = stopwatch.ElapsedMilliseconds; _logger.LogWarning($"InitData,Data.Size:{extractEntity.QuerySize},Taken:{extractEntity.QueryCommand.Taken}ms!"); - dataSource.Paramters.Value("PkIsNumeric", out bool pkIsNumeric); - dataSource.Paramters.Value("AutoIncrement", out bool autoIncrement); + dataSource.Parameters.Value("PkIsNumeric", out bool pkIsNumeric); + dataSource.Parameters.Value("AutoIncrement", out bool autoIncrement); if (!String.IsNullOrEmpty(pkColumn) && (pkIsNumeric || autoIncrement) @@ -145,7 +145,7 @@ public async Task InitData() } - public void Initialize(IDictionary paramters) + public void Initialize(IDictionary parameters) { InitProjectBuilderEvent(); Initialized = true; diff --git a/src/SmartCode.ETL/NoneETLTaskRepository.cs b/src/SmartCode.ETL/NoneETLTaskRepository.cs index 311600f..8685561 100644 --- a/src/SmartCode.ETL/NoneETLTaskRepository.cs +++ b/src/SmartCode.ETL/NoneETLTaskRepository.cs @@ -31,7 +31,7 @@ public Task GetLastTask(string code) return Task.FromResult(new ETLTask()); } - public void Initialize(IDictionary paramters) + public void Initialize(IDictionary parameters) { } diff --git a/src/SmartCode.ETL/ProjectExtensions.cs b/src/SmartCode.ETL/ProjectExtensions.cs index 9ccc7fa..37c2cea 100644 --- a/src/SmartCode.ETL/ProjectExtensions.cs +++ b/src/SmartCode.ETL/ProjectExtensions.cs @@ -13,18 +13,18 @@ public static class ProjectExtensions public const String ETL_TASK_ID = "ETLTaskId"; public static void SetETKTaskId(this Project project, long etlTaskId) { - if (project.Paramters.ContainsKey(ETL_TASK_ID)) + if (project.Parameters.ContainsKey(ETL_TASK_ID)) { - project.Paramters[ETL_TASK_ID] = etlTaskId; + project.Parameters[ETL_TASK_ID] = etlTaskId; } else { - project.Paramters.Add(ETL_TASK_ID, etlTaskId); + project.Parameters.Add(ETL_TASK_ID, etlTaskId); } } public static long GetETKTaskId(this Project project) { - project.Paramters.EnsureValue(ETL_TASK_ID, out long etlTaskId); + project.Parameters.EnsureValue(ETL_TASK_ID, out long etlTaskId); return etlTaskId; } @@ -32,24 +32,24 @@ public static long GetETKTaskId(this Project project) public static string GetETLRepository(this Project project) { - project.Paramters.Value(ETL_REPOSITORY, out string repository); + project.Parameters.Value(ETL_REPOSITORY, out string repository); return repository; } public const String ETL_LAST_EXTRACT = "ETLLastExtract"; public static void SetETLLastExtract(this Project project, ETLExtract extract) { - if (project.Paramters.ContainsKey(ETL_LAST_EXTRACT)) + if (project.Parameters.ContainsKey(ETL_LAST_EXTRACT)) { - project.Paramters[ETL_LAST_EXTRACT] = extract; + project.Parameters[ETL_LAST_EXTRACT] = extract; } else { - project.Paramters.Add(ETL_LAST_EXTRACT, extract); + project.Parameters.Add(ETL_LAST_EXTRACT, extract); } } public static ETLExtract GetETLLastExtract(this Project project) { - project.Paramters.Value(ETL_LAST_EXTRACT, out ETLExtract lastExtract); + project.Parameters.Value(ETL_LAST_EXTRACT, out ETLExtract lastExtract); return lastExtract; } @@ -57,7 +57,7 @@ public static ETLExtract GetETLLastExtract(this Project project) public static string GetETLCode(this Project project) { - if (project.Paramters.Value(ETL_CODE, out string etlCode)) + if (project.Parameters.Value(ETL_CODE, out string etlCode)) { return etlCode; } diff --git a/src/SmartCode.ETL/TransformEngine/RazorTransformEngine.cs b/src/SmartCode.ETL/TransformEngine/RazorTransformEngine.cs index 0106d90..df610a9 100644 --- a/src/SmartCode.ETL/TransformEngine/RazorTransformEngine.cs +++ b/src/SmartCode.ETL/TransformEngine/RazorTransformEngine.cs @@ -24,7 +24,7 @@ public class RazorTransformEngine : ITransformEngine private const String SCRIPT = "Script"; public async Task Transform(BuildContext context) { - if (context.Build.Paramters.Value(SCRIPT, out string script) && !String.IsNullOrEmpty(script)) + if (context.Build.Parameters.Value(SCRIPT, out string script) && !String.IsNullOrEmpty(script)) { using (var serviceScope = _scopeFactory.CreateScope()) { @@ -38,16 +38,16 @@ public async Task Transform(BuildContext context) public string Name { get; private set; } = "Razor"; private string _root = AppPath.Relative("TransformScripts"); private IServiceScopeFactory _scopeFactory; - public void Initialize(IDictionary paramters) + public void Initialize(IDictionary parameters) { Initialized = true; - if (paramters != null) + if (parameters != null) { - if (paramters.Value("Name", out string name)) + if (parameters.Value("Name", out string name)) { Name = name; } - if (paramters.Value("Root", out string root)) + if (parameters.Value("Root", out string root)) { _root = root; } diff --git a/src/SmartCode.Generator/BuildTasks/AbstractDbBuildTask.cs b/src/SmartCode.Generator/BuildTasks/AbstractDbBuildTask.cs index 73cc999..71826d6 100644 --- a/src/SmartCode.Generator/BuildTasks/AbstractDbBuildTask.cs +++ b/src/SmartCode.Generator/BuildTasks/AbstractDbBuildTask.cs @@ -25,12 +25,12 @@ public AbstractDbBuildTask(string name, ILogger logger) public abstract Task Build(BuildContext context); - public virtual void Initialize(IDictionary paramters) + public virtual void Initialize(IDictionary parameters) { this.Initialized = true; } - protected IEnumerable FilterTable(IEnumerable
tables, string buildKey, Build build) + protected IList
FilterTable(IEnumerable
tables, string buildKey, Build build) { _logger.LogInformation($"FilterTable Build:{buildKey} Start!"); IEnumerable
buildTables = CopyTables(tables); @@ -55,7 +55,7 @@ protected IEnumerable
FilterTable(IEnumerable
tables, string build buildTables = buildTables.Where(m => build.IncludeTables.Contains(m.Name)); } _logger.LogInformation($"FilterTable Build:{buildKey} End!"); - return buildTables; + return buildTables.ToList(); } protected IList
CopyTables(IEnumerable
tables) diff --git a/src/SmartCode.Generator/BuildTasks/SingleBuildTask.cs b/src/SmartCode.Generator/BuildTasks/SingleBuildTask.cs index 9e096ba..3f220da 100644 --- a/src/SmartCode.Generator/BuildTasks/SingleBuildTask.cs +++ b/src/SmartCode.Generator/BuildTasks/SingleBuildTask.cs @@ -18,7 +18,7 @@ public SingleBuildTask(IPluginManager pluginManager _pluginManager = pluginManager; _logger = logger; } - public async override Task Build(BuildContext context) + public override async Task Build(BuildContext context) { var filterTables = FilterTable(context.GetDataSource().Tables, context.BuildKey, context.Build); context.SetCurrentAllTable(filterTables); diff --git a/src/SmartCode.Generator/BuildTasks/TableBuildTask.cs b/src/SmartCode.Generator/BuildTasks/TableBuildTask.cs index 969dca0..c322134 100644 --- a/src/SmartCode.Generator/BuildTasks/TableBuildTask.cs +++ b/src/SmartCode.Generator/BuildTasks/TableBuildTask.cs @@ -38,9 +38,9 @@ public override async Task Build(BuildContext context) } } - public override void Initialize(IDictionary paramters) + public override void Initialize(IDictionary parameters) { - base.Initialize(paramters); + base.Initialize(parameters); } } } diff --git a/src/SmartCode.Generator/DbTypeConverter/DefaultDbTypeConverter.cs b/src/SmartCode.Generator/DbTypeConverter/DefaultDbTypeConverter.cs index dd2fd99..4d118af 100644 --- a/src/SmartCode.Generator/DbTypeConverter/DefaultDbTypeConverter.cs +++ b/src/SmartCode.Generator/DbTypeConverter/DefaultDbTypeConverter.cs @@ -62,11 +62,11 @@ public string DbType(DbProvider dbProvider, string lang, string languageType) return dbTypeMap?.To; } - public void Initialize(IDictionary paramters) + public void Initialize(IDictionary parameters) { - if (paramters != null) + if (parameters != null) { - if (paramters.Value("XmlPath", out string xmlPath)) + if (parameters.Value("XmlPath", out string xmlPath)) { _xmlPath = xmlPath; } diff --git a/src/SmartCode.Generator/RazorTemplates/ETL/ToPGBuild.cshtml b/src/SmartCode.Generator/RazorTemplates/ETL/ToPGBuild.cshtml index 463e68e..31c06d2 100644 --- a/src/SmartCode.Generator/RazorTemplates/ETL/ToPGBuild.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/ETL/ToPGBuild.cshtml @@ -5,13 +5,13 @@ var project = Model.Project; var dbSource = Model.GetDataSource(); var buildTask = Model.Build; - project.Paramters.Value("ExtractMode", out string extractMode);//Last: Full,LastMaxModifyTime,LastQueryTime,LastMaxId + project.Parameters.Value("ExtractMode", out string extractMode);//Last: Full,LastMaxModifyTime,LastQueryTime,LastMaxId bool extractModeUseTime = extractMode == "LastMaxModifyTime" || extractMode == "LastQueryTime"; - project.Paramters.Value("ExtractConnectionString", out string extractConnectionString); + project.Parameters.Value("ExtractConnectionString", out string extractConnectionString); extractConnectionString = extractConnectionString ?? dbSource.Database.WriteDataSource.ConnectionString; - project.Paramters.Value("LoadDbProvider", out string loadDbProvider); - project.Paramters.Value("LoadConnectionString", out string loadConnectionString); - Model.Project.Paramters.Value("ModifyTime", out string modifyTime); + project.Parameters.Value("LoadDbProvider", out string loadDbProvider); + project.Parameters.Value("LoadConnectionString", out string loadConnectionString); + Model.Project.Parameters.Value("ModifyTime", out string modifyTime); var table = Model.GetCurrentTable(); var loadTable = extractModeUseTime ? $"{table.ConvertedName}__temp" : table.ConvertedName; var PKColumn = Model.GetCurrentTable().PKColumn; @@ -21,19 +21,19 @@ string GetExtractWhere() { string sql = String.Empty; - Model.Project.Paramters.Value("ExtractMode", out string extractMode); + Model.Project.Parameters.Value("ExtractMode", out string extractMode); switch (extractMode) { case "Full": { return ""; } case "LastMaxModifyTime": { - Model.Project.Paramters.Value("ModifyTime", out string modifyTime); + Model.Project.Parameters.Value("ModifyTime", out string modifyTime); sql = $"{modifyTime}>@LastMaxModifyTime"; break; } case "LastQueryTime": { - Model.Project.Paramters.Value("ModifyTime", out string modifyTime); + Model.Project.Parameters.Value("ModifyTime", out string modifyTime); sql = $"{modifyTime}>@LastQueryTime"; break; } @@ -51,7 +51,7 @@ Author: Ahoo Wang DataSource: Name: Extract - Paramters: + Parameters: DbProvider: @dbSource.DbRepository.DbProviderName ConnectionString: "@extractConnectionString" Query: 'Select * From @table.Name @GetExtractWhere()' @@ -63,19 +63,19 @@ DataSource: } -Paramters: +Parameters: ETLCode: @(project.Module).@table.Name ETLRepository: PG Build: Transform: Type: Transform - Paramters: + Parameters: Script: Load: Type: Load - Paramters: + Parameters: DbProvider: @loadDbProvider ConnectionString: "@loadConnectionString" Table: @loadTable diff --git a/src/SmartCode.TemplateEngine/Impl/HandlebarsTemplateEngine.cs b/src/SmartCode.TemplateEngine/Impl/HandlebarsTemplateEngine.cs index 3115d33..e460772 100644 --- a/src/SmartCode.TemplateEngine/Impl/HandlebarsTemplateEngine.cs +++ b/src/SmartCode.TemplateEngine/Impl/HandlebarsTemplateEngine.cs @@ -56,14 +56,14 @@ public Task Render(BuildContext context) return Task.FromResult(context.Result); } - public void Initialize(IDictionary paramters) + public void Initialize(IDictionary parameters) { - if (paramters == null) { return; } - if (paramters.Value("Name", out string name)) + if (parameters == null) { return; } + if (parameters.Value("Name", out string name)) { Name = name; } - if (paramters.Value("Root", out string root)) + if (parameters.Value("Root", out string root)) { _root = root; } diff --git a/src/SmartCode.TemplateEngine/Impl/OfficialRazorTemplateEngine.cs b/src/SmartCode.TemplateEngine/Impl/OfficialRazorTemplateEngine.cs index 64fefd8..463f690 100644 --- a/src/SmartCode.TemplateEngine/Impl/OfficialRazorTemplateEngine.cs +++ b/src/SmartCode.TemplateEngine/Impl/OfficialRazorTemplateEngine.cs @@ -23,16 +23,16 @@ public class OfficialRazorTemplateEngine : ITemplateEngine public string Name { get; private set; } = "Razor"; private string _root = AppPath.Relative("RazorTemplates"); private IServiceScopeFactory _scopeFactory; - public void Initialize(IDictionary paramters) + public void Initialize(IDictionary parameters) { Initialized = true; - if (paramters != null) + if (parameters != null) { - if (paramters.Value("Name", out string name)) + if (parameters.Value("Name", out string name)) { Name = name; } - if (paramters.Value("Root", out string root)) + if (parameters.Value("Root", out string root)) { _root = root; } diff --git a/src/SmartCode/AbstractPlugin.cs b/src/SmartCode/AbstractPlugin.cs index 817b0ba..dc5fcf6 100644 --- a/src/SmartCode/AbstractPlugin.cs +++ b/src/SmartCode/AbstractPlugin.cs @@ -22,11 +22,11 @@ public abstract class AbstractPlugin : IPlugin public ILoggerFactory LoggerFactory { get; protected set; } public Project Project { get; protected set; } public IPluginManager PluginManager { get; protected set; } - public virtual void Initialize(IDictionary paramters) + public virtual void Initialize(IDictionary parameters) { - if (paramters != null) + if (parameters != null) { - if (paramters.Value(NAME_KEY, out string name)) + if (parameters.Value(NAME_KEY, out string name)) { Name = name; } diff --git a/src/SmartCode/BuildContext.cs b/src/SmartCode/BuildContext.cs index e6c560f..3abddaa 100644 --- a/src/SmartCode/BuildContext.cs +++ b/src/SmartCode/BuildContext.cs @@ -16,7 +16,7 @@ public class BuildContext public String Result { get; set; } public Output Output { get; set; } #endregion - public object this[string key] { get { return Items[key]; } set { Items[key] = value; } } + public object this[string key] { get => Items[key]; set => Items[key] = value; } public IDictionary Items { get; set; } = new Dictionary(); public TItem GetItem(string key) { diff --git a/src/SmartCode/Configuration/Build.cs b/src/SmartCode/Configuration/Build.cs index 03f06b1..991c8ba 100644 --- a/src/SmartCode/Configuration/Build.cs +++ b/src/SmartCode/Configuration/Build.cs @@ -22,6 +22,6 @@ public class Build /// /// 自定义构建参数 /// - public IDictionary Paramters { get; set; } + public IDictionary Parameters { get; set; } } } diff --git a/src/SmartCode/Configuration/ConfigBuilders/ConfigBuilder.cs b/src/SmartCode/Configuration/ConfigBuilders/ConfigBuilder.cs index d8bd859..427a9aa 100644 --- a/src/SmartCode/Configuration/ConfigBuilders/ConfigBuilder.cs +++ b/src/SmartCode/Configuration/ConfigBuilders/ConfigBuilder.cs @@ -59,7 +59,7 @@ protected void InitDefault() if (buildTask.NamingConverter == null) { - buildTask.NamingConverter = NamingConverter.Defalut; + buildTask.NamingConverter = NamingConverter.Default; } else { diff --git a/src/SmartCode/Configuration/DataSource.cs b/src/SmartCode/Configuration/DataSource.cs index c27b75a..e703478 100644 --- a/src/SmartCode/Configuration/DataSource.cs +++ b/src/SmartCode/Configuration/DataSource.cs @@ -8,6 +8,6 @@ namespace SmartCode.Configuration public class DataSource { public String Name { get; set; } - public IDictionary Paramters { get; set; } + public IDictionary Parameters { get; set; } } } diff --git a/src/SmartCode/Configuration/NamingConverter.cs b/src/SmartCode/Configuration/NamingConverter.cs index 7fc232e..62e0615 100644 --- a/src/SmartCode/Configuration/NamingConverter.cs +++ b/src/SmartCode/Configuration/NamingConverter.cs @@ -6,7 +6,7 @@ namespace SmartCode.Configuration { public class NamingConverter { - public static NamingConverter Defalut = new NamingConverter + public static NamingConverter Default = new NamingConverter { Table = TokenizerMapConverter.Default, Column = TokenizerMapConverter.Default, @@ -35,11 +35,11 @@ public class Tokenizer { public static Tokenizer Default = new Tokenizer { - Type = "Defalut", - Paramters = new Dictionary() + Type = "Default", + Parameters = new Dictionary() }; public String Type { get; set; } - public IDictionary Paramters { get; set; } + public IDictionary Parameters { get; set; } } /// /// 词转换器 @@ -48,10 +48,10 @@ public class WordsConverter { public static WordsConverter Default = new WordsConverter { - Type = "Defalut", - Paramters = new Dictionary() + Type = "Default", + Parameters = new Dictionary() }; public String Type { get; set; } - public IDictionary Paramters { get; set; } + public IDictionary Parameters { get; set; } } } diff --git a/src/SmartCode/Configuration/Project.cs b/src/SmartCode/Configuration/Project.cs index 52ce66d..e3efbbd 100644 --- a/src/SmartCode/Configuration/Project.cs +++ b/src/SmartCode/Configuration/Project.cs @@ -15,9 +15,9 @@ public class Project public TemplateEngine TemplateEngine { get; set; } = TemplateEngine.Default; public String Language { get; set; } = "CSharp"; public Output Output { get; set; } - public IDictionary Paramters { get; set; } = new Dictionary(); + public IDictionary Parameters { get; set; } = new Dictionary(); [YamlMember(Alias = "Build")] public IDictionary BuildTasks { get; set; } - public String OutputPath { get { return Output.Path; } } + public String OutputPath => Output.Path; } } diff --git a/src/SmartCode/Configuration/TemplateEngine.cs b/src/SmartCode/Configuration/TemplateEngine.cs index faf8ebf..9d48271 100644 --- a/src/SmartCode/Configuration/TemplateEngine.cs +++ b/src/SmartCode/Configuration/TemplateEngine.cs @@ -13,6 +13,6 @@ public class TemplateEngine public String Name { get; set; } public String Root { get; set; } public String Path { get; set; } - public String FullPath { get { return System.IO.Path.Combine(Root, Path); } } + public String FullPath => System.IO.Path.Combine(Root, Path); } } diff --git a/src/SmartCode/IInitialize.cs b/src/SmartCode/IInitialize.cs index d354103..8689d55 100644 --- a/src/SmartCode/IInitialize.cs +++ b/src/SmartCode/IInitialize.cs @@ -6,6 +6,6 @@ namespace SmartCode { public interface IInitialize { - void Initialize(IDictionary paramters); + void Initialize(IDictionary parameters); } } diff --git a/src/SmartCode/NoneDataSource.cs b/src/SmartCode/NoneDataSource.cs index 1440e24..79b37c6 100644 --- a/src/SmartCode/NoneDataSource.cs +++ b/src/SmartCode/NoneDataSource.cs @@ -16,7 +16,7 @@ public Task InitData() return Task.CompletedTask; } - public void Initialize(IDictionary paramters) + public void Initialize(IDictionary parameters) { } diff --git a/src/SmartCode/PluginConfig.cs b/src/SmartCode/PluginConfig.cs index 3e7953e..3a684a8 100644 --- a/src/SmartCode/PluginConfig.cs +++ b/src/SmartCode/PluginConfig.cs @@ -8,12 +8,12 @@ public class PluginConfig { public String Name { get; set; } public String Type { get; set; } - public String TypeName { get { return Type.Split(',')[0].Trim(); } } - public String AssemblyName { get { return Type.Split(',')[1].Trim(); } } + public String TypeName => Type.Split(',')[0].Trim(); + public String AssemblyName => Type.Split(',')[1].Trim(); public String ImplType { get; set; } - public String ImplTypeName { get { return ImplType.Split(',')[0].Trim(); } } - public String ImplAssemblyName { get { return ImplType.Split(',')[1].Trim(); } } - public IDictionary Paramters { get; set; } + public String ImplTypeName => ImplType.Split(',')[0].Trim(); + public String ImplAssemblyName => ImplType.Split(',')[1].Trim(); + public IDictionary Parameters { get; set; } } } diff --git a/src/SmartCode/TokenizerFactory.cs b/src/SmartCode/TokenizerFactory.cs index 8055324..64b7878 100644 --- a/src/SmartCode/TokenizerFactory.cs +++ b/src/SmartCode/TokenizerFactory.cs @@ -11,7 +11,7 @@ public class TokenizerFactory public static ITokenizer Create(Tokenizer tokenizer) { DefaultTokenizer defaultTokenizer = new DefaultTokenizer(); - defaultTokenizer.Initialize(tokenizer.Paramters); + defaultTokenizer.Initialize(tokenizer.Parameters); return defaultTokenizer; } } diff --git a/src/SmartCode/Utilities/IDictionaryExtensions.cs b/src/SmartCode/Utilities/IDictionaryExtensions.cs index e64e18d..5d9f156 100644 --- a/src/SmartCode/Utilities/IDictionaryExtensions.cs +++ b/src/SmartCode/Utilities/IDictionaryExtensions.cs @@ -37,7 +37,7 @@ public static void EnsureValue(this IDictionary words) return stringBuilder.ToString(); } - public void Initialize(IDictionary paramters) + public void Initialize(IDictionary parameters) { Initialized = true; } diff --git a/src/SmartCode/WordsConverter/DefaultTokenizer.cs b/src/SmartCode/WordsConverter/DefaultTokenizer.cs index d50d8bb..b94577f 100644 --- a/src/SmartCode/WordsConverter/DefaultTokenizer.cs +++ b/src/SmartCode/WordsConverter/DefaultTokenizer.cs @@ -61,19 +61,19 @@ public IEnumerable Segment(string phrase) return new string[] { phrase }; } - public void Initialize(IDictionary paramters) + public void Initialize(IDictionary parameters) { - if (paramters != null) + if (parameters != null) { - if (paramters.Value(IGNORE_PREFIX_KEY, out string ignorePre)) + if (parameters.Value(IGNORE_PREFIX_KEY, out string ignorePre)) { IgnorePrefix = ignorePre; } - if (paramters.Value(DELIMITER_KEY, out string delimiter)) + if (parameters.Value(DELIMITER_KEY, out string delimiter)) { Delimiter = delimiter; } - if (paramters.Value(UPPERCASESPLIT_KEY, out bool upperSplit)) + if (parameters.Value(UPPERCASESPLIT_KEY, out bool upperSplit)) { UppercaseSplit = upperSplit; } diff --git a/src/SmartCode/WordsConverter/DelimiterConverter.cs b/src/SmartCode/WordsConverter/DelimiterConverter.cs index 23bfdbf..f0de16d 100644 --- a/src/SmartCode/WordsConverter/DelimiterConverter.cs +++ b/src/SmartCode/WordsConverter/DelimiterConverter.cs @@ -54,19 +54,19 @@ public string Convert(IEnumerable words) return _prefix + phrase; } - public void Initialize(IDictionary paramters) + public void Initialize(IDictionary parameters) { - if (paramters != null) + if (parameters != null) { - if (!paramters.Value(DELIMITER, out _delimiter)) + if (!parameters.Value(DELIMITER, out _delimiter)) { _delimiter = "_"; } - if (!paramters.Value(CONVERT_MODE, out _convertMode)) + if (!parameters.Value(CONVERT_MODE, out _convertMode)) { _convertMode = ConvertMode.None; } - if (!paramters.Value(PREFIX, out _prefix)) + if (!parameters.Value(PREFIX, out _prefix)) { _prefix = string.Empty; } diff --git a/src/SmartCode/WordsConverter/NoneConverter.cs b/src/SmartCode/WordsConverter/NoneConverter.cs index 462b529..80844c3 100644 --- a/src/SmartCode/WordsConverter/NoneConverter.cs +++ b/src/SmartCode/WordsConverter/NoneConverter.cs @@ -15,7 +15,7 @@ public string Convert(IEnumerable words) return String.Join("", words); } - public void Initialize(IDictionary paramters) + public void Initialize(IDictionary parameters) { } diff --git a/src/SmartCode/WordsConverter/PascalCaseConverter.cs b/src/SmartCode/WordsConverter/PascalCaseConverter.cs index 794f8ad..02547b8 100644 --- a/src/SmartCode/WordsConverter/PascalCaseConverter.cs +++ b/src/SmartCode/WordsConverter/PascalCaseConverter.cs @@ -23,7 +23,7 @@ public String Convert(IEnumerable words) return stringBuilder.ToString(); } - public void Initialize(IDictionary paramters) + public void Initialize(IDictionary parameters) { } diff --git a/src/SmartCode/WordsConverterFactory.cs b/src/SmartCode/WordsConverterFactory.cs index b99177b..0637696 100644 --- a/src/SmartCode/WordsConverterFactory.cs +++ b/src/SmartCode/WordsConverterFactory.cs @@ -30,7 +30,7 @@ public static IWordsConverter Create(Configuration.WordsConverter wordsConverter return new NoneConverter(); } } - converter.Initialize(wordsConverter.Paramters); + converter.Initialize(wordsConverter.Parameters); return converter; } } From a6aabf6ceb912ee591d359ab2696694992f1601d Mon Sep 17 00:00:00 2001 From: Ahoo Wang Date: Wed, 17 Apr 2019 01:09:22 +0800 Subject: [PATCH 027/127] change word Paramters -> Parameters --- README-EN.md | 18 +++++++++--------- README.md | 18 +++++++++--------- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/README-EN.md b/README-EN.md index 2b2c01f..4d54b53 100644 --- a/README-EN.md +++ b/README-EN.md @@ -290,7 +290,7 @@ Build: > Property Name: DbTable, using the DbTableSource plugin as a data source -DbTableSource.Paramters accepts the following three parameters: +DbTableSource.Parameters accepts the following three parameters: | Parameter Name | Description | | :--------- | --------:| @@ -312,7 +312,7 @@ DbTableSource.Paramters accepts the following three parameters: | IncludeTables | Include table name s | | IgnoreTables | Ignore table name s | | NamingConverter | Named Converter | -| Paramters | Custom Build Parameters | +| Parameters | Custom Build Parameters | #### NamingConverter Name Conversion @@ -327,9 +327,9 @@ DbTableSource.Paramters accepts the following three parameters: | Attribute | Description | | :--------- | --------:| | Type | Default | -| Paramters.IgnorePrefix | Ignore prefix characters | -| Paramters.Delimiter | Separator | -| Paramters.UppercaseSplit | Using uppercase separation, default: true | +| Parameters.IgnorePrefix | Ignore prefix characters | +| Parameters.Delimiter | Separator | +| Parameters.UppercaseSplit | Using uppercase separation, default: true | ### How to contribute a template @@ -348,13 +348,13 @@ DbTableSource.Paramters accepts the following three parameters: Author: Ahoo Wang DataSource: Name: Extract - Paramters: + Parameters: DbProvider: SqlServer ConnectionString: Data Source=.;Initial Catalog=SmartSqlDB;Integrated Security=True Query: SELECT [Id],[UserName],[Pwd],[Status],[LastLoginTime],[CreationTime],[Deleted] FROM [T_User] Where Id>@LastMaxId And CreationTime>@LastQueryTime PKColumn: Id -Paramters: +Parameters: ETLCode: SmartCode.ETL.Test ETLRepository: PG @@ -362,12 +362,12 @@ Build: Transform: Type: Transform - Paramters: + Parameters: Script: Load2PostgreSql.cshtml Load2PostgreSql: Type: Load - Paramters: + Parameters: DbProvider: PostgreSql ConnectionString: Server=localhost;Port=5432;User Id=postgres;Password=SmartSql; Database=smartsql_db; Table: t_user diff --git a/README.md b/README.md index 46d3cd2..280378c 100644 --- a/README.md +++ b/README.md @@ -290,7 +290,7 @@ Build: > 属性 Name:DbTable,使用 DbTableSource 插件作为数据源 -DbTableSource.Paramters 接受以下三个参数: +DbTableSource.Parameters 接受以下三个参数: | 参数名 | 说明 | | :--------- | --------:| @@ -322,7 +322,7 @@ DbTableSource.Paramters 接受以下三个参数: | IncludeTables | 包括表名s | | IgnoreTables | 忽略表名s | | NamingConverter | 命名转换器 | -| Paramters | 自定义构建参数 | +| Parameters | 自定义构建参数 | #### NamingConverter 命名转换 @@ -337,9 +337,9 @@ DbTableSource.Paramters 接受以下三个参数: | 属性 | 说明 | | :--------- | --------:| | Type | Default | -| Paramters.IgnorePrefix | 忽略前缀字符 | -| Paramters.Delimiter | 分隔符 | -| Paramters.UppercaseSplit | 使用大写分隔,默认:true | +| Parameters.IgnorePrefix | 忽略前缀字符 | +| Parameters.Delimiter | 分隔符 | +| Parameters.UppercaseSplit | 使用大写分隔,默认:true | ### 如何贡献模板 @@ -358,13 +358,13 @@ DbTableSource.Paramters 接受以下三个参数: Author: Ahoo Wang DataSource: Name: Extract - Paramters: + Parameters: DbProvider: SqlServer ConnectionString: Data Source=.;Initial Catalog=SmartSqlDB;Integrated Security=True Query: SELECT [Id],[UserName],[Pwd],[Status],[LastLoginTime],[CreationTime],[Deleted] FROM [T_User] Where Id>@LastMaxId And CreationTime>@LastQueryTime PKColumn: Id -Paramters: +Parameters: ETLCode: SmartCode.ETL.Test ETLRepository: PG @@ -372,12 +372,12 @@ Build: Transform: Type: Transform - Paramters: + Parameters: Script: Load2PostgreSql.cshtml Load2PostgreSql: Type: Load - Paramters: + Parameters: DbProvider: PostgreSql ConnectionString: Server=localhost;Port=5432;User Id=postgres;Password=SmartSql; Database=smartsql_db; Table: t_user From 5dfdaa5aed9b61750c143349a3afa27e3ae82d85 Mon Sep 17 00:00:00 2001 From: Ahoo Wang Date: Thu, 18 Apr 2019 11:43:58 +0800 Subject: [PATCH 028/127] update SmartSql-version to v4.0.26 --- build/version.props | 2 +- .../RazorTemplates/CSharp/Proj-API.cshtml | 2 +- .../RazorTemplates/CSharp/Proj-Repository.cshtml | 10 +++++----- .../RazorTemplates/CSharp/SqlMapConfig.cshtml | 16 +++++++++------- 4 files changed, 16 insertions(+), 14 deletions(-) diff --git a/build/version.props b/build/version.props index 9f4c801..419856b 100644 --- a/build/version.props +++ b/build/version.props @@ -2,7 +2,7 @@ 2 2 - 0 + 2 $(VersionMajor).$(VersionMinor).$(VersionPatch) diff --git a/src/SmartCode.Generator/RazorTemplates/CSharp/Proj-API.cshtml b/src/SmartCode.Generator/RazorTemplates/CSharp/Proj-API.cshtml index e287f2a..306737f 100644 --- a/src/SmartCode.Generator/RazorTemplates/CSharp/Proj-API.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/CSharp/Proj-API.cshtml @@ -9,7 +9,7 @@ - + diff --git a/src/SmartCode.Generator/RazorTemplates/CSharp/Proj-Repository.cshtml b/src/SmartCode.Generator/RazorTemplates/CSharp/Proj-Repository.cshtml index a57a7b5..d002fff 100644 --- a/src/SmartCode.Generator/RazorTemplates/CSharp/Proj-Repository.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/CSharp/Proj-Repository.cshtml @@ -21,15 +21,15 @@ } @if (dbSource.DbRepository.DbProvider == DbProvider.PostgreSql) { - + } else { - + } - - - + + + diff --git a/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMapConfig.cshtml b/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMapConfig.cshtml index 9916087..755b002 100644 --- a/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMapConfig.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMapConfig.cshtml @@ -32,13 +32,15 @@ - - - - - - - + + + + + + + + + From d65e5519b078862d138196295d81869aad70769a Mon Sep 17 00:00:00 2001 From: Ahoo Wang Date: Tue, 23 Apr 2019 16:02:49 +0800 Subject: [PATCH 029/127] add support Docker --- README-EN.md | 32 +++++++++++++++---- README.md | 32 +++++++++++++++---- build/version.props | 2 +- doc/SmartCode.yml | 32 +++++++++++++++---- .../BuildTasks/MultiTemplateBuildTask.cs | 24 ++++++++------ src/SmartCode.App/Outputs/FileOutput.cs | 8 +++-- .../CSharp/Sln-Directory.Build.cshtml | 18 +++++++++++ .../CSharp/Sln-DockerIgnore.cshtml | 9 ++++++ .../CSharp/Sln-Dockerfile.cshtml | 21 ++++++++++++ .../RazorTemplates/CSharp/Sln-Version.cshtml | 14 ++++++++ .../RazorTemplates/CSharp/Sln.cshtml | 13 ++++++++ src/SmartCode/IOutput.cs | 3 +- 12 files changed, 174 insertions(+), 34 deletions(-) create mode 100644 src/SmartCode.Generator/RazorTemplates/CSharp/Sln-Directory.Build.cshtml create mode 100644 src/SmartCode.Generator/RazorTemplates/CSharp/Sln-DockerIgnore.cshtml create mode 100644 src/SmartCode.Generator/RazorTemplates/CSharp/Sln-Dockerfile.cshtml create mode 100644 src/SmartCode.Generator/RazorTemplates/CSharp/Sln-Version.cshtml diff --git a/README-EN.md b/README-EN.md index 4d54b53..416c6da 100644 --- a/README-EN.md +++ b/README-EN.md @@ -58,7 +58,8 @@ Output: Type: File Path: 'E:\SmartSql-Starter' Parameters: - DocDir: 'E:\SmartSql-Starter\doc' + BuildDir: 'E:\SmartSql-Starter\build' + DockerImage: 'smartsql.starter' # 构建任务 Build: @@ -68,16 +69,16 @@ Build: # Parameters: # Dirs: '.' - MakeDic-Doc: + MakeBuildDir: Type: Process Parameters: FileName: powershell - Args: mkdir '{{Project.Parameters.DocDir}}' + Args: mkdir '{{Project.Parameters.BuildDir}}' Copy: Type: Process Parameters: FileName: powershell - Args: cp '{{Project.ConfigPath}}' '{{Project.Parameters.DocDir}}' + Args: cp '{{Project.ConfigPath}}' '{{Project.Parameters.BuildDir}}' Scaffolding: Type: MultiTemplate @@ -85,6 +86,10 @@ Build: Path: '.' Parameters: Templates: [{Key: 'Sln.cshtml',Output: {Name: '{{Project.Module}}',Extension: '.sln'}}, + {Key: 'Sln-Directory.Build.cshtml',Output: {Name: 'Directory.Build',Extension: '.props'}}, + {Key: 'Sln-Version.cshtml',Output: {Path: 'build',Name: 'version',Extension: '.props'}}, + {Key: 'Sln-Dockerfile.cshtml',Output: {Name: 'Dockerfile',Extension: ''}}, + {Key: 'Sln-DockerIgnore.cshtml',Output: {Name: '.dockerignore',Extension: ''}}, {Key: "Proj-Entity.cshtml",Output: {Path: 'src/{{Project.Module}}.Entity',Name: '{{Project.Module}}.Entity',Extension: '.csproj'}}, {Key: "Proj-Repository.cshtml",Output: {Path: 'src/{{Project.Module}}.Repository',Name: '{{Project.Module}}.Repository',Extension: '.csproj'}}, {Key: "Proj-Service.cshtml",Output: {Path: 'src/{{Project.Module}}.Service',Name: '{{Project.Module}}.Service',Extension: '.csproj'}}, @@ -104,8 +109,7 @@ Build: {Key: "API/QueryByPageResponse.cshtml",Output: {Path: 'src/{{Project.Module}}.API/Messages',Name: 'QueryByPageResponse',Extension: '.cs'}}, {Key: "API/ResponseMessage.cshtml",Output: {Path: 'src/{{Project.Module}}.API/Messages',Name: 'ResponseMessage',Extension: '.cs'}}, {Key: "SqlMapConfig.cshtml",Output: {Path: 'src/{{Project.Module}}.Repository',Name: 'SmartSqlMapConfig',Extension: '.xml'}}, - {Key: "SqlMapConfig.cshtml",Output: {Path: 'src/{{Project.Module}}.Repository',Name: 'SmartSqlMapConfig.Development',Extension: '.xml'}} - ] + {Key: "SqlMapConfig.cshtml",Output: {Path: 'src/{{Project.Module}}.Repository',Name: 'SmartSqlMapConfig.Development',Extension: '.xml'}}] Entity: Type: Table @@ -248,6 +252,20 @@ Build: WorkingDirectory: '{{Project.Output.Path}}' Args: dotnet restore +# BuildDocker: +# Type: Process +# Parameters: +# FileName: powershell +# WorkingDirectory: '{{Project.Output.Path}}' +# Args: docker build -t {{Project.Parameters.DockerImage}}:v1.0.0 . + +# RunDocker: +# Type: Process +# Parameters: +# FileName: powershell +# WorkingDirectory: '{{Project.Output.Path}}' +# Args: docker run --name {{Project.Parameters.DockerImage}} --rm -d -p 8008:80 {{Project.Parameters.DockerImage}}:v1.0.0 . + # Publish: # Type: Process # Parameters: @@ -271,7 +289,7 @@ Build: # Parameters: # FileName: C:\Program Files (x86)\Google\Chrome\Application\chrome.exe # CreateNoWindow: false -# Args: http://localhost:5000/swagger +# Args: http://localhost:8008/swagger ``` ### Build file parameter overview diff --git a/README.md b/README.md index 280378c..dea77fa 100644 --- a/README.md +++ b/README.md @@ -58,7 +58,8 @@ Output: Type: File Path: 'E:\SmartSql-Starter' Parameters: - DocDir: 'E:\SmartSql-Starter\doc' + BuildDir: 'E:\SmartSql-Starter\build' + DockerImage: 'smartsql.starter' # 构建任务 Build: @@ -68,16 +69,16 @@ Build: # Parameters: # Dirs: '.' - MakeDic-Doc: + MakeBuildDir: Type: Process Parameters: FileName: powershell - Args: mkdir '{{Project.Parameters.DocDir}}' + Args: mkdir '{{Project.Parameters.BuildDir}}' Copy: Type: Process Parameters: FileName: powershell - Args: cp '{{Project.ConfigPath}}' '{{Project.Parameters.DocDir}}' + Args: cp '{{Project.ConfigPath}}' '{{Project.Parameters.BuildDir}}' Scaffolding: Type: MultiTemplate @@ -85,6 +86,10 @@ Build: Path: '.' Parameters: Templates: [{Key: 'Sln.cshtml',Output: {Name: '{{Project.Module}}',Extension: '.sln'}}, + {Key: 'Sln-Directory.Build.cshtml',Output: {Name: 'Directory.Build',Extension: '.props'}}, + {Key: 'Sln-Version.cshtml',Output: {Path: 'build',Name: 'version',Extension: '.props'}}, + {Key: 'Sln-Dockerfile.cshtml',Output: {Name: 'Dockerfile',Extension: ''}}, + {Key: 'Sln-DockerIgnore.cshtml',Output: {Name: '.dockerignore',Extension: ''}}, {Key: "Proj-Entity.cshtml",Output: {Path: 'src/{{Project.Module}}.Entity',Name: '{{Project.Module}}.Entity',Extension: '.csproj'}}, {Key: "Proj-Repository.cshtml",Output: {Path: 'src/{{Project.Module}}.Repository',Name: '{{Project.Module}}.Repository',Extension: '.csproj'}}, {Key: "Proj-Service.cshtml",Output: {Path: 'src/{{Project.Module}}.Service',Name: '{{Project.Module}}.Service',Extension: '.csproj'}}, @@ -104,8 +109,7 @@ Build: {Key: "API/QueryByPageResponse.cshtml",Output: {Path: 'src/{{Project.Module}}.API/Messages',Name: 'QueryByPageResponse',Extension: '.cs'}}, {Key: "API/ResponseMessage.cshtml",Output: {Path: 'src/{{Project.Module}}.API/Messages',Name: 'ResponseMessage',Extension: '.cs'}}, {Key: "SqlMapConfig.cshtml",Output: {Path: 'src/{{Project.Module}}.Repository',Name: 'SmartSqlMapConfig',Extension: '.xml'}}, - {Key: "SqlMapConfig.cshtml",Output: {Path: 'src/{{Project.Module}}.Repository',Name: 'SmartSqlMapConfig.Development',Extension: '.xml'}} - ] + {Key: "SqlMapConfig.cshtml",Output: {Path: 'src/{{Project.Module}}.Repository',Name: 'SmartSqlMapConfig.Development',Extension: '.xml'}}] Entity: Type: Table @@ -248,6 +252,20 @@ Build: WorkingDirectory: '{{Project.Output.Path}}' Args: dotnet restore +# BuildDocker: +# Type: Process +# Parameters: +# FileName: powershell +# WorkingDirectory: '{{Project.Output.Path}}' +# Args: docker build -t {{Project.Parameters.DockerImage}}:v1.0.0 . + +# RunDocker: +# Type: Process +# Parameters: +# FileName: powershell +# WorkingDirectory: '{{Project.Output.Path}}' +# Args: docker run --name {{Project.Parameters.DockerImage}} --rm -d -p 8008:80 {{Project.Parameters.DockerImage}}:v1.0.0 . + # Publish: # Type: Process # Parameters: @@ -271,7 +289,7 @@ Build: # Parameters: # FileName: C:\Program Files (x86)\Google\Chrome\Application\chrome.exe # CreateNoWindow: false -# Args: http://localhost:5000/swagger +# Args: http://localhost:8008/swagger ``` ### 构建文件参数概览 diff --git a/build/version.props b/build/version.props index 419856b..7945097 100644 --- a/build/version.props +++ b/build/version.props @@ -2,7 +2,7 @@ 2 2 - 2 + 8 $(VersionMajor).$(VersionMinor).$(VersionPatch) diff --git a/doc/SmartCode.yml b/doc/SmartCode.yml index 1d21623..35e599e 100644 --- a/doc/SmartCode.yml +++ b/doc/SmartCode.yml @@ -14,7 +14,8 @@ Output: Type: File Path: 'E:\SmartSql-Starter' Parameters: - DocDir: 'E:\SmartSql-Starter\doc' + BuildDir: 'E:\SmartSql-Starter\build' + DockerImage: 'smartsql.starter' # 构建任务 Build: @@ -24,16 +25,16 @@ Build: # Parameters: # Dirs: '.' - MakeDic-Doc: + MakeBuildDir: Type: Process Parameters: FileName: powershell - Args: mkdir '{{Project.Parameters.DocDir}}' + Args: mkdir '{{Project.Parameters.BuildDir}}' Copy: Type: Process Parameters: FileName: powershell - Args: cp '{{Project.ConfigPath}}' '{{Project.Parameters.DocDir}}' + Args: cp '{{Project.ConfigPath}}' '{{Project.Parameters.BuildDir}}' Scaffolding: Type: MultiTemplate @@ -41,6 +42,10 @@ Build: Path: '.' Parameters: Templates: [{Key: 'Sln.cshtml',Output: {Name: '{{Project.Module}}',Extension: '.sln'}}, + {Key: 'Sln-Directory.Build.cshtml',Output: {Name: 'Directory.Build',Extension: '.props'}}, + {Key: 'Sln-Version.cshtml',Output: {Path: 'build',Name: 'version',Extension: '.props'}}, + {Key: 'Sln-Dockerfile.cshtml',Output: {Name: 'Dockerfile',Extension: ''}}, + {Key: 'Sln-DockerIgnore.cshtml',Output: {Name: '.dockerignore',Extension: ''}}, {Key: "Proj-Entity.cshtml",Output: {Path: 'src/{{Project.Module}}.Entity',Name: '{{Project.Module}}.Entity',Extension: '.csproj'}}, {Key: "Proj-Repository.cshtml",Output: {Path: 'src/{{Project.Module}}.Repository',Name: '{{Project.Module}}.Repository',Extension: '.csproj'}}, {Key: "Proj-Service.cshtml",Output: {Path: 'src/{{Project.Module}}.Service',Name: '{{Project.Module}}.Service',Extension: '.csproj'}}, @@ -60,8 +65,7 @@ Build: {Key: "API/QueryByPageResponse.cshtml",Output: {Path: 'src/{{Project.Module}}.API/Messages',Name: 'QueryByPageResponse',Extension: '.cs'}}, {Key: "API/ResponseMessage.cshtml",Output: {Path: 'src/{{Project.Module}}.API/Messages',Name: 'ResponseMessage',Extension: '.cs'}}, {Key: "SqlMapConfig.cshtml",Output: {Path: 'src/{{Project.Module}}.Repository',Name: 'SmartSqlMapConfig',Extension: '.xml'}}, - {Key: "SqlMapConfig.cshtml",Output: {Path: 'src/{{Project.Module}}.Repository',Name: 'SmartSqlMapConfig.Development',Extension: '.xml'}} - ] + {Key: "SqlMapConfig.cshtml",Output: {Path: 'src/{{Project.Module}}.Repository',Name: 'SmartSqlMapConfig.Development',Extension: '.xml'}}] Entity: Type: Table @@ -204,6 +208,20 @@ Build: WorkingDirectory: '{{Project.Output.Path}}' Args: dotnet restore +# BuildDocker: +# Type: Process +# Parameters: +# FileName: powershell +# WorkingDirectory: '{{Project.Output.Path}}' +# Args: docker build -t {{Project.Parameters.DockerImage}}:v1.0.0 . + +# RunDocker: +# Type: Process +# Parameters: +# FileName: powershell +# WorkingDirectory: '{{Project.Output.Path}}' +# Args: docker run --name {{Project.Parameters.DockerImage}} --rm -d -p 8008:80 {{Project.Parameters.DockerImage}}:v1.0.0 . + # Publish: # Type: Process # Parameters: @@ -227,4 +245,4 @@ Build: # Parameters: # FileName: C:\Program Files (x86)\Google\Chrome\Application\chrome.exe # CreateNoWindow: false -# Args: http://localhost:5000/swagger \ No newline at end of file +# Args: http://localhost:8008/swagger \ No newline at end of file diff --git a/src/SmartCode.App/BuildTasks/MultiTemplateBuildTask.cs b/src/SmartCode.App/BuildTasks/MultiTemplateBuildTask.cs index d6eaf96..8ac2abe 100644 --- a/src/SmartCode.App/BuildTasks/MultiTemplateBuildTask.cs +++ b/src/SmartCode.App/BuildTasks/MultiTemplateBuildTask.cs @@ -51,15 +51,23 @@ public async Task Build(BuildContext context) { throw new SmartCodeException($"Build:{context.BuildKey},Output can not be null!"); } + + Output output = new Output + { + Path = context.Output.Path, + Mode = context.Output.Mode, + Name = context.Output.Name, + Extension = context.Output.Extension + }; if (outputKVs.Value(nameof(Output.Path), out string outputPath)) { - context.Output.Path = outputPath; + output.Path = outputPath; } if (outputKVs.Value(nameof(Output.Mode), out CreateMode outputMode)) { - context.Output.Mode = outputMode; + output.Mode = outputMode; } - if (String.IsNullOrEmpty(context.Output.Path)) + if (String.IsNullOrEmpty(output.Path)) { throw new SmartCodeException($"Build:{context.BuildKey},Template:{templateKey},can not find Output.Path!"); } @@ -67,15 +75,13 @@ public async Task Build(BuildContext context) { throw new SmartCodeException($"Build:{context.BuildKey},Template:{templateKey},can not find Output.Name!"); } - context.Output.Name = outputName; + output.Name = outputName; - if (!outputKVs.Value(nameof(Output.Extension), out string extension)) + if (outputKVs.Value(nameof(Output.Extension), out string extension)) { - throw new SmartCodeException($"Build:{context.BuildKey},Template:{templateKey},can not find Output.Extension!"); + output.Extension = extension; } - context.Output.Extension = extension; - - await _pluginManager.Resolve(context.Output.Type).Output(context); + await _pluginManager.Resolve(context.Output.Type).Output(context, output); } } } diff --git a/src/SmartCode.App/Outputs/FileOutput.cs b/src/SmartCode.App/Outputs/FileOutput.cs index 27e2b07..28f1836 100644 --- a/src/SmartCode.App/Outputs/FileOutput.cs +++ b/src/SmartCode.App/Outputs/FileOutput.cs @@ -5,6 +5,7 @@ using System.Text; using System.Threading.Tasks; using HandlebarsDotNet; +using SmartCode.Configuration; namespace SmartCode.App.Outputs { @@ -31,9 +32,12 @@ public void Initialize(IDictionary parameters) Initialized = true; } - public async Task Output(BuildContext context) + public async Task Output(BuildContext context, Output output = null) { - var output = context.Output; + if (output == null) + { + output = context.Output; + } _logger.LogInformation($"------ Mode:{output.Mode},Build:{context.BuildKey} Start! ------"); var outputPath = Handlebars.Compile(output.Path)(context); diff --git a/src/SmartCode.Generator/RazorTemplates/CSharp/Sln-Directory.Build.cshtml b/src/SmartCode.Generator/RazorTemplates/CSharp/Sln-Directory.Build.cshtml new file mode 100644 index 0000000..8b57d59 --- /dev/null +++ b/src/SmartCode.Generator/RazorTemplates/CSharp/Sln-Directory.Build.cshtml @@ -0,0 +1,18 @@ +@using SmartCode +@model BuildContext +@{ + var project = Model.Project; +} + + + + + @project.Module + 2019 @project.Module, Inc. + $(AssemblyName) + @project.Author + + + + + \ No newline at end of file diff --git a/src/SmartCode.Generator/RazorTemplates/CSharp/Sln-DockerIgnore.cshtml b/src/SmartCode.Generator/RazorTemplates/CSharp/Sln-DockerIgnore.cshtml new file mode 100644 index 0000000..037b231 --- /dev/null +++ b/src/SmartCode.Generator/RazorTemplates/CSharp/Sln-DockerIgnore.cshtml @@ -0,0 +1,9 @@ +@using SmartCode +@model BuildContext +@{ + var project = Model.Project; +} + +.vs +.git +doc/** \ No newline at end of file diff --git a/src/SmartCode.Generator/RazorTemplates/CSharp/Sln-Dockerfile.cshtml b/src/SmartCode.Generator/RazorTemplates/CSharp/Sln-Dockerfile.cshtml new file mode 100644 index 0000000..99a9660 --- /dev/null +++ b/src/SmartCode.Generator/RazorTemplates/CSharp/Sln-Dockerfile.cshtml @@ -0,0 +1,21 @@ +@using SmartCode +@model BuildContext +@{ + var project = Model.Project; + var apiProjectName = $"{project.Module}.API"; +} + +FROM mcr.microsoft.com/dotnet/core/aspnet:2.2-stretch-slim AS base +WORKDIR /app +EXPOSE 80 +EXPOSE 443 + +FROM mcr.microsoft.com/dotnet/core/sdk:2.2-stretch AS publish +WORKDIR /src +COPY /src . +RUN dotnet publish "@(apiProjectName)/@(apiProjectName).csproj" -c Release -o /app + +FROM base AS final +WORKDIR /app +COPY --from=publish /app . +ENTRYPOINT ["dotnet", "@(apiProjectName).dll"] \ No newline at end of file diff --git a/src/SmartCode.Generator/RazorTemplates/CSharp/Sln-Version.cshtml b/src/SmartCode.Generator/RazorTemplates/CSharp/Sln-Version.cshtml new file mode 100644 index 0000000..7e366f2 --- /dev/null +++ b/src/SmartCode.Generator/RazorTemplates/CSharp/Sln-Version.cshtml @@ -0,0 +1,14 @@ +@using SmartCode +@model BuildContext +@{ + var project = Model.Project; +} + + + + 1 + 0 + 0 + $(VersionMajor).$(VersionMinor).$(VersionPatch) + + diff --git a/src/SmartCode.Generator/RazorTemplates/CSharp/Sln.cshtml b/src/SmartCode.Generator/RazorTemplates/CSharp/Sln.cshtml index a745d1b..30fc2cb 100644 --- a/src/SmartCode.Generator/RazorTemplates/CSharp/Sln.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/CSharp/Sln.cshtml @@ -18,6 +18,19 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "@(project.Module).API", "sr EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "API", "API", "{20C12BB6-7202-46F4-9A92-3528FFC2B91B}" EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "build", "build", "{68E40CDE-0E75-4372-96C4-1507D50993CD}" +ProjectSection(SolutionItems) = preProject +Directory.Build.props = Directory.Build.props +build\version.props = build\version.props +build\SmartCode.yml = build\SmartCode.yml +EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "docker", "docker", "{1666CC75-624D-4AE9-84D7-7F9F338658C5}" +ProjectSection(SolutionItems) = preProject +.dockerignore = .dockerignore +Dockerfile = Dockerfile +EndProjectSection +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU diff --git a/src/SmartCode/IOutput.cs b/src/SmartCode/IOutput.cs index c4331ac..cc21bd4 100644 --- a/src/SmartCode/IOutput.cs +++ b/src/SmartCode/IOutput.cs @@ -2,11 +2,12 @@ using System.Collections.Generic; using System.Text; using System.Threading.Tasks; +using SmartCode.Configuration; namespace SmartCode { public interface IOutput : IPlugin { - Task Output(BuildContext context); + Task Output(BuildContext context, Output output = null); } } From 876e054110cfd6421bc3f93c3264f8c9cf22b6ec Mon Sep 17 00:00:00 2001 From: Ahoo Wang Date: Tue, 23 Apr 2019 16:19:20 +0800 Subject: [PATCH 030/127] add support Docker split SmartSql-version --- build/version.props | 2 +- doc/SmartCode.yml | 2 ++ .../RazorTemplates/CSharp/Proj-API.cshtml | 7 ++++++- .../CSharp/Proj-Repository.cshtml | 20 ++++++++++++++----- 4 files changed, 24 insertions(+), 7 deletions(-) diff --git a/build/version.props b/build/version.props index 7945097..c44292c 100644 --- a/build/version.props +++ b/build/version.props @@ -2,7 +2,7 @@ 2 2 - 8 + 10 $(VersionMajor).$(VersionMinor).$(VersionPatch) diff --git a/doc/SmartCode.yml b/doc/SmartCode.yml index 35e599e..2d2a63a 100644 --- a/doc/SmartCode.yml +++ b/doc/SmartCode.yml @@ -14,6 +14,8 @@ Output: Type: File Path: 'E:\SmartSql-Starter' Parameters: + SmartSqlVersion: '4.0.33' + SmartSqlSchemaVersion: '4.0.26' BuildDir: 'E:\SmartSql-Starter\build' DockerImage: 'smartsql.starter' diff --git a/src/SmartCode.Generator/RazorTemplates/CSharp/Proj-API.cshtml b/src/SmartCode.Generator/RazorTemplates/CSharp/Proj-API.cshtml index 306737f..16972cb 100644 --- a/src/SmartCode.Generator/RazorTemplates/CSharp/Proj-API.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/CSharp/Proj-API.cshtml @@ -2,6 +2,11 @@ @model BuildContext @{ var project = Model.Project; + var smartsqlVersion = "4.0.33"; + if (project.Parameters.Value("SmartSqlVersion", out string version)) + { + smartsqlVersion = version; + } } @@ -9,7 +14,7 @@ - + diff --git a/src/SmartCode.Generator/RazorTemplates/CSharp/Proj-Repository.cshtml b/src/SmartCode.Generator/RazorTemplates/CSharp/Proj-Repository.cshtml index d002fff..700b145 100644 --- a/src/SmartCode.Generator/RazorTemplates/CSharp/Proj-Repository.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/CSharp/Proj-Repository.cshtml @@ -8,6 +8,16 @@ var dbProviderAssNames = dbFactory.GetType().Assembly.FullName.Split(','); var dbProviderName = dbProviderAssNames[0]; var dbProviderVersion = dbProviderAssNames[1].Split('=')[1]; + var smartSqlVersion = "4.0.33"; + if (project.Parameters.Value("SmartSqlVersion", out string version)) + { + smartSqlVersion = version; + } + var smartSqlSchemaVersion = "4.0.26"; + if (project.Parameters.Value("SmartSqlSchemaVersion", out string schemaVersion)) + { + smartSqlSchemaVersion = schemaVersion; + } } @@ -21,15 +31,15 @@ } @if (dbSource.DbRepository.DbProvider == DbProvider.PostgreSql) { - + } else { - + } - - - + + + From 71bec3837cd122ccedcad971fa1c6ac9a5908554 Mon Sep 17 00:00:00 2001 From: rocher Date: Wed, 24 Apr 2019 15:28:12 +0800 Subject: [PATCH 031/127] add Mysql DB-Type-Map --- src/SmartCode.ETL/BuildTasks/LoadBuildTask.cs | 1 + src/SmartCode.ETL/ExtractDataSource.cs | 25 +++++++----- .../DbTypeConverter/DbTypeMap.xml | 40 +++++++++++++++++++ 3 files changed, 57 insertions(+), 9 deletions(-) diff --git a/src/SmartCode.ETL/BuildTasks/LoadBuildTask.cs b/src/SmartCode.ETL/BuildTasks/LoadBuildTask.cs index 80b6429..6e3954b 100644 --- a/src/SmartCode.ETL/BuildTasks/LoadBuildTask.cs +++ b/src/SmartCode.ETL/BuildTasks/LoadBuildTask.cs @@ -55,6 +55,7 @@ public async Task Build(BuildContext context) } var batchTable = dataSource.TransformData; batchTable.Name = tableName; + var sqlMapper = GetSqlMapper(context); context.Build.Parameters.Value(PRE_COMMAND, out string preCmd); var lastExtract = _project.GetETLLastExtract(); diff --git a/src/SmartCode.ETL/ExtractDataSource.cs b/src/SmartCode.ETL/ExtractDataSource.cs index 37853eb..3068dcd 100644 --- a/src/SmartCode.ETL/ExtractDataSource.cs +++ b/src/SmartCode.ETL/ExtractDataSource.cs @@ -1,16 +1,14 @@ using Microsoft.Extensions.Logging; using SmartCode.Configuration; +using SmartCode.ETL.Entity; +using SmartSql; using SmartSql.Abstractions; -using SmartSql.Batch; +using System; using System.Collections.Generic; -using System.Threading.Tasks; -using static SmartCode.Db.SmartSqlMapperFactory; -using System.Data; using System.Diagnostics; -using SmartSql; using System.Linq; -using System; -using SmartCode.ETL.Entity; +using System.Threading.Tasks; +using static SmartCode.Db.SmartSqlMapperFactory; namespace SmartCode.ETL { @@ -26,7 +24,8 @@ public class ExtractDataSource : IDataSource public string Name => "Extract"; public DbSet DbSet { get; set; } public DbTable TransformData { get; set; } - IETLTaskRepository _etlRepository; + + private IETLTaskRepository _etlRepository; public ExtractDataSource(Project project , ILoggerFactory loggerFactory , ILogger logger @@ -132,7 +131,15 @@ public async Task InitData() if (!String.IsNullOrEmpty(modifyTime) && extractEntity.QuerySize > 0) { - var maxModifyTime = TransformData.Rows.Max(m => m.Cells[modifyTime].Value); + var maxModifyTime = TransformData.Rows.Max(m => + { + var cell = m.Cells[modifyTime]; + if (cell.Value is DateTime dateTime) + { + return dateTime; + } + return Convert.ToDateTime(cell.Value); + }); extractEntity.MaxModifyTime = Convert.ToDateTime(maxModifyTime); } else diff --git a/src/SmartCode.Generator/DbTypeConverter/DbTypeMap.xml b/src/SmartCode.Generator/DbTypeConverter/DbTypeMap.xml index 2fb3da4..09b0453 100644 --- a/src/SmartCode.Generator/DbTypeConverter/DbTypeMap.xml +++ b/src/SmartCode.Generator/DbTypeConverter/DbTypeMap.xml @@ -300,6 +300,27 @@ + + + + + + + + + + + + + + + + + + + + + @@ -334,6 +355,25 @@ + + + + + + + + + + + + + + + + + + + From c524f8f7453df59bc1f97cbfa39e6331d4aa06a7 Mon Sep 17 00:00:00 2001 From: Ahoo Wang Date: Wed, 24 Apr 2019 17:56:09 +0800 Subject: [PATCH 032/127] update to SmartSql-v4 --- build/version.props | 2 +- .../BuildTasks/ClearBuildTask.cs | 1 + .../BuildTasks/MultiTemplateBuildTask.cs | 1 + .../BuildTasks/ProcessBuildTask.cs | 1 + src/SmartCode.App/Outputs/FileOutput.cs | 1 + src/SmartCode.App/SmartCode.App.csproj | 2 +- src/SmartCode.Db/DbProviders.cs | 66 ------------------- src/SmartCode.Db/DbRepository.cs | 10 ++- src/SmartCode.Db/DbSource.cs | 11 ++-- src/SmartCode.Db/SmartCode.Db.csproj | 10 ++- src/SmartCode.Db/SmartSqlMapperFactory.cs | 60 ++++++++--------- .../LoadToESBuildTask.cs | 42 ++++-------- .../PGETLTaskRepository.cs | 8 ++- .../SmartCode.ETL.PostgreSql.csproj | 2 +- .../SQLiteETLTaskRepository.cs | 9 +-- src/SmartCode.ETL/BatchInsertFactory.cs | 12 ++-- src/SmartCode.ETL/BuildContextExtensions.cs | 1 - src/SmartCode.ETL/BuildTasks/LoadBuildTask.cs | 63 ++++++++---------- src/SmartCode.ETL/ExtractDataSource.cs | 42 ++++-------- src/SmartCode.ETL/ProjectExtensions.cs | 1 - src/SmartCode.ETL/SmartCode.ETL.csproj | 7 +- .../TransformEngine/RazorTransformEngine.cs | 9 +-- src/SmartCode.Generator/DbTableRepository.cs | 6 +- .../DbTypeConverter/DefaultDbTypeConverter.cs | 2 +- .../Maps/Database-Oracle.xml | 9 +-- .../SqlMap-Partials/SqlMap-SqlServer.cshtml | 2 +- .../RazorTemplates/ETL/ToPGBuild.cshtml | 2 +- .../SmartCode.TemplateEngine.csproj | 2 +- src/SmartCode.Tests/DbTypeConverter_Test.cs | 5 +- src/SmartCode/AbstractPlugin.cs | 5 +- src/SmartCode/SmartCode.csproj | 2 +- .../Utilities/IDictionaryExtensions.cs | 2 +- .../WordsConverter/DefaultTokenizer.cs | 1 + .../WordsConverter/DelimiterConverter.cs | 1 + 34 files changed, 143 insertions(+), 257 deletions(-) delete mode 100644 src/SmartCode.Db/DbProviders.cs diff --git a/build/version.props b/build/version.props index c44292c..327bdfb 100644 --- a/build/version.props +++ b/build/version.props @@ -2,7 +2,7 @@ 2 2 - 10 + 20 $(VersionMajor).$(VersionMinor).$(VersionPatch) diff --git a/src/SmartCode.App/BuildTasks/ClearBuildTask.cs b/src/SmartCode.App/BuildTasks/ClearBuildTask.cs index 87a7d9f..3f73e1f 100644 --- a/src/SmartCode.App/BuildTasks/ClearBuildTask.cs +++ b/src/SmartCode.App/BuildTasks/ClearBuildTask.cs @@ -4,6 +4,7 @@ using System.IO; using System.Text; using System.Threading.Tasks; +using SmartCode.Utilities; namespace SmartCode.App.BuildTasks { diff --git a/src/SmartCode.App/BuildTasks/MultiTemplateBuildTask.cs b/src/SmartCode.App/BuildTasks/MultiTemplateBuildTask.cs index 8ac2abe..c6c020e 100644 --- a/src/SmartCode.App/BuildTasks/MultiTemplateBuildTask.cs +++ b/src/SmartCode.App/BuildTasks/MultiTemplateBuildTask.cs @@ -6,6 +6,7 @@ using System.Collections.Generic; using System.Text; using System.Threading.Tasks; +using SmartCode.Utilities; namespace SmartCode.App.BuildTasks { diff --git a/src/SmartCode.App/BuildTasks/ProcessBuildTask.cs b/src/SmartCode.App/BuildTasks/ProcessBuildTask.cs index bbd34d9..29bd3da 100644 --- a/src/SmartCode.App/BuildTasks/ProcessBuildTask.cs +++ b/src/SmartCode.App/BuildTasks/ProcessBuildTask.cs @@ -6,6 +6,7 @@ using System.Text; using System.Threading.Tasks; using HandlebarsDotNet; +using SmartCode.Utilities; namespace SmartCode.App.BuildTasks { diff --git a/src/SmartCode.App/Outputs/FileOutput.cs b/src/SmartCode.App/Outputs/FileOutput.cs index 28f1836..4d3c7db 100644 --- a/src/SmartCode.App/Outputs/FileOutput.cs +++ b/src/SmartCode.App/Outputs/FileOutput.cs @@ -6,6 +6,7 @@ using System.Threading.Tasks; using HandlebarsDotNet; using SmartCode.Configuration; +using SmartCode.Utilities; namespace SmartCode.App.Outputs { diff --git a/src/SmartCode.App/SmartCode.App.csproj b/src/SmartCode.App/SmartCode.App.csproj index e06175f..7cbecf2 100644 --- a/src/SmartCode.App/SmartCode.App.csproj +++ b/src/SmartCode.App/SmartCode.App.csproj @@ -4,7 +4,7 @@ netstandard2.0 - + diff --git a/src/SmartCode.Db/DbProviders.cs b/src/SmartCode.Db/DbProviders.cs deleted file mode 100644 index 693687b..0000000 --- a/src/SmartCode.Db/DbProviders.cs +++ /dev/null @@ -1,66 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace SmartCode.Db -{ - public class DbProviders - { - private static readonly IDictionary _dbProviders; - - static DbProviders() - { - _dbProviders = new Dictionary(StringComparer.CurrentCultureIgnoreCase); - InitDbProviders(); - } - private static void InitDbProviders() - { - _dbProviders.Add("MySql", new SmartSql.Configuration.DbProvider - { - Name = "MySql", - ParameterPrefix = "?", - Type = "MySql.Data.MySqlClient.MySqlClientFactory,MySql.Data" - }); - _dbProviders.Add("MariaDB", new SmartSql.Configuration.DbProvider - { - Name = "MariaDB", - ParameterPrefix = "?", - Type = "MySql.Data.MySqlClient.MySqlClientFactory,MySql.Data" - }); - _dbProviders.Add("PostgreSql", new SmartSql.Configuration.DbProvider - { - Name = "PostgreSql", - ParameterPrefix = "@", - Type = "Npgsql.NpgsqlFactory,Npgsql" - }); - _dbProviders.Add("SqlServer", new SmartSql.Configuration.DbProvider - { - Name = "SqlServer", - ParameterPrefix = "@", - Type = "System.Data.SqlClient.SqlClientFactory,System.Data.SqlClient" - }); - _dbProviders.Add("Oracle", new SmartSql.Configuration.DbProvider - { - Name = "Oracle", - ParameterPrefix = ":", - Type = "Oracle.ManagedDataAccess.Client.OracleClientFactory,Oracle.ManagedDataAccess" - }); - _dbProviders.Add("SQLite", new SmartSql.Configuration.DbProvider - { - Name = "SQLite", - ParameterPrefix = "$", - Type = "System.Data.SQLite.SQLiteFactory,System.Data.SQLite" - }); - } - public static SmartSql.Configuration.DbProvider GetDbProvider(string providerName) - { - if (!_dbProviders.TryGetValue(providerName, out SmartSql.Configuration.DbProvider dbProvider)) - { - var supportDbProviders = String.Join(",", _dbProviders.Select(m => m.Key)); - throw new SmartCodeException($"Can not find DbProvider:{providerName},SmartCode support DbProviders:{supportDbProviders}!"); - } - return dbProvider; - } - } -} diff --git a/src/SmartCode.Db/DbRepository.cs b/src/SmartCode.Db/DbRepository.cs index ed75af3..8bd989c 100644 --- a/src/SmartCode.Db/DbRepository.cs +++ b/src/SmartCode.Db/DbRepository.cs @@ -2,20 +2,18 @@ using System.Collections.Generic; using System.Linq; using Microsoft.Extensions.Logging; -using SmartCode.Configuration; using SmartSql; -using SmartSql.Abstractions; using SmartSql.Options; namespace SmartCode.Db { public class DbRepository : IDbRepository { - private readonly DataSource _dataSource; + private readonly Configuration.DataSource _dataSource; private readonly ILoggerFactory _loggerFactory; private readonly ILogger _logger; - public ISmartSqlMapper SqlMapper { get; private set; } + public ISqlMapper SqlMapper { get; private set; } public string DbProviderName { get; private set; } public DbProvider DbProvider => (DbProvider)Enum.Parse(typeof(DbProvider), DbProviderName); public string DbName { get; private set; } @@ -23,7 +21,7 @@ public class DbRepository : IDbRepository public string ConnectionString { get; private set; } public String SqlMapPath { get; private set; } = "Maps"; public DbRepository( - DataSource dataSource + Configuration.DataSource dataSource , ILoggerFactory loggerFactory) { _dataSource = dataSource; @@ -55,7 +53,7 @@ private void InitSqlMapper() { SqlMapper = SmartSqlMapperFactory.Create(new SmartSqlMapperFactory.CreateSmartSqlMapperOptions { - DataSource = new SmartSql.Configuration.WriteDataSource + DataSource = new DataSource { Name = DbName, ConnectionString = ConnectionString diff --git a/src/SmartCode.Db/DbSource.cs b/src/SmartCode.Db/DbSource.cs index 2383f92..84720e4 100644 --- a/src/SmartCode.Db/DbSource.cs +++ b/src/SmartCode.Db/DbSource.cs @@ -4,6 +4,8 @@ using System.Collections.Generic; using System.Text; using System.Threading.Tasks; +using SmartSql.Configuration; +using SmartSql.DataSource; namespace SmartCode.Db { @@ -24,11 +26,10 @@ Project project public virtual string Name { get; private set; } = "Db"; public DbRepository DbRepository { get; protected set; } - public SmartSql.SmartSqlOptions SmartSqlOptions => DbRepository.SqlMapper.SmartSqlOptions; - public SmartSql.SmartSqlContext SmartSqlContext => SmartSqlOptions.SmartSqlContext; - public SmartSql.Configuration.Database Database => SmartSqlContext.Database; - public SmartSql.Configuration.DbProvider DbProvider => Database.DbProvider; - public SmartSql.Configuration.WriteDataSource WriteDataSource => Database.WriteDataSource; + public SmartSqlConfig SmartSqlConfig => DbRepository.SqlMapper.SmartSqlConfig; + public Database Database => SmartSqlConfig.Database; + public SmartSql.DataSource.DbProvider DbProvider => Database.DbProvider; + public WriteDataSource WriteDataSource => Database.Write; public Project Project { get; } public ILoggerFactory LoggerFactory { get; } diff --git a/src/SmartCode.Db/SmartCode.Db.csproj b/src/SmartCode.Db/SmartCode.Db.csproj index 9fb3e46..3819d36 100644 --- a/src/SmartCode.Db/SmartCode.Db.csproj +++ b/src/SmartCode.Db/SmartCode.Db.csproj @@ -5,16 +5,14 @@ - - - + + + - + - - diff --git a/src/SmartCode.Db/SmartSqlMapperFactory.cs b/src/SmartCode.Db/SmartSqlMapperFactory.cs index c5caacd..5934d7b 100644 --- a/src/SmartCode.Db/SmartSqlMapperFactory.cs +++ b/src/SmartCode.Db/SmartSqlMapperFactory.cs @@ -1,77 +1,77 @@ using Microsoft.Extensions.Logging; using SmartSql; -using SmartSql.Abstractions; using SmartSql.Options; using System; +using System.Collections.Concurrent; using System.Collections.Generic; using System.Text; +using SmartSql.ConfigBuilder; namespace SmartCode.Db { public class SmartSqlMapperFactory { - public static ISmartSqlMapper Create(CreateSmartSqlMapperOptions options) + public static ISqlMapper Create(CreateSmartSqlMapperOptions options) { - var smartSqlDbProvider = DbProviders.GetDbProvider(options.ProviderName); SmartSqlConfigOptions smartSqlConfigOptions = new SmartSqlConfigOptions { Settings = new SmartSql.Configuration.Settings { ParameterPrefix = "$", IgnoreParameterCase = true, - IsWatchConfigFile = false, IsCacheEnabled = false, }, Database = new Database { - DbProvider = smartSqlDbProvider, + DbProvider = new SmartSql.DataSource.DbProvider { Name = options.ProviderName }, Write = options.DataSource, - Read = new List() + Reads = new List() }, - SmartSqlMaps = new List(), - TypeHandlers = new List { - new SmartSql.Configuration.TypeHandler - { - Name="Json", Type="SmartSql.TypeHandler.JsonTypeHandler,SmartSql.TypeHandler" - }, - new SmartSql.Configuration.TypeHandler + SmartSqlMaps = new List(), + TypeHandlers = new List + { + new TypeHandler { - Name="PGJson", Type="SmartSql.TypeHandler.PostgreSql.JsonTypeHandler,SmartSql.TypeHandler.PostgreSql" + Name = "Json", Type = "SmartSql.TypeHandler.JsonTypeHandler,SmartSql.TypeHandler" }, - new SmartSql.Configuration.TypeHandler + new TypeHandler { - Name="PGJsonb", Type="SmartSql.TypeHandler.PostgreSql.JsonbTypeHandler,SmartSql.TypeHandler.PostgreSql" + Name = "PGJson", + Type = "SmartSql.TypeHandler.PostgreSql.JsonTypeHandler,SmartSql.TypeHandler.PostgreSql" }, - new SmartSql.Configuration.TypeHandler + new TypeHandler { - Name="OracleBoolean", Type="SmartSql.TypeHandler.Oracle.BooleanTypeHandler,SmartSql.TypeHandler.Oracle" + Name = "PGJsonb", + Type = "SmartSql.TypeHandler.PostgreSql.JsonTypeHandler,SmartSql.TypeHandler.PostgreSql", + Properties=new Dictionary + { + { "DataTypeName","jsonb"} + } } } }; if (!String.IsNullOrEmpty(options.SqlMapPath)) { - smartSqlConfigOptions.SmartSqlMaps.Add(new SmartSql.Configuration.SmartSqlMapSource + smartSqlConfigOptions.SmartSqlMaps.Add(new SqlMapSource { Path = options.SqlMapPath, - Type = SmartSql.Configuration.SmartSqlMapSource.ResourceType.Directory + Type = ResourceType.Directory }); } - var _configLoader = new OptionConfigLoader(smartSqlConfigOptions, options.LoggerFactory); - var smartsqlOptions = new SmartSqlOptions - { - Alias = options.Alias, - ConfigPath = options.Alias, - ConfigLoader = _configLoader, - LoggerFactory = options.LoggerFactory - }; - return MapperContainer.Instance.GetSqlMapper(smartsqlOptions); + + var optionConfigBuilder = new OptionConfigBuilder(smartSqlConfigOptions, options.LoggerFactory); + return new SmartSqlBuilder() + .UseLoggerFactory(options.LoggerFactory) + .UseConfigBuilder(optionConfigBuilder) + .UseAlias(options.Alias) + .Build().SqlMapper; } public class CreateSmartSqlMapperOptions { public string Alias { get; set; } = "SmartSql"; public string ProviderName { get; set; } - public SmartSql.Configuration.WriteDataSource DataSource { get; set; } + public DataSource DataSource { get; set; } public ILoggerFactory LoggerFactory { get; set; } public string SqlMapPath { get; set; } } diff --git a/src/SmartCode.ETL.LoadToES/LoadToESBuildTask.cs b/src/SmartCode.ETL.LoadToES/LoadToESBuildTask.cs index 924b8e1..74c1e68 100644 --- a/src/SmartCode.ETL.LoadToES/LoadToESBuildTask.cs +++ b/src/SmartCode.ETL.LoadToES/LoadToESBuildTask.cs @@ -8,7 +8,7 @@ using SmartCode.Configuration; using System.Diagnostics; using System.Collections; -using SmartSql.Batch; +using System.Data; namespace SmartCode.ETL.LoadToES { @@ -58,14 +58,17 @@ public async Task Build(BuildContext context) } Stopwatch stopwatch = Stopwatch.StartNew(); #region InitColumnMapping - var colMappings = InitColumnMapping(context); - if (colMappings != null) + if (context.Build.Parameters.Value(COLUMN_MAPPING, out IEnumerable colMapps)) { - foreach (var colMapping in colMappings) + foreach (IDictionary colMappingKV in colMapps) { - if (dataSource.TransformData.Columns.ContainsKey(colMapping.Column)) + colMappingKV.EnsureValue("Column", out string colName); + colMappingKV.EnsureValue("Mapping", out string mapping); + var sourceColumn = dataSource.TransformData.Columns[colName]; + sourceColumn.ColumnName = mapping; + if (colMappingKV.Value("DataTypeName", out string dataTypeName)) { - dataSource.TransformData.Columns[colMapping.Column].Name = colMapping.Mapping; + sourceColumn.ExtendedProperties.Add("DataTypeName", dataTypeName); } } } @@ -73,13 +76,13 @@ public async Task Build(BuildContext context) #region BatchInsert var esClient = GetElasticClient(esOptions); var list = new List>(); - foreach (var row in dataSource.TransformData.Rows) + foreach (DataRow row in dataSource.TransformData.Rows) { var item = new Dictionary(); - foreach (var cellKV in row.Cells) + foreach (DataColumn dataColumn in dataSource.TransformData.Columns) { - var cellVal = cellKV.Value; - item.Add(cellVal.Column.Name, cellVal.Value); + var cellVal = row[dataColumn]; + item.Add(dataColumn.ColumnName, cellVal); } list.Add(item); } @@ -137,24 +140,7 @@ private static ESOptions InitOptions(BuildContext context) Password = password }; } - private IEnumerable InitColumnMapping(BuildContext context) - { - if (context.Build.Parameters.Value(COLUMN_MAPPING, out IEnumerable colMapps)) - { - foreach (IDictionary colMappingKV in colMapps) - { - colMappingKV.EnsureValue("Column", out string colName); - colMappingKV.EnsureValue("Mapping", out string mapping); - colMappingKV.Value("DataTypeName", out string dataTypeName); - yield return new ColumnMapping - { - Column = colName, - Mapping = mapping, - DataTypeName = dataTypeName - }; - } - } - } + private IElasticClient GetElasticClient(ESOptions esOptions) { Uri node = new Uri(esOptions.Host); diff --git a/src/SmartCode.ETL.PostgreSql/PGETLTaskRepository.cs b/src/SmartCode.ETL.PostgreSql/PGETLTaskRepository.cs index 1cf2916..34bdffa 100644 --- a/src/SmartCode.ETL.PostgreSql/PGETLTaskRepository.cs +++ b/src/SmartCode.ETL.PostgreSql/PGETLTaskRepository.cs @@ -4,7 +4,8 @@ using SmartCode.ETL.Entity; using SmartCode.Db; using Microsoft.Extensions.Logging; -using SmartSql.Abstractions; +using SmartSql; +using SmartSql.Options; namespace SmartCode.ETL.PostgreSql { @@ -16,7 +17,7 @@ public class PGETLTaskRepository : IETLTaskRepository public bool Initialized { get; private set; } public string Name => "PG"; public string Scope => "EtlTask"; - public ISmartSqlMapper SqlMapper { get; set; } + public ISqlMapper SqlMapper { get; set; } public PGETLTaskRepository(ILoggerFactory loggerFactory) { _loggerFactory = loggerFactory; @@ -24,13 +25,14 @@ public PGETLTaskRepository(ILoggerFactory loggerFactory) public void Initialize(IDictionary paramters) { paramters.EnsureValue(CONNECTION_STRING, out string connectionString); + SqlMapper = SmartSqlMapperFactory.Create(new SmartSqlMapperFactory.CreateSmartSqlMapperOptions { Alias = "PGETLRepository", LoggerFactory = _loggerFactory, ProviderName = "PostgreSql", SqlMapPath = DEFAULT_SQLMAP_PATH, - DataSource = new SmartSql.Configuration.WriteDataSource + DataSource = new DataSource { ConnectionString = connectionString, Name = "PGETL" diff --git a/src/SmartCode.ETL.PostgreSql/SmartCode.ETL.PostgreSql.csproj b/src/SmartCode.ETL.PostgreSql/SmartCode.ETL.PostgreSql.csproj index 4a48e19..2e746e5 100644 --- a/src/SmartCode.ETL.PostgreSql/SmartCode.ETL.PostgreSql.csproj +++ b/src/SmartCode.ETL.PostgreSql/SmartCode.ETL.PostgreSql.csproj @@ -1,4 +1,4 @@ - + netstandard2.0 diff --git a/src/SmartCode.ETL.SQLite/SQLiteETLTaskRepository.cs b/src/SmartCode.ETL.SQLite/SQLiteETLTaskRepository.cs index 442526e..a59ae87 100644 --- a/src/SmartCode.ETL.SQLite/SQLiteETLTaskRepository.cs +++ b/src/SmartCode.ETL.SQLite/SQLiteETLTaskRepository.cs @@ -2,10 +2,11 @@ using SmartCode.Db; using SmartCode.ETL.Entity; using SmartCode.Utilities; -using SmartSql.Abstractions; using System; using System.Collections.Generic; using System.Threading.Tasks; +using SmartSql; +using SmartSql.Options; namespace SmartCode.ETL.SQLite { @@ -18,7 +19,7 @@ public class SQLiteETLTaskRepository : IETLTaskRepository public bool Initialized { get; private set; } public string Name => "SQLite"; public string Scope => "EtlTask"; - public ISmartSqlMapper SqlMapper { get; set; } + public ISqlMapper SqlMapper { get; set; } public SQLiteETLTaskRepository(ILoggerFactory loggerFactory) { _loggerFactory = loggerFactory; @@ -26,7 +27,7 @@ public SQLiteETLTaskRepository(ILoggerFactory loggerFactory) public void Initialize(IDictionary paramters) { var connectionString = $"Data Source={AppPath.Relative(DB_NAME)};Version=3;"; - if (paramters.Value(CONNECTION_STRING, out string connStr)) + if (IDictionaryExtensions.Value(paramters, CONNECTION_STRING, out string connStr)) { connectionString = connStr; } @@ -37,7 +38,7 @@ public void Initialize(IDictionary paramters) LoggerFactory = _loggerFactory, ProviderName = "SQLite", SqlMapPath = DEFAULT_SQLMAP_PATH, - DataSource = new SmartSql.Configuration.WriteDataSource + DataSource = new DataSource { ConnectionString = connectionString, Name = "SQLiteETL" diff --git a/src/SmartCode.ETL/BatchInsertFactory.cs b/src/SmartCode.ETL/BatchInsertFactory.cs index d9e364f..c0b205b 100644 --- a/src/SmartCode.ETL/BatchInsertFactory.cs +++ b/src/SmartCode.ETL/BatchInsertFactory.cs @@ -1,30 +1,30 @@ -using SmartSql.Batch; +using SmartSql.Bulk; using SmartSql.Configuration; using System; using System.Collections.Generic; using System.Text; -using SmartSql.Abstractions; +using SmartSql; namespace SmartCode.ETL { public class BatchInsertFactory { - public static IBatchInsert Create(ISmartSqlMapper smartSqlMapper, Db.DbProvider dbProvider) + public static IBulkInsert Create(ISqlMapper sqlMapper, Db.DbProvider dbProvider) { switch (dbProvider) { case Db.DbProvider.MySql: case Db.DbProvider.MariaDB: { - return new SmartSql.Batch.MySql.BatchInsert(smartSqlMapper); + return new SmartSql.Bulk.MySql.BulkInsert(sqlMapper.SessionStore.LocalSession); } case Db.DbProvider.PostgreSql: { - return new SmartSql.Batch.PostgreSql.BatchInsert(smartSqlMapper); + return new SmartSql.Bulk.PostgreSql.BulkInsert(sqlMapper.SessionStore.LocalSession); } case Db.DbProvider.SqlServer: { - return new SmartSql.Batch.SqlServer.BatchInsert(smartSqlMapper); + return new SmartSql.Bulk.SqlServer.BulkInsert(sqlMapper.SessionStore.LocalSession); } default: { diff --git a/src/SmartCode.ETL/BuildContextExtensions.cs b/src/SmartCode.ETL/BuildContextExtensions.cs index 3b9a26a..cb46e8b 100644 --- a/src/SmartCode.ETL/BuildContextExtensions.cs +++ b/src/SmartCode.ETL/BuildContextExtensions.cs @@ -2,7 +2,6 @@ using System.Collections.Generic; using System.Text; using SmartSql; -using SmartSql.Batch; namespace SmartCode.ETL { diff --git a/src/SmartCode.ETL/BuildTasks/LoadBuildTask.cs b/src/SmartCode.ETL/BuildTasks/LoadBuildTask.cs index 6e3954b..8f25b53 100644 --- a/src/SmartCode.ETL/BuildTasks/LoadBuildTask.cs +++ b/src/SmartCode.ETL/BuildTasks/LoadBuildTask.cs @@ -1,14 +1,14 @@ using Microsoft.Extensions.Logging; using SmartCode.Configuration; using SmartCode.Db; -using SmartSql.Abstractions; -using SmartSql.Batch; +using SmartSql.Bulk; using System; using System.Collections; using System.Collections.Generic; +using System.Data; using System.Diagnostics; -using System.Text; using System.Threading.Tasks; +using SmartSql; using static SmartCode.Db.SmartSqlMapperFactory; namespace SmartCode.ETL.BuildTasks @@ -20,19 +20,19 @@ public class LoadBuildTask : IBuildTask private const string COLUMN_MAPPING = "ColumnMapping"; private const string PRE_COMMAND = "PreCommand"; private const string POST_COMMAND = "PostCommand"; - private readonly ILoggerFactory _loggerFacotry; + private readonly ILoggerFactory _loggerFactory; private readonly Project _project; private readonly IPluginManager _pluginManager; private readonly ILogger _logger; public bool Initialized => true; public string Name => "Load"; - public LoadBuildTask(ILoggerFactory loggerFacotry + public LoadBuildTask(ILoggerFactory loggerFactory , Project project , IPluginManager pluginManager , ILogger logger) { - _loggerFacotry = loggerFacotry; + _loggerFactory = loggerFactory; _project = project; _pluginManager = pluginManager; _logger = logger; @@ -54,8 +54,8 @@ public async Task Build(BuildContext context) return; } var batchTable = dataSource.TransformData; - batchTable.Name = tableName; - + batchTable.TableName = tableName; + var sqlMapper = GetSqlMapper(context); context.Build.Parameters.Value(PRE_COMMAND, out string preCmd); var lastExtract = _project.GetETLLastExtract(); @@ -72,7 +72,7 @@ public async Task Build(BuildContext context) }; try { - sqlMapper.BeginSession(); + sqlMapper.SessionStore.Open(); #region PreCmd if (!String.IsNullOrEmpty(preCmd)) { @@ -93,7 +93,7 @@ await sqlMapper.ExecuteAsync(new RequestContext #endregion #region BatchInsert var batchInsert = BatchInsertFactory.Create(sqlMapper, dbProvider); - InitColumnMapping(batchInsert, context); + InitColumnMapping(batchTable, context); batchInsert.Table = batchTable; stopwatch.Restart(); await batchInsert.InsertAsync(); @@ -124,7 +124,7 @@ await sqlMapper.ExecuteAsync(new RequestContext } finally { - sqlMapper.EndSession(); + sqlMapper.SessionStore.Dispose(); } } @@ -133,7 +133,7 @@ public void Initialize(IDictionary parameters) } - private void InitColumnMapping(IBatchInsert batchInsert, BuildContext context) + private void InitColumnMapping(DataTable bulkTable, BuildContext context) { if (context.Build.Parameters.Value(COLUMN_MAPPING, out IEnumerable colMapps)) { @@ -141,38 +141,27 @@ private void InitColumnMapping(IBatchInsert batchInsert, BuildContext context) { colMappingKV.EnsureValue("Column", out string colName); colMappingKV.EnsureValue("Mapping", out string mapping); - colMappingKV.Value("DataTypeName", out string dataTypeName); - var colMapping = new ColumnMapping + var sourceColumn = bulkTable.Columns[colName]; + sourceColumn.ColumnName = mapping; + if (colMappingKV.Value("DataTypeName", out string dataTypeName)) { - Column = colName, - Mapping = mapping, - DataTypeName = dataTypeName - }; - batchInsert.AddColumnMapping(colMapping); + sourceColumn.ExtendedProperties.Add("DataTypeName", dataTypeName); + } } } } - private ISmartSqlMapper GetSqlMapper(BuildContext context) - { - var smartSqlOptions = InitCreateSmartSqlMapperOptions(context); - return SmartSqlMapperFactory.Create(smartSqlOptions); - } - private CreateSmartSqlMapperOptions InitCreateSmartSqlMapperOptions(BuildContext context) + + private ISqlMapper GetSqlMapper(BuildContext context) { context.Build.Parameters.EnsureValue(DB_PROVIDER, out string dbProvider); context.Build.Parameters.EnsureValue("ConnectionString", out string connString); - var alias_name = $"{Name}_{context.BuildKey}"; - return new CreateSmartSqlMapperOptions - { - Alias = alias_name, - LoggerFactory = _loggerFacotry, - ProviderName = dbProvider, - DataSource = new SmartSql.Configuration.WriteDataSource - { - Name = Name, - ConnectionString = connString - } - }; + var alias_name = $"{Name}_{context.BuildKey}_{Guid.NewGuid():N}"; + return new SmartSqlBuilder() + .UseDataSource(dbProvider, connString) + .UseLoggerFactory(_loggerFactory) + .UseAlias(alias_name) + .Build().SqlMapper; } + } } diff --git a/src/SmartCode.ETL/ExtractDataSource.cs b/src/SmartCode.ETL/ExtractDataSource.cs index 3068dcd..da4ec13 100644 --- a/src/SmartCode.ETL/ExtractDataSource.cs +++ b/src/SmartCode.ETL/ExtractDataSource.cs @@ -2,9 +2,9 @@ using SmartCode.Configuration; using SmartCode.ETL.Entity; using SmartSql; -using SmartSql.Abstractions; using System; using System.Collections.Generic; +using System.Data; using System.Diagnostics; using System.Linq; using System.Threading.Tasks; @@ -22,8 +22,8 @@ public class ExtractDataSource : IDataSource public bool Initialized { get; private set; } public string Name => "Extract"; - public DbSet DbSet { get; set; } - public DbTable TransformData { get; set; } + public DataSet DataSet { get; set; } + public DataTable TransformData { get; set; } private IETLTaskRepository _etlRepository; public ExtractDataSource(Project project @@ -72,18 +72,11 @@ public async Task InitData() dataSource.Parameters.Value("ModifyTime", out string modifyTime); dataSource.Parameters.EnsureValue("Query", out string queryCmd); #region CreateSqlMapper - var smartSqlOptions = new CreateSmartSqlMapperOptions - { - LoggerFactory = _loggerFactory, - ProviderName = dbProvider, - Alias = Name, - DataSource = new SmartSql.Configuration.WriteDataSource - { - Name = Name, - ConnectionString = connString - } - }; - var sqlMapper = Create(smartSqlOptions); + var sqlMapper = new SmartSqlBuilder() + .UseAlias(Name) + .UseLoggerFactory(_loggerFactory) + .UseDataSource(dbProvider, connString) + .Build().SqlMapper; #endregion var lastExtract = await _etlRepository.GetLastExtract(_project.GetETLCode()); _project.SetETLLastExtract(lastExtract); @@ -106,8 +99,8 @@ public async Task InitData() MaxId = -1 }; Stopwatch stopwatch = Stopwatch.StartNew(); - DbSet = await sqlMapper.GetDbSetAsync(new RequestContext { RealSql = queryCmd, Request = queryParams }); - TransformData = DbSet.Tables.First(); + DataSet = await sqlMapper.GetDataSetAsync(new RequestContext { RealSql = queryCmd, Request = queryParams }); + TransformData = DataSet.Tables[0]; stopwatch.Stop(); extractEntity.QuerySize = TransformData.Rows.Count; extractEntity.QueryCommand.Taken = stopwatch.ElapsedMilliseconds; @@ -120,7 +113,7 @@ public async Task InitData() && (pkIsNumeric || autoIncrement) && extractEntity.QuerySize > 0) { - var maxId = TransformData.Rows.Max(m => m.Cells[pkColumn].Value); + var maxId = TransformData.Rows.Cast().AsParallel().Max(dr => dr[pkColumn]); extractEntity.MaxId = Convert.ToInt64(maxId); } else @@ -131,23 +124,16 @@ public async Task InitData() if (!String.IsNullOrEmpty(modifyTime) && extractEntity.QuerySize > 0) { - var maxModifyTime = TransformData.Rows.Max(m => + extractEntity.MaxModifyTime = TransformData.Rows.Cast().AsParallel().Max(dr => { - var cell = m.Cells[modifyTime]; - if (cell.Value is DateTime dateTime) - { - return dateTime; - } - return Convert.ToDateTime(cell.Value); + var cell = dr[modifyTime]; + return Convert.ToDateTime(cell); }); - extractEntity.MaxModifyTime = Convert.ToDateTime(maxModifyTime); } else { extractEntity.MaxModifyTime = lastExtract.MaxModifyTime; } - - await _etlRepository.Extract(_project.GetETKTaskId(), extractEntity); } diff --git a/src/SmartCode.ETL/ProjectExtensions.cs b/src/SmartCode.ETL/ProjectExtensions.cs index 37c2cea..46bd95e 100644 --- a/src/SmartCode.ETL/ProjectExtensions.cs +++ b/src/SmartCode.ETL/ProjectExtensions.cs @@ -4,7 +4,6 @@ using SmartCode.Configuration; using SmartCode.ETL.Entity; using SmartSql; -using SmartSql.Batch; namespace SmartCode.ETL { diff --git a/src/SmartCode.ETL/SmartCode.ETL.csproj b/src/SmartCode.ETL/SmartCode.ETL.csproj index 750eff5..aa1f492 100644 --- a/src/SmartCode.ETL/SmartCode.ETL.csproj +++ b/src/SmartCode.ETL/SmartCode.ETL.csproj @@ -5,10 +5,9 @@ - - - - + + + diff --git a/src/SmartCode.ETL/TransformEngine/RazorTransformEngine.cs b/src/SmartCode.ETL/TransformEngine/RazorTransformEngine.cs index df610a9..253fb6a 100644 --- a/src/SmartCode.ETL/TransformEngine/RazorTransformEngine.cs +++ b/src/SmartCode.ETL/TransformEngine/RazorTransformEngine.cs @@ -5,15 +5,12 @@ using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.FileProviders; using Microsoft.Extensions.ObjectPool; -using SmartCode.Configuration; -using SmartCode.TemplateEngine; using SmartCode.TemplateEngine.Impl; using SmartCode.Utilities; using System; using System.Collections.Generic; using System.Diagnostics; using System.Reflection; -using System.Text; using System.Text.Encodings.Web; using System.Threading.Tasks; @@ -24,7 +21,7 @@ public class RazorTransformEngine : ITransformEngine private const String SCRIPT = "Script"; public async Task Transform(BuildContext context) { - if (context.Build.Parameters.Value(SCRIPT, out string script) && !String.IsNullOrEmpty(script)) + if (IDictionaryExtensions.Value(context.Build.Parameters, SCRIPT, out string script) && !String.IsNullOrEmpty(script)) { using (var serviceScope = _scopeFactory.CreateScope()) { @@ -43,11 +40,11 @@ public void Initialize(IDictionary parameters) Initialized = true; if (parameters != null) { - if (parameters.Value("Name", out string name)) + if (IDictionaryExtensions.Value(parameters, "Name", out string name)) { Name = name; } - if (parameters.Value("Root", out string root)) + if (IDictionaryExtensions.Value(parameters, "Root", out string root)) { _root = root; } diff --git a/src/SmartCode.Generator/DbTableRepository.cs b/src/SmartCode.Generator/DbTableRepository.cs index fcb3a55..90bc6e1 100644 --- a/src/SmartCode.Generator/DbTableRepository.cs +++ b/src/SmartCode.Generator/DbTableRepository.cs @@ -5,7 +5,7 @@ using Microsoft.Extensions.Logging; using SmartCode.Configuration; using SmartCode.Generator.Entity; -using SmartSql.Abstractions; +using SmartSql; namespace SmartCode.Db { @@ -38,7 +38,7 @@ public async Task> QueryTable() IEnumerable
tables; try { - SqlMapper.BeginSession(); + SqlMapper.SessionStore.Open(); tables = await SqlMapper.QueryAsync
(new RequestContext { Scope = Scope, @@ -57,7 +57,7 @@ public async Task> QueryTable() } finally { - SqlMapper.EndSession(); + SqlMapper.SessionStore.Dispose(); } _logger.LogInformation($"----Db:{DbName} Provider:{DbProviderName},Tables:{tables.Count()} QueryTable End! ----"); return tables; diff --git a/src/SmartCode.Generator/DbTypeConverter/DefaultDbTypeConverter.cs b/src/SmartCode.Generator/DbTypeConverter/DefaultDbTypeConverter.cs index 4d118af..9d3e69d 100644 --- a/src/SmartCode.Generator/DbTypeConverter/DefaultDbTypeConverter.cs +++ b/src/SmartCode.Generator/DbTypeConverter/DefaultDbTypeConverter.cs @@ -66,7 +66,7 @@ public void Initialize(IDictionary parameters) { if (parameters != null) { - if (parameters.Value("XmlPath", out string xmlPath)) + if (IDictionaryExtensions.Value(parameters, "XmlPath", out string xmlPath)) { _xmlPath = xmlPath; } diff --git a/src/SmartCode.Generator/Maps/Database-Oracle.xml b/src/SmartCode.Generator/Maps/Database-Oracle.xml index 52ec303..1c9cd80 100644 --- a/src/SmartCode.Generator/Maps/Database-Oracle.xml +++ b/src/SmartCode.Generator/Maps/Database-Oracle.xml @@ -1,12 +1,5 @@  - - - - - - - SELECT @@ -23,7 +16,7 @@ FROM USER_VIEWS T LEFT JOIN USER_TAB_COMMENTS C ON T.VIEW_NAME = C.TABLE_NAME - + SELECT C.COLUMN_ID AS "Id", C.TABLE_NAME AS "TableId", diff --git a/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/SqlMap-SqlServer.cshtml b/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/SqlMap-SqlServer.cshtml index c9b67ae..f3d66fa 100644 --- a/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/SqlMap-SqlServer.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/SqlMap-SqlServer.cshtml @@ -7,7 +7,7 @@ var project = Model.Project; var dbSource = Model.GetDataSource(); var versionNo = 2008; - var sqlServerVersion = dbSource.DbRepository.SqlMapper.ExecuteScalar(new SmartSql.Abstractions.RequestContext + var sqlServerVersion = dbSource.DbRepository.SqlMapper.ExecuteScalar(new SmartSql.RequestContext { RealSql = "Select @@Version;" }); diff --git a/src/SmartCode.Generator/RazorTemplates/ETL/ToPGBuild.cshtml b/src/SmartCode.Generator/RazorTemplates/ETL/ToPGBuild.cshtml index 31c06d2..faf609a 100644 --- a/src/SmartCode.Generator/RazorTemplates/ETL/ToPGBuild.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/ETL/ToPGBuild.cshtml @@ -8,7 +8,7 @@ project.Parameters.Value("ExtractMode", out string extractMode);//Last: Full,LastMaxModifyTime,LastQueryTime,LastMaxId bool extractModeUseTime = extractMode == "LastMaxModifyTime" || extractMode == "LastQueryTime"; project.Parameters.Value("ExtractConnectionString", out string extractConnectionString); - extractConnectionString = extractConnectionString ?? dbSource.Database.WriteDataSource.ConnectionString; + extractConnectionString = extractConnectionString ?? dbSource.Database.Write.ConnectionString; project.Parameters.Value("LoadDbProvider", out string loadDbProvider); project.Parameters.Value("LoadConnectionString", out string loadConnectionString); Model.Project.Parameters.Value("ModifyTime", out string modifyTime); diff --git a/src/SmartCode.TemplateEngine/SmartCode.TemplateEngine.csproj b/src/SmartCode.TemplateEngine/SmartCode.TemplateEngine.csproj index ce6939e..5d4671a 100644 --- a/src/SmartCode.TemplateEngine/SmartCode.TemplateEngine.csproj +++ b/src/SmartCode.TemplateEngine/SmartCode.TemplateEngine.csproj @@ -4,7 +4,7 @@ netstandard2.0 - + diff --git a/src/SmartCode.Tests/DbTypeConverter_Test.cs b/src/SmartCode.Tests/DbTypeConverter_Test.cs index f146e9b..81463ad 100644 --- a/src/SmartCode.Tests/DbTypeConverter_Test.cs +++ b/src/SmartCode.Tests/DbTypeConverter_Test.cs @@ -6,6 +6,8 @@ using System.Text; using Xunit; using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Logging.Abstractions; + namespace SmartCode.Tests { public class DbTypeConverter_Test @@ -13,12 +15,11 @@ public class DbTypeConverter_Test [Fact] public void Convert() { - var logger = SmartSql.Logging.NoneLoggerFactory.Instance.CreateLogger(); var xmlPath = @"E:\Ahoo\SmartCode\src\SmartCode\DbTypeConverter\DbTypeMap.xml"; var patamters = new Dictionary { { "XmlPath",xmlPath} }; - IDbTypeConverter convert = new DefaultDbTypeConverter(logger); + IDbTypeConverter convert = new DefaultDbTypeConverter(NullLogger.Instance); convert.Initialize(patamters); var langType = convert.LanguageType(DbProvider.SqlServer, "CSharp", "int"); Assert.Equal("Int16", langType); diff --git a/src/SmartCode/AbstractPlugin.cs b/src/SmartCode/AbstractPlugin.cs index dc5fcf6..e0c99c4 100644 --- a/src/SmartCode/AbstractPlugin.cs +++ b/src/SmartCode/AbstractPlugin.cs @@ -26,10 +26,7 @@ public virtual void Initialize(IDictionary parameters) { if (parameters != null) { - if (parameters.Value(NAME_KEY, out string name)) - { - Name = name; - } + } this.Initialized = true; } diff --git a/src/SmartCode/SmartCode.csproj b/src/SmartCode/SmartCode.csproj index 090789c..1521a77 100644 --- a/src/SmartCode/SmartCode.csproj +++ b/src/SmartCode/SmartCode.csproj @@ -8,7 +8,7 @@ - + diff --git a/src/SmartCode/Utilities/IDictionaryExtensions.cs b/src/SmartCode/Utilities/IDictionaryExtensions.cs index 5d9f156..50f100a 100644 --- a/src/SmartCode/Utilities/IDictionaryExtensions.cs +++ b/src/SmartCode/Utilities/IDictionaryExtensions.cs @@ -3,7 +3,7 @@ using System.Collections.Generic; using System.Text; -namespace System.Collections.Generic +namespace SmartCode.Utilities { public static class IDictionaryExtensions { diff --git a/src/SmartCode/WordsConverter/DefaultTokenizer.cs b/src/SmartCode/WordsConverter/DefaultTokenizer.cs index b94577f..f8510c1 100644 --- a/src/SmartCode/WordsConverter/DefaultTokenizer.cs +++ b/src/SmartCode/WordsConverter/DefaultTokenizer.cs @@ -3,6 +3,7 @@ using System.Linq; using System.Text; using System.Text.RegularExpressions; +using SmartCode.Utilities; namespace SmartCode.WordsConverter { diff --git a/src/SmartCode/WordsConverter/DelimiterConverter.cs b/src/SmartCode/WordsConverter/DelimiterConverter.cs index f0de16d..72f0234 100644 --- a/src/SmartCode/WordsConverter/DelimiterConverter.cs +++ b/src/SmartCode/WordsConverter/DelimiterConverter.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using SmartCode.Utilities; namespace SmartCode.WordsConverter { From 74182107d2087b3173eea3689654ed97a8904ca9 Mon Sep 17 00:00:00 2001 From: Ahoo Wang Date: Thu, 25 Apr 2019 17:17:20 +0800 Subject: [PATCH 033/127] add git-ignore --- build/version.props | 2 +- doc/SmartCode.yml | 3 ++- src/SmartCode.CLI/SmartCode.CLI.csproj | 3 +-- .../RazorTemplates/CSharp/Sln-GitIgnore.cshtml | 9 +++++++++ 4 files changed, 13 insertions(+), 4 deletions(-) create mode 100644 src/SmartCode.Generator/RazorTemplates/CSharp/Sln-GitIgnore.cshtml diff --git a/build/version.props b/build/version.props index 327bdfb..7e2dc77 100644 --- a/build/version.props +++ b/build/version.props @@ -2,7 +2,7 @@ 2 2 - 20 + 22 $(VersionMajor).$(VersionMinor).$(VersionPatch) diff --git a/doc/SmartCode.yml b/doc/SmartCode.yml index 2d2a63a..0288ff0 100644 --- a/doc/SmartCode.yml +++ b/doc/SmartCode.yml @@ -14,7 +14,7 @@ Output: Type: File Path: 'E:\SmartSql-Starter' Parameters: - SmartSqlVersion: '4.0.33' + SmartSqlVersion: '4.0.36' SmartSqlSchemaVersion: '4.0.26' BuildDir: 'E:\SmartSql-Starter\build' DockerImage: 'smartsql.starter' @@ -48,6 +48,7 @@ Build: {Key: 'Sln-Version.cshtml',Output: {Path: 'build',Name: 'version',Extension: '.props'}}, {Key: 'Sln-Dockerfile.cshtml',Output: {Name: 'Dockerfile',Extension: ''}}, {Key: 'Sln-DockerIgnore.cshtml',Output: {Name: '.dockerignore',Extension: ''}}, + {Key: 'Sln-GitIgnore.cshtml',Output: {Name: '.gitignore',Extension: ''}}, {Key: "Proj-Entity.cshtml",Output: {Path: 'src/{{Project.Module}}.Entity',Name: '{{Project.Module}}.Entity',Extension: '.csproj'}}, {Key: "Proj-Repository.cshtml",Output: {Path: 'src/{{Project.Module}}.Repository',Name: '{{Project.Module}}.Repository',Extension: '.csproj'}}, {Key: "Proj-Service.cshtml",Output: {Path: 'src/{{Project.Module}}.Service',Name: '{{Project.Module}}.Service',Extension: '.csproj'}}, diff --git a/src/SmartCode.CLI/SmartCode.CLI.csproj b/src/SmartCode.CLI/SmartCode.CLI.csproj index 4517d7e..a077e00 100644 --- a/src/SmartCode.CLI/SmartCode.CLI.csproj +++ b/src/SmartCode.CLI/SmartCode.CLI.csproj @@ -10,8 +10,7 @@ SmartCode.CLI Ahoo Wang - 1. refactor ProcessBuildTask - 2. change Paramters -> Parameters (Broken change) + diff --git a/src/SmartCode.Generator/RazorTemplates/CSharp/Sln-GitIgnore.cshtml b/src/SmartCode.Generator/RazorTemplates/CSharp/Sln-GitIgnore.cshtml new file mode 100644 index 0000000..4446dca --- /dev/null +++ b/src/SmartCode.Generator/RazorTemplates/CSharp/Sln-GitIgnore.cshtml @@ -0,0 +1,9 @@ +@using SmartCode +@model BuildContext +@{ + var project = Model.Project; +} + +.vs +bin +obj From 71b09aaac15f8b8521c1d1bd7a1123c293582635 Mon Sep 17 00:00:00 2001 From: Ahoo Wang Date: Fri, 26 Apr 2019 11:51:38 +0800 Subject: [PATCH 034/127] update SmartSql-version --- build/version.props | 2 +- doc/SmartCode.yml | 2 +- src/SmartCode.Db/SmartCode.Db.csproj | 6 +++--- src/SmartCode.ETL/SmartCode.ETL.csproj | 6 +++--- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/build/version.props b/build/version.props index 7e2dc77..466d400 100644 --- a/build/version.props +++ b/build/version.props @@ -2,7 +2,7 @@ 2 2 - 22 + 25 $(VersionMajor).$(VersionMinor).$(VersionPatch) diff --git a/doc/SmartCode.yml b/doc/SmartCode.yml index 0288ff0..5526db9 100644 --- a/doc/SmartCode.yml +++ b/doc/SmartCode.yml @@ -14,7 +14,7 @@ Output: Type: File Path: 'E:\SmartSql-Starter' Parameters: - SmartSqlVersion: '4.0.36' + SmartSqlVersion: '4.0.38' SmartSqlSchemaVersion: '4.0.26' BuildDir: 'E:\SmartSql-Starter\build' DockerImage: 'smartsql.starter' diff --git a/src/SmartCode.Db/SmartCode.Db.csproj b/src/SmartCode.Db/SmartCode.Db.csproj index 3819d36..b916322 100644 --- a/src/SmartCode.Db/SmartCode.Db.csproj +++ b/src/SmartCode.Db/SmartCode.Db.csproj @@ -5,9 +5,9 @@ - - - + + + diff --git a/src/SmartCode.ETL/SmartCode.ETL.csproj b/src/SmartCode.ETL/SmartCode.ETL.csproj index aa1f492..2a222f7 100644 --- a/src/SmartCode.ETL/SmartCode.ETL.csproj +++ b/src/SmartCode.ETL/SmartCode.ETL.csproj @@ -5,9 +5,9 @@ - - - + + + From 8ae74d2009fb598ea164c1af6e608f05aa1f0e62 Mon Sep 17 00:00:00 2001 From: Ahoo Wang Date: Fri, 26 Apr 2019 16:07:22 +0800 Subject: [PATCH 035/127] fix ETL load Json bug --- build/version.props | 2 +- doc/SmartCode.yml | 2 +- src/SmartCode.CLI/appsettings.json | 2 +- src/SmartCode.Db/SmartCode.Db.csproj | 6 +++--- src/SmartCode.ETL/BuildTasks/LoadBuildTask.cs | 1 + src/SmartCode.ETL/SmartCode.ETL.csproj | 6 +++--- 6 files changed, 10 insertions(+), 9 deletions(-) diff --git a/build/version.props b/build/version.props index 466d400..553c7f3 100644 --- a/build/version.props +++ b/build/version.props @@ -2,7 +2,7 @@ 2 2 - 25 + 28 $(VersionMajor).$(VersionMinor).$(VersionPatch) diff --git a/doc/SmartCode.yml b/doc/SmartCode.yml index 5526db9..e5dff04 100644 --- a/doc/SmartCode.yml +++ b/doc/SmartCode.yml @@ -14,7 +14,7 @@ Output: Type: File Path: 'E:\SmartSql-Starter' Parameters: - SmartSqlVersion: '4.0.38' + SmartSqlVersion: '4.0.40' SmartSqlSchemaVersion: '4.0.26' BuildDir: 'E:\SmartSql-Starter\build' DockerImage: 'smartsql.starter' diff --git a/src/SmartCode.CLI/appsettings.json b/src/SmartCode.CLI/appsettings.json index b8065b7..8331969 100644 --- a/src/SmartCode.CLI/appsettings.json +++ b/src/SmartCode.CLI/appsettings.json @@ -90,7 +90,7 @@ "Type": "SmartCode.ETL.IETLTaskRepository,SmartCode.ETL", "ImplType": "SmartCode.ETL.PostgreSql.PGETLTaskRepository,SmartCode.ETL.PostgreSql", "Parameters": { - "ConnectionString": "Server=localhost;Port=5432;User Id=postgres;Password=SmartSql; Database=smartcode_etl;" + "ConnectionString": "Server=192.168.1.125;Port=5432;User Id=postgres;Password=51mydao.com; Database=smartcode_etl;" } }, { diff --git a/src/SmartCode.Db/SmartCode.Db.csproj b/src/SmartCode.Db/SmartCode.Db.csproj index b916322..83c5711 100644 --- a/src/SmartCode.Db/SmartCode.Db.csproj +++ b/src/SmartCode.Db/SmartCode.Db.csproj @@ -5,9 +5,9 @@ - - - + + + diff --git a/src/SmartCode.ETL/BuildTasks/LoadBuildTask.cs b/src/SmartCode.ETL/BuildTasks/LoadBuildTask.cs index 8f25b53..b4b02e6 100644 --- a/src/SmartCode.ETL/BuildTasks/LoadBuildTask.cs +++ b/src/SmartCode.ETL/BuildTasks/LoadBuildTask.cs @@ -156,6 +156,7 @@ private ISqlMapper GetSqlMapper(BuildContext context) context.Build.Parameters.EnsureValue(DB_PROVIDER, out string dbProvider); context.Build.Parameters.EnsureValue("ConnectionString", out string connString); var alias_name = $"{Name}_{context.BuildKey}_{Guid.NewGuid():N}"; + return new SmartSqlBuilder() .UseDataSource(dbProvider, connString) .UseLoggerFactory(_loggerFactory) diff --git a/src/SmartCode.ETL/SmartCode.ETL.csproj b/src/SmartCode.ETL/SmartCode.ETL.csproj index 2a222f7..3810ba4 100644 --- a/src/SmartCode.ETL/SmartCode.ETL.csproj +++ b/src/SmartCode.ETL/SmartCode.ETL.csproj @@ -5,9 +5,9 @@ - - - + + + From 2a4e9a4b106423c9018e7a61d8697f9931d2aa6b Mon Sep 17 00:00:00 2001 From: Ahoo Wang Date: Fri, 26 Apr 2019 16:10:01 +0800 Subject: [PATCH 036/127] update version --- src/SmartCode.CLI/appsettings.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/SmartCode.CLI/appsettings.json b/src/SmartCode.CLI/appsettings.json index 8331969..114d5b0 100644 --- a/src/SmartCode.CLI/appsettings.json +++ b/src/SmartCode.CLI/appsettings.json @@ -8,7 +8,7 @@ } }, "SmartCode": { - "Version": "v2.0.5", + "Version": "v2.2.28", "Plugins": [ { "Type": "SmartCode.IDataSource,SmartCode", @@ -90,7 +90,7 @@ "Type": "SmartCode.ETL.IETLTaskRepository,SmartCode.ETL", "ImplType": "SmartCode.ETL.PostgreSql.PGETLTaskRepository,SmartCode.ETL.PostgreSql", "Parameters": { - "ConnectionString": "Server=192.168.1.125;Port=5432;User Id=postgres;Password=51mydao.com; Database=smartcode_etl;" + "ConnectionString": "Server=localhost;Port=5432;User Id=postgres;Password=SmartSql; Database=smartcode_etl;" } }, { From 8d672a939f5b5bf1bf587934a1b16ae93e6292c4 Mon Sep 17 00:00:00 2001 From: rocher Date: Sun, 28 Apr 2019 17:51:00 +0800 Subject: [PATCH 037/127] Add 'double'&'mediumtext' TypeMap for MySql=>CSharp --- src/SmartCode.Generator/DbTypeConverter/DbTypeMap.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/SmartCode.Generator/DbTypeConverter/DbTypeMap.xml b/src/SmartCode.Generator/DbTypeConverter/DbTypeMap.xml index 09b0453..29042ae 100644 --- a/src/SmartCode.Generator/DbTypeConverter/DbTypeMap.xml +++ b/src/SmartCode.Generator/DbTypeConverter/DbTypeMap.xml @@ -91,6 +91,8 @@ + + From dc54d5c757030edf9e0dff2e7d6760d93ab6b99b Mon Sep 17 00:00:00 2001 From: Ahoo Wang Date: Mon, 29 Apr 2019 00:44:07 +0800 Subject: [PATCH 038/127] add ExtractDictionaryDataSource optimize LoadToESBuildTask --- src/SmartCode.CLI/appsettings.json | 4 + .../LoadToESBuildTask.cs | 50 +++--- .../AbstractExtractDataSource.cs | 142 +++++++++++++++++ src/SmartCode.ETL/ExtractDataSource.cs | 145 +++--------------- .../ExtractDictionaryDataSource.cs | 44 ++++++ 5 files changed, 238 insertions(+), 147 deletions(-) create mode 100644 src/SmartCode.ETL/AbstractExtractDataSource.cs create mode 100644 src/SmartCode.ETL/ExtractDictionaryDataSource.cs diff --git a/src/SmartCode.CLI/appsettings.json b/src/SmartCode.CLI/appsettings.json index 114d5b0..49a5090 100644 --- a/src/SmartCode.CLI/appsettings.json +++ b/src/SmartCode.CLI/appsettings.json @@ -66,6 +66,10 @@ "Type": "SmartCode.IDataSource,SmartCode", "ImplType": "SmartCode.ETL.ExtractDataSource,SmartCode.ETL" }, + { + "Type": "SmartCode.IDataSource,SmartCode", + "ImplType": "SmartCode.ETL.ExtractDictionaryDataSource,SmartCode.ETL" + }, { "Type": "SmartCode.IBuildTask,SmartCode", "ImplType": "SmartCode.ETL.BuildTasks.TransformBuildTask,SmartCode.ETL" diff --git a/src/SmartCode.ETL.LoadToES/LoadToESBuildTask.cs b/src/SmartCode.ETL.LoadToES/LoadToESBuildTask.cs index 74c1e68..8a6148d 100644 --- a/src/SmartCode.ETL.LoadToES/LoadToESBuildTask.cs +++ b/src/SmartCode.ETL.LoadToES/LoadToESBuildTask.cs @@ -40,7 +40,7 @@ public async Task Build(BuildContext context) { ESOptions esOptions = InitOptions(context); var etlRepository = _pluginManager.Resolve(_project.GetETLRepository()); - var dataSource = context.GetDataSource(); + var dataSource = context.GetDataSource(); var loadEntity = new Entity.ETLLoad { Size = 0, @@ -51,41 +51,45 @@ public async Task Build(BuildContext context) { "Type",esOptions.TypeName} } }; - if (dataSource.TransformData.Rows.Count == 0) + if (dataSource.TransformData.Count == 0) { await etlRepository.Load(_project.GetETKTaskId(), loadEntity); return; } Stopwatch stopwatch = Stopwatch.StartNew(); #region InitColumnMapping + + var colMapping = new Dictionary(); if (context.Build.Parameters.Value(COLUMN_MAPPING, out IEnumerable colMapps)) { foreach (IDictionary colMappingKV in colMapps) { colMappingKV.EnsureValue("Column", out string colName); colMappingKV.EnsureValue("Mapping", out string mapping); - var sourceColumn = dataSource.TransformData.Columns[colName]; - sourceColumn.ColumnName = mapping; - if (colMappingKV.Value("DataTypeName", out string dataTypeName)) - { - sourceColumn.ExtendedProperties.Add("DataTypeName", dataTypeName); - } + colMapping.Add(colName, mapping); } } + dataSource.TransformData = dataSource.TransformData.Select((dic) => + { + IDictionary newItem = new Dictionary(); + foreach (KeyValuePair item in dic) + { + var itemKey = item.Key; + if (colMapps != null) + { + if (colMapping.TryGetValue(itemKey, out string mapping)) + { + itemKey = mapping; + } + } + newItem.Add(itemKey,item.Value); + } + return newItem; + }).ToList(); + #endregion #region BatchInsert var esClient = GetElasticClient(esOptions); - var list = new List>(); - foreach (DataRow row in dataSource.TransformData.Rows) - { - var item = new Dictionary(); - foreach (DataColumn dataColumn in dataSource.TransformData.Columns) - { - var cellVal = row[dataColumn]; - item.Add(dataColumn.ColumnName, cellVal); - } - list.Add(item); - } var indexExResp = await esClient.IndexExistsAsync(esOptions.Index); if (!indexExResp.Exists) { @@ -98,14 +102,14 @@ public async Task Build(BuildContext context) .Type(esOptions.TypeName); if (context.Build.Parameters.Value(ID_MAPPING, out string es_id)) { - return bulkReqDesc.IndexMany(list, (bulkIdxDesc, item) => + return bulkReqDesc.IndexMany(dataSource.TransformData, (bulkIdxDesc, item) => { var idVal = item[es_id].ToString(); return bulkIdxDesc.Id(idVal); } ); } - return bulkReqDesc.IndexMany(list); + return bulkReqDesc.IndexMany(dataSource.TransformData); } ); if (esSyncResp.Errors || !esSyncResp.IsValid) @@ -114,7 +118,7 @@ public async Task Build(BuildContext context) throw new SmartCodeException($"ES.ERRORS:{esSyncResp.DebugInformation}"); } stopwatch.Stop(); - loadEntity.Size = dataSource.TransformData.Rows.Count; + loadEntity.Size = dataSource.TransformData.Count; loadEntity.Taken = stopwatch.ElapsedMilliseconds; #endregion await etlRepository.Load(_project.GetETKTaskId(), loadEntity); @@ -160,7 +164,7 @@ private IElasticClient GetElasticClient(ESOptions esOptions) return new ElasticClient(settings); } - public void Initialize(IDictionary paramters) + public void Initialize(IDictionary parameters) { } diff --git a/src/SmartCode.ETL/AbstractExtractDataSource.cs b/src/SmartCode.ETL/AbstractExtractDataSource.cs new file mode 100644 index 0000000..ab618fa --- /dev/null +++ b/src/SmartCode.ETL/AbstractExtractDataSource.cs @@ -0,0 +1,142 @@ +using System; +using System.Collections.Generic; +using System.Data; +using System.Diagnostics; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using SmartCode.Configuration; +using SmartCode.ETL.Entity; +using SmartSql; + +namespace SmartCode.ETL +{ + public abstract class AbstractExtractDataSource : IDataSource + { + private readonly Project _project; + private readonly ILoggerFactory _loggerFactory; + private readonly ILogger _logger; + private readonly IProjectBuilder _projectBuilder; + private readonly IPluginManager _pluginManager; + protected ISqlMapper SqlMapper { get; set; } + public bool Initialized { get; private set; } + public abstract string Name { get; } + + private IETLTaskRepository _etlRepository; + protected AbstractExtractDataSource(Project project + , ILoggerFactory loggerFactory + , ILogger logger + , IProjectBuilder projectBuilder + , IPluginManager pluginManager) + { + _project = project; + _loggerFactory = loggerFactory; + _logger = logger; + _projectBuilder = projectBuilder; + _pluginManager = pluginManager; + _etlRepository = _pluginManager.Resolve(_project.GetETLRepository()); + + } + private void InitProjectBuilderEvent() + { + _projectBuilder.OnStartup += _projectBuilder_OnStartup; + _projectBuilder.OnFailed += _projectBuilder_OnFailed; + _projectBuilder.OnSucceed += _projectBuilder_OnSucceed; + } + + private async Task _projectBuilder_OnSucceed(object sender, OnProjectBuildSucceedEventArgs eventArgs) + { + await _etlRepository.Success(_project.GetETKTaskId()); + } + + private async Task _projectBuilder_OnStartup(object sender, OnProjectBuildStartupEventArgs eventArgs) + { + var etlTaskId = await _etlRepository.Startup(_project.ConfigPath, _project.GetETLCode()); + _project.SetETKTaskId(etlTaskId); + } + + private async Task _projectBuilder_OnFailed(object sender, OnProjectBuildFailedEventArgs eventArgs) + { + await _etlRepository.Fail(_project.GetETKTaskId(), eventArgs.ErrorException.Message); + } + + public async Task InitData() + { + var dataSource = _project.DataSource; + dataSource.Parameters.EnsureValue("DbProvider", out string dbProvider); + dataSource.Parameters.EnsureValue("ConnectionString", out string connString); + dataSource.Parameters.Value("PKColumn", out string pkColumn); + dataSource.Parameters.Value("ModifyTime", out string modifyTime); + dataSource.Parameters.EnsureValue("Query", out string queryCmd); + #region CreateSqlMapper + SqlMapper = new SmartSqlBuilder() + .UseAlias(Name) + .UseLoggerFactory(_loggerFactory) + .UseDataSource(dbProvider, connString) + .Build().SqlMapper; + #endregion + var lastExtract = await _etlRepository.GetLastExtract(_project.GetETLCode()); + _project.SetETLLastExtract(lastExtract); + var queryParams = new Dictionary + { + { "LastMaxId",lastExtract.MaxId}, + { "LastQueryTime",lastExtract.QueryTime}, + { "LastMaxModifyTime",lastExtract.MaxModifyTime}, + }; + var extractEntity = new ETLExtract + { + QueryTime = DateTime.Now, + PKColumn = pkColumn, + QueryCommand = new ETLDbCommand + { + Command = queryCmd, + Parameters = queryParams + }, + QuerySize = -1, + MaxId = -1 + }; + Stopwatch stopwatch = Stopwatch.StartNew(); + await LoadData(new RequestContext { RealSql = queryCmd, Request = queryParams }); + stopwatch.Stop(); + extractEntity.QuerySize = GetQuerySize(); + extractEntity.QueryCommand.Taken = stopwatch.ElapsedMilliseconds; + _logger.LogWarning($"InitData,Data.Size:{extractEntity.QuerySize},Taken:{extractEntity.QueryCommand.Taken}ms!"); + + dataSource.Parameters.Value("PkIsNumeric", out bool pkIsNumeric); + dataSource.Parameters.Value("AutoIncrement", out bool autoIncrement); + + if (!String.IsNullOrEmpty(pkColumn) + && (pkIsNumeric || autoIncrement) + && extractEntity.QuerySize > 0) + { + extractEntity.MaxId = GetMaxId(pkColumn); + } + else + { + extractEntity.MaxId = lastExtract.MaxId; + } + + if (!String.IsNullOrEmpty(modifyTime) + && extractEntity.QuerySize > 0) + { + extractEntity.MaxModifyTime = GetMaxModifyTime(modifyTime); + } + else + { + extractEntity.MaxModifyTime = lastExtract.MaxModifyTime; + } + await _etlRepository.Extract(_project.GetETKTaskId(), extractEntity); + } + protected abstract Task LoadData(RequestContext requestContext); + protected abstract int GetQuerySize(); + protected abstract long GetMaxId(string pkColumn); + protected abstract DateTime GetMaxModifyTime(string modifyTime); + + public void Initialize(IDictionary parameters) + { + InitProjectBuilderEvent(); + Initialized = true; + } + } +} diff --git a/src/SmartCode.ETL/ExtractDataSource.cs b/src/SmartCode.ETL/ExtractDataSource.cs index da4ec13..27fd1f7 100644 --- a/src/SmartCode.ETL/ExtractDataSource.cs +++ b/src/SmartCode.ETL/ExtractDataSource.cs @@ -1,147 +1,44 @@ -using Microsoft.Extensions.Logging; -using SmartCode.Configuration; -using SmartCode.ETL.Entity; -using SmartSql; -using System; -using System.Collections.Generic; +using System; using System.Data; -using System.Diagnostics; using System.Linq; using System.Threading.Tasks; -using static SmartCode.Db.SmartSqlMapperFactory; +using Microsoft.Extensions.Logging; +using SmartCode.Configuration; +using SmartSql; namespace SmartCode.ETL { - public class ExtractDataSource : IDataSource + public class ExtractDataSource : AbstractExtractDataSource { - private readonly Project _project; - private readonly ILoggerFactory _loggerFactory; - private readonly ILogger _logger; - private readonly IProjectBuilder _projectBuilder; - private readonly IPluginManager _pluginManager; - - public bool Initialized { get; private set; } - public string Name => "Extract"; - public DataSet DataSet { get; set; } - public DataTable TransformData { get; set; } - - private IETLTaskRepository _etlRepository; - public ExtractDataSource(Project project - , ILoggerFactory loggerFactory - , ILogger logger - , IProjectBuilder projectBuilder - , IPluginManager pluginManager) - { - _project = project; - _loggerFactory = loggerFactory; - _logger = logger; - _projectBuilder = projectBuilder; - _pluginManager = pluginManager; - _etlRepository = _pluginManager.Resolve(_project.GetETLRepository()); - - } - private void InitProjectBuilderEvent() + public ExtractDataSource(Project project, ILoggerFactory loggerFactory, ILogger logger, + IProjectBuilder projectBuilder, IPluginManager pluginManager) : base(project, loggerFactory, logger, + projectBuilder, pluginManager) { - _projectBuilder.OnStartup += _projectBuilder_OnStartup; - _projectBuilder.OnFailed += _projectBuilder_OnFailed; - _projectBuilder.OnSucceed += _projectBuilder_OnSucceed; } - private async Task _projectBuilder_OnSucceed(object sender, OnProjectBuildSucceedEventArgs eventArgs) + public override string Name => "Extract"; + public DataSet DataSet { get; set; } + public DataTable TransformData { get; set; } + protected override async Task LoadData(RequestContext requestContext) { - await _etlRepository.Success(_project.GetETKTaskId()); + DataSet = await SqlMapper.GetDataSetAsync(requestContext); + TransformData = DataSet.Tables[0]; } - - private async Task _projectBuilder_OnStartup(object sender, OnProjectBuildStartupEventArgs eventArgs) + protected override long GetMaxId(string pkColumn) { - var etlTaskId = await _etlRepository.Startup(_project.ConfigPath, _project.GetETLCode()); - _project.SetETKTaskId(etlTaskId); + return TransformData.Rows.Cast().AsParallel().Max(dr => Convert.ToInt64(dr[pkColumn])); } - private async Task _projectBuilder_OnFailed(object sender, OnProjectBuildFailedEventArgs eventArgs) + protected override DateTime GetMaxModifyTime(string modifyTime) { - await _etlRepository.Fail(_project.GetETKTaskId(), eventArgs.ErrorException.Message); + return TransformData.Rows.Cast().AsParallel().Max(dr => Convert.ToDateTime(dr[modifyTime])); } - public async Task InitData() + protected override int GetQuerySize() { - var dataSource = _project.DataSource; - dataSource.Parameters.EnsureValue("DbProvider", out string dbProvider); - dataSource.Parameters.EnsureValue("ConnectionString", out string connString); - dataSource.Parameters.Value("PKColumn", out string pkColumn); - dataSource.Parameters.Value("ModifyTime", out string modifyTime); - dataSource.Parameters.EnsureValue("Query", out string queryCmd); - #region CreateSqlMapper - var sqlMapper = new SmartSqlBuilder() - .UseAlias(Name) - .UseLoggerFactory(_loggerFactory) - .UseDataSource(dbProvider, connString) - .Build().SqlMapper; - #endregion - var lastExtract = await _etlRepository.GetLastExtract(_project.GetETLCode()); - _project.SetETLLastExtract(lastExtract); - var queryParams = new Dictionary - { - { "LastMaxId",lastExtract.MaxId}, - { "LastQueryTime",lastExtract.QueryTime}, - { "LastMaxModifyTime",lastExtract.MaxModifyTime}, - }; - var extractEntity = new ETLExtract - { - QueryTime = DateTime.Now, - PKColumn = pkColumn, - QueryCommand = new ETLDbCommand - { - Command = queryCmd, - Parameters = queryParams - }, - QuerySize = -1, - MaxId = -1 - }; - Stopwatch stopwatch = Stopwatch.StartNew(); - DataSet = await sqlMapper.GetDataSetAsync(new RequestContext { RealSql = queryCmd, Request = queryParams }); - TransformData = DataSet.Tables[0]; - stopwatch.Stop(); - extractEntity.QuerySize = TransformData.Rows.Count; - extractEntity.QueryCommand.Taken = stopwatch.ElapsedMilliseconds; - _logger.LogWarning($"InitData,Data.Size:{extractEntity.QuerySize},Taken:{extractEntity.QueryCommand.Taken}ms!"); - - dataSource.Parameters.Value("PkIsNumeric", out bool pkIsNumeric); - dataSource.Parameters.Value("AutoIncrement", out bool autoIncrement); - - if (!String.IsNullOrEmpty(pkColumn) - && (pkIsNumeric || autoIncrement) - && extractEntity.QuerySize > 0) - { - var maxId = TransformData.Rows.Cast().AsParallel().Max(dr => dr[pkColumn]); - extractEntity.MaxId = Convert.ToInt64(maxId); - } - else - { - extractEntity.MaxId = lastExtract.MaxId; - } - - if (!String.IsNullOrEmpty(modifyTime) - && extractEntity.QuerySize > 0) - { - extractEntity.MaxModifyTime = TransformData.Rows.Cast().AsParallel().Max(dr => - { - var cell = dr[modifyTime]; - return Convert.ToDateTime(cell); - }); - } - else - { - extractEntity.MaxModifyTime = lastExtract.MaxModifyTime; - } - await _etlRepository.Extract(_project.GetETKTaskId(), extractEntity); + return TransformData.Rows.Count; } - public void Initialize(IDictionary parameters) - { - InitProjectBuilderEvent(); - Initialized = true; - } } -} +} \ No newline at end of file diff --git a/src/SmartCode.ETL/ExtractDictionaryDataSource.cs b/src/SmartCode.ETL/ExtractDictionaryDataSource.cs new file mode 100644 index 0000000..37c62e4 --- /dev/null +++ b/src/SmartCode.ETL/ExtractDictionaryDataSource.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using SmartCode.Configuration; +using SmartSql; + +namespace SmartCode.ETL +{ + public class ExtractDictionaryDataSource : AbstractExtractDataSource + { + public ExtractDictionaryDataSource(Project project, ILoggerFactory loggerFactory, + ILogger logger, + IProjectBuilder projectBuilder, IPluginManager pluginManager) : base(project, loggerFactory, logger, + projectBuilder, pluginManager) + { + } + + public IList> TransformData { get; set; } + + public override string Name => "ExtractDictionary"; + + protected override async Task LoadData(RequestContext requestContext) + { + TransformData = await SqlMapper.QueryAsync>(requestContext); + } + + protected override int GetQuerySize() + { + return TransformData.Count; + } + + protected override long GetMaxId(string pkColumn) + { + return TransformData.AsParallel().Max(dr => Convert.ToInt64(dr[pkColumn])); + } + + protected override DateTime GetMaxModifyTime(string modifyTime) + { + return TransformData.AsParallel().Max(dr => Convert.ToDateTime(dr[modifyTime])); + } + } +} \ No newline at end of file From 325973d7240ec087bd6c95bc084dad74a424e4c0 Mon Sep 17 00:00:00 2001 From: "Noah.Ji" Date: Mon, 29 Apr 2019 11:02:53 +0800 Subject: [PATCH 039/127] fix etl to es --- src/SmartCode.Db/SmartCode.Db.csproj | 8 ++++---- src/SmartCode.ETL/BuildTasks/TransformBuildTask.cs | 4 ++-- src/SmartCode.ETL/SmartCode.ETL.csproj | 6 +++--- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/SmartCode.Db/SmartCode.Db.csproj b/src/SmartCode.Db/SmartCode.Db.csproj index 83c5711..e03d5f6 100644 --- a/src/SmartCode.Db/SmartCode.Db.csproj +++ b/src/SmartCode.Db/SmartCode.Db.csproj @@ -5,12 +5,12 @@ - - - + + + - + diff --git a/src/SmartCode.ETL/BuildTasks/TransformBuildTask.cs b/src/SmartCode.ETL/BuildTasks/TransformBuildTask.cs index 82c18ac..6bef541 100644 --- a/src/SmartCode.ETL/BuildTasks/TransformBuildTask.cs +++ b/src/SmartCode.ETL/BuildTasks/TransformBuildTask.cs @@ -28,8 +28,8 @@ public async Task Build(BuildContext context) { var etlRepository = _pluginManager.Resolve(_project.GetETLRepository()); Stopwatch stopwatch = Stopwatch.StartNew(); - var dataSource = context.GetDataSource(); - if (dataSource.TransformData.Rows.Count > 0) + var dataSource = context.GetDataSource(); + if (dataSource.TransformData.Count > 0) { await _pluginManager.Resolve(DEFAULT_SCRIPT_ENGINE).Transform(context); } diff --git a/src/SmartCode.ETL/SmartCode.ETL.csproj b/src/SmartCode.ETL/SmartCode.ETL.csproj index 3810ba4..5de07d5 100644 --- a/src/SmartCode.ETL/SmartCode.ETL.csproj +++ b/src/SmartCode.ETL/SmartCode.ETL.csproj @@ -5,9 +5,9 @@ - - - + + + From caaa8f4e28f4e991cff4b4061309a624b63b0e68 Mon Sep 17 00:00:00 2001 From: Ahoo Wang Date: Mon, 29 Apr 2019 11:10:33 +0800 Subject: [PATCH 040/127] update version --- build/version.props | 2 +- doc/SmartCode.yml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/build/version.props b/build/version.props index 553c7f3..b3100dd 100644 --- a/build/version.props +++ b/build/version.props @@ -2,7 +2,7 @@ 2 2 - 28 + 30 $(VersionMajor).$(VersionMinor).$(VersionPatch) diff --git a/doc/SmartCode.yml b/doc/SmartCode.yml index e5dff04..2a10bf4 100644 --- a/doc/SmartCode.yml +++ b/doc/SmartCode.yml @@ -14,8 +14,8 @@ Output: Type: File Path: 'E:\SmartSql-Starter' Parameters: - SmartSqlVersion: '4.0.40' - SmartSqlSchemaVersion: '4.0.26' + SmartSqlVersion: '4.0.42' + SmartSqlSchemaVersion: '4.0.42' BuildDir: 'E:\SmartSql-Starter\build' DockerImage: 'smartsql.starter' From cab6af4d96bc223180ec76127e871acff4571b99 Mon Sep 17 00:00:00 2001 From: Ahoo Wang Date: Mon, 29 Apr 2019 11:12:29 +0800 Subject: [PATCH 041/127] update version --- build/version.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/version.props b/build/version.props index b3100dd..1c210fe 100644 --- a/build/version.props +++ b/build/version.props @@ -2,7 +2,7 @@ 2 2 - 30 + 32 $(VersionMajor).$(VersionMinor).$(VersionPatch) From 5a695689c35e42fe0c9e30753c64bedfd0ef841a Mon Sep 17 00:00:00 2001 From: Ahoo Wang Date: Mon, 29 Apr 2019 13:51:13 +0800 Subject: [PATCH 042/127] fix TransformBuildTask bug --- build/version.props | 2 +- src/SmartCode.ETL/AbstractExtractDataSource.cs | 16 ++++++++-------- .../BuildTasks/TransformBuildTask.cs | 4 ++-- src/SmartCode.ETL/Entity/ETLExtract.cs | 5 +++-- src/SmartCode.ETL/ExtractDataSource.cs | 6 +++--- src/SmartCode.ETL/ExtractDictionaryDataSource.cs | 6 +++--- 6 files changed, 20 insertions(+), 19 deletions(-) diff --git a/build/version.props b/build/version.props index 1c210fe..a1416fe 100644 --- a/build/version.props +++ b/build/version.props @@ -2,7 +2,7 @@ 2 2 - 32 + 33 $(VersionMajor).$(VersionMinor).$(VersionPatch) diff --git a/src/SmartCode.ETL/AbstractExtractDataSource.cs b/src/SmartCode.ETL/AbstractExtractDataSource.cs index ab618fa..2d8e36d 100644 --- a/src/SmartCode.ETL/AbstractExtractDataSource.cs +++ b/src/SmartCode.ETL/AbstractExtractDataSource.cs @@ -93,22 +93,22 @@ public async Task InitData() Command = queryCmd, Parameters = queryParams }, - QuerySize = -1, + Count = -1, MaxId = -1 }; Stopwatch stopwatch = Stopwatch.StartNew(); await LoadData(new RequestContext { RealSql = queryCmd, Request = queryParams }); stopwatch.Stop(); - extractEntity.QuerySize = GetQuerySize(); + extractEntity.Count = GetCount(); extractEntity.QueryCommand.Taken = stopwatch.ElapsedMilliseconds; - _logger.LogWarning($"InitData,Data.Size:{extractEntity.QuerySize},Taken:{extractEntity.QueryCommand.Taken}ms!"); + _logger.LogWarning($"InitData,Data.Size:{extractEntity.Count},Taken:{extractEntity.QueryCommand.Taken}ms!"); dataSource.Parameters.Value("PkIsNumeric", out bool pkIsNumeric); dataSource.Parameters.Value("AutoIncrement", out bool autoIncrement); if (!String.IsNullOrEmpty(pkColumn) && (pkIsNumeric || autoIncrement) - && extractEntity.QuerySize > 0) + && extractEntity.Count > 0) { extractEntity.MaxId = GetMaxId(pkColumn); } @@ -118,7 +118,7 @@ public async Task InitData() } if (!String.IsNullOrEmpty(modifyTime) - && extractEntity.QuerySize > 0) + && extractEntity.Count > 0) { extractEntity.MaxModifyTime = GetMaxModifyTime(modifyTime); } @@ -129,9 +129,9 @@ public async Task InitData() await _etlRepository.Extract(_project.GetETKTaskId(), extractEntity); } protected abstract Task LoadData(RequestContext requestContext); - protected abstract int GetQuerySize(); - protected abstract long GetMaxId(string pkColumn); - protected abstract DateTime GetMaxModifyTime(string modifyTime); + public abstract int GetCount(); + public abstract long GetMaxId(string pkColumn); + public abstract DateTime GetMaxModifyTime(string modifyTime); public void Initialize(IDictionary parameters) { diff --git a/src/SmartCode.ETL/BuildTasks/TransformBuildTask.cs b/src/SmartCode.ETL/BuildTasks/TransformBuildTask.cs index 6bef541..b3b19e8 100644 --- a/src/SmartCode.ETL/BuildTasks/TransformBuildTask.cs +++ b/src/SmartCode.ETL/BuildTasks/TransformBuildTask.cs @@ -28,8 +28,8 @@ public async Task Build(BuildContext context) { var etlRepository = _pluginManager.Resolve(_project.GetETLRepository()); Stopwatch stopwatch = Stopwatch.StartNew(); - var dataSource = context.GetDataSource(); - if (dataSource.TransformData.Count > 0) + var dataSource = context.GetDataSource(); + if (dataSource.GetCount()> 0) { await _pluginManager.Resolve(DEFAULT_SCRIPT_ENGINE).Transform(context); } diff --git a/src/SmartCode.ETL/Entity/ETLExtract.cs b/src/SmartCode.ETL/Entity/ETLExtract.cs index 7c700ce..1e58504 100644 --- a/src/SmartCode.ETL/Entity/ETLExtract.cs +++ b/src/SmartCode.ETL/Entity/ETLExtract.cs @@ -13,13 +13,14 @@ public class ETLExtract MaxId = -1, QueryTime = MinDateTime, MaxModifyTime = MinDateTime, - QuerySize = -1 + Count = -1 }; public string PKColumn { get; set; } + public int Count { get; set; } public long MaxId { get; set; } public DateTime MaxModifyTime { get; set; } public DateTime QueryTime { get; set; } public ETLDbCommand QueryCommand { get; set; } - public int QuerySize { get; set; } + } } diff --git a/src/SmartCode.ETL/ExtractDataSource.cs b/src/SmartCode.ETL/ExtractDataSource.cs index 27fd1f7..7be7157 100644 --- a/src/SmartCode.ETL/ExtractDataSource.cs +++ b/src/SmartCode.ETL/ExtractDataSource.cs @@ -24,17 +24,17 @@ protected override async Task LoadData(RequestContext requestContext) DataSet = await SqlMapper.GetDataSetAsync(requestContext); TransformData = DataSet.Tables[0]; } - protected override long GetMaxId(string pkColumn) + public override long GetMaxId(string pkColumn) { return TransformData.Rows.Cast().AsParallel().Max(dr => Convert.ToInt64(dr[pkColumn])); } - protected override DateTime GetMaxModifyTime(string modifyTime) + public override DateTime GetMaxModifyTime(string modifyTime) { return TransformData.Rows.Cast().AsParallel().Max(dr => Convert.ToDateTime(dr[modifyTime])); } - protected override int GetQuerySize() + public override int GetCount() { return TransformData.Rows.Count; } diff --git a/src/SmartCode.ETL/ExtractDictionaryDataSource.cs b/src/SmartCode.ETL/ExtractDictionaryDataSource.cs index 37c62e4..846cc39 100644 --- a/src/SmartCode.ETL/ExtractDictionaryDataSource.cs +++ b/src/SmartCode.ETL/ExtractDictionaryDataSource.cs @@ -26,17 +26,17 @@ protected override async Task LoadData(RequestContext requestContext) TransformData = await SqlMapper.QueryAsync>(requestContext); } - protected override int GetQuerySize() + public override int GetCount() { return TransformData.Count; } - protected override long GetMaxId(string pkColumn) + public override long GetMaxId(string pkColumn) { return TransformData.AsParallel().Max(dr => Convert.ToInt64(dr[pkColumn])); } - protected override DateTime GetMaxModifyTime(string modifyTime) + public override DateTime GetMaxModifyTime(string modifyTime) { return TransformData.AsParallel().Max(dr => Convert.ToDateTime(dr[modifyTime])); } From 35d3bef0749151b193db1bac9e80cebdf83fb310 Mon Sep 17 00:00:00 2001 From: Ahoo Wang Date: Mon, 29 Apr 2019 14:17:55 +0800 Subject: [PATCH 043/127] add error_stack_trace to ETLTask Fail --- build/version.props | 2 +- src/SmartCode.App/ProjectBuilder.cs | 2 +- src/SmartCode.CLI/Program.cs | 2 +- src/SmartCode.ETL.PostgreSql/PGETLTaskRepository.cs | 5 +++-- src/SmartCode.ETL.SQLite/SQLiteETLTaskRepository.cs | 5 +++-- src/SmartCode.ETL/AbstractExtractDataSource.cs | 2 +- src/SmartCode.ETL/IETLTaskRepository.cs | 2 +- src/SmartCode.ETL/NoneETLTaskRepository.cs | 2 +- 8 files changed, 12 insertions(+), 10 deletions(-) diff --git a/build/version.props b/build/version.props index a1416fe..0aaba8b 100644 --- a/build/version.props +++ b/build/version.props @@ -2,7 +2,7 @@ 2 2 - 33 + 34 $(VersionMajor).$(VersionMinor).$(VersionPatch) diff --git a/src/SmartCode.App/ProjectBuilder.cs b/src/SmartCode.App/ProjectBuilder.cs index 02c07e9..149241f 100644 --- a/src/SmartCode.App/ProjectBuilder.cs +++ b/src/SmartCode.App/ProjectBuilder.cs @@ -72,7 +72,7 @@ public async Task Build() Context = buildContext, ErrorException = ex }); - throw ex; + throw; } } diff --git a/src/SmartCode.CLI/Program.cs b/src/SmartCode.CLI/Program.cs index 7ff05d0..7970469 100644 --- a/src/SmartCode.CLI/Program.cs +++ b/src/SmartCode.CLI/Program.cs @@ -50,7 +50,7 @@ static async Task Main(string[] args) } catch (Exception ex) { - throw ex; + throw; } finally { diff --git a/src/SmartCode.ETL.PostgreSql/PGETLTaskRepository.cs b/src/SmartCode.ETL.PostgreSql/PGETLTaskRepository.cs index 34bdffa..4f20172 100644 --- a/src/SmartCode.ETL.PostgreSql/PGETLTaskRepository.cs +++ b/src/SmartCode.ETL.PostgreSql/PGETLTaskRepository.cs @@ -55,7 +55,7 @@ public Task Extract(long etlTaskId, ETLExtract extract) }); } - public Task Fail(long etlTaskId, string errMsg) + public Task Fail(long etlTaskId, Exception errorException) { return SqlMapper.ExecuteAsync(new RequestContext { @@ -67,7 +67,8 @@ public Task Fail(long etlTaskId, string errMsg) Status = ETLTaskStatus.Failed, ExtendData = new Dictionary { - { "error_msg",errMsg} + { "error_msg",errorException.Message}, + { "stack_trace",errorException.StackTrace} } } }); diff --git a/src/SmartCode.ETL.SQLite/SQLiteETLTaskRepository.cs b/src/SmartCode.ETL.SQLite/SQLiteETLTaskRepository.cs index a59ae87..e5a9ce8 100644 --- a/src/SmartCode.ETL.SQLite/SQLiteETLTaskRepository.cs +++ b/src/SmartCode.ETL.SQLite/SQLiteETLTaskRepository.cs @@ -61,7 +61,7 @@ public Task Extract(long etlTaskId, ETLExtract extract) }); } - public Task Fail(long etlTaskId, string errMsg) + public Task Fail(long etlTaskId, Exception errorException) { return SqlMapper.ExecuteAsync(new RequestContext { @@ -73,7 +73,8 @@ public Task Fail(long etlTaskId, string errMsg) Status = ETLTaskStatus.Failed, ExtendData = new Dictionary { - { "error_msg",errMsg} + { "error_msg",errorException.Message}, + { "stack_trace",errorException.StackTrace} } } }); diff --git a/src/SmartCode.ETL/AbstractExtractDataSource.cs b/src/SmartCode.ETL/AbstractExtractDataSource.cs index 2d8e36d..9bdd143 100644 --- a/src/SmartCode.ETL/AbstractExtractDataSource.cs +++ b/src/SmartCode.ETL/AbstractExtractDataSource.cs @@ -58,7 +58,7 @@ private async Task _projectBuilder_OnStartup(object sender, OnProjectBuildStartu private async Task _projectBuilder_OnFailed(object sender, OnProjectBuildFailedEventArgs eventArgs) { - await _etlRepository.Fail(_project.GetETKTaskId(), eventArgs.ErrorException.Message); + await _etlRepository.Fail(_project.GetETKTaskId(), eventArgs.ErrorException); } public async Task InitData() diff --git a/src/SmartCode.ETL/IETLTaskRepository.cs b/src/SmartCode.ETL/IETLTaskRepository.cs index 9540dfe..6d86732 100644 --- a/src/SmartCode.ETL/IETLTaskRepository.cs +++ b/src/SmartCode.ETL/IETLTaskRepository.cs @@ -14,7 +14,7 @@ public interface IETLTaskRepository : IPlugin Task Load(long etlTaskId, ETLLoad load); Task GetLastTask(string code); Task GetLastExtract(string code); - Task Fail(long etlTaskId, string errMsg); + Task Fail(long etlTaskId, Exception errorException); Task Success(long etlTaskId); } } diff --git a/src/SmartCode.ETL/NoneETLTaskRepository.cs b/src/SmartCode.ETL/NoneETLTaskRepository.cs index 8685561..04e34af 100644 --- a/src/SmartCode.ETL/NoneETLTaskRepository.cs +++ b/src/SmartCode.ETL/NoneETLTaskRepository.cs @@ -16,7 +16,7 @@ public Task Extract(long etlTaskId, ETLExtract extract) { return Task.CompletedTask; } - public Task Fail(long etlTaskId, string errMsg) + public Task Fail(long etlTaskId, Exception errorException) { return Task.CompletedTask; } From 86be94965b8178be569c569c927f965e8b7eb3c2 Mon Sep 17 00:00:00 2001 From: "Noah.Ji" Date: Mon, 29 Apr 2019 15:41:20 +0800 Subject: [PATCH 044/127] fix datasource init status --- src/SmartCode.ETL/AbstractExtractDataSource.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/SmartCode.ETL/AbstractExtractDataSource.cs b/src/SmartCode.ETL/AbstractExtractDataSource.cs index 9bdd143..a826eda 100644 --- a/src/SmartCode.ETL/AbstractExtractDataSource.cs +++ b/src/SmartCode.ETL/AbstractExtractDataSource.cs @@ -135,8 +135,8 @@ public async Task InitData() public void Initialize(IDictionary parameters) { - InitProjectBuilderEvent(); Initialized = true; + InitProjectBuilderEvent(); } } } From 16e2ea7db50bf78ebebc106253d416d0516464ce Mon Sep 17 00:00:00 2001 From: "Noah.Ji" Date: Mon, 29 Apr 2019 16:39:16 +0800 Subject: [PATCH 045/127] fix ExtractDataSource Init bug --- build/version.props | 2 +- src/SmartCode.ETL/AbstractExtractDataSource.cs | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/build/version.props b/build/version.props index 0aaba8b..3e7d6f4 100644 --- a/build/version.props +++ b/build/version.props @@ -2,7 +2,7 @@ 2 2 - 34 + 36 $(VersionMajor).$(VersionMinor).$(VersionPatch) diff --git a/src/SmartCode.ETL/AbstractExtractDataSource.cs b/src/SmartCode.ETL/AbstractExtractDataSource.cs index a826eda..f6ff135 100644 --- a/src/SmartCode.ETL/AbstractExtractDataSource.cs +++ b/src/SmartCode.ETL/AbstractExtractDataSource.cs @@ -97,7 +97,7 @@ public async Task InitData() MaxId = -1 }; Stopwatch stopwatch = Stopwatch.StartNew(); - await LoadData(new RequestContext { RealSql = queryCmd, Request = queryParams }); + await LoadData(new RequestContext { RealSql = queryCmd, Request = queryParams }); stopwatch.Stop(); extractEntity.Count = GetCount(); extractEntity.QueryCommand.Taken = stopwatch.ElapsedMilliseconds; @@ -136,7 +136,10 @@ public async Task InitData() public void Initialize(IDictionary parameters) { Initialized = true; - InitProjectBuilderEvent(); + if (Name == _project.DataSource.Name) + { + InitProjectBuilderEvent(); + } } } } From a21a47820ff63c3c5176ddc48ee50aee5243ab80 Mon Sep 17 00:00:00 2001 From: Ahoo Wang Date: Tue, 30 Apr 2019 11:40:24 +0800 Subject: [PATCH 046/127] fix ProjectBuilder bug --- build/version.props | 2 +- src/SmartCode.App/ProjectBuilder.cs | 26 +++++++++++++++----------- 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/build/version.props b/build/version.props index 3e7d6f4..d692ba6 100644 --- a/build/version.props +++ b/build/version.props @@ -2,7 +2,7 @@ 2 2 - 36 + 38 $(VersionMajor).$(VersionMinor).$(VersionPatch) diff --git a/src/SmartCode.App/ProjectBuilder.cs b/src/SmartCode.App/ProjectBuilder.cs index 149241f..971baef 100644 --- a/src/SmartCode.App/ProjectBuilder.cs +++ b/src/SmartCode.App/ProjectBuilder.cs @@ -34,7 +34,8 @@ public async Task Build() try { var dataSource = _pluginManager.Resolve(_project.DataSource.Name); - await OnStartup?.Invoke(this, new OnProjectBuildStartupEventArgs { Project = _project }); + if (OnStartup != null) + await OnStartup.Invoke(this, new OnProjectBuildStartupEventArgs { Project = _project }); await dataSource.InitData(); foreach (var buildKV in _project.BuildTasks) { @@ -59,19 +60,22 @@ public async Task Build() await _pluginManager.Resolve(buildKV.Value.Type).Build(buildContext); _logger.LogInformation($"-------- BuildTask:{buildKV.Key} End! ---------"); } - await OnSucceed?.Invoke(this, new OnProjectBuildSucceedEventArgs - { - Project = _project - }); + + if (OnSucceed != null) + await OnSucceed.Invoke(this, new OnProjectBuildSucceedEventArgs + { + Project = _project + }); } catch (Exception ex) { - await OnFailed?.Invoke(this, new OnProjectBuildFailedEventArgs - { - Project = _project, - Context = buildContext, - ErrorException = ex - }); + if (OnFailed != null) + await OnFailed.Invoke(this, new OnProjectBuildFailedEventArgs + { + Project = _project, + Context = buildContext, + ErrorException = ex + }); throw; } } From 4a322a2303b35074fdd85c5107899d32727a19cc Mon Sep 17 00:00:00 2001 From: Ahoo Wang Date: Tue, 30 Apr 2019 15:33:01 +0800 Subject: [PATCH 047/127] add support pull git template --- build/version.props | 2 +- .../BuildTasks/ProcessBuildTask.cs | 56 ++++++----- src/SmartCode.App/SmartCodeApp.cs | 1 + src/SmartCode.CLI/Program.cs | 47 +-------- src/SmartCode.CLI/SmartCode.CLI.csproj | 1 + src/SmartCode.CLI/SmartCodeCommand.cs | 98 +++++++++++++++++++ 6 files changed, 135 insertions(+), 70 deletions(-) create mode 100644 src/SmartCode.CLI/SmartCodeCommand.cs diff --git a/build/version.props b/build/version.props index d692ba6..126e81c 100644 --- a/build/version.props +++ b/build/version.props @@ -2,7 +2,7 @@ 2 2 - 38 + 40 $(VersionMajor).$(VersionMinor).$(VersionPatch) diff --git a/src/SmartCode.App/BuildTasks/ProcessBuildTask.cs b/src/SmartCode.App/BuildTasks/ProcessBuildTask.cs index 29bd3da..8929ab0 100644 --- a/src/SmartCode.App/BuildTasks/ProcessBuildTask.cs +++ b/src/SmartCode.App/BuildTasks/ProcessBuildTask.cs @@ -19,7 +19,6 @@ public class ProcessBuildTask : IBuildTask const string ARGS = "Args"; const string TIMEOUT = "Timeout"; private readonly ILogger _logger; - const int DEFAULT_TIME_OUT = 30 * 1000; const bool DEFAULT_CREATE_NO_WINDOW = true; public bool Initialized => true; @@ -29,7 +28,7 @@ public ProcessBuildTask(ILogger logger) _logger = logger; } - public async Task Build(BuildContext context) + public Task Build(BuildContext context) { if (!context.Build.Parameters.Value(FILE_NAME, out string fileName)) { @@ -70,6 +69,16 @@ public async Task Build(BuildContext context) _logger.LogDebug($"--------Process.FileName:{startInfo.FileName},Args:{startInfo.Arguments} Start--------"); using (var process = Process.Start(startInfo)) { + if (startInfo.RedirectStandardOutput) + { + process.OutputDataReceived += Process_OutputDataReceived; + process.BeginOutputReadLine(); + } + if (startInfo.RedirectStandardError) + { + process.ErrorDataReceived += Process_ErrorDataReceived; + process.BeginErrorReadLine(); + } if (context.Build.Parameters.Value(WRITE_LINES, out IEnumerable lines)) { foreach (var line in lines) @@ -79,37 +88,34 @@ public async Task Build(BuildContext context) process.StandardInput.WriteLine(lineCommand); } } - if (startInfo.RedirectStandardOutput) - { - var standardOutput = await process.StandardOutput.ReadToEndAsync(); - if (!String.IsNullOrEmpty(standardOutput)) - { - _logger.LogDebug("StandardOutput start"); - _logger.LogDebug(standardOutput); - _logger.LogDebug("StandardOutput end"); - } - } - if (startInfo.RedirectStandardError) + + if (!(context.Build.Parameters.Value(nameof(Process.WaitForExit), out bool waitForExit) + && !waitForExit)) { - var standardError = await process.StandardError.ReadToEndAsync(); - if (!String.IsNullOrEmpty(standardError)) + if (context.Build.Parameters.Value(TIMEOUT, out int _timeout)) { - _logger.LogDebug("StandardError start"); - _logger.LogDebug(standardError); - _logger.LogDebug("StandardError end"); + process.WaitForExit(_timeout); } - } - if (!(context.Build.Parameters.Value(nameof(Process.WaitForExit), out bool waitForExit) && !waitForExit)) - { - var timeOut = DEFAULT_TIME_OUT; - if (context.Build.Parameters.Value(TIMEOUT, out int _timeout)) + else { - timeOut = _timeout; + process.WaitForExit(); } - process.WaitForExit(timeOut); } _logger.LogDebug($"--------Process.FileName:{startInfo.FileName},Args:{startInfo.Arguments},Taken:{process.TotalProcessorTime.TotalMilliseconds} End--------"); } + return Task.CompletedTask; + } + + private void Process_ErrorDataReceived(object sender, DataReceivedEventArgs e) + { + if (!string.IsNullOrEmpty(e.Data)) + Console.WriteLine(e.Data); + } + + private void Process_OutputDataReceived(object sender, DataReceivedEventArgs e) + { + if (!string.IsNullOrEmpty(e.Data)) + Console.WriteLine(e.Data); } public void Initialize(IDictionary parameters) diff --git a/src/SmartCode.App/SmartCodeApp.cs b/src/SmartCode.App/SmartCodeApp.cs index 06d2488..28f6746 100644 --- a/src/SmartCode.App/SmartCodeApp.cs +++ b/src/SmartCode.App/SmartCodeApp.cs @@ -97,6 +97,7 @@ public async Task Run() catch (SmartCodeException scEx) { Logger.LogError(new EventId(scEx.HResult), scEx, scEx.Message); + throw; } } diff --git a/src/SmartCode.CLI/Program.cs b/src/SmartCode.CLI/Program.cs index 7970469..fa00641 100644 --- a/src/SmartCode.CLI/Program.cs +++ b/src/SmartCode.CLI/Program.cs @@ -6,56 +6,15 @@ using System.Text; using System.Threading; using System.IO; +using McMaster.Extensions.CommandLineUtils; namespace SmartCode.CLI { class Program { - /// - /// 默认配置文件路径 - /// - static string DEFAULT_CONFIG_PATH = AppPath.Relative("SmartCode.yml"); - - static async Task Main(string[] args) + static async Task Main(string[] args) { - var configPath = String.Empty; - if (args.Length > 0) - { - configPath = args[0]; - } - Console.ForegroundColor = ConsoleColor.Green; - Console.WriteLine("------------ SmartCode Build Start! --------------"); - - if (String.IsNullOrEmpty(configPath)) - { - Console.ForegroundColor = ConsoleColor.White; - Console.WriteLine("Please enter the path to build configuration file:"); - configPath = Console.ReadLine(); - if (String.IsNullOrEmpty(configPath)) - { - Console.ForegroundColor = ConsoleColor.Yellow; - Console.WriteLine("------- Not Find ConfigPath Arg! -------"); - Console.ForegroundColor = ConsoleColor.Magenta; - Console.WriteLine($"------- Use default config :{DEFAULT_CONFIG_PATH}! -------"); - configPath = DEFAULT_CONFIG_PATH; - } - } - try - { - SmartCodeApp app = new DefaultSmartCodeAppBuilder().Build(configPath); - await app.Run(); - Thread.Sleep(200);//Wait for Logger - Console.ForegroundColor = ConsoleColor.Green; - Console.WriteLine($"------------ SmartCode Build End! Output:[{app.Project.Output?.Path}] --------------"); - } - catch (Exception ex) - { - throw; - } - finally - { - Console.ResetColor(); - } + await CommandLineApplication.ExecuteAsync(args); } } } diff --git a/src/SmartCode.CLI/SmartCode.CLI.csproj b/src/SmartCode.CLI/SmartCode.CLI.csproj index a077e00..3f5c6c2 100644 --- a/src/SmartCode.CLI/SmartCode.CLI.csproj +++ b/src/SmartCode.CLI/SmartCode.CLI.csproj @@ -14,6 +14,7 @@ + diff --git a/src/SmartCode.CLI/SmartCodeCommand.cs b/src/SmartCode.CLI/SmartCodeCommand.cs new file mode 100644 index 0000000..451763b --- /dev/null +++ b/src/SmartCode.CLI/SmartCodeCommand.cs @@ -0,0 +1,98 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Reflection; +using System.Text; +using System.Threading.Tasks; +using McMaster.Extensions.CommandLineUtils; +using SmartCode.App; +using SmartCode.Utilities; + +namespace SmartCode.CLI +{ + [Subcommand(typeof(MarketCommand))] + [VersionOptionFromMember("-v|--version", MemberName = nameof(GetVersion))] + public class SmartCodeCommand + { + /// + /// 默认配置文件路径 + /// + static string DEFAULT_CONFIG_PATH = AppPath.Relative("SmartCode.yml"); + + [Argument(0, Description = "Config Path")] + [FileExists] + public String ConfigPath { get; set; } + + private async Task OnExecute() + { + if (String.IsNullOrEmpty(ConfigPath)) + { + var useDefaultConfig = Prompt.GetYesNo($"If you do not enter ConfigPath, you will use the default configuration:{DEFAULT_CONFIG_PATH}", true); + ConfigPath = useDefaultConfig ? DEFAULT_CONFIG_PATH + : Prompt.GetString("Please enter the path to build configuration file:"); + } + + SmartCodeApp app = new DefaultSmartCodeAppBuilder().Build(ConfigPath); + await app.Run(); + } + private static string GetVersion() + => typeof(SmartCodeCommand).Assembly.GetCustomAttribute().InformationalVersion; + [Command(name: "pull",Description = "Pull Git Template.")] + public class MarketCommand + { + private readonly IConsole _console; + + public MarketCommand(IConsole console) + { + _console = console; + } + + [Option(Description = "Source Path")] + public String Source { get; set; } + [Option(Description = "Target Path")] + public String Target { get; set; } + + private string ParseGitArgs() + { + var toPath = Path.Combine(AppContext.BaseDirectory, "RazorTemplates", Target); + return $"clone --progress -v \"{Source}\" \"{toPath}\""; + } + + private void OnExecute(IConsole console) + { + var startInfo = new ProcessStartInfo("git") + { + UseShellExecute = false, + RedirectStandardInput = true, + RedirectStandardOutput = true, + RedirectStandardError = true, + CreateNoWindow = true, + ErrorDialog = true, + Arguments = ParseGitArgs() + }; + + using (var process = Process.Start(startInfo)) + { + process.OutputDataReceived += Process_OutputDataReceived; ; + process.ErrorDataReceived += Process_ErrorDataReceived; ; + process.BeginOutputReadLine(); + process.BeginErrorReadLine(); + process.WaitForExit(); + } + } + + private void Process_ErrorDataReceived(object sender, DataReceivedEventArgs e) + { + if (!string.IsNullOrEmpty(e.Data)) + _console.WriteLine(e.Data); + } + + private void Process_OutputDataReceived(object sender, DataReceivedEventArgs e) + { + if (!string.IsNullOrEmpty(e.Data)) + _console.WriteLine(e.Data); + } + } + } +} From 1897c818be8b40a82f76b40c5a9b252728f66f5a Mon Sep 17 00:00:00 2001 From: Ahoo Wang Date: Tue, 30 Apr 2019 16:36:24 +0800 Subject: [PATCH 048/127] add support Absolute Path Template --- build/version.props | 2 +- .../Impl/OfficialRazorTemplateEngine.cs | 31 +++++++++++++++++-- 2 files changed, 29 insertions(+), 4 deletions(-) diff --git a/build/version.props b/build/version.props index 126e81c..fb77cd3 100644 --- a/build/version.props +++ b/build/version.props @@ -2,7 +2,7 @@ 2 2 - 40 + 42 $(VersionMajor).$(VersionMinor).$(VersionPatch) diff --git a/src/SmartCode.TemplateEngine/Impl/OfficialRazorTemplateEngine.cs b/src/SmartCode.TemplateEngine/Impl/OfficialRazorTemplateEngine.cs index 463f690..65803a3 100644 --- a/src/SmartCode.TemplateEngine/Impl/OfficialRazorTemplateEngine.cs +++ b/src/SmartCode.TemplateEngine/Impl/OfficialRazorTemplateEngine.cs @@ -1,6 +1,8 @@ //******************************* // Thx https://github.com/aspnet/Entropy/tree/master/samples/Mvc.RenderViewToString //******************************* + +using System; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Hosting.Internal; using Microsoft.AspNetCore.Mvc.Razor; @@ -11,17 +13,21 @@ using SmartCode.Utilities; using System.Collections.Generic; using System.Diagnostics; +using System.IO; using System.Reflection; using System.Text.Encodings.Web; using System.Threading.Tasks; +using Microsoft.Extensions.FileProviders.Physical; namespace SmartCode.TemplateEngine.Impl { public class OfficialRazorTemplateEngine : ITemplateEngine { + private const string TEMP = ".temp"; public bool Initialized { get; private set; } public string Name { get; private set; } = "Razor"; private string _root = AppPath.Relative("RazorTemplates"); + private string _temp; private IServiceScopeFactory _scopeFactory; public void Initialize(IDictionary parameters) { @@ -37,15 +43,34 @@ public void Initialize(IDictionary parameters) _root = root; } } + _temp = Path.Combine(_root, TEMP); + if (!Directory.Exists(_temp)) + { + Directory.CreateDirectory(_temp); + } InitializeServices(); } - public Task Render(BuildContext context) + public async Task Render(BuildContext context) { using (var serviceScope = _scopeFactory.CreateScope()) { var helper = serviceScope.ServiceProvider.GetRequiredService(); - return helper.RenderViewToStringAsync(context.Build.TemplateEngine.FullPath, context); + var viewPath = context.Build.TemplateEngine.FullPath; + if (Path.IsPathRooted(viewPath)) + { + var tempFileName = $"{Path.GetFileNameWithoutExtension(viewPath)}-{Guid.NewGuid():N}{Path.GetExtension(viewPath)}"; + var destFileName = Path.Combine(_temp, tempFileName); + File.Copy(context.Build.TemplateEngine.FullPath, destFileName); + viewPath = Path.Combine(TEMP, tempFileName); + var result = await helper.RenderViewToStringAsync(viewPath, context); + File.Delete(destFileName); + return result; + } + else + { + return await helper.RenderViewToStringAsync(viewPath, context); + } } } @@ -58,7 +83,7 @@ private void InitializeServices() private IServiceCollection ConfigureDefaultServices() { var services = new ServiceCollection(); - IFileProvider fileProvider = new PhysicalFileProvider(_root); + IFileProvider fileProvider = new PhysicalFileProvider(_root, ExclusionFilters.None); services.AddSingleton(new HostingEnvironment { ApplicationName = Assembly.GetEntryAssembly().GetName().Name, From 85a3ecd7b5be46c3f0a13d36bec04913a43da8c1 Mon Sep 17 00:00:00 2001 From: Ahoo Wang Date: Mon, 6 May 2019 18:14:26 +0800 Subject: [PATCH 049/127] fix PKColumn.Name not equal to "Id" bug. Ref https://github.com/dotnetcore/SmartCode/issues/28 --- build/version.props | 2 +- .../CSharp/API/APIController.cshtml | 10 ++--- .../RazorTemplates/CSharp/Proj-API.cshtml | 2 +- .../CSharp/Proj-Repository.cshtml | 4 +- .../RazorTemplates/CSharp/Repository.cshtml | 45 ++++++++++++++++++- .../RazorTemplates/CSharp/Service.cshtml | 8 +++- 6 files changed, 58 insertions(+), 13 deletions(-) diff --git a/build/version.props b/build/version.props index fb77cd3..7e4069d 100644 --- a/build/version.props +++ b/build/version.props @@ -2,7 +2,7 @@ 2 2 - 42 + 44 $(VersionMajor).$(VersionMinor).$(VersionPatch) diff --git a/src/SmartCode.Generator/RazorTemplates/CSharp/API/APIController.cshtml b/src/SmartCode.Generator/RazorTemplates/CSharp/API/APIController.cshtml index d5ae81b..645f7da 100644 --- a/src/SmartCode.Generator/RazorTemplates/CSharp/API/APIController.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/CSharp/API/APIController.cshtml @@ -44,15 +44,15 @@ namespace @(project.Module).API.Controllers Body = @(serviceName).Insert(@entityCamelName) }; } - [HttpPost] - public ResponseMessageWrap@("") DeleteById([FromBody]@pkType id) + [HttpDelete] + public ResponseMessageWrap@("") DeleteById(@pkType id) { return new ResponseMessageWrap@("") { Body = @(serviceName).DeleteById(id) }; } - [HttpPost] + [HttpPut] public ResponseMessageWrap@("") Update([FromBody]@entityName @entityCamelName) { return new ResponseMessageWrap@("") @@ -61,8 +61,8 @@ namespace @(project.Module).API.Controllers }; } - [HttpPost] - public ResponseMessageWrap@($"<{entityName}>") GetById([FromBody]@pkType id) + [HttpGet] + public ResponseMessageWrap@($"<{entityName}>") GetById(@pkType id) { var @entityCamelName = @(repositoryName).GetById(id); return new ResponseMessageWrap@($"<{entityName}>") diff --git a/src/SmartCode.Generator/RazorTemplates/CSharp/Proj-API.cshtml b/src/SmartCode.Generator/RazorTemplates/CSharp/Proj-API.cshtml index 16972cb..8a8f3c8 100644 --- a/src/SmartCode.Generator/RazorTemplates/CSharp/Proj-API.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/CSharp/Proj-API.cshtml @@ -2,7 +2,7 @@ @model BuildContext @{ var project = Model.Project; - var smartsqlVersion = "4.0.33"; + var smartsqlVersion = "4.0.42"; if (project.Parameters.Value("SmartSqlVersion", out string version)) { smartsqlVersion = version; diff --git a/src/SmartCode.Generator/RazorTemplates/CSharp/Proj-Repository.cshtml b/src/SmartCode.Generator/RazorTemplates/CSharp/Proj-Repository.cshtml index 700b145..8835c59 100644 --- a/src/SmartCode.Generator/RazorTemplates/CSharp/Proj-Repository.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/CSharp/Proj-Repository.cshtml @@ -8,12 +8,12 @@ var dbProviderAssNames = dbFactory.GetType().Assembly.FullName.Split(','); var dbProviderName = dbProviderAssNames[0]; var dbProviderVersion = dbProviderAssNames[1].Split('=')[1]; - var smartSqlVersion = "4.0.33"; + var smartSqlVersion = "4.0.42"; if (project.Parameters.Value("SmartSqlVersion", out string version)) { smartSqlVersion = version; } - var smartSqlSchemaVersion = "4.0.26"; + var smartSqlSchemaVersion = "4.0.42"; if (project.Parameters.Value("SmartSqlSchemaVersion", out string schemaVersion)) { smartSqlSchemaVersion = schemaVersion; diff --git a/src/SmartCode.Generator/RazorTemplates/CSharp/Repository.cshtml b/src/SmartCode.Generator/RazorTemplates/CSharp/Repository.cshtml index a6ec756..beebb55 100644 --- a/src/SmartCode.Generator/RazorTemplates/CSharp/Repository.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/CSharp/Repository.cshtml @@ -6,22 +6,31 @@ var project = Model.Project; var buildTask = Model.Build; var table = Model.GetCurrentTable(); - var primaryKeyType = table.PKColumn?.LanguageType ?? "int"; + var pkCol = table.PKColumn; + if (pkCol == null) + { + throw new SmartCodeException($"Repository Template can not find PKColumn,Table:{table.Name}."); + } + var primaryKeyType = pkCol.LanguageType ?? "int"; var autoIncrement = table.AutoIncrement; var dbSource = Model.GetDataSource(); + + var PKNameEQId = pkCol.Name == "Id"; } using System; using System.Collections.Generic; using System.Data; using System.Text; +using System.Threading.Tasks; using SmartSql.DyRepository; using SmartSql.DyRepository.Annotations; using @(project.Module).Entity; namespace @(project.Module).@buildTask.Module { - public interface I@(table.ConvertedName)Repository : IRepository<@(table.ConvertedName), @(primaryKeyType)> +public interface I@(table.ConvertedName)Repository : IRepository<@(table.ConvertedName), @(primaryKeyType)> + ,IRepositoryAsync<@(table.ConvertedName), @(primaryKeyType)> { @if (dbSource.DbRepository.DbProvider == DbProvider.PostgreSql && autoIncrement) @@ -30,11 +39,43 @@ namespace @(project.Module).@buildTask.Module @Html.NewLine() @Html.PadLeft(8) new @primaryKeyType Insert(@table.ConvertedName entity); @Html.NewLine() + + [Statement(Execute = ExecuteBehavior.QuerySingle)] + @Html.NewLine() + @Html.PadLeft(8) new Task<@primaryKeyType> InsertAsync(@table.ConvertedName entity); + @Html.NewLine() } else if (autoIncrement && primaryKeyType != "int") { @Html.PadLeft(8) new @primaryKeyType Insert(@table.ConvertedName entity); @Html.NewLine() + + @Html.PadLeft(8) new Task<@primaryKeyType> InsertAsync(@table.ConvertedName entity); + @Html.NewLine() + } + + @if (!PKNameEQId) + { + [Statement(Id = "GetEntity")] + @Html.NewLine() + @Html.PadLeft(8) new @table.ConvertedName GetById([Param("@pkCol.Name")]@primaryKeyType id); + @Html.NewLine() + + [Statement(Id = "GetEntity")] + @Html.NewLine() + @Html.PadLeft(8) new Task<@table.ConvertedName> GetByIdAsync([Param("@pkCol.Name")]@primaryKeyType id); + @Html.NewLine() + + [Statement(Id = "Delete")] + @Html.NewLine() + @Html.PadLeft(8) new int DeleteById([Param("@pkCol.Name")]@primaryKeyType id); + @Html.NewLine() + + [Statement(Id = "Delete")] + @Html.NewLine() + @Html.PadLeft(8) new Task<@("int")> DeleteByIdAsync([Param("@pkCol.Name")]@primaryKeyType id); + @Html.NewLine() + } } } diff --git a/src/SmartCode.Generator/RazorTemplates/CSharp/Service.cshtml b/src/SmartCode.Generator/RazorTemplates/CSharp/Service.cshtml index d3cc150..8044c70 100644 --- a/src/SmartCode.Generator/RazorTemplates/CSharp/Service.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/CSharp/Service.cshtml @@ -4,8 +4,12 @@ Layout = "_CSharpLayout.cshtml"; var project = Model.Project; var table = Model.GetCurrentTable(); - - var pkType = table.PKColumn.LanguageType; + var pkCol = table.PKColumn; + if (pkCol == null) + { + throw new SmartCodeException($"Service Template can not find PKColumn,Table:{table.Name}."); + } + var pkType = pkCol.LanguageType; var insertRetType = table.AutoIncrement ? pkType : "int"; var entityName = table.ConvertedName; var entityCamelName = NamingUtil.CamelCase(table.ConvertedName); From 9413ec87059978e917eea14263b7b15c2863a6d2 Mon Sep 17 00:00:00 2001 From: Ahoo Wang Date: Tue, 7 May 2019 15:01:26 +0800 Subject: [PATCH 050/127] add NoneTokenizer --- build/version.props | 2 +- src/SmartCode/TokenizerFactory.cs | 21 +++++++++++++++---- src/SmartCode/WordsConverter/NoneTokenizer.cs | 21 +++++++++++++++++++ 3 files changed, 39 insertions(+), 5 deletions(-) create mode 100644 src/SmartCode/WordsConverter/NoneTokenizer.cs diff --git a/build/version.props b/build/version.props index 7e4069d..5965532 100644 --- a/build/version.props +++ b/build/version.props @@ -2,7 +2,7 @@ 2 2 - 44 + 45 $(VersionMajor).$(VersionMinor).$(VersionPatch) diff --git a/src/SmartCode/TokenizerFactory.cs b/src/SmartCode/TokenizerFactory.cs index 64b7878..b3d9495 100644 --- a/src/SmartCode/TokenizerFactory.cs +++ b/src/SmartCode/TokenizerFactory.cs @@ -8,11 +8,24 @@ namespace SmartCode { public class TokenizerFactory { - public static ITokenizer Create(Tokenizer tokenizer) + public static ITokenizer Create(Tokenizer tokenizerConfig) { - DefaultTokenizer defaultTokenizer = new DefaultTokenizer(); - defaultTokenizer.Initialize(tokenizer.Parameters); - return defaultTokenizer; + ITokenizer tokenizer; + switch (tokenizerConfig.Type) + { + case "None": + { + tokenizer = new NoneTokenizer(); + break; + } + default: + { + tokenizer = new DefaultTokenizer(); + break; + } + } + tokenizer.Initialize(tokenizerConfig.Parameters); + return tokenizer; } } } diff --git a/src/SmartCode/WordsConverter/NoneTokenizer.cs b/src/SmartCode/WordsConverter/NoneTokenizer.cs new file mode 100644 index 0000000..6f63b74 --- /dev/null +++ b/src/SmartCode/WordsConverter/NoneTokenizer.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace SmartCode.WordsConverter +{ + public class NoneTokenizer : ITokenizer + { + public void Initialize(IDictionary parameters) + { + + } + + public bool Initialized => true; + public string Name => "None"; + public IEnumerable Segment(string phrase) + { + return new[] { phrase }; + } + } +} From a60c1b2e18de035cc47153032d7929297af1d52e Mon Sep 17 00:00:00 2001 From: Ahoo Wang Date: Thu, 23 May 2019 17:43:51 +0800 Subject: [PATCH 051/127] fix https://github.com/dotnetcore/SmartCode/issues/29 --- build/version.props | 2 +- doc/SmartCode.yml | 2 +- src/SmartCode.App/SmartCodeOptions.cs | 1 - src/SmartCode.CLI/appsettings.json | 1 - src/SmartCode.Db/SmartCode.Db.csproj | 12 ++++++------ src/SmartCode.ETL/SmartCode.ETL.csproj | 6 +++--- .../RazorTemplates/CSharp/Repository.cshtml | 10 +++++----- 7 files changed, 16 insertions(+), 18 deletions(-) diff --git a/build/version.props b/build/version.props index 5965532..cbcc040 100644 --- a/build/version.props +++ b/build/version.props @@ -2,7 +2,7 @@ 2 2 - 45 + 46 $(VersionMajor).$(VersionMinor).$(VersionPatch) diff --git a/doc/SmartCode.yml b/doc/SmartCode.yml index 2a10bf4..a8f94fd 100644 --- a/doc/SmartCode.yml +++ b/doc/SmartCode.yml @@ -14,7 +14,7 @@ Output: Type: File Path: 'E:\SmartSql-Starter' Parameters: - SmartSqlVersion: '4.0.42' + SmartSqlVersion: '4.0.46' SmartSqlSchemaVersion: '4.0.42' BuildDir: 'E:\SmartSql-Starter\build' DockerImage: 'smartsql.starter' diff --git a/src/SmartCode.App/SmartCodeOptions.cs b/src/SmartCode.App/SmartCodeOptions.cs index 92291f9..d4e410d 100644 --- a/src/SmartCode.App/SmartCodeOptions.cs +++ b/src/SmartCode.App/SmartCodeOptions.cs @@ -9,7 +9,6 @@ public class SmartCodeOptions { public string Name { get; } = "SmartCode"; public string Author { get; } = "Ahoo Wang"; - public string Version { get; set; } = "1.0.0"; public string Github { get; } = "https://github.com/Ahoo-Wang/SmartCode"; public String ConfigPath { get; set; } public IServiceCollection Services { get; set; } = new ServiceCollection(); diff --git a/src/SmartCode.CLI/appsettings.json b/src/SmartCode.CLI/appsettings.json index 49a5090..4bc4d28 100644 --- a/src/SmartCode.CLI/appsettings.json +++ b/src/SmartCode.CLI/appsettings.json @@ -8,7 +8,6 @@ } }, "SmartCode": { - "Version": "v2.2.28", "Plugins": [ { "Type": "SmartCode.IDataSource,SmartCode", diff --git a/src/SmartCode.Db/SmartCode.Db.csproj b/src/SmartCode.Db/SmartCode.Db.csproj index e03d5f6..29fcb5f 100644 --- a/src/SmartCode.Db/SmartCode.Db.csproj +++ b/src/SmartCode.Db/SmartCode.Db.csproj @@ -5,14 +5,14 @@ - - - - + + + + - - + + diff --git a/src/SmartCode.ETL/SmartCode.ETL.csproj b/src/SmartCode.ETL/SmartCode.ETL.csproj index 5de07d5..29819b3 100644 --- a/src/SmartCode.ETL/SmartCode.ETL.csproj +++ b/src/SmartCode.ETL/SmartCode.ETL.csproj @@ -5,9 +5,9 @@ - - - + + + diff --git a/src/SmartCode.Generator/RazorTemplates/CSharp/Repository.cshtml b/src/SmartCode.Generator/RazorTemplates/CSharp/Repository.cshtml index beebb55..e848475 100644 --- a/src/SmartCode.Generator/RazorTemplates/CSharp/Repository.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/CSharp/Repository.cshtml @@ -15,7 +15,7 @@ var autoIncrement = table.AutoIncrement; var dbSource = Model.GetDataSource(); - var PKNameEQId = pkCol.Name == "Id"; + var PKNameEQId = pkCol.ConvertedName == "Id"; } using System; @@ -58,22 +58,22 @@ public interface I@(table.ConvertedName)Repository : IRepository<@(table.Convert { [Statement(Id = "GetEntity")] @Html.NewLine() - @Html.PadLeft(8) new @table.ConvertedName GetById([Param("@pkCol.Name")]@primaryKeyType id); + @Html.PadLeft(8) new @table.ConvertedName GetById([Param("@pkCol.ConvertedName")]@primaryKeyType id); @Html.NewLine() [Statement(Id = "GetEntity")] @Html.NewLine() - @Html.PadLeft(8) new Task<@table.ConvertedName> GetByIdAsync([Param("@pkCol.Name")]@primaryKeyType id); + @Html.PadLeft(8) new Task<@table.ConvertedName> GetByIdAsync([Param("@pkCol.ConvertedName")]@primaryKeyType id); @Html.NewLine() [Statement(Id = "Delete")] @Html.NewLine() - @Html.PadLeft(8) new int DeleteById([Param("@pkCol.Name")]@primaryKeyType id); + @Html.PadLeft(8) new int DeleteById([Param("@pkCol.ConvertedName")]@primaryKeyType id); @Html.NewLine() [Statement(Id = "Delete")] @Html.NewLine() - @Html.PadLeft(8) new Task<@("int")> DeleteByIdAsync([Param("@pkCol.Name")]@primaryKeyType id); + @Html.PadLeft(8) new Task<@("int")> DeleteByIdAsync([Param("@pkCol.ConvertedName")]@primaryKeyType id); @Html.NewLine() } From 005502a4ab2dfae119b7e96251f18161c9d94908 Mon Sep 17 00:00:00 2001 From: Ahoo Wang Date: Thu, 23 May 2019 19:03:08 +0800 Subject: [PATCH 052/127] add support global default NamingConverter --- README-EN.md | 106 +++++------------- README.md | 106 +++++------------- build/version.props | 2 +- doc/SmartCode.yml | 103 +++++------------ .../ConfigBuilders/ConfigBuilder.cs | 22 +++- src/SmartCode/Configuration/Project.cs | 1 + 6 files changed, 103 insertions(+), 237 deletions(-) diff --git a/README-EN.md b/README-EN.md index 416c6da..a94890a 100644 --- a/README-EN.md +++ b/README-EN.md @@ -58,8 +58,36 @@ Output: Type: File Path: 'E:\SmartSql-Starter' Parameters: + SmartSqlVersion: '4.0.46' + SmartSqlSchemaVersion: '4.0.42' BuildDir: 'E:\SmartSql-Starter\build' DockerImage: 'smartsql.starter' + +NamingConverter: + Table: + Tokenizer: + Type: Default + Parameters: + IgnorePrefix: 'T_' + Delimiter: '_' + Converter: + Type: Pascal + Parameters: { } + View: + Tokenizer: + Type: Default + Parameters: + IgnorePrefix: 'V_' + Delimiter: '_' + Converter: + Type: Pascal + Column: + Tokenizer: + Type: Default + Parameters: + Delimiter: '_' + Converter: + Type: Pascal # 构建任务 Build: @@ -90,6 +118,7 @@ Build: {Key: 'Sln-Version.cshtml',Output: {Path: 'build',Name: 'version',Extension: '.props'}}, {Key: 'Sln-Dockerfile.cshtml',Output: {Name: 'Dockerfile',Extension: ''}}, {Key: 'Sln-DockerIgnore.cshtml',Output: {Name: '.dockerignore',Extension: ''}}, + {Key: 'Sln-GitIgnore.cshtml',Output: {Name: '.gitignore',Extension: ''}}, {Key: "Proj-Entity.cshtml",Output: {Path: 'src/{{Project.Module}}.Entity',Name: '{{Project.Module}}.Entity',Extension: '.csproj'}}, {Key: "Proj-Repository.cshtml",Output: {Path: 'src/{{Project.Module}}.Repository',Name: '{{Project.Module}}.Repository',Extension: '.csproj'}}, {Key: "Proj-Service.cshtml",Output: {Path: 'src/{{Project.Module}}.Service',Name: '{{Project.Module}}.Service',Extension: '.csproj'}}, @@ -120,31 +149,6 @@ Build: Path: 'src/{{Project.Module}}.{{Build.Module}}' Name: '{{Items.CurrentTable.ConvertedName}}' Extension: '.cs' - NamingConverter: - Table: - Tokenizer: - Type: Default - Parameters: - IgnorePrefix: 'T_' - Delimiter: '_' - Converter: - Type: Pascal - Parameters: { } - View: - Tokenizer: - Type: Default - Parameters: - IgnorePrefix: 'V_' - Delimiter: '_' - Converter: - Type: Pascal - Column: - Tokenizer: - Type: Default - Parameters: - Delimiter: '_' - Converter: - Type: Pascal Repository: Type: Table @@ -157,15 +161,6 @@ Build: Path: 'src/{{Project.Module}}.{{Build.Module}}' Name: 'I{{Items.CurrentTable.ConvertedName}}Repository' Extension: .cs - NamingConverter: - Table: - Tokenizer: - Type: Default - Parameters: - IgnorePrefix: 'T_' - Delimiter: '_' - Converter: - Type: Pascal Service: Type: Table @@ -178,15 +173,6 @@ Build: Path: 'src/{{Project.Module}}.{{Build.Module}}' Name: '{{Items.CurrentTable.ConvertedName}}Service' Extension: .cs - NamingConverter: - Table: - Tokenizer: - Type: Default - Parameters: - IgnorePrefix: 'T_' - Delimiter: '_' - Converter: - Type: Pascal APIController: Type: Table @@ -199,15 +185,6 @@ Build: Path: 'src/{{Project.Module}}.{{Build.Module}}/Controllers' Name: '{{Items.CurrentTable.ConvertedName}}Controller' Extension: .cs - NamingConverter: - Table: - Tokenizer: - Type: Default - Parameters: - IgnorePrefix: 'T_' - Delimiter: '_' - Converter: - Type: Pascal SqlMap: Type: Table @@ -219,31 +196,6 @@ Build: Extension: .xml IgnoreNoPKTable: true IgnoreView: true - NamingConverter: - Table: - Tokenizer: - Type: Default - Parameters: - IgnorePrefix: 'T_' - Delimiter: '_' - Converter: - Type: Pascal - View: - Tokenizer: - Type: Default - Parameters: - IgnorePrefix: 'V_' - Delimiter: '_' - Converter: - Type: Pascal - Column: - Tokenizer: - Type: Default - Parameters: - IgnorePrefix: 'T_' - Delimiter: '_' - Converter: - Type: Pascal ReStore: Type: Process diff --git a/README.md b/README.md index dea77fa..e2c5e88 100644 --- a/README.md +++ b/README.md @@ -58,8 +58,36 @@ Output: Type: File Path: 'E:\SmartSql-Starter' Parameters: + SmartSqlVersion: '4.0.46' + SmartSqlSchemaVersion: '4.0.42' BuildDir: 'E:\SmartSql-Starter\build' DockerImage: 'smartsql.starter' + +NamingConverter: + Table: + Tokenizer: + Type: Default + Parameters: + IgnorePrefix: 'T_' + Delimiter: '_' + Converter: + Type: Pascal + Parameters: { } + View: + Tokenizer: + Type: Default + Parameters: + IgnorePrefix: 'V_' + Delimiter: '_' + Converter: + Type: Pascal + Column: + Tokenizer: + Type: Default + Parameters: + Delimiter: '_' + Converter: + Type: Pascal # 构建任务 Build: @@ -90,6 +118,7 @@ Build: {Key: 'Sln-Version.cshtml',Output: {Path: 'build',Name: 'version',Extension: '.props'}}, {Key: 'Sln-Dockerfile.cshtml',Output: {Name: 'Dockerfile',Extension: ''}}, {Key: 'Sln-DockerIgnore.cshtml',Output: {Name: '.dockerignore',Extension: ''}}, + {Key: 'Sln-GitIgnore.cshtml',Output: {Name: '.gitignore',Extension: ''}}, {Key: "Proj-Entity.cshtml",Output: {Path: 'src/{{Project.Module}}.Entity',Name: '{{Project.Module}}.Entity',Extension: '.csproj'}}, {Key: "Proj-Repository.cshtml",Output: {Path: 'src/{{Project.Module}}.Repository',Name: '{{Project.Module}}.Repository',Extension: '.csproj'}}, {Key: "Proj-Service.cshtml",Output: {Path: 'src/{{Project.Module}}.Service',Name: '{{Project.Module}}.Service',Extension: '.csproj'}}, @@ -120,31 +149,6 @@ Build: Path: 'src/{{Project.Module}}.{{Build.Module}}' Name: '{{Items.CurrentTable.ConvertedName}}' Extension: '.cs' - NamingConverter: - Table: - Tokenizer: - Type: Default - Parameters: - IgnorePrefix: 'T_' - Delimiter: '_' - Converter: - Type: Pascal - Parameters: { } - View: - Tokenizer: - Type: Default - Parameters: - IgnorePrefix: 'V_' - Delimiter: '_' - Converter: - Type: Pascal - Column: - Tokenizer: - Type: Default - Parameters: - Delimiter: '_' - Converter: - Type: Pascal Repository: Type: Table @@ -157,15 +161,6 @@ Build: Path: 'src/{{Project.Module}}.{{Build.Module}}' Name: 'I{{Items.CurrentTable.ConvertedName}}Repository' Extension: .cs - NamingConverter: - Table: - Tokenizer: - Type: Default - Parameters: - IgnorePrefix: 'T_' - Delimiter: '_' - Converter: - Type: Pascal Service: Type: Table @@ -178,15 +173,6 @@ Build: Path: 'src/{{Project.Module}}.{{Build.Module}}' Name: '{{Items.CurrentTable.ConvertedName}}Service' Extension: .cs - NamingConverter: - Table: - Tokenizer: - Type: Default - Parameters: - IgnorePrefix: 'T_' - Delimiter: '_' - Converter: - Type: Pascal APIController: Type: Table @@ -199,15 +185,6 @@ Build: Path: 'src/{{Project.Module}}.{{Build.Module}}/Controllers' Name: '{{Items.CurrentTable.ConvertedName}}Controller' Extension: .cs - NamingConverter: - Table: - Tokenizer: - Type: Default - Parameters: - IgnorePrefix: 'T_' - Delimiter: '_' - Converter: - Type: Pascal SqlMap: Type: Table @@ -219,31 +196,6 @@ Build: Extension: .xml IgnoreNoPKTable: true IgnoreView: true - NamingConverter: - Table: - Tokenizer: - Type: Default - Parameters: - IgnorePrefix: 'T_' - Delimiter: '_' - Converter: - Type: Pascal - View: - Tokenizer: - Type: Default - Parameters: - IgnorePrefix: 'V_' - Delimiter: '_' - Converter: - Type: Pascal - Column: - Tokenizer: - Type: Default - Parameters: - IgnorePrefix: 'T_' - Delimiter: '_' - Converter: - Type: Pascal ReStore: Type: Process diff --git a/build/version.props b/build/version.props index cbcc040..5842f51 100644 --- a/build/version.props +++ b/build/version.props @@ -2,7 +2,7 @@ 2 2 - 46 + 48 $(VersionMajor).$(VersionMinor).$(VersionPatch) diff --git a/doc/SmartCode.yml b/doc/SmartCode.yml index a8f94fd..70fdb56 100644 --- a/doc/SmartCode.yml +++ b/doc/SmartCode.yml @@ -18,6 +18,32 @@ Parameters: SmartSqlSchemaVersion: '4.0.42' BuildDir: 'E:\SmartSql-Starter\build' DockerImage: 'smartsql.starter' + +NamingConverter: + Table: + Tokenizer: + Type: Default + Parameters: + IgnorePrefix: 'T_' + Delimiter: '_' + Converter: + Type: Pascal + Parameters: { } + View: + Tokenizer: + Type: Default + Parameters: + IgnorePrefix: 'V_' + Delimiter: '_' + Converter: + Type: Pascal + Column: + Tokenizer: + Type: Default + Parameters: + Delimiter: '_' + Converter: + Type: Pascal # 构建任务 Build: @@ -79,31 +105,6 @@ Build: Path: 'src/{{Project.Module}}.{{Build.Module}}' Name: '{{Items.CurrentTable.ConvertedName}}' Extension: '.cs' - NamingConverter: - Table: - Tokenizer: - Type: Default - Parameters: - IgnorePrefix: 'T_' - Delimiter: '_' - Converter: - Type: Pascal - Parameters: { } - View: - Tokenizer: - Type: Default - Parameters: - IgnorePrefix: 'V_' - Delimiter: '_' - Converter: - Type: Pascal - Column: - Tokenizer: - Type: Default - Parameters: - Delimiter: '_' - Converter: - Type: Pascal Repository: Type: Table @@ -116,15 +117,6 @@ Build: Path: 'src/{{Project.Module}}.{{Build.Module}}' Name: 'I{{Items.CurrentTable.ConvertedName}}Repository' Extension: .cs - NamingConverter: - Table: - Tokenizer: - Type: Default - Parameters: - IgnorePrefix: 'T_' - Delimiter: '_' - Converter: - Type: Pascal Service: Type: Table @@ -137,15 +129,6 @@ Build: Path: 'src/{{Project.Module}}.{{Build.Module}}' Name: '{{Items.CurrentTable.ConvertedName}}Service' Extension: .cs - NamingConverter: - Table: - Tokenizer: - Type: Default - Parameters: - IgnorePrefix: 'T_' - Delimiter: '_' - Converter: - Type: Pascal APIController: Type: Table @@ -158,15 +141,6 @@ Build: Path: 'src/{{Project.Module}}.{{Build.Module}}/Controllers' Name: '{{Items.CurrentTable.ConvertedName}}Controller' Extension: .cs - NamingConverter: - Table: - Tokenizer: - Type: Default - Parameters: - IgnorePrefix: 'T_' - Delimiter: '_' - Converter: - Type: Pascal SqlMap: Type: Table @@ -178,31 +152,6 @@ Build: Extension: .xml IgnoreNoPKTable: true IgnoreView: true - NamingConverter: - Table: - Tokenizer: - Type: Default - Parameters: - IgnorePrefix: 'T_' - Delimiter: '_' - Converter: - Type: Pascal - View: - Tokenizer: - Type: Default - Parameters: - IgnorePrefix: 'V_' - Delimiter: '_' - Converter: - Type: Pascal - Column: - Tokenizer: - Type: Default - Parameters: - IgnorePrefix: 'T_' - Delimiter: '_' - Converter: - Type: Pascal ReStore: Type: Process diff --git a/src/SmartCode/Configuration/ConfigBuilders/ConfigBuilder.cs b/src/SmartCode/Configuration/ConfigBuilders/ConfigBuilder.cs index 427a9aa..a0ded4d 100644 --- a/src/SmartCode/Configuration/ConfigBuilders/ConfigBuilder.cs +++ b/src/SmartCode/Configuration/ConfigBuilders/ConfigBuilder.cs @@ -18,12 +18,18 @@ protected void InitDefault() { Project.Output.Type = "File"; } + if (Project.Output?.Mode == CreateMode.None) { Project.Output.Mode = CreateMode.Incre; } } + if (Project.NamingConverter == null) + { + Project.NamingConverter = NamingConverter.Default; + } + foreach (var buildTask in Project.BuildTasks.Values) { if (buildTask.Output != null) @@ -32,11 +38,13 @@ protected void InitDefault() { buildTask.Output.Type = Project.Output.Type; } + if (buildTask.Output.Mode == CreateMode.None) { buildTask.Output.Mode = Project.Output.Mode; } } + if (buildTask.TemplateEngine == null) { buildTask.TemplateEngine = Project.TemplateEngine; @@ -47,10 +55,12 @@ protected void InitDefault() { buildTask.TemplateEngine.Name = Project.TemplateEngine.Name; } + if (String.IsNullOrEmpty(buildTask.TemplateEngine.Root)) { buildTask.TemplateEngine.Root = Project.TemplateEngine.Root; } + if (String.IsNullOrEmpty(buildTask.TemplateEngine.Path)) { buildTask.TemplateEngine.Path = Project.TemplateEngine.Path; @@ -59,24 +69,26 @@ protected void InitDefault() if (buildTask.NamingConverter == null) { - buildTask.NamingConverter = NamingConverter.Default; + buildTask.NamingConverter = Project.NamingConverter; } else { if (buildTask.NamingConverter.Table == null) { - buildTask.NamingConverter.Table = TokenizerMapConverter.Default; + buildTask.NamingConverter.Table = Project.NamingConverter.Table; } + if (buildTask.NamingConverter.View == null) { - buildTask.NamingConverter.View = TokenizerMapConverter.Default; + buildTask.NamingConverter.View = Project.NamingConverter.View; } + if (buildTask.NamingConverter.Column == null) { - buildTask.NamingConverter.Column = TokenizerMapConverter.Default; + buildTask.NamingConverter.Column = Project.NamingConverter.Column; } } } } } -} +} \ No newline at end of file diff --git a/src/SmartCode/Configuration/Project.cs b/src/SmartCode/Configuration/Project.cs index e3efbbd..2dfd07b 100644 --- a/src/SmartCode/Configuration/Project.cs +++ b/src/SmartCode/Configuration/Project.cs @@ -19,5 +19,6 @@ public class Project [YamlMember(Alias = "Build")] public IDictionary BuildTasks { get; set; } public String OutputPath => Output.Path; + public NamingConverter NamingConverter { get; set; } } } From 787184fd48f15f037595c4eab56fee615dfa866d Mon Sep 17 00:00:00 2001 From: Ahoo Wang Date: Mon, 3 Jun 2019 10:51:53 +0800 Subject: [PATCH 053/127] fix https://github.com/dotnetcore/SmartCode/issues/30 ``` yml # Please install dotnet-format first! # dotnet tool install -g dotnet-format CodeFormat: Type: Process Parameters: FileName: powershell WorkingDirectory: '{{Project.Output.Path}}' Args: dotnet-format ``` --- README-EN.md | 9 +++++++++ README.md | 9 +++++++++ build/version.props | 2 +- doc/SmartCode.yml | 11 ++++++++++- src/SmartCode.CLI/SmartCode.CLI.csproj | 1 + src/SmartCode.Db/SmartCode.Db.csproj | 6 +++--- src/SmartCode.ETL/SmartCode.ETL.csproj | 6 +++--- 7 files changed, 36 insertions(+), 8 deletions(-) diff --git a/README-EN.md b/README-EN.md index a94890a..99ceae7 100644 --- a/README-EN.md +++ b/README-EN.md @@ -197,6 +197,15 @@ Build: IgnoreNoPKTable: true IgnoreView: true +# Please install dotnet-format first! +# dotnet tool install -g dotnet-format + CodeFormat: + Type: Process + Parameters: + FileName: powershell + WorkingDirectory: '{{Project.Output.Path}}' + Args: dotnet-format + ReStore: Type: Process Parameters: diff --git a/README.md b/README.md index e2c5e88..01b8440 100644 --- a/README.md +++ b/README.md @@ -197,6 +197,15 @@ Build: IgnoreNoPKTable: true IgnoreView: true +# Please install dotnet-format first! +# dotnet tool install -g dotnet-format + CodeFormat: + Type: Process + Parameters: + FileName: powershell + WorkingDirectory: '{{Project.Output.Path}}' + Args: dotnet-format + ReStore: Type: Process Parameters: diff --git a/build/version.props b/build/version.props index 5842f51..ab16751 100644 --- a/build/version.props +++ b/build/version.props @@ -2,7 +2,7 @@ 2 2 - 48 + 50 $(VersionMajor).$(VersionMinor).$(VersionPatch) diff --git a/doc/SmartCode.yml b/doc/SmartCode.yml index 70fdb56..642fee9 100644 --- a/doc/SmartCode.yml +++ b/doc/SmartCode.yml @@ -14,7 +14,7 @@ Output: Type: File Path: 'E:\SmartSql-Starter' Parameters: - SmartSqlVersion: '4.0.46' + SmartSqlVersion: '4.0.56' SmartSqlSchemaVersion: '4.0.42' BuildDir: 'E:\SmartSql-Starter\build' DockerImage: 'smartsql.starter' @@ -153,6 +153,15 @@ Build: IgnoreNoPKTable: true IgnoreView: true +# Please install dotnet-format first! +# dotnet tool install -g dotnet-format + CodeFormat: + Type: Process + Parameters: + FileName: powershell + WorkingDirectory: '{{Project.Output.Path}}' + Args: dotnet-format + ReStore: Type: Process Parameters: diff --git a/src/SmartCode.CLI/SmartCode.CLI.csproj b/src/SmartCode.CLI/SmartCode.CLI.csproj index 3f5c6c2..1e6b347 100644 --- a/src/SmartCode.CLI/SmartCode.CLI.csproj +++ b/src/SmartCode.CLI/SmartCode.CLI.csproj @@ -55,5 +55,6 @@ + diff --git a/src/SmartCode.Db/SmartCode.Db.csproj b/src/SmartCode.Db/SmartCode.Db.csproj index 29fcb5f..2280f4f 100644 --- a/src/SmartCode.Db/SmartCode.Db.csproj +++ b/src/SmartCode.Db/SmartCode.Db.csproj @@ -5,9 +5,9 @@ - - - + + + diff --git a/src/SmartCode.ETL/SmartCode.ETL.csproj b/src/SmartCode.ETL/SmartCode.ETL.csproj index 29819b3..3d9d487 100644 --- a/src/SmartCode.ETL/SmartCode.ETL.csproj +++ b/src/SmartCode.ETL/SmartCode.ETL.csproj @@ -5,9 +5,9 @@ - - - + + + From 24ea67c3852d134ae0b4a522aa7932c6dc70d75b Mon Sep 17 00:00:00 2001 From: Ahoo Wang Date: Tue, 4 Jun 2019 13:48:40 +0800 Subject: [PATCH 054/127] add support global default TableFilter -> fix https://github.com/dotnetcore/SmartCode/issues/32 ``` yml TableFilter: IgnoreNoPKTable: true IgnoreView: true ``` --- build/version.props | 2 +- doc/SmartCode.yml | 16 +++++++-------- .../BuildTasks/AbstractDbBuildTask.cs | 16 ++++++++++----- src/SmartCode/Configuration/Build.cs | 5 +++-- .../ConfigBuilders/ConfigBuilder.cs | 20 +++++++++++++++++++ src/SmartCode/Configuration/Project.cs | 1 + src/SmartCode/Configuration/TableFilter.cs | 13 ++++++++++++ 7 files changed, 56 insertions(+), 17 deletions(-) create mode 100644 src/SmartCode/Configuration/TableFilter.cs diff --git a/build/version.props b/build/version.props index ab16751..29ef071 100644 --- a/build/version.props +++ b/build/version.props @@ -2,7 +2,7 @@ 2 2 - 50 + 52 $(VersionMajor).$(VersionMinor).$(VersionPatch) diff --git a/doc/SmartCode.yml b/doc/SmartCode.yml index 642fee9..30b5256 100644 --- a/doc/SmartCode.yml +++ b/doc/SmartCode.yml @@ -14,7 +14,7 @@ Output: Type: File Path: 'E:\SmartSql-Starter' Parameters: - SmartSqlVersion: '4.0.56' + SmartSqlVersion: '4.0.58' SmartSqlSchemaVersion: '4.0.42' BuildDir: 'E:\SmartSql-Starter\build' DockerImage: 'smartsql.starter' @@ -44,6 +44,10 @@ NamingConverter: Delimiter: '_' Converter: Type: Pascal + +TableFilter: + IgnoreNoPKTable: true + IgnoreView: true # 构建任务 Build: @@ -101,6 +105,8 @@ Build: Module: Entity TemplateEngine: Path: Entity.cshtml + IgnoreNoPKTable: false + IgnoreView: false Output: Path: 'src/{{Project.Module}}.{{Build.Module}}' Name: '{{Items.CurrentTable.ConvertedName}}' @@ -111,8 +117,6 @@ Build: Module: Repository TemplateEngine: Path: Repository.cshtml - IgnoreNoPKTable: true - IgnoreView: true Output: Path: 'src/{{Project.Module}}.{{Build.Module}}' Name: 'I{{Items.CurrentTable.ConvertedName}}Repository' @@ -123,8 +127,6 @@ Build: Module: Service TemplateEngine: Path: Service.cshtml - IgnoreNoPKTable: true - IgnoreView: true Output: Path: 'src/{{Project.Module}}.{{Build.Module}}' Name: '{{Items.CurrentTable.ConvertedName}}Service' @@ -135,8 +137,6 @@ Build: Module: API TemplateEngine: Path: API/APIController.cshtml - IgnoreNoPKTable: true - IgnoreView: true Output: Path: 'src/{{Project.Module}}.{{Build.Module}}/Controllers' Name: '{{Items.CurrentTable.ConvertedName}}Controller' @@ -150,8 +150,6 @@ Build: Path: 'src/{{Project.Module}}.Repository/Maps' Name: '{{Items.CurrentTable.ConvertedName}}' Extension: .xml - IgnoreNoPKTable: true - IgnoreView: true # Please install dotnet-format first! # dotnet tool install -g dotnet-format diff --git a/src/SmartCode.Generator/BuildTasks/AbstractDbBuildTask.cs b/src/SmartCode.Generator/BuildTasks/AbstractDbBuildTask.cs index 71826d6..e4c2d5f 100644 --- a/src/SmartCode.Generator/BuildTasks/AbstractDbBuildTask.cs +++ b/src/SmartCode.Generator/BuildTasks/AbstractDbBuildTask.cs @@ -34,26 +34,32 @@ protected IList
FilterTable(IEnumerable
tables, string buildKey, B { _logger.LogInformation($"FilterTable Build:{buildKey} Start!"); IEnumerable
buildTables = CopyTables(tables); - if (build.IgnoreNoPKTable) + if (build.IgnoreNoPKTable.HasValue && build.IgnoreNoPKTable.Value) { _logger.LogInformation($"FilterTable Build:{buildKey} IgnoreNoPKTable!"); buildTables = buildTables.Where(m => m.PKColumn != null); } - if (build.IgnoreView) + + if (build.IgnoreView.HasValue && build.IgnoreView.Value) { _logger.LogInformation($"FilterTable Build:{buildKey} IgnoreView!"); buildTables = buildTables.Where(m => m.Type != Table.TableType.View); } + if (build.IgnoreTables != null) { - _logger.LogInformation($"FilterTable Build:{buildKey} IgnoreTables: [{String.Join(",", build.IgnoreTables)}]!"); + _logger.LogInformation( + $"FilterTable Build:{buildKey} IgnoreTables: [{String.Join(",", build.IgnoreTables)}]!"); buildTables = buildTables.Where(m => !build.IgnoreTables.Contains(m.Name)); } + if (build.IncludeTables != null) { - _logger.LogInformation($"FilterTable Build:{buildKey} IncludeTables: [{String.Join(",", build.IncludeTables)}]!"); + _logger.LogInformation( + $"FilterTable Build:{buildKey} IncludeTables: [{String.Join(",", build.IncludeTables)}]!"); buildTables = buildTables.Where(m => build.IncludeTables.Contains(m.Name)); } + _logger.LogInformation($"FilterTable Build:{buildKey} End!"); return buildTables.ToList(); } @@ -83,4 +89,4 @@ protected IList
CopyTables(IEnumerable
tables) }).ToList(); } } -} +} \ No newline at end of file diff --git a/src/SmartCode/Configuration/Build.cs b/src/SmartCode/Configuration/Build.cs index 991c8ba..72a75aa 100644 --- a/src/SmartCode/Configuration/Build.cs +++ b/src/SmartCode/Configuration/Build.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Diagnostics; using System.Text; namespace SmartCode.Configuration @@ -16,8 +17,8 @@ public class Build public Output Output { get; set; } public IEnumerable IncludeTables { get; set; } public IEnumerable IgnoreTables { get; set; } - public bool IgnoreNoPKTable { get; set; } - public bool IgnoreView { get; set; } + public bool? IgnoreNoPKTable { get; set; } + public bool? IgnoreView { get; set; } public NamingConverter NamingConverter { get; set; } /// /// 自定义构建参数 diff --git a/src/SmartCode/Configuration/ConfigBuilders/ConfigBuilder.cs b/src/SmartCode/Configuration/ConfigBuilders/ConfigBuilder.cs index a0ded4d..3027bb3 100644 --- a/src/SmartCode/Configuration/ConfigBuilders/ConfigBuilder.cs +++ b/src/SmartCode/Configuration/ConfigBuilders/ConfigBuilder.cs @@ -88,6 +88,26 @@ protected void InitDefault() buildTask.NamingConverter.Column = Project.NamingConverter.Column; } } + + if (Project.TableFilter != null) + { + if (buildTask.IgnoreTables == null) + { + buildTask.IgnoreTables = Project.TableFilter.IgnoreTables; + } + if (buildTask.IncludeTables == null) + { + buildTask.IncludeTables = Project.TableFilter.IncludeTables; + } + if (!buildTask.IgnoreView.HasValue) + { + buildTask.IgnoreView = Project.TableFilter.IgnoreView; + } + if (!buildTask.IgnoreNoPKTable.HasValue) + { + buildTask.IgnoreNoPKTable = Project.TableFilter.IgnoreNoPKTable; + } + } } } } diff --git a/src/SmartCode/Configuration/Project.cs b/src/SmartCode/Configuration/Project.cs index 2dfd07b..87c2d7e 100644 --- a/src/SmartCode/Configuration/Project.cs +++ b/src/SmartCode/Configuration/Project.cs @@ -20,5 +20,6 @@ public class Project public IDictionary BuildTasks { get; set; } public String OutputPath => Output.Path; public NamingConverter NamingConverter { get; set; } + public TableFilter TableFilter { get; set; } } } diff --git a/src/SmartCode/Configuration/TableFilter.cs b/src/SmartCode/Configuration/TableFilter.cs new file mode 100644 index 0000000..ca79f5a --- /dev/null +++ b/src/SmartCode/Configuration/TableFilter.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; + +namespace SmartCode.Configuration +{ + public class TableFilter + { + public IEnumerable IncludeTables { get; set; } + public IEnumerable IgnoreTables { get; set; } + public bool? IgnoreNoPKTable { get; set; } + public bool? IgnoreView { get; set; } + } +} \ No newline at end of file From ea70f7e3091f0aa24336937253f45b6ac4126afb Mon Sep 17 00:00:00 2001 From: beginor Date: Tue, 4 Jun 2019 16:21:38 +0800 Subject: [PATCH 055/127] add db to TypeScript map --- .../DbTypeConverter/DbTypeMap.xml | 304 +++++++++++++++++- 1 file changed, 303 insertions(+), 1 deletion(-) diff --git a/src/SmartCode.Generator/DbTypeConverter/DbTypeMap.xml b/src/SmartCode.Generator/DbTypeConverter/DbTypeMap.xml index 29042ae..4b9584a 100644 --- a/src/SmartCode.Generator/DbTypeConverter/DbTypeMap.xml +++ b/src/SmartCode.Generator/DbTypeConverter/DbTypeMap.xml @@ -323,7 +323,7 @@ - + @@ -528,4 +528,306 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From e38f4b9c7d0f6727e627fac5c121a9e91245ea4e Mon Sep 17 00:00:00 2001 From: beginor Date: Wed, 5 Jun 2019 07:07:10 +0800 Subject: [PATCH 056/127] add basic typescript template --- doc/SmartCode-TypeScript.yml | 66 +++++++++++++++++++ .../Entity/ColumnExtensions.cs | 16 +++++ .../Entity/TableExtensions.cs | 16 +++++ .../TypeScript/Copyright.cshtml | 9 +++ .../RazorTemplates/TypeScript/Model.cshtml | 20 ++++++ .../RazorTemplates/TypeScript/_Layout.cshtml | 4 ++ 6 files changed, 131 insertions(+) create mode 100644 doc/SmartCode-TypeScript.yml create mode 100644 src/SmartCode.Generator/Entity/ColumnExtensions.cs create mode 100644 src/SmartCode.Generator/Entity/TableExtensions.cs create mode 100644 src/SmartCode.Generator/RazorTemplates/TypeScript/Copyright.cshtml create mode 100644 src/SmartCode.Generator/RazorTemplates/TypeScript/Model.cshtml create mode 100644 src/SmartCode.Generator/RazorTemplates/TypeScript/_Layout.cshtml diff --git a/doc/SmartCode-TypeScript.yml b/doc/SmartCode-TypeScript.yml new file mode 100644 index 0000000..3a3e3d8 --- /dev/null +++ b/doc/SmartCode-TypeScript.yml @@ -0,0 +1,66 @@ +Author: Beginor +Module: NetCoreApp +DataSource: + Name: DbTable + Parameters: + DbName: net_core_app + DbProvider: PostgreSql + ConnectionString: server=127.0.0.1;database=net_core_app;user id=postgres;password=NO_PASSWORD; + DbSchema: public +Language: TypeScript +TemplateEngine: + Name: Razor + Root: TypeScript +Output: + Type: File + Mode: Full # Incre 增量创建,如果存在则忽略; Full 全量创建,如果存在则重新创建 + Path: /tmp/test +NamingConverter: + Table: + Tokenizer: + Type: Default + Parameters: + IgnorePrefix: 'T_' + Delimiter: '_' + Converter: + Type: Pascal + Parameters: { } + View: + Tokenizer: + Type: Default + Parameters: + IgnorePrefix: 'V_' + Delimiter: '_' + Converter: + Type: Pascal + Column: + Tokenizer: + Type: Default + Parameters: + Delimiter: '_' + Converter: + Type: Camel +TableFilter: + IgnoreTables: + # - app_roles + # - app_users + - aspnet_role_claims + - aspnet_roles + - aspnet_user_claims + - aspnet_user_logins + - aspnet_user_roles + - aspnet_user_tokens + # - aspnet_users + IgnoreNoPKTable: true + IgnoreView: true + +Build: + Entities: + Type: Table + Module: Data + TemplateEngine: + Path: Model.cshtml + Output: + Path: '{{Items.CurrentTable.Name}}/services' + Name: '{{Items.CurrentTable.Name}}' + Extension: '.ts' diff --git a/src/SmartCode.Generator/Entity/ColumnExtensions.cs b/src/SmartCode.Generator/Entity/ColumnExtensions.cs new file mode 100644 index 0000000..55d8ae5 --- /dev/null +++ b/src/SmartCode.Generator/Entity/ColumnExtensions.cs @@ -0,0 +1,16 @@ +namespace SmartCode.Generator.Entity { + + public static class ColumnExtensions { + + /// + /// 获取列的摘要说明,如果 Description 不为空, 则返回 Description; + /// 否则返回 Name + DbType + /// + public static string GetSummary(this Column column) { + if (!string.IsNullOrEmpty(column.Description)) { + return column.Description; + } + return column.Name + ", " + column.DbType; + } + } +} diff --git a/src/SmartCode.Generator/Entity/TableExtensions.cs b/src/SmartCode.Generator/Entity/TableExtensions.cs new file mode 100644 index 0000000..b1d81bd --- /dev/null +++ b/src/SmartCode.Generator/Entity/TableExtensions.cs @@ -0,0 +1,16 @@ +namespace SmartCode.Generator.Entity { + + public static class TableExtensions { + + /// + /// 获取表的摘要说明,如果 Description 不为空, 则返回 Description; + /// 否则返回 Type + Name + /// + public static string GetSummary(this Table table) { + if (!string.IsNullOrEmpty(table.Description)) { + return table.Description; + } + return table.Type + ", " + table.Name; + } + } +} diff --git a/src/SmartCode.Generator/RazorTemplates/TypeScript/Copyright.cshtml b/src/SmartCode.Generator/RazorTemplates/TypeScript/Copyright.cshtml new file mode 100644 index 0000000..bc98341 --- /dev/null +++ b/src/SmartCode.Generator/RazorTemplates/TypeScript/Copyright.cshtml @@ -0,0 +1,9 @@ +@using SmartCode +@model BuildContext +@{ + var project = Model.Project; +} +// Create By @project.Author +// Date @DateTime.Now.ToString("yyyy-MM-dd HH:mm") +// Code Generated By SmartCode +// Code Generater Github : https://github.com/dotnetcore/SmartCode diff --git a/src/SmartCode.Generator/RazorTemplates/TypeScript/Model.cshtml b/src/SmartCode.Generator/RazorTemplates/TypeScript/Model.cshtml new file mode 100644 index 0000000..8977d25 --- /dev/null +++ b/src/SmartCode.Generator/RazorTemplates/TypeScript/Model.cshtml @@ -0,0 +1,20 @@ +@using System; +@using SmartCode +@using SmartCode.Db +@using SmartCode.Generator.Entity; +@model BuildContext +@{ + Layout = "_Layout.cshtml"; + var project = Model.Project; + var task = Model.Build; + var table = Model.GetCurrentTable(); +} +@functions { } + +/** interface for @table.GetSummary() */ +export interface @(table.ConvertedName) { + @foreach (var col in table.Columns) { + @($"{Html.PadLeft(4)}/** {col.GetSummary()} */{Html.NewLine()}") + @($"{Html.PadLeft(4)}{col.ConvertedName}: {col.LanguageType};{Html.NewLine()}") + } +} diff --git a/src/SmartCode.Generator/RazorTemplates/TypeScript/_Layout.cshtml b/src/SmartCode.Generator/RazorTemplates/TypeScript/_Layout.cshtml new file mode 100644 index 0000000..6b5ed08 --- /dev/null +++ b/src/SmartCode.Generator/RazorTemplates/TypeScript/_Layout.cshtml @@ -0,0 +1,4 @@ +@using SmartCode +@model BuildContext +@{ Html.RenderPartial("Copyright.cshtml", Model); } +@RenderBody() From 716106f066cf620b52052df2177409d3dbbd8a6e Mon Sep 17 00:00:00 2001 From: beginor Date: Wed, 5 Jun 2019 21:03:55 +0800 Subject: [PATCH 057/127] add `ToSingular` and `ToPlural` method. --- src/SmartCode/Utilities/NamingUtil.cs | 53 +++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/src/SmartCode/Utilities/NamingUtil.cs b/src/SmartCode/Utilities/NamingUtil.cs index b445750..aa46749 100644 --- a/src/SmartCode/Utilities/NamingUtil.cs +++ b/src/SmartCode/Utilities/NamingUtil.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Text; +using System.Text.RegularExpressions; namespace SmartCode { @@ -16,5 +17,57 @@ public static String PascalCase(string phrase) string firstChar = phrase.Substring(0, 1).ToUpper(); return firstChar + phrase.Substring(1); } + + /// 讲单词转换为单数的形式 + public static string ToSingular(string phrase) + { + Regex plural1 = new Regex("(?[^aeiou])ies$"); + Regex plural2 = new Regex("(?[aeiou]y)s$"); + Regex plural3 = new Regex("(?[sxzh])es$"); + Regex plural4 = new Regex("(?[^sxzhyu])s$"); + if (plural1.IsMatch(phrase)) + { + return plural1.Replace(phrase, "${keep}y"); + } + else if (plural2.IsMatch(phrase)) + { + return plural2.Replace(phrase, "${keep}"); + } + else if (plural3.IsMatch(phrase)) + { + return plural3.Replace(phrase, "${keep}"); + } + else if (plural4.IsMatch(phrase)) + { + return plural4.Replace(phrase, "${keep}"); + } + return phrase; + } + + /// 讲单词转换为复数的形式 + public static string ToPlural(string phrase) + { + Regex plural1 = new Regex("(?[^aeiou])y$"); + Regex plural2 = new Regex("(?[aeiou]y)$"); + Regex plural3 = new Regex("(?[sxzh])$"); + Regex plural4 = new Regex("(?[^sxzhy])$"); + if (plural1.IsMatch(phrase)) + { + return plural1.Replace(phrase, "${keep}ies"); + } + else if (plural2.IsMatch(phrase)) + { + return plural2.Replace(phrase, "${keep}s"); + } + else if (plural3.IsMatch(phrase)) + { + return plural3.Replace(phrase, "${keep}es"); + } + else if (plural4.IsMatch(phrase)) + { + return plural4.Replace(phrase, "${keep}s"); + } + return phrase; + } } } From 90a90e2268233d248442de487e7282f2048d2822 Mon Sep 17 00:00:00 2001 From: beginor Date: Thu, 6 Jun 2019 06:10:33 +0800 Subject: [PATCH 058/127] format --- src/SmartCode/Utilities/NamingUtil.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/SmartCode/Utilities/NamingUtil.cs b/src/SmartCode/Utilities/NamingUtil.cs index aa46749..5768165 100644 --- a/src/SmartCode/Utilities/NamingUtil.cs +++ b/src/SmartCode/Utilities/NamingUtil.cs @@ -18,7 +18,7 @@ public static String PascalCase(string phrase) return firstChar + phrase.Substring(1); } - /// 讲单词转换为单数的形式 + /// 讲单词转换为单数的形式 public static string ToSingular(string phrase) { Regex plural1 = new Regex("(?[^aeiou])ies$"); From 4fde4c31763cc3f92e03cc534b7972ee596a86aa Mon Sep 17 00:00:00 2001 From: beginor Date: Thu, 6 Jun 2019 22:58:33 +0800 Subject: [PATCH 059/127] add two converter --- .../PascalCaseSingularConverter.cs | 29 +++++++++++++++++++ .../WordsConverter/StrikeThroughConverter.cs | 24 +++++++++++++++ 2 files changed, 53 insertions(+) create mode 100644 src/SmartCode/WordsConverter/PascalCaseSingularConverter.cs create mode 100644 src/SmartCode/WordsConverter/StrikeThroughConverter.cs diff --git a/src/SmartCode/WordsConverter/PascalCaseSingularConverter.cs b/src/SmartCode/WordsConverter/PascalCaseSingularConverter.cs new file mode 100644 index 0000000..4001179 --- /dev/null +++ b/src/SmartCode/WordsConverter/PascalCaseSingularConverter.cs @@ -0,0 +1,29 @@ +using System.Collections.Generic; + +namespace SmartCode.WordsConverter { + + /// + /// 在原来的 PascalCaseConverter 的基础之上, 增加了强制转成单数的转换, 应对某些数据 + /// 库表名称为复数单词的情况, 确认生成的类名是单数形式。(仅仅用正则表达式进行判断, 可能 + /// 会有误伤)。 + /// + public class PascalCaseSingularConverter : IWordsConverter { + + private PascalCaseConverter converter = new PascalCaseConverter(); + + public bool Initialized => converter.Initialized; + + public string Name => "PascalSingular"; + + public string Convert(IEnumerable words) { + var pascalWords = converter.Convert(words); + return NamingUtil.ToSingular(pascalWords); + } + + public void Initialize(IDictionary parameters) { + converter.Initialize(parameters); + } + + } + +} diff --git a/src/SmartCode/WordsConverter/StrikeThroughConverter.cs b/src/SmartCode/WordsConverter/StrikeThroughConverter.cs new file mode 100644 index 0000000..127f7aa --- /dev/null +++ b/src/SmartCode/WordsConverter/StrikeThroughConverter.cs @@ -0,0 +1,24 @@ +using System; +using System.Linq; +using System.Collections.Generic; +using System.Text; + +namespace SmartCode.WordsConverter { + + /// 前端常用的小写中划线命名转换器 + public class StrikeThroughConverter : IWordsConverter { + + public bool Initialized { get; private set; } + + public string Name => "StrikeThrough"; + + public string Convert(IEnumerable words) { + return string.Join("-", words).ToLowerInvariant(); + } + + public void Initialize(IDictionary parameters) { + Initialized = true; + } + } + +} From a830914da0570b01ce84ae89f280398e722fabce Mon Sep 17 00:00:00 2001 From: Ahoo Wang Date: Mon, 10 Jun 2019 18:52:15 +0800 Subject: [PATCH 060/127] optimize GetEntity template params --- build/version.props | 2 +- .../CURD/SqlMap-GetEntity.cshtml | 9 ++- .../SqlMap-Partials/SqlMap-Oracle.cshtml | 7 ++- .../SqlMap-Partials/SqlMap-SqlServer.cshtml | 60 ++++++++++--------- 4 files changed, 44 insertions(+), 34 deletions(-) diff --git a/build/version.props b/build/version.props index 29ef071..308e57c 100644 --- a/build/version.props +++ b/build/version.props @@ -2,7 +2,7 @@ 2 2 - 52 + 53 $(VersionMajor).$(VersionMinor).$(VersionPatch) diff --git a/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/CURD/SqlMap-GetEntity.cshtml b/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/CURD/SqlMap-GetEntity.cshtml index fa1cd1c..2174c94 100644 --- a/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/CURD/SqlMap-GetEntity.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/CURD/SqlMap-GetEntity.cshtml @@ -16,9 +16,12 @@ Select T.* From @table.Name As T - - T.@pkCol.Name= @($"{prefix}{pkCol.ConvertedName}") - + @foreach (var col in table.Columns) + { + + T.@col.Name= @($"{prefix}{col.ConvertedName}") + + } Limit 1 \ No newline at end of file diff --git a/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/SqlMap-Oracle.cshtml b/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/SqlMap-Oracle.cshtml index 0338d15..f731536 100644 --- a/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/SqlMap-Oracle.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/SqlMap-Oracle.cshtml @@ -37,9 +37,12 @@ Select T.* From @table.Name T ROWNUM = 1 - - T.@pkCol.Name=@dbPrefix@pkCol.ConvertedName + @foreach (var col in table.Columns) + { + + T.@col.Name= @($"{dbPrefix}{col.ConvertedName}") + } } diff --git a/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/SqlMap-SqlServer.cshtml b/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/SqlMap-SqlServer.cshtml index f3d66fa..8a52a36 100644 --- a/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/SqlMap-SqlServer.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/SqlMap-SqlServer.cshtml @@ -30,44 +30,48 @@ } @section QueryByPage - { +{ - - @if (versionNo >= 2012) - { - - Select T.* From @table.Name T With(NoLock) - - Order By T.@pkCol.Name Desc - Offset ((@(dbPrefix)PageIndex-1)*@(dbPrefix)PageSize) Rows Fetch Next @(dbPrefix)PageSize Rows Only; - - } - else - { - - Select TT.* From - (Select ROW_NUMBER() Over(Order By T.@pkCol.Name Desc) Row_Index,T.* From @table.Name T With(NoLock) - ) TT - Where TT.Row_Index Between ((@(dbPrefix)PageIndex-1)*@(dbPrefix)PageSize+1) And (@(dbPrefix)PageIndex*@(dbPrefix)PageSize); - - } - + + @if (versionNo >= 2012) + { + + Select T.* From @table.Name T With(NoLock) + + Order By T.@pkCol.Name Desc + Offset ((@(dbPrefix)PageIndex-1)*@(dbPrefix)PageSize) Rows Fetch Next @(dbPrefix)PageSize Rows Only; + + } + else + { + + Select TT.* From + (Select ROW_NUMBER() Over(Order By T.@pkCol.Name Desc) Row_Index,T.* From @table.Name T With(NoLock) + ) TT + Where TT.Row_Index Between ((@(dbPrefix)PageIndex-1)*@(dbPrefix)PageSize+1) And (@(dbPrefix)PageIndex*@(dbPrefix)PageSize); + + } + } + @section GetEntity - { +{ Select Top 1 T.* From @table.Name T With(NoLock) - - T.@pkCol.Name=@dbPrefix@pkCol.ConvertedName - + @foreach (var col in table.Columns) + { + + T.@col.Name= @($"{dbPrefix}{col.ConvertedName}") + + } } @section Query - { +{ SELECT @@ -75,11 +79,11 @@ (@(dbPrefix)Taken) T.* From @table.Name T - + T.@pkCol.Name Desc -} +} \ No newline at end of file From 88da1574ef4425946f13b1ad091e748b33c30859 Mon Sep 17 00:00:00 2001 From: beginor Date: Tue, 11 Jun 2019 13:54:59 +0800 Subject: [PATCH 061/127] add PascalSingular and StrikeThrough to WordsConverterFactory --- src/SmartCode/WordsConverterFactory.cs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/SmartCode/WordsConverterFactory.cs b/src/SmartCode/WordsConverterFactory.cs index 0637696..72346c3 100644 --- a/src/SmartCode/WordsConverterFactory.cs +++ b/src/SmartCode/WordsConverterFactory.cs @@ -25,6 +25,14 @@ public static IWordsConverter Create(Configuration.WordsConverter wordsConverter { converter = new DelimiterConverter(); break; } + case "PascalSingular": + { + converter = new PascalCaseSingularConverter(); break; + } + case "StrikeThrough": + { + converter = new StrikeThroughConverter(); break; + } default: { return new NoneConverter(); From 57cf28e76960833ff5f1dbf134d758f2089c222a Mon Sep 17 00:00:00 2001 From: Ahoo Wang Date: Tue, 11 Jun 2019 14:38:50 +0800 Subject: [PATCH 062/127] refactor ConfigBuilder --- build/version.props | 2 +- .../ConfigBuilders/ConfigBuilder.cs | 24 ++++++++++++++++--- .../ConfigBuilders/JsonBuilder.cs | 19 +++++---------- .../ConfigBuilders/YamlBuilder.cs | 14 +++-------- 4 files changed, 31 insertions(+), 28 deletions(-) diff --git a/build/version.props b/build/version.props index 308e57c..4a0c605 100644 --- a/build/version.props +++ b/build/version.props @@ -2,7 +2,7 @@ 2 2 - 53 + 55 $(VersionMajor).$(VersionMinor).$(VersionPatch) diff --git a/src/SmartCode/Configuration/ConfigBuilders/ConfigBuilder.cs b/src/SmartCode/Configuration/ConfigBuilders/ConfigBuilder.cs index 3027bb3..ff0d5ab 100644 --- a/src/SmartCode/Configuration/ConfigBuilders/ConfigBuilder.cs +++ b/src/SmartCode/Configuration/ConfigBuilders/ConfigBuilder.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.IO; using System.Text; using System.Threading.Tasks; @@ -7,10 +8,27 @@ namespace SmartCode.Configuration.ConfigBuilders { public abstract class ConfigBuilder : IConfigBuilder { - protected Project Project { get; set; } - public abstract Project Build(); + public string ConfigPath { get; } + public Project Project { get; set; } - protected void InitDefault() + protected ConfigBuilder(string configPath) + { + ConfigPath = configPath; + } + public Project Build() + { + using (StreamReader configStream = new StreamReader(ConfigPath)) + { + var jsonConfigStr = configStream.ReadToEnd(); + Project = Deserialize(jsonConfigStr); + } + InitDefault(); + return Project; + } + + protected abstract Project Deserialize(string content); + + private void InitDefault() { if (Project.Output != null) { diff --git a/src/SmartCode/Configuration/ConfigBuilders/JsonBuilder.cs b/src/SmartCode/Configuration/ConfigBuilders/JsonBuilder.cs index b585a1d..ea0fa7e 100644 --- a/src/SmartCode/Configuration/ConfigBuilders/JsonBuilder.cs +++ b/src/SmartCode/Configuration/ConfigBuilders/JsonBuilder.cs @@ -4,25 +4,18 @@ using System.Text; using System.Threading.Tasks; using Newtonsoft.Json; + namespace SmartCode.Configuration.ConfigBuilders { public class JsonBuilder : ConfigBuilder { - private readonly string _configPath; - - public JsonBuilder(string configPath) + public JsonBuilder(string configPath) : base(configPath) { - _configPath = configPath; } - public override Project Build() + + protected override Project Deserialize(string content) { - using (StreamReader configStream = new StreamReader(_configPath)) - { - var jsonConfigStr = configStream.ReadToEnd(); - Project = JsonConvert.DeserializeObject(jsonConfigStr); - } - InitDefault(); - return Project; + return JsonConvert.DeserializeObject(content); } } -} +} \ No newline at end of file diff --git a/src/SmartCode/Configuration/ConfigBuilders/YamlBuilder.cs b/src/SmartCode/Configuration/ConfigBuilders/YamlBuilder.cs index c001779..50e0e98 100644 --- a/src/SmartCode/Configuration/ConfigBuilders/YamlBuilder.cs +++ b/src/SmartCode/Configuration/ConfigBuilders/YamlBuilder.cs @@ -10,23 +10,15 @@ namespace SmartCode.Configuration.ConfigBuilders { public class YamlBuilder : ConfigBuilder { - private readonly string _configPath; private readonly IDeserializer _deserializer; - public YamlBuilder(string configPath) + public YamlBuilder(string configPath):base(configPath) { - _configPath = configPath; _deserializer = new DeserializerBuilder().Build(); } - public override Project Build() + protected override Project Deserialize(string content) { - using (StreamReader configStream = new StreamReader(_configPath)) - { - var yamlConfigStr = configStream.ReadToEnd(); - Project = _deserializer.Deserialize(yamlConfigStr); - } - InitDefault(); - return Project; + return _deserializer.Deserialize(content); } } } From b13797c536040251032dcef78283b0b79f0dc9c6 Mon Sep 17 00:00:00 2001 From: Ahoo Wang Date: Tue, 11 Jun 2019 14:43:53 +0800 Subject: [PATCH 063/127] update SmartSql version --- src/SmartCode.Db/SmartCode.Db.csproj | 6 +++--- src/SmartCode.ETL/SmartCode.ETL.csproj | 6 +++--- src/SmartCode/SmartCode.csproj | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/SmartCode.Db/SmartCode.Db.csproj b/src/SmartCode.Db/SmartCode.Db.csproj index 2280f4f..baf1d69 100644 --- a/src/SmartCode.Db/SmartCode.Db.csproj +++ b/src/SmartCode.Db/SmartCode.Db.csproj @@ -5,9 +5,9 @@ - - - + + + diff --git a/src/SmartCode.ETL/SmartCode.ETL.csproj b/src/SmartCode.ETL/SmartCode.ETL.csproj index 3d9d487..955a98a 100644 --- a/src/SmartCode.ETL/SmartCode.ETL.csproj +++ b/src/SmartCode.ETL/SmartCode.ETL.csproj @@ -5,9 +5,9 @@ - - - + + + diff --git a/src/SmartCode/SmartCode.csproj b/src/SmartCode/SmartCode.csproj index 1521a77..ad9349e 100644 --- a/src/SmartCode/SmartCode.csproj +++ b/src/SmartCode/SmartCode.csproj @@ -9,7 +9,7 @@ - + From ec13d8a80a9339b48f1dab2be43ce9de8ab9e2fa Mon Sep 17 00:00:00 2001 From: Ahoo Wang Date: Fri, 28 Jun 2019 14:38:29 +0800 Subject: [PATCH 064/127] fix https://github.com/dotnetcore/SmartCode/issues/37 --- build/version.props | 2 +- doc/SmartCode-Gen-ETL.yml | 2 +- doc/SmartCode.yml | 4 +- src/SmartCode.Db/SmartCode.Db.csproj | 6 +-- .../SmartCode.ETL.SQLite.csproj | 4 +- src/SmartCode.ETL/SmartCode.ETL.csproj | 6 +-- .../Entity/ColumnExtensions.cs | 18 +++++--- .../Extensions/SummaryExtensions.cs | 45 +++++++++++++++++++ .../CSharp/API/APIController.cshtml | 2 + .../CSharp/API/LaunchSettings.cshtml | 2 +- .../RazorTemplates/CSharp/Entity.cshtml | 19 ++++---- .../RazorTemplates/CSharp/Repository.cshtml | 2 + .../RazorTemplates/CSharp/Service.cshtml | 2 + 13 files changed, 84 insertions(+), 30 deletions(-) create mode 100644 src/SmartCode.Generator/Extensions/SummaryExtensions.cs diff --git a/build/version.props b/build/version.props index 4a0c605..86dbb48 100644 --- a/build/version.props +++ b/build/version.props @@ -2,7 +2,7 @@ 2 2 - 55 + 56 $(VersionMajor).$(VersionMinor).$(VersionPatch) diff --git a/doc/SmartCode-Gen-ETL.yml b/doc/SmartCode-Gen-ETL.yml index 49e8a99..d6cbe45 100644 --- a/doc/SmartCode-Gen-ETL.yml +++ b/doc/SmartCode-Gen-ETL.yml @@ -12,7 +12,7 @@ TemplateEngine: Name: Razor Root: . Parameters: - ExtractMode: QueryTime + ExtractMode: LastMaxModifyTime ModifyTime: ModifyTime ExtractConnectionString: Data Source=localhost;database=SqlServerDB;uid=SmartSql;pwd=SmartSql LoadDbProvider: PostgreSql diff --git a/doc/SmartCode.yml b/doc/SmartCode.yml index 30b5256..cfe69e6 100644 --- a/doc/SmartCode.yml +++ b/doc/SmartCode.yml @@ -14,8 +14,8 @@ Output: Type: File Path: 'E:\SmartSql-Starter' Parameters: - SmartSqlVersion: '4.0.58' - SmartSqlSchemaVersion: '4.0.42' + SmartSqlVersion: '4.0.71' + SmartSqlSchemaVersion: '4.0.65' BuildDir: 'E:\SmartSql-Starter\build' DockerImage: 'smartsql.starter' diff --git a/src/SmartCode.Db/SmartCode.Db.csproj b/src/SmartCode.Db/SmartCode.Db.csproj index baf1d69..6bb07dd 100644 --- a/src/SmartCode.Db/SmartCode.Db.csproj +++ b/src/SmartCode.Db/SmartCode.Db.csproj @@ -5,9 +5,9 @@ - - - + + + diff --git a/src/SmartCode.ETL.SQLite/SmartCode.ETL.SQLite.csproj b/src/SmartCode.ETL.SQLite/SmartCode.ETL.SQLite.csproj index e9a6302..6f0dee2 100644 --- a/src/SmartCode.ETL.SQLite/SmartCode.ETL.SQLite.csproj +++ b/src/SmartCode.ETL.SQLite/SmartCode.ETL.SQLite.csproj @@ -1,11 +1,11 @@ - + netstandard2.0 - + diff --git a/src/SmartCode.ETL/SmartCode.ETL.csproj b/src/SmartCode.ETL/SmartCode.ETL.csproj index 955a98a..f018771 100644 --- a/src/SmartCode.ETL/SmartCode.ETL.csproj +++ b/src/SmartCode.ETL/SmartCode.ETL.csproj @@ -5,9 +5,9 @@ - - - + + + diff --git a/src/SmartCode.Generator/Entity/ColumnExtensions.cs b/src/SmartCode.Generator/Entity/ColumnExtensions.cs index 55d8ae5..f61832c 100644 --- a/src/SmartCode.Generator/Entity/ColumnExtensions.cs +++ b/src/SmartCode.Generator/Entity/ColumnExtensions.cs @@ -1,16 +1,22 @@ -namespace SmartCode.Generator.Entity { - - public static class ColumnExtensions { +using System; +using System.Text; +namespace SmartCode.Generator.Entity +{ + public static class ColumnExtensions + { /// /// 获取列的摘要说明,如果 Description 不为空, 则返回 Description; /// 否则返回 Name + DbType /// - public static string GetSummary(this Column column) { - if (!string.IsNullOrEmpty(column.Description)) { + public static string GetSummary(this Column column) + { + if (!string.IsNullOrEmpty(column.Description)) + { return column.Description; } + return column.Name + ", " + column.DbType; } } -} +} \ No newline at end of file diff --git a/src/SmartCode.Generator/Extensions/SummaryExtensions.cs b/src/SmartCode.Generator/Extensions/SummaryExtensions.cs new file mode 100644 index 0000000..371c82a --- /dev/null +++ b/src/SmartCode.Generator/Extensions/SummaryExtensions.cs @@ -0,0 +1,45 @@ +using System; +using System.Text; +using SmartCode.Generator.Entity; + +namespace SmartCode.Generator.Extensions +{ + public static class SummaryExtensions + { + public static string GetCSharpSummary(this Column column) + { + var summary = column.GetSummary(); + return GetCSharpSummary(summary); + } + + public static string GetCSharpSummary(this Table table) + { + var summary = table.GetSummary(); + return GetCSharpSummary(summary); + } + public static string GetCSharpSummary(this string summary) + { + StringBuilder csharpSummary = new StringBuilder(); + csharpSummary.AppendLine("///"); + if (summary.Contains(Environment.NewLine)) + { + foreach (var summaryLine in summary.Split(Environment.NewLine.ToCharArray())) + { + if (String.IsNullOrEmpty(summaryLine)) + { + continue; + } + + csharpSummary.AppendLine($"/// {summaryLine}"); + } + } + else + { + csharpSummary.AppendLine($"/// {summary}"); + } + + csharpSummary.Append("///"); + return csharpSummary.ToString(); + } + } +} \ No newline at end of file diff --git a/src/SmartCode.Generator/RazorTemplates/CSharp/API/APIController.cshtml b/src/SmartCode.Generator/RazorTemplates/CSharp/API/APIController.cshtml index 645f7da..8732f1a 100644 --- a/src/SmartCode.Generator/RazorTemplates/CSharp/API/APIController.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/CSharp/API/APIController.cshtml @@ -1,4 +1,5 @@ @using SmartCode +@using SmartCode.Generator.Extensions @model BuildContext @{ Layout = "../_CSharpLayout.cshtml"; @@ -25,6 +26,7 @@ using @(project.Module).API.Messages; namespace @(project.Module).API.Controllers { + @table.GetCSharpSummary() [ApiController] [Route("[controller]/[action]")] public class @(table.ConvertedName)Controller : Controller diff --git a/src/SmartCode.Generator/RazorTemplates/CSharp/API/LaunchSettings.cshtml b/src/SmartCode.Generator/RazorTemplates/CSharp/API/LaunchSettings.cshtml index 8420b39..68aa728 100644 --- a/src/SmartCode.Generator/RazorTemplates/CSharp/API/LaunchSettings.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/CSharp/API/LaunchSettings.cshtml @@ -13,7 +13,7 @@ "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" }, - "applicationUrl": "http://localhost:8088/" + "applicationUrl": "http://localhost:8088" } } } diff --git a/src/SmartCode.Generator/RazorTemplates/CSharp/Entity.cshtml b/src/SmartCode.Generator/RazorTemplates/CSharp/Entity.cshtml index 5232c20..f76adbc 100644 --- a/src/SmartCode.Generator/RazorTemplates/CSharp/Entity.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/CSharp/Entity.cshtml @@ -1,4 +1,5 @@ @using SmartCode +@using SmartCode.Generator.Extensions @model BuildContext @{ Layout = "_CSharpLayout.cshtml"; @@ -31,21 +32,17 @@ public string ConvertLangType(SmartCode.Generator.Entity.Column column) using System; namespace @(project.Module).@buildTask.Module { -@Html.PadLeft(4)@("///") -@Html.PadLeft(4)@($"///{table.Description ?? table.ConvertedName}") -@Html.PadLeft(4)@("///") + + @table.GetCSharpSummary() public class @table.ConvertedName { @foreach (var column in table.Columns) { - @Html.PadLeft(8)@("///") - @Html.PadLeft(8)@Html.NewLine() - @Html.PadLeft(8)@($"///{column.Description ?? column.ConvertedName}") - @Html.PadLeft(8)@Html.NewLine() - @Html.PadLeft(8)@("///") - @Html.PadLeft(8)@Html.NewLine() - @Html.PadLeft(8)public @(ConvertLangType(column)) @column.ConvertedName { get; set; } - @Html.PadLeft(8)@Html.NewLine() + + @column.GetCSharpSummary() + @Html.NewLine() + public @(ConvertLangType(column)) @column.ConvertedName { get; set; } + @Html.NewLine() } } } diff --git a/src/SmartCode.Generator/RazorTemplates/CSharp/Repository.cshtml b/src/SmartCode.Generator/RazorTemplates/CSharp/Repository.cshtml index e848475..7312c8b 100644 --- a/src/SmartCode.Generator/RazorTemplates/CSharp/Repository.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/CSharp/Repository.cshtml @@ -1,5 +1,6 @@ @using SmartCode @using SmartCode.Db; +@using SmartCode.Generator.Extensions @model BuildContext @{ Layout = "_CSharpLayout.cshtml"; @@ -29,6 +30,7 @@ using @(project.Module).Entity; namespace @(project.Module).@buildTask.Module { +@table.GetCSharpSummary() public interface I@(table.ConvertedName)Repository : IRepository<@(table.ConvertedName), @(primaryKeyType)> ,IRepositoryAsync<@(table.ConvertedName), @(primaryKeyType)> { diff --git a/src/SmartCode.Generator/RazorTemplates/CSharp/Service.cshtml b/src/SmartCode.Generator/RazorTemplates/CSharp/Service.cshtml index 8044c70..8046b04 100644 --- a/src/SmartCode.Generator/RazorTemplates/CSharp/Service.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/CSharp/Service.cshtml @@ -1,4 +1,5 @@ @using SmartCode +@using SmartCode.Generator.Extensions @model BuildContext @{ Layout = "_CSharpLayout.cshtml"; @@ -25,6 +26,7 @@ using @(project.Module).Repository; namespace @(project.Module).Service { + @table.GetCSharpSummary() public class @serviceName { public I@(repositoryName) @repositoryName { get; } From b8740dd7d216bc325c777e87ed8b055dc9d457be Mon Sep 17 00:00:00 2001 From: Ahoo Wang Date: Mon, 8 Jul 2019 12:34:24 +0800 Subject: [PATCH 065/127] add mediumint to DbTypeMap --- build/version.props | 2 +- src/SmartCode.Db/SmartCode.Db.csproj | 6 +- src/SmartCode.ETL/SmartCode.ETL.csproj | 6 +- .../DbTypeConverter/DbTypeMap.xml | 1649 +++++++++-------- 4 files changed, 832 insertions(+), 831 deletions(-) diff --git a/build/version.props b/build/version.props index 86dbb48..491408d 100644 --- a/build/version.props +++ b/build/version.props @@ -2,7 +2,7 @@ 2 2 - 56 + 57 $(VersionMajor).$(VersionMinor).$(VersionPatch) diff --git a/src/SmartCode.Db/SmartCode.Db.csproj b/src/SmartCode.Db/SmartCode.Db.csproj index 6bb07dd..1d71108 100644 --- a/src/SmartCode.Db/SmartCode.Db.csproj +++ b/src/SmartCode.Db/SmartCode.Db.csproj @@ -5,9 +5,9 @@ - - - + + + diff --git a/src/SmartCode.ETL/SmartCode.ETL.csproj b/src/SmartCode.ETL/SmartCode.ETL.csproj index f018771..d7aa699 100644 --- a/src/SmartCode.ETL/SmartCode.ETL.csproj +++ b/src/SmartCode.ETL/SmartCode.ETL.csproj @@ -5,9 +5,9 @@ - - - + + + diff --git a/src/SmartCode.Generator/DbTypeConverter/DbTypeMap.xml b/src/SmartCode.Generator/DbTypeConverter/DbTypeMap.xml index 4b9584a..e6f1fc2 100644 --- a/src/SmartCode.Generator/DbTypeConverter/DbTypeMap.xml +++ b/src/SmartCode.Generator/DbTypeConverter/DbTypeMap.xml @@ -1,833 +1,834 @@  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 3f4407a909486cd6e05194fa5d38f3b143e6fd21 Mon Sep 17 00:00:00 2001 From: Ahoo Wang Date: Wed, 10 Jul 2019 19:18:31 +0800 Subject: [PATCH 066/127] add ncc to Authors update SmartSql version --- Directory.Build.props | 2 +- build/version.props | 2 +- doc/SmartCode.yml | 2 +- src/SmartCode.Db/SmartCode.Db.csproj | 6 +++--- src/SmartCode.ETL/SmartCode.ETL.csproj | 6 +++--- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/Directory.Build.props b/Directory.Build.props index 1cedce2..8fa45b1 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -6,7 +6,7 @@ SmartCode 2019 SmartCode, Inc. $(AssemblyName) - Ahoo Wang + Ahoo Wang;ncc ahoowang@qq.com latest https://github.com/Smart-Kit/SmartCode diff --git a/build/version.props b/build/version.props index 491408d..00abfb3 100644 --- a/build/version.props +++ b/build/version.props @@ -2,7 +2,7 @@ 2 2 - 57 + 58 $(VersionMajor).$(VersionMinor).$(VersionPatch) diff --git a/doc/SmartCode.yml b/doc/SmartCode.yml index cfe69e6..c3f31df 100644 --- a/doc/SmartCode.yml +++ b/doc/SmartCode.yml @@ -14,7 +14,7 @@ Output: Type: File Path: 'E:\SmartSql-Starter' Parameters: - SmartSqlVersion: '4.0.71' + SmartSqlVersion: '4.0.75' SmartSqlSchemaVersion: '4.0.65' BuildDir: 'E:\SmartSql-Starter\build' DockerImage: 'smartsql.starter' diff --git a/src/SmartCode.Db/SmartCode.Db.csproj b/src/SmartCode.Db/SmartCode.Db.csproj index 1d71108..cc73108 100644 --- a/src/SmartCode.Db/SmartCode.Db.csproj +++ b/src/SmartCode.Db/SmartCode.Db.csproj @@ -5,9 +5,9 @@ - - - + + + diff --git a/src/SmartCode.ETL/SmartCode.ETL.csproj b/src/SmartCode.ETL/SmartCode.ETL.csproj index d7aa699..7f9c549 100644 --- a/src/SmartCode.ETL/SmartCode.ETL.csproj +++ b/src/SmartCode.ETL/SmartCode.ETL.csproj @@ -5,9 +5,9 @@ - - - + + + From 55302cc5bde5782e265d0c24bdc851ba9af6527e Mon Sep 17 00:00:00 2001 From: Ahoo Wang Date: Fri, 19 Jul 2019 19:31:57 +0800 Subject: [PATCH 067/127] update SmartSql version for support PropertyChangedTrack --- build/version.props | 2 +- doc/SmartCode.yml | 4 ++-- src/SmartCode.Db/SmartCode.Db.csproj | 10 +++++----- src/SmartCode.ETL/SmartCode.ETL.csproj | 6 +++--- .../RazorTemplates/CSharp/Entity.cshtml | 2 +- .../RazorTemplates/CSharp/SqlMapConfig.cshtml | 2 +- 6 files changed, 13 insertions(+), 13 deletions(-) diff --git a/build/version.props b/build/version.props index 00abfb3..23ceca7 100644 --- a/build/version.props +++ b/build/version.props @@ -2,7 +2,7 @@ 2 2 - 58 + 60 $(VersionMajor).$(VersionMinor).$(VersionPatch) diff --git a/doc/SmartCode.yml b/doc/SmartCode.yml index c3f31df..a3e33f1 100644 --- a/doc/SmartCode.yml +++ b/doc/SmartCode.yml @@ -14,8 +14,8 @@ Output: Type: File Path: 'E:\SmartSql-Starter' Parameters: - SmartSqlVersion: '4.0.75' - SmartSqlSchemaVersion: '4.0.65' + SmartSqlVersion: '4.0.81' + SmartSqlSchemaVersion: '4.0.81' BuildDir: 'E:\SmartSql-Starter\build' DockerImage: 'smartsql.starter' diff --git a/src/SmartCode.Db/SmartCode.Db.csproj b/src/SmartCode.Db/SmartCode.Db.csproj index cc73108..f0aef57 100644 --- a/src/SmartCode.Db/SmartCode.Db.csproj +++ b/src/SmartCode.Db/SmartCode.Db.csproj @@ -5,14 +5,14 @@ - - - + + + - - + + diff --git a/src/SmartCode.ETL/SmartCode.ETL.csproj b/src/SmartCode.ETL/SmartCode.ETL.csproj index 7f9c549..c5a2dc7 100644 --- a/src/SmartCode.ETL/SmartCode.ETL.csproj +++ b/src/SmartCode.ETL/SmartCode.ETL.csproj @@ -5,9 +5,9 @@ - - - + + + diff --git a/src/SmartCode.Generator/RazorTemplates/CSharp/Entity.cshtml b/src/SmartCode.Generator/RazorTemplates/CSharp/Entity.cshtml index f76adbc..30fe4d9 100644 --- a/src/SmartCode.Generator/RazorTemplates/CSharp/Entity.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/CSharp/Entity.cshtml @@ -41,7 +41,7 @@ namespace @(project.Module).@buildTask.Module @column.GetCSharpSummary() @Html.NewLine() - public @(ConvertLangType(column)) @column.ConvertedName { get; set; } + public virtual @(ConvertLangType(column)) @column.ConvertedName { get; set; } @Html.NewLine() } } diff --git a/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMapConfig.cshtml b/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMapConfig.cshtml index 755b002..5435781 100644 --- a/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMapConfig.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMapConfig.cshtml @@ -12,7 +12,7 @@ @{ await Html.RenderPartialAsync("Copyright.cshtml", Model); } --> - + From 0b1c54db9e28826c6afaf930bfe0de3946fadedb Mon Sep 17 00:00:00 2001 From: Ahoo Wang Date: Sat, 20 Jul 2019 01:36:21 +0800 Subject: [PATCH 068/127] optimize Select T.* --- build/version.props | 2 +- .../SqlMap-Partials/CURD/SqlMap-GetEntity.cshtml | 4 +++- .../CSharp/SqlMap-Partials/CURD/SqlMap-Query.cshtml | 4 +++- .../SqlMap-Partials/CURD/SqlMap-QueryByPage.cshtml | 4 +++- .../CSharp/SqlMap-Partials/SqlMap-Columns.cshtml | 2 +- .../CSharp/SqlMap-Partials/SqlMap-MySql.cshtml | 4 +++- .../CSharp/SqlMap-Partials/SqlMap-PostgreSql.cshtml | 4 +++- .../CSharp/SqlMap-Partials/SqlMap-SQLite.cshtml | 4 +++- .../CSharp/SqlMap-Partials/SqlMap-SqlServer.cshtml | 11 ++++++++--- .../CSharp/SqlMap-Partials/_SqlMapLayout.cshtml | 1 + 10 files changed, 29 insertions(+), 11 deletions(-) diff --git a/build/version.props b/build/version.props index 23ceca7..036fadb 100644 --- a/build/version.props +++ b/build/version.props @@ -2,7 +2,7 @@ 2 2 - 60 + 62 $(VersionMajor).$(VersionMinor).$(VersionPatch) diff --git a/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/CURD/SqlMap-GetEntity.cshtml b/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/CURD/SqlMap-GetEntity.cshtml index 2174c94..345b7ad 100644 --- a/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/CURD/SqlMap-GetEntity.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/CURD/SqlMap-GetEntity.cshtml @@ -14,7 +14,9 @@ - Select T.* From @table.Name As T + Select + + From @table.Name As T @foreach (var col in table.Columns) { diff --git a/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/CURD/SqlMap-Query.cshtml b/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/CURD/SqlMap-Query.cshtml index fd6158e..d0e59e7 100644 --- a/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/CURD/SqlMap-Query.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/CURD/SqlMap-Query.cshtml @@ -19,7 +19,9 @@ - SELECT T.* From @table.Name T + SELECT + + From @table.Name T diff --git a/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/CURD/SqlMap-QueryByPage.cshtml b/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/CURD/SqlMap-QueryByPage.cshtml index 06755db..15405e4 100644 --- a/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/CURD/SqlMap-QueryByPage.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/CURD/SqlMap-QueryByPage.cshtml @@ -22,7 +22,9 @@ { - Select T.* From @table.Name As T + Select + + From @table.Name As T diff --git a/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/SqlMap-Columns.cshtml b/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/SqlMap-Columns.cshtml index 4b533bd..e0eda88 100644 --- a/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/SqlMap-Columns.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/SqlMap-Columns.cshtml @@ -11,6 +11,6 @@ @for (var colIndex = 0; colIndex < table.Columns.Count(); colIndex++) { var col = table.Columns.ElementAt(colIndex); - @col.Name@(colIndex == table.Columns.Count() - 1 ? "" : ",") + @($"T.{col.Name}")@(colIndex == table.Columns.Count() - 1 ? "" : ",") } \ No newline at end of file diff --git a/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/SqlMap-MySql.cshtml b/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/SqlMap-MySql.cshtml index 7c1c67f..697dfbe 100644 --- a/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/SqlMap-MySql.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/SqlMap-MySql.cshtml @@ -23,7 +23,9 @@ { - Select T.* From @table.Name As T + Select + + From @table.Name As T diff --git a/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/SqlMap-PostgreSql.cshtml b/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/SqlMap-PostgreSql.cshtml index 1565c8f..7ee9f49 100644 --- a/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/SqlMap-PostgreSql.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/SqlMap-PostgreSql.cshtml @@ -25,7 +25,9 @@ { - Select T.* From @table.Name As T + Select + + From @table.Name As T diff --git a/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/SqlMap-SQLite.cshtml b/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/SqlMap-SQLite.cshtml index 24bb52b..b8abc2d 100644 --- a/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/SqlMap-SQLite.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/SqlMap-SQLite.cshtml @@ -23,7 +23,9 @@ { - Select T.* From @table.Name As T + Select + + From @table.Name As T diff --git a/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/SqlMap-SqlServer.cshtml b/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/SqlMap-SqlServer.cshtml index 8a52a36..cf0da07 100644 --- a/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/SqlMap-SqlServer.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/SqlMap-SqlServer.cshtml @@ -36,7 +36,9 @@ @if (versionNo >= 2012) { - Select T.* From @table.Name T With(NoLock) + Select + + From @table.Name T With(NoLock) Order By T.@pkCol.Name Desc Offset ((@(dbPrefix)PageIndex-1)*@(dbPrefix)PageSize) Rows Fetch Next @(dbPrefix)PageSize Rows Only; @@ -58,7 +60,9 @@ { - Select Top 1 T.* From @table.Name T With(NoLock) + Select Top 1 + + From @table.Name T With(NoLock) @foreach (var col in table.Columns) { @@ -78,7 +82,8 @@ (@(dbPrefix)Taken) - T.* From @table.Name T + + From @table.Name T diff --git a/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/_SqlMapLayout.cshtml b/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/_SqlMapLayout.cshtml index 52569c9..b3257bf 100644 --- a/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/_SqlMapLayout.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/_SqlMapLayout.cshtml @@ -17,6 +17,7 @@ @{ await Html.RenderPartialAsync("SqlMap-ResultMaps.cshtml", Model); } + @{ await Html.RenderPartialAsync("SqlMap-Columns.cshtml", Model); } @foreach (var col in table.Columns) From c6939b85d13ad198788cf8f3946853878a98b448 Mon Sep 17 00:00:00 2001 From: Ahoo Wang Date: Mon, 22 Jul 2019 16:54:37 +0800 Subject: [PATCH 069/127] add ITableSource for Gen --- build/version.props | 2 +- doc/SmartCode.yml | 4 ++-- src/SmartCode.Db/SmartCode.Db.csproj | 6 +++--- src/SmartCode.ETL/SmartCode.ETL.csproj | 6 +++--- .../BuildTasks/SingleBuildTask.cs | 3 ++- .../BuildTasks/TableBuildTask.cs | 8 +++++--- src/SmartCode.Generator/DbTableRepository.cs | 4 ++-- src/SmartCode.Generator/DbTableSource.cs | 20 ++++++++++--------- src/SmartCode.Generator/ITableSource.cs | 10 ++++++++++ .../CURD/SqlMap-IsExist.cshtml | 3 --- src/SmartCode/SmartCode.csproj | 2 +- 11 files changed, 40 insertions(+), 28 deletions(-) create mode 100644 src/SmartCode.Generator/ITableSource.cs diff --git a/build/version.props b/build/version.props index 036fadb..7ef86ed 100644 --- a/build/version.props +++ b/build/version.props @@ -2,7 +2,7 @@ 2 2 - 62 + 65 $(VersionMajor).$(VersionMinor).$(VersionPatch) diff --git a/doc/SmartCode.yml b/doc/SmartCode.yml index a3e33f1..bb8c8be 100644 --- a/doc/SmartCode.yml +++ b/doc/SmartCode.yml @@ -14,8 +14,8 @@ Output: Type: File Path: 'E:\SmartSql-Starter' Parameters: - SmartSqlVersion: '4.0.81' - SmartSqlSchemaVersion: '4.0.81' + SmartSqlVersion: '4.0.86' + SmartSqlSchemaVersion: '4.0.82' BuildDir: 'E:\SmartSql-Starter\build' DockerImage: 'smartsql.starter' diff --git a/src/SmartCode.Db/SmartCode.Db.csproj b/src/SmartCode.Db/SmartCode.Db.csproj index f0aef57..b3746f6 100644 --- a/src/SmartCode.Db/SmartCode.Db.csproj +++ b/src/SmartCode.Db/SmartCode.Db.csproj @@ -5,9 +5,9 @@ - - - + + + diff --git a/src/SmartCode.ETL/SmartCode.ETL.csproj b/src/SmartCode.ETL/SmartCode.ETL.csproj index c5a2dc7..b516674 100644 --- a/src/SmartCode.ETL/SmartCode.ETL.csproj +++ b/src/SmartCode.ETL/SmartCode.ETL.csproj @@ -5,9 +5,9 @@ - - - + + + diff --git a/src/SmartCode.Generator/BuildTasks/SingleBuildTask.cs b/src/SmartCode.Generator/BuildTasks/SingleBuildTask.cs index 3f220da..d2e14ae 100644 --- a/src/SmartCode.Generator/BuildTasks/SingleBuildTask.cs +++ b/src/SmartCode.Generator/BuildTasks/SingleBuildTask.cs @@ -20,7 +20,8 @@ public SingleBuildTask(IPluginManager pluginManager } public override async Task Build(BuildContext context) { - var filterTables = FilterTable(context.GetDataSource().Tables, context.BuildKey, context.Build); + + var filterTables = FilterTable(context.GetDataSource().Tables, context.BuildKey, context.Build); context.SetCurrentAllTable(filterTables); foreach (var table in filterTables) { diff --git a/src/SmartCode.Generator/BuildTasks/TableBuildTask.cs b/src/SmartCode.Generator/BuildTasks/TableBuildTask.cs index c322134..92ff6ed 100644 --- a/src/SmartCode.Generator/BuildTasks/TableBuildTask.cs +++ b/src/SmartCode.Generator/BuildTasks/TableBuildTask.cs @@ -25,14 +25,16 @@ public TableBuildTask(IPluginManager pluginManager public override async Task Build(BuildContext context) { - var filterTables = FilterTable(context.GetDataSource().Tables, context.BuildKey, context.Build); + var filterTables = FilterTable(context.GetDataSource().Tables, context.BuildKey, + context.Build); context.SetCurrentAllTable(filterTables); foreach (var table in filterTables) { _logger.LogInformation($"BuildTable:{table.Name} Start!"); context.SetCurrentTable(table); _pluginManager.Resolve().Convert(context); - context.Result = await _pluginManager.Resolve(context.Build.TemplateEngine.Name).Render(context); + context.Result = await _pluginManager.Resolve(context.Build.TemplateEngine.Name) + .Render(context); await _pluginManager.Resolve(context.Build.Output.Type).Output(context); _logger.LogInformation($"BuildTable:{table.Name} End!"); } @@ -43,4 +45,4 @@ public override void Initialize(IDictionary parameters) base.Initialize(parameters); } } -} +} \ No newline at end of file diff --git a/src/SmartCode.Generator/DbTableRepository.cs b/src/SmartCode.Generator/DbTableRepository.cs index 90bc6e1..3c6ce72 100644 --- a/src/SmartCode.Generator/DbTableRepository.cs +++ b/src/SmartCode.Generator/DbTableRepository.cs @@ -32,10 +32,10 @@ DataSource dataSource } } } - public async Task> QueryTable() + public async Task> QueryTable() { _logger.LogInformation($"----Db:{DbName} Provider:{DbProviderName}, QueryTable Start! ----"); - IEnumerable
tables; + IList
tables; try { SqlMapper.SessionStore.Open(); diff --git a/src/SmartCode.Generator/DbTableSource.cs b/src/SmartCode.Generator/DbTableSource.cs index 86063d7..dda3d24 100644 --- a/src/SmartCode.Generator/DbTableSource.cs +++ b/src/SmartCode.Generator/DbTableSource.cs @@ -9,18 +9,18 @@ namespace SmartCode.Generator { - public class DbTableSource : DbSource + public class DbTableSource : DbSource, ITableSource { public DbTableSource( - Project project - , ILoggerFactory loggerFactory - , IPluginManager pluginManager - ) : base(project, loggerFactory, pluginManager) + Project project + , ILoggerFactory loggerFactory + , IPluginManager pluginManager + ) : base(project, loggerFactory, pluginManager) { } public override string Name => "DbTable"; - public IEnumerable
Tables { get; private set; } + public IList
Tables { get; private set; } public override async Task InitData() { @@ -32,7 +32,8 @@ public override async Task InitData() { foreach (var col in table.Columns) { - if ((DbRepository.DbProvider == Db.DbProvider.MySql || DbRepository.DbProvider == Db.DbProvider.MariaDB) + if ((DbRepository.DbProvider == Db.DbProvider.MySql || + DbRepository.DbProvider == Db.DbProvider.MariaDB) && col.DbType == "char" && col.DataLength == 36 && Project.Language == "CSharp") @@ -41,10 +42,11 @@ public override async Task InitData() } else { - col.LanguageType = dbTypeConvert.LanguageType(DbRepository.DbProvider, Project.Language, col.DbType); + col.LanguageType = + dbTypeConvert.LanguageType(DbRepository.DbProvider, Project.Language, col.DbType); } } } } } -} +} \ No newline at end of file diff --git a/src/SmartCode.Generator/ITableSource.cs b/src/SmartCode.Generator/ITableSource.cs new file mode 100644 index 0000000..99c5e49 --- /dev/null +++ b/src/SmartCode.Generator/ITableSource.cs @@ -0,0 +1,10 @@ +using System.Collections.Generic; +using SmartCode.Generator.Entity; + +namespace SmartCode.Generator +{ + public interface ITableSource : IDataSource + { + IList
Tables { get; } + } +} \ No newline at end of file diff --git a/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/CURD/SqlMap-IsExist.cshtml b/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/CURD/SqlMap-IsExist.cshtml index 5eb3307..8b288d1 100644 --- a/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/CURD/SqlMap-IsExist.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/CURD/SqlMap-IsExist.cshtml @@ -2,10 +2,7 @@ @using SmartCode.Db @model BuildContext @{ - var project = Model.Project; - var dbSource = Model.GetDataSource(); var table = Model.GetCurrentTable(); - var pkCol = table.PKColumn; } diff --git a/src/SmartCode/SmartCode.csproj b/src/SmartCode/SmartCode.csproj index ad9349e..cf20303 100644 --- a/src/SmartCode/SmartCode.csproj +++ b/src/SmartCode/SmartCode.csproj @@ -9,7 +9,7 @@ - + From d98427fc4b88ef1ff2853c95091530d4519040b5 Mon Sep 17 00:00:00 2001 From: Ahoo Wang Date: Mon, 29 Jul 2019 23:52:10 +0800 Subject: [PATCH 070/127] update SmartSql-version --- build/version.props | 2 +- doc/SmartCode.yml | 8 ++++---- src/SmartCode.Db/SmartCode.Db.csproj | 8 ++++---- src/SmartCode.ETL/SmartCode.ETL.csproj | 6 +++--- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/build/version.props b/build/version.props index 7ef86ed..ab3fc58 100644 --- a/build/version.props +++ b/build/version.props @@ -2,7 +2,7 @@ 2 2 - 65 + 66 $(VersionMajor).$(VersionMinor).$(VersionPatch) diff --git a/doc/SmartCode.yml b/doc/SmartCode.yml index bb8c8be..8eaa48d 100644 --- a/doc/SmartCode.yml +++ b/doc/SmartCode.yml @@ -12,11 +12,11 @@ TemplateEngine: Root: CSharp Output: Type: File - Path: 'E:\SmartSql-Starter' + Path: 'D:\SmartSql-Starter' Parameters: - SmartSqlVersion: '4.0.86' - SmartSqlSchemaVersion: '4.0.82' - BuildDir: 'E:\SmartSql-Starter\build' + SmartSqlVersion: '4.1.9' + SmartSqlSchemaVersion: '4.1.9' + BuildDir: 'D:\SmartSql-Starter\build' DockerImage: 'smartsql.starter' NamingConverter: diff --git a/src/SmartCode.Db/SmartCode.Db.csproj b/src/SmartCode.Db/SmartCode.Db.csproj index b3746f6..9592393 100644 --- a/src/SmartCode.Db/SmartCode.Db.csproj +++ b/src/SmartCode.Db/SmartCode.Db.csproj @@ -5,12 +5,12 @@ - - - + + + - + diff --git a/src/SmartCode.ETL/SmartCode.ETL.csproj b/src/SmartCode.ETL/SmartCode.ETL.csproj index b516674..ec9528f 100644 --- a/src/SmartCode.ETL/SmartCode.ETL.csproj +++ b/src/SmartCode.ETL/SmartCode.ETL.csproj @@ -5,9 +5,9 @@ - - - + + + From 4c76a88e9a1b00d67574716d5ba8b5dc01d56841 Mon Sep 17 00:00:00 2001 From: Ahoo Wang Date: Mon, 5 Aug 2019 15:55:08 +0800 Subject: [PATCH 071/127] update SmartSql version for support new features --- doc/SmartCode.json | 1186 +++++++++++------ doc/SmartCode.yml | 12 +- src/SmartCode.App/SmartCodeApp.cs | 39 +- src/SmartCode.Db/SmartCode.Db.csproj | 8 +- src/SmartCode.ETL/SmartCode.ETL.csproj | 6 +- src/SmartCode/Configuration/TemplateEngine.cs | 1 + 6 files changed, 822 insertions(+), 430 deletions(-) diff --git a/doc/SmartCode.json b/doc/SmartCode.json index fe82b1b..b4d00a6 100644 --- a/doc/SmartCode.json +++ b/doc/SmartCode.json @@ -1,420 +1,800 @@ { - "Module": "SmartSql.Starter", - "Author": "Ahoo Wang", - "DataSource": { - "Name": "Db", - "Parameters": { - "DbName": "SmartSqlStarterDB", - "DbProvider": "SqlServer", - "ConnectionString": "Data Source=.;Initial Catalog=SmartSqlStarterDB;Integrated Security=True" + "ConfigPath": null, + "Module": "SmartSql.Starter", + "Author": "Ahoo Wang", + "DataSource": { + "Name": "DbTable", + "Parameters": { + "DbName": "SmartSqlTestDB", + "DbProvider": "SqlServer", + "ConnectionString": "Data Source=.;Initial Catalog=SmartSqlTestDB;Integrated Security=True" + } + }, + "TemplateEngine": { + "Name": "Razor", + "Root": "CSharp" + }, + "Language": "CSharp", + "Output": { + "Type": "File", + "Path": "E:\\SmartSql-Starter" + }, + "Parameters": { + "SmartSqlVersion": "4.0.86", + "SmartSqlSchemaVersion": "4.0.82", + "BuildDir": "E:\\SmartSql-Starter\\build", + "DockerImage": "smartsql.starter" + }, + "BuildTasks": { + "MakeBuildDir": { + "Type": "Process", + "TemplateEngine": { + "Name": "Razor", + "Root": "CSharp" + }, + "IgnoreNoPKTable": true, + "IgnoreView": true, + "NamingConverter": { + "Table": { + "Tokenizer": { + "Type": "Default", + "Parameters": { + "IgnorePrefix": "T_", + "Delimiter": "_" + } + }, + "Converter": { + "Type": "Pascal", + "Parameters": {} + } + }, + "View": { + "Tokenizer": { + "Type": "Default", + "Parameters": { + "IgnorePrefix": "V_", + "Delimiter": "_" + } + }, + "Converter": { + "Type": "Pascal" + } + }, + "Column": { + "Tokenizer": { + "Type": "Default", + "Parameters": { + "Delimiter": "_" + } + }, + "Converter": { + "Type": "Pascal" + } } + }, + "Parameters": { + "FileName": "powershell", + "Args": "mkdir '{{Project.Parameters.BuildDir}}'" + } }, - "TemplateEngine": "Razor", - "Language": "CSharp", - "Output": { - "Type": "File", - "Path": "E://SmartSql-Starter", - "Name": null, - "Extension": null + "Copy": { + "Type": "Process", + "IgnoreNoPKTable": true, + "IgnoreView": true, + "NamingConverter": { + "Table": { + "Tokenizer": { + "Type": "Default", + "Parameters": { + "IgnorePrefix": "T_", + "Delimiter": "_" + } + }, + "Converter": { + "Type": "Pascal", + "Parameters": {} + } + }, + "View": { + "Tokenizer": { + "Type": "Default", + "Parameters": { + "IgnorePrefix": "V_", + "Delimiter": "_" + } + }, + "Converter": { + "Type": "Pascal" + } + }, + "Column": { + "Tokenizer": { + "Type": "Default", + "Parameters": { + "Delimiter": "_" + } + }, + "Converter": { + "Type": "Pascal" + } + } + }, + "Parameters": { + "FileName": "powershell", + "Args": "cp '{{Project.ConfigPath}}' '{{Project.Parameters.BuildDir}}'" + } }, - "Parameters": null, - "BuildTasks": { - "ClearDir": { - "Type": "Clear", - "Module": null, - "TemplateEngine": "Razor", - "Template": null, - "Output": null, - "IncludeTables": null, - "IgnoreTables": null, - "NamingConverter": { - "Table": { - "Tokenizer": { - "Type": "Default", - "Parameters": {} - }, - "Converter": { - "Type": "Default", - "Parameters": {} - } - }, - "View": { - "Tokenizer": { - "Type": "Default", - "Parameters": {} - }, - "Converter": { - "Type": "Default", - "Parameters": {} - } - }, - "Column": { - "Tokenizer": { - "Type": "Default", - "Parameters": {} - }, - "Converter": { - "Type": "Default", - "Parameters": {} - } - } - }, + "Scaffolding": { + "Type": "MultiTemplate", + "TemplateEngine": { + "Name": "Razor", + "Root": "CSharp" + }, + "Output": { + "Type": "File", + "Path": "." + }, + "IgnoreNoPKTable": true, + "IgnoreView": true, + "NamingConverter": { + "Table": { + "Tokenizer": { + "Type": "Default", "Parameters": { - "Dirs": "." + "IgnorePrefix": "T_", + "Delimiter": "_" } + }, + "Converter": { + "Type": "Pascal", + "Parameters": {} + } }, - "Solution": { - "Type": "Project", - "Module": null, - "TemplateEngine": "Razor", - "Template": "Sln.cshtml", - "Output": { - "Type": "File", - "Path": ".", - "Name": "{{Project.Module}}", - "Extension": ".sln" - }, - "IncludeTables": null, - "IgnoreTables": null, - "NamingConverter": { - "Table": { - "Tokenizer": { - "Type": "Default", - "Parameters": {} - }, - "Converter": { - "Type": "Default", - "Parameters": {} - } - }, - "View": { - "Tokenizer": { - "Type": "Default", - "Parameters": {} - }, - "Converter": { - "Type": "Default", - "Parameters": {} - } - }, - "Column": { - "Tokenizer": { - "Type": "Default", - "Parameters": {} - }, - "Converter": { - "Type": "Default", - "Parameters": {} - } - } - }, - "Parameters": null + "View": { + "Tokenizer": { + "Type": "Default", + "Parameters": { + "IgnorePrefix": "V_", + "Delimiter": "_" + } + }, + "Converter": { + "Type": "Pascal" + } }, - "SmartSqlConfig": { - "Type": "Project", - "Module": null, - "TemplateEngine": "Razor", - "Template": "SqlMapConfig.cshtml", + "Column": { + "Tokenizer": { + "Type": "Default", + "Parameters": { + "Delimiter": "_" + } + }, + "Converter": { + "Type": "Pascal" + } + } + }, + "Parameters": { + "Templates": [ + { + "Key": "Sln.cshtml", "Output": { - "Type": "File", - "Path": "{{Project.Module}}.API", - "Name": "SmartSqlMapConfig", - "Extension": ".xml" - }, - "IncludeTables": null, - "IgnoreTables": null, - "NamingConverter": { - "Table": { - "Tokenizer": { - "Type": "Default", - "Parameters": {} - }, - "Converter": { - "Type": "Default", - "Parameters": {} - } - }, - "View": { - "Tokenizer": { - "Type": "Default", - "Parameters": {} - }, - "Converter": { - "Type": "Default", - "Parameters": {} - } - }, - "Column": { - "Tokenizer": { - "Type": "Default", - "Parameters": {} - }, - "Converter": { - "Type": "Default", - "Parameters": {} - } - } - }, - "Parameters": null - }, - "Entity_Project": { - "Type": "Project", - "Module": null, - "TemplateEngine": "Razor", - "Template": "Proj.cshtml", + "Name": "{{Project.Module}}", + "Extension": ".sln" + } + }, + { + "Key": "Sln-Directory.Build.cshtml", "Output": { - "Type": "File", - "Path": "{{Project.Module}}.Entity", - "Name": "{{Project.Module}}.Entity", - "Extension": ".csproj" - }, - "IncludeTables": null, - "IgnoreTables": null, - "NamingConverter": { - "Table": { - "Tokenizer": { - "Type": "Default", - "Parameters": {} - }, - "Converter": { - "Type": "Default", - "Parameters": {} - } - }, - "View": { - "Tokenizer": { - "Type": "Default", - "Parameters": {} - }, - "Converter": { - "Type": "Default", - "Parameters": {} - } - }, - "Column": { - "Tokenizer": { - "Type": "Default", - "Parameters": {} - }, - "Converter": { - "Type": "Default", - "Parameters": {} - } - } - }, - "Parameters": null - }, - "Entity": { - "Type": "Table", - "Module": "Entity", - "TemplateEngine": "Razor", - "Template": "Entity.cshtml", + "Name": "Directory.Build", + "Extension": ".props" + } + }, + { + "Key": "Sln-Version.cshtml", "Output": { - "Type": "File", - "Path": "{{Project.Module}}.{{Build.Module}}", - "Name": null, - "Extension": ".cs" - }, - "IncludeTables": null, - "IgnoreTables": null, - "NamingConverter": { - "Table": { - "Tokenizer": { - "Type": "Default", - "Parameters": { - "IgnorePrefix": "T_", - "Delimiter": "_" - } - }, - "Converter": { - "Type": "Default", - "Parameters": {} - } - }, - "View": { - "Tokenizer": { - "Type": "Default", - "Parameters": { - "IgnorePrefix": "V_", - "Delimiter": "_" - } - }, - "Converter": { - "Type": "Pascal", - "Parameters": null - } - }, - "Column": { - "Tokenizer": { - "Type": "Default", - "Parameters": { - "Delimiter": "_" - } - }, - "Converter": { - "Type": "Pascal", - "Parameters": null - } - } - }, - "Parameters": null - }, - "Repository_Project": { - "Type": "Project", - "Module": null, - "TemplateEngine": "Razor", - "Template": "Proj-Repository.cshtml", + "Path": "build", + "Name": "version", + "Extension": ".props" + } + }, + { + "Key": "Sln-Dockerfile.cshtml", "Output": { - "Type": "File", - "Path": "{{Project.Module}}.Repository", - "Name": "{{Project.Module}}.Repository", - "Extension": ".csproj" - }, - "IncludeTables": null, - "IgnoreTables": null, - "NamingConverter": { - "Table": { - "Tokenizer": { - "Type": "Default", - "Parameters": {} - }, - "Converter": { - "Type": "Default", - "Parameters": {} - } - }, - "View": { - "Tokenizer": { - "Type": "Default", - "Parameters": {} - }, - "Converter": { - "Type": "Default", - "Parameters": {} - } - }, - "Column": { - "Tokenizer": { - "Type": "Default", - "Parameters": {} - }, - "Converter": { - "Type": "Default", - "Parameters": {} - } - } - }, - "Parameters": null - }, - "Repository": { - "Type": "Table", - "Module": "Repository", - "TemplateEngine": "Razor", - "Template": "Repository.cshtml", + "Name": "Dockerfile", + "Extension": "" + } + }, + { + "Key": "Sln-DockerIgnore.cshtml", "Output": { - "Type": "File", - "Path": "{{Project.Module}}.{{Build.Module}}", - "Name": "I{{OutputName}}Repository", - "Extension": ".cs" - }, - "IncludeTables": null, - "IgnoreTables": null, - "NamingConverter": { - "Table": { - "Tokenizer": { - "Type": "Default", - "Parameters": { - "IgnorePrefix": "T_", - "Delimiter": "_" - } - }, - "Converter": { - "Type": "Default", - "Parameters": null - } - }, - "View": { - "Tokenizer": { - "Type": "Default", - "Parameters": { - "IgnorePrefix": "V_", - "Delimiter": "_" - } - }, - "Converter": { - "Type": "Default", - "Parameters": null - } - }, - "Column": { - "Tokenizer": { - "Type": "Default", - "Parameters": {} - }, - "Converter": { - "Type": "Default", - "Parameters": {} - } - } - }, - "Parameters": null - }, - "SqlMap": { - "Type": "Table", - "Module": null, - "TemplateEngine": "Razor", - "Template": "SqlMap-SqlServer.cshtml", + "Name": ".dockerignore", + "Extension": "" + } + }, + { + "Key": "Sln-GitIgnore.cshtml", + "Output": { + "Name": ".gitignore", + "Extension": "" + } + }, + { + "Key": "Proj-Entity.cshtml", + "Output": { + "Path": "src/{{Project.Module}}.Entity", + "Name": "{{Project.Module}}.Entity", + "Extension": ".csproj" + } + }, + { + "Key": "Proj-Repository.cshtml", "Output": { - "Type": "File", - "Path": "{{Project.Module}}.API/Maps", - "Name": null, - "Extension": ".xml" - }, - "IncludeTables": null, - "IgnoreTables": null, - "NamingConverter": { - "Table": { - "Tokenizer": { - "Type": "Default", - "Parameters": { - "IgnorePrefix": "T_", - "Delimiter": "_" - } - }, - "Converter": { - "Type": "Default", - "Parameters": null - } - }, - "View": { - "Tokenizer": { - "Type": "Default", - "Parameters": { - "IgnorePrefix": "V_", - "Delimiter": "_" - } - }, - "Converter": { - "Type": "Default", - "Parameters": null - } - }, - "Column": { - "Tokenizer": { - "Type": "Default", - "Parameters": { - "IgnorePrefix": "T_", - "Delimiter": "_" - } - }, - "Converter": { - "Type": "Default", - "Parameters": null - } - } - }, - "Parameters": null + "Path": "src/{{Project.Module}}.Repository", + "Name": "{{Project.Module}}.Repository", + "Extension": ".csproj" + } + }, + { + "Key": "Proj-Service.cshtml", + "Output": { + "Path": "src/{{Project.Module}}.Service", + "Name": "{{Project.Module}}.Service", + "Extension": ".csproj" + } + }, + { + "Key": "Proj-API.cshtml", + "Output": { + "Path": "src/{{Project.Module}}.API", + "Name": "{{Project.Module}}.API", + "Extension": ".csproj" + } + }, + { + "Key": "API/LaunchSettings.cshtml", + "Output": { + "Path": "src/{{Project.Module}}.API/Properties", + "Name": "launchSettings", + "Extension": ".json" + } + }, + { + "Key": "API/AppSettings.cshtml", + "Output": { + "Path": "src/{{Project.Module}}.API", + "Name": "appsettings", + "Extension": ".json" + } + }, + { + "Key": "API/AppSettings-Development.cshtml", + "Output": { + "Path": "src/{{Project.Module}}.API", + "Name": "appsettings.Development", + "Extension": ".json" + } + }, + { + "Key": "API/Program.cshtml", + "Output": { + "Path": "src/{{Project.Module}}.API", + "Name": "Program", + "Extension": ".cs" + } + }, + { + "Key": "API/Startup.cshtml", + "Output": { + "Path": "src/{{Project.Module}}.API", + "Name": "Startup", + "Extension": ".cs" + } + }, + { + "Key": "API/APIException.cshtml", + "Output": { + "Path": "src/{{Project.Module}}.API/Exceptions", + "Name": "APIException", + "Extension": ".cs" + } + }, + { + "Key": "API/GlobalExceptionFilter.cshtml", + "Output": { + "Path": "src/{{Project.Module}}.API/Filters", + "Name": "GlobalExceptionFilter", + "Extension": ".cs" + } + }, + { + "Key": "API/GlobalValidateModelFilter.cshtml", + "Output": { + "Path": "src/{{Project.Module}}.API/Filters", + "Name": "GlobalValidateModelFilter", + "Extension": ".cs" + } + }, + { + "Key": "API/QueryRequest.cshtml", + "Output": { + "Path": "src/{{Project.Module}}.API/Messages", + "Name": "QueryRequest", + "Extension": ".cs" + } + }, + { + "Key": "API/QueryByPageRequest.cshtml", + "Output": { + "Path": "src/{{Project.Module}}.API/Messages", + "Name": "QueryByPageRequest", + "Extension": ".cs" + } + }, + { + "Key": "API/ResponseMessage.cshtml", + "Output": { + "Path": "src/{{Project.Module}}.API/Messages", + "Name": "ResponseMessage", + "Extension": ".cs" + } + }, + { + "Key": "API/QueryResponse.cshtml", + "Output": { + "Path": "src/{{Project.Module}}.API/Messages", + "Name": "QueryResponse", + "Extension": ".cs" + } + }, + { + "Key": "API/QueryByPageResponse.cshtml", + "Output": { + "Path": "src/{{Project.Module}}.API/Messages", + "Name": "QueryByPageResponse", + "Extension": ".cs" + } + }, + { + "Key": "API/ResponseMessage.cshtml", + "Output": { + "Path": "src/{{Project.Module}}.API/Messages", + "Name": "ResponseMessage", + "Extension": ".cs" + } + }, + { + "Key": "SqlMapConfig.cshtml", + "Output": { + "Path": "src/{{Project.Module}}.Repository", + "Name": "SmartSqlMapConfig", + "Extension": ".xml" + } + }, + { + "Key": "SqlMapConfig.cshtml", + "Output": { + "Path": "src/{{Project.Module}}.Repository", + "Name": "SmartSqlMapConfig.Development", + "Extension": ".xml" + } + } + ] + } + }, + "Entity": { + "Type": "Table", + "Module": "Entity", + "TemplateEngine": { + "Name": "Razor", + "Root": "CSharp", + "Path": "Entity.cshtml" + }, + "Output": { + "Type": "File", + "Path": "src/{{Project.Module}}.{{Build.Module}}", + "Mode": 1, + "Name": "{{Items.CurrentTable.ConvertedName}}", + "Extension": ".cs" + }, + "IgnoreNoPKTable": false, + "IgnoreView": false, + "NamingConverter": { + "Table": { + "Tokenizer": { + "Type": "Default", + "Parameters": { + "IgnorePrefix": "T_", + "Delimiter": "_" + } + }, + "Converter": { + "Type": "Pascal", + "Parameters": {} + } + }, + "View": { + "Tokenizer": { + "Type": "Default", + "Parameters": { + "IgnorePrefix": "V_", + "Delimiter": "_" + } + }, + "Converter": { + "Type": "Pascal" + } + }, + "Column": { + "Tokenizer": { + "Type": "Default", + "Parameters": { + "Delimiter": "_" + } + }, + "Converter": { + "Type": "Pascal" + } + } + } + }, + "Repository": { + "Type": "Table", + "Module": "Repository", + "TemplateEngine": { + "Name": "Razor", + "Root": "CSharp", + "Path": "Repository.cshtml" + }, + "Output": { + "Type": "File", + "Path": "src/{{Project.Module}}.{{Build.Module}}", + "Mode": 1, + "Name": "I{{Items.CurrentTable.ConvertedName}}Repository", + "Extension": ".cs" + }, + "IgnoreNoPKTable": true, + "IgnoreView": true, + "NamingConverter": { + "Table": { + "Tokenizer": { + "Type": "Default", + "Parameters": { + "IgnorePrefix": "T_", + "Delimiter": "_" + } + }, + "Converter": { + "Type": "Pascal", + "Parameters": {} + } + }, + "View": { + "Tokenizer": { + "Type": "Default", + "Parameters": { + "IgnorePrefix": "V_", + "Delimiter": "_" + } + }, + "Converter": { + "Type": "Pascal" + } + }, + "Column": { + "Tokenizer": { + "Type": "Default", + "Parameters": { + "Delimiter": "_" + } + }, + "Converter": { + "Type": "Pascal" + } + } + } + }, + "Service": { + "Type": "Table", + "Module": "Service", + "TemplateEngine": { + "Name": "Razor", + "Root": "CSharp", + "Path": "Service.cshtml" + }, + "Output": { + "Type": "File", + "Path": "src/{{Project.Module}}.{{Build.Module}}", + "Name": "{{Items.CurrentTable.ConvertedName}}Service", + "Extension": ".cs" + }, + "IgnoreNoPKTable": true, + "IgnoreView": true, + "NamingConverter": { + "Table": { + "Tokenizer": { + "Type": "Default", + "Parameters": { + "IgnorePrefix": "T_", + "Delimiter": "_" + } + }, + "Converter": { + "Type": "Pascal", + "Parameters": {} + } + }, + "View": { + "Tokenizer": { + "Type": "Default", + "Parameters": { + "IgnorePrefix": "V_", + "Delimiter": "_" + } + }, + "Converter": { + "Type": "Pascal" + } + }, + "Column": { + "Tokenizer": { + "Type": "Default", + "Parameters": { + "Delimiter": "_" + } + }, + "Converter": { + "Type": "Pascal" + } } + } }, - "OutputPath": "E://SmartSql-Starter" + "APIController": { + "Type": "Table", + "Module": "API", + "TemplateEngine": { + "Name": "Razor", + "Root": "CSharp", + "Path": "API/APIController.cshtml" + }, + "Output": { + "Type": "File", + "Path": "src/{{Project.Module}}.{{Build.Module}}/Controllers", + "Name": "{{Items.CurrentTable.ConvertedName}}Controller", + "Extension": ".cs" + }, + "IgnoreNoPKTable": true, + "IgnoreView": true, + "NamingConverter": { + "Table": { + "Tokenizer": { + "Type": "Default", + "Parameters": { + "IgnorePrefix": "T_", + "Delimiter": "_" + } + }, + "Converter": { + "Type": "Pascal", + "Parameters": {} + } + }, + "View": { + "Tokenizer": { + "Type": "Default", + "Parameters": { + "IgnorePrefix": "V_", + "Delimiter": "_" + } + }, + "Converter": { + "Type": "Pascal" + } + }, + "Column": { + "Tokenizer": { + "Type": "Default", + "Parameters": { + "Delimiter": "_" + } + }, + "Converter": { + "Type": "Pascal" + } + } + } + }, + "SqlMap": { + "Type": "Table", + "TemplateEngine": { + "Name": "Razor", + "Root": "CSharp", + "Path": "SqlMap.cshtml" + }, + "Output": { + "Type": "File", + "Path": "src/{{Project.Module}}.Repository/Maps", + "Name": "{{Items.CurrentTable.ConvertedName}}", + "Extension": ".xml" + }, + "IgnoreNoPKTable": true, + "IgnoreView": true, + "NamingConverter": { + "Table": { + "Tokenizer": { + "Type": "Default", + "Parameters": { + "IgnorePrefix": "T_", + "Delimiter": "_" + } + }, + "Converter": { + "Type": "Pascal", + "Parameters": {} + } + }, + "View": { + "Tokenizer": { + "Type": "Default", + "Parameters": { + "IgnorePrefix": "V_", + "Delimiter": "_" + } + }, + "Converter": { + "Type": "Pascal" + } + }, + "Column": { + "Tokenizer": { + "Type": "Default", + "Parameters": { + "Delimiter": "_" + } + }, + "Converter": { + "Type": "Pascal" + } + } + } + }, + "CodeFormat": { + "Type": "Process", + "IgnoreNoPKTable": true, + "IgnoreView": true, + "NamingConverter": { + "Table": { + "Tokenizer": { + "Type": "Default", + "Parameters": { + "IgnorePrefix": "T_", + "Delimiter": "_" + } + }, + "Converter": { + "Type": "Pascal" + } + }, + "View": { + "Tokenizer": { + "Type": "Default", + "Parameters": { + "IgnorePrefix": "V_", + "Delimiter": "_" + } + }, + "Converter": { + "Type": "Pascal" + } + }, + "Column": { + "Tokenizer": { + "Type": "Default", + "Parameters": { + "Delimiter": "_" + } + }, + "Converter": { + "Type": "Pascal" + } + } + }, + "Parameters": { + "FileName": "powershell", + "WorkingDirectory": "{{Project.Output.Path}}", + "Args": "dotnet-format" + } + }, + "ReStore": { + "Type": "Process", + "IgnoreNoPKTable": true, + "IgnoreView": true, + "NamingConverter": { + "Table": { + "Tokenizer": { + "Type": "Default", + "Parameters": { + "IgnorePrefix": "T_", + "Delimiter": "_" + } + }, + "Converter": { + "Type": "Pascal", + "Parameters": {} + } + }, + "View": { + "Tokenizer": { + "Type": "Default", + "Parameters": { + "IgnorePrefix": "V_", + "Delimiter": "_" + } + }, + "Converter": { + "Type": "Pascal" + } + }, + "Column": { + "Tokenizer": { + "Type": "Default", + "Parameters": { + "Delimiter": "_" + } + }, + "Converter": { + "Type": "Pascal" + } + } + }, + "Parameters": { + "FileName": "powershell", + "WorkingDirectory": "{{Project.Output.Path}}", + "Args": "dotnet restore" + } + } + }, + "OutputPath": "E:\\SmartSql-Starter", + "NamingConverter": { + "Table": { + "Tokenizer": { + "Type": "Default", + "Parameters": { + "IgnorePrefix": "T_", + "Delimiter": "_" + } + }, + "Converter": { + "Type": "Pascal" + } + }, + "View": { + "Tokenizer": { + "Type": "Default", + "Parameters": { + "IgnorePrefix": "V_", + "Delimiter": "_" + } + }, + "Converter": { + "Type": "Pascal" + } + }, + "Column": { + "Tokenizer": { + "Type": "Default", + "Parameters": { + "Delimiter": "_" + } + }, + "Converter": { + "Type": "Pascal", + "Parameters": null + } + } + }, + "TableFilter": { + "IgnoreNoPKTable": true, + "IgnoreView": true + } } \ No newline at end of file diff --git a/doc/SmartCode.yml b/doc/SmartCode.yml index bb8c8be..2e09225 100644 --- a/doc/SmartCode.yml +++ b/doc/SmartCode.yml @@ -14,8 +14,8 @@ Output: Type: File Path: 'E:\SmartSql-Starter' Parameters: - SmartSqlVersion: '4.0.86' - SmartSqlSchemaVersion: '4.0.82' + SmartSqlVersion: '4.1.18' + SmartSqlSchemaVersion: '4.1.16' BuildDir: 'E:\SmartSql-Starter\build' DockerImage: 'smartsql.starter' @@ -52,10 +52,10 @@ TableFilter: # 构建任务 Build: -# ClearDir: -# Type: Clear -# Parameters: -# Dirs: '.' + ClearDir: + Type: Clear + Parameters: + Dirs: '.' MakeBuildDir: Type: Process diff --git a/src/SmartCode.App/SmartCodeApp.cs b/src/SmartCode.App/SmartCodeApp.cs index 28f6746..2841496 100644 --- a/src/SmartCode.App/SmartCodeApp.cs +++ b/src/SmartCode.App/SmartCodeApp.cs @@ -7,6 +7,7 @@ using SmartCode.Configuration.ConfigBuilders; using System.Reflection; using HandlebarsDotNet; +using Newtonsoft.Json; namespace SmartCode.App { @@ -20,6 +21,7 @@ public class SmartCodeApp public Project Project { get; private set; } public string ConfigPath => SmartCodeOptions.ConfigPath; public ILogger Logger { get; private set; } + public SmartCodeApp(SmartCodeOptions smartCodeOptions) { SmartCodeOptions = smartCodeOptions; @@ -33,20 +35,23 @@ private void BuildProject() switch (pathExtension) { case ".JSON": - { - ConfigBuilder = new JsonBuilder(ConfigPath); - break; - } + { + ConfigBuilder = new JsonBuilder(ConfigPath); + break; + } + case ".YML": - { - ConfigBuilder = new YamlBuilder(ConfigPath); - break; - } + { + ConfigBuilder = new YamlBuilder(ConfigPath); + break; + } + default: - { - throw new SmartCodeException($"ConfigPath:{ConfigPath},未知扩展名:{pathExtension}"); - } + { + throw new SmartCodeException($"ConfigPath:{ConfigPath},未知扩展名:{pathExtension}"); + } } + Project = ConfigBuilder.Build(); Project.ConfigPath = ConfigPath; } @@ -71,15 +76,19 @@ private void RegisterPlugins() { throw new SmartCodeException($"Plugin.Type:{plugin.TypeName} can not find!"); } + var implType = Assembly.Load(plugin.ImplAssemblyName).GetType(plugin.ImplTypeName); if (implType == null) { throw new SmartCodeException($"Plugin.ImplType:{plugin.ImplTypeName} can not find!"); } + if (!pluginType.IsAssignableFrom(implType)) { - throw new SmartCodeException($"Plugin.ImplType:{implType.FullName} can not Impl Plugin.Type:{pluginType.FullName}!"); + throw new SmartCodeException( + $"Plugin.ImplType:{implType.FullName} can not Impl Plugin.Type:{pluginType.FullName}!"); } + Services.AddSingleton(pluginType, implType); } } @@ -92,7 +101,8 @@ public async Task Run() var projectBuilder = ServiceProvider.GetRequiredService(); Logger.LogInformation($"------- Build ConfigPath:{ConfigPath} Start! --------"); await projectBuilder.Build(); - Logger.LogInformation($"-------- Build ConfigPath:{ConfigPath},Output:{Project.Output?.Path} End! --------"); + Logger.LogInformation( + $"-------- Build ConfigPath:{ConfigPath},Output:{Project.Output?.Path} End! --------"); } catch (SmartCodeException scEx) { @@ -104,10 +114,11 @@ public async Task Run() public class NullTextEncoder : ITextEncoder { public static NullTextEncoder Instance = new NullTextEncoder(); + public string Encode(string value) { return value; } } } -} +} \ No newline at end of file diff --git a/src/SmartCode.Db/SmartCode.Db.csproj b/src/SmartCode.Db/SmartCode.Db.csproj index b3746f6..f2e14f1 100644 --- a/src/SmartCode.Db/SmartCode.Db.csproj +++ b/src/SmartCode.Db/SmartCode.Db.csproj @@ -5,12 +5,12 @@ - - - + + + - + diff --git a/src/SmartCode.ETL/SmartCode.ETL.csproj b/src/SmartCode.ETL/SmartCode.ETL.csproj index b516674..31e9f88 100644 --- a/src/SmartCode.ETL/SmartCode.ETL.csproj +++ b/src/SmartCode.ETL/SmartCode.ETL.csproj @@ -5,9 +5,9 @@ - - - + + + diff --git a/src/SmartCode/Configuration/TemplateEngine.cs b/src/SmartCode/Configuration/TemplateEngine.cs index 9d48271..0e4300e 100644 --- a/src/SmartCode/Configuration/TemplateEngine.cs +++ b/src/SmartCode/Configuration/TemplateEngine.cs @@ -13,6 +13,7 @@ public class TemplateEngine public String Name { get; set; } public String Root { get; set; } public String Path { get; set; } + [Newtonsoft.Json.JsonIgnore] public String FullPath => System.IO.Path.Combine(Root, Path); } } From 3bb466e76630db20622dea7e77f24ef952dd1b3f Mon Sep 17 00:00:00 2001 From: Ahoo Wang Date: Mon, 5 Aug 2019 15:55:25 +0800 Subject: [PATCH 072/127] update version --- build/version.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/version.props b/build/version.props index 7ef86ed..ab3fc58 100644 --- a/build/version.props +++ b/build/version.props @@ -2,7 +2,7 @@ 2 2 - 65 + 66 $(VersionMajor).$(VersionMinor).$(VersionPatch) From bcee4e14075498b1f290be798bcf0b53ba4b4b74 Mon Sep 17 00:00:00 2001 From: Ahoo Wang Date: Mon, 5 Aug 2019 16:12:25 +0800 Subject: [PATCH 073/127] update version --- build/version.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/version.props b/build/version.props index ab3fc58..8112dcf 100644 --- a/build/version.props +++ b/build/version.props @@ -2,7 +2,7 @@ 2 2 - 66 + 68 $(VersionMajor).$(VersionMinor).$(VersionPatch) From ebaa21761c099ce0f29320c780b2b9e87a6b0122 Mon Sep 17 00:00:00 2001 From: Ahoo Wang Date: Wed, 21 Aug 2019 12:14:08 +0800 Subject: [PATCH 074/127] add CryptoTypeHandler fix ConfigName problem --- build/version.props | 2 +- doc/SmartCode.yml | 2 +- src/SmartCode.Db/SmartCode.Db.csproj | 8 +-- src/SmartCode.ETL/SmartCode.ETL.csproj | 6 +- .../RazorTemplates/CSharp/Sln.cshtml | 65 ++++++++++--------- .../RazorTemplates/CSharp/SqlMapConfig.cshtml | 52 +++++++++++---- 6 files changed, 81 insertions(+), 54 deletions(-) diff --git a/build/version.props b/build/version.props index 8112dcf..38e7016 100644 --- a/build/version.props +++ b/build/version.props @@ -2,7 +2,7 @@ 2 2 - 68 + 70 $(VersionMajor).$(VersionMinor).$(VersionPatch) diff --git a/doc/SmartCode.yml b/doc/SmartCode.yml index 2e09225..9ad8d25 100644 --- a/doc/SmartCode.yml +++ b/doc/SmartCode.yml @@ -14,7 +14,7 @@ Output: Type: File Path: 'E:\SmartSql-Starter' Parameters: - SmartSqlVersion: '4.1.18' + SmartSqlVersion: '4.1.23' SmartSqlSchemaVersion: '4.1.16' BuildDir: 'E:\SmartSql-Starter\build' DockerImage: 'smartsql.starter' diff --git a/src/SmartCode.Db/SmartCode.Db.csproj b/src/SmartCode.Db/SmartCode.Db.csproj index f2e14f1..872e0e8 100644 --- a/src/SmartCode.Db/SmartCode.Db.csproj +++ b/src/SmartCode.Db/SmartCode.Db.csproj @@ -5,13 +5,13 @@ - - - + + + - + diff --git a/src/SmartCode.ETL/SmartCode.ETL.csproj b/src/SmartCode.ETL/SmartCode.ETL.csproj index 31e9f88..006b987 100644 --- a/src/SmartCode.ETL/SmartCode.ETL.csproj +++ b/src/SmartCode.ETL/SmartCode.ETL.csproj @@ -5,9 +5,9 @@ - - - + + + diff --git a/src/SmartCode.Generator/RazorTemplates/CSharp/Sln.cshtml b/src/SmartCode.Generator/RazorTemplates/CSharp/Sln.cshtml index 30fc2cb..6444783 100644 --- a/src/SmartCode.Generator/RazorTemplates/CSharp/Sln.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/CSharp/Sln.cshtml @@ -1,7 +1,9 @@ -@using SmartCode +@using System.IO +@using SmartCode @model BuildContext @{ var project = Model.Project; + var configFileName = System.IO.Path.GetFileName(project.ConfigPath); } Microsoft Visual Studio Solution File, Format Version 12.00 @@ -22,7 +24,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "build", "build", "{68E40CDE ProjectSection(SolutionItems) = preProject Directory.Build.props = Directory.Build.props build\version.props = build\version.props -build\SmartCode.yml = build\SmartCode.yml +build\@configFileName = build\@configFileName EndProjectSection EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "docker", "docker", "{1666CC75-624D-4AE9-84D7-7F9F338658C5}" @@ -32,33 +34,32 @@ Dockerfile = Dockerfile EndProjectSection EndProject Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {88A185DB-0242-4843-9284-334850FF611C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {88A185DB-0242-4843-9284-334850FF611C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {88A185DB-0242-4843-9284-334850FF611C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {88A185DB-0242-4843-9284-334850FF611C}.Release|Any CPU.Build.0 = Release|Any CPU - {6A7E8C9E-6A9F-49FD-AD48-F297E515EB10}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6A7E8C9E-6A9F-49FD-AD48-F297E515EB10}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6A7E8C9E-6A9F-49FD-AD48-F297E515EB10}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6A7E8C9E-6A9F-49FD-AD48-F297E515EB10}.Release|Any CPU.Build.0 = Release|Any CPU - {D274EF03-E956-40EF-B874-58A5FBE83A00}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D274EF03-E956-40EF-B874-58A5FBE83A00}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D274EF03-E956-40EF-B874-58A5FBE83A00}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D274EF03-E956-40EF-B874-58A5FBE83A00}.Release|Any CPU.Build.0 = Release|Any CPU - {CEA52B07-9E7F-4A4D-AF6D-4C43E7255D0E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CEA52B07-9E7F-4A4D-AF6D-4C43E7255D0E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CEA52B07-9E7F-4A4D-AF6D-4C43E7255D0E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CEA52B07-9E7F-4A4D-AF6D-4C43E7255D0E}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(NestedProjects) = preSolution - {CEA52B07-9E7F-4A4D-AF6D-4C43E7255D0E} = {20C12BB6-7202-46F4-9A92-3528FFC2B91B} - EndGlobalSection -EndGlobal - +GlobalSection(SolutionConfigurationPlatforms) = preSolution +Debug|Any CPU = Debug|Any CPU +Release|Any CPU = Release|Any CPU +EndGlobalSection +GlobalSection(ProjectConfigurationPlatforms) = postSolution +{88A185DB-0242-4843-9284-334850FF611C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU +{88A185DB-0242-4843-9284-334850FF611C}.Debug|Any CPU.Build.0 = Debug|Any CPU +{88A185DB-0242-4843-9284-334850FF611C}.Release|Any CPU.ActiveCfg = Release|Any CPU +{88A185DB-0242-4843-9284-334850FF611C}.Release|Any CPU.Build.0 = Release|Any CPU +{6A7E8C9E-6A9F-49FD-AD48-F297E515EB10}.Debug|Any CPU.ActiveCfg = Debug|Any CPU +{6A7E8C9E-6A9F-49FD-AD48-F297E515EB10}.Debug|Any CPU.Build.0 = Debug|Any CPU +{6A7E8C9E-6A9F-49FD-AD48-F297E515EB10}.Release|Any CPU.ActiveCfg = Release|Any CPU +{6A7E8C9E-6A9F-49FD-AD48-F297E515EB10}.Release|Any CPU.Build.0 = Release|Any CPU +{D274EF03-E956-40EF-B874-58A5FBE83A00}.Debug|Any CPU.ActiveCfg = Debug|Any CPU +{D274EF03-E956-40EF-B874-58A5FBE83A00}.Debug|Any CPU.Build.0 = Debug|Any CPU +{D274EF03-E956-40EF-B874-58A5FBE83A00}.Release|Any CPU.ActiveCfg = Release|Any CPU +{D274EF03-E956-40EF-B874-58A5FBE83A00}.Release|Any CPU.Build.0 = Release|Any CPU +{CEA52B07-9E7F-4A4D-AF6D-4C43E7255D0E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU +{CEA52B07-9E7F-4A4D-AF6D-4C43E7255D0E}.Debug|Any CPU.Build.0 = Debug|Any CPU +{CEA52B07-9E7F-4A4D-AF6D-4C43E7255D0E}.Release|Any CPU.ActiveCfg = Release|Any CPU +{CEA52B07-9E7F-4A4D-AF6D-4C43E7255D0E}.Release|Any CPU.Build.0 = Release|Any CPU +EndGlobalSection +GlobalSection(SolutionProperties) = preSolution +HideSolutionNode = FALSE +EndGlobalSection +GlobalSection(NestedProjects) = preSolution +{CEA52B07-9E7F-4A4D-AF6D-4C43E7255D0E} = {20C12BB6-7202-46F4-9A92-3528FFC2B91B} +EndGlobalSection +EndGlobal \ No newline at end of file diff --git a/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMapConfig.cshtml b/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMapConfig.cshtml index 5435781..1a0a63f 100644 --- a/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMapConfig.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMapConfig.cshtml @@ -7,41 +7,67 @@ var dbProvider = dbSource.DbProvider; var writeDataSource = dbSource.WriteDataSource; } - + + - + - - + + + @if (dbSource.DbRepository.DbProvider == DbProvider.PostgreSql) { - + + } else { - + + } - - + + + + + + + + + + + + + + + + + + + + + + + + - + - - - + + + - + \ No newline at end of file From ab015eda4220353c82a131ffd7c1e8b5f2021f4f Mon Sep 17 00:00:00 2001 From: Ahoo Wang Date: Wed, 21 Aug 2019 13:51:30 +0800 Subject: [PATCH 075/127] add support spring-boot-mybaits template --- .../RazorTemplates/Java/Application.cshtml | 13 +++ .../RazorTemplates/Java/Controller.cshtml | 0 .../RazorTemplates/Java/Entity.cshtml | 82 ++++++++--------- .../RazorTemplates/Java/Pom.cshtml | 91 +++++++++++++++++++ .../RazorTemplates/Java/Repository.cshtml | 0 .../Resources/Application-Properties.cshtml | 0 .../Java/Resources/Maps/Mapper.cshtml | 8 ++ .../RazorTemplates/Java/Service.cshtml | 0 .../Java/Test/Application-Test.cshtml | 16 ++++ 9 files changed, 165 insertions(+), 45 deletions(-) create mode 100644 src/SmartCode.Generator/RazorTemplates/Java/Application.cshtml create mode 100644 src/SmartCode.Generator/RazorTemplates/Java/Controller.cshtml create mode 100644 src/SmartCode.Generator/RazorTemplates/Java/Pom.cshtml create mode 100644 src/SmartCode.Generator/RazorTemplates/Java/Repository.cshtml create mode 100644 src/SmartCode.Generator/RazorTemplates/Java/Resources/Application-Properties.cshtml create mode 100644 src/SmartCode.Generator/RazorTemplates/Java/Resources/Maps/Mapper.cshtml create mode 100644 src/SmartCode.Generator/RazorTemplates/Java/Service.cshtml create mode 100644 src/SmartCode.Generator/RazorTemplates/Java/Test/Application-Test.cshtml diff --git a/src/SmartCode.Generator/RazorTemplates/Java/Application.cshtml b/src/SmartCode.Generator/RazorTemplates/Java/Application.cshtml new file mode 100644 index 0000000..94957c0 --- /dev/null +++ b/src/SmartCode.Generator/RazorTemplates/Java/Application.cshtml @@ -0,0 +1,13 @@ +package me.ahoo.demo; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@@SpringBootApplication +public class DemoApplication { + +public static void main(String[] args) { +SpringApplication.run(DemoApplication.class, args); +} + +} \ No newline at end of file diff --git a/src/SmartCode.Generator/RazorTemplates/Java/Controller.cshtml b/src/SmartCode.Generator/RazorTemplates/Java/Controller.cshtml new file mode 100644 index 0000000..e69de29 diff --git a/src/SmartCode.Generator/RazorTemplates/Java/Entity.cshtml b/src/SmartCode.Generator/RazorTemplates/Java/Entity.cshtml index 94a2fa9..fe4b07c 100644 --- a/src/SmartCode.Generator/RazorTemplates/Java/Entity.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/Java/Entity.cshtml @@ -1,5 +1,4 @@ @using SmartCode -@using SmartCode.Db @model BuildContext @{ Layout = "_JavaLayout.cshtml"; @@ -9,56 +8,49 @@ } @functions { -public string ConvertLangType(SmartCode.Generator.Entity.Column column) -{ - if (String.IsNullOrEmpty(column.LanguageType)) - { - return "NAType"; - } - if (!column.IsNullable) - { - return column.LanguageType; - } - if (column.LanguageType.Contains("[]") || column.LanguageType.ToLower() == "string") + public string ConvertLangType(SmartCode.Generator.Entity.Column column) { - return column.LanguageType; + if (String.IsNullOrEmpty(column.LanguageType)) + { + return "NAType"; + } + if (!column.IsNullable) + { + return column.LanguageType; + } + + if (column.LanguageType.Contains("[]") || column.LanguageType.ToLower() == "string") + { + return column.LanguageType; + } + return $"{column.LanguageType}?"; } - return $"{column.LanguageType}?"; -} } package @(project.Module).@buildTask.Module; import java.security.Timestamp; - /** - * @(table.Description ?? table.ConvertedName) - */ - public class @table.ConvertedName - { - @foreach (var column in table.Columns) - { - - - /** - * @column.Description - */ - private @(ConvertLangType(column)) @column.ConvertedName; - - } - - @foreach (var column in table.Columns) - { - - public @ConvertLangType(column) get@(NamingUtil.PascalCase(column.ConvertedName))(){ - return @column.ConvertedName ; - } - - public void set@(NamingUtil.PascalCase(column.ConvertedName))(@(ConvertLangType(column)) @column.ConvertedName){ - this.@column.ConvertedName = @column.ConvertedName; - } - - - } - } +import lombok.Builder; +import lombok.Data; +import lombok.ToString; + +/** +* @(table.Description ?? table.ConvertedName) +*/ +@@Data +@@Builder +@@ToString +public class @table.ConvertedName +{ +@foreach (var column in table.Columns) +{ + + /** + * @column.Description + */ + private @(ConvertLangType(column)) @column.ConvertedName; + +} +} \ No newline at end of file diff --git a/src/SmartCode.Generator/RazorTemplates/Java/Pom.cshtml b/src/SmartCode.Generator/RazorTemplates/Java/Pom.cshtml new file mode 100644 index 0000000..9fcee24 --- /dev/null +++ b/src/SmartCode.Generator/RazorTemplates/Java/Pom.cshtml @@ -0,0 +1,91 @@ + + + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 2.1.7.RELEASE + + + me.ahoo + demo + 0.0.1-SNAPSHOT + demo + Demo project for Spring Boot + + + 1.8 + + + + + org.springframework.boot + spring-boot-starter-actuator + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.session + spring-session-core + + + + org.postgresql + postgresql + runtime + + + org.projectlombok + lombok + true + + + org.springframework.boot + spring-boot-starter-test + test + + + org.springframework.restdocs + spring-restdocs-mockmvc + test + + + + + + + org.asciidoctor + asciidoctor-maven-plugin + 1.5.3 + + + generate-docs + prepare-package + + process-asciidoc + + + html + book + + + + + + org.springframework.restdocs + spring-restdocs-asciidoctor + ${spring-restdocs.version} + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + diff --git a/src/SmartCode.Generator/RazorTemplates/Java/Repository.cshtml b/src/SmartCode.Generator/RazorTemplates/Java/Repository.cshtml new file mode 100644 index 0000000..e69de29 diff --git a/src/SmartCode.Generator/RazorTemplates/Java/Resources/Application-Properties.cshtml b/src/SmartCode.Generator/RazorTemplates/Java/Resources/Application-Properties.cshtml new file mode 100644 index 0000000..e69de29 diff --git a/src/SmartCode.Generator/RazorTemplates/Java/Resources/Maps/Mapper.cshtml b/src/SmartCode.Generator/RazorTemplates/Java/Resources/Maps/Mapper.cshtml new file mode 100644 index 0000000..3c82ddb --- /dev/null +++ b/src/SmartCode.Generator/RazorTemplates/Java/Resources/Maps/Mapper.cshtml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/src/SmartCode.Generator/RazorTemplates/Java/Service.cshtml b/src/SmartCode.Generator/RazorTemplates/Java/Service.cshtml new file mode 100644 index 0000000..e69de29 diff --git a/src/SmartCode.Generator/RazorTemplates/Java/Test/Application-Test.cshtml b/src/SmartCode.Generator/RazorTemplates/Java/Test/Application-Test.cshtml new file mode 100644 index 0000000..edde9cf --- /dev/null +++ b/src/SmartCode.Generator/RazorTemplates/Java/Test/Application-Test.cshtml @@ -0,0 +1,16 @@ +package me.ahoo.demo; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +@@RunWith(SpringRunner.class) +@@SpringBootTest +public class DemoApplicationTests { + +@@Test +public void contextLoads() { +} + +} \ No newline at end of file From 73e4a20a489f890600ee20e3d6330792791e450c Mon Sep 17 00:00:00 2001 From: XiaoHetitu <38452227+XiaoHeitu@users.noreply.github.com> Date: Wed, 21 Aug 2019 21:42:54 +0800 Subject: [PATCH 076/127] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20ORACLE=20=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E5=BA=93=E6=9F=A5=E8=AF=A2=E5=88=97IsNullable?= =?UTF-8?q?=E5=B1=9E=E6=80=A7=E5=8F=8D=E4=BA=86=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/SmartCode.Generator/Maps/Database-Oracle.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/SmartCode.Generator/Maps/Database-Oracle.xml b/src/SmartCode.Generator/Maps/Database-Oracle.xml index 1c9cd80..ced7146 100644 --- a/src/SmartCode.Generator/Maps/Database-Oracle.xml +++ b/src/SmartCode.Generator/Maps/Database-Oracle.xml @@ -24,7 +24,7 @@ C.DATA_TYPE AS "DbType", C.DATA_LENGTH AS "DataLength", NVL(CC.COMMENTS,C.COLUMN_NAME) AS "Description", - to_number(CASE C.NULLABLE WHEN 'N' THEN '1' ELSE '0' END) AS "IsNullable", + to_number(CASE C.NULLABLE WHEN 'Y' THEN '1' ELSE '0' END) AS "IsNullable", to_number('0') AS "AutoIncrement", to_number(CASE WHEN P.COLUMN_NAME = C.COLUMN_NAME THEN '1' ELSE '0' END) AS "IsPrimaryKey" FROM USER_TAB_COLUMNS C From 53a34d379945ff64af2207c9e6538d48b6835c63 Mon Sep 17 00:00:00 2001 From: Ahoo Wang Date: Mon, 26 Aug 2019 17:46:21 +0800 Subject: [PATCH 077/127] optimize Output --- doc/SmartCode-Spring-Boot.yml | 53 ++++++++++++++----- doc/SmartCode.yml | 52 +++++++++--------- src/SmartCode.App/Outputs/FileOutput.cs | 41 +++++++++----- src/SmartCode.App/ProjectBuilder.cs | 17 ++---- .../DbTypeConverter/DbTypeMap.xml | 32 +++++------ .../Extensions/SummaryExtensions.cs | 37 +++++++++++++ .../RazorTemplates/Java/Entity.cshtml | 17 +++--- .../Java/{Pom.cshtml => Pom-Api.cshtml} | 16 ++++-- .../RazorTemplates/Java/Pom-Contract.cshtml | 23 ++++++++ .../RazorTemplates/Java/Pom-Parent.cshtml | 29 ++++++++++ ...perties.cshtml => Application-YAML.cshtml} | 0 .../Java/Test/Application-Test.cshtml | 2 +- .../ConfigBuilders/ConfigBuilder.cs | 5 ++ src/SmartCode/Configuration/Output.cs | 27 +++++++++- 14 files changed, 257 insertions(+), 94 deletions(-) rename src/SmartCode.Generator/RazorTemplates/Java/{Pom.cshtml => Pom-Api.cshtml} (92%) create mode 100644 src/SmartCode.Generator/RazorTemplates/Java/Pom-Contract.cshtml create mode 100644 src/SmartCode.Generator/RazorTemplates/Java/Pom-Parent.cshtml rename src/SmartCode.Generator/RazorTemplates/Java/Resources/{Application-Properties.cshtml => Application-YAML.cshtml} (100%) diff --git a/doc/SmartCode-Spring-Boot.yml b/doc/SmartCode-Spring-Boot.yml index 6a75eac..143f732 100644 --- a/doc/SmartCode-Spring-Boot.yml +++ b/doc/SmartCode-Spring-Boot.yml @@ -1,18 +1,22 @@ -Module: smartcode.starter +Module: net.smartsql.code Author: Ahoo Wang DataSource: Name: DbTable Parameters: DbName: SmartSqlDB DbProvider: SqlServer - ConnectionString: Data Source=.;Initial Catalog=SmartSqlDB;Integrated Security=True + ConnectionString: Data Source=.;Initial Catalog=SmartSqlTestDB;Integrated Security=True Language: Java -TemplateEngine: - Name: Razor - Root: Java -Output: +TemplateEngine: + Name: Razor + Root: Java +Output: Type: File Path: 'E://SmartSql-Java' +Parameters: + BuildDir: 'E:\SmartSql-Java\build' + DockerImage: 'smartsql.starter' + # 构建任务 Build: @@ -22,21 +26,44 @@ Build: Parameters: Dirs: '.' + MakeBuildDir: + Type: Process + Parameters: + FileName: powershell + Args: mkdir '{{Project.Parameters.BuildDir}}' + Copy: + Type: Process + Parameters: + FileName: powershell + Args: cp '{{Project.ConfigPath}}' '{{Project.Parameters.BuildDir}}' + + Scaffolding: + Type: MultiTemplate + Output: + Path: '.' + Parameters: + Templates: [ + {Key: 'Pom-Parent.cshtml',Output: {Name: 'pom',Extension: '.xml'}}, + {Key: 'Pom-Contract.cshtml',Output: {Path: "contract",Name: 'pom',Extension: '.xml'}}, + {Key: 'Pom-Api.cshtml',Output: {Path: "api",Name: 'pom',Extension: '.xml'}}, + {Key: 'Resources/Application-YAML.cshtml',Output: {Path: "api/src/main/resource",Name: 'application',Extension: '.yml'}} + ] Entity: Type: Table Module: entity - TemplateEngine: + TemplateEngine: Path: Entity.cshtml - Output: - Path: '{{Project.Module}}.{{Build.Module}}' + Output: + Path: 'api/src/main/java/{{Project.Module}}.{{Build.Module}}' + DotSplit: true Name: '{{Items.CurrentTable.ConvertedName}}' Extension: '.java' NamingConverter: Table: - Tokenizer: + Tokenizer: Type: Default - Parameters: + Parameters: IgnorePrefix: 'T_' Delimiter: '_' Converter: @@ -45,7 +72,7 @@ Build: View: Tokenizer: Type: Default - Parameters: + Parameters: IgnorePrefix: 'V_' Delimiter: '_' Converter: @@ -53,7 +80,7 @@ Build: Column: Tokenizer: Type: Default - Parameters: + Parameters: Delimiter: '_' Converter: Type: Camel \ No newline at end of file diff --git a/doc/SmartCode.yml b/doc/SmartCode.yml index 9ad8d25..d408c66 100644 --- a/doc/SmartCode.yml +++ b/doc/SmartCode.yml @@ -70,35 +70,35 @@ Build: Scaffolding: Type: MultiTemplate - Output: + Output: Path: '.' Parameters: Templates: [{Key: 'Sln.cshtml',Output: {Name: '{{Project.Module}}',Extension: '.sln'}}, - {Key: 'Sln-Directory.Build.cshtml',Output: {Name: 'Directory.Build',Extension: '.props'}}, - {Key: 'Sln-Version.cshtml',Output: {Path: 'build',Name: 'version',Extension: '.props'}}, - {Key: 'Sln-Dockerfile.cshtml',Output: {Name: 'Dockerfile',Extension: ''}}, - {Key: 'Sln-DockerIgnore.cshtml',Output: {Name: '.dockerignore',Extension: ''}}, - {Key: 'Sln-GitIgnore.cshtml',Output: {Name: '.gitignore',Extension: ''}}, - {Key: "Proj-Entity.cshtml",Output: {Path: 'src/{{Project.Module}}.Entity',Name: '{{Project.Module}}.Entity',Extension: '.csproj'}}, - {Key: "Proj-Repository.cshtml",Output: {Path: 'src/{{Project.Module}}.Repository',Name: '{{Project.Module}}.Repository',Extension: '.csproj'}}, - {Key: "Proj-Service.cshtml",Output: {Path: 'src/{{Project.Module}}.Service',Name: '{{Project.Module}}.Service',Extension: '.csproj'}}, - {Key: "Proj-API.cshtml",Output: {Path: 'src/{{Project.Module}}.API',Name: '{{Project.Module}}.API',Extension: '.csproj'}}, - {Key: "API/LaunchSettings.cshtml",Output: {Path: 'src/{{Project.Module}}.API/Properties',Name: 'launchSettings',Extension: '.json'}}, - {Key: "API/AppSettings.cshtml",Output: {Path: 'src/{{Project.Module}}.API',Name: 'appsettings',Extension: '.json'}}, - {Key: "API/AppSettings-Development.cshtml",Output: {Path: 'src/{{Project.Module}}.API',Name: 'appsettings.Development',Extension: '.json'}}, - {Key: "API/Program.cshtml",Output: {Path: 'src/{{Project.Module}}.API',Name: 'Program',Extension: '.cs'}}, - {Key: "API/Startup.cshtml",Output: {Path: 'src/{{Project.Module}}.API',Name: 'Startup',Extension: '.cs'}}, - {Key: "API/APIException.cshtml",Output: {Path: 'src/{{Project.Module}}.API/Exceptions',Name: 'APIException',Extension: '.cs'}}, - {Key: "API/GlobalExceptionFilter.cshtml",Output: {Path: 'src/{{Project.Module}}.API/Filters',Name: 'GlobalExceptionFilter',Extension: '.cs'}}, - {Key: "API/GlobalValidateModelFilter.cshtml",Output: {Path: 'src/{{Project.Module}}.API/Filters',Name: 'GlobalValidateModelFilter',Extension: '.cs'}}, - {Key: "API/QueryRequest.cshtml",Output: {Path: 'src/{{Project.Module}}.API/Messages',Name: 'QueryRequest',Extension: '.cs'}}, - {Key: "API/QueryByPageRequest.cshtml",Output: {Path: 'src/{{Project.Module}}.API/Messages',Name: 'QueryByPageRequest',Extension: '.cs'}}, - {Key: "API/ResponseMessage.cshtml",Output: {Path: 'src/{{Project.Module}}.API/Messages',Name: 'ResponseMessage',Extension: '.cs'}}, - {Key: "API/QueryResponse.cshtml",Output: {Path: 'src/{{Project.Module}}.API/Messages',Name: 'QueryResponse',Extension: '.cs'}}, - {Key: "API/QueryByPageResponse.cshtml",Output: {Path: 'src/{{Project.Module}}.API/Messages',Name: 'QueryByPageResponse',Extension: '.cs'}}, - {Key: "API/ResponseMessage.cshtml",Output: {Path: 'src/{{Project.Module}}.API/Messages',Name: 'ResponseMessage',Extension: '.cs'}}, - {Key: "SqlMapConfig.cshtml",Output: {Path: 'src/{{Project.Module}}.Repository',Name: 'SmartSqlMapConfig',Extension: '.xml'}}, - {Key: "SqlMapConfig.cshtml",Output: {Path: 'src/{{Project.Module}}.Repository',Name: 'SmartSqlMapConfig.Development',Extension: '.xml'}}] + {Key: 'Sln-Directory.Build.cshtml',Output: {Name: 'Directory.Build',Extension: '.props'}}, + {Key: 'Sln-Version.cshtml',Output: {Path: 'build',Name: 'version',Extension: '.props'}}, + {Key: 'Sln-Dockerfile.cshtml',Output: {Name: 'Dockerfile',Extension: ''}}, + {Key: 'Sln-DockerIgnore.cshtml',Output: {Name: '.dockerignore',Extension: ''}}, + {Key: 'Sln-GitIgnore.cshtml',Output: {Name: '.gitignore',Extension: ''}}, + {Key: "Proj-Entity.cshtml",Output: {Path: 'src/{{Project.Module}}.Entity',Name: '{{Project.Module}}.Entity',Extension: '.csproj'}}, + {Key: "Proj-Repository.cshtml",Output: {Path: 'src/{{Project.Module}}.Repository',Name: '{{Project.Module}}.Repository',Extension: '.csproj'}}, + {Key: "Proj-Service.cshtml",Output: {Path: 'src/{{Project.Module}}.Service',Name: '{{Project.Module}}.Service',Extension: '.csproj'}}, + {Key: "Proj-API.cshtml",Output: {Path: 'src/{{Project.Module}}.API',Name: '{{Project.Module}}.API',Extension: '.csproj'}}, + {Key: "API/LaunchSettings.cshtml",Output: {Path: 'src/{{Project.Module}}.API/Properties',Name: 'launchSettings',Extension: '.json'}}, + {Key: "API/AppSettings.cshtml",Output: {Path: 'src/{{Project.Module}}.API',Name: 'appsettings',Extension: '.json'}}, + {Key: "API/AppSettings-Development.cshtml",Output: {Path: 'src/{{Project.Module}}.API',Name: 'appsettings.Development',Extension: '.json'}}, + {Key: "API/Program.cshtml",Output: {Path: 'src/{{Project.Module}}.API',Name: 'Program',Extension: '.cs'}}, + {Key: "API/Startup.cshtml",Output: {Path: 'src/{{Project.Module}}.API',Name: 'Startup',Extension: '.cs'}}, + {Key: "API/APIException.cshtml",Output: {Path: 'src/{{Project.Module}}.API/Exceptions',Name: 'APIException',Extension: '.cs'}}, + {Key: "API/GlobalExceptionFilter.cshtml",Output: {Path: 'src/{{Project.Module}}.API/Filters',Name: 'GlobalExceptionFilter',Extension: '.cs'}}, + {Key: "API/GlobalValidateModelFilter.cshtml",Output: {Path: 'src/{{Project.Module}}.API/Filters',Name: 'GlobalValidateModelFilter',Extension: '.cs'}}, + {Key: "API/QueryRequest.cshtml",Output: {Path: 'src/{{Project.Module}}.API/Messages',Name: 'QueryRequest',Extension: '.cs'}}, + {Key: "API/QueryByPageRequest.cshtml",Output: {Path: 'src/{{Project.Module}}.API/Messages',Name: 'QueryByPageRequest',Extension: '.cs'}}, + {Key: "API/ResponseMessage.cshtml",Output: {Path: 'src/{{Project.Module}}.API/Messages',Name: 'ResponseMessage',Extension: '.cs'}}, + {Key: "API/QueryResponse.cshtml",Output: {Path: 'src/{{Project.Module}}.API/Messages',Name: 'QueryResponse',Extension: '.cs'}}, + {Key: "API/QueryByPageResponse.cshtml",Output: {Path: 'src/{{Project.Module}}.API/Messages',Name: 'QueryByPageResponse',Extension: '.cs'}}, + {Key: "API/ResponseMessage.cshtml",Output: {Path: 'src/{{Project.Module}}.API/Messages',Name: 'ResponseMessage',Extension: '.cs'}}, + {Key: "SqlMapConfig.cshtml",Output: {Path: 'src/{{Project.Module}}.Repository',Name: 'SmartSqlMapConfig',Extension: '.xml'}}, + {Key: "SqlMapConfig.cshtml",Output: {Path: 'src/{{Project.Module}}.Repository',Name: 'SmartSqlMapConfig.Development',Extension: '.xml'}}] Entity: Type: Table diff --git a/src/SmartCode.App/Outputs/FileOutput.cs b/src/SmartCode.App/Outputs/FileOutput.cs index 4d3c7db..f09eec7 100644 --- a/src/SmartCode.App/Outputs/FileOutput.cs +++ b/src/SmartCode.App/Outputs/FileOutput.cs @@ -25,11 +25,16 @@ public FileOutput(ILogger logger) public void Initialize(IDictionary parameters) { - if (parameters == null) { return; } - if (parameters.Value("Name", out string name)) + if (parameters == null) + { + return; + } + + if (parameters.Value(nameof(Name), out string name)) { Name = name; } + Initialized = true; } @@ -37,17 +42,24 @@ public async Task Output(BuildContext context, Output output = null) { if (output == null) { - output = context.Output; + output = context.Output; } + _logger.LogInformation($"------ Mode:{output.Mode},Build:{context.BuildKey} Start! ------"); var outputPath = Handlebars.Compile(output.Path)(context); outputPath = Path.Combine(context.Project.OutputPath, outputPath); + if (output.DotSplit == true) + { + outputPath = outputPath.Replace('.', '/'); + } + if (!Directory.Exists(outputPath)) { Directory.CreateDirectory(outputPath); _logger.LogWarning($"------ Directory:{outputPath} is not Exists,Created! ------"); } + var fileName = Handlebars.Compile(output.Name)(context) + output.Extension; var filePath = Path.Combine(outputPath, fileName); var fileExists = File.Exists(filePath); @@ -57,23 +69,26 @@ public async Task Output(BuildContext context, Output output = null) { case Configuration.CreateMode.None: case Configuration.CreateMode.Incre: - { - _logger.LogWarning($"------ Mode:{output.Mode},Build:{context.BuildKey},FilePath:{filePath} Exists ignore output End! ------"); - return; - } + { + _logger.LogWarning( + $"------ Mode:{output.Mode},Build:{context.BuildKey},FilePath:{filePath} Exists ignore output End! ------"); + return; + } case Configuration.CreateMode.Full: - { - File.Delete(filePath); - _logger.LogWarning($"------ Mode:{output.Mode},FilePath:{filePath} Exists Deleted ! ------"); - break; - } + { + File.Delete(filePath); + _logger.LogWarning($"------ Mode:{output.Mode},FilePath:{filePath} Exists Deleted ! ------"); + break; + } } } + using (StreamWriter streamWriter = new StreamWriter(filePath)) { await streamWriter.WriteAsync(context.Result); } + _logger.LogInformation($"------ Mode:{output.Mode},Build:{context.BuildKey} -> {filePath} End! ------"); } } -} +} \ No newline at end of file diff --git a/src/SmartCode.App/ProjectBuilder.cs b/src/SmartCode.App/ProjectBuilder.cs index 971baef..815903a 100644 --- a/src/SmartCode.App/ProjectBuilder.cs +++ b/src/SmartCode.App/ProjectBuilder.cs @@ -15,7 +15,7 @@ public class ProjectBuilder : IProjectBuilder private readonly ILogger _logger; public ProjectBuilder( - Project project + Project project , IPluginManager pluginManager , ILogger logger) { @@ -23,6 +23,7 @@ Project project _pluginManager = pluginManager; _logger = logger; } + public event OnProjectBuildStartupHandler OnStartup; public event OnProjectBuildSucceedHandler OnSucceed; public event OnProjectBuildFailedHandler OnFailed; @@ -35,7 +36,7 @@ public async Task Build() { var dataSource = _pluginManager.Resolve(_project.DataSource.Name); if (OnStartup != null) - await OnStartup.Invoke(this, new OnProjectBuildStartupEventArgs { Project = _project }); + await OnStartup.Invoke(this, new OnProjectBuildStartupEventArgs {Project = _project}); await dataSource.InitData(); foreach (var buildKV in _project.BuildTasks) { @@ -48,14 +49,7 @@ public async Task Build() DataSource = dataSource, BuildKey = buildKV.Key, Build = buildKV.Value, - Output = output == null ? null : new Output - { - Type = output.Type, - Path = output.Path, - Name = output.Name, - Mode = output.Mode, - Extension = output.Extension - } + Output = output?.Copy() }; await _pluginManager.Resolve(buildKV.Value.Type).Build(buildContext); _logger.LogInformation($"-------- BuildTask:{buildKV.Key} End! ---------"); @@ -79,6 +73,5 @@ public async Task Build() throw; } } - } -} +} \ No newline at end of file diff --git a/src/SmartCode.Generator/DbTypeConverter/DbTypeMap.xml b/src/SmartCode.Generator/DbTypeConverter/DbTypeMap.xml index e6f1fc2..8ebea02 100644 --- a/src/SmartCode.Generator/DbTypeConverter/DbTypeMap.xml +++ b/src/SmartCode.Generator/DbTypeConverter/DbTypeMap.xml @@ -383,27 +383,27 @@ - - - - - - + + + + + + - - - + + + - + - - - - - - + + + + + + diff --git a/src/SmartCode.Generator/Extensions/SummaryExtensions.cs b/src/SmartCode.Generator/Extensions/SummaryExtensions.cs index 371c82a..2929ed2 100644 --- a/src/SmartCode.Generator/Extensions/SummaryExtensions.cs +++ b/src/SmartCode.Generator/Extensions/SummaryExtensions.cs @@ -17,6 +17,43 @@ public static string GetCSharpSummary(this Table table) var summary = table.GetSummary(); return GetCSharpSummary(summary); } + + public static string GetJavaSummary(this Column column) + { + var summary = column.GetSummary(); + return GetJavaSummary(summary); + } + + public static string GetJavaSummary(this Table table) + { + var summary = table.GetSummary(); + return GetJavaSummary(summary); + } + + public static string GetJavaSummary(this string summary) + { + StringBuilder csharpSummary = new StringBuilder(); + csharpSummary.AppendLine("/**"); + if (summary.Contains(Environment.NewLine)) + { + foreach (var summaryLine in summary.Split(Environment.NewLine.ToCharArray())) + { + if (String.IsNullOrEmpty(summaryLine)) + { + continue; + } + csharpSummary.AppendLine($"* {summaryLine}"); + } + } + else + { + csharpSummary.AppendLine($"* {summary}"); + } + + csharpSummary.Append("*/"); + return csharpSummary.ToString(); + } + public static string GetCSharpSummary(this string summary) { StringBuilder csharpSummary = new StringBuilder(); diff --git a/src/SmartCode.Generator/RazorTemplates/Java/Entity.cshtml b/src/SmartCode.Generator/RazorTemplates/Java/Entity.cshtml index fe4b07c..7a1e9d9 100644 --- a/src/SmartCode.Generator/RazorTemplates/Java/Entity.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/Java/Entity.cshtml @@ -1,4 +1,5 @@ @using SmartCode +@using SmartCode.Generator.Extensions @model BuildContext @{ Layout = "_JavaLayout.cshtml"; @@ -24,21 +25,23 @@ { return column.LanguageType; } - return $"{column.LanguageType}?"; + return $"{column.LanguageType}"; } } package @(project.Module).@buildTask.Module; -import java.security.Timestamp; + +import java.math.BigDecimal; +import java.sql.Timestamp; +import java.util.UUID; + import lombok.Builder; import lombok.Data; import lombok.ToString; -/** -* @(table.Description ?? table.ConvertedName) -*/ +@table.GetJavaSummary() @@Data @@Builder @@ToString @@ -47,9 +50,7 @@ public class @table.ConvertedName @foreach (var column in table.Columns) { - /** - * @column.Description - */ + @column.GetJavaSummary() private @(ConvertLangType(column)) @column.ConvertedName; } diff --git a/src/SmartCode.Generator/RazorTemplates/Java/Pom.cshtml b/src/SmartCode.Generator/RazorTemplates/Java/Pom-Api.cshtml similarity index 92% rename from src/SmartCode.Generator/RazorTemplates/Java/Pom.cshtml rename to src/SmartCode.Generator/RazorTemplates/Java/Pom-Api.cshtml index 9fcee24..3ca3ff1 100644 --- a/src/SmartCode.Generator/RazorTemplates/Java/Pom.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/Java/Pom-Api.cshtml @@ -1,3 +1,11 @@ +@using SmartCode +@model BuildContext + +@{ + Layout = null; + var project = Model.Project; +} + @@ -8,11 +16,11 @@ 2.1.7.RELEASE - me.ahoo - demo + @project.Module + api 0.0.1-SNAPSHOT - demo - Demo project for Spring Boot + api + Api project for Spring Boot 1.8 diff --git a/src/SmartCode.Generator/RazorTemplates/Java/Pom-Contract.cshtml b/src/SmartCode.Generator/RazorTemplates/Java/Pom-Contract.cshtml new file mode 100644 index 0000000..cbd5f82 --- /dev/null +++ b/src/SmartCode.Generator/RazorTemplates/Java/Pom-Contract.cshtml @@ -0,0 +1,23 @@ +@using SmartCode +@model BuildContext + +@{ + Layout = null; + var project = Model.Project; +} + + + + + @project.Module + parent + 1.0-SNAPSHOT + + 4.0.0 + contract + contract + + + \ No newline at end of file diff --git a/src/SmartCode.Generator/RazorTemplates/Java/Pom-Parent.cshtml b/src/SmartCode.Generator/RazorTemplates/Java/Pom-Parent.cshtml new file mode 100644 index 0000000..d7db5f4 --- /dev/null +++ b/src/SmartCode.Generator/RazorTemplates/Java/Pom-Parent.cshtml @@ -0,0 +1,29 @@ +@using SmartCode +@model BuildContext + +@{ + Layout = null; + var project = Model.Project; +} + + + + + 4.0.0 + @project.Module + parent + 0.0.1-SNAPSHOT + pom + parent + SmartCode project for Spring Boot + + + 1.8 + + + contract + api + + + \ No newline at end of file diff --git a/src/SmartCode.Generator/RazorTemplates/Java/Resources/Application-Properties.cshtml b/src/SmartCode.Generator/RazorTemplates/Java/Resources/Application-YAML.cshtml similarity index 100% rename from src/SmartCode.Generator/RazorTemplates/Java/Resources/Application-Properties.cshtml rename to src/SmartCode.Generator/RazorTemplates/Java/Resources/Application-YAML.cshtml diff --git a/src/SmartCode.Generator/RazorTemplates/Java/Test/Application-Test.cshtml b/src/SmartCode.Generator/RazorTemplates/Java/Test/Application-Test.cshtml index edde9cf..966a9f4 100644 --- a/src/SmartCode.Generator/RazorTemplates/Java/Test/Application-Test.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/Java/Test/Application-Test.cshtml @@ -7,7 +7,7 @@ import org.springframework.test.context.junit4.SpringRunner; @@RunWith(SpringRunner.class) @@SpringBootTest -public class DemoApplicationTests { +public class ApiApplicationTests { @@Test public void contextLoads() { diff --git a/src/SmartCode/Configuration/ConfigBuilders/ConfigBuilder.cs b/src/SmartCode/Configuration/ConfigBuilders/ConfigBuilder.cs index ff0d5ab..c76d566 100644 --- a/src/SmartCode/Configuration/ConfigBuilders/ConfigBuilder.cs +++ b/src/SmartCode/Configuration/ConfigBuilders/ConfigBuilder.cs @@ -61,6 +61,11 @@ private void InitDefault() { buildTask.Output.Mode = Project.Output.Mode; } + + if (!buildTask.Output.DotSplit.HasValue) + { + buildTask.Output.DotSplit = Project.Output.DotSplit; + } } if (buildTask.TemplateEngine == null) diff --git a/src/SmartCode/Configuration/Output.cs b/src/SmartCode/Configuration/Output.cs index 66e9869..0be7a9d 100644 --- a/src/SmartCode/Configuration/Output.cs +++ b/src/SmartCode/Configuration/Output.cs @@ -10,36 +10,61 @@ public class Output /// 输出插件类型 /// public String Type { get; set; } + /// /// 输出目录 /// public String Path { get; set; } + /// /// 文件创建模式 /// public CreateMode Mode { get; set; } = CreateMode.None; + /// /// 文件名 /// public String Name { get; set; } + + /// + /// '.' 拆分成 '/' + /// + public bool? DotSplit { get; set; } + /// /// 文件扩展名 /// public String Extension { get; set; } + + public Output Copy() + { + return new Output + { + Type = Type, + Path = Path, + DotSplit = DotSplit, + Name = Name, + Mode = Mode, + Extension = Extension + }; + } } + /// /// 文件创建模式 /// public enum CreateMode { None, + /// /// 增量创建,如果存在则忽略 /// Incre, + /// /// 全量创建,如果存在则重新创建 /// Full } -} +} \ No newline at end of file From ecc06d7a05bb8385805f9c67fe7c9eeb3c0cb962 Mon Sep 17 00:00:00 2001 From: beginor Date: Thu, 12 Sep 2019 18:18:39 +0800 Subject: [PATCH 078/127] return 'NAType' when LanguageType is null or empty. --- src/SmartCode.Generator/RazorTemplates/Sql/DbToPGSql.cshtml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/SmartCode.Generator/RazorTemplates/Sql/DbToPGSql.cshtml b/src/SmartCode.Generator/RazorTemplates/Sql/DbToPGSql.cshtml index 85450cd..8e21140 100644 --- a/src/SmartCode.Generator/RazorTemplates/Sql/DbToPGSql.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/Sql/DbToPGSql.cshtml @@ -7,6 +7,9 @@ String GetPGSqlType(SmartCode.Generator.Entity.Column col) { var sqlDbType = col.LanguageType; + if (string.IsNullOrEmpty(sqlDbType)) { + return "NAType"; + } if (sqlDbType.StartsWith("varchar")) { if (col.DataLength == -1) { @@ -51,4 +54,4 @@ @Html.NewLine() } - } \ No newline at end of file + } From 63bff0323c05bc30a5944ccb99e0abde74af21a1 Mon Sep 17 00:00:00 2001 From: beginor Date: Fri, 13 Sep 2019 17:21:04 +0800 Subject: [PATCH 079/127] add type map for geometry, geography --- src/SmartCode.Generator/DbTypeConverter/DbTypeMap.xml | 4 ++++ src/SmartCode.Generator/RazorTemplates/ETL/ToPGBuild.cshtml | 6 +++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/SmartCode.Generator/DbTypeConverter/DbTypeMap.xml b/src/SmartCode.Generator/DbTypeConverter/DbTypeMap.xml index e6f1fc2..ffbad8b 100644 --- a/src/SmartCode.Generator/DbTypeConverter/DbTypeMap.xml +++ b/src/SmartCode.Generator/DbTypeConverter/DbTypeMap.xml @@ -357,6 +357,8 @@ + + @@ -376,6 +378,8 @@ + + diff --git a/src/SmartCode.Generator/RazorTemplates/ETL/ToPGBuild.cshtml b/src/SmartCode.Generator/RazorTemplates/ETL/ToPGBuild.cshtml index faf609a..9cbf35f 100644 --- a/src/SmartCode.Generator/RazorTemplates/ETL/ToPGBuild.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/ETL/ToPGBuild.cshtml @@ -53,7 +53,7 @@ DataSource: Name: Extract Parameters: DbProvider: @dbSource.DbRepository.DbProviderName - ConnectionString: "@extractConnectionString" + ConnectionString: @extractConnectionString Query: 'Select * From @table.Name @GetExtractWhere()' PKColumn: @PKColumn.Name AutoIncrement: @(PKColumn.AutoIncrement ? "true" : "false") @@ -77,7 +77,7 @@ Build: Type: Load Parameters: DbProvider: @loadDbProvider - ConnectionString: "@loadConnectionString" + ConnectionString: @loadConnectionString Table: @loadTable @switch (extractMode) { @@ -109,4 +109,4 @@ Build: {@(",")} @Html.NewLine() } - ] \ No newline at end of file + ] From 38698d76bc6eea7d080d97c1a59e041ea0ead3ad Mon Sep 17 00:00:00 2001 From: Ahoo Wang Date: Sat, 19 Oct 2019 01:31:56 +0800 Subject: [PATCH 080/127] add support java-mybatis --- doc/SmartCode-Spring-Boot.yml | 82 ++++++++------- .../DbTypeConverter/DbTypeMap.xml | 20 ++-- .../RazorTemplates/Java/Copyright.cshtml | 4 +- .../RazorTemplates/Java/Pom-Api.cshtml | 94 ++---------------- .../RazorTemplates/Java/Pom-Contract.cshtml | 23 ----- .../RazorTemplates/Java/Pom-Server.cshtml | 99 +++++++++++++++++++ .../SqlMap-Partials/CURD/SqlMap-Delete.cshtml | 27 +++++ .../CURD/SqlMap-GetById.cshtml | 16 +++ .../CURD/SqlMap-GetEntity.cshtml | 16 +++ .../CURD/SqlMap-GetTotal.cshtml | 14 +++ .../SqlMap-Partials/CURD/SqlMap-Insert.cshtml | 42 ++++++++ .../SqlMap-Partials/CURD/SqlMap-Query.cshtml | 22 +++++ .../CURD/SqlMap-QueryByPage.cshtml | 23 +++++ .../SqlMap-Partials/CURD/SqlMap-Update.cshtml | 31 ++++++ .../SqlMap-Partials/SqlMap-Columns.cshtml | 16 +++ .../Java/SqlMap-Partials/SqlMap-MySql.cshtml | 26 +++++ .../SqlMap-Partials/SqlMap-PostgreSql.cshtml | 18 ++++ .../SqlMap-Partials/SqlMap-ResultMaps.cshtml | 40 ++++++++ .../SqlMap-WhereQueryParams.cshtml | 19 ++++ .../Java/SqlMap-Partials/_SqlMapLayout.cshtml | 95 ++++++++++++++++++ .../RazorTemplates/Java/SqlMap.cshtml | 12 +++ .../ConfigBuilders/ConfigBuilder.cs | 12 ++- 22 files changed, 596 insertions(+), 155 deletions(-) delete mode 100644 src/SmartCode.Generator/RazorTemplates/Java/Pom-Contract.cshtml create mode 100644 src/SmartCode.Generator/RazorTemplates/Java/Pom-Server.cshtml create mode 100644 src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/CURD/SqlMap-Delete.cshtml create mode 100644 src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/CURD/SqlMap-GetById.cshtml create mode 100644 src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/CURD/SqlMap-GetEntity.cshtml create mode 100644 src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/CURD/SqlMap-GetTotal.cshtml create mode 100644 src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/CURD/SqlMap-Insert.cshtml create mode 100644 src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/CURD/SqlMap-Query.cshtml create mode 100644 src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/CURD/SqlMap-QueryByPage.cshtml create mode 100644 src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/CURD/SqlMap-Update.cshtml create mode 100644 src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/SqlMap-Columns.cshtml create mode 100644 src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/SqlMap-MySql.cshtml create mode 100644 src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/SqlMap-PostgreSql.cshtml create mode 100644 src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/SqlMap-ResultMaps.cshtml create mode 100644 src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/SqlMap-WhereQueryParams.cshtml create mode 100644 src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/_SqlMapLayout.cshtml create mode 100644 src/SmartCode.Generator/RazorTemplates/Java/SqlMap.cshtml diff --git a/doc/SmartCode-Spring-Boot.yml b/doc/SmartCode-Spring-Boot.yml index 143f732..78629a4 100644 --- a/doc/SmartCode-Spring-Boot.yml +++ b/doc/SmartCode-Spring-Boot.yml @@ -3,20 +3,48 @@ Author: Ahoo Wang DataSource: Name: DbTable Parameters: - DbName: SmartSqlDB - DbProvider: SqlServer - ConnectionString: Data Source=.;Initial Catalog=SmartSqlTestDB;Integrated Security=True + DbName: smartsql_db + DbProvider: MySql + ConnectionString: Data Source=serverAddress;database=smartsql_db;uid=root;pwd=smartsql_db;Charset=utf8;SslMode=none Language: Java TemplateEngine: Name: Razor Root: Java Output: Type: File - Path: 'E://SmartSql-Java' + Path: 'D://SmartSql-Java' Parameters: - BuildDir: 'E:\SmartSql-Java\build' - DockerImage: 'smartsql.starter' + BuildDir: 'D:\SmartSql-Java\build' +NamingConverter: + Table: + Tokenizer: + Type: Default + Parameters: + IgnorePrefix: 't_' + Delimiter: '_' + Converter: + Type: Pascal + Parameters: { } + View: + Tokenizer: + Type: Default + Parameters: + IgnorePrefix: 'v_' + Delimiter: '_' + Converter: + Type: Pascal + Column: + Tokenizer: + Type: Default + Parameters: + Delimiter: '_' + Converter: + Type: Camel + +TableFilter: + IgnoreNoPKTable: true + IgnoreView: true # 构建任务 Build: @@ -44,9 +72,9 @@ Build: Parameters: Templates: [ {Key: 'Pom-Parent.cshtml',Output: {Name: 'pom',Extension: '.xml'}}, - {Key: 'Pom-Contract.cshtml',Output: {Path: "contract",Name: 'pom',Extension: '.xml'}}, {Key: 'Pom-Api.cshtml',Output: {Path: "api",Name: 'pom',Extension: '.xml'}}, - {Key: 'Resources/Application-YAML.cshtml',Output: {Path: "api/src/main/resource",Name: 'application',Extension: '.yml'}} + {Key: 'Pom-Server.cshtml',Output: {Path: "server",Name: 'pom',Extension: '.xml'}}, + {Key: 'Resources/Application-YAML.cshtml',Output: {Path: "server/src/main/resources",Name: 'application',Extension: '.yml'}} ] Entity: @@ -55,32 +83,18 @@ Build: TemplateEngine: Path: Entity.cshtml Output: - Path: 'api/src/main/java/{{Project.Module}}.{{Build.Module}}' + Path: 'server/src/main/java/{{Project.Module}}.{{Build.Module}}' DotSplit: true Name: '{{Items.CurrentTable.ConvertedName}}' Extension: '.java' - NamingConverter: - Table: - Tokenizer: - Type: Default - Parameters: - IgnorePrefix: 'T_' - Delimiter: '_' - Converter: - Type: Pascal - Parameters: { } - View: - Tokenizer: - Type: Default - Parameters: - IgnorePrefix: 'V_' - Delimiter: '_' - Converter: - Type: Pascal - Column: - Tokenizer: - Type: Default - Parameters: - Delimiter: '_' - Converter: - Type: Camel \ No newline at end of file + + SqlMap: + Type: Table + Module: repository + TemplateEngine: + Path: SqlMap.cshtml + Output: + Path: 'server/src/main/resources/mappers/{{Project.Module}}.{{Build.Module}}' + DotSplit: true + Name: '{{Items.CurrentTable.ConvertedName}}Mapper' + Extension: '.xml' \ No newline at end of file diff --git a/src/SmartCode.Generator/DbTypeConverter/DbTypeMap.xml b/src/SmartCode.Generator/DbTypeConverter/DbTypeMap.xml index 8ebea02..eb9b845 100644 --- a/src/SmartCode.Generator/DbTypeConverter/DbTypeMap.xml +++ b/src/SmartCode.Generator/DbTypeConverter/DbTypeMap.xml @@ -383,18 +383,18 @@ - - - - - - + + + + + + - - - + + + - + diff --git a/src/SmartCode.Generator/RazorTemplates/Java/Copyright.cshtml b/src/SmartCode.Generator/RazorTemplates/Java/Copyright.cshtml index e31ac8a..f43b08a 100644 --- a/src/SmartCode.Generator/RazorTemplates/Java/Copyright.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/Java/Copyright.cshtml @@ -4,8 +4,8 @@ var project = Model.Project; } /******************************* -* Create By @project.Author -* Date @DateTime.Now.ToString("yyyy-MM-dd HH:mm") +* @@author @project.Author +* @@date @DateTime.Now.ToString("yyyy-MM-dd HH:mm") * Code Generate By SmartCode * Code Generate Github : https://github.com/Ahoo-Wang/SmartCode *******************************/ \ No newline at end of file diff --git a/src/SmartCode.Generator/RazorTemplates/Java/Pom-Api.cshtml b/src/SmartCode.Generator/RazorTemplates/Java/Pom-Api.cshtml index 3ca3ff1..cbd5f82 100644 --- a/src/SmartCode.Generator/RazorTemplates/Java/Pom-Api.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/Java/Pom-Api.cshtml @@ -7,93 +7,17 @@ } - - 4.0.0 - org.springframework.boot - spring-boot-starter-parent - 2.1.7.RELEASE - + @project.Module + parent + 1.0-SNAPSHOT - @project.Module - api - 0.0.1-SNAPSHOT - api - Api project for Spring Boot - - - 1.8 - - - - - org.springframework.boot - spring-boot-starter-actuator - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.session - spring-session-core - - - - org.postgresql - postgresql - runtime - - - org.projectlombok - lombok - true - - - org.springframework.boot - spring-boot-starter-test - test - - - org.springframework.restdocs - spring-restdocs-mockmvc - test - - + 4.0.0 + contract + contract - - - - org.asciidoctor - asciidoctor-maven-plugin - 1.5.3 - - - generate-docs - prepare-package - - process-asciidoc - - - html - book - - - - - - org.springframework.restdocs - spring-restdocs-asciidoctor - ${spring-restdocs.version} - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - + \ No newline at end of file diff --git a/src/SmartCode.Generator/RazorTemplates/Java/Pom-Contract.cshtml b/src/SmartCode.Generator/RazorTemplates/Java/Pom-Contract.cshtml deleted file mode 100644 index cbd5f82..0000000 --- a/src/SmartCode.Generator/RazorTemplates/Java/Pom-Contract.cshtml +++ /dev/null @@ -1,23 +0,0 @@ -@using SmartCode -@model BuildContext - -@{ - Layout = null; - var project = Model.Project; -} - - - - - @project.Module - parent - 1.0-SNAPSHOT - - 4.0.0 - contract - contract - - - \ No newline at end of file diff --git a/src/SmartCode.Generator/RazorTemplates/Java/Pom-Server.cshtml b/src/SmartCode.Generator/RazorTemplates/Java/Pom-Server.cshtml new file mode 100644 index 0000000..3ca3ff1 --- /dev/null +++ b/src/SmartCode.Generator/RazorTemplates/Java/Pom-Server.cshtml @@ -0,0 +1,99 @@ +@using SmartCode +@model BuildContext + +@{ + Layout = null; + var project = Model.Project; +} + + + + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 2.1.7.RELEASE + + + @project.Module + api + 0.0.1-SNAPSHOT + api + Api project for Spring Boot + + + 1.8 + + + + + org.springframework.boot + spring-boot-starter-actuator + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.session + spring-session-core + + + + org.postgresql + postgresql + runtime + + + org.projectlombok + lombok + true + + + org.springframework.boot + spring-boot-starter-test + test + + + org.springframework.restdocs + spring-restdocs-mockmvc + test + + + + + + + org.asciidoctor + asciidoctor-maven-plugin + 1.5.3 + + + generate-docs + prepare-package + + process-asciidoc + + + html + book + + + + + + org.springframework.restdocs + spring-restdocs-asciidoctor + ${spring-restdocs.version} + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + diff --git a/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/CURD/SqlMap-Delete.cshtml b/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/CURD/SqlMap-Delete.cshtml new file mode 100644 index 0000000..070ea87 --- /dev/null +++ b/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/CURD/SqlMap-Delete.cshtml @@ -0,0 +1,27 @@ +@using SmartCode +@using SmartCode.Db +@model BuildContext +@{ + var project = Model.Project; + var dbSource = Model.GetDataSource(); + var buildTask = Model.Build; + buildTask.Parameters.TryGetValue("LogicalDelete", out var logicalDeleteKey); + var table = Model.GetCurrentTable(); + var pkCol = table.PKColumn; +} + +@if (logicalDeleteKey != null) +{ + + update from @table.Name + set @logicalDeleteKey =1 + where @pkCol.Name=#{@pkCol.ConvertedName} + +} +else +{ + + delete from @table.Name + where @pkCol.Name=#{@pkCol.ConvertedName} + +} \ No newline at end of file diff --git a/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/CURD/SqlMap-GetById.cshtml b/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/CURD/SqlMap-GetById.cshtml new file mode 100644 index 0000000..2fbef19 --- /dev/null +++ b/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/CURD/SqlMap-GetById.cshtml @@ -0,0 +1,16 @@ +@using SmartCode +@using SmartCode.Db +@model BuildContext +@{ + var project = Model.Project; + var dbSource = Model.GetDataSource(); + var table = Model.GetCurrentTable(); + var pkCol = table.PKColumn; + var resultMapName = $"{table.ConvertedName}ResultMap"; +} + + \ No newline at end of file diff --git a/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/CURD/SqlMap-GetEntity.cshtml b/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/CURD/SqlMap-GetEntity.cshtml new file mode 100644 index 0000000..50a208a --- /dev/null +++ b/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/CURD/SqlMap-GetEntity.cshtml @@ -0,0 +1,16 @@ +@using SmartCode +@using SmartCode.Db +@model BuildContext +@{ + var project = Model.Project; + var dbSource = Model.GetDataSource(); + var table = Model.GetCurrentTable(); + var pkCol = table.PKColumn; + var resultMapName = $"{table.ConvertedName}ResultMap"; +} + + \ No newline at end of file diff --git a/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/CURD/SqlMap-GetTotal.cshtml b/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/CURD/SqlMap-GetTotal.cshtml new file mode 100644 index 0000000..103f780 --- /dev/null +++ b/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/CURD/SqlMap-GetTotal.cshtml @@ -0,0 +1,14 @@ +@using SmartCode +@using SmartCode.Db +@model BuildContext +@{ + var project = Model.Project; + var dbSource = Model.GetDataSource(); + var table = Model.GetCurrentTable(); + var pkCol = table.PKColumn; +} + + \ No newline at end of file diff --git a/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/CURD/SqlMap-Insert.cshtml b/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/CURD/SqlMap-Insert.cshtml new file mode 100644 index 0000000..2937142 --- /dev/null +++ b/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/CURD/SqlMap-Insert.cshtml @@ -0,0 +1,42 @@ +@using SmartCode +@using SmartCode.Db +@model BuildContext +@{ + var project = Model.Project; + var dbSource = Model.GetDataSource(); + var table = Model.GetCurrentTable(); + var pkCol = table.PKColumn; + if (pkCol == null) + { + throw new SmartCodeException($"{table.Name} can not find PKColumn!"); + } + var autoIncrement = table.AutoIncrement; + var useGK = autoIncrement ? $"useGeneratedKeys=\"true\" keyProperty=\"{pkCol.ConvertedName}\"" : ""; +} + + + insert into @table.Name + ( + @for (var colIndex = 0; colIndex < table.Columns.Count(); colIndex++) + { + var col = table.Columns.ElementAt(colIndex); + @if (!col.AutoIncrement) + { + @Html.PadLeft(6)@col.Name@(colIndex == table.Columns.Count() - 1 ? "" : ",") + @Html.NewLine() + } + } + ) + values + ( + @for (var colIndex = 0; colIndex < table.Columns.Count(); colIndex++) + { + var col = table.Columns.ElementAt(colIndex); + @if (!col.AutoIncrement) + { + @Html.PadLeft(6)#{@col.ConvertedName}@(colIndex == table.Columns.Count() - 1 ? "" : ",") + @Html.NewLine() + } + } + ) + \ No newline at end of file diff --git a/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/CURD/SqlMap-Query.cshtml b/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/CURD/SqlMap-Query.cshtml new file mode 100644 index 0000000..e96e090 --- /dev/null +++ b/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/CURD/SqlMap-Query.cshtml @@ -0,0 +1,22 @@ +@using SmartCode +@using SmartCode.Db +@model BuildContext +@{ + var project = Model.Project; + var dbSource = Model.GetDataSource(); + var table = Model.GetCurrentTable(); + var pkCol = table.PKColumn; + if (pkCol == null) + { + throw new SmartCodeException($"{table.Name} can not find PKColumn!"); + } + var resultMapName = $"{table.ConvertedName}ResultMap"; +} + + \ No newline at end of file diff --git a/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/CURD/SqlMap-QueryByPage.cshtml b/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/CURD/SqlMap-QueryByPage.cshtml new file mode 100644 index 0000000..d7f51e8 --- /dev/null +++ b/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/CURD/SqlMap-QueryByPage.cshtml @@ -0,0 +1,23 @@ +@using SmartCode +@using SmartCode.Db +@model BuildContext +@{ + var project = Model.Project; + var dbSource = Model.GetDataSource(); + var table = Model.GetCurrentTable(); + var pkCol = table.PKColumn; + if (pkCol == null) + { + throw new SmartCodeException($"{table.Name} can not find PKColumn!"); + } + var resultMapName = $"{table.ConvertedName}ResultMap"; +} + +@section QueryByPage +{ + +} \ No newline at end of file diff --git a/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/CURD/SqlMap-Update.cshtml b/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/CURD/SqlMap-Update.cshtml new file mode 100644 index 0000000..3a4bb66 --- /dev/null +++ b/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/CURD/SqlMap-Update.cshtml @@ -0,0 +1,31 @@ +@using SmartCode +@using SmartCode.Db +@model BuildContext +@{ + var project = Model.Project; + var dbSource = Model.GetDataSource(); + var table = Model.GetCurrentTable(); + var pkCol = table.PKColumn; + if (pkCol == null) + { + throw new SmartCodeException($"{table.Name} can not find PKColumn!"); + } +} + + + + update @table.Name + + @for (var colIndex = 0; colIndex < table.Columns.Count(); colIndex++) + { + var col = table.Columns.ElementAt(colIndex); + @if (col.IsPrimaryKey) + { + continue; + } + @Html.PadLeft(6)@col.Name = #{@col.ConvertedName}@(colIndex == table.Columns.Count() - 1 ? "" : ",") + @Html.NewLine() + } + + where @pkCol.Name=#{@pkCol.Name} + \ No newline at end of file diff --git a/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/SqlMap-Columns.cshtml b/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/SqlMap-Columns.cshtml new file mode 100644 index 0000000..8cb08da --- /dev/null +++ b/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/SqlMap-Columns.cshtml @@ -0,0 +1,16 @@ +@using SmartCode +@using SmartCode.Db +@model BuildContext +@{ + var project = Model.Project; + var dbSource = Model.GetDataSource(); + var table = Model.GetCurrentTable(); +} + + + @for (var colIndex = 0; colIndex < table.Columns.Count(); colIndex++) + { + var col = table.Columns.ElementAt(colIndex); + @($"{col.Name}")@(colIndex == table.Columns.Count() - 1 ? "" : ",") + } + \ No newline at end of file diff --git a/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/SqlMap-MySql.cshtml b/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/SqlMap-MySql.cshtml new file mode 100644 index 0000000..60dbd2e --- /dev/null +++ b/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/SqlMap-MySql.cshtml @@ -0,0 +1,26 @@ +@using SmartCode +@using SmartCode.Db +@model BuildContext +@{ + Layout = "_SqlMapLayout.cshtml"; + var project = Model.Project; + var dbSource = Model.GetDataSource(); + var buildTask = Model.Build; + var table = Model.GetCurrentTable(); + var pkCol = table.PKColumn; + if (pkCol == null) + { + throw new SmartCodeException($"{table.Name} can not find PKColumn!"); + } + + var resultMapName = $"{table.ConvertedName}ResultMap"; +} + +@section QueryByPage +{ + +} \ No newline at end of file diff --git a/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/SqlMap-PostgreSql.cshtml b/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/SqlMap-PostgreSql.cshtml new file mode 100644 index 0000000..743a5a5 --- /dev/null +++ b/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/SqlMap-PostgreSql.cshtml @@ -0,0 +1,18 @@ +@using SmartCode +@using SmartCode.Db +@model BuildContext +@{ + Layout = "_SqlMapLayout.cshtml"; + var project = Model.Project; + var dbSource = Model.GetDataSource(); + var buildTask = Model.Build; + var table = Model.GetCurrentTable(); + var pkCol = table.PKColumn; + if (pkCol == null) + { + throw new SmartCodeException($"{table.Name} can not find PKColumn!"); + } + + +} + diff --git a/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/SqlMap-ResultMaps.cshtml b/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/SqlMap-ResultMaps.cshtml new file mode 100644 index 0000000..be4e9da --- /dev/null +++ b/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/SqlMap-ResultMaps.cshtml @@ -0,0 +1,40 @@ +@using SmartCode +@using SmartCode.Db +@model BuildContext +@{ + var project = Model.Project; + var dbSource = Model.GetDataSource(); + var table = Model.GetCurrentTable(); + + var resultMapName = $"{table.ConvertedName}ResultMap"; + + var buildTask = Model.Build; + + var pkCol = table.PKColumn; + if (pkCol == null) + { + throw new SmartCodeException($"{table.Name} can not find PKColumn!"); + } + + if (!buildTask.Parameters.TryGetValue("EntityModule", out var entityModule)) + { + entityModule = "entity"; + } + + var entityName = $"{project.Module}.{entityModule}.{table.ConvertedName}"; +} + +@if (table.HasColNameNotEqConvertedName) +{ + + + @foreach (var col in table.Columns) + { + if (col.IsPrimaryKey) + { + continue; + } + + } + +} \ No newline at end of file diff --git a/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/SqlMap-WhereQueryParams.cshtml b/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/SqlMap-WhereQueryParams.cshtml new file mode 100644 index 0000000..5816913 --- /dev/null +++ b/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/SqlMap-WhereQueryParams.cshtml @@ -0,0 +1,19 @@ +@using SmartCode +@using SmartCode.Db +@model BuildContext +@{ + var project = Model.Project; + var dbSource = Model.GetDataSource(); + var table = Model.GetCurrentTable(); +} + + + + @foreach (var col in table.Columns) + { + + and @col.Name = #{@col.ConvertedName} + + } + + \ No newline at end of file diff --git a/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/_SqlMapLayout.cshtml b/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/_SqlMapLayout.cshtml new file mode 100644 index 0000000..9acfb12 --- /dev/null +++ b/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/_SqlMapLayout.cshtml @@ -0,0 +1,95 @@ +@using SmartCode +@using SmartCode.Db +@model BuildContext +@{ + var project = Model.Project; + var dbSource = Model.GetDataSource(); + var dbPrefix = dbSource.DbProvider.ParameterPrefix; + var buildTask = Model.Build; + var table = Model.GetCurrentTable(); + var pkCol = table.PKColumn; + if (pkCol == null) + { + throw new SmartCodeException($"{table.Name} can not find PKColumn!"); + } + + var repositoryName = $"{project.Module}.{buildTask.Module}.{table.ConvertedName}"; +} + + + @{ await Html.RenderPartialAsync("SqlMap-ResultMaps.cshtml", Model); } + @{ await Html.RenderPartialAsync("SqlMap-Columns.cshtml", Model); } + @{ await Html.RenderPartialAsync("SqlMap-WhereQueryParams.cshtml", Model); } + + @if (IsSectionDefined("Insert")) + { + await RenderSectionAsync("Insert", required: false); + } + else + { + await Html.RenderPartialAsync("./CURD/SqlMap-Insert.cshtml", Model); + } + + @if (IsSectionDefined("Delete")) + { + await RenderSectionAsync("Delete", required: false); + } + else + { + await Html.RenderPartialAsync("./CURD/SqlMap-Delete.cshtml", Model); + } + + @if (IsSectionDefined("Update")) + { + await RenderSectionAsync("Update", required: false); + } + else + { + await Html.RenderPartialAsync("./CURD/SqlMap-Update.cshtml", Model); + } + + @if (IsSectionDefined("Query")) + { + await RenderSectionAsync("Query", required: false); + } + else + { + await Html.RenderPartialAsync("./CURD/SqlMap-Query.cshtml", Model); + } + + @if (IsSectionDefined("QueryByPage")) + { + await RenderSectionAsync("QueryByPage", required: false); + } + else + { + await Html.RenderPartialAsync("./CURD/SqlMap-QueryByPage.cshtml", Model); + } + + @if (IsSectionDefined("GetTotal")) + { + await RenderSectionAsync("GetTotal", required: false); + } + else + { + await Html.RenderPartialAsync("./CURD/SqlMap-GetTotal.cshtml", Model); + } + + @if (IsSectionDefined("GetEntity")) + { + await RenderSectionAsync("GetEntity", required: false); + } + else + { + await Html.RenderPartialAsync("./CURD/SqlMap-GetEntity.cshtml", Model); + } + + @if (IsSectionDefined("GetById")) + { + await RenderSectionAsync("GetById", required: false); + } + else + { + await Html.RenderPartialAsync("./CURD/SqlMap-GetById.cshtml", Model); + } + \ No newline at end of file diff --git a/src/SmartCode.Generator/RazorTemplates/Java/SqlMap.cshtml b/src/SmartCode.Generator/RazorTemplates/Java/SqlMap.cshtml new file mode 100644 index 0000000..bd9468e --- /dev/null +++ b/src/SmartCode.Generator/RazorTemplates/Java/SqlMap.cshtml @@ -0,0 +1,12 @@ +@using SmartCode +@using SmartCode.Db +@model BuildContext +@{ + var project = Model.Project; + var dbSource = Model.GetDataSource(); +} + + +@{ await Html.RenderPartialAsync($"./SqlMap-Partials/SqlMap-{dbSource.DbProvider.Name}.cshtml", Model); } diff --git a/src/SmartCode/Configuration/ConfigBuilders/ConfigBuilder.cs b/src/SmartCode/Configuration/ConfigBuilders/ConfigBuilder.cs index c76d566..9b33bf1 100644 --- a/src/SmartCode/Configuration/ConfigBuilders/ConfigBuilder.cs +++ b/src/SmartCode/Configuration/ConfigBuilders/ConfigBuilder.cs @@ -15,6 +15,7 @@ protected ConfigBuilder(string configPath) { ConfigPath = configPath; } + public Project Build() { using (StreamReader configStream = new StreamReader(ConfigPath)) @@ -22,12 +23,13 @@ public Project Build() var jsonConfigStr = configStream.ReadToEnd(); Project = Deserialize(jsonConfigStr); } + InitDefault(); return Project; } protected abstract Project Deserialize(string content); - + private void InitDefault() { if (Project.Output != null) @@ -118,19 +120,27 @@ private void InitDefault() { buildTask.IgnoreTables = Project.TableFilter.IgnoreTables; } + if (buildTask.IncludeTables == null) { buildTask.IncludeTables = Project.TableFilter.IncludeTables; } + if (!buildTask.IgnoreView.HasValue) { buildTask.IgnoreView = Project.TableFilter.IgnoreView; } + if (!buildTask.IgnoreNoPKTable.HasValue) { buildTask.IgnoreNoPKTable = Project.TableFilter.IgnoreNoPKTable; } } + + if (buildTask.Parameters == null) + { + buildTask.Parameters = new Dictionary(); + } } } } From b3001fa69c6769ebdd0dbce485e0fa79fb9bed28 Mon Sep 17 00:00:00 2001 From: Ahoo Wang Date: Sun, 20 Oct 2019 21:58:26 +0800 Subject: [PATCH 081/127] add support MyBatis for Java --- doc/SmartCode-Spring-Boot.yml | 10 ++++--- doc/SmartCode.yml | 4 +-- .../DbTypeConverter/DbTypeMap.xml | 8 ++--- .../RazorTemplates/Java/Entity.cshtml | 1 + .../SqlMap-Partials/CURD/SqlMap-Delete.cshtml | 4 +-- .../CURD/SqlMap-GetById.cshtml | 2 +- .../CURD/SqlMap-GetEntity.cshtml | 2 +- .../SqlMap-Partials/CURD/SqlMap-Insert.cshtml | 29 ++++++++++--------- .../SqlMap-Partials/CURD/SqlMap-Update.cshtml | 4 +-- .../SqlMap-Partials/SqlMap-Columns.cshtml | 11 +++---- .../Java/SqlMap-Partials/SqlMap-MySql.cshtml | 2 +- .../SqlMap-Partials/SqlMap-ResultMaps.cshtml | 21 ++++++-------- .../SqlMap-WhereQueryParams.cshtml | 9 ++++++ .../Java/SqlMap-Partials/_SqlMapLayout.cshtml | 2 +- 14 files changed, 60 insertions(+), 49 deletions(-) diff --git a/doc/SmartCode-Spring-Boot.yml b/doc/SmartCode-Spring-Boot.yml index 78629a4..8f197ac 100644 --- a/doc/SmartCode-Spring-Boot.yml +++ b/doc/SmartCode-Spring-Boot.yml @@ -3,9 +3,9 @@ Author: Ahoo Wang DataSource: Name: DbTable Parameters: - DbName: smartsql_db + DbName: user_db DbProvider: MySql - ConnectionString: Data Source=serverAddress;database=smartsql_db;uid=root;pwd=smartsql_db;Charset=utf8;SslMode=none + ConnectionString: Data Source=**;database=smartsql_db;uid=root;pwd=**;Charset=utf8;SslMode=none Language: Java TemplateEngine: Name: Razor @@ -94,7 +94,9 @@ Build: TemplateEngine: Path: SqlMap.cshtml Output: - Path: 'server/src/main/resources/mappers/{{Project.Module}}.{{Build.Module}}' + Path: 'server/src/main/resources/mappers/' DotSplit: true Name: '{{Items.CurrentTable.ConvertedName}}Mapper' - Extension: '.xml' \ No newline at end of file + Extension: '.xml' + Parameters: + LogicalDelete: deleted \ No newline at end of file diff --git a/doc/SmartCode.yml b/doc/SmartCode.yml index d408c66..5b5610f 100644 --- a/doc/SmartCode.yml +++ b/doc/SmartCode.yml @@ -12,11 +12,11 @@ TemplateEngine: Root: CSharp Output: Type: File - Path: 'E:\SmartSql-Starter' + Path: 'D:\SmartSql-Starter' Parameters: SmartSqlVersion: '4.1.23' SmartSqlSchemaVersion: '4.1.16' - BuildDir: 'E:\SmartSql-Starter\build' + BuildDir: 'D:\SmartSql-Starter\build' DockerImage: 'smartsql.starter' NamingConverter: diff --git a/src/SmartCode.Generator/DbTypeConverter/DbTypeMap.xml b/src/SmartCode.Generator/DbTypeConverter/DbTypeMap.xml index eb9b845..0112893 100644 --- a/src/SmartCode.Generator/DbTypeConverter/DbTypeMap.xml +++ b/src/SmartCode.Generator/DbTypeConverter/DbTypeMap.xml @@ -384,12 +384,12 @@ - + - - + + - + diff --git a/src/SmartCode.Generator/RazorTemplates/Java/Entity.cshtml b/src/SmartCode.Generator/RazorTemplates/Java/Entity.cshtml index 7a1e9d9..404ff35 100644 --- a/src/SmartCode.Generator/RazorTemplates/Java/Entity.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/Java/Entity.cshtml @@ -36,6 +36,7 @@ package @(project.Module).@buildTask.Module; import java.math.BigDecimal; import java.sql.Timestamp; import java.util.UUID; +import java.util.Date; import lombok.Builder; import lombok.Data; diff --git a/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/CURD/SqlMap-Delete.cshtml b/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/CURD/SqlMap-Delete.cshtml index 070ea87..9f381d9 100644 --- a/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/CURD/SqlMap-Delete.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/CURD/SqlMap-Delete.cshtml @@ -13,7 +13,7 @@ @if (logicalDeleteKey != null) { - update from @table.Name + update @table.Name set @logicalDeleteKey =1 where @pkCol.Name=#{@pkCol.ConvertedName} @@ -22,6 +22,6 @@ else { delete from @table.Name - where @pkCol.Name=#{@pkCol.ConvertedName} + where @pkCol.Name=#{@pkCol.ConvertedName} } \ No newline at end of file diff --git a/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/CURD/SqlMap-GetById.cshtml b/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/CURD/SqlMap-GetById.cshtml index 2fbef19..1f5e0b5 100644 --- a/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/CURD/SqlMap-GetById.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/CURD/SqlMap-GetById.cshtml @@ -9,7 +9,7 @@ var resultMapName = $"{table.ConvertedName}ResultMap"; } - select * from @table.Name where @pkCol.Name=#{@pkCol.ConvertedName} limit 1 diff --git a/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/CURD/SqlMap-GetEntity.cshtml b/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/CURD/SqlMap-GetEntity.cshtml index 50a208a..e0d96d7 100644 --- a/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/CURD/SqlMap-GetEntity.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/CURD/SqlMap-GetEntity.cshtml @@ -9,7 +9,7 @@ var resultMapName = $"{table.ConvertedName}ResultMap"; } - select * from @table.Name limit 1 diff --git a/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/CURD/SqlMap-Insert.cshtml b/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/CURD/SqlMap-Insert.cshtml index 2937142..3519a47 100644 --- a/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/CURD/SqlMap-Insert.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/CURD/SqlMap-Insert.cshtml @@ -17,26 +17,27 @@ insert into @table.Name ( - @for (var colIndex = 0; colIndex < table.Columns.Count(); colIndex++) + @for (var colIndex = 0; colIndex < table.Columns.Count(); colIndex++) + { + var col = table.Columns.ElementAt(colIndex); + @if (!col.AutoIncrement) { - var col = table.Columns.ElementAt(colIndex); - @if (!col.AutoIncrement) - { - @Html.PadLeft(6)@col.Name@(colIndex == table.Columns.Count() - 1 ? "" : ",") - @Html.NewLine() - } + @Html.PadLeft(6)@col.Name@(colIndex == table.Columns.Count() - 1 ? "" : ",") + @Html.NewLine() } + } ) values ( - @for (var colIndex = 0; colIndex < table.Columns.Count(); colIndex++) + @for (var colIndex = 0; colIndex < table.Columns.Count(); colIndex++) + { + var col = table.Columns.ElementAt(colIndex); + @if (!col.AutoIncrement) { - var col = table.Columns.ElementAt(colIndex); - @if (!col.AutoIncrement) - { - @Html.PadLeft(6)#{@col.ConvertedName}@(colIndex == table.Columns.Count() - 1 ? "" : ",") - @Html.NewLine() - } + @Html.PadLeft(6)#{@col.ConvertedName} + @(colIndex == table.Columns.Count() - 1 ? "" : ",") + @Html.NewLine() } + } ) \ No newline at end of file diff --git a/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/CURD/SqlMap-Update.cshtml b/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/CURD/SqlMap-Update.cshtml index 3a4bb66..16d5682 100644 --- a/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/CURD/SqlMap-Update.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/CURD/SqlMap-Update.cshtml @@ -12,7 +12,6 @@ } } - update @table.Name @@ -23,7 +22,8 @@ { continue; } - @Html.PadLeft(6)@col.Name = #{@col.ConvertedName}@(colIndex == table.Columns.Count() - 1 ? "" : ",") + @Html.PadLeft(6)@col.Name = #{@col.ConvertedName} + @(colIndex == table.Columns.Count() - 1 ? "" : ",") @Html.NewLine() } diff --git a/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/SqlMap-Columns.cshtml b/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/SqlMap-Columns.cshtml index 8cb08da..05b88ae 100644 --- a/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/SqlMap-Columns.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/SqlMap-Columns.cshtml @@ -8,9 +8,10 @@ } - @for (var colIndex = 0; colIndex < table.Columns.Count(); colIndex++) - { - var col = table.Columns.ElementAt(colIndex); - @($"{col.Name}")@(colIndex == table.Columns.Count() - 1 ? "" : ",") - } + @for (var colIndex = 0; colIndex < table.Columns.Count(); colIndex++) + { + var col = table.Columns.ElementAt(colIndex); + @($"{col.Name}")@(colIndex == table.Columns.Count() - 1 ? "" : ",") + } + @Html.NewLine() \ No newline at end of file diff --git a/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/SqlMap-MySql.cshtml b/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/SqlMap-MySql.cshtml index 60dbd2e..669c317 100644 --- a/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/SqlMap-MySql.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/SqlMap-MySql.cshtml @@ -18,7 +18,7 @@ @section QueryByPage { - select * from @table.Name limit #{page.offset},#{page.limit} diff --git a/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/SqlMap-ResultMaps.cshtml b/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/SqlMap-ResultMaps.cshtml index be4e9da..30798d4 100644 --- a/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/SqlMap-ResultMaps.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/SqlMap-ResultMaps.cshtml @@ -24,17 +24,14 @@ var entityName = $"{project.Module}.{entityModule}.{table.ConvertedName}"; } -@if (table.HasColNameNotEqConvertedName) -{ - - - @foreach (var col in table.Columns) + + + @foreach (var col in table.Columns) + { + if (col.IsPrimaryKey) { - if (col.IsPrimaryKey) - { - continue; - } - + continue; } - -} \ No newline at end of file + + } + \ No newline at end of file diff --git a/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/SqlMap-WhereQueryParams.cshtml b/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/SqlMap-WhereQueryParams.cshtml index 5816913..43d54e1 100644 --- a/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/SqlMap-WhereQueryParams.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/SqlMap-WhereQueryParams.cshtml @@ -5,12 +5,21 @@ var project = Model.Project; var dbSource = Model.GetDataSource(); var table = Model.GetCurrentTable(); + Model.Build.Parameters.TryGetValue("LogicalDelete", out var logicalDeleteKey); } + @if (logicalDeleteKey != null) + { + @logicalDeleteKey=0 + } @foreach (var col in table.Columns) { + if (logicalDeleteKey != null && logicalDeleteKey.ToString().Equals(col.Name)) + { + continue; + } and @col.Name = #{@col.ConvertedName} diff --git a/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/_SqlMapLayout.cshtml b/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/_SqlMapLayout.cshtml index 9acfb12..a69ea30 100644 --- a/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/_SqlMapLayout.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/_SqlMapLayout.cshtml @@ -13,7 +13,7 @@ throw new SmartCodeException($"{table.Name} can not find PKColumn!"); } - var repositoryName = $"{project.Module}.{buildTask.Module}.{table.ConvertedName}"; + var repositoryName = $"{project.Module}.{buildTask.Module}.{table.ConvertedName}Repository"; } From 206494b10f148fed6153309c2afe796d98ea989e Mon Sep 17 00:00:00 2001 From: Ahoo Wang Date: Mon, 21 Oct 2019 11:16:29 +0800 Subject: [PATCH 082/127] add support AbstractEntity for JAVA - EntityTemplate --- doc/SmartCode-Spring-Boot.yml | 11 ++++- .../DbTypeConverter/DbTypeMap.xml | 2 + .../RazorTemplates/Java/Entity.cshtml | 42 ++++++++++++++++++- 3 files changed, 52 insertions(+), 3 deletions(-) diff --git a/doc/SmartCode-Spring-Boot.yml b/doc/SmartCode-Spring-Boot.yml index 8f197ac..7e69bdf 100644 --- a/doc/SmartCode-Spring-Boot.yml +++ b/doc/SmartCode-Spring-Boot.yml @@ -3,7 +3,7 @@ Author: Ahoo Wang DataSource: Name: DbTable Parameters: - DbName: user_db + DbName: smartsql_db DbProvider: MySql ConnectionString: Data Source=**;database=smartsql_db;uid=root;pwd=**;Charset=utf8;SslMode=none Language: Java @@ -87,6 +87,15 @@ Build: DotSplit: true Name: '{{Items.CurrentTable.ConvertedName}}' Extension: '.java' + Parameters: + AbstractEntity: + Name: AbstractEntity + Package: net.smartsql.code + Properties: + - id + - createTime + - modifiedTime + - deleted SqlMap: Type: Table diff --git a/src/SmartCode.Generator/DbTypeConverter/DbTypeMap.xml b/src/SmartCode.Generator/DbTypeConverter/DbTypeMap.xml index 0112893..2e26ffa 100644 --- a/src/SmartCode.Generator/DbTypeConverter/DbTypeMap.xml +++ b/src/SmartCode.Generator/DbTypeConverter/DbTypeMap.xml @@ -382,6 +382,7 @@ + @@ -396,6 +397,7 @@ + diff --git a/src/SmartCode.Generator/RazorTemplates/Java/Entity.cshtml b/src/SmartCode.Generator/RazorTemplates/Java/Entity.cshtml index 404ff35..1b1671f 100644 --- a/src/SmartCode.Generator/RazorTemplates/Java/Entity.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/Java/Entity.cshtml @@ -6,6 +6,34 @@ var project = Model.Project; var buildTask = Model.Build; var table = Model.GetCurrentTable(); + + bool useAbstractEntity = false; + String abstractEntityName = ""; + String abstractEntityPackage = ""; + ISet abstractEntityProperties = new HashSet(); + if (buildTask.Parameters.TryGetValue("AbstractEntity", out var abstractEntity)) + { + useAbstractEntity = true; + var abstractEntityParams = (Dictionary) abstractEntity; + if (!abstractEntityParams.TryGetValue("Name", out Object _abstractEntityName)) + { + throw new ArgumentException("AbstractEntity.Name can not be null."); + } + abstractEntityName = _abstractEntityName.ToString(); + if (!abstractEntityParams.TryGetValue("Package", out var _abstractEntityPackage)) + { + throw new ArgumentException("AbstractEntity.Package can not be null."); + } + abstractEntityPackage = _abstractEntityPackage.ToString(); + if (!abstractEntityParams.TryGetValue("Properties", out var _abstractEntityProperties)) + { + throw new ArgumentException("AbstractEntity.Properties can not be null."); + } + ((List) _abstractEntityProperties).ForEach(p => + { + abstractEntityProperties.Add(p.ToString()); + }); + } } @functions { @@ -37,19 +65,29 @@ import java.math.BigDecimal; import java.sql.Timestamp; import java.util.UUID; import java.util.Date; +@if (useAbstractEntity) +{ + import @abstractEntityPackage; +} -import lombok.Builder; import lombok.Data; import lombok.ToString; @table.GetJavaSummary() @@Data -@@Builder @@ToString public class @table.ConvertedName +@if (useAbstractEntity) +{ + extends @abstractEntityName +} { @foreach (var column in table.Columns) { + if (useAbstractEntity && abstractEntityProperties.Contains(column.ConvertedName)) + { + continue; + } @column.GetJavaSummary() private @(ConvertLangType(column)) @column.ConvertedName; From 288143f1fb1c8cff73d51217b1a00018d99e3ccc Mon Sep 17 00:00:00 2001 From: rocher Date: Mon, 21 Oct 2019 14:38:58 +0800 Subject: [PATCH 083/127] Merge branch 'master' of D:\WEB\SmartCode with conflicts. --- doc/SmartCode.yml | 259 +++++++++++++++++++++------------------------- 1 file changed, 118 insertions(+), 141 deletions(-) diff --git a/doc/SmartCode.yml b/doc/SmartCode.yml index 9ad8d25..c6afb2f 100644 --- a/doc/SmartCode.yml +++ b/doc/SmartCode.yml @@ -1,207 +1,184 @@ -Module: SmartSql.Starter -Author: Ahoo Wang +Module: MaiDao.Order +Author: RocherKong DataSource: Name: DbTable - Parameters: - DbName: SmartSqlTestDB + Paramters: + DbName: SmartSqlDB DbProvider: SqlServer - ConnectionString: Data Source=.;Initial Catalog=SmartSqlTestDB;Integrated Security=True + ConnectionString: Data Source=192.168.0.22;database=OrderDB;uid=sa;pwd=MydaoSql!@#51 Language: CSharp TemplateEngine: Name: Razor Root: CSharp Output: Type: File - Path: 'E:\SmartSql-Starter' -Parameters: - SmartSqlVersion: '4.1.23' - SmartSqlSchemaVersion: '4.1.16' - BuildDir: 'E:\SmartSql-Starter\build' - DockerImage: 'smartsql.starter' - -NamingConverter: - Table: - Tokenizer: - Type: Default - Parameters: - IgnorePrefix: 'T_' - Delimiter: '_' - Converter: - Type: Pascal - Parameters: { } - View: - Tokenizer: - Type: Default - Parameters: - IgnorePrefix: 'V_' - Delimiter: '_' - Converter: - Type: Pascal - Column: - Tokenizer: - Type: Default - Parameters: - Delimiter: '_' - Converter: - Type: Pascal - -TableFilter: - IgnoreNoPKTable: true - IgnoreView: true + Path: 'E://SmartSql-Starter' # 构建任务 Build: ClearDir: Type: Clear - Parameters: + Paramters: Dirs: '.' - MakeBuildDir: - Type: Process - Parameters: - FileName: powershell - Args: mkdir '{{Project.Parameters.BuildDir}}' - Copy: - Type: Process - Parameters: - FileName: powershell - Args: cp '{{Project.ConfigPath}}' '{{Project.Parameters.BuildDir}}' - Scaffolding: Type: MultiTemplate Output: Path: '.' - Parameters: + Paramters: Templates: [{Key: 'Sln.cshtml',Output: {Name: '{{Project.Module}}',Extension: '.sln'}}, - {Key: 'Sln-Directory.Build.cshtml',Output: {Name: 'Directory.Build',Extension: '.props'}}, - {Key: 'Sln-Version.cshtml',Output: {Path: 'build',Name: 'version',Extension: '.props'}}, - {Key: 'Sln-Dockerfile.cshtml',Output: {Name: 'Dockerfile',Extension: ''}}, - {Key: 'Sln-DockerIgnore.cshtml',Output: {Name: '.dockerignore',Extension: ''}}, - {Key: 'Sln-GitIgnore.cshtml',Output: {Name: '.gitignore',Extension: ''}}, - {Key: "Proj-Entity.cshtml",Output: {Path: 'src/{{Project.Module}}.Entity',Name: '{{Project.Module}}.Entity',Extension: '.csproj'}}, - {Key: "Proj-Repository.cshtml",Output: {Path: 'src/{{Project.Module}}.Repository',Name: '{{Project.Module}}.Repository',Extension: '.csproj'}}, - {Key: "Proj-Service.cshtml",Output: {Path: 'src/{{Project.Module}}.Service',Name: '{{Project.Module}}.Service',Extension: '.csproj'}}, - {Key: "Proj-API.cshtml",Output: {Path: 'src/{{Project.Module}}.API',Name: '{{Project.Module}}.API',Extension: '.csproj'}}, - {Key: "API/LaunchSettings.cshtml",Output: {Path: 'src/{{Project.Module}}.API/Properties',Name: 'launchSettings',Extension: '.json'}}, - {Key: "API/AppSettings.cshtml",Output: {Path: 'src/{{Project.Module}}.API',Name: 'appsettings',Extension: '.json'}}, - {Key: "API/AppSettings-Development.cshtml",Output: {Path: 'src/{{Project.Module}}.API',Name: 'appsettings.Development',Extension: '.json'}}, - {Key: "API/Program.cshtml",Output: {Path: 'src/{{Project.Module}}.API',Name: 'Program',Extension: '.cs'}}, - {Key: "API/Startup.cshtml",Output: {Path: 'src/{{Project.Module}}.API',Name: 'Startup',Extension: '.cs'}}, - {Key: "API/APIException.cshtml",Output: {Path: 'src/{{Project.Module}}.API/Exceptions',Name: 'APIException',Extension: '.cs'}}, - {Key: "API/GlobalExceptionFilter.cshtml",Output: {Path: 'src/{{Project.Module}}.API/Filters',Name: 'GlobalExceptionFilter',Extension: '.cs'}}, - {Key: "API/GlobalValidateModelFilter.cshtml",Output: {Path: 'src/{{Project.Module}}.API/Filters',Name: 'GlobalValidateModelFilter',Extension: '.cs'}}, - {Key: "API/QueryRequest.cshtml",Output: {Path: 'src/{{Project.Module}}.API/Messages',Name: 'QueryRequest',Extension: '.cs'}}, - {Key: "API/QueryByPageRequest.cshtml",Output: {Path: 'src/{{Project.Module}}.API/Messages',Name: 'QueryByPageRequest',Extension: '.cs'}}, - {Key: "API/ResponseMessage.cshtml",Output: {Path: 'src/{{Project.Module}}.API/Messages',Name: 'ResponseMessage',Extension: '.cs'}}, - {Key: "API/QueryResponse.cshtml",Output: {Path: 'src/{{Project.Module}}.API/Messages',Name: 'QueryResponse',Extension: '.cs'}}, - {Key: "API/QueryByPageResponse.cshtml",Output: {Path: 'src/{{Project.Module}}.API/Messages',Name: 'QueryByPageResponse',Extension: '.cs'}}, - {Key: "API/ResponseMessage.cshtml",Output: {Path: 'src/{{Project.Module}}.API/Messages',Name: 'ResponseMessage',Extension: '.cs'}}, - {Key: "SqlMapConfig.cshtml",Output: {Path: 'src/{{Project.Module}}.Repository',Name: 'SmartSqlMapConfig',Extension: '.xml'}}, - {Key: "SqlMapConfig.cshtml",Output: {Path: 'src/{{Project.Module}}.Repository',Name: 'SmartSqlMapConfig.Development',Extension: '.xml'}}] + {Key: "Proj-Entity.cshtml",Output: {Path: '{{Project.Module}}.Entity',Name: '{{Project.Module}}.Entity',Extension: '.csproj'}}, + {Key: "Proj-Repository.cshtml",Output: {Path: '{{Project.Module}}.Repository',Name: '{{Project.Module}}.Repository',Extension: '.csproj'}}, + {Key: "Proj-Service.cshtml",Output: {Path: '{{Project.Module}}.Service',Name: '{{Project.Module}}.Service',Extension: '.csproj'}}, + {Key: "Proj-API.cshtml",Output: {Path: '{{Project.Module}}.API',Name: '{{Project.Module}}.API',Extension: '.csproj'}}, + {Key: "API/LaunchSettings.cshtml",Output: {Path: '{{Project.Module}}.API/Properties',Name: 'launchSettings',Extension: '.json'}}, + {Key: "API/AppSettings.cshtml",Output: {Path: '{{Project.Module}}.API',Name: 'appsettings',Extension: '.json'}}, + {Key: "API/AppSettings-Development.cshtml",Output: {Path: '{{Project.Module}}.API',Name: 'appsettings.Development',Extension: '.json'}}, + {Key: "API/Program.cshtml",Output: {Path: '{{Project.Module}}.API',Name: 'Program',Extension: '.cs'}}, + {Key: "API/Startup.cshtml",Output: {Path: '{{Project.Module}}.API',Name: 'Startup',Extension: '.cs'}}, + {Key: "API/APIException.cshtml",Output: {Path: '{{Project.Module}}.API/Exceptions',Name: 'APIException',Extension: '.cs'}}, + {Key: "API/GlobalExceptionFilter.cshtml",Output: {Path: '{{Project.Module}}.API/Filters',Name: 'GlobalExceptionFilter',Extension: '.cs'}}, + {Key: "API/GlobalValidateModelFilter.cshtml",Output: {Path: '{{Project.Module}}.API/Filters',Name: 'GlobalValidateModelFilter',Extension: '.cs'}}, + {Key: "API/QueryRequest.cshtml",Output: {Path: '{{Project.Module}}.API/Messages',Name: 'QueryRequest',Extension: '.cs'}}, + {Key: "API/QueryByPageRequest.cshtml",Output: {Path: '{{Project.Module}}.API/Messages',Name: 'QueryByPageRequest',Extension: '.cs'}}, + {Key: "API/ResponseMessage.cshtml",Output: {Path: '{{Project.Module}}.API/Messages',Name: 'ResponseMessage',Extension: '.cs'}}, + {Key: "API/QueryResponse.cshtml",Output: {Path: '{{Project.Module}}.API/Messages',Name: 'QueryResponse',Extension: '.cs'}}, + {Key: "API/QueryByPageResponse.cshtml",Output: {Path: '{{Project.Module}}.API/Messages',Name: 'QueryByPageResponse',Extension: '.cs'}}, + {Key: "API/ResponseMessage.cshtml",Output: {Path: '{{Project.Module}}.API/Messages',Name: 'ResponseMessage',Extension: '.cs'}}, + {Key: "SqlMapConfig.cshtml",Output: {Path: '{{Project.Module}}.API',Name: 'SmartSqlMapConfig',Extension: '.xml'}} + ] Entity: Type: Table Module: Entity TemplateEngine: Path: Entity.cshtml - IgnoreNoPKTable: false - IgnoreView: false Output: - Path: 'src/{{Project.Module}}.{{Build.Module}}' + Path: '{{Project.Module}}.{{Build.Module}}' Name: '{{Items.CurrentTable.ConvertedName}}' Extension: '.cs' + NamingConverter: + Table: + Tokenizer: + Type: Default + Paramters: + IgnorePrefix: 'T_' + Delimiter: '_' + Converter: + Type: Pascal + Paramters: { } + View: + Tokenizer: + Type: Default + Paramters: + IgnorePrefix: 'V_' + Delimiter: '_' + Converter: + Type: Pascal + Column: + Tokenizer: + Type: Default + Paramters: + Delimiter: '_' + Converter: + Type: Pascal Repository: Type: Table Module: Repository TemplateEngine: Path: Repository.cshtml + IgnoreNoPKTable: true + IgnoreView: true Output: - Path: 'src/{{Project.Module}}.{{Build.Module}}' + Path: '{{Project.Module}}.{{Build.Module}}' Name: 'I{{Items.CurrentTable.ConvertedName}}Repository' Extension: .cs + NamingConverter: + Table: + Tokenizer: + Type: Default + Paramters: + IgnorePrefix: 'T_' + Delimiter: '_' + Converter: + Type: Pascal Service: Type: Table Module: Service TemplateEngine: Path: Service.cshtml + IgnoreNoPKTable: true + IgnoreView: true Output: - Path: 'src/{{Project.Module}}.{{Build.Module}}' + Path: '{{Project.Module}}.{{Build.Module}}' Name: '{{Items.CurrentTable.ConvertedName}}Service' Extension: .cs + NamingConverter: + Table: + Tokenizer: + Type: Default + Paramters: + IgnorePrefix: 'T_' + Delimiter: '_' + Converter: + Type: Pascal APIController: Type: Table Module: API TemplateEngine: Path: API/APIController.cshtml + IgnoreNoPKTable: true + IgnoreView: true Output: - Path: 'src/{{Project.Module}}.{{Build.Module}}/Controllers' + Path: '{{Project.Module}}.{{Build.Module}}/Controllers' Name: '{{Items.CurrentTable.ConvertedName}}Controller' Extension: .cs + NamingConverter: + Table: + Tokenizer: + Type: Default + Paramters: + IgnorePrefix: 'T_' + Delimiter: '_' + Converter: + Type: Pascal SqlMap: Type: Table TemplateEngine: Path: SqlMap.cshtml Output: - Path: 'src/{{Project.Module}}.Repository/Maps' + Path: '{{Project.Module}}.API/Maps' Name: '{{Items.CurrentTable.ConvertedName}}' Extension: .xml - -# Please install dotnet-format first! -# dotnet tool install -g dotnet-format - CodeFormat: - Type: Process - Parameters: - FileName: powershell - WorkingDirectory: '{{Project.Output.Path}}' - Args: dotnet-format - - ReStore: - Type: Process - Parameters: - FileName: powershell - WorkingDirectory: '{{Project.Output.Path}}' - Args: dotnet restore - -# BuildDocker: -# Type: Process -# Parameters: -# FileName: powershell -# WorkingDirectory: '{{Project.Output.Path}}' -# Args: docker build -t {{Project.Parameters.DockerImage}}:v1.0.0 . - -# RunDocker: -# Type: Process -# Parameters: -# FileName: powershell -# WorkingDirectory: '{{Project.Output.Path}}' -# Args: docker run --name {{Project.Parameters.DockerImage}} --rm -d -p 8008:80 {{Project.Parameters.DockerImage}}:v1.0.0 . - -# Publish: -# Type: Process -# Parameters: -# FileName: powershell -# WorkingDirectory: '{{Project.Output.Path}}' -# Args: dotnet publish -c Release -o '{{Project.Output.Path}}\publish' - -# Run: -# Type: Process -# Parameters: -# FileName: powershell -# WorkingDirectory: '{{Project.Output.Path}}\publish' -# CreateNoWindow: false -# RedirectStandardOutput: false -# RedirectStandardError: false -# WaitForExit: false -# WriteLines: ['dotnet {{Project.Module}}.API.dll'] - -# RunChrome: -# Type: Process -# Parameters: -# FileName: C:\Program Files (x86)\Google\Chrome\Application\chrome.exe -# CreateNoWindow: false -# Args: http://localhost:8008/swagger \ No newline at end of file + IgnoreNoPKTable: true + IgnoreView: true + NamingConverter: + Table: + Tokenizer: + Type: Default + Paramters: + IgnorePrefix: 'T_' + Delimiter: '_' + Converter: + Type: Pascal + View: + Tokenizer: + Type: Default + Paramters: + IgnorePrefix: 'V_' + Delimiter: '_' + Converter: + Type: Pascal + Column: + Tokenizer: + Type: Default + Paramters: + IgnorePrefix: 'T_' + Delimiter: '_' + Converter: + Type: Pascal \ No newline at end of file From eb3ffbc32b9dc7f323c5fe71c5b33b7b0b2c80d8 Mon Sep 17 00:00:00 2001 From: Ahoo Wang Date: Mon, 21 Oct 2019 14:46:37 +0800 Subject: [PATCH 084/127] add support Java-SpringBoot-MyBatis template --- build/version.props | 2 +- doc/SmartCode-Spring-Boot.yml | 74 +++++++++++++++++-- doc/SmartCode.yml | 4 +- .../BuildTasks/MultiTemplateBuildTask.cs | 28 +++++-- src/SmartCode.App/Outputs/FileOutput.cs | 2 +- src/SmartCode.CLI/SmartCode.CLI.csproj | 2 +- src/SmartCode.Db/SmartCode.Db.csproj | 14 ++-- src/SmartCode.ETL/SmartCode.ETL.csproj | 6 +- .../RazorTemplates/Java/AppConfig.cshtml | 14 ++++ .../RazorTemplates/Java/Application.cshtml | 23 +++++- .../RazorTemplates/Java/Controller.cshtml | 41 ++++++++++ .../RazorTemplates/Java/Entity.cshtml | 2 +- .../RazorTemplates/Java/Pom-Api.cshtml | 7 +- .../RazorTemplates/Java/Pom-Parent.cshtml | 2 +- .../RazorTemplates/Java/Pom-Server.cshtml | 35 +++++---- .../RazorTemplates/Java/Repository.cshtml | 54 ++++++++++++++ .../Java/Resources/Application-YAML.cshtml | 30 ++++++++ .../Java/Resources/Maps/Mapper.cshtml | 8 -- .../RazorTemplates/Java/Service.cshtml | 42 +++++++++++ .../Java/Test/Application-Test.cshtml | 19 ++++- src/SmartCode/SmartCode.csproj | 2 +- 21 files changed, 349 insertions(+), 62 deletions(-) create mode 100644 src/SmartCode.Generator/RazorTemplates/Java/AppConfig.cshtml delete mode 100644 src/SmartCode.Generator/RazorTemplates/Java/Resources/Maps/Mapper.cshtml diff --git a/build/version.props b/build/version.props index 38e7016..8cd479c 100644 --- a/build/version.props +++ b/build/version.props @@ -2,7 +2,7 @@ 2 2 - 70 + 80 $(VersionMajor).$(VersionMinor).$(VersionPatch) diff --git a/doc/SmartCode-Spring-Boot.yml b/doc/SmartCode-Spring-Boot.yml index 7e69bdf..6da1cdc 100644 --- a/doc/SmartCode-Spring-Boot.yml +++ b/doc/SmartCode-Spring-Boot.yml @@ -1,11 +1,11 @@ -Module: net.smartsql.code +Module: net.smartsql.demo Author: Ahoo Wang DataSource: Name: DbTable Parameters: DbName: smartsql_db DbProvider: MySql - ConnectionString: Data Source=**;database=smartsql_db;uid=root;pwd=**;Charset=utf8;SslMode=none + ConnectionString: Data Source=serverAddress;database=smartsql_db;uid=root;pwd=smartsql;Charset=utf8;SslMode=none Language: Java TemplateEngine: Name: Razor @@ -15,7 +15,7 @@ Output: Path: 'D://SmartSql-Java' Parameters: BuildDir: 'D:\SmartSql-Java\build' - + ApplicationName: Demo NamingConverter: Table: Tokenizer: @@ -74,7 +74,31 @@ Build: {Key: 'Pom-Parent.cshtml',Output: {Name: 'pom',Extension: '.xml'}}, {Key: 'Pom-Api.cshtml',Output: {Path: "api",Name: 'pom',Extension: '.xml'}}, {Key: 'Pom-Server.cshtml',Output: {Path: "server",Name: 'pom',Extension: '.xml'}}, - {Key: 'Resources/Application-YAML.cshtml',Output: {Path: "server/src/main/resources",Name: 'application',Extension: '.yml'}} + {Key: 'Resources/Application-YAML.cshtml',Output: {Path: "server/src/main/resources",Name: 'application',Extension: '.yml'}}, + {Key: 'Application.cshtml',Output: + { + Path: "server/src/main/java/{{Project.Module}}/", + DotSplit: true, + Name: '{{Project.Parameters.ApplicationName}}Application', + Extension: '.java' + } + }, + {Key: 'Test/Application-Test.cshtml',Output: + { + Path: "server/src/test/java/{{Project.Module}}/", + DotSplit: true, + Name: '{{Project.Parameters.ApplicationName}}ApplicationTests', + Extension: '.java' + } + }, + {Key: 'AppConfig.cshtml',Output: + { + Path: "server/src/main/java/{{Project.Module}}/config", + DotSplit: true, + Name: 'AppConfig', + Extension: '.java' + } + } ] Entity: @@ -90,13 +114,13 @@ Build: Parameters: AbstractEntity: Name: AbstractEntity - Package: net.smartsql.code + Package: net.smartsql.entity Properties: - id - createTime - modifiedTime - deleted - + SqlMap: Type: Table Module: repository @@ -108,4 +132,40 @@ Build: Name: '{{Items.CurrentTable.ConvertedName}}Mapper' Extension: '.xml' Parameters: - LogicalDelete: deleted \ No newline at end of file + LogicalDelete: deleted + + Repository: + Type: Table + Module: repository + TemplateEngine: + Path: Repository.cshtml + Output: + Path: 'server/src/main/java/{{Project.Module}}.{{Build.Module}}' + DotSplit: true + Name: '{{Items.CurrentTable.ConvertedName}}Repository' + Extension: '.java' + Parameters: + GenericRepository: + Package: net.smartsql.repository + + Service: + Type: Table + Module: service + TemplateEngine: + Path: Service.cshtml + Output: + Path: 'server/src/main/java/{{Project.Module}}.{{Build.Module}}' + DotSplit: true + Name: '{{Items.CurrentTable.ConvertedName}}Service' + Extension: '.java' + + Controller: + Type: Table + Module: controller + TemplateEngine: + Path: Controller.cshtml + Output: + Path: 'server/src/main/java/{{Project.Module}}.{{Build.Module}}' + DotSplit: true + Name: '{{Items.CurrentTable.ConvertedName}}Controller' + Extension: '.java' \ No newline at end of file diff --git a/doc/SmartCode.yml b/doc/SmartCode.yml index 5b5610f..cad167a 100644 --- a/doc/SmartCode.yml +++ b/doc/SmartCode.yml @@ -14,8 +14,8 @@ Output: Type: File Path: 'D:\SmartSql-Starter' Parameters: - SmartSqlVersion: '4.1.23' - SmartSqlSchemaVersion: '4.1.16' + SmartSqlVersion: '4.1.32' + SmartSqlSchemaVersion: '4.1.29' BuildDir: 'D:\SmartSql-Starter\build' DockerImage: 'smartsql.starter' diff --git a/src/SmartCode.App/BuildTasks/MultiTemplateBuildTask.cs b/src/SmartCode.App/BuildTasks/MultiTemplateBuildTask.cs index c6c020e..36464aa 100644 --- a/src/SmartCode.App/BuildTasks/MultiTemplateBuildTask.cs +++ b/src/SmartCode.App/BuildTasks/MultiTemplateBuildTask.cs @@ -31,23 +31,27 @@ public MultiTemplateBuildTask(IPluginManager pluginManager _pluginManager = pluginManager; _logger = logger; } + public async Task Build(BuildContext context) { if (context.Build.Parameters.Value(TEMPLATES_KEY, out IEnumerable templates)) { foreach (var templateKVs in templates) { - var _templateKVs = (Dictionary)templateKVs; + var _templateKVs = (Dictionary) templateKVs; if (!_templateKVs.Value(TEMPLATE_KEY, out string templateKey)) { throw new SmartCodeException($"Build:{context.BuildKey},Can not find TemplateKey!"); } + context.Build.TemplateEngine.Path = templateKey; - context.Result = await _pluginManager.Resolve(context.Build.TemplateEngine.Name).Render(context); + context.Result = await _pluginManager.Resolve(context.Build.TemplateEngine.Name) + .Render(context); if (!_templateKVs.Value(TEMPLATE_OUTPUT_KEY, out Dictionary outputKVs)) { throw new SmartCodeException($"Build:{context.BuildKey},Can not find Output!"); } + if (context.Output == null) { throw new SmartCodeException($"Build:{context.BuildKey},Output can not be null!"); @@ -57,6 +61,7 @@ public async Task Build(BuildContext context) { Path = context.Output.Path, Mode = context.Output.Mode, + DotSplit = context.Output.DotSplit, Name = context.Output.Name, Extension = context.Output.Extension }; @@ -64,24 +69,36 @@ public async Task Build(BuildContext context) { output.Path = outputPath; } + if (outputKVs.Value(nameof(Output.Mode), out CreateMode outputMode)) { output.Mode = outputMode; } + + if (outputKVs.Value(nameof(Output.DotSplit), out string dotSplit)) + { + output.DotSplit = Convert.ToBoolean(dotSplit); + } + if (String.IsNullOrEmpty(output.Path)) { - throw new SmartCodeException($"Build:{context.BuildKey},Template:{templateKey},can not find Output.Path!"); + throw new SmartCodeException( + $"Build:{context.BuildKey},Template:{templateKey},can not find Output.Path!"); } + if (!outputKVs.Value(nameof(Output.Name), out string outputName)) { - throw new SmartCodeException($"Build:{context.BuildKey},Template:{templateKey},can not find Output.Name!"); + throw new SmartCodeException( + $"Build:{context.BuildKey},Template:{templateKey},can not find Output.Name!"); } + output.Name = outputName; if (outputKVs.Value(nameof(Output.Extension), out string extension)) { output.Extension = extension; } + await _pluginManager.Resolve(context.Output.Type).Output(context, output); } } @@ -89,7 +106,6 @@ public async Task Build(BuildContext context) public void Initialize(IDictionary parameters) { - } } -} +} \ No newline at end of file diff --git a/src/SmartCode.App/Outputs/FileOutput.cs b/src/SmartCode.App/Outputs/FileOutput.cs index f09eec7..1efd8a3 100644 --- a/src/SmartCode.App/Outputs/FileOutput.cs +++ b/src/SmartCode.App/Outputs/FileOutput.cs @@ -85,7 +85,7 @@ public async Task Output(BuildContext context, Output output = null) using (StreamWriter streamWriter = new StreamWriter(filePath)) { - await streamWriter.WriteAsync(context.Result); + await streamWriter.WriteAsync(context.Result.Trim()); } _logger.LogInformation($"------ Mode:{output.Mode},Build:{context.BuildKey} -> {filePath} End! ------"); diff --git a/src/SmartCode.CLI/SmartCode.CLI.csproj b/src/SmartCode.CLI/SmartCode.CLI.csproj index 1e6b347..525ad43 100644 --- a/src/SmartCode.CLI/SmartCode.CLI.csproj +++ b/src/SmartCode.CLI/SmartCode.CLI.csproj @@ -14,7 +14,7 @@ - + diff --git a/src/SmartCode.Db/SmartCode.Db.csproj b/src/SmartCode.Db/SmartCode.Db.csproj index 872e0e8..71cdb27 100644 --- a/src/SmartCode.Db/SmartCode.Db.csproj +++ b/src/SmartCode.Db/SmartCode.Db.csproj @@ -5,14 +5,14 @@ - - - - + + + + - - - + + + diff --git a/src/SmartCode.ETL/SmartCode.ETL.csproj b/src/SmartCode.ETL/SmartCode.ETL.csproj index 006b987..2204254 100644 --- a/src/SmartCode.ETL/SmartCode.ETL.csproj +++ b/src/SmartCode.ETL/SmartCode.ETL.csproj @@ -5,9 +5,9 @@ - - - + + + diff --git a/src/SmartCode.Generator/RazorTemplates/Java/AppConfig.cshtml b/src/SmartCode.Generator/RazorTemplates/Java/AppConfig.cshtml new file mode 100644 index 0000000..01cac18 --- /dev/null +++ b/src/SmartCode.Generator/RazorTemplates/Java/AppConfig.cshtml @@ -0,0 +1,14 @@ +@using SmartCode +@model BuildContext +@{ + Layout = "_JavaLayout.cshtml"; + var project = Model.Project; + var buildTask = Model.Build; +} + + +package @(project.Module).config; + +public class AppConfig { + +} \ No newline at end of file diff --git a/src/SmartCode.Generator/RazorTemplates/Java/Application.cshtml b/src/SmartCode.Generator/RazorTemplates/Java/Application.cshtml index 94957c0..00a1a83 100644 --- a/src/SmartCode.Generator/RazorTemplates/Java/Application.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/Java/Application.cshtml @@ -1,13 +1,30 @@ -package me.ahoo.demo; +@using SmartCode +@model BuildContext +@{ + Layout = "_JavaLayout.cshtml"; + var project = Model.Project; + + var appName = "Demo"; + + if (project.Parameters.TryGetValue("ApplicationName", out var _appName)) + { + appName = _appName.ToString(); + } + var appClassName = $"{appName}Application"; +} + +package @(project.Module); import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import springfox.documentation.swagger2.annotations.EnableSwagger2; @@SpringBootApplication -public class DemoApplication { +@@EnableSwagger2 +public class @appClassName { public static void main(String[] args) { -SpringApplication.run(DemoApplication.class, args); + SpringApplication.run(@(appClassName).class, args); } } \ No newline at end of file diff --git a/src/SmartCode.Generator/RazorTemplates/Java/Controller.cshtml b/src/SmartCode.Generator/RazorTemplates/Java/Controller.cshtml index e69de29..200c4b6 100644 --- a/src/SmartCode.Generator/RazorTemplates/Java/Controller.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/Java/Controller.cshtml @@ -0,0 +1,41 @@ +@using SmartCode +@model BuildContext +@{ + Layout = "_JavaLayout.cshtml"; + var project = Model.Project; + var buildTask = Model.Build; + var table = Model.GetCurrentTable(); + var pkCol = table.PKColumn; + if (pkCol == null) + { + throw new SmartCodeException($"Service Template can not find PKColumn,Table:{table.Name}."); + } + var pkType = pkCol.LanguageType; + var insertRetType = table.AutoIncrement ? pkType : "int"; + var entityName = table.ConvertedName; + var entityCamelName = NamingUtil.CamelCase(table.ConvertedName); + var serviceName = $"{table.ConvertedName}Service"; + var serviceCamelName = NamingUtil.CamelCase(serviceName); + var controllerName = $"{table.ConvertedName}Controller"; +} + + + +package @(project.Module).@buildTask.Module; + +import lombok.var; + +import org.springframework.beans.factory.annotation.Autowired; +import javax.validation.Valid; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import @(project.Module).service.@serviceName; + +@Html.NewLine() +@@RestController +@@RequestMapping("@entityCamelName") +public class @controllerName { +@@Autowired +@serviceName @serviceCamelName; + +} \ No newline at end of file diff --git a/src/SmartCode.Generator/RazorTemplates/Java/Entity.cshtml b/src/SmartCode.Generator/RazorTemplates/Java/Entity.cshtml index 1b1671f..93945c0 100644 --- a/src/SmartCode.Generator/RazorTemplates/Java/Entity.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/Java/Entity.cshtml @@ -67,7 +67,7 @@ import java.util.UUID; import java.util.Date; @if (useAbstractEntity) { - import @abstractEntityPackage; + import @($"{abstractEntityPackage}.{abstractEntityName}"); } import lombok.Data; diff --git a/src/SmartCode.Generator/RazorTemplates/Java/Pom-Api.cshtml b/src/SmartCode.Generator/RazorTemplates/Java/Pom-Api.cshtml index cbd5f82..3839852 100644 --- a/src/SmartCode.Generator/RazorTemplates/Java/Pom-Api.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/Java/Pom-Api.cshtml @@ -7,17 +7,18 @@ } + @project.Module parent - 1.0-SNAPSHOT + 0.0.1-SNAPSHOT 4.0.0 - contract - contract + api + api \ No newline at end of file diff --git a/src/SmartCode.Generator/RazorTemplates/Java/Pom-Parent.cshtml b/src/SmartCode.Generator/RazorTemplates/Java/Pom-Parent.cshtml index d7db5f4..f924ae6 100644 --- a/src/SmartCode.Generator/RazorTemplates/Java/Pom-Parent.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/Java/Pom-Parent.cshtml @@ -22,8 +22,8 @@ 1.8 - contract api + server \ No newline at end of file diff --git a/src/SmartCode.Generator/RazorTemplates/Java/Pom-Server.cshtml b/src/SmartCode.Generator/RazorTemplates/Java/Pom-Server.cshtml index 3ca3ff1..4571317 100644 --- a/src/SmartCode.Generator/RazorTemplates/Java/Pom-Server.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/Java/Pom-Server.cshtml @@ -5,21 +5,21 @@ Layout = null; var project = Model.Project; } - + 4.0.0 org.springframework.boot spring-boot-starter-parent - 2.1.7.RELEASE + 2.1.9.RELEASE @project.Module - api + server 0.0.1-SNAPSHOT - api + server Api project for Spring Boot @@ -36,13 +36,13 @@ spring-boot-starter-web - org.springframework.session - spring-session-core + org.mybatis.spring.boot + mybatis-spring-boot-starter + 2.1.1 - - org.postgresql - postgresql + mysql + mysql-connector-java runtime @@ -51,13 +51,18 @@ true - org.springframework.boot - spring-boot-starter-test - test + io.springfox + springfox-swagger2 + 2.9.2 + + + io.springfox + springfox-swagger-ui + 2.9.2 - org.springframework.restdocs - spring-restdocs-mockmvc + org.springframework.boot + spring-boot-starter-test test @@ -96,4 +101,4 @@ - + \ No newline at end of file diff --git a/src/SmartCode.Generator/RazorTemplates/Java/Repository.cshtml b/src/SmartCode.Generator/RazorTemplates/Java/Repository.cshtml index e69de29..8188c45 100644 --- a/src/SmartCode.Generator/RazorTemplates/Java/Repository.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/Java/Repository.cshtml @@ -0,0 +1,54 @@ +@using SmartCode +@using SmartCode.Db; +@model BuildContext +@{ + Layout = "_JavaLayout.cshtml"; + var project = Model.Project; + var buildTask = Model.Build; + var table = Model.GetCurrentTable(); + var pkCol = table.PKColumn; + if (pkCol == null) + { + throw new SmartCodeException($"Repository Template can not find PKColumn,Table:{table.Name}."); + } + var primaryKeyType = pkCol.LanguageType ?? "int"; + switch (primaryKeyType) + { + case "long": + { + primaryKeyType = "Long"; + break; + } + case "int": + { + primaryKeyType = "Integer"; + break; + } + } + var dbSource = Model.GetDataSource(); + + String genericRepositoryPackageName = ""; + if (buildTask.Parameters.TryGetValue("GenericRepository", out var _genericRepositoryParams)) + { + var genericRepositoryParams = (Dictionary) _genericRepositoryParams; + if (!genericRepositoryParams.TryGetValue("Package", out var _genericRepositoryPackage)) + { + throw new ArgumentException("GenericRepository.Package can not be null."); + } + genericRepositoryPackageName = _genericRepositoryPackage.ToString(); + } +} + +package @(project.Module).@buildTask.Module; + +import org.apache.ibatis.annotations.Mapper; +import org.springframework.stereotype.Repository; +import @(genericRepositoryPackageName).GenericRepository; +import @(project.Module).entity.@table.ConvertedName; + +@Html.NewLine() +@@Repository +@@Mapper +public interface @(table.ConvertedName)Repository extends GenericRepository<@(table.ConvertedName), @(primaryKeyType)> { + +} \ No newline at end of file diff --git a/src/SmartCode.Generator/RazorTemplates/Java/Resources/Application-YAML.cshtml b/src/SmartCode.Generator/RazorTemplates/Java/Resources/Application-YAML.cshtml index e69de29..fe5dc25 100644 --- a/src/SmartCode.Generator/RazorTemplates/Java/Resources/Application-YAML.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/Java/Resources/Application-YAML.cshtml @@ -0,0 +1,30 @@ +@using SmartCode +@using SmartCode.Db +@model BuildContext +@{ + var project = Model.Project; + var buildTask = Model.Build; + var appName = "Demo"; + if (project.Parameters.TryGetValue("ApplicationName", out var _appName)) + { + appName = _appName.ToString(); + } + var appClassName = $"{appName}Application"; + var dbSource = Model.GetDataSource(); + +} + +spring: + application: + name: @appName-service + + datasource: + url: + username: + password: + +mybatis: + mapper-locations: classpath:/mappers/*.xml + type-aliases-package: @(project.Module).server.entity + configuration: + map-underscore-to-camel-case: true \ No newline at end of file diff --git a/src/SmartCode.Generator/RazorTemplates/Java/Resources/Maps/Mapper.cshtml b/src/SmartCode.Generator/RazorTemplates/Java/Resources/Maps/Mapper.cshtml deleted file mode 100644 index 3c82ddb..0000000 --- a/src/SmartCode.Generator/RazorTemplates/Java/Resources/Maps/Mapper.cshtml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/src/SmartCode.Generator/RazorTemplates/Java/Service.cshtml b/src/SmartCode.Generator/RazorTemplates/Java/Service.cshtml index e69de29..5ec4339 100644 --- a/src/SmartCode.Generator/RazorTemplates/Java/Service.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/Java/Service.cshtml @@ -0,0 +1,42 @@ +@using SmartCode +@model BuildContext +@{ + Layout = "_JavaLayout.cshtml"; + var project = Model.Project; + var buildTask = Model.Build; + var table = Model.GetCurrentTable(); + var pkCol = table.PKColumn; + if (pkCol == null) + { + throw new SmartCodeException($"Service Template can not find PKColumn,Table:{table.Name}."); + } + var pkType = pkCol.LanguageType; + var insertRetType = table.AutoIncrement ? pkType : "int"; + var entityName = table.ConvertedName; + var entityCamelName = NamingUtil.CamelCase(table.ConvertedName); + var serviceName = $"{table.ConvertedName}Service"; + var repositoryName = $"{table.ConvertedName}Repository"; + var repositoryCamelName = NamingUtil.CamelCase(repositoryName); +} + + + +package @(project.Module).@buildTask.Module; + +import lombok.var; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import javax.validation.Valid; +import java.util.Date; +import java.util.stream.Collectors; +import @(project.Module).repository.@repositoryName; + + +@Html.NewLine() +@@Service +public class @serviceName { +@@Autowired +@repositoryName @repositoryCamelName; + +} \ No newline at end of file diff --git a/src/SmartCode.Generator/RazorTemplates/Java/Test/Application-Test.cshtml b/src/SmartCode.Generator/RazorTemplates/Java/Test/Application-Test.cshtml index 966a9f4..e98f876 100644 --- a/src/SmartCode.Generator/RazorTemplates/Java/Test/Application-Test.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/Java/Test/Application-Test.cshtml @@ -1,4 +1,19 @@ -package me.ahoo.demo; +@using SmartCode +@model BuildContext +@{ + Layout = "../_JavaLayout.cshtml"; + var project = Model.Project; + + var appName = "Demo"; + + if (project.Parameters.TryGetValue("ApplicationName", out var _appName)) + { + appName = _appName.ToString(); + } + var appClassTestsName = $"{appName}ApplicationTests"; +} + +package @(project.Module); import org.junit.Test; import org.junit.runner.RunWith; @@ -7,7 +22,7 @@ import org.springframework.test.context.junit4.SpringRunner; @@RunWith(SpringRunner.class) @@SpringBootTest -public class ApiApplicationTests { +public class @appClassTestsName { @@Test public void contextLoads() { diff --git a/src/SmartCode/SmartCode.csproj b/src/SmartCode/SmartCode.csproj index cf20303..3b249c1 100644 --- a/src/SmartCode/SmartCode.csproj +++ b/src/SmartCode/SmartCode.csproj @@ -9,7 +9,7 @@ - + From 7e5b52367385edd151df3a393a6ea77ea05775a7 Mon Sep 17 00:00:00 2001 From: Ahoo Wang Date: Mon, 21 Oct 2019 15:24:09 +0800 Subject: [PATCH 085/127] remove EnableSwagger2 to AppConfig --- build/version.props | 2 +- src/SmartCode.Generator/RazorTemplates/Java/AppConfig.cshtml | 3 +++ src/SmartCode.Generator/RazorTemplates/Java/Application.cshtml | 3 +-- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/build/version.props b/build/version.props index 8cd479c..1152786 100644 --- a/build/version.props +++ b/build/version.props @@ -2,7 +2,7 @@ 2 2 - 80 + 81 $(VersionMajor).$(VersionMinor).$(VersionPatch) diff --git a/src/SmartCode.Generator/RazorTemplates/Java/AppConfig.cshtml b/src/SmartCode.Generator/RazorTemplates/Java/AppConfig.cshtml index 01cac18..c74aa72 100644 --- a/src/SmartCode.Generator/RazorTemplates/Java/AppConfig.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/Java/AppConfig.cshtml @@ -8,7 +8,10 @@ package @(project.Module).config; +import springfox.documentation.swagger2.annotations.EnableSwagger2; +@@Configuration +@@EnableSwagger2 public class AppConfig { } \ No newline at end of file diff --git a/src/SmartCode.Generator/RazorTemplates/Java/Application.cshtml b/src/SmartCode.Generator/RazorTemplates/Java/Application.cshtml index 00a1a83..77fb0b1 100644 --- a/src/SmartCode.Generator/RazorTemplates/Java/Application.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/Java/Application.cshtml @@ -17,10 +17,9 @@ package @(project.Module); import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import springfox.documentation.swagger2.annotations.EnableSwagger2; + @@SpringBootApplication -@@EnableSwagger2 public class @appClassName { public static void main(String[] args) { From 3b3c7137582c3efe539a07abf23110aca16dda94 Mon Sep 17 00:00:00 2001 From: Ahoo Wang Date: Mon, 21 Oct 2019 23:54:50 +0800 Subject: [PATCH 086/127] Optimize table field sorting --- build/version.props | 2 +- src/SmartCode.Generator/Maps/Database-MySql.xml | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/build/version.props b/build/version.props index 1152786..d588701 100644 --- a/build/version.props +++ b/build/version.props @@ -2,7 +2,7 @@ 2 2 - 81 + 82 $(VersionMajor).$(VersionMinor).$(VersionPatch) diff --git a/src/SmartCode.Generator/Maps/Database-MySql.xml b/src/SmartCode.Generator/Maps/Database-MySql.xml index 2e6db05..475823d 100644 --- a/src/SmartCode.Generator/Maps/Database-MySql.xml +++ b/src/SmartCode.Generator/Maps/Database-MySql.xml @@ -24,7 +24,8 @@ Col.Column_Comment AS `Description` FROM Information_Schema.COLUMNS AS Col - Where Table_Schema=?DbName and Table_Name=?TableName; + Where Table_Schema=?DbName and Table_Name=?TableName + Order By Col.ORDINAL_POSITION asc; From bf36ec69d73b68885a8aefdeb53a78664a7103a0 Mon Sep 17 00:00:00 2001 From: Ahoo Wang Date: Tue, 22 Oct 2019 11:33:38 +0800 Subject: [PATCH 087/127] optimize JAVA-template --- build/version.props | 2 +- doc/SmartCode-Spring-Boot.yml | 18 +++++++++--------- .../RazorTemplates/Java/AppConfig.cshtml | 4 +++- .../RazorTemplates/Java/Application.cshtml | 2 +- .../RazorTemplates/Java/Controller.cshtml | 8 +++++--- .../RazorTemplates/Java/Repository.cshtml | 7 ++++++- .../Java/Resources/Application-YAML.cshtml | 7 +++++-- .../RazorTemplates/Java/Service.cshtml | 6 +++++- .../SqlMap-Partials/SqlMap-ResultMaps.cshtml | 6 +++--- .../Java/Test/Application-Test.cshtml | 2 +- 10 files changed, 39 insertions(+), 23 deletions(-) diff --git a/build/version.props b/build/version.props index d588701..bd8b4b8 100644 --- a/build/version.props +++ b/build/version.props @@ -2,7 +2,7 @@ 2 2 - 82 + 83 $(VersionMajor).$(VersionMinor).$(VersionPatch) diff --git a/doc/SmartCode-Spring-Boot.yml b/doc/SmartCode-Spring-Boot.yml index 6da1cdc..d559dbb 100644 --- a/doc/SmartCode-Spring-Boot.yml +++ b/doc/SmartCode-Spring-Boot.yml @@ -5,7 +5,7 @@ DataSource: Parameters: DbName: smartsql_db DbProvider: MySql - ConnectionString: Data Source=serverAddress;database=smartsql_db;uid=root;pwd=smartsql;Charset=utf8;SslMode=none + ConnectionString: Data Source=serverAddress;database=smartsql_db;uid=root;pwd=smartsql.net;Charset=utf8;SslMode=none Language: Java TemplateEngine: Name: Razor @@ -77,7 +77,7 @@ Build: {Key: 'Resources/Application-YAML.cshtml',Output: {Path: "server/src/main/resources",Name: 'application',Extension: '.yml'}}, {Key: 'Application.cshtml',Output: { - Path: "server/src/main/java/{{Project.Module}}/", + Path: "server/src/main/java/{{Project.Module}}/server/", DotSplit: true, Name: '{{Project.Parameters.ApplicationName}}Application', Extension: '.java' @@ -85,7 +85,7 @@ Build: }, {Key: 'Test/Application-Test.cshtml',Output: { - Path: "server/src/test/java/{{Project.Module}}/", + Path: "server/src/test/java/{{Project.Module}}/server/", DotSplit: true, Name: '{{Project.Parameters.ApplicationName}}ApplicationTests', Extension: '.java' @@ -93,7 +93,7 @@ Build: }, {Key: 'AppConfig.cshtml',Output: { - Path: "server/src/main/java/{{Project.Module}}/config", + Path: "server/src/main/java/{{Project.Module}}/server/config", DotSplit: true, Name: 'AppConfig', Extension: '.java' @@ -103,7 +103,7 @@ Build: Entity: Type: Table - Module: entity + Module: server.entity TemplateEngine: Path: Entity.cshtml Output: @@ -123,7 +123,7 @@ Build: SqlMap: Type: Table - Module: repository + Module: server.repository TemplateEngine: Path: SqlMap.cshtml Output: @@ -136,7 +136,7 @@ Build: Repository: Type: Table - Module: repository + Module: server.repository TemplateEngine: Path: Repository.cshtml Output: @@ -150,7 +150,7 @@ Build: Service: Type: Table - Module: service + Module: server.service TemplateEngine: Path: Service.cshtml Output: @@ -161,7 +161,7 @@ Build: Controller: Type: Table - Module: controller + Module: server.controller TemplateEngine: Path: Controller.cshtml Output: diff --git a/src/SmartCode.Generator/RazorTemplates/Java/AppConfig.cshtml b/src/SmartCode.Generator/RazorTemplates/Java/AppConfig.cshtml index c74aa72..6fa690f 100644 --- a/src/SmartCode.Generator/RazorTemplates/Java/AppConfig.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/Java/AppConfig.cshtml @@ -7,7 +7,9 @@ } -package @(project.Module).config; +package @(project.Module).server.config; + +import org.springframework.context.annotation.Configuration; import springfox.documentation.swagger2.annotations.EnableSwagger2; @@Configuration diff --git a/src/SmartCode.Generator/RazorTemplates/Java/Application.cshtml b/src/SmartCode.Generator/RazorTemplates/Java/Application.cshtml index 77fb0b1..3a8a599 100644 --- a/src/SmartCode.Generator/RazorTemplates/Java/Application.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/Java/Application.cshtml @@ -13,7 +13,7 @@ var appClassName = $"{appName}Application"; } -package @(project.Module); +package @(project.Module).server; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; diff --git a/src/SmartCode.Generator/RazorTemplates/Java/Controller.cshtml b/src/SmartCode.Generator/RazorTemplates/Java/Controller.cshtml index 200c4b6..79f54a0 100644 --- a/src/SmartCode.Generator/RazorTemplates/Java/Controller.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/Java/Controller.cshtml @@ -17,10 +17,12 @@ var serviceName = $"{table.ConvertedName}Service"; var serviceCamelName = NamingUtil.CamelCase(serviceName); var controllerName = $"{table.ConvertedName}Controller"; + if (!project.BuildTasks.TryGetValue("Service", out var serviceBuild)) + { + throw new ArgumentException("can not find Project -> BuildTasks -> Service ."); + } } - - package @(project.Module).@buildTask.Module; import lombok.var; @@ -29,7 +31,7 @@ import org.springframework.beans.factory.annotation.Autowired; import javax.validation.Valid; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; -import @(project.Module).service.@serviceName; +import @(project.Module).@(serviceBuild.Module).@serviceName; @Html.NewLine() @@RestController diff --git a/src/SmartCode.Generator/RazorTemplates/Java/Repository.cshtml b/src/SmartCode.Generator/RazorTemplates/Java/Repository.cshtml index 8188c45..e7fbefd 100644 --- a/src/SmartCode.Generator/RazorTemplates/Java/Repository.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/Java/Repository.cshtml @@ -37,6 +37,11 @@ } genericRepositoryPackageName = _genericRepositoryPackage.ToString(); } + + if (!project.BuildTasks.TryGetValue("Entity", out var entityBuild)) + { + throw new ArgumentException("can not find Project -> BuildTasks -> [Entity] ."); + } } package @(project.Module).@buildTask.Module; @@ -44,7 +49,7 @@ package @(project.Module).@buildTask.Module; import org.apache.ibatis.annotations.Mapper; import org.springframework.stereotype.Repository; import @(genericRepositoryPackageName).GenericRepository; -import @(project.Module).entity.@table.ConvertedName; +import @(project.Module).@(entityBuild.Module).@table.ConvertedName; @Html.NewLine() @@Repository diff --git a/src/SmartCode.Generator/RazorTemplates/Java/Resources/Application-YAML.cshtml b/src/SmartCode.Generator/RazorTemplates/Java/Resources/Application-YAML.cshtml index fe5dc25..3ce5f25 100644 --- a/src/SmartCode.Generator/RazorTemplates/Java/Resources/Application-YAML.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/Java/Resources/Application-YAML.cshtml @@ -11,7 +11,10 @@ } var appClassName = $"{appName}Application"; var dbSource = Model.GetDataSource(); - + if (!project.BuildTasks.TryGetValue("Entity", out var entityBuild)) + { + throw new ArgumentException("can not find Project -> BuildTasks -> [Entity] ."); + } } spring: @@ -25,6 +28,6 @@ spring: mybatis: mapper-locations: classpath:/mappers/*.xml - type-aliases-package: @(project.Module).server.entity + type-aliases-package: @(project.Module).@(entityBuild.Module) configuration: map-underscore-to-camel-case: true \ No newline at end of file diff --git a/src/SmartCode.Generator/RazorTemplates/Java/Service.cshtml b/src/SmartCode.Generator/RazorTemplates/Java/Service.cshtml index 5ec4339..876562a 100644 --- a/src/SmartCode.Generator/RazorTemplates/Java/Service.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/Java/Service.cshtml @@ -17,6 +17,10 @@ var serviceName = $"{table.ConvertedName}Service"; var repositoryName = $"{table.ConvertedName}Repository"; var repositoryCamelName = NamingUtil.CamelCase(repositoryName); + if (!project.BuildTasks.TryGetValue("Repository", out var repositoryBuild)) + { + throw new ArgumentException("can not find Project -> BuildTasks -> [Repository] ."); + } } @@ -30,7 +34,7 @@ import org.springframework.stereotype.Service; import javax.validation.Valid; import java.util.Date; import java.util.stream.Collectors; -import @(project.Module).repository.@repositoryName; +import @(project.Module).@(repositoryBuild.Module).@repositoryName; @Html.NewLine() diff --git a/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/SqlMap-ResultMaps.cshtml b/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/SqlMap-ResultMaps.cshtml index 30798d4..4ec5cd3 100644 --- a/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/SqlMap-ResultMaps.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/SqlMap-ResultMaps.cshtml @@ -16,12 +16,12 @@ throw new SmartCodeException($"{table.Name} can not find PKColumn!"); } - if (!buildTask.Parameters.TryGetValue("EntityModule", out var entityModule)) + if (!project.BuildTasks.TryGetValue("Entity", out var entityBuild)) { - entityModule = "entity"; + throw new ArgumentException("can not find Project -> BuildTasks -> [Entity] ."); } - var entityName = $"{project.Module}.{entityModule}.{table.ConvertedName}"; + var entityName = $"{project.Module}.{entityBuild.Module}.{table.ConvertedName}"; } diff --git a/src/SmartCode.Generator/RazorTemplates/Java/Test/Application-Test.cshtml b/src/SmartCode.Generator/RazorTemplates/Java/Test/Application-Test.cshtml index e98f876..b524926 100644 --- a/src/SmartCode.Generator/RazorTemplates/Java/Test/Application-Test.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/Java/Test/Application-Test.cshtml @@ -13,7 +13,7 @@ var appClassTestsName = $"{appName}ApplicationTests"; } -package @(project.Module); +package @(project.Module).server; import org.junit.Test; import org.junit.runner.RunWith; From 2f054ec092b3de6db475a6e20635020cf2e32fb6 Mon Sep 17 00:00:00 2001 From: Ahoo Wang Date: Tue, 22 Oct 2019 12:52:51 +0800 Subject: [PATCH 088/127] optimize Aoolication-YAML for java --- build/version.props | 2 +- .../RazorTemplates/Java/Pom-Server.cshtml | 28 +++++++++--- .../Java/Resources/Application-YAML.cshtml | 45 +++++++++++++++++-- 3 files changed, 66 insertions(+), 9 deletions(-) diff --git a/build/version.props b/build/version.props index bd8b4b8..cb06051 100644 --- a/build/version.props +++ b/build/version.props @@ -2,7 +2,7 @@ 2 2 - 83 + 84 $(VersionMajor).$(VersionMinor).$(VersionPatch) diff --git a/src/SmartCode.Generator/RazorTemplates/Java/Pom-Server.cshtml b/src/SmartCode.Generator/RazorTemplates/Java/Pom-Server.cshtml index 4571317..4d30c45 100644 --- a/src/SmartCode.Generator/RazorTemplates/Java/Pom-Server.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/Java/Pom-Server.cshtml @@ -1,9 +1,11 @@ @using SmartCode +@using SmartCode.Db @model BuildContext @{ Layout = null; var project = Model.Project; + var dbSource = Model.GetDataSource(); } @@ -40,11 +42,27 @@ mybatis-spring-boot-starter 2.1.1 - - mysql - mysql-connector-java - runtime - + @switch (dbSource.DbProvider.Name) + { + case SmartSql.DataSource.DbProvider.MYSQL: + { + + mysql + mysql-connector-java + runtime + + break; + } + case SmartSql.DataSource.DbProvider.POSTGRESQL: + { + + org.postgresql + postgresql + runtime + + break; + } + } org.projectlombok lombok diff --git a/src/SmartCode.Generator/RazorTemplates/Java/Resources/Application-YAML.cshtml b/src/SmartCode.Generator/RazorTemplates/Java/Resources/Application-YAML.cshtml index 3ce5f25..731e955 100644 --- a/src/SmartCode.Generator/RazorTemplates/Java/Resources/Application-YAML.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/Java/Resources/Application-YAML.cshtml @@ -1,3 +1,6 @@ +@using System.Text +@using MySql.Data.MySqlClient +@using Npgsql @using SmartCode @using SmartCode.Db @model BuildContext @@ -15,6 +18,42 @@ { throw new ArgumentException("can not find Project -> BuildTasks -> [Entity] ."); } + + var driveName = "mysql"; + var host = "localhost"; + uint port = 3306; + var userName = "root"; + var pwd = "root"; + var database = "smartsql_db"; + var appendUrl = new StringBuilder(); + + switch (dbSource.DbProvider.Name) + { + case SmartSql.DataSource.DbProvider.MYSQL: + { + driveName = "mysql"; + var builder= new MySqlConnectionStringBuilder(dbSource.WriteDataSource.ConnectionString); + host = builder.Server; + database= builder.Database; + userName= builder.UserID; + pwd = builder.Password; + port = builder.Port; + appendUrl.Append("?"); + appendUrl.Append("serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf-8"); + break; + } + case SmartSql.DataSource.DbProvider.POSTGRESQL: + { + driveName = "postgresql"; + var builder= new NpgsqlConnectionStringBuilder(dbSource.WriteDataSource.ConnectionString); + host = builder.Host; + database= builder.Database; + userName= builder.Username; + pwd = builder.Password; + port = (uint)builder.Port; + break; + } + } } spring: @@ -22,9 +61,9 @@ spring: name: @appName-service datasource: - url: - username: - password: + url: jdbc:@(driveName)://@host:@port/@database@appendUrl.ToString() + username: @userName + password: @pwd mybatis: mapper-locations: classpath:/mappers/*.xml From 56c1d9e57771f4dc54cab9ba044200468ca6464e Mon Sep 17 00:00:00 2001 From: Ahoo Wang Date: Tue, 22 Oct 2019 13:04:18 +0800 Subject: [PATCH 089/127] update version --- build/version.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/version.props b/build/version.props index cb06051..d742627 100644 --- a/build/version.props +++ b/build/version.props @@ -2,7 +2,7 @@ 2 2 - 84 + 85 $(VersionMajor).$(VersionMinor).$(VersionPatch) From ee8548058d778b37505724e17dade15be8d4edc0 Mon Sep 17 00:00:00 2001 From: Ahoo Wang Date: Wed, 23 Oct 2019 13:45:00 +0800 Subject: [PATCH 090/127] add longtext -> String to DbTypeMap --- build/version.props | 2 +- .../DbTypeConverter/DbTypeMap.xml | 1 + .../RazorTemplates/Java/AbstractEntity.cshtml | 53 +++++++++++++++++++ .../Java/GenericRepository.cshtml | 20 +++++++ 4 files changed, 75 insertions(+), 1 deletion(-) create mode 100644 src/SmartCode.Generator/RazorTemplates/Java/AbstractEntity.cshtml create mode 100644 src/SmartCode.Generator/RazorTemplates/Java/GenericRepository.cshtml diff --git a/build/version.props b/build/version.props index d742627..c907a2e 100644 --- a/build/version.props +++ b/build/version.props @@ -2,7 +2,7 @@ 2 2 - 85 + 86 $(VersionMajor).$(VersionMinor).$(VersionPatch) diff --git a/src/SmartCode.Generator/DbTypeConverter/DbTypeMap.xml b/src/SmartCode.Generator/DbTypeConverter/DbTypeMap.xml index d2b7ca0..c1be81b 100644 --- a/src/SmartCode.Generator/DbTypeConverter/DbTypeMap.xml +++ b/src/SmartCode.Generator/DbTypeConverter/DbTypeMap.xml @@ -386,6 +386,7 @@ + diff --git a/src/SmartCode.Generator/RazorTemplates/Java/AbstractEntity.cshtml b/src/SmartCode.Generator/RazorTemplates/Java/AbstractEntity.cshtml new file mode 100644 index 0000000..58d289e --- /dev/null +++ b/src/SmartCode.Generator/RazorTemplates/Java/AbstractEntity.cshtml @@ -0,0 +1,53 @@ +@using SmartCode +@model BuildContext +@{ + Layout = "_JavaLayout.cshtml"; + var project = Model.Project; +} + + +package @(project.Module).entity; + +import java.io.Serializable; +import java.util.Date; + +public abstract class AbstractEntity@("") implements Serializable { + private TKey id; + private Date createTime = new Date(); + private Date modifiedTime = new Date(); + private boolean deleted; + + @@Override + public TKey getId() { + return id; + } + + @@Override + public void setId(TKey id) { + this.id = id; + } + + public Date getCreateTime() { + return createTime; + } + + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + public Date getModifiedTime() { + return modifiedTime; + } + + public void setModifiedTime(Date modifiedTime) { + this.modifiedTime = modifiedTime; + } + + public void setDeleted(boolean deleted) { + this.deleted = deleted; + } + + public boolean isDeleted() { + return deleted; + } +} \ No newline at end of file diff --git a/src/SmartCode.Generator/RazorTemplates/Java/GenericRepository.cshtml b/src/SmartCode.Generator/RazorTemplates/Java/GenericRepository.cshtml new file mode 100644 index 0000000..609f174 --- /dev/null +++ b/src/SmartCode.Generator/RazorTemplates/Java/GenericRepository.cshtml @@ -0,0 +1,20 @@ +@using SmartCode +@using SmartCode.Db; +@using SmartCode.Generator.Extensions +@model BuildContext +@{ + Layout = "_JavaLayout.cshtml"; + var project = Model.Project; + var buildTask = Model.Build; + var table = Model.GetCurrentTable(); + var pkCol = table.PKColumn; + if (pkCol == null) + { + throw new SmartCodeException($"Repository Template can not find PKColumn,Table:{table.Name}."); + } + var primaryKeyType = pkCol.LanguageType ?? "int"; + var autoIncrement = table.AutoIncrement; + var dbSource = Model.GetDataSource(); + +} + From bf2c8c97a9aee7c45fad938e64490c8d128f9fc7 Mon Sep 17 00:00:00 2001 From: rocher Date: Fri, 25 Oct 2019 19:29:06 +0800 Subject: [PATCH 091/127] add support for pg --- .../Java/SqlMap-Partials/SqlMap-MySql.cshtml | 2 +- .../Java/SqlMap-Partials/SqlMap-PostgreSql.cshtml | 11 +++++++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/SqlMap-MySql.cshtml b/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/SqlMap-MySql.cshtml index 669c317..d1bf9d5 100644 --- a/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/SqlMap-MySql.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/SqlMap-MySql.cshtml @@ -21,6 +21,6 @@ } \ No newline at end of file diff --git a/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/SqlMap-PostgreSql.cshtml b/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/SqlMap-PostgreSql.cshtml index 743a5a5..44a34d2 100644 --- a/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/SqlMap-PostgreSql.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/SqlMap-PostgreSql.cshtml @@ -13,6 +13,13 @@ throw new SmartCodeException($"{table.Name} can not find PKColumn!"); } - + var resultMapName = $"{table.ConvertedName}ResultMap"; +} +@section QueryByPage +{ + } - From 39189dac982bcf4e65edab28c1322c3fa7a44c04 Mon Sep 17 00:00:00 2001 From: rocher Date: Mon, 28 Oct 2019 11:09:56 +0800 Subject: [PATCH 092/127] add support for pg&mssql Java templete --- .../SqlMap-Partials/SqlMap-PostgreSql.cshtml | 28 +++++++ .../SqlMap-Partials/SqlMap-SqlServer.cshtml | 80 +++++++++++++++++++ 2 files changed, 108 insertions(+) create mode 100644 src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/SqlMap-SqlServer.cshtml diff --git a/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/SqlMap-PostgreSql.cshtml b/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/SqlMap-PostgreSql.cshtml index 44a34d2..46d937f 100644 --- a/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/SqlMap-PostgreSql.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/SqlMap-PostgreSql.cshtml @@ -15,6 +15,7 @@ var resultMapName = $"{table.ConvertedName}ResultMap"; } + @section QueryByPage { + + } + + +@section GetEntity +{ + + +} + +@section Query +{ + + +} \ No newline at end of file diff --git a/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/SqlMap-SqlServer.cshtml b/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/SqlMap-SqlServer.cshtml new file mode 100644 index 0000000..edf1342 --- /dev/null +++ b/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/SqlMap-SqlServer.cshtml @@ -0,0 +1,80 @@ +@using SmartCode +@using SmartCode.Db +@using System.Text.RegularExpressions +@model BuildContext +@{ + Layout = "_SqlMapLayout.cshtml"; + var project = Model.Project; + var dbSource = Model.GetDataSource(); + var versionNo = 2008; + var sqlServerVersion = dbSource.DbRepository.SqlMapper.ExecuteScalar(new SmartSql.RequestContext + { + RealSql = "Select @@Version;" + }); + var versionRegex = new Regex(@"^Microsoft SQL Server (\d*)", RegexOptions.Singleline); + var versionNoStr = versionRegex.Match(sqlServerVersion).Groups[1].Value; + int.TryParse(versionNoStr, out versionNo); + var buildTask = Model.Build; + var table = Model.GetCurrentTable(); + var pkCol = table.PKColumn; + if (pkCol == null) + { + throw new SmartCodeException($"{table.Name} can not find PKColumn!"); + } + var primaryKeyType = pkCol?.LanguageType ?? "int"; + var autoIncrement = table.AutoIncrement; + var dbPrefix = dbSource.DbProvider.ParameterPrefix; + var notEqCols = table.Columns.Where(m => m.ConvertedName != m.Name); + var resultMapName = $"{table.ConvertedName}ResultMap"; + var queryStatementResultMap = table.HasColNameNotEqConvertedName ? $"ResultMap=\"{resultMapName}\"" : ""; +} + +@section QueryByPage +{ + + +} + +@section GetEntity +{ + + +} + +@section Query +{ + + +} \ No newline at end of file From 5bd6043fd858136051efa29bf3857d3673ddba61 Mon Sep 17 00:00:00 2001 From: Ahoo Wang Date: Wed, 30 Oct 2019 11:11:34 +0800 Subject: [PATCH 093/127] optimize SmartCode-Spring-Boot template update SmartSql version --- build/version.props | 2 +- doc/SmartCode-Spring-Boot.yml | 8 ++--- doc/SmartCode.yml | 12 ++++---- src/SmartCode.Db/SmartCode.Db.csproj | 6 ++-- src/SmartCode.ETL/SmartCode.ETL.csproj | 6 ++-- .../RazorTemplates/CSharp/Repository.cshtml | 12 ++++---- .../CURD/SqlMap-QueryByPage.cshtml | 29 +++++++++---------- .../RazorTemplates/CSharp/SqlMapConfig.cshtml | 2 +- .../RazorTemplates/Java/Pom-Api.cshtml | 11 ++----- .../RazorTemplates/Java/Repository.cshtml | 3 +- .../CURD/SqlMap-QueryByPage.cshtml | 13 ++++----- .../Java/SqlMap-Partials/SqlMap-MySql.cshtml | 4 +-- .../SqlMap-Partials/SqlMap-PostgreSql.cshtml | 29 +------------------ 13 files changed, 50 insertions(+), 87 deletions(-) diff --git a/build/version.props b/build/version.props index c907a2e..a244803 100644 --- a/build/version.props +++ b/build/version.props @@ -2,7 +2,7 @@ 2 2 - 86 + 88 $(VersionMajor).$(VersionMinor).$(VersionPatch) diff --git a/doc/SmartCode-Spring-Boot.yml b/doc/SmartCode-Spring-Boot.yml index d559dbb..73c2b52 100644 --- a/doc/SmartCode-Spring-Boot.yml +++ b/doc/SmartCode-Spring-Boot.yml @@ -49,10 +49,10 @@ TableFilter: # 构建任务 Build: - ClearDir: - Type: Clear - Parameters: - Dirs: '.' +# ClearDir: +# Type: Clear +# Parameters: +# Dirs: '.' MakeBuildDir: Type: Process diff --git a/doc/SmartCode.yml b/doc/SmartCode.yml index cad167a..3a6278c 100644 --- a/doc/SmartCode.yml +++ b/doc/SmartCode.yml @@ -14,8 +14,8 @@ Output: Type: File Path: 'D:\SmartSql-Starter' Parameters: - SmartSqlVersion: '4.1.32' - SmartSqlSchemaVersion: '4.1.29' + SmartSqlVersion: '4.1.38' + SmartSqlSchemaVersion: '4.1.30' BuildDir: 'D:\SmartSql-Starter\build' DockerImage: 'smartsql.starter' @@ -52,10 +52,10 @@ TableFilter: # 构建任务 Build: - ClearDir: - Type: Clear - Parameters: - Dirs: '.' +# ClearDir: +# Type: Clear +# Parameters: +# Dirs: '.' MakeBuildDir: Type: Process diff --git a/src/SmartCode.Db/SmartCode.Db.csproj b/src/SmartCode.Db/SmartCode.Db.csproj index 71cdb27..ea74d97 100644 --- a/src/SmartCode.Db/SmartCode.Db.csproj +++ b/src/SmartCode.Db/SmartCode.Db.csproj @@ -5,9 +5,9 @@ - - - + + + diff --git a/src/SmartCode.ETL/SmartCode.ETL.csproj b/src/SmartCode.ETL/SmartCode.ETL.csproj index 2204254..a75aeed 100644 --- a/src/SmartCode.ETL/SmartCode.ETL.csproj +++ b/src/SmartCode.ETL/SmartCode.ETL.csproj @@ -5,9 +5,9 @@ - - - + + + diff --git a/src/SmartCode.Generator/RazorTemplates/CSharp/Repository.cshtml b/src/SmartCode.Generator/RazorTemplates/CSharp/Repository.cshtml index 7312c8b..05a5d26 100644 --- a/src/SmartCode.Generator/RazorTemplates/CSharp/Repository.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/CSharp/Repository.cshtml @@ -16,7 +16,8 @@ var autoIncrement = table.AutoIncrement; var dbSource = Model.GetDataSource(); - var PKNameEQId = pkCol.ConvertedName == "Id"; + var pkNameEqId = pkCol.ConvertedName == "Id"; + var genericParameterKey = $"{table.ConvertedName},{primaryKeyType}"; } using System; @@ -31,11 +32,10 @@ using @(project.Module).Entity; namespace @(project.Module).@buildTask.Module { @table.GetCSharpSummary() -public interface I@(table.ConvertedName)Repository : IRepository<@(table.ConvertedName), @(primaryKeyType)> - ,IRepositoryAsync<@(table.ConvertedName), @(primaryKeyType)> +public interface I@(table.ConvertedName)Repository : IRepository<@genericParameterKey> + ,IRepositoryAsync<@genericParameterKey> { - @if (dbSource.DbRepository.DbProvider == DbProvider.PostgreSql -&& autoIncrement) + @if (dbSource.DbRepository.DbProvider == DbProvider.PostgreSql && autoIncrement) { [Statement(Execute = ExecuteBehavior.QuerySingle)] @Html.NewLine() @@ -56,7 +56,7 @@ public interface I@(table.ConvertedName)Repository : IRepository<@(table.Convert @Html.NewLine() } - @if (!PKNameEQId) + @if (!pkNameEqId) { [Statement(Id = "GetEntity")] @Html.NewLine() diff --git a/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/CURD/SqlMap-QueryByPage.cshtml b/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/CURD/SqlMap-QueryByPage.cshtml index 15405e4..680b0a7 100644 --- a/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/CURD/SqlMap-QueryByPage.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/CURD/SqlMap-QueryByPage.cshtml @@ -18,19 +18,16 @@ var queryStatementResultMap = table.HasColNameNotEqConvertedName ? $"ResultMap=\"{resultMapName}\"" : ""; } -@section QueryByPage - { - - - Select - - From @table.Name As T - - - - T.@pkCol.Name Desc - - - Limit @(dbPrefix)PageSize Offset @(dbPrefix)Offset - -} \ No newline at end of file + + + Select + + From @table.Name As T + + + + T.@pkCol.Name Desc + + + Limit @(dbPrefix)PageSize Offset @(dbPrefix)Offset + \ No newline at end of file diff --git a/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMapConfig.cshtml b/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMapConfig.cshtml index 1a0a63f..07cac71 100644 --- a/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMapConfig.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMapConfig.cshtml @@ -68,6 +68,6 @@ - + \ No newline at end of file diff --git a/src/SmartCode.Generator/RazorTemplates/Java/Pom-Api.cshtml b/src/SmartCode.Generator/RazorTemplates/Java/Pom-Api.cshtml index 3839852..9f08672 100644 --- a/src/SmartCode.Generator/RazorTemplates/Java/Pom-Api.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/Java/Pom-Api.cshtml @@ -11,14 +11,9 @@ - - @project.Module - parent - 0.0.1-SNAPSHOT - 4.0.0 - api + @project.Module api - - + 0.0.1-SNAPSHOT + api \ No newline at end of file diff --git a/src/SmartCode.Generator/RazorTemplates/Java/Repository.cshtml b/src/SmartCode.Generator/RazorTemplates/Java/Repository.cshtml index e7fbefd..b937e8e 100644 --- a/src/SmartCode.Generator/RazorTemplates/Java/Repository.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/Java/Repository.cshtml @@ -42,6 +42,7 @@ { throw new ArgumentException("can not find Project -> BuildTasks -> [Entity] ."); } + var genericParameterKey = $"{table.ConvertedName},{primaryKeyType}"; } package @(project.Module).@buildTask.Module; @@ -54,6 +55,6 @@ import @(project.Module).@(entityBuild.Module).@table.ConvertedName; @Html.NewLine() @@Repository @@Mapper -public interface @(table.ConvertedName)Repository extends GenericRepository<@(table.ConvertedName), @(primaryKeyType)> { +public interface @(table.ConvertedName)Repository extends GenericRepository<@genericParameterKey> { } \ No newline at end of file diff --git a/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/CURD/SqlMap-QueryByPage.cshtml b/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/CURD/SqlMap-QueryByPage.cshtml index d7f51e8..604459c 100644 --- a/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/CURD/SqlMap-QueryByPage.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/CURD/SqlMap-QueryByPage.cshtml @@ -13,11 +13,8 @@ var resultMapName = $"{table.ConvertedName}ResultMap"; } -@section QueryByPage -{ - -} \ No newline at end of file + \ No newline at end of file diff --git a/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/SqlMap-MySql.cshtml b/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/SqlMap-MySql.cshtml index d1bf9d5..ad59284 100644 --- a/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/SqlMap-MySql.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/SqlMap-MySql.cshtml @@ -12,7 +12,7 @@ { throw new SmartCodeException($"{table.Name} can not find PKColumn!"); } - + var resultMapName = $"{table.ConvertedName}ResultMap"; } @@ -21,6 +21,6 @@ } \ No newline at end of file diff --git a/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/SqlMap-PostgreSql.cshtml b/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/SqlMap-PostgreSql.cshtml index 46d937f..5f53444 100644 --- a/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/SqlMap-PostgreSql.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/SqlMap-PostgreSql.cshtml @@ -21,33 +21,6 @@ - - -} - - -@section GetEntity -{ - - -} - -@section Query -{ - - } \ No newline at end of file From 54007e5e70a35450f40d1e0dc91ce4297b32b44f Mon Sep 17 00:00:00 2001 From: Ahoo Wang Date: Tue, 12 Nov 2019 23:56:22 +0800 Subject: [PATCH 094/127] - optimize Spring-Boot-Template - update SmartSql version --- build/version.props | 2 +- doc/SmartCode.yml | 2 +- src/SmartCode.CLI/SmartCode.CLI.csproj | 2 +- src/SmartCode.Db/SmartCode.Db.csproj | 8 +++---- .../SmartCode.ETL.SQLite.csproj | 2 +- src/SmartCode.ETL/SmartCode.ETL.csproj | 6 ++--- .../DbTypeConverter/DbTypeMap.xml | 21 +++++++++++++++++ .../SqlMap-Partials/SqlMap-ResultMaps.cshtml | 23 ++++++++++++++++--- 8 files changed, 52 insertions(+), 14 deletions(-) diff --git a/build/version.props b/build/version.props index a244803..75c32ef 100644 --- a/build/version.props +++ b/build/version.props @@ -2,7 +2,7 @@ 2 2 - 88 + 90 $(VersionMajor).$(VersionMinor).$(VersionPatch) diff --git a/doc/SmartCode.yml b/doc/SmartCode.yml index 3a6278c..418c321 100644 --- a/doc/SmartCode.yml +++ b/doc/SmartCode.yml @@ -14,7 +14,7 @@ Output: Type: File Path: 'D:\SmartSql-Starter' Parameters: - SmartSqlVersion: '4.1.38' + SmartSqlVersion: '4.1.41' SmartSqlSchemaVersion: '4.1.30' BuildDir: 'D:\SmartSql-Starter\build' DockerImage: 'smartsql.starter' diff --git a/src/SmartCode.CLI/SmartCode.CLI.csproj b/src/SmartCode.CLI/SmartCode.CLI.csproj index 525ad43..0bad988 100644 --- a/src/SmartCode.CLI/SmartCode.CLI.csproj +++ b/src/SmartCode.CLI/SmartCode.CLI.csproj @@ -14,7 +14,7 @@ - + diff --git a/src/SmartCode.Db/SmartCode.Db.csproj b/src/SmartCode.Db/SmartCode.Db.csproj index ea74d97..9f673b9 100644 --- a/src/SmartCode.Db/SmartCode.Db.csproj +++ b/src/SmartCode.Db/SmartCode.Db.csproj @@ -5,11 +5,11 @@ - - - + + + - + diff --git a/src/SmartCode.ETL.SQLite/SmartCode.ETL.SQLite.csproj b/src/SmartCode.ETL.SQLite/SmartCode.ETL.SQLite.csproj index 6f0dee2..43d8d41 100644 --- a/src/SmartCode.ETL.SQLite/SmartCode.ETL.SQLite.csproj +++ b/src/SmartCode.ETL.SQLite/SmartCode.ETL.SQLite.csproj @@ -5,7 +5,7 @@ - + diff --git a/src/SmartCode.ETL/SmartCode.ETL.csproj b/src/SmartCode.ETL/SmartCode.ETL.csproj index a75aeed..3a2a99c 100644 --- a/src/SmartCode.ETL/SmartCode.ETL.csproj +++ b/src/SmartCode.ETL/SmartCode.ETL.csproj @@ -5,9 +5,9 @@ - - - + + + diff --git a/src/SmartCode.Generator/DbTypeConverter/DbTypeMap.xml b/src/SmartCode.Generator/DbTypeConverter/DbTypeMap.xml index c1be81b..043423d 100644 --- a/src/SmartCode.Generator/DbTypeConverter/DbTypeMap.xml +++ b/src/SmartCode.Generator/DbTypeConverter/DbTypeMap.xml @@ -535,6 +535,27 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/SqlMap-ResultMaps.cshtml b/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/SqlMap-ResultMaps.cshtml index 4ec5cd3..6530d77 100644 --- a/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/SqlMap-ResultMaps.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/SqlMap-ResultMaps.cshtml @@ -1,6 +1,8 @@ @using SmartCode @using SmartCode.Db +@using SmartCode.Generator @model BuildContext + @{ var project = Model.Project; var dbSource = Model.GetDataSource(); @@ -15,23 +17,38 @@ { throw new SmartCodeException($"{table.Name} can not find PKColumn!"); } - + if (!project.BuildTasks.TryGetValue("Entity", out var entityBuild)) { throw new ArgumentException("can not find Project -> BuildTasks -> [Entity] ."); } var entityName = $"{project.Module}.{entityBuild.Module}.{table.ConvertedName}"; + IDbTypeConverter dbTypeConverter = Model.PluginManager.Resolve(); +} + +@functions +{ + + String GetJdbcType(IDbTypeConverter dbTypeConverter, DbSource dbSource, String dbType) + { + var dbProvider = dbSource.DbRepository.DbProvider; + var jdbcType = dbTypeConverter.LanguageType(dbProvider, "Jdbc", dbType); + return String.IsNullOrEmpty(jdbcType) ? "" : $" jdbcType=\"{jdbcType}\""; + } + } + - + @foreach (var col in table.Columns) { if (col.IsPrimaryKey) { continue; } - + + } \ No newline at end of file From 006f767331649a3684748a1627cf059ac38a1217 Mon Sep 17 00:00:00 2001 From: Ahoo Wang Date: Mon, 18 Nov 2019 23:19:54 +0800 Subject: [PATCH 095/127] update version --- build/version.props | 2 +- doc/SmartCode.yml | 2 +- src/SmartCode.Db/SmartCode.Db.csproj | 8 ++++---- src/SmartCode.ETL/SmartCode.ETL.csproj | 6 +++--- src/SmartCode/SmartCode.csproj | 2 +- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/build/version.props b/build/version.props index 75c32ef..aff9ab8 100644 --- a/build/version.props +++ b/build/version.props @@ -2,7 +2,7 @@ 2 2 - 90 + 92 $(VersionMajor).$(VersionMinor).$(VersionPatch) diff --git a/doc/SmartCode.yml b/doc/SmartCode.yml index 418c321..6cd9397 100644 --- a/doc/SmartCode.yml +++ b/doc/SmartCode.yml @@ -14,7 +14,7 @@ Output: Type: File Path: 'D:\SmartSql-Starter' Parameters: - SmartSqlVersion: '4.1.41' + SmartSqlVersion: '4.1.42' SmartSqlSchemaVersion: '4.1.30' BuildDir: 'D:\SmartSql-Starter\build' DockerImage: 'smartsql.starter' diff --git a/src/SmartCode.Db/SmartCode.Db.csproj b/src/SmartCode.Db/SmartCode.Db.csproj index 9f673b9..fb3baa3 100644 --- a/src/SmartCode.Db/SmartCode.Db.csproj +++ b/src/SmartCode.Db/SmartCode.Db.csproj @@ -5,13 +5,13 @@ - - - + + + - + diff --git a/src/SmartCode.ETL/SmartCode.ETL.csproj b/src/SmartCode.ETL/SmartCode.ETL.csproj index 3a2a99c..92a8e5f 100644 --- a/src/SmartCode.ETL/SmartCode.ETL.csproj +++ b/src/SmartCode.ETL/SmartCode.ETL.csproj @@ -5,9 +5,9 @@ - - - + + + diff --git a/src/SmartCode/SmartCode.csproj b/src/SmartCode/SmartCode.csproj index 3b249c1..e4b6c1b 100644 --- a/src/SmartCode/SmartCode.csproj +++ b/src/SmartCode/SmartCode.csproj @@ -8,7 +8,7 @@ - + From 014096b5584e31efb88ccd3a09338048d330bce4 Mon Sep 17 00:00:00 2001 From: Ahoo Wang Date: Thu, 28 Nov 2019 18:22:37 +0800 Subject: [PATCH 096/127] add code-of-conduct --- code-of-conduct.md | 45 +++++++++++++++++++++++++++++++++++ code-of-conduct.zh-CN.md | 51 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 96 insertions(+) create mode 100644 code-of-conduct.md create mode 100644 code-of-conduct.zh-CN.md diff --git a/code-of-conduct.md b/code-of-conduct.md new file mode 100644 index 0000000..c299d64 --- /dev/null +++ b/code-of-conduct.md @@ -0,0 +1,45 @@ +# MEMBER CODE OF CONDUCT + +The .NET Core Community (NCC) was created to doster an open, innovative, inclusive and welcoming community around open source .NET/.NET Core. To clarify expected behaviour in our communities we have adopted the [Contributor Covenant](contributor-covenant.org). This code of conduct has been adopted by [many other open source communities](contributor-covenant.org/adopters) and we feel it expresses our values well. + +### Our Pledge + +In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to make participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, religion, or sexual identity and orientation. + +### Our Standards + +Examples of behavior that contributes to creating a positive environment include: + +- Using welcoming and inclusive language +- Being respectful of differing viewpoints and experiences +- Gracefully accepting constructive criticism +- Focusing on what is best for the community +- Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +- The use of sexualized language or imagery and unwelcome sexual attention or advances +- Trolling, insulting/derogatory comments, and personal or political attacks +- Public or private harassment +- Publishing others’ private information, such as a physical or electronic address, without explicit permission +- Other conduct which could reasonably be considered inappropriate in a professional setting + +### Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. + +### Scope + +This Code of Conduct applies within all project spaces, and it also applies when an individual is representing the project or its community in public spaces. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. + +### Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at [dotnet-community@outlook.com](dotnet-community@outlook.com). All complaints will be reviewed and investigated and will result in a response that is deemed necessary and appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project’s leadership. + +### Attribution + +This Code of Conduct is adapted from the Contributor Covenant, version 1.4, available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html diff --git a/code-of-conduct.zh-CN.md b/code-of-conduct.zh-CN.md new file mode 100644 index 0000000..2cdfc4a --- /dev/null +++ b/code-of-conduct.zh-CN.md @@ -0,0 +1,51 @@ +# 组织成员行为准则 + +.NET Core Community (NCC) 旨在建立一个围绕开源 .NET/.NET Core 的开放、创新、包容和热情的社区。为向大家表明我们社区的预期行动,我们编写了贡献者公约。许多其他开源社区已采用此行为准则,我们认为它很好地表达了我们的价值观。 + +### 我们的承诺 + +为建设开放友好的环境,我们贡献者和维护者承诺:不论年龄、体型、身体健全与否、民族、性征、性别认同与表征、经验水平、教育程度、社会地位、国籍、相貌、种族、信仰、性取向,我们项目和社区的参与者皆免于骚扰。 + +### 我们的准则 + +有助于创造积极环境的行为包括但不限于: + +- 措辞友好且包容 +- 尊重不同的观点和经验 +- 耐心接受有益批评 +- 关注对社区最有利的事情 +- 与社区其他成员友善相处 + +参与者不应采取的行为包括但不限于: + +- 发布与性有关的言论或图像、不受欢迎地献殷勤 +- 捣乱/煽动/造谣行为、侮辱/贬损的评论、人身及政治攻击 +- 公开或私下骚扰 +- 未经明确授权便发布他人的资料,如住址、电子邮箱等 +- 其他有理由认定为违反职业操守的不当行为 + +### 我们的义务 + +项目维护者有义务诠释何谓“妥当行为”,并妥善公正地纠正已发生的不当行为。 + +项目维护者有权利和义务去删除、编辑、拒绝违背本行为标准的评论(comments)、提交(commits)、代码、wiki 编辑、问题(issues)等贡献;项目维护者可暂时或永久地封禁任何他们认为行为不当、威胁、冒犯、有害的参与者。 + +### 适用范围 + +本行为标准适用于本项目。当有人代表本项目或本社区时,本标准亦适用于此人所处的公共平台。 + +代表本项目或本社区的情形包括但不限于:使用项目的官方电子邮件、通过官方媒体账号发布消息、作为指定代表参与在线或线下活动等。 + +代表本项目的行为可由项目维护者进一步定义及解释。 + +### 贯彻落实 + +可以致信 [dotnet-community@outlook.com](dotnet-community@outlook.com),向项目团队举报滥用、骚扰及不当行为。 + +维护团队将审议并调查全部投诉,妥善地予以必要的回应。项目团队有义务保密举报者信息。具体执行方针或将另行发布。 + +未切实遵守或执行本行为标准的项目维护人员,经项目负责人或其他成员决议,可能被暂时或永久地剥夺参与本项目的资格。 + +### 来源 + +本行为标准改编自参与者公约,版本 1.4 可在此查阅:https://www.contributor-covenant.org/zh-cn/version/1/4/code-of-conduct.html From 18dab8bceb8bf6985605a62530216854562e271b Mon Sep 17 00:00:00 2001 From: Ahoo Wang Date: Fri, 14 Feb 2020 13:35:38 +0800 Subject: [PATCH 097/127] fix Java-MyBatis:SqlMap-ResultMaps --- build/version.props | 2 +- .../Java/SqlMap-Partials/SqlMap-ResultMaps.cshtml | 15 ++++++++++----- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/build/version.props b/build/version.props index aff9ab8..b33737d 100644 --- a/build/version.props +++ b/build/version.props @@ -2,7 +2,7 @@ 2 2 - 92 + 93 $(VersionMajor).$(VersionMinor).$(VersionPatch) diff --git a/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/SqlMap-ResultMaps.cshtml b/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/SqlMap-ResultMaps.cshtml index 6530d77..aa975bb 100644 --- a/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/SqlMap-ResultMaps.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/SqlMap-ResultMaps.cshtml @@ -1,6 +1,7 @@ @using SmartCode @using SmartCode.Db @using SmartCode.Generator +@using SmartCode.Generator.Entity @model BuildContext @{ @@ -30,25 +31,29 @@ @functions { - String GetJdbcType(IDbTypeConverter dbTypeConverter, DbSource dbSource, String dbType) + String GetJdbcType(IDbTypeConverter dbTypeConverter, DbSource dbSource, Column column) { + var dbType = column.DbType; var dbProvider = dbSource.DbRepository.DbProvider; var jdbcType = dbTypeConverter.LanguageType(dbProvider, "Jdbc", dbType); + if (dbType.Equals("tinyint", StringComparison.OrdinalIgnoreCase) + && column.DataLength <= 4) + { + jdbcType = "BOOLEAN"; + } return String.IsNullOrEmpty(jdbcType) ? "" : $" jdbcType=\"{jdbcType}\""; } - } - + @foreach (var col in table.Columns) { if (col.IsPrimaryKey) { continue; } - - + } \ No newline at end of file From 4a2f4add7cacd84676e1409fb9034c6ee4e60df8 Mon Sep 17 00:00:00 2001 From: Ahoo Wang Date: Fri, 14 Feb 2020 15:00:20 +0800 Subject: [PATCH 098/127] remove Java-MyBatis:SqlMap-ResultMaps:java-type --- build/version.props | 2 +- .../Java/SqlMap-Partials/SqlMap-ResultMaps.cshtml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/build/version.props b/build/version.props index b33737d..b736036 100644 --- a/build/version.props +++ b/build/version.props @@ -2,7 +2,7 @@ 2 2 - 93 + 94 $(VersionMajor).$(VersionMinor).$(VersionPatch) diff --git a/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/SqlMap-ResultMaps.cshtml b/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/SqlMap-ResultMaps.cshtml index aa975bb..0b9b20f 100644 --- a/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/SqlMap-ResultMaps.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/SqlMap-ResultMaps.cshtml @@ -47,13 +47,13 @@ - + @foreach (var col in table.Columns) { if (col.IsPrimaryKey) { continue; } - + } \ No newline at end of file From d6dff6c5c98cd6279c77810184911bbe52b580a0 Mon Sep 17 00:00:00 2001 From: Ahoo Wang Date: Mon, 17 Feb 2020 17:03:31 +0800 Subject: [PATCH 099/127] add SecureFilePriv for MySql-ETL --- build/version.props | 2 +- src/SmartCode.ETL/BatchInsertFactory.cs | 34 +++++++++++-------- src/SmartCode.ETL/BuildTasks/LoadBuildTask.cs | 27 ++++++++++----- .../Utilities/IDictionaryExtensions.cs | 2 ++ 4 files changed, 41 insertions(+), 24 deletions(-) diff --git a/build/version.props b/build/version.props index b736036..3fa973c 100644 --- a/build/version.props +++ b/build/version.props @@ -2,7 +2,7 @@ 2 2 - 94 + 95 $(VersionMajor).$(VersionMinor).$(VersionPatch) diff --git a/src/SmartCode.ETL/BatchInsertFactory.cs b/src/SmartCode.ETL/BatchInsertFactory.cs index c0b205b..3a6e4cb 100644 --- a/src/SmartCode.ETL/BatchInsertFactory.cs +++ b/src/SmartCode.ETL/BatchInsertFactory.cs @@ -1,36 +1,40 @@ using SmartSql.Bulk; -using SmartSql.Configuration; -using System; using System.Collections.Generic; -using System.Text; using SmartSql; namespace SmartCode.ETL { public class BatchInsertFactory { - public static IBulkInsert Create(ISqlMapper sqlMapper, Db.DbProvider dbProvider) + public static IBulkInsert Create(ISqlMapper sqlMapper, Db.DbProvider dbProvider, BuildContext buildContext) { switch (dbProvider) { case Db.DbProvider.MySql: case Db.DbProvider.MariaDB: + { + var bulkInset = new SmartSql.Bulk.MySql.BulkInsert(sqlMapper.SessionStore.LocalSession); + if (buildContext.Build.Parameters.Value("SecureFilePriv", + out string secureFilePriv)) { - return new SmartSql.Bulk.MySql.BulkInsert(sqlMapper.SessionStore.LocalSession); + bulkInset.SecureFilePriv = secureFilePriv; } + + return bulkInset; + } case Db.DbProvider.PostgreSql: - { - return new SmartSql.Bulk.PostgreSql.BulkInsert(sqlMapper.SessionStore.LocalSession); - } + { + return new SmartSql.Bulk.PostgreSql.BulkInsert(sqlMapper.SessionStore.LocalSession); + } case Db.DbProvider.SqlServer: - { - return new SmartSql.Bulk.SqlServer.BulkInsert(sqlMapper.SessionStore.LocalSession); - } + { + return new SmartSql.Bulk.SqlServer.BulkInsert(sqlMapper.SessionStore.LocalSession); + } default: - { - throw new SmartCodeException($"can not support DbProvider:{dbProvider}!"); - } + { + throw new SmartCodeException($"can not support DbProvider:{dbProvider}!"); + } } } } -} +} \ No newline at end of file diff --git a/src/SmartCode.ETL/BuildTasks/LoadBuildTask.cs b/src/SmartCode.ETL/BuildTasks/LoadBuildTask.cs index b4b02e6..1cf32c0 100644 --- a/src/SmartCode.ETL/BuildTasks/LoadBuildTask.cs +++ b/src/SmartCode.ETL/BuildTasks/LoadBuildTask.cs @@ -27,6 +27,7 @@ public class LoadBuildTask : IBuildTask public bool Initialized => true; public string Name => "Load"; + public LoadBuildTask(ILoggerFactory loggerFactory , Project project , IPluginManager pluginManager @@ -53,6 +54,7 @@ public async Task Build(BuildContext context) }); return; } + var batchTable = dataSource.TransformData; batchTable.TableName = tableName; @@ -61,9 +63,9 @@ public async Task Build(BuildContext context) var lastExtract = _project.GetETLLastExtract(); var queryParams = new Dictionary { - { "LastMaxId",lastExtract.MaxId}, - { "LastQueryTime",lastExtract.QueryTime}, - { "LastMaxModifyTime",lastExtract.MaxModifyTime}, + {"LastMaxId", lastExtract.MaxId}, + {"LastQueryTime", lastExtract.QueryTime}, + {"LastMaxModifyTime", lastExtract.MaxModifyTime}, }; Stopwatch stopwatch = Stopwatch.StartNew(); var loadEntity = new Entity.ETLLoad @@ -73,7 +75,9 @@ public async Task Build(BuildContext context) try { sqlMapper.SessionStore.Open(); + #region PreCmd + if (!String.IsNullOrEmpty(preCmd)) { stopwatch.Restart(); @@ -90,9 +94,12 @@ await sqlMapper.ExecuteAsync(new RequestContext Taken = stopwatch.ElapsedMilliseconds }; } + #endregion + #region BatchInsert - var batchInsert = BatchInsertFactory.Create(sqlMapper, dbProvider); + + var batchInsert = BatchInsertFactory.Create(sqlMapper, dbProvider, context); InitColumnMapping(batchTable, context); batchInsert.Table = batchTable; stopwatch.Restart(); @@ -100,9 +107,13 @@ await sqlMapper.ExecuteAsync(new RequestContext stopwatch.Stop(); loadEntity.Size = batchTable.Rows.Count; loadEntity.Taken = stopwatch.ElapsedMilliseconds; - _logger.LogWarning($"Build:{context.BuildKey},BatchInsert.Size:{loadEntity.Size},Taken:{loadEntity.Taken}ms!"); + _logger.LogWarning( + $"Build:{context.BuildKey},BatchInsert.Size:{loadEntity.Size},Taken:{loadEntity.Taken}ms!"); + #endregion + #region PostCmd + if (context.Build.Parameters.Value(POST_COMMAND, out string postCmd) && !String.IsNullOrEmpty(postCmd)) { stopwatch.Restart(); @@ -119,7 +130,9 @@ await sqlMapper.ExecuteAsync(new RequestContext Taken = stopwatch.ElapsedMilliseconds }; } + #endregion + await etlRepository.Load(_project.GetETKTaskId(), loadEntity); } finally @@ -130,7 +143,6 @@ await sqlMapper.ExecuteAsync(new RequestContext public void Initialize(IDictionary parameters) { - } private void InitColumnMapping(DataTable bulkTable, BuildContext context) @@ -163,6 +175,5 @@ private ISqlMapper GetSqlMapper(BuildContext context) .UseAlias(alias_name) .Build().SqlMapper; } - } -} +} \ No newline at end of file diff --git a/src/SmartCode/Utilities/IDictionaryExtensions.cs b/src/SmartCode/Utilities/IDictionaryExtensions.cs index 50f100a..0e84dd6 100644 --- a/src/SmartCode/Utilities/IDictionaryExtensions.cs +++ b/src/SmartCode/Utilities/IDictionaryExtensions.cs @@ -7,6 +7,7 @@ namespace SmartCode.Utilities { public static class IDictionaryExtensions { + [Obsolete("please use SmartSql.DictionaryExtensions")] public static bool Value(this IDictionary dic, TKey key, out TTypedValue value) { value = default; @@ -33,6 +34,7 @@ public static bool Value(this IDictionary(this IDictionary dic, TKey key, out TTypedValue value) { if (!dic.Value(key, out value)) From bf22f709b0d3614a91ea7e522db713843f3e6340 Mon Sep 17 00:00:00 2001 From: Ahoo Wang Date: Wed, 11 Mar 2020 16:15:46 +0800 Subject: [PATCH 100/127] 1. update SmartSql-version 2. add support BulkSize for ETLProjectBuilder rel-> https://github.com/dotnetcore/SmartCode/issues/44 --- build/version.props | 4 +- doc/SmartCode-ETL.yml | 33 ++- doc/smartcode-etl.db | Bin 16384 -> 16384 bytes .../BuildTasks/ClearBuildTask.cs | 1 - .../BuildTasks/MultiTemplateBuildTask.cs | 2 - src/SmartCode.App/ProjectBuilder.cs | 77 ------- src/SmartCode.App/SmartCode.App.csproj | 2 + src/SmartCode.App/SmartCodeApp.cs | 11 +- src/SmartCode.CLI/SmartCode.CLI.csproj | 2 +- src/SmartCode.Db/SmartCode.Db.csproj | 14 +- .../SQLiteETLTaskRepository.cs | 2 +- .../AbstractExtractDataSource.cs | 194 ++++++++++++------ src/SmartCode.ETL/ETLProjectBuilder.cs | 30 +++ src/SmartCode.ETL/ExtractDataSource.cs | 7 +- .../ExtractDictionaryDataSource.cs | 3 +- src/SmartCode.ETL/IExtractData.cs | 12 ++ src/SmartCode.ETL/SmartCode.ETL.csproj | 6 +- .../TransformEngine/RazorTransformEngine.cs | 6 +- .../DbTypeConverter/DefaultDbTypeConverter.cs | 17 +- .../GeneratorProjectBuilder.cs | 47 +++++ src/SmartCode/Configuration/Project.cs | 13 +- src/SmartCode/IProjectBuilder.cs | 22 -- src/SmartCode/SmartCode.csproj | 3 +- .../Utilities/IDictionaryExtensions.cs | 46 ----- 24 files changed, 293 insertions(+), 261 deletions(-) delete mode 100644 src/SmartCode.App/ProjectBuilder.cs create mode 100644 src/SmartCode.ETL/ETLProjectBuilder.cs create mode 100644 src/SmartCode.ETL/IExtractData.cs create mode 100644 src/SmartCode.Generator/GeneratorProjectBuilder.cs delete mode 100644 src/SmartCode/Utilities/IDictionaryExtensions.cs diff --git a/build/version.props b/build/version.props index 3fa973c..3be5b90 100644 --- a/build/version.props +++ b/build/version.props @@ -1,8 +1,8 @@ 2 - 2 - 95 + 3 + 0 $(VersionMajor).$(VersionMinor).$(VersionPatch) diff --git a/doc/SmartCode-ETL.yml b/doc/SmartCode-ETL.yml index 2a8948d..1e0f7c3 100644 --- a/doc/SmartCode-ETL.yml +++ b/doc/SmartCode-ETL.yml @@ -1,38 +1,37 @@ Author: Ahoo Wang +Mode: ETL + DataSource: Name: Extract Parameters: DbProvider: SqlServer - ConnectionString: Data Source=.;Initial Catalog=SmartSqlDB;Integrated Security=True - Query: SELECT [Id],[UserName],[Pwd],[Status],[LastLoginTime],[CreationTime],[Deleted] FROM [T_User] Where Id>@LastMaxId And CreationTime>@LastQueryTime + ConnectionString: Data Source=.;Initial Catalog=SmartSqlTestDB;Integrated Security=True + Query: " SELECT * FROM [T_ModifyTime] Where ModifyTime>@LastMaxModifyTime + Order By Id Desc Offset @Offset Rows Fetch Next @BulkSize Rows Only; " + Total: Select Count(*) From T_ModifyTime Where ModifyTime>@LastMaxModifyTime + BulkSize: 1000 PKColumn: Id AutoIncrement: true - ModifyTime: CreationTime + ModifyTime: ModifyTime Parameters: ETLCode: SmartCode.ETL.Test ETLRepository: SQLite - + Build: Transform: Type: Transform Parameters: - Script: + Script: - Load2PostgreSql: + Load2PostgreSql: Type: Load Parameters: - DbProvider: PostgreSql - ConnectionString: Server=localhost;Port=5432;User Id=postgres;Password=SmartSql; Database=smartsql_db; - Table: t_user - ColumnMapping: [{Column: Id,Mapping: id} - ,{Column: UserName,Mapping: user_name} - ,{Column: Pwd,Mapping: pwd} - ,{Column: Status,Mapping: status} - ,{Column: LastLoginTime,Mapping: lastlogintime} - ,{Column: CreationTime,Mapping: creationtime} - ,{Column: Deleted,Mapping: deleted}] - PreCommand: + DbProvider: SqlServer + ConnectionString: Data Source=.;Initial Catalog=DestinationDB;Integrated Security=True + Table: T_ModifyTime + ColumnMapping: [{Column: Id,Mapping: Id},{Column: ModifyTime,Mapping: ModifyTime}] + PreCommand: PostCommand: \ No newline at end of file diff --git a/doc/smartcode-etl.db b/doc/smartcode-etl.db index 745c1f700344fd15bb45820c3709e44424a7ddd4..87d7ac0245293a3b670bb823eec67576aed6d21a 100644 GIT binary patch delta 86 zcmZo@U~Fh$oFL68Gf~EwRfa)NBXeWQ0(k)j0R{&CZ02?t+}K#k%*6dr0(k*8=5_}DY`$vl! _logger; - - public ProjectBuilder( - Project project - , IPluginManager pluginManager - , ILogger logger) - { - _project = project; - _pluginManager = pluginManager; - _logger = logger; - } - - public event OnProjectBuildStartupHandler OnStartup; - public event OnProjectBuildSucceedHandler OnSucceed; - public event OnProjectBuildFailedHandler OnFailed; - - - public async Task Build() - { - BuildContext buildContext = null; - try - { - var dataSource = _pluginManager.Resolve(_project.DataSource.Name); - if (OnStartup != null) - await OnStartup.Invoke(this, new OnProjectBuildStartupEventArgs {Project = _project}); - await dataSource.InitData(); - foreach (var buildKV in _project.BuildTasks) - { - _logger.LogInformation($"-------- BuildTask:{buildKV.Key} Start! ---------"); - var output = buildKV.Value.Output; - buildContext = new BuildContext - { - PluginManager = _pluginManager, - Project = _project, - DataSource = dataSource, - BuildKey = buildKV.Key, - Build = buildKV.Value, - Output = output?.Copy() - }; - await _pluginManager.Resolve(buildKV.Value.Type).Build(buildContext); - _logger.LogInformation($"-------- BuildTask:{buildKV.Key} End! ---------"); - } - - if (OnSucceed != null) - await OnSucceed.Invoke(this, new OnProjectBuildSucceedEventArgs - { - Project = _project - }); - } - catch (Exception ex) - { - if (OnFailed != null) - await OnFailed.Invoke(this, new OnProjectBuildFailedEventArgs - { - Project = _project, - Context = buildContext, - ErrorException = ex - }); - throw; - } - } - } -} \ No newline at end of file diff --git a/src/SmartCode.App/SmartCode.App.csproj b/src/SmartCode.App/SmartCode.App.csproj index 7cbecf2..20c43c8 100644 --- a/src/SmartCode.App/SmartCode.App.csproj +++ b/src/SmartCode.App/SmartCode.App.csproj @@ -8,6 +8,8 @@ + + diff --git a/src/SmartCode.App/SmartCodeApp.cs b/src/SmartCode.App/SmartCodeApp.cs index 2841496..7a58163 100644 --- a/src/SmartCode.App/SmartCodeApp.cs +++ b/src/SmartCode.App/SmartCodeApp.cs @@ -8,6 +8,8 @@ using System.Reflection; using HandlebarsDotNet; using Newtonsoft.Json; +using SmartCode.ETL; +using SmartCode.Generator; namespace SmartCode.App { @@ -62,7 +64,14 @@ private void RegisterServices() Services.AddSingleton(Project); RegisterPlugins(); Services.AddSingleton(); - Services.AddSingleton(); + if (Project.Mode == Project.ProjectMode.ETL) + { + Services.AddSingleton(); + } + else + { + Services.AddSingleton(); + } ServiceProvider = Services.BuildServiceProvider(); Logger = ServiceProvider.GetRequiredService>(); } diff --git a/src/SmartCode.CLI/SmartCode.CLI.csproj b/src/SmartCode.CLI/SmartCode.CLI.csproj index 0bad988..5727544 100644 --- a/src/SmartCode.CLI/SmartCode.CLI.csproj +++ b/src/SmartCode.CLI/SmartCode.CLI.csproj @@ -14,7 +14,7 @@ - + diff --git a/src/SmartCode.Db/SmartCode.Db.csproj b/src/SmartCode.Db/SmartCode.Db.csproj index fb3baa3..6c40434 100644 --- a/src/SmartCode.Db/SmartCode.Db.csproj +++ b/src/SmartCode.Db/SmartCode.Db.csproj @@ -5,14 +5,14 @@ - - - - + + + + - - - + + + diff --git a/src/SmartCode.ETL.SQLite/SQLiteETLTaskRepository.cs b/src/SmartCode.ETL.SQLite/SQLiteETLTaskRepository.cs index e5a9ce8..00e74c4 100644 --- a/src/SmartCode.ETL.SQLite/SQLiteETLTaskRepository.cs +++ b/src/SmartCode.ETL.SQLite/SQLiteETLTaskRepository.cs @@ -27,7 +27,7 @@ public SQLiteETLTaskRepository(ILoggerFactory loggerFactory) public void Initialize(IDictionary paramters) { var connectionString = $"Data Source={AppPath.Relative(DB_NAME)};Version=3;"; - if (IDictionaryExtensions.Value(paramters, CONNECTION_STRING, out string connStr)) + if (paramters.Value(CONNECTION_STRING, out string connStr)) { connectionString = connStr; } diff --git a/src/SmartCode.ETL/AbstractExtractDataSource.cs b/src/SmartCode.ETL/AbstractExtractDataSource.cs index f6ff135..e44c991 100644 --- a/src/SmartCode.ETL/AbstractExtractDataSource.cs +++ b/src/SmartCode.ETL/AbstractExtractDataSource.cs @@ -12,122 +12,90 @@ namespace SmartCode.ETL { - public abstract class AbstractExtractDataSource : IDataSource + public abstract class AbstractExtractDataSource : IDataSource, IExtractData { private readonly Project _project; private readonly ILoggerFactory _loggerFactory; private readonly ILogger _logger; - private readonly IProjectBuilder _projectBuilder; private readonly IPluginManager _pluginManager; - protected ISqlMapper SqlMapper { get; set; } - public bool Initialized { get; private set; } public abstract string Name { get; } + protected ISqlMapper SqlMapper { get; private set; } + + public bool Initialized { get; private set; } private IETLTaskRepository _etlRepository; + protected AbstractExtractDataSource(Project project , ILoggerFactory loggerFactory , ILogger logger - , IProjectBuilder projectBuilder , IPluginManager pluginManager) { _project = project; _loggerFactory = loggerFactory; _logger = logger; - _projectBuilder = projectBuilder; _pluginManager = pluginManager; _etlRepository = _pluginManager.Resolve(_project.GetETLRepository()); - - } - private void InitProjectBuilderEvent() - { - _projectBuilder.OnStartup += _projectBuilder_OnStartup; - _projectBuilder.OnFailed += _projectBuilder_OnFailed; - _projectBuilder.OnSucceed += _projectBuilder_OnSucceed; - } - - private async Task _projectBuilder_OnSucceed(object sender, OnProjectBuildSucceedEventArgs eventArgs) - { - await _etlRepository.Success(_project.GetETKTaskId()); } - private async Task _projectBuilder_OnStartup(object sender, OnProjectBuildStartupEventArgs eventArgs) + public Task InitData() { - var etlTaskId = await _etlRepository.Startup(_project.ConfigPath, _project.GetETLCode()); - _project.SetETKTaskId(etlTaskId); + return Task.CompletedTask; } - private async Task _projectBuilder_OnFailed(object sender, OnProjectBuildFailedEventArgs eventArgs) + private async Task Extract() { - await _etlRepository.Fail(_project.GetETKTaskId(), eventArgs.ErrorException); - } - - public async Task InitData() - { - var dataSource = _project.DataSource; - dataSource.Parameters.EnsureValue("DbProvider", out string dbProvider); - dataSource.Parameters.EnsureValue("ConnectionString", out string connString); - dataSource.Parameters.Value("PKColumn", out string pkColumn); - dataSource.Parameters.Value("ModifyTime", out string modifyTime); - dataSource.Parameters.EnsureValue("Query", out string queryCmd); - #region CreateSqlMapper - SqlMapper = new SmartSqlBuilder() - .UseAlias(Name) - .UseLoggerFactory(_loggerFactory) - .UseDataSource(dbProvider, connString) - .Build().SqlMapper; - #endregion - var lastExtract = await _etlRepository.GetLastExtract(_project.GetETLCode()); - _project.SetETLLastExtract(lastExtract); var queryParams = new Dictionary { - { "LastMaxId",lastExtract.MaxId}, - { "LastQueryTime",lastExtract.QueryTime}, - { "LastMaxModifyTime",lastExtract.MaxModifyTime}, + {"LastMaxId", LastExtract.MaxId}, + {"LastQueryTime", LastExtract.QueryTime}, + {"LastMaxModifyTime", LastExtract.MaxModifyTime}, + {nameof(Offset), Offset}, + {nameof(BulkSize), BulkSize}, }; + var extractEntity = new ETLExtract { QueryTime = DateTime.Now, - PKColumn = pkColumn, + PKColumn = PKColumn, QueryCommand = new ETLDbCommand { - Command = queryCmd, + Command = QueryCmd, Parameters = queryParams }, Count = -1, MaxId = -1 }; Stopwatch stopwatch = Stopwatch.StartNew(); - await LoadData(new RequestContext { RealSql = queryCmd, Request = queryParams }); + await LoadData(new RequestContext {RealSql = QueryCmd, Request = queryParams}); stopwatch.Stop(); extractEntity.Count = GetCount(); extractEntity.QueryCommand.Taken = stopwatch.ElapsedMilliseconds; _logger.LogWarning($"InitData,Data.Size:{extractEntity.Count},Taken:{extractEntity.QueryCommand.Taken}ms!"); - dataSource.Parameters.Value("PkIsNumeric", out bool pkIsNumeric); - dataSource.Parameters.Value("AutoIncrement", out bool autoIncrement); - - if (!String.IsNullOrEmpty(pkColumn) - && (pkIsNumeric || autoIncrement) + if (!String.IsNullOrEmpty(PKColumn) + && (PkIsNumeric || AutoIncrement) && extractEntity.Count > 0) { - extractEntity.MaxId = GetMaxId(pkColumn); + extractEntity.MaxId = GetMaxId(PKColumn); } else { - extractEntity.MaxId = lastExtract.MaxId; + extractEntity.MaxId = LastExtract.MaxId; } - if (!String.IsNullOrEmpty(modifyTime) + if (!String.IsNullOrEmpty(ModifyTime) && extractEntity.Count > 0) { - extractEntity.MaxModifyTime = GetMaxModifyTime(modifyTime); + extractEntity.MaxModifyTime = GetMaxModifyTime(ModifyTime); } else { - extractEntity.MaxModifyTime = lastExtract.MaxModifyTime; + extractEntity.MaxModifyTime = LastExtract.MaxModifyTime; } + await _etlRepository.Extract(_project.GetETKTaskId(), extractEntity); } + protected abstract Task LoadData(RequestContext requestContext); public abstract int GetCount(); public abstract long GetMaxId(string pkColumn); @@ -136,10 +104,114 @@ public async Task InitData() public void Initialize(IDictionary parameters) { Initialized = true; - if (Name == _project.DataSource.Name) + } + + public long Total { get; private set; } + public int BulkSize { get; private set; } + public int Offset { get; private set; } + + public String PKColumn { get; private set; } + public String ModifyTime { get; private set; } + public String QueryCmd { get; private set; } + public String TotalCmd { get; private set; } + public bool PkIsNumeric { get; private set; } + public bool AutoIncrement { get; private set; } + protected ETLExtract LastExtract { get; private set; } + + public async Task Run() + { + LastExtract = await _etlRepository.GetLastExtract(_project.GetETLCode()); + _project.SetETLLastExtract(LastExtract); + InitParameters(); + + var queryParams = new Dictionary + { + {"LastMaxId", LastExtract.MaxId}, + {"LastQueryTime", LastExtract.QueryTime}, + {"LastMaxModifyTime", LastExtract.MaxModifyTime} + }; + + if (!String.IsNullOrEmpty(TotalCmd)) + { + Total = await SqlMapper.ExecuteScalarAsync(new RequestContext + { + RealSql = TotalCmd, + Request = queryParams + }); + if (Total == 0) + { + _logger.LogInformation("can not find any record."); + return; + } + } + + + BuildContext buildContext = null; + while (Offset < Total) { - InitProjectBuilderEvent(); + _logger.LogInformation($"-------- Offset:[{Offset}] ---------"); + try + { + var etlTaskId = await _etlRepository.Startup(_project.ConfigPath, _project.GetETLCode()); + _project.SetETKTaskId(etlTaskId); + await Extract(); + foreach (var buildKV in _project.BuildTasks) + { + _logger.LogInformation($"-------- BuildTask:{buildKV.Key} Start! ---------"); + var output = buildKV.Value.Output; + buildContext = new BuildContext + { + PluginManager = _pluginManager, + DataSource = this, + Project = _project, + BuildKey = buildKV.Key, + Build = buildKV.Value, + Output = output?.Copy() + }; + await _pluginManager.Resolve(buildKV.Value.Type).Build(buildContext); + _logger.LogInformation($"-------- BuildTask:{buildKV.Key} End! ---------"); + } + + await _etlRepository.Success(_project.GetETKTaskId()); + Offset += BulkSize; + } + catch (Exception e) + { + await _etlRepository.Fail(_project.GetETKTaskId(), e); + throw; + } } } + + private void InitParameters() + { + var dataSource = _project.DataSource; + dataSource.Parameters.EnsureValue("DbProvider", out string dbProvider); + dataSource.Parameters.EnsureValue("ConnectionString", out String connString); + dataSource.Parameters.Value("PKColumn", out string pkColumn); + PKColumn = pkColumn; + dataSource.Parameters.Value("ModifyTime", out string modifyTime); + ModifyTime = modifyTime; + dataSource.Parameters.Value("PkIsNumeric", out bool pkIsNumeric); + PkIsNumeric = pkIsNumeric; + dataSource.Parameters.Value("AutoIncrement", out bool autoIncrement); + AutoIncrement = autoIncrement; + dataSource.Parameters.EnsureValue("Query", out string queryCmd); + QueryCmd = queryCmd; + dataSource.Parameters.Value("Total", out String totalCmd); + TotalCmd = totalCmd; + _project.DataSource.Parameters.EnsureValue("BulkSize", out int bulkSize); + BulkSize = bulkSize; + + #region CreateSqlMapper + + SqlMapper = new SmartSqlBuilder() + .UseAlias(Name) + .UseLoggerFactory(_loggerFactory) + .UseDataSource(dbProvider, connString) + .Build().SqlMapper; + + #endregion + } } -} +} \ No newline at end of file diff --git a/src/SmartCode.ETL/ETLProjectBuilder.cs b/src/SmartCode.ETL/ETLProjectBuilder.cs new file mode 100644 index 0000000..d363241 --- /dev/null +++ b/src/SmartCode.ETL/ETLProjectBuilder.cs @@ -0,0 +1,30 @@ +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using SmartCode.Configuration; + +namespace SmartCode.ETL +{ + public class ETLProjectBuilder : IProjectBuilder + { + private readonly Project _project; + private readonly IPluginManager _pluginManager; + private readonly ILogger _logger; + + + public ETLProjectBuilder( + Project project + , IPluginManager pluginManager + , ILogger logger) + { + _project = project; + _pluginManager = pluginManager; + _logger = logger; + } + + public Task Build() + { + var extractData = (IExtractData) _pluginManager.Resolve(_project.DataSource.Name); + return extractData.Run(); + } + } +} \ No newline at end of file diff --git a/src/SmartCode.ETL/ExtractDataSource.cs b/src/SmartCode.ETL/ExtractDataSource.cs index 7be7157..4b9cb46 100644 --- a/src/SmartCode.ETL/ExtractDataSource.cs +++ b/src/SmartCode.ETL/ExtractDataSource.cs @@ -11,19 +11,20 @@ namespace SmartCode.ETL public class ExtractDataSource : AbstractExtractDataSource { public ExtractDataSource(Project project, ILoggerFactory loggerFactory, ILogger logger, - IProjectBuilder projectBuilder, IPluginManager pluginManager) : base(project, loggerFactory, logger, - projectBuilder, pluginManager) + IPluginManager pluginManager) : base(project, loggerFactory, logger, pluginManager) { } public override string Name => "Extract"; public DataSet DataSet { get; set; } public DataTable TransformData { get; set; } + protected override async Task LoadData(RequestContext requestContext) { DataSet = await SqlMapper.GetDataSetAsync(requestContext); TransformData = DataSet.Tables[0]; } + public override long GetMaxId(string pkColumn) { return TransformData.Rows.Cast().AsParallel().Max(dr => Convert.ToInt64(dr[pkColumn])); @@ -38,7 +39,5 @@ public override int GetCount() { return TransformData.Rows.Count; } - - } } \ No newline at end of file diff --git a/src/SmartCode.ETL/ExtractDictionaryDataSource.cs b/src/SmartCode.ETL/ExtractDictionaryDataSource.cs index 846cc39..f9396e4 100644 --- a/src/SmartCode.ETL/ExtractDictionaryDataSource.cs +++ b/src/SmartCode.ETL/ExtractDictionaryDataSource.cs @@ -12,8 +12,7 @@ public class ExtractDictionaryDataSource : AbstractExtractDataSource { public ExtractDictionaryDataSource(Project project, ILoggerFactory loggerFactory, ILogger logger, - IProjectBuilder projectBuilder, IPluginManager pluginManager) : base(project, loggerFactory, logger, - projectBuilder, pluginManager) + IPluginManager pluginManager) : base(project, loggerFactory, logger, pluginManager) { } diff --git a/src/SmartCode.ETL/IExtractData.cs b/src/SmartCode.ETL/IExtractData.cs new file mode 100644 index 0000000..f591419 --- /dev/null +++ b/src/SmartCode.ETL/IExtractData.cs @@ -0,0 +1,12 @@ +using System.Threading.Tasks; + +namespace SmartCode.ETL +{ + public interface IExtractData : IPlugin + { + long Total { get; } + int BulkSize { get; } + int Offset { get; } + Task Run(); + } +} \ No newline at end of file diff --git a/src/SmartCode.ETL/SmartCode.ETL.csproj b/src/SmartCode.ETL/SmartCode.ETL.csproj index 92a8e5f..aed8743 100644 --- a/src/SmartCode.ETL/SmartCode.ETL.csproj +++ b/src/SmartCode.ETL/SmartCode.ETL.csproj @@ -5,9 +5,9 @@ - - - + + + diff --git a/src/SmartCode.ETL/TransformEngine/RazorTransformEngine.cs b/src/SmartCode.ETL/TransformEngine/RazorTransformEngine.cs index 253fb6a..30cad9c 100644 --- a/src/SmartCode.ETL/TransformEngine/RazorTransformEngine.cs +++ b/src/SmartCode.ETL/TransformEngine/RazorTransformEngine.cs @@ -21,7 +21,7 @@ public class RazorTransformEngine : ITransformEngine private const String SCRIPT = "Script"; public async Task Transform(BuildContext context) { - if (IDictionaryExtensions.Value(context.Build.Parameters, SCRIPT, out string script) && !String.IsNullOrEmpty(script)) + if (context.Build.Parameters.Value(SCRIPT, out string script) && !String.IsNullOrEmpty(script)) { using (var serviceScope = _scopeFactory.CreateScope()) { @@ -40,11 +40,11 @@ public void Initialize(IDictionary parameters) Initialized = true; if (parameters != null) { - if (IDictionaryExtensions.Value(parameters, "Name", out string name)) + if (parameters.Value( "Name", out string name)) { Name = name; } - if (IDictionaryExtensions.Value(parameters, "Root", out string root)) + if (parameters.Value( "Root", out string root)) { _root = root; } diff --git a/src/SmartCode.Generator/DbTypeConverter/DefaultDbTypeConverter.cs b/src/SmartCode.Generator/DbTypeConverter/DefaultDbTypeConverter.cs index 9d3e69d..f8a47b7 100644 --- a/src/SmartCode.Generator/DbTypeConverter/DefaultDbTypeConverter.cs +++ b/src/SmartCode.Generator/DbTypeConverter/DefaultDbTypeConverter.cs @@ -1,10 +1,7 @@ -using System; -using System.Linq; +using System.Linq; using System.Collections.Generic; -using System.Text; using SmartCode.Utilities; using Microsoft.Extensions.Logging; -using System.IO; using SmartCode.Db; namespace SmartCode.Generator.DbTypeConverter @@ -30,6 +27,7 @@ private void LoadMap() DbTypeMap = XmlConvert.Deserialize(_xmlPath); _logger.LogDebug($"DbTypeConverter Load DbTypeMap:{_xmlPath} End!"); } + public string LanguageType(DbProvider dbProvider, string lang, string dbType) { var databaseMap = DbTypeMap.Databases.FirstOrDefault(m => m.DbProvider == dbProvider && m.Language == lang); @@ -37,12 +35,14 @@ public string LanguageType(DbProvider dbProvider, string lang, string dbType) { _logger.LogError($"Can not find DatabaseMap:DbProvider:{dbProvider},Language:{lang}!"); } + var dbTypeMap = databaseMap?.DbTypes?.FirstOrDefault(m => m.Name == dbType); if (dbTypeMap == null) { _logger.LogError($"Can not find DatabaseMap:DbProvider:{dbProvider},Language:{lang},DbType:{dbType}!"); } + return dbTypeMap?.To; } @@ -53,12 +53,15 @@ public string DbType(DbProvider dbProvider, string lang, string languageType) { _logger.LogError($"Can not find DatabaseMap:DbProvider:{dbProvider},Language:{lang}!"); } + var dbTypeMap = databaseMap?.DbTypes?.FirstOrDefault(m => m.To == languageType); if (dbTypeMap == null) { - _logger.LogError($"Can not find DatabaseMap:DbProvider:{dbProvider},Language:{lang},LanguageType:{languageType}!"); + _logger.LogError( + $"Can not find DatabaseMap:DbProvider:{dbProvider},Language:{lang},LanguageType:{languageType}!"); } + return dbTypeMap?.To; } @@ -66,7 +69,7 @@ public void Initialize(IDictionary parameters) { if (parameters != null) { - if (IDictionaryExtensions.Value(parameters, "XmlPath", out string xmlPath)) + if (parameters.Value("XmlPath", out string xmlPath)) { _xmlPath = xmlPath; } @@ -76,4 +79,4 @@ public void Initialize(IDictionary parameters) Initialized = true; } } -} +} \ No newline at end of file diff --git a/src/SmartCode.Generator/GeneratorProjectBuilder.cs b/src/SmartCode.Generator/GeneratorProjectBuilder.cs new file mode 100644 index 0000000..7944eb3 --- /dev/null +++ b/src/SmartCode.Generator/GeneratorProjectBuilder.cs @@ -0,0 +1,47 @@ +using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using SmartCode.Configuration; + +namespace SmartCode.Generator +{ + public class GeneratorProjectBuilder : IProjectBuilder + { + private readonly Project _project; + private readonly IPluginManager _pluginManager; + private readonly ILogger _logger; + + public GeneratorProjectBuilder( + Project project + , IPluginManager pluginManager + , ILogger logger) + { + _project = project; + _pluginManager = pluginManager; + _logger = logger; + } + + + public async Task Build() + { + BuildContext buildContext = null; + var dataSource = _pluginManager.Resolve(_project.DataSource.Name); + await dataSource.InitData(); + foreach (var buildKV in _project.BuildTasks) + { + _logger.LogInformation($"-------- BuildTask:{buildKV.Key} Start! ---------"); + var output = buildKV.Value.Output; + buildContext = new BuildContext + { + PluginManager = _pluginManager, + Project = _project, + DataSource = dataSource, + BuildKey = buildKV.Key, + Build = buildKV.Value, + Output = output?.Copy() + }; + await _pluginManager.Resolve(buildKV.Value.Type).Build(buildContext); + _logger.LogInformation($"-------- BuildTask:{buildKV.Key} End! ---------"); + } + } + } +} \ No newline at end of file diff --git a/src/SmartCode/Configuration/Project.cs b/src/SmartCode/Configuration/Project.cs index 87c2d7e..ed9d7d2 100644 --- a/src/SmartCode/Configuration/Project.cs +++ b/src/SmartCode/Configuration/Project.cs @@ -11,15 +11,22 @@ public class Project public String ConfigPath { get; set; } public String Module { get; set; } public String Author { get; set; } + public ProjectMode? Mode { get; set; } public DataSource DataSource { get; set; } public TemplateEngine TemplateEngine { get; set; } = TemplateEngine.Default; public String Language { get; set; } = "CSharp"; public Output Output { get; set; } public IDictionary Parameters { get; set; } = new Dictionary(); - [YamlMember(Alias = "Build")] - public IDictionary BuildTasks { get; set; } + [YamlMember(Alias = "Build")] public IDictionary BuildTasks { get; set; } public String OutputPath => Output.Path; public NamingConverter NamingConverter { get; set; } public TableFilter TableFilter { get; set; } + + + public enum ProjectMode + { + GENERATOR, + ETL + } } -} +} \ No newline at end of file diff --git a/src/SmartCode/IProjectBuilder.cs b/src/SmartCode/IProjectBuilder.cs index b1799e7..f420116 100644 --- a/src/SmartCode/IProjectBuilder.cs +++ b/src/SmartCode/IProjectBuilder.cs @@ -4,30 +4,8 @@ namespace SmartCode { - public class OnProjectBuildStartupEventArgs : EventArgs - { - public Project Project { get; set; } - } - public delegate Task OnProjectBuildStartupHandler(object sender, OnProjectBuildStartupEventArgs eventArgs); - public class OnProjectBuildSucceedEventArgs : EventArgs - { - public Project Project { get; set; } - } - public delegate Task OnProjectBuildSucceedHandler(object sender, OnProjectBuildSucceedEventArgs eventArgs); - - public class OnProjectBuildFailedEventArgs : EventArgs - { - public Project Project { get; set; } - public BuildContext Context { get; set; } - public Exception ErrorException { get; set; } - } - public delegate Task OnProjectBuildFailedHandler(object sender, OnProjectBuildFailedEventArgs eventArgs); - public interface IProjectBuilder { - event OnProjectBuildStartupHandler OnStartup; - event OnProjectBuildSucceedHandler OnSucceed; - event OnProjectBuildFailedHandler OnFailed; Task Build(); } } diff --git a/src/SmartCode/SmartCode.csproj b/src/SmartCode/SmartCode.csproj index e4b6c1b..b083a2d 100644 --- a/src/SmartCode/SmartCode.csproj +++ b/src/SmartCode/SmartCode.csproj @@ -9,7 +9,8 @@ - + + diff --git a/src/SmartCode/Utilities/IDictionaryExtensions.cs b/src/SmartCode/Utilities/IDictionaryExtensions.cs deleted file mode 100644 index 0e84dd6..0000000 --- a/src/SmartCode/Utilities/IDictionaryExtensions.cs +++ /dev/null @@ -1,46 +0,0 @@ -using SmartCode; -using System; -using System.Collections.Generic; -using System.Text; - -namespace SmartCode.Utilities -{ - public static class IDictionaryExtensions - { - [Obsolete("please use SmartSql.DictionaryExtensions")] - public static bool Value(this IDictionary dic, TKey key, out TTypedValue value) - { - value = default; - if (dic == null) { return false; } - if (!dic.TryGetValue(key, out TValue val)) - { - return false; - } - - object objVal = val; - var valType = typeof(TValue); - var typedValType = typeof(TTypedValue); - if (typedValType.IsEnum && objVal is string) - { - value = (TTypedValue)Enum.Parse(typedValType, objVal.ToString()); - } - else if (typeof(IConvertible).IsAssignableFrom(typedValType)) - { - value = (TTypedValue)Convert.ChangeType(objVal, typedValType); - } - else - { - value = (TTypedValue)objVal; - } - return true; - } - [Obsolete("please use SmartSql.DictionaryExtensions")] - public static void EnsureValue(this IDictionary dic, TKey key, out TTypedValue value) - { - if (!dic.Value(key, out value)) - { - throw new SmartCodeException($"Can not find Parameter:{key}!"); - } - } - } -} From a9318c96e62add11cb2b880140ea521735cf3fe5 Mon Sep 17 00:00:00 2001 From: Ahoo Wang Date: Wed, 11 Mar 2020 17:40:48 +0800 Subject: [PATCH 101/127] optimize ETL forward compatibility --- build/version.props | 2 +- doc/SmartCode-ETL.yml | 4 +- src/SmartCode.App/SmartCodeApp.cs | 9 ++- src/SmartCode.CLI/appsettings.json | 8 +-- .../LoadToESBuildTask.cs | 2 +- ...ctDataSource.cs => AbstractExtractData.cs} | 64 ++++++++++--------- src/SmartCode.ETL/BuildContextExtensions.cs | 18 +++--- src/SmartCode.ETL/BuildTasks/LoadBuildTask.cs | 2 +- .../BuildTasks/TransformBuildTask.cs | 2 +- src/SmartCode.ETL/ETLProjectBuilder.cs | 2 +- .../{ExtractDataSource.cs => ExtractData.cs} | 4 +- ...DataSource.cs => ExtractDictionaryData.cs} | 6 +- src/SmartCode.ETL/IExtractData.cs | 2 +- .../TransformScripts/Load2PostgreSql.cshtml | 2 +- src/SmartCode/BuildContextExtensions.cs | 1 - 15 files changed, 69 insertions(+), 59 deletions(-) rename src/SmartCode.ETL/{AbstractExtractDataSource.cs => AbstractExtractData.cs} (85%) rename src/SmartCode.ETL/{ExtractDataSource.cs => ExtractData.cs} (86%) rename src/SmartCode.ETL/{ExtractDictionaryDataSource.cs => ExtractDictionaryData.cs} (84%) diff --git a/build/version.props b/build/version.props index 3be5b90..a9f73f0 100644 --- a/build/version.props +++ b/build/version.props @@ -2,7 +2,7 @@ 2 3 - 0 + 1 $(VersionMajor).$(VersionMinor).$(VersionPatch) diff --git a/doc/SmartCode-ETL.yml b/doc/SmartCode-ETL.yml index 1e0f7c3..2ce3671 100644 --- a/doc/SmartCode-ETL.yml +++ b/doc/SmartCode-ETL.yml @@ -6,8 +6,8 @@ DataSource: Parameters: DbProvider: SqlServer ConnectionString: Data Source=.;Initial Catalog=SmartSqlTestDB;Integrated Security=True - Query: " SELECT * FROM [T_ModifyTime] Where ModifyTime>@LastMaxModifyTime - Order By Id Desc Offset @Offset Rows Fetch Next @BulkSize Rows Only; " + Query: "SELECT * FROM [T_ModifyTime] Where ModifyTime>@LastMaxModifyTime" + Order By Id Desc Offset @Offset Rows Fetch Next @BulkSize Rows Only;" Total: Select Count(*) From T_ModifyTime Where ModifyTime>@LastMaxModifyTime BulkSize: 1000 PKColumn: Id diff --git a/src/SmartCode.App/SmartCodeApp.cs b/src/SmartCode.App/SmartCodeApp.cs index 7a58163..8947914 100644 --- a/src/SmartCode.App/SmartCodeApp.cs +++ b/src/SmartCode.App/SmartCodeApp.cs @@ -70,7 +70,14 @@ private void RegisterServices() } else { - Services.AddSingleton(); + if (Project.DataSource.Parameters.ContainsKey("Query")) + { + Services.AddSingleton(); + } + else + { + Services.AddSingleton(); + } } ServiceProvider = Services.BuildServiceProvider(); Logger = ServiceProvider.GetRequiredService>(); diff --git a/src/SmartCode.CLI/appsettings.json b/src/SmartCode.CLI/appsettings.json index 4bc4d28..9fe42b6 100644 --- a/src/SmartCode.CLI/appsettings.json +++ b/src/SmartCode.CLI/appsettings.json @@ -62,12 +62,12 @@ "ImplType": "SmartCode.Generator.DbTypeConverter.DefaultDbTypeConverter,SmartCode.Generator" }, { - "Type": "SmartCode.IDataSource,SmartCode", - "ImplType": "SmartCode.ETL.ExtractDataSource,SmartCode.ETL" + "Type": "SmartCode.ETL.IExtractData,SmartCode.ETL", + "ImplType": "SmartCode.ETL.ExtractData,SmartCode.ETL" }, { - "Type": "SmartCode.IDataSource,SmartCode", - "ImplType": "SmartCode.ETL.ExtractDictionaryDataSource,SmartCode.ETL" + "Type": "SmartCode.ETL.IExtractData,SmartCode.ETL", + "ImplType": "SmartCode.ETL.ExtractDictionaryData,SmartCode.ETL" }, { "Type": "SmartCode.IBuildTask,SmartCode", diff --git a/src/SmartCode.ETL.LoadToES/LoadToESBuildTask.cs b/src/SmartCode.ETL.LoadToES/LoadToESBuildTask.cs index 8a6148d..8133ba4 100644 --- a/src/SmartCode.ETL.LoadToES/LoadToESBuildTask.cs +++ b/src/SmartCode.ETL.LoadToES/LoadToESBuildTask.cs @@ -40,7 +40,7 @@ public async Task Build(BuildContext context) { ESOptions esOptions = InitOptions(context); var etlRepository = _pluginManager.Resolve(_project.GetETLRepository()); - var dataSource = context.GetDataSource(); + var dataSource = context.GetExtractData(); var loadEntity = new Entity.ETLLoad { Size = 0, diff --git a/src/SmartCode.ETL/AbstractExtractDataSource.cs b/src/SmartCode.ETL/AbstractExtractData.cs similarity index 85% rename from src/SmartCode.ETL/AbstractExtractDataSource.cs rename to src/SmartCode.ETL/AbstractExtractData.cs index e44c991..f576acd 100644 --- a/src/SmartCode.ETL/AbstractExtractDataSource.cs +++ b/src/SmartCode.ETL/AbstractExtractData.cs @@ -1,9 +1,6 @@ using System; using System.Collections.Generic; -using System.Data; using System.Diagnostics; -using System.Linq; -using System.Text; using System.Threading.Tasks; using Microsoft.Extensions.Logging; using SmartCode.Configuration; @@ -12,11 +9,11 @@ namespace SmartCode.ETL { - public abstract class AbstractExtractDataSource : IDataSource, IExtractData + public abstract class AbstractExtractData : IExtractData { private readonly Project _project; private readonly ILoggerFactory _loggerFactory; - private readonly ILogger _logger; + private readonly ILogger _logger; private readonly IPluginManager _pluginManager; public abstract string Name { get; } protected ISqlMapper SqlMapper { get; private set; } @@ -25,9 +22,9 @@ public abstract class AbstractExtractDataSource : IDataSource, IExtractData private IETLTaskRepository _etlRepository; - protected AbstractExtractDataSource(Project project + protected AbstractExtractData(Project project , ILoggerFactory loggerFactory - , ILogger logger + , ILogger logger , IPluginManager pluginManager) { _project = project; @@ -37,11 +34,6 @@ protected AbstractExtractDataSource(Project project _etlRepository = _pluginManager.Resolve(_project.GetETLRepository()); } - public Task InitData() - { - return Task.CompletedTask; - } - private async Task Extract() { var queryParams = new Dictionary @@ -106,7 +98,7 @@ public void Initialize(IDictionary parameters) Initialized = true; } - public long Total { get; private set; } + public int Total { get; private set; } public int BulkSize { get; private set; } public int Offset { get; private set; } @@ -120,9 +112,10 @@ public void Initialize(IDictionary parameters) public async Task Run() { + InitParameters(); + LastExtract = await _etlRepository.GetLastExtract(_project.GetETLCode()); _project.SetETLLastExtract(LastExtract); - InitParameters(); var queryParams = new Dictionary { @@ -131,20 +124,22 @@ public async Task Run() {"LastMaxModifyTime", LastExtract.MaxModifyTime} }; - if (!String.IsNullOrEmpty(TotalCmd)) + Total = await SqlMapper.ExecuteScalarAsync(new RequestContext { - Total = await SqlMapper.ExecuteScalarAsync(new RequestContext - { - RealSql = TotalCmd, - Request = queryParams - }); - if (Total == 0) - { - _logger.LogInformation("can not find any record."); - return; - } + RealSql = TotalCmd, + Request = queryParams + }); + + if (Total == 0) + { + _logger.LogInformation("can not find any record."); + return; } + if (BulkSize == 0) + { + BulkSize = Total; + } BuildContext buildContext = null; while (Offset < Total) @@ -155,6 +150,12 @@ public async Task Run() var etlTaskId = await _etlRepository.Startup(_project.ConfigPath, _project.GetETLCode()); _project.SetETKTaskId(etlTaskId); await Extract(); + if (String.IsNullOrEmpty(TotalCmd)) + { + Total = GetCount(); + BulkSize = Total; + } + foreach (var buildKV in _project.BuildTasks) { _logger.LogInformation($"-------- BuildTask:{buildKV.Key} Start! ---------"); @@ -162,12 +163,12 @@ public async Task Run() buildContext = new BuildContext { PluginManager = _pluginManager, - DataSource = this, Project = _project, BuildKey = buildKV.Key, Build = buildKV.Value, Output = output?.Copy() }; + buildContext.SetExtractData(this); await _pluginManager.Resolve(buildKV.Value.Type).Build(buildContext); _logger.LogInformation($"-------- BuildTask:{buildKV.Key} End! ---------"); } @@ -198,10 +199,6 @@ private void InitParameters() AutoIncrement = autoIncrement; dataSource.Parameters.EnsureValue("Query", out string queryCmd); QueryCmd = queryCmd; - dataSource.Parameters.Value("Total", out String totalCmd); - TotalCmd = totalCmd; - _project.DataSource.Parameters.EnsureValue("BulkSize", out int bulkSize); - BulkSize = bulkSize; #region CreateSqlMapper @@ -212,6 +209,13 @@ private void InitParameters() .Build().SqlMapper; #endregion + + TotalCmd = dataSource.Parameters.Value("Total", out String totalCmd) + ? totalCmd + : $"Select Count(*) From ({QueryCmd.TrimEnd(';')}) as t;"; + + _project.DataSource.Parameters.Value("BulkSize", out int bulkSize); + BulkSize = bulkSize; } } } \ No newline at end of file diff --git a/src/SmartCode.ETL/BuildContextExtensions.cs b/src/SmartCode.ETL/BuildContextExtensions.cs index cb46e8b..c287138 100644 --- a/src/SmartCode.ETL/BuildContextExtensions.cs +++ b/src/SmartCode.ETL/BuildContextExtensions.cs @@ -7,14 +7,14 @@ namespace SmartCode.ETL { public static class BuildContextExtensions { - //public const String ETL_DB_TABLE = "ETLDbTable"; - //public static DbTable GetETLDbTable(this BuildContext context) - //{ - // return context.GetItem(ETL_DB_TABLE); - //} - //public static void SetETLDbTable(this BuildContext context, DbTable dbTable) - //{ - // context.SetItem(ETL_DB_TABLE, dbTable); - //} + public const String ETL_EXTRACT_DATA = "ETL_ExtractData"; + public static TExtractData GetExtractData(this BuildContext context)where TExtractData : IExtractData + { + return context.GetItem(ETL_EXTRACT_DATA); + } + public static void SetExtractData(this BuildContext context, IExtractData extractData) + { + context.SetItem(ETL_EXTRACT_DATA, extractData); + } } } diff --git a/src/SmartCode.ETL/BuildTasks/LoadBuildTask.cs b/src/SmartCode.ETL/BuildTasks/LoadBuildTask.cs index 1cf32c0..6659eb3 100644 --- a/src/SmartCode.ETL/BuildTasks/LoadBuildTask.cs +++ b/src/SmartCode.ETL/BuildTasks/LoadBuildTask.cs @@ -44,7 +44,7 @@ public async Task Build(BuildContext context) context.Build.Parameters.EnsureValue(TABLE_NAME, out string tableName); context.Build.Parameters.EnsureValue(DB_PROVIDER, out DbProvider dbProvider); var etlRepository = _pluginManager.Resolve(_project.GetETLRepository()); - var dataSource = context.GetDataSource(); + var dataSource = context.GetExtractData(); if (dataSource.TransformData.Rows.Count == 0) { await etlRepository.Load(_project.GetETKTaskId(), new Entity.ETLLoad diff --git a/src/SmartCode.ETL/BuildTasks/TransformBuildTask.cs b/src/SmartCode.ETL/BuildTasks/TransformBuildTask.cs index b3b19e8..518d54d 100644 --- a/src/SmartCode.ETL/BuildTasks/TransformBuildTask.cs +++ b/src/SmartCode.ETL/BuildTasks/TransformBuildTask.cs @@ -28,7 +28,7 @@ public async Task Build(BuildContext context) { var etlRepository = _pluginManager.Resolve(_project.GetETLRepository()); Stopwatch stopwatch = Stopwatch.StartNew(); - var dataSource = context.GetDataSource(); + var dataSource = context.GetExtractData(); if (dataSource.GetCount()> 0) { await _pluginManager.Resolve(DEFAULT_SCRIPT_ENGINE).Transform(context); diff --git a/src/SmartCode.ETL/ETLProjectBuilder.cs b/src/SmartCode.ETL/ETLProjectBuilder.cs index d363241..91de66e 100644 --- a/src/SmartCode.ETL/ETLProjectBuilder.cs +++ b/src/SmartCode.ETL/ETLProjectBuilder.cs @@ -23,7 +23,7 @@ Project project public Task Build() { - var extractData = (IExtractData) _pluginManager.Resolve(_project.DataSource.Name); + var extractData = _pluginManager.Resolve(_project.DataSource.Name); return extractData.Run(); } } diff --git a/src/SmartCode.ETL/ExtractDataSource.cs b/src/SmartCode.ETL/ExtractData.cs similarity index 86% rename from src/SmartCode.ETL/ExtractDataSource.cs rename to src/SmartCode.ETL/ExtractData.cs index 4b9cb46..6dec48f 100644 --- a/src/SmartCode.ETL/ExtractDataSource.cs +++ b/src/SmartCode.ETL/ExtractData.cs @@ -8,9 +8,9 @@ namespace SmartCode.ETL { - public class ExtractDataSource : AbstractExtractDataSource + public class ExtractData : AbstractExtractData { - public ExtractDataSource(Project project, ILoggerFactory loggerFactory, ILogger logger, + public ExtractData(Project project, ILoggerFactory loggerFactory, ILogger logger, IPluginManager pluginManager) : base(project, loggerFactory, logger, pluginManager) { } diff --git a/src/SmartCode.ETL/ExtractDictionaryDataSource.cs b/src/SmartCode.ETL/ExtractDictionaryData.cs similarity index 84% rename from src/SmartCode.ETL/ExtractDictionaryDataSource.cs rename to src/SmartCode.ETL/ExtractDictionaryData.cs index f9396e4..4e40d3a 100644 --- a/src/SmartCode.ETL/ExtractDictionaryDataSource.cs +++ b/src/SmartCode.ETL/ExtractDictionaryData.cs @@ -8,10 +8,10 @@ namespace SmartCode.ETL { - public class ExtractDictionaryDataSource : AbstractExtractDataSource + public class ExtractDictionaryData : AbstractExtractData { - public ExtractDictionaryDataSource(Project project, ILoggerFactory loggerFactory, - ILogger logger, + public ExtractDictionaryData(Project project, ILoggerFactory loggerFactory, + ILogger logger, IPluginManager pluginManager) : base(project, loggerFactory, logger, pluginManager) { } diff --git a/src/SmartCode.ETL/IExtractData.cs b/src/SmartCode.ETL/IExtractData.cs index f591419..9e357fd 100644 --- a/src/SmartCode.ETL/IExtractData.cs +++ b/src/SmartCode.ETL/IExtractData.cs @@ -4,7 +4,7 @@ namespace SmartCode.ETL { public interface IExtractData : IPlugin { - long Total { get; } + int Total { get; } int BulkSize { get; } int Offset { get; } Task Run(); diff --git a/src/SmartCode.ETL/TransformScripts/Load2PostgreSql.cshtml b/src/SmartCode.ETL/TransformScripts/Load2PostgreSql.cshtml index 8e017fa..41ecb7d 100644 --- a/src/SmartCode.ETL/TransformScripts/Load2PostgreSql.cshtml +++ b/src/SmartCode.ETL/TransformScripts/Load2PostgreSql.cshtml @@ -2,5 +2,5 @@ @using SmartCode.ETL; @model BuildContext @{ - var dataSource = Model.GetDataSource(); + var dataSource = Model.GetExtractData(); } diff --git a/src/SmartCode/BuildContextExtensions.cs b/src/SmartCode/BuildContextExtensions.cs index 8c4872d..f1904c4 100644 --- a/src/SmartCode/BuildContextExtensions.cs +++ b/src/SmartCode/BuildContextExtensions.cs @@ -10,6 +10,5 @@ public static TDataSource GetDataSource(this BuildContext context) { return (TDataSource)context.DataSource; } - } } From d47a2a1abcdc7c2398d8044da5a382346a4fb007 Mon Sep 17 00:00:00 2001 From: Ahoo Wang Date: Wed, 11 Mar 2020 21:02:21 +0800 Subject: [PATCH 102/127] add some stat to log --- build/version.props | 2 +- src/SmartCode.App/SmartCodeApp.cs | 5 +++-- src/SmartCode.ETL/AbstractExtractData.cs | 2 +- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/build/version.props b/build/version.props index a9f73f0..ff24559 100644 --- a/build/version.props +++ b/build/version.props @@ -2,7 +2,7 @@ 2 3 - 1 + 2 $(VersionMajor).$(VersionMinor).$(VersionPatch) diff --git a/src/SmartCode.App/SmartCodeApp.cs b/src/SmartCode.App/SmartCodeApp.cs index 8947914..46c037a 100644 --- a/src/SmartCode.App/SmartCodeApp.cs +++ b/src/SmartCode.App/SmartCodeApp.cs @@ -1,4 +1,5 @@ using System; +using System.Diagnostics; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using System.Threading.Tasks; @@ -7,7 +8,6 @@ using SmartCode.Configuration.ConfigBuilders; using System.Reflection; using HandlebarsDotNet; -using Newtonsoft.Json; using SmartCode.ETL; using SmartCode.Generator; @@ -115,10 +115,11 @@ public async Task Run() { Handlebars.Configuration.TextEncoder = NullTextEncoder.Instance; var projectBuilder = ServiceProvider.GetRequiredService(); + Stopwatch stopwatch = Stopwatch.StartNew(); Logger.LogInformation($"------- Build ConfigPath:{ConfigPath} Start! --------"); await projectBuilder.Build(); Logger.LogInformation( - $"-------- Build ConfigPath:{ConfigPath},Output:{Project.Output?.Path} End! --------"); + $"-------- Build ConfigPath:[{ConfigPath}],Output:[{Project.Output?.Path}],Taken:[{stopwatch.ElapsedMilliseconds}ms] End! --------"); } catch (SmartCodeException scEx) { diff --git a/src/SmartCode.ETL/AbstractExtractData.cs b/src/SmartCode.ETL/AbstractExtractData.cs index f576acd..e0e8db6 100644 --- a/src/SmartCode.ETL/AbstractExtractData.cs +++ b/src/SmartCode.ETL/AbstractExtractData.cs @@ -144,7 +144,7 @@ public async Task Run() BuildContext buildContext = null; while (Offset < Total) { - _logger.LogInformation($"-------- Offset:[{Offset}] ---------"); + _logger.LogInformation($"--------Total:[{Total}] , Offset:[{Offset}] ---------"); try { var etlTaskId = await _etlRepository.Startup(_project.ConfigPath, _project.GetETLCode()); From 8b49658ed194f45102842d513af62d99db656420 Mon Sep 17 00:00:00 2001 From: rocher Date: Fri, 27 Mar 2020 14:56:09 +0800 Subject: [PATCH 103/127] add support for CultureInfo config. --- src/SmartCode.CLI/SmartCodeCommand.cs | 40 ++++-- .../DbTypeConverter/DbTypeMap.xml | 33 +++++ .../RazorTemplates/ETL/ToMysqlTable.cshtml | 114 ++++++++++++++++++ .../RazorTemplates/Sql/DbToMySql.cshtml | 45 +++++++ 4 files changed, 220 insertions(+), 12 deletions(-) create mode 100644 src/SmartCode.Generator/RazorTemplates/ETL/ToMysqlTable.cshtml create mode 100644 src/SmartCode.Generator/RazorTemplates/Sql/DbToMySql.cshtml diff --git a/src/SmartCode.CLI/SmartCodeCommand.cs b/src/SmartCode.CLI/SmartCodeCommand.cs index 451763b..c158d8a 100644 --- a/src/SmartCode.CLI/SmartCodeCommand.cs +++ b/src/SmartCode.CLI/SmartCodeCommand.cs @@ -23,22 +23,38 @@ public class SmartCodeCommand [Argument(0, Description = "Config Path")] [FileExists] public String ConfigPath { get; set; } + + [Option("-ci|--culture-info", Description = "CultureInfo")] + public String CultureInfo { get; set; } private async Task OnExecute() { + if (!String.IsNullOrEmpty(CultureInfo)) + { + System.Globalization.CultureInfo culture = System.Globalization.CultureInfo.GetCultureInfo(CultureInfo); + System.Threading.Thread.CurrentThread.CurrentCulture = culture; + } + if (String.IsNullOrEmpty(ConfigPath)) { - var useDefaultConfig = Prompt.GetYesNo($"If you do not enter ConfigPath, you will use the default configuration:{DEFAULT_CONFIG_PATH}", true); - ConfigPath = useDefaultConfig ? DEFAULT_CONFIG_PATH + var useDefaultConfig = + Prompt.GetYesNo( + $"If you do not enter ConfigPath, you will use the default configuration:{DEFAULT_CONFIG_PATH}", + true); + ConfigPath = useDefaultConfig + ? DEFAULT_CONFIG_PATH : Prompt.GetString("Please enter the path to build configuration file:"); } SmartCodeApp app = new DefaultSmartCodeAppBuilder().Build(ConfigPath); await app.Run(); } + private static string GetVersion() - => typeof(SmartCodeCommand).Assembly.GetCustomAttribute().InformationalVersion; - [Command(name: "pull",Description = "Pull Git Template.")] + => typeof(SmartCodeCommand).Assembly.GetCustomAttribute() + .InformationalVersion; + + [Command(name: "pull", Description = "Pull Git Template.")] public class MarketCommand { private readonly IConsole _console; @@ -48,10 +64,8 @@ public MarketCommand(IConsole console) _console = console; } - [Option(Description = "Source Path")] - public String Source { get; set; } - [Option(Description = "Target Path")] - public String Target { get; set; } + [Option(Description = "Source Path")] public String Source { get; set; } + [Option(Description = "Target Path")] public String Target { get; set; } private string ParseGitArgs() { @@ -59,7 +73,7 @@ private string ParseGitArgs() return $"clone --progress -v \"{Source}\" \"{toPath}\""; } - private void OnExecute(IConsole console) + private void OnExecute(IConsole console) { var startInfo = new ProcessStartInfo("git") { @@ -74,8 +88,10 @@ private void OnExecute(IConsole console) using (var process = Process.Start(startInfo)) { - process.OutputDataReceived += Process_OutputDataReceived; ; - process.ErrorDataReceived += Process_ErrorDataReceived; ; + process.OutputDataReceived += Process_OutputDataReceived; + ; + process.ErrorDataReceived += Process_ErrorDataReceived; + ; process.BeginOutputReadLine(); process.BeginErrorReadLine(); process.WaitForExit(); @@ -95,4 +111,4 @@ private void Process_OutputDataReceived(object sender, DataReceivedEventArgs e) } } } -} +} \ No newline at end of file diff --git a/src/SmartCode.Generator/DbTypeConverter/DbTypeMap.xml b/src/SmartCode.Generator/DbTypeConverter/DbTypeMap.xml index 043423d..cb83066 100644 --- a/src/SmartCode.Generator/DbTypeConverter/DbTypeMap.xml +++ b/src/SmartCode.Generator/DbTypeConverter/DbTypeMap.xml @@ -361,6 +361,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/SmartCode.Generator/RazorTemplates/ETL/ToMysqlTable.cshtml b/src/SmartCode.Generator/RazorTemplates/ETL/ToMysqlTable.cshtml new file mode 100644 index 0000000..d4fa622 --- /dev/null +++ b/src/SmartCode.Generator/RazorTemplates/ETL/ToMysqlTable.cshtml @@ -0,0 +1,114 @@ +@using SmartCode +@using SmartCode.Db +@model BuildContext +@{ + var project = Model.Project; + var dbSource = Model.GetDataSource(); + var buildTask = Model.Build; + project.Parameters.Value("ExtractMode", out string extractMode);//Last: Full,LastMaxModifyTime,LastQueryTime,LastMaxId + bool extractModeUseTime = extractMode == "LastMaxModifyTime" || extractMode == "LastQueryTime"; + project.Parameters.Value("ExtractConnectionString", out string extractConnectionString); + extractConnectionString = extractConnectionString ?? dbSource.Database.Write.ConnectionString; + project.Parameters.Value("LoadDbProvider", out string loadDbProvider); + project.Parameters.Value("LoadConnectionString", out string loadConnectionString); + project.Parameters.Value("SecureFilePriv", out string secureFilePriv); + Model.Project.Parameters.Value("ModifyTime", out string modifyTime); + var table = Model.GetCurrentTable(); + var loadTable = extractModeUseTime ? $"{table.ConvertedName}__temp" : table.ConvertedName; + var PKColumn = Model.GetCurrentTable().PKColumn; +} + +@functions{ + string GetExtractWhere() + { + string sql = String.Empty; + Model.Project.Parameters.Value("ExtractMode", out string extractMode); + switch (extractMode) + { + case "Full": { return ""; } + case "LastMaxModifyTime": + { + Model.Project.Parameters.Value("ModifyTime", out string modifyTime); + sql = $"{modifyTime}>@LastMaxModifyTime"; + break; + } + case "LastQueryTime": + { + Model.Project.Parameters.Value("ModifyTime", out string modifyTime); + sql = $"{modifyTime}>@LastQueryTime"; + break; + } + case "LastMaxId": + default: + { + sql = $"{Model.GetCurrentTable().PKColumn.Name}>@LastMaxId"; + break; + } + } + return $"Where {sql}"; + } +} + +Author: Rocher Kong +DataSource: + Name: Extract + Parameters: + DbProvider: @dbSource.DbRepository.DbProviderName + ConnectionString: @extractConnectionString + Query: 'Select * From @table.Name @GetExtractWhere()' + PKColumn: @PKColumn.Name + AutoIncrement: @(PKColumn.AutoIncrement ? "true" : "false") + @if (!String.IsNullOrEmpty(modifyTime)) + { + @Html.PadLeft(4)ModifyTime: @modifyTime + } + + +Parameters: + ETLCode: @(project.Module).@table.Name + ETLRepository: MySql + +Build: + Transform: + Type: Transform + Parameters: + Script: + + Load: + Type: Load + Parameters: + DbProvider: @loadDbProvider + SecureFilePriv: @secureFilePriv + ConnectionString: @loadConnectionString + Table: @loadTable + @switch (extractMode) + { + case "LastMaxModifyTime": + case "LastQueryTime": + { + + PreCommand: create TEMPORARY table @(loadTable) select * from @table.ConvertedName where 1=0; + PostCommand: "delete from @table.ConvertedName where EXISTS(select * from @(loadTable) as temp where temp.@(PKColumn.ConvertedName)=t_payment.@(PKColumn.ConvertedName)); + insert into @table.ConvertedName select * from @loadTable;" + + break; + } + case "Full": + { + + PreCommand: TRUNCATE TABLE @(loadTable); + + break; + } + } + + ColumnMapping: [ + @for (var colIndex = 0; colIndex < table.Columns.Count(); colIndex++) + { + var col = table.Columns.ElementAt(colIndex); + {Column: @col.Name,Mapping: @col.ConvertedName} + if (colIndex < table.Columns.Count() - 1) + {@(",")} + @Html.NewLine() +} + ] diff --git a/src/SmartCode.Generator/RazorTemplates/Sql/DbToMySql.cshtml b/src/SmartCode.Generator/RazorTemplates/Sql/DbToMySql.cshtml new file mode 100644 index 0000000..063a432 --- /dev/null +++ b/src/SmartCode.Generator/RazorTemplates/Sql/DbToMySql.cshtml @@ -0,0 +1,45 @@ +@using SmartCode +@model BuildContext +@{ + var all_table = Model.GetCurrentAllTable(); +} +@functions { + String GetPGSqlType(SmartCode.Generator.Entity.Column col) + { + var sqlDbType = col.LanguageType; + if (string.IsNullOrEmpty(sqlDbType)) { + return "NAType"; + } + if (sqlDbType.StartsWith("varchar")) + { + if (col.DataLength == -1) { + return "text"; + } + return $"varchar({col.DataLength})"; + } + return sqlDbType; + } +} + +@foreach (var table in all_table) +{ + + /*==============================================================*/ + /* Table: @table.ConvertedName */ + /*==============================================================*/ + create table @table.ConvertedName ( + + @for (var colIndex = 0; colIndex < table.Columns.Count(); colIndex++) + { + var col = table.Columns.ElementAt(colIndex); + @col.ConvertedName @Html.PadLeft(4) @GetPGSqlType(col) @Html.PadLeft(4) @(col.IsNullable ? "null" : "not null") @(col.IsPrimaryKey?" primary key":"") @if (!String.IsNullOrEmpty(col.Description)) + { + comment '@col.Description'; + } if (colIndex < table.Columns.Count() - 1) + {@(",")} + @Html.NewLine() + } + ); + + + } From 03866e268774bd893ac07ad54aebe14c24c87355 Mon Sep 17 00:00:00 2001 From: rocher Date: Fri, 27 Mar 2020 14:58:46 +0800 Subject: [PATCH 104/127] Update version --- build/version.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/version.props b/build/version.props index ff24559..33cdef9 100644 --- a/build/version.props +++ b/build/version.props @@ -2,7 +2,7 @@ 2 3 - 2 + 3 $(VersionMajor).$(VersionMinor).$(VersionPatch) From e9b42723f90513ff5f35de2060be345f920812e2 Mon Sep 17 00:00:00 2001 From: rocher Date: Fri, 27 Mar 2020 15:54:54 +0800 Subject: [PATCH 105/127] u @table name --- src/SmartCode.Generator/RazorTemplates/ETL/ToMysqlTable.cshtml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/SmartCode.Generator/RazorTemplates/ETL/ToMysqlTable.cshtml b/src/SmartCode.Generator/RazorTemplates/ETL/ToMysqlTable.cshtml index d4fa622..5db4095 100644 --- a/src/SmartCode.Generator/RazorTemplates/ETL/ToMysqlTable.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/ETL/ToMysqlTable.cshtml @@ -88,7 +88,7 @@ Build: { PreCommand: create TEMPORARY table @(loadTable) select * from @table.ConvertedName where 1=0; - PostCommand: "delete from @table.ConvertedName where EXISTS(select * from @(loadTable) as temp where temp.@(PKColumn.ConvertedName)=t_payment.@(PKColumn.ConvertedName)); + PostCommand: "delete from @table.ConvertedName where EXISTS(select * from @(loadTable) as temp where temp.@(PKColumn.ConvertedName)=@table.@(PKColumn.ConvertedName)); insert into @table.ConvertedName select * from @loadTable;" break; From 5ecaede46fe2f50fda7cb5fa31935053b8308d1d Mon Sep 17 00:00:00 2001 From: rocher Date: Fri, 27 Mar 2020 18:22:44 +0800 Subject: [PATCH 106/127] add ETL load datetime format. --- src/SmartCode.ETL/SmartCode.ETL.csproj | 6 +++--- src/SmartCode.Generator/DbTypeConverter/DbTypeMap.xml | 10 +++++----- .../RazorTemplates/ETL/ToMysqlTable.cshtml | 6 +++++- .../RazorTemplates/Sql/DbToMySql.cshtml | 4 ++-- 4 files changed, 15 insertions(+), 11 deletions(-) diff --git a/src/SmartCode.ETL/SmartCode.ETL.csproj b/src/SmartCode.ETL/SmartCode.ETL.csproj index aed8743..8da3559 100644 --- a/src/SmartCode.ETL/SmartCode.ETL.csproj +++ b/src/SmartCode.ETL/SmartCode.ETL.csproj @@ -5,9 +5,9 @@ - - - + + + diff --git a/src/SmartCode.Generator/DbTypeConverter/DbTypeMap.xml b/src/SmartCode.Generator/DbTypeConverter/DbTypeMap.xml index cb83066..ee1e35d 100644 --- a/src/SmartCode.Generator/DbTypeConverter/DbTypeMap.xml +++ b/src/SmartCode.Generator/DbTypeConverter/DbTypeMap.xml @@ -381,13 +381,13 @@ - - + + - - + + - + diff --git a/src/SmartCode.Generator/RazorTemplates/ETL/ToMysqlTable.cshtml b/src/SmartCode.Generator/RazorTemplates/ETL/ToMysqlTable.cshtml index 5db4095..4f6606d 100644 --- a/src/SmartCode.Generator/RazorTemplates/ETL/ToMysqlTable.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/ETL/ToMysqlTable.cshtml @@ -12,6 +12,7 @@ project.Parameters.Value("LoadDbProvider", out string loadDbProvider); project.Parameters.Value("LoadConnectionString", out string loadConnectionString); project.Parameters.Value("SecureFilePriv", out string secureFilePriv); + project.Parameters.Value("DateTimeFormat", out string dateTimeFormat); Model.Project.Parameters.Value("ModifyTime", out string modifyTime); var table = Model.GetCurrentTable(); var loadTable = extractModeUseTime ? $"{table.ConvertedName}__temp" : table.ConvertedName; @@ -55,7 +56,9 @@ DataSource: Parameters: DbProvider: @dbSource.DbRepository.DbProviderName ConnectionString: @extractConnectionString - Query: 'Select * From @table.Name @GetExtractWhere()' + Query: 'Select * From @table.Name @GetExtractWhere() Order By @PKColumn.Name Asc Offset @@Offset Rows Fetch Next @@BulkSize Rows Only;' + Total: 'Select Count(*) From @table.Name With(NoLock) @GetExtractWhere()' + BulkSize: 1000 PKColumn: @PKColumn.Name AutoIncrement: @(PKColumn.AutoIncrement ? "true" : "false") @if (!String.IsNullOrEmpty(modifyTime)) @@ -79,6 +82,7 @@ Build: Parameters: DbProvider: @loadDbProvider SecureFilePriv: @secureFilePriv + DateTimeFormat: @dateTimeFormat ConnectionString: @loadConnectionString Table: @loadTable @switch (extractMode) diff --git a/src/SmartCode.Generator/RazorTemplates/Sql/DbToMySql.cshtml b/src/SmartCode.Generator/RazorTemplates/Sql/DbToMySql.cshtml index 063a432..7de3a8f 100644 --- a/src/SmartCode.Generator/RazorTemplates/Sql/DbToMySql.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/Sql/DbToMySql.cshtml @@ -32,9 +32,9 @@ @for (var colIndex = 0; colIndex < table.Columns.Count(); colIndex++) { var col = table.Columns.ElementAt(colIndex); - @col.ConvertedName @Html.PadLeft(4) @GetPGSqlType(col) @Html.PadLeft(4) @(col.IsNullable ? "null" : "not null") @(col.IsPrimaryKey?" primary key":"") @if (!String.IsNullOrEmpty(col.Description)) + @col.ConvertedName @Html.PadLeft(4) @GetPGSqlType(col) @Html.PadLeft(4) @(col.IsNullable ? "null" : "not null") @(col.IsPrimaryKey?" primary key":"") @(col.AutoIncrement?" AUTO_INCREMENT":"") @if (!String.IsNullOrEmpty(col.Description)) { - comment '@col.Description'; + comment '@col.Description' } if (colIndex < table.Columns.Count() - 1) {@(",")} @Html.NewLine() From b746fe39a1f95c3c4838c77d912cc61056ebb538 Mon Sep 17 00:00:00 2001 From: rocher Date: Fri, 27 Mar 2020 18:28:05 +0800 Subject: [PATCH 107/127] release to nuget --- build/version.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/version.props b/build/version.props index 33cdef9..4a8dbb8 100644 --- a/build/version.props +++ b/build/version.props @@ -2,7 +2,7 @@ 2 3 - 3 + 4 $(VersionMajor).$(VersionMinor).$(VersionPatch) From 44711d0e6edc5d74b16c4cfe168b880b453cbbe1 Mon Sep 17 00:00:00 2001 From: rocher Date: Mon, 30 Mar 2020 09:17:22 +0800 Subject: [PATCH 108/127] format DbTypeMap.xml --- .../DbTypeConverter/DbTypeMap.xml | 69 ++++++++++--------- 1 file changed, 36 insertions(+), 33 deletions(-) diff --git a/src/SmartCode.Generator/DbTypeConverter/DbTypeMap.xml b/src/SmartCode.Generator/DbTypeConverter/DbTypeMap.xml index ee1e35d..c18f729 100644 --- a/src/SmartCode.Generator/DbTypeConverter/DbTypeMap.xml +++ b/src/SmartCode.Generator/DbTypeConverter/DbTypeMap.xml @@ -361,39 +361,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -892,4 +859,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 856c07fc47b0506fc180c9d47d8d98d3084aeb33 Mon Sep 17 00:00:00 2001 From: Ahoo Wang Date: Wed, 29 Apr 2020 15:00:51 +0800 Subject: [PATCH 109/127] fix deleteById & getById for Java-Mybatis --- build/version.props | 2 +- .../Java/SqlMap-Partials/CURD/SqlMap-Delete.cshtml | 6 ++++-- .../Java/SqlMap-Partials/CURD/SqlMap-GetById.cshtml | 3 ++- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/build/version.props b/build/version.props index 4a8dbb8..5eac624 100644 --- a/build/version.props +++ b/build/version.props @@ -2,7 +2,7 @@ 2 3 - 4 + 5 $(VersionMajor).$(VersionMinor).$(VersionPatch) diff --git a/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/CURD/SqlMap-Delete.cshtml b/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/CURD/SqlMap-Delete.cshtml index 9f381d9..8d98c88 100644 --- a/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/CURD/SqlMap-Delete.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/CURD/SqlMap-Delete.cshtml @@ -13,15 +13,17 @@ @if (logicalDeleteKey != null) { + update @table.Name set @logicalDeleteKey =1 - where @pkCol.Name=#{@pkCol.ConvertedName} + where @pkCol.Name=#{id} } else { + delete from @table.Name - where @pkCol.Name=#{@pkCol.ConvertedName} + where @pkCol.Name=#{id} } \ No newline at end of file diff --git a/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/CURD/SqlMap-GetById.cshtml b/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/CURD/SqlMap-GetById.cshtml index 1f5e0b5..c6fc4e4 100644 --- a/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/CURD/SqlMap-GetById.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/CURD/SqlMap-GetById.cshtml @@ -10,7 +10,8 @@ } \ No newline at end of file From 483f2292a2958454e9961a4c9a08f7908d9aeeb8 Mon Sep 17 00:00:00 2001 From: xiangxiren Date: Tue, 26 May 2020 13:38:13 +0800 Subject: [PATCH 110/127] Unable to read comments for table --- src/SmartCode.Generator/Maps/Database-MySql.xml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/SmartCode.Generator/Maps/Database-MySql.xml b/src/SmartCode.Generator/Maps/Database-MySql.xml index 475823d..896b802 100644 --- a/src/SmartCode.Generator/Maps/Database-MySql.xml +++ b/src/SmartCode.Generator/Maps/Database-MySql.xml @@ -4,7 +4,8 @@ SELECT T.TABLE_NAME Name, - ( CASE WHEN T.TABLE_TYPE = 'VIEW' THEN 'V' ELSE 'T' END ) AS TypeName + ( CASE WHEN T.TABLE_TYPE = 'VIEW' THEN 'V' ELSE 'T' END ) AS TypeName, + T.TABLE_COMMENT AS `Description` FROM Information_Schema.TABLES AS T WHERE From d2361f0235e11c3c350c7bda1138d0e081b2a555 Mon Sep 17 00:00:00 2001 From: Ahoo Wang Date: Wed, 10 Jun 2020 15:51:37 +0800 Subject: [PATCH 111/127] fix queryByPage page.limit & page.offset wrong assignment of SqlMap-MySql.cshtml --- build/version.props | 2 +- .../RazorTemplates/Java/SqlMap-Partials/SqlMap-MySql.cshtml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/build/version.props b/build/version.props index 5eac624..8e0c968 100644 --- a/build/version.props +++ b/build/version.props @@ -2,7 +2,7 @@ 2 3 - 5 + 6 $(VersionMajor).$(VersionMinor).$(VersionPatch) diff --git a/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/SqlMap-MySql.cshtml b/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/SqlMap-MySql.cshtml index ad59284..5f53444 100644 --- a/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/SqlMap-MySql.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/Java/SqlMap-Partials/SqlMap-MySql.cshtml @@ -21,6 +21,6 @@ } \ No newline at end of file From f98cec44992ce9eeeb6bb8bc2f3a009fc2ac5daf Mon Sep 17 00:00:00 2001 From: Gmij Date: Tue, 17 Nov 2020 10:51:15 +0800 Subject: [PATCH 112/127] =?UTF-8?q?=E4=BF=AE=E6=94=B9oracle=E8=AF=AD?= =?UTF-8?q?=E6=B3=95=20=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SqlMap-Partials/SqlMap-Oracle.cshtml | 26 ++++++++++++------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/SqlMap-Oracle.cshtml b/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/SqlMap-Oracle.cshtml index f731536..b602c74 100644 --- a/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/SqlMap-Oracle.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/SqlMap-Oracle.cshtml @@ -51,16 +51,22 @@ { - SELECT - - (@(dbPrefix)Taken) + + select * from ( + + SELECT + + T.* From @table.Name T + + + + T.@pkCol.Name Desc + + + + ) + + ROWNUM < (@(dbPrefix)Taken) - T.* From @table.Name T - - - - T.@pkCol.Name Desc - - } From 8dfab79f42f19efe63cdddcf9823f266223b58ac Mon Sep 17 00:00:00 2001 From: Gmij Date: Tue, 17 Nov 2020 15:52:34 +0800 Subject: [PATCH 113/127] =?UTF-8?q?fix.=E9=83=A8=E5=88=86=E8=AF=AD?= =?UTF-8?q?=E6=B3=95=E9=94=99=E8=AF=AF=E3=80=82=E5=B7=B2=E5=AE=8C=E6=95=B4?= =?UTF-8?q?=E9=80=9A=E8=BF=87=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CSharp/SqlMap-Partials/SqlMap-Oracle.cshtml | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/SqlMap-Oracle.cshtml b/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/SqlMap-Oracle.cshtml index b602c74..e0ce1d2 100644 --- a/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/SqlMap-Oracle.cshtml +++ b/src/SmartCode.Generator/RazorTemplates/CSharp/SqlMap-Partials/SqlMap-Oracle.cshtml @@ -27,7 +27,7 @@ Select TT.* From (Select ROW_NUMBER() Over(Order By T.@pkCol.Name Desc) Row_Index,T.* From @table.Name T ) TT - Where TT.Row_Index Between ((@@PageIndex-1)*@@PageSize+1) And (@@PageIndex*@@PageSize) + Where TT.Row_Index Between ((@(dbPrefix)PageIndex-1)*@(dbPrefix)PageSize+1) And (@(dbPrefix)PageIndex*@(dbPrefix)PageSize) } @section GetEntity @@ -51,11 +51,9 @@ { - select * from ( SELECT - T.* From @table.Name T @@ -63,10 +61,11 @@ T.@pkCol.Name Desc - - ) + ) - ROWNUM < (@(dbPrefix)Taken) + } From 028aed6ff80e93c4c2edc0707ba3a4046187f2fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E9=BB=91=E5=85=94?= <173592829@qq.com> Date: Mon, 7 Dec 2020 10:32:35 +0800 Subject: [PATCH 114/127] =?UTF-8?q?=E7=A7=BB=E9=99=A4Input=E9=87=8D?= =?UTF-8?q?=E5=AE=9A=E5=90=91=EF=BC=8C=E8=A7=A3=E5=86=B3win7=E4=B8=8BPower?= =?UTF-8?q?Shell=20=E6=97=A0=E6=B3=95Exit=20=E7=9A=84=E9=97=AE=E9=A2=98?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/SmartCode.App/BuildTasks/ProcessBuildTask.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/SmartCode.App/BuildTasks/ProcessBuildTask.cs b/src/SmartCode.App/BuildTasks/ProcessBuildTask.cs index 8929ab0..1544dcf 100644 --- a/src/SmartCode.App/BuildTasks/ProcessBuildTask.cs +++ b/src/SmartCode.App/BuildTasks/ProcessBuildTask.cs @@ -37,7 +37,7 @@ public Task Build(BuildContext context) var startInfo = new ProcessStartInfo(fileName) { UseShellExecute = false, - RedirectStandardInput = true, + RedirectStandardInput = false, RedirectStandardOutput = true, RedirectStandardError = true, CreateNoWindow = DEFAULT_CREATE_NO_WINDOW @@ -103,7 +103,7 @@ public Task Build(BuildContext context) } _logger.LogDebug($"--------Process.FileName:{startInfo.FileName},Args:{startInfo.Arguments},Taken:{process.TotalProcessorTime.TotalMilliseconds} End--------"); } - return Task.CompletedTask; + return Task.CompletedTask; } private void Process_ErrorDataReceived(object sender, DataReceivedEventArgs e) From a382c557cf2f926219a2ceb56fdfbd79333f7091 Mon Sep 17 00:00:00 2001 From: yuanwj Date: Thu, 3 Mar 2022 11:05:31 +0800 Subject: [PATCH 115/127] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E7=94=9F=E6=88=90?= =?UTF-8?q?=E5=87=BA=E6=9D=A5=E7=9A=84=E6=96=87=E4=BB=B6=E5=9C=A8VS?= =?UTF-8?q?=E4=B8=AD=E6=8F=90=E7=A4=BA=E2=80=9C=E4=B8=8D=E4=B8=80=E8=87=B3?= =?UTF-8?q?=E7=9A=84=E8=A1=8C=E5=B0=BE=E2=80=9D=E9=97=AE=E9=A2=98=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/SmartCode.App/Outputs/FileOutput.cs | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/SmartCode.App/Outputs/FileOutput.cs b/src/SmartCode.App/Outputs/FileOutput.cs index 1efd8a3..1c089e5 100644 --- a/src/SmartCode.App/Outputs/FileOutput.cs +++ b/src/SmartCode.App/Outputs/FileOutput.cs @@ -69,21 +69,21 @@ public async Task Output(BuildContext context, Output output = null) { case Configuration.CreateMode.None: case Configuration.CreateMode.Incre: - { - _logger.LogWarning( - $"------ Mode:{output.Mode},Build:{context.BuildKey},FilePath:{filePath} Exists ignore output End! ------"); - return; - } + { + _logger.LogWarning( + $"------ Mode:{output.Mode},Build:{context.BuildKey},FilePath:{filePath} Exists ignore output End! ------"); + return; + } case Configuration.CreateMode.Full: - { - File.Delete(filePath); - _logger.LogWarning($"------ Mode:{output.Mode},FilePath:{filePath} Exists Deleted ! ------"); - break; - } + { + File.Delete(filePath); + _logger.LogWarning($"------ Mode:{output.Mode},FilePath:{filePath} Exists Deleted ! ------"); + break; + } } } - using (StreamWriter streamWriter = new StreamWriter(filePath)) + using (StreamWriter streamWriter = new StreamWriter(filePath, false, new UTF8Encoding(true))) { await streamWriter.WriteAsync(context.Result.Trim()); } From a1005f4fbd9642359f6caec735b2e06684528279 Mon Sep 17 00:00:00 2001 From: yuanwj Date: Thu, 3 Mar 2022 11:45:52 +0800 Subject: [PATCH 116/127] =?UTF-8?q?=E7=BB=9F=E4=B8=80=E8=A1=8C=E5=B0=BE?= =?UTF-8?q?=E4=B8=BA=20\R\N?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/SmartCode.App/Outputs/FileOutput.cs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/SmartCode.App/Outputs/FileOutput.cs b/src/SmartCode.App/Outputs/FileOutput.cs index 1c089e5..602a4f0 100644 --- a/src/SmartCode.App/Outputs/FileOutput.cs +++ b/src/SmartCode.App/Outputs/FileOutput.cs @@ -7,6 +7,7 @@ using HandlebarsDotNet; using SmartCode.Configuration; using SmartCode.Utilities; +using System.Text.RegularExpressions; namespace SmartCode.App.Outputs { @@ -83,9 +84,12 @@ public async Task Output(BuildContext context, Output output = null) } } + //采购VS默认的UTF-8 WITH BOM 编码 using (StreamWriter streamWriter = new StreamWriter(filePath, false, new UTF8Encoding(true))) { - await streamWriter.WriteAsync(context.Result.Trim()); + //强制行尾为 \r\n + var result = Regex.Replace(context.Result.Trim(), @"[\r\n]+", "\r\n", RegexOptions.Multiline); + await streamWriter.WriteAsync(result); } _logger.LogInformation($"------ Mode:{output.Mode},Build:{context.BuildKey} -> {filePath} End! ------"); From 4e80a8de4bbce1048255c792d4b86b00560fc23c Mon Sep 17 00:00:00 2001 From: Ahoo Wang Date: Thu, 3 Mar 2022 16:14:34 +0800 Subject: [PATCH 117/127] update version --- build/version.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/version.props b/build/version.props index 8e0c968..83651c8 100644 --- a/build/version.props +++ b/build/version.props @@ -2,7 +2,7 @@ 2 3 - 6 + 7 $(VersionMajor).$(VersionMinor).$(VersionPatch) From 704734fe3c83239169081984e4099d9f6a53aedf Mon Sep 17 00:00:00 2001 From: yuanwj Date: Fri, 11 Mar 2022 16:54:44 +0800 Subject: [PATCH 118/127] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=A4=9A=E5=B0=91?= =?UTF-8?q?=E7=BA=BF=E7=A8=8B=E6=9E=84=E5=BB=BA=EF=BC=8C=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?WaitPre?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../GeneratorProjectBuilder.cs | 53 ++++++++++++++----- src/SmartCode/Configuration/Build.cs | 4 ++ 2 files changed, 44 insertions(+), 13 deletions(-) diff --git a/src/SmartCode.Generator/GeneratorProjectBuilder.cs b/src/SmartCode.Generator/GeneratorProjectBuilder.cs index 7944eb3..1378ddf 100644 --- a/src/SmartCode.Generator/GeneratorProjectBuilder.cs +++ b/src/SmartCode.Generator/GeneratorProjectBuilder.cs @@ -1,3 +1,5 @@ +using System.Collections.Generic; +using System.Threading; using System.Threading.Tasks; using Microsoft.Extensions.Logging; using SmartCode.Configuration; @@ -9,6 +11,7 @@ public class GeneratorProjectBuilder : IProjectBuilder private readonly Project _project; private readonly IPluginManager _pluginManager; private readonly ILogger _logger; + private CountdownEvent countdown = new CountdownEvent(1); public GeneratorProjectBuilder( Project project @@ -23,25 +26,49 @@ Project project public async Task Build() { - BuildContext buildContext = null; var dataSource = _pluginManager.Resolve(_project.DataSource.Name); await dataSource.InitData(); + + this.countdown.Reset(); foreach (var buildKV in _project.BuildTasks) { - _logger.LogInformation($"-------- BuildTask:{buildKV.Key} Start! ---------"); - var output = buildKV.Value.Output; - buildContext = new BuildContext + if (!buildKV.Value.WaitPre) { - PluginManager = _pluginManager, - Project = _project, - DataSource = dataSource, - BuildKey = buildKV.Key, - Build = buildKV.Value, - Output = output?.Copy() - }; - await _pluginManager.Resolve(buildKV.Value.Type).Build(buildContext); - _logger.LogInformation($"-------- BuildTask:{buildKV.Key} End! ---------"); + this.countdown.AddCount(); + Thread t = new Thread((obj) => + { + var p = ((KeyValuePair buildKV, IDataSource dataSource))obj; + BuildTask(buildKV, dataSource); + this.countdown.Signal(); + }); + + t.Start((buildKV, dataSource)); + continue; + } + + this.countdown.Signal(); + this.countdown.Wait(); + this.countdown.Reset(); + + BuildTask(buildKV, dataSource); } } + + private void BuildTask(KeyValuePair buildKV, IDataSource dataSource) + { + _logger.LogInformation($"-------- BuildTask:{buildKV.Key} Start! ---------"); + var output = buildKV.Value.Output; + BuildContext buildContext = new BuildContext + { + PluginManager = _pluginManager, + Project = _project, + DataSource = dataSource, + BuildKey = buildKV.Key, + Build = buildKV.Value, + Output = output?.Copy() + }; + _pluginManager.Resolve(buildKV.Value.Type).Build(buildContext).Wait(); + _logger.LogInformation($"-------- BuildTask:{buildKV.Key} End! ---------"); + } } } \ No newline at end of file diff --git a/src/SmartCode/Configuration/Build.cs b/src/SmartCode/Configuration/Build.cs index 72a75aa..50589e4 100644 --- a/src/SmartCode/Configuration/Build.cs +++ b/src/SmartCode/Configuration/Build.cs @@ -21,6 +21,10 @@ public class Build public bool? IgnoreView { get; set; } public NamingConverter NamingConverter { get; set; } /// + /// 是否等待前序任务 + /// + public bool WaitPre { get; set; } = true; + /// /// 自定义构建参数 /// public IDictionary Parameters { get; set; } From b631dc095113c08e054677ae53850121a875452c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E9=BB=91=E5=85=94?= Date: Sun, 13 Mar 2022 23:56:40 +0800 Subject: [PATCH 119/127] =?UTF-8?q?=E5=8D=95=E4=B8=AA=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=E5=86=85=E5=B9=B6=E8=A1=8C=E7=94=9F=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BuildTasks/TableBuildTask.cs | 35 ++++++++++---- .../GeneratorProjectBuilder.cs | 47 +++++-------------- src/SmartCode/Configuration/Build.cs | 4 -- 3 files changed, 38 insertions(+), 48 deletions(-) diff --git a/src/SmartCode.Generator/BuildTasks/TableBuildTask.cs b/src/SmartCode.Generator/BuildTasks/TableBuildTask.cs index 92ff6ed..065e8a3 100644 --- a/src/SmartCode.Generator/BuildTasks/TableBuildTask.cs +++ b/src/SmartCode.Generator/BuildTasks/TableBuildTask.cs @@ -28,16 +28,33 @@ public override async Task Build(BuildContext context) var filterTables = FilterTable(context.GetDataSource().Tables, context.BuildKey, context.Build); context.SetCurrentAllTable(filterTables); - foreach (var table in filterTables) + var tasks = filterTables.Select(table => { - _logger.LogInformation($"BuildTable:{table.Name} Start!"); - context.SetCurrentTable(table); - _pluginManager.Resolve().Convert(context); - context.Result = await _pluginManager.Resolve(context.Build.TemplateEngine.Name) - .Render(context); - await _pluginManager.Resolve(context.Build.Output.Type).Output(context); - _logger.LogInformation($"BuildTable:{table.Name} End!"); - } + BuildContext newContext = new BuildContext(); + newContext.Project = context.Project; + newContext.DataSource = context.DataSource; + newContext.PluginManager = context.PluginManager; + newContext.BuildKey = context.BuildKey; + newContext.Build = context.Build; + newContext.Result = context.Result; + newContext.Output = context.Output; + newContext.SetCurrentTable(table); + + return BuildTable(newContext); + }).ToArray(); + + await Task.WhenAll(tasks); + } + + private async Task BuildTable(BuildContext context) + { + var table = context.GetCurrentTable(); + _logger.LogInformation($"BuildTable:{table.Name} Start!"); + _pluginManager.Resolve().Convert(context); + context.Result = await _pluginManager.Resolve(context.Build.TemplateEngine.Name) + .Render(context); + await _pluginManager.Resolve(context.Build.Output.Type).Output(context); + _logger.LogInformation($"BuildTable:{table.Name} End!"); } public override void Initialize(IDictionary parameters) diff --git a/src/SmartCode.Generator/GeneratorProjectBuilder.cs b/src/SmartCode.Generator/GeneratorProjectBuilder.cs index 1378ddf..b2eb087 100644 --- a/src/SmartCode.Generator/GeneratorProjectBuilder.cs +++ b/src/SmartCode.Generator/GeneratorProjectBuilder.cs @@ -32,43 +32,20 @@ public async Task Build() this.countdown.Reset(); foreach (var buildKV in _project.BuildTasks) { - if (!buildKV.Value.WaitPre) + _logger.LogInformation($"-------- BuildTask:{buildKV.Key} Start! ---------"); + var output = buildKV.Value.Output; + var buildContext = new BuildContext { - this.countdown.AddCount(); - Thread t = new Thread((obj) => - { - var p = ((KeyValuePair buildKV, IDataSource dataSource))obj; - BuildTask(buildKV, dataSource); - this.countdown.Signal(); - }); - - t.Start((buildKV, dataSource)); - continue; - } - - this.countdown.Signal(); - this.countdown.Wait(); - this.countdown.Reset(); - - BuildTask(buildKV, dataSource); + PluginManager = _pluginManager, + Project = _project, + DataSource = dataSource, + BuildKey = buildKV.Key, + Build = buildKV.Value, + Output = output?.Copy() + }; + await _pluginManager.Resolve(buildKV.Value.Type).Build(buildContext); + _logger.LogInformation($"-------- BuildTask:{buildKV.Key} End! ---------"); } } - - private void BuildTask(KeyValuePair buildKV, IDataSource dataSource) - { - _logger.LogInformation($"-------- BuildTask:{buildKV.Key} Start! ---------"); - var output = buildKV.Value.Output; - BuildContext buildContext = new BuildContext - { - PluginManager = _pluginManager, - Project = _project, - DataSource = dataSource, - BuildKey = buildKV.Key, - Build = buildKV.Value, - Output = output?.Copy() - }; - _pluginManager.Resolve(buildKV.Value.Type).Build(buildContext).Wait(); - _logger.LogInformation($"-------- BuildTask:{buildKV.Key} End! ---------"); - } } } \ No newline at end of file diff --git a/src/SmartCode/Configuration/Build.cs b/src/SmartCode/Configuration/Build.cs index 50589e4..72a75aa 100644 --- a/src/SmartCode/Configuration/Build.cs +++ b/src/SmartCode/Configuration/Build.cs @@ -21,10 +21,6 @@ public class Build public bool? IgnoreView { get; set; } public NamingConverter NamingConverter { get; set; } /// - /// 是否等待前序任务 - /// - public bool WaitPre { get; set; } = true; - /// /// 自定义构建参数 /// public IDictionary Parameters { get; set; } From 724bf74b889517a355687c3d427cfb269dc24e90 Mon Sep 17 00:00:00 2001 From: yuanwj Date: Mon, 14 Mar 2022 01:50:44 +0800 Subject: [PATCH 120/127] =?UTF-8?q?=E5=8D=95=E4=BB=BB=E5=8A=A1=E5=A4=9A?= =?UTF-8?q?=E7=BA=BF=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BuildTasks/TableBuildTask.cs | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/src/SmartCode.Generator/BuildTasks/TableBuildTask.cs b/src/SmartCode.Generator/BuildTasks/TableBuildTask.cs index 065e8a3..d34cbff 100644 --- a/src/SmartCode.Generator/BuildTasks/TableBuildTask.cs +++ b/src/SmartCode.Generator/BuildTasks/TableBuildTask.cs @@ -28,6 +28,11 @@ public override async Task Build(BuildContext context) var filterTables = FilterTable(context.GetDataSource().Tables, context.BuildKey, context.Build); context.SetCurrentAllTable(filterTables); + + var nameConverter = _pluginManager.Resolve(); + var templateEngine = _pluginManager.Resolve(context.Build.TemplateEngine.Name); + var output = _pluginManager.Resolve(context.Build.Output.Type); + var tasks = filterTables.Select(table => { BuildContext newContext = new BuildContext(); @@ -40,20 +45,20 @@ public override async Task Build(BuildContext context) newContext.Output = context.Output; newContext.SetCurrentTable(table); - return BuildTable(newContext); + return Task.Factory.StartNew(BuildTable,(newContext, nameConverter, templateEngine, output), TaskCreationOptions.LongRunning); }).ToArray(); await Task.WhenAll(tasks); } - private async Task BuildTable(BuildContext context) + private async void BuildTable(object obj) { - var table = context.GetCurrentTable(); + var p=((BuildContext context, INamingConverter nameConverter, ITemplateEngine templateEngine, IOutput output)) obj; + var table = p.context.GetCurrentTable(); _logger.LogInformation($"BuildTable:{table.Name} Start!"); - _pluginManager.Resolve().Convert(context); - context.Result = await _pluginManager.Resolve(context.Build.TemplateEngine.Name) - .Render(context); - await _pluginManager.Resolve(context.Build.Output.Type).Output(context); + p.nameConverter.Convert(p.context); + p.context.Result = await p.templateEngine.Render(p.context); + await p.output.Output(p.context); _logger.LogInformation($"BuildTable:{table.Name} End!"); } From c2a4da82296382f2e36fcedcd0efd896dbf6f0e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E9=BB=91=E5=85=94?= Date: Tue, 15 Mar 2022 01:22:00 +0800 Subject: [PATCH 121/127] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=E4=BE=9D=E8=B5=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../GeneratorProjectBuilder.cs | 70 +++++++++++++++---- src/SmartCode/BuildContext.cs | 5 ++ src/SmartCode/Configuration/Build.cs | 6 +- 3 files changed, 65 insertions(+), 16 deletions(-) diff --git a/src/SmartCode.Generator/GeneratorProjectBuilder.cs b/src/SmartCode.Generator/GeneratorProjectBuilder.cs index b2eb087..a1bbff8 100644 --- a/src/SmartCode.Generator/GeneratorProjectBuilder.cs +++ b/src/SmartCode.Generator/GeneratorProjectBuilder.cs @@ -1,4 +1,5 @@ using System.Collections.Generic; +using System.Linq; using System.Threading; using System.Threading.Tasks; using Microsoft.Extensions.Logging; @@ -11,7 +12,6 @@ public class GeneratorProjectBuilder : IProjectBuilder private readonly Project _project; private readonly IPluginManager _pluginManager; private readonly ILogger _logger; - private CountdownEvent countdown = new CountdownEvent(1); public GeneratorProjectBuilder( Project project @@ -23,29 +23,69 @@ Project project _logger = logger; } + CountdownEvent countdown = new CountdownEvent(1); public async Task Build() { var dataSource = _pluginManager.Resolve(_project.DataSource.Name); await dataSource.InitData(); - this.countdown.Reset(); - foreach (var buildKV in _project.BuildTasks) + //foreach (var buildKV in _project.BuildTasks) + //{ + // _logger.LogInformation($"-------- BuildTask:{buildKV.Key} Start! ---------"); + // var output = buildKV.Value.Output; + // var buildContext = new BuildContext + // { + // PluginManager = _pluginManager, + // Project = _project, + // DataSource = dataSource, + // BuildKey = buildKV.Key, + // Build = buildKV.Value, + // Output = output?.Copy() + // }; + // await _pluginManager.Resolve(buildKV.Value.Type).Build(buildContext); + // _logger.LogInformation($"-------- BuildTask:{buildKV.Key} End! ---------"); + //} + BuildContext[] contexts = _project.BuildTasks.Select(d => new BuildContext { - _logger.LogInformation($"-------- BuildTask:{buildKV.Key} Start! ---------"); - var output = buildKV.Value.Output; - var buildContext = new BuildContext + PluginManager = _pluginManager, + Project = _project, + DataSource = dataSource, + BuildKey = d.Key, + Build = d.Value, + Output = d.Value.Output?.Copy(), + }).ToArray(); + foreach (var context in contexts) + { + context.DependOn = contexts.Where(d => d.Build.DependOn.Contains(d.BuildKey)).ToArray(); + } + countdown.Reset(); + foreach (var context in contexts) + { + context.BuildTask = Task.Factory.StartNew(this.BuildTask, null, TaskCreationOptions.LongRunning); + } + + countdown.Signal(); + } + private async void BuildTask(object obj) + { + countdown.Wait(); + var context = (BuildContext)obj; + _logger.LogInformation($"-------- BuildTask:{context.BuildKey} Wait! ---------"); + //ȴ + if (context.DependOn != null) + { + foreach (var dcontext in context.DependOn) { - PluginManager = _pluginManager, - Project = _project, - DataSource = dataSource, - BuildKey = buildKV.Key, - Build = buildKV.Value, - Output = output?.Copy() - }; - await _pluginManager.Resolve(buildKV.Value.Type).Build(buildContext); - _logger.LogInformation($"-------- BuildTask:{buildKV.Key} End! ---------"); + await dcontext.BuildTask; + } } + + _logger.LogInformation($"-------- BuildTask:{context.BuildKey} Start! ---------"); + //ִ + await _pluginManager.Resolve(context.Build.Type).Build(context); + + _logger.LogInformation($"-------- BuildTask:{context.BuildKey} End! ---------"); } } } \ No newline at end of file diff --git a/src/SmartCode/BuildContext.cs b/src/SmartCode/BuildContext.cs index 3abddaa..2259d52 100644 --- a/src/SmartCode/BuildContext.cs +++ b/src/SmartCode/BuildContext.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Text; +using System.Threading.Tasks; using SmartCode.Configuration; namespace SmartCode @@ -26,5 +27,9 @@ public void SetItem(string key, object item) { Items[key] = item; } + + public IEnumerable DependOn { get; set; } + public IEnumerable Next { get; set; } + public Task BuildTask { get; set; } } } diff --git a/src/SmartCode/Configuration/Build.cs b/src/SmartCode/Configuration/Build.cs index 72a75aa..f00f859 100644 --- a/src/SmartCode/Configuration/Build.cs +++ b/src/SmartCode/Configuration/Build.cs @@ -13,7 +13,7 @@ public class Build /// public String Type { get; set; } public String Module { get; set; } - public TemplateEngine TemplateEngine { get; set; } + public TemplateEngine TemplateEngine { get; set; } public Output Output { get; set; } public IEnumerable IncludeTables { get; set; } public IEnumerable IgnoreTables { get; set; } @@ -21,6 +21,10 @@ public class Build public bool? IgnoreView { get; set; } public NamingConverter NamingConverter { get; set; } /// + /// 依赖于 + /// + public IEnumerable DependOn { get; set; } + /// /// 自定义构建参数 /// public IDictionary Parameters { get; set; } From 96f10dce0dcfafd53f0b16609ce2d075b010c44f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E9=BB=91=E5=85=94?= Date: Tue, 15 Mar 2022 01:40:43 +0800 Subject: [PATCH 122/127] =?UTF-8?q?=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../GeneratorProjectBuilder.cs | 25 +++++-------------- src/SmartCode/BuildContext.cs | 1 - 2 files changed, 6 insertions(+), 20 deletions(-) diff --git a/src/SmartCode.Generator/GeneratorProjectBuilder.cs b/src/SmartCode.Generator/GeneratorProjectBuilder.cs index a1bbff8..de5ba8a 100644 --- a/src/SmartCode.Generator/GeneratorProjectBuilder.cs +++ b/src/SmartCode.Generator/GeneratorProjectBuilder.cs @@ -30,22 +30,6 @@ public async Task Build() var dataSource = _pluginManager.Resolve(_project.DataSource.Name); await dataSource.InitData(); - //foreach (var buildKV in _project.BuildTasks) - //{ - // _logger.LogInformation($"-------- BuildTask:{buildKV.Key} Start! ---------"); - // var output = buildKV.Value.Output; - // var buildContext = new BuildContext - // { - // PluginManager = _pluginManager, - // Project = _project, - // DataSource = dataSource, - // BuildKey = buildKV.Key, - // Build = buildKV.Value, - // Output = output?.Copy() - // }; - // await _pluginManager.Resolve(buildKV.Value.Type).Build(buildContext); - // _logger.LogInformation($"-------- BuildTask:{buildKV.Key} End! ---------"); - //} BuildContext[] contexts = _project.BuildTasks.Select(d => new BuildContext { PluginManager = _pluginManager, @@ -57,21 +41,24 @@ public async Task Build() }).ToArray(); foreach (var context in contexts) { - context.DependOn = contexts.Where(d => d.Build.DependOn.Contains(d.BuildKey)).ToArray(); + context.DependOn = contexts.Where(d => context.Build.DependOn != null && context.Build.DependOn.Contains(d.BuildKey)).ToArray(); } + countdown.Reset(); foreach (var context in contexts) { - context.BuildTask = Task.Factory.StartNew(this.BuildTask, null, TaskCreationOptions.LongRunning); + context.BuildTask = Task.Factory.StartNew(this.BuildTask, context, TaskCreationOptions.LongRunning); } countdown.Signal(); + + await Task.WhenAll(contexts.Select(d => d.BuildTask).ToArray()); } private async void BuildTask(object obj) { - countdown.Wait(); var context = (BuildContext)obj; _logger.LogInformation($"-------- BuildTask:{context.BuildKey} Wait! ---------"); + countdown.Wait(); //ȴ if (context.DependOn != null) { diff --git a/src/SmartCode/BuildContext.cs b/src/SmartCode/BuildContext.cs index 2259d52..7a45494 100644 --- a/src/SmartCode/BuildContext.cs +++ b/src/SmartCode/BuildContext.cs @@ -29,7 +29,6 @@ public void SetItem(string key, object item) } public IEnumerable DependOn { get; set; } - public IEnumerable Next { get; set; } public Task BuildTask { get; set; } } } From 43eb0ade8f88c9f895fa384b382c6e18e32deb46 Mon Sep 17 00:00:00 2001 From: yuanwj Date: Tue, 15 Mar 2022 11:52:06 +0800 Subject: [PATCH 123/127] =?UTF-8?q?=E5=AE=8C=E5=96=84=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=E4=BE=9D=E8=B5=96=EF=BC=8C=E7=A7=BB=E9=99=A4=E5=8D=95=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1=E5=B9=B6=E8=A1=8C=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/SmartCode.App/PluginManager.cs | 22 ++++--- src/SmartCode.CLI/Program.cs | 6 +- .../BuildTasks/TableBuildTask.cs | 41 +++--------- .../GeneratorProjectBuilder.cs | 64 +++++++++++++------ src/SmartCode/BuildContext.cs | 7 +- 5 files changed, 77 insertions(+), 63 deletions(-) diff --git a/src/SmartCode.App/PluginManager.cs b/src/SmartCode.App/PluginManager.cs index c0128a6..498911f 100644 --- a/src/SmartCode.App/PluginManager.cs +++ b/src/SmartCode.App/PluginManager.cs @@ -56,19 +56,23 @@ private IEnumerable ResolvePlugins() where TPlugin : IPlugin var plugins = _serviceProvider.GetServices(); foreach (var plugin in plugins) { - if (!plugin.Initialized) + lock (this) { - var pluginType = plugin.GetType(); - var names = pluginType.AssemblyQualifiedName.Split(','); - var typeName = names[0].Trim(); - var assName = names[1].Trim(); - var pluginConfig = _smartCodeOptions - .Plugins - .FirstOrDefault(m => m.ImplAssemblyName == assName && m.ImplTypeName == typeName); - plugin.Initialize(pluginConfig.Parameters); + if (!plugin.Initialized) + { + var pluginType = plugin.GetType(); + var names = pluginType.AssemblyQualifiedName.Split(','); + var typeName = names[0].Trim(); + var assName = names[1].Trim(); + var pluginConfig = _smartCodeOptions + .Plugins + .FirstOrDefault(m => m.ImplAssemblyName == assName && m.ImplTypeName == typeName); + plugin.Initialize(pluginConfig.Parameters); + } } } return plugins; + } } } diff --git a/src/SmartCode.CLI/Program.cs b/src/SmartCode.CLI/Program.cs index fa00641..e54f256 100644 --- a/src/SmartCode.CLI/Program.cs +++ b/src/SmartCode.CLI/Program.cs @@ -12,9 +12,11 @@ namespace SmartCode.CLI { class Program { - static async Task Main(string[] args) + static async Task Main(string[] args) { - await CommandLineApplication.ExecuteAsync(args); + ThreadPool.SetMinThreads(1000, 1000); + ThreadPool.SetMaxThreads(1000, 1000); + await CommandLineApplication.ExecuteAsync(args); } } } diff --git a/src/SmartCode.Generator/BuildTasks/TableBuildTask.cs b/src/SmartCode.Generator/BuildTasks/TableBuildTask.cs index d34cbff..42dc537 100644 --- a/src/SmartCode.Generator/BuildTasks/TableBuildTask.cs +++ b/src/SmartCode.Generator/BuildTasks/TableBuildTask.cs @@ -5,6 +5,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Threading; using System.Threading.Tasks; namespace SmartCode.Generator.BuildTasks @@ -28,38 +29,16 @@ public override async Task Build(BuildContext context) var filterTables = FilterTable(context.GetDataSource().Tables, context.BuildKey, context.Build); context.SetCurrentAllTable(filterTables); - - var nameConverter = _pluginManager.Resolve(); - var templateEngine = _pluginManager.Resolve(context.Build.TemplateEngine.Name); - var output = _pluginManager.Resolve(context.Build.Output.Type); - - var tasks = filterTables.Select(table => + foreach (var table in filterTables) { - BuildContext newContext = new BuildContext(); - newContext.Project = context.Project; - newContext.DataSource = context.DataSource; - newContext.PluginManager = context.PluginManager; - newContext.BuildKey = context.BuildKey; - newContext.Build = context.Build; - newContext.Result = context.Result; - newContext.Output = context.Output; - newContext.SetCurrentTable(table); - - return Task.Factory.StartNew(BuildTable,(newContext, nameConverter, templateEngine, output), TaskCreationOptions.LongRunning); - }).ToArray(); - - await Task.WhenAll(tasks); - } - - private async void BuildTable(object obj) - { - var p=((BuildContext context, INamingConverter nameConverter, ITemplateEngine templateEngine, IOutput output)) obj; - var table = p.context.GetCurrentTable(); - _logger.LogInformation($"BuildTable:{table.Name} Start!"); - p.nameConverter.Convert(p.context); - p.context.Result = await p.templateEngine.Render(p.context); - await p.output.Output(p.context); - _logger.LogInformation($"BuildTable:{table.Name} End!"); + _logger.LogInformation($"BuildTable:{table.Name} Start!"); + context.SetCurrentTable(table); + _pluginManager.Resolve().Convert(context); + context.Result = await _pluginManager.Resolve(context.Build.TemplateEngine.Name) + .Render(context); + await _pluginManager.Resolve(context.Build.Output.Type).Output(context); + _logger.LogInformation($"BuildTable:{table.Name} End!"); + } } public override void Initialize(IDictionary parameters) diff --git a/src/SmartCode.Generator/GeneratorProjectBuilder.cs b/src/SmartCode.Generator/GeneratorProjectBuilder.cs index de5ba8a..7a99583 100644 --- a/src/SmartCode.Generator/GeneratorProjectBuilder.cs +++ b/src/SmartCode.Generator/GeneratorProjectBuilder.cs @@ -1,3 +1,4 @@ +using System; using System.Collections.Generic; using System.Linq; using System.Threading; @@ -25,12 +26,13 @@ Project project CountdownEvent countdown = new CountdownEvent(1); + public async Task Build() { var dataSource = _pluginManager.Resolve(_project.DataSource.Name); await dataSource.InitData(); - BuildContext[] contexts = _project.BuildTasks.Select(d => new BuildContext + IList allContexts = _project.BuildTasks.Select(d => new BuildContext { PluginManager = _pluginManager, Project = _project, @@ -39,40 +41,64 @@ public async Task Build() Build = d.Value, Output = d.Value.Output?.Copy(), }).ToArray(); - foreach (var context in contexts) + foreach (var context in allContexts) { - context.DependOn = contexts.Where(d => context.Build.DependOn != null && context.Build.DependOn.Contains(d.BuildKey)).ToArray(); + if (context.Build.DependOn != null && context.Build.DependOn.Count() > 0) + { + context.DependOn = allContexts.Where(d => context.Build.DependOn.Contains(d.BuildKey)).ToArray(); + } } - countdown.Reset(); - foreach (var context in contexts) + countdown.AddCount(allContexts.Count); + foreach (var context in allContexts) + { + context.CountDown.Reset(); + if (context.DependOn != null && context.DependOn.Count > 0) + { + context.CountDown.AddCount(context.DependOn.Count); + } + + ThreadPool.QueueUserWorkItem(this.BuildTask, (context, allContexts)); + } + + foreach (var context in allContexts) { - context.BuildTask = Task.Factory.StartNew(this.BuildTask, context, TaskCreationOptions.LongRunning); + context.CountDown.Signal(); } countdown.Signal(); - - await Task.WhenAll(contexts.Select(d => d.BuildTask).ToArray()); + countdown.Wait(); } + private async void BuildTask(object obj) { - var context = (BuildContext)obj; - _logger.LogInformation($"-------- BuildTask:{context.BuildKey} Wait! ---------"); - countdown.Wait(); + var p = ((BuildContext context, IList allContexts))obj; + + if (p.context.DependOn != null && p.context.DependOn.Count > 0) + { + _logger.LogInformation($"-------- BuildTask:{p.context.BuildKey} Wait [{string.Join(",", p.context.DependOn?.Select(d => d.BuildKey)?.ToArray())}]---------"); + } //ȴ - if (context.DependOn != null) + p.context.CountDown.Wait(); + + _logger.LogInformation($"-------- BuildTask:{p.context.BuildKey} Start! ---------"); + //ִ + await _pluginManager.Resolve(p.context.Build.Type).Build(p.context); + + foreach (var c in p.allContexts) { - foreach (var dcontext in context.DependOn) + if(c.DependOn==null || c.DependOn.Count == 0) + { + continue; + } + if (c.DependOn.Contains(p.context)) { - await dcontext.BuildTask; + c.CountDown.Signal(); } } - _logger.LogInformation($"-------- BuildTask:{context.BuildKey} Start! ---------"); - //ִ - await _pluginManager.Resolve(context.Build.Type).Build(context); - - _logger.LogInformation($"-------- BuildTask:{context.BuildKey} End! ---------"); + countdown.Signal(); + _logger.LogInformation($"-------- BuildTask:{p.context.BuildKey} End! ---------"); } } } \ No newline at end of file diff --git a/src/SmartCode/BuildContext.cs b/src/SmartCode/BuildContext.cs index 7a45494..9746c0d 100644 --- a/src/SmartCode/BuildContext.cs +++ b/src/SmartCode/BuildContext.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Text; +using System.Threading; using System.Threading.Tasks; using SmartCode.Configuration; @@ -8,6 +9,7 @@ namespace SmartCode { public class BuildContext { + public Project Project { get; set; } public IDataSource DataSource { get; set; } public IPluginManager PluginManager { get; set; } @@ -28,7 +30,8 @@ public void SetItem(string key, object item) Items[key] = item; } - public IEnumerable DependOn { get; set; } - public Task BuildTask { get; set; } + public IList DependOn { get; set; } + //public Task BuildTask { get; set; } + public CountdownEvent CountDown { get; } = new CountdownEvent(1); } } From f0cd4985d623d2c0d3efe9cd969649d7f2ab3184 Mon Sep 17 00:00:00 2001 From: yuanwj Date: Tue, 15 Mar 2022 15:56:47 +0800 Subject: [PATCH 124/127] =?UTF-8?q?=E4=B8=BA=E9=A1=B9=E7=9B=AE=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=20AllowParallel=20=E9=85=8D=E7=BD=AE=E3=80=82?= =?UTF-8?q?=E5=BD=93AllowParallel=20=E4=B8=BAfalse=20=E6=88=96=E8=80=85All?= =?UTF-8?q?owParallel=20=E4=B8=8D=E5=AD=98=E5=9C=A8=E6=97=B6=EF=BC=8C?= =?UTF-8?q?=E5=BF=BD=E7=95=A5DependOn=E9=85=8D=E7=BD=AE=E3=80=82=E6=89=80?= =?UTF-8?q?=E4=BB=A5=E6=9E=84=E5=BB=BA=E4=BB=BB=E5=8A=A1=E6=8C=89=E9=A1=BA?= =?UTF-8?q?=E5=BA=8F=E4=B8=80=E6=AC=A1=E6=89=A7=E8=A1=8C=E3=80=82=E8=BF=99?= =?UTF-8?q?=E6=A0=B7=E5=8F=AF=E4=BB=A5=E6=8A=B1=E6=9E=95=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E5=9C=A8=E5=8D=87=E7=BA=A7=E6=96=B0=E7=89=88=E6=9C=ACsmarcode?= =?UTF-8?q?=20=E5=90=8E=EF=BC=8C=E4=B8=8D=E4=BF=AE=E6=94=B9=E6=A8=A1?= =?UTF-8?q?=E7=89=88=E4=B9=9F=E8=83=BD=E6=AD=A3=E5=B8=B8=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../GeneratorProjectBuilder.cs | 45 +++++++++++++++++-- src/SmartCode/Configuration/Project.cs | 1 + 2 files changed, 42 insertions(+), 4 deletions(-) diff --git a/src/SmartCode.Generator/GeneratorProjectBuilder.cs b/src/SmartCode.Generator/GeneratorProjectBuilder.cs index 7a99583..d43ac21 100644 --- a/src/SmartCode.Generator/GeneratorProjectBuilder.cs +++ b/src/SmartCode.Generator/GeneratorProjectBuilder.cs @@ -32,6 +32,41 @@ public async Task Build() var dataSource = _pluginManager.Resolve(_project.DataSource.Name); await dataSource.InitData(); + if (_project.AllowParallel) + { + await this.ParallelBuild(dataSource); + } + else + { + await this.SerialBuild(dataSource); + } + } + + public async Task SerialBuild(IDataSource dataSource) + { + foreach (var buildKV in _project.BuildTasks) + { + _logger.LogInformation($"-------- BuildTask:{buildKV.Key} Start! ---------"); + var context = new BuildContext + { + PluginManager = _pluginManager, + Project = _project, + DataSource = dataSource, + BuildKey = buildKV.Key, + Build = buildKV.Value, + Output = buildKV.Value.Output?.Copy(), + }; + + //ִ + await _pluginManager.Resolve(context.Build.Type).Build(context); + + _logger.LogInformation($"-------- BuildTask:{buildKV.Key} End! ---------"); + } + } + + private Task ParallelBuild(IDataSource dataSource) + { + IList allContexts = _project.BuildTasks.Select(d => new BuildContext { PluginManager = _pluginManager, @@ -57,8 +92,8 @@ public async Task Build() { context.CountDown.AddCount(context.DependOn.Count); } - - ThreadPool.QueueUserWorkItem(this.BuildTask, (context, allContexts)); + + ThreadPool.QueueUserWorkItem((obj) => _ = this.BuildTask(obj), (context, allContexts)); } foreach (var context in allContexts) @@ -68,9 +103,11 @@ public async Task Build() countdown.Signal(); countdown.Wait(); + + return Task.CompletedTask; } - private async void BuildTask(object obj) + private async Task BuildTask(object obj) { var p = ((BuildContext context, IList allContexts))obj; @@ -87,7 +124,7 @@ private async void BuildTask(object obj) foreach (var c in p.allContexts) { - if(c.DependOn==null || c.DependOn.Count == 0) + if (c.DependOn == null || c.DependOn.Count == 0) { continue; } diff --git a/src/SmartCode/Configuration/Project.cs b/src/SmartCode/Configuration/Project.cs index ed9d7d2..92deb0b 100644 --- a/src/SmartCode/Configuration/Project.cs +++ b/src/SmartCode/Configuration/Project.cs @@ -11,6 +11,7 @@ public class Project public String ConfigPath { get; set; } public String Module { get; set; } public String Author { get; set; } + public bool AllowParallel { get; set; } = false; public ProjectMode? Mode { get; set; } public DataSource DataSource { get; set; } public TemplateEngine TemplateEngine { get; set; } = TemplateEngine.Default; From f6fd7bdcf41635fff33e45af05ffc3e7615c5c51 Mon Sep 17 00:00:00 2001 From: Ahoo Wang Date: Sat, 7 May 2022 12:45:30 +0800 Subject: [PATCH 125/127] Update version.props --- build/version.props | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build/version.props b/build/version.props index 83651c8..e177903 100644 --- a/build/version.props +++ b/build/version.props @@ -1,8 +1,8 @@ 2 - 3 - 7 + 4 + 0-preview.0 $(VersionMajor).$(VersionMinor).$(VersionPatch) From e445669c96e9aa1c965af7774403e262cceb0fa6 Mon Sep 17 00:00:00 2001 From: nidl Date: Tue, 14 Jun 2022 20:58:35 +0800 Subject: [PATCH 126/127] =?UTF-8?q?=E5=8D=87=E7=BA=A7MySql.Data=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E5=88=B08.0.29?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/SmartCode.Db/SmartCode.Db.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/SmartCode.Db/SmartCode.Db.csproj b/src/SmartCode.Db/SmartCode.Db.csproj index 6c40434..22f33f7 100644 --- a/src/SmartCode.Db/SmartCode.Db.csproj +++ b/src/SmartCode.Db/SmartCode.Db.csproj @@ -10,7 +10,7 @@ - + From 7af415d35da4eba6e2e6c1d9e5a917e76bc06b16 Mon Sep 17 00:00:00 2001 From: Ahoo Wang Date: Wed, 15 Jun 2022 11:07:13 +0800 Subject: [PATCH 127/127] Update version.props --- build/version.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/version.props b/build/version.props index e177903..8013612 100644 --- a/build/version.props +++ b/build/version.props @@ -2,7 +2,7 @@ 2 4 - 0-preview.0 + 0-preview.1 $(VersionMajor).$(VersionMinor).$(VersionPatch)