Better query error classification for user errors #18949
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
Some invalid queries, like:
select SPECTATOR_PERCENTILE(null, '99.99') from "foo"throw
which causes Druid to incorrectly return 500 to the user instead of 400 (user error).
This change checks instanceof before casting RexLiteral.value() to Number in SQL aggregators. When users pass invalid queries (e.g., a string literal '99.99' where numeric literals are expected),
InvalidSqlInputexception is thrown, which returns 400 (USER/INVALID_INPUT) instead of 500 (ADMIN/UNCATEGORIZED). This improves error diagnostics for invalid queries.Key changed/added classes in this PR
SpectatorHistogramPercentileSqlAggregatorHllSketchBaseSqlAggregatorDoublesSketchApproxQuantileSqlAggregatorThetaSketchBaseSqlAggregatorBloomFilterSqlAggregatorQuantileSqlAggregatorArrayConcatSqlAggregatorArraySqlAggregatorStringSqlAggregatorRelease note
Improved: type validation for numeric literal parameters in SQL aggregator functions to prevent ClassCastException and provide better error message categorized as user error