Интерполяция списка UUID в сырой SQL-запрос (нельзя использовать фрагмент) - PullRequest
1 голос
/ 19 июня 2019

У меня проблемы с интерполяцией списка UUID для выполнения запроса in.

Ecto.Adapters.SQL.query!(Repo, "
  WHERE
    some_id IN ($1)
", [some_list_of_ids])

Это дает мне ошибку ** (ArgumentError) Postgrex expected a binary of 16 bytes, got ["4ca72ee7-61e2-4450-8dac-bdd7cf6b3df9", "83640dcc-9674-462c-881b-0ce2ed8f3fba",.... Я все еще получаю эту ошибку, даже если я приведу UUID в двоичный файл с UUID.string_to_binary!

Как я могу интерполировать это?

1 Ответ

0 голосов
/ 08 июля 2019

Попробуйте преобразовать «пунктирные» UUID в двоичные UUID.

Это должно работать:

uuids = [
  "f3c106c3-943f-4270-b129-59a2fda48925",
  "5ead56f1-9b7f-4289-9a8d-236c2812d82a",
  "cf4b7ddc-1369-4d99-b35d-8dae6c9e85d9"
]

binary_uuids = Enum.map uuids, fn uuid -> Ecto.UUID.dump(uuid) |> elem(1) end

query = "select * from accounts where id = ANY($1)"

Ecto.Adapters.SQL.query!(Repo, query, [binary_uuids])
...