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")' });
基本/* */とか嫌いなんだけど、この場合はあってよかった。