Skip to content

Commit 0549bce

Browse files
authored
Merge branch 'master' into nh3565
2 parents 4813b40 + 267e226 commit 0549bce

File tree

13 files changed

+129
-49
lines changed

13 files changed

+129
-49
lines changed

.config/dotnet-tools.json

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,12 @@
77
"commands": [
88
"async-generator"
99
]
10+
},
11+
"gitreleasemanager.tool": {
12+
"version": "0.11.0",
13+
"commands": [
14+
"dotnet-gitreleasemanager"
15+
]
1016
}
1117
}
12-
}
18+
}

.github/dependabot.yml

Lines changed: 0 additions & 21 deletions
This file was deleted.

.github/renovate.json

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
{
2+
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
3+
"extends": [
4+
"config:base"
5+
],
6+
"configMigration": true,
7+
"pruneStaleBranches": false,
8+
"automerge": true,
9+
"platformAutomerge": true,
10+
"labels": [
11+
"dependencies",
12+
"p: Lowest",
13+
"t: Task"
14+
],
15+
"packageRules": [
16+
{
17+
"matchPackagePrefixes": [
18+
"NUnit"
19+
],
20+
"groupName": "NUnit"
21+
},
22+
{
23+
"matchPackageNames": [
24+
"Microsoft.AspNetCore",
25+
"Microsoft.AspNetCore.Mvc",
26+
"Microsoft.AspNetCore.Mvc.Razor.ViewCompilation",
27+
"Microsoft.AspNetCore.StaticFiles"
28+
],
29+
"groupName": "Microsoft.AspNetCore 2.0",
30+
"allowedVersions": "~2.1.0"
31+
},
32+
{
33+
"matchPackagePrefixes": [
34+
"Oracle.ManagedDataAccess"
35+
],
36+
"groupName": "Oracle.ManagedDataAccess"
37+
}
38+
]
39+
}

ReleaseProcedure.txt

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,11 @@ These are the tasks typically needed to create an official NHibernate release.
33
* In GitHub, make sure no open issues have milestone set to the release
44
that is about to happen (as these will show in the milestone).
55

6-
* Create a draft release in Github with GitReleaseManager. If you have used
7-
the NHibernate build menu, it should be available in Tools\gitreleasemanager\x.x.x\
8-
(change x.x.x by its current version in tools).
9-
By example:
6+
* Restore local dotnet tools: `dotnet tool restore`
107

11-
Tools\gitreleasemanager\0.11.0\tools\GitReleaseManager.exe create -o nhibernate -r nhibernate-core -m 5.3 --token yourGitHubTokenWithRepoScope
8+
* Create a draft release in Github with GitReleaseManager. For example:
9+
10+
dotnet gitreleasemanager create -o nhibernate -r nhibernate-core -m 5.3 --token yourGitHubTokenWithRepoScope
1211

1312
(Adjust the -m milestone parameter above, and add "-c branchname" if
1413
releasing another branch than master)

Tools/packages.csproj

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
<ItemGroup>
1414
<PackageReference Include="vswhere" Version="2.1.4" />
1515
<PackageReference Include="NUnit.Console" Version="3.10.0" />
16-
<PackageReference Include="GitReleaseManager" Version="0.11.0" />
1716
</ItemGroup>
1817

1918
</Project>

src/NHibernate.Test.VisualBasic/NHibernate.Test.VisualBasic.vbproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.0.0" />
2929
<PackageReference Include="Microsoft.VisualBasic" Version="10.3.0" />
3030
<PackageReference Include="NUnit" Version="3.13.2" />
31-
<PackageReference Include="NUnit3TestAdapter" Version="4.1.0" />
31+
<PackageReference Include="NUnit3TestAdapter" Version="4.2.1" />
3232
</ItemGroup>
3333
<ItemGroup Condition="'$(TargetFramework)' == 'net6.0'">
3434
<PackageReference Include="NUnitLite" Version="3.13.2" />

src/NHibernate.Test/Async/Linq/ByMethod/GroupByTests.cs

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -851,6 +851,29 @@ public async Task GroupByComputedValueFromNestedObjectSelectAsync()
851851
Assert.AreEqual(2155, orderGroups.Sum(g => g.Count));
852852
}
853853

