@belopash/typeorm-store 1.6.0-rc.3 → 1.6.0-rc.4
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/database.d.ts +3 -2
- package/lib/database.d.ts.map +1 -1
- package/lib/database.js +50 -3
- package/lib/database.js.map +1 -1
- package/package.json +1 -1
- package/src/database.ts +65 -2
package/lib/database.d.ts
CHANGED
|
@@ -40,8 +40,9 @@ export declare class TypeormDatabase {
|
|
|
40
40
|
protected projectDir: string;
|
|
41
41
|
readonly supportsHotBlocks: boolean;
|
|
42
42
|
constructor(options?: TypeormDatabaseOptions);
|
|
43
|
-
connect
|
|
44
|
-
disconnect
|
|
43
|
+
connect(): Promise<DatabaseState>;
|
|
44
|
+
disconnect(): Promise<void>;
|
|
45
|
+
private initTransaction;
|
|
45
46
|
private getState;
|
|
46
47
|
transact(info: FinalTxInfo, cb: (store: Store) => Promise<void>): Promise<void>;
|
|
47
48
|
transactHot(info: HotTxInfo, cb: (store: Store, block: HashAndHeight) => Promise<void>): Promise<void>;
|
package/lib/database.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../src/database.ts"],"names":[],"mappings":"AACA,OAAO,EAEH,sBAAsB,IAAI,uBAAuB,EACjD,cAAc,EACjB,MAAM,yBAAyB,CAAA;AAEhC,OAAO,EAAC,aAAa,EAAE,WAAW,EAAE,aAAa,EAAE,SAAS,EAAC,MAAM,wCAAwC,CAAA;AAG3G,OAAO,EAAC,UAAU,EAAgB,MAAM,SAAS,CAAA;AACjD,OAAO,EAAC,KAAK,EAAC,MAAM,SAAS,CAAA;AAC7B,OAAO,EAAC,YAAY,EAAC,MAAM,sBAAsB,CAAA;
|
|
1
|
+
{"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../src/database.ts"],"names":[],"mappings":"AACA,OAAO,EAEH,sBAAsB,IAAI,uBAAuB,EACjD,cAAc,EACjB,MAAM,yBAAyB,CAAA;AAEhC,OAAO,EAAC,aAAa,EAAE,WAAW,EAAE,aAAa,EAAE,SAAS,EAAC,MAAM,wCAAwC,CAAA;AAG3G,OAAO,EAAC,UAAU,EAAgB,MAAM,SAAS,CAAA;AACjD,OAAO,EAAC,KAAK,EAAC,MAAM,SAAS,CAAA;AAC7B,OAAO,EAAC,YAAY,EAAC,MAAM,sBAAsB,CAAA;AAGjD,OAAO,EAAC,cAAc,EAAC,CAAA;AAEvB,MAAM,WAAW,sBAAuB,SAAQ,uBAAuB;IACnE;;;OAGG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAA;IAE9B;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAA;IAEvB;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAA;IAEtB;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAA;CAC1B;AAED,QAAA,MAAM,kBAAkB,eAAyB,CAAA;AAEjD,qBAAa,eAAe;IACxB,SAAS,CAAC,YAAY,EAAE,MAAM,CAAA;IAC9B,SAAS,CAAC,cAAc,EAAE,cAAc,CAAA;IACxC,SAAS,CAAC,oBAAoB,EAAE,OAAO,CAAA;IACvC,SAAS,CAAC,aAAa,EAAE,OAAO,CAAA;IAChC,SAAS,CAAC,YAAY,EAAE,OAAO,CAAA;IAC/B,SAAS,CAAC,aAAa,EAAE,OAAO,CAAA;IAChC,SAAS,CAAC,GAAG,CAAC,EAAE,UAAU,GAAG;QACzB,CAAC,kBAAkB,CAAC,CAAC,EAAE,YAAY,CAAA;KACtC,CAAA;IACD,SAAS,CAAC,UAAU,EAAE,MAAM,CAAA;IAE5B,SAAgB,iBAAiB,EAAE,OAAO,CAAA;gBAE9B,OAAO,CAAC,EAAE,sBAAsB;IAWtC,OAAO,IAAI,OAAO,CAAC,aAAa,CAAC;IAiBjC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;YAKnB,eAAe;YA2Cf,QAAQ;IActB,QAAQ,CAAC,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAqB/E,WAAW,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAQtG,YAAY,CACR,IAAI,EAAE,SAAS,EACf,EAAE,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GACxE,OAAO,CAAC,IAAI,CAAC;IAmDhB,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,cAAc;YAOR,YAAY;YAeZ,cAAc;YA4Bd,MAAM;IAiBpB,OAAO,CAAC,aAAa;IAMrB,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,eAAe;CAa1B"}
|
package/lib/database.js
CHANGED
|
@@ -14,17 +14,16 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
15
|
exports.TypeormDatabase = void 0;
|
|
16
16
|
const logger_1 = require("@subsquid/logger");
|
|
17
|
-
const typeorm_store_1 = require("@subsquid/typeorm-store");
|
|
18
17
|
const hot_1 = require("@subsquid/typeorm-store/lib/hot");
|
|
19
18
|
const util_internal_1 = require("@subsquid/util-internal");
|
|
20
19
|
const assert_1 = __importDefault(require("assert"));
|
|
20
|
+
const typeorm_1 = require("typeorm");
|
|
21
21
|
const store_1 = require("./store");
|
|
22
22
|
const stateManager_1 = require("./utils/stateManager");
|
|
23
|
+
const typeorm_config_1 = require("@subsquid/typeorm-config");
|
|
23
24
|
const StateManagerSymbol = Symbol('StateManager');
|
|
24
25
|
class TypeormDatabase {
|
|
25
26
|
constructor(options) {
|
|
26
|
-
this.connect = typeorm_store_1.TypeormDatabase.prototype.connect.bind(this);
|
|
27
|
-
this.disconnect = typeorm_store_1.TypeormDatabase.prototype.disconnect.bind(this);
|
|
28
27
|
this.statusSchema = options?.stateSchema || 'squid_processor';
|
|
29
28
|
this.isolationLevel = options?.isolationLevel || 'SERIALIZABLE';
|
|
30
29
|
this.batchWriteOperations = options?.batchWriteOperations ?? true;
|
|
@@ -34,6 +33,54 @@ class TypeormDatabase {
|
|
|
34
33
|
this.supportsHotBlocks = options?.supportHotBlocks ?? true;
|
|
35
34
|
this.projectDir = options?.projectDir || process.cwd();
|
|
36
35
|
}
|
|
36
|
+
async connect() {
|
|
37
|
+
(0, assert_1.default)(this.con == null, 'already connected');
|
|
38
|
+
let cfg = (0, typeorm_config_1.createOrmConfig)({ projectDir: this.projectDir });
|
|
39
|
+
this.con = new typeorm_1.DataSource(cfg);
|
|
40
|
+
await this.con.initialize();
|
|
41
|
+
try {
|
|
42
|
+
return await this.con.transaction('SERIALIZABLE', (em) => this.initTransaction(em));
|
|
43
|
+
}
|
|
44
|
+
catch (e) {
|
|
45
|
+
await this.con.destroy().catch(() => { }); // ignore error
|
|
46
|
+
this.con = undefined;
|
|
47
|
+
throw e;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
async disconnect() {
|
|
51
|
+
await this.con?.destroy().catch(() => { }); // ignore error
|
|
52
|
+
this.con = undefined;
|
|
53
|
+
}
|
|
54
|
+
async initTransaction(em) {
|
|
55
|
+
let schema = this.escapedSchema();
|
|
56
|
+
await em.query(`CREATE SCHEMA IF NOT EXISTS ${schema}`);
|
|
57
|
+
await em.query(`CREATE TABLE IF NOT EXISTS ${schema}.status (` +
|
|
58
|
+
`id int4 primary key, ` +
|
|
59
|
+
`height int4 not null, ` +
|
|
60
|
+
`hash text DEFAULT '0x', ` +
|
|
61
|
+
`nonce int4 DEFAULT 0` +
|
|
62
|
+
`)`);
|
|
63
|
+
await em.query(
|
|
64
|
+
// for databases created by prev version of typeorm store
|
|
65
|
+
`ALTER TABLE ${schema}.status ADD COLUMN IF NOT EXISTS hash text DEFAULT '0x'`);
|
|
66
|
+
await em.query(
|
|
67
|
+
// for databases created by prev version of typeorm store
|
|
68
|
+
`ALTER TABLE ${schema}.status ADD COLUMN IF NOT EXISTS nonce int DEFAULT 0`);
|
|
69
|
+
await em.query(`CREATE TABLE IF NOT EXISTS ${schema}.hot_block (height int4 primary key, hash text not null)`);
|
|
70
|
+
await em.query(`CREATE TABLE IF NOT EXISTS ${schema}.hot_change_log (` +
|
|
71
|
+
`block_height int4 not null references ${schema}.hot_block on delete cascade, ` +
|
|
72
|
+
`index int4 not null, ` +
|
|
73
|
+
`change jsonb not null, ` +
|
|
74
|
+
`PRIMARY KEY (block_height, index)` +
|
|
75
|
+
`)`);
|
|
76
|
+
let status = await em.query(`SELECT height, hash, nonce FROM ${schema}.status WHERE id = 0`);
|
|
77
|
+
if (status.length == 0) {
|
|
78
|
+
await em.query(`INSERT INTO ${schema}.status (id, height, hash) VALUES (0, -1, '0x')`);
|
|
79
|
+
status.push({ height: -1, hash: '0x', nonce: 0 });
|
|
80
|
+
}
|
|
81
|
+
let top = await em.query(`SELECT height, hash FROM ${schema}.hot_block ORDER BY height`);
|
|
82
|
+
return assertStateInvariants({ ...status[0], top });
|
|
83
|
+
}
|
|
37
84
|
async getState(em) {
|
|
38
85
|
let schema = this.escapedSchema();
|
|
39
86
|
let status = await em.query(`SELECT height, hash, nonce FROM ${schema}.status WHERE id = 0`);
|
package/lib/database.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"database.js","sourceRoot":"","sources":["../src/database.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,6CAA6C;
|
|
1
|
+
{"version":3,"file":"database.js","sourceRoot":"","sources":["../src/database.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/database.ts
CHANGED
|
@@ -11,6 +11,7 @@ import assert from 'assert'
|
|
|
11
11
|
import {DataSource, EntityManager} from 'typeorm'
|
|
12
12
|
import {Store} from './store'
|
|
13
13
|
import {StateManager} from './utils/stateManager'
|
|
14
|
+
import {createOrmConfig} from '@subsquid/typeorm-config'
|
|
14
15
|
|
|
15
16
|
export {IsolationLevel}
|
|
16
17
|
|
|
@@ -67,8 +68,70 @@ export class TypeormDatabase {
|
|
|
67
68
|
this.projectDir = options?.projectDir || process.cwd()
|
|
68
69
|
}
|
|
69
70
|
|
|
70
|
-
connect
|
|
71
|
-
|
|
71
|
+
async connect(): Promise<DatabaseState> {
|
|
72
|
+
assert(this.con == null, 'already connected')
|
|
73
|
+
|
|
74
|
+
let cfg = createOrmConfig({projectDir: this.projectDir})
|
|
75
|
+
this.con = new DataSource(cfg)
|
|
76
|
+
|
|
77
|
+
await this.con.initialize()
|
|
78
|
+
|
|
79
|
+
try {
|
|
80
|
+
return await this.con.transaction('SERIALIZABLE', (em) => this.initTransaction(em))
|
|
81
|
+
} catch (e: any) {
|
|
82
|
+
await this.con.destroy().catch(() => {}) // ignore error
|
|
83
|
+
this.con = undefined
|
|
84
|
+
throw e
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
async disconnect(): Promise<void> {
|
|
89
|
+
await this.con?.destroy().catch(() => {}) // ignore error
|
|
90
|
+
this.con = undefined
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
private async initTransaction(em: EntityManager): Promise<DatabaseState> {
|
|
94
|
+
let schema = this.escapedSchema()
|
|
95
|
+
|
|
96
|
+
await em.query(`CREATE SCHEMA IF NOT EXISTS ${schema}`)
|
|
97
|
+
await em.query(
|
|
98
|
+
`CREATE TABLE IF NOT EXISTS ${schema}.status (` +
|
|
99
|
+
`id int4 primary key, ` +
|
|
100
|
+
`height int4 not null, ` +
|
|
101
|
+
`hash text DEFAULT '0x', ` +
|
|
102
|
+
`nonce int4 DEFAULT 0` +
|
|
103
|
+
`)`
|
|
104
|
+
)
|
|
105
|
+
await em.query(
|
|
106
|
+
// for databases created by prev version of typeorm store
|
|
107
|
+
`ALTER TABLE ${schema}.status ADD COLUMN IF NOT EXISTS hash text DEFAULT '0x'`
|
|
108
|
+
)
|
|
109
|
+
await em.query(
|
|
110
|
+
// for databases created by prev version of typeorm store
|
|
111
|
+
`ALTER TABLE ${schema}.status ADD COLUMN IF NOT EXISTS nonce int DEFAULT 0`
|
|
112
|
+
)
|
|
113
|
+
await em.query(`CREATE TABLE IF NOT EXISTS ${schema}.hot_block (height int4 primary key, hash text not null)`)
|
|
114
|
+
await em.query(
|
|
115
|
+
`CREATE TABLE IF NOT EXISTS ${schema}.hot_change_log (` +
|
|
116
|
+
`block_height int4 not null references ${schema}.hot_block on delete cascade, ` +
|
|
117
|
+
`index int4 not null, ` +
|
|
118
|
+
`change jsonb not null, ` +
|
|
119
|
+
`PRIMARY KEY (block_height, index)` +
|
|
120
|
+
`)`
|
|
121
|
+
)
|
|
122
|
+
|
|
123
|
+
let status: (HashAndHeight & {nonce: number})[] = await em.query(
|
|
124
|
+
`SELECT height, hash, nonce FROM ${schema}.status WHERE id = 0`
|
|
125
|
+
)
|
|
126
|
+
if (status.length == 0) {
|
|
127
|
+
await em.query(`INSERT INTO ${schema}.status (id, height, hash) VALUES (0, -1, '0x')`)
|
|
128
|
+
status.push({height: -1, hash: '0x', nonce: 0})
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
let top: HashAndHeight[] = await em.query(`SELECT height, hash FROM ${schema}.hot_block ORDER BY height`)
|
|
132
|
+
|
|
133
|
+
return assertStateInvariants({...status[0], top})
|
|
134
|
+
}
|
|
72
135
|
|
|
73
136
|
private async getState(em: EntityManager): Promise<DatabaseState> {
|
|
74
137
|
let schema = this.escapedSchema()
|