mirror of
https://gitee.com/dotnetchina/SqlSugar.git
synced 2025-11-24 08:33:16 +08:00
Synchronous code
This commit is contained in:
@@ -790,7 +790,11 @@ namespace SqlSugar
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public virtual Task<string> GetStringAsync(string sql, object parameters, CancellationToken cancellationToken)
|
||||
{
|
||||
this.CancellationToken = cancellationToken;
|
||||
return GetStringAsync(sql, this.GetParameters(parameters));
|
||||
}
|
||||
public virtual Task<string> GetStringAsync(string sql, object parameters)
|
||||
{
|
||||
return GetStringAsync(sql, this.GetParameters(parameters));
|
||||
@@ -842,7 +846,11 @@ namespace SqlSugar
|
||||
{
|
||||
return GetScalar(sql, parameters).ObjToInt();
|
||||
}
|
||||
|
||||
public virtual Task<int> GetIntAsync(string sql, object parameters, CancellationToken cancellationToken)
|
||||
{
|
||||
this.CancellationToken = cancellationToken;
|
||||
return GetIntAsync(sql, this.GetParameters(parameters));
|
||||
}
|
||||
public virtual Task<int> GetIntAsync(string sql, object parameters)
|
||||
{
|
||||
return GetIntAsync(sql, this.GetParameters(parameters));
|
||||
@@ -883,7 +891,11 @@ namespace SqlSugar
|
||||
return GetDouble(sql, parameters.ToArray());
|
||||
}
|
||||
}
|
||||
|
||||
public virtual Task<Double> GetDoubleAsync(string sql, object parameters, CancellationToken cancellationToken)
|
||||
{
|
||||
this.CancellationToken = cancellationToken;
|
||||
return GetDoubleAsync(sql, this.GetParameters(parameters));
|
||||
}
|
||||
public virtual Task<Double> GetDoubleAsync(string sql, object parameters)
|
||||
{
|
||||
return GetDoubleAsync(sql, this.GetParameters(parameters));
|
||||
@@ -1420,6 +1432,11 @@ namespace SqlSugar
|
||||
return GetScalar(sql, parameters.ToArray());
|
||||
}
|
||||
}
|
||||
public virtual Task<object> GetScalarAsync(string sql, object parameters, CancellationToken cancellationToken)
|
||||
{
|
||||
this.CancellationToken = cancellationToken;
|
||||
return GetScalarAsync(sql, this.GetParameters(parameters));
|
||||
}
|
||||
public virtual Task<object> GetScalarAsync(string sql, object parameters)
|
||||
{
|
||||
return GetScalarAsync(sql, this.GetParameters(parameters));
|
||||
|
||||
@@ -151,7 +151,7 @@ namespace SqlSugar
|
||||
}
|
||||
if (dr.GetDataTypeName(i) == "NUMBER")
|
||||
{
|
||||
return Convert.ToInt32(dr.GetDouble(i));
|
||||
return Convert.ToInt32(dr.GetDecimal(i));
|
||||
}
|
||||
var result = dr.GetInt32(i);
|
||||
return result;
|
||||
@@ -160,7 +160,7 @@ namespace SqlSugar
|
||||
{
|
||||
if (dr.GetDataTypeName(i) == "NUMBER")
|
||||
{
|
||||
return Convert.ToInt32(dr.GetDouble(i));
|
||||
return Convert.ToInt32(dr.GetDecimal(i));
|
||||
}
|
||||
var result = dr.GetInt32(i);
|
||||
return result;
|
||||
|
||||
@@ -53,7 +53,7 @@ namespace SqlSugar
|
||||
}
|
||||
return this;
|
||||
}
|
||||
public EntityColumnable<T> OneToMany(Expression<Func<T, object>> propertyExpression, string firstName, string lastName)
|
||||
public EntityColumnable<T> OneToMany(Expression<Func<T, object>> propertyExpression, string firstName, string lastName=null)
|
||||
{
|
||||
var name = ExpressionTool.GetMemberName(propertyExpression);
|
||||
if (entityColumnInfo.PropertyName == name && IsTable)
|
||||
@@ -63,6 +63,16 @@ namespace SqlSugar
|
||||
}
|
||||
return this;
|
||||
}
|
||||
public EntityColumnable<T> OneToManyByArrayList(Expression<Func<T, object>> propertyExpression, string firstName, string lastName=null)
|
||||
{
|
||||
var name = ExpressionTool.GetMemberName(propertyExpression);
|
||||
if (entityColumnInfo.PropertyName == name && IsTable)
|
||||
{
|
||||
entityColumnInfo.Navigat = new Navigate(NavigateType.OneToManyByArrayList, firstName, lastName);
|
||||
entityColumnInfo.IsIgnore = true;
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
public EntityColumnable<T> ManyToMany(Expression<Func<T, object>> propertyExpression,Type mapppingType, string mapppingTypeAid, string mapppingTypeBid)
|
||||
{
|
||||
|
||||
@@ -141,11 +141,11 @@ namespace SqlSugar
|
||||
}
|
||||
else if (pkColumn.UnderType == UtilConstants.GuidType)
|
||||
{
|
||||
SetValue(pkColumn, insertData, () => Guid.NewGuid());
|
||||
SetValue(pkColumn, insertData, () => UtilMethods.NewGuid());
|
||||
}
|
||||
else if (pkColumn.UnderType == UtilConstants.StringType)
|
||||
{
|
||||
SetValue(pkColumn, insertData, () => Guid.NewGuid().ToString());
|
||||
SetValue(pkColumn, insertData, () => UtilMethods.NewGuid().ToString());
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -177,14 +177,14 @@ namespace SqlSugar
|
||||
{
|
||||
if (this._Context?.CurrentConnectionConfig?.MoreSettings?.IsAutoDeleteQueryFilter == true)
|
||||
{
|
||||
this._Context.Deleteable<object>()
|
||||
this._Context.Deleteable<TChild>()
|
||||
.AS(thisEntity.DbTableName)
|
||||
.EnableQueryFilter(thisEntity.Type)
|
||||
.In(thisFkColumn.DbColumnName, ids.Distinct().ToList()).ExecuteCommand();
|
||||
}
|
||||
else
|
||||
{
|
||||
this._Context.Deleteable<object>()
|
||||
this._Context.Deleteable<TChild>()
|
||||
.AS(thisEntity.DbTableName)
|
||||
.In(thisFkColumn.DbColumnName, ids.Distinct().ToList()).ExecuteCommand();
|
||||
}
|
||||
|
||||
@@ -164,11 +164,11 @@ namespace SqlSugar
|
||||
}
|
||||
else if (pkColumn.UnderType == UtilConstants.GuidType)
|
||||
{
|
||||
SetValue(pkColumn, UpdateData, () => Guid.NewGuid());
|
||||
SetValue(pkColumn, UpdateData, () => UtilMethods.NewGuid());
|
||||
}
|
||||
else if (pkColumn.UnderType == UtilConstants.StringType)
|
||||
{
|
||||
SetValue(pkColumn, UpdateData, () => Guid.NewGuid().ToString());
|
||||
SetValue(pkColumn, UpdateData, () => UtilMethods.NewGuid().ToString());
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -177,6 +177,13 @@ namespace SqlSugar
|
||||
OneToMany(pageList, selector, listItemEntity, navObjectNamePropety, navObjectNameColumnInfo);
|
||||
});
|
||||
}
|
||||
else if (navObjectNameColumnInfo.Navigat.NavigatType == NavigateType.OneToManyByArrayList)
|
||||
{
|
||||
this.Context.Utilities.PageEach(list, 5000, pageList =>
|
||||
{
|
||||
OneToManyByArrayList(pageList, selector, listItemEntity, navObjectNamePropety, navObjectNameColumnInfo);
|
||||
});
|
||||
}
|
||||
else if (navObjectNameColumnInfo.Navigat.NavigatType == NavigateType.ManyToOne)
|
||||
{
|
||||
this.Context.Utilities.PageEach(list, 5000, pageList =>
|
||||
@@ -531,6 +538,124 @@ namespace SqlSugar
|
||||
}
|
||||
}
|
||||
}
|
||||
private void OneToManyByArrayList(List<object> list, Func<ISugarQueryable<object>, List<object>> selector, EntityInfo listItemEntity, System.Reflection.PropertyInfo navObjectNamePropety, EntityColumnInfo navObjectNameColumnInfo)
|
||||
{
|
||||
Check.ExceptionEasy(!navObjectNameColumnInfo.PropertyInfo.PropertyType.GetGenericArguments().Any(), navObjectNamePropety?.Name + "Navigation configuration error one to many should be List<T>", navObjectNamePropety?.Name + "导航配置错误一对多应该是List<T>");
|
||||
|
||||
var navEntity = navObjectNameColumnInfo.PropertyInfo.PropertyType.GetGenericArguments()[0];
|
||||
var navEntityInfo = this.Context.EntityMaintenance.GetEntityInfo(navEntity);
|
||||
var childDb = this.Context;
|
||||
childDb = GetCrossDatabase(childDb, navEntityInfo.Type);
|
||||
childDb.InitMappingInfo(navEntityInfo.Type);
|
||||
var navColumn = listItemEntity.Columns.FirstOrDefault(it => it.PropertyName == navObjectNameColumnInfo.Navigat.Name);
|
||||
Check.ExceptionEasy(navColumn == null, $"{navEntityInfo.EntityName} not found {navObjectNameColumnInfo.Navigat.Name} ", $"实体 {navEntityInfo.EntityName} 未找到导航配置列 {navObjectNameColumnInfo.Navigat.Name} ");
|
||||
Check.ExceptionEasy(navColumn.IsJson==false&&navColumn.IsArray==false, $"Entity {navEntityInfo.EntityName} navigation configuration errors {navObjectNameColumnInfo.Navigat.Name}, needs to array and IsJson = true or Pgsql IsArray = true ", $"实体 {navEntityInfo.EntityName} 导航配置错误 {navObjectNameColumnInfo.Navigat.Name} ,需要IsJson=true的数组或者pgsql如果是数组类型用 IsArray=true");
|
||||
//var navType = navObjectNamePropety.PropertyType;
|
||||
var listItemPkColumn = navEntityInfo.Columns.Where(it => it.IsPrimarykey).FirstOrDefault();
|
||||
Check.ExceptionEasy(listItemPkColumn == null && navObjectNameColumnInfo.Navigat.Name2 == null, listItemEntity.EntityName + " not primary key", listItemEntity.EntityName + "没有主键");
|
||||
if (navObjectNameColumnInfo.Navigat.Name2.HasValue())
|
||||
{
|
||||
listItemPkColumn = listItemEntity.Columns.Where(it => it.PropertyName == navObjectNameColumnInfo.Navigat.Name2).FirstOrDefault();
|
||||
Check.ExceptionEasy(listItemPkColumn == null, $"{navObjectNameColumnInfo.PropertyName} Navigate is error ", $"{navObjectNameColumnInfo.PropertyName}导航配置错误,可能顺序反了。");
|
||||
}
|
||||
var ids = list.Select(it => it.GetType().GetProperty(navColumn.PropertyName).GetValue(it)).SelectMany(it => (it as IEnumerable).Cast<object>()).Distinct().ToList();
|
||||
List<IConditionalModel> conditionalModels = new List<IConditionalModel>();
|
||||
if (IsEnumNumber(navColumn))
|
||||
{
|
||||
ids = ids.Select(it => Convert.ToInt64(it)).Cast<object>().ToList();
|
||||
}
|
||||
if (navColumn?.UnderType?.Name == UtilConstants.StringType.Name)
|
||||
{
|
||||
ids = ids.Select(it => it?.ToString()?.Replace(",", "[comma]")).Cast<object>().ToList();
|
||||
}
|
||||
conditionalModels.Add((new ConditionalModel()
|
||||
{
|
||||
ConditionalType = ConditionalType.In,
|
||||
FieldName = listItemPkColumn.DbColumnName,
|
||||
FieldValue = String.Join(",", ids),
|
||||
CSharpTypeName = listItemPkColumn?.UnderType?.Name
|
||||
}));
|
||||
var sqlObj = GetWhereSql(childDb, navObjectNameColumnInfo.Navigat.Name);
|
||||
|
||||
if (list.Any() && navObjectNamePropety.GetValue(list.First()) == null)
|
||||
{
|
||||
if (sqlObj.SelectString == null)
|
||||
{
|
||||
var columns = navEntityInfo.Columns.Where(it => !it.IsIgnore)
|
||||
.Select(it => GetOneToManySelectByColumnInfo(it, childDb)).ToList();
|
||||
sqlObj.SelectString = String.Join(",", columns);
|
||||
}
|
||||
var navList = selector(childDb.Queryable<object>(sqlObj.TableShortName).AS(GetDbTableName(navEntityInfo, sqlObj)).ClearFilter(QueryBuilder.RemoveFilters).Filter(this.QueryBuilder?.IsDisabledGobalFilter == true ? null : navEntityInfo.Type).AddParameters(sqlObj.Parameters).Where(conditionalModels).WhereIF(sqlObj.WhereString.HasValue(), sqlObj.WhereString).WhereIF(navObjectNameColumnInfo?.Navigat?.WhereSql != null, navObjectNameColumnInfo?.Navigat?.WhereSql).Select(sqlObj.SelectString).OrderByIF(sqlObj.OrderByString.HasValue(), sqlObj.OrderByString));
|
||||
if (navList.HasValue())
|
||||
{
|
||||
var groupQuery =
|
||||
(from l in list.Distinct()
|
||||
from n in navList
|
||||
let lValue =
|
||||
listItemPkColumn.PropertyInfo.GetValue(n).ObjToString()
|
||||
let nValues =
|
||||
((navColumn.PropertyInfo.GetValue(l) as IEnumerable)?.Cast<object>()??new List<object>())
|
||||
where nValues != null && nValues.Select(x => x.ObjToString()).Contains(lValue)
|
||||
select new
|
||||
{
|
||||
l,
|
||||
n
|
||||
})
|
||||
.GroupBy(it => it.l)
|
||||
.ToList();
|
||||
foreach (var item in groupQuery)
|
||||
{
|
||||
var itemSelectList = item.Select(it => it.n);
|
||||
if (sqlObj.Skip != null)
|
||||
{
|
||||
itemSelectList = itemSelectList
|
||||
.Skip(sqlObj.Skip.Value);
|
||||
}
|
||||
if (sqlObj.Take != null)
|
||||
{
|
||||
itemSelectList = itemSelectList
|
||||
.Take(sqlObj.Take.Value);
|
||||
}
|
||||
if (sqlObj.MappingExpressions.HasValue())
|
||||
{
|
||||
MappingFieldsHelper<T> helper = new MappingFieldsHelper<T>();
|
||||
helper.NavEntity = navEntityInfo;
|
||||
helper.Context = this.Context;
|
||||
helper.RootEntity = this.Context.EntityMaintenance.GetEntityInfo<T>();
|
||||
helper.SetChildList(navObjectNameColumnInfo, item.Key, itemSelectList.ToList(), sqlObj.MappingExpressions);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
var instance = Activator.CreateInstance(navObjectNamePropety.PropertyType, true);
|
||||
var ilist = instance as IList;
|
||||
foreach (var value in itemSelectList.ToList())
|
||||
{
|
||||
ilist.Add(value);
|
||||
}
|
||||
navObjectNamePropety.SetValue(item.Key, instance);
|
||||
}
|
||||
}
|
||||
foreach (var item in list)
|
||||
{
|
||||
if (navObjectNamePropety.GetValue(item) == null)
|
||||
{
|
||||
var instance = Activator.CreateInstance(navObjectNamePropety.PropertyType, true);
|
||||
navObjectNamePropety.SetValue(item, instance);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
//No navigation data set new List()
|
||||
foreach (var item in list)
|
||||
{
|
||||
var instance = Activator.CreateInstance(navObjectNamePropety.PropertyType, true);
|
||||
navObjectNamePropety.SetValue(item, instance);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void OneToMany(List<object> list, Func<ISugarQueryable<object>, List<object>> selector, EntityInfo listItemEntity, System.Reflection.PropertyInfo navObjectNamePropety, EntityColumnInfo navObjectNameColumnInfo)
|
||||
{
|
||||
|
||||
@@ -133,7 +133,9 @@ namespace SqlSugar
|
||||
var tableName = this.QueryBuilder.AsTables.FirstOrDefault().Value;
|
||||
if (tableName.StartsWith(" (SELECT * FROM ("))
|
||||
{
|
||||
var list = this.Clone().Select<int>(" COUNT(1) ").ToList();
|
||||
var copyDb = this.Clone();
|
||||
copyDb.QueryBuilder.OrderByValue = null;
|
||||
var list = copyDb.Select<int>(" COUNT(1) ").ToList();
|
||||
return list.FirstOrDefault();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -162,7 +162,9 @@ namespace SqlSugar
|
||||
var tableName= this.QueryBuilder.AsTables.FirstOrDefault().Value;
|
||||
if (tableName.StartsWith(" (SELECT * FROM ("))
|
||||
{
|
||||
var list = await this.Clone().Select<int>(" COUNT(1) ").ToListAsync();
|
||||
var copyDb = this.Clone();
|
||||
copyDb.QueryBuilder.OrderByValue = null;
|
||||
var list = await copyDb.Select<int>(" COUNT(1) ").ToListAsync();
|
||||
return list.FirstOrDefault();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -686,6 +686,16 @@ namespace SqlSugar
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (navColumn != null && navColumn.Navigat.NavigatType == NavigateType.ManyToMany)
|
||||
{
|
||||
var name1 = navColumn.Navigat.AClassId;
|
||||
var name1Column = entityColumns.FirstOrDefault(it => it.PropertyName == name1);
|
||||
if (name1Column != null)
|
||||
{
|
||||
if (!navInfo.AppendProperties.ContainsKey(name1Column.PropertyName))
|
||||
navInfo.AppendProperties.Add(name1Column.PropertyName, name1Column.DbColumnName);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1776,7 +1786,7 @@ namespace SqlSugar
|
||||
foreach (var item in s.Arguments)
|
||||
{
|
||||
var q = this.Context.Queryable<object>().QueryBuilder;
|
||||
var itemObj= q.GetExpressionValue(item, isSingle ? ResolveExpressType.FieldSingle : ResolveExpressType.FieldMultiple).GetResultString();
|
||||
var itemObj= q.GetExpressionValue(item, isSingle ? ResolveExpressType.FieldSingle : ResolveExpressType.WhereMultiple).GetResultString();
|
||||
if (q.Parameters.Any())
|
||||
{
|
||||
var itemGroupBySql = UtilMethods.GetSqlString(DbType.SqlServer, itemObj, q.Parameters.ToArray());
|
||||
|
||||
@@ -575,11 +575,23 @@ namespace SqlSugar
|
||||
var p = ParameterConverter.Invoke(obj, new object[] { value, 100 }) as SugarParameter;
|
||||
value = p.Value;
|
||||
}
|
||||
var cSharpTypeName = UtilMethods.GetTypeName(value);
|
||||
if (item.SqlParameterDbType is System.Data.DbType dbtype)
|
||||
{
|
||||
if (dbtype is System.Data.DbType.AnsiStringFixedLength)
|
||||
{
|
||||
cSharpTypeName = "char";
|
||||
}
|
||||
else if (dbtype is System.Data.DbType.StringFixedLength)
|
||||
{
|
||||
cSharpTypeName = "nchar";
|
||||
}
|
||||
}
|
||||
condition.ConditionalList.Add(new KeyValuePair<WhereType, ConditionalModel>(i==0?WhereType.Or :WhereType.And, new ConditionalModel()
|
||||
{
|
||||
FieldName = item.DbColumnName,
|
||||
ConditionalType = ConditionalType.Equal,
|
||||
CSharpTypeName=UtilMethods.GetTypeName(value),
|
||||
CSharpTypeName= cSharpTypeName,
|
||||
FieldValue = value==null?"null":value.ObjToString(formatTime),
|
||||
FieldValueConvertFunc=this.Context.CurrentConnectionConfig.DbType==DbType.PostgreSQL?
|
||||
UtilMethods.GetTypeConvert(value):null
|
||||
|
||||
@@ -593,7 +593,7 @@ namespace SqlSugar
|
||||
}
|
||||
}
|
||||
|
||||
private string ReplaceFilterColumnName(string sql, Type filterType,string shortName=null)
|
||||
internal string ReplaceFilterColumnName(string sql, Type filterType,string shortName=null)
|
||||
{
|
||||
foreach (var column in this.Context.EntityMaintenance.GetEntityInfoWithAttr(filterType).Columns.Where(it => it.IsIgnore == false))
|
||||
{
|
||||
|
||||
@@ -241,6 +241,8 @@ namespace SqlSugar
|
||||
}
|
||||
public static DateTime[] GetDateRange(string date1Str, string date2Str)
|
||||
{
|
||||
date1Str = date1Str.Trim();
|
||||
date2Str = date2Str.Trim();
|
||||
var len = date2Str.Trim().Length;
|
||||
if (date1Str.Length == 4)
|
||||
{
|
||||
@@ -250,8 +252,16 @@ namespace SqlSugar
|
||||
{
|
||||
date2Str = new DateTime(int.Parse(date2Str), 1, 1).ToString(SugarDateTimeFormat.Default);
|
||||
}
|
||||
if (date1Str.Length == 13)
|
||||
{
|
||||
date1Str = date1Str + ":00:00";
|
||||
}
|
||||
if (date2Str.Length == 13)
|
||||
{
|
||||
date2Str = date2Str + ":00:00";
|
||||
}
|
||||
if (!DateTime.TryParse(date1Str, out var date1))
|
||||
Check.ExceptionEasy("date1 format is incorrect.(yyyy-MM-dd | yyyy | yyyy-MM | yyyy-MM-dd HH | yyyy-MM-dd HH:mm)", "date1 格式不正确,支持格式 yyyy-MM-dd | yyyy | yyyy-MM | yyyy-MM-dd HH | yyyy-MM-dd HH:mm");
|
||||
Check.ExceptionEasy("date1 format is incorrect.(yyyy-MM-dd | yyyy | yyyy-MM | yyyy-MM-dd HH | yyyy-MM-dd HH:mm |yyyy-MM-dd HH:mm:ss)", "date1 格式不正确,支持格式 yyyy-MM-dd | yyyy | yyyy-MM | yyyy-MM-dd HH | yyyy-MM-dd HH:mm|yyyy-MM-dd HH:mm:ss");
|
||||
|
||||
if (!DateTime.TryParse(date2Str, out var date2))
|
||||
Check.ExceptionEasy("date2 format is incorrect.", "date2 格式不正确");
|
||||
@@ -266,8 +276,10 @@ namespace SqlSugar
|
||||
date2 = date2.AddHours(1);
|
||||
else if (len == 16) // yyyy-MM-dd HH:mm
|
||||
date2 = date2.AddMinutes(1);
|
||||
else if (len == 19) // yyyy-MM-dd HH:mm
|
||||
date2 = date2.AddSeconds(1);
|
||||
else
|
||||
Check.ExceptionEasy("date format is incorrect.(yyyy-MM-dd | yyyy | yyyy-MM | yyyy-MM-dd HH | yyyy-MM-dd HH:mm)", "date 格式不正确,支持格式 yyyy-MM-dd | yyyy | yyyy-MM | yyyy-MM-dd HH | yyyy-MM-dd HH:mm");
|
||||
Check.ExceptionEasy("date format is incorrect.(yyyy-MM-dd | yyyy | yyyy-MM | yyyy-MM-dd HH | yyyy-MM-dd HH:mm|yyyy-MM-dd HH:mm:ss)", "date 格式不正确,支持格式 yyyy-MM-dd | yyyy | yyyy-MM | yyyy-MM-dd HH | yyyy-MM-dd HH:mm|yyyy-MM-dd HH:mm:ss");
|
||||
|
||||
return new DateTime[] { date1, date2 };
|
||||
}
|
||||
|
||||
@@ -521,6 +521,9 @@ namespace SqlSugar
|
||||
break;
|
||||
case DbType.Tidb:
|
||||
config.DbType = DbType.MySql;
|
||||
if (this.CurrentConnectionConfig.MoreSettings == null)
|
||||
this.CurrentConnectionConfig.MoreSettings = new ConnMoreSettings();
|
||||
this.CurrentConnectionConfig.MoreSettings.DatabaseModel = DbType.Tidb;
|
||||
break;
|
||||
case DbType.PolarDB:
|
||||
config.DbType = DbType.MySql;
|
||||
|
||||
@@ -272,6 +272,11 @@ namespace SqlSugar
|
||||
var tableName=$" ({queryable.Clone().ToSqlString()}) ";;
|
||||
return this.InnerJoin(joinExpress, tableName);
|
||||
}
|
||||
public IUpdateable<T, T2> InnerJoin<T2>(ISugarQueryable<T2> queryable, Expression<Func<T, T2, bool>> joinExpress)
|
||||
{
|
||||
var tableName = $" ({queryable.Clone().ToSqlString()}) "; ;
|
||||
return this.InnerJoin(joinExpress, tableName);
|
||||
}
|
||||
public IUpdateable<T, T2> InnerJoin<T2>(Expression<Func<T, T2, bool>> joinExpress,string TableName)
|
||||
{
|
||||
UpdateableProvider<T, T2> result = new UpdateableProvider<T, T2>();
|
||||
|
||||
@@ -12,6 +12,7 @@ namespace SqlSugar
|
||||
OneToMany=2,
|
||||
ManyToOne=3,
|
||||
ManyToMany=4,
|
||||
Dynamic=5
|
||||
Dynamic=5,
|
||||
OneToManyByArrayList
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,10 +4,12 @@ using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace SqlSugar
|
||||
namespace SqlSugar
|
||||
{
|
||||
public class ExpressionContextCase
|
||||
{
|
||||
public bool IsDateString { get; set; }
|
||||
public bool HasWhere { get; set; }
|
||||
public int Num { get; set; } = 1;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -895,7 +895,7 @@ namespace SqlSugar
|
||||
}
|
||||
else
|
||||
{
|
||||
var value = baseResolve.GetNewExpressionValue(memberAssignment.Expression);
|
||||
var value = baseResolve.GetNewExpressionValue(ExpressionTool.RemoveConvert(memberAssignment.Expression));
|
||||
//var leftInfo = keys[i];
|
||||
additem.Type = nameof(ConstantExpression);
|
||||
additem.RightName = memberAssignment.Member.Name;
|
||||
|
||||
@@ -904,7 +904,7 @@ namespace SqlSugar
|
||||
if(sql.Contains(replace))
|
||||
{
|
||||
var value = columnInfo.PropertyInfo.GetValue(item);
|
||||
var newValue = "null";
|
||||
string newValue = null;
|
||||
if (value != null)
|
||||
{
|
||||
if (UtilMethods.IsNumber(columnInfo.UnderType.Name))
|
||||
@@ -953,6 +953,10 @@ namespace SqlSugar
|
||||
if (columnInfo.SqlParameterDbType is System.Data.DbType type && type == System.Data.DbType.AnsiString)
|
||||
{
|
||||
|
||||
}
|
||||
else if(newValue==null)
|
||||
{
|
||||
newValue = "null";
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -961,6 +965,7 @@ namespace SqlSugar
|
||||
}
|
||||
}
|
||||
sql = sql.Replace(replace, newValue);
|
||||
sql = sql.Replace(" = null ", " is null ");
|
||||
}
|
||||
}
|
||||
sb.Append(sql);
|
||||
|
||||
@@ -40,8 +40,9 @@ namespace SqlSugar
|
||||
#endregion
|
||||
|
||||
#region Get Mehtod
|
||||
protected object GetMemberValue(object value, Expression exp)
|
||||
protected object GetMemberValue(object value, Expression exp,out SugarParameter outConvertParameter)
|
||||
{
|
||||
outConvertParameter = null;
|
||||
if (exp is MemberExpression)
|
||||
{
|
||||
var member = (exp as MemberExpression);
|
||||
@@ -57,6 +58,7 @@ namespace SqlSugar
|
||||
var obj = Activator.CreateInstance(type);
|
||||
var p = ParameterConverter.Invoke(obj, new object[] { value, 100 + this.Context.ParameterIndex }) as SugarParameter;
|
||||
value = p.Value;
|
||||
outConvertParameter = p;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -38,11 +38,19 @@ namespace SqlSugar
|
||||
if (parameter.OppsiteExpression != null)
|
||||
{
|
||||
var exp = ExpressionTool.RemoveConvert(parameter.OppsiteExpression);
|
||||
value = GetMemberValue(value, exp);
|
||||
value = GetMemberValue(value, exp,out SugarParameter outConvertParameter);
|
||||
var valueFullName = value?.GetType()?.FullName;
|
||||
if (valueFullName == "Microsoft.Extensions.Primitives.StringValues")
|
||||
{
|
||||
value = value.ToString();
|
||||
}
|
||||
if (outConvertParameter!=null && isSetTempData == false&& exp is MemberExpression m)
|
||||
{
|
||||
outConvertParameter.ParameterName = $"@{m.Member.Name}" + this.Context.ParameterIndex;
|
||||
this.Context.ParameterIndex++;
|
||||
this.Context.Parameters.Add(outConvertParameter);
|
||||
AppendMember(parameter, isLeft, outConvertParameter.ParameterName);
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (isSetTempData)
|
||||
|
||||
@@ -458,6 +458,12 @@ namespace SqlSugar
|
||||
isRemoveParamter = true;
|
||||
isNegate = true;
|
||||
}
|
||||
else if (name == "IIF"&&item is MemberExpression member&& member?.Expression is BinaryExpression&& ExpressionTool.GetParameters(member).Count>0)
|
||||
{
|
||||
parameter.CommonTempData = GetNewExpressionValue(member);
|
||||
isRemoveParamter = true;
|
||||
isNegate = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
base.Start();
|
||||
@@ -516,7 +522,7 @@ namespace SqlSugar
|
||||
List<object> result = new List<object>();
|
||||
foreach (var memItem in (value as IList))
|
||||
{
|
||||
result.Add(GetMemberValue(memItem, args.Last()));
|
||||
result.Add(GetMemberValue(memItem, args.Last(), out SugarParameter outConvertParameter));
|
||||
}
|
||||
value = result;
|
||||
}
|
||||
|
||||
@@ -64,6 +64,11 @@ namespace SqlSugar
|
||||
var whereStr = isWhere ? " AND " : " WHERE ";
|
||||
isWhere = true;
|
||||
result += (whereStr + SubTools.GetMethodValue(Context, exp, ResolveExpressType.WhereSingle));
|
||||
if (ChildType.IsInterface&& this.Context?.SugarContext?.QueryBuilder!=null)
|
||||
{
|
||||
var filterType = ChildType;
|
||||
result =this.Context.SugarContext?.QueryBuilder.ReplaceFilterColumnName(result, type);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -82,6 +82,11 @@ namespace SqlSugar
|
||||
}
|
||||
else if (this.Context.GetLimit() != null)
|
||||
{
|
||||
if (this?.Context?.Case != null)
|
||||
{
|
||||
this.Context.Case.HasWhere = this.HasWhere;
|
||||
this.Context.Case.Num = num;
|
||||
}
|
||||
return this.Context.GetLimit();
|
||||
}
|
||||
else
|
||||
|
||||
@@ -67,6 +67,10 @@ namespace SqlSugar
|
||||
}
|
||||
else if (this.Context.GetLimit()!=null)
|
||||
{
|
||||
if (this?.Context?.Case != null)
|
||||
{
|
||||
this.Context.Case.HasWhere = this.HasWhere;
|
||||
}
|
||||
return this.Context.GetLimit();
|
||||
}
|
||||
else
|
||||
|
||||
@@ -9,6 +9,10 @@ namespace SqlSugar
|
||||
{ }
|
||||
public class Subqueryable<T1, T2, T3, T4, T5, T6, T7, T8, T9> : Subqueryable<T1> where T1 : class, new()
|
||||
{
|
||||
public Subqueryable<T1, T2, T3, T4, T5, T6, T7, T8,T9> Having(Func<T1, T2, T3, T4, T5, T6, T7, T8,T9, bool> expression)
|
||||
{
|
||||
return this;
|
||||
}
|
||||
public new Subqueryable<T1, T2, T3, T4, T5, T6, T7, T8,T9> AsWithAttr()
|
||||
{
|
||||
return this;
|
||||
@@ -76,6 +80,10 @@ namespace SqlSugar
|
||||
}
|
||||
public class Subqueryable<T1, T2, T3, T4, T5, T6, T7, T8> : Subqueryable<T1> where T1 : class, new()
|
||||
{
|
||||
public Subqueryable<T1, T2, T3, T4, T5, T6,T7,T8> Having(Func<T1, T2, T3, T4, T5, T6, T7, T8, bool> expression)
|
||||
{
|
||||
return this;
|
||||
}
|
||||
public new Subqueryable<T1, T2, T3, T4, T5, T6, T7,T8> AsWithAttr()
|
||||
{
|
||||
return this;
|
||||
@@ -139,6 +147,10 @@ namespace SqlSugar
|
||||
}
|
||||
public class Subqueryable<T1, T2, T3, T4, T5, T6, T7> : Subqueryable<T1> where T1 : class, new()
|
||||
{
|
||||
public Subqueryable<T1, T2, T3, T4, T5, T6,T7> Having(Func<T1, T2, T3, T4, T5, T6,T7, bool> expression)
|
||||
{
|
||||
return this;
|
||||
}
|
||||
public new Subqueryable<T1, T2, T3, T4, T5, T6,T7> AsWithAttr()
|
||||
{
|
||||
return this;
|
||||
@@ -198,6 +210,10 @@ namespace SqlSugar
|
||||
}
|
||||
public class Subqueryable<T1, T2, T3, T4, T5, T6> : Subqueryable<T1> where T1 : class, new()
|
||||
{
|
||||
public Subqueryable<T1, T2, T3, T4, T5,T6> Having(Func<T1, T2, T3, T4, T5,T6, bool> expression)
|
||||
{
|
||||
return this;
|
||||
}
|
||||
public string SelectStringJoin(Func<T1, T2, T3, T4, T5,T6, string> expression, string separator)
|
||||
{
|
||||
return default(string);
|
||||
@@ -262,6 +278,10 @@ namespace SqlSugar
|
||||
}
|
||||
public class Subqueryable<T1, T2, T3, T4, T5> : Subqueryable<T1> where T1 : class, new()
|
||||
{
|
||||
public Subqueryable<T1, T2, T3, T4,T5> Having(Func<T1, T2, T3, T4,T5, bool> expression)
|
||||
{
|
||||
return this;
|
||||
}
|
||||
public string SelectStringJoin(Func<T1, T2, T3, T4,T5, string> expression, string separator)
|
||||
{
|
||||
return default(string);
|
||||
@@ -322,6 +342,10 @@ namespace SqlSugar
|
||||
}
|
||||
public class Subqueryable<T1, T2, T3, T4> : Subqueryable<T1> where T1 : class, new()
|
||||
{
|
||||
public Subqueryable<T1, T2, T3,T4> Having(Func<T1, T2, T3,T4, bool> expression)
|
||||
{
|
||||
return this;
|
||||
}
|
||||
public new Subqueryable<T1, T2, T3,T4> AsWithAttr()
|
||||
{
|
||||
return this;
|
||||
@@ -572,6 +596,10 @@ namespace SqlSugar
|
||||
{
|
||||
return this;
|
||||
}
|
||||
public Subqueryable<T1, T2,T3> Having(Func<T1, T2,T3, bool> expression)
|
||||
{
|
||||
return this;
|
||||
}
|
||||
}
|
||||
public class Subqueryable<T1, T2> : Subqueryable<T1> where T1 : class, new()
|
||||
{
|
||||
@@ -696,5 +724,9 @@ namespace SqlSugar
|
||||
{
|
||||
return this;
|
||||
}
|
||||
public Subqueryable<T1,T2> Having(Func<T1,T2, bool> expression)
|
||||
{
|
||||
return this;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -75,6 +75,7 @@ namespace SqlSugar
|
||||
object GetScalar(string sql, List<SugarParameter> parameters);
|
||||
|
||||
Task<object> GetScalarAsync(string sql, object parameters);
|
||||
Task<object> GetScalarAsync(string sql, object parameters, CancellationToken cancellationToken);
|
||||
Task<object> GetScalarAsync(string sql, params SugarParameter[] parameters);
|
||||
Task<object> GetScalarAsync(string sql, List<SugarParameter> parameters);
|
||||
|
||||
@@ -92,6 +93,7 @@ namespace SqlSugar
|
||||
string GetString(string sql, params SugarParameter[] parameters);
|
||||
string GetString(string sql, List<SugarParameter> parameters);
|
||||
Task<string> GetStringAsync(string sql, object parameters);
|
||||
Task<string> GetStringAsync(string sql, object parameters, CancellationToken cancellationToken);
|
||||
Task<string> GetStringAsync(string sql, params SugarParameter[] parameters);
|
||||
Task<string> GetStringAsync(string sql, List<SugarParameter> parameters);
|
||||
|
||||
@@ -101,6 +103,7 @@ namespace SqlSugar
|
||||
int GetInt(string sql, List<SugarParameter> parameters);
|
||||
|
||||
Task<int> GetIntAsync(string sql, object pars);
|
||||
Task<int> GetIntAsync(string sql, object pars,CancellationToken cancellationToken);
|
||||
Task<int> GetIntAsync(string sql, params SugarParameter[] parameters);
|
||||
Task<int> GetIntAsync(string sql, List<SugarParameter> parameters);
|
||||
|
||||
@@ -114,7 +117,7 @@ namespace SqlSugar
|
||||
Double GetDouble(string sql, params SugarParameter[] parameters);
|
||||
Double GetDouble(string sql, List<SugarParameter> parameters);
|
||||
|
||||
|
||||
Task<Double> GetDoubleAsync(string sql, object parameters, CancellationToken cancellationToken);
|
||||
Task<Double> GetDoubleAsync(string sql, object parameters);
|
||||
Task<Double> GetDoubleAsync(string sql, params SugarParameter[] parameters);
|
||||
Task<Double> GetDoubleAsync(string sql, List<SugarParameter> parameters);
|
||||
|
||||
@@ -122,6 +122,7 @@ namespace SqlSugar
|
||||
IUpdateable<T,T2> InnerJoin<T2>(Expression<Func<T,T2,bool>> joinExpress);
|
||||
IUpdateable<T, T2> InnerJoin<T2>(Expression<Func<T, T2, bool>> joinExpress,string tableName);
|
||||
IUpdateable<T, T2> InnerJoin<T2>(ISugarQueryable<T> queryable,Expression<Func<T, T2, bool>> joinExpress);
|
||||
IUpdateable<T, T2> InnerJoin<T2>(ISugarQueryable<T2> queryable, Expression<Func<T, T2, bool>> joinExpress);
|
||||
UpdateablePage<T> PageSize(int pageSize);
|
||||
IUpdateable<T> In(object[] ids);
|
||||
ParameterUpdateable<T> UseParameter();
|
||||
|
||||
@@ -2015,5 +2015,21 @@ namespace SqlSugar
|
||||
{
|
||||
return context?.SugarContext?.Context?.CurrentConnectionConfig?.MoreSettings ?? new ConnMoreSettings();
|
||||
}
|
||||
|
||||
public static object NewGuid()
|
||||
{
|
||||
if (StaticConfig.CustomGuidFunc != null)
|
||||
{
|
||||
return StaticConfig.CustomGuidFunc();
|
||||
}
|
||||
else if (StaticConfig.CustomGuidByValueFunc != null)
|
||||
{
|
||||
return StaticConfig.CustomGuidByValueFunc(Guid.NewGuid());
|
||||
}
|
||||
else
|
||||
{
|
||||
return Guid.NewGuid();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user