risingwavelabs/risingwave · error · ErrorCode::ArrayError

Array error

Error message

Array error: {0}

What it means

`ErrorCode::ArrayError` is the `#[from]` conversion of the `ArrayError` type from the array/data-block layer. It signals failures constructing or accessing columnar arrays: length mismatches, invalid null bitmaps, or out-of-range element access.

Solutions

  1. Note the exact SQL and data shape that triggered it
  2. Check for a known issue in the RisingWave tracker with the message
  3. Try simplifying the query or casting nested types to simpler ones as a workaround
  4. File a bug with a reproducible dataset
Defensive patterns

Strategy: try-catch

Validate before calling

null

Type guard

fn is_array_error(e: &RwError) -> bool { matches!(e.get_code(), ErrorCode::ArrayError(_)) }

Try / catch

match err.get_code() { ErrorCode::ArrayError(inner) => { log_bug(inner); fallback_query(); }, _ => propagate }

Prevention

When it happens

Trigger: Batch/stream execution builds or reads column arrays and an invariant fails: mismatched chunk lengths, bad offset/null buffers, or an internal array operation error converted via `#[from]`.

Common situations: Usually a RisingWave internal bug rather than user error; may appear after data with unusual encodings (deeply nested structs) or after version upgrades.

Understand the failure class

Background: "This is a bug, please report it": internal invariant violations, unreachable panics, and SNH errors explained — this error's family across 47 libraries.

Related errors


AI-assisted analysis of risingwavelabs/risingwave@6469eb736d (2026-09-11). Data as JSON: /api/errors/df49b5e49a4ecf0e. Report an issue: GitHub.

Appendix: source

Thrown at src/frontend/src/error.rs:88

        #[source]
        BoxedError,
    ),
    #[error("Expr error: {0}")]
    ExprError(
        #[source]
        #[backtrace]
        BoxedError,
    ),
    // TODO(error-handling): there's a limitation that `#[transparent]` can't be used with `#[backtrace]` if no `#[from]`
    // So we emulate a transparent error with "{0}" display here.
    #[error("{0}")]
    BatchError(
        #[source]
        #[backtrace]
        // `BatchError`
        BoxedError,
    ),
    #[error("Array error: {0}")]
    ArrayError(
        #[from]
        #[backtrace]
        ArrayError,
    ),
    #[cfg(feature = "datafusion")]
    #[error("DataFusion error: {0}")]
    DataFusionError(
        #[from]
        #[backtrace]
        datafusion_common::DataFusionError,
    ),
    #[error("Stream error: {0}")]
    StreamError(
        #[backtrace]
        #[source]
        BoxedError,
    ),

View on GitHub (pinned to 6469eb736d)