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)); } }
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); }); }
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); }
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)); } }
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); }
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)); }
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); }
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); } }