From cdd77100c185126a1727a9df49e441eb2780c5b1 Mon Sep 17 00:00:00 2001 From: Cerdic <cedric@yterium.com> Date: Mon, 21 May 2007 22:50:43 +0000 Subject: [PATCH] "un critere {collecte xx} qui est pris en compte au moment du calcul de la boucle dans la clause order Attention : la collecte doit etre coherente avec le charset du champ, en particulier il ne doit pas etre binaire " --- ecrire/public/compiler.php | 14 +++++++++++++- ecrire/public/criteres.php | 12 ++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/ecrire/public/compiler.php b/ecrire/public/compiler.php index f8d7fed889..dda410292b 100644 --- a/ecrire/public/compiler.php +++ b/ecrire/public/compiler.php @@ -312,7 +312,7 @@ function calculer_requete_sql(&$boucle) ('"' . join(", ", $boucle->group)) . '"') . ', # GROUP array(' . - join(', ', $order) . + calculer_order($boucle) . "), # ORDER " . (strpos($boucle->limit, 'intval') === false ? "'".$boucle->limit."'" : @@ -357,6 +357,18 @@ function calculer_from(&$boucle) return 'array(' . substr($res,1) . ')'; } +function calculer_order(&$boucle) +{ + $order = $boucle->order; + if (isset($boucle->modificateur['collate'])){ + $col = $boucle->modificateur['collate']; + $col = ".($col ?' COLLATE '.$col:'')"; + foreach($order as $k=>$o) + $order[$k] .= $col; + } + return join(', ', $order); +} + // // fonction traitant les criteres {1,n} (analyses dans inc-criteres) // diff --git a/ecrire/public/criteres.php b/ecrire/public/criteres.php index afa5aa5c10..9af626e199 100644 --- a/ecrire/public/criteres.php +++ b/ecrire/public/criteres.php @@ -276,6 +276,18 @@ function critere_fusion_dist($idb,&$boucles, $crit) { "{groupby ?} BOUCLE$idb"); } +// c'est la commande SQL "COLLATE" +// qui peut etre appliquee sur les order by, group by, where like ... +function critere_collecte_dist($idb,&$boucles, $crit) { + if (isset($crit->param[0])) { + $_coll = calculer_liste($crit->param[0], array(), $boucles, $boucles[$idb]->id_parent); + $boucle = $boucles[$idb]; + $boucle->modificateur['collate'] = $_coll; + } else + erreur_squelette(_T('zbug_info_erreur_squelette'), + "{collecte ?} BOUCLE$idb"); +} + // http://doc.spip.org/@calculer_critere_arg_dynamique function calculer_critere_arg_dynamique($idb, &$boucles, $crit, $suffix='') { -- GitLab