@powersync/service-module-mysql 0.7.4 → 0.8.0

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.
Files changed (57) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/dev/docker/mysql/init-scripts/my.cnf +1 -3
  3. package/dist/api/MySQLRouteAPIAdapter.js +11 -3
  4. package/dist/api/MySQLRouteAPIAdapter.js.map +1 -1
  5. package/dist/common/ReplicatedGTID.js +4 -0
  6. package/dist/common/ReplicatedGTID.js.map +1 -1
  7. package/dist/common/common-index.d.ts +1 -2
  8. package/dist/common/common-index.js +1 -2
  9. package/dist/common/common-index.js.map +1 -1
  10. package/dist/common/mysql-to-sqlite.js +4 -0
  11. package/dist/common/mysql-to-sqlite.js.map +1 -1
  12. package/dist/common/schema-utils.d.ts +20 -0
  13. package/dist/common/{get-replication-columns.js → schema-utils.js} +73 -30
  14. package/dist/common/schema-utils.js.map +1 -0
  15. package/dist/replication/BinLogStream.d.ts +9 -6
  16. package/dist/replication/BinLogStream.js +99 -70
  17. package/dist/replication/BinLogStream.js.map +1 -1
  18. package/dist/replication/zongji/BinLogListener.d.ts +52 -5
  19. package/dist/replication/zongji/BinLogListener.js +302 -85
  20. package/dist/replication/zongji/BinLogListener.js.map +1 -1
  21. package/dist/replication/zongji/zongji-utils.d.ts +2 -1
  22. package/dist/replication/zongji/zongji-utils.js +3 -0
  23. package/dist/replication/zongji/zongji-utils.js.map +1 -1
  24. package/dist/types/node-sql-parser-extended-types.d.ts +31 -0
  25. package/dist/types/node-sql-parser-extended-types.js +2 -0
  26. package/dist/types/node-sql-parser-extended-types.js.map +1 -0
  27. package/dist/utils/mysql-utils.d.ts +4 -2
  28. package/dist/utils/mysql-utils.js +15 -3
  29. package/dist/utils/mysql-utils.js.map +1 -1
  30. package/dist/utils/parser-utils.d.ts +16 -0
  31. package/dist/utils/parser-utils.js +58 -0
  32. package/dist/utils/parser-utils.js.map +1 -0
  33. package/package.json +9 -8
  34. package/src/api/MySQLRouteAPIAdapter.ts +11 -3
  35. package/src/common/ReplicatedGTID.ts +6 -1
  36. package/src/common/common-index.ts +1 -2
  37. package/src/common/mysql-to-sqlite.ts +3 -0
  38. package/src/common/{get-replication-columns.ts → schema-utils.ts} +96 -37
  39. package/src/replication/BinLogStream.ts +119 -91
  40. package/src/replication/zongji/BinLogListener.ts +370 -93
  41. package/src/replication/zongji/zongji-utils.ts +6 -1
  42. package/src/types/node-sql-parser-extended-types.ts +25 -0
  43. package/src/utils/mysql-utils.ts +19 -4
  44. package/src/utils/parser-utils.ts +73 -0
  45. package/test/src/BinLogListener.test.ts +415 -32
  46. package/test/src/BinLogStream.test.ts +128 -52
  47. package/test/src/BinlogStreamUtils.ts +12 -2
  48. package/test/src/parser-utils.test.ts +24 -0
  49. package/test/src/schema-changes.test.ts +663 -0
  50. package/test/src/util.ts +6 -0
  51. package/tsconfig.tsbuildinfo +1 -1
  52. package/dist/common/get-replication-columns.d.ts +0 -12
  53. package/dist/common/get-replication-columns.js.map +0 -1
  54. package/dist/common/get-tables-from-pattern.d.ts +0 -7
  55. package/dist/common/get-tables-from-pattern.js +0 -28
  56. package/dist/common/get-tables-from-pattern.js.map +0 -1
  57. package/src/common/get-tables-from-pattern.ts +0 -44
