Repository navigation
Expand file tree
/
Copy pathVectorReads.cs
More file actions
65 lines (59 loc) · 4.36 KB
/
Copy pathVectorReads.cs
File metadata and controls
65 lines (59 loc) · 4.36 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
using KeyLoad.Core.Search;
using KeyLoad.Storage;
namespace KeyLoad.Core;
/// <summary>Executes VectorReads operations against the caller's database context.</summary>
public static class VectorReads
{
/// <summary>Runs an authorized callback over visible vectors at one storage cut.</summary>
/// <typeparam name = "T">Owned callback result type.</typeparam>
/// <param name = "principalId">Persisted principal identifier.</param>
/// <param name = "partition">Owning atomic partition.</param>
/// <param name = "collection">Document collection.</param>
/// <param name = "field">Authorized vector field.</param>
/// <param name = "read">Callback over visible document-vector pairs.</param>
/// <returns>The callback's owned result.</returns>
/// <param name = "engine">The shared database execution context.</param>
public static T WithVectors<T>(this DatabaseEngine engine, string principalId, PartitionRef partition, string collection, string field, Func<PrincipalRecord, ResourceDefinition, (DocumentRecord Document, VectorRecord Vector)[], T> read)
{
ArgumentNullException.ThrowIfNull(engine) /* KLD0041: The BCL null guard accepts this existing reference through its object parameter without copying its contents. */;
return engine.Store.Read(view =>
{
var principal = engine.Principal(view, principalId, engine.Clock.GetUtcNow());
engine.Authorization.Require(principal, partition, collection, Capability.VectorSearch);
var resource = engine.Resource(view, partition, collection, ResourceKind.Collection);
engine.Authorization.RequireFieldUse(principal, resource, field);
return read(principal, resource, engine.ReadVisibleVectors(view, principal, partition, collection, field));
});
}
/// <summary>Materializes visible revision-matching vector pairs under a shared budget.</summary>
/// <param name = "view">Current gated storage view.</param>
/// <param name = "principal">Persisted principal.</param>
/// <param name = "partition">Owning atomic partition.</param>
/// <param name = "collection">Document collection.</param>
/// <param name = "field">Authorized vector field.</param>
/// <param name = "budget">Shared read budget, or the configured default.</param>
/// <returns>Owned visible document-vector pairs.</returns>
/// <param name = "engine">The shared database execution context.</param>
public static (DocumentRecord Document, VectorRecord Vector)[] ReadVisibleVectors(this DatabaseEngine engine, IKeyValueView view, PrincipalRecord principal, PartitionRef partition, string collection, string field, ReadExecutionBudget? budget = null)
{
ArgumentNullException.ThrowIfNull(engine) /* KLD0041: The BCL null guard accepts this existing reference through its object parameter without copying its contents. */;
budget ??= new();
var eligible = new List<(DocumentRecord, VectorRecord)>();
engine.VisitVisibleVectors(view, principal, partition, collection, field, budget, (document, vector) => eligible.Add((document, vector)));
return eligible.ToArray();
}
/// <summary>Visits visible revision-matching vector pairs inside the existing read cut.</summary>
/// <param name = "view">The gate-scoped read view.</param>
/// <param name = "principal">Persisted, verified principal.</param>
/// <param name = "partition">Owning atomic partition.</param>
/// <param name = "collection">Configured collection.</param>
/// <param name = "field">Authorized vector field.</param>
/// <param name = "budget">Shared cancellation and cumulative resource limits.</param>
/// <param name = "visitor">Synchronous callback; it cannot escape or mutate the read view.</param>
/// <param name = "engine">The shared database execution context.</param>
public static void VisitVisibleVectors(this DatabaseEngine engine, IKeyValueView view, PrincipalRecord principal, PartitionRef partition, string collection, string field, ReadExecutionBudget budget, Action<DocumentRecord, VectorRecord> visitor)
{
ArgumentNullException.ThrowIfNull(engine) /* KLD0041: The BCL null guard accepts this existing reference through its object parameter without copying its contents. */;
VisibleVectorReads.Visit(engine, view, principal, partition, collection, field, budget, visitor);
}
}