Skip to content

Commit cf54946

Browse files
committed
Allowed keys to be read from index
1 parent 8a8a952 commit cf54946

File tree

6 files changed

+75
-2
lines changed

6 files changed

+75
-2
lines changed

Examples/IntegrationTestApp/Program.cs

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,18 @@ private static async Task Main()
119119
logger.LogInformation($"Year of birth: {data.YearOfBirth}");
120120
logger.LogInformation($"Phone number: {data.PhoneNumber}");
121121
}
122-
122+
123+
var indexKeys = dataManager.ReadIndexKeys<TestIndexData, string>(x => x.PhoneNumber);
124+
logger.LogInformation("Read keys from index");
125+
await foreach (var indexKey in indexKeys)
126+
{
127+
logger.LogInformation($"Key: {indexKey.Value}");
128+
foreach (var id in indexKey.Ids)
129+
{
130+
logger.LogInformation($"Id: {id}");
131+
}
132+
}
133+
123134
write = await dataManager.Write(new TestUniqueIndexData
124135
{
125136
Id = 2,

Examples/IntegrationTestApp/TestNestedData.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
1+
using System.Diagnostics.CodeAnalysis;
12
using MessagePack;
23
using PackDB.Core.Data;
34

45
namespace IntegrationTestApp
56
{
7+
[ExcludeFromCodeCoverage]
68
public class TestNestedData : DataEntity
79
{
810
[Key(2)]

Examples/IntegrationTestApp/TestWithNestedData.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
using System.Collections.Generic;
2+
using System.Diagnostics.CodeAnalysis;
23
using MessagePack;
34
using PackDB.Core.Data;
45

56
namespace IntegrationTestApp
67
{
8+
[ExcludeFromCodeCoverage]
79
public class TestWithNestedData : DataEntity
810
{
911
[Key(2)]

PackDB.FileSystem.Tests/IndexWorkerTester.cs

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -233,7 +233,43 @@ public async Task GetIdsFromIndexWhenReadDataFromStreamReturnsAnIndexWithTheKeyA
233233
Assert.AreEqual(ExpectedIds.Count(), result.Count());
234234
for (var i = 0; i < ExpectedIds.Count(); i++) Assert.IsTrue(result.Contains(ExpectedIds[i]));
235235
}
236+
237+
[Test(Author = "PackDB Creator")]
238+
public async Task GetKeysFromIndexWhenReadDataFromStreamReturnsAnEmptyIndex()
239+
{
240+
MockFileStreamer
241+
.Setup(x => x.ReadDataFromStream<Index<string>>("Data\\IndexableData\\IndexValue1.index"))
242+
.ReturnsAsync(new Index<string>());
243+
var data = FileIndexWorker.GetKeysFromIndex<IndexableData, string>("IndexValue1");
244+
var result = new List<IndexKey<string>>();
245+
await foreach (var d in data) result.Add(d);
246+
Assert.IsEmpty(result);
247+
}
248+
249+
[Test(Author = "PackDB Creator")]
250+
public async Task GetKeysFromIndexWhenReadDataFromStreamReturnsAnIndexWithNoKeys()
251+
{
252+
MockFileStreamer
253+
.Setup(x => x.ReadDataFromStream<Index<string>>("Data\\IndexableData\\IndexValue1.index"))
254+
.ReturnsAsync(new Index<string>
255+
{
256+
Keys = new List<IndexKey<string>>()
257+
});
258+
var data = FileIndexWorker.GetKeysFromIndex<IndexableData, string>("IndexValue1");
259+
var result = new List<IndexKey<string>>();
260+
await foreach (var d in data) result.Add(d);
261+
Assert.IsEmpty(result);
262+
}
236263

264+
[Test(Author = "PackDB Creator")]
265+
public async Task GetKeysFromIndexWhenReadDataFromStreamReturnsAnIndexWithTheKeyAndIds()
266+
{
267+
var data = FileIndexWorker.GetKeysFromIndex<IndexableData, string>("IndexValue1");
268+
var result = new List<IndexKey<string>>();
269+
await foreach (var d in data) result.Add(d);
270+
Assert.AreEqual(1, result.Count(x => x.Value == IndexKey));
271+
}
272+
237273
[Test(Author = "PackDB Creator", ExpectedResult = true)]
238274
public async Task<bool> IndexDataTypeWithNoIndexedProperties()
239275
{

PackDB.FileSystem/IndexWorker/FileIndexWorker.cs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,27 @@ public async IAsyncEnumerable<int> GetIdsFromIndex<TDataType, TKeyType>(string i
8787
}
8888
}
8989

90+
public async IAsyncEnumerable<IndexKey<TKeyType>> GetKeysFromIndex<TDataType, TKeyType>(string indexName) where TDataType : DataEntity
91+
{
92+
using (_logger.BeginScope("{Operation} is {Action} {IndexName} for {DataType}}",
93+
nameof(FileIndexWorker), "getting keys from index", indexName, typeof(TDataType).Name))
94+
{
95+
var index = await FileStreamer.ReadDataFromStream<Index<TKeyType>>(GetFileName<TDataType>(indexName));
96+
var keys = index.Keys;
97+
if (keys == null)
98+
{
99+
_logger.LogWarning("The index doesn't have the keys");
100+
yield break;
101+
}
102+
103+
foreach (var key in keys)
104+
{
105+
_logger.LogInformation("Returning {KeyValue}", key.Value, key);
106+
yield return key;
107+
}
108+
}
109+
}
110+
90111
public async Task<bool> Index<TDataType>(TDataType data) where TDataType : DataEntity
91112
{
92113
using (_logger.BeginScope("{Operation} is {Action} for {DataType}", nameof(FileIndexWorker), "indexing",

PackDB.FileSystem/PackDB.FileSystem.csproj

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
0.2.0 - Beta release
2323
0.3.0 - Fixed issue with getting next id when no data exists for that type
2424
0.4.0 - Handled unique indexes
25+
0.5.0 - Allowed keys to be read from index
2526
</PackageReleaseNotes>
2627
<PackageRequireLicenseAcceptance>true</PackageRequireLicenseAcceptance>
2728
<NeutralLanguage>en-GB</NeutralLanguage>
@@ -38,7 +39,7 @@
3839
</PropertyGroup>
3940

4041
<ItemGroup>
41-
<PackageReference Include="PackDB.Core" Version="0.6.0" />
42+
<PackageReference Include="PackDB.Core" Version="0.7.0" />
4243
</ItemGroup>
4344

4445
<ItemGroup>

0 commit comments

Comments
 (0)