854+
[Test(Description="GH-3076")]
855+
public async Task NestedNonAggregateGroupByAsync()
856+
{
857+
var list = await (db.OrderLines
858+
.GroupBy(x => new { x.Order.OrderId, x.Product.ProductId }) // this works fine
859+
.GroupBy(x => x.Key.ProductId) // exception: "A recognition error occurred"
860+
.ToListAsync());
861+
862+
Assert.That(list, Has.Count.EqualTo(77));
863+
}
864+
865+
[Test(Description="GH-3076")]
866+
public async Task NestedNonAggregateGroupBySelectAsync()
867+
{
868+
var list = await (db.OrderLines
869+
.GroupBy(x => new { x.Order.OrderId, x.Product.ProductId }) // this works fine
870+
.GroupBy(x => x.Key.ProductId) // exception: "A recognition error occurred"
871+
.Select(x => new { ProductId = x })
872+
.ToListAsync());
873+
874+
Assert.That(list, Has.Count.EqualTo(77));
875+
}
876+
854877
private static void CheckGrouping<TKey, TElement>(IEnumerable<IGrouping<TKey, TElement>> groupedItems, Func<TElement, TKey> groupBy)
855878
{
856879
var used = new HashSet<object>();

src/NHibernate.Test/Linq/ByMethod/GroupByTests.cs

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -840,6 +840,29 @@ public void GroupByComputedValueFromNestedObjectSelect()
840840
Assert.AreEqual(2155, orderGroups.Sum(g => g.Count));
841841
}
842842

843+
[Test(Description="GH-3076")]
844+
public void NestedNonAggregateGroupBy()
845+
{
846+
var list = db.OrderLines
847+
.GroupBy(x => new { x.Order.OrderId, x.Product.ProductId }) // this works fine
848+
.GroupBy(x => x.Key.ProductId) // exception: "A recognition error occurred"
849+
.ToList();
850+
851+
Assert.That(list, Has.Count.EqualTo(77));
852+
}
853+
854+
[Test(Description="GH-3076")]
855+
public void NestedNonAggregateGroupBySelect()
856+
{
857+
var list = db.OrderLines
858+
.GroupBy(x => new { x.Order.OrderId, x.Product.ProductId }) // this works fine
859+
.GroupBy(x => x.Key.ProductId) // exception: "A recognition error occurred"
860+
.Select(x => new { ProductId = x })
861+
.ToList();
862+
863+
Assert.That(list, Has.Count.EqualTo(77));
864+
}
865+
843866
private static void CheckGrouping<TKey, TElement>(IEnumerable<IGrouping<TKey, TElement>> groupedItems, Func<TElement, TKey> groupBy)
844867
{
845868
var used = new HashSet<object>();

src/NHibernate.Test/NHibernate.Test.csproj

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@
6161
<PackageReference Include="System.Linq.Dynamic.Core" Version="1.2.12" />
6262
<PackageReference Include="NSubstitute" Version="4.2.2" />
6363
<PackageReference Include="NUnit" Version="3.13.2" />
64-
<PackageReference Include="NUnit3TestAdapter" Version="4.1.0" />
64+
<PackageReference Include="NUnit3TestAdapter" Version="4.2.1" />
6565
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.0.0" />
6666
<PackageReference Include="FirebirdSql.Data.FirebirdClient" Version="8.5.2" />
6767
<PackageReference Include="Npgsql" Version="5.0.11" />
@@ -74,14 +74,14 @@
7474
<Reference Include="System.Threading.Tasks" />
7575
<Reference Include="System.Data.OracleClient" />
7676
<PackageReference Include="Microsoft.SqlServer.Compact" Version="4.0.8876.1" />
77-
<PackageReference Include="Oracle.ManagedDataAccess" Version="19.12.0" />
77+
<PackageReference Include="Oracle.ManagedDataAccess" Version="21.6.1" />
7878
</ItemGroup>
7979
<ItemGroup Condition="'$(TargetFramework)'=='net6.0'">
8080
<PackageReference Include="Microsoft.AspNetCore.TestHost" Version="6.0.1" />
8181
<PackageReference Include="System.CodeDom" Version="4.7.0" />
8282
<PackageReference Include="System.Data.SqlClient" Version="4.8.3" />
8383
<PackageReference Include="System.Data.OracleClient" Version="1.0.8" />
84-
<PackageReference Include="Oracle.ManagedDataAccess.Core" Version="2.19.120" />
84+
<PackageReference Include="Oracle.ManagedDataAccess.Core" Version="3.21.61" />
8585
<PackageReference Include="System.Data.Odbc" Version="4.7.0" />
8686
<PackageReference Include="System.Net.NameResolution" Version="4.3.0" />
8787
<PackageReference Include="NUnitLite" Version="3.13.2" />

src/NHibernate.TestDatabaseSetup/NHibernate.TestDatabaseSetup.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
</ItemGroup>
1717
<ItemGroup>
1818
<PackageReference Include="NUnit" Version="3.13.2" />
19-
<PackageReference Include="NUnit3TestAdapter" Version="4.1.0" />
19+
<PackageReference Include="NUnit3TestAdapter" Version="4.2.1" />
2020
</ItemGroup>
2121
<ItemGroup Condition="'$(TargetFramework)' == 'net6.0'">
2222
<PackageReference Include="NUnitLite" Version="3.13.2" />

src/NHibernate/Linq/GroupBy/NonAggregatingGroupByRewriter.cs

Lines changed: 20 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System;
2+
using System.Linq;
23
using System.Linq.Expressions;
34
using NHibernate.Linq.ResultOperators;
45
using Remotion.Linq;
@@ -13,22 +14,23 @@ public static class NonAggregatingGroupByRewriter
1314
{
1415
public static void ReWrite(QueryModel queryModel)
1516
{
16-
if (queryModel.ResultOperators.Count == 1
17-
&& queryModel.ResultOperators[0] is GroupResultOperator
17+
if (queryModel.ResultOperators.Count > 0
18+
&& queryModel.ResultOperators.All(r => r is GroupResultOperator)
1819
&& IsNonAggregatingGroupBy(queryModel))
1920
{
20-
var resultOperator = (GroupResultOperator)queryModel.ResultOperators[0];
21-
queryModel.ResultOperators.Clear();
22-
queryModel.ResultOperators.Add(new NonAggregatingGroupBy(resultOperator));
21+
for (var i = 0; i < queryModel.ResultOperators.Count; i++)
22+
{
23+
var resultOperator = (GroupResultOperator) queryModel.ResultOperators[i];
24+
queryModel.ResultOperators[i] = new NonAggregatingGroupBy(resultOperator);
25+
}
26+
2327
return;
2428
}
2529

26-
var subQueryExpression = queryModel.MainFromClause.FromExpression as SubQueryExpression;
27-
28-
if ((subQueryExpression != null)
29-
&& (subQueryExpression.QueryModel.ResultOperators.Count == 1)
30-
&& (subQueryExpression.QueryModel.ResultOperators[0] is GroupResultOperator)
31-
&& (IsNonAggregatingGroupBy(queryModel)))
30+
if (queryModel.MainFromClause.FromExpression is SubQueryExpression subQueryExpression
31+
&& subQueryExpression.QueryModel.ResultOperators.Count > 0
32+
&& subQueryExpression.QueryModel.ResultOperators.All(r => r is GroupResultOperator)
33+
&& IsNonAggregatingGroupBy(queryModel))
3234
{
3335
FlattenSubQuery(subQueryExpression, queryModel);
3436
}
@@ -58,7 +60,12 @@ private static void FlattenSubQuery(SubQueryExpression subQueryExpression, Query
5860
throw new NotImplementedException();
5961
}
6062

61-
queryModel.ResultOperators.Add(new NonAggregatingGroupBy((GroupResultOperator) subQueryModel.ResultOperators[0]));
63+
for (var i = 0; i < subQueryModel.ResultOperators.Count; i++)
64+
{
65+
var resultOperator = new NonAggregatingGroupBy((GroupResultOperator) subQueryModel.ResultOperators[i]);
66+
queryModel.ResultOperators.Add(resultOperator);
67+
}
68+
6269
queryModel.ResultOperators.Add(clientSideSelect);
6370
}
6471

@@ -103,4 +110,4 @@ public ClientSideSelect2(LambdaExpression selectClause)
103110
SelectClause = selectClause;
104111
}
105112
}
106-
}
113+
}

