@powersync/service-module-mongodb 0.20.1 → 0.21.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/CHANGELOG.md +53 -0
- package/dist/api/MongoRouteAPIAdapter.d.ts +2 -2
- package/dist/api/MongoRouteAPIAdapter.js +62 -142
- package/dist/api/MongoRouteAPIAdapter.js.map +1 -1
- package/dist/api/infer-collection-schema.d.ts +7 -0
- package/dist/api/infer-collection-schema.js +118 -0
- package/dist/api/infer-collection-schema.js.map +1 -0
- package/dist/replication/ChangeStream.js +2 -4
- package/dist/replication/ChangeStream.js.map +1 -1
- package/dist/replication/MongoSnapshotter.js +6 -6
- package/dist/replication/MongoSnapshotter.js.map +1 -1
- package/dist/replication/RawChangeStream.d.ts +3 -11
- package/dist/replication/RawChangeStream.js +0 -17
- package/dist/replication/RawChangeStream.js.map +1 -1
- package/dist/types/types.js +2 -2
- package/dist/types/types.js.map +1 -1
- package/package.json +9 -9
- package/src/api/MongoRouteAPIAdapter.ts +68 -126
- package/src/api/infer-collection-schema.ts +127 -0
- package/src/replication/ChangeStream.ts +2 -4
- package/src/replication/MongoSnapshotter.ts +6 -6
- package/src/replication/RawChangeStream.ts +3 -30
- package/src/types/types.ts +2 -2
- package/test/src/change_stream.test.ts +73 -0
- package/test/src/documentdb_mode.test.ts +1 -2
- package/test/src/raw_change_stream.test.ts +0 -63
- package/test/src/schema.test.ts +180 -0
- package/test/src/util.ts +11 -29
- package/tsconfig.tsbuildinfo +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,58 @@
|
|
|
1
1
|
# @powersync/service-module-mongodb
|
|
2
2
|
|
|
3
|
+
## 0.21.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 2412d7a: Remove the client-side `maxAwaitTimeMS` workaround for Azure DocumentDB and label DocumentDB support as alpha.
|
|
8
|
+
- 7cce8bd: Infer MongoDB collection schemas using aggregation so large sampled documents are not transferred into service memory. Query each collection in its own database with up to four aggregations at a time, and limit each aggregation to 30 seconds of server execution time.
|
|
9
|
+
|
|
10
|
+
Omit the aggregation collation option on Azure DocumentDB, which does not support it.
|
|
11
|
+
|
|
12
|
+
Cache DocumentDB detection on the route adapter for schema discovery and checkpoint requests.
|
|
13
|
+
|
|
14
|
+
- Updated dependencies [f842b4e]
|
|
15
|
+
- Updated dependencies [5ae6f75]
|
|
16
|
+
- @powersync/service-core@1.26.1
|
|
17
|
+
- @powersync/service-sync-rules@0.42.0
|
|
18
|
+
- @powersync/lib-services-framework@0.10.2
|
|
19
|
+
- @powersync/lib-service-mongodb@0.6.32
|
|
20
|
+
|
|
21
|
+
## 0.21.0
|
|
22
|
+
|
|
23
|
+
### Minor Changes
|
|
24
|
+
|
|
25
|
+
- 189bd9e: Add storage_version: 4 as a stable storage version.
|
|
26
|
+
|
|
27
|
+
### Patch Changes
|
|
28
|
+
|
|
29
|
+
- 4e4063b: Optimize runtime type checks, closes https://github.com/powersync-ja/powersync-service/issues/771.
|
|
30
|
+
- 2407f71: Apply timeouts and abortSignal handling to all S3 operations. The broad timeouts can be configured using the new `storage.object_storage.defaults_mode` option, or the `AWS_DEFAULTS_MODE` environment variable. Upgrade S3 SDK to fix further timeout issues.
|
|
31
|
+
- a997c88: Restructure MongoDB V3 bucket compacting.
|
|
32
|
+
- Updated dependencies [e11c54b]
|
|
33
|
+
- Updated dependencies [4b6a23e]
|
|
34
|
+
- Updated dependencies [189bd9e]
|
|
35
|
+
- Updated dependencies [bb08068]
|
|
36
|
+
- Updated dependencies [0077a8d]
|
|
37
|
+
- Updated dependencies [332d649]
|
|
38
|
+
- Updated dependencies [33a3c23]
|
|
39
|
+
- Updated dependencies [fccdff2]
|
|
40
|
+
- Updated dependencies [989d9e1]
|
|
41
|
+
- Updated dependencies [646c0de]
|
|
42
|
+
- Updated dependencies [cc121b3]
|
|
43
|
+
- Updated dependencies [4e4063b]
|
|
44
|
+
- Updated dependencies [2407f71]
|
|
45
|
+
- Updated dependencies [10131ca]
|
|
46
|
+
- Updated dependencies [4037e8f]
|
|
47
|
+
- Updated dependencies [3972bac]
|
|
48
|
+
- Updated dependencies [dd7a22f]
|
|
49
|
+
- Updated dependencies [a997c88]
|
|
50
|
+
- @powersync/service-core@1.26.0
|
|
51
|
+
- @powersync/service-sync-rules@0.41.0
|
|
52
|
+
- @powersync/service-types@0.18.0
|
|
53
|
+
- @powersync/lib-services-framework@0.10.1
|
|
54
|
+
- @powersync/lib-service-mongodb@0.6.31
|
|
55
|
+
|
|
3
56
|
## 0.20.1
|
|
4
57
|
|
|
5
58
|
### Patch Changes
|
|
@@ -10,6 +10,7 @@ export declare class MongoRouteAPIAdapter implements api.RouteAPI {
|
|
|
10
10
|
connectionTag: string;
|
|
11
11
|
defaultSchema: string;
|
|
12
12
|
private checkpointImplementation;
|
|
13
|
+
private documentDbDetection;
|
|
13
14
|
constructor(config: types.ResolvedConnectionConfig);
|
|
14
15
|
getParseSyncRulesOptions(): ParseSyncConfigOptions;
|
|
15
16
|
shutdown(): Promise<void>;
|
|
@@ -20,8 +21,7 @@ export declare class MongoRouteAPIAdapter implements api.RouteAPI {
|
|
|
20
21
|
getDebugTablesInfo(tablePatterns: sync_rules.TablePattern[], sqlSyncRules: sync_rules.SyncConfig): Promise<api.PatternResult[]>;
|
|
21
22
|
getReplicationLagBytes(options: api.ReplicationLagOptions): Promise<number | undefined>;
|
|
22
23
|
createReplicationHead<T>(callback: ReplicationHeadCallback<T>): Promise<T>;
|
|
24
|
+
private isDocumentDb;
|
|
23
25
|
private getCheckpointImplementation;
|
|
24
26
|
getConnectionSchema(): Promise<service_types.DatabaseSchema[]>;
|
|
25
|
-
private getColumnsFromDocuments;
|
|
26
|
-
private getBsonType;
|
|
27
27
|
}
|
|
@@ -5,10 +5,11 @@ import * as service_types from '@powersync/service-types';
|
|
|
5
5
|
import { logger } from '@powersync/lib-services-framework';
|
|
6
6
|
import { createCheckpointImplementation } from '../replication/checkpoints/create-checkpoint-implementation.js';
|
|
7
7
|
import { MongoManager } from '../replication/MongoManager.js';
|
|
8
|
-
import { constructAfterRecord } from '../replication/MongoRelation.js';
|
|
9
8
|
import { CHECKPOINTS_COLLECTION, detectDocumentDb } from '../replication/replication-utils.js';
|
|
10
9
|
import * as types from '../types/types.js';
|
|
11
10
|
import { escapeRegExp } from '../utils.js';
|
|
11
|
+
import { inferCollectionSchema } from './infer-collection-schema.js';
|
|
12
|
+
const SCHEMA_INFERENCE_CONCURRENCY = 4;
|
|
12
13
|
export class MongoRouteAPIAdapter {
|
|
13
14
|
config;
|
|
14
15
|
client;
|
|
@@ -16,6 +17,7 @@ export class MongoRouteAPIAdapter {
|
|
|
16
17
|
connectionTag;
|
|
17
18
|
defaultSchema;
|
|
18
19
|
checkpointImplementation = null;
|
|
20
|
+
documentDbDetection = null;
|
|
19
21
|
constructor(config) {
|
|
20
22
|
this.config = config;
|
|
21
23
|
const manager = new MongoManager(config);
|
|
@@ -184,9 +186,17 @@ export class MongoRouteAPIAdapter {
|
|
|
184
186
|
const checkpointImplementation = await this.getCheckpointImplementation();
|
|
185
187
|
return checkpointImplementation.createReplicationHead(callback);
|
|
186
188
|
}
|
|
189
|
+
isDocumentDb() {
|
|
190
|
+
// Share in-flight detection and cache its result for this adapter's lifetime.
|
|
191
|
+
return (this.documentDbDetection ??= detectDocumentDb(this.db).catch((error) => {
|
|
192
|
+
// Allow a later request to retry after a transient connection error.
|
|
193
|
+
this.documentDbDetection = null;
|
|
194
|
+
throw error;
|
|
195
|
+
}));
|
|
196
|
+
}
|
|
187
197
|
async getCheckpointImplementation() {
|
|
188
198
|
if (this.checkpointImplementation == null) {
|
|
189
|
-
const isDocumentDb = await
|
|
199
|
+
const isDocumentDb = await this.isDocumentDb();
|
|
190
200
|
this.checkpointImplementation = createCheckpointImplementation(isDocumentDb, {
|
|
191
201
|
client: this.client,
|
|
192
202
|
db: this.db,
|
|
@@ -203,12 +213,13 @@ export class MongoRouteAPIAdapter {
|
|
|
203
213
|
return this.checkpointImplementation;
|
|
204
214
|
}
|
|
205
215
|
async getConnectionSchema() {
|
|
206
|
-
const
|
|
216
|
+
const isDocumentDb = await this.isDocumentDb();
|
|
207
217
|
const databases = await this.db.admin().listDatabases({ nameOnly: true });
|
|
208
218
|
const filteredDatabases = databases.databases.filter((db) => {
|
|
209
219
|
return !['local', 'admin', 'config'].includes(db.name);
|
|
210
220
|
});
|
|
211
|
-
const databaseSchemas =
|
|
221
|
+
const databaseSchemas = [];
|
|
222
|
+
for (const db of filteredDatabases) {
|
|
212
223
|
/**
|
|
213
224
|
* Filtering the list of database with `authorizedDatabases: true`
|
|
214
225
|
* does not produce the full list of databases under some circumstances.
|
|
@@ -221,156 +232,65 @@ export class MongoRouteAPIAdapter {
|
|
|
221
232
|
catch (e) {
|
|
222
233
|
if (lib_mongo.isMongoServerError(e) && e.codeName == 'Unauthorized') {
|
|
223
234
|
// Ignore databases we're not authorized to query
|
|
224
|
-
|
|
235
|
+
continue;
|
|
225
236
|
}
|
|
226
237
|
throw e;
|
|
227
238
|
}
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
continue;
|
|
237
|
-
}
|
|
238
|
-
if (collection.type == 'view') {
|
|
239
|
-
continue;
|
|
240
|
-
}
|
|
241
|
-
try {
|
|
242
|
-
const sampleDocuments = await this.db
|
|
243
|
-
.collection(collection.name)
|
|
244
|
-
.aggregate([{ $sample: { size: sampleSize } }])
|
|
245
|
-
.toArray();
|
|
246
|
-
if (sampleDocuments.length > 0) {
|
|
247
|
-
const columns = this.getColumnsFromDocuments(sampleDocuments);
|
|
248
|
-
tables.push({
|
|
249
|
-
name: collection.name,
|
|
250
|
-
// Since documents are sampled in a random order, we need to sort
|
|
251
|
-
// to get a consistent order
|
|
252
|
-
columns: columns.sort((a, b) => a.name.localeCompare(b.name))
|
|
253
|
-
});
|
|
239
|
+
const tables = new Array(collections.length);
|
|
240
|
+
const pendingCollections = collections.entries();
|
|
241
|
+
let failed = false;
|
|
242
|
+
const inferCollections = async () => {
|
|
243
|
+
// Reading from the iterator automatically manages the queue
|
|
244
|
+
for (const [index, collection] of pendingCollections) {
|
|
245
|
+
if (failed) {
|
|
246
|
+
return;
|
|
254
247
|
}
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
name: collection.name,
|
|
258
|
-
columns: []
|
|
259
|
-
});
|
|
248
|
+
if ([CHECKPOINTS_COLLECTION].includes(collection.name)) {
|
|
249
|
+
continue;
|
|
260
250
|
}
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
251
|
+
if (collection.name.startsWith('system.')) {
|
|
252
|
+
// system.views, system.js, system.profile, system.buckets
|
|
253
|
+
// https://www.mongodb.com/docs/manual/reference/system-collections/
|
|
254
|
+
continue;
|
|
255
|
+
}
|
|
256
|
+
if (collection.type == 'view') {
|
|
265
257
|
continue;
|
|
266
258
|
}
|
|
267
|
-
|
|
259
|
+
try {
|
|
260
|
+
const columns = await inferCollectionSchema(this.client.db(db.name).collection(collection.name), isDocumentDb);
|
|
261
|
+
// Preserve collection order even when queries finish out of order.
|
|
262
|
+
tables[index] = { name: collection.name, columns };
|
|
263
|
+
}
|
|
264
|
+
catch (e) {
|
|
265
|
+
if (lib_mongo.isMongoServerError(e) && e.codeName == 'Unauthorized') {
|
|
266
|
+
// Ignore collections we're not authorized to query
|
|
267
|
+
continue;
|
|
268
|
+
}
|
|
269
|
+
// Fail the whole request on unexpected errors: the response cannot indicate
|
|
270
|
+
// partial results, so omitting a collection would make an incomplete schema
|
|
271
|
+
// appear complete and could produce an incorrect generated client schema.
|
|
272
|
+
failed = true;
|
|
273
|
+
throw e;
|
|
274
|
+
}
|
|
268
275
|
}
|
|
269
|
-
}
|
|
270
|
-
return {
|
|
271
|
-
name: db.name,
|
|
272
|
-
tables: tables
|
|
273
276
|
};
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
let columns = new Map();
|
|
279
|
-
for (const document of documents) {
|
|
280
|
-
const parsed = constructAfterRecord(document);
|
|
281
|
-
for (const key in parsed) {
|
|
282
|
-
const value = parsed[key];
|
|
283
|
-
const type = sync_rules.sqliteTypeOf(value);
|
|
284
|
-
const sqliteType = sync_rules.ExpressionType.fromTypeText(type);
|
|
285
|
-
let entry = columns.get(key);
|
|
286
|
-
if (entry == null) {
|
|
287
|
-
entry = { sqliteType, bsonTypes: new Set() };
|
|
288
|
-
columns.set(key, entry);
|
|
289
|
-
}
|
|
290
|
-
else {
|
|
291
|
-
entry.sqliteType = entry.sqliteType.or(sqliteType);
|
|
292
|
-
}
|
|
293
|
-
const bsonType = this.getBsonType(document[key]);
|
|
294
|
-
if (bsonType != null) {
|
|
295
|
-
entry.bsonTypes.add(bsonType);
|
|
296
|
-
}
|
|
297
|
-
}
|
|
298
|
-
}
|
|
299
|
-
return [...columns.entries()].map(([key, value]) => {
|
|
300
|
-
const internal_type = value.bsonTypes.size == 0 ? '' : [...value.bsonTypes].join(' | ');
|
|
301
|
-
return {
|
|
302
|
-
name: key,
|
|
303
|
-
type: internal_type,
|
|
304
|
-
sqlite_type: value.sqliteType.typeFlags,
|
|
305
|
-
internal_type,
|
|
306
|
-
pg_type: internal_type
|
|
307
|
-
};
|
|
308
|
-
});
|
|
309
|
-
}
|
|
310
|
-
getBsonType(data) {
|
|
311
|
-
if (data == null) {
|
|
312
|
-
// null or undefined
|
|
313
|
-
return 'Null';
|
|
314
|
-
}
|
|
315
|
-
else if (typeof data == 'string') {
|
|
316
|
-
return 'String';
|
|
317
|
-
}
|
|
318
|
-
else if (typeof data == 'number') {
|
|
319
|
-
if (Number.isInteger(data)) {
|
|
320
|
-
return 'Integer';
|
|
277
|
+
// Each worker holds only schema metadata, with a bounded number of source queries.
|
|
278
|
+
const workers = Array.from({ length: Math.min(SCHEMA_INFERENCE_CONCURRENCY, collections.length) }, inferCollections);
|
|
279
|
+
try {
|
|
280
|
+
await Promise.all(workers);
|
|
321
281
|
}
|
|
322
|
-
|
|
323
|
-
|
|
282
|
+
catch (e) {
|
|
283
|
+
// Finish in-flight queries before rejecting the request. Workers stop taking
|
|
284
|
+
// new collections as soon as one encounters a non-authorization error.
|
|
285
|
+
await Promise.allSettled(workers);
|
|
286
|
+
throw e;
|
|
324
287
|
}
|
|
288
|
+
databaseSchemas.push({
|
|
289
|
+
name: db.name,
|
|
290
|
+
tables: tables.filter((table) => table != null)
|
|
291
|
+
});
|
|
325
292
|
}
|
|
326
|
-
|
|
327
|
-
return 'Long';
|
|
328
|
-
}
|
|
329
|
-
else if (typeof data == 'boolean') {
|
|
330
|
-
return 'Boolean';
|
|
331
|
-
}
|
|
332
|
-
else if (data instanceof mongo.ObjectId) {
|
|
333
|
-
return 'ObjectId';
|
|
334
|
-
}
|
|
335
|
-
else if (data instanceof mongo.UUID) {
|
|
336
|
-
return 'UUID';
|
|
337
|
-
}
|
|
338
|
-
else if (data instanceof Date) {
|
|
339
|
-
return 'Date';
|
|
340
|
-
}
|
|
341
|
-
else if (data instanceof mongo.Timestamp) {
|
|
342
|
-
return 'Timestamp';
|
|
343
|
-
}
|
|
344
|
-
else if (data instanceof mongo.Binary) {
|
|
345
|
-
return 'Binary';
|
|
346
|
-
}
|
|
347
|
-
else if (data instanceof mongo.Long) {
|
|
348
|
-
return 'Long';
|
|
349
|
-
}
|
|
350
|
-
else if (data instanceof RegExp) {
|
|
351
|
-
return 'RegExp';
|
|
352
|
-
}
|
|
353
|
-
else if (data instanceof mongo.MinKey) {
|
|
354
|
-
return 'MinKey';
|
|
355
|
-
}
|
|
356
|
-
else if (data instanceof mongo.MaxKey) {
|
|
357
|
-
return 'MaxKey';
|
|
358
|
-
}
|
|
359
|
-
else if (data instanceof mongo.Decimal128) {
|
|
360
|
-
return 'Decimal';
|
|
361
|
-
}
|
|
362
|
-
else if (Array.isArray(data)) {
|
|
363
|
-
return 'Array';
|
|
364
|
-
}
|
|
365
|
-
else if (data instanceof Uint8Array) {
|
|
366
|
-
return 'Binary';
|
|
367
|
-
}
|
|
368
|
-
else if (typeof data == 'object') {
|
|
369
|
-
return 'Object';
|
|
370
|
-
}
|
|
371
|
-
else {
|
|
372
|
-
return null;
|
|
373
|
-
}
|
|
293
|
+
return databaseSchemas;
|
|
374
294
|
}
|
|
375
295
|
}
|
|
376
296
|
//# sourceMappingURL=MongoRouteAPIAdapter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MongoRouteAPIAdapter.js","sourceRoot":"","sources":["../../src/api/MongoRouteAPIAdapter.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"MongoRouteAPIAdapter.js","sourceRoot":"","sources":["../../src/api/MongoRouteAPIAdapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { mongo } from '@powersync/lib-service-mongodb';
|
|
2
|
+
import { TableSchema } from '@powersync/service-types';
|
|
3
|
+
/**
|
|
4
|
+
* Infer top-level fields without transferring sampled document values to the service.
|
|
5
|
+
* Memory on the service scales with the inferred schema, not the size of those values.
|
|
6
|
+
*/
|
|
7
|
+
export declare function inferCollectionSchema(collection: mongo.Collection, isDocumentDb: boolean): Promise<TableSchema['columns']>;
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { mongo } from '@powersync/lib-service-mongodb';
|
|
2
|
+
import { ExpressionType } from '@powersync/service-sync-rules';
|
|
3
|
+
// Match the types exposed after BSON deserialization and conversion to sync rules values.
|
|
4
|
+
const BSON_TYPES = {
|
|
5
|
+
int: { name: 'Integer', sqliteType: ExpressionType.INTEGER },
|
|
6
|
+
long: { name: 'Long', sqliteType: ExpressionType.INTEGER },
|
|
7
|
+
double: { name: 'Double', sqliteType: ExpressionType.REAL },
|
|
8
|
+
decimal: { name: 'Decimal', sqliteType: ExpressionType.TEXT },
|
|
9
|
+
string: { name: 'String', sqliteType: ExpressionType.TEXT },
|
|
10
|
+
symbol: { name: 'String', sqliteType: ExpressionType.TEXT },
|
|
11
|
+
bool: { name: 'Boolean', sqliteType: ExpressionType.INTEGER },
|
|
12
|
+
objectId: { name: 'ObjectId', sqliteType: ExpressionType.TEXT },
|
|
13
|
+
uuid: { name: 'UUID', sqliteType: ExpressionType.TEXT },
|
|
14
|
+
binData: { name: 'Binary', sqliteType: ExpressionType.BLOB },
|
|
15
|
+
date: { name: 'Date', sqliteType: ExpressionType.TEXT },
|
|
16
|
+
timestamp: { name: 'Timestamp', sqliteType: ExpressionType.INTEGER },
|
|
17
|
+
regex: { name: 'RegExp', sqliteType: ExpressionType.TEXT },
|
|
18
|
+
object: { name: 'Object', sqliteType: ExpressionType.TEXT },
|
|
19
|
+
array: { name: 'Array', sqliteType: ExpressionType.TEXT },
|
|
20
|
+
javascript: { name: 'Object', sqliteType: ExpressionType.TEXT },
|
|
21
|
+
javascriptWithScope: { name: 'Object', sqliteType: ExpressionType.TEXT },
|
|
22
|
+
dbPointer: { name: 'Object', sqliteType: ExpressionType.TEXT },
|
|
23
|
+
null: { name: 'Null', sqliteType: ExpressionType.NONE },
|
|
24
|
+
undefined: { name: 'Null', sqliteType: ExpressionType.NONE },
|
|
25
|
+
minKey: { name: 'MinKey', sqliteType: ExpressionType.NONE },
|
|
26
|
+
maxKey: { name: 'MaxKey', sqliteType: ExpressionType.NONE }
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* Infer top-level fields without transferring sampled document values to the service.
|
|
30
|
+
* Memory on the service scales with the inferred schema, not the size of those values.
|
|
31
|
+
*/
|
|
32
|
+
export async function inferCollectionSchema(collection, isDocumentDb) {
|
|
33
|
+
const fields = await collection
|
|
34
|
+
.aggregate([
|
|
35
|
+
// Keep this first so MongoDB can use its random cursor on large collections.
|
|
36
|
+
{ $sample: { size: 50 } },
|
|
37
|
+
{
|
|
38
|
+
$project: {
|
|
39
|
+
_id: 0,
|
|
40
|
+
fields: {
|
|
41
|
+
$map: {
|
|
42
|
+
input: { $objectToArray: '$$ROOT' },
|
|
43
|
+
as: 'field',
|
|
44
|
+
in: {
|
|
45
|
+
name: '$$field.k',
|
|
46
|
+
type: {
|
|
47
|
+
$let: {
|
|
48
|
+
vars: { bsonType: { $type: '$$field.v' } },
|
|
49
|
+
in: {
|
|
50
|
+
$switch: {
|
|
51
|
+
branches: [
|
|
52
|
+
{
|
|
53
|
+
case: { $eq: ['$$bsonType', 'double'] },
|
|
54
|
+
// Whole-number doubles are replicated as SQLite integers.
|
|
55
|
+
then: { $cond: [{ $eq: [{ $mod: ['$$field.v', 1] }, 0] }, 'int', 'double'] }
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
case: { $eq: ['$$bsonType', 'binData'] },
|
|
59
|
+
then: {
|
|
60
|
+
$cond: [
|
|
61
|
+
// BinData compares by length, then subtype, then bytes. Only
|
|
62
|
+
// 16-byte values of subtype 4 fall within this UUID range.
|
|
63
|
+
// This works without transferring binary values or requiring
|
|
64
|
+
// the newer MongoDB binary conversion operators.
|
|
65
|
+
// https://www.mongodb.com/docs/manual/reference/bson-type-comparison-order/#bindata
|
|
66
|
+
{
|
|
67
|
+
$and: [
|
|
68
|
+
{ $gte: ['$$field.v', new mongo.UUID('00000000-0000-0000-0000-000000000000')] },
|
|
69
|
+
{ $lte: ['$$field.v', new mongo.UUID('ffffffff-ffff-ffff-ffff-ffffffffffff')] }
|
|
70
|
+
]
|
|
71
|
+
},
|
|
72
|
+
'uuid',
|
|
73
|
+
'binData'
|
|
74
|
+
]
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
],
|
|
78
|
+
default: '$$bsonType'
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
},
|
|
88
|
+
// Discard values before unwinding so large documents aren't duplicated per field.
|
|
89
|
+
{ $unwind: '$fields' },
|
|
90
|
+
{ $group: { _id: '$fields.name', types: { $addToSet: '$fields.type' } } }
|
|
91
|
+
], {
|
|
92
|
+
// Bound execution per collection below the default 60-second socket timeout
|
|
93
|
+
// so MongoDB can return a query timeout before the connection times out.
|
|
94
|
+
maxTimeMS: 30_000,
|
|
95
|
+
// Small collections can require $sample to sort full documents. Disable
|
|
96
|
+
// disk spill explicitly so concurrent schema queries fail at the memory
|
|
97
|
+
// limit without adding temporary-file I/O on the source database.
|
|
98
|
+
allowDiskUse: false,
|
|
99
|
+
// Field names are case-sensitive even when the collection's default collation isn't.
|
|
100
|
+
// DocumentDB rejects the collation option, including simple collation.
|
|
101
|
+
...(isDocumentDb ? {} : { collation: { locale: 'simple' } })
|
|
102
|
+
})
|
|
103
|
+
.toArray();
|
|
104
|
+
return fields
|
|
105
|
+
.map(({ _id: name, types }) => {
|
|
106
|
+
let sqliteType = ExpressionType.NONE;
|
|
107
|
+
const bsonTypes = new Set();
|
|
108
|
+
for (const type of types) {
|
|
109
|
+
const inferred = BSON_TYPES[type];
|
|
110
|
+
sqliteType = sqliteType.or(inferred.sqliteType);
|
|
111
|
+
bsonTypes.add(inferred.name);
|
|
112
|
+
}
|
|
113
|
+
const internal_type = [...bsonTypes].sort().join(' | ');
|
|
114
|
+
return { name, type: internal_type, sqlite_type: sqliteType.typeFlags, internal_type, pg_type: internal_type };
|
|
115
|
+
})
|
|
116
|
+
.sort((a, b) => a.name.localeCompare(b.name));
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=infer-collection-schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"infer-collection-schema.js","sourceRoot":"","sources":["../../src/api/infer-collection-schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -128,7 +128,7 @@ export class ChangeStream {
|
|
|
128
128
|
}
|
|
129
129
|
this.isDocumentDb = await detectDocumentDb(this.defaultDb);
|
|
130
130
|
if (this.isDocumentDb) {
|
|
131
|
-
this.logger.warn('Azure DocumentDB support is
|
|
131
|
+
this.logger.warn('Azure DocumentDB support is in alpha. APIs and behavior may change, and long-term stability is not yet guaranteed.');
|
|
132
132
|
}
|
|
133
133
|
this._checkpointImplementation = createCheckpointImplementation(this.isDocumentDb, {
|
|
134
134
|
client: this.client,
|
|
@@ -461,9 +461,6 @@ export class ChangeStream {
|
|
|
461
461
|
return rawChangeStream(watchDb, pipeline, {
|
|
462
462
|
batchSize: options.batchSize ?? this.snapshotChunkLength,
|
|
463
463
|
maxAwaitTimeMS,
|
|
464
|
-
// maxAwaitTimeMS can be 0 for probe-style streams that do not want an idle wait.
|
|
465
|
-
// In that case there is no client-side wait to emulate for DocumentDB.
|
|
466
|
-
clientSideMaxAwaitTimeMS: this.isDocumentDb && maxAwaitTimeMS > 0,
|
|
467
464
|
maxTimeMS: this.changeStreamTimeout,
|
|
468
465
|
signal: options.signal,
|
|
469
466
|
logger: this.logger,
|
|
@@ -491,6 +488,7 @@ export class ChangeStream {
|
|
|
491
488
|
// We get a complete postimage for every change, so we don't need to store the current data.
|
|
492
489
|
storeCurrentData: false,
|
|
493
490
|
hooks: this.storageHooks,
|
|
491
|
+
signal: this.abortSignal,
|
|
494
492
|
tracer
|
|
495
493
|
}, async (batch) => {
|
|
496
494
|
const { resumeFromLsn } = batch;
|