@fragno-dev/db 0.0.1 → 0.1.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/.turbo/turbo-build.log +137 -13
- package/.turbo/turbo-test.log +36 -0
- package/CHANGELOG.md +7 -0
- package/dist/adapters/adapters.d.ts +18 -0
- package/dist/adapters/adapters.d.ts.map +1 -0
- package/dist/adapters/drizzle/drizzle-adapter.d.ts +21 -0
- package/dist/adapters/drizzle/drizzle-adapter.d.ts.map +1 -0
- package/dist/adapters/drizzle/drizzle-adapter.js +62 -0
- package/dist/adapters/drizzle/drizzle-adapter.js.map +1 -0
- package/dist/adapters/drizzle/drizzle-query.d.ts +17 -0
- package/dist/adapters/drizzle/drizzle-query.d.ts.map +1 -0
- package/dist/adapters/drizzle/drizzle-query.js +139 -0
- package/dist/adapters/drizzle/drizzle-query.js.map +1 -0
- package/dist/adapters/drizzle/drizzle-uow-compiler.d.ts +9 -0
- package/dist/adapters/drizzle/drizzle-uow-compiler.d.ts.map +1 -0
- package/dist/adapters/drizzle/drizzle-uow-compiler.js +300 -0
- package/dist/adapters/drizzle/drizzle-uow-compiler.js.map +1 -0
- package/dist/adapters/drizzle/drizzle-uow-decoder.js +82 -0
- package/dist/adapters/drizzle/drizzle-uow-decoder.js.map +1 -0
- package/dist/adapters/drizzle/drizzle-uow-executor.js +125 -0
- package/dist/adapters/drizzle/drizzle-uow-executor.js.map +1 -0
- package/dist/adapters/drizzle/generate.js +273 -0
- package/dist/adapters/drizzle/generate.js.map +1 -0
- package/dist/adapters/drizzle/join-column-utils.js +28 -0
- package/dist/adapters/drizzle/join-column-utils.js.map +1 -0
- package/dist/adapters/drizzle/shared.js +11 -0
- package/dist/adapters/drizzle/shared.js.map +1 -0
- package/dist/adapters/kysely/kysely-adapter.d.ts +23 -0
- package/dist/adapters/kysely/kysely-adapter.d.ts.map +1 -0
- package/dist/adapters/kysely/kysely-adapter.js +119 -0
- package/dist/adapters/kysely/kysely-adapter.js.map +1 -0
- package/dist/adapters/kysely/kysely-query-builder.js +306 -0
- package/dist/adapters/kysely/kysely-query-builder.js.map +1 -0
- package/dist/adapters/kysely/kysely-query-compiler.js +67 -0
- package/dist/adapters/kysely/kysely-query-compiler.js.map +1 -0
- package/dist/adapters/kysely/kysely-query.js +158 -0
- package/dist/adapters/kysely/kysely-query.js.map +1 -0
- package/dist/adapters/kysely/kysely-uow-compiler.js +139 -0
- package/dist/adapters/kysely/kysely-uow-compiler.js.map +1 -0
- package/dist/adapters/kysely/kysely-uow-executor.js +89 -0
- package/dist/adapters/kysely/kysely-uow-executor.js.map +1 -0
- package/dist/adapters/kysely/migration/execute.js +176 -0
- package/dist/adapters/kysely/migration/execute.js.map +1 -0
- package/dist/fragment.d.ts +54 -0
- package/dist/fragment.d.ts.map +1 -0
- package/dist/fragment.js +92 -0
- package/dist/fragment.js.map +1 -0
- package/dist/id.d.ts +2 -0
- package/dist/migration-engine/auto-from-schema.js +116 -0
- package/dist/migration-engine/auto-from-schema.js.map +1 -0
- package/dist/migration-engine/create.d.ts +41 -0
- package/dist/migration-engine/create.d.ts.map +1 -0
- package/dist/migration-engine/create.js +58 -0
- package/dist/migration-engine/create.js.map +1 -0
- package/dist/migration-engine/shared.d.ts +90 -0
- package/dist/migration-engine/shared.d.ts.map +1 -0
- package/dist/migration-engine/shared.js +8 -0
- package/dist/migration-engine/shared.js.map +1 -0
- package/dist/mod.d.ts +55 -2
- package/dist/mod.d.ts.map +1 -1
- package/dist/mod.js +111 -2
- package/dist/mod.js.map +1 -1
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/column-builder.js +108 -0
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/column-builder.js.map +1 -0
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/column.js +55 -0
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/column.js.map +1 -0
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/entity.js +18 -0
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/entity.js.map +1 -0
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/pg-core/columns/common.js +183 -0
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/pg-core/columns/common.js.map +1 -0
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/pg-core/columns/enum.js +58 -0
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/pg-core/columns/enum.js.map +1 -0
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/pg-core/foreign-keys.js +68 -0
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/pg-core/foreign-keys.js.map +1 -0
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/pg-core/unique-constraint.js +56 -0
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/pg-core/unique-constraint.js.map +1 -0
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/pg-core/utils/array.js +65 -0
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/pg-core/utils/array.js.map +1 -0
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/sql/expressions/conditions.js +81 -0
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/sql/expressions/conditions.js.map +1 -0
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/sql/expressions/select.js +13 -0
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/sql/expressions/select.js.map +1 -0
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/sql/functions/aggregate.js +10 -0
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/sql/functions/aggregate.js.map +1 -0
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/sql/sql.js +372 -0
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/sql/sql.js.map +1 -0
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/subquery.js +23 -0
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/subquery.js.map +1 -0
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/table.js +62 -0
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/table.js.map +1 -0
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/table.utils.js +6 -0
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/table.utils.js.map +1 -0
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/tracing-utils.js +8 -0
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/tracing-utils.js.map +1 -0
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/tracing.js +8 -0
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/tracing.js.map +1 -0
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/view-common.js +6 -0
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/view-common.js.map +1 -0
- package/dist/query/condition-builder.d.ts +41 -0
- package/dist/query/condition-builder.d.ts.map +1 -0
- package/dist/query/condition-builder.js +93 -0
- package/dist/query/condition-builder.js.map +1 -0
- package/dist/query/cursor.d.ts +88 -0
- package/dist/query/cursor.d.ts.map +1 -0
- package/dist/query/cursor.js +103 -0
- package/dist/query/cursor.js.map +1 -0
- package/dist/query/orm/orm.d.ts +18 -0
- package/dist/query/orm/orm.d.ts.map +1 -0
- package/dist/query/orm/orm.js +48 -0
- package/dist/query/orm/orm.js.map +1 -0
- package/dist/query/query.d.ts +79 -0
- package/dist/query/query.d.ts.map +1 -0
- package/dist/query/query.js +1 -0
- package/dist/query/result-transform.js +155 -0
- package/dist/query/result-transform.js.map +1 -0
- package/dist/query/unit-of-work.d.ts +435 -0
- package/dist/query/unit-of-work.d.ts.map +1 -0
- package/dist/query/unit-of-work.js +549 -0
- package/dist/query/unit-of-work.js.map +1 -0
- package/dist/schema/create.d.ts +273 -116
- package/dist/schema/create.d.ts.map +1 -1
- package/dist/schema/create.js +410 -222
- package/dist/schema/create.js.map +1 -1
- package/dist/schema/serialize.js +101 -0
- package/dist/schema/serialize.js.map +1 -0
- package/dist/schema-generator/schema-generator.d.ts +15 -0
- package/dist/schema-generator/schema-generator.d.ts.map +1 -0
- package/dist/shared/providers.d.ts +6 -0
- package/dist/shared/providers.d.ts.map +1 -0
- package/dist/util/import-generator.js +26 -0
- package/dist/util/import-generator.js.map +1 -0
- package/dist/util/parse.js +15 -0
- package/dist/util/parse.js.map +1 -0
- package/dist/util/types.d.ts +8 -0
- package/dist/util/types.d.ts.map +1 -0
- package/package.json +63 -2
- package/src/adapters/adapters.ts +22 -0
- package/src/adapters/drizzle/drizzle-adapter-pglite.test.ts +433 -0
- package/src/adapters/drizzle/drizzle-adapter.test.ts +122 -0
- package/src/adapters/drizzle/drizzle-adapter.ts +118 -0
- package/src/adapters/drizzle/drizzle-query.ts +234 -0
- package/src/adapters/drizzle/drizzle-uow-compiler.test.ts +1084 -0
- package/src/adapters/drizzle/drizzle-uow-compiler.ts +546 -0
- package/src/adapters/drizzle/drizzle-uow-decoder.ts +165 -0
- package/src/adapters/drizzle/drizzle-uow-executor.ts +213 -0
- package/src/adapters/drizzle/generate.test.ts +643 -0
- package/src/adapters/drizzle/generate.ts +481 -0
- package/src/adapters/drizzle/join-column-utils.test.ts +79 -0
- package/src/adapters/drizzle/join-column-utils.ts +39 -0
- package/src/adapters/drizzle/migrate-drizzle.test.ts +226 -0
- package/src/adapters/drizzle/shared.ts +22 -0
- package/src/adapters/drizzle/test-utils.ts +56 -0
- package/src/adapters/kysely/kysely-adapter-pglite.test.ts +789 -0
- package/src/adapters/kysely/kysely-adapter.ts +196 -0
- package/src/adapters/kysely/kysely-query-builder.test.ts +1344 -0
- package/src/adapters/kysely/kysely-query-builder.ts +611 -0
- package/src/adapters/kysely/kysely-query-compiler.ts +124 -0
- package/src/adapters/kysely/kysely-query.ts +254 -0
- package/src/adapters/kysely/kysely-uow-compiler.test.ts +916 -0
- package/src/adapters/kysely/kysely-uow-compiler.ts +271 -0
- package/src/adapters/kysely/kysely-uow-executor.ts +149 -0
- package/src/adapters/kysely/kysely-uow-joins.test.ts +811 -0
- package/src/adapters/kysely/migration/execute-mysql.test.ts +1173 -0
- package/src/adapters/kysely/migration/execute-postgres.test.ts +2657 -0
- package/src/adapters/kysely/migration/execute.ts +382 -0
- package/src/adapters/kysely/migration/kysely-migrator.test.ts +197 -0
- package/src/fragment.test.ts +287 -0
- package/src/fragment.ts +198 -0
- package/src/migration-engine/auto-from-schema.test.ts +118 -58
- package/src/migration-engine/auto-from-schema.ts +103 -32
- package/src/migration-engine/create.test.ts +34 -46
- package/src/migration-engine/create.ts +41 -26
- package/src/migration-engine/shared.ts +26 -6
- package/src/mod.ts +197 -1
- package/src/query/condition-builder.test.ts +379 -0
- package/src/query/condition-builder.ts +294 -0
- package/src/query/cursor.test.ts +296 -0
- package/src/query/cursor.ts +147 -0
- package/src/query/orm/orm.ts +92 -0
- package/src/query/query-type.test.ts +429 -0
- package/src/query/query.ts +200 -0
- package/src/query/result-transform.test.ts +795 -0
- package/src/query/result-transform.ts +247 -0
- package/src/query/unit-of-work-types.test.ts +192 -0
- package/src/query/unit-of-work.test.ts +947 -0
- package/src/query/unit-of-work.ts +1199 -0
- package/src/schema/create.test.ts +653 -110
- package/src/schema/create.ts +708 -337
- package/src/schema/serialize.test.ts +559 -0
- package/src/schema/serialize.ts +359 -0
- package/src/schema-generator/schema-generator.ts +12 -0
- package/src/shared/config.ts +0 -8
- package/src/util/import-generator.ts +28 -0
- package/src/util/parse.ts +16 -0
- package/src/util/types.ts +4 -0
- package/tsconfig.json +1 -1
- package/tsdown.config.ts +11 -1
- package/vitest.config.ts +3 -0
- /package/dist/{cuid.js → id.js} +0 -0
- /package/src/{cuid.ts → id.ts} +0 -0
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
import type { AbstractQuery } from "../../query/query";
|
|
2
|
+
import type { AnySchema } from "../../schema/create";
|
|
3
|
+
import type { DrizzleConfig } from "./drizzle-adapter";
|
|
4
|
+
import type { CompiledMutation, UOWExecutor } from "../../query/unit-of-work";
|
|
5
|
+
import { createDrizzleUOWCompiler, type DrizzleCompiledQuery } from "./drizzle-uow-compiler";
|
|
6
|
+
import { executeDrizzleRetrievalPhase, executeDrizzleMutationPhase } from "./drizzle-uow-executor";
|
|
7
|
+
import { UnitOfWork } from "../../query/unit-of-work";
|
|
8
|
+
import { parseDrizzle } from "./shared";
|
|
9
|
+
import { createDrizzleUOWDecoder } from "./drizzle-uow-decoder";
|
|
10
|
+
|
|
11
|
+
export interface DrizzleResult {
|
|
12
|
+
rows: Record<string, unknown>[];
|
|
13
|
+
affectedRows: number;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Configuration options for creating a Drizzle Unit of Work
|
|
18
|
+
*/
|
|
19
|
+
export interface DrizzleUOWConfig {
|
|
20
|
+
/**
|
|
21
|
+
* Optional callback to receive compiled SQL queries for logging/debugging
|
|
22
|
+
* This callback is invoked for each query as it's compiled
|
|
23
|
+
*/
|
|
24
|
+
onQuery?: (query: DrizzleCompiledQuery) => void;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Creates a Drizzle-based query engine for the given schema.
|
|
29
|
+
*
|
|
30
|
+
* This is the main entry point for creating a database query interface using Drizzle.
|
|
31
|
+
* It uses a compiler-based architecture where queries are compiled to SQL and then executed,
|
|
32
|
+
* enabling features like SQL snapshot testing.
|
|
33
|
+
*
|
|
34
|
+
* @param schema - The database schema definition
|
|
35
|
+
* @param config - Drizzle configuration containing the database instance and provider
|
|
36
|
+
* @returns An AbstractQuery instance for performing database operations
|
|
37
|
+
*
|
|
38
|
+
* @example
|
|
39
|
+
* ```ts
|
|
40
|
+
* const queryEngine = fromDrizzle(mySchema, {
|
|
41
|
+
* db: drizzle,
|
|
42
|
+
* provider: 'postgresql'
|
|
43
|
+
* });
|
|
44
|
+
*
|
|
45
|
+
* const uow = queryEngine.createUnitOfWork('myOperation');
|
|
46
|
+
* ```
|
|
47
|
+
*/
|
|
48
|
+
export function fromDrizzle<T extends AnySchema>(
|
|
49
|
+
schema: T,
|
|
50
|
+
config: DrizzleConfig,
|
|
51
|
+
): AbstractQuery<T, DrizzleUOWConfig> {
|
|
52
|
+
const [db] = parseDrizzle(config.db);
|
|
53
|
+
const { provider } = config;
|
|
54
|
+
|
|
55
|
+
function createUOW(name?: string, uowConfig?: DrizzleUOWConfig) {
|
|
56
|
+
const uowCompiler = createDrizzleUOWCompiler(schema, config, uowConfig?.onQuery);
|
|
57
|
+
|
|
58
|
+
const executor: UOWExecutor<DrizzleCompiledQuery, DrizzleResult> = {
|
|
59
|
+
executeRetrievalPhase: (retrievalBatch: DrizzleCompiledQuery[]) =>
|
|
60
|
+
executeDrizzleRetrievalPhase(db, retrievalBatch),
|
|
61
|
+
executeMutationPhase: (mutationBatch: CompiledMutation<DrizzleCompiledQuery>[]) =>
|
|
62
|
+
executeDrizzleMutationPhase(db, mutationBatch),
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
const decoder = createDrizzleUOWDecoder(schema, provider);
|
|
66
|
+
|
|
67
|
+
return new UnitOfWork(schema, uowCompiler, executor, decoder, name);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
return {
|
|
71
|
+
find(tableName, builderFn) {
|
|
72
|
+
const uow = createUOW();
|
|
73
|
+
uow.find(tableName, builderFn);
|
|
74
|
+
return uow.executeRetrieve();
|
|
75
|
+
},
|
|
76
|
+
|
|
77
|
+
async findFirst(tableName, builderFn) {
|
|
78
|
+
const uow = createUOW();
|
|
79
|
+
if (builderFn) {
|
|
80
|
+
uow.find(tableName, (b) => builderFn(b as never).pageSize(1));
|
|
81
|
+
} else {
|
|
82
|
+
uow.find(tableName, (b) => b.whereIndex("primary").pageSize(1));
|
|
83
|
+
}
|
|
84
|
+
// executeRetrieve runs an array of `find` operation results, which each return an array of rows
|
|
85
|
+
const [result]: unknown[][] = await uow.executeRetrieve();
|
|
86
|
+
return result?.[0] ?? null;
|
|
87
|
+
},
|
|
88
|
+
|
|
89
|
+
async create(tableName, values) {
|
|
90
|
+
const uow = createUOW();
|
|
91
|
+
uow.create(tableName as string, values as never);
|
|
92
|
+
const { success } = await uow.executeMutations();
|
|
93
|
+
if (!success) {
|
|
94
|
+
throw new Error("Failed to create record");
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
const createdIds = uow.getCreatedIds();
|
|
98
|
+
const createdId = createdIds[0];
|
|
99
|
+
if (!createdId) {
|
|
100
|
+
throw new Error("Failed to get created ID");
|
|
101
|
+
}
|
|
102
|
+
return createdId;
|
|
103
|
+
},
|
|
104
|
+
|
|
105
|
+
async createMany(tableName, valuesArray) {
|
|
106
|
+
const uow = createUOW();
|
|
107
|
+
for (const values of valuesArray) {
|
|
108
|
+
uow.create(tableName as string, values as never);
|
|
109
|
+
}
|
|
110
|
+
const { success } = await uow.executeMutations();
|
|
111
|
+
if (!success) {
|
|
112
|
+
throw new Error("Failed to create records");
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
return uow.getCreatedIds();
|
|
116
|
+
},
|
|
117
|
+
|
|
118
|
+
async update(tableName, id, builderFn) {
|
|
119
|
+
const uow = createUOW();
|
|
120
|
+
uow.update(tableName as string, id, builderFn as never);
|
|
121
|
+
const { success } = await uow.executeMutations();
|
|
122
|
+
if (!success) {
|
|
123
|
+
throw new Error("Failed to update record (version conflict or record not found)");
|
|
124
|
+
}
|
|
125
|
+
},
|
|
126
|
+
|
|
127
|
+
async updateMany(tableName, builderFn) {
|
|
128
|
+
// FIXME: This is not correct
|
|
129
|
+
|
|
130
|
+
let whereConfig: { indexName?: string; condition?: unknown } = {};
|
|
131
|
+
let setValues: unknown;
|
|
132
|
+
|
|
133
|
+
const specialBuilder = {
|
|
134
|
+
whereIndex(indexName: string, condition?: unknown) {
|
|
135
|
+
whereConfig = { indexName, condition };
|
|
136
|
+
return this;
|
|
137
|
+
},
|
|
138
|
+
set(values: unknown) {
|
|
139
|
+
setValues = values;
|
|
140
|
+
return this;
|
|
141
|
+
},
|
|
142
|
+
};
|
|
143
|
+
|
|
144
|
+
builderFn(specialBuilder);
|
|
145
|
+
|
|
146
|
+
if (!whereConfig.indexName) {
|
|
147
|
+
throw new Error("whereIndex() must be called in updateMany");
|
|
148
|
+
}
|
|
149
|
+
if (!setValues) {
|
|
150
|
+
throw new Error("set() must be called in updateMany");
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
const findUow = createUOW();
|
|
154
|
+
findUow.find(tableName, (b) => {
|
|
155
|
+
if (whereConfig.condition) {
|
|
156
|
+
return b.whereIndex(whereConfig.indexName as never, whereConfig.condition as never);
|
|
157
|
+
}
|
|
158
|
+
return b.whereIndex(whereConfig.indexName as never);
|
|
159
|
+
});
|
|
160
|
+
const findResults = await findUow.executeRetrieve();
|
|
161
|
+
const records = (findResults as unknown as [unknown])[0];
|
|
162
|
+
|
|
163
|
+
// @ts-expect-error - Type narrowing doesn't work through unknown cast
|
|
164
|
+
if (!records || records.length === 0) {
|
|
165
|
+
return;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
const updateUow = createUOW();
|
|
169
|
+
for (const record of records as never as Array<{ id: unknown }>) {
|
|
170
|
+
updateUow.update(tableName as string, record.id as string, (b) =>
|
|
171
|
+
b.set(setValues as never),
|
|
172
|
+
);
|
|
173
|
+
}
|
|
174
|
+
const { success } = await updateUow.executeMutations();
|
|
175
|
+
if (!success) {
|
|
176
|
+
throw new Error("Failed to update records (version conflict)");
|
|
177
|
+
}
|
|
178
|
+
},
|
|
179
|
+
|
|
180
|
+
async delete(tableName, id, builderFn) {
|
|
181
|
+
const uow = createUOW();
|
|
182
|
+
uow.delete(tableName as string, id, builderFn as never);
|
|
183
|
+
const { success } = await uow.executeMutations();
|
|
184
|
+
if (!success) {
|
|
185
|
+
throw new Error("Failed to delete record (version conflict or record not found)");
|
|
186
|
+
}
|
|
187
|
+
},
|
|
188
|
+
|
|
189
|
+
async deleteMany(tableName, builderFn) {
|
|
190
|
+
let whereConfig: { indexName?: string; condition?: unknown } = {};
|
|
191
|
+
|
|
192
|
+
const specialBuilder = {
|
|
193
|
+
whereIndex(indexName: string, condition?: unknown) {
|
|
194
|
+
whereConfig = { indexName, condition };
|
|
195
|
+
return this;
|
|
196
|
+
},
|
|
197
|
+
};
|
|
198
|
+
|
|
199
|
+
builderFn(specialBuilder as never);
|
|
200
|
+
|
|
201
|
+
if (!whereConfig.indexName) {
|
|
202
|
+
throw new Error("whereIndex() must be called in deleteMany");
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
const findUow = createUOW();
|
|
206
|
+
findUow.find(tableName as string, (b) => {
|
|
207
|
+
if (whereConfig.condition) {
|
|
208
|
+
return b.whereIndex(whereConfig.indexName as never, whereConfig.condition as never);
|
|
209
|
+
}
|
|
210
|
+
return b.whereIndex(whereConfig.indexName as never);
|
|
211
|
+
});
|
|
212
|
+
const findResults2 = await findUow.executeRetrieve();
|
|
213
|
+
const records = (findResults2 as unknown as [unknown])[0];
|
|
214
|
+
|
|
215
|
+
// @ts-expect-error - Type narrowing doesn't work through unknown cast
|
|
216
|
+
if (!records || records.length === 0) {
|
|
217
|
+
return;
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
const deleteUow = createUOW();
|
|
221
|
+
for (const record of records as never as Array<{ id: unknown }>) {
|
|
222
|
+
deleteUow.delete(tableName as string, record.id as string);
|
|
223
|
+
}
|
|
224
|
+
const { success } = await deleteUow.executeMutations();
|
|
225
|
+
if (!success) {
|
|
226
|
+
throw new Error("Failed to delete records (version conflict)");
|
|
227
|
+
}
|
|
228
|
+
},
|
|
229
|
+
|
|
230
|
+
createUnitOfWork(name, uowConfig) {
|
|
231
|
+
return createUOW(name, uowConfig);
|
|
232
|
+
},
|
|
233
|
+
} as AbstractQuery<T, DrizzleUOWConfig>;
|
|
234
|
+
}
|