Skip to content
This repository was archived by the owner on Aug 15, 2024. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ public async Task When_delete_message_then_deleted_message_should_be_appended_to

var page = await store.ReadStreamBackwards(DeletedStreamId, StreamVersion.End, 1);
var message = page.Messages.Single();
var messageDeleted = message.JsonDataAs<MessageDeleted>();
var messageDeleted = await message.GetJsonDataAs<MessageDeleted>();
message.Type.ShouldBe(MessageDeletedMessageType);
messageDeleted.StreamId.ShouldBe(streamId);
messageDeleted.MessageId.ShouldBe(messageIdToDelete);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ public async Task When_delete_stream_with_expected_version_any_and_then_read_the
page.Status.ShouldBe(PageReadStatus.Success);
var message = page.Messages.Single();
message.Type.ShouldBe(StreamDeletedMessageType);
var streamDeleted = message.JsonDataAs<StreamDeleted>();
var streamDeleted = await message.GetJsonDataAs<StreamDeleted>();
streamDeleted.StreamId.ShouldBe("stream");
}
}
Expand Down Expand Up @@ -126,7 +126,7 @@ public async Task When_delete_stream_with_a_matching_expected_version_and_read_t
page.Status.ShouldBe(PageReadStatus.Success);
var message = page.Messages.Single();
message.Type.ShouldBe(StreamDeletedMessageType);
var streamDeleted = message.JsonDataAs<StreamDeleted>();
var streamDeleted = await message.GetJsonDataAs<StreamDeleted>();
streamDeleted.StreamId.ShouldBe("stream");
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ public async Task Can_read_all_forwards()
var expectedMessage = expectedMessages[i];

message.MessageId.ShouldBe(expectedMessage.MessageId);
message.JsonData.ShouldBe(expectedMessage.JsonData);
(await message.GetJsonData()).ShouldBe(await expectedMessage.GetJsonData());

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is the main breaking change for consumers.

message.JsonMetadata.ShouldBe(expectedMessage.JsonMetadata);
message.StreamId.ShouldBe(expectedMessage.StreamId);
message.StreamVersion.ShouldBe(expectedMessage.StreamVersion);
Expand All @@ -61,6 +61,50 @@ public async Task Can_read_all_forwards()
}
}

[Fact]
public async Task Can_read_all_forwards_without_prefetch()
{
using (var fixture = GetFixture())
{
using (var store = await fixture.GetStreamStore())
{
await store.AppendToStream("stream-1", ExpectedVersion.NoStream, CreateNewStreamMessages(1, 2, 3));

var page = await store.ReadAllForwards(Position.Start, 4, prefetchJsonData: false);

foreach(var streamMessage in page.Messages)
{
streamMessage.GetJsonData().IsCompleted.ShouldBeFalse();

(await streamMessage.GetJsonData()).ShouldNotBeNullOrWhiteSpace();
}
}
}
}

[Fact]
public async Task When_read_without_prefetch_and_stream_is_deleted_then_GetJsonData_should_return_null()
{
using (var fixture = GetFixture())
{
using (var store = await fixture.GetStreamStore())
{
await store.AppendToStream("stream-1", ExpectedVersion.NoStream, CreateNewStreamMessages(1, 2, 3));

var page = await store.ReadAllForwards(Position.Start, 4, prefetchJsonData: false);

await store.DeleteStream("stream-1");

foreach (var streamMessage in page.Messages)
{
streamMessage.GetJsonData().IsCompleted.ShouldBeFalse();

(await streamMessage.GetJsonData()).ShouldBeNull();
}
}
}
}

[Fact]
public async Task Can_read_all_backwards()
{
Expand Down Expand Up @@ -102,7 +146,7 @@ public async Task Can_read_all_backwards()
var expectedMessage = expectedMessages[i];

message.MessageId.ShouldBe(expectedMessage.MessageId);
message.JsonData.ShouldBe(expectedMessage.JsonData);
(await message.GetJsonData()).ShouldBe(await expectedMessage.GetJsonData());
message.JsonMetadata.ShouldBe(expectedMessage.JsonMetadata);
message.StreamId.ShouldBe(expectedMessage.StreamId);
message.StreamVersion.ShouldBe(expectedMessage.StreamVersion);
Expand All @@ -115,6 +159,27 @@ public async Task Can_read_all_backwards()
}
}

