From 416fce733a3d1bc02bb71820f206152029269981 Mon Sep 17 00:00:00 2001 From: Cerdic <cedric@yterium.com> Date: Wed, 3 Apr 2024 15:53:50 +0200 Subject: [PATCH] =?UTF-8?q?refactor:=20splitter=20la=20fonction=20`calcule?= =?UTF-8?q?r=5Fselect()`=20en=20`preparer=5Fcalculer=5Fselect()`=20puis=20?= =?UTF-8?q?`executer=5Fcalculer=5Fselect()`=20permettant=20de=20r=C3=A9cup?= =?UTF-8?q?=C3=A9rer=20le=20r=C3=A9sultat=20interm=C3=A9diaire=20qui=20peu?= =?UTF-8?q?t=20aussi=20=C3=AAtre=20fourni=20a=20une=20nouvelle=20fonction?= =?UTF-8?q?=20`compter=5Fcalculer=5Fselect()`=20pour=20obtenir=20le=20nomb?= =?UTF-8?q?re=20de=20lignes=20de=20la=20requete.=20`calculer=5Fselect()`?= =?UTF-8?q?=20peut=20toujours=20etre=20appel=C3=A9e=20directement,=20sans?= =?UTF-8?q?=20rupture=20de=20compatibilite?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ecrire/public/composer.php | 60 +++++++++++++++++++----- ecrire/src/Compilateur/Iterateur/Sql.php | 26 ++-------- 2 files changed, 54 insertions(+), 32 deletions(-) diff --git a/ecrire/public/composer.php b/ecrire/public/composer.php index 2552d904e6..824e11a206 100644 --- a/ecrire/public/composer.php +++ b/ecrire/public/composer.php @@ -675,6 +675,12 @@ function trouver_sous_requetes($where) { return [$where_simples, $where_sous]; } +/** + * @see preparer_calculer_select() + */ +function calculer_select(...$args) { + return executer_calculer_select(preparer_calculer_select(...$args)); +} /** * Calcule une requête et l’exécute @@ -697,7 +703,7 @@ function trouver_sous_requetes($where) { * @param bool|array|string $requeter * @return resource */ -function calculer_select( +function preparer_calculer_select( $select = [], $from = [], $from_type = [], @@ -970,23 +976,55 @@ function calculer_select( $GLOBALS['debug']['debug'] = true; } } - $GLOBALS['debug']['aucasou'] = [$table, $id, $serveur, $requeter]; + + $requete = [ + 'select' => $select, + 'from' => $from, + 'where' => $where, + 'groupby' => $groupby, + 'orderby' => array_filter($orderby), + 'limit' => $limit, + 'having' => $having, + 'serveur' => $serveur, + 'requeter' => $requeter, + 'debug' => [$table, $id, $serveur, $requeter] + ]; + return $requete; +} + +function executer_calculer_select($requete) { + $GLOBALS['debug']['aucasou'] = $requete['debug']; $r = sql_select( - $select, - $from, - $where, - $groupby, - array_filter($orderby), - $limit, - $having, - $serveur, - $requeter + $requete['select'], + $requete['from'], + $requete['where'], + $requete['groupby'], + $requete['orderby'], + $requete['limit'], + $requete['having'], + $requete['serveur'], + $requete['requeter'] ); unset($GLOBALS['debug']['aucasou']); return $r; } +function compter_calculer_select($requete) { + $GLOBALS['debug']['aucasou'] = $requete['debug']; + $count = sql_countsel( + $requete['from'], + $requete['where'], + $requete['groupby'], + $requete['having'], + $requete['serveur'], + $requete['requeter'] + ); + unset($GLOBALS['debug']['aucasou']); + + return $count; +} + /** * Analogue a calculer_mysql_expression et autre (a unifier ?) * diff --git a/ecrire/src/Compilateur/Iterateur/Sql.php b/ecrire/src/Compilateur/Iterateur/Sql.php index 25223b3b6c..d877e6ccf6 100644 --- a/ecrire/src/Compilateur/Iterateur/Sql.php +++ b/ecrire/src/Compilateur/Iterateur/Sql.php @@ -181,7 +181,8 @@ class Sql extends AbstractIterateur implements Iterator $count_total_from_query = true; } } - $this->sqlresult = calculer_select( + + $requete = preparer_calculer_select( $v['select'], $v['from'], $v['type'], @@ -197,28 +198,11 @@ class Sql extends AbstractIterateur implements Iterator $this->info ); + $this->sqlresult = executer_calculer_select($requete); $this->err = !$this->sqlresult; + if ($count_total_from_query && !$this->err) { - $query = calculer_select( - $v['select'], - $v['from'], - $v['type'], - $v['where'], - $v['join'], - $v['groupby'], - $v['orderby'], - '', - $v['having'], - $v['table'], - $v['id'], - $v['connect'], - false - ); - $query_parts = explode('FROM', $query, 2); - $query = 'SELECT count(*) FROM ' . end($query_parts); - $res = sql_query($query, $v['connect']); - $row = sql_fetch($res); - $this->total = reset($row); + $this->total = compter_calculer_select($requete); } $this->firstseek = false; $this->pos = -1; -- GitLab