effect-dynamodb 1.36.0 → 1.37.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Aggregate.d.ts +29 -17
- package/dist/Aggregate.d.ts.map +1 -1
- package/dist/Aggregate.js +795 -173
- package/dist/Aggregate.js.map +1 -1
- package/dist/Batch.d.ts.map +1 -1
- package/dist/Batch.js +196 -77
- package/dist/Batch.js.map +1 -1
- package/dist/Collection.d.ts.map +1 -1
- package/dist/Collection.js +11 -2
- package/dist/Collection.js.map +1 -1
- package/dist/Collections.d.ts +15 -6
- package/dist/Collections.d.ts.map +1 -1
- package/dist/Collections.js +2 -1
- package/dist/Collections.js.map +1 -1
- package/dist/DynamoClient.d.ts +119 -10
- package/dist/DynamoClient.d.ts.map +1 -1
- package/dist/DynamoClient.js +1148 -142
- package/dist/DynamoClient.js.map +1 -1
- package/dist/Entity.d.ts +126 -51
- package/dist/Entity.d.ts.map +1 -1
- package/dist/Entity.js +3477 -539
- package/dist/Entity.js.map +1 -1
- package/dist/EventStore.d.ts +4 -3
- package/dist/EventStore.d.ts.map +1 -1
- package/dist/EventStore.js +616 -53
- package/dist/EventStore.js.map +1 -1
- package/dist/Query.d.ts +311 -25
- package/dist/Query.d.ts.map +1 -1
- package/dist/Query.js +1159 -103
- package/dist/Query.js.map +1 -1
- package/dist/Table.d.ts +172 -3
- package/dist/Table.d.ts.map +1 -1
- package/dist/Table.js +85 -4
- package/dist/Table.js.map +1 -1
- package/dist/Transaction.d.ts +18 -2
- package/dist/Transaction.d.ts.map +1 -1
- package/dist/Transaction.js +62 -8
- package/dist/Transaction.js.map +1 -1
- package/dist/change-feed/DynamoStreamsClient.d.ts +1 -1
- package/dist/change-feed/DynamoStreamsClient.d.ts.map +1 -1
- package/dist/change-feed/DynamoStreamsClient.js +3 -1
- package/dist/change-feed/DynamoStreamsClient.js.map +1 -1
- package/dist/index.d.ts +6 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/internal/BoundQuery.d.ts +226 -32
- package/dist/internal/BoundQuery.d.ts.map +1 -1
- package/dist/internal/BoundQuery.js +96 -18
- package/dist/internal/BoundQuery.js.map +1 -1
- package/dist/internal/Capacity.d.ts +8 -0
- package/dist/internal/Capacity.d.ts.map +1 -1
- package/dist/internal/Capacity.js +24 -4
- package/dist/internal/Capacity.js.map +1 -1
- package/dist/internal/CredentialRefusal.d.ts +32 -0
- package/dist/internal/CredentialRefusal.d.ts.map +1 -0
- package/dist/internal/CredentialRefusal.js +80 -0
- package/dist/internal/CredentialRefusal.js.map +1 -0
- package/dist/internal/Cursor.d.ts +90 -0
- package/dist/internal/Cursor.d.ts.map +1 -0
- package/dist/internal/Cursor.js +179 -0
- package/dist/internal/Cursor.js.map +1 -0
- package/dist/internal/ExpressionLimits.d.ts +18 -2
- package/dist/internal/ExpressionLimits.d.ts.map +1 -1
- package/dist/internal/ExpressionLimits.js +35 -2
- package/dist/internal/ExpressionLimits.js.map +1 -1
- package/dist/internal/ProjectionEngine.d.ts +16 -0
- package/dist/internal/ProjectionEngine.d.ts.map +1 -1
- package/dist/internal/ProjectionEngine.js +242 -46
- package/dist/internal/ProjectionEngine.js.map +1 -1
- package/dist/internal/RangePlanner.d.ts +394 -0
- package/dist/internal/RangePlanner.d.ts.map +1 -0
- package/dist/internal/RangePlanner.js +1296 -0
- package/dist/internal/RangePlanner.js.map +1 -0
- package/dist/internal/Rekey.d.ts +78 -0
- package/dist/internal/Rekey.d.ts.map +1 -0
- package/dist/internal/Rekey.js +323 -0
- package/dist/internal/Rekey.js.map +1 -0
- package/dist/internal/TransactPlan.d.ts +8 -1
- package/dist/internal/TransactPlan.d.ts.map +1 -1
- package/dist/internal/TransactPlan.js +9 -2
- package/dist/internal/TransactPlan.js.map +1 -1
- package/dist/internal/TransactWriteOps.d.ts +10 -7
- package/dist/internal/TransactWriteOps.d.ts.map +1 -1
- package/dist/internal/TransactWriteOps.js +82 -6
- package/dist/internal/TransactWriteOps.js.map +1 -1
- package/dist/internal/TransactableOps.d.ts +31 -0
- package/dist/internal/TransactableOps.d.ts.map +1 -1
- package/dist/internal/TransactableOps.js +50 -1
- package/dist/internal/TransactableOps.js.map +1 -1
- package/dist/internal/WriteDiagnosis.d.ts.map +1 -1
- package/dist/internal/WriteDiagnosis.js +10 -7
- package/dist/internal/WriteDiagnosis.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,394 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @internal RangePlanner — the pure half of a planned query (#171, design §9).
|
|
3
|
+
*
|
|
4
|
+
* A planner never sends a request. It turns a plan and each response into the
|
|
5
|
+
* next *step* — a `Read` of one key range, a `Probe` that locates where to read
|
|
6
|
+
* next, or `Done` — and the terminal's loop (`Query.ts`) sends every request,
|
|
7
|
+
* so every request counts against `maxPages`, is observed by `onRequest` and
|
|
8
|
+
* is never sent once the call is about to return.
|
|
9
|
+
*
|
|
10
|
+
* Plans over a composite sort key (§7):
|
|
11
|
+
*
|
|
12
|
+
* - `key` — the bounds reach the key condition directly: one range.
|
|
13
|
+
* - `skip-scan` — composites left of the first bound have no bound (the
|
|
14
|
+
* *skip tuple*): a probe (`Limit: 1`) finds each distinct tuple `T`, then
|
|
15
|
+
* `T`'s own range is read, then a probe from just past `T`, and so on.
|
|
16
|
+
* - `filter` — one range over everything under the pinned prefix, every bound
|
|
17
|
+
* checked per row: when skip-scan is not sound (§7.3), after the probe budget
|
|
18
|
+
* is spent (§7.4) or at a key the tuple parse can't read.
|
|
19
|
+
*
|
|
20
|
+
* Plans over a Z-order sort key (§5): inside each prefix tuple, `naive` reads
|
|
21
|
+
* the box's hull, `jump` follows the last examined key to the next in-box
|
|
22
|
+
* address, `precise` reads a capped range plan; a missing prefix composite is
|
|
23
|
+
* walked by a binary skip-scan (§7.5).
|
|
24
|
+
*
|
|
25
|
+
* Positions are what a cursor records (§10): what has been **completed**, never
|
|
26
|
+
* a range to trust. Resume recomputes the plan and places the position in it.
|
|
27
|
+
*/
|
|
28
|
+
import type { AttributeValue } from "@aws-sdk/client-dynamodb";
|
|
29
|
+
import { ValidationError } from "@effect-dynamodb/schema/Errors.js";
|
|
30
|
+
import { type AddressRange, type Box, type Layout } from "@effect-dynamodb/schema/internal/ZOrderCurve.js";
|
|
31
|
+
import type { KeyCondition, KeyValue, PlanMode, QueryExplain, ZOrderOptions } from "../Query.js";
|
|
32
|
+
import * as Cursor from "./Cursor.js";
|
|
33
|
+
import { type Expr } from "./Expr.js";
|
|
34
|
+
/** A key range, both ends inclusive; `undefined` is open. */
|
|
35
|
+
export interface KeyRange {
|
|
36
|
+
readonly lower: KeyValue | undefined;
|
|
37
|
+
readonly upper: KeyValue | undefined;
|
|
38
|
+
/** Sent instead of the bounds: a whole, unclipped subtree. */
|
|
39
|
+
readonly beginsWith?: KeyValue | undefined;
|
|
40
|
+
/** `false`: rows inside the range may still fall outside the bounds (a row check runs). */
|
|
41
|
+
readonly exact: boolean;
|
|
42
|
+
}
|
|
43
|
+
/** What is done inside a position's tuple (or the whole plan without one). */
|
|
44
|
+
export type Boundary =
|
|
45
|
+
/** Nothing delivered yet. */
|
|
46
|
+
{
|
|
47
|
+
readonly _tag: "Start";
|
|
48
|
+
}
|
|
49
|
+
/** Every in-plan row up to `through` (in scan direction) is done. */
|
|
50
|
+
| {
|
|
51
|
+
readonly _tag: "Through";
|
|
52
|
+
readonly through: KeyValue;
|
|
53
|
+
}
|
|
54
|
+
/** Inside a range, after this key. */
|
|
55
|
+
| {
|
|
56
|
+
readonly _tag: "At";
|
|
57
|
+
readonly startKey: Record<string, AttributeValue>;
|
|
58
|
+
}
|
|
59
|
+
/** The whole tuple is finished. */
|
|
60
|
+
| {
|
|
61
|
+
readonly _tag: "TupleDone";
|
|
62
|
+
};
|
|
63
|
+
export interface Position {
|
|
64
|
+
readonly mode: PlanMode;
|
|
65
|
+
/** The skip tuple `T` (`undefined`: none). */
|
|
66
|
+
readonly tuple: KeyValue | undefined;
|
|
67
|
+
readonly boundary: Boundary;
|
|
68
|
+
/** Probes sent by this terminal call (§7.4). Never in a cursor: a resumed query starts afresh. */
|
|
69
|
+
readonly skips: number;
|
|
70
|
+
/** The key pass of a {@link keyPassesPlanner} plan: `1` the 1.36 key, `0` the current one. */
|
|
71
|
+
readonly pass?: 0 | 1 | undefined;
|
|
72
|
+
}
|
|
73
|
+
/** How a read's `Limit` is sized: the pass-rate estimator (§8), or a jump run (§8.5, Z-order). */
|
|
74
|
+
export type Sizing = {
|
|
75
|
+
readonly _tag: "estimator";
|
|
76
|
+
} | {
|
|
77
|
+
readonly _tag: "jump";
|
|
78
|
+
readonly run: number;
|
|
79
|
+
};
|
|
80
|
+
export interface ReadStep {
|
|
81
|
+
readonly _tag: "Read";
|
|
82
|
+
/** What a cursor taken before this read's next request records. */
|
|
83
|
+
readonly at: Position;
|
|
84
|
+
readonly range: KeyRange;
|
|
85
|
+
/** The partition this read is sent to, when not the query's own (a 1.36 key pass, #171). */
|
|
86
|
+
readonly pkValue?: string | undefined;
|
|
87
|
+
readonly startKey: Record<string, AttributeValue> | undefined;
|
|
88
|
+
/** The range's index in a precomputed plan (Z-order precise plans); `undefined` otherwise. */
|
|
89
|
+
readonly planIndex: number | undefined;
|
|
90
|
+
readonly sizing: Sizing;
|
|
91
|
+
/** Bounds this read's key condition can't express (§11). */
|
|
92
|
+
readonly rowCheck: RowCheck | undefined;
|
|
93
|
+
}
|
|
94
|
+
export interface ProbeStep {
|
|
95
|
+
readonly _tag: "Probe";
|
|
96
|
+
readonly at: Position;
|
|
97
|
+
readonly lower: KeyValue | undefined;
|
|
98
|
+
readonly upper: KeyValue | undefined;
|
|
99
|
+
}
|
|
100
|
+
export interface DoneStep {
|
|
101
|
+
readonly _tag: "Done";
|
|
102
|
+
}
|
|
103
|
+
export type Step = ReadStep | ProbeStep | DoneStep;
|
|
104
|
+
/**
|
|
105
|
+
* A library-owned raw-row predicate (§11), evaluated before decode beside the
|
|
106
|
+
* history-row exclusion. Its attributes are borrowed into an active projection
|
|
107
|
+
* and stripped again afterwards.
|
|
108
|
+
*/
|
|
109
|
+
export interface RowCheck {
|
|
110
|
+
/** The fields it checks (`explain().rowChecks`). */
|
|
111
|
+
readonly fields: ReadonlyArray<string>;
|
|
112
|
+
/** The stored attributes it reads. */
|
|
113
|
+
readonly reads: ReadonlyArray<string>;
|
|
114
|
+
readonly accepts: (row: Record<string, AttributeValue>) => boolean;
|
|
115
|
+
}
|
|
116
|
+
/** What the query around a planner decides: resolved when a terminal runs. */
|
|
117
|
+
export interface PlanContext {
|
|
118
|
+
readonly reverse: boolean;
|
|
119
|
+
readonly maxSkips: number;
|
|
120
|
+
/** `.zorder()` options (Z-order plans only). */
|
|
121
|
+
readonly zorder?: ZOrderOptions | undefined;
|
|
122
|
+
}
|
|
123
|
+
export interface RangePlanner {
|
|
124
|
+
readonly fingerprint: string;
|
|
125
|
+
/** The plan a fresh query starts in. */
|
|
126
|
+
readonly mode: PlanMode;
|
|
127
|
+
/** ANDed into every read's `FilterExpression` (Z-order dimension bounds; none for composites). */
|
|
128
|
+
readonly filter: Expr | undefined;
|
|
129
|
+
/** The row check of the reads a fresh query starts with. */
|
|
130
|
+
readonly rowCheck: RowCheck | undefined;
|
|
131
|
+
/** The first step; `[EDD-9094]` for a cursor that doesn't belong to this plan. */
|
|
132
|
+
readonly start: (cursor: Cursor.CursorV2 | undefined) => Step | ValidationError;
|
|
133
|
+
readonly afterRead: (step: ReadStep, lastEvaluatedKey: Record<string, AttributeValue> | undefined) => Step;
|
|
134
|
+
readonly afterProbe: (step: ProbeStep, key: KeyValue | undefined) => Step;
|
|
135
|
+
/** The precise ranges following `step` in the same tuple, for a window (§9.2). */
|
|
136
|
+
readonly following: (step: ReadStep, n: number) => ReadonlyArray<ReadStep>;
|
|
137
|
+
/** The cursor resuming at `step` (`null` only for `Done`). */
|
|
138
|
+
readonly cursor: (step: Step) => Cursor.CursorV2 | null;
|
|
139
|
+
readonly explain: (sizing: QueryExplain["sizing"]) => QueryExplain;
|
|
140
|
+
}
|
|
141
|
+
/** A planner, resolved from the final query state when a terminal runs. */
|
|
142
|
+
export type PlannerFactory = (context: PlanContext) => RangePlanner;
|
|
143
|
+
/** Default skip-scan probe budget per terminal call (§7.4). */
|
|
144
|
+
export declare const DEFAULT_MAX_SKIPS = 32;
|
|
145
|
+
/** Default range cap of a Z-order `precise` plan and of `auto`'s choice (§3.4). */
|
|
146
|
+
export declare const DEFAULT_MAX_RANGES = 16;
|
|
147
|
+
/** A jump run's first `Limit`, and what it resets to after a jump (§8.5). */
|
|
148
|
+
export declare const JUMP_INITIAL = 16;
|
|
149
|
+
/** The largest `Limit` a jump run grows to (§8.5). */
|
|
150
|
+
export declare const JUMP_MAX_LIMIT = 1000;
|
|
151
|
+
/**
|
|
152
|
+
* `SK_MAX_SENTINEL` (`DynamoClient.ts`): above every character key
|
|
153
|
+
* composition emits, so `prefix + MAX` bounds every key under `prefix`.
|
|
154
|
+
*/
|
|
155
|
+
export declare const KEY_MAX = "\uFFFF";
|
|
156
|
+
/**
|
|
157
|
+
* Order two key values as DynamoDB does: by UTF-8 bytes. For text that is
|
|
158
|
+
* code point order, which JS string comparison (UTF-16 code units) is not
|
|
159
|
+
* above U+FFFF — so it is never used for keys.
|
|
160
|
+
*/
|
|
161
|
+
export declare const compareUtf8: (a: KeyValue, b: KeyValue) => number;
|
|
162
|
+
/**
|
|
163
|
+
* The highest code point: above every character a key can hold but itself.
|
|
164
|
+
* Where the text after a prefix is a value's own (no label precedes it),
|
|
165
|
+
* `prefix + KEY_TOP` bounds every key under the prefix; {@link KEY_MAX} does
|
|
166
|
+
* not, since an emoji (UTF-8 `F0 …`) outsorts it.
|
|
167
|
+
*/
|
|
168
|
+
export declare const KEY_TOP: string;
|
|
169
|
+
/**
|
|
170
|
+
* An inclusive high end for a strict `<` on key text: below `key`, and at or
|
|
171
|
+
* above every key below `key` that does not hold U+10FFFF. Its last code
|
|
172
|
+
* point is stepped down one (past the surrogates) and followed by U+10FFFF: a
|
|
173
|
+
* key below `key` either stops short of it — a prefix, which the bound keeps —
|
|
174
|
+
* or is smaller at some character, and from there sorts under the bound. A
|
|
175
|
+
* last code point of U+0000 has no predecessor; `key` without it is then the
|
|
176
|
+
* bound. (U+10FFFF rather than {@link KEY_MAX}, which an emoji outsorts.)
|
|
177
|
+
*/
|
|
178
|
+
export declare const keyJustBelow: (key: string) => string;
|
|
179
|
+
/** Does `value` satisfy a sort key condition, as DynamoDB evaluates it? */
|
|
180
|
+
export declare const keyConditionHolds: (condition: KeyCondition, value: KeyValue) => boolean;
|
|
181
|
+
/**
|
|
182
|
+
* The key condition a read of `range` sends; `undefined` reads the whole
|
|
183
|
+
* partition. A zero-length operand is a defect: DynamoDB rejects it, and no
|
|
184
|
+
* plan should ever compose one.
|
|
185
|
+
*/
|
|
186
|
+
export declare const toKeyCondition: (range: KeyRange) => KeyCondition | undefined;
|
|
187
|
+
/** Is `value` inside `range` (as its key condition selects)? */
|
|
188
|
+
export declare const rangeContains: (range: KeyRange, value: KeyValue) => boolean;
|
|
189
|
+
/** A key value as `explain` and `onRequest` show it: text as is, bytes as `0x…` hex. */
|
|
190
|
+
export declare const displayKeyValue: (value: KeyValue) => string;
|
|
191
|
+
/**
|
|
192
|
+
* The display bounds of a sort key condition: `eq` as `[v, v]`, `between` as
|
|
193
|
+
* `[a, b]`, one-sided operators open on the other side, `begins_with` as
|
|
194
|
+
* `[prefix, undefined]`, none as `[undefined, undefined]`.
|
|
195
|
+
*/
|
|
196
|
+
export declare const displayKeyCondition: (condition: KeyCondition | undefined) => readonly [lower: string | undefined, upper: string | undefined];
|
|
197
|
+
/** JSON with every object's keys sorted, so equal inputs give equal text. */
|
|
198
|
+
export declare const canonicalJson: (value: unknown) => string;
|
|
199
|
+
/**
|
|
200
|
+
* An expression as `explain` shows it: its compiled text with every name and
|
|
201
|
+
* value placeholder replaced by what it stands for.
|
|
202
|
+
*/
|
|
203
|
+
export declare const displayExpr: (expr: Expr) => string;
|
|
204
|
+
/** FNV-1a (32-bit) of `text`'s UTF-8 bytes, as 8 hex digits. */
|
|
205
|
+
export declare const fnv1a32: (text: string) => string;
|
|
206
|
+
/**
|
|
207
|
+
* `[EDD-9094]`: a cursor that doesn't belong to the query it was given to —
|
|
208
|
+
* malformed, from another query, or a position outside the recomputed plan.
|
|
209
|
+
* Raised by the terminal (cursors are decoded there), never by `startFrom`.
|
|
210
|
+
*/
|
|
211
|
+
export declare const cursorRefusal: (entityType: string, why: string) => ValidationError;
|
|
212
|
+
/**
|
|
213
|
+
* `step` resumed after `startKey`: what a read that returned a
|
|
214
|
+
* `LastEvaluatedKey`, or stopped inside its page, continues with. A filter
|
|
215
|
+
* read's position drops its tuple — `ExclusiveStartKey` alone places it.
|
|
216
|
+
*/
|
|
217
|
+
export declare const readFrom: (step: ReadStep, startKey: Record<string, AttributeValue>) => ReadStep;
|
|
218
|
+
/**
|
|
219
|
+
* The composites a skip-scan walks: none (a `key` plan), or a `string` tuple —
|
|
220
|
+
* the composites between the pinned prefix `P` and the first bounded
|
|
221
|
+
* composite, parsed from the key text (§7.2). A Z-order prefix is walked by {@link zorderPlanner}.
|
|
222
|
+
*/
|
|
223
|
+
export type TupleSpace = {
|
|
224
|
+
readonly _tag: "none";
|
|
225
|
+
} | {
|
|
226
|
+
readonly _tag: "string";
|
|
227
|
+
/** `P`: the key text every tuple extends; ends with the delimiter. */
|
|
228
|
+
readonly prefix: string;
|
|
229
|
+
/** The tuple composites' labels (`<cased name>_`), in key order. */
|
|
230
|
+
readonly labels: ReadonlyArray<string>;
|
|
231
|
+
/** The label of the first composite after the tuple. */
|
|
232
|
+
readonly next: string;
|
|
233
|
+
/** The tuple composites' names (`explain`'s reason). */
|
|
234
|
+
readonly fields: ReadonlyArray<string>;
|
|
235
|
+
};
|
|
236
|
+
/**
|
|
237
|
+
* What is read inside each tuple (or the whole plan, without one): a single
|
|
238
|
+
* range per tuple. (Z-order range plans: {@link zorderPlanner}.)
|
|
239
|
+
*/
|
|
240
|
+
export type InnerPlan = {
|
|
241
|
+
readonly _tag: "single";
|
|
242
|
+
/** The range under tuple `T` (`undefined`: the `key` plan's one range). */
|
|
243
|
+
readonly conditionFor: (tuple: string | undefined) => KeyRange;
|
|
244
|
+
/** The bounds that range can't express: the same for every tuple. */
|
|
245
|
+
readonly rowCheck: RowCheck | undefined;
|
|
246
|
+
/** No value satisfies the bounds (`{ gt: 3, lte: 3 }`): the plan is `empty`, and reads nothing. */
|
|
247
|
+
readonly empty: boolean;
|
|
248
|
+
};
|
|
249
|
+
/** A composite sort key plan, as the accessor's `.within()` builds it. */
|
|
250
|
+
export interface CompositePlanSpec {
|
|
251
|
+
readonly entityType: string;
|
|
252
|
+
/** The physical index, or `"primary"`. */
|
|
253
|
+
readonly index: string;
|
|
254
|
+
readonly pkField: string;
|
|
255
|
+
readonly pkValue: string;
|
|
256
|
+
readonly skField: string;
|
|
257
|
+
/** What must not change between calls: the pinned and composed bounds (§10.3). */
|
|
258
|
+
readonly fingerprint: unknown;
|
|
259
|
+
readonly space: TupleSpace;
|
|
260
|
+
readonly inner: InnerPlan;
|
|
261
|
+
/** The filter plan: one range under `P`, every bound in the row check (§7.4). */
|
|
262
|
+
readonly filterPlan: {
|
|
263
|
+
/** `P`: the filter range runs from `P` to `P + MAX`. */
|
|
264
|
+
readonly prefix: string;
|
|
265
|
+
readonly rowCheck: RowCheck | undefined;
|
|
266
|
+
};
|
|
267
|
+
/** Why skip-scan isn't sound for this tuple (§7.3); the plan is then `filter`. */
|
|
268
|
+
readonly ineligible: string | undefined;
|
|
269
|
+
}
|
|
270
|
+
/**
|
|
271
|
+
* A planner for a composite sort key plan. `start` places a cursor in the
|
|
272
|
+
* recomputed plan (§10.3): string ranges are kept or dropped whole, never cut.
|
|
273
|
+
*/
|
|
274
|
+
export declare const compositePlanner: (spec: CompositePlanSpec) => PlannerFactory;
|
|
275
|
+
/** One key a query reads: a partition, and the sort key condition under it. */
|
|
276
|
+
export interface KeyPass {
|
|
277
|
+
readonly pkValue: string;
|
|
278
|
+
/** `eq` or `beginsWith` — the pins — or none: the whole partition. */
|
|
279
|
+
readonly condition: KeyCondition | undefined;
|
|
280
|
+
/**
|
|
281
|
+
* The 1.36 key's only: where each row's values key it now, which sorts
|
|
282
|
+
* the rows of both passes by form. The current pass keeps a row stored at
|
|
283
|
+
* its key now — another value's 1.36 row can sit under the current key
|
|
284
|
+
* (`a%20b`'s 1.36 text is `a b`'s escaped text). The 1.36 pass keeps a row
|
|
285
|
+
* stored elsewhere whose key now the current pass selects — so not a row
|
|
286
|
+
* 1.36 keyed there for another value (`a` then `b` under pins on `a#b`).
|
|
287
|
+
* Without it, the current pass keeps every row and the 1.36 pass every
|
|
288
|
+
* row the current condition does not select.
|
|
289
|
+
*/
|
|
290
|
+
readonly rows?: KeyPassRows | undefined;
|
|
291
|
+
}
|
|
292
|
+
/** {@link KeyPass.rows}: where a stored row's values key it now. */
|
|
293
|
+
export interface KeyPassRows {
|
|
294
|
+
/** The stored attributes it reads. */
|
|
295
|
+
readonly reads: ReadonlyArray<string>;
|
|
296
|
+
/** The row's partition and sort key text now; `undefined` when its values compose none. */
|
|
297
|
+
readonly composed: (row: Record<string, AttributeValue>) => {
|
|
298
|
+
readonly pk: string;
|
|
299
|
+
readonly sk: string | undefined;
|
|
300
|
+
} | undefined;
|
|
301
|
+
/**
|
|
302
|
+
* The row's key text as 1.36 composed it. A row stored elsewhere than its key now
|
|
303
|
+
* is another value's only if it is stored at this: otherwise an index policy left
|
|
304
|
+
* its key, and it belongs where it is. Without it, every row stored elsewhere than
|
|
305
|
+
* its key now is another value's.
|
|
306
|
+
*/
|
|
307
|
+
readonly composed136?: ((row: Record<string, AttributeValue>) => {
|
|
308
|
+
readonly pk: string;
|
|
309
|
+
readonly sk: string | undefined;
|
|
310
|
+
} | undefined) | undefined;
|
|
311
|
+
/**
|
|
312
|
+
* Read both passes when the two keys are one: rows of both forms share it
|
|
313
|
+
* (a time-series item's events, whose orderBy text changed) and the passes
|
|
314
|
+
* split them by form.
|
|
315
|
+
*/
|
|
316
|
+
readonly split?: boolean | undefined;
|
|
317
|
+
}
|
|
318
|
+
/** A plan reading a query's own key and its 1.36 key, as `Query.alsoRead136` installs it. */
|
|
319
|
+
export interface KeyPassesSpec {
|
|
320
|
+
readonly entityType: string;
|
|
321
|
+
/** The physical index, or `"primary"`. */
|
|
322
|
+
readonly index: string;
|
|
323
|
+
readonly pkField: string;
|
|
324
|
+
readonly skField: string | undefined;
|
|
325
|
+
/** The query's own key, as its terminal sends it. */
|
|
326
|
+
readonly current: KeyPass;
|
|
327
|
+
/** The key 1.36 composed for the same pins; its text differs from `current`'s. */
|
|
328
|
+
readonly legacy: KeyPass;
|
|
329
|
+
}
|
|
330
|
+
/**
|
|
331
|
+
* A planner reading a query's own key and the key 1.36 composed for the same
|
|
332
|
+
* pins, one after the other (#171): rows 1.36 wrote whose key text changed
|
|
333
|
+
* stay under the 1.36 key until they are written again or `rekey` moves
|
|
334
|
+
* them. Those are the older rows, so a forward read takes the 1.36 key first
|
|
335
|
+
* and `.reverse()` takes it last; each key is read in the query's direction.
|
|
336
|
+
* The plan is `key`. When both keys are in one partition, a read of the 1.36
|
|
337
|
+
* key drops the rows the current key selects too (a value whose 1.36 text
|
|
338
|
+
* prefixes its escaped text: `50%` of `50%25`), so no row is read twice.
|
|
339
|
+
*
|
|
340
|
+
* A position is the start of a pass or a key inside one; its cursor names the
|
|
341
|
+
* pass in `p`. A cursor without a fingerprint (a plain query's `{ k }`, from
|
|
342
|
+
* before the fallback had anything to read, or from 1.36) is placed by its
|
|
343
|
+
* key: in the 1.36 pass when the key lies under the 1.36 key and not the
|
|
344
|
+
* current one.
|
|
345
|
+
*/
|
|
346
|
+
export declare const keyPassesPlanner: (spec: KeyPassesSpec) => PlannerFactory;
|
|
347
|
+
/** A prefix composite of a binary skip tuple (§7.5). */
|
|
348
|
+
export interface BinarySegment {
|
|
349
|
+
readonly field: string;
|
|
350
|
+
/** Hash width in bytes; `undefined`: stored length-prefixed. */
|
|
351
|
+
readonly hash: number | undefined;
|
|
352
|
+
/** The encoded segment `.within()` gave it, if any. */
|
|
353
|
+
readonly given: Uint8Array | undefined;
|
|
354
|
+
}
|
|
355
|
+
/** A Z-order sort key plan, as the accessor's `.within()` builds it. */
|
|
356
|
+
export interface ZOrderPlanSpec {
|
|
357
|
+
readonly entityType: string;
|
|
358
|
+
readonly index: string;
|
|
359
|
+
readonly pkField: string;
|
|
360
|
+
readonly pkValue: string;
|
|
361
|
+
readonly skField: string;
|
|
362
|
+
/** What must not change between calls: the prefix values, the box and the layout (§10.3). */
|
|
363
|
+
readonly fingerprint: unknown;
|
|
364
|
+
readonly layout: Layout;
|
|
365
|
+
/** The quantized box (§5.1); `"empty"` when nothing can match. */
|
|
366
|
+
readonly box: Box | "empty";
|
|
367
|
+
/** Whether any dimension is bounded: without one, each tuple is read whole. */
|
|
368
|
+
readonly bounded: boolean;
|
|
369
|
+
/** `P`: the given leading prefix segments (possibly none). */
|
|
370
|
+
readonly prefix: Uint8Array;
|
|
371
|
+
/** The skip tuple: the prefix segments from the first one not given through the last. */
|
|
372
|
+
readonly tuple: ReadonlyArray<BinarySegment>;
|
|
373
|
+
/** The exact dimension bounds DynamoDB can compare on the stored attributes (§11). */
|
|
374
|
+
readonly filter: Expr | undefined;
|
|
375
|
+
/** The bounds checked per row inside a tuple: dimensions no filter compares, hashed prefixes. */
|
|
376
|
+
readonly rowCheck: RowCheck | undefined;
|
|
377
|
+
/** The filter plan's row check: every given prefix composite as well (§7.4). */
|
|
378
|
+
readonly filterRowCheck: RowCheck | undefined;
|
|
379
|
+
/** The capped range plan of the box (§5.4), cached per accessor. */
|
|
380
|
+
readonly ranges: (maxRanges: number, refineFactor: number) => {
|
|
381
|
+
readonly ranges: ReadonlyArray<AddressRange>;
|
|
382
|
+
readonly exact: boolean;
|
|
383
|
+
};
|
|
384
|
+
}
|
|
385
|
+
/**
|
|
386
|
+
* A planner for a Z-order sort key plan. Inside each tuple `T` (the given
|
|
387
|
+
* prefix, or each one a binary skip-scan finds), a range `[lo, hi]` of
|
|
388
|
+
* addresses is read as `BETWEEN T‖lo AND T‖hi`; the strategy decides which
|
|
389
|
+
* ranges (§5.5). `start` places a cursor by clipping the recomputed plan at
|
|
390
|
+
* its address (§10.3), so a cursor resumes under any `maxRanges` or
|
|
391
|
+
* strategy.
|
|
392
|
+
*/
|
|
393
|
+
export declare const zorderPlanner: (spec: ZOrderPlanSpec) => PlannerFactory;
|
|
394
|
+
//# sourceMappingURL=RangePlanner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RangePlanner.d.ts","sourceRoot":"","sources":["../../src/internal/RangePlanner.ts"],"names":[],"mappings":"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"}
|