@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.
Files changed (172) hide show
  1. package/dist/abstract/Controller.d.ts +2 -2
  2. package/dist/abstract/Controller.d.ts.map +1 -1
  3. package/dist/abstract/Controller.js +1 -1
  4. package/dist/abstract/Model.d.ts +10 -9
  5. package/dist/abstract/Model.d.ts.map +1 -1
  6. package/dist/abstract/Model.js +92 -70
  7. package/dist/abstract/SchemaTableBuilder.d.ts +1 -1
  8. package/dist/abstract/SchemaTableBuilder.d.ts.map +1 -1
  9. package/dist/abstract/SchemaTableBuilder.js +8 -8
  10. package/dist/abstract/model/ModelRelation.d.ts +5 -4
  11. package/dist/abstract/model/ModelRelation.d.ts.map +1 -1
  12. package/dist/abstract/model/ModelRelation.js +35 -27
  13. package/dist/base/Query.d.ts +4 -8
  14. package/dist/base/Query.d.ts.map +1 -1
  15. package/dist/base/Query.js +91 -73
  16. package/dist/base/Record.d.ts +5 -4
  17. package/dist/base/Record.d.ts.map +1 -1
  18. package/dist/base/Record.js +44 -23
  19. package/dist/base/Table.d.ts +17 -14
  20. package/dist/base/Table.d.ts.map +1 -1
  21. package/dist/base/Table.js +123 -89
  22. package/dist/factories/ModelFactory.d.ts +7 -0
  23. package/dist/factories/ModelFactory.d.ts.map +1 -0
  24. package/dist/factories/ModelFactory.js +6 -0
  25. package/dist/factories/QueryFactory.d.ts +7 -0
  26. package/dist/factories/QueryFactory.d.ts.map +1 -0
  27. package/dist/factories/QueryFactory.js +6 -0
  28. package/dist/factories/RecordFactory.d.ts +8 -0
  29. package/dist/factories/RecordFactory.d.ts.map +1 -0
  30. package/dist/factories/RecordFactory.js +6 -0
  31. package/dist/factories/TableFactory.d.ts +7 -0
  32. package/dist/factories/TableFactory.d.ts.map +1 -0
  33. package/dist/factories/TableFactory.js +6 -0
  34. package/dist/helpers/Errors/AdapterErrors/AdapterNotFoundError.d.ts +2 -1
  35. package/dist/helpers/Errors/AdapterErrors/AdapterNotFoundError.d.ts.map +1 -1
  36. package/dist/helpers/Errors/AdapterErrors/AdapterNotFoundError.js +3 -3
  37. package/dist/helpers/Errors/AdapterErrors/ConnectionFailedError.d.ts +2 -1
  38. package/dist/helpers/Errors/AdapterErrors/ConnectionFailedError.d.ts.map +1 -1
  39. package/dist/helpers/Errors/AdapterErrors/ConnectionFailedError.js +3 -3
  40. package/dist/helpers/Errors/AdapterErrors/NoDefaultAdapterError.d.ts +2 -1
  41. package/dist/helpers/Errors/AdapterErrors/NoDefaultAdapterError.d.ts.map +1 -1
  42. package/dist/helpers/Errors/AdapterErrors/NoDefaultAdapterError.js +3 -3
  43. package/dist/helpers/Errors/DatabaseHandlerError.d.ts +9 -0
  44. package/dist/helpers/Errors/DatabaseHandlerError.d.ts.map +1 -0
  45. package/dist/helpers/Errors/DatabaseHandlerError.js +10 -0
  46. package/dist/helpers/Errors/ExpressionErrors/InvalidExpressionParametersError.d.ts +2 -1
  47. package/dist/helpers/Errors/ExpressionErrors/InvalidExpressionParametersError.d.ts.map +1 -1
  48. package/dist/helpers/Errors/ExpressionErrors/InvalidExpressionParametersError.js +5 -3
  49. package/dist/helpers/Errors/ExpressionErrors/UnknownExpressionTypeError.d.ts +2 -1
  50. package/dist/helpers/Errors/ExpressionErrors/UnknownExpressionTypeError.d.ts.map +1 -1
  51. package/dist/helpers/Errors/ExpressionErrors/UnknownExpressionTypeError.js +5 -3
  52. package/dist/helpers/Errors/ExpressionErrors/UnsupportedQueryPhaseError.d.ts +2 -1
  53. package/dist/helpers/Errors/ExpressionErrors/UnsupportedQueryPhaseError.d.ts.map +1 -1
  54. package/dist/helpers/Errors/ExpressionErrors/UnsupportedQueryPhaseError.js +3 -3
  55. package/dist/helpers/Errors/ModelErrors/InvalidOperationError.d.ts +5 -0
  56. package/dist/helpers/Errors/ModelErrors/InvalidOperationError.d.ts.map +1 -0
  57. package/dist/helpers/Errors/ModelErrors/InvalidOperationError.js +6 -0
  58. package/dist/helpers/Errors/ModelErrors/RecordNotFoundError.d.ts +6 -0
  59. package/dist/helpers/Errors/ModelErrors/RecordNotFoundError.d.ts.map +1 -0
  60. package/dist/helpers/Errors/ModelErrors/RecordNotFoundError.js +6 -0
  61. package/dist/helpers/Errors/ModelErrors/RelationError.d.ts +5 -0
  62. package/dist/helpers/Errors/ModelErrors/RelationError.d.ts.map +1 -0
  63. package/dist/helpers/Errors/ModelErrors/RelationError.js +6 -0
  64. package/dist/helpers/Errors/QueryErrors/InvalidWhereConditionError.d.ts +5 -0
  65. package/dist/helpers/Errors/QueryErrors/InvalidWhereConditionError.d.ts.map +1 -0
  66. package/dist/helpers/Errors/QueryErrors/InvalidWhereConditionError.js +6 -0
  67. package/dist/helpers/Errors/QueryErrors/QueryExecutionError.d.ts +5 -0
  68. package/dist/helpers/Errors/QueryErrors/QueryExecutionError.d.ts.map +1 -0
  69. package/dist/helpers/Errors/QueryErrors/QueryExecutionError.js +6 -0
  70. package/dist/helpers/Errors/QueryErrors/UnexpectedEmptyQueryError.d.ts +2 -1
  71. package/dist/helpers/Errors/QueryErrors/UnexpectedEmptyQueryError.d.ts.map +1 -1
  72. package/dist/helpers/Errors/QueryErrors/UnexpectedEmptyQueryError.js +3 -3
  73. package/dist/helpers/Errors/TableErrors/UnknownTableError.d.ts +3 -2
  74. package/dist/helpers/Errors/TableErrors/UnknownTableError.d.ts.map +1 -1
  75. package/dist/helpers/Errors/TableErrors/UnknownTableError.js +4 -4
  76. package/dist/helpers/QueryBuilders/BaseQueryBuilders/BaseSelectQueryBuilder.d.ts +2 -2
  77. package/dist/helpers/QueryBuilders/BaseQueryBuilders/BaseSelectQueryBuilder.d.ts.map +1 -1
  78. package/dist/helpers/QueryBuilders/BaseQueryBuilders/BaseSelectQueryBuilder.js +1 -1
  79. package/dist/helpers/QueryBuilders/ExpressionBuilders/JsonAggregateExpression.d.ts +3 -4
  80. package/dist/helpers/QueryBuilders/ExpressionBuilders/JsonAggregateExpression.d.ts.map +1 -1
  81. package/dist/helpers/QueryBuilders/ExpressionBuilders/JsonAggregateExpression.js +46 -44
  82. package/dist/helpers/QueryBuilders/ExpressionBuilders/SpatialDistanceExpression.d.ts +3 -4
  83. package/dist/helpers/QueryBuilders/ExpressionBuilders/SpatialDistanceExpression.d.ts.map +1 -1
  84. package/dist/helpers/QueryBuilders/ExpressionBuilders/SpatialDistanceExpression.js +34 -32
  85. package/dist/helpers/QueryBuilders/ExpressionBuilders/TextRelevanceExpression.d.ts +3 -4
  86. package/dist/helpers/QueryBuilders/ExpressionBuilders/TextRelevanceExpression.d.ts.map +1 -1
  87. package/dist/helpers/QueryBuilders/ExpressionBuilders/TextRelevanceExpression.js +9 -20
  88. package/dist/helpers/QueryBuilders/QueryDecorators/ExpressionDecorator.d.ts +4 -4
  89. package/dist/helpers/QueryBuilders/QueryDecorators/ExpressionDecorator.d.ts.map +1 -1
  90. package/dist/helpers/QueryBuilders/QueryDecorators/ExpressionDecorator.js +14 -17
  91. package/dist/helpers/QueryBuilders/QueryDecorators/GroupByDecorator.d.ts +3 -3
  92. package/dist/helpers/QueryBuilders/QueryDecorators/GroupByDecorator.d.ts.map +1 -1
  93. package/dist/helpers/QueryBuilders/QueryDecorators/GroupByDecorator.js +2 -2
  94. package/dist/helpers/QueryBuilders/QueryDecorators/JoinDecorator.d.ts +4 -4
  95. package/dist/helpers/QueryBuilders/QueryDecorators/JoinDecorator.d.ts.map +1 -1
  96. package/dist/helpers/QueryBuilders/QueryDecorators/JoinDecorator.js +17 -14
  97. package/dist/helpers/QueryBuilders/QueryDecorators/LimitDecorator.d.ts +3 -3
  98. package/dist/helpers/QueryBuilders/QueryDecorators/LimitDecorator.d.ts.map +1 -1
  99. package/dist/helpers/QueryBuilders/QueryDecorators/LimitDecorator.js +2 -2
  100. package/dist/helpers/QueryBuilders/QueryDecorators/OrderByDecorator.d.ts +3 -3
  101. package/dist/helpers/QueryBuilders/QueryDecorators/OrderByDecorator.d.ts.map +1 -1
  102. package/dist/helpers/QueryBuilders/QueryDecorators/OrderByDecorator.js +2 -2
  103. package/dist/helpers/QueryBuilders/QueryDecorators/QueryDecorator.d.ts +2 -2
  104. package/dist/helpers/QueryBuilders/QueryDecorators/QueryDecorator.d.ts.map +1 -1
  105. package/dist/helpers/QueryBuilders/QueryDecorators/QueryDecorator.js +1 -1
  106. package/dist/helpers/QueryBuilders/QueryDecorators/WhereDecorator.d.ts +5 -5
  107. package/dist/helpers/QueryBuilders/QueryDecorators/WhereDecorator.d.ts.map +1 -1
  108. package/dist/helpers/QueryBuilders/QueryDecorators/WhereDecorator.js +3 -4
  109. package/dist/helpers/QueryBuilders/QueryExpressionBuilder.d.ts +1 -3
  110. package/dist/helpers/QueryBuilders/QueryExpressionBuilder.d.ts.map +1 -1
  111. package/dist/helpers/QueryBuilders/QueryExpressionBuilder.js +4 -22
  112. package/dist/helpers/QueryBuilders/QueryStatementBuilder.d.ts +3 -4
  113. package/dist/helpers/QueryBuilders/QueryStatementBuilder.d.ts.map +1 -1
  114. package/dist/helpers/QueryBuilders/QueryStatementBuilder.js +59 -45
  115. package/dist/helpers/QueryBuilders/{SqlRenderer.d.ts → SqlGenerator.d.ts} +3 -3
  116. package/dist/helpers/QueryBuilders/SqlGenerator.d.ts.map +1 -0
  117. package/dist/helpers/QueryBuilders/{SqlRenderer.js → SqlGenerator.js} +30 -19
  118. package/dist/helpers/QueryBuilders/{oldQueryStatementBuilder.d.ts → depricatedQueryStatementBuilder.d.ts} +19 -46
  119. package/dist/helpers/QueryBuilders/depricatedQueryStatementBuilder.d.ts.map +1 -0
  120. package/dist/helpers/QueryBuilders/{oldQueryStatementBuilder.js → depricatedQueryStatementBuilder.js} +31 -67
  121. package/dist/index.d.ts +13 -13
  122. package/dist/index.d.ts.map +1 -1
  123. package/dist/index.js +7 -7
  124. package/dist/interfaces/IController.d.ts +1 -1
  125. package/dist/interfaces/IController.d.ts.map +1 -1
  126. package/dist/interfaces/IDatabaseAdapter.d.ts +2 -2
  127. package/dist/interfaces/IDatabaseAdapter.d.ts.map +1 -1
  128. package/dist/interfaces/IExpressionBuilder.d.ts +1 -2
  129. package/dist/interfaces/IExpressionBuilder.d.ts.map +1 -1
  130. package/dist/interfaces/IFactory.d.ts +4 -0
  131. package/dist/interfaces/IFactory.d.ts.map +1 -0
  132. package/dist/interfaces/IFactory.js +1 -0
  133. package/dist/interfaces/IMigration.d.ts +4 -4
  134. package/dist/interfaces/IMigration.d.ts.map +1 -1
  135. package/dist/interfaces/IQueryBuilder.d.ts +1 -1
  136. package/dist/interfaces/IQueryBuilder.d.ts.map +1 -1
  137. package/dist/interfaces/ISchemaBuilder.d.ts +2 -2
  138. package/dist/interfaces/ISchemaBuilder.d.ts.map +1 -1
  139. package/dist/interfaces/IStatementAdapter.d.ts +1 -1
  140. package/dist/interfaces/IStatementAdapter.d.ts.map +1 -1
  141. package/dist/runtime/Container.d.ts +2 -3
  142. package/dist/runtime/Container.d.ts.map +1 -1
  143. package/dist/runtime/Container.js +3 -4
  144. package/dist/runtime/QueryCache.d.ts +1 -1
  145. package/dist/runtime/QueryCache.d.ts.map +1 -1
  146. package/dist/runtime/QueryCache.js +1 -1
  147. package/dist/runtime/Repository.d.ts +23 -12
  148. package/dist/runtime/Repository.d.ts.map +1 -1
  149. package/dist/runtime/Repository.js +324 -65
  150. package/dist/types/expressions.d.ts +12 -47
  151. package/dist/types/expressions.d.ts.map +1 -1
  152. package/dist/types/expressions.js +1 -6
  153. package/dist/types/factories.d.ts +5 -3
  154. package/dist/types/factories.d.ts.map +1 -1
  155. package/dist/types/index.d.ts +1 -1
  156. package/dist/types/index.d.ts.map +1 -1
  157. package/dist/types/index.js +1 -1
  158. package/dist/types/model.d.ts +5 -23
  159. package/dist/types/model.d.ts.map +1 -1
  160. package/dist/types/query.d.ts +5 -4
  161. package/dist/types/query.d.ts.map +1 -1
  162. package/dist/types/record.d.ts +11 -0
  163. package/dist/types/record.d.ts.map +1 -0
  164. package/dist/types/record.js +1 -0
  165. package/dist/types/repository.d.ts +8 -0
  166. package/dist/types/repository.d.ts.map +1 -0
  167. package/dist/types/repository.js +1 -0
  168. package/dist/types/table.d.ts +9 -1
  169. package/dist/types/table.d.ts.map +1 -1
  170. package/package.json +1 -1
  171. package/dist/helpers/QueryBuilders/SqlRenderer.d.ts.map +0 -1
  172. package/dist/helpers/QueryBuilders/oldQueryStatementBuilder.d.ts.map +0 -1
