fix(trees): replace child/synonym LEFT JOINs with scalar subqueries#8243
fix(trees): replace child/synonym LEFT JOINs with scalar subqueries#8243grantfitzsimmons wants to merge 1 commit into
Conversation
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Plus Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
I tried to recreate the issue on the test panel using the v7 and v7.12.06 branches but didn't notice a slowdown or see the console error. Screen.Recording.2026-07-02.at.4.07.51.PM.mov |
Fixes #8242
Note
The scalar query logic was suggested by DeepSeek V4 Pro. There may be more performant ways of accomplishing this. Feedback is welcome.
The tree view endpoint constructed queries with three independent
LEFT OUTER JOINs on the same tree table, one for counting children, one for looking up the accepted parent, and one for aggregating synonyms. When expanding a node with many children, the result set would balloon aschildren * accepted_matches * synonyms, overwhelming the database and causing a 504 gateway timeout.This happened because each join added rows multiplicatively before
GROUP BYcollapsed them withDISTINCTaggregates likecount(DISTINCT ...)andGROUP_CONCAT(DISTINCT ...). For a storage tree node like "Rack 001" at SAIAB, which has hundreds of direct child storage locations, the query would run for 40+ seconds and continue executing even after the HTTP connection was severed. Page refreshes would spawn additional instances, all consuming database resources.Testing instructions
Compare against the same database on both
v7and onissue-8242.child_countandsynonymsstill display correctly.