diff --git a/Src/Asp.Net/SqlSugar/Abstract/CodeFirstProvider/CodeFirstProvider.cs b/Src/Asp.Net/SqlSugar/Abstract/CodeFirstProvider/CodeFirstProvider.cs index e58823d50..89d70aac1 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/CodeFirstProvider/CodeFirstProvider.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/CodeFirstProvider/CodeFirstProvider.cs @@ -738,6 +738,10 @@ namespace SqlSugar { return false; } + else if (ec.UnderType == UtilConstants.LongType && dc.Length == 19 && dc.DecimalDigits == 0 && dc.OracleDataType?.EqualCase("number") == true) + { + return false; + } else { return properyTypeName.ToLower() != dataType.ToLower(); diff --git a/Src/Asp.Net/SqlSugar/Abstract/DbBindProvider/IDataReaderEntityBuilder.cs b/Src/Asp.Net/SqlSugar/Abstract/DbBindProvider/IDataReaderEntityBuilder.cs index c95782655..32a985ca9 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/DbBindProvider/IDataReaderEntityBuilder.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/DbBindProvider/IDataReaderEntityBuilder.cs @@ -363,6 +363,8 @@ namespace SqlSugar method = null; if (bindPropertyType ==UtilConstants.IntType&& this.Context.CurrentConnectionConfig.DbType == DbType.OceanBaseForOracle) method = isNullableType ? getMyIntNull : getMyInt; + if (bindProperyTypeName == "int16") + method = null; break; case CSharpDataType.@bool: if (bindProperyTypeName == "bool" || bindProperyTypeName == "boolean") diff --git a/Src/Asp.Net/SqlSugar/Abstract/FastestProvider/Private.cs b/Src/Asp.Net/SqlSugar/Abstract/FastestProvider/Private.cs index 13aa763f9..cb5891328 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/FastestProvider/Private.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/FastestProvider/Private.cs @@ -12,6 +12,7 @@ namespace SqlSugar { private IFastBuilder GetBuider() { + var className = string.Empty; switch (this.context.CurrentConnectionConfig.DbType) { case DbType.MySql: @@ -45,11 +46,15 @@ namespace SqlSugar case DbType.Oscar: break; case DbType.QuestDB: - return new QuestDBFastBuilder(this.entityInfo); + return new QuestDBFastBuilder(this.entityInfo); + case DbType.Custom: + className = InstanceFactory.CustomNamespace + "." + InstanceFactory.CustomDbName + "FastBuilder"; + break; default: + className = $"SqlSugar.{this.context.CurrentConnectionConfig.DbType}FastBuilder"; break; } - var reslut = InstanceFactory.CreateInstance($"SqlSugar.{this.context.CurrentConnectionConfig.DbType}FastBuilder"); + var reslut = InstanceFactory.CreateInstance(className); reslut.CharacterSet = this.CharacterSet; reslut.FastEntityInfo = this.entityInfo; return reslut; diff --git a/Src/Asp.Net/SqlSugar/Abstract/FilterProvider/FilterProvider.cs b/Src/Asp.Net/SqlSugar/Abstract/FilterProvider/FilterProvider.cs index a24fc8c62..19af1adb7 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/FilterProvider/FilterProvider.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/FilterProvider/FilterProvider.cs @@ -40,7 +40,7 @@ namespace SqlSugar _Filters.RemoveAll(it => it.FilterName == filterName); } - public List GeFilterList + public List GetFilterList { get { diff --git a/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/QueryableHelper.cs b/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/QueryableHelper.cs index 5b4f99cf4..6ca5badb7 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/QueryableHelper.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/QueryableProvider/QueryableHelper.cs @@ -1797,9 +1797,9 @@ namespace SqlSugar protected void _Filter(string FilterName, bool isDisabledGobalFilter) { QueryBuilder.IsDisabledGobalFilter = isDisabledGobalFilter; - if (this.Context.QueryFilter.GeFilterList.HasValue() && FilterName.HasValue()) + if (this.Context.QueryFilter.GetFilterList.HasValue() && FilterName.HasValue()) { - var list = this.Context.QueryFilter.GeFilterList.Where(it => it.FilterName == FilterName && it.IsJoinQuery == !QueryBuilder.IsSingle()); + var list = this.Context.QueryFilter.GetFilterList.Where(it => it.FilterName == FilterName && it.IsJoinQuery == !QueryBuilder.IsSingle()); foreach (var item in list) { var filterResult = item.FilterValue(this.Context); diff --git a/Src/Asp.Net/SqlSugar/Abstract/SqlBuilderProvider/QueryBuilder.cs b/Src/Asp.Net/SqlSugar/Abstract/SqlBuilderProvider/QueryBuilder.cs index 947b315c3..d22153674 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/SqlBuilderProvider/QueryBuilder.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/SqlBuilderProvider/QueryBuilder.cs @@ -312,9 +312,9 @@ namespace SqlSugar var db = Context; BindingFlags flag = BindingFlags.Instance | BindingFlags.NonPublic| BindingFlags.Public; var index = 0; - if (db.QueryFilter.GeFilterList != null) + if (db.QueryFilter.GetFilterList != null) { - foreach (var item in db.QueryFilter.GeFilterList) + foreach (var item in db.QueryFilter.GetFilterList) { if (this.RemoveFilters != null && this.RemoveFilters.Length > 0) { @@ -384,9 +384,9 @@ namespace SqlSugar public virtual void AppendFilter() { - if (!IsDisabledGobalFilter && this.Context.QueryFilter.GeFilterList.HasValue()) + if (!IsDisabledGobalFilter && this.Context.QueryFilter.GetFilterList.HasValue()) { - var gobalFilterList = this.Context.QueryFilter.GeFilterList.Where(it => it.FilterName.IsNullOrEmpty()).ToList(); + var gobalFilterList = this.Context.QueryFilter.GetFilterList.Where(it => it.FilterName.IsNullOrEmpty()).ToList(); if (this.RemoveFilters != null && this.RemoveFilters.Length > 0) { gobalFilterList = gobalFilterList.Where(it => !this.RemoveFilters.Contains(it.type)).ToList(); diff --git a/Src/Asp.Net/SqlSugar/Abstract/SugarProvider/SqlSugarProvider.cs b/Src/Asp.Net/SqlSugar/Abstract/SugarProvider/SqlSugarProvider.cs index c1c31612f..7ecc9e13c 100644 --- a/Src/Asp.Net/SqlSugar/Abstract/SugarProvider/SqlSugarProvider.cs +++ b/Src/Asp.Net/SqlSugar/Abstract/SugarProvider/SqlSugarProvider.cs @@ -432,10 +432,14 @@ namespace SqlSugar public virtual ISugarQueryable Queryable(ISugarQueryable queryable) { var sqlobj = queryable.ToSql(); + var QueryBuilder = queryable.QueryBuilder; var newQueryable = this.SqlQueryable(sqlobj.Key).AddParameters(sqlobj.Value); var result = newQueryable.Select(newQueryable.QueryBuilder.SelectValue+""); result.QueryBuilder.IsSqlQuery = false; result.QueryBuilder.NoCheckInclude = true; + result.QueryBuilder.WhereIndex = (QueryBuilder.WhereIndex + 1); + var appendIndex = result.QueryBuilder.Parameters == null ? 1 : result.QueryBuilder.Parameters.Count + 1; + result.QueryBuilder.LambdaExpressions.ParameterIndex = (QueryBuilder.LambdaExpressions.ParameterIndex + appendIndex); result.QueryBuilder.Includes = queryable.QueryBuilder.Includes?.ToList(); return result; } diff --git a/Src/Asp.Net/SqlSugar/ExpressionsToSql/Common/ExpressionTool.cs b/Src/Asp.Net/SqlSugar/ExpressionsToSql/Common/ExpressionTool.cs index f23096c0a..91d4d7158 100644 --- a/Src/Asp.Net/SqlSugar/ExpressionsToSql/Common/ExpressionTool.cs +++ b/Src/Asp.Net/SqlSugar/ExpressionsToSql/Common/ExpressionTool.cs @@ -5,7 +5,7 @@ using System.Globalization; using System.Linq; using System.Linq.Expressions; using System.Reflection; -using System.Text; + using System.Text; namespace SqlSugar { public class ExpressionTool @@ -878,7 +878,24 @@ namespace SqlSugar additem.ShortName = member.Expression + ""; additem.RightName = member.Member.Name; additem.RightDbName = context.GetDbColumnName(entityName, additem.RightName); + var isNavMember = member.Expression != null + && ExpressionTool.IsNavMember(context, member.Expression); additem.LeftNameName = member.Member.Name; + if (isNavMember && (context?.SugarContext?.QueryBuilder?.JoinQueryInfos?.Count()??0)==0) + { + var exp = context.GetCopyContextWithMapping(); + exp.Resolve(member, ResolveExpressType.FieldSingle); + var sql = exp.Result.GetResultString(); + if (context.IsSingle&& context.CurrentShortName.IsNullOrEmpty()) + { + context.SingleTableNameSubqueryShortName=ExpressionTool.GetParameters(member)?.FirstOrDefault()?.Name; + } + additem.RightDbName = sql; + } + else if (isNavMember && context?.SugarContext?.QueryBuilder?.JoinQueryInfos?.Any(it=>it.ShortName?.StartsWith("pnv_" + ExpressionTool.GetMemberName(member.Expression)) ==true)==true) + { + additem.ShortName = "pnv_"+ExpressionTool.GetMemberName(member.Expression); + } //additem.Value = ""; result.Add(additem); } diff --git a/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/ConstantExpressionResolve.cs b/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/ConstantExpressionResolve.cs index aab547f8d..faa47c3c9 100644 --- a/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/ConstantExpressionResolve.cs +++ b/Src/Asp.Net/SqlSugar/ExpressionsToSql/ResolveItems/ConstantExpressionResolve.cs @@ -69,6 +69,7 @@ namespace SqlSugar { var isLeft = parameter.IsLeft; object value = ExpressionTool.GetValue(expression.Value, this.Context); + var isNullStr = value != null && value.ObjToString() == "NULL"; value = ConvetValue(parameter, expression, value); if (IsEnumString(value)) value = ConvertEnum(value); @@ -116,6 +117,11 @@ namespace SqlSugar parameter.BaseParameter.ValueIsNull = true; value = this.Context.DbMehtods.Null(); } + if (isNullStr) + { + this.Context.Result.Append(AppendParameter(value)); + break; + } AppendValue(parameter, isLeft, value); } break; diff --git a/Src/Asp.Net/SqlSugar/ExpressionsToSql/Subquery/Items/SubEnableTableFilter.cs b/Src/Asp.Net/SqlSugar/ExpressionsToSql/Subquery/Items/SubEnableTableFilter.cs index c984125c7..b843d5cfc 100644 --- a/Src/Asp.Net/SqlSugar/ExpressionsToSql/Subquery/Items/SubEnableTableFilter.cs +++ b/Src/Asp.Net/SqlSugar/ExpressionsToSql/Subquery/Items/SubEnableTableFilter.cs @@ -49,8 +49,8 @@ namespace SqlSugar BindingFlags flag = BindingFlags.Instance | BindingFlags.NonPublic; Type type = this.Context.SubTableType; var isWhere = HasWhere; - if (db.QueryFilter.GeFilterList != null) { - foreach (var item in db.QueryFilter.GeFilterList) + if (db.QueryFilter.GetFilterList != null) { + foreach (var item in db.QueryFilter.GetFilterList) { PropertyInfo field = item.GetType().GetProperty("exp", flag); if (field != null) diff --git a/Src/Asp.Net/SqlSugar/Interface/IFilter.cs b/Src/Asp.Net/SqlSugar/Interface/IFilter.cs index 265a163f5..a38374100 100644 --- a/Src/Asp.Net/SqlSugar/Interface/IFilter.cs +++ b/Src/Asp.Net/SqlSugar/Interface/IFilter.cs @@ -9,6 +9,6 @@ namespace SqlSugar { IFilter Add(SqlFilterItem filter); void Remove(string filterName); - List GeFilterList { get; } + List GetFilterList { get; } } } diff --git a/Src/Asp.Net/SqlSugar/Utilities/UtilMethods.cs b/Src/Asp.Net/SqlSugar/Utilities/UtilMethods.cs index 959edc256..c51f6b4a7 100644 --- a/Src/Asp.Net/SqlSugar/Utilities/UtilMethods.cs +++ b/Src/Asp.Net/SqlSugar/Utilities/UtilMethods.cs @@ -601,11 +601,15 @@ namespace SqlSugar { var method = destinationType.GetMyMethod("Parse", 1); if (method != null) - { + { var result = method.Invoke(null, new object[] { value }); - return result; + return result; } } + else if (value is byte[] bytes&&bytes.Length==1&& destinationType == typeof(char)) + { + return (char)(bytes)[0]; + } var destinationConverter = TypeDescriptor.GetConverter(destinationType); if (destinationConverter != null && destinationConverter.CanConvertFrom(value.GetType())) return destinationConverter.ConvertFrom(null, culture, value);