[Fact]
public async Task Can_read_all_backwards_without_prefetch()
{
using (var fixture = GetFixture())
{
using (var store = await fixture.GetStreamStore())
{
await store.AppendToStream("stream-1", ExpectedVersion.NoStream, CreateNewStreamMessages(1, 2, 3));

var page = await store.ReadAllBackwards(Position.Start, 4, prefetchJsonData: false);

foreach (var streamMessage in page.Messages)
{
streamMessage.GetJsonData().IsCompleted.ShouldBeFalse();

(await streamMessage.GetJsonData()).ShouldNotBeNullOrWhiteSpace();
}
}
}
}

[Theory]
[InlineData(3, 0, 3, 3, 0, 3)] // Read entire store
[InlineData(3, 0, 4, 3, 0, 3)] // Read entire store
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ public async Task Can_read_streams_forwards(ReadStreamTheory theory)
var expectedMessage = expectedMessages[i];

message.MessageId.ShouldBe(expectedMessage.MessageId);
message.JsonData.ShouldBe(expectedMessage.JsonData);
(await message.GetJsonData()).ShouldBe(await expectedMessage.GetJsonData());
message.JsonMetadata.ShouldBe(expectedMessage.JsonMetadata);
message.StreamId.ShouldBe(expectedMessage.StreamId);
message.StreamVersion.ShouldBe(expectedMessage.StreamVersion);
Expand All @@ -55,6 +55,27 @@ public async Task Can_read_streams_forwards(ReadStreamTheory theory)
}
}

[Fact]
public async Task Can_read_stream_forwards_without_prefetch()
{
using (var fixture = GetFixture())
{
using (var store = await fixture.GetStreamStore())
{
await store.AppendToStream("stream-1", ExpectedVersion.NoStream, CreateNewStreamMessages(1, 2, 3));

var page = await store.ReadStreamForwards("stream-1", StreamVersion.Start, 5, prefetchJsonData: false);

foreach (var streamMessage in page.Messages)
{
streamMessage.GetJsonData().IsCompleted.ShouldBeFalse();

(await streamMessage.GetJsonData()).ShouldNotBeNullOrWhiteSpace();
}
}
}
}

[Fact]
public async Task Can_read_next_page_past_end_of_stream()
{
Expand Down Expand Up @@ -121,7 +142,7 @@ public async Task Can_read_streams_backwards(ReadStreamTheory theory)
var expectedMessage = expectedMessages[i];

streamMessage.MessageId.ShouldBe(expectedMessage.MessageId);
streamMessage.JsonData.ShouldBe(expectedMessage.JsonData);
(await streamMessage.GetJsonData()).ShouldBe(await expectedMessage.GetJsonData());
streamMessage.JsonMetadata.ShouldBe(expectedMessage.JsonMetadata);
streamMessage.StreamId.ShouldBe(expectedMessage.StreamId);
streamMessage.StreamVersion.ShouldBe(expectedMessage.StreamVersion);
Expand All @@ -134,6 +155,27 @@ public async Task Can_read_streams_backwards(ReadStreamTheory theory)
}
}

[Fact]
public async Task Can_read_stream_backwards_without_prefetch()
{
using (var fixture = GetFixture())
{
using (var store = await fixture.GetStreamStore())
{
await store.AppendToStream("stream-1", ExpectedVersion.NoStream, CreateNewStreamMessages(1, 2, 3));

var page = await store.ReadStreamBackwards("stream-1", StreamVersion.End, 5, prefetchJsonData: false);

foreach (var streamMessage in page.Messages)
{
streamMessage.GetJsonData().IsCompleted.ShouldBeFalse();

(await streamMessage.GetJsonData()).ShouldNotBeNullOrWhiteSpace();
}
}
}
}

