From fdbe184d80303eb5b3e251111e88cae7d9dde891 Mon Sep 17 00:00:00 2001
From: "Committo,Ergo:sum" <esj@rezo.net>
Date: Wed, 22 Mar 2006 20:29:04 +0000
Subject: [PATCH] =?UTF-8?q?Group=20by=20n=C3=A9cessaire=20quand=20meme=20s?=
 =?UTF-8?q?i=20la=20cl=C3=A9=20de=20jointure=20est=20optionnelle?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 ecrire/public/criteres.php | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/ecrire/public/criteres.php b/ecrire/public/criteres.php
index d6d4bb1c02..8bcbb610b4 100644
--- a/ecrire/public/criteres.php
+++ b/ecrire/public/criteres.php
@@ -298,7 +298,7 @@ function critere_par_jointure(&$boucle, $champ)
 
     $cle = trouver_champ_exterieur($champ, $boucle->jointures, $boucle);
     if ($cle) 
-      $cle = calculer_jointure($boucle, array($boucle->id_table, $desc), $cle);
+      $cle = calculer_jointure($boucle, array($boucle->id_table, $desc), $cle, false);
     if ($cle) $t = "L$cle"; // sinon erreur
   }
   return "'" . $t . '.' . $champ . "'";
@@ -583,7 +583,7 @@ function calculer_critere_externe_init(&$boucle, $col, $desc, $crit)
 			}
 			if ($t)	return $t;
 		}
-		$cle = calculer_jointure($boucle, array($boucle->id_table, $desc), $cle, $col);
+		$cle = calculer_jointure($boucle, array($boucle->id_table, $desc), $cle, $col, $crit->cond);
 		if ($cle) return "L$cle";
 	}
 
@@ -597,7 +597,7 @@ function calculer_critere_externe_init(&$boucle, $col, $desc, $crit)
 // deduction automatique des jointures 
 // une jointure sur une table avec primary key doit se faire sur celle-ci. 
 
-function calculer_jointure(&$boucle, $depart, $arrivee, $col='')
+function calculer_jointure(&$boucle, $depart, $arrivee, $col='', $cond)
 {
   static $num=0;
   $res = calculer_chaine_jointures($boucle, $depart, $arrivee);
@@ -607,7 +607,7 @@ function calculer_jointure(&$boucle, $depart, $arrivee, $col='')
   $id_primary = $ddesc['key']['PRIMARY KEY'];
   $id_field = $dnom . '.' . $id_primary;
   $id_table = "";
-
+  spip_log("cj $col $id_primary");
   foreach($res as $r) {
     list($d, $a, $j) = $r;
     $num++;
@@ -617,10 +617,10 @@ function calculer_jointure(&$boucle, $depart, $arrivee, $col='')
 
   // pas besoin de group by 
   // si une seule jointure et sur une table primary key formee
-  // de l'index principal et de l'index de jointure
+  // de l'index principal et de l'index de jointure (non conditionnel! [6031])
   // cf http://article.gmane.org/gmane.comp.web.spip.devel/30555
-  // 
-  if ($pk = (count($res) == 1)) {
+
+  if ($pk = (count($res) == 1) && !$cond) {
     if ($pk = $a[1]['key']['PRIMARY KEY']) {
 	$pk=preg_match("/^$id_primary, *$col$/", $pk) OR
 	  preg_match("/^$col, *$id_primary$/", $pk);
-- 
GitLab