@node-c/persistance-rdb 1.0.0-alpha5 → 1.0.0-alpha51

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.
Files changed (67) hide show
  1. package/README.md +1 -1
  2. package/dist/common/definitions/common.constants.d.ts +4 -0
  3. package/dist/common/definitions/common.constants.js +4 -0
  4. package/dist/common/definitions/common.constants.js.map +1 -1
  5. package/dist/{entityService → entity}/index.d.ts +2 -1
  6. package/dist/{entityService → entity}/index.js +2 -1
  7. package/dist/entity/index.js.map +1 -0
  8. package/dist/entity/rdb.entity.schema.d.ts +18 -0
  9. package/dist/{module/rdb.module.definitions.js → entity/rdb.entity.schema.js} +1 -1
  10. package/dist/entity/rdb.entity.schema.js.map +1 -0
  11. package/dist/entity/rdb.entity.service.d.ts +42 -0
  12. package/dist/entity/rdb.entity.service.definitions.d.ts +36 -0
  13. package/dist/entity/rdb.entity.service.definitions.js.map +1 -0
  14. package/dist/entity/rdb.entity.service.js +521 -0
  15. package/dist/entity/rdb.entity.service.js.map +1 -0
  16. package/dist/index.d.ts +2 -2
  17. package/dist/index.js +2 -2
  18. package/dist/index.js.map +1 -1
  19. package/dist/ormQueryBuilder/index.d.ts +1 -0
  20. package/dist/{module → ormQueryBuilder}/index.js +1 -2
  21. package/dist/ormQueryBuilder/index.js.map +1 -0
  22. package/dist/ormQueryBuilder/rdb.ormQueryBuilder.d.ts +38 -0
  23. package/dist/ormQueryBuilder/rdb.ormQueryBuilder.js +16 -0
  24. package/dist/ormQueryBuilder/rdb.ormQueryBuilder.js.map +1 -0
  25. package/dist/repository/index.d.ts +1 -2
  26. package/dist/repository/index.js +1 -2
  27. package/dist/repository/index.js.map +1 -1
  28. package/dist/repository/rdb.repository.d.ts +33 -6
  29. package/dist/repository/rdb.repository.js +6 -27
  30. package/dist/repository/rdb.repository.js.map +1 -1
  31. package/dist/sqlQueryBuilder/index.d.ts +3 -3
  32. package/dist/sqlQueryBuilder/index.js +3 -3
  33. package/dist/sqlQueryBuilder/index.js.map +1 -1
  34. package/dist/sqlQueryBuilder/{sqlQueryBuilder.definitions.d.ts → rdb.sqlQueryBuilder.definitions.d.ts} +7 -9
  35. package/dist/{repository/rdb.repository.definitions.js → sqlQueryBuilder/rdb.sqlQueryBuilder.definitions.js} +1 -1
  36. package/dist/sqlQueryBuilder/rdb.sqlQueryBuilder.definitions.js.map +1 -0
  37. package/dist/sqlQueryBuilder/{sqlQueryBuilder.module.d.ts → rdb.sqlQueryBuilder.module.d.ts} +1 -1
  38. package/dist/sqlQueryBuilder/{sqlQueryBuilder.module.js → rdb.sqlQueryBuilder.module.js} +9 -4
  39. package/dist/sqlQueryBuilder/rdb.sqlQueryBuilder.module.js.map +1 -0
  40. package/dist/sqlQueryBuilder/rdb.sqlQueryBuilder.service.d.ts +53 -0
  41. package/dist/sqlQueryBuilder/{sqlQueryBuilder.service.js → rdb.sqlQueryBuilder.service.js} +97 -39
  42. package/dist/sqlQueryBuilder/rdb.sqlQueryBuilder.service.js.map +1 -0
  43. package/package.json +8 -5
  44. package/dist/entityService/index.js.map +0 -1
  45. package/dist/entityService/rdb.entity.service.d.ts +0 -34
  46. package/dist/entityService/rdb.entity.service.definitions.d.ts +0 -21
  47. package/dist/entityService/rdb.entity.service.definitions.js.map +0 -1
  48. package/dist/entityService/rdb.entity.service.js +0 -304
  49. package/dist/entityService/rdb.entity.service.js.map +0 -1
  50. package/dist/module/index.d.ts +0 -2
  51. package/dist/module/index.js.map +0 -1
  52. package/dist/module/rdb.module.d.ts +0 -5
  53. package/dist/module/rdb.module.definitions.d.ts +0 -15
  54. package/dist/module/rdb.module.definitions.js.map +0 -1
  55. package/dist/module/rdb.module.js +0 -45
  56. package/dist/module/rdb.module.js.map +0 -1
  57. package/dist/repository/rdb.repository.definitions.d.ts +0 -5
  58. package/dist/repository/rdb.repository.definitions.js.map +0 -1
  59. package/dist/repository/rdb.repository.module.d.ts +0 -6
  60. package/dist/repository/rdb.repository.module.js +0 -42
  61. package/dist/repository/rdb.repository.module.js.map +0 -1
  62. package/dist/sqlQueryBuilder/sqlQueryBuilder.definitions.js +0 -3
  63. package/dist/sqlQueryBuilder/sqlQueryBuilder.definitions.js.map +0 -1
  64. package/dist/sqlQueryBuilder/sqlQueryBuilder.module.js.map +0 -1
  65. package/dist/sqlQueryBuilder/sqlQueryBuilder.service.d.ts +0 -43
  66. package/dist/sqlQueryBuilder/sqlQueryBuilder.service.js.map +0 -1
  67. /package/dist/{entityService → entity}/rdb.entity.service.definitions.js +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rdb.ormQueryBuilder.js","sourceRoot":"","sources":["../../src/ormQueryBuilder/rdb.ormQueryBuilder.ts"],"names":[],"mappings":";;;AAEA,MAAsB,mBAAmB;CAIxC;AAJD,kDAIC;AAED,MAAsB,qBAA8B,SAAQ,mBAA2B;CAEtF;AAFD,sDAEC;AAOD,MAAsB,qBAA8B,SAAQ,mBAA2B;CActF;AAdD,sDAcC;AAED,MAAsB,qBAA8B,SAAQ,mBAA2B;CAItF;AAJD,sDAIC"}
