Size: a a a

2020 March 24

ŹR

Źmićer Rubinštejn in pro.elixir
Alex Bubnov
в итоге получается вот такое
alias Ecto.Query, as: Q
...
     # create query
     Q.from("left", as: :l)
     |> Q.join(:left, [l: le], r in "right", on: r.id == le.r_id, as: :r)
     |> Q.select([l: le, r: ri], {le.id, ri.id})
     # translate to sql
     |> (&Ecto.Adapter.Queryable.plan_query(:all, Ecto.Adapters.Postgres, &1)).() |> elem(0)
     |> Ecto.Adapters.Postgres.Connection.all()
     |> List.to_string
Так на эликсире не пишут
источник

ŹR

Źmićer Rubinštejn in pro.elixir
источник

AB

Alex Bubnov in pro.elixir
а тебе какая именно часть не нравится?
источник

РП

Рома Пак in pro.elixir
 |> (&Ecto.Adapter.Queryable.plan_query(:all, Ecto.Adapters.Postgres, &1)).() |> elem(0) 
эта как минимум
источник

AB

Alex Bubnov in pro.elixir
если (&E.A.Q.plan_query(..., &1)).() - это я и сам понимаю
источник

РП

Рома Пак in pro.elixir
зачем алиасить Query как Q?
источник

AB

Alex Bubnov in pro.elixir
а зачем его НЕ алиасить?
источник

AK

Andy Krasnov in pro.elixir
и расскажите ему кто-нибудь про Repo.all
источник

AB

Alex Bubnov in pro.elixir
Andy Krasnov
и расскажите ему кто-нибудь про Repo.all
Repo.all работает без коннекта к базе?
источник

LL

Lama Lover in pro.elixir
Alex Bubnov
а зачем его НЕ алиасить?
Затем чтобы импортить!
источник

AB

Alex Bubnov in pro.elixir
Lama Lover
Затем чтобы импортить!
а, ну это можно, да. но с явным неймспейсом больше нравится.
источник

PG

Pïg Grëënëst in pro.elixir
ага, сначала alias as Q, а потом require Q, import Q
источник

LL

Lama Lover in pro.elixir
Alex Bubnov
а, ну это можно, да. но с явным неймспейсом больше нравится.
Удваиваю. Но я делаю импорт для двух вещей: Query и когда выношу хэлперы из генсервера
источник

AK

Andy Krasnov in pro.elixir
Alex Bubnov
короче, я разобрался, как вытрясти из ecto SQL для запроса без подключения к базе, и это было как-то не особенно интуитивно
Ecto.Adapters.SQL.to_sql(:all, Repo, query)
источник

AK

Andy Krasnov in pro.elixir
не работает?
источник

AB

Alex Bubnov in pro.elixir
Andy Krasnov
Ecto.Adapters.SQL.to_sql(:all, Repo, query)
без запущенного репо - нет.
источник

AB

Alex Bubnov in pro.elixir
(ну если я не ошибся фатально еще вчера)
источник

AB

Alex Bubnov in pro.elixir
да, Ecto.Adapters.SQL.to_sql -> Ecto.Adapter.Queryable.prepare_query, который использует рантаймовые кэши из запущенного Repo
источник

ŹR

Źmićer Rubinštejn in pro.elixir
defmodule MyQueries do
 import Ecto.Query
 alias Ecto.Adapters.Queryable
 alias MyLib.Repo

 def my_query do
   from l in "left",
   left_join: r in "right", on: r.id == l.r_id,
   select: {l.id, r:id}
 end
 
 def inspect(query) do
   Queryable.plan_query(query)
 end
 
 def execute(%Ecto.Query{} = query) do
   Repo.all(query)
 end
 def execute({query, _}) do
   Ecto.Adapters.Postgres.Connection.all(query)
 end
end
источник

ŹR

Źmićer Rubinštejn in pro.elixir
5 секунд - все понятно
источник