@node-c/persistance-rdb 1.0.0-alpha3 → 1.0.0-alpha31

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 +11 -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 +41 -0
  12. package/dist/entity/rdb.entity.service.definitions.d.ts +28 -0
  13. package/dist/entity/rdb.entity.service.definitions.js.map +1 -0
  14. package/dist/entity/rdb.entity.service.js +448 -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 +22 -0
  29. package/dist/repository/rdb.repository.js +10 -0
  30. package/dist/repository/rdb.repository.js.map +1 -0
  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} +2 -6
  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 +47 -0
  41. package/dist/sqlQueryBuilder/{sqlQueryBuilder.service.js → rdb.sqlQueryBuilder.service.js} +71 -44
  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 -38
  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
package/dist/index.js CHANGED
@@ -15,8 +15,8 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./common/definitions"), exports);
18
- __exportStar(require("./entityService"), exports);
19
- __exportStar(require("./module"), exports);
18
+ __exportStar(require("./entity"), exports);
19
+ __exportStar(require("./ormQueryBuilder"), exports);
20
20
  __exportStar(require("./repository"), exports);
21
21
  __exportStar(require("./sqlQueryBuilder"), exports);
22
22
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,uDAAqC;AACrC,kDAAgC;AAChC,2CAAyB;AACzB,+CAA6B;AAC7B,oDAAkC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,uDAAqC;AACrC,2CAAyB;AACzB,oDAAkC;AAClC,+CAA6B;AAC7B,oDAAkC"}
@@ -0,0 +1 @@
1
+ export * from './rdb.ormQueryBuilder';
@@ -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.module.definitions"), exports);
18
- __exportStar(require("./rdb.module"), exports);
17
+ __exportStar(require("./rdb.ormQueryBuilder"), exports);
19
18
  //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ormQueryBuilder/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,wDAAsC"}
