DBIx::Class経由でSQL::Abstractを使っているわけですが、このたびPostgreSQLからMySQLに引っ越ししようかと思ってるサービスがありまして、そこで問題にぶち当たりました。
Ludia(PostgreSQL)の場合は対象のカラムに対してオペレーターをかますので、column => { '@@' => '*D+ ....' } (新しいLudiaは%%か)とかできるわけですが、MySQLの場合はMATCH(...) AGAINST(...)を使うので カラム→オペレーター→引数という形にできない。
もちろん 'MATCH(...)' => \'AGAINST(...)'ってやってもいいんだけど、なんかわかりにくい気がしてた。
で、色々考えた末、これが俺の中で一番きれいという判断となった
$sqla->select($table, {
'/* table.fts_column */' =>
\'MATCH(fts_column) AGAINST("whatever")'
});
基本/* */とか嫌いなんだけど、この場合はあってよかった。
コメント