[23.1] Fix ancient bug: incorrect usage of func.coalesce in User model #17577
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
SQLAlchemy BinaryExpression incorrectly assigned as value to
user.disk_usage
. Should be a numeric value.This bug was introduced 9 years ago. I believe here's what happened: when this was introduced, there was one other use of
func.coalesce
related to disk size calculation (here); however, in that other case, the expression was part of a SELECT statement - so it was sent to the database, where it invoked the database's coalesce function, which did what it should do. However, in the new expression, it was not sent to the database. This was never caught because we never checked that value before flushing the session somewhere else, and upon flush, the session did send that value to the database, where that value was evaluated by the db and was stored correctly. However, if we were to accessuser.disk_usage
after callingadjust_disk_usage()
but before flushing or committing to the database, we'd get an error, because instead of a decimal, we'd get a SQLAlchemy BinaryExpression type:This is currently tested in
test_galaxy_mapping.py
. It works because before accessing this attribute, the test callssession.expunge()
.How to test the changes?
(Select all options that apply)
License