@slexisvn/query-engine 0.1.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.
Files changed (179) hide show
  1. package/dist/binder/binder.d.ts +130 -0
  2. package/dist/binder/expression-binder.d.ts +168 -0
  3. package/dist/binder/scope.d.ts +40 -0
  4. package/dist/browser.d.ts +8 -0
  5. package/dist/catalog/catalog.d.ts +53 -0
  6. package/dist/catalog/function-registry.d.ts +26 -0
  7. package/dist/catalog/statistics-cache.d.ts +39 -0
  8. package/dist/catalog/statistics.d.ts +72 -0
  9. package/dist/catalog/tpch-schema.d.ts +15 -0
  10. package/dist/cli/cli-common.d.ts +11 -0
  11. package/dist/cli/coordinator.d.ts +1 -0
  12. package/dist/cli/format.d.ts +8 -0
  13. package/dist/cli/index.d.ts +1 -0
  14. package/dist/cli/loaders/csv-loader.d.ts +17 -0
  15. package/dist/cli/loaders/data-loader.d.ts +7 -0
  16. package/dist/cli/loaders/json-loader.d.ts +13 -0
  17. package/dist/cli/loaders/loader-factory.d.ts +4 -0
  18. package/dist/cli/repl.d.ts +6 -0
  19. package/dist/cli/worker.d.ts +1 -0
  20. package/dist/config.d.ts +42 -0
  21. package/dist/core.wasm +0 -0
  22. package/dist/dataframe/column-expr.d.ts +67 -0
  23. package/dist/dataframe/dataframe.d.ts +96 -0
  24. package/dist/dataframe/expr-types.d.ts +6 -0
  25. package/dist/dataframe/in-memory-relation.d.ts +31 -0
  26. package/dist/dataframe/index.d.ts +4 -0
  27. package/dist/dataframe/schema.d.ts +35 -0
  28. package/dist/dataframe/sql-expr-binder.d.ts +17 -0
  29. package/dist/dataframe/type-inference.d.ts +8 -0
  30. package/dist/distributed/cluster/cluster-manager.d.ts +54 -0
  31. package/dist/distributed/cluster/heartbeat-monitor.d.ts +27 -0
  32. package/dist/distributed/cluster/node-descriptor.d.ts +41 -0
  33. package/dist/distributed/distributed-types.d.ts +336 -0
  34. package/dist/distributed/execution/coordinator.d.ts +53 -0
  35. package/dist/distributed/execution/exchange-operator.d.ts +44 -0
  36. package/dist/distributed/execution/fragment-executor.d.ts +48 -0
  37. package/dist/distributed/execution/merge-exchange.d.ts +55 -0
  38. package/dist/distributed/optimizer/distributed-sort.d.ts +6 -0
  39. package/dist/distributed/optimizer/distribution-aware-join.d.ts +28 -0
  40. package/dist/distributed/optimizer/partial-aggregate.d.ts +9 -0
  41. package/dist/distributed/partition/partition-map.d.ts +27 -0
  42. package/dist/distributed/partition/partition-pruner.d.ts +33 -0
  43. package/dist/distributed/partition/partition-strategy.d.ts +43 -0
  44. package/dist/distributed/planner/distributed-planner.d.ts +71 -0
  45. package/dist/distributed/planner/exchange-placement.d.ts +19 -0
  46. package/dist/distributed/planner/expr-utils.d.ts +2 -0
  47. package/dist/distributed/planner/fragment.d.ts +47 -0
  48. package/dist/distributed/transport/chunk-codec.d.ts +18 -0
  49. package/dist/distributed/transport/http-transport.d.ts +49 -0
  50. package/dist/distributed/transport/transport.d.ts +13 -0
  51. package/dist/engine/query-engine.d.ts +142 -0
  52. package/dist/engine-entry.d.ts +12 -0
  53. package/dist/execution/builders/aggregate-builder.d.ts +46 -0
  54. package/dist/execution/builders/builder-utils.d.ts +5 -0
  55. package/dist/execution/builders/cte-builders.d.ts +20 -0
  56. package/dist/execution/builders/exchange-builders.d.ts +33 -0
  57. package/dist/execution/builders/join-builder.d.ts +67 -0
  58. package/dist/execution/builders/pipeline-builders.d.ts +30 -0
  59. package/dist/execution/builders/source-builders.d.ts +23 -0
  60. package/dist/execution/column-resolve.d.ts +7 -0
  61. package/dist/execution/execution-types.d.ts +33 -0
  62. package/dist/execution/expression-eval.d.ts +13 -0
  63. package/dist/execution/fragment-spec.d.ts +125 -0
  64. package/dist/execution/join-utils.d.ts +14 -0
  65. package/dist/execution/operator-registry.d.ts +9 -0
  66. package/dist/execution/operators/agg-wasm.d.ts +16 -0
  67. package/dist/execution/operators/dedup-core.d.ts +10 -0
  68. package/dist/execution/operators/dependent-join.d.ts +14 -0
  69. package/dist/execution/operators/distinct.d.ts +12 -0
  70. package/dist/execution/operators/filter.d.ts +87 -0
  71. package/dist/execution/operators/hash-aggregate.d.ts +121 -0
  72. package/dist/execution/operators/hash-join.d.ts +74 -0
  73. package/dist/execution/operators/index-scan.d.ts +34 -0
  74. package/dist/execution/operators/join-core.d.ts +47 -0
  75. package/dist/execution/operators/merge-join.d.ts +38 -0
  76. package/dist/execution/operators/nested-loop-join.d.ts +28 -0
  77. package/dist/execution/operators/projection.d.ts +20 -0
  78. package/dist/execution/operators/scan.d.ts +17 -0
  79. package/dist/execution/operators/sort.d.ts +48 -0
  80. package/dist/execution/operators/stream-aggregate.d.ts +30 -0
  81. package/dist/execution/operators/union.d.ts +13 -0
  82. package/dist/execution/operators/vector-aggregate.d.ts +73 -0
  83. package/dist/execution/operators/window.d.ts +22 -0
  84. package/dist/execution/physical-plan.d.ts +14 -0
  85. package/dist/execution/pipeline.d.ts +28 -0
  86. package/dist/execution/query-executor.d.ts +70 -0
  87. package/dist/execution/query-result.d.ts +15 -0
  88. package/dist/execution/result-sink.d.ts +26 -0
  89. package/dist/execution/scheduler.d.ts +8 -0
  90. package/dist/execution/vector-ops.d.ts +32 -0
  91. package/dist/execution/wasm-expr-eval.d.ts +7 -0
  92. package/dist/index.browser.js +17999 -0
  93. package/dist/index.cli.js +1002 -0
  94. package/dist/index.d.ts +20 -0
  95. package/dist/index.node.js +21432 -0
  96. package/dist/optimizer/dphyp/cardinality.d.ts +69 -0
  97. package/dist/optimizer/dphyp/cost-model.d.ts +47 -0
  98. package/dist/optimizer/dphyp/dphyp.d.ts +32 -0
  99. package/dist/optimizer/dphyp/hypergraph.d.ts +38 -0
  100. package/dist/optimizer/optimizer.d.ts +12 -0
  101. package/dist/optimizer/pass.d.ts +5 -0
  102. package/dist/optimizer/passes/aggregate-pushdown.d.ts +6 -0
  103. package/dist/optimizer/passes/cte-optimization.d.ts +6 -0
  104. package/dist/optimizer/passes/empty-propagation.d.ts +6 -0
  105. package/dist/optimizer/passes/expr-walk.d.ts +20 -0
  106. package/dist/optimizer/passes/expression-simplifier.d.ts +8 -0
  107. package/dist/optimizer/passes/filter-ordering.d.ts +13 -0
  108. package/dist/optimizer/passes/having-pushdown.d.ts +6 -0
  109. package/dist/optimizer/passes/index-selection.d.ts +24 -0
  110. package/dist/optimizer/passes/join-elimination.d.ts +6 -0
  111. package/dist/optimizer/passes/join-reorder.d.ts +12 -0
  112. package/dist/optimizer/passes/join-residual-split.d.ts +6 -0
  113. package/dist/optimizer/passes/limit-pushdown.d.ts +6 -0
  114. package/dist/optimizer/passes/node-merge.d.ts +6 -0
  115. package/dist/optimizer/passes/outer-to-inner.d.ts +6 -0
  116. package/dist/optimizer/passes/physical-design.d.ts +12 -0
  117. package/dist/optimizer/passes/plan-refs.d.ts +22 -0
  118. package/dist/optimizer/passes/predicate-dedup.d.ts +6 -0
  119. package/dist/optimizer/passes/predicate-inference.d.ts +6 -0
  120. package/dist/optimizer/passes/predicate-pushdown.d.ts +9 -0
  121. package/dist/optimizer/passes/projection-pushdown.d.ts +6 -0
  122. package/dist/optimizer/passes/sort-elimination.d.ts +6 -0
  123. package/dist/optimizer/passes/subquery-unnesting.d.ts +6 -0
  124. package/dist/optimizer/passes/topn-fusion.d.ts +6 -0
  125. package/dist/parallel/chunk-transport.d.ts +24 -0
  126. package/dist/parallel/fragment-pool.d.ts +49 -0
  127. package/dist/parallel/fragment-worker.d.ts +1 -0
  128. package/dist/parallel/morsel-scheduler.d.ts +11 -0
  129. package/dist/parallel/parallel-dispatch.d.ts +69 -0
  130. package/dist/parallel/partial-spill.d.ts +3 -0
  131. package/dist/parallel/worker-messages.d.ts +243 -0
  132. package/dist/parallel/worker-pool.d.ts +62 -0
  133. package/dist/parallel/worker-thread.d.ts +1 -0
  134. package/dist/parser/ast.d.ts +298 -0
  135. package/dist/parser/lexer.d.ts +135 -0
  136. package/dist/parser/parser.d.ts +64 -0
  137. package/dist/planner/logical-plan.d.ts +250 -0
  138. package/dist/planner/logical-planner.d.ts +23 -0
  139. package/dist/planner/plan-formatter.d.ts +4 -0
  140. package/dist/planner/plan-visitor.d.ts +58 -0
  141. package/dist/runtime/platform.d.ts +4 -0
  142. package/dist/storage/backend/memory-storage-backend.d.ts +14 -0
  143. package/dist/storage/backend/node-storage-backend.d.ts +11 -0
  144. package/dist/storage/btree.d.ts +34 -0
  145. package/dist/storage/buffer-pool.d.ts +17 -0
  146. package/dist/storage/chunk.d.ts +26 -0
  147. package/dist/storage/column.d.ts +38 -0
  148. package/dist/storage/data-type.d.ts +54 -0
  149. package/dist/storage/dictionary-column.d.ts +33 -0
  150. package/dist/storage/page-store/file-page-store.d.ts +13 -0
  151. package/dist/storage/page-store/memory-page-store.d.ts +9 -0
  152. package/dist/storage/sab-arena.d.ts +26 -0
  153. package/dist/storage/serializer.d.ts +6 -0
  154. package/dist/storage/spill-manager/fs-storage.d.ts +11 -0
  155. package/dist/storage/spill-manager/memory-storage.d.ts +10 -0
  156. package/dist/storage/spill-manager/spill-manager.d.ts +17 -0
  157. package/dist/storage/storage-constants.d.ts +3 -0
  158. package/dist/storage/table.d.ts +31 -0
  159. package/dist/storage/temp-space/memory-temp-space.d.ts +11 -0
  160. package/dist/storage/temp-space/temp-directory-manager.d.ts +14 -0
  161. package/dist/utils/bitmap.d.ts +11 -0
  162. package/dist/utils/hash.d.ts +1 -0
  163. package/dist/utils/lru-cache.d.ts +24 -0
  164. package/dist/utils/priority-queue.d.ts +18 -0
  165. package/dist/wasm/dispatch.d.ts +13 -0
  166. package/dist/wasm/fetch-byte-source.d.ts +2 -0
  167. package/dist/wasm/kernels/core-instance.d.ts +6 -0
  168. package/dist/wasm/kernels/kernel-factory.d.ts +8 -0
  169. package/dist/wasm/kernels/wasm-aggregate.d.ts +6 -0
  170. package/dist/wasm/kernels/wasm-arithmetic.d.ts +13 -0
  171. package/dist/wasm/kernels/wasm-filter-f64.d.ts +8 -0
  172. package/dist/wasm/kernels/wasm-filter.d.ts +5 -0
  173. package/dist/wasm/loader.d.ts +17 -0
  174. package/dist/wasm/node-byte-source.d.ts +1 -0
  175. package/dist/wasm/region-allocator.d.ts +23 -0
  176. package/dist/wasm/register-kernels.d.ts +1 -0
  177. package/dist/wasm/wasm-loader-base.d.ts +33 -0
  178. package/dist/wasm/wasm-types.d.ts +103 -0
  179. package/package.json +60 -0