src/NHibernate/Linq/ResultOperators/NonAggregatingGroupBy.cs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using Remotion.Linq.Clauses.ResultOperators;
2+
using Remotion.Linq.Clauses.StreamedData;
23

34
namespace NHibernate.Linq.ResultOperators
45
{
@@ -9,6 +10,9 @@ public NonAggregatingGroupBy(GroupResultOperator groupBy)
910
GroupBy = groupBy;
1011
}
1112

12-
public GroupResultOperator GroupBy { get; private set; }
13+
public GroupResultOperator GroupBy { get; }
14+
15+
public override IStreamedDataInfo GetOutputDataInfo(IStreamedDataInfo inputInfo) =>
16+
GroupBy.GetOutputDataInfo(inputInfo);
1317
}
14-
}
18+
}

src/NHibernate/Linq/Visitors/ResultOperatorProcessors/ProcessNonAggregatingGroupBy.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,15 @@
44
using NHibernate.Linq.ResultOperators;
55
using NHibernate.Util;
66
using Remotion.Linq.Clauses.ExpressionVisitors;
7+
using Remotion.Linq.Clauses.StreamedData;
78

89
namespace NHibernate.Linq.Visitors.ResultOperatorProcessors
910
{
1011
public class ProcessNonAggregatingGroupBy : IResultOperatorProcessor<NonAggregatingGroupBy>
1112
{
1213
public void Process(NonAggregatingGroupBy resultOperator, QueryModelVisitor queryModelVisitor, IntermediateHqlTree tree)
1314
{
14-
var selector = queryModelVisitor.Model.SelectClause.Selector;
15+
var selector = ((StreamedSequenceInfo) queryModelVisitor.PreviousEvaluationType).ItemExpression;
1516
var keySelector = resultOperator.GroupBy.KeySelector;
1617
var elementSelector = resultOperator.GroupBy.ElementSelector;
1718

0 commit comments

Comments
 (0)