Valider 5648523c rédigé par esj's avatar esj
Parcourir les fichiers

Ce qu'il est pénible, Postgres, à demander des GroupBy même lorsqu'il n'y a...

Ce qu'il est pénible, Postgres, à demander des GroupBy même lorsqu'il n'y a pas de jointures, sous prétexte qu'il y a un tri. J'espère au moins qu'il optimise après. Et ça suffit pour exiger tout un tas de nouveaux cas de traduction. Vivement le passage de l'espace privé en squelette, c'est le compilateur qui fera tout ce boulot.
parent 632ec35c
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+8 −4
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -235,15 +235,19 @@ function spip_pg_groupby($groupby, $from, $select)
{
	$join = is_array($from) ? (count($from) > 1) : 
	  (strpos($from, ",") OR strpos($from, "JOIN"));
	if ($join) $join = !is_array($select) ? $select : join(", ", $select);
	if ($join OR $groupby) $join = !is_array($select) ? $select : join(", ", $select);
	if ($join) {
	  $join = preg_replace('/(SUM|COUNT|MAX|MIN)\([^)]+\)\s*,/i','', $join);
	  $join = preg_replace('/,?\s*(SUM|COUNT|MAX|MIN)\([^)]+\)/i','', $join);
	  $join = str_replace('DISTINCT ','',$join);
	  $join = preg_replace('/(SUM|COUNT|MAX|MIN|UPPER)\([^)]+\)(\s+AS\s+\w+)\s*,?/i','', $join);
	  $join = preg_replace('/\w+\(\s*([^(),\']*),\s*\'[^\']*\'[^)]*\)(\s+AS\s+\w+)\s*,?/i','\\1', $join);
	  $join = preg_replace('/(SUM|COUNT|MAX|MIN|UPPER)\([^)]+\)\s*,?/i','', $join);
	  if (preg_match('/^(.*),\s*$/',$join,$m)) $join=$m[1];
#	  if (preg_match('/^(.*)\b[*]\b(.*)$/',$join,$m)) $join=$m[1].$m[2];
	}
	if ($join) $groupby = $groupby ? "$groupby, $join" : $join;
	if (!$groupby) return '';
	$groupby = spip_pg_frommysql($groupby);
	$groupby = preg_replace('/\bAS\s+\w+/','', $groupby);
	$groupby = preg_replace('/\s+AS\s+\w+\s*/','', $groupby);

	return "\nGROUP BY $groupby"; 
}
+5 −5
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -328,7 +328,7 @@ function requete_auteurs($tri, $statut, $recherche=NULL)
	// La requete de base est tres sympa
	// (pour les visiteurs, ca postule que les messages concernent des articles)
	
	 $row = sql_select("							aut.id_auteur AS id_auteur,							aut.statut AS statut,								aut.nom_site AS site, aut.nom AS nom,								UPPER(aut.nom) AS unom,							COUNT(lien.id_article) AS compteur							$sql_sel									", "spip_auteurs as aut " . ($visit ?		 			"LEFT JOIN spip_forum AS lien ON aut.id_auteur=lien.id_auteur " :		("LEFT JOIN spip_auteurs_articles AS lien ON aut.id_auteur=lien.id_auteur	 LEFT JOIN spip_articles AS art ON (lien.id_article = art.id_article)")) .	"", "$sql_visible ", " aut.statut, aut.nom_site, aut.nom, aut.id_auteur ", " $sql_order");
	$row = sql_select("							aut.id_auteur AS id_auteur,							aut.statut AS statut,								aut.nom_site AS site, aut.nom AS nom,								UPPER(aut.nom) AS unom,							COUNT(lien.id_article) AS compteur							$sql_sel									", "spip_auteurs as aut " . ($visit ?		 			"LEFT JOIN spip_forum AS lien ON aut.id_auteur=lien.id_auteur " :		("LEFT JOIN spip_auteurs_articles AS lien ON aut.id_auteur=lien.id_auteur	 LEFT JOIN spip_articles AS art ON (lien.id_article = art.id_article)")), $sql_visible, "aut.statut, aut.nom_site, aut.nom, aut.id_auteur", $sql_order);
	 return $row;
}

+3 −3
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -22,7 +22,7 @@ function exec_menu_navigation_dist() {

	$gadget = '<div style="width: 300px;">';

	$vos_articles = sql_select("articles.id_article, articles.id_rubrique, articles.titre, articles.statut", "spip_articles AS articles, spip_auteurs_articles AS lien", "articles.id_article=lien.id_article AND lien.id_auteur=$connect_id_auteur AND articles.statut='prepa'", "", "articles.date DESC", "5");
	$vos_articles = sql_select("articles.id_article, articles.id_rubrique, articles.titre, articles.statut", "spip_articles AS articles, spip_auteurs_articles AS lien", "articles.id_article=lien.id_article AND lien.id_auteur=$connect_id_auteur AND articles.statut='prepa'", "articles.date", "articles.date DESC", "5");

	if (sql_count($vos_articles) > 0) {
			$t = _T('info_en_cours_validation');
@@ -38,7 +38,7 @@ function exec_menu_navigation_dist() {
			$gadget .= fin_cadre('bandeau-rubriques');
	}
	
	$vos_articles = sql_select("id_article, id_rubrique, titre, statut", "spip_articles", "statut='prop'", "", "date DESC", "5");
	$vos_articles = sql_select("id_article, id_rubrique, titre, statut", "spip_articles", "statut='prop'", "date", "date DESC", "5");
	if (sql_count($vos_articles) > 0) {
			$gadget .= debut_cadre('bandeau-rubriques',"article-24.gif",'',afficher_plus(generer_url_ecrire())._T('info_articles_proposes'));
			$gadget .= "<div class='plan-articles'>";
@@ -52,7 +52,7 @@ function exec_menu_navigation_dist() {
			$gadget .= fin_cadre('bandeau-rubriques');
	}

	$vos_articles = sql_select("*", "spip_breves", "statut='prop'", "", "date_heure DESC", "5");
	$vos_articles = sql_select("id_breve,titre,statut", "spip_breves", "statut='prop'", "date_heure", "date_heure DESC", "5");
	if (sql_count($vos_articles) > 0) {
			$gadget .= debut_cadre('bandeau-rubriques',"breve-24.gif",'',afficher_plus(generer_url_ecrire("breves"))._T('info_breves_valider'));
			$gadget .= "<div class='plan-articles'>";