Bug #63628
filter_value et exclude_value ne font pas ce qu'il faut avec None
Début:
06 avril 2022
Echéance:
% réalisé:
0%
Temps estimé:
Patch proposed:
Oui
Planning:
Non
Description
On se retrouve avec des "= NULL" ou "!= NULL" dans le SQL, alors qu'il faut des "IS NULL" et "IS NOT NULL"
Fichiers
Révisions associées
Historique
Mis à jour par Thomas Noël il y a environ 2 ans
- Assigné à
Thomas Noëlsupprimé
Je pensais que c'était "facile" comme
--- a/wcs/sql.py +++ b/wcs/sql.py @@ -195,6 +195,8 @@ class Equal(Criteria): sql_op = '=' def as_sql(self): + if self.value is None: + return '%s IS NULL' % self.attribute if self.value in ([], ()): return 'ARRAY_LENGTH(%s, 1) IS NULL' % self.attribute return super().as_sql() @@ -225,6 +227,8 @@ class NotEqual(Criteria): def as_sql(self): if self.field and getattr(self.field, 'block_field', None): return super().as_sql() + if self.value is None: + return "%s IS NOT NULL" % self.attribute return "(%s is NULL OR %s)" % (self.attribute, super().as_sql())
mais ça ne doit pas se jouer à ce niveau, un test ajouté dans tests/test_formdata.py (test_lazy_formdata_queryset_filter) du genre
+ queryset = lazy_formdata.objects.filter_by('datefield').apply_filter_value(None) + assert queryset.count == 5
ne passe pas, le count renvoie 0 alors qu'il y a 5 demandes sans valeur dans le champ datefield.
Je dois me tromper dans mon analyse, peut-être qu'il faut jouer directement dans apply_filter_value pour lui faire générer des Null/NotNull ?
Mis à jour par Lauréline Guérin il y a environ 2 ans
- Fichier 0001-misc-fix-filter-exclude_value-templatetag-with-None-.patch 0001-misc-fix-filter-exclude_value-templatetag-with-None-.patch ajouté
- Statut changé de Nouveau à Solution proposée
- Assigné à mis à Lauréline Guérin
- Patch proposed changé de Non à Oui
proposition, passer du Null et du NotNull au moment du build des critères
Mis à jour par Thomas Noël il y a environ 2 ans
- Statut changé de Solution proposée à Solution validée
C'est vert, et c'est effectivement un meilleur moment pour faire l'opération ; ça me semble bien.
Mis à jour par Lauréline Guérin il y a environ 2 ans
- Statut changé de Solution validée à Résolu (à déployer)
commit 9f3af4ae84a1d6d30cf648fbe1fef2e45edc2b97 Author: Lauréline Guérin <zebuline@entrouvert.com> Date: Thu Apr 7 10:26:10 2022 +0200 misc: fix filter/exclude_value templatetag with None (#63628)
Mis à jour par Transition automatique il y a environ 2 ans
- Statut changé de Résolu (à déployer) à Solution déployée
misc: fix filter/exclude_value templatetag with None (#63628)