@shivaedev/sql 0.46.3 → 0.47.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 +18 -0
- package/README.md +61 -27
- package/dist/backfillPostgres.d.ts +1 -1
- package/dist/backfillPostgres.d.ts.map +1 -1
- package/dist/backfillPostgres.js +1 -1
- package/dist/backfillPostgres.js.map +1 -1
- package/dist/batchedDelete.d.ts +1 -1
- package/dist/compositeRepository.d.ts +3 -1
- package/dist/compositeRepository.d.ts.map +1 -1
- package/dist/compositeRepository.js +2 -2
- package/dist/compositeRepository.js.map +1 -1
- package/dist/databaseAddress.d.ts.map +1 -1
- package/dist/databaseAddress.js +34 -18
- package/dist/databaseAddress.js.map +1 -1
- package/dist/deleteGroupsBatched.d.ts +1 -1
- package/dist/deleteGroupsBatched.d.ts.map +1 -1
- package/dist/deleteGroupsBatched.js +1 -1
- package/dist/deleteGroupsBatched.js.map +1 -1
- package/dist/makeAggregate.d.ts +2 -0
- package/dist/makeAggregate.d.ts.map +1 -1
- package/dist/makeAggregate.js +1 -0
- package/dist/makeAggregate.js.map +1 -1
- package/dist/migrations.js +1 -1
- package/dist/migrations.js.map +1 -1
- package/dist/orderedChildStatements.d.ts +1 -1
- package/dist/postgresChanges.js +1 -1
- package/dist/postgresChanges.js.map +1 -1
- package/dist/readSql.d.ts +19 -0
- package/dist/readSql.d.ts.map +1 -0
- package/dist/readSql.js +37 -0
- package/dist/readSql.js.map +1 -0
- package/dist/recordRepositoryRead.d.ts +12 -0
- package/dist/recordRepositoryRead.d.ts.map +1 -0
- package/dist/recordRepositoryRead.js +102 -0
- package/dist/recordRepositoryRead.js.map +1 -0
- package/dist/repository.d.ts.map +1 -1
- package/dist/repository.js +6 -5
- package/dist/repository.js.map +1 -1
- package/dist/repositoryChanges.d.ts +2 -2
- package/dist/repositoryChanges.d.ts.map +1 -1
- package/dist/repositoryChanges.js +30 -14
- package/dist/repositoryChanges.js.map +1 -1
- package/dist/repositoryCollection.d.ts +2 -0
- package/dist/repositoryCollection.d.ts.map +1 -1
- package/dist/repositoryCollection.js +14 -1
- package/dist/repositoryCollection.js.map +1 -1
- package/dist/repositoryQueries.d.ts +2 -0
- package/dist/repositoryQueries.d.ts.map +1 -1
- package/dist/repositoryQueries.js +3 -0
- package/dist/repositoryQueries.js.map +1 -1
- package/dist/repositoryWrites.d.ts +1 -1
- package/dist/transact.d.ts +5 -2
- package/dist/transact.d.ts.map +1 -1
- package/dist/transact.js +7 -3
- package/dist/transact.js.map +1 -1
- package/package.json +16 -16
- package/src/backfillPostgres.ts +1 -1
- package/src/compositeRepository.ts +9 -2
- package/src/databaseAddress.ts +36 -18
- package/src/deleteGroupsBatched.ts +0 -1
- package/src/makeAggregate.ts +4 -2
- package/src/migrations.ts +1 -1
- package/src/postgresChanges.ts +1 -1
- package/src/readSql.ts +51 -0
- package/src/recordRepositoryRead.ts +126 -0
- package/src/repository.ts +6 -5
- package/src/repositoryChanges.ts +42 -15
- package/src/repositoryCollection.ts +18 -1
- package/src/repositoryQueries.ts +5 -0
- package/src/transact.ts +14 -15
package/src/repositoryQueries.ts
CHANGED
|
@@ -9,6 +9,7 @@ import type { Aggregate } from "#aggregateQuery.ts";
|
|
|
9
9
|
import { latestPerGroup as makeLatestPerGroup } from "#latestPerGroup.ts";
|
|
10
10
|
import { makeAggregate } from "#makeAggregate.ts";
|
|
11
11
|
import { makeQueryClauses } from "#makeQueryClauses.ts";
|
|
12
|
+
import type { RecordRead } from "#recordRepositoryRead.ts";
|
|
12
13
|
import type { FindMany, FindOne, LatestPerGroup } from "#repository.ts";
|
|
13
14
|
import { makeFilter } from "#repositoryFilter.ts";
|
|
14
15
|
import { sqlNameTransforms } from "#sqlNameTransforms.ts";
|
|
@@ -57,6 +58,7 @@ export interface Queries<TModel extends Model.Any> {
|
|
|
57
58
|
export function makeQueries<TModel extends Model.Any>(
|
|
58
59
|
model: TModel,
|
|
59
60
|
options: {
|
|
61
|
+
readonly recordRead: RecordRead;
|
|
60
62
|
readonly tableName: string;
|
|
61
63
|
readonly spanPrefix: string;
|
|
62
64
|
},
|
|
@@ -72,6 +74,7 @@ export function makeQueries<TModel extends Model.Any>(
|
|
|
72
74
|
function count(query: Pick<FindMany<TModel, Key<TModel>>, "where"> = {}): Effect.Effect<number, SqlError | Schema.SchemaError, unknown> {
|
|
73
75
|
return Effect.gen(function* () {
|
|
74
76
|
const predicate = yield* where(query.where, true, true);
|
|
77
|
+
yield* options.recordRead(query.where);
|
|
75
78
|
const rows = yield* sql`select cast(count(*) as text) as count from ${sql(options.tableName)} where ${predicate}`;
|
|
76
79
|
const [result] = yield* Schema.decodeUnknownEffect(CountResult)(rows);
|
|
77
80
|
return result.count;
|
|
@@ -88,6 +91,7 @@ export function makeQueries<TModel extends Model.Any>(
|
|
|
88
91
|
const predicate = yield* where(query.where, true, true);
|
|
89
92
|
const order = yield* orderClause(query.orderBy);
|
|
90
93
|
const limit = yield* limitClause(query.limit);
|
|
94
|
+
yield* options.recordRead(query.where);
|
|
91
95
|
return sql`select ${sql.csv(groupColumns(model.fields, keys).map(({ column }) => sql`${sql(column)}`))} from ${sql(options.tableName)} where ${predicate} ${order} ${limit}`;
|
|
92
96
|
});
|
|
93
97
|
return { fields, statement };
|
|
@@ -112,6 +116,7 @@ export function makeQueries<TModel extends Model.Any>(
|
|
|
112
116
|
return Effect.gen(function* () {
|
|
113
117
|
const order = yield* orderClause(query.orderBy);
|
|
114
118
|
const rowLimit = yield* decodeLimit(query.limit);
|
|
119
|
+
yield* options.recordRead(query.where);
|
|
115
120
|
return yield* readLatest(query, order, rowLimit);
|
|
116
121
|
}).pipe(Effect.withSpan(`${options.spanPrefix}.latestPerGroup`));
|
|
117
122
|
}
|
package/src/transact.ts
CHANGED
|
@@ -79,29 +79,28 @@ export interface TransactOptions<TError> {
|
|
|
79
79
|
readonly onSqlError: (error: SqlError) => TError;
|
|
80
80
|
}
|
|
81
81
|
|
|
82
|
+
type Transacted<A, E, R> = Effect.Effect<A, E, R | SqlClient.SqlClient | Reactivity.Reactivity>;
|
|
83
|
+
|
|
82
84
|
export const transact: {
|
|
83
|
-
<
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
<A, E, R, TError>(
|
|
87
|
-
effect: Effect.Effect<A, E, R>,
|
|
88
|
-
options: TransactOptions<TError>,
|
|
89
|
-
): Effect.Effect<A, Exclude<E, SqlError> | TError, R | SqlClient.SqlClient | Reactivity.Reactivity>;
|
|
85
|
+
(): <A, E, R>(effect: Effect.Effect<A, E, R>) => Transacted<A, E | SqlError, R>;
|
|
86
|
+
<TError>(options: TransactOptions<TError>): <A, E, R>(effect: Effect.Effect<A, E, R>) => Transacted<A, Exclude<E, SqlError> | TError, R>;
|
|
87
|
+
<A, E, R>(effect: Effect.Effect<A, E, R>): Transacted<A, E | SqlError, R>;
|
|
88
|
+
<A, E, R, TError>(effect: Effect.Effect<A, E, R>, options: TransactOptions<TError>): Transacted<A, Exclude<E, SqlError> | TError, R>;
|
|
90
89
|
} = dual(
|
|
91
|
-
|
|
92
|
-
Effect.fn("Transact.transact")(function* <A, E, R, TError>(effect: Effect.Effect<A, E, R>, options
|
|
90
|
+
(args) => Effect.isEffect(args[0]),
|
|
91
|
+
Effect.fn("Transact.transact")(function* <A, E, R, TError>(effect: Effect.Effect<A, E, R>, options?: TransactOptions<TError>) {
|
|
93
92
|
const sql = yield* SqlClient.SqlClient;
|
|
94
93
|
const native = yield* Effect.serviceOption(sql.transactionService);
|
|
95
|
-
|
|
94
|
+
const transacted = invalidations
|
|
96
95
|
.within((body, boundary) =>
|
|
97
96
|
native._tag === "Some"
|
|
98
97
|
? sql.withTransaction(body)
|
|
99
98
|
: boundary.restore(sql.withTransaction(Effect.tap(body, () => sql.afterCommit(boundary.committed)))),
|
|
100
99
|
)(effect)
|
|
101
|
-
.pipe(
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
100
|
+
.pipe(Effect.provideService(invalidations.Observer, observe), Effect.provideService(invalidations.CommittedSink, committed));
|
|
101
|
+
if (options === undefined) {
|
|
102
|
+
return yield* transacted;
|
|
103
|
+
}
|
|
104
|
+
return yield* Effect.catchIf(transacted, isSqlError, (error) => Effect.fail(options.onSqlError(error)));
|
|
106
105
|
}),
|
|
107
106
|
);
|