[coverage] Conformance findings: PARAMQUERY-022,PARAMQUERY-023
維護者通常 1 天內回覆
還沒有人認領這個 Issue。
評估
- 難度
- 4/5
- 預估耗時
- 3-5 天
- 新手友好度
- 54/100
- Issue 類型
- 缺陷
- 描述清晰度
- 基本清楚
- 活躍度
- 活躍
- 技術堆疊
- python
研究方向
Start by locating DecimalParameter and the Thrift and SEA parameter binding paths, then inspect the named xfail tests in the coverage PR under tests/. Check how Decimal values are serialized and how precision is validated before execution. Done means exponent-form values bind as plain numerals with correct DECIMAL precision and scale, and values beyond maximum precision fail before ExecuteStatement.
由索引模型根據 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
- PARAMQUERY-022 [thrift]: DecimalParameter renders a bound DECIMAL's wire value as str(Decimal) and derives DECIMAL(p,s) by counting that string's characters, so Decimal("1e-7") is sent as value "1E-7" with type DECIMAL(4,0) and the server rounds the value to 0 instead of binding 0.0000001 as DECIMAL(7,7)
- failing test:
test_exponent_notation_decimal_parameter_binds_as_plain_numeral(see the coverage PR diff undertests/)
- failing test:
- PARAMQUERY-022 [sea]: the connector sends a bound DECIMAL's value in exponent notation ("1E-7") on the SEA wire rather than the equivalent plain numeral "0.0000001"; the Rust kernel re-derives DECIMAL(7,7) so the value is NOT lost on SEA, but the plain-numeral wire form is not met (same str(Decimal) root cause as the Thrift truncation)
- failing test:
test_exponent_notation_decimal_parameter_binds_as_plain_numeral(see the coverage PR diff undertests/)
- failing test:
- PARAMQUERY-023 [thrift]: the Thrift path performs no client-side precision validation for a bound DECIMAL: a 39-digit value is derived as DECIMAL(39,0) and sent, failing server-side with INVALID_PARAMETER_MARKER_VALUE.INVALID_DATA_TYPE (SQLSTATE 22023) instead of raising a bind-time parameter error before any ExecuteStatement, as the Rust-kernel/SEA path correctly does
- failing test:
test_decimal_parameter_beyond_maximum_precision_rejected_before_execution(see the coverage PR diff undertests/)
- failing test:
- PARAMQUERY-022: DecimalParameter renders a bound DECIMAL's wire value as str(Decimal) and derives DECIMAL(p,s) by counting that string's characters, so an exponent-form value is corrupted on Thrift: Decimal("1e-7") is sent as value "1E-7" with type DECIMAL(4,0) and the server rounds it to 0 (on SEA the Rust kernel re-derives DECIMAL(7,7) so the value survives, but "1E-7" still rides the wire instead of the plain numeral "0.0000001")
- PARAMQUERY-023: the Thrift path performs no client-side precision validation for a bound DECIMAL: a 39-digit value is derived as DECIMAL(39,0) and sent, so it fails server-side with INVALID_PARAMETER_MARKER_VALUE.INVALID_DATA_TYPE (SQLSTATE 22023) instead of raising a bind-time parameter error before any ExecuteStatement, as the Rust-kernel/SEA path correctly does
Context
- The behavior was first fixed in a DIFFERENT driver — reference PR: https://github.com/databricks/databricks-sql-nodejs/pull/585 — which seeded the shared language-neutral spec. This issue tracks the same conformance gap in databricks/databricks-sql-python; 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/2022
- 主要語言
- Python
- 星號
- 236
- 分支
- 162
- 平均合併
- 13 小時 13 分鐘
- 30 天內合併 PR
- 23
環境準備
- 沒有 Dockerfile 或 Docker Compose 檔案
- 有 Pull Request 範本
- 閱讀貢獻指南
從這裡開始
- 先讀完整個 Issue,再讀專案的貢獻指南。
- 在 Issue 下留言說明你要接手 —— 這能避免兩個人做同樣的事。
- Fork 儲存庫,在一個分支上完成修改。
- 送出 Pull Request,並在描述裡引用這個 Issue 編號。
databricks/databricks-sql-python 的其他 Issue
-
難度 2/5 1-3 小時 新手友好度 72/100
databricks/databricks-sql-python#1034 ·
維護者通常 1 天內回覆
-
難度 2/5 1-3 小時 新手友好度 72/100
databricks/databricks-sql-python#1012 ·
維護者通常 1 天內回覆
-
Token federation: `_exchange_token` raises KeyError('access_token') on error responses, discarding the real failure reason可能已有人在做 @TangoEnSkai 於 81 天前認領。 未關閉
難度 2/5 1-3 小時 新手友好度 76/100
databricks/databricks-sql-python#904 ·
維護者通常 1 天內回覆
-
難度 2/5 1-3 小時 新手友好度 84/100
databricks/databricks-sql-python#865 ·
維護者通常 1 天內回覆
-
engineer-bot
難度 2/5 1-3 小時 新手友好度 76/100
databricks/databricks-sql-python#860 · 3 則留言 ·
維護者通常 1 天內回覆
查看 databricks/databricks-sql-python 的全部 Issue
相似的 Issue
-
難度 2/5 1-3 小時 新手友好度 67/100
FinanceFlash/unvibecode#699 ·
維護者通常 1 天內回覆
-
enhancement Website
難度 2/5 1-3 小時 新手友好度 78/100
OWASP/OWASP-Hunting#96 ·
維護者通常 1 天內回覆
-
難度 2/5 1-3 小時 新手友好度 78/100
micropython/micropython#19942 ·
維護者通常 1 天內回覆
-
A rebuild posts "not part of this build" success to the commit's failed `nix-build` gate and effects可能已有人在做 @Padraic-O-Mhuiris 今天認領。 未關閉
難度 2/5 1-3 小時 新手友好度 78/100
維護者通常 1 天內回覆
-
`epoch.Integer` raises a raw OverflowError for integers too large to convert to a float可能已有人在做 @arindam77 今天認領。 未關閉
難度 2/5 1-3 小時 新手友好度 78/100
pydantic/pydantic-extra-types#479 ·
維護者通常 1 天內回覆