@sixb/ducklake 0.1.5 → 0.1.7

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 (34) hide show
  1. package/README.md +24 -26
  2. package/dist/ducklake-storage.d.ts +3 -1
  3. package/dist/ducklake-storage.d.ts.map +1 -1
  4. package/dist/index.js +1100 -661
  5. package/dist/index.js.map +22 -19
  6. package/dist/internal/duckdb-reader.d.ts +28 -0
  7. package/dist/internal/duckdb-reader.d.ts.map +1 -0
  8. package/dist/internal/duckdb-runtime.d.ts +5 -3
  9. package/dist/internal/duckdb-runtime.d.ts.map +1 -1
  10. package/dist/internal/ducklake-change-reader.d.ts +13 -0
  11. package/dist/internal/ducklake-change-reader.d.ts.map +1 -0
  12. package/dist/internal/ducklake-connection-manager.d.ts +19 -3
  13. package/dist/internal/ducklake-connection-manager.d.ts.map +1 -1
  14. package/dist/internal/ducklake-read-gate.d.ts +11 -0
  15. package/dist/internal/ducklake-read-gate.d.ts.map +1 -0
  16. package/dist/internal/ducklake-row-reader.d.ts.map +1 -1
  17. package/dist/internal/ducklake-snapshot-reader.d.ts.map +1 -1
  18. package/dist/internal/ducklake-write-coordinator.d.ts +2 -1
  19. package/dist/internal/ducklake-write-coordinator.d.ts.map +1 -1
  20. package/dist/types.d.ts +2 -0
  21. package/dist/types.d.ts.map +1 -1
  22. package/package.json +4 -4
  23. package/src/ducklake-storage.ts +13 -0
  24. package/src/internal/duckdb-reader.ts +129 -0
  25. package/src/internal/duckdb-runtime.ts +75 -51
  26. package/src/internal/ducklake-change-reader.ts +157 -0
  27. package/src/internal/ducklake-connection-manager.ts +117 -33
  28. package/src/internal/ducklake-maintenance.ts +1 -1
  29. package/src/internal/ducklake-read-gate.ts +58 -0
  30. package/src/internal/ducklake-row-reader.ts +84 -63
  31. package/src/internal/ducklake-snapshot-reader.ts +7 -2
  32. package/src/internal/ducklake-write-coordinator.ts +56 -15
  33. package/src/internal/ducklake-write-session.ts +1 -0
  34. package/src/types.ts +2 -0
@@ -0,0 +1,28 @@
1
+ import type { DuckDBConnection } from "@duckdb/node-api";
2
+ /** One native query, on a connection belonging to the runtime's shared instance. */
3
+ export interface DuckDbReader {
4
+ rows(): AsyncIterable<Record<string, unknown>>;
5
+ close(): Promise<void>;
6
+ }
7
+ export interface DuckDbReaderOptions {
8
+ readonly signal?: AbortSignal;
9
+ readonly onClose?: () => Promise<void>;
10
+ }
11
+ export declare class NodeDuckDbReader implements DuckDbReader {
12
+ private readonly connection;
13
+ private readonly options;
14
+ private resultPromise;
15
+ private pending;
16
+ private closePromise;
17
+ private finished;
18
+ private consumed;
19
+ private readonly onAbort;
20
+ constructor(connection: DuckDBConnection, options: DuckDbReaderOptions);
21
+ start(sql: string): Promise<void>;
22
+ rows(): AsyncIterable<Record<string, unknown>>;
23
+ close(): Promise<void>;
24
+ private finish;
25
+ private track;
26
+ private assertOpen;
27
+ }
28
+ //# sourceMappingURL=duckdb-reader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"duckdb-reader.d.ts","sourceRoot":"","sources":["../../src/internal/duckdb-reader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAgB,MAAM,kBAAkB,CAAA;AAItE,oFAAoF;AACpF,MAAM,WAAW,YAAY;IAC3B,IAAI,IAAI,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;IAC9C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CACvB;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAA;IAC7B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CACvC;AAED,qBAAa,gBAAiB,YAAW,YAAY;IAajD,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,OAAO;IAb1B,OAAO,CAAC,aAAa,CAAmC;IACxD,OAAO,CAAC,OAAO,CAA8B;IAC7C,OAAO,CAAC,YAAY,CAA2B;IAC/C,OAAO,CAAC,QAAQ,CAAQ;IACxB,OAAO,CAAC,QAAQ,CAAQ;IACxB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAIvB;gBAGkB,UAAU,EAAE,gBAAgB,EAC5B,OAAO,EAAE,mBAAmB;IAGzC,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAwBhC,IAAI,IAAI,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IA6BrD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YASR,MAAM;YAkBN,KAAK;IAYnB,OAAO,CAAC,UAAU;CAInB"}
@@ -1,11 +1,12 @@
1
1
  import { type DuckDBValue } from "@duckdb/node-api";
2
2
  import type { DuckDbRuntimeOptions, DuckLakeStorageOptions } from "../types";
3
+ import { type DuckDbReader, type DuckDbReaderOptions } from "./duckdb-reader";
3
4
  /**
4
5
  * Narrow adapter around `@duckdb/node-api`.
5
6
  *
6
7
  * Keeping the public provider behind this interface confines the driver types to
7
- * this module instead of leaking them into `DuckLakeStorage`. Calls on a runtime
8
- * are serialized through one queue because a runtime owns one DuckDB connection.
8
+ * this module instead of leaking them into `DuckLakeStorage`. Main-connection calls
9
+ * share one queue; readers use separate connections to the same DuckDB instance.
9
10
  */
