Update core

This commit is contained in:
sunkaixuna
2021-11-06 04:21:27 +08:00
parent 5b0c27e136
commit 1e82197201
12 changed files with 94 additions and 12 deletions

View File

@@ -733,7 +733,7 @@ namespace SqlSugar
// return asyncInsertable; // return asyncInsertable;
//} //}
private void After(string sql, long? result) protected void After(string sql, long? result)
{ {
if (this.IsEnableDiffLogEvent) if (this.IsEnableDiffLogEvent)
{ {
@@ -753,7 +753,7 @@ namespace SqlSugar
this.RemoveCacheFunc(); this.RemoveCacheFunc();
} }
} }
private void Before(string sql) protected void Before(string sql)
{ {
if (this.IsEnableDiffLogEvent) if (this.IsEnableDiffLogEvent)
{ {
@@ -841,12 +841,14 @@ namespace SqlSugar
{ {
if (this.InsertObjs.HasValue()) if (this.InsertObjs.HasValue())
{ {
var oldColumns = this.InsertBuilder.DbColumnInfoList.Select(it => it.PropertyName).ToList();
var expression = (LambdaExpression.Lambda(method).Body as LambdaExpression).Body; var expression = (LambdaExpression.Lambda(method).Body as LambdaExpression).Body;
Check.Exception(!(expression is MethodCallExpression), method.ToString() + " is not method"); Check.Exception(!(expression is MethodCallExpression), method.ToString() + " is not method");
var callExpresion = expression as MethodCallExpression; var callExpresion = expression as MethodCallExpression;
UtilMethods.DataInoveByExpresson(this.InsertObjs,callExpresion); UtilMethods.DataInoveByExpresson(this.InsertObjs,callExpresion);
this.InsertBuilder.DbColumnInfoList = new List<DbColumnInfo>(); this.InsertBuilder.DbColumnInfoList = new List<DbColumnInfo>();
Init(); Init();
this.InsertBuilder.DbColumnInfoList = this.InsertBuilder.DbColumnInfoList.Where(it => oldColumns.Contains(it.PropertyName)).ToList();
} }
return this; return this;
} }

View File

@@ -825,7 +825,7 @@ namespace SqlSugar
} }
public virtual bool Any() public virtual bool Any()
{ {
return this.Count() > 0; return this.Select("1").First()!=null;
} }
public virtual ISugarQueryable<TResult> Select<TResult>(Expression<Func<T, TResult>> expression) public virtual ISugarQueryable<TResult> Select<TResult>(Expression<Func<T, TResult>> expression)
@@ -893,7 +893,30 @@ namespace SqlSugar
{ {
var splitColumn = this.EntityInfo.Columns.FirstOrDefault(it => it.PropertyInfo.GetCustomAttribute<SplitFieldAttribute>() != null); var splitColumn = this.EntityInfo.Columns.FirstOrDefault(it => it.PropertyInfo.GetCustomAttribute<SplitFieldAttribute>() != null);
var columnName = this.SqlBuilder.GetTranslationColumnName(splitColumn.DbColumnName); var columnName = this.SqlBuilder.GetTranslationColumnName(splitColumn.DbColumnName);
return this.Where($" {columnName}>=@spBeginTime AND {columnName}<= @spEndTime",new { spBeginTime = beginTime , spEndTime = endTime}).SplitTable(tas => tas.Where(y => y.Date >= beginTime && y.Date <= endTime)); return this.Where($" {columnName}>=@spBeginTime AND {columnName}<= @spEndTime",new { spBeginTime = beginTime , spEndTime = endTime}).SplitTable(tas => {
var dateNull = DateTime.MinValue;
var min = tas.Where(it => it.Date <= beginTime.Date).Select(it=>it.Date).OrderByDescending(it=>it.Date).FirstOrDefault();
var max = tas.Where(it => it.Date >= endTime.Date).Select(it => it.Date).OrderBy(it => it.Date).FirstOrDefault();
if (max == dateNull && min == dateNull)
{
return tas.Take(1);
}
if (max == dateNull)
{
max = tas.Where(it => it.Date <= endTime).Select(it => it.Date).OrderByDescending(it => it.Date).FirstOrDefault();
}
if (max == dateNull)
{
max = min;
}
if (min == dateNull)
{
min = max;
}
var result= tas.Where(y => y.Date >= min && y.Date <= max);
return result;
});
} }
public ISugarQueryable<T> SplitTable(Func<List<SplitTableInfo>, IEnumerable<SplitTableInfo>> getTableNamesFunc) public ISugarQueryable<T> SplitTable(Func<List<SplitTableInfo>, IEnumerable<SplitTableInfo>> getTableNamesFunc)
{ {
@@ -1181,6 +1204,11 @@ namespace SqlSugar
this.QueryBuilder.ResultType = typeof(SugarCacheDictionary); this.QueryBuilder.ResultType = typeof(SugarCacheDictionary);
var keyName = QueryBuilder.GetExpressionValue(key, ResolveExpressType.FieldSingle).GetResultString(); var keyName = QueryBuilder.GetExpressionValue(key, ResolveExpressType.FieldSingle).GetResultString();
var valueName = QueryBuilder.GetExpressionValue(value, ResolveExpressType.FieldSingle).GetResultString(); var valueName = QueryBuilder.GetExpressionValue(value, ResolveExpressType.FieldSingle).GetResultString();
if (this.QueryBuilder.IsSingle() == false)
{
keyName = this.QueryBuilder.TableShortName+ "." + keyName;
valueName = this.QueryBuilder.TableShortName + "." + valueName;
}
var result = this.Select<KeyValuePair<string, object>>(keyName + "," + valueName).ToList().ToDictionary(it => it.Key.ObjToString(), it => it.Value); var result = this.Select<KeyValuePair<string, object>>(keyName + "," + valueName).ToList().ToDictionary(it => it.Key.ObjToString(), it => it.Value);
return result; return result;
} }

View File

@@ -1168,5 +1168,14 @@ namespace SqlSugar
}; };
} }
#endregion #endregion
#region AsTenant
public ITenant AsTenant()
{
Check.Exception(true,ErrorMessage.GetThrowMessage("Child objects do not support tenant methods, var childDb= Db.GetConnection(confid) ,Db is master ", "Db子对象不支持租户方法请使用主对象,例如var childDb= Db.GetConnection(confid) Db是主对象childDb是子对象 "));
return null;
}
#endregion
} }
} }

