mozilla/mentat

Implement ordering by aggregates

Aberta

#647 aberto em 19 de abr. de 2018

 (2 comentários) (0 reação) (0 responsável)Rust (116 forks)github user discovery
A-querycorrectnesshelp wanted

Métricas do repositório

Stars
 (1.661 estrelas)
Métricas de merge de PR
 (Nenhuma PRs mesclada em 30d)

Description

Right now, it's not possible to order by aggregates, so that queries like

[:find
 (count ?x)
 :where
 [_ :mentions ?x]
 :order
 (count ?x)]

are not possible. (They don't parse, due to :order expecting bare variables.)

@rnewman suggests this is simply not implemented, and says: the obvious solution is to take each :order that’s a valid aggregate expression and push it into the projector, just as we do now with order-vars. It would perhaps be worthwhile to make sure that

[:find ?person (sum ?balance)
 :where …
 :order (desc (sum ?balance))]

generates

SELECT datoms00.e AS ?person, sum(datoms00.v) AS ?balance … ORDER BY ?balance DESC

rather than mentioning sum twice. Otherwise this should mostly be a matter of extending the parser and altering some type choices in the projector/ordering hookup, which already exists.

Guia do colaborador