Skip to content

Commit 3263760

Browse files
committed
Merge branch 'master' into pr/287
2 parents 9dc126c + 2e33783 commit 3263760

26 files changed

+2845
-0
lines changed

test/EFCore.Jet.FunctionalTests/EFCore.Jet.FunctionalTests.csproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,8 @@
7070
<None Include="..\xunit.runner.json">
7171
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
7272
</None>
73+
<None Include="Query\AdHocJsonQueryJetTest.cs" />
74+
<None Include="Query\AdHocJsonQueryJetTestBase.cs" />
7375
<None Remove="TestResults\**" />
7476
</ItemGroup>
7577

@@ -100,6 +102,8 @@
100102

101103
<ItemGroup>
102104
<Compile Remove="PropertyEntryJetTest.cs" />
105+
<Compile Remove="Query\AdHocJsonQueryJetTest.cs" />
106+
<Compile Remove="Query\AdHocJsonQueryJetTestBase.cs" />
103107
</ItemGroup>
104108

105109
</Project>
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
// Licensed to the .NET Foundation under one or more agreements.
2+
// The .NET Foundation licenses this file to you under the MIT license.
3+
4+
using EntityFrameworkCore.Jet.FunctionalTests.TestUtilities;
5+
using Microsoft.EntityFrameworkCore.Query.Relationships;
6+
using Microsoft.EntityFrameworkCore.TestUtilities;
7+
8+
namespace EntityFrameworkCore.Jet.FunctionalTests.Query.Relationships;
9+
10+
public class ComplexRelationshipsJetFixture : ComplexRelationshipsRelationalFixtureBase, ITestSqlLoggerFactory
11+
{
12+
protected override ITestStoreFactory TestStoreFactory
13+
=> JetTestStoreFactory.Instance;
14+
15+
public TestSqlLoggerFactory TestSqlLoggerFactory
16+
=> (TestSqlLoggerFactory)ListLoggerFactory;
17+
}
Lines changed: 153 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,153 @@
1+
// Licensed to the .NET Foundation under one or more agreements.
2+
// The .NET Foundation licenses this file to you under the MIT license.
3+
4+
using Microsoft.EntityFrameworkCore.Query.Relationships;
5+
using Microsoft.EntityFrameworkCore.Query.Relationships.Include;
6+
using Microsoft.EntityFrameworkCore.TestUtilities;
7+
using System.Threading.Tasks;
8+
using Xunit;
9+
using Xunit.Abstractions;
10+
11+
namespace EntityFrameworkCore.Jet.FunctionalTests.Query.Relationships.Include;
12+
13+
public class NavigationIncludeJetTest
14+
: NavigationIncludeRelationalTestBase<NavigationRelationshipsJetFixture>
15+
{
16+
public NavigationIncludeJetTest(NavigationRelationshipsJetFixture fixture, ITestOutputHelper testOutputHelper)
17+
: base(fixture)
18+
{
19+
Fixture.TestSqlLoggerFactory.Clear();
20+
Fixture.TestSqlLoggerFactory.SetTestOutputHelper(testOutputHelper);
21+
}
22+
23+
public override async Task Include_trunk_required(bool async)
24+
{
25+
await base.Include_trunk_required(async);
26+
27+
AssertSql(
28+
"""
29+
SELECT `r`.`Id`, `r`.`Name`, `r`.`OptionalReferenceTrunkId`, `r`.`RequiredReferenceTrunkId`, `t`.`Id`, `t`.`CollectionRootId`, `t`.`Name`, `t`.`OptionalReferenceBranchId`, `t`.`RequiredReferenceBranchId`
30+
FROM `RootEntities` AS `r`
31+
INNER JOIN `TrunkEntities` AS `t` ON `r`.`RequiredReferenceTrunkId` = `t`.`Id`
32+
""");
33+
}
34+
35+
public override async Task Include_trunk_optional(bool async)
36+
{
37+
await base.Include_trunk_optional(async);
38+
39+
AssertSql(
40+
"""
41+
SELECT `r`.`Id`, `r`.`Name`, `r`.`OptionalReferenceTrunkId`, `r`.`RequiredReferenceTrunkId`, `t`.`Id`, `t`.`CollectionRootId`, `t`.`Name`, `t`.`OptionalReferenceBranchId`, `t`.`RequiredReferenceBranchId`
42+
FROM `RootEntities` AS `r`
43+
LEFT JOIN `TrunkEntities` AS `t` ON `r`.`OptionalReferenceTrunkId` = `t`.`Id`
44+
""");
45+
}
46+
47+
public override async Task Include_trunk_collection(bool async)
48+
{
49+
await base.Include_trunk_collection(async);
50+
51+
AssertSql(
52+
"""
53+
SELECT `r`.`Id`, `r`.`Name`, `r`.`OptionalReferenceTrunkId`, `r`.`RequiredReferenceTrunkId`, `t`.`Id`, `t`.`CollectionRootId`, `t`.`Name`, `t`.`OptionalReferenceBranchId`, `t`.`RequiredReferenceBranchId`
54+
FROM `RootEntities` AS `r`
55+
LEFT JOIN `TrunkEntities` AS `t` ON `r`.`Id` = `t`.`CollectionRootId`
56+
ORDER BY `r`.`Id`
57+
""");
58+
}
59+
60+
public override async Task Include_trunk_required_optional_and_collection(bool async)
61+
{
62+
await base.Include_trunk_required_optional_and_collection(async);
63+
64+
AssertSql(
65+
"""
66+
SELECT `r`.`Id`, `r`.`Name`, `r`.`OptionalReferenceTrunkId`, `r`.`RequiredReferenceTrunkId`, `t`.`Id`, `t`.`CollectionRootId`, `t`.`Name`, `t`.`OptionalReferenceBranchId`, `t`.`RequiredReferenceBranchId`, `t0`.`Id`, `t0`.`CollectionRootId`, `t0`.`Name`, `t0`.`OptionalReferenceBranchId`, `t0`.`RequiredReferenceBranchId`, `t1`.`Id`, `t1`.`CollectionRootId`, `t1`.`Name`, `t1`.`OptionalReferenceBranchId`, `t1`.`RequiredReferenceBranchId`
67+
FROM ((`RootEntities` AS `r`
68+
INNER JOIN `TrunkEntities` AS `t` ON `r`.`RequiredReferenceTrunkId` = `t`.`Id`)
69+
LEFT JOIN `TrunkEntities` AS `t0` ON `r`.`OptionalReferenceTrunkId` = `t0`.`Id`)
70+
LEFT JOIN `TrunkEntities` AS `t1` ON `r`.`Id` = `t1`.`CollectionRootId`
71+
ORDER BY `r`.`Id`, `t`.`Id`, `t0`.`Id`
72+
""");
73+
}
74+
75+
public override async Task Include_branch_required_required(bool async)
76+
{
77+
await base.Include_branch_required_required(async);
78+
79+
AssertSql(
80+
"""
81+
SELECT `r`.`Id`, `r`.`Name`, `r`.`OptionalReferenceTrunkId`, `r`.`RequiredReferenceTrunkId`, `t`.`Id`, `t`.`CollectionRootId`, `t`.`Name`, `t`.`OptionalReferenceBranchId`, `t`.`RequiredReferenceBranchId`, `b`.`Id`, `b`.`CollectionTrunkId`, `b`.`Name`, `b`.`OptionalReferenceLeafId`, `b`.`RequiredReferenceLeafId`
82+
FROM (`RootEntities` AS `r`
83+
INNER JOIN `TrunkEntities` AS `t` ON `r`.`RequiredReferenceTrunkId` = `t`.`Id`)
84+
LEFT JOIN `BranchEntities` AS `b` ON `t`.`RequiredReferenceBranchId` = `b`.`Id`
85+
WHERE `t`.`RequiredReferenceBranchId` IS NOT NULL AND `b`.`Id` IS NOT NULL
86+
""");
87+
}
88+
89+
public override async Task Include_branch_required_collection(bool async)
90+
{
91+
await base.Include_branch_required_collection(async);
92+
93+
AssertSql(
94+
"""
95+
SELECT `r`.`Id`, `r`.`Name`, `r`.`OptionalReferenceTrunkId`, `r`.`RequiredReferenceTrunkId`, `t`.`Id`, `t`.`CollectionRootId`, `t`.`Name`, `t`.`OptionalReferenceBranchId`, `t`.`RequiredReferenceBranchId`, `b`.`Id`, `b`.`CollectionTrunkId`, `b`.`Name`, `b`.`OptionalReferenceLeafId`, `b`.`RequiredReferenceLeafId`
96+
FROM (`RootEntities` AS `r`
97+
INNER JOIN `TrunkEntities` AS `t` ON `r`.`RequiredReferenceTrunkId` = `t`.`Id`)
98+
LEFT JOIN `BranchEntities` AS `b` ON `t`.`Id` = `b`.`CollectionTrunkId`
99+
ORDER BY `r`.`Id`, `t`.`Id`
100+
""");
101+
}
102+
103+
public override async Task Include_branch_optional_optional(bool async)
104+
{
105+
await base.Include_branch_optional_optional(async);
106+
107+
AssertSql(
108+
"""
109+
SELECT `r`.`Id`, `r`.`Name`, `r`.`OptionalReferenceTrunkId`, `r`.`RequiredReferenceTrunkId`, `t`.`Id`, `t`.`CollectionRootId`, `t`.`Name`, `t`.`OptionalReferenceBranchId`, `t`.`RequiredReferenceBranchId`, `b`.`Id`, `b`.`CollectionTrunkId`, `b`.`Name`, `b`.`OptionalReferenceLeafId`, `b`.`RequiredReferenceLeafId`
110+
FROM (`RootEntities` AS `r`
111+
LEFT JOIN `TrunkEntities` AS `t` ON `r`.`OptionalReferenceTrunkId` = `t`.`Id`)
112+
LEFT JOIN `BranchEntities` AS `b` ON `t`.`OptionalReferenceBranchId` = `b`.`Id`
113+
""");
114+
}
115+
116+
public override async Task Include_branch_optional_collection(bool async)
117+
{
118+
await base.Include_branch_optional_collection(async);
119+
120+
AssertSql(
121+
"""
122+
SELECT `r`.`Id`, `r`.`Name`, `r`.`OptionalReferenceTrunkId`, `r`.`RequiredReferenceTrunkId`, `t`.`Id`, `t`.`CollectionRootId`, `t`.`Name`, `t`.`OptionalReferenceBranchId`, `t`.`RequiredReferenceBranchId`, `b`.`Id`, `b`.`CollectionTrunkId`, `b`.`Name`, `b`.`OptionalReferenceLeafId`, `b`.`RequiredReferenceLeafId`
123+
FROM (`RootEntities` AS `r`
124+
LEFT JOIN `TrunkEntities` AS `t` ON `r`.`OptionalReferenceTrunkId` = `t`.`Id`)
125+
LEFT JOIN `BranchEntities` AS `b` ON `t`.`Id` = `b`.`CollectionTrunkId`
126+
ORDER BY `r`.`Id`, `t`.`Id`
127+
""");
128+
}
129+
130+
public override async Task Include_branch_collection_collection(bool async)
131+
{
132+
await base.Include_branch_collection_collection(async);
133+
134+
AssertSql(
135+
"""
136+
SELECT `r`.`Id`, `r`.`Name`, `r`.`OptionalReferenceTrunkId`, `r`.`RequiredReferenceTrunkId`, `s`.`Id`, `s`.`CollectionRootId`, `s`.`Name`, `s`.`OptionalReferenceBranchId`, `s`.`RequiredReferenceBranchId`, `s`.`Id0`, `s`.`CollectionTrunkId`, `s`.`Name0`, `s`.`OptionalReferenceLeafId`, `s`.`RequiredReferenceLeafId`
137+
FROM `RootEntities` AS `r`
138+
LEFT JOIN (
139+
SELECT `t`.`Id`, `t`.`CollectionRootId`, `t`.`Name`, `t`.`OptionalReferenceBranchId`, `t`.`RequiredReferenceBranchId`, `b`.`Id` AS `Id0`, `b`.`CollectionTrunkId`, `b`.`Name` AS `Name0`, `b`.`OptionalReferenceLeafId`, `b`.`RequiredReferenceLeafId`
140+
FROM `TrunkEntities` AS `t`
141+
LEFT JOIN `BranchEntities` AS `b` ON `t`.`Id` = `b`.`CollectionTrunkId`
142+
) AS `s` ON `r`.`Id` = `s`.`CollectionRootId`
143+
ORDER BY `r`.`Id`, `s`.`Id`
144+
""");
145+
}
146+
147+
[ConditionalFact]
148+
public virtual void Check_all_tests_overridden()
149+
=> TestHelpers.AssertAllMethodsOverridden(GetType());
150+
151+
private void AssertSql(params string[] expected)
152+
=> Fixture.TestSqlLoggerFactory.AssertBaseline(expected);
153+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
// Licensed to the .NET Foundation under one or more agreements.
2+
// The .NET Foundation licenses this file to you under the MIT license.
3+
4+
using EntityFrameworkCore.Jet.FunctionalTests.TestUtilities;
5+
using Microsoft.EntityFrameworkCore.Query.Relationships;
6+
using Microsoft.EntityFrameworkCore.TestUtilities;
7+
8+
namespace EntityFrameworkCore.Jet.FunctionalTests.Query.Relationships;
9+
10+
public class NavigationRelationshipsJetFixture : NavigationRelationshipsRelationalFixtureBase, ITestSqlLoggerFactory
11+
{
12+
protected override ITestStoreFactory TestStoreFactory
13+
=> JetTestStoreFactory.Instance;
14+
15+
public TestSqlLoggerFactory TestSqlLoggerFactory
16+
=> (TestSqlLoggerFactory)ListLoggerFactory;
17+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
// Licensed to the .NET Foundation under one or more agreements.
2+
// The .NET Foundation licenses this file to you under the MIT license.
3+
4+
using EntityFrameworkCore.Jet.FunctionalTests.TestUtilities;
5+
using Microsoft.EntityFrameworkCore.Query.Relationships;
6+
using Microsoft.EntityFrameworkCore.TestUtilities;
7+
8+
namespace EntityFrameworkCore.Jet.FunctionalTests.Query.Relationships;
9+
10+
public class OwnedJsonRelationshipsJetFixture : OwnedJsonRelationshipsRelationalFixtureBase, ITestSqlLoggerFactory
11+
{
12+
protected override ITestStoreFactory TestStoreFactory
13+
=> JetTestStoreFactory.Instance;
14+
15+
public TestSqlLoggerFactory TestSqlLoggerFactory
16+
=> (TestSqlLoggerFactory)ListLoggerFactory;
17+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
// Licensed to the .NET Foundation under one or more agreements.
2+
// The .NET Foundation licenses this file to you under the MIT license.
3+
4+
using EntityFrameworkCore.Jet.FunctionalTests.TestUtilities;
5+
using Microsoft.EntityFrameworkCore;
6+
using Microsoft.EntityFrameworkCore.Query.Relationships;
7+
using Microsoft.EntityFrameworkCore.TestModels.RelationshipsModel;
8+
using Microsoft.EntityFrameworkCore.TestUtilities;
9+
10+
namespace EntityFrameworkCore.Jet.FunctionalTests.Query.Relationships;
11+
12+
public class OwnedJsonTypeRelationshipsJetFixture : OwnedJsonRelationshipsRelationalFixtureBase, ITestSqlLoggerFactory
13+
{
14+
protected override string StoreName => "JsonTypeRelationshipsQueryTest";
15+
16+
protected override ITestStoreFactory TestStoreFactory
17+
=> JetTestStoreFactory.Instance;
18+
19+
public TestSqlLoggerFactory TestSqlLoggerFactory
20+
=> (TestSqlLoggerFactory)ListLoggerFactory;
21+
22+
protected override void OnModelCreating(ModelBuilder modelBuilder, DbContext context)
23+
{
24+
base.OnModelCreating(modelBuilder, context);
25+
26+
modelBuilder.Entity<RelationshipsRootEntity>().OwnsOne(x => x.RequiredReferenceTrunk).HasColumnType("json");
27+
modelBuilder.Entity<RelationshipsRootEntity>().OwnsOne(x => x.OptionalReferenceTrunk).HasColumnType("json");
28+
modelBuilder.Entity<RelationshipsRootEntity>().OwnsMany(x => x.CollectionTrunk).HasColumnType("json");
29+
}
30+
31+
public override DbContextOptionsBuilder AddOptions(DbContextOptionsBuilder builder)
32+
=> base.AddOptions(builder);
33+
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
// Licensed to the .NET Foundation under one or more agreements.
2+
// The .NET Foundation licenses this file to you under the MIT license.
3+
4+
using EntityFrameworkCore.Jet.FunctionalTests.TestUtilities;
5+
using Microsoft.EntityFrameworkCore;
6+
using Microsoft.EntityFrameworkCore.Query.Relationships;
7+
using Microsoft.EntityFrameworkCore.TestUtilities;
8+
using System;
9+
10+
namespace EntityFrameworkCore.Jet.FunctionalTests.Query.Relationships;
11+
12+
public class OwnedRelationshipsJetFixture : OwnedRelationshipsRelationalFixtureBase, ITestSqlLoggerFactory
13+
{
14+
protected override ITestStoreFactory TestStoreFactory
15+
=> JetTestStoreFactory.Instance;
16+
17+
public TestSqlLoggerFactory TestSqlLoggerFactory
18+
=> (TestSqlLoggerFactory)ListLoggerFactory;
19+
20+
protected override void OnModelCreating(ModelBuilder modelBuilder, DbContext context)
21+
{
22+
base.OnModelCreating(modelBuilder, context);
23+
foreach (var entity in modelBuilder.Model.GetEntityTypes())
24+
{
25+
if (entity.GetTableName() == "Root_RequiredReferenceTrunk_RequiredReferenceBranch_CollectionLeaf")
26+
{
27+
entity.SetTableName("Root_RequiredReferenceTrunk_RequiredReferenceBranch_CollB7BC1840");
28+
}
29+
if (entity.GetTableName() == "Root_RequiredReferenceTrunk_OptionalReferenceBranch_CollectionLeaf")
30+
{
31+
entity.SetTableName("Root_RequiredReferenceTrunk_OptionalReferenceBranch_CollB7BC1840");
32+
}
33+
if (entity.GetTableName() == "Root_OptionalReferenceTrunk_RequiredReferenceBranch_CollectionLeaf")
34+
{
35+
entity.SetTableName("Root_OptionalReferenceTrunk_RequiredReferenceBranch_CollB7BC1840");
36+
}
37+
if (entity.GetTableName() == "Root_OptionalReferenceTrunk_OptionalReferenceBranch_CollectionLeaf")
38+
{
39+
entity.SetTableName("Root_OptionalReferenceTrunk_OptionalReferenceBranch_CollB7BC1840");
40+
}
41+
if (entity.GetTableName() == "RelationshipsBranchEntityRelationshipsTrunkEntityRelationshipsR~")
42+
{
43+
entity.SetTableName("RelBranchEntityRelationshipsTrunkEntityRelationshipsR");
44+
}
45+
}
46+
}
47+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
// Licensed to the .NET Foundation under one or more agreements.
2+
// The .NET Foundation licenses this file to you under the MIT license.
3+
4+
using EntityFrameworkCore.Jet.FunctionalTests.TestUtilities;
5+
using Microsoft.EntityFrameworkCore.Query.Relationships;
6+
using Microsoft.EntityFrameworkCore.TestUtilities;
7+
8+
namespace EntityFrameworkCore.Jet.FunctionalTests.Query.Relationships;
9+
10+
public class OwnedTableSplittingRelationshipsJetFixture : OwnedTableSplittingRelationshipsRelationalFixtureBase, ITestSqlLoggerFactory
11+
{
12+
protected override ITestStoreFactory TestStoreFactory
13+
=> JetTestStoreFactory.Instance;
14+
15+
public TestSqlLoggerFactory TestSqlLoggerFactory
16+
=> (TestSqlLoggerFactory)ListLoggerFactory;
17+
}

0 commit comments

Comments
 (0)