public void EntityJoinFoSubquery() { using (var sqlLog = new SqlLogSpy()) using (var session = OpenSession()) { EntityComplex ej = null; EntityWithNoAssociation root = null; var subquery = "from EntityWithNoAssociation rootSub " + "inner join EntityComplex ejSub with rootSub.Complex1Id = ejSub.Id " + "where ejSub.Name = ej.Name"; var objs = session.CreateQuery( "select root, ej from EntityWithNoAssociation root " + "inner join EntityComplex ej with root.Complex1Id = ej.Id " + $"where exists ({subquery})") .UniqueResult <object[]>(); root = (EntityWithNoAssociation)objs[0]; ej = (EntityComplex)objs[1]; Assert.That(NHibernateUtil.IsInitialized(root), Is.True); Assert.That(ej, Is.Not.Null); Assert.That(NHibernateUtil.IsInitialized(ej), Is.True); Assert.That(sqlLog.Appender.GetEvents().Length, Is.EqualTo(1), "Only one SQL select is expected"); } }
protected override void OnSetUp() { using (var session = OpenSession()) using (var transaction = session.BeginTransaction()) { var parent = new EntityComplex { Name = "ComplexEnityParent", LazyProp = "SomeBigValue", SameTypeChild = new EntityComplex() { Name = "ComplexEntityChild" }, SameTypeChild2 = new EntityComplex() { Name = "ComplexEntityChild2" } }; _entityWithCompositeId = new EntityWithCompositeId { Key = new CompositeKey { Id1 = 1, Id2 = 2 }, Name = "Composite" }; session.Save(parent.SameTypeChild); session.Save(parent.SameTypeChild2); session.Save(parent); session.Save(_entityWithCompositeId); _entityWithCustomEntityName = new EntityCustomEntityName() { Name = "EntityCustomEntityName" }; session.Save(_customEntityName, _entityWithCustomEntityName); _noAssociation = new EntityWithNoAssociation() { Complex1Id = parent.Id, Complex2Id = parent.SameTypeChild.Id, Composite1Key1 = _entityWithCompositeId.Key.Id1, Composite1Key2 = _entityWithCompositeId.Key.Id2, CustomEntityNameId = _entityWithCustomEntityName.Id }; session.Save(_noAssociation); session.Flush(); transaction.Commit(); } }
public void EntityJoinNoTablesInWithClause() { using (var sqlLog = new SqlLogSpy()) using (var session = OpenSession()) { EntityComplex entityComplex = session .CreateQuery("select ex " + "from EntityWithNoAssociation root " + "left join EntityComplex ex with 1 = 2") .SetMaxResults(1) .UniqueResult <EntityComplex>(); Assert.That(entityComplex, Is.Null); Assert.That(sqlLog.Appender.GetEvents().Length, Is.EqualTo(1), "Only one SQL select is expected"); } }
public void WithClauseOnOtherAssociation() { using (var sqlLog = new SqlLogSpy()) using (var session = OpenSession()) { EntityComplex entityComplex = session .CreateQuery("select ex " + "from EntityComplex ex join fetch ex.SameTypeChild stc " + "join ex.SameTypeChild2 stc2 with stc.Version != stc2.Version ") .SetMaxResults(1) .UniqueResult <EntityComplex>(); Assert.That(entityComplex, Is.Null); Assert.That(sqlLog.Appender.GetEvents().Length, Is.EqualTo(1), "Only one SQL select is expected"); } }
public void CanJoinNotAssociatedEntity() { using (var sqlLog = new SqlLogSpy()) using (var session = OpenSession()) { EntityComplex entityComplex = session .CreateQuery("select ex " + "from EntityWithNoAssociation root " + "left join EntityComplex ex with root.Complex1Id = ex.Id") .SetMaxResults(1) .UniqueResult <EntityComplex>(); Assert.That(entityComplex, Is.Not.Null); Assert.That(NHibernateUtil.IsInitialized(entityComplex), Is.True); Assert.That(sqlLog.Appender.GetEvents().Length, Is.EqualTo(1), "Only one SQL select is expected"); } }
public void EntityJoinWithEntityAssociationComparison2ShouldAddJoin() { using (var sqlLog = new SqlLogSpy()) using (var session = OpenSession()) { EntityComplex entityComplex = session .CreateQuery( "select ex " + "from EntityComplex ex " + "inner join EntityComplex st with st.Version = ex.SameTypeChild.Version " ).SetMaxResults(1) .UniqueResult <EntityComplex>(); Assert.That(Regex.Matches(sqlLog.GetWholeLog(), "EntityComplex").Count, Is.EqualTo(3)); Assert.That(sqlLog.Appender.GetEvents().Length, Is.EqualTo(1), "Only one SQL select is expected"); } }
public async Task CanJoinNotAssociatedInterfaceFullNameAsync() { using (var sqlLog = new SqlLogSpy()) using (var session = OpenSession()) { EntityComplex entityComplex = await(session .CreateQuery("select ex " + "from EntityWithNoAssociation root " + $"left join {typeof(IEntityComplex).FullName} ex with root.Complex1Id = ex.Id") .SetMaxResults(1) .UniqueResultAsync <EntityComplex>()); Assert.That(entityComplex, Is.Not.Null); Assert.That(NHibernateUtil.IsInitialized(entityComplex), Is.True); Assert.That(sqlLog.Appender.GetEvents().Length, Is.EqualTo(1), "Only one SQL select is expected"); } }
public async Task EntityJoinWithEntityComparisonInWithClausShouldNotAddJoinAsync() { using (var sqlLog = new SqlLogSpy()) using (var session = OpenSession()) { EntityComplex entityComplex = await(session .CreateQuery( "select ex " + "from EntityComplex ex " + "inner join EntityComplex st with st = ex.SameTypeChild " ).SetMaxResults(1) .UniqueResultAsync <EntityComplex>()); Assert.That(Regex.Matches(sqlLog.GetWholeLog(), "EntityComplex").Count, Is.EqualTo(2)); Assert.That(sqlLog.Appender.GetEvents().Length, Is.EqualTo(1), "Only one SQL select is expected"); } }
public void NullLeftEntityJoin() { using (var sqlLog = new SqlLogSpy()) using (var session = OpenSession()) { var objs = session.CreateQuery( "select ejLeftNull, root " + "from EntityWithNoAssociation root " + "left join EntityComplex ejLeftNull with ejLeftNull.Id is null") .SetMaxResults(1).UniqueResult <object[]>(); EntityComplex ejLeftNull = (EntityComplex)objs[0]; EntityWithNoAssociation root = (EntityWithNoAssociation)objs[1]; Assert.That(root, Is.Not.Null, "root should not be null (looks like left join didn't work)"); Assert.That(NHibernateUtil.IsInitialized(root), Is.True); Assert.That(ejLeftNull, Is.Null); Assert.That(sqlLog.Appender.GetEvents().Length, Is.EqualTo(1), "Only one SQL select is expected"); } }
public async Task EntityJoinWithFetchesAsync() { using (var sqlLog = new SqlLogSpy()) using (var session = OpenSession()) { EntityComplex entityComplex = await(session .CreateQuery("select ex " + "from EntityWithNoAssociation root " + "left join EntityComplex ex with root.Complex1Id = ex.Id " + "inner join fetch ex.SameTypeChild st") .SetMaxResults(1) .UniqueResultAsync <EntityComplex>()); Assert.That(entityComplex, Is.Not.Null); Assert.That(NHibernateUtil.IsInitialized(entityComplex), Is.True); Assert.That(entityComplex.SameTypeChild, Is.Not.Null); Assert.That(NHibernateUtil.IsInitialized(entityComplex.SameTypeChild), Is.True); Assert.That(sqlLog.Appender.GetEvents().Length, Is.EqualTo(1), "Only one SQL select is expected"); } }