@@ -1,2 +1 @@
1
- export * from './rdb.repository.definitions';
2
- export * from './rdb.repository.module';
1
+ export * from './rdb.repository';
@@ -14,6 +14,5 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./rdb.repository.definitions"), exports);
18
- __exportStar(require("./rdb.repository.module"), exports);
17
+ __exportStar(require("./rdb.repository"), exports);
19
18
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/repository/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AACA,+DAA6C;AAC7C,0DAAwC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/repository/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,mDAAiC"}
@@ -1,7 +1,34 @@
1
- import { EntityClassOrSchema } from '@nestjs/typeorm/dist/interfaces/entity-class-or-schema.type';
2
- import { DataSource, ObjectLiteral, Repository } from 'typeorm';
3
- export declare class RDBRepository<Entity extends ObjectLiteral> extends Repository<Entity> {
4
- protected entityClass: EntityClassOrSchema;
5
- protected dataSource: DataSource;
6
- constructor(entityClass: EntityClassOrSchema, dataSource: DataSource);
1
+ import { GenericObject, GenericObjectType } from '@node-c/core';
2
+ import { OrmSelectQueryBuilder } from '../ormQueryBuilder';
3
+ export declare abstract class RDBEntityManager {
4
+ abstract getRepository<Entity extends GenericObject<unknown>>(_target: unknown): RDBRepository<Entity>;
5
+ abstract query(_query: string, _params?: unknown[]): Promise<unknown>;
6
+ abstract save<Entity extends GenericObject<unknown> = GenericObject<unknown>>(_target: unknown, _data: Partial<Entity> | Partial<Entity[]>, _options?: unknown): Promise<unknown>;
7
+ abstract transaction(_callback: (_em: RDBEntityManager) => Promise<unknown>): Promise<unknown>;
8
+ }
9
+ export type RDBEntityTarget<Entity> = string | {
10
+ name: string;
11
+ type: Entity;
12
+ } | GenericObjectType<Entity>;
13
+ export declare abstract class RDBRepository<Entity extends GenericObject<unknown>> {
14
+ manager: RDBEntityManager;
15
+ metadata: {
16
+ deleteDateColumn?: {
17
+ databaseName: string;
18
+ propertyName: string;
19
+ };
20
+ name: string;
21
+ relations?: {
22
+ joinTableName?: string;
23
+ propertyName: string;
24
+ propertyPath: string;
25
+ relationType: string;
26
+ target: string | unknown;
27
+ type: string | Function;
28
+ }[];
29
+ tableName: string;
30
+ };
31
+ target: unknown;
32
+ abstract createQueryBuilder(_entityName: string, _queryRunner?: unknown): OrmSelectQueryBuilder<Entity>;
33
+ abstract save(_data: Partial<Entity> | Partial<Entity[]>, _options?: unknown): Promise<unknown>;
7
34
  }
@@ -1,31 +1,10 @@
1
1
  "use strict";
2
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
- return c > 3 && r && Object.defineProperty(target, key, r), r;
7
- };
8
- var __metadata = (this && this.__metadata) || function (k, v) {
9
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
- };
11
- var __param = (this && this.__param) || function (paramIndex, decorator) {
12
- return function (target, key) { decorator(target, key, paramIndex); }
13
- };
14
2
  Object.defineProperty(exports, "__esModule", { value: true });
15
- exports.RDBRepository = void 0;
16
- const common_1 = require("@nestjs/common");
17
- const typeorm_1 = require("typeorm");
18
- let RDBRepository = class RDBRepository extends typeorm_1.Repository {
19
- constructor(entityClass, dataSource) {
20
- super(entityClass, dataSource.createEntityManager());
21
- this.entityClass = entityClass;
22
- this.dataSource = dataSource;
23
- }
24
- };
3
+ exports.RDBRepository = exports.RDBEntityManager = void 0;
4
+ class RDBEntityManager {
5
+ }
6
+ exports.RDBEntityManager = RDBEntityManager;
7
+ class RDBRepository {
8
+ }
25
9
  exports.RDBRepository = RDBRepository;
