dsqlbase 0.1.4 → 0.1.5
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 +7 -0
- package/dist/client/database/base.d.ts +3 -3
- package/dist/client/database/base.d.ts.map +1 -1
- package/dist/client/database/base.js +10 -2
- package/dist/client/database/base.js.map +1 -1
- package/dist/client/database/client.d.ts +6 -1
- package/dist/client/database/client.d.ts.map +1 -1
- package/dist/client/database/client.js +5 -0
- package/dist/client/database/client.js.map +1 -1
- package/dist/client/index.d.ts +1 -0
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +1 -0
- package/dist/client/index.js.map +1 -1
- package/dist/client/transaction/index.d.ts +2 -0
- package/dist/client/transaction/index.d.ts.map +1 -0
- package/dist/client/transaction/index.js +2 -0
- package/dist/client/transaction/index.js.map +1 -0
- package/dist/client/transaction/occ-retry.d.ts +9 -0
- package/dist/client/transaction/occ-retry.d.ts.map +1 -0
- package/dist/client/transaction/occ-retry.js +14 -0
- package/dist/client/transaction/occ-retry.js.map +1 -0
- package/dist/client/transaction/transaction-client.d.ts +11 -0
- package/dist/client/transaction/transaction-client.d.ts.map +1 -0
- package/dist/client/transaction/transaction-client.js +57 -0
- package/dist/client/transaction/transaction-client.js.map +1 -0
- package/dist/pg/index.d.ts +10 -2
- package/dist/pg/index.d.ts.map +1 -1
- package/dist/pg/index.js +23 -0
- package/dist/pg/index.js.map +1 -1
- package/dist/pglite/index.d.ts +5 -0
- package/dist/pglite/index.d.ts.map +1 -1
- package/dist/pglite/index.js +15 -0
- package/dist/pglite/index.js.map +1 -1
- package/package.json +3 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { DefinitionSchema, ExecutionContext, SQLQuery, SQLStatement } from "@dsqlbase/core";
|
|
1
|
+
import { DefinitionSchema, ExecutableQuery, ExecutionContext, SQLQuery, SQLStatement } from "@dsqlbase/core";
|
|
2
2
|
export declare abstract class BaseClient<T extends DefinitionSchema> {
|
|
3
|
-
|
|
3
|
+
protected readonly _ctx: ExecutionContext<T>;
|
|
4
4
|
constructor(ctx: ExecutionContext<T>);
|
|
5
|
-
$query<T = unknown>(sql: SQLQuery):
|
|
5
|
+
$query<T = unknown>(sql: SQLQuery): ExecutableQuery<T[]>;
|
|
6
6
|
$execute<T = unknown>(query: SQLStatement): Promise<T[]>;
|
|
7
7
|
}
|
|
8
8
|
//# sourceMappingURL=base.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../src/client/database/base.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../src/client/database/base.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,QAAQ,EACR,YAAY,EACb,MAAM,gBAAgB,CAAC;AAExB,8BAAsB,UAAU,CAAC,CAAC,SAAS,gBAAgB;IACzD,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC;gBAEjC,GAAG,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAIpC,MAAM,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,QAAQ;IAc3B,QAAQ,CAAC,CAAC,GAAG,OAAO,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;CAG/D"}
|
|
@@ -1,10 +1,18 @@
|
|
|
1
|
+
import { ExecutableQuery, } from "@dsqlbase/core";
|
|
1
2
|
export class BaseClient {
|
|
2
3
|
_ctx;
|
|
3
4
|
constructor(ctx) {
|
|
4
5
|
this._ctx = ctx;
|
|
5
6
|
}
|
|
6
|
-
|
|
7
|
-
return
|
|
7
|
+
$query(sql) {
|
|
8
|
+
return new ExecutableQuery({
|
|
9
|
+
mode: "many",
|
|
10
|
+
name: "anonymous_query",
|
|
11
|
+
type: "select",
|
|
12
|
+
args: {},
|
|
13
|
+
query: sql.toQuery(),
|
|
14
|
+
resolve: (result) => result,
|
|
15
|
+
}, this._ctx.session);
|
|
8
16
|
}
|
|
9
17
|
async $execute(query) {
|
|
10
18
|
return this._ctx.session.execute(query);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../../src/client/database/base.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../../src/client/database/base.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,eAAe,GAIhB,MAAM,gBAAgB,CAAC;AAExB,MAAM,OAAgB,UAAU;IACX,IAAI,CAAsB;IAE7C,YAAY,GAAwB;QAClC,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;IAClB,CAAC;IAED,MAAM,CAAc,GAAa;QAC/B,OAAO,IAAI,eAAe,CACxB;YACE,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,iBAAiB;YACvB,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,EAAE;YACR,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE;YACpB,OAAO,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM;SAC5B,EACD,IAAI,CAAC,IAAI,CAAC,OAAO,CAClB,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,QAAQ,CAAc,KAAmB;QAC7C,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAI,KAAK,CAAC,CAAC;IAC7C,CAAC;CACF"}
|
|
@@ -1,5 +1,10 @@
|
|
|
1
|
-
import { DefinitionSchema } from "@dsqlbase/core";
|
|
1
|
+
import { DefinitionSchema, ExecutableQuery } from "@dsqlbase/core";
|
|
2
2
|
import { BaseClient } from "./base.js";
|
|
3
|
+
import { TxClient } from "../transaction/transaction-client.js";
|
|
3
4
|
export declare class DatabaseClient<TDefinition extends DefinitionSchema> extends BaseClient<TDefinition> {
|
|
5
|
+
$transaction<const TQueries extends ExecutableQuery<unknown>[]>(queries: TQueries): Promise<{
|
|
6
|
+
-readonly [K in keyof TQueries]: TQueries[K] extends ExecutableQuery<infer TResult> ? TResult : never;
|
|
7
|
+
}>;
|
|
8
|
+
$transaction<TReturn = unknown>(callback: (tx: TxClient<TDefinition>) => Promise<TReturn>): Promise<TReturn>;
|
|
4
9
|
}
|
|
5
10
|
//# sourceMappingURL=client.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/client/database/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/client/database/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAA2B,QAAQ,EAAE,MAAM,sCAAsC,CAAC;AAEzF,qBAAa,cAAc,CAAC,WAAW,SAAS,gBAAgB,CAAE,SAAQ,UAAU,CAAC,WAAW,CAAC;IAClF,YAAY,CAAC,KAAK,CAAC,QAAQ,SAAS,eAAe,CAAC,OAAO,CAAC,EAAE,EACzE,OAAO,EAAE,QAAQ,GAChB,OAAO,CAAC;QACT,CAAC,UAAU,CAAC,IAAI,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,SAAS,eAAe,CAAC,MAAM,OAAO,CAAC,GAC/E,OAAO,GACP,KAAK;KACV,CAAC;IACW,YAAY,CAAC,OAAO,GAAG,OAAO,EACzC,QAAQ,EAAE,CAAC,EAAE,EAAE,QAAQ,CAAC,WAAW,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,GACxD,OAAO,CAAC,OAAO,CAAC;CAOpB"}
|
|
@@ -1,4 +1,9 @@
|
|
|
1
1
|
import { BaseClient } from "./base.js";
|
|
2
|
+
import { createTransactionRunner } from "../transaction/transaction-client.js";
|
|
2
3
|
export class DatabaseClient extends BaseClient {
|
|
4
|
+
async $transaction(arg) {
|
|
5
|
+
const runner = await createTransactionRunner(this._ctx);
|
|
6
|
+
return runner(arg);
|
|
7
|
+
}
|
|
3
8
|
}
|
|
4
9
|
//# sourceMappingURL=client.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/client/database/client.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/client/database/client.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,uBAAuB,EAAY,MAAM,sCAAsC,CAAC;AAEzF,MAAM,OAAO,cAAqD,SAAQ,UAAuB;IAWxF,KAAK,CAAC,YAAY,CACvB,GAAuF;QAEvF,MAAM,MAAM,GAAG,MAAM,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxD,OAAO,MAAM,CAAU,GAAG,CAAC,CAAC;IAC9B,CAAC;CACF"}
|
package/dist/client/index.d.ts
CHANGED
|
@@ -2,5 +2,6 @@ export type * from "./model/base.js";
|
|
|
2
2
|
export { isFilterType } from "./model/base.js";
|
|
3
3
|
export { ModelClient } from "./model/client.js";
|
|
4
4
|
export { DatabaseClient, type QueryClient, type Models } from "./database/index.js";
|
|
5
|
+
export { TransactionClient, type TxClient } from "./transaction/index.js";
|
|
5
6
|
export { createClient, type ClientOptions } from "./create.js";
|
|
6
7
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA,mBAAmB,iBAAiB,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,KAAK,WAAW,EAAE,KAAK,MAAM,EAAE,MAAM,qBAAqB,CAAC;AACpF,OAAO,EAAE,YAAY,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA,mBAAmB,iBAAiB,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,KAAK,WAAW,EAAE,KAAK,MAAM,EAAE,MAAM,qBAAqB,CAAC;AACpF,OAAO,EAAE,iBAAiB,EAAE,KAAK,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAC1E,OAAO,EAAE,YAAY,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC"}
|
package/dist/client/index.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export { isFilterType } from "./model/base.js";
|
|
2
2
|
export { ModelClient } from "./model/client.js";
|
|
3
3
|
export { DatabaseClient } from "./database/index.js";
|
|
4
|
+
export { TransactionClient } from "./transaction/index.js";
|
|
4
5
|
export { createClient } from "./create.js";
|
|
5
6
|
//# sourceMappingURL=index.js.map
|
package/dist/client/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAiC,MAAM,qBAAqB,CAAC;AACpF,OAAO,EAAE,YAAY,EAAsB,MAAM,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAiC,MAAM,qBAAqB,CAAC;AACpF,OAAO,EAAE,iBAAiB,EAAiB,MAAM,wBAAwB,CAAC;AAC1E,OAAO,EAAE,YAAY,EAAsB,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/client/transaction/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,KAAK,QAAQ,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/client/transaction/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAiB,uBAAuB,EAAE,MAAM,yBAAyB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export interface OCCRetryOptions {
|
|
2
|
+
maxRetries?: number;
|
|
3
|
+
delay?: number;
|
|
4
|
+
maxDelay?: number;
|
|
5
|
+
}
|
|
6
|
+
export declare function backoffDelay(attempt: number, baseDelay: number, maxDelay: number): number;
|
|
7
|
+
export declare function sleep(ms: number): Promise<void>;
|
|
8
|
+
export declare function isOccError(error: unknown): boolean;
|
|
9
|
+
//# sourceMappingURL=occ-retry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"occ-retry.d.ts","sourceRoot":"","sources":["../../../src/client/transaction/occ-retry.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAIzF;AAED,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE/C;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAGlD"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export function backoffDelay(attempt, baseDelay, maxDelay) {
|
|
2
|
+
const delay = baseDelay * Math.pow(2, attempt);
|
|
3
|
+
const jitter = Math.random() * delay * 0.1;
|
|
4
|
+
return Math.min(delay + jitter, maxDelay);
|
|
5
|
+
}
|
|
6
|
+
export function sleep(ms) {
|
|
7
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
8
|
+
}
|
|
9
|
+
export function isOccError(error) {
|
|
10
|
+
if (!error || typeof error !== "object")
|
|
11
|
+
return false;
|
|
12
|
+
return error.code === "40001";
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=occ-retry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"occ-retry.js","sourceRoot":"","sources":["../../../src/client/transaction/occ-retry.ts"],"names":[],"mappings":"AAMA,MAAM,UAAU,YAAY,CAAC,OAAe,EAAE,SAAiB,EAAE,QAAgB;IAC/E,MAAM,KAAK,GAAG,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,KAAK,GAAG,GAAG,CAAC;IAC3C,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,MAAM,EAAE,QAAQ,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,KAAK,CAAC,EAAU;IAC9B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAc;IACvC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IACtD,OAAQ,KAA2B,CAAC,IAAI,KAAK,OAAO,CAAC;AACvD,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { DefinitionSchema, ExecutableQuery, ExecutionContext, TransactionSession } from "@dsqlbase/core";
|
|
2
|
+
import { BaseClient } from "../database/base.js";
|
|
3
|
+
import { Models } from "../database/index.js";
|
|
4
|
+
import { OCCRetryOptions } from "./occ-retry.js";
|
|
5
|
+
export declare class TransactionClient<TDefinition extends DefinitionSchema> extends BaseClient<TDefinition> {
|
|
6
|
+
private readonly _session;
|
|
7
|
+
constructor(ctx: ExecutionContext<TDefinition>, session: TransactionSession);
|
|
8
|
+
}
|
|
9
|
+
export type TxClient<T extends DefinitionSchema> = TransactionClient<T> & Models<T>;
|
|
10
|
+
export declare function createTransactionRunner<TDefinition extends DefinitionSchema>(ctx: ExecutionContext<TDefinition>, options?: OCCRetryOptions): Promise<(<TReturn = unknown>(opsOrCallback: ExecutableQuery<TReturn>[] | ((client: TxClient<TDefinition>) => Promise<TReturn>), attempt?: number) => Promise<TReturn>)>;
|
|
11
|
+
//# sourceMappingURL=transaction-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transaction-client.d.ts","sourceRoot":"","sources":["../../../src/client/transaction/transaction-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,kBAAkB,EACnB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAA4B,eAAe,EAAS,MAAM,gBAAgB,CAAC;AAElF,qBAAa,iBAAiB,CAC5B,WAAW,SAAS,gBAAgB,CACpC,SAAQ,UAAU,CAAC,WAAW,CAAC;IAC/B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAqB;gBAElC,GAAG,EAAE,gBAAgB,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,kBAAkB;CAI5E;AAED,MAAM,MAAM,QAAQ,CAAC,CAAC,SAAS,gBAAgB,IAAI,iBAAiB,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AAEpF,wBAAsB,uBAAuB,CAAC,WAAW,SAAS,gBAAgB,EAChF,GAAG,EAAE,gBAAgB,CAAC,WAAW,CAAC,EAClC,OAAO,GAAE,eAAoB,aAwBf,OAAO,2BAEf,eAAe,CAAC,OAAO,CAAC,EAAE,GAC1B,CAAC,CAAC,MAAM,EAAE,QAAQ,CAAC,WAAW,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC,uBAExD,OAAO,CAAC,OAAO,CAAC,GA+BpB"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { ExecutionContext, } from "@dsqlbase/core";
|
|
2
|
+
import { BaseClient } from "../database/base.js";
|
|
3
|
+
import { ModelClient } from "../model/client.js";
|
|
4
|
+
import { backoffDelay, isOccError, sleep } from "./occ-retry.js";
|
|
5
|
+
export class TransactionClient extends BaseClient {
|
|
6
|
+
_session;
|
|
7
|
+
constructor(ctx, session) {
|
|
8
|
+
super(ctx);
|
|
9
|
+
this._session = session;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
export async function createTransactionRunner(ctx, options = {}) {
|
|
13
|
+
if (typeof ctx.session.beginTransaction !== "function") {
|
|
14
|
+
throw new Error("Session does not support transactions");
|
|
15
|
+
}
|
|
16
|
+
const session = await ctx.session.beginTransaction();
|
|
17
|
+
const context = new ExecutionContext({
|
|
18
|
+
...ctx,
|
|
19
|
+
session: session,
|
|
20
|
+
});
|
|
21
|
+
const txClient = new TransactionClient(context, session);
|
|
22
|
+
for (const [tableName, table] of Object.entries(ctx.schema.getTables())) {
|
|
23
|
+
const modelClient = new ModelClient(context, table);
|
|
24
|
+
Object.defineProperty(txClient, tableName, {
|
|
25
|
+
value: modelClient,
|
|
26
|
+
writable: false,
|
|
27
|
+
enumerable: true,
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
return async (opsOrCallback, attempt = 1) => {
|
|
31
|
+
const { maxRetries = 3, delay = 50, maxDelay = 1000 } = options;
|
|
32
|
+
try {
|
|
33
|
+
if (Array.isArray(opsOrCallback)) {
|
|
34
|
+
const results = [];
|
|
35
|
+
for (const op of opsOrCallback) {
|
|
36
|
+
const result = await op.clone(session).execute();
|
|
37
|
+
results.push(result);
|
|
38
|
+
}
|
|
39
|
+
await session.commit();
|
|
40
|
+
return results;
|
|
41
|
+
}
|
|
42
|
+
const result = await opsOrCallback(txClient);
|
|
43
|
+
await session.commit();
|
|
44
|
+
return result;
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
await session.rollback();
|
|
48
|
+
if (isOccError(error) && attempt < maxRetries) {
|
|
49
|
+
await sleep(backoffDelay(attempt, delay, maxDelay));
|
|
50
|
+
const runner = await createTransactionRunner(ctx, options);
|
|
51
|
+
return runner(opsOrCallback, attempt + 1);
|
|
52
|
+
}
|
|
53
|
+
throw error;
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=transaction-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transaction-client.js","sourceRoot":"","sources":["../../../src/client/transaction/transaction-client.ts"],"names":[],"mappings":"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"}
|
package/dist/pg/index.d.ts
CHANGED
|
@@ -1,9 +1,17 @@
|
|
|
1
|
-
import { Session, SQLStatement } from "@dsqlbase/core";
|
|
2
|
-
import { Pool } from "pg";
|
|
1
|
+
import { Session, SQLStatement, TransactionSession } from "@dsqlbase/core";
|
|
2
|
+
import { Pool, PoolClient } from "pg";
|
|
3
3
|
export declare class PGSession implements Session {
|
|
4
4
|
private _client;
|
|
5
5
|
constructor(client: Pool);
|
|
6
6
|
execute<T = unknown>(query: SQLStatement): Promise<T[]>;
|
|
7
|
+
beginTransaction(): Promise<TransactionSession>;
|
|
8
|
+
}
|
|
9
|
+
export declare class PGTransactionSession implements TransactionSession {
|
|
10
|
+
private _client;
|
|
11
|
+
constructor(client: PoolClient);
|
|
12
|
+
execute<T = unknown>(query: SQLStatement): Promise<T[]>;
|
|
13
|
+
commit(): Promise<void>;
|
|
14
|
+
rollback(): Promise<void>;
|
|
7
15
|
}
|
|
8
16
|
export declare function createPgSession(client: Pool): PGSession;
|
|
9
17
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/pg/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/pg/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/pg/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAC3E,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAEtC,qBAAa,SAAU,YAAW,OAAO;IACvC,OAAO,CAAC,OAAO,CAAO;gBAEV,MAAM,EAAE,IAAI;IAIlB,OAAO,CAAC,CAAC,GAAG,OAAO,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAKvD,gBAAgB,IAAI,OAAO,CAAC,kBAAkB,CAAC;CAKtD;AAED,qBAAa,oBAAqB,YAAW,kBAAkB;IAC7D,OAAO,CAAC,OAAO,CAAa;gBAEhB,MAAM,EAAE,UAAU;IAIxB,OAAO,CAAC,CAAC,GAAG,OAAO,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAKvD,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAKvB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAIhC;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,IAAI,GAAG,SAAS,CAEvD"}
|
package/dist/pg/index.js
CHANGED
|
@@ -7,6 +7,29 @@ export class PGSession {
|
|
|
7
7
|
const result = await this._client.query(query.text, query.params);
|
|
8
8
|
return result.rows;
|
|
9
9
|
}
|
|
10
|
+
async beginTransaction() {
|
|
11
|
+
const client = await this._client.connect();
|
|
12
|
+
await client.query("BEGIN");
|
|
13
|
+
return new PGTransactionSession(client);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
export class PGTransactionSession {
|
|
17
|
+
_client;
|
|
18
|
+
constructor(client) {
|
|
19
|
+
this._client = client;
|
|
20
|
+
}
|
|
21
|
+
async execute(query) {
|
|
22
|
+
const result = await this._client.query(query.text, query.params);
|
|
23
|
+
return result.rows;
|
|
24
|
+
}
|
|
25
|
+
async commit() {
|
|
26
|
+
await this._client.query("COMMIT");
|
|
27
|
+
this._client.release();
|
|
28
|
+
}
|
|
29
|
+
async rollback() {
|
|
30
|
+
await this._client.query("ROLLBACK");
|
|
31
|
+
this._client.release();
|
|
32
|
+
}
|
|
10
33
|
}
|
|
11
34
|
export function createPgSession(client) {
|
|
12
35
|
return new PGSession(client);
|
package/dist/pg/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/pg/index.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,SAAS;IACZ,OAAO,CAAO;IAEtB,YAAY,MAAY;QACtB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;IACxB,CAAC;IAED,KAAK,CAAC,OAAO,CAAc,KAAmB;QAC5C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QAClE,OAAO,MAAM,CAAC,IAAW,CAAC;IAC5B,CAAC;CACF;AAED,MAAM,UAAU,eAAe,CAAC,MAAY;IAC1C,OAAO,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC;AAC/B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/pg/index.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,SAAS;IACZ,OAAO,CAAO;IAEtB,YAAY,MAAY;QACtB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;IACxB,CAAC;IAED,KAAK,CAAC,OAAO,CAAc,KAAmB;QAC5C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QAClE,OAAO,MAAM,CAAC,IAAW,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,gBAAgB;QACpB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QAC5C,MAAM,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC5B,OAAO,IAAI,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC1C,CAAC;CACF;AAED,MAAM,OAAO,oBAAoB;IACvB,OAAO,CAAa;IAE5B,YAAY,MAAkB;QAC5B,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;IACxB,CAAC;IAED,KAAK,CAAC,OAAO,CAAc,KAAmB;QAC5C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QAClE,OAAO,MAAM,CAAC,IAAW,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,MAAM;QACV,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACnC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACrC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;IACzB,CAAC;CACF;AAED,MAAM,UAAU,eAAe,CAAC,MAAY;IAC1C,OAAO,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC;AAC/B,CAAC"}
|
package/dist/pglite/index.d.ts
CHANGED
|
@@ -4,6 +4,11 @@ export declare class PgLiteSession implements Session {
|
|
|
4
4
|
private _client;
|
|
5
5
|
constructor(client: PGlite);
|
|
6
6
|
execute<T = unknown>(query: SQLStatement): Promise<T[]>;
|
|
7
|
+
beginTransaction(): Promise<{
|
|
8
|
+
execute: <T = unknown>(query: SQLStatement) => Promise<T[]>;
|
|
9
|
+
commit: () => Promise<void>;
|
|
10
|
+
rollback: () => Promise<void>;
|
|
11
|
+
}>;
|
|
7
12
|
}
|
|
8
13
|
export declare function createPgLiteSession(client: PGlite): PgLiteSession;
|
|
9
14
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/pglite/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAE9C,qBAAa,aAAc,YAAW,OAAO;IAC3C,OAAO,CAAC,OAAO,CAAS;gBAEZ,MAAM,EAAE,MAAM;IAIpB,OAAO,CAAC,CAAC,GAAG,OAAO,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/pglite/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAE9C,qBAAa,aAAc,YAAW,OAAO;IAC3C,OAAO,CAAC,OAAO,CAAS;gBAEZ,MAAM,EAAE,MAAM;IAIpB,OAAO,CAAC,CAAC,GAAG,OAAO,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAKvD,gBAAgB;kBAIF,CAAC,mBAAmB,YAAY,KAAG,OAAO,CAAC,CAAC,EAAE,CAAC;;;;CAYpE;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,CAEjE"}
|
package/dist/pglite/index.js
CHANGED
|
@@ -7,6 +7,21 @@ export class PgLiteSession {
|
|
|
7
7
|
const result = await this._client.query(query.text, query.params);
|
|
8
8
|
return result.rows;
|
|
9
9
|
}
|
|
10
|
+
async beginTransaction() {
|
|
11
|
+
this._client.exec("BEGIN");
|
|
12
|
+
return {
|
|
13
|
+
execute: async (query) => {
|
|
14
|
+
const result = await this._client.query(query.text, query.params);
|
|
15
|
+
return result.rows;
|
|
16
|
+
},
|
|
17
|
+
commit: async () => {
|
|
18
|
+
await this._client.exec("COMMIT");
|
|
19
|
+
},
|
|
20
|
+
rollback: async () => {
|
|
21
|
+
await this._client.exec("ROLLBACK");
|
|
22
|
+
},
|
|
23
|
+
};
|
|
24
|
+
}
|
|
10
25
|
}
|
|
11
26
|
export function createPgLiteSession(client) {
|
|
12
27
|
return new PgLiteSession(client);
|
package/dist/pglite/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/pglite/index.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,aAAa;IAChB,OAAO,CAAS;IAExB,YAAY,MAAc;QACxB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;IACxB,CAAC;IAED,KAAK,CAAC,OAAO,CAAc,KAAmB;QAC5C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QAClE,OAAO,MAAM,CAAC,IAAW,CAAC;IAC5B,CAAC;CACF;AAED,MAAM,UAAU,mBAAmB,CAAC,MAAc;IAChD,OAAO,IAAI,aAAa,CAAC,MAAM,CAAC,CAAC;AACnC,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/pglite/index.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,aAAa;IAChB,OAAO,CAAS;IAExB,YAAY,MAAc;QACxB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;IACxB,CAAC;IAED,KAAK,CAAC,OAAO,CAAc,KAAmB;QAC5C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QAClE,OAAO,MAAM,CAAC,IAAW,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,gBAAgB;QACpB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAE3B,OAAO;YACL,OAAO,EAAE,KAAK,EAAe,KAAmB,EAAgB,EAAE;gBAChE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;gBAClE,OAAO,MAAM,CAAC,IAAW,CAAC;YAC5B,CAAC;YACD,MAAM,EAAE,KAAK,IAAI,EAAE;gBACjB,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACpC,CAAC;YACD,QAAQ,EAAE,KAAK,IAAI,EAAE;gBACnB,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACtC,CAAC;SACF,CAAC;IACJ,CAAC;CACF;AAED,MAAM,UAAU,mBAAmB,CAAC,MAAc;IAChD,OAAO,IAAI,aAAa,CAAC,MAAM,CAAC,CAAC;AACnC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsqlbase",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.5",
|
|
4
4
|
"description": "Query client and schema definition for distributed SQL databases",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"type": "module",
|
|
@@ -59,10 +59,11 @@
|
|
|
59
59
|
},
|
|
60
60
|
"scripts": {
|
|
61
61
|
"build": "tsc -b",
|
|
62
|
+
"test": "vitest run",
|
|
62
63
|
"lint": "eslint src --ext .ts"
|
|
63
64
|
},
|
|
64
65
|
"dependencies": {
|
|
65
|
-
"@dsqlbase/core": "^0.1.
|
|
66
|
+
"@dsqlbase/core": "^0.1.5"
|
|
66
67
|
},
|
|
67
68
|
"peerDependencies": {
|
|
68
69
|
"@electric-sql/pglite": "^0.4.5",
|