[coverage] Conformance findings: STATEMENT-028

未关闭 适合新手
#1,012 0 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

维护者通常 1 天内回复

还没有人认领这个 Issue。

评估

难度
2/5
预计耗时
1-3 小时
新手友好度
72/100
Issue 类型
缺陷
描述清晰度
描述清楚
活跃度
活跃
技术栈
python
领域
backend, databases

调研方向

从 _check_command_not_in_error_or_closed_state 和 coverage PR 中 tests/ 下失败的测试 test_failed_operation_error_exposes_server_sql_state 开始。追踪终端操作状态负载的处理方式,以及 ServerOperationError 的抛出位置。当负载包含 SQLSTATE 时,错误会公开服务器报告的 SQLSTATE,并且指定测试通过,即为完成。

由索引模型根据 Issue 内容生成。

描述

Summary

Surfaced by the multi-language coverage fan-out while conformance-testing these SPEC-IDs against databricks/databricks-sql-python. 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-python) is fixed, then flips green as a tripwire.

Findings

  • STATEMENT-028 [thrift]: Thrift backend drops the failed operation's server-reported SQLSTATE: _check_command_not_in_error_or_closed_state raises ServerOperationError from the terminal operation-status payload but never forwards that payload's top-level sqlState, so the error exposes no sql_state — while the kernel backend sets that exact attribute on the same exception class, making SQLSTATE availability depend on which wire protocol delivered the failure
    • failing test: test_failed_operation_error_exposes_server_sql_state (see the coverage PR diff under tests/)

Reproduce & Expected

STATEMENT-028 — Validates that a statement which COMPILES and then FAILS AT RUNTIME on the server raises an error carrying the server-reported SQLSTATE as first-class error metadata -- a dedicated field/accessor on…

Reproduce:

SELECT raise_error('boom')

Expected (per the shared spec):

  • full assertion contract:
result:
- error:
    present: true
- error:
    contains:
    - boom
- error_sql_state:
    present: true
    length: 5
  condition: the terminal operation-status payload carried a SQLSTATE for the failed
    operation
  description: 'The error exposes a 5-character SQLSTATE. Gated on the server actually
    sending one:

    if the terminal payload carries none the driver must NOT invent one, and a surface

    that mandates a SQLSTATE may report its own generic state (e.g. ODBC `HY000`).

    '
- error_sql_state:
    equals_wire_value: true
  condition: the terminal operation-status payload carried a SQLSTATE for the failed
    operation
  description: 'Equal to the operation-level SQLSTATE the protocol blocks below locate
    on the wire

    for this run.

    '
- error_sql_state:
    not_equals: '00000'
  description: 'Never the enclosing status/transport envelope''s success SQLSTATE
    -- that envelope

    reports that the status call succeeded, not how the query failed.

    '
protocol:
  thrift:
  - response_field:
      method: GetOperationStatus
      path: sqlState
      present: true
      occurrence: last
      condition: GetOperationStatus response operationState == ERROR_STATE
  - response_field:
      method: GetOperationStatus
      path: status.statusCode
      equals: SUCCESS_STATUS
      occurrence: last
      condition: GetOperationStatus response operationState == ERROR_STATE
  sea:
  - response_field:
      operation: ExecuteStatement
      path: status.sql_state
      present: true
      occurrence: last
      condition: execute response status.state == FAILED
  - response_field:
      operation: GetStatementStatus
      path: status.sql_state
      present: true
      occurrence: last
      condition: status response status.state == FAILED

Context

主要语言
Python
星标
236
派生
162
平均合并
13 小时 13 分钟
30 天内合并 PR
23

环境准备

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

databricks/databricks-sql-python 的其他 Issue

查看 databricks/databricks-sql-python 的全部 Issue

相似的 Issue

更多 Python Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。