{"record":{"id":"3df475f544c7785b","repo":"risingwavelabs/risingwave","slug":"unsupported-function-0","errorCode":null,"errorMessage":"Unsupported function: {0}","messagePattern":"Unsupported function: (.+?)","errorType":"exception","errorClass":"ExprError","httpStatus":null,"severity":"error","filePath":"src/expr/core/src/error.rs","lineNumber":49,"sourceCode":"    }\n}\n\nimpl From<ContextUnavailable> for ExprError {\n    fn from(e: ContextUnavailable) -> Self {\n        ExprError::Context(e.0)\n    }\n}\n\n/// The error type for expression operations.\n#[derive(Error, ReportDebug)]\npub enum ExprError {\n    /// A collection of multiple errors in batch evaluation.\n    #[error(\"multiple errors:\\n{1}\")]\n    Multiple(ArrayRef, MultiExprError),\n\n    // Ideally \"Unsupported\" errors are caught by frontend. But when the match arms between\n    // frontend and backend are inconsistent, we do not panic with `unreachable!`.\n    #[error(\"Unsupported function: {0}\")]\n    UnsupportedFunction(String),\n\n    #[error(\"Unsupported cast: {0} to {1}\")]\n    UnsupportedCast(DataType, DataType),\n\n    #[error(\"Casting to {0} out of range\")]\n    CastOutOfRange(&'static str),\n\n    #[error(\"Numeric out of range\")]\n    NumericOutOfRange,\n\n    #[error(\"Numeric out of range: underflow\")]\n    NumericUnderflow,\n\n    #[error(\"Numeric out of range: overflow\")]\n    NumericOverflow,\n\n    #[error(\"Division by zero\")]","sourceCodeStart":31,"sourceCodeEnd":67,"githubUrl":"https://github.com/risingwavelabs/risingwave/blob/6469eb736d691e8e9b8a419a57edd6429ca77417/src/expr/core/src/error.rs#L31-L67","documentation":"ExprError::UnsupportedFunction is raised by the backend when asked to evaluate a function it has no implementation for. The comment in the source notes this normally indicates a frontend/backend match-arm mismatch — the frontend allowed a function the backend cannot build.","triggerScenarios":"A table function or expression node reaches backend ExpressionBuilder and its function kind falls into the catch-all arm; frontend and backend versions disagree on supported function sets.","commonSituations":"Rolling upgrades with version skew between frontend and compute nodes; newly added function queried while some nodes are stale; UDF registration missing on the compute node.","solutions":["Ensure all RisingWave nodes run the same version","Verify the function is implemented/supported for this context (e.g. batch vs stream)","Re-check UDF registration if the function is user-defined","Report a bug if frontend and backend versions match — it's an inconsistency"],"exampleFix":"// before (frontend allows, backend lacks arm)\nmatch expr.get_function_type() { ... } // unreachable arm -> UnsupportedFunction\n// after\n// add the missing match arm in the backend builder or restrict in frontend binder","handlingStrategy":"try-catch","validationCode":"// check function support before issuing query\n// e.g. verify function name appears in backend-supported list for your version","typeGuard":null,"tryCatchPattern":"match result {\n    Err(e) if e.to_string().starts_with(\"Unsupported function:\") => {\n        // rewrite query or upgrade cluster\n    }\n    r => r,\n}","preventionTips":["Keep all cluster nodes on the same version","Verify function availability in the docs before using in production SQL","Test new SQL against the target deployment version"],"tags":["unsupported","function","rust","frontend-backend"],"backgroundTag":"unsupported-operation","analyzedSha":"6469eb736d691e8e9b8a419a57edd6429ca77417","analyzedAt":"2026-09-11T21:06:21.487Z","contentChangedAt":"2026-09-11T21:06:21.487Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}