From 161153388232c55a63deee1b809308cfd902ce32 Mon Sep 17 00:00:00 2001
From: Cerdic <cedric@yterium.com>
Date: Tue, 14 Dec 2010 17:18:41 +0000
Subject: [PATCH] Evacuer les eventuelles clauses group vide au calcul des
 requetes dans un squelette.

Permet a un critere d'injecter une clause group dynamique, evaluee au calcul, qui rendra '' si pas de group a faire.
---
 ecrire/public/composer.php | 43 ++++++++++++++++++++++++++++----------
 1 file changed, 32 insertions(+), 11 deletions(-)

diff --git a/ecrire/public/composer.php b/ecrire/public/composer.php
index 1393a8fa92..5279475611 100644
--- a/ecrire/public/composer.php
+++ b/ecrire/public/composer.php
@@ -489,20 +489,37 @@ function trouver_sous_requetes($where){
 	return array($where_simples,$where_sous);
 }
 
-// La fonction presente dans les squelettes compiles
 
-// http://doc.spip.org/@calculer_select
+/**
+ * La fonction presente dans les squelettes compiles
+ *
+ * http://doc.spip.org/@calculer_select
+ *
+ * @param array $select
+ * @param array $from
+ * @param array $from_type
+ * @param array $where
+ * @param array $join
+ * @param array $groupby
+ * @param array $orderby
+ * @param string $limit
+ * @param array $having
+ * @param string $table
+ * @param string $id
+ * @param string $serveur
+ * @param bool $requeter
+ * @return resource
+ */
 function calculer_select ($select = array(), $from = array(), 
 			$from_type = array(),
       $where = array(), $join=array(),
 			$groupby = array(), $orderby = array(), $limit = '',
 			$having=array(), $table = '', $id = '', $serveur='', $requeter=true) {
 
-// retirer les criteres vides:
-// {X ?} avec X absent de l'URL
-// {par #ENV{X}} avec X absent de l'URL
-// IN sur collection vide (ce dernier devrait pouvoir etre fait a la compil)
-
+	// retirer les criteres vides:
+	// {X ?} avec X absent de l'URL
+	// {par #ENV{X}} avec X absent de l'URL
+	// IN sur collection vide (ce dernier devrait pouvoir etre fait a la compil)
 	$menage = false;
 	foreach($where as $k => $v) { 
 		if (is_array($v)){
@@ -515,6 +532,10 @@ function calculer_select ($select = array(), $from = array(),
 			$menage = true;
 		}
 	}
+
+	// evacuer les eventuels groupby vide issus d'un calcul dynamique
+	$groupby = array_diff($groupby,array(''));
+
 	// remplacer les sous requetes recursives au calcul
 	list($where_simples,$where_sous) = trouver_sous_requetes($where);
 	foreach($where_sous as $k=>$w) {
@@ -558,10 +579,10 @@ function calculer_select ($select = array(), $from = array(),
 		}
 	}
 
-// Installer les jointures.
-// Retirer celles seulement utiles aux criteres finalement absents mais
-// parcourir de la plus recente a la moins recente pour pouvoir eliminer Ln
-// si elle est seulement utile a Ln+1 elle meme inutile
+	// Installer les jointures.
+	// Retirer celles seulement utiles aux criteres finalement absents mais
+	// parcourir de la plus recente a la moins recente pour pouvoir eliminer Ln
+	// si elle est seulement utile a Ln+1 elle meme inutile
 	
 	$afrom = array();
 	$equiv = array();
-- 
GitLab