`PrimitiveArray::validate_decimal_precision` rejects every decimal array with a negative scale
I maintainer di solito rispondono entro 1 giorno
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 78/100
Direzione di ricerca
Leggi arrow-array/src/array/primitive_array.rs intorno a PrimitiveArray::validate_decimal_precision, poi confronta il suo controllo della scala con validate_decimal_precision_and_scale in arrow-array/src/types.rs. Aggiungi un test di regressione per un Decimal128Array con scala negativa, come il caso dell’issue con precision 5 e scale -2; il lavoro è completato quando quel valore viene convalidato correttamente e i controlli esistenti per le scale positive continuano a passare.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Describe the bug
PrimitiveArray::validate_decimal_precision returns Decimal precision {precision} is less than scale {scale} for any array whose scale is negative, whatever its precision and values. Its guard compares precision < self.scale() as u8, and a negative scale cast to u8 wraps, so -2 becomes 254.
The type-level check validate_decimal_precision_and_scale guards the same comparison with scale > 0:
The guard came in with #8396, first released in 57.0.0.
To Reproduce
On main at cc58320c2d:
use arrow_array::Decimal128Array;
fn main() {
// 1 at scale -2 is 100, which fits in precision 5
let a = Decimal128Array::from(vec![1])
.with_precision_and_scale(5, -2)
.unwrap();
println!("{:?}", a.validate_decimal_precision(5));
// Err(InvalidArgumentError("Decimal precision 5 is less than scale -2"))
// The same value at scale 2 passes
let b = Decimal128Array::from(vec![1])
.with_precision_and_scale(5, 2)
.unwrap();
println!("{:?}", b.validate_decimal_precision(5));
// Ok(())
}
Expected behavior
Ok(()) for the first array, since its value fits precision 5. A guard of self.scale() > 0 && precision < self.scale() as u8 would match validate_decimal_precision_and_scale.
Additional context
Property-based tests found it on a generated Decimal128(5, -2) array. Checking each value with DecimalType::validate_decimal_precision works around it.
- Lingua principale
- Rust
- Stelle
- 3.7k
- Fork
- 1.4k
- Merge medio
- 2g 7h
- PR unite (30g)
- 292
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Ha un modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di apache/arrow-rs
-
development-process
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
apache/arrow-rs#12145 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
parquet: panic "Decoder for dict should have been set" reading a primitive column whose dictionary page is missingForse di nuovo libera Una pull request per questa issue è stata chiusa senza essere unita. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 77/100
apache/arrow-rs#12129 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
`substring` errors when the bytes under a null `Utf8` slot would be cut inside a characterForse già presa @cakeni l’ha presa 25 giorni fa. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
apache/arrow-rs#11590 · 1 commento · 1 assegnatario ·
I maintainer di solito rispondono entro 1 giorno
-
enhancement parquet
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
I maintainer di solito rispondono entro 1 giorno
-
i256::to_f32 double-rounds through f64Forse di nuovo libera Una pull request per questa issue è stata chiusa senza essere unita. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 74/100
apache/arrow-rs#11316 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di apache/arrow-rs
Issue simili
-
ci javascript tests
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
jonathanong/no-mistakes#3258 ·
I maintainer di solito rispondono entro 1 giorno
-
area: cpu-engines area: fuzzer good first issue
Difficoltà 2/5 1-3 ore Idoneità per principianti 91/100
hffgzktbcc-blip/ounce-core#402 ·
I maintainer di solito rispondono entro 1 giorno
-
compiler
Difficoltà 2/5 1-3 ore Idoneità per principianti 74/100
HerringtonDarkholme/hd-lang#1699 ·
I maintainer di solito rispondono entro 1 giorno
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
swc-project/swc-ai-issues#432 ·
-
SPLADE `/embed_sparse` output depends on the other inputs in the batch (candle BertModel / DistilBertModel)Forse già presa @0z5a l’ha presa oggi. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
huggingface/text-embeddings-inference#979 ·
I maintainer di solito rispondono entro 1 giorno