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.Reflection;
using System.Text;
using System.Text.RegularExpressions;
namespace SqlSugar
{
public partial class CodeFirstProvider : ICodeFirst
@ -114,6 +116,16 @@ namespace SqlSugar
{
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);

View File

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

View File

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

View File

@ -85,6 +85,7 @@ namespace SqlSugar
}
public ISugarQueryable<T> AS(string tableName)
{
if (tableName == null) return this;
var entityName = typeof(T).Name;
return _As(tableName, entityName);
}
@ -1067,21 +1068,10 @@ namespace SqlSugar
}
public virtual List<T> ToPageList(int pageIndex, int pageSize, ref int totalNumber)
{
_RestoreMapping = false;
List<T> result = null;
int count = this.Count();
_RestoreMapping = true;
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;
var oldMapping = this.Context.MappingTables;
totalNumber = this.Clone().Count();
this.Context.MappingTables = oldMapping;
return this.Clone().ToPageList(pageIndex, pageSize);
}
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<KeyValuePair<StorageType, Func<StorageableInfo<T>, bool>, string>> whereFuncs = new List<KeyValuePair<StorageType, Func<StorageableInfo<T>, bool>, string>>();
Expression<Func<T, object>> whereExpression;
private string asname { get; set; }
public Storageable(List<T> datas, SqlSugarProvider context)
{
this.Context = context;
@ -71,9 +72,9 @@ namespace SqlSugar
{
if (this.allDatas.Count == 0)
return new StorageableResult<T>() {
AsDeleteable = this.Context.Deleteable<T>().Where(it => false),
AsInsertable = this.Context.Insertable(new List<T>()),
AsUpdateable = this.Context.Updateable(new List<T>()),
AsDeleteable = this.Context.Deleteable<T>().AS(asname).Where(it => false),
AsInsertable = this.Context.Insertable(new List<T>()).AS(asname),
AsUpdateable = this.Context.Updateable(new List<T>()).AS(asname),
InsertList = new List<StorageableMessage<T>>(),
UpdateList = new List<StorageableMessage<T>>(),
DeleteList = new List<StorageableMessage<T>>(),
@ -90,7 +91,7 @@ namespace SqlSugar
if (whereExpression == null && pkInfos.Any())
{
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);
});
}
@ -120,9 +121,9 @@ namespace SqlSugar
var other = messageList.Where(it => it.StorageType == StorageType.Other).ToList();
StorageableResult<T> result = new StorageableResult<T>()
{
AsDeleteable = this.Context.Deleteable<T>(),
AsUpdateable = this.Context.Updateable(update.Select(it => it.Item).ToList()),
AsInsertable = this.Context.Insertable(inset.Select(it => it.Item).ToList()),
AsDeleteable = this.Context.Deleteable<T>().AS(asname),
AsUpdateable = this.Context.Updateable(update.Select(it => it.Item).ToList()).AS(asname),
AsInsertable = this.Context.Insertable(inset.Select(it => it.Item).ToList()).AS(asname),
OtherList = other,
InsertList = inset,
DeleteList = delete,
@ -175,7 +176,7 @@ namespace SqlSugar
{
List<IConditionalModel> conditList = new List<IConditionalModel>();
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);
});
}
@ -238,5 +239,11 @@ namespace SqlSugar
var result = resolveExpress.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();
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;
}
return result;

View File

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

View File

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

View File

@ -90,11 +90,27 @@ namespace SqlSugar
break;
case ResolveExpressType.FieldSingle:
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;
case ResolveExpressType.FieldMultiple:
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;
case ResolveExpressType.ArrayMultiple:
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
#region Resolve Where
@ -117,12 +142,12 @@ namespace SqlSugar
if (ExpressionTool.IsConstExpression(expression))
{
var value = ExpressionTool.GetMemberValue(expression.Member, expression);
baseParameter.CommonTempData = value+"=1 ";
baseParameter.CommonTempData = value + "=1 ";
}
else
{
fieldName = GetName(parameter, expression, null, isSingle);
baseParameter.CommonTempData = fieldName+"=1 ";
baseParameter.CommonTempData = fieldName + "=1 ";
}
}
else
@ -130,12 +155,12 @@ namespace SqlSugar
if (ExpressionTool.IsConstExpression(expression))
{
var value = ExpressionTool.GetMemberValue(expression.Member, expression);
base.AppendValue(parameter, isLeft, value+"=1 ");
base.AppendValue(parameter, isLeft, value + "=1 ");
}
else
{
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);
}
}
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;
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);
}
@ -332,7 +357,7 @@ namespace SqlSugar
var methodParamter = new MethodCallExpressionArgs() { IsMember = true, MemberName = parameter.CommonTempData, MemberValue = 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()
{
@ -346,7 +371,7 @@ namespace SqlSugar
{
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
{
@ -449,7 +474,7 @@ namespace SqlSugar
};
return this.Context.DbMehtods.DateValue(pars);
}
private string GetToDateShort(string value)
{
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> SplitOther(Func<StorageableInfo<T>, bool> conditions, string message = null);
StorageableResult<T> ToStorage();
IStorageable<T> As(string tableName);
}
public class StorageableInfo<T> where T : class, new()

View File

@ -148,7 +148,7 @@ namespace SqlSugar
break;
case DateType.Day:
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:
parameter2 = "%H";
break;

View File

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

View File

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