@powersync/service-module-mssql 0.0.0-dev-20251202092152 → 0.0.0-dev-20251208113735

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/CHANGELOG.md +8 -12
  2. package/dist/api/MSSQLRouteAPIAdapter.js +15 -50
  3. package/dist/api/MSSQLRouteAPIAdapter.js.map +1 -1
  4. package/dist/common/LSN.js +2 -2
  5. package/dist/common/LSN.js.map +1 -1
  6. package/dist/common/MSSQLSourceTable.js +4 -4
  7. package/dist/common/MSSQLSourceTable.js.map +1 -1
  8. package/dist/common/mssqls-to-sqlite.js +4 -4
  9. package/dist/common/mssqls-to-sqlite.js.map +1 -1
  10. package/dist/replication/CDCPoller.js +1 -2
  11. package/dist/replication/CDCPoller.js.map +1 -1
  12. package/dist/replication/CDCStream.js +24 -32
  13. package/dist/replication/CDCStream.js.map +1 -1
  14. package/dist/replication/MSSQLSnapshotQuery.d.ts +0 -17
  15. package/dist/replication/MSSQLSnapshotQuery.js +0 -47
  16. package/dist/replication/MSSQLSnapshotQuery.js.map +1 -1
  17. package/dist/utils/mssql.js +27 -13
  18. package/dist/utils/mssql.js.map +1 -1
  19. package/dist/utils/schema.js +31 -15
  20. package/dist/utils/schema.js.map +1 -1
  21. package/package.json +9 -9
  22. package/src/api/MSSQLRouteAPIAdapter.ts +15 -50
  23. package/src/common/LSN.ts +2 -2
  24. package/src/common/MSSQLSourceTable.ts +4 -4
  25. package/src/common/mssqls-to-sqlite.ts +11 -4
  26. package/src/replication/CDCPoller.ts +1 -2
  27. package/src/replication/CDCStream.ts +26 -42
  28. package/src/replication/MSSQLSnapshotQuery.ts +0 -54
  29. package/src/utils/mssql.ts +28 -15
  30. package/src/utils/schema.ts +31 -17
  31. package/test/src/CDCStream.test.ts +5 -5
  32. package/test/src/CDCStream_resumable_snapshot.test.ts +3 -3
  33. package/test/src/mssql-to-sqlite.test.ts +28 -27
  34. package/test/src/util.ts +16 -6
  35. package/tsconfig.tsbuildinfo +1 -1
  36. package/ci/init-mssql.sql +0 -50
@@ -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 = '${connectionManager.schema}' AND TABLE_NAME = '${POWERSYNC_CHECKPOINTS_TABLE}';
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 = '${schema}'
134
- AND tbl.name = '${table}'
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('${captureInstance}') AS 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 = '${schema}'
194
- AND tbl.name = '${tableName}'
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
- return `[${identifier}]`;
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 ${toQualifiedTableName(schema, table.name)}`);
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 };
@@ -1 +1 @@
1
- {"version":3,"file":"mssql.js","sourceRoot":"","sources":["../../src/utils/mssql.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mssql.js","sourceRoot":"","sources":["../../src/utils/mssql.ts"],"names":[],"mappings":"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"}
@@ -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 = '${schema}'
14
- AND tbl.name = '${tableName}'
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 = '${schema}'
41
- AND tbl.name = '${tableName}'
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 = '${schema}'
69
- AND tbl.name = '${tableName}'
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 = '${tablePattern.schema}'
99
- AND tbl.name LIKE '${tablePattern.tablePattern}'
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
- WHERE sch.name = '${tablePattern.schema}'
120
- AND tbl.name = '${tablePattern.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,
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/utils/schema.ts"],"names":[],"mappings":"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"}
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-20251202092152",
5
+ "version": "0.0.0-dev-20251208113735",
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-20251202092152",
31
- "@powersync/service-core": "0.0.0-dev-20251202092152",
32
- "@powersync/service-errors": "0.0.0-dev-20251202092152",
33
- "@powersync/service-sync-rules": "0.0.0-dev-20251202092152",
34
- "@powersync/service-types": "0.0.0-dev-20251202092152",
30
+ "@powersync/lib-services-framework": "0.0.0-dev-20251208113735",
31
+ "@powersync/service-core": "0.0.0-dev-20251208113735",
32
+ "@powersync/service-errors": "0.0.0-dev-20251208113735",
33
+ "@powersync/service-sync-rules": "0.29.8",
34
+ "@powersync/service-types": "0.0.0-dev-20251208113735",
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-20251202092152",
42
- "@powersync/service-module-mongodb-storage": "0.0.0-dev-20251202092152",
43
- "@powersync/service-module-postgres-storage": "0.0.0-dev-20251202092152"
41
+ "@powersync/service-core-tests": "0.0.0-dev-20251208113735",
42
+ "@powersync/service-module-mongodb-storage": "0.0.0-dev-20251208113735",
43
+ "@powersync/service-module-postgres-storage": "0.0.0-dev-20251208113735"
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
- if (!this.config.debug_api) {
43
- return service_types.internal_routes.ExecuteSqlResponse.encode({
44
- results: {
45
- columns: [],
46
- rows: []
47
- },
48
- success: false,
49
- error: 'SQL querying is not enabled'
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 = '${this.connectionManager.schema}'
83
+ WHERE sch.name = @schema
122
84
  AND sch.name NOT IN ('sys', 'INFORMATION_SCHEMA', 'cdc')
123
- AND tbl.name NOT IN ('systranschemas', '${POWERSYNC_CHECKPOINTS_TABLE}')
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-Fa-f]{8}:[0-9A-Fa-f]{8}:[0-9A-Fa-f]{4}$/.test(stringLSN)) {
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 { DatabaseInputRow, ExpressionType, SqliteInputRow, toSyncRulesRow } from '@powersync/service-sync-rules';
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] ? 1 : 0;
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(Object.values(row[key]));
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(Object.values(row[key]));
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
- await timers.setTimeout(this.pollingIntervalMs);
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, limited);
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 (limited) {
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
- this.logger.info(`Replicating ${table.toQualifiedName()} ${table.sourceTable.formatSnapshotProgress()}`);
428
- } else {
429
- this.logger.info(`Replicating ${table.toQualifiedName()} ${replicatedCount}/${limited.length} for resnapshot`);
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('${table.toQualifiedName()}')
439
+ WHERE object_id = OBJECT_ID(@tableName)
456
440
  AND index_id < 2;`
457
441
  );
458
442
  return result[0].total_rows ?? -1;