@powersync/service-module-mysql 0.9.14 → 0.9.16
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 +20 -0
- package/dist/common/mysql-to-sqlite.js +13 -4
- package/dist/common/mysql-to-sqlite.js.map +1 -1
- package/dist/replication/MySQLConnectionManager.js +4 -1
- package/dist/replication/MySQLConnectionManager.js.map +1 -1
- package/dist/utils/mysql-utils.js +1 -0
- package/dist/utils/mysql-utils.js.map +1 -1
- package/package.json +8 -8
- package/src/common/mysql-to-sqlite.ts +15 -4
- package/src/replication/MySQLConnectionManager.ts +4 -1
- package/src/utils/mysql-utils.ts +1 -0
- package/test/src/mysql-to-sqlite.test.ts +64 -8
- package/tsconfig.tsbuildinfo +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,25 @@
|
|
|
1
1
|
# @powersync/service-module-mysql
|
|
2
2
|
|
|
3
|
+
## 0.9.16
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- bdfd287: Add the `timestamp_max_precision` option for sync rules. It can be set to `seconds`, `milliseconds` or `microseconds` to restrict the precision of synced datetime values.
|
|
8
|
+
- Updated dependencies [8fdbf8d]
|
|
9
|
+
- Updated dependencies [bdfd287]
|
|
10
|
+
- @powersync/service-core@1.18.2
|
|
11
|
+
- @powersync/service-sync-rules@0.29.10
|
|
12
|
+
- @powersync/lib-services-framework@0.7.14
|
|
13
|
+
|
|
14
|
+
## 0.9.15
|
|
15
|
+
|
|
16
|
+
### Patch Changes
|
|
17
|
+
|
|
18
|
+
- Updated dependencies [21b3a41]
|
|
19
|
+
- @powersync/service-sync-rules@0.29.9
|
|
20
|
+
- @powersync/lib-services-framework@0.7.13
|
|
21
|
+
- @powersync/service-core@1.18.1
|
|
22
|
+
|
|
3
23
|
## 0.9.14
|
|
4
24
|
|
|
5
25
|
### Patch Changes
|
|
@@ -99,7 +99,7 @@ export function toSQLiteRow(row, columns) {
|
|
|
99
99
|
case mysql.Types.DATE:
|
|
100
100
|
// Only parse the date part
|
|
101
101
|
{
|
|
102
|
-
const date = row[key];
|
|
102
|
+
const date = new Date(row[key]);
|
|
103
103
|
if (isNaN(date.getTime())) {
|
|
104
104
|
// Invalid dates, such as 2024-00-00.
|
|
105
105
|
// we can't do anything meaningful with this, so just use null.
|
|
@@ -115,14 +115,18 @@ export function toSQLiteRow(row, columns) {
|
|
|
115
115
|
case mysql.Types.TIMESTAMP:
|
|
116
116
|
case ADDITIONAL_MYSQL_TYPES.TIMESTAMP2:
|
|
117
117
|
{
|
|
118
|
-
|
|
119
|
-
|
|
118
|
+
// Source format: "2023-03-06 15:47:00.000" (always in UTC). We:
|
|
119
|
+
// 1. Add the suffix so that `new Date` doesn't interpret the value in the local timezone.
|
|
120
|
+
// 2. Replace the space with `T` to make it a valid ISO format.
|
|
121
|
+
const formattedDate = `${row[key].replace(' ', 'T')}Z`;
|
|
122
|
+
const parsed = new Date(formattedDate);
|
|
123
|
+
if (isNaN(parsed.getTime())) {
|
|
120
124
|
// Invalid dates, such as 2024-00-00.
|
|
121
125
|
// we can't do anything meaningful with this, so just use null.
|
|
122
126
|
result[key] = null;
|
|
123
127
|
}
|
|
124
128
|
else {
|
|
125
|
-
result[key] =
|
|
129
|
+
result[key] = new sync_rules.DateTimeValue(formattedDate, parsed.toISOString(), mySqlDateTimeOptions);
|
|
126
130
|
}
|
|
127
131
|
}
|
|
128
132
|
break;
|
|
@@ -226,4 +230,9 @@ export function toExpressionTypeFromMySQLType(mysqlType) {
|
|
|
226
230
|
return ExpressionType.TEXT;
|
|
227
231
|
}
|
|
228
232
|
}
|
|
233
|
+
// We can provide microsecond accuracy, but for backwards compatibility we only offer millisecond accuracy by default.
|
|
234
|
+
const mySqlDateTimeOptions = {
|
|
235
|
+
subSecondPrecision: sync_rules.TimeValuePrecision.microseconds,
|
|
236
|
+
defaultSubSecondPrecision: sync_rules.TimeValuePrecision.milliseconds
|
|
237
|
+
};
|
|
229
238
|
//# sourceMappingURL=mysql-to-sqlite.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mysql-to-sqlite.js","sourceRoot":"","sources":["../../src/common/mysql-to-sqlite.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"mysql-to-sqlite.js","sourceRoot":"","sources":["../../src/common/mysql-to-sqlite.ts"],"names":[],"mappings":"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"}
|
|
@@ -39,7 +39,10 @@ export class MySQLConnectionManager extends BaseObserver {
|
|
|
39
39
|
host: this.options.hostname,
|
|
40
40
|
port: this.options.port,
|
|
41
41
|
user: this.options.username,
|
|
42
|
-
password: this.options.password
|
|
42
|
+
password: this.options.password,
|
|
43
|
+
// We want to avoid parsing date/time values to Date, because that drops sub-millisecond precision.
|
|
44
|
+
dateStrings: true,
|
|
45
|
+
timeZone: 'Z'
|
|
43
46
|
});
|
|
44
47
|
this.binlogListeners.push(listener);
|
|
45
48
|
return listener;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MySQLConnectionManager.js","sourceRoot":"","sources":["../../src/replication/MySQLConnectionManager.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,WAAW,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAMjD,MAAM,OAAO,sBAAuB,SAAQ,YAA4C;IAe7E;IACA;IAfT;;OAEG;IACc,IAAI,CAAa;IAClC;;OAEG;IACc,WAAW,CAAoB;IAExC,eAAe,GAAa,EAAE,CAAC;IAE/B,QAAQ,GAAG,KAAK,CAAC;IAEzB,YACS,OAAwC,EACxC,WAAqC;QAE5C,KAAK,EAAE,CAAC;QAHD,YAAO,GAAP,OAAO,CAAiC;QACxC,gBAAW,GAAX,WAAW,CAA0B;QAG5C,2EAA2E;QAC3E,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC,UAAU,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QACzD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;IACzC,CAAC;IAED,IAAW,aAAa;QACtB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;IAC1B,CAAC;IAED,IAAW,YAAY;QACrB,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;IACzB,CAAC;IAED,IAAW,YAAY;QACrB,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,oBAAoB;QAClB,MAAM,QAAQ,GAAG,IAAI,MAAM,CAAC;YAC1B,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ;YAC3B,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI;YACvB,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ;YAC3B,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ;
|
|
1
|
+
{"version":3,"file":"MySQLConnectionManager.js","sourceRoot":"","sources":["../../src/replication/MySQLConnectionManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -38,6 +38,7 @@ export function createPool(config, options) {
|
|
|
38
38
|
decimalNumbers: true,
|
|
39
39
|
timezone: 'Z', // Ensure no auto timezone manipulation of the dates occur
|
|
40
40
|
jsonStrings: true, // Return JSON columns as strings
|
|
41
|
+
dateStrings: true, // We parse and format them ourselves
|
|
41
42
|
...(options || {})
|
|
42
43
|
});
|
|
43
44
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mysql-utils.js","sourceRoot":"","sources":["../../src/utils/mysql-utils.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"mysql-utils.js","sourceRoot":"","sources":["../../src/utils/mysql-utils.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@powersync/service-module-mysql",
|
|
3
3
|
"repository": "https://github.com/powersync-ja/powersync-service",
|
|
4
4
|
"types": "dist/index.d.ts",
|
|
5
|
-
"version": "0.9.
|
|
5
|
+
"version": "0.9.16",
|
|
6
6
|
"license": "FSL-1.1-ALv2",
|
|
7
7
|
"main": "dist/index.js",
|
|
8
8
|
"type": "module",
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
}
|
|
23
23
|
},
|
|
24
24
|
"dependencies": {
|
|
25
|
-
"@powersync/mysql-zongji": "^0.
|
|
25
|
+
"@powersync/mysql-zongji": "^0.6.0",
|
|
26
26
|
"async": "^3.2.4",
|
|
27
27
|
"mysql2": "^3.11.0",
|
|
28
28
|
"node-sql-parser": "^5.3.9",
|
|
@@ -30,18 +30,18 @@
|
|
|
30
30
|
"ts-codec": "^1.3.0",
|
|
31
31
|
"uri-js": "^4.4.1",
|
|
32
32
|
"uuid": "^11.1.0",
|
|
33
|
-
"@powersync/lib-services-framework": "0.7.
|
|
34
|
-
"@powersync/service-core": "1.18.
|
|
35
|
-
"@powersync/service-sync-rules": "0.29.
|
|
33
|
+
"@powersync/lib-services-framework": "0.7.14",
|
|
34
|
+
"@powersync/service-core": "1.18.2",
|
|
35
|
+
"@powersync/service-sync-rules": "0.29.10",
|
|
36
36
|
"@powersync/service-types": "0.13.3",
|
|
37
37
|
"@powersync/service-jsonbig": "0.17.12"
|
|
38
38
|
},
|
|
39
39
|
"devDependencies": {
|
|
40
40
|
"@types/async": "^3.2.24",
|
|
41
41
|
"@types/semver": "^7.7.1",
|
|
42
|
-
"@powersync/service-core-tests": "0.12.
|
|
43
|
-
"@powersync/service-module-mongodb-storage": "0.12.
|
|
44
|
-
"@powersync/service-module-postgres-storage": "0.10.
|
|
42
|
+
"@powersync/service-core-tests": "0.12.16",
|
|
43
|
+
"@powersync/service-module-mongodb-storage": "0.12.16",
|
|
44
|
+
"@powersync/service-module-postgres-storage": "0.10.16"
|
|
45
45
|
},
|
|
46
46
|
"scripts": {
|
|
47
47
|
"build": "tsc -b",
|
|
@@ -117,7 +117,7 @@ export function toSQLiteRow(
|
|
|
117
117
|
case mysql.Types.DATE:
|
|
118
118
|
// Only parse the date part
|
|
119
119
|
{
|
|
120
|
-
const date = row[key]
|
|
120
|
+
const date = new Date(row[key]);
|
|
121
121
|
if (isNaN(date.getTime())) {
|
|
122
122
|
// Invalid dates, such as 2024-00-00.
|
|
123
123
|
// we can't do anything meaningful with this, so just use null.
|
|
@@ -132,13 +132,18 @@ export function toSQLiteRow(
|
|
|
132
132
|
case mysql.Types.TIMESTAMP:
|
|
133
133
|
case ADDITIONAL_MYSQL_TYPES.TIMESTAMP2:
|
|
134
134
|
{
|
|
135
|
-
|
|
136
|
-
|
|
135
|
+
// Source format: "2023-03-06 15:47:00.000" (always in UTC). We:
|
|
136
|
+
// 1. Add the suffix so that `new Date` doesn't interpret the value in the local timezone.
|
|
137
|
+
// 2. Replace the space with `T` to make it a valid ISO format.
|
|
138
|
+
const formattedDate = `${(row[key] as string).replace(' ', 'T')}Z`;
|
|
139
|
+
const parsed = new Date(formattedDate);
|
|
140
|
+
|
|
141
|
+
if (isNaN(parsed.getTime())) {
|
|
137
142
|
// Invalid dates, such as 2024-00-00.
|
|
138
143
|
// we can't do anything meaningful with this, so just use null.
|
|
139
144
|
result[key] = null;
|
|
140
145
|
} else {
|
|
141
|
-
result[key] =
|
|
146
|
+
result[key] = new sync_rules.DateTimeValue(formattedDate, parsed.toISOString(), mySqlDateTimeOptions);
|
|
142
147
|
}
|
|
143
148
|
}
|
|
144
149
|
break;
|
|
@@ -241,3 +246,9 @@ export function toExpressionTypeFromMySQLType(mysqlType: string | undefined): Ex
|
|
|
241
246
|
return ExpressionType.TEXT;
|
|
242
247
|
}
|
|
243
248
|
}
|
|
249
|
+
|
|
250
|
+
// We can provide microsecond accuracy, but for backwards compatibility we only offer millisecond accuracy by default.
|
|
251
|
+
const mySqlDateTimeOptions: sync_rules.DateTimeSourceOptions = {
|
|
252
|
+
subSecondPrecision: sync_rules.TimeValuePrecision.microseconds,
|
|
253
|
+
defaultSubSecondPrecision: sync_rules.TimeValuePrecision.milliseconds
|
|
254
|
+
};
|
|
@@ -53,7 +53,10 @@ export class MySQLConnectionManager extends BaseObserver<MySQLConnectionManagerL
|
|
|
53
53
|
host: this.options.hostname,
|
|
54
54
|
port: this.options.port,
|
|
55
55
|
user: this.options.username,
|
|
56
|
-
password: this.options.password
|
|
56
|
+
password: this.options.password,
|
|
57
|
+
// We want to avoid parsing date/time values to Date, because that drops sub-millisecond precision.
|
|
58
|
+
dateStrings: true,
|
|
59
|
+
timeZone: 'Z'
|
|
57
60
|
});
|
|
58
61
|
|
|
59
62
|
this.binlogListeners.push(listener);
|
package/src/utils/mysql-utils.ts
CHANGED
|
@@ -49,6 +49,7 @@ export function createPool(config: types.NormalizedMySQLConnectionConfig, option
|
|
|
49
49
|
decimalNumbers: true,
|
|
50
50
|
timezone: 'Z', // Ensure no auto timezone manipulation of the dates occur
|
|
51
51
|
jsonStrings: true, // Return JSON columns as strings
|
|
52
|
+
dateStrings: true, // We parse and format them ourselves
|
|
52
53
|
...(options || {})
|
|
53
54
|
});
|
|
54
55
|
}
|
|
@@ -1,4 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
applyRowContext,
|
|
3
|
+
CompatibilityContext,
|
|
4
|
+
SqliteInputRow,
|
|
5
|
+
SqliteRow,
|
|
6
|
+
TimeValuePrecision
|
|
7
|
+
} from '@powersync/service-sync-rules';
|
|
2
8
|
import { afterAll, describe, expect, test } from 'vitest';
|
|
3
9
|
import { clearTestDb, TEST_CONNECTION_OPTIONS } from './util.js';
|
|
4
10
|
import { eventIsWriteMutation, eventIsXid } from '@module/replication/zongji/zongji-utils.js';
|
|
@@ -33,8 +39,8 @@ describe('MySQL Data Types', () => {
|
|
|
33
39
|
serial_col SERIAL,
|
|
34
40
|
|
|
35
41
|
date_col DATE,
|
|
36
|
-
datetime_col DATETIME(
|
|
37
|
-
timestamp_col TIMESTAMP(
|
|
42
|
+
datetime_col DATETIME(6),
|
|
43
|
+
timestamp_col TIMESTAMP(6),
|
|
38
44
|
time_col TIME,
|
|
39
45
|
year_col YEAR,
|
|
40
46
|
|
|
@@ -228,8 +234,52 @@ INSERT INTO test_data (
|
|
|
228
234
|
year_col: 2023
|
|
229
235
|
};
|
|
230
236
|
|
|
231
|
-
expect(databaseRows[0]).toMatchObject(
|
|
232
|
-
|
|
237
|
+
expect(applyRowContext(databaseRows[0], CompatibilityContext.FULL_BACKWARDS_COMPATIBILITY)).toMatchObject(
|
|
238
|
+
expectedResult
|
|
239
|
+
);
|
|
240
|
+
expect(applyRowContext(replicatedRows[0], CompatibilityContext.FULL_BACKWARDS_COMPATIBILITY)).toMatchObject(
|
|
241
|
+
expectedResult
|
|
242
|
+
);
|
|
243
|
+
expect(applyRowContext(databaseRows[0], new CompatibilityContext({ edition: 2 }))).toMatchObject(expectedResult);
|
|
244
|
+
expect(applyRowContext(replicatedRows[0], new CompatibilityContext({ edition: 2 }))).toMatchObject(expectedResult);
|
|
245
|
+
});
|
|
246
|
+
|
|
247
|
+
test('Date sub-millisecond precision', async () => {
|
|
248
|
+
await setupTable();
|
|
249
|
+
// Timezone offset is set on the pool to +00:00
|
|
250
|
+
await connectionManager.query(`
|
|
251
|
+
INSERT INTO test_data(datetime_col, timestamp_col)
|
|
252
|
+
VALUES('2023-03-06 15:47:12.123456', '2023-03-06 15:47:12.123456');
|
|
253
|
+
`);
|
|
254
|
+
|
|
255
|
+
const databaseRows = await getDatabaseRows(connectionManager, 'test_data');
|
|
256
|
+
const replicatedRows = await getReplicatedRows();
|
|
257
|
+
const expectedResult = {
|
|
258
|
+
datetime_col: '2023-03-06T15:47:12.123Z',
|
|
259
|
+
timestamp_col: '2023-03-06T15:47:12.123Z'
|
|
260
|
+
};
|
|
261
|
+
|
|
262
|
+
expect(applyRowContext(databaseRows[0], CompatibilityContext.FULL_BACKWARDS_COMPATIBILITY)).toMatchObject(
|
|
263
|
+
expectedResult
|
|
264
|
+
);
|
|
265
|
+
expect(applyRowContext(replicatedRows[0], CompatibilityContext.FULL_BACKWARDS_COMPATIBILITY)).toMatchObject(
|
|
266
|
+
expectedResult
|
|
267
|
+
);
|
|
268
|
+
|
|
269
|
+
const defaultMigratedContext = new CompatibilityContext({ edition: 2 });
|
|
270
|
+
expect(applyRowContext(databaseRows[0], defaultMigratedContext)).toMatchObject(expectedResult);
|
|
271
|
+
expect(applyRowContext(replicatedRows[0], defaultMigratedContext)).toMatchObject(expectedResult);
|
|
272
|
+
|
|
273
|
+
const increasedPrecisionContext = new CompatibilityContext({
|
|
274
|
+
edition: 2,
|
|
275
|
+
maxTimeValuePrecision: TimeValuePrecision.microseconds
|
|
276
|
+
});
|
|
277
|
+
const precisionResult = {
|
|
278
|
+
datetime_col: '2023-03-06T15:47:12.123456Z',
|
|
279
|
+
timestamp_col: '2023-03-06T15:47:12.123456Z'
|
|
280
|
+
};
|
|
281
|
+
expect(applyRowContext(databaseRows[0], increasedPrecisionContext)).toMatchObject(precisionResult);
|
|
282
|
+
expect(applyRowContext(replicatedRows[0], increasedPrecisionContext)).toMatchObject(precisionResult);
|
|
233
283
|
});
|
|
234
284
|
|
|
235
285
|
test('Date types edge cases mappings', async () => {
|
|
@@ -264,8 +314,12 @@ INSERT INTO test_data (
|
|
|
264
314
|
const replicatedRows = await getReplicatedRows(expectedResults.length);
|
|
265
315
|
|
|
266
316
|
for (let i = 0; i < expectedResults.length; i++) {
|
|
267
|
-
expect(databaseRows[i]).toMatchObject(
|
|
268
|
-
|
|
317
|
+
expect(applyRowContext(databaseRows[i], CompatibilityContext.FULL_BACKWARDS_COMPATIBILITY)).toMatchObject(
|
|
318
|
+
expectedResults[i]
|
|
319
|
+
);
|
|
320
|
+
expect(applyRowContext(replicatedRows[i], CompatibilityContext.FULL_BACKWARDS_COMPATIBILITY)).toMatchObject(
|
|
321
|
+
expectedResults[i]
|
|
322
|
+
);
|
|
269
323
|
}
|
|
270
324
|
} finally {
|
|
271
325
|
connection.release;
|
|
@@ -312,7 +366,9 @@ async function getReplicatedRows(expectedTransactionsCount?: number): Promise<Sq
|
|
|
312
366
|
const zongji = new ZongJi({
|
|
313
367
|
host: TEST_CONNECTION_OPTIONS.hostname,
|
|
314
368
|
user: TEST_CONNECTION_OPTIONS.username,
|
|
315
|
-
password: TEST_CONNECTION_OPTIONS.password
|
|
369
|
+
password: TEST_CONNECTION_OPTIONS.password,
|
|
370
|
+
dateStrings: true,
|
|
371
|
+
timeZone: 'Z'
|
|
316
372
|
});
|
|
317
373
|
|
|
318
374
|
const completionPromise = new Promise<SqliteInputRow[]>((resolve, reject) => {
|