rowpipe 2.2.0 → 2.2.1
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/db/adapters/sqlite.d.ts +2 -1
- package/dist/db/adapters/sqlite.d.ts.map +1 -1
- package/dist/db/adapters/sqlite.js +50 -19
- package/dist/db/adapters/sqlite.js.map +1 -1
- package/dist/transforms/join/index-storage.d.ts +8 -5
- package/dist/transforms/join/index-storage.d.ts.map +1 -1
- package/dist/transforms/join/index-storage.js +91 -54
- package/dist/transforms/join/index-storage.js.map +1 -1
- package/package.json +1 -1
|
@@ -4,9 +4,10 @@ export declare class SqliteDatabaseAdapter implements DatabaseAdapter {
|
|
|
4
4
|
readonly dialect: DatabaseDialect;
|
|
5
5
|
readonly config: DatabaseConnectionConfig;
|
|
6
6
|
readonly sanitizedUrl: string;
|
|
7
|
-
private db
|
|
7
|
+
private db?;
|
|
8
8
|
private isClosed;
|
|
9
9
|
constructor(config: DatabaseConnectionConfig);
|
|
10
|
+
private getDb;
|
|
10
11
|
stream(options: DatabaseReadOptions): AsyncIterable<DataBatch>;
|
|
11
12
|
write(input: AsyncIterable<DataBatch>, options: DatabaseWriteOptions): Promise<DatabaseWriteResult>;
|
|
12
13
|
insertBatch(table: string, rows: Row[], options?: DatabaseWriteOptions): Promise<DatabaseWriteResult>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../../../src/db/adapters/sqlite.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../../../src/db/adapters/sqlite.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAE1D,OAAO,KAAK,EACV,eAAe,EACf,wBAAwB,EACxB,eAAe,EACf,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,EAEnB,mBAAmB,EACpB,MAAM,aAAa,CAAC;AA6BrB,qBAAa,qBAAsB,YAAW,eAAe;IAC3D,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAY;IAC7C,QAAQ,CAAC,MAAM,EAAE,wBAAwB,CAAC;IAC1C,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,OAAO,CAAC,EAAE,CAAC,CAAM;IACjB,OAAO,CAAC,QAAQ,CAAS;gBAEb,MAAM,EAAE,wBAAwB;YAK9B,KAAK;IAYZ,MAAM,CAAC,OAAO,EAAE,mBAAmB,GAAG,aAAa,CAAC,SAAS,CAAC;IA6C/D,KAAK,CACT,KAAK,EAAE,aAAa,CAAC,SAAS,CAAC,EAC/B,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,mBAAmB,CAAC;IA0GzB,WAAW,CACf,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,GAAG,EAAE,EACX,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC,mBAAmB,CAAC;IAOzB,SAAS,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAS9B,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IA8B3D,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAS7D,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAY7B"}
|
|
@@ -1,5 +1,19 @@
|
|
|
1
|
-
import { DatabaseSync } from "node:sqlite";
|
|
2
1
|
import { escapeIdentifier, escapeQualifiedTable, generateCreateTableSql, sqliteTypeToRowpipe } from "../mapping.js";
|
|
2
|
+
let cachedDatabaseSync = null;
|
|
3
|
+
async function getDatabaseSyncClass() {
|
|
4
|
+
if (cachedDatabaseSync)
|
|
5
|
+
return cachedDatabaseSync;
|
|
6
|
+
try {
|
|
7
|
+
// Dynamic import to prevent startup module resolution failure on Node < 22.5.0
|
|
8
|
+
const mod = await import("node:sqlite");
|
|
9
|
+
cachedDatabaseSync = mod.DatabaseSync;
|
|
10
|
+
return cachedDatabaseSync;
|
|
11
|
+
}
|
|
12
|
+
catch {
|
|
13
|
+
throw new Error(`SQLite adapter requires Node.js >= 22.5.0 with built-in 'node:sqlite' support (current Node version: ${process.version}). ` +
|
|
14
|
+
`Please run on Node.js 22.5+ to use SQLite databases with rowpipe, or connect to PostgreSQL / MySQL.`);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
3
17
|
function toSqliteParam(val) {
|
|
4
18
|
if (val === null || val === undefined)
|
|
5
19
|
return null;
|
|
@@ -24,17 +38,27 @@ export class SqliteDatabaseAdapter {
|
|
|
24
38
|
constructor(config) {
|
|
25
39
|
this.config = config;
|
|
26
40
|
this.sanitizedUrl = config.sanitizedUrl;
|
|
27
|
-
|
|
28
|
-
|
|
41
|
+
}
|
|
42
|
+
async getDb() {
|
|
43
|
+
if (this.isClosed) {
|
|
44
|
+
throw new Error("SQLite database connection is closed");
|
|
45
|
+
}
|
|
46
|
+
if (!this.db) {
|
|
47
|
+
const DatabaseSync = await getDatabaseSyncClass();
|
|
48
|
+
const dbPath = this.config.filePath || ":memory:";
|
|
49
|
+
this.db = new DatabaseSync(dbPath);
|
|
50
|
+
}
|
|
51
|
+
return this.db;
|
|
29
52
|
}
|
|
30
53
|
async *stream(options) {
|
|
54
|
+
const db = await this.getDb();
|
|
31
55
|
const batchSize = Math.max(1, options.batchSize || 1000);
|
|
32
56
|
const sql = options.query || (options.table ? `SELECT * FROM ${escapeQualifiedTable(options.table, "sqlite")}` : "");
|
|
33
57
|
if (!sql) {
|
|
34
58
|
throw new Error("Either table or query must be specified for SQLite stream");
|
|
35
59
|
}
|
|
36
60
|
const params = (options.params || []).map(toSqliteParam);
|
|
37
|
-
const stmt =
|
|
61
|
+
const stmt = db.prepare(sql);
|
|
38
62
|
if (typeof stmt.setReadBigInts === "function") {
|
|
39
63
|
stmt.setReadBigInts(true);
|
|
40
64
|
}
|
|
@@ -67,6 +91,7 @@ export class SqliteDatabaseAdapter {
|
|
|
67
91
|
}
|
|
68
92
|
}
|
|
69
93
|
async write(input, options) {
|
|
94
|
+
const db = await this.getDb();
|
|
70
95
|
const startTime = Date.now();
|
|
71
96
|
let rowsWritten = 0;
|
|
72
97
|
let batchesWritten = 0;
|
|
@@ -77,7 +102,7 @@ export class SqliteDatabaseAdapter {
|
|
|
77
102
|
}
|
|
78
103
|
const escapedTable = escapeQualifiedTable(table, "sqlite");
|
|
79
104
|
if (options.truncate) {
|
|
80
|
-
|
|
105
|
+
db.exec(`DELETE FROM ${escapedTable};`);
|
|
81
106
|
}
|
|
82
107
|
const useTx = options.transaction !== false;
|
|
83
108
|
let insertStmt = null;
|
|
@@ -108,7 +133,7 @@ export class SqliteDatabaseAdapter {
|
|
|
108
133
|
process.stdout.write(`\n-- Dry-run DDL:\n${ddl}\n`);
|
|
109
134
|
return { rowsWritten: 0, batchesWritten: 0, durationMs: Date.now() - startTime, tableCreated: true };
|
|
110
135
|
}
|
|
111
|
-
|
|
136
|
+
db.exec(ddl);
|
|
112
137
|
tableCreated = true;
|
|
113
138
|
}
|
|
114
139
|
if (!insertStmt) {
|
|
@@ -129,10 +154,10 @@ export class SqliteDatabaseAdapter {
|
|
|
129
154
|
sql += ` ON CONFLICT (${conflictCols}) DO NOTHING`;
|
|
130
155
|
}
|
|
131
156
|
}
|
|
132
|
-
insertStmt =
|
|
157
|
+
insertStmt = db.prepare(sql);
|
|
133
158
|
}
|
|
134
159
|
if (useTx) {
|
|
135
|
-
|
|
160
|
+
db.exec("BEGIN TRANSACTION;");
|
|
136
161
|
}
|
|
137
162
|
try {
|
|
138
163
|
for (const row of batch.rows) {
|
|
@@ -141,12 +166,12 @@ export class SqliteDatabaseAdapter {
|
|
|
141
166
|
rowsWritten++;
|
|
142
167
|
}
|
|
143
168
|
if (useTx) {
|
|
144
|
-
|
|
169
|
+
db.exec("COMMIT;");
|
|
145
170
|
}
|
|
146
171
|
}
|
|
147
172
|
catch (err) {
|
|
148
173
|
if (useTx) {
|
|
149
|
-
|
|
174
|
+
db.exec("ROLLBACK;");
|
|
150
175
|
}
|
|
151
176
|
throw err;
|
|
152
177
|
}
|
|
@@ -166,12 +191,14 @@ export class SqliteDatabaseAdapter {
|
|
|
166
191
|
return this.write(singleBatch(), { table, ...options });
|
|
167
192
|
}
|
|
168
193
|
async getTables() {
|
|
169
|
-
const
|
|
194
|
+
const db = await this.getDb();
|
|
195
|
+
const stmt = db.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name NOT LIKE 'sqlite_%' ORDER BY name ASC");
|
|
170
196
|
const rows = stmt.all();
|
|
171
197
|
return rows.map((r) => r.name);
|
|
172
198
|
}
|
|
173
199
|
async getTableSchema(table) {
|
|
174
|
-
const
|
|
200
|
+
const db = await this.getDb();
|
|
201
|
+
const stmt = db.prepare(`PRAGMA table_info(${escapeIdentifier(table, "sqlite")})`);
|
|
175
202
|
const rows = stmt.all();
|
|
176
203
|
const columns = rows.map((r) => ({
|
|
177
204
|
name: r.name,
|
|
@@ -189,21 +216,25 @@ export class SqliteDatabaseAdapter {
|
|
|
189
216
|
};
|
|
190
217
|
}
|
|
191
218
|
async executeRaw(sql, params) {
|
|
219
|
+
const db = await this.getDb();
|
|
192
220
|
if (params && params.length > 0) {
|
|
193
|
-
const stmt =
|
|
221
|
+
const stmt = db.prepare(sql);
|
|
194
222
|
return stmt.all(...params.map(toSqliteParam));
|
|
195
223
|
}
|
|
196
|
-
return
|
|
224
|
+
return db.exec(sql);
|
|
197
225
|
}
|
|
198
226
|
async close() {
|
|
199
227
|
if (this.isClosed)
|
|
200
228
|
return;
|
|
201
229
|
this.isClosed = true;
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
230
|
+
if (this.db) {
|
|
231
|
+
try {
|
|
232
|
+
this.db.close();
|
|
233
|
+
}
|
|
234
|
+
catch {
|
|
235
|
+
// Ignore if already closed
|
|
236
|
+
}
|
|
237
|
+
this.db = undefined;
|
|
207
238
|
}
|
|
208
239
|
}
|
|
209
240
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sqlite.js","sourceRoot":"","sources":["../../../src/db/adapters/sqlite.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sqlite.js","sourceRoot":"","sources":["../../../src/db/adapters/sqlite.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,7 @@ import type { JoinIndex } from "./types.js";
|
|
|
3
3
|
/**
|
|
4
4
|
* High-performance Spillable Join Index that stores build-side rows in memory,
|
|
5
5
|
* and transparently spills to disk when memory threshold is reached.
|
|
6
|
+
* Uses append-only disk storage with microsecond random-access read offsets.
|
|
6
7
|
*/
|
|
7
8
|
export declare class SpillableJoinIndex implements JoinIndex {
|
|
8
9
|
private memoryMap;
|
|
@@ -11,12 +12,13 @@ export declare class SpillableJoinIndex implements JoinIndex {
|
|
|
11
12
|
private memoryLimitBytes;
|
|
12
13
|
private isSpilled;
|
|
13
14
|
private tempDir?;
|
|
14
|
-
private
|
|
15
|
-
private
|
|
16
|
-
private
|
|
17
|
-
private
|
|
18
|
-
private hasStmt?;
|
|
15
|
+
private tempFilePath?;
|
|
16
|
+
private fd?;
|
|
17
|
+
private currentOffset;
|
|
18
|
+
private diskIndex;
|
|
19
19
|
private totalCount;
|
|
20
|
+
private isClosed;
|
|
21
|
+
private cleanupHandler?;
|
|
20
22
|
constructor(options?: {
|
|
21
23
|
memoryLimit?: number | string;
|
|
22
24
|
tempDir?: string;
|
|
@@ -28,6 +30,7 @@ export declare class SpillableJoinIndex implements JoinIndex {
|
|
|
28
30
|
markMatched(key: string): void;
|
|
29
31
|
getUnmatched(): AsyncIterable<Row>;
|
|
30
32
|
count(): number;
|
|
33
|
+
private cleanupSync;
|
|
31
34
|
close(): Promise<void>;
|
|
32
35
|
}
|
|
33
36
|
//# sourceMappingURL=index-storage.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-storage.d.ts","sourceRoot":"","sources":["../../../src/transforms/join/index-storage.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAG/C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"index-storage.d.ts","sourceRoot":"","sources":["../../../src/transforms/join/index-storage.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAG/C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAO5C;;;;GAIG;AACH,qBAAa,kBAAmB,YAAW,SAAS;IAClD,OAAO,CAAC,SAAS,CAA4B;IAC7C,OAAO,CAAC,WAAW,CAAqB;IACxC,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,SAAS,CAAS;IAE1B,OAAO,CAAC,OAAO,CAAC,CAAS;IACzB,OAAO,CAAC,YAAY,CAAC,CAAS;IAC9B,OAAO,CAAC,EAAE,CAAC,CAAS;IACpB,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,SAAS,CAAwC;IACzD,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,cAAc,CAAC,CAAa;gBAExB,OAAO,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE;IAKzE,OAAO,CAAC,WAAW;IAmCb,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAkCzC,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;IAgB5C,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAOxC,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAIvB,YAAY,IAAI,aAAa,CAAC,GAAG,CAAC;IAsBzC,KAAK,IAAI,MAAM;IAIf,OAAO,CAAC,WAAW;IAyBb,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAc7B"}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import
|
|
1
|
+
import { closeSync, existsSync, openSync, readSync, unlinkSync, writeSync } from "node:fs";
|
|
2
|
+
import { tmpdir } from "node:os";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
import { randomBytes } from "node:crypto";
|
|
5
5
|
import { parseMemoryLimit } from "../../diff/storage/spillable-index.js";
|
|
6
6
|
import { safeJsonStringify } from "../../utils/formatting.js";
|
|
7
7
|
/**
|
|
8
8
|
* High-performance Spillable Join Index that stores build-side rows in memory,
|
|
9
9
|
* and transparently spills to disk when memory threshold is reached.
|
|
10
|
+
* Uses append-only disk storage with microsecond random-access read offsets.
|
|
10
11
|
*/
|
|
11
12
|
export class SpillableJoinIndex {
|
|
12
13
|
memoryMap = new Map();
|
|
@@ -15,48 +16,62 @@ export class SpillableJoinIndex {
|
|
|
15
16
|
memoryLimitBytes;
|
|
16
17
|
isSpilled = false;
|
|
17
18
|
tempDir;
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
hasStmt;
|
|
19
|
+
tempFilePath;
|
|
20
|
+
fd;
|
|
21
|
+
currentOffset = 0;
|
|
22
|
+
diskIndex = new Map();
|
|
23
23
|
totalCount = 0;
|
|
24
|
+
isClosed = false;
|
|
25
|
+
cleanupHandler;
|
|
24
26
|
constructor(options) {
|
|
25
27
|
this.memoryLimitBytes = parseMemoryLimit(options?.memoryLimit, 256 * 1024 * 1024);
|
|
26
28
|
this.tempDir = options?.tempDir;
|
|
27
29
|
}
|
|
28
|
-
|
|
30
|
+
spillToDisk() {
|
|
29
31
|
if (this.isSpilled)
|
|
30
32
|
return;
|
|
31
|
-
const tmpFolder = this.tempDir ||
|
|
32
|
-
|
|
33
|
-
this.
|
|
34
|
-
this.
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
CREATE INDEX idx_join_k ON join_store (k);
|
|
42
|
-
`);
|
|
43
|
-
this.insertStmt = this.db.prepare("INSERT INTO join_store (k, data) VALUES (?, ?)");
|
|
44
|
-
this.selectStmt = this.db.prepare("SELECT data FROM join_store WHERE k = ?");
|
|
45
|
-
this.hasStmt = this.db.prepare("SELECT 1 FROM join_store WHERE k = ? LIMIT 1");
|
|
46
|
-
this.db.exec("BEGIN TRANSACTION;");
|
|
33
|
+
const tmpFolder = this.tempDir || tmpdir();
|
|
34
|
+
const randomId = randomBytes(8).toString("hex");
|
|
35
|
+
this.tempFilePath = join(tmpFolder, `rowpipe_join_${process.pid}_${randomId}.tmp`);
|
|
36
|
+
this.fd = openSync(this.tempFilePath, "w+");
|
|
37
|
+
this.cleanupHandler = () => {
|
|
38
|
+
this.cleanupSync();
|
|
39
|
+
};
|
|
40
|
+
process.once("exit", this.cleanupHandler);
|
|
41
|
+
process.once("SIGINT", this.cleanupHandler);
|
|
42
|
+
process.once("SIGTERM", this.cleanupHandler);
|
|
47
43
|
for (const [key, rows] of this.memoryMap.entries()) {
|
|
44
|
+
let list = this.diskIndex.get(key);
|
|
45
|
+
if (!list) {
|
|
46
|
+
list = [];
|
|
47
|
+
this.diskIndex.set(key, list);
|
|
48
|
+
}
|
|
48
49
|
for (const r of rows) {
|
|
49
|
-
|
|
50
|
+
const jsonStr = safeJsonStringify(r);
|
|
51
|
+
const buf = Buffer.from(jsonStr, "utf-8");
|
|
52
|
+
const offset = this.currentOffset;
|
|
53
|
+
writeSync(this.fd, buf, 0, buf.length, offset);
|
|
54
|
+
this.currentOffset += buf.length;
|
|
55
|
+
list.push({ offset, length: buf.length });
|
|
50
56
|
}
|
|
51
57
|
}
|
|
52
|
-
this.db.exec("COMMIT;");
|
|
53
58
|
this.memoryMap.clear();
|
|
54
59
|
this.isSpilled = true;
|
|
55
60
|
}
|
|
56
61
|
async set(key, row) {
|
|
57
62
|
this.totalCount++;
|
|
58
|
-
if (this.isSpilled && this.
|
|
59
|
-
|
|
63
|
+
if (this.isSpilled && this.fd !== undefined) {
|
|
64
|
+
const jsonStr = safeJsonStringify(row);
|
|
65
|
+
const buf = Buffer.from(jsonStr, "utf-8");
|
|
66
|
+
const offset = this.currentOffset;
|
|
67
|
+
writeSync(this.fd, buf, 0, buf.length, offset);
|
|
68
|
+
this.currentOffset += buf.length;
|
|
69
|
+
let list = this.diskIndex.get(key);
|
|
70
|
+
if (!list) {
|
|
71
|
+
list = [];
|
|
72
|
+
this.diskIndex.set(key, list);
|
|
73
|
+
}
|
|
74
|
+
list.push({ offset, length: buf.length });
|
|
60
75
|
return;
|
|
61
76
|
}
|
|
62
77
|
let existing = this.memoryMap.get(key);
|
|
@@ -65,25 +80,30 @@ export class SpillableJoinIndex {
|
|
|
65
80
|
this.memoryMap.set(key, existing);
|
|
66
81
|
}
|
|
67
82
|
existing.push(row);
|
|
68
|
-
//
|
|
83
|
+
// Size estimate: key bytes + base object overhead + properties
|
|
69
84
|
this.estimatedBytes += key.length * 2 + 128 + Object.keys(row).length * 32;
|
|
70
85
|
if (this.estimatedBytes >= this.memoryLimitBytes) {
|
|
71
|
-
|
|
86
|
+
this.spillToDisk();
|
|
72
87
|
}
|
|
73
88
|
}
|
|
74
89
|
async get(key) {
|
|
75
|
-
if (this.isSpilled && this.
|
|
76
|
-
const
|
|
77
|
-
if (
|
|
90
|
+
if (this.isSpilled && this.fd !== undefined) {
|
|
91
|
+
const list = this.diskIndex.get(key);
|
|
92
|
+
if (!list || list.length === 0)
|
|
78
93
|
return undefined;
|
|
79
|
-
|
|
94
|
+
const results = [];
|
|
95
|
+
for (const loc of list) {
|
|
96
|
+
const buf = Buffer.allocUnsafe(loc.length);
|
|
97
|
+
readSync(this.fd, buf, 0, loc.length, loc.offset);
|
|
98
|
+
results.push(JSON.parse(buf.toString("utf-8")));
|
|
99
|
+
}
|
|
100
|
+
return results;
|
|
80
101
|
}
|
|
81
102
|
return this.memoryMap.get(key);
|
|
82
103
|
}
|
|
83
104
|
async has(key) {
|
|
84
|
-
if (this.isSpilled
|
|
85
|
-
|
|
86
|
-
return res !== undefined;
|
|
105
|
+
if (this.isSpilled) {
|
|
106
|
+
return this.diskIndex.has(key);
|
|
87
107
|
}
|
|
88
108
|
return this.memoryMap.has(key);
|
|
89
109
|
}
|
|
@@ -91,11 +111,14 @@ export class SpillableJoinIndex {
|
|
|
91
111
|
this.matchedKeys.add(key);
|
|
92
112
|
}
|
|
93
113
|
async *getUnmatched() {
|
|
94
|
-
if (this.isSpilled && this.
|
|
95
|
-
const
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
114
|
+
if (this.isSpilled && this.fd !== undefined) {
|
|
115
|
+
for (const [key, list] of this.diskIndex.entries()) {
|
|
116
|
+
if (!this.matchedKeys.has(key)) {
|
|
117
|
+
for (const loc of list) {
|
|
118
|
+
const buf = Buffer.allocUnsafe(loc.length);
|
|
119
|
+
readSync(this.fd, buf, 0, loc.length, loc.offset);
|
|
120
|
+
yield JSON.parse(buf.toString("utf-8"));
|
|
121
|
+
}
|
|
99
122
|
}
|
|
100
123
|
}
|
|
101
124
|
}
|
|
@@ -112,28 +135,42 @@ export class SpillableJoinIndex {
|
|
|
112
135
|
count() {
|
|
113
136
|
return this.totalCount;
|
|
114
137
|
}
|
|
115
|
-
|
|
116
|
-
this.
|
|
117
|
-
|
|
118
|
-
|
|
138
|
+
cleanupSync() {
|
|
139
|
+
if (this.isClosed)
|
|
140
|
+
return;
|
|
141
|
+
this.isClosed = true;
|
|
142
|
+
if (this.fd !== undefined) {
|
|
119
143
|
try {
|
|
120
|
-
this.
|
|
144
|
+
closeSync(this.fd);
|
|
121
145
|
}
|
|
122
146
|
catch {
|
|
123
147
|
// Ignore
|
|
124
148
|
}
|
|
125
|
-
this.
|
|
149
|
+
this.fd = undefined;
|
|
126
150
|
}
|
|
127
|
-
if (this.
|
|
151
|
+
if (this.tempFilePath) {
|
|
128
152
|
try {
|
|
129
|
-
if (
|
|
130
|
-
|
|
153
|
+
if (existsSync(this.tempFilePath)) {
|
|
154
|
+
unlinkSync(this.tempFilePath);
|
|
131
155
|
}
|
|
132
156
|
}
|
|
133
157
|
catch {
|
|
134
|
-
// Ignore
|
|
158
|
+
// Ignore
|
|
135
159
|
}
|
|
160
|
+
this.tempFilePath = undefined;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
async close() {
|
|
164
|
+
this.memoryMap.clear();
|
|
165
|
+
this.matchedKeys.clear();
|
|
166
|
+
this.diskIndex.clear();
|
|
167
|
+
if (this.cleanupHandler) {
|
|
168
|
+
process.removeListener("exit", this.cleanupHandler);
|
|
169
|
+
process.removeListener("SIGINT", this.cleanupHandler);
|
|
170
|
+
process.removeListener("SIGTERM", this.cleanupHandler);
|
|
171
|
+
this.cleanupHandler = undefined;
|
|
136
172
|
}
|
|
173
|
+
this.cleanupSync();
|
|
137
174
|
}
|
|
138
175
|
}
|
|
139
176
|
//# sourceMappingURL=index-storage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-storage.js","sourceRoot":"","sources":["../../../src/transforms/join/index-storage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index-storage.js","sourceRoot":"","sources":["../../../src/transforms/join/index-storage.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED