From 66d94d0a88f132fa6613f6d68413f3efe6adbc5c Mon Sep 17 00:00:00 2001 From: 2881099 <2881099@qq.com> Date: Mon, 31 Mar 2025 16:51:23 +0800 Subject: [PATCH] =?UTF-8?q?-=20=E6=81=A2=E5=A4=8D=20MySql8.0.30=20ExecuteI?= =?UTF-8?q?nserted/ExecuteUpdated/ExecuteDeleted=20=E7=9A=84=E9=80=82?= =?UTF-8?q?=E9=85=8D=E6=94=B9=E5=8A=A8=EF=BC=9B#2001?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FreeSql/Interface/Curd/IDelete.cs | 5 + FreeSql/Interface/Curd/IInsert.cs | 4 +- FreeSql/Interface/Curd/IUpdate.cs | 10 +- .../MySql/Curd/CustomMySqlDelete.cs | 43 ++----- .../MySql/Curd/CustomMySqlInsert.cs | 31 +---- .../MySql/Curd/CustomMySqlUpdate.cs | 83 +++++-------- .../Curd/MySqlDelete.cs | 51 +++----- .../Curd/MySqlInsert.cs | 31 +---- .../Curd/MySqlUpdate.cs | 51 ++------ .../MySql/Curd/OdbcMySqlDelete.cs | 51 +++----- .../MySql/Curd/OdbcMySqlInsert.cs | 31 +---- .../MySql/Curd/OdbcMySqlUpdate.cs | 115 +++++++----------- 12 files changed, 148 insertions(+), 358 deletions(-) diff --git a/FreeSql/Interface/Curd/IDelete.cs b/FreeSql/Interface/Curd/IDelete.cs index 6f78b31f7..ec8f21263 100644 --- a/FreeSql/Interface/Curd/IDelete.cs +++ b/FreeSql/Interface/Curd/IDelete.cs @@ -133,6 +133,11 @@ namespace FreeSql #if net40 #else Task ExecuteAffrowsAsync(CancellationToken cancellationToken = default); + /// + /// 执行SQL语句,返回被删除的记录 + /// 注意:此方法只有 Postgresql/SqlServer/Maridb/Firebird/人大金仓 有效果 + /// + /// Task> ExecuteDeletedAsync(CancellationToken cancellationToken = default); #endif } diff --git a/FreeSql/Interface/Curd/IInsert.cs b/FreeSql/Interface/Curd/IInsert.cs index 0b3be6998..0ecee4b97 100644 --- a/FreeSql/Interface/Curd/IInsert.cs +++ b/FreeSql/Interface/Curd/IInsert.cs @@ -156,7 +156,7 @@ namespace FreeSql long ExecuteIdentity(); /// /// 执行SQL语句,返回插入后的记录 - /// 注意:此方法只有 Postgresql/SqlServer/MySql8.0.30+/Maridb/Firebird/DuckDB/人大金仓 有效果 + /// 注意:此方法只有 Postgresql/SqlServer/Maridb/Firebird/DuckDB/人大金仓 有效果 /// /// List ExecuteInserted(); @@ -176,7 +176,7 @@ namespace FreeSql Task ExecuteIdentityAsync(CancellationToken cancellationToken = default); /// /// 执行SQL语句,返回插入后的记录 - /// 注意:此方法只有 Postgresql/SqlServer/MySql8.0.30+/Maridb/Firebird/DuckDB/人大金仓 有效果 + /// 注意:此方法只有 Postgresql/SqlServer/Maridb/Firebird/DuckDB/人大金仓 有效果 /// /// Task> ExecuteInsertedAsync(CancellationToken cancellationToken = default); diff --git a/FreeSql/Interface/Curd/IUpdate.cs b/FreeSql/Interface/Curd/IUpdate.cs index b52893959..70e6d8135 100644 --- a/FreeSql/Interface/Curd/IUpdate.cs +++ b/FreeSql/Interface/Curd/IUpdate.cs @@ -303,11 +303,11 @@ namespace FreeSql #if net40 #else Task ExecuteAffrowsAsync(CancellationToken cancellationToken = default); - /// - /// 执行SQL语句,返回更新后的记录 - /// 注意:此方法只有 Postgresql/SqlServer 有效果 - /// - /// + /// + /// 执行SQL语句,返回更新后的记录 + /// 注意:此方法只有 Postgresql/SqlServer/Maridb/Firebird/人大金仓 有效果 + /// + /// Task> ExecuteUpdatedAsync(CancellationToken cancellationToken = default); Task> ExecuteUpdatedAsync(Expression> returnColumns, CancellationToken cancellationToken = default); #endif diff --git a/Providers/FreeSql.Provider.Custom/MySql/Curd/CustomMySqlDelete.cs b/Providers/FreeSql.Provider.Custom/MySql/Curd/CustomMySqlDelete.cs index 7e6b4df9a..6645c100c 100644 --- a/Providers/FreeSql.Provider.Custom/MySql/Curd/CustomMySqlDelete.cs +++ b/Providers/FreeSql.Provider.Custom/MySql/Curd/CustomMySqlDelete.cs @@ -24,9 +24,6 @@ namespace FreeSql.Custom.MySql var ret = new List(); DbParameter[] dbParms = null; StringBuilder sbret = null; - var queryType = _table.TypeLazy ?? _table.Type; - int[] queryIndexs = null; - var queryFlag = ""; ToSqlFetch(sb => { if (dbParms == null) @@ -36,36 +33,26 @@ namespace FreeSql.Custom.MySql sbret.Append(" RETURNING "); var colidx = 0; - var sbflag = new StringBuilder().Append("adoQuery(crud)"); - var dic = new Dictionary(StringComparer.CurrentCultureIgnoreCase); foreach (var col in _table.Columns.Values) { if (colidx > 0) sbret.Append(", "); - sbret.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))); - if (dic.ContainsKey(col.CsName)) continue; - sbflag.Append(col.Attribute.Name).Append(":").Append(colidx).Append(","); - dic.Add(col.CsName, colidx); + sbret.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName)); ++colidx; } - queryIndexs = AdoProvider.GetQueryTypeProperties(queryType).Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray(); - queryFlag = sbflag.ToString(); } var sql = sb.Append(sbret).ToString(); - var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms); + var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Delete, sql, dbParms); _orm.Aop.CurdBeforeHandler?.Invoke(this, before); Exception exception = null; try { - _orm.Ado.ExecuteReader(_connection, _transaction, fetch => - { - ret.Add((T1)Utils.ExecuteReaderToClass(queryFlag, queryType, queryIndexs, fetch.Object, 0, _commonUtils)); - }, CommandType.Text, sql, _commandTimeout, dbParms); + ret.AddRange(_orm.Ado.Query(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms)); } catch (Exception ex) { exception = ex; - throw ex; + throw; } finally { @@ -88,9 +75,6 @@ namespace FreeSql.Custom.MySql var ret = new List(); DbParameter[] dbParms = null; StringBuilder sbret = null; - var queryType = _table.TypeLazy ?? _table.Type; - int[] queryIndexs = null; - var queryFlag = ""; await ToSqlFetchAsync(async sb => { if (dbParms == null) @@ -100,37 +84,26 @@ namespace FreeSql.Custom.MySql sbret.Append(" RETURNING "); var colidx = 0; - var sbflag = new StringBuilder().Append("adoQuery(crud)"); - var dic = new Dictionary(StringComparer.CurrentCultureIgnoreCase); foreach (var col in _table.Columns.Values) { if (colidx > 0) sbret.Append(", "); - sbret.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))); - if (dic.ContainsKey(col.CsName)) continue; - sbflag.Append(col.Attribute.Name).Append(":").Append(colidx).Append(","); - dic.Add(col.CsName, colidx); + sbret.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName)); ++colidx; } - queryIndexs = AdoProvider.GetQueryTypeProperties(queryType).Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray(); - queryFlag = sbflag.ToString(); } var sql = sb.Append(sbret).ToString(); - var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms); + var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Delete, sql, dbParms); _orm.Aop.CurdBeforeHandler?.Invoke(this, before); Exception exception = null; try { - await _orm.Ado.ExecuteReaderAsync(_connection, _transaction, fetch => - { - ret.Add((T1)Utils.ExecuteReaderToClass(queryFlag, queryType, queryIndexs, fetch.Object, 0, _commonUtils)); - return Task.FromResult(false); - }, CommandType.Text, sql, _commandTimeout, dbParms, cancellationToken); + ret.AddRange(await _orm.Ado.QueryAsync(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms, cancellationToken)); } catch (Exception ex) { exception = ex; - throw ex; + throw; } finally { diff --git a/Providers/FreeSql.Provider.Custom/MySql/Curd/CustomMySqlInsert.cs b/Providers/FreeSql.Provider.Custom/MySql/Curd/CustomMySqlInsert.cs index db524172a..505ada97c 100644 --- a/Providers/FreeSql.Provider.Custom/MySql/Curd/CustomMySqlInsert.cs +++ b/Providers/FreeSql.Provider.Custom/MySql/Curd/CustomMySqlInsert.cs @@ -91,20 +91,12 @@ namespace FreeSql.Custom.MySql sb.Append(sql).Append(" RETURNING "); var colidx = 0; - var sbflag = new StringBuilder().Append("adoQuery(crud)"); - var dic = new Dictionary(StringComparer.CurrentCultureIgnoreCase); foreach (var col in _table.Columns.Values) { if (colidx > 0) sb.Append(", "); - sb.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))); - if (dic.ContainsKey(col.CsName)) continue; - sbflag.Append(col.Attribute.Name).Append(":").Append(colidx).Append(","); - dic.Add(col.CsName, colidx); + sb.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName)); ++colidx; } - var queryType = _table.TypeLazy ?? _table.Type; - var indexes = AdoProvider.GetQueryTypeProperties(queryType).Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray(); - var flag = sbflag.ToString(); sql = sb.ToString(); var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, _params); _orm.Aop.CurdBeforeHandler?.Invoke(this, before); @@ -112,10 +104,7 @@ namespace FreeSql.Custom.MySql Exception exception = null; try { - _orm.Ado.ExecuteReader(_connection, _transaction, fetch => - { - ret.Add((T1)Utils.ExecuteReaderToClass(flag, queryType, indexes, fetch.Object, 0, _commonUtils)); - }, CommandType.Text, sql, _commandTimeout, _params); + ret = _orm.Ado.Query(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, _params); } catch (Exception ex) { @@ -182,20 +171,12 @@ namespace FreeSql.Custom.MySql sb.Append(sql).Append(" RETURNING "); var colidx = 0; - var sbflag = new StringBuilder().Append("adoQuery(crud)"); - var dic = new Dictionary(StringComparer.CurrentCultureIgnoreCase); foreach (var col in _table.Columns.Values) { if (colidx > 0) sb.Append(", "); - sb.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))); - if (dic.ContainsKey(col.CsName)) continue; - sbflag.Append(col.Attribute.Name).Append(":").Append(colidx).Append(","); - dic.Add(col.CsName, colidx); + sb.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName)); ++colidx; } - var queryType = _table.TypeLazy ?? _table.Type; - var indexes = AdoProvider.GetQueryTypeProperties(queryType).Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray(); - var flag = sbflag.ToString(); sql = sb.ToString(); var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, _params); _orm.Aop.CurdBeforeHandler?.Invoke(this, before); @@ -203,11 +184,7 @@ namespace FreeSql.Custom.MySql Exception exception = null; try { - await _orm.Ado.ExecuteReaderAsync(_connection, _transaction, fetch => - { - ret.Add((T1)Utils.ExecuteReaderToClass(flag, queryType, indexes, fetch.Object, 0, _commonUtils)); - return Task.FromResult(false); - }, CommandType.Text, sql, _commandTimeout, _params); + ret = await _orm.Ado.QueryAsync(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, _params, cancellationToken); } catch (Exception ex) { diff --git a/Providers/FreeSql.Provider.Custom/MySql/Curd/CustomMySqlUpdate.cs b/Providers/FreeSql.Provider.Custom/MySql/Curd/CustomMySqlUpdate.cs index 7d85d527b..53e436521 100644 --- a/Providers/FreeSql.Provider.Custom/MySql/Curd/CustomMySqlUpdate.cs +++ b/Providers/FreeSql.Provider.Custom/MySql/Curd/CustomMySqlUpdate.cs @@ -31,14 +31,11 @@ namespace FreeSql.Custom.MySql public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000); protected override List ExecuteUpdated(IEnumerable columns) => base.SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000, columns); - protected override List RawExecuteUpdated(IEnumerable columns) - { - var ret = new List(); - DbParameter[] dbParms = null; - StringBuilder sbret = null; - var queryType = typeof(TReturn) == typeof(T1) ? (_table.TypeLazy ?? _table.Type) : null; - int[] queryIndexs = null; - var queryFlag = ""; + protected override List RawExecuteUpdated(IEnumerable columns) + { + var ret = new List(); + DbParameter[] dbParms = null; + StringBuilder sbret = null; ToSqlFetch(sb => { if (dbParms == null) @@ -48,19 +45,12 @@ namespace FreeSql.Custom.MySql sbret.Append(" RETURNING "); var colidx = 0; - var sbflag = new StringBuilder().Append("adoQuery(crud)"); - var dic = new Dictionary(StringComparer.CurrentCultureIgnoreCase); foreach (var col in columns) { if (colidx > 0) sbret.Append(", "); - sbret.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))); - if (dic.ContainsKey(col.CsName)) continue; - sbflag.Append(col.Attribute.Name).Append(":").Append(colidx).Append(","); - dic.Add(col.CsName, colidx); + sbret.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName)); ++colidx; } - queryIndexs = AdoProvider.GetQueryTypeProperties(queryType).Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray(); - queryFlag = sbflag.ToString(); } var sql = sb.Append(sbret).ToString(); var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms); @@ -69,30 +59,27 @@ namespace FreeSql.Custom.MySql Exception exception = null; try { - var rettmp = new List(); - _orm.Ado.ExecuteReader(_connection, _transaction, fetch => - { - rettmp.Add((TReturn)Utils.ExecuteReaderToClass(queryFlag, queryType, queryIndexs, fetch.Object, 0, _commonUtils)); - }, CommandType.Text, sql, _commandTimeout, dbParms); + var queryType = typeof(TReturn) == typeof(T1) ? (_table.TypeLazy ?? _table.Type) : null; + var rettmp = _orm.Ado.Query(queryType, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms); ValidateVersionAndThrow(rettmp.Count, sql, dbParms); ret.AddRange(rettmp); } catch (Exception ex) - { - exception = ex; - throw; - } - finally - { - var after = new Aop.CurdAfterEventArgs(before, exception, ret); - _orm.Aop.CurdAfterHandler?.Invoke(this, after); - } - }); - sbret?.Clear(); - return ret; - } + { + exception = ex; + throw; + } + finally + { + var after = new Aop.CurdAfterEventArgs(before, exception, ret); + _orm.Aop.CurdAfterHandler?.Invoke(this, after); + } + }); + sbret?.Clear(); + return ret; + } - protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys) + protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys) { if (primarys.Length == 1) { @@ -134,14 +121,11 @@ namespace FreeSql.Custom.MySql public override Task ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000, cancellationToken); protected override Task> ExecuteUpdatedAsync(IEnumerable columns, CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000, columns, cancellationToken); - async protected override Task> RawExecuteUpdatedAsync(IEnumerable columns, CancellationToken cancellationToken = default) - { + async protected override Task> RawExecuteUpdatedAsync(IEnumerable columns, CancellationToken cancellationToken = default) + { var ret = new List(); DbParameter[] dbParms = null; StringBuilder sbret = null; - var queryType = typeof(TReturn) == typeof(T1) ? (_table.TypeLazy ?? _table.Type) : null; - int[] queryIndexs = null; - var queryFlag = ""; await ToSqlFetchAsync(async sb => { if (dbParms == null) @@ -151,19 +135,12 @@ namespace FreeSql.Custom.MySql sbret.Append(" RETURNING "); var colidx = 0; - var sbflag = new StringBuilder().Append("adoQuery(crud)"); - var dic = new Dictionary(StringComparer.CurrentCultureIgnoreCase); foreach (var col in columns) { if (colidx > 0) sbret.Append(", "); - sbret.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))); - if (dic.ContainsKey(col.CsName)) continue; - sbflag.Append(col.Attribute.Name).Append(":").Append(colidx).Append(","); - dic.Add(col.CsName, colidx); + sbret.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName)); ++colidx; } - queryIndexs = AdoProvider.GetQueryTypeProperties(queryType).Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray(); - queryFlag = sbflag.ToString(); } var sql = sb.Append(sbret).ToString(); var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms); @@ -172,12 +149,8 @@ namespace FreeSql.Custom.MySql Exception exception = null; try { - var rettmp = new List(); - await _orm.Ado.ExecuteReaderAsync(_connection, _transaction, fetch => - { - rettmp.Add((TReturn)Utils.ExecuteReaderToClass(queryFlag, queryType, queryIndexs, fetch.Object, 0, _commonUtils)); - return Task.FromResult(false); - }, CommandType.Text, sql, _commandTimeout, dbParms, cancellationToken); + var queryType = typeof(TReturn) == typeof(T1) ? (_table.TypeLazy ?? _table.Type) : null; + var rettmp = await _orm.Ado.QueryAsync(queryType, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms, cancellationToken); ValidateVersionAndThrow(rettmp.Count, sql, dbParms); ret.AddRange(rettmp); } @@ -196,5 +169,5 @@ namespace FreeSql.Custom.MySql return ret; } #endif - } + } } diff --git a/Providers/FreeSql.Provider.MySql/Curd/MySqlDelete.cs b/Providers/FreeSql.Provider.MySql/Curd/MySqlDelete.cs index b83ce2cba..5d38e44a8 100644 --- a/Providers/FreeSql.Provider.MySql/Curd/MySqlDelete.cs +++ b/Providers/FreeSql.Provider.MySql/Curd/MySqlDelete.cs @@ -24,9 +24,6 @@ namespace FreeSql.MySql.Curd var ret = new List(); DbParameter[] dbParms = null; StringBuilder sbret = null; - var queryType = _table.TypeLazy ?? _table.Type; - int[] queryIndexs = null; - var queryFlag = ""; ToSqlFetch(sb => { if (dbParms == null) @@ -36,31 +33,21 @@ namespace FreeSql.MySql.Curd sbret.Append(" RETURNING "); var colidx = 0; - var sbflag = new StringBuilder().Append("adoQuery(crud)"); - var dic = new Dictionary(StringComparer.CurrentCultureIgnoreCase); foreach (var col in _table.Columns.Values) { if (colidx > 0) sbret.Append(", "); - sbret.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))); - if (dic.ContainsKey(col.CsName)) continue; - sbflag.Append(col.Attribute.Name).Append(":").Append(colidx).Append(","); - dic.Add(col.CsName, colidx); + sbret.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName)); ++colidx; } - queryIndexs = AdoProvider.GetQueryTypeProperties(queryType).Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray(); - queryFlag = sbflag.ToString(); } var sql = sb.Append(sbret).ToString(); - var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms); + var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Delete, sql, dbParms); _orm.Aop.CurdBeforeHandler?.Invoke(this, before); Exception exception = null; try { - _orm.Ado.ExecuteReader(_connection, _transaction, fetch => - { - ret.Add((T1)Utils.ExecuteReaderToClass(queryFlag, queryType, queryIndexs, fetch.Object, 0, _commonUtils)); - }, CommandType.Text, sql, _commandTimeout, dbParms); + ret.AddRange(_orm.Ado.Query(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms)); } catch (Exception ex) { @@ -73,7 +60,11 @@ namespace FreeSql.MySql.Curd _orm.Aop.CurdAfterHandler?.Invoke(this, after); } }); - sbret?.Clear(); + if (dbParms != null) + { + this.ClearData(); + sbret.Clear(); + } return ret; } @@ -84,9 +75,6 @@ namespace FreeSql.MySql.Curd var ret = new List(); DbParameter[] dbParms = null; StringBuilder sbret = null; - var queryType = _table.TypeLazy ?? _table.Type; - int[] queryIndexs = null; - var queryFlag = ""; await ToSqlFetchAsync(async sb => { if (dbParms == null) @@ -96,32 +84,21 @@ namespace FreeSql.MySql.Curd sbret.Append(" RETURNING "); var colidx = 0; - var sbflag = new StringBuilder().Append("adoQuery(crud)"); - var dic = new Dictionary(StringComparer.CurrentCultureIgnoreCase); foreach (var col in _table.Columns.Values) { if (colidx > 0) sbret.Append(", "); - sbret.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))); - if (dic.ContainsKey(col.CsName)) continue; - sbflag.Append(col.Attribute.Name).Append(":").Append(colidx).Append(","); - dic.Add(col.CsName, colidx); + sbret.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName)); ++colidx; } - queryIndexs = AdoProvider.GetQueryTypeProperties(queryType).Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray(); - queryFlag = sbflag.ToString(); } var sql = sb.Append(sbret).ToString(); - var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms); + var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Delete, sql, dbParms); _orm.Aop.CurdBeforeHandler?.Invoke(this, before); Exception exception = null; try { - await _orm.Ado.ExecuteReaderAsync(_connection, _transaction, fetch => - { - ret.Add((T1)Utils.ExecuteReaderToClass(queryFlag, queryType, queryIndexs, fetch.Object, 0, _commonUtils)); - return Task.FromResult(false); - }, CommandType.Text, sql, _commandTimeout, dbParms, cancellationToken); + ret.AddRange(await _orm.Ado.QueryAsync(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms, cancellationToken)); } catch (Exception ex) { @@ -134,7 +111,11 @@ namespace FreeSql.MySql.Curd _orm.Aop.CurdAfterHandler?.Invoke(this, after); } }); - sbret?.Clear(); + if (dbParms != null) + { + this.ClearData(); + sbret.Clear(); + } return ret; } #endif diff --git a/Providers/FreeSql.Provider.MySql/Curd/MySqlInsert.cs b/Providers/FreeSql.Provider.MySql/Curd/MySqlInsert.cs index 634fb541b..82e44fe09 100644 --- a/Providers/FreeSql.Provider.MySql/Curd/MySqlInsert.cs +++ b/Providers/FreeSql.Provider.MySql/Curd/MySqlInsert.cs @@ -79,20 +79,12 @@ namespace FreeSql.MySql.Curd sb.Append(sql).Append(" RETURNING "); var colidx = 0; - var sbflag = new StringBuilder().Append("adoQuery(crud)"); - var dic = new Dictionary(StringComparer.CurrentCultureIgnoreCase); foreach (var col in _table.Columns.Values) { if (colidx > 0) sb.Append(", "); - sb.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))); - if (dic.ContainsKey(col.CsName)) continue; - sbflag.Append(col.Attribute.Name).Append(":").Append(colidx).Append(","); - dic.Add(col.CsName, colidx); + sb.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName)); ++colidx; } - var queryType = _table.TypeLazy ?? _table.Type; - var indexes = AdoProvider.GetQueryTypeProperties(queryType).Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray(); - var flag = sbflag.ToString(); sql = sb.ToString(); var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, _params); _orm.Aop.CurdBeforeHandler?.Invoke(this, before); @@ -100,10 +92,7 @@ namespace FreeSql.MySql.Curd Exception exception = null; try { - _orm.Ado.ExecuteReader(_connection, _transaction, fetch => - { - ret.Add((T1)Utils.ExecuteReaderToClass(flag, queryType, indexes, fetch.Object, 0, _commonUtils)); - }, CommandType.Text, sql, _commandTimeout, _params); + ret = _orm.Ado.Query(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, _params); } catch (Exception ex) { @@ -159,20 +148,12 @@ namespace FreeSql.MySql.Curd sb.Append(sql).Append(" RETURNING "); var colidx = 0; - var sbflag = new StringBuilder().Append("adoQuery(crud)"); - var dic = new Dictionary(StringComparer.CurrentCultureIgnoreCase); foreach (var col in _table.Columns.Values) { if (colidx > 0) sb.Append(", "); - sb.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))); - if (dic.ContainsKey(col.CsName)) continue; - sbflag.Append(col.Attribute.Name).Append(":").Append(colidx).Append(","); - dic.Add(col.CsName, colidx); + sb.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName)); ++colidx; } - var queryType = _table.TypeLazy ?? _table.Type; - var indexes = AdoProvider.GetQueryTypeProperties(queryType).Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray(); - var flag = sbflag.ToString(); sql = sb.ToString(); var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, _params); _orm.Aop.CurdBeforeHandler?.Invoke(this, before); @@ -180,11 +161,7 @@ namespace FreeSql.MySql.Curd Exception exception = null; try { - await _orm.Ado.ExecuteReaderAsync(_connection, _transaction, fetch => - { - ret.Add((T1)Utils.ExecuteReaderToClass(flag, queryType, indexes, fetch.Object, 0, _commonUtils)); - return Task.FromResult(false); - }, CommandType.Text, sql, _commandTimeout, _params); + ret = await _orm.Ado.QueryAsync(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, _params, cancellationToken); } catch (Exception ex) { diff --git a/Providers/FreeSql.Provider.MySql/Curd/MySqlUpdate.cs b/Providers/FreeSql.Provider.MySql/Curd/MySqlUpdate.cs index 2d63a1244..bccb59111 100644 --- a/Providers/FreeSql.Provider.MySql/Curd/MySqlUpdate.cs +++ b/Providers/FreeSql.Provider.MySql/Curd/MySqlUpdate.cs @@ -31,14 +31,11 @@ namespace FreeSql.MySql.Curd public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000); protected override List ExecuteUpdated(IEnumerable columns) => base.SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000, columns); - protected override List RawExecuteUpdated(IEnumerable columns) - { + protected override List RawExecuteUpdated(IEnumerable columns) + { var ret = new List(); DbParameter[] dbParms = null; StringBuilder sbret = null; - var queryType = typeof(TReturn) == typeof(T1) ? (_table.TypeLazy ?? _table.Type) : null; - int[] queryIndexs = null; - var queryFlag = ""; ToSqlFetch(sb => { if (dbParms == null) @@ -48,19 +45,12 @@ namespace FreeSql.MySql.Curd sbret.Append(" RETURNING "); var colidx = 0; - var sbflag = new StringBuilder().Append("adoQuery(crud)"); - var dic = new Dictionary(StringComparer.CurrentCultureIgnoreCase); foreach (var col in columns) { if (colidx > 0) sbret.Append(", "); - sbret.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))); - if (dic.ContainsKey(col.CsName)) continue; - sbflag.Append(col.Attribute.Name).Append(":").Append(colidx).Append(","); - dic.Add(col.CsName, colidx); + sbret.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName)); ++colidx; } - queryIndexs = AdoProvider.GetQueryTypeProperties(queryType).Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray(); - queryFlag = sbflag.ToString(); } var sql = sb.Append(sbret).ToString(); var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms); @@ -68,13 +58,10 @@ namespace FreeSql.MySql.Curd Exception exception = null; try - { - var rettmp = new List(); - _orm.Ado.ExecuteReader(_connection, _transaction, fetch => - { - rettmp.Add((TReturn)Utils.ExecuteReaderToClass(queryFlag, queryType, queryIndexs, fetch.Object, 0, _commonUtils)); - }, CommandType.Text, sql, _commandTimeout, dbParms); - ValidateVersionAndThrow(rettmp.Count, sql, dbParms); + { + var queryType = typeof(TReturn) == typeof(T1) ? (_table.TypeLazy ?? _table.Type) : null; + var rettmp = _orm.Ado.Query(queryType, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms); + ValidateVersionAndThrow(rettmp.Count, sql, dbParms); ret.AddRange(rettmp); } catch (Exception ex) @@ -134,14 +121,11 @@ namespace FreeSql.MySql.Curd public override Task ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000, cancellationToken); protected override Task> ExecuteUpdatedAsync(IEnumerable columns, CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000, columns, cancellationToken); - async protected override Task> RawExecuteUpdatedAsync(IEnumerable columns, CancellationToken cancellationToken = default) - { + async protected override Task> RawExecuteUpdatedAsync(IEnumerable columns, CancellationToken cancellationToken = default) + { var ret = new List(); DbParameter[] dbParms = null; StringBuilder sbret = null; - var queryType = typeof(TReturn) == typeof(T1) ? (_table.TypeLazy ?? _table.Type) : null; - int[] queryIndexs = null; - var queryFlag = ""; await ToSqlFetchAsync(async sb => { if (dbParms == null) @@ -151,19 +135,12 @@ namespace FreeSql.MySql.Curd sbret.Append(" RETURNING "); var colidx = 0; - var sbflag = new StringBuilder().Append("adoQuery(crud)"); - var dic = new Dictionary(StringComparer.CurrentCultureIgnoreCase); foreach (var col in columns) { if (colidx > 0) sbret.Append(", "); - sbret.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))); - if (dic.ContainsKey(col.CsName)) continue; - sbflag.Append(col.Attribute.Name).Append(":").Append(colidx).Append(","); - dic.Add(col.CsName, colidx); + sbret.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName)); ++colidx; } - queryIndexs = AdoProvider.GetQueryTypeProperties(queryType).Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray(); - queryFlag = sbflag.ToString(); } var sql = sb.Append(sbret).ToString(); var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms); @@ -172,12 +149,8 @@ namespace FreeSql.MySql.Curd Exception exception = null; try { - var rettmp = new List(); - await _orm.Ado.ExecuteReaderAsync(_connection, _transaction, fetch => - { - rettmp.Add((TReturn)Utils.ExecuteReaderToClass(queryFlag, queryType, queryIndexs, fetch.Object, 0, _commonUtils)); - return Task.FromResult(false); - }, CommandType.Text, sql, _commandTimeout, dbParms, cancellationToken); + var queryType = typeof(TReturn) == typeof(T1) ? (_table.TypeLazy ?? _table.Type) : null; + var rettmp = await _orm.Ado.QueryAsync(queryType, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms, cancellationToken); ValidateVersionAndThrow(rettmp.Count, sql, dbParms); ret.AddRange(rettmp); } diff --git a/Providers/FreeSql.Provider.Odbc/MySql/Curd/OdbcMySqlDelete.cs b/Providers/FreeSql.Provider.Odbc/MySql/Curd/OdbcMySqlDelete.cs index 20dda3188..24aa2168e 100644 --- a/Providers/FreeSql.Provider.Odbc/MySql/Curd/OdbcMySqlDelete.cs +++ b/Providers/FreeSql.Provider.Odbc/MySql/Curd/OdbcMySqlDelete.cs @@ -24,9 +24,6 @@ namespace FreeSql.Odbc.MySql var ret = new List(); DbParameter[] dbParms = null; StringBuilder sbret = null; - var queryType = _table.TypeLazy ?? _table.Type; - int[] queryIndexs = null; - var queryFlag = ""; ToSqlFetch(sb => { if (dbParms == null) @@ -36,31 +33,21 @@ namespace FreeSql.Odbc.MySql sbret.Append(" RETURNING "); var colidx = 0; - var sbflag = new StringBuilder().Append("adoQuery(crud)"); - var dic = new Dictionary(StringComparer.CurrentCultureIgnoreCase); foreach (var col in _table.Columns.Values) { if (colidx > 0) sbret.Append(", "); - sbret.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))); - if (dic.ContainsKey(col.CsName)) continue; - sbflag.Append(col.Attribute.Name).Append(":").Append(colidx).Append(","); - dic.Add(col.CsName, colidx); + sbret.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName)); ++colidx; } - queryIndexs = AdoProvider.GetQueryTypeProperties(queryType).Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray(); - queryFlag = sbflag.ToString(); } var sql = sb.Append(sbret).ToString(); - var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms); + var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Delete, sql, dbParms); _orm.Aop.CurdBeforeHandler?.Invoke(this, before); Exception exception = null; try { - _orm.Ado.ExecuteReader(_connection, _transaction, fetch => - { - ret.Add((T1)Utils.ExecuteReaderToClass(queryFlag, queryType, queryIndexs, fetch.Object, 0, _commonUtils)); - }, CommandType.Text, sql, _commandTimeout, dbParms); + ret.AddRange(_orm.Ado.Query(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms)); } catch (Exception ex) { @@ -73,7 +60,11 @@ namespace FreeSql.Odbc.MySql _orm.Aop.CurdAfterHandler?.Invoke(this, after); } }); - sbret?.Clear(); + if (dbParms != null) + { + this.ClearData(); + sbret.Clear(); + } return ret; } @@ -84,9 +75,6 @@ namespace FreeSql.Odbc.MySql var ret = new List(); DbParameter[] dbParms = null; StringBuilder sbret = null; - var queryType = _table.TypeLazy ?? _table.Type; - int[] queryIndexs = null; - var queryFlag = ""; await ToSqlFetchAsync(async sb => { if (dbParms == null) @@ -96,32 +84,21 @@ namespace FreeSql.Odbc.MySql sbret.Append(" RETURNING "); var colidx = 0; - var sbflag = new StringBuilder().Append("adoQuery(crud)"); - var dic = new Dictionary(StringComparer.CurrentCultureIgnoreCase); foreach (var col in _table.Columns.Values) { if (colidx > 0) sbret.Append(", "); - sbret.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))); - if (dic.ContainsKey(col.CsName)) continue; - sbflag.Append(col.Attribute.Name).Append(":").Append(colidx).Append(","); - dic.Add(col.CsName, colidx); + sbret.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName)); ++colidx; } - queryIndexs = AdoProvider.GetQueryTypeProperties(queryType).Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray(); - queryFlag = sbflag.ToString(); } var sql = sb.Append(sbret).ToString(); - var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms); + var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Delete, sql, dbParms); _orm.Aop.CurdBeforeHandler?.Invoke(this, before); Exception exception = null; try { - await _orm.Ado.ExecuteReaderAsync(_connection, _transaction, fetch => - { - ret.Add((T1)Utils.ExecuteReaderToClass(queryFlag, queryType, queryIndexs, fetch.Object, 0, _commonUtils)); - return Task.FromResult(false); - }, CommandType.Text, sql, _commandTimeout, dbParms, cancellationToken); + ret.AddRange(await _orm.Ado.QueryAsync(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms, cancellationToken)); } catch (Exception ex) { @@ -134,7 +111,11 @@ namespace FreeSql.Odbc.MySql _orm.Aop.CurdAfterHandler?.Invoke(this, after); } }); - sbret?.Clear(); + if (dbParms != null) + { + this.ClearData(); + sbret.Clear(); + } return ret; } #endif diff --git a/Providers/FreeSql.Provider.Odbc/MySql/Curd/OdbcMySqlInsert.cs b/Providers/FreeSql.Provider.Odbc/MySql/Curd/OdbcMySqlInsert.cs index 53f59dfd4..25adfbe3b 100644 --- a/Providers/FreeSql.Provider.Odbc/MySql/Curd/OdbcMySqlInsert.cs +++ b/Providers/FreeSql.Provider.Odbc/MySql/Curd/OdbcMySqlInsert.cs @@ -91,20 +91,12 @@ namespace FreeSql.Odbc.MySql sb.Append(sql).Append(" RETURNING "); var colidx = 0; - var sbflag = new StringBuilder().Append("adoQuery(crud)"); - var dic = new Dictionary(StringComparer.CurrentCultureIgnoreCase); foreach (var col in _table.Columns.Values) { if (colidx > 0) sb.Append(", "); - sb.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))); - if (dic.ContainsKey(col.CsName)) continue; - sbflag.Append(col.Attribute.Name).Append(":").Append(colidx).Append(","); - dic.Add(col.CsName, colidx); + sb.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName)); ++colidx; } - var queryType = _table.TypeLazy ?? _table.Type; - var indexes = AdoProvider.GetQueryTypeProperties(queryType).Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray(); - var flag = sbflag.ToString(); sql = sb.ToString(); var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, _params); _orm.Aop.CurdBeforeHandler?.Invoke(this, before); @@ -112,10 +104,7 @@ namespace FreeSql.Odbc.MySql Exception exception = null; try { - _orm.Ado.ExecuteReader(_connection, _transaction, fetch => - { - ret.Add((T1)Utils.ExecuteReaderToClass(flag, queryType, indexes, fetch.Object, 0, _commonUtils)); - }, CommandType.Text, sql, _commandTimeout, _params); + ret = _orm.Ado.Query(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, _params); } catch (Exception ex) { @@ -182,20 +171,12 @@ namespace FreeSql.Odbc.MySql sb.Append(sql).Append(" RETURNING "); var colidx = 0; - var sbflag = new StringBuilder().Append("adoQuery(crud)"); - var dic = new Dictionary(StringComparer.CurrentCultureIgnoreCase); foreach (var col in _table.Columns.Values) { if (colidx > 0) sb.Append(", "); - sb.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))); - if (dic.ContainsKey(col.CsName)) continue; - sbflag.Append(col.Attribute.Name).Append(":").Append(colidx).Append(","); - dic.Add(col.CsName, colidx); + sb.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName)); ++colidx; } - var queryType = _table.TypeLazy ?? _table.Type; - var indexes = AdoProvider.GetQueryTypeProperties(queryType).Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray(); - var flag = sbflag.ToString(); sql = sb.ToString(); var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, _params); _orm.Aop.CurdBeforeHandler?.Invoke(this, before); @@ -203,11 +184,7 @@ namespace FreeSql.Odbc.MySql Exception exception = null; try { - await _orm.Ado.ExecuteReaderAsync(_connection, _transaction, fetch => - { - ret.Add((T1)Utils.ExecuteReaderToClass(flag, queryType, indexes, fetch.Object, 0, _commonUtils)); - return Task.FromResult(false); - }, CommandType.Text, sql, _commandTimeout, _params); + ret = await _orm.Ado.QueryAsync(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, _params, cancellationToken); } catch (Exception ex) { diff --git a/Providers/FreeSql.Provider.Odbc/MySql/Curd/OdbcMySqlUpdate.cs b/Providers/FreeSql.Provider.Odbc/MySql/Curd/OdbcMySqlUpdate.cs index f08cf6814..058a05764 100644 --- a/Providers/FreeSql.Provider.Odbc/MySql/Curd/OdbcMySqlUpdate.cs +++ b/Providers/FreeSql.Provider.Odbc/MySql/Curd/OdbcMySqlUpdate.cs @@ -31,14 +31,11 @@ namespace FreeSql.Odbc.MySql public override int ExecuteAffrows() => base.SplitExecuteAffrows(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000); protected override List ExecuteUpdated(IEnumerable columns) => base.SplitExecuteUpdated(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000, columns); - protected override List RawExecuteUpdated(IEnumerable columns) - { - var ret = new List(); - DbParameter[] dbParms = null; - StringBuilder sbret = null; - var queryType = typeof(TReturn) == typeof(T1) ? (_table.TypeLazy ?? _table.Type) : null; - int[] queryIndexs = null; - var queryFlag = ""; + protected override List RawExecuteUpdated(IEnumerable columns) + { + var ret = new List(); + DbParameter[] dbParms = null; + StringBuilder sbret = null; ToSqlFetch(sb => { if (dbParms == null) @@ -48,19 +45,12 @@ namespace FreeSql.Odbc.MySql sbret.Append(" RETURNING "); var colidx = 0; - var sbflag = new StringBuilder().Append("adoQuery(crud)"); - var dic = new Dictionary(StringComparer.CurrentCultureIgnoreCase); foreach (var col in columns) { if (colidx > 0) sbret.Append(", "); - sbret.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))); - if (dic.ContainsKey(col.CsName)) continue; - sbflag.Append(col.Attribute.Name).Append(":").Append(colidx).Append(","); - dic.Add(col.CsName, colidx); + sbret.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName)); ++colidx; } - queryIndexs = AdoProvider.GetQueryTypeProperties(queryType).Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray(); - queryFlag = sbflag.ToString(); } var sql = sb.Append(sbret).ToString(); var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms); @@ -69,30 +59,27 @@ namespace FreeSql.Odbc.MySql Exception exception = null; try { - var rettmp = new List(); - _orm.Ado.ExecuteReader(_connection, _transaction, fetch => - { - rettmp.Add((TReturn)Utils.ExecuteReaderToClass(queryFlag, queryType, queryIndexs, fetch.Object, 0, _commonUtils)); - }, CommandType.Text, sql, _commandTimeout, dbParms); + var queryType = typeof(TReturn) == typeof(T1) ? (_table.TypeLazy ?? _table.Type) : null; + var rettmp = _orm.Ado.Query(queryType, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms); ValidateVersionAndThrow(rettmp.Count, sql, dbParms); ret.AddRange(rettmp); } catch (Exception ex) - { - exception = ex; - throw; - } - finally - { - var after = new Aop.CurdAfterEventArgs(before, exception, ret); - _orm.Aop.CurdAfterHandler?.Invoke(this, after); - } - }); - sbret?.Clear(); - return ret; - } + { + exception = ex; + throw; + } + finally + { + var after = new Aop.CurdAfterEventArgs(before, exception, ret); + _orm.Aop.CurdAfterHandler?.Invoke(this, after); + } + }); + sbret?.Clear(); + return ret; + } - protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys) + protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys) { if (primarys.Length == 1) { @@ -134,14 +121,11 @@ namespace FreeSql.Odbc.MySql public override Task ExecuteAffrowsAsync(CancellationToken cancellationToken = default) => base.SplitExecuteAffrowsAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000, cancellationToken); protected override Task> ExecuteUpdatedAsync(IEnumerable columns, CancellationToken cancellationToken = default) => base.SplitExecuteUpdatedAsync(_batchRowsLimit > 0 ? _batchRowsLimit : 500, _batchParameterLimit > 0 ? _batchParameterLimit : 3000, columns, cancellationToken); - async protected override Task> RawExecuteUpdatedAsync(IEnumerable columns, CancellationToken cancellationToken = default) - { - var ret = new List(); - DbParameter[] dbParms = null; - StringBuilder sbret = null; - var queryType = typeof(TReturn) == typeof(T1) ? (_table.TypeLazy ?? _table.Type) : null; - int[] queryIndexs = null; - var queryFlag = ""; + async protected override Task> RawExecuteUpdatedAsync(IEnumerable columns, CancellationToken cancellationToken = default) + { + var ret = new List(); + DbParameter[] dbParms = null; + StringBuilder sbret = null; await ToSqlFetchAsync(async sb => { if (dbParms == null) @@ -151,19 +135,12 @@ namespace FreeSql.Odbc.MySql sbret.Append(" RETURNING "); var colidx = 0; - var sbflag = new StringBuilder().Append("adoQuery(crud)"); - var dic = new Dictionary(StringComparer.CurrentCultureIgnoreCase); foreach (var col in columns) { if (colidx > 0) sbret.Append(", "); - sbret.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))); - if (dic.ContainsKey(col.CsName)) continue; - sbflag.Append(col.Attribute.Name).Append(":").Append(colidx).Append(","); - dic.Add(col.CsName, colidx); + sbret.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName)); ++colidx; } - queryIndexs = AdoProvider.GetQueryTypeProperties(queryType).Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray(); - queryFlag = sbflag.ToString(); } var sql = sb.Append(sbret).ToString(); var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms); @@ -172,29 +149,25 @@ namespace FreeSql.Odbc.MySql Exception exception = null; try { - var rettmp = new List(); - await _orm.Ado.ExecuteReaderAsync(_connection, _transaction, fetch => - { - rettmp.Add((TReturn)Utils.ExecuteReaderToClass(queryFlag, queryType, queryIndexs, fetch.Object, 0, _commonUtils)); - return Task.FromResult(false); - }, CommandType.Text, sql, _commandTimeout, dbParms, cancellationToken); + var queryType = typeof(TReturn) == typeof(T1) ? (_table.TypeLazy ?? _table.Type) : null; + var rettmp = await _orm.Ado.QueryAsync(queryType, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms, cancellationToken); ValidateVersionAndThrow(rettmp.Count, sql, dbParms); ret.AddRange(rettmp); } catch (Exception ex) - { - exception = ex; - throw; - } - finally - { - var after = new Aop.CurdAfterEventArgs(before, exception, ret); - _orm.Aop.CurdAfterHandler?.Invoke(this, after); - } - }); - sbret?.Clear(); - return ret; - } + { + exception = ex; + throw; + } + finally + { + var after = new Aop.CurdAfterEventArgs(before, exception, ret); + _orm.Aop.CurdAfterHandler?.Invoke(this, after); + } + }); + sbret?.Clear(); + return ret; + } #endif - } + } }