Skip to content

Commit

Permalink
Improve prefix.
Browse files Browse the repository at this point in the history
  • Loading branch information
SebastianStehle committed Feb 2, 2025
1 parent 3cac883 commit 3aceb76
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 4 deletions.
2 changes: 1 addition & 1 deletion Directory.Build.props
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
<PackageProjectUrl>https://github.com/squidex/squidex</PackageProjectUrl>
<PublishRepositoryUrl>true</PublishRepositoryUrl>
<SymbolPackageFormat>snupkg</SymbolPackageFormat>
<Version>6.30.0</Version>
<Version>6.31.0</Version>
</PropertyGroup>

<PropertyGroup Condition="'$(GITHUB_ACTIONS)' == 'true'">
Expand Down
12 changes: 11 additions & 1 deletion events/Squidex.Events.Mongo/FilterBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -44,12 +44,22 @@ public static FilterDefinition<MongoEventCommit> ByStream(StreamFilter filter)

if (filter.Kind == StreamFilterKind.MatchStart)
{
return builder.Or(filter.Prefixes.Select(p => builder.Regex(x => x.EventStream, $"^{p}")));
return builder.Or(filter.Prefixes.Select(p => Buildregex(p, builder)));
}

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

private static FilterDefinition<MongoEventCommit> Buildregex(string prefix, FilterDefinitionBuilder<MongoEventCommit> builder)
{
if (prefix.StartsWith('%'))
{
prefix = $"([a-zA-Z0-9]+){prefix[1..]}";
}

return builder.Regex(x => x.EventStream, $"^{prefix}");
}

public static FilterDefinition<ChangeStreamDocument<MongoEventCommit>>? ByChangeInStream(StreamFilter filter)
{
var builder = Builders<ChangeStreamDocument<MongoEventCommit>>.Filter;
Expand Down
29 changes: 27 additions & 2 deletions events/Squidex.Events.Tests/EventStoreTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -417,11 +417,12 @@ public async Task Should_query_all_reverse_by_names(int commits, int count)
[InlineData(5, 30)]
[InlineData(5, 300)]
[InlineData(5, 3000)]
public async Task Should_query_all_reverse_by_filter(int commits, int count)
public async Task Should_query_all_reverse_by_prefix(int commits, int count)
{
var sut = await CreateSutAsync();

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

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

[Theory]
[InlineData(5, 30)]
[InlineData(5, 300)]
[InlineData(5, 3000)]
public async Task Should_query_all_reverse_by_wildcard_prefix(int commits, int count)
{
var sut = await CreateSutAsync();

var randomPart = Guid.NewGuid();
var streamName = $"test-{randomPart}-suffix";
var streamFilter = StreamFilter.Prefix($"%-{randomPart}", "invalid");

var eventsWritten = await AppendEventsAsync(sut, streamName, count, commits);
var eventsStored = eventsWritten.Select((x, i) => new StoredEvent(streamName, "Position", i, x)).ToArray();

for (var take = 0; take < count; take += count / 10)
{
var eventsExpected = eventsStored.Reverse().Take(take).ToArray();
var eventsQueried = await sut.QueryAllReverseAsync(streamFilter, default, take, ct).ToArrayAsync();

ShouldBeEquivalentTo(eventsQueried, eventsExpected);
}
}

[Theory]
[InlineData(5, 30)]
[InlineData(5, 300)]
Expand Down

0 comments on commit 3aceb76

Please sign in to comment.