diff --git a/ecrire/public/compiler.php b/ecrire/public/compiler.php index 9dceb2af2810d281d187593d3e06b9125f8a03db..038a9f492201068b678077a10d026176a4c1ae0b 100644 --- a/ecrire/public/compiler.php +++ b/ecrire/public/compiler.php @@ -280,7 +280,7 @@ function calculer_boucle_nonrec($id_boucle, &$boucles) { // Fin de parties if ($boucle->mode_partie) $corps .= "\n }\n"; - $sql_args = '$allrows'; + $sql_args = '$result, ' . _q($boucle->sql_serveur); // si le corps est une constante, ne pas appeler le serveur N fois! if (preg_match(CODE_MONOTONE,str_replace("\\'",'',$corps), $r)) { @@ -300,7 +300,7 @@ function calculer_boucle_nonrec($id_boucle, &$boucles) { $SP++; // RESULTATS - while ($Pile[$SP] = array_shift(' . + while ($Pile[$SP] = @sql_fetch(' . $sql_args . ")) {\n$corps\n }\n" . $fin ; @@ -316,10 +316,10 @@ function calculer_boucle_nonrec($id_boucle, &$boucles) { if ($boucle->numrows OR $boucle->mode_partie) { if ($count == 'count(*)') - $count = "array_shift($sql_args)"; - else $count = "count($sql_args)"; + $count = "array_shift(sql_fetch($sql_args))"; + else $count = "sql_count($sql_args)"; $count = !$boucle->mode_partie - ? "\n\t\$Numrows['$id_boucle']['total'] = intval($count);" + ? "\n\t\$Numrows['$id_boucle']['total'] = @intval($count);" : calculer_parties($boucles, $id_boucle, $count); } else $count = ''; @@ -328,7 +328,8 @@ function calculer_boucle_nonrec($id_boucle, &$boucles) { "\n\t\$Numrows['$id_boucle']['compteur_boucle'] = 0;") . ' $t0 = "";' . - $corps; + $corps . + "\n\t@sql_free($sql_args);"; } @@ -354,9 +355,7 @@ function calculer_requete_sql(&$boucle) $boucle->limit)) . calculer_dec('$having', calculer_dump_array($boucle->having)) . "\n\t// REQUETE\n\t" - . '$result = calculer_select($select, $from, $type, $where, $join, $groupby, $orderby, $limit, $having, $table, $id, $connect);' - . "\n\t" - . '$allrows = @sql_fetch_all($result,$connect);'; + . '$result = calculer_select($select, $from, $type, $where, $join, $groupby, $orderby, $limit, $having, $table, $id, $connect);'; } // http://doc.spip.org/@calculer_dec @@ -452,7 +451,7 @@ function calculer_parties($boucles, $id_boucle, $count) { // n-1 pour le dernier ; donc total_boucle = 1 + debut - fin // nombre total avant partition - $retour = "\n\n // PARTITION\n\t" . '$nombre_boucle = ' . $count .';'; + $retour = "\n\n // PARTITION\n\t" . '$nombre_boucle = @' . $count .';'; preg_match(",([+-/p])([+-/])?,", $mode_partie, $regs); list(,$op1,$op2) = $regs; diff --git a/ecrire/public/criteres.php b/ecrire/public/criteres.php index ed49e9316def64a2b2f6ebeee1f213b1f2041b0d..4b6d931224edc2e11fae220d0999a6eed9567610 100644 --- a/ecrire/public/criteres.php +++ b/ecrire/public/criteres.php @@ -152,7 +152,7 @@ function critere_pagination_dist($idb, &$boucles, $crit) { // dans ce cas, on retrouve la page par un appel a quete_debut_pagination, // et on place dans Pile[0]['debut_xxx'] le vrai numero de page pour la balise #PAGINATION // et dans Pile[0][@primary] = yyy pour permettre a la balise #EXPOSER d'exposer l'objet - .'($Pile[0][\'debut\'.'.$debut.'] = quete_debut_pagination(\''.$boucle->primary.'\',$Pile[0][\'@'.$boucle->primary.'\'] = substr($partie,1),'.intval($pas).',$allrows))' + .'($Pile[0][\'debut\'.'.$debut.'] = quete_debut_pagination(\''.$boucle->primary.'\',$Pile[0][\'@'.$boucle->primary.'\'] = substr($partie,1),'.intval($pas).',calculer_select($select, $from, $type, $where, $join, $groupby, $orderby, $limit, $having, $table, $id, $connect)))' // sinon on fait un intval sur la valeur demandee, et c'est tout .':intval($partie)'; diff --git a/ecrire/public/quete.php b/ecrire/public/quete.php index 3a05ed2e0f4460ee86f714a88f9ae02233a73524..ff71030e289180c401abbb8e3a6fdf0851043dea 100644 --- a/ecrire/public/quete.php +++ b/ecrire/public/quete.php @@ -241,13 +241,11 @@ function calcul_exposer ($id, $prim, $reference, $parent, $type, $connect='') { return isset($exposer[$m][$prim]) ? isset($exposer[$m][$prim][$id]) : ''; } -function quete_debut_pagination($primary,$valeur,$pas,$rows){ +function quete_debut_pagination($primary,$valeur,$pas,$res){ $pos = 0; - foreach($rows as $row){ - if ($row[$primary]==$valeur) - break; + while ($row = sql_fetch($res) AND $row[$primary]!==$valeur) $pos++; - } + sql_free($res); // si on a pas trouve if ($row[$primary]!==$valeur) return 0;