Re: {branche?} provoque une jointure / SPIP 3.1.1 SVN
RealET <[email protected]>
| Newsgroups | gmane.comp.web.spip.devel |
|---|---|
| Message-ID | <[email protected]> |
RealET a écrit le 12/08/2016 à 10:10 :
> RastaPopoulos a écrit le 12/08/2016 à 09:34 :
>> Bah {branche} travaille sur les rubriques. Or les événements ne sont
>> absolument pas liés à des rubriques mais à des articles. Et donc il y a
>> un cas de {branche} où ça va chercher les événements *des articles*
>> liées aux rubriques demandées. Donc jointure sur les articles.
>>
>> Je ne vois pas ce qu'il y a de bizarre.
> Ce qui est bizarre, c'est que {branche?} (la version sensée être
> facultative), au lieu de ne rien modifier à la requête SQL quand il n'y
> a pas de id_rubrique dans le contexte, rajoute au contraire
> systématiquement un code comportant toutes les rubriques.
> D'une part, en terme de performances, ça rajoute une jointure et in IN
> coûteux.
> D'autre part, ça plante la recherche d'événements rattachés à une page
> unique.
>
J'ai tenté de lire le code du critère branche.
D'après ce que j'en comprends, on commence par aller chercher l'id de
rubrique (soit passé en paramètre, soit dans le contexte :
https://core.spip.net/projects/spip/repository/entry/branches/spip-3.1/ecrire/public/criteres.php#L496
AMHA, on devrait sortir du critère sans rien modifier à la boucle :
- s'il n'y a pas d'id_rubrique trouvé
- et que le critère est conditionnel {branche?}
Est-ce que c'est ce que
https://core.spip.net/projects/spip/repository/entry/branches/spip-3.1/ecrire/public/criteres.php#L522
tente de faire ?
$boucle->where[] = !$crit->cond ? $c :
("($arg ? $c : " . ($not ? "'0=1'" : "'1=1'") . ')');
--
RealET