@shivaedev/sql 0.37.0 → 0.38.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.
- package/CHANGELOG.md +13 -0
- package/README.md +91 -1
- package/dist/Model.d.ts +9 -0
- package/dist/Model.d.ts.map +1 -0
- package/dist/Model.js +6 -0
- package/dist/Model.js.map +1 -0
- package/dist/VersionedRepositoryShape.d.ts +6 -0
- package/dist/VersionedRepositoryShape.d.ts.map +1 -0
- package/dist/VersionedRepositoryShape.js +2 -0
- package/dist/VersionedRepositoryShape.js.map +1 -0
- package/dist/WorkerRelease.d.ts +1 -8
- package/dist/WorkerRelease.d.ts.map +1 -1
- package/dist/WorkerRelease.js +4 -29
- package/dist/WorkerRelease.js.map +1 -1
- package/dist/adapters/groupColumns.d.ts +14 -0
- package/dist/adapters/groupColumns.d.ts.map +1 -0
- package/dist/adapters/groupColumns.js +54 -0
- package/dist/adapters/groupColumns.js.map +1 -0
- package/dist/adapters/storageSchema.d.ts +4 -0
- package/dist/adapters/storageSchema.d.ts.map +1 -0
- package/dist/adapters/storageSchema.js +7 -0
- package/dist/adapters/storageSchema.js.map +1 -0
- package/dist/backfillPostgres.d.ts +18 -0
- package/dist/backfillPostgres.d.ts.map +1 -0
- package/dist/backfillPostgres.js +35 -0
- package/dist/backfillPostgres.js.map +1 -0
- package/dist/batchWrites.d.ts.map +1 -1
- package/dist/batchWrites.js +6 -3
- package/dist/batchWrites.js.map +1 -1
- package/dist/compositeRepository.d.ts.map +1 -1
- package/dist/compositeRepository.js +4 -1
- package/dist/compositeRepository.js.map +1 -1
- package/dist/conditionalUpsert.d.ts.map +1 -1
- package/dist/conditionalUpsert.js +5 -2
- package/dist/conditionalUpsert.js.map +1 -1
- package/dist/conflictWrites.d.ts.map +1 -1
- package/dist/conflictWrites.js +6 -3
- package/dist/conflictWrites.js.map +1 -1
- package/dist/coordinateWorkerRelease.js +1 -1
- package/dist/coordinateWorkerRelease.js.map +1 -1
- package/dist/initializeWorkerRelease.d.ts +7 -0
- package/dist/initializeWorkerRelease.d.ts.map +1 -0
- package/dist/initializeWorkerRelease.js +7 -0
- package/dist/initializeWorkerRelease.js.map +1 -0
- package/dist/insertFromSelect.d.ts.map +1 -1
- package/dist/insertFromSelect.js +4 -1
- package/dist/insertFromSelect.js.map +1 -1
- package/dist/latestPerGroup.d.ts.map +1 -1
- package/dist/latestPerGroup.js +7 -3
- package/dist/latestPerGroup.js.map +1 -1
- package/dist/makeOrderedChildren.d.ts +26 -0
- package/dist/makeOrderedChildren.d.ts.map +1 -0
- package/dist/makeOrderedChildren.js +38 -0
- package/dist/makeOrderedChildren.js.map +1 -0
- package/dist/makeWorkerRelease.d.ts +8 -0
- package/dist/makeWorkerRelease.d.ts.map +1 -0
- package/dist/makeWorkerRelease.js +12 -0
- package/dist/makeWorkerRelease.js.map +1 -0
- package/dist/orderedChildStatements.d.ts +30 -0
- package/dist/orderedChildStatements.d.ts.map +1 -0
- package/dist/orderedChildStatements.js +61 -0
- package/dist/orderedChildStatements.js.map +1 -0
- package/dist/registerWorkerRelease.d.ts +4 -0
- package/dist/registerWorkerRelease.d.ts.map +1 -0
- package/dist/registerWorkerRelease.js +14 -0
- package/dist/registerWorkerRelease.js.map +1 -0
- package/dist/repository.d.ts +8 -8
- package/dist/repository.d.ts.map +1 -1
- package/dist/repository.js.map +1 -1
- package/dist/repositoryQueries.d.ts.map +1 -1
- package/dist/repositoryQueries.js +6 -2
- package/dist/repositoryQueries.js.map +1 -1
- package/dist/repositoryUpdate.d.ts +3 -3
- package/dist/repositoryUpdate.d.ts.map +1 -1
- package/dist/repositoryWrites.d.ts.map +1 -1
- package/dist/repositoryWrites.js +21 -6
- package/dist/repositoryWrites.js.map +1 -1
- package/dist/setWorkerReleaseActive.d.ts +4 -0
- package/dist/setWorkerReleaseActive.d.ts.map +1 -0
- package/dist/setWorkerReleaseActive.js +13 -0
- package/dist/setWorkerReleaseActive.js.map +1 -0
- package/dist/sqlNameTransforms.d.ts +5 -0
- package/dist/sqlNameTransforms.d.ts.map +1 -0
- package/dist/sqlNameTransforms.js +8 -0
- package/dist/sqlNameTransforms.js.map +1 -0
- package/dist/upsertResult.d.ts +2 -1
- package/dist/upsertResult.d.ts.map +1 -1
- package/dist/upsertResult.js +3 -2
- package/dist/upsertResult.js.map +1 -1
- package/dist/versionedRepository.d.ts +15 -6
- package/dist/versionedRepository.d.ts.map +1 -1
- package/dist/versionedRepository.js +8 -5
- package/dist/versionedRepository.js.map +1 -1
- package/dist/versionedStatements.d.ts +1 -1
- package/dist/versionedStatements.d.ts.map +1 -1
- package/dist/versionedStatements.js +10 -4
- package/dist/versionedStatements.js.map +1 -1
- package/package.json +6 -6
- package/src/Model.ts +7 -0
- package/src/VersionedRepositoryShape.ts +11 -0
- package/src/WorkerRelease.ts +4 -33
- package/src/adapters/groupColumns.ts +63 -0
- package/src/adapters/storageSchema.ts +10 -0
- package/src/backfillPostgres.ts +47 -0
- package/src/batchWrites.ts +6 -3
- package/src/compositeRepository.ts +4 -1
- package/src/conditionalUpsert.ts +5 -2
- package/src/conflictWrites.ts +6 -3
- package/src/coordinateWorkerRelease.ts +1 -1
- package/src/initializeWorkerRelease.ts +7 -0
- package/src/insertFromSelect.ts +4 -1
- package/src/latestPerGroup.ts +7 -3
- package/src/makeOrderedChildren.ts +78 -0
- package/src/makeWorkerRelease.ts +12 -0
- package/src/orderedChildStatements.ts +76 -0
- package/src/registerWorkerRelease.ts +15 -0
- package/src/repository.ts +12 -13
- package/src/repositoryQueries.ts +6 -2
- package/src/repositoryUpdate.ts +3 -3
- package/src/repositoryWrites.ts +21 -6
- package/src/setWorkerReleaseActive.ts +17 -0
- package/src/sqlNameTransforms.ts +9 -0
- package/src/upsertResult.ts +4 -2
- package/src/versionedRepository.ts +31 -11
- package/src/versionedStatements.ts +14 -4
|
@@ -1,13 +1,17 @@
|
|
|
1
1
|
import { Effect, Schema } from "effect";
|
|
2
2
|
import { SqlClient } from "effect/sql";
|
|
3
|
+
import { groupColumns } from "#adapters/groupColumns.ts";
|
|
4
|
+
import { storageSchema } from "#adapters/storageSchema.ts";
|
|
3
5
|
import { latestPerGroup as makeLatestPerGroup } from "#latestPerGroup.ts";
|
|
4
6
|
import { makeAggregate } from "#makeAggregate.ts";
|
|
5
7
|
import { makeQueryClauses } from "#makeQueryClauses.ts";
|
|
6
8
|
import { makeFilter } from "#repositoryFilter.ts";
|
|
9
|
+
import { sqlNameTransforms } from "#sqlNameTransforms.ts";
|
|
7
10
|
const CountResult = Schema.Tuple([Schema.Struct({ count: Schema.NumberFromString })]);
|
|
8
11
|
export function makeQueries(model, options) {
|
|
9
12
|
return Effect.fnUntraced(function* () {
|
|
10
13
|
const sql = yield* SqlClient.SqlClient;
|
|
14
|
+
const nameTransforms = yield* sqlNameTransforms;
|
|
11
15
|
const { fieldAt, where } = yield* makeFilter(model);
|
|
12
16
|
const readLatest = yield* makeLatestPerGroup(model, options.tableName);
|
|
13
17
|
const { decodeLimit, orderClause, limitClause } = yield* makeQueryClauses(fieldAt);
|
|
@@ -28,7 +32,7 @@ export function makeQueries(model, options) {
|
|
|
28
32
|
const predicate = yield* where(query.where, true, true);
|
|
29
33
|
const order = yield* orderClause(query.orderBy);
|
|
30
34
|
const limit = yield* limitClause(query.limit);
|
|
31
|
-
return sql `select ${sql.csv(keys.map((
|
|
35
|
+
return sql `select ${sql.csv(groupColumns(model.fields, keys).map(({ column }) => sql `${sql(column)}`))} from ${sql(options.tableName)} where ${predicate} ${order} ${limit}`;
|
|
32
36
|
});
|
|
33
37
|
return { fields, statement };
|
|
34
38
|
}
|
|
@@ -37,7 +41,7 @@ export function makeQueries(model, options) {
|
|
|
37
41
|
return Effect.gen(function* () {
|
|
38
42
|
const selected = select(query);
|
|
39
43
|
const rows = yield* sql `${yield* selected.statement}`;
|
|
40
|
-
return yield* Schema.decodeUnknownEffect(Schema.Array(Schema.Struct(selected.fields)))(rows);
|
|
44
|
+
return yield* Schema.decodeUnknownEffect(Schema.Array(storageSchema(Schema.Struct(selected.fields), selected.fields, nameTransforms)))(rows);
|
|
41
45
|
}).pipe(Effect.withSpan(`${options.spanPrefix}.findMany`));
|
|
42
46
|
}
|
|
43
47
|
function latestPerGroup(query) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repositoryQueries.js","sourceRoot":"","sources":["../src/repositoryQueries.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAExC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"repositoryQueries.js","sourceRoot":"","sources":["../src/repositoryQueries.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,9 +6,9 @@ type WithoutOverride<A> = A extends infer TValue & Brand.Brand<"Override"> ? TVa
|
|
|
6
6
|
export type UpdateInput<TModel extends Model.Any> = {
|
|
7
7
|
readonly [TKey in keyof TModel["update"]["Type"]]: WithoutOverride<TModel["update"]["Type"][TKey]>;
|
|
8
8
|
};
|
|
9
|
-
type Column<TModel extends Model.Any, TId extends PropertyKey> = Exclude<Extract<keyof UpdateInput<TModel>, string>, TId>;
|
|
10
|
-
type Selected<TModel extends Model.Any, TId extends PropertyKey, TColumn extends PropertyKey> = Required<Pick<UpdateInput<TModel>, Extract<TId | TColumn, keyof UpdateInput<TModel>>>>;
|
|
11
|
-
interface Columns<TColumn> {
|
|
9
|
+
export type Column<TModel extends Model.Any, TId extends PropertyKey> = Exclude<Extract<keyof UpdateInput<TModel>, string>, TId>;
|
|
10
|
+
export type Selected<TModel extends Model.Any, TId extends PropertyKey, TColumn extends PropertyKey> = Required<Pick<UpdateInput<TModel>, Extract<TId | TColumn, keyof UpdateInput<TModel>>>>;
|
|
11
|
+
export interface Columns<TColumn> {
|
|
12
12
|
readonly columns: readonly [TColumn, ...TColumn[]];
|
|
13
13
|
}
|
|
14
14
|
type WriteResult<TModel extends Model.Any, A, E = never> = Effect.Effect<A, SqlError | Schema.SchemaError | E, TModel["update"]["EncodingServices"] | TModel["DecodingServices"]>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repositoryUpdate.d.ts","sourceRoot":"","sources":["../src/repositoryUpdate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,EAA0B,MAAM,QAAQ,CAAC;AAChE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAEpD,KAAK,eAAe,CAAC,CAAC,IAAI,CAAC,SAAS,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC;AACxF,MAAM,MAAM,WAAW,CAAC,MAAM,SAAS,KAAK,CAAC,GAAG,IAAI;IACnD,QAAQ,EAAE,IAAI,IAAI,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GAAG,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC;CAClG,CAAC;AAEF,
|
|
1
|
+
{"version":3,"file":"repositoryUpdate.d.ts","sourceRoot":"","sources":["../src/repositoryUpdate.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repositoryWrites.d.ts","sourceRoot":"","sources":["../src/repositoryWrites.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAa,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"repositoryWrites.d.ts","sourceRoot":"","sources":["../src/repositoryWrites.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAa,MAAM,YAAY,CAAC;AAOlD,eAAO,MAAM,gBAAgB;wBAEG,SAAS,MAAM,EAAE;wBAAsB,MAAM;yBAAuB,MAAM;;;;;;;iBA2E3F,OAAO;oBACJ,OAAO;wBAEH,OAAO;oBACX,OAAO,aAAa;QAAE,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;KAAE;wBAMrF,OAAO,aAAa;QAAE,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAA;KAAE;8BAK/E,CAAC"}
|
package/dist/repositoryWrites.js
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import { Effect, Schema } from "effect";
|
|
2
2
|
import { SqlClient, SqlSchema } from "effect/sql";
|
|
3
|
+
import { storageSchema } from "#adapters/storageSchema.ts";
|
|
3
4
|
import { makeFilter } from "#repositoryFilter.ts";
|
|
4
5
|
import { selectedUpdate } from "#repositoryUpdate.ts";
|
|
6
|
+
import { sqlNameTransforms } from "#sqlNameTransforms.ts";
|
|
5
7
|
export const repositoryWrites = Effect.fnUntraced(function* (model, options, changes) {
|
|
6
8
|
const sql = yield* SqlClient.SqlClient;
|
|
9
|
+
const nameTransforms = yield* sqlNameTransforms;
|
|
7
10
|
const { idColumns, tableName, spanPrefix } = options;
|
|
8
11
|
const { where } = yield* makeFilter(model);
|
|
9
12
|
const record = Schema.decodeUnknownEffect(Schema.Record(Schema.String, Schema.Unknown));
|
|
@@ -19,17 +22,29 @@ export const repositoryWrites = Effect.fnUntraced(function* (model, options, cha
|
|
|
19
22
|
function update(input) {
|
|
20
23
|
return Effect.flatMap(record(input), (row) => sql `update ${sql(tableName)} set ${sql.update(row, idColumns)} where ${predicate(row)} returning ${changes.returning()}`.pipe(Effect.tap(changes.record)));
|
|
21
24
|
}
|
|
22
|
-
const insertRow = SqlSchema.findOne({
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
25
|
+
const insertRow = SqlSchema.findOne({
|
|
26
|
+
execute: insert,
|
|
27
|
+
Request: storageSchema(model.insert, model.fields, nameTransforms),
|
|
28
|
+
Result: storageSchema(model, model.fields, nameTransforms),
|
|
29
|
+
});
|
|
30
|
+
const insertVoid = SqlSchema.void({ execute: insert, Request: storageSchema(model.insert, model.fields, nameTransforms) });
|
|
31
|
+
const updateRow = SqlSchema.findOne({
|
|
32
|
+
execute: update,
|
|
33
|
+
Request: storageSchema(model.update, model.fields, nameTransforms),
|
|
34
|
+
Result: storageSchema(model, model.fields, nameTransforms),
|
|
35
|
+
});
|
|
36
|
+
const updateVoid = SqlSchema.void({ execute: update, Request: storageSchema(model.update, model.fields, nameTransforms) });
|
|
26
37
|
function selected(input, columns, returning) {
|
|
27
38
|
return Effect.gen(function* () {
|
|
28
39
|
const row = yield* record(input);
|
|
29
40
|
const Request = yield* selectedUpdate(model, columns, idColumns, row);
|
|
30
41
|
return yield* returning
|
|
31
|
-
? SqlSchema.findOne({
|
|
32
|
-
|
|
42
|
+
? SqlSchema.findOne({
|
|
43
|
+
execute: update,
|
|
44
|
+
Request: storageSchema(Request, model.fields, nameTransforms),
|
|
45
|
+
Result: storageSchema(model, model.fields, nameTransforms),
|
|
46
|
+
})(row)
|
|
47
|
+
: SqlSchema.void({ execute: update, Request: storageSchema(Request, model.fields, nameTransforms) })(row);
|
|
33
48
|
});
|
|
34
49
|
}
|
|
35
50
|
const idColumn = idColumns[0] ?? "";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repositoryWrites.js","sourceRoot":"","sources":["../src/repositoryWrites.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAExC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"repositoryWrites.js","sourceRoot":"","sources":["../src/repositoryWrites.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { Effect } from "effect";
|
|
2
|
+
import type { initializeWorkerRelease } from "./initializeWorkerRelease.ts";
|
|
3
|
+
export declare function setWorkerReleaseActive(state: Effect.Success<typeof initializeWorkerRelease>): (next: boolean) => Effect.Effect<void, unknown, never>;
|
|
4
|
+
//# sourceMappingURL=setWorkerReleaseActive.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setWorkerReleaseActive.d.ts","sourceRoot":"","sources":["../src/setWorkerReleaseActive.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAE5E,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,uBAAuB,CAAC,UAC7E,OAAO,yCAYrB"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Effect } from "effect";
|
|
2
|
+
export function setWorkerReleaseActive(state) {
|
|
3
|
+
return (next) => state
|
|
4
|
+
.locked(Effect.gen(function* () {
|
|
5
|
+
if (next === state.active) {
|
|
6
|
+
return;
|
|
7
|
+
}
|
|
8
|
+
state.active = next;
|
|
9
|
+
yield* Effect.forEach(state.controls, (control) => control(state.active), { concurrency: "unbounded", discard: true });
|
|
10
|
+
}))
|
|
11
|
+
.pipe(Effect.uninterruptible);
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=setWorkerReleaseActive.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setWorkerReleaseActive.js","sourceRoot":"","sources":["../src/setWorkerReleaseActive.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAGhC,MAAM,UAAU,sBAAsB,CAAC,KAAqD;IAC3F,OAAO,CAAC,IAAa,EAAE,EAAE,CACxB,KAAK;SACH,MAAM,CACN,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QACnB,IAAI,IAAI,KAAK,KAAK,CAAC,MAAM,EAAE,CAAC;YAC3B,OAAO;QACR,CAAC;QACD,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC;QACpB,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IACxH,CAAC,CAAC,CACF;SACA,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;AACjC,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { Effect } from "effect";
|
|
2
|
+
import { SqlClient } from "effect/sql";
|
|
3
|
+
import type { SqlNameTransforms } from "#clientOptions.ts";
|
|
4
|
+
export declare const sqlNameTransforms: Effect.Effect<SqlNameTransforms | undefined, never, SqlClient.SqlClient>;
|
|
5
|
+
//# sourceMappingURL=sqlNameTransforms.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sqlNameTransforms.d.ts","sourceRoot":"","sources":["../src/sqlNameTransforms.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAE3D,eAAO,MAAM,iBAAiB,0EAI5B,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Effect } from "effect";
|
|
2
|
+
import { SqlClient } from "effect/sql";
|
|
3
|
+
export const sqlNameTransforms = Effect.gen(function* () {
|
|
4
|
+
const client = yield* SqlClient.SqlClient;
|
|
5
|
+
const namedClient = client;
|
|
6
|
+
return namedClient.config;
|
|
7
|
+
});
|
|
8
|
+
//# sourceMappingURL=sqlNameTransforms.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sqlNameTransforms.js","sourceRoot":"","sources":["../src/sqlNameTransforms.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAGvC,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IACpD,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC;IAC1C,MAAM,WAAW,GAAkE,MAAM,CAAC;IAC1F,OAAO,WAAW,CAAC,MAAM,CAAC;AAC3B,CAAC,CAAC,CAAC"}
|
package/dist/upsertResult.d.ts
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { Effect, Schema } from "effect";
|
|
2
2
|
import type { Model } from "effect/schema";
|
|
3
3
|
import { SqlClient } from "effect/sql";
|
|
4
|
+
import type { SqlNameTransforms } from "#clientOptions.ts";
|
|
4
5
|
export interface UpsertRow<TRow> {
|
|
5
6
|
readonly inserted: boolean;
|
|
6
7
|
readonly row: TRow;
|
|
7
8
|
}
|
|
8
9
|
export declare const upsertReturning: () => Effect.Effect<import("effect/sql/Statement").Statement<import("effect/sql/SqlConnection").Row>, never, SqlClient.SqlClient>;
|
|
9
|
-
export declare function makeUpsertDecoder(model: Model.Any): (row: Readonly<Record<string, unknown>> | undefined) => Effect.Effect<{
|
|
10
|
+
export declare function makeUpsertDecoder(model: Model.Any, names?: SqlNameTransforms): (row: Readonly<Record<string, unknown>> | undefined) => Effect.Effect<{
|
|
10
11
|
inserted: boolean;
|
|
11
12
|
row: unknown;
|
|
12
13
|
}, Schema.SchemaError, unknown>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upsertResult.d.ts","sourceRoot":"","sources":["../src/upsertResult.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,MAAM,WAAW,SAAS,CAAC,IAAI;IAC9B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC;CACnB;AAED,eAAO,MAAM,eAAe,mIAG1B,CAAC;AAEH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,
|
|
1
|
+
{"version":3,"file":"upsertResult.d.ts","sourceRoot":"","sources":["../src/upsertResult.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAE3D,MAAM,WAAW,SAAS,CAAC,IAAI;IAC9B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC;CACnB;AAED,eAAO,MAAM,eAAe,mIAG1B,CAAC;AAEH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,iBAAiB,SAE/D,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,SAAS;;;gCAE1D"}
|
package/dist/upsertResult.js
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { Effect, Schema } from "effect";
|
|
2
2
|
import { SqlClient } from "effect/sql";
|
|
3
|
+
import { storageSchema } from "#adapters/storageSchema.ts";
|
|
3
4
|
export const upsertReturning = Effect.fnUntraced(function* () {
|
|
4
5
|
const sql = yield* SqlClient.SqlClient;
|
|
5
6
|
return sql `*, (xmax = 0) as ${sql("effectSqlInserted")}`;
|
|
6
7
|
});
|
|
7
|
-
export function makeUpsertDecoder(model) {
|
|
8
|
-
const decode = Schema.decodeUnknownEffect(model);
|
|
8
|
+
export function makeUpsertDecoder(model, names) {
|
|
9
|
+
const decode = Schema.decodeUnknownEffect(storageSchema(model, model.fields, names));
|
|
9
10
|
return (row) => Effect.map(decode(row), (decoded) => ({ inserted: row?.effectSqlInserted === true, row: decoded }));
|
|
10
11
|
}
|
|
11
12
|
//# sourceMappingURL=upsertResult.js.map
|
package/dist/upsertResult.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upsertResult.js","sourceRoot":"","sources":["../src/upsertResult.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAExC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"upsertResult.js","sourceRoot":"","sources":["../src/upsertResult.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAExC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAQ3D,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC;IACzD,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC;IACvC,OAAO,GAAG,CAAA,oBAAoB,GAAG,CAAC,mBAAmB,CAAC,EAAE,CAAC;AAC1D,CAAC,CAAC,CAAC;AAEH,MAAM,UAAU,iBAAiB,CAAC,KAAgB,EAAE,KAAyB;IAC5E,MAAM,MAAM,GAAG,MAAM,CAAC,mBAAmB,CAAC,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;IACrF,OAAO,CAAC,GAAkD,EAAE,EAAE,CAC7D,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,iBAAiB,KAAK,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;AACtG,CAAC"}
|
|
@@ -5,7 +5,7 @@ import type { SqlError } from "effect/sql/SqlError";
|
|
|
5
5
|
import type { PrimaryKey, Repository } from "#compositeRepository.ts";
|
|
6
6
|
import type { OptimisticConcurrencyError } from "#repository.ts";
|
|
7
7
|
import type { RepositoryChanges } from "#repositoryChanges.ts";
|
|
8
|
-
import type { UpdateInput } from "#repositoryUpdate.ts";
|
|
8
|
+
import type { Column, Columns, Selected, UpdateInput } from "#repositoryUpdate.ts";
|
|
9
9
|
import { type VersionedOptions } from "#versionedStatements.ts";
|
|
10
10
|
export type IdColumn<TModel extends Model.Any> = keyof TModel["Type"] & keyof TModel["update"]["Type"] & keyof TModel["fields"];
|
|
11
11
|
export type VersionColumn<TModel extends Model.Any, TId extends PrimaryKey<TModel>> = {
|
|
@@ -16,12 +16,17 @@ export type VersionColumn<TModel extends Model.Any, TId extends PrimaryKey<TMode
|
|
|
16
16
|
export type NativeRepository<TModel extends Model.Any, TId extends IdColumn<TModel>> = Effect.Success<ReturnType<typeof SqlModel.makeRepository<TModel, TId>>>;
|
|
17
17
|
type WriteError = SqlError | Schema.SchemaError | OptimisticConcurrencyError;
|
|
18
18
|
type KeyColumn<TModel extends Model.Any, TId extends PrimaryKey<TModel>> = TId extends readonly IdColumn<TModel>[] ? TId[number] : Extract<TId, IdColumn<TModel>>;
|
|
19
|
-
|
|
19
|
+
type RequiredColumn<TModel extends Model.Any, TId extends PrimaryKey<TModel>, TVersion extends PropertyKey> = KeyColumn<TModel, TId> | TVersion;
|
|
20
|
+
interface VersionedUpdate<TModel extends Model.Any, TId extends PrimaryKey<TModel>, TVersion extends VersionColumn<TModel, TId>, A, R = TModel["update"]["EncodingServices"] | TModel["DecodingServices"]> {
|
|
21
|
+
<TColumn extends Column<TModel, RequiredColumn<TModel, TId, TVersion>>>(input: Selected<TModel, RequiredColumn<TModel, TId, TVersion>, TColumn>, options: Columns<TColumn>): Effect.Effect<A, WriteError, R>;
|
|
22
|
+
(input: UpdateInput<TModel>): Effect.Effect<A, WriteError, R>;
|
|
23
|
+
}
|
|
24
|
+
export interface VersionedWrites<TModel extends Model.Any, TId extends PrimaryKey<TModel>, TVersion extends VersionColumn<TModel, TId> = VersionColumn<TModel, TId>> {
|
|
20
25
|
readonly delete: (id: TId extends readonly IdColumn<TModel>[] ? Pick<TModel["Type"], TId[number]> : TModel["fields"][Extract<TId, IdColumn<TModel>>]["Type"], expectedVersion: number) => Effect.Effect<void, WriteError, TModel["fields"][KeyColumn<TModel, TId>]["EncodingServices"]>;
|
|
21
26
|
readonly insert: Repository<TModel, TId>["insert"];
|
|
22
27
|
readonly insertVoid: Repository<TModel, TId>["insertVoid"];
|
|
23
|
-
readonly update:
|
|
24
|
-
readonly updateVoid:
|
|
28
|
+
readonly update: VersionedUpdate<TModel, TId, TVersion, TModel["Type"]>;
|
|
29
|
+
readonly updateVoid: VersionedUpdate<TModel, TId, TVersion, void, TModel["update"]["EncodingServices"]>;
|
|
25
30
|
}
|
|
26
31
|
export declare const makeVersionedWrites: (model: Model.Any, options: VersionedOptions & {
|
|
27
32
|
readonly changes: RepositoryChanges;
|
|
@@ -30,8 +35,12 @@ export declare const makeVersionedWrites: (model: Model.Any, options: VersionedO
|
|
|
30
35
|
delete: (id: unknown, expected: number) => Effect.Effect<undefined, OptimisticConcurrencyError | Schema.SchemaError | SqlError, unknown>;
|
|
31
36
|
insert: (input: unknown) => Effect.Effect<unknown, Schema.SchemaError | SqlError, unknown>;
|
|
32
37
|
insertVoid: (input: unknown) => Effect.Effect<void, Schema.SchemaError | SqlError, unknown>;
|
|
33
|
-
update: (input: Readonly<Record<string, unknown
|
|
34
|
-
|
|
38
|
+
update: (input: Readonly<Record<string, unknown>>, settings?: {
|
|
39
|
+
readonly columns: readonly string[];
|
|
40
|
+
}) => Effect.Effect<unknown, OptimisticConcurrencyError | Schema.SchemaError | SqlError, unknown>;
|
|
41
|
+
updateVoid: (input: Readonly<Record<string, unknown>>, settings?: {
|
|
42
|
+
readonly columns: readonly string[];
|
|
43
|
+
}) => Effect.Effect<undefined, OptimisticConcurrencyError | Schema.SchemaError | SqlError, unknown>;
|
|
35
44
|
insertOrIgnore?: (input: unknown) => Effect.Effect<Option.None<unknown> | Option.Some<unknown>, Schema.SchemaError | SqlError, unknown>;
|
|
36
45
|
}, never, SqlClient.SqlClient>;
|
|
37
46
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"versionedRepository.d.ts","sourceRoot":"","sources":["../src/versionedRepository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"versionedRepository.d.ts","sourceRoot":"","sources":["../src/versionedRepository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAEpD,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACtE,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,gBAAgB,CAAC;AACjE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnF,OAAO,EAAE,KAAK,gBAAgB,EAAuB,MAAM,yBAAyB,CAAC;AAErF,MAAM,MAAM,QAAQ,CAAC,MAAM,SAAS,KAAK,CAAC,GAAG,IAAI,MAAM,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC;AAChI,MAAM,MAAM,aAAa,CAAC,MAAM,SAAS,KAAK,CAAC,GAAG,EAAE,GAAG,SAAS,UAAU,CAAC,MAAM,CAAC,IAAI;KACpF,IAAI,IAAI,OAAO,CAAC,MAAM,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,SAAS,MAAM,CAAC,eAAe,CACxI,MAAM,EACN,MAAM,EACN,KAAK,EACL,KAAK,CACL,GACE,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,SAAS;QAAE,QAAQ,EAAE,MAAM,IAAI,IAAI,GAAG,MAAM;KAAE,GACrE,IAAI,GACJ,KAAK,GACN,KAAK;CACR,CAAC,OAAO,CAAC,MAAM,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,GAC1E,OAAO,CAAC,MAAM,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,SAAS,SAAS,WAAW,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAE5H,MAAM,MAAM,gBAAgB,CAAC,MAAM,SAAS,KAAK,CAAC,GAAG,EAAE,GAAG,SAAS,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CACpG,UAAU,CAAC,OAAO,QAAQ,CAAC,cAAc,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CACvD,CAAC;AACF,KAAK,UAAU,GAAG,QAAQ,GAAG,MAAM,CAAC,WAAW,GAAG,0BAA0B,CAAC;AAC7E,KAAK,SAAS,CAAC,MAAM,SAAS,KAAK,CAAC,GAAG,EAAE,GAAG,SAAS,UAAU,CAAC,MAAM,CAAC,IAAI,GAAG,SAAS,SAAS,QAAQ,CAAC,MAAM,CAAC,EAAE,GAC/G,GAAG,CAAC,MAAM,CAAC,GACX,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;AAClC,KAAK,cAAc,CAAC,MAAM,SAAS,KAAK,CAAC,GAAG,EAAE,GAAG,SAAS,UAAU,CAAC,MAAM,CAAC,EAAE,QAAQ,SAAS,WAAW,IAAI,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,QAAQ,CAAC;AAChJ,UAAU,eAAe,CACxB,MAAM,SAAS,KAAK,CAAC,GAAG,EACxB,GAAG,SAAS,UAAU,CAAC,MAAM,CAAC,EAC9B,QAAQ,SAAS,aAAa,CAAC,MAAM,EAAE,GAAG,CAAC,EAC3C,CAAC,EACD,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,kBAAkB,CAAC,GAAG,MAAM,CAAC,kBAAkB,CAAC;IAErE,CAAC,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC,EACrE,KAAK,EAAE,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ,CAAC,EAAE,OAAO,CAAC,EACvE,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,GACvB,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC;IACnC,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC;CAC9D;AAED,MAAM,WAAW,eAAe,CAC/B,MAAM,SAAS,KAAK,CAAC,GAAG,EACxB,GAAG,SAAS,UAAU,CAAC,MAAM,CAAC,EAC9B,QAAQ,SAAS,aAAa,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,GAAG,CAAC;IAExE,QAAQ,CAAC,MAAM,EAAE,CAChB,EAAE,EAAE,GAAG,SAAS,SAAS,QAAQ,CAAC,MAAM,CAAC,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAC1I,eAAe,EAAE,MAAM,KACnB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC;IACnG,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;IACnD,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,YAAY,CAAC,CAAC;IAC3D,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;IACxE,QAAQ,CAAC,UAAU,EAAE,eAAe,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC;CACxG;AAED,eAAO,MAAM,mBAAmB;sBAEiB,iBAAiB;yBAAuB,MAAM;;iBAmDvE,OAAO,YAAY,MAAM;oBA5CzB,OAAO;wBAQH,OAAO;oBAeX,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,aAAa;QAAE,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAA;KAAE;wBAWjF,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,aAAa;QAAE,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAA;KAAE;6BAnBjF,OAAO;8BAwCrC,CAAC"}
|
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
import { Effect, Option, Schema } from "effect";
|
|
2
2
|
import { SqlClient } from "effect/sql";
|
|
3
|
+
import { storageSchema } from "#adapters/storageSchema.ts";
|
|
4
|
+
import { sqlNameTransforms } from "#sqlNameTransforms.ts";
|
|
3
5
|
import { versionedStatements } from "#versionedStatements.ts";
|
|
4
6
|
export const makeVersionedWrites = Effect.fnUntraced(function* (model, options) {
|
|
5
7
|
const sql = yield* SqlClient.SqlClient;
|
|
8
|
+
const nameTransforms = yield* sqlNameTransforms;
|
|
6
9
|
const { spanPrefix, changes } = options;
|
|
7
10
|
const statements = yield* versionedStatements(model, options);
|
|
8
|
-
const decodeRow = Schema.decodeUnknownEffect(model);
|
|
11
|
+
const decodeRow = Schema.decodeUnknownEffect(storageSchema(model, model.fields, nameTransforms));
|
|
9
12
|
function insert(input) {
|
|
10
13
|
return Effect.gen(function* () {
|
|
11
14
|
const statement = yield* statements.insert(input);
|
|
@@ -29,9 +32,9 @@ export const makeVersionedWrites = Effect.fnUntraced(function* (model, options)
|
|
|
29
32
|
return rows.length === 0 ? Option.none() : Option.some(yield* decodeRow(rows[0]));
|
|
30
33
|
}).pipe(changes.write, Effect.withSpan(`${spanPrefix}.insertOrIgnore`));
|
|
31
34
|
}
|
|
32
|
-
function update(input) {
|
|
35
|
+
function update(input, settings) {
|
|
33
36
|
return Effect.gen(function* () {
|
|
34
|
-
const { statement, classify } = yield* statements.update(input);
|
|
37
|
+
const { statement, classify } = yield* statements.update(input, settings?.columns);
|
|
35
38
|
const rows = yield* sql `${statement} returning ${changes.returning()}`;
|
|
36
39
|
if (rows.length === 0) {
|
|
37
40
|
return yield* classify();
|
|
@@ -40,9 +43,9 @@ export const makeVersionedWrites = Effect.fnUntraced(function* (model, options)
|
|
|
40
43
|
return yield* decodeRow(rows[0]);
|
|
41
44
|
}).pipe(changes.write, Effect.withSpan(`${spanPrefix}.update`));
|
|
42
45
|
}
|
|
43
|
-
function updateVoid(input) {
|
|
46
|
+
function updateVoid(input, settings) {
|
|
44
47
|
return Effect.gen(function* () {
|
|
45
|
-
const { statement, classify } = yield* statements.update(input);
|
|
48
|
+
const { statement, classify } = yield* statements.update(input, settings?.columns);
|
|
46
49
|
const rows = yield* sql `${statement} returning ${changes.returning()}`;
|
|
47
50
|
if (rows.length === 0) {
|
|
48
51
|
return yield* classify();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"versionedRepository.js","sourceRoot":"","sources":["../src/versionedRepository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhD,OAAO,EAAE,SAAS,EAAiB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"versionedRepository.js","sourceRoot":"","sources":["../src/versionedRepository.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,7 +16,7 @@ export declare const versionedStatements: (model: Model.Any, options: VersionedO
|
|
|
16
16
|
classify: () => Effect.Effect<never, OptimisticConcurrencyError | import("effect/sql/SqlError").SqlError, never>;
|
|
17
17
|
statement: import("effect/sql/Statement").Statement<import("effect/sql/SqlConnection").Row>;
|
|
18
18
|
}, Schema.SchemaError, unknown>;
|
|
19
|
-
update: (input: Readonly<Record<string, unknown
|
|
19
|
+
update: (input: Readonly<Record<string, unknown>>, columns?: readonly string[]) => Effect.Effect<{
|
|
20
20
|
classify: () => Effect.Effect<never, OptimisticConcurrencyError | import("effect/sql/SqlError").SqlError, never>;
|
|
21
21
|
statement: import("effect/sql/Statement").Statement<import("effect/sql/SqlConnection").Row>;
|
|
22
22
|
}, Schema.SchemaError, unknown>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"versionedStatements.d.ts","sourceRoot":"","sources":["../src/versionedStatements.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"versionedStatements.d.ts","sourceRoot":"","sources":["../src/versionedStatements.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAGvC,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,gBAAgB,CAAC;AAKjE,MAAM,WAAW,gBAAgB;IAChC,QAAQ,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,GAAG,OAAO,KAAK,0BAA0B,CAAC;IACrH,QAAQ,CAAC,eAAe,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7C,QAAQ,CAAC,aAAa,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAC3D,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAC/B;AAED,eAAO,MAAM,mBAAmB;oBAuCR,OAAO;iBA4BV,OAAO,YAAY,MAAM;;;;oBArBtB,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,YAAY,SAAS,MAAM,EAAE;;;;8BAiCpF,CAAC"}
|
|
@@ -1,9 +1,13 @@
|
|
|
1
1
|
import { Effect, Schema } from "effect";
|
|
2
2
|
import { SqlClient } from "effect/sql";
|
|
3
|
+
import { storageSchema } from "#adapters/storageSchema.ts";
|
|
3
4
|
import { makeConflictClause } from "#makeConflictClause.ts";
|
|
5
|
+
import { selectedUpdate } from "#repositoryUpdate.ts";
|
|
6
|
+
import { sqlNameTransforms } from "#sqlNameTransforms.ts";
|
|
4
7
|
const Version = Schema.Number.check(Schema.isInt(), Schema.isGreaterThanOrEqualTo(0));
|
|
5
8
|
export const versionedStatements = Effect.fnUntraced(function* (model, options) {
|
|
6
9
|
const sql = yield* SqlClient.SqlClient;
|
|
10
|
+
const nameTransforms = yield* sqlNameTransforms;
|
|
7
11
|
const { tableName, idColumns, versionColumn, conflict } = options;
|
|
8
12
|
const entries = [];
|
|
9
13
|
for (const column of idColumns) {
|
|
@@ -19,8 +23,8 @@ export const versionedStatements = Effect.fnUntraced(function* (model, options)
|
|
|
19
23
|
return yield* Effect.die(new Error(`Unknown version column: ${versionColumn}`));
|
|
20
24
|
}
|
|
21
25
|
const encodeVersion = Schema.encodeEffect(versionSchema);
|
|
22
|
-
const encodeInsert = Schema.encodeEffect(model.insert);
|
|
23
|
-
const encodeUpdate = Schema.encodeEffect(model.update);
|
|
26
|
+
const encodeInsert = Schema.encodeEffect(storageSchema(model.insert, model.fields, nameTransforms));
|
|
27
|
+
const encodeUpdate = Schema.encodeEffect(storageSchema(model.update, model.fields, nameTransforms));
|
|
24
28
|
const record = Schema.decodeUnknownEffect(Schema.Record(Schema.String, Schema.Unknown));
|
|
25
29
|
const validateVersion = Schema.decodeUnknownEffect(Version);
|
|
26
30
|
const clause = options.conflictColumns === undefined ? undefined : yield* makeConflictClause(model, { ...options, conflictColumns: options.conflictColumns });
|
|
@@ -46,9 +50,11 @@ export const versionedStatements = Effect.fnUntraced(function* (model, options)
|
|
|
46
50
|
return sql `insert into ${sql(tableName)} ${sql.insert(encoded)} ${suffix}`;
|
|
47
51
|
});
|
|
48
52
|
}
|
|
49
|
-
function update(input) {
|
|
53
|
+
function update(input, columns) {
|
|
50
54
|
return Effect.gen(function* () {
|
|
51
|
-
const encoded = yield* record(yield*
|
|
55
|
+
const encoded = yield* record(yield* columns === undefined
|
|
56
|
+
? encodeUpdate(input)
|
|
57
|
+
: Effect.flatMap(selectedUpdate(model, columns, [...idColumns, versionColumn], input), (schema) => Schema.encodeEffect(storageSchema(schema, model.fields, nameTransforms))(input)));
|
|
52
58
|
const expectedVersion = yield* validateVersion(encoded[versionColumn]);
|
|
53
59
|
const assignments = Object.entries(encoded).filter(([column]) => !idColumns.includes(column) && column !== versionColumn);
|
|
54
60
|
const set = sql.csv([
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"versionedStatements.js","sourceRoot":"","sources":["../src/versionedStatements.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAExC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"versionedStatements.js","sourceRoot":"","sources":["../src/versionedStatements.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@shivaedev/sql",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.38.0",
|
|
4
4
|
"description": "Schema-derived repositories over native Effect SQL",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"effect"
|
|
@@ -51,11 +51,11 @@
|
|
|
51
51
|
"@effect/sql-pg": "4.0.6",
|
|
52
52
|
"@effect/sql-sqlite-node": "4.0.6",
|
|
53
53
|
"@shivaedev/contract": "0.36.0",
|
|
54
|
-
"@shivaedev/jobs": "0.35.
|
|
55
|
-
"@shivaedev/quality": "0.
|
|
56
|
-
"@shivaedev/test-kits": "0.3.
|
|
57
|
-
"@shivaedev/test-sql": "0.
|
|
58
|
-
"@shivaedev/test-story": "0.
|
|
54
|
+
"@shivaedev/jobs": "0.35.1",
|
|
55
|
+
"@shivaedev/quality": "0.61.0",
|
|
56
|
+
"@shivaedev/test-kits": "0.3.1",
|
|
57
|
+
"@shivaedev/test-sql": "0.21.0",
|
|
58
|
+
"@shivaedev/test-story": "0.39.0",
|
|
59
59
|
"@types/node": "24.19.2",
|
|
60
60
|
"effect": "4.0.6",
|
|
61
61
|
"typescript": "7.0.2",
|
package/src/Model.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { Schema } from "effect";
|
|
2
|
+
|
|
3
|
+
function Group<TFields extends Schema.Struct.Fields>(fields: TFields, options: { readonly prefix: string }) {
|
|
4
|
+
return Schema.Struct(fields).annotate({ "@shivaedev/sql/groupPrefix": options.prefix });
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
export const Model = { Group };
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Model } from "effect/schema";
|
|
2
|
+
import type { PrimaryKey, Repository } from "#compositeRepository.ts";
|
|
3
|
+
import type { Queries } from "#repositoryQueries.ts";
|
|
4
|
+
import type { VersionColumn, VersionedWrites } from "#versionedRepository.ts";
|
|
5
|
+
|
|
6
|
+
export type VersionedRepositoryShape<TModel extends Model.Any, TId extends PrimaryKey<TModel>, TVersion extends VersionColumn<TModel, TId>> = Omit<
|
|
7
|
+
Repository<TModel, TId>,
|
|
8
|
+
keyof VersionedWrites<TModel, TId, TVersion>
|
|
9
|
+
> &
|
|
10
|
+
VersionedWrites<TModel, TId, TVersion> &
|
|
11
|
+
Queries<TModel>;
|
package/src/WorkerRelease.ts
CHANGED
|
@@ -1,40 +1,11 @@
|
|
|
1
|
-
import { Effect, Semaphore } from "effect";
|
|
2
1
|
import { defineService } from "@shivaedev/service/defineService.ts";
|
|
3
2
|
import { genericMethod } from "@shivaedev/service/genericMethod.ts";
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
const mutex = Semaphore.makeUnsafe(1);
|
|
7
|
-
const controls = new Set<(active: boolean) => Effect.Effect<void, unknown>>();
|
|
8
|
-
let active = false;
|
|
9
|
-
const locked = mutex.withPermits(1);
|
|
10
|
-
function register<E>(control: (active: boolean) => Effect.Effect<void, E>) {
|
|
11
|
-
const attach = Effect.gen(function* () {
|
|
12
|
-
controls.add(control);
|
|
13
|
-
yield* control(active);
|
|
14
|
-
});
|
|
15
|
-
const detach = Effect.sync(() => {
|
|
16
|
-
controls.delete(control);
|
|
17
|
-
});
|
|
18
|
-
return Effect.acquireRelease(locked(attach), () => locked(detach));
|
|
19
|
-
}
|
|
20
|
-
return {
|
|
21
|
-
service: { register },
|
|
22
|
-
setActive: (next: boolean) =>
|
|
23
|
-
locked(
|
|
24
|
-
Effect.gen(function* () {
|
|
25
|
-
if (next === active) {
|
|
26
|
-
return;
|
|
27
|
-
}
|
|
28
|
-
active = next;
|
|
29
|
-
yield* Effect.forEach(controls, (control) => control(active), { concurrency: "unbounded", discard: true });
|
|
30
|
-
}),
|
|
31
|
-
).pipe(Effect.uninterruptible),
|
|
32
|
-
};
|
|
33
|
-
});
|
|
3
|
+
import { initializeWorkerRelease } from "./initializeWorkerRelease.ts";
|
|
4
|
+
import { registerWorkerRelease } from "./registerWorkerRelease.ts";
|
|
34
5
|
|
|
35
6
|
export const WorkerRelease = defineService({
|
|
36
7
|
id: "@shivaedev/sql/WorkerRelease",
|
|
37
|
-
initialize:
|
|
38
|
-
methods: (
|
|
8
|
+
initialize: initializeWorkerRelease,
|
|
9
|
+
methods: (state) => ({ register: genericMethod(registerWorkerRelease(state)) }),
|
|
39
10
|
requires: [],
|
|
40
11
|
});
|