+22
−18
+26
−12
Chargement en cours
Une boucle MOTS avec critere {id_objet} etait compilée de façon erronée en raison de plusieurs laxismes :
- on cherchait un champ id_objet dans une table de liaison candidate, la premiere etant dans ce cas spip_auteurs_liens, sans tenir compte de la plausabilité de la jointure, qui se faisait ensuite sur id_objet=id_mot AND objet='mot' ce qui n'a ici aucun sens
=> on corrige en cherchant table par table le champ cible ET la jointures possibles jusqu'a ce qu'on ait les deux qui vont bien
- on acceptait de créer ensuite une jointure en plusieurs étapes pour aller à cette table, alors qu'on sait dès le départ que c'est une jointure à une étape
=> on permet de preciser dès l'appel de calculer_jointure() le nombre maximum d'étapes
- la jointure en plusieurs étapes se faisait parce que la gestion des tables vues et des milieux exclus
- acceptait de passer deux fois par la table d'arrivée => on corrige
- pouvait ne pas reconnaitre la table d'arrivée qui contenait un coup le prefixe spip_ et un coup non => on double le test
- acceptait de faire une jointure intermediaire sur la même clé qu'à l'arrivée (id_objet ici) => on interdit ce cas idiot
- faisait une jointure sur objet en second lieu alors qu'on avait deja une jointure sur id_objet => on ajoute ce cas particulier
Ces correctifs ne devraient pas impacter les autres calculs de jointure, mais eviter d'autres cas tordus erronés comme celui là.
Forge communautaire SPIP | Charte d'utilisation | Signaler un problème sur ce site