26
- exports.RDBRepository = RDBRepository = __decorate([
27
- (0, common_1.Injectable)(),
28
- __param(0, (0, common_1.Inject)('RDB_REPOSITORY_ENTITY_CLASS')),
29
- __metadata("design:paramtypes", [Object, typeorm_1.DataSource])
30
- ], RDBRepository);
31
10
  //# sourceMappingURL=rdb.repository.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"rdb.repository.js","sourceRoot":"","sources":["../../src/repository/rdb.repository.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAAoD;AAGpD,qCAAgE;AAGzD,IAAM,aAAa,GAAnB,MAAM,aAA4C,SAAQ,oBAAkB;IACjF,YAEY,WAAgC,EAEhC,UAAsB;QAEhC,KAAK,CAAC,WAAW,EAAE,UAAU,CAAC,mBAAmB,EAAE,CAAC,CAAC;QAJ3C,gBAAW,GAAX,WAAW,CAAqB;QAEhC,eAAU,GAAV,UAAU,CAAY;IAGlC,CAAC;CACF,CAAA;AATY,sCAAa;wBAAb,aAAa;IADzB,IAAA,mBAAU,GAAE;IAGR,WAAA,IAAA,eAAM,EAAC,6BAA6B,CAAC,CAAA;6CAGhB,oBAAU;GALvB,aAAa,CASzB"}
1
+ {"version":3,"file":"rdb.repository.js","sourceRoot":"","sources":["../../src/repository/rdb.repository.ts"],"names":[],"mappings":";;;AAIA,MAAsB,gBAAgB;CASrC;AATD,4CASC;AAID,MAAsB,aAAa;CAqBlC;AArBD,sCAqBC"}
@@ -1,3 +1,3 @@
1
- export * from './sqlQueryBuilder.definitions';
2
- export * from './sqlQueryBuilder.module';
3
- export * from './sqlQueryBuilder.service';
1
+ export * from './rdb.sqlQueryBuilder.definitions';
2
+ export * from './rdb.sqlQueryBuilder.module';
3
+ export * from './rdb.sqlQueryBuilder.service';
@@ -14,7 +14,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./sqlQueryBuilder.definitions"), exports);
18
- __exportStar(require("./sqlQueryBuilder.module"), exports);
19
- __exportStar(require("./sqlQueryBuilder.service"), exports);
17
+ __exportStar(require("./rdb.sqlQueryBuilder.definitions"), exports);
18
+ __exportStar(require("./rdb.sqlQueryBuilder.module"), exports);
19
+ __exportStar(require("./rdb.sqlQueryBuilder.service"), exports);
20
20
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sqlQueryBuilder/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,gEAA8C;AAC9C,2DAAyC;AACzC,4DAA0C"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sqlQueryBuilder/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,oEAAkD;AAClD,+DAA6C;AAC7C,gEAA8C"}
@@ -1,21 +1,19 @@
1
- import { GenericObject } from '@node-c/core';
1
+ import { GenericObject, PersistanceOrderBy } from '@node-c/core';
2
+ import { RDBEntityManager } from '../repository';
2
3
  export interface BuildQueryOptions {
4
+ currentEntityName: string;
3
5
  deletedColumnName?: string;
6
+ entityManager: RDBEntityManager;
4
7
  include?: IncludeItems;
5
- orderBy?: OrderBy[];
8
+ orderBy?: PersistanceOrderBy[];
6
9
  select?: string[];
7
- where?: {
8
- [fieldName: string]: ParsedFilter;
9
- };
10
+ where?: GenericObject<ParsedFilter>;
10
11
  withDeleted?: boolean;
12
+ withDeletedPerRelation?: GenericObject<boolean>;
11
13
  }
12
14
  export interface IncludeItems {
13
15
  [relationProperty: string]: string;
14
16
  }
15
- export interface OrderBy {
16
- field: string;
17
- direction: 'ASC' | 'DESC';
18
- }
19
17
  export interface ParsedFilter {
20
18
  params?: GenericObject<unknown>;
21
19
  query: string;
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=rdb.repository.definitions.js.map
3
+ //# sourceMappingURL=rdb.sqlQueryBuilder.definitions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rdb.sqlQueryBuilder.definitions.js","sourceRoot":"","sources":["../../src/sqlQueryBuilder/rdb.sqlQueryBuilder.definitions.ts"],"names":[],"mappings":""}
@@ -1,5 +1,5 @@
1
1
  import { DynamicModule } from '@nestjs/common';
2
- import { SQLQueryBuilderModuleOptions } from './sqlQueryBuilder.definitions';
2
+ import { SQLQueryBuilderModuleOptions } from './rdb.sqlQueryBuilder.definitions';
3
3
  export declare class SQLQueryBuilderModule {
4
4
  static register(options: SQLQueryBuilderModuleOptions): DynamicModule;
5
5
  }
@@ -9,7 +9,8 @@ var SQLQueryBuilderModule_1;
9
9
  Object.defineProperty(exports, "__esModule", { value: true });
10
10
  exports.SQLQueryBuilderModule = void 0;
11
11
  const common_1 = require("@nestjs/common");
12
- const sqlQueryBuilder_service_1 = require("./sqlQueryBuilder.service");
12
+ const core_1 = require("@node-c/core");
13
+ const rdb_sqlQueryBuilder_service_1 = require("./rdb.sqlQueryBuilder.service");
13
14
  const definitions_1 = require("../common/definitions");
14
15
  let SQLQueryBuilderModule = SQLQueryBuilderModule_1 = class SQLQueryBuilderModule {
15
16
  static register(options) {
@@ -23,9 +24,13 @@ let SQLQueryBuilderModule = SQLQueryBuilderModule_1 = class SQLQueryBuilderModul
23
24
  provide: definitions_1.Constants.SQL_BUILDER_DB_CONFIG_PATH,
24
25
  useValue: `config.persistance.${persistanceModuleName}`
25
26
  },
26
- { provide: serviceToken, useClass: sqlQueryBuilder_service_1.SQLQueryBuilderService }
27
+ {
28
+ provide: core_1.Constants.PERSISTANCE_MODULE_NAME,
29
+ useValue: persistanceModuleName
30
+ },
31
+ { provide: serviceToken, useClass: rdb_sqlQueryBuilder_service_1.SQLQueryBuilderService }
27
32
  ],
28
- exports: [{ provide: serviceToken, useClass: sqlQueryBuilder_service_1.SQLQueryBuilderService }]
33
+ exports: [{ provide: serviceToken, useClass: rdb_sqlQueryBuilder_service_1.SQLQueryBuilderService }]
29
34
  };