[Fact]
public async Task When_read_non_exist_stream_forwards_then_should_get_StreamNotFound()
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -95,11 +95,11 @@ await store
var allMessagesPage = await store.ReadAllForwards(Position.Start, 10);
allMessagesPage.Messages.Length.ShouldBe(2);
allMessagesPage.Messages[0].Type.ShouldBe(Deleted.StreamDeletedMessageType);
allMessagesPage.Messages[0].JsonDataAs<Deleted.StreamDeleted>()
(await allMessagesPage.Messages[0].GetJsonDataAs<Deleted.StreamDeleted>())
.StreamId.ShouldBe(streamId);

allMessagesPage.Messages[1].Type.ShouldBe(Deleted.StreamDeletedMessageType);
allMessagesPage.Messages[1].JsonDataAs<Deleted.StreamDeleted>()
(await allMessagesPage.Messages[1].GetJsonDataAs<Deleted.StreamDeleted>())
.StreamId.ShouldBe($"$${streamId}");
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ private static StreamMessage ExpectedStreamMessage(
DateTime created)
{
var id = Guid.Parse("00000000-0000-0000-0000-" + messageNumber.ToString().PadLeft(12, '0'));
return new StreamMessage(streamId, id, sequenceNumber, 0, created, "type", "\"data\"", "\"metadata\"");
return new StreamMessage(streamId, id, sequenceNumber, 0, created, "type", "\"metadata\"", "\"data\"");
}
}

Expand Down
1 change: 0 additions & 1 deletion src/SqlStreamStore.MsSql/MsSqlScripts/ReadAllBackward.sql
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
dbo.Messages.Id AS EventId,
dbo.Messages.Created,
dbo.Messages.Type,
dbo.Messages.JsonData,
dbo.Messages.JsonMetadata
FROM dbo.Messages
INNER JOIN dbo.Streams
Expand Down
14 changes: 14 additions & 0 deletions src/SqlStreamStore.MsSql/MsSqlScripts/ReadAllBackwardWithData.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
SELECT TOP(@count)
dbo.Streams.IdOriginal As StreamId,
dbo.Messages.StreamVersion,
dbo.Messages.Position,
dbo.Messages.Id AS EventId,
dbo.Messages.Created,
dbo.Messages.Type,
dbo.Messages.JsonMetadata,
dbo.Messages.JsonData
FROM dbo.Messages
INNER JOIN dbo.Streams
ON dbo.Messages.StreamIdInternal = dbo.Streams.IdInternal
WHERE dbo.Messages.Position <= @ordinal
ORDER BY dbo.Messages.Position DESC;
1 change: 0 additions & 1 deletion src/SqlStreamStore.MsSql/MsSqlScripts/ReadAllForward.sql
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
dbo.Messages.Id AS EventId,
dbo.Messages.Created,
dbo.Messages.Type,
dbo.Messages.JsonData,
dbo.Messages.JsonMetadata
FROM dbo.Messages
INNER JOIN dbo.Streams
Expand Down
15 changes: 15 additions & 0 deletions src/SqlStreamStore.MsSql/MsSqlScripts/ReadAllForwardWithData.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
/* SQL Server 2008+ */
SELECT TOP(@count)
dbo.Streams.IdOriginal As StreamId,
dbo.Messages.StreamVersion,
dbo.Messages.Position,
dbo.Messages.Id AS EventId,
dbo.Messages.Created,
dbo.Messages.Type,
dbo.Messages.JsonMetadata,
dbo.Messages.JsonData
FROM dbo.Messages
INNER JOIN dbo.Streams
ON dbo.Messages.StreamIdInternal = dbo.Streams.IdInternal
WHERE dbo.Messages.Position >= @ordinal
ORDER BY dbo.Messages.Position;
11 changes: 11 additions & 0 deletions src/SqlStreamStore.MsSql/MsSqlScripts/ReadMessageData.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
/* SQL Server 2008+ */

DECLARE @streamIdInternal AS INT

SELECT @streamIdInternal = dbo.Streams.IdInternal
FROM dbo.Streams
WHERE dbo.Streams.Id = @streamId

