@belopash/typeorm-store 1.2.2 → 1.4.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/cacheMap.d.ts CHANGED
@@ -1,26 +1,24 @@
1
1
  import { Entity } from '@subsquid/typeorm-store';
2
- import { EntityManager, EntityTarget } from 'typeorm';
2
+ import { EntityMetadata } from 'typeorm';
3
3
  import { Logger } from '@subsquid/logger';
4
4
  export declare class CachedEntity<E extends Entity> {
5
5
  value: E | null;
6
6
  constructor();
7
7
  }
8
8
  export declare class CacheMap {
9
- private em;
10
9
  private opts;
11
10
  private map;
12
11
  private logger;
13
- constructor(em: () => EntityManager, opts: {
12
+ constructor(opts: {
14
13
  logger: Logger;
15
14
  });
16
- exist<E extends Entity>(entityClass: EntityTarget<E>, id: string): boolean;
17
- get<E extends Entity>(entityClass: EntityTarget<E>, id: string): CachedEntity<E> | undefined;
18
- ensure<E extends Entity>(entityClass: EntityTarget<E>, id: string): void;
19
- delete<E extends Entity>(entityClass: EntityTarget<E>, id: string): void;
15
+ exist(metadata: EntityMetadata, id: string): boolean;
16
+ get<E extends Entity>(metadata: EntityMetadata, id: string): CachedEntity<E> | undefined;
17
+ ensure(metadata: EntityMetadata, id: string): void;
18
+ delete(metadata: EntityMetadata, id: string): void;
20
19
  clear(): void;
21
- add<E extends Entity>(e: E | E[], isNew?: boolean): void;
20
+ add<E extends Entity>(metadata: EntityMetadata, entity: E, isNew?: boolean): void;
22
21
  private cacheEntity;
23
22
  private getEntityCache;
24
- private getEntityMetadata;
25
23
  }
26
24
  //# sourceMappingURL=cacheMap.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cacheMap.d.ts","sourceRoot":"","sources":["../src/cacheMap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAC,MAAM,yBAAyB,CAAA;AAC9C,OAAO,EAAC,aAAa,EAAkB,YAAY,EAAC,MAAM,SAAS,CAAA;AAEnE,OAAO,EAAC,MAAM,EAAC,MAAM,kBAAkB,CAAA;AAEvC,qBAAa,YAAY,CAAC,CAAC,SAAS,MAAM;IACtC,KAAK,EAAE,CAAC,GAAG,IAAI,CAAA;;CAKlB;AAED,qBAAa,QAAQ;IAIL,OAAO,CAAC,EAAE;IAAuB,OAAO,CAAC,IAAI;IAHzD,OAAO,CAAC,GAAG,CAAiE;IAC5E,OAAO,CAAC,MAAM,CAAQ;gBAEF,EAAE,EAAE,MAAM,aAAa,EAAU,IAAI,EAAE;QAAC,MAAM,EAAE,MAAM,CAAA;KAAC;IAI3E,KAAK,CAAC,CAAC,SAAS,MAAM,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM;IAOhE,GAAG,CAAC,CAAC,SAAS,MAAM,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM;IAM9D,MAAM,CAAC,CAAC,SAAS,MAAM,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM;IAUjE,MAAM,CAAC,CAAC,SAAS,MAAM,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM;IAOjE,KAAK;IAUL,GAAG,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,OAAO;IASjD,OAAO,CAAC,WAAW;IA+CnB,OAAO,CAAC,cAAc;IAUtB,OAAO,CAAC,iBAAiB;CAI5B"}
1
+ {"version":3,"file":"cacheMap.d.ts","sourceRoot":"","sources":["../src/cacheMap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAC,MAAM,yBAAyB,CAAA;AAC9C,OAAO,EAAC,cAAc,EAAC,MAAM,SAAS,CAAA;AAEtC,OAAO,EAAC,MAAM,EAAC,MAAM,kBAAkB,CAAA;AAEvC,qBAAa,YAAY,CAAC,CAAC,SAAS,MAAM;IACtC,KAAK,EAAE,CAAC,GAAG,IAAI,CAAA;;CAKlB;AAED,qBAAa,QAAQ;IAIL,OAAO,CAAC,IAAI;IAHxB,OAAO,CAAC,GAAG,CAAiE;IAC5E,OAAO,CAAC,MAAM,CAAQ;gBAEF,IAAI,EAAE;QAAC,MAAM,EAAE,MAAM,CAAA;KAAC;IAI1C,KAAK,CAAC,QAAQ,EAAE,cAAc,EAAE,EAAE,EAAE,MAAM;IAM1C,GAAG,CAAC,CAAC,SAAS,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,EAAE,EAAE,MAAM;IAK1D,MAAM,CAAC,QAAQ,EAAE,cAAc,EAAE,EAAE,EAAE,MAAM;IAS3C,MAAM,CAAC,QAAQ,EAAE,cAAc,EAAE,EAAE,EAAE,MAAM;IAM3C,KAAK;IAUL,GAAG,CAAC,CAAC,SAAS,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,OAAO;IAI1E,OAAO,CAAC,WAAW;IA8CnB,OAAO,CAAC,cAAc;CASzB"}
package/lib/cacheMap.js CHANGED
@@ -9,33 +9,28 @@ class CachedEntity {
9
9
  }
10
10
  exports.CachedEntity = CachedEntity;
11
11
  class CacheMap {
12
- constructor(em, opts) {
13
- this.em = em;
12
+ constructor(opts) {
14
13
  this.opts = opts;
15
14
  this.map = new Map();
16
15
  this.logger = this.opts.logger.child('cache');
17
16
  }
18
- exist(entityClass, id) {
19
- const metadata = this.getEntityMetadata(entityClass);
17
+ exist(metadata, id) {
20
18
  const cacheMap = this.getEntityCache(metadata);
21
19
  const cachedEntity = cacheMap.get(id);
22
20
  return !!cachedEntity?.value;
23
21
  }
24
- get(entityClass, id) {
25
- const metadata = this.getEntityMetadata(entityClass);
22
+ get(metadata, id) {
26
23
  const cacheMap = this.getEntityCache(metadata);
27
24
  return cacheMap.get(id);
28
25
  }
29
- ensure(entityClass, id) {
30
- const metadata = this.getEntityMetadata(entityClass);
26
+ ensure(metadata, id) {
31
27
  const cacheMap = this.getEntityCache(metadata);
32
28
  if (cacheMap.has(id))
33
29
  return;
34
30
  cacheMap.set(id, new CachedEntity());
35
31
  this.logger.debug(`added empty entity ${metadata.name} ${id}`);
36
32
  }
37
- delete(entityClass, id) {
38
- const metadata = this.getEntityMetadata(entityClass);
33
+ delete(metadata, id) {
39
34
  const cacheMap = this.getEntityCache(metadata);
40
35
  cacheMap.set(id, new CachedEntity());
41
36
  this.logger.debug(`deleted entity ${metadata.name} ${id}`);
@@ -49,16 +44,10 @@ class CacheMap {
49
44
  }
50
45
  this.map.clear();
51
46
  }
52
- add(e, isNew) {
53
- const entities = Array.isArray(e) ? e : [e];
54
- if (entities.length === 0)
55
- return;
56
- for (const entity of entities) {
57
- this.cacheEntity(entity, isNew);
58
- }
47
+ add(metadata, entity, isNew) {
48
+ this.cacheEntity(metadata, entity, isNew);
59
49
  }
60
- cacheEntity(entity, isNew = false) {
61
- const metadata = this.getEntityMetadata(entity.constructor);
50
+ cacheEntity(metadata, entity, isNew = false) {
62
51
  const cacheMap = this.getEntityCache(metadata);
63
52
  let cached = cacheMap.get(entity.id);
64
53
  if (cached == null) {
@@ -105,10 +94,6 @@ class CacheMap {
105
94
  }
106
95
  return map;
107
96
  }
108
- getEntityMetadata(entityClass) {
109
- const em = this.em();
110
- return em.connection.getMetadata(entityClass);
111
- }
112
97
  }
113
98
  exports.CacheMap = CacheMap;
114
99
  //# sourceMappingURL=cacheMap.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cacheMap.js","sourceRoot":"","sources":["../src/cacheMap.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cacheMap.js","sourceRoot":"","sources":["../src/cacheMap.ts"],"names":[],"mappings":"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"}
package/lib/database.d.ts CHANGED
@@ -5,6 +5,7 @@ export { IsolationLevel, TypeormDatabaseOptions };
5
5
  export declare class TypeormDatabaseWithCache extends TypeormDatabase {
6
6
  transact(info: FinalTxInfo, cb: (store: StoreWithCache) => Promise<void>): Promise<void>;
7
7
  transactHot(info: HotTxInfo, cb: (store: StoreWithCache, block: HashAndHeight) => Promise<void>): Promise<void>;
8
+ transactHot2(info: HotTxInfo, cb: (store: StoreWithCache, sliceBeg: number, sliceEnd: number) => Promise<void>): Promise<void>;
8
9
  private performUpdates;
9
10
  }
10
11
  //# sourceMappingURL=database.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../src/database.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,cAAc,EAAE,eAAe,EAAE,sBAAsB,EAAC,MAAM,yBAAyB,CAAA;AAE/F,OAAO,EAAC,WAAW,EAAE,SAAS,EAAE,aAAa,EAAC,MAAM,wCAAwC,CAAA;AAG5F,OAAO,EAAC,cAAc,EAAC,MAAM,SAAS,CAAA;AAEtC,OAAO,EAAC,cAAc,EAAE,sBAAsB,EAAC,CAAA;AAG/C,qBAAa,wBAAyB,SAAQ,eAAe;IAEzD,QAAQ,CAAC,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAKxF,WAAW,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,aAAa,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;YAIjG,cAAc;CAmB/B"}
1
+ {"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../src/database.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,cAAc,EAAE,eAAe,EAAE,sBAAsB,EAAC,MAAM,yBAAyB,CAAA;AAE/F,OAAO,EAAC,WAAW,EAAE,SAAS,EAAE,aAAa,EAAC,MAAM,wCAAwC,CAAA;AAG5F,OAAO,EAAC,cAAc,EAAC,MAAM,SAAS,CAAA;AAEtC,OAAO,EAAC,cAAc,EAAE,sBAAsB,EAAC,CAAA;AAG/C,qBAAa,wBAAyB,SAAQ,eAAe;IAEzD,QAAQ,CAAC,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAKxF,WAAW,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,aAAa,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAK/G,YAAY,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;YAIhH,cAAc;CAmB/B"}
package/lib/database.js CHANGED
@@ -17,6 +17,10 @@ class TypeormDatabaseWithCache extends typeorm_store_1.TypeormDatabase {
17
17
  transactHot(info, cb) {
18
18
  return super.transactHot(info, cb);
19
19
  }
20
+ // @ts-ignore
21
+ transactHot2(info, cb) {
22
+ return super.transactHot2(info, cb);
23
+ }
20
24
  async performUpdates(cb, em, changeTracker) {
21
25
  let running = true;
22
26
  let store = new store_1.StoreWithCache(() => {
@@ -1 +1 @@
1
- {"version":3,"file":"database.js","sourceRoot":"","sources":["../src/database.ts"],"names":[],"mappings":";;;;;;AAAA,2DAA+F;AAG/F,oDAA2B;AAE3B,mCAAsC;AAItC,aAAa;AACb,MAAa,wBAAyB,SAAQ,+BAAe;IACzD,aAAa;IACb,QAAQ,CAAC,IAAiB,EAAE,EAA4C;QACpE,OAAO,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAS,CAAC,CAAA;IAC1C,CAAC;IAED,aAAa;IACb,WAAW,CAAC,IAAe,EAAE,EAAkE;QAC3F,OAAO,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,EAAS,CAAC,CAAA;IAC7C,CAAC;IAEO,KAAK,CAAC,cAAc,CACxB,EAA4C,EAC5C,EAAiB,EACjB,aAA6B;QAE7B,IAAI,OAAO,GAAG,IAAI,CAAA;QAElB,IAAI,KAAK,GAAG,IAAI,sBAAc,CAAC,GAAG,EAAE;YAChC,IAAA,gBAAM,EAAC,OAAO,EAAE,mFAAmF,CAAC,CAAA;YACpG,OAAO,EAAE,CAAA;QACb,CAAC,EAAE,aAAa,CAAC,CAAA;QAEjB,IAAI,CAAC;YACD,MAAM,EAAE,CAAC,KAAK,CAAC,CAAA;YACf,MAAM,KAAK,CAAC,KAAK,EAAE,CAAA;QACvB,CAAC;gBAAS,CAAC;YACP,OAAO,GAAG,KAAK,CAAA;QACnB,CAAC;IACL,CAAC;CACJ;AA9BD,4DA8BC"}
1
+ {"version":3,"file":"database.js","sourceRoot":"","sources":["../src/database.ts"],"names":[],"mappings":";;;;;;AAAA,2DAA+F;AAG/F,oDAA2B;AAE3B,mCAAsC;AAItC,aAAa;AACb,MAAa,wBAAyB,SAAQ,+BAAe;IACzD,aAAa;IACb,QAAQ,CAAC,IAAiB,EAAE,EAA4C;QACpE,OAAO,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAS,CAAC,CAAA;IAC1C,CAAC;IAED,aAAa;IACb,WAAW,CAAC,IAAe,EAAE,EAAkE;QAC3F,OAAO,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,EAAS,CAAC,CAAA;IAC7C,CAAC;IAED,aAAa;IACb,YAAY,CAAC,IAAe,EAAE,EAAgF;QAC1G,OAAO,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,EAAS,CAAC,CAAA;IAC9C,CAAC;IAEO,KAAK,CAAC,cAAc,CACxB,EAA4C,EAC5C,EAAiB,EACjB,aAA6B;QAE7B,IAAI,OAAO,GAAG,IAAI,CAAA;QAElB,IAAI,KAAK,GAAG,IAAI,sBAAc,CAAC,GAAG,EAAE;YAChC,IAAA,gBAAM,EAAC,OAAO,EAAE,mFAAmF,CAAC,CAAA;YACpG,OAAO,EAAE,CAAA;QACb,CAAC,EAAE,aAAa,CAAC,CAAA;QAEjB,IAAI,CAAC;YACD,MAAM,EAAE,CAAC,KAAK,CAAC,CAAA;YACf,MAAM,KAAK,CAAC,KAAK,EAAE,CAAA;QACvB,CAAC;gBAAS,CAAC;YACP,OAAO,GAAG,KAAK,CAAA;QACnB,CAAC;IACL,CAAC;CACJ;AAnCD,4DAmCC"}
@@ -0,0 +1,18 @@
1
+ import { Entity } from '@subsquid/typeorm-store';
2
+ import { EntityMetadata, EntityTarget, FindOptionsRelations } from 'typeorm';
3
+ export type DeferData = {
4
+ ids: Set<string>;
5
+ relations: FindOptionsRelations<any>;
6
+ };
7
+ export declare class DeferList {
8
+ private deferMap;
9
+ constructor();
10
+ add<E extends Entity>(metadata: EntityMetadata, id: string, relations?: FindOptionsRelations<E>): void;
11
+ getData(metadata: EntityMetadata): DeferData;
12
+ values(): {
13
+ target: EntityTarget<any>;
14
+ data: DeferData;
15
+ }[];
16
+ clear(): void;
17
+ }
18
+ //# sourceMappingURL=deferList.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deferList.d.ts","sourceRoot":"","sources":["../src/deferList.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAC,MAAM,yBAAyB,CAAA;AAC9C,OAAO,EAAC,cAAc,EAAE,YAAY,EAAE,oBAAoB,EAAC,MAAM,SAAS,CAAA;AAG1E,MAAM,MAAM,SAAS,GAAG;IACpB,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAChB,SAAS,EAAE,oBAAoB,CAAC,GAAG,CAAC,CAAA;CACvC,CAAA;AAED,qBAAa,SAAS;IAClB,OAAO,CAAC,QAAQ,CAA+C;;IAI/D,GAAG,CAAC,CAAC,SAAS,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,oBAAoB,CAAC,CAAC,CAAC;IAS/F,OAAO,CAAC,QAAQ,EAAE,cAAc;IAUhC,MAAM;;;;IAIN,KAAK;CAGR"}
@@ -1,22 +1,19 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DeferQueue = void 0;
3
+ exports.DeferList = void 0;
4
4
  const utils_1 = require("./utils");
5
- class DeferQueue {
6
- constructor(em) {
7
- this.em = em;
5
+ class DeferList {
6
+ constructor() {
8
7
  this.deferMap = new Map();
9
8
  }
10
- add(entityClass, id, relations) {
11
- const data = this.getData(entityClass);
9
+ add(metadata, id, relations) {
10
+ const data = this.getData(metadata);
12
11
  data.ids.add(id);
13
12
  if (relations != null) {
14
13
  data.relations = (0, utils_1.mergeRelataions)(data.relations, relations);
15
14
  }
16
15
  }
17
- getData(entityClass) {
18
- const em = this.em();
19
- const metadata = em.connection.getMetadata(entityClass);
16
+ getData(metadata) {
20
17
  let list = this.deferMap.get(metadata.target);
21
18
  if (list == null) {
22
19
  list = { ids: new Set(), relations: {} };
@@ -31,5 +28,5 @@ class DeferQueue {
31
28
  this.deferMap.clear();
32
29
  }
33
30
  }
34
- exports.DeferQueue = DeferQueue;
35
- //# sourceMappingURL=deferQueue.js.map
31
+ exports.DeferList = DeferList;
32
+ //# sourceMappingURL=deferList.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deferList.js","sourceRoot":"","sources":["../src/deferList.ts"],"names":[],"mappings":";;;AAEA,mCAAuC;AAOvC,MAAa,SAAS;IAGlB;QAFQ,aAAQ,GAAsC,IAAI,GAAG,EAAE,CAAA;IAEhD,CAAC;IAEhB,GAAG,CAAmB,QAAwB,EAAE,EAAU,EAAE,SAAmC;QAC3F,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;QACnC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QAEhB,IAAI,SAAS,IAAI,IAAI,EAAE,CAAC;YACpB,IAAI,CAAC,SAAS,GAAG,IAAA,uBAAe,EAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;QAC/D,CAAC;IACL,CAAC;IAED,OAAO,CAAC,QAAwB;QAC5B,IAAI,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;QAC7C,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;YACf,IAAI,GAAG,EAAC,GAAG,EAAE,IAAI,GAAG,EAAE,EAAE,SAAS,EAAE,EAAE,EAAC,CAAA;YACtC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;QAC5C,CAAC;QAED,OAAO,IAAI,CAAA;IACf,CAAC;IAED,MAAM;QACF,OAAO,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,EAAC,MAAM,EAAE,IAAI,EAAC,CAAC,CAAC,CAAA;IACjF,CAAC;IAED,KAAK;QACD,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAA;IACzB,CAAC;CACJ;AA/BD,8BA+BC"}
package/lib/store.d.ts CHANGED
@@ -6,7 +6,7 @@ export type ChangeSet<E extends Entity> = {
6
6
  metadata: EntityMetadata;
7
7
  inserts: E[];
8
8
  upserts: E[];
9
- removes: E[];
9
+ removes: string[];
10
10
  extraUpserts: E[];
11
11
  };
12
12
  export interface GetOptions<Entity = any> {
@@ -16,9 +16,10 @@ export interface GetOptions<Entity = any> {
16
16
  export declare class StoreWithCache extends Store {
17
17
  private em;
18
18
  private updates;
19
- private queue;
19
+ private defers;
20
20
  private cache;
21
21
  private logger;
22
+ private currentCommit;
22
23
  constructor(em: () => EntityManager, changes?: ChangeTracker);
23
24
  insert<E extends _Entity>(entity: E): Promise<void>;
24
25
  insert<E extends _Entity>(entities: E[]): Promise<void>;
@@ -62,6 +63,7 @@ export declare class StoreWithCache extends Store {
62
63
  private cloneEntity;
63
64
  private traverseEntity;
64
65
  private getEntityMetadata;
66
+ private getEntityPkHash;
65
67
  private saveMany;
66
68
  private getFkSignature;
67
69
  private upsertMany;
@@ -1 +1 @@
1
- {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
package/lib/store.js CHANGED
@@ -17,62 +17,70 @@ const logger_1 = require("@subsquid/logger");
17
17
  const typeorm_store_1 = require("@subsquid/typeorm-store");
18
18
  const util_internal_1 = require("@subsquid/util-internal");
19
19
  const assert_1 = __importDefault(require("assert"));
20
+ const async_mutex_1 = require("async-mutex");
20
21
  const typeorm_1 = require("typeorm");
21
22
  const cacheMap_1 = require("./cacheMap");
22
- const changeTracker_1 = require("./changeTracker");
23
- const deferQueue_1 = require("./deferQueue");
23
+ const deferList_1 = require("./deferList");
24
24
  const relationGraph_1 = require("./relationGraph");
25
+ const updatesMap_1 = require("./updatesMap");
25
26
  const utils_1 = require("./utils");
26
27
  // @ts-ignore
27
28
  class StoreWithCache extends typeorm_store_1.Store {
28
29
  constructor(em, changes) {
29
30
  super(em, changes);
30
31
  this.em = em;
32
+ this.currentCommit = new async_mutex_1.Mutex();
31
33
  this.logger = (0, logger_1.createLogger)('sqd:store');
32
- this.cache = new cacheMap_1.CacheMap(em, { logger: this.logger });
33
- this.updates = new changeTracker_1.UpdatesTracker(em);
34
- this.queue = new deferQueue_1.DeferQueue(em);
34
+ this.cache = new cacheMap_1.CacheMap({ logger: this.logger });
35
+ this.updates = new updatesMap_1.UpdatesMap();
36
+ this.defers = new deferList_1.DeferList();
35
37
  }
36
38
  async insert(e) {
39
+ await this.currentCommit.waitForUnlock();
37
40
  const entities = Array.isArray(e) ? e : [e];
38
41
  if (entities.length == 0)
39
42
  return;
40
43
  for (const entity of entities) {
41
- this.updates.insert(entity.constructor, entity.id);
42
- this.cache.add(entity, true);
44
+ const md = this.getEntityMetadata(entity.constructor);
45
+ this.updates.insert(md, entity.id);
46
+ this.cache.add(md, entity, true);
43
47
  }
44
48
  }
45
49
  async upsert(e) {
50
+ await this.currentCommit.waitForUnlock();
46
51
  let entities = Array.isArray(e) ? e : [e];
47
52
  if (entities.length == 0)
48
53
  return;
49
54
  for (const entity of entities) {
50
- this.updates.upsert(entity.constructor, entity.id);
51
- this.cache.add(entity);
55
+ const md = this.getEntityMetadata(entity.constructor);
56
+ const isNew = this.updates.get(md, entity.id) === updatesMap_1.UpdateType.Remove;
57
+ this.updates.upsert(md, entity.id);
58
+ this.cache.add(md, entity, isNew);
52
59
  }
53
60
  }
54
61
  async save(e) {
55
62
  return await this.upsert(e);
56
63
  }
57
64
  async remove(e, id) {
65
+ await this.currentCommit.waitForUnlock();
58
66
  if (id == null) {
59
67
  const entities = Array.isArray(e) ? e : [e];
60
68
  if (entities.length == 0)
61
69
  return;
62
70
  for (const entity of entities) {
63
- const entityClass = entity.constructor;
64
- this.updates.remove(entityClass, entity.id);
65
- this.cache.delete(entityClass, entity.id);
71
+ const md = this.getEntityMetadata(entity.constructor);
72
+ this.updates.remove(md, entity.id);
73
+ this.cache.delete(md, entity.id);
66
74
  }
67
75
  }
68
76
  else {
69
77
  const ids = Array.isArray(id) ? id : [id];
70
78
  if (ids.length == 0)
71
79
  return;
72
- const entityClass = e;
80
+ const md = this.getEntityMetadata(e);
73
81
  for (const id of ids) {
74
- this.updates.remove(entityClass, id);
75
- this.cache.delete(entityClass, id);
82
+ this.updates.remove(md, id);
83
+ this.cache.delete(md, id);
76
84
  }
77
85
  }
78
86
  }
@@ -88,7 +96,10 @@ class StoreWithCache extends typeorm_store_1.Store {
88
96
  await this.commit();
89
97
  const res = await super.find(entityClass, options);
90
98
  for (const entity of res) {
91
- this.traverseEntity(entity, options.relations || null, (e) => this.cache.add(e));
99
+ this.traverseEntity(entity, options.relations || null, (e) => {
100
+ const md = this.getEntityMetadata(e.constructor);
101
+ this.cache.add(md, e);
102
+ });
92
103
  }
93
104
  return res;
94
105
  }
@@ -96,7 +107,10 @@ class StoreWithCache extends typeorm_store_1.Store {
96
107
  await this.commit();
97
108
  const res = await super.findBy(entityClass, where);
98
109
  for (const entity of res) {
99
- this.traverseEntity(entity, null, (e) => this.cache.add(e));
110
+ this.traverseEntity(entity, null, (e) => {
111
+ const md = this.getEntityMetadata(entityClass);
112
+ this.cache.add(md, e);
113
+ });
100
114
  }
101
115
  return res;
102
116
  }
@@ -104,28 +118,40 @@ class StoreWithCache extends typeorm_store_1.Store {
104
118
  await this.commit();
105
119
  const res = await super.findOne(entityClass, options);
106
120
  if (res != null) {
107
- this.traverseEntity(res, options.relations || null, (e) => this.cache.add(e));
121
+ this.traverseEntity(res, options.relations || null, (e) => {
122
+ const md = this.getEntityMetadata(e.constructor);
123
+ this.cache.add(md, e);
124
+ });
108
125
  }
109
126
  return res;
110
127
  }
111
128
  async findOneOrFail(entityClass, options) {
112
129
  await this.commit();
113
130
  const res = await super.findOneOrFail(entityClass, options);
114
- this.traverseEntity(res, options.relations || null, (e) => this.cache.add(e));
131
+ this.traverseEntity(res, options.relations || null, (e) => {
132
+ const md = this.getEntityMetadata(e.constructor);
133
+ this.cache.add(md, e);
134
+ });
115
135
  return res;
116
136
  }
117
137
  async findOneBy(entityClass, where) {
118
138
  await this.commit();
119
139
  const res = await super.findOneBy(entityClass, where);
120
140
  if (res != null) {
121
- this.traverseEntity(res, null, (e) => this.cache.add(e));
141
+ this.traverseEntity(res, null, (e) => {
142
+ const md = this.getEntityMetadata(e.constructor);
143
+ this.cache.add(md, e);
144
+ });
122
145
  }
123
146
  return res;
124
147
  }
125
148
  async findOneByOrFail(entityClass, where) {
126
149
  await this.commit();
127
150
  const res = await super.findOneByOrFail(entityClass, where);
128
- this.traverseEntity(res, null, (e) => this.cache.add(e));
151
+ this.traverseEntity(res, null, (e) => {
152
+ const md = this.getEntityMetadata(e.constructor);
153
+ this.cache.add(md, e);
154
+ });
129
155
  return res;
130
156
  }
131
157
  async get(entityClass, idOrOptions) {
@@ -164,8 +190,9 @@ class StoreWithCache extends typeorm_store_1.Store {
164
190
  return this.getOrInsert(entityClass, idOrOptions, create);
165
191
  }
166
192
  defer(entityClass, idOrOptions) {
193
+ const md = this.getEntityMetadata(entityClass);
167
194
  const options = parseGetOptions(idOrOptions);
168
- this.queue.add(entityClass, options.id, options.relations);
195
+ this.defers.add(md, options.id, options.relations);
169
196
  return new DeferredEntity({
170
197
  get: async () => this.get(entityClass, options),
171
198
  getOrFail: async () => this.getOrFail(entityClass, options),
@@ -173,37 +200,39 @@ class StoreWithCache extends typeorm_store_1.Store {
173
200
  });
174
201
  }
175
202
  async commit() {
176
- const log = this.logger.child('commit');
177
- const entityOrder = this.getCommitOrder();
178
- const changeSets = [];
179
- for (const metadata of entityOrder) {
180
- const changeSet = this.getChangeSet(metadata.target);
181
- changeSets.push(changeSet);
182
- }
183
- for (const { metadata, inserts, upserts } of changeSets) {
184
- if (upserts.length > 0) {
185
- log.debug(`commit upserts for ${metadata.name} (${upserts.length})`);
186
- await super.upsert(upserts);
203
+ await this.currentCommit.runExclusive(async () => {
204
+ const log = this.logger.child('commit');
205
+ const entityOrder = this.getCommitOrder();
206
+ const changeSets = [];
207
+ for (const metadata of entityOrder) {
208
+ const changeSet = this.getChangeSet(metadata.target);
209
+ changeSets.push(changeSet);
187
210
  }
188
- if (inserts.length) {
189
- log.debug(`commit inserts for ${metadata.name} (${inserts.length})`);
190
- await super.insert(inserts);
211
+ for (const { metadata, inserts, upserts } of changeSets) {
212
+ if (upserts.length > 0) {
213
+ log.debug(`commit upserts for ${metadata.name} (${upserts.length})`);
214
+ await super.upsert(upserts);
215
+ }
216
+ if (inserts.length) {
217
+ log.debug(`commit inserts for ${metadata.name} (${inserts.length})`);
218
+ await super.insert(inserts);
219
+ }
191
220
  }
192
- }
193
- const changeSetsReversed = [...changeSets].reverse();
194
- for (const { metadata, removes } of changeSetsReversed) {
195
- if (removes.length > 0) {
196
- log.debug(`commit removes for ${metadata.name} (${removes.length})`);
197
- await super.remove(removes);
221
+ const changeSetsReversed = [...changeSets].reverse();
222
+ for (const { metadata, removes } of changeSetsReversed) {
223
+ if (removes.length > 0) {
224
+ log.debug(`commit removes for ${metadata.name} (${removes.length})`);
225
+ await super.remove(metadata.target, removes);
226
+ }
198
227
  }
199
- }
200
- for (const { metadata, extraUpserts } of changeSets) {
201
- if (extraUpserts.length) {
202
- log.debug(`commit extra upserts for ${metadata.name} (${extraUpserts.length})`);
203
- await super.upsert(extraUpserts);
228
+ for (const { metadata, extraUpserts } of changeSets) {
229
+ if (extraUpserts.length) {
230
+ log.debug(`commit extra upserts for ${metadata.name} (${extraUpserts.length})`);
231
+ await super.upsert(extraUpserts);
232
+ }
204
233
  }
205
- }
206
- this.updates.clear();
234
+ this.updates.clear();
235
+ });
207
236
  }
208
237
  clear() {
209
238
  this.cache.clear();
@@ -218,11 +247,11 @@ class StoreWithCache extends typeorm_store_1.Store {
218
247
  const upserts = [];
219
248
  const removes = [];
220
249
  const extraUpserts = [];
221
- const updates = this.updates.getUpdates(metadata.target);
250
+ const updates = this.updates.getUpdates(metadata);
222
251
  for (const [id, type] of updates) {
223
- const cached = this.cache.get(metadata.target, id);
252
+ const cached = this.cache.get(metadata, id);
224
253
  switch (type) {
225
- case changeTracker_1.UpdateType.Insert: {
254
+ case updatesMap_1.UpdateType.Insert: {
226
255
  (0, assert_1.default)(cached?.value != null);
227
256
  inserts.push(cached.value);
228
257
  const extraUpsert = this.extractExtraUpsert(cached.value);
@@ -231,7 +260,7 @@ class StoreWithCache extends typeorm_store_1.Store {
231
260
  }
232
261
  break;
233
262
  }
234
- case changeTracker_1.UpdateType.Upsert: {
263
+ case updatesMap_1.UpdateType.Upsert: {
235
264
  (0, assert_1.default)(cached?.value != null);
236
265
  upserts.push(cached.value);
237
266
  const extraUpsert = this.extractExtraUpsert(cached.value);
@@ -240,10 +269,8 @@ class StoreWithCache extends typeorm_store_1.Store {
240
269
  }
241
270
  break;
242
271
  }
243
- case changeTracker_1.UpdateType.Remove: {
244
- const e = metadata.create();
245
- e.id = id;
246
- removes.push(e);
272
+ case updatesMap_1.UpdateType.Remove: {
273
+ removes.push(id);
247
274
  break;
248
275
  }
249
276
  }
@@ -251,21 +278,23 @@ class StoreWithCache extends typeorm_store_1.Store {
251
278
  return { metadata, inserts, upserts, extraUpserts, removes };
252
279
  }
253
280
  async load() {
254
- for (const { target, data } of this.queue.values()) {
281
+ for (const { target, data } of this.defers.values()) {
255
282
  const metadata = this.getEntityMetadata(target);
256
- for (const id of data.ids) {
257
- this.cache.ensure(metadata.target, id);
283
+ const ids = Array.from(data.ids);
284
+ for (const id of ids) {
285
+ this.cache.ensure(metadata, id);
258
286
  }
259
- for (let batch of (0, utils_1.splitIntoBatches)([...data.ids], 30000)) {
287
+ for (let batch of (0, utils_1.splitIntoBatches)(ids, 30000)) {
260
288
  if (batch.length == 0)
261
289
  continue;
262
290
  await this.find(metadata.target, { where: { id: (0, typeorm_1.In)(batch) }, relations: data.relations });
263
291
  }
264
292
  }
265
- this.queue.clear();
293
+ this.defers.clear();
266
294
  }
267
295
  getCached(entityClass, id, mask) {
268
- const cached = this.cache.get(entityClass, id);
296
+ const md = this.getEntityMetadata(entityClass);
297
+ const cached = this.cache.get(md, id);
269
298
  if (cached == null) {
270
299
  return undefined;
271
300
  }
@@ -293,8 +322,8 @@ class StoreWithCache extends typeorm_store_1.Store {
293
322
  if (invCommitOrderIndex < commitOrderIndex)
294
323
  continue;
295
324
  (0, assert_1.default)(relation.isNullable);
296
- const invUpdateType = this.updates.get(inverseMetadata.target, inverseEntity.id);
297
- if (invUpdateType === changeTracker_1.UpdateType.Insert) {
325
+ const invUpdateType = this.updates.get(inverseMetadata, inverseEntity.id);
326
+ if (invUpdateType === updatesMap_1.UpdateType.Insert) {
298
327
  if (extraUpsert == null) {
299
328
  extraUpsert = metadata.create();
300
329
  extraUpsert.id = entity.id;
@@ -378,6 +407,23 @@ class StoreWithCache extends typeorm_store_1.Store {
378
407
  const em = this.em();
379
408
  return em.connection.getMetadata(entityClass);
380
409
  }
410
+ getEntityPkHash(metadata, entity) {
411
+ const columns = metadata.primaryColumns;
412
+ if (columns.length === 1) {
413
+ const pk = columns[0].getEntityValue(entity);
414
+ (0, assert_1.default)(pk != null);
415
+ return String(pk);
416
+ }
417
+ else {
418
+ return columns
419
+ .map((c) => {
420
+ const pk = c.getEntityValue(entity);
421
+ (0, assert_1.default)(pk != null);
422
+ return String(pk);
423
+ })
424
+ .join(':');
425
+ }
426
+ }
381
427
  // @ts-ignore
382
428
  async saveMany(entityClass, entities) {
383
429
  (0, assert_1.default)(entities.length > 0);