View File

@@ -203,12 +203,14 @@ namespace SqlSugar
ThrowUpdateByExpression(); ThrowUpdateByExpression();
if (this.UpdateObjs.HasValue()) if (this.UpdateObjs.HasValue())
{ {
var oldColumns = this.UpdateBuilder.DbColumnInfoList.Select(it => it.PropertyName).ToList();
var expression = (LambdaExpression.Lambda(method).Body as LambdaExpression).Body; var expression = (LambdaExpression.Lambda(method).Body as LambdaExpression).Body;
Check.Exception(!(expression is MethodCallExpression), method.ToString() + " is not method"); Check.Exception(!(expression is MethodCallExpression), method.ToString() + " is not method");
var callExpresion = expression as MethodCallExpression; var callExpresion = expression as MethodCallExpression;
UtilMethods.DataInoveByExpresson(this.UpdateObjs, callExpresion); UtilMethods.DataInoveByExpresson(this.UpdateObjs, callExpresion);
this.UpdateBuilder.DbColumnInfoList = new List<DbColumnInfo>(); this.UpdateBuilder.DbColumnInfoList = new List<DbColumnInfo>();
Init(); Init();
this.UpdateBuilder.DbColumnInfoList = this.UpdateBuilder.DbColumnInfoList.Where(it => oldColumns.Contains(it.PropertyName)).ToList();
} }
return this; return this;
} }
@@ -316,7 +318,7 @@ namespace SqlSugar
public IUpdateable<T> SetColumns(Expression<Func<T, bool>> columns) public IUpdateable<T> SetColumns(Expression<Func<T, bool>> columns)
{ {
ThrowUpdateByObject(); ThrowUpdateByObject();
CheckTranscodeing();
var binaryExp = columns.Body as BinaryExpression; var binaryExp = columns.Body as BinaryExpression;
Check.Exception(!binaryExp.NodeType.IsIn(ExpressionType.Equal), "No support {0}", columns.ToString()); Check.Exception(!binaryExp.NodeType.IsIn(ExpressionType.Equal), "No support {0}", columns.ToString());
Check.Exception(!(binaryExp.Left is MemberExpression) && !(binaryExp.Left is UnaryExpression), "No support {0}", columns.ToString()); Check.Exception(!(binaryExp.Left is MemberExpression) && !(binaryExp.Left is UnaryExpression), "No support {0}", columns.ToString());
@@ -327,6 +329,12 @@ namespace SqlSugar
expResult = Regex.Split(expResult, " IS NULL ")[0]+" = NULL "; expResult = Regex.Split(expResult, " IS NULL ")[0]+" = NULL ";
} }
string key = SqlBuilder.GetNoTranslationColumnName(expResult); string key = SqlBuilder.GetNoTranslationColumnName(expResult);
if (EntityInfo.Columns.Where(it=>it.IsJson||it.IsTranscoding).Any(it => it.DbColumnName.EqualCase(key) || it.PropertyName.EqualCase(key)))
{
CheckTranscodeing();
}
UpdateBuilder.SetValues.Add(new KeyValuePair<string, string>(SqlBuilder.GetTranslationColumnName(key), expResult)); UpdateBuilder.SetValues.Add(new KeyValuePair<string, string>(SqlBuilder.GetTranslationColumnName(key), expResult));
this.UpdateBuilder.DbColumnInfoList = this.UpdateBuilder.DbColumnInfoList.Where(it => (UpdateParameterIsNull == false && IsPrimaryKey(it)) || UpdateBuilder.SetValues.Any(v => SqlBuilder.GetNoTranslationColumnName(v.Key).Equals(it.DbColumnName, StringComparison.CurrentCultureIgnoreCase) || SqlBuilder.GetNoTranslationColumnName(v.Key).Equals(it.PropertyName, StringComparison.CurrentCultureIgnoreCase)) || it.IsPrimarykey == true).ToList(); this.UpdateBuilder.DbColumnInfoList = this.UpdateBuilder.DbColumnInfoList.Where(it => (UpdateParameterIsNull == false && IsPrimaryKey(it)) || UpdateBuilder.SetValues.Any(v => SqlBuilder.GetNoTranslationColumnName(v.Key).Equals(it.DbColumnName, StringComparison.CurrentCultureIgnoreCase) || SqlBuilder.GetNoTranslationColumnName(v.Key).Equals(it.PropertyName, StringComparison.CurrentCultureIgnoreCase)) || it.IsPrimarykey == true).ToList();
AppendSets(); AppendSets();

