@powersync/service-module-mysql 0.0.0-dev-20241101083236 → 0.0.0-dev-20241111122558
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 +11 -8
- package/dev/config/sync_rules.yaml +2 -4
- package/dist/api/MySQLRouteAPIAdapter.js +9 -8
- package/dist/api/MySQLRouteAPIAdapter.js.map +1 -1
- package/dist/common/ReplicatedGTID.js +1 -1
- package/dist/common/check-source-configuration.d.ts +0 -1
- package/dist/common/check-source-configuration.js +6 -8
- package/dist/common/check-source-configuration.js.map +1 -1
- package/dist/common/get-replication-columns.js +1 -1
- package/dist/common/mysql-to-sqlite.d.ts +17 -1
- package/dist/common/mysql-to-sqlite.js +133 -8
- package/dist/common/mysql-to-sqlite.js.map +1 -1
- package/dist/common/read-executed-gtid.js +4 -10
- package/dist/common/read-executed-gtid.js.map +1 -1
- package/dist/replication/BinLogStream.js +25 -21
- package/dist/replication/BinLogStream.js.map +1 -1
- package/dist/replication/MySQLConnectionManager.d.ts +2 -2
- package/dist/replication/MySQLConnectionManager.js +1 -1
- package/dist/utils/mysql-utils.d.ts +30 -0
- package/dist/utils/mysql-utils.js +70 -0
- package/dist/utils/mysql-utils.js.map +1 -0
- package/package.json +7 -6
- package/src/api/MySQLRouteAPIAdapter.ts +11 -9
- package/src/common/ReplicatedGTID.ts +1 -1
- package/src/common/check-source-configuration.ts +9 -10
- package/src/common/get-replication-columns.ts +1 -1
- package/src/common/mysql-to-sqlite.ts +147 -8
- package/src/common/read-executed-gtid.ts +5 -12
- package/src/replication/BinLogStream.ts +29 -21
- package/src/replication/MySQLConnectionManager.ts +3 -3
- package/src/utils/{mysql_utils.ts → mysql-utils.ts} +36 -5
- package/test/src/BinLogStream.test.ts +306 -0
- package/test/src/BinlogStreamUtils.ts +157 -0
- package/test/src/env.ts +1 -1
- package/test/src/mysql-to-sqlite.test.ts +322 -0
- package/test/src/mysql-utils.test.ts +17 -0
- package/test/src/util.ts +11 -17
- package/test/tsconfig.json +1 -1
- package/tsconfig.tsbuildinfo +1 -1
- package/dist/utils/mysql_utils.d.ts +0 -17
- package/dist/utils/mysql_utils.js +0 -43
- package/dist/utils/mysql_utils.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,17 +1,20 @@
|
|
|
1
1
|
# @powersync/service-module-mysql
|
|
2
2
|
|
|
3
|
-
## 0.0.0-dev-
|
|
3
|
+
## 0.0.0-dev-20241111122558
|
|
4
4
|
|
|
5
5
|
### Minor Changes
|
|
6
6
|
|
|
7
|
+
- 5f31083: Generate random serverId based on syncrule id for MySQL replication client
|
|
8
|
+
Consolidated type mappings between snapshot and replicated values
|
|
9
|
+
Enabled MySQL tests in CI
|
|
7
10
|
- 8610431: Introduced alpha support for MySQL as a datasource for replication.
|
|
8
11
|
Bunch of cleanup
|
|
9
12
|
|
|
10
13
|
### Patch Changes
|
|
11
14
|
|
|
12
|
-
-
|
|
13
|
-
-
|
|
14
|
-
- Updated dependencies [
|
|
15
|
+
- c879923: Fixed MySQL version checking to better handle non-semantic version strings
|
|
16
|
+
- 7ba4d11: Fixed mysql schema json parsing
|
|
17
|
+
- Updated dependencies [ac03d8f]
|
|
15
18
|
- Updated dependencies [e4d19b2]
|
|
16
19
|
- Updated dependencies [d2ece1b]
|
|
17
20
|
- Updated dependencies [d2ece1b]
|
|
@@ -20,7 +23,7 @@
|
|
|
20
23
|
- Updated dependencies [d2ece1b]
|
|
21
24
|
- Updated dependencies [d51921f]
|
|
22
25
|
- Updated dependencies [4ecaee2]
|
|
23
|
-
- @powersync/service-core@0.0.0-dev-
|
|
24
|
-
- @powersync/lib-services-framework@0.0.0-dev-
|
|
25
|
-
- @powersync/service-sync-rules@0.0.0-dev-
|
|
26
|
-
- @powersync/service-types@0.0.0-dev-
|
|
26
|
+
- @powersync/service-core@0.0.0-dev-20241111122558
|
|
27
|
+
- @powersync/lib-services-framework@0.0.0-dev-20241111122558
|
|
28
|
+
- @powersync/service-sync-rules@0.0.0-dev-20241111122558
|
|
29
|
+
- @powersync/service-types@0.0.0-dev-20241111122558
|
|
@@ -3,10 +3,8 @@
|
|
|
3
3
|
# Note that changes to this file are not watched.
|
|
4
4
|
# The service needs to be restarted for changes to take effect.
|
|
5
5
|
|
|
6
|
-
# Note that specifying the schema is currently required due to the default
|
|
7
|
-
# schema being specified as `public`, but in mysql the schema is the database name
|
|
8
6
|
bucket_definitions:
|
|
9
7
|
global:
|
|
10
8
|
data:
|
|
11
|
-
- SELECT * FROM
|
|
12
|
-
- SELECT * FROM
|
|
9
|
+
- SELECT * FROM lists
|
|
10
|
+
- SELECT * FROM todos
|
|
@@ -2,7 +2,7 @@ import { storage } from '@powersync/service-core';
|
|
|
2
2
|
import * as sync_rules from '@powersync/service-sync-rules';
|
|
3
3
|
import * as service_types from '@powersync/service-types';
|
|
4
4
|
import * as common from '../common/common-index.js';
|
|
5
|
-
import * as mysql_utils from '../utils/
|
|
5
|
+
import * as mysql_utils from '../utils/mysql-utils.js';
|
|
6
6
|
import { toExpressionTypeFromMySQLType } from '../common/common-index.js';
|
|
7
7
|
export class MySQLRouteAPIAdapter {
|
|
8
8
|
constructor(config) {
|
|
@@ -284,15 +284,16 @@ export class MySQLRouteAPIAdapter {
|
|
|
284
284
|
name: result.schema_name,
|
|
285
285
|
tables: []
|
|
286
286
|
});
|
|
287
|
+
const columns = JSON.parse(result.columns).map((column) => ({
|
|
288
|
+
name: column.column_name,
|
|
289
|
+
type: column.data_type,
|
|
290
|
+
sqlite_type: toExpressionTypeFromMySQLType(column.data_type).typeFlags,
|
|
291
|
+
internal_type: column.data_type,
|
|
292
|
+
pg_type: column.data_type
|
|
293
|
+
}));
|
|
287
294
|
schema.tables.push({
|
|
288
295
|
name: result.table_name,
|
|
289
|
-
columns:
|
|
290
|
-
name: column.column_name,
|
|
291
|
-
type: column.data_type,
|
|
292
|
-
sqlite_type: toExpressionTypeFromMySQLType(column.data_type).typeFlags,
|
|
293
|
-
internal_type: column.data_type,
|
|
294
|
-
pg_type: column.data_type
|
|
295
|
-
}))
|
|
296
|
+
columns: columns
|
|
296
297
|
});
|
|
297
298
|
return hash;
|
|
298
299
|
}, {}));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MySQLRouteAPIAdapter.js","sourceRoot":"","sources":["../../src/api/MySQLRouteAPIAdapter.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"MySQLRouteAPIAdapter.js","sourceRoot":"","sources":["../../src/api/MySQLRouteAPIAdapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,11 @@
|
|
|
1
|
-
import * as mysql_utils from '../utils/
|
|
1
|
+
import * as mysql_utils from '../utils/mysql-utils.js';
|
|
2
|
+
const MIN_SUPPORTED_VERSION = '5.7.0';
|
|
2
3
|
export async function checkSourceConfiguration(connection) {
|
|
3
4
|
const errors = [];
|
|
5
|
+
const version = await mysql_utils.getMySQLVersion(connection);
|
|
6
|
+
if (!mysql_utils.isVersionAtLeast(version, MIN_SUPPORTED_VERSION)) {
|
|
7
|
+
errors.push(`MySQL versions older than ${MIN_SUPPORTED_VERSION} are not supported. Your version is: ${version}.`);
|
|
8
|
+
}
|
|
4
9
|
const [[result]] = await mysql_utils.retriedQuery({
|
|
5
10
|
connection,
|
|
6
11
|
query: `
|
|
@@ -36,11 +41,4 @@ export async function checkSourceConfiguration(connection) {
|
|
|
36
41
|
}
|
|
37
42
|
return errors;
|
|
38
43
|
}
|
|
39
|
-
export async function getMySQLVersion(connection) {
|
|
40
|
-
const [[versionResult]] = await mysql_utils.retriedQuery({
|
|
41
|
-
connection,
|
|
42
|
-
query: `SELECT VERSION() as version`
|
|
43
|
-
});
|
|
44
|
-
return versionResult.version;
|
|
45
|
-
}
|
|
46
44
|
//# sourceMappingURL=check-source-configuration.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check-source-configuration.js","sourceRoot":"","sources":["../../src/common/check-source-configuration.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,WAAW,MAAM,yBAAyB,CAAC;AAEvD,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,UAAmC;IAChF,MAAM,MAAM,GAAa,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"check-source-configuration.js","sourceRoot":"","sources":["../../src/common/check-source-configuration.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,WAAW,MAAM,yBAAyB,CAAC;AAEvD,MAAM,qBAAqB,GAAG,OAAO,CAAC;AAEtC,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,UAAmC;IAChF,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;IAC9D,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,OAAO,EAAE,qBAAqB,CAAC,EAAE,CAAC;QAClE,MAAM,CAAC,IAAI,CAAC,6BAA6B,qBAAqB,wCAAwC,OAAO,GAAG,CAAC,CAAC;IACpH,CAAC;IAED,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,WAAW,CAAC,YAAY,CAAC;QAChD,UAAU;QACV,KAAK,EAAE;;;;;;;OAOJ;KACJ,CAAC,CAAC;IAEH,IAAI,MAAM,CAAC,SAAS,IAAI,IAAI,EAAE,CAAC;QAC7B,MAAM,CAAC,IAAI,CAAC,+CAA+C,MAAM,CAAC,SAAS,qBAAqB,CAAC,CAAC;IACpG,CAAC;IAED,IAAI,MAAM,CAAC,OAAO,IAAI,CAAC,EAAE,CAAC;QACxB,MAAM,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC;IAClE,CAAC;IAED,IAAI,MAAM,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC;QACzB,MAAM,CAAC,IAAI,CACT,iFAAiF,MAAM,CAAC,SAAS,sCAAsC,CACxI,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;QACxB,MAAM,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAC;IACzE,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAC;QAC9B,MAAM,CAAC,IAAI,CAAC,+DAA+D,CAAC,CAAC;IAC/E,CAAC;IAED,MAAM,CAAC,CAAC,kBAAkB,CAAC,CAAC,GAAG,MAAM,WAAW,CAAC,YAAY,CAAC;QAC5D,UAAU;QACV,KAAK,EAAE,sCAAsC;KAC9C,CAAC,CAAC;IAEH,IAAI,kBAAkB,CAAC,KAAK,KAAK,KAAK,EAAE,CAAC;QACvC,MAAM,CAAC,IAAI,CAAC,2EAA2E,CAAC,CAAC;IAC3F,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import * as mysql_utils from '../utils/
|
|
1
|
+
import * as mysql_utils from '../utils/mysql-utils.js';
|
|
2
2
|
export async function getReplicationIdentityColumns(options) {
|
|
3
3
|
const { connection, schema, table_name } = options;
|
|
4
4
|
const [primaryKeyColumns] = await mysql_utils.retriedQuery({
|
|
@@ -1,5 +1,21 @@
|
|
|
1
1
|
import * as sync_rules from '@powersync/service-sync-rules';
|
|
2
2
|
import { ExpressionType } from '@powersync/service-sync-rules';
|
|
3
3
|
import { ColumnDescriptor } from '@powersync/service-core';
|
|
4
|
-
|
|
4
|
+
import mysql from 'mysql2';
|
|
5
|
+
import { ColumnDefinition, TableMapEntry } from '@powersync/mysql-zongji';
|
|
6
|
+
export declare enum ADDITIONAL_MYSQL_TYPES {
|
|
7
|
+
DATETIME2 = 18,
|
|
8
|
+
TIMESTAMP2 = 17,
|
|
9
|
+
BINARY = 100,
|
|
10
|
+
VARBINARY = 101,
|
|
11
|
+
TEXT = 102
|
|
12
|
+
}
|
|
13
|
+
export declare const MySQLTypesMap: {
|
|
14
|
+
[key: number]: string;
|
|
15
|
+
};
|
|
16
|
+
export declare function toColumnDescriptors(columns: mysql.FieldPacket[]): Map<string, ColumnDescriptor>;
|
|
17
|
+
export declare function toColumnDescriptors(tableMap: TableMapEntry): Map<string, ColumnDescriptor>;
|
|
18
|
+
export declare function toColumnDescriptorFromFieldPacket(column: mysql.FieldPacket): ColumnDescriptor;
|
|
19
|
+
export declare function toColumnDescriptorFromDefinition(column: ColumnDefinition): ColumnDescriptor;
|
|
20
|
+
export declare function toSQLiteRow(row: Record<string, any>, columns: Map<string, ColumnDescriptor>): sync_rules.SqliteRow;
|
|
5
21
|
export declare function toExpressionTypeFromMySQLType(mysqlType: string | undefined): ExpressionType;
|
|
@@ -1,16 +1,141 @@
|
|
|
1
1
|
import * as sync_rules from '@powersync/service-sync-rules';
|
|
2
2
|
import { ExpressionType } from '@powersync/service-sync-rules';
|
|
3
3
|
import mysql from 'mysql2';
|
|
4
|
+
import { JSONBig, JsonContainer } from '@powersync/service-jsonbig';
|
|
5
|
+
export var ADDITIONAL_MYSQL_TYPES;
|
|
6
|
+
(function (ADDITIONAL_MYSQL_TYPES) {
|
|
7
|
+
ADDITIONAL_MYSQL_TYPES[ADDITIONAL_MYSQL_TYPES["DATETIME2"] = 18] = "DATETIME2";
|
|
8
|
+
ADDITIONAL_MYSQL_TYPES[ADDITIONAL_MYSQL_TYPES["TIMESTAMP2"] = 17] = "TIMESTAMP2";
|
|
9
|
+
ADDITIONAL_MYSQL_TYPES[ADDITIONAL_MYSQL_TYPES["BINARY"] = 100] = "BINARY";
|
|
10
|
+
ADDITIONAL_MYSQL_TYPES[ADDITIONAL_MYSQL_TYPES["VARBINARY"] = 101] = "VARBINARY";
|
|
11
|
+
ADDITIONAL_MYSQL_TYPES[ADDITIONAL_MYSQL_TYPES["TEXT"] = 102] = "TEXT";
|
|
12
|
+
})(ADDITIONAL_MYSQL_TYPES || (ADDITIONAL_MYSQL_TYPES = {}));
|
|
13
|
+
export const MySQLTypesMap = {};
|
|
14
|
+
for (const [name, code] of Object.entries(mysql.Types)) {
|
|
15
|
+
MySQLTypesMap[code] = name;
|
|
16
|
+
}
|
|
17
|
+
for (const [name, code] of Object.entries(ADDITIONAL_MYSQL_TYPES)) {
|
|
18
|
+
MySQLTypesMap[code] = name;
|
|
19
|
+
}
|
|
20
|
+
export function toColumnDescriptors(columns) {
|
|
21
|
+
const columnMap = new Map();
|
|
22
|
+
if (Array.isArray(columns)) {
|
|
23
|
+
for (const column of columns) {
|
|
24
|
+
columnMap.set(column.name, toColumnDescriptorFromFieldPacket(column));
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
for (const column of columns.columns) {
|
|
29
|
+
columnMap.set(column.name, toColumnDescriptorFromDefinition(column));
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return columnMap;
|
|
33
|
+
}
|
|
34
|
+
export function toColumnDescriptorFromFieldPacket(column) {
|
|
35
|
+
let typeId = column.type;
|
|
36
|
+
const BINARY_FLAG = 128;
|
|
37
|
+
const MYSQL_ENUM_FLAG = 256;
|
|
38
|
+
const MYSQL_SET_FLAG = 2048;
|
|
39
|
+
switch (column.type) {
|
|
40
|
+
case mysql.Types.STRING:
|
|
41
|
+
if ((column.flags & BINARY_FLAG) !== 0) {
|
|
42
|
+
typeId = ADDITIONAL_MYSQL_TYPES.BINARY;
|
|
43
|
+
}
|
|
44
|
+
else if ((column.flags & MYSQL_ENUM_FLAG) !== 0) {
|
|
45
|
+
typeId = mysql.Types.ENUM;
|
|
46
|
+
}
|
|
47
|
+
else if ((column.flags & MYSQL_SET_FLAG) !== 0) {
|
|
48
|
+
typeId = mysql.Types.SET;
|
|
49
|
+
}
|
|
50
|
+
break;
|
|
51
|
+
case mysql.Types.VAR_STRING:
|
|
52
|
+
typeId = (column.flags & BINARY_FLAG) !== 0 ? ADDITIONAL_MYSQL_TYPES.VARBINARY : column.type;
|
|
53
|
+
break;
|
|
54
|
+
case mysql.Types.BLOB:
|
|
55
|
+
typeId = (column.flags & BINARY_FLAG) === 0 ? ADDITIONAL_MYSQL_TYPES.TEXT : column.type;
|
|
56
|
+
break;
|
|
57
|
+
}
|
|
58
|
+
const columnType = MySQLTypesMap[typeId];
|
|
59
|
+
return {
|
|
60
|
+
name: column.name,
|
|
61
|
+
type: columnType,
|
|
62
|
+
typeId: typeId
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
export function toColumnDescriptorFromDefinition(column) {
|
|
66
|
+
let typeId = column.type;
|
|
67
|
+
switch (column.type) {
|
|
68
|
+
case mysql.Types.STRING:
|
|
69
|
+
typeId = !column.charset ? ADDITIONAL_MYSQL_TYPES.BINARY : column.type;
|
|
70
|
+
break;
|
|
71
|
+
case mysql.Types.VAR_STRING:
|
|
72
|
+
case mysql.Types.VARCHAR:
|
|
73
|
+
typeId = !column.charset ? ADDITIONAL_MYSQL_TYPES.VARBINARY : column.type;
|
|
74
|
+
break;
|
|
75
|
+
case mysql.Types.BLOB:
|
|
76
|
+
typeId = column.charset ? ADDITIONAL_MYSQL_TYPES.TEXT : column.type;
|
|
77
|
+
break;
|
|
78
|
+
}
|
|
79
|
+
const columnType = MySQLTypesMap[typeId];
|
|
80
|
+
return {
|
|
81
|
+
name: column.name,
|
|
82
|
+
type: columnType,
|
|
83
|
+
typeId: typeId
|
|
84
|
+
};
|
|
85
|
+
}
|
|
4
86
|
export function toSQLiteRow(row, columns) {
|
|
5
87
|
for (let key in row) {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
88
|
+
// We are very much expecting the column to be there
|
|
89
|
+
const column = columns.get(key);
|
|
90
|
+
if (row[key] !== null) {
|
|
91
|
+
switch (column.typeId) {
|
|
92
|
+
case mysql.Types.DATE:
|
|
93
|
+
// Only parse the date part
|
|
94
|
+
row[key] = row[key].toISOString().split('T')[0];
|
|
95
|
+
break;
|
|
96
|
+
case mysql.Types.DATETIME:
|
|
97
|
+
case ADDITIONAL_MYSQL_TYPES.DATETIME2:
|
|
98
|
+
case mysql.Types.TIMESTAMP:
|
|
99
|
+
case ADDITIONAL_MYSQL_TYPES.TIMESTAMP2:
|
|
100
|
+
row[key] = row[key].toISOString();
|
|
101
|
+
break;
|
|
102
|
+
case mysql.Types.JSON:
|
|
103
|
+
if (typeof row[key] === 'string') {
|
|
104
|
+
row[key] = new JsonContainer(row[key]);
|
|
105
|
+
}
|
|
106
|
+
break;
|
|
107
|
+
case mysql.Types.BIT:
|
|
108
|
+
case mysql.Types.BLOB:
|
|
109
|
+
case mysql.Types.TINY_BLOB:
|
|
110
|
+
case mysql.Types.MEDIUM_BLOB:
|
|
111
|
+
case mysql.Types.LONG_BLOB:
|
|
112
|
+
case ADDITIONAL_MYSQL_TYPES.BINARY:
|
|
113
|
+
case ADDITIONAL_MYSQL_TYPES.VARBINARY:
|
|
114
|
+
row[key] = new Uint8Array(Object.values(row[key]));
|
|
115
|
+
break;
|
|
116
|
+
case mysql.Types.LONGLONG:
|
|
117
|
+
if (typeof row[key] === 'string') {
|
|
118
|
+
row[key] = BigInt(row[key]);
|
|
119
|
+
}
|
|
120
|
+
else if (typeof row[key] === 'number') {
|
|
121
|
+
// Zongji returns BIGINT as a number when it can be represented as a number
|
|
122
|
+
row[key] = BigInt(row[key]);
|
|
123
|
+
}
|
|
124
|
+
break;
|
|
125
|
+
case mysql.Types.TINY:
|
|
126
|
+
case mysql.Types.SHORT:
|
|
127
|
+
case mysql.Types.LONG:
|
|
128
|
+
case mysql.Types.INT24:
|
|
129
|
+
// Handle all integer values a BigInt
|
|
130
|
+
if (typeof row[key] === 'number') {
|
|
131
|
+
row[key] = BigInt(row[key]);
|
|
132
|
+
}
|
|
133
|
+
break;
|
|
134
|
+
case mysql.Types.SET:
|
|
135
|
+
// Convert to JSON array from string
|
|
136
|
+
const values = row[key].split(',');
|
|
137
|
+
row[key] = JSONBig.stringify(values);
|
|
138
|
+
break;
|
|
14
139
|
}
|
|
15
140
|
}
|
|
16
141
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mysql-to-sqlite.js","sourceRoot":"","sources":["../../src/common/mysql-to-sqlite.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,UAAU,MAAM,+BAA+B,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAE/D,OAAO,KAAK,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"mysql-to-sqlite.js","sourceRoot":"","sources":["../../src/common/mysql-to-sqlite.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,16 +1,13 @@
|
|
|
1
|
-
import * as mysql_utils from '../utils/
|
|
2
|
-
import { gte } from 'semver';
|
|
1
|
+
import * as mysql_utils from '../utils/mysql-utils.js';
|
|
3
2
|
import { ReplicatedGTID } from './ReplicatedGTID.js';
|
|
4
|
-
import { getMySQLVersion } from './check-source-configuration.js';
|
|
5
|
-
import { logger } from '@powersync/lib-services-framework';
|
|
6
3
|
/**
|
|
7
4
|
* Gets the current master HEAD GTID
|
|
8
5
|
*/
|
|
9
6
|
export async function readExecutedGtid(connection) {
|
|
10
|
-
const version = await getMySQLVersion(connection);
|
|
7
|
+
const version = await mysql_utils.getMySQLVersion(connection);
|
|
11
8
|
let binlogStatus;
|
|
12
|
-
if (
|
|
13
|
-
//
|
|
9
|
+
if (mysql_utils.isVersionAtLeast(version, '8.4.0')) {
|
|
10
|
+
// Syntax for the below query changed in 8.4.0
|
|
14
11
|
const [[binLogResult]] = await mysql_utils.retriedQuery({
|
|
15
12
|
connection,
|
|
16
13
|
query: `SHOW BINARY LOG STATUS`
|
|
@@ -18,8 +15,6 @@ export async function readExecutedGtid(connection) {
|
|
|
18
15
|
binlogStatus = binLogResult;
|
|
19
16
|
}
|
|
20
17
|
else {
|
|
21
|
-
// TODO Check if this works for version 5.7
|
|
22
|
-
// Get the BinLog status
|
|
23
18
|
const [[binLogResult]] = await mysql_utils.retriedQuery({
|
|
24
19
|
connection,
|
|
25
20
|
query: `SHOW MASTER STATUS`
|
|
@@ -30,7 +25,6 @@ export async function readExecutedGtid(connection) {
|
|
|
30
25
|
filename: binlogStatus.File,
|
|
31
26
|
offset: parseInt(binlogStatus.Position)
|
|
32
27
|
};
|
|
33
|
-
logger.info('Succesfully read executed GTID', { position });
|
|
34
28
|
return new ReplicatedGTID({
|
|
35
29
|
// The head always points to the next position to start replication from
|
|
36
30
|
position,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"read-executed-gtid.js","sourceRoot":"","sources":["../../src/common/read-executed-gtid.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,WAAW,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"read-executed-gtid.js","sourceRoot":"","sources":["../../src/common/read-executed-gtid.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,WAAW,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,UAAmC;IACxE,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;IAE9D,IAAI,YAAwC,CAAC;IAC7C,IAAI,WAAW,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC;QACnD,8CAA8C;QAC9C,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,GAAG,MAAM,WAAW,CAAC,YAAY,CAAC;YACtD,UAAU;YACV,KAAK,EAAE,wBAAwB;SAChC,CAAC,CAAC;QACH,YAAY,GAAG,YAAY,CAAC;IAC9B,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,GAAG,MAAM,WAAW,CAAC,YAAY,CAAC;YACtD,UAAU;YACV,KAAK,EAAE,oBAAoB;SAC5B,CAAC,CAAC;QACH,YAAY,GAAG,YAAY,CAAC;IAC9B,CAAC;IACD,MAAM,QAAQ,GAAG;QACf,QAAQ,EAAE,YAAY,CAAC,IAAI;QAC3B,MAAM,EAAE,QAAQ,CAAC,YAAY,CAAC,QAAQ,CAAC;KACxC,CAAC;IAEF,OAAO,IAAI,cAAc,CAAC;QACxB,wEAAwE;QACxE,QAAQ;QACR,QAAQ,EAAE,YAAY,CAAC,iBAAiB;KACzC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,UAAmC,EACnC,UAAkB;IAElB,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,WAAW,CAAC,YAAY,CAAC;QAChD,UAAU;QACV,KAAK,EAAE,mBAAmB;KAC3B,CAAC,CAAC;IAEH,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,CAAC;AAC3D,CAAC"}
|
|
@@ -3,8 +3,8 @@ import async from 'async';
|
|
|
3
3
|
import { framework, getUuidReplicaIdentityBson, Metrics, storage } from '@powersync/service-core';
|
|
4
4
|
import * as common from '../common/common-index.js';
|
|
5
5
|
import * as zongji_utils from './zongji/zongji-utils.js';
|
|
6
|
-
import { isBinlogStillAvailable, ReplicatedGTID } from '../common/common-index.js';
|
|
7
|
-
import {
|
|
6
|
+
import { isBinlogStillAvailable, ReplicatedGTID, toColumnDescriptors } from '../common/common-index.js';
|
|
7
|
+
import { createRandomServerId } from '../utils/mysql-utils.js';
|
|
8
8
|
export class BinlogConfigurationError extends Error {
|
|
9
9
|
constructor(message) {
|
|
10
10
|
super(message);
|
|
@@ -147,7 +147,11 @@ AND table_type = 'BASE TABLE';`, [tablePattern.schema, tablePattern.name]);
|
|
|
147
147
|
// Check if the binlog is still available. If it isn't we need to snapshot again.
|
|
148
148
|
const connection = await this.connections.getConnection();
|
|
149
149
|
try {
|
|
150
|
-
|
|
150
|
+
const isAvailable = await isBinlogStillAvailable(connection, lastKnowGTID.position.filename);
|
|
151
|
+
if (!isAvailable) {
|
|
152
|
+
logger.info(`Binlog file ${lastKnowGTID.position.filename} is no longer available, starting initial replication again.`);
|
|
153
|
+
}
|
|
154
|
+
return isAvailable;
|
|
151
155
|
}
|
|
152
156
|
finally {
|
|
153
157
|
connection.release();
|
|
@@ -169,7 +173,7 @@ AND table_type = 'BASE TABLE';`, [tablePattern.schema, tablePattern.name]);
|
|
|
169
173
|
const connection = await this.connections.getStreamingConnection();
|
|
170
174
|
const promiseConnection = connection.promise();
|
|
171
175
|
const headGTID = await common.readExecutedGtid(promiseConnection);
|
|
172
|
-
logger.info(`Using snapshot checkpoint GTID
|
|
176
|
+
logger.info(`Using snapshot checkpoint GTID: '${headGTID}'`);
|
|
173
177
|
try {
|
|
174
178
|
logger.info(`Starting initial replication`);
|
|
175
179
|
await promiseConnection.query('SET TRANSACTION ISOLATION LEVEL REPEATABLE READ, READ ONLY');
|
|
@@ -200,7 +204,7 @@ AND table_type = 'BASE TABLE';`, [tablePattern.schema, tablePattern.name]);
|
|
|
200
204
|
async snapshotTable(connection, batch, table) {
|
|
201
205
|
logger.info(`Replicating ${table.qualifiedName}`);
|
|
202
206
|
// TODO count rows and log progress at certain batch sizes
|
|
203
|
-
|
|
207
|
+
let columns;
|
|
204
208
|
return new Promise((resolve, reject) => {
|
|
205
209
|
// MAX_EXECUTION_TIME(0) hint disables execution timeout for this query
|
|
206
210
|
connection
|
|
@@ -210,10 +214,7 @@ AND table_type = 'BASE TABLE';`, [tablePattern.schema, tablePattern.name]);
|
|
|
210
214
|
})
|
|
211
215
|
.on('fields', (fields) => {
|
|
212
216
|
// Map the columns and their types
|
|
213
|
-
fields
|
|
214
|
-
const columnType = MySQLTypesMap[field.type];
|
|
215
|
-
columns.set(field.name, { name: field.name, type: columnType, typeId: field.type });
|
|
216
|
-
});
|
|
217
|
+
columns = toColumnDescriptors(fields);
|
|
217
218
|
})
|
|
218
219
|
.on('result', async (row) => {
|
|
219
220
|
connection.pause();
|
|
@@ -272,9 +273,13 @@ AND table_type = 'BASE TABLE';`, [tablePattern.schema, tablePattern.name]);
|
|
|
272
273
|
async streamChanges() {
|
|
273
274
|
// Auto-activate as soon as initial replication is done
|
|
274
275
|
await this.storage.autoActivate();
|
|
276
|
+
const serverId = createRandomServerId(this.storage.group_id);
|
|
277
|
+
logger.info(`Starting replication. Created replica client with serverId:${serverId}`);
|
|
275
278
|
const connection = await this.connections.getConnection();
|
|
276
279
|
const { checkpoint_lsn } = await this.storage.getStatus();
|
|
277
|
-
|
|
280
|
+
if (checkpoint_lsn) {
|
|
281
|
+
logger.info(`Existing checkpoint found: ${checkpoint_lsn}`);
|
|
282
|
+
}
|
|
278
283
|
const fromGTID = checkpoint_lsn
|
|
279
284
|
? common.ReplicatedGTID.fromSerialized(checkpoint_lsn)
|
|
280
285
|
: await common.readExecutedGtid(connection);
|
|
@@ -346,7 +351,7 @@ AND table_type = 'BASE TABLE';`, [tablePattern.schema, tablePattern.name]);
|
|
|
346
351
|
}, 1);
|
|
347
352
|
zongji.on('binlog', (evt) => {
|
|
348
353
|
if (!this.stopped) {
|
|
349
|
-
logger.info(`
|
|
354
|
+
logger.info(`Received Binlog event:${evt.getEventName()}`);
|
|
350
355
|
queue.push(evt);
|
|
351
356
|
}
|
|
352
357
|
else {
|
|
@@ -357,16 +362,16 @@ AND table_type = 'BASE TABLE';`, [tablePattern.schema, tablePattern.name]);
|
|
|
357
362
|
// Powersync is shutting down, don't start replicating
|
|
358
363
|
return;
|
|
359
364
|
}
|
|
365
|
+
logger.info(`Reading binlog from: ${binLogPositionState.filename}:${binLogPositionState.offset}`);
|
|
360
366
|
// Only listen for changes to tables in the sync rules
|
|
361
367
|
const includedTables = [...this.tableCache.values()].map((table) => table.table);
|
|
362
|
-
logger.info(`Starting replication from ${binLogPositionState.filename}:${binLogPositionState.offset}`);
|
|
363
368
|
zongji.start({
|
|
364
369
|
includeEvents: ['tablemap', 'writerows', 'updaterows', 'deleterows', 'xid', 'rotate', 'gtidlog'],
|
|
365
370
|
excludeEvents: [],
|
|
366
371
|
includeSchema: { [this.defaultSchema]: includedTables },
|
|
367
372
|
filename: binLogPositionState.filename,
|
|
368
373
|
position: binLogPositionState.offset,
|
|
369
|
-
serverId:
|
|
374
|
+
serverId: serverId
|
|
370
375
|
});
|
|
371
376
|
// Forever young
|
|
372
377
|
await new Promise((resolve, reject) => {
|
|
@@ -397,10 +402,7 @@ AND table_type = 'BASE TABLE';`, [tablePattern.schema, tablePattern.name]);
|
|
|
397
402
|
}
|
|
398
403
|
}
|
|
399
404
|
async writeChanges(batch, msg) {
|
|
400
|
-
const columns =
|
|
401
|
-
msg.tableEntry.columns.forEach((column) => {
|
|
402
|
-
columns.set(column.name, { name: column.name, typeId: column.type });
|
|
403
|
-
});
|
|
405
|
+
const columns = toColumnDescriptors(msg.tableEntry);
|
|
404
406
|
for (const [index, row] of msg.data.entries()) {
|
|
405
407
|
await this.writeChange(batch, {
|
|
406
408
|
type: msg.type,
|
|
@@ -434,8 +436,10 @@ AND table_type = 'BASE TABLE';`, [tablePattern.schema, tablePattern.name]);
|
|
|
434
436
|
Metrics.getInstance().rows_replicated_total.add(1);
|
|
435
437
|
// "before" may be null if the replica id columns are unchanged
|
|
436
438
|
// It's fine to treat that the same as an insert.
|
|
437
|
-
const beforeUpdated = payload.previous_data
|
|
438
|
-
|
|
439
|
+
const beforeUpdated = payload.previous_data
|
|
440
|
+
? common.toSQLiteRow(payload.previous_data, payload.columns)
|
|
441
|
+
: undefined;
|
|
442
|
+
const after = common.toSQLiteRow(payload.data, payload.columns);
|
|
439
443
|
return await batch.save({
|
|
440
444
|
tag: storage.SaveOperationTag.UPDATE,
|
|
441
445
|
sourceTable: payload.sourceTable,
|
|
@@ -443,12 +447,12 @@ AND table_type = 'BASE TABLE';`, [tablePattern.schema, tablePattern.name]);
|
|
|
443
447
|
beforeReplicaId: beforeUpdated
|
|
444
448
|
? getUuidReplicaIdentityBson(beforeUpdated, payload.sourceTable.replicaIdColumns)
|
|
445
449
|
: undefined,
|
|
446
|
-
after: common.toSQLiteRow(payload.data),
|
|
450
|
+
after: common.toSQLiteRow(payload.data, payload.columns),
|
|
447
451
|
afterReplicaId: getUuidReplicaIdentityBson(after, payload.sourceTable.replicaIdColumns)
|
|
448
452
|
});
|
|
449
453
|
case storage.SaveOperationTag.DELETE:
|
|
450
454
|
Metrics.getInstance().rows_replicated_total.add(1);
|
|
451
|
-
const beforeDeleted = common.toSQLiteRow(payload.data);
|
|
455
|
+
const beforeDeleted = common.toSQLiteRow(payload.data, payload.columns);
|
|
452
456
|
return await batch.save({
|
|
453
457
|
tag: storage.SaveOperationTag.DELETE,
|
|
454
458
|
sourceTable: payload.sourceTable,
|