Skip to content

[coverage] Conformance findings: STATEMENT-025 #1624

Description

@peco-engineer-bot

Summary

Surfaced by the multi-language coverage fan-out while conformance-testing these SPEC-IDs against databricks/databricks-jdbc. Each finding is committed as an expected-failure (xfail) test in the coverage PR — the test asserts the CORRECT (post-fix) behavior and stays red until THIS driver (databricks/databricks-jdbc) is fixed, then flips green as a tripwire.

Findings

  • STATEMENT-025 [thrift]: Statement.close() retries the failed teardown CloseOperation at an unwrapped call site, so the 404 propagates out of close() instead of being swallowed as best-effort (DatabricksHttpException)
    • failing test: testFailedTeardownCloseIsBestEffort (see the coverage PR diff under tests/)
  • STATEMENT-025 [sea]: Statement.close() retries the failed teardown DELETE /statements/{id} at an unwrapped call site, so the SDK's unchecked com.databricks.sdk.core.error.platform.NotFound escapes close() and even catch(SQLException) cannot contain it
    • failing test: testFailedTeardownCloseIsBestEffort (see the coverage PR diff under tests/)
  • STATEMENT-025: A failed best-effort teardown close escapes Statement.close(): closeServerOperation() swallows the failure but leaves serverOperationClosed=false, so close() retries the close RPC at an unwrapped call site and the 404 propagates to the caller after results were fully consumed (thrift: DatabricksHttpException; sea: unchecked com.databricks.sdk.core.error.platform.NotFound, which catch(SQLException) cannot contain)

Reproduce & Expected

STATEMENT-025 — Validates that a FAILING per-operation close RPC issued during teardown is BEST EFFORT: the failure must not propagate out of close/dispose, and must not abort the rest of teardown.

Reproduce:

SELECT id FROM range(1000)
SELECT 1

Expected (per the shared spec):

  • result has exactly 1000 row(s)
  • completes without an exception
  • completes without an exception
  • result has exactly 1 row(s)
  • full assertion contract:
result:
- label: consumed
  row_count: 1000
- label: teardown
  no_exception: true
- label: reused_connection
  no_exception: true
- label: reused_connection
  row_count: 1
protocol:
  thrift:
  - call_min:
      method: CloseOperation
      min: 1
  sea:
  - call_min:
      operation: CloseStatement
      min: 1

Context

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions