@dbos-inc/drizzle-datasource 4.4.4-preview.gc90a14c7ef → 4.4.7-preview.g8b8b418a5b
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/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +17 -15
- package/dist/index.js.map +1 -1
- package/index.ts +25 -13
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -21,10 +21,10 @@ export declare class DrizzleDataSource<CT = NodePgDatabase<{
|
|
|
21
21
|
[key: string]: object;
|
|
22
22
|
}>;
|
|
23
23
|
get client(): CT;
|
|
24
|
-
static initializeDBOSSchema(config: ClientConfig): Promise<void>;
|
|
24
|
+
static initializeDBOSSchema(config: ClientConfig, schemaName?: string): Promise<void>;
|
|
25
25
|
constructor(name: string, config: PoolConfig, entities?: {
|
|
26
26
|
[key: string]: object;
|
|
27
|
-
});
|
|
27
|
+
}, schemaName?: string);
|
|
28
28
|
runTransaction<T>(func: () => Promise<T>, config?: TransactionConfig): Promise<T>;
|
|
29
29
|
registerTransaction<This, Args extends unknown[], Return>(func: (this: This, ...args: Args) => Promise<Return>, config?: TransactionConfig & FunctionName): (this: This, ...args: Args) => Promise<Return>;
|
|
30
30
|
transaction(config?: TransactionConfig): <This, Args extends unknown[], Return>(target: object, propertyKey: PropertyKey, descriptor: TypedPropertyDescriptor<(this: This, ...args: Args) => Promise<Return>>) => TypedPropertyDescriptor<(this: This, ...args: Args) => Promise<Return>>;
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,YAAY,EAAQ,UAAU,EAAE,MAAM,IAAI,CAAC;AAC5D,OAAO,EAAmC,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACnF,OAAO,EAQL,cAAc,EAIf,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAW,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAGpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAQ1D,MAAM,MAAM,iBAAiB,GAAG,IAAI,CAAC,mBAAmB,EAAE,gBAAgB,GAAG,YAAY,CAAC,GAAG;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAI/G,MAAM,WAAW,sBAAsB;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,YAAY,EAAQ,UAAU,EAAE,MAAM,IAAI,CAAC;AAC5D,OAAO,EAAmC,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACnF,OAAO,EAQL,cAAc,EAIf,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAW,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAGpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAQ1D,MAAM,MAAM,iBAAiB,GAAG,IAAI,CAAC,mBAAmB,EAAE,gBAAgB,GAAG,YAAY,CAAC,GAAG;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAI/G,MAAM,WAAW,sBAAsB;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AA4MD,qBAAa,iBAAiB,CAAC,EAAE,GAAG,cAAc,CAAC;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,CAAC,CAC3E,YAAW,cAAc,CAAC,iBAAiB,CAAC;;IAuC1C,QAAQ,CAAC,IAAI,EAAE,MAAM;IAtBvB,MAAM,KAAK,MAAM;;OAEhB;IAED,IAAI,MAAM,OAET;WAEY,oBAAoB,CAAC,MAAM,EAAE,YAAY,EAAE,UAAU,GAAE,MAAe,GAAG,OAAO,CAAC,IAAI,CAAC;gBAcxF,IAAI,EAAE,MAAM,EACrB,MAAM,EAAE,UAAU,EAClB,QAAQ,GAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAO,EACxC,UAAU,GAAE,MAAe;IAMvB,cAAc,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,iBAAiB;IAI1E,mBAAmB,CAAC,IAAI,EAAE,IAAI,SAAS,OAAO,EAAE,EAAE,MAAM,EACtD,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,MAAM,CAAC,EACpD,MAAM,CAAC,EAAE,iBAAiB,GAAG,YAAY,GACxC,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,MAAM,CAAC;IAKjD,WAAW,CAAC,MAAM,CAAC,EAAE,iBAAiB,kDAI1B,MAAM,eACD,WAAW,cACZ,wBAAwB,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,IAAI,KAAK,QAAQ,MAAM,CAAC,CAAC,oCAAxC,IAAI,WAAW,IAAI,KAAK,QAAQ,MAAM,CAAC;CAevF"}
|
package/dist/index.js
CHANGED
|
@@ -15,10 +15,12 @@ class DrizzleTransactionHandler {
|
|
|
15
15
|
entities;
|
|
16
16
|
dsType = 'drizzle';
|
|
17
17
|
#connection;
|
|
18
|
-
|
|
18
|
+
schemaName;
|
|
19
|
+
constructor(name, config, entities = {}, schemaName = 'dbos') {
|
|
19
20
|
this.name = name;
|
|
20
21
|
this.config = config;
|
|
21
22
|
this.entities = entities;
|
|
23
|
+
this.schemaName = schemaName;
|
|
22
24
|
}
|
|
23
25
|
async initialize() {
|
|
24
26
|
const conn = this.#connection;
|
|
@@ -28,7 +30,7 @@ class DrizzleTransactionHandler {
|
|
|
28
30
|
await conn?.end();
|
|
29
31
|
let installed = false;
|
|
30
32
|
try {
|
|
31
|
-
const res = (await db.execute(drizzle_orm_1.sql.raw(datasource_1.checkSchemaInstallationPG)));
|
|
33
|
+
const res = (await db.execute(drizzle_orm_1.sql.raw((0, datasource_1.checkSchemaInstallationPG)(this.schemaName))));
|
|
32
34
|
const row = Array.isArray(res)
|
|
33
35
|
? res[0]
|
|
34
36
|
: (res.rows?.[0] ??
|
|
@@ -40,11 +42,11 @@ class DrizzleTransactionHandler {
|
|
|
40
42
|
}
|
|
41
43
|
if (!installed) {
|
|
42
44
|
try {
|
|
43
|
-
await db.execute(drizzle_orm_1.sql.raw(datasource_1.createTransactionCompletionSchemaPG));
|
|
44
|
-
await db.execute(drizzle_orm_1.sql.raw(datasource_1.createTransactionCompletionTablePG));
|
|
45
|
+
await db.execute(drizzle_orm_1.sql.raw((0, datasource_1.createTransactionCompletionSchemaPG)(this.schemaName)));
|
|
46
|
+
await db.execute(drizzle_orm_1.sql.raw((0, datasource_1.createTransactionCompletionTablePG)(this.schemaName)));
|
|
45
47
|
}
|
|
46
48
|
catch (err) {
|
|
47
|
-
throw new Error(`In initialization of 'DrizzleDataSource' ${this.name}: The '
|
|
49
|
+
throw new Error(`In initialization of 'DrizzleDataSource' ${this.name}: The '${this.schemaName}.transaction_completion' table does not exist, and could not be created. This should be added to your database migrations.
|
|
48
50
|
See: https://docs.dbos.dev/typescript/tutorials/transaction-tutorial#installing-the-dbos-schema`);
|
|
49
51
|
}
|
|
50
52
|
}
|
|
@@ -62,7 +64,7 @@ class DrizzleTransactionHandler {
|
|
|
62
64
|
}
|
|
63
65
|
async #checkExecution(workflowID, stepID) {
|
|
64
66
|
const statement = (0, drizzle_orm_1.sql) `
|
|
65
|
-
SELECT output, error FROM
|
|
67
|
+
SELECT output, error FROM ${drizzle_orm_1.sql.identifier(this.schemaName)}.transaction_completion
|
|
66
68
|
WHERE workflow_id = ${workflowID} AND function_num = ${stepID}`;
|
|
67
69
|
const result = await this.#drizzle.execute(statement);
|
|
68
70
|
if (result.rows.length !== 1) {
|
|
@@ -71,10 +73,10 @@ class DrizzleTransactionHandler {
|
|
|
71
73
|
const { output, error } = result.rows[0];
|
|
72
74
|
return error !== null ? { error } : { output };
|
|
73
75
|
}
|
|
74
|
-
static async #recordOutput(client, workflowID, stepID, output) {
|
|
76
|
+
static async #recordOutput(client, workflowID, stepID, output, schemaName) {
|
|
75
77
|
try {
|
|
76
78
|
const statement = (0, drizzle_orm_1.sql) `
|
|
77
|
-
INSERT INTO
|
|
79
|
+
INSERT INTO ${drizzle_orm_1.sql.identifier(schemaName)}.transaction_completion (workflow_id, function_num, output)
|
|
78
80
|
VALUES (${workflowID}, ${stepID}, ${output})`;
|
|
79
81
|
await client.execute(statement);
|
|
80
82
|
}
|
|
@@ -90,7 +92,7 @@ class DrizzleTransactionHandler {
|
|
|
90
92
|
async #recordError(workflowID, stepID, error) {
|
|
91
93
|
try {
|
|
92
94
|
const statement = (0, drizzle_orm_1.sql) `
|
|
93
|
-
INSERT INTO
|
|
95
|
+
INSERT INTO ${drizzle_orm_1.sql.identifier(this.schemaName)}.transaction_completion (workflow_id, function_num, error)
|
|
94
96
|
VALUES (${workflowID}, ${stepID}, ${error})`;
|
|
95
97
|
await this.#drizzle.execute(statement);
|
|
96
98
|
}
|
|
@@ -134,7 +136,7 @@ class DrizzleTransactionHandler {
|
|
|
134
136
|
});
|
|
135
137
|
// save the output of read/write transactions
|
|
136
138
|
if (saveResults) {
|
|
137
|
-
await DrizzleTransactionHandler.#recordOutput(client, workflowID, stepID, superjson_1.SuperJSON.stringify(result));
|
|
139
|
+
await DrizzleTransactionHandler.#recordOutput(client, workflowID, stepID, superjson_1.SuperJSON.stringify(result), this.schemaName);
|
|
138
140
|
}
|
|
139
141
|
return result;
|
|
140
142
|
}, { accessMode: config?.accessMode, isolationLevel: config?.isolationLevel });
|
|
@@ -181,21 +183,21 @@ class DrizzleDataSource {
|
|
|
181
183
|
get client() {
|
|
182
184
|
return DrizzleDataSource.#getClient(this.#provider);
|
|
183
185
|
}
|
|
184
|
-
static async initializeDBOSSchema(config) {
|
|
186
|
+
static async initializeDBOSSchema(config, schemaName = 'dbos') {
|
|
185
187
|
const client = new pg_1.Client(config);
|
|
186
188
|
try {
|
|
187
189
|
await client.connect();
|
|
188
|
-
await client.query(datasource_1.createTransactionCompletionSchemaPG);
|
|
189
|
-
await client.query(datasource_1.createTransactionCompletionTablePG);
|
|
190
|
+
await client.query((0, datasource_1.createTransactionCompletionSchemaPG)(schemaName));
|
|
191
|
+
await client.query((0, datasource_1.createTransactionCompletionTablePG)(schemaName));
|
|
190
192
|
}
|
|
191
193
|
finally {
|
|
192
194
|
await client.end();
|
|
193
195
|
}
|
|
194
196
|
}
|
|
195
197
|
#provider;
|
|
196
|
-
constructor(name, config, entities = {}) {
|
|
198
|
+
constructor(name, config, entities = {}, schemaName = 'dbos') {
|
|
197
199
|
this.name = name;
|
|
198
|
-
this.#provider = new DrizzleTransactionHandler(name, config, entities);
|
|
200
|
+
this.#provider = new DrizzleTransactionHandler(name, config, entities, schemaName);
|
|
199
201
|
(0, datasource_1.registerDataSource)(this.#provider);
|
|
200
202
|
}
|
|
201
203
|
async runTransaction(func, config) {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";;;AAAA,2BAA4D;AAC5D,iDAAmF;AACnF,8DAYuC;AACvC,6DAAoE;AACpE,6CAAgD;AAChD,yCAAsC;AAEtC,6CAAkC;AASlC,MAAM,aAAa,GAAG,IAAI,+BAAiB,EAAmB,CAAC;AAc/D,MAAM,yBAAyB;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";;;AAAA,2BAA4D;AAC5D,iDAAmF;AACnF,8DAYuC;AACvC,6DAAoE;AACpE,6CAAgD;AAChD,yCAAsC;AAEtC,6CAAkC;AASlC,MAAM,aAAa,GAAG,IAAI,+BAAiB,EAAmB,CAAC;AAc/D,MAAM,yBAAyB;IAMlB;IACQ;IACA;IAPV,MAAM,GAAG,SAAS,CAAC;IAC5B,WAAW,CAAgC;IAClC,UAAU,CAAS;IAE5B,YACW,IAAY,EACJ,MAAkB,EAClB,WAAsC,EAAE,EACzD,aAAqB,MAAM;QAHlB,SAAI,GAAJ,IAAI,CAAQ;QACJ,WAAM,GAAN,MAAM,CAAY;QAClB,aAAQ,GAAR,QAAQ,CAAgC;QAGzD,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,UAAU;QACd,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC;QAE9B,MAAM,MAAM,GAAG,IAAI,SAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACrC,MAAM,EAAE,GAAG,IAAA,uBAAO,EAAC,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QACtD,IAAI,CAAC,WAAW,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,CAAC;QACnD,MAAM,IAAI,EAAE,GAAG,EAAE,CAAC;QAElB,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,iBAAG,CAAC,GAAG,CAAC,IAAA,sCAAyB,EAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAY,CAAC;YAC/F,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;gBAC5B,CAAC,CAAE,GAAuC,CAAC,CAAC,CAAC;gBAC7C,CAAC,CAAC,CAAE,GAAkD,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;oBAC7D,GAAuC,CAAC,CAAC,CAAC,CAAC,CAAC;YACjD,SAAS,GAAG,CAAC,CAAC,GAAG,EAAE,aAAa,IAAI,CAAC,CAAC,GAAG,EAAE,YAAY,CAAC;QAC1D,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CACb,4CAA4C,IAAI,CAAC,IAAI,oCAAqC,CAAW,CAAC,OAAO,EAAE,CAChH,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,IAAI,CAAC;gBACH,MAAM,EAAE,CAAC,OAAO,CAAC,iBAAG,CAAC,GAAG,CAAC,IAAA,gDAAmC,EAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;gBAChF,MAAM,EAAE,CAAC,OAAO,CAAC,iBAAG,CAAC,GAAG,CAAC,IAAA,+CAAkC,EAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YACjF,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,IAAI,KAAK,CACb,4CAA4C,IAAI,CAAC,IAAI,UAAU,IAAI,CAAC,UAAU;0GACkB,CACjG,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,CAAC,OAAO;QACX,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC;QAE9B,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;QAE7B,MAAM,IAAI,EAAE,GAAG,EAAE,CAAC;IACpB,CAAC;IAED,IAAI,QAAQ;QACV,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,cAAc,IAAI,CAAC,IAAI,sBAAsB,CAAC,CAAC;QACjE,CAAC;QACD,OAAO,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,eAAe,CACnB,UAAkB,EAClB,MAAc;QAId,MAAM,SAAS,GAAG,IAAA,iBAAG,EAAA;oCACW,iBAAG,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC;8BACrC,UAAU,uBAAuB,MAAM,EAAE,CAAC;QACpE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAS,SAAS,CAAC,CAAC;QAE9D,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7B,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACzC,OAAO,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC;IACjD,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,aAAa,CACxB,MAAiD,EACjD,UAAkB,EAClB,MAAc,EACd,MAAc,EACd,UAAkB;QAElB,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,IAAA,iBAAG,EAAA;sBACL,iBAAG,CAAC,UAAU,CAAC,UAAU,CAAC;kBAC9B,UAAU,KAAK,MAAM,KAAK,MAAM,GAAG,CAAC;YAChD,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAClC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,IAAA,iCAAoB,EAAC,KAAK,CAAC,EAAE,CAAC;gBAChC,MAAM,IAAI,oCAAyB,CAAC,UAAU,CAAC,CAAC;YAClD,CAAC;iBAAM,CAAC;gBACN,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,UAAkB,EAAE,MAAc,EAAE,KAAa;QAClE,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,IAAA,iBAAG,EAAA;sBACL,iBAAG,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC;kBACnC,UAAU,KAAK,MAAM,KAAK,KAAK,GAAG,CAAC;YAC/C,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACzC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,IAAA,iCAAoB,EAAC,KAAK,CAAC,EAAE,CAAC;gBAChC,MAAM,IAAI,oCAAyB,CAAC,UAAU,CAAC,CAAC;YAClD,CAAC;iBAAM,CAAC;gBACN,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;IACH,CAAC;IAED,4DAA4D;IAC5D,KAAK,CAAC,yBAAyB,CAC7B,MAAqC,EACrC,MAAY,EACZ,IAAoD,EACpD,GAAG,IAAU;QAEb,MAAM,UAAU,GAAG,eAAI,CAAC,UAAU,CAAC;QACnC,MAAM,MAAM,GAAG,eAAI,CAAC,MAAM,CAAC;QAC3B,IAAI,UAAU,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACrD,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;QACjE,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,EAAE,UAAU,KAAK,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;QACnE,MAAM,WAAW,GAAG,CAAC,QAAQ,IAAI,UAAU,KAAK,SAAS,CAAC;QAE1D,4BAA4B;QAC5B,IAAI,WAAW,GAAG,CAAC,CAAC;QACpB,MAAM,aAAa,GAAG,GAAG,CAAC;QAC1B,MAAM,cAAc,GAAG,IAAI,CAAC,CAAC,0BAA0B;QAEvD,OAAO,IAAI,EAAE,CAAC;YACZ,oDAAoD;YACpD,MAAM,cAAc,GAAG,WAAW,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,MAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACjG,IAAI,cAAc,EAAE,CAAC;gBACnB,eAAI,CAAC,IAAI,EAAE,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;gBAExC,IAAI,OAAO,IAAI,cAAc,EAAE,CAAC;oBAC9B,MAAM,qBAAS,CAAC,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;gBAC9C,CAAC;gBACD,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,qBAAS,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAW,CAAC;YAC3F,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,WAAW,CAC5C,KAAK,EAAE,MAAM,EAAE,EAAE;oBACf,sCAAsC;oBACtC,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,KAAK,IAAI,EAAE;wBACzE,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC;oBAC1C,CAAC,CAAC,CAAC;oBAEH,6CAA6C;oBAC7C,IAAI,WAAW,EAAE,CAAC;wBAChB,MAAM,yBAAyB,CAAC,aAAa,CAC3C,MAAM,EACN,UAAU,EACV,MAAO,EACP,qBAAS,CAAC,SAAS,CAAC,MAAM,CAAC,EAC3B,IAAI,CAAC,UAAU,CAChB,CAAC;oBACJ,CAAC;oBAED,OAAO,MAAM,CAAC;gBAChB,CAAC,EACD,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,EAAE,cAAc,EAAE,CAC3E,CAAC;gBAEF,OAAO,MAAM,CAAC;YAChB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,IAAA,0CAA6B,EAAC,KAAK,CAAC,EAAE,CAAC;oBACzC,eAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,2BAA2B,EAAE,EAAE,eAAe,EAAE,WAAW,EAAE,EAAE,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC;oBACtG,gCAAgC;oBAChC,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC;oBACjE,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,aAAa,EAAE,cAAc,CAAC,CAAC;oBACpE,SAAS;gBACX,CAAC;qBAAM,CAAC;oBACN,IAAI,WAAW,EAAE,CAAC;wBAChB,MAAM,OAAO,GAAG,qBAAS,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;wBAC3C,MAAM,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,MAAO,EAAE,OAAO,CAAC,CAAC;oBACxD,CAAC;oBAED,MAAM,KAAK,CAAC;gBACd,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;CACF;AAED,MAAa,iBAAiB;IAwCjB;IArCX,mDAAmD;IACnD,MAAM,CAAC,UAAU,CAAC,CAA6B;QAC7C,IAAI,CAAC,eAAI,CAAC,eAAe,EAAE,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,uEAAuE,CAAC,CAAC;QAC3F,CAAC;QACD,MAAM,GAAG,GAAG,aAAa,CAAC,QAAQ,EAAE,CAAC;QACrC,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,MAAM,IAAI,KAAK,CAAC,uEAAuE,CAAC,CAAC;QAC3F,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,KAAK,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,2EAA2E,CAAC,CAAC;QAC/F,CAAC;QACD,OAAO,GAAG,CAAC,MAAM,CAAC;IACpB,CAAC;IAED,MAAM,KAAK,MAAM;QACf,OAAO,iBAAiB,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IACjD,CAAC;IAED,IAAI,MAAM;QACR,OAAO,iBAAiB,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAO,CAAC;IAC5D,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,oBAAoB,CAAC,MAAoB,EAAE,aAAqB,MAAM;QACjF,MAAM,MAAM,GAAG,IAAI,WAAM,CAAC,MAAM,CAAC,CAAC;QAClC,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;YACvB,MAAM,MAAM,CAAC,KAAK,CAAC,IAAA,gDAAmC,EAAC,UAAU,CAAC,CAAC,CAAC;YACpE,MAAM,MAAM,CAAC,KAAK,CAAC,IAAA,+CAAkC,EAAC,UAAU,CAAC,CAAC,CAAC;QACrE,CAAC;gBAAS,CAAC;YACT,MAAM,MAAM,CAAC,GAAG,EAAE,CAAC;QACrB,CAAC;IACH,CAAC;IAED,SAAS,CAA4B;IAErC,YACW,IAAY,EACrB,MAAkB,EAClB,WAAsC,EAAE,EACxC,aAAqB,MAAM;QAHlB,SAAI,GAAJ,IAAI,CAAQ;QAKrB,IAAI,CAAC,SAAS,GAAG,IAAI,yBAAyB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;QACnF,IAAA,+BAAkB,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACrC,CAAC;IAED,KAAK,CAAC,cAAc,CAAI,IAAsB,EAAE,MAA0B;QACxE,OAAO,MAAM,IAAA,2BAAc,EAAC,IAAI,EAAE,MAAM,EAAE,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IAC9F,CAAC;IAED,mBAAmB,CACjB,IAAoD,EACpD,MAAyC;QAEzC,OAAO,IAAA,gCAAmB,EAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IACtD,CAAC;IAED,YAAY;IACZ,WAAW,CAAC,MAA0B;QACpC,4DAA4D;QAC5D,MAAM,EAAE,GAAG,IAAI,CAAC;QAChB,OAAO,SAAS,SAAS,CACvB,MAAc,EACd,WAAwB,EACxB,UAAmF;YAEnF,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;gBACtB,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;YACxE,CAAC;YAED,UAAU,CAAC,KAAK,GAAG,EAAE,CAAC,mBAAmB,CAAC,UAAU,CAAC,KAAK,EAAE;gBAC1D,GAAG,MAAM;gBACT,WAAW,EAAE,MAAM;gBACnB,IAAI,EAAE,MAAM,EAAE,IAAI,IAAI,MAAM,CAAC,WAAW,CAAC;aAC1C,CAAC,CAAC;YAEH,OAAO,UAAU,CAAC;QACpB,CAAC,CAAC;IACJ,CAAC;CACF;AAlFD,8CAkFC"}
|
package/index.ts
CHANGED
|
@@ -43,12 +43,16 @@ interface DrizzleConnection {
|
|
|
43
43
|
class DrizzleTransactionHandler implements DataSourceTransactionHandler {
|
|
44
44
|
readonly dsType = 'drizzle';
|
|
45
45
|
#connection: DrizzleConnection | undefined;
|
|
46
|
+
readonly schemaName: string;
|
|
46
47
|
|
|
47
48
|
constructor(
|
|
48
49
|
readonly name: string,
|
|
49
50
|
private readonly config: PoolConfig,
|
|
50
51
|
private readonly entities: { [key: string]: object } = {},
|
|
51
|
-
|
|
52
|
+
schemaName: string = 'dbos',
|
|
53
|
+
) {
|
|
54
|
+
this.schemaName = schemaName;
|
|
55
|
+
}
|
|
52
56
|
|
|
53
57
|
async initialize(): Promise<void> {
|
|
54
58
|
const conn = this.#connection;
|
|
@@ -60,7 +64,7 @@ class DrizzleTransactionHandler implements DataSourceTransactionHandler {
|
|
|
60
64
|
|
|
61
65
|
let installed = false;
|
|
62
66
|
try {
|
|
63
|
-
const res = (await db.execute(sql.raw(checkSchemaInstallationPG))) as unknown;
|
|
67
|
+
const res = (await db.execute(sql.raw(checkSchemaInstallationPG(this.schemaName)))) as unknown;
|
|
64
68
|
const row = Array.isArray(res)
|
|
65
69
|
? (res as CheckSchemaInstallationReturn[])[0]
|
|
66
70
|
: ((res as { rows?: CheckSchemaInstallationReturn[] }).rows?.[0] ??
|
|
@@ -74,11 +78,11 @@ class DrizzleTransactionHandler implements DataSourceTransactionHandler {
|
|
|
74
78
|
|
|
75
79
|
if (!installed) {
|
|
76
80
|
try {
|
|
77
|
-
await db.execute(sql.raw(createTransactionCompletionSchemaPG));
|
|
78
|
-
await db.execute(sql.raw(createTransactionCompletionTablePG));
|
|
81
|
+
await db.execute(sql.raw(createTransactionCompletionSchemaPG(this.schemaName)));
|
|
82
|
+
await db.execute(sql.raw(createTransactionCompletionTablePG(this.schemaName)));
|
|
79
83
|
} catch (err) {
|
|
80
84
|
throw new Error(
|
|
81
|
-
`In initialization of 'DrizzleDataSource' ${this.name}: The '
|
|
85
|
+
`In initialization of 'DrizzleDataSource' ${this.name}: The '${this.schemaName}.transaction_completion' table does not exist, and could not be created. This should be added to your database migrations.
|
|
82
86
|
See: https://docs.dbos.dev/typescript/tutorials/transaction-tutorial#installing-the-dbos-schema`,
|
|
83
87
|
);
|
|
84
88
|
}
|
|
@@ -107,7 +111,7 @@ class DrizzleTransactionHandler implements DataSourceTransactionHandler {
|
|
|
107
111
|
type Result = { output: string | null; error: string | null };
|
|
108
112
|
|
|
109
113
|
const statement = sql`
|
|
110
|
-
SELECT output, error FROM
|
|
114
|
+
SELECT output, error FROM ${sql.identifier(this.schemaName)}.transaction_completion
|
|
111
115
|
WHERE workflow_id = ${workflowID} AND function_num = ${stepID}`;
|
|
112
116
|
const result = await this.#drizzle.execute<Result>(statement);
|
|
113
117
|
|
|
@@ -124,10 +128,11 @@ class DrizzleTransactionHandler implements DataSourceTransactionHandler {
|
|
|
124
128
|
workflowID: string,
|
|
125
129
|
stepID: number,
|
|
126
130
|
output: string,
|
|
131
|
+
schemaName: string,
|
|
127
132
|
): Promise<void> {
|
|
128
133
|
try {
|
|
129
134
|
const statement = sql`
|
|
130
|
-
INSERT INTO
|
|
135
|
+
INSERT INTO ${sql.identifier(schemaName)}.transaction_completion (workflow_id, function_num, output)
|
|
131
136
|
VALUES (${workflowID}, ${stepID}, ${output})`;
|
|
132
137
|
await client.execute(statement);
|
|
133
138
|
} catch (error) {
|
|
@@ -142,7 +147,7 @@ class DrizzleTransactionHandler implements DataSourceTransactionHandler {
|
|
|
142
147
|
async #recordError(workflowID: string, stepID: number, error: string): Promise<void> {
|
|
143
148
|
try {
|
|
144
149
|
const statement = sql`
|
|
145
|
-
INSERT INTO
|
|
150
|
+
INSERT INTO ${sql.identifier(this.schemaName)}.transaction_completion (workflow_id, function_num, error)
|
|
146
151
|
VALUES (${workflowID}, ${stepID}, ${error})`;
|
|
147
152
|
await this.#drizzle.execute(statement);
|
|
148
153
|
} catch (error) {
|
|
@@ -197,7 +202,13 @@ class DrizzleTransactionHandler implements DataSourceTransactionHandler {
|
|
|
197
202
|
|
|
198
203
|
// save the output of read/write transactions
|
|
199
204
|
if (saveResults) {
|
|
200
|
-
await DrizzleTransactionHandler.#recordOutput(
|
|
205
|
+
await DrizzleTransactionHandler.#recordOutput(
|
|
206
|
+
client,
|
|
207
|
+
workflowID,
|
|
208
|
+
stepID!,
|
|
209
|
+
SuperJSON.stringify(result),
|
|
210
|
+
this.schemaName,
|
|
211
|
+
);
|
|
201
212
|
}
|
|
202
213
|
|
|
203
214
|
return result;
|
|
@@ -252,12 +263,12 @@ export class DrizzleDataSource<CT = NodePgDatabase<{ [key: string]: object }>>
|
|
|
252
263
|
return DrizzleDataSource.#getClient(this.#provider) as CT;
|
|
253
264
|
}
|
|
254
265
|
|
|
255
|
-
static async initializeDBOSSchema(config: ClientConfig): Promise<void> {
|
|
266
|
+
static async initializeDBOSSchema(config: ClientConfig, schemaName: string = 'dbos'): Promise<void> {
|
|
256
267
|
const client = new Client(config);
|
|
257
268
|
try {
|
|
258
269
|
await client.connect();
|
|
259
|
-
await client.query(createTransactionCompletionSchemaPG);
|
|
260
|
-
await client.query(createTransactionCompletionTablePG);
|
|
270
|
+
await client.query(createTransactionCompletionSchemaPG(schemaName));
|
|
271
|
+
await client.query(createTransactionCompletionTablePG(schemaName));
|
|
261
272
|
} finally {
|
|
262
273
|
await client.end();
|
|
263
274
|
}
|
|
@@ -269,8 +280,9 @@ export class DrizzleDataSource<CT = NodePgDatabase<{ [key: string]: object }>>
|
|
|
269
280
|
readonly name: string,
|
|
270
281
|
config: PoolConfig,
|
|
271
282
|
entities: { [key: string]: object } = {},
|
|
283
|
+
schemaName: string = 'dbos',
|
|
272
284
|
) {
|
|
273
|
-
this.#provider = new DrizzleTransactionHandler(name, config, entities);
|
|
285
|
+
this.#provider = new DrizzleTransactionHandler(name, config, entities, schemaName);
|
|
274
286
|
registerDataSource(this.#provider);
|
|
275
287
|
}
|
|
276
288
|
|
package/package.json
CHANGED