{"record":{"id":"3e96194134e0c827","repo":"dbt-labs/dbt-core","slug":"error-3e9619","errorCode":null,"errorMessage":"{}","messagePattern":"\\{\\}","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/dbt-adapter/src/column/types.rs","lineNumber":103,"sourceCode":"                let columns = args.get::<Value>(\"columns\")?;\n                let columns = Column::vec_from_jinja_value(AdapterType::Databricks, columns)?;\n\n                Ok(Value::from(self.dbx_format_add_column_list(&columns)?))\n            }\n            \"format_remove_column_list\" => {\n                // TODO: ArgsIter\n                let mut args = ArgParser::new(args, None);\n                let columns = args.get::<Value>(\"columns\")?;\n                let columns = Column::vec_from_jinja_value(AdapterType::Databricks, columns)?;\n\n                Ok(Value::from(self.dbx_format_remove_column_list(&columns)?))\n            }\n            \"get_name\" => {\n                let mut args: ArgParser = ArgParser::new(args, None);\n                let column = args.get::<Value>(\"column\")?;\n                // FIXME: why is this DbtColumn and not Column?\n                let column = minijinja_value_to_typed_struct::<DbtColumn>(column).map_err(|e| {\n                    minijinja::Error::new(\n                        minijinja::ErrorKind::SerdeDeserializeError,\n                        e.to_string(),\n                    )\n                })?;\n\n                Ok(Value::from(self.dbx_get_name(&column)))\n            }\n            _ => Err(minijinja::Error::new(\n                minijinja::ErrorKind::UnknownMethod,\n                format!(\"Unknown method on ColumnStatic: '{name}'\"),\n            )),\n        }\n    }\n\n    fn call(\n        self: &Arc<Self>,\n        _state: &minijinja::State,\n        args: &[Value],","sourceCodeStart":85,"sourceCodeEnd":121,"githubUrl":"https://github.com/dbt-labs/dbt-core/blob/0267ce9170576975b76b64ce856b2e5848e96617/crates/dbt-adapter/src/column/types.rs#L85-L121","documentation":"Column.get_name() (a Databricks-specific ColumnStatic Jinja method) expects a `column` keyword argument that can be deserialized into a DbtColumn struct. When the Jinja Value passed as `column` is not a dict-like object with the fields DbtColumn requires (at minimum `name`, optionally `quote`), minijinja's typed-struct deserialization fails and the library re-wraps it as a SerdeDeserializeError with message \"{}\". It signals that the wrong kind of value was passed to Column.get_name(), not a database or SQL problem.","triggerScenarios":"Calling `Column.get_name(column=...)` from a Jinja materialization/macro with: (1) no `column` keyword arg at all, (2) a non-dict value (string, number, list, Column object instead of a node-column dict), or (3) a dict missing required DbtColumn fields such as `name`.","commonSituations":"Adapter materialization macros (e.g. Databricks) passing an API Column object instead of the raw node column dict; a renamed/missing field in a custom macro that builds the column dict by hand; passing results of `columns` iteration where items are already Column objects; version drift where DbtColumn gained a required field.","solutions":["Pass a dict with at least the `name` key (and `quote` if desired): Column.get_name(column={'name': col_name, 'quote': True}).","If you have a Column object from from_description/create, use its `name`/`quoted` attributes directly instead of get_name().","Inspect the wrapped SerdeDeserializeError message (the `{}` payload) to see which field failed to deserialize and fix the dict keys/types.","Ensure the call goes through the `column=` keyword; positional args are not read by ArgParser here."],"exampleFix":"// before (Jinja)\n{% set col = adapter.Column.from_description('id', 'INT') %}\n{% set n = Column.get_name(column=col) %}\n// after\n{% set n = Column.get_name(column={'name': 'id', 'quote': false}) %}","handlingStrategy":"validation","validationCode":"// Jinja: verify the value is a dict with a name before calling\n{% if column is mapping and column.name is defined %}\n  {% set n = Column.get_name(column=column) %}\n{% else %}\n  {{ exceptions.raise_compiler_error(\"get_name requires a column dict with a 'name' field\") }}\n{% endif %}","typeGuard":"fn is_column_dict(v: &minijinja::Value) -> bool {\n    v.as_object().map(|o| o.get_attr(\"name\").map(|n| !n.is_undefined()).unwrap_or(false)).unwrap_or(false)\n}","tryCatchPattern":null,"preventionTips":["Always pass the node-level column dict (with `name`/`quote`), not a Column object.","Use the `column=` keyword argument explicitly.","In macros, assert the column dict shape early with exceptions.raise_compiler_error.","Track DbtColumn schema changes when upgrading dbt versions."],"tags":["jinja","serialization","adapter","databricks","column"],"backgroundTag":"schema-validation-failed","analyzedSha":"0267ce9170576975b76b64ce856b2e5848e96617","analyzedAt":"2026-09-07T21:53:39.732Z","contentChangedAt":"2026-09-07T21:53:39.732Z","schemaVersion":2},"datasetVersion":"2026-09-14T11:17:12.474Z"}