Skip to content

Commit 1b807f3

Browse files
committed
- 撤销 #1727
1 parent 7e89778 commit 1b807f3

File tree

2 files changed

+21
-33
lines changed

2 files changed

+21
-33
lines changed

FreeSql/Internal/CommonExpression.cs

Lines changed: 16 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,7 @@ public abstract class BaseDiyMemberExpression
2525
public ParameterExpression _lambdaParameter;
2626
public ReadAnonymousTypeInfo _map;
2727
public string _field;
28-
public ReadAnonymousTypeInfo ParseExpMapResult { get; internal protected set; }
29-
public ColumnInfo ParseExpColumnResult { get; internal protected set; }
28+
public ReadAnonymousTypeInfo ParseExpMapResult { get; protected set; }
3029
public abstract string ParseExp(Expression[] members);
3130
}
3231

@@ -532,7 +531,7 @@ void LocalSetFieldAlias(ref int localIndex, bool isdiymemexp)
532531
parent.Childs.Add(child);
533532
if (dtTb.Parameter != null)
534533
ReadAnonymousField(_tables, _tableRule, field, child, ref index, Expression.Property(
535-
dtTb.Parameter.Type == dtTb.Table.Type ? (Expression)dtTb.Parameter : Expression.TypeAs(dtTb.Parameter, dtTb.Table.Type),
534+
dtTb.Parameter.Type == dtTb.Table.Type ? (Expression)dtTb.Parameter : Expression.TypeAs(dtTb.Parameter, dtTb.Table.Type),
536535
dtTb.Table.Properties[trydtocol.CsName]), select, diymemexp, whereGlobalFilter, findIncludeMany, findSubSelectMany, isAllDtoMap);
537536
else
538537
{
@@ -825,7 +824,7 @@ rightExp is UnaryExpression rightExpUexp &&
825824

826825
var rightBool = ExpressionLambdaToSql(rightExp, tsc);
827826
var rightColumn = SearchColumnByField(tsc._tables, tsc.currentTable, rightBool);
828-
if (rightColumn != null) rightBool = $"{rightBool} = {formatSql(true, rightColumn.Attribute.MapType, null, null)}";
827+
if (rightColumn != null) rightBool = $"{rightBool} = {formatSql(true, rightColumn.Attribute.MapType, null, null)}";
829828
else rightBool = GetBoolString(rightBool);
830829
if (_common._orm?.Ado?.DataType == DataType.QuestDb) return $"(({leftBool}) {oper} ({rightBool}))";
831830
return $"({leftBool} {oper} {rightBool})";
@@ -860,20 +859,17 @@ rightExp is UnaryExpression rightExpUexp &&
860859
}
861860

862861
Type oldMapType = null;
863-
if (tsc.diymemexp != null) tsc.diymemexp.ParseExpColumnResult = null;
864862
var left = ExpressionLambdaToSql(leftExp, tsc);
865-
var leftMapColumn = SearchColumnByField(tsc._tables, tsc.currentTable, left) ??
866-
tsc.diymemexp?.ParseExpColumnResult; //group by emum -> MapType(string) #1727
863+
var leftMapColumn = SearchColumnByField(tsc._tables, tsc.currentTable, left);
867864
var isLeftMapType = leftMapColumn != null && new[] { "AND", "OR", "*", "/", "+", "-" }.Contains(oper) == false && (leftMapColumn.Attribute.MapType != rightExp.Type || leftMapColumn.CsType != rightExp.Type);
868865
ColumnInfo rightMapColumn = null;
869866
var isRightMapType = false;
870867
if (isLeftMapType) oldMapType = tsc.SetMapTypeReturnOld(leftMapColumn.Attribute.MapType);
871868

