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
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