@powersync/service-module-postgres 0.14.4 → 0.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/CHANGELOG.md +66 -0
  2. package/LICENSE +3 -3
  3. package/dist/api/PostgresRouteAPIAdapter.js +1 -1
  4. package/dist/api/PostgresRouteAPIAdapter.js.map +1 -1
  5. package/dist/module/PostgresModule.d.ts +1 -2
  6. package/dist/module/PostgresModule.js +3 -40
  7. package/dist/module/PostgresModule.js.map +1 -1
  8. package/dist/replication/PgRelation.js +1 -1
  9. package/dist/replication/PgRelation.js.map +1 -1
  10. package/dist/replication/SnapshotQuery.js +4 -4
  11. package/dist/replication/SnapshotQuery.js.map +1 -1
  12. package/dist/replication/WalStream.d.ts +3 -2
  13. package/dist/replication/WalStream.js +26 -16
  14. package/dist/replication/WalStream.js.map +1 -1
  15. package/dist/replication/replication-utils.js +10 -2
  16. package/dist/replication/replication-utils.js.map +1 -1
  17. package/dist/utils/pgwire_utils.d.ts +3 -3
  18. package/dist/utils/pgwire_utils.js.map +1 -1
  19. package/package.json +13 -13
  20. package/src/api/PostgresRouteAPIAdapter.ts +4 -1
  21. package/src/module/PostgresModule.ts +2 -43
  22. package/src/replication/PgRelation.ts +2 -2
  23. package/src/replication/SnapshotQuery.ts +4 -4
  24. package/src/replication/WalStream.ts +36 -19
  25. package/src/replication/replication-utils.ts +10 -2
  26. package/src/utils/pgwire_utils.ts +5 -3
  27. package/test/src/checkpoints.test.ts +2 -0
  28. package/test/src/large_batch.test.ts +0 -1
  29. package/test/src/pg_test.test.ts +57 -17
  30. package/test/src/slow_tests.test.ts +0 -2
  31. package/test/src/util.ts +2 -4
  32. package/test/src/wal_stream.test.ts +12 -21
  33. package/test/src/wal_stream_utils.ts +10 -1
  34. package/tsconfig.tsbuildinfo +1 -1
  35. package/dist/auth/SupabaseKeyCollector.d.ts +0 -17
  36. package/dist/auth/SupabaseKeyCollector.js +0 -71
  37. package/dist/auth/SupabaseKeyCollector.js.map +0 -1
  38. package/src/auth/SupabaseKeyCollector.ts +0 -83
