Skip to content

Commit 61eaa9c

Browse files
author
Jamil Maqdis Anton
committed
Add support to reading backwards by changing ReadVersion type
1 parent 2ff38d0 commit 61eaa9c

File tree

3 files changed

+50
-4
lines changed

3 files changed

+50
-4
lines changed

src/Read.fs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,11 @@ open System.Threading
44
open SqlStreamStore.Streams
55

66
module Read =
7-
let private fromReadVersion: uint -> int = fun readVersion -> int (readVersion)
7+
let private fromReadVersion: ReadVersion -> int =
8+
function
9+
| ReadVersion.Start -> int (Position.Start)
10+
| ReadVersion.End -> int (Position.End)
11+
| ReadVersion.SpecificVersion version -> int (version)
812

913
let readFromAllStream: SqlStreamStore.IStreamStore -> ReadingDirection -> StartPositionInclusive -> MessageCount -> Async<ReadAllPage> =
1014
fun store readingDirection startPositionInclusive msgCount ->

src/Types.fs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,19 @@ type MessageDetails =
1313

1414
type StreamName = string
1515

16+
[<RequireQualifiedAccessAttribute>]
17+
type ReadVersion =
18+
| Start
19+
| End
20+
| SpecificVersion of uint
21+
1622
[<RequireQualifiedAccessAttribute>]
1723
type AppendVersion =
1824
| Any
1925
| EmptyStream
2026
| NoStream
2127
| SpecificVersion of int
2228

23-
and ReadVersion = uint
24-
2529
type StartPositionInclusive = int64
2630
type MessageCount = int
2731

tests/ReadTests.fs

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ let tests =
3737
do! Append.appendNewMessages inMemStore streamName appendVersion msgList
3838
|> Async.Ignore
3939

40-
let readVersion = 0u
40+
let readVersion = ReadVersion.Start
4141

4242
let! readResult = Read.readFromStream inMemStore ReadingDirection.Forward streamName readVersion 10
4343

@@ -46,4 +46,42 @@ let tests =
4646
|> fun sorted ->
4747
ExpectExtra.equal guidString1 (sorted.[0].MessageId.ToString())
4848
ExpectExtra.equal guidString2 (sorted.[1].MessageId.ToString())
49+
}
50+
testAsync "Should read Backward from specific stream." {
51+
let inMemStore = new SqlStreamStore.InMemoryStreamStore()
52+
53+
let streamName = "test"
54+
55+
let appendVersion = AppendVersion.NoStream
56+
57+
let guidString1 = "11111111-1111-1111-1111-111111111111"
58+
59+
let guidString2 = "22222222-2222-2222-2222-222222222222"
60+
61+
let msg1 =
62+
{ id = StreamMessageId.Custom(System.Guid.Parse(guidString1))
63+
type_ = "testing"
64+
jsonData = "{}"
65+
jsonMetadata = "{}" }
66+
67+
let msg2 =
68+
{ id = StreamMessageId.Custom(System.Guid.Parse(guidString2))
69+
type_ = "testing"
70+
jsonData = "{}"
71+
jsonMetadata = "{}" }
72+
73+
let msgList = [ msg1; msg2 ]
74+
75+
do! Append.appendNewMessages inMemStore streamName appendVersion msgList
76+
|> Async.Ignore
77+
78+
let readVersion = ReadVersion.End
79+
80+
let! readResult = Read.readFromStream inMemStore ReadingDirection.Backward streamName readVersion 10
81+
82+
readResult.Messages
83+
|> Array.sortBy (fun msg -> msg.MessageId)
84+
|> fun sorted ->
85+
ExpectExtra.equal guidString2 (sorted.[1].MessageId.ToString())
86+
ExpectExtra.equal guidString1 (sorted.[0].MessageId.ToString())
4987
} ]

0 commit comments

Comments
 (0)