Exemple #1
0
        public void CanRightOuterJoinNonCollection()
        {
            Setting setting = null;

            IDetachedFlowQuery <UserEntity> query = Query <UserEntity>()
                                                    .Detached()
                                                    .RightOuter.Join(x => x.Setting, () => setting)
                                                    .Select(u => setting.Id);

            FlowQuerySelection <Setting> settings = Query <Setting>()
                                                    .Where(s => s.Id, FqIs.In(query))
                                                    .Select();

            Assert.That(settings.Count(), Is.EqualTo(6));
        }
        public void WhereWithCriterions()
        {
            IDetachedFlowQuery <UserEntity> query = Query <UserEntity>()
                                                    .Detached()
                                                    .Where(Restrictions.Eq("IsOnline", true), Restrictions.Like("Firstname", "%kl%"))
                                                    .Select(x => x.Id);

            FlowQuerySelection <UserEntity> users = Query <UserEntity>()
                                                    .Where(u => u.Id, FqIs.In(query))
                                                    .Select();

            Assert.That(users.Count(), Is.EqualTo(1));
            Assert.That(users.Single().IsOnline);
            Assert.That(users.Single().Firstname.Contains("kl"));
        }
        public void DoesNotSkipOrderByStatementsIfNecessaryInSubqueryTest1()
        {
            IDetachedFlowQuery <UserEntity> detached = Query <UserEntity>()
                                                       .Detached()
                                                       .Skip(1)
                                                       .OrderBy(x => x.IsOnline)
                                                       .Select(x => x.Id);

            FlowQuerySelection <UserEntity> users = Query <UserEntity>()
                                                    .Where(x => x.Id, FqIs.In(detached))
                                                    .Select();

            Assert.That(users.Count(), Is.EqualTo(3));
            Assert.That(users.All(x => x.IsOnline));
        }
Exemple #4
0
        public void CanMakeDistinctDetachedQueryIndistinct()
        {
            IDetachedFlowQuery <UserEntity> detachedCount = Query <UserEntity>()
                                                            .Detached()
                                                            .Distinct()
                                                            .Indistinct()
                                                            .Count(u => u.IsOnline);

            FlowQuerySelection <UserEntity> query = Query <UserEntity>()
                                                    .Where(x => x.Id, FqIs.In(detachedCount))
                                                    .Select();

            Assert.That(query.Count(), Is.EqualTo(1));
            Assert.That(query.First().Id, Is.EqualTo(4));
        }
        public void CanOrderAscending()
        {
            IDetachedFlowQuery <UserEntity> id = DetachedQuery <UserEntity>()
                                                 .OrderBy(x => x.Firstname)
                                                 .Take(1)
                                                 .Skip(1)
                                                 .Select(x => x.Id);

            FlowQuerySelection <UserEntity> users = Query <UserEntity>()
                                                    .Where(x => x.Id, FqIs.EqualTo(id))
                                                    .Select();

            Assert.That(users.Count(), Is.EqualTo(1));
            Assert.That(users.ElementAt(0).Firstname, Is.EqualTo("Lars"));
        }
Exemple #6
0
        public void CanInnerJoinWithJoinUsingString()
        {
            UserGroupLinkEntity link = null;

            IDetachedFlowQuery <UserEntity> query = DetachedQuery <UserEntity>()
                                                    .Inner.Join("Groups", () => link)
                                                    .Distinct()
                                                    .Select(u => link.Group.Id);

            FlowQuerySelection <GroupEntity> groups = Query <GroupEntity>()
                                                      .Where(g => g.Id, FqIs.In(query))
                                                      .Select();

            Assert.That(groups.Count(), Is.EqualTo(2));
        }
Exemple #7
0
        public void CanRestrictOnNotExistsNonGreedily()
        {
            UserEntity user = null;

            IDetachedFlowQuery <UserEntity> subquery = DetachedQuery <UserEntity>()
                                                       .SetRootAlias(() => user)
                                                       .And(x => x.IsOnline && x.Id == user.Id)
                                                       .Select(x => x.Id);

            FlowQuerySelection <UserEntity> users = Session.FlowQuery(() => user)
                                                    .And(subquery, FqIs.Empty())
                                                    .Select();

            Assert.That(users.Count(), Is.EqualTo(1));
        }
        public void CorrelatedSubQueriesWorks()
        {
            UserEntity user = null;

            IDetachedFlowQuery <UserEntity> query = Query <UserEntity>()
                                                    .Detached()
                                                    .SetRootAlias(() => user)
                                                    .Where(x => x.Firstname == user.Firstname)
                                                    .Select(x => x.Id);

            FlowQuerySelection <UserEntity> users = Session.FlowQuery(() => user)
                                                    .Where(x => x.Id, FqIs.In(query))
                                                    .Select();

            Assert.That(users.Count(), Is.EqualTo(4));
        }
