@iamkirbki/database-handler-core 4.3.1 → 4.4.0

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 (131) hide show
  1. package/dist/abstract/Controller.d.ts +17 -0
  2. package/dist/abstract/Controller.d.ts.map +1 -0
  3. package/dist/abstract/Controller.js +47 -0
  4. package/dist/abstract/Model.d.ts +33 -19
  5. package/dist/abstract/Model.d.ts.map +1 -1
  6. package/dist/abstract/Model.js +177 -119
  7. package/dist/abstract/SchemaTableBuilder.d.ts +1 -1
  8. package/dist/abstract/SchemaTableBuilder.d.ts.map +1 -1
  9. package/dist/abstract/model/ModelRelation.d.ts +23 -0
  10. package/dist/abstract/model/ModelRelation.d.ts.map +1 -0
  11. package/dist/abstract/model/ModelRelation.js +130 -0
  12. package/dist/base/Query.d.ts +6 -4
  13. package/dist/base/Query.d.ts.map +1 -1
  14. package/dist/base/Query.js +62 -21
  15. package/dist/base/Record.d.ts.map +1 -1
  16. package/dist/base/Record.js +7 -5
  17. package/dist/base/Table.d.ts +5 -4
  18. package/dist/base/Table.d.ts.map +1 -1
  19. package/dist/base/Table.js +56 -31
  20. package/dist/helpers/Errors/AdapterErrors/AdapterNotFoundError.d.ts +4 -0
  21. package/dist/helpers/Errors/AdapterErrors/AdapterNotFoundError.d.ts.map +1 -0
  22. package/dist/helpers/Errors/AdapterErrors/AdapterNotFoundError.js +6 -0
  23. package/dist/helpers/Errors/AdapterErrors/ConnectionFailedError.d.ts +4 -0
  24. package/dist/helpers/Errors/AdapterErrors/ConnectionFailedError.d.ts.map +1 -0
  25. package/dist/helpers/Errors/AdapterErrors/ConnectionFailedError.js +6 -0
  26. package/dist/helpers/Errors/AdapterErrors/NoDefaultAdapterError.d.ts +4 -0
  27. package/dist/helpers/Errors/AdapterErrors/NoDefaultAdapterError.d.ts.map +1 -0
  28. package/dist/helpers/Errors/AdapterErrors/NoDefaultAdapterError.js +6 -0
  29. package/dist/helpers/Errors/ExpressionErrors/InvalidExpressionParametersError.d.ts +4 -0
  30. package/dist/helpers/Errors/ExpressionErrors/InvalidExpressionParametersError.d.ts.map +1 -0
  31. package/dist/helpers/Errors/ExpressionErrors/InvalidExpressionParametersError.js +6 -0
  32. package/dist/helpers/Errors/ExpressionErrors/UnknownExpressionTypeError.d.ts +4 -0
  33. package/dist/helpers/Errors/ExpressionErrors/UnknownExpressionTypeError.d.ts.map +1 -0
  34. package/dist/helpers/Errors/ExpressionErrors/UnknownExpressionTypeError.js +6 -0
  35. package/dist/helpers/Errors/ExpressionErrors/UnsupportedQueryPhaseError.d.ts +4 -0
  36. package/dist/helpers/Errors/ExpressionErrors/UnsupportedQueryPhaseError.d.ts.map +1 -0
  37. package/dist/helpers/Errors/ExpressionErrors/UnsupportedQueryPhaseError.js +6 -0
  38. package/dist/helpers/Errors/QueryErrors/UnexpectedEmptyQueryError.d.ts +4 -0
  39. package/dist/helpers/Errors/QueryErrors/UnexpectedEmptyQueryError.d.ts.map +1 -0
  40. package/dist/helpers/Errors/QueryErrors/UnexpectedEmptyQueryError.js +6 -0
  41. package/dist/helpers/Errors/TableErrors/UnknownTableError.d.ts +4 -0
  42. package/dist/helpers/Errors/TableErrors/UnknownTableError.d.ts.map +1 -0
  43. package/dist/helpers/Errors/TableErrors/UnknownTableError.js +6 -0
  44. package/dist/helpers/QueryBuilders/BaseQueryBuilders/BaseDeleteQueryBuilder.d.ts +1 -0
  45. package/dist/helpers/QueryBuilders/BaseQueryBuilders/BaseDeleteQueryBuilder.d.ts.map +1 -0
  46. package/dist/helpers/QueryBuilders/BaseQueryBuilders/BaseDeleteQueryBuilder.js +1 -0
  47. package/dist/helpers/QueryBuilders/BaseQueryBuilders/BaseInsertQueryBuilder.d.ts +1 -0
  48. package/dist/helpers/QueryBuilders/BaseQueryBuilders/BaseInsertQueryBuilder.d.ts.map +1 -0
  49. package/dist/helpers/QueryBuilders/BaseQueryBuilders/BaseInsertQueryBuilder.js +11 -0
  50. package/dist/helpers/QueryBuilders/BaseQueryBuilders/BaseSelectQueryBuilder.d.ts +11 -0
  51. package/dist/helpers/QueryBuilders/BaseQueryBuilders/BaseSelectQueryBuilder.d.ts.map +1 -0
  52. package/dist/helpers/QueryBuilders/BaseQueryBuilders/BaseSelectQueryBuilder.js +27 -0
  53. package/dist/helpers/QueryBuilders/BaseQueryBuilders/BaseUpdateQueryBuilder.d.ts +1 -0
  54. package/dist/helpers/QueryBuilders/BaseQueryBuilders/BaseUpdateQueryBuilder.d.ts.map +1 -0
  55. package/dist/helpers/QueryBuilders/BaseQueryBuilders/BaseUpdateQueryBuilder.js +1 -0
  56. package/dist/helpers/QueryBuilders/ExpressionBuilders/JsonAggregateExpression.d.ts +9 -0
  57. package/dist/helpers/QueryBuilders/ExpressionBuilders/JsonAggregateExpression.d.ts.map +1 -0
  58. package/dist/helpers/QueryBuilders/ExpressionBuilders/JsonAggregateExpression.js +102 -0
  59. package/dist/helpers/QueryBuilders/ExpressionBuilders/SpatialDistanceExpression.d.ts +8 -0
  60. package/dist/helpers/QueryBuilders/ExpressionBuilders/SpatialDistanceExpression.d.ts.map +1 -0
  61. package/dist/helpers/QueryBuilders/ExpressionBuilders/SpatialDistanceExpression.js +63 -0
  62. package/dist/helpers/QueryBuilders/ExpressionBuilders/TextRelevanceExpression.d.ts +8 -0
  63. package/dist/helpers/QueryBuilders/ExpressionBuilders/TextRelevanceExpression.d.ts.map +1 -0
  64. package/dist/helpers/QueryBuilders/ExpressionBuilders/TextRelevanceExpression.js +49 -0
  65. package/dist/helpers/QueryBuilders/QueryDecorators/ExpressionDecorator.d.ts +19 -0
  66. package/dist/helpers/QueryBuilders/QueryDecorators/ExpressionDecorator.d.ts.map +1 -0
  67. package/dist/helpers/QueryBuilders/QueryDecorators/ExpressionDecorator.js +60 -0
  68. package/dist/helpers/QueryBuilders/QueryDecorators/GroupByDecorator.d.ts +9 -0
  69. package/dist/helpers/QueryBuilders/QueryDecorators/GroupByDecorator.d.ts.map +1 -0
  70. package/dist/helpers/QueryBuilders/QueryDecorators/GroupByDecorator.js +27 -0
  71. package/dist/helpers/QueryBuilders/QueryDecorators/JoinDecorator.d.ts +15 -0
  72. package/dist/helpers/QueryBuilders/QueryDecorators/JoinDecorator.d.ts.map +1 -0
  73. package/dist/helpers/QueryBuilders/QueryDecorators/JoinDecorator.js +74 -0
  74. package/dist/helpers/QueryBuilders/QueryDecorators/LimitDecorator.d.ts +10 -0
  75. package/dist/helpers/QueryBuilders/QueryDecorators/LimitDecorator.d.ts.map +1 -0
  76. package/dist/helpers/QueryBuilders/QueryDecorators/LimitDecorator.js +29 -0
  77. package/dist/helpers/QueryBuilders/QueryDecorators/OrderByDecorator.d.ts +9 -0
  78. package/dist/helpers/QueryBuilders/QueryDecorators/OrderByDecorator.d.ts.map +1 -0
  79. package/dist/helpers/QueryBuilders/QueryDecorators/OrderByDecorator.js +27 -0
  80. package/dist/helpers/QueryBuilders/QueryDecorators/QueryDecorator.d.ts +8 -0
  81. package/dist/helpers/QueryBuilders/QueryDecorators/QueryDecorator.d.ts.map +1 -0
  82. package/dist/helpers/QueryBuilders/QueryDecorators/QueryDecorator.js +5 -0
  83. package/dist/helpers/QueryBuilders/QueryDecorators/ValuesDecorator.d.ts +1 -0
  84. package/dist/helpers/QueryBuilders/QueryDecorators/ValuesDecorator.d.ts.map +1 -0
  85. package/dist/helpers/QueryBuilders/QueryDecorators/ValuesDecorator.js +17 -0
  86. package/dist/helpers/QueryBuilders/QueryDecorators/WhereDecorator.d.ts +9 -0
  87. package/dist/helpers/QueryBuilders/QueryDecorators/WhereDecorator.d.ts.map +1 -0
  88. package/dist/helpers/QueryBuilders/QueryDecorators/WhereDecorator.js +29 -0
  89. package/dist/helpers/QueryBuilders/QueryExpressionBuilder.d.ts +54 -0
  90. package/dist/helpers/QueryBuilders/QueryExpressionBuilder.d.ts.map +1 -0
  91. package/dist/helpers/QueryBuilders/QueryExpressionBuilder.js +102 -0
  92. package/dist/helpers/QueryBuilders/QueryStatementBuilder.d.ts +16 -0
  93. package/dist/helpers/QueryBuilders/QueryStatementBuilder.d.ts.map +1 -0
  94. package/dist/helpers/QueryBuilders/QueryStatementBuilder.js +169 -0
  95. package/dist/helpers/QueryBuilders/SqlRenderer.d.ts +15 -0
  96. package/dist/helpers/QueryBuilders/SqlRenderer.d.ts.map +1 -0
  97. package/dist/helpers/QueryBuilders/SqlRenderer.js +79 -0
  98. package/dist/helpers/QueryBuilders/oldQueryStatementBuilder.d.ts +160 -0
  99. package/dist/helpers/QueryBuilders/oldQueryStatementBuilder.d.ts.map +1 -0
  100. package/dist/helpers/QueryBuilders/oldQueryStatementBuilder.js +217 -0
  101. package/dist/interfaces/IExpressionBuilder.d.ts +7 -0
  102. package/dist/interfaces/IExpressionBuilder.d.ts.map +1 -0
  103. package/dist/interfaces/IExpressionBuilder.js +1 -0
  104. package/dist/interfaces/IQueryBuilder.d.ts +5 -0
  105. package/dist/interfaces/IQueryBuilder.d.ts.map +1 -0
  106. package/dist/interfaces/IQueryBuilder.js +1 -0
  107. package/dist/runtime/Container.d.ts +1 -0
  108. package/dist/runtime/Container.d.ts.map +1 -1
  109. package/dist/runtime/Container.js +5 -2
  110. package/dist/runtime/QueryCache.d.ts +12 -0
  111. package/dist/runtime/QueryCache.d.ts.map +1 -0
  112. package/dist/runtime/QueryCache.js +26 -0
  113. package/dist/runtime/Repository.d.ts +6 -4
  114. package/dist/runtime/Repository.d.ts.map +1 -1
  115. package/dist/runtime/Repository.js +95 -60
  116. package/dist/types/expressions.d.ts +154 -0
  117. package/dist/types/expressions.d.ts.map +1 -0
  118. package/dist/types/expressions.js +6 -0
  119. package/dist/types/factories.d.ts +3 -2
  120. package/dist/types/factories.d.ts.map +1 -1
  121. package/dist/types/index.d.ts +1 -0
  122. package/dist/types/index.d.ts.map +1 -1
  123. package/dist/types/index.js +1 -0
  124. package/dist/types/model.d.ts +8 -8
  125. package/dist/types/model.d.ts.map +1 -1
  126. package/dist/types/query.d.ts +56 -2
  127. package/dist/types/query.d.ts.map +1 -1
  128. package/package.json +11 -3
  129. package/dist/helpers/QueryStatementBuilder.d.ts +0 -305
  130. package/dist/helpers/QueryStatementBuilder.d.ts.map +0 -1
  131. package/dist/helpers/QueryStatementBuilder.js +0 -416
