/ / ordina con segnaposti in DBIx :: Class - perl, dbix-class

ordina con i segnaposti in DBIx :: Class - perl, dbix-class

Qual è il modo corretto per generare un ordine come ORDER BY myfunction(col, ?, ?) DESC con valori di bind in DBIx::Class?

Attualmente utilizzo SQL letterale per questo, ma ciò non è ottimale per diversi motivi.

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

risposte:

4 per risposta № 1

Qualcosa come questo:

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

genererà (per MySQL e ($val1, $val2) = qw(val1 val2)):

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

2 per risposta № 2

Sono riuscito a ottenere DBIx::Class per generare il corretto ORDER BY. Ecco il codice:

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