Exemple #9
0
        public void CanRightOuterJoinWithProvidedRevealConvention()
        {
            UserGroupLinkEntity link  = null;
            GroupEntity         group = null;

            IDetachedFlowQuery <UserEntity> query = DetachedQuery <UserEntity>()
                                                    .RightOuter.Join(u => u.Groups, () => link)
                                                    .RightOuter.Join(u => link.Group, () => group, new CustomConvention(x => x))
                                                    .Select(u => group.Id);

            FlowQuerySelection <GroupEntity> groups = Query <GroupEntity>()
                                                      .Where(g => g.Id, FqIs.In(query))
                                                      .Select();

            Assert.That(groups.Count(), Is.EqualTo(2));
        }
        public virtual void TestReuseAsSubqueryForRootQuery()
        {
            IImmediateFlowQuery <UserEntity> query = Query <UserEntity>()
                                                     .Where(x => x.IsOnline);

            IDetachedFlowQuery <UserEntity> detached = query
                                                       .Detached()
                                                       .Where(x => x.Lastname.StartsWith("K"))
                                                       .Select(x => x.Id);

            query.Where(x => x.Id, FqIs.In(detached));

            FlowQuerySelection <UserEntity> users = query.Select();

            Assert.That(users.Count(), Is.EqualTo(1));
        }
Exemple #11
0
        public void CanInnerJoinOnInnerJoinedEntity()
        {
            UserGroupLinkEntity link  = null;
            GroupEntity         group = null;

            IDetachedFlowQuery <UserEntity> query = DetachedQuery <UserEntity>()
                                                    .Inner.Join(u => u.Groups, () => link)
                                                    .Inner.Join(u => link.Group, () => group)
                                                    .Distinct().Select(u => group.Name);

            FlowQuerySelection <GroupEntity> groups = Query <GroupEntity>()
                                                      .Where(g => g.Name, FqIs.In(query))
                                                      .Select();

            Assert.That(groups.Count(), Is.EqualTo(2));
        }
Exemple #12
0
        public void AndBetweenWithIsHelper()
        {
            IDetachedFlowQuery <UserEntity> query = DetachedQuery <UserEntity>()
                                                    .And(u => u.Id, FqIs.Between(2, 3))
                                                    .Select(u => u.Id);

            FlowQuerySelection <UserEntity> users = Query <UserEntity>()
                                                    .Where(u => u.Id, FqIs.In(query))
                                                    .Select();

            Assert.That(users.Count(), Is.EqualTo(2));

            foreach (UserEntity user in users)
            {
                Assert.That(user.Id, Is.InRange(2, 3));
            }
        }
Exemple #13
0
        public void AndLessThanOrEqualTo()
        {
            IDetachedFlowQuery <UserEntity> query = DetachedQuery <UserEntity>()
                                                    .And(u => u.Id <= 4)
                                                    .Select(u => u.Id);

            FlowQuerySelection <UserEntity> users = Query <UserEntity>()
                                                    .Where(u => u.Id, FqIs.In(query))
                                                    .Select();

            Assert.That(users.Count(), Is.EqualTo(4));

            foreach (UserEntity user in users)
            {
                Assert.That(user.Id, Is.LessThanOrEqualTo(4));
            }
        }
Exemple #14
0
        public void AndInWithIsHelper()
        {
            IDetachedFlowQuery <UserEntity> query = DetachedQuery <UserEntity>()
                                                    .And(u => u.Id, FqIs.In(1, 3))
                                                    .Select(u => u.Id);

            FlowQuerySelection <UserEntity> users = Query <UserEntity>()
                                                    .Where(u => u.Id, FqIs.In(query))
                                                    .Select();

            Assert.That(users.Count(), Is.EqualTo(2));

            foreach (UserEntity user in users)
            {
                Assert.That(new long[] { 1, 3 }, Contains.Item(user.Id));
            }
        }
