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

En parlant de fonction SQL, plutot que de produire une requete incorrecte, on...

En parlant de fonction SQL, plutot que de produire une requete incorrecte,  on repère maintenant des fonctions a plusieurs arguments, ce qui permet en particulier un critere comparant des titres commençant par des numeros: {CONV(titre,10,10)=(#TITRE|intval)}
parent 05c80a8e
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -459,7 +459,7 @@ function calculer_criteres ($idb, &$boucles) {
function calculer_critere_DEFAUT($idb, &$boucles, $crit)
{
list($fct, $col, $op, $val, $table) =
list($fct, $col, $op, $val, $table, $args_sql) =
calculer_critere_infixe($idb, $boucles, $crit);
// ajout pour le cas special d'une condition sur le champ statut:
......@@ -485,7 +485,7 @@ function calculer_critere_DEFAUT($idb, &$boucles, $crit)
} else $ct = $col;
// inserer la fonction SQL
if ($fct) $ct = "$fct($ct)";
if ($fct) $ct = "$fct($ct$args_sql)";
// inserer la negation (cf !...)
if (strtoupper($op) == 'IN') {
......@@ -524,7 +524,7 @@ function calculer_critere_infixe($idb, &$boucles, $crit) {
$type = $boucle->type_requete;
$col_table = $boucle->id_table;
list($fct, $col, $op, $val) =
list($fct, $col, $op, $val, $args_sql) =
calculer_critere_infixe_ops($idb, $boucles, $crit);
// Cas particulier : id_enfant => utiliser la colonne id_objet
......@@ -565,7 +565,7 @@ function calculer_critere_infixe($idb, &$boucles, $crit) {
} // else: champ dans la table, c'est ok.
}
return array($fct, $col, $op, $val, $col_table);
return array($fct, $col, $op, $val, $col_table, $args_sql);
}
// deduction automatique des jointures
......@@ -740,14 +740,16 @@ function calculer_critere_infixe_ops($idb, &$boucles, $crit)
}
}
$fct = '';
$fct = $args = '';
// fonction SQL ?
if (ereg("([A-Za-z_]+)\(([^)]+)\)", $col,$match3)) {
$col = $match3[2];
$fct = $match3[1];
if (preg_match('/^(.*)' . SQL_ARGS . '$/', $col, $m)) {
$fct = $m[1];
preg_match('/^\(([^,]*)(.*)\)$/', $m[2], $a);
$col = $a[1];
$args_sql = $a[2];
}
return array($fct, $col, $op, $val);
return array($fct, $col, $op, $val, $args_sql);
}
// compatibilite ancienne version
......
......@@ -33,7 +33,8 @@ define('CHAMP_ETENDU', '\[([^]\[]*)\(' . NOM_DE_CHAMP . '([^[)]*\)[^]\[]*)\]');
define('BALISE_INCLURE','<INCLU[DR]E[[:space:]]*(\(([^)]*)\))?');
define('CHAMP_SQL_PLUS_FONC', '`?([A-Za-z_][A-Za-z_0-9]*)\(?([A-Za-z_.]*)\)?`?');
define('SQL_ARGS', '(\([^)]*\))');
define('CHAMP_SQL_PLUS_FONC', '`?([A-Za-z_][A-Za-z_0-9]*)' . SQL_ARGS . '?`?');
function phraser_inclure($texte, $ligne, $result) {
......
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