30
35
  }
31
36
  };
@@ -33,4 +38,4 @@ exports.SQLQueryBuilderModule = SQLQueryBuilderModule;
33
38
  exports.SQLQueryBuilderModule = SQLQueryBuilderModule = SQLQueryBuilderModule_1 = __decorate([
34
39
  (0, common_1.Module)({})
35
40
  ], SQLQueryBuilderModule);
36
- //# sourceMappingURL=sqlQueryBuilder.module.js.map
41
+ //# sourceMappingURL=rdb.sqlQueryBuilder.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rdb.sqlQueryBuilder.module.js","sourceRoot":"","sources":["../../src/sqlQueryBuilder/rdb.sqlQueryBuilder.module.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,2CAAuD;AAEvD,uCAA0D;AAG1D,+EAAuE;AAEvE,uDAAkD;AAG3C,IAAM,qBAAqB,6BAA3B,MAAM,qBAAqB;IAChC,MAAM,CAAC,QAAQ,CAAC,OAAqC;QACnD,MAAM,EAAE,qBAAqB,EAAE,GAAG,OAAO,CAAC;QAC1C,MAAM,YAAY,GAAG,GAAG,qBAAqB,GAAG,uBAAS,CAAC,gCAAgC,EAAE,CAAC;QAC7F,OAAO;YACL,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,uBAAqB;YAC7B,SAAS,EAAE;gBACT;oBACE,OAAO,EAAE,uBAAS,CAAC,0BAA0B;oBAC7C,QAAQ,EAAE,sBAAsB,qBAAqB,EAAE;iBACxD;gBACD;oBACE,OAAO,EAAE,gBAAa,CAAC,uBAAuB;oBAC9C,QAAQ,EAAE,qBAAqB;iBAChC;gBACD,EAAE,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,oDAAsB,EAAE;aAC5D;YACD,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,oDAAsB,EAAE,CAAC;SACvE,CAAC;IACJ,CAAC;CACF,CAAA;AArBY,sDAAqB;gCAArB,qBAAqB;IADjC,IAAA,eAAM,EAAC,EAAE,CAAC;GACE,qBAAqB,CAqBjC"}
@@ -0,0 +1,53 @@
1
+ import { ConfigProviderService, GenericObject, PersistanceOrderBy, PersistanceOrderByDirection, PersistanceSelectOperator, RDBType } from '@node-c/core';
2
+ import { BuildQueryOptions, IncludeItems, ParsedFilter } from './rdb.sqlQueryBuilder.definitions';
3
+ import { OrmBaseQueryBuilder, OrmSelectQueryBuilder } from '../ormQueryBuilder';
4
+ import { RDBEntityManager } from '../repository';
5
+ export declare class SQLQueryBuilderService {
6
+ configProvider: ConfigProviderService;
7
+ dbConfigPath: string;
8
+ persistanceModuleName: string;
9
+ allowedStringOperators: string[];
10
+ columnQuotesSymbol: string;
11
+ dbType: RDBType | string;
12
+ iLikeSupported: boolean;
13
+ returningSupported: boolean;
14
+ constructor(configProvider: ConfigProviderService, dbConfigPath: string, persistanceModuleName: string);
15
+ buildQuery<Entity>(ormQueryBuilder: OrmBaseQueryBuilder<Entity> | OrmSelectQueryBuilder<Entity>, options: BuildQueryOptions): void;
16
+ getDeletedAtColumnForEntity(options: {
17
+ currentEntityName: string;
18
+ entityManager: RDBEntityManager;
19
+ entityPath: string;
20
+ }): string | undefined;
21
+ protected getValueForFilter(entityName: string, _fieldName: string, fieldAlias: string, fieldValue: unknown, isNot: boolean, operator?: PersistanceSelectOperator): ParsedFilter;
22
+ protected parseArrayOfFilters(filtersArray: unknown[], fieldAlias: string): {
23
+ hasValues: boolean;
24
+ isSimple: boolean;
25
+ paramsForQuery: GenericObject;
26
+ queryTemplateParamNames: string;
27
+ };
28
+ parseFilters(entityName: string, filters: GenericObject, options?: {
29
+ fieldAliases?: {
30
+ [fieldName: string]: string;
31
+ };
32
+ isTopLevel?: boolean;
33
+ operator?: PersistanceSelectOperator;
34
+ parameterNamesToFieldAliasesMap?: {
35
+ [fieldName: string]: string;
36
+ };
37
+ }): {
38
+ where: {
39
+ [fieldName: string]: ParsedFilter;
40
+ };
41
+ include: IncludeItems;
42
+ };
43
+ protected parseInnerFilters(entityName: string, filtersObject: GenericObject, fieldName: string, fieldAlias: string, operator?: PersistanceSelectOperator): {
44
+ parsedFilter: ParsedFilter;
45
+ include: IncludeItems;
46
+ };
47
+ parseRelations(entityName: string, include: string[], currentInclude?: IncludeItems): IncludeItems;
48
+ parseOrderBy(entityName: string, orderByData: GenericObject<PersistanceOrderByDirection>): {
49
+ include: IncludeItems;
50
+ orderBy: PersistanceOrderBy[];
51
+ };
52
+ parseSelect(selectFields: string[], include?: IncludeItems): string[];
53
+ }
@@ -11,52 +11,73 @@ var __metadata = (this && this.__metadata) || function (k, v) {
11
11
  var __param = (this && this.__param) || function (paramIndex, decorator) {
12
12
  return function (target, key) { decorator(target, key, paramIndex); }
13
13
  };
14
+ var __importDefault = (this && this.__importDefault) || function (mod) {
15
+ return (mod && mod.__esModule) ? mod : { "default": mod };
16
+ };
14
17
  Object.defineProperty(exports, "__esModule", { value: true });
15
18
  exports.SQLQueryBuilderService = void 0;
16
19
  const common_1 = require("@nestjs/common");
17
20
  const core_1 = require("@node-c/core");
18
- const general_tools_1 = require("@ramster/general-tools");
19
- const typeorm_1 = require("typeorm");
21
+ const lodash_1 = __importDefault(require("lodash"));
20
22
  const definitions_1 = require("../common/definitions");
21
23
  let SQLQueryBuilderService = class SQLQueryBuilderService {
22
- constructor(configProvider, dbConfigPath) {
24
+ constructor(configProvider, dbConfigPath, persistanceModuleName) {
23
25
  this.configProvider = configProvider;
24
26
  this.dbConfigPath = dbConfigPath;
27
+ this.persistanceModuleName = persistanceModuleName;
25
28
  this.allowedStringOperators = Object.values(core_1.PersistanceSelectOperator);
26
- const { type } = (0, general_tools_1.getNested)(configProvider, dbConfigPath);
29
+ const { type } = lodash_1.default.get(configProvider, dbConfigPath);
27
30
  this.dbType = type;
28
- if (type === core_1.RDBType.MySQL) {
31
+ if (type === core_1.RDBType.Aurora || type === core_1.RDBType.ClickHouse || type === core_1.RDBType.MySQL) {
29
32
  this.columnQuotesSymbol = '`';
30
33
  this.iLikeSupported = false;
34
+ this.returningSupported = false;
31
35
  }
32
36
  else if (type === core_1.RDBType.PG) {
33
37
  this.columnQuotesSymbol = '"';
34
38
  this.iLikeSupported = true;
39
+ this.returningSupported = true;
35
40
  }
36
41
  }
37
- buildQuery(queryBuilder, options) {
38
- const { where, include, orderBy, select, withDeleted = false } = options;
42
+ buildQuery(ormQueryBuilder, options) {
43
+ const { currentEntityName, deletedColumnName, entityManager, where: optWhere, include, orderBy, select, withDeleted, withDeletedPerRelation } = options;
39
44
  const cqs = this.columnQuotesSymbol;
40
- const deletedColumnName = options.deletedColumnName || 'deletedAt';
41
- if (queryBuilder instanceof typeorm_1.SelectQueryBuilder) {
45
+ const where = Object.assign({}, (optWhere || {}));
46
+ if ('withDeleted' in ormQueryBuilder) {
47
+ const oqb = ormQueryBuilder;
42
48
  if (withDeleted) {
43
- queryBuilder.withDeleted();
49
+ oqb.withDeleted();
44
50
  }
45
51
  if (include) {
46
52
  for (const relationProperty in include) {
47
- if (withDeleted) {
48
- queryBuilder.leftJoinAndSelect(relationProperty, include[relationProperty]);
53
+ if (lodash_1.default.get(withDeletedPerRelation || {}, relationProperty)) {
54
+ oqb.leftJoinAndSelect(relationProperty, include[relationProperty]);
49
55
  }
50
56
  else {
51
- queryBuilder.leftJoinAndSelect(relationProperty, include[relationProperty], `${cqs}${include[relationProperty]}${cqs}.${cqs}${deletedColumnName}${cqs} IS NULL`);
57
+ const relationDeletedColumnName = this.getDeletedAtColumnForEntity({
58
+ currentEntityName,
59
+ entityManager,
60
+ entityPath: include[relationProperty]
61
+ });
62
+ if (relationDeletedColumnName) {
63
+ oqb.leftJoinAndSelect(relationProperty, include[relationProperty], `${cqs}${include[relationProperty]}${cqs}.${cqs}${relationDeletedColumnName}${cqs} IS NULL`);
64
+ }
65
+ else {
66
+ oqb.leftJoinAndSelect(relationProperty, include[relationProperty]);
67
+ }
52
68
  }
53
69
  }
54
70
  }
55
71
  if (select && select.length) {
56
- queryBuilder.select(this.parseSelect(select, include));
72
+ oqb.select(this.parseSelect(select, include));
57
73
  }
58
74
  }
59
- if (where) {
75
+ else if (withDeleted === false && deletedColumnName) {
76
+ where[deletedColumnName] = {
77
+ query: `${cqs}${deletedColumnName}${cqs} IS NULL`
78
+ };
79
+ }
80
+ if (Object.keys(where).length) {
60
81
  let isFirst = true;
61
82
  for (const fieldName in where) {
62
83
  const whereItem = where[fieldName];
@@ -70,10 +91,11 @@ let SQLQueryBuilderService = class SQLQueryBuilderService {
70
91
  else {
71
92
  methodName = fieldName === core_1.PersistanceSelectOperator.Or ? 'orWhere' : 'andWhere';
72
93
  }
73
- queryBuilder[methodName](whereItem.query, whereItem.params);
94
+ ormQueryBuilder[methodName](whereItem.query, whereItem.params);
74
95
  }
75
96
  }
76
- if (orderBy && queryBuilder instanceof typeorm_1.SelectQueryBuilder) {
97
+ if (orderBy && 'orderBy' in ormQueryBuilder) {
98
+ const oqb = ormQueryBuilder;
77
99
  let isFirst = true;
78
100
  for (const item of orderBy) {
79
101
  let methodName = 'addOrderBy';
@@ -81,18 +103,40 @@ let SQLQueryBuilderService = class SQLQueryBuilderService {
81
103
  methodName = 'orderBy';
82
104
  isFirst = false;
83
105
  }
84
- queryBuilder[methodName](item.field, item.direction);
106
+ oqb[methodName](item.field, item.direction);
85
107
  }
86
108
  }
87
109
  }
88
- getValueForFilter(entityName, fieldName, fieldAlias, fieldValue, isNot, operator) {
110
+ getDeletedAtColumnForEntity(options) {
111
+ const { currentEntityName, entityManager } = options;
112
+ const entityPath = options.entityPath.split('.');
113
+ let currentEntity = entityManager.getRepository(currentEntityName);
114
+ let deletedAtColumnName;
115
+ for (const i in entityPath) {
116
+ const { relations } = currentEntity.metadata;
117
+ if (!relations) {
118
+ break;
119
+ }
120
+ const entityPathItem = entityPath[i];
121
+ const relationPathItem = relations.find(relationItem => relationItem.propertyName === entityPathItem);
122
+ if (!relationPathItem) {
123
+ break;
124
+ }
125
+ currentEntity = entityManager.getRepository(relationPathItem.type);
126
+ }
127
+ if (currentEntity.target !== currentEntityName && currentEntity.metadata.deleteDateColumn) {
128
+ deletedAtColumnName = currentEntity.metadata.deleteDateColumn.databaseName;
129
+ }
130
+ return deletedAtColumnName;
131
+ }
132
+ getValueForFilter(entityName, _fieldName, fieldAlias, fieldValue, isNot, operator) {
89
133
  const { columnQuotesSymbol: cqs, dbType } = this;
90
134
  const escapedFieldAlias = fieldAlias.replace(/\$/, '__ds__');
91
- const fieldString = `${cqs}${entityName}${cqs}.${cqs}${fieldName}${cqs}`;
135
+ const fieldString = `${cqs}${entityName}${cqs}.${cqs}${fieldAlias}${cqs}`;
92
136
  let parsedInnerValue = fieldValue instanceof Date ? fieldValue.valueOf() : fieldValue;
93
137
  if (operator === core_1.PersistanceSelectOperator.Contains) {
94
138
  let query = '';
95
- if (dbType === core_1.RDBType.MySQL) {
139
+ if (dbType === core_1.RDBType.Aurora || dbType === core_1.RDBType.ClickHouse || dbType === core_1.RDBType.MySQL) {
96
140
  query = `JSON_CONTAINS(${fieldString}, :${escapedFieldAlias})`;
97
141
  parsedInnerValue = `"${parsedInnerValue}"`;
98
142
  }
@@ -187,6 +231,7 @@ let SQLQueryBuilderService = class SQLQueryBuilderService {
187
231
  const cqs = this.columnQuotesSymbol;
188
232
  const { isTopLevel, operator } = options;
189
233
  const fieldAliases = options.fieldAliases || {};
234
+ const parameterNamesToFieldAliasesMap = options.parameterNamesToFieldAliasesMap || {};
190
235
  const where = {};
191
236
  let include = {};
192
237
  for (const fieldName in filters) {
@@ -194,8 +239,8 @@ let SQLQueryBuilderService = class SQLQueryBuilderService {
194
239
  if (typeof fieldValue === 'undefined') {
195
240
  continue;
196
241
  }
197
- const fieldAlias = fieldAliases[fieldName] || fieldName;
198
242
  const isNot = operator === core_1.PersistanceSelectOperator.Not;
243
+ let fieldAlias = fieldAliases[fieldName];
199
244
  if (fieldName.match(/\./)) {
200
245
  const fieldData = fieldName.split('.');
201
246
  const finalItemIndex = fieldData.length - 1;
@@ -204,12 +249,16 @@ let SQLQueryBuilderService = class SQLQueryBuilderService {
204
249
  let previousEntityAlias = `${entityName}`;
205
250
  for (let i = 0; i < finalItemIndex; i++) {
206
251
  const currentEntityName = fieldData[i];
207
- entityAlias += `_${currentEntityName}`;
252
+ entityAlias += `__${currentEntityName}`;
208
253
  include[`${previousEntityAlias}.${currentEntityName}`] = entityAlias;
209
254
  previousEntityAlias = `${entityAlias}`;
210
255
  }
256
+ if (!fieldAlias) {
257
+ fieldAlias = actualFieldName;
258
+ }
259
+ const actualFieldAlias = parameterNamesToFieldAliasesMap[fieldAlias] || fieldAlias;
211
260
  const itemData = this.parseFilters(entityAlias, { [actualFieldName]: fieldValue }, {
212
- fieldAliases: { [actualFieldName]: fieldAlias },
261
+ fieldAliases: { [actualFieldName]: actualFieldAlias },
213
262
  isTopLevel: false,
214
263
  operator
215
264
  });
@@ -217,14 +266,18 @@ let SQLQueryBuilderService = class SQLQueryBuilderService {
217
266
  include = Object.assign(Object.assign({}, include), itemData.include);
218
267
  continue;
219
268
  }
269
+ if (!fieldAlias) {
270
+ fieldAlias = fieldName;
271
+ }
272
+ const actualFieldAlias = parameterNamesToFieldAliasesMap[fieldAlias] || fieldAlias;
220
273
  if (fieldValue === null) {
221
274
  where[fieldName] = {
222
- query: `${cqs}${entityName}${cqs}.${cqs}${fieldName}${cqs} is${isNot ? ' not ' : ' '}null`
275
+ query: `${cqs}${entityName}${cqs}.${cqs}${actualFieldAlias}${cqs} is${isNot ? ' not ' : ' '}null`
223
276
  };
224
277
  continue;
225
278
  }
226
279
  if (fieldValue instanceof Array) {
227
- const { hasValues, isSimple, paramsForQuery, queryTemplateParamNames } = this.parseArrayOfFilters(fieldValue, fieldAlias);
280
+ const { hasValues, isSimple, paramsForQuery, queryTemplateParamNames } = this.parseArrayOfFilters(fieldValue, actualFieldAlias);
228
281
  if (!hasValues) {
229
282
  continue;
230
283
  }
@@ -232,14 +285,14 @@ let SQLQueryBuilderService = class SQLQueryBuilderService {
232
285
  if (operator === core_1.PersistanceSelectOperator.Between) {
233
286
  where[fieldName] = {
234
287
  params: paramsForQuery,
235
- query: `${cqs}${entityName}${cqs}.${cqs}${fieldName}${cqs}${isNot ? ' not ' : ' '}` +
236
- `between :${fieldAlias}_0 and :${fieldAlias}_1`
288
+ query: `${cqs}${entityName}${cqs}.${cqs}${actualFieldAlias}${cqs}${isNot ? ' not ' : ' '}` +
289
+ `between :${actualFieldAlias}_0 and :${actualFieldAlias}_1`
237
290
  };
238
291
  continue;
239
292
  }
240
293
  where[fieldName] = {
241
294
  params: paramsForQuery,
242
- query: `${cqs}${entityName}${cqs}.${cqs}${fieldName}${cqs}${isNot ? ' not ' : ' '}` +
295
+ query: `${cqs}${entityName}${cqs}.${cqs}${actualFieldAlias}${cqs}${isNot ? ' not ' : ' '}` +
243
296
  `in (${queryTemplateParamNames.replace(/,\s$/, '')})`
244
297
  };
245
298
  continue;
@@ -247,7 +300,7 @@ let SQLQueryBuilderService = class SQLQueryBuilderService {
247
300
  if (isTopLevel && fieldName === core_1.PersistanceSelectOperator.Or) {
248
301
  const finalWhereValue = { params: {}, query: '' };
249
302
  fieldValue.forEach((orFieldValue, orFieldIndex) => {
250
- const itemData = this.parseInnerFilters(entityName, orFieldValue, fieldName, `${fieldAlias}_${orFieldIndex}_f`, operator);
303
+ const itemData = this.parseInnerFilters(entityName, orFieldValue, fieldName, `${actualFieldAlias}_${orFieldIndex}_f`, operator);
251
304
  finalWhereValue.params = Object.assign(Object.assign({}, finalWhereValue.params), (itemData.parsedFilter.params || {}));
252
305
  finalWhereValue.query += `${finalWhereValue.query.length ? ' or ' : '('}${itemData.parsedFilter.query}`;
253
306
  include = Object.assign(Object.assign({}, include), itemData.include);
@@ -256,7 +309,7 @@ let SQLQueryBuilderService = class SQLQueryBuilderService {
256
309
  where[fieldName] = finalWhereValue;
257
310
  }
258
311
  else {
259
- const itemData = this.parseInnerFilters(entityName, fieldValue, fieldName, fieldAlias, operator);
312
+ const itemData = this.parseInnerFilters(entityName, fieldValue, fieldName, actualFieldAlias, operator);
260
313
  if (itemData.parsedFilter.query === '()') {
261
314
  continue;
262
315
  }
@@ -266,12 +319,12 @@ let SQLQueryBuilderService = class SQLQueryBuilderService {
266
319
  continue;
267
320
  }
268
321
  if (typeof fieldValue === 'object' && !(fieldValue instanceof Date)) {
269
- const itemData = this.parseInnerFilters(entityName, fieldValue, fieldName, fieldAlias, operator);
322
+ const itemData = this.parseInnerFilters(entityName, fieldValue, fieldName, actualFieldAlias, operator);
270
323
  where[fieldName] = itemData.parsedFilter;
271
324
  include = Object.assign(Object.assign({}, include), itemData.include);
272
325
  continue;
273
326
  }
274
- where[fieldName] = this.getValueForFilter(entityName, fieldName, fieldAlias, fieldValue, isNot, operator);
327
+ where[fieldName] = this.getValueForFilter(entityName, fieldName, actualFieldAlias, fieldValue, isNot, operator);
275
328
  }
276
329
  return { where, include };
277
330
  }
@@ -287,11 +340,13 @@ let SQLQueryBuilderService = class SQLQueryBuilderService {
287
340
  op = key;
288
341
  }
289
342
  const actualFieldName = fieldName === core_1.PersistanceSelectOperator.Or ? key : fieldName;
343
+ const fieldParameterName = `${fieldAlias}_${parsedValueCount}`;
290
344
  const innerValue = filtersObject[key];
291
345
  const itemData = this.parseFilters(entityName, { [actualFieldName]: innerValue }, {
292
- fieldAliases: { [actualFieldName]: `${fieldAlias}_${parsedValueCount}` },
346
+ fieldAliases: { [actualFieldName]: fieldParameterName },
293
347
  isTopLevel: false,
294
- operator: op
348
+ operator: op,
349
+ parameterNamesToFieldAliasesMap: { [fieldParameterName]: fieldAlias }
295
350
  });
296
351
  const fieldWhereData = itemData.where[actualFieldName];
297
352
  if (!fieldWhereData) {
@@ -314,7 +369,7 @@ let SQLQueryBuilderService = class SQLQueryBuilderService {
314
369
  let entityAlias = `${entityName}`;
315
370
  let previousEntityAlias = `${entityName}`;
316
371
  includeData.forEach(currentEntityName => {
317
- entityAlias += `_${currentEntityName}`;
372
+ entityAlias += `__${currentEntityName}`;
318
373
  resultInclude[`${previousEntityAlias}.${currentEntityName}`] = entityAlias;
319
374
  previousEntityAlias = `${entityAlias}`;
320
375
  });
@@ -325,7 +380,9 @@ let SQLQueryBuilderService = class SQLQueryBuilderService {
325
380
  const orderBy = [];
326
381
  let include = {};
327
382
  for (const fieldName in orderByData) {
328
- const direction = orderByData[fieldName].toLowerCase() === 'desc' ? 'DESC' : 'ASC';
383
+ const direction = orderByData[fieldName].toLowerCase() === 'desc'
384
+ ? core_1.PersistanceOrderByDirection.Desc
385
+ : core_1.PersistanceOrderByDirection.Asc;
329
386
  const item = { field: `${entityName}.${fieldName}`, direction };
330
387
  if (fieldName.match(/\./)) {
331
388
  const fieldData = fieldName.split('.');
@@ -371,6 +428,7 @@ exports.SQLQueryBuilderService = SQLQueryBuilderService;
371
428
  exports.SQLQueryBuilderService = SQLQueryBuilderService = __decorate([
372
429
  (0, common_1.Injectable)(),
373
430
  __param(1, (0, common_1.Inject)(definitions_1.Constants.SQL_BUILDER_DB_CONFIG_PATH)),
374
- __metadata("design:paramtypes", [core_1.ConfigProviderService, String])
431
+ __param(2, (0, common_1.Inject)(core_1.Constants.PERSISTANCE_MODULE_NAME)),
432
+ __metadata("design:paramtypes", [core_1.ConfigProviderService, String, String])
375
433
  ], SQLQueryBuilderService);
376
- //# sourceMappingURL=sqlQueryBuilder.service.js.map
434
+ //# sourceMappingURL=rdb.sqlQueryBuilder.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rdb.sqlQueryBuilder.service.js","sourceRoot":"","sources":["../../src/sqlQueryBuilder/rdb.sqlQueryBuilder.service.ts"],"names":[],"mappings":"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"}