@@ -1 +1 @@
1
- {"version":3,"file":"replication-utils.js","sourceRoot":"","sources":["../../src/replication/replication-utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"replication-utils.js","sourceRoot":"","sources":["../../src/replication/replication-utils.ts"],"names":[],"mappings":"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"}
@@ -1,15 +1,15 @@
1
1
  import * as pgwire from '@powersync/service-jpgwire';
2
- import { DatabaseInputRow, SqliteRow } from '@powersync/service-sync-rules';
2
+ import { DatabaseInputRow, SqliteInputRow } from '@powersync/service-sync-rules';
3
3
  /**
4
4
  * pgwire message -> SQLite row.
5
5
  * @param message
6
6
  */
7
- export declare function constructAfterRecord(message: pgwire.PgoutputInsert | pgwire.PgoutputUpdate): SqliteRow;
7
+ export declare function constructAfterRecord(message: pgwire.PgoutputInsert | pgwire.PgoutputUpdate): SqliteInputRow;
8
8
  /**
9
9
  * pgwire message -> SQLite row.
10
10
  * @param message
11
11
  */
12
- export declare function constructBeforeRecord(message: pgwire.PgoutputDelete | pgwire.PgoutputUpdate): SqliteRow | undefined;
12
+ export declare function constructBeforeRecord(message: pgwire.PgoutputDelete | pgwire.PgoutputUpdate): SqliteInputRow | undefined;
13
13
  /**
14
14
  * We need a high level of control over how values are decoded, to make sure there is no loss
15
15
  * of precision in the process.
@@ -1 +1 @@
1
- {"version":3,"file":"pgwire_utils.js","sourceRoot":"","sources":["../../src/utils/pgwire_utils.ts"],"names":[],"mappings":"AAAA,0GAA0G;AAE1G,OAAO,KAAK,MAAM,MAAM,4BAA4B,CAAC;AACrD,OAAO,EAA+B,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAE5F;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAAsD;IACzF,MAAM,OAAO,GAAI,OAAe,CAAC,QAAQ,CAAC;IAE1C,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACtD,OAAO,cAAc,CAAC,MAAM,CAAC,CAAC;AAChC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,OAAsD;IAC1F,MAAM,OAAO,GAAI,OAAe,CAAC,SAAS,CAAC;IAC3C,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;QACpB,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACtD,OAAO,cAAc,CAAC,MAAM,CAAC,CAAC;AAChC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,QAAiC,EAAE,QAA6B;IAC1F,IAAI,MAAM,GAAwB,EAAE,CAAC;IACrC,KAAK,IAAI,UAAU,IAAI,QAAQ,EAAE,CAAC;QAChC,MAAM,MAAM,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC;QACpC,MAAM,OAAO,GAAI,QAAgB,CAAC,aAAa,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC1E,IAAI,OAAO,MAAM,IAAI,QAAQ,IAAI,OAAO,EAAE,CAAC;YACzC,MAAM,CAAC,UAAU,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC7D,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,UAAU,CAAC,GAAG,MAAM,CAAC;QAC9B,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"pgwire_utils.js","sourceRoot":"","sources":["../../src/utils/pgwire_utils.ts"],"names":[],"mappings":"AAAA,0GAA0G;AAE1G,OAAO,KAAK,MAAM,MAAM,4BAA4B,CAAC;AACrD,OAAO,EAAoC,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAEjG;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAAsD;IACzF,MAAM,OAAO,GAAI,OAAe,CAAC,QAAQ,CAAC;IAE1C,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACtD,OAAO,cAAc,CAAC,MAAM,CAAC,CAAC;AAChC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CACnC,OAAsD;IAEtD,MAAM,OAAO,GAAI,OAAe,CAAC,SAAS,CAAC;IAC3C,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;QACpB,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACtD,OAAO,cAAc,CAAC,MAAM,CAAC,CAAC;AAChC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,QAAiC,EAAE,QAA6B;IAC1F,IAAI,MAAM,GAAwB,EAAE,CAAC;IACrC,KAAK,IAAI,UAAU,IAAI,QAAQ,EAAE,CAAC;QAChC,MAAM,MAAM,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC;QACpC,MAAM,OAAO,GAAI,QAAgB,CAAC,aAAa,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC1E,IAAI,OAAO,MAAM,IAAI,QAAQ,IAAI,OAAO,EAAE,CAAC;YACzC,MAAM,CAAC,UAAU,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC7D,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,UAAU,CAAC,GAAG,MAAM,CAAC;QAC9B,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
package/package.json CHANGED
@@ -5,9 +5,9 @@
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },
8
- "version": "0.14.4",
8
+ "version": "0.16.0",
9
9
  "main": "dist/index.js",
10
- "license": "FSL-1.1-Apache-2.0",
10
+ "license": "FSL-1.1-ALv2",
11
11
  "type": "module",
12
12
  "exports": {
13
13
  ".": {
@@ -28,20 +28,20 @@
28
28
  "ts-codec": "^1.3.0",
29
29
  "uri-js": "^4.4.1",
30
30
  "uuid": "^11.1.0",
31
- "@powersync/lib-service-postgres": "0.4.5",
32
- "@powersync/lib-services-framework": "0.7.1",
33
- "@powersync/service-core": "1.13.4",
34
- "@powersync/service-jpgwire": "0.20.0",
35
- "@powersync/service-jsonbig": "0.17.10",
36
- "@powersync/service-sync-rules": "0.27.0",
37
- "@powersync/service-types": "0.12.1"
31
+ "@powersync/lib-service-postgres": "0.4.7",
32
+ "@powersync/lib-services-framework": "0.7.3",
33
+ "@powersync/service-core": "1.15.0",
34
+ "@powersync/service-jpgwire": "0.20.2",
35
+ "@powersync/service-jsonbig": "0.17.11",
36
+ "@powersync/service-sync-rules": "0.29.0",
37
+ "@powersync/service-types": "0.13.0"
38
38
  },
39
39
  "devDependencies": {
40
40
  "@types/semver": "^7.5.4",
41
- "@powersync/service-core-tests": "0.10.4",
42
- "@powersync/service-module-mongodb-storage": "0.10.4",
43
- "@powersync/lib-service-postgres": "0.4.5",
44
- "@powersync/service-module-postgres-storage": "0.8.4"
41
+ "@powersync/service-core-tests": "0.12.0",
42
+ "@powersync/service-module-mongodb-storage": "0.12.0",
43
+ "@powersync/lib-service-postgres": "0.4.7",
44
+ "@powersync/service-module-postgres-storage": "0.10.0"
45
45
  },
46
46
  "scripts": {
47
47
  "build": "tsc -b",
@@ -105,7 +105,10 @@ export class PostgresRouteAPIAdapter implements api.RouteAPI {
105
105
  columns: result.columns.map((c) => c.name),
106
106
  rows: result.rows.map((row) => {
107
107
  return row.map((value) => {
108
- const sqlValue = sync_rules.toSyncRulesValue(value);
108
+ const sqlValue = sync_rules.applyValueContext(
109
+ sync_rules.toSyncRulesValue(value),
110
+ sync_rules.CompatibilityContext.FULL_BACKWARDS_COMPATIBILITY
111
+ );
109
112
  if (typeof sqlValue == 'bigint') {
110
113
  return Number(value);
111
114
  } else if (sync_rules.isJsonValue(sqlValue)) {
@@ -1,6 +1,6 @@
1
+ import { baseUri, NormalizedBasePostgresConnectionConfig } from '@powersync/lib-service-postgres';
1
2
  import {
2
3
  api,
3
- auth,
4
4
  ConfigurationFileSyncRulesProvider,
5
5
  ConnectionTestResult,
6
6
  modules,
@@ -8,8 +8,8 @@ import {
8
8
  system
9
9
  } from '@powersync/service-core';
10
10
  import * as jpgwire from '@powersync/service-jpgwire';
11
+ import { ReplicationMetric } from '@powersync/service-types';
11
12
  import { PostgresRouteAPIAdapter } from '../api/PostgresRouteAPIAdapter.js';
12
- import { SupabaseKeyCollector } from '../auth/SupabaseKeyCollector.js';
13
13
  import { ConnectionManagerFactory } from '../replication/ConnectionManagerFactory.js';
14
14
  import { PgManager } from '../replication/PgManager.js';
15
15
  import { PostgresErrorRateLimiter } from '../replication/PostgresErrorRateLimiter.js';
@@ -18,8 +18,6 @@ import { PUBLICATION_NAME } from '../replication/WalStream.js';
18
18
  import { WalStreamReplicator } from '../replication/WalStreamReplicator.js';
19
19
  import * as types from '../types/types.js';
20
20
  import { PostgresConnectionConfig } from '../types/types.js';
21
- import { baseUri, NormalizedBasePostgresConnectionConfig } from '@powersync/lib-service-postgres';
22
- import { ReplicationMetric } from '@powersync/service-types';
23
21
  import { getApplicationName } from '../utils/application-name.js';
24
22
 
25
23
  export class PostgresModule extends replication.ReplicationModule<types.PostgresConnectionConfig> {
@@ -32,19 +30,6 @@ export class PostgresModule extends replication.ReplicationModule<types.Postgres
32
30
  }
33
31
 
34
32
  async onInitialized(context: system.ServiceContextContainer): Promise<void> {
35
- const client_auth = context.configuration.base_config.client_auth;
36
-
37
- if (client_auth?.supabase && client_auth?.supabase_jwt_secret == null) {
38
- // Only use the deprecated SupabaseKeyCollector when there is no
39
- // secret hardcoded. Hardcoded secrets are handled elsewhere, using
40
- // StaticSupabaseKeyCollector.
41
-
42
- // Support for SupabaseKeyCollector is deprecated and support will be
43
- // completely removed by Supabase soon. We can keep support a while
44
- // longer for self-hosted setups, before also removing that on our side.
45
- this.registerSupabaseAuth(context);
46
- }
47
-
48
33
  // Record replicated bytes using global jpgwire metrics. Only registered if this module is replicating
49
34
  if (context.replicationEngine) {
50
35
  jpgwire.setMetricsRecorder({
@@ -110,32 +95,6 @@ export class PostgresModule extends replication.ReplicationModule<types.Postgres
110
95
  }
111
96
  }
112
97
 
113
- // TODO: This should rather be done by registering the key collector in some kind of auth engine
114
- private registerSupabaseAuth(context: system.ServiceContextContainer) {
115
- const { configuration } = context;
116
- // Register the Supabase key collector(s)
117
- configuration.connections
118
- ?.map((baseConfig) => {
119
- if (baseConfig.type != types.POSTGRES_CONNECTION_TYPE) {
120
- return;
121
- }
122
- try {
123
- return this.resolveConfig(types.PostgresConnectionConfig.decode(baseConfig as any));
124
- } catch (ex) {
125
- this.logger.warn('Failed to decode configuration.', ex);
126
- }
127
- })
128
- .filter((c) => !!c)
129
- .forEach((config) => {
130
- const keyCollector = new SupabaseKeyCollector(config!);
131
- context.lifeCycleEngine.withLifecycle(keyCollector, {
132
- // Close the internal pool
133
- stop: (collector) => collector.shutdown()
134
- });
135
- configuration.client_keystore.collector.add(new auth.CachedKeyCollector(keyCollector));
136
- });
137
- }
138
-
139
98
  async testConnection(config: PostgresConnectionConfig): Promise<ConnectionTestResult> {
140
99
  this.decodeConfig(config);
141
100
  const normalizedConfig = this.resolveConfig(this.decodedConfig!);
@@ -1,4 +1,4 @@
1
- import { ReplicationAssertionError, ServiceError } from '@powersync/lib-services-framework';
1
+ import { ReplicationAssertionError } from '@powersync/lib-services-framework';
2
2
  import { storage } from '@powersync/service-core';
3
3
  import { PgoutputRelation } from '@powersync/service-jpgwire';
4
4
 
@@ -27,6 +27,6 @@ export function getPgOutputRelation(source: PgoutputRelation): storage.SourceEnt
27
27
  name: source.name,
28
28
  schema: source.schema,
29
29
  objectId: getRelId(source),
30
- replicationColumns: getReplicaIdColumns(source)
30
+ replicaIdColumns: getReplicaIdColumns(source)
31
31
  } satisfies storage.SourceEntityDescriptor;
32
32
  }
@@ -36,7 +36,7 @@ export class SimpleSnapshotQuery implements SnapshotQuery {
36
36
  ) {}
37
37
 
38
38
  public async initialize(): Promise<void> {
39
- await this.connection.query(`DECLARE snapshot_cursor CURSOR FOR SELECT * FROM ${this.table.escapedIdentifier}`);
39
+ await this.connection.query(`DECLARE snapshot_cursor CURSOR FOR SELECT * FROM ${this.table.qualifiedName}`);
40
40
  }
41
41
 
42
42
  public nextChunk(): AsyncIterableIterator<PgChunk> {
@@ -121,7 +121,7 @@ export class ChunkedSnapshotQuery implements SnapshotQuery {
121
121
  const escapedKeyName = escapeIdentifier(this.key.name);
122
122
  if (this.lastKey == null) {
123
123
  stream = this.connection.stream(
124
- `SELECT * FROM ${this.table.escapedIdentifier} ORDER BY ${escapedKeyName} LIMIT ${this.chunkSize}`
124
+ `SELECT * FROM ${this.table.qualifiedName} ORDER BY ${escapedKeyName} LIMIT ${this.chunkSize}`
125
125
  );
126
126
  } else {
127
127
  if (this.key.typeId == null) {
@@ -129,7 +129,7 @@ export class ChunkedSnapshotQuery implements SnapshotQuery {
129
129
  }
130
130
  let type: StatementParam['type'] = Number(this.key.typeId);
131
131
  stream = this.connection.stream({
132
- statement: `SELECT * FROM ${this.table.escapedIdentifier} WHERE ${escapedKeyName} > $1 ORDER BY ${escapedKeyName} LIMIT ${this.chunkSize}`,
132
+ statement: `SELECT * FROM ${this.table.qualifiedName} WHERE ${escapedKeyName} > $1 ORDER BY ${escapedKeyName} LIMIT ${this.chunkSize}`,
133
133
  params: [{ value: this.lastKey, type }]
134
134
  });
135
135
  }
@@ -197,7 +197,7 @@ export class IdSnapshotQuery implements SnapshotQuery {
197
197
  throw new Error(`Cannot determine primary key array type for ${JSON.stringify(keyDefinition)}`);
198
198
  }
199
199
  yield* this.connection.stream({
200
- statement: `SELECT * FROM ${this.table.escapedIdentifier} WHERE ${escapeIdentifier(keyDefinition.name)} = ANY($1)`,
200
+ statement: `SELECT * FROM ${this.table.qualifiedName} WHERE ${escapeIdentifier(keyDefinition.name)} = ANY($1)`,
201
201
  params: [
202
202
  {
203
203
  type: type,
@@ -20,7 +20,15 @@ import {
20
20
  storage
21
21
  } from '@powersync/service-core';
22
22
  import * as pgwire from '@powersync/service-jpgwire';
23
- import { DatabaseInputRow, SqliteRow, SqlSyncRules, TablePattern, toSyncRulesRow } from '@powersync/service-sync-rules';
23
+ import {
24
+ applyValueContext,
25
+ CompatibilityContext,
26
+ DatabaseInputRow,
27
+ SqliteInputRow,
28
+ SqlSyncRules,
29
+ TablePattern,
30
+ toSyncRulesRow
31
+ } from '@powersync/service-sync-rules';
24
32
  import * as pg_utils from '../utils/pgwire_utils.js';
25
33
 
26
34
  import { PgManager } from './PgManager.js';
@@ -256,7 +264,7 @@ export class WalStream {
256
264
  name,
257
265
  schema,
258
266
  objectId: relid,
259
- replicationColumns: cresult.replicationColumns
267
+ replicaIdColumns: cresult.replicationColumns
260
268
  } as SourceEntityDescriptor,
261
269
  false
262
270
  );
@@ -321,7 +329,7 @@ export class WalStream {
321
329
 
322
330
  // Check that replication slot exists
323
331
  for (let i = 120; i >= 0; i--) {
324
- await touch();
332
+ this.touch();
325
333
 
326
334
  if (i == 0) {
327
335
  container.reporter.captureException(last_error, {
@@ -450,7 +458,7 @@ WHERE oid = $1::regclass`,
450
458
 
451
459
  async initialReplication(db: pgwire.PgConnection) {
452
460
  const sourceTables = this.sync_rules.getSourceTables();
453
- await this.storage.startBatch(
461
+ const flushResults = await this.storage.startBatch(
454
462
  {
455
463
  logger: this.logger,
456
464
  zeroLSN: ZERO_LSN,
@@ -479,7 +487,7 @@ WHERE oid = $1::regclass`,
479
487
 
480
488
  for (let table of tablesWithStatus) {
481
489
  await this.snapshotTableInTx(batch, db, table);
482
- await touch();
490
+ this.touch();
483
491
  }
484
492
 
485
493
  // Always commit the initial snapshot at zero.
@@ -498,9 +506,19 @@ WHERE oid = $1::regclass`,
498
506
  * to advance the active sync rules LSN.
499
507
  */
500
508
  await sendKeepAlive(db);
509
+
510
+ const lastOp = flushResults?.flushed_op;
511
+ if (lastOp != null) {
512
+ // Populate the cache _after_ initial replication, but _before_ we switch to this sync rules.
513
+ await this.storage.populatePersistentChecksumCache({
514
+ // No checkpoint yet, but we do have the opId.
515
+ maxOpId: lastOp,
516
+ signal: this.abort_signal
517
+ });
518
+ }
501
519
  }
502
520
 
503
- static *getQueryData(results: Iterable<DatabaseInputRow>): Generator<SqliteRow> {
521
+ static *getQueryData(results: Iterable<DatabaseInputRow>): Generator<SqliteInputRow> {
504
522
  for (let row of results) {
505
523
  yield toSyncRulesRow(row);
506
524
  }
@@ -628,7 +646,7 @@ WHERE oid = $1::regclass`,
628
646
  at += rows.length;
629
647
  this.metrics.getCounter(ReplicationMetric.ROWS_REPLICATED).add(rows.length);
630
648
 
631
- await touch();
649
+ this.touch();
632
650
  }
633
651
 
634
652
  // Important: flush before marking progress
@@ -737,6 +755,9 @@ WHERE oid = $1::regclass`,
737
755
  rows.map((r) => r.key)
738
756
  );
739
757
  }
758
+ // Even with resnapshot, we need to wait until we get a new consistent checkpoint
759
+ // after the snapshot, so we need to send a keepalive message.
760
+ await sendKeepAlive(db);
740
761
  } finally {
741
762
  await db.end();
742
763
  }
