sof-mssql 2.1.0 → 2.3.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.
- package/dist/fhirpath/visitor.d.ts +78 -0
- package/dist/fhirpath/visitor.d.ts.map +1 -1
- package/dist/fhirpath/visitor.js +208 -11
- package/dist/fhirpath/visitor.js.map +1 -1
- package/dist/parser.d.ts +1 -1
- package/dist/parser.js +1 -1
- package/dist/queryGenerator/index.d.ts +0 -4
- package/dist/queryGenerator/index.d.ts.map +1 -1
- package/dist/queryGenerator/index.js +1 -9
- package/dist/queryGenerator/index.js.map +1 -1
- package/dist/queryGenerator/treeWalker/aliasGenerator.d.ts +26 -0
- package/dist/queryGenerator/treeWalker/aliasGenerator.d.ts.map +1 -0
- package/dist/queryGenerator/treeWalker/aliasGenerator.js +31 -0
- package/dist/queryGenerator/treeWalker/aliasGenerator.js.map +1 -0
- package/dist/queryGenerator/treeWalker/classify.d.ts +19 -0
- package/dist/queryGenerator/treeWalker/classify.d.ts.map +1 -0
- package/dist/queryGenerator/treeWalker/classify.js +36 -0
- package/dist/queryGenerator/treeWalker/classify.js.map +1 -0
- package/dist/queryGenerator/treeWalker/compile.d.ts +29 -0
- package/dist/queryGenerator/treeWalker/compile.d.ts.map +1 -0
- package/dist/queryGenerator/treeWalker/compile.js +97 -0
- package/dist/queryGenerator/treeWalker/compile.js.map +1 -0
- package/dist/queryGenerator/treeWalker/cteTemplates.d.ts +58 -0
- package/dist/queryGenerator/treeWalker/cteTemplates.d.ts.map +1 -0
- package/dist/queryGenerator/treeWalker/cteTemplates.js +131 -0
- package/dist/queryGenerator/treeWalker/cteTemplates.js.map +1 -0
- package/dist/queryGenerator/treeWalker/index.d.ts +6 -0
- package/dist/queryGenerator/treeWalker/index.d.ts.map +1 -0
- package/dist/queryGenerator/treeWalker/index.js +9 -0
- package/dist/queryGenerator/treeWalker/index.js.map +1 -0
- package/dist/queryGenerator/treeWalker/mergeSiblings.d.ts +28 -0
- package/dist/queryGenerator/treeWalker/mergeSiblings.d.ts.map +1 -0
- package/dist/queryGenerator/treeWalker/mergeSiblings.js +54 -0
- package/dist/queryGenerator/treeWalker/mergeSiblings.js.map +1 -0
- package/dist/queryGenerator/treeWalker/operators/columnsOnly.d.ts +40 -0
- package/dist/queryGenerator/treeWalker/operators/columnsOnly.d.ts.map +1 -0
- package/dist/queryGenerator/treeWalker/operators/columnsOnly.js +56 -0
- package/dist/queryGenerator/treeWalker/operators/columnsOnly.js.map +1 -0
- package/dist/queryGenerator/treeWalker/operators/forEach.d.ts +47 -0
- package/dist/queryGenerator/treeWalker/operators/forEach.d.ts.map +1 -0
- package/dist/queryGenerator/treeWalker/operators/forEach.js +150 -0
- package/dist/queryGenerator/treeWalker/operators/forEach.js.map +1 -0
- package/dist/queryGenerator/treeWalker/operators/group.d.ts +35 -0
- package/dist/queryGenerator/treeWalker/operators/group.d.ts.map +1 -0
- package/dist/queryGenerator/treeWalker/operators/group.js +56 -0
- package/dist/queryGenerator/treeWalker/operators/group.js.map +1 -0
- package/dist/queryGenerator/treeWalker/operators/repeat.d.ts +47 -0
- package/dist/queryGenerator/treeWalker/operators/repeat.d.ts.map +1 -0
- package/dist/queryGenerator/treeWalker/operators/repeat.js +122 -0
- package/dist/queryGenerator/treeWalker/operators/repeat.js.map +1 -0
- package/dist/queryGenerator/treeWalker/operators/unionAll.d.ts +54 -0
- package/dist/queryGenerator/treeWalker/operators/unionAll.d.ts.map +1 -0
- package/dist/queryGenerator/treeWalker/operators/unionAll.js +121 -0
- package/dist/queryGenerator/treeWalker/operators/unionAll.js.map +1 -0
- package/dist/queryGenerator/treeWalker/render.d.ts +34 -0
- package/dist/queryGenerator/treeWalker/render.d.ts.map +1 -0
- package/dist/queryGenerator/treeWalker/render.js +41 -0
- package/dist/queryGenerator/treeWalker/render.js.map +1 -0
- package/dist/queryGenerator/treeWalker/types.d.ts +64 -0
- package/dist/queryGenerator/treeWalker/types.d.ts.map +1 -0
- package/dist/queryGenerator/treeWalker/types.js +14 -0
- package/dist/queryGenerator/treeWalker/types.js.map +1 -0
- package/dist/queryGenerator/treeWalker/walker.d.ts +36 -0
- package/dist/queryGenerator/treeWalker/walker.d.ts.map +1 -0
- package/dist/queryGenerator/treeWalker/walker.js +58 -0
- package/dist/queryGenerator/treeWalker/walker.js.map +1 -0
- package/dist/queryGenerator.d.ts +8 -94
- package/dist/queryGenerator.d.ts.map +1 -1
- package/dist/queryGenerator.js +16 -268
- package/dist/queryGenerator.js.map +1 -1
- package/dist/tests/utils/database.d.ts +2 -0
- package/dist/tests/utils/database.d.ts.map +1 -1
- package/dist/tests/utils/database.js +10 -1
- package/dist/tests/utils/database.js.map +1 -1
- package/dist/tests/utils/generator.d.ts +2 -0
- package/dist/tests/utils/generator.d.ts.map +1 -1
- package/dist/tests/utils/generator.js +24 -0
- package/dist/tests/utils/generator.js.map +1 -1
- package/dist/tests/utils/reporter.d.ts +1 -1
- package/dist/tests/utils/reporter.d.ts.map +1 -1
- package/dist/tests/utils/reporter.js +5 -4
- package/dist/tests/utils/reporter.js.map +1 -1
- package/dist/tests/utils/types.d.ts +1 -1
- package/dist/tests/utils/types.js +1 -1
- package/dist/types.d.ts +1 -1
- package/package.json +2 -1
- package/dist/queryGenerator/ForEachProcessor.d.ts +0 -127
- package/dist/queryGenerator/ForEachProcessor.d.ts.map +0 -1
- package/dist/queryGenerator/ForEachProcessor.js +0 -351
- package/dist/queryGenerator/ForEachProcessor.js.map +0 -1
- package/dist/queryGenerator/RepeatProcessor.d.ts +0 -177
- package/dist/queryGenerator/RepeatProcessor.d.ts.map +0 -1
- package/dist/queryGenerator/RepeatProcessor.js +0 -336
- package/dist/queryGenerator/RepeatProcessor.js.map +0 -1
- package/dist/queryGenerator/SelectClauseBuilder.d.ts +0 -108
- package/dist/queryGenerator/SelectClauseBuilder.d.ts.map +0 -1
- package/dist/queryGenerator/SelectClauseBuilder.js +0 -346
- package/dist/queryGenerator/SelectClauseBuilder.js.map +0 -1
- package/dist/queryGenerator/SelectCombinationExpander.d.ts +0 -42
- package/dist/queryGenerator/SelectCombinationExpander.d.ts.map +0 -1
- package/dist/queryGenerator/SelectCombinationExpander.js +0 -95
- package/dist/queryGenerator/SelectCombinationExpander.js.map +0 -1
package/dist/types.d.ts
CHANGED
|
@@ -268,7 +268,7 @@ export interface TriggerDefinition {
|
|
|
268
268
|
export interface Dosage {
|
|
269
269
|
}
|
|
270
270
|
/**
|
|
271
|
-
* Test case structure from
|
|
271
|
+
* Test case structure from the SQL on FHIR repository.
|
|
272
272
|
*/
|
|
273
273
|
export interface TestCase {
|
|
274
274
|
title: string;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sof-mssql",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.3.0",
|
|
4
4
|
"description": "A SQL on FHIR view runner that transpiles view definitions into T-SQL queries for MS SQL Server",
|
|
5
5
|
"author": "Australian e-Health Research Centre, CSIRO",
|
|
6
6
|
"contributors": [
|
|
@@ -66,6 +66,7 @@
|
|
|
66
66
|
"@vitest/ui": "^3.2.4",
|
|
67
67
|
"antlr4ts-cli": "^0.5.0-alpha.4",
|
|
68
68
|
"eslint": "^9.11.1",
|
|
69
|
+
"lossless-json": "^4.3.0",
|
|
69
70
|
"prettier": "^3.6.2",
|
|
70
71
|
"tsx": "^4.20.6",
|
|
71
72
|
"typescript": "^5.6.2",
|
|
@@ -1,127 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Processes forEach operations and generates CROSS APPLY clauses.
|
|
3
|
-
*/
|
|
4
|
-
import { TranspilerContext } from "../fhirpath/transpiler.js";
|
|
5
|
-
import { ViewDefinitionSelect } from "../types.js";
|
|
6
|
-
import { SelectCombination } from "./SelectCombinationExpander.js";
|
|
7
|
-
import { PathParser } from "./PathParser.js";
|
|
8
|
-
/**
|
|
9
|
-
* Result of building forEach context map.
|
|
10
|
-
*/
|
|
11
|
-
interface ForEachContextMapResult {
|
|
12
|
-
forEachContextMap: Map<ViewDefinitionSelect, TranspilerContext>;
|
|
13
|
-
topLevelForEach: ViewDefinitionSelect[];
|
|
14
|
-
}
|
|
15
|
-
/**
|
|
16
|
-
* Handles all forEach-related processing and CROSS APPLY generation.
|
|
17
|
-
*/
|
|
18
|
-
export declare class ForEachProcessor {
|
|
19
|
-
private readonly pathParser;
|
|
20
|
-
constructor(pathParser: PathParser);
|
|
21
|
-
/**
|
|
22
|
-
* Check if a specific combination has forEach operations.
|
|
23
|
-
*/
|
|
24
|
-
combinationHasForEach(combination: SelectCombination): boolean;
|
|
25
|
-
/**
|
|
26
|
-
* Check if a single select has forEach operations (including nested).
|
|
27
|
-
*/
|
|
28
|
-
selectHasForEach(select: ViewDefinitionSelect): boolean;
|
|
29
|
-
/**
|
|
30
|
-
* Check if any select in the tree has forEach operations.
|
|
31
|
-
*/
|
|
32
|
-
private hasForEachInSelects;
|
|
33
|
-
/**
|
|
34
|
-
* Check if any unionAll option has forEach operations.
|
|
35
|
-
*/
|
|
36
|
-
private unionAllHasForEach;
|
|
37
|
-
/**
|
|
38
|
-
* Build the forEach context map by generating contexts for all forEach.
|
|
39
|
-
*/
|
|
40
|
-
buildForEachContextMap(selects: ViewDefinitionSelect[], context: TranspilerContext, combination?: SelectCombination): ForEachContextMapResult;
|
|
41
|
-
/**
|
|
42
|
-
* Collect all forEach that should be treated as top-level.
|
|
43
|
-
*/
|
|
44
|
-
private collectTopLevelForEach;
|
|
45
|
-
/**
|
|
46
|
-
* Process a select for forEach, handling both direct forEach and nested selects.
|
|
47
|
-
*/
|
|
48
|
-
private processSelectForEach;
|
|
49
|
-
/**
|
|
50
|
-
* Process a select with a unionAll choice from a combination.
|
|
51
|
-
*/
|
|
52
|
-
private processUnionAllChoice;
|
|
53
|
-
/**
|
|
54
|
-
* Add forEach from a select array to the topLevelForEach list.
|
|
55
|
-
*/
|
|
56
|
-
private addForEachFromSelectArray;
|
|
57
|
-
/**
|
|
58
|
-
* Check if a select is a forEach or forEachOrNull.
|
|
59
|
-
*/
|
|
60
|
-
private isForEachSelect;
|
|
61
|
-
/**
|
|
62
|
-
* Generate forEach contexts recursively.
|
|
63
|
-
*/
|
|
64
|
-
private generateForEachContexts;
|
|
65
|
-
/**
|
|
66
|
-
* Create a transpiler context specific to a forEach.
|
|
67
|
-
*/
|
|
68
|
-
private createForEachContext;
|
|
69
|
-
/**
|
|
70
|
-
* Generate nested forEach contexts within this forEach's select and unionAll options.
|
|
71
|
-
*/
|
|
72
|
-
private generateNestedForEachContexts;
|
|
73
|
-
/**
|
|
74
|
-
* Generate forEach contexts for nested selects.
|
|
75
|
-
*/
|
|
76
|
-
private generateNestedSelectContexts;
|
|
77
|
-
/**
|
|
78
|
-
* Generate forEach contexts for nested unionAll options.
|
|
79
|
-
*/
|
|
80
|
-
private generateNestedUnionAllContexts;
|
|
81
|
-
/**
|
|
82
|
-
* Build CROSS APPLY clauses in reverse order for forEach processing.
|
|
83
|
-
*/
|
|
84
|
-
buildApplyClauses(forEachContextMap: Map<ViewDefinitionSelect, TranspilerContext>, topLevelForEach: ViewDefinitionSelect[], combination: SelectCombination): string;
|
|
85
|
-
/**
|
|
86
|
-
* Generate CROSS APPLY clauses for a forEach and its nested forEach.
|
|
87
|
-
*/
|
|
88
|
-
private generateForEachClause;
|
|
89
|
-
/**
|
|
90
|
-
* Build the APPLY clause for a forEach using its pre-generated context.
|
|
91
|
-
*/
|
|
92
|
-
private buildApplyClause;
|
|
93
|
-
/**
|
|
94
|
-
* Build a simple APPLY clause for single array paths.
|
|
95
|
-
*/
|
|
96
|
-
private buildSimpleApplyClause;
|
|
97
|
-
/**
|
|
98
|
-
* Build WHERE clauses for APPLY operations.
|
|
99
|
-
*/
|
|
100
|
-
private buildWhereClauses;
|
|
101
|
-
/**
|
|
102
|
-
* Build nested CROSS APPLY clauses for array flattening.
|
|
103
|
-
*/
|
|
104
|
-
private buildNestedForEachClause;
|
|
105
|
-
/**
|
|
106
|
-
* Build WHERE clause conditions for nested array filtering.
|
|
107
|
-
*/
|
|
108
|
-
private buildNestedWhereClauses;
|
|
109
|
-
/**
|
|
110
|
-
* Build APPLY clause with optional WHERE conditions.
|
|
111
|
-
*/
|
|
112
|
-
private buildApplyWithOptionalWhere;
|
|
113
|
-
/**
|
|
114
|
-
* Process nested forEach within this forEach's select.
|
|
115
|
-
*/
|
|
116
|
-
private processNestedSelectClauses;
|
|
117
|
-
/**
|
|
118
|
-
* Process nested forEach within this forEach's unionAll options.
|
|
119
|
-
*/
|
|
120
|
-
private processNestedUnionAllClauses;
|
|
121
|
-
/**
|
|
122
|
-
* Get the selected unionAll option for a forEach in a combination.
|
|
123
|
-
*/
|
|
124
|
-
private getSelectedUnionOption;
|
|
125
|
-
}
|
|
126
|
-
export {};
|
|
127
|
-
//# sourceMappingURL=ForEachProcessor.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ForEachProcessor.d.ts","sourceRoot":"","sources":["../../src/queryGenerator/ForEachProcessor.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAS7C;;GAEG;AACH,UAAU,uBAAuB;IAC/B,iBAAiB,EAAE,GAAG,CAAC,oBAAoB,EAAE,iBAAiB,CAAC,CAAC;IAChE,eAAe,EAAE,oBAAoB,EAAE,CAAC;CACzC;AAED;;GAEG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAa;gBAE5B,UAAU,EAAE,UAAU;IAIlC;;OAEG;IACH,qBAAqB,CAAC,WAAW,EAAE,iBAAiB,GAAG,OAAO;IAoB9D;;OAEG;IACH,gBAAgB,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO;IAYvD;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAI3B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAQ1B;;OAEG;IACH,sBAAsB,CACpB,OAAO,EAAE,oBAAoB,EAAE,EAC/B,OAAO,EAAE,iBAAiB,EAC1B,WAAW,CAAC,EAAE,iBAAiB,GAC9B,uBAAuB;IAsB1B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAkB9B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAW5B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAmB7B;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAWjC;;OAEG;IACH,OAAO,CAAC,eAAe;IAIvB;;OAEG;IACH,OAAO,CAAC,uBAAuB;IA0B/B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAiB5B;;OAEG;IACH,OAAO,CAAC,6BAA6B;IA4BrC;;OAEG;IACH,OAAO,CAAC,4BAA4B;IAoBpC;;OAEG;IACH,OAAO,CAAC,8BAA8B;IAoBtC;;OAEG;IACH,iBAAiB,CACf,iBAAiB,EAAE,GAAG,CAAC,oBAAoB,EAAE,iBAAiB,CAAC,EAC/D,eAAe,EAAE,oBAAoB,EAAE,EACvC,WAAW,EAAE,iBAAiB,GAC7B,MAAM;IAkBT;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAqB7B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAyCxB;;OAEG;IACH,OAAO,CAAC,sBAAsB;IA2B9B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAczB;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAyChC;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAqB/B;;OAEG;IACH,OAAO,CAAC,2BAA2B;IAgBnC;;OAEG;IACH,OAAO,CAAC,0BAA0B;IA0BlC;;OAEG;IACH,OAAO,CAAC,4BAA4B;IA8BpC;;OAEG;IACH,OAAO,CAAC,sBAAsB;CAqB/B"}
|
|
@@ -1,351 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Processes forEach operations and generates CROSS APPLY clauses.
|
|
4
|
-
*/
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.ForEachProcessor = void 0;
|
|
7
|
-
/**
|
|
8
|
-
* Handles all forEach-related processing and CROSS APPLY generation.
|
|
9
|
-
*/
|
|
10
|
-
class ForEachProcessor {
|
|
11
|
-
pathParser;
|
|
12
|
-
constructor(pathParser) {
|
|
13
|
-
this.pathParser = pathParser;
|
|
14
|
-
}
|
|
15
|
-
/**
|
|
16
|
-
* Check if a specific combination has forEach operations.
|
|
17
|
-
*/
|
|
18
|
-
combinationHasForEach(combination) {
|
|
19
|
-
for (let i = 0; i < combination.selects.length; i++) {
|
|
20
|
-
const select = combination.selects[i];
|
|
21
|
-
const unionChoice = combination.unionChoices[i];
|
|
22
|
-
if (this.selectHasForEach(select)) {
|
|
23
|
-
return true;
|
|
24
|
-
}
|
|
25
|
-
// If this select has a unionAll choice, also check the chosen branch.
|
|
26
|
-
if (unionChoice >= 0 && select.unionAll?.[unionChoice]) {
|
|
27
|
-
const chosenBranch = select.unionAll[unionChoice];
|
|
28
|
-
if (this.selectHasForEach(chosenBranch)) {
|
|
29
|
-
return true;
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
return false;
|
|
34
|
-
}
|
|
35
|
-
/**
|
|
36
|
-
* Check if a single select has forEach operations (including nested).
|
|
37
|
-
*/
|
|
38
|
-
selectHasForEach(select) {
|
|
39
|
-
if (select.forEach || select.forEachOrNull) {
|
|
40
|
-
return true;
|
|
41
|
-
}
|
|
42
|
-
if (select.select && this.hasForEachInSelects(select.select)) {
|
|
43
|
-
return true;
|
|
44
|
-
}
|
|
45
|
-
return !!(select.unionAll && this.unionAllHasForEach(select.unionAll));
|
|
46
|
-
}
|
|
47
|
-
/**
|
|
48
|
-
* Check if any select in the tree has forEach operations.
|
|
49
|
-
*/
|
|
50
|
-
hasForEachInSelects(selects) {
|
|
51
|
-
return selects.some((select) => this.selectHasForEach(select));
|
|
52
|
-
}
|
|
53
|
-
/**
|
|
54
|
-
* Check if any unionAll option has forEach operations.
|
|
55
|
-
*/
|
|
56
|
-
unionAllHasForEach(unionAllOptions) {
|
|
57
|
-
return unionAllOptions.some((unionOption) => (unionOption.forEach ?? unionOption.forEachOrNull) !== undefined ||
|
|
58
|
-
(unionOption.select && this.hasForEachInSelects(unionOption.select)));
|
|
59
|
-
}
|
|
60
|
-
/**
|
|
61
|
-
* Build the forEach context map by generating contexts for all forEach.
|
|
62
|
-
*/
|
|
63
|
-
buildForEachContextMap(selects, context, combination) {
|
|
64
|
-
const forEachContextMap = new Map();
|
|
65
|
-
const counterState = { value: 0 };
|
|
66
|
-
const topLevelForEach = this.collectTopLevelForEach(selects, combination);
|
|
67
|
-
for (const select of topLevelForEach) {
|
|
68
|
-
this.generateForEachContexts(select, context.resourceAlias + ".json", context, forEachContextMap, counterState);
|
|
69
|
-
}
|
|
70
|
-
return { forEachContextMap, topLevelForEach };
|
|
71
|
-
}
|
|
72
|
-
/**
|
|
73
|
-
* Collect all forEach that should be treated as top-level.
|
|
74
|
-
*/
|
|
75
|
-
collectTopLevelForEach(selects, combination) {
|
|
76
|
-
const topLevelForEach = [];
|
|
77
|
-
for (const select of selects) {
|
|
78
|
-
this.processSelectForEach(select, topLevelForEach);
|
|
79
|
-
// Also process unionAll choices if present and parent doesn't have forEach.
|
|
80
|
-
if (combination && !this.isForEachSelect(select)) {
|
|
81
|
-
this.processUnionAllChoice(select, combination, topLevelForEach);
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
return topLevelForEach;
|
|
85
|
-
}
|
|
86
|
-
/**
|
|
87
|
-
* Process a select for forEach, handling both direct forEach and nested selects.
|
|
88
|
-
*/
|
|
89
|
-
processSelectForEach(select, topLevelForEach) {
|
|
90
|
-
if (this.isForEachSelect(select)) {
|
|
91
|
-
topLevelForEach.push(select);
|
|
92
|
-
}
|
|
93
|
-
else if (select.select) {
|
|
94
|
-
this.addForEachFromSelectArray(select.select, topLevelForEach);
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
/**
|
|
98
|
-
* Process a select with a unionAll choice from a combination.
|
|
99
|
-
*/
|
|
100
|
-
processUnionAllChoice(select, combination, topLevelForEach) {
|
|
101
|
-
const selectIndex = combination.selects.indexOf(select);
|
|
102
|
-
const unionChoice = selectIndex >= 0 ? combination.unionChoices[selectIndex] : -1;
|
|
103
|
-
if (unionChoice >= 0 && select.unionAll?.[unionChoice]) {
|
|
104
|
-
const chosenBranch = select.unionAll[unionChoice];
|
|
105
|
-
if (this.isForEachSelect(chosenBranch)) {
|
|
106
|
-
topLevelForEach.push(chosenBranch);
|
|
107
|
-
}
|
|
108
|
-
else if (chosenBranch.select) {
|
|
109
|
-
this.addForEachFromSelectArray(chosenBranch.select, topLevelForEach);
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
/**
|
|
114
|
-
* Add forEach from a select array to the topLevelForEach list.
|
|
115
|
-
*/
|
|
116
|
-
addForEachFromSelectArray(selects, topLevelForEach) {
|
|
117
|
-
for (const nestedSelect of selects) {
|
|
118
|
-
if (this.isForEachSelect(nestedSelect)) {
|
|
119
|
-
topLevelForEach.push(nestedSelect);
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
/**
|
|
124
|
-
* Check if a select is a forEach or forEachOrNull.
|
|
125
|
-
*/
|
|
126
|
-
isForEachSelect(select) {
|
|
127
|
-
return !!(select.forEach ?? select.forEachOrNull);
|
|
128
|
-
}
|
|
129
|
-
/**
|
|
130
|
-
* Generate forEach contexts recursively.
|
|
131
|
-
*/
|
|
132
|
-
generateForEachContexts(forEachSelect, sourceExpression, baseContext, forEachContextMap, counterState) {
|
|
133
|
-
const applyAlias = `forEach_${counterState.value++}`;
|
|
134
|
-
const forEachContext = this.createForEachContext(baseContext, applyAlias, sourceExpression, forEachSelect);
|
|
135
|
-
forEachContextMap.set(forEachSelect, forEachContext);
|
|
136
|
-
this.generateNestedForEachContexts(forEachSelect, applyAlias, forEachContext, forEachContextMap, counterState);
|
|
137
|
-
}
|
|
138
|
-
/**
|
|
139
|
-
* Create a transpiler context specific to a forEach.
|
|
140
|
-
*/
|
|
141
|
-
createForEachContext(baseContext, applyAlias, sourceExpression, forEachSelect) {
|
|
142
|
-
const forEachPath = forEachSelect.forEach ?? forEachSelect.forEachOrNull;
|
|
143
|
-
return {
|
|
144
|
-
...baseContext,
|
|
145
|
-
iterationContext: `${applyAlias}.value`,
|
|
146
|
-
currentForEachAlias: applyAlias,
|
|
147
|
-
forEachSource: sourceExpression,
|
|
148
|
-
forEachPath: `$.${forEachPath}`,
|
|
149
|
-
};
|
|
150
|
-
}
|
|
151
|
-
/**
|
|
152
|
-
* Generate nested forEach contexts within this forEach's select and unionAll options.
|
|
153
|
-
*/
|
|
154
|
-
generateNestedForEachContexts(forEachSelect, applyAlias, baseContext, forEachContextMap, counterState) {
|
|
155
|
-
if (forEachSelect.select) {
|
|
156
|
-
this.generateNestedSelectContexts(forEachSelect.select, applyAlias, baseContext, forEachContextMap, counterState);
|
|
157
|
-
}
|
|
158
|
-
if (forEachSelect.unionAll) {
|
|
159
|
-
this.generateNestedUnionAllContexts(forEachSelect.unionAll, applyAlias, baseContext, forEachContextMap, counterState);
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
/**
|
|
163
|
-
* Generate forEach contexts for nested selects.
|
|
164
|
-
*/
|
|
165
|
-
generateNestedSelectContexts(nestedSelects, applyAlias, forEachContext, forEachContextMap, counterState) {
|
|
166
|
-
for (const nestedSelect of nestedSelects) {
|
|
167
|
-
if (this.isForEachSelect(nestedSelect)) {
|
|
168
|
-
this.generateForEachContexts(nestedSelect, `${applyAlias}.value`, forEachContext, forEachContextMap, counterState);
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
/**
|
|
173
|
-
* Generate forEach contexts for nested unionAll options.
|
|
174
|
-
*/
|
|
175
|
-
generateNestedUnionAllContexts(unionAllOptions, applyAlias, forEachContext, forEachContextMap, counterState) {
|
|
176
|
-
for (const unionOption of unionAllOptions) {
|
|
177
|
-
if (this.isForEachSelect(unionOption)) {
|
|
178
|
-
this.generateForEachContexts(unionOption, `${applyAlias}.value`, forEachContext, forEachContextMap, counterState);
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
/**
|
|
183
|
-
* Build CROSS APPLY clauses in reverse order for forEach processing.
|
|
184
|
-
*/
|
|
185
|
-
buildApplyClauses(forEachContextMap, topLevelForEach, combination) {
|
|
186
|
-
return [...topLevelForEach]
|
|
187
|
-
.reverse()
|
|
188
|
-
.map((select) => {
|
|
189
|
-
const forEachContext = forEachContextMap.get(select);
|
|
190
|
-
if (!forEachContext) {
|
|
191
|
-
throw new Error("forEach context not found");
|
|
192
|
-
}
|
|
193
|
-
return this.generateForEachClause(select, forEachContext, forEachContextMap, combination);
|
|
194
|
-
})
|
|
195
|
-
.join("");
|
|
196
|
-
}
|
|
197
|
-
/**
|
|
198
|
-
* Generate CROSS APPLY clauses for a forEach and its nested forEach.
|
|
199
|
-
*/
|
|
200
|
-
generateForEachClause(forEachSelect, forEachContext, forEachContextMap, combination) {
|
|
201
|
-
const clause = this.buildApplyClause(forEachSelect, forEachContext);
|
|
202
|
-
const nestedSelectClauses = this.processNestedSelectClauses(forEachSelect, forEachContextMap, combination);
|
|
203
|
-
const nestedUnionClauses = this.processNestedUnionAllClauses(forEachSelect, forEachContextMap, combination);
|
|
204
|
-
return clause + nestedSelectClauses + nestedUnionClauses;
|
|
205
|
-
}
|
|
206
|
-
/**
|
|
207
|
-
* Build the APPLY clause for a forEach using its pre-generated context.
|
|
208
|
-
*/
|
|
209
|
-
buildApplyClause(forEachSelect, forEachContext) {
|
|
210
|
-
const rawPath = forEachSelect.forEach ?? forEachSelect.forEachOrNull;
|
|
211
|
-
const isOrNull = !!forEachSelect.forEachOrNull;
|
|
212
|
-
const applyType = isOrNull ? "OUTER APPLY" : "CROSS APPLY";
|
|
213
|
-
const applyAlias = forEachContext.currentForEachAlias ?? "";
|
|
214
|
-
const sourceExpression = forEachContext.forEachSource ?? "";
|
|
215
|
-
const { path: pathWithoutWhere, whereCondition, useFirst, } = this.pathParser.parseFhirPathWhere(rawPath ?? "", forEachContext);
|
|
216
|
-
const { path: forEachPath, arrayIndex } = this.pathParser.parseArrayIndexing(pathWithoutWhere);
|
|
217
|
-
const arrayPaths = this.pathParser.detectArrayFlatteningPaths(forEachPath);
|
|
218
|
-
if (arrayPaths.length > 1) {
|
|
219
|
-
return this.buildNestedForEachClause(arrayPaths, sourceExpression, applyAlias, applyType, arrayIndex, whereCondition);
|
|
220
|
-
}
|
|
221
|
-
return this.buildSimpleApplyClause(applyType, sourceExpression, forEachPath, applyAlias, arrayIndex, whereCondition, useFirst);
|
|
222
|
-
}
|
|
223
|
-
/**
|
|
224
|
-
* Build a simple APPLY clause for single array paths.
|
|
225
|
-
*/
|
|
226
|
-
buildSimpleApplyClause(applyType, sourceExpression, forEachPath, applyAlias, arrayIndex, whereCondition, useFirst = false) {
|
|
227
|
-
const whereClauses = this.buildWhereClauses(arrayIndex, whereCondition);
|
|
228
|
-
if (whereClauses.length > 0 || useFirst) {
|
|
229
|
-
// Build SELECT with WHERE clause and/or TOP 1 for .first()
|
|
230
|
-
const topClause = useFirst ? "TOP 1 " : "";
|
|
231
|
-
const orderBy = useFirst ? " ORDER BY [key]" : "";
|
|
232
|
-
const whereClause = whereClauses.length > 0 ? `WHERE ${whereClauses.join(" AND ")}` : "";
|
|
233
|
-
return `\n${applyType} (
|
|
234
|
-
SELECT ${topClause}* FROM OPENJSON(${sourceExpression}, '$.${forEachPath}')
|
|
235
|
-
${whereClause}${orderBy}
|
|
236
|
-
) AS ${applyAlias}`;
|
|
237
|
-
}
|
|
238
|
-
return `\n${applyType} OPENJSON(${sourceExpression}, '$.${forEachPath}') AS ${applyAlias}`;
|
|
239
|
-
}
|
|
240
|
-
/**
|
|
241
|
-
* Build WHERE clauses for APPLY operations.
|
|
242
|
-
*/
|
|
243
|
-
buildWhereClauses(arrayIndex, whereCondition) {
|
|
244
|
-
const whereClauses = [];
|
|
245
|
-
if (arrayIndex !== null) {
|
|
246
|
-
whereClauses.push(`[key] = '${arrayIndex}'`);
|
|
247
|
-
}
|
|
248
|
-
if (whereCondition !== null) {
|
|
249
|
-
whereClauses.push(whereCondition);
|
|
250
|
-
}
|
|
251
|
-
return whereClauses;
|
|
252
|
-
}
|
|
253
|
-
/**
|
|
254
|
-
* Build nested CROSS APPLY clauses for array flattening.
|
|
255
|
-
*/
|
|
256
|
-
buildNestedForEachClause(arrayPaths, sourceExpression, finalAlias, applyType, arrayIndex, whereCondition) {
|
|
257
|
-
let clauses = "";
|
|
258
|
-
let currentSource = sourceExpression;
|
|
259
|
-
for (let i = 0; i < arrayPaths.length; i++) {
|
|
260
|
-
const isLast = i === arrayPaths.length - 1;
|
|
261
|
-
const alias = isLast ? finalAlias : `${finalAlias}_nest${i}`;
|
|
262
|
-
const pathSegment = this.pathParser.extractPathSegment(arrayPaths, i);
|
|
263
|
-
const { cleanSegment, segmentIndex } = this.pathParser.parseSegmentIndexing(pathSegment);
|
|
264
|
-
const jsonPath = `$.${cleanSegment}`;
|
|
265
|
-
const whereClauses = this.buildNestedWhereClauses(isLast, segmentIndex, arrayIndex, whereCondition);
|
|
266
|
-
clauses += this.buildApplyWithOptionalWhere(applyType, currentSource, jsonPath, alias, whereClauses);
|
|
267
|
-
currentSource = `${alias}.value`;
|
|
268
|
-
}
|
|
269
|
-
return clauses;
|
|
270
|
-
}
|
|
271
|
-
/**
|
|
272
|
-
* Build WHERE clause conditions for nested array filtering.
|
|
273
|
-
*/
|
|
274
|
-
buildNestedWhereClauses(isLast, segmentIndex, arrayIndex, whereCondition) {
|
|
275
|
-
const whereClauses = [];
|
|
276
|
-
if (segmentIndex !== null) {
|
|
277
|
-
whereClauses.push(`[key] = '${segmentIndex}'`);
|
|
278
|
-
}
|
|
279
|
-
else if (isLast && arrayIndex !== null && arrayIndex !== undefined) {
|
|
280
|
-
whereClauses.push(`[key] = '${arrayIndex}'`);
|
|
281
|
-
}
|
|
282
|
-
if (isLast && whereCondition !== null && whereCondition !== undefined) {
|
|
283
|
-
whereClauses.push(whereCondition);
|
|
284
|
-
}
|
|
285
|
-
return whereClauses;
|
|
286
|
-
}
|
|
287
|
-
/**
|
|
288
|
-
* Build APPLY clause with optional WHERE conditions.
|
|
289
|
-
*/
|
|
290
|
-
buildApplyWithOptionalWhere(applyType, source, jsonPath, alias, whereClauses) {
|
|
291
|
-
if (whereClauses.length > 0) {
|
|
292
|
-
return `\n${applyType} (
|
|
293
|
-
SELECT * FROM OPENJSON(${source}, '${jsonPath}')
|
|
294
|
-
WHERE ${whereClauses.join(" AND ")}
|
|
295
|
-
) AS ${alias}`;
|
|
296
|
-
}
|
|
297
|
-
return `\n${applyType} OPENJSON(${source}, '${jsonPath}') AS ${alias}`;
|
|
298
|
-
}
|
|
299
|
-
/**
|
|
300
|
-
* Process nested forEach within this forEach's select.
|
|
301
|
-
*/
|
|
302
|
-
processNestedSelectClauses(forEachSelect, forEachContextMap, combination) {
|
|
303
|
-
if (!forEachSelect.select) {
|
|
304
|
-
return "";
|
|
305
|
-
}
|
|
306
|
-
return forEachSelect.select
|
|
307
|
-
.filter((nestedSelect) => this.isForEachSelect(nestedSelect))
|
|
308
|
-
.map((nestedSelect) => {
|
|
309
|
-
const nestedContext = forEachContextMap.get(nestedSelect);
|
|
310
|
-
if (!nestedContext) {
|
|
311
|
-
throw new Error("Nested forEach context not found");
|
|
312
|
-
}
|
|
313
|
-
return this.generateForEachClause(nestedSelect, nestedContext, forEachContextMap, combination);
|
|
314
|
-
})
|
|
315
|
-
.join("");
|
|
316
|
-
}
|
|
317
|
-
/**
|
|
318
|
-
* Process nested forEach within this forEach's unionAll options.
|
|
319
|
-
*/
|
|
320
|
-
processNestedUnionAllClauses(forEachSelect, forEachContextMap, combination) {
|
|
321
|
-
if (!forEachSelect.unionAll || !combination) {
|
|
322
|
-
return "";
|
|
323
|
-
}
|
|
324
|
-
const selectedUnionOption = this.getSelectedUnionOption(forEachSelect, combination);
|
|
325
|
-
if (!selectedUnionOption || !this.isForEachSelect(selectedUnionOption)) {
|
|
326
|
-
return "";
|
|
327
|
-
}
|
|
328
|
-
const nestedContext = forEachContextMap.get(selectedUnionOption);
|
|
329
|
-
if (!nestedContext) {
|
|
330
|
-
return "";
|
|
331
|
-
}
|
|
332
|
-
return this.generateForEachClause(selectedUnionOption, nestedContext, forEachContextMap, combination);
|
|
333
|
-
}
|
|
334
|
-
/**
|
|
335
|
-
* Get the selected unionAll option for a forEach in a combination.
|
|
336
|
-
*/
|
|
337
|
-
getSelectedUnionOption(forEachSelect, combination) {
|
|
338
|
-
if (!forEachSelect.unionAll) {
|
|
339
|
-
return null;
|
|
340
|
-
}
|
|
341
|
-
const selectIndex = combination.selects.indexOf(forEachSelect);
|
|
342
|
-
const selectedUnionIndex = selectIndex >= 0 ? combination.unionChoices[selectIndex] : -1;
|
|
343
|
-
if (selectedUnionIndex < 0 ||
|
|
344
|
-
selectedUnionIndex >= forEachSelect.unionAll.length) {
|
|
345
|
-
return null;
|
|
346
|
-
}
|
|
347
|
-
return forEachSelect.unionAll[selectedUnionIndex];
|
|
348
|
-
}
|
|
349
|
-
}
|
|
350
|
-
exports.ForEachProcessor = ForEachProcessor;
|
|
351
|
-
//# sourceMappingURL=ForEachProcessor.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ForEachProcessor.js","sourceRoot":"","sources":["../../src/queryGenerator/ForEachProcessor.ts"],"names":[],"mappings":"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"}
|