SQL on FHIR WG Meetings
SQL on FHIR WG Meeting — January 13, 2026
Jan 13, 2026

Topics discussed:

  • FHIRPath's own test suite says join on an empty collection returns an empty collection; the SQL on FHIR tests expect an empty string. The group leaned towards following FHIRPath and stating explicitly that an empty collection is null in the result. That's a breaking change with a real cost: implementations were forced to return an empty string to make the tests green, so they'll have to go and fix their engines, and it needs a release note and a changelog. There's a second mess to clean up — join isn't in normative FHIRPath, so its tests belong under the experimental tag, but some of them leaked into the non-experimental part, which quietly misleads everyone.
  • A harder sub-question nobody settled: with collection: true, what does an empty collection come back as? FHIRPath can't distinguish null from an empty collection in the first place — emptiness propagates through functions exactly like null, so you can't tell whether a filter matched nothing or the element was never there. Null is the only representation that makes sense across every engine, but a zero-length array is what ANSI SQL would give you.
  • ViewDefinition isn't a real FHIR resource type, so the operation's parameter has to be typed canonical with a special extension marking it as actually being a ViewDefinition — a workaround suggested by Graham, because otherwise the IG builder simply can't build it. It works, but the published documentation then reads as though the parameter really is a canonical, which is confusing to anyone learning from it. The follow-up is to get the IG builder to honour the extension and render ViewDefinition instead.
  • The IG registry pull request was accepted, but SQL on FHIR 2.0.0 never actually appeared in the package registry. It surfaced by accident: building an unrelated IG throws an error saying it can't find SQL on FHIR. The theory is that only published releases get picked up, and there's no such thing as publishing a nightly or CI build — so the released version needs to land there, separate from whatever the current snapshot is.
  • A demo from John of the Pathling side: SQL on FHIR $run and $export working, alongside bulk export, two flavours of bulk import, and an experimental bulk submit. The notable part is that making the query builder UI work meant supporting ViewDefinition as a full CRUD resource across the API — create it, read it, run it — not just implementing $run.