Skip to content

Commit c209538

Browse files
authored
Merge pull request #123 from powersync-ja/mongodb-types-2
[MongoDB] More types fixes
2 parents 7ba4d11 + 3395de6 commit c209538

File tree

2 files changed

+44
-7
lines changed

2 files changed

+44
-7
lines changed

modules/module-mongodb/src/replication/MongoRelation.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -121,9 +121,9 @@ function filterJsonData(data: any, depth = 0): any {
121121
} else if (data instanceof mongo.Decimal128) {
122122
return data.toString();
123123
} else if (data instanceof mongo.MinKey || data instanceof mongo.MaxKey) {
124-
return data._bsontype;
125-
} else if (data instanceof mongo.BSONRegExp) {
126-
return JSON.stringify({ pattern: data.pattern, options: data.options });
124+
return null;
125+
} else if (data instanceof RegExp) {
126+
return { pattern: data.source, options: data.flags };
127127
} else if (Array.isArray(data)) {
128128
return data.map((element) => filterJsonData(element, depth + 1));
129129
} else if (ArrayBuffer.isView(data)) {

modules/module-mongodb/test/src/mongo_test.test.ts

Lines changed: 41 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,18 @@ describe('mongo data types', () => {
3434
objectId: mongo.ObjectId.createFromHexString('66e834cc91d805df11fa0ecb'),
3535
regexp: new mongo.BSONRegExp('test', 'i'),
3636
minKey: new mongo.MinKey(),
37-
maxKey: new mongo.MaxKey()
37+
maxKey: new mongo.MaxKey(),
38+
symbol: new mongo.BSONSymbol('test'),
39+
js: new mongo.Code('testcode'),
40+
js2: new mongo.Code('testcode', { foo: 'bar' }),
41+
pointer: new mongo.DBRef('mycollection', mongo.ObjectId.createFromHexString('66e834cc91d805df11fa0ecb')),
42+
pointer2: new mongo.DBRef(
43+
'mycollection',
44+
mongo.ObjectId.createFromHexString('66e834cc91d805df11fa0ecb'),
45+
'mydb',
46+
{ foo: 'bar' }
47+
),
48+
undefined: undefined
3849
}
3950
]);
4051
}
@@ -62,7 +73,11 @@ describe('mongo data types', () => {
6273
objectId: [mongo.ObjectId.createFromHexString('66e834cc91d805df11fa0ecb')],
6374
regexp: [new mongo.BSONRegExp('test', 'i')],
6475
minKey: [new mongo.MinKey()],
65-
maxKey: [new mongo.MaxKey()]
76+
maxKey: [new mongo.MaxKey()],
77+
symbol: [new mongo.BSONSymbol('test')],
78+
js: [new mongo.Code('testcode')],
79+
pointer: [new mongo.DBRef('mycollection', mongo.ObjectId.createFromHexString('66e834cc91d805df11fa0ecb'))],
80+
undefined: [undefined]
6681
}
6782
]);
6883
}
@@ -97,7 +112,13 @@ describe('mongo data types', () => {
97112
timestamp: 1958505087099n,
98113
regexp: '{"pattern":"test","options":"i"}',
99114
minKey: null,
100-
maxKey: null
115+
maxKey: null,
116+
symbol: 'test',
117+
js: '{"code":"testcode","scope":null}',
118+
js2: '{"code":"testcode","scope":{"foo":"bar"}}',
119+
pointer: '{"collection":"mycollection","oid":"66e834cc91d805df11fa0ecb","fields":{}}',
120+
pointer2: '{"collection":"mycollection","oid":"66e834cc91d805df11fa0ecb","db":"mydb","fields":{"foo":"bar"}}',
121+
undefined: null
101122
});
102123
}
103124

@@ -130,7 +151,14 @@ describe('mongo data types', () => {
130151
expect(transformed[3]).toMatchObject({
131152
_id: 10n,
132153
objectId: '["66e834cc91d805df11fa0ecb"]',
133-
timestamp: '[1958505087099]'
154+
timestamp: '[1958505087099]',
155+
regexp: '[{"pattern":"test","options":"i"}]',
156+
symbol: '["test"]',
157+
js: '[{"code":"testcode","scope":null}]',
158+
pointer: '[{"collection":"mycollection","oid":"66e834cc91d805df11fa0ecb","fields":{}}]',
159+
minKey: '[null]',
160+
maxKey: '[null]',
161+
undefined: '[null]'
134162
});
135163
}
136164

@@ -245,14 +273,23 @@ describe('mongo data types', () => {
245273
{ name: 'int2', sqlite_type: 4, internal_type: 'Integer' },
246274
{ name: 'int4', sqlite_type: 4, internal_type: 'Integer' },
247275
{ name: 'int8', sqlite_type: 4, internal_type: 'Long' },
276+
// We can fix these later
277+
{ name: 'js', sqlite_type: 2, internal_type: 'Object' },
278+
{ name: 'js2', sqlite_type: 2, internal_type: 'Object' },
248279
{ name: 'maxKey', sqlite_type: 0, internal_type: 'MaxKey' },
249280
{ name: 'minKey', sqlite_type: 0, internal_type: 'MinKey' },
250281
{ name: 'nested', sqlite_type: 2, internal_type: 'Object' },
251282
{ name: 'null', sqlite_type: 0, internal_type: 'Null' },
252283
{ name: 'objectId', sqlite_type: 2, internal_type: 'ObjectId' },
284+
// We can fix these later
285+
{ name: 'pointer', sqlite_type: 2, internal_type: 'Object' },
286+
{ name: 'pointer2', sqlite_type: 2, internal_type: 'Object' },
253287
{ name: 'regexp', sqlite_type: 2, internal_type: 'RegExp' },
288+
// Can fix this later
289+
{ name: 'symbol', sqlite_type: 2, internal_type: 'String' },
254290
{ name: 'text', sqlite_type: 2, internal_type: 'String' },
255291
{ name: 'timestamp', sqlite_type: 4, internal_type: 'Timestamp' },
292+
{ name: 'undefined', sqlite_type: 0, internal_type: 'Null' },
256293
{ name: 'uuid', sqlite_type: 2, internal_type: 'UUID' }
257294
]
258295
}

0 commit comments

Comments
 (0)