10
11
  export interface DuckDbQueryRuntime {
11
12
  run(sql: string, values?: readonly DuckDBValue[]): Promise<void>;
@@ -14,7 +15,8 @@ export interface DuckDbQueryRuntime {
14
15
  withAppender<T>(tableName: string, useAppender: (appender: DuckDbAppender) => T | Promise<T>): Promise<T>;
15
16
  }
16
17
  export interface DuckDbRuntime extends DuckDbQueryRuntime {
17
- streamRows(sql: string, values?: readonly DuckDBValue[]): AsyncIterable<Record<string, unknown>>;
18
+ openReader(sql: string, options?: DuckDbReaderOptions): Promise<DuckDbReader>;
19
+ stopReaders(): Promise<void>;
18
20
  /**
19
21
  * Reserve the runtime queue for a multi-statement critical section.
20
22
  *
@@ -1 +1 @@
1
- {"version":3,"file":"duckdb-runtime.d.ts","sourceRoot":"","sources":["../../src/internal/duckdb-runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,WAAW,EAEjB,MAAM,kBAAkB,CAAA;AAEzB,OAAO,KAAK,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAA;AAW5E;;;;;;GAMG;AACH,MAAM,WAAW,kBAAkB;IACjC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,SAAS,WAAW,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAChE,aAAa,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC3D,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,SAAS,WAAW,EAAE,GAAG,OAAO,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,CAAA;IAChG,YAAY,CAAC,CAAC,EACZ,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,CAAC,QAAQ,EAAE,cAAc,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GACxD,OAAO,CAAC,CAAC,CAAC,CAAA;CACd;AAED,MAAM,WAAW,aAAc,SAAQ,kBAAkB;IACvD,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,SAAS,WAAW,EAAE,GAAG,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;IAChG;;;;;OAKG;IACH,aAAa,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,OAAO,EAAE,sBAAsB,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;IACzF,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CACvB;AAED;;;;;GAKG;AACH,MAAM,MAAM,sBAAsB,GAAG,kBAAkB,CAAA;AAEvD,MAAM,WAAW,cAAc;IAC7B,UAAU,IAAI,IAAI,CAAA;IAClB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAAA;IACnC,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IAClC,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACjC,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACjC,YAAY,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,GAAG,IAAI,CAAA;IAChE,MAAM,IAAI,IAAI,CAAA;CACf;AAED,UAAU,oBAAoB;IAC5B,QAAQ,CAAC,iBAAiB,CAAC,EAAE,OAAO,CAAA;IACpC,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAC1B;AAsND;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,aAAa,CAAC,CAGxB;AAED;;;;GAIG;AACH,wBAAsB,yBAAyB,CAC7C,OAAO,EAAE,aAAa,EACtB,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,IAAI,CAAC,CAMf;AAED;;;GAGG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,aAAa,EACtB,OAAO,EAAE,sBAAsB,EAC/B,YAAY,GAAE,oBAAyB,GACtC,OAAO,CAAC,IAAI,CAAC,CA8Bf"}
1
+ {"version":3,"file":"duckdb-runtime.d.ts","sourceRoot":"","sources":["../../src/internal/duckdb-runtime.ts"],"names":[],"mappings":"AAEA,OAAO,EAGL,KAAK,WAAW,EAEjB,MAAM,kBAAkB,CAAA;AAEzB,OAAO,KAAK,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAA;AAC5E,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,mBAAmB,EAAoB,MAAM,iBAAiB,CAAA;AAW/F;;;;;;GAMG;AACH,MAAM,WAAW,kBAAkB;IACjC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,SAAS,WAAW,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAChE,aAAa,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC3D,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,SAAS,WAAW,EAAE,GAAG,OAAO,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,CAAA;IAChG,YAAY,CAAC,CAAC,EACZ,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,CAAC,QAAQ,EAAE,cAAc,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GACxD,OAAO,CAAC,CAAC,CAAC,CAAA;CACd;AAED,MAAM,WAAW,aAAc,SAAQ,kBAAkB;IACvD,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,YAAY,CAAC,CAAA;IAC7E,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IAC5B;;;;;OAKG;IACH,aAAa,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,OAAO,EAAE,sBAAsB,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;IACzF,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CACvB;AAED;;;;;GAKG;AACH,MAAM,MAAM,sBAAsB,GAAG,kBAAkB,CAAA;AAEvD,MAAM,WAAW,cAAc;IAC7B,UAAU,IAAI,IAAI,CAAA;IAClB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAAA;IACnC,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IAClC,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACjC,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACjC,YAAY,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,GAAG,IAAI,CAAA;IAChE,MAAM,IAAI,IAAI,CAAA;CACf;AAED,UAAU,oBAAoB;IAC5B,QAAQ,CAAC,iBAAiB,CAAC,EAAE,OAAO,CAAA;IACpC,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAC1B;AAsND;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,aAAa,CAAC,CAuBxB;AAED;;;;GAIG;AACH,wBAAsB,yBAAyB,CAC7C,OAAO,EAAE,aAAa,EACtB,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,IAAI,CAAC,CAMf;AAED;;;GAGG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,aAAa,EACtB,OAAO,EAAE,sBAAsB,EAC/B,YAAY,GAAE,oBAAyB,GACtC,OAAO,CAAC,IAAI,CAAC,CA8Bf"}
@@ -0,0 +1,13 @@
1
+ import { type DatasetChanges, type ReadDatasetChangesInput } from "@sixb/core/lake-storage";
2
+ import type { DuckLakeStorageOptions } from "../types";
3
+ import type { DuckLakeConnectionManager } from "./ducklake-connection-manager";
4
+ import type { DuckLakeSnapshotReader } from "./ducklake-snapshot-reader";
5
+ /** Compare once in DuckDB, then page only the delta without holding the connection between yields. */
6
+ export declare class DuckLakeChangeReader {
7
+ private readonly options;
8
+ private readonly connections;
9
+ private readonly snapshots;
10
+ constructor(options: DuckLakeStorageOptions, connections: DuckLakeConnectionManager, snapshots: DuckLakeSnapshotReader);
11
+ readChanges(input: ReadDatasetChangesInput): Promise<DatasetChanges | null>;
12
+ }
13
+ //# sourceMappingURL=ducklake-change-reader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ducklake-change-reader.d.ts","sourceRoot":"","sources":["../../src/internal/ducklake-change-reader.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,cAAc,EAGnB,KAAK,uBAAuB,EAE7B,MAAM,yBAAyB,CAAA;AAChC,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAA;AAGtD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAA;AAE9E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAA;AAOxE,sGAAsG;AACtG,qBAAa,oBAAoB;IAE7B,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,SAAS;gBAFT,OAAO,EAAE,sBAAsB,EAC/B,WAAW,EAAE,yBAAyB,EACtC,SAAS,EAAE,sBAAsB;IAG9C,WAAW,CAAC,KAAK,EAAE,uBAAuB,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;CA2FlF"}
@@ -1,4 +1,5 @@
1
1
  import type { DuckLakeStorageOptions } from "../types";
2
+ import type { DuckDbReader } from "./duckdb-reader";
2
3
  import { type DuckDbExclusiveRuntime, type DuckDbQueryRuntime, type DuckDbRuntime } from "./duckdb-runtime";
3
4
  export interface DuckLakeAttachedRuntimeLease {
4
5
  readonly runtime: DuckDbRuntime;
@@ -18,12 +19,26 @@ export declare class DuckLakeConnectionManager {
18
19
  private installExtensionsPromise;
19
20
  private attachPromise;
20
21
  private refreshPromise;
21
- private localAttachmentLock;
22
+ private attachmentLock;
22
23
  private observedLocalCatalogGeneration;
23
24
  private attached;
24
25
  private closed;
26
+ private closePromise;
25
27
  private runtimePoisoned;
28
+ private pinnedReaders;
29
+ private refreshRequested;
30
+ private readonly shutdown;
31
+ private readonly reads;
32
+ private readonly maxStreamingReads;
26
33
  constructor(options: DuckLakeStorageOptions);
34
+ acquireRead(signal?: AbortSignal): Promise<{
35
+ readonly signal: AbortSignal;
36
+ readonly release: () => void;
37
+ }>;
38
+ private nativeReaderLimit;
39
+ /** Caller holds an attachment lease until this query has started. */
40
+ openReader(runtime: DuckDbRuntime, sql: string, signal: AbortSignal, releaseRead: () => void): Promise<DuckDbReader | null>;
41
+ withMaintenanceRuntime<T>(run: (runtime: DuckDbExclusiveRuntime) => Promise<T>): Promise<T>;
27
42
  assertOpen(): void;
28
43
  runtime(): Promise<DuckDbRuntime>;
29
44
  attachedRuntime(): Promise<DuckDbRuntime>;
@@ -45,6 +60,7 @@ export declare class DuckLakeConnectionManager {
45
60
  private refreshForExternalChangesUnlocked;
46
61
  private needsLocalCatalogRefresh;
47
62
  close(): Promise<void>;
63
+ private finishClose;
48
64
  private ensureAttached;
49
65
  private ensureExtensionsInstalled;
50
66
  private attachRuntime;
@@ -59,8 +75,8 @@ export declare class DuckLakeConnectionManager {
59
75
  private detachDuckDbCatalogAfterLease;
60
76
  private discardRuntimeUnlocked;
61
77
  private detachRuntimeUnlocked;
62
- private withLocalAttachmentLock;
63
- private acquireLocalAttachmentLock;
78
+ private withAttachmentLock;
79
+ private acquireAttachmentLock;
64
80
  private closeRuntimePromise;
65
81
  private closeRuntime;
66
82
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ducklake-connection-manager.d.ts","sourceRoot":"","sources":["../../src/internal/ducklake-connection-manager.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAA;AAEtD,OAAO,EAEL,KAAK,sBAAsB,EAC3B,KAAK,kBAAkB,EACvB,KAAK,aAAa,EAGnB,MAAM,kBAAkB,CAAA;AAQzB,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAA;IAC/B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CACzB;AAED;;;;;;;GAOG;AACH,qBAAa,yBAAyB;IAcxB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAbpC,OAAO,CAAC,cAAc,CAAoC;IAC1D,OAAO,CAAC,wBAAwB,CAA2B;IAC3D,OAAO,CAAC,aAAa,CAA2B;IAChD,OAAO,CAAC,cAAc,CAA2B;IAIjD,OAAO,CAAC,mBAAmB,CAAmC;IAC9D,OAAO,CAAC,8BAA8B,CAAQ;IAC9C,OAAO,CAAC,QAAQ,CAAQ;IACxB,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,eAAe,CAAQ;gBAEF,OAAO,EAAE,sBAAsB;IAI5D,UAAU,IAAI,IAAI;IAMZ,OAAO,IAAI,OAAO,CAAC,aAAa,CAAC;IAgBjC,eAAe,IAAI,OAAO,CAAC,aAAa,CAAC;IAMzC,mBAAmB,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAS/E,sBAAsB,IAAI,OAAO,CAAC,4BAA4B,CAAC;IAoC/D,qBAAqB,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,sBAAsB,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAS1F,cAAc,IAAI,OAAO,CAAC,aAAa,CAAC;IAa9C;;;;OAIG;IACG,aAAa,IAAI,OAAO,CAAC,aAAa,CAAC;IAoBvC,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;YASrB,oBAAoB;IAuC5B,yBAAyB,IAAI,OAAO,CAAC,IAAI,CAAC;IAwBhD,uBAAuB,IAAI,IAAI;IAQzB,6BAA6B,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;YAgBjE,iCAAiC;IAW/C,OAAO,CAAC,wBAAwB;IAI1B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YAkBd,cAAc;YAgCd,yBAAyB;YAgBzB,aAAa;YASb,sBAAsB;YAUtB,aAAa;IAI3B;;;;OAIG;IACH,aAAa,IAAI,IAAI;YAIP,6BAA6B;YAmB7B,sBAAsB;YAOtB,qBAAqB;YAcrB,uBAAuB;YASvB,0BAA0B;YAyB1B,mBAAmB;YAqBnB,YAAY;CAe3B"}
1
+ {"version":3,"file":"ducklake-connection-manager.d.ts","sourceRoot":"","sources":["../../src/internal/ducklake-connection-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /** Keeps destructive maintenance outside reads, including paged overflow readers. */
2
+ export declare class DuckLakeReadGate {
3
+ private active;
4
+ private maintenance;
5
+ private readonly waiters;
6
+ acquire(signal: AbortSignal): Promise<() => void>;
7
+ withMaintenance<T>(signal: AbortSignal, run: () => Promise<T>): Promise<T>;
8
+ private wait;
9
+ private wake;
10
+ }
11
+ //# sourceMappingURL=ducklake-read-gate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ducklake-read-gate.d.ts","sourceRoot":"","sources":["../../src/internal/ducklake-read-gate.ts"],"names":[],"mappings":"AAAA,qFAAqF;AACrF,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAI;IAClB,OAAO,CAAC,WAAW,CAAQ;IAC3B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAwB;IAE1C,OAAO,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC;IAiBjD,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAchF,OAAO,CAAC,IAAI;IAiBZ,OAAO,CAAC,IAAI;CAGb"}
@@ -1 +1 @@
1
- {"version":3,"file":"ducklake-row-reader.d.ts","sourceRoot":"","sources":["../../src/internal/ducklake-row-reader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAA2B,UAAU,EAAE,MAAM,YAAY,CAAA;AACrE,OAAO,KAAK,EAAkB,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AAEnF,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAA;AAGtD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAA;AAE9E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAA;AAYxE;;;;;;GAMG;AACH,qBAAa,iBAAiB;IAE1B,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,SAAS;gBAFT,OAAO,EAAE,sBAAsB,EAC/B,WAAW,EAAE,yBAAyB,EACtC,SAAS,EAAE,sBAAsB;IAG7C,QAAQ,CAAC,KAAK,EAAE,oBAAoB,GAAG,aAAa,CAAC,UAAU,CAAC;YAoExD,aAAa;YAad,cAAc;IAuB5B,OAAO,CAAC,kBAAkB;IAuB1B,OAAO,CAAC,uBAAuB;CAKhC"}
1
+ {"version":3,"file":"ducklake-row-reader.d.ts","sourceRoot":"","sources":["../../src/internal/ducklake-row-reader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAA2B,UAAU,EAAE,MAAM,YAAY,CAAA;AACrE,OAAO,KAAK,EAAkB,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AAEnF,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAA;AAItD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAA;AAE9E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAA;AASxE;;;;;;GAMG;AACH,qBAAa,iBAAiB;IAE1B,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,SAAS;gBAFT,OAAO,EAAE,sBAAsB,EAC/B,WAAW,EAAE,yBAAyB,EACtC,SAAS,EAAE,sBAAsB;IAG7C,QAAQ,CAAC,KAAK,EAAE,oBAAoB,GAAG,aAAa,CAAC,UAAU,CAAC;YA4ExD,aAAa;YAed,cAAc;IAuB5B,OAAO,CAAC,kBAAkB;IAuB1B,OAAO,CAAC,uBAAuB;CAKhC"}
@@ -1 +1 @@
1
- {"version":3,"file":"ducklake-snapshot-reader.d.ts","sourceRoot":"","sources":["../../src/internal/ducklake-snapshot-reader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ducklake-snapshot-reader.d.ts","sourceRoot":"","sources":["../../src/internal/ducklake-snapshot-reader.ts"],"names":[],"mappings":"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"}
@@ -49,7 +49,8 @@ export declare class DuckLakeWriteCoordinator {
49
49
  private ensureNoOpHasSnapshot;
50
50
  private versionForNoOpCommit;
51
51
  private rollbackTransaction;
52
- private latestVersionForCommit;
52
+ private beginVersionTransaction;
53
+ private currentSnapshotId;
53
54
  private lastCommittedSnapshotId;
54
55
  private findSnapshotIdByCommitId;
55
56
  private findOwnSnapshotId;
@@ -1 +1 @@
1
- {"version":3,"file":"ducklake-write-coordinator.d.ts","sourceRoot":"","sources":["../../src/internal/ducklake-write-coordinator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AACnD,OAAO,KAAK,EACV,sBAAsB,EACtB,sBAAsB,EAGtB,wBAAwB,EACxB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EACjB,MAAM,yBAAyB,CAAA;AAShC,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAA;AAEtD,OAAO,EACL,KAAK,sBAAsB,EAI5B,MAAM,sBAAsB,CAAA;AAG7B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AAC1D,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAA;AAC9E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAA;AAExE,OAAO,KAAK,EAAE,sBAAsB,EAA0B,MAAM,4BAA4B,CAAA;AAYhG,MAAM,WAAW,iCAAiC;IAChD,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CAAA;IACnC,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAA;IAC/B,QAAQ,CAAC,uBAAuB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAChD,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAA;IAC9B,QAAQ,CAAC,QAAQ,CAAC,EAAE,sBAAsB,CAAC,UAAU,CAAC,CAAA;IACtD,QAAQ,CAAC,MAAM,CAAC,EAAE,sBAAsB,CAAC,QAAQ,CAAC,CAAA;IAClD,YAAY,CACV,OAAO,EAAE,kBAAkB,EAC3B,OAAO,EAAE,2BAA2B,GACnC,OAAO,CAAC,sBAAsB,CAAC,CAAA;CACnC;AAgBD,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;IAClC,QAAQ,CAAC,0BAA0B,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CACxD;AAED;;;;;;;GAOG;AACH,qBAAa,wBAAwB;IAEjC,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,SAAS;gBAHT,OAAO,EAAE,sBAAsB,EAC/B,WAAW,EAAE,yBAAyB,EACtC,QAAQ,EAAE,sBAAsB,EAChC,SAAS,EAAE,sBAAsB;IAG9C,UAAU,CAAC,KAAK,EAAE,sBAAsB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IA6BpE,UAAU,CAAC,KAAK,EAAE,sBAAsB,GAAG,OAAO,CAAC,gBAAgB,CAAC;YAkC5D,WAAW;YAyBX,WAAW;IAoDnB,oBAAoB,CACxB,KAAK,EAAE,iCAAiC,GACvC,OAAO,CAAC,wBAAwB,CAAC;IAM9B,iBAAiB,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,kBAAkB,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAQlF,sCAAsC,CAC1C,OAAO,EAAE,kBAAkB,EAC3B,KAAK,EAAE,iCAAiC,GACvC,OAAO,CAAC,wBAAwB,CAAC;YAkBtB,sCAAsC;YAUtC,uBAAuB;YA2CvB,4BAA4B;YA8E5B,wBAAwB;YAiExB,eAAe;YAyBf,iBAAiB;YAkCjB,qBAAqB;YA8BrB,oBAAoB;YAmBpB,mBAAmB;YASnB,sBAAsB;YAUtB,uBAAuB;YAYvB,wBAAwB;YAiCxB,iBAAiB;IA0B/B,OAAO,CAAC,2BAA2B;CAgBpC"}
1
+ {"version":3,"file":"ducklake-write-coordinator.d.ts","sourceRoot":"","sources":["../../src/internal/ducklake-write-coordinator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AACnD,OAAO,KAAK,EACV,sBAAsB,EACtB,sBAAsB,EAGtB,wBAAwB,EACxB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EACjB,MAAM,yBAAyB,CAAA;AAShC,OAAO,KAAK,EAA0B,sBAAsB,EAAE,MAAM,UAAU,CAAA;AAE9E,OAAO,EACL,KAAK,sBAAsB,EAI5B,MAAM,sBAAsB,CAAA;AAG7B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AAC1D,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAA;AAC9E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAA;AAExE,OAAO,KAAK,EAAE,sBAAsB,EAA0B,MAAM,4BAA4B,CAAA;AAYhG,MAAM,WAAW,iCAAiC;IAChD,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CAAA;IACnC,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAA;IAC/B,QAAQ,CAAC,uBAAuB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAChD,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAA;IAC9B,QAAQ,CAAC,QAAQ,CAAC,EAAE,sBAAsB,CAAC,UAAU,CAAC,CAAA;IACtD,QAAQ,CAAC,MAAM,CAAC,EAAE,sBAAsB,CAAC,QAAQ,CAAC,CAAA;IAClD,YAAY,CACV,OAAO,EAAE,kBAAkB,EAC3B,OAAO,EAAE,2BAA2B,GACnC,OAAO,CAAC,sBAAsB,CAAC,CAAA;CACnC;AAgBD,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;IAClC,QAAQ,CAAC,0BAA0B,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CACxD;AAED;;;;;;;GAOG;AACH,qBAAa,wBAAwB;IAEjC,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,SAAS;gBAHT,OAAO,EAAE,sBAAsB,EAC/B,WAAW,EAAE,yBAAyB,EACtC,QAAQ,EAAE,sBAAsB,EAChC,SAAS,EAAE,sBAAsB;IAG9C,UAAU,CAAC,KAAK,EAAE,sBAAsB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IA6BpE,UAAU,CAAC,KAAK,EAAE,sBAAsB,GAAG,OAAO,CAAC,gBAAgB,CAAC;YAkC5D,WAAW;YAyBX,WAAW;IAoDnB,oBAAoB,CACxB,KAAK,EAAE,iCAAiC,GACvC,OAAO,CAAC,wBAAwB,CAAC;IAM9B,iBAAiB,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,kBAAkB,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAQlF,sCAAsC,CAC1C,OAAO,EAAE,kBAAkB,EAC3B,KAAK,EAAE,iCAAiC,GACvC,OAAO,CAAC,wBAAwB,CAAC;YAkBtB,sCAAsC;YAUtC,uBAAuB;YA2CvB,4BAA4B;YA6E5B,wBAAwB;YAiExB,eAAe;YAyBf,iBAAiB;YAkCjB,qBAAqB;YA+BrB,oBAAoB;YAmBpB,mBAAmB;YASnB,uBAAuB;YAmCvB,iBAAiB;YAUjB,uBAAuB;YAYvB,wBAAwB;YAiCxB,iBAAiB;IA0B/B,OAAO,CAAC,2BAA2B;CAgBpC"}
package/dist/types.d.ts CHANGED
@@ -137,6 +137,8 @@ export interface DuckLakeStorageOptions {
137
137
  readonly alias?: string;
138
138
  readonly duckdb?: DuckDbRuntimeOptions;
139
139
  readonly postgresPool?: DuckLakePostgresPoolOptions;
140
+ /** Maximum native streaming readers per provider; extra reads use pages. Default: 4. */
141
+ readonly maxStreamingReads?: number;
140
142
  readonly secrets?: readonly DuckDbSecretOptions[];
141
143
  /** Runs after DuckLake/catalog extensions load and before ATTACH. */
142
144
  readonly setupSql?: readonly string[];
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sixb/ducklake",
3
- "version": "0.1.5",
3
+ "version": "0.1.7",
4
4
  "description": "DuckDB/DuckLake lake storage provider for Sixb",
5
5
  "keywords": [
6
6
  "sixb",
@@ -36,7 +36,7 @@
36
36
  "typecheck": "tsc --noEmit",
37
37
  "test": "bun test",
38
38
  "test:e2e": "bun run test:e2e:local && bun run test:e2e:remote",
39
- "test:e2e:local": "bun test ./tests/ducklake-contract.e2e.ts ./tests/ducklake-file-refs.e2e.ts ./tests/ducklake-catalog-state.e2e.ts ./tests/ducklake-catalogs.e2e.ts ./tests/ducklake-concurrency.e2e.ts ./tests/ducklake-datasets.e2e.ts ./tests/ducklake-driver.e2e.ts ./tests/ducklake-maintenance.e2e.ts ./tests/ducklake-merges.e2e.ts ./tests/ducklake-sql-transforms.e2e.ts ./tests/ducklake-versions.e2e.ts ./tests/ducklake-writes.e2e.ts",
39
+ "test:e2e:local": "bun test ./tests/ducklake-reader.e2e.ts ./tests/ducklake-changes.e2e.ts ./tests/ducklake-contract.e2e.ts ./tests/ducklake-file-refs.e2e.ts ./tests/ducklake-catalog-state.e2e.ts ./tests/ducklake-catalogs.e2e.ts ./tests/ducklake-concurrency.e2e.ts ./tests/ducklake-datasets.e2e.ts ./tests/ducklake-driver.e2e.ts ./tests/ducklake-maintenance.e2e.ts ./tests/ducklake-merges.e2e.ts ./tests/ducklake-sql-transforms.e2e.ts ./tests/ducklake-versions.e2e.ts ./tests/ducklake-writes.e2e.ts ./tests/ducklake-sqlite-writes.e2e.ts",
40
40
  "test:e2e:remote": "bun test --preload ./tests/setup.ts ./tests/ducklake-remote.e2e.ts",
41
41
  "prepack": "bun run build"
42
42
  },
@@ -44,10 +44,10 @@
44
44
  "@duckdb/node-api": "^1.5.2-r.1"
45
45
  },
46
46
  "peerDependencies": {
47
- "@sixb/core": "^0.1.9"
47
+ "@sixb/core": "^0.1.11"
48
48
  },
49
49
  "devDependencies": {
50
- "@sixb/core": "0.1.9",
50
+ "@sixb/core": "0.1.11",
51
51
  "@types/bun": "latest",
52
52
  "typescript": "^5.7.0"
53
53
  },
@@ -3,11 +3,14 @@ import type {
3
3
  BeginDatasetMergeInput,
4
4
  BeginDatasetWriteInput,
5
5
  DatasetCatalogState,
6
+ DatasetChanges,
6
7
  DatasetVersion,
7
8
  LakeMergeSession,
8
9
  LakeWriteSession,
10
+ ReadDatasetChangesInput,
9
11
  ReadDatasetRowsInput,
10
12
  } from "@sixb/core/lake-storage"
13
+ import { DuckLakeChangeReader } from "./internal/ducklake-change-reader"
11
14
  import { DuckLakeConnectionManager } from "./internal/ducklake-connection-manager"
12
15
  import { DuckLakeDatasetCatalog } from "./internal/ducklake-dataset-catalog"
13
16
  import { DuckLakeMaintenance } from "./internal/ducklake-maintenance"
@@ -36,6 +39,7 @@ export class DuckLakeStorage implements LakeStorageWithSql<"duckdb"> {
36
39
  private readonly datasets: DuckLakeDatasetCatalog
37
40
  private readonly maintenance: DuckLakeMaintenance
38
41
  private readonly rows: DuckLakeRowReader
42
+ private readonly changes: DuckLakeChangeReader
39
43
  private readonly snapshotReader: DuckLakeSnapshotReader
40
44
  private readonly writes: DuckLakeWriteCoordinator
41
45
 
@@ -59,6 +63,11 @@ export class DuckLakeStorage implements LakeStorageWithSql<"duckdb"> {
59
63
  this.datasets
60
64
  )
61
65
  this.rows = new DuckLakeRowReader(normalizedOptions, this.connections, this.snapshotReader)
66
+ this.changes = new DuckLakeChangeReader(
67
+ normalizedOptions,
68
+ this.connections,
69
+ this.snapshotReader
70
+ )
62
71
  this.writes = new DuckLakeWriteCoordinator(
63
72
  normalizedOptions,
64
73
  this.connections,
@@ -122,6 +131,10 @@ export class DuckLakeStorage implements LakeStorageWithSql<"duckdb"> {
122
131
  return this.rows.readRows(input)
123
132
  }
124
133
 
134
+ readChanges(input: ReadDatasetChangesInput): Promise<DatasetChanges | null> {
135
+ return this.changes.readChanges(input)
136
+ }
137
+
125
138
  async runMaintenance(options?: DuckLakeMaintenanceOptions): Promise<DuckLakeMaintenanceReport> {
126
139
  return this.maintenance.runMaintenance(options)
127
140
  }
@@ -0,0 +1,129 @@
1
+ import type { DuckDBConnection, DuckDBResult } from "@duckdb/node-api"
2
+ import { LakeStorageError } from "@sixb/core/lake-storage"
3
+ import { sixbDuckDbValueConverter } from "./duckdb-value-converter"
4
+
5
+ /** One native query, on a connection belonging to the runtime's shared instance. */
6
+ export interface DuckDbReader {
7
+ rows(): AsyncIterable<Record<string, unknown>>
8
+ close(): Promise<void>
9
+ }
10
+
11
+ export interface DuckDbReaderOptions {
12
+ readonly signal?: AbortSignal
13
+ readonly onClose?: () => Promise<void>
14
+ }
15
+
16
+ export class NodeDuckDbReader implements DuckDbReader {
17
+ private resultPromise: Promise<DuckDBResult> | undefined
18
+ private pending: Promise<unknown> | undefined
19
+ private closePromise: Promise<void> | undefined
20
+ private finished = false
21
+ private consumed = false
22
+ private readonly onAbort = () => {
23
+ // Keep the rejected cleanup observable through close()/rows(), including when the consumer
24
+ // is paused. The event listener itself cannot return an awaited promise.
25
+ void this.close().catch(() => {})
26
+ }
27
+
28
+ constructor(
29
+ private readonly connection: DuckDBConnection,
30
+ private readonly options: DuckDbReaderOptions
31
+ ) {}
32
+
33
+ async start(sql: string): Promise<void> {
34
+ this.options.signal?.throwIfAborted()
35
+ this.options.signal?.addEventListener("abort", this.onAbort, { once: true })
36
+ // Connection-local settings are not inherited by a new connection. Physical offsets must
37
+ // remain stable even when a dataset shadows DuckDB's virtual rowid column.
38
+ await this.track(this.connection.run("SET preserve_insertion_order = true"))
39
+ this.assertOpen()
40
+ const prepared = await this.track(this.connection.prepare(sql))
41
+ try {
42
+ this.assertOpen()
43
+ // Starting the pending query establishes its interruptible context synchronously. Avoid
44
+ // connection.stream() starting execution after an abort that happened during preparation.
45
+ this.resultPromise = this.track(prepared.startStream().getResult()).finally(() => {
46
+ prepared.destroySync()
47
+ })
48
+ // Execute independently after preparation, so a large sort does not occupy the main queue
49
+ // or attachment lease. rows() observes failures even if execution ends before consumption.
50
+ void this.resultPromise.catch(() => {})
51
+ } catch (error) {
52
+ prepared.destroySync()
53
+ throw error
54
+ }
55
+ }
56
+
57
+ async *rows(): AsyncIterable<Record<string, unknown>> {
58
+ if (this.consumed)
59
+ throw new LakeStorageError("[SixbDuckLake] Reader can only be consumed once.")
60
+ this.consumed = true
61
+ try {
62
+ this.assertOpen()
63
+ const result = await this.resultPromise!
64
+ this.assertOpen()
65
+ const batches = result
66
+ .yieldConvertedRowObjects(sixbDuckDbValueConverter)
67
+ [Symbol.asyncIterator]()
68
+ while (true) {
69
+ this.assertOpen()
70
+ const batch = await this.track(batches.next())
71
+ this.assertOpen()
72
+ if (batch.done) {
73
+ this.finished = true
74
+ return
75
+ }
76
+ for (const row of batch.value) {
77
+ this.assertOpen()
78
+ yield row as Record<string, unknown>
79
+ }
80
+ }
81
+ } finally {
82
+ await this.close()
83
+ }
84
+ }
85
+
86
+ close(): Promise<void> {
87
+ if (!this.closePromise) {
88
+ this.options.signal?.removeEventListener("abort", this.onAbort)
89
+ if (this.pending) this.connection.interrupt()
90
+ this.closePromise = this.finish()
91
+ }
92
+ return this.closePromise
93
+ }
94
+
95
+ private async finish(): Promise<void> {
96
+ try {
97
+ await this.pending?.catch(() => {})
98
+ if (!this.finished) {
99
+ // node-api 1.5.2 exposes no result.close(). Disconnect alone leaves a paused query's
100
+ // transaction alive until GC. A new statement ends it without draining the whole result.
101
+ await this.connection.run("SELECT 1")
102
+ }
103
+ } finally {
104
+ this.resultPromise = undefined
105
+ try {
106
+ this.connection.closeSync()
107
+ } finally {
108
+ await this.options.onClose?.()
109
+ }
110
+ }
111
+ }
112
+
113
+ private async track<T>(operation: Promise<T>): Promise<T> {
114
+ this.pending = operation
115
+ try {
116
+ return await operation
117
+ } catch (error) {
118
+ this.assertOpen()
119
+ throw error
120
+ } finally {
121
+ if (this.pending === operation) this.pending = undefined
122
+ }
123
+ }
124
+
125
+ private assertOpen(): void {
126
+ this.options.signal?.throwIfAborted()
127
+ if (this.closePromise) throw new LakeStorageError("[SixbDuckLake] Reader is closed.")
128
+ }
129
+ }
@@ -1,3 +1,5 @@
1
+ import { mkdir, mkdtemp, rm } from "node:fs/promises"
2
+ import { join, resolve } from "node:path"
1
3
  import {
2
4
  type DuckDBConnection,
3
5
  DuckDBInstance,
@@ -6,6 +8,7 @@ import {
6
8
  } from "@duckdb/node-api"
7
9
  import { LakeStorageError } from "@sixb/core/lake-storage"
8
10
  import type { DuckDbRuntimeOptions, DuckLakeStorageOptions } from "../types"
11
+ import { type DuckDbReader, type DuckDbReaderOptions, NodeDuckDbReader } from "./duckdb-reader"
9
12
  import { sixbDuckDbValueConverter } from "./duckdb-value-converter"
10
13
  import {
11
14
  buildAttachSql,
@@ -20,8 +23,8 @@ import {
20
23
  * Narrow adapter around `@duckdb/node-api`.
21
24
  *
22
25
  * Keeping the public provider behind this interface confines the driver types to
23
- * this module instead of leaking them into `DuckLakeStorage`. Calls on a runtime
24
- * are serialized through one queue because a runtime owns one DuckDB connection.
26
+ * this module instead of leaking them into `DuckLakeStorage`. Main-connection calls
27
+ * share one queue; readers use separate connections to the same DuckDB instance.
25
28
  */
26
29
  export interface DuckDbQueryRuntime {
27
30
  run(sql: string, values?: readonly DuckDBValue[]): Promise<void>
@@ -34,7 +37,8 @@ export interface DuckDbQueryRuntime {
34
37
  }
35
38
 
36
39
  export interface DuckDbRuntime extends DuckDbQueryRuntime {
37
- streamRows(sql: string, values?: readonly DuckDBValue[]): AsyncIterable<Record<string, unknown>>
40
+ openReader(sql: string, options?: DuckDbReaderOptions): Promise<DuckDbReader>
41
+ stopReaders(): Promise<void>
38
42
  /**
39
43
  * Reserve the runtime queue for a multi-statement critical section.
40
44
  *
@@ -71,15 +75,43 @@ interface SetupDuckLakeOptions {
71
75
  class NodeDuckDbRuntime implements DuckDbRuntime {
72
76
  private closing = false
73
77
  private closed = false
74
- // One DuckDBConnection is shared by the runtime. Serialize calls so request
75
- // handlers cannot interleave statements or close/reset an active query.
78
+ // Serialize main-connection calls so transactions and staged writes cannot interleave.
76
79
  private operations: Promise<void> = Promise.resolve()
80
+ private readonly readers = new Set<DuckDbReader>()
81
+ private closePromise: Promise<void> | undefined
77
82
 
78
83
  constructor(
79
84
  private readonly instance: DuckDBInstance,
80
- private readonly connection: DuckDBConnection
85
+ private readonly connection: DuckDBConnection,
86
+ private readonly temporaryDirectory?: string
81
87
  ) {}
82
88
 
89
+ async openReader(sql: string, options: DuckDbReaderOptions = {}): Promise<DuckDbReader> {
90
+ return this.enqueue(async () => {
91
+ this.assertAcceptingOperations()
92
+ const connection = await this.instance.connect()
93
+ if (this.closing) {
94
+ connection.closeSync()
95
+ this.assertAcceptingOperations()
96
+ }
97
+ const reader = new NodeDuckDbReader(connection, {
98
+ ...options,
99
+ onClose: async () => {
100
+ this.readers.delete(reader)
101
+ await options.onClose?.()
102
+ },
103
+ })
104
+ this.readers.add(reader)
105
+ try {
106
+ await reader.start(sql)
107
+ return reader
108
+ } catch (error) {
109
+ await reader.close()
110
+ throw error
111
+ }
112
+ })
113
+ }
114
+
83
115
  async run(sql: string, values?: readonly DuckDBValue[]): Promise<void> {
84
116
  await this.enqueue(async () => {
85
117
  await this.connection.run(sql, values === undefined ? undefined : [...values])
@@ -107,45 +139,6 @@ class NodeDuckDbRuntime implements DuckDbRuntime {
107
139
  })
108
140
  }
109
141
 
110
- async *streamRows(
111
- sql: string,
112
- values?: readonly DuckDBValue[]
113
- ): AsyncIterable<Record<string, unknown>> {
114
- this.assertAcceptingOperations()
115
-
116
- // A stream holds its queue slot until the consumer finishes or abandons the
117
- // iterator. This keeps later writes from running while rows are still being
118
- // read from the same DuckDB connection.
119
- let releaseOperation: (() => void) | undefined
120
- const operationFinished = new Promise<void>((resolve) => {
121
- releaseOperation = resolve
122
- })
123
- const waitForTurn = this.operations.then(() => {
124
- this.assertNotClosed()
125
- })
126
- this.operations = waitForTurn
127
- .then(() => operationFinished)
128
- .then(
129
- () => {},
130
- () => {}
131
- )
132
-
133
- try {
134
- await waitForTurn
135
- const result = await this.connection.stream(
136
- sql,
137
- values === undefined ? undefined : [...values]
138
- )
139
- for await (const batch of result.yieldConvertedRowObjects(sixbDuckDbValueConverter)) {
140
- for (const row of batch) {
141
- yield row as Record<string, unknown>
142
- }
143
- }
144
- } finally {
145
- releaseOperation?.()
146
- }
147
- }
148
-
149
142
  async withAppender<T>(
150
143
  tableName: string,
151
144
  useAppender: (appender: DuckDbAppender) => T | Promise<T>
@@ -168,18 +161,29 @@ class NodeDuckDbRuntime implements DuckDbRuntime {
168
161
  })
169
162
  }
170
163
 
171
- async close(): Promise<void> {
172
- if (this.closed) {
173
- return
174
- }
164
+ close(): Promise<void> {
165
+ this.closePromise ??= this.finish()
166
+ return this.closePromise
167
+ }
168
+
169
+ async stopReaders(): Promise<void> {
170
+ const results = await Promise.allSettled([...this.readers].map((reader) => reader.close()))
171
+ const failed = results.find((result) => result.status === "rejected")
172
+ if (failed?.status === "rejected") throw failed.reason
173
+ }
175
174
 
175
+ private async finish(): Promise<void> {
176
176
  this.closing = true
177
+ const results = await Promise.allSettled([...this.readers].map((reader) => reader.close()))
177
178
  // resetRuntime()/close() can run while an API read is still using this
178
179
  // runtime. Wait for accepted work before closing the native connection.
179
180
  await this.operations.catch(() => {})
180
181
  this.closed = true
181
182
  this.connection.closeSync()
182
183
  this.instance.closeSync()
184
+ if (this.temporaryDirectory) await rm(this.temporaryDirectory, { recursive: true, force: true })
185
+ const failed = results.find((result) => result.status === "rejected")
186
+ if (failed?.status === "rejected") throw failed.reason
183
187
  }
184
188
 
185
189
  private enqueue<T>(operation: () => T | Promise<T>): Promise<T> {
@@ -286,8 +290,28 @@ class NodeDuckDbAppenderAdapter implements DuckDbAppender {
286
290
  export async function createDuckDbRuntime(
287
291
  options: DuckDbRuntimeOptions = {}
288
292
  ): Promise<DuckDbRuntime> {
289
- const instance = await DuckDBInstance.create(options.path ?? ":memory:", options.config ?? {})
290
- return new NodeDuckDbRuntime(instance, await instance.connect())
293
+ const path = options.path ?? ":memory:"
294
+ const base = options.config?.temp_directory ?? (path === ":memory:" ? ".tmp" : `${path}.tmp`)
295
+ // DuckDB's default .tmp filenames collide between independent instances/processes. Keep the
296
+ // configured disk location, but give each runtime its own directory and cleanup ownership.
297
+ let temporaryDirectory: string | undefined
298
+ if (base !== "") {
299
+ const directory = resolve(base)
300
+ await mkdir(directory, { recursive: true })
301
+ temporaryDirectory = await mkdtemp(join(directory, "sixb-"))
302
+ }
303
+ let instance: DuckDBInstance | undefined
304
+ try {
305
+ instance = await DuckDBInstance.create(path, {
306
+ ...options.config,
307
+ ...(temporaryDirectory ? { temp_directory: temporaryDirectory } : {}),
308
+ })
309
+ return new NodeDuckDbRuntime(instance, await instance.connect(), temporaryDirectory)
310
+ } catch (error) {
311
+ instance?.closeSync()
312
+ if (temporaryDirectory) await rm(temporaryDirectory, { recursive: true, force: true })
313
+ throw error
314
+ }
291
315
  }
292
316
 
293
317
  /**