@zyno-io/dk-server-foundation 26.616.754 → 26.617.449

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.
@@ -1,10 +1,12 @@
1
1
  import { ClassType } from '@deepkit/core';
2
2
  import { MySQLDatabaseAdapter as BaseMySQLDatabaseAdapter } from '@deepkit/mysql';
3
3
  import { Database, DatabaseSession } from '@deepkit/orm';
4
+ import { SQLPersistence } from '@deepkit/sql';
4
5
  import { PoolConfig } from 'mariadb';
5
6
  import { BaseDatabase } from './common';
6
7
  export type MySQLDatabaseSession = DatabaseSession<MySQLDatabaseAdapter>;
7
8
  export declare class MySQLDatabaseAdapter extends BaseMySQLDatabaseAdapter {
9
+ createPersistence(session: DatabaseSession<this>): SQLPersistence;
8
10
  registerTransformations(): void;
9
11
  }
10
12
  export interface IMySQLDatabaseAdapterConfig extends PoolConfig {
@@ -1 +1 @@
1
- {"version":3,"file":"mysql.d.ts","sourceRoot":"","sources":["../../../src/database/mysql.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAgB,MAAM,eAAe,CAAC;AACxD,OAAO,EAAmB,oBAAoB,IAAI,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AACnG,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAGzD,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAKrC,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAExC,MAAM,MAAM,oBAAoB,GAAG,eAAe,CAAC,oBAAoB,CAAC,CAAC;AAUzE,qBAAa,oBAAqB,SAAQ,wBAAwB;IAC9D,uBAAuB;CA8D1B;AAED,MAAM,WAAW,2BAA4B,SAAQ,UAAU;IAC3D,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC9B;AACD,wBAAgB,mBAAmB,CAC/B,MAAM,EAAE,2BAA2B,EACnC,QAAQ,GAAE,qBAAqB,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAM,GACzD,SAAS,CAAC,YAAY,CAAC,oBAAoB,CAAC,CAAC,CAsC/C"}
1
+ {"version":3,"file":"mysql.d.ts","sourceRoot":"","sources":["../../../src/database/mysql.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAgB,MAAM,eAAe,CAAC;AACxD,OAAO,EAAmB,oBAAoB,IAAI,wBAAwB,EAA4C,MAAM,gBAAgB,CAAC;AAC7I,OAAO,EAAE,QAAQ,EAAgC,eAAe,EAAa,MAAM,cAAc,CAAC;AAClG,OAAO,EAAiD,cAAc,EAAE,MAAM,cAAc,CAAC;AAE7F,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAKrC,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAGxC,MAAM,MAAM,oBAAoB,GAAG,eAAe,CAAC,oBAAoB,CAAC,CAAC;AAyBzE,qBAAa,oBAAqB,SAAQ,wBAAwB;IACrD,iBAAiB,CAAC,OAAO,EAAE,eAAe,CAAC,IAAI,CAAC,GAAG,cAAc;IAI1E,uBAAuB;CA8D1B;AAED,MAAM,WAAW,2BAA4B,SAAQ,UAAU;IAC3D,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC9B;AACD,wBAAgB,mBAAmB,CAC/B,MAAM,EAAE,2BAA2B,EACnC,QAAQ,GAAE,qBAAqB,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAM,GACzD,SAAS,CAAC,YAAY,CAAC,oBAAoB,CAAC,CAAC,CAsC/C"}
@@ -11,13 +11,18 @@ function __assignType(fn, args) {
11
11
  var { __ΩClassType } = require('@deepkit/core');
12
12
  const core_1 = require("@deepkit/core");
13
13
  const mysql_1 = require("@deepkit/mysql");
14
+ /*@ts-ignore*/
15
+ var { __ΩDatabasePersistenceChangeSet } = require('@deepkit/orm');
14
16
  const orm_1 = require("@deepkit/orm");
17
+ /*@ts-ignore*/
18
+ var { __ΩPreparedEntity } = require('@deepkit/sql');
15
19
  const sql_1 = require("@deepkit/sql");
16
20
  const type_1 = require("@deepkit/type");
17
21
  const _1 = require(".");
18
22
  const resolver_1 = require("../app/resolver");
19
23
  const state_1 = require("../app/state");
20
24
  const common_1 = require("./common");
25
+ const regular_update_1 = require("./regular-update");
21
26
  const __ΩMySQLDatabaseSession = [() => MySQLDatabaseAdapter, () => orm_1.DatabaseSession, 'MySQLDatabaseSession', 'PP7!7"w#y'];
22
27
  exports.__ΩMySQLDatabaseSession = __ΩMySQLDatabaseSession;
23
28
  const originalRun = mysql_1.MySQLConnection.prototype.run;
@@ -27,7 +32,21 @@ mysql_1.MySQLConnection.prototype.run = __assignType(async function (sql, params
27
32
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
28
33
  return this.lastExecResult?.[0];
29
34
  }, ['sql', 'params', () => [], '', 'P&2!"F2">#"/$']);
35
+ class RegularUpdateMySQLPersistence extends mysql_1.MySQLPersistence {
36
+ async batchUpdate(entity, changeSets) {
37
+ await (0, regular_update_1.batchUpdateWithRegularUpdateStatements)({
38
+ platform: this.platform,
39
+ getConnection: () => this.getConnection(),
40
+ hasActiveTransaction: () => this.session.hasTransaction(),
41
+ handleSpecificError: __assignType(error => this.handleSpecificError(error), ['error', '', 'P"2!"/"'])
42
+ }, entity, changeSets);
43
+ }
44
+ }
45
+ RegularUpdateMySQLPersistence.__type = [() => mysql_1.MySQLPersistence, () => __ΩPreparedEntity, 'entity', () => __ΩDatabasePersistenceChangeSet, 'changeSets', 'batchUpdate', 'RegularUpdateMySQLPersistence', 'P7!Pn"2#"o$"F2%$`0&5w\''];
30
46
  class MySQLDatabaseAdapter extends mysql_1.MySQLDatabaseAdapter {
47
+ createPersistence(session) {
48
+ return new RegularUpdateMySQLPersistence(this.platform, this.connectionPool, session);
49
+ }
31
50
  registerTransformations() {
32
51
  // any
33
52
  this.platform.serializer.deserializeRegistry.register(type_1.ReflectionKind.any, __assignType((_type, state) => {
@@ -91,7 +110,7 @@ class MySQLDatabaseAdapter extends mysql_1.MySQLDatabaseAdapter {
91
110
  }
92
111
  }
93
112
  exports.MySQLDatabaseAdapter = MySQLDatabaseAdapter;
94
- MySQLDatabaseAdapter.__type = [() => mysql_1.MySQLDatabaseAdapter, 'registerTransformations', 'MySQLDatabaseAdapter', 'P7!P"0"5w#'];
113
+ MySQLDatabaseAdapter.__type = [() => mysql_1.MySQLDatabaseAdapter, () => orm_1.DatabaseSession, 'session', () => sql_1.SQLPersistence, 'createPersistence', 'registerTransformations', 'MySQLDatabaseAdapter', 'P7!PP!7"2#P7$0%P"0&5w\''];
95
114
  const __ΩIMySQLDatabaseAdapterConfig = ['PoolConfig', 'enableLocksTable', 'IMySQLDatabaseAdapterConfig', 'P"w!)4"8Mw#y'];
96
115
  exports.__ΩIMySQLDatabaseAdapterConfig = __ΩIMySQLDatabaseAdapterConfig;
97
116
  function createMySQLDatabase(config, entities = []) {
@@ -1 +1 @@
1
- {"version":3,"file":"mysql.js","sourceRoot":"","sources":["../../../src/database/mysql.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mysql.js","sourceRoot":"","sources":["../../../src/database/mysql.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,12 @@
1
1
  import { ClassType } from '@deepkit/core';
2
2
  import { Database, DatabaseSession } from '@deepkit/orm';
3
3
  import { PostgresDatabaseAdapter as BasePostgresDatabaseAdapter } from '@deepkit/postgres';
4
+ import { SQLPersistence } from '@deepkit/sql';
4
5
  import { PoolConfig } from 'pg';
5
6
  import { BaseDatabase } from './common';
6
7
  export type PostgresDatabaseSession = DatabaseSession<PostgresDatabaseAdapter>;
7
8
  export declare class PostgresDatabaseAdapter extends BasePostgresDatabaseAdapter {
9
+ createPersistence(session: DatabaseSession<this>): SQLPersistence;
8
10
  registerTransformations(): void;
9
11
  }
10
12
  export interface IPostgresDatabaseAdapterConfig extends PoolConfig {
@@ -1 +1 @@
1
- {"version":3,"file":"postgres.d.ts","sourceRoot":"","sources":["../../../src/database/postgres.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EAAsB,uBAAuB,IAAI,2BAA2B,EAAE,MAAM,mBAAmB,CAAC;AAG/G,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAIhC,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAExC,MAAM,MAAM,uBAAuB,GAAG,eAAe,CAAC,uBAAuB,CAAC,CAAC;AAU/E,qBAAa,uBAAwB,SAAQ,2BAA2B;IACpE,uBAAuB;CAsB1B;AAED,MAAM,WAAW,8BAA+B,SAAQ,UAAU;IAC9D,2IAA2I;IAC3I,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,wBAAgB,sBAAsB,CAClC,MAAM,EAAE,8BAA8B,EACtC,QAAQ,GAAE,qBAAqB,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAM,GACzD,SAAS,CAAC,YAAY,CAAC,uBAAuB,CAAC,CAAC,CA+BlD"}
1
+ {"version":3,"file":"postgres.d.ts","sourceRoot":"","sources":["../../../src/database/postgres.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAgC,eAAe,EAAa,MAAM,cAAc,CAAC;AAClG,OAAO,EAEH,uBAAuB,IAAI,2BAA2B,EAEzD,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAiD,cAAc,EAAE,MAAM,cAAc,CAAC;AAE7F,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAIhC,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAGxC,MAAM,MAAM,uBAAuB,GAAG,eAAe,CAAC,uBAAuB,CAAC,CAAC;AAyB/E,qBAAa,uBAAwB,SAAQ,2BAA2B;IAC3D,iBAAiB,CAAC,OAAO,EAAE,eAAe,CAAC,IAAI,CAAC,GAAG,cAAc;IAI1E,uBAAuB;CAsB1B;AAED,MAAM,WAAW,8BAA+B,SAAQ,UAAU;IAC9D,2IAA2I;IAC3I,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,wBAAgB,sBAAsB,CAClC,MAAM,EAAE,8BAA8B,EACtC,QAAQ,GAAE,qBAAqB,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAM,GACzD,SAAS,CAAC,YAAY,CAAC,uBAAuB,CAAC,CAAC,CA+BlD"}
@@ -9,13 +9,18 @@ function __assignType(fn, args) {
9
9
  }
10
10
  /*@ts-ignore*/
11
11
  var { __ΩClassType } = require('@deepkit/core');
12
+ /*@ts-ignore*/
13
+ var { __ΩDatabasePersistenceChangeSet } = require('@deepkit/orm');
12
14
  const orm_1 = require("@deepkit/orm");
13
15
  const postgres_1 = require("@deepkit/postgres");
16
+ /*@ts-ignore*/
17
+ var { __ΩPreparedEntity } = require('@deepkit/sql');
14
18
  const sql_1 = require("@deepkit/sql");
15
19
  const type_1 = require("@deepkit/type");
16
20
  const resolver_1 = require("../app/resolver");
17
21
  const state_1 = require("../app/state");
18
22
  const common_1 = require("./common");
23
+ const regular_update_1 = require("./regular-update");
19
24
  const __ΩPostgresDatabaseSession = [() => PostgresDatabaseAdapter, () => orm_1.DatabaseSession, 'PostgresDatabaseSession', 'PP7!7"w#y'];
20
25
  exports.__ΩPostgresDatabaseSession = __ΩPostgresDatabaseSession;
21
26
  const originalRun = postgres_1.PostgresConnection.prototype.run;
@@ -25,7 +30,21 @@ postgres_1.PostgresConnection.prototype.run = __assignType(async function (sql,
25
30
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
26
31
  return { affectedRows: this.changes ?? 0, insertId: 0 };
27
32
  }, ['sql', 'params', () => [], '', 'P&2!"F2">#"/$']);
33
+ class RegularUpdatePostgresPersistence extends postgres_1.PostgresPersistence {
34
+ async batchUpdate(entity, changeSets) {
35
+ await (0, regular_update_1.batchUpdateWithRegularUpdateStatements)({
36
+ platform: this.platform,
37
+ getConnection: () => this.getConnection(),
38
+ hasActiveTransaction: () => this.session.hasTransaction(),
39
+ handleSpecificError: __assignType(error => this.handleSpecificError(error), ['error', '', 'P"2!"/"'])
40
+ }, entity, changeSets);
41
+ }
42
+ }
43
+ RegularUpdatePostgresPersistence.__type = [() => postgres_1.PostgresPersistence, () => __ΩPreparedEntity, 'entity', () => __ΩDatabasePersistenceChangeSet, 'changeSets', 'batchUpdate', 'RegularUpdatePostgresPersistence', 'P7!Pn"2#"o$"F2%$`0&5w\''];
28
44
  class PostgresDatabaseAdapter extends postgres_1.PostgresDatabaseAdapter {
45
+ createPersistence(session) {
46
+ return new RegularUpdatePostgresPersistence(this.platform, this.connectionPool, session);
47
+ }
29
48
  registerTransformations() {
30
49
  // any
31
50
  this.platform.serializer.deserializeRegistry.register(type_1.ReflectionKind.any, __assignType((_type, state) => {
@@ -45,7 +64,7 @@ class PostgresDatabaseAdapter extends postgres_1.PostgresDatabaseAdapter {
45
64
  }
46
65
  }
47
66
  exports.PostgresDatabaseAdapter = PostgresDatabaseAdapter;
48
- PostgresDatabaseAdapter.__type = [() => postgres_1.PostgresDatabaseAdapter, 'registerTransformations', 'PostgresDatabaseAdapter', 'P7!P"0"5w#'];
67
+ PostgresDatabaseAdapter.__type = [() => postgres_1.PostgresDatabaseAdapter, () => orm_1.DatabaseSession, 'session', () => sql_1.SQLPersistence, 'createPersistence', 'registerTransformations', 'PostgresDatabaseAdapter', 'P7!PP!7"2#P7$0%P"0&5w\''];
49
68
  const __ΩIPostgresDatabaseAdapterConfig = ['PoolConfig', 'enableLocksTable', 'IPostgresDatabaseAdapterConfig', 'P"w!)4"8Mw#y'];
50
69
  exports.__ΩIPostgresDatabaseAdapterConfig = __ΩIPostgresDatabaseAdapterConfig;
51
70
  function createPostgresDatabase(config, entities = []) {
@@ -1 +1 @@
1
- {"version":3,"file":"postgres.js","sourceRoot":"","sources":["../../../src/database/postgres.ts"],"names":[],"mappings":";;;AAmDA,wDAkCC;;;;;;;+BArFyB,eAAe;AACzC,sCAAyD;AACzD,gDAA+G;AAC/G,sCAA8C;AAC9C,wCAAqD;AAGrD,8CAA+C;AAC/C,wCAA2C;AAC3C,qCAAwC;;;AAIxC,MAAM,WAAW,GAAG,6BAAkB,CAAC,SAAS,CAAC,GAAG,CAAC;AACrD,8DAA8D;AAC9D,6BAAkB,CAAC,SAAS,CAAC,GAAG,gBAAG,KAAK,WAAW,GAAW,EAAE,SAAgB,EAAE;IAC9E,MAAM,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;IAC1C,8DAA8D;IAC9D,OAAO,EAAE,YAAY,EAAG,IAAY,CAAC,OAAO,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAS,CAAC;AAC5E,CAAC,mDAAA,CAAC;AAEF,MAAa,uBAAwB,SAAQ,kCAA2B;IACpE,uBAAuB;QACnB,MAAM;QACN,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,mBAAmB,CAAC,QAAQ,CAAC,qBAAc,CAAC,GAAG,eAAE,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACvF,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACpC,CAAC,wCAAC,CAAC;QAEH,cAAc;QACd,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,mBAAmB,CAAC,YAAY,cACrD,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,YAAY,sCAChC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACb,KAAK,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC,QAAQ,sBAAsB,KAAK,CAAC,QAAQ,qCAAqC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC5H,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;QACvB,CAAC,wCACJ,CAAC;QAEF,gHAAgH;QAChH,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,MAAM,EAAE,CAAC;YACjC,MAAM,MAAM,gBAAG,CAAC,CAAO,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,qBAAc,CAAC,KAAK,IAAI,CAAC,CAAC,SAAS,CAAC,IAAI,KAAK,MAAM,iCAAA,CAAC;YAC3F,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;YAC3C,IAAI,CAAC,QAAQ,CAAC,OAAO,cAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,qBAAc,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,oBAAc,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,yBAAE,WAAW,CAAC,CAAC;QAC7H,CAAC;IACL,CAAC;;AAtBL,0DAuBC;;;;AAOD,SAAgB,sBAAsB,CAClC,MAAsC,EACtC,WAAsD,EAAE;;IAExD,YAAO,KAAM,SAAQ,qBAAqC;YACtD;gBACI,MAAM,SAAS,GAAG,IAAA,uBAAY,GAAE,CAAC;gBACjC,MAAM,YAAY,GAAG,SAAS,CAAC,OAAO,KAAK,YAAY,CAAC;gBAExD,MAAM,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,GAAG,WAAW,EAAE,GAAG,MAAM,CAAC;gBAEvE,MAAM,GAAG,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,SAAS,CAAC,0BAA0B,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;gBAEhH,MAAM,OAAO,GAAG,IAAI,uBAAuB,CAAC;oBACxC,IAAI,EAAE,SAAS,CAAC,OAAO;oBACvB,IAAI,EAAE,SAAS,CAAC,OAAO;oBACvB,IAAI,EAAE,SAAS,CAAC,OAAO;oBACvB,QAAQ,EAAE,SAAS,CAAC,kBAAkB;oBACtC,QAAQ,EAAE,SAAS,CAAC,WAAW;oBAC/B,GAAG;oBACH,GAAG,EAAE,SAAS,CAAC,mBAAmB,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC7D,iBAAiB,EAAE,CAAC,SAAS,CAAC,uBAAuB,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI;oBACxF,GAAG,WAAW;iBACjB,CAAC,CAAC;gBAEH,OAAO,CAAC,uBAAuB,EAAE,CAAC;gBAElC,IAAI,mBAAW,CAAC,kBAAkB,EAAE,CAAC;oBACjC,QAAQ,CAAC,IAAI,CAAC,GAAG,mBAAW,CAAC,kBAAkB,CAAC,CAAC;gBACrD,CAAC;gBAED,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YAC7B,CAAC;SACJ;;WAAC;AACN,CAAC"}
1
+ {"version":3,"file":"postgres.js","sourceRoot":"","sources":["../../../src/database/postgres.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { DatabasePersistenceChangeSet, OrmEntity } from '@deepkit/orm';
2
+ import { DefaultPlatform, PreparedEntity, SQLConnection } from '@deepkit/sql';
3
+ interface RegularUpdateContext {
4
+ platform: DefaultPlatform;
5
+ getConnection: () => Promise<SQLConnection>;
6
+ hasActiveTransaction: () => boolean;
7
+ handleSpecificError: (error: Error) => Error;
8
+ }
9
+ export declare function batchUpdateWithRegularUpdateStatements<T extends OrmEntity>(context: RegularUpdateContext, entity: PreparedEntity, changeSets: DatabasePersistenceChangeSet<T>[]): Promise<void>;
10
+ export {};
11
+ //# sourceMappingURL=regular-update.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"regular-update.d.ts","sourceRoot":"","sources":["../../../src/database/regular-update.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,4BAA4B,EAAuB,SAAS,EAAE,MAAM,cAAc,CAAC;AAC5F,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAG9E,UAAU,oBAAoB;IAC1B,QAAQ,EAAE,eAAe,CAAC;IAC1B,aAAa,EAAE,MAAM,OAAO,CAAC,aAAa,CAAC,CAAC;IAC5C,oBAAoB,EAAE,MAAM,OAAO,CAAC;IACpC,mBAAmB,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,KAAK,CAAC;CAChD;AAID,wBAAsB,sCAAsC,CAAC,CAAC,SAAS,SAAS,EAC5E,OAAO,EAAE,oBAAoB,EAC7B,MAAM,EAAE,cAAc,EACtB,UAAU,EAAE,4BAA4B,CAAC,CAAC,CAAC,EAAE,GAC9C,OAAO,CAAC,IAAI,CAAC,CAiBf"}
@@ -0,0 +1,128 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.batchUpdateWithRegularUpdateStatements = batchUpdateWithRegularUpdateStatements;
4
+ const __ΩRecord = ['K', 'T', 'Record', 'l\'e#"Rb!b"Pde"!N#!w#y'];
5
+ const __ΩError = ['name', 'message', 'stack', 'Error', 'P&4!&4"&4#8Mw$y'];
6
+ function __assignType(fn, args) {
7
+ fn.__type = args;
8
+ return fn;
9
+ }
10
+ /*@ts-ignore*/
11
+ var { __ΩDatabasePersistenceChangeSet } = require('@deepkit/orm');
12
+ const orm_1 = require("@deepkit/orm");
13
+ /*@ts-ignore*/
14
+ var { __ΩPreparedEntity } = require('@deepkit/sql');
15
+ const sql_1 = require("@deepkit/sql");
16
+ const type_1 = require("@deepkit/type");
17
+ const __ΩRegularUpdateContext = [() => sql_1.DefaultPlatform, 'platform', () => sql_1.SQLConnection, '', 'getConnection', 'hasActiveTransaction', () => __ΩError, 'error', () => __ΩError, 'handleSpecificError', 'RegularUpdateContext', 'PP7!4"PP7#`/$4%P)/$4&Pn\'2(n)/$4*Mw+y'];
18
+ const hasOwn = __assignType((obj, key) => !!obj && Object.prototype.hasOwnProperty.call(obj, key), ['obj', 'key', '', 'PP%-J2!&2")/#']);
19
+ async function batchUpdateWithRegularUpdateStatements(context, entity, changeSets) {
20
+ const partialSerialize = (0, type_1.getPartialSerializeFunction)(entity.type, context.platform.serializer.serializeRegistry);
21
+ try {
22
+ if (!context.hasActiveTransaction() && shouldUseTemporaryTransaction(changeSets)) {
23
+ await runInTemporaryTransaction(context, __assignType(connection => executeUpdates(context, entity, changeSets, partialSerialize, connection), ['connection', '', 'P"2!"/"']));
24
+ return;
25
+ }
26
+ await executeUpdates(context, entity, changeSets, partialSerialize, await context.getConnection());
27
+ }
28
+ catch (error) {
29
+ const reflection = type_1.ReflectionClass.from(entity.type);
30
+ const updateError = new orm_1.DatabaseUpdateError(reflection, changeSets, `Could not update ${reflection.getClassName()} in database`, {
31
+ cause: error
32
+ });
33
+ throw context.handleSpecificError(updateError);
34
+ }
35
+ }
36
+ batchUpdateWithRegularUpdateStatements.__type = [() => __ΩRegularUpdateContext, 'context', () => __ΩPreparedEntity, 'entity', () => __ΩDatabasePersistenceChangeSet, 'changeSets', 'batchUpdateWithRegularUpdateStatements', 'Pn!2"n#2$"o%"F2&$`/\''];
37
+ function shouldUseTemporaryTransaction(changeSets) {
38
+ return changeSets.length > 1 || changeSets.some(__assignType(changeSet => Object.keys(changeSet.changes.$inc ?? {}).length > 0, ['changeSet', '', 'P"2!"/"']));
39
+ }
40
+ shouldUseTemporaryTransaction.__type = [() => __ΩDatabasePersistenceChangeSet, 'changeSets', 'shouldUseTemporaryTransaction', 'P"o!"F2")/#'];
41
+ async function runInTemporaryTransaction(context, callback) {
42
+ const connection = await context.getConnection();
43
+ let transactionStarted = false;
44
+ try {
45
+ await connection.run('START TRANSACTION');
46
+ transactionStarted = true;
47
+ await callback(connection);
48
+ await connection.run('COMMIT');
49
+ transactionStarted = false;
50
+ }
51
+ catch (error) {
52
+ if (transactionStarted) {
53
+ try {
54
+ await connection.run('ROLLBACK');
55
+ }
56
+ catch (rollbackError) {
57
+ if (error instanceof Error) {
58
+ Object.defineProperty(error, 'rollbackError', { value: rollbackError, configurable: true });
59
+ }
60
+ }
61
+ }
62
+ throw error;
63
+ }
64
+ }
65
+ runInTemporaryTransaction.__type = [() => __ΩRegularUpdateContext, 'context', () => sql_1.SQLConnection, 'connection', '', 'callback', 'runInTemporaryTransaction', 'Pn!2"PP7#2$$`/%2&$`/\''];
66
+ async function executeUpdates(context, entity, changeSets, partialSerialize, connection) {
67
+ for (const changeSet of changeSets) {
68
+ const params = [];
69
+ const set = [];
70
+ const placeholder = new context.platform.placeholderStrategy();
71
+ const serializedSet = changeSet.changes.$set ? partialSerialize(changeSet.changes.$set) : undefined;
72
+ const increments = changeSet.changes.$inc;
73
+ for (const fieldName of changeSet.changes.fieldNames) {
74
+ const property = entity.fieldMap[fieldName];
75
+ if (!property)
76
+ throw new Error(`Unsupported update field "${fieldName}" on ${entity.name}.`);
77
+ if (hasOwn(increments, fieldName)) {
78
+ params.push(increments[fieldName]);
79
+ set.push(`${property.columnNameEscaped} = ${property.columnNameEscaped} + ${property.sqlTypeCast(placeholder.getPlaceholder())}`);
80
+ }
81
+ else if (hasOwn(changeSet.changes.$unset, fieldName)) {
82
+ set.push(`${property.columnNameEscaped} = NULL`);
83
+ }
84
+ else if (hasOwn(changeSet.changes.$set, fieldName)) {
85
+ params.push(hasOwn(serializedSet, fieldName) ? serializedSet[fieldName] : null);
86
+ set.push(`${property.columnNameEscaped} = ${property.sqlTypeCast(placeholder.getPlaceholder())}`);
87
+ }
88
+ }
89
+ if (!set.length)
90
+ continue;
91
+ const serializedPk = partialSerialize(changeSet.primaryKey);
92
+ params.push(serializedPk[entity.primaryKey.name]);
93
+ await connection.run(`UPDATE ${entity.tableNameEscaped}
94
+ SET ${set.join(', ')}
95
+ WHERE ${entity.primaryKey.columnNameEscaped} = ${entity.primaryKey.sqlTypeCast(placeholder.getPlaceholder())}`, params);
96
+ const returningFields = Object.keys(changeSet.changes.$inc ?? {});
97
+ if (returningFields.length) {
98
+ await assignReturningFields(context, connection, entity, changeSet, returningFields);
99
+ }
100
+ }
101
+ }
102
+ executeUpdates.__type = [() => __ΩRegularUpdateContext, 'context', () => __ΩPreparedEntity, 'entity', () => __ΩDatabasePersistenceChangeSet, 'changeSets', 'value', '', 'partialSerialize', () => sql_1.SQLConnection, 'connection', 'executeUpdates', 'Pn!2"n#2$"o%"F2&P#2\'#/(2)P7*2+$`/,'];
103
+ async function assignReturningFields(context, connection, entity, changeSet, returningFields) {
104
+ const placeholder = new context.platform.placeholderStrategy();
105
+ const serializedItem = partialSerializeItem(context, entity, changeSet.item);
106
+ const params = [serializedItem[entity.primaryKey.name]];
107
+ const select = returningFields.map(__assignType(fieldName => {
108
+ const property = entity.fieldMap[fieldName];
109
+ if (!property)
110
+ throw new Error(`Unsupported returning field "${fieldName}" on ${entity.name}.`);
111
+ return `${property.columnNameEscaped} AS ${context.platform.quoteIdentifier(fieldName)}`;
112
+ }, ['fieldName', '', 'P"2!"/"']));
113
+ const row = await connection.execAndReturnSingle(`SELECT ${select.join(', ')}
114
+ FROM ${entity.tableNameEscaped}
115
+ WHERE ${entity.primaryKey.columnNameEscaped} = ${entity.primaryKey.sqlTypeCast(placeholder.getPlaceholder())}`, params);
116
+ if (!row)
117
+ return;
118
+ for (const fieldName of returningFields) {
119
+ changeSet.item[fieldName] = row[fieldName];
120
+ }
121
+ }
122
+ assignReturningFields.__type = [() => __ΩRegularUpdateContext, 'context', () => sql_1.SQLConnection, 'connection', () => __ΩPreparedEntity, 'entity', () => __ΩDatabasePersistenceChangeSet, 'changeSet', 'returningFields', 'assignReturningFields', 'Pn!2"P7#2$n%2&"o\'"2(&F2)"/*'];
123
+ function partialSerializeItem(context, entity, item) {
124
+ const partialSerialize = (0, type_1.getPartialSerializeFunction)(entity.type, context.platform.serializer.serializeRegistry);
125
+ return partialSerialize(item);
126
+ }
127
+ partialSerializeItem.__type = [() => __ΩRegularUpdateContext, 'context', () => __ΩPreparedEntity, 'entity', 'item', () => __ΩRecord, 'partialSerializeItem', 'Pn!2"n#2$"2%&#o&#/\''];
128
+ //# sourceMappingURL=regular-update.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"regular-update.js","sourceRoot":"","sources":["../../../src/database/regular-update.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zyno-io/dk-server-foundation",
3
- "version": "26.616.754",
3
+ "version": "26.617.449",
4
4
  "description": "TypeScript server foundation built on the Deepkit framework",
5
5
  "homepage": "https://github.com/zyno-io/dk-server-foundation#readme",
6
6
  "bugs": {
@@ -1,7 +1,7 @@
1
1
  import { ClassType, getClassName } from '@deepkit/core';
2
- import { MySQLConnection, MySQLDatabaseAdapter as BaseMySQLDatabaseAdapter } from '@deepkit/mysql';
3
- import { Database, DatabaseSession } from '@deepkit/orm';
4
- import { isNonUndefined } from '@deepkit/sql';
2
+ import { MySQLConnection, MySQLDatabaseAdapter as BaseMySQLDatabaseAdapter, MySQLPersistence as BaseMySQLPersistence } from '@deepkit/mysql';
3
+ import { Database, DatabasePersistenceChangeSet, DatabaseSession, OrmEntity } from '@deepkit/orm';
4
+ import { isNonUndefined, PreparedEntity, SQLConnection, SQLPersistence } from '@deepkit/sql';
5
5
  import { databaseAnnotation, ReflectionKind, Type } from '@deepkit/type';
6
6
  import { PoolConfig } from 'mariadb';
7
7
 
@@ -9,6 +9,7 @@ import { Coordinate } from '.';
9
9
  import { getAppConfig } from '../app/resolver';
10
10
  import { globalState } from '../app/state';
11
11
  import { BaseDatabase } from './common';
12
+ import { batchUpdateWithRegularUpdateStatements } from './regular-update';
12
13
 
13
14
  export type MySQLDatabaseSession = DatabaseSession<MySQLDatabaseAdapter>;
14
15
 
@@ -20,7 +21,26 @@ MySQLConnection.prototype.run = async function (sql: string, params: any[] = [])
20
21
  return this.lastExecResult?.[0] as any;
21
22
  };
22
23
 
24
+ class RegularUpdateMySQLPersistence extends BaseMySQLPersistence {
25
+ override async batchUpdate<T extends OrmEntity>(entity: PreparedEntity, changeSets: DatabasePersistenceChangeSet<T>[]): Promise<void> {
26
+ await batchUpdateWithRegularUpdateStatements(
27
+ {
28
+ platform: this.platform,
29
+ getConnection: () => this.getConnection() as unknown as Promise<SQLConnection>,
30
+ hasActiveTransaction: () => this.session.hasTransaction(),
31
+ handleSpecificError: error => this.handleSpecificError(error)
32
+ },
33
+ entity,
34
+ changeSets
35
+ );
36
+ }
37
+ }
38
+
23
39
  export class MySQLDatabaseAdapter extends BaseMySQLDatabaseAdapter {
40
+ override createPersistence(session: DatabaseSession<this>): SQLPersistence {
41
+ return new RegularUpdateMySQLPersistence(this.platform, this.connectionPool, session);
42
+ }
43
+
24
44
  registerTransformations() {
25
45
  // any
26
46
  this.platform.serializer.deserializeRegistry.register(ReflectionKind.any, (_type, state) => {
@@ -1,13 +1,18 @@
1
1
  import { ClassType } from '@deepkit/core';
2
- import { Database, DatabaseSession } from '@deepkit/orm';
3
- import { PostgresConnection, PostgresDatabaseAdapter as BasePostgresDatabaseAdapter } from '@deepkit/postgres';
4
- import { isNonUndefined } from '@deepkit/sql';
2
+ import { Database, DatabasePersistenceChangeSet, DatabaseSession, OrmEntity } from '@deepkit/orm';
3
+ import {
4
+ PostgresConnection,
5
+ PostgresDatabaseAdapter as BasePostgresDatabaseAdapter,
6
+ PostgresPersistence as BasePostgresPersistence
7
+ } from '@deepkit/postgres';
8
+ import { isNonUndefined, PreparedEntity, SQLConnection, SQLPersistence } from '@deepkit/sql';
5
9
  import { ReflectionKind, Type } from '@deepkit/type';
6
10
  import { PoolConfig } from 'pg';
7
11
 
8
12
  import { getAppConfig } from '../app/resolver';
9
13
  import { globalState } from '../app/state';
10
14
  import { BaseDatabase } from './common';
15
+ import { batchUpdateWithRegularUpdateStatements } from './regular-update';
11
16
 
12
17
  export type PostgresDatabaseSession = DatabaseSession<PostgresDatabaseAdapter>;
13
18
 
@@ -19,7 +24,26 @@ PostgresConnection.prototype.run = async function (sql: string, params: any[] =
19
24
  return { affectedRows: (this as any).changes ?? 0, insertId: 0 } as any;
20
25
  };
21
26
 
27
+ class RegularUpdatePostgresPersistence extends BasePostgresPersistence {
28
+ override async batchUpdate<T extends OrmEntity>(entity: PreparedEntity, changeSets: DatabasePersistenceChangeSet<T>[]): Promise<void> {
29
+ await batchUpdateWithRegularUpdateStatements(
30
+ {
31
+ platform: this.platform,
32
+ getConnection: () => this.getConnection() as unknown as Promise<SQLConnection>,
33
+ hasActiveTransaction: () => this.session.hasTransaction(),
34
+ handleSpecificError: error => this.handleSpecificError(error)
35
+ },
36
+ entity,
37
+ changeSets
38
+ );
39
+ }
40
+ }
41
+
22
42
  export class PostgresDatabaseAdapter extends BasePostgresDatabaseAdapter {
43
+ override createPersistence(session: DatabaseSession<this>): SQLPersistence {
44
+ return new RegularUpdatePostgresPersistence(this.platform, this.connectionPool, session);
45
+ }
46
+
23
47
  registerTransformations() {
24
48
  // any
25
49
  this.platform.serializer.deserializeRegistry.register(ReflectionKind.any, (_type, state) => {
@@ -0,0 +1,148 @@
1
+ import { DatabasePersistenceChangeSet, DatabaseUpdateError, OrmEntity } from '@deepkit/orm';
2
+ import { DefaultPlatform, PreparedEntity, SQLConnection } from '@deepkit/sql';
3
+ import { getPartialSerializeFunction, ReflectionClass } from '@deepkit/type';
4
+
5
+ interface RegularUpdateContext {
6
+ platform: DefaultPlatform;
7
+ getConnection: () => Promise<SQLConnection>;
8
+ hasActiveTransaction: () => boolean;
9
+ handleSpecificError: (error: Error) => Error;
10
+ }
11
+
12
+ const hasOwn = (obj: object | undefined, key: string): boolean => !!obj && Object.prototype.hasOwnProperty.call(obj, key);
13
+
14
+ export async function batchUpdateWithRegularUpdateStatements<T extends OrmEntity>(
15
+ context: RegularUpdateContext,
16
+ entity: PreparedEntity,
17
+ changeSets: DatabasePersistenceChangeSet<T>[]
18
+ ): Promise<void> {
19
+ const partialSerialize = getPartialSerializeFunction(entity.type, context.platform.serializer.serializeRegistry);
20
+
21
+ try {
22
+ if (!context.hasActiveTransaction() && shouldUseTemporaryTransaction(changeSets)) {
23
+ await runInTemporaryTransaction(context, connection => executeUpdates(context, entity, changeSets, partialSerialize, connection));
24
+ return;
25
+ }
26
+
27
+ await executeUpdates(context, entity, changeSets, partialSerialize, await context.getConnection());
28
+ } catch (error) {
29
+ const reflection = ReflectionClass.from(entity.type);
30
+ const updateError = new DatabaseUpdateError(reflection, changeSets, `Could not update ${reflection.getClassName()} in database`, {
31
+ cause: error
32
+ });
33
+ throw context.handleSpecificError(updateError);
34
+ }
35
+ }
36
+
37
+ function shouldUseTemporaryTransaction<T extends OrmEntity>(changeSets: DatabasePersistenceChangeSet<T>[]): boolean {
38
+ return changeSets.length > 1 || changeSets.some(changeSet => Object.keys(changeSet.changes.$inc ?? {}).length > 0);
39
+ }
40
+
41
+ async function runInTemporaryTransaction(context: RegularUpdateContext, callback: (connection: SQLConnection) => Promise<void>): Promise<void> {
42
+ const connection = await context.getConnection();
43
+ let transactionStarted = false;
44
+
45
+ try {
46
+ await connection.run('START TRANSACTION');
47
+ transactionStarted = true;
48
+ await callback(connection);
49
+ await connection.run('COMMIT');
50
+ transactionStarted = false;
51
+ } catch (error) {
52
+ if (transactionStarted) {
53
+ try {
54
+ await connection.run('ROLLBACK');
55
+ } catch (rollbackError) {
56
+ if (error instanceof Error) {
57
+ Object.defineProperty(error, 'rollbackError', { value: rollbackError, configurable: true });
58
+ }
59
+ }
60
+ }
61
+
62
+ throw error;
63
+ }
64
+ }
65
+
66
+ async function executeUpdates<T extends OrmEntity>(
67
+ context: RegularUpdateContext,
68
+ entity: PreparedEntity,
69
+ changeSets: DatabasePersistenceChangeSet<T>[],
70
+ partialSerialize: (value: unknown) => unknown,
71
+ connection: SQLConnection
72
+ ): Promise<void> {
73
+ for (const changeSet of changeSets) {
74
+ const params: unknown[] = [];
75
+ const set: string[] = [];
76
+ const placeholder = new context.platform.placeholderStrategy();
77
+ const serializedSet = changeSet.changes.$set ? (partialSerialize(changeSet.changes.$set) as Record<string, unknown>) : undefined;
78
+ const increments = changeSet.changes.$inc as Record<string, unknown> | undefined;
79
+
80
+ for (const fieldName of changeSet.changes.fieldNames) {
81
+ const property = entity.fieldMap[fieldName];
82
+ if (!property) throw new Error(`Unsupported update field "${fieldName}" on ${entity.name}.`);
83
+
84
+ if (hasOwn(increments, fieldName)) {
85
+ params.push(increments![fieldName]);
86
+ set.push(`${property.columnNameEscaped} = ${property.columnNameEscaped} + ${property.sqlTypeCast(placeholder.getPlaceholder())}`);
87
+ } else if (hasOwn(changeSet.changes.$unset, fieldName)) {
88
+ set.push(`${property.columnNameEscaped} = NULL`);
89
+ } else if (hasOwn(changeSet.changes.$set as object | undefined, fieldName)) {
90
+ params.push(hasOwn(serializedSet, fieldName) ? serializedSet![fieldName] : null);
91
+ set.push(`${property.columnNameEscaped} = ${property.sqlTypeCast(placeholder.getPlaceholder())}`);
92
+ }
93
+ }
94
+
95
+ if (!set.length) continue;
96
+
97
+ const serializedPk = partialSerialize(changeSet.primaryKey) as Record<string, unknown>;
98
+ params.push(serializedPk[entity.primaryKey.name]);
99
+
100
+ await connection.run(
101
+ `UPDATE ${entity.tableNameEscaped}
102
+ SET ${set.join(', ')}
103
+ WHERE ${entity.primaryKey.columnNameEscaped} = ${entity.primaryKey.sqlTypeCast(placeholder.getPlaceholder())}`,
104
+ params
105
+ );
106
+
107
+ const returningFields = Object.keys(changeSet.changes.$inc ?? {});
108
+ if (returningFields.length) {
109
+ await assignReturningFields(context, connection, entity, changeSet, returningFields);
110
+ }
111
+ }
112
+ }
113
+
114
+ async function assignReturningFields<T extends OrmEntity>(
115
+ context: RegularUpdateContext,
116
+ connection: SQLConnection,
117
+ entity: PreparedEntity,
118
+ changeSet: DatabasePersistenceChangeSet<T>,
119
+ returningFields: string[]
120
+ ) {
121
+ const placeholder = new context.platform.placeholderStrategy();
122
+ const serializedItem = partialSerializeItem(context, entity, changeSet.item);
123
+ const params = [serializedItem[entity.primaryKey.name]];
124
+ const select = returningFields.map(fieldName => {
125
+ const property = entity.fieldMap[fieldName];
126
+ if (!property) throw new Error(`Unsupported returning field "${fieldName}" on ${entity.name}.`);
127
+
128
+ return `${property.columnNameEscaped} AS ${context.platform.quoteIdentifier(fieldName)}`;
129
+ });
130
+
131
+ const row = await connection.execAndReturnSingle(
132
+ `SELECT ${select.join(', ')}
133
+ FROM ${entity.tableNameEscaped}
134
+ WHERE ${entity.primaryKey.columnNameEscaped} = ${entity.primaryKey.sqlTypeCast(placeholder.getPlaceholder())}`,
135
+ params
136
+ );
137
+
138
+ if (!row) return;
139
+
140
+ for (const fieldName of returningFields) {
141
+ changeSet.item[fieldName as keyof T] = row[fieldName];
142
+ }
143
+ }
144
+
145
+ function partialSerializeItem<T extends OrmEntity>(context: RegularUpdateContext, entity: PreparedEntity, item: T): Record<string, unknown> {
146
+ const partialSerialize = getPartialSerializeFunction(entity.type, context.platform.serializer.serializeRegistry);
147
+ return partialSerialize(item) as Record<string, unknown>;
148
+ }