Skip to content

Commit 3aceb76

Browse files
Improve prefix.
1 parent 3cac883 commit 3aceb76

File tree

3 files changed

+39
-4
lines changed

3 files changed

+39
-4
lines changed

Directory.Build.props

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
<PackageProjectUrl>https://github.com/squidex/squidex</PackageProjectUrl>
1212
<PublishRepositoryUrl>true</PublishRepositoryUrl>
1313
<SymbolPackageFormat>snupkg</SymbolPackageFormat>
14-
<Version>6.30.0</Version>
14+
<Version>6.31.0</Version>
1515
</PropertyGroup>
1616

1717
<PropertyGroup Condition="'$(GITHUB_ACTIONS)' == 'true'">

events/Squidex.Events.Mongo/FilterBuilder.cs

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,12 +44,22 @@ public static FilterDefinition<MongoEventCommit> ByStream(StreamFilter filter)
4444

4545
if (filter.Kind == StreamFilterKind.MatchStart)
4646
{
47-
return builder.Or(filter.Prefixes.Select(p => builder.Regex(x => x.EventStream, $"^{p}")));
47+
return builder.Or(filter.Prefixes.Select(p => Buildregex(p, builder)));
4848
}
4949

5050
return builder.In(x => x.EventStream, filter.Prefixes);
5151
}
5252

53+
private static FilterDefinition<MongoEventCommit> Buildregex(string prefix, FilterDefinitionBuilder<MongoEventCommit> builder)
54+
{
55+
if (prefix.StartsWith('%'))
56+
{
57+
prefix = $"([a-zA-Z0-9]+){prefix[1..]}";
58+
}
59+
60+
return builder.Regex(x => x.EventStream, $"^{prefix}");
61+
}
62+
5363
public static FilterDefinition<ChangeStreamDocument<MongoEventCommit>>? ByChangeInStream(StreamFilter filter)
5464
{
5565
var builder = Builders<ChangeStreamDocument<MongoEventCommit>>.Filter;

events/Squidex.Events.Tests/EventStoreTests.cs

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -417,11 +417,12 @@ public async Task Should_query_all_reverse_by_names(int commits, int count)
417417
[InlineData(5, 30)]
418418
[InlineData(5, 300)]
419419
[InlineData(5, 3000)]
420-
public async Task Should_query_all_reverse_by_filter(int commits, int count)
420+
public async Task Should_query_all_reverse_by_prefix(int commits, int count)
421421
{
422422
var sut = await CreateSutAsync();
423423

424-
var streamName = $"test-{Guid.NewGuid()}-suffix";
424+
var randomPart = Guid.NewGuid();
425+
var streamName = $"test-{randomPart}-suffix";
425426
var streamFilter = StreamFilter.Prefix(streamName[..^7], "invalid");
426427

427428
var eventsWritten = await AppendEventsAsync(sut, streamName, count, commits);
@@ -436,6 +437,30 @@ public async Task Should_query_all_reverse_by_filter(int commits, int count)
436437
}
437438
}
438439

440+
[Theory]
441+
[InlineData(5, 30)]
442+
[InlineData(5, 300)]
443+
[InlineData(5, 3000)]
444+
public async Task Should_query_all_reverse_by_wildcard_prefix(int commits, int count)
445+
{
446+
var sut = await CreateSutAsync();
447+
448+
var randomPart = Guid.NewGuid();
449+
var streamName = $"test-{randomPart}-suffix";
450+
var streamFilter = StreamFilter.Prefix($"%-{randomPart}", "invalid");
451+
452+
var eventsWritten = await AppendEventsAsync(sut, streamName, count, commits);
453+
var eventsStored = eventsWritten.Select((x, i) => new StoredEvent(streamName, "Position", i, x)).ToArray();
454+
455+
for (var take = 0; take < count; take += count / 10)
456+
{
457+
var eventsExpected = eventsStored.Reverse().Take(take).ToArray();
458+
var eventsQueried = await sut.QueryAllReverseAsync(streamFilter, default, take, ct).ToArrayAsync();
459+
460+
ShouldBeEquivalentTo(eventsQueried, eventsExpected);
461+
}
462+
}
463+
439464
[Theory]
440465
[InlineData(5, 30)]
441466
[InlineData(5, 300)]

0 commit comments

Comments
 (0)