Repository navigation
Closed as duplicate
Description
Summary
Surfaced by the multi-language coverage fan-out while conformance-testing these SPEC-IDs against databricks/databricks-sql-nodejs. 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-sql-nodejs) is fixed, then flips green as a tripwire.
Findings
- METADATA-035 [thrift, sea]: getTables treats a non-null empty tableTypes filter ([]) as match-none and returns zero rows, instead of behaving like null and matching all table types
- failing test:
getTables — tableTypes=[] (empty filter) matches ALL table types(see the coverage PR diff undertests/)
- failing test:
- STATEMENT-023 [thrift]: on the thrift path a FAILED-state statement error carries the server message but leaves the structured SQLSTATE unpopulated, so consumers cannot branch on 42P01
- failing test:
failed statement — error exposes server SQLSTATE 42P01 and an informative message(see the coverage PR diff undertests/)
- failing test:
Reproduce & Expected
STATEMENT-023 — Validates that when the server resolves a statement to a FAILED state, the driver surfaces the server's SQLSTATE on the raised error — not just a free-text message. A statement whose SQLSTATE is stable and server-assigned is used: a reference to a table that does not exist, which Databricks reports as TABLE_OR_VIEW_NOT_FOUND with SQLSTATE 42P01. The raised error must expose that SQLSTATE through the driver's standard error surface (ADBC AdbcException.SqlState, JDBC SQLException.getSQLState(), DBAPI error attributes, ODBC SQLGetDiagRec SQLSTATE, etc.). This pins the portable half of the cross-protocol error contract: consumers branch on the status/SQLSTATE pair, so both protocols must populate it identically even though each raises its own natural concrete exception class. The CONCRETE exception TYPE is deliberately NOT asserted — it legitimately differs per protocol and per driver (the reference driver raises DatabricksException on SEA and HiveServer2Exception on Thrift), so requiring one class would encode a driver-internal detail rather than the contract.
Reproduce:
SELECT * FROM nonexistent_catalog_xyz123.nonexistent_schema.nonexistent_tableExpected (per the shared spec):
- full assertion contract:
result:
- error:
sql_state: 42P01
- error:
contains:
- TABLE_OR_VIEW_NOT_FOUND
- not found
- cannot be foundContext
- The behavior was first fixed in a DIFFERENT driver — reference PR: fix(csharp): align SEA metadata error behavior with Thrift adbc-drivers/databricks#604 — which seeded the shared language-neutral spec. This issue tracks the same conformance gap in databricks/databricks-sql-nodejs; the reference PR is for cross-referencing the intended behavior, NOT a change to this repo.
- Coverage PR carrying the reproducing xfail test(s): https://github.com/databricks/databricks-driver-test/pull/1072
Metadata
Metadata
Assignees
Labels
No labels
Activity
vuanhphung commentedon Oct 30, 2026
Closing as a duplicate, since both findings here are tracked in other issues:
tableTypesfilter returns 0 rows instead of matching all types) is tracked in [coverage] Conformance findings: METADATA-035,METADATA-036 #473.err.response.sqlState, not on the error itself) is part of missing errorCode and statusCode on errors #33.Both still reproduce on the latest release (
@databricks/sql@2.4.0). The xfail tests in the coverage PR linked above still track them.