@@ -1,32 +1,43 @@
1
- import type Model from "../abstract/Model.js";
2
- import Record from "../base/Record.js";
3
- import { columnType, QueryWhereCondition, relation, QueryComparisonParameters, QueryIsEqualParameter, TableFactory, QueryLayers } from "../types/index.js";
4
- export default class Repository<Type extends columnType, ModelType extends Model<Type>> {
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 tableFactory;
11
- constructor(tableName: string, ModelClass: ModelType, customDatabaseAdapter?: string, tableFactory?: TableFactory);
12
- static getInstance<ModelType extends columnType>(ModelClass: new () => Model<ModelType>, tableName: string, customDatabaseAdapter?: string, tableFactory?: TableFactory): Repository<ModelType, Model<ModelType>>;
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<Record<Type> | undefined>;
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: QueryWhereCondition, additional: QueryWhereCondition): QueryComparisonParameters[];
30
- ConvertParamsToArray(params: QueryWhereCondition): QueryComparisonParameters[];
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;AACjD,OAAO,MAAM,MAAM,sBAAsB,CAAC;AAE1C,OAAO,EAAE,UAAU,EAAQ,mBAAmB,EAAE,QAAQ,EAAE,yBAAyB,EAAE,qBAAqB,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEpK,MAAM,CAAC,OAAO,OAAO,UAAU,CAAC,IAAI,SAAS,UAAU,EAAE,SAAS,SAAS,KAAK,CAAC,IAAI,CAAC;IAClF,OAAO,CAAC,MAAM,CAAC,UAAU,CAAqE;IAC9F,OAAO,CAAC,MAAM,CAAqC;IACnD,OAAO,CAAC,mBAAmB,CAAoC;IAC/D,OAAO,CAAC,KAAK,CAAO;IACpB,OAAO,CAAC,qBAAqB,CAAC,CAAS;IACvC,OAAO,CAAC,YAAY,CAAe;gBAG/B,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,SAAS,EACrB,qBAAqB,CAAC,EAAE,MAAM,EAC9B,YAAY,GAAE,YAA0D;WAS9D,WAAW,CAAC,SAAS,SAAS,UAAU,EAClD,UAAU,EAAE,UAAU,KAAK,CAAC,SAAS,CAAC,EACtC,SAAS,EAAE,MAAM,EACjB,qBAAqB,CAAC,EAAE,MAAM,EAC9B,YAAY,CAAC,EAAE,YAAY,GAC5B,UAAU,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;WAiB5B,cAAc,IAAI,IAAI;IAIpC,OAAO,CAAC,sBAAsB;IAajB,0BAA0B,CACnC,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,SAAS,EACxB,QAAQ,EAAE,QAAQ,GACnB,OAAO,CAAC,IAAI,CAAC;IAKH,0BAA0B,CACnC,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,SAAS,EACxB,QAAQ,EAAE,QAAQ,GACnB,OAAO,CAAC,IAAI,CAAC;IAMH,qBAAqB,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC;IAaxE,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAKpD,SAAS,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;IAKjC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS;IAI3B,IAAI,CAAC,UAAU,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAIrC,KAAK,CAAC,WAAW,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC;IAY9E,GAAG,CAAC,WAAW,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IASlE,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAIlE,MAAM,CAAC,UAAU,EAAE,qBAAqB,EAAE,aAAa,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC;YAOxH,IAAI;IAaL,KAAK,CACd,WAAW,EAAE,WAAW,EACxB,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,GACnB,OAAO,CAAC,MAAM,CAAC;IAYlB,OAAO,CAAC,eAAe;IAmHhB,yBAAyB,CAAC,IAAI,EAAE,mBAAmB,EAAE,UAAU,EAAE,mBAAmB,GAAG,yBAAyB,EAAE;IAKlH,oBAAoB,CAAC,MAAM,EAAE,mBAAmB,GAAG,yBAAyB,EAAE;CAIxF"}
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 Table from "../base/Table.js";
2
- class Repository {
3
- constructor(tableName, ModelClass, customDatabaseAdapter, tableFactory = (name, adapter) => new Table(name, adapter)) {
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.tableFactory = tableFactory;
10
- this.Table = this.tableFactory(tableName, customDatabaseAdapter);
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, tableFactory) {
14
- // Use tableName as key to differentiate instances for different tables
15
- const key = tableName || ModelClass.name;
16
- if (!this._instances.has(key)) {
17
- const instance = new Repository(tableName, new ModelClass(), customDatabaseAdapter, tableFactory);
18
- this._instances.set(key, instance);
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 this._instances.get(key);
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 ? foreignKey : modelOfOrigin.values[relation.foreignKey],
31
- [relation.pivotForeignKey]: isLocal ? modelOfOrigin.values[relation.foreignKey] : foreignKey
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 table = this.tableFactory(relation.pivotTable, this.customDatabaseAdapter);
36
- await table.Insert(this.generatePivotTableKeys(foreignKey, modelOfOrigin, relation));
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 table = this.tableFactory(relation.pivotTable, this.customDatabaseAdapter);
40
- const record = await table.Record({ base: { where: this.generatePivotTableKeys(foreignKey, modelOfOrigin, relation) } });
41
- await (record === null || record === void 0 ? void 0 : record.Delete());
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 && this.manyToManyRelations.has(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 Error(`Pivot table ${relation.pivotTable} does not exist. Create it in alphabetical order before using many-to-many relationships.`);
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
- const table = this.tableFactory(name, this.customDatabaseAdapter);
57
- return await table.exists();
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.Table.Insert(attributes);
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, { ...queryLayers, final: { ...queryLayers.final, limit: 1 } }))[0];
74
- record = result ? { values: result } : undefined;
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.Table.Record(queryLayers);
123
+ record = await this.getRecord(queryLayers, true);
78
124
  }
79
- return record === null || record === void 0 ? void 0 : record.values;
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
- const records = await this.Table.Records(QueryLayers);
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 record = await this.Table.Record({ base: { from: table, where: primaryKey } });
95
- if (record) {
96
- return await record.Update(newAttributes, primaryKey);
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.Table.Join(nextLayers);
103
- return records.map(record => record.values);
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.Table.toSql(nextLayers);
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
- .replace("_", "")
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.split(".")[1] === join.path.split('.')[1]); //Try a little harder
367
+ relation = Model.Relations.find((rel) => rel.path === join.path);
132
368
  }
133
369
  if (!relation) {
134
- throw new Error(`Relation for joined entity ${join.relation} not found.`);
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 ? targetTable : relation.model.Configuration.table,
402
+ fromTable: targetTable
403
+ ? targetTable
404
+ : relation.model.Configuration.table,
166
405
  baseTable: baseTable ? baseTable : Model.Configuration.table,
167
406
  joinType,
168
- name: relation.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
- { [relation.foreignKey]: relation.pivotLocalKey }
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
- const query = this.Table.QueryHelperObject;
207
- return [...query.ConvertParamsToArray(base), ...query.ConvertParamsToArray(additional)];
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
- ConvertParamsToArray(params) {
210
- const query = this.Table.QueryHelperObject;
211
- return query.ConvertParamsToArray(params);
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;