Development #67884
Pourquoi fait-on des critères « Equal('user_id', str(user.id) if user else '-1') » alors qu'on sait que la réponse va être vide ?
Début:
02 août 2022
Echéance:
% réalisé:
0%
Temps estimé:
Patch proposed:
Oui
Planning:
Non
Description
À plusieurs endroits du code, on a ce pattern « Equal('user_id', str(user.id) if user else '-1')
»
On peut peut-être chercher à le court-circuiter pour gagner des requêtes (d'autant plus qu'on n'a pas d'index sur user_id).
Fichiers
Révisions associées
Historique
Mis à jour par Frédéric Péters il y a plus d'un an
- Fichier 0001-misc-add-special-Nothing-criteria-to-bypass-query-an.patch 0001-misc-add-special-Nothing-criteria-to-bypass-query-an.patch ajouté
- Statut changé de Nouveau à Solution proposée
- Patch proposed changé de Non à Oui
Ajout d'un critère "Nothing" qui fait juste FALSE en SQL.
Je traite les quelques Equald('user_id', ... '-1') mais aussi les Equal('status', '_none').
J'ai à un moment court-circuité davantage, façon :
# short-circuit if there's a "Nothing" criteria if isinstance(clause, list) and any(x for x in clause if isinstance(x, wcs.qommon.storage.Nothing)): return []
mais ça doit être répété à trop d'endroits et c'était moche et postgresql arrive très bien à optimiser et faire One-Time Filter: false
et ça suffit.
Mis à jour par Thomas Noël il y a plus d'un an
- Statut changé de Solution proposée à Solution validée
Simple et efficace, ça me va.
Mis à jour par Frédéric Péters il y a plus d'un an
- Statut changé de Solution validée à Résolu (à déployer)
commit 043ed9be54c95cb8addfe59b6700364811a422a8 Author: Frédéric Péters <fpeters@entrouvert.com> Date: Thu Aug 11 17:09:52 2022 +0200 misc: add special "Nothing" criteria to bypass query and return nothing (#67884)
Mis à jour par Transition automatique il y a plus d'un an
- Statut changé de Résolu (à déployer) à Solution déployée
misc: add special "Nothing" criteria to bypass query and return nothing (#67884)