@effect-app/infra 4.0.0-beta.85 → 4.0.0-beta.86

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 CHANGED
@@ -1,5 +1,12 @@
1
1
  # @effect-app/infra
2
2
 
3
+ ## 4.0.0-beta.86
4
+
5
+ ### Patch Changes
6
+
7
+ - 70f1f27: Fix store seeding: break circular dependency where bulkSet re-entered seedNamespace, and add explicit seed markers to SQL/Pg stores using a dedicated `__seed__` namespace.
8
+ - effect-app@4.0.0-beta.86
9
+
3
10
  ## 4.0.0-beta.85
4
11
 
5
12
  ### Patch Changes
@@ -1 +1 @@
1
- {"version":3,"file":"Cosmos.d.ts","sourceRoot":"","sources":["../../src/Store/Cosmos.ts"],"names":[],"mappings":"AAEA,OAAO,EAA2B,KAAK,EAA8D,MAAM,YAAY,CAAA;AAUvH,OAAO,EAA8C,KAAK,aAAa,EAAgC,UAAU,EAAE,MAAM,cAAc,CAAA;AAwgBvI,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,aAAa,yCAIlD"}
1
+ {"version":3,"file":"Cosmos.d.ts","sourceRoot":"","sources":["../../src/Store/Cosmos.ts"],"names":[],"mappings":"AAEA,OAAO,EAA2B,KAAK,EAA8D,MAAM,YAAY,CAAA;AAUvH,OAAO,EAA8C,KAAK,aAAa,EAAgC,UAAU,EAAE,MAAM,cAAc,CAAA;AA6gBvI,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,aAAa,yCAIlD"}
@@ -69,7 +69,7 @@ function makeCosmosStore({ prefix }) {
69
69
  .pipe(Effect.flatMap((marker) => {
70
70
  if (Option.isSome(marker))
71
71
  return Effect.void;
72
- return InfraLogger.logInfo(`Creating mock data for ${name} (namespace: ${ns})`).pipe(Effect.andThen(seed), Effect.flatMap((m) => Effect.flatMapOption(Effect.succeed(toNonEmptyArray([...m])), (a) => s.bulkSet(a).pipe(Effect.orDie, Effect.delay(Duration.millis(1100))))), Effect.andThen(Effect.promise(() => container.items.create({
72
+ return InfraLogger.logInfo(`Creating mock data for ${name} (namespace: ${ns})`).pipe(Effect.andThen(seed), Effect.flatMap((m) => Effect.flatMapOption(Effect.succeed(toNonEmptyArray([...m])), (a) => bulkSetInternal(a, ns).pipe(Effect.orDie, Effect.delay(Duration.millis(1100))))), Effect.andThen(Effect.promise(() => container.items.create({
73
73
  _partitionKey: markerId,
74
74
  id: markerId,
75
75
  ttl: -1
@@ -88,9 +88,8 @@ function makeCosmosStore({ prefix }) {
88
88
  });
89
89
  const resolveAndSeed = resolveNamespace.pipe(Effect.tap((ns) => seedNamespace(ns)));
90
90
  const resolvePartitionKeyAndSeed = Effect.map(resolveAndSeed, (ns) => `${nsPrefix(ns)}${basePartitionKey}`);
91
- const bulkSet = (items) => Effect
91
+ const bulkSetInternal = (items, ns) => Effect
92
92
  .gen(function* () {
93
- const ns = yield* resolveAndSeed;
94
93
  // TODO: disable batching if need atomicity
95
94
  // we delay and batch to keep low amount of RUs
96
95
  const b = [...items]
@@ -152,10 +151,10 @@ function makeCosmosStore({ prefix }) {
152
151
  }));
153
152
  }))));
154
153
  return batchResult.flat();
155
- })
156
- .pipe(Effect.withSpan("Cosmos.bulkSet [effect-app/infra/Store]", {
154
+ });
155
+ const bulkSet = (items) => resolveAndSeed.pipe(Effect.flatMap((ns) => bulkSetInternal(items, ns).pipe(Effect.withSpan("Cosmos.bulkSet [effect-app/infra/Store]", {
157
156
  attributes: { "repository.container_id": containerId, "repository.model_name": name }
158
- }, { captureStackTrace: false }));
157
+ }, { captureStackTrace: false }))));
159
158
  const batchSet = (items) => {
160
159
  return resolveAndSeed
161
160
  .pipe(Effect.flatMap((ns) => Effect
@@ -338,4 +337,4 @@ export function CosmosStoreLayer(cfg) {
338
337
  .toLayer(makeCosmosStore(cfg))
339
338
  .pipe(Layer.provide(CosmosClientLayer(Redacted.value(cfg.url), cfg.dbName)));
340
339
  }
341
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29zbW9zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL1N0b3JlL0Nvc21vcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQ7QUFFdkQsT0FBTyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBOEIsTUFBTSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBQ3ZILE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUNsRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE9BQU8sRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBQzFELE9BQU8sRUFBRSxZQUFZLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQTtBQUM5RSxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFDN0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUcxQyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsUUFBUSxFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFDcEUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUNyQyxPQUFPLEVBQWdHLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUV2SSxNQUFNLFNBQVMsR0FDYixDQUEyRCxLQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQy9HLEdBQUcsQ0FBQztJQUNKLEVBQUU7Q0FDSCxDQUFDLENBQUE7QUFDSixNQUFNLGdCQUFnQixHQUNwQixDQUEyRCxLQUFZLEVBQUUsRUFBRSxDQUMzRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUErRCxFQUFFLEVBQUUsQ0FDNUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENB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
340
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29zbW9zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL1N0b3JlL0Nvc21vcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQ7QUFFdkQsT0FBTyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBOEIsTUFBTSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBQ3ZILE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUNsRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE9BQU8sRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBQzFELE9BQU8sRUFBRSxZQUFZLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQTtBQUM5RSxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFDN0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUcxQyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsUUFBUSxFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFDcEUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUNyQyxPQUFPLEVBQWdHLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUV2SSxNQUFNLFNBQVMsR0FDYixDQUEyRCxLQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQy9HLEdBQUcsQ0FBQztJQUNKLEVBQUU7Q0FDSCxDQUFDLENBQUE7QUFDSixNQUFNLGdCQUFnQixHQUNwQixDQUEyRCxLQUFZLEVBQUUsRUFBRSxDQUMzRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUErRCxFQUFFLEVBQUUsQ0FDNUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENB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
@@ -1 +1 @@
1
- {"version":3,"file":"Pg.d.ts","sourceRoot":"","sources":["../../../src/Store/SQL/Pg.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAK/C,OAAO,EAA8C,KAAK,aAAa,EAAgC,UAAU,EAAE,MAAM,eAAe,CAAA;AAqTxI,wBAAgB,YAAY,CAAC,GAAG,EAAE,aAAa,wEAG9C"}
1
+ {"version":3,"file":"Pg.d.ts","sourceRoot":"","sources":["../../../src/Store/SQL/Pg.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAK/C,OAAO,EAA8C,KAAK,aAAa,EAAgC,UAAU,EAAE,MAAM,eAAe,CAAA;AA2TxI,wBAAgB,YAAY,CAAC,GAAG,EAAE,aAAa,wEAG9C"}
@@ -51,15 +51,47 @@ function makePgStore({ prefix }) {
51
51
  return { id, _etag: newE._etag, data, item: newE };
52
52
  };
53
53
  const exec = (query, params) => sql.unsafe(query, params).pipe(Effect.orDie);
54
+ const seedMarkerId = `__seed_marker__`;
55
+ const setInternal = (e, ns) => Effect.gen(function* () {
56
+ const row = toRow(e);
57
+ if (e._etag) {
58
+ yield* exec(`UPDATE "${tableName}" SET _etag = $1, data = $2 WHERE id = $3 AND _etag = $4 AND _namespace = $5`, [row._etag, row.data, row.id, e._etag, ns]);
59
+ const existing = yield* exec(`SELECT _etag FROM "${tableName}" WHERE id = $1 AND _namespace = $2`, [row.id, ns]);
60
+ const current = existing[0];
61
+ if (!current || current._etag !== row._etag) {
62
+ if (current) {
63
+ return yield* new OptimisticConcurrencyException({
64
+ type: name,
65
+ id: row.id,
66
+ current: current._etag,
67
+ found: e._etag,
68
+ code: 412
69
+ });
70
+ }
71
+ return yield* new OptimisticConcurrencyException({
72
+ type: name,
73
+ id: row.id,
74
+ current: "",
75
+ found: e._etag,
76
+ code: 404
77
+ });
78
+ }
79
+ }
80
+ else {
81
+ yield* exec(`INSERT INTO "${tableName}" (id, _namespace, _etag, data) VALUES ($1, $2, $3, $4)`, [row.id, ns, row._etag, row.data]);
82
+ }
83
+ return row.item;
84
+ });
85
+ const bulkSetInternal = (items, ns) => sql
86
+ .withTransaction(Effect.forEach(items, (e) => setInternal(e, ns)))
87
+ .pipe(Effect.orDie, Effect.map((_) => _));
54
88
  const ctx = yield* Effect.context();
55
89
  const seedCache = new Map();
56
- const makeSeedEffect = (ns) => exec(`SELECT COUNT(*) as cnt FROM "${tableName}" WHERE _namespace = $1`, [ns])
90
+ const makeSeedEffect = (ns) => exec(`SELECT id FROM "${tableName}" WHERE id = $1 AND _namespace = $2`, [seedMarkerId, `__seed__::${ns}`])
57
91
  .pipe(Effect.flatMap((existing) => {
58
- const count = Number(existing[0]?.cnt ?? 0);
59
- if (count === 0) {
60
- return InfraLogger.logInfo(`Seeding data for ${name} (namespace: ${ns})`).pipe(Effect.andThen(seed), Effect.flatMap((items) => Effect.flatMapOption(Effect.succeed(toNonEmptyArray([...items])), (a) => s.bulkSet(a).pipe(Effect.orDie))), Effect.provide(ctx), Effect.orDie);
61
- }
62
- return Effect.void;
92
+ if (existing.length > 0)
93
+ return Effect.void;
94
+ return InfraLogger.logInfo(`Seeding data for ${name} (namespace: ${ns})`).pipe(Effect.andThen(seed), Effect.flatMap((items) => Effect.flatMapOption(Effect.succeed(toNonEmptyArray([...items])), (a) => bulkSetInternal(a, ns))), Effect.andThen(exec(`INSERT INTO "${tableName}" (id, _namespace, _etag, data) VALUES ($1, $2, $3, $4)`, [seedMarkerId, `__seed__::${ns}`, null, JSON.stringify({ _marker: true })])), Effect.provide(ctx), Effect.orDie);
63
95
  }));
64
96
  const seedNamespace = Effect.fn("seedNamespace")(function* (ns) {
65
97
  if (!seed)
@@ -119,50 +151,15 @@ function makePgStore({ prefix }) {
119
151
  attributes: { "repository.table_name": tableName, "repository.model_name": name }
120
152
  }, { captureStackTrace: false }))));
121
153
  },
122
- set: (e) => resolveAndSeed.pipe(Effect.flatMap((ns) => Effect
123
- .gen(function* () {
124
- const row = toRow(e);
125
- if (e._etag) {
126
- yield* exec(`UPDATE "${tableName}" SET _etag = $1, data = $2 WHERE id = $3 AND _etag = $4 AND _namespace = $5`, [row._etag, row.data, row.id, e._etag, ns]);
127
- const existing = yield* exec(`SELECT _etag FROM "${tableName}" WHERE id = $1 AND _namespace = $2`, [row.id, ns]);
128
- const current = existing[0];
129
- if (!current || current._etag !== row._etag) {
130
- if (current) {
131
- return yield* new OptimisticConcurrencyException({
132
- type: name,
133
- id: row.id,
134
- current: current._etag,
135
- found: e._etag,
136
- code: 412
137
- });
138
- }
139
- return yield* new OptimisticConcurrencyException({
140
- type: name,
141
- id: row.id,
142
- current: "",
143
- found: e._etag,
144
- code: 404
145
- });
146
- }
147
- }
148
- else {
149
- yield* exec(`INSERT INTO "${tableName}" (id, _namespace, _etag, data) VALUES ($1, $2, $3, $4)`, [row.id, ns, row._etag, row.data]);
150
- }
151
- return row.item;
152
- })
153
- .pipe(Effect.withSpan("PgSQL.set [effect-app/infra/Store]", {
154
+ set: (e) => resolveAndSeed.pipe(Effect.flatMap((ns) => setInternal(e, ns).pipe(Effect.withSpan("PgSQL.set [effect-app/infra/Store]", {
154
155
  attributes: { "repository.table_name": tableName, "repository.model_name": name, id: e[idKey] }
155
156
  }, { captureStackTrace: false })))),
156
- batchSet: (items) => sql
157
- .withTransaction(Effect.forEach(items, (e) => s.set(e)))
158
- .pipe(Effect.orDie, Effect.map((_) => _), Effect.withSpan("PgSQL.batchSet [effect-app/infra/Store]", {
157
+ batchSet: (items) => resolveAndSeed.pipe(Effect.flatMap((ns) => bulkSetInternal(items, ns).pipe(Effect.withSpan("PgSQL.batchSet [effect-app/infra/Store]", {
159
158
  attributes: { "repository.table_name": tableName, "repository.model_name": name }
160
- }, { captureStackTrace: false })),
161
- bulkSet: (items) => sql
162
- .withTransaction(Effect.forEach(items, (e) => s.set(e)))
163
- .pipe(Effect.orDie, Effect.map((_) => _), Effect.withSpan("PgSQL.bulkSet [effect-app/infra/Store]", {
159
+ }, { captureStackTrace: false })))),
160
+ bulkSet: (items) => resolveAndSeed.pipe(Effect.flatMap((ns) => bulkSetInternal(items, ns).pipe(Effect.withSpan("PgSQL.bulkSet [effect-app/infra/Store]", {
164
161
  attributes: { "repository.table_name": tableName, "repository.model_name": name }
165
- }, { captureStackTrace: false })),
162
+ }, { captureStackTrace: false })))),
166
163
  batchRemove: (ids) => {
167
164
  const placeholders = ids.map((_, i) => `$${i + 1}`).join(", ");
168
165
  const nsPlaceholder = `$${ids.length + 1}`;
@@ -186,4 +183,4 @@ export function PgStoreLayer(cfg) {
186
183
  return StoreMaker
187
184
  .toLayer(makePgStore(cfg));
188
185
  }
189
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvU3RvcmUvU1FML1BnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHVEQUF1RDtBQUV2RCxPQUFPLEVBQUUsTUFBTSxFQUE4QixNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBQy9FLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUNsRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFDL0MsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFDaEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBRTdDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFDdEMsT0FBTyxFQUFnRyxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDeEksT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUN0QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUVwRSxNQUFNLFFBQVEsR0FBRyxDQUNmLEdBQXdELEVBQ3hELEtBQWtCLEVBQ2xCLGFBQStCLEVBQ0EsRUFBRTtJQUNqQyxNQUFNLElBQUksR0FBRyxDQUFDLE9BQU8sR0FBRyxDQUFDLElBQUksS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFXLENBQUE7SUFDdkYsT0FBTyxFQUFFLEdBQUcsYUFBYSxFQUFFLEdBQUcsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLEtBQUssSUFBSSxTQUFTLEVBQW1DLENBQUE7QUFDdkgs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
186
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvU3RvcmUvU1FML1BnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHVEQUF1RDtBQUV2RCxPQUFPLEVBQUUsTUFBTSxFQUE4QixNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBQy9FLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUNsRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFDL0MsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFDaEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBRTdDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFDdEMsT0FBTyxFQUFnRyxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDeEksT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUN0QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUVwRSxNQUFNLFFBQVEsR0FBRyxDQUNmLEdBQXdELEVBQ3hELEtBQWtCLEVBQ2xCLGFBQStCLEVBQ0EsRUFBRTtJQUNqQyxNQUFNLElBQUksR0FBRyxDQUFDLE9BQU8sR0FBRyxDQUFDLElBQUksS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFXLENBQUE7SUFDdkYsT0FBTyxFQUFFLEdBQUcsYUFBYSxFQUFFLEdBQUcsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLEtBQUssSUFBSSxTQUFTLEVBQW1DLENBQUE7QUFDdkgs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
@@ -1 +1 @@
1
- {"version":3,"file":"SQL.d.ts","sourceRoot":"","sources":["../../src/Store/SQL.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAG/C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AAE3D,OAAO,EAAmB,KAAK,oBAAoB,EAAE,KAAK,aAAa,EAAgC,UAAU,EAAE,MAAM,cAAc,CAAA;AAIvI,gBAAgB;AAChB,eAAO,MAAM,QAAQ,GAAI,OAAO,SAAS,WAAW,EAClD,KAAK;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EACvD,OAAO,WAAW,EAClB,eAAe,OAAO,CAAC,OAAO,CAAC,KAC9B,oBAAoB,CAAC,OAAO,CAG9B,CAAA;AAuUD,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,aAAa,wEAGlD"}
1
+ {"version":3,"file":"SQL.d.ts","sourceRoot":"","sources":["../../src/Store/SQL.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAG/C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AAE3D,OAAO,EAAmB,KAAK,oBAAoB,EAAE,KAAK,aAAa,EAAgC,UAAU,EAAE,MAAM,cAAc,CAAA;AAIvI,gBAAgB;AAChB,eAAO,MAAM,QAAQ,GAAI,OAAO,SAAS,WAAW,EAClD,KAAK;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EACvD,OAAO,WAAW,EAClB,eAAe,OAAO,CAAC,OAAO,CAAC,KAC9B,oBAAoB,CAAC,OAAO,CAG9B,CAAA;AA6UD,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,aAAa,wEAGlD"}
package/dist/Store/SQL.js CHANGED
@@ -60,15 +60,47 @@ function makeSQLStoreInt(dialect, jsonColumnType) {
60
60
  return { id, _etag: newE._etag, data, item: newE };
61
61
  };
62
62
  const exec = (query, params) => sql.unsafe(query, params).pipe(Effect.orDie);
63
+ const seedMarkerId = `__seed_marker__`;
64
+ const setInternal = (e, ns) => Effect.gen(function* () {
65
+ const row = toRow(e);
66
+ if (e._etag) {
67
+ yield* exec(`UPDATE "${tableName}" SET _etag = ?, data = ? WHERE id = ? AND _etag = ? AND _namespace = ?`, [row._etag, row.data, row.id, e._etag, ns]);
68
+ const existing = yield* exec(`SELECT _etag FROM "${tableName}" WHERE id = ? AND _namespace = ?`, [row.id, ns]);
69
+ const current = existing[0];
70
+ if (!current || current._etag !== row._etag) {
71
+ if (current) {
72
+ return yield* new OptimisticConcurrencyException({
73
+ type: name,
74
+ id: row.id,
75
+ current: current._etag,
76
+ found: e._etag,
77
+ code: 412
78
+ });
79
+ }
80
+ return yield* new OptimisticConcurrencyException({
81
+ type: name,
82
+ id: row.id,
83
+ current: "",
84
+ found: e._etag,
85
+ code: 404
86
+ });
87
+ }
88
+ }
89
+ else {
90
+ yield* exec(`INSERT INTO "${tableName}" (id, _namespace, _etag, data) VALUES (?, ?, ?, ?)`, [row.id, ns, row._etag, row.data]);
91
+ }
92
+ return row.item;
93
+ });
94
+ const bulkSetInternal = (items, ns) => sql
95
+ .withTransaction(Effect.forEach(items, (e) => setInternal(e, ns)))
96
+ .pipe(Effect.orDie, Effect.map((_) => _));
63
97
  const ctx = yield* Effect.context();
64
98
  const seedCache = new Map();
65
- const makeSeedEffect = (ns) => exec(`SELECT COUNT(*) as cnt FROM "${tableName}" WHERE _namespace = ?`, [ns])
99
+ const makeSeedEffect = (ns) => exec(`SELECT id FROM "${tableName}" WHERE id = ? AND _namespace = ?`, [seedMarkerId, `__seed__::${ns}`])
66
100
  .pipe(Effect.flatMap((existing) => {
67
- const count = existing[0]?.cnt ?? 0;
68
- if (count === 0) {
69
- return InfraLogger.logInfo(`Seeding data for ${name} (namespace: ${ns})`).pipe(Effect.andThen(seed), Effect.flatMap((items) => Effect.flatMapOption(Effect.succeed(toNonEmptyArray([...items])), (a) => s.bulkSet(a).pipe(Effect.orDie))), Effect.provide(ctx), Effect.orDie);
70
- }
71
- return Effect.void;
101
+ if (existing.length > 0)
102
+ return Effect.void;
103
+ return InfraLogger.logInfo(`Seeding data for ${name} (namespace: ${ns})`).pipe(Effect.andThen(seed), Effect.flatMap((items) => Effect.flatMapOption(Effect.succeed(toNonEmptyArray([...items])), (a) => bulkSetInternal(a, ns))), Effect.andThen(exec(`INSERT INTO "${tableName}" (id, _namespace, _etag, data) VALUES (?, ?, ?, ?)`, [seedMarkerId, `__seed__::${ns}`, null, JSON.stringify({ _marker: true })])), Effect.provide(ctx), Effect.orDie);
72
104
  }));
73
105
  const seedNamespace = Effect.fn("seedNamespace")(function* (ns) {
74
106
  if (!seed)
@@ -146,50 +178,15 @@ function makeSQLStoreInt(dialect, jsonColumnType) {
146
178
  attributes: { "repository.table_name": tableName, "repository.model_name": name }
147
179
  }, { captureStackTrace: false }))));
148
180
  },
149
- set: (e) => resolveAndSeed.pipe(Effect.flatMap((ns) => Effect
150
- .gen(function* () {
151
- const row = toRow(e);
152
- if (e._etag) {
153
- yield* exec(`UPDATE "${tableName}" SET _etag = ?, data = ? WHERE id = ? AND _etag = ? AND _namespace = ?`, [row._etag, row.data, row.id, e._etag, ns]);
154
- const existing = yield* exec(`SELECT _etag FROM "${tableName}" WHERE id = ? AND _namespace = ?`, [row.id, ns]);
155
- const current = existing[0];
156
- if (!current || current._etag !== row._etag) {
157
- if (current) {
158
- return yield* new OptimisticConcurrencyException({
159
- type: name,
160
- id: row.id,
161
- current: current._etag,
162
- found: e._etag,
163
- code: 412
164
- });
165
- }
166
- return yield* new OptimisticConcurrencyException({
167
- type: name,
168
- id: row.id,
169
- current: "",
170
- found: e._etag,
171
- code: 404
172
- });
173
- }
174
- }
175
- else {
176
- yield* exec(`INSERT INTO "${tableName}" (id, _namespace, _etag, data) VALUES (?, ?, ?, ?)`, [row.id, ns, row._etag, row.data]);
177
- }
178
- return row.item;
179
- })
180
- .pipe(Effect.withSpan("SQL.set [effect-app/infra/Store]", {
181
+ set: (e) => resolveAndSeed.pipe(Effect.flatMap((ns) => setInternal(e, ns).pipe(Effect.withSpan("SQL.set [effect-app/infra/Store]", {
181
182
  attributes: { "repository.table_name": tableName, "repository.model_name": name, id: e[idKey] }
182
183
  }, { captureStackTrace: false })))),
183
- batchSet: (items) => sql
184
- .withTransaction(Effect.forEach(items, (e) => s.set(e)))
185
- .pipe(Effect.orDie, Effect.map((_) => _), Effect.withSpan("SQL.batchSet [effect-app/infra/Store]", {
184
+ batchSet: (items) => resolveAndSeed.pipe(Effect.flatMap((ns) => bulkSetInternal(items, ns).pipe(Effect.withSpan("SQL.batchSet [effect-app/infra/Store]", {
186
185
  attributes: { "repository.table_name": tableName, "repository.model_name": name }
187
- }, { captureStackTrace: false })),
188
- bulkSet: (items) => sql
189
- .withTransaction(Effect.forEach(items, (e) => s.set(e)))
190
- .pipe(Effect.orDie, Effect.map((_) => _), Effect.withSpan("SQL.bulkSet [effect-app/infra/Store]", {
186
+ }, { captureStackTrace: false })))),
187
+ bulkSet: (items) => resolveAndSeed.pipe(Effect.flatMap((ns) => bulkSetInternal(items, ns).pipe(Effect.withSpan("SQL.bulkSet [effect-app/infra/Store]", {
191
188
  attributes: { "repository.table_name": tableName, "repository.model_name": name }
192
- }, { captureStackTrace: false })),
189
+ }, { captureStackTrace: false })))),
193
190
  batchRemove: (ids) => {
194
191
  const placeholders = ids.map(() => "?").join(", ");
195
192
  return resolveAndSeed.pipe(Effect.flatMap((ns) => exec(`DELETE FROM "${tableName}" WHERE id IN (${placeholders}) AND _namespace = ?`, [...ids, ns])
@@ -212,4 +209,4 @@ export function SQLiteStoreLayer(cfg) {
212
209
  return StoreMaker
213
210
  .toLayer(makeSQLStoreInt(sqliteDialect, "JSON")(cfg));
214
211
  }
215
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU1FMLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL1N0b3JlL1NRTC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQ7QUFFdkQsT0FBTyxFQUFFLE1BQU0sRUFBOEIsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUMvRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0JBQWtCLENBQUE7QUFDbEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBQy9DLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUM3RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBRTFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFDckMsT0FBTyxFQUFnRyxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFDdkksT0FBTyxFQUFFLGtCQUFrQixFQUFFLFFBQVEsRUFBbUIsYUFBYSxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFDN0YsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUVyQyxnQkFBZ0I7QUFDaEIsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLENBQ3RCLEdBQXVELEVBQ3ZELEtBQWtCLEVBQ2xCLGFBQStCLEVBQ0EsRUFBRTtJQUNqQyxNQUFNLElBQUksR0FBRyxDQUFDLE9BQU8sR0FBRyxDQUFDLElBQUksS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFXLENBQUE7SUFDdkYsT0FBTyxFQUFFLEdBQUcsYUFBYSxFQUFFLEdBQUcsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLEtBQUssSUFBSSxTQUFT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
212
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU1FMLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL1N0b3JlL1NRTC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQ7QUFFdkQsT0FBTyxFQUFFLE1BQU0sRUFBOEIsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUMvRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0JBQWtCLENBQUE7QUFDbEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBQy9DLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUM3RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBRTFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFDckMsT0FBTyxFQUFnRyxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFDdkksT0FBTyxFQUFFLGtCQUFrQixFQUFFLFFBQVEsRUFBbUIsYUFBYSxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFDN0YsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUVyQyxnQkFBZ0I7QUFDaEIsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLENBQ3RCLEdBQXVELEVBQ3ZELEtBQWtCLEVBQ2xCLGFBQStCLEVBQ0EsRUFBRTtJQUNqQyxNQUFNLElBQUksR0FBRyxDQUFDLE9BQU8sR0FBRyxDQUFDLElBQUksS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFXLENBQUE7SUFDdkYsT0FBTyxFQUFFLEdBQUcsYUFBYSxFQUFFLEdBQUcsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLEtBQUssSUFBSSxTQUFT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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@effect-app/infra",
3
- "version": "4.0.0-beta.85",
3
+ "version": "4.0.0-beta.86",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "dependencies": {
@@ -13,7 +13,7 @@
13
13
  "proper-lockfile": "^4.1.2",
14
14
  "pure-rand": "7.0.1",
15
15
  "query-string": "^9.3.1",
16
- "effect-app": "4.0.0-beta.85"
16
+ "effect-app": "4.0.0-beta.86"
17
17
  },
18
18
  "devDependencies": {
19
19
  "@azure/cosmos": "^4.9.2",
@@ -95,7 +95,7 @@ function makeCosmosStore({ prefix }: StorageConfig) {
95
95
  Effect.flatMapOption(
96
96
  Effect.succeed(toNonEmptyArray([...m])),
97
97
  (a) =>
98
- s.bulkSet(a).pipe(
98
+ bulkSetInternal(a, ns).pipe(
99
99
  Effect.orDie,
100
100
  Effect.delay(Duration.millis(1100))
101
101
  )
@@ -130,10 +130,9 @@ function makeCosmosStore({ prefix }: StorageConfig) {
130
130
  )
131
131
  const resolvePartitionKeyAndSeed = Effect.map(resolveAndSeed, (ns) => `${nsPrefix(ns)}${basePartitionKey}`)
132
132
 
133
- const bulkSet = (items: NonEmptyReadonlyArray<PM>) =>
133
+ const bulkSetInternal = (items: NonEmptyReadonlyArray<PM>, ns: string) =>
134
134
  Effect
135
135
  .gen(function*() {
136
- const ns = yield* resolveAndSeed
137
136
  // TODO: disable batching if need atomicity
138
137
  // we delay and batch to keep low amount of RUs
139
138
  const b = [...items]
@@ -232,9 +231,15 @@ function makeCosmosStore({ prefix }: StorageConfig) {
232
231
 
233
232
  return batchResult.flat() as unknown as NonEmptyReadonlyArray<Encoded>
234
233
  })
235
- .pipe(Effect.withSpan("Cosmos.bulkSet [effect-app/infra/Store]", {
236
- attributes: { "repository.container_id": containerId, "repository.model_name": name }
237
- }, { captureStackTrace: false }))
234
+
235
+ const bulkSet = (items: NonEmptyReadonlyArray<PM>) =>
236
+ resolveAndSeed.pipe(Effect.flatMap((ns) =>
237
+ bulkSetInternal(items, ns).pipe(
238
+ Effect.withSpan("Cosmos.bulkSet [effect-app/infra/Store]", {
239
+ attributes: { "repository.container_id": containerId, "repository.model_name": name }
240
+ }, { captureStackTrace: false })
241
+ )
242
+ ))
238
243
 
239
244
  const batchSet = (items: NonEmptyReadonlyArray<PM>) => {
240
245
  return resolveAndSeed
@@ -78,30 +78,83 @@ function makePgStore({ prefix }: StorageConfig) {
78
78
  const exec = (query: string, params?: readonly unknown[]) =>
79
79
  sql.unsafe(query, params as any).pipe(Effect.orDie)
80
80
 
81
+ const seedMarkerId = `__seed_marker__`
82
+
83
+ const setInternal = (e: PM, ns: string) =>
84
+ Effect.gen(function*() {
85
+ const row = toRow(e)
86
+ if (e._etag) {
87
+ yield* exec(
88
+ `UPDATE "${tableName}" SET _etag = $1, data = $2 WHERE id = $3 AND _etag = $4 AND _namespace = $5`,
89
+ [row._etag, row.data, row.id, e._etag, ns]
90
+ )
91
+ const existing = yield* exec(
92
+ `SELECT _etag FROM "${tableName}" WHERE id = $1 AND _namespace = $2`,
93
+ [row.id, ns]
94
+ )
95
+ const current = (existing as any[])[0]
96
+ if (!current || current._etag !== row._etag) {
97
+ if (current) {
98
+ return yield* new OptimisticConcurrencyException({
99
+ type: name,
100
+ id: row.id,
101
+ current: current._etag,
102
+ found: e._etag,
103
+ code: 412
104
+ })
105
+ }
106
+ return yield* new OptimisticConcurrencyException({
107
+ type: name,
108
+ id: row.id,
109
+ current: "",
110
+ found: e._etag,
111
+ code: 404
112
+ })
113
+ }
114
+ } else {
115
+ yield* exec(
116
+ `INSERT INTO "${tableName}" (id, _namespace, _etag, data) VALUES ($1, $2, $3, $4)`,
117
+ [row.id, ns, row._etag, row.data]
118
+ )
119
+ }
120
+ return row.item
121
+ })
122
+
123
+ const bulkSetInternal = (items: NonEmptyReadonlyArray<PM>, ns: string) =>
124
+ sql
125
+ .withTransaction(Effect.forEach(items, (e) => setInternal(e, ns)))
126
+ .pipe(
127
+ Effect.orDie,
128
+ Effect.map((_) => _ as unknown as NonEmptyReadonlyArray<PM>)
129
+ )
130
+
81
131
  const ctx = yield* Effect.context<R>()
82
132
  const seedCache = new Map<string, Effect.Effect<void>>()
83
133
  const makeSeedEffect = (ns: string) =>
84
134
  exec(
85
- `SELECT COUNT(*) as cnt FROM "${tableName}" WHERE _namespace = $1`,
86
- [ns]
135
+ `SELECT id FROM "${tableName}" WHERE id = $1 AND _namespace = $2`,
136
+ [seedMarkerId, `__seed__::${ns}`]
87
137
  )
88
138
  .pipe(
89
139
  Effect.flatMap((existing) => {
90
- const count = Number((existing as any[])[0]?.cnt ?? 0)
91
- if (count === 0) {
92
- return InfraLogger.logInfo(`Seeding data for ${name} (namespace: ${ns})`).pipe(
93
- Effect.andThen(seed!),
94
- Effect.flatMap((items) =>
95
- Effect.flatMapOption(
96
- Effect.succeed(toNonEmptyArray([...items])),
97
- (a) => s.bulkSet(a).pipe(Effect.orDie)
98
- )
99
- ),
100
- Effect.provide(ctx),
101
- Effect.orDie
102
- )
103
- }
104
- return Effect.void
140
+ if ((existing as any[]).length > 0) return Effect.void
141
+ return InfraLogger.logInfo(`Seeding data for ${name} (namespace: ${ns})`).pipe(
142
+ Effect.andThen(seed!),
143
+ Effect.flatMap((items) =>
144
+ Effect.flatMapOption(
145
+ Effect.succeed(toNonEmptyArray([...items])),
146
+ (a) => bulkSetInternal(a, ns)
147
+ )
148
+ ),
149
+ Effect.andThen(
150
+ exec(
151
+ `INSERT INTO "${tableName}" (id, _namespace, _etag, data) VALUES ($1, $2, $3, $4)`,
152
+ [seedMarkerId, `__seed__::${ns}`, null, JSON.stringify({ _marker: true })]
153
+ )
154
+ ),
155
+ Effect.provide(ctx),
156
+ Effect.orDie
157
+ )
105
158
  })
106
159
  )
107
160
  const seedNamespace = Effect.fn("seedNamespace")(function*(ns: string) {
@@ -209,77 +262,30 @@ function makePgStore({ prefix }: StorageConfig) {
209
262
 
210
263
  set: (e) =>
211
264
  resolveAndSeed.pipe(Effect.flatMap((ns) =>
212
- Effect
213
- .gen(function*() {
214
- const row = toRow(e)
215
- if (e._etag) {
216
- yield* exec(
217
- `UPDATE "${tableName}" SET _etag = $1, data = $2 WHERE id = $3 AND _etag = $4 AND _namespace = $5`,
218
- [row._etag, row.data, row.id, e._etag, ns]
219
- )
220
- const existing = yield* exec(
221
- `SELECT _etag FROM "${tableName}" WHERE id = $1 AND _namespace = $2`,
222
- [row.id, ns]
223
- )
224
- const current = (existing as any[])[0]
225
- if (!current || current._etag !== row._etag) {
226
- if (current) {
227
- return yield* new OptimisticConcurrencyException({
228
- type: name,
229
- id: row.id,
230
- current: current._etag,
231
- found: e._etag,
232
- code: 412
233
- })
234
- }
235
- return yield* new OptimisticConcurrencyException({
236
- type: name,
237
- id: row.id,
238
- current: "",
239
- found: e._etag,
240
- code: 404
241
- })
242
- }
243
- } else {
244
- yield* exec(
245
- `INSERT INTO "${tableName}" (id, _namespace, _etag, data) VALUES ($1, $2, $3, $4)`,
246
- [row.id, ns, row._etag, row.data]
247
- )
248
- }
249
- return row.item
250
- })
251
- .pipe(
252
- Effect.withSpan("PgSQL.set [effect-app/infra/Store]", {
253
- attributes: { "repository.table_name": tableName, "repository.model_name": name, id: e[idKey] }
254
- }, { captureStackTrace: false })
255
- )
265
+ setInternal(e, ns).pipe(
266
+ Effect.withSpan("PgSQL.set [effect-app/infra/Store]", {
267
+ attributes: { "repository.table_name": tableName, "repository.model_name": name, id: e[idKey] }
268
+ }, { captureStackTrace: false })
269
+ )
256
270
  )),
257
271
 
258
272
  batchSet: (items) =>
259
- sql
260
- .withTransaction(
261
- Effect.forEach(items, (e) => s.set(e))
262
- )
263
- .pipe(
264
- Effect.orDie,
265
- Effect.map((_) => _ as unknown as NonEmptyReadonlyArray<PM>),
273
+ resolveAndSeed.pipe(Effect.flatMap((ns) =>
274
+ bulkSetInternal(items, ns).pipe(
266
275
  Effect.withSpan("PgSQL.batchSet [effect-app/infra/Store]", {
267
276
  attributes: { "repository.table_name": tableName, "repository.model_name": name }
268
277
  }, { captureStackTrace: false })
269
- ),
278
+ )
279
+ )),
270
280
 
271
281
  bulkSet: (items) =>
272
- sql
273
- .withTransaction(
274
- Effect.forEach(items, (e) => s.set(e))
275
- )
276
- .pipe(
277
- Effect.orDie,
278
- Effect.map((_) => _ as unknown as NonEmptyReadonlyArray<PM>),
282
+ resolveAndSeed.pipe(Effect.flatMap((ns) =>
283
+ bulkSetInternal(items, ns).pipe(
279
284
  Effect.withSpan("PgSQL.bulkSet [effect-app/infra/Store]", {
280
285
  attributes: { "repository.table_name": tableName, "repository.model_name": name }
281
286
  }, { captureStackTrace: false })
282
- ),
287
+ )
288
+ )),
283
289
 
284
290
  batchRemove: (ids) => {
285
291
  const placeholders = ids.map((_, i) => `$${i + 1}`).join(", ")
package/src/Store/SQL.ts CHANGED
@@ -86,30 +86,83 @@ function makeSQLStoreInt(dialect: SQLDialect, jsonColumnType: string) {
86
86
  const exec = (query: string, params?: readonly unknown[]) =>
87
87
  sql.unsafe(query, params as any).pipe(Effect.orDie)
88
88
 
89
+ const seedMarkerId = `__seed_marker__`
90
+
91
+ const setInternal = (e: PM, ns: string) =>
92
+ Effect.gen(function*() {
93
+ const row = toRow(e)
94
+ if (e._etag) {
95
+ yield* exec(
96
+ `UPDATE "${tableName}" SET _etag = ?, data = ? WHERE id = ? AND _etag = ? AND _namespace = ?`,
97
+ [row._etag, row.data, row.id, e._etag, ns]
98
+ )
99
+ const existing = yield* exec(
100
+ `SELECT _etag FROM "${tableName}" WHERE id = ? AND _namespace = ?`,
101
+ [row.id, ns]
102
+ )
103
+ const current = (existing as any[])[0]
104
+ if (!current || current._etag !== row._etag) {
105
+ if (current) {
106
+ return yield* new OptimisticConcurrencyException({
107
+ type: name,
108
+ id: row.id,
109
+ current: current._etag,
110
+ found: e._etag,
111
+ code: 412
112
+ })
113
+ }
114
+ return yield* new OptimisticConcurrencyException({
115
+ type: name,
116
+ id: row.id,
117
+ current: "",
118
+ found: e._etag,
119
+ code: 404
120
+ })
121
+ }
122
+ } else {
123
+ yield* exec(
124
+ `INSERT INTO "${tableName}" (id, _namespace, _etag, data) VALUES (?, ?, ?, ?)`,
125
+ [row.id, ns, row._etag, row.data]
126
+ )
127
+ }
128
+ return row.item
129
+ })
130
+
131
+ const bulkSetInternal = (items: NonEmptyReadonlyArray<PM>, ns: string) =>
132
+ sql
133
+ .withTransaction(Effect.forEach(items, (e) => setInternal(e, ns)))
134
+ .pipe(
135
+ Effect.orDie,
136
+ Effect.map((_) => _ as unknown as NonEmptyReadonlyArray<PM>)
137
+ )
138
+
89
139
  const ctx = yield* Effect.context<R>()
90
140
  const seedCache = new Map<string, Effect.Effect<void>>()
91
141
  const makeSeedEffect = (ns: string) =>
92
142
  exec(
93
- `SELECT COUNT(*) as cnt FROM "${tableName}" WHERE _namespace = ?`,
94
- [ns]
143
+ `SELECT id FROM "${tableName}" WHERE id = ? AND _namespace = ?`,
144
+ [seedMarkerId, `__seed__::${ns}`]
95
145
  )
96
146
  .pipe(
97
147
  Effect.flatMap((existing) => {
98
- const count = (existing as any[])[0]?.cnt ?? 0
99
- if (count === 0) {
100
- return InfraLogger.logInfo(`Seeding data for ${name} (namespace: ${ns})`).pipe(
101
- Effect.andThen(seed!),
102
- Effect.flatMap((items) =>
103
- Effect.flatMapOption(
104
- Effect.succeed(toNonEmptyArray([...items])),
105
- (a) => s.bulkSet(a).pipe(Effect.orDie)
106
- )
107
- ),
108
- Effect.provide(ctx),
109
- Effect.orDie
110
- )
111
- }
112
- return Effect.void
148
+ if ((existing as any[]).length > 0) return Effect.void
149
+ return InfraLogger.logInfo(`Seeding data for ${name} (namespace: ${ns})`).pipe(
150
+ Effect.andThen(seed!),
151
+ Effect.flatMap((items) =>
152
+ Effect.flatMapOption(
153
+ Effect.succeed(toNonEmptyArray([...items])),
154
+ (a) => bulkSetInternal(a, ns)
155
+ )
156
+ ),
157
+ Effect.andThen(
158
+ exec(
159
+ `INSERT INTO "${tableName}" (id, _namespace, _etag, data) VALUES (?, ?, ?, ?)`,
160
+ [seedMarkerId, `__seed__::${ns}`, null, JSON.stringify({ _marker: true })]
161
+ )
162
+ ),
163
+ Effect.provide(ctx),
164
+ Effect.orDie
165
+ )
113
166
  })
114
167
  )
115
168
  const seedNamespace = Effect.fn("seedNamespace")(function*(ns: string) {
@@ -240,77 +293,30 @@ function makeSQLStoreInt(dialect: SQLDialect, jsonColumnType: string) {
240
293
 
241
294
  set: (e) =>
242
295
  resolveAndSeed.pipe(Effect.flatMap((ns) =>
243
- Effect
244
- .gen(function*() {
245
- const row = toRow(e)
246
- if (e._etag) {
247
- yield* exec(
248
- `UPDATE "${tableName}" SET _etag = ?, data = ? WHERE id = ? AND _etag = ? AND _namespace = ?`,
249
- [row._etag, row.data, row.id, e._etag, ns]
250
- )
251
- const existing = yield* exec(
252
- `SELECT _etag FROM "${tableName}" WHERE id = ? AND _namespace = ?`,
253
- [row.id, ns]
254
- )
255
- const current = (existing as any[])[0]
256
- if (!current || current._etag !== row._etag) {
257
- if (current) {
258
- return yield* new OptimisticConcurrencyException({
259
- type: name,
260
- id: row.id,
261
- current: current._etag,
262
- found: e._etag,
263
- code: 412
264
- })
265
- }
266
- return yield* new OptimisticConcurrencyException({
267
- type: name,
268
- id: row.id,
269
- current: "",
270
- found: e._etag,
271
- code: 404
272
- })
273
- }
274
- } else {
275
- yield* exec(
276
- `INSERT INTO "${tableName}" (id, _namespace, _etag, data) VALUES (?, ?, ?, ?)`,
277
- [row.id, ns, row._etag, row.data]
278
- )
279
- }
280
- return row.item
281
- })
282
- .pipe(
283
- Effect.withSpan("SQL.set [effect-app/infra/Store]", {
284
- attributes: { "repository.table_name": tableName, "repository.model_name": name, id: e[idKey] }
285
- }, { captureStackTrace: false })
286
- )
296
+ setInternal(e, ns).pipe(
297
+ Effect.withSpan("SQL.set [effect-app/infra/Store]", {
298
+ attributes: { "repository.table_name": tableName, "repository.model_name": name, id: e[idKey] }
299
+ }, { captureStackTrace: false })
300
+ )
287
301
  )),
288
302
 
289
303
  batchSet: (items) =>
290
- sql
291
- .withTransaction(
292
- Effect.forEach(items, (e) => s.set(e))
293
- )
294
- .pipe(
295
- Effect.orDie,
296
- Effect.map((_) => _ as unknown as NonEmptyReadonlyArray<PM>),
304
+ resolveAndSeed.pipe(Effect.flatMap((ns) =>
305
+ bulkSetInternal(items, ns).pipe(
297
306
  Effect.withSpan("SQL.batchSet [effect-app/infra/Store]", {
298
307
  attributes: { "repository.table_name": tableName, "repository.model_name": name }
299
308
  }, { captureStackTrace: false })
300
- ),
309
+ )
310
+ )),
301
311
 
302
312
  bulkSet: (items) =>
303
- sql
304
- .withTransaction(
305
- Effect.forEach(items, (e) => s.set(e))
306
- )
307
- .pipe(
308
- Effect.orDie,
309
- Effect.map((_) => _ as unknown as NonEmptyReadonlyArray<PM>),
313
+ resolveAndSeed.pipe(Effect.flatMap((ns) =>
314
+ bulkSetInternal(items, ns).pipe(
310
315
  Effect.withSpan("SQL.bulkSet [effect-app/infra/Store]", {
311
316
  attributes: { "repository.table_name": tableName, "repository.model_name": name }
312
317
  }, { captureStackTrace: false })
313
- ),
318
+ )
319
+ )),
314
320
 
315
321
  batchRemove: (ids) => {
316
322
  const placeholders = ids.map(() => "?").join(", ")