@subsquid/openreader 5.4.0 → 5.5.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/lib/db.d.ts +3 -1
- package/lib/db.d.ts.map +1 -1
- package/lib/db.js +3 -2
- package/lib/db.js.map +1 -1
- package/lib/main.js +3 -1
- package/lib/main.js.map +1 -1
- package/lib/server.d.ts +2 -1
- package/lib/server.d.ts.map +1 -1
- package/lib/server.js +2 -1
- package/lib/server.js.map +1 -1
- package/package.json +2 -2
- package/src/db.ts +4 -1
- package/src/main.ts +4 -1
- package/src/server.ts +5 -1
package/lib/db.d.ts
CHANGED
|
@@ -3,15 +3,17 @@ import type { Pool } from 'pg';
|
|
|
3
3
|
import { OpenreaderContext } from './context';
|
|
4
4
|
import { Query } from './sql/query';
|
|
5
5
|
export type DbType = 'postgres' | 'cockroach';
|
|
6
|
+
export type TransactionIsolationLevel = 'SERIALIZABLE' | 'REPEATABLE READ' | 'READ COMMITTED';
|
|
6
7
|
export declare class PoolOpenreaderContext implements OpenreaderContext {
|
|
7
8
|
readonly dbType: DbType;
|
|
8
9
|
private subscriptionPollInterval;
|
|
10
|
+
private isolationLevel;
|
|
9
11
|
id: number;
|
|
10
12
|
log?: Logger;
|
|
11
13
|
private tx;
|
|
12
14
|
private subscriptionPool;
|
|
13
15
|
private queryCounter;
|
|
14
|
-
constructor(dbType: DbType, pool: Pool, subscriptionPool?: Pool, subscriptionPollInterval?: number, log?: Logger);
|
|
16
|
+
constructor(dbType: DbType, pool: Pool, subscriptionPool?: Pool, subscriptionPollInterval?: number, isolationLevel?: TransactionIsolationLevel, log?: Logger);
|
|
15
17
|
close(): Promise<void>;
|
|
16
18
|
executeQuery<T>(query: Query<T>): Promise<T>;
|
|
17
19
|
subscription<T>(query: Query<T>): AsyncIterable<T>;
|
package/lib/db.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,kBAAkB,CAAA;AAE5C,OAAO,KAAK,EAAa,IAAI,EAAC,MAAM,IAAI,CAAA;AAExC,OAAO,EAAC,iBAAiB,EAAC,MAAM,WAAW,CAAA;AAC3C,OAAO,EAAC,KAAK,EAAC,MAAM,aAAa,CAAA;AAQjC,MAAM,MAAM,MAAM,GAAG,UAAU,GAAG,WAAW,CAAA;AAG7C,qBAAa,qBAAsB,YAAW,iBAAiB;aAQvC,MAAM,EAAE,MAAM;IAG9B,OAAO,CAAC,wBAAwB;
|
|
1
|
+
{"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,kBAAkB,CAAA;AAE5C,OAAO,KAAK,EAAa,IAAI,EAAC,MAAM,IAAI,CAAA;AAExC,OAAO,EAAC,iBAAiB,EAAC,MAAM,WAAW,CAAA;AAC3C,OAAO,EAAC,KAAK,EAAC,MAAM,aAAa,CAAA;AAQjC,MAAM,MAAM,MAAM,GAAG,UAAU,GAAG,WAAW,CAAA;AAG7C,MAAM,MAAM,yBAAyB,GAAG,cAAc,GAAG,iBAAiB,GAAG,gBAAgB,CAAA;AAE7F,qBAAa,qBAAsB,YAAW,iBAAiB;aAQvC,MAAM,EAAE,MAAM;IAG9B,OAAO,CAAC,wBAAwB;IAChC,OAAO,CAAC,cAAc;IAXnB,EAAE,SAA8D;IAChE,GAAG,CAAC,EAAE,MAAM,CAAA;IACnB,OAAO,CAAC,EAAE,CAA2B;IACrC,OAAO,CAAC,gBAAgB,CAAM;IAC9B,OAAO,CAAC,YAAY,CAAI;gBAGJ,MAAM,EAAE,MAAM,EAC9B,IAAI,EAAE,IAAI,EACV,gBAAgB,CAAC,EAAE,IAAI,EACf,wBAAwB,GAAE,MAAa,EACvC,cAAc,GAAE,yBAA0C,EAClE,GAAG,CAAC,EAAE,MAAM;IAOhB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAIhB,YAAY,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAMlD,YAAY,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC;YAOpC,QAAQ;YAiBR,KAAK;CA8BtB"}
|
package/lib/db.js
CHANGED
|
@@ -6,9 +6,10 @@ const subscription_1 = require("./subscription");
|
|
|
6
6
|
const lazy_transaction_1 = require("./util/lazy-transaction");
|
|
7
7
|
let CTX_COUNTER = 0;
|
|
8
8
|
class PoolOpenreaderContext {
|
|
9
|
-
constructor(dbType, pool, subscriptionPool, subscriptionPollInterval = 1000, log) {
|
|
9
|
+
constructor(dbType, pool, subscriptionPool, subscriptionPollInterval = 1000, isolationLevel = 'SERIALIZABLE', log) {
|
|
10
10
|
this.dbType = dbType;
|
|
11
11
|
this.subscriptionPollInterval = subscriptionPollInterval;
|
|
12
|
+
this.isolationLevel = isolationLevel;
|
|
12
13
|
this.id = (CTX_COUNTER = (CTX_COUNTER + 1) % Number.MAX_SAFE_INTEGER);
|
|
13
14
|
this.queryCounter = 0;
|
|
14
15
|
this.log = log?.child({ graphqlCtx: this.id });
|
|
@@ -32,7 +33,7 @@ class PoolOpenreaderContext {
|
|
|
32
33
|
async transact(pool, cb) {
|
|
33
34
|
let client = await pool.connect();
|
|
34
35
|
try {
|
|
35
|
-
await this.query(client,
|
|
36
|
+
await this.query(client, `START TRANSACTION ISOLATION LEVEL ${this.isolationLevel} READ ONLY`);
|
|
36
37
|
try {
|
|
37
38
|
return await cb(async (sql, parameters) => {
|
|
38
39
|
let result = await this.query(client, sql, parameters);
|
package/lib/db.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"db.js","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":";;;AACA,2DAAuD;AAKvD,iDAA2C;AAC3C,8DAAuD;AAGvD,IAAI,WAAW,GAAG,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"db.js","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"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"}
|
package/lib/main.js
CHANGED
|
@@ -26,6 +26,7 @@ GraphQL server for postgres-compatible databases
|
|
|
26
26
|
program.option('--subscriptions', 'enable gql subscriptions');
|
|
27
27
|
program.option('--subscription-poll-interval <ms>', 'subscription poll interval in ms', util_internal_commander_1.nat, 1000);
|
|
28
28
|
program.option('--subscription-max-response-size <nodes>', 'max response size measured in nodes', util_internal_commander_1.nat);
|
|
29
|
+
program.addOption(new commander_1.Option('--isolation-level <level>', 'transaction isolation level').choices(['SERIALIZABLE', 'REPEATABLE READ', 'READ COMMITTED']));
|
|
29
30
|
let opts = program.parse().opts();
|
|
30
31
|
let model = (0, tools_1.loadModel)(opts.schema);
|
|
31
32
|
let connection = new pg_1.Pool({
|
|
@@ -44,7 +45,8 @@ GraphQL server for postgres-compatible databases
|
|
|
44
45
|
subscriptions: opts.subscriptions,
|
|
45
46
|
subscriptionPollInterval: opts.subscriptionPollInterval,
|
|
46
47
|
subscriptionMaxResponseNodes: opts.subscriptionMaxResponseSize,
|
|
47
|
-
validationMaxErrors: opts.validationMaxErrors
|
|
48
|
+
validationMaxErrors: opts.validationMaxErrors,
|
|
49
|
+
isolationLevel: opts.isolationLevel
|
|
48
50
|
});
|
|
49
51
|
LOG.info(`listening on port ${server.port}`);
|
|
50
52
|
return (0, util_internal_http_server_1.waitForInterruption)(server);
|
package/lib/main.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":";;AAAA,6CAA6C;AAC7C,2DAAkD;AAClD,+EAA0D;AAC1D,mFAAuE;AACvE,yCAAyC;AACzC,2BAAuB;AAEvB,qCAA8B;AAC9B,mCAAiC;AAGjC,MAAM,GAAG,GAAG,IAAA,qBAAY,EAAC,gBAAgB,CAAC,CAAA;AAG1C,IAAA,0BAAU,EAAC,KAAK,IAAI,EAAE;IAClB,IAAI,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAA;IAE3B,OAAO,CAAC,WAAW,CAAC;;KAEnB,CAAC,IAAI,EAAE,CAAC,CAAA;IAET,OAAO,CAAC,cAAc,CAAC,qBAAqB,EAAE,sDAAsD,CAAC,CAAA;IACrG,OAAO,CAAC,cAAc,CAAC,oBAAoB,EAAE,4BAA4B,EAAE,IAAA,6BAAG,EAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAA;IAC9F,OAAO,CAAC,SAAS,CACb,IAAI,kBAAM,CAAC,sBAAsB,EAAE,eAAe,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAC7G,CAAA;IACD,OAAO,CAAC,MAAM,CAAC,qBAAqB,EAAE,mBAAmB,EAAE,6BAAG,EAAE,IAAI,CAAC,CAAA;IACrE,OAAO,CAAC,MAAM,CAAC,yBAAyB,EAAE,+BAA+B,EAAE,6BAAG,EAAE,GAAG,CAAC,CAAA;IACpF,OAAO,CAAC,MAAM,CAAC,2BAA2B,EAAE,sCAAsC,EAAE,6BAAG,CAAC,CAAA;IACxF,OAAO,CAAC,MAAM,CAAC,6BAA6B,EAAE,qCAAqC,EAAE,6BAAG,CAAC,CAAA;IACzF,OAAO,CAAC,MAAM,CAAC,8BAA8B,EAAE,6BAA6B,EAAE,6BAAG,CAAC,CAAA;IAClF,OAAO,CAAC,MAAM,CAAC,iCAAiC,EAAE,uBAAuB,EAAE,6BAAG,CAAC,CAAA;IAC/E,OAAO,CAAC,MAAM,CAAC,iBAAiB,EAAE,0BAA0B,CAAC,CAAA;IAC7D,OAAO,CAAC,MAAM,CAAC,mCAAmC,EAAE,kCAAkC,EAAE,6BAAG,EAAE,IAAI,CAAC,CAAA;IAClG,OAAO,CAAC,MAAM,CAAC,0CAA0C,EAAE,qCAAqC,EAAE,6BAAG,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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"}
|
package/lib/server.d.ts
CHANGED
|
@@ -5,7 +5,7 @@ import express from 'express';
|
|
|
5
5
|
import { GraphQLSchema } from 'graphql';
|
|
6
6
|
import type { Pool } from 'pg';
|
|
7
7
|
import { Context } from './context';
|
|
8
|
-
import type { DbType } from './db';
|
|
8
|
+
import type { DbType, TransactionIsolationLevel } from './db';
|
|
9
9
|
import type { Model } from './model';
|
|
10
10
|
import { Dialect } from './dialect';
|
|
11
11
|
export interface ServerOptions {
|
|
@@ -25,6 +25,7 @@ export interface ServerOptions {
|
|
|
25
25
|
subscriptionMaxResponseNodes?: number;
|
|
26
26
|
validationMaxErrors?: number;
|
|
27
27
|
cache?: KeyValueCache;
|
|
28
|
+
isolationLevel?: TransactionIsolationLevel;
|
|
28
29
|
}
|
|
29
30
|
export declare function serve(options: ServerOptions): Promise<ListeningServer>;
|
|
30
31
|
export type Dispose = () => Promise<void>;
|
package/lib/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAC,MAAM,kBAAkB,CAAA;AACvC,OAAO,EAAS,eAAe,EAAC,MAAM,qCAAqC,CAAA;AAC3E,OAAO,EAAC,aAAa,EAAE,gBAAgB,EAAC,MAAM,8BAA8B,CAAA;AAE5E,OAAO,OAAO,MAAM,SAAS,CAAA;AAE7B,OAAO,EAAgB,aAAa,EAAC,MAAM,SAAS,CAAA;AAIpD,OAAO,KAAK,EAAC,IAAI,EAAC,MAAM,IAAI,CAAA;AAE5B,OAAO,EAAC,OAAO,EAAoB,MAAM,WAAW,CAAA;AAEpD,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAC,MAAM,kBAAkB,CAAA;AACvC,OAAO,EAAS,eAAe,EAAC,MAAM,qCAAqC,CAAA;AAC3E,OAAO,EAAC,aAAa,EAAE,gBAAgB,EAAC,MAAM,8BAA8B,CAAA;AAE5E,OAAO,OAAO,MAAM,SAAS,CAAA;AAE7B,OAAO,EAAgB,aAAa,EAAC,MAAM,SAAS,CAAA;AAIpD,OAAO,KAAK,EAAC,IAAI,EAAC,MAAM,IAAI,CAAA;AAE5B,OAAO,EAAC,OAAO,EAAoB,MAAM,WAAW,CAAA;AAEpD,OAAO,KAAK,EAAC,MAAM,EAAE,yBAAyB,EAAC,MAAM,MAAM,CAAA;AAC3D,OAAO,KAAK,EAAC,KAAK,EAAC,MAAM,SAAS,CAAA;AAGlC,OAAO,EAAC,OAAO,EAAmB,MAAM,WAAW,CAAA;AAGnD,MAAM,WAAW,aAAa;IAC1B,IAAI,EAAE,MAAM,GAAG,MAAM,CAAA;IACrB,KAAK,EAAE,KAAK,CAAA;IACZ,UAAU,EAAE,IAAI,CAAA;IAChB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,wBAAwB,CAAC,EAAE,MAAM,CAAA;IACjC,sBAAsB,CAAC,EAAE,IAAI,CAAA;IAC7B,4BAA4B,CAAC,EAAE,MAAM,CAAA;IACrC,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,KAAK,CAAC,EAAE,aAAa,CAAA;IACrB,cAAc,CAAC,EAAE,yBAAyB,CAAA;CAC7C;AAED,wBAAsB,KAAK,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,eAAe,CAAC,CAyD5E;AAGD,MAAM,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;AAGzC,MAAM,WAAW,aAAa;IAC1B,IAAI,EAAE,MAAM,GAAG,MAAM,CAAA;IACrB,SAAS,EAAE,OAAO,EAAE,CAAA;IACpB,OAAO,EAAE,MAAM,OAAO,CAAA;IACtB,MAAM,EAAE,aAAa,CAAA;IACrB,OAAO,CAAC,EAAE,gBAAgB,EAAE,CAAA;IAC5B,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,KAAK,CAAC,EAAE,aAAa,CAAA;CACxB;AAGD,wBAAsB,SAAS,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,eAAe,CAAC,CAmFhF;AAED,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,eAAe,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAmB/H;AAGD,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,OAAO,CAAC,WAAW,GAAG,IAAI,CAsBnE"}
|
package/lib/server.js
CHANGED
|
@@ -24,8 +24,9 @@ async function serve(options) {
|
|
|
24
24
|
let dbType = options.dbType ?? 'postgres';
|
|
25
25
|
let schemaBuilder = await (0, dialect_1.getSchemaBuilder)(options);
|
|
26
26
|
let schema = schemaBuilder.build();
|
|
27
|
+
let isolationLevel = options.isolationLevel ?? 'SERIALIZABLE';
|
|
27
28
|
let context = () => {
|
|
28
|
-
let openreader = new db_1.PoolOpenreaderContext(dbType, connection, subscriptionConnection, subscriptionPollInterval, log);
|
|
29
|
+
let openreader = new db_1.PoolOpenreaderContext(dbType, connection, subscriptionConnection, subscriptionPollInterval, isolationLevel, log);
|
|
29
30
|
if (maxResponseNodes) {
|
|
30
31
|
openreader.responseSizeLimit = new limit_1.ResponseSizeLimit(maxResponseNodes);
|
|
31
32
|
openreader.subscriptionResponseSizeLimit = new limit_1.ResponseSizeLimit(maxResponseNodes);
|
package/lib/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@subsquid/openreader",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.5.0",
|
|
4
4
|
"description": "GraphQL server for postgres-compatible databases",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"graphql",
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
"dependencies": {
|
|
24
24
|
"@graphql-tools/merge": "^9.0.1",
|
|
25
25
|
"@subsquid/graphiql-console": "^0.3.0",
|
|
26
|
-
"@subsquid/logger": "^1.
|
|
26
|
+
"@subsquid/logger": "^1.5.0",
|
|
27
27
|
"@subsquid/util-internal": "^3.2.0",
|
|
28
28
|
"@subsquid/util-internal-commander": "^1.4.0",
|
|
29
29
|
"@subsquid/util-internal-hex": "^1.2.2",
|
package/src/db.ts
CHANGED
|
@@ -14,6 +14,8 @@ let CTX_COUNTER = 0
|
|
|
14
14
|
export type DbType = 'postgres' | 'cockroach'
|
|
15
15
|
|
|
16
16
|
|
|
17
|
+
export type TransactionIsolationLevel = 'SERIALIZABLE' | 'REPEATABLE READ' | 'READ COMMITTED'
|
|
18
|
+
|
|
17
19
|
export class PoolOpenreaderContext implements OpenreaderContext {
|
|
18
20
|
public id = (CTX_COUNTER = (CTX_COUNTER + 1) % Number.MAX_SAFE_INTEGER)
|
|
19
21
|
public log?: Logger
|
|
@@ -26,6 +28,7 @@ export class PoolOpenreaderContext implements OpenreaderContext {
|
|
|
26
28
|
pool: Pool,
|
|
27
29
|
subscriptionPool?: Pool,
|
|
28
30
|
private subscriptionPollInterval: number = 1000,
|
|
31
|
+
private isolationLevel: TransactionIsolationLevel = 'SERIALIZABLE',
|
|
29
32
|
log?: Logger
|
|
30
33
|
) {
|
|
31
34
|
this.log = log?.child({graphqlCtx: this.id})
|
|
@@ -53,7 +56,7 @@ export class PoolOpenreaderContext implements OpenreaderContext {
|
|
|
53
56
|
private async transact<T>(pool: Pool, cb: (db: Database) => Promise<T>): Promise<T> {
|
|
54
57
|
let client = await pool.connect()
|
|
55
58
|
try {
|
|
56
|
-
await this.query(client,
|
|
59
|
+
await this.query(client, `START TRANSACTION ISOLATION LEVEL ${this.isolationLevel} READ ONLY`)
|
|
57
60
|
try {
|
|
58
61
|
return await cb(async (sql, parameters) => {
|
|
59
62
|
let result = await this.query(client, sql, parameters)
|
package/src/main.ts
CHANGED
|
@@ -33,6 +33,7 @@ GraphQL server for postgres-compatible databases
|
|
|
33
33
|
program.option('--subscriptions', 'enable gql subscriptions')
|
|
34
34
|
program.option('--subscription-poll-interval <ms>', 'subscription poll interval in ms', nat, 1000)
|
|
35
35
|
program.option('--subscription-max-response-size <nodes>', 'max response size measured in nodes', nat)
|
|
36
|
+
program.addOption(new Option('--isolation-level <level>', 'transaction isolation level').choices(['SERIALIZABLE', 'REPEATABLE READ', 'READ COMMITTED']))
|
|
36
37
|
|
|
37
38
|
let opts = program.parse().opts() as {
|
|
38
39
|
schema: string
|
|
@@ -47,6 +48,7 @@ GraphQL server for postgres-compatible databases
|
|
|
47
48
|
subscriptions?: boolean
|
|
48
49
|
subscriptionPollInterval: number
|
|
49
50
|
subscriptionMaxResponseSize?: number
|
|
51
|
+
isolationLevel?: 'SERIALIZABLE' | 'REPEATABLE READ' | 'READ COMMITTED'
|
|
50
52
|
}
|
|
51
53
|
|
|
52
54
|
let model = loadModel(opts.schema)
|
|
@@ -68,7 +70,8 @@ GraphQL server for postgres-compatible databases
|
|
|
68
70
|
subscriptions: opts.subscriptions,
|
|
69
71
|
subscriptionPollInterval: opts.subscriptionPollInterval,
|
|
70
72
|
subscriptionMaxResponseNodes: opts.subscriptionMaxResponseSize,
|
|
71
|
-
validationMaxErrors: opts.validationMaxErrors
|
|
73
|
+
validationMaxErrors: opts.validationMaxErrors,
|
|
74
|
+
isolationLevel: opts.isolationLevel
|
|
72
75
|
})
|
|
73
76
|
|
|
74
77
|
LOG.info(`listening on port ${server.port}`)
|
package/src/server.ts
CHANGED
|
@@ -12,7 +12,7 @@ import type {Pool} from 'pg'
|
|
|
12
12
|
import {WebSocketServer} from 'ws'
|
|
13
13
|
import {Context, OpenreaderContext} from './context'
|
|
14
14
|
import {PoolOpenreaderContext} from './db'
|
|
15
|
-
import type {DbType} from './db'
|
|
15
|
+
import type {DbType, TransactionIsolationLevel} from './db'
|
|
16
16
|
import type {Model} from './model'
|
|
17
17
|
import {openreaderExecute, openreaderSubscribe} from './util/execute'
|
|
18
18
|
import {ResponseSizeLimit} from './util/limit'
|
|
@@ -36,6 +36,7 @@ export interface ServerOptions {
|
|
|
36
36
|
subscriptionMaxResponseNodes?: number
|
|
37
37
|
validationMaxErrors?: number
|
|
38
38
|
cache?: KeyValueCache
|
|
39
|
+
isolationLevel?: TransactionIsolationLevel
|
|
39
40
|
}
|
|
40
41
|
|
|
41
42
|
export async function serve(options: ServerOptions): Promise<ListeningServer> {
|
|
@@ -54,12 +55,15 @@ export async function serve(options: ServerOptions): Promise<ListeningServer> {
|
|
|
54
55
|
let schemaBuilder = await getSchemaBuilder(options)
|
|
55
56
|
let schema = schemaBuilder.build()
|
|
56
57
|
|
|
58
|
+
let isolationLevel = options.isolationLevel ?? 'SERIALIZABLE'
|
|
59
|
+
|
|
57
60
|
let context = () => {
|
|
58
61
|
let openreader: OpenreaderContext = new PoolOpenreaderContext(
|
|
59
62
|
dbType,
|
|
60
63
|
connection,
|
|
61
64
|
subscriptionConnection,
|
|
62
65
|
subscriptionPollInterval,
|
|
66
|
+
isolationLevel,
|
|
63
67
|
log
|
|
64
68
|
)
|
|
65
69
|
|