#31839 closed New feature (wontfix)
Add additional database functions.
| Reported by: | Nick Pope | Owned by: | Nick Pope |
|---|---|---|---|
| Component: | Database layer (models, ORM) | Version: | dev |
| Severity: | Normal | Keywords: | functions, random, truncate, log2, log10, bit length, octet length, hyperbolic |
| Cc: | Triage Stage: | Unreviewed | |
| Has patch: | yes | Needs documentation: | no |
| Needs tests: | no | Patch needs improvement: | no |
| Easy pickings: | no | UI/UX: | no |
Description (last modified by )
I propose adding some additional database functions:
Random-- generate random numbers in the range[0.0, 0.1).Truncate-- round number towards zero. (SQL function isTRUNC, butTruncis used for date truncation in Django.)Log2andLog10-- simple logarithm functions without needing to provide the base.ACosh,ASinh,ATanh,Cosh,Sinh, andTanh-- hyperbolic functions.BitLengthandByteLength-- length of string in bits and bytes, complement toLengthwhich is character length.
Change History (6)
comment:1 by , 5 years ago
| Has patch: | set |
|---|
comment:2 by , 5 years ago
I'm not sure if it's worth adding extra database functions:
-
Log2andLog10can be achieved with proving base toLogso I'm against them, - hyperbolic functions are supported only on PostgreSQL 12+, we need to emulate them on other DBs, it's not worth, IMO,
BitLengthandOctetLengthwill probably not work on Oracle.
Truncate and Round sound reasonable.
comment:3 by , 5 years ago
| Description: | modified (diff) |
|---|
comment:4 by , 5 years ago
| Resolution: | → wontfix |
|---|---|
| Status: | assigned → closed |
I think we need to decide at what point we say enough is enough here, and recommend users create their own functions like we did with template tags. For me hyperbolic functions cross that line. You can start a discussion on DevelopersMailingList if you don't agree. Personally I've never used any of proposed database functions.
comment:5 by , 5 years ago
Will you still take Random and Truncate?
In the case of Random there is also a nice bit of simplification:
https://github.com/django/django/commit/c8913d41e74859747893dc21356a1fb6906c56e9
comment:6 by , 5 years ago
Random() is already there (as an expression) so we can change it to a function and promote in docs, I'm just not sure why we change its behavior.
Truncate() can be confused with Trunc() for dates/datetimes, and we can achieve the same by using Cast(..., models.IntegerField()) so I don't think it's necessary.
PR