872-
var right = (leftMapColumn != null &&
869+
var right = (leftMapColumn != null &&
873870
(leftMapColumn.Table.AsTableColumn == leftMapColumn && rightExp.IsParameter() == false)) ? //自动分表
874871
formatSql(Expression.Lambda(rightExp).Compile().DynamicInvoke(), leftMapColumn.Attribute.MapType, leftMapColumn, tsc.dbParams) :
875872
ExpressionLambdaToSql(rightExp, tsc);
876-
if (isLeftMapType) tsc.SetMapTypeReturnOld(leftMapColumn.Attribute.MapType);
877873
if (right != "NULL" && isLeftMapType &&
878874
//判断参数化后的bug
879875
!(right.Contains('@') || right.Contains('?') || right.Contains(':')) &&
@@ -896,11 +892,10 @@ rightExp is UnaryExpression rightExpUexp &&
896892
if (isRightMapType)
897893
{
898894
oldMapType = tsc.SetMapTypeReturnOld(rightMapColumn.Attribute.MapType);
899-
left = (rightMapColumn != null &&
895+
left = (rightMapColumn != null &&
900896
(rightMapColumn.Table.AsTableColumn == rightMapColumn && leftExp.IsParameter() == false)) ? //自动分表
901-
formatSql(Expression.Lambda(leftExp).Compile().DynamicInvoke(), rightMapColumn.Attribute.MapType, rightMapColumn, tsc.dbParams) :
897+
formatSql(Expression.Lambda(leftExp).Compile().DynamicInvoke(), rightMapColumn.Attribute.MapType, rightMapColumn, tsc.dbParams) :
902898
ExpressionLambdaToSql(leftExp, tsc);
903-
if (isRightMapType) tsc.SetMapTypeReturnOld(rightMapColumn.Attribute.MapType);
904899
if (left != "NULL" && isRightMapType &&
905900
//判断参数化后的bug
906901
!(left.Contains('@') || left.Contains('?') || left.Contains(':')) &&
@@ -990,7 +985,7 @@ public string ExpressionLambdaToSql(Expression exp, ExpTSC tsc)
990985
{
991986
case ExpressionType.Not:
992987
var notExp = (exp as UnaryExpression)?.Operand;
993-
if (notExp.Type.IsNumberType())return _common.BitNot(ExpressionLambdaToSql(notExp, tsc)); //位操作
988+
if (notExp.Type.IsNumberType()) return _common.BitNot(ExpressionLambdaToSql(notExp, tsc)); //位操作
994989
if (notExp.NodeType == ExpressionType.MemberAccess)
995990
{
996991
var notBody = ExpressionLambdaToSql(notExp, tsc);
@@ -1006,7 +1001,7 @@ public string ExpressionLambdaToSql(Expression exp, ExpTSC tsc)
10061001
case ExpressionType.Invoke: //#1378
10071002
var invokeExp = exp as InvocationExpression;
10081003
var invokeReplaceExp = invokeExp.Expression;
1009-
var invokeLambdaExp = invokeReplaceExp as LambdaExpression;
1004+
var invokeLambdaExp = invokeReplaceExp as LambdaExpression;
10101005
if (invokeLambdaExp == null) return formatSql(Expression.Lambda(exp).Compile().DynamicInvoke(), tsc.mapType, tsc.mapColumnTmp, tsc.dbParams);
10111006
var invokeReplaceVistor = new FreeSql.Internal.CommonExpression.ReplaceVisitor();
10121007
var len = Math.Min(invokeExp.Arguments.Count, invokeLambdaExp.Parameters.Count);
@@ -1842,7 +1837,7 @@ public string ExpressionLambdaToSql(Expression exp, ExpTSC tsc)
18421837
}
18431838
if (callExp != null) return ExpressionLambdaToSql(callExp, tsc);
18441839
var diymemexps = new[] { tsc.diymemexp, tsc.subSelect001?._diymemexpWithTempQuery };
1845-
if (_subSelectParentDiyMemExps.Value?.Any() == true)
1840+
if (_subSelectParentDiyMemExps.Value?.Any() == true)
18461841
diymemexps = diymemexps.Concat(_subSelectParentDiyMemExps.Value).ToArray();
18471842
foreach (var diymemexp in diymemexps)
18481843
{
@@ -2425,7 +2420,7 @@ public string GetWhereCascadeSql(SelectTableInfo tb, IEnumerable<GlobalFilter.It
24252420
new ReplaceParameterVisitor().Modify(fl.Where, newParameter),
24262421
newParameter
24272422
);
2428-
var whereSql = ExpressionLambdaToSql(expExp.Body, new ExpTSC
2423+
var whereSql = ExpressionLambdaToSql(expExp.Body, new ExpTSC
24292424
{
24302425
_tables = isMultitb ? new List<SelectTableInfo>(new[] { tb }) : null,
24312426
_selectColumnMap = null,
@@ -2507,8 +2502,8 @@ public class ReplaceHzyTupleToMultiParam : ExpressionVisitor
25072502
public LambdaExpression Modify(LambdaExpression lambda, List<SelectTableInfo> tables)
25082503
{
25092504
this.tables = tables.Where(a => a.Type != SelectTableInfoType.Parent).ToList();
2510-
parameters = this.tables.Select(a => a.Parameter ??
2511-
Expression.Parameter(a.Table.Type,
2505+
parameters = this.tables.Select(a => a.Parameter ??
2506+
Expression.Parameter(a.Table.Type,
25122507
a.Alias.StartsWith("SP10") ? a.Alias.Replace("SP10", "ht") : a.Alias)).ToArray();
25132508
lambdaHzyParameter = lambda.Parameters.FirstOrDefault();
25142509
var exp = Visit(lambda.Body);
@@ -2596,7 +2591,7 @@ Expression LocalMatch(Type type, Expression memExp)
25962591
{
25972592
if (matchIgnores.ContainsKey(typeProp)) continue;
25982593
matchIgnores.Add(typeProp, true);
2599-
var nextExp = Expression.MakeMemberAccess(memExp, typeProp);
2594+
var nextExp = Expression.MakeMemberAccess(memExp, typeProp);
26002595
var ret = LocalMatch(typeProp.PropertyType, nextExp);
26012596
if (ret != null)
26022597
{
@@ -2765,8 +2760,8 @@ void LocalInitSelectProvider()
27652760
Type = SelectTableInfoType.Parent,
27662761
Parameter = a.Parameter
27672762
}));
2768-
if (dbParams != null) select.WithParameters(dbParams);
2769-
if (tableRule != null) select._tableRules.Add(tableRule);
2763+
if (dbParams != null) select.WithParameters(dbParams);
2764+
if (tableRule != null) select._tableRules.Add(tableRule);
27702765
if (whereGlobalFilter != null)
27712766
{
27722767
select._whereGlobalFilter.Clear();

FreeSql/Internal/CommonProvider/SelectProvider/SelectGroupingProvider.cs

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -36,11 +36,9 @@ public SelectGroupingProvider(IFreeSql orm, Select0Provider select, ReadAnonymou
3636
public override string ParseExp(Expression[] members)
3737
{
3838
ParseExpMapResult = null;
39-
ParseExpColumnResult = null;
4039
if (members.Any() == false)
4140
{
4241
ParseExpMapResult = _map;
43-
ParseExpColumnResult = ParseExpMapResult.GetColumn();
4442
return _map.DbField;
4543
}
4644
var firstMember = ((members.FirstOrDefault() as MemberExpression)?.Expression as MemberExpression);
@@ -55,7 +53,6 @@ public override string ParseExp(Expression[] members)
5553
if (read == null) return null;
5654
}
5755
ParseExpMapResult = read;
58-
ParseExpColumnResult = ParseExpMapResult.GetColumn();
5956
if (!_addFieldAlias) return read.DbField;
6057
if (_flagNestedFieldAlias) return read.DbField;
6158
if (_comonExp.EndsWithDbNestedField(read.DbField, read.DbNestedField) == false)
@@ -85,7 +82,6 @@ public override string ParseExp(Expression[] members)
8582
members[a] = replaceVistor.Modify(members[a], replaceMember, curtable.Parameter);
8683
var ret = _select._diymemexpWithTempQuery.ParseExp(members);
8784
ParseExpMapResult = _select._diymemexpWithTempQuery.ParseExpMapResult;
88-
ParseExpColumnResult = ParseExpMapResult.GetColumn();
8985
return ret;
9086
}
9187
}
@@ -134,10 +130,7 @@ void LocalValueInitData()
134130
return null;
135131
}
136132
}
137-
var tsc = new CommonExpression.ExpTSC { _tables = _tables, _tableRule = _select._tableRule, tbtype = SelectTableInfoType.From, isQuoteName = true, isDisableDiyParse = true, style = CommonExpression.ExpressionStyle.Where };
138-
var result = _comonExp.ExpressionLambdaToSql(retExp, tsc);
139-
ParseExpColumnResult = tsc.mapColumnTmp;
140-
return result;
133+
return _comonExp.ExpressionLambdaToSql(retExp, new CommonExpression.ExpTSC { _tables = _tables, _tableRule = _select._tableRule, tbtype = SelectTableInfoType.From, isQuoteName = true, isDisableDiyParse = true, style = CommonExpression.ExpressionStyle.Where });
141134
}
142135
return null;
143136
}
@@ -238,7 +231,7 @@ public string InternalToSql(string field)
238231
public class SelectGroupingProvider<TKey, TValue> : SelectGroupingProvider, ISelectGrouping<TKey, TValue>
239232
{
240233
public SelectGroupingProvider(IFreeSql orm, Select0Provider select, ReadAnonymousTypeInfo map, string field, CommonExpression comonExp, List<SelectTableInfo> tables)
241-
:base(orm, select, map, field, comonExp, tables) { }
234+
: base(orm, select, map, field, comonExp, tables) { }
242235

243236
public string ToSql<TReturn>(Expression<Func<ISelectGroupingAggregate<TKey, TValue>, TReturn>> select, FieldAliasOptions fieldAlias = FieldAliasOptions.AsIndex)
244237
{
@@ -262,10 +255,10 @@ public ISelect<TDto> WithTempQuery<TDto>(Expression<Func<ISelectGroupingAggregat
262255
Select0Provider.WithTempQueryParser parser = null;
263256
_addFieldAlias = true; //解决:[Column(Name = "flevel") 与属性名不一致时,嵌套查询 bug
264257
_flagNestedFieldAlias = true;//解决重复设置别名问题:.GroupBy((l, p) => new { p.ID, ShopType=l.ShopType??0 }).WithTempQuery(a => new { Money = a.Sum(a.Value.Item1.Amount)* a.Key.ShopType })
265-
var old_field = _field;
258+
var old_field = _field;
266259
var fieldsb = new StringBuilder();
267260
if (_map.Childs.Any() == false) fieldsb.Append(", ").Append(_map.DbField).Append(_comonExp.EndsWithDbNestedField(_map.DbField, _map.DbNestedField) ? "" : _comonExp._common.FieldAsAlias(_map.DbNestedField));
268-
foreach (var child in _map.GetAllChilds())
261+
foreach (var child in _map.GetAllChilds())
269262
fieldsb.Append(", ").Append(child.DbField).Append(_comonExp.EndsWithDbNestedField(child.DbField, child.DbNestedField) ? "" : _comonExp._common.FieldAsAlias(child.DbNestedField));
270263
_field = fieldsb.ToString();
271264
fieldsb.Clear();
@@ -279,7 +272,7 @@ public ISelect<TDto> WithTempQuery<TDto>(Expression<Func<ISelectGroupingAggregat
279272
_field = old_field;
280273
_addFieldAlias = false;
281274
_flagNestedFieldAlias = false;
282-
}
275+
}
283276
var sql = $"\r\n{this.ToSql(parser._insideSelectList[0].InsideField)}";
284277
ret.WithSql(sql);
285278
ret._diymemexpWithTempQuery = parser;

0 commit comments

Comments
 (0)