Exemple #15
0
        public void AndWithStringAndIsHelper()
        {
            IDetachedFlowQuery <UserEntity> query = DetachedQuery <UserEntity>()
                                                    .And("IsOnline", FqIs.EqualTo(true))
                                                    .Select(u => u.Id);

            FlowQuerySelection <UserEntity> users = Query <UserEntity>()
                                                    .Where(u => u.Id, FqIs.In(query))
                                                    .Select();

            Assert.That(users.Count(), Is.EqualTo(3));

            foreach (UserEntity u in users)
            {
                Assert.That(u.IsOnline);
            }
        }
        public void WhereWithNegatedIsExpression()
        {
            IDetachedFlowQuery <UserEntity> query = DetachedQuery <UserEntity>()
                                                    .Where(u => u.Firstname, FqIs.Not.EqualTo("Niklas"))
                                                    .Select(x => x.Id);

            FlowQuerySelection <UserEntity> users = Query <UserEntity>()
                                                    .Where(u => u.Id, FqIs.In(query))
                                                    .Select();

            Assert.That(users.Count(), Is.EqualTo(3));

            foreach (UserEntity user in users)
            {
                Assert.That(user.Firstname, Is.Not.EqualTo("Niklas"));
            }
        }
Exemple #17
0
        public void AndGreaterThan()
        {
            IDetachedFlowQuery <UserEntity> query = DetachedQuery <UserEntity>()
                                                    .And(u => u.Id > 1)
                                                    .Select(u => u.Id);

            FlowQuerySelection <UserEntity> users = Query <UserEntity>()
                                                    .Where(u => u.Id, FqIs.In(query))
                                                    .Select();

            Assert.That(users.Count(), Is.EqualTo(3));

            foreach (UserEntity user in users)
            {
                Assert.That(user.Id, Is.GreaterThan(1));
            }
        }
        public void Where()
        {
            IDetachedFlowQuery <UserEntity> query = DetachedQuery <UserEntity>()
                                                    .Where(u => u.IsOnline)
                                                    .Select(u => u.Id);

            FlowQuerySelection <UserEntity> users = Query <UserEntity>()
                                                    .Where(u => u.Id, FqIs.In(query))
                                                    .Select();

            Assert.That(users.Count(), Is.EqualTo(3));

            foreach (UserEntity user in users)
            {
                Assert.That(user.IsOnline, Is.True);
            }
        }
Exemple #19
0
        public void CanInnerJoinWithJoinInCombinationWithRevealFramework()
        {
            UserGroupLinkEntity link = null;

            IRevealer <UserEntity> r = Reveal.CreateRevealer <UserEntity>(new CustomConvention(s => s));

            IDetachedFlowQuery <UserEntity> query = DetachedQuery <UserEntity>()
                                                    .Inner.Join(r.Reveal(x => x.Groups), () => link)
                                                    .Distinct()
                                                    .Select(u => link.Group.Id);

            FlowQuerySelection <GroupEntity> groups = Query <GroupEntity>()
                                                      .Where(g => g.Id, FqIs.In(query))
                                                      .Select();

            Assert.That(groups.Count(), Is.EqualTo(2));
        }
Exemple #20
0
        public void AndWithNotNullCheck()
        {
            IDetachedFlowQuery <UserEntity> query = DetachedQuery <UserEntity>()
                                                    .And(u => u.LastLoggedInStamp != null)
                                                    .Select(u => u.Id);

            FlowQuerySelection <UserEntity> users = Query <UserEntity>()
                                                    .Where(u => u.Id, FqIs.In(query))
                                                    .Select();

            Assert.That(users.Count(), Is.EqualTo(3));

            foreach (UserEntity user in users)
            {
                Assert.That(user.LastLoggedInStamp, Is.Not.Null);
            }
        }
        public void WhereInSubqueryWithIsHelper()
        {
            IDetachedFlowQuery <UserEntity> subquery = DetachedQuery <UserEntity>()
                                                       .Where(x => x.Id == 1 || x.Id == 4)
                                                       .Select(x => x.Id);

            FlowQuerySelection <UserEntity> users = Query <UserEntity>()
                                                    .Where(u => u.Id, FqIs.In(subquery))
                                                    .Select();

            Assert.That(users.Count(), Is.EqualTo(2));

            foreach (UserEntity user in users)
            {
                Assert.That(new long[] { 1, 4 }, Contains.Item(user.Id));
            }
        }
