Skip to content

Commit 66d94d0

Browse files
committed
- 恢复 MySql8.0.30 ExecuteInserted/ExecuteUpdated/ExecuteDeleted 的适配改动;#2001
1 parent 1fcda96 commit 66d94d0

File tree

12 files changed

+148
-358
lines changed

12 files changed

+148
-358
lines changed

FreeSql/Interface/Curd/IDelete.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,11 @@ public interface IDelete<T1>
133133
#if net40
134134
#else
135135
Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default);
136+
/// <summary>
137+
/// 执行SQL语句,返回被删除的记录<para></para>
138+
/// 注意:此方法只有 Postgresql/SqlServer/Maridb/Firebird/人大金仓 有效果
139+
/// </summary>
140+
/// <returns></returns>
136141
Task<List<T1>> ExecuteDeletedAsync(CancellationToken cancellationToken = default);
137142
#endif
138143
}

FreeSql/Interface/Curd/IInsert.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@ public interface IInsert<T1> where T1 : class
156156
long ExecuteIdentity();
157157
/// <summary>
158158
/// 执行SQL语句,返回插入后的记录<para></para>
159-
/// 注意:此方法只有 Postgresql/SqlServer/MySql8.0.30+/Maridb/Firebird/DuckDB/人大金仓 有效果
159+
/// 注意:此方法只有 Postgresql/SqlServer/Maridb/Firebird/DuckDB/人大金仓 有效果
160160
/// </summary>
161161
/// <returns></returns>
162162
List<T1> ExecuteInserted();
@@ -176,7 +176,7 @@ public interface IInsert<T1> where T1 : class
176176
Task<long> ExecuteIdentityAsync(CancellationToken cancellationToken = default);
177177
/// <summary>
178178
/// 执行SQL语句,返回插入后的记录<para></para>
179-
/// 注意:此方法只有 Postgresql/SqlServer/MySql8.0.30+/Maridb/Firebird/DuckDB/人大金仓 有效果
179+
/// 注意:此方法只有 Postgresql/SqlServer/Maridb/Firebird/DuckDB/人大金仓 有效果
180180
/// </summary>
181181
/// <returns></returns>
182182
Task<List<T1>> ExecuteInsertedAsync(CancellationToken cancellationToken = default);

FreeSql/Interface/Curd/IUpdate.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -303,11 +303,11 @@ public interface IUpdate<T1>
303303
#if net40
304304
#else
305305
Task<int> ExecuteAffrowsAsync(CancellationToken cancellationToken = default);
306-
/// <summary>
307-
/// 执行SQL语句,返回更新后的记录<para></para>
308-
/// 注意:此方法只有 Postgresql/SqlServer 有效果
309-
/// </summary>
310-
/// <returns></returns>
306+
/// <summary>
307+
/// 执行SQL语句,返回更新后的记录<para></para>
308+
/// 注意:此方法只有 Postgresql/SqlServer/Maridb/Firebird/人大金仓 有效果
309+
/// </summary>
310+
/// <returns></returns>
311311
Task<List<T1>> ExecuteUpdatedAsync(CancellationToken cancellationToken = default);
312312
Task<List<TReturn>> ExecuteUpdatedAsync<TReturn>(Expression<Func<T1, TReturn>> returnColumns, CancellationToken cancellationToken = default);
313313
#endif

Providers/FreeSql.Provider.Custom/MySql/Curd/CustomMySqlDelete.cs

