@powersync/service-module-mssql 0.0.0-dev-20251202102946 → 0.0.0-dev-20251208145829
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 +17 -12
- package/dist/api/MSSQLRouteAPIAdapter.js +15 -50
- package/dist/api/MSSQLRouteAPIAdapter.js.map +1 -1
- package/dist/common/LSN.js +2 -2
- package/dist/common/LSN.js.map +1 -1
- package/dist/common/MSSQLSourceTable.js +4 -4
- package/dist/common/MSSQLSourceTable.js.map +1 -1
- package/dist/common/mssqls-to-sqlite.js +4 -4
- package/dist/common/mssqls-to-sqlite.js.map +1 -1
- package/dist/replication/CDCPoller.js +1 -2
- package/dist/replication/CDCPoller.js.map +1 -1
- package/dist/replication/CDCStream.js +24 -32
- package/dist/replication/CDCStream.js.map +1 -1
- package/dist/replication/MSSQLSnapshotQuery.d.ts +0 -17
- package/dist/replication/MSSQLSnapshotQuery.js +0 -47
- package/dist/replication/MSSQLSnapshotQuery.js.map +1 -1
- package/dist/utils/mssql.js +27 -13
- package/dist/utils/mssql.js.map +1 -1
- package/dist/utils/schema.js +31 -15
- package/dist/utils/schema.js.map +1 -1
- package/package.json +9 -9
- package/src/api/MSSQLRouteAPIAdapter.ts +15 -50
- package/src/common/LSN.ts +2 -2
- package/src/common/MSSQLSourceTable.ts +4 -4
- package/src/common/mssqls-to-sqlite.ts +11 -4
- package/src/replication/CDCPoller.ts +1 -2
- package/src/replication/CDCStream.ts +26 -42
- package/src/replication/MSSQLSnapshotQuery.ts +0 -54
- package/src/utils/mssql.ts +28 -15
- package/src/utils/schema.ts +31 -17
- package/test/src/CDCStream.test.ts +5 -5
- package/test/src/CDCStream_resumable_snapshot.test.ts +3 -3
- package/test/src/mssql-to-sqlite.test.ts +28 -26
- package/test/src/util.ts +16 -6
- package/tsconfig.tsbuildinfo +1 -1
- package/ci/init-mssql.sql +0 -50
package/dist/utils/mssql.js
CHANGED
|
@@ -64,8 +64,11 @@ export async function ensurePowerSyncCheckpointsTable(connectionManager) {
|
|
|
64
64
|
try {
|
|
65
65
|
// check if the dbo_powersync_checkpoints table exists
|
|
66
66
|
const { recordset: checkpointsResult } = await connectionManager.query(`
|
|
67
|
-
SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA =
|
|
68
|
-
|
|
67
|
+
SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = @schema AND TABLE_NAME = @tableName;
|
|
68
|
+
`, [
|
|
69
|
+
{ name: 'schema', type: sql.VarChar(sql.MAX), value: connectionManager.schema },
|
|
70
|
+
{ name: 'tableName', type: sql.VarChar(sql.MAX), value: POWERSYNC_CHECKPOINTS_TABLE },
|
|
71
|
+
]);
|
|
69
72
|
if (checkpointsResult.length > 0) {
|
|
70
73
|
// Table already exists, check if CDC is enabled
|
|
71
74
|
const isEnabled = await isTableEnabledForCDC({
|
|
@@ -89,7 +92,7 @@ export async function ensurePowerSyncCheckpointsTable(connectionManager) {
|
|
|
89
92
|
// Try to create the table
|
|
90
93
|
try {
|
|
91
94
|
await connectionManager.query(`
|
|
92
|
-
CREATE TABLE ${connectionManager.schema}.${POWERSYNC_CHECKPOINTS_TABLE} (
|
|
95
|
+
CREATE TABLE ${escapeIdentifier(connectionManager.schema)}.${escapeIdentifier(POWERSYNC_CHECKPOINTS_TABLE)} (
|
|
93
96
|
id INT IDENTITY PRIMARY KEY,
|
|
94
97
|
last_updated DATETIME NOT NULL DEFAULT (GETDATE())
|
|
95
98
|
)`);
|
|
@@ -111,7 +114,7 @@ export async function ensurePowerSyncCheckpointsTable(connectionManager) {
|
|
|
111
114
|
}
|
|
112
115
|
export async function createCheckpoint(connectionManager) {
|
|
113
116
|
await connectionManager.query(`
|
|
114
|
-
MERGE ${connectionManager.schema}.${POWERSYNC_CHECKPOINTS_TABLE} AS target
|
|
117
|
+
MERGE ${escapeIdentifier(connectionManager.schema)}.${escapeIdentifier(POWERSYNC_CHECKPOINTS_TABLE)} AS target
|
|
115
118
|
USING (SELECT 1 AS id) AS source
|
|
116
119
|
ON target.id = source.id
|
|
117
120
|
WHEN MATCHED THEN
|
|
@@ -130,9 +133,12 @@ export async function isTableEnabledForCDC(options) {
|
|
|
130
133
|
SELECT 1 FROM cdc.change_tables ct
|
|
131
134
|
JOIN sys.tables AS tbl ON tbl.object_id = ct.source_object_id
|
|
132
135
|
JOIN sys.schemas AS sch ON sch.schema_id = tbl.schema_id
|
|
133
|
-
WHERE sch.name =
|
|
134
|
-
AND tbl.name =
|
|
135
|
-
|
|
136
|
+
WHERE sch.name = @schema
|
|
137
|
+
AND tbl.name = @tableName
|
|
138
|
+
`, [
|
|
139
|
+
{ name: 'schema', type: sql.VarChar(sql.MAX), value: schema },
|
|
140
|
+
{ name: 'tableName', type: sql.VarChar(sql.MAX), value: table },
|
|
141
|
+
]);
|
|
136
142
|
return checkResult.length > 0;
|
|
137
143
|
}
|
|
138
144
|
export async function enableCDCForTable(options) {
|
|
@@ -172,7 +178,7 @@ export async function isWithinRetentionThreshold(options) {
|
|
|
172
178
|
return true;
|
|
173
179
|
}
|
|
174
180
|
export async function getMinLSN(connectionManager, captureInstance) {
|
|
175
|
-
const { recordset: result } = await connectionManager.query(`SELECT sys.fn_cdc_get_min_lsn(
|
|
181
|
+
const { recordset: result } = await connectionManager.query(`SELECT sys.fn_cdc_get_min_lsn(@captureInstance) AS min_lsn`, [{ name: 'captureInstance', type: sql.VarChar(sql.MAX), value: captureInstance }]);
|
|
176
182
|
const rawMinLSN = result[0].min_lsn;
|
|
177
183
|
return LSN.fromBinary(rawMinLSN);
|
|
178
184
|
}
|
|
@@ -190,10 +196,13 @@ export async function getCaptureInstance(options) {
|
|
|
190
196
|
sys.tables tbl
|
|
191
197
|
INNER JOIN sys.schemas sch ON tbl.schema_id = sch.schema_id
|
|
192
198
|
INNER JOIN cdc.change_tables ct ON ct.source_object_id = tbl.object_id
|
|
193
|
-
WHERE sch.name =
|
|
194
|
-
AND tbl.name =
|
|
199
|
+
WHERE sch.name = @schema
|
|
200
|
+
AND tbl.name = @tableName
|
|
195
201
|
AND ct.end_lsn IS NULL;
|
|
196
|
-
|
|
202
|
+
`, [
|
|
203
|
+
{ name: 'schema', type: sql.VarChar(sql.MAX), value: schema },
|
|
204
|
+
{ name: 'tableName', type: sql.VarChar(sql.MAX), value: tableName },
|
|
205
|
+
]);
|
|
197
206
|
if (result.length === 0) {
|
|
198
207
|
return null;
|
|
199
208
|
}
|
|
@@ -225,7 +234,10 @@ export async function getLatestReplicatedLSN(connectionManager) {
|
|
|
225
234
|
* @param identifier
|
|
226
235
|
*/
|
|
227
236
|
export function escapeIdentifier(identifier) {
|
|
228
|
-
|
|
237
|
+
// 1. Replace existing closing brackets ] with ]] to escape them
|
|
238
|
+
// 2. Replace dots . with ].[ to handle qualified names
|
|
239
|
+
// 3. Wrap the whole result in [ ]
|
|
240
|
+
return `[${identifier.replace(/]/g, ']]').replace(/\./g, '].[')}]`;
|
|
229
241
|
}
|
|
230
242
|
export function toQualifiedTableName(schema, tableName) {
|
|
231
243
|
return `${escapeIdentifier(schema)}.${escapeIdentifier(tableName)}`;
|
|
@@ -292,7 +304,9 @@ export async function getDebugTableInfo(options) {
|
|
|
292
304
|
}
|
|
293
305
|
let selectError = null;
|
|
294
306
|
try {
|
|
295
|
-
await connectionManager.query(`SELECT TOP 1 * FROM
|
|
307
|
+
await connectionManager.query(`SELECT TOP 1 * FROM @tableName`, [
|
|
308
|
+
{ name: 'tableName', type: sql.VarChar(sql.MAX), value: toQualifiedTableName(schema, table.name) },
|
|
309
|
+
]);
|
|
296
310
|
}
|
|
297
311
|
catch (e) {
|
|
298
312
|
selectError = { level: 'fatal', message: e.message };
|
package/dist/utils/mssql.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mssql.js","sourceRoot":"","sources":["../../src/utils/mssql.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,OAAO,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AAE3D,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AAIvC,OAAO,EAAE,6BAA6B,EAAmD,MAAM,aAAa,CAAC;AAI7G,MAAM,CAAC,MAAM,2BAA2B,GAAG,wBAAwB,CAAC;AAEpE,MAAM,CAAC,MAAM,yBAAyB,GAAG,IAAI,GAAG,CAAC;IAC/C,CAAC,CAAC,EAAE,UAAU,CAAC;IACf,CAAC,CAAC,EAAE,gDAAgD,CAAC;IACrD,CAAC,CAAC,EAAE,kCAAkC,CAAC;IACvC,CAAC,CAAC,EAAE,iDAAiD,CAAC;CACvD,CAAC,CAAC;AAEH,4BAA4B;AAC5B,MAAM,CAAC,MAAM,yBAAyB,GAAG,MAAM,CAAC;AAEhD,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,iBAAyC;IACtF,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,sCAAsC;IACtC,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,GAAG,MAAM,iBAAiB,CAAC,KAAK,CAAC;;;;;KAKhE,CAAC,CAAC;IAEL,oDAAoD;IACpD,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC;QAC7D,MAAM,CAAC,IAAI,CACT,2BAA2B,aAAa,CAAC,CAAC,CAAC,EAAE,OAAO,6EAA6E,KAAK,CAAC,IAAI,CACzI,yBAAyB,CAAC,MAAM,EAAE,CACnC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAChB,CAAC;QACF,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,qDAAqD;IACrD,IAAI,aAAa,CAAC,CAAC,CAAC,EAAE,MAAM,IAAI,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC,EAAE,MAAM,IAAI,CAAC,EAAE,CAAC;QACnE,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,yBAAyB,CAAC,EAAE,CAAC;YAC5E,MAAM,CAAC,IAAI,CACT,2BAA2B,aAAa,CAAC,CAAC,CAAC,EAAE,OAAO,mEAAmE,CACxH,CAAC;QACJ,CAAC;IACH,CAAC;IAED,wBAAwB;IACxB,MAAM,EAAE,SAAS,EAAE,gBAAgB,EAAE,GAAG,MAAM,iBAAiB,CAAC,KAAK,CAAC;;KAEnE,CAAC,CAAC;IACL,MAAM,UAAU,GAAG,gBAAgB,CAAC,CAAC,CAAC,EAAE,cAAc,CAAC;IAEvD,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC;IACpE,CAAC;IAED,gCAAgC;IAChC,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,GAAG,MAAM,iBAAiB,CAAC,KAAK,CAAC;;;;;;;;;KAShE,CAAC,CAAC;IAEL,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC;QACtC,MAAM,CAAC,IAAI,CAAC,4FAA4F,CAAC,CAAC;IAC5G,CAAC;IAED,uEAAuE;IACvE,MAAM,qBAAqB,GAAG,MAAM,+BAA+B,CAAC,iBAAiB,CAAC,CAAC;IACvF,MAAM,CAAC,IAAI,CAAC,GAAG,qBAAqB,CAAC,CAAC;IAEtC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,+BAA+B,CAAC,iBAAyC;IAC7F,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,CAAC;QACH,sDAAsD;QACtD,MAAM,EAAE,SAAS,EAAE,iBAAiB,EAAE,GAAG,MAAM,iBAAiB,CAAC,KAAK,CAAC;oEACP,iBAAiB,CAAC,MAAM,uBAAuB,2BAA2B;GAC3I,CAAC,CAAC;QACD,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjC,gDAAgD;YAChD,MAAM,SAAS,GAAG,MAAM,oBAAoB,CAAC;gBAC3C,iBAAiB;gBACjB,KAAK,EAAE,2BAA2B;gBAClC,MAAM,EAAE,iBAAiB,CAAC,MAAM;aACjC,CAAC,CAAC;YACH,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,0BAA0B;gBAC1B,MAAM,iBAAiB,CAAC;oBACtB,iBAAiB;oBACjB,KAAK,EAAE,2BAA2B;iBACnC,CAAC,CAAC;YACL,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,IAAI,CAAC,iBAAiB,2BAA2B,mCAAmC,KAAK,EAAE,CAAC,CAAC;IACtG,CAAC;IAED,0BAA0B;IAC1B,IAAI,CAAC;QACH,MAAM,iBAAiB,CAAC,KAAK,CAAC;iBACjB,iBAAiB,CAAC,MAAM,IAAI,2BAA2B;;;IAGpE,CAAC,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,IAAI,CAAC,oBAAoB,2BAA2B,WAAW,KAAK,EAAE,CAAC,CAAC;IACjF,CAAC;IAED,IAAI,CAAC;QACH,iDAAiD;QACjD,MAAM,iBAAiB,CAAC;YACtB,iBAAiB;YACjB,KAAK,EAAE,2BAA2B;SACnC,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,IAAI,CAAC,2BAA2B,2BAA2B,WAAW,KAAK,EAAE,CAAC,CAAC;IACxF,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,iBAAyC;IAC9E,MAAM,iBAAiB,CAAC,KAAK,CAAC;YACpB,iBAAiB,CAAC,MAAM,IAAI,2BAA2B;;;;;;;GAOhE,CAAC,CAAC;AACL,CAAC;AAOD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,OAAoC;IAC7E,MAAM,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IAErD,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,MAAM,iBAAiB,CAAC,KAAK,CAC9D;;;;0BAIsB,MAAM;0BACN,KAAK;OACxB,CACJ,CAAC;IACF,OAAO,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;AAChC,CAAC;AAOD,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,OAAiC;IACvE,MAAM,EAAE,iBAAiB,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;IAE7C,MAAM,iBAAiB,CAAC,OAAO,CAAC,yBAAyB,EAAE;QACzD,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,iBAAiB,CAAC,MAAM,EAAE;QAC1D,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,EAAE;QACrC,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE;QACpC,EAAE,IAAI,EAAE,sBAAsB,EAAE,KAAK,EAAE,CAAC,EAAE;KAC3C,CAAC,CAAC;AACL,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAe,EAAE,cAAsB;IACtE,MAAM,cAAc,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;IACvC,MAAM,qBAAqB,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC;IAErD,OAAO,GAAG,CAAC,cAAe,EAAE,qBAAsB,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AACvE,CAAC;AAQD;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAAC,OAA0C;IACzF,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,iBAAiB,EAAE,GAAG,OAAO,CAAC;IAC7D,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,iBAAiB,EAAE,KAAK,CAAC,eAAe,CAAC,CAAC;QACzE,IAAI,MAAM,GAAG,aAAa,EAAE,CAAC;YAC3B,MAAM,CAAC,IAAI,CACT,uBAAuB,aAAa,oCAAoC,MAAM,eAAe,KAAK,CAAC,WAAW,CAAC,aAAa,8EAA8E,CAC3M,CAAC;YACF,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,iBAAyC,EAAE,eAAuB;IAChG,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM,iBAAiB,CAAC,KAAK,CACzD,kCAAkC,eAAe,eAAe,CACjE,CAAC;IACF,MAAM,SAAS,GAAW,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;IAC5C,OAAO,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,GAAQ,EAAE,iBAAyC;IACpF,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM,iBAAiB,CAAC,KAAK,CACzD,0DAA0D,EAC1D,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,SAAS,EAAE,KAAK,EAAE,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC,CAC9D,CAAC;IACF,OAAO,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;AACnD,CAAC;AAQD,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,OAAkC;IACzE,MAAM,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IACzD,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM,iBAAiB,CAAC,KAAK,CACzD;;;;;;;;0BAQsB,MAAM;0BACN,SAAS;;OAE5B,CACJ,CAAC;IAEF,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO;QACL,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,gBAAgB;QAChC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU;KAC7B,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,iBAAyC;IAC1E,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM,iBAAiB,CAAC,KAAK,CACzD,qEAAqE,CACtE,CAAC;IACF,OAAO,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;AAC/C,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,iBAAyC;IACpF,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM,iBAAiB,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC;IAC3G,2CAA2C;IAC3C,MAAM,MAAM,GAAW,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;IACzC,OAAO,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;AAChC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,UAAkB;IACjD,OAAO,IAAI,UAAU,GAAG,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,MAAc,EAAE,SAAiB;IACpE,OAAO,GAAG,gBAAgB,CAAC,MAAM,CAAC,IAAI,gBAAgB,CAAC,SAAS,CAAC,EAAE,CAAC;AACtE,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,GAAQ;IACxC,IAAI,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAClE,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,iBAAiB,GAAG,IAAI,CAAC;IAC7B,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;QACvC,MAAM,QAAQ,GAAG,KAAY,CAAC;QAC9B,iBAAiB;YACf,OAAO,QAAQ,CAAC,KAAK,KAAK,QAAQ;gBAClC,OAAO,QAAQ,CAAC,IAAI,KAAK,QAAQ;gBACjC,CAAC,OAAO,QAAQ,CAAC,MAAM,KAAK,QAAQ,IAAI,OAAO,QAAQ,CAAC,MAAM,KAAK,WAAW,CAAC;gBAC/E,CAAC,OAAO,QAAQ,CAAC,IAAI,KAAK,UAAU,IAAI,OAAO,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC;gBAC1E,OAAO,QAAQ,CAAC,QAAQ,KAAK,SAAS;gBACtC,OAAO,QAAQ,CAAC,aAAa,KAAK,SAAS;gBAC3C,OAAO,QAAQ,CAAC,QAAQ,KAAK,SAAS;gBACtC,OAAO,QAAQ,CAAC,QAAQ,KAAK,SAAS,CAAC;IAC3C,CAAC;IAED,OAAO,iBAAiB,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,OAAoB,EAAE,UAA4B;IAC9E,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;QAC/B,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QACrD,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AASD,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,OAAiC;IACvE,MAAM,EAAE,iBAAiB,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;IACtE,MAAM,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC;IAEhC,IAAI,eAAe,GAA4C,IAAI,CAAC;IACpE,IAAI,cAAc,GAA0C,IAAI,CAAC;IACjE,IAAI,CAAC;QACH,eAAe,GAAG,MAAM,6BAA6B,CAAC;YACpD,iBAAiB,EAAE,iBAAiB;YACpC,MAAM;YACN,SAAS,EAAE,KAAK,CAAC,IAAI;SACtB,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,EAAE,EAAE,CAAC;QACZ,cAAc,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC,OAAO,EAAE,CAAC;IAC3D,CAAC;IAED,MAAM,SAAS,GAAG,eAAe,EAAE,OAAO,IAAI,EAAE,CAAC;IACjD,MAAM,WAAW,GAAoC;QACnD,aAAa,EAAE,iBAAiB,CAAC,aAAa;QAC9C,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,KAAK,CAAC,IAAI;KACjB,CAAC;IACF,MAAM,QAAQ,GAAG,SAAS,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;IACvD,MAAM,cAAc,GAAG,SAAS,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC;IAEnE,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,IAAI,cAAc,IAAI,IAAI,EAAE,CAAC;QACrD,IAAI,OAAO,GAAG,+BAA+B,oBAAoB,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,uBAAuB,eAAe,EAAE,QAAQ,GAAG,CAAC;QACzI,IAAI,eAAe,EAAE,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC5C,OAAO,IAAI,wCAAwC,CAAC;QACtD,CAAC;QACD,cAAc,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;IAC/C,CAAC;IAED,IAAI,WAAW,GAA0C,IAAI,CAAC;IAC9D,IAAI,CAAC;QACH,MAAM,iBAAiB,CAAC,KAAK,CAAC,uBAAuB,oBAAoB,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACnG,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,WAAW,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;IACvD,CAAC;IAED,wCAAwC;IACxC,IAAI,QAAQ,GAA0C,IAAI,CAAC;IAC3D,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,MAAM,oBAAoB,CAAC;YAC3C,iBAAiB,EAAE,iBAAiB;YACpC,KAAK,EAAE,KAAK,CAAC,IAAI;YACjB,MAAM,EAAE,MAAM;SACf,CAAC,CAAC;QACH,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,QAAQ,GAAG;gBACT,KAAK,EAAE,OAAO;gBACd,OAAO,EAAE,gCAAgC,oBAAoB,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,gEAAgE,MAAM,sBAAsB,KAAK,CAAC,IAAI,iDAAiD;aACzO,CAAC;QACJ,CAAC;IACH,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,QAAQ,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,+BAA+B,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;IACvF,CAAC;IAED,oCAAoC;IAEpC,OAAO;QACL,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,OAAO,EAAE,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS;QACxE,cAAc,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QAC5C,YAAY,EAAE,QAAQ;QACtB,iBAAiB,EAAE,cAAc;QACjC,MAAM,EAAE,CAAC,cAAc,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,IAAI,IAAI,CAAqC;KACrH,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"mssql.js","sourceRoot":"","sources":["../../src/utils/mssql.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,OAAO,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AAE3D,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AAIvC,OAAO,EAAE,6BAA6B,EAAmD,MAAM,aAAa,CAAC;AAI7G,MAAM,CAAC,MAAM,2BAA2B,GAAG,wBAAwB,CAAC;AAEpE,MAAM,CAAC,MAAM,yBAAyB,GAAG,IAAI,GAAG,CAAC;IAC/C,CAAC,CAAC,EAAE,UAAU,CAAC;IACf,CAAC,CAAC,EAAE,gDAAgD,CAAC;IACrD,CAAC,CAAC,EAAE,kCAAkC,CAAC;IACvC,CAAC,CAAC,EAAE,iDAAiD,CAAC;CACvD,CAAC,CAAC;AAEH,4BAA4B;AAC5B,MAAM,CAAC,MAAM,yBAAyB,GAAG,MAAM,CAAC;AAEhD,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,iBAAyC;IACtF,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,sCAAsC;IACtC,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,GAAG,MAAM,iBAAiB,CAAC,KAAK,CAAC;;;;;KAKhE,CAAC,CAAC;IAEL,oDAAoD;IACpD,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC;QAC7D,MAAM,CAAC,IAAI,CACT,2BAA2B,aAAa,CAAC,CAAC,CAAC,EAAE,OAAO,6EAA6E,KAAK,CAAC,IAAI,CACzI,yBAAyB,CAAC,MAAM,EAAE,CACnC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAChB,CAAC;QACF,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,qDAAqD;IACrD,IAAI,aAAa,CAAC,CAAC,CAAC,EAAE,MAAM,IAAI,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC,EAAE,MAAM,IAAI,CAAC,EAAE,CAAC;QACnE,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,yBAAyB,CAAC,EAAE,CAAC;YAC5E,MAAM,CAAC,IAAI,CACT,2BAA2B,aAAa,CAAC,CAAC,CAAC,EAAE,OAAO,mEAAmE,CACxH,CAAC;QACJ,CAAC;IACH,CAAC;IAED,wBAAwB;IACxB,MAAM,EAAE,SAAS,EAAE,gBAAgB,EAAE,GAAG,MAAM,iBAAiB,CAAC,KAAK,CAAC;;KAEnE,CAAC,CAAC;IACL,MAAM,UAAU,GAAG,gBAAgB,CAAC,CAAC,CAAC,EAAE,cAAc,CAAC;IAEvD,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC;IACpE,CAAC;IAED,gCAAgC;IAChC,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,GAAG,MAAM,iBAAiB,CAAC,KAAK,CAAC;;;;;;;;;KAShE,CAAC,CAAC;IAEL,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC;QACtC,MAAM,CAAC,IAAI,CAAC,4FAA4F,CAAC,CAAC;IAC5G,CAAC;IAED,uEAAuE;IACvE,MAAM,qBAAqB,GAAG,MAAM,+BAA+B,CAAC,iBAAiB,CAAC,CAAC;IACvF,MAAM,CAAC,IAAI,CAAC,GAAG,qBAAqB,CAAC,CAAC;IAEtC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,+BAA+B,CAAC,iBAAyC;IAC7F,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,CAAC;QACH,sDAAsD;QACtD,MAAM,EAAE,SAAS,EAAE,iBAAiB,EAAE,GAAG,MAAM,iBAAiB,CAAC,KAAK,CAAC;;GAExE,EAAE;YACD,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,iBAAiB,CAAC,MAAM,EAAE;YAC/E,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,2BAA2B,EAAE;SACtF,CAAC,CAAC;QACD,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjC,gDAAgD;YAChD,MAAM,SAAS,GAAG,MAAM,oBAAoB,CAAC;gBAC3C,iBAAiB;gBACjB,KAAK,EAAE,2BAA2B;gBAClC,MAAM,EAAE,iBAAiB,CAAC,MAAM;aACjC,CAAC,CAAC;YACH,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,0BAA0B;gBAC1B,MAAM,iBAAiB,CAAC;oBACtB,iBAAiB;oBACjB,KAAK,EAAE,2BAA2B;iBACnC,CAAC,CAAC;YACL,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,IAAI,CAAC,iBAAiB,2BAA2B,mCAAmC,KAAK,EAAE,CAAC,CAAC;IACtG,CAAC;IAED,0BAA0B;IAC1B,IAAI,CAAC;QACH,MAAM,iBAAiB,CAAC,KAAK,CAAC;iBACjB,gBAAgB,CAAC,iBAAiB,CAAC,MAAM,CAAC,IAAI,gBAAgB,CAAC,2BAA2B,CAAC;;;IAGxG,CAAC,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,IAAI,CAAC,oBAAoB,2BAA2B,WAAW,KAAK,EAAE,CAAC,CAAC;IACjF,CAAC;IAED,IAAI,CAAC;QACH,iDAAiD;QACjD,MAAM,iBAAiB,CAAC;YACtB,iBAAiB;YACjB,KAAK,EAAE,2BAA2B;SACnC,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,IAAI,CAAC,2BAA2B,2BAA2B,WAAW,KAAK,EAAE,CAAC,CAAC;IACxF,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,iBAAyC;IAC9E,MAAM,iBAAiB,CAAC,KAAK,CAAC;YACpB,gBAAgB,CAAC,iBAAiB,CAAC,MAAM,CAAC,IAAI,gBAAgB,CAAC,2BAA2B,CAAC;;;;;;;GAOpG,CAAC,CAAC;AACL,CAAC;AAOD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,OAAoC;IAC7E,MAAM,EAAE,iBAAiB,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IAErD,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,MAAM,iBAAiB,CAAC,KAAK,CAC9D;;;;;;OAMG,EAAE;QACD,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE;QAC7D,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE;KAChE,CAAC,CAAC;IACP,OAAO,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;AAChC,CAAC;AAOD,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,OAAiC;IACvE,MAAM,EAAE,iBAAiB,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;IAE7C,MAAM,iBAAiB,CAAC,OAAO,CAAC,yBAAyB,EAAE;QACzD,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,iBAAiB,CAAC,MAAM,EAAE;QAC1D,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,EAAE;QACrC,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE;QACpC,EAAE,IAAI,EAAE,sBAAsB,EAAE,KAAK,EAAE,CAAC,EAAE;KAC3C,CAAC,CAAC;AACL,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAe,EAAE,cAAsB;IACtE,MAAM,cAAc,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;IACvC,MAAM,qBAAqB,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC;IAErD,OAAO,GAAG,CAAC,cAAe,EAAE,qBAAsB,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AACvE,CAAC;AAQD;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAAC,OAA0C;IACzF,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,iBAAiB,EAAE,GAAG,OAAO,CAAC;IAC7D,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,iBAAiB,EAAE,KAAK,CAAC,eAAe,CAAC,CAAC;QACzE,IAAI,MAAM,GAAG,aAAa,EAAE,CAAC;YAC3B,MAAM,CAAC,IAAI,CACT,uBAAuB,aAAa,oCAAoC,MAAM,eAAe,KAAK,CAAC,WAAW,CAAC,aAAa,8EAA8E,CAC3M,CAAC;YACF,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,iBAAyC,EAAE,eAAuB;IAChG,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM,iBAAiB,CAAC,KAAK,CACzD,4DAA4D,EAC5D,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC,CAClF,CAAC;IACF,MAAM,SAAS,GAAW,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;IAC5C,OAAO,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,GAAQ,EAAE,iBAAyC;IACpF,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM,iBAAiB,CAAC,KAAK,CACzD,0DAA0D,EAC1D,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,SAAS,EAAE,KAAK,EAAE,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC,CAC9D,CAAC;IACF,OAAO,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;AACnD,CAAC;AAQD,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,OAAkC;IACzE,MAAM,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IACzD,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM,iBAAiB,CAAC,KAAK,CACzD;;;;;;;;;;;OAWG,EAAE;QACD,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE;QAC7D,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE;KACpE,CAAC,CAAC;IAEP,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO;QACL,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,gBAAgB;QAChC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU;KAC7B,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,iBAAyC;IAC1E,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM,iBAAiB,CAAC,KAAK,CACzD,qEAAqE,CACtE,CAAC;IACF,OAAO,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;AAC/C,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,iBAAyC;IACpF,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM,iBAAiB,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC;IAC3G,2CAA2C;IAC3C,MAAM,MAAM,GAAW,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;IACzC,OAAO,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;AAChC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,UAAkB;IACjD,gEAAgE;IAChE,uDAAuD;IACvD,kCAAkC;IAClC,OAAO,IAAI,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC;AACrE,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,MAAc,EAAE,SAAiB;IACpE,OAAO,GAAG,gBAAgB,CAAC,MAAM,CAAC,IAAI,gBAAgB,CAAC,SAAS,CAAC,EAAE,CAAC;AACtE,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,GAAQ;IACxC,IAAI,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAClE,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,iBAAiB,GAAG,IAAI,CAAC;IAC7B,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;QACvC,MAAM,QAAQ,GAAG,KAAY,CAAC;QAC9B,iBAAiB;YACf,OAAO,QAAQ,CAAC,KAAK,KAAK,QAAQ;gBAClC,OAAO,QAAQ,CAAC,IAAI,KAAK,QAAQ;gBACjC,CAAC,OAAO,QAAQ,CAAC,MAAM,KAAK,QAAQ,IAAI,OAAO,QAAQ,CAAC,MAAM,KAAK,WAAW,CAAC;gBAC/E,CAAC,OAAO,QAAQ,CAAC,IAAI,KAAK,UAAU,IAAI,OAAO,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC;gBAC1E,OAAO,QAAQ,CAAC,QAAQ,KAAK,SAAS;gBACtC,OAAO,QAAQ,CAAC,aAAa,KAAK,SAAS;gBAC3C,OAAO,QAAQ,CAAC,QAAQ,KAAK,SAAS;gBACtC,OAAO,QAAQ,CAAC,QAAQ,KAAK,SAAS,CAAC;IAC3C,CAAC;IAED,OAAO,iBAAiB,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,OAAoB,EAAE,UAA4B;IAC9E,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;QAC/B,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QACrD,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AASD,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,OAAiC;IACvE,MAAM,EAAE,iBAAiB,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;IACtE,MAAM,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC;IAEhC,IAAI,eAAe,GAA4C,IAAI,CAAC;IACpE,IAAI,cAAc,GAA0C,IAAI,CAAC;IACjE,IAAI,CAAC;QACH,eAAe,GAAG,MAAM,6BAA6B,CAAC;YACpD,iBAAiB,EAAE,iBAAiB;YACpC,MAAM;YACN,SAAS,EAAE,KAAK,CAAC,IAAI;SACtB,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,EAAE,EAAE,CAAC;QACZ,cAAc,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,CAAC,OAAO,EAAE,CAAC;IAC3D,CAAC;IAED,MAAM,SAAS,GAAG,eAAe,EAAE,OAAO,IAAI,EAAE,CAAC;IACjD,MAAM,WAAW,GAAoC;QACnD,aAAa,EAAE,iBAAiB,CAAC,aAAa;QAC9C,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,KAAK,CAAC,IAAI;KACjB,CAAC;IACF,MAAM,QAAQ,GAAG,SAAS,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;IACvD,MAAM,cAAc,GAAG,SAAS,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC;IAEnE,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,IAAI,cAAc,IAAI,IAAI,EAAE,CAAC;QACrD,IAAI,OAAO,GAAG,+BAA+B,oBAAoB,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,uBAAuB,eAAe,EAAE,QAAQ,GAAG,CAAC;QACzI,IAAI,eAAe,EAAE,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC5C,OAAO,IAAI,wCAAwC,CAAC;QACtD,CAAC;QACD,cAAc,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;IAC/C,CAAC;IAED,IAAI,WAAW,GAA0C,IAAI,CAAC;IAC9D,IAAI,CAAC;QACH,MAAM,iBAAiB,CAAC,KAAK,CAAC,gCAAgC,EAAE;YAC9D,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,oBAAoB,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE;SACnG,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,WAAW,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;IACvD,CAAC;IAED,wCAAwC;IACxC,IAAI,QAAQ,GAA0C,IAAI,CAAC;IAC3D,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,MAAM,oBAAoB,CAAC;YAC3C,iBAAiB,EAAE,iBAAiB;YACpC,KAAK,EAAE,KAAK,CAAC,IAAI;YACjB,MAAM,EAAE,MAAM;SACf,CAAC,CAAC;QACH,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,QAAQ,GAAG;gBACT,KAAK,EAAE,OAAO;gBACd,OAAO,EAAE,gCAAgC,oBAAoB,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,gEAAgE,MAAM,sBAAsB,KAAK,CAAC,IAAI,iDAAiD;aACzO,CAAC;QACJ,CAAC;IACH,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,QAAQ,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,+BAA+B,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;IACvF,CAAC;IAED,oCAAoC;IAEpC,OAAO;QACL,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,OAAO,EAAE,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS;QACxE,cAAc,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QAC5C,YAAY,EAAE,QAAQ;QACtB,iBAAiB,EAAE,cAAc;QACjC,MAAM,EAAE,CAAC,cAAc,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,IAAI,IAAI,CAAqC;KACrH,CAAC;AACJ,CAAC"}
|
package/dist/utils/schema.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import sql from 'mssql';
|
|
1
2
|
async function getColumns(options) {
|
|
2
3
|
const { connectionManager, schema, tableName } = options;
|
|
3
4
|
const { recordset: columnResults } = await connectionManager.query(`
|
|
@@ -10,10 +11,13 @@ async function getColumns(options) {
|
|
|
10
11
|
JOIN sys.tables AS tbl ON tbl.object_id = col.object_id
|
|
11
12
|
JOIN sys.schemas AS sch ON sch.schema_id = tbl.schema_id
|
|
12
13
|
JOIN sys.types AS typ ON typ.user_type_id = col.user_type_id
|
|
13
|
-
WHERE sch.name =
|
|
14
|
-
AND tbl.name =
|
|
14
|
+
WHERE sch.name = @schema
|
|
15
|
+
AND tbl.name = @tableName
|
|
15
16
|
ORDER BY col.column_id;
|
|
16
|
-
|
|
17
|
+
`, [
|
|
18
|
+
{ name: 'schema', type: sql.VarChar(sql.MAX), value: schema },
|
|
19
|
+
{ name: 'tableName', type: sql.VarChar(sql.MAX), value: tableName },
|
|
20
|
+
]);
|
|
17
21
|
return columnResults.map((row) => {
|
|
18
22
|
return {
|
|
19
23
|
name: row.name,
|
|
@@ -37,10 +41,13 @@ export async function getReplicationIdentityColumns(options) {
|
|
|
37
41
|
JOIN sys.index_columns AS idx_col ON idx_col.object_id = idx.object_id AND idx_col.index_id = idx.index_id
|
|
38
42
|
JOIN sys.columns AS col ON col.object_id = idx_col.object_id AND col.column_id = idx_col.column_id
|
|
39
43
|
JOIN sys.types AS typ ON typ.user_type_id = col.user_type_id
|
|
40
|
-
WHERE sch.name =
|
|
41
|
-
AND tbl.name =
|
|
44
|
+
WHERE sch.name = @schema
|
|
45
|
+
AND tbl.name = @tableName
|
|
42
46
|
ORDER BY idx_col.key_ordinal;
|
|
43
|
-
|
|
47
|
+
`, [
|
|
48
|
+
{ name: 'schema', type: sql.VarChar(sql.MAX), value: schema },
|
|
49
|
+
{ name: 'tableName', type: sql.VarChar(sql.MAX), value: tableName },
|
|
50
|
+
]);
|
|
44
51
|
if (primaryKeyColumns.length > 0) {
|
|
45
52
|
return {
|
|
46
53
|
columns: primaryKeyColumns.map((row) => ({
|
|
@@ -65,10 +72,13 @@ export async function getReplicationIdentityColumns(options) {
|
|
|
65
72
|
JOIN sys.index_columns AS idx_col ON idx_col.object_id = idx.object_id AND idx_col.index_id = idx.index_id
|
|
66
73
|
JOIN sys.columns AS col ON col.object_id = idx_col.object_id AND col.column_id = idx_col.column_id
|
|
67
74
|
JOIN sys.types AS typ ON typ.user_type_id = col.user_type_id
|
|
68
|
-
WHERE sch.name =
|
|
69
|
-
AND tbl.name =
|
|
75
|
+
WHERE sch.name = @schema
|
|
76
|
+
AND tbl.name = @tableName
|
|
70
77
|
ORDER BY idx_col.key_ordinal;
|
|
71
|
-
|
|
78
|
+
`, [
|
|
79
|
+
{ name: 'schema', type: sql.VarChar(sql.MAX), value: schema },
|
|
80
|
+
{ name: 'tableName', type: sql.VarChar(sql.MAX), value: tableName },
|
|
81
|
+
]);
|
|
72
82
|
if (uniqueKeyColumns.length > 0) {
|
|
73
83
|
return {
|
|
74
84
|
columns: uniqueKeyColumns.map((row) => ({
|
|
@@ -95,9 +105,12 @@ export async function getTablesFromPattern(connectionManager, tablePattern) {
|
|
|
95
105
|
tbl.object_id AS object_id
|
|
96
106
|
FROM sys.tables tbl
|
|
97
107
|
JOIN sys.schemas sch ON tbl.schema_id = sch.schema_id
|
|
98
|
-
WHERE sch.name =
|
|
99
|
-
AND tbl.name LIKE
|
|
100
|
-
|
|
108
|
+
WHERE sch.name = @schema
|
|
109
|
+
AND tbl.name LIKE @tablePattern
|
|
110
|
+
`, [
|
|
111
|
+
{ name: 'schema', type: sql.VarChar(sql.MAX), value: tablePattern.schema },
|
|
112
|
+
{ name: 'tablePattern', type: sql.VarChar(sql.MAX), value: tablePattern.tablePattern },
|
|
113
|
+
]);
|
|
101
114
|
return tableResults
|
|
102
115
|
.map((row) => {
|
|
103
116
|
return {
|
|
@@ -116,9 +129,12 @@ export async function getTablesFromPattern(connectionManager, tablePattern) {
|
|
|
116
129
|
tbl.object_id AS object_id
|
|
117
130
|
FROM sys.tables tbl
|
|
118
131
|
JOIN sys.schemas sch ON tbl.schema_id = sch.schema_id
|
|
119
|
-
|
|
120
|
-
AND tbl.name =
|
|
121
|
-
|
|
132
|
+
WHERE sch.name = @schema
|
|
133
|
+
AND tbl.name = @tablePattern
|
|
134
|
+
`, [
|
|
135
|
+
{ name: 'schema', type: sql.VarChar(sql.MAX), value: tablePattern.schema },
|
|
136
|
+
{ name: 'tablePattern', type: sql.VarChar(sql.MAX), value: tablePattern.tablePattern },
|
|
137
|
+
]);
|
|
122
138
|
return tableResults.map((row) => {
|
|
123
139
|
return {
|
|
124
140
|
objectId: row.object_id,
|
package/dist/utils/schema.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/utils/schema.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/utils/schema.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@powersync/service-module-mssql",
|
|
3
3
|
"repository": "https://github.com/powersync-ja/powersync-service",
|
|
4
4
|
"types": "dist/index.d.ts",
|
|
5
|
-
"version": "0.0.0-dev-
|
|
5
|
+
"version": "0.0.0-dev-20251208145829",
|
|
6
6
|
"license": "FSL-1.1-ALv2",
|
|
7
7
|
"main": "dist/index.js",
|
|
8
8
|
"type": "module",
|
|
@@ -27,20 +27,20 @@
|
|
|
27
27
|
"ts-codec": "^1.3.0",
|
|
28
28
|
"uri-js": "^4.4.1",
|
|
29
29
|
"uuid": "^11.1.0",
|
|
30
|
-
"@powersync/lib-services-framework": "0.0.0-dev-
|
|
31
|
-
"@powersync/service-core": "0.0.0-dev-
|
|
32
|
-
"@powersync/service-errors": "0.
|
|
33
|
-
"@powersync/service-sync-rules": "0.0.0-dev-
|
|
34
|
-
"@powersync/service-types": "0.
|
|
30
|
+
"@powersync/lib-services-framework": "0.0.0-dev-20251208145829",
|
|
31
|
+
"@powersync/service-core": "0.0.0-dev-20251208145829",
|
|
32
|
+
"@powersync/service-errors": "0.3.6",
|
|
33
|
+
"@powersync/service-sync-rules": "0.0.0-dev-20251208145829",
|
|
34
|
+
"@powersync/service-types": "0.13.3",
|
|
35
35
|
"@powersync/service-jsonbig": "0.17.12"
|
|
36
36
|
},
|
|
37
37
|
"devDependencies": {
|
|
38
38
|
"@types/mssql": "^9.1.8",
|
|
39
39
|
"@types/semver": "^7.7.1",
|
|
40
40
|
"@types/uuid": "^10.0.0",
|
|
41
|
-
"@powersync/service-core-tests": "0.0.0-dev-
|
|
42
|
-
"@powersync/service-module-mongodb-storage": "0.0.0-dev-
|
|
43
|
-
"@powersync/service-module-postgres-storage": "0.0.0-dev-
|
|
41
|
+
"@powersync/service-core-tests": "0.0.0-dev-20251208145829",
|
|
42
|
+
"@powersync/service-module-mongodb-storage": "0.0.0-dev-20251208145829",
|
|
43
|
+
"@powersync/service-module-postgres-storage": "0.0.0-dev-20251208145829"
|
|
44
44
|
},
|
|
45
45
|
"scripts": {
|
|
46
46
|
"build": "tsc -b",
|
|
@@ -6,7 +6,6 @@ import {
|
|
|
6
6
|
ReplicationLagOptions
|
|
7
7
|
} from '@powersync/service-core';
|
|
8
8
|
import * as service_types from '@powersync/service-types';
|
|
9
|
-
import * as sync_rules from '@powersync/service-sync-rules';
|
|
10
9
|
import { SqlSyncRules, TablePattern } from '@powersync/service-sync-rules';
|
|
11
10
|
import * as types from '../types/types.js';
|
|
12
11
|
import { ExecuteSqlResponse } from '@powersync/service-types/dist/routes.js';
|
|
@@ -20,6 +19,7 @@ import {
|
|
|
20
19
|
} from '../utils/mssql.js';
|
|
21
20
|
import { getTablesFromPattern, ResolvedTable } from '../utils/schema.js';
|
|
22
21
|
import { toExpressionTypeFromMSSQLType } from '../common/mssqls-to-sqlite.js';
|
|
22
|
+
import sql from 'mssql';
|
|
23
23
|
|
|
24
24
|
export class MSSQLRouteAPIAdapter implements api.RouteAPI {
|
|
25
25
|
protected connectionManager: MSSQLConnectionManager;
|
|
@@ -39,52 +39,14 @@ export class MSSQLRouteAPIAdapter implements api.RouteAPI {
|
|
|
39
39
|
}
|
|
40
40
|
|
|
41
41
|
async executeQuery(query: string, params: any[]): Promise<ExecuteSqlResponse> {
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
});
|
|
51
|
-
}
|
|
52
|
-
try {
|
|
53
|
-
const { recordset: result } = await this.connectionManager.query(query, params);
|
|
54
|
-
return service_types.internal_routes.ExecuteSqlResponse.encode({
|
|
55
|
-
success: true,
|
|
56
|
-
results: {
|
|
57
|
-
columns: Object.values(result.columns).map((column) => column.name),
|
|
58
|
-
rows: result.map((row) => {
|
|
59
|
-
return Object.values(row).map((value: any) => {
|
|
60
|
-
const sqlValue = sync_rules.applyValueContext(
|
|
61
|
-
sync_rules.toSyncRulesValue(row),
|
|
62
|
-
sync_rules.CompatibilityContext.FULL_BACKWARDS_COMPATIBILITY
|
|
63
|
-
);
|
|
64
|
-
|
|
65
|
-
if (typeof sqlValue == 'bigint') {
|
|
66
|
-
return Number(row);
|
|
67
|
-
} else if (value instanceof Date) {
|
|
68
|
-
return value.toISOString();
|
|
69
|
-
} else if (sync_rules.isJsonValue(sqlValue)) {
|
|
70
|
-
return sqlValue;
|
|
71
|
-
} else {
|
|
72
|
-
return null;
|
|
73
|
-
}
|
|
74
|
-
});
|
|
75
|
-
})
|
|
76
|
-
}
|
|
77
|
-
});
|
|
78
|
-
} catch (e) {
|
|
79
|
-
return service_types.internal_routes.ExecuteSqlResponse.encode({
|
|
80
|
-
results: {
|
|
81
|
-
columns: [],
|
|
82
|
-
rows: []
|
|
83
|
-
},
|
|
84
|
-
success: false,
|
|
85
|
-
error: e.message
|
|
86
|
-
});
|
|
87
|
-
}
|
|
42
|
+
return service_types.internal_routes.ExecuteSqlResponse.encode({
|
|
43
|
+
results: {
|
|
44
|
+
columns: [],
|
|
45
|
+
rows: []
|
|
46
|
+
},
|
|
47
|
+
success: false,
|
|
48
|
+
error: 'SQL querying is not supported for SQL Server'
|
|
49
|
+
});
|
|
88
50
|
}
|
|
89
51
|
|
|
90
52
|
async getConnectionSchema(): Promise<service_types.DatabaseSchema[]> {
|
|
@@ -118,13 +80,16 @@ export class MSSQLRouteAPIAdapter implements api.RouteAPI {
|
|
|
118
80
|
JOIN sys.schemas AS sch ON sch.schema_id = tbl.schema_id
|
|
119
81
|
JOIN sys.columns AS col ON col.object_id = tbl.object_id
|
|
120
82
|
JOIN sys.types AS typ ON typ.user_type_id = col.user_type_id
|
|
121
|
-
WHERE sch.name =
|
|
83
|
+
WHERE sch.name = @schema
|
|
122
84
|
AND sch.name NOT IN ('sys', 'INFORMATION_SCHEMA', 'cdc')
|
|
123
|
-
AND tbl.name NOT IN ('systranschemas',
|
|
85
|
+
AND tbl.name NOT IN ('systranschemas', @checkpointsTable)
|
|
124
86
|
AND tbl.type = 'U'
|
|
125
87
|
AND col.is_computed = 0
|
|
126
88
|
ORDER BY sch.name, tbl.name, col.column_id
|
|
127
|
-
|
|
89
|
+
`, [
|
|
90
|
+
{ name: 'schema', type: sql.VarChar(sql.MAX), value: this.connectionManager.schema },
|
|
91
|
+
{ name: 'checkpointsTable', type: sql.VarChar(sql.MAX), value: POWERSYNC_CHECKPOINTS_TABLE },
|
|
92
|
+
]);
|
|
128
93
|
|
|
129
94
|
/**
|
|
130
95
|
* Reduces the SQL results into a Record of {@link DatabaseSchema}
|
package/src/common/LSN.ts
CHANGED
|
@@ -51,9 +51,9 @@ export class LSN {
|
|
|
51
51
|
* @param stringLSN
|
|
52
52
|
*/
|
|
53
53
|
static fromString(stringLSN: string): LSN {
|
|
54
|
-
if (!/^[0-9A-
|
|
54
|
+
if (!/^[0-9A-F]{8}:[0-9A-F]{8}:[0-9A-F]{4}$/.test(stringLSN)) {
|
|
55
55
|
throw new ReplicationAssertionError(
|
|
56
|
-
`Invalid LSN string. Expected format is [00000000:00000000:0000]. Got: ${stringLSN}`
|
|
56
|
+
`Invalid LSN string. Expected format is uppercase hexadecimal:[00000000:00000000:0000]. Got: ${stringLSN}`
|
|
57
57
|
);
|
|
58
58
|
}
|
|
59
59
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { SourceTable } from '@powersync/service-core';
|
|
2
|
-
import { toQualifiedTableName } from '../utils/mssql.js';
|
|
2
|
+
import { escapeIdentifier, toQualifiedTableName } from '../utils/mssql.js';
|
|
3
3
|
|
|
4
4
|
export interface CaptureInstance {
|
|
5
5
|
name: string;
|
|
@@ -34,15 +34,15 @@ export class MSSQLSourceTable {
|
|
|
34
34
|
}
|
|
35
35
|
|
|
36
36
|
get CTTable() {
|
|
37
|
-
return `${this.cdcSchema}.${this.captureInstance}_CT`;
|
|
37
|
+
return `${escapeIdentifier(this.cdcSchema)}.${this.captureInstance}_CT`;
|
|
38
38
|
}
|
|
39
39
|
|
|
40
40
|
get allChangesFunction() {
|
|
41
|
-
return `${this.cdcSchema}.fn_cdc_get_all_changes_${this.captureInstance}`;
|
|
41
|
+
return `${escapeIdentifier(this.cdcSchema)}.fn_cdc_get_all_changes_${this.captureInstance}`;
|
|
42
42
|
}
|
|
43
43
|
|
|
44
44
|
get netChangesFunction() {
|
|
45
|
-
return `${this.cdcSchema}.fn_cdc_get_net_changes_${this.captureInstance}`;
|
|
45
|
+
return `${escapeIdentifier(this.cdcSchema)}.fn_cdc_get_net_changes_${this.captureInstance}`;
|
|
46
46
|
}
|
|
47
47
|
|
|
48
48
|
/**
|
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
import sql from 'mssql';
|
|
2
|
-
import {
|
|
2
|
+
import {
|
|
3
|
+
DatabaseInputRow,
|
|
4
|
+
ExpressionType,
|
|
5
|
+
SQLITE_FALSE,
|
|
6
|
+
SQLITE_TRUE,
|
|
7
|
+
SqliteInputRow,
|
|
8
|
+
toSyncRulesRow
|
|
9
|
+
} from '@powersync/service-sync-rules';
|
|
3
10
|
import { MSSQLUserDefinedType } from '../types/mssql-data-types.js';
|
|
4
11
|
|
|
5
12
|
export function toSqliteInputRow(row: any, columns: sql.IColumnMetadata): SqliteInputRow {
|
|
@@ -18,7 +25,7 @@ export function toSqliteInputRow(row: any, columns: sql.IColumnMetadata): Sqlite
|
|
|
18
25
|
break;
|
|
19
26
|
case sql.TYPES.Bit:
|
|
20
27
|
// MSSQL returns BIT as boolean
|
|
21
|
-
result[key] = row[key] ?
|
|
28
|
+
result[key] = row[key] ? SQLITE_TRUE : SQLITE_FALSE;
|
|
22
29
|
break;
|
|
23
30
|
// Convert Dates to string
|
|
24
31
|
case sql.TYPES.Date:
|
|
@@ -37,7 +44,7 @@ export function toSqliteInputRow(row: any, columns: sql.IColumnMetadata): Sqlite
|
|
|
37
44
|
case sql.TYPES.Binary:
|
|
38
45
|
case sql.TYPES.VarBinary:
|
|
39
46
|
case sql.TYPES.Image:
|
|
40
|
-
result[key] = new Uint8Array(
|
|
47
|
+
result[key] = new Uint8Array(row[key]);
|
|
41
48
|
break;
|
|
42
49
|
// TODO: Spatial types need to be converted to binary WKB, they are returned as a non standard object currently
|
|
43
50
|
case sql.TYPES.Geometry:
|
|
@@ -46,7 +53,7 @@ export function toSqliteInputRow(row: any, columns: sql.IColumnMetadata): Sqlite
|
|
|
46
53
|
break;
|
|
47
54
|
case sql.TYPES.UDT:
|
|
48
55
|
if (columnMetadata.udt.name === MSSQLUserDefinedType.HIERARCHYID) {
|
|
49
|
-
result[key] = new Uint8Array(
|
|
56
|
+
result[key] = new Uint8Array(row[key]);
|
|
50
57
|
break;
|
|
51
58
|
} else {
|
|
52
59
|
result[key] = row[key];
|
|
@@ -103,8 +103,7 @@ export class CDCPoller {
|
|
|
103
103
|
while (!this.isStopped) {
|
|
104
104
|
// Don't poll if already polling (concurrency guard)
|
|
105
105
|
if (this.isPolling) {
|
|
106
|
-
|
|
107
|
-
continue;
|
|
106
|
+
throw new ReplicationAssertionError('A polling cycle is already in progress.');
|
|
108
107
|
}
|
|
109
108
|
|
|
110
109
|
try {
|
|
@@ -13,13 +13,7 @@ import { getUuidReplicaIdentityBson, MetricsEngine, SourceEntityDescriptor, stor
|
|
|
13
13
|
import { SqliteInputRow, SqliteRow, SqlSyncRules, TablePattern } from '@powersync/service-sync-rules';
|
|
14
14
|
|
|
15
15
|
import { ReplicationMetric } from '@powersync/service-types';
|
|
16
|
-
import {
|
|
17
|
-
BatchedSnapshotQuery,
|
|
18
|
-
IdSnapshotQuery,
|
|
19
|
-
MSSQLSnapshotQuery,
|
|
20
|
-
PrimaryKeyValue,
|
|
21
|
-
SimpleSnapshotQuery
|
|
22
|
-
} from './MSSQLSnapshotQuery.js';
|
|
16
|
+
import { BatchedSnapshotQuery, MSSQLSnapshotQuery, SimpleSnapshotQuery } from './MSSQLSnapshotQuery.js';
|
|
23
17
|
import { MSSQLConnectionManager } from './MSSQLConnectionManager.js';
|
|
24
18
|
import { getReplicationIdentityColumns, getTablesFromPattern, ResolvedTable } from '../utils/schema.js';
|
|
25
19
|
import {
|
|
@@ -286,18 +280,14 @@ export class CDCStream {
|
|
|
286
280
|
return resolvedTable;
|
|
287
281
|
}
|
|
288
282
|
|
|
289
|
-
private async snapshotTableInTx(
|
|
290
|
-
batch: storage.BucketStorageBatch,
|
|
291
|
-
table: MSSQLSourceTable,
|
|
292
|
-
limited?: PrimaryKeyValue[]
|
|
293
|
-
): Promise<void> {
|
|
283
|
+
private async snapshotTableInTx(batch: storage.BucketStorageBatch, table: MSSQLSourceTable): Promise<void> {
|
|
294
284
|
// Note: We use the "Read Committed" isolation level here, not snapshot isolation.
|
|
295
285
|
// The data may change during the transaction, but that is compensated for in the streaming
|
|
296
286
|
// replication afterward.
|
|
297
287
|
const transaction = await this.connections.createTransaction();
|
|
298
288
|
await transaction.begin(sql.ISOLATION_LEVEL.READ_COMMITTED);
|
|
299
289
|
try {
|
|
300
|
-
await this.snapshotTable(batch, transaction, table
|
|
290
|
+
await this.snapshotTable(batch, transaction, table);
|
|
301
291
|
|
|
302
292
|
// Get the current LSN.
|
|
303
293
|
// The data will only be consistent once incremental replication has passed that point.
|
|
@@ -325,8 +315,7 @@ export class CDCStream {
|
|
|
325
315
|
private async snapshotTable(
|
|
326
316
|
batch: storage.BucketStorageBatch,
|
|
327
317
|
transaction: sql.Transaction,
|
|
328
|
-
table: MSSQLSourceTable
|
|
329
|
-
limited?: PrimaryKeyValue[]
|
|
318
|
+
table: MSSQLSourceTable
|
|
330
319
|
) {
|
|
331
320
|
let totalEstimatedCount = table.sourceTable.snapshotStatus?.totalEstimatedCount;
|
|
332
321
|
let replicatedCount = table.sourceTable.snapshotStatus?.replicatedCount ?? 0;
|
|
@@ -335,9 +324,7 @@ export class CDCStream {
|
|
|
335
324
|
// We do streaming on two levels:
|
|
336
325
|
// 1. Coarse select from the entire table, stream rows 1 by one
|
|
337
326
|
// 2. Fine level: Stream batches of rows with each fetch call
|
|
338
|
-
if (
|
|
339
|
-
query = new IdSnapshotQuery(transaction, table, limited);
|
|
340
|
-
} else if (BatchedSnapshotQuery.supports(table)) {
|
|
327
|
+
if (BatchedSnapshotQuery.supports(table)) {
|
|
341
328
|
// Single primary key - we can use the primary key for chunking
|
|
342
329
|
const orderByKey = table.sourceTable.replicaIdColumns[0];
|
|
343
330
|
query = new BatchedSnapshotQuery(
|
|
@@ -404,30 +391,27 @@ export class CDCStream {
|
|
|
404
391
|
|
|
405
392
|
// Important: flush before marking progress
|
|
406
393
|
await batch.flush();
|
|
407
|
-
if (limited == null) {
|
|
408
|
-
let lastKey: Uint8Array | undefined;
|
|
409
|
-
if (query instanceof BatchedSnapshotQuery) {
|
|
410
|
-
lastKey = query.getLastKeySerialized();
|
|
411
|
-
}
|
|
412
|
-
if (lastCountTime < performance.now() - 10 * 60 * 1000) {
|
|
413
|
-
// Even though we're doing the snapshot inside a transaction, the transaction uses
|
|
414
|
-
// the default "Read Committed" isolation level. This means we can get new data
|
|
415
|
-
// within the transaction, so we re-estimate the count every 10 minutes when replicating
|
|
416
|
-
// large tables.
|
|
417
|
-
totalEstimatedCount = await this.estimatedCountNumber(table, transaction);
|
|
418
|
-
lastCountTime = performance.now();
|
|
419
|
-
}
|
|
420
|
-
const updatedSourceTable = await batch.updateTableProgress(table.sourceTable, {
|
|
421
|
-
lastKey: lastKey,
|
|
422
|
-
replicatedCount: replicatedCount,
|
|
423
|
-
totalEstimatedCount: totalEstimatedCount
|
|
424
|
-
});
|
|
425
|
-
this.tableCache.updateSourceTable(updatedSourceTable);
|
|
426
394
|
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
395
|
+
let lastKey: Uint8Array | undefined;
|
|
396
|
+
if (query instanceof BatchedSnapshotQuery) {
|
|
397
|
+
lastKey = query.getLastKeySerialized();
|
|
398
|
+
}
|
|
399
|
+
if (lastCountTime < performance.now() - 10 * 60 * 1000) {
|
|
400
|
+
// Even though we're doing the snapshot inside a transaction, the transaction uses
|
|
401
|
+
// the default "Read Committed" isolation level. This means we can get new data
|
|
402
|
+
// within the transaction, so we re-estimate the count every 10 minutes when replicating
|
|
403
|
+
// large tables.
|
|
404
|
+
totalEstimatedCount = await this.estimatedCountNumber(table, transaction);
|
|
405
|
+
lastCountTime = performance.now();
|
|
430
406
|
}
|
|
407
|
+
const updatedSourceTable = await batch.updateTableProgress(table.sourceTable, {
|
|
408
|
+
lastKey: lastKey,
|
|
409
|
+
replicatedCount: replicatedCount,
|
|
410
|
+
totalEstimatedCount: totalEstimatedCount
|
|
411
|
+
});
|
|
412
|
+
this.tableCache.updateSourceTable(updatedSourceTable);
|
|
413
|
+
|
|
414
|
+
this.logger.info(`Replicating ${table.toQualifiedName()} ${table.sourceTable.formatSnapshotProgress()}`);
|
|
431
415
|
|
|
432
416
|
if (this.abortSignal.aborted) {
|
|
433
417
|
// We only abort after flushing
|
|
@@ -449,10 +433,10 @@ export class CDCStream {
|
|
|
449
433
|
*/
|
|
450
434
|
async estimatedCountNumber(table: MSSQLSourceTable, transaction?: sql.Transaction): Promise<number> {
|
|
451
435
|
const request = transaction ? transaction.request() : await this.connections.createRequest();
|
|
452
|
-
const { recordset: result } = await request.query(
|
|
436
|
+
const { recordset: result } = await request.input('tableName', table.toQualifiedName()).query(
|
|
453
437
|
`SELECT SUM(row_count) AS total_rows
|
|
454
438
|
FROM sys.dm_db_partition_stats
|
|
455
|
-
WHERE object_id = OBJECT_ID(
|
|
439
|
+
WHERE object_id = OBJECT_ID(@tableName)
|
|
456
440
|
AND index_id < 2;`
|
|
457
441
|
);
|
|
458
442
|
return result[0].total_rows ?? -1;
|