Describe the bug
On BoxLang × Oracle, five specs error. Lucee 6 and Lucee 7 skip Oracle entirely (the matrix records 0 pass / 0 fail / 0 err because #2663 put Oracle on a soft-fail track), so BoxLang is the only engine currently exercising the Oracle datasource — and these are the resulting errors.
Failing specs
wheels.migrator.migratorSpec :: renames c_o_r_e_levels -> wheels_levels and c_o_r_e_migrator_versions -> wheels_*
→ ORA: Closed statement
wheels.model.bulkOperationsSpec :: inserts multiple records in a single call
→ ORA: returning clause is not allowed with INSERT and Table Value Constructor
wheels.model.bulkOperationsSpec :: inserts records with auto timestamps
→ ORA: returning clause is not allowed with INSERT and Table Value Constructor
wheels.model.bulkOperationsSpec :: skips timestamps when timestamps argument is false
→ ORA: no statement parsed
wheels.model.bulkOperationsSpec :: handles single record insertion
→ ORA: no statement parsed
Reproduction
tools/test-matrix.sh boxlang oracle
Likely root causes
-
bulkOperationsSpec (4 errors) — Oracle does not accept INSERT ... VALUES (...), (...) RETURNING ... (multi-row values constructor with RETURNING). The bulk-insert code path needs an Oracle-specific branch (likely INSERT ALL INTO ... SELECT * FROM dual per row, or per-row INSERT in a loop, plus serial RETURNING). "No statement parsed" on the single-record cases suggests the generated SQL is malformed in a different way for those — investigate after the multi-row case is fixed.
-
migratorSpec rename (1 error) — "Closed statement" usually means the JDBC statement object was closed before result extraction. Oracle's JDBC driver is stricter about statement lifecycle than other drivers. The rename path may be reusing a closed statement, or the rename is triggering an unsupported Oracle DDL that fails silently and leaves the statement in a bad state.
Evidence
Compat-matrix run 25978222394 (develop, 2026-05-17):
So BoxLang is currently the only engine that catches these. Worth fixing both because (a) the bulk-insert RETURNING constraint is a real Oracle limitation that any engine will hit once Oracle is restored to the hard-gated set, and (b) the migrator rename error suggests a JDBC lifecycle bug worth chasing on its own.
Expected behavior
Both specs pass on BoxLang × Oracle, and continue to pass once Lucee runs Oracle again.
Related
Desktop
- CFML Engine: BoxLang
- Database: Oracle
Describe the bug
On BoxLang × Oracle, five specs error. Lucee 6 and Lucee 7 skip Oracle entirely (the matrix records
0 pass / 0 fail / 0 errbecause #2663 put Oracle on a soft-fail track), so BoxLang is the only engine currently exercising the Oracle datasource — and these are the resulting errors.Failing specs
Reproduction
Likely root causes
bulkOperationsSpec(4 errors) — Oracle does not acceptINSERT ... VALUES (...), (...) RETURNING ...(multi-row values constructor with RETURNING). The bulk-insert code path needs an Oracle-specific branch (likelyINSERT ALL INTO ... SELECT * FROM dualper row, or per-row INSERT in a loop, plus serial RETURNING). "No statement parsed" on the single-record cases suggests the generated SQL is malformed in a different way for those — investigate after the multi-row case is fixed.migratorSpecrename (1 error) — "Closed statement" usually means the JDBC statement object was closed before result extraction. Oracle's JDBC driver is stricter about statement lifecycle than other drivers. The rename path may be reusing a closed statement, or the rename is triggering an unsupported Oracle DDL that fails silently and leaves the statement in a bad state.Evidence
Compat-matrix run 25978222394 (develop, 2026-05-17):
boxlang/oracle: 5 errors (these specs)lucee6/oracle: 0 / 0 / 0 (datasource skipped — ci: Oracle datasource broken across all engines — Invalid URL, missing DBMS_LOCK, constraint cleanup #2663 still partially open)lucee7/oracle: 0 / 0 / 0 (same)So BoxLang is currently the only engine that catches these. Worth fixing both because (a) the bulk-insert RETURNING constraint is a real Oracle limitation that any engine will hit once Oracle is restored to the hard-gated set, and (b) the migrator rename error suggests a JDBC lifecycle bug worth chasing on its own.
Expected behavior
Both specs pass on BoxLang × Oracle, and continue to pass once Lucee runs Oracle again.
Related
Desktop