View File

@@ -283,7 +283,11 @@ namespace SqlSugar
var typeName = tType.Name; var typeName = tType.Name;
if (item.PropertyType.IsClass()) if (item.PropertyType.IsClass())
{ {
if (IsJsonItem(readerValues, name)) if (item.PropertyType.FullName == "Newtonsoft.Json.Linq.JObject")
{
result.Add(name, DeserializeObject<dynamic>(readerValues[item.Name].ToString()));
}
else if (IsJsonItem(readerValues, name))
{ {
result.Add(name, DeserializeObject<Dictionary<string, object>>(readerValues.First().Value.ObjToString())); result.Add(name, DeserializeObject<Dictionary<string, object>>(readerValues.First().Value.ObjToString()));
} }

View File

@@ -52,7 +52,8 @@ namespace SqlSugar
void InitMappingInfo(Type type); void InitMappingInfo(Type type);
void InitMappingInfo<T>(); void InitMappingInfo<T>();
void Open(); void Open();
void Close(); void Close();
ITenant AsTenant();
#endregion #endregion
#region Insertable #region Insertable

View File

@@ -20,6 +20,8 @@ namespace SqlSugar
csharpTypeName = "long"; csharpTypeName = "long";
if (csharpTypeName == "Boolean") if (csharpTypeName == "Boolean")
csharpTypeName = "bool"; csharpTypeName = "bool";
if (csharpTypeName == "SByte")
csharpTypeName = "Byte";
var mappings = this.MappingTypes.Where(it => it.Value.ToString().Equals(csharpTypeName, StringComparison.CurrentCultureIgnoreCase)); var mappings = this.MappingTypes.Where(it => it.Value.ToString().Equals(csharpTypeName, StringComparison.CurrentCultureIgnoreCase));
return mappings.HasValue() ? mappings.First().Key : "varchar"; return mappings.HasValue() ? mappings.First().Key : "varchar";
} }

View File

