Prevent sorting and count queries for non-SELECT statements.#4052
Closed
kssumin wants to merge 1 commit intospring-projects:mainfrom
Closed
Prevent sorting and count queries for non-SELECT statements.#4052kssumin wants to merge 1 commit intospring-projects:mainfrom
kssumin wants to merge 1 commit intospring-projects:mainfrom
Conversation
Add statement type detection to QueryEnhancer implementations to validate operations. QueryEnhancer now throws IllegalStateException when attempting to create count queries or apply sorting to INSERT, UPDATE, DELETE, or MERGE statements, as these operations are only valid for SELECT queries. Signed-off-by: kssumin <ksoomin25@gmail.com>
mp911de
pushed a commit
that referenced
this pull request
Oct 21, 2025
Add statement type detection to QueryEnhancer implementations to validate operations. QueryEnhancer now throws IllegalStateException when attempting to create count queries or apply sorting to INSERT, UPDATE, DELETE, or MERGE statements, as these operations are only valid for SELECT queries. Signed-off-by: kssumin <ksoomin25@gmail.com> Original pull request: #4052 Closes #2856
mp911de
added a commit
that referenced
this pull request
Oct 21, 2025
Update author tags. Refine introspection defaults instead of assuming SELECT statements by default. Extract code duplications from introspection to a mutable QueryInformationHolder. Retrofit AOT query derivation to skip count query creation for non-SELECT queries. Original pull request: #4052 See #2856
Member
|
Thank you for your contribution. That's merged and polished now. The summary above looks as if it was AI-generated from the changeset which is basically repeating all technical aspects that are immediately visible from the change itself. For the future, descriptions should rather talk about the motivation and aspects that are introduced by a change as repeating what the diff is going to contain is rather noise and distracting from the actual change. |
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.
Changes
This PR addresses issue #2856 by adding proper validation to
QueryEnhancerimplementations to prevent invalid operations on non-SELECT statements.Summary
Previously,
QueryEnhancerwould silently return default values or apply inappropriate operations when attempting to:This behavior was problematic as it could lead to unexpected results or silent failures.
What Changed
Statement Type Detection
StatementTypeenum toQueryInformationclassDefaultQueryEnhancerJpqlQueryIntrospector,HqlQueryIntrospector,EqlQueryIntrospector) to detect and propagate statement typesValidation Logic
QueryEnhancer.rewrite(): Now throwsIllegalStateExceptionwhen attempting to apply sorting to non-SELECT statementsQueryEnhancer.createCountQueryFor(): Now throwsIllegalStateExceptionwhen attempting to create count queries for non-SELECT statementsAffected Classes
DefaultQueryEnhancer: Added statement type detection and validationJpaQueryEnhancer: Added validation for sorting and count queriesJSqlParserQueryEnhancer: Changed from returning original query to throwing exceptionsQueryInformation: AddedStatementTypeenum and helper methodsHibernateQueryInformation: Extended to support statement typeTest Coverage
QueryEnhancerUnitTestsfor JPQL queries:JSqlParserQueryEnhancerUnitTestsfor native queries:Closes: #2856