[SPIP Zone] polyhierarchie : bug critère {parents}

Bonjour,

Si je fais une boucle :

<BOUCLE_principale(ARTICLES){id_article}>
<BOUCLE_x(RUBRIQUES){parents}{id_secteur = 42}>
etc.

La requête SQL générée est :

	SELECT rubriques.id_rubrique, rubriques.id_rubrique, rubriques.lang, rubriques.titre
	FROM spip_rubriques AS `rubriques`
	WHERE (rubriques.statut = 'publie')
		AND ((rubriques.id_rubrique = 521) OR (rubriques.id_rubrique IN (
	SELECT rl.id_parent
	FROM spip_rubriques_liens as rl
	WHERE rl.id_objet=11301 AND objet='article')))
		AND (rubriques.id_secteur = 42)
	LIMIT 0,1

alors qu’elle devrait être :

	SELECT rubriques.id_rubrique, rubriques.id_rubrique, rubriques.lang, rubriques.titre
	FROM spip_rubriques AS `rubriques`
	WHERE (rubriques.statut = 'publie')
	**AND (rubriques.id_secteur = 42)**
		AND ((rubriques.id_rubrique = 521) OR (rubriques.id_rubrique IN (
	SELECT rl.id_parent
	FROM spip_rubriques_liens as rl
	WHERE rl.id_objet=11301 AND objet='article')))
		AND (rubriques.id_secteur = 42)
	LIMIT 0,1

On peut obtenir le comportement voulu en faisant ça, c’est pas très élégant mais ça marche :

<BOUCLE_principale(ARTICLES){id_article}>
<BOUCLE_x(RUBRIQUES){id_secteur = 42}{parents}{id_secteur = 42}>
etc.

Ce bug est peut-être aussi présent dans d’autres critères de polyhierarchie.

A bientôt
Simon

Hello,
excuse moi, je ne comprends pas où est le bug. Tu ajoutes une deuxième
fois la condition sur le secteur, mais celle-ci est au meme niveau.
Cédric

Le 17 mai 2010 11:54, Simon Camerlo <scamerlo.work@gmail.com> a écrit :

Bonjour,

Si je fais une boucle :

<BOUCLE_principale(ARTICLES){id_article}>
<BOUCLE_x(RUBRIQUES){parents}{id_secteur = 42}>
etc.

La requête SQL générée est :

  SELECT rubriques.id_rubrique, rubriques.id_rubrique, rubriques.lang,
rubriques.titre
  FROM spip_rubriques AS `rubriques`
  WHERE (rubriques.statut = 'publie')
    AND ((rubriques.id_rubrique = 521) OR (rubriques.id_rubrique IN (
  SELECT rl.id_parent
  FROM spip_rubriques_liens as rl
  WHERE rl.id_objet=11301 AND objet='article')))
    AND (rubriques.id_secteur = 42)
  LIMIT 0,1

alors qu'elle devrait être :

  SELECT rubriques.id_rubrique, rubriques.id_rubrique, rubriques.lang,
rubriques.titre
  FROM spip_rubriques AS `rubriques`
  WHERE (rubriques.statut = 'publie')
    AND (rubriques.id_secteur = 42)
    AND ((rubriques.id_rubrique = 521) OR (rubriques.id_rubrique IN (
  SELECT rl.id_parent
  FROM spip_rubriques_liens as rl
  WHERE rl.id_objet=11301 AND objet='article')))
    AND (rubriques.id_secteur = 42)
  LIMIT 0,1

On peut obtenir le comportement voulu en faisant ça, c'est pas très élégant
mais ça marche :

<BOUCLE_principale(ARTICLES){id_article}>
<BOUCLE_x(RUBRIQUES){id_secteur = 42}{parents}{id_secteur = 42}>
etc.

Ce bug est peut-être aussi présent dans d'autres critères de polyhierarchie.

A bientôt
Simon

_______________________________________________
spip-zone@rezo.net - http://listes.rezo.net/mailman/listinfo/spip-zone

Si j’ajoute la condition avant le critère {parents}, id_secteur est testé dans la requête sql principale seule.
Si je l’ajoute après, il est testé dans la sous-requête seule.
Si je l’ajoute avant et après, il est testé dans les deux (ce qui devrait être le cas dans toutes les configurations précédentes aussi).

A bientôt
Simon

Le 17 mai 2010 18:38, Cédric Morin <cedric.morin@yterium.com> a écrit :

Hello,
excuse moi, je ne comprends pas où est le bug. Tu ajoutes une deuxième
fois la condition sur le secteur, mais celle-ci est au meme niveau.
Cédric

Le 17 mai 2010 11:54, Simon Camerlo <scamerlo.work@gmail.com> a écrit :

Bonjour,

Si je fais une boucle :

<BOUCLE_principale(ARTICLES){id_article}>
<BOUCLE_x(RUBRIQUES){parents}{id_secteur = 42}>
etc.

La requête SQL générée est :

SELECT rubriques.id_rubrique, rubriques.id_rubrique, rubriques.lang,
rubriques.titre
FROM spip_rubriques AS rubriques
WHERE (rubriques.statut = ‹ publie ›)
AND ((rubriques.id_rubrique = 521) OR (rubriques.id_rubrique IN (
SELECT rl.id_parent
FROM spip_rubriques_liens as rl
WHERE rl.id_objet=11301 AND objet=‹ article ›)))
AND (rubriques.id_secteur = 42)
LIMIT 0,1

