feat: add Query Builder explain()#10238
Open
memleakd wants to merge 3 commits into
Open
Conversation
Signed-off-by: memleakd <121398829+memleakd@users.noreply.github.com>
patel-vansh
reviewed
May 25, 2026
Signed-off-by: memleakd <121398829+memleakd@users.noreply.github.com>
Signed-off-by: memleakd <121398829+memleakd@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Description
This PR adds
explain()to Query Builder so applications can inspect the execution plan for the currentSELECTquery without manually compiling and prefixing SQL.The helper intentionally keeps the first slice small:
EXPLAIN.EXPLAIN QUERY PLAN.DatabaseExceptionbecause their explain flows need different mechanics.DBDebug=falsequery failures returnfalse, matching normal builder execution behavior.explain(false)preserving it.This also adds
Model::explain()so model queries keep the expected soft-delete behavior, similar to other terminal builder operations.Tests cover compiled SQL, SQLite syntax, reset behavior, failure behavior, unsupported drivers, live execution, and Model soft deletes.
Checklist: