Describe the bug
wheels.tests.specs.model.lockingSpec exercises advisory-lock and explicit-transaction behavior, but assumes the underlying DB supports these primitives. On engines/DBs where the primitive isn't supported, the spec errors instead of skipping gracefully:
Evidence
Compat-matrix run #25837380625 (2026-05-13). Lucee 6 + H2 = 4; Lucee 6 + SQL Server = 4; BoxLang across mysql/postgres/sqlite = 3.
Expected behavior
When the underlying DB doesn't support the locking primitive the spec is testing, the spec should be skipped for that DB (not errored). When it IS supported, the spec should pass.
The current state is "exercises feature, errors when feature is unavailable" — which makes the matrix unable to distinguish "lock implementation broken" from "lock not applicable to this DB."
Suggested fix shape
Two parts:
- Guard the lock-feature specs so they call
$skip() (or equivalent) when the current DB adapter reports no advisory-lock support. The Wheels DB adapters know which features they support; check that.
- Investigate the BoxLang-on-supported-DBs
Expected [false] to be true case separately — that suggests a real bug in lock-release-on-exception on BoxLang specifically. It's not a "feature unsupported" case (the DBs in question — mysql, postgres, sqlite — do support advisory locks), so it's likely a try/catch flow issue in the BoxLang adapter's locking path.
Additional context
Related: #2649, #2663
Describe the bug
wheels.tests.specs.model.lockingSpecexercises advisory-lock and explicit-transaction behavior, but assumes the underlying DB supports these primitives. On engines/DBs where the primitive isn't supported, the spec errors instead of skipping gracefully:H2 does not support advisory locks.(4 errors)The statement or function must be executed in the context of a user transaction.(4 errors)Expected [false] to be true(3 errors — same suite,releases lock even when callback throws an exception)Oracle advisory locks require DBMS_LOCK package setup.(4 — see ci: Oracle datasource broken across all engines — Invalid URL, missing DBMS_LOCK, constraint cleanup #2663)Evidence
Compat-matrix run #25837380625 (2026-05-13). Lucee 6 + H2 = 4; Lucee 6 + SQL Server = 4; BoxLang across mysql/postgres/sqlite = 3.
Expected behavior
When the underlying DB doesn't support the locking primitive the spec is testing, the spec should be skipped for that DB (not errored). When it IS supported, the spec should pass.
The current state is "exercises feature, errors when feature is unavailable" — which makes the matrix unable to distinguish "lock implementation broken" from "lock not applicable to this DB."
Suggested fix shape
Two parts:
$skip()(or equivalent) when the current DB adapter reports no advisory-lock support. The Wheels DB adapters know which features they support; check that.Expected [false] to be truecase separately — that suggests a real bug in lock-release-on-exception on BoxLang specifically. It's not a "feature unsupported" case (the DBs in question — mysql, postgres, sqlite — do support advisory locks), so it's likely a try/catch flow issue in the BoxLang adapter's locking path.Additional context
lock release on exceptionfailure may warrant its own ticket once investigated; for now it's lumped here because the spec is the same.Related: #2649, #2663