Exemple #22
0
        public void AndWithMultipleBinaryExpressions()
        {
            // ReSharper disable once RedundantBoolCompare
            IDetachedFlowQuery <UserEntity> query = DetachedQuery <UserEntity>()
                                                    .And(u => (u.Id == 1 || u.Id > 3) && u.IsOnline == true)
                                                    .Select(u => u.Id);

            FlowQuerySelection <UserEntity> users = Query <UserEntity>()
                                                    .Where(u => u.Id, FqIs.In(query))
                                                    .Select();

            Assert.That(users.Count(), Is.EqualTo(1));

            foreach (UserEntity user in users)
            {
                Assert.That((user.Id == 1 || user.Id > 3) && user.IsOnline);
            }
        }
Exemple #23
0
        public void AndWithDoubleNegation()
        {
            // ReSharper disable once NegativeEqualityExpression, DoubleNegationOperator, RedundantBoolCompare
            IDetachedFlowQuery <UserEntity> query = DetachedQuery <UserEntity>()
                                                    .And(u => !!(u.IsOnline == true))
                                                    .Select(u => u.Id);

            FlowQuerySelection <UserEntity> users = Query <UserEntity>()
                                                    .Where(u => u.Id, FqIs.In(query))
                                                    .Select();

            Assert.That(users.Count(), Is.EqualTo(3));

            foreach (UserEntity user in users)
            {
                Assert.That(user.IsOnline, Is.True);
            }
        }
Exemple #24
0
        public void DelayedCanAnyWithSubquery()
        {
            IDetachedFlowQuery <UserEntity> subquery = DetachedQuery <UserEntity>()
                                                       .Select(x => x.Id);

            Lazy <bool> any = Query <UserEntity>()
                              .Delayed()
                              .Any(x => x.Id, FqIs.In(subquery));

            var sessionImpl = (ISessionImplementor)Session;

            int count = 0;

            Assert.That(() => count = sessionImpl.FutureCriteriaBatch.Results.Count, Throws.Nothing);

            Assert.That(count, Is.EqualTo(1));

            Assert.That(any.Value, Is.True);
        }
        public virtual void TestDetachedCopy()
        {
            IDetachedFlowQuery <UserEntity> subquery1 = Query <UserEntity>()
                                                        .Detached()
                                                        .Select(x => x.Id);

            IDetachedFlowQuery <UserEntity> subquery2 = subquery1.Copy()
                                                        .Where(x => x.IsOnline);

            FlowQuerySelection <UserEntity> users1 = Query <UserEntity>()
                                                     .Where(x => x.Id, FqIs.In(subquery1))
                                                     .Select();

            FlowQuerySelection <UserEntity> users2 = Query <UserEntity>()
                                                     .Where(x => x.Id, FqIs.In(subquery2))
                                                     .Select();

            Assert.That(users1.Count(), Is.EqualTo(4));
            Assert.That(users2.Count(), Is.EqualTo(3));
        }
        public void WhereWithExclusiveOr()
        {
            IDetachedFlowQuery <UserEntity> query = DetachedQuery <UserEntity>()
                                                    .Where(u => u.IsOnline ^ (u.Firstname == "Niklas"))
                                                    .Select(x => x.Id);

            FlowQuerySelection <UserEntity> users = Query <UserEntity>()
                                                    .Where(u => u.Id, FqIs.In(query))
                                                    .Select();

            Assert.That(users.Count(), Is.EqualTo(2));

            foreach (UserEntity u in users)
            {
                if (u.IsOnline)
                {
                    Assert.That(u.Firstname, Is.Not.EqualTo("Niklas"));
                }
            }
        }