@@ -1,12 +0,0 @@
1
- import { storage } from '@powersync/service-core';
2
- import mysqlPromise from 'mysql2/promise';
3
- export type GetReplicationColumnsOptions = {
4
- connection: mysqlPromise.Connection;
5
- schema: string;
6
- table_name: string;
7
- };
8
- export type ReplicationIdentityColumnsResult = {
9
- columns: storage.ColumnDescriptor[];
10
- identity: string;
11
- };
12
- export declare function getReplicationIdentityColumns(options: GetReplicationColumnsOptions): Promise<ReplicationIdentityColumnsResult>;
@@ -1 +0,0 @@
1
- {"version":3,"file":"get-replication-columns.js","sourceRoot":"","sources":["../../src/common/get-replication-columns.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,WAAW,MAAM,yBAAyB,CAAC;AAcvD,MAAM,CAAC,KAAK,UAAU,6BAA6B,CACjD,OAAqC;IAErC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;IACnD,MAAM,CAAC,iBAAiB,CAAC,GAAG,MAAM,WAAW,CAAC,YAAY,CAAC;QACzD,UAAU,EAAE,UAAU;QACtB,KAAK,EAAE;;;;;;;;;;;;;;;;;;OAkBJ;QACH,MAAM,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC;KAC7B,CAAC,CAAC;IAEH,IAAI,iBAAiB,CAAC,MAAM,EAAE,CAAC;QAC7B,OAAO;YACL,OAAO,EAAE,iBAAiB,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;gBACvC,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,IAAI,EAAE,GAAG,CAAC,IAAI;aACf,CAAC,CAAC;YACH,QAAQ,EAAE,SAAS;SACpB,CAAC;IACJ,CAAC;IAED,kEAAkE;IAClE,kDAAkD;IAClD,MAAM,CAAC,gBAAgB,CAAC,GAAG,MAAM,WAAW,CAAC,YAAY,CAAC;QACxD,UAAU,EAAE,UAAU;QACtB,KAAK,EAAE;;;;;;;;;;;;;;;;;;;;;OAqBJ;QACH,MAAM,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC;KAC7B,CAAC,CAAC;IAEH,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChC,OAAO;YACL,OAAO,EAAE,gBAAgB,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;gBACtC,IAAI,EAAE,GAAG,CAAC,WAAW;gBACrB,IAAI,EAAE,GAAG,CAAC,SAAS;aACpB,CAAC,CAAC;YACH,QAAQ,EAAE,OAAO;SAClB,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,UAAU,CAAC,GAAG,MAAM,WAAW,CAAC,YAAY,CAAC;QAClD,UAAU,EAAE,UAAU;QACtB,KAAK,EAAE;;;;;;;;;;;;;;;;;OAiBJ;QACH,MAAM,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC;KAC7B,CAAC,CAAC;IAEH,OAAO;QACL,OAAO,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YAChC,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,IAAI,EAAE,GAAG,CAAC,IAAI;SACf,CAAC,CAAC;QACH,QAAQ,EAAE,MAAM;KACjB,CAAC;AACJ,CAAC"}
@@ -1,7 +0,0 @@
1
- import * as sync_rules from '@powersync/service-sync-rules';
2
- import mysql from 'mysql2/promise';
3
- export type GetDebugTablesInfoOptions = {
4
- connection: mysql.Connection;
5
- tablePattern: sync_rules.TablePattern;
6
- };
7
- export declare function getTablesFromPattern(options: GetDebugTablesInfoOptions): Promise<Set<string>>;
@@ -1,28 +0,0 @@
1
- export async function getTablesFromPattern(options) {
2
- const { connection, tablePattern } = options;
3
- const schema = tablePattern.schema;
4
- if (tablePattern.isWildcard) {
5
- const [results] = await connection.query(`SELECT
6
- TABLE_NAME AS table_name
7
- FROM
8
- INFORMATION_SCHEMA.TABLES
9
- WHERE
10
- TABLE_SCHEMA = ?
11
- AND TABLE_NAME LIKE ?`, [schema, tablePattern.tablePattern]);
12
- return new Set(results
13
- .filter((result) => result.table_name.startsWith(tablePattern.tablePrefix))
14
- .map((result) => result.table_name));
15
- }
16
- else {
17
- const [[match]] = await connection.query(`SELECT
18
- TABLE_NAME AS table_name
19
- FROM
20
- INFORMATION_SCHEMA.TABLES
21
- WHERE
22
- TABLE_SCHEMA = ?
23
- AND TABLE_NAME = ?`, [tablePattern.schema, tablePattern.tablePattern]);
24
- // Only return the first result
25
- return new Set([match.table_name]);
26
- }
27
- }
28
- //# sourceMappingURL=get-tables-from-pattern.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"get-tables-from-pattern.js","sourceRoot":"","sources":["../../src/common/get-tables-from-pattern.ts"],"names":[],"mappings":"AAQA,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,OAAkC;IAC3E,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC;IAC7C,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC;IAEnC,IAAI,YAAY,CAAC,UAAU,EAAE,CAAC;QAC5B,MAAM,CAAC,OAAO,CAAC,GAAG,MAAM,UAAU,CAAC,KAAK,CACtC;;;;;;kCAM4B,EAC5B,CAAC,MAAM,EAAE,YAAY,CAAC,YAAY,CAAC,CACpC,CAAC;QAEF,OAAO,IAAI,GAAG,CACZ,OAAO;aACJ,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;aAC1E,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CACtC,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,MAAM,UAAU,CAAC,KAAK,CACtC;;;;;;+BAMyB,EACzB,CAAC,YAAY,CAAC,MAAM,EAAE,YAAY,CAAC,YAAY,CAAC,CACjD,CAAC;QACF,+BAA+B;QAC/B,OAAO,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;IACrC,CAAC;AACH,CAAC"}
@@ -1,44 +0,0 @@
1
- import * as sync_rules from '@powersync/service-sync-rules';
2
- import mysql from 'mysql2/promise';
3
-
4
- export type GetDebugTablesInfoOptions = {
5
- connection: mysql.Connection;
6
- tablePattern: sync_rules.TablePattern;
7
- };
8
-
9
- export async function getTablesFromPattern(options: GetDebugTablesInfoOptions): Promise<Set<string>> {
10
- const { connection, tablePattern } = options;
11
- const schema = tablePattern.schema;
12
-
13
- if (tablePattern.isWildcard) {
14
- const [results] = await connection.query<mysql.RowDataPacket[]>(
15
- `SELECT
16
- TABLE_NAME AS table_name
17
- FROM
18
- INFORMATION_SCHEMA.TABLES
19
- WHERE
20
- TABLE_SCHEMA = ?
21
- AND TABLE_NAME LIKE ?`,
22
- [schema, tablePattern.tablePattern]
23
- );
24
-
25
- return new Set(
26
- results
27
- .filter((result) => result.table_name.startsWith(tablePattern.tablePrefix))
28
- .map((result) => result.table_name)
29
- );
30
- } else {
31
- const [[match]] = await connection.query<mysql.RowDataPacket[]>(
32
- `SELECT
33
- TABLE_NAME AS table_name
34
- FROM
35
- INFORMATION_SCHEMA.TABLES
36
- WHERE
37
- TABLE_SCHEMA = ?
38
- AND TABLE_NAME = ?`,
39
- [tablePattern.schema, tablePattern.tablePattern]
40
- );
41
- // Only return the first result
42
- return new Set([match.table_name]);
43
- }
44
- }