SELECT dbo.Messages.JsonData
FROM dbo.Messages
WHERE dbo.Messages.StreamIdInternal = @streamIdInternal AND dbo.Messages.StreamVersion = @streamVersion;
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@
dbo.Messages.Id AS EventId,
dbo.Messages.Created,
dbo.Messages.Type,
dbo.Messages.JsonData,
dbo.Messages.JsonMetadata
FROM dbo.Messages
INNER JOIN dbo.Streams
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
/* SQL Server 2008+ */

DECLARE @streamIdInternal AS INT
DECLARE @lastStreamVersion AS INT

SELECT @streamIdInternal = dbo.Streams.IdInternal, @lastStreamVersion = dbo.Streams.[Version]
FROM dbo.Streams
WHERE dbo.Streams.Id = @streamId

SELECT @lastStreamVersion

SELECT TOP(@count)
dbo.Messages.StreamVersion,
dbo.Messages.Position,
dbo.Messages.Id AS EventId,
dbo.Messages.Created,
dbo.Messages.Type,
dbo.Messages.JsonMetadata,
dbo.Messages.JsonData
FROM dbo.Messages
INNER JOIN dbo.Streams
ON dbo.Messages.StreamIdInternal = dbo.Streams.IdInternal
WHERE dbo.Messages.StreamIdInternal = @streamIdInternal AND dbo.Messages.StreamVersion <= @streamVersion
ORDER BY dbo.Messages.Position DESC
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@
dbo.Messages.Id AS EventId,
dbo.Messages.Created,
dbo.Messages.Type,
dbo.Messages.JsonData,
dbo.Messages.JsonMetadata
FROM dbo.Messages
INNER JOIN dbo.Streams
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
/* Prefetches the Json Data */

DECLARE @streamIdInternal AS INT
DECLARE @lastStreamVersion AS INT

SELECT @streamIdInternal = dbo.Streams.IdInternal, @lastStreamVersion = dbo.Streams.[Version]
FROM dbo.Streams
WHERE dbo.Streams.Id = @streamId

SELECT @lastStreamVersion

SELECT TOP(@count)
dbo.Messages.StreamVersion,
dbo.Messages.Position,
dbo.Messages.Id AS EventId,
dbo.Messages.Created,
dbo.Messages.Type,
dbo.Messages.JsonMetadata,
dbo.Messages.JsonData
FROM dbo.Messages
INNER JOIN dbo.Streams
ON dbo.Messages.StreamIdInternal = dbo.Streams.IdInternal
WHERE dbo.Messages.StreamIdInternal = @streamIdInternal AND dbo.Messages.StreamVersion >= @streamVersion
ORDER BY dbo.Messages.Position;
12 changes: 11 additions & 1 deletion src/SqlStreamStore.MsSql/MsSqlScripts/Scripts.cs
Original file line number Diff line number Diff line change
Expand Up @@ -35,16 +35,26 @@ internal Scripts(string schema)

internal string InitializeStore => GetScript(nameof(InitializeStore));

internal string ReadHeadPosition => GetScript(nameof(ReadHeadPosition));

internal string ReadAllForward => GetScript(nameof(ReadAllForward));

internal string ReadHeadPosition => GetScript(nameof(ReadHeadPosition));
internal string ReadAllForwardWithData => GetScript(nameof(ReadAllForwardWithData));

internal string ReadAllBackward => GetScript(nameof(ReadAllBackward));

internal string ReadAllBackwardWithData => GetScript(nameof(ReadAllBackwardWithData));

internal string ReadStreamForward => GetScript(nameof(ReadStreamForward));

internal string ReadStreamForwardWithData => GetScript(nameof(ReadStreamForwardWithData));

internal string ReadStreamBackward => GetScript(nameof(ReadStreamBackward));

internal string ReadStreamBackwardWithData => GetScript(nameof(ReadStreamBackwardWithData));

internal string ReadMessageData => GetScript(nameof(ReadMessageData));

internal string SetStreamMetadata => GetScript(nameof(SetStreamMetadata));

private string GetScript(string name)
Expand Down
Loading