MCPcopy Create free account
hub / github.com/MaterializeInc/materialize / eval_error_code

Function eval_error_code

src/adapter/src/error.rs:336–467  ·  view source on GitHub ↗

Maps an [`EvalError`] to the appropriate SQLSTATE. Historically every `EvalError` fell through to `INTERNAL_ERROR` (`XX000`), but the overwhelming majority are user-facing data exceptions (class 22) or other well-defined conditions, not internal errors. This match is deliberately exhaustive — with no wildcard — so that adding a new `EvalError` variant is a compile error until it is assigned a cod

(err: &EvalError)

Source from the content-addressed store, hash-verified

334/// never silently regress to `XX000`. Codes are chosen to match PostgreSQL
335/// where an equivalent error exists.
336fn eval_error_code(err: &EvalError) -> SqlState {
337 match err {
338 // Division and mathematical domain errors.
339 EvalError::DivisionByZero => SqlState::DIVISION_BY_ZERO,
340 EvalError::NegSqrt | EvalError::ComplexOutOfRange(_) => {
341 SqlState::INVALID_ARGUMENT_FOR_POWER_FUNCTION
342 }
343 EvalError::InfinityOutOfDomain(_)
344 | EvalError::NegativeOutOfDomain(_)
345 | EvalError::ZeroOutOfDomain(_)
346 | EvalError::OutOfDomain(..)
347 | EvalError::Undefined(_) => SqlState::INVALID_PARAMETER_VALUE,
348
349 // Out-of-range numeric, integer, and float values.
350 EvalError::FloatOverflow
351 | EvalError::FloatUnderflow
352 | EvalError::NumericFieldOverflow
353 | EvalError::Float32OutOfRange(_)
354 | EvalError::Float64OutOfRange(_)
355 | EvalError::Int16OutOfRange(_)
356 | EvalError::Int32OutOfRange(_)
357 | EvalError::Int64OutOfRange(_)
358 | EvalError::UInt16OutOfRange(_)
359 | EvalError::UInt32OutOfRange(_)
360 | EvalError::UInt64OutOfRange(_)
361 | EvalError::OidOutOfRange(_)
362 | EvalError::MzTimestampOutOfRange(_)
363 | EvalError::MzTimestampStepOverflow
364 | EvalError::CharOutOfRange => SqlState::NUMERIC_VALUE_OUT_OF_RANGE,
365
366 // Out-of-range datetime and interval values.
367 EvalError::DateOutOfRange
368 | EvalError::TimestampOutOfRange
369 | EvalError::TimestampCannotBeNan
370 | EvalError::DateBinOutOfRange(_)
371 | EvalError::DateDiffOverflow { .. } => SqlState::DATETIME_FIELD_OVERFLOW,
372 EvalError::IntervalOutOfRange(_) => SqlState::INTERVAL_FIELD_OVERFLOW,
373
374 // Parse/cast failures, plus other malformed textual/encoded input.
375 EvalError::Parse(e) => parse_error_code(e),
376 EvalError::ParseHex(_)
377 | EvalError::InvalidBase64Equals
378 | EvalError::InvalidBase64Symbol(_)
379 | EvalError::InvalidBase64EndSequence => SqlState::INVALID_TEXT_REPRESENTATION,
380 EvalError::InvalidByteSequence { .. } => SqlState::CHARACTER_NOT_IN_REPERTOIRE,
381 EvalError::CharacterNotValidForEncoding(_) | EvalError::CharacterTooLargeForEncoding(_) => {
382 SqlState::PROGRAM_LIMIT_EXCEEDED
383 }
384
385 // Invalid argument values.
386 EvalError::InvalidTimezone(_)
387 | EvalError::InvalidTimezoneInterval
388 | EvalError::InvalidTimezoneConversion
389 | EvalError::InvalidIanaTimezoneId(_)
390 | EvalError::InvalidLayer { .. }
391 | EvalError::InvalidEncodingName(_)
392 | EvalError::InvalidHashAlgorithm(_)
393 | EvalError::InvalidDatePart(_)

Callers 1

codeMethod · 0.85

Calls 1

parse_error_codeFunction · 0.85

Tested by

no test coverage detected