Lines changed: 8 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,6 @@ public override List<T1> ExecuteDeleted()
2424
var ret = new List<T1>();
2525
DbParameter[] dbParms = null;
2626
StringBuilder sbret = null;
27-
var queryType = _table.TypeLazy ?? _table.Type;
28-
int[] queryIndexs = null;
29-
var queryFlag = "";
3027
ToSqlFetch(sb =>
3128
{
3229
if (dbParms == null)
@@ -36,36 +33,26 @@ public override List<T1> ExecuteDeleted()
3633
sbret.Append(" RETURNING ");
3734

3835
var colidx = 0;
39-
var sbflag = new StringBuilder().Append("adoQuery(crud)");
40-
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
4136
foreach (var col in _table.Columns.Values)
4237
{
4338
if (colidx > 0) sbret.Append(", ");
44-
sbret.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name)));
45-
if (dic.ContainsKey(col.CsName)) continue;
46-
sbflag.Append(col.Attribute.Name).Append(":").Append(colidx).Append(",");
47-
dic.Add(col.CsName, colidx);
39+
sbret.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
4840
++colidx;
4941
}
50-
queryIndexs = AdoProvider.GetQueryTypeProperties(queryType).Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray();
51-
queryFlag = sbflag.ToString();
5242
}
5343
var sql = sb.Append(sbret).ToString();
54-
var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms);
44+
var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Delete, sql, dbParms);
5545
_orm.Aop.CurdBeforeHandler?.Invoke(this, before);
5646

5747
Exception exception = null;
5848
try
5949
{
60-
_orm.Ado.ExecuteReader(_connection, _transaction, fetch =>
61-
{
62-
ret.Add((T1)Utils.ExecuteReaderToClass(queryFlag, queryType, queryIndexs, fetch.Object, 0, _commonUtils));
63-
}, CommandType.Text, sql, _commandTimeout, dbParms);
50+
ret.AddRange(_orm.Ado.Query<T1>(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms));
6451
}
6552
catch (Exception ex)
6653
{
6754
exception = ex;
68-
throw ex;
55+
throw;
6956
}
7057
finally
7158
{
@@ -88,9 +75,6 @@ async public override Task<List<T1>> ExecuteDeletedAsync(CancellationToken cance
8875
var ret = new List<T1>();
8976
DbParameter[] dbParms = null;
9077
StringBuilder sbret = null;
91-
var queryType = _table.TypeLazy ?? _table.Type;
92-
int[] queryIndexs = null;
93-
var queryFlag = "";
9478
await ToSqlFetchAsync(async sb =>
9579
{
9680
if (dbParms == null)
@@ -100,37 +84,26 @@ await ToSqlFetchAsync(async sb =>
10084
sbret.Append(" RETURNING ");
10185

10286
var colidx = 0;
103-
var sbflag = new StringBuilder().Append("adoQuery(crud)");
104-
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
10587
foreach (var col in _table.Columns.Values)
10688
{
10789
if (colidx > 0) sbret.Append(", ");
108-
sbret.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name)));
109-
if (dic.ContainsKey(col.CsName)) continue;
110-
sbflag.Append(col.Attribute.Name).Append(":").Append(colidx).Append(",");
111-
dic.Add(col.CsName, colidx);
90+
sbret.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
11291
++colidx;
11392
}
114-
queryIndexs = AdoProvider.GetQueryTypeProperties(queryType).Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray();
115-
queryFlag = sbflag.ToString();
11693
}
11794
var sql = sb.Append(sbret).ToString();
118-
var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Update, sql, dbParms);
95+
var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Delete, sql, dbParms);
11996
_orm.Aop.CurdBeforeHandler?.Invoke(this, before);
12097