@@ -0,0 +1,38 @@
1
+ import { PersistanceOrderByDirection } from '@node-c/core';
2
+ export declare abstract class OrmBaseQueryBuilder<Entity> {
3
+ abstract andWhere(..._args: unknown[]): OrmBaseQueryBuilder<Entity>;
4
+ abstract orWhere(..._args: unknown[]): OrmBaseQueryBuilder<Entity>;
5
+ abstract where(..._args: unknown[]): OrmBaseQueryBuilder<Entity>;
6
+ }
7
+ export declare abstract class OrmDeleteQueryBuilder<Entity> extends OrmBaseQueryBuilder<Entity> {
8
+ abstract execute(): Promise<OrmDeleteQueryBuilderDeleteResult>;
9
+ }
10
+ export interface OrmDeleteQueryBuilderDeleteResult {
11
+ affected?: number | null;
12
+ raw: unknown;
13
+ }
14
+ export declare abstract class OrmSelectQueryBuilder<Entity> extends OrmBaseQueryBuilder<Entity> {
15
+ abstract addOrderBy(_field: string, _direction: PersistanceOrderByDirection): OrmSelectQueryBuilder<Entity>;
16
+ abstract delete(): OrmDeleteQueryBuilder<Entity>;
17
+ abstract getCount(): Promise<number>;
18
+ abstract getMany(): Promise<Entity[]>;
19
+ abstract getOne(): Promise<Entity | null>;
20
+ abstract leftJoinAndSelect(..._args: unknown[]): OrmSelectQueryBuilder<Entity>;
21
+ abstract orderBy(_field: string, _direction: PersistanceOrderByDirection): OrmSelectQueryBuilder<Entity>;
22
+ abstract select(_selection: string[]): OrmSelectQueryBuilder<Entity>;
23
+ abstract skip(_skipCount: number): OrmSelectQueryBuilder<Entity>;
24
+ abstract softDelete(): OrmDeleteQueryBuilder<Entity>;
25
+ abstract take(_takeCount: number): OrmSelectQueryBuilder<Entity>;
26
+ abstract update(): OrmUpdateQueryBuilder<Entity>;
27
+ abstract withDeleted(): OrmSelectQueryBuilder<Entity>;
28
+ }
29
+ export declare abstract class OrmUpdateQueryBuilder<Entity> extends OrmBaseQueryBuilder<Entity> {
30
+ abstract execute(): Promise<OrmUpdateQueryBuilderUpdateResult>;
31
+ abstract returning(_selection: string | string[]): OrmUpdateQueryBuilder<Entity>;
32
+ abstract set(..._args: unknown[]): OrmUpdateQueryBuilder<Entity>;
33
+ }
34
+ export interface OrmUpdateQueryBuilderUpdateResult {
35
+ affected?: number;
36
+ generatedMaps?: object[];
37
+ raw: unknown;
38
+ }
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OrmUpdateQueryBuilder = exports.OrmSelectQueryBuilder = exports.OrmDeleteQueryBuilder = exports.OrmBaseQueryBuilder = void 0;
4
+ class OrmBaseQueryBuilder {
5
+ }
6
+ exports.OrmBaseQueryBuilder = OrmBaseQueryBuilder;
7
+ class OrmDeleteQueryBuilder extends OrmBaseQueryBuilder {
8
+ }
9
+ exports.OrmDeleteQueryBuilder = OrmDeleteQueryBuilder;
10
+ class OrmSelectQueryBuilder extends OrmBaseQueryBuilder {
11
+ }
12
+ exports.OrmSelectQueryBuilder = OrmSelectQueryBuilder;
13
+ class OrmUpdateQueryBuilder extends OrmBaseQueryBuilder {
14
+ }
15
+ exports.OrmUpdateQueryBuilder = OrmUpdateQueryBuilder;
16
+ //# sourceMappingURL=rdb.ormQueryBuilder.js.map
@@ -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":";;;;;;;;;;;;;;;;AAAA,+DAA6C;AAC7C,0DAAwC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/repository/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,mDAAiC"}
@@ -0,0 +1,22 @@
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
+ name: string;
17
+ tableName: string;
18
+ };
19
+ target: unknown;
20
+ abstract createQueryBuilder(_entityName: string, _queryRunner?: unknown): OrmSelectQueryBuilder<Entity>;
21
+ abstract save(_data: Partial<Entity> | Partial<Entity[]>, _options?: unknown): Promise<unknown>;
22
+ }
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RDBRepository = exports.RDBEntityManager = void 0;
4
+ class RDBEntityManager {
5
+ }
6
+ exports.RDBEntityManager = RDBEntityManager;
7
+ class RDBRepository {
8
+ }
9
+ exports.RDBRepository = RDBRepository;
10
+ //# sourceMappingURL=rdb.repository.js.map
@@ -0,0 +1 @@
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;CAUlC;AAVD,sCAUC"}
@@ -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,8 +1,8 @@
1
- import { GenericObject } from '@node-c/core';
1
+ import { GenericObject, PersistanceOrderBy } from '@node-c/core';
2
2
  export interface BuildQueryOptions {
3
3
  deletedColumnName?: string;
4
4
  include?: IncludeItems;
5
- orderBy?: OrderBy[];
5
+ orderBy?: PersistanceOrderBy[];
6
6
  select?: string[];
7
7
  where?: {
8
8
  [fieldName: string]: ParsedFilter;
@@ -12,10 +12,6 @@ export interface BuildQueryOptions {
12
12
  export interface IncludeItems {
13
13
  [relationProperty: string]: string;
14
14
  }
15
- export interface OrderBy {
16
- field: string;
17
- direction: 'ASC' | 'DESC';
18
- }
19
15
  export interface ParsedFilter {
20
16
  params?: GenericObject<unknown>;
21
17
  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,47 @@
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
+ export declare class SQLQueryBuilderService {
5
+ configProvider: ConfigProviderService;
6
+ dbConfigPath: string;
7
+ persistanceModuleName: string;
8
+ allowedStringOperators: string[];
9
+ columnQuotesSymbol: string;
10
+ dbType: RDBType | string;
11
+ iLikeSupported: boolean;
12
+ returningSupported: boolean;
13
+ constructor(configProvider: ConfigProviderService, dbConfigPath: string, persistanceModuleName: string);
14
+ buildQuery<Entity>(ormQueryBuilder: OrmBaseQueryBuilder<Entity> | OrmSelectQueryBuilder<Entity>, options: BuildQueryOptions): void;
15
+ protected getValueForFilter(entityName: string, _fieldName: string, fieldAlias: string, fieldValue: unknown, isNot: boolean, operator?: PersistanceSelectOperator): ParsedFilter;
16
+ protected parseArrayOfFilters(filtersArray: unknown[], fieldAlias: string): {
17
+ hasValues: boolean;
18
+ isSimple: boolean;
19
+ paramsForQuery: GenericObject;
20
+ queryTemplateParamNames: string;
21
+ };
22
+ parseFilters(entityName: string, filters: GenericObject, options?: {
23
+ fieldAliases?: {
24
+ [fieldName: string]: string;
25
+ };
26
+ isTopLevel?: boolean;
27
+ operator?: PersistanceSelectOperator;
28
+ parameterNamesToFieldAliasesMap?: {
29
+ [fieldName: string]: string;
30
+ };
31
+ }): {
32
+ where: {
33
+ [fieldName: string]: ParsedFilter;
34
+ };
35
+ include: IncludeItems;
36
+ };
37
+ protected parseInnerFilters(entityName: string, filtersObject: GenericObject, fieldName: string, fieldAlias: string, operator?: PersistanceSelectOperator): {
38
+ parsedFilter: ParsedFilter;
39
+ include: IncludeItems;
40
+ };
41
+ parseRelations(entityName: string, include: string[], currentInclude?: IncludeItems): IncludeItems;
42
+ parseOrderBy(entityName: string, orderByData: GenericObject<PersistanceOrderByDirection>): {
43
+ include: IncludeItems;
44
+ orderBy: PersistanceOrderBy[];
45
+ };
46
+ parseSelect(selectFields: string[], include?: IncludeItems): string[];
47
+ }
@@ -11,52 +11,64 @@ 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 { where: optWhere, include, orderBy, select, withDeleted } = options;
39
44
  const cqs = this.columnQuotesSymbol;
40
45
  const deletedColumnName = options.deletedColumnName || 'deletedAt';
41
- if (queryBuilder instanceof typeorm_1.SelectQueryBuilder) {
46
+ const where = Object.assign({}, (optWhere || {}));
47
+ if ('withDeleted' in ormQueryBuilder) {
48
+ const oqb = ormQueryBuilder;
42
49
  if (withDeleted) {
43
- queryBuilder.withDeleted();
50
+ oqb.withDeleted();
44
51
  }
45
52
  if (include) {
46
53
  for (const relationProperty in include) {
47
54
  if (withDeleted) {
48
- queryBuilder.leftJoinAndSelect(relationProperty, include[relationProperty]);
55
+ oqb.leftJoinAndSelect(relationProperty, include[relationProperty]);
49
56
  }
50
57
  else {
51
- queryBuilder.leftJoinAndSelect(relationProperty, include[relationProperty], `${cqs}${include[relationProperty]}${cqs}.${cqs}${deletedColumnName}${cqs} IS NULL`);
58
+ oqb.leftJoinAndSelect(relationProperty, include[relationProperty], `${cqs}${include[relationProperty]}${cqs}.${cqs}${deletedColumnName}${cqs} IS NULL`);
52
59
  }
53
60
  }
54
61
  }
55
62
  if (select && select.length) {
56
- queryBuilder.select(this.parseSelect(select, include));
63
+ oqb.select(this.parseSelect(select, include));
57
64
  }
58
65
  }
59
- if (where) {
66
+ else if (withDeleted === false) {
67
+ where[deletedColumnName] = {
68
+ query: `${cqs}${deletedColumnName}${cqs} IS NULL`
69
+ };
70
+ }
71
+ if (Object.keys(where).length) {
60
72
  let isFirst = true;
61
73
  for (const fieldName in where) {
62
74
  const whereItem = where[fieldName];
@@ -70,10 +82,11 @@ let SQLQueryBuilderService = class SQLQueryBuilderService {
70
82
  else {
71
83
  methodName = fieldName === core_1.PersistanceSelectOperator.Or ? 'orWhere' : 'andWhere';
72
84
  }
73
- queryBuilder[methodName](whereItem.query, whereItem.params);
85
+ ormQueryBuilder[methodName](whereItem.query, whereItem.params);
74
86
  }
75
87
  }
76
- if (orderBy && queryBuilder instanceof typeorm_1.SelectQueryBuilder) {
88
+ if (orderBy && 'orderBy' in ormQueryBuilder) {
89
+ const oqb = ormQueryBuilder;
77
90
  let isFirst = true;
78
91
  for (const item of orderBy) {
79
92
  let methodName = 'addOrderBy';
@@ -81,19 +94,20 @@ let SQLQueryBuilderService = class SQLQueryBuilderService {
81
94
  methodName = 'orderBy';
82
95
  isFirst = false;
83
96
  }
84
- queryBuilder[methodName](item.field, item.direction);
97
+ oqb[methodName](item.field, item.direction);
85
98
  }
86
99
  }
87
100
  }
88
- getValueForFilter(entityName, fieldName, fieldAlias, fieldValue, isNot, operator) {
101
+ getValueForFilter(entityName, _fieldName, fieldAlias, fieldValue, isNot, operator) {
89
102
  const { columnQuotesSymbol: cqs, dbType } = this;
90
103
  const escapedFieldAlias = fieldAlias.replace(/\$/, '__ds__');
91
- const fieldString = `${cqs}${entityName}${cqs}.${cqs}${fieldName}${cqs}`;
92
- const parsedInnerValue = fieldValue instanceof Date ? fieldValue.valueOf() : fieldValue;
104
+ const fieldString = `${cqs}${entityName}${cqs}.${cqs}${fieldAlias}${cqs}`;
105
+ let parsedInnerValue = fieldValue instanceof Date ? fieldValue.valueOf() : fieldValue;
93
106
  if (operator === core_1.PersistanceSelectOperator.Contains) {
94
107
  let query = '';
95
- if (dbType === core_1.RDBType.MySQL) {
108
+ if (dbType === core_1.RDBType.Aurora || dbType === core_1.RDBType.ClickHouse || dbType === core_1.RDBType.MySQL) {
96
109
  query = `JSON_CONTAINS(${fieldString}, :${escapedFieldAlias})`;
110
+ parsedInnerValue = `"${parsedInnerValue}"`;
97
111
  }
98
112
  else if (dbType === core_1.RDBType.PG) {
99
113
  query = `${fieldString} ? :${escapedFieldAlias}`;
@@ -186,6 +200,7 @@ let SQLQueryBuilderService = class SQLQueryBuilderService {
186
200
  const cqs = this.columnQuotesSymbol;
187
201
  const { isTopLevel, operator } = options;
188
202
  const fieldAliases = options.fieldAliases || {};
203
+ const parameterNamesToFieldAliasesMap = options.parameterNamesToFieldAliasesMap || {};
189
204
  const where = {};
190
205
  let include = {};
191
206
  for (const fieldName in filters) {
@@ -193,8 +208,8 @@ let SQLQueryBuilderService = class SQLQueryBuilderService {
193
208
  if (typeof fieldValue === 'undefined') {
194
209
  continue;
195
210
  }
196
- const fieldAlias = fieldAliases[fieldName] || fieldName;
197
211
  const isNot = operator === core_1.PersistanceSelectOperator.Not;
212
+ let fieldAlias = fieldAliases[fieldName];
198
213
  if (fieldName.match(/\./)) {
199
214
  const fieldData = fieldName.split('.');
200
215
  const finalItemIndex = fieldData.length - 1;
@@ -203,12 +218,16 @@ let SQLQueryBuilderService = class SQLQueryBuilderService {
203
218
  let previousEntityAlias = `${entityName}`;
204
219
  for (let i = 0; i < finalItemIndex; i++) {
205
220
  const currentEntityName = fieldData[i];
206
- entityAlias += `_${currentEntityName}`;
221
+ entityAlias += `__${currentEntityName}`;
207
222
  include[`${previousEntityAlias}.${currentEntityName}`] = entityAlias;
208
223
  previousEntityAlias = `${entityAlias}`;
209
224
  }
225
+ if (!fieldAlias) {
226
+ fieldAlias = actualFieldName;
227
+ }
228
+ const actualFieldAlias = parameterNamesToFieldAliasesMap[fieldAlias] || fieldAlias;
210
229
  const itemData = this.parseFilters(entityAlias, { [actualFieldName]: fieldValue }, {
211
- fieldAliases: { [actualFieldName]: fieldAlias },
230
+ fieldAliases: { [actualFieldName]: actualFieldAlias },
212
231
  isTopLevel: false,
213
232
  operator
214
233
  });
@@ -216,14 +235,18 @@ let SQLQueryBuilderService = class SQLQueryBuilderService {
216
235
  include = Object.assign(Object.assign({}, include), itemData.include);
217
236
  continue;
218
237
  }
238
+ if (!fieldAlias) {
239
+ fieldAlias = fieldName;
240
+ }
241
+ const actualFieldAlias = parameterNamesToFieldAliasesMap[fieldAlias] || fieldAlias;
219
242
  if (fieldValue === null) {
220
243
  where[fieldName] = {
221
- query: `${cqs}${entityName}${cqs}.${cqs}${fieldName}${cqs} is${isNot ? ' not ' : ' '}null`
244
+ query: `${cqs}${entityName}${cqs}.${cqs}${actualFieldAlias}${cqs} is${isNot ? ' not ' : ' '}null`
222
245
  };
223
246
  continue;
224
247
  }
225
248
  if (fieldValue instanceof Array) {
226
- const { hasValues, isSimple, paramsForQuery, queryTemplateParamNames } = this.parseArrayOfFilters(fieldValue, fieldAlias);
249
+ const { hasValues, isSimple, paramsForQuery, queryTemplateParamNames } = this.parseArrayOfFilters(fieldValue, actualFieldAlias);
227
250
  if (!hasValues) {
228
251
  continue;
229
252
  }
@@ -231,14 +254,14 @@ let SQLQueryBuilderService = class SQLQueryBuilderService {
231
254
  if (operator === core_1.PersistanceSelectOperator.Between) {
232
255
  where[fieldName] = {
233
256
  params: paramsForQuery,
234
- query: `${cqs}${entityName}${cqs}.${cqs}${fieldName}${cqs}${isNot ? ' not ' : ' '}` +
235
- `between :${fieldAlias}_0 and :${fieldAlias}_1`
257
+ query: `${cqs}${entityName}${cqs}.${cqs}${actualFieldAlias}${cqs}${isNot ? ' not ' : ' '}` +
258
+ `between :${actualFieldAlias}_0 and :${actualFieldAlias}_1`
236
259
  };
237
260
  continue;
238
261
  }
239
262
  where[fieldName] = {
240
263
  params: paramsForQuery,
241
- query: `${cqs}${entityName}${cqs}.${cqs}${fieldName}${cqs}${isNot ? ' not ' : ' '}` +
264
+ query: `${cqs}${entityName}${cqs}.${cqs}${actualFieldAlias}${cqs}${isNot ? ' not ' : ' '}` +
242
265
  `in (${queryTemplateParamNames.replace(/,\s$/, '')})`
243
266
  };
244
267
  continue;
@@ -246,31 +269,30 @@ let SQLQueryBuilderService = class SQLQueryBuilderService {
246
269
  if (isTopLevel && fieldName === core_1.PersistanceSelectOperator.Or) {
247
270
  const finalWhereValue = { params: {}, query: '' };
248
271
  fieldValue.forEach((orFieldValue, orFieldIndex) => {
249
- const itemData = this.parseInnerFilters(entityName, orFieldValue, fieldName, `${fieldAlias}_${orFieldIndex}_f`, operator);
272
+ const itemData = this.parseInnerFilters(entityName, orFieldValue, fieldName, `${actualFieldAlias}_${orFieldIndex}_f`, operator);
250
273
  finalWhereValue.params = Object.assign(Object.assign({}, finalWhereValue.params), (itemData.parsedFilter.params || {}));
251
274
  finalWhereValue.query += `${finalWhereValue.query.length ? ' or ' : '('}${itemData.parsedFilter.query}`;
252
275
  include = Object.assign(Object.assign({}, include), itemData.include);
253
276
  });
254
277
  finalWhereValue.query += ')';
255
278
  where[fieldName] = finalWhereValue;
279
+ continue;
256
280
  }
257
- else {
258
- const itemData = this.parseInnerFilters(entityName, fieldValue, fieldName, fieldAlias, operator);
259
- if (itemData.parsedFilter.query === '()') {
260
- continue;
261
- }
262
- where[fieldName] = itemData.parsedFilter;
263
- include = Object.assign(Object.assign({}, include), itemData.include);
281
+ const itemData = this.parseInnerFilters(entityName, fieldValue, fieldName, actualFieldAlias, operator);
282
+ if (itemData.parsedFilter.query === '()') {
283
+ continue;
264
284
  }
285
+ where[fieldName] = itemData.parsedFilter;
286
+ include = Object.assign(Object.assign({}, include), itemData.include);
265
287
  continue;
266
288
  }
267
289
  if (typeof fieldValue === 'object' && !(fieldValue instanceof Date)) {
268
- const itemData = this.parseInnerFilters(entityName, fieldValue, fieldName, fieldAlias, operator);
290
+ const itemData = this.parseInnerFilters(entityName, fieldValue, fieldName, actualFieldAlias, operator);
269
291
  where[fieldName] = itemData.parsedFilter;
270
292
  include = Object.assign(Object.assign({}, include), itemData.include);
271
293
  continue;
272
294
  }
273
- where[fieldName] = this.getValueForFilter(entityName, fieldName, fieldAlias, fieldValue, isNot, operator);
295
+ where[fieldName] = this.getValueForFilter(entityName, fieldName, actualFieldAlias, fieldValue, isNot, operator);
274
296
  }
275
297
  return { where, include };
276
298
  }
@@ -286,11 +308,13 @@ let SQLQueryBuilderService = class SQLQueryBuilderService {
286
308
  op = key;
287
309
  }
288
310
  const actualFieldName = fieldName === core_1.PersistanceSelectOperator.Or ? key : fieldName;
311
+ const fieldParameterName = `${fieldAlias}_${parsedValueCount}`;
289
312
  const innerValue = filtersObject[key];
290
313
  const itemData = this.parseFilters(entityName, { [actualFieldName]: innerValue }, {
291
- fieldAliases: { [actualFieldName]: `${fieldAlias}_${parsedValueCount}` },
314
+ fieldAliases: { [actualFieldName]: fieldParameterName },
292
315
  isTopLevel: false,
293
- operator: op
316
+ operator: op,
317
+ parameterNamesToFieldAliasesMap: { [fieldParameterName]: fieldAlias }
294
318
  });
295
319
  const fieldWhereData = itemData.where[actualFieldName];
296
320
  if (!fieldWhereData) {
@@ -313,7 +337,7 @@ let SQLQueryBuilderService = class SQLQueryBuilderService {
313
337
  let entityAlias = `${entityName}`;
314
338
  let previousEntityAlias = `${entityName}`;
315
339
  includeData.forEach(currentEntityName => {
316
- entityAlias += `_${currentEntityName}`;
340
+ entityAlias += `__${currentEntityName}`;
317
341
  resultInclude[`${previousEntityAlias}.${currentEntityName}`] = entityAlias;
318
342
  previousEntityAlias = `${entityAlias}`;
319
343
  });
@@ -324,7 +348,9 @@ let SQLQueryBuilderService = class SQLQueryBuilderService {
324
348
  const orderBy = [];
325
349
  let include = {};
326
350
  for (const fieldName in orderByData) {
327
- const direction = orderByData[fieldName].toLowerCase() === 'desc' ? 'DESC' : 'ASC';
351
+ const direction = orderByData[fieldName].toLowerCase() === 'desc'
352
+ ? core_1.PersistanceOrderByDirection.Desc
353
+ : core_1.PersistanceOrderByDirection.Asc;
328
354
  const item = { field: `${entityName}.${fieldName}`, direction };
329
355
  if (fieldName.match(/\./)) {
330
356
  const fieldData = fieldName.split('.');
@@ -370,6 +396,7 @@ exports.SQLQueryBuilderService = SQLQueryBuilderService;
370
396
  exports.SQLQueryBuilderService = SQLQueryBuilderService = __decorate([
371
397
  (0, common_1.Injectable)(),
372
398
  __param(1, (0, common_1.Inject)(definitions_1.Constants.SQL_BUILDER_DB_CONFIG_PATH)),
373
- __metadata("design:paramtypes", [core_1.ConfigProviderService, String])
399
+ __param(2, (0, common_1.Inject)(core_1.Constants.PERSISTANCE_MODULE_NAME)),
400
+ __metadata("design:paramtypes", [core_1.ConfigProviderService, String, String])
374
401
  ], SQLQueryBuilderService);
375
- //# sourceMappingURL=sqlQueryBuilder.service.js.map
402
+ //# 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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"}