@powersync/service-module-mssql 0.9.0 → 0.10.1
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 +113 -0
- package/dist/api/MSSQLRouteAPIAdapter.js +26 -34
- package/dist/api/MSSQLRouteAPIAdapter.js.map +1 -1
- package/dist/common/MSSQLSourceTable.d.ts +12 -2
- package/dist/common/MSSQLSourceTable.js +30 -4
- package/dist/common/MSSQLSourceTable.js.map +1 -1
- package/dist/replication/CDCPoller.d.ts +13 -36
- package/dist/replication/CDCPoller.js +173 -129
- package/dist/replication/CDCPoller.js.map +1 -1
- package/dist/replication/CDCStream.d.ts +11 -14
- package/dist/replication/CDCStream.js +115 -106
- package/dist/replication/CDCStream.js.map +1 -1
- package/dist/replication/CaptureReconciler.d.ts +47 -0
- package/dist/replication/CaptureReconciler.js +155 -0
- package/dist/replication/CaptureReconciler.js.map +1 -0
- package/dist/replication/MSSQLConnectionManager.d.ts +1 -0
- package/dist/replication/MSSQLConnectionManager.js +19 -14
- package/dist/replication/MSSQLConnectionManager.js.map +1 -1
- package/dist/replication/MSSQLTableReconciliationContext.d.ts +21 -0
- package/dist/replication/MSSQLTableReconciliationContext.js +7 -0
- package/dist/replication/MSSQLTableReconciliationContext.js.map +1 -0
- package/dist/replication/SchemaChange.d.ts +67 -0
- package/dist/replication/SchemaChange.js +31 -0
- package/dist/replication/SchemaChange.js.map +1 -0
- package/dist/types/types.d.ts +8 -0
- package/dist/types/types.js +10 -1
- package/dist/types/types.js.map +1 -1
- package/dist/utils/mssql.js +1 -1
- package/dist/utils/schema.d.ts +14 -1
- package/dist/utils/schema.js +40 -45
- package/dist/utils/schema.js.map +1 -1
- package/package.json +8 -8
- package/src/api/MSSQLRouteAPIAdapter.ts +27 -33
- package/src/common/MSSQLSourceTable.ts +32 -4
- package/src/replication/CDCPoller.ts +206 -162
- package/src/replication/CDCStream.ts +148 -154
- package/src/replication/CaptureReconciler.ts +186 -0
- package/src/replication/MSSQLConnectionManager.ts +23 -14
- package/src/replication/MSSQLTableReconciliationContext.ts +29 -0
- package/src/replication/SchemaChange.ts +79 -0
- package/src/types/types.ts +22 -1
- package/src/utils/mssql.ts +1 -1
- package/src/utils/schema.ts +57 -58
- package/test/src/CDCPoller.test.ts +382 -0
- package/test/src/CDCStream.test.ts +6 -2
- package/test/src/CDCStreamTestContext.ts +7 -0
- package/test/src/CaptureReconciler.test.ts +171 -0
- package/test/src/MSSQLSourceTable.test.ts +30 -0
- package/test/src/config.test.ts +37 -0
- package/test/src/schema-changes.test.ts +513 -249
- package/test/src/schema.test.ts +17 -0
- package/test/src/util.ts +70 -6
- package/tsconfig.tsbuildinfo +1 -1
|
@@ -3,27 +3,24 @@ import sql from 'mssql';
|
|
|
3
3
|
import timers from 'timers/promises';
|
|
4
4
|
import { LSN } from '../common/LSN.js';
|
|
5
5
|
import { isDeadlockError } from '../utils/deadlock.js';
|
|
6
|
-
import { getCaptureInstances, incrementLSN
|
|
6
|
+
import { getCaptureInstances, incrementLSN } from '../utils/mssql.js';
|
|
7
7
|
import { tableExists } from '../utils/schema.js';
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
(
|
|
17
|
-
SchemaChangeType["TABLE_RENAME"] = "table_rename";
|
|
18
|
-
SchemaChangeType["TABLE_DROP"] = "table_drop";
|
|
19
|
-
SchemaChangeType["TABLE_CREATE"] = "table_create";
|
|
20
|
-
SchemaChangeType["TABLE_COLUMN_CHANGES"] = "table_column_changes";
|
|
21
|
-
SchemaChangeType["NEW_CAPTURE_INSTANCE"] = "new_capture_instance";
|
|
22
|
-
SchemaChangeType["MISSING_CAPTURE_INSTANCE"] = "missing_capture_instance";
|
|
23
|
-
})(SchemaChangeType || (SchemaChangeType = {}));
|
|
8
|
+
import { CaptureInstanceMissingError } from './CaptureReconciler.js';
|
|
9
|
+
import { SchemaChangeType } from './SchemaChange.js';
|
|
10
|
+
var LogicalChangeType;
|
|
11
|
+
(function (LogicalChangeType) {
|
|
12
|
+
LogicalChangeType["INSERT"] = "INSERT";
|
|
13
|
+
LogicalChangeType["DELETE"] = "DELETE";
|
|
14
|
+
LogicalChangeType["UPDATE"] = "UPDATE";
|
|
15
|
+
LogicalChangeType["DEFERRED_UPDATE"] = "DEFERRED UPDATE";
|
|
16
|
+
})(LogicalChangeType || (LogicalChangeType = {}));
|
|
24
17
|
export const DEFAULT_SCHEMA_CHECK_INTERVAL_MS = 60_000;
|
|
25
18
|
/**
|
|
19
|
+
* Polls SQL Server CDC change tables for changes at a configurable interval.
|
|
26
20
|
*
|
|
21
|
+
* Processes changes in commit order, groups CDC rows into logical insert,
|
|
22
|
+
* update, and delete operations. It only commits once all the operations recorded in a polling cycle have been processed.
|
|
23
|
+
* Periodically runs checks to detect schema and capture-instance changes.
|
|
27
24
|
*/
|
|
28
25
|
export class CDCPoller {
|
|
29
26
|
options;
|
|
@@ -31,8 +28,8 @@ export class CDCPoller {
|
|
|
31
28
|
eventHandler;
|
|
32
29
|
currentLSN;
|
|
33
30
|
logger;
|
|
34
|
-
listenerError;
|
|
35
31
|
captureInstances;
|
|
32
|
+
pollingError = null;
|
|
36
33
|
isStopped = false;
|
|
37
34
|
isStopping = false;
|
|
38
35
|
isPolling = false;
|
|
@@ -43,7 +40,6 @@ export class CDCPoller {
|
|
|
43
40
|
this.connectionManager = options.connectionManager;
|
|
44
41
|
this.eventHandler = options.eventHandler;
|
|
45
42
|
this.currentLSN = options.startLSN;
|
|
46
|
-
this.listenerError = null;
|
|
47
43
|
this.captureInstances = new Map();
|
|
48
44
|
}
|
|
49
45
|
get pollingBatchSize() {
|
|
@@ -105,16 +101,16 @@ export class CDCPoller {
|
|
|
105
101
|
continue;
|
|
106
102
|
}
|
|
107
103
|
// Non-recoverable errors
|
|
108
|
-
this.
|
|
104
|
+
this.pollingError = error;
|
|
109
105
|
this.logger.error('Error during CDC polling:', error);
|
|
110
106
|
this.stop();
|
|
111
107
|
}
|
|
112
108
|
break;
|
|
113
109
|
}
|
|
114
110
|
}
|
|
115
|
-
if (this.
|
|
116
|
-
this.logger.error('CDC polling was stopped due to an error:', this.
|
|
117
|
-
throw this.
|
|
111
|
+
if (this.pollingError) {
|
|
112
|
+
this.logger.error('CDC polling was stopped due to an error:', this.pollingError);
|
|
113
|
+
throw this.pollingError;
|
|
118
114
|
}
|
|
119
115
|
this.logger.info(`CDC polling stopped...`);
|
|
120
116
|
}
|
|
@@ -137,18 +133,19 @@ export class CDCPoller {
|
|
|
137
133
|
// The new endLSN is the largest LSN in the result
|
|
138
134
|
const endLSN = LSN.fromBinary(results[results.length - 1].start_lsn);
|
|
139
135
|
this.logger.info(`Polling bounds are ${startLSN} -> ${endLSN} spanning ${results.length} transaction(s).`);
|
|
140
|
-
|
|
136
|
+
// We poll for batch size transactions, but these include transactions not applicable to our Source Tables.
|
|
137
|
+
// A single transaction can also span several Source Tables, so collect the distinct transaction LSNs
|
|
138
|
+
// that produced changes rather than counting per table, which would either double count the
|
|
139
|
+
// transactions spanning tables or miss the transactions applicable to only one of them.
|
|
140
|
+
let transactionLSNs = new Set();
|
|
141
141
|
this.logger.debug(`Currently replicating tables: ${this.replicatedTables.map((table) => table.toQualifiedName()).join(', ')}`);
|
|
142
142
|
for (const table of this.replicatedTables) {
|
|
143
143
|
if (table.enabledForCDC()) {
|
|
144
|
-
const
|
|
145
|
-
|
|
146
|
-
// Each Source Table may or may not have transactions that are applicable to it, so just keep track of the highest number of transactions processed for any Source Table.
|
|
147
|
-
if (tableTransactionCount > transactionCount) {
|
|
148
|
-
transactionCount = tableTransactionCount;
|
|
149
|
-
}
|
|
144
|
+
const transactions = await this.pollTable(table, { startLSN, endLSN });
|
|
145
|
+
transactions.forEach((t) => transactionLSNs.add(t));
|
|
150
146
|
}
|
|
151
147
|
}
|
|
148
|
+
const transactionCount = transactionLSNs.size;
|
|
152
149
|
this.logger.info(`Processed ${results.length} transaction(s), including ${transactionCount} Source Table transaction(s). Commited LSN: ${endLSN.toString()}`);
|
|
153
150
|
// Call eventHandler.onCommit() with toLSN after processing all tables
|
|
154
151
|
await this.eventHandler.onCommit(endLSN.toString(), transactionCount);
|
|
@@ -160,63 +157,69 @@ export class CDCPoller {
|
|
|
160
157
|
this.isPolling = false;
|
|
161
158
|
}
|
|
162
159
|
}
|
|
160
|
+
/**
|
|
161
|
+
* Processes the changes this table has within the given bounds, and returns the LSNs of the
|
|
162
|
+
* transactions those changes belong to. The LSNs are returned in their string form so that the
|
|
163
|
+
* caller can deduplicate them across tables by value.
|
|
164
|
+
*/
|
|
163
165
|
async pollTable(table, bounds) {
|
|
164
|
-
|
|
165
|
-
|
|
166
|
+
const transactionLSNs = new Set();
|
|
167
|
+
// CDC cleanup can advance minLSN while the capture-table identity remains unchanged, so use
|
|
168
|
+
// the latest metadata loaded by the schema check rather than the instance bound at startup.
|
|
169
|
+
const availableInstances = this.captureInstances.get(table.objectId)?.instances ?? [];
|
|
170
|
+
table.setCaptureInstance(availableInstances);
|
|
171
|
+
const boundInstance = table.captureInstance;
|
|
172
|
+
if (boundInstance == null) {
|
|
173
|
+
// The pinned instance can be dropped between schema checks.
|
|
174
|
+
throw new CaptureInstanceMissingError(`The CDC capture instance for table ${table.toQualifiedName()} (pinned to object id ` +
|
|
175
|
+
`${table.pinnedCaptureObjectId}) is no longer available. Deploy a new sync config to replicate ` +
|
|
176
|
+
`this table against an available capture instance.`);
|
|
177
|
+
}
|
|
178
|
+
const minLSN = boundInstance.minLSN;
|
|
166
179
|
if (minLSN > bounds.endLSN) {
|
|
167
|
-
return
|
|
180
|
+
return transactionLSNs;
|
|
168
181
|
}
|
|
169
182
|
else if (minLSN >= bounds.startLSN) {
|
|
170
183
|
bounds.startLSN = minLSN;
|
|
171
184
|
}
|
|
172
185
|
try {
|
|
173
|
-
const
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
case
|
|
190
|
-
await this.eventHandler.
|
|
191
|
-
this.logger.info(`Processed INSERT row LSN: ${transactionLSN}`);
|
|
186
|
+
const request = await this.connectionManager.createRequest();
|
|
187
|
+
request.input('from_lsn', sql.VarBinary, bounds.startLSN.toBinary());
|
|
188
|
+
request.input('to_lsn', sql.VarBinary, bounds.endLSN.toBinary());
|
|
189
|
+
let columns = null;
|
|
190
|
+
request.on('recordset', (recordsetColumns) => {
|
|
191
|
+
columns = recordsetColumns;
|
|
192
|
+
});
|
|
193
|
+
const stream = request.toReadableStream();
|
|
194
|
+
request.query(`
|
|
195
|
+
SELECT * FROM ${table.allChangesFunction}(@from_lsn, @to_lsn, 'all update old') ORDER BY __$start_lsn, __$seqval, __$operation
|
|
196
|
+
`);
|
|
197
|
+
for await (const { transactionLSN, type, rows } of groupLogicalChanges(stream, table)) {
|
|
198
|
+
if (columns == null) {
|
|
199
|
+
throw new ReplicationAssertionError(`Missing CDC column metadata while polling for updates for table ${table.toQualifiedName()}.`);
|
|
200
|
+
}
|
|
201
|
+
switch (type) {
|
|
202
|
+
case LogicalChangeType.DELETE:
|
|
203
|
+
await this.eventHandler.onDelete(rows[0], table, columns);
|
|
192
204
|
break;
|
|
193
|
-
case
|
|
194
|
-
|
|
195
|
-
this.logger.debug(`Processed UPDATE, before row LSN: ${transactionLSN}`);
|
|
205
|
+
case LogicalChangeType.INSERT:
|
|
206
|
+
await this.eventHandler.onInsert(rows[0], table, columns);
|
|
196
207
|
break;
|
|
197
|
-
case
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
await this.eventHandler.onUpdate(row, updateBefore, table, results.columns);
|
|
202
|
-
updateBefore = null;
|
|
203
|
-
this.logger.info(`Processed UPDATE row LSN: ${transactionLSN}`);
|
|
208
|
+
case LogicalChangeType.UPDATE:
|
|
209
|
+
case LogicalChangeType.DEFERRED_UPDATE:
|
|
210
|
+
const [rowBefore, rowAfter] = rows;
|
|
211
|
+
await this.eventHandler.onUpdate(rowAfter, rowBefore, table, columns);
|
|
204
212
|
break;
|
|
205
|
-
default:
|
|
206
|
-
this.logger.warn(`Unknown operation type [${row.__$operation}] encountered in CDC changes.`);
|
|
207
|
-
}
|
|
208
|
-
// Increment transaction count when we encounter a new transaction LSN (except for UPDATE_BEFORE rows)
|
|
209
|
-
if (transactionLSN != lastTransactionLSN) {
|
|
210
|
-
lastTransactionLSN = transactionLSN;
|
|
211
|
-
if (row.__$operation !== Operation.UPDATE_BEFORE) {
|
|
212
|
-
transactionCount++;
|
|
213
|
-
}
|
|
214
213
|
}
|
|
214
|
+
this.logger.info(`Processed ${type}. Transaction LSN: ${transactionLSN}`);
|
|
215
|
+
transactionLSNs.add(transactionLSN.toString());
|
|
215
216
|
}
|
|
216
|
-
return
|
|
217
|
+
return transactionLSNs;
|
|
217
218
|
}
|
|
218
219
|
catch (error) {
|
|
219
|
-
// This Covers both deleted tables and capture instances
|
|
220
|
+
// This Covers both deleted tables and capture instances. Unlike the check above, this cannot
|
|
221
|
+
// tell the two apart, so it stays recoverable: the forced schema check classifies it as a
|
|
222
|
+
// dropped table or a missing capture instance and fails with the matching error.
|
|
220
223
|
if (error.message.includes(`Invalid object name`)) {
|
|
221
224
|
throw new DatabaseQueryError(ErrorCode.PSYNC_S1601, `Capture instance for table ${table.toQualifiedName()} is no longer available.`, error);
|
|
222
225
|
}
|
|
@@ -226,29 +229,13 @@ export class CDCPoller {
|
|
|
226
229
|
shouldCheckSchema() {
|
|
227
230
|
return Date.now() - this.lastSchemaCheckTime >= this.schemaCheckIntervalMs;
|
|
228
231
|
}
|
|
229
|
-
/**
|
|
230
|
-
* Checks the given table for pending schema changes that can lead to inconsistencies in the replicated data if not handled.
|
|
231
|
-
* Returns the SchemaChange if any are found, null otherwise.
|
|
232
|
-
*/
|
|
233
232
|
async checkForSchemaChanges() {
|
|
234
233
|
const schemaChanges = [];
|
|
235
|
-
|
|
236
|
-
for (const table of newTables) {
|
|
237
|
-
this.logger.info(`New table ${toQualifiedTableName(table.sourceTable.schema, table.sourceTable.name)} matching the sync config has been created. Handling schema change...`);
|
|
238
|
-
schemaChanges.push({
|
|
239
|
-
type: SchemaChangeType.TABLE_CREATE,
|
|
240
|
-
newTable: {
|
|
241
|
-
name: table.sourceTable.name,
|
|
242
|
-
schema: table.sourceTable.schema,
|
|
243
|
-
objectId: table.sourceTable.objectId
|
|
244
|
-
},
|
|
245
|
-
newCaptureInstance: table.instances[0]
|
|
246
|
-
});
|
|
247
|
-
}
|
|
234
|
+
// Exact table names keep the replicated set fixed until the next deploy.
|
|
248
235
|
for (const table of this.replicatedTables) {
|
|
249
236
|
const exists = await tableExists(table.objectId, this.connectionManager);
|
|
250
237
|
if (!exists) {
|
|
251
|
-
this.logger.info(`Table ${table.toQualifiedName()} has been dropped
|
|
238
|
+
this.logger.info(`Table ${table.toQualifiedName()} has been dropped.`);
|
|
252
239
|
schemaChanges.push({
|
|
253
240
|
type: SchemaChangeType.TABLE_DROP,
|
|
254
241
|
table
|
|
@@ -257,71 +244,128 @@ export class CDCPoller {
|
|
|
257
244
|
}
|
|
258
245
|
const captureInstanceDetails = this.captureInstances.get(table.objectId);
|
|
259
246
|
if (!captureInstanceDetails) {
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
});
|
|
266
|
-
}
|
|
247
|
+
// The table had a capture instance when the stream started, but no longer does.
|
|
248
|
+
schemaChanges.push({
|
|
249
|
+
type: SchemaChangeType.MISSING_CAPTURE_INSTANCE,
|
|
250
|
+
table
|
|
251
|
+
});
|
|
267
252
|
continue;
|
|
268
253
|
}
|
|
269
254
|
const latestCaptureInstance = captureInstanceDetails.instances[0];
|
|
270
|
-
|
|
271
|
-
|
|
255
|
+
table.setCaptureInstance(captureInstanceDetails.instances);
|
|
256
|
+
const boundInstance = table.captureInstance;
|
|
257
|
+
if (boundInstance == null) {
|
|
258
|
+
// Include the replacement so the error can suggest the right recovery step.
|
|
259
|
+
schemaChanges.push({
|
|
260
|
+
type: SchemaChangeType.MISSING_CAPTURE_INSTANCE,
|
|
261
|
+
table,
|
|
262
|
+
replacementInstance: latestCaptureInstance
|
|
263
|
+
});
|
|
264
|
+
continue;
|
|
265
|
+
}
|
|
266
|
+
if (latestCaptureInstance.objectId !== boundInstance.objectId) {
|
|
267
|
+
// Keep checking for rename and column changes against the pinned instance.
|
|
272
268
|
schemaChanges.push({
|
|
273
269
|
type: SchemaChangeType.NEW_CAPTURE_INSTANCE,
|
|
274
270
|
table,
|
|
275
271
|
newCaptureInstance: latestCaptureInstance
|
|
276
272
|
});
|
|
277
|
-
continue;
|
|
278
273
|
}
|
|
279
|
-
//
|
|
274
|
+
// The new name is only used in the error message.
|
|
280
275
|
if (table.ref.name !== captureInstanceDetails.sourceTable.name) {
|
|
281
|
-
|
|
282
|
-
|
|
276
|
+
schemaChanges.push({
|
|
277
|
+
type: SchemaChangeType.TABLE_RENAME,
|
|
278
|
+
table,
|
|
279
|
+
newTable: {
|
|
283
280
|
name: captureInstanceDetails.sourceTable.name,
|
|
284
281
|
schema: captureInstanceDetails.sourceTable.schema,
|
|
285
282
|
objectId: captureInstanceDetails.sourceTable.objectId
|
|
286
283
|
}
|
|
287
|
-
: undefined;
|
|
288
|
-
schemaChanges.push({
|
|
289
|
-
type: SchemaChangeType.TABLE_RENAME,
|
|
290
|
-
table,
|
|
291
|
-
newTable,
|
|
292
|
-
newCaptureInstance: latestCaptureInstance
|
|
293
284
|
});
|
|
294
285
|
continue;
|
|
295
286
|
}
|
|
296
|
-
|
|
287
|
+
// Report drift against the capture instance this stream uses.
|
|
288
|
+
if (boundInstance.pendingSchemaChanges.length > 0) {
|
|
297
289
|
schemaChanges.push({
|
|
298
290
|
type: SchemaChangeType.TABLE_COLUMN_CHANGES,
|
|
299
291
|
table,
|
|
300
|
-
|
|
292
|
+
captureInstance: boundInstance
|
|
301
293
|
});
|
|
302
294
|
}
|
|
303
295
|
}
|
|
304
296
|
return schemaChanges;
|
|
305
297
|
}
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
298
|
+
}
|
|
299
|
+
/**
|
|
300
|
+
* Groups CDC change rows into the logical row changes they describe.
|
|
301
|
+
*
|
|
302
|
+
* SQL Server records a logical change as either one row (a plain insert or delete) or two rows that share
|
|
303
|
+
* a `__$seqval`. `__$seqval` represents the ordering of the changes to a row within a transaction.
|
|
304
|
+
* CDC operations that can share a `__$seqval` are:
|
|
305
|
+
* - The before and after operations of an in-place update
|
|
306
|
+
* - The delete and insert operations of a deferred update.
|
|
307
|
+
*
|
|
308
|
+
* This method groups and emits rows in the same transaction based on their `__$seqval`
|
|
309
|
+
*/
|
|
310
|
+
async function* groupLogicalChanges(rows, table) {
|
|
311
|
+
let current = null;
|
|
312
|
+
for await (const row of rows) {
|
|
313
|
+
const transactionLSN = row.__$start_lsn;
|
|
314
|
+
const sequence = row.__$seqval;
|
|
315
|
+
if (current && !(transactionLSN.equals(current.transactionLSN) && sequence.equals(current.sequence))) {
|
|
316
|
+
yield toLogicalChange(current.rows, current.transactionLSN, table);
|
|
317
|
+
current = null;
|
|
318
|
+
}
|
|
319
|
+
current ??= {
|
|
320
|
+
transactionLSN,
|
|
321
|
+
sequence,
|
|
322
|
+
rows: []
|
|
323
|
+
};
|
|
324
|
+
current.rows.push(row);
|
|
325
|
+
}
|
|
326
|
+
if (current) {
|
|
327
|
+
yield toLogicalChange(current.rows, current.transactionLSN, table);
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
function toLogicalChange(rows, startLSN, table) {
|
|
331
|
+
const transactionLSN = LSN.fromBinary(startLSN);
|
|
332
|
+
return {
|
|
333
|
+
transactionLSN,
|
|
334
|
+
type: resolveLogicalChangeType(rows, transactionLSN, table),
|
|
335
|
+
rows: rows
|
|
336
|
+
};
|
|
337
|
+
}
|
|
338
|
+
function resolveLogicalChangeType(orderedRows, transactionLSN, table) {
|
|
339
|
+
// This matches the actual CDC operation codes:https://learn.microsoft.com/en-us/sql/relational-databases/system-functions/cdc-fn-cdc-get-all-changes-capture-instance-transact-sql?view=sql-server-ver17#table-returned
|
|
340
|
+
let Operation;
|
|
341
|
+
(function (Operation) {
|
|
342
|
+
Operation[Operation["DELETE"] = 1] = "DELETE";
|
|
343
|
+
Operation[Operation["INSERT"] = 2] = "INSERT";
|
|
344
|
+
Operation[Operation["UPDATE_BEFORE"] = 3] = "UPDATE_BEFORE";
|
|
345
|
+
Operation[Operation["UPDATE_AFTER"] = 4] = "UPDATE_AFTER";
|
|
346
|
+
})(Operation || (Operation = {}));
|
|
347
|
+
if (orderedRows.length === 1) {
|
|
348
|
+
const operation = orderedRows[0].__$operation;
|
|
349
|
+
if (operation === Operation.INSERT) {
|
|
350
|
+
return LogicalChangeType.INSERT;
|
|
351
|
+
}
|
|
352
|
+
else if (operation === Operation.DELETE) {
|
|
353
|
+
return LogicalChangeType.DELETE;
|
|
354
|
+
}
|
|
355
|
+
else {
|
|
356
|
+
throw new ReplicationAssertionError(`Unrecognized operation: ${operation} for table ${table.toQualifiedName()} in transaction LSN ${transactionLSN}.`);
|
|
316
357
|
}
|
|
317
|
-
return newTables;
|
|
318
358
|
}
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
359
|
+
else if (orderedRows.length === 2) {
|
|
360
|
+
const [first, second] = orderedRows;
|
|
361
|
+
if (first.__$operation === Operation.UPDATE_BEFORE && second.__$operation === Operation.UPDATE_AFTER) {
|
|
362
|
+
return LogicalChangeType.UPDATE;
|
|
363
|
+
}
|
|
364
|
+
else if (first.__$operation === Operation.DELETE && second.__$operation === Operation.INSERT) {
|
|
365
|
+
return LogicalChangeType.DEFERRED_UPDATE;
|
|
366
|
+
}
|
|
367
|
+
throw new ReplicationAssertionError(`Unexpected CDC operations [${first.__$operation}, ${second.__$operation}] for a single logical change on table ${table.toQualifiedName()} in transaction LSN ${transactionLSN}.`);
|
|
325
368
|
}
|
|
369
|
+
throw new ReplicationAssertionError(`Unexpected number of CDC operations [${orderedRows.length}] for a single logical change on table ${table.toQualifiedName()} in transaction LSN ${transactionLSN}.`);
|
|
326
370
|
}
|
|
327
371
|
//# sourceMappingURL=CDCPoller.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CDCPoller.js","sourceRoot":"","sources":["../../src/replication/CDCPoller.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CDCPoller.js","sourceRoot":"","sources":["../../src/replication/CDCPoller.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import { DatabaseConnectionError, Logger } from '@powersync/lib-services-framework';
|
|
2
|
-
import { MetricsEngine,
|
|
2
|
+
import { MetricsEngine, storage } from '@powersync/service-core';
|
|
3
3
|
import { TablePattern } from '@powersync/service-sync-rules';
|
|
4
4
|
import sql from 'mssql';
|
|
5
|
-
import { CaptureInstance } from '../common/CaptureInstance.js';
|
|
6
5
|
import { MSSQLSourceTable } from '../common/MSSQLSourceTable.js';
|
|
7
6
|
import { MSSQLSourceTableCache } from '../common/MSSQLSourceTableCache.js';
|
|
8
7
|
import { AdditionalConfig } from '../types/types.js';
|
|
9
|
-
import {
|
|
8
|
+
import { CaptureInstanceDetails } from '../utils/mssql.js';
|
|
10
9
|
import { MSSQLConnectionManager } from './MSSQLConnectionManager.js';
|
|
10
|
+
import type { MSSQLReadyTableReconciliationContext } from './MSSQLTableReconciliationContext.js';
|
|
11
|
+
import { SchemaChange } from './SchemaChange.js';
|
|
11
12
|
export interface CDCStreamOptions {
|
|
12
13
|
connections: MSSQLConnectionManager;
|
|
13
14
|
storage: storage.SyncRulesBucketStorage;
|
|
@@ -65,6 +66,8 @@ export declare class CDCStream {
|
|
|
65
66
|
private readonly logger;
|
|
66
67
|
tableCache: MSSQLSourceTableCache;
|
|
67
68
|
private replicationLag;
|
|
69
|
+
private warnedNewerCaptureObjectId;
|
|
70
|
+
private warnedSchemaChangeCount;
|
|
68
71
|
constructor(options: CDCStreamOptions);
|
|
69
72
|
private get metrics();
|
|
70
73
|
get stopped(): boolean;
|
|
@@ -76,8 +79,9 @@ export declare class CDCStream {
|
|
|
76
79
|
get snapshotBatchSize(): number;
|
|
77
80
|
replicate(): Promise<void>;
|
|
78
81
|
populateTableCache(): Promise<void>;
|
|
79
|
-
getQualifiedTableNames(batch: storage.BucketStorageBatch, tablePattern: TablePattern): Promise<MSSQLSourceTable[]>;
|
|
80
|
-
processTable(batch: storage.BucketStorageBatch,
|
|
82
|
+
getQualifiedTableNames(batch: storage.BucketStorageBatch, tablePattern: TablePattern, captureInstances: Map<number, CaptureInstanceDetails>): Promise<MSSQLSourceTable[]>;
|
|
83
|
+
processTable(batch: storage.BucketStorageBatch, context: MSSQLReadyTableReconciliationContext): Promise<MSSQLSourceTable>;
|
|
84
|
+
private reportUnavailableTable;
|
|
81
85
|
private snapshotTableInTx;
|
|
82
86
|
private snapshotTable;
|
|
83
87
|
/**
|
|
@@ -103,17 +107,10 @@ export declare class CDCStream {
|
|
|
103
107
|
streamChanges(): Promise<void>;
|
|
104
108
|
private createEventHandler;
|
|
105
109
|
handleSchemaChange(batch: storage.BucketStorageBatch, change: SchemaChange): Promise<void>;
|
|
106
|
-
private handleCreateOrUpdateTable;
|
|
107
110
|
/**
|
|
108
|
-
*
|
|
109
|
-
*
|
|
110
|
-
* Due to the way CDC works, users are prevented from making column schema changes that affect the replication identities of a table.
|
|
111
|
-
* If changes like that are required, CDC has to be disabled and re-enabled for the table. This would then be handled by the detection of the new
|
|
112
|
-
* capture instance.
|
|
113
|
-
* @param table
|
|
114
|
-
* @param captureInstance
|
|
111
|
+
* Warn about column drift while continuing with the pinned capture schema.
|
|
115
112
|
*/
|
|
116
|
-
private
|
|
113
|
+
private warnColumnChanges;
|
|
117
114
|
/**
|
|
118
115
|
* Convert CDC row data to SqliteRow format.
|
|
119
116
|
* CDC rows include table columns plus CDC metadata columns (__$operation, __$start_lsn, etc.).
|