SQL on FHIR WG Meetings

The spec was pointing at an unreleased FHIRPath build — and the group stopped doing that — Jul 17, 2024

Jul 17, 2024

The housekeeping question that became a spec problem

It started as a question about tests implementations skip. 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: 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

  • 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
  • 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.

Versioning — stay at major version 2 essentially forever

It's 2 because SQL on FHIR v1 already exists, not because of maturity. 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.