sof-mssql 1.0.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/LICENSE +202 -0
- package/README.md +346 -0
- package/dist/cli.d.ts +7 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +85 -0
- package/dist/cli.js.map +1 -0
- package/dist/fhirpath/transpiler.d.ts +18 -0
- package/dist/fhirpath/transpiler.d.ts.map +1 -0
- package/dist/fhirpath/transpiler.js +82 -0
- package/dist/fhirpath/transpiler.js.map +1 -0
- package/dist/fhirpath/visitor.d.ts +153 -0
- package/dist/fhirpath/visitor.d.ts.map +1 -0
- package/dist/fhirpath/visitor.js +1295 -0
- package/dist/fhirpath/visitor.js.map +1 -0
- package/dist/generated/grammar/fhirpathLexer.d.ts +88 -0
- package/dist/generated/grammar/fhirpathLexer.d.ts.map +1 -0
- package/dist/generated/grammar/fhirpathLexer.js +598 -0
- package/dist/generated/grammar/fhirpathLexer.js.map +1 -0
- package/dist/generated/grammar/fhirpathListener.d.ts +589 -0
- package/dist/generated/grammar/fhirpathListener.d.ts.map +1 -0
- package/dist/generated/grammar/fhirpathListener.js +4 -0
- package/dist/generated/grammar/fhirpathListener.js.map +1 -0
- package/dist/generated/grammar/fhirpathParser.d.ts +470 -0
- package/dist/generated/grammar/fhirpathParser.d.ts.map +1 -0
- package/dist/generated/grammar/fhirpathParser.js +3022 -0
- package/dist/generated/grammar/fhirpathParser.js.map +1 -0
- package/dist/generated/grammar/fhirpathVisitor.d.ts +372 -0
- package/dist/generated/grammar/fhirpathVisitor.d.ts.map +1 -0
- package/dist/generated/grammar/fhirpathVisitor.js +4 -0
- package/dist/generated/grammar/fhirpathVisitor.js.map +1 -0
- package/dist/index.d.ts +28 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +42 -0
- package/dist/index.js.map +1 -0
- package/dist/load.d.ts +14 -0
- package/dist/load.d.ts.map +1 -0
- package/dist/load.js +115 -0
- package/dist/load.js.map +1 -0
- package/dist/loader/connection.d.ts +36 -0
- package/dist/loader/connection.d.ts.map +1 -0
- package/dist/loader/connection.js +106 -0
- package/dist/loader/connection.js.map +1 -0
- package/dist/loader/discovery.d.ts +38 -0
- package/dist/loader/discovery.d.ts.map +1 -0
- package/dist/loader/discovery.js +107 -0
- package/dist/loader/discovery.js.map +1 -0
- package/dist/loader/index.d.ts +24 -0
- package/dist/loader/index.d.ts.map +1 -0
- package/dist/loader/index.js +193 -0
- package/dist/loader/index.js.map +1 -0
- package/dist/loader/progress.d.ts +70 -0
- package/dist/loader/progress.d.ts.map +1 -0
- package/dist/loader/progress.js +206 -0
- package/dist/loader/progress.js.map +1 -0
- package/dist/loader/stream.d.ts +21 -0
- package/dist/loader/stream.d.ts.map +1 -0
- package/dist/loader/stream.js +103 -0
- package/dist/loader/stream.js.map +1 -0
- package/dist/loader/tables.d.ts +43 -0
- package/dist/loader/tables.d.ts.map +1 -0
- package/dist/loader/tables.js +88 -0
- package/dist/loader/tables.js.map +1 -0
- package/dist/loader/types.d.ts +134 -0
- package/dist/loader/types.d.ts.map +1 -0
- package/dist/loader/types.js +8 -0
- package/dist/loader/types.js.map +1 -0
- package/dist/parser.d.ts +60 -0
- package/dist/parser.d.ts.map +1 -0
- package/dist/parser.js +226 -0
- package/dist/parser.js.map +1 -0
- package/dist/queryGenerator/ColumnExpressionGenerator.d.ts +52 -0
- package/dist/queryGenerator/ColumnExpressionGenerator.d.ts.map +1 -0
- package/dist/queryGenerator/ColumnExpressionGenerator.js +144 -0
- package/dist/queryGenerator/ColumnExpressionGenerator.js.map +1 -0
- package/dist/queryGenerator/ForEachProcessor.d.ts +127 -0
- package/dist/queryGenerator/ForEachProcessor.d.ts.map +1 -0
- package/dist/queryGenerator/ForEachProcessor.js +351 -0
- package/dist/queryGenerator/ForEachProcessor.js.map +1 -0
- package/dist/queryGenerator/PathParser.d.ts +64 -0
- package/dist/queryGenerator/PathParser.d.ts.map +1 -0
- package/dist/queryGenerator/PathParser.js +164 -0
- package/dist/queryGenerator/PathParser.js.map +1 -0
- package/dist/queryGenerator/SelectClauseBuilder.d.ts +63 -0
- package/dist/queryGenerator/SelectClauseBuilder.d.ts.map +1 -0
- package/dist/queryGenerator/SelectClauseBuilder.js +196 -0
- package/dist/queryGenerator/SelectClauseBuilder.js.map +1 -0
- package/dist/queryGenerator/SelectCombinationExpander.d.ts +42 -0
- package/dist/queryGenerator/SelectCombinationExpander.d.ts.map +1 -0
- package/dist/queryGenerator/SelectCombinationExpander.js +95 -0
- package/dist/queryGenerator/SelectCombinationExpander.js.map +1 -0
- package/dist/queryGenerator/WhereClauseBuilder.d.ts +20 -0
- package/dist/queryGenerator/WhereClauseBuilder.d.ts.map +1 -0
- package/dist/queryGenerator/WhereClauseBuilder.js +63 -0
- package/dist/queryGenerator/WhereClauseBuilder.js.map +1 -0
- package/dist/queryGenerator/index.d.ts +10 -0
- package/dist/queryGenerator/index.d.ts.map +1 -0
- package/dist/queryGenerator/index.js +19 -0
- package/dist/queryGenerator/index.js.map +1 -0
- package/dist/queryGenerator.d.ts +61 -0
- package/dist/queryGenerator.d.ts.map +1 -0
- package/dist/queryGenerator.js +187 -0
- package/dist/queryGenerator.js.map +1 -0
- package/dist/tests/sqlOnFhir.test.d.ts +11 -0
- package/dist/tests/sqlOnFhir.test.d.ts.map +1 -0
- package/dist/tests/sqlOnFhir.test.js +24 -0
- package/dist/tests/sqlOnFhir.test.js.map +1 -0
- package/dist/tests/utils/database.d.ts +38 -0
- package/dist/tests/utils/database.d.ts.map +1 -0
- package/dist/tests/utils/database.js +258 -0
- package/dist/tests/utils/database.js.map +1 -0
- package/dist/tests/utils/generator.d.ts +58 -0
- package/dist/tests/utils/generator.d.ts.map +1 -0
- package/dist/tests/utils/generator.js +195 -0
- package/dist/tests/utils/generator.js.map +1 -0
- package/dist/tests/utils/reporter.d.ts +83 -0
- package/dist/tests/utils/reporter.d.ts.map +1 -0
- package/dist/tests/utils/reporter.js +245 -0
- package/dist/tests/utils/reporter.js.map +1 -0
- package/dist/tests/utils/sqlOnFhir.d.ts +33 -0
- package/dist/tests/utils/sqlOnFhir.d.ts.map +1 -0
- package/dist/tests/utils/sqlOnFhir.js +281 -0
- package/dist/tests/utils/sqlOnFhir.js.map +1 -0
- package/dist/tests/utils/testContext.d.ts +18 -0
- package/dist/tests/utils/testContext.d.ts.map +1 -0
- package/dist/tests/utils/testContext.js +25 -0
- package/dist/tests/utils/testContext.js.map +1 -0
- package/dist/tests/utils/types.d.ts +31 -0
- package/dist/tests/utils/types.d.ts.map +1 -0
- package/dist/tests/utils/types.js +9 -0
- package/dist/tests/utils/types.js.map +1 -0
- package/dist/types.d.ts +288 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- package/package.json +76 -0
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* FHIRPath expression transpiler to T-SQL.
|
|
4
|
+
* Converts FHIRPath expressions to equivalent T-SQL expressions for MS SQL Server.
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.Transpiler = void 0;
|
|
8
|
+
const antlr4ts_1 = require("antlr4ts");
|
|
9
|
+
const fhirpathLexer_1 = require("../generated/grammar/fhirpathLexer");
|
|
10
|
+
const fhirpathParser_1 = require("../generated/grammar/fhirpathParser");
|
|
11
|
+
const visitor_1 = require("./visitor");
|
|
12
|
+
class Transpiler {
|
|
13
|
+
/**
|
|
14
|
+
* Transpile a FHIRPath expression to T-SQL.
|
|
15
|
+
*/
|
|
16
|
+
static transpile(expression, context) {
|
|
17
|
+
// Check for syntax errors first, before any try-catch
|
|
18
|
+
const parseResult = this.parseExpression(expression);
|
|
19
|
+
if (!parseResult.success || !parseResult.tree) {
|
|
20
|
+
throw new Error(`Syntax error in FHIRPath expression '${expression}'`);
|
|
21
|
+
}
|
|
22
|
+
try {
|
|
23
|
+
// Create visitor and visit the parse tree
|
|
24
|
+
const visitor = new visitor_1.FHIRPathToTSqlVisitor(context);
|
|
25
|
+
return visitor.visit(parseResult.tree);
|
|
26
|
+
}
|
|
27
|
+
catch (error) {
|
|
28
|
+
throw new Error(`Failed to transpile FHIRPath expression '${expression}': ${error}`);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
static parseExpression(expression) {
|
|
32
|
+
// Create ANTLR input stream
|
|
33
|
+
const inputStream = antlr4ts_1.CharStreams.fromString(expression);
|
|
34
|
+
// Create lexer
|
|
35
|
+
const lexer = new fhirpathLexer_1.fhirpathLexer(inputStream);
|
|
36
|
+
const tokenStream = new antlr4ts_1.CommonTokenStream(lexer);
|
|
37
|
+
// Create parser
|
|
38
|
+
const parser = new fhirpathParser_1.fhirpathParser(tokenStream);
|
|
39
|
+
// Remove default error listeners to avoid console output
|
|
40
|
+
parser.removeErrorListeners();
|
|
41
|
+
// Parse the entire expression
|
|
42
|
+
const tree = parser.entireExpression();
|
|
43
|
+
// Check for parse errors
|
|
44
|
+
if (parser.numberOfSyntaxErrors > 0) {
|
|
45
|
+
return { success: false, tree: null };
|
|
46
|
+
}
|
|
47
|
+
return { success: true, tree };
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Get the SQL data type for a FHIRPath expression result.
|
|
51
|
+
*/
|
|
52
|
+
static inferSqlType(fhirType) {
|
|
53
|
+
const typeMap = {
|
|
54
|
+
id: "NVARCHAR(MAX)",
|
|
55
|
+
string: "NVARCHAR(MAX)",
|
|
56
|
+
markdown: "NVARCHAR(MAX)",
|
|
57
|
+
code: "NVARCHAR(MAX)",
|
|
58
|
+
uri: "NVARCHAR(MAX)",
|
|
59
|
+
url: "NVARCHAR(MAX)",
|
|
60
|
+
canonical: "NVARCHAR(MAX)",
|
|
61
|
+
uuid: "NVARCHAR(MAX)",
|
|
62
|
+
oid: "NVARCHAR(MAX)",
|
|
63
|
+
boolean: "BIT",
|
|
64
|
+
integer: "INT",
|
|
65
|
+
positiveint: "INT",
|
|
66
|
+
unsignedint: "INT",
|
|
67
|
+
integer64: "BIGINT",
|
|
68
|
+
decimal: "DECIMAL(18,6)",
|
|
69
|
+
date: "DATETIME2",
|
|
70
|
+
datetime: "DATETIME2",
|
|
71
|
+
instant: "DATETIME2",
|
|
72
|
+
time: "TIME",
|
|
73
|
+
base64binary: "VARBINARY(MAX)",
|
|
74
|
+
};
|
|
75
|
+
if (!fhirType) {
|
|
76
|
+
return "NVARCHAR(MAX)";
|
|
77
|
+
}
|
|
78
|
+
return typeMap[fhirType.toLowerCase()] ?? "NVARCHAR(MAX)";
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
exports.Transpiler = Transpiler;
|
|
82
|
+
//# sourceMappingURL=transpiler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transpiler.js","sourceRoot":"","sources":["../../src/fhirpath/transpiler.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,uCAA0D;AAC1D,sEAAmE;AACnE,wEAG6C;AAC7C,uCAAqE;AAKrE,MAAa,UAAU;IACrB;;OAEG;IACH,MAAM,CAAC,SAAS,CAAC,UAAkB,EAAE,OAA0B;QAC7D,sDAAsD;QACtD,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;QACrD,IAAI,CAAC,WAAW,CAAC,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;YAC9C,MAAM,IAAI,KAAK,CAAC,wCAAwC,UAAU,GAAG,CAAC,CAAC;QACzE,CAAC;QAED,IAAI,CAAC;YACH,0CAA0C;YAC1C,MAAM,OAAO,GAAG,IAAI,+BAAqB,CAAC,OAAO,CAAC,CAAC;YACnD,OAAO,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACzC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CACb,4CAA4C,UAAU,MAAM,KAAK,EAAE,CACpE,CAAC;QACJ,CAAC;IACH,CAAC;IAEO,MAAM,CAAC,eAAe,CAAC,UAAkB;QAI/C,4BAA4B;QAC5B,MAAM,WAAW,GAAG,sBAAW,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QAEvD,eAAe;QACf,MAAM,KAAK,GAAG,IAAI,6BAAa,CAAC,WAAW,CAAC,CAAC;QAC7C,MAAM,WAAW,GAAG,IAAI,4BAAiB,CAAC,KAAK,CAAC,CAAC;QAEjD,gBAAgB;QAChB,MAAM,MAAM,GAAG,IAAI,+BAAc,CAAC,WAAW,CAAC,CAAC;QAE/C,yDAAyD;QACzD,MAAM,CAAC,oBAAoB,EAAE,CAAC;QAE9B,8BAA8B;QAC9B,MAAM,IAAI,GAAG,MAAM,CAAC,gBAAgB,EAAE,CAAC;QAEvC,yBAAyB;QACzB,IAAI,MAAM,CAAC,oBAAoB,GAAG,CAAC,EAAE,CAAC;YACpC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QACxC,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,YAAY,CAAC,QAAiB;QACnC,MAAM,OAAO,GAA2B;YACtC,EAAE,EAAE,eAAe;YACnB,MAAM,EAAE,eAAe;YACvB,QAAQ,EAAE,eAAe;YACzB,IAAI,EAAE,eAAe;YACrB,GAAG,EAAE,eAAe;YACpB,GAAG,EAAE,eAAe;YACpB,SAAS,EAAE,eAAe;YAC1B,IAAI,EAAE,eAAe;YACrB,GAAG,EAAE,eAAe;YACpB,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,KAAK;YACd,WAAW,EAAE,KAAK;YAClB,WAAW,EAAE,KAAK;YAClB,SAAS,EAAE,QAAQ;YACnB,OAAO,EAAE,eAAe;YACxB,IAAI,EAAE,WAAW;YACjB,QAAQ,EAAE,WAAW;YACrB,OAAO,EAAE,WAAW;YACpB,IAAI,EAAE,MAAM;YACZ,YAAY,EAAE,gBAAgB;SAC/B,CAAC;QAEF,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,eAAe,CAAC;QACzB,CAAC;QAED,OAAO,OAAO,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,IAAI,eAAe,CAAC;IAC5D,CAAC;CACF;AAnFD,gCAmFC"}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FHIRPath to T-SQL visitor implementation using ANTLR.
|
|
3
|
+
*/
|
|
4
|
+
import { AbstractParseTreeVisitor } from "antlr4ts/tree/AbstractParseTreeVisitor";
|
|
5
|
+
import { AdditiveExpressionContext, AndExpressionContext, BooleanLiteralContext, DateLiteralContext, DateTimeLiteralContext, EntireExpressionContext, EqualityExpressionContext, ExternalConstantContext, ExternalConstantTermContext, FunctionContext, FunctionInvocationContext, IdentifierContext, ImpliesExpressionContext, IndexerExpressionContext, IndexInvocationContext, InequalityExpressionContext, InvocationExpressionContext, InvocationTermContext, LiteralTermContext, LongNumberLiteralContext, MemberInvocationContext, MembershipExpressionContext, MultiplicativeExpressionContext, NullLiteralContext, NumberLiteralContext, OrExpressionContext, ParenthesizedTermContext, PolarityExpressionContext, QualifiedIdentifierContext, QuantityContext, QuantityLiteralContext, StringLiteralContext, TermExpressionContext, ThisInvocationContext, TimeLiteralContext, TotalInvocationContext, TypeExpressionContext, UnionExpressionContext } from "../generated/grammar/fhirpathParser";
|
|
6
|
+
import { fhirpathVisitor } from "../generated/grammar/fhirpathVisitor";
|
|
7
|
+
export interface TranspilerContext {
|
|
8
|
+
resourceAlias: string;
|
|
9
|
+
constants?: {
|
|
10
|
+
[key: string]: string | number | boolean | null;
|
|
11
|
+
};
|
|
12
|
+
iterationContext?: string;
|
|
13
|
+
currentForEachAlias?: string;
|
|
14
|
+
forEachSource?: string;
|
|
15
|
+
forEachPath?: string;
|
|
16
|
+
testId?: string;
|
|
17
|
+
}
|
|
18
|
+
export declare class FHIRPathToTSqlVisitor extends AbstractParseTreeVisitor<string> implements fhirpathVisitor<string> {
|
|
19
|
+
private readonly context;
|
|
20
|
+
constructor(context: TranspilerContext);
|
|
21
|
+
protected defaultResult(): string;
|
|
22
|
+
visitEntireExpression(ctx: EntireExpressionContext): string;
|
|
23
|
+
visitTermExpression(ctx: TermExpressionContext): string;
|
|
24
|
+
visitInvocationExpression(ctx: InvocationExpressionContext): string;
|
|
25
|
+
visitIndexerExpression(ctx: IndexerExpressionContext): string;
|
|
26
|
+
visitPolarityExpression(ctx: PolarityExpressionContext): string;
|
|
27
|
+
visitMultiplicativeExpression(ctx: MultiplicativeExpressionContext): string;
|
|
28
|
+
visitAdditiveExpression(ctx: AdditiveExpressionContext): string;
|
|
29
|
+
visitTypeExpression(ctx: TypeExpressionContext): string;
|
|
30
|
+
visitUnionExpression(ctx: UnionExpressionContext): string;
|
|
31
|
+
visitInequalityExpression(ctx: InequalityExpressionContext): string;
|
|
32
|
+
visitEqualityExpression(ctx: EqualityExpressionContext): string;
|
|
33
|
+
visitMembershipExpression(ctx: MembershipExpressionContext): string;
|
|
34
|
+
visitAndExpression(ctx: AndExpressionContext): string;
|
|
35
|
+
visitOrExpression(ctx: OrExpressionContext): string;
|
|
36
|
+
visitImpliesExpression(ctx: ImpliesExpressionContext): string;
|
|
37
|
+
visitNullLiteral(_ctx: NullLiteralContext): string;
|
|
38
|
+
visitBooleanLiteral(ctx: BooleanLiteralContext): string;
|
|
39
|
+
visitStringLiteral(ctx: StringLiteralContext): string;
|
|
40
|
+
visitNumberLiteral(ctx: NumberLiteralContext): string;
|
|
41
|
+
visitLongNumberLiteral(ctx: LongNumberLiteralContext): string;
|
|
42
|
+
visitDateLiteral(ctx: DateLiteralContext): string;
|
|
43
|
+
visitDateTimeLiteral(ctx: DateTimeLiteralContext): string;
|
|
44
|
+
visitTimeLiteral(ctx: TimeLiteralContext): string;
|
|
45
|
+
visitQuantityLiteral(ctx: QuantityLiteralContext): string;
|
|
46
|
+
visitMemberInvocation(ctx: MemberInvocationContext): string;
|
|
47
|
+
visitFunctionInvocation(ctx: FunctionInvocationContext): string;
|
|
48
|
+
visitThisInvocation(_ctx: ThisInvocationContext): string;
|
|
49
|
+
visitIndexInvocation(_ctx: IndexInvocationContext): string;
|
|
50
|
+
visitTotalInvocation(_ctx: TotalInvocationContext): string;
|
|
51
|
+
visitInvocationTerm(ctx: InvocationTermContext): string;
|
|
52
|
+
visitLiteralTerm(ctx: LiteralTermContext): string;
|
|
53
|
+
visitExternalConstantTerm(ctx: ExternalConstantTermContext): string;
|
|
54
|
+
visitParenthesizedTerm(ctx: ParenthesizedTermContext): string;
|
|
55
|
+
visitExternalConstant(ctx: ExternalConstantContext): string;
|
|
56
|
+
visitFunction(ctx: FunctionContext): string;
|
|
57
|
+
visitQuantity(ctx: QuantityContext): string;
|
|
58
|
+
visitIdentifier(ctx: IdentifierContext): string;
|
|
59
|
+
visitQualifiedIdentifier(ctx: QualifiedIdentifierContext): string;
|
|
60
|
+
private handleMemberInvocation;
|
|
61
|
+
private handleJsonQueryMember;
|
|
62
|
+
private checkPreviousFieldIsArray;
|
|
63
|
+
private checkCurrentMemberIsArray;
|
|
64
|
+
private getAlwaysArrayFields;
|
|
65
|
+
/**
|
|
66
|
+
* Checks if a member name represents a FHIR array field.
|
|
67
|
+
*/
|
|
68
|
+
private isArrayField;
|
|
69
|
+
/**
|
|
70
|
+
* Handles nested JSON_QUERY with array indexing.
|
|
71
|
+
*/
|
|
72
|
+
private handleNestedQueryWithIndex;
|
|
73
|
+
private handleJsonValueMember;
|
|
74
|
+
private shouldAddArrayIndexForField;
|
|
75
|
+
private handleFunctionInvocation;
|
|
76
|
+
private handleOfTypeFunctionInvocation;
|
|
77
|
+
private handleGetReferenceKeyFunctionInvocation;
|
|
78
|
+
/**
|
|
79
|
+
* Maps polymorphic FHIR fields to their typed variants.
|
|
80
|
+
* Example: value.ofType(integer) → valueInteger
|
|
81
|
+
* Handles paths with array indices like "output[0].value" → "output[0].valueUrl"
|
|
82
|
+
*/
|
|
83
|
+
private applyPolymorphicFieldMapping;
|
|
84
|
+
/**
|
|
85
|
+
* Returns the type suffix for polymorphic field mapping.
|
|
86
|
+
*/
|
|
87
|
+
private getTypeSuffix;
|
|
88
|
+
/**
|
|
89
|
+
* Checks if a path represents a polymorphic field (value[x], onset[x], effective[x], deceased[x], identified[x]).
|
|
90
|
+
* Handles paths with array indices like "output[0].value" or "item[1].onset".
|
|
91
|
+
*/
|
|
92
|
+
private isPolymorphicField;
|
|
93
|
+
/**
|
|
94
|
+
* Cast expression to DECIMAL for numeric operations if needed.
|
|
95
|
+
* JSON_VALUE returns NVARCHAR by default, which can't be used in arithmetic operations.
|
|
96
|
+
*/
|
|
97
|
+
private castForNumericOperation;
|
|
98
|
+
private handleWhereFunctionInvocation;
|
|
99
|
+
/**
|
|
100
|
+
* Checks if the base expression represents the resource root level (not a collection).
|
|
101
|
+
*/
|
|
102
|
+
private isResourceRootLevel;
|
|
103
|
+
/**
|
|
104
|
+
* Extracts the source and JSON path from a base expression.
|
|
105
|
+
*/
|
|
106
|
+
private extractSourceAndPath;
|
|
107
|
+
/**
|
|
108
|
+
* Builds a subquery for filtering a collection with a where condition.
|
|
109
|
+
* Returns a subquery that selects the filtered items, allowing further navigation.
|
|
110
|
+
*/
|
|
111
|
+
private buildWhereExistsClause;
|
|
112
|
+
private handleExistsFunctionInvocation;
|
|
113
|
+
private handleFirstFunctionInvocation;
|
|
114
|
+
private createNewIterationContext;
|
|
115
|
+
private getParameterList;
|
|
116
|
+
private getOperatorFromContext;
|
|
117
|
+
private extractOperatorFromText;
|
|
118
|
+
private formatConstantValue;
|
|
119
|
+
private executeFunctionHandler;
|
|
120
|
+
private handleExistsFunction;
|
|
121
|
+
/**
|
|
122
|
+
* Handles exists() function without arguments, using iteration context or base.
|
|
123
|
+
*/
|
|
124
|
+
private handleExistsWithoutArgs;
|
|
125
|
+
private handleExistsWithBase;
|
|
126
|
+
private handleExistsWithIterationContext;
|
|
127
|
+
/**
|
|
128
|
+
* Builds an EXISTS clause with an OPENJSON subquery for filtering a collection.
|
|
129
|
+
*/
|
|
130
|
+
private buildExistsWithFilter;
|
|
131
|
+
/**
|
|
132
|
+
* Handles exists() function with an argument expression.
|
|
133
|
+
*/
|
|
134
|
+
private handleExistsWithArgs;
|
|
135
|
+
/**
|
|
136
|
+
* Checks if an expression is a boolean expression (contains comparison operators).
|
|
137
|
+
*/
|
|
138
|
+
private isBooleanExpression;
|
|
139
|
+
private handleEmptyFunction;
|
|
140
|
+
private handleFirstFunction;
|
|
141
|
+
private handleLastFunction;
|
|
142
|
+
private handleCountFunction;
|
|
143
|
+
private handleJoinFunction;
|
|
144
|
+
private handleWhereFunction;
|
|
145
|
+
private handleSelectFunction;
|
|
146
|
+
private handleGetResourceKeyFunction;
|
|
147
|
+
private handleOfTypeFunction;
|
|
148
|
+
private handleGetReferenceKeyFunctionWithType;
|
|
149
|
+
private handleNotFunction;
|
|
150
|
+
private handleExtensionFunction;
|
|
151
|
+
private handleBoundaryFunction;
|
|
152
|
+
}
|
|
153
|
+
//# sourceMappingURL=visitor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"visitor.d.ts","sourceRoot":"","sources":["../../src/fhirpath/visitor.ts"],"names":[],"mappings":"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"}
|