@powersync/service-module-mysql 0.7.4 → 0.9.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 (63) hide show
  1. package/CHANGELOG.md +61 -0
  2. package/LICENSE +3 -3
  3. package/dev/docker/mysql/init-scripts/my.cnf +1 -3
  4. package/dist/api/MySQLRouteAPIAdapter.js +12 -4
  5. package/dist/api/MySQLRouteAPIAdapter.js.map +1 -1
  6. package/dist/common/ReplicatedGTID.js +4 -0
  7. package/dist/common/ReplicatedGTID.js.map +1 -1
  8. package/dist/common/common-index.d.ts +1 -2
  9. package/dist/common/common-index.js +1 -2
  10. package/dist/common/common-index.js.map +1 -1
  11. package/dist/common/mysql-to-sqlite.d.ts +1 -1
  12. package/dist/common/mysql-to-sqlite.js +4 -0
  13. package/dist/common/mysql-to-sqlite.js.map +1 -1
  14. package/dist/common/schema-utils.d.ts +20 -0
  15. package/dist/common/{get-replication-columns.js → schema-utils.js} +73 -30
  16. package/dist/common/schema-utils.js.map +1 -0
  17. package/dist/replication/BinLogReplicationJob.js +4 -1
  18. package/dist/replication/BinLogReplicationJob.js.map +1 -1
  19. package/dist/replication/BinLogStream.d.ts +9 -6
  20. package/dist/replication/BinLogStream.js +117 -73
  21. package/dist/replication/BinLogStream.js.map +1 -1
  22. package/dist/replication/zongji/BinLogListener.d.ts +60 -6
  23. package/dist/replication/zongji/BinLogListener.js +347 -89
  24. package/dist/replication/zongji/BinLogListener.js.map +1 -1
  25. package/dist/replication/zongji/zongji-utils.d.ts +4 -1
  26. package/dist/replication/zongji/zongji-utils.js +9 -0
  27. package/dist/replication/zongji/zongji-utils.js.map +1 -1
  28. package/dist/types/node-sql-parser-extended-types.d.ts +31 -0
  29. package/dist/types/node-sql-parser-extended-types.js +2 -0
  30. package/dist/types/node-sql-parser-extended-types.js.map +1 -0
  31. package/dist/utils/mysql-utils.d.ts +4 -2
  32. package/dist/utils/mysql-utils.js +15 -3
  33. package/dist/utils/mysql-utils.js.map +1 -1
  34. package/dist/utils/parser-utils.d.ts +16 -0
  35. package/dist/utils/parser-utils.js +58 -0
  36. package/dist/utils/parser-utils.js.map +1 -0
  37. package/package.json +12 -11
  38. package/src/api/MySQLRouteAPIAdapter.ts +15 -4
  39. package/src/common/ReplicatedGTID.ts +6 -1
  40. package/src/common/common-index.ts +1 -2
  41. package/src/common/mysql-to-sqlite.ts +7 -1
  42. package/src/common/{get-replication-columns.ts → schema-utils.ts} +96 -37
  43. package/src/replication/BinLogReplicationJob.ts +4 -1
  44. package/src/replication/BinLogStream.ts +139 -94
  45. package/src/replication/zongji/BinLogListener.ts +421 -100
  46. package/src/replication/zongji/zongji-utils.ts +16 -1
  47. package/src/types/node-sql-parser-extended-types.ts +25 -0
  48. package/src/utils/mysql-utils.ts +19 -4
  49. package/src/utils/parser-utils.ts +73 -0
  50. package/test/src/BinLogListener.test.ts +421 -77
  51. package/test/src/BinLogStream.test.ts +128 -52
  52. package/test/src/BinlogStreamUtils.ts +12 -2
  53. package/test/src/mysql-to-sqlite.test.ts +5 -5
  54. package/test/src/parser-utils.test.ts +24 -0
  55. package/test/src/schema-changes.test.ts +659 -0
  56. package/test/src/util.ts +87 -1
  57. package/tsconfig.tsbuildinfo +1 -1
  58. package/dist/common/get-replication-columns.d.ts +0 -12
  59. package/dist/common/get-replication-columns.js.map +0 -1
  60. package/dist/common/get-tables-from-pattern.d.ts +0 -7
  61. package/dist/common/get-tables-from-pattern.js +0 -28
  62. package/dist/common/get-tables-from-pattern.js.map +0 -1
  63. package/src/common/get-tables-from-pattern.ts +0 -44
@@ -1,20 +1,23 @@
1
1
  import { logger as defaultLogger, ReplicationAbortedError, ReplicationAssertionError } from '@powersync/lib-services-framework';
2
2
  import { framework, getUuidReplicaIdentityBson, storage } from '@powersync/service-core';
3
3
  import * as common from '../common/common-index.js';
4
- import { createRandomServerId, escapeMysqlTableName } from '../utils/mysql-utils.js';
4
+ import { createRandomServerId, qualifiedMySQLTable } from '../utils/mysql-utils.js';
5
5
  import { ReplicationMetric } from '@powersync/service-types';
6
- import { BinLogListener } from './zongji/BinLogListener.js';
6
+ import { BinLogListener, SchemaChangeType } from './zongji/BinLogListener.js';
7
7
  export class BinlogConfigurationError extends Error {
8
8
  constructor(message) {
9
9
  super(message);
10
10
  }
11
11
  }
12
12
  /**
13
- * MySQL does not have same relation structure. Just returning unique key as string.
14
- * @param source
13
+ * Unlike Postgres' relation id, MySQL's tableId is only guaranteed to be unique and stay the same
14
+ * in the context of a single replication session.
15
+ * Instead, we create a unique key by combining the source schema and table name
16
+ * @param schema
17
+ * @param tableName
15
18
  */
