[8.15] [ESQL] Fix parsing of large magnitude negative numbers #110758
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.
Resolves #104323
This fixes and adds tests for the first of the two bullets in the linked issue. ExpressionBuilder#visitIntegerValue will attempt to parse a string as an integral value, and return a Literal of the appropriate type. The actual parsing happens in StringUtils#parseIntegral. That function has special handling for values that are larger than Long.MAX_VALUE where it attempts to turn them into unsigned longs, and if the number is still out of range, throw InvalidArgumentException. ExpressionBuilder catches that InvalidArgumentException and tries to parse a double instead. If, on the other hand, the value is smaller than Long.MIN_VALUE, StringUtils never enters the unsigned long path and just calls intValueExact, which throws ArithmeticException. This PR solves the issue by catching that ArithmeticException and rethrowing it as an InvalidArgumentException.