SQL on FHIR WG Meetings
SQL on FHIR WG Meeting — July 17, 2024
Jul 17, 2024

Topics discussed:

  • It started as a housekeeping question about tests that implementations skip, and turned into a spec problem. join behaved differently across FHIRPath versions — at one point the argument was required, at another it had a default — so the same test passes on one engine and fails on another. The fix agreed was to stop quietly excluding tests and instead mark them optional, with the report distinguishing passed, failed and skipped and carrying a reason.
  • The underlying issue: join and the boundary functions don't exist in any released FHIRPath. The spec points at the continuous-integration build for them, which means normative SQL on FHIR content rests on something that can change tomorrow.
  • Three ways out were argued. Anchor on the released FHIRPath version and demote what isn't in it. Add the group's own constraints — rejected, because that is just forking the edge build. Or copy the definitions into SQL on FHIR itself — also rejected, because you'd end up with two definitions of the same function drifting apart as FHIRPath finalises its own. The decision was the first: normative content points at the release, and join and the boundary functions become optional, flagged as tracking a moving target. The analogy offered was JSON Schema's draft keywords — some have sat there for five years and never became standard, but people can still play with them because the label says no commitment.
  • A consequence nobody had noticed: the example on the spec's front page uses join. Rather than shipping a headline example that leans on an optional function, the patient demographics example gets reworked to do the same thing without it. getResourceKey stays, since that one is under the group's own control.
  • On versioning, the group settled on staying at major version 2 essentially forever — it's 2 because SQL on FHIR v1 already exists, not because of maturity — with no breaking changes inside that series and additive work going into minor and patch. An argument for restarting at 0 was made and dropped: beyond 0, a major version number carries no meaning, so the only thing that matters is declaring the rules and sticking to them.