@powersync/service-module-mssql 0.0.0-dev-20260313100403 → 0.0.0-dev-20260515144844
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 +91 -6
- package/dist/api/MSSQLRouteAPIAdapter.d.ts +2 -2
- package/dist/api/MSSQLRouteAPIAdapter.js +3 -3
- package/dist/api/MSSQLRouteAPIAdapter.js.map +1 -1
- package/dist/common/CaptureInstance.d.ts +14 -0
- package/dist/common/CaptureInstance.js +2 -0
- package/dist/common/CaptureInstance.js.map +1 -0
- package/dist/common/MSSQLSourceTable.d.ts +16 -14
- package/dist/common/MSSQLSourceTable.js +35 -16
- package/dist/common/MSSQLSourceTable.js.map +1 -1
- package/dist/common/MSSQLSourceTableCache.js.map +1 -1
- package/dist/common/mssqls-to-sqlite.d.ts +1 -1
- package/dist/common/mssqls-to-sqlite.js +1 -1
- package/dist/common/mssqls-to-sqlite.js.map +1 -1
- package/dist/module/MSSQLModule.js +4 -4
- package/dist/module/MSSQLModule.js.map +1 -1
- package/dist/replication/CDCPoller.d.ts +45 -23
- package/dist/replication/CDCPoller.js +201 -61
- package/dist/replication/CDCPoller.js.map +1 -1
- package/dist/replication/CDCReplicationJob.d.ts +2 -2
- package/dist/replication/CDCReplicationJob.js +12 -4
- package/dist/replication/CDCReplicationJob.js.map +1 -1
- package/dist/replication/CDCReplicator.d.ts +2 -3
- package/dist/replication/CDCReplicator.js +1 -24
- package/dist/replication/CDCReplicator.js.map +1 -1
- package/dist/replication/CDCStream.d.ts +39 -16
- package/dist/replication/CDCStream.js +195 -102
- package/dist/replication/CDCStream.js.map +1 -1
- package/dist/replication/MSSQLConnectionManager.d.ts +1 -1
- package/dist/replication/MSSQLConnectionManager.js +17 -6
- package/dist/replication/MSSQLConnectionManager.js.map +1 -1
- package/dist/replication/MSSQLConnectionManagerFactory.d.ts +1 -1
- package/dist/replication/MSSQLConnectionManagerFactory.js.map +1 -1
- package/dist/replication/MSSQLSnapshotQuery.d.ts +1 -1
- package/dist/replication/MSSQLSnapshotQuery.js +2 -2
- package/dist/replication/MSSQLSnapshotQuery.js.map +1 -1
- package/dist/types/types.d.ts +4 -56
- package/dist/types/types.js +5 -24
- package/dist/types/types.js.map +1 -1
- package/dist/utils/deadlock.d.ts +9 -0
- package/dist/utils/deadlock.js +40 -0
- package/dist/utils/deadlock.js.map +1 -0
- package/dist/utils/mssql.d.ts +36 -18
- package/dist/utils/mssql.js +102 -100
- package/dist/utils/mssql.js.map +1 -1
- package/dist/utils/schema.d.ts +9 -0
- package/dist/utils/schema.js +34 -0
- package/dist/utils/schema.js.map +1 -1
- package/package.json +14 -14
- package/src/api/MSSQLRouteAPIAdapter.ts +4 -4
- package/src/common/CaptureInstance.ts +15 -0
- package/src/common/MSSQLSourceTable.ts +33 -24
- package/src/common/MSSQLSourceTableCache.ts +1 -1
- package/src/common/mssqls-to-sqlite.ts +1 -1
- package/src/module/MSSQLModule.ts +4 -4
- package/src/replication/CDCPoller.ts +275 -75
- package/src/replication/CDCReplicationJob.ts +13 -6
- package/src/replication/CDCReplicator.ts +2 -28
- package/src/replication/CDCStream.ts +265 -124
- package/src/replication/MSSQLConnectionManager.ts +17 -7
- package/src/replication/MSSQLConnectionManagerFactory.ts +1 -1
- package/src/replication/MSSQLSnapshotQuery.ts +3 -3
- package/src/types/types.ts +5 -28
- package/src/utils/deadlock.ts +44 -0
- package/src/utils/mssql.ts +163 -128
- package/src/utils/schema.ts +44 -1
- package/test/src/CDCStream.test.ts +7 -7
- package/test/src/CDCStreamTestContext.ts +14 -8
- package/test/src/CDCStream_resumable_snapshot.test.ts +6 -6
- package/test/src/LSN.test.ts +1 -1
- package/test/src/mssql-to-sqlite.test.ts +25 -17
- package/test/src/schema-changes.test.ts +474 -0
- package/test/src/util.ts +79 -22
- package/test/tsconfig.json +0 -1
- package/tsconfig.tsbuildinfo +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MSSQLConnectionManager.js","sourceRoot":"","sources":["../../src/replication/MSSQLConnectionManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,
|
|
1
|
+
{"version":3,"file":"MSSQLConnectionManager.js","sourceRoot":"","sources":["../../src/replication/MSSQLConnectionManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
import sql from 'mssql';
|
|
1
2
|
import { ResolvedMSSQLConnectionConfig } from '../types/types.js';
|
|
2
3
|
import { MSSQLConnectionManager } from './MSSQLConnectionManager.js';
|
|
3
|
-
import sql from 'mssql';
|
|
4
4
|
export declare class MSSQLConnectionManagerFactory {
|
|
5
5
|
private readonly connectionManagers;
|
|
6
6
|
readonly connectionConfig: ResolvedMSSQLConnectionConfig;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MSSQLConnectionManagerFactory.js","sourceRoot":"","sources":["../../src/replication/MSSQLConnectionManagerFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;
|
|
1
|
+
{"version":3,"file":"MSSQLConnectionManagerFactory.js","sourceRoot":"","sources":["../../src/replication/MSSQLConnectionManagerFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AAG3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAErE,MAAM,OAAO,6BAA6B;IACvB,kBAAkB,CAA8B;IACjD,gBAAgB,CAAgC;IAEhE,YAAY,gBAA+C;QACzD,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;QACzC,IAAI,CAAC,kBAAkB,GAAG,IAAI,GAAG,EAA0B,CAAC;IAC9D,CAAC;IAED,MAAM,CAAC,WAAyC;QAC9C,MAAM,OAAO,GAAG,IAAI,sBAAsB,CAAC,IAAI,CAAC,gBAAgB,EAAE,WAAW,CAAC,CAAC;QAC/E,OAAO,CAAC,gBAAgB,CAAC;YACvB,OAAO,EAAE,GAAG,EAAE;gBACZ,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAC1C,CAAC;SACF,CAAC,CAAC;QACH,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACrC,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,MAAM,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;QAC1D,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,EAAE,CAAC;YACvD,MAAM,OAAO,CAAC,GAAG,EAAE,CAAC;QACtB,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;IAC/D,CAAC;CACF"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { SourceTable } from '@powersync/service-core';
|
|
2
|
-
import { MSSQLBaseType } from '../types/mssql-data-types.js';
|
|
3
2
|
import sql from 'mssql';
|
|
4
3
|
import { MSSQLSourceTable } from '../common/MSSQLSourceTable.js';
|
|
4
|
+
import { MSSQLBaseType } from '../types/mssql-data-types.js';
|
|
5
5
|
export interface MSSQLSnapshotQuery {
|
|
6
6
|
initialize(): Promise<void>;
|
|
7
7
|
/**
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { bson } from '@powersync/service-core';
|
|
2
1
|
import { ServiceAssertionError } from '@powersync/lib-services-framework';
|
|
2
|
+
import { bson } from '@powersync/service-core';
|
|
3
|
+
import { MSSQLSourceTable } from '../common/MSSQLSourceTable.js';
|
|
3
4
|
import { MSSQLBaseType } from '../types/mssql-data-types.js';
|
|
4
5
|
import { escapeIdentifier } from '../utils/mssql.js';
|
|
5
|
-
import { MSSQLSourceTable } from '../common/MSSQLSourceTable.js';
|
|
6
6
|
/**
|
|
7
7
|
* Snapshot query using a plain SELECT * FROM table
|
|
8
8
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MSSQLSnapshotQuery.js","sourceRoot":"","sources":["../../src/replication/MSSQLSnapshotQuery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"MSSQLSnapshotQuery.js","sourceRoot":"","sources":["../../src/replication/MSSQLSnapshotQuery.ts"],"names":[],"mappings":"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"}
|
package/dist/types/types.d.ts
CHANGED
|
@@ -1,28 +1,8 @@
|
|
|
1
1
|
import { LookupFunction } from 'node:net';
|
|
2
2
|
import * as t from 'ts-codec';
|
|
3
|
+
export declare const DEFAULT_POLLING_BATCH_SIZE = 10;
|
|
4
|
+
export declare const DEFAULT_POLLING_INTERVAL_MS = 1000;
|
|
3
5
|
export declare const MSSQL_CONNECTION_TYPE: "mssql";
|
|
4
|
-
export declare const AzureActiveDirectoryPasswordAuthentication: t.ObjectCodec<{
|
|
5
|
-
type: t.LiteralCodec<"azure-active-directory-password">;
|
|
6
|
-
options: t.ObjectCodec<{
|
|
7
|
-
/**
|
|
8
|
-
* A user need to provide `userName` associate to their account.
|
|
9
|
-
*/
|
|
10
|
-
userName: t.IdentityCodec<t.CodecType.String>;
|
|
11
|
-
/**
|
|
12
|
-
* A user need to provide `password` associate to their account.
|
|
13
|
-
*/
|
|
14
|
-
password: t.IdentityCodec<t.CodecType.String>;
|
|
15
|
-
/**
|
|
16
|
-
* A client id to use.
|
|
17
|
-
*/
|
|
18
|
-
clientId: t.IdentityCodec<t.CodecType.String>;
|
|
19
|
-
/**
|
|
20
|
-
* Azure tenant ID
|
|
21
|
-
*/
|
|
22
|
-
tenantId: t.IdentityCodec<t.CodecType.String>;
|
|
23
|
-
}>;
|
|
24
|
-
}>;
|
|
25
|
-
export type AzureActiveDirectoryPasswordAuthentication = t.Decoded<typeof AzureActiveDirectoryPasswordAuthentication>;
|
|
26
6
|
export declare const AzureActiveDirectoryServicePrincipalSecret: t.ObjectCodec<{
|
|
27
7
|
type: t.LiteralCodec<"azure-active-directory-service-principal-secret">;
|
|
28
8
|
options: t.ObjectCodec<{
|
|
@@ -56,28 +36,12 @@ export declare const DefaultAuthentication: t.ObjectCodec<{
|
|
|
56
36
|
}>;
|
|
57
37
|
export type DefaultAuthentication = t.Decoded<typeof DefaultAuthentication>;
|
|
58
38
|
export declare const Authentication: t.Union<t.Codec<{
|
|
59
|
-
type: "azure-active-directory-password";
|
|
60
|
-
options: {
|
|
61
|
-
userName: string;
|
|
62
|
-
password: string;
|
|
63
|
-
clientId: string;
|
|
64
|
-
tenantId: string;
|
|
65
|
-
};
|
|
66
|
-
} | {
|
|
67
39
|
type: "default";
|
|
68
40
|
options: {
|
|
69
41
|
userName: string;
|
|
70
42
|
password: string;
|
|
71
43
|
};
|
|
72
44
|
}, {
|
|
73
|
-
type: "azure-active-directory-password";
|
|
74
|
-
options: {
|
|
75
|
-
userName: string;
|
|
76
|
-
password: string;
|
|
77
|
-
clientId: string;
|
|
78
|
-
tenantId: string;
|
|
79
|
-
};
|
|
80
|
-
} | {
|
|
81
45
|
type: "default";
|
|
82
46
|
options: {
|
|
83
47
|
userName: string;
|
|
@@ -164,19 +128,11 @@ export declare const MSSQLConnectionConfig: t.Intersection<t.Codec<{
|
|
|
164
128
|
hostname: t.OptionalCodec<t.Codec<string, string, string, t.CodecProps>>;
|
|
165
129
|
port: t.OptionalCodec<t.Codec<number, string | number, string, t.CodecProps>>;
|
|
166
130
|
authentication: t.OptionalCodec<t.Codec<{
|
|
167
|
-
type: "azure-active-directory-password";
|
|
168
|
-
options: {
|
|
169
|
-
userName: string;
|
|
170
|
-
password: string;
|
|
171
|
-
clientId: string;
|
|
172
|
-
tenantId: string;
|
|
173
|
-
};
|
|
174
|
-
} | {
|
|
175
131
|
type: "azure-active-directory-service-principal-secret";
|
|
176
132
|
options: {
|
|
177
133
|
clientId: string;
|
|
178
|
-
tenantId: string;
|
|
179
134
|
clientSecret: string;
|
|
135
|
+
tenantId: string;
|
|
180
136
|
};
|
|
181
137
|
} | {
|
|
182
138
|
type: "default";
|
|
@@ -185,19 +141,11 @@ export declare const MSSQLConnectionConfig: t.Intersection<t.Codec<{
|
|
|
185
141
|
password: string;
|
|
186
142
|
};
|
|
187
143
|
}, {
|
|
188
|
-
type: "azure-active-directory-password";
|
|
189
|
-
options: {
|
|
190
|
-
userName: string;
|
|
191
|
-
password: string;
|
|
192
|
-
clientId: string;
|
|
193
|
-
tenantId: string;
|
|
194
|
-
};
|
|
195
|
-
} | {
|
|
196
144
|
type: "azure-active-directory-service-principal-secret";
|
|
197
145
|
options: {
|
|
198
146
|
clientId: string;
|
|
199
|
-
tenantId: string;
|
|
200
147
|
clientSecret: string;
|
|
148
|
+
tenantId: string;
|
|
201
149
|
};
|
|
202
150
|
} | {
|
|
203
151
|
type: "default";
|
package/dist/types/types.js
CHANGED
|
@@ -2,28 +2,9 @@ import { ErrorCode, makeHostnameLookupFunction, ServiceError } from '@powersync/
|
|
|
2
2
|
import * as service_types from '@powersync/service-types';
|
|
3
3
|
import * as t from 'ts-codec';
|
|
4
4
|
import * as urijs from 'uri-js';
|
|
5
|
+
export const DEFAULT_POLLING_BATCH_SIZE = 10;
|
|
6
|
+
export const DEFAULT_POLLING_INTERVAL_MS = 1000;
|
|
5
7
|
export const MSSQL_CONNECTION_TYPE = 'mssql';
|
|
6
|
-
export const AzureActiveDirectoryPasswordAuthentication = t.object({
|
|
7
|
-
type: t.literal('azure-active-directory-password'),
|
|
8
|
-
options: t.object({
|
|
9
|
-
/**
|
|
10
|
-
* A user need to provide `userName` associate to their account.
|
|
11
|
-
*/
|
|
12
|
-
userName: t.string,
|
|
13
|
-
/**
|
|
14
|
-
* A user need to provide `password` associate to their account.
|
|
15
|
-
*/
|
|
16
|
-
password: t.string,
|
|
17
|
-
/**
|
|
18
|
-
* A client id to use.
|
|
19
|
-
*/
|
|
20
|
-
clientId: t.string,
|
|
21
|
-
/**
|
|
22
|
-
* Azure tenant ID
|
|
23
|
-
*/
|
|
24
|
-
tenantId: t.string
|
|
25
|
-
})
|
|
26
|
-
});
|
|
27
8
|
export const AzureActiveDirectoryServicePrincipalSecret = t.object({
|
|
28
9
|
type: t.literal('azure-active-directory-service-principal-secret'),
|
|
29
10
|
options: t.object({
|
|
@@ -54,7 +35,7 @@ export const DefaultAuthentication = t.object({
|
|
|
54
35
|
password: t.string
|
|
55
36
|
})
|
|
56
37
|
});
|
|
57
|
-
export const Authentication = DefaultAuthentication.or(
|
|
38
|
+
export const Authentication = DefaultAuthentication.or(AzureActiveDirectoryServicePrincipalSecret);
|
|
58
39
|
export const AdditionalConfig = t.object({
|
|
59
40
|
/**
|
|
60
41
|
* Interval in milliseconds to wait between polling cycles. Defaults to 1000 milliseconds.
|
|
@@ -129,8 +110,8 @@ export function normalizeConnectionConfig(options) {
|
|
|
129
110
|
lookup,
|
|
130
111
|
authentication: options.authentication,
|
|
131
112
|
additionalConfig: {
|
|
132
|
-
pollingIntervalMs: options.additionalConfig?.pollingIntervalMs ??
|
|
133
|
-
pollingBatchSize: options.additionalConfig?.pollingBatchSize ??
|
|
113
|
+
pollingIntervalMs: options.additionalConfig?.pollingIntervalMs ?? DEFAULT_POLLING_INTERVAL_MS,
|
|
114
|
+
pollingBatchSize: options.additionalConfig?.pollingBatchSize ?? DEFAULT_POLLING_BATCH_SIZE,
|
|
134
115
|
trustServerCertificate: options.additionalConfig?.trustServerCertificate ?? false
|
|
135
116
|
}
|
|
136
117
|
};
|
package/dist/types/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,0BAA0B,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AACxG,OAAO,KAAK,aAAa,MAAM,0BAA0B,CAAC;AAE1D,OAAO,KAAK,CAAC,MAAM,UAAU,CAAC;AAC9B,OAAO,KAAK,KAAK,MAAM,QAAQ,CAAC;AAEhC,MAAM,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Retries the given async function if it fails with a SQL Server deadlock error (1205).
|
|
3
|
+
* Deadlocks, while uncommon, can occur when CDC altering functions are being called whilst actively replicating
|
|
4
|
+
* using CDC functions.
|
|
5
|
+
*
|
|
6
|
+
* If the error is not a deadlock or all retries are exhausted, the error is re-thrown.
|
|
7
|
+
*/
|
|
8
|
+
export declare function retryOnDeadlock<T>(fn: () => Promise<T>, operationName: string): Promise<T>;
|
|
9
|
+
export declare function isDeadlockError(error: unknown): boolean;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { logger } from '@powersync/lib-services-framework';
|
|
2
|
+
import timers from 'timers/promises';
|
|
3
|
+
const MSSQL_DEADLOCK_RETRIES = 5;
|
|
4
|
+
const MSSQL_DEADLOCK_BACKOFF_FACTOR = 2;
|
|
5
|
+
const MSSQL_DEADLOCK_RETRY_DELAY_MS = 200;
|
|
6
|
+
/**
|
|
7
|
+
* Retries the given async function if it fails with a SQL Server deadlock error (1205).
|
|
8
|
+
* Deadlocks, while uncommon, can occur when CDC altering functions are being called whilst actively replicating
|
|
9
|
+
* using CDC functions.
|
|
10
|
+
*
|
|
11
|
+
* If the error is not a deadlock or all retries are exhausted, the error is re-thrown.
|
|
12
|
+
*/
|
|
13
|
+
export async function retryOnDeadlock(fn, operationName) {
|
|
14
|
+
let lastError = null;
|
|
15
|
+
for (let attempt = 0; attempt <= MSSQL_DEADLOCK_RETRIES; attempt++) {
|
|
16
|
+
try {
|
|
17
|
+
return await fn();
|
|
18
|
+
}
|
|
19
|
+
catch (error) {
|
|
20
|
+
lastError = error;
|
|
21
|
+
if (!isDeadlockError(error) || attempt === MSSQL_DEADLOCK_RETRIES) {
|
|
22
|
+
throw error;
|
|
23
|
+
}
|
|
24
|
+
const delay = MSSQL_DEADLOCK_RETRY_DELAY_MS * Math.pow(MSSQL_DEADLOCK_BACKOFF_FACTOR, attempt);
|
|
25
|
+
logger.warn(`Deadlock detected during ${operationName} (attempt ${attempt + 1}/${MSSQL_DEADLOCK_RETRIES}). Retrying in ${delay}ms...`);
|
|
26
|
+
await timers.setTimeout(delay);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
throw lastError;
|
|
30
|
+
}
|
|
31
|
+
export function isDeadlockError(error) {
|
|
32
|
+
if (error != null && typeof error === 'object' && 'number' in error) {
|
|
33
|
+
// SQL Server deadlock victim error number.
|
|
34
|
+
// When SQL Server detects a deadlock, it chooses one of the participating transactions
|
|
35
|
+
// as the "deadlock victim" and terminates it with error 1205.
|
|
36
|
+
return error.number === 1205;
|
|
37
|
+
}
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=deadlock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deadlock.js","sourceRoot":"","sources":["../../src/utils/deadlock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AAC3D,OAAO,MAAM,MAAM,iBAAiB,CAAC;AAErC,MAAM,sBAAsB,GAAG,CAAC,CAAC;AACjC,MAAM,6BAA6B,GAAG,CAAC,CAAC;AACxC,MAAM,6BAA6B,GAAG,GAAG,CAAC;AAE1C;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAI,EAAoB,EAAE,aAAqB;IAClF,IAAI,SAAS,GAAiB,IAAI,CAAC;IACnC,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,sBAAsB,EAAE,OAAO,EAAE,EAAE,CAAC;QACnE,IAAI,CAAC;YACH,OAAO,MAAM,EAAE,EAAE,CAAC;QACpB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,SAAS,GAAG,KAAK,CAAC;YAClB,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,sBAAsB,EAAE,CAAC;gBAClE,MAAM,KAAK,CAAC;YACd,CAAC;YACD,MAAM,KAAK,GAAG,6BAA6B,GAAG,IAAI,CAAC,GAAG,CAAC,6BAA6B,EAAE,OAAO,CAAC,CAAC;YAC/F,MAAM,CAAC,IAAI,CACT,4BAA4B,aAAa,aAAa,OAAO,GAAG,CAAC,IAAI,sBAAsB,kBAAkB,KAAK,OAAO,CAC1H,CAAC;YACF,MAAM,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IAED,MAAM,SAAS,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAc;IAC5C,IAAI,KAAK,IAAI,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,QAAQ,IAAI,KAAK,EAAE,CAAC;QACpE,2CAA2C;QAC3C,uFAAuF;QACvF,8DAA8D;QAC9D,OAAQ,KAA6B,CAAC,MAAM,KAAK,IAAI,CAAC;IACxD,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
package/dist/utils/mssql.d.ts
CHANGED
|
@@ -1,16 +1,17 @@
|
|
|
1
|
+
import { SqlSyncRules, TablePattern } from '@powersync/service-sync-rules';
|
|
2
|
+
import * as service_types from '@powersync/service-types';
|
|
1
3
|
import sql from 'mssql';
|
|
2
|
-
import {
|
|
4
|
+
import { CaptureInstance } from '../common/CaptureInstance.js';
|
|
3
5
|
import { LSN } from '../common/LSN.js';
|
|
4
|
-
import {
|
|
6
|
+
import { MSSQLSourceTable } from '../common/MSSQLSourceTable.js';
|
|
7
|
+
import { MSSQLConnectionManager } from '../replication/MSSQLConnectionManager.js';
|
|
5
8
|
import { MSSQLParameter } from '../types/mssql-data-types.js';
|
|
6
|
-
import { SqlSyncRules, TablePattern } from '@powersync/service-sync-rules';
|
|
7
9
|
import { ResolvedTable } from './schema.js';
|
|
8
|
-
import * as service_types from '@powersync/service-types';
|
|
9
10
|
export declare const POWERSYNC_CHECKPOINTS_TABLE = "_powersync_checkpoints";
|
|
10
11
|
export declare const SUPPORTED_ENGINE_EDITIONS: Map<number, string>;
|
|
11
12
|
export declare const MINIMUM_SUPPORTED_VERSION = "15.0";
|
|
12
13
|
export declare function checkSourceConfiguration(connectionManager: MSSQLConnectionManager): Promise<string[]>;
|
|
13
|
-
export declare function
|
|
14
|
+
export declare function checkPowerSyncCheckpointsTable(connectionManager: MSSQLConnectionManager): Promise<string[]>;
|
|
14
15
|
export declare function createCheckpoint(connectionManager: MSSQLConnectionManager): Promise<void>;
|
|
15
16
|
export interface IsTableEnabledForCDCOptions {
|
|
16
17
|
connectionManager: MSSQLConnectionManager;
|
|
@@ -22,11 +23,6 @@ export interface IsTableEnabledForCDCOptions {
|
|
|
22
23
|
* @param options
|
|
23
24
|
*/
|
|
24
25
|
export declare function isTableEnabledForCDC(options: IsTableEnabledForCDCOptions): Promise<boolean>;
|
|
25
|
-
export interface EnableCDCForTableOptions {
|
|
26
|
-
connectionManager: MSSQLConnectionManager;
|
|
27
|
-
table: string;
|
|
28
|
-
}
|
|
29
|
-
export declare function enableCDCForTable(options: EnableCDCForTableOptions): Promise<void>;
|
|
30
26
|
/**
|
|
31
27
|
* Check if the supplied version is newer or equal to the target version.
|
|
32
28
|
* @param version
|
|
@@ -39,20 +35,14 @@ export interface IsWithinRetentionThresholdOptions {
|
|
|
39
35
|
connectionManager: MSSQLConnectionManager;
|
|
40
36
|
}
|
|
41
37
|
/**
|
|
42
|
-
* Checks that
|
|
38
|
+
* Checks that the given checkpoint LSN is still within the retention threshold of the source table capture instances.
|
|
43
39
|
* CDC periodically cleans up old data up to the retention threshold. If replication has been stopped for too long it is
|
|
44
40
|
* possible for the checkpoint LSN to be older than the minimum LSN in the CDC tables. In such a case we need to perform a new snapshot.
|
|
45
41
|
* @param options
|
|
46
42
|
*/
|
|
47
|
-
export declare function
|
|
43
|
+
export declare function checkRetentionThresholds(options: IsWithinRetentionThresholdOptions): Promise<MSSQLSourceTable[]>;
|
|
48
44
|
export declare function getMinLSN(connectionManager: MSSQLConnectionManager, captureInstance: string): Promise<LSN>;
|
|
49
45
|
export declare function incrementLSN(lsn: LSN, connectionManager: MSSQLConnectionManager): Promise<LSN>;
|
|
50
|
-
export interface GetCaptureInstanceOptions {
|
|
51
|
-
connectionManager: MSSQLConnectionManager;
|
|
52
|
-
tableName: string;
|
|
53
|
-
schema: string;
|
|
54
|
-
}
|
|
55
|
-
export declare function getCaptureInstance(options: GetCaptureInstanceOptions): Promise<CaptureInstance | null>;
|
|
56
46
|
/**
|
|
57
47
|
* Return the LSN of the latest transaction recorded in the transaction log
|
|
58
48
|
* @param connectionManager
|
|
@@ -78,3 +68,31 @@ export interface GetDebugTableInfoOptions {
|
|
|
78
68
|
syncRules: SqlSyncRules;
|
|
79
69
|
}
|
|
80
70
|
export declare function getDebugTableInfo(options: GetDebugTableInfoOptions): Promise<service_types.TableInfo>;
|
|
71
|
+
export interface CaptureInstanceDetails {
|
|
72
|
+
sourceTable: {
|
|
73
|
+
schema: string;
|
|
74
|
+
name: string;
|
|
75
|
+
objectId: number;
|
|
76
|
+
};
|
|
77
|
+
/**
|
|
78
|
+
* The capture instances for the source table.
|
|
79
|
+
* The instances are sorted by create date in descending order.
|
|
80
|
+
*/
|
|
81
|
+
instances: CaptureInstance[];
|
|
82
|
+
}
|
|
83
|
+
export interface GetCaptureInstancesOptions {
|
|
84
|
+
connectionManager: MSSQLConnectionManager;
|
|
85
|
+
table?: {
|
|
86
|
+
schema: string;
|
|
87
|
+
name: string;
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
export declare function getCaptureInstances(options: GetCaptureInstancesOptions): Promise<Map<number, CaptureInstanceDetails>>;
|
|
91
|
+
export interface GetCaptureInstanceOptions {
|
|
92
|
+
connectionManager: MSSQLConnectionManager;
|
|
93
|
+
table: {
|
|
94
|
+
schema: string;
|
|
95
|
+
name: string;
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
export declare function getCaptureInstance(options: GetCaptureInstanceOptions): Promise<CaptureInstanceDetails | null>;
|