Как мне выразить функцию MySql `GROUP_CONCAT (столбец DISTINCT)` в Ареле? - PullRequest
0 голосов
/ 29 ноября 2018

Я могу использовать

Arel::Nodes::NamedFunction.new('GROUP_CONCAT', [an_arel_table[:a_column]])

для генерации

GROUP_CONCAT(a_column)

в моем SELECT заявлении.Но как мне добавить параметр DISTINCT?

Arel::Nodes::NamedFunction.new('GROUP_CONCAT', ['DISTINCT', an_arel_table[:a_column]])

дает

GROUP_CONCAT(DISTINCT, a_column)

, что является синтаксической ошибкой.

1 Ответ

0 голосов
/ 29 ноября 2018

Это что-то вроде хака, но работает следующее:

Arel::Nodes::InfixOperation предоставляет механизм для генерации последовательности X DISTINCT Y.Установив значение X пустым (Arel::Nodes::SqlLiteral.new('')), мы получим DISTINCT Y.

Arel::Nodes::NamedFunction.new('GROUP_CONCAT', [
  Arel::Nodes::InfixOperation.new('DISTINCT',
        Arel::Nodes::SqlLiteral.new(''),
        an_arel_table[:a_column]])])

Более поздние версии Arel (помимо Rails 4.2) поддерживают UnaryOperation, что может разрешить выражение модификатора DISTINCT как Arel::Nodes::UnaryOperation.new('DISTINCT', an_arel_table[:a_column]).(Непроверенные)

...