capture_events_to_a_new_stream_and_fetch_the_events_back_with_stream_id_provided_in_another_database_schema(
            DocumentTracking sessionType)
        {
            var store = InitStore("event_store");

            using (var session = store.OpenSession(sessionType))
            {
                var joined = new MembersJoined {
                    Members = new[] { "Rand", "Matt", "Perrin", "Thom" }
                };
                var departed = new MembersDeparted {
                    Members = new[] { "Thom" }
                };

                var id = Guid.NewGuid();
                session.Events.StartStream(id, joined, departed);
                session.SaveChanges();

                var streamEvents = session.Events.FetchStream(id);

                Enumerable.Count <IEvent>(streamEvents).ShouldBe(2);
                Enumerable.ElementAt <IEvent>(streamEvents, 0).Data.ShouldBeOfType <MembersJoined>();
                Enumerable.ElementAt <IEvent>(streamEvents, 0).Version.ShouldBe(1);
                Enumerable.ElementAt <IEvent>(streamEvents, 1).Data.ShouldBeOfType <MembersDeparted>();
                Enumerable.ElementAt <IEvent>(streamEvents, 1).Version.ShouldBe(2);

                GenericEnumerableExtensions.Each <IEvent>(streamEvents, x => SpecificationExtensions.ShouldBeGreaterThan(x.Sequence, 0L));
            }
        }
Exemplo n.º 2
0
        public void use_select_with_multiple_fields_to_other_type_using_constructor_and_properties()
        {
            theSession.Store(new User {
                FirstName = "Hank", LastName = "Aaron", Age = 20
            });
            theSession.Store(new User {
                FirstName = "Bill", LastName = "Laimbeer", Age = 40
            });
            theSession.Store(new User {
                FirstName = "Sam", LastName = "Mitchell", Age = 60
            });
            theSession.Store(new User {
                FirstName = "Tom", LastName = "Chambers", Age = 80
            });

            theSession.SaveChanges();

            var users = theSession.Query <User>()
                        .Select(x => new UserDto(x.FirstName, x.LastName)
            {
                YearsOld = x.Age
            })
                        .ToList();

            users.Count.ShouldBe(4);

            users.Each(x =>
            {
                SpecificationExtensions.ShouldNotBeNull(x.FirstName);
                SpecificationExtensions.ShouldNotBeNull(x.LastName);
                SpecificationExtensions.ShouldBeGreaterThan(x.YearsOld, 0);
            });
        }
Exemplo n.º 3
0
        public void retrieves_query_plan_with_where()
        {
            var user1 = new SimpleUser
            {
                UserName  = "******",
                Number    = 5,
                Birthdate = new DateTime(1986, 10, 4),
                Address   = new Address {
                    HouseNumber = "12bis", Street = "rue de la martre"
                }
            };
            var user2 = new SimpleUser
            {
                UserName  = "******",
                Number    = 6,
                Birthdate = new DateTime(1987, 10, 4),
                Address   = new Address {
                    HouseNumber = "12bis", Street = "rue de la martre"
                }
            };

            theSession.Store(user1, user2);
            theSession.SaveChanges();

            var plan = theSession.Query <SimpleUser>().Where(u => u.Number > 5).Explain();

            SpecificationExtensions.ShouldNotBeNull(plan);
            SpecificationExtensions.ShouldBeGreaterThan(plan.PlanWidth, 0);
            SpecificationExtensions.ShouldBeGreaterThan(plan.PlanRows, 0);
            SpecificationExtensions.ShouldBeGreaterThan(plan.TotalCost, 0m);
        }
Exemplo n.º 4
0
        public void capture_events_to_a_new_stream_and_fetch_the_events_back_with_stream_id_provided_in_another_database_schema()
        {
            var store = InitStore("event_store");

            using (var session = store.OpenSession())
            {
                var joined = new MembersJoined {
                    Members = new[] { "Rand", "Matt", "Perrin", "Thom" }
                };
                var departed = new MembersDeparted {
                    Members = new[] { "Thom" }
                };

                var id = "Fourteen";
                session.Events.StartStream <Quest>(id, joined, departed);
                session.SaveChanges();

                var streamEvents = session.Events.FetchStream(id);

                streamEvents.Count().ShouldBe(2);
                streamEvents.ElementAt(0).Data.ShouldBeOfType <MembersJoined>();
                streamEvents.ElementAt(0).Version.ShouldBe(1);
                streamEvents.ElementAt(1).Data.ShouldBeOfType <MembersDeparted>();
                streamEvents.ElementAt(1).Version.ShouldBe(2);

                streamEvents.Each(x => SpecificationExtensions.ShouldBeGreaterThan(x.Sequence, 0L));
            }
        }
Exemplo n.º 5
0
        capture_events_to_a_new_stream_and_fetch_the_events_back_with_stream_id_provided_in_another_database_schema(
            DocumentTracking sessionType, TenancyStyle tenancyStyle, string[] tenants)
        {
            var store = InitStore(tenancyStyle);

            When.CalledForEach(tenants, (tenantId, index) =>
            {
                using (var session = store.OpenSession(tenantId, sessionType))
                {
                    var joined = new MembersJoined {
                        Members = new[] { "Rand", "Matt", "Perrin", "Thom" }
                    };
                    var departed = new MembersDeparted {
                        Members = new[] { "Thom" }
                    };

                    var id = Guid.NewGuid();
                    session.Events.StartStream <Quest>(id, joined, departed);
                    session.SaveChanges();

                    var streamEvents = session.Events.FetchStream(id);

                    streamEvents.Count().ShouldBe(2);
                    streamEvents.ElementAt(0).Data.ShouldBeOfType <MembersJoined>();
                    streamEvents.ElementAt(0).Version.ShouldBe(1);
                    streamEvents.ElementAt(1).Data.ShouldBeOfType <MembersDeparted>();
                    streamEvents.ElementAt(1).Version.ShouldBe(2);

                    streamEvents.Each(x => SpecificationExtensions.ShouldBeGreaterThan(x.Sequence, 0L));
                }
            }).ShouldSucceed();
        }
 public void query_tenanted_data_with_any_tenant_predicate()
 {
     using (var session = theStore.OpenSession())
     {
         var users = session.Query <AdminUser>().Where(u => u.AnyTenant()).ToArray();
         SpecificationExtensions.ShouldBeGreaterThan(users.Length, 0);
     }
 }
        public void can_get_the_total_from_a_compiled_query()
        {
            var count = theSession.Query <Target>().Count(x => x.Number > 10);

            SpecificationExtensions.ShouldBeGreaterThan(count, 0);

            var query = new TargetPaginationQuery(2, 5);
            var list  = theSession
                        .Query(query)
                        .ToList();

            list.Any().ShouldBeTrue();

            query.Stats.TotalResults.ShouldBe(count);
        }
Exemplo n.º 8
0
        public void numeric_not_zero_is_update()
        {
            var doc = new NumericDoc {
                Id = 1
            };

            theSession.Store(doc);

            theSession.PendingChanges.UpdatesFor <NumericDoc>().Single().ShouldBeTheSameAs(doc);
            theSession.PendingChanges.Updates().Single().ShouldBeTheSameAs(doc);

            theSession.PendingChanges.Inserts().Any().ShouldBeFalse();

            SpecificationExtensions.ShouldBeGreaterThan(doc.Id, 0);
        }
        public async Task can_get_the_total_in_results_async()
        {
            var count = await theSession.Query <Target>().Where(x => x.Number > 10).CountAsync().ConfigureAwait(false);

            SpecificationExtensions.ShouldBeGreaterThan(count, 0);

            QueryStatistics stats = null;

            var list = await theSession.Query <Target>().Stats(out stats).Where(x => x.Number > 10).Take(5)
                       .ToListAsync().ConfigureAwait(false);

            list.Any().ShouldBeTrue();

            stats.TotalResults.ShouldBe(count);
        }
        public void query_by_date()
        {
            var targets = Target.GenerateRandomData(6).ToArray();

            theSession.Store(targets);

            theSession.SaveChanges();

            var actual = theSession.Query <Target>().Where(x => x.Date == targets.ElementAt(2).Date)
                         .ToArray();

            SpecificationExtensions.ShouldBeGreaterThan(actual.Length, 0);


            actual.ShouldContain(targets.ElementAt(2));
        }
