[spip-dev] Bug {1,n} avec sql_seek sur branche 2

Bonjour…

Il y a un bug sur la branche 2 que je reproduis comme cela :
soit une rubrique 2 dans une rubrique 1 et un squelette :

rub : #ENV{id_rubrique}
<BOUCLE_ariane(HIERARCHIE){id_rubrique}{1,n}>#TITRE</BOUCLE_ariane>

Lorsque je passe ?page=hop&id_rubrique=2&var_mode=recalcul, une erreur survient : «Offset 1 is invalid for MySQL result index 76 (or the query data is unbuffered)». Effectivement, comme il n'y a qu'un résultat, il n'existe que l'offset 0, et pas le 1.

Dans la version de dev 2.1, le bug n'y est pas.

Je corrige en mettant $debut_boucle<\$Numrows à la place de $debut_boucle<=\$Numrows dans ecrire/public/compiler l.368, ce qui donne :

.(($boucle->mode_partie)?"\n\tzif (isset(\$debut_boucle) AND \$debut_boucle>0 AND \$debut_boucle<\$Numrows['$id_boucle']['grand_total'] AND sql_seek(\$result,\$debut_boucle,"._q($boucle->sql_serveur).",'continue'))\n\t\t\$Numrows['$id_boucle']['compteur_boucle']=\$debut_boucle;":"")

Cependant, il y a à peu de chose près le même code dans la version de dév dans ecrire/public/criteres l.658… mais SPIP ne rentre pas dedans dans ce cas précis... Je suppose donc que le problème est corrigé en amont et que le test <= ne sert à rien ici finalement ?

. "\n\tif (\$debut_boucle>0 AND \$debut_boucle <= \$Numrows['$id_boucle']['grand_total'] AND sql_seek(\$result,\$debut_boucle,"._q($boucles[$id_boucle]->sql_serveur).",'continue'))\n\t\t\$Numrows['$id_boucle']['compteur_boucle'] = \$debut_boucle;\n\t";

Bref… je ne sais pas où et quoi corriger :slight_smile:

J'ai pris le parti de mettre < à la place de <=

http://trac.rezo.net/trac/spip/changeset/14805 et
http://trac.rezo.net/trac/spip/changeset/14806