fix: overwriting already existing query's context in childQueryOf
#2409
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.
ported from ovos#12
This is a fix for an edge case, where a query context could be already set in a
Model.query()
call or in a custom QueryBuilder's constructor.In our case we are defining columns with a custom
@DefaultOrderBy(columns)
decorator, they are stored to query's context after query builder is instantiated, and eventually are read inquery.onBuild()
hook to apply sorting for a query, if none other was provided to it in the meantime.But when coupled with fetching graphs, where both parent and children models have
@DefaultOrderBy
configured, child model's query context (eager query to fetch models for a relation) was being completely overwritten with parent's query context, and that, in our case, resulted in using invalid columns to be passed toorderBy()
, resulting in a sql error.Note: this may look quite specific to our use case, but still, imo, query context passed from the parent should be already available at construction/instantiation of a child query, and not to be overwritten at later point.
For better picture, I attach the aforementioned
DefaultOrderBy
decorator/plugin: