Skip to content

Commit efa2919

Browse files
committed
Add support for polymorphic queries, coalesce and conditional expressions
1 parent 439f7dc commit efa2919

File tree

2 files changed

+302
-34
lines changed

2 files changed

+302
-34
lines changed

src/NHibernate.Test/Linq/TryGetMappedTests.cs

Lines changed: 85 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -580,14 +580,82 @@ public void CastAnyPropertyTest()
580580
public void QueryUnmppedEntityTest()
581581
{
582582
var query = session.Query<IEntity<int>>().Select(o => o.Id);
583-
AssertFalse(query, null, null, o => o == null);
583+
AssertTrueNotNull(query, typeof(User).FullName, "Id", o => o is Int32Type);
584584
}
585585

586586
[Test]
587-
public void NotSupportedConditionalExpressionTest()
587+
public void ConditionalExpressionTest()
588588
{
589589
var query = db.Users.Select(o => (o.Name == "Test" ? o.RegisteredAt : o.LastLoginDate));
590-
AssertFalse(query, false, null, null, o => o == null);
590+
AssertTrue(query, false, typeof(User).FullName, "RegisteredAt", o => o is DateTimeType);
591+
}
592+
593+
[Test]
594+
public void ConditionalIfFalseExpressionTest()
595+
{
596+
var query = db.Users.Select(o => (o.Name == "Test" ? DateTime.Today : o.LastLoginDate));
597+
AssertTrue(query, false, typeof(User).FullName, "LastLoginDate", o => o is DateTimeType);
598+
}
599+
600+
[Test]
601+
public void ConditionalMemberExpressionTest()
602+
{
603+
var query = db.Users.Select(o => (o.Name == "Test" ? o.NotMappedRole : o.Role).IsActive);
604+
AssertTrue(query, false, typeof(Role).FullName, "IsActive", o => o is BooleanType);
605+
}
606+
607+
[Test]
608+
public void ConditionalNestedExpressionTest()
609+
{
610+
var query = db.Users.Select(o => (o.Name == "Test" ? o.Component.OtherComponent.OtherProperty1 : o.Component.Property1));
611+
AssertTrue(
612+
query,
613+
false,
614+
typeof(User).FullName,
615+
"Component.OtherComponent.OtherProperty1",
616+
o => o is AnsiStringType,
617+
o => o?.Name == "component[OtherProperty1]");
618+
}
619+
620+
[Test]
621+
public void CoalesceExpressionTest()
622+
{
623+
var query = db.Users.Select(o => o.LastLoginDate ?? o.RegisteredAt);
624+
AssertTrue(query, false, typeof(User).FullName, "LastLoginDate", o => o is DateTimeType);
625+
}
626+
627+
[Test]
628+
public void CoalesceRightExpressionTest()
629+
{
630+
var query = db.Users.Select(o => ((DateTime?) DateTime.Now) ?? o.RegisteredAt);
631+
AssertTrue(query, false, typeof(User).FullName, "RegisteredAt", o => o is DateTimeType);
632+
}
633+
634+
[Test]
635+
public void CoalesceMemberExpressionTest()
636+
{
637+
var query = db.Users.Select(o => (o.NotMappedRole ?? o.Role).IsActive);
638+
AssertTrue(query, false, typeof(Role).FullName, "IsActive", o => o is BooleanType);
639+
}
640+
641+
[Test]
642+
public void CoalesceNestedExpressionTest()
643+
{
644+
var query = db.Users.Select(o => o.Component.OtherComponent.OtherProperty1 ?? o.Component.Property1);
645+
AssertTrue(
646+
query,
647+
false,
648+
typeof(User).FullName,
649+
"Component.OtherComponent.OtherProperty1",
650+
o => o is AnsiStringType,
651+
o => o?.Name == "component[OtherProperty1]");
652+
}
653+
654+
[Test]
655+
public void CoalesceConditionalMemberExpressionTest()
656+
{
657+
var query = db.Users.Select(o => (o.Name == "Test" ? o.NotMappedRole : (o.NotMappedRole ?? new Role() ?? o.Role)).IsActive);
658+
AssertTrue(query, false, typeof(Role).FullName, "IsActive", o => o is BooleanType);
591659
}
592660

593661
[Test]
@@ -615,6 +683,20 @@ public void NotNullComponentPropertyTest()
615683
o => o?.Name == "component[FirstName,LastName]");
616684
}
617685

686+
[Test]
687+
public void NotRelatedTypeTest()
688+
{
689+
var query = session.Query<Expression>().Select(o => o.CanReduce);
690+
AssertFalse(query, null, null, o => o == null);
691+
}
692+
693+
[Test]
694+
public void NotNhQueryableTest()
695+
{
696+
var query = new List<User>().AsQueryable().Select(o => o.Name);
697+
AssertFalse(query, false, null, null, o => o == null);
698+
}
699+
618700
private void AssertFalse(
619701
IQueryable query,
620702
string expectedEntityName,

0 commit comments

Comments
 (0)