@@ -34,7 +34,7 @@ namespace SqlSugar
var count = Ado.ExecuteCommand(sql, InsertBuilder.Parameters == null ? null : InsertBuilder.Parameters.ToArray()); var count = Ado.ExecuteCommand(sql, InsertBuilder.Parameters == null ? null : InsertBuilder.Parameters.ToArray());
var result = (this.GetIdentityKeys().IsNullOrEmpty() || count == 0) ? 0 : GetSeqValue(GetSeqName()).ObjToInt(); var result = (this.GetIdentityKeys().IsNullOrEmpty() || count == 0) ? 0 : GetSeqValue(GetSeqName()).ObjToInt();
this.Context.Ado.IsDisableMasterSlaveSeparation = isDisableMasterSlaveSeparation; this.Context.Ado.IsDisableMasterSlaveSeparation = isDisableMasterSlaveSeparation;
After(sql,result);
AutoEnd(oldIsAuto); AutoEnd(oldIsAuto);
return result; return result;
} }
@@ -52,7 +52,7 @@ namespace SqlSugar
var count = Ado.ExecuteCommand(sql, InsertBuilder.Parameters == null ? null : InsertBuilder.Parameters.ToArray()); var count = Ado.ExecuteCommand(sql, InsertBuilder.Parameters == null ? null : InsertBuilder.Parameters.ToArray());
var result = (this.GetIdentityKeys().IsNullOrEmpty() || count == 0) ? 0 : Convert.ToInt64(GetSeqValue(GetSeqName())); var result = (this.GetIdentityKeys().IsNullOrEmpty() || count == 0) ? 0 : Convert.ToInt64(GetSeqValue(GetSeqName()));
this.Context.Ado.IsDisableMasterSlaveSeparation = isDisableMasterSlaveSeparation; this.Context.Ado.IsDisableMasterSlaveSeparation = isDisableMasterSlaveSeparation;
After(sql, result);
AutoEnd(oldIsAuto); AutoEnd(oldIsAuto);
return result; return result;
} }
@@ -70,7 +70,7 @@ namespace SqlSugar
var count = await Ado.ExecuteCommandAsync(sql, InsertBuilder.Parameters == null ? null : InsertBuilder.Parameters.ToArray()); var count = await Ado.ExecuteCommandAsync(sql, InsertBuilder.Parameters == null ? null : InsertBuilder.Parameters.ToArray());
var result = (this.GetIdentityKeys().IsNullOrEmpty() || count == 0) ? 0 : GetSeqValue(GetSeqName()).ObjToInt(); var result = (this.GetIdentityKeys().IsNullOrEmpty() || count == 0) ? 0 : GetSeqValue(GetSeqName()).ObjToInt();
this.Context.Ado.IsDisableMasterSlaveSeparation = isDisableMasterSlaveSeparation; this.Context.Ado.IsDisableMasterSlaveSeparation = isDisableMasterSlaveSeparation;
After(sql, result);
AutoEnd(oldIsAuto); AutoEnd(oldIsAuto);
return result; return result;
} }
@@ -88,7 +88,7 @@ namespace SqlSugar
var count = await Ado.ExecuteCommandAsync(sql, InsertBuilder.Parameters == null ? null : InsertBuilder.Parameters.ToArray()); var count = await Ado.ExecuteCommandAsync(sql, InsertBuilder.Parameters == null ? null : InsertBuilder.Parameters.ToArray());
var result = (this.GetIdentityKeys().IsNullOrEmpty() || count == 0) ? 0 : Convert.ToInt64(GetSeqValue(GetSeqName())); var result = (this.GetIdentityKeys().IsNullOrEmpty() || count == 0) ? 0 : Convert.ToInt64(GetSeqValue(GetSeqName()));
this.Context.Ado.IsDisableMasterSlaveSeparation = isDisableMasterSlaveSeparation; this.Context.Ado.IsDisableMasterSlaveSeparation = isDisableMasterSlaveSeparation;
After(sql, result);
AutoEnd(oldIsAuto); AutoEnd(oldIsAuto);
return result; return result;
} }

View File

@@ -41,6 +41,15 @@ namespace SqlSugar
{ {
return base.GetDbColumnName(entityName,propertyName).ToUpper(); return base.GetDbColumnName(entityName,propertyName).ToUpper();
} }
public override bool IsTranslationText(string name)
{
if (!string.IsNullOrEmpty(name) && name.ToLower() == "sysdate")
{
return true;
}
var result = name.IsContainsIn(SqlTranslationLeft, SqlTranslationRight, UtilConstants.Space, ExpressionConst.LeftParenthesis, ExpressionConst.RightParenthesis);
return result;
}
} }
public partial class OracleMethod : DefaultDbMethod, IDbMethods public partial class OracleMethod : DefaultDbMethod, IDbMethods
{ {

View File

@@ -576,6 +576,11 @@ namespace SqlSugar
#endregion #endregion
#region TenantManager #region TenantManager
public ITenant AsTenant()
{
var tenant= this as ITenant;
return tenant;
}
public SqlSguarTransaction UseTran() public SqlSguarTransaction UseTran()
{ {
return new SqlSguarTransaction(this); return new SqlSguarTransaction(this);

View File

@@ -65,6 +65,10 @@ namespace SqlSugar
public SugarCacheProvider DataCache => ScopedContext.DataCache; public SugarCacheProvider DataCache => ScopedContext.DataCache;
public ITenant AsTenant()
{
return ScopedContext.AsTenant();
}
public void AddConnection(ConnectionConfig connection) public void AddConnection(ConnectionConfig connection)
{ {
ScopedContext.AddConnection(connection); ScopedContext.AddConnection(connection);

View File

@@ -55,7 +55,17 @@ namespace SqlSugar
} }
return errorValue; return errorValue;
} }
public static bool EqualCase(this string thisValue,string equalValue)
{
if ( thisValue!=null && equalValue != null)
{
return thisValue.ToLower() == equalValue.ToLower();
}
else
{
return thisValue == equalValue;
}
}
public static string ObjToString(this object thisValue) public static string ObjToString(this object thisValue)
{ {
if (thisValue != null) return thisValue.ToString().Trim(); if (thisValue != null) return thisValue.ToString().Trim();