Exemplo n.º 11
0
        public void retrieves_query_plan_with_where_and_all_options_enabled()
        {
            var user1 = new SimpleUser
            {
                UserName  = "******",
                Number    = 5,
                Birthdate = new DateTime(1986, 10, 4),
                Address   = new Address {
                    HouseNumber = "12bis", Street = "rue de la martre"
                }
            };
            var user2 = new SimpleUser
            {
                UserName  = "******",
                Number    = 6,
                Birthdate = new DateTime(1987, 10, 4),
                Address   = new Address {
                    HouseNumber = "12bis", Street = "rue de la martre"
                }
            };

            theSession.Store(user1, user2);
            theSession.SaveChanges();

            var plan = theSession.Query <SimpleUser>().Where(u => u.Number > 5)
                       .OrderBy(x => x.Number)
                       .Explain(c =>
            {
                c
                .Analyze()
                .Buffers()
                .Costs()
                .Timing()
                .Verbose();
            });

            SpecificationExtensions.ShouldNotBeNull(plan);
            SpecificationExtensions.ShouldBeGreaterThan(plan.ActualTotalTime, 0m);
            SpecificationExtensions.ShouldBeGreaterThan(plan.PlanningTime, 0m);
            SpecificationExtensions.ShouldBeGreaterThan(plan.ExecutionTime, 0m);
            plan.SortKey.ShouldContain("(((d.data ->> 'Number'::text))::integer)");
            plan.Plans.ShouldNotBeEmpty();
        }
        public void can_get_the_total_from_a_compiled_query_running_in_a_batch_sync()
        {
            var count = theSession.Query <Target>().Count(x => x.Number > 10);

            SpecificationExtensions.ShouldBeGreaterThan(count, 0);

            var query = new TargetPaginationQuery(2, 5);

            var batch = theSession.CreateBatchQuery();

            var targets = batch.Query(query);

            batch.ExecuteSynchronously();

            targets.Result
            .Any().ShouldBeTrue();

            query.Stats.TotalResults.ShouldBe(count);
        }
        public async Task can_get_the_total_from_a_compiled_query_running_in_a_batch()
        {
            var count = await theSession.Query <Target>().Where(x => x.Number > 10).CountAsync().ConfigureAwait(false);

            SpecificationExtensions.ShouldBeGreaterThan(count, 0);

            var query = new TargetPaginationQuery(2, 5);

            var batch = theSession.CreateBatchQuery();

            var targets = batch.Query(query);

            await batch.Execute().ConfigureAwait(false);

            (await targets.ConfigureAwait(false))
            .Any().ShouldBeTrue();

            query.Stats.TotalResults.ShouldBe(count);
        }
        public void can_get_the_total_in_batch_query_sync()
        {
            var count = theSession.Query <Target>().Count(x => x.Number > 10);

            SpecificationExtensions.ShouldBeGreaterThan(count, 0);

            QueryStatistics stats = null;

            var batch = theSession.CreateBatchQuery();

            var list = batch.Query <Target>().Stats(out stats).Where(x => x.Number > 10).Take(5)
                       .ToList();

            batch.ExecuteSynchronously();

            list.Result.Any().ShouldBeTrue();

            stats.TotalResults.ShouldBe(count);
        }
        public async Task can_get_the_total_in_batch_query()
        {
            var count = await theSession.Query <Target>().Where(x => x.Number > 10).CountAsync();

            SpecificationExtensions.ShouldBeGreaterThan(count, 0);

            QueryStatistics stats = null;

            var batch = theSession.CreateBatchQuery();

            var list = batch.Query <Target>().Stats(out stats).Where(x => x.Number > 10).Take(5)
                       .ToList();

            await batch.Execute();

            (await list).Any().ShouldBeTrue();

            stats.TotalResults.ShouldBe(count);
        }
