mirror of
https://github.com/nsnail/FreeSql.git
synced 2025-06-19 12:28:15 +08:00
- 修复 Ado.Query 查询字段重复时报错;#162 #165 #161 - 增加 FreeSql.Provider.MsAccess 支持 Access 数据库操作,已通过 2003/2007 版本测试;
This commit is contained in:
@ -22,8 +22,13 @@ namespace FreeSql
|
||||
Odbc,
|
||||
|
||||
/// <summary>
|
||||
/// 国产数据库达梦
|
||||
/// 武汉达梦数据库有限公司
|
||||
/// </summary>
|
||||
OdbcDameng,
|
||||
|
||||
/// <summary>
|
||||
/// Microsoft Office Access 是由微软发布的关联式数据库管理系统
|
||||
/// </summary>
|
||||
MsAccess,
|
||||
}
|
||||
}
|
||||
|
@ -5,7 +5,7 @@
|
||||
<Version>0.12.21</Version>
|
||||
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
|
||||
<Authors>YeXiangQin</Authors>
|
||||
<Description>FreeSql is the ORM in .NetCore, .NetFramework, And Xamarin. It supports Mysql, Postgresql, SqlServer, Oracle, Sqlite, And Odbc. 达梦</Description>
|
||||
<Description>FreeSql is the ORM in .NetCore, .NetFramework, And Xamarin. It supports Mysql, Postgresql, SqlServer, Oracle, Sqlite, Odbc, 达梦, And Access</Description>
|
||||
<PackageProjectUrl>https://github.com/2881099/FreeSql</PackageProjectUrl>
|
||||
<RepositoryUrl>https://github.com/2881099/FreeSql</RepositoryUrl>
|
||||
<RepositoryType>git</RepositoryType>
|
||||
@ -28,7 +28,7 @@
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="SafeObjectPool" Version="2.2.0" />
|
||||
<PackageReference Include="SafeObjectPool" Version="2.2.1" />
|
||||
<PackageReference Include="System.ValueTuple" Version="4.5.0" />
|
||||
</ItemGroup>
|
||||
|
||||
|
@ -486,7 +486,12 @@
|
||||
</member>
|
||||
<member name="F:FreeSql.DataType.OdbcDameng">
|
||||
<summary>
|
||||
国产数据库达梦
|
||||
武汉达梦数据库有限公司
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:FreeSql.DataType.MsAccess">
|
||||
<summary>
|
||||
Microsoft Office Access 是由微软发布的关联式数据库管理系统
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:FreeSql.Extensions.EntityUtil.EntityUtilExtensions.GetEntityKeyString(IFreeSql,System.Type,System.Object,System.Boolean,System.String)">
|
||||
@ -1725,7 +1730,7 @@
|
||||
【linq to sql】专用方法,不建议直接使用
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:FreeSql.ISelectGrouping`2.ToSql``1(System.Linq.Expressions.Expression{System.Func{FreeSql.ISelectGroupingAggregate{`0,`1},``0}})">
|
||||
<member name="M:FreeSql.ISelectGrouping`2.ToSql``1(System.Linq.Expressions.Expression{System.Func{FreeSql.ISelectGroupingAggregate{`0,`1},``0}},FreeSql.FieldAliasOptions)">
|
||||
<summary>
|
||||
返回即将执行的SQL语句
|
||||
</summary>
|
||||
@ -2200,137 +2205,6 @@
|
||||
<param name="parms"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:FreeSql.IAdo.ExecuteReaderAsync(System.Func{System.Data.Common.DbDataReader,System.Threading.Tasks.Task},System.Data.CommandType,System.String,System.Data.Common.DbParameter[])">
|
||||
<summary>
|
||||
查询,若使用读写分离,查询【从库】条件cmdText.StartsWith("SELECT "),否则查询【主库】
|
||||
</summary>
|
||||
<param name="readerHander"></param>
|
||||
<param name="cmdType"></param>
|
||||
<param name="cmdText"></param>
|
||||
<param name="cmdParms"></param>
|
||||
</member>
|
||||
<member name="M:FreeSql.IAdo.ExecuteReaderAsync(System.Func{System.Data.Common.DbDataReader,System.Threading.Tasks.Task},System.String,System.Object)">
|
||||
<summary>
|
||||
查询,ExecuteReaderAsync(dr => {}, "select * from user where age > @age", new { age = 25 })
|
||||
</summary>
|
||||
<param name="cmdText"></param>
|
||||
<param name="parms"></param>
|
||||
</member>
|
||||
<member name="M:FreeSql.IAdo.ExecuteArrayAsync(System.Data.CommandType,System.String,System.Data.Common.DbParameter[])">
|
||||
<summary>
|
||||
查询
|
||||
</summary>
|
||||
<param name="cmdText"></param>
|
||||
<param name="cmdParms"></param>
|
||||
</member>
|
||||
<member name="M:FreeSql.IAdo.ExecuteArrayAsync(System.String,System.Object)">
|
||||
<summary>
|
||||
查询,ExecuteArrayAsync("select * from user where age > @age", new { age = 25 })
|
||||
</summary>
|
||||
<param name="cmdText"></param>
|
||||
<param name="parms"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:FreeSql.IAdo.ExecuteDataSetAsync(System.Data.CommandType,System.String,System.Data.Common.DbParameter[])">
|
||||
<summary>
|
||||
查询
|
||||
</summary>
|
||||
<param name="cmdText"></param>
|
||||
<param name="cmdParms"></param>
|
||||
</member>
|
||||
<member name="M:FreeSql.IAdo.ExecuteDataSetAsync(System.String,System.Object)">
|
||||
<summary>
|
||||
查询,ExecuteDataSetAsync("select * from user where age > @age; select 2", new { age = 25 })
|
||||
</summary>
|
||||
<param name="cmdText"></param>
|
||||
<param name="parms"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:FreeSql.IAdo.ExecuteDataTableAsync(System.Data.CommandType,System.String,System.Data.Common.DbParameter[])">
|
||||
<summary>
|
||||
查询
|
||||
</summary>
|
||||
<param name="cmdText"></param>
|
||||
<param name="cmdParms"></param>
|
||||
</member>
|
||||
<member name="M:FreeSql.IAdo.ExecuteDataTableAsync(System.String,System.Object)">
|
||||
<summary>
|
||||
查询,ExecuteDataTableAsync("select * from user where age > @age", new { age = 25 })
|
||||
</summary>
|
||||
<param name="cmdText"></param>
|
||||
<param name="parms"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:FreeSql.IAdo.ExecuteNonQueryAsync(System.Data.CommandType,System.String,System.Data.Common.DbParameter[])">
|
||||
<summary>
|
||||
在【主库】执行
|
||||
</summary>
|
||||
<param name="cmdType"></param>
|
||||
<param name="cmdText"></param>
|
||||
<param name="cmdParms"></param>
|
||||
</member>
|
||||
<member name="M:FreeSql.IAdo.ExecuteNonQueryAsync(System.String,System.Object)">
|
||||
<summary>
|
||||
在【主库】执行,ExecuteNonQueryAsync("delete from user where age > @age", new { age = 25 })
|
||||
</summary>
|
||||
<param name="cmdText"></param>
|
||||
<param name="parms"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:FreeSql.IAdo.ExecuteScalarAsync(System.Data.CommandType,System.String,System.Data.Common.DbParameter[])">
|
||||
<summary>
|
||||
在【主库】执行
|
||||
</summary>
|
||||
<param name="cmdType"></param>
|
||||
<param name="cmdText"></param>
|
||||
<param name="cmdParms"></param>
|
||||
</member>
|
||||
<member name="M:FreeSql.IAdo.ExecuteScalarAsync(System.String,System.Object)">
|
||||
<summary>
|
||||
在【主库】执行,ExecuteScalarAsync("select 1 from user where age > @age", new { age = 25 })
|
||||
</summary>
|
||||
<param name="cmdText"></param>
|
||||
<param name="parms"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:FreeSql.IAdo.QueryAsync``1(System.Data.CommandType,System.String,System.Data.Common.DbParameter[])">
|
||||
<summary>
|
||||
执行SQL返回对象集合,QueryAsync<User>("select * from user where age > @age", new SqlParameter { ParameterName = "age", Value = 25 })
|
||||
</summary>
|
||||
<typeparam name="T"></typeparam>
|
||||
<param name="cmdType"></param>
|
||||
<param name="cmdText"></param>
|
||||
<param name="cmdParms"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:FreeSql.IAdo.QueryAsync``1(System.String,System.Object)">
|
||||
<summary>
|
||||
执行SQL返回对象集合,QueryAsync<User>("select * from user where age > @age", new { age = 25 })
|
||||
</summary>
|
||||
<typeparam name="T"></typeparam>
|
||||
<param name="cmdText"></param>
|
||||
<param name="parms"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:FreeSql.IAdo.QueryAsync``2(System.Data.CommandType,System.String,System.Data.Common.DbParameter[])">
|
||||
<summary>
|
||||
执行SQL返回对象集合,Query<User>("select * from user where age > @age; select * from address", new SqlParameter { ParameterName = "age", Value = 25 })
|
||||
</summary>
|
||||
<typeparam name="T1"></typeparam>
|
||||
<param name="cmdType"></param>
|
||||
<param name="cmdText"></param>
|
||||
<param name="cmdParms"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:FreeSql.IAdo.QueryAsync``2(System.String,System.Object)">
|
||||
<summary>
|
||||
执行SQL返回对象集合,Query<User>("select * from user where age > @age; select * from address", new { age = 25 })
|
||||
</summary>
|
||||
<typeparam name="T1"></typeparam>
|
||||
<param name="cmdText"></param>
|
||||
<param name="parms"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="P:FreeSql.IAop.ParseExpression">
|
||||
<summary>
|
||||
可自定义解析表达式
|
||||
|
@ -224,6 +224,11 @@ namespace FreeSql
|
||||
if (type == null) throw new Exception("缺少 FreeSql 数据库实现包:FreeSql.Provider.Odbc.dll,可前往 nuget 下载");
|
||||
break;
|
||||
|
||||
case DataType.MsAccess:
|
||||
type = Type.GetType("FreeSql.MsAccess.MsAccessProvider`1,FreeSql.Provider.MsAccess")?.MakeGenericType(typeof(TMark));
|
||||
if (type == null) throw new Exception("缺少 FreeSql 数据库实现包:FreeSql.Provider.MsAccess.dll,可前往 nuget 下载");
|
||||
break;
|
||||
|
||||
default: throw new Exception("未指定 UseConnectionString");
|
||||
}
|
||||
}
|
||||
|
@ -55,7 +55,7 @@ namespace FreeSql
|
||||
/// <typeparam name="TReturn">返回类型</typeparam>
|
||||
/// <param name="select">选择列</param>
|
||||
/// <returns></returns>
|
||||
string ToSql<TReturn>(Expression<Func<ISelectGroupingAggregate<TKey, TValue>, TReturn>> select);
|
||||
string ToSql<TReturn>(Expression<Func<ISelectGroupingAggregate<TKey, TValue>, TReturn>> select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex);
|
||||
/// <summary>
|
||||
/// 返回即将执行的SQL语句
|
||||
/// </summary>
|
||||
|
@ -37,8 +37,8 @@ namespace FreeSql.Internal
|
||||
case ExpressionType.NegateChecked:
|
||||
parent.DbField = $"-({ExpressionLambdaToSql(exp, getTSC())})";
|
||||
field.Append(", ").Append(parent.DbField);
|
||||
if (index >= 0) field.Append(" as").Append(++index);
|
||||
else if (index == ReadAnonymousFieldAsCsName && string.IsNullOrEmpty(parent.CsName) == false) field.Append(" ").Append(parent.CsName);
|
||||
if (index >= 0) field.Append(_common.FieldAsAlias($"as{++index}"));
|
||||
else if (index == ReadAnonymousFieldAsCsName && string.IsNullOrEmpty(parent.CsName) == false) field.Append(_common.FieldAsAlias(parent.CsName));
|
||||
return false;
|
||||
case ExpressionType.Convert: return ReadAnonymousField(_tables, field, parent, ref index, (exp as UnaryExpression)?.Operand, getSelectGroupingMapString, whereCascadeExpression, isAllDtoMap);
|
||||
case ExpressionType.Constant:
|
||||
@ -56,8 +56,8 @@ namespace FreeSql.Internal
|
||||
else
|
||||
parent.DbField = _common.FormatSql("{0}", constExp?.Value);
|
||||
field.Append(", ").Append(parent.DbField);
|
||||
if (index >= 0) field.Append(" as").Append(++index);
|
||||
else if (index == ReadAnonymousFieldAsCsName && string.IsNullOrEmpty(parent.CsName) == false) field.Append(" ").Append(parent.CsName);
|
||||
if (index >= 0) field.Append(_common.FieldAsAlias($"as{++index}"));
|
||||
else if (index == ReadAnonymousFieldAsCsName && string.IsNullOrEmpty(parent.CsName) == false) field.Append(_common.FieldAsAlias(parent.CsName));
|
||||
return false;
|
||||
case ExpressionType.Call:
|
||||
var callExp = exp as MethodCallExpression;
|
||||
@ -73,8 +73,8 @@ namespace FreeSql.Internal
|
||||
else
|
||||
parent.DbField = ExpressionLambdaToSql(exp, getTSC());
|
||||
field.Append(", ").Append(parent.DbField);
|
||||
if (index >= 0) field.Append(" as").Append(++index);
|
||||
else if (index == ReadAnonymousFieldAsCsName && string.IsNullOrEmpty(parent.CsName) == false) field.Append(" ").Append(parent.CsName);
|
||||
if (index >= 0) field.Append(_common.FieldAsAlias($"as{++index}"));
|
||||
else if (index == ReadAnonymousFieldAsCsName && string.IsNullOrEmpty(parent.CsName) == false) field.Append(_common.FieldAsAlias(parent.CsName));
|
||||
return false;
|
||||
case ExpressionType.Parameter:
|
||||
case ExpressionType.MemberAccess:
|
||||
@ -97,7 +97,7 @@ namespace FreeSql.Internal
|
||||
MapType = map[idx].Column.Attribute.MapType
|
||||
};
|
||||
field.Append(", ").Append(_common.QuoteReadColumn(child.MapType, child.DbField));
|
||||
if (index >= 0) field.Append(" as").Append(++index);
|
||||
if (index >= 0) field.Append(_common.FieldAsAlias($"as{++index}"));
|
||||
parent.Childs.Add(child);
|
||||
}
|
||||
}
|
||||
@ -106,8 +106,8 @@ namespace FreeSql.Internal
|
||||
parent.CsType = exp.Type;
|
||||
parent.DbField = ExpressionLambdaToSql(exp, getTSC());
|
||||
field.Append(", ").Append(parent.DbField);
|
||||
if (index >= 0) field.Append(" as").Append(++index);
|
||||
else if (index == ReadAnonymousFieldAsCsName && string.IsNullOrEmpty(parent.CsName) == false) field.Append(" ").Append(parent.CsName);
|
||||
if (index >= 0) field.Append(_common.FieldAsAlias($"as{++index}"));
|
||||
else if (index == ReadAnonymousFieldAsCsName && string.IsNullOrEmpty(parent.CsName) == false) field.Append(_common.FieldAsAlias(parent.CsName));
|
||||
parent.MapType = SearchColumnByField(_tables, null, parent.DbField)?.Attribute.MapType ?? exp.Type;
|
||||
return false;
|
||||
}
|
||||
@ -157,7 +157,7 @@ namespace FreeSql.Internal
|
||||
{
|
||||
child.DbField = $"{dtTb.Alias}.{_common.QuoteSqlName(trydtocol.Attribute.Name)}";
|
||||
field.Append(", ").Append(child.DbField);
|
||||
if (index >= 0) field.Append(" as").Append(++index);
|
||||
if (index >= 0) field.Append(_common.FieldAsAlias($"as{++index}"));
|
||||
}
|
||||
break;
|
||||
}
|
||||
@ -240,7 +240,7 @@ namespace FreeSql.Internal
|
||||
{
|
||||
child.DbField = $"{dtTb.Alias}.{_common.QuoteSqlName(trydtocol.Attribute.Name)}";
|
||||
field.Append(", ").Append(child.DbField);
|
||||
if (index >= 0) field.Append(" as").Append(++index);
|
||||
if (index >= 0) field.Append(_common.FieldAsAlias($"as{++index}"));
|
||||
}
|
||||
break;
|
||||
}
|
||||
@ -251,8 +251,8 @@ namespace FreeSql.Internal
|
||||
}
|
||||
parent.DbField = $"({ExpressionLambdaToSql(exp, getTSC())})";
|
||||
field.Append(", ").Append(parent.DbField);
|
||||
if (index >= 0) field.Append(" as").Append(++index);
|
||||
else if (index == ReadAnonymousFieldAsCsName && string.IsNullOrEmpty(parent.CsName) == false) field.Append(" ").Append(parent.CsName);
|
||||
if (index >= 0) field.Append(_common.FieldAsAlias($"as{++index}"));
|
||||
else if (index == ReadAnonymousFieldAsCsName && string.IsNullOrEmpty(parent.CsName) == false) field.Append(_common.FieldAsAlias(parent.CsName));
|
||||
return false;
|
||||
}
|
||||
public object ReadAnonymous(ReadAnonymousTypeInfo parent, DbDataReader dr, ref int index, bool notRead, ReadAnonymousDbValueRef dbValue)
|
||||
@ -593,7 +593,7 @@ namespace FreeSql.Internal
|
||||
case ExpressionType.Constant: return formatSql((exp as ConstantExpression)?.Value, tsc.mapType, tsc.mapColumnTmp, null);
|
||||
case ExpressionType.Conditional:
|
||||
var condExp = exp as ConditionalExpression;
|
||||
return $"case when {ExpressionLambdaToSql(condExp.Test, tsc)} then {ExpressionLambdaToSql(condExp.IfTrue, tsc)} else {ExpressionLambdaToSql(condExp.IfFalse, tsc)} end";
|
||||
return _common.IIF(ExpressionLambdaToSql(condExp.Test, tsc), ExpressionLambdaToSql(condExp.IfTrue, tsc), ExpressionLambdaToSql(condExp.IfFalse, tsc));
|
||||
case ExpressionType.Call:
|
||||
tsc.mapType = null;
|
||||
var exp3 = exp as MethodCallExpression;
|
||||
|
@ -111,6 +111,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
for (var a = 0; a < dr.FieldCount; a++)
|
||||
{
|
||||
var name = dr.GetName(a);
|
||||
if (dic.ContainsKey(name)) continue;
|
||||
sbflag.Append(name).Append(":").Append(a).Append(",");
|
||||
dic.Add(name, a);
|
||||
}
|
||||
@ -153,6 +154,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
for (var a = 0; a < dr.FieldCount; a++)
|
||||
{
|
||||
var name = dr.GetName(a);
|
||||
if (dic.ContainsKey(name)) continue;
|
||||
sbflag.Append(name).Append(":").Append(a).Append(",");
|
||||
dic.Add(name, a);
|
||||
}
|
||||
@ -169,6 +171,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
for (var a = 0; a < dr.FieldCount; a++)
|
||||
{
|
||||
var name = dr.GetName(a);
|
||||
if (dic.ContainsKey(name)) continue;
|
||||
sbflag.Append(name).Append(":").Append(a).Append(",");
|
||||
dic.Add(name, a);
|
||||
}
|
||||
@ -219,6 +222,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
for (var a = 0; a < dr.FieldCount; a++)
|
||||
{
|
||||
var name = dr.GetName(a);
|
||||
if (dic.ContainsKey(name)) continue;
|
||||
sbflag.Append(name).Append(":").Append(a).Append(",");
|
||||
dic.Add(name, a);
|
||||
}
|
||||
@ -235,6 +239,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
for (var a = 0; a < dr.FieldCount; a++)
|
||||
{
|
||||
var name = dr.GetName(a);
|
||||
if (dic.ContainsKey(name)) continue;
|
||||
sbflag.Append(name).Append(":").Append(a).Append(",");
|
||||
dic.Add(name, a);
|
||||
}
|
||||
@ -251,6 +256,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
for (var a = 0; a < dr.FieldCount; a++)
|
||||
{
|
||||
var name = dr.GetName(a);
|
||||
if (dic.ContainsKey(name)) continue;
|
||||
sbflag.Append(name).Append(":").Append(a).Append(",");
|
||||
dic.Add(name, a);
|
||||
}
|
||||
@ -307,6 +313,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
for (var a = 0; a < dr.FieldCount; a++)
|
||||
{
|
||||
var name = dr.GetName(a);
|
||||
if (dic.ContainsKey(name)) continue;
|
||||
sbflag.Append(name).Append(":").Append(a).Append(",");
|
||||
dic.Add(name, a);
|
||||
}
|
||||
@ -323,6 +330,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
for (var a = 0; a < dr.FieldCount; a++)
|
||||
{
|
||||
var name = dr.GetName(a);
|
||||
if (dic.ContainsKey(name)) continue;
|
||||
sbflag.Append(name).Append(":").Append(a).Append(",");
|
||||
dic.Add(name, a);
|
||||
}
|
||||
@ -339,6 +347,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
for (var a = 0; a < dr.FieldCount; a++)
|
||||
{
|
||||
var name = dr.GetName(a);
|
||||
if (dic.ContainsKey(name)) continue;
|
||||
sbflag.Append(name).Append(":").Append(a).Append(",");
|
||||
dic.Add(name, a);
|
||||
}
|
||||
@ -355,6 +364,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
for (var a = 0; a < dr.FieldCount; a++)
|
||||
{
|
||||
var name = dr.GetName(a);
|
||||
if (dic.ContainsKey(name)) continue;
|
||||
sbflag.Append(name).Append(":").Append(a).Append(",");
|
||||
dic.Add(name, a);
|
||||
}
|
||||
@ -417,6 +427,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
for (var a = 0; a < dr.FieldCount; a++)
|
||||
{
|
||||
var name = dr.GetName(a);
|
||||
if (dic.ContainsKey(name)) continue;
|
||||
sbflag.Append(name).Append(":").Append(a).Append(",");
|
||||
dic.Add(name, a);
|
||||
}
|
||||
@ -433,6 +444,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
for (var a = 0; a < dr.FieldCount; a++)
|
||||
{
|
||||
var name = dr.GetName(a);
|
||||
if (dic.ContainsKey(name)) continue;
|
||||
sbflag.Append(name).Append(":").Append(a).Append(",");
|
||||
dic.Add(name, a);
|
||||
}
|
||||
@ -449,6 +461,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
for (var a = 0; a < dr.FieldCount; a++)
|
||||
{
|
||||
var name = dr.GetName(a);
|
||||
if (dic.ContainsKey(name)) continue;
|
||||
sbflag.Append(name).Append(":").Append(a).Append(",");
|
||||
dic.Add(name, a);
|
||||
}
|
||||
@ -465,6 +478,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
for (var a = 0; a < dr.FieldCount; a++)
|
||||
{
|
||||
var name = dr.GetName(a);
|
||||
if (dic.ContainsKey(name)) continue;
|
||||
sbflag.Append(name).Append(":").Append(a).Append(",");
|
||||
dic.Add(name, a);
|
||||
}
|
||||
@ -481,6 +495,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
for (var a = 0; a < dr.FieldCount; a++)
|
||||
{
|
||||
var name = dr.GetName(a);
|
||||
if (dic.ContainsKey(name)) continue;
|
||||
sbflag.Append(name).Append(":").Append(a).Append(",");
|
||||
dic.Add(name, a);
|
||||
}
|
||||
@ -655,7 +670,12 @@ namespace FreeSql.Internal.CommonProvider
|
||||
if (ret.Tables.Count <= result)
|
||||
{
|
||||
dt = ret.Tables.Add();
|
||||
for (var a = 0; a < dr.FieldCount; a++) dt.Columns.Add(dr.GetName(a));
|
||||
for (var a = 0; a < dr.FieldCount; a++)
|
||||
{
|
||||
var name = dr.GetName(a);
|
||||
if (dt.Columns.Contains(name)) name = $"{name}_{Guid.NewGuid().ToString("N").Substring(0, 4)}";
|
||||
dt.Columns.Add(name);
|
||||
}
|
||||
}
|
||||
object[] values = new object[dt.Columns.Count];
|
||||
dr.GetValues(values);
|
||||
@ -674,7 +694,12 @@ namespace FreeSql.Internal.CommonProvider
|
||||
ExecuteReader(connection, transaction, dr =>
|
||||
{
|
||||
if (ret.Columns.Count == 0)
|
||||
for (var a = 0; a < dr.FieldCount; a++) ret.Columns.Add(dr.GetName(a));
|
||||
for (var a = 0; a < dr.FieldCount; a++)
|
||||
{
|
||||
var name = dr.GetName(a);
|
||||
if (ret.Columns.Contains(name)) name = $"{name}_{Guid.NewGuid().ToString("N").Substring(0, 4)}";
|
||||
ret.Columns.Add(name);
|
||||
}
|
||||
object[] values = new object[ret.Columns.Count];
|
||||
dr.GetValues(values);
|
||||
ret.Rows.Add(values);
|
||||
|
@ -35,6 +35,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
for (var a = 0; a < dr.FieldCount; a++)
|
||||
{
|
||||
var name = dr.GetName(a);
|
||||
if (dic.ContainsKey(name)) continue;
|
||||
sbflag.Append(name).Append(":").Append(a).Append(",");
|
||||
dic.Add(name, a);
|
||||
}
|
||||
@ -78,6 +79,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
for (var a = 0; a < dr.FieldCount; a++)
|
||||
{
|
||||
var name = dr.GetName(a);
|
||||
if (dic.ContainsKey(name)) continue;
|
||||
sbflag.Append(name).Append(":").Append(a).Append(",");
|
||||
dic.Add(name, a);
|
||||
}
|
||||
@ -94,6 +96,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
for (var a = 0; a < dr.FieldCount; a++)
|
||||
{
|
||||
var name = dr.GetName(a);
|
||||
if (dic.ContainsKey(name)) continue;
|
||||
sbflag.Append(name).Append(":").Append(a).Append(",");
|
||||
dic.Add(name, a);
|
||||
}
|
||||
@ -145,6 +148,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
for (var a = 0; a < dr.FieldCount; a++)
|
||||
{
|
||||
var name = dr.GetName(a);
|
||||
if (dic.ContainsKey(name)) continue;
|
||||
sbflag.Append(name).Append(":").Append(a).Append(",");
|
||||
dic.Add(name, a);
|
||||
}
|
||||
@ -161,6 +165,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
for (var a = 0; a < dr.FieldCount; a++)
|
||||
{
|
||||
var name = dr.GetName(a);
|
||||
if (dic.ContainsKey(name)) continue;
|
||||
sbflag.Append(name).Append(":").Append(a).Append(",");
|
||||
dic.Add(name, a);
|
||||
}
|
||||
@ -177,6 +182,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
for (var a = 0; a < dr.FieldCount; a++)
|
||||
{
|
||||
var name = dr.GetName(a);
|
||||
if (dic.ContainsKey(name)) continue;
|
||||
sbflag.Append(name).Append(":").Append(a).Append(",");
|
||||
dic.Add(name, a);
|
||||
}
|
||||
@ -234,6 +240,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
for (var a = 0; a < dr.FieldCount; a++)
|
||||
{
|
||||
var name = dr.GetName(a);
|
||||
if (dic.ContainsKey(name)) continue;
|
||||
sbflag.Append(name).Append(":").Append(a).Append(",");
|
||||
dic.Add(name, a);
|
||||
}
|
||||
@ -250,6 +257,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
for (var a = 0; a < dr.FieldCount; a++)
|
||||
{
|
||||
var name = dr.GetName(a);
|
||||
if (dic.ContainsKey(name)) continue;
|
||||
sbflag.Append(name).Append(":").Append(a).Append(",");
|
||||
dic.Add(name, a);
|
||||
}
|
||||
@ -266,6 +274,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
for (var a = 0; a < dr.FieldCount; a++)
|
||||
{
|
||||
var name = dr.GetName(a);
|
||||
if (dic.ContainsKey(name)) continue;
|
||||
sbflag.Append(name).Append(":").Append(a).Append(",");
|
||||
dic.Add(name, a);
|
||||
}
|
||||
@ -282,6 +291,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
for (var a = 0; a < dr.FieldCount; a++)
|
||||
{
|
||||
var name = dr.GetName(a);
|
||||
if (dic.ContainsKey(name)) continue;
|
||||
sbflag.Append(name).Append(":").Append(a).Append(",");
|
||||
dic.Add(name, a);
|
||||
}
|
||||
@ -345,6 +355,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
for (var a = 0; a < dr.FieldCount; a++)
|
||||
{
|
||||
var name = dr.GetName(a);
|
||||
if (dic.ContainsKey(name)) continue;
|
||||
sbflag.Append(name).Append(":").Append(a).Append(",");
|
||||
dic.Add(name, a);
|
||||
}
|
||||
@ -361,6 +372,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
for (var a = 0; a < dr.FieldCount; a++)
|
||||
{
|
||||
var name = dr.GetName(a);
|
||||
if (dic.ContainsKey(name)) continue;
|
||||
sbflag.Append(name).Append(":").Append(a).Append(",");
|
||||
dic.Add(name, a);
|
||||
}
|
||||
@ -377,6 +389,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
for (var a = 0; a < dr.FieldCount; a++)
|
||||
{
|
||||
var name = dr.GetName(a);
|
||||
if (dic.ContainsKey(name)) continue;
|
||||
sbflag.Append(name).Append(":").Append(a).Append(",");
|
||||
dic.Add(name, a);
|
||||
}
|
||||
@ -393,6 +406,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
for (var a = 0; a < dr.FieldCount; a++)
|
||||
{
|
||||
var name = dr.GetName(a);
|
||||
if (dic.ContainsKey(name)) continue;
|
||||
sbflag.Append(name).Append(":").Append(a).Append(",");
|
||||
dic.Add(name, a);
|
||||
}
|
||||
@ -409,6 +423,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
for (var a = 0; a < dr.FieldCount; a++)
|
||||
{
|
||||
var name = dr.GetName(a);
|
||||
if (dic.ContainsKey(name)) continue;
|
||||
sbflag.Append(name).Append(":").Append(a).Append(",");
|
||||
dic.Add(name, a);
|
||||
}
|
||||
@ -585,7 +600,12 @@ namespace FreeSql.Internal.CommonProvider
|
||||
if (ret.Tables.Count <= result)
|
||||
{
|
||||
dt = ret.Tables.Add();
|
||||
for (var a = 0; a < dr.FieldCount; a++) dt.Columns.Add(dr.GetName(a));
|
||||
for (var a = 0; a < dr.FieldCount; a++)
|
||||
{
|
||||
var name = dr.GetName(a);
|
||||
if (dt.Columns.Contains(name)) name = $"{name}_{Guid.NewGuid().ToString("N").Substring(0, 4)}";
|
||||
dt.Columns.Add(name);
|
||||
}
|
||||
}
|
||||
object[] values = new object[dt.Columns.Count];
|
||||
for (int a = 0; a < values.Length; a++) if (!await dr.IsDBNullAsync(a)) values[a] = await dr.GetFieldValueAsync<object>(a);
|
||||
@ -604,7 +624,12 @@ namespace FreeSql.Internal.CommonProvider
|
||||
await ExecuteReaderAsync(connection, transaction, async dr =>
|
||||
{
|
||||
if (ret.Columns.Count == 0)
|
||||
for (var a = 0; a < dr.FieldCount; a++) ret.Columns.Add(dr.GetName(a));
|
||||
for (var a = 0; a < dr.FieldCount; a++)
|
||||
{
|
||||
var name = dr.GetName(a);
|
||||
if (ret.Columns.Contains(name)) name = $"{name}_{Guid.NewGuid().ToString("N").Substring(0, 4)}";
|
||||
ret.Columns.Add(name);
|
||||
}
|
||||
object[] values = new object[ret.Columns.Count];
|
||||
for (int a = 0; a < values.Length; a++) if (!await dr.IsDBNullAsync(a)) values[a] = await dr.GetFieldValueAsync<object>(a);
|
||||
ret.Rows.Add(values);
|
||||
|
@ -88,7 +88,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
return this;
|
||||
}
|
||||
|
||||
public IInsert<T1> BatchOptions(int valuesLimit, int parameterLimit, bool autoTransaction = true)
|
||||
public virtual IInsert<T1> BatchOptions(int valuesLimit, int parameterLimit, bool autoTransaction = true)
|
||||
{
|
||||
_batchValuesLimit = valuesLimit;
|
||||
_batchParameterLimit = parameterLimit;
|
||||
@ -170,6 +170,8 @@ namespace FreeSql.Internal.CommonProvider
|
||||
{
|
||||
valuesLimit = valuesLimit - 1;
|
||||
parameterLimit = parameterLimit - 1;
|
||||
if (valuesLimit <= 0) valuesLimit = 1;
|
||||
if (parameterLimit <= 0) parameterLimit = 999;
|
||||
if (_source == null || _source.Any() == false) return new List<T1>[0];
|
||||
if (_source.Count == 1) return new[] { _source };
|
||||
|
||||
|
@ -155,7 +155,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
public bool Any()
|
||||
{
|
||||
this.Limit(1);
|
||||
return this.ToList<int>("1 as1").Sum() > 0; //这里的 Sum 为了分表查询
|
||||
return this.ToList<int>($"{1}{_commonUtils.FieldAsAlias("as1")}").Sum() > 0; //这里的 Sum 为了分表查询
|
||||
}
|
||||
|
||||
public long Count()
|
||||
@ -164,7 +164,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
_orderby = null; //解决 select count(1) from t order by id 这样的 SQL 错误
|
||||
try
|
||||
{
|
||||
return this.ToList<int>("count(1) as1").Sum(); //这里的 Sum 为了分表查询
|
||||
return this.ToList<int>($"count(1){_commonUtils.FieldAsAlias("as1")}").Sum(); //这里的 Sum 为了分表查询
|
||||
}
|
||||
finally
|
||||
{
|
||||
@ -599,7 +599,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
var quoteName = _commonUtils.QuoteSqlName(col.Attribute.Name);
|
||||
field.Append(_commonUtils.QuoteReadColumn(col.Attribute.MapType, $"{tbi.Alias}.{quoteName}"));
|
||||
++index;
|
||||
if (dicfield.ContainsKey(quoteName)) field.Append(" as").Append(index);
|
||||
if (dicfield.ContainsKey(quoteName)) field.Append(_commonUtils.FieldAsAlias($"as{index}"));
|
||||
else dicfield.Add(quoteName, true);
|
||||
++colidx;
|
||||
}
|
||||
@ -730,7 +730,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
var quoteName = _commonUtils.QuoteSqlName(col.Attribute.Name);
|
||||
field.Append(_commonUtils.QuoteReadColumn(col.Attribute.MapType, $"{tb.Alias}.{quoteName}"));
|
||||
++index;
|
||||
if (dicfield.ContainsKey(quoteName)) field.Append(" as").Append(index);
|
||||
if (dicfield.ContainsKey(quoteName)) field.Append(_commonUtils.FieldAsAlias($"as{index}"));
|
||||
else dicfield.Add(quoteName, true);
|
||||
}
|
||||
else
|
||||
@ -754,7 +754,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
field.Append(_commonUtils.QuoteReadColumn(col2.Attribute.MapType, $"{tb2.Alias}.{quoteName}"));
|
||||
++index;
|
||||
++otherindex;
|
||||
if (dicfield.ContainsKey(quoteName)) field.Append(" as").Append(index);
|
||||
if (dicfield.ContainsKey(quoteName)) field.Append(_commonUtils.FieldAsAlias($"as{index}"));
|
||||
else dicfield.Add(quoteName, true);
|
||||
}
|
||||
}
|
||||
@ -851,7 +851,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
var quoteName = _commonUtils.QuoteSqlName(col.Attribute.Name);
|
||||
field.Append(_commonUtils.QuoteReadColumn(col.Attribute.MapType, $"{tb.Alias}.{quoteName}"));
|
||||
++index;
|
||||
if (dicfield.ContainsKey(quoteName)) field.Append(" as").Append(index);
|
||||
if (dicfield.ContainsKey(quoteName)) field.Append(_commonUtils.FieldAsAlias($"as{index}"));
|
||||
else dicfield.Add(quoteName, true);
|
||||
}
|
||||
else
|
||||
@ -868,7 +868,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
var quoteName = _commonUtils.QuoteSqlName(col2.Attribute.Name);
|
||||
field.Append(_commonUtils.QuoteReadColumn(col2.Attribute.MapType, $"{tb2.Alias}.{quoteName}"));
|
||||
++index;
|
||||
if (dicfield.ContainsKey(quoteName)) field.Append(" as").Append(index);
|
||||
if (dicfield.ContainsKey(quoteName)) field.Append(_commonUtils.FieldAsAlias($"as{index}"));
|
||||
else dicfield.Add(quoteName, true);
|
||||
child.Childs.Add(new ReadAnonymousTypeInfo
|
||||
{
|
||||
@ -946,6 +946,8 @@ namespace FreeSql.Internal.CommonProvider
|
||||
if (_orm.CodeFirst.IsSyncStructureToUpper) name = name.ToUpper();
|
||||
if (_orm.CodeFirst.IsAutoSyncStructure) _orm.CodeFirst.SyncStructure(tb.Table.Type, name);
|
||||
}
|
||||
else
|
||||
name = name.Replace("\r\n", "\r\n ");
|
||||
}
|
||||
dict.Add(tb.Table.Type, name);
|
||||
}
|
||||
@ -1035,12 +1037,12 @@ namespace FreeSql.Internal.CommonProvider
|
||||
|
||||
protected double InternalAvg(Expression exp)
|
||||
{
|
||||
var list = this.ToList<double>($"avg({_commonExpression.ExpressionSelectColumn_MemberAccess(_tables, null, SelectTableInfoType.From, exp, true, null)}) as1");
|
||||
var list = this.ToList<double>($"avg({_commonExpression.ExpressionSelectColumn_MemberAccess(_tables, null, SelectTableInfoType.From, exp, true, null)}){_commonUtils.FieldAsAlias("as1")}");
|
||||
return list.Sum() / list.Count;
|
||||
}
|
||||
protected TMember InternalMax<TMember>(Expression exp) => this.ToList<TMember>($"max({_commonExpression.ExpressionSelectColumn_MemberAccess(_tables, null, SelectTableInfoType.From, exp, true, null)}) as1").Max();
|
||||
protected TMember InternalMin<TMember>(Expression exp) => this.ToList<TMember>($"min({_commonExpression.ExpressionSelectColumn_MemberAccess(_tables, null, SelectTableInfoType.From, exp, true, null)}) as1").Min();
|
||||
protected decimal InternalSum(Expression exp) => this.ToList<decimal>($"sum({_commonExpression.ExpressionSelectColumn_MemberAccess(_tables, null, SelectTableInfoType.From, exp, true, null)}) as1").Sum();
|
||||
protected TMember InternalMax<TMember>(Expression exp) => this.ToList<TMember>($"max({_commonExpression.ExpressionSelectColumn_MemberAccess(_tables, null, SelectTableInfoType.From, exp, true, null)}){_commonUtils.FieldAsAlias("as1")}").Max();
|
||||
protected TMember InternalMin<TMember>(Expression exp) => this.ToList<TMember>($"min({_commonExpression.ExpressionSelectColumn_MemberAccess(_tables, null, SelectTableInfoType.From, exp, true, null)}){_commonUtils.FieldAsAlias("as1")}").Min();
|
||||
protected decimal InternalSum(Expression exp) => this.ToList<decimal>($"sum({_commonExpression.ExpressionSelectColumn_MemberAccess(_tables, null, SelectTableInfoType.From, exp, true, null)}){_commonUtils.FieldAsAlias("as1")}").Sum();
|
||||
|
||||
protected ISelectGrouping<TKey, TValue> InternalGroupBy<TKey, TValue>(Expression columns)
|
||||
{
|
||||
@ -1118,7 +1120,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
async public Task<bool> AnyAsync()
|
||||
{
|
||||
this.Limit(1);
|
||||
return (await this.ToListAsync<int>("1 as1")).Sum() > 0; //这里的 Sum 为了分表查询
|
||||
return (await this.ToListAsync<int>($"1{_commonUtils.FieldAsAlias("as1")}")).Sum() > 0; //这里的 Sum 为了分表查询
|
||||
}
|
||||
|
||||
async public Task<long> CountAsync()
|
||||
@ -1127,7 +1129,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
_orderby = null;
|
||||
try
|
||||
{
|
||||
return (await this.ToListAsync<int>("count(1) as1")).Sum(); //这里的 Sum 为了分表查询
|
||||
return (await this.ToListAsync<int>($"count(1){_commonUtils.FieldAsAlias("as1")}")).Sum(); //这里的 Sum 为了分表查询
|
||||
}
|
||||
finally
|
||||
{
|
||||
@ -1312,12 +1314,12 @@ namespace FreeSql.Internal.CommonProvider
|
||||
|
||||
async protected Task<double> InternalAvgAsync(Expression exp)
|
||||
{
|
||||
var list = await this.ToListAsync<double>($"avg({_commonExpression.ExpressionSelectColumn_MemberAccess(_tables, null, SelectTableInfoType.From, exp, true, null)}) as1");
|
||||
var list = await this.ToListAsync<double>($"avg({_commonExpression.ExpressionSelectColumn_MemberAccess(_tables, null, SelectTableInfoType.From, exp, true, null)}){_commonUtils.FieldAsAlias("as1")}");
|
||||
return list.Sum() / list.Count;
|
||||
}
|
||||
async protected Task<TMember> InternalMaxAsync<TMember>(Expression exp) => (await this.ToListAsync<TMember>($"max({_commonExpression.ExpressionSelectColumn_MemberAccess(_tables, null, SelectTableInfoType.From, exp, true, null)}) as1")).Max();
|
||||
async protected Task<TMember> InternalMinAsync<TMember>(Expression exp) => (await this.ToListAsync<TMember>($"min({_commonExpression.ExpressionSelectColumn_MemberAccess(_tables, null, SelectTableInfoType.From, exp, true, null)}) as1")).Min();
|
||||
async protected Task<decimal> InternalSumAsync(Expression exp) => (await this.ToListAsync<decimal>($"sum({_commonExpression.ExpressionSelectColumn_MemberAccess(_tables, null, SelectTableInfoType.From, exp, true, null)}) as1")).Sum();
|
||||
async protected Task<TMember> InternalMaxAsync<TMember>(Expression exp) => (await this.ToListAsync<TMember>($"max({_commonExpression.ExpressionSelectColumn_MemberAccess(_tables, null, SelectTableInfoType.From, exp, true, null)}){_commonUtils.FieldAsAlias("as1")}")).Max();
|
||||
async protected Task<TMember> InternalMinAsync<TMember>(Expression exp) => (await this.ToListAsync<TMember>($"min({_commonExpression.ExpressionSelectColumn_MemberAccess(_tables, null, SelectTableInfoType.From, exp, true, null)}){_commonUtils.FieldAsAlias("as1")}")).Min();
|
||||
async protected Task<decimal> InternalSumAsync(Expression exp) => (await this.ToListAsync<decimal>($"sum({_commonExpression.ExpressionSelectColumn_MemberAccess(_tables, null, SelectTableInfoType.From, exp, true, null)}){_commonUtils.FieldAsAlias("as1")}")).Sum();
|
||||
|
||||
protected Task<List<TReturn>> InternalToListAsync<TReturn>(Expression select) => this.ToListMapReaderAsync<TReturn>(this.GetExpressionField(select));
|
||||
|
||||
|
@ -56,7 +56,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
case "Where": this.InternalWhere(expCall.Arguments[0]); break;
|
||||
case "WhereIf":
|
||||
var whereIfCond = _commonExpression.ExpressionSelectColumn_MemberAccess(null, null, SelectTableInfoType.From, expCall.Arguments[0], false, null);
|
||||
if (whereIfCond == "1" || whereIfCond == "'t'")
|
||||
if (whereIfCond == "1" || whereIfCond == "'t'" || whereIfCond == "-1") //MsAccess -1
|
||||
this.InternalWhere(expCall.Arguments[1]);
|
||||
break;
|
||||
case "OrderBy":
|
||||
@ -73,7 +73,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
if (expCall.Arguments.Count == 2 && expCall.Arguments[0].Type == typeof(bool))
|
||||
{
|
||||
var ifcond = _commonExpression.ExpressionSelectColumn_MemberAccess(null, null, SelectTableInfoType.From, expCall.Arguments[0], false, null);
|
||||
if (ifcond == "1" || ifcond == "'t'")
|
||||
if (ifcond == "1" || ifcond == "'t'" || ifcond == "-1")//MsAccess -1
|
||||
this.InternalOrderByDescending(expCall.Arguments.LastOrDefault());
|
||||
break;
|
||||
}
|
||||
|
@ -121,11 +121,11 @@ namespace FreeSql.Internal.CommonProvider
|
||||
|
||||
public List<TReturn> Select<TReturn>(Expression<Func<ISelectGroupingAggregate<TKey, TValue>, TReturn>> select) => ToList(select);
|
||||
|
||||
public string ToSql<TReturn>(Expression<Func<ISelectGroupingAggregate<TKey, TValue>, TReturn>> select)
|
||||
public string ToSql<TReturn>(Expression<Func<ISelectGroupingAggregate<TKey, TValue>, TReturn>> select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex)
|
||||
{
|
||||
var map = new ReadAnonymousTypeInfo();
|
||||
var field = new StringBuilder();
|
||||
var index = 0;
|
||||
var index = fieldAlias == FieldAliasOptions.AsProperty ? CommonExpression.ReadAnonymousFieldAsCsName : 0;
|
||||
|
||||
_comonExp.ReadAnonymousField(null, field, map, ref index, select, getSelectGroupingMapString, null, true);
|
||||
var method = _select.GetType().GetMethod("ToSql", new[] { typeof(string) });
|
||||
@ -163,7 +163,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
return this;
|
||||
}
|
||||
|
||||
public long Count() => long.TryParse(string.Concat(_orm.Ado.ExecuteScalar($"select count(1) from ({this.ToSql("1 as1")}) fta")), out var trylng) ? trylng : default(long);
|
||||
public long Count() => long.TryParse(string.Concat(_orm.Ado.ExecuteScalar($"select count(1) from ({this.ToSql($"1{_comonExp._common.FieldAsAlias("as1")}")}) fta")), out var trylng) ? trylng : default(long);
|
||||
public ISelectGrouping<TKey, TValue> Count(out long count)
|
||||
{
|
||||
count = this.Count();
|
||||
@ -172,7 +172,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
|
||||
#if net40
|
||||
#else
|
||||
async public Task<long> CountAsync() => long.TryParse(string.Concat(await _orm.Ado.ExecuteScalarAsync($"select count(1) from ({this.ToSql("1 as1")}) fta")), out var trylng) ? trylng : default(long);
|
||||
async public Task<long> CountAsync() => long.TryParse(string.Concat(await _orm.Ado.ExecuteScalarAsync($"select count(1) from ({this.ToSql($"1{_comonExp._common.FieldAsAlias("as1")}")}) fta")), out var trylng) ? trylng : default(long);
|
||||
|
||||
public Task<List<TReturn>> ToListAsync<TReturn>(Expression<Func<ISelectGroupingAggregate<TKey, TValue>, TReturn>> select)
|
||||
{
|
||||
|
@ -93,7 +93,7 @@ namespace FreeSql.Internal.CommonProvider
|
||||
return this;
|
||||
}
|
||||
|
||||
public IUpdate<T1> BatchOptions(int rowsLimit, int parameterLimit, bool autoTransaction = true)
|
||||
public virtual IUpdate<T1> BatchOptions(int rowsLimit, int parameterLimit, bool autoTransaction = true)
|
||||
{
|
||||
_batchRowsLimit = rowsLimit;
|
||||
_batchParameterLimit = parameterLimit;
|
||||
@ -117,6 +117,8 @@ namespace FreeSql.Internal.CommonProvider
|
||||
{
|
||||
valuesLimit = valuesLimit - 1;
|
||||
parameterLimit = parameterLimit - 1;
|
||||
if (valuesLimit <= 0) valuesLimit = 1;
|
||||
if (parameterLimit <= 0) parameterLimit = 999;
|
||||
if (_source == null || _source.Any() == false) return new List<T1>[0];
|
||||
if (_source.Count == 1) return new[] { _source };
|
||||
|
||||
|
@ -38,6 +38,8 @@ namespace FreeSql.Internal
|
||||
public abstract string NowUtc { get; }
|
||||
public abstract string QuoteWriteParamter(Type type, string paramterName);
|
||||
public abstract string QuoteReadColumn(Type type, string columnName);
|
||||
public virtual string FieldAsAlias(string alias) => $" {alias}";
|
||||
public virtual string IIF(string test, string ifTrue, string ifElse) => $"case when {test} then {ifTrue} else {ifElse} end";
|
||||
|
||||
public IFreeSql _orm { get; set; }
|
||||
public ICodeFirst CodeFirst => _orm.CodeFirst;
|
||||
|
@ -199,7 +199,7 @@ namespace FreeSql.Internal
|
||||
{
|
||||
case DataType.MySql:
|
||||
case DataType.OdbcMySql:
|
||||
if (strlen < 0) colattr.DbType = "text";
|
||||
if (strlen < 0) colattr.DbType = "TEXT";
|
||||
else colattr.DbType = Regex.Replace(colattr.DbType, charPatten, $"$1({strlen})");
|
||||
break;
|
||||
case DataType.SqlServer:
|
||||
@ -209,7 +209,7 @@ namespace FreeSql.Internal
|
||||
break;
|
||||
case DataType.PostgreSQL:
|
||||
case DataType.OdbcPostgreSQL:
|
||||
if (strlen < 0) colattr.DbType = "text";
|
||||
if (strlen < 0) colattr.DbType = "TEXT";
|
||||
else colattr.DbType = Regex.Replace(colattr.DbType, charPatten, $"$1({strlen})");
|
||||
break;
|
||||
case DataType.Oracle:
|
||||
@ -219,7 +219,12 @@ namespace FreeSql.Internal
|
||||
else colattr.DbType = Regex.Replace(colattr.DbType, charPatten, $"$1({strlen})");
|
||||
break;
|
||||
case DataType.Sqlite:
|
||||
if (strlen < 0) colattr.DbType = "text";
|
||||
if (strlen < 0) colattr.DbType = "TEXT";
|
||||
else colattr.DbType = Regex.Replace(colattr.DbType, charPatten, $"$1({strlen})");
|
||||
break;
|
||||
case DataType.MsAccess:
|
||||
charPatten = @"(CHAR|CHAR2|CHARACTER|TEXT)\s*(\([^\)]*\))?";
|
||||
if (strlen < 0) colattr.DbType = "LONGTEXT";
|
||||
else colattr.DbType = Regex.Replace(colattr.DbType, charPatten, $"$1({strlen})");
|
||||
break;
|
||||
}
|
||||
|
Reference in New Issue
Block a user