@@ -0,0 +1,336 @@
1
+ import type { LogicalPlanNode, PlanNodeType } from '../planner/logical-plan.js';
2
+ import type { DataChunk } from '../storage/chunk.js';
3
+ import type { ColumnValue, DataType } from '../storage/data-type.js';
4
+ import type { BoundExpr } from '../binder/expression-binder.js';
5
+ import type { ExecSchema, ExecColumn } from '../execution/execution-types.js';
6
+ import type { FragmentSpec, JoinSpec } from '../execution/fragment-spec.js';
7
+ export type NodeId = string;
8
+ export type ChannelId = string;
9
+ export type FragmentId = number;
10
+ export type PartitionId = number;
11
+ export declare enum NodeRole {
12
+ COORDINATOR = "coordinator",
13
+ WORKER = "worker",
14
+ HYBRID = "hybrid"
15
+ }
16
+ export declare enum NodeStatus {
17
+ ALIVE = "alive",
18
+ SUSPECT = "suspect",
19
+ DEAD = "dead"
20
+ }
21
+ export declare enum StrategyType {
22
+ HASH = "hash",
23
+ RANGE = "range",
24
+ ROUND_ROBIN = "round_robin"
25
+ }
26
+ export declare enum DistributionStrategy {
27
+ COLOCATED = "colocated",
28
+ BROADCAST_LEFT = "broadcast_left",
29
+ BROADCAST_RIGHT = "broadcast_right",
30
+ SHUFFLE = "shuffle"
31
+ }
32
+ export declare enum ExchangeType {
33
+ HASH_SHUFFLE = "hash_shuffle",
34
+ BROADCAST = "broadcast",
35
+ GATHER = "gather",
36
+ PASSTHROUGH = "passthrough"
37
+ }
38
+ export declare enum FragmentState {
39
+ PENDING = "pending",
40
+ DISPATCHED = "dispatched",
41
+ RUNNING = "running",
42
+ COMPLETED = "completed",
43
+ FAILED = "failed",
44
+ CANCELLED = "cancelled"
45
+ }
46
+ export interface NodeCapacity {
47
+ cores: number;
48
+ memoryMb: number;
49
+ }
50
+ export interface NodeDescriptorJSON {
51
+ nodeId: NodeId;
52
+ host: string;
53
+ port: number;
54
+ role: NodeRole;
55
+ capacity: NodeCapacity;
56
+ status: NodeStatus;
57
+ partitions: string[];
58
+ }
59
+ export interface NodeAddress {
60
+ host: string;
61
+ port: number;
62
+ }
63
+ export interface ClusterSnapshot {
64
+ localNodeId: NodeId;
65
+ nodes: NodeDescriptorJSON[];
66
+ }
67
+ export interface PartitionAssignment {
68
+ node: NodeDescriptorJSON;
69
+ partitionIds: PartitionId[];
70
+ }
71
+ export type NodeStatusChange = (nodeId: NodeId, status: NodeStatus) => void;
72
+ export type NodeFailureCallback = (node: NodeDescriptorJSON) => void;
73
+ export type NodeJoinCallback = (descriptor: NodeDescriptorJSON) => void;
74
+ export interface NodeRegistration {
75
+ nodeId: NodeId;
76
+ host: string;
77
+ port: number;
78
+ role: NodeRole;
79
+ capacity: NodeCapacity;
80
+ partitions: string[];
81
+ }
82
+ export interface RegisterAck {
83
+ ok: boolean;
84
+ }
85
+ export interface HeartbeatMessage {
86
+ nodeId: NodeId;
87
+ timestamp: number;
88
+ }
89
+ export interface HeartbeatAck {
90
+ ts: number;
91
+ }
92
+ export interface StatusResponse {
93
+ status: 'alive';
94
+ nodeId: NodeId | null;
95
+ }
96
+ export declare const CHUNK_HEADER_MAGIC = 1363493704;
97
+ export interface EncodedChunkColumnHeader {
98
+ typeId: number;
99
+ isDictionary: boolean;
100
+ payloadSize: number;
101
+ }
102
+ export interface EncodedChunkEnvelope {
103
+ magic: typeof CHUNK_HEADER_MAGIC;
104
+ columnCount: number;
105
+ rowCount: number;
106
+ columns: EncodedChunkColumnHeader[];
107
+ }
108
+ export interface DecodedColumnMeta {
109
+ dataType: DataType;
110
+ isDictionary: boolean;
111
+ payloadSize: number;
112
+ }
113
+ export interface ExchangeChunkMessage {
114
+ channelId: ChannelId;
115
+ sourceNodeId: NodeId;
116
+ encodedChunk: Buffer;
117
+ }
118
+ export type ChunkReceivedCallback = (sourceNodeId: NodeId, encodedChunk: Buffer) => void;
119
+ export interface PendingChunk {
120
+ sourceNodeId: NodeId;
121
+ data: Buffer;
122
+ }
123
+ export declare enum ControlMessageType {
124
+ CANCEL_FRAGMENT = "cancel_fragment",
125
+ FRAGMENT_COMPLETED = "fragment_completed",
126
+ FRAGMENT_FAILED = "fragment_failed"
127
+ }
128
+ export interface CancelFragmentMessage {
129
+ type: ControlMessageType.CANCEL_FRAGMENT;
130
+ fragmentId: FragmentId;
131
+ }
132
+ export interface FragmentCompletedMessage {
133
+ type: ControlMessageType.FRAGMENT_COMPLETED;
134
+ fragmentId: FragmentId;
135
+ nodeId: NodeId;
136
+ }
137
+ export interface FragmentFailedMessage {
138
+ type: ControlMessageType.FRAGMENT_FAILED;
139
+ fragmentId: FragmentId;
140
+ error: string;
141
+ }
142
+ export type ControlMessage = CancelFragmentMessage | FragmentCompletedMessage | FragmentFailedMessage;
143
+ export type ControlMessageCallback = (message: ControlMessage) => void;
144
+ export type FragmentReceivedCallback = (fragment: FragmentDispatchJSON) => void;
145
+ export interface ExchangeInput {
146
+ sourceFragmentId: FragmentId;
147
+ exchangeType: ExchangeType;
148
+ keys?: BoundExpr[];
149
+ ordered?: boolean;
150
+ orderKeys?: DistributedOrderKey[];
151
+ }
152
+ export interface GatherPartitioning {
153
+ exchangeType: ExchangeType.GATHER;
154
+ partitionCount: number;
155
+ targetNodes?: NodeId[];
156
+ }
157
+ export interface BroadcastPartitioning {
158
+ exchangeType: ExchangeType.BROADCAST;
159
+ targetNodes: NodeId[];
160
+ partitionCount?: number;
161
+ }
162
+ export interface HashShufflePartitioning {
163
+ exchangeType: ExchangeType.HASH_SHUFFLE;
164
+ partitionCount: number;
165
+ targetNodes: NodeId[];
166
+ keyColumns: number[];
167
+ }
168
+ export type OutputPartitioning = GatherPartitioning | BroadcastPartitioning | HashShufflePartitioning;
169
+ export interface DistributedOrderKey {
170
+ expr?: BoundExpr;
171
+ columnIndex?: number;
172
+ direction?: string;
173
+ }
174
+ export interface FragmentDispatchJSON {
175
+ fragmentId: FragmentId;
176
+ planRoot: LogicalPlanNode;
177
+ targetNodes: NodeId[];
178
+ exchangeInputs: ExchangeInput[];
179
+ outputPartitioning: OutputPartitioning | null;
180
+ estimatedCardinality: number;
181
+ state: FragmentState;
182
+ coordinatorNodeId?: NodeId;
183
+ }
184
+ export interface FragmentExecutionResult {
185
+ fragmentId: FragmentId;
186
+ state: FragmentState.COMPLETED | FragmentState.FAILED;
187
+ rowCount: number;
188
+ }
189
+ export interface OutputConfig {
190
+ targetNodes: NodeId[];
191
+ exchangeType: ExchangeType;
192
+ partitionCount?: number;
193
+ keyColumns?: number[];
194
+ channelId: ChannelId;
195
+ keyExtractors?: KeyExtractor[];
196
+ }
197
+ export type KeyExtractor = (chunk: DataChunk, rowIdx: number) => ColumnValue;
198
+ export interface ExchangeSenderOptions {
199
+ exchangeType: ExchangeType;
200
+ keyExtractors: KeyExtractor[];
201
+ partitionCount: number;
202
+ channelId: ChannelId;
203
+ }
204
+ export interface ExchangeReceiverOptions {
205
+ channelId: ChannelId;
206
+ }
207
+ export interface MergeExchangeOptions {
208
+ orderKeys: DistributedOrderKey[];
209
+ limit: number | null;
210
+ channelId: ChannelId;
211
+ }
212
+ export interface PartitionTableInfo {
213
+ strategyType: StrategyType;
214
+ partitionCount: number;
215
+ partitionKey: string | null;
216
+ placements: Map<PartitionId, NodeId[]>;
217
+ }
218
+ export interface PartitionTableSnapshot {
219
+ strategyType: StrategyType;
220
+ partitionCount: number;
221
+ placements: Record<string, NodeId[]>;
222
+ }
223
+ export type PartitionMapSnapshot = Record<string, PartitionTableSnapshot>;
224
+ export type PartitionPlacements = Map<PartitionId, NodeId[]>;
225
+ export interface PartitionMovement {
226
+ partitionId: PartitionId;
227
+ from: NodeId;
228
+ to: NodeId;
229
+ }
230
+ export type PrunedPartitionSet = Set<PartitionId>;
231
+ export interface RangeBoundarySpec {
232
+ type: StrategyType.RANGE;
233
+ boundaries: ColumnValue[];
234
+ }
235
+ export interface HashStrategySpec {
236
+ type: StrategyType.HASH;
237
+ seed: number;
238
+ }
239
+ export interface RoundRobinStrategySpec {
240
+ type: StrategyType.ROUND_ROBIN;
241
+ }
242
+ export type PartitionStrategySpec = HashStrategySpec | RangeBoundarySpec | RoundRobinStrategySpec;
243
+ export interface PartitionKeyRef {
244
+ col: BoundExpr;
245
+ side: 'left' | 'right';
246
+ }
247
+ export interface JoinShuffleKeys {
248
+ leftKeys: BoundExpr[];
249
+ rightKeys: BoundExpr[];
250
+ }
251
+ export interface JoinShuffleKeyIndices {
252
+ leftIdx: number[];
253
+ rightIdx: number[];
254
+ }
255
+ export interface PassthroughSideExchange {
256
+ type: ExchangeType.PASSTHROUGH;
257
+ }
258
+ export interface BroadcastSideExchange {
259
+ type: ExchangeType.BROADCAST;
260
+ }
261
+ export interface ShuffleSideExchange {
262
+ type: ExchangeType.HASH_SHUFFLE;
263
+ keys: BoundExpr[];
264
+ partitionCount: number;
265
+ }
266
+ export type SideExchange = PassthroughSideExchange | BroadcastSideExchange | ShuffleSideExchange;
267
+ export interface JoinExchangePlacement {
268
+ left: SideExchange;
269
+ right: SideExchange;
270
+ }
271
+ export interface GatherAggregateExchange {
272
+ type: ExchangeType.GATHER;
273
+ }
274
+ export interface ShuffleAggregateExchange {
275
+ type: ExchangeType.HASH_SHUFFLE;
276
+ keys: BoundExpr[];
277
+ partitionCount: number;
278
+ }
279
+ export type AggregateExchange = GatherAggregateExchange | ShuffleAggregateExchange;
280
+ export interface SortExchange {
281
+ type: ExchangeType.GATHER;
282
+ ordered: true;
283
+ orderKeys: DistributedOrderKey[];
284
+ }
285
+ export interface AggregateDecomposition {
286
+ partial: string;
287
+ final: string;
288
+ }
289
+ export interface DistributedScanSchemaColumn {
290
+ name: string;
291
+ dataType: DataType | string;
292
+ tableAlias: string;
293
+ }
294
+ export type DistributedScanSchema = DistributedScanSchemaColumn[];
295
+ export interface FragmentProcessResult {
296
+ plan: LogicalPlanNode;
297
+ exchangeInputs: ExchangeInput[];
298
+ workerNodes: NodeId[];
299
+ }
300
+ export interface GatherPlacementResult {
301
+ plan: LogicalPlanNode;
302
+ exchangeInputs: ExchangeInput[];
303
+ }
304
+ export interface FragmentizeContext {
305
+ coordinatorId: NodeId;
306
+ }
307
+ export declare enum QueryStatus {
308
+ RUNNING = "running",
309
+ CANCELLED = "cancelled"
310
+ }
311
+ export interface FragmentStatusSummary {
312
+ fragmentId: FragmentId;
313
+ state: FragmentState;
314
+ assignedNode: NodeId | null;
315
+ }
316
+ export interface QueryStatusReport {
317
+ queryId: number;
318
+ status: QueryStatus;
319
+ elapsed: number;
320
+ fragments: FragmentStatusSummary[];
321
+ }
322
+ export interface DistributedQueryResult {
323
+ rows: ColumnValue[][];
324
+ columns: string[];
325
+ }
326
+ export type DistributedPlanNodeType = PlanNodeType.EXCHANGE | PlanNodeType.PARTIAL_AGGREGATE | PlanNodeType.FINAL_AGGREGATE | PlanNodeType.MERGE_EXCHANGE | PlanNodeType.EXCHANGE_RECEIVE;
327
+ export interface WorkerFragmentSpec {
328
+ fragmentId: FragmentId;
329
+ spec: FragmentSpec;
330
+ joinSpec: JoinSpec | null;
331
+ schema: ExecSchema;
332
+ }
333
+ export interface ExchangeChannelSchema {
334
+ channelId: ChannelId;
335
+ schema: ExecColumn[];
336
+ }
@@ -0,0 +1,53 @@
1
+ import { DistributedPlanner } from '../planner/distributed-planner.js';
2
+ import { FragmentExecutor } from './fragment-executor.js';
3
+ import { ResultSink } from '../../execution/result-sink.js';
4
+ import type { Fragment, FragmentPlan } from '../planner/fragment.js';
5
+ import type { QueryEngine } from '../../engine/query-engine.js';
6
+ import type { ClusterManager } from '../cluster/cluster-manager.js';
7
+ import type { Transport } from '../transport/transport.js';
8
+ import type { ExchangeReceiver } from './exchange-operator.js';
9
+ import type { LogicalPlanNode } from '../../planner/logical-plan.js';
10
+ import type { NodeId, FragmentId, OutputConfig, QueryStatus, QueryStatusReport, DistributedQueryResult } from '../distributed-types.js';
11
+ type DistributedPlannerArgs = ConstructorParameters<typeof DistributedPlanner>;
12
+ type PartitionMapLike = DistributedPlannerArgs[0];
13
+ type FragmentReceivers = Map<FragmentId, ExchangeReceiver>;
14
+ type FragmentExecuteResult = Awaited<ReturnType<FragmentExecutor['execute']>>;
15
+ interface RootFragmentResult {
16
+ sink: ResultSink;
17
+ }
18
+ interface ActiveQuery {
19
+ fragmentPlan: FragmentPlan;
20
+ startTime: number;
21
+ status: QueryStatus | 'running' | 'cancelled';
22
+ }
23
+ type DDLResultLike = ReturnType<QueryEngine['executeDDL']>;
24
+ export declare class QueryCoordinator {
25
+ _engine: QueryEngine;
26
+ _clusterManager: ClusterManager;
27
+ _partitionMap: PartitionMapLike;
28
+ _transport: Transport;
29
+ _activeQueries: Map<number, ActiveQuery>;
30
+ _fragmentExecutor: FragmentExecutor;
31
+ _nextQueryId: number;
32
+ constructor(queryEngine: QueryEngine, clusterManager: ClusterManager, partitionMap: PartitionMapLike, transport: Transport);
33
+ execute(sql: string): Promise<DistributedQueryResult | DDLResultLike>;
34
+ cancel(queryId: number): Promise<void>;
35
+ _executeFragmentPlan(fragmentPlan: FragmentPlan, queryId: number, timeout: number): Promise<void>;
36
+ _groupByDependencyLevel(fragments: Fragment[], fragmentPlan: FragmentPlan): Fragment[][];
37
+ _dispatchFragment(fragment: Fragment, fragmentPlan: FragmentPlan): Promise<void>;
38
+ _executeLocalFragment(fragment: Fragment, _fragmentPlan: FragmentPlan): Promise<void>;
39
+ _executeRemoteFragment(fragment: Fragment, targetNodeId: NodeId): Promise<void>;
40
+ _executeRootFragment(rootFragment: Fragment): Promise<FragmentExecuteResult>;
41
+ _executeRootFragmentWithReceivers(rootFragment: Fragment, receivers: FragmentReceivers): Promise<RootFragmentResult>;
42
+ _waitForFragmentCompletion(fragment: Fragment): Promise<void>;
43
+ _cancelFragment(fragment: Fragment): Promise<void>;
44
+ _selectTargetNode(fragment: Fragment): NodeId;
45
+ _buildOutputConfig(fragment: Fragment, targetNodeId?: NodeId): OutputConfig | null;
46
+ _reoptimize(plan: LogicalPlanNode): LogicalPlanNode;
47
+ _setupFragmentHandler(): void;
48
+ _handleFragmentCompleted(fragmentId: FragmentId): void;
49
+ _handleFragmentFailed(fragmentId: FragmentId, errorMessage: string): void;
50
+ getActiveQueryCount(): number;
51
+ getQueryStatus(queryId: number): QueryStatusReport | null;
52
+ }
53
+ export {};
@@ -0,0 +1,44 @@
1
+ import { ChunkCodec } from '../transport/chunk-codec.js';
2
+ import { DataChunk } from '../../storage/chunk.js';
3
+ import type { Transport } from '../transport/transport.js';
4
+ import type { NodeId, ChannelId, KeyExtractor, ExchangeType as ExchangeTypeEnum, ExchangeSenderOptions, ExchangeReceiverOptions, PartitionId } from '../distributed-types.js';
5
+ export declare class ExchangeSender {
6
+ _transport: Transport;
7
+ _targetNodes: NodeId[];
8
+ _exchangeType: ExchangeTypeEnum;
9
+ _keyExtractors: KeyExtractor[];
10
+ _partitionCount: number;
11
+ _channelId: ChannelId;
12
+ _codec: ChunkCodec;
13
+ _batchSize: number;
14
+ _closed: boolean;
15
+ constructor(transport: Transport, targetNodes: NodeId[], options?: Partial<ExchangeSenderOptions>);
16
+ get channelId(): ChannelId;
17
+ init(): Promise<void>;
18
+ consume(chunk: DataChunk): Promise<void>;
19
+ finalize(): Promise<void>;
20
+ _sendGather(chunk: DataChunk): Promise<void>;
21
+ _sendBroadcast(chunk: DataChunk): Promise<void>;
22
+ _sendShuffle(chunk: DataChunk): Promise<void>;
23
+ _partitionByKey(chunk: DataChunk): Map<PartitionId, DataChunk>;
24
+ }
25
+ export declare class ExchangeReceiver {
26
+ _transport: Transport;
27
+ _sourceNodes: NodeId[];
28
+ _channelId: ChannelId;
29
+ _codec: ChunkCodec;
30
+ _bufferCapacity: number;
31
+ _buffer: DataChunk[];
32
+ _completedSources: Set<NodeId>;
33
+ _resolveWaiter: (() => void) | null;
34
+ _done: boolean;
35
+ _error: Error | null;
36
+ _listening: boolean;
37
+ constructor(transport: Transport, sourceNodes: NodeId[], options?: Partial<ExchangeReceiverOptions>);
38
+ get channelId(): ChannelId;
39
+ init(): Promise<void>;
40
+ generate(): AsyncGenerator<DataChunk, void, void>;
41
+ cleanup(): void;
42
+ _handleChunk(sourceNodeId: NodeId, encodedChunk: Buffer): void;
43
+ _wake(): void;
44
+ }
@@ -0,0 +1,48 @@
1
+ import type { LogicalPlanNode } from '../../planner/logical-plan.js';
2
+ import { QueryExecutor } from '../../execution/query-executor.js';
3
+ import { ResultSink } from '../../execution/result-sink.js';
4
+ import { ExchangeSender } from './exchange-operator.js';
5
+ import { ExchangeReceiver } from './exchange-operator.js';
6
+ import type { Transport } from '../transport/transport.js';
7
+ import type { FragmentId, OutputConfig, ExchangeInput } from '../distributed-types.js';
8
+ type QueryExecutorArgs = ConstructorParameters<typeof QueryExecutor>;
9
+ type CatalogLike = QueryExecutorArgs[0];
10
+ type TempManagerLike = QueryExecutorArgs[1];
11
+ type StorageBackendLike = NonNullable<QueryExecutorArgs[2]>;
12
+ interface FragmentLike {
13
+ fragmentId: FragmentId;
14
+ planRoot: LogicalPlanNode;
15
+ exchangeInputs: ExchangeInput[];
16
+ markRunning(): void;
17
+ markCompleted(): void;
18
+ markFailed(error: Error): void;
19
+ markCancelled(): void;
20
+ }
21
+ interface CancelToken {
22
+ cancelled: boolean;
23
+ }
24
+ interface ActiveFragment {
25
+ fragment: FragmentLike;
26
+ cancelToken: CancelToken;
27
+ }
28
+ interface ExecuteResult {
29
+ sink: ResultSink;
30
+ sender: ExchangeSender | null;
31
+ receivers: Map<FragmentId, ExchangeReceiver>;
32
+ }
33
+ export declare class FragmentExecutor {
34
+ _catalog: CatalogLike;
35
+ _tempManager: TempManagerLike;
36
+ _transport: Transport;
37
+ _activeFragments: Map<FragmentId, ActiveFragment>;
38
+ _localExecutor: QueryExecutor;
39
+ constructor(catalog: CatalogLike, tempManager: TempManagerLike, transport: Transport, storageBackend: StorageBackendLike, options?: Record<string, never>);
40
+ execute(fragment: FragmentLike, outputConfig: OutputConfig | null): Promise<ExecuteResult>;
41
+ cancel(fragmentId: FragmentId): Promise<void>;
42
+ isRunning(fragmentId: FragmentId): boolean;
43
+ _executePlan(planRoot: LogicalPlanNode, sink: ResultSink, receivers: Map<FragmentId, ExchangeReceiver>, cancelToken: CancelToken): Promise<void>;
44
+ _setupReceivers(fragment: FragmentLike): Promise<Map<FragmentId, ExchangeReceiver>>;
45
+ _setupSender(outputConfig: OutputConfig): Promise<ExchangeSender>;
46
+ _cleanupReceivers(fragment: FragmentLike): void;
47
+ }
48
+ export {};
@@ -0,0 +1,55 @@
1
+ import { DataChunk } from '../../storage/chunk.js';
2
+ import { Column } from '../../storage/column.js';
3
+ import { ChunkCodec } from '../transport/chunk-codec.js';
4
+ import type { Transport } from '../transport/transport.js';
5
+ import type { NodeId, ChannelId, DistributedOrderKey, MergeExchangeOptions } from '../distributed-types.js';
6
+ interface ReadableChunk extends DataChunk {
7
+ _readIdx?: number;
8
+ }
9
+ interface HeapEntry {
10
+ nodeId: NodeId;
11
+ chunk: ReadableChunk;
12
+ rowIdx: number;
13
+ }
14
+ type EntryComparator = (a: HeapEntry, b: HeapEntry) => number;
15
+ export declare class MergeExchangeOperator {
16
+ _transport: Transport;
17
+ _sourceNodes: NodeId[];
18
+ _orderKeys: DistributedOrderKey[];
19
+ _limit: number | null;
20
+ _channelId: ChannelId;
21
+ _codec: ChunkCodec;
22
+ _buffers: Map<NodeId, ReadableChunk[]>;
23
+ _exhausted: Set<NodeId>;
24
+ _resolveWaiter: (() => void) | null;
25
+ _error: Error | null;
26
+ _listening: boolean;
27
+ constructor(transport: Transport, sourceNodes: NodeId[], options?: Partial<MergeExchangeOptions>);
28
+ get channelId(): ChannelId;
29
+ init(): Promise<void>;
30
+ generate(): AsyncGenerator<DataChunk, void, void>;
31
+ _computeRunLength(top: HeapEntry, heap: MinHeap): number;
32
+ _compareRowAgainst(chunk: ReadableChunk, rowIdx: number, entry: HeapEntry): number;
33
+ _compareRows(chunkA: ReadableChunk, rowA: number, chunkB: ReadableChunk, rowB: number): number;
34
+ _bulkCopy(srcChunk: ReadableChunk, srcStart: number, destCols: Column[], destStart: number, count: number): void;
35
+ cleanup(): void;
36
+ _handleChunk(sourceNodeId: NodeId, encodedChunk: Buffer): void;
37
+ _nextEntry(nodeId: NodeId): HeapEntry | null;
38
+ _ensureAllStreamsHaveData(): Promise<void>;
39
+ _waitForData(nodeId: NodeId): Promise<void>;
40
+ _wake(): void;
41
+ _compareEntries(a: HeapEntry, b: HeapEntry): number;
42
+ }
43
+ declare class MinHeap {
44
+ _data: HeapEntry[];
45
+ _compare: EntryComparator;
46
+ constructor(comparator: EntryComparator);
47
+ get size(): number;
48
+ push(item: HeapEntry): void;
49
+ pop(): HeapEntry | null;
50
+ peek(): HeapEntry | null;
51
+ _bubbleUp(idx: number): void;
52
+ _sinkDown(idx: number): void;
53
+ _swap(i: number, j: number): void;
54
+ }
55
+ export { MinHeap };
@@ -0,0 +1,6 @@
1
+ import { OptimizationPass } from '../../optimizer/pass.js';
2
+ import { type LogicalPlanNode } from '../../planner/logical-plan.js';
3
+ export declare class DistributedSortPass extends OptimizationPass {
4
+ get name(): string;
5
+ apply(plan: LogicalPlanNode): LogicalPlanNode;
6
+ }
@@ -0,0 +1,28 @@
1
+ import { OptimizationPass } from '../../optimizer/pass.js';
2
+ import type { LogicalPlanNode } from '../../planner/logical-plan.js';
3
+ interface TableStatisticsLike {
4
+ rowCount: number;
5
+ avgRowWidth: number;
6
+ }
7
+ interface PartitionTableInfoLike {
8
+ partitionKey: string | null;
9
+ }
10
+ interface PartitionMapLike {
11
+ getTableInfo(tableName: string): PartitionTableInfoLike | null;
12
+ isColocated(tableA: string, tableB: string): boolean;
13
+ }
14
+ export declare const DistributionStrategy: {
15
+ COLOCATED: string;
16
+ BROADCAST_LEFT: string;
17
+ BROADCAST_RIGHT: string;
18
+ SHUFFLE: string;
19
+ };
20
+ export declare class DistributionAwareJoin extends OptimizationPass {
21
+ _partitionMap: PartitionMapLike | null;
22
+ _statisticsMap: Map<string, TableStatisticsLike>;
23
+ _costPerByte: number;
24
+ constructor(partitionMap: PartitionMapLike | null, statisticsMap?: Map<string, TableStatisticsLike>);
25
+ get name(): string;
26
+ apply(plan: LogicalPlanNode): LogicalPlanNode;
27
+ }
28
+ export {};
@@ -0,0 +1,9 @@
1
+ import { OptimizationPass } from '../../optimizer/pass.js';
2
+ import { type LogicalPlanNode } from '../../planner/logical-plan.js';
3
+ import type { AggregateDecomposition } from '../distributed-types.js';
4
+ declare const DECOMPOSABLE_FUNCTIONS: Map<string, AggregateDecomposition>;
5
+ export declare class PartialAggregatePass extends OptimizationPass {
6
+ get name(): string;
7
+ apply(plan: LogicalPlanNode): LogicalPlanNode;
8
+ }
9
+ export { DECOMPOSABLE_FUNCTIONS };
@@ -0,0 +1,27 @@
1
+ import type { NodeId, PartitionId, PartitionPlacements, PartitionMovement, PartitionMapSnapshot, StrategyType as StrategyTypeEnum } from '../distributed-types.js';
2
+ interface PartitionStrategyLike {
3
+ readonly type: StrategyTypeEnum;
4
+ readonly _partitionKey?: string | null;
5
+ }
6
+ interface StoredTableInfo {
7
+ strategy: PartitionStrategyLike;
8
+ partitionCount: number;
9
+ partitionKey: string | null;
10
+ placements: PartitionPlacements;
11
+ }
12
+ export declare class PartitionMap {
13
+ private _tables;
14
+ constructor();
15
+ registerTable(tableName: string, strategy: PartitionStrategyLike, partitionCount: number, placements?: Iterable<[PartitionId, NodeId | NodeId[]]> | null): void;
16
+ getTableInfo(tableName: string): StoredTableInfo | null;
17
+ getPartitionCount(tableName: string): number;
18
+ getPartitionsForNode(tableName: string, nodeId: NodeId): PartitionId[];
19
+ getNodesForPartition(tableName: string, partitionId: PartitionId): NodeId[];
20
+ getAllPartitionIds(tableName: string): PartitionId[];
21
+ isColocated(tableA: string, tableB: string): boolean;
22
+ rebalance(tableName: string, newNodeIds: NodeId[]): PartitionPlacements;
23
+ _buildHashRing(nodeIds: NodeId[], partitionCount: number): Map<PartitionId, NodeId>;
24
+ computeMovements(tableName: string, oldPlacements: PartitionPlacements, newPlacements: PartitionPlacements): PartitionMovement[];
25
+ snapshot(): PartitionMapSnapshot;
26
+ }
27
+ export {};
@@ -0,0 +1,33 @@
1
+ import type { BoundExpr, LiteralValue } from '../../binder/expression-binder.js';
2
+ import type { ColumnValue } from '../../storage/data-type.js';
3
+ import type { PartitionId, PartitionKeyRef, PrunedPartitionSet } from '../distributed-types.js';
4
+ interface PartitionStrategyLike {
5
+ type: string;
6
+ partitionFor(key: LiteralValue, partitionCount?: number): PartitionId;
7
+ boundaries: ColumnValue[];
8
+ }
9
+ interface PartitionTableInfoLike {
10
+ strategy: PartitionStrategyLike;
11
+ partitionCount: number;
12
+ partitionKey: string | null;
13
+ }
14
+ interface PartitionMapLike {
15
+ getTableInfo(tableName: string): PartitionTableInfoLike | null;
16
+ }
17
+ export declare class PartitionPruner {
18
+ prune(tableName: string, predicate: BoundExpr | null | undefined, partitionMap: PartitionMapLike): PrunedPartitionSet;
19
+ _prunePredicate(expr: BoundExpr | null | undefined, info: PartitionTableInfoLike): PrunedPartitionSet | null;
20
+ _pruneEquality(expr: BoundExpr, info: PartitionTableInfoLike): PrunedPartitionSet | null;
21
+ _pruneRange(expr: BoundExpr, info: PartitionTableInfoLike): PrunedPartitionSet | null;
22
+ _pruneBetween(expr: BoundExpr, info: PartitionTableInfoLike): PrunedPartitionSet | null;
23
+ _pruneInList(expr: BoundExpr, info: PartitionTableInfoLike): PrunedPartitionSet | null;
24
+ _extractPartitionColumn(expr: BoundExpr, info: PartitionTableInfoLike): PartitionKeyRef | null;
25
+ _isPartitionKey(colRef: {
26
+ columnName: string;
27
+ }, info: PartitionTableInfoLike): boolean;
28
+ _flipOp(op: string): string;
29
+ _intersect(setA: PrunedPartitionSet, setB: PrunedPartitionSet): PrunedPartitionSet;
30
+ _union(setA: PrunedPartitionSet, setB: PrunedPartitionSet): PrunedPartitionSet;
31
+ _allPartitions(count: number): PrunedPartitionSet;
32
+ }
33
+ export {};