Exemplo n.º 16
0
        public void select_many_against_complex_type_without_transformation()
        {
            var targets       = Target.GenerateRandomData(10).ToArray();
            var expectedCount = targets.SelectMany(x => x.Children).Count();

            SpecificationExtensions.ShouldBeGreaterThan(expectedCount, 0);


            using (var session = theStore.OpenSession())
            {
                session.Store(targets);
                session.SaveChanges();
            }

            using (var query = theStore.QuerySession())
            {
                var list = query.Query <Target>().SelectMany(x => x.Children).ToList();
                list.Count.ShouldBe(expectedCount);
            }
        }
        public void auto_assign_id_for_0_id()
        {
            var doc = new IntDoc {
                Id = 0
            };

            theSession.Store(doc);

            SpecificationExtensions.ShouldBeGreaterThan(doc.Id, 0);

            var doc2 = new IntDoc {
                Id = 0
            };

            theSession.Store(doc2);

            doc2.Id.ShouldNotBe(0);

            doc2.Id.ShouldNotBe(doc.Id);
        }
        public void can_get_the_total_in_results()
        {
            var count = theSession.Query <Target>().Count(x => x.Number > 10);

            SpecificationExtensions.ShouldBeGreaterThan(count, 0);

            // We're going to use stats as an output
            // parameter to the call below, so we
            // have to declare the "stats" object
            // first
            QueryStatistics stats = null;

            var list = theSession
                       .Query <Target>()
                       .Stats(out stats)
                       .Where(x => x.Number > 10).Take(5)
                       .ToList();

            list.Any().ShouldBeTrue();

            // Now, the total results data should
            // be available
            stats.TotalResults.ShouldBe(count);
        }
        public void running_synchronously()
        {
            var logger = new RecordingSessionLogger();

            Guid streamId = Guid.NewGuid();

            using (var session = theStore.OpenSession())
            {
                session.Logger = logger;

                var joined = new MembersJoined {
                    Members = new[] { "Rand", "Matt", "Perrin", "Thom" }
                };
                var departed = new MembersDeparted {
                    Members = new[] { "Thom" }
                };

                session.Events.StartStream <Quest>(streamId, joined, departed);
                session.SaveChanges();

                var events = logger.LastCommit.GetEvents().ToArray();
                events.Select(x => x.Version)
                .ShouldHaveTheSameElementsAs(1, 2);

                events.Each(x => SpecificationExtensions.ShouldBeGreaterThan(x.Sequence, 0L));

                events.Select(x => x.Sequence).Distinct().Count().ShouldBe(2);
            }

            using (var session = theStore.OpenSession())
            {
                session.Logger = logger;

                var joined2 = new MembersJoined {
                    Members = new[] { "Egwene" }
                };
                var departed2 = new MembersDeparted {
                    Members = new[] { "Perrin" }
                };

                session.Events.Append(streamId, joined2, departed2);
                session.SaveChanges();

                logger.LastCommit.GetEvents().Select(x => x.Version)
                .ShouldHaveTheSameElementsAs(3, 4);
            }

            using (var session = theStore.OpenSession())
            {
                session.Logger = logger;

                var joined3 = new MembersJoined {
                    Members = new[] { "Egwene" }
                };
                var departed3 = new MembersDeparted {
                    Members = new[] { "Perrin" }
                };

                session.Events.Append(streamId, joined3, departed3);
                session.SaveChanges();

                logger.LastCommit.GetEvents().Select(x => x.Version)
                .ShouldHaveTheSameElementsAs(5, 6);
            }
        }