Update Core

This commit is contained in:
sunkaixuna
2021-05-16 22:33:00 +08:00
parent 37d6b4defd
commit 659ddc9e54
13 changed files with 85 additions and 42 deletions

View File

@@ -3,6 +3,8 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Reflection; using System.Reflection;
using System.Text; using System.Text;
using System.Text.RegularExpressions;
namespace SqlSugar namespace SqlSugar
{ {
public partial class CodeFirstProvider : ICodeFirst public partial class CodeFirstProvider : ICodeFirst
@@ -114,6 +116,16 @@ namespace SqlSugar
{ {
item.Length = DefultLength; item.Length = DefultLength;
} }
if (item.DataType!=null&&item.DataType.Contains(",")&& !Regex.IsMatch(item.DataType,@"\d\,\d"))
{
var types = item.DataType.Split(',').Select(it => it.ToLower()).ToList();
var mapingTypes=this.Context.Ado.DbBind.MappingTypes.Select(it=>it.Key.ToLower()).ToList();
var mappingType=types.FirstOrDefault(it => mapingTypes.Contains(it));
if (mappingType != null)
{
item.DataType = mappingType;
}
}
} }
} }
var tableName = GetTableName(entityInfo); var tableName = GetTableName(entityInfo);

View File

@@ -62,6 +62,7 @@ namespace SqlSugar
} }
public IDeleteable<T> AS(string tableName) public IDeleteable<T> AS(string tableName)
{ {
if (tableName == null) return this;
var entityName = typeof(T).Name; var entityName = typeof(T).Name;
IsAs = true; IsAs = true;
OldMappingTableList = this.Context.MappingTables; OldMappingTableList = this.Context.MappingTables;

View File

@@ -35,8 +35,11 @@ namespace SqlSugar
#region Core #region Core
public void AddQueue() public void AddQueue()
{ {
var sqlObj = this.ToSql(); if (this.InsertObjs!=null&&this.InsertObjs.Length > 0&& this.InsertObjs[0]!=null)
this.Context.Queues.Add(sqlObj.Key, sqlObj.Value); {
var sqlObj = this.ToSql();
this.Context.Queues.Add(sqlObj.Key, sqlObj.Value);
}
} }
public virtual int ExecuteCommand() public virtual int ExecuteCommand()
{ {
@@ -165,6 +168,7 @@ namespace SqlSugar
#region Setting #region Setting
public IInsertable<T> AS(string tableName) public IInsertable<T> AS(string tableName)
{ {
if (tableName == null) return this;
var entityName = typeof(T).Name; var entityName = typeof(T).Name;
IsAs = true; IsAs = true;
OldMappingTableList = this.Context.MappingTables; OldMappingTableList = this.Context.MappingTables;

View File

@@ -85,6 +85,7 @@ namespace SqlSugar
} }
public ISugarQueryable<T> AS(string tableName) public ISugarQueryable<T> AS(string tableName)
{ {
if (tableName == null) return this;
var entityName = typeof(T).Name; var entityName = typeof(T).Name;
return _As(tableName, entityName); return _As(tableName, entityName);
} }
@@ -1067,21 +1068,10 @@ namespace SqlSugar
} }
public virtual List<T> ToPageList(int pageIndex, int pageSize, ref int totalNumber) public virtual List<T> ToPageList(int pageIndex, int pageSize, ref int totalNumber)
{ {
_RestoreMapping = false; var oldMapping = this.Context.MappingTables;
List<T> result = null; totalNumber = this.Clone().Count();
int count = this.Count(); this.Context.MappingTables = oldMapping;
_RestoreMapping = true; return this.Clone().ToPageList(pageIndex, pageSize);
QueryBuilder.IsDisabledGobalFilter = UtilMethods.GetOldValue(QueryBuilder.IsDisabledGobalFilter, () =>
{
QueryBuilder.IsDisabledGobalFilter = true;
if (count == 0)
result = new List<T>();
else
result = ToPageList(pageIndex, pageSize);
});
totalNumber = count;
return result;
} }
public virtual List<T> ToPageList(int pageIndex, int pageSize, ref int totalNumber, ref int totalPage) public virtual List<T> ToPageList(int pageIndex, int pageSize, ref int totalNumber, ref int totalPage)
{ {

View File

@@ -16,6 +16,7 @@ namespace SqlSugar
List<T> dbDataList = new List<T>(); List<T> dbDataList = new List<T>();
List<KeyValuePair<StorageType, Func<StorageableInfo<T>, bool>, string>> whereFuncs = new List<KeyValuePair<StorageType, Func<StorageableInfo<T>, bool>, string>>(); List<KeyValuePair<StorageType, Func<StorageableInfo<T>, bool>, string>> whereFuncs = new List<KeyValuePair<StorageType, Func<StorageableInfo<T>, bool>, string>>();
Expression<Func<T, object>> whereExpression; Expression<Func<T, object>> whereExpression;
private string asname { get; set; }
public Storageable(List<T> datas, SqlSugarProvider context) public Storageable(List<T> datas, SqlSugarProvider context)
{ {
this.Context = context; this.Context = context;
@@ -71,9 +72,9 @@ namespace SqlSugar
{ {
if (this.allDatas.Count == 0) if (this.allDatas.Count == 0)
return new StorageableResult<T>() { return new StorageableResult<T>() {
AsDeleteable = this.Context.Deleteable<T>().Where(it => false), AsDeleteable = this.Context.Deleteable<T>().AS(asname).Where(it => false),
AsInsertable = this.Context.Insertable(new List<T>()), AsInsertable = this.Context.Insertable(new List<T>()).AS(asname),
AsUpdateable = this.Context.Updateable(new List<T>()), AsUpdateable = this.Context.Updateable(new List<T>()).AS(asname),
InsertList = new List<StorageableMessage<T>>(), InsertList = new List<StorageableMessage<T>>(),
UpdateList = new List<StorageableMessage<T>>(), UpdateList = new List<StorageableMessage<T>>(),
DeleteList = new List<StorageableMessage<T>>(), DeleteList = new List<StorageableMessage<T>>(),
@@ -90,7 +91,7 @@ namespace SqlSugar
if (whereExpression == null && pkInfos.Any()) if (whereExpression == null && pkInfos.Any())
{ {
this.Context.Utilities.PageEach(allDatas, 300, item => { this.Context.Utilities.PageEach(allDatas, 300, item => {
var addItems=this.Context.Queryable<T>().WhereClassByPrimaryKey(item.Select(it => it.Item).ToList()).ToList(); var addItems=this.Context.Queryable<T>().AS(asname).WhereClassByPrimaryKey(item.Select(it => it.Item).ToList()).ToList();
dbDataList.AddRange(addItems); dbDataList.AddRange(addItems);
}); });
} }
@@ -120,9 +121,9 @@ namespace SqlSugar
var other = messageList.Where(it => it.StorageType == StorageType.Other).ToList(); var other = messageList.Where(it => it.StorageType == StorageType.Other).ToList();
StorageableResult<T> result = new StorageableResult<T>() StorageableResult<T> result = new StorageableResult<T>()
{ {
AsDeleteable = this.Context.Deleteable<T>(), AsDeleteable = this.Context.Deleteable<T>().AS(asname),
AsUpdateable = this.Context.Updateable(update.Select(it => it.Item).ToList()), AsUpdateable = this.Context.Updateable(update.Select(it => it.Item).ToList()).AS(asname),
AsInsertable = this.Context.Insertable(inset.Select(it => it.Item).ToList()), AsInsertable = this.Context.Insertable(inset.Select(it => it.Item).ToList()).AS(asname),
OtherList = other, OtherList = other,
InsertList = inset, InsertList = inset,
DeleteList = delete, DeleteList = delete,
@@ -175,7 +176,7 @@ namespace SqlSugar
{ {
List<IConditionalModel> conditList = new List<IConditionalModel>(); List<IConditionalModel> conditList = new List<IConditionalModel>();
SetConditList(itemList, whereColumns, conditList); SetConditList(itemList, whereColumns, conditList);
var addItem = this.Context.Queryable<T>().Where(conditList).ToList(); var addItem = this.Context.Queryable<T>().AS(asname).Where(conditList).ToList();
this.dbDataList.AddRange(addItem); this.dbDataList.AddRange(addItem);
}); });
} }
@@ -238,5 +239,11 @@ namespace SqlSugar
var result = resolveExpress.Result; var result = resolveExpress.Result;
return result; return result;
} }
public IStorageable<T> As(string tableName)
{
this.asname = tableName;
return this;
}
} }
} }

View File

@@ -261,7 +261,7 @@ namespace SqlSugar
var isSingleTableHasSubquery = IsSingle() && resolveExpress.SingleTableNameSubqueryShortName.HasValue(); var isSingleTableHasSubquery = IsSingle() && resolveExpress.SingleTableNameSubqueryShortName.HasValue();
if (isSingleTableHasSubquery) if (isSingleTableHasSubquery)
{ {
Check.Exception(!string.IsNullOrEmpty(this.TableShortName) && resolveExpress.SingleTableNameSubqueryShortName != this.TableShortName, "{0} and {1} need same name"); Check.Exception(!string.IsNullOrEmpty(this.TableShortName) && resolveExpress.SingleTableNameSubqueryShortName != this.TableShortName, "{0} and {1} need same name", resolveExpress.SingleTableNameSubqueryShortName, this.TableShortName);
this.TableShortName = resolveExpress.SingleTableNameSubqueryShortName; this.TableShortName = resolveExpress.SingleTableNameSubqueryShortName;
} }
return result; return result;

View File

@@ -114,6 +114,7 @@ namespace SqlSugar
} }
public IUpdateable<T> AS(string tableName) public IUpdateable<T> AS(string tableName)
{ {
if (tableName == null) return this;
var entityName = typeof(T).Name; var entityName = typeof(T).Name;
IsAs = true; IsAs = true;
OldMappingTableList = this.Context.MappingTables; OldMappingTableList = this.Context.MappingTables;

View File

@@ -31,6 +31,7 @@ namespace SqlSugar
public InitKeyType InitKeyType = InitKeyType.Attribute; public InitKeyType InitKeyType = InitKeyType.Attribute;
/// <summary> /// <summary>
///If true, there is only one connection instance in the same thread within the same connection string ///If true, there is only one connection instance in the same thread within the same connection string
[Obsolete("use SqlSugar.Ioc")]
/// </summary> /// </summary>
public bool IsShardSameThread { get; set; } public bool IsShardSameThread { get; set; }
/// <summary> /// <summary>

View File

@@ -90,11 +90,27 @@ namespace SqlSugar
break; break;
case ResolveExpressType.FieldSingle: case ResolveExpressType.FieldSingle:
fieldName = GetSingleName(parameter, expression, isLeft); fieldName = GetSingleName(parameter, expression, isLeft);
base.Context.Result.Append(fieldName); var fieldIsCommonTemp = IsFieldIsCommonTemp(isSetTempData,parameter);
if (fieldIsCommonTemp)
{
baseParameter.CommonTempData = fieldName;
}
else
{
base.Context.Result.Append(fieldName);
}
break; break;
case ResolveExpressType.FieldMultiple: case ResolveExpressType.FieldMultiple:
fieldName = GetMultipleName(parameter, expression, isLeft); fieldName = GetMultipleName(parameter, expression, isLeft);
base.Context.Result.Append(fieldName); var fieldIsCommonTemp2= IsFieldIsCommonTemp(isSetTempData, parameter);
if(fieldIsCommonTemp2)
{
baseParameter.CommonTempData = fieldName;
}
else
{
base.Context.Result.Append(fieldName);
}
break; break;
case ResolveExpressType.ArrayMultiple: case ResolveExpressType.ArrayMultiple:
case ResolveExpressType.ArraySingle: case ResolveExpressType.ArraySingle:
@@ -106,6 +122,15 @@ namespace SqlSugar
} }
} }
private bool IsFieldIsCommonTemp(bool isSetTempData, ExpressionParameter parameter)
{
if (parameter.BaseParameter == null)
return false;
var childExpression= parameter.BaseParameter.ChildExpression.ObjToString();
var expression=parameter.BaseParameter.CurrentExpression.ObjToString();
return isSetTempData&&((childExpression+".Date")==expression);
}
#endregion #endregion
#region Resolve Where #region Resolve Where
@@ -117,12 +142,12 @@ namespace SqlSugar
if (ExpressionTool.IsConstExpression(expression)) if (ExpressionTool.IsConstExpression(expression))
{ {
var value = ExpressionTool.GetMemberValue(expression.Member, expression); var value = ExpressionTool.GetMemberValue(expression.Member, expression);
baseParameter.CommonTempData = value+"=1 "; baseParameter.CommonTempData = value + "=1 ";
} }
else else
{ {
fieldName = GetName(parameter, expression, null, isSingle); fieldName = GetName(parameter, expression, null, isSingle);
baseParameter.CommonTempData = fieldName+"=1 "; baseParameter.CommonTempData = fieldName + "=1 ";
} }
} }
else else
@@ -130,12 +155,12 @@ namespace SqlSugar
if (ExpressionTool.IsConstExpression(expression)) if (ExpressionTool.IsConstExpression(expression))
{ {
var value = ExpressionTool.GetMemberValue(expression.Member, expression); var value = ExpressionTool.GetMemberValue(expression.Member, expression);
base.AppendValue(parameter, isLeft, value+"=1 "); base.AppendValue(parameter, isLeft, value + "=1 ");
} }
else else
{ {
fieldName = GetName(parameter, expression, isLeft, isSingle); fieldName = GetName(parameter, expression, isLeft, isSingle);
AppendMember(parameter, isLeft, fieldName+"=1 "); AppendMember(parameter, isLeft, fieldName + "=1 ");
} }
} }
} }
@@ -209,9 +234,9 @@ namespace SqlSugar
base.AppendValue(parameter, isLeft, value); base.AppendValue(parameter, isLeft, value);
} }
} }
catch catch
{ {
Check.Exception(true, "Not Support {0}",expression.ToString()); Check.Exception(true, "Not Support {0}", expression.ToString());
} }
} }
@@ -219,7 +244,7 @@ namespace SqlSugar
{ {
expression = expression.Expression as MemberExpression; expression = expression.Expression as MemberExpression;
baseParameter.ChildExpression = expression; baseParameter.ChildExpression = expression;
if (UtilMethods.GetUnderType(expression.Type) == UtilConstants.BoolType&&parameter.BaseExpression!=null&&ExpressionTool.IsLogicOperator(parameter.BaseExpression)) if (UtilMethods.GetUnderType(expression.Type) == UtilConstants.BoolType && parameter.BaseExpression != null && ExpressionTool.IsLogicOperator(parameter.BaseExpression))
{ {
ResolveBoolLogic(parameter, baseParameter, expression, isLeft, isSetTempData, isSingle); ResolveBoolLogic(parameter, baseParameter, expression, isLeft, isSetTempData, isSingle);
} }
@@ -332,7 +357,7 @@ namespace SqlSugar
var methodParamter = new MethodCallExpressionArgs() { IsMember = true, MemberName = parameter.CommonTempData, MemberValue = null }; var methodParamter = new MethodCallExpressionArgs() { IsMember = true, MemberName = parameter.CommonTempData, MemberValue = null };
if (expression.Expression?.Type != null) if (expression.Expression?.Type != null)
{ {
methodParamter.Type =UtilMethods.GetUnderType(expression.Expression?.Type); methodParamter.Type = UtilMethods.GetUnderType(expression.Expression?.Type);
} }
var result = this.Context.DbMehtods.HasValue(new MethodCallExpressionModel() var result = this.Context.DbMehtods.HasValue(new MethodCallExpressionModel()
{ {
@@ -346,7 +371,7 @@ namespace SqlSugar
{ {
base.Context.Result.Replace(ExpressionConst.FormatSymbol, ""); base.Context.Result.Replace(ExpressionConst.FormatSymbol, "");
} }
this.Context.Result.Append(result+" "+ExpressionTool.GetOperator(parameter.BaseExpression.NodeType)+" "); this.Context.Result.Append(result + " " + ExpressionTool.GetOperator(parameter.BaseExpression.NodeType) + " ");
} }
else else
{ {
@@ -449,7 +474,7 @@ namespace SqlSugar
}; };
return this.Context.DbMehtods.DateValue(pars); return this.Context.DbMehtods.DateValue(pars);
} }
private string GetToDateShort(string value) private string GetToDateShort(string value)
{ {
var pars = new MethodCallExpressionModel() var pars = new MethodCallExpressionModel()

View File

@@ -17,6 +17,7 @@ namespace SqlSugar
IStorageable<T> SplitDelete(Func<StorageableInfo<T>, bool> conditions, string message = null); IStorageable<T> SplitDelete(Func<StorageableInfo<T>, bool> conditions, string message = null);
IStorageable<T> SplitOther(Func<StorageableInfo<T>, bool> conditions, string message = null); IStorageable<T> SplitOther(Func<StorageableInfo<T>, bool> conditions, string message = null);
StorageableResult<T> ToStorage(); StorageableResult<T> ToStorage();
IStorageable<T> As(string tableName);
} }
public class StorageableInfo<T> where T : class, new() public class StorageableInfo<T> where T : class, new()

View File

@@ -148,7 +148,7 @@ namespace SqlSugar
break; break;
case DateType.Day: case DateType.Day:
parameter2 = "%d"; parameter2 = "%d";
break; return string.Format(" CAST(STRFTIME('{1}', DATETIME(DATETIME(strftime('%Y-%m-%d', {0})), 'LOCALTIME')) AS INTEGER)", parameter.MemberName, parameter2);
case DateType.Hour: case DateType.Hour:
parameter2 = "%H"; parameter2 = "%H";
break; break;

View File

@@ -2,7 +2,7 @@
<PropertyGroup> <PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework> <TargetFramework>netstandard2.0</TargetFramework>
<Version>5.0.2.9</Version> <Version>5.0.3</Version>
<Copyright>sun_kai_xuan</Copyright> <Copyright>sun_kai_xuan</Copyright>
<PackageProjectUrl>https://github.com/sunkaixuan/SqlSugar</PackageProjectUrl> <PackageProjectUrl>https://github.com/sunkaixuan/SqlSugar</PackageProjectUrl>
<PackageLicenseUrl></PackageLicenseUrl> <PackageLicenseUrl></PackageLicenseUrl>

View File

@@ -593,9 +593,10 @@ namespace SqlSugar
} }
public void ChangeDatabase(dynamic configId) public void ChangeDatabase(dynamic configId)
{ {
configId =Convert.ToString(configId);
var isLog = _Context.Ado.IsEnableLogEvent; var isLog = _Context.Ado.IsEnableLogEvent;
Check.Exception(!_AllClients.Any(it => it.ConnectionConfig.ConfigId == configId), "ConfigId was not found {0}", configId); Check.Exception(!_AllClients.Any(it =>Convert.ToString( it.ConnectionConfig.ConfigId) == configId), "ConfigId was not found {0}", configId);
InitTenant(_AllClients.First(it => it.ConnectionConfig.ConfigId == configId)); InitTenant(_AllClients.First(it => Convert.ToString(it.ConnectionConfig.ConfigId )== configId));
if (this._IsAllTran) if (this._IsAllTran)
this.Ado.BeginTran(); this.Ado.BeginTran();
if (this._IsOpen) if (this._IsOpen)