Skip to content

BoxLang + Oracle: bulkOperationsSpec INSERT...RETURNING + migratorSpec rename errors #2745

@bpamiri

Description

@bpamiri

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

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

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    boxlangBoxLang-specific compatibility issue; tracked but may not gate Lucee/Adobe releasesbug

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions