## v0.3.24

- 增加 GroupBy 分页方法;
- 修复 Insert 参数化命名 bug,当存在 Id Id2 时发生;
- 优化 Insert/Delete/Update 对象执行完后清理数据,以备多次使用;
This commit is contained in:
28810
2019-03-22 21:54:35 +08:00
parent 1470aab6e3
commit a9e34f852a
39 changed files with 975 additions and 1058 deletions

View File

@ -2,7 +2,7 @@
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<Version>0.3.23</Version>
<Version>0.3.24</Version>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
<Authors>YeXiangQin</Authors>
<Description>FreeSql is the most convenient ORM in dotnet. It supports Mysql, Postgresql, SqlServer, Oracle and Sqlite.</Description>

View File

@ -43,6 +43,40 @@ namespace FreeSql {
/// <param name="select">选择列</param>
/// <returns></returns>
string ToSql<TReturn>(Expression<Func<ISelectGroupingAggregate<T1>, TReturn>> select);
/// <summary>
/// 查询向后偏移行数
/// </summary>
/// <param name="offset"></param>
/// <returns></returns>
ISelectGrouping<T1> Skip(int offset);
/// <summary>
/// 查询向后偏移行数
/// </summary>
/// <param name="offset">行数</param>
/// <returns></returns>
ISelectGrouping<T1> Offset(int offset);
/// <summary>
/// 查询多少条数据
/// </summary>
/// <param name="limit"></param>
/// <returns></returns>
ISelectGrouping<T1> Limit(int limit);
/// <summary>
/// 查询多少条数据
/// </summary>
/// <param name="limit"></param>
/// <returns></returns>
ISelectGrouping<T1> Take(int limit);
/// <summary>
/// 分页
/// </summary>
/// <param name="pageIndex">第几页</param>
/// <param name="pageSize">每页多少</param>
/// <returns></returns>
ISelectGrouping<T1> Page(int pageIndex, int pageSize);
}
public interface ISelectGroupingAggregate<T1> {

View File

@ -30,6 +30,14 @@ namespace FreeSql.Internal.CommonProvider {
if (_orm.CodeFirst.IsAutoSyncStructure) _orm.CodeFirst.SyncStructure<T1>();
}
protected void ClearData() {
_source.Clear();
_where.Clear();
_whereTimes = 0;
_params.Clear();
}
public IDelete<T1> WithTransaction(DbTransaction transaction) {
_transaction = transaction;
return this;
@ -38,12 +46,16 @@ namespace FreeSql.Internal.CommonProvider {
public int ExecuteAffrows() {
var sql = this.ToSql();
if (string.IsNullOrEmpty(sql)) return 0;
return _orm.Ado.ExecuteNonQuery(_transaction, CommandType.Text, sql, _params.ToArray());
var affrows = _orm.Ado.ExecuteNonQuery(_transaction, CommandType.Text, sql, _params.ToArray());
this.ClearData();
return affrows;
}
async public Task<int> ExecuteAffrowsAsync() {
var sql = this.ToSql();
if (string.IsNullOrEmpty(sql)) return 0;
return await _orm.Ado.ExecuteNonQueryAsync(_transaction, CommandType.Text, sql, _params.ToArray());
var affrows = await _orm.Ado.ExecuteNonQueryAsync(_transaction, CommandType.Text, sql, _params.ToArray());
this.ClearData();
return affrows;
}
public abstract List<T1> ExecuteDeleted();
public abstract Task<List<T1>> ExecuteDeletedAsync();

View File

@ -32,6 +32,12 @@ namespace FreeSql.Internal.CommonProvider {
if (_orm.CodeFirst.IsAutoSyncStructure) _orm.CodeFirst.SyncStructure<T1>();
}
protected void ClearData() {
_source.Clear();
_ignore.Clear();
_params = null;
}
public IInsert<T1> WithTransaction(DbTransaction transaction) {
_transaction = transaction;
return this;
@ -267,8 +273,16 @@ namespace FreeSql.Internal.CommonProvider {
}
#endregion
internal int RawExecuteAffrows() => _orm.Ado.ExecuteNonQuery(_transaction, CommandType.Text, ToSql(), _params);
internal Task<int> RawExecuteAffrowsAsync() => _orm.Ado.ExecuteNonQueryAsync(_transaction, CommandType.Text, ToSql(), _params);
internal int RawExecuteAffrows() {
var affrows = _orm.Ado.ExecuteNonQuery(_transaction, CommandType.Text, ToSql(), _params);
this.ClearData();
return affrows;
}
async internal Task<int> RawExecuteAffrowsAsync() {
var affrows = await _orm.Ado.ExecuteNonQueryAsync(_transaction, CommandType.Text, ToSql(), _params);
this.ClearData();
return affrows;
}
internal abstract long RawExecuteIdentity();
internal abstract Task<long> RawExecuteIdentityAsync();
internal abstract List<T1> RawExecuteInserted();
@ -331,8 +345,8 @@ namespace FreeSql.Internal.CommonProvider {
if (_noneParameter)
sb.Append(_commonUtils.GetNoneParamaterSqlValue(specialParams, col.CsType, val));
else {
sb.Append(_commonUtils.QuoteWriteParamter(col.CsType, _commonUtils.QuoteParamterName($"{col.CsName}{didx}")));
_params[didx * colidx + colidx2] = _commonUtils.AppendParamter(null, $"{col.CsName}{didx}", col.CsType, val);
sb.Append(_commonUtils.QuoteWriteParamter(col.CsType, _commonUtils.QuoteParamterName($"{col.CsName}_{didx}")));
_params[didx * colidx + colidx2] = _commonUtils.AppendParamter(null, $"{col.CsName}_{didx}", col.CsType, val);
}
++colidx2;
}

View File

@ -79,5 +79,25 @@ namespace FreeSql.Internal.CommonProvider {
var method = _select.GetType().GetMethod("ToSql", new[] { typeof(string) });
return method.Invoke(_select, new object[] { field.Length > 0 ? field.Remove(0, 2).ToString() : null }) as string;
}
public ISelectGrouping<T1> Skip(int offset) {
var method = _select.GetType().GetMethod("Skip", new[] { typeof(int) });
method.Invoke(_select, new object[] { offset });
return this;
}
public ISelectGrouping<T1> Offset(int offset) => this.Skip(offset);
public ISelectGrouping<T1> Limit(int limit) {
var method = _select.GetType().GetMethod("Limit", new[] { typeof(int) });
method.Invoke(_select, new object[] { limit });
return this;
}
public ISelectGrouping<T1> Take(int limit) => this.Limit(limit);
public ISelectGrouping<T1> Page(int pageIndex, int pageSize) {
var method = _select.GetType().GetMethod("Page", new[] { typeof(int), typeof(int) });
method.Invoke(_select, new object[] { pageIndex, pageSize });
return this;
}
}
}

View File

@ -35,6 +35,15 @@ namespace FreeSql.Internal.CommonProvider {
if (_orm.CodeFirst.IsAutoSyncStructure) _orm.CodeFirst.SyncStructure<T1>();
}
protected void ClearData() {
_source.Clear();
_ignore.Clear();
_where.Clear();
_set.Clear();
_params.Clear();
_paramsSource.Clear();
}
public IUpdate<T1> WithTransaction(DbTransaction transaction) {
_transaction = transaction;
return this;
@ -47,12 +56,16 @@ namespace FreeSql.Internal.CommonProvider {
public int ExecuteAffrows() {
var sql = this.ToSql();
if (string.IsNullOrEmpty(sql)) return 0;
return _orm.Ado.ExecuteNonQuery(_transaction, CommandType.Text, sql, _params.Concat(_paramsSource).ToArray());
var affrows = _orm.Ado.ExecuteNonQuery(_transaction, CommandType.Text, sql, _params.Concat(_paramsSource).ToArray());
this.ClearData();
return affrows;
}
async public Task<int> ExecuteAffrowsAsync() {
var sql = this.ToSql();
if (string.IsNullOrEmpty(sql)) return 0;
return await _orm.Ado.ExecuteNonQueryAsync(_transaction, CommandType.Text, sql, _params.Concat(_paramsSource).ToArray());
var affrows = await _orm.Ado.ExecuteNonQueryAsync(_transaction, CommandType.Text, sql, _params.Concat(_paramsSource).ToArray());
this.ClearData();
return affrows;
}
public abstract List<T1> ExecuteUpdated();
public abstract Task<List<T1>> ExecuteUpdatedAsync();

View File

@ -24,7 +24,9 @@ namespace FreeSql.MySql.Curd {
sb.Append(_commonUtils.QuoteReadColumn(col.CsType, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
++colidx;
}
return _orm.Ado.Query<T1>(_transaction, CommandType.Text, sb.ToString(), _params.ToArray());
var ret = _orm.Ado.Query<T1>(_transaction, CommandType.Text, sb.ToString(), _params.ToArray());
this.ClearData();
return ret;
}
async public override Task<List<T1>> ExecuteDeletedAsync() {
var sql = this.ToSql();
@ -39,7 +41,9 @@ namespace FreeSql.MySql.Curd {
sb.Append(_commonUtils.QuoteReadColumn(col.CsType, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
++colidx;
}
return await _orm.Ado.QueryAsync<T1>(_transaction, CommandType.Text, sb.ToString(), _params.ToArray());
var ret = await _orm.Ado.QueryAsync<T1>(_transaction, CommandType.Text, sb.ToString(), _params.ToArray());
this.ClearData();
return ret;
}
}
}

View File

@ -23,13 +23,17 @@ namespace FreeSql.MySql.Curd {
var sql = this.ToSql();
if (string.IsNullOrEmpty(sql)) return 0;
return long.TryParse(string.Concat(_orm.Ado.ExecuteScalar(_transaction, CommandType.Text, string.Concat(sql, "; SELECT LAST_INSERT_ID();"), _params)), out var trylng) ? trylng : 0;
var id = long.TryParse(string.Concat(_orm.Ado.ExecuteScalar(_transaction, CommandType.Text, string.Concat(sql, "; SELECT LAST_INSERT_ID();"), _params)), out var trylng) ? trylng : 0;
this.ClearData();
return id;
}
async internal override Task<long> RawExecuteIdentityAsync() {
var sql = this.ToSql();
if (string.IsNullOrEmpty(sql)) return 0;
return long.TryParse(string.Concat(await _orm.Ado.ExecuteScalarAsync(_transaction, CommandType.Text, string.Concat(sql, "; SELECT LAST_INSERT_ID();"), _params)), out var trylng) ? trylng : 0;
var id = long.TryParse(string.Concat(await _orm.Ado.ExecuteScalarAsync(_transaction, CommandType.Text, string.Concat(sql, "; SELECT LAST_INSERT_ID();"), _params)), out var trylng) ? trylng : 0;
this.ClearData();
return id;
}
internal override List<T1> RawExecuteInserted() {
var sql = this.ToSql();
@ -44,7 +48,9 @@ namespace FreeSql.MySql.Curd {
sb.Append(_commonUtils.QuoteReadColumn(col.CsType, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
++colidx;
}
return _orm.Ado.Query<T1>(_transaction, CommandType.Text, sb.ToString(), _params);
var ret = _orm.Ado.Query<T1>(_transaction, CommandType.Text, sb.ToString(), _params);
this.ClearData();
return ret;
}
async internal override Task<List<T1>> RawExecuteInsertedAsync() {
var sql = this.ToSql();
@ -59,7 +65,9 @@ namespace FreeSql.MySql.Curd {
sb.Append(_commonUtils.QuoteReadColumn(col.CsType, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
++colidx;
}
return await _orm.Ado.QueryAsync<T1>(_transaction, CommandType.Text, sb.ToString(), _params);
var ret = await _orm.Ado.QueryAsync<T1>(_transaction, CommandType.Text, sb.ToString(), _params);
this.ClearData();
return ret;
}
}
}

View File

@ -27,7 +27,9 @@ namespace FreeSql.MySql.Curd {
sb.Append(_commonUtils.QuoteReadColumn(col.CsType, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
++colidx;
}
return _orm.Ado.Query<T1>(_transaction, CommandType.Text, sb.ToString(), _params.Concat(_paramsSource).ToArray());
var ret = _orm.Ado.Query<T1>(_transaction, CommandType.Text, sb.ToString(), _params.Concat(_paramsSource).ToArray());
this.ClearData();
return ret;
}
async public override Task<List<T1>> ExecuteUpdatedAsync() {
var sql = this.ToSql();
@ -42,7 +44,9 @@ namespace FreeSql.MySql.Curd {
sb.Append(_commonUtils.QuoteReadColumn(col.CsType, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
++colidx;
}
return await _orm.Ado.QueryAsync<T1>(_transaction, CommandType.Text, sb.ToString(), _params.Concat(_paramsSource).ToArray());
var ret = await _orm.Ado.QueryAsync<T1>(_transaction, CommandType.Text, sb.ToString(), _params.Concat(_paramsSource).ToArray());
this.ClearData();
return ret;
}
protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys) {

View File

@ -69,8 +69,8 @@ namespace FreeSql.Oracle.Curd {
if (_noneParameter)
sb.Append(_commonUtils.GetNoneParamaterSqlValue(specialParams, col.CsType, val));
else {
sb.Append(_commonUtils.QuoteWriteParamter(col.CsType, _commonUtils.QuoteParamterName($"{col.CsName}{didx}")));
_params[didx * colidx + colidx2] = _commonUtils.AppendParamter(null, $"{col.CsName}{didx}", col.CsType, val);
sb.Append(_commonUtils.QuoteWriteParamter(col.CsType, _commonUtils.QuoteParamterName($"{col.CsName}_{didx}")));
_params[didx * colidx + colidx2] = _commonUtils.AppendParamter(null, $"{col.CsName}_{didx}", col.CsType, val);
}
++colidx2;
}
@ -95,7 +95,9 @@ namespace FreeSql.Oracle.Curd {
var identParam = _commonUtils.AppendParamter(null, $"{_identCol.CsName}99", _identCol.CsType, 0) as OracleParameter;
identParam.Direction = ParameterDirection.Output;
_orm.Ado.ExecuteNonQuery(_transaction, CommandType.Text, $"{sql} RETURNING {identColName} INTO {identParam.ParameterName}", _params.Concat(new[] { identParam }).ToArray());
return long.TryParse(string.Concat(identParam.Value), out var trylng) ? trylng : 0;
var id = long.TryParse(string.Concat(identParam.Value), out var trylng) ? trylng : 0;
this.ClearData();
return id;
}
async internal override Task<long> RawExecuteIdentityAsync() {
var sql = this.ToSql();
@ -109,7 +111,9 @@ namespace FreeSql.Oracle.Curd {
var identParam = _commonUtils.AppendParamter(null, $"{_identCol.CsName}99", _identCol.CsType, 0) as OracleParameter;
identParam.Direction = ParameterDirection.Output;
await _orm.Ado.ExecuteNonQueryAsync(_transaction, CommandType.Text, $"{sql} RETURNING {identColName} INTO {identParam.ParameterName}", _params.Concat(new[] { identParam }).ToArray());
return long.TryParse(string.Concat(identParam.Value), out var trylng) ? trylng : 0;
var id = long.TryParse(string.Concat(identParam.Value), out var trylng) ? trylng : 0;
this.ClearData();
return id;
}
internal override List<T1> RawExecuteInserted() {
@ -117,6 +121,7 @@ namespace FreeSql.Oracle.Curd {
if (string.IsNullOrEmpty(sql)) return new List<T1>();
this.ExecuteAffrows();
this.ClearData();
return _source;
}
async internal override Task<List<T1>> RawExecuteInsertedAsync() {
@ -124,6 +129,7 @@ namespace FreeSql.Oracle.Curd {
if (string.IsNullOrEmpty(sql)) return new List<T1>();
await this.ExecuteAffrowsAsync();
this.ClearData();
return _source;
}
}

View File

@ -24,7 +24,9 @@ namespace FreeSql.PostgreSQL.Curd {
sb.Append(_commonUtils.QuoteReadColumn(col.CsType, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
++colidx;
}
return _orm.Ado.Query<T1>(_transaction, CommandType.Text, sb.ToString(), _params.ToArray());
var ret = _orm.Ado.Query<T1>(_transaction, CommandType.Text, sb.ToString(), _params.ToArray());
this.ClearData();
return ret;
}
async public override Task<List<T1>> ExecuteDeletedAsync() {
var sql = this.ToSql();
@ -39,7 +41,9 @@ namespace FreeSql.PostgreSQL.Curd {
sb.Append(_commonUtils.QuoteReadColumn(col.CsType, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
++colidx;
}
return await _orm.Ado.QueryAsync<T1>(_transaction, CommandType.Text, sb.ToString(), _params.ToArray());
var ret = await _orm.Ado.QueryAsync<T1>(_transaction, CommandType.Text, sb.ToString(), _params.ToArray());
this.ClearData();
return ret;
}
}
}

View File

@ -29,7 +29,9 @@ namespace FreeSql.PostgreSQL.Curd {
_orm.Ado.ExecuteNonQuery(_transaction, CommandType.Text, sql, _params);
return 0;
}
return long.TryParse(string.Concat(_orm.Ado.ExecuteScalar(_transaction, CommandType.Text, string.Concat(sql, " RETURNING ", _commonUtils.QuoteSqlName(identCols.First().Value.Attribute.Name)), _params)), out var trylng) ? trylng : 0;
var id = long.TryParse(string.Concat(_orm.Ado.ExecuteScalar(_transaction, CommandType.Text, string.Concat(sql, " RETURNING ", _commonUtils.QuoteSqlName(identCols.First().Value.Attribute.Name)), _params)), out var trylng) ? trylng : 0;
this.ClearData();
return id;
}
async internal override Task<long> RawExecuteIdentityAsync() {
var sql = this.ToSql();
@ -40,7 +42,9 @@ namespace FreeSql.PostgreSQL.Curd {
await _orm.Ado.ExecuteNonQueryAsync(_transaction, CommandType.Text, sql, _params);
return 0;
}
return long.TryParse(string.Concat(await _orm.Ado.ExecuteScalarAsync(_transaction, CommandType.Text, string.Concat(sql, " RETURNING ", _commonUtils.QuoteSqlName(identCols.First().Value.Attribute.Name)), _params)), out var trylng) ? trylng : 0;
var id = long.TryParse(string.Concat(await _orm.Ado.ExecuteScalarAsync(_transaction, CommandType.Text, string.Concat(sql, " RETURNING ", _commonUtils.QuoteSqlName(identCols.First().Value.Attribute.Name)), _params)), out var trylng) ? trylng : 0;
this.ClearData();
return id;
}
internal override List<T1> RawExecuteInserted() {
@ -56,7 +60,9 @@ namespace FreeSql.PostgreSQL.Curd {
sb.Append(_commonUtils.QuoteReadColumn(col.CsType, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
++colidx;
}
return _orm.Ado.Query<T1>(_transaction, CommandType.Text, sb.ToString(), _params);
var ret = _orm.Ado.Query<T1>(_transaction, CommandType.Text, sb.ToString(), _params);
this.ClearData();
return ret;
}
async internal override Task<List<T1>> RawExecuteInsertedAsync() {
var sql = this.ToSql();
@ -71,7 +77,9 @@ namespace FreeSql.PostgreSQL.Curd {
sb.Append(_commonUtils.QuoteReadColumn(col.CsType, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
++colidx;
}
return await _orm.Ado.QueryAsync<T1>(_transaction, CommandType.Text, sb.ToString(), _params);
var ret = await _orm.Ado.QueryAsync<T1>(_transaction, CommandType.Text, sb.ToString(), _params);
this.ClearData();
return ret;
}
}
}

View File

@ -27,7 +27,9 @@ namespace FreeSql.PostgreSQL.Curd {
sb.Append(_commonUtils.QuoteReadColumn(col.CsType, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
++colidx;
}
return _orm.Ado.Query<T1>(_transaction, CommandType.Text, sb.ToString(), _params.Concat(_paramsSource).ToArray());
var ret = _orm.Ado.Query<T1>(_transaction, CommandType.Text, sb.ToString(), _params.Concat(_paramsSource).ToArray());
this.ClearData();
return ret;
}
async public override Task<List<T1>> ExecuteUpdatedAsync() {
var sql = this.ToSql();
@ -42,7 +44,9 @@ namespace FreeSql.PostgreSQL.Curd {
sb.Append(_commonUtils.QuoteReadColumn(col.CsType, _commonUtils.QuoteSqlName(col.Attribute.Name))).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
++colidx;
}
return await _orm.Ado.QueryAsync<T1>(_transaction, CommandType.Text, sb.ToString(), _params.Concat(_paramsSource).ToArray());
var ret = await _orm.Ado.QueryAsync<T1>(_transaction, CommandType.Text, sb.ToString(), _params.Concat(_paramsSource).ToArray());
this.ClearData();
return ret;
}
protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys) {

View File

@ -30,7 +30,9 @@ namespace FreeSql.SqlServer.Curd {
sb.Insert(0, sql.Substring(0, validx));
sb.Append(sql.Substring(validx));
return _orm.Ado.Query<T1>(_transaction, CommandType.Text, sb.ToString(), _params.ToArray());
var ret = _orm.Ado.Query<T1>(_transaction, CommandType.Text, sb.ToString(), _params.ToArray());
this.ClearData();
return ret;
}
async public override Task<List<T1>> ExecuteDeletedAsync() {
var sql = this.ToSql();
@ -50,7 +52,9 @@ namespace FreeSql.SqlServer.Curd {
sb.Insert(0, sql.Substring(0, validx));
sb.Append(sql.Substring(validx));
return await _orm.Ado.QueryAsync<T1>(_transaction, CommandType.Text, sb.ToString(), _params.ToArray());
var ret = await _orm.Ado.QueryAsync<T1>(_transaction, CommandType.Text, sb.ToString(), _params.ToArray());
this.ClearData();
return ret;
}
}
}

View File

@ -26,13 +26,17 @@ namespace FreeSql.SqlServer.Curd {
var sql = this.ToSql();
if (string.IsNullOrEmpty(sql)) return 0;
return long.TryParse(string.Concat(_orm.Ado.ExecuteScalar(_transaction, CommandType.Text, string.Concat(sql, "; SELECT SCOPE_IDENTITY();"), _params)), out var trylng) ? trylng : 0;
var id = long.TryParse(string.Concat(_orm.Ado.ExecuteScalar(_transaction, CommandType.Text, string.Concat(sql, "; SELECT SCOPE_IDENTITY();"), _params)), out var trylng) ? trylng : 0;
this.ClearData();
return id;
}
async internal override Task<long> RawExecuteIdentityAsync() {
var sql = this.ToSql();
if (string.IsNullOrEmpty(sql)) return 0;
return long.TryParse(string.Concat(await _orm.Ado.ExecuteScalarAsync(_transaction, CommandType.Text, string.Concat(sql, "; SELECT SCOPE_IDENTITY();"), _params)), out var trylng) ? trylng : 0;
var id = long.TryParse(string.Concat(await _orm.Ado.ExecuteScalarAsync(_transaction, CommandType.Text, string.Concat(sql, "; SELECT SCOPE_IDENTITY();"), _params)), out var trylng) ? trylng : 0;
this.ClearData();
return id;
}
internal override List<T1> RawExecuteInserted() {
@ -53,7 +57,9 @@ namespace FreeSql.SqlServer.Curd {
sb.Insert(0, sql.Substring(0, validx + 1));
sb.Append(sql.Substring(validx + 1));
return _orm.Ado.Query<T1>(_transaction, CommandType.Text, sb.ToString(), _params);
var ret = _orm.Ado.Query<T1>(_transaction, CommandType.Text, sb.ToString(), _params);
this.ClearData();
return ret;
}
async internal override Task<List<T1>> RawExecuteInsertedAsync() {
var sql = this.ToSql();
@ -73,7 +79,9 @@ namespace FreeSql.SqlServer.Curd {
sb.Insert(0, sql.Substring(0, validx + 1));
sb.Append(sql.Substring(validx + 1));
return await _orm.Ado.QueryAsync<T1>(_transaction, CommandType.Text, sb.ToString(), _params);
var ret = await _orm.Ado.QueryAsync<T1>(_transaction, CommandType.Text, sb.ToString(), _params);
this.ClearData();
return ret;
}
}
}

View File

@ -1,281 +0,0 @@
//using FreeSql.Internal;
//using System;
//using System.Collections.Generic;
//using System.Data;
//using System.Data.Common;
//using System.Linq;
//using System.Text;
//using System.Threading.Tasks;
//namespace FreeSql.SqlServer.Curd {
// class SqlServerInsert<T1> : Internal.CommonProvider.InsertProvider<T1> where T1 : class {
// public SqlServerInsert(IFreeSql orm, CommonUtils commonUtils, CommonExpression commonExpression)
// : base(orm, commonUtils, commonExpression) {
// }
// public override int ExecuteAffrows() {
// var sql = this.ToSql2100();
// switch (sql.Count) {
// case 0: return 0;
// case 1: return _orm.Ado.ExecuteNonQuery(_transaction, CommandType.Text, sql[0].Item1, sql[0].Item2);
// default:
// var affrows = 0;
// if (_transaction == null) {
// using (var conn = _orm.Ado.MasterPool.Get()) {
// var tran = conn.Value.BeginTransaction();
// try {
// foreach (var s in sql)
// affrows += _orm.Ado.ExecuteNonQuery(tran, CommandType.Text, s.Item1, s.Item2);
// tran.Commit();
// } catch {
// tran.Rollback();
// }
// }
// } else {
// foreach (var s in sql)
// affrows += _orm.Ado.ExecuteNonQuery(_transaction, CommandType.Text, s.Item1, s.Item2);
// }
// return affrows;
// }
// }
// async public override Task<int> ExecuteAffrowsAsync() {
// var sql = this.ToSql2100();
// switch (sql.Count) {
// case 0: return 0;
// case 1: return await _orm.Ado.ExecuteNonQueryAsync(_transaction, CommandType.Text, sql[0].Item1, sql[0].Item2);
// default:
// var affrows = 0;
// if (_transaction == null) {
// using (var conn = await _orm.Ado.MasterPool.GetAsync()) {
// var tran = conn.Value.BeginTransaction();
// try {
// foreach (var s in sql)
// affrows += await _orm.Ado.ExecuteNonQueryAsync(tran, CommandType.Text, s.Item1, s.Item2);
// tran.Commit();
// } catch {
// tran.Rollback();
// }
// }
// } else {
// foreach (var s in sql)
// affrows += await _orm.Ado.ExecuteNonQueryAsync(_transaction, CommandType.Text, s.Item1, s.Item2);
// }
// return affrows;
// }
// }
// public override long ExecuteIdentity() {
// var sql = this.ToSql2100();
// switch (sql.Count) {
// case 0: return 0;
// case 1:
// if (string.IsNullOrEmpty(sql[0].Item1)) return 0;
// return long.TryParse(string.Concat(_orm.Ado.ExecuteScalar(_transaction, CommandType.Text, string.Concat(sql[0].Item1, "; SELECT SCOPE_IDENTITY();"), sql[0].Item2)), out var trylng) ? trylng : 0;
// default:
// long ret = 0;
// if (_transaction == null) {
// using (var conn = _orm.Ado.MasterPool.Get()) {
// var tran = conn.Value.BeginTransaction();
// try {
// for (var a = 0; a < sql.Count; a++) {
// var s = sql[a];
// if (a < sql.Count - 1) _orm.Ado.ExecuteNonQuery(tran, CommandType.Text, s.Item1, s.Item2);
// else ret = long.TryParse(string.Concat(_orm.Ado.ExecuteScalar(tran, CommandType.Text, string.Concat(s.Item1, "; SELECT SCOPE_IDENTITY();"), s.Item2)), out trylng) ? trylng : 0;
// }
// tran.Commit();
// } catch {
// tran.Rollback();
// }
// }
// } else {
// for (var a = 0; a < sql.Count; a++) {
// var s = sql[a];
// if (a < sql.Count - 1) _orm.Ado.ExecuteNonQuery(_transaction, CommandType.Text, s.Item1, s.Item2);
// else ret = long.TryParse(string.Concat(_orm.Ado.ExecuteScalar(_transaction, CommandType.Text, string.Concat(s.Item1, "; SELECT SCOPE_IDENTITY();"), s.Item2)), out trylng) ? trylng : 0;
// }
// }
// return ret;
// }
// }
// async public override Task<long> ExecuteIdentityAsync() {
// var sql = this.ToSql2100();
// switch (sql.Count) {
// case 0: return 0;
// case 1:
// if (string.IsNullOrEmpty(sql[0].Item1)) return 0;
// return long.TryParse(string.Concat(await _orm.Ado.ExecuteScalarAsync(_transaction, CommandType.Text, string.Concat(sql[0].Item1, "; SELECT SCOPE_IDENTITY();"), sql[0].Item2)), out var trylng) ? trylng : 0;
// default:
// long ret = 0;
// if (_transaction == null) {
// using (var conn = await _orm.Ado.MasterPool.GetAsync()) {
// var tran = conn.Value.BeginTransaction();
// try {
// for (var a = 0; a < sql.Count; a++) {
// var s = sql[a];
// if (a < sql.Count - 1) await _orm.Ado.ExecuteNonQueryAsync(tran, CommandType.Text, s.Item1, s.Item2);
// else ret = long.TryParse(string.Concat(await _orm.Ado.ExecuteScalarAsync(tran, CommandType.Text, string.Concat(s.Item1, "; SELECT SCOPE_IDENTITY();"), s.Item2)), out trylng) ? trylng : 0;
// }
// tran.Commit();
// } catch {
// tran.Rollback();
// }
// }
// } else {
// for (var a = 0; a < sql.Count; a++) {
// var s = sql[a];
// if (a < sql.Count - 1) await _orm.Ado.ExecuteNonQueryAsync(_transaction, CommandType.Text, s.Item1, s.Item2);
// else ret = long.TryParse(string.Concat(await _orm.Ado.ExecuteScalarAsync(_transaction, CommandType.Text, string.Concat(s.Item1, "; SELECT SCOPE_IDENTITY();"), s.Item2)), out trylng) ? trylng : 0;
// }
// }
// return ret;
// }
// }
// public override List<T1> ExecuteInserted() {
// string output = null;
// Func<string, string> getOutputSql = oldsql => {
// if (string.IsNullOrEmpty(output)) {
// var sb = new StringBuilder();
// sb.Append(" OUTPUT ");
// var colidx = 0;
// foreach (var col in _table.Columns.Values) {
// if (colidx > 0) sb.Append(", ");
// sb.Append(_commonUtils.QuoteReadColumn(col.CsType, $"INSERTED.{_commonUtils.QuoteSqlName(col.Attribute.Name)}")).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
// ++colidx;
// }
// output = sb.ToString();
// }
// var validx = oldsql.IndexOf(") VALUES");
// if (validx == -1) throw new ArgumentException("找不到 VALUES");
// var newsql = new StringBuilder().Append(output);
// newsql.Insert(0, oldsql.Substring(0, validx + 1));
// newsql.Append(oldsql.Substring(validx + 1));
// return newsql.ToString();
// };
// var sql = this.ToSql2100();
// switch (sql.Count) {
// case 0: return new List<T1>();
// case 1:
// if (string.IsNullOrEmpty(sql[0].Item1)) return new List<T1>();
// return _orm.Ado.Query<T1>(_transaction, CommandType.Text, getOutputSql(sql[0].Item1), sql[0].Item2);
// default:
// var ret = new List<T1>();
// if (_transaction == null) {
// using (var conn = _orm.Ado.MasterPool.Get()) {
// var tran = conn.Value.BeginTransaction();
// try {
// foreach (var s in sql)
// ret.AddRange(_orm.Ado.Query<T1>(tran, CommandType.Text, getOutputSql(s.Item1), s.Item2));
// tran.Commit();
// } catch {
// tran.Rollback();
// }
// }
// } else {
// foreach (var s in sql)
// ret.AddRange(_orm.Ado.Query<T1>(_transaction, CommandType.Text, getOutputSql(s.Item1), s.Item2));
// }
// return ret;
// }
// }
// async public override Task<List<T1>> ExecuteInsertedAsync() {
// string output = null;
// Func<string, string> getOutputSql = oldsql => {
// if (string.IsNullOrEmpty(output)) {
// var sb = new StringBuilder();
// sb.Append(" OUTPUT ");
// var colidx = 0;
// foreach (var col in _table.Columns.Values) {
// if (colidx > 0) sb.Append(", ");
// sb.Append(_commonUtils.QuoteReadColumn(col.CsType, $"INSERTED.{_commonUtils.QuoteSqlName(col.Attribute.Name)}")).Append(" as ").Append(_commonUtils.QuoteSqlName(col.CsName));
// ++colidx;
// }
// output = sb.ToString();
// }
// var validx = oldsql.IndexOf(") VALUES");
// if (validx == -1) throw new ArgumentException("找不到 VALUES");
// var newsql = new StringBuilder().Append(output);
// newsql.Insert(0, oldsql.Substring(0, validx + 1));
// newsql.Append(oldsql.Substring(validx + 1));
// return oldsql;
// };
// var sql = this.ToSql2100();
// switch (sql.Count) {
// case 0: return new List<T1>();
// case 1:
// if (string.IsNullOrEmpty(sql[0].Item1)) return new List<T1>();
// return await _orm.Ado.QueryAsync<T1>(_transaction, CommandType.Text, getOutputSql(sql[0].Item1), sql[0].Item2);
// default:
// var ret = new List<T1>();
// if (_transaction == null) {
// using (var conn = await _orm.Ado.MasterPool.GetAsync()) {
// var tran = conn.Value.BeginTransaction();
// try {
// foreach (var s in sql)
// ret.AddRange(await _orm.Ado.QueryAsync<T1>(tran, CommandType.Text, getOutputSql(s.Item1), s.Item2));
// tran.Commit();
// } catch {
// tran.Rollback();
// }
// }
// } else {
// foreach (var s in sql)
// ret.AddRange(await _orm.Ado.QueryAsync<T1>(_transaction, CommandType.Text, getOutputSql(s.Item1), s.Item2));
// }
// return ret;
// }
// }
// public List<(string, DbParameter[])> ToSql2100() { //传入的请求具有过多的参数。该服务器支持最多 2100 个参数。请减少参数的数目,然后重新发送该请求。
// if (_source == null || _source.Any() == false) return new List<(string, DbParameter[])>();
// var ret = new List<(string, DbParameter[])>();
// var sbhead = new StringBuilder();
// sbhead.Append("INSERT INTO ").Append(_commonUtils.QuoteSqlName(_tableRule?.Invoke(_table.DbName) ?? _table.DbName)).Append("(");
// var colidx = 0;
// foreach (var col in _table.Columns.Values)
// if (col.Attribute.IsIdentity == false && _ignore.ContainsKey(col.Attribute.Name) == false) {
// if (colidx > 0) sbhead.Append(", ");
// sbhead.Append(_commonUtils.QuoteSqlName(col.Attribute.Name));
// ++colidx;
// }
// sbhead.Append(") VALUES");
// var sbh = sbhead.ToString();
// var sbsql = new StringBuilder().Append(sbh);
// var sbsqlParams = new List<DbParameter>();
// var didx = 0;
// foreach (var d in _source) {
// if ((didx + 1) * colidx >= 2100) {
// ret.Add((sbsql.ToString(), sbsqlParams.ToArray()));
// sbsql.Clear().Append(sbh);
// sbsqlParams.Clear();
// didx = 0;
// }
// if (sbsqlParams.Count > 0) sbsql.Append(", ");
// sbsql.Append("(");
// var colidx2 = 0;
// foreach (var col in _table.Columns.Values)
// if (col.Attribute.IsIdentity == false && _ignore.ContainsKey(col.Attribute.Name) == false) {
// if (colidx2 > 0) sbsql.Append(", ");
// sbsql.Append(_commonUtils.QuoteWriteParamter(col.CsType, $"{_commonUtils.QuoteParamterName(col.CsName)}{didx}"));
// object val = null;
// if (_table.Properties.TryGetValue(col.CsName, out var tryp)) {
// val = tryp.GetValue(d);
// if (col.Attribute.IsPrimary && (col.CsType == typeof(Guid) || col.CsType == typeof(Guid?))
// && (val == null || (Guid)val == Guid.Empty)) tryp.SetValue(d, val = FreeUtil.NewMongodbId());
// }
// sbsqlParams.Add(_commonUtils.AppendParamter(null, $"{col.CsName}{didx}", col.CsType, val));
// ++colidx2;
// }
// sbsql.Append(")");
// ++didx;
// }
// ret.Add((sbsql.ToString(), sbsqlParams.ToArray()));
// return ret;
// }
// }
//}

View File

@ -33,7 +33,9 @@ namespace FreeSql.SqlServer.Curd {
sb.Insert(0, sql.Substring(0, validx));
sb.Append(sql.Substring(validx));
return _orm.Ado.Query<T1>(_transaction, CommandType.Text, sb.ToString(), _params.Concat(_paramsSource).ToArray());
var ret = _orm.Ado.Query<T1>(_transaction, CommandType.Text, sb.ToString(), _params.Concat(_paramsSource).ToArray());
this.ClearData();
return ret;
}
async public override Task<List<T1>> ExecuteUpdatedAsync() {
var sql = this.ToSql();
@ -53,7 +55,9 @@ namespace FreeSql.SqlServer.Curd {
sb.Insert(0, sql.Substring(0, validx));
sb.Append(sql.Substring(validx));
return await _orm.Ado.QueryAsync<T1>(_transaction, CommandType.Text, sb.ToString(), _params.Concat(_paramsSource).ToArray());
var ret = await _orm.Ado.QueryAsync<T1>(_transaction, CommandType.Text, sb.ToString(), _params.Concat(_paramsSource).ToArray());
this.ClearData();
return ret;
}
protected override void ToSqlCase(StringBuilder caseWhen, ColumnInfo[] primarys) {

View File

@ -25,19 +25,24 @@ namespace FreeSql.Sqlite.Curd {
var sql = this.ToSql();
if (string.IsNullOrEmpty(sql)) return 0;
return long.TryParse(string.Concat(_orm.Ado.ExecuteScalar(_transaction, CommandType.Text, string.Concat(sql, "; SELECT last_insert_rowid();"), _params)), out var trylng) ? trylng : 0;
var id = long.TryParse(string.Concat(_orm.Ado.ExecuteScalar(_transaction, CommandType.Text, string.Concat(sql, "; SELECT last_insert_rowid();"), _params)), out var trylng) ? trylng : 0;
this.ClearData();
return id;
}
async internal override Task<long> RawExecuteIdentityAsync() {
var sql = this.ToSql();
if (string.IsNullOrEmpty(sql)) return 0;
return long.TryParse(string.Concat(await _orm.Ado.ExecuteScalarAsync(_transaction, CommandType.Text, string.Concat(sql, "; SELECT last_insert_rowid();"), _params)), out var trylng) ? trylng : 0;
var id = long.TryParse(string.Concat(await _orm.Ado.ExecuteScalarAsync(_transaction, CommandType.Text, string.Concat(sql, "; SELECT last_insert_rowid();"), _params)), out var trylng) ? trylng : 0;
this.ClearData();
return id;
}
internal override List<T1> RawExecuteInserted() {
var sql = this.ToSql();
if (string.IsNullOrEmpty(sql)) return new List<T1>();
this.ExecuteAffrows();
this.ClearData();
return _source;
}
async internal override Task<List<T1>> RawExecuteInsertedAsync() {
@ -45,6 +50,7 @@ namespace FreeSql.Sqlite.Curd {
if (string.IsNullOrEmpty(sql)) return new List<T1>();
await this.ExecuteAffrowsAsync();
this.ClearData();
return _source;
}
}