objectbox / objectbox/objectbox-java

QueryBuilder's notEqual doesn't return objects where that field is null

Ouverte
#915 3 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

enhancement
Langage dominant
Java
Étoiles
4.6k
Forks
311
Métriques de merge des PR
Aucune PR mergée en 30 j

Description

It's in the title, but a concrete example would be. Say we have a model with a String field called field. We have two objects in the database, one of them has field set to an empty String and another one has it set to null. The following query returns the one with the empty field but not the one with null:

box.query().notEqual(Model_.field, "hello world").build().find()

Basic info (please complete the following information):

  • ObjectBox version: latest (2.7.1)
  • Reproducibility: always
  • Device: any
  • OS: any

Expected behavior

An object with a particular field being null should match a notEqual which contains any non-null value, instead it doesn't.

Code

        store = MyObjectBox.builder().androidContext(this).buildDefault()
        val box = store.boxFor(Model::class.java)
        box.removeAll()
        Log.d("TEST_LOG", "putting null with id: " + box.put(Model(0, null)))
        Log.d("TEST_LOG", "putting empty with id: " + box.put(Model(0, "")))
        val logString = models.map { it.id }.sorted().joinToString()
        Log.d("TEST_LOG", "models: $logString")

Where Model has a single String field called field

The above code clearly logs only the model with the empty field being returned but not the one with the null value for field. Maybe I'm misunderstanding something but this is a very unintuitive definition of notEqual and nothing in the docs seems to indicate it would behave this way.

Guide de contribution

Aucun guide de contribution indexé pour ce dépôt

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.

Piste de recherche

Commencez par QueryBuilder.notEqual et suivez le chemin de requête utilisé par box.query().notEqual(Model_.field, "hello world").build().find(), en vous concentrant sur la manière dont les valeurs de champ null sont gérées. Ajoutez un cas de régression basé sur les exemples de Model et vérifiez que la requête renvoie à la fois l’objet avec une chaîne vide et l’objet null.

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

Évaluation

Stack technique
java, kotlin
Domaine
database
Type d'issue
Bug
Difficulté
4/5
Temps estimé
3-5 jours
Activité
À l'abandon
Clarté
Clairement spécifiée
Accessibilité débutants
45/100

Recevez les nouvelles issues par e-mail

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