{"record":{"id":"916aea98099a06fe","repo":"databendlabs/databend","slug":"not-implemented-916aea","errorCode":null,"errorMessage":"not implemented","messagePattern":"not implemented","errorType":"panic","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/query/sql/src/planner/binder/udf.rs","lineNumber":232,"sourceCode":"\n                Ok(UserDefinedFunction {\n                    name,\n                    description,\n                    definition: PlanUDFDefinition::UDFServer(UDFServer {\n                        address: address.clone(),\n                        arg_names,\n                        arg_types: arg_datatypes,\n                        return_type,\n                        handler: handler.clone(),\n                        headers: headers.clone(),\n                        language: language.clone(),\n                        immutable: *immutable,\n                    }),\n                    created_on: Utc::now(),\n                    update_on: Utc::now(),\n                })\n            }\n            UDFDefinition::UDAFServer { .. } => unimplemented!(),\n            UDFDefinition::UDFScript {\n                arg_types,\n                return_type,\n                code,\n                handler,\n                language,\n                runtime_version,\n                imports,\n                packages,\n                immutable,\n            } => {\n                let parsed_language = language.parse::<UDFLanguage>()?;\n                UDFValidator::is_udf_script_allowed(&parsed_language)?;\n                let definition = create_udf_definition_script(\n                    arg_types,\n                    None,\n                    return_type,\n                    runtime_version,","sourceCodeStart":214,"sourceCodeEnd":250,"githubUrl":"https://github.com/databendlabs/databend/blob/288d84d76e20a2f8f7173bda9691eb6ece301aa9/src/query/sql/src/planner/binder/udf.rs#L214-L250","documentation":"Panic from `unimplemented!()` in the SQL binder when converting a UDF definition of the `UDAFServer` variant into a plan UDF. Aggregate UDFs backed by a remote UDAF server cannot yet be created or altered, so `bind_udf_definition` panics with 'not implemented' during CREATE/ALTER UDF planning.","triggerScenarios":"Executing `CREATE FUNCTION ... AGGREGATE` (bind_create_udf) or `ALTER FUNCTION` (bind_alter_udf) whose definition is `UDFDefinition::UDAFServer`; the binder at src/query/sql/src/planner/binder/udf.rs:232 panics.","commonSituations":"Users registering server-side aggregate UDFs expecting parity with scalar UDFs (UDFServer) that is already supported; scripts provisioned from setups that previously allowed UDAF syntax.","solutions":["Use a supported UDF kind instead: scalar `UDFServer` (remote function) or embedded `UDFScript`.","Remove the UDAF-server function definition from the DDL until server-side aggregate UDFs are released.","If aggregate semantics are needed now, express them with built-in aggregate functions or a lambda-based aggregation.","Optionally replace the panic with a user-facing planner error (ErrorCode::Unimplemented) so callers get a proper error, not a panic."],"exampleFix":"// before\nUDFDefinition::UDAFServer { .. } => unimplemented!(),\n// after\nUDFDefinition::UDAFServer { .. } => Err(ErrorCode::Unimplemented(\n    \"server-side aggregate UDFs (UDAFServer) are not supported yet\",\n)),","handlingStrategy":"validation","validationCode":"-- guard before running DDL\nSELECT function_kind FROM expected_registry WHERE name = 'my_udf';\n-- reject if kind == 'aggregate-server' until Databend supports UDAFServer","typeGuard":"fn is_supported_udf(def: &UDFDefinition) -> bool {\n    !matches!(def, UDFDefinition::UDAFServer { .. })\n}","tryCatchPattern":"match binder.bind_create_udf(stmt) {\n    Ok(plan) => execute(plan),\n    Err(e) if e.is_panic_or_unimplemented() => {\n        return Err(\"server-side aggregate UDFs are not supported\");\n    }\n    Err(e) => return Err(e),\n}","preventionTips":["Register scalar remote UDFs (UDFServer) instead of aggregate server UDFs","Use built-in aggregates for aggregation needs","Validate UDF definitions in migration scripts before CREATE FUNCTION","Upgrade Databend and re-check when UDAFServer lands"],"tags":["udf","planner","binder","unimplemented"],"backgroundTag":"method-not-implemented","analyzedSha":"288d84d76e20a2f8f7173bda9691eb6ece301aa9","analyzedAt":"2026-09-11T11:29:36.208Z","contentChangedAt":"2026-09-11T11:29:36.208Z","schemaVersion":2},"datasetVersion":"2026-09-16T04:17:20.429Z"}