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.
Refactored the filtering for user permissions speed up the lot queries. The lots routes that use these function
getLots()
,getAssets()
, andgetLotsDepot()
were using the following filter definition (ingetLotFilters()
):This means that this 'SELECT DISTINCT' query and subquery were being executed for each row of the results. This is the primary cause of the slow performance of the
/stock/lots/depot
endpoint with large databases.This PR changes the above filter to run the 'SELECT DISTINCT' query once and then encodes all of the allowable depots in a new custom filter, so that each row of the results is simply doing checking to see if the depot UUID is a predefined list of UUIDs, which is much more efficient than multiple subqueries.
TESTING
/stock/lots/depots?includeEmptyLot=1&limit=1000&period=allTime&paging=true&page=2
NOTE: This could be generalized by extending
filterParser
with an additional filter that would do a query first and then define a custom filter based on the output.