12198
Exception exception = null;
12299
try
123100
{
124-
await _orm.Ado.ExecuteReaderAsync(_connection, _transaction, fetch =>
125-
{
126-
ret.Add((T1)Utils.ExecuteReaderToClass(queryFlag, queryType, queryIndexs, fetch.Object, 0, _commonUtils));
127-
return Task.FromResult(false);
128-
}, CommandType.Text, sql, _commandTimeout, dbParms, cancellationToken);
101+
ret.AddRange(await _orm.Ado.QueryAsync<T1>(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, dbParms, cancellationToken));
129102
}
130103
catch (Exception ex)
131104
{
132105
exception = ex;
133-
throw ex;
106+
throw;
134107
}
135108
finally
136109
{

Providers/FreeSql.Provider.Custom/MySql/Curd/CustomMySqlInsert.cs

Lines changed: 4 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -91,31 +91,20 @@ protected override List<T1> RawExecuteInserted()
9191
sb.Append(sql).Append(" RETURNING ");
9292

9393
var colidx = 0;
94-
var sbflag = new StringBuilder().Append("adoQuery(crud)");
95-
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
9694
foreach (var col in _table.Columns.Values)
9795
{
9896
if (colidx > 0) sb.Append(", ");
99-
sb.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name)));
100-
if (dic.ContainsKey(col.CsName)) continue;
101-
sbflag.Append(col.Attribute.Name).Append(":").Append(colidx).Append(",");
102-
dic.Add(col.CsName, colidx);
97+
sb.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
10398
++colidx;
10499
}
105-
var queryType = _table.TypeLazy ?? _table.Type;
106-
var indexes = AdoProvider.GetQueryTypeProperties(queryType).Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray();
107-
var flag = sbflag.ToString();
108100
sql = sb.ToString();
109101
var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, _params);
110102
_orm.Aop.CurdBeforeHandler?.Invoke(this, before);
111103
var ret = new List<T1>();
112104
Exception exception = null;
113105
try
114106
{
115-
_orm.Ado.ExecuteReader(_connection, _transaction, fetch =>
116-
{
117-
ret.Add((T1)Utils.ExecuteReaderToClass(flag, queryType, indexes, fetch.Object, 0, _commonUtils));
118-
}, CommandType.Text, sql, _commandTimeout, _params);
107+
ret = _orm.Ado.Query<T1>(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, _params);
119108
}
120109
catch (Exception ex)
121110
{
@@ -182,32 +171,20 @@ async protected override Task<List<T1>> RawExecuteInsertedAsync(CancellationToke
182171
sb.Append(sql).Append(" RETURNING ");
183172

184173
var colidx = 0;
185-
var sbflag = new StringBuilder().Append("adoQuery(crud)");
186-
var dic = new Dictionary<string, int>(StringComparer.CurrentCultureIgnoreCase);
187174
foreach (var col in _table.Columns.Values)
188175
{
189176
if (colidx > 0) sb.Append(", ");
190-
sb.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name)));
191-
if (dic.ContainsKey(col.CsName)) continue;
192-
sbflag.Append(col.Attribute.Name).Append(":").Append(colidx).Append(",");
193-
dic.Add(col.CsName, colidx);
177+
sb.Append(_commonUtils.RereadColumn(col, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
194178
++colidx;
195179
}
196-
var queryType = _table.TypeLazy ?? _table.Type;
197-
var indexes = AdoProvider.GetQueryTypeProperties(queryType).Select(a => dic.TryGetValue(a.Key, out var tryint) ? tryint : -1).ToArray();
198-
var flag = sbflag.ToString();
199180
sql = sb.ToString();
200181
var before = new Aop.CurdBeforeEventArgs(_table.Type, _table, Aop.CurdType.Insert, sql, _params);
201182
_orm.Aop.CurdBeforeHandler?.Invoke(this, before);
202183
var ret = new List<T1>();
203184
Exception exception = null;
204185
try
205186
{
206-
await _orm.Ado.ExecuteReaderAsync(_connection, _transaction, fetch =>
207-
{
208-
ret.Add((T1)Utils.ExecuteReaderToClass(flag, queryType, indexes, fetch.Object, 0, _commonUtils));
209-
return Task.FromResult(false);
210-
}, CommandType.Text, sql, _commandTimeout, _params);
187+
ret = await _orm.Ado.QueryAsync<T1>(_table.TypeLazy ?? _table.Type, _connection, _transaction, CommandType.Text, sql, _commandTimeout, _params, cancellationToken);
211188
}
212189
catch (Exception ex)
213190
{

0 commit comments

Comments
 (0)