@@ -837,7 +858,6 @@ WHERE oid = $1::regclass`,
837
858
 
838
859
  async streamChanges(replicationConnection: pgwire.PgConnection) {
839
860
  // When changing any logic here, check /docs/wal-lsns.md.
840
-
841
861
  const { createEmptyCheckpoints } = await this.ensureStorageCompatibility();
842
862
 
843
863
  const replicationOptions: Record<string, string> = {
@@ -867,9 +887,6 @@ WHERE oid = $1::regclass`,
867
887
 
868
888
  this.startedStreaming = true;
869
889
 
870
- // Auto-activate as soon as initial replication is done
871
- await this.storage.autoActivate();
872
-
873
890
  let resnapshot: { table: storage.SourceTable; key: PrimaryKeyValue }[] = [];
874
891
 
875
892
  const markRecordUnavailable = (record: SaveUpdate) => {
@@ -886,7 +903,8 @@ WHERE oid = $1::regclass`,
886
903
  // The key should always be present in the "after" record.
887
904
  return;
888
905
  }
889
- key[name] = value;
906
+ // We just need a consistent representation of the primary key, and don't care about fixed quirks.
907
+ key[name] = applyValueContext(value, CompatibilityContext.FULL_BACKWARDS_COMPATIBILITY);
890
908
  }
891
909
  resnapshot.push({
892
910
  table: record.sourceTable,
@@ -911,7 +929,7 @@ WHERE oid = $1::regclass`,
911
929
  let count = 0;
912
930
 
913
931
  for await (const chunk of replicationStream.pgoutputDecode()) {
914
- await touch();
932
+ this.touch();
915
933
 
916
934
  if (this.abort_signal.aborted) {
917
935
  break;
@@ -1091,11 +1109,10 @@ WHERE oid = $1::regclass`,
1091
1109
  }
1092
1110
  return Date.now() - this.oldestUncommittedChange.getTime();
1093
1111
  }
1094
- }
1095
1112
 
1096
- async function touch() {
1097
- // FIXME: The hosted Kubernetes probe does not actually check the timestamp on this.
1098
- // FIXME: We need a timeout of around 5+ minutes in Kubernetes if we do start checking the timestamp,
1099
- // or reduce PING_INTERVAL here.
1100
- return container.probes.touch();
1113
+ private touch() {
1114
+ container.probes.touch().catch((e) => {
1115
+ this.logger.error(`Error touching probe`, e);
1116
+ });
1117
+ }
1101
1118
  }
@@ -315,7 +315,15 @@ export async function getDebugTableInfo(options: GetDebugTableInfoOptions): Prom
315
315
 
316
316
  const id_columns = id_columns_result?.replicationColumns ?? [];
317
317
 
318
- const sourceTable = new storage.SourceTable(0, connectionTag, relationId ?? 0, schema, name, id_columns, true);
318
+ const sourceTable = new storage.SourceTable({
319
+ id: 0,
320
+ connectionTag: connectionTag,
321
+ objectId: relationId ?? 0,
322
+ schema: schema,
323
+ name: name,
324
+ replicaIdColumns: id_columns,
325
+ snapshotComplete: true
326
+ });
319
327
 
320
328
  const syncData = syncRules.tableSyncsData(sourceTable);
321
329
  const syncParameters = syncRules.tableSyncsParameters(sourceTable);
@@ -342,7 +350,7 @@ export async function getDebugTableInfo(options: GetDebugTableInfoOptions): Prom
342
350
 
343
351
  let selectError = null;
344
352
  try {
345
- await lib_postgres.retriedQuery(db, `SELECT * FROM ${sourceTable.escapedIdentifier} LIMIT 1`);
353
+ await lib_postgres.retriedQuery(db, `SELECT * FROM ${sourceTable.qualifiedName} LIMIT 1`);
346
354
  } catch (e) {
347
355
  selectError = { level: 'fatal', message: e.message };
348
356
  }
@@ -1,13 +1,13 @@
1
1
  // Adapted from https://github.com/kagis/pgwire/blob/0dc927f9f8990a903f238737326e53ba1c8d094f/mod.js#L2218
2
2
 
3
3
  import * as pgwire from '@powersync/service-jpgwire';
4
- import { DatabaseInputRow, SqliteRow, toSyncRulesRow } from '@powersync/service-sync-rules';
4
+ import { DatabaseInputRow, SqliteInputRow, toSyncRulesRow } from '@powersync/service-sync-rules';
5
5
 
6
6
  /**
7
7
  * pgwire message -> SQLite row.
8
8
  * @param message
9
9
  */
10
- export function constructAfterRecord(message: pgwire.PgoutputInsert | pgwire.PgoutputUpdate): SqliteRow {
10
+ export function constructAfterRecord(message: pgwire.PgoutputInsert | pgwire.PgoutputUpdate): SqliteInputRow {
11
11
  const rawData = (message as any).afterRaw;
12
12
 
13
13
  const record = decodeTuple(message.relation, rawData);
@@ -18,7 +18,9 @@ export function constructAfterRecord(message: pgwire.PgoutputInsert | pgwire.Pgo
18
18
  * pgwire message -> SQLite row.
19
19
  * @param message
20
20
  */
21
- export function constructBeforeRecord(message: pgwire.PgoutputDelete | pgwire.PgoutputUpdate): SqliteRow | undefined {
21
+ export function constructBeforeRecord(
22
+ message: pgwire.PgoutputDelete | pgwire.PgoutputUpdate
23
+ ): SqliteInputRow | undefined {
22
24
  const rawData = (message as any).beforeRaw;
23
25
  if (rawData == null) {
24
26
  return undefined;
@@ -36,6 +36,8 @@ const checkpointTests = (factory: TestStorageFactory) => {
36
36
  await context.replicateSnapshot();
37
37
 
38
38
  context.startStreaming();
39
+ // Wait for a consistent checkpoint before we start.
40
+ await context.getCheckpoint();
39
41
  const storage = context.storage!;
40
42
 
41
43
  const controller = new AbortController();
@@ -87,7 +87,6 @@ function defineBatchTests(factory: storage.TestStorageFactory) {
87
87
  const start = Date.now();
88
88
 
89
89
  await context.replicateSnapshot();
90
- await context.storage!.autoActivate();
91
90
  context.startStreaming();
92
91
 
93
92
  const checkpoint = await context.getCheckpoint({ timeout: 100_000 });
@@ -1,6 +1,13 @@
1
1
  import { constructAfterRecord } from '@module/utils/pgwire_utils.js';
2
2
  import * as pgwire from '@powersync/service-jpgwire';
3
- import { SqliteRow } from '@powersync/service-sync-rules';
3
+ import {
4
+ applyRowContext,
5
+ CompatibilityContext,
6
+ SqliteInputRow,
7
+ DateTimeValue,
8
+ TimeValue,
9
+ CompatibilityEdition
10
+ } from '@powersync/service-sync-rules';
4
11
  import { describe, expect, test } from 'vitest';
5
12
  import { clearTestDb, connectPgPool, connectPgWire, TEST_URI } from './util.js';
6
13
  import { WalStream } from '@module/replication/WalStream.js';
@@ -158,9 +165,9 @@ VALUES(10, ARRAY['null']::TEXT[]);
158
165
  expect(transformed[2]).toMatchObject({
159
166
  id: 3n,
160
167
  date: '2023-03-06',
161
- time: '15:47:00',
162
- timestamp: '2023-03-06 15:47:00',
163
- timestamptz: '2023-03-06 13:47:00Z'
168
+ time: new TimeValue('15:47:00'),
169
+ timestamp: new DateTimeValue('2023-03-06T15:47:00.000000', '2023-03-06 15:47:00'),
170
+ timestamptz: new DateTimeValue('2023-03-06T13:47:00.000000Z', '2023-03-06 13:47:00Z')
164
171
  });
165
172
 
166
173
  expect(transformed[3]).toMatchObject({
@@ -175,26 +182,26 @@ VALUES(10, ARRAY['null']::TEXT[]);
175
182
  expect(transformed[4]).toMatchObject({
176
183
  id: 5n,
177
184
  date: '0000-01-01',
178
- time: '00:00:00',
179
- timestamp: '0000-01-01 00:00:00',
180
- timestamptz: '0000-01-01 00:00:00Z'
185
+ time: new TimeValue('00:00:00'),
186
+ timestamp: new DateTimeValue('0000-01-01T00:00:00'),
187
+ timestamptz: new DateTimeValue('0000-01-01T00:00:00Z')
181
188
  });
182
189
 
183
190
  expect(transformed[5]).toMatchObject({
184
191
  id: 6n,
185
- timestamp: '1970-01-01 00:00:00',
186
- timestamptz: '1970-01-01 00:00:00Z'
192
+ timestamp: new DateTimeValue('1970-01-01T00:00:00.000000', '1970-01-01 00:00:00'),
193
+ timestamptz: new DateTimeValue('1970-01-01T00:00:00.000000Z', '1970-01-01 00:00:00Z')
187
194
  });
188
195
 
189
196
  expect(transformed[6]).toMatchObject({
190
197
  id: 7n,
191
- timestamp: '9999-12-31 23:59:59',
192
- timestamptz: '9999-12-31 23:59:59Z'
198
+ timestamp: new DateTimeValue('9999-12-31T23:59:59'),
199
+ timestamptz: new DateTimeValue('9999-12-31T23:59:59Z')
193
200
  });
194
201
 
195
202
  expect(transformed[7]).toMatchObject({
196
203
  id: 8n,
197
- timestamptz: '0022-02-03 09:13:14Z'
204
+ timestamptz: new DateTimeValue('0022-02-03T09:13:14.000000Z', '0022-02-03 09:13:14Z')
198
205
  });
199
206
 
200
207
  expect(transformed[8]).toMatchObject({
@@ -235,8 +242,8 @@ VALUES(10, ARRAY['null']::TEXT[]);
235
242
  id: 3n,
236
243
  date: `["2023-03-06"]`,
237
244
  time: `["15:47:00"]`,
238
- timestamp: `["2023-03-06 15:47:00"]`,
239
- timestamptz: `["2023-03-06 13:47:00Z","2023-03-06 13:47:00.12345Z"]`
245
+ timestamp: '["2023-03-06 15:47:00"]',
246
+ timestamptz: '["2023-03-06 13:47:00Z","2023-03-06 13:47:00.12345Z"]'
240
247
  });
241
248
 
242
249
  expect(transformed[3]).toMatchObject({
@@ -339,7 +346,7 @@ VALUES(10, ARRAY['null']::TEXT[]);
339
346
 
340
347
  const transformed = [
341
348
  ...WalStream.getQueryData(pgwire.pgwireRows(await db.query(`SELECT * FROM test_data_arrays ORDER BY id`)))
342
- ];
349
+ ].map((e) => applyRowContext(e, CompatibilityContext.FULL_BACKWARDS_COMPATIBILITY));
343
350
 
344
351
  checkResultArrays(transformed);
345
352
  } finally {
@@ -415,7 +422,7 @@ VALUES(10, ARRAY['null']::TEXT[]);
415
422
  const transformed = await getReplicationTx(replicationStream);
416
423
  await pg.end();
417
424
 
418
- checkResultArrays(transformed);
425
+ checkResultArrays(transformed.map((e) => applyRowContext(e, CompatibilityContext.FULL_BACKWARDS_COMPATIBILITY)));
419
426
  } finally {
420
427
  await db.end();
421
428
  }
@@ -430,13 +437,46 @@ VALUES(10, ARRAY['null']::TEXT[]);
430
437
  // const schema = await api.getConnectionsSchema(db);
431
438
  // expect(schema).toMatchSnapshot();
432
439
  });
440
+
441
+ test('date formats', async () => {
442
+ const db = await connectPgWire();
443
+ try {
444
+ await setupTable(db);
445
+
446
+ await db.query(`
447
+ INSERT INTO test_data(id, time, timestamp, timestamptz) VALUES (1, '17:42:01.12', '2023-03-06 15:47:12.4', '2023-03-06 15:47+02');
448
+ `);
449
+
450
+ const [row] = [
451
+ ...WalStream.getQueryData(
452
+ pgwire.pgwireRows(await db.query(`SELECT time, timestamp, timestamptz FROM test_data`))
453
+ )
454
+ ];
455
+
456
+ const oldFormat = applyRowContext(row, CompatibilityContext.FULL_BACKWARDS_COMPATIBILITY);
457
+ expect(oldFormat).toMatchObject({
458
+ time: '17:42:01.12',
459
+ timestamp: '2023-03-06 15:47:12.4',
460
+ timestamptz: '2023-03-06 13:47:00Z'
461
+ });
462
+
463
+ const newFormat = applyRowContext(row, new CompatibilityContext(CompatibilityEdition.SYNC_STREAMS));
464
+ expect(newFormat).toMatchObject({
465
+ time: '17:42:01.120000',
466
+ timestamp: '2023-03-06T15:47:12.400000',
467
+ timestamptz: '2023-03-06T13:47:00.000000Z'
468
+ });
469
+ } finally {
470
+ await db.end();
471
+ }
472
+ });
433
473
  });
434
474
 
435
475
  /**
436
476
  * Return all the inserts from the first transaction in the replication stream.
437
477
  */
438
478
  async function getReplicationTx(replicationStream: pgwire.ReplicationStream) {
439
- let transformed: SqliteRow[] = [];
479
+ let transformed: SqliteInputRow[] = [];
440
480
  for await (const batch of replicationStream.pgoutputDecode()) {
441
481
  for (const msg of batch.messages) {
442
482
  if (msg.tag == 'insert') {
@@ -97,7 +97,6 @@ bucket_definitions:
97
97
  await pool.query(`ALTER TABLE test_data REPLICA IDENTITY FULL`);
98
98
 
99
99
  await walStream.initReplication(replicationConnection);
100
- await storage.autoActivate();
101
100
  let abort = false;
102
101
  streamPromise = walStream.streamChanges(replicationConnection).finally(() => {
103
102
  abort = true;
@@ -348,7 +347,6 @@ bucket_definitions:
348
347
  let initialReplicationDone = false;
349
348
  streamPromise = (async () => {
350
349
  await walStream.initReplication(replicationConnection);
351
- await storage.autoActivate();
352
350
  initialReplicationDone = true;
353
351
  await walStream.streamChanges(replicationConnection);
354
352
  })()
package/test/src/util.ts CHANGED
@@ -90,10 +90,8 @@ export async function getClientCheckpoint(
90
90
  while (Date.now() - start < timeout) {
91
91
  const storage = await storageFactory.getActiveStorage();
92
92
  const cp = await storage?.getCheckpoint();
93
- if (cp == null) {
94
- throw new Error('No sync rules available');
95
- }
96
- if (cp.lsn && cp.lsn >= lsn) {
93
+
94
+ if (cp?.lsn != null && cp.lsn >= lsn) {
97
95
  logger.info(`Got write checkpoint: ${lsn} : ${cp.checkpoint}`);
98
96
  return cp.checkpoint;
99
97
  }