{"record":{"id":"e44adc7ee3272870","repo":"pola-rs/polars","slug":"not-implemented-e44adc","errorCode":null,"errorMessage":"not implemented","messagePattern":"not implemented","errorType":"panic","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/polars-python/src/lazyframe/visitor/nodes.rs","lineNumber":195,"sourceCode":"            },\n            Some(DeletionFilesList::Delta(provider)) => {\n                (\"delta-deletion-vector\", provider.callback().0.clone_ref(py))\n                    .into_pyobject(py)?\n                    .into_any()\n                    .unbind()\n            },\n        })\n    }\n\n    /// One of:\n    /// * None\n    /// * (\"iceberg-column-mapping\", <unimplemented>)\n    #[getter]\n    fn column_mapping(&self, py: Python<'_>) -> PyResult<Py<PyAny>> {\n        Ok(match &self.inner.column_mapping {\n            None => py.None().into_any(),\n\n            Some(ColumnMapping::Iceberg { .. }) => unimplemented!(),\n        })\n    }\n}\n\n#[pyclass(frozen)]\n/// Scan a table from file\npub struct Scan {\n    #[pyo3(get)]\n    paths: Py<PyAny>,\n    #[pyo3(get)]\n    file_info: Py<PyAny>,\n    #[pyo3(get)]\n    hive_parts: Option<PyDataFrame>,\n    #[pyo3(get)]\n    predicate: Option<PyExprIR>,\n    #[pyo3(get)]\n    file_options: PyFileOptions,\n    #[pyo3(get)]","sourceCodeStart":177,"sourceCodeEnd":213,"githubUrl":"https://github.com/pola-rs/polars/blob/df599052daf96e7a9cc30a3b0c6bd25d6947e3c0/crates/polars-python/src/lazyframe/visitor/nodes.rs#L177-L213","documentation":"In polars-python's IR node visitor, the column_mapping getter of a Scan node only handles None; an Iceberg column mapping (Some(ColumnMapping::Iceberg)) panics with unimplemented!(). Iceberg hidden column-mapping (name-id encoded field names) has no Python-side representation yet.","triggerScenarios":"Using the Python lazyframe IR visitor API to inspect plan nodes for a scan of an Iceberg table where column mapping is active (the table has had columns renamed/dropped, triggering Iceberg's field-id name mapping), then accessing node.column_mapping.","commonSituations":"Plan-inspection tooling, query rewriters, or optimizers built on the IR visitor that walk an Iceberg scan; Iceberg tables evolve (rename/drop) so mapping appears unexpectedly later.","solutions":["Guard access: check whether the scan exposes column mapping and skip the attribute for Iceberg-mapped scans","Read the Iceberg table without column mapping enabled (snapshot/schema choice) if you control scan options","Upgrade polars - Iceberg mapping support in the visitor is on the roadmap; track the changelog"],"exampleFix":"# before\nmapping = scan_node.column_mapping  # panics for Iceberg column mapping\n\n# after\nmapping = getattr(scan_node, \"column_mapping\", None)\nif mapping is None:\n    ...  # safe path; skip Iceberg-mapped scans","handlingStrategy":"type-guard","validationCode":"has_iceberg_mapping = getattr(scan_node, \"column_mapping\", None) is not None","typeGuard":"def scan_node_inspectable(scan_node) -> bool:\n    # Iceberg column mapping is not exposed to Python yet\n    return not hasattr(scan_node, \"column_mapping\") or scan_node.column_mapping is None","tryCatchPattern":"try:\n    mapping = scan_node.column_mapping\nexcept Exception:\n    mapping = None  # Iceberg-mapped scans: skip attribute until supported","preventionTips":["Version-gate IR-visitor tooling against Iceberg scans","Check for renamed/dropped columns in Iceberg metadata - they enable hidden field-id mapping"],"tags":["rust","polars","panic","unimplemented","python","iceberg","ir-visitor","scan"],"backgroundTag":null,"analyzedSha":"df599052daf96e7a9cc30a3b0c6bd25d6947e3c0","analyzedAt":"2026-08-16T12:10:03.978Z","schemaVersion":2},"datasetVersion":"2026-08-16T13:17:31.715Z"}