@@ -0,0 +1,6 @@
1
+ export default class InvalidExpressionParametersError extends Error {
2
+ constructor(message) {
3
+ super(`Invalid expression parameters: ${message}`);
4
+ this.name = "InvalidExpressionParametersError";
5
+ }
6
+ }
@@ -0,0 +1,4 @@
1
+ export declare class UnknownExpressionTypeError extends Error {
2
+ constructor(type: string);
3
+ }
4
+ //# sourceMappingURL=UnknownExpressionTypeError.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UnknownExpressionTypeError.d.ts","sourceRoot":"","sources":["../../../../src/helpers/Errors/ExpressionErrors/UnknownExpressionTypeError.ts"],"names":[],"mappings":"AAAA,qBAAa,0BAA2B,SAAQ,KAAK;gBACrC,IAAI,EAAE,MAAM;CAI3B"}
@@ -0,0 +1,6 @@
1
+ export class UnknownExpressionTypeError extends Error {
2
+ constructor(type) {
3
+ super(`No builder registered for expression type: ${type}`);
4
+ this.name = "UnknownExpressionTypeError";
5
+ }
6
+ }
@@ -0,0 +1,4 @@
1
+ export default class UnsupportedQueryPhaseError extends Error {
2
+ constructor(phase?: string);
3
+ }
4
+ //# sourceMappingURL=UnsupportedQueryPhaseError.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UnsupportedQueryPhaseError.d.ts","sourceRoot":"","sources":["../../../../src/helpers/Errors/ExpressionErrors/UnsupportedQueryPhaseError.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,OAAO,0BAA2B,SAAQ,KAAK;gBAC7C,KAAK,CAAC,EAAE,MAAM;CAI7B"}
@@ -0,0 +1,6 @@
1
+ export default class UnsupportedQueryPhaseError extends Error {
2
+ constructor(phase) {
3
+ super(`The query evaluation phase "${phase}" is not supported by this expression.`);
4
+ this.name = "UnsupportedQueryPhaseError";
5
+ }
6
+ }
@@ -0,0 +1,4 @@
1
+ export default class UnexpectedEmptyQueryError extends Error {
2
+ constructor();
3
+ }
4
+ //# sourceMappingURL=UnexpectedEmptyQueryError.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UnexpectedEmptyQueryError.d.ts","sourceRoot":"","sources":["../../../../src/helpers/Errors/QueryErrors/UnexpectedEmptyQueryError.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,OAAO,yBAA0B,SAAQ,KAAK;;CAK3D"}
@@ -0,0 +1,6 @@
1
+ export default class UnexpectedEmptyQueryError extends Error {
2
+ constructor() {
3
+ super(`The query is unexpectedly empty. Please ensure that the query is properly constructed and contains valid clauses.`);
4
+ this.name = "UnexpectedEmptyQueryError";
5
+ }
6
+ }
@@ -0,0 +1,4 @@
1
+ export default class UnknownTableError extends Error {
2
+ constructor(tableName: string);
3
+ }
4
+ //# sourceMappingURL=UnknownTableError.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UnknownTableError.d.ts","sourceRoot":"","sources":["../../../../src/helpers/Errors/TableErrors/UnknownTableError.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,OAAO,iBAAkB,SAAQ,KAAK;gBACpC,SAAS,EAAE,MAAM;CAIhC"}
@@ -0,0 +1,6 @@
1
+ export default class UnknownTableError extends Error {
2
+ constructor(tableName) {
3
+ super(`Unknown table: ${tableName}`);
4
+ this.name = "UnknownTableError";
5
+ }
6
+ }
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=BaseDeleteQueryBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BaseDeleteQueryBuilder.d.ts","sourceRoot":"","sources":["../../../../src/helpers/QueryBuilders/BaseQueryBuilders/BaseDeleteQueryBuilder.ts"],"names":[],"mappings":""}
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=BaseInsertQueryBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BaseInsertQueryBuilder.d.ts","sourceRoot":"","sources":["../../../../src/helpers/QueryBuilders/BaseQueryBuilders/BaseInsertQueryBuilder.ts"],"names":[],"mappings":""}
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ // import IQueryBuilder from "../../../interfaces/IQueryBuilder.js";
3
+ // export default class BaseInsertQueryBuilder implements IQueryBuilder {
4
+ // private tableName: string;
5
+ // constructor(tableName: string) {
6
+ // this.tableName = tableName;
7
+ // }
8
+ // async build(): Promise<string> {
9
+ // return `INSERT INTO "${this.tableName}"`;
10
+ // }
11
+ // }
@@ -0,0 +1,11 @@
1
+ import { QueryContext } from "../../../index";
2
+ import IQueryBuilder from "../../../interfaces/IQueryBuilder.js";
3
+ export default class BaseSelectQueryBuilder implements IQueryBuilder {
4
+ private tableName;
5
+ private select;
6
+ private joinsSelect?;
7
+ private expressionsSelect?;
8
+ constructor(tableName: string, select: string[], joinsSelect?: string[], expressionsSelect?: string[]);
9
+ build(): Promise<QueryContext>;
10
+ }
11
+ //# sourceMappingURL=BaseSelectQueryBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BaseSelectQueryBuilder.d.ts","sourceRoot":"","sources":["../../../../src/helpers/QueryBuilders/BaseQueryBuilders/BaseSelectQueryBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,aAAa,MAAM,mCAAmC,CAAC;AAE9D,MAAM,CAAC,OAAO,OAAO,sBAAuB,YAAW,aAAa;IAChE,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,MAAM,CAAW;IACzB,OAAO,CAAC,WAAW,CAAC,CAAW;IAC/B,OAAO,CAAC,iBAAiB,CAAC,CAAW;gBAEzB,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,EAAE,iBAAiB,CAAC,EAAE,MAAM,EAAE;IAO/F,KAAK,IAAI,OAAO,CAAC,YAAY,CAAC;CAQvC"}
@@ -0,0 +1,27 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ export default class BaseSelectQueryBuilder {
11
+ constructor(tableName, select, joinsSelect, expressionsSelect) {
12
+ this.tableName = tableName;
13
+ this.select = select;
14
+ this.joinsSelect = joinsSelect;
15
+ this.expressionsSelect = expressionsSelect;
16
+ }
17
+ build() {
18
+ return __awaiter(this, void 0, void 0, function* () {
19
+ return {
20
+ select: this.select,
21
+ joinsSelect: this.joinsSelect,
22
+ from: this.tableName,
23
+ expressionSelect: this.expressionsSelect,
24
+ };
25
+ });
26
+ }
27
+ }
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=BaseUpdateQueryBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BaseUpdateQueryBuilder.d.ts","sourceRoot":"","sources":["../../../../src/helpers/QueryBuilders/BaseQueryBuilders/BaseUpdateQueryBuilder.ts"],"names":[],"mappings":""}
@@ -0,0 +1,9 @@
1
+ import { expressionClause, JsonAggregateQueryExpression } from "../../../index.js";
2
+ import IExpressionBuilder from "../../../interfaces/IExpressionBuilder.js";
3
+ export default class JsonAggregateExpression implements IExpressionBuilder {
4
+ build(expression: JsonAggregateQueryExpression): expressionClause;
5
+ private buildJsonBuildObject;
6
+ validate(expression: JsonAggregateQueryExpression): boolean;
7
+ get defaultRequirements(): JsonAggregateQueryExpression['requirements'];
8
+ }
9
+ //# sourceMappingURL=JsonAggregateExpression.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JsonAggregateExpression.d.ts","sourceRoot":"","sources":["../../../../src/helpers/QueryBuilders/ExpressionBuilders/JsonAggregateExpression.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,4BAA4B,EAAwE,MAAM,gBAAgB,CAAC;AACtJ,OAAO,kBAAkB,MAAM,wCAAwC,CAAC;AAUxE,MAAM,CAAC,OAAO,OAAO,uBAAwB,YAAW,kBAAkB;IACtE,KAAK,CAAC,UAAU,EAAE,4BAA4B,GAAG,gBAAgB;IA8BjE,OAAO,CAAC,oBAAoB;IAqE5B,QAAQ,CAAC,UAAU,EAAE,4BAA4B,GAAG,OAAO;IAa3D,IAAI,mBAAmB,IAAI,4BAA4B,CAAC,cAAc,CAAC,CAOtE;CACJ"}
@@ -0,0 +1,102 @@
1
+ import InvalidExpressionParametersError from "../../../helpers/Errors/ExpressionErrors/InvalidExpressionParametersError.js";
2
+ import { QueryEvaluationPhase } from "../../../index.js";
3
+ import QueryExpressionBuilder from "../QueryExpressionBuilder.js";
4
+ import QueryStatementBuilder from "../QueryStatementBuilder.js";
5
+ export default class JsonAggregateExpression {
6
+ build(expression) {
7
+ if (!this.validate(expression)) {
8
+ throw new InvalidExpressionParametersError("Invalid JSON aggregate expression parameters.");
9
+ }
10
+ const jsonBuildObjects = this.buildJsonBuildObject(expression);
11
+ const baseExpressionClause = `JSON_AGG(
12
+ ${jsonBuildObjects.sql}
13
+ ) AS ${expression.parameters.alias}`;
14
+ const groupByClause = expression.parameters.groupByColumns.length > 0
15
+ ? expression.parameters.groupByColumns
16
+ .map(col => col.includes(".") ? `"${col.replace(".", "__")}"` : `"${col}"`)
17
+ .join(", ")
18
+ : undefined;
19
+ return {
20
+ baseExpressionClause,
21
+ phase: expression.requirements.phase,
22
+ requiresWrapping: expression.requirements.requiresSelectWrapping || false,
23
+ groupByClause,
24
+ whereClause: jsonBuildObjects.whereClause,
25
+ valueClauseKeywords: jsonBuildObjects.valueClauseKeywords,
26
+ havingClause: expression.parameters.having
27
+ };
28
+ }
29
+ buildJsonBuildObject(expression) {
30
+ var _a, _b;
31
+ const columnPart = expression.parameters.columns
32
+ .map(col => `'${col}', "${expression.parameters.table}_${col}"`)
33
+ .join(",\n ");
34
+ const computedPart = ((_a = expression.parameters.computed) === null || _a === void 0 ? void 0 : _a.length)
35
+ ? expression.parameters.computed
36
+ .map(comp => {
37
+ var _a;
38
+ const valueClauseKeywords = [`${comp.parameters.alias}_lat`, `${comp.parameters.alias}_lon`];
39
+ const expr = {
40
+ type: comp.type,
41
+ parameters: Object.assign(Object.assign({}, comp.parameters), { valueClauseKeywords: comp.type === 'spatialDistance' ? valueClauseKeywords : comp.parameters.valueClauseKeywords, isComputed: true }),
42
+ requirements: QueryExpressionBuilder.getExpressionDefaultRequirements(comp.type)
43
+ };
44
+ const builder = QueryExpressionBuilder.buildExpressionsPart([expr])[0];
45
+ return {
46
+ sql: `'${comp.parameters.alias}', ${(_a = builder.baseExpressionClause) === null || _a === void 0 ? void 0 : _a.split(" AS ")[0]}`,
47
+ whereClause: builder.whereClause,
48
+ valueClauseKeywords: builder.valueClauseKeywords
49
+ };
50
+ }) : [];
51
+ const computedSqlPart = computedPart.length
52
+ ? computedPart.map(c => c.sql).join(",\n ")
53
+ : "";
54
+ const whereClauses = computedPart
55
+ .flatMap(c => c.whereClause ? QueryStatementBuilder.normalizeQueryConditions(c.whereClause) : []);
56
+ const valueClauseKeywords = computedPart
57
+ .flatMap(c => c.valueClauseKeywords || []);
58
+ const nestedPart = ((_b = expression.parameters.nested) === null || _b === void 0 ? void 0 : _b.length)
59
+ ? expression.parameters.nested
60
+ .map(n => {
61
+ return `'${n.alias}', ${this.buildJsonBuildObject({
62
+ type: 'jsonAggregate',
63
+ parameters: {
64
+ table: n.table,
65
+ alias: n.alias,
66
+ columns: n.columns,
67
+ computed: n.computed,
68
+ nested: n.nested,
69
+ groupByColumns: []
70
+ },
71
+ requirements: this.defaultRequirements
72
+ }).sql}`;
73
+ })
74
+ .join(",\n ")
75
+ : "";
76
+ const parts = [columnPart, computedSqlPart, nestedPart].filter(Boolean).join(",\n ");
77
+ return {
78
+ sql: `JSON_BUILD_OBJECT(
79
+ ${parts}
80
+ )`,
81
+ whereClause: whereClauses,
82
+ valueClauseKeywords: valueClauseKeywords
83
+ };
84
+ }
85
+ validate(expression) {
86
+ if (expression.type !== 'jsonAggregate') {
87
+ return false;
88
+ }
89
+ return (Array.isArray(expression.parameters.columns) &&
90
+ typeof expression.parameters.table === 'string' &&
91
+ Array.isArray(expression.parameters.groupByColumns) &&
92
+ typeof expression.parameters.alias === 'string');
93
+ }
94
+ get defaultRequirements() {
95
+ return {
96
+ phase: QueryEvaluationPhase.PROJECTION,
97
+ cardinality: 'row',
98
+ requiresAlias: true,
99
+ requiresSelectWrapping: true
100
+ };
101
+ }
102
+ }
@@ -0,0 +1,8 @@
1
+ import IExpressionBuilder from "../../../interfaces/IExpressionBuilder.js";
2
+ import { expressionClause, SpatialQueryExpression } from "../../../types/index.js";
3
+ export default class SpatialDistanceExpression implements IExpressionBuilder {
4
+ build(expression: SpatialQueryExpression): expressionClause;
5
+ validate(expression: SpatialQueryExpression): boolean;
6
+ get defaultRequirements(): SpatialQueryExpression['requirements'];
7
+ }
8
+ //# sourceMappingURL=SpatialDistanceExpression.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SpatialDistanceExpression.d.ts","sourceRoot":"","sources":["../../../../src/helpers/QueryBuilders/ExpressionBuilders/SpatialDistanceExpression.ts"],"names":[],"mappings":"AACA,OAAO,kBAAkB,MAAM,wCAAwC,CAAC;AACxE,OAAO,EAAE,gBAAgB,EAAwB,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAGtG,MAAM,CAAC,OAAO,OAAO,yBAA0B,YAAW,kBAAkB;IACxE,KAAK,CAAC,UAAU,EAAE,sBAAsB,GAAG,gBAAgB;IAkD3D,QAAQ,CAAC,UAAU,EAAE,sBAAsB,GAAG,OAAO;IAcrD,IAAI,mBAAmB,IAAI,sBAAsB,CAAC,cAAc,CAAC,CAOhE;CACJ"}
@@ -0,0 +1,63 @@
1
+ import InvalidExpressionParametersError from "../../../helpers/Errors/ExpressionErrors/InvalidExpressionParametersError.js";
2
+ import { QueryEvaluationPhase } from "../../../types/index.js";
3
+ import QueryStatementBuilder from "../QueryStatementBuilder.js";
4
+ export default class SpatialDistanceExpression {
5
+ build(expression) {
6
+ var _a;
7
+ if (!this.validate(expression)) {
8
+ throw new InvalidExpressionParametersError("Invalid spatial distance expression parameters.");
9
+ }
10
+ const earthRadius = (_a = expression.parameters.earthRadius) !== null && _a !== void 0 ? _a : (expression.parameters.unit === 'km' ? 6371 : 3959);
11
+ const isComputed = expression.parameters.isComputed;
12
+ const baseExpressionClause = `
13
+ ${earthRadius} * acos(
14
+ cos(radians(@${expression.parameters.valueClauseKeywords[0]}))
15
+ * cos(radians(${isComputed ? expression.parameters.targetColumns.lat.replace(".", "_") : `${expression.parameters.targetColumns.lat}`}))
16
+ * cos(
17
+ radians(${isComputed ? expression.parameters.targetColumns.lon.replace(".", "_") : `${expression.parameters.targetColumns.lon}`})
18
+ - radians(@${expression.parameters.valueClauseKeywords[1]})
19
+ )
20
+ + sin(radians(@${expression.parameters.valueClauseKeywords[0]}))
21
+ * sin(radians(${isComputed ? expression.parameters.targetColumns.lat.replace(".", "_") : `${expression.parameters.targetColumns.lat}`}))
22
+ ) AS ${expression.parameters.alias}
23
+ `.trim();
24
+ const orderByClause = {
25
+ column: expression.parameters.alias,
26
+ direction: expression.parameters.orderByDistance || 'ASC'
27
+ };
28
+ return {
29
+ baseExpressionClause,
30
+ phase: expression.requirements.phase,
31
+ requiresWrapping: expression.requirements.requiresSelectWrapping || false,
32
+ whereClause: [
33
+ {
34
+ column: expression.parameters.alias,
35
+ operator: '<=',
36
+ value: expression.parameters.maxDistance
37
+ },
38
+ ...QueryStatementBuilder.normalizeQueryConditions(expression.parameters.where || [])
39
+ ],
40
+ valueClauseKeywords: expression.parameters.valueClauseKeywords,
41
+ orderByClause
42
+ };
43
+ }
44
+ validate(expression) {
45
+ // Basic validation for spatial distance expression
46
+ return (expression.type === 'spatialDistance' &&
47
+ typeof expression.parameters.referencePoint.lat === 'number' &&
48
+ typeof expression.parameters.referencePoint.lon === 'number' &&
49
+ typeof expression.parameters.targetColumns.lat === 'string' &&
50
+ typeof expression.parameters.targetColumns.lon === 'string' &&
51
+ (expression.parameters.unit === 'km' ||
52
+ expression.parameters.unit === 'miles') &&
53
+ typeof expression.parameters.alias === 'string');
54
+ }
55
+ get defaultRequirements() {
56
+ return {
57
+ phase: QueryEvaluationPhase.PROJECTION,
58
+ cardinality: 'row',
59
+ requiresAlias: true,
60
+ requiresSelectWrapping: true
61
+ };
62
+ }
63
+ }
@@ -0,0 +1,8 @@
1
+ import IExpressionBuilder from "../../../interfaces/IExpressionBuilder.js";
2
+ import { expressionClause, QueryExpressionRequirements, TextRelevanceQueryExpression } from "../../../types/index.js";
3
+ export default class TextRelevanceExpression implements IExpressionBuilder {
4
+ build(expression: TextRelevanceQueryExpression): expressionClause;
5
+ validate(expression: TextRelevanceQueryExpression): boolean;
6
+ get defaultRequirements(): QueryExpressionRequirements;
7
+ }
8
+ //# sourceMappingURL=TextRelevanceExpression.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TextRelevanceExpression.d.ts","sourceRoot":"","sources":["../../../../src/helpers/QueryBuilders/ExpressionBuilders/TextRelevanceExpression.ts"],"names":[],"mappings":"AACA,OAAO,kBAAkB,MAAM,wCAAwC,CAAC;AACxE,OAAO,EAAE,gBAAgB,EAAwB,2BAA2B,EAAE,4BAA4B,EAAE,MAAM,sBAAsB,CAAC;AAEzI,MAAM,CAAC,OAAO,OAAO,uBAAwB,YAAW,kBAAkB;IACtE,KAAK,CAAC,UAAU,EAAE,4BAA4B,GAAG,gBAAgB;IAqCjE,QAAQ,CAAC,UAAU,EAAE,4BAA4B,GAAG,OAAO;IAW3D,IAAI,mBAAmB,IAAI,2BAA2B,CAOrD;CACJ"}
@@ -0,0 +1,49 @@
1
+ import InvalidExpressionParametersError from "../../../helpers/Errors/ExpressionErrors/InvalidExpressionParametersError.js";
2
+ import { QueryEvaluationPhase } from "../../../types/index.js";
3
+ export default class TextRelevanceExpression {
4
+ build(expression) {
5
+ if (!this.validate(expression)) {
6
+ throw new InvalidExpressionParametersError("Invalid text relevance expression parameters.");
7
+ }
8
+ // Score: 3 = exact match, 2 = starts with, 1 = contains, 0 = no match
9
+ const columnConcat = expression.parameters.targetColumns
10
+ .map(col => `COALESCE(${col}, '')`)
11
+ .join(" || ' ' || ");
12
+ const baseExpressionClause = `(
13
+ CASE
14
+ WHEN LOWER(${columnConcat}) = LOWER(@${expression.parameters.valueClauseKeywords[0]}) THEN 3
15
+ WHEN LOWER(${columnConcat}) LIKE LOWER(@${expression.parameters.valueClauseKeywords[0]} || '%') THEN 2
16
+ WHEN LOWER(${columnConcat}) LIKE LOWER('%' || @${expression.parameters.valueClauseKeywords[0]} || '%') THEN 1
17
+ ELSE 0
18
+ END
19
+ ) AS ${expression.parameters.alias}`;
20
+ const orderByClause = {
21
+ column: expression.parameters.alias,
22
+ direction: expression.parameters.orderByRelevance || 'ASC'
23
+ };
24
+ return {
25
+ baseExpressionClause,
26
+ phase: expression.requirements.phase,
27
+ requiresWrapping: expression.requirements.requiresSelectWrapping || false,
28
+ whereClause: expression.parameters.where,
29
+ valueClauseKeywords: expression.parameters.valueClauseKeywords,
30
+ orderByClause,
31
+ };
32
+ }
33
+ validate(expression) {
34
+ return (expression.type === 'textRelevance' &&
35
+ typeof expression.parameters.searchTerm === 'string' &&
36
+ Array.isArray(expression.parameters.targetColumns) &&
37
+ expression.parameters.targetColumns.every(col => typeof col === 'string') &&
38
+ typeof expression.parameters.alias === 'string' &&
39
+ typeof expression.parameters.minimumRelevance == 'number');
40
+ }
41
+ get defaultRequirements() {
42
+ return {
43
+ phase: QueryEvaluationPhase.PROJECTION,
44
+ cardinality: 'row',
45
+ requiresAlias: true,
46
+ requiresSelectWrapping: true
47
+ };
48
+ }
49
+ }
@@ -0,0 +1,19 @@
1
+ import { expressionClause, OrderByDefinition, QueryComparisonParameters, QueryContext } from "../../../types/index.js";
2
+ import QueryDecorator from "./QueryDecorator.js";
3
+ import IQueryBuilder from "../../../interfaces/IQueryBuilder.js";
4
+ export default class ExpressionDecorator extends QueryDecorator {
5
+ private parsedExpressions;
6
+ whereClauses?: QueryComparisonParameters[];
7
+ orderByClauses?: OrderByDefinition[];
8
+ groupByClauses?: string[];
9
+ havingClauses?: QueryComparisonParameters[];
10
+ valueClauseKeywords: Set<string>;
11
+ constructor(component: IQueryBuilder, expressions: expressionClause[]);
12
+ build(): Promise<QueryContext>;
13
+ setWhereClauses(): void;
14
+ setOrderByClauses(): void;
15
+ setGroupByClauses(): void;
16
+ setHavingClauses(): void;
17
+ setValueClauseKeywords(): void;
18
+ }
19
+ //# sourceMappingURL=ExpressionDecorator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExpressionDecorator.d.ts","sourceRoot":"","sources":["../../../../src/helpers/QueryBuilders/QueryDecorators/ExpressionDecorator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,yBAAyB,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpH,OAAO,cAAc,MAAM,qBAAqB,CAAC;AACjD,OAAO,aAAa,MAAM,mCAAmC,CAAC;AAG9D,MAAM,CAAC,OAAO,OAAO,mBAAoB,SAAQ,cAAc;IAC3D,OAAO,CAAC,iBAAiB,CAAqB;IACvC,YAAY,CAAC,EAAE,yBAAyB,EAAE,CAAC;IAC3C,cAAc,CAAC,EAAE,iBAAiB,EAAE,CAAC;IACrC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,aAAa,CAAC,EAAE,yBAAyB,EAAE,CAAC;IAC5C,mBAAmB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAa;gBAGhD,SAAS,EAAE,aAAa,EACxB,WAAW,EAAE,gBAAgB,EAAE;IAW7B,KAAK,IAAI,OAAO,CAAC,YAAY,CAAC;IAU7B,eAAe,IAAI,IAAI;IASvB,iBAAiB,IAAI,IAAI;IAIzB,iBAAiB,IAAI,IAAI;IAIzB,gBAAgB,IAAI,IAAI;IASxB,sBAAsB,IAAI,IAAI;CASxC"}
@@ -0,0 +1,60 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import QueryDecorator from "./QueryDecorator.js";
11
+ import QueryStatementBuilder from "../QueryStatementBuilder.js";
12
+ export default class ExpressionDecorator extends QueryDecorator {
13
+ constructor(component, expressions) {
14
+ super(component);
15
+ this.valueClauseKeywords = new Set();
16
+ this.parsedExpressions = expressions;
17
+ this.setWhereClauses();
18
+ this.setOrderByClauses();
19
+ this.setGroupByClauses();
20
+ this.setHavingClauses();
21
+ this.setValueClauseKeywords();
22
+ }
23
+ build() {
24
+ return __awaiter(this, void 0, void 0, function* () {
25
+ var _a, _b;
26
+ const context = yield this.component.build();
27
+ (_a = context.expressionSelect) !== null && _a !== void 0 ? _a : (context.expressionSelect = []);
28
+ context.expressionSelect.push(...this.parsedExpressions.map(e => e.baseExpressionClause));
29
+ (_b = context.conditions) !== null && _b !== void 0 ? _b : (context.conditions = {});
30
+ return context;
31
+ });
32
+ }
33
+ setWhereClauses() {
34
+ this.whereClauses = this.parsedExpressions
35
+ .flatMap(expr => expr.whereClause
36
+ ? QueryStatementBuilder.normalizeQueryConditions(expr.whereClause)
37
+ : []);
38
+ }
39
+ setOrderByClauses() {
40
+ this.orderByClauses = this.parsedExpressions.map(expr => expr.orderByClause).filter(o => o !== undefined);
41
+ }
42
+ setGroupByClauses() {
43
+ this.groupByClauses = this.parsedExpressions.map(expr => expr.groupByClause).filter(g => g !== undefined);
44
+ }
45
+ setHavingClauses() {
46
+ this.havingClauses = this.parsedExpressions
47
+ .flatMap(expr => expr.havingClause
48
+ ? QueryStatementBuilder.normalizeQueryConditions(expr.havingClause)
49
+ : []);
50
+ }
51
+ setValueClauseKeywords() {
52
+ this.parsedExpressions.forEach(expr => {
53
+ if (expr.valueClauseKeywords && expr.valueClauseKeywords.length > 0) {
54
+ for (const keyword of expr.valueClauseKeywords) {
55
+ this.valueClauseKeywords.add(keyword);
56
+ }
57
+ }
58
+ });
59
+ }
60
+ }
@@ -0,0 +1,9 @@
1
+ import IQueryBuilder from "../../../interfaces/IQueryBuilder.js";
2
+ import QueryDecorator from "./QueryDecorator.js";
3
+ import { QueryContext } from "../../../types/query.js";
4
+ export default class GroupByDecorator extends QueryDecorator {
5
+ private groupByColumns?;
6
+ constructor(component: IQueryBuilder, groupByColumns?: string[]);
7
+ build(): Promise<QueryContext>;
8
+ }
9
+ //# sourceMappingURL=GroupByDecorator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GroupByDecorator.d.ts","sourceRoot":"","sources":["../../../../src/helpers/QueryBuilders/QueryDecorators/GroupByDecorator.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,MAAM,mCAAmC,CAAC;AAC9D,OAAO,cAAc,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,cAAc;IACxD,OAAO,CAAC,cAAc,CAAC,CAAW;gBAEtB,SAAS,EAAE,aAAa,EAAE,cAAc,CAAC,EAAE,MAAM,EAAE;IAKzD,KAAK,IAAI,OAAO,CAAC,YAAY,CAAC;CASvC"}
@@ -0,0 +1,27 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import QueryDecorator from "./QueryDecorator.js";
11
+ export default class GroupByDecorator extends QueryDecorator {
12
+ constructor(component, groupByColumns) {
13
+ super(component);
14
+ this.groupByColumns = groupByColumns;
15
+ }
16
+ build() {
17
+ return __awaiter(this, void 0, void 0, function* () {
18
+ var _a;
19
+ const context = yield this.component.build();
20
+ if (this.groupByColumns) {
21
+ (_a = context.groupBy) !== null && _a !== void 0 ? _a : (context.groupBy = []);
22
+ context.groupBy.push(...this.groupByColumns);
23
+ }
24
+ return context;
25
+ });
26
+ }
27
+ }
@@ -0,0 +1,15 @@
1
+ import { QueryLayers, QueryContext } from "../../../index.js";
2
+ import QueryDecorator from "./QueryDecorator.js";
3
+ import IQueryBuilder from "../../../interfaces/IQueryBuilder.js";
4
+ import { TableColumnInfo } from "../../../types/index.js";
5
+ export default class JoinDecorator extends QueryDecorator {
6
+ private fromTableName;
7
+ private joins;
8
+ private tableColumnsCache;
9
+ private options?;
10
+ constructor(builder: IQueryBuilder, layer: QueryLayers, tableColumnInformation: Map<string, TableColumnInfo[]>);
11
+ build(): Promise<QueryContext>;
12
+ private buildJoinSelect;
13
+ private buildJoinPart;
14
+ }
15
+ //# sourceMappingURL=JoinDecorator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JoinDecorator.d.ts","sourceRoot":"","sources":["../../../../src/helpers/QueryBuilders/QueryDecorators/JoinDecorator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsD,WAAW,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC/G,OAAO,cAAc,MAAM,qBAAqB,CAAC;AACjD,OAAO,aAAa,MAAM,mCAAmC,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,cAAc;IACrD,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,KAAK,CAAgB;IAC7B,OAAO,CAAC,iBAAiB,CAAiC;IAC1D,OAAO,CAAC,OAAO,CAAC,CAAgD;gBAEpD,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,WAAW,EAAE,sBAAsB,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,EAAE,CAAC;IAmBxG,KAAK,IAAI,OAAO,CAAC,YAAY,CAAC;YActB,eAAe;IAuB7B,OAAO,CAAC,aAAa;CAgBxB"}