@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.
- package/README.md +1 -1
- package/dist/common/definitions/common.constants.d.ts +4 -0
- package/dist/common/definitions/common.constants.js +4 -0
- package/dist/common/definitions/common.constants.js.map +1 -1
- package/dist/{entityService → entity}/index.d.ts +2 -1
- package/dist/{entityService → entity}/index.js +2 -1
- package/dist/entity/index.js.map +1 -0
- package/dist/entity/rdb.entity.schema.d.ts +18 -0
- package/dist/{module/rdb.module.definitions.js → entity/rdb.entity.schema.js} +1 -1
- package/dist/entity/rdb.entity.schema.js.map +1 -0
- package/dist/entity/rdb.entity.service.d.ts +42 -0
- package/dist/entity/rdb.entity.service.definitions.d.ts +36 -0
- package/dist/entity/rdb.entity.service.definitions.js.map +1 -0
- package/dist/entity/rdb.entity.service.js +521 -0
- package/dist/entity/rdb.entity.service.js.map +1 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/ormQueryBuilder/index.d.ts +1 -0
- package/dist/{module → ormQueryBuilder}/index.js +1 -2
- package/dist/ormQueryBuilder/index.js.map +1 -0
- package/dist/ormQueryBuilder/rdb.ormQueryBuilder.d.ts +38 -0
- package/dist/ormQueryBuilder/rdb.ormQueryBuilder.js +16 -0
- package/dist/ormQueryBuilder/rdb.ormQueryBuilder.js.map +1 -0
- package/dist/repository/index.d.ts +1 -2
- package/dist/repository/index.js +1 -2
- package/dist/repository/index.js.map +1 -1
- package/dist/repository/rdb.repository.d.ts +33 -6
- package/dist/repository/rdb.repository.js +6 -27
- package/dist/repository/rdb.repository.js.map +1 -1
- package/dist/sqlQueryBuilder/index.d.ts +3 -3
- package/dist/sqlQueryBuilder/index.js +3 -3
- package/dist/sqlQueryBuilder/index.js.map +1 -1
- package/dist/sqlQueryBuilder/{sqlQueryBuilder.definitions.d.ts → rdb.sqlQueryBuilder.definitions.d.ts} +7 -9
- package/dist/{repository/rdb.repository.definitions.js → sqlQueryBuilder/rdb.sqlQueryBuilder.definitions.js} +1 -1
- package/dist/sqlQueryBuilder/rdb.sqlQueryBuilder.definitions.js.map +1 -0
- package/dist/sqlQueryBuilder/{sqlQueryBuilder.module.d.ts → rdb.sqlQueryBuilder.module.d.ts} +1 -1
- package/dist/sqlQueryBuilder/{sqlQueryBuilder.module.js → rdb.sqlQueryBuilder.module.js} +9 -4
- package/dist/sqlQueryBuilder/rdb.sqlQueryBuilder.module.js.map +1 -0
- package/dist/sqlQueryBuilder/rdb.sqlQueryBuilder.service.d.ts +53 -0
- package/dist/sqlQueryBuilder/{sqlQueryBuilder.service.js → rdb.sqlQueryBuilder.service.js} +97 -39
- package/dist/sqlQueryBuilder/rdb.sqlQueryBuilder.service.js.map +1 -0
- package/package.json +8 -5
- package/dist/entityService/index.js.map +0 -1
- package/dist/entityService/rdb.entity.service.d.ts +0 -34
- package/dist/entityService/rdb.entity.service.definitions.d.ts +0 -21
- package/dist/entityService/rdb.entity.service.definitions.js.map +0 -1
- package/dist/entityService/rdb.entity.service.js +0 -304
- package/dist/entityService/rdb.entity.service.js.map +0 -1
- package/dist/module/index.d.ts +0 -2
- package/dist/module/index.js.map +0 -1
- package/dist/module/rdb.module.d.ts +0 -5
- package/dist/module/rdb.module.definitions.d.ts +0 -15
- package/dist/module/rdb.module.definitions.js.map +0 -1
- package/dist/module/rdb.module.js +0 -45
- package/dist/module/rdb.module.js.map +0 -1
- package/dist/repository/rdb.repository.definitions.d.ts +0 -5
- package/dist/repository/rdb.repository.definitions.js.map +0 -1
- package/dist/repository/rdb.repository.module.d.ts +0 -6
- package/dist/repository/rdb.repository.module.js +0 -42
- package/dist/repository/rdb.repository.module.js.map +0 -1
- package/dist/sqlQueryBuilder/sqlQueryBuilder.definitions.js +0 -3
- package/dist/sqlQueryBuilder/sqlQueryBuilder.definitions.js.map +0 -1
- package/dist/sqlQueryBuilder/sqlQueryBuilder.module.js.map +0 -1
- package/dist/sqlQueryBuilder/sqlQueryBuilder.service.d.ts +0 -43
- package/dist/sqlQueryBuilder/sqlQueryBuilder.service.js.map +0 -1
- /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
|
|
2
|
-
export * from './rdb.repository.module';
|
|
1
|
+
export * from './rdb.repository';
|
package/dist/repository/index.js
CHANGED
|
@@ -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
|
|
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":";;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/repository/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,mDAAiC"}
|
|
@@ -1,7 +1,34 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
export declare class
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
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
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
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":"
|
|
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,
|
|
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?:
|
|
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;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rdb.sqlQueryBuilder.definitions.js","sourceRoot":"","sources":["../../src/sqlQueryBuilder/rdb.sqlQueryBuilder.definitions.ts"],"names":[],"mappings":""}
|
package/dist/sqlQueryBuilder/{sqlQueryBuilder.module.d.ts → rdb.sqlQueryBuilder.module.d.ts}
RENAMED
|
@@ -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
|
|
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
|
-
{
|
|
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:
|
|
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
|
|
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 } =
|
|
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(
|
|
38
|
-
const { where, include, orderBy, select, withDeleted
|
|
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
|
|
41
|
-
if (
|
|
45
|
+
const where = Object.assign({}, (optWhere || {}));
|
|
46
|
+
if ('withDeleted' in ormQueryBuilder) {
|
|
47
|
+
const oqb = ormQueryBuilder;
|
|
42
48
|
if (withDeleted) {
|
|
43
|
-
|
|
49
|
+
oqb.withDeleted();
|
|
44
50
|
}
|
|
45
51
|
if (include) {
|
|
46
52
|
for (const relationProperty in include) {
|
|
47
|
-
if (
|
|
48
|
-
|
|
53
|
+
if (lodash_1.default.get(withDeletedPerRelation || {}, relationProperty)) {
|
|
54
|
+
oqb.leftJoinAndSelect(relationProperty, include[relationProperty]);
|
|
49
55
|
}
|
|
50
56
|
else {
|
|
51
|
-
|
|
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
|
-
|
|
72
|
+
oqb.select(this.parseSelect(select, include));
|
|
57
73
|
}
|
|
58
74
|
}
|
|
59
|
-
if (
|
|
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
|
-
|
|
94
|
+
ormQueryBuilder[methodName](whereItem.query, whereItem.params);
|
|
74
95
|
}
|
|
75
96
|
}
|
|
76
|
-
if (orderBy &&
|
|
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
|
-
|
|
106
|
+
oqb[methodName](item.field, item.direction);
|
|
85
107
|
}
|
|
86
108
|
}
|
|
87
109
|
}
|
|
88
|
-
|
|
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}${
|
|
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 += `
|
|
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]:
|
|
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}${
|
|
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,
|
|
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}${
|
|
236
|
-
`between :${
|
|
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}${
|
|
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, `${
|
|
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,
|
|
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,
|
|
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,
|
|
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]:
|
|
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 += `
|
|
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'
|
|
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
|
-
|
|
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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"}
|