/ / order by avec des espaces réservés dans DBIx :: Class - perl, dbix-class

order by avec des espaces réservés dans DBIx :: Class - perl, dbix-class

Quelle est la bonne façon de générer une commande par comme ORDER BY myfunction(col, ?, ?) DESC avec des valeurs de liaison dans DBIx::Class?

Actuellement, j’utilise le SQL littéral pour cela, mais cela n’est pas optimal pour plusieurs raisons.

$rs->search(undef, { order_by => "myfunction(col, $v1, $v2) DESC" });

Réponses:

4 pour la réponse № 1

Quelque chose comme ça:

$rs->search(
undef,
{
"+columns" => [{
"res" => {
"func" => ["me.col", ["?" => $val1], ["?" => $val2]],
"-as"  => "res",
},
}],
"order_by" => {"-desc" => "res"},
}
);

va générer (pour MySQL & ($val1, $val2) = qw(val1 val2)):

SELECT `me`.`id`, ..., FUNC( `me`.`col`, ?, ? ) AS `res`
FROM `table` `me`
ORDER BY `res` DESC:
"val1",
"val2"

2 pour la réponse № 2

J'ai réussi à obtenir DBIx::Class générer le bon ORDER BY. Voici le code:

$rs->search(undef, {
order_by => [
"myfunction(mycol, ?, ?) DESC", map [dummy => $_], $v1, $v2
]
});