Prevent sorting and count queries for non-SELECT statements. #4052
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
QueryEnhancer
implementations to prevent invalid operations on non-SELECT statements.Summary
Previously,
QueryEnhancer
would 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
StatementType
enum toQueryInformation
classDefaultQueryEnhancer
JpqlQueryIntrospector
,HqlQueryIntrospector
,EqlQueryIntrospector
) to detect and propagate statement typesValidation Logic
QueryEnhancer.rewrite()
: Now throwsIllegalStateException
when attempting to apply sorting to non-SELECT statementsQueryEnhancer.createCountQueryFor()
: Now throwsIllegalStateException
when 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
: AddedStatementType
enum and helper methodsHibernateQueryInformation
: Extended to support statement typeTest Coverage
QueryEnhancerUnitTests
for JPQL queries:JSqlParserQueryEnhancerUnitTests
for native queries:Closes: #2856