Exemple #27
0
        public void CanRightOuterJoinWithRevealAndLambdas()
        {
            Reveal.SetDefaultConvention(x => x);

            UserGroupLinkEntity link  = null;
            GroupEntity         group = null;

            IDetachedFlowQuery <UserEntity> query = DetachedQuery <UserEntity>()
                                                    .RightOuter.Join(u => u.Groups, () => link)
                                                    .RightOuter.Join(u => link.Group, () => group)
                                                    .Select(u => group.Id);

            FlowQuerySelection <GroupEntity> groups = Query <GroupEntity>()
                                                      .Where(g => g.Id, FqIs.In(query))
                                                      .Select();

            Assert.That(groups.Count(), Is.EqualTo(2));

            Reveal.ClearDefaultConvention();
        }
Exemple #28
0
        public void CanRightOuterJoinCollectionWithRevealAndLambdas()
        {
            Reveal.SetDefaultConvention(x => x);

            UserGroupLinkEntity     link         = null;
            GroupEntity             group        = null;
            CustomerGroupLinkEntity customerLink = null;
            CustomerEntity          customer     = null;

            IDetachedFlowQuery <UserEntity> query = DetachedQuery <UserEntity>()
                                                    .RightOuter.Join(u => u.Groups, () => link)
                                                    .RightOuter.Join(u => link.Group, () => group)
                                                    .RightOuter.Join(u => group.Customers, () => customerLink)
                                                    .RightOuter.Join(u => customerLink.Customer, () => customer)
                                                    .Distinct()
                                                    .Select(u => customer.Name);

            FlowQuerySelection <CustomerEntity> customers = Query <CustomerEntity>()
                                                            .Where(g => g.Name, FqIs.In(query))
                                                            .Select();

            Assert.That(customers.Count(), Is.EqualTo(4));

            IDetachedFlowQuery <UserEntity> query2 = DetachedQuery <UserEntity>()
                                                     .RightOuter.Join(u => u.Groups, () => link, () => link.Id == 0)
                                                     .RightOuter.Join(x => link.Group, () => group, () => group.Id == 0)
                                                     .RightOuter.Join(u => group.Customers, () => customerLink, () => customerLink.Id == 0, null)
                                                     .RightOuter.Join(u => customerLink.Customer, () => customer, () => customer.Id == 0)
                                                     .Distinct()
                                                     .Select(u => customer.Name);

            FlowQuerySelection <CustomerEntity> customers2 = Query <CustomerEntity>()
                                                             .Where(g => g.Name, FqIs.In(query2))
                                                             .Select();

            Assert.That(customers2.Count(), Is.EqualTo(4));

            Reveal.ClearDefaultConvention();
        }
        public void DoesNotSkipOrderByStatementsIfNecessaryInSubqueryTest3()
        {
            IDetachedFlowQuery <UserEntity> detached = Query <UserEntity>()
                                                       .Detached()
                                                       .Limit(2, 2)
                                                       .OrderByDescending(x => x.IsOnline)
                                                       .Select(x => x.Id);

            Assert
            .That
            (
                () =>
            {
                FlowQuerySelection <UserEntity> users = Query <UserEntity>()
                                                        .Where(x => x.Id, FqIs.In(detached))
                                                        .Select();

                Assert.That(users.Count(), Is.EqualTo(2));
                Assert.That(users.All(x => x.IsOnline), Is.False);
            },
                Throws.Nothing
            );
        }
        public void Given_DelayedQueryWithModelBasedOrders_When_LaterUsedAsSubquery_IsSortedByAppropriateSourceProjection()
        {
            IDelayedFlowQuery <UserEntity> query = Query <UserEntity>()
                                                   .OrderBy <UserDto>(x => x.SomeValue)
                                                   .Delayed();

            FlowQuerySelection <UserDto> allUsers = query
                                                    .Select(Projection);

            IDetachedFlowQuery <UserEntity> subquery = query
                                                       .Detached()
                                                       .Limit(2, 1)
                                                       .Select(x => x.Id);

            FlowQuerySelection <UserDto> subsetOfUsers = Query <UserEntity>()
                                                         .Delayed()
                                                         .Where(x => x.Id, NHibernate.FlowQuery.Is.In(subquery))
                                                         .Select(Projection);

            Assert.That(allUsers.Count(), Is.EqualTo(4));
            Assert.That(subsetOfUsers.Count(), Is.EqualTo(2));
            Assert.That(subsetOfUsers.ElementAt(0).SomeValue, Is.EqualTo("Lars Wilk"));
            Assert.That(subsetOfUsers.ElementAt(1).SomeValue, Is.EqualTo("Lotta Brak"));
        }