Size: a a a

2019 November 05

IA

Ivan Ananev in pro.elixir
источник

IA

Ivan Ananev in pro.elixir
источник

Н

Никита in pro.elixir
проблема в том, что внутренний запрос содержит имена из внешнего, и если его брать привязками, он развалится с сообщением "не знаю что такое"
источник

Н

Никита in pro.elixir
field не работает с subquery
источник

Н

Никита in pro.elixir
Никита
проблема в том, что внутренний запрос содержит имена из внешнего, и если его брать привязками, он развалится с сообщением "не знаю что такое"
то бишь на тех же join все работает ровно до момента, пока я не решаю сделать привязки наружу
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Те у тебя есть написанный sql и ты 6 часов пытаешься переписать его в ecto?
источник

AK

A K in pro.elixir
а хранимую процу экто может дернуть?
источник

АН

Алексей Новоселов in pro.elixir
Никита
то бишь на тех же join все работает ровно до момента, пока я не решаю сделать привязки наружу
Ecto умеет только в join subquery использовать. Тебе нужно написать подзапрос так, чтобы с ним inner_join прошел нормально
источник

АН

Алексей Новоселов in pro.elixir
либо фрагметом голый sql выполнять
источник

IK

Ihor Katkov in pro.elixir
я бы не парился и raw sql экзекьютил)
источник

МЛ

Михаил Лёсин in pro.elixir
Прошу прощения за явно нубский вопрос, но я что-то запутался.
Как правильнее записать в эликсире конструкцию, когда мне надо сделать несколько последовательных паттерн матчей, но второй только если первый был успешным, а вернуть булеан?
например я получаю через File.stat структуру, матчу ее с {:ok, %File.Stat{} = dirinfo} when dirinfo.type === :directory и только в случае успеха вызвать еще один File.stat с похожим матчем, и только если оба успешны возвращать true? (это все работает внутри `Enum.filter/2`)
Правильно ли для этого использовать with и если да, то что писать в do: и как описать что в случае проблем надо вернуть false?
источник

МЛ

Михаил Лёсин in pro.elixir
компилятор говорит, что вот так неправильно:
Enum.filter(files, fn (dir) ->
 with
   {:ok, %File.Stat{} = dirinfo} when dirinfo.type === :directory <- File.stat(projects_root <> "/" <> dir),
   {:ok, %File.Stat{} = prjinfo} when prjinfo.type === :file <- File.stat(projects_root <> "/" <> dir <> "/.asset")
   do: true, else: false
 end)
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Михаил Лёсин
компилятор говорит, что вот так неправильно:
Enum.filter(files, fn (dir) ->
 with
   {:ok, %File.Stat{} = dirinfo} when dirinfo.type === :directory <- File.stat(projects_root <> "/" <> dir),
   {:ok, %File.Stat{} = prjinfo} when prjinfo.type === :file <- File.stat(projects_root <> "/" <> dir <> "/.asset")
   do: true, else: false
 end)
У with другой синтаксис жа. А не, не другой… ща еще посмотрю
источник

SK

Simon Khaskelberg in pro.elixir
немного другой синтаксис.

else
_ -> false
end
источник

SK

Simon Khaskelberg in pro.elixir
Плюс здесь какой-то странный матчинг идёт. Почему бы сразу не написать

{:ok, %File.Stat{type: :directory}} <- File.stat(Path.join([projects_root, dir]))
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Чет инлайн else не пишется
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Может быть это и не возможно
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Я во всяком случае не знаю такой технологии
источник

ŹR

Źmićer Rubinštejn in pro.elixir
А, знаю
источник

ŹR

Źmićer Rubinštejn in pro.elixir
Enum.filter(files, fn (dir) ->
     with {:ok, %File.Stat{type: :directory}} <- File.stat(Path.join(projects_root, dir)),
          {:ok, %File.Stat{type: :file}} <- File.stat(Path.join([projects_root, dir, ".asset"])),
       do: true, else: (_ -> false)
     end)
источник