Skip to content
Extraits de code Groupes Projets
Valider 7b58a9a7 rédigé par esj's avatar esj
Parcourir les fichiers

Les optimisations sur les requetes doivent etre faites au niveau du...

Les optimisations sur les requetes doivent etre faites au niveau du compilateur, pas au niveau de la fonction d'abstraction des serveurs ni de ses instances. Prepare l'evacuation des jointures inutiles.
parent 24faac75
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -54,7 +54,7 @@ function spip_abstract_select (
}
}
return $f($select, $from, $where,
$groupby, array_filter($orderby), $limit,
$groupby, $orderby, $limit,
$sousrequete, $cpt,
$table, $id, $serveur);
}
......
......@@ -78,9 +78,6 @@ function spip_mysql_select($select, $from, $where,
$sousrequete, $having,
$table, $id, $serveur) {
foreach($where as $k => $v)
{ if (!$v) unset($where[$k]);}
$q = ($from ? ("\nFROM " . join(",\n\t", $from)) : '')
. ($where ? ("\nWHERE " . join("\n\tAND ", $where)) : '')
. ($groupby ? "\nGROUP BY $groupby" : '')
......
......@@ -543,4 +543,21 @@ function lang_parametres_forum($s) {
return $s;
}
// La fonction presente dans les squelettes compiles
function spip_optim_select ($select = array(), $from = array(),
$where = array(), $join=array(),
$groupby = '', $orderby = array(), $limit = '',
$sousrequete = '', $cpt = '',
$table = '', $id = '', $serveur='') {
foreach($where as $k => $v) { if (!$v) unset($where[$k]);}
$where = array_merge($where, $join);
return spip_abstract_select($select, $from, $where,
$groupby, array_filter($orderby), $limit,
$sousrequete, $cpt,
$table, $id, $serveur);
}
?>
......@@ -257,7 +257,7 @@ function calculer_requete_sql(&$boucle)
return ($boucle->hierarchie ? "\n\t$boucle->hierarchie" : '')
. $boucle->hash .
"\n\n // REQUETE
\$result = spip_abstract_select(\n\t\tarray(\"" .
\$result = spip_optim_select(\n\t\tarray(\"" .
# En absence de champ c'est un decompte :
# prendre une constante pour avoir qqch
(!$boucle->select ? 1 :
......@@ -265,12 +265,16 @@ function calculer_requete_sql(&$boucle)
'"), # SELECT
' . calculer_from($boucle) .
', # FROM
' . calculer_where($boucle) .
', # WHERE
array(' .
($boucle->where ? ('"'. join('", "', $boucle->where) . '"') : '') .
'), # WHERE
array(' .
($boucle->join ? ('"'. join('", "', $boucle->join) . '"') : '') .
'), # WHERE pour jointure
' . (!$boucle->group ? "''" :
('"' . join(", ", $boucle->group)) . '"') .
", # GROUP
array(" .
', # GROUP
array(' .
join(', ', $order) .
"), # ORDER
" . (strpos($boucle->limit, 'intval') === false ?
......@@ -291,15 +295,6 @@ function calculer_from(&$boucle)
return 'array(' . substr($res,3) . '")';
}
function calculer_where(&$boucle)
{
$w = array_merge($boucle->where, $boucle->join);
return 'array(' .
(!$w ? '' : ( '"' . join('",
"', $w) . '"')) .
")";
}
//
// fonction traitant les criteres {1,n} (analyses dans inc-criteres)
//
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter