mozilla/mentat

Implement ordering by aggregates

Open

#647 ouverte le 19 avr. 2018

Voir sur GitHub
 (2 commentaires) (0 réactions) (0 assignés)Rust (116 forks)github user discovery
A-querycorrectnesshelp wanted

Métriques du dépôt

Stars
 (1 661 stars)
Métriques de merge PR
 (Métriques PR en attente)

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.

Guide contributeur