Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion sqlonfhir/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,6 @@

__version__ = "0.0.2"

from .sqlonfhir import eval as evaluate
from .sqlonfhir import evaluate as evaluate

__all__ = ["evaluate"]
25 changes: 13 additions & 12 deletions sqlonfhir/sqlonfhir.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
from fhirpathpy.models import models


def eval(resources, view_definition):
def evaluate(resources, view_definition):
"""Evaluate FHIR resources against a SQL on FHIR view definition.

Processes a list of FHIR resources and transforms into tabular data based
Expand Down Expand Up @@ -46,17 +46,18 @@ def eval_fhirpath(self, resource, path):
# $this is not in the FHIRPath spec, replacing as per
# reference implementation
path = path.replace("$this", "identity()")
# Add functions to FHIRPath that are needed for SQL on FHIR
user_invocation_table = {
"getReferenceKey": {
"fn": self.get_reference_key,
"arity": {0: [], 1: ["Identifier"]},
},
"getResourceKey": {"fn": self.get_resource_key},
"identity": {"fn": self.identity},
}

if path not in self.fhirpath_cache:
# Add functions to FHIRPath that are needed for SQL on FHIR
user_invocation_table = {
"getReferenceKey": {
"fn": self.get_reference_key,
"arity": {0: [], 1: ["Identifier"]},
},
"getResourceKey": {"fn": self.get_resource_key},
"identity": {"fn": self.identity},
}

self.fhirpath_cache[path] = compile(
path,
model=models["r4"],
Expand Down Expand Up @@ -86,10 +87,10 @@ def get_all_child_columns(self, expression):
empty_record[column["name"]] = None
if "select" in expression:
for selection in expression["select"]:
empty_record = empty_record | self.get_all_child_columns(selection)
empty_record |= self.get_all_child_columns(selection)
if "unionAll" in expression:
for selection in expression["unionAll"]:
empty_record = empty_record | self.get_all_child_columns(selection)
empty_record |= self.get_all_child_columns(selection)
return empty_record

def for_each_or_null(self, expr, resource, view_definition):
Expand Down