Формат сиквела для констант, вызовов функций в select? - PullRequest
0 голосов
/ 14 декабря 2011

Я пытаюсь выяснить, как создать Sequel Набор данных, который содержит вызовы функций и константы как часть его select и использует псевдонимы.Я застрял в правильном синтаксисе.

Я пытаюсь избежать вставки необработанного SQL, но я сделаю это, если мне потребуется столько времени, сколько я смогу связать результирующий набор данных и сослаться на псевдонимы столбцов внутри необработанного SQL.

Мой фактический запрос более сложный (и я на самом деле не вызываю sin, это просто пример вызова функции), но для наглядности приведу урезанную версию того, что я пытаюсьделать в SQL:

SELECT
  0 AS a,               -- constant
  sin(t.x) AS b,        -- function call with aliased column value argument
  t.x AS c
FROM
  T AS t
;

Каким будет эквивалентный, идиоматический, сиквел?Пока у меня есть:

DB[:T.as(:t)].
    select(
        #0 as a,        # How? constant
        #sin(t.x) as b, # How? function call with aliased column value argument
        :t__x.as(:c)
    )

Ответы [ 2 ]

2 голосов
/ 15 декабря 2011

Если вы хотите более краткий способ, вы можете использовать неявное наложение имен, используя символы с тройным подчеркиванием, используйте только метод select с виртуальным блоком строк:

DB[:T___t].select('0'.lit.as(:a), :t__x___c){sin(t__x).as(b)}

Это не совсем то же самоепоскольку порядок выбранных столбцов отличается, но это обычно не имеет значения.

0 голосов
/ 15 декабря 2011

После долгих поисков в превосходных документах Sequel я пришел к следующему решению, которое сработало для меня:

DB[:T.as(:t)].
    select_more('0'.lit.as(:a)).
    select_more(:sin.sql_function(:t__x).as(:b)).
    select_more(:t__x.as(:c))

Если кто-то знает более краткий или идиоматический способ выразить это, пожалуйста, поделитесь.

...