2
2
using System . Collections . Generic ;
3
3
using System . Linq ;
4
4
using System . Linq . Expressions ;
5
- using NHibernate . Linq . Clauses ;
6
5
using NHibernate . Linq . ReWriters ;
7
6
using NHibernate . Linq . Visitors ;
8
7
using Remotion . Linq ;
@@ -43,29 +42,26 @@ public static class AggregatingGroupByRewriter
43
42
typeof ( CacheableResultOperator )
44
43
} ;
45
44
46
- public static void ReWrite ( QueryModel queryModel )
45
+ public static void ReWrite ( QueryModel queryModel , VisitorParameters parameters )
47
46
{
48
- var subQueryExpression = queryModel . MainFromClause . FromExpression as SubQueryExpression ;
49
-
50
- if ( subQueryExpression != null )
47
+ if ( queryModel . MainFromClause . FromExpression is SubQueryExpression subQueryExpression )
51
48
{
52
49
var operators = subQueryExpression . QueryModel . ResultOperators
53
50
. Where ( x => ! QueryReferenceExpressionFlattener . FlattenableResultOperators . Contains ( x . GetType ( ) ) )
54
51
. ToArray ( ) ;
55
52
56
53
if ( operators . Length == 1 )
57
54
{
58
- var groupBy = operators [ 0 ] as GroupResultOperator ;
59
- if ( groupBy != null )
55
+ if ( operators [ 0 ] is GroupResultOperator groupBy )
60
56
{
61
- FlattenSubQuery ( queryModel , subQueryExpression . QueryModel , groupBy ) ;
57
+ FlattenSubQuery ( queryModel , subQueryExpression . QueryModel , groupBy , parameters ) ;
62
58
RemoveCostantGroupByKeys ( queryModel , groupBy ) ;
63
59
}
64
60
}
65
61
}
66
62
}
67
63
68
- private static void FlattenSubQuery ( QueryModel queryModel , QueryModel subQueryModel , GroupResultOperator groupBy )
64
+ private static void FlattenSubQuery ( QueryModel queryModel , QueryModel subQueryModel , GroupResultOperator groupBy , VisitorParameters parameters )
69
65
{
70
66
foreach ( var resultOperator in queryModel . ResultOperators . Where ( resultOperator => ! AcceptableOuterResultOperators . Contains ( resultOperator . GetType ( ) ) ) )
71
67
{
@@ -81,11 +77,9 @@ private static void FlattenSubQuery(QueryModel queryModel, QueryModel subQueryMo
81
77
clause . TransformExpressions ( s => GroupBySelectClauseRewriter . ReWrite ( s , groupBy , subQueryModel ) ) ;
82
78
83
79
//all outer where clauses actually are having clauses
84
- var whereClause = clause as WhereClause ;
85
- if ( whereClause != null )
80
+ if ( clause is WhereClause whereClause )
86
81
{
87
- queryModel . BodyClauses . RemoveAt ( i ) ;
88
- queryModel . BodyClauses . Insert ( i , new NhHavingClause ( whereClause . Predicate ) ) ;
82
+ parameters . AddHavingClause ( whereClause ) ;
89
83
}
90
84
}
91
85
0 commit comments