From 1fcda96b5b9bec5ab46a3e7950efd393ae3ed15c Mon Sep 17 00:00:00 2001 From: 2881099 <2881099@qq.com> Date: Fri, 28 Mar 2025 18:32:04 +0800 Subject: [PATCH] =?UTF-8?q?-=20=E4=BF=AE=E5=A4=8D=20MySql8.0.30=20?= =?UTF-8?q?=E6=97=A0=E6=B3=95=E4=BD=BF=E7=94=A8=20ExecuteInserted/ExecuteU?= =?UTF-8?q?pdated/ExecuteDeleted=20=E7=9A=84=E9=97=AE=E9=A2=98=EF=BC=9B#20?= =?UTF-8?q?01?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../MySql/Curd/CustomMySqlDelete.cs | 41 +++++++++++-- .../MySql/Curd/CustomMySqlInsert.cs | 10 ++-- .../MySql/Curd/CustomMySqlUpdate.cs | 4 +- .../Curd/MySqlDelete.cs | 53 +++++++++++------ .../Curd/MySqlInsert.cs | 10 ++-- .../Curd/MySqlUpdate.cs | 4 +- .../MySql/Curd/OdbcMySqlDelete.cs | 57 +++++++++++++------ .../MySql/Curd/OdbcMySqlInsert.cs | 10 ++-- .../MySql/Curd/OdbcMySqlUpdate.cs | 4 +- 9 files changed, 135 insertions(+), 58 deletions(-) diff --git a/Providers/FreeSql.Provider.Custom/MySql/Curd/CustomMySqlDelete.cs b/Providers/FreeSql.Provider.Custom/MySql/Curd/CustomMySqlDelete.cs index 90e4f2044..7e6b4df9a 100644 --- a/Providers/FreeSql.Provider.Custom/MySql/Curd/CustomMySqlDelete.cs +++ b/Providers/FreeSql.Provider.Custom/MySql/Curd/CustomMySqlDelete.cs @@ -1,8 +1,10 @@ using FreeSql.Internal; +using FreeSql.Internal.CommonProvider; using System; using System.Collections.Generic; using System.Data; using System.Data.Common; +using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; @@ -22,6 +24,9 @@ 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) @@ -31,21 +36,31 @@ 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))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName)); + 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); ++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.Delete, sql, dbParms); + var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms); _orm.Aop.CurdBeforeHandler?.Invoke(this, before); Exception exception = null; try { - ret.AddRange(_orm.Ado.Query(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms)); + _orm.Ado.ExecuteReader(_connection, _transaction, fetch => + { + ret.Add((T1)Utils.ExecuteReaderToClass(queryFlag, queryType, queryIndexs, fetch.Object, 0, _commonUtils)); + }, CommandType.Text, sql, _commandTimeout, dbParms); } catch (Exception ex) { @@ -73,6 +88,9 @@ 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) @@ -82,21 +100,32 @@ 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))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName)); + 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); ++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.Delete, sql, dbParms); + var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms); _orm.Aop.CurdBeforeHandler?.Invoke(this, before); Exception exception = null; try { - ret.AddRange(await _orm.Ado.QueryAsync(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms, cancellationToken)); + 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); } catch (Exception ex) { diff --git a/Providers/FreeSql.Provider.Custom/MySql/Curd/CustomMySqlInsert.cs b/Providers/FreeSql.Provider.Custom/MySql/Curd/CustomMySqlInsert.cs index fc5197df2..db524172a 100644 --- a/Providers/FreeSql.Provider.Custom/MySql/Curd/CustomMySqlInsert.cs +++ b/Providers/FreeSql.Provider.Custom/MySql/Curd/CustomMySqlInsert.cs @@ -102,7 +102,8 @@ namespace FreeSql.Custom.MySql dic.Add(col.CsName, colidx); ++colidx; } - var indexes = AdoProvider.GetQueryTypeProperties(_table.TypeLazy ?? _table.Type).Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray(); + 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); @@ -113,7 +114,7 @@ namespace FreeSql.Custom.MySql { _orm.Ado.ExecuteReader(_connection, _transaction, fetch => { - ret.Add((T1)Utils.ExecuteReaderToClass(flag, _table.TypeLazy ?? _table.Type, indexes, fetch.Object, 0, _commonUtils)); + ret.Add((T1)Utils.ExecuteReaderToClass(flag, queryType, indexes, fetch.Object, 0, _commonUtils)); }, CommandType.Text, sql, _commandTimeout, _params); } catch (Exception ex) @@ -192,7 +193,8 @@ namespace FreeSql.Custom.MySql dic.Add(col.CsName, colidx); ++colidx; } - var indexes = AdoProvider.GetQueryTypeProperties(_table.TypeLazy ?? _table.Type).Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray(); + 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); @@ -203,7 +205,7 @@ namespace FreeSql.Custom.MySql { await _orm.Ado.ExecuteReaderAsync(_connection, _transaction, fetch => { - ret.Add((T1)Utils.ExecuteReaderToClass(flag, _table.TypeLazy ?? _table.Type, indexes, fetch.Object, 0, _commonUtils)); + ret.Add((T1)Utils.ExecuteReaderToClass(flag, queryType, indexes, fetch.Object, 0, _commonUtils)); return Task.FromResult(false); }, CommandType.Text, sql, _commandTimeout, _params); } diff --git a/Providers/FreeSql.Provider.Custom/MySql/Curd/CustomMySqlUpdate.cs b/Providers/FreeSql.Provider.Custom/MySql/Curd/CustomMySqlUpdate.cs index 1dcdecb5b..7d85d527b 100644 --- a/Providers/FreeSql.Provider.Custom/MySql/Curd/CustomMySqlUpdate.cs +++ b/Providers/FreeSql.Provider.Custom/MySql/Curd/CustomMySqlUpdate.cs @@ -52,7 +52,7 @@ namespace FreeSql.Custom.MySql var dic = new Dictionary(StringComparer.CurrentCultureIgnoreCase); foreach (var col in columns) { - if (colidx > 0) sb.Append(", "); + 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(","); @@ -155,7 +155,7 @@ namespace FreeSql.Custom.MySql var dic = new Dictionary(StringComparer.CurrentCultureIgnoreCase); foreach (var col in columns) { - if (colidx > 0) sb.Append(", "); + 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(","); diff --git a/Providers/FreeSql.Provider.MySql/Curd/MySqlDelete.cs b/Providers/FreeSql.Provider.MySql/Curd/MySqlDelete.cs index 43f48c993..b83ce2cba 100644 --- a/Providers/FreeSql.Provider.MySql/Curd/MySqlDelete.cs +++ b/Providers/FreeSql.Provider.MySql/Curd/MySqlDelete.cs @@ -1,8 +1,10 @@ using FreeSql.Internal; +using FreeSql.Internal.CommonProvider; using System; using System.Collections.Generic; using System.Data; using System.Data.Common; +using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; @@ -22,6 +24,9 @@ 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) @@ -31,21 +36,31 @@ 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))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName)); + 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); ++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.Delete, sql, dbParms); + var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms); _orm.Aop.CurdBeforeHandler?.Invoke(this, before); Exception exception = null; try { - ret.AddRange(_orm.Ado.Query(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms)); + _orm.Ado.ExecuteReader(_connection, _transaction, fetch => + { + ret.Add((T1)Utils.ExecuteReaderToClass(queryFlag, queryType, queryIndexs, fetch.Object, 0, _commonUtils)); + }, CommandType.Text, sql, _commandTimeout, dbParms); } catch (Exception ex) { @@ -58,11 +73,7 @@ namespace FreeSql.MySql.Curd _orm.Aop.CurdAfterHandler?.Invoke(this, after); } }); - if (dbParms != null) - { - this.ClearData(); - sbret.Clear(); - } + sbret?.Clear(); return ret; } @@ -73,6 +84,9 @@ 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) @@ -82,21 +96,32 @@ 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))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName)); + 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); ++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.Delete, sql, dbParms); + var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms); _orm.Aop.CurdBeforeHandler?.Invoke(this, before); Exception exception = null; try { - ret.AddRange(await _orm.Ado.QueryAsync(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms, cancellationToken)); + 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); } catch (Exception ex) { @@ -109,11 +134,7 @@ namespace FreeSql.MySql.Curd _orm.Aop.CurdAfterHandler?.Invoke(this, after); } }); - if (dbParms != null) - { - this.ClearData(); - sbret.Clear(); - } + sbret?.Clear(); return ret; } #endif diff --git a/Providers/FreeSql.Provider.MySql/Curd/MySqlInsert.cs b/Providers/FreeSql.Provider.MySql/Curd/MySqlInsert.cs index d826397e2..634fb541b 100644 --- a/Providers/FreeSql.Provider.MySql/Curd/MySqlInsert.cs +++ b/Providers/FreeSql.Provider.MySql/Curd/MySqlInsert.cs @@ -90,7 +90,8 @@ namespace FreeSql.MySql.Curd dic.Add(col.CsName, colidx); ++colidx; } - var indexes = AdoProvider.GetQueryTypeProperties(_table.TypeLazy ?? _table.Type).Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray(); + 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); @@ -101,7 +102,7 @@ namespace FreeSql.MySql.Curd { _orm.Ado.ExecuteReader(_connection, _transaction, fetch => { - ret.Add((T1)Utils.ExecuteReaderToClass(flag, _table.TypeLazy ?? _table.Type, indexes, fetch.Object, 0, _commonUtils)); + ret.Add((T1)Utils.ExecuteReaderToClass(flag, queryType, indexes, fetch.Object, 0, _commonUtils)); }, CommandType.Text, sql, _commandTimeout, _params); } catch (Exception ex) @@ -169,7 +170,8 @@ namespace FreeSql.MySql.Curd dic.Add(col.CsName, colidx); ++colidx; } - var indexes = AdoProvider.GetQueryTypeProperties(_table.TypeLazy ?? _table.Type).Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray(); + 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); @@ -180,7 +182,7 @@ namespace FreeSql.MySql.Curd { await _orm.Ado.ExecuteReaderAsync(_connection, _transaction, fetch => { - ret.Add((T1)Utils.ExecuteReaderToClass(flag, _table.TypeLazy ?? _table.Type, indexes, fetch.Object, 0, _commonUtils)); + ret.Add((T1)Utils.ExecuteReaderToClass(flag, queryType, indexes, fetch.Object, 0, _commonUtils)); return Task.FromResult(false); }, CommandType.Text, sql, _commandTimeout, _params); } diff --git a/Providers/FreeSql.Provider.MySql/Curd/MySqlUpdate.cs b/Providers/FreeSql.Provider.MySql/Curd/MySqlUpdate.cs index 1b587db9c..2d63a1244 100644 --- a/Providers/FreeSql.Provider.MySql/Curd/MySqlUpdate.cs +++ b/Providers/FreeSql.Provider.MySql/Curd/MySqlUpdate.cs @@ -52,7 +52,7 @@ namespace FreeSql.MySql.Curd var dic = new Dictionary(StringComparer.CurrentCultureIgnoreCase); foreach (var col in columns) { - if (colidx > 0) sb.Append(", "); + 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(","); @@ -155,7 +155,7 @@ namespace FreeSql.MySql.Curd var dic = new Dictionary(StringComparer.CurrentCultureIgnoreCase); foreach (var col in columns) { - if (colidx > 0) sb.Append(", "); + 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(","); diff --git a/Providers/FreeSql.Provider.Odbc/MySql/Curd/OdbcMySqlDelete.cs b/Providers/FreeSql.Provider.Odbc/MySql/Curd/OdbcMySqlDelete.cs index fdf91e47a..20dda3188 100644 --- a/Providers/FreeSql.Provider.Odbc/MySql/Curd/OdbcMySqlDelete.cs +++ b/Providers/FreeSql.Provider.Odbc/MySql/Curd/OdbcMySqlDelete.cs @@ -1,8 +1,10 @@ using FreeSql.Internal; +using FreeSql.Internal.CommonProvider; using System; using System.Collections.Generic; using System.Data; using System.Data.Common; +using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; @@ -22,6 +24,9 @@ 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) @@ -31,26 +36,36 @@ 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))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName)); + 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); ++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.Delete, sql, dbParms); + var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms); _orm.Aop.CurdBeforeHandler?.Invoke(this, before); Exception exception = null; try { - ret.AddRange(_orm.Ado.Query(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms)); + _orm.Ado.ExecuteReader(_connection, _transaction, fetch => + { + ret.Add((T1)Utils.ExecuteReaderToClass(queryFlag, queryType, queryIndexs, fetch.Object, 0, _commonUtils)); + }, CommandType.Text, sql, _commandTimeout, dbParms); } catch (Exception ex) { exception = ex; - throw ex; + throw; } finally { @@ -58,11 +73,7 @@ namespace FreeSql.Odbc.MySql _orm.Aop.CurdAfterHandler?.Invoke(this, after); } }); - if (dbParms != null) - { - this.ClearData(); - sbret.Clear(); - } + sbret?.Clear(); return ret; } @@ -73,6 +84,9 @@ 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) @@ -82,26 +96,37 @@ 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))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName)); + 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); ++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.Delete, sql, dbParms); + var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms); _orm.Aop.CurdBeforeHandler?.Invoke(this, before); Exception exception = null; try { - ret.AddRange(await _orm.Ado.QueryAsync(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms, cancellationToken)); + 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); } catch (Exception ex) { exception = ex; - throw ex; + throw; } finally { @@ -109,11 +134,7 @@ namespace FreeSql.Odbc.MySql _orm.Aop.CurdAfterHandler?.Invoke(this, after); } }); - if (dbParms != null) - { - this.ClearData(); - sbret.Clear(); - } + 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 fa552338b..53f59dfd4 100644 --- a/Providers/FreeSql.Provider.Odbc/MySql/Curd/OdbcMySqlInsert.cs +++ b/Providers/FreeSql.Provider.Odbc/MySql/Curd/OdbcMySqlInsert.cs @@ -102,7 +102,8 @@ namespace FreeSql.Odbc.MySql dic.Add(col.CsName, colidx); ++colidx; } - var indexes = AdoProvider.GetQueryTypeProperties(_table.TypeLazy ?? _table.Type).Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray(); + 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); @@ -113,7 +114,7 @@ namespace FreeSql.Odbc.MySql { _orm.Ado.ExecuteReader(_connection, _transaction, fetch => { - ret.Add((T1)Utils.ExecuteReaderToClass(flag, _table.TypeLazy ?? _table.Type, indexes, fetch.Object, 0, _commonUtils)); + ret.Add((T1)Utils.ExecuteReaderToClass(flag, queryType, indexes, fetch.Object, 0, _commonUtils)); }, CommandType.Text, sql, _commandTimeout, _params); } catch (Exception ex) @@ -192,7 +193,8 @@ namespace FreeSql.Odbc.MySql dic.Add(col.CsName, colidx); ++colidx; } - var indexes = AdoProvider.GetQueryTypeProperties(_table.TypeLazy ?? _table.Type).Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray(); + 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); @@ -203,7 +205,7 @@ namespace FreeSql.Odbc.MySql { await _orm.Ado.ExecuteReaderAsync(_connection, _transaction, fetch => { - ret.Add((T1)Utils.ExecuteReaderToClass(flag, _table.TypeLazy ?? _table.Type, indexes, fetch.Object, 0, _commonUtils)); + ret.Add((T1)Utils.ExecuteReaderToClass(flag, queryType, indexes, fetch.Object, 0, _commonUtils)); return Task.FromResult(false); }, CommandType.Text, sql, _commandTimeout, _params); } diff --git a/Providers/FreeSql.Provider.Odbc/MySql/Curd/OdbcMySqlUpdate.cs b/Providers/FreeSql.Provider.Odbc/MySql/Curd/OdbcMySqlUpdate.cs index 8b9a496eb..f08cf6814 100644 --- a/Providers/FreeSql.Provider.Odbc/MySql/Curd/OdbcMySqlUpdate.cs +++ b/Providers/FreeSql.Provider.Odbc/MySql/Curd/OdbcMySqlUpdate.cs @@ -52,7 +52,7 @@ namespace FreeSql.Odbc.MySql var dic = new Dictionary(StringComparer.CurrentCultureIgnoreCase); foreach (var col in columns) { - if (colidx > 0) sb.Append(", "); + 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(","); @@ -155,7 +155,7 @@ namespace FreeSql.Odbc.MySql var dic = new Dictionary(StringComparer.CurrentCultureIgnoreCase); foreach (var col in columns) { - if (colidx > 0) sb.Append(", "); + 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(",");