#35462: Add support JSONArrayAgg
-------------------------------------+-------------------------------------
Reporter: Robert Silén | Owner: nobody
Type: New feature | Status: new
Component: Database layer | Version: 5.0
(models, ORM) |
Severity: Normal | Resolution:
Keywords: aggregation, | Triage Stage: Accepted
ArrayAgg |
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Changes (by Simon Charette):
* component: Uncategorized => Database layer (models, ORM)
* stage: Unreviewed => Accepted
* summary: ArrayAgg and others for MariaDB => Add support JSONArrayAgg
Comment:
The `contrib.postgres.ArrayAgg` expression you pointed at uses Postgres
arrays and MariaDB doesn't have native array support so they are not
equivalent.
`JSON_ARRAYAGG` is a standard SQL function implemented on Postgres,
SQLite, MySQL, SQLite, Oracle, and MariaDB so if we were to include it in
core it should be for all supported backends and not only for MariaDB.
It should be trivial to implement by subclassing `Aggregate` in fact I
suspect that the following should work on most backends by default
{{{#!python
class JSONArrayAgg(Aggregate):
function = "JSON_ARRAYAGG"
output_field = JSONField()
arity = 1
}}}
Or with subtle adjusted as using `json_group_array` on SQLite.
As for `StringAgg` with a fallback on `GROUP_CONCAT` on MySQL and MariaDB
it is already being explored in #35444 which plans to add support for
configurable support for `ORDER BY` in aggregates.
--
Ticket URL: <
https://code.djangoproject.com/ticket/35462#comment:3>
Django <
https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.