Попытка выполнить фрагмент SQL:Ecto SQL Fragment терпит неудачу, почему?
Repo.all from p in Posts, where: fragment("lower(?) in ?", p.title, ^["some-title"])
Но это не удается, он генерирует следующий SQL и ошибки:
SELECT p0."title" FROM "posts" AS p0 WHERE (lower(p0."title") in $1) [["some-title"]]
** (Postgrex.Error) ERROR (syntax_error): syntax error at or near "$1"
UPDATE: РЕШЕНИЕ
Таким образом, после многих испытаний я выяснили, как им пользоваться:
Repo.all from p in Posts, where: fragment("lower(?)", p.title) in ^["some-title"])
Но все же - Почему оригинальное выражение не сработало? Похоже, что это тоже вполне реально.
UPDATE
There should be parentheses after
in
Я пробовал, не работает либо:
Repo.all from p in Posts, where: fragment("lower(?) in (?)", p.title, ^["some-title"])
** (ArgumentError) Postgrex expected a binary that can be encoded/cast to type "text", got ["some-title"]. Please make sure the value you are passing matches the definition in your table or in your query or convert the value accordingly.
Там должны быть круглые скобки после 'в'. –