Jointures automatiques et explicites, avec des balises.
Je rencontre un problème de jointure ratée avec ce cas là :
La table spip_auteurs
normale, avec la table spip_contacts
ayant une clé primaire id_contact
et un champ id_auteur
et prenom
L'écriture :
<BOUCLE_aut(AUTEURS contacts)>#PRENOM</BOUCLE_aut>
Crée une requête incorrecte : SELECT auteurs.nom, L1.prenom FROM spip_auteurs AS 'auteurs' INNER JOIN spip_contacts AS L1 ON ( L1.id_contact = auteurs.id_contact ) WHERE (auteurs.statut <> '5poubelle')
auteurs.id_contact
n'existant pas.
Après analyse, cette chose est produite par l'appel à la fonction index_exception
là http://core.spip.org/projects/spip/repository/entry/spip/ecrire/public/references.php#L234 dans la fonction index_tables_en_pile
.
Il se trouve que remplacer tout ce code dans le if jointures_explicites par la nouvelle fonction trouver_jointure_champ
corrige ce problème, ce qui donnerait :
$t = trouver_jointure_champ($nom_champ, $boucles[$idb], $boucles[$idb]->jointures); if ($t) { return array("$t.$nom_champ", $nom_champ); }
Enfin, pour termminer, ce code qui teste des jointures explicites est étonnant : On y passe dans l'exemple indiqué, mais pas si on écrit (AUTEURS){contacts.id_contact=1}>#PRENOM car, même s'il peut faire une jointure correcte, il n'affichera pas le #PRENOM. La jointure n'est pas «explicite» au sens de la boucle.