[coverage] Conformance findings: PARAMQUERY-021
Ninguém assumiu esta issue ainda.
Avaliação
- Dificuldade
- 3/5
- Tempo estimado
- 1-2 dias
- Facilidade para iniciantes
- 55/100
Direção de pesquisa
Comece localizando o tratamento de DecimalParameter e o caminho de vinculação de parâmetros em databricks-sql-python; em seguida, compare-os com o teste que está falhando, test_decimal_target_type_never_truncates_bound_scale, no coverage PR. Execute o teste de conformidade referenciado para thrift e sea; considera-se concluído quando DECIMAL(10,2) explícito é vinculado corretamente e os valores preservam todos os dígitos fracionários declarados ou provenientes da origem, sem truncamento.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
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-021 [thrift]: DecimalParameter with explicit precision/scale renders DECIMAL(scale,precision) instead of DECIMAL(precision,scale), so a declared DECIMAL(10,2) target is sent as DECIMAL(2,10) and the server rejects it (INVALID_PARAMETER_MARKER_VALUE.INVALID_DATA_TYPE, SQLSTATE 22023)
- failing test:
test_decimal_target_type_never_truncates_bound_scale(see the coverage PR diff undertests/)
- failing test:
- PARAMQUERY-021 [sea]: DecimalParameter with explicit precision/scale renders DECIMAL(scale,precision) instead of DECIMAL(precision,scale), so a declared DECIMAL(10,2) target becomes DECIMAL(2,10) and the kernel rejects the bind with ProgrammingError "DECIMAL scale must be in 0..=precision"
- failing test:
test_decimal_target_type_never_truncates_bound_scale(see the coverage PR diff undertests/)
- failing test:
- PARAMQUERY-021: DecimalParameter with explicit precision/scale renders the cast expression as DECIMAL(scale,precision) instead of DECIMAL(precision,scale), so a declared DECIMAL(10,2) target is sent as DECIMAL(2,10) and every bind with an explicitly declared decimal target fails (thrift: server INVALID_PARAMETER_MARKER_VALUE.INVALID_DATA_TYPE / SQLSTATE 22023; kernel: ProgrammingError "DECIMAL scale must be in 0..=precision")
Reproduce & Expected
PARAMQUERY-021 — Verify that declaring a DECIMAL/NUMERIC target type for a bound parameter never silently drops fractional digits.
Reproduce:
SELECT ? AS v
SELECT ? AS v
SELECT ? AS v
Expected (per the shared spec):
- All three binds prepare and execute successfully.
- (a) The declared DECIMAL(10,2) accommodates the value, so the parameter rides as that decimal type and the value compares numerically equal to 123.45 with both fractional digits intact.
- (b) THE CORE GUARANTEE: with no declared scale, the value is still 123.45 -- NOT 123. Assert the value, not the reported column type: a conforming driver may legitimately deliver this as a decimal the server inferred from the literal OR as the lossless text/string form, so the type is implementation latitude while the VALUE is the contract.
- (c) The value's own scale (4) is authoritative over the under-declared target scale (2): all four fractional digits survive. A result of 123.45 (or 123) is a truncation violation.
Context
- The behavior was first fixed in a DIFFERENT driver — reference PR: https://github.com/databricks/databricks-odbc/pull/167 — 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/1179
- Linguagem predominante
- Python
- Estrelas
- 233
- Forks
- 152
- Merge médio
- 21h 5min
- PRs com merge (30d)
- 10
Guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de databricks/databricks-sql-python
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 76/100
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 72/100
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 84/100
Todas as issues de databricks/databricks-sql-python
Issues semelhantes
-
enhancement
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 70/100
canonical/paas-charm#368 · 1 comentário ·
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 75/100
-
tech debt
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 75/100
-
addition to tracking list Aberta
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 90/100
StevenBlack/hosts#3256 ·
-
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 90/100
qualcomm/qai-appbuilder#275 ·