alors qu’elle devrait être :

SELECT rubriques.id_rubrique, rubriques.id_rubrique, rubriques.lang,
rubriques.titre
FROM spip_rubriques AS rubriques
WHERE (rubriques.statut = ‹ publie ›)
AND (rubriques.id_secteur = 42)
AND ((rubriques.id_rubrique = 521) OR (rubriques.id_rubrique IN (
SELECT rl.id_parent
FROM spip_rubriques_liens as rl
WHERE rl.id_objet=11301 AND objet=‹ article ›)))
AND (rubriques.id_secteur = 42)
LIMIT 0,1

On peut obtenir le comportement voulu en faisant ça, c’est pas très élégant
mais ça marche :

<BOUCLE_principale(ARTICLES){id_article}>
<BOUCLE_x(RUBRIQUES){id_secteur = 42}{parents}{id_secteur = 42}>
etc.

Ce bug est peut-être aussi présent dans d’autres critères de polyhierarchie.

A bientôt
Simon


spip-zone@rezo.net - http://listes.rezo.net/mailman/listinfo/spip-zone

Le 17 mai 2010 15:25, simon camerlo <scamerlo.work@gmail.com> a écrit :

Si j'ajoute la condition avant le critère {parents}, id_secteur est testé
dans la requête sql principale seule.
Si je l'ajoute après, il est testé dans la sous-requête seule.

Je ne vois pas de différence entre les deux positions, compte tenu du
parenthesage.
Il n'est jamais dans la sous requête, ou alors c'est un bug de mySQL
sur la lecture des parenthèses ...

Si je l'ajoute avant et après, il est testé dans les deux (ce qui devrait
être le cas dans toutes les configurations précédentes aussi).

A bientôt
Simon

Le 17 mai 2010 18:38, Cédric Morin <cedric.morin@yterium.com> a écrit :

Hello,
excuse moi, je ne comprends pas où est le bug. Tu ajoutes une deuxième
fois la condition sur le secteur, mais celle-ci est au meme niveau.
Cédric

Le 17 mai 2010 11:54, Simon Camerlo <scamerlo.work@gmail.com> a écrit :
> Bonjour,
>
> Si je fais une boucle :
>
> <BOUCLE_principale(ARTICLES){id_article}>
> <BOUCLE_x(RUBRIQUES){parents}{id_secteur = 42}>
> etc.
>
> La requête SQL générée est :
>
> SELECT rubriques.id_rubrique, rubriques.id_rubrique,
> rubriques.lang,
> rubriques.titre
> FROM spip_rubriques AS `rubriques`
> WHERE (rubriques.statut = 'publie')
> AND ((rubriques.id_rubrique = 521) OR
> (rubriques.id_rubrique IN (
> SELECT rl.id_parent
> FROM spip_rubriques_liens as rl
> WHERE rl.id_objet=11301 AND objet='article')))
> AND (rubriques.id_secteur = 42)
> LIMIT 0,1
>
> alors qu'elle devrait être :
>
> SELECT rubriques.id_rubrique, rubriques.id_rubrique,
> rubriques.lang,
> rubriques.titre
> FROM spip_rubriques AS `rubriques`
> WHERE (rubriques.statut = 'publie')
> AND (rubriques.id_secteur = 42)
> AND ((rubriques.id_rubrique = 521) OR
> (rubriques.id_rubrique IN (
> SELECT rl.id_parent
> FROM spip_rubriques_liens as rl
> WHERE rl.id_objet=11301 AND objet='article')))
> AND (rubriques.id_secteur = 42)
> LIMIT 0,1
>
> On peut obtenir le comportement voulu en faisant ça, c'est pas très
> élégant
> mais ça marche :
>
> <BOUCLE_principale(ARTICLES){id_article}>
> <BOUCLE_x(RUBRIQUES){id_secteur = 42}{parents}{id_secteur = 42}>
> etc.
>
> Ce bug est peut-être aussi présent dans d'autres critères de
> polyhierarchie.
>
> A bientôt
> Simon
>
>
> _______________________________________________
> spip-zone@rezo.net - http://listes.rezo.net/mailman/listinfo/spip-zone
>
>

Le 17 mai 2010 21:28, Cédric Morin <cedric.morin@yterium.com> a écrit :

Le 17 mai 2010 15:25, simon camerlo <scamerlo.work@gmail.com> a écrit :

Si j’ajoute la condition avant le critère {parents}, id_secteur est testé
dans la requête sql principale seule.
Si je l’ajoute après, il est testé dans la sous-requête seule.

Je ne vois pas de différence entre les deux positions, compte tenu du
parenthesage.
Il n’est jamais dans la sous requête, ou alors c’est un bug de mySQL
sur la lecture des parenthèses …

Bon, soit mon serveur s’est pris les pieds dans le tapis pendant mes tests, soit c’est moi à force de faire trop de trucs à la fois.
Je n’arrive plus à reproduire le comportement que j’avais tout-à-l’heure.

Je vais continuer à creuser. Si je reproduis, je posterai un message avec des détails.
Sinon, désolé pour le bruit, c’est moi qui ai buggé.

A bientôt
Simon