16
- function getMysqlRelId(source) {
17
- return `${source.schema}.${source.name}`;
19
+ function createTableId(schema, tableName) {
20
+ return `${schema}.${tableName}`;
18
21
  }
19
22
  export class BinLogStream {
20
23
  options;
@@ -23,8 +26,8 @@ export class BinLogStream {
23
26
  storage;
24
27
  connections;
25
28
  abortSignal;
26
- tableCache = new Map();
27
29
  logger;
30
+ tableCache = new Map();
28
31
  /**
29
32
  * Time of the oldest uncommitted change, according to the source db.
30
33
  * This is used to determine the replication lag.
@@ -79,13 +82,13 @@ export class BinLogStream {
79
82
  entity_descriptor: entity,
80
83
  sync_rules: this.syncRules
81
84
  });
82
- // objectId is always defined for mysql
85
+ // Since we create the objectId ourselves, this is always defined
83
86
  this.tableCache.set(entity.objectId, result.table);
84
- // Drop conflicting tables. This includes for example renamed tables.
87
+ // Drop conflicting tables. In the MySQL case with ObjectIds created from the table name, renames cannot be detected by the storage.
85
88
  await batch.drop(result.dropTables);
86
89
  // Snapshot if:
87
90
  // 1. Snapshot is requested (false for initial snapshot, since that process handles it elsewhere)
88
- // 2. Snapshot is not already done, AND:
91
+ // 2. Snapshot is not done yet, AND:
89
92
  // 3. The table is used in sync rules.
90
93
  const shouldSnapshot = snapshot && !result.table.snapshotComplete && result.table.syncAny;
91
94
  if (shouldSnapshot) {
@@ -98,10 +101,10 @@ export class BinLogStream {
98
101
  const promiseConnection = connection.promise();
99
102
  try {
100
103
  await promiseConnection.query(`SET time_zone = '+00:00'`);
101
- await promiseConnection.query('BEGIN');
104
+ await promiseConnection.query('START TRANSACTION');
102
105
  try {
103
106
  gtid = await common.readExecutedGtid(promiseConnection);
104
- await this.snapshotTable(connection.connection, batch, result.table);
107
+ await this.snapshotTable(connection, batch, result.table);
105
108
  await promiseConnection.query('COMMIT');
106
109
  }
107
110
  catch (e) {
@@ -121,55 +124,24 @@ export class BinLogStream {
121
124
  if (tablePattern.connectionTag != this.connectionTag) {
122
125
  return [];
123
126
  }
124
- let tableRows;
125
- const prefix = tablePattern.isWildcard ? tablePattern.tablePrefix : undefined;
126
- if (tablePattern.isWildcard) {
127
- const result = await this.connections.query(`SELECT TABLE_NAME
128
- FROM information_schema.tables
129
- WHERE TABLE_SCHEMA = ? AND TABLE_NAME LIKE ?;
130
- `, [tablePattern.schema, tablePattern.tablePattern]);
131
- tableRows = result[0];
132
- }
133
- else {
134
- const result = await this.connections.query(`SELECT TABLE_NAME
135
- FROM information_schema.tables
136
- WHERE TABLE_SCHEMA = ? AND TABLE_NAME = ?;
137
- `, [tablePattern.schema, tablePattern.tablePattern]);
138
- tableRows = result[0];
139
- }
127
+ const connection = await this.connections.getConnection();
128
+ const matchedTables = await common.getTablesFromPattern(connection, tablePattern);
129
+ connection.release();
140
130
  let tables = [];
141
- for (let row of tableRows) {
142
- const name = row['TABLE_NAME'];
143
- if (prefix && !name.startsWith(prefix)) {
144
- continue;
145
- }
146
- const result = await this.connections.query(`SELECT 1
147
- FROM information_schema.tables
148
- WHERE table_schema = ? AND table_name = ?
149
- AND table_type = 'BASE TABLE';`, [tablePattern.schema, tablePattern.name]);
150
- if (result[0].length == 0) {
151
- this.logger.info(`Skipping ${tablePattern.schema}.${name} - no table exists/is not a base table`);
152
- continue;
153
- }
154
- const connection = await this.connections.getConnection();
155
- const replicationColumns = await common.getReplicationIdentityColumns({
156
- connection: connection,
157
- schema: tablePattern.schema,
158
- table_name: tablePattern.name
159
- });
160
- connection.release();
131
+ for (const matchedTable of matchedTables) {
132
+ const replicaIdColumns = await this.getReplicaIdColumns(matchedTable, tablePattern.schema);
161
133
  const table = await this.handleRelation(batch, {
162
- name,
134
+ name: matchedTable,
163
135
  schema: tablePattern.schema,
164
- objectId: getMysqlRelId(tablePattern),
165
- replicationColumns: replicationColumns.columns
136
+ objectId: createTableId(tablePattern.schema, matchedTable),
137
+ replicaIdColumns: replicaIdColumns
166
138
  }, false);
167
139
  tables.push(table);
168
140
  }
169
141
  return tables;
170
142
  }
171
143
  /**
172
- * Checks if the initial sync has been completed yet.
144
+ * Checks if the initial sync has already been completed
173
145
  */
174
146
  async checkInitialReplicated() {
175
147
  const status = await this.storage.getStatus();
@@ -177,7 +149,7 @@ AND table_type = 'BASE TABLE';`, [tablePattern.schema, tablePattern.name]);
177
149
  if (status.snapshot_done && status.checkpoint_lsn) {
178
150
  this.logger.info(`Initial replication already done.`);
179
151
  if (lastKnowGTID) {
180
- // Check if the binlog is still available. If it isn't we need to snapshot again.
152
+ // Check if the specific binlog file is still available. If it isn't, we need to snapshot again.
181
153
  const connection = await this.connections.getConnection();
182
154
  try {
183
155
  const isAvailable = await common.isBinlogStillAvailable(connection, lastKnowGTID.position.filename);
@@ -207,13 +179,14 @@ AND table_type = 'BASE TABLE';`, [tablePattern.schema, tablePattern.name]);
207
179
  const promiseConnection = connection.promise();
208
180
  const headGTID = await common.readExecutedGtid(promiseConnection);
209
181
  this.logger.info(`Using snapshot checkpoint GTID: '${headGTID}'`);
182
+ let lastOp = null;
210
183
  try {
211
184
  this.logger.info(`Starting initial replication`);
212
185
  await promiseConnection.query('SET TRANSACTION ISOLATION LEVEL REPEATABLE READ, READ ONLY');
213
186
  await promiseConnection.query('START TRANSACTION');
214
187
  await promiseConnection.query(`SET time_zone = '+00:00'`);
215
188
  const sourceTables = this.syncRules.getSourceTables();
216
- await this.storage.startBatch({
189
+ const flushResults = await this.storage.startBatch({
217
190
  logger: this.logger,
218
191
  zeroLSN: common.ReplicatedGTID.ZERO.comparable,
219
192
  defaultSchema: this.defaultSchema,
@@ -229,6 +202,7 @@ AND table_type = 'BASE TABLE';`, [tablePattern.schema, tablePattern.name]);
229
202
  }
230
203
  await batch.commit(headGTID.comparable);
231
204
  });
205
+ lastOp = flushResults?.flushed_op ?? null;
232
206
  this.logger.info(`Initial replication done`);
233
207
  await promiseConnection.query('COMMIT');
234
208
  }
@@ -239,12 +213,20 @@ AND table_type = 'BASE TABLE';`, [tablePattern.schema, tablePattern.name]);
239
213
  finally {
240
214
  connection.release();
241
215
  }
216
+ if (lastOp != null) {
217
+ // Populate the cache _after_ initial replication, but _before_ we switch to this sync rules.
218
+ await this.storage.populatePersistentChecksumCache({
219
+ // No checkpoint yet, but we do have the opId.
220
+ maxOpId: lastOp,
221
+ signal: this.abortSignal
222
+ });
223
+ }
242
224
  }
243
225
  async snapshotTable(connection, batch, table) {
244
- this.logger.info(`Replicating ${table.qualifiedName}`);
226
+ this.logger.info(`Replicating ${qualifiedMySQLTable(table)}`);
245
227
  // TODO count rows and log progress at certain batch sizes
246
228
  // MAX_EXECUTION_TIME(0) hint disables execution timeout for this query
247
- const query = connection.query(`SELECT /*+ MAX_EXECUTION_TIME(0) */ * FROM ${escapeMysqlTableName(table)}`);
229
+ const query = connection.query(`SELECT /*+ MAX_EXECUTION_TIME(0) */ * FROM ${qualifiedMySQLTable(table)}`);
248
230
  const stream = query.stream();
249
231
  let columns = undefined;
250
232
  stream.on('fields', (fields) => {
@@ -321,8 +303,6 @@ AND table_type = 'BASE TABLE';`, [tablePattern.schema, tablePattern.name]);
321
303
  return table;
322
304
  }
323
305
  async streamChanges() {
324
- // Auto-activate as soon as initial replication is done
325
- await this.storage.autoActivate();
326
306
  const serverId = createRandomServerId(this.storage.group_id);
327
307
  const connection = await this.connections.getConnection();
328
308
  const { checkpoint_lsn } = await this.storage.getStatus();
@@ -332,27 +312,23 @@ AND table_type = 'BASE TABLE';`, [tablePattern.schema, tablePattern.name]);
332
312
  const fromGTID = checkpoint_lsn
333
313
  ? common.ReplicatedGTID.fromSerialized(checkpoint_lsn)
334
314
  : await common.readExecutedGtid(connection);
335
- const binLogPositionState = fromGTID.position;
336
315
  connection.release();
337
316
  if (!this.stopped) {
338
317
  await this.storage.startBatch({ zeroLSN: common.ReplicatedGTID.ZERO.comparable, defaultSchema: this.defaultSchema, storeCurrentData: true }, async (batch) => {
339
318
  const binlogEventHandler = this.createBinlogEventHandler(batch);
340
- // Only listen for changes to tables in the sync rules
341
- const includedTables = [...this.tableCache.values()].map((table) => table.table);
342
319
  const binlogListener = new BinLogListener({
343
320
  logger: this.logger,
344
- includedTables: includedTables,
345
- startPosition: binLogPositionState,
321
+ sourceTables: this.syncRules.getSourceTables(),
322
+ startGTID: fromGTID,
346
323
  connectionManager: this.connections,
347
324
  serverId: serverId,
348
325
  eventHandler: binlogEventHandler
349
326
  });
350
- this.abortSignal.addEventListener('abort', () => {
351
- this.logger.info('Abort signal received, stopping replication...');
352
- binlogListener.stop();
327
+ this.abortSignal.addEventListener('abort', async () => {
328
+ await binlogListener.stop();
353
329
  }, { once: true });
354
- // Only returns when the replication is stopped or interrupted by an error
355
330
  await binlogListener.start();
331
+ await binlogListener.replicateUntilStopped();
356
332
  });
357
333
  }
358
334
  }
@@ -380,6 +356,12 @@ AND table_type = 'BASE TABLE';`, [tablePattern.schema, tablePattern.name]);
380
356
  tableEntry: tableMap
381
357
  });
382
358
  },
359
+ onKeepAlive: async (lsn) => {
360
+ const didCommit = await batch.keepalive(lsn);
361
+ if (didCommit) {
362
+ this.oldestUncommittedChange = null;
363
+ }
364
+ },
383
365
  onCommit: async (lsn) => {
384
366
  this.metrics.getCounter(ReplicationMetric.TRANSACTIONS_REPLICATED).add(1);
385
367
  const didCommit = await batch.commit(lsn, { oldestUncommittedChange: this.oldestUncommittedChange });
@@ -395,19 +377,81 @@ AND table_type = 'BASE TABLE';`, [tablePattern.schema, tablePattern.name]);
395
377
  },
396
378
  onRotate: async () => {
397
379
  this.isStartingReplication = false;
380
+ },
381
+ onSchemaChange: async (change) => {
382
+ await this.handleSchemaChange(batch, change);
398
383
  }
399
384
  };
400
385
  }
386
+ async handleSchemaChange(batch, change) {
387
+ if (change.type === SchemaChangeType.RENAME_TABLE) {
388
+ const fromTableId = createTableId(change.schema, change.table);
389
+ const fromTable = this.tableCache.get(fromTableId);
390
+ // Old table needs to be cleaned up
391
+ if (fromTable) {
392
+ await batch.drop([fromTable]);
393
+ this.tableCache.delete(fromTableId);
394
+ }
395
+ // The new table matched a table in the sync rules
396
+ if (change.newTable) {
397
+ await this.handleCreateOrUpdateTable(batch, change.newTable, change.schema);
398
+ }
399
+ }
400
+ else {
401
+ const tableId = createTableId(change.schema, change.table);
402
+ const table = this.getTable(tableId);
403
+ switch (change.type) {
404
+ case SchemaChangeType.ALTER_TABLE_COLUMN:
405
+ case SchemaChangeType.REPLICATION_IDENTITY:
406
+ // For these changes, we need to update the table if the replication identity columns have changed.
407
+ await this.handleCreateOrUpdateTable(batch, change.table, change.schema);
408
+ break;
409
+ case SchemaChangeType.TRUNCATE_TABLE:
410
+ await batch.truncate([table]);
411
+ break;
412
+ case SchemaChangeType.DROP_TABLE:
413
+ await batch.drop([table]);
414
+ this.tableCache.delete(tableId);
415
+ break;
416
+ default:
417
+ // No action needed for other schema changes
418
+ break;
419
+ }
420
+ }
421
+ }
422
+ async getReplicaIdColumns(tableName, schema) {
423
+ const connection = await this.connections.getConnection();
424
+ const replicaIdColumns = await common.getReplicationIdentityColumns({
425
+ connection,
426
+ schema,
427
+ tableName
428
+ });
429
+ connection.release();
430
+ return replicaIdColumns.columns;
431
+ }
432
+ async handleCreateOrUpdateTable(batch, tableName, schema) {
433
+ const replicaIdColumns = await this.getReplicaIdColumns(tableName, schema);
434
+ return await this.handleRelation(batch, {
435
+ name: tableName,
436
+ schema: schema,
437
+ objectId: createTableId(schema, tableName),
438
+ replicaIdColumns: replicaIdColumns
439
+ }, true);
440
+ }
401
441
  async writeChanges(batch, msg) {
402
442
  const columns = common.toColumnDescriptors(msg.tableEntry);
443
+ const tableId = createTableId(msg.tableEntry.parentSchema, msg.tableEntry.tableName);
444
+ let table = this.tableCache.get(tableId);
445
+ if (table == null) {
446
+ // This is an insert for a new table that matches a table in the sync rules
447
+ // We need to create the table in the storage and cache it.
448
+ table = await this.handleCreateOrUpdateTable(batch, msg.tableEntry.tableName, msg.tableEntry.parentSchema);
449
+ }
403
450
  for (const [index, row] of msg.rows.entries()) {
404
451
  await this.writeChange(batch, {
405
452
  type: msg.type,
406
453
  database: msg.tableEntry.parentSchema,
407
- sourceTable: this.getTable(getMysqlRelId({
408
- schema: msg.tableEntry.parentSchema,
409
- name: msg.tableEntry.tableName
410
- })),
454
+ sourceTable: table,
411
455
  table: msg.tableEntry.tableName,
412
456
  columns: columns,
413
457
  row: row,
@@ -431,7 +475,7 @@ AND table_type = 'BASE TABLE';`, [tablePattern.schema, tablePattern.name]);
431
475
  });
432
476
  case storage.SaveOperationTag.UPDATE:
433
477
  this.metrics.getCounter(ReplicationMetric.ROWS_REPLICATED).add(1);
434
- // "before" may be null if the replica id columns are unchanged
478
+ // The previous row may be null if the replica id columns are unchanged.
435
479
  // It's fine to treat that the same as an insert.
436
480
  const beforeUpdated = payload.previous_row
437
481
  ? common.toSQLiteRow(payload.previous_row, payload.columns)
@@ -469,7 +513,7 @@ AND table_type = 'BASE TABLE';`, [tablePattern.schema, tablePattern.name]);
469
513
  return undefined;
470
514
  }
471
515
  else {
472
- // We don't have any uncommitted changes, so replication is up-to-date.
516
+ // We don't have any uncommitted changes, so replication is up to date.
473
517
  return 0;
474
518
  }
475
519
  }
@@ -1 +1 @@
1
- {"version":3,"file":"BinLogStream.js","sourceRoot":"","sources":["../../src/replication/BinLogStream.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,MAAM,IAAI,aAAa,EACvB,uBAAuB,EACvB,yBAAyB,EAC1B,MAAM,mCAAmC,CAAC;AAG3C,OAAO,EAEL,SAAS,EACT,0BAA0B,EAE1B,OAAO,EACR,MAAM,yBAAyB,CAAC;AAKjC,OAAO,KAAK,MAAM,MAAM,2BAA2B,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAErF,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAsB,cAAc,EAAO,MAAM,4BAA4B,CAAC;AAyBrF,MAAM,OAAO,wBAAyB,SAAQ,KAAK;IACjD,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;IACjB,CAAC;CACF;AAED;;;GAGG;AACH,SAAS,aAAa,CAAC,MAAkB;IACvC,OAAO,GAAG,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;AAC3C,CAAC;AAED,MAAM,OAAO,YAAY;IAyBH;IAxBH,SAAS,CAA0B;IACnC,OAAO,CAAS;IAEhB,OAAO,CAAiC;IAExC,WAAW,CAAyB;IAE7C,WAAW,CAAc;IAEzB,UAAU,GAAG,IAAI,GAAG,EAAwC,CAAC;IAE7D,MAAM,CAAS;IAEvB;;;OAGG;IACK,uBAAuB,GAAgB,IAAI,CAAC;IACpD;;;OAGG;IACK,qBAAqB,GAAG,IAAI,CAAC;IAErC,YAAoB,OAA4B;QAA5B,YAAO,GAAP,OAAO,CAAqB;QAC9C,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,aAAa,CAAC;QAC9C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAC/B,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;QACvC,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,kBAAkB,CAAC,EAAE,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;QAC3F,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC;QACxC,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;IACzC,CAAC;IAED,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC;IACxC,CAAC;IAED,IAAY,OAAO;QACjB,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;IAC9B,CAAC;IAED,IAAI,YAAY;QACd,MAAM,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC;QAC1C,0BAA0B;QAC1B,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,OAAO,CAAC,CAAC;QACX,CAAC;QACD;;WAEG;QACH,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;QAC7C,IAAI,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;YAClB,OAAO,CAAC,CAAC;QACX,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;IAClC,CAAC;IAED,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC;IACvC,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,KAAiC,EAAE,MAAsC,EAAE,QAAiB;QAC/G,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;YAC7C,QAAQ,EAAE,IAAI,CAAC,OAAO;YACtB,aAAa,EAAE,IAAI,CAAC,YAAY;YAChC,cAAc,EAAE,IAAI,CAAC,aAAa;YAClC,iBAAiB,EAAE,MAAM;YACzB,UAAU,EAAE,IAAI,CAAC,SAAS;SAC3B,CAAC,CAAC;QACH,uCAAuC;QACvC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,QAAS,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;QAEpD,qEAAqE;QACrE,MAAM,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAEpC,eAAe;QACf,iGAAiG;QACjG,wCAAwC;QACxC,sCAAsC;QACtC,MAAM,cAAc,GAAG,QAAQ,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,IAAI,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC;QAE1F,IAAI,cAAc,EAAE,CAAC;YACnB,oEAAoE;YACpE,MAAM,KAAK,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YAErC,IAAI,IAA2B,CAAC;YAChC,2CAA2C;YAC3C,0CAA0C;YAC1C,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,sBAAsB,EAAE,CAAC;YAEnE,MAAM,iBAAiB,GAAI,UAA+B,CAAC,OAAO,EAAE,CAAC;YACrE,IAAI,CAAC;gBACH,MAAM,iBAAiB,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;gBAC1D,MAAM,iBAAiB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBACvC,IAAI,CAAC;oBACH,IAAI,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,CAAC;oBACxD,MAAM,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,UAAU,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;oBACrE,MAAM,iBAAiB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;gBAC1C,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC;oBACX,MAAM,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC;oBAC1C,MAAM,CAAC,CAAC;gBACV,CAAC;YACH,CAAC;oBAAS,CAAC;gBACT,UAAU,CAAC,OAAO,EAAE,CAAC;YACvB,CAAC;YACD,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,KAAK,CAAC,gBAAgB,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;YAC9E,OAAO,KAAK,CAAC;QACf,CAAC;QAED,OAAO,MAAM,CAAC,KAAK,CAAC;IACtB,CAAC;IAED,KAAK,CAAC,sBAAsB,CAC1B,KAAiC,EACjC,YAAqC;QAErC,IAAI,YAAY,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACrD,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,IAAI,SAAgB,CAAC;QACrB,MAAM,MAAM,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC;QAC9E,IAAI,YAAY,CAAC,UAAU,EAAE,CAAC;YAC5B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CACzC;;;CAGP,EACO,CAAC,YAAY,CAAC,MAAM,EAAE,YAAY,CAAC,YAAY,CAAC,CACjD,CAAC;YACF,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACxB,CAAC;aAAM,CAAC;YACN,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CACzC;;;CAGP,EACO,CAAC,YAAY,CAAC,MAAM,EAAE,YAAY,CAAC,YAAY,CAAC,CACjD,CAAC;YACF,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACxB,CAAC;QACD,IAAI,MAAM,GAA0B,EAAE,CAAC;QAEvC,KAAK,IAAI,GAAG,IAAI,SAAS,EAAE,CAAC;YAC1B,MAAM,IAAI,GAAG,GAAG,CAAC,YAAY,CAAW,CAAC;YACzC,IAAI,MAAM,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;gBACvC,SAAS;YACX,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CACzC;;;+BAGuB,EACvB,CAAC,YAAY,CAAC,MAAM,EAAE,YAAY,CAAC,IAAI,CAAC,CACzC,CAAC;YACF,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;gBAC1B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,YAAY,CAAC,MAAM,IAAI,IAAI,wCAAwC,CAAC,CAAC;gBAClG,SAAS;YACX,CAAC;YAED,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC;YAC1D,MAAM,kBAAkB,GAAG,MAAM,MAAM,CAAC,6BAA6B,CAAC;gBACpE,UAAU,EAAE,UAAU;gBACtB,MAAM,EAAE,YAAY,CAAC,MAAM;gBAC3B,UAAU,EAAE,YAAY,CAAC,IAAI;aAC9B,CAAC,CAAC;YACH,UAAU,CAAC,OAAO,EAAE,CAAC;YAErB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,cAAc,CACrC,KAAK,EACL;gBACE,IAAI;gBACJ,MAAM,EAAE,YAAY,CAAC,MAAM;gBAC3B,QAAQ,EAAE,aAAa,CAAC,YAAY,CAAC;gBACrC,kBAAkB,EAAE,kBAAkB,CAAC,OAAO;aAC/C,EACD,KAAK,CACN,CAAC;YAEF,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACO,KAAK,CAAC,sBAAsB;QACpC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;QAC9C,MAAM,YAAY,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,cAAc,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAChH,IAAI,MAAM,CAAC,aAAa,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;YAClD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;YAEtD,IAAI,YAAY,EAAE,CAAC;gBACjB,iFAAiF;gBACjF,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC;gBAC1D,IAAI,CAAC;oBACH,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,UAAU,EAAE,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;oBACpG,IAAI,CAAC,WAAW,EAAE,CAAC;wBACjB,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,eAAe,YAAY,CAAC,QAAQ,CAAC,QAAQ,8DAA8D,CAC5G,CAAC;oBACJ,CAAC;oBACD,OAAO,WAAW,CAAC;gBACrB,CAAC;wBAAS,CAAC;oBACT,UAAU,CAAC,OAAO,EAAE,CAAC;gBACvB,CAAC;YACH,CAAC;YAED,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,uBAAuB;QAC3B,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QACvD,2EAA2E;QAC3E,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,sBAAsB,EAAE,CAAC;QACnE,MAAM,iBAAiB,GAAI,UAA+B,CAAC,OAAO,EAAE,CAAC;QACrE,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,CAAC;QAClE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,oCAAoC,QAAQ,GAAG,CAAC,CAAC;QAClE,IAAI,CAAC;YACH,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;YACjD,MAAM,iBAAiB,CAAC,KAAK,CAC3B,4DAA4D,CAC7D,CAAC;YACF,MAAM,iBAAiB,CAAC,KAAK,CAA+B,mBAAmB,CAAC,CAAC;YACjF,MAAM,iBAAiB,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;YAE1D,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE,CAAC;YACtD,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,CAC3B;gBACE,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,OAAO,EAAE,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU;gBAC9C,aAAa,EAAE,IAAI,CAAC,aAAa;gBACjC,gBAAgB,EAAE,IAAI;aACvB,EACD,KAAK,EAAE,KAAK,EAAE,EAAE;gBACd,KAAK,IAAI,YAAY,IAAI,YAAY,EAAE,CAAC;oBACtC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;oBACtE,KAAK,IAAI,KAAK,IAAI,MAAM,EAAE,CAAC;wBACzB,MAAM,IAAI,CAAC,aAAa,CAAC,UAA8B,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;wBACvE,MAAM,KAAK,CAAC,gBAAgB,CAAC,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;wBAC3D,MAAM,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;oBAC3C,CAAC;gBACH,CAAC;gBACD,MAAM,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;YAC1C,CAAC,CACF,CAAC;YACF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;YAC7C,MAAM,iBAAiB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC1C,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC;YAC1C,MAAM,CAAC,CAAC;QACV,CAAC;gBAAS,CAAC;YACT,UAAU,CAAC,OAAO,EAAE,CAAC;QACvB,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,aAAa,CACzB,UAA4B,EAC5B,KAAiC,EACjC,KAA0B;QAE1B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC;QACvD,0DAA0D;QAE1D,uEAAuE;QACvE,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,8CAA8C,oBAAoB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC5G,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;QAE9B,IAAI,OAAO,GAA8C,SAAS,CAAC;QACnE,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,MAA2B,EAAE,EAAE;YAClD,kCAAkC;YAClC,OAAO,GAAG,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;QAEH,IAAI,KAAK,EAAE,IAAI,GAAG,IAAI,MAAM,EAAE,CAAC;YAC7B,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACjB,MAAM,IAAI,uBAAuB,CAAC,0DAA0D,CAAC,CAAC;YAChG,CAAC;YAED,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;gBACpB,MAAM,IAAI,yBAAyB,CAAC,2BAA2B,CAAC,CAAC;YACnE,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,OAAQ,CAAC,CAAC;YACjD,MAAM,KAAK,CAAC,IAAI,CAAC;gBACf,GAAG,EAAE,OAAO,CAAC,gBAAgB,CAAC,MAAM;gBACpC,WAAW,EAAE,KAAK;gBAClB,MAAM,EAAE,SAAS;gBACjB,eAAe,EAAE,SAAS;gBAC1B,KAAK,EAAE,MAAM;gBACb,cAAc,EAAE,0BAA0B,CAAC,MAAM,EAAE,KAAK,CAAC,gBAAgB,CAAC;aAC3E,CAAC,CAAC;YAEH,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,iBAAiB,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACpE,CAAC;QACD,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC;IACtB,CAAC;IAED,KAAK,CAAC,SAAS;QACb,IAAI,CAAC;YACH,yEAAyE;YACzE,4DAA4D;YAC5D,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;YAC7B,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;YAC3B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;QACtD,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;YAClC,MAAM,CAAC,CAAC;QACV,CAAC;IACH,CAAC;IAED,KAAK,CAAC,eAAe;QACnB,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC;QAC1D,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,wBAAwB,CAAC,UAAU,CAAC,CAAC;QACjE,UAAU,CAAC,OAAO,EAAE,CAAC;QAErB,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,MAAM,IAAI,wBAAwB,CAAC,gCAAgC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC1F,CAAC;QAED,MAAM,2BAA2B,GAAG,MAAM,IAAI,CAAC,sBAAsB,EAAE,CAAC;QACxE,IAAI,CAAC,2BAA2B,EAAE,CAAC;YACjC,MAAM,IAAI,CAAC,uBAAuB,EAAE,CAAC;QACvC,CAAC;aAAM,CAAC;YACN,oEAAoE;YACpE,sDAAsD;YACtD,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE,CAAC;YACtD,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,CAC3B;gBACE,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,OAAO,EAAE,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU;gBAC9C,aAAa,EAAE,IAAI,CAAC,aAAa;gBACjC,gBAAgB,EAAE,IAAI;aACvB,EACD,KAAK,EAAE,KAAK,EAAE,EAAE;gBACd,KAAK,IAAI,YAAY,IAAI,YAAY,EAAE,CAAC;oBACtC,MAAM,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;gBACzD,CAAC;YACH,CAAC,CACF,CAAC;QACJ,CAAC;IACH,CAAC;IAEO,QAAQ,CAAC,OAAe;QAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC3C,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;YAClB,8EAA8E;YAC9E,mCAAmC;YACnC,MAAM,IAAI,yBAAyB,CAAC,8BAA8B,OAAO,EAAE,CAAC,CAAC;QAC/E,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,KAAK,CAAC,aAAa;QACjB,uDAAuD;QACvD,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;QAClC,MAAM,QAAQ,GAAG,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAE7D,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC;QAC1D,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;QAC1D,IAAI,cAAc,EAAE,CAAC;YACnB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,8BAA8B,cAAc,EAAE,CAAC,CAAC;QACnE,CAAC;QACD,MAAM,QAAQ,GAAG,cAAc;YAC7B,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,cAAc,CAAC,cAAc,CAAC;YACtD,CAAC,CAAC,MAAM,MAAM,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAC9C,MAAM,mBAAmB,GAAG,QAAQ,CAAC,QAAQ,CAAC;QAC9C,UAAU,CAAC,OAAO,EAAE,CAAC;QAErB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,CAC3B,EAAE,OAAO,EAAE,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE,gBAAgB,EAAE,IAAI,EAAE,EAC7G,KAAK,EAAE,KAAK,EAAE,EAAE;gBACd,MAAM,kBAAkB,GAAG,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,CAAC;gBAChE,sDAAsD;gBACtD,MAAM,cAAc,GAAG,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBACjF,MAAM,cAAc,GAAG,IAAI,cAAc,CAAC;oBACxC,MAAM,EAAE,IAAI,CAAC,MAAM;oBACnB,cAAc,EAAE,cAAc;oBAC9B,aAAa,EAAE,mBAAmB;oBAClC,iBAAiB,EAAE,IAAI,CAAC,WAAW;oBACnC,QAAQ,EAAE,QAAQ;oBAClB,YAAY,EAAE,kBAAkB;iBACjC,CAAC,CAAC;gBAEH,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAC/B,OAAO,EACP,GAAG,EAAE;oBACH,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;oBACnE,cAAc,CAAC,IAAI,EAAE,CAAC;gBACxB,CAAC,EACD,EAAE,IAAI,EAAE,IAAI,EAAE,CACf,CAAC;gBAEF,0EAA0E;gBAC1E,MAAM,cAAc,CAAC,KAAK,EAAE,CAAC;YAC/B,CAAC,CACF,CAAC;QACJ,CAAC;IACH,CAAC;IAEO,wBAAwB,CAAC,KAAiC;QAChE,OAAO;YACL,OAAO,EAAE,KAAK,EAAE,IAAW,EAAE,QAAuB,EAAE,EAAE;gBACtD,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE;oBAC7B,IAAI,EAAE,OAAO,CAAC,gBAAgB,CAAC,MAAM;oBACrC,IAAI,EAAE,IAAI;oBACV,UAAU,EAAE,QAAQ;iBACrB,CAAC,CAAC;YACL,CAAC;YAED,QAAQ,EAAE,KAAK,EAAE,SAAgB,EAAE,UAAiB,EAAE,QAAuB,EAAE,EAAE;gBAC/E,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE;oBAC7B,IAAI,EAAE,OAAO,CAAC,gBAAgB,CAAC,MAAM;oBACrC,IAAI,EAAE,SAAS;oBACf,WAAW,EAAE,UAAU;oBACvB,UAAU,EAAE,QAAQ;iBACrB,CAAC,CAAC;YACL,CAAC;YACD,QAAQ,EAAE,KAAK,EAAE,IAAW,EAAE,QAAuB,EAAE,EAAE;gBACvD,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE;oBAC7B,IAAI,EAAE,OAAO,CAAC,gBAAgB,CAAC,MAAM;oBACrC,IAAI,EAAE,IAAI;oBACV,UAAU,EAAE,QAAQ;iBACrB,CAAC,CAAC;YACL,CAAC;YACD,QAAQ,EAAE,KAAK,EAAE,GAAW,EAAE,EAAE;gBAC9B,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,iBAAiB,CAAC,uBAAuB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBAC1E,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,uBAAuB,EAAE,IAAI,CAAC,uBAAuB,EAAE,CAAC,CAAC;gBACrG,IAAI,SAAS,EAAE,CAAC;oBACd,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC;oBACpC,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAAC;gBACrC,CAAC;YACH,CAAC;YACD,kBAAkB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;gBACpC,IAAI,IAAI,CAAC,uBAAuB,IAAI,IAAI,EAAE,CAAC;oBACzC,IAAI,CAAC,uBAAuB,GAAG,OAAO,CAAC,SAAS,CAAC;gBACnD,CAAC;YACH,CAAC;YACD,QAAQ,EAAE,KAAK,IAAI,EAAE;gBACnB,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAAC;YACrC,CAAC;SACF,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,YAAY,CACxB,KAAiC,EACjC,GAKC;QAED,MAAM,OAAO,GAAG,MAAM,CAAC,mBAAmB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAE3D,KAAK,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;YAC9C,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE;gBAC5B,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,QAAQ,EAAE,GAAG,CAAC,UAAU,CAAC,YAAY;gBACrC,WAAW,EAAE,IAAI,CAAC,QAAQ,CACxB,aAAa,CAAC;oBACZ,MAAM,EAAE,GAAG,CAAC,UAAU,CAAC,YAAY;oBACnC,IAAI,EAAE,GAAG,CAAC,UAAU,CAAC,SAAS;iBAC/B,CAAC,CACH;gBACD,KAAK,EAAE,GAAG,CAAC,UAAU,CAAC,SAAS;gBAC/B,OAAO,EAAE,OAAO;gBAChB,GAAG,EAAE,GAAG;gBACR,YAAY,EAAE,GAAG,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC;aACvC,CAAC,CAAC;QACL,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,KAAK,CAAC,WAAW,CACvB,KAAiC,EACjC,OAA2B;QAE3B,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC;YACrB,KAAK,OAAO,CAAC,gBAAgB,CAAC,MAAM;gBAClC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,iBAAiB,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBAClE,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;gBAChE,OAAO,MAAM,KAAK,CAAC,IAAI,CAAC;oBACtB,GAAG,EAAE,OAAO,CAAC,gBAAgB,CAAC,MAAM;oBACpC,WAAW,EAAE,OAAO,CAAC,WAAW;oBAChC,MAAM,EAAE,SAAS;oBACjB,eAAe,EAAE,SAAS;oBAC1B,KAAK,EAAE,MAAM;oBACb,cAAc,EAAE,0BAA0B,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,gBAAgB,CAAC;iBACzF,CAAC,CAAC;YACL,KAAK,OAAO,CAAC,gBAAgB,CAAC,MAAM;gBAClC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,iBAAiB,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBAClE,+DAA+D;gBAC/D,iDAAiD;gBACjD,MAAM,aAAa,GAAG,OAAO,CAAC,YAAY;oBACxC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC,OAAO,CAAC;oBAC3D,CAAC,CAAC,SAAS,CAAC;gBACd,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;gBAE/D,OAAO,MAAM,KAAK,CAAC,IAAI,CAAC;oBACtB,GAAG,EAAE,OAAO,CAAC,gBAAgB,CAAC,MAAM;oBACpC,WAAW,EAAE,OAAO,CAAC,WAAW;oBAChC,MAAM,EAAE,aAAa;oBACrB,eAAe,EAAE,aAAa;wBAC5B,CAAC,CAAC,0BAA0B,CAAC,aAAa,EAAE,OAAO,CAAC,WAAW,CAAC,gBAAgB,CAAC;wBACjF,CAAC,CAAC,SAAS;oBACb,KAAK,EAAE,KAAK;oBACZ,cAAc,EAAE,0BAA0B,CAAC,KAAK,EAAE,OAAO,CAAC,WAAW,CAAC,gBAAgB,CAAC;iBACxF,CAAC,CAAC;YAEL,KAAK,OAAO,CAAC,gBAAgB,CAAC,MAAM;gBAClC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,iBAAiB,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBAClE,MAAM,aAAa,GAAG,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;gBAEvE,OAAO,MAAM,KAAK,CAAC,IAAI,CAAC;oBACtB,GAAG,EAAE,OAAO,CAAC,gBAAgB,CAAC,MAAM;oBACpC,WAAW,EAAE,OAAO,CAAC,WAAW;oBAChC,MAAM,EAAE,aAAa;oBACrB,eAAe,EAAE,0BAA0B,CAAC,aAAa,EAAE,OAAO,CAAC,WAAW,CAAC,gBAAgB,CAAC;oBAChG,KAAK,EAAE,SAAS;oBAChB,cAAc,EAAE,SAAS;iBAC1B,CAAC,CAAC;YACL;gBACE,OAAO,IAAI,CAAC;QAChB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,uBAAuB;QAC3B,IAAI,IAAI,CAAC,uBAAuB,IAAI,IAAI,EAAE,CAAC;YACzC,IAAI,IAAI,CAAC,qBAAqB,EAAE,CAAC;gBAC/B,8DAA8D;gBAC9D,OAAO,SAAS,CAAC;YACnB,CAAC;iBAAM,CAAC;gBACN,uEAAuE;gBACvE,OAAO,CAAC,CAAC;YACX,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,uBAAuB,CAAC,OAAO,EAAE,CAAC;IAC7D,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,iBAA0C;QAC1D,IAAI,CAAC;YACH,MAAM,iBAAiB,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC5C,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,gCAAgC,EAAE,CAAC,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"BinLogStream.js","sourceRoot":"","sources":["../../src/replication/BinLogStream.ts"],"names":[],"mappings":"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"}
@@ -3,7 +3,36 @@ import async from 'async';
3
3
  import { BinLogEvent, TableMapEntry, ZongJi } from '@powersync/mysql-zongji';
4
4
  import { Logger } from '@powersync/lib-services-framework';
5
5
  import { MySQLConnectionManager } from '../MySQLConnectionManager.js';
6
+ import { TablePattern } from '@powersync/service-sync-rules';
7
+ /**
8
+ * Seconds of inactivity after which a keepalive event is sent by the MySQL server.
9
+ */
10
+ export declare const KEEPALIVE_INACTIVITY_THRESHOLD = 30;
6
11
  export type Row = Record<string, any>;
12
+ /**
13
+ * Schema changes that are detectable by inspecting query events.
14
+ * Create table statements are not included here, since new tables are automatically detected when row events
15
+ * are received for them.
16
+ */
17
+ export declare enum SchemaChangeType {
18
+ RENAME_TABLE = "Rename Table",
19
+ DROP_TABLE = "Drop Table",
20
+ TRUNCATE_TABLE = "Truncate Table",
21
+ ALTER_TABLE_COLUMN = "Alter Table Column",
22
+ REPLICATION_IDENTITY = "Alter Replication Identity"
23
+ }
24
+ export interface SchemaChange {
25
+ type: SchemaChangeType;
26
+ /**
27
+ * The table that the schema change applies to.
28
+ */
29
+ table: string;
30
+ schema: string;
31
+ /**
32
+ * Populated for table renames if the newTable was matched by the DatabaseFilter
33
+ */
34
+ newTable?: string;
35
+ }
7
36
  export interface BinLogEventHandler {
8
37
  onTransactionStart: (options: {
9
38
  timestamp: Date;
@@ -13,14 +42,17 @@ export interface BinLogEventHandler {
13
42
  onUpdate: (rowsAfter: Row[], rowsBefore: Row[], tableMap: TableMapEntry) => Promise<void>;
14
43
  onDelete: (rows: Row[], tableMap: TableMapEntry) => Promise<void>;
15
44
  onCommit: (lsn: string) => Promise<void>;
45
+ onSchemaChange: (change: SchemaChange) => Promise<void>;
46
+ onKeepAlive: (lsn: string) => Promise<void>;
16
47
  }
17
48
  export interface BinLogListenerOptions {
18
49
  connectionManager: MySQLConnectionManager;
19
50
  eventHandler: BinLogEventHandler;
20
- includedTables: string[];
51
+ sourceTables: TablePattern[];
21
52
  serverId: number;
22
- startPosition: common.BinLogPosition;
53
+ startGTID: common.ReplicatedGTID;
23
54
  logger?: Logger;
55
+ keepAliveInactivitySeconds?: number;
24
56
  }
25
57
  /**
26
58
  * Wrapper class for the Zongji BinLog listener. Internally handles the creation and management of the listener and posts
@@ -28,11 +60,17 @@ export interface BinLogListenerOptions {
28
60
  */
29
61
  export declare class BinLogListener {
30
62
  options: BinLogListenerOptions;
63
+ private sqlParser;
31
64
  private connectionManager;
32
65
  private eventHandler;
33
66
  private binLogPosition;
34
67
  private currentGTID;
35
68
  private logger;
69
+ private listenerError;
70
+ private databaseFilter;
71
+ private isStopped;
72
+ private isStopping;
73
+ private isTransactionOpen;
36
74
  zongji: ZongJi;
37
75
  processingQueue: async.QueueObject<BinLogEvent>;
38
76
  /**
@@ -45,10 +83,26 @@ export declare class BinLogListener {
45
83
  * @private
46
84
  */
47
85
  private get queueMemoryLimit();
48
- start(): Promise<void>;
49
- stop(): void;
50
- private get isStopped();
86
+ start(isRestart?: boolean): Promise<void>;
87
+ private restartZongji;
88
+ private stopZongji;
89
+ stop(): Promise<void>;
90
+ replicateUntilStopped(): Promise<void>;
91
+ private createProcessingQueue;
51
92
  private createZongjiListener;
52
- private createQueueWorker;
53
93
  isQueueOverCapacity(): boolean;
94
+ private createQueueWorker;
95
+ private processQueryEvent;
96
+ /**
97
+ * Function that interprets a DDL query for any applicable schema changes.
98
+ * If the query does not contain any relevant schema changes, an empty array is returned.
99
+ * The defaultSchema is derived from the database set on the MySQL Node.js connection client.
100
+ * It is used as a fallback when the schema/database cannot be determined from the query DDL.
101
+ *
102
+ * @param query
103
+ * @param defaultSchema
104
+ */
105
+ private toSchemaChanges;
106
+ private isTableIncluded;
107
+ private createDatabaseFilter;
54
108
  }