mozilla/mentat

Implement ordering by aggregates

Ouverte

#647 ouverte le 19 avr. 2018

 (2 commentaires) (0 réaction) (0 personne assignée)Rust (116 forks)github user discovery
A-querycorrectnesshelp wanted

Métriques du dépôt

Stars
 (1 661 étoiles)
Métriques de merge PR
 (Aucune PR mergée en 30 j)

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