trunc(x) on a column turns -0.0 into 0.0

Fermée Adaptée aux débutants
#25,702 1 commentaire 0 réactions 1 personne assignée Voir sur GitHub

Les mainteneurs répondent en général sous 1 jour

@1fanwang y travaille déjà.

Depuis le 25/9/2026.

  • #25732 par @1fanwang — ouverte

Évaluation

Difficulté
2/5
Temps estimé
1-3 heures
Accessibilité débutants
75/100
Type d'issue
Bug
Clarté
Clairement spécifiée
Activité
Active
Stack technique
rust, sql
Domaine
databases

Piste de recherche

Recherchez l'implémentation de la fonction trunc dans la base de code DataFusion, probablement dans un fichier comme expr/scalar.rs ou expr/builtin.rs. Le bogue se trouve dans le chemin de colonne où x == 0_f64 est utilisé. Remplacez cette condition par une vérification qui préserve le signe, peut-être en utilisant directement x.trunc(). Écrivez un test dans le module de test correspondant pour vérifier que trunc(-0.0) renvoie -0.0 pour une colonne. Exécutez les tests de fonctions SQL existants pour vous assurer qu'il n'y a pas de régressions.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

trunc(x) drops the sign of -0.0, but only when it runs on a column. On a scalar, and for trunc(x, 0), the sign is kept.

SELECT trunc(column1), trunc(column1, 0) FROM (VALUES (CAST(-0.0 AS DOUBLE)));
-- got:      0.0, -0.0
-- expected: -0.0, -0.0

The column code path returns 0.0 for either zero:

if x == 0_f64 { 0_f64 } else { x.trunc() }

-0.0 == 0.0 is true, so -0.0 becomes 0.0. f64::trunc already keeps the sign, so plain x.trunc() would be enough.

Seen through Lance (pylance 12.0.0): trunc(x, 0) on a -0.0 column returns -0.0. This line is the same on main and in 55.1.0. I found no existing issue or PR for it.

Langage dominant
Rust
Étoiles
9.6k
Forks
2.6k
Merge moyen
4 j 5 h
PR mergées (30 j)
319

Préparer son environnement

Ouvrir dans Codespaces

Lance le conteneur de développement du projet dans votre navigateur, avec votre propre compte GitHub.

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de apache/datafusion

Toutes les issues de apache/datafusion

Issues similaires

Plus d'issues Rust

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.