Régression jointure versions-auteurs #3628

Closed
opened 7 years ago by JLuc · 6 comments
JLuc commented 7 years ago

dans http://permalink.gmane.org/gmane.comp.web.spip.devel/66753

Depuis le passage a SPIP 3.1 les jointures du types :


<BOUCLE_RSS(VERSIONS auteurs)
<BOUCLE_RSS(VERSIONS spip_auteurs)

ne retournent plus rien alors que les syntaxes suivantes sont fonctionnelles :

Problème retrouvé notamment via
/spip.php?page=rss&op=revisions&id=1&cle=...
et
plugins-dist/revisions/prive/rss/revisions.html

Ce type de pb a également été signalé dans http://permalink.gmane.org/gmane.comp.web.spip.zone/39305 : une boucle

 
ne fonctionne plus en 3.1 alors qu'elle fonctionne en 3.0
dans http://permalink.gmane.org/gmane.comp.web.spip.devel/66753 Depuis le passage a SPIP 3.1 les jointures du types :<pre> <BOUCLE_RSS(VERSIONS auteurs) <BOUCLE_RSS(VERSIONS spip_auteurs) </pre> ne retournent plus rien alors que les syntaxes suivantes sont fonctionnelles : <pre><BOUCLE_RSS(VERSIONS AUTEURS) <BOUCLE_RSS(VERSIONS auteurs_liens) </pre> Problème retrouvé notamment via /spip.php?page=rss&op=revisions&id=1&cle=... et plugins-dist/revisions/prive/rss/revisions.html Ce type de pb a également été signalé dans http://permalink.gmane.org/gmane.comp.web.spip.zone/39305 : une boucle <pre> <BOUCLE_permanences(CJ_PERMANENCES auteurs){par nom}...></pre> ne fonctionne plus en 3.1 alors qu'elle fonctionne en 3.0
Owner
There is no content yet.
b_b commented 7 years ago
Owner

Pour info, voici la requête générée par SPIp 3.0 dans le squelette du plugin revisions :

SELECT versions.id_objet, versions.objet, versions.id_version, versions.date, L1.lang, L1.nom, L1.email
FROM spip_versions AS `versions`  
INNER JOIN spip_auteurs AS L1 ON ( L1.id_auteur = versions.id_auteur )
WHERE (versions.id_version > 1)
ORDER BY versions.date DESC
LIMIT 0,10

Et celle générée par SPIP 3.1 :

SELECT versions.id_objet, versions.objet, versions.id_version, versions.date, L1.lang, L1.nom, L1.email
FROM spip_versions AS `versions`  
INNER JOIN spip_auteurs AS L1 ON ( L1.id_auteur = versions.id_objet AND versions.objet='auteur')
WHERE (versions.id_version > 1)
GROUP BY versions.id_version,versions.id_objet,versions.objet
ORDER BY versions.date DESC
LIMIT 0,10
Pour info, voici la requête générée par SPIp 3.0 dans le squelette du plugin revisions : <pre> SELECT versions.id_objet, versions.objet, versions.id_version, versions.date, L1.lang, L1.nom, L1.email FROM spip_versions AS `versions` INNER JOIN spip_auteurs AS L1 ON ( L1.id_auteur = versions.id_auteur ) WHERE (versions.id_version > 1) ORDER BY versions.date DESC LIMIT 0,10 </pre> Et celle générée par SPIP 3.1 : <pre> SELECT versions.id_objet, versions.objet, versions.id_version, versions.date, L1.lang, L1.nom, L1.email FROM spip_versions AS `versions` INNER JOIN spip_auteurs AS L1 ON ( L1.id_auteur = versions.id_objet AND versions.objet='auteur') WHERE (versions.id_version > 1) GROUP BY versions.id_version,versions.id_objet,versions.objet ORDER BY versions.date DESC LIMIT 0,10 </pre>
b_b commented 7 years ago
Owner

Cela me rappelle #3512 qui abordait aussi un problème sur les jointures. Après test, c'est à partir de r21875 que la jointure n'est plus générée correctement.

Cela me rappelle #3512 qui abordait aussi un problème sur les jointures. Après test, c'est à partir de r21875 que la jointure n'est plus générée correctement.
Owner

Bon il semble que dans ce cas précis c'était un pur coup de bol que la jointure marche auparavant. Car la table spip_versions a pour clé primaire id_version,id_objet,objet et donc ne sait joindre que via ces champs là. Du coup id_auteur n'est pas pris en compte pour la jointure, d'où le résultat.
Il faut sans doute modifier la table spip_versions pour corriger cela, je cherche une soluce.

Par ailleurs les versions suivantes ne sont pas fonctionnelles : elles ne provoquent aucune jointure, et donc on ne recupere pas les champs des auteurs

Bon il semble que dans ce cas précis c'était un pur coup de bol que la jointure marche auparavant. Car la table spip_versions a pour clé primaire id_version,id_objet,objet et donc ne sait joindre que via ces champs là. Du coup id_auteur n'est pas pris en compte pour la jointure, d'où le résultat. Il faut sans doute modifier la table spip_versions pour corriger cela, je cherche une soluce. Par ailleurs les versions suivantes ne sont pas fonctionnelles : elles ne provoquent aucune jointure, et donc on ne recupere pas les champs des auteurs <pre> <BOUCLE_RSS(VERSIONS AUTEURS) <BOUCLE_RSS(VERSIONS auteurs_liens) </pre>
Owner

Corrigé par http://zone.spip.org/trac/spip-zone/changeset/93890
Statut changé à Fermé

Corrigé par http://zone.spip.org/trac/spip-zone/changeset/93890 **Statut changé à Fermé**
b_b commented 7 years ago
Owner

Cool, merci pour le fix Cedric :)

Cool, merci pour le fix Cedric :)
Sign in to join this conversation.
No Milestone
No project
No Assignees
3 Participants
Notifications
Due Date

No due date set.

Dependencies

This issue currently doesn't have any dependencies.

Loading…
There is no content yet.