hauleth

hauleth

Proposal: Alias for current query select in Ecto queries

Currently such query:

from foo in Foo,
 group_by: fragment("date_part(?, ?)", "day", foo.inserted_at),
 select: %{for: fragment("date_part(?, ?)", "day", foo.inserted_at), count: count(foo.id)}

Is invalid (at least in PostgreSQL) with very confusing error (at least for the newcomers):

column "p0.inserted_at" must appear in the GROUP BY clause or be used in aggregate function

Everything is because what DB sees is something like:

SELECT
  date_part(foo.inserted_at, $1) AS for,
  COUNT(foo.id) AS count
FROM foos foo
GROUP BY
    date_part(foo.inserted_at, $2)

And while we knows that value of $1 and $2 is the same the query planner cannot assume that, because there is not enough data. What we can do currently is:

from foo in Foo,
 group_by: fragment(~s["for"]),
 select: %{for: fragment("date_part(?, ?)", "day", foo.inserted_at), count: count(foo.id)}

Which will use our alias for for field, however this is sub perfect experience, what I would like to see instead is something like:

from foo in Foo,
 group_by: self.for,
 select: %{for: fragment("date_part(?, ?)", "day", foo.inserted_at), count: count(foo.id)}

Or similar (no need to use exactly self word). This would allow to have better experience when working with SQL functions and to reduce duplication in some OLAP queries.

Not that we cannot use foo as the foo.for as we can have the same field names in select as there are in foo and we need to distinguish between them.

Where Next?

Popular in Discussions Top

JakeBecker
TL;DR: I’ve just released an implementation of Microsoft’s IDE-independent Language Server Protocol for Elixir. It adds language support ...
1144 55125 245
New
lorenzo
Hey everone! I created a prototype for my app using Nodejs for the api. But the framework I chose wasnt great (in general theresnt any g...
New
chuck
Let me start by stating an assumption: Phoenix is a great approach to building REST APIs. There are many reasons for this, but I will ass...
New
AstonJ
Seen any cool LiveView demos, sample apps or examples? Please post them here! :003:
New
Fl4m3Ph03n1x
Background A few days ago I was listening to The future of Elixir from Elixir Talks, with Dave Thomas (@pragdave ) and Brian Mitchell. I...
New
mmmrrr
Just saw that dhh announced https://hotwire.dev/ Is it just me or is this essentially live view? :smiley: Although I like the “iFrame-e...
New
paulanthonywilson
I like Umbrella projects and pretty much always use them for personal Elixir stuff, especially Nerves things. But I don’t think this is ...
New

Other popular topics Top

JeremM34
Hello, how can I check the Phoenix version ? Thanks !
New
nsuchy
Hi. I’ve noticed that Windows Powershell has it’s own IEX command and you cannot access Elixir’s IEX due to the conflict. This isn’t a cr...
New
SoCreat
i’m a new one to elixir which editor can i use vs code? or atom? Thanks! :smiley:
New
JorisKok
I have a server on AWS, and was running a load test using artillery. When looking at the Phoenix dashboard I see the Ports going to 100% ...
New
Harrisonl
We have an ECS cluster with 4 services, where each task joins a single cluster, via discovery ECS discovery service. Currently when I de...
New
jason.o
In the code below, if the create action is not set to accept “extra_key” as an input, it errors out with a message shown above. Is there ...
New

We're in Beta

About us Mission Statement