{"record":{"id":"391ae5f85f5be90d","repo":"dbt-labs/dbt-core","slug":"valid-incremental-strategies-not-implemented","errorCode":null,"errorMessage":"valid_incremental_strategies not implemented","messagePattern":"valid_incremental_strategies not implemented","errorType":"panic","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/dbt-adapter/src/adapter/adapter_impl.rs","lineNumber":656,"sourceCode":"            Postgres | DuckDB | LakeCompute => &[Append, DeleteInsert, Merge, Microbatch],\n            Snowflake => &[Append, DeleteInsert, InsertOverwrite, Merge, Microbatch],\n            Bigquery => &[Append],\n            Databricks => &[\n                Append,\n                DeleteInsert,\n                Merge,\n                InsertOverwrite,\n                ReplaceWhere,\n                Microbatch,\n            ],\n            Redshift => &[Append, DeleteInsert, Merge, Microbatch],\n            Fabric => &[Append, DeleteInsert, Merge, Microbatch],\n            Salesforce => &[Append, Merge],\n            ClickHouse => &[Append, DeleteInsert, InsertOverwrite, Microbatch, Legacy],\n            Spark => &[Append, Merge, InsertOverwrite, Microbatch],\n            Exasol => &[Append, DeleteInsert, Merge, Microbatch],\n            Athena | Starburst | Trino | Datafusion | Dremio | Oracle => {\n                unimplemented!(\"valid_incremental_strategies not implemented\")\n            }\n        }\n    }\n\n    /// Redact credentials expressions from DDL statements\n    ///\n    /// DatabricksAdapter https://github.com/databricks/dbt-databricks/blob/2f11abb306a400cde32b27891b766bf41a11fb1f/dbt/adapters/databricks/impl.py#L833\n    pub fn redact_credentials(&self, sql: &str) -> AdapterResult<String> {\n        if self.adapter_type() != Databricks {\n            return Err(AdapterError::new(\n                AdapterErrorKind::NotSupported,\n                \"redact_credentials is a Databricks-specific function\",\n            ));\n        }\n        let Some(caps) = CREDENTIAL_IN_COPY_INTO_REGEX.captures(sql) else {\n            // WARN: Malformed input by user means credentials may leak.\n            // However, this _is_ the fallback strategy implemented in Python.\n            return Ok(sql.to_string());","sourceCodeStart":638,"sourceCodeEnd":674,"githubUrl":"https://github.com/dbt-labs/dbt-core/blob/0267ce9170576975b76b64ce856b2e5848e96617/crates/dbt-adapter/src/adapter/adapter_impl.rs#L638-L674","documentation":"AdapterImpl::valid_incremental_strategies panics via unimplemented!() when called on adapters whose valid incremental strategies table has no entry (Athena, Starburst, Trino, Datafusion, Dremio, Oracle). The function returns the list of supported incremental strategies per adapter (Append, Merge, DeleteInsert, etc.), and these adapters simply have no mapping yet in the Rust port. The panic aborts the thread rather than returning a recoverable Result.","triggerScenarios":"Calling AdapterImpl::valid_incremental_strategies (directly or via get_incremental_strategy_macro during materialization strategy lookup) while self.adapter_type() is Athena, Starburst, Trino, Datafusion, Dremio, or Oracle.","commonSituations":"Running an incremental model with any of these adapters in the Rust dbt engine; using the incremental_strategy macro resolution path on an adapter whose incremental support has not been ported yet.","solutions":["Switch to an adapter with implemented incremental strategies (e.g. Postgres, Snowflake, BigQuery, Databricks, ClickHouse, Spark, Fabric, Exasol, Salesforce).","If the adapter must be supported, add the adapter to the match in crates/dbt-adapter/src/adapter/adapter_impl.rs:656 with its strategy list.","Intercept the panic at the FFI/Jinja boundary or feature-gate incremental materializations for these adapters until implemented."],"exampleFix":"// before (adapter_impl.rs:656)\nAthena | Starburst | Trino | Datafusion | Dremio | Oracle => {\n    unimplemented!(\"valid_incremental_strategies not implemented\")\n}\n// after\nAthena | Starburst | Trino | Datafusion | Dremio | Oracle => {\n    &[Append, DeleteInsert, InsertOverwrite, Microbatch]\n}","handlingStrategy":"validation","validationCode":"const SUPPORTED_INCREMENTAL: &[&str] = &[\"postgres\",\"snowflake\",\"bigquery\",\"databricks\",\"redshift\",\"duckdb\",\"clickhouse\",\"spark\",\"fabric\",\"exasol\",\"salesforce\"];\nif !SUPPORTED_INCREMENTAL.contains(&adapter_type.as_str()) {\n    return Err(format!(\"incremental strategies not implemented for {adapter_type}\"));\n}","typeGuard":"fn supports_incremental(adapter_type: &AdapterType) -> bool {\n    !matches!(adapter_type, AdapterType::Athena | AdapterType::Starburst | AdapterType::Trino | AdapterType::Datafusion | AdapterType::Dremio | AdapterType::Oracle)\n}","tryCatchPattern":null,"preventionTips":["Check adapter capability before enabling incremental materialization in dbt_project.yml","Keep an allowlist of adapters tested with incremental models","Pin models using incremental strategies to adapters with a filled strategy table"],"tags":["rust","adapter","incremental-strategies","unimplemented"],"backgroundTag":"method-not-implemented","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"}