From 329a684ae28d7809404cada14e1a13c5b4015568 Mon Sep 17 00:00:00 2001 From: sunkaixuan <610262374@qq.com> Date: Fri, 10 Mar 2023 17:55:52 +0800 Subject: [PATCH] Support mysql ignore insert --- .../InsertableProvider/InsertableProvider.cs | 6 ++++++ .../SqlBuilderProvider/InsertBuilder.cs | 3 +++ Src/Asp.Net/SqlSugar/Interface/Insertable.cs | 2 +- .../MySql/SqlBuilder/MySqlInsertBuilder.cs | 20 ++++++++++++++++--- 4 files changed, 27 insertions(+), 4 deletions(-) diff --git a/Src/Asp.Net/SqlSugar/Abstract/InsertableProvider/InsertableProvider.cs b/Src/Asp.Net/SqlSugar/Abstract/InsertableProvider/InsertableProvider.cs index a1a90fa31..969d2a80b 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/InsertableProvider/InsertableProvider.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/InsertableProvider/InsertableProvider.cs @@ -473,6 +473,12 @@ namespace SqlSugar return this; } + public IInsertable MySqlIgnore() + { + this.InsertBuilder.MySqlIgnore = true; + return this; + } + public IInsertable InsertColumns(Expression> columns) { if (columns == null) return this; diff --git a/Src/Asp.Net/SqlSugar/Abstract/SqlBuilderProvider/InsertBuilder.cs b/Src/Asp.Net/SqlSugar/Abstract/SqlBuilderProvider/InsertBuilder.cs index e261a0519..5afc651e4 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/SqlBuilderProvider/InsertBuilder.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/SqlBuilderProvider/InsertBuilder.cs @@ -129,6 +129,9 @@ namespace SqlSugar return result; } } + + public bool MySqlIgnore { get; internal set; } + public virtual ExpressionResult GetExpressionValue(Expression expression, ResolveExpressType resolveType) { ILambdaExpressions resolveExpress = this.LambdaExpressions; diff --git a/Src/Asp.Net/SqlSugar/Interface/Insertable.cs b/Src/Asp.Net/SqlSugar/Interface/Insertable.cs index 9cc7ca679..ef1dd0b33 100644 --- a/Src/Asp.Net/SqlSugar/Interface/Insertable.cs +++ b/Src/Asp.Net/SqlSugar/Interface/Insertable.cs @@ -54,6 +54,6 @@ namespace SqlSugar SplitInsertable SplitTable(); SplitInsertable SplitTable(SplitType splitType); void AddQueue(); - + IInsertable MySqlIgnore(); } } diff --git a/Src/Asp.Net/SqlSugar/Realization/MySql/SqlBuilder/MySqlInsertBuilder.cs b/Src/Asp.Net/SqlSugar/Realization/MySql/SqlBuilder/MySqlInsertBuilder.cs index 03b587409..3daa6f149 100644 --- a/Src/Asp.Net/SqlSugar/Realization/MySql/SqlBuilder/MySqlInsertBuilder.cs +++ b/Src/Asp.Net/SqlSugar/Realization/MySql/SqlBuilder/MySqlInsertBuilder.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.Linq; using System.Text; @@ -127,7 +128,9 @@ namespace SqlSugar { string columnParametersString = string.Join(",", this.DbColumnInfoList.Select(it =>base.GetDbColumn(it, Builder.SqlParameterKeyWord + it.DbColumnName))); ActionMinDate(); - return string.Format(SqlTemplate, GetTableNameString, columnsString, columnParametersString); + var result= string.Format(SqlTemplate, GetTableNameString, columnsString, columnParametersString); + result = GetMySqlIgnore(result); + return result; } else { @@ -140,7 +143,7 @@ namespace SqlSugar foreach (var item in groupList) { batchInsetrSql.Append("("); - insertColumns = string.Join(",", item.Select(it =>base.GetDbColumn(it, FormatValue(it.Value,it.PropertyName)))); + insertColumns = string.Join(",", item.Select(it => base.GetDbColumn(it, FormatValue(it.Value, it.PropertyName)))); batchInsetrSql.Append(insertColumns); if (groupList.Last() == item) { @@ -151,11 +154,22 @@ namespace SqlSugar batchInsetrSql.Append("), "); } } - + batchInsetrSql.AppendLine(";select @@IDENTITY"); var result = batchInsetrSql.ToString(); + result = GetMySqlIgnore(result); return result; } } + + private string GetMySqlIgnore(string result) + { + if (this.MySqlIgnore) + { + result = result.Replace("INSERT INTO", " INSERT IGNORE INTO"); + } + + return result; + } } }