@iamkirbki/database-handler-core 4.4.6 → 4.4.8
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/dist/abstract/Controller.d.ts +2 -2
- package/dist/abstract/Controller.d.ts.map +1 -1
- package/dist/abstract/Controller.js +1 -1
- package/dist/abstract/Model.d.ts +10 -9
- package/dist/abstract/Model.d.ts.map +1 -1
- package/dist/abstract/Model.js +92 -70
- package/dist/abstract/SchemaTableBuilder.d.ts +1 -1
- package/dist/abstract/SchemaTableBuilder.d.ts.map +1 -1
- package/dist/abstract/SchemaTableBuilder.js +8 -8
- package/dist/abstract/model/ModelRelation.d.ts +5 -4
- package/dist/abstract/model/ModelRelation.d.ts.map +1 -1
- package/dist/abstract/model/ModelRelation.js +35 -27
- package/dist/base/Query.d.ts +4 -8
- package/dist/base/Query.d.ts.map +1 -1
- package/dist/base/Query.js +91 -73
- package/dist/base/Record.d.ts +5 -4
- package/dist/base/Record.d.ts.map +1 -1
- package/dist/base/Record.js +44 -23
- package/dist/base/Table.d.ts +17 -14
- package/dist/base/Table.d.ts.map +1 -1
- package/dist/base/Table.js +123 -89
- package/dist/factories/ModelFactory.d.ts +7 -0
- package/dist/factories/ModelFactory.d.ts.map +1 -0
- package/dist/factories/ModelFactory.js +6 -0
- package/dist/factories/QueryFactory.d.ts +7 -0
- package/dist/factories/QueryFactory.d.ts.map +1 -0
- package/dist/factories/QueryFactory.js +6 -0
- package/dist/factories/RecordFactory.d.ts +8 -0
- package/dist/factories/RecordFactory.d.ts.map +1 -0
- package/dist/factories/RecordFactory.js +6 -0
- package/dist/factories/TableFactory.d.ts +7 -0
- package/dist/factories/TableFactory.d.ts.map +1 -0
- package/dist/factories/TableFactory.js +6 -0
- package/dist/helpers/Errors/AdapterErrors/AdapterNotFoundError.d.ts +2 -1
- package/dist/helpers/Errors/AdapterErrors/AdapterNotFoundError.d.ts.map +1 -1
- package/dist/helpers/Errors/AdapterErrors/AdapterNotFoundError.js +3 -3
- package/dist/helpers/Errors/AdapterErrors/ConnectionFailedError.d.ts +2 -1
- package/dist/helpers/Errors/AdapterErrors/ConnectionFailedError.d.ts.map +1 -1
- package/dist/helpers/Errors/AdapterErrors/ConnectionFailedError.js +3 -3
- package/dist/helpers/Errors/AdapterErrors/NoDefaultAdapterError.d.ts +2 -1
- package/dist/helpers/Errors/AdapterErrors/NoDefaultAdapterError.d.ts.map +1 -1
- package/dist/helpers/Errors/AdapterErrors/NoDefaultAdapterError.js +3 -3
- package/dist/helpers/Errors/DatabaseHandlerError.d.ts +9 -0
- package/dist/helpers/Errors/DatabaseHandlerError.d.ts.map +1 -0
- package/dist/helpers/Errors/DatabaseHandlerError.js +10 -0
- package/dist/helpers/Errors/ExpressionErrors/InvalidExpressionParametersError.d.ts +2 -1
- package/dist/helpers/Errors/ExpressionErrors/InvalidExpressionParametersError.d.ts.map +1 -1
- package/dist/helpers/Errors/ExpressionErrors/InvalidExpressionParametersError.js +5 -3
- package/dist/helpers/Errors/ExpressionErrors/UnknownExpressionTypeError.d.ts +2 -1
- package/dist/helpers/Errors/ExpressionErrors/UnknownExpressionTypeError.d.ts.map +1 -1
- package/dist/helpers/Errors/ExpressionErrors/UnknownExpressionTypeError.js +5 -3
- package/dist/helpers/Errors/ExpressionErrors/UnsupportedQueryPhaseError.d.ts +2 -1
- package/dist/helpers/Errors/ExpressionErrors/UnsupportedQueryPhaseError.d.ts.map +1 -1
- package/dist/helpers/Errors/ExpressionErrors/UnsupportedQueryPhaseError.js +3 -3
- package/dist/helpers/Errors/ModelErrors/InvalidOperationError.d.ts +5 -0
- package/dist/helpers/Errors/ModelErrors/InvalidOperationError.d.ts.map +1 -0
- package/dist/helpers/Errors/ModelErrors/InvalidOperationError.js +6 -0
- package/dist/helpers/Errors/ModelErrors/RecordNotFoundError.d.ts +6 -0
- package/dist/helpers/Errors/ModelErrors/RecordNotFoundError.d.ts.map +1 -0
- package/dist/helpers/Errors/ModelErrors/RecordNotFoundError.js +6 -0
- package/dist/helpers/Errors/ModelErrors/RelationError.d.ts +5 -0
- package/dist/helpers/Errors/ModelErrors/RelationError.d.ts.map +1 -0
- package/dist/helpers/Errors/ModelErrors/RelationError.js +6 -0
- package/dist/helpers/Errors/QueryErrors/InvalidWhereConditionError.d.ts +5 -0
- package/dist/helpers/Errors/QueryErrors/InvalidWhereConditionError.d.ts.map +1 -0
- package/dist/helpers/Errors/QueryErrors/InvalidWhereConditionError.js +6 -0
- package/dist/helpers/Errors/QueryErrors/QueryExecutionError.d.ts +5 -0
- package/dist/helpers/Errors/QueryErrors/QueryExecutionError.d.ts.map +1 -0
- package/dist/helpers/Errors/QueryErrors/QueryExecutionError.js +6 -0
- package/dist/helpers/Errors/QueryErrors/UnexpectedEmptyQueryError.d.ts +2 -1
- package/dist/helpers/Errors/QueryErrors/UnexpectedEmptyQueryError.d.ts.map +1 -1
- package/dist/helpers/Errors/QueryErrors/UnexpectedEmptyQueryError.js +3 -3
- package/dist/helpers/Errors/TableErrors/UnknownTableError.d.ts +3 -2
- package/dist/helpers/Errors/TableErrors/UnknownTableError.d.ts.map +1 -1
- package/dist/helpers/Errors/TableErrors/UnknownTableError.js +4 -4
- package/dist/helpers/QueryBuilders/BaseQueryBuilders/BaseSelectQueryBuilder.d.ts +2 -2
- package/dist/helpers/QueryBuilders/BaseQueryBuilders/BaseSelectQueryBuilder.d.ts.map +1 -1
- package/dist/helpers/QueryBuilders/BaseQueryBuilders/BaseSelectQueryBuilder.js +1 -1
- package/dist/helpers/QueryBuilders/ExpressionBuilders/JsonAggregateExpression.d.ts +3 -4
- package/dist/helpers/QueryBuilders/ExpressionBuilders/JsonAggregateExpression.d.ts.map +1 -1
- package/dist/helpers/QueryBuilders/ExpressionBuilders/JsonAggregateExpression.js +46 -44
- package/dist/helpers/QueryBuilders/ExpressionBuilders/SpatialDistanceExpression.d.ts +3 -4
- package/dist/helpers/QueryBuilders/ExpressionBuilders/SpatialDistanceExpression.d.ts.map +1 -1
- package/dist/helpers/QueryBuilders/ExpressionBuilders/SpatialDistanceExpression.js +34 -32
- package/dist/helpers/QueryBuilders/ExpressionBuilders/TextRelevanceExpression.d.ts +3 -4
- package/dist/helpers/QueryBuilders/ExpressionBuilders/TextRelevanceExpression.d.ts.map +1 -1
- package/dist/helpers/QueryBuilders/ExpressionBuilders/TextRelevanceExpression.js +9 -20
- package/dist/helpers/QueryBuilders/QueryDecorators/ExpressionDecorator.d.ts +4 -4
- package/dist/helpers/QueryBuilders/QueryDecorators/ExpressionDecorator.d.ts.map +1 -1
- package/dist/helpers/QueryBuilders/QueryDecorators/ExpressionDecorator.js +14 -17
- package/dist/helpers/QueryBuilders/QueryDecorators/GroupByDecorator.d.ts +3 -3
- package/dist/helpers/QueryBuilders/QueryDecorators/GroupByDecorator.d.ts.map +1 -1
- package/dist/helpers/QueryBuilders/QueryDecorators/GroupByDecorator.js +2 -2
- package/dist/helpers/QueryBuilders/QueryDecorators/JoinDecorator.d.ts +4 -4
- package/dist/helpers/QueryBuilders/QueryDecorators/JoinDecorator.d.ts.map +1 -1
- package/dist/helpers/QueryBuilders/QueryDecorators/JoinDecorator.js +17 -14
- package/dist/helpers/QueryBuilders/QueryDecorators/LimitDecorator.d.ts +3 -3
- package/dist/helpers/QueryBuilders/QueryDecorators/LimitDecorator.d.ts.map +1 -1
- package/dist/helpers/QueryBuilders/QueryDecorators/LimitDecorator.js +2 -2
- package/dist/helpers/QueryBuilders/QueryDecorators/OrderByDecorator.d.ts +3 -3
- package/dist/helpers/QueryBuilders/QueryDecorators/OrderByDecorator.d.ts.map +1 -1
- package/dist/helpers/QueryBuilders/QueryDecorators/OrderByDecorator.js +2 -2
- package/dist/helpers/QueryBuilders/QueryDecorators/QueryDecorator.d.ts +2 -2
- package/dist/helpers/QueryBuilders/QueryDecorators/QueryDecorator.d.ts.map +1 -1
- package/dist/helpers/QueryBuilders/QueryDecorators/QueryDecorator.js +1 -1
- package/dist/helpers/QueryBuilders/QueryDecorators/WhereDecorator.d.ts +5 -5
- package/dist/helpers/QueryBuilders/QueryDecorators/WhereDecorator.d.ts.map +1 -1
- package/dist/helpers/QueryBuilders/QueryDecorators/WhereDecorator.js +3 -4
- package/dist/helpers/QueryBuilders/QueryExpressionBuilder.d.ts +1 -3
- package/dist/helpers/QueryBuilders/QueryExpressionBuilder.d.ts.map +1 -1
- package/dist/helpers/QueryBuilders/QueryExpressionBuilder.js +4 -22
- package/dist/helpers/QueryBuilders/QueryStatementBuilder.d.ts +3 -4
- package/dist/helpers/QueryBuilders/QueryStatementBuilder.d.ts.map +1 -1
- package/dist/helpers/QueryBuilders/QueryStatementBuilder.js +59 -45
- package/dist/helpers/QueryBuilders/{SqlRenderer.d.ts → SqlGenerator.d.ts} +3 -3
- package/dist/helpers/QueryBuilders/SqlGenerator.d.ts.map +1 -0
- package/dist/helpers/QueryBuilders/{SqlRenderer.js → SqlGenerator.js} +30 -19
- package/dist/helpers/QueryBuilders/{oldQueryStatementBuilder.d.ts → depricatedQueryStatementBuilder.d.ts} +19 -46
- package/dist/helpers/QueryBuilders/depricatedQueryStatementBuilder.d.ts.map +1 -0
- package/dist/helpers/QueryBuilders/{oldQueryStatementBuilder.js → depricatedQueryStatementBuilder.js} +31 -67
- package/dist/index.d.ts +13 -13
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -7
- package/dist/interfaces/IController.d.ts +1 -1
- package/dist/interfaces/IController.d.ts.map +1 -1
- package/dist/interfaces/IDatabaseAdapter.d.ts +2 -2
- package/dist/interfaces/IDatabaseAdapter.d.ts.map +1 -1
- package/dist/interfaces/IExpressionBuilder.d.ts +1 -2
- package/dist/interfaces/IExpressionBuilder.d.ts.map +1 -1
- package/dist/interfaces/IFactory.d.ts +4 -0
- package/dist/interfaces/IFactory.d.ts.map +1 -0
- package/dist/interfaces/IFactory.js +1 -0
- package/dist/interfaces/IMigration.d.ts +4 -4
- package/dist/interfaces/IMigration.d.ts.map +1 -1
- package/dist/interfaces/IQueryBuilder.d.ts +1 -1
- package/dist/interfaces/IQueryBuilder.d.ts.map +1 -1
- package/dist/interfaces/ISchemaBuilder.d.ts +2 -2
- package/dist/interfaces/ISchemaBuilder.d.ts.map +1 -1
- package/dist/interfaces/IStatementAdapter.d.ts +1 -1
- package/dist/interfaces/IStatementAdapter.d.ts.map +1 -1
- package/dist/runtime/Container.d.ts +2 -3
- package/dist/runtime/Container.d.ts.map +1 -1
- package/dist/runtime/Container.js +3 -4
- package/dist/runtime/QueryCache.d.ts +1 -1
- package/dist/runtime/QueryCache.d.ts.map +1 -1
- package/dist/runtime/QueryCache.js +1 -1
- package/dist/runtime/Repository.d.ts +23 -12
- package/dist/runtime/Repository.d.ts.map +1 -1
- package/dist/runtime/Repository.js +324 -65
- package/dist/types/expressions.d.ts +12 -47
- package/dist/types/expressions.d.ts.map +1 -1
- package/dist/types/expressions.js +1 -6
- package/dist/types/factories.d.ts +5 -3
- package/dist/types/factories.d.ts.map +1 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +1 -1
- package/dist/types/model.d.ts +5 -23
- package/dist/types/model.d.ts.map +1 -1
- package/dist/types/query.d.ts +5 -4
- package/dist/types/query.d.ts.map +1 -1
- package/dist/types/record.d.ts +11 -0
- package/dist/types/record.d.ts.map +1 -0
- package/dist/types/record.js +1 -0
- package/dist/types/repository.d.ts +8 -0
- package/dist/types/repository.d.ts.map +1 -0
- package/dist/types/repository.js +1 -0
- package/dist/types/table.d.ts +9 -1
- package/dist/types/table.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/helpers/QueryBuilders/SqlRenderer.d.ts.map +0 -1
- package/dist/helpers/QueryBuilders/oldQueryStatementBuilder.d.ts.map +0 -1
|
@@ -1,32 +1,43 @@
|
|
|
1
|
-
import type Model from
|
|
2
|
-
import
|
|
3
|
-
import {
|
|
4
|
-
export
|
|
1
|
+
import type { Model } from '../abstract/Model.js';
|
|
2
|
+
import { columnType, relation, QueryComparisonParameters, QueryIsEqualParameter, QueryLayers } from '../types/index.js';
|
|
3
|
+
import { QueryFactory } from '../types/factories';
|
|
4
|
+
export declare class Repository<Type extends columnType, ModelType extends Model<Type>> {
|
|
5
5
|
private static _instances;
|
|
6
6
|
private models;
|
|
7
7
|
private manyToManyRelations;
|
|
8
|
-
private Table;
|
|
9
8
|
private customDatabaseAdapter?;
|
|
10
|
-
private
|
|
11
|
-
|
|
12
|
-
|
|
9
|
+
private queryFactory;
|
|
10
|
+
private tableName;
|
|
11
|
+
private queryCache;
|
|
12
|
+
constructor(tableName: string, ModelClass: ModelType, customDatabaseAdapter?: string, queryFactory?: QueryFactory);
|
|
13
|
+
static getInstance<ModelType extends columnType>(ModelClass: new () => Model<ModelType>, tableName: string, customDatabaseAdapter?: string, queryFactory?: QueryFactory): Repository<ModelType, Model<ModelType>>;
|
|
13
14
|
static clearInstances(): void;
|
|
15
|
+
private getAdapter;
|
|
14
16
|
private generatePivotTableKeys;
|
|
15
17
|
insertRecordIntoPivotTable(foreignKey: string, modelOfOrigin: ModelType, relation: relation): Promise<void>;
|
|
16
18
|
deleteRecordFromPivotTable(foreignKey: string, modelOfOrigin: ModelType, relation: relation): Promise<void>;
|
|
17
19
|
getManyToManyRelation(relation: relation): Promise<relation | undefined>;
|
|
18
20
|
doesTableExist(name: string): Promise<boolean>;
|
|
19
21
|
syncModel(model: ModelType): void;
|
|
20
|
-
getModel(name: string): ModelType;
|
|
22
|
+
getModel(name: string): ModelType | undefined;
|
|
21
23
|
save(attributes: Type): Promise<void>;
|
|
22
24
|
first(queryLayers: QueryLayers, Model: Model<Type>): Promise<Type | undefined>;
|
|
23
25
|
get(QueryLayers: QueryLayers, Model: Model<Type>): Promise<Type[]>;
|
|
24
26
|
all(Model: Model<Type>, QueryLayers: QueryLayers): Promise<Type[]>;
|
|
25
|
-
update(primaryKey: QueryIsEqualParameter, newAttributes: Partial<Type>, table: string): Promise<
|
|
27
|
+
update(primaryKey: QueryIsEqualParameter, newAttributes: Partial<Type>, table: string): Promise<Type | undefined>;
|
|
28
|
+
private getRecords;
|
|
29
|
+
private getRecord;
|
|
26
30
|
private join;
|
|
31
|
+
private getJoinRecords;
|
|
32
|
+
private mapJoinedResults;
|
|
27
33
|
toSql(queryLayers: QueryLayers, Model: Model<Type>): Promise<string>;
|
|
34
|
+
private buildQueryString;
|
|
35
|
+
private hydrateJoinedRecords;
|
|
28
36
|
private buildJoinObject;
|
|
29
|
-
mergeQueryWhereConditions(base:
|
|
30
|
-
|
|
37
|
+
mergeQueryWhereConditions(base: QueryComparisonParameters[], additional: QueryComparisonParameters[]): QueryComparisonParameters[];
|
|
38
|
+
private convertParamsToObject;
|
|
39
|
+
private buildInsertQuery;
|
|
40
|
+
private buildUpdateQuery;
|
|
41
|
+
private buildDeleteQuery;
|
|
31
42
|
}
|
|
32
43
|
//# sourceMappingURL=Repository.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Repository.d.ts","sourceRoot":"","sources":["../../src/runtime/Repository.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"Repository.d.ts","sourceRoot":"","sources":["../../src/runtime/Repository.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAErD,OAAO,EACL,UAAU,EAEV,QAAQ,EACR,yBAAyB,EACzB,qBAAqB,EACrB,WAAW,EAGZ,MAAM,sBAAsB,CAAC;AAI9B,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAMrD,qBAAa,UAAU,CACrB,IAAI,SAAS,UAAU,EACvB,SAAS,SAAS,KAAK,CAAC,IAAI,CAAC;IAE7B,OAAO,CAAC,MAAM,CAAC,UAAU,CAGX;IACd,OAAO,CAAC,MAAM,CAAqC;IACnD,OAAO,CAAC,mBAAmB,CAAoC;IAC/D,OAAO,CAAC,qBAAqB,CAAC,CAAS;IACvC,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,UAAU,CAAa;gBAG7B,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,SAAS,EACrB,qBAAqB,CAAC,EAAE,MAAM,EAC9B,YAAY,GAAE,YAA4C;WAW9C,WAAW,CAAC,SAAS,SAAS,UAAU,EACpD,UAAU,EAAE,UAAU,KAAK,CAAC,SAAS,CAAC,EACtC,SAAS,EAAE,MAAM,EACjB,qBAAqB,CAAC,EAAE,MAAM,EAC9B,YAAY,CAAC,EAAE,YAAY,GAC1B,UAAU,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;WAiB5B,cAAc,IAAI,IAAI;IAIpC,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,sBAAsB;IAmBjB,0BAA0B,CACrC,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,SAAS,EACxB,QAAQ,EAAE,QAAQ,GACjB,OAAO,CAAC,IAAI,CAAC;IAiBH,0BAA0B,CACrC,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,SAAS,EACxB,QAAQ,EAAE,QAAQ,GACjB,OAAO,CAAC,IAAI,CAAC;IAiBH,qBAAqB,CAChC,QAAQ,EAAE,QAAQ,GACjB,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC;IAmBnB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAYpD,SAAS,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;IAKjC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS;IAIvC,IAAI,CAAC,UAAU,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAWrC,KAAK,CAChB,WAAW,EAAE,WAAW,EACxB,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,GACjB,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC;IAiBf,GAAG,CACd,WAAW,EAAE,WAAW,EACxB,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,GACjB,OAAO,CAAC,IAAI,EAAE,CAAC;IAQL,GAAG,CACd,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,EAClB,WAAW,EAAE,WAAW,GACvB,OAAO,CAAC,IAAI,EAAE,CAAC;IAIL,MAAM,CACjB,UAAU,EAAE,qBAAqB,EACjC,aAAa,EAAE,OAAO,CAAC,IAAI,CAAC,EAC5B,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC;YAyDd,UAAU;YAgCV,SAAS;YAYT,IAAI;YAeJ,cAAc;YAwDd,gBAAgB;IA6CjB,KAAK,CAChB,WAAW,EAAE,WAAW,EACxB,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,GACjB,OAAO,CAAC,MAAM,CAAC;YAYJ,gBAAgB;IAsB9B,OAAO,CAAC,oBAAoB;IAwD5B,OAAO,CAAC,eAAe;IA0GhB,yBAAyB,CAC9B,IAAI,EAAE,yBAAyB,EAAE,EACjC,UAAU,EAAE,yBAAyB,EAAE,GACtC,yBAAyB,EAAE;IAI9B,OAAO,CAAC,qBAAqB;YAgBf,gBAAgB;YAOhB,gBAAgB;YAwBhB,gBAAgB;CAiB/B"}
|
|
@@ -1,47 +1,76 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
import { Query } from '../base/Query.js';
|
|
2
|
+
import { QueryStatementBuilder } from '../helpers/QueryBuilders/QueryStatementBuilder.js';
|
|
3
|
+
import { Container } from '../index.js';
|
|
4
|
+
import { QueryCache } from '../runtime/QueryCache.js';
|
|
5
|
+
import { RelationError } from '../helpers/Errors/ModelErrors/RelationError.js';
|
|
6
|
+
import { InvalidOperationError } from '../helpers/Errors/ModelErrors/InvalidOperationError.js';
|
|
7
|
+
import { UnknownTableError } from '../helpers/Errors/TableErrors/UnknownTableError.js';
|
|
8
|
+
import { DepricatedQueryStatementBuilder } from '../helpers/QueryBuilders/depricatedQueryStatementBuilder.js';
|
|
9
|
+
export class Repository {
|
|
10
|
+
constructor(tableName, ModelClass, customDatabaseAdapter, queryFactory = (config) => new Query(config)) {
|
|
4
11
|
var _a;
|
|
5
12
|
this.models = new Map();
|
|
6
13
|
this.manyToManyRelations = new Map();
|
|
7
14
|
const modelPk = ((_a = ModelClass.primaryKey) === null || _a === void 0 ? void 0 : _a.toString()) || ModelClass.constructor.name;
|
|
8
15
|
this.models.set(modelPk, ModelClass);
|
|
9
|
-
this.
|
|
10
|
-
this.
|
|
16
|
+
this.queryFactory = queryFactory;
|
|
17
|
+
this.tableName = tableName;
|
|
11
18
|
this.customDatabaseAdapter = customDatabaseAdapter;
|
|
19
|
+
this.queryCache = QueryCache.getInstance();
|
|
12
20
|
}
|
|
13
|
-
static getInstance(ModelClass, tableName, customDatabaseAdapter,
|
|
14
|
-
|
|
15
|
-
const
|
|
16
|
-
if (!
|
|
17
|
-
const instance = new Repository(tableName, new ModelClass(), customDatabaseAdapter,
|
|
18
|
-
this._instances.set(
|
|
21
|
+
static getInstance(ModelClass, tableName, customDatabaseAdapter, queryFactory) {
|
|
22
|
+
const modelNameKey = tableName || ModelClass.name;
|
|
23
|
+
const existing = this._instances.get(modelNameKey);
|
|
24
|
+
if (!existing) {
|
|
25
|
+
const instance = new Repository(tableName, new ModelClass(), customDatabaseAdapter, queryFactory);
|
|
26
|
+
this._instances.set(modelNameKey, instance);
|
|
19
27
|
return instance;
|
|
20
28
|
}
|
|
21
|
-
return
|
|
29
|
+
return existing;
|
|
22
30
|
}
|
|
23
31
|
static clearInstances() {
|
|
24
32
|
this._instances.clear();
|
|
25
33
|
}
|
|
34
|
+
getAdapter() {
|
|
35
|
+
return Container.getInstance().getAdapter(this.customDatabaseAdapter);
|
|
36
|
+
}
|
|
26
37
|
generatePivotTableKeys(foreignKey, modelOfOrigin, relation) {
|
|
27
38
|
var _a;
|
|
28
39
|
const isLocal = !((_a = relation.pivotLocalKey) === null || _a === void 0 ? void 0 : _a.includes(modelOfOrigin.Configuration.table));
|
|
29
40
|
return {
|
|
30
|
-
[relation.pivotLocalKey]: isLocal
|
|
31
|
-
|
|
41
|
+
[relation.pivotLocalKey]: isLocal
|
|
42
|
+
? foreignKey
|
|
43
|
+
: modelOfOrigin.values[relation.foreignKey],
|
|
44
|
+
[relation.pivotForeignKey]: isLocal
|
|
45
|
+
? modelOfOrigin.values[relation.foreignKey]
|
|
46
|
+
: foreignKey,
|
|
32
47
|
};
|
|
33
48
|
}
|
|
34
49
|
async insertRecordIntoPivotTable(foreignKey, modelOfOrigin, relation) {
|
|
35
|
-
const
|
|
36
|
-
await
|
|
50
|
+
const keys = this.generatePivotTableKeys(foreignKey, modelOfOrigin, relation);
|
|
51
|
+
const queryStr = await this.buildInsertQuery(relation.pivotTable, keys);
|
|
52
|
+
const query = this.queryFactory({
|
|
53
|
+
tableName: relation.pivotTable,
|
|
54
|
+
query: queryStr,
|
|
55
|
+
parameters: keys,
|
|
56
|
+
adapterName: this.customDatabaseAdapter,
|
|
57
|
+
});
|
|
58
|
+
await query.Run();
|
|
37
59
|
}
|
|
38
60
|
async deleteRecordFromPivotTable(foreignKey, modelOfOrigin, relation) {
|
|
39
|
-
const
|
|
40
|
-
const
|
|
41
|
-
|
|
61
|
+
const keys = this.generatePivotTableKeys(foreignKey, modelOfOrigin, relation);
|
|
62
|
+
const queryStr = await this.buildDeleteQuery(relation.pivotTable, keys);
|
|
63
|
+
const query = this.queryFactory({
|
|
64
|
+
tableName: relation.pivotTable,
|
|
65
|
+
query: queryStr,
|
|
66
|
+
parameters: keys,
|
|
67
|
+
adapterName: this.customDatabaseAdapter,
|
|
68
|
+
});
|
|
69
|
+
await query.Run();
|
|
42
70
|
}
|
|
43
71
|
async getManyToManyRelation(relation) {
|
|
44
|
-
if (relation.pivotTable &&
|
|
72
|
+
if (relation.pivotTable &&
|
|
73
|
+
this.manyToManyRelations.has(relation.pivotTable)) {
|
|
45
74
|
return this.manyToManyRelations.get(relation.pivotTable);
|
|
46
75
|
}
|
|
47
76
|
if (await this.doesTableExist(relation.pivotTable)) {
|
|
@@ -49,12 +78,19 @@ class Repository {
|
|
|
49
78
|
return relation;
|
|
50
79
|
}
|
|
51
80
|
else {
|
|
52
|
-
throw new
|
|
81
|
+
throw new UnknownTableError(relation.pivotTable, 'Create it in alphabetical order before using many-to-many relationships.');
|
|
53
82
|
}
|
|
54
83
|
}
|
|
55
84
|
async doesTableExist(name) {
|
|
56
|
-
|
|
57
|
-
|
|
85
|
+
if (this.queryCache.doesTableExist(name)) {
|
|
86
|
+
return true;
|
|
87
|
+
}
|
|
88
|
+
const adapter = this.getAdapter();
|
|
89
|
+
const exists = await adapter.tableExists(name);
|
|
90
|
+
if (exists) {
|
|
91
|
+
this.queryCache.addExistingTable(name);
|
|
92
|
+
}
|
|
93
|
+
return exists;
|
|
58
94
|
}
|
|
59
95
|
syncModel(model) {
|
|
60
96
|
var _a;
|
|
@@ -65,42 +101,186 @@ class Repository {
|
|
|
65
101
|
return this.models.get(name);
|
|
66
102
|
}
|
|
67
103
|
async save(attributes) {
|
|
68
|
-
await this.
|
|
104
|
+
const queryStr = await this.buildInsertQuery(this.tableName, attributes);
|
|
105
|
+
const query = this.queryFactory({
|
|
106
|
+
tableName: this.tableName,
|
|
107
|
+
query: queryStr,
|
|
108
|
+
parameters: attributes,
|
|
109
|
+
adapterName: this.customDatabaseAdapter,
|
|
110
|
+
});
|
|
111
|
+
await query.Run();
|
|
69
112
|
}
|
|
70
113
|
async first(queryLayers, Model) {
|
|
71
114
|
let record;
|
|
72
115
|
if (Model.JoinedEntities.length > 0) {
|
|
73
|
-
const result = (await this.join(Model, {
|
|
74
|
-
|
|
116
|
+
const result = (await this.join(Model, {
|
|
117
|
+
...queryLayers,
|
|
118
|
+
final: { ...queryLayers.final, limit: 1 },
|
|
119
|
+
}))[0];
|
|
120
|
+
record = result;
|
|
75
121
|
}
|
|
76
122
|
else {
|
|
77
|
-
record = await this.
|
|
123
|
+
record = await this.getRecord(queryLayers, true);
|
|
78
124
|
}
|
|
79
|
-
return record
|
|
125
|
+
return record;
|
|
80
126
|
}
|
|
81
127
|
async get(QueryLayers, Model) {
|
|
82
128
|
if (Model.JoinedEntities.length > 0) {
|
|
83
129
|
return await this.join(Model, QueryLayers);
|
|
84
130
|
}
|
|
85
131
|
else {
|
|
86
|
-
|
|
87
|
-
return records.map(record => record.values);
|
|
132
|
+
return await this.getRecords(QueryLayers);
|
|
88
133
|
}
|
|
89
134
|
}
|
|
90
135
|
async all(Model, QueryLayers) {
|
|
91
136
|
return this.get(QueryLayers, Model);
|
|
92
137
|
}
|
|
93
138
|
async update(primaryKey, newAttributes, table) {
|
|
94
|
-
const
|
|
95
|
-
|
|
96
|
-
|
|
139
|
+
const checkQuery = this.queryFactory({
|
|
140
|
+
tableName: table,
|
|
141
|
+
query: '',
|
|
142
|
+
parameters: {},
|
|
143
|
+
adapterName: this.customDatabaseAdapter,
|
|
144
|
+
});
|
|
145
|
+
const columns = await checkQuery.TableColumnInformation(table);
|
|
146
|
+
if (columns.some((col) => col.name === 'updated_at')) {
|
|
147
|
+
newAttributes['updated_at'] = new Date();
|
|
97
148
|
}
|
|
149
|
+
const filteredAttributes = Object.fromEntries(Object.entries(newAttributes).filter(([, value]) => value !== undefined));
|
|
150
|
+
if (Object.keys(filteredAttributes).length === 0) {
|
|
151
|
+
return undefined;
|
|
152
|
+
}
|
|
153
|
+
const queryStr = await this.buildUpdateQuery(table, filteredAttributes, primaryKey);
|
|
154
|
+
const whereParams = {};
|
|
155
|
+
Object.entries(primaryKey).forEach(([key, value]) => {
|
|
156
|
+
whereParams[`where_${key}`] = value;
|
|
157
|
+
});
|
|
158
|
+
const params = { ...filteredAttributes, ...whereParams };
|
|
159
|
+
const query = this.queryFactory({
|
|
160
|
+
tableName: table,
|
|
161
|
+
query: queryStr,
|
|
162
|
+
parameters: params,
|
|
163
|
+
adapterName: this.customDatabaseAdapter,
|
|
164
|
+
});
|
|
165
|
+
await query.Run();
|
|
166
|
+
const normalizedPrimaryKey = Object.entries(primaryKey).map(([column, value]) => ({
|
|
167
|
+
column,
|
|
168
|
+
operator: '=',
|
|
169
|
+
value,
|
|
170
|
+
}));
|
|
171
|
+
const updatedRecord = await this.getRecord({ base: { from: table, where: normalizedPrimaryKey } }, true);
|
|
172
|
+
return updatedRecord;
|
|
173
|
+
}
|
|
174
|
+
async getRecords(queryLayers) {
|
|
175
|
+
var _a, _b;
|
|
176
|
+
const builder = new QueryStatementBuilder(queryLayers);
|
|
177
|
+
const queryStr = await builder.build();
|
|
178
|
+
let params = {};
|
|
179
|
+
if (((_a = queryLayers === null || queryLayers === void 0 ? void 0 : queryLayers.base) === null || _a === void 0 ? void 0 : _a.where) &&
|
|
180
|
+
Object.keys(queryLayers.base.where).length > 0) {
|
|
181
|
+
params = this.convertParamsToObject(queryLayers.base.where);
|
|
182
|
+
}
|
|
183
|
+
if (((_b = queryLayers === null || queryLayers === void 0 ? void 0 : queryLayers.pretty) === null || _b === void 0 ? void 0 : _b.where) &&
|
|
184
|
+
Object.keys(queryLayers.pretty.where).length > 0) {
|
|
185
|
+
params = {
|
|
186
|
+
...params,
|
|
187
|
+
...this.convertParamsToObject(queryLayers.pretty.where),
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
const query = this.queryFactory({
|
|
191
|
+
tableName: this.tableName,
|
|
192
|
+
query: queryStr,
|
|
193
|
+
parameters: params,
|
|
194
|
+
adapterName: this.customDatabaseAdapter,
|
|
195
|
+
});
|
|
196
|
+
const results = await query.All();
|
|
197
|
+
return results.map((r) => r.values);
|
|
198
|
+
}
|
|
199
|
+
async getRecord(queryLayers, limitOne = false) {
|
|
200
|
+
const layers = limitOne
|
|
201
|
+
? { ...queryLayers, final: { ...queryLayers === null || queryLayers === void 0 ? void 0 : queryLayers.final, limit: 1 } }
|
|
202
|
+
: queryLayers;
|
|
203
|
+
const records = await this.getRecords(layers);
|
|
204
|
+
return records[0];
|
|
98
205
|
}
|
|
99
206
|
async join(Model, queryLayers) {
|
|
100
207
|
const { joins, queryLayers: nextLayers } = this.buildJoinObject(Model, queryLayers);
|
|
101
208
|
nextLayers.base.joins = joins;
|
|
102
|
-
const records = await this.
|
|
103
|
-
return records
|
|
209
|
+
const records = await this.getJoinRecords(nextLayers);
|
|
210
|
+
return records;
|
|
211
|
+
}
|
|
212
|
+
async getJoinRecords(queryLayers) {
|
|
213
|
+
var _a, _b;
|
|
214
|
+
if (queryLayers.base.joins === undefined ||
|
|
215
|
+
(Array.isArray(queryLayers.base.joins) &&
|
|
216
|
+
queryLayers.base.joins.length === 0)) {
|
|
217
|
+
throw new InvalidOperationError('No joins defined for the Join operation.');
|
|
218
|
+
}
|
|
219
|
+
const joinedTables = queryLayers.base.joins.map((j) => j.fromTable);
|
|
220
|
+
const tableColumnCache = new Map();
|
|
221
|
+
const adapter = this.getAdapter();
|
|
222
|
+
const columnInfo = await adapter.tableColumnInformation(this.tableName);
|
|
223
|
+
tableColumnCache.set(this.tableName, columnInfo);
|
|
224
|
+
for (const tableName of joinedTables) {
|
|
225
|
+
const columnInfo = await adapter.tableColumnInformation(tableName);
|
|
226
|
+
tableColumnCache.set(tableName, columnInfo);
|
|
227
|
+
}
|
|
228
|
+
const builder = new QueryStatementBuilder(queryLayers, tableColumnCache);
|
|
229
|
+
const queryString = await builder.build();
|
|
230
|
+
let params = {};
|
|
231
|
+
if ((_a = queryLayers === null || queryLayers === void 0 ? void 0 : queryLayers.base) === null || _a === void 0 ? void 0 : _a.where) {
|
|
232
|
+
params = this.convertParamsToObject(queryLayers.base.where);
|
|
233
|
+
}
|
|
234
|
+
if ((_b = queryLayers === null || queryLayers === void 0 ? void 0 : queryLayers.pretty) === null || _b === void 0 ? void 0 : _b.where) {
|
|
235
|
+
params = {
|
|
236
|
+
...params,
|
|
237
|
+
...this.convertParamsToObject(queryLayers.pretty.where),
|
|
238
|
+
};
|
|
239
|
+
}
|
|
240
|
+
const query = this.queryFactory({
|
|
241
|
+
tableName: this.tableName,
|
|
242
|
+
query: queryString,
|
|
243
|
+
parameters: params,
|
|
244
|
+
adapterName: this.customDatabaseAdapter,
|
|
245
|
+
});
|
|
246
|
+
const records = await query.All();
|
|
247
|
+
const rawMapped = await this.mapJoinedResults(records, queryLayers.base.joins);
|
|
248
|
+
const joinAliases = queryLayers.base.joins.map((j) => j.name || j.fromTable);
|
|
249
|
+
const splitTables = this.hydrateJoinedRecords(rawMapped, joinAliases);
|
|
250
|
+
return splitTables;
|
|
251
|
+
}
|
|
252
|
+
async mapJoinedResults(records, joins) {
|
|
253
|
+
return records.map((record) => {
|
|
254
|
+
var _a;
|
|
255
|
+
const mainTableData = {};
|
|
256
|
+
const joinedTableData = {};
|
|
257
|
+
for (const [aliasedKey, value] of Object.entries(record.values)) {
|
|
258
|
+
if (aliasedKey.includes('__')) {
|
|
259
|
+
const [tableName, columnName] = aliasedKey.split('__');
|
|
260
|
+
if (tableName === this.tableName) {
|
|
261
|
+
mainTableData[columnName] = value;
|
|
262
|
+
}
|
|
263
|
+
else {
|
|
264
|
+
// Check if tableName matches any join alias or table name
|
|
265
|
+
const currentJoin = joins.find((j) => (j.name || j.fromTable) === tableName);
|
|
266
|
+
if (currentJoin) {
|
|
267
|
+
const aliasedTableName = currentJoin.name || currentJoin.fromTable;
|
|
268
|
+
(_a = joinedTableData[aliasedTableName]) !== null && _a !== void 0 ? _a : (joinedTableData[aliasedTableName] = {});
|
|
269
|
+
joinedTableData[aliasedTableName][columnName] = value;
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
else {
|
|
274
|
+
mainTableData[aliasedKey] = value;
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
const filteredJoinedData = Object.fromEntries(Object.entries(joinedTableData).filter(([, data]) => Object.keys(data).length > 0));
|
|
278
|
+
const combinedData = {
|
|
279
|
+
...mainTableData,
|
|
280
|
+
...filteredJoinedData,
|
|
281
|
+
};
|
|
282
|
+
return combinedData;
|
|
283
|
+
});
|
|
104
284
|
}
|
|
105
285
|
async toSql(queryLayers, Model) {
|
|
106
286
|
let nextLayers = queryLayers;
|
|
@@ -109,7 +289,66 @@ class Repository {
|
|
|
109
289
|
nextLayers = result.queryLayers;
|
|
110
290
|
nextLayers.base.joins = result.joins;
|
|
111
291
|
}
|
|
112
|
-
return this.
|
|
292
|
+
return this.buildQueryString(nextLayers);
|
|
293
|
+
}
|
|
294
|
+
async buildQueryString(queryLayers) {
|
|
295
|
+
if (queryLayers.base.joins && queryLayers.base.joins.length > 0) {
|
|
296
|
+
const joinedTables = queryLayers.base.joins.map((j) => j.fromTable);
|
|
297
|
+
const tableColumnCache = new Map();
|
|
298
|
+
const adapter = this.getAdapter();
|
|
299
|
+
const columnInfo = await adapter.tableColumnInformation(this.tableName);
|
|
300
|
+
tableColumnCache.set(this.tableName, columnInfo);
|
|
301
|
+
for (const tableName of joinedTables) {
|
|
302
|
+
const columnInfo = await adapter.tableColumnInformation(tableName);
|
|
303
|
+
tableColumnCache.set(tableName, columnInfo);
|
|
304
|
+
}
|
|
305
|
+
const builder = new QueryStatementBuilder(queryLayers, tableColumnCache);
|
|
306
|
+
return await builder.build();
|
|
307
|
+
}
|
|
308
|
+
else {
|
|
309
|
+
const builder = new QueryStatementBuilder(queryLayers);
|
|
310
|
+
return await builder.build();
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
hydrateJoinedRecords(records, joinedTables, primaryKey = 'id') {
|
|
314
|
+
var _a;
|
|
315
|
+
const parentMap = new Map();
|
|
316
|
+
for (const values of records) {
|
|
317
|
+
const parentId = values[primaryKey];
|
|
318
|
+
const parentData = {};
|
|
319
|
+
const childData = {};
|
|
320
|
+
for (const [key, val] of Object.entries(values)) {
|
|
321
|
+
if (joinedTables.includes(key)) {
|
|
322
|
+
childData[key] = val;
|
|
323
|
+
}
|
|
324
|
+
else {
|
|
325
|
+
parentData[key] = val;
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
if (!parentMap.has(parentId)) {
|
|
329
|
+
const childMaps = {};
|
|
330
|
+
for (const table of joinedTables) {
|
|
331
|
+
childMaps[table] = new Map();
|
|
332
|
+
}
|
|
333
|
+
parentMap.set(parentId, { parent: parentData, childMaps });
|
|
334
|
+
}
|
|
335
|
+
const entry = parentMap.get(parentId);
|
|
336
|
+
for (const [table, child] of Object.entries(childData)) {
|
|
337
|
+
const childId = (_a = child[primaryKey]) !== null && _a !== void 0 ? _a : Object.values(child)
|
|
338
|
+
.filter((v) => v !== null)
|
|
339
|
+
.join('__');
|
|
340
|
+
if (childId !== undefined && childId !== '') {
|
|
341
|
+
entry.childMaps[table].set(childId, child);
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
return Array.from(parentMap.values()).map(({ parent, childMaps }) => {
|
|
346
|
+
const merged = { ...parent };
|
|
347
|
+
for (const [table, childMap] of Object.entries(childMaps)) {
|
|
348
|
+
merged[table] = Array.from(childMap.values());
|
|
349
|
+
}
|
|
350
|
+
return merged;
|
|
351
|
+
});
|
|
113
352
|
}
|
|
114
353
|
buildJoinObject(Model, inputLayers) {
|
|
115
354
|
const queryLayers = {
|
|
@@ -117,21 +356,18 @@ class Repository {
|
|
|
117
356
|
base: {
|
|
118
357
|
...inputLayers.base,
|
|
119
358
|
},
|
|
120
|
-
final: inputLayers.final
|
|
121
|
-
? { ...inputLayers.final }
|
|
122
|
-
: undefined
|
|
359
|
+
final: inputLayers.final ? { ...inputLayers.final } : undefined,
|
|
123
360
|
};
|
|
124
|
-
const joins = Model.JoinedEntities.flatMap(join => {
|
|
361
|
+
const joins = Model.JoinedEntities.flatMap((join) => {
|
|
125
362
|
var _a, _b;
|
|
126
363
|
var _c;
|
|
127
|
-
let relation = Model.Relations.find(rel => rel.model.Configuration.table
|
|
128
|
-
.
|
|
129
|
-
.toLowerCase() === join.relation.toLowerCase());
|
|
364
|
+
let relation = Model.Relations.find((rel) => rel.model.Configuration.table.replace('_', '').toLowerCase() ===
|
|
365
|
+
join.relation.toLowerCase());
|
|
130
366
|
if (!relation) {
|
|
131
|
-
relation = Model.Relations.find(rel => rel.path
|
|
367
|
+
relation = Model.Relations.find((rel) => rel.path === join.path);
|
|
132
368
|
}
|
|
133
369
|
if (!relation) {
|
|
134
|
-
throw new
|
|
370
|
+
throw new RelationError(join.relation, 'Relation not found.');
|
|
135
371
|
}
|
|
136
372
|
if (join.queryScopes && queryLayers.base.where) {
|
|
137
373
|
queryLayers.base.where = this.mergeQueryWhereConditions(queryLayers.base.where, join.queryScopes);
|
|
@@ -160,24 +396,26 @@ class Repository {
|
|
|
160
396
|
baseKey = relation.localKey;
|
|
161
397
|
}
|
|
162
398
|
}
|
|
399
|
+
const relationName = join.alias || relation.name;
|
|
163
400
|
return [
|
|
164
401
|
{
|
|
165
|
-
fromTable: targetTable
|
|
402
|
+
fromTable: targetTable
|
|
403
|
+
? targetTable
|
|
404
|
+
: relation.model.Configuration.table,
|
|
166
405
|
baseTable: baseTable ? baseTable : Model.Configuration.table,
|
|
167
406
|
joinType,
|
|
168
|
-
name:
|
|
407
|
+
name: relationName,
|
|
169
408
|
on: [
|
|
170
|
-
{ [relation.foreignKey]: baseKey ? baseKey : relation.localKey }
|
|
171
|
-
]
|
|
172
|
-
}
|
|
409
|
+
{ [relation.foreignKey]: baseKey ? baseKey : relation.localKey },
|
|
410
|
+
],
|
|
411
|
+
},
|
|
173
412
|
];
|
|
174
413
|
}
|
|
175
|
-
// many to many
|
|
176
414
|
(_a = queryLayers.final) !== null && _a !== void 0 ? _a : (queryLayers.final = {});
|
|
177
415
|
(_b = (_c = queryLayers.final).blacklistTables) !== null && _b !== void 0 ? _b : (_c.blacklistTables = []);
|
|
178
416
|
queryLayers.final.blacklistTables = [
|
|
179
417
|
...queryLayers.final.blacklistTables,
|
|
180
|
-
relation.pivotTable
|
|
418
|
+
relation.pivotTable,
|
|
181
419
|
];
|
|
182
420
|
return [
|
|
183
421
|
{
|
|
@@ -185,31 +423,52 @@ class Repository {
|
|
|
185
423
|
baseTable: Model.Configuration.table,
|
|
186
424
|
joinType: 'INNER',
|
|
187
425
|
name: relation.name,
|
|
188
|
-
on: [
|
|
189
|
-
{ [relation.pivotForeignKey]: relation.localKey }
|
|
190
|
-
]
|
|
426
|
+
on: [{ [relation.pivotForeignKey]: relation.localKey }],
|
|
191
427
|
},
|
|
192
428
|
{
|
|
193
429
|
fromTable: relation.model.Configuration.table,
|
|
194
430
|
baseTable: relation.pivotTable,
|
|
195
431
|
joinType: 'INNER',
|
|
196
432
|
name: relation.name,
|
|
197
|
-
on: [
|
|
198
|
-
|
|
199
|
-
]
|
|
200
|
-
}
|
|
433
|
+
on: [{ [relation.foreignKey]: relation.pivotLocalKey }],
|
|
434
|
+
},
|
|
201
435
|
];
|
|
202
436
|
});
|
|
203
437
|
return { joins, queryLayers };
|
|
204
438
|
}
|
|
205
439
|
mergeQueryWhereConditions(base, additional) {
|
|
206
|
-
|
|
207
|
-
|
|
440
|
+
return [...base, ...additional];
|
|
441
|
+
}
|
|
442
|
+
convertParamsToObject(params) {
|
|
443
|
+
const paramObject = {};
|
|
444
|
+
params.forEach((param) => {
|
|
445
|
+
const colName = param.column.trim();
|
|
446
|
+
const paramName = colName.includes('.')
|
|
447
|
+
? colName.split('.')[1].trim()
|
|
448
|
+
: colName;
|
|
449
|
+
paramObject[paramName] = param.value;
|
|
450
|
+
});
|
|
451
|
+
return paramObject;
|
|
452
|
+
}
|
|
453
|
+
async buildInsertQuery(tableName, data) {
|
|
454
|
+
return DepricatedQueryStatementBuilder.BuildInsert(tableName, data);
|
|
455
|
+
}
|
|
456
|
+
async buildUpdateQuery(tableName, data, where) {
|
|
457
|
+
const filteredData = Object.fromEntries(Object.entries(data).filter(([, value]) => value !== undefined));
|
|
458
|
+
const whereConditions = Object.entries(where).map(([key, value]) => ({
|
|
459
|
+
column: key,
|
|
460
|
+
operator: '=',
|
|
461
|
+
value: value,
|
|
462
|
+
}));
|
|
463
|
+
return DepricatedQueryStatementBuilder.BuildUpdate(tableName, filteredData, whereConditions);
|
|
208
464
|
}
|
|
209
|
-
|
|
210
|
-
const
|
|
211
|
-
|
|
465
|
+
async buildDeleteQuery(tableName, where) {
|
|
466
|
+
const whereConditions = Object.entries(where).map(([key, value]) => ({
|
|
467
|
+
column: key,
|
|
468
|
+
operator: '=',
|
|
469
|
+
value: value,
|
|
470
|
+
}));
|
|
471
|
+
return DepricatedQueryStatementBuilder.BuildDelete(tableName, whereConditions);
|
|
212
472
|
}
|
|
213
473
|
}
|
|
214
474
|
Repository._instances = new Map();
|
|
215
|
-
export default Repository;
|