{"record":{"id":"144927b29ae819e9","repo":"risingwavelabs/risingwave","slug":"internal-error-entered-unreachable-code-144927","errorCode":null,"errorMessage":"internal error: entered unreachable code","messagePattern":"internal error: entered unreachable code","errorType":"panic","errorClass":null,"httpStatus":null,"severity":"critical","filePath":"src/frontend/src/handler/create_index.rs","lineNumber":316,"sourceCode":"        return Err(ErrorCode::InvalidInputSyntax(\n            \"vector index cannot define DISTRIBUTED BY\".to_owned(),\n        )\n        .into());\n    }\n\n    for column in distributed_by {\n        let expr_impl = binder.bind_expr(&column)?;\n        distributed_columns_expr.push(expr_impl);\n    }\n\n    // Remove duplicate column of index columns\n    let mut set = HashSet::new();\n    index_columns_ordered_expr = index_columns_ordered_expr\n        .into_iter()\n        .filter(|(expr, _)| match expr {\n            ExprImpl::InputRef(input_ref) => set.insert(input_ref.index),\n            ExprImpl::FunctionCall(_) => true,\n            _ => unreachable!(),\n        })\n        .collect_vec();\n\n    // Remove include columns are already in index columns\n    include_columns_expr = include_columns_expr\n        .into_iter()\n        .filter(|expr| match expr {\n            ExprImpl::InputRef(input_ref) => set.insert(input_ref.index),\n            _ => unreachable!(),\n        })\n        .collect_vec();\n\n    // Remove duplicate columns of distributed by columns\n    let mut set = HashSet::new();\n    let distributed_columns_expr = distributed_columns_expr\n        .into_iter()\n        .filter(|expr| match expr {\n            ExprImpl::InputRef(input_ref) => set.insert(input_ref.index),","sourceCodeStart":298,"sourceCodeEnd":334,"githubUrl":"https://github.com/risingwavelabs/risingwave/blob/6469eb736d691e8e9b8a419a57edd6429ca77417/src/frontend/src/handler/create_index.rs#L298-L334","documentation":"After binding CREATE INDEX columns, each index expression must be either a plain column reference (InputRef) or a function call; anything else is an invariant violation and hits unreachable!(). The binder is expected to have normalized/rejected other expression shapes earlier.","triggerScenarios":"CREATE INDEX ON t (expr) where expr survives as an ExprImpl variant other than InputRef or FunctionCall (e.g. a subquery, literal, or unnormalized expression) reaching the filter in gen_create_index_plan.","commonSituations":"Indexing expressions the binder didn't fully normalize; SQL dialect edges where a complex expression slips past earlier validation.","solutions":["Simplify the index expression to plain columns or simple function calls","Index only supported expression forms (columns and deterministic function calls)","Report the SQL to RisingWave if a valid-looking expression triggers this — it is likely a bug"],"exampleFix":"-- before\nCREATE INDEX idx ON t (1 + 2); -- non-column/function expr\n-- after\nCREATE INDEX idx ON t (col_a, upper(col_b));","handlingStrategy":"validation","validationCode":"-- Verify index expressions are columns or function calls only\nCREATE INDEX idx ON t (col_a, fn(col_b)); -- allowed forms","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Index only columns and simple deterministic function calls","Avoid literals/subqueries in index expressions","Test DDL on dev before production"],"tags":["frontend","index","unreachable","expression"],"backgroundTag":"internal-invariant-violation","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"}