risingwavelabs/risingwave · error · ExprError
invalid state: {0}
Error message
invalid state: {0} What it means
ExprError::InvalidState is a generic catch-all variant in the expression error enum indicating the expression engine reached a state that should be impossible or unsupported. It wraps an arbitrary message string describing the specific invariant that was violated. Because it is 'invalid state', it usually signals a bug or an unhandled internal condition rather than bad user input.
Source
Thrown at src/expr/core/src/error.rs:119
#[error("Context {0} not found")]
Context(&'static str),
#[error("field name must not be null")]
FieldNameNull,
#[error("too few arguments for format()")]
TooFewArguments,
#[error(
"null value in column \"{col_name}\" of relation \"{table_name}\" violates not-null constraint"
)]
NotNullViolation {
col_name: Box<str>,
table_name: Box<str>,
},
#[error("invalid state: {0}")]
InvalidState(String),
/// Function error message returned by UDF.
/// TODO: replace with `Function`
#[error("{0}")]
Custom(String),
/// Error from a function call.
///
/// Use [`ExprError::function`] to create this error.
#[error("error while evaluating expression `{display}`")]
Function {
display: Box<str>,
#[backtrace]
// We don't use `anyhow::Error` because we don't want to always capture the backtrace.
source: Box<dyn std::error::Error + Send + Sync>,
},
}View on GitHub (pinned to 6469eb736d)
Solutions
- Read the wrapped message string to identify which invariant failed
- Check for version mismatch between frontend/meta/stream/batch components and upgrade all nodes consistently
- Search the codebase for the message to locate the throwing site and determine whether it is a known unsupported path
- File a bug with the full message and query if the state should be valid
Defensive patterns
Strategy: try-catch
Try / catch
match err.downcast_ref::<ExprError>() { Some(ExprError::InvalidState(msg)) => log_bug_and_report(msg), _ => propagate(err) } Prevention
- Keep frontend and compute component versions consistent in deployments
- Treat this error as a bug: capture the wrapped message and query for reports
- Search the repo for the message before filing an issue
When it happens
Trigger: Any code path in the expr crates that calls ExprError::InvalidState(format!(...)) when an internal invariant fails — e.g. an enum variant, phase, or expression shape the code assumed could not occur.
Common situations: Hitting an unimplemented or logically unreachable branch while evaluating expressions; version mismatches between frontend planning and expression execution where a new expression kind is not handled downstream.
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
- Row sequential scan should not have input executor!
- Source should not have input executor!
- Row sequential scan should not have input executor!
- ValuesExecutor should have no child!
- VectorIndexNearest should have an input executor!
AI-assisted analysis of risingwavelabs/risingwave@6469eb736d (2026-09-11).
Data as JSON: /api/